{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/scripts/components/accordion.js","webpack:///./src/scripts/components/form.js","webpack:///./src/scripts/components/tabs.js","webpack:///./src/scripts/frontend/autoload-components.js","webpack:///./src/scripts/frontend/core.js","webpack:///./src/scripts/frontend/main.js","webpack:///./src/scripts/frontend/site-header.js","webpack:///./src/scripts/inc/component-functions.js","webpack:///./src/scripts/inc/cookie.js","webpack:///./src/scripts/inc/global.js"],"names":["Accordion","itemsTarget","duration","defaultOpen","allowMultiOpen","args","items","target","querySelectorAll","settings","length","console","warn","setAttribute","index","forEach","item","children","tab","panel","tabID","componentID","panelID","style","display","addEventListener","e","preventDefault","current","querySelector","close","window","getComputedStyle","open","first","classList","add","removeAttribute","removeProperty","height","offsetHeight","overflow","paddingTop","paddingBottom","transitionProperty","transitionDuration","setTimeout","remove","ShiftrComponent","head","Layout","Form","validate","submission","validationClasses","focus","success","error","submitMessageCopy","shiftr","form","fields","submitButton","submitButtonOrgLabel","innerHTML","actionClass","fieldEvents","getStyles","bind","submit","field","fieldWrapper","parentElement","validateErrorActive","nodeName","type","value","checkValidity","clearValidationError","checked","displayValidationError","notice","createEl","validationMessage","appendChild","removeChild","disabled","fetch","ajaxUrl","method","body","FormData","then","res","json","data","response","formName","dataset","shiftrForm","location","href","origin","log","formSubmitOutput","svgDefaultAtts","message","event","clearSubmitMessage","dataLayer","push","autoClearDelay","autoClear","reset","i","cssRequested","stylesheet","theme","removeEventListener","Tabs","tabList","tabPanel","tabs","panels","activateTab","deactivateCurrentTab","currentTab","currentPanel","getAttribute","document","forms","el","f","init","accordions","a","t","host","CookieNotice","toggleButton","groupEntities","visible","hash","toggle","blocks","block","trigger","modal","closeButton","hideModal","videoEl","pause","escHideModal","key","play","triggers","embed","match","videoGallery","facilitiesBlock","facilities","facilitiesContainer","expandBtn","expandCount","generateLoopHeight","slice","reduce","parseFloat","getPropertyValue","textContent","innerWidth","expandButton","loadMoreTrigger","url","URL","loadMoreParams","URLSearchParams","search","loadMoreData","postType","get","loop","page","maxPageReached","Event","orgWording","actionData","append","credentials","fragment","max_num_pages","newPosts","post","dispatchEvent","bookingForm","observer","IntersectionObserver","entries","entry","isIntersecting","boundingClientRect","y","threshold","observe","videoElem","startPlayPromise","undefined","playAttempt","setInterval","clearInterval","firstImage","firstImageRect","getBoundingClientRect","span","top","fixedAwardImage","onscroll","innerHeight","scrollY","offersPopupWrapper","offersPopupBtn","offersPopup","offersPopupClose","popupAutoOpen","iconicFrontpage","videoPlayer","videoControls","audio","videoPLaying","audioPlaying","muted","formTrigger","formModal","formModalClose","siteHeader","pointerEvents","closeFormModal","header","mobileMenuTrigger","mobileMenu","mobileMenuSubMenus","menu","menuSubMenus","headerWrapper","announcementBar","scrollPosition","previousScroll","shouldResizeLogo","displayStickyHeader","scrollPos","pageYOffset","documentElement","scrollTop","vh","contains","resetSvgSiteLogo","passive","banner","toggleBannerVisibility","checkBannerVisibility","bannerForMobile","stopPropagation","openMobileMenu","closeMobileMenu","displayClass","link","subMenuEl","removeOpen","clearTimeout","subMenu","clean","node","n","childNodes","child","nodeType","test","nodeValue","logo","hasChildNodes","svg","viewbox","values","split","viewBoxWidth","viewBoxHeight","mainGroup","ratio","width","getBBox","Math","round","floor","newVewBoxHeight","Error","Object","keys","defaultSettings","parseComponentData","assign","componentSlug","generateComponentID","id","strToBool","str","component","hasAttribute","s","$ID","random","getElementById","cookieName","cookie","indexOf","expiry","Date","setDate","getDate","getElementsByTagName","createElement","vw","m","l","xl","max","x","fn","callback","runOnce","run","allow"],"mappings":";QAAA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;;QAEA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;;;QAGA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA,0CAA0C,gCAAgC;QAC1E;QACA;;QAEA;QACA;QACA;QACA,wDAAwD,kBAAkB;QAC1E;QACA,iDAAiD,cAAc;QAC/D;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA,yCAAyC,iCAAiC;QAC1E,gHAAgH,mBAAmB,EAAE;QACrI;QACA;;QAEA;QACA;QACA;QACA,2BAA2B,0BAA0B,EAAE;QACvD,iCAAiC,eAAe;QAChD;QACA;QACA;;QAEA;QACA,sDAAsD,+DAA+D;;QAErH;QACA;;;QAGA;QACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AClFA;;;AAGA;AAGA;;;;IAGqBA,S;;;;;;;oCAED;AACZ,aAAO,WAAP;AACH;;;sCAEiB;AACd,aAAO;AACHC,mBAAW,EAAE,yBADV;AAEHC,gBAAQ,EAAE,GAFP;AAGHC,mBAAW,EAAE,CAHV;AAIHC,sBAAc,EAAE;AAJb,OAAP;AAMH;AAED;;;;;;AAGA,uBAAuB;AAAA;;AAAA;;AAAA,sCAAPC,IAAO;AAAPA,UAAO;AAAA;;AACnB,oDAAUA,IAAV;AAEA,UAAKC,KAAL,GAAa,MAAKC,MAAL,CAAYC,gBAAZ,CAA8B,MAAKC,QAAL,CAAcR,WAA5C,CAAb;AAHmB;AAItB;AAED;;;;;;;2BAGO;AAAA;;AAEH,UAAK,KAAKK,KAAL,CAAWI,MAAX,IAAqB,CAA1B,EAA8B;AAC1BC,eAAO,CAACC,IAAR,CAAc,6CAAd;AACA,eAAO,KAAP;AACH;;AAED,WAAKL,MAAL,CAAYM,YAAZ,CAA0B,MAA1B,EAAkC,SAAlC;AAEA;;;;AAGA,UAAIC,KAAK,GAAG,CAAZ;AACA,WAAKR,KAAL,CAAWS,OAAX,CAAoB,UAAAC,IAAI,EAAI;AAAA,4CAEDA,IAAI,CAACC,QAFJ;AAAA,YAEhBC,GAFgB;AAAA,YAEXC,KAFW;;AAIxB,YAAMC,KAAK,aAAM,MAAI,CAACC,WAAX,kBAA8BP,KAA9B,CAAX;AAAA,YACMQ,OAAO,aAAM,MAAI,CAACD,WAAX,oBAAgCP,KAAhC,CADb,CAJwB,CAOxB;;AACAI,WAAG,CAACL,YAAJ,CAAkB,IAAlB,EAAwBO,KAAxB;AACAF,WAAG,CAACL,YAAJ,CAAkB,MAAlB,EAA0B,KAA1B;AACAK,WAAG,CAACL,YAAJ,CAAkB,eAAlB,EAAmC,KAAnC;AACAK,WAAG,CAACL,YAAJ,CAAkB,eAAlB,EAAmCS,OAAnC,EAXwB,CAaxB;;AACAH,aAAK,CAACI,KAAN,CAAYC,OAAZ,GAAsB,MAAtB;AACAL,aAAK,CAACN,YAAN,CAAoB,IAApB,EAA0BS,OAA1B;AACAH,aAAK,CAACN,YAAN,CAAoB,MAApB,EAA4B,UAA5B;AACAM,aAAK,CAACN,YAAN,CAAoB,iBAApB,EAAuCO,KAAvC;AACAD,aAAK,CAACN,YAAN,CAAoB,QAApB,EAA8B,EAA9B;AAEAK,WAAG,CAACO,gBAAJ,CAAsB,OAAtB,EAA+B,UAAAC,CAAC,EAAI;AAChCA,WAAC,CAACC,cAAF;;AAEA,cAAK,CAAE,MAAI,CAAClB,QAAL,CAAcL,cAArB,EAAsC;AAClC,gBAAMwB,OAAO,GAAG,MAAI,CAACrB,MAAL,CAAYsB,aAAZ,CAA2B,qCAA3B,KAAsE,IAAtF;;AAEA,gBAAKD,OAAO,IAAIZ,IAAX,IAAmBY,OAAO,KAAK,IAApC,EAA2C;AACvC,oBAAI,CAACE,KAAL,CAAYF,OAAZ;AACH;AACJ;;AAED,cAAKG,MAAM,CAACC,gBAAP,CAAyBb,KAAzB,EAAiCK,OAAjC,KAA6C,MAAlD,EAA2D;AACvD,kBAAI,CAACS,IAAL,CAAWjB,IAAX;AAEH,WAHD,MAGO;AACH,kBAAI,CAACc,KAAL,CAAYd,IAAZ;AACH;AACJ,SAjBD;AAmBAF,aAAK;AACR,OAxCD;AA0CA;;;;AAGA,UAAK,KAAKL,QAAL,CAAcN,WAAd,IAA6B,CAAlC,EAAsC;AAClC,YAAM+B,KAAK,GAAG,KAAK5B,KAAL,CAAY,KAAKG,QAAL,CAAcN,WAA1B,CAAd;AAEA+B,aAAK,CAACC,SAAN,CAAgBC,GAAhB,CAAqB,aAArB;AAEAF,aAAK,CAACjB,QAAN,CAAe,CAAf,EAAkBJ,YAAlB,CAAgC,eAAhC,EAAiD,IAAjD;AACAqB,aAAK,CAACjB,QAAN,CAAe,CAAf,EAAkBoB,eAAlB,CAAmC,QAAnC;AACAH,aAAK,CAACjB,QAAN,CAAe,CAAf,EAAkBM,KAAlB,CAAwBC,OAAxB,GAAkC,OAAlC;AACH;AACJ;AAED;;;;;;yBAGMR,I,EAAO;AACTA,UAAI,CAACmB,SAAL,CAAeC,GAAf,CAAoB,aAApB;;AADS,2CAGcpB,IAAI,CAACC,QAHnB;AAAA,UAGDC,GAHC;AAAA,UAGIC,KAHJ,uBAKT;;;AACAD,SAAG,CAACL,YAAJ,CAAkB,eAAlB,EAAmC,MAAnC;AACAM,WAAK,CAACkB,eAAN,CAAuB,QAAvB,EAPS,CAST;;AACAlB,WAAK,CAACI,KAAN,CAAYe,cAAZ,CAA4B,SAA5B;AAEA,UAAMd,OAAO,GAAGO,MAAM,CAACC,gBAAP,CAAyBb,KAAzB,EAAiCK,OAAjD;;AAEA,UAAKA,OAAO,KAAK,MAAjB,EAA0B;AACtBA,eAAO,+BAAG,OAAH,CAAP;AACH;;AAEDL,WAAK,CAACI,KAAN,CAAYC,OAAZ,GAAsBA,OAAtB;AAEA,UAAMe,MAAM,GAAGpB,KAAK,CAACqB,YAArB;AAEArB,WAAK,CAACI,KAAN,CAAYkB,QAAZ,GAAuB,QAAvB;AACAtB,WAAK,CAACI,KAAN,CAAYgB,MAAZ,GAAqB,CAArB;AACApB,WAAK,CAACI,KAAN,CAAYmB,UAAZ,GAAyB,CAAzB;AACAvB,WAAK,CAACI,KAAN,CAAYoB,aAAZ,GAA4B,CAA5B;AACAxB,WAAK,CAACqB,YAAN;AACArB,WAAK,CAACI,KAAN,CAAYqB,kBAAZ,GAAiC,iBAAjC;AACAzB,WAAK,CAACI,KAAN,CAAYsB,kBAAZ,GAAiC,KAAKpC,QAAL,CAAcP,QAAd,GAAyB,IAA1D;AACAiB,WAAK,CAACI,KAAN,CAAYgB,MAAZ,GAAqBA,MAAM,GAAG,IAA9B;AAEApB,WAAK,CAACI,KAAN,CAAYe,cAAZ,CAA4B,aAA5B;AACAnB,WAAK,CAACI,KAAN,CAAYe,cAAZ,CAA4B,gBAA5B;AAEAQ,gBAAU,CAAE,YAAM;AACd3B,aAAK,CAACI,KAAN,CAAYe,cAAZ,CAA4B,QAA5B;AACAnB,aAAK,CAACI,KAAN,CAAYe,cAAZ,CAA4B,UAA5B;AACAnB,aAAK,CAACI,KAAN,CAAYe,cAAZ,CAA4B,qBAA5B;AACAnB,aAAK,CAACI,KAAN,CAAYe,cAAZ,CAA4B,qBAA5B;AACH,OALS,EAKP,KAAK7B,QAAL,CAAcP,QALP,CAAV;AAMH;AAED;;;;;;0BAGOc,I,EAAO;AACVA,UAAI,CAACmB,SAAL,CAAeY,MAAf,CAAuB,aAAvB;;AADU,2CAGa/B,IAAI,CAACC,QAHlB;AAAA,UAGFC,GAHE;AAAA,UAGGC,KAHH,uBAKV;;;AACAD,SAAG,CAACL,YAAJ,CAAkB,eAAlB,EAAmC,KAAnC;AACAM,WAAK,CAACN,YAAN,CAAoB,QAApB,EAA8B,EAA9B,EAPU,CASV;;AACAM,WAAK,CAACI,KAAN,CAAYqB,kBAAZ,GAAiC,iBAAjC;AACAzB,WAAK,CAACI,KAAN,CAAYsB,kBAAZ,GAAiC,KAAKpC,QAAL,CAAcP,QAAd,GAAyB,IAA1D;AACAiB,WAAK,CAACI,KAAN,CAAYgB,MAAZ,GAAqBpB,KAAK,CAACqB,YAAN,GAAqB,IAA1C;AACArB,WAAK,CAACqB,YAAN;AACArB,WAAK,CAACI,KAAN,CAAYkB,QAAZ,GAAuB,QAAvB;AACAtB,WAAK,CAACI,KAAN,CAAYgB,MAAZ,GAAqB,CAArB;AACApB,WAAK,CAACI,KAAN,CAAYmB,UAAZ,GAAyB,CAAzB;AACAvB,WAAK,CAACI,KAAN,CAAYoB,aAAZ,GAA4B,CAA5B;AAEAG,gBAAU,CAAE,YAAM;AACd3B,aAAK,CAACI,KAAN,CAAYC,OAAZ,GAAsB,MAAtB;AACAL,aAAK,CAACI,KAAN,CAAYe,cAAZ,CAA4B,QAA5B;AACAnB,aAAK,CAACI,KAAN,CAAYe,cAAZ,CAA4B,aAA5B;AACAnB,aAAK,CAACI,KAAN,CAAYe,cAAZ,CAA4B,gBAA5B;AACAnB,aAAK,CAACI,KAAN,CAAYe,cAAZ,CAA4B,UAA5B;AACAnB,aAAK,CAACI,KAAN,CAAYe,cAAZ,CAA4B,qBAA5B;AACAnB,aAAK,CAACI,KAAN,CAAYe,cAAZ,CAA4B,qBAA5B;AACH,OARS,EAQP,KAAK7B,QAAL,CAAcP,QARP,CAAV;AASH;;;;EA5KkC8C,gE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACTvC;;;AAGA;AACA;IAEQC,I,GAASC,kD,CAATD,I;AAGR;;;;IAGqBE,I;;;;;;;;AAEjB;oCAGgB;AACZ,aAAO,MAAP;AACH;;;sCAEiB;AACd,aAAO;AACHC,gBAAQ,EAAE,IADP;AAEHC,kBAAU,EAAE,IAFT;AAGHC,yBAAiB,EAAE;AACfC,eAAK,EAAE,oBADQ;AAEfC,iBAAO,EAAE,sBAFM;AAGfC,eAAK,EAAE;AAHQ,SAHhB;AAQHC,yBAAiB,EAAEC,MAAM,CAACC,IAAP,IAAe;AAR/B,OAAP;AAUH;AAGD;;;;;;AAGA,kBAAuB;AAAA;;AAAA;;AAAA,sCAAPvD,IAAO;AAAPA,UAAO;AAAA;;AACnB,oDAAUA,IAAV;;AADmB,mEAvBR,KAuBQ;;AAGnB,UAAKwD,MAAL,GAAc,MAAKtD,MAAL,CAAYC,gBAAZ,CAA8B,mEAA9B,CAAd;AACA,UAAKsD,YAAL,GAAoB,MAAKvD,MAAL,CAAYsB,aAAZ,CAA2B,iBAA3B,CAApB;AACA,UAAKkC,oBAAL,GAA4B,MAAKD,YAAL,CAAkBE,SAA9C;AAEA,UAAKC,WAAL,GAAmB,MAAKxD,QAAL,CAAc6C,iBAAjC;AAPmB;AAQtB;AAGD;;;;;;;2BAGO;AACH,WAAKY,WAAL;AACA,WAAKJ,YAAL,CAAkBrC,gBAAlB,CAAoC,WAApC,EAAiD,KAAK0C,SAAL,CAAeC,IAAf,CAAqB,IAArB,CAAjD;AACA,WAAK7D,MAAL,CAAYkB,gBAAZ,CAA8B,QAA9B,EAAwC,KAAK4C,MAAL,CAAYD,IAAZ,CAAkB,IAAlB,CAAxC;AACH;AAGD;;;;;;kCAGc;AAAA;;AAAA,8BAEwB,KAAKH,WAF7B;AAAA,UAEFV,KAFE,qBAEFA,KAFE;AAAA,UAEKC,OAFL,qBAEKA,OAFL;AAAA,UAEcC,KAFd,qBAEcA,KAFd;AAIV,WAAKI,MAAL,CAAY9C,OAAZ,CAAqB,UAAAuD,KAAK,EAAI;AAAA,YAEHC,YAFG,GAEcD,KAFd,CAElBE,aAFkB;AAG1BF,aAAK,CAACG,mBAAN,GAA4B,KAA5B;;AAEA,YAAKH,KAAK,CAACI,QAAN,KAAmB,QAAxB,EAAmC;AAC/BJ,eAAK,CAAC7C,gBAAN,CAAwB,QAAxB,EAAkC,YAAM;AACpC8C,wBAAY,CAACpC,SAAb,CAAuBC,GAAvB,CAA4BoB,OAA5B;AACH,WAFD;AAIH,SALD,MAKO;AACH,cAAKc,KAAK,CAACK,IAAN,IAAc,UAAd,IAA4BL,KAAK,CAACK,IAAN,IAAc,OAA/C,EAAyD;AAErDL,iBAAK,CAAC7C,gBAAN,CAAwB,OAAxB,EAAiC,YAAM;AACnC,oBAAI,CAAC0C,SAAL;;AACAI,0BAAY,CAACpC,SAAb,CAAuBC,GAAvB,CAA4BmB,KAA5B;AACH,aAHD;AAKAe,iBAAK,CAAC7C,gBAAN,CAAwB,MAAxB,EAAgC,YAAM;AAClC8C,0BAAY,CAACpC,SAAb,CAAuBY,MAAvB,CAA+BQ,KAA/B,EAAsCC,OAAtC,EAA+CC,KAA/C;;AAEA,kBAAK,MAAI,CAAChD,QAAL,CAAc2C,QAAd,IAA0BkB,KAAK,CAACM,KAAN,IAAe,EAA9C,EAAmD;AAE/C,oBAAKN,KAAK,CAACO,aAAN,EAAL,EAA6B;AACzBN,8BAAY,CAACpC,SAAb,CAAuBC,GAAvB,CAA4BoB,OAA5B;;AACA,wBAAI,CAACsB,oBAAL,CAA2BR,KAA3B;AAEH,iBAJD,MAIQ;AACJC,8BAAY,CAACpC,SAAb,CAAuBC,GAAvB,CAA4BqB,KAA5B;AACH;AACJ;AACJ,aAbD;AAeH,WAtBD,MAsBO,IAAKa,KAAK,CAACK,IAAN,IAAc,UAAd,IAA4BL,KAAK,CAACK,IAAN,IAAc,OAA/C,EAAyD;AAE5D,gBAAK,MAAI,CAAClE,QAAL,CAAc2C,QAAnB,EAA8B;AAC1BkB,mBAAK,CAAC7C,gBAAN,CAAwB,QAAxB,EAAkC,YAAM;AAEpC,oBAAK6C,KAAK,CAACS,OAAX,EAAqB;AACjBR,8BAAY,CAACpC,SAAb,CAAuBY,MAAvB,CAA+BU,KAA/B;;AACA,wBAAI,CAACqB,oBAAL,CAA2BR,KAA3B;AACH;AACJ,eAND;AAOH;AACJ;;AAED,cAAK,MAAI,CAAC7D,QAAL,CAAc2C,QAAnB,EAA8B;AAC1BkB,iBAAK,CAAC7C,gBAAN,CAAwB,SAAxB,EAAmC,UAAAC,CAAC,EAAI;AACpCA,eAAC,CAACC,cAAF;AAEA4C,0BAAY,CAACpC,SAAb,CAAuBC,GAAvB,CAA4BqB,KAA5B;;AACA,kBAAK,CAAEa,KAAK,CAACG,mBAAb,EAAmC;AAC/B,sBAAI,CAACO,sBAAL,CAA6BV,KAA7B;;AACAA,qBAAK,CAACG,mBAAN,GAA4B,IAA5B;AACH;AACJ,aARD;AASH;AACJ;AACJ,OA1DD;AA2DH;AAGD;;;;;;;;2CAKwBH,K,EAAQ;AAAA;;AAAA,UACLC,YADK,GACYD,KADZ,CACpBE,aADoB;AAE5B,UAAMS,MAAM,GAAGC,4DAAQ,CAAE,MAAF,CAAvB;AAEAD,YAAM,CAAC9C,SAAP,CAAiBC,GAAjB,CAAsB,YAAtB;AACA6C,YAAM,CAACjB,SAAP,GAAmBM,KAAK,CAACa,iBAAzB;AACAZ,kBAAY,CAACa,WAAb,CAA0BH,MAA1B;AAEAnC,gBAAU,CAAE,YAAM;AACdmC,cAAM,CAAC9C,SAAP,CAAiBC,GAAjB,CAAsB,YAAtB;AACH,OAFS,EAEP,GAFO,CAAV;AAIAU,gBAAU,CAAE,YAAM;AACd,cAAI,CAACgC,oBAAL,CAA2BR,KAA3B;AACH,OAFS,EAEP,IAFO,CAAV;AAGH;AAGD;;;;;;;;yCAKsBA,K,EAAQ;AAAA,UACHC,YADG,GACcD,KADd,CAClBE,aADkB;AAE1B,UAAMS,MAAM,GAAGV,YAAY,CAAC1C,aAAb,CAA4B,iBAA5B,CAAf;;AAEA,UAAKoD,MAAL,EAAc;AACVA,cAAM,CAAC9C,SAAP,CAAiBY,MAAjB,CAAyB,YAAzB;AAEAD,kBAAU,CAAE,YAAM;AACdyB,sBAAY,CAACc,WAAb,CAA0BJ,MAA1B;AACAX,eAAK,CAACG,mBAAN,GAA4B,KAA5B;AACH,SAHS,EAGP,GAHO,CAAV;AAIH;AACJ;AAGD;;;;;;;;2BAKQ/C,C,EAAI;AAAA;;AACRA,OAAC,CAACC,cAAF;AAEA,WAAKpB,MAAL,CAAY4B,SAAZ,CAAsBC,GAAtB,CAA2B,kBAA3B;AACA,WAAK0B,YAAL,CAAkBwB,QAAlB,GAA6B,IAA7B;AACA,WAAKxB,YAAL,CAAkBE,SAAlB,GAA8B,YAA9B;AAEAuB,WAAK,CAAE5B,MAAM,CAAC6B,OAAT,EAAkB;AACnBC,cAAM,EAAE,MADW;AAEnBC,YAAI,EAAE,IAAIC,QAAJ,CAAc,KAAKpF,MAAnB;AAFa,OAAlB,CAAL,CAIKqF,IAJL,CAIW,UAAAC,GAAG;AAAA,eAAIA,GAAG,CAACC,IAAJ,EAAJ;AAAA,OAJd,EAKKF,IALL,CAKW,UAAAG,IAAI,EAAI;AACX,cAAI,CAACxF,MAAL,CAAY4B,SAAZ,CAAsBY,MAAtB,CAA8B,kBAA9B;;AACA,cAAI,CAACiD,QAAL,GAAgBD,IAAhB,CAFW,CAGX;;AACA,YAAME,QAAQ,GAAG,MAAI,CAAC1F,MAAL,CAAY2F,OAAZ,CAAoBC,UAArC;AAEAC,gBAAQ,CAACC,IAAT,aAAoBD,QAAQ,CAACE,MAA7B,wBAAmDL,QAAQ,KAAI,SAAZ,GAAwB,SAAxB,GAAoCA,QAAvF;AACH,OAZL,WAaY,UAAAxC,KAAK,EAAI;AACb9C,eAAO,CAAC4F,GAAR,CAAa9C,KAAb;AACH,OAfL;AAgBH;AAGD;;;;;;2CAGkC;AAAA;;AAAA,UAAZsC,IAAY,uEAAL,EAAK;AAC9B,WAAKxF,MAAL,CAAY4B,SAAZ,CAAsBC,GAAtB,CAA2B,WAA3B;AAEA,UAAMoE,gBAAgB,GAAG,KAAKjG,MAAL,CAAYsB,aAAZ,CAA2B,qBAA3B,CAAzB;AACA,UAAM4E,cAAc,GAAG,mFAAvB;AAEAD,sBAAgB,CAACrE,SAAjB,CAA2BC,GAA3B,CAAgC2D,IAAI,CAACvC,OAAL,GAAe,SAAf,GAA2B,OAA3D;AAEAgD,sBAAgB,CAACxC,SAAjB,kDAGY+B,IAAI,CAACvC,OAAL,4CACYiD,cADZ,kdAKYA,cALZ,uWAHZ,kCAacV,IAAI,CAACW,OAbnB;AAkBAF,sBAAgB,CAAC3E,aAAjB,CAAgC,2BAAhC,EAA8DJ,gBAA9D,CAAgF,OAAhF,EAAyF,UAAAkF,KAAK,EAAI;AAC9FA,aAAK,CAAChF,cAAN;;AAEA,cAAI,CAACiF,kBAAL,CAAyBb,IAAzB;AACH,OAJD;AAMA;;;;AAGA,UAAKA,IAAI,CAACvC,OAAV,EAAoB;AAChBzB,cAAM,CAAC8E,SAAP,GAAmB9E,MAAM,CAAC8E,SAAP,IAAoB,EAAvC;AACA9E,cAAM,CAAC8E,SAAP,CAAiBC,IAAjB,CAAsB;AAClB,mBAAS,gBADS;AAElB,kBAAQ,KAAKvG,MAAL,CAAY2F,OAAZ,CAAoBC;AAFV,SAAtB;AAIH;;AAEDrD,gBAAU,CAAE,YAAM;AACd0D,wBAAgB,CAAC3F,YAAjB,CAA+B,aAA/B,EAA8C,KAA9C;;AAEA,YAAKkF,IAAI,CAACvC,OAAV,EAAoB;AAChB,gBAAI,CAACM,YAAL,CAAkBE,SAAlB,GAA8B,OAA9B;AACH,SAFD,MAEO;AACH,gBAAI,CAACF,YAAL,CAAkBwB,QAAlB,GAA6B,KAA7B;AACA,gBAAI,CAACxB,YAAL,CAAkBE,SAAlB,GAA8B,MAAI,CAACD,oBAAnC;AACH;AACJ,OATS,EASP,GATO,CAAV;AAWA,UAAMgD,cAAc,GAAGhB,IAAI,CAACvC,OAAL,GAAe,KAAf,GAAuB,KAA9C;AAEA,UAAIwD,SAAS,GAAGlE,UAAU,CAAE,YAAM;AAC9B,cAAI,CAAC8D,kBAAL,CAAyBb,IAAzB;AACH,OAFyB,EAEvBgB,cAFuB,CAA1B;AAGH;AAGD;;;;;;;uCAIoBhB,I,EAAO;AAAA;;AAEvB,UAAKA,IAAI,CAACvC,OAAV,EAAoB;AAAA,iCACW,KAAKS,WADhB;AAAA,YACRT,OADQ,sBACRA,OADQ;AAAA,YACCC,KADD,sBACCA,KADD;AAGhB,aAAKlD,MAAL,CAAY0G,KAAZ,GAHgB,CAKhB;;AACA,aAAM,IAAIC,CAAC,GAAG,CAAd,EAAiBA,CAAC,GAAG,KAAKrD,MAAL,CAAYnD,MAAjC,EAAyCwG,CAAC,EAA1C,EAA+C;AAC3C,cAAM5C,KAAK,GAAG,KAAKT,MAAL,CAAYqD,CAAZ,CAAd;;AAEA,cAAK5C,KAAK,CAACI,QAAN,KAAmB,QAAnB,IAAiCJ,KAAK,CAACK,IAAN,IAAc,UAAd,IAA4BL,KAAK,CAACK,IAAN,IAAc,OAAhF,EAA4F;AACxFL,iBAAK,CAACE,aAAN,CAAoBrC,SAApB,CAA8BY,MAA9B,CAAsCS,OAAtC,EAA+CC,KAA/C;AACH;AACJ;AACJ;;AAEDX,gBAAU,CAAE,YAAM;AACd,cAAI,CAACvC,MAAL,CAAY4B,SAAZ,CAAsBY,MAAtB,CAA8B,WAA9B;;AACA,cAAI,CAACxC,MAAL,CAAYsB,aAAZ,CAA2B,qBAA3B,EAAmDhB,YAAnD,CAAiE,aAAjE,EAAgF,IAAhF;AACH,OAHS,EAGP,GAHO,CAAV;AAKA;;;;AAGA,WAAKiD,YAAL,CAAkBwB,QAAlB,GAA6B,KAA7B;AACA,WAAKxB,YAAL,CAAkBE,SAAlB,GAA8B,KAAKD,oBAAnC;AACH;AAGD;;;;;;gCAGY;AACR,UAAK,CAAE,KAAKoD,YAAZ,EAA2B;AACvB,YAAMC,UAAU,GAAGlC,4DAAQ,CAAE,MAAF,CAA3B;AACAkC,kBAAU,CAACvG,YAAX,CAAyB,KAAzB,EAAgC,YAAhC;AACAuG,kBAAU,CAACvG,YAAX,CAAyB,MAAzB,YAAoC8C,MAAM,CAAC0D,KAA3C;AACAD,kBAAU,CAACvG,YAAX,CAAyB,MAAzB,EAAiC,UAAjC;AACAoC,YAAI,CAACmC,WAAL,CAAkBgC,UAAlB;AAEA,aAAKD,YAAL,GAAoB,IAApB;AACH;;AAED,WAAKrD,YAAL,CAAkBwD,mBAAlB,CAAuC,WAAvC,EAAoD,KAAKnD,SAAzD;AACH;;;;EAhT6BnB,gE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACZlC;;;AAGA;AAGA;;;;IAGqBuE,I;;;;;;;oCAED;AACZ,aAAO,MAAP;AACH;;;sCAEiB;AACd,aAAO;AACHC,eAAO,EAAE,mBADN;AAEHC,gBAAQ,EAAE;AAFP,OAAP;AAIH;AAED;;;;;;AAGA,kBAAuB;AAAA;;AAAA;;AAAA,sCAAPpH,IAAO;AAAPA,UAAO;AAAA;;AACnB,oDAAUA,IAAV;AAEA,UAAKqH,IAAL,GAAY,MAAKnH,MAAL,CAAYC,gBAAZ,CAA8B,MAAKC,QAAL,CAAc+G,OAA5C,CAAZ;AACA,UAAKG,MAAL,GAAc,MAAKpH,MAAL,CAAYC,gBAAZ,CAA8B,MAAKC,QAAL,CAAcgH,QAA5C,CAAd;AAJmB;AAKtB;AAED;;;;;;;2BAGO;AAAA;;AACH,WAAKlH,MAAL,CAAYM,YAAZ,CAA0B,MAA1B,EAAkC,SAAlC;AAEA,WAAK6G,IAAL,CAAU3G,OAAV,CAAmB,UAAEG,GAAF,EAAOJ,KAAP,EAAkB;AACjC,YAAMM,KAAK,aAAO,MAAI,CAACC,WAAZ,kBAAiCP,KAAjC,CAAX;AAAA,YACMQ,OAAO,aAAO,MAAI,CAACD,WAAZ,oBAAmCP,KAAnC,CADb;AAGAI,WAAG,CAACL,YAAJ,CAAkB,IAAlB,EAAwBO,KAAxB;AACAF,WAAG,CAACL,YAAJ,CAAkB,MAAlB,EAA0B,KAA1B;AACAK,WAAG,CAACL,YAAJ,CAAkB,eAAlB,EAAmC,KAAnC;AACAK,WAAG,CAACL,YAAJ,CAAkB,eAAlB,EAAmCS,OAAnC;AACAJ,WAAG,CAACL,YAAJ,CAAkB,UAAlB,EAA8B,CAAC,CAA/B;AAEAK,WAAG,CAACO,gBAAJ,CAAsB,OAAtB,EAA+B,UAAAC,CAAC,EAAI;AAChCA,WAAC,CAACC,cAAF;;AAEA,gBAAI,CAACiG,WAAL,CAAkB9G,KAAlB;AACH,SAJD;AAKH,OAfD;AAiBA,WAAK6G,MAAL,CAAY5G,OAAZ,CAAqB,UAAEI,KAAF,EAASL,KAAT,EAAoB;AACrC,YAAMM,KAAK,aAAO,MAAI,CAACC,WAAZ,kBAAiCP,KAAjC,CAAX;AAAA,YACMQ,OAAO,aAAO,MAAI,CAACD,WAAZ,oBAAmCP,KAAnC,CADb;AAGAK,aAAK,CAACN,YAAN,CAAoB,IAApB,EAA0BS,OAA1B;AACAH,aAAK,CAACN,YAAN,CAAoB,MAApB,EAA4B,UAA5B;AACAM,aAAK,CAACN,YAAN,CAAoB,iBAApB,EAAuCO,KAAvC;AACAD,aAAK,CAACN,YAAN,CAAoB,UAApB,EAAgC,CAAhC;AACH,OARD;AAUA,WAAK+G,WAAL,CAAkB,CAAlB;AACH;;;gCAEY9G,K,EAAQ;AACjB,WAAK+G,oBAAL;AAEA,UAAM3G,GAAG,GAAG,KAAKX,MAAL,CAAYsB,aAAZ,YAAgC,KAAKR,WAArC,kBAA0DP,KAA1D,EAAZ;AAAA,UACMK,KAAK,GAAG,KAAKZ,MAAL,CAAYsB,aAAZ,YAAgC,KAAKR,WAArC,oBAA4DP,KAA5D,EADd;AAGAI,SAAG,CAACmB,eAAJ,CAAqB,UAArB;AACAnB,SAAG,CAACL,YAAJ,CAAkB,eAAlB,EAAmC,IAAnC;AACAK,SAAG,CAACiB,SAAJ,CAAcC,GAAd,CAAmB,YAAnB;AAEAjB,WAAK,CAACgB,SAAN,CAAgBC,GAAhB,CAAqB,YAArB;AACH;;;2CAEsB;AACnB,UAAM0F,UAAU,GAAG,KAAKvH,MAAL,CAAYsB,aAAZ,CAA2B,yCAA3B,CAAnB;;AAEA,UAAKiG,UAAL,EAAkB;AACdA,kBAAU,CAAC3F,SAAX,CAAqBY,MAArB,CAA6B,YAA7B;AACA+E,kBAAU,CAACjH,YAAX,CAAyB,UAAzB,EAAqC,CAAC,CAAtC;AACAiH,kBAAU,CAACjH,YAAX,CAAyB,eAAzB,EAA0C,KAA1C;AAEA,YAAMkH,YAAY,GAAG,KAAKxH,MAAL,CAAYsB,aAAZ,YAAgCiG,UAAU,CAACE,YAAX,CAAyB,eAAzB,CAAhC,EAArB;;AAEA,YAAKD,YAAL,EAAoB;AAChBA,sBAAY,CAAC5F,SAAb,CAAuBY,MAAvB,CAA+B,YAA/B;AACH;AACJ;AACJ;;;;EAtF6BC,gE;;;;;;;;;;;;;;ACTlC;AAAA;AAAA;AAAA;AAAA;;;;;AAKA;AACA;AACA;AAGA;;;;AAGA,IAAKiF,QAAQ,CAACpG,aAAT,CAAwB,oBAAxB,CAAL,EAAsD;AAClD,MAAMqG,KAAK,GAAGD,QAAQ,CAACzH,gBAAT,CAA2B,oBAA3B,KAAqD,EAAnE;AAEA0H,OAAK,CAACnH,OAAN,CAAe,UAAAoH,EAAE,EAAI;AACjB,QAAMC,CAAC,GAAG,IAAIjF,wDAAJ,CAAUgF,EAAV,CAAV;AACAC,KAAC,CAACC,IAAF;AACH,GAHD;AAIH;AAGD;;;;;AAGA,IAAKJ,QAAQ,CAACpG,aAAT,CAAwB,yBAAxB,CAAL,EAA2D;AACvD,MAAMyG,UAAU,GAAGL,QAAQ,CAACzH,gBAAT,CAA2B,yBAA3B,KAA0D,EAA7E;AAEA8H,YAAU,CAACvH,OAAX,CAAoB,UAAAoH,EAAE,EAAI;AACtB,QAAMI,CAAC,GAAG,IAAIvI,6DAAJ,CAAemI,EAAf,CAAV;AACAI,KAAC,CAACF,IAAF;AACH,GAHD;AAIH;AAGD;;;;;AAGC,IAAKJ,QAAQ,CAACpG,aAAT,CAAwB,oBAAxB,CAAL,EAAsD;AACnD,MAAM6F,IAAI,GAAGO,QAAQ,CAACzH,gBAAT,CAA2B,oBAA3B,KAAqD,EAAlE;AAEAkH,MAAI,CAAC3G,OAAL,CAAc,UAAAoH,EAAE,EAAI;AAChB,QAAMK,CAAC,GAAG,IAAIjB,wDAAJ,CAAUY,EAAV,CAAV;AACAK,KAAC,CAACH,IAAF;AACH,GAHD;AAIH,C;;;;;;;;;;;;AC9CD;AAAA;AAAA;;;;;;AAMA;AAGA;;;;AAGA,IAAKtG,MAAM,CAACqE,QAAP,CAAgBqC,IAAhB,KAAyB,iBAA9B,EAAkD;AAC9CC,6DAAY;AACf,C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACdD;;;AAGA,CAAE,YAAM;AACJ,MAAMC,YAAY,GAAGV,QAAQ,CAACpG,aAAT,CAAwB,wBAAxB,CAArB;AACA,MAAM+G,aAAa,GAAGX,QAAQ,CAACpG,aAAT,CAAwB,iBAAxB,CAAtB;AAEA,MAAIgH,OAAO,GAAG,KAAd;AAEAF,cAAY,CAAClH,gBAAb,CAA+B,OAA/B,EAAwC,YAAM;AAC1C2E,YAAQ,CAAC0C,IAAT,GAAgB,OAAhB;AAEAF,iBAAa,CAAC/H,YAAd,CAA4B,aAA5B,EAA2CgI,OAA3C;AACAD,iBAAa,CAACzG,SAAd,CAAwB4G,MAAxB,CAAgC,YAAhC;AAEAF,WAAO,GAAG,CAACA,OAAX;AACH,GAPD;AAQH,CAdD;AAiBA;;;;;;;AAKA;;AAAC,CAAE,YAAM;AACL,MAAMG,MAAM,GAAGf,QAAQ,CAACzH,gBAAT,CAA2B,2BAA3B,CAAf;;AAEA,MAAK,EAACwI,MAAD,aAACA,MAAD,uBAACA,MAAM,CAAEtI,MAAT,CAAL,EAAuB;AACnB;AACH;;AAEDsI,QAAM,CAACjI,OAAP,CAAgB,UAAAkI,KAAK,EAAI;AACrB,QAAMC,OAAO,GAAGD,KAAK,CAACpH,aAAN,CAAqB,sBAArB,CAAhB;AACA,QAAMsH,KAAK,GAAGF,KAAK,CAACpH,aAAN,CAAqB,cAArB,CAAd;AACA,QAAMuH,WAAW,GAAGD,KAAK,CAACtH,aAAN,CAAqB,qBAArB,CAApB;AAEA;;;;AAGA,aAASwH,SAAT,GAAqB;AACjBpB,cAAQ,CAACvC,IAAT,CAAcvD,SAAd,CAAwBY,MAAxB,CAAgC,WAAhC,EAA6C,gBAA7C;AACAoG,WAAK,CAAChH,SAAN,CAAgBY,MAAhB,CAAwB,YAAxB;AACAoG,WAAK,CAACtI,YAAN,CAAoB,aAApB,EAAmC,IAAnC;AAEA,UAAMyI,OAAO,GAAGH,KAAK,CAACtH,aAAN,CAAqB,OAArB,CAAhB;;AAEA,UAAKyH,OAAL,EAAe;AACXA,eAAO,CAACC,KAAR;AACH;;AAEDzG,gBAAU,CAAE,YAAM;AACdf,cAAM,CAACuF,mBAAP,CAA4B,OAA5B,EAAqC+B,SAArC;AACAtH,cAAM,CAACuF,mBAAP,CAA4B,OAA5B,EAAqCkC,YAArC;AACH,OAHS,EAGP,GAHO,CAAV;AAIH;AAED;;;;;;;AAKA,aAASA,YAAT,CAAuB7C,KAAvB,EAA+B;AAC3B,UAAKA,KAAK,CAAC8C,GAAN,KAAc,QAAnB,EAA8B;AAC1BJ,iBAAS;AACZ;AACJ;;AAEDH,WAAO,CAACzH,gBAAR,CAA0B,OAA1B,EAAmC,YAAM;AACrCwG,cAAQ,CAACvC,IAAT,CAAcvD,SAAd,CAAwBC,GAAxB,CAA6B,WAA7B,EAA0C,gBAA1C;AACA+G,WAAK,CAAChH,SAAN,CAAgBC,GAAhB,CAAqB,YAArB;AACA+G,WAAK,CAACtI,YAAN,CAAoB,aAApB,EAAmC,KAAnC;AAEA,UAAMyI,OAAO,GAAGH,KAAK,CAACtH,aAAN,CAAqB,OAArB,CAAhB;AAEAlB,aAAO,CAAC4F,GAAR,CAAa+C,OAAb;;AAEA,UAAKA,OAAL,EAAe;AACXA,eAAO,CAACI,IAAR;AACH;;AAED5G,gBAAU,CAAE,YAAM;AACdf,cAAM,CAACN,gBAAP,CAAyB,OAAzB,EAAkC4H,SAAlC;AACAtH,cAAM,CAACN,gBAAP,CAAyB,OAAzB,EAAkC+H,YAAlC;AACH,OAHS,EAGP,GAHO,CAAV;AAIH,KAjBD;AAmBAJ,eAAW,CAAC3H,gBAAZ,CAA8B,OAA9B,EAAuC4H,SAAvC;AACH,GAxDD;AAyDH,CAhEA;AAmED;;;;;;;AAKA;;AAAC,CAAE,YAAM;AACL,MAAML,MAAM,GAAGf,QAAQ,CAACzH,gBAAT,CAA2B,6BAA3B,CAAf;;AAEA,MAAK,EAACwI,MAAD,aAACA,MAAD,uBAACA,MAAM,CAAEtI,MAAT,CAAL,EAAuB;AACnB;AACH;;AAEDsI,QAAM,CAACjI,OAAP,CAAgB,UAAAkI,KAAK,EAAI;AACrB,QAAMU,QAAQ,GAAGV,KAAK,CAACzI,gBAAN,CAAwB,kBAAxB,CAAjB;AACA,QAAM2I,KAAK,GAAGF,KAAK,CAACpH,aAAN,CAAqB,sBAArB,CAAd;AACA,QAAMuH,WAAW,GAAGD,KAAK,CAACtH,aAAN,CAAqB,qBAArB,CAApB;AAEA;;;;AAGA,aAASwH,SAAT,GAAqB;AACjBpB,cAAQ,CAACvC,IAAT,CAAcvD,SAAd,CAAwBY,MAAxB,CAAgC,WAAhC,EAA6C,gBAA7C;AACAoG,WAAK,CAAChH,SAAN,CAAgBY,MAAhB,CAAwB,YAAxB;AACAoG,WAAK,CAACtI,YAAN,CAAoB,aAApB,EAAmC,IAAnC;AAEA,UAAMyI,OAAO,GAAGH,KAAK,CAACtH,aAAN,CAAqB,OAArB,CAAhB;;AAEA,UAAKyH,OAAL,EAAe;AACXA,eAAO,CAACC,KAAR;AACH;;AAEDzG,gBAAU,CAAE,YAAM;AACdf,cAAM,CAACuF,mBAAP,CAA4B,OAA5B,EAAqC+B,SAArC;AACAtH,cAAM,CAACuF,mBAAP,CAA4B,OAA5B,EAAqCkC,YAArC;AACH,OAHS,EAGP,GAHO,CAAV;AAIH;AAED;;;;;;;AAKA,aAASA,YAAT,CAAuB7C,KAAvB,EAA+B;AAC3B,UAAKA,KAAK,CAAC8C,GAAN,KAAc,QAAnB,EAA8B;AAC1BJ,iBAAS;AACZ;AACJ;;AAEDM,YAAQ,CAAC5I,OAAT,CAAkB,UAAAmI,OAAO,EAAI;AACzBA,aAAO,CAACzH,gBAAR,CAA0B,OAA1B,EAAmC,YAAM;AACrCwG,gBAAQ,CAACvC,IAAT,CAAcvD,SAAd,CAAwBC,GAAxB,CAA6B,WAA7B,EAA0C,gBAA1C;;AAEA,YAAK8G,OAAO,CAAChD,OAAR,CAAgB0D,KAAhB,CAAsBC,KAAtB,CAA6B9H,MAAM,CAACqE,QAAP,CAAgBqC,IAA7C,CAAL,EAA2D;AACvDU,eAAK,CAACtH,aAAN,CAAqB,iBAArB,EAAyCmC,SAAzC,oDACmBkF,OAAO,CAAChD,OAAR,CAAgB0D,KADnC;AAGH,SAJD,MAIO;AACHT,eAAK,CAACtH,aAAN,CAAqB,iBAArB,EAAyCmC,SAAzC,GAAqDkF,OAAO,CAAChD,OAAR,CAAgB0D,KAArE;AACH;;AAEDT,aAAK,CAAChH,SAAN,CAAgBC,GAAhB,CAAqB,YAArB;AACA+G,aAAK,CAACtI,YAAN,CAAoB,aAApB,EAAmC,KAAnC;AAEA,YAAMyI,OAAO,GAAGH,KAAK,CAACtH,aAAN,CAAqB,OAArB,CAAhB;;AAEA,YAAKyH,OAAL,EAAe;AACXA,iBAAO,CAACI,IAAR;AACH;;AAED5G,kBAAU,CAAE,YAAM;AACdf,gBAAM,CAACN,gBAAP,CAAyB,OAAzB,EAAkC4H,SAAlC;AACAtH,gBAAM,CAACN,gBAAP,CAAyB,OAAzB,EAAkC+H,YAAlC;AACH,SAHS,EAGP,GAHO,CAAV;AAIH,OAxBD;AAyBH,KA1BD;AA4BAJ,eAAW,CAAC3H,gBAAZ,CAA8B,OAA9B,EAAuC4H,SAAvC;AACH,GAjED;AAkEH,CAzEA;AA4ED;;;;;;;AAKC;;AAAC,CAAE,YAAM;AACN,MAAMS,YAAY,GAAG7B,QAAQ,CAACpG,aAAT,CAAwB,gBAAxB,CAArB;;AAEA,MAAK,CAACiI,YAAN,EAAqB;AACjB;AACH;;AAED,MAAMH,QAAQ,GAAG1B,QAAQ,CAACzH,gBAAT,CAA2B,kBAA3B,CAAjB;AACA,MAAM2I,KAAK,GAAGlB,QAAQ,CAACpG,aAAT,CAAwB,sBAAxB,CAAd;AACA,MAAMuH,WAAW,GAAGD,KAAK,CAACtH,aAAN,CAAqB,qBAArB,CAApB;AAEA;;;;AAGA,WAASwH,SAAT,GAAqB;AACjBpB,YAAQ,CAACvC,IAAT,CAAcvD,SAAd,CAAwBY,MAAxB,CAAgC,WAAhC,EAA6C,gBAA7C;AACAoG,SAAK,CAAChH,SAAN,CAAgBY,MAAhB,CAAwB,YAAxB;AACAoG,SAAK,CAACtI,YAAN,CAAoB,aAApB,EAAmC,IAAnC;AAEA,QAAMyI,OAAO,GAAGH,KAAK,CAACtH,aAAN,CAAqB,OAArB,CAAhB;;AAEA,QAAKyH,OAAL,EAAe;AACXA,aAAO,CAACC,KAAR;AACH;;AAEDzG,cAAU,CAAE,YAAM;AACdf,YAAM,CAACuF,mBAAP,CAA4B,OAA5B,EAAqC+B,SAArC;AACAtH,YAAM,CAACuF,mBAAP,CAA4B,OAA5B,EAAqCkC,YAArC;AACH,KAHS,EAGP,GAHO,CAAV;AAIH;AAED;;;;;;;AAKA,WAASA,YAAT,CAAuB7C,KAAvB,EAA+B;AAC3B,QAAKA,KAAK,CAAC8C,GAAN,KAAc,QAAnB,EAA8B;AAC1BJ,eAAS;AACZ;AACJ;;AAEDM,UAAQ,CAAC5I,OAAT,CAAkB,UAAAmI,OAAO,EAAI;AACzBA,WAAO,CAACzH,gBAAR,CAA0B,OAA1B,EAAmC,YAAM;AACrCwG,cAAQ,CAACvC,IAAT,CAAcvD,SAAd,CAAwBC,GAAxB,CAA6B,WAA7B,EAA0C,gBAA1C;AACAzB,aAAO,CAAC4F,GAAR,CAAa,OAAb;;AAEA,UAAK2C,OAAO,CAAChD,OAAR,CAAgB0D,KAAhB,CAAsBC,KAAtB,CAA6B9H,MAAM,CAACqE,QAAP,CAAgBqC,IAA7C,CAAL,EAA2D;AACvDU,aAAK,CAACtH,aAAN,CAAqB,iBAArB,EAAyCmC,SAAzC,gDACmBkF,OAAO,CAAChD,OAAR,CAAgB0D,KADnC;AAGH,OAJD,MAIO;AACHT,aAAK,CAACtH,aAAN,CAAqB,iBAArB,EAAyCmC,SAAzC,GAAqDkF,OAAO,CAAChD,OAAR,CAAgB0D,KAArE;AACH;;AAEDT,WAAK,CAAChH,SAAN,CAAgBC,GAAhB,CAAqB,YAArB;AACA+G,WAAK,CAACtI,YAAN,CAAoB,aAApB,EAAmC,KAAnC;AAEA,UAAMyI,OAAO,GAAGH,KAAK,CAACtH,aAAN,CAAqB,OAArB,CAAhB;;AAEA,UAAKyH,OAAL,EAAe;AACXA,eAAO,CAACI,IAAR;AACH;;AAED5G,gBAAU,CAAE,YAAM;AACdf,cAAM,CAACN,gBAAP,CAAyB,OAAzB,EAAkC4H,SAAlC;AACAtH,cAAM,CAACN,gBAAP,CAAyB,OAAzB,EAAkC+H,YAAlC;AACH,OAHS,EAGP,GAHO,CAAV;AAIH,KAzBD;AA0BH,GA3BD;AA6BAJ,aAAW,CAAC3H,gBAAZ,CAA8B,OAA9B,EAAuC4H,SAAvC;AACH,CAxEC;AA2EF;;;;;AAGA;;AAAC,CAAE,YAAM;AACL,MAAMU,eAAe,GAAG9B,QAAQ,CAACpG,aAAT,CAAwB,oBAAxB,CAAxB;;AAEA,MAAK,CAACkI,eAAN,EAAwB;AACpB;AACH;;AAED,MAAMC,UAAU,GAAGD,eAAe,CAACvJ,gBAAhB,CAAkC,WAAlC,CAAnB;AACA,MAAMyJ,mBAAmB,GAAGF,eAAe,CAAClI,aAAhB,CAA+B,uBAA/B,CAA5B;AACA,MAAMqI,SAAS,GAAGH,eAAe,CAAClI,aAAhB,CAA+B,aAA/B,CAAlB;AACA,MAAMsI,WAAW,GAAGJ,eAAe,CAAClI,aAAhB,CAA+B,eAA/B,CAApB;;AAGA,WAASuI,kBAAT,GAA8B;AAC1B,QAAKJ,UAAU,CAACtJ,MAAX,IAAqB,CAA1B,EAA8B;AAC1B;AACH;;AAEDqJ,mBAAe,CAAC5H,SAAhB,CAA0BC,GAA1B,CAA+B,YAA/B;AACA8H,aAAS,CAAC3I,KAAV,CAAgBC,OAAhB,GAA0B,OAA1B;AAEA,QAAMe,MAAM,GAAG,mBAAKyH,UAAL,EAAkBK,KAAlB,CAAyB,CAAzB,EAA4B,CAA5B,EAAgCC,MAAhC,CAAwC,UAAE1F,KAAF,EAAShD,OAAT,EAAkBd,KAAlB,EAA6B;AAChF,UAAMS,KAAK,GAAGS,gBAAgB,CAAEJ,OAAF,CAA9B;AAEA,aAAOgD,KAAK,GAAGhD,OAAO,CAACY,YAAhB,GAA+B+H,UAAU,CAAEhJ,KAAK,CAACiJ,gBAAN,CAAwB,YAAxB,CAAF,CAAhD;AACH,KAJc,EAIZ,CAJY,IAIN,GAJT;AAMAP,uBAAmB,CAAC1I,KAApB,CAA0BgB,MAA1B,aAAuCA,MAAvC;AACA4H,eAAW,CAACM,WAAZ,GAA0BT,UAAU,CAACtJ,MAAX,GAAoB,CAA9C;AACH,GA7BI,CAgCL;;;AACA,MAAIqB,MAAM,CAAC2I,UAAP,IAAqB,GAAzB,EAA+B;AAC3BN,sBAAkB;AAErB,GAHD,MAGO;AACHH,uBAAmB,CAAC1I,KAApB,CAA0BgB,MAA1B,GAAmC,MAAnC;AACH,GAtCI,CAyCL;;;AACA,MAAMoI,YAAY,GAAG,SAAfA,YAAe,CAAEhE,KAAF,EAAa;AAAA;;AAC9BsD,uBAAmB,CAAC1I,KAApB,CAA0BgB,MAA1B,sCAAuC0H,mBAAmB,CAACpI,aAApB,CAAmC,IAAnC,CAAvC,0DAAuC,sBAA2CW,YAAlF;AACAuH,mBAAe,CAAC5H,SAAhB,CAA0BC,GAA1B,CAA+B,UAA/B;AACAuE,SAAK,CAACpG,MAAN,CAAagB,KAAb,CAAmBC,OAAnB,GAA6B,MAA7B;AACH,GAJD;;AAKA0I,WAAS,CAACzI,gBAAV,CAA4B,OAA5B,EAAqCkJ,YAArC;AAGA5I,QAAM,CAACN,gBAAP,CAAyB,QAAzB,EAAmC,UAAAkF,KAAK,EAAI;AACxC,QAAIA,KAAK,CAACpG,MAAN,CAAamK,UAAb,GAA0B,GAA9B,EAAoC;AAChCN,wBAAkB;AAErB,KAHD,MAGO;AACHL,qBAAe,CAAC5H,SAAhB,CAA0BY,MAA1B,CAAkC,YAAlC;AACAmH,eAAS,CAAC3I,KAAV,CAAgBC,OAAhB,GAA0B,MAA1B;AACH;AACJ,GARD;AASH,CA3DA;AA8DD;;;;;AAGA;;AAAC,CAAE,YAAM;AACL,MAAK,CAAEyG,QAAQ,CAACpG,aAAT,CAAwB,uBAAxB,CAAP,EAA2D;AAE3D,MAAM+I,eAAe,GAAG3C,QAAQ,CAACpG,aAAT,CAAwB,uBAAxB,CAAxB;AAEA,MAAMgJ,GAAG,GAAG,IAAIC,GAAJ,CAASF,eAAe,CAACvE,IAAzB,CAAZ;AACA,MAAM0E,cAAc,GAAG,IAAIC,eAAJ,CAAqBH,GAAG,CAACI,MAAzB,CAAvB;AAEA,MAAMC,YAAY,GAAG;AACjBC,YAAQ,EAAEJ,cAAc,CAACK,GAAf,CAAoB,WAApB;AADO,GAArB;AAIA,MAAMC,IAAI,GAAGpD,QAAQ,CAACpG,aAAT,cAA+BqJ,YAAY,CAACC,QAA5C,OAAb;AACA,MAAIG,IAAI,GAAG,CAAX;AACA,MAAIC,cAAc,GAAG,KAArB;AAEA,MAAM5E,KAAK,GAAG,IAAI6E,KAAJ,CAAW,eAAX,CAAd;AAEAZ,iBAAe,CAACnJ,gBAAhB,CAAkC,OAAlC,EAA2C,UAAAC,CAAC,EAAI;AAC5C;AACA,QAAKK,MAAM,CAACwD,KAAZ,EAAoB7D,CAAC,CAACC,cAAF;AAEpB,QAAK4J,cAAL,EAAsB,OAJsB,CAM5C;;AACA,QAAIE,UAAU,GAAGb,eAAe,CAAC5G,SAAjC;AACA4G,mBAAe,CAAC5G,SAAhB,GAA4B,iBAA5B;AAEA,QAAM0H,UAAU,GAAG,IAAI/F,QAAJ,EAAnB;AACA+F,cAAU,CAACC,MAAX,CAAmB,QAAnB,EAA6B,iBAA7B;AACAD,cAAU,CAACC,MAAX,CAAmB,WAAnB,EAAgCL,IAAI,GAAG,CAAvC;;AAZ4C,+CAcdP,cAdc;AAAA;;AAAA;AAc5C,0DAA+C;AAAA;AAAA,YAAjCtB,GAAiC;AAAA,YAA5B7E,KAA4B;;AAC3C8G,kBAAU,CAACC,MAAX,CAAmBlC,GAAnB,EAAwB7E,KAAxB;AACH;AAhB2C;AAAA;AAAA;AAAA;AAAA;;AAkB5CW,SAAK,CAAE5B,MAAM,CAAC6B,OAAT,EAAkB;AACnBC,YAAM,EAAE,MADW;AAEnBmG,iBAAW,EAAE,aAFM;AAGnBlG,UAAI,EAAEgG;AAHa,KAAlB,CAAL,CAKC9F,IALD,CAKO,UAAAI,QAAQ;AAAA,aAAIA,QAAQ,CAACF,IAAT,EAAJ;AAAA,KALf,EAMCF,IAND,CAMO,UAAAG,IAAI,EAAI;AACXuF,UAAI;AAEJD,UAAI,CAACrH,SAAL,GAAiBqH,IAAI,CAACrH,SAAL,IAAmB,CAAA+B,IAAI,SAAJ,IAAAA,IAAI,WAAJ,YAAAA,IAAI,CAAE8F,QAAN,KAAkB,EAArC,CAAjB;;AAEA,UAAKP,IAAI,KAAKvF,IAAI,CAAC+F,aAAnB,EAAmC;AAC/BlB,uBAAe,CAACzI,SAAhB,CAA0BC,GAA1B,CAA+B,mBAA/B;AACAmJ,sBAAc,GAAG,IAAjB;AACH;;AAED,UAAMQ,QAAQ,GAAGV,IAAI,CAAC7K,gBAAL,cAA8B0K,YAAY,CAACC,QAA3C,kBAAjB;AAEAY,cAAQ,CAAChL,OAAT,CAAkB,UAAEiL,IAAF,EAAQ9E,CAAR,EAAe;AAC7BpE,kBAAU,CAAE;AAAA,iBAAMkJ,IAAI,CAAC7J,SAAL,CAAeY,MAAf,CAAuB,aAAvB,CAAN;AAAA,SAAF,EAAgD,MAAOmE,CAAC,GAAG,CAAX,CAAhD,CAAV;AACH,OAFD;AAIA0D,qBAAe,CAAC5G,SAAhB,GAA4ByH,UAA5B;AAEA;;;;AAGAxD,cAAQ,CAACvC,IAAT,CAAcuG,aAAd,CAA6BtF,KAA7B;AACH,KA5BD;AA6BH,GA/CD;AAgDH,CAlEA;AAqED;;;;;AAGA;;AAAC,CAAE,YAAM;AACL,MAAMuF,WAAW,GAAGjE,QAAQ,CAACpG,aAAT,CAAwB,iCAAxB,CAApB;;AAEA,MAAK,CAACqK,WAAN,EAAoB;AAChB;AACH;;AAED,MAAMC,QAAQ,GAAG,IAAIC,oBAAJ,CAA0B,UAAEC,OAAF,EAAWF,QAAX,EAAyB;AAChEE,WAAO,CAACtL,OAAR,CAAiB,UAAAuL,KAAK,EAAI;AACtB,UAAKA,KAAK,CAACC,cAAX,EAA4B;AACxBtE,gBAAQ,CAACpG,aAAT,CAAwB,oBAAxB,EAA+CM,SAA/C,CAAyDY,MAAzD,CAAiE,sBAAjE;AACH,OAFD,MAEO,IAAKuJ,KAAK,CAACE,kBAAN,CAAyBC,CAAzB,GAA6B,CAAlC,EAAsC;AACzCxE,gBAAQ,CAACpG,aAAT,CAAwB,oBAAxB,EAA+CM,SAA/C,CAAyDC,GAAzD,CAA8D,sBAA9D;AACH;AACJ,KAND;AAOH,GARgB,EAQd;AAAEsK,aAAS,EAAE;AAAb,GARc,CAAjB;AAUAP,UAAQ,CAACQ,OAAT,CAAkBT,WAAlB;AACH,CAlBA;AAqBD;;;;;;;AAKA;;AAAC,CAAE,YAAM;AACL,MAAIU,SAAS,GAAG3E,QAAQ,CAACpG,aAAT,CAAwB,iBAAxB,CAAhB;;AAEA,MAAK,CAAC+K,SAAN,EAAkB;AACd;AACH;;AAED,MAAIC,gBAAgB,GAAGD,SAAS,CAAClD,IAAV,EAAvB;;AAEA,MAAKmD,gBAAgB,KAAKC,SAA1B,EAAsC;AAClCD,oBAAgB,SAAhB,CAAuB,UAACpJ,KAAD,EAAW;AAC9B;AACA,UAAIsJ,WAAW,GAAGC,WAAW,CAAC,YAAM;AACpCJ,iBAAS,CAAClD,IAAV,GACC9D,IADD,CACM,YAAM;AACRqH,uBAAa,CAACF,WAAD,CAAb;AACH,SAHD,WAIO,UAACtJ,KAAD,EAAW;AACd9C,iBAAO,CAAC4F,GAAR,CAAY,wDAAZ;AACH,SAND;AAOH,OARgC,EAQ9B,IAR8B,CAA7B;AASH,KAXD,EAWGX,IAXH,CAWQ,YAAM;AACVjF,aAAO,CAAC4F,GAAR,CAAY,sBAAZ;AACH,KAbD;AAcH;AACJ,CAzBA;AA4BD;;;;;AAGA,CAAE,YAAM;AACJ,MAAMyC,MAAM,GAAGf,QAAQ,CAACzH,gBAAT,CAA2B,sBAA3B,CAAf;;AAEA,MAAK,CAACwI,MAAM,CAACtI,MAAb,EAAsB;AAClB;AACH;;AAED,MAAKqB,MAAM,CAAC2I,UAAP,IAAqB,GAA1B,EAAgC;AAC5B;AACH;;AAED1B,QAAM,CAACjI,OAAP,CAAgB,UAAAkI,KAAK,EAAI;AACrB,QAAMiE,UAAU,GAAGjE,KAAK,CAACpH,aAAN,CAAqB,QAArB,CAAnB;AACA,QAAMsL,cAAc,GAAGD,UAAU,CAACE,qBAAX,EAAvB;AACA,QAAMC,IAAI,GAAGpE,KAAK,CAACpH,aAAN,CAAqB,MAArB,CAAb;AAEAwL,QAAI,CAAC9L,KAAL,CAAW+L,GAAX,aAAqBH,cAAc,CAAC5K,MAAf,GAAwB,EAA7C;AACA8K,QAAI,CAAC9L,KAAL,CAAWC,OAAX,GAAqB,OAArB;AACH,GAPD;AAQH,CAnBD;AAsBA;;;;;;AAIA,CAAE,YAAM;AACJ,MAAM+L,eAAe,GAAGtF,QAAQ,CAACpG,aAAT,CAAwB,qCAAxB,CAAxB;AAEA,MAAI,CAAE0L,eAAN,EAAwB;;AAExBxL,QAAM,CAACyL,QAAP,GAAkB,YAAW;AACzB,QAAKzL,MAAM,CAAC0L,WAAP,GAAqB1L,MAAM,CAAC2L,OAA7B,IAAyCzF,QAAQ,CAACvC,IAAT,CAAclD,YAA3D,EAAyE;AACrE+K,qBAAe,CAAChM,KAAhB,CAAsBC,OAAtB,GAAgC,MAAhC;AACH,KAFD,MAEO;AACH+L,qBAAe,CAAChM,KAAhB,CAAsBC,OAAtB,GAAgC,cAAhC;AACH;AACJ,GAND;AAOH,CAZD;AAcA;;;;;AAGA,CAAC,YAAM;AACH,MAAMmM,kBAAkB,GAAG1F,QAAQ,CAACpG,aAAT,CAAwB,uBAAxB,CAA3B;AAEA,MAAI,CAAE8L,kBAAN,EAA2B;AAE3B,MAAMC,cAAc,GAAG3F,QAAQ,CAACpG,aAAT,CAAwB,mBAAxB,CAAvB;AACA,MAAMgM,WAAW,GAAG5F,QAAQ,CAACpG,aAAT,CAAwB,eAAxB,CAApB;AACA,MAAMiM,gBAAgB,GAAG7F,QAAQ,CAACpG,aAAT,CAAwB,sBAAxB,CAAzB;AAGA+L,gBAAc,CAACnM,gBAAf,CAAiC,OAAjC,EAA0C,YAAW;AACjDoM,eAAW,CAAC1L,SAAZ,CAAsB4G,MAAtB,CAA8B,sBAA9B;AACH,GAFD;AAGA+E,kBAAgB,CAACrM,gBAAjB,CAAmC,OAAnC,EAA4C,YAAW;AACnDoM,eAAW,CAAC1L,SAAZ,CAAsBY,MAAtB,CAA8B,sBAA9B;AACH,GAFD;AAKA;;;;AAGA,WAASgL,aAAT,GAAyB;AACrBjL,cAAU,CAAE,YAAW;AACnB+K,iBAAW,CAAC1L,SAAZ,CAAsBC,GAAtB,CAA2B,sBAA3B;AACC,KAFK,EAEH,IAFG,CAAV;AAGH;;AACD2L,eAAa;AAEhB,CA5BD;AA+BA;;;;;AAGA,CAAE,YAAM;AACJ,MAAMC,eAAe,GAAG/F,QAAQ,CAACpG,aAAT,CAAwB,6BAAxB,CAAxB;AAEA,MAAI,CAACmM,eAAL,EAAuB;AAEvB,MAAMC,WAAW,GAAGD,eAAe,CAACnM,aAAhB,CAA+B,4BAA/B,CAApB;AAEA,MAAI,CAACoM,WAAL,EAAmB;AAEnB,MAAMC,aAAa,GAAGjG,QAAQ,CAACpG,aAAT,CAAwB,iBAAxB,CAAtB;AAEAqM,eAAa,CAAC3M,KAAd,CAAoBC,OAApB,GAA8B,OAA9B;AAEA,MAAMkI,IAAI,GAAGwE,aAAa,CAACrM,aAAd,CAA6B,OAA7B,CAAb;AACA,MAAMsM,KAAK,GAAGD,aAAa,CAACrM,aAAd,CAA6B,QAA7B,CAAd;AAEA,MAAIuM,YAAY,GAAG,IAAnB;AACA,MAAIC,YAAY,GAAG,KAAnB;AAEA3E,MAAI,CAACjI,gBAAL,CAAuB,OAAvB,EAA+B,YAAW;AACtCiI,QAAI,CAACvH,SAAL,CAAe4G,MAAf,CAAuB,QAAvB;;AAEA,QAAIqF,YAAY,IAAI,IAApB,EAA2B;AACvBH,iBAAW,CAAC1E,KAAZ;AACA6E,kBAAY,GAAG,KAAf;AACH,KAHD,MAGO;AACHH,iBAAW,CAACvE,IAAZ;AACA0E,kBAAY,GAAG,IAAf;AACH;AACJ,GAVD;AAYAD,OAAK,CAAC1M,gBAAN,CAAwB,OAAxB,EAAiC,YAAW;AACxC0M,SAAK,CAAChM,SAAN,CAAgB4G,MAAhB,CAAwB,OAAxB;;AAEA,QAAIsF,YAAY,IAAI,KAApB,EAA4B;AACxBJ,iBAAW,CAACK,KAAZ,GAAoB,KAApB;AACAD,kBAAY,GAAG,IAAf;AACH,KAHD,MAGO;AACHJ,iBAAW,CAACK,KAAZ,GAAoB,IAApB;AACAD,kBAAY,GAAG,KAAf;AACH;AACJ,GAVD;AAYH,CA3CD;AA8CA;;;;;AAGA,CAAE,YAAM;AACJ,MAAME,WAAW,GAAGtG,QAAQ,CAACpG,aAAT,CAAwB,uBAAxB,CAApB;AAEA,MAAI,CAAC0M,WAAL,EAAmB;AAEnB,MAAMC,SAAS,GAAGvG,QAAQ,CAACpG,aAAT,CAAwB,qBAAxB,CAAlB;AACA,MAAM4M,cAAc,GAAGxG,QAAQ,CAACpG,aAAT,CAAwB,4BAAxB,CAAvB;AACA,MAAM6M,UAAU,GAAGzG,QAAQ,CAACpG,aAAT,CAAyB,cAAzB,CAAnB;AACA,MAAM6D,IAAI,GAAGuC,QAAQ,CAACvC,IAAtB;AAGA6I,aAAW,CAAC9M,gBAAZ,CAA8B,OAA9B,EAAuC,YAAW;AAC9C+M,aAAS,CAAC3N,YAAV,CAAwB,aAAxB,EAAuC,OAAvC;AACA6E,QAAI,CAACvD,SAAL,CAAeC,GAAf,CAAoB,WAApB,EAAiC,gBAAjC;AACAsM,cAAU,CAACnN,KAAX,CAAiBoN,aAAjB,GAAiC,MAAjC;AACH,GAJD;AAMAF,gBAAc,CAAChN,gBAAf,CAAiC,OAAjC,EAA0CmN,cAA1C;;AAEA,WAASA,cAAT,GAA0B;AACtBJ,aAAS,CAAC3N,YAAV,CAAwB,aAAxB,EAAuC,MAAvC;AACA6E,QAAI,CAACvD,SAAL,CAAeY,MAAf,CAAuB,WAAvB,EAAoC,gBAApC;AACA2L,cAAU,CAACnN,KAAX,CAAiBoN,aAAjB,GAAiC,MAAjC;AACH;AAEJ,CAzBD,I;;;;;;;;;;;;AChkBA;AAAA;AAAA;;;;;AAKA;IAGQE,M,GAAiB3L,kD,CAAjB2L,M;IAAQnJ,I,GAASxC,kD,CAATwC,I,EAAiB;;AAGjC,CAAE,YAAM;AAAA;;AACJ,MAAMoJ,iBAAiB,GAAI7G,QAAQ,CAACpG,aAAT,CAAwB,sBAAxB,CAA3B;AAAA,MACMkN,UAAU,GAAW9G,QAAQ,CAACpG,aAAT,CAAwB,cAAxB,CAD3B;AAAA,MAEMmN,kBAAkB,GAAG,CAAAD,UAAU,SAAV,IAAAA,UAAU,WAAV,YAAAA,UAAU,CAAEvO,gBAAZ,CAA8B,iBAA9B,MAAqD,EAFhF;AAAA,MAGMyO,IAAI,GAAiBhH,QAAQ,CAACpG,aAAT,CAAwB,oCAAxB,CAH3B;AAAA,MAIMqN,YAAY,GAAS,CAAAD,IAAI,SAAJ,IAAAA,IAAI,WAAJ,YAAAA,IAAI,CAAEzO,gBAAN,CAAwB,iBAAxB,MAA+C,EAJ1E;AAAA,MAKM2O,aAAa,GAAQN,MAAM,CAACrK,aALlC;AAAA,MAMMkK,UAAU,GAAWzG,QAAQ,CAACpG,aAAT,CAAwB,oBAAxB,CAN3B;AASA;;;;AAGA,MAAMuN,eAAe,GAAGnH,QAAQ,CAACpG,aAAT,CAAwB,mBAAxB,CAAxB;AACA,MAAIwN,cAAc,GAAG,CAArB;;AAEA,MAAID,eAAJ,EAAsB;AAClBV,cAAU,CAACnN,KAAX,CAAiB+L,GAAjB,GAAuB8B,eAAe,CAAC5M,YAAhB,GAA+B,IAAtD;AACA6M,kBAAc,GAAGD,eAAe,CAAC5M,YAAjC;AACH;AAGD;;;;;AAGA,MAAI8M,cAAc,GAAG,CAArB;AACA,MAAIC,gBAAgB,GAAG,IAAvB;;AACA,WAASC,mBAAT,GAA+B;AAC3B,QAAMC,SAAS,GAAG1N,MAAM,CAAC2N,WAAP,IAAsBzH,QAAQ,CAAC0H,eAAT,CAAyBC,SAAjE;AACA,QAAIlD,SAAS,GAAGmD,sDAAE,KAAK,CAAvB;;AAEA,QAAK9N,MAAM,CAAC2I,UAAP,IAAqB,GAArB,IAA4B,CAACzC,QAAQ,CAACvC,IAAT,CAAcvD,SAAd,CAAwB2N,QAAxB,CAAkC,YAAlC,CAAlC,EAAqF;AACjFpD,eAAS,GAAG,GAAZ;AACH;AAED;;;AACA,QAAK+C,SAAS,IAAI/C,SAAlB,EAA8B;AAC1BmC,YAAM,CAAC1M,SAAP,CAAiBC,GAAjB,CAAsB,gBAAtB;AAEAU,gBAAU,CAAE,YAAM;AACd+L,cAAM,CAAC1M,SAAP,CAAiBC,GAAjB,CAAsB,YAAtB;;AAEA,YAAKmN,gBAAL,EAAwB;AACpBQ,0BAAgB;AAChBR,0BAAgB,GAAG,KAAnB;AACH;AACJ,OAPS,EAOP,EAPO,CAAV;AASA;;AACA,UAAKE,SAAS,GAAGH,cAAjB,EAAkC;AAE9B;AACA,YAAKA,cAAc,GAAGG,SAAS,GAAG,EAAlC,EAAuC;AACnC,cAAKF,gBAAL,EAAwB;AACpBQ,4BAAgB;AACnB;;AACDlB,gBAAM,CAAC1M,SAAP,CAAiBC,GAAjB,CAAsB,YAAtB;AACAsD,cAAI,CAACvD,SAAL,CAAeC,GAAf,CAAoB,qBAApB;AACH,SAND,MAMO;AACH;AACH;AAEJ,OAbD,MAaO;AACHyM,cAAM,CAAC1M,SAAP,CAAiBY,MAAjB,CAAyB,YAAzB;AACA2C,YAAI,CAACvD,SAAL,CAAeY,MAAf,CAAuB,qBAAvB;AACH;AAEJ,KA/BD,MA+BO,IAAK0M,SAAS,GAAGH,cAAZ,IAA8BG,SAAS,IAAIJ,cAAhD,EAAiE;AACpE,UAAKR,MAAM,CAAC1M,SAAP,CAAiB2N,QAAjB,CAA2B,gBAA3B,KAAiD,CAACP,gBAAvD,EAA0E;AACtEzM,kBAAU,CAAE,YAAM;AACdiN,0BAAgB;AAChBR,0BAAgB,GAAG,IAAnB;AACH,SAHS,EAGP,EAHO,CAAV;AAIH;;AAEDV,YAAM,CAAC1M,SAAP,CAAiBY,MAAjB,CAAyB,gBAAzB,EAA2C,YAA3C,EAAyD,YAAzD;AACA2C,UAAI,CAACvD,SAAL,CAAeY,MAAf,CAAuB,qBAAvB;AACH;;AAEDuM,kBAAc,GAAGG,SAAjB;AACH;;AACD1N,QAAM,CAACN,gBAAP,CAAyB,QAAzB,EAAmC+N,mBAAnC,EAAwD;AAAEQ,WAAO,EAAE;AAAX,GAAxD;AAGJ/H,UAAQ,CAACxG,gBAAT,CAA0B,kBAA1B,EAA8C,YAAW;AACrD,QAAIwO,MAAM,GAAGhI,QAAQ,CAACpG,aAAT,CAAuB,SAAvB,CAAb,CADqD,CAErD;;AACA,aAASqO,sBAAT,GAAkC;AAC9B,UAAInO,MAAM,CAAC2L,OAAP,IAAkB,GAAtB,EAA2B;AACvBuC,cAAM,CAAC1O,KAAP,CAAaC,OAAb,GAAuB,MAAvB,CADuB,CACQ;AAClC,OAFD,MAEO;AACHyO,cAAM,CAAC1O,KAAP,CAAaC,OAAb,GAAuB,MAAvB,CADG,CAC4B;AAClC;AACJ,KAToD,CAUrD;;;AACA0O,0BAAsB,GAX+B,CAYrD;;AACAnO,UAAM,CAACN,gBAAP,CAAwB,QAAxB,EAAkCyO,sBAAlC;AACH,GAdD;AAqBAjI,UAAQ,CAACxG,gBAAT,CAA0B,kBAA1B,EAA8C,YAAW;AACrD,QAAIwO,MAAM,GAAGhI,QAAQ,CAACpG,aAAT,CAAuB,oBAAvB,CAAb;;AACA,QAAI,CAACoO,MAAL,EAAa;AACT,aADS,CACD;AACX;;AACD,aAASE,qBAAT,GAAiC;AAC7B,UAAIpO,MAAM,CAAC2L,OAAP,IAAkB,GAAtB,EAA2B;AAAE;AACzBuC,cAAM,CAAC1O,KAAP,CAAaC,OAAb,GAAuB,MAAvB;AACH,OAFD,MAEO;AACHyO,cAAM,CAAC1O,KAAP,CAAaC,OAAb,GAAuB,OAAvB;AACH;AACJ,KAXoD,CAYrD;;;AACA2O,yBAAqB,GAbgC,CAcrD;;AACApO,UAAM,CAACN,gBAAP,CAAwB,QAAxB,EAAkC0O,qBAAlC;AACH,GAhBD;;AAmBC,WAASD,sBAAT,GAAkC;AAC/B;AACA,QAAIf,aAAa,GAAGlH,QAAQ,CAACpG,aAAT,CAAuB,iBAAvB,CAApB,CAF+B,CAG/B;;AACA,QAAIuO,eAAe,GAAGnI,QAAQ,CAACpG,aAAT,CAAuB,oBAAvB,CAAtB,CAJ+B,CAK/B;;AACA,QAAIsN,aAAa,IAAIA,aAAa,CAAChN,SAAd,CAAwB2N,QAAxB,CAAiC,oBAAjC,CAArB,EAA6E;AACzEM,qBAAe,CAAC7O,KAAhB,CAAsBC,OAAtB,GAAgC,MAAhC;AACH,KAFD,MAEO;AACH4O,qBAAe,CAAC7O,KAAhB,CAAsBC,OAAtB,GAAgC,OAAhC;AACH;AACJ,GAvIO,CAwIR;;;AACAyG,UAAQ,CAACpG,aAAT,CAAuB,sBAAvB,EAA+CJ,gBAA/C,CAAgE,OAAhE,EAAyE,YAAW;AAChF;AACA;AACAqB,cAAU,CAACoN,sBAAD,EAAyB,EAAzB,CAAV;AACH,GAJD;AAWI;;;;AAGAnB,YAAU,CAACtN,gBAAX,CAA6B,OAA7B,EAAsC,UAAAC,CAAC;AAAA,WAAIA,CAAC,CAAC2O,eAAF,EAAJ;AAAA,GAAvC;;AAEA,WAASC,cAAT,CAAyB3J,KAAzB,EAAiC;AAC7BA,SAAK,CAAC0J,eAAN;;AAEA,QAAK,CAAClB,aAAa,CAAChN,SAAd,CAAwB2N,QAAxB,CAAkC,oBAAlC,CAAN,EAAiE;AAC7DhB,uBAAiB,CAACjN,aAAlB,CAAiC,kBAAjC,EAAsDhB,YAAtD,CAAoE,WAApE,EAAiF,iCAAjF;AACAiO,uBAAiB,CAACjN,aAAlB,CAAiC,iBAAjC,EAAqDhB,YAArD,CAAmE,WAAnE,EAAiF,oCAAjF;AAEAkO,gBAAU,CAAClO,YAAX,CAAyB,aAAzB,EAAwC,KAAxC;AACAsO,mBAAa,CAAChN,SAAd,CAAwBC,GAAxB,CAA6B,oBAA7B;AACAsD,UAAI,CAACvD,SAAL,CAAeC,GAAf,CAAoB,WAApB,EAAiC,gBAAjC;AACAsM,gBAAU,CAACnN,KAAX,CAAiB+L,GAAjB,GAAuB,CAAvB;AAEAxK,gBAAU,CAAE,YAAM;AACdf,cAAM,CAACN,gBAAP,CAAyB,OAAzB,EAAkC8O,eAAlC;AACH,OAFS,EAEP,GAFO,CAAV;AAGH,KAZD,MAYO;AACHzB,uBAAiB,CAACjN,aAAlB,CAAiC,kBAAjC,EAAsDhB,YAAtD,CAAoE,WAApE,EAAiF,EAAjF;AACAiO,uBAAiB,CAACjN,aAAlB,CAAiC,iBAAjC,EAAqDhB,YAArD,CAAmE,WAAnE,EAAgF,EAAhF;AAEAkO,gBAAU,CAAClO,YAAX,CAAyB,aAAzB,EAAwC,IAAxC;AACAsO,mBAAa,CAAChN,SAAd,CAAwBY,MAAxB,CAAgC,oBAAhC;AACA2C,UAAI,CAACvD,SAAL,CAAeY,MAAf,CAAuB,WAAvB,EAAoC,gBAApC;;AACA,UAAIqM,eAAJ,EAAsB;AAClBV,kBAAU,CAACnN,KAAX,CAAiB+L,GAAjB,GAAuB8B,eAAe,CAAC5M,YAAhB,GAA+B,IAAtD;AACH;;AAEDM,gBAAU,CAAE,YAAM;AACdf,cAAM,CAACuF,mBAAP,CAA4B,OAA5B,EAAqCiJ,eAArC;AACH,OAFS,EAEP,GAFO,CAAV;AAGH;AACJ;;AACDzB,mBAAiB,CAACrN,gBAAlB,CAAoC,OAApC,EAA6C6O,cAA7C;;AAEA,WAASC,eAAT,CAA0B5J,KAA1B,EAAkC;AAC9BA,SAAK,CAAChF,cAAN;AAEAoN,cAAU,CAAClO,YAAX,CAAyB,aAAzB,EAAwC,IAAxC;AACAsO,iBAAa,CAAChN,SAAd,CAAwBY,MAAxB,CAAgC,oBAAhC;AACA2C,QAAI,CAACvD,SAAL,CAAeY,MAAf,CAAuB,WAAvB,EAAoC,gBAApC;AAEAD,cAAU,CAAE,YAAM;AACdf,YAAM,CAACuF,mBAAP,CAA4B,OAA5B,EAAqCiJ,eAArC;AACH,KAFS,EAEP,GAFO,CAAV;AAGH;AAGD;;;;;AAGAtB,MAAI,SAAJ,IAAAA,IAAI,WAAJ,YAAAA,IAAI,CAAE9M,SAAN,CAAgBC,GAAhB,CAAqB8M,YAAY,CAACxO,MAAb,IAAuB,CAAvB,GAA2B,kBAA3B,GAAgD,eAArE;AACA,2BAAAqO,UAAU,CAAClN,aAAX,CAA0B,KAA1B,iFAAmCM,SAAnC,CAA6CC,GAA7C,CAAkD4M,kBAAkB,CAACtO,MAAnB,IAA6B,CAA7B,GAAiC,kBAAjC,GAAsD,eAAxG;AACA,MAAM8P,YAAY,GAAG,YAArB,CA5MI,CA8MJ;;AACAtB,cAAY,CAACnO,OAAb,CAAsB,gBAA6B;AAAA,QAA1BE,QAA0B,QAA1BA,QAA0B;AAAA,QAAhBkB,SAAgB,QAAhBA,SAAgB;AAC/C,QAAMsO,IAAI,GAAGxP,QAAQ,CAAC,CAAD,CAArB;AAAA,QACMyP,SAAS,GAAGzP,QAAQ,CAAC,CAAD,CAD1B;AAGA,QAAI0P,UAAJ;AAEAF,QAAI,CAAChP,gBAAL,CAAuB,WAAvB,EAAoC,UAAAkF,KAAK,EAAI;AACzCA,WAAK,CAAChF,cAAN;AAEAiP,kBAAY,CAAED,UAAF,CAAZ;;AAEA,UAAKxO,SAAS,CAAC2N,QAAV,CAAoBU,YAApB,MAAuC,IAA5C,EAAmD;AAC/CrO,iBAAS,CAACC,GAAV,CAAeoO,YAAf;AACH;AACJ,KARD;AAUAC,QAAI,CAAChP,gBAAL,CAAuB,YAAvB,EAAqC,YAAM;AACvCkP,gBAAU,GAAG7N,UAAU,CAAE,YAAM;AAC3BX,iBAAS,CAACY,MAAV,CAAkByN,YAAlB;AACH,OAFsB,EAEpB,GAFoB,CAAvB;AAGH,KAJD;AAMAE,aAAS,CAACjP,gBAAV,CAA4B,WAA5B,EAAyC,YAAM;AAC3CmP,kBAAY,CAAED,UAAF,CAAZ;AACH,KAFD;AAIAD,aAAS,CAACjP,gBAAV,CAA4B,YAA5B,EAA0C,YAAM;AAC5CkP,gBAAU,GAAG7N,UAAU,CAAE,YAAM;AAC3BX,iBAAS,CAACY,MAAV,CAAkByN,YAAlB;AACH,OAFsB,EAEpB,GAFoB,CAAvB;AAGH,KAJD;AAKH,GA/BD,EA/MI,CAgPJ;;AACAxB,oBAAkB,CAACjO,OAAnB,CAA4B,UAAA8P,OAAO,EAAI;AACnC,QAAM9H,MAAM,GAAG8H,OAAO,CAAC5P,QAAR,CAAiB,CAAjB,CAAf;AAEA8H,UAAM,CAACtH,gBAAP,CAAyB,OAAzB,EAAkC,UAAAkF,KAAK,EAAI;AACvCA,WAAK,CAAChF,cAAN;AACAkP,aAAO,CAAC1O,SAAR,CAAkB4G,MAAlB,CAA0ByH,YAA1B;AACH,KAHD;AAIH,GAPD;AASA;;;;AAGA,WAASM,KAAT,CAAeC,IAAf,EAAqB;AACjB,SAAI,IAAIC,CAAC,GAAG,CAAZ,EAAeA,CAAC,GAAGD,IAAI,CAACE,UAAL,CAAgBvQ,MAAnC,EAA2CsQ,CAAC,EAA5C,EAAiD;AAE7C,UAAIE,KAAK,GAAGH,IAAI,CAACE,UAAL,CAAgBD,CAAhB,CAAZ;;AACA,UAAGE,KAAK,CAACC,QAAN,KAAmB,CAAnB,IAAyBD,KAAK,CAACC,QAAN,KAAmB,CAAnB,IAAwB,CAAC,KAAKC,IAAL,CAAUF,KAAK,CAACG,SAAhB,CAArD,EAAkF;AAC9EN,YAAI,CAAC1L,WAAL,CAAiB6L,KAAjB;AACAF,SAAC;AACJ,OAHD,MAIK,IAAGE,KAAK,CAACC,QAAN,KAAmB,CAAtB,EAAyB;AAC1BL,aAAK,CAACI,KAAD,CAAL;AACH;AACJ;AACJ;AAED;;;;;AAGA,WAASnB,gBAAT,GAA4B;AAAA;;AACxB,QAAMuB,IAAI,GAAGrJ,QAAQ,CAACpG,aAAT,CAAwB,YAAxB,CAAb;AAEA,QAAK,CAACyP,IAAN,EAAa;AAEbR,SAAK,CAAEQ,IAAF,CAAL;AAEA,QAAI,CAACA,IAAI,CAACC,aAAL,EAAL,EAA4B;AAE5B,QAAIC,GAAG,GAAGF,IAAI,CAACrQ,QAAL,CAAc,CAAd,CAAV;AAEA,QAAIwQ,OAAO,GAAGD,GAAG,CAACxJ,YAAJ,CAAkB,SAAlB,CAAd;AAAA,QACI0J,MAAM,GAAID,OAAO,CAACE,KAAR,CAAe,GAAf,CADd;AAAA,QAEIC,YAAY,GAAGrH,UAAU,CAAEmH,MAAM,CAAC,CAAD,CAAR,CAF7B;AAAA,QAGIG,aAAa,GAAGtH,UAAU,CAAEmH,MAAM,CAAC,CAAD,CAAR,CAH9B;AAAA,QAIII,SAAS,GAAGN,GAAG,CAAC3P,aAAJ,CAAmB,GAAnB,CAJhB;AAAA,QAKIkQ,KAAK,GAAKH,YAAY,GAAGC,aAL7B;AAAA,QAMIG,KAAK,GAAKV,IAAI,CAAC9O,YAAL,GAAoBuP,KANlC;AAAA,QAOIxP,MAAM,GAAI,CAPd;AAUAwP,SAAK,YAAGD,SAAS,CAACG,OAAV,GAAoBD,KAApB,GAA4BF,SAAS,CAACG,OAAV,GAAoB1P,MAAnD,yCAA6D,CAAlE;AAEAyP,SAAK,YAAGE,IAAI,CAACC,KAAL,CAAYD,IAAI,CAACE,KAAL,CAAYd,IAAI,CAAC9O,YAAL,GAAoBuP,KAAhC,IAA0C,GAAtD,IAA8D,GAAjE,yCAAwE,CAA7E;AACAxP,UAAM,YAAG2P,IAAI,CAACC,KAAL,CAAYD,IAAI,CAACE,KAAL,CAAYJ,KAAK,GAAGD,KAApB,IAA8B,GAA1C,IAAkD,GAArD,yCAA4D,CAAlE;AAEA,QAAMM,eAAe,YAAGH,IAAI,CAACC,KAAL,CAAYD,IAAI,CAACE,KAAL,CAAYR,YAAY,GAAGG,KAA3B,IAAqC,GAAjD,IAAyD,GAA5D,yCAAmE,CAAxF;AAEAP,OAAG,CAAC3Q,YAAJ,CAAkB,SAAlB,gBAAqC+Q,YAArC,cAAuDS,eAAvD;AACAb,OAAG,CAAC3Q,YAAJ,CAAkB,OAAlB,EAA2BmR,KAA3B;AACAR,OAAG,CAAC3Q,YAAJ,CAAkB,QAAlB,EAA4B0B,MAA5B;AACH;;AACDwN,kBAAgB;AAChBhO,QAAM,CAACN,gBAAP,CAAyB,QAAzB,EAAmCsO,gBAAnC;AAEH,CAjTD,I;;;;;;;;;;;;;;;;;;;;;;ACXA;;;IAGM/M,e;;;oCAEc;AACZ,aAAO,EAAP;AACH;;;sCAEiB;AACd,aAAO,EAAP;AACH;AAED;;;;;;;;;AAMA,2BAAazC,MAAb,EAAqC;AAAA,QAAhBE,QAAgB,uEAAL,EAAK;;AAAA;;AAEjC,QAAK,OAAOF,MAAP,KAAkB,QAAvB,EAAkC;AAC9B,WAAKA,MAAL,GAAc0H,QAAQ,CAACpG,aAAT,CAAwBtB,MAAxB,KAAoC,KAAlD;AACH,KAFD,MAEO;AACH,WAAKA,MAAL,GAAcA,MAAd;AACH;;AAED,QAAK,CAAE,KAAKA,MAAZ,EAAqB;AACjB,YAAM,IAAI+R,KAAJ,CAAW,wBAAX,CAAN;AACH;;AAED,QAAKC,MAAM,CAACC,IAAP,CAAa/R,QAAb,EAAwBC,MAAxB,IAAkC,CAAvC,EAA2C;AACvCD,cAAQ,GAAG,KAAKgS,eAAL,EAAX;AACH;;AAED,SAAKhS,QAAL,GAAgBiS,kBAAkB,CAAEH,MAAM,CAACI,MAAP,CAAe,KAAKF,eAAL,EAAf,EAAuChS,QAAvC,CAAF,EAAqD,KAAKF,MAA1D,EAAkE,KAAKqS,aAAL,EAAlE,CAAlC;AAEA,SAAKvR,WAAL,GAAmBwR,mBAAmB,CAAE,KAAKtS,MAAP,EAAe,KAAKqS,aAAL,EAAf,CAAtC;AACA,SAAKrS,MAAL,CAAYuS,EAAZ,GAAiB,KAAKzR,WAAtB;AACH;;;;AAIL;;;;;;;;;;;;AAWA,SAAS0R,SAAT,CAAoBC,GAApB,EAA0B;AAEtB,MAAKA,GAAG,CAACnJ,KAAJ,CAAW,SAAX,CAAL,EAA8B;AAC1B,WAAO,IAAP;AAEH,GAHD,MAGO,IAAKmJ,GAAG,CAACnJ,KAAJ,CAAW,UAAX,CAAL,EAA+B;AAClC,WAAO,KAAP;AAEH,GAHM,MAGA;AACH,WAAOmJ,GAAP;AACH;AACJ;AAGD;;;;;;;;;;;;;;;AAaA,SAASN,kBAAT,GAAiE;AAAA,MAApCjS,QAAoC,uEAAzB,EAAyB;AAAA,MAArB0H,EAAqB;AAAA,MAAjB8K,SAAiB,uEAAL,EAAK;;AAE7D,MAAK9K,EAAE,IAAIA,EAAE,CAAC+K,YAAH,uBAAgCD,SAAhC,EAAX,EAA2D;AAEvDV,UAAM,CAACC,IAAP,CAAa/R,QAAb,EAAwBM,OAAxB,CAAiC,UAAAoS,CAAC,EAAI;AAElC,UAAKhL,EAAE,CAAC+K,YAAH,gBAAyBD,SAAzB,cAAsCE,CAAtC,EAAL,EAAmD;AAC/C1S,gBAAQ,CAAC0S,CAAD,CAAR,GAAcJ,SAAS,CAAE5K,EAAE,CAACH,YAAH,gBAAyBiL,SAAzB,cAAsCE,CAAtC,EAAF,CAAvB;AACH;AACJ,KALD;AAMH;;AAED,SAAO1S,QAAP;AACH;AAGD;;;;;;;;;;;;;AAWA,SAASoS,mBAAT,CAA8B1K,EAA9B,EAAmD;AAAA,MAAjB8K,SAAiB,uEAAL,EAAK;AAE/C;AACA,MAAK9K,EAAE,CAAC+K,YAAH,CAAiB,IAAjB,CAAL,EAA+B,OAAO/K,EAAE,CAAC2K,EAAV;AAE/B,MAAMM,GAAG,GAAG,UAAGH,SAAH,SAAkBf,IAAI,CAACE,KAAL,CAAYF,IAAI,CAACmB,MAAL,KAAgBnB,IAAI,CAACE,KAAL,CAAY,GAAZ,CAA5B,CAA9B,CAL+C,CAO/C;;AACA,MAAKnK,QAAQ,CAACqL,cAAT,CAAyBF,GAAzB,CAAL,EAAsCP,mBAAmB,CAAE1K,EAAF,EAAM8K,SAAN,CAAnB;AAEtC,SAAOG,GAAP;AACH;;AAEcpQ,8EAAf;;;;;;;;;;;;;ACzHA;AAAA;AAAA;AAAA;;;;AAIA;AAGe,SAAS0F,YAAT,GAAwB;AAEnC,MAAM6K,UAAU,GAAG,sBAAnB;;AAEA,MAAKtL,QAAQ,CAACuL,MAAT,CAAgBC,OAAhB,CAAyBF,UAAzB,KAAyC,CAAC,CAA/C,EAAmD;AAC/C,QAAMpL,EAAE,GAAGjD,wDAAQ,CAAE,KAAF,CAAnB;AACAiD,MAAE,CAAChG,SAAH,CAAaC,GAAb,CAAkB,sBAAlB;AAEA+F,MAAE,CAACnE,SAAH,gCACYL,MAAM,CAAC6P,MAAP,CAAc9M,OAD1B;AAKAuB,YAAQ,CAACvC,IAAT,CAAcN,WAAd,CAA2B+C,EAA3B;AAEArF,cAAU,CAAE,YAAW;AACnBqF,QAAE,CAAChG,SAAH,CAAaC,GAAb,CAAkB,YAAlB;AACH,KAFS,EAEP,IAFO,CAAV,CAX+C,CAe/C;;AACA6F,YAAQ,CAACqL,cAAT,CAAyB,sBAAzB,EAAkD7R,gBAAlD,CAAoE,OAApE,EAA6E,UAAAC,CAAC,EAAI;AAC9EA,OAAC,CAACC,cAAF;AAEA,UAAI+R,MAAM,GAAG,IAAIC,IAAJ,EAAb;AAEAD,YAAM,CAACE,OAAP,CAAgBF,MAAM,CAACG,OAAP,KAAmB,EAAnC,EAL8E,CAO9E;;AACA5L,cAAQ,CAACuL,MAAT,aAAqBD,UAArB,OAAmC,IAAnC,uBAAoDG,MAApD,cAR8E,CAW9E;;AACAvL,QAAE,CAAChG,SAAH,CAAaY,MAAb,CAAqB,YAArB;AAEAD,gBAAU,CAAE,YAAM;AACdmF,gBAAQ,CAACvC,IAAT,CAAcL,WAAd,CAA2B8C,EAA3B;AACH,OAFS,EAEP,IAFO,CAAV;AAIH,KAlBD;AAmBH;AACJ;AAAA,C;;;;;;;;;;;;AC/CD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAGA,IAAM0G,MAAM,GAAM5G,QAAQ,CAACpG,aAAT,CAAwB,oBAAxB,CAAlB;AAAA,IACMoB,IAAI,GAAQgF,QAAQ,CAAC6L,oBAAT,CAA+B,MAA/B,EAAwC,CAAxC,CADlB;AAAA,IAEMpO,IAAI,GAAQuC,QAAQ,CAACvC,IAF3B;AAIA,IAAMxC,MAAM,GAAG;AAAE2L,QAAM,EAANA,MAAF;AAAU5L,MAAI,EAAJA,IAAV;AAAgByC,MAAI,EAAJA;AAAhB,CAAf;AAGA;;;;;;;AAMA,SAASR,QAAT,CAAmBiD,EAAnB,EAAwB;AAEpB,SAAOF,QAAQ,CAAC8L,aAAT,CAAwB5L,EAAxB,CAAP;AACH;AAGD;;;;;;;AAKA,SAAS6L,EAAT,GAAc;AACV,SAAOjS,MAAM,CAAC2I,UAAd;AACH;AAGD;;;;;;;AAKA,SAASmF,EAAT,GAAc;AACV,SAAO9N,MAAM,CAAC0L,WAAd;AACH;AAGD;;;;;;AAKA,IAAM0F,CAAC,GAAK,GAAZ;AACA,IAAMc,CAAC,GAAK,GAAZ;AACA,IAAMC,CAAC,GAAK,GAAZ;AACA,IAAMC,EAAE,GAAI,IAAZ;AACA,IAAMC,GAAG,GAAG,KAAZ;AAGA;;;;;;;;;AAQA,SAASC,CAAT,CAAYrC,KAAZ,EAAmBsC,EAAnB,EAA8D;AAAA,MAAvCC,QAAuC,uEAA5B,YAAM,CAAE,CAAoB;AAAA,MAAlBC,OAAkB,uEAAR,KAAQ;AAC1D,MAAI5P,KAAJ;;AAEA,UAASoN,KAAT;AACI,SAAKmB,CAAL;AAAYvO,WAAK,GAAG,GAAR;AAAa;;AACzB,SAAKqP,CAAL;AAAYrP,WAAK,GAAG,GAAR;AAAa;;AACzB,SAAKsP,CAAL;AAAYtP,WAAK,GAAG,IAAR;AAAc;;AAC1B,SAAKuP,EAAL;AAAYvP,WAAK,GAAG,IAAR;AAAc;;AAC1B,SAAKwP,GAAL;AAAYxP,WAAK,GAAG,IAAR;AAAc;;AAC1B;AAAYA,WAAK,GAAGoN,KAAR;AANhB;;AASA,MAAMyC,GAAG,GAAG,SAANA,GAAM,GAAM;AACd,QAAIC,KAAK,GAAG,KAAZ;;AAEA,QAAKV,EAAE,MAAMpP,KAAb,EAAqB;AACjB,UAAK4P,OAAO,IAAI,CAAEE,KAAlB,EAA0B;AAC1BJ,QAAE;AAEFI,WAAK,GAAG,KAAR;AAEH,KAND,MAMO;AACH,UAAKF,OAAO,IAAIE,KAAhB,EAAwB;AACxBH,cAAQ;AAERG,WAAK,GAAG,IAAR;AACH;AACJ,GAfD;;AAiBAzM,UAAQ,CAACxG,gBAAT,CAA2B,kBAA3B,EAA+CgT,GAA/C;AACA1S,QAAM,CAACN,gBAAP,CAAyB,QAAzB,EAAmCgT,GAAnC;AACA1S,QAAM,CAACN,gBAAP,CAAyB,mBAAzB,EAA8CgT,GAA9C;AACH;AAED","file":"main.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n","/**\n * Imports\n */\nimport ShiftrComponent from '../inc/component-functions'\n\n\n/**\n * Shiftr Component: Accordion\n */\nexport default class Accordion extends ShiftrComponent {\n\n    componentSlug() {\n        return 'accordion'\n    }\n\n    defaultSettings() {\n        return {\n            itemsTarget: '.shiftr-accordion__item',\n            duration: 600,\n            defaultOpen: 0,\n            allowMultiOpen: false\n        }\n    }\n\n    /**\n     * We want some extra things to happen here\n     */\n    constructor( ...args ) {\n        super( ...args )\n\n        this.items = this.target.querySelectorAll( this.settings.itemsTarget )\n    }\n\n    /**\n     * Initiate the component\n     */\n    init() {\n        \n        if ( this.items.length <= 0 ) {\n            console.warn( 'This Accordion component contains no items.' )\n            return false;\n        }\n\n        this.target.setAttribute( 'role', 'tablist' )\n\n        /**\n         * Prepare each item\n         */\n        let index = 0\n        this.items.forEach( item => {\n\n            const [ tab, panel ] = item.children\n\n            const tabID = `${this.componentID}-tab_${index}`,\n                  panelID = `${this.componentID}-panel_${index}`\n\n            // handle the label\n            tab.setAttribute( 'id', tabID )\n            tab.setAttribute( 'role', 'tab' )\n            tab.setAttribute( 'aria-selected', false )\n            tab.setAttribute( 'aria-controls', panelID )\n\n            // handle the content\n            panel.style.display = 'none'\n            panel.setAttribute( 'id', panelID )\n            panel.setAttribute( 'role', 'tabpanel' )\n            panel.setAttribute( 'aria-labelledby', tabID )\n            panel.setAttribute( 'hidden', '' )\n\n            tab.addEventListener( 'click', e => {\n                e.preventDefault()\n    \n                if ( ! this.settings.allowMultiOpen ) {\n                    const current = this.target.querySelector( '.shiftr-accordion__item.is-expanded' ) || null\n    \n                    if ( current != item && current !== null ) {\n                        this.close( current )\n                    }\n                }\n    \n                if ( window.getComputedStyle( panel ).display === 'none' ) {\n                    this.open( item )\n    \n                } else {\n                    this.close( item )\n                }\n            });\n\n            index++\n        })\n\n        /**\n         * Set a first open state\n         */\n        if ( this.settings.defaultOpen >= 0 ) {\n            const first = this.items[ this.settings.defaultOpen ]\n    \n            first.classList.add( 'is-expanded' )\n    \n            first.children[0].setAttribute( 'aria-selected', true )\n            first.children[1].removeAttribute( 'hidden' )\n            first.children[1].style.display = 'block'\n        }\n    }\n\n    /**\n     * Open an Accordion item\n     */\n    open( item ) {\n        item.classList.add( 'is-expanded' )\n\n        const [ tab, panel ] = item.children\n\n        // ARIA\n        tab.setAttribute( 'aria-selected', 'true' )\n        panel.removeAttribute( 'hidden' )\n\n        // Styling & transition\n        panel.style.removeProperty( 'display' )\n\n        const display = window.getComputedStyle( panel ).display\n\n        if ( display === 'none' ) {\n            display = 'block'\n        }\n\n        panel.style.display = display\n\n        const height = panel.offsetHeight\n\n        panel.style.overflow = 'hidden'\n        panel.style.height = 0\n        panel.style.paddingTop = 0\n        panel.style.paddingBottom = 0\n        panel.offsetHeight\n        panel.style.transitionProperty = \"height, padding\"\n        panel.style.transitionDuration = this.settings.duration + 'ms'\n        panel.style.height = height + 'px'\n\n        panel.style.removeProperty( 'padding-top' )\n        panel.style.removeProperty( 'padding-bottom' )\n\n        setTimeout( () => {\n            panel.style.removeProperty( 'height' )\n            panel.style.removeProperty( 'overflow' )\n            panel.style.removeProperty( 'transition-duration' )\n            panel.style.removeProperty( 'transition-property' )\n        }, this.settings.duration )\n    }\n\n    /**\n     * Close an Accordion item\n     */\n    close( item ) {\n        item.classList.remove( 'is-expanded' )\n\n        const [ tab, panel ] = item.children\n\n        // ARIA\n        tab.setAttribute( 'aria-selected', false )\n        panel.setAttribute( 'hidden', '' )\n\n        // Styling & transition\n        panel.style.transitionProperty = 'height, padding'\n        panel.style.transitionDuration = this.settings.duration + 'ms'\n        panel.style.height = panel.offsetHeight + 'px'\n        panel.offsetHeight\n        panel.style.overflow = 'hidden'\n        panel.style.height = 0\n        panel.style.paddingTop = 0\n        panel.style.paddingBottom = 0\n\n        setTimeout( () => {\n            panel.style.display = 'none';\n            panel.style.removeProperty( 'height' )\n            panel.style.removeProperty( 'padding-top' )\n            panel.style.removeProperty( 'padding-bottom' )\n            panel.style.removeProperty( 'overflow' )\n            panel.style.removeProperty( 'transition-duration' )\n            panel.style.removeProperty( 'transition-property' )\n        }, this.settings.duration )\n    }\n}\n","/**\n * Imports\n */\nimport { Layout, createEl } from '../inc/global'\nimport ShiftrComponent from '../inc/component-functions'\n\nconst { head } = Layout\n\n\n/**\n * class\n */\nexport default class Form extends ShiftrComponent {\n\n    /** @var {bool} cssRequested State of the stylesheet download for Form actions */\n    cssRequested = false\n\n    componentSlug() {\n        return 'form'\n    }\n\n    defaultSettings() {\n        return {\n            validate: true,\n            submission: true,\n            validationClasses: {\n                focus: 'field-event--focus',\n                success: 'field-event--success',\n                error: 'field-event--error'\n            },\n            submitMessageCopy: shiftr.form || {}\n        }\n    }\n\n\n    /**\n     * \n     */\n    constructor( ...args ) {\n        super( ...args )\n\n        this.fields = this.target.querySelectorAll( 'input:not([type=\"hidden\"]):not([type=\"submit\"]), textarea, select' )\n        this.submitButton = this.target.querySelector( '[type=\"submit\"]' )\n        this.submitButtonOrgLabel = this.submitButton.innerHTML\n\n        this.actionClass = this.settings.validationClasses\n    }\n\n\n    /**\n     * Set up event listeners to all components of the form\n     */\n    init() {\n        this.fieldEvents()\n        this.submitButton.addEventListener( 'mouseover', this.getStyles.bind( this ) );\n        this.target.addEventListener( 'submit', this.submit.bind( this ) )\n    }\n\n\n    /**\n     * \n     */\n    fieldEvents() {\n\n        const { focus, success, error } = this.actionClass\n\n        this.fields.forEach( field => {\n\n            const { parentElement: fieldWrapper } = field\n            field.validateErrorActive = false\n\n            if ( field.nodeName === 'SELECT' ) {\n                field.addEventListener( 'change', () => {\n                    fieldWrapper.classList.add( success )\n                })\n\n            } else {\n                if ( field.type != 'checkbox' && field.type != 'radio' ) {\n                    \n                    field.addEventListener( 'focus', () => {\n                        this.getStyles()\n                        fieldWrapper.classList.add( focus )\n                    })\n    \n                    field.addEventListener( 'blur', () => {\n                        fieldWrapper.classList.remove( focus, success, error )\n    \n                        if ( this.settings.validate && field.value != '' ) {\n    \n                            if ( field.checkValidity() ) {\n                                fieldWrapper.classList.add( success )\n                                this.clearValidationError( field )\n    \n                            } else  {\n                                fieldWrapper.classList.add( error )\n                            }\n                        }\n                    })\n\n                } else if ( field.type == 'checkbox' || field.type == 'radio' ) {\n\n                    if ( this.settings.validate ) {\n                        field.addEventListener( 'change', () => {\n        \n                            if ( field.checked ) {\n                                fieldWrapper.classList.remove( error )\n                                this.clearValidationError( field )\n                            }\n                        })\n                    }\n                }\n\n                if ( this.settings.validate ) {\n                    field.addEventListener( 'invalid', e => {\n                        e.preventDefault()\n\n                        fieldWrapper.classList.add( error )\n                        if ( ! field.validateErrorActive ) {\n                            this.displayValidationError( field )\n                            field.validateErrorActive = true\n                        }\n                    })\n                }\n            }\n        })\n    }\n\n\n    /**\n     * Generate and display the validation notice of a field\n     * \n     * @param {object} field The form field element\n     */\n    displayValidationError( field ) {\n        const { parentElement: fieldWrapper } = field\n        const notice = createEl( 'span' )\n\n        notice.classList.add( 'validation' )\n        notice.innerHTML = field.validationMessage\n        fieldWrapper.appendChild( notice )\n\n        setTimeout( () => {\n            notice.classList.add( 'is-visible' )\n        }, 200 )\n\n        setTimeout( () => {\n            this.clearValidationError( field )\n        }, 6000 )\n    }\n\n\n    /**\n     * Clear the validation notice of a field\n     * \n     * @param {object} fieldWrfieldapper The form field element\n     */\n    clearValidationError( field ) {\n        const { parentElement: fieldWrapper } = field\n        const notice = fieldWrapper.querySelector( 'span.validation' )\n        \n        if ( notice ) {\n            notice.classList.remove( 'is-visible' )\n\n            setTimeout( () => {\n                fieldWrapper.removeChild( notice )\n                field.validateErrorActive = false\n            }, 400 )\n        }\n    }\n\n\n    /**\n     * Send the data to the server for handling\n     * \n     * @param {object} e The event\n     */\n    submit( e ) {\n        e.preventDefault()\n\n        this.target.classList.add( 'send-in-progress' )\n        this.submitButton.disabled = true\n        this.submitButton.innerHTML = 'Sending...'\n\n        fetch( shiftr.ajaxUrl, {\n            method: 'post',\n            body: new FormData( this.target )\n        })\n            .then( res => res.json() )\n            .then( data => {\n                this.target.classList.remove( 'send-in-progress' )\n                this.response = data\n                // this.displaySubmitMessage( data )\n                const formName = this.target.dataset.shiftrForm\n\n                location.href = `${ location.origin }/thank-you/${ formName=== 'general' ? 'contact' : formName }`\n            })\n            .catch( error => {\n                console.log( error )\n            })\n    }\n\n\n    /**\n     * @param {object} data The body of the response\n     */\n    displaySubmitMessage( data = {} ) {\n        this.target.classList.add( 'submitted' )\n\n        const formSubmitOutput = this.target.querySelector( '.form-submit-notice' )\n        const svgDefaultAtts = 'xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\"'\n\n        formSubmitOutput.classList.add( data.success ? 'success' : 'error' )\n\n        formSubmitOutput.innerHTML = `\n            <div>\n                ${ \n                    data.success ? `\n                        <svg ${ svgDefaultAtts } fill=\"var(--c-primary)\">\n                            <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm3.88-11.71L10 14.17l-1.88-1.88c-.39-.39-1.02-.39-1.41 0-.39.39-.39 1.02 0 1.41l2.59 2.59c.39.39 1.02.39 1.41 0L17.3 9.7c.39-.39.39-1.02 0-1.41-.39-.39-1.03-.39-1.42 0z\"/>\n                        </svg>\n                    ` : `\n                        <svg ${ svgDefaultAtts } fill=\"var(--c-red,#ff0000)\">\n                            <path d=\"M12 7c.55 0 1 .45 1 1v4c0 .55-.45 1-1 1s-1-.45-1-1V8c0-.55.45-1 1-1zm-.01-5C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8zm1-3h-2v-2h2v2z\"/>\n                        </svg>\n                    `\n                }\n                <p>${ data.message }</p>\n                <button type=\"button\" name=\"reset_form\">Reset form</button>\n            </div>\n        `\n\n        formSubmitOutput.querySelector( 'button[name=\"reset_form\"]' ).addEventListener( 'click', event => {\n            event.preventDefault()\n\n            this.clearSubmitMessage( data )\n        })\n\n        /**\n         * Support for Google Tag Manager tracking\n         */\n        if ( data.success ) {\n            window.dataLayer = window.dataLayer || []\n            window.dataLayer.push({\n                'event': 'formSubmission',\n                'form': this.target.dataset.shiftrForm\n            })\n        }\n\n        setTimeout( () => {\n            formSubmitOutput.setAttribute( 'aria-hidden', false )\n\n            if ( data.success ) {\n                this.submitButton.innerHTML = 'Sent!'\n            } else {\n                this.submitButton.disabled = false\n                this.submitButton.innerHTML = this.submitButtonOrgLabel\n            }\n        }, 100 )\n\n        const autoClearDelay = data.success ? 20000 : 10000\n\n        var autoClear = setTimeout( () => {\n            this.clearSubmitMessage( data )\n        }, autoClearDelay )\n    }\n\n\n    /**\n     * @param {object} message The message wrapper element\n     * @param {string} data The server response\n     */\n    clearSubmitMessage( data ) {\n\n        if ( data.success ) {\n            const { success, error } = this.actionClass\n\n            this.target.reset()\n\n            // Empty all fields of values\n            for ( var i = 0; i < this.fields.length; i++ ) {\n                const field = this.fields[i]\n\n                if ( field.nodeName === 'SELECT' || ( field.type != 'checkbox' && field.type != 'radio' ) ) {\n                    field.parentElement.classList.remove( success, error )\n                }\n            }\n        }\n\n        setTimeout( () => {\n            this.target.classList.remove( 'submitted' )\n            this.target.querySelector( '.form-submit-output' ).setAttribute( 'aria-hidden', true )\n        }, 100 )\n        \n        /**\n         * Enabling the button again is the very last thing we need to do\n         */\n        this.submitButton.disabled = false\n        this.submitButton.innerHTML = this.submitButtonOrgLabel\n    }\n\n\n    /**\n     * Request the stylesheet for Form interactions\n     */\n    getStyles() {\n        if ( ! this.cssRequested ) {\n            const stylesheet = createEl( 'link' );\n            stylesheet.setAttribute( 'rel', 'stylesheet' );\n            stylesheet.setAttribute( 'href', `${shiftr.theme}/assets/styles/form.css` );\n            stylesheet.setAttribute( 'type', 'text/css' );\n            head.appendChild( stylesheet );\n\n            this.cssRequested = true;\n        }\n\n        this.submitButton.removeEventListener( 'mouseover', this.getStyles );\n    }\n}\n","/**\n * Imports\n */\nimport ShiftrComponent from '../inc/component-functions'\n\n\n/**\n * Shiftr Component: Tabs\n */\nexport default class Tabs extends ShiftrComponent {\n\n    componentSlug() {\n        return 'tabs'\n    }\n\n    defaultSettings() {\n        return {\n            tabList: '.shiftr-tabs__tab',\n            tabPanel: '.shiftr-tabs__panel'\n        }\n    }\n\n    /**\n     * We want some extra things to happen here\n     */\n    constructor( ...args ) {\n        super( ...args )\n\n        this.tabs = this.target.querySelectorAll( this.settings.tabList )\n        this.panels = this.target.querySelectorAll( this.settings.tabPanel )\n    }\n\n    /**\n     * Initiate the component\n     */\n    init() {\n        this.target.setAttribute( 'role', 'tablist' )\n\n        this.tabs.forEach( ( tab, index ) => {\n            const tabID = `${ this.componentID }-tab_${ index }`,\n                  panelID = `${ this.componentID }-panel_${ index }`\n\n            tab.setAttribute( 'id', tabID )\n            tab.setAttribute( 'role', 'tab' )\n            tab.setAttribute( 'aria-selected', false )\n            tab.setAttribute( 'aria-controls', panelID )\n            tab.setAttribute( 'tabindex', -1 )\n\n            tab.addEventListener( 'click', e => {\n                e.preventDefault()\n\n                this.activateTab( index )\n            })\n        })\n\n        this.panels.forEach( ( panel, index ) => {\n            const tabID = `${ this.componentID }-tab_${ index }`,\n                  panelID = `${ this.componentID }-panel_${ index }`\n\n            panel.setAttribute( 'id', panelID )\n            panel.setAttribute( 'role', 'tabpanel' )\n            panel.setAttribute( 'aria-labelledby', tabID )\n            panel.setAttribute( 'tabindex', 0 )\n        })\n\n        this.activateTab( 0 )\n    }\n\n    activateTab( index ) {\n        this.deactivateCurrentTab()\n\n        const tab = this.target.querySelector( `#${ this.componentID }-tab_${ index }` ),\n              panel = this.target.querySelector( `#${ this.componentID }-panel_${ index }` )\n\n        tab.removeAttribute( 'tabindex' )\n        tab.setAttribute( 'aria-selected', true )\n        tab.classList.add( 'is-visible' )\n\n        panel.classList.add( 'is-visible' )\n    }\n\n    deactivateCurrentTab() {\n        const currentTab = this.target.querySelector( '.shiftr-tabs__tab[aria-selected=\"true\"]' )\n\n        if ( currentTab ) {\n            currentTab.classList.remove( 'is-visible' )\n            currentTab.setAttribute( 'tabindex', -1 )\n            currentTab.setAttribute( 'aria-selected', false )\n\n            const currentPanel = this.target.querySelector( `#${ currentTab.getAttribute( 'aria-controls' ) }` )\n\n            if ( currentPanel ) {\n                currentPanel.classList.remove( 'is-visible' )\n            }\n        }\n    }\n}\n ","/**\n * This file is for auto-loading components only. \n * \n * It targets components by \"data-shiftr-<COMPONENT>\" attribute\n */\nimport Form from '../components/form'\nimport Accordion from '../components/accordion'\nimport Tabs from '../components/tabs'\n\n\n/**\n * Auto-load Form components\n */\nif ( document.querySelector( '[data-shiftr-form]' ) ) {\n    const forms = document.querySelectorAll( '[data-shiftr-form]' ) || []\n\n    forms.forEach( el => {\n        const f = new Form( el )\n        f.init()\n    })\n}\n\n\n/**\n * Auto-load Accordion components\n */\nif ( document.querySelector( '[data-shiftr-accordion]' ) ) {\n    const accordions = document.querySelectorAll( '[data-shiftr-accordion]' ) || []\n    \n    accordions.forEach( el => {\n        const a = new Accordion( el )\n        a.init()\n    })\n}\n\n\n/**\n * Auto-load Tabs components\n */\n if ( document.querySelector( '[data-shiftr-tabs]' ) ) {\n    const tabs = document.querySelectorAll( '[data-shiftr-tabs]' ) || []\n    \n    tabs.forEach( el => {\n        const t = new Tabs( el )\n        t.init()\n    })\n}\n","/**\n * This core file is for working on the core components \n * of the theme.\n * \n * It's unlikely you would need to alter this file\n */\nimport CookieNotice from '../inc/cookie'\n\n\n/**\n * Load core components\n */\nif ( window.location.host === 'oborishte63.com' ) {\n    CookieNotice()\n}\n","/**\n * Footer - Display group entities\n */\n( () => {\n    const toggleButton = document.querySelector( '#toggle_group_entities' )\n    const groupEntities = document.querySelector( '.group-entities' )\n    \n    let visible = false\n\n    toggleButton.addEventListener( 'click', () => {\n        location.hash = 'group'\n\n        groupEntities.setAttribute( 'aria-hidden', visible )\n        groupEntities.classList.toggle( 'is-visible' )\n\n        visible = !visible\n    })\n})();\n\n\n/**\n * Video Block\n * \n * Display a modoal containing th video player.\n */\n;( () => {\n    const blocks = document.querySelectorAll( '.flexi-block.block--video' )\n\n    if ( !blocks?.length ) {\n        return\n    }\n\n    blocks.forEach( block => {\n        const trigger = block.querySelector( 'button.video-trigger' )\n        const modal = block.querySelector( '.video-modal' )\n        const closeButton = modal.querySelector( '.video-modal__close' )\n\n        /**\n         * Hide the video modal.\n         */\n        function hideModal() {\n            document.body.classList.remove( 'no-scroll', 'overlay-active' )\n            modal.classList.remove( 'is-visible' )\n            modal.setAttribute( 'arai-hidden', true )\n\n            const videoEl = modal.querySelector( 'video' )\n\n            if ( videoEl ) {\n                videoEl.pause()\n            }\n\n            setTimeout( () => {\n                window.removeEventListener( 'click', hideModal )\n                window.removeEventListener( 'keyup', escHideModal )\n            }, 100 )\n        }\n\n        /**\n         * Hide the modal by pressing the escape key.\n         * \n         * @param {KeyboardEvent} event \n         */\n        function escHideModal( event ) {\n            if ( event.key === 'Escape' ) {\n                hideModal()\n            }\n        }\n\n        trigger.addEventListener( 'click', () => {\n            document.body.classList.add( 'no-scroll', 'overlay-active' )\n            modal.classList.add( 'is-visible' )\n            modal.setAttribute( 'arai-hidden', false )\n\n            const videoEl = modal.querySelector( 'video' )\n\n            console.log( videoEl )\n\n            if ( videoEl ) {\n                videoEl.play()\n            }\n\n            setTimeout( () => {\n                window.addEventListener( 'click', hideModal )\n                window.addEventListener( 'keyup', escHideModal )\n            }, 100 )\n        })\n\n        closeButton.addEventListener( 'click', hideModal )\n    })\n})();\n\n\n/**\n * Gallery Block (video)\n * \n * Display a modoal containing the video player.\n */\n;( () => {\n    const blocks = document.querySelectorAll( '.flexi-block.block--gallery' )\n\n    if ( !blocks?.length ) {\n        return\n    }\n\n    blocks.forEach( block => {\n        const triggers = block.querySelectorAll( '.video-gallery a' )\n        const modal = block.querySelector( '.gallery-video-modal' )\n        const closeButton = modal.querySelector( '.video-modal__close' )\n\n        /**\n         * Hide the video modal.\n         */\n        function hideModal() {\n            document.body.classList.remove( 'no-scroll', 'overlay-active' )\n            modal.classList.remove( 'is-visible' )\n            modal.setAttribute( 'arai-hidden', true )\n\n            const videoEl = modal.querySelector( 'video' )\n\n            if ( videoEl ) {\n                videoEl.pause()\n            }\n\n            setTimeout( () => {\n                window.removeEventListener( 'click', hideModal )\n                window.removeEventListener( 'keyup', escHideModal )\n            }, 100 )\n        }\n\n        /**\n         * Hide the modal by pressing the escape key.\n         * \n         * @param {KeyboardEvent} event \n         */\n        function escHideModal( event ) {\n            if ( event.key === 'Escape' ) {\n                hideModal()\n            }\n        }\n\n        triggers.forEach( trigger => {\n            trigger.addEventListener( 'click', () => {\n                document.body.classList.add( 'no-scroll', 'overlay-active' )\n\n                if ( trigger.dataset.embed.match( window.location.host ) ) {\n                    modal.querySelector( '.iframe-wrapper' ).innerHTML = `\n                        <video src=\"${ trigger.dataset.embed }\" controls></video>\n                    `\n                } else {\n                    modal.querySelector( '.iframe-wrapper' ).innerHTML = trigger.dataset.embed\n                }\n\n                modal.classList.add( 'is-visible' )\n                modal.setAttribute( 'arai-hidden', false )\n\n                const videoEl = modal.querySelector( 'video' )\n\n                if ( videoEl ) {\n                    videoEl.play()\n                }\n    \n                setTimeout( () => {\n                    window.addEventListener( 'click', hideModal )\n                    window.addEventListener( 'keyup', escHideModal )\n                }, 100 )\n            })\n        })\n\n        closeButton.addEventListener( 'click', hideModal )\n    })\n})();\n\n\n/**\n * Single Gallery\n * \n * Display a modoal containing th video player.\n */\n ;( () => {\n    const videoGallery = document.querySelector( '.video-gallery' )\n\n    if ( !videoGallery ) {\n        return\n    }\n\n    const triggers = document.querySelectorAll( '.video-gallery a' )\n    const modal = document.querySelector( '.gallery-video-modal' )\n    const closeButton = modal.querySelector( '.video-modal__close' )\n\n    /**\n     * Hide the video modal.\n     */\n    function hideModal() {\n        document.body.classList.remove( 'no-scroll', 'overlay-active' )\n        modal.classList.remove( 'is-visible' )\n        modal.setAttribute( 'arai-hidden', true )\n\n        const videoEl = modal.querySelector( 'video' )\n\n        if ( videoEl ) {\n            videoEl.pause()\n        }\n\n        setTimeout( () => {\n            window.removeEventListener( 'click', hideModal )\n            window.removeEventListener( 'keyup', escHideModal )\n        }, 100 )\n    }\n\n    /**\n     * Hide the modal by pressing the escape key.\n     * \n     * @param {KeyboardEvent} event \n     */\n    function escHideModal( event ) {\n        if ( event.key === 'Escape' ) {\n            hideModal()\n        }\n    }\n\n    triggers.forEach( trigger => {\n        trigger.addEventListener( 'click', () => {\n            document.body.classList.add( 'no-scroll', 'overlay-active' )\n            console.log( 'hello' )\n            \n            if ( trigger.dataset.embed.match( window.location.host ) ) {\n                modal.querySelector( '.iframe-wrapper' ).innerHTML = `\n                    <video src=\"${ trigger.dataset.embed }\" controls autoplay></video>\n                `\n            } else {\n                modal.querySelector( '.iframe-wrapper' ).innerHTML = trigger.dataset.embed\n            }\n\n            modal.classList.add( 'is-visible' )\n            modal.setAttribute( 'arai-hidden', false )\n\n            const videoEl = modal.querySelector( 'video' )\n\n            if ( videoEl ) {\n                videoEl.play()\n            }\n\n            setTimeout( () => {\n                window.addEventListener( 'click', hideModal )\n                window.addEventListener( 'keyup', escHideModal )\n            }, 100 )\n        })\n    })\n\n    closeButton.addEventListener( 'click', hideModal )\n})();\n\n\n/**\n * Facilities Block\n */\n;( () => {\n    const facilitiesBlock = document.querySelector( '.block--facilities' )\n\n    if ( !facilitiesBlock ) {\n        return\n    }\n\n    const facilities = facilitiesBlock.querySelectorAll( '.facility' )\n    const facilitiesContainer = facilitiesBlock.querySelector( '.facilities-container' )\n    const expandBtn = facilitiesBlock.querySelector( '.expand-btn' )\n    const expandCount = facilitiesBlock.querySelector( '.expand_count' )\n\n\n    function generateLoopHeight() {\n        if ( facilities.length <= 4 ) {\n            return\n        }\n\n        facilitiesBlock.classList.add( 'expandable' )\n        expandBtn.style.display = 'block'\n\n        const height = [ ...facilities ].slice( 0, 3 ).reduce( ( value, current, index ) => {\n            const style = getComputedStyle( current )\n\n            return value + current.offsetHeight + parseFloat( style.getPropertyValue( 'margin-top' ) )\n        }, 0 ) - 100\n\n        facilitiesContainer.style.height = `${ height }px`\n        expandCount.textContent = facilities.length - 3\n    }\n\n   \n    // When page loads set the height of the container\n    if( window.innerWidth <= 650 ) {\n        generateLoopHeight()\n\n    } else {\n        facilitiesContainer.style.height = '100%';\n    } \n\n\n    // Expand Button Event\n    const expandButton = ( event ) => {\n        facilitiesContainer.style.height = `${ facilitiesContainer.querySelector( 'ul' )?.offsetHeight }px`\n        facilitiesBlock.classList.add( 'expanded' )\n        event.target.style.display = 'none'\n    }\n    expandBtn.addEventListener( 'click', expandButton )\n\n\n    window.addEventListener( 'resize', event => { \n        if( event.target.innerWidth < 650 ) {\n            generateLoopHeight()\n\n        } else {\n            facilitiesBlock.classList.remove( 'expandable' )\n            expandBtn.style.display = 'none'\n        }\n    })\n})();\n\n\n/**\n * Load more posts\n */\n;( () => {\n    if ( ! document.querySelector( 'a[href*=\"?post_type\"]' ) ) return\n    \n    const loadMoreTrigger = document.querySelector( 'a[href*=\"?post_type\"]' )\n\n    const url = new URL( loadMoreTrigger.href )\n    const loadMoreParams = new URLSearchParams( url.search )\n\n    const loadMoreData = {\n        postType: loadMoreParams.get( 'post_type' )\n    }\n\n    const loop = document.querySelector( `ul.${ loadMoreData.postType }s` )\n    let page = 1\n    let maxPageReached = false\n\n    const event = new Event( 'loadmoreposts' );\n\n    loadMoreTrigger.addEventListener( 'click', e => {\n        /** We're using fetch only, so if it isn't available, just go old school */\n        if ( window.fetch ) e.preventDefault()\n\n        if ( maxPageReached ) return\n\n        // Update wording...\n        let orgWording = loadMoreTrigger.innerHTML\n        loadMoreTrigger.innerHTML = 'Loading more...'\n\n        const actionData = new FormData()\n        actionData.append( 'action', 'load_more_posts' )\n        actionData.append( 'next_page', page + 1 )\n\n        for ( const [ key, value ] of loadMoreParams ) {\n            actionData.append( key, value )\n        }\n\n        fetch( shiftr.ajaxUrl, {\n            method: 'POST',\n            credentials: 'same-origin',\n            body: actionData\n        })\n        .then( response => response.json() )\n        .then( data => {\n            page++\n\n            loop.innerHTML = loop.innerHTML + ( data?.fragment || '' )\n\n            if ( page === data.max_num_pages ) {\n                loadMoreTrigger.classList.add( 'max-pages-reached' )\n                maxPageReached = true\n            }\n\n            const newPosts = loop.querySelectorAll( `li.${ loadMoreData.postType }.delay-entry` )\n\n            newPosts.forEach( ( post, i ) => {\n                setTimeout( () => post.classList.remove( 'delay-entry' ), 50 * ( i + 1 ) )\n            })\n\n            loadMoreTrigger.innerHTML = orgWording\n\n            /**\n             * Reset product feature triggers.\n             */\n            document.body.dispatchEvent( event )\n        })\n    })\n})();\n\n\n/**\n * Front page sticky booking form.\n */\n;( () => {\n    const bookingForm = document.querySelector( '.front-page .hero .booking_form' )\n\n    if ( !bookingForm ) {\n        return\n    }\n\n    const observer = new IntersectionObserver( ( entries, observer ) => {\n        entries.forEach( entry => {\n            if ( entry.isIntersecting ) {\n                document.querySelector( 'header.site-header' ).classList.remove( 'display-booking-form' )\n            } else if ( entry.boundingClientRect.y < 0 ) {\n                document.querySelector( 'header.site-header' ).classList.add( 'display-booking-form' )\n            }\n        })\n    }, { threshold: 1 })\n\n    observer.observe( bookingForm )\n})();\n\n\n/**\n * Bypass Autoplay blocking\n * \n * https://developer.mozilla.org/en-US/docs/Web/Media/Autoplay_guide\n */\n;( () => {\n    var videoElem = document.querySelector( 'video[autoplay]' )\n\n    if ( !videoElem ) {\n        return;\n    }\n    \n    var startPlayPromise = videoElem.play()\n\n    if ( startPlayPromise !== undefined ) {\n        startPlayPromise.catch((error) => {\n            // Auto-play was prevented\n            let playAttempt = setInterval(() => {\n            videoElem.play()\n            .then(() => {\n                clearInterval(playAttempt);\n            })\n            .catch((error) => {\n                console.log('Unable to play the video, User has not interacted yet.');\n            });\n        }, 3000);\n        }).then(() => {\n            console.log('Autoplay successful.');\n        });\n    }\n})();\n\n\n/**\n * Image Couple Block.\n */\n( () => {\n    const blocks = document.querySelectorAll( '.block--image-couple' )\n\n    if ( !blocks.length ) {\n        return\n    }\n\n    if ( window.innerWidth >= 650 ) {\n        return\n    }\n\n    blocks.forEach( block => {\n        const firstImage = block.querySelector( '.image' )\n        const firstImageRect = firstImage.getBoundingClientRect()\n        const span = block.querySelector( 'span' )\n\n        span.style.top = `${ firstImageRect.height + 10 }px`\n        span.style.display = 'block'\n    })\n})();\n\n\n/**\n *  Hide the Fixed Award Image when you get to the bottom \n *  of the page as it covers the footer content\n */\n( () => {\n    const fixedAwardImage = document.querySelector( '.iconicsantorini .award-sticky-logo' )\n\n    if( ! fixedAwardImage ) return\n\n    window.onscroll = function() {\n        if ((window.innerHeight + window.scrollY) >= document.body.offsetHeight) {\n            fixedAwardImage.style.display = 'none'\n        } else {\n            fixedAwardImage.style.display = 'inline-block'\n        }\n    };\n})();\n\n/**\n * Offers Popup\n */\n(() => {\n    const offersPopupWrapper = document.querySelector( '#offers-popup-wrapper' );\n\n    if( ! offersPopupWrapper ) return;\n\n    const offersPopupBtn = document.querySelector( '#offers-popup-btn' );\n    const offersPopup = document.querySelector( '#offers-popup' );\n    const offersPopupClose = document.querySelector( '#offers-popup__close' );\n    \n\n    offersPopupBtn.addEventListener( 'click', function() {\n        offersPopup.classList.toggle( 'offers-popup--active' )\n    })\n    offersPopupClose.addEventListener( 'click', function() {\n        offersPopup.classList.remove( 'offers-popup--active' )\n    } )\n\n\n    /**\n     * Show pop up automatically once\n     */\n    function popupAutoOpen() {\n        setTimeout( function() {\n            offersPopup.classList.add( 'offers-popup--active' )\n            }, 2000);\n    }\n    popupAutoOpen();\n\n})();\n\n\n/**\n * Hero Video Controls\n */\n( () => {\n    const iconicFrontpage = document.querySelector( '.iconicsantorini.front-page' );\n\n    if( !iconicFrontpage ) return\n\n    const videoPlayer = iconicFrontpage.querySelector( '.hero__feature-video video' );\n\n    if( !videoPlayer ) return\n\n    const videoControls = document.querySelector( '.video-controls' );\n\n    videoControls.style.display = 'block';\n\n    const play = videoControls.querySelector( '#play' )\n    const audio = videoControls.querySelector( '#sound' )\n\n    let videoPLaying = true;\n    let audioPlaying = false;\n\n    play.addEventListener( 'click',function() {\n        play.classList.toggle( 'paused' )\n\n        if( videoPLaying == true ) {\n            videoPlayer.pause();\n            videoPLaying = false;\n        } else {\n            videoPlayer.play();\n            videoPLaying = true;\n        }\n    })\n\n    audio.addEventListener( 'click', function() {\n        audio.classList.toggle( 'muted' );\n\n        if( audioPlaying == false ) {\n            videoPlayer.muted = false ;\n            audioPlaying = true;\n        } else {\n            videoPlayer.muted = true;\n            audioPlaying = false;\n        }\n    })\n\n})();\n\n\n/**\n * Booking Form Modal\n */\n( () => {\n    const formTrigger = document.querySelector( '#booking-form-trigger' )\n\n    if( !formTrigger ) return\n\n    const formModal = document.querySelector( '#booking-form-modal' )\n    const formModalClose = document.querySelector( '#booking-form-modal--close' )\n    const siteHeader = document.querySelector(  '.site-header' )\n    const body = document.body\n\n\n    formTrigger.addEventListener( 'click', function() {\n        formModal.setAttribute( 'aria-hidden', 'false' )\n        body.classList.add( 'no-scroll', 'overlay-active' )\n        siteHeader.style.pointerEvents = 'none' \n    })\n\n    formModalClose.addEventListener( 'click', closeFormModal )\n\n    function closeFormModal() {\n        formModal.setAttribute( 'aria-hidden', 'true' )\n        body.classList.remove( 'no-scroll', 'overlay-active' )\n        siteHeader.style.pointerEvents = 'auto'\n    }\n\n})();\n","/**\n * Control the behaviour of the site header. This includes \n * the hamburger menu and dropdown menus. It would also be where \n * to handle a search bar should one exist.\n */\nimport { Layout, vh } from '../inc/global'\n\n\nconst { header, body } = Layout; // Semi-colon here forces Layout to not be a function...\n\n\n( () => {\n    const mobileMenuTrigger  = document.querySelector( '#mobile-menu-trigger' ),\n          mobileMenu         = document.querySelector( '.mobile-menu' ),\n          mobileMenuSubMenus = mobileMenu?.querySelectorAll( 'li.has-sub-menu' ) || [],\n          menu               = document.querySelector( 'header.site-header nav.nav-primary' ),\n          menuSubMenus       = menu?.querySelectorAll( 'li.has-sub-menu' ) || [],\n          headerWrapper      = header.parentElement,\n          siteHeader         = document.querySelector( 'header.site-header' );\n\n    \n    /**\n     * Announcement Bar\n     */\n    const announcementBar = document.querySelector( '.announcement-bar' )\n    let scrollPosition = 0;\n\n    if( announcementBar ) {\n        siteHeader.style.top = announcementBar.offsetHeight + 'px';\n        scrollPosition = announcementBar.offsetHeight;\n    }\n\n\n    /**\n     * Sticky peek-a-boo header\n     */\n    let previousScroll = 0\n    let shouldResizeLogo = true\n    function displayStickyHeader() {\n        const scrollPos = window.pageYOffset || document.documentElement.scrollTop\n        let threshold = vh() / 4\n\n        if ( window.innerWidth >= 900 && !document.body.classList.contains( 'front-page' ) ) {\n            threshold = 110\n        }\n\n        /** Sticky header can only be available after the threshold */\n        if ( scrollPos >= threshold ) {\n            header.classList.add( 'pre-set-sticky' )\n\n            setTimeout( () => {\n                header.classList.add( 'set-sticky' )\n\n                if ( shouldResizeLogo ) {\n                    resetSvgSiteLogo()\n                    shouldResizeLogo = false\n                }\n            }, 50 )\n\n            /** Catch scroll up */\n            if ( scrollPos < previousScroll ) {\n                \n                /** Match scroll up against a threshold that must be reached */\n                if ( previousScroll > scrollPos + 60 ) {\n                    if ( shouldResizeLogo ) {\n                        resetSvgSiteLogo()\n                    }\n                    header.classList.add( 'is-visible' )\n                    body.classList.add( 'header-state-active' )\n                } else {\n                    return\n                }\n\n            } else {\n                header.classList.remove( 'is-visible' )\n                body.classList.remove( 'header-state-active' )\n            }\n\n        } else if ( scrollPos > previousScroll || scrollPos <= scrollPosition ) {\n            if ( header.classList.contains( 'pre-set-sticky' ) && !shouldResizeLogo ) {\n                setTimeout( () => {\n                    resetSvgSiteLogo()\n                    shouldResizeLogo = true\n                }, 25 )\n            }\n\n            header.classList.remove( 'pre-set-sticky', 'set-sticky', 'is-visible' )\n            body.classList.remove( 'header-state-active' )\n        }\n\n        previousScroll = scrollPos\n    }\n    window.addEventListener( 'scroll', displayStickyHeader, { passive: true } )\n\n\ndocument.addEventListener(\"DOMContentLoaded\", function() {\n    var banner = document.querySelector('.banner');\n    // Function to toggle banner visibility based on scroll position\n    function toggleBannerVisibility() {\n        if (window.scrollY >= 400) {\n            banner.style.display = 'flex'; // show the banner\n        } else {\n            banner.style.display = 'none'; // hide the banner\n        }\n    }\n    // Set the initial state for the banner based on the current scroll position\n    toggleBannerVisibility();\n    // Update the banner visibility upon scrolling\n    window.addEventListener('scroll', toggleBannerVisibility);\n});\n\n\n\n\n\n\ndocument.addEventListener('DOMContentLoaded', function() {\n    var banner = document.querySelector('.banner-for-mobile');\n    if (!banner) {\n        return; // Exit if the banner isn't found on the page.\n    }\n    function checkBannerVisibility() {\n        if (window.scrollY <= 100) { // 100px is the height of your navbar\n            banner.style.display = 'none';\n        } else {\n            banner.style.display = 'block';\n        }\n    }\n    // Initial visibility check\n    checkBannerVisibility();\n    // Check visibility on scroll\n    window.addEventListener('scroll', checkBannerVisibility);\n});\n\t\n\t\n\tfunction toggleBannerVisibility() {\n    // Get the header-wrapper element\n    var headerWrapper = document.querySelector('.header-wrapper');\n    // Get the .banner-for-mobile element\n    var bannerForMobile = document.querySelector('.banner-for-mobile');\n    // Check if the headerWrapper exists and if it has the 'mobile-menu-active' class\n    if (headerWrapper && headerWrapper.classList.contains('mobile-menu-active')) {\n        bannerForMobile.style.display = 'none';\n    } else {\n        bannerForMobile.style.display = 'block';\n    }\n}\n// Attach an event listener to the mobile menu trigger button\ndocument.querySelector('#mobile-menu-trigger').addEventListener('click', function() {\n    // Allow any immediate class changes to settle. This ensures that the toggleBannerVisibility function\n    // reads the updated class state. The delay can be adjusted as needed.\n    setTimeout(toggleBannerVisibility, 50);\n});\n\n\n\n\n\n\n    /**\n     * Mobile menu\n     */\n    mobileMenu.addEventListener( 'click', e => e.stopPropagation() )\n\n    function openMobileMenu( event ) {\n        event.stopPropagation()\n\n        if ( !headerWrapper.classList.contains( 'mobile-menu-active' ) ) {\n            mobileMenuTrigger.querySelector( 'rect:first-child' ).setAttribute( 'transform', 'translate(0 11) rotate(45,18,3)' )\n            mobileMenuTrigger.querySelector( 'rect:last-child' ).setAttribute( 'transform',  'translate(0 -11) rotate(-45,18,25)' )\n\n            mobileMenu.setAttribute( 'aria-hidden', false )\n            headerWrapper.classList.add( 'mobile-menu-active' )\n            body.classList.add( 'no-scroll', 'overlay-active' )\n            siteHeader.style.top = 0;\n\n            setTimeout( () => {\n                window.addEventListener( 'click', closeMobileMenu )\n            }, 200 )\n        } else {\n            mobileMenuTrigger.querySelector( 'rect:first-child' ).setAttribute( 'transform', '' )\n            mobileMenuTrigger.querySelector( 'rect:last-child' ).setAttribute( 'transform', '' )\n\n            mobileMenu.setAttribute( 'aria-hidden', true )\n            headerWrapper.classList.remove( 'mobile-menu-active' )\n            body.classList.remove( 'no-scroll', 'overlay-active' )\n            if( announcementBar ) {\n                siteHeader.style.top = announcementBar.offsetHeight + 'px';\n            }\n\n            setTimeout( () => {\n                window.removeEventListener( 'click', closeMobileMenu )\n            }, 200 )\n        }\n    }\n    mobileMenuTrigger.addEventListener( 'click', openMobileMenu )\n\n    function closeMobileMenu( event ) {\n        event.preventDefault()\n\n        mobileMenu.setAttribute( 'aria-hidden', true )\n        headerWrapper.classList.remove( 'mobile-menu-active' )\n        body.classList.remove( 'no-scroll', 'overlay-active' )\n\n        setTimeout( () => {\n            window.removeEventListener( 'click', closeMobileMenu )\n        }, 200 )\n    }\n\n\n    /**\n     * Sub menu event handling\n     */\n    menu?.classList.add( menuSubMenus.length <= 0 ? 'has-no-sub-menus' : 'has-sub-menus' )\n    mobileMenu.querySelector( 'nav' )?.classList.add( mobileMenuSubMenus.length <= 0 ? 'has-no-sub-menus' : 'has-sub-menus' )\n    const displayClass = 'is-visible'\n\n    // Primary sub-menus\n    menuSubMenus.forEach( ({ children, classList }) => {\n        const link = children[0],\n              subMenuEl = children[1]\n\n        let removeOpen\n\n        link.addEventListener( 'mouseover', event => {\n            event.preventDefault()\n\n            clearTimeout( removeOpen )\n\n            if ( classList.contains( displayClass ) !== true ) {\n                classList.add( displayClass )\n            }\n        })\n\n        link.addEventListener( 'mouseleave', () => {\n            removeOpen = setTimeout( () => {\n                classList.remove( displayClass )\n            }, 200 )\n        })\n\n        subMenuEl.addEventListener( 'mouseover', () => {\n            clearTimeout( removeOpen )\n        })\n\n        subMenuEl.addEventListener( 'mouseleave', () => {\n            removeOpen = setTimeout( () => {\n                classList.remove( displayClass )\n            }, 200 )\n        })\n    })\n\n    // Mobile sub-menus\n    mobileMenuSubMenus.forEach( subMenu => {\n        const toggle = subMenu.children[1]\n\n        toggle.addEventListener( 'click', event => {\n            event.preventDefault()\n            subMenu.classList.toggle( displayClass )\n        })\n    })\n\n    /**\n     * Remove comments and whitespace-only text nodes.\n     */\n    function clean(node) {\n        for(var n = 0; n < node.childNodes.length; n ++) {\n\n            var child = node.childNodes[n];\n            if(child.nodeType === 8 || (child.nodeType === 3 && !/\\S/.test(child.nodeValue))) {\n                node.removeChild(child);\n                n --;\n            }\n            else if(child.nodeType === 1) {\n                clean(child);\n            }\n        }\n    }\n\n    /**\n     * Dynamically size SVG site logo\n     */\n    function resetSvgSiteLogo() {\n        const logo = document.querySelector( '.site-logo' )\n\n        if ( !logo ) return\n\n        clean( logo )\n\n        if( !logo.hasChildNodes() ) return\n\n        let svg = logo.children[0]\n\n        let viewbox = svg.getAttribute( 'viewBox' ),\n            values  = viewbox.split( ' ' ),\n            viewBoxWidth = parseFloat( values[2] ),\n            viewBoxHeight = parseFloat( values[3] ),\n            mainGroup = svg.querySelector( 'g' ),\n            ratio   = viewBoxWidth / viewBoxHeight,\n            width   = logo.offsetHeight * ratio,\n            height  = 0\n\n\n        ratio = mainGroup.getBBox().width / mainGroup.getBBox().height ?? 1\n\n        width = Math.round( Math.floor( logo.offsetHeight * ratio ) * 100 ) / 100 ?? 0\n        height = Math.round( Math.floor( width / ratio ) * 100 ) / 100 ?? 0\n\n        const newVewBoxHeight = Math.round( Math.floor( viewBoxWidth / ratio ) * 100 ) / 100 ?? 0\n\n        svg.setAttribute( 'viewBox', `0 0 ${ viewBoxWidth } ${ newVewBoxHeight }` )\n        svg.setAttribute( 'width', width )\n        svg.setAttribute( 'height', height )\n    }\n    resetSvgSiteLogo()\n    window.addEventListener( 'resize', resetSvgSiteLogo )\n\n})();\n","/**\n * The parent class to creating Shiftr Components\n */\nclass ShiftrComponent {\n\n    componentSlug() {\n        return ''\n    }\n\n    defaultSettings() {\n        return {}\n    }\n\n    /**\n     * Assign the target and parse settings\n     * \n     * @param {string|DOMElement} target The target element     \n     * @param {object} settings Any settings to override default\n     */\n    constructor( target, settings = {} ) {\n\n        if ( typeof target === 'string' ) {\n            this.target = document.querySelector( target ) || false\n        } else {\n            this.target = target\n        }\n\n        if ( ! this.target ) {\n            throw new Error( 'target is not defined.' )\n        }\n\n        if ( Object.keys( settings ).length == 0 ) {\n            settings = this.defaultSettings()\n        }\n\n        this.settings = parseComponentData( Object.assign( this.defaultSettings(), settings ), this.target, this.componentSlug() )\n\n        this.componentID = generateComponentID( this.target, this.componentSlug() )\n        this.target.id = this.componentID\n    }\n}\n\n\n/**  \n *  strToBool\n *\n *  Perform regex against string for true|false and return boolean\n *\n *  @since 1.0\n *\n *  @param str str The string to check against\n *  @return bool|str Boolean if match found, string if no match\n */\n\nfunction strToBool( str ) {\n\n    if ( str.match( /^true$/i ) ) {\n        return true\n\n    } else if ( str.match( /^false$/i ) ) {\n        return false\n\n    } else {\n        return str\n    }\n}\n\n\n/**  \n *  parseComponentData\n *\n *  For use on parsing Shiftr component settings\n *  Override component setting defaults with data attributes\n *\n *  @since 1.0\n *\n *  @param settings obj The settings of the component\n *  @param el Element The component element\n *  @param component str The Shiftr component name\n *  @return obj The parsed settings\n */\nfunction parseComponentData( settings = {}, el, component = '' ) {\n\n    if ( el && el.hasAttribute( `data-shiftr-${component}` ) ) {\n\n        Object.keys( settings ).forEach( s => {\n\n            if ( el.hasAttribute( `data-${component}-${s}` ) ) {\n                settings[s] = strToBool( el.getAttribute( `data-${component}-${s}` ) )\n            }\n        })\n    }\n\n    return settings\n}\n\n\n/**  \n *  generateComponentID\n *\n *  For use on generating a random ID for a Shiftr Component\n *\n *  @since 1.0\n *\n *  @param el Element The component element\n *  @param component str The Shiftr component name\n *  @return str The ID\n */\nfunction generateComponentID( el, component = '' ) {\n\n    // Check if element already has id set\n    if ( el.hasAttribute( 'id' ) ) return el.id;\n\n    const $ID = `${component}_` + Math.floor( Math.random() * Math.floor( 100 ) )\n\n    // Rerun if element with id already exists\n    if ( document.getElementById( $ID ) ) generateComponentID( el, component )\n\n    return $ID\n}\n\nexport default ShiftrComponent\nexport { strToBool, parseComponentData, generateComponentID }\n    ","/**\n * Display the cookie notice if the cookie confirmation cookie\n * is not found.\n */\nimport { createEl } from './global'\n\n\nexport default function CookieNotice() {\n\n    const cookieName = 'shiftr_accept_cookie'\n\n    if ( document.cookie.indexOf( cookieName ) == -1 ) {\n        const el = createEl( 'div' )\n        el.classList.add( 'shiftr-cookie-notice' )\n\n        el.innerHTML = `\n            <div>${ shiftr.cookie.message }</div>\n            <button id=\"shiftr-cookie-accept\" class=\"button\">Understood</button>\n        `\n\n        document.body.appendChild( el )\n\n        setTimeout( function() {\n            el.classList.add( 'is-visible' )\n        }, 1000 )\n\n        // Listen for notice acceptance\n        document.getElementById( 'shiftr-cookie-accept' ).addEventListener( 'click', e => {\n            e.preventDefault()\n\n            var expiry = new Date()\n\n            expiry.setDate( expiry.getDate() + 30 )\n\n            // Set the cookie\n            document.cookie = `${cookieName}=${true}; expires=${expiry}; path=/`\n\n\n            // Now, remove the notice\n            el.classList.remove( 'is-visible' )\n\n            setTimeout( () => {\n                document.body.removeChild( el )\n            }, 1000 )\n\n        })\n    }\n};\n","/**\n * Core document elements\n */\nconst header    = document.querySelector( 'header.site-header' ),    \n      head      = document.getElementsByTagName( 'head' )[0],\n      body      = document.body;\n\nconst Layout = { header, head, body }\n\n\n/**\n * Wrapper to document.createElement\n * \n * @param {string} el The node tag name\n * @return {HTMLElement} The HTML element\n */\nfunction createEl( el ) {\n\n    return document.createElement( el )\n}\n\n\n/**\n * Get the width of the viewport\n * \n * @return {integer} The window.innerWidth\n */\nfunction vw() {\n    return window.innerWidth\n}\n\n\n/**\n * Get the height of the viewport\n * \n * @return {integer} The window.innerHeight\n */\nfunction vh() {\n    return window.innerHeight\n}\n\n\n/*  ////  --|    Width Breakpoint - the JS equivilant to CSS media queries\n\n    * Ensure breakpoint settings match those set in the styles\n*/\n\nconst s   = 's';\nconst m   = 'm';\nconst l   = 'l';\nconst xl  = 'xl';\nconst max = 'max';\n\n\n/**\n * CSS media query equivilant to 'min-width'\n * \n * @param {integar|string} width The breakpoint width to match\n * @param {function} fn The function to run when match is met\n * @param {function} callback The function to run when match is not met\n * @param {boolean} runOnce Whether to run only on load\n */\nfunction x( width, fn, callback = () => {}, runOnce = false ) {\n    let value\n\n    switch ( width ) {\n        case s:     value = 450; break\n        case m:     value = 768; break\n        case l:     value = 1024; break\n        case xl:    value = 1600; break\n        case max:   value = 1920; break\n        default:    value = width\n    }\n\n    const run = () => {\n        let allow = false\n\n        if ( vw() >= value ) {\n            if ( runOnce && ! allow ) return;\n            fn()\n\n            allow = false\n\n        } else {\n            if ( runOnce && allow ) return;\n            callback()\n\n            allow = true\n        } \n    }\n\n    document.addEventListener( 'DOMContentLoaded', run )\n    window.addEventListener( 'resize', run )\n    window.addEventListener( 'orientationchange', run )\n}\n\n/**\n * Exports\n */\nexport { Layout, createEl, vw, vh, x }\n"],"sourceRoot":""}