{"version":3,"sources":["_.js","app.js","app.ui.accordion.js","app.ui.addressLookup.js","app.ui.articleNavigation.js","app.ui.ccNumber.js","app.ui.checkbox.js","app.ui.cookieNotification.js","app.ui.ctaGroup.js","app.ui.dashboardNavigation.js","app.ui.datepicker.js","app.ui.fileUploader.js","app.ui.form.js","app.ui.geopicker.js","app.ui.googleMaps.js","app.ui.gridMasonry.js","app.ui.invoices.js","app.ui.js","app.ui.legalAgreement.js","app.ui.navigation.js","app.ui.notification.js","app.ui.passwordStrength.js","app.ui.qualifications.js","app.ui.range.js","app.ui.searchFacets.js","app.ui.searchGlobal.js","app.ui.subsectionCTA.js","app.ui.table.js","app.ui.tabs.js","app.ui.wysiwyg.js","Directdebit.js","form-controls.js"],"names":["App","UI","$","fn","toggleAttr","attr","val1","val2","each","self","removeClassRegex","regex","removeClass","i","classes","split","filter","c","test","join","Helpers","CreateCookie","name","value","days","expiryDate","Date","getTime","document","cookie","toUTCString","DestroyCookie","PositionToString","position","coords","latitude","longitude","AjaxVerificationToken","Accordion","$container","options","defaults","sectionSelector","togglerSelector","contentSelector","settings","extend","init","find","length","section","id","RandomString","$section","$togglerButton","html","on","e","toggleAccordion","after","remove","first","$toggler","$body","next","removeAttr","AddressLookup","$lookup","$lookupSearch","$lookupResult","$lookupForm","lookupData","AnyHasValue","formInputIds","input","push","append","bindControls","populateResults","keyCode","preventDefault","showForm","option","val","populateForm","showResults","postcodehoney","console","log","error","buttonState","postcode","replace","ajax","url","method","data","headers","done","Exceeded","Items","Error","Cause","Resolution","$select","output","row","parseInt","Id","StreetAddress","Place","fail","jqXHR","textStatus","errorThrown","always","addresshoney","toUpperCase","BuildingNumber","Street","formatValues","Company","SubBuilding","BuildingName","Line3","City","AdminAreaName","CountryName","PostalCode","errorMessage","$errorMessage","enabled","$button","prop","addClass","valueArray","sanitisedArray","ready","form","jsAddressLookup","ArticleNavigation","$selector","$article","$articleNavigation","$articleNavigationTitle","$articleNavigationList","sections","eq","addIDs","buildNavigation","bindEvents","window","matchMedia","matches","showNavigation","positionNavigation","$target","scrollTop","offset","top","MoveFocus","toggleNavigation","header","title","text","slug","makeSlug","level","substr","string","Slugify","prepend","populateNavigation","returnHtml","show","css","left","outerWidth","hideNavigation","CCNumber","$field","cardIcon","number","cardType","cardTypeFromNumber","siblings","cardTypeId","replaceWith","visa","mastercard","amex","diners","jcb","discover","toString","Checkbox","checkedClass","checkOnLoad","jsCheckbox","CookieNotification","$banner","closest","cookieName","CTAGroup","$ctaGroup","pinned","bannerPosition","get","getBoundingClientRect","triggerPosition","outerHeight","MQ","pin","unpin","jsCtaGroup","DashboardNavigation","$menu","buildHtml","calculateOverflow","target","randId","$overflowMenu","$overflowToggleButton","$navigationListItem","$overflowToggle","children","empty","hideOverflowMenu","availableWidth","width","accumulatedWidth","item","$item","clone","appendTo","showOverflowMenu","Datepicker","$input","supportsDate","initFallback","today","format","minDate","maxDate","picker","Pikaday","field","firstDay","theme","i18n","previousMonth","nextMonth","months","weekdays","weekdaysShort","el","createElement","setAttribute","type","FileUploader","$uploader","upload","fieldName","allowedFileTypes","fileSizeLimit","formData","callback","success","failure","htmlClass","$uploaderInput","$uploaderLabel","droppedFiles","defaultLabel","allowMultipleFiles","detectSupport","stopPropagation","validateFiles","originalEvent","dataTransfer","files","trigger","srcElement","div","allowedFiles","formLabel","returnedError","file","key","message","inArray","size","func","call","validationsuccess","updateLabel","uploadFiles","filename","fileList","ajaxData","FormData","dataType","cache","contentType","processData","Form","$form","timeout","setTimeout","Geopicker","navigator","$geolocateButton","localStorage","getItem","populateInput","geolocation","getCurrentPosition","setItem","jsGeopicker","GoogleMaps","apiLoaded","map","CONFIG","GOOGLE_MAPS_API_KEY","loadApi","loadAllMaps","when","getScript","Deferred","deferred","resolve","mapCanvas","loadMap","canvas","lat","lng","zoom","mapData","Number","google","maps","Map","center","disableDefaultUI","marker","Marker","addListener","open","jsGoogleMaps","GridMasonry","masonry","itemSelector","gutter","percentPosition","transitionDuration","jsGridMasonry","Invoices","isLoading","invoiceId","undefined","template","InvoiceProducts","Description","TotalAmount","toFixed","AmountPaid","BalanceAmount","click","slideToggle","LoadIcons","ICON_SPRITE","ObjectFitPolyfill","selectors","Modernizr","objectfit","selector","imgSrc","FitVids","targets","parent","fitVids","SkipLinkFocusFix","bp","breakpoints","Math","random","substring","toLowerCase","$elem","$element","goInside","TrapFocus","namespace","ReleaseFocus","$focusableElements","firstFocusable","lastFocusable","last","which","shiftKey","activeElement","focus","off","CreateOverlay","$overlay","DestroyOverlay","ClickAndDisableShowLoading","link","ClickAndDisable","onclick","event","DetailsPolyfill","details","$parent","LegalAgreement","multiple","$termsCheckbox","lockControls","$submitButton","allChecked","Navigation","$navigation","hashcheckNavigation","closeAllPanels","location","hash","openPanel","togglePanel","$panel","closePanel","closeNavigation","openNavigation","Notification","dismissMessage","mods","dismissable","duration","debug","buildContainer","create","$notificationCentre","mod","$notification","$notificationMessage","$notificationClose","destroy","NotificationDD","_this","insertBefore","concat","PasswordStrength","prepareHtml","ratePassword","$state","wrap","results","zxcvbn","strength","status","score","crack_times_display","online_no_throttling_10_per_second","Qualifications","rowSelector","showNext","Range","$slider","min","max","maxAndAbove","updateValue","is","SearchFacets","buildButtons","hasClass","$openButton","openModal","$closeButton","closeModal","toggleModal","SearchGlobal","placeholder","site","events","jobs","courses","therapists","register","trainersAndSupervisors","placeholderheadersearch","bindSearchPlaceholders","bindSearchTabControls","requestGeolocation","setHeaderPlaceholder","setSearchPlaceholder","$searchNavigation","searchQuery","userLocation","encodeURI","href","populateGeolocation","$searchLocation","$mobileSearchLocation","$GeneralSearchLocation","$searchInput","$searchCategory","determineHeaderSearchPlaceholder","$mobileSearchInput","$mobileSearchCategory","urlSegments","pathname","determinePlaceholder","category","SubsectionCTA","$subsection","jsSubsectionCTA","Table","$table","columns","cell","table","Tabs","panelSelector","tabContainerClass","tabClass","tabList","$tabList","$panelSelector","tab","$tab","generateTabs","panelId","WYSIWYG","container","$editor","$toolbar","initEditor","editor","MediumEditor","keyboardCommands","commands","command","meta","shift","alt","toolbar","relativeContainer","standardizeSelectionStart","buttons","contentDefault","hideOnClick","paste","forcePlainText","imageDragging","jsWYSIWYG","getbankdetail","accountname","sortcode","accountnumber","frequencytype","refNo","firstname","lastname","numregex","membershipNumber","sortCode","accountNumber","firstName","lastName","frequencyType","json","parseJSON","BankName","Branch","result","keypress","checkbox","getElementById","querySelectorAll","forEach","disabled","validateAddress","checked","onload","showHideLabel","dropdown","labelAst"],"mappings":";;AAAA,IAAMA,GAAG,GAAG,EAAZ;AACAA,GAAG,CAACC,EAAJ,GAAS,EAAT,C,CAEA;;AACAC,CAAC,CAACC,EAAF,CAAKC,UAAL,GAAkB,UAASC,IAAT,EAAeC,IAAf,EAAqBC,IAArB,EAA2B;AAC5C,SAAO,KAAKC,IAAL,CAAU,YAAW;AAC3B,QAAMC,IAAI,GAAGP,CAAC,CAAC,IAAD,CAAd;;AACA,QAAGO,IAAI,CAACJ,IAAL,CAAUA,IAAV,KAAmBC,IAAtB,EAA4B;AAC3BG,MAAAA,IAAI,CAACJ,IAAL,CAAUA,IAAV,EAAgBE,IAAhB;AACA,KAFD,MAGK;AACJE,MAAAA,IAAI,CAACJ,IAAL,CAAUA,IAAV,EAAgBC,IAAhB;AACA;AACD,GARM,CAAP;AASA,CAVD,C,CAYA;;;AACAJ,CAAC,CAACC,EAAF,CAAKO,gBAAL,GAAwB,UAASC,KAAT,EAAgB;AACvC,SAAOT,CAAC,CAAC,IAAD,CAAD,CAAQU,WAAR,CAAoB,UAASC,CAAT,EAAYC,OAAZ,EAAqB;AAC/C,WAAOA,OAAO,CAACC,KAAR,CAAc,KAAd,EAAqBC,MAArB,CAA4B,UAASC,CAAT,EAAY;AAC9C,aAAON,KAAK,CAACO,IAAN,CAAWD,CAAX,CAAP;AACA,KAFM,EAEJE,IAFI,CAEC,GAFD,CAAP;AAGA,GAJM,CAAP;AAKA,CAND;;;ACjBAnB,GAAG,CAACoB,OAAJ,GAAc;AACbC,EAAAA,YAAY,EAAE,sBAASC,IAAT,EAAeC,KAAf,EAAsBC,IAAtB,EAA4B;AACzC,QAAMC,UAAU,GAAG,IAAIC,IAAJ,CAAS,IAAIA,IAAJ,GAAWC,OAAX,KAAwBH,IAAI,GAAG,EAAP,GAAY,EAAZ,GAAiB,EAAjB,GAAsB,IAAvD,CAAnB;AACAI,IAAAA,QAAQ,CAACC,MAAT,GAAkBP,IAAI,GAAG,GAAP,GAAaC,KAAb,GAAqB,kBAArB,GAA0CE,UAAU,CAACK,WAAX,EAA5D;AACA,GAJY;AAKbC,EAAAA,aAAa,EAAE,uBAAST,IAAT,EAAe;AAC7BtB,IAAAA,GAAG,CAACoB,OAAJ,CAAYC,YAAZ,CAAyBC,IAAzB,EAA+B,EAA/B,EAAmC,CAAC,CAApC;AACA,GAPY;AAQbU,EAAAA,gBAAgB,EAAE,0BAAUC,QAAV,EAAoB;AAClC,qBAAUA,QAAQ,CAACC,MAAT,CAAgBC,QAA1B,cAAsCF,QAAQ,CAACC,MAAT,CAAgBE,SAAtD;AACH,GAVY;AAWVC,EAAAA,qBAAqB,EAAE;AAXb,CAAd;;;ACAArC,GAAG,CAACC,EAAJ,CAAOqC,SAAP,GAAmB,UAASC,UAAT,EAAmC;AAAA;;AAAA,MAAdC,OAAc,uEAAJ,EAAI;AAClD,MAAM/B,IAAI,GAAG,IAAb;AACA,MAAMgC,QAAQ,GAAG;AACbC,IAAAA,eAAe,EAAE,qBADJ;AAEbC,IAAAA,eAAe,EAAE,oBAFJ;AAGbC,IAAAA,eAAe,EAAE;AAHJ,GAAjB;AAKA,MAAMC,QAAQ,GAAG3C,CAAC,CAAC4C,MAAF,CAAS,IAAT,EAAe,EAAf,EAAmBL,QAAnB,EAA6BD,OAA7B,CAAjB;;AACA,OAAKO,IAAL,GAAY,YAAM;AACd,QAAGR,UAAU,CAACS,IAAX,CAAgBH,QAAQ,CAACH,eAAzB,EAA0CO,MAA1C,GAAmD,CAAtD,EAAyD;AAAE;AAAS;;AACpEV,IAAAA,UAAU,CAAClC,IAAX,CAAgB;AAAE,cAAQ,SAAV;AAAqB,mBAAa;AAAlC,KAAhB;AACAkC,IAAAA,UAAU,CAACS,IAAX,CAAgBH,QAAQ,CAACH,eAAzB,EAA0ClC,IAA1C,CAA+C,UAACK,CAAD,EAAIqC,OAAJ,EAAgB;AAC3D,UAAMC,EAAE,uBAAgBnD,GAAG,CAACC,EAAJ,CAAOmB,OAAP,CAAegC,YAAf,EAAhB,CAAR;AACA,UAAMC,QAAQ,GAAGnD,CAAC,CAACgD,OAAD,CAAlB;AACA,UAAMI,cAAc,GAAGpD,CAAC,CAAC,WAAD,EAAc;AAClC,gBAAQ,QAD0B;AAElC,wBAASiD,EAAT,YAFkC;AAGlC,yBAAiBA,EAHiB;AAIlC,yBAAiB,OAJiB;AAKlC,gBAAQ,KAL0B;AAMlC,iBAASE,QAAQ,CAACL,IAAT,CAAcH,QAAQ,CAACF,eAAvB,EAAwCtC,IAAxC,CAA6C,OAA7C,CANyB;AAOlC,gBAAQgD,QAAQ,CAACL,IAAT,CAAcH,QAAQ,CAACF,eAAvB,EAAwCY,IAAxC;AAP0B,OAAd,CAAD,CAQpBC,EARoB,CAQjB,OARiB,EAQR,UAAUC,CAAV,EAAa;AACxBhD,QAAAA,IAAI,CAACiD,eAAL,CAAqBxD,CAAC,CAAC,IAAD,CAAtB;AACH,OAVsB,CAAvB;AAUG;AACHmD,MAAAA,QAAQ,CAACL,IAAT,CAAcH,QAAQ,CAACF,eAAvB,EAAwCgB,KAAxC,CAA8CL,cAA9C,EAA8DM,MAA9D;AACAP,MAAAA,QAAQ,CAACL,IAAT,CAAcH,QAAQ,CAACD,eAAvB,EAAwCvC,IAAxC,CAA6C;AACzC,kBAAU,QAD+B;AAEzC,qCAAsB8C,EAAtB,YAFyC;AAGzC,gBAAQ,UAHiC;AAIzC,cAAMA;AAJmC,OAA7C;AAMH,KArBD;;AAsBA,QAAGZ,UAAU,CAACS,IAAX,CAAgBH,QAAQ,CAACH,eAAzB,EAA0CO,MAA1C,KAAqD,CAAxD,EAA2D;AACvD,MAAA,KAAI,CAACS,eAAL,CAAqBnB,UAAU,CAACS,IAAX,CAAgBH,QAAQ,CAACF,eAAzB,EAA0CkB,KAA1C,EAArB;AACH;;AAAA;AACJ,GA5BD;;AA6BA,OAAKH,eAAL,GAAuB,UAACI,QAAD,EAAc;AACjC,QAAMC,KAAK,GAAGD,QAAQ,CAACE,IAAT,CAAcnB,QAAQ,CAACD,eAAvB,CAAd;;AACA,QAAGmB,KAAK,CAAC1D,IAAN,CAAW,QAAX,MAAyB,QAA5B,EAAsC;AAClC0D,MAAAA,KAAK,CAACE,UAAN,CAAiB,QAAjB;AACAH,MAAAA,QAAQ,CAACzD,IAAT,CAAc,eAAd,EAA+B,MAA/B;AACA;AACH;;AACD0D,IAAAA,KAAK,CAAC1D,IAAN,CAAW,QAAX,EAAqB,QAArB;AACAyD,IAAAA,QAAQ,CAACzD,IAAT,CAAc,eAAd,EAA+B,OAA/B;AACH,GATD;;AAUA,OAAK0C,IAAL;AACH,CAhDD;;;ACAA/C,GAAG,CAACC,EAAJ,CAAOiE,aAAP,GAAuB,UAASC,OAAT,EAAkB;AAAA;;AACxC,MAAM1D,IAAI,GAAG,IAAb;AACA,MAAM2D,aAAa,GAAGD,OAAO,CAACnB,IAAR,CAAa,wBAAb,CAAtB;AACA,MAAMqB,aAAa,GAAGF,OAAO,CAACnB,IAAR,CAAa,wBAAb,CAAtB;AACA,MAAMsB,WAAW,GAAGH,OAAO,CAACnB,IAAR,CAAa,sBAAb,CAApB;AACA,MAAIuB,UAAJ;;AACA,OAAKxB,IAAL,GAAY,YAAM;AACdsB,IAAAA,aAAa,CAAChE,IAAd,CAAmB,aAAnB,EAAkC,MAAlC;AACAiE,IAAAA,WAAW,CAACjE,IAAZ,CAAiB,aAAjB,EAAgC,MAAhC;;AACH,QAAIL,GAAG,CAACC,EAAJ,CAAOmB,OAAP,CAAeoD,WAAf,CAA2BF,WAAW,CAACtB,IAAZ,CAAiB,sCAAjB,CAA3B,KAAwFsB,WAAW,CAACtB,IAAZ,CAAiB,cAAjB,EAAiCC,MAAjC,GAA0C,CAAtI,EAAyI;AACrImB,MAAAA,aAAa,CAACpB,IAAd,CAAmB,iCAAnB,EAAsD3C,IAAtD,CAA2D,aAA3D,EAA0E,MAA1E;AACAiE,MAAAA,WAAW,CAACjE,IAAZ,CAAiB,aAAjB,EAAgC,OAAhC;AACH;;AACD,QAAIoE,YAAY,GAAG,EAAnB;AACAvE,IAAAA,CAAC,CAACM,IAAF,CAAO8D,WAAW,CAACtB,IAAZ,CAAiB,QAAjB,CAAP,EAAmC,UAACnC,CAAD,EAAI6D,KAAJ,EAAc;AAC7CD,MAAAA,YAAY,CAACE,IAAb,CAAkBzE,CAAC,CAACwE,KAAD,CAAD,CAASrE,IAAT,CAAc,IAAd,CAAlB;AACH,KAFD;AAGMgE,IAAAA,aAAa,CAACrB,IAAd,CAAmB,QAAnB,EAA6B3C,IAA7B,CAAkC,WAAlC,EAA+C,QAA/C,EAAyDA,IAAzD,CAA8D,eAA9D,EAA+E,gBAA/E,EAAiGA,IAAjG,CAAsG,eAAtG,EAAuHoE,YAAY,CAACtD,IAAb,CAAkB,GAAlB,CAAvH,EAXW,CAaX;;AACAiD,IAAAA,aAAa,CAACQ,MAAd,CAAqB,8EAArB;AACAP,IAAAA,aAAa,CAACO,MAAd,CAAqB,6EAArB;;AAEN,IAAA,KAAI,CAACC,YAAL;AACA,GAlBD;;AAmBA,OAAKA,YAAL,GAAoB,YAAM;AACzBT,IAAAA,aAAa,CAACpB,IAAd,CAAmB,QAAnB,EAA6BQ,EAA7B,CAAgC,OAAhC,EAAyC,UAACC,CAAD,EAAO;AAC/C,MAAA,KAAI,CAACqB,eAAL;AACA,KAFD,EAEGtB,EAFH,CAEM,SAFN,EAEiB,UAACC,CAAD,EAAO;AACvB,UAAGA,CAAC,CAACsB,OAAF,IAAa,EAAb,IAAmBtB,CAAC,CAACsB,OAAF,IAAa,EAAnC,EAAuC;AAAE;AAAS;;AAClD,MAAA,KAAI,CAACD,eAAL;AACA,KALD;AAMMV,IAAAA,aAAa,CAACpB,IAAd,CAAmB,+BAAnB,EAAoDQ,EAApD,CAAuD,SAAvD,EAAkE,UAACC,CAAD,EAAO;AAC9E,UAAGA,CAAC,CAACsB,OAAF,IAAa,EAAhB,EAAoB;AAAE;AAAS;;AAC/BtB,MAAAA,CAAC,CAACuB,cAAF;;AACA,MAAA,KAAI,CAACF,eAAL;AACA,KAJK;AAKNV,IAAAA,aAAa,CAACpB,IAAd,CAAmB,mCAAnB,EAAwDQ,EAAxD,CAA2D,OAA3D,EAAoE,UAACC,CAAD,EAAO;AAC1EA,MAAAA,CAAC,CAACuB,cAAF;;AACA,MAAA,KAAI,CAACC,QAAL;;AACAZ,MAAAA,aAAa,CAAChE,IAAd,CAAmB,aAAnB,EAAkC,MAAlC;AACA,KAJD;AAKMgE,IAAAA,aAAa,CAACrB,IAAd,CAAmB,QAAnB,EAA6BQ,EAA7B,CAAgC,QAAhC,EAA0C,UAAUC,CAAV,EAAa;AAC5D,UAAMyB,MAAM,GAAGhF,CAAC,CAAC,IAAD,CAAD,CAAQiF,GAAR,EAAf;AACA1E,MAAAA,IAAI,CAAC2E,YAAL,CAAkBF,MAAlB;AACA,KAHK;AAIN,GArBD;;AAsBA,OAAKG,WAAL,GAAmB,YAAM;AACxBjB,IAAAA,aAAa,CAACpB,IAAd,CAAmB,iCAAnB,EAAsD3C,IAAtD,CAA2D,aAA3D,EAA0E,OAA1E;AACAgE,IAAAA,aAAa,CAAChE,IAAd,CAAmB,aAAnB,EAAkC,OAAlC;AACAiE,IAAAA,WAAW,CAACjE,IAAZ,CAAiB,aAAjB,EAAgC,MAAhC;AACA,GAJD;;AAKA,OAAKyE,eAAL,GAAuB,YAAM;AACtB,QAAIQ,aAAa,GAAGlB,aAAa,CAACpB,IAAd,CAAmB,8BAAnB,EAAmDmC,GAAnD,EAApB;;AACA,QAAIG,aAAa,CAACrC,MAAd,IAAwB,CAA5B,EAA+B;AAC3BsC,MAAAA,OAAO,CAACC,GAAR,CAAY,QAAZ;AACA;AACH;;AAED,IAAA,KAAI,CAACC,KAAL,CAAW,KAAX;;AACA,IAAA,KAAI,CAACC,WAAL,CAAiB,KAAjB;;AACA,QAAIC,QAAQ,GAAGvB,aAAa,CAACpB,IAAd,CAAmB,+BAAnB,EAAoDmC,GAApD,EAAf;;AACA,QAAI,OAAOQ,QAAP,KAAoB,WAApB,IAAmCA,QAAQ,IAAI,IAA/C,IAAuDA,QAAQ,CAACC,OAAT,CAAiB,KAAjB,EAAwB,EAAxB,EAA4B3C,MAA5B,GAAqC,CAAhG,EAAmG;AAC/FmB,MAAAA,aAAa,CAACpB,IAAd,CAAmB,+BAAnB,EAAoDmC,GAApD,CAAwD,EAAxD;;AACA,MAAA,KAAI,CAACM,KAAL,CAAW,4BAAX;;AACA,MAAA,KAAI,CAACC,WAAL,CAAiB,IAAjB;;AACA;AACH;;AACPxF,IAAAA,CAAC,CAAC2F,IAAF,CAAO;AACNC,MAAAA,GAAG,EAAE,iEADC;AAENC,MAAAA,MAAM,EAAE,MAFF;AAGNC,MAAAA,IAAI,EAAE;AACLL,QAAAA,QAAQ,EAARA;AADK,OAHA;AAMGM,MAAAA,OAAO,EAAE;AACL,oCAA4BjG,GAAG,CAACoB,OAAJ,CAAYiB;AADnC;AANZ,KAAP,EASS6D,IATT,CASc,UAACF,IAAD,EAAU;AACpB,UAAIA,IAAI,CAACG,QAAT,EACA;AACI,QAAA,KAAI,CAACV,KAAL,CAAW,sGAAX;;AACA;AACH;;AAEJO,MAAAA,IAAI,GAAGA,IAAI,CAACI,KAAZ;;AACA,UAAIJ,IAAI,CAAC,CAAD,CAAJ,CAAQK,KAAZ,EAAmB;AACf,QAAA,KAAI,CAACZ,KAAL,WAAcO,IAAI,CAAC,CAAD,CAAJ,CAAQM,KAAtB,cAA+BN,IAAI,CAAC,CAAD,CAAJ,CAAQO,UAAvC;AACH,OAFD,MAGK;AACJhC,QAAAA,UAAU,GAAGyB,IAAb;AACA,YAAMQ,OAAO,GAAGnC,aAAa,CAACrB,IAAd,CAAmB,QAAnB,CAAhB;AACA,YAAIyD,MAAM,GAAG,EAAb;AACAvG,QAAAA,CAAC,CAACM,IAAF,CAAO+D,UAAP,EAAmB,UAAC1D,CAAD,EAAI6F,GAAJ,EAAY;AAC9BD,UAAAA,MAAM,8BAAsBE,QAAQ,CAACD,GAAG,CAACE,EAAL,CAA9B,gBAA2CF,GAAG,CAACG,aAA/C,eAAiEH,GAAG,CAACI,KAArE,cAAN;AACA,SAFD;AAGAN,QAAAA,OAAO,CAACjD,IAAR,CAAakD,MAAb;;AACA,QAAA,KAAI,CAACpB,WAAL;AAEA;AAGD,KAjCD,EAiCG0B,IAjCH,CAiCQ,UAACC,KAAD,EAAQC,UAAR,EAAoBC,WAApB,EAAoC;AACxC,MAAA,KAAI,CAACzB,KAAL,CAAWyB,WAAX;AACH,KAnCD,EAmCGC,MAnCH,CAmCU,YAAM;AACZ,MAAA,KAAI,CAACzB,WAAL,CAAiB,IAAjB;AACH,KArCD;AAsCA,GAtDD;;AAuDA,OAAKT,QAAL,GAAgB,YAAM;AACrBb,IAAAA,aAAa,CAACpB,IAAd,CAAmB,iCAAnB,EAAsD3C,IAAtD,CAA2D,aAA3D,EAA0E,MAA1E;AACAgE,IAAAA,aAAa,CAAChE,IAAd,CAAmB,aAAnB,EAAkC,OAAlC;AACAiE,IAAAA,WAAW,CAACjE,IAAZ,CAAiB,aAAjB,EAAgC,OAAhC;AACA,GAJD;;AAKG,OAAK+E,YAAL,GAAoB,UAACF,MAAD,EAAY;AAE5B,QAAIkC,YAAY,GAAG/C,aAAa,CAACrB,IAAd,CAAmB,6BAAnB,EAAkDmC,GAAlD,EAAnB;;AACA,QAAIiC,YAAY,CAACnE,MAAb,IAAuB,CAA3B,EAA8B;AAC1BsC,MAAAA,OAAO,CAACC,GAAR,CAAY,QAAZ;AACA;AACH;;AAGJ,IAAA,KAAI,CAACE,WAAL,CAAiB,KAAjB;;AACHxF,IAAAA,CAAC,CAAC2F,IAAF,CAAO;AACNC,MAAAA,GAAG,EAAE,2DADC;AAENC,MAAAA,MAAM,EAAE,MAFF;AAGNC,MAAAA,IAAI,EAAE;AACL7C,QAAAA,EAAE,EAAE+B;AADC,OAHA;AAMGe,MAAAA,OAAO,EAAE;AACL,oCAA4BjG,GAAG,CAACoB,OAAJ,CAAYiB;AADnC;AANZ,KAAP,EASS6D,IATT,CASc,UAACF,IAAD,EAAU;AACd,UAAIA,IAAI,CAACG,QAAT,EAAmB;AACf,QAAA,KAAI,CAACV,KAAL,CAAW,uGAAX;;AACA;AACH;;AAEVO,MAAAA,IAAI,GAAGA,IAAI,CAACI,KAAL,CAAW,CAAX,CAAP;AACA,UAAMT,QAAQ,GAAGvB,aAAa,CAACpB,IAAd,CAAmB,OAAnB,EAA4BmC,GAA5B,GAAkCkC,WAAlC,EAAjB;AACA/C,MAAAA,WAAW,CAACtB,IAAZ,CAAiB,+BAAjB,EAAkDmC,GAAlD,WAAyDa,IAAI,CAACsB,cAA9D,cAAgFtB,IAAI,CAACuB,MAArF;AACSjD,MAAAA,WAAW,CAACtB,IAAZ,CAAiB,+BAAjB,EAAkDmC,GAAlD,CAAsD,KAAI,CAACqC,YAAL,CAAkB,CAACxB,IAAI,CAACyB,OAAN,EAAezB,IAAI,CAAC0B,WAApB,EAAiC1B,IAAI,CAAC2B,YAAtC,CAAlB,EAAuExG,IAAvE,CAA4E,IAA5E,CAAtD;AACAmD,MAAAA,WAAW,CAACtB,IAAZ,CAAiB,+BAAjB,EAAkDmC,GAAlD,CAAsDa,IAAI,CAAC4B,KAA3D;AACTtD,MAAAA,WAAW,CAACtB,IAAZ,CAAiB,2BAAjB,EAA8CmC,GAA9C,CAAkDa,IAAI,CAAC6B,IAAvD;AACAvD,MAAAA,WAAW,CAACtB,IAAZ,CAAiB,6BAAjB,EAAgDmC,GAAhD,CAAoDa,IAAI,CAAC8B,aAAzD;AACAxD,MAAAA,WAAW,CAACtB,IAAZ,CAAiB,8BAAjB,EAAiDmC,GAAjD,CAAqDa,IAAI,CAAC+B,WAA1D;AACAzD,MAAAA,WAAW,CAACtB,IAAZ,CAAiB,+BAAjB,EAAkDmC,GAAlD,CAAsDa,IAAI,CAACgC,UAA3D;;AACA,MAAA,KAAI,CAAC/C,QAAL;AACA,KAzBD,EAyBG8B,IAzBH,CAyBQ,UAACC,KAAD,EAAQC,UAAR,EAAoBC,WAApB,EAAoC;AACxC,MAAA,KAAI,CAACzB,KAAL,CAAWyB,WAAX;AACH,KA3BD,EA2BGC,MA3BH,CA2BU,YAAM;AACZ,MAAA,KAAI,CAACzB,WAAL,CAAiB,IAAjB;AACH,KA7BD;AA8BA,GAxCE;;AAyCH,OAAKD,KAAL,GAAa,UAACwC,YAAD,EAAkB;AAC3B7D,IAAAA,aAAa,CAACpB,IAAd,CAAmB,cAAnB,EAAmCY,MAAnC;AACA,QAAMsE,aAAa,GAAGhI,CAAC,CAAC,QAAD,EAAW;AAC9B,eAAS,aADqB;AAE9B,cAAQ+H,YAFsB;AAG9B,cAAQ,OAHsB;AAI9B,mBAAa;AAJiB,KAAX,CAAvB;;AAMA,QAAIA,YAAJ,EAAkB;AACd7D,MAAAA,aAAa,CAACpB,IAAd,CAAmB,cAAnB,EAAmC4B,MAAnC,CAA0CsD,aAA1C;AACH;AACJ,GAXD;;AAYA,OAAKxC,WAAL,GAAmB,UAACyC,OAAD,EAAa;AAC5B,QAAMC,OAAO,GAAGhE,aAAa,CAACpB,IAAd,CAAmB,QAAnB,CAAhB;;AACA,QAAImF,OAAJ,EAAa;AACTC,MAAAA,OAAO,CAACC,IAAR,CAAa,UAAb,EAAyB,KAAzB,EAAgCzH,WAAhC,CAA4C,iBAA5C;AACH,KAFD,MAGK;AACDwH,MAAAA,OAAO,CAACC,IAAR,CAAa,UAAb,EAAyB,IAAzB,EAA+BC,QAA/B,CAAwC,iBAAxC;AACH;AACJ,GARD;;AASA,OAAKd,YAAL,GAAoB,UAACe,UAAD,EAAgB;AACnC,QAAMC,cAAc,GAAG,EAAvB;AACAtI,IAAAA,CAAC,CAACM,IAAF,CAAO+H,UAAP,EAAmB,UAAC1H,CAAD,EAAIU,KAAJ,EAAc;AAChC,UAAIA,KAAK,IAAI,EAAb,EAAiB;AAChBiH,QAAAA,cAAc,CAAC7D,IAAf,CAAoBpD,KAApB;AACA;AACD,KAJD;AAKA,WAAOiH,cAAP;AACA,GARD;;AASA,OAAKzF,IAAL;AACA,CAxLD;;AA0LA7C,CAAC,CAAC0B,QAAD,CAAD,CAAY6G,KAAZ,CAAkB,YAAW;AACzBvI,EAAAA,CAAC,CAAC,iBAAD,CAAD,CAAqBM,IAArB,CAA0B,UAACK,CAAD,EAAI6H,IAAJ,EAAa;AACzC,QAAMC,eAAe,GAAG,IAAI3I,GAAG,CAACC,EAAJ,CAAOiE,aAAX,CAAyBhE,CAAC,CAACwI,IAAD,CAA1B,CAAxB;AACA,GAFE;AAGH,CAJD;;;AC1LA1I,GAAG,CAACC,EAAJ,CAAO2I,iBAAP,GAA2B,UAAUC,SAAV,EAAqB;AAAA;;AAC5C,MAAMpI,IAAI,GAAG,IAAb;AACA,MAAIqI,QAAJ;AACA,MAAIC,kBAAJ;AACA,MAAIC,uBAAJ;AACA,MAAIC,sBAAJ;AACA,MAAIC,QAAQ,GAAG,EAAf;;AACA,OAAKnG,IAAL,GAAY,YAAM;AACd,QAAI,CAAC8F,SAAL,EAAgB;AAAE;AAAS;;AAC3BC,IAAAA,QAAQ,GAAGD,SAAS,CAACM,EAAV,CAAa,CAAb,CAAX;;AACA,IAAA,KAAI,CAACC,MAAL;;AACA,IAAA,KAAI,CAACC,eAAL;;AACA,IAAA,KAAI,CAACC,UAAL;;AACA,IAAA,KAAI,CAACzE,YAAL;;AACA,QAAI0E,MAAM,CAACC,UAAP,CAAkB,6CAAlB,EAAiEC,OAArE,EAA8E;AAC1E,MAAA,KAAI,CAACC,cAAL;AACH;AACJ,GAVD;AAWA;AACJ;AACA;;;AACI,OAAKJ,UAAL,GAAkB,YAAM;AACpBpJ,IAAAA,CAAC,CAACqJ,MAAD,CAAD,CAAU/F,EAAV,CAAa,QAAb,EAAuB,YAAM;AACzB,MAAA,KAAI,CAACmG,kBAAL;AACH,KAFD;AAGH,GAJD;AAKA;AACJ;AACA;;;AACI,OAAK9E,YAAL,GAAoB,YAAM;AACtBoE,IAAAA,sBAAsB,CAACjG,IAAvB,CAA4B,cAA5B,EAA4CQ,EAA5C,CAA+C,OAA/C,EAAwD,UAAUC,CAAV,EAAa;AACjEA,MAAAA,CAAC,CAACuB,cAAF;AACA,UAAM4E,OAAO,GAAG1J,CAAC,CAACA,CAAC,CAAC,IAAD,CAAD,CAAQG,IAAR,CAAa,MAAb,CAAD,CAAjB;AACAH,MAAAA,CAAC,CAACqJ,MAAD,CAAD,CAAUM,SAAV,CAAoBD,OAAO,CAACE,MAAR,GAAiBC,GAArC;AACA/J,MAAAA,GAAG,CAACC,EAAJ,CAAOmB,OAAP,CAAe4I,SAAf,CAAyBJ,OAAzB;AACH,KALD;AAMAZ,IAAAA,uBAAuB,CAACxF,EAAxB,CAA2B,OAA3B,EAAoC,UAACC,CAAD,EAAO;AACvC,MAAA,KAAI,CAACwG,gBAAL;AACH,KAFD;AAGH,GAVD;AAWA;AACJ;AACA;AACA;;;AACI,OAAKb,MAAL,GAAc,YAAM;AAChBN,IAAAA,QAAQ,CAAC9F,IAAT,CAAc,QAAd,EAAwBxC,IAAxB,CAA6B,UAACK,CAAD,EAAIqJ,MAAJ,EAAe;AACxC,UAAMC,KAAK,GAAGjK,CAAC,CAACgK,MAAD,CAAD,CAAUE,IAAV,EAAd;;AACA,UAAMC,IAAI,GAAG,KAAI,CAACC,QAAL,CAAcH,KAAd,CAAb;;AACA,UAAMI,KAAK,GAAGrK,CAAC,CAACgK,MAAD,CAAD,CAAU7B,IAAV,CAAe,SAAf,EAA0BmC,MAA1B,CAAiC,CAAC,CAAlC,EAAqC,CAArC,CAAd;AACAtB,MAAAA,QAAQ,CAACvE,IAAT,CAAc;AAAEwF,QAAAA,KAAK,EAALA,KAAF;AAASE,QAAAA,IAAI,EAAJA,IAAT;AAAeE,QAAAA,KAAK,EAALA;AAAf,OAAd;AACArK,MAAAA,CAAC,CAACgK,MAAD,CAAD,CAAU7J,IAAV,CAAe,IAAf,EAAqBgK,IAArB;AACH,KAND;AAOH,GARD;AASA;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;;;AACI,OAAKC,QAAL,GAAgB,UAACG,MAAD,EAAY;AACxB,WAAOzK,GAAG,CAACC,EAAJ,CAAOmB,OAAP,CAAesJ,OAAf,CAAuBD,MAAvB,IAAiC,GAAjC,GAAuCzK,GAAG,CAACC,EAAJ,CAAOmB,OAAP,CAAegC,YAAf,EAA9C;AACH,GAFD;AAGA;AACJ;AACA;AACA;;;AACI,OAAKiG,eAAL,GAAuB,YAAM;AACzBN,IAAAA,kBAAkB,GAAG7I,CAAC,CAAC,QAAD,EAAW;AAC7B,eAAS;AADoB,KAAX,CAAtB;AAGA8I,IAAAA,uBAAuB,GAAG9I,CAAC,CAAC,WAAD,EAAc;AACrC,cAAQ,QAD6B;AAErC,eAAS,2BAF4B;AAGrC,cAAQ,uBAH6B;AAIrC,kBAAY,CAJyB;AAKrC,uBAAiB,OALoB;AAMrC,uBAAiB;AANoB,KAAd,CAA3B;AAQA+I,IAAAA,sBAAsB,GAAG/I,CAAC,CAAC,OAAD,EAAU;AAChC,eAAS,0BADuB;AAEhC,qBAAe,MAFiB;AAGhC,YAAM;AAH0B,KAAV,CAA1B;AAKA6I,IAAAA,kBAAkB,CAACnE,MAAnB,CAA0BoE,uBAA1B,EAAmDpE,MAAnD,CAA0DqE,sBAA1D;AACAH,IAAAA,QAAQ,CAAC6B,OAAT,CAAiB5B,kBAAjB;;AACA,IAAA,KAAI,CAAC6B,kBAAL;;AACA,IAAA,KAAI,CAACjB,kBAAL;AACH,GArBD;AAsBA;AACJ;AACA;;;AACI,OAAKiB,kBAAL,GAA0B,YAAM;AAC5B,QAAIC,UAAU,GAAG,EAAjB;AACA3K,IAAAA,CAAC,CAACM,IAAF,CAAO0I,QAAP,EAAiB,UAACrI,CAAD,EAAIqC,OAAJ,EAAgB;AAC7B2H,MAAAA,UAAU,kEAAwD3H,OAAO,CAACqH,KAAhE,wCAAiGrH,OAAO,CAACiH,KAAzG,wBAA0HjH,OAAO,CAACmH,IAAlI,gBAA2InH,OAAO,CAACiH,KAAnJ,cAAV;AACH,KAFD;AAGAlB,IAAAA,sBAAsB,CAACrE,MAAvB,CAA8BiG,UAA9B;AACA9B,IAAAA,kBAAkB,CAAC+B,IAAnB;AACH,GAPD;AAQA;AACJ;AACA;;;AACI,OAAKnB,kBAAL,GAA0B,YAAM;AAC5BZ,IAAAA,kBAAkB,CAACgC,GAAnB,CAAuB;AACnB,cAASjC,QAAQ,CAACgB,MAAT,GAAkBkB,IAAlB,GAAyBlC,QAAQ,CAACmC,UAAT,EAA1B,GAAmDlC,kBAAkB,CAACkC,UAAnB,EADxC;AAEnB,eAASnC,QAAQ,CAACmC,UAAT;AAFU,KAAvB;AAIH,GALD;;AAMA,OAAKvB,cAAL,GAAsB,YAAM;AACxBT,IAAAA,sBAAsB,CAAC5I,IAAvB,CAA4B,aAA5B,EAA2C,OAA3C;AACA2I,IAAAA,uBAAuB,CAAC3I,IAAxB,CAA6B,eAA7B,EAA8C,MAA9C;AACH,GAHD;;AAIA,OAAK6K,cAAL,GAAsB,YAAM;AACxBjC,IAAAA,sBAAsB,CAAC5I,IAAvB,CAA4B,aAA5B,EAA2C,MAA3C;AACA2I,IAAAA,uBAAuB,CAAC3I,IAAxB,CAA6B,eAA7B,EAA8C,OAA9C;AACH,GAHD;;AAIA,OAAK4J,gBAAL,GAAwB,YAAM;AAC1B,QAAIhB,sBAAsB,CAAC5I,IAAvB,CAA4B,aAA5B,MAA+C,MAAnD,EAA2D;AACvD,MAAA,KAAI,CAACqJ,cAAL;;AACA;AACH;;AACD,IAAA,KAAI,CAACwB,cAAL;AACH,GAND;;AAOA,OAAKnI,IAAL;AACH,CA9HD;;;ACAA/C,GAAG,CAACC,EAAJ,CAAOkL,QAAP,GAAkB,UAASC,MAAT,EAAiB;AAAA;;AAClC,MAAM3K,IAAI,GAAG,IAAb;;AACA,OAAKsC,IAAL,GAAY,YAAM;AACjBqI,IAAAA,MAAM,CAAC9C,QAAP,CAAgB,WAAhB,EAA6BjI,IAA7B,CAAkC,aAAlC,EAAiD,kBAAjD;;AACA,IAAA,KAAI,CAACgL,QAAL;;AACA,IAAA,KAAI,CAACxG,YAAL;AACA,GAJD;;AAKA,OAAKA,YAAL,GAAoB,YAAM;AACzBuG,IAAAA,MAAM,CAAC5H,EAAP,CAAU,cAAV,EAA0B,YAAM;AAC/B,UAAM8H,MAAM,GAAGF,MAAM,CAACjG,GAAP,EAAf;;AACA,UAAMoG,QAAQ,GAAG,KAAI,CAACC,kBAAL,CAAwBF,MAAxB,CAAjB;;AACA,MAAA,KAAI,CAACD,QAAL,CAAcE,QAAd;AACA,KAJD;AAKA,GAND;;AAOA,OAAKF,QAAL,GAAgB,YAAmB;AAAA,QAAlBE,QAAkB,uEAAP,EAAO;;AAC/B,QAAGH,MAAM,CAACK,QAAP,CAAgB,kBAAhB,EAAoCxI,MAApC,KAA+C,CAAlD,EAAqD;AACvDmI,MAAAA,MAAM,CAACzH,KAAP,CAAa,uGAAb;AACA;;AACD,QAAI+H,UAAU,GAAG,IAAjB;;AACA,QAAGH,QAAQ,IAAI,EAAf,EAAmB;AAClBG,MAAAA,UAAU,gBAASH,QAAT,CAAV;AACA;;AACDH,IAAAA,MAAM,CAACK,QAAP,CAAgB,kBAAhB,EAAoCE,WAApC,uGAAwID,UAAxI;AACA,GATD;;AAUA,OAAKF,kBAAL,GAA0B,UAACF,MAAD,EAAY;AACrC,QAAM3K,KAAK,GAAG;AACbiL,MAAAA,IAAI,EAAE,2BADO;AAEbC,MAAAA,UAAU,EAAE,mBAFC;AAGbC,MAAAA,IAAI,EAAE,kBAHO;AAIbC,MAAAA,MAAM,EAAE,kCAJK;AAKbC,MAAAA,GAAG,EAAE,+BALQ;AAMbC,MAAAA,QAAQ,EAAE;AANG,KAAd;AAQAX,IAAAA,MAAM,GAAGA,MAAM,CAACY,QAAP,GAAkBtG,OAAlB,CAA0B,OAA1B,EAAmC,EAAnC,CAAT;;AACA,QAAGjF,KAAK,CAACiL,IAAN,CAAW1K,IAAX,CAAgBoK,MAAhB,CAAH,EAA4B;AAC3B,aAAO,MAAP;AACA,KAFD,MAGK,IAAG3K,KAAK,CAACkL,UAAN,CAAiB3K,IAAjB,CAAsBoK,MAAtB,CAAH,EAAkC;AACtC,aAAO,YAAP;AACA,KAFI,MAGA,IAAG3K,KAAK,CAACmL,IAAN,CAAW5K,IAAX,CAAgBoK,MAAhB,CAAH,EAA4B;AAChC,aAAO,MAAP;AACA,KAFI,MAGA,IAAG3K,KAAK,CAACoL,MAAN,CAAa7K,IAAb,CAAkBoK,MAAlB,CAAH,EAA8B;AAClC,aAAO,QAAP;AACA,KAFI,MAGA,IAAG3K,KAAK,CAACqL,GAAN,CAAU9K,IAAV,CAAeoK,MAAf,CAAH,EAA2B;AAC/B,aAAO,KAAP;AACA,KAFI,MAGA,IAAG3K,KAAK,CAACsL,QAAN,CAAe/K,IAAf,CAAoBoK,MAApB,CAAH,EAAgC;AACpC,aAAO,UAAP;AACA;;AACD,WAAO,KAAP;AACA,GA7BD;;AA8BA,OAAKvI,IAAL;AACA,CAvDD;;;ACAA/C,GAAG,CAACC,EAAJ,CAAOkM,QAAP,GAAkB,YAAW;AAAA;;AACzB,MAAM1L,IAAI,GAAG,IAAb;AACA,MAAM2L,YAAY,GAAG,mBAArB;;AACA,OAAKrJ,IAAL,GAAY,YAAM;AACd,IAAA,KAAI,CAACsJ,WAAL;;AACA,IAAA,KAAI,CAACxH,YAAL;AACH,GAHD;;AAIA,OAAKwH,WAAL,GAAmB,YAAM;AACrBnM,IAAAA,CAAC,CAAC,uBAAD,CAAD,CAA2BM,IAA3B,CAAgC,YAAM;AAClCN,MAAAA,CAAC,CAAC,oCAAD,CAAD,CAAwCoI,QAAxC,CAAiD8D,YAAjD;AACH,KAFD;AAGAlM,IAAAA,CAAC,CAAC,0BAAD,CAAD,CAA8BM,IAA9B,CAAmC,YAAM;AACrCN,MAAAA,CAAC,CAAC,uCAAD,CAAD,CAA2CoI,QAA3C,CAAoD8D,YAApD;AACH,KAFD;AAGH,GAPD;;AAQA,OAAKvH,YAAL,GAAoB,YAAM;AACtB3E,IAAAA,CAAC,CAAC0B,QAAD,CAAD,CAAY4B,EAAZ,CAAe,QAAf,EAAyB,uBAAzB,EAAkD,YAAM;AACpDtD,MAAAA,CAAC,CAAC,oCAAD,CAAD,CAAwCoI,QAAxC,CAAiD8D,YAAjD;AACAlM,MAAAA,CAAC,CAAC,0CAAD,CAAD,CAA8CU,WAA9C,CAA0DwL,YAA1D;AACH,KAHD;AAIAlM,IAAAA,CAAC,CAAC0B,QAAD,CAAD,CAAY4B,EAAZ,CAAe,QAAf,EAAyB,0BAAzB,EAAqD,YAAM;AACvDtD,MAAAA,CAAC,CAAC,uCAAD,CAAD,CAA2CoI,QAA3C,CAAoD8D,YAApD;AACAlM,MAAAA,CAAC,CAAC,6CAAD,CAAD,CAAiDU,WAAjD,CAA6DwL,YAA7D;AACH,KAHD;AAIH,GATD;;AAUA,OAAKrJ,IAAL;AACH,CA1BD;;AA4BA7C,CAAC,CAAC0B,QAAD,CAAD,CAAY6G,KAAZ,CAAkB,YAAW;AACzB,MAAM6D,UAAU,GAAG,IAAItM,GAAG,CAACC,EAAJ,CAAOkM,QAAX,EAAnB;AACH,CAFD;;;AC5BAnM,GAAG,CAACC,EAAJ,CAAOsM,kBAAP,GAA4B,YAAW;AAAA;;AACtC,MAAM9L,IAAI,GAAG,IAAb;;AACA,OAAKsC,IAAL,GAAY,YAAM;AACjB,IAAA,KAAI,CAAC8B,YAAL;AACA,GAFD;;AAGA,OAAKA,YAAL,GAAoB,YAAM;AACzB3E,IAAAA,CAAC,CAAC0B,QAAD,CAAD,CAAY4B,EAAZ,CAAe,OAAf,EAAwB,6BAAxB,EAAuD,UAASC,CAAT,EAAY;AAClE,UAAM+I,OAAO,GAAGtM,CAAC,CAAC,IAAD,CAAD,CAAQuM,OAAR,CAAgB,sBAAhB,CAAhB;AACA,UAAMC,UAAU,GAAGF,OAAO,CAACnM,IAAR,CAAa,IAAb,CAAnB;AACAL,MAAAA,GAAG,CAACoB,OAAJ,CAAYC,YAAZ,CAAyBqL,UAAzB,EAAqC,GAArC,EAA0C,GAA1C,EAHkE,CAGlB;;AAChDF,MAAAA,OAAO,CAAC5I,MAAR;AACA,KALD;AAMA,GAPD;;AAQA,OAAKb,IAAL;AACA,CAdD;;AAgBA7C,CAAC,CAAC0B,QAAD,CAAD,CAAY6G,KAAZ,CAAkB,YAAW;AAC5BzI,EAAAA,GAAG,CAACC,EAAJ,CAAOsM,kBAAP;AACA,CAFD;;;AChBAvM,GAAG,CAACC,EAAJ,CAAO0M,QAAP,GAAkB,UAASC,SAAT,EAAoB;AAAA;;AACrC,MAAMnM,IAAI,GAAG,IAAb;AACA,MAAM+L,OAAO,GAAGI,SAAS,CAACH,OAAV,CAAkB,SAAlB,CAAhB;AACA,MAAII,MAAM,GAAG,KAAb;;AACA,OAAK9J,IAAL,GAAY,YAAM;AACjB,IAAA,KAAI,CAACuG,UAAL;AACA,GAFD;;AAGA,OAAKA,UAAL,GAAkB,YAAM;AACvBpJ,IAAAA,CAAC,CAACqJ,MAAD,CAAD,CAAU/F,EAAV,CAAa,oBAAb,EAAmC,YAAM;AACxC,UAAG,CAACgJ,OAAO,CAACvJ,MAAZ,EAAoB;AAAE;AAAS;;AAC/B,UAAM6J,cAAc,GAAGN,OAAO,CAACO,GAAR,CAAY,CAAZ,EAAeC,qBAAf,EAAvB;AACA,UAAMC,eAAe,GAAGH,cAAc,CAAC/C,GAAf,GAAqByC,OAAO,CAACU,WAAR,EAA7C;;AACA,UAAGlN,GAAG,CAACC,EAAJ,CAAOmB,OAAP,CAAe+L,EAAf,CAAkB,OAAlB,CAAH,EAA+B;AAC9B,YAAGF,eAAe,IAAI,CAAnB,IAAwBJ,MAAM,KAAK,KAAtC,EAA6C;AAC5C,UAAA,KAAI,CAACO,GAAL;AACA,SAFD,MAGK,IAAGH,eAAe,GAAG,CAAlB,IAAuBJ,MAAM,KAAK,IAArC,EAA2C;AAC/C,UAAA,KAAI,CAACQ,KAAL;AACA;AACD;AACD,KAZD;AAaA,GAdD;;AAeA,OAAKD,GAAL,GAAW,YAAM;AAChBR,IAAAA,SAAS,CAACtE,QAAV,CAAmB,uBAAnB;AACAuE,IAAAA,MAAM,GAAG,IAAT;AACA,GAHD;;AAIA,OAAKQ,KAAL,GAAa,YAAM;AAClBT,IAAAA,SAAS,CAAChM,WAAV,CAAsB,uBAAtB;AACAiM,IAAAA,MAAM,GAAG,KAAT;AACA,GAHD;;AAIA,OAAK9J,IAAL;AACA,CA/BD;;AAiCA7C,CAAC,CAAC0B,QAAD,CAAD,CAAY6G,KAAZ,CAAkB,YAAW;AAC5B,MAAM6E,UAAU,GAAGtN,GAAG,CAACC,EAAJ,CAAO0M,QAAP,CAAgBzM,CAAC,CAAC,yBAAD,CAAD,CAA6BiJ,EAA7B,CAAgC,CAAhC,CAAhB,CAAnB;AACA,CAFD;;;ACjCAnJ,GAAG,CAACC,EAAJ,CAAOsN,mBAAP,GAA6B,UAAShL,UAAT,EAAqB;AAAA;;AACjD,MAAM9B,IAAI,GAAG,IAAb;AACA,MAAM+M,KAAK,GAAGjL,UAAU,CAACS,IAAX,CAAgB,6BAAhB,CAAd;;AACA,OAAKD,IAAL,GAAY,YAAM;AACjB,IAAA,KAAI,CAAC0K,SAAL;;AACA,IAAA,KAAI,CAAC5I,YAAL;;AACA,IAAA,KAAI,CAACyE,UAAL;;AACA,IAAA,KAAI,CAACoE,iBAAL;AACA,GALD;;AAMA,OAAK7I,YAAL,GAAoB,YAAM;AACzB3E,IAAAA,CAAC,CAAC0B,QAAD,CAAD,CAAY4B,EAAZ,CAAe,OAAf,EAAwB,wCAAxB,EAAkE,UAACC,CAAD,EAAO;AACxE,UAAM2E,OAAO,GAAGlI,CAAC,CAACuD,CAAC,CAACkK,MAAH,CAAjB;;AACA,UAAGvF,OAAO,CAAC/H,IAAR,CAAa,eAAb,MAAkC,OAArC,EAA8C;AAC7C+H,QAAAA,OAAO,CAAC/H,IAAR,CAAa,eAAb,EAA8B,MAA9B;AACA;AACA;;AACD+H,MAAAA,OAAO,CAAC/H,IAAR,CAAa,eAAb,EAA8B,OAA9B;AACA;AACA,KARD;AASA,GAVD;;AAWA,OAAKiJ,UAAL,GAAkB,YAAM;AACvBpJ,IAAAA,CAAC,CAACqJ,MAAD,CAAD,CAAU/F,EAAV,CAAa,QAAb,EAAuB,YAAM;AAC5B,MAAA,KAAI,CAACkK,iBAAL;AACA,KAFD;AAGA,GAJD;;AAKA,OAAKD,SAAL,GAAiB,YAAM;AACtB,QAAMG,MAAM,GAAG5N,GAAG,CAACC,EAAJ,CAAOmB,OAAP,CAAegC,YAAf,EAAf,CADsB,CAEtB;;AACA,QAAMyK,aAAa,GAAG3N,CAAC,CAAC,OAAD,EAAU;AAChC,eAAS,qCADuB;AAEhC,+BAAkB0N,MAAlB,CAFgC;AAGhC,8CAAiCA,MAAjC;AAHgC,KAAV,CAAvB;AAKA,QAAME,qBAAqB,GAAG5N,CAAC,CAAC,WAAD,EAAc;AAC5C,eAAS,uCADmC;AAE5C,+BAAkB0N,MAAlB,YAF4C;AAG5C,cAAQ,QAHoC;AAI5C,iIAJ4C;AAK5C,0CAA6BA,MAA7B,CAL4C;AAM5C,uBAAiB;AAN2B,KAAd,CAA/B;AAQA,QAAMG,mBAAmB,GAAG7N,CAAC,CAAC,OAAD,EAAU;AACtC,eAAS;AAD6B,KAAV,CAA7B;AAGA6N,IAAAA,mBAAmB,CAACnJ,MAApB,CAA2BkJ,qBAA3B,EAAkDlJ,MAAlD,CAAyDiJ,aAAzD;AACAL,IAAAA,KAAK,CAAC5I,MAAN,CAAamJ,mBAAb;AACAxL,IAAAA,UAAU,CAAC+F,QAAX,CAAoB,cAApB;AACA,GAtBD;;AAuBA,OAAKoF,iBAAL,GAAyB,YAAM;AAC9B,QAAMG,aAAa,GAAGL,KAAK,CAACxK,IAAN,CAAW,sCAAX,CAAtB;AACA,QAAMgL,eAAe,GAAGR,KAAK,CAACxK,IAAN,CAAW,uCAAX,CAAxB,CAF8B,CAI9B;;AACAwK,IAAAA,KAAK,CAACS,QAAN,GAAiBhK,UAAjB,CAA4B,QAA5B;AACA4J,IAAAA,aAAa,CAACK,KAAd;;AACA,IAAA,KAAI,CAACC,gBAAL;;AAEA,QAAMC,cAAc,GAAGZ,KAAK,CAACa,KAAN,KAAgBL,eAAe,CAAC/C,UAAhB,CAA2B,IAA3B,CAAvC;AACA,QAAIqD,gBAAgB,GAAG,CAAvB;AACAd,IAAAA,KAAK,CAACS,QAAN,CAAe,wEAAf,EAAyFzN,IAAzF,CAA8F,UAACK,CAAD,EAAI0N,IAAJ,EAAa;AAC1G,UAAMC,KAAK,GAAGtO,CAAC,CAACqO,IAAD,CAAf;AACAD,MAAAA,gBAAgB,IAAIE,KAAK,CAACvD,UAAN,CAAiB,IAAjB,CAApB;;AACA,UAAGqD,gBAAgB,GAAGF,cAAtB,EAAsC;AACrCI,QAAAA,KAAK,CAACC,KAAN,GAAcC,QAAd,CAAuBb,aAAvB;AACAW,QAAAA,KAAK,CAACnO,IAAN,CAAW,QAAX,EAAqB,QAArB;AACA;AACD,KAPD;;AAQA,QAAGiO,gBAAgB,GAAGF,cAAtB,EAAsC;AACrC,MAAA,KAAI,CAACO,gBAAL;AACA,KAFD,MAGK;AACJ,MAAA,KAAI,CAACR,gBAAL;AACA;AACD,GAzBD;;AA0BA,OAAKQ,gBAAL,GAAwB,YAAM;AAC7BpM,IAAAA,UAAU,CAAC+F,QAAX,CAAoB,sBAApB;AACA,GAFD;;AAGA,OAAK6F,gBAAL,GAAwB,YAAM;AAC7B5L,IAAAA,UAAU,CAAC3B,WAAX,CAAuB,sBAAvB;AACA,GAFD;;AAGA,OAAKmC,IAAL;AACA,CAjFD;;;ACAA/C,GAAG,CAACC,EAAJ,CAAO2O,UAAP,GAAoB,UAAUC,MAAV,EAAkB;AAAA;;AAClC,MAAMpO,IAAI,GAAG,IAAb;;AACA,OAAKsC,IAAL,GAAY,YAAM;AACd,QAAI,KAAI,CAAC+L,YAAL,EAAJ,EAAyB;AAAE;AAAS;;AACpC,IAAA,KAAI,CAACC,YAAL;AACH,GAHD;;AAIA,OAAKA,YAAL,GAAoB,YAAM;AACtB,QAAMC,KAAK,GAAG,IAAItN,IAAJ,EAAd;AACA,QAAMuN,MAAM,GAAG,YAAf;AACA,QAAIC,OAAO,GAAGL,MAAM,CAACxO,IAAP,CAAY,KAAZ,IAAqB,IAAIqB,IAAJ,CAASmN,MAAM,CAACxO,IAAP,CAAY,KAAZ,CAAT,CAArB,GAAoD,KAAlE;AACA,QAAI8O,OAAO,GAAGN,MAAM,CAACxO,IAAP,CAAY,KAAZ,IAAqB,IAAIqB,IAAJ,CAASmN,MAAM,CAACxO,IAAP,CAAY,KAAZ,CAAT,CAArB,GAAoD,KAAlE;AACA,QAAM+O,MAAM,GAAG,IAAIC,OAAJ,CAAY;AACvBC,MAAAA,KAAK,EAAET,MAAM,CAAC9B,GAAP,CAAW,CAAX,CADgB;AAEvBkC,MAAAA,MAAM,EAAEA,MAFe;AAGvBM,MAAAA,QAAQ,EAAE,CAHa;AAIvBL,MAAAA,OAAO,EAAEA,OAJc;AAKvBC,MAAAA,OAAO,EAAEA,OALc;AAMvBK,MAAAA,KAAK,EAAE,YANgB;AAOvBvN,MAAAA,QAAQ,EAAE,aAPa;AAQvBwN,MAAAA,IAAI,EAAE;AACFC,QAAAA,aAAa,EAAE,gBADb;AAEFC,QAAAA,SAAS,EAAE,YAFT;AAGFC,QAAAA,MAAM,EAAE,CAAC,SAAD,EAAY,UAAZ,EAAwB,OAAxB,EAAiC,OAAjC,EAA0C,KAA1C,EAAiD,MAAjD,EAAyD,MAAzD,EAAiE,QAAjE,EAA2E,WAA3E,EAAwF,SAAxF,EAAmG,UAAnG,EAA+G,UAA/G,CAHN;AAIFC,QAAAA,QAAQ,EAAE,CAAC,QAAD,EAAW,QAAX,EAAqB,SAArB,EAAgC,WAAhC,EAA6C,UAA7C,EAAyD,QAAzD,EAAmE,UAAnE,CAJR;AAKFC,QAAAA,aAAa,EAAE,CAAC,GAAD,EAAM,GAAN,EAAW,GAAX,EAAgB,GAAhB,EAAqB,GAArB,EAA0B,GAA1B,EAA+B,GAA/B;AALb;AARiB,KAAZ,CAAf;AAgBAjB,IAAAA,MAAM,CAACxO,IAAP,CAAY,MAAZ,EAAoB,MAApB,EAA4BA,IAA5B,CAAiC,aAAjC,EAAgD4O,MAAhD;AACH,GAtBD;;AAuBA,OAAKH,YAAL,GAAoB,YAAM;AACtB,QAAIiB,EAAE,GAAGnO,QAAQ,CAACoO,aAAT,CAAuB,OAAvB,CAAT;AACAD,IAAAA,EAAE,CAACE,YAAH,CAAgB,MAAhB,EAAwB,MAAxB;;AACA,QAAIF,EAAE,CAACG,IAAH,KAAY,MAAhB,EAAwB;AACpB,aAAO,KAAP;AACH;;AACD,WAAO,IAAP;AACH,GAPD;;AAQA,OAAKnN,IAAL;AACH,CAtCD;;AAwCA7C,CAAC,CAAC0B,QAAD,CAAD,CAAY6G,KAAZ,CAAkB,YAAY;AAC1BvI,EAAAA,CAAC,CAAC,mBAAD,CAAD,CAAuBM,IAAvB,CAA4B,UAACK,CAAD,EAAI6D,KAAJ,EAAc;AACtC,QAAI1E,GAAG,CAACC,EAAJ,CAAO2O,UAAX,CAAsB1O,CAAC,CAACwE,KAAD,CAAvB;AACH,GAFD;AAGH,CAJD;;;ACxCA1E,GAAG,CAACC,EAAJ,CAAOkQ,YAAP,GAAsB,UAAUC,SAAV,EAAqB5N,OAArB,EAA8B;AAAA;;AACnD,MAAMC,QAAQ,GAAG;AAChB4N,IAAAA,MAAM,EAAE;AACPvK,MAAAA,GAAG,EAAE,KADE;AAEPwK,MAAAA,SAAS,EAAE,KAFJ;AAGPC,MAAAA,gBAAgB,EAAE,CAAC,YAAD,EAAe,WAAf,EAA4B,WAA5B,CAHX;AAIPC,MAAAA,aAAa,EAAE,OAJR;AAIiB;AACxBC,MAAAA,QAAQ,EAAE;AALH,KADQ;AAQhBC,IAAAA,QAAQ,EAAE;AACTC,MAAAA,OAAO,EAAE,mBAAY,CAAG,CADf;AAETC,MAAAA,OAAO,EAAE,mBAAY,CAAG;AAFf;AARM,GAAjB;AAaA,MAAM/N,QAAQ,GAAG3C,CAAC,CAAC4C,MAAF,CAAS,IAAT,EAAe,EAAf,EAAmBL,QAAnB,EAA6BD,OAA7B,CAAjB;AACA,MAAM/B,IAAI,GAAG,IAAb;AACA,MAAMoQ,SAAS,GAAG,eAAlB;AACA,MAAMC,cAAc,GAAGV,SAAS,CAACpN,IAAV,YAAmB6N,SAAnB,aAAvB;AACA,MAAME,cAAc,GAAGX,SAAS,CAACpN,IAAV,YAAmB6N,SAAnB,aAAvB;AACA,MAAIG,YAAJ;AACA,MAAIC,YAAJ;AACA,MAAIC,kBAAkB,GAAG,KAAzB;;AACA,OAAKnO,IAAL,GAAY,YAAM;AACjB,QAAG,KAAI,CAACoO,aAAL,EAAH,EAAyB;AACxBF,MAAAA,YAAY,GAAGF,cAAc,CAACxN,IAAf,EAAf;AACA2N,MAAAA,kBAAkB,GAAGJ,cAAc,CAACzQ,IAAf,CAAoB,UAApB,CAArB;AACA+P,MAAAA,SAAS,CAAC9H,QAAV,WAAsBuI,SAAtB,gBAA4CxQ,IAA5C,CAAiD,UAAjD,EAA6D,GAA7D;AACAyQ,MAAAA,cAAc,CAACzQ,IAAf,CAAoB,UAApB,EAAgC,IAAhC;;AACA,MAAA,KAAI,CAACwE,YAAL;AACA;;AAAA;AACD,GARD;;AASA,OAAKA,YAAL,GAAoB,YAAM;AACzBuL,IAAAA,SAAS,CAAC5M,EAAV,CAAa,0DAAb,EAAyE,UAACC,CAAD,EAAO;AAC/EA,MAAAA,CAAC,CAACuB,cAAF;AACAvB,MAAAA,CAAC,CAAC2N,eAAF;AACA,KAHD,EAGG5N,EAHH,CAGM,oBAHN,EAG4B,YAAM;AACjC4M,MAAAA,SAAS,CAAC9H,QAAV,WAAsBuI,SAAtB;AACA,KALD,EAKGrN,EALH,CAKM,wBALN,EAKgC,YAAM;AACrC4M,MAAAA,SAAS,CAACxP,WAAV,WAAyBiQ,SAAzB;AACA,KAPD,EAOGrN,EAPH,CAOM,MAPN,EAOc,UAACC,CAAD,EAAO;AACpB,MAAA,KAAI,CAAC4N,aAAL,CAAmB5N,CAAC,CAAC6N,aAAF,CAAgBC,YAAhB,CAA6BC,KAAhD;AACA,KATD,EASGhO,EATH,CASM,SATN,EASiB,UAACC,CAAD,EAAO;AACvB,UAAGA,CAAC,CAACsB,OAAF,IAAa,EAAb,IAAmBtB,CAAC,CAACsB,OAAF,IAAa,EAAnC,EAAuC;AAAE;AAAS;;AAClD+L,MAAAA,cAAc,CAACW,OAAf,CAAuB,OAAvB;AACA,KAZD;AAaAX,IAAAA,cAAc,CAACtN,EAAf,CAAkB,QAAlB,EAA4B,UAACC,CAAD,EAAO;AAC/B,UAAIkK,MAAM,GAAGlK,CAAC,CAACkK,MAAF,IAAYlK,CAAC,CAACiO,UAA3B;;AACA,MAAA,KAAI,CAACL,aAAL,CAAmB1D,MAAM,CAAC6D,KAA1B;AACH,KAHD;AAIA,GAlBD;AAmBA;AACD;AACA;AACA;;;AACC,OAAKL,aAAL,GAAqB,YAAM;AAC1B,QAAMQ,GAAG,GAAG/P,QAAQ,CAACoO,aAAT,CAAuB,KAAvB,CAAZ;AACA,WAAO,CAAE,eAAe2B,GAAhB,IAAyB,iBAAiBA,GAAjB,IAAwB,YAAYA,GAA9D,KAAuE,cAAcpI,MAArF,IAA+F,gBAAgBA,MAAtH;AACA,GAHD;AAIA;AACD;AACA;AACA;AACA;AACA;AACA;;;AACC,OAAK8H,aAAL,GAAqB,UAACG,KAAD,EAAW;AAC5B,QAAII,YAAY,GAAG,EAAnB;AACA,QAAIC,SAAS,GAAG,EAAhB;AACA,QAAIC,aAAa,GAAG,KAApB;AACH5R,IAAAA,CAAC,CAACM,IAAF,CAAOgR,KAAP,EAAc,UAAC3Q,CAAD,EAAIkR,IAAJ,EAAa;AACvB;AACA;AACA;AACA,UAAI,CAACb,kBAAD,IAAuBrQ,CAAC,GAAG,CAA/B,EAAkC;AAC9BiR,QAAAA,aAAa,GAAG;AAAEE,UAAAA,GAAG,EAAE,cAAP;AAAuBC,UAAAA,OAAO,EAAE;AAAhC,SAAhB;AACA;AACH;;AACD,UAAIpP,QAAQ,CAACwN,MAAT,CAAgBE,gBAAhB,IAAoCrQ,CAAC,CAACgS,OAAF,CAAUH,IAAI,CAAC7B,IAAf,EAAqBrN,QAAQ,CAACwN,MAAT,CAAgBE,gBAArC,MAA2D,CAAC,CAApG,EAAuG;AACzGuB,QAAAA,aAAa,GAAG;AAAEE,UAAAA,GAAG,EAAE,oBAAP;AAA6BC,UAAAA,OAAO,EAAE;AAAtC,SAAhB;AACM;AACH;;AACD,UAAIpP,QAAQ,CAACwN,MAAT,CAAgBG,aAAhB,IAAiCuB,IAAI,CAACI,IAAL,GAAYtP,QAAQ,CAACwN,MAAT,CAAgBG,aAAjE,EAAgF;AAClFsB,QAAAA,aAAa,GAAG;AAAEE,UAAAA,GAAG,EAAE,cAAP;AAAuBC,UAAAA,OAAO,EAAE;AAAhC,SAAhB;AACG;AACH;;AACDJ,MAAAA,SAAS,CAAClN,IAAV,CAAeoN,IAAI,CAACzQ,IAApB;AACAsQ,MAAAA,YAAY,CAACjN,IAAb,CAAkBoN,IAAlB;AACA,KAlBD;;AAmBA,QAAID,aAAa,IAAIjP,QAAQ,CAAC6N,QAA1B,IAAsC7N,QAAQ,CAAC6N,QAAT,CAAkBE,OAA5D,EAAqE;AACjE,UAAIwB,IAAI,GAAGvP,QAAQ,CAAC6N,QAAT,CAAkBE,OAA7B;AACAwB,MAAAA,IAAI,CAACC,IAAL,CAAU,KAAV,EAAgBP,aAAa,CAACE,GAA9B,EAAmCF,aAAa,CAACG,OAAjD;AACH,KAHD,MAIK;AAED,UAAIpP,QAAQ,CAAC6N,QAAT,IAAqB7N,QAAQ,CAAC6N,QAAT,CAAkB4B,iBAA3C,EAA8D;AAC1D,YAAIF,KAAI,GAAGvP,QAAQ,CAAC6N,QAAT,CAAkB4B,iBAA7B;;AACAF,QAAAA,KAAI,CAACC,IAAL,CAAU,KAAV;AAEH;AACJ;;AAED,IAAA,KAAI,CAACE,WAAL,CAAiBV,SAAS,CAAC1Q,IAAV,CAAe,IAAf,CAAjB;;AACM,IAAA,KAAI,CAACqR,WAAL,CAAiBZ,YAAjB;AACN,GAtCD;AAuCA;AACD;AACA;AACA;;;AACI,OAAKW,WAAL,GAAmB,UAACE,QAAD,EAAc;AAC7B,QAAI,OAAOA,QAAP,IAAmB,WAAnB,IAAkCA,QAAQ,IAAI,EAAlD,EAAsD;AAClD1B,MAAAA,cAAc,CAACxN,IAAf,iBAA6BkP,QAA7B;AACTrC,MAAAA,SAAS,CAAC9H,QAAV,WAAsBuI,SAAtB;AACA,KAHK,MAID;AACJE,MAAAA,cAAc,CAACxN,IAAf,CAAoB0N,YAApB;AACAb,MAAAA,SAAS,CAACxP,WAAV,WAAyBiQ,SAAzB;AACA;;AAAA;AACD,GATE;AAUH;AACD;AACA;AACA;;;AACI,OAAK2B,WAAL,GAAmB,UAACE,QAAD,EAAc;AACnC,QAAI7P,QAAQ,CAACwN,MAAT,CAAgBvK,GAAhB,IAAuB4M,QAAQ,CAACzP,MAAT,GAAkB,CAA7C,EAAgD;AAC/C,UAAI0P,QAAQ,GAAG,IAAIC,QAAJ,EAAf;AACA,UAAItC,SAAS,GAAGQ,cAAc,CAACzQ,IAAf,CAAoB,MAApB,CAAhB;;AACA,UAAIwC,QAAQ,CAACwN,MAAT,CAAgBC,SAApB,EAA+B;AAC9BA,QAAAA,SAAS,GAAGzN,QAAQ,CAACwN,MAAT,CAAgBC,SAA5B;AACA;;AACDpQ,MAAAA,CAAC,CAACM,IAAF,CAAOqC,QAAQ,CAACwN,MAAT,CAAgBI,QAAvB,EAAiC,UAAC5P,CAAD,EAAI6F,GAAJ,EAAY;AACzCiM,QAAAA,QAAQ,CAAC/N,MAAT,CAAgB8B,GAAG,CAACsL,GAApB,EAAyBtL,GAAG,CAACnF,KAA7B;AACH,OAFD;;AAGA,WAAK,IAAIV,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG6R,QAAQ,CAACzP,MAA7B,EAAqCpC,CAAC,EAAtC,EAA0C;AACzC8R,QAAAA,QAAQ,CAAC/N,MAAT,CAAgB0L,SAAhB,EAA2BoC,QAAQ,CAAC7R,CAAD,CAAnC;AACA;;AAAA,OAX8C,CAYtC;AACT;AACA;AACA;;AACAX,MAAAA,CAAC,CAAC2F,IAAF,CAAO;AACNC,QAAAA,GAAG,EAAEjD,QAAQ,CAACwN,MAAT,CAAgBvK,GADf;AAENC,QAAAA,MAAM,EAAE,MAFF;AAGN8M,QAAAA,QAAQ,EAAE,MAHJ;AAIN7M,QAAAA,IAAI,EAAE2M,QAJA;AAKNG,QAAAA,KAAK,EAAE,KALD;AAMNC,QAAAA,WAAW,EAAE,KANP;AAONC,QAAAA,WAAW,EAAE;AAPP,OAAP,EAQG9M,IARH,CAQQ,UAACF,IAAD,EAAOiB,UAAP,EAAmBD,KAAnB,EAA6B;AACpC;AACA,YAAInE,QAAQ,CAAC6N,QAAT,IAAqB7N,QAAQ,CAAC6N,QAAT,CAAkBC,OAA3C,EAAoD;AACnD,cAAIyB,IAAI,GAAGvP,QAAQ,CAAC6N,QAAT,CAAkBC,OAA7B;AACAyB,UAAAA,IAAI,CAACC,IAAL,CAAU,KAAV,EAAgBrM,IAAhB,EAAsBiB,UAAtB,EAAkCD,KAAlC;AACA;AACD,OAdD,EAcGD,IAdH,CAcQ,UAACC,KAAD,EAAQC,UAAR,EAAoBC,WAApB,EAAoC;AAC3C;AACA,YAAIrE,QAAQ,CAAC6N,QAAT,IAAqB7N,QAAQ,CAAC6N,QAAT,CAAkBE,OAA3C,EAAoD;AACnD,cAAIwB,IAAI,GAAGvP,QAAQ,CAAC6N,QAAT,CAAkBE,OAA7B;AACAwB,UAAAA,IAAI,CAACC,IAAL,CAAU,KAAV,EAAgBpL,UAAhB,EAA4BC,WAA5B;AACA;AACD,OApBD;AAqBA;AACD,GAvCE;;AAwCH,OAAKnE,IAAL;AACA,CAnKD;;;ACAA/C,GAAG,CAACC,EAAJ,CAAOgT,IAAP,GAAc,UAAUC,KAAV,EAAiC;AAAA;;AAAA,MAAhBC,OAAgB,uEAAN,IAAM;AAC3C,MAAM1S,IAAI,GAAG,IAAb;;AACA,OAAKsC,IAAL,GAAY,YAAM;AACd,IAAA,KAAI,CAAC8B,YAAL;AACH,GAFD;;AAGA,OAAKA,YAAL,GAAoB,YAAM;AACtBqO,IAAAA,KAAK,CAAC1P,EAAN,CAAS,QAAT,EAAmB,UAACC,CAAD,EAAO;AACtByP,MAAAA,KAAK,CAAClQ,IAAN,CAAW,iBAAX,EAA8BqF,IAA9B,CAAmC,UAAnC,EAA+C,IAA/C,EAAqDC,QAArD,CAA8D,iBAA9D;;AACA,UAAI6K,OAAJ,EAAa;AACTC,QAAAA,UAAU,CAAC,YAAM;AACbF,UAAAA,KAAK,CAAClQ,IAAN,CAAW,iBAAX,EAA8BqF,IAA9B,CAAmC,UAAnC,EAA+C,KAA/C,EAAsDzH,WAAtD,CAAkE,iBAAlE;AACH,SAFS,EAEPuS,OAAO,GAAG,IAFH,CAAV;AAGH;AACJ,KAPD;AAQH,GATD;;AAUA,OAAKpQ,IAAL;AACH,CAhBD;;;ACAA/C,GAAG,CAACC,EAAJ,CAAOoT,SAAP,GAAmB,UAASxE,MAAT,EAAiB;AAAA;;AACnC,MAAMpO,IAAI,GAAG,IAAb;;AACA,OAAKsC,IAAL,GAAY,YAAM;AACjB,IAAA,KAAI,CAAC0K,SAAL;AACA,GAFD;;AAGA,OAAKA,SAAL,GAAiB,YAAM;AACtB,QAAG,CAAC,aAAD,IAAkB6F,SAArB,EAAgC;AAAE;AAAS,KADrB,CACsB;;;AAC5C,QAAMC,gBAAgB,GAAGrT,CAAC,CAAC,WAAD,EAAc;AACvC,cAAQ,QAD+B;AAEvC,eAAS,gCAF8B;AAGvC,cAAQ,oEAH+B;AAIvC,oBAAc,gCAJyB;AAKvC,eAAS;AAL8B,KAAd,CAAD,CAMtBsD,EANsB,CAMnB,OANmB,EAMV,UAACC,CAAD,EAAO;AAClB,UAAI+P,YAAY,CAACC,OAAb,CAAqB,UAArB,CAAJ,EAAsC;AAClC,QAAA,KAAI,CAACC,aAAL,CAAmBF,YAAY,CAACC,OAAb,CAAqB,UAArB,CAAnB;AACH,OAFD,MAGE,IAAIH,SAAS,CAACK,WAAd,EAA2B;AAC5BL,QAAAA,SAAS,CAACK,WAAV,CAAsBC,kBAAtB,CAAyC,UAAC3R,QAAD,EAAc;AACnD,UAAA,KAAI,CAACyR,aAAL,CAAmB1T,GAAG,CAACoB,OAAJ,CAAYY,gBAAZ,CAA6BC,QAA7B,CAAnB;AACH,SAFD;AAGH;AACD,KAfwB,CAAzB;AAgBA4M,IAAAA,MAAM,CAAClL,KAAP,CAAa4P,gBAAb;AACA,GAnBD;;AAoBA,OAAKG,aAAL,GAAqB,UAACxR,MAAD,EAAY;AAC7B2M,IAAAA,MAAM,CAAC1J,GAAP,CAAWjD,MAAX;AACAsR,IAAAA,YAAY,CAACK,OAAb,CAAqB,UAArB,EAAiC3R,MAAjC;AACH,GAHD;;AAIA,OAAKa,IAAL;AACA,CA9BD;;AAgCA7C,CAAC,CAAC0B,QAAD,CAAD,CAAY6G,KAAZ,CAAkB,YAAW;AAC5B,MAAMqL,WAAW,GAAG,IAAI9T,GAAG,CAACC,EAAJ,CAAOoT,SAAX,CAAqBnT,CAAC,CAAC,kBAAD,CAAtB,CAApB;AACA,CAFD;;;AChCAF,GAAG,CAACC,EAAJ,CAAO8T,UAAP,GAAoB,YAAW;AAAA;;AAC9B,MAAMtT,IAAI,GAAG,IAAb;AACA,MAAIuT,SAAS,GAAG,KAAhB;AACA,MAAIC,GAAJ;;AACA,OAAKlR,IAAL,GAAY,YAAM;AACd,QAAG,CAAC7C,CAAC,CAAC,YAAD,CAAD,CAAgB+C,MAAjB,IAA2B,OAAOiR,MAAM,CAACC,mBAAd,IAAqC,WAAnE,EAAgF;AAAE;AAAS;;AAC9F,IAAA,KAAI,CAACC,OAAL;AACA,GAHD;AAIA;AACD;AACA;AACA;AACA;;;AACC,OAAKA,OAAL,GAAe,YAAM;AACpB,QAAGJ,SAAH,EAAc;AACb,MAAA,KAAI,CAACK,WAAL;;AACA;AACA;;AACDnU,IAAAA,CAAC,CAACoU,IAAF,CACCpU,CAAC,CAACqU,SAAF,qDAAyDL,MAAM,CAACC,mBAAhE,EADD,EAECjU,CAAC,CAACsU,QAAF,CAAW,UAACC,QAAD,EAAc;AACxBvU,MAAAA,CAAC,CAACuU,QAAQ,CAACC,OAAV,CAAD;AACA,KAFD,CAFD,EAKExO,IALF,CAKO,YAAM;AACZ8N,MAAAA,SAAS,GAAG,IAAZ;;AACA,MAAA,KAAI,CAACK,WAAL;AACA,KARD;AASA,GAdD;AAeA;AACD;AACA;AACA;;;AACC,OAAKA,WAAL,GAAmB,YAAM;AACxBnU,IAAAA,CAAC,CAAC,YAAD,CAAD,CAAgBM,IAAhB,CAAqB,UAACK,CAAD,EAAI8T,SAAJ,EAAkB;AACtC,MAAA,KAAI,CAACC,OAAL,CAAaD,SAAb;AACA,KAFD;AAGA,GAJD;AAKA;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACC,OAAKC,OAAL,GAAe,UAACC,MAAD,EAAwC;AAAA,QAA/BC,GAA+B,uEAAzB,CAAyB;AAAA,QAAtBC,GAAsB,uEAAhB,CAAgB;AAAA,QAAbC,IAAa,uEAAN,CAAM;AACtD,QAAMC,OAAO,GAAG/U,CAAC,CAAC2U,MAAD,CAAD,CAAUxU,IAAV,CAAe,UAAf,EAA2BU,KAA3B,CAAiC,GAAjC,CAAhB;;AACA,QAAGkU,OAAO,CAAC,CAAD,CAAP,IAAcA,OAAO,CAAC,CAAD,CAAxB,EAA6B;AAAEH,MAAAA,GAAG,GAAGI,MAAM,CAACD,OAAO,CAAC,CAAD,CAAR,CAAZ;AAA0BF,MAAAA,GAAG,GAAGG,MAAM,CAACD,OAAO,CAAC,CAAD,CAAR,CAAZ;AAA2B;;AACpF,QAAGA,OAAO,CAAC,CAAD,CAAV,EAAe;AAAED,MAAAA,IAAI,GAAGrO,QAAQ,CAACsO,OAAO,CAAC,CAAD,CAAR,CAAf;AAA8B;;AAC/ChB,IAAAA,GAAG,GAAG,IAAIkB,MAAM,CAACC,IAAP,CAAYC,GAAhB,CAAoBR,MAApB,EAA4B;AACjCS,MAAAA,MAAM,EAAE;AAAER,QAAAA,GAAG,EAAEA,GAAP;AAAYC,QAAAA,GAAG,EAAEA;AAAjB,OADyB;AAEjCC,MAAAA,IAAI,EAAEA,IAF2B;AAGjCO,MAAAA,gBAAgB,EAAE;AAHe,KAA5B,CAAN;AAKA,QAAMC,MAAM,GAAG,IAAIL,MAAM,CAACC,IAAP,CAAYK,MAAhB,CAAuB;AACrCxB,MAAAA,GAAG,EAAEA,GADgC;AAErChS,MAAAA,QAAQ,EAAE;AAAE6S,QAAAA,GAAG,EAAEA,GAAP;AAAYC,QAAAA,GAAG,EAAEA;AAAjB;AAF2B,KAAvB,CAAf;AAIAS,IAAAA,MAAM,CAACE,WAAP,CAAmB,OAAnB,EAA4B,YAAM;AACjCnM,MAAAA,MAAM,CAACoM,IAAP,6CAAiDb,GAAjD,cAAwDC,GAAxD;AACA,KAFD;AAGA,GAhBD;;AAiBA,OAAKhS,IAAL;AACA,CAjED;;AAmEA7C,CAAC,CAAC0B,QAAD,CAAD,CAAY6G,KAAZ,CAAkB,YAAW;AAC5B,MAAMmN,YAAY,GAAG5V,GAAG,CAACC,EAAJ,CAAO8T,UAAP,EAArB;AACA,CAFD;;;ACnEA/T,GAAG,CAACC,EAAJ,CAAO4V,WAAP,GAAqB,YAAW;AAC/B,MAAMpV,IAAI,GAAG,IAAb;;AACA,OAAKsC,IAAL,GAAY,YAAM;AACjB7C,IAAAA,CAAC,CAAC,eAAD,CAAD,CAAmB4V,OAAnB,CAA2B;AAC1BC,MAAAA,YAAY,EAAE,mBADY;AAE1BC,MAAAA,MAAM,EAAE,EAFkB;AAG1BC,MAAAA,eAAe,EAAE,IAHS;AAI1BC,MAAAA,kBAAkB,EAAE;AAJM,KAA3B;AAMA,GAPD;;AAQA,OAAKnT,IAAL;AACA,CAXD;;AAaA7C,CAAC,CAAC0B,QAAD,CAAD,CAAY6G,KAAZ,CAAkB,YAAW;AAC5B,MAAM0N,aAAa,GAAGnW,GAAG,CAACC,EAAJ,CAAO4V,WAAP,EAAtB;AACA,CAFD;;;ACbA7V,GAAG,CAACC,EAAJ,CAAOmW,QAAP,GAAkB,UAAStQ,GAAT,EAAc;AAC5B,MAAIuQ,SAAS,GAAG,KAAhB;AAEAnW,EAAAA,CAAC,CAAC,WAAD,CAAD,CAAesD,EAAf,CAAkB,OAAlB,EAA2B,UAASC,CAAT,EAAY;AACnC,QAAI2E,OAAO,GAAGlI,CAAC,CAAC,IAAD,CAAf;AACAkI,IAAAA,OAAO,CAACC,IAAR,CAAa,UAAb,EAAyB,IAAzB,EAA+BC,QAA/B,CAAwC,iBAAxC,EAFmC,CAInC;;AACA,QAAI,CAAC+N,SAAL,EAAgB;AACZA,MAAAA,SAAS,GAAG,IAAZ,CADY,CAGZ;;AACAnW,MAAAA,CAAC,CAAC2F,IAAF,CAAO;AACHC,QAAAA,GAAG,EAAEA,GADF;AAEHC,QAAAA,MAAM,EAAE,MAFL;AAGHC,QAAAA,IAAI,EAAE;AAAEsQ,UAAAA,SAAS,EAAElO,OAAO,CAAC/H,IAAR,CAAa,SAAb;AAAb,SAHH;AAIHyS,QAAAA,KAAK,EAAE;AAJJ,OAAP,EAKG5M,IALH,CAKQ,UAAUF,IAAV,EAAgB;AACpB;AACAqQ,QAAAA,SAAS,GAAG,KAAZ,CAFoB,CAIpB;;AACA,YAAIrQ,IAAI,IAAIuQ,SAAZ,EAAuB;AAEnB;AACA,cAAIC,QAAQ,uaAAZ,CAHmB,CAYnB;;AACA,cAAIxQ,IAAI,CAACyQ,eAAL,IAAwBF,SAAxB,IAAqCvQ,IAAI,CAACyQ,eAAL,IAAwB,IAA7D,IAAqEzQ,IAAI,CAACyQ,eAAL,CAAqBxT,MAArB,GAA8B,CAAvG,EAA0G;AAEtG;AACA/C,YAAAA,CAAC,CAACM,IAAF,CAAOwF,IAAI,CAACyQ,eAAZ,EAA6B,UAAU5V,CAAV,EAAa6F,GAAb,EAAkB;AAC3C8P,cAAAA,QAAQ,gEACU9P,GAAG,CAACgQ,WADd,uGAE4ChQ,GAAG,CAACiQ,WAAJ,CAAgBC,OAAhB,CAAwB,CAAxB,CAF5C,qDAAR;AAIH,aALD;AAMH,WATD,MAUK;AACD;AACAJ,YAAAA,QAAQ,oDAAR;AACH,WA1BkB,CA4BnB;;;AACAA,UAAAA,QAAQ,6PAI4CxQ,IAAI,CAAC2Q,WAAL,CAAiBC,OAAjB,CAAyB,CAAzB,CAJ5C,4PAQ4C5Q,IAAI,CAAC6Q,UAAL,CAAgBD,OAAhB,CAAwB,CAAxB,CAR5C,wPAY4C5Q,IAAI,CAAC8Q,aAAL,CAAmBF,OAAnB,CAA2B,CAA3B,CAZ5C,qHAAR,CA7BmB,CA8CnB;;AACAxO,UAAAA,OAAO,CAAC7E,IAAR,CAAa,GAAb,EA/CmB,CAiDnB;;AACA6E,UAAAA,OAAO,CAACqE,OAAR,CAAgB,8BAAhB,EAAgDzJ,IAAhD,CAAqD,+BAArD,EAAsFiB,UAAtF,CAAiG,QAAjG,EAA2G0G,OAA3G,CAAmH6L,QAAnH;AACApO,UAAAA,OAAO,CAACE,QAAR,CAAiB,gCAAjB,EAnDmB,CAqDnB;;AACAF,UAAAA,OAAO,CAACqE,OAAR,CAAgB,8BAAhB,EAAgDzJ,IAAhD,CAAqD,2BAArD,EAAkF+T,KAAlF,CAAwF,YAAY;AAChG3O,YAAAA,OAAO,CAACqE,OAAR,CAAgB,8BAAhB,EAAgDzJ,IAAhD,CAAqD,+BAArD,EAAsFgU,WAAtF,CAAkG,GAAlG;AACA5O,YAAAA,OAAO,CAAC7E,IAAR,MAAkB,GAAlB,GAAwB6E,OAAO,CAAC7E,IAAR,CAAa,GAAb,CAAxB,GAA4C6E,OAAO,CAAC7E,IAAR,CAAa,GAAb,CAA5C,CAFgG,CAGhG;AACA;AACH,WALD;AAMH;AACJ,OAvED,EAuEGwD,IAvEH,CAuEQ,UAAUC,KAAV,EAAiBC,UAAjB,EAA6BC,WAA7B,EAA0C;AAC9C;AACAkB,QAAAA,OAAO,CAACC,IAAR,CAAa,UAAb,EAAyB,KAAzB,EAAgC9E,IAAhC,CAAqC,OAArC;AACH,OA1ED,EA0EG4D,MA1EH,CA0EU,YAAW;AACjBiB,QAAAA,OAAO,CAACxH,WAAR,CAAoB,iBAApB;AACH,OA5ED;AA6EH;AACJ,GAvFD;AAwFH,CA3FD;;;ACAAZ,GAAG,CAACC,EAAJ,CAAOmB,OAAP,GAAiB;AAChB;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACI6V,EAAAA,SAAS,EAAE,qBAAM;AACb/W,IAAAA,CAAC,CAAC0B,QAAD,CAAD,CAAY6G,KAAZ,CAAkB,YAAM;AACpBvI,MAAAA,CAAC,CAAC2F,IAAF,CAAO;AACHC,QAAAA,GAAG,EAAEoO,MAAM,CAACgD,WADT;AAEHrE,QAAAA,QAAQ,EAAE;AAFP,OAAP,EAGG3M,IAHH,CAGQ,UAACF,IAAD,EAAU;AACd,YAAMzD,UAAU,GAAGrC,CAAC,CAAC,QAAD,CAAD,CAAY6K,GAAZ,CAAgB;AAAE,qBAAW;AAAb,SAAhB,EAAuCnG,MAAvC,CAA8CoB,IAA9C,CAAnB;AACA9F,QAAAA,CAAC,CAAC,MAAD,CAAD,CAAU0E,MAAV,CAAiBrC,UAAjB;AACH,OAND;AAOH,KARD;AASH,GArBY;AAsBb4U,EAAAA,iBAAiB,EAAE,6BAAM;AACrB,QAAMC,SAAS,GAAG,CAAC,gBAAD,CAAlB;;AACA,QAAI,CAACC,SAAS,CAACC,SAAf,EAA0B;AACtBpX,MAAAA,CAAC,CAACM,IAAF,CAAO4W,SAAP,EAAkB,UAACvW,CAAD,EAAI0W,QAAJ,EAAiB;AAC/B,YAAMhV,UAAU,GAAGrC,CAAC,CAACqX,QAAD,CAApB;AACA,YAAMC,MAAM,GAAGjV,UAAU,CAACS,IAAX,CAAgB,KAAhB,EAAuBqF,IAAvB,CAA4B,KAA5B,CAAf;;AACA,YAAImP,MAAJ,EAAY;AACRjV,UAAAA,UAAU,CAACwI,GAAX,CAAe;AACX,8CAA2ByM,MAA3B;AADW,WAAf,EAEGlP,QAFH,CAEY,qBAFZ;AAGH;;AAAA;AACJ,OARD;AASH;;AAAA;AACJ,GAnCY;AAoCbmP,EAAAA,OAAO,EAAE,mBAAM;AACX,QAAMC,OAAO,GAAG,CACZ,iCADY,EAEZ,4BAFY,EAGZ,qCAHY,EAIZ,6BAJY,CAAhB;AAMAxX,IAAAA,CAAC,CAACM,IAAF,CAAOkX,OAAP,EAAgB,UAAC7W,CAAD,EAAI8M,MAAJ,EAAe;AAC3BzN,MAAAA,CAAC,CAACyN,MAAD,CAAD,CAAUgK,MAAV,GAAmBC,OAAnB;AACH,KAFD;AAGH,GA9CY;AA+CbC,EAAAA,gBAAgB,EAAE,4BAAM;AACpB3X,IAAAA,CAAC,CAAC0B,QAAD,CAAD,CAAY4B,EAAZ,CAAe,OAAf,EAAwB,WAAxB,EAAqC,YAAY;AAC7C,UAAMoG,OAAO,GAAG1J,CAAC,CAACA,CAAC,CAAC,IAAD,CAAD,CAAQG,IAAR,CAAa,MAAb,CAAD,CAAjB;AACAL,MAAAA,GAAG,CAACC,EAAJ,CAAOmB,OAAP,CAAe4I,SAAf,CAAyBJ,OAAzB;AACH,KAHD;AAIH,GApDY;AAqDbuD,EAAAA,EAAE,EAAE,YAAU2K,EAAV,EAAc;AACd,QAAMC,WAAW,GAAG;AAChB,YAAM,aADU;AAEhB,aAAO,oCAFS;AAGhB,aAAO,oCAHS;AAIhB,cAAQ,oCAJQ;AAKhB,cAAQ,oCALQ;AAMhB,eAAS,oCANO;AAOhB,eAAS,oCAPO;AAQhB,gBAAU,qCARM;AAShB,gBAAU,qCATM;AAUhB,iBAAW,qCAVK;AAWhB,iBAAW,qCAXK;AAYhB,kBAAY,qCAZI;AAahB,kBAAY,qCAbI;AAchB,YAAM;AAdU,KAApB;AAgBA,WAAOxO,MAAM,CAACC,UAAP,CAAkBuO,WAAW,CAACD,EAAD,CAA7B,EAAmCrO,OAA1C;AACH,GAvEY;AAwEbrG,EAAAA,YAAY,EAAE,wBAAY;AACtB,WAAO4U,IAAI,CAACC,MAAL,GAAc/L,QAAd,CAAuB,EAAvB,EAA2BgM,SAA3B,CAAqC,CAArC,CAAP;AACH,GA1EY;AA2EbxN,EAAAA,OAAO,EAAE,iBAAUD,MAAV,EAAkB;AACvB,WAAOA,MAAM,CAAC0N,WAAP,GAAqBvS,OAArB,CAA6B,KAA7B,EAAoC,GAApC,CAAP;AACH,GA7EY;AA8EbpB,EAAAA,WAAW,EAAE,qBAAU4T,KAAV,EAAiB;AAC1B,WAAOA,KAAK,CAACpX,MAAN,CAAa,YAAY;AAAE,aAAOd,CAAC,CAAC,IAAD,CAAD,CAAQiF,GAAR,EAAP;AAAuB,KAAlD,EAAoDlC,MAApD,GAA6D,CAApE;AACH,GAhFY;AAiFb+G,EAAAA,SAAS,EAAE,mBAAUqO,QAAV,EAAoBC,QAApB,EAA8B;AACrCA,IAAAA,QAAQ,GAAG,OAAOA,QAAP,KAAoB,WAApB,GAAkCA,QAAlC,GAA6C,KAAxD;;AACA,QAAIA,QAAJ,EAAc;AACVD,MAAAA,QAAQ,CAACrV,IAAT,CAAc,uCAAd,EAAuDmG,EAAvD,CAA0D,CAA1D,EAA6DsI,OAA7D,CAAqE,OAArE;AACH,KAFD,MAGK;AACD4G,MAAAA,QAAQ,CAAChY,IAAT,CAAc,UAAd,EAA0B,GAA1B,EAA+BmD,EAA/B,CAAkC,OAAlC,EAA2C,YAAM;AAC7C6U,QAAAA,QAAQ,CAACtN,GAAT,CAAa;AAAE,qBAAW;AAAb,SAAb;AACH,OAFD,EAEGvH,EAFH,CAEM,MAFN,EAEc,YAAM;AAChB6U,QAAAA,QAAQ,CAACpU,UAAT,CAAoB,UAApB,EAAgC8G,GAAhC,CAAoC;AAAE,qBAAW;AAAb,SAApC;AACH,OAJD,EAIG0G,OAJH,CAIW,OAJX;AAKH;AACJ,GA7FY;AA8Fb8G,EAAAA,SAAS,EAAE,mBAAUF,QAAV,EAAoBG,SAApB,EAA+B;AACtCxY,IAAAA,GAAG,CAACC,EAAJ,CAAOmB,OAAP,CAAeqX,YAAf,CAA4BJ,QAA5B,EAAsCG,SAAtC,EADsC,CACY;AAClD;;AACA,QAAME,kBAAkB,GAAGL,QAAQ,CAACrV,IAAT,CAAc,uCAAd,CAA3B;AACA,QAAM2V,cAAc,GAAGD,kBAAkB,CAAC7U,KAAnB,GAA2BkJ,GAA3B,CAA+B,CAA/B,CAAvB;AACA,QAAM6L,aAAa,GAAGF,kBAAkB,CAACG,IAAnB,GAA0B9L,GAA1B,CAA8B,CAA9B,CAAtB;AACAsL,IAAAA,QAAQ,CAAC7U,EAAT,mBAAuBgV,SAAvB,GAAoC,UAAC/U,CAAD,EAAO;AACvC,UAAIA,CAAC,CAACqV,KAAF,KAAY,CAAhB,EAAmB;AAAE;AAAS;;AAC9B,UAAIrV,CAAC,CAACsV,QAAN,EAAgB;AACZ,YAAInX,QAAQ,CAACoX,aAAT,KAA2BL,cAA/B,EAA+C;AAC3CC,UAAAA,aAAa,CAACK,KAAd;AACAxV,UAAAA,CAAC,CAACuB,cAAF;AACH;AACJ,OALD,MAMK;AACD,YAAIpD,QAAQ,CAACoX,aAAT,KAA2BJ,aAA/B,EAA8C;AAC1CD,UAAAA,cAAc,CAACM,KAAf;AACAxV,UAAAA,CAAC,CAACuB,cAAF;AACH;AACJ;;AAAA;AACJ,KAdD;AAeH,GAnHY;AAoHbyT,EAAAA,YAAY,EAAE,sBAAUJ,QAAV,EAAoBG,SAApB,EAA+B;AACzCH,IAAAA,QAAQ,CAACa,GAAT,mBAAwBV,SAAxB;AACH,GAtHY;AAuHbW,EAAAA,aAAa,EAAE,uBAAUX,SAAV,EAAqB;AAChC,QAAItY,CAAC,CAAC,UAAD,CAAD,CAAc+C,MAAd,GAAuB,CAA3B,EAA8B;AAAE;AAAS;;AACzC,QAAMmW,QAAQ,GAAGlZ,CAAC,CAAC,QAAD,EAAW;AACzB,eAAS,SADgB;AAEzB,sBAAgBsY;AAFS,KAAX,CAAlB;AAIAtY,IAAAA,CAAC,CAAC,MAAD,CAAD,CAAU0E,MAAV,CAAiBwU,QAAjB;AACH,GA9HY;AA+HbC,EAAAA,cAAc,EAAE,wBAAUb,SAAV,EAAqB;AACjCtY,IAAAA,CAAC,0BAAmBsY,SAAnB,QAAD,CAAmC5U,MAAnC;AACH,GAjIY;AAkIb0V,EAAAA,0BAA0B,EAAE,oCAAUC,IAAV,EAAgC;AAAA,QAAhBpG,OAAgB,uEAAN,IAAM;AACxDjT,IAAAA,CAAC,CAACqZ,IAAD,CAAD,CAAQlZ,IAAR,CAAa,UAAb,EAAyB,UAAzB,EAAqCiI,QAArC,CAA8C,iBAA9C;;AACA,QAAI6K,OAAJ,EAAa;AACTC,MAAAA,UAAU,CAAC,YAAM;AACblT,QAAAA,CAAC,CAACqZ,IAAD,CAAD,CAAQtV,UAAR,CAAmB,UAAnB,EAA+BrD,WAA/B,CAA2C,iBAA3C;AACH,OAFS,EAEPuS,OAAO,GAAG,IAFH,CAAV;AAGH;AACJ,GAzIY;AA0IbqG,EAAAA,eAAe,EAAE,yBAAUD,IAAV,EAAgB;AAC7B;AACAA,IAAAA,IAAI,CAACE,OAAL,GAAe,UAAUC,KAAV,EAAiB;AAC5BA,MAAAA,KAAK,CAAC1U,cAAN;AACH,KAFD;AAGH,GA/IY;AAgJb2U,EAAAA,eAAe,EAAE,2BAAW;AACxB,QAAI,CAACtC,SAAS,CAACuC,OAAf,EAAwB;AACpB1Z,MAAAA,CAAC,CAAC0B,QAAD,CAAD,CAAY4B,EAAZ,CAAe,OAAf,EAAwB,iBAAxB,EAA2C,UAACC,CAAD,EAAO;AAC9C,YAAMoW,OAAO,GAAG3Z,CAAC,CAACuD,CAAC,CAACkK,MAAH,CAAD,CAAYgK,MAAZ,EAAhB;;AACA,YAAG,OAAOkC,OAAO,CAACxZ,IAAR,CAAa,MAAb,CAAP,KAAgC,WAAnC,EAAgD;AAC5CwZ,UAAAA,OAAO,CAACxZ,IAAR,CAAa,MAAb,EAAqB,MAArB;AACH,SAFD,MAGK;AACDwZ,UAAAA,OAAO,CAAC5V,UAAR,CAAmB,MAAnB;AACH;AACJ,OARD;AASH;AACJ;AA5JY,CAAjB;AA+JA/D,CAAC,CAAC0B,QAAD,CAAD,CAAY6G,KAAZ,CAAkB,YAAY;AAC1BzI,EAAAA,GAAG,CAACC,EAAJ,CAAOmB,OAAP,CAAe6V,SAAf;AACAjX,EAAAA,GAAG,CAACC,EAAJ,CAAOmB,OAAP,CAAeqW,OAAf;AACAzX,EAAAA,GAAG,CAACC,EAAJ,CAAOmB,OAAP,CAAe+V,iBAAf;AACAnX,EAAAA,GAAG,CAACC,EAAJ,CAAOmB,OAAP,CAAeyW,gBAAf;AACA7X,EAAAA,GAAG,CAACC,EAAJ,CAAOmB,OAAP,CAAeuY,eAAf;AACH,CAND;;;AC/JA3Z,GAAG,CAACC,EAAJ,CAAO6Z,cAAP,GAAwB,UAAUvX,UAAV,EAAwC;AAAA;;AAAA,MAAlBwX,QAAkB,uEAAP,KAAO;AAC5D,MAAMtZ,IAAI,GAAG,IAAb;AACA,MAAMuZ,cAAc,GAAGzX,UAAU,CAACS,IAAX,CAAgB,4BAAhB,CAAvB;;AACA,OAAKD,IAAL,GAAY,YAAM;AACd,IAAA,KAAI,CAACkX,YAAL;;AACA,IAAA,KAAI,CAACpV,YAAL;AACH,GAHD;;AAIA,OAAKA,YAAL,GAAoB,YAAM;AACtBmV,IAAAA,cAAc,CAACxW,EAAf,CAAkB,QAAlB,EAA4B,UAAUC,CAAV,EAAa;AACrC,UAAIsW,QAAJ,EAAc;AACV,YAAMG,aAAa,GAAGha,CAAC,CAAC,0BAAD,CAAvB;AACA,YAAIia,UAAU,GAAG,IAAjB;;AACA,YAAIja,CAAC,CAAC,0CAAD,CAAD,CAA8C+C,MAA9C,GAAuD,CAA3D,EAA8D;AAC1DkX,UAAAA,UAAU,GAAG,KAAb;AACH;;AACD,YAAIA,UAAU,KAAK,IAAnB,EAAyB;AACrBD,UAAAA,aAAa,CAAC7R,IAAd,CAAmB,UAAnB,EAA+B,KAA/B;AACH,SAFD,MAGK;AACD6R,UAAAA,aAAa,CAAC7R,IAAd,CAAmB,UAAnB,EAA+B,IAA/B;AACH;AACJ,OAZD,MAaK;AACD,YAAM6R,cAAa,GAAG3X,UAAU,CAACS,IAAX,CAAgB,0BAAhB,CAAtB;;AACA,YAAI9C,CAAC,CAAC,IAAD,CAAD,CAAQmI,IAAR,CAAa,SAAb,MAA4B,IAAhC,EAAsC;AAClC6R,UAAAA,cAAa,CAAC7R,IAAd,CAAmB,UAAnB,EAA+B,KAA/B;AACH,SAFD,MAGK;AACD6R,UAAAA,cAAa,CAAC7R,IAAd,CAAmB,UAAnB,EAA+B,IAA/B;AACH;AACJ;AACJ,KAvBD;AAwBH,GAzBD;;AA0BA,OAAK4R,YAAL,GAAoB,YAAM;AACtBD,IAAAA,cAAc,CAAC3R,IAAf,CAAoB,SAApB,EAA+B,KAA/B,EAAsCoJ,OAAtC,CAA8C,QAA9C;;AACA,QAAIsI,QAAJ,EAAc;AACV7Z,MAAAA,CAAC,CAAC,0BAAD,CAAD,CAA8BmI,IAA9B,CAAmC,UAAnC,EAA+C,IAA/C;AACH,KAFD,MAGK;AACD9F,MAAAA,UAAU,CAACS,IAAX,CAAgB,0BAAhB,EAA4CqF,IAA5C,CAAiD,UAAjD,EAA6D,KAA7D;AACH;AACJ,GARD;;AASA,OAAKtF,IAAL;AACH,CA3CD;;;ACAA/C,GAAG,CAACC,EAAJ,CAAOma,UAAP,GAAoB,YAAY;AAAA;;AAC5B,MAAM3Z,IAAI,GAAG,IAAb;AACA,MAAM+X,SAAS,GAAG,KAAlB;AACA,MAAM6B,WAAW,GAAGna,CAAC,CAAC,aAAD,CAArB;;AACA,OAAK6C,IAAL,GAAY,YAAM;AACd7C,IAAAA,CAAC,CAAC,2DAAD,CAAD,CAA+DG,IAA/D,CAAoE,aAApE,EAAmF,MAAnF;;AACA,IAAA,KAAI,CAACiJ,UAAL;;AACA,IAAA,KAAI,CAACzE,YAAL;;AACA,QAAI7E,GAAG,CAACC,EAAJ,CAAOmB,OAAP,CAAe+L,EAAf,CAAkB,QAAlB,CAAJ,EAAiC;AAC7B,MAAA,KAAI,CAACmN,mBAAL;AACH;AACJ,GAPD;;AAQA,OAAKzV,YAAL,GAAoB,YAAM;AACtB3E,IAAAA,CAAC,CAAC0B,QAAD,CAAD,CAAY4B,EAAZ,CAAe,WAAf,EAA4B,UAACC,CAAD,EAAO;AAC/B,UAAIzD,GAAG,CAACC,EAAJ,CAAOmB,OAAP,CAAe+L,EAAf,CAAkB,QAAlB,CAAJ,EAAiC;AAC7B,QAAA,KAAI,CAACoN,cAAL;AACH;AACJ,KAJD,EAIG/W,EAJH,CAIM,OAJN,EAIe,UAACC,CAAD,EAAO;AAClB,UAAI8F,MAAM,CAACiR,QAAP,CAAgBC,IAAhB,IAAwB,aAA5B,EAA2C;AACvClR,QAAAA,MAAM,CAACiR,QAAP,CAAgBC,IAAhB,GAAuB,EAAvB;AACH;AACJ,KARD;AASAJ,IAAAA,WAAW,CAAC7W,EAAZ,CAAe,iBAAf,EAAkC,UAACC,CAAD,EAAO;AACrCA,MAAAA,CAAC,CAAC2N,eAAF;AACH,KAFD;AAGAlR,IAAAA,CAAC,CAAC,iFAAD,CAAD,CAAqFsD,EAArF,CAAwF,WAAxF,EAAqG,UAACC,CAAD,EAAO;AACxG,UAAIzD,GAAG,CAACC,EAAJ,CAAOmB,OAAP,CAAe+L,EAAf,CAAkB,QAAlB,CAAJ,EAAiC;AAC7B,QAAA,KAAI,CAACoN,cAAL;AACH;AACJ,KAJD;AAKAra,IAAAA,CAAC,CAAC,2EAAD,CAAD,CAA+EsD,EAA/E,CAAkF,WAAlF,EAA+F,UAAUC,CAAV,EAAa;AACxG,UAAIzD,GAAG,CAACC,EAAJ,CAAOmB,OAAP,CAAe+L,EAAf,CAAkB,QAAlB,CAAJ,EAAiC;AAC7B,YAAMvD,OAAO,GAAG1J,CAAC,CAAC,IAAD,CAAD,CAAQ8C,IAAR,CAAa,mBAAb,CAAhB;AACAvC,QAAAA,IAAI,CAACia,SAAL,CAAe9Q,OAAf;AACH;AACJ,KALD;AAMA1J,IAAAA,CAAC,CAAC,+FAAD,CAAD,CAAmGsD,EAAnG,CAAsG,SAAtG,EAAiH,UAAUC,CAAV,EAAa;AAC1H,UAAIA,CAAC,CAACqV,KAAF,IAAW,EAAX,IAAiBrV,CAAC,CAACqV,KAAF,IAAW,EAAhC,EAAoC;AAAE;AAAS;;AAC/CrV,MAAAA,CAAC,CAACuB,cAAF;AACAvE,MAAAA,IAAI,CAACka,WAAL,CAAiBza,CAAC,CAAC,IAAD,CAAlB;AACH,KAJD,EAIGsD,EAJH,CAIM,OAJN,EAIe,UAAUC,CAAV,EAAa;AACxBA,MAAAA,CAAC,CAACuB,cAAF;AACAvE,MAAAA,IAAI,CAACka,WAAL,CAAiBza,CAAC,CAAC,IAAD,CAAlB;AACH,KAPD;AAQAA,IAAAA,CAAC,CAAC,qBAAD,CAAD,CAAyBsD,EAAzB,CAA4B,OAA5B,EAAqC,mBAArC,EAA0D,UAASC,CAAT,EAAY;AAClEvD,MAAAA,CAAC,CAAC,IAAD,CAAD,CAAQ8D,IAAR,CAAa,mBAAb,EAAkCyN,OAAlC,CAA0C,OAA1C;AACH,KAFD;AAGH,GAnCD;;AAoCA,OAAKkJ,WAAL,GAAmB,UAACC,MAAD,EAAY;AAC3B,QAAIA,MAAM,CAACva,IAAP,CAAY,eAAZ,MAAiC,MAArC,EAA6C;AACzC,MAAA,KAAI,CAACwa,UAAL,CAAgBD,MAAhB;;AACA;AACH;;AACD,IAAA,KAAI,CAACF,SAAL,CAAeE,MAAf;AACH,GAND;;AAOA,OAAKF,SAAL,GAAiB,UAACE,MAAD,EAAY;AACzB,QAAI5a,GAAG,CAACC,EAAJ,CAAOmB,OAAP,CAAe+L,EAAf,CAAkB,QAAlB,CAAJ,EAAiC;AAC7B,MAAA,KAAI,CAACoN,cAAL;AACH;;AACD,QAAM/L,KAAK,GAAGoM,MAAM,CAACnO,OAAP,CAAe,mBAAf,EAAoCnE,QAApC,CAA6C,wBAA7C,CAAd;AACAkG,IAAAA,KAAK,CAACxL,IAAN,CAAW,mBAAX,EAAgC3C,IAAhC,CAAqC,eAArC,EAAsD,MAAtD;AACAmO,IAAAA,KAAK,CAACxL,IAAN,CAAW,mBAAX,EAAgC3C,IAAhC,CAAqC,aAArC,EAAoD,OAApD;AACH,GAPD;;AAQA,OAAKwa,UAAL,GAAkB,UAACD,MAAD,EAAY;AAC1B,QAAMpM,KAAK,GAAGoM,MAAM,CAACnO,OAAP,CAAe,mBAAf,EAAoC7L,WAApC,CAAgD,wBAAhD,CAAd;AACA4N,IAAAA,KAAK,CAACxL,IAAN,CAAW,mBAAX,EAAgC3C,IAAhC,CAAqC,eAArC,EAAsD,OAAtD;AACAmO,IAAAA,KAAK,CAACxL,IAAN,CAAW,mBAAX,EAAgC3C,IAAhC,CAAqC,aAArC,EAAoD,MAApD;AACH,GAJD;;AAKA,OAAKka,cAAL,GAAsB,UAACK,MAAD,EAAY;AAC9B,IAAA,KAAI,CAACC,UAAL,CAAgB3a,CAAC,CAAC,uGAAD,CAAjB;AACH,GAFD;;AAGA,OAAKoJ,UAAL,GAAkB,YAAM;AACpBpJ,IAAAA,CAAC,CAACqJ,MAAD,CAAD,CAAU/F,EAAV,CAAa,QAAb,EAAuB,YAAM;AACzB,UAAIxD,GAAG,CAACC,EAAJ,CAAOmB,OAAP,CAAe+L,EAAf,CAAkB,QAAlB,CAAJ,EAAiC;AAC7B,QAAA,KAAI,CAACmN,mBAAL;AACH,OAFD,MAGK;AACD,QAAA,KAAI,CAACQ,eAAL;AACH;AACJ,KAPD,EAOGtX,EAPH,CAOM,YAPN,EAOoB,YAAM;AACtB,MAAA,KAAI,CAAC8W,mBAAL;AACH,KATD;AAUH,GAXD;;AAYA,OAAKS,cAAL,GAAsB,YAAM;AACxB7a,IAAAA,CAAC,CAAC,MAAD,CAAD,CAAUoI,QAAV,CAAmB,WAAnB,EAAgCtC,IAAhC,CAAqC,UAArC,EAAiD,IAAjD;AACAhG,IAAAA,GAAG,CAACC,EAAJ,CAAOmB,OAAP,CAAe+X,aAAf,CAA6BX,SAA7B;AACAxY,IAAAA,GAAG,CAACC,EAAJ,CAAOmB,OAAP,CAAemX,SAAf,CAAyB8B,WAAzB,EAAsC7B,SAAtC;AACAxY,IAAAA,GAAG,CAACC,EAAJ,CAAOmB,OAAP,CAAe4I,SAAf,CAAyBqQ,WAAzB;AACH,GALD;;AAMA,OAAKS,eAAL,GAAuB,YAAM;AACzB5a,IAAAA,CAAC,CAAC,MAAD,CAAD,CAAUU,WAAV,CAAsB,WAAtB,EAAmCoF,IAAnC,CAAwC,UAAxC,EAAoD,KAApD;AACAhG,IAAAA,GAAG,CAACC,EAAJ,CAAOmB,OAAP,CAAeiY,cAAf,CAA8Bb,SAA9B;AACAxY,IAAAA,GAAG,CAACC,EAAJ,CAAOmB,OAAP,CAAeqX,YAAf,CAA4B4B,WAA5B,EAAyC7B,SAAzC;AACH,GAJD;;AAKA,OAAK8B,mBAAL,GAA2B,YAAM;AAC7B,QAAI/Q,MAAM,CAACiR,QAAP,CAAgBC,IAAhB,KAAyB,aAA7B,EAA4C;AACxC,UAAIva,CAAC,CAAC,MAAD,CAAD,CAAU8F,IAAV,CAAe,UAAf,MAA+B,IAAnC,EAAyC;AACrC,QAAA,KAAI,CAAC+U,cAAL;AACH;AACJ,KAJD,MAKK;AACD,MAAA,KAAI,CAACD,eAAL;AACH;AACJ,GATD;;AAUA,OAAK/X,IAAL;AACH,CAzGD;;AA0GA7C,CAAC,CAAC0B,QAAD,CAAD,CAAY6G,KAAZ,CAAkB,YAAY;AAC1BzI,EAAAA,GAAG,CAACC,EAAJ,CAAOma,UAAP;AACH,CAFD;;;AC1GApa,GAAG,CAACC,EAAJ,CAAO+a,YAAP,GAAsB,UAAU/I,OAAV,EAAmBzP,OAAnB,EAA4B;AAAA;;AACjD,MAAM/B,IAAI,GAAG,IAAb;AACA,MAAMgC,QAAQ,GAAG;AAChBwY,IAAAA,cAAc,EAAE,SADA;AAEhBC,IAAAA,IAAI,EAAE,EAFU;AAGhBC,IAAAA,WAAW,EAAE,IAHG;AAIhBC,IAAAA,QAAQ,EAAE,CAJM;AAIH;AACbC,IAAAA,KAAK,EAAE;AALS,GAAjB;AAOA7Y,EAAAA,OAAO,GAAGtC,CAAC,CAAC4C,MAAF,CAAS,EAAT,EAAaL,QAAb,EAAuBD,OAAvB,CAAV;;AACA,OAAKO,IAAL,GAAY,YAAM;AACjB,QAAGkP,OAAH,EAAY;AACX,MAAA,MAAI,CAACqJ,cAAL;;AACA,MAAA,MAAI,CAACC,MAAL;AACA;AACD,GALD;;AAMA,OAAKD,cAAL,GAAsB,YAAM;AAC3B,QAAGpb,CAAC,CAAC,sBAAD,CAAD,CAA0B+C,MAA1B,GAAmC,CAAtC,EAAyC;AACxC;AACA;;AAAA;AACD,QAAMuY,mBAAmB,GAAGtb,CAAC,CAAC,QAAD,EAAW;AACvC,YAAM,qBADiC;AAEvC,eAAS,qBAF8B;AAGvC,mBAAa,WAH0B;AAI9B,uBAAiB;AAJa,KAAX,CAA7B;AAMAA,IAAAA,CAAC,CAAC,MAAD,CAAD,CAAU0E,MAAV,CAAiB4W,mBAAjB;AACA,QAAGhZ,OAAO,CAAC6Y,KAAX,EAAkB9V,OAAO,CAACC,GAAR,CAAY,gBAAZ;AAClB,GAZD;;AAaA,OAAK+V,MAAL,GAAc,YAAM;AACnB,QAAMpY,EAAE,0BAAmB6U,IAAI,CAACC,MAAL,GAAc/L,QAAd,CAAuB,EAAvB,EAA2BgM,SAA3B,CAAqC,CAArC,CAAnB,CAAR;AACA,QAAMpX,OAAO,GAAG,CAAC,cAAD,CAAhB;AACAZ,IAAAA,CAAC,CAACM,IAAF,CAAOgC,OAAO,CAAC0Y,IAAf,EAAqB,UAACra,CAAD,EAAI4a,GAAJ,EAAY;AAChC3a,MAAAA,OAAO,CAAC6D,IAAR,yBAA8B8W,GAA9B;AACA,KAFD;AAGA,QAAMC,aAAa,GAAGxb,CAAC,CAAC,UAAD,EAAa;AACnC,eAASY,OAAO,CAACK,IAAR,CAAa,GAAb,CAD0B;AAEnC,cAAQ,OAF2B;AAGnC,mBAAa,WAHsB;AAInC,YAAMgC;AAJ6B,KAAb,CAAvB;AAMA,QAAMwY,oBAAoB,GAAGzb,CAAC,CAAC,QAAD,EAAW;AACxC,eAAS;AAD+B,KAAX,CAAD,CAE1BqD,IAF0B,CAErB0O,OAFqB,CAA7B;AAGAyJ,IAAAA,aAAa,CAAC9W,MAAd,CAAqB+W,oBAArB;;AACA,QAAGnZ,OAAO,CAAC2Y,WAAX,EAAwB;AACvB,UAAMS,kBAAkB,GAAG1b,CAAC,CAAC,WAAD,EAAc;AACzC,iBAAS,qBADgC;AAEzC,gBAAQ,QAFiC;AAGzC,sBAAc,oBAH2B;AAIzC,gBAAQsC,OAAO,CAACyY;AAJyB,OAAd,CAAD,CAKxBzX,EALwB,CAKrB,OALqB,EAKZ,UAACC,CAAD,EAAO;AACrB,QAAA,MAAI,CAACoY,OAAL,CAAa1Y,EAAb;AACA,OAP0B,CAA3B;AAQAuY,MAAAA,aAAa,CAAC9W,MAAd,CAAqBgX,kBAArB;AACA;;AACD1b,IAAAA,CAAC,CAAC,sBAAD,CAAD,CAA0B0E,MAA1B,CAAiC8W,aAAjC;AACA1b,IAAAA,GAAG,CAACC,EAAJ,CAAOmB,OAAP,CAAemX,SAAf,CAAyBrY,CAAC,YAAKiD,EAAL,EAA1B,EAAsCA,EAAtC;;AACA,QAAGX,OAAO,CAAC4Y,QAAR,GAAmB,CAAtB,EAAyB;AACxBhI,MAAAA,UAAU,CAAC,YAAM;AAChB,QAAA,MAAI,CAACyI,OAAL,CAAa1Y,EAAb;AACA,OAFS,EAEPX,OAAO,CAAC4Y,QAFD,CAAV;AAGA;;AAAA;AACD,QAAG5Y,OAAO,CAAC6Y,KAAX,EAAkB9V,OAAO,CAACC,GAAR,CAAY,QAAZ,EAAsByM,OAAtB,EAA+BzP,OAA/B;AAClB,GAnCD;;AAoCA,OAAKqZ,OAAL,GAAe,UAAC1Y,EAAD,EAAQ;AACtBjD,IAAAA,CAAC,YAAKiD,EAAL,EAAD,CAAYS,MAAZ;AACA5D,IAAAA,GAAG,CAACC,EAAJ,CAAOmB,OAAP,CAAeqX,YAAf,CAA4BvY,CAAC,YAAKiD,EAAL,EAA7B,EAAyCA,EAAzC;AACA,QAAGX,OAAO,CAAC6Y,KAAX,EAAkB9V,OAAO,CAACC,GAAR,CAAY,SAAZ,EAAuBrC,EAAvB;AAClB,GAJD;;AAKA,OAAKJ,IAAL;AACA,CAvED;;AAyEA/C,GAAG,CAACC,EAAJ,CAAO6b,cAAP,GAAwB,UAAU7J,OAAV,EAAmBzP,OAAnB,EAA4B;AAChD,MAAIuZ,KAAK,GAAG,IAAZ;;AAEA,MAAItb,IAAI,GAAG,IAAX;AACA,MAAIgC,QAAQ,GAAG;AACXwY,IAAAA,cAAc,EAAE,SADL;AAEXC,IAAAA,IAAI,EAAE,EAFK;AAGXC,IAAAA,WAAW,EAAE,IAHF;AAIXC,IAAAA,QAAQ,EAAE,CAJC;AAKX;AACAC,IAAAA,KAAK,EAAE;AANI,GAAf;AAQA7Y,EAAAA,OAAO,GAAGtC,CAAC,CAAC4C,MAAF,CAAS,EAAT,EAAaL,QAAb,EAAuBD,OAAvB,CAAV;;AAEA,OAAKO,IAAL,GAAY,YAAY;AACpB,QAAIkP,OAAJ,EAAa;AACT8J,MAAAA,KAAK,CAACT,cAAN;;AAEAS,MAAAA,KAAK,CAACR,MAAN;AACH;AACJ,GAND;;AAQA,OAAKD,cAAL,GAAsB,YAAY;AAC9B,QAAIpb,CAAC,CAAC,sBAAD,CAAD,CAA0B+C,MAA1B,GAAmC,CAAvC,EAA0C;AACtC;AACH;;AAED;AACA,QAAIuY,mBAAmB,GAAGtb,CAAC,CAAC,QAAD,EAAW;AAClC,YAAM,qBAD4B;AAElC,eAAS,qBAFyB;AAGlC,mBAAa,WAHqB;AAIlC,uBAAiB;AAJiB,KAAX,CAA3B,CAN8B,CAY9B;AACA;AACA;AACA;;AACAA,IAAAA,CAAC,CAACsb,mBAAD,CAAD,CAAuBQ,YAAvB,CAAoC,sBAApC,EAhB8B,CAiB9B;;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,QAAIxZ,OAAO,CAAC6Y,KAAZ,EAAmB9V,OAAO,CAACC,GAAR,CAAY,gBAAZ;AACtB,GAzBD;;AA2BA,OAAK+V,MAAL,GAAc,YAAY;AACtB,QAAIpY,EAAE,GAAG,gBAAgB8Y,MAAhB,CAAuBjE,IAAI,CAACC,MAAL,GAAc/L,QAAd,CAAuB,EAAvB,EAA2BgM,SAA3B,CAAqC,CAArC,CAAvB,CAAT;AACA,QAAIpX,OAAO,GAAG,CAAC,cAAD,CAAd;AACAZ,IAAAA,CAAC,CAACM,IAAF,CAAOgC,OAAO,CAAC0Y,IAAf,EAAqB,UAAUra,CAAV,EAAa4a,GAAb,EAAkB;AACnC3a,MAAAA,OAAO,CAAC6D,IAAR,CAAa,iBAAiBsX,MAAjB,CAAwBR,GAAxB,CAAb;AACH,KAFD;AAGA,QAAIC,aAAa,GAAGxb,CAAC,CAAC,UAAD,EAAa;AAC9B,eAASY,OAAO,CAACK,IAAR,CAAa,GAAb,CADqB;AAE9B,cAAQ,OAFsB;AAG9B,mBAAa,WAHiB;AAI9B,YAAMgC;AAJwB,KAAb,CAArB;AAMA,QAAIwY,oBAAoB,GAAGzb,CAAC,CAAC,QAAD,EAAW;AACnC,eAAS;AAD0B,KAAX,CAAD,CAExBqD,IAFwB,CAEnB0O,OAFmB,CAA3B;AAGAyJ,IAAAA,aAAa,CAAC9W,MAAd,CAAqB+W,oBAArB;;AAEA,QAAInZ,OAAO,CAAC2Y,WAAZ,EAAyB;AACrB,UAAIS,kBAAkB,GAAG1b,CAAC,CAAC,WAAD,EAAc;AACpC,iBAAS,qBAD2B;AAEpC,gBAAQ,QAF4B;AAGpC,sBAAc,oBAHsB;AAIpC,gBAAQsC,OAAO,CAACyY;AAJoB,OAAd,CAAD,CAKtBzX,EALsB,CAKnB,OALmB,EAKV,UAAUC,CAAV,EAAa;AACxBsY,QAAAA,KAAK,CAACF,OAAN,CAAc1Y,EAAd;AACH,OAPwB,CAAzB;AAQAuY,MAAAA,aAAa,CAAC9W,MAAd,CAAqBgX,kBAArB;AACH;;AAED1b,IAAAA,CAAC,CAAC,sBAAD,CAAD,CAA0B0E,MAA1B,CAAiC8W,aAAjC;AACA1b,IAAAA,GAAG,CAACC,EAAJ,CAAOmB,OAAP,CAAemX,SAAf,CAAyBrY,CAAC,CAAC,IAAI+b,MAAJ,CAAW9Y,EAAX,CAAD,CAA1B,EAA4CA,EAA5C;;AAEA,QAAIX,OAAO,CAAC4Y,QAAR,GAAmB,CAAvB,EAA0B;AACtBhI,MAAAA,UAAU,CAAC,YAAY;AACnB2I,QAAAA,KAAK,CAACF,OAAN,CAAc1Y,EAAd;AACH,OAFS,EAEPX,OAAO,CAAC4Y,QAFD,CAAV;AAGH;;AAED;AACA,QAAI5Y,OAAO,CAAC6Y,KAAZ,EAAmB9V,OAAO,CAACC,GAAR,CAAY,QAAZ,EAAsByM,OAAtB,EAA+BzP,OAA/B;AACtB,GAxCD;;AA0CA,OAAKqZ,OAAL,GAAe,UAAU1Y,EAAV,EAAc;AACzBjD,IAAAA,CAAC,CAAC,IAAI+b,MAAJ,CAAW9Y,EAAX,CAAD,CAAD,CAAkBS,MAAlB;AACA5D,IAAAA,GAAG,CAACC,EAAJ,CAAOmB,OAAP,CAAeqX,YAAf,CAA4BvY,CAAC,CAAC,IAAI+b,MAAJ,CAAW9Y,EAAX,CAAD,CAA7B,EAA+CA,EAA/C;AACA,QAAIX,OAAO,CAAC6Y,KAAZ,EAAmB9V,OAAO,CAACC,GAAR,CAAY,SAAZ,EAAuBrC,EAAvB;AACtB,GAJD;;AAMA,OAAKJ,IAAL;AACH,CAlGD;;;ACzEA/C,GAAG,CAACC,EAAJ,CAAOic,gBAAP,GAA0B,UAAUrN,MAAV,EAAkB;AAAA;;AACxC,MAAMpO,IAAI,GAAG,IAAb;;AACA,OAAKsC,IAAL,GAAY,YAAM;AACd,IAAA,KAAI,CAACoZ,WAAL;;AACA,IAAA,KAAI,CAACtX,YAAL;AACH,GAHD;;AAIA,OAAKA,YAAL,GAAoB,YAAM;AACtBgK,IAAAA,MAAM,CAACrL,EAAP,CAAU,aAAV,EAAyB,UAACC,CAAD,EAAO;AAC5B,UAAMiB,KAAK,GAAGmK,MAAM,CAAC1J,GAAP,EAAd;;AACA,MAAA,KAAI,CAACiX,YAAL,CAAkB1X,KAAlB;AACH,KAHD;AAIH,GALD;;AAMA,OAAKyX,WAAL,GAAmB,YAAM;AACrB,QAAMhZ,EAAE,+BAAwBnD,GAAG,CAACC,EAAJ,CAAOmB,OAAP,CAAegC,YAAf,EAAxB,CAAR;AACA,QAAMb,UAAU,GAAGrC,CAAC,CAAC,QAAD,EAAW;AAC3B,eAAS;AADkB,KAAX,CAApB;AAGA,QAAMmc,MAAM,GAAGnc,CAAC,CAAC,QAAD,EAAW;AACvB,eAAS,0BADc;AAEvB,mBAAa,QAFU;AAGvB,uBAAiB,MAHM;AAIvB,YAAMiD;AAJiB,KAAX,CAAhB;AAMA0L,IAAAA,MAAM,CAACyN,IAAP,CAAY/Z,UAAZ,EAAwBoB,KAAxB,CAA8B0Y,MAA9B,EAAsChc,IAAtC,CAA2C,eAA3C,EAA4D8C,EAA5D;AACH,GAZD;;AAaA,OAAKiZ,YAAL,GAAoB,UAAC1X,KAAD,EAAW;AAC3B,QAAM6X,OAAO,GAAGC,MAAM,CAAC9X,KAAD,CAAtB;AACA,QAAI+X,QAAQ,GAAG,SAAf;AACA,QAAIC,MAAM,GAAG,EAAb;AACA,QAAIjW,MAAM,GAAG,EAAb,CAJ2B,CAK3B;;AACA,YAAQ8V,OAAO,CAACI,KAAhB;AACI,WAAK,CAAL;AACIF,QAAAA,QAAQ,GAAG,WAAX;AACAC,QAAAA,MAAM,GAAG,OAAT;AACA;;AACJ,WAAK,CAAL;AACID,QAAAA,QAAQ,GAAG,MAAX;AACAC,QAAAA,MAAM,GAAG,SAAT;AACA;;AACJ,WAAK,CAAL;AACID,QAAAA,QAAQ,GAAG,UAAX;AACAC,QAAAA,MAAM,GAAG,SAAT;AACA;;AACJ,WAAK,CAAL;AACID,QAAAA,QAAQ,GAAG,QAAX;AACAC,QAAAA,MAAM,GAAG,SAAT;AACA;;AACJ,WAAK,CAAL;AACID,QAAAA,QAAQ,GAAG,aAAX;AACAC,QAAAA,MAAM,GAAG,SAAT;AACA;AApBR;;AAsBA,QAAID,QAAJ,EAAc;AACVhW,MAAAA,MAAM,6CAAqCiW,MAArC,gBAAgDD,QAAhD,eAAN;AACH;;AACDhW,IAAAA,MAAM,4BAAqB8V,OAAO,CAACK,mBAAR,CAA4BC,kCAAjD,6BAAN,CA/B2B,CAgC3B;AACA;AACA;;AACAhO,IAAAA,MAAM,CAACpD,QAAP,CAAgB,2BAAhB,EAA6ClI,IAA7C,CAAkDkD,MAAlD;AACH,GApCD;;AAqCA,OAAK1D,IAAL;AACH,CA/DD;;;ACAA/C,GAAG,CAACC,EAAJ,CAAO6c,cAAP,GAAwB,UAAUva,UAAV,EAAsBC,OAAtB,EAA+B;AAAA;;AACnD,MAAMC,QAAQ,GAAG;AACbsa,IAAAA,WAAW,EAAE;AADA,GAAjB;AAGA,MAAMla,QAAQ,GAAG3C,CAAC,CAAC4C,MAAF,CAAS,EAAT,EAAaL,QAAb,EAAuBD,OAAvB,CAAjB;AACA,MAAM/B,IAAI,GAAG,IAAb;;AACA,OAAKsC,IAAL,GAAY,YAAM;AACdR,IAAAA,UAAU,CAACS,IAAX,WAAmBH,QAAQ,CAACka,WAA5B,mBAAuD1c,IAAvD,CAA4D,aAA5D,EAA2E,MAA3E;;AACA,IAAA,KAAI,CAACwE,YAAL;AACH,GAHD;;AAIA,OAAKA,YAAL,GAAoB,YAAM;AACtBtC,IAAAA,UAAU,CAACS,IAAX,CAAgB,OAAhB,EAAyBQ,EAAzB,CAA4B,oBAA5B,EAAkD,UAAUC,CAAV,EAAa;AAC3D,UAAIuZ,QAAQ,GAAG,KAAf;AACA9c,MAAAA,CAAC,CAAC,IAAD,CAAD,CAAQyX,MAAR,GAAiB1J,QAAjB,CAA0B,QAA1B,EAAoCzN,IAApC,CAAyC,UAACK,CAAD,EAAI6D,KAAJ,EAAc;AACnD,YAAIxE,CAAC,CAACwE,KAAD,CAAD,CAASS,GAAT,MAAkB,EAAtB,EAA0B;AACtB6X,UAAAA,QAAQ,GAAG,IAAX;AACH;AACJ,OAJD;;AAKA,UAAIA,QAAJ,EAAc;AACV9c,QAAAA,CAAC,CAAC,IAAD,CAAD,CAAQuM,OAAR,CAAgB5J,QAAQ,CAACka,WAAzB,EAAsC/Y,IAAtC,CAA2CnB,QAAQ,CAACka,WAApD,EAAiE1c,IAAjE,CAAsE,aAAtE,EAAqF,OAArF;AACH,OAFD,MAGK;AACDH,QAAAA,CAAC,CAAC,IAAD,CAAD,CAAQuM,OAAR,CAAgB5J,QAAQ,CAACka,WAAzB,EAAsC/Y,IAAtC,CAA2CnB,QAAQ,CAACka,WAApD,EAAiE1c,IAAjE,CAAsE,aAAtE,EAAqF,MAArF;AACH;AACJ,KAbD;AAcH,GAfD;;AAgBA,OAAK0C,IAAL;AACH,CA3BD;;;ACAA/C,GAAG,CAACC,EAAJ,CAAOgd,KAAP,GAAe,UAASC,OAAT,EAAkBrO,MAAlB,EAA0B;AAAA;;AACxC,MAAMpO,IAAI,GAAG,IAAb;AACA,MAAM0c,GAAG,GAAGD,OAAO,CAAC7c,IAAR,CAAa,KAAb,CAAZ;AACA,MAAM+c,GAAG,GAAGF,OAAO,CAAC7c,IAAR,CAAa,KAAb,CAAZ;AACA,MAAMgd,WAAW,GAAGH,OAAO,CAAC7c,IAAR,CAAa,aAAb,CAApB;;AACA,OAAK0C,IAAL,GAAY,YAAM;AACd,IAAA,KAAI,CAACua,WAAL,CAAiBJ,OAAO,CAAC/X,GAAR,EAAjB;;AACH,IAAA,KAAI,CAACN,YAAL;AACA,GAHD;;AAIA,OAAKA,YAAL,GAAoB,YAAM;AACzBqY,IAAAA,OAAO,CAAC1Z,EAAR,CAAW,cAAX,EAA2B,YAAM;AAChC,MAAA,KAAI,CAAC8Z,WAAL,CAAiBJ,OAAO,CAAC/X,GAAR,EAAjB;AACA,KAFD;AAGA0J,IAAAA,MAAM,CAACrL,EAAP,CAAU,cAAV,EAA0B,YAAM;AAC/B,MAAA,KAAI,CAAC8Z,WAAL,CAAiBzO,MAAM,CAAC1J,GAAP,EAAjB;AACA,KAFD;AAGA,GAPD;;AAQA,OAAKmY,WAAL,GAAmB,UAAC/b,KAAD,EAAW;AAC7B,QAAGsN,MAAM,CAAC0O,EAAP,CAAU,QAAV,CAAH,EAAwB;AAAE;AAAS;;AACnC,QAAGhc,KAAK,IAAI,EAAZ,EAAgB;AAAEA,MAAAA,KAAK,GAAG4b,GAAR;AAAc;;AAChCD,IAAAA,OAAO,CAAC/X,GAAR,CAAY5D,KAAZ;;AACA,QAAIsN,MAAM,CAAC0O,EAAP,CAAU,QAAV,CAAJ,EAAyB;AACrB1O,MAAAA,MAAM,CAAC1J,GAAP,CAAW5D,KAAX;AACH,KAFD,MAGK;AACD,UAAI8b,WAAW,IAAI,IAAf,IAAuB1W,QAAQ,CAACpF,KAAD,CAAR,IAAmBoF,QAAQ,CAACyW,GAAD,CAAtD,EAA6D;AACzDvO,QAAAA,MAAM,CAACzE,IAAP,WAAe7I,KAAf;AACH,OAFD,MAGK;AACKsN,QAAAA,MAAM,CAACzE,IAAP,CAAY7I,KAAZ;AACT;AACJ;AACD,GAfD;;AAgBA,OAAKwB,IAAL;AACA,CAlCD;;;ACAA/C,GAAG,CAACC,EAAJ,CAAOud,YAAP,GAAsB,UAAUjb,UAAV,EAAsB;AAAA;;AACxC,MAAM9B,IAAI,GAAG,IAAb;AACA,MAAM+X,SAAS,GAAG,QAAlB;AACA,MAAMrV,EAAE,GAAG,YAAYnD,GAAG,CAACC,EAAJ,CAAOmB,OAAP,CAAegC,YAAf,EAAvB;;AACA,OAAKL,IAAL,GAAY,YAAM;AACdR,IAAAA,UAAU,CAAClC,IAAX,CAAgB,IAAhB,EAAsB8C,EAAtB;;AACA,IAAA,KAAI,CAACmG,UAAL;;AACA,QAAItJ,GAAG,CAACC,EAAJ,CAAOmB,OAAP,CAAe+L,EAAf,CAAkB,QAAlB,CAAJ,EAAiC;AAC7B5K,MAAAA,UAAU,CAAClC,IAAX,CAAgB,MAAhB,EAAwB,OAAxB,EAAiCA,IAAjC,CAAsC,aAAtC,EAAqD,MAArD;AACH;;AACD,IAAA,KAAI,CAACod,YAAL;AACH,GAPD;;AAQA,OAAKnU,UAAL,GAAkB,YAAM;AACpBpJ,IAAAA,CAAC,CAACqJ,MAAD,CAAD,CAAU/F,EAAV,CAAa,aAAb,EAA4B,UAACC,CAAD,EAAO;AAC/B,UAAIzD,GAAG,CAACC,EAAJ,CAAOmB,OAAP,CAAe+L,EAAf,CAAkB,QAAlB,CAAJ,EAAiC;AAC7B5K,QAAAA,UAAU,CAAClC,IAAX,CAAgB,MAAhB,EAAwB,OAAxB,EAAiCA,IAAjC,CAAsC,aAAtC,EAAqD,MAArD;;AACA,YAAIH,CAAC,CAAC,MAAD,CAAD,CAAUwd,QAAV,CAAmB,aAAnB,CAAJ,EAAuC;AACnC1d,UAAAA,GAAG,CAACC,EAAJ,CAAOmB,OAAP,CAAe+X,aAAf,CAA6BX,SAA7B;AACAjW,UAAAA,UAAU,CAAClC,IAAX,CAAgB,aAAhB,EAA+B,OAA/B;AACH;AACJ,OAND,MAOK;AACDkC,QAAAA,UAAU,CAAC0B,UAAX,CAAsB,MAAtB,EAA8BA,UAA9B,CAAyC,aAAzC;AACAjE,QAAAA,GAAG,CAACC,EAAJ,CAAOmB,OAAP,CAAeiY,cAAf,CAA8Bb,SAA9B;AACH;AACJ,KAZD;AAaH,GAdD;;AAeA,OAAKiF,YAAL,GAAoB,YAAM;AACtB,QAAME,WAAW,GAAGzd,CAAC,CAAC,WAAD,EAAc;AAC/B,cAAQ,QADuB;AAE/B,eAAS,qDAFsB;AAG/B,cAAQ,oHAHuB;AAI/B,uBAAiBiD;AAJc,KAAd,CAAD,CAKjBK,EALiB,CAKd,OALc,EAKL,UAACC,CAAD,EAAO;AAClB,MAAA,KAAI,CAACma,SAAL;AACH,KAPmB,CAApB;AAQA1d,IAAAA,CAAC,CAAC,2BAAD,CAAD,CAA+B0E,MAA/B,CAAsC+Y,WAAtC;AACA,QAAME,YAAY,GAAG3d,CAAC,CAAC,WAAD,EAAc;AAChC,cAAQ,QADwB;AAEhC,eAAS,oEAFuB;AAGhC,cAAQ,oEAHwB;AAIhC,uBAAiBiD;AAJe,KAAd,CAAD,CAKlBK,EALkB,CAKf,OALe,EAKN,UAACC,CAAD,EAAO;AAClB,MAAA,KAAI,CAACqa,UAAL;AACH,KAPoB,CAArB;AAQAvb,IAAAA,UAAU,CAACoI,OAAX,CAAmBkT,YAAnB;AACH,GAnBD;;AAoBA,OAAKE,WAAL,GAAmB,YAAM;AACrB,QAAI7d,CAAC,CAAC,MAAD,CAAD,CAAUwd,QAAV,CAAmB,aAAnB,CAAJ,EAAuC;AACnC,MAAA,KAAI,CAACI,UAAL;AACH,KAFD,MAGK;AACD,MAAA,KAAI,CAACF,SAAL;AACH;AACJ,GAPD;;AAQA,OAAKA,SAAL,GAAiB,YAAM;AACnB5d,IAAAA,GAAG,CAACC,EAAJ,CAAOmB,OAAP,CAAe+X,aAAf,CAA6BX,SAA7B;AACAtY,IAAAA,CAAC,CAAC,MAAD,CAAD,CAAUoI,QAAV,CAAmB,aAAnB;AACA/F,IAAAA,UAAU,CAAClC,IAAX,CAAgB,aAAhB,EAA+B,OAA/B;AACAL,IAAAA,GAAG,CAACC,EAAJ,CAAOmB,OAAP,CAAemX,SAAf,CAAyBhW,UAAzB,EAAqCiW,SAArC;AACAxY,IAAAA,GAAG,CAACC,EAAJ,CAAOmB,OAAP,CAAe4I,SAAf,CAAyBzH,UAAzB;AACH,GAND;;AAOA,OAAKub,UAAL,GAAkB,YAAM;AACpB9d,IAAAA,GAAG,CAACC,EAAJ,CAAOmB,OAAP,CAAeiY,cAAf,CAA8Bb,SAA9B;AACAtY,IAAAA,CAAC,CAAC,MAAD,CAAD,CAAUU,WAAV,CAAsB,aAAtB;AACA2B,IAAAA,UAAU,CAAClC,IAAX,CAAgB,aAAhB,EAA+B,MAA/B;AACAL,IAAAA,GAAG,CAACC,EAAJ,CAAOmB,OAAP,CAAeqX,YAAf,CAA4BlW,UAA5B,EAAwCiW,SAAxC;AACH,GALD;;AAMA,OAAKzV,IAAL;AACH,CArED;;;ACAA/C,GAAG,CAACC,EAAJ,CAAO+d,YAAP,GAAsB,YAAwB;AAAA;;AAAA,MAAdxb,OAAc,uEAAJ,EAAI;AAC1C,MAAM/B,IAAI,GAAG,IAAb;AACA,MAAMgC,QAAQ,GAAG;AACbwb,IAAAA,WAAW,EAAE;AACTC,MAAAA,IAAI,EAAE,kDADG;AAETC,MAAAA,MAAM,EAAE,qDAFC;AAGTC,MAAAA,IAAI,EAAE,6CAHG;AAITC,MAAAA,OAAO,EAAE,4CAJA;AAKTC,MAAAA,UAAU,EAAE,8CALH;AAMTC,MAAAA,QAAQ,EAAE,oDAND;AAOTC,MAAAA,sBAAsB,EAAE;AAPf,KADA;AAUbC,IAAAA,uBAAuB,EAAE;AACrBP,MAAAA,IAAI,EAAE,aADe;AAErBC,MAAAA,MAAM,EAAE,qBAFa;AAGrBC,MAAAA,IAAI,EAAE,eAHe;AAIrBC,MAAAA,OAAO,EAAE,oBAJY;AAKrBC,MAAAA,UAAU,EAAE,eALS;AAMrBC,MAAAA,QAAQ,EAAE,YANW;AAOrBC,MAAAA,sBAAsB,EAAE;AAPH;AAVZ,GAAjB;AAoBA,MAAM3b,QAAQ,GAAG3C,CAAC,CAAC4C,MAAF,CAAS,IAAT,EAAe,EAAf,EAAmBL,QAAnB,EAA6BD,OAA7B,CAAjB;;AACA,OAAKO,IAAL,GAAY,YAAM;AACd,IAAA,KAAI,CAAC2b,sBAAL;;AACA,IAAA,KAAI,CAACC,qBAAL;;AACA,IAAA,KAAI,CAACC,kBAAL;;AACA,IAAA,KAAI,CAACC,oBAAL;;AACA,IAAA,KAAI,CAACC,oBAAL;AACH,GAND;;AAOA,OAAKJ,sBAAL,GAA8B,YAAM;AAChCxe,IAAAA,CAAC,CAACqJ,MAAD,CAAD,CAAU/F,EAAV,CAAa,MAAb,EAAqB,UAACC,CAAD,EAAO;AACxB,MAAA,KAAI,CAACob,oBAAL;;AACA,MAAA,KAAI,CAACC,oBAAL;AACH,KAHD;AAIA5e,IAAAA,CAAC,CAAC0B,QAAD,CAAD,CAAY4B,EAAZ,CAAe,QAAf,EAAyB,aAAzB,EAAwC,UAACC,CAAD,EAAO;AAC3C,MAAA,KAAI,CAACob,oBAAL;AACH,KAFD;AAGA3e,IAAAA,CAAC,CAAC0B,QAAD,CAAD,CAAY4B,EAAZ,CAAe,QAAf,EAAyB,aAAzB,EAAwC,UAACC,CAAD,EAAO;AAC3C,MAAA,KAAI,CAACob,oBAAL;AACH,KAFD;AAGH,GAXD;;AAYA,OAAKF,qBAAL,GAA6B,YAAM;AAC/B,QAAMI,iBAAiB,GAAG7e,CAAC,CAAC,oBAAD,CAA3B;;AACA,QAAI,CAAC6e,iBAAiB,CAAC9b,MAAvB,EAA+B;AAAE;AAAS;;AAC1C8b,IAAAA,iBAAiB,CAACvb,EAAlB,CAAqB,OAArB,EAA8B,8BAA9B,EAA8D,UAASC,CAAT,EAAY;AACtEA,MAAAA,CAAC,CAACuB,cAAF;AACA,UAAIc,GAAG,GAAG5F,CAAC,CAAC,IAAD,CAAD,CAAQG,IAAR,CAAa,MAAb,CAAV;AACA,UAAM2e,WAAW,GAAG9e,CAAC,CAAC,cAAD,CAAD,CAAkBiF,GAAlB,EAApB;AACA,UAAM8Z,YAAY,GAAGzL,YAAY,CAACC,OAAb,CAAqB,UAArB,CAArB;AACA3N,MAAAA,GAAG,IAAIoZ,SAAS,cAAOF,WAAP,EAAhB;;AACA,UAAIC,YAAJ,EAAkB;AACdnZ,QAAAA,GAAG,IAAIoZ,SAAS,yBAAkBD,YAAlB,EAAhB;AACH;;AACD1V,MAAAA,MAAM,CAACiR,QAAP,CAAgB2E,IAAhB,GAAuBrZ,GAAvB;AACH,KAVD;AAWH,GAdD;;AAeA,OAAK8Y,kBAAL,GAA0B,YAAM;AAC5B,QAAIpL,YAAY,CAACC,OAAb,CAAqB,UAArB,CAAJ,EAAsC;AAClC,MAAA,KAAI,CAAC2L,mBAAL,CAAyB5L,YAAY,CAACC,OAAb,CAAqB,UAArB,CAAzB;AACH,KAFD,MAGK,IAAIH,SAAS,CAACK,WAAd,EAA2B;AAC5BL,MAAAA,SAAS,CAACK,WAAV,CAAsBC,kBAAtB,CAAyC,UAAC3R,QAAD,EAAc;AACnD,QAAA,KAAI,CAACmd,mBAAL,CAAyBpf,GAAG,CAACoB,OAAJ,CAAYY,gBAAZ,CAA6BC,QAA7B,CAAzB;AACH,OAFD;AAGH;AACJ,GATD;;AAUA,OAAKmd,mBAAL,GAA2B,UAACld,MAAD,EAAY;AACnC;AACA,QAAMmd,eAAe,GAAGnf,CAAC,CAAC,kBAAD,CAAzB;AACAmf,IAAAA,eAAe,CAACla,GAAhB,CAAoBjD,MAApB,EAHmC,CAKnC;;AACA,QAAMod,qBAAqB,GAAGpf,CAAC,CAAC,kBAAD,CAA/B;AACAof,IAAAA,qBAAqB,CAACna,GAAtB,CAA0BjD,MAA1B;AAGA,QAAMqd,sBAAsB,GAAGrf,CAAC,CAAC,kBAAD,CAAhC;AACAqf,IAAAA,sBAAsB,CAACpa,GAAvB,CAA2BjD,MAA3B;AAEAsR,IAAAA,YAAY,CAACK,OAAb,CAAqB,UAArB,EAAiC3R,MAAjC;AACH,GAdD;;AAeA,OAAK2c,oBAAL,GAA4B,YAAM;AAC9B;AACA,QAAMW,YAAY,GAAGtf,CAAC,CAAC,eAAD,CAAtB;;AACA,QAAI,CAACsf,YAAY,CAACvc,MAAlB,EAA0B;AAAE;AAAS;;AACrC,QAAMwc,eAAe,GAAGvf,CAAC,CAAC,aAAD,CAAzB;AACAsf,IAAAA,YAAY,CAACnf,IAAb,CAAkB,aAAlB,EAAiC,KAAI,CAACqf,gCAAL,CAAsCD,eAAe,CAACta,GAAhB,EAAtC,CAAjC,EAL8B,CAO9B;;AACA,QAAMwa,kBAAkB,GAAGzf,CAAC,CAAC,eAAD,CAA5B;;AACA,QAAI,CAACyf,kBAAkB,CAAC1c,MAAxB,EAAgC;AAAE;AAAS;;AAC3C,QAAM2c,qBAAqB,GAAG1f,CAAC,CAAC,aAAD,CAA/B;AACAyf,IAAAA,kBAAkB,CAACtf,IAAnB,CAAwB,aAAxB,EAAuC,KAAI,CAACqf,gCAAL,CAAsCE,qBAAqB,CAACza,GAAtB,EAAtC,CAAvC;AACH,GAZD;;AAaA,OAAK2Z,oBAAL,GAA4B,YAAM;AAC9B,QAAMU,YAAY,GAAGtf,CAAC,CAAC,cAAD,CAAtB;;AACA,QAAI,CAACsf,YAAY,CAACvc,MAAlB,EAA0B;AAAE;AAAS;;AACrC,QAAM4c,WAAW,GAAGtW,MAAM,CAACiR,QAAP,CAAgBsF,QAAhB,CAAyB/e,KAAzB,CAA+B,GAA/B,CAApB;AACAye,IAAAA,YAAY,CAACnf,IAAb,CAAkB,aAAlB,EAAiC,KAAI,CAAC0f,oBAAL,CAA0BF,WAAW,CAACA,WAAW,CAAC5c,MAAZ,GAAqB,CAAtB,CAArC,CAAjC;AACH,GALD;;AAMA,OAAK8c,oBAAL,GAA4B,UAACC,QAAD,EAAc;AACtC,YAAQA,QAAR;AACI,WAAK,QAAL;AACI,eAAOnd,QAAQ,CAACob,WAAT,CAAqBE,MAA5B;AACA;;AACJ,WAAK,MAAL;AACI,eAAOtb,QAAQ,CAACob,WAAT,CAAqBG,IAA5B;AACA;;AACJ,WAAK,SAAL;AACI,eAAOvb,QAAQ,CAACob,WAAT,CAAqBI,OAA5B;AACA;;AACJ,WAAK,YAAL;AACI,eAAOxb,QAAQ,CAACob,WAAT,CAAqBK,UAA5B;AACA;;AACJ,WAAK,UAAL;AACI,eAAOzb,QAAQ,CAACob,WAAT,CAAqBM,QAA5B;AACA;;AACJ,WAAK,wBAAL;AACI,eAAO1b,QAAQ,CAACob,WAAT,CAAqBO,sBAA5B;AACA;;AACJ;AACI,eAAO3b,QAAQ,CAACob,WAAT,CAAqBC,IAA5B;AACA;AArBR;AAuBH,GAxBD;;AAyBA,OAAKwB,gCAAL,GAAwC,UAACM,QAAD,EAAc;AAClD,YAAQA,QAAR;AACI,WAAK,QAAL;AACI,eAAOnd,QAAQ,CAAC4b,uBAAT,CAAiCN,MAAxC;AACA;;AACJ,WAAK,MAAL;AACI,eAAOtb,QAAQ,CAAC4b,uBAAT,CAAiCL,IAAxC;AACA;;AACJ,WAAK,SAAL;AACI,eAAOvb,QAAQ,CAAC4b,uBAAT,CAAiCJ,OAAxC;AACA;;AACJ,WAAK,YAAL;AACI,eAAOxb,QAAQ,CAAC4b,uBAAT,CAAiCH,UAAxC;AACA;;AACJ,WAAK,UAAL;AACI,eAAOzb,QAAQ,CAAC4b,uBAAT,CAAiCF,QAAxC;AACA;;AACJ,WAAK,wBAAL;AACI,eAAO1b,QAAQ,CAAC4b,uBAAT,CAAiCD,sBAAxC;AACA;;AACJ;AACI,eAAO3b,QAAQ,CAAC4b,uBAAT,CAAiCP,IAAxC;AACA;AArBR;AAuBH,GAxBD;;AAyBA,OAAKnb,IAAL;AACH,CAxJD;;AA0JA7C,CAAC,CAAC0B,QAAD,CAAD,CAAY6G,KAAZ,CAAkB,YAAY;AAC1B,MAAIzI,GAAG,CAACC,EAAJ,CAAO+d,YAAX;AACH,CAFD;;;AC1JAhe,GAAG,CAACC,EAAJ,CAAOggB,aAAP,GAAuB,UAASC,WAAT,EAAsB;AAAA;;AAC5C,MAAMzf,IAAI,GAAG,IAAb;;AACA,OAAKsC,IAAL,GAAY,YAAM;AACjB,IAAA,KAAI,CAAC8B,YAAL;AACA,GAFD;;AAGA,OAAKA,YAAL,GAAoB,YAAM;AACzBqb,IAAAA,WAAW,CAAC1c,EAAZ,CAAe,WAAf,EAA4B,YAAM;AACjC0c,MAAAA,WAAW,CAAC5X,QAAZ,CAAqB,uBAArB;AACA,KAFD,EAEG9E,EAFH,CAEM,UAFN,EAEkB,YAAM;AACvB0c,MAAAA,WAAW,CAACtf,WAAZ,CAAwB,uBAAxB;AACA,KAJD,EAIG4C,EAJH,CAIM,OAJN,EAIe,YAAM;AACpB,UAAMsC,GAAG,GAAGoa,WAAW,CAACld,IAAZ,CAAiB,uBAAjB,EAA0C3C,IAA1C,CAA+C,MAA/C,CAAZ;AACAkJ,MAAAA,MAAM,CAACiR,QAAP,CAAgB2E,IAAhB,GAAuBrZ,GAAvB;AACA,KAPD;AAQAoa,IAAAA,WAAW,CAACld,IAAZ,CAAiB,2BAAjB,EAA8CQ,EAA9C,CAAiD,OAAjD,EAA0D,UAACC,CAAD,EAAO;AAChEA,MAAAA,CAAC,CAAC2N,eAAF;AACA,KAFD;AAGA,GAZD;;AAaA,OAAKrO,IAAL;AACA,CAnBD;;AAqBA7C,CAAC,CAAC0B,QAAD,CAAD,CAAY6G,KAAZ,CAAkB,YAAW;AAC5BvI,EAAAA,CAAC,CAAC,iBAAD,CAAD,CAAqBM,IAArB,CAA0B,YAAW;AACpC,QAAM2f,eAAe,GAAGngB,GAAG,CAACC,EAAJ,CAAOggB,aAAP,CAAqB/f,CAAC,CAAC,IAAD,CAAtB,CAAxB;AACA,GAFD;AAGA,CAJD;;;ACrBAF,GAAG,CAACC,EAAJ,CAAOmgB,KAAP,GAAe,UAAUC,MAAV,EAAkB;AAC7B,MAAM5f,IAAI,GAAG,IAAb;AACA,MAAM6f,OAAO,GAAG,EAAhB;;AACA,OAAKvd,IAAL,GAAY,YAAM;AACd,QAAI,CAACsd,MAAM,CAACrd,IAAP,CAAY,OAAZ,EAAqBC,MAA1B,EAAkC;AAAE;AAAS;;AAC7Cod,IAAAA,MAAM,CAAC/X,QAAP,CAAgB,mBAAhB;AACA+X,IAAAA,MAAM,CAACrd,IAAP,CAAY,UAAZ,EAAwBiL,QAAxB,GAAmCzN,IAAnC,CAAwC,UAACK,CAAD,EAAI0f,IAAJ,EAAa;AACjDD,MAAAA,OAAO,CAAC3b,IAAR,CAAazE,CAAC,CAACqgB,IAAD,CAAD,CAAQnW,IAAR,EAAb;AACH,KAFD;AAGAiW,IAAAA,MAAM,CAACrd,IAAP,CAAY,UAAZ,EAAwBxC,IAAxB,CAA6B,UAACK,CAAD,EAAI6F,GAAJ,EAAY;AACrCxG,MAAAA,CAAC,CAACwG,GAAD,CAAD,CAAOuH,QAAP,GAAkBzN,IAAlB,CAAuB,UAACK,CAAD,EAAI0f,IAAJ,EAAa;AAChCrgB,QAAAA,CAAC,CAACqgB,IAAD,CAAD,CAAQlgB,IAAR,CAAa,SAAb,EAAwBigB,OAAO,CAACzf,CAAD,CAA/B;AACH,OAFD;AAGH,KAJD;AAKH,GAXD;;AAYA,OAAKkC,IAAL;AACH,CAhBD;;AAkBA7C,CAAC,CAAC0B,QAAD,CAAD,CAAY6G,KAAZ,CAAkB,YAAY;AAC1BvI,EAAAA,CAAC,CAAC,oCAAD,CAAD,CAAwCM,IAAxC,CAA6C,UAACK,CAAD,EAAI2f,KAAJ,EAAc;AACvD,QAAIxgB,GAAG,CAACC,EAAJ,CAAOmgB,KAAX,CAAiBlgB,CAAC,CAACsgB,KAAD,CAAlB;AACH,GAFD;AAGH,CAJD;;;AClBAxgB,GAAG,CAACC,EAAJ,CAAOwgB,IAAP,GAAc,UAAUle,UAAV,EAAoC;AAAA;;AAAA,MAAdC,OAAc,uEAAJ,EAAI;AAC9C,MAAM/B,IAAI,GAAG,IAAb;AACA,MAAMgC,QAAQ,GAAG;AACbie,IAAAA,aAAa,EAAE,kBADF;AAEbC,IAAAA,iBAAiB,EAAE,eAFN;AAGbC,IAAAA,QAAQ,EAAE;AAHG,GAAjB;AAKA,MAAM/d,QAAQ,GAAG3C,CAAC,CAAC4C,MAAF,CAAS,IAAT,EAAe,EAAf,EAAmBL,QAAnB,EAA6BD,OAA7B,CAAjB;AACA,MAAIqe,OAAO,GAAG,EAAd;AACA,MAAIC,QAAJ;;AACA,OAAK/d,IAAL,GAAY,YAAM;AACd,QAAMge,cAAc,GAAGxe,UAAU,CAACS,IAAX,CAAgBH,QAAQ,CAAC6d,aAAzB,CAAvB;;AACA,QAAIK,cAAc,CAAC9d,MAAf,GAAwB,CAA5B,EAA+B;AAAE;AAAS;;AAC1C8d,IAAAA,cAAc,CAACvgB,IAAf,CAAoB,UAACK,CAAD,EAAImgB,GAAJ,EAAY;AAC5B,UAAMC,IAAI,GAAG/gB,CAAC,CAAC8gB,GAAD,CAAd;AACA,UAAM7d,EAAE,GAAGnD,GAAG,CAACC,EAAJ,CAAOmB,OAAP,CAAegC,YAAf,EAAX;AACA6d,MAAAA,IAAI,CAAC5gB,IAAL,CAAU;AACN,kBAAU,QADJ;AAEN,gBAAQ,UAFF;AAGN,4BAAa8C,EAAb,WAHM;AAIN,yCAA0BA,EAA1B;AAJM,OAAV;AAMA0d,MAAAA,OAAO,CAAClc,IAAR,CAAa;AAAExB,QAAAA,EAAE,EAAEA,EAAN;AAAU7B,QAAAA,IAAI,EAAE2f,IAAI,CAAC5gB,IAAL,CAAU,gBAAV;AAAhB,OAAb;AACH,KAVD;;AAWA,IAAA,KAAI,CAAC6gB,YAAL;;AACA,IAAA,KAAI,CAACxG,SAAL,CAAeqG,cAAc,CAACld,KAAf,GAAuBxD,IAAvB,CAA4B,IAA5B,CAAf;AACH,GAhBD;;AAiBA,OAAK6gB,YAAL,GAAoB,YAAM;AACtBJ,IAAAA,QAAQ,GAAG5gB,CAAC,CAAC,QAAD,EAAW;AACnB,eAAS2C,QAAQ,CAAC8d,iBADC;AAEnB,cAAQ;AAFW,KAAX,CAAZ;AAIAzgB,IAAAA,CAAC,CAACM,IAAF,CAAOqgB,OAAP,EAAgB,UAAChgB,CAAD,EAAImgB,GAAJ,EAAY;AACxB,UAAMC,IAAI,GAAG/gB,CAAC,CAAC,WAAD,EAAc;AACxB,gBAAQ,QADgB;AAExB,iBAAS2C,QAAQ,CAAC+d,QAFM;AAGxB,gBAAQI,GAAG,CAAC1f,IAHY;AAIxB,uCAAwB0f,GAAG,CAAC7d,EAA5B,WAJwB;AAKxB,yBAAiB,OALO;AAMxB,gBAAQ,KANgB;AAOxB,4BAAa6d,GAAG,CAAC7d,EAAjB;AAPwB,OAAd,CAAD,CAQVK,EARU,CAQP,OARO,EAQE,UAACC,CAAD,EAAO;AAClB,QAAA,KAAI,CAACiX,SAAL,eAAsBsG,GAAG,CAAC7d,EAA1B;;AACAnD,QAAAA,GAAG,CAACC,EAAJ,CAAOmB,OAAP,CAAe4I,SAAf,CAAyB9J,CAAC,gBAAS8gB,GAAG,CAAC7d,EAAb,YAA1B;AACH,OAXY,CAAb;AAYA2d,MAAAA,QAAQ,CAAClc,MAAT,CAAgBqc,IAAhB;AACH,KAdD;AAeA1e,IAAAA,UAAU,CAACoI,OAAX,CAAmBmW,QAAnB;AACH,GArBD;;AAsBA,OAAKpG,SAAL,GAAiB,UAACyG,OAAD,EAAa;AAC1B,IAAA,KAAI,CAAC5G,cAAL;;AACAra,IAAAA,CAAC,YAAKihB,OAAL,EAAD,CAAiBld,UAAjB,CAA4B,QAA5B,EAF0B,CAG1B;;AACA,QAAMgd,IAAI,GAAG1e,UAAU,CAACS,IAAX,4BAAmCme,OAAnC,SAAb;AACAF,IAAAA,IAAI,CAAC5gB,IAAL,CAAU,eAAV,EAA2B,MAA3B,EAL0B,CAM1B;AACA;AACH,GARD;;AASA,OAAKka,cAAL,GAAsB,YAAM;AACxBhY,IAAAA,UAAU,CAACS,IAAX,CAAgBH,QAAQ,CAAC6d,aAAzB,EAAwCrgB,IAAxC,CAA6C,QAA7C,EAAuD,QAAvD;AACAkC,IAAAA,UAAU,CAACS,IAAX,CAAgB,iBAAhB,EAAmC3C,IAAnC,CAAwC,eAAxC,EAAyD,OAAzD;AACH,GAHD;;AAIA,OAAK0C,IAAL;AACH,CA/DD;;;ACAA/C,GAAG,CAACC,EAAJ,CAAOmhB,OAAP,GAAiB,YAAW;AAAA;;AACxB,MAAM3gB,IAAI,GAAG,IAAb;;AACA,OAAKsC,IAAL,GAAY,YAAM;AACd7C,IAAAA,CAAC,CAAC,gBAAD,CAAD,CAAoBM,IAApB,CAAyB,UAACK,CAAD,EAAIwgB,SAAJ,EAAkB;AACvCnhB,MAAAA,CAAC,CAACmhB,SAAD,CAAD,CAAa/Y,QAAb,CAAsB,SAAtB;AACA,UAAMgZ,OAAO,GAAGphB,CAAC,CAACmhB,SAAD,CAAD,CAAare,IAAb,CAAkB,UAAlB,CAAhB;AACA,UAAMue,QAAQ,GAAGrhB,CAAC,CAAC,QAAD,EAAW;AAAE,iBAAS;AAAX,OAAX,CAAlB;AACAA,MAAAA,CAAC,CAACmhB,SAAD,CAAD,CAAa1W,OAAb,CAAqB4W,QAArB;;AAEA,MAAA,KAAI,CAACC,UAAL,CAAgBF,OAAhB,EAAyBC,QAAzB;AACH,KAPD;AAQH,GATD;;AAUA,OAAKC,UAAL,GAAkB,UAACF,OAAD,EAAUC,QAAV,EAAuB;AAC3C,QAAME,MAAM,GAAG,IAAIC,YAAJ,CAAiBJ,OAAO,CAACvU,GAAR,CAAY,CAAZ,CAAjB,EAAiC;AAC/C4U,MAAAA,gBAAgB,EAAE;AACjBC,QAAAA,QAAQ,EAAE,CACT;AACCC,UAAAA,OAAO,EAAE,MADV;AAEC7P,UAAAA,GAAG,EAAE,GAFN;AAGC8P,UAAAA,IAAI,EAAE,IAHP;AAICC,UAAAA,KAAK,EAAE,KAJR;AAKCC,UAAAA,GAAG,EAAE;AALN,SADS,EAQT;AACCH,UAAAA,OAAO,EAAE,QADV;AAEC7P,UAAAA,GAAG,EAAE,GAFN;AAGC8P,UAAAA,IAAI,EAAE,IAHP;AAICC,UAAAA,KAAK,EAAE,KAJR;AAKCC,UAAAA,GAAG,EAAE;AALN,SARS,EAeT;AACCH,UAAAA,OAAO,EAAE,mBAAY,CAAG,CADzB;AAEC7P,UAAAA,GAAG,EAAE,GAFN;AAGC8P,UAAAA,IAAI,EAAE,IAHP;AAICC,UAAAA,KAAK,EAAE,KAJR;AAKCC,UAAAA,GAAG,EAAE;AALN,SAfS,EAsBT;AACCH,UAAAA,OAAO,EAAE,aADV;AAEC7P,UAAAA,GAAG,EAAE,GAFN;AAGC8P,UAAAA,IAAI,EAAE,IAHP;AAICC,UAAAA,KAAK,EAAE,IAJR;AAKCC,UAAAA,GAAG,EAAE;AALN,SAtBS,EA6BT;AACCH,UAAAA,OAAO,EAAE,eADV;AAEC7P,UAAAA,GAAG,EAAE,GAFN;AAGC8P,UAAAA,IAAI,EAAE,IAHP;AAICC,UAAAA,KAAK,EAAE,KAJR;AAKCC,UAAAA,GAAG,EAAE;AALN,SA7BS,EAoCT;AACCH,UAAAA,OAAO,EAAE,cADV;AAEC7P,UAAAA,GAAG,EAAE,IAFN;AAGC8P,UAAAA,IAAI,EAAE,IAHP;AAICC,UAAAA,KAAK,EAAE,KAJR;AAKCC,UAAAA,GAAG,EAAE;AALN,SApCS;AADO,OAD6B;AA+C/CC,MAAAA,OAAO,EAAE;AACLC,QAAAA,iBAAiB,EAAEX,QAAQ,CAACxU,GAAT,CAAa,CAAb,CADd;AAELoV,QAAAA,yBAAyB,EAAE,IAFtB;AAGRC,QAAAA,OAAO,EAAE,CACR;AACC9gB,UAAAA,IAAI,EAAE,MADP;AAEC+gB,UAAAA,cAAc,EAAE;AAFjB,SADQ,EAKR;AACC/gB,UAAAA,IAAI,EAAE,QADP;AAEC+gB,UAAAA,cAAc,EAAE;AAFjB,SALQ,EASR;AACC/gB,UAAAA,IAAI,EAAE,aADP;AAEC+gB,UAAAA,cAAc,EAAE;AAFjB,SATQ,EAaR;AACC/gB,UAAAA,IAAI,EAAE,eADP;AAEC+gB,UAAAA,cAAc,EAAE;AAFjB,SAbQ,EAiBR;AACC/gB,UAAAA,IAAI,EAAE,cADP;AAEC+gB,UAAAA,cAAc,EAAE;AAFjB,SAjBQ;AAHD,OA/CsC;AAyE/CpE,MAAAA,WAAW,EAAE;AACZ7T,QAAAA,IAAI,EAAE,EADM;AAEZkY,QAAAA,WAAW,EAAE;AAFD,OAzEkC;AA6E/CC,MAAAA,KAAK,EAAE;AACNC,QAAAA,cAAc,EAAE;AADV,OA7EwC;AAgF/CC,MAAAA,aAAa,EAAE;AAhFgC,KAAjC,CAAf;AAkFA,GAnFE;;AAoFH,OAAK1f,IAAL;AACA,CAjGD;;AAmGA7C,CAAC,CAAC0B,QAAD,CAAD,CAAY6G,KAAZ,CAAkB,YAAW;AAC5B,MAAMia,SAAS,GAAG1iB,GAAG,CAACC,EAAJ,CAAOmhB,OAAP,EAAlB;AACA,CAFD;;;ACnGA,SAASuB,aAAT,GAAyB;AACrBziB,EAAAA,CAAC,CAAC,gBAAD,CAAD,CAAoBkK,IAApB,CAAyB,EAAzB;AACAlK,EAAAA,CAAC,CAAC,iBAAD,CAAD,CAAqBkK,IAArB,CAA0B,EAA1B;AACA,MAAIwY,WAAW,GAAG1iB,CAAC,CAAC,UAAD,CAAD,CAAciF,GAAd,EAAlB;AACA,MAAI0d,QAAQ,GAAG3iB,CAAC,CAAC,WAAD,CAAD,CAAeiF,GAAf,EAAf;AACA,MAAI2d,aAAa,GAAG5iB,CAAC,CAAC,YAAD,CAAD,CAAgBiF,GAAhB,EAApB;AACA,MAAI4d,aAAa,GAAG7iB,CAAC,CAAC,eAAD,CAAD,CAAmBiF,GAAnB,EAApB;AACA,MAAI6d,KAAK,GAAG9iB,CAAC,CAAC,kBAAD,CAAD,CAAsBiF,GAAtB,EAAZ;AACA,MAAI8d,SAAS,GAAG/iB,CAAC,CAAC,YAAD,CAAD,CAAgBiF,GAAhB,EAAhB;AACA,MAAI+d,QAAQ,GAAGhjB,CAAC,CAAC,WAAD,CAAD,CAAeiF,GAAf,EAAf;AACA,MAAIge,QAAQ,GAAG,UAAf;;AAEA,MAAI,CAACA,QAAQ,CAACjiB,IAAT,CAAc2hB,QAAd,CAAL,EAA8B;AAC1B3iB,IAAAA,CAAC,CAAC,gBAAD,CAAD,CAAoBkK,IAApB,CAAyB,+BAAzB;AACH;;AACD,MAAI,CAAC+Y,QAAQ,CAACjiB,IAAT,CAAc4hB,aAAd,CAAL,EAAmC;AAC/B5iB,IAAAA,CAAC,CAAC,iBAAD,CAAD,CAAqBkK,IAArB,CAA0B,oCAA1B;AACH;;AACD,MAAIwY,WAAW,IAAI,EAAf,IAAqBC,QAAQ,IAAI,EAAjC,IAAuCC,aAAa,IAAI,EAAxD,IAA8DK,QAAQ,CAACjiB,IAAT,CAAc2hB,QAAd,CAA9D,IAAyFM,QAAQ,CAACjiB,IAAT,CAAc4hB,aAAd,CAA7F,EAA2H;AACvH5iB,IAAAA,CAAC,CAAC2F,IAAF,CAAO;AACHqK,MAAAA,IAAI,EAAE,KADH;AAEHpK,MAAAA,GAAG,EAAE,2BAFF;AAGHE,MAAAA,IAAI,EAAE;AAAEod,QAAAA,gBAAgB,EAAEJ,KAApB;AAA2BK,QAAAA,QAAQ,EAAER,QAArC;AAA+CS,QAAAA,aAAa,EAAER,aAA9D;AAA6ES,QAAAA,SAAS,EAAEN,SAAxF;AAAmGO,QAAAA,QAAQ,EAAEN,QAA7G;AAAuHO,QAAAA,aAAa,EAAEV;AAAtI,OAHH;AAIHlQ,MAAAA,QAAQ,EAAE,MAJP;AAKHlC,MAAAA,OAAO,EAAE,iBAAU3K,IAAV,EAAgB;AACrB,YAAIA,IAAI,IAAI,MAAZ,EAAoB;AAChB,cAAI0d,IAAI,GAAGxjB,CAAC,CAACyjB,SAAF,CAAY3d,IAAZ,CAAX;AACA9F,UAAAA,CAAC,CAAC,WAAD,CAAD,CAAeiF,GAAf,CAAmBue,IAAI,CAACE,QAAxB;AACA1jB,UAAAA,CAAC,CAAC,aAAD,CAAD,CAAiBiF,GAAjB,CAAqBue,IAAI,CAACG,MAA1B;AACA3jB,UAAAA,CAAC,CAAC,gBAAD,CAAD,CAAoBkK,IAApB,CAAyBsZ,IAAI,CAACE,QAA9B;AACA1jB,UAAAA,CAAC,CAAC,kBAAD,CAAD,CAAsBkK,IAAtB,CAA2BsZ,IAAI,CAACG,MAAhC;AACA3jB,UAAAA,CAAC,CAAC,aAAD,CAAD,CAAiB6K,GAAjB,CAAqB,SAArB,EAAgC,MAAhC;AACA7K,UAAAA,CAAC,CAAC,eAAD,CAAD,CAAmBmI,IAAnB,CAAwB,UAAxB,EAAoC,KAApC;AACH,SARD,MASK;AACDnI,UAAAA,CAAC,CAAC,WAAD,CAAD,CAAeiF,GAAf,CAAmB,EAAnB;AACAjF,UAAAA,CAAC,CAAC,aAAD,CAAD,CAAiBiF,GAAjB,CAAqB,EAArB;AACAjF,UAAAA,CAAC,CAAC,gBAAD,CAAD,CAAoBkK,IAApB,CAAyB,EAAzB;AACAlK,UAAAA,CAAC,CAAC,kBAAD,CAAD,CAAsBkK,IAAtB,CAA2B,EAA3B;AACAlK,UAAAA,CAAC,CAAC,aAAD,CAAD,CAAiB6K,GAAjB,CAAqB,SAArB,EAAgC,OAAhC;AACA7K,UAAAA,CAAC,CAAC,aAAD,CAAD,CAAiBkK,IAAjB,CAAsB,oCAAtB;AACAlK,UAAAA,CAAC,CAAC,eAAD,CAAD,CAAmBmI,IAAnB,CAAwB,UAAxB,EAAoC,IAApC;AACH;AAEJ,OAzBE;AA0BH5C,MAAAA,KAAK,EAAE,eAAUqe,MAAV,EAAkB,CACrB;AACH;AA5BE,KAAP;AA8BH,GA/BD,MAgCK;AACD,QAAIlB,WAAW,IAAI,EAAnB,EAAuB;AACnB1iB,MAAAA,CAAC,CAAC,aAAD,CAAD,CAAiBkK,IAAjB,CAAsB,2BAAtB;AACH,KAFD,MAGK,IAAIyY,QAAQ,IAAI,EAAhB,EAAoB;AACrB3iB,MAAAA,CAAC,CAAC,aAAD,CAAD,CAAiBkK,IAAjB,CAAsB,wBAAtB;AACH,KAFI,MAGA,IAAI0Y,aAAa,IAAI,EAArB,EAAyB;AAC1B5iB,MAAAA,CAAC,CAAC,aAAD,CAAD,CAAiBkK,IAAjB,CAAsB,6BAAtB;AACH;;AACDlK,IAAAA,CAAC,CAAC,aAAD,CAAD,CAAiB6K,GAAjB,CAAqB,SAArB,EAAgC,OAAhC;AACA;;AACA7K,IAAAA,CAAC,CAAC,eAAD,CAAD,CAAmBmI,IAAnB,CAAwB,UAAxB,EAAoC,IAApC;AACH;AACJ;;AAEDnI,CAAC,CAAC,eAAD,CAAD,CAAmB6jB,QAAnB,CAA4B,UAAUtgB,CAAV,EAAa;AACrC,MAAIA,CAAC,CAACqV,KAAF,IAAW,CAAX,IAAgBrV,CAAC,CAACqV,KAAF,IAAW,CAA3B,KAAiCrV,CAAC,CAACqV,KAAF,GAAU,EAAV,IAAgBrV,CAAC,CAACqV,KAAF,GAAU,EAA3D,CAAJ,EAAoE;AAChE,WAAO,KAAP;AACH;AACJ,CAJD;;;AClEA,IAAIkL,QAAQ,GAAGpiB,QAAQ,CAACqiB,cAAT,CAAwB,SAAxB,CAAf;AACA,IAAI7B,OAAO,GAAGxgB,QAAQ,CAACsiB,gBAAT,CAA0B,6CAA1B,CAAd;;AAEA,IAAIF,QAAQ,KAAK,IAAjB,EAAuB;AACnB5B,EAAAA,OAAO,CAAC+B,OAAR,CAAgB,UAAApU,EAAE,EAAI;AAClBA,IAAAA,EAAE,CAACqU,QAAH,GAAc,KAAd;AACH,GAFD;AAGH;;AACD,SAASC,eAAT,GAA2B;AACnBjC,EAAAA,OAAO,CAAC+B,OAAR,CAAgB,UAAApU,EAAE,EAAI;AAClBA,IAAAA,EAAE,CAACqU,QAAH,GAAc,CAACJ,QAAQ,CAACM,OAAxB;AACH,GAFD;AAGP;;AAED/a,MAAM,CAACgb,MAAP,GAAgB,YAAY;AACxB,MAAIP,QAAQ,KAAK,IAAjB,EAAuB;AACnBA,IAAAA,QAAQ,CAACM,OAAT,GAAmB,KAAnB;AACH;AACJ,CAJD;;AAMA,SAASE,aAAT,CAAuBC,QAAvB,EAAiC;AAC7B,MAAIC,QAAQ,GAAG9iB,QAAQ,CAACqiB,cAAT,CAAwB,UAAUQ,QAAQ,CAACthB,EAA3C,CAAf;;AACA,MAAIshB,QAAQ,CAACljB,KAAT,KAAmB,IAAvB,EAA6B;AACzBrB,IAAAA,CAAC,CAACwkB,QAAD,CAAD,CAAY3Z,GAAZ,CAAgB,YAAhB,EAA8B,QAA9B;AACH,GAFD,MAGK;AACD7K,IAAAA,CAAC,CAACwkB,QAAD,CAAD,CAAY3Z,GAAZ,CAAgB,YAAhB,EAA8B,SAA9B;AACH;AACJ","file":"scripts.js","sourcesContent":["const App = {};\r\nApp.UI = {};\r\n\r\n// Extend jQuery with attribute toggle function\r\n$.fn.toggleAttr = function(attr, val1, val2) {\r\n\treturn this.each(function() {\r\n\t\tconst self = $(this);\r\n\t\tif(self.attr(attr) == val1) {\r\n\t\t\tself.attr(attr, val2);\r\n\t\t}\r\n\t\telse {\r\n\t\t\tself.attr(attr, val1);\r\n\t\t}\r\n\t});\r\n};\r\n\r\n// removeClass by wildcard\r\n$.fn.removeClassRegex = function(regex) {\r\n\treturn $(this).removeClass(function(i, classes) {\r\n\t\treturn classes.split(/\\s+/).filter(function(c) {\r\n\t\t\treturn regex.test(c);\r\n\t\t}).join(' ');\r\n\t});\r\n};","App.Helpers = {\r\n\tCreateCookie: function(name, value, days) {\r\n\t\tconst expiryDate = new Date(new Date().getTime() + (days * 24 * 60 * 60 * 1000));\r\n\t\tdocument.cookie = name + \"=\" + value + \";path=/;expires=\" + expiryDate.toUTCString();\r\n\t},\r\n\tDestroyCookie: function(name) {\r\n\t\tApp.Helpers.CreateCookie(name, \"\", -1);\r\n\t},\r\n\tPositionToString: function (position) {\r\n\t    return `${position.coords.latitude},${position.coords.longitude}`;\r\n\t},\r\n    AjaxVerificationToken: null\r\n}","App.UI.Accordion = function($container, options = {}) {\r\n    const self = this;\r\n    const defaults = {\r\n        sectionSelector: '.accordion__section',\r\n        togglerSelector: '.accordion__header',\r\n        contentSelector: '.accordion__body'\r\n    };\r\n    const settings = $.extend(true, {}, defaults, options);\r\n    this.init = () => {\r\n        if($container.find(settings.sectionSelector).length < 1) { return; }\r\n        $container.attr({ 'role': 'tablist', 'aria-live': 'polite'});\r\n        $container.find(settings.sectionSelector).each((i, section) => {\r\n            const id = `accordion-${App.UI.Helpers.RandomString()}`;\r\n            const $section = $(section);\r\n            const $togglerButton = $('<button/>', {\r\n                'type': 'button',\r\n                'id': `${id}-header`,\r\n                'aria-controls': id,\r\n                'aria-expanded': 'false',\r\n                'role': 'tab',\r\n                'class': $section.find(settings.togglerSelector).attr('class'),\r\n                'html': $section.find(settings.togglerSelector).html()\r\n            }).on('click', function (e) {\r\n                self.toggleAccordion($(this));\r\n            });;\r\n            $section.find(settings.togglerSelector).after($togglerButton).remove();\r\n            $section.find(settings.contentSelector).attr({\r\n                'hidden': 'hidden',\r\n                'aria-labelledby': `${id}-header`,\r\n                'role': 'tabpanel',\r\n                'id': id\r\n            });\r\n        });\r\n        if($container.find(settings.sectionSelector).length === 1) {\r\n            this.toggleAccordion($container.find(settings.togglerSelector).first());\r\n        };\r\n    };\r\n    this.toggleAccordion = ($toggler) => {\r\n        const $body = $toggler.next(settings.contentSelector);\r\n        if($body.attr('hidden') === 'hidden') {\r\n            $body.removeAttr('hidden');\r\n            $toggler.attr('aria-expanded', 'true');\r\n            return;\r\n        }\r\n        $body.attr('hidden', 'hidden');\r\n        $toggler.attr('aria-expanded', 'false');\r\n    };\r\n    this.init();\r\n}","App.UI.AddressLookup = function($lookup) {\r\n\tconst self = this;\r\n\tconst $lookupSearch = $lookup.find('[data-postcode-search]');\r\n\tconst $lookupResult = $lookup.find('[data-postcode-result]');\r\n\tconst $lookupForm = $lookup.find('[data-postcode-form]');\r\n\tlet lookupData;\r\n\tthis.init = () => {\r\n\t    $lookupResult.attr('aria-hidden', 'true');\r\n\t    $lookupForm.attr('aria-hidden', 'true');\r\n\t\tif (App.UI.Helpers.AnyHasValue($lookupForm.find('input:not([name=\"IsAddressCorrect\"])')) || $lookupForm.find('.form__error').length > 0) {\r\n\t\t    $lookupSearch.find('[data-postcode-search-fallback]').attr('aria-hidden', 'true');\r\n\t\t    $lookupForm.attr('aria-hidden', 'false');\r\n\t\t}\r\n\t\tlet formInputIds = [];\r\n\t\t$.each($lookupForm.find(':input'), (i, input) => {\r\n\t\t    formInputIds.push($(input).attr('id'));\r\n\t\t});\r\n        $lookupResult.find('select').attr('aria-live', 'polite').attr('aria-relevant', 'additions text').attr('aria-controls', formInputIds.join(' '));\r\n\r\n        //honey\r\n        $lookupSearch.append('<div style=\"display:none;\"><input type=\"text\" name=\"postcodelookup\" /></div>');\r\n        $lookupResult.append('<div style=\"display:none;\"><input type=\"text\" name=\"addresslookup\" /></div>');\r\n\r\n\t\tthis.bindControls();\r\n\t};\r\n\tthis.bindControls = () => {\r\n\t\t$lookupSearch.find('button').on('click', (e) => {\r\n\t\t\tthis.populateResults();\r\n\t\t}).on('keydown', (e) => {\r\n\t\t\tif(e.keyCode != 13 && e.keyCode != 32) { return; }\r\n\t\t\tthis.populateResults();\r\n\t\t});\r\n        $lookupSearch.find('input[name!=\"postcodelookup\"]').on('keydown', (e) => {\r\n\t\t\tif(e.keyCode != 13) { return; }\r\n\t\t\te.preventDefault();\r\n\t\t\tthis.populateResults();\r\n\t\t});\r\n\t\t$lookupSearch.find('[data-postcode-search-fallback] a').on('click', (e) => {\r\n\t\t\te.preventDefault();\r\n\t\t\tthis.showForm();\r\n\t\t\t$lookupResult.attr('aria-hidden', 'true');\r\n\t\t});\r\n        $lookupResult.find('select').on('change', function (e) {\r\n\t\t\tconst option = $(this).val();\r\n\t\t\tself.populateForm(option);\r\n\t\t});\r\n\t};\r\n\tthis.showResults = () => {\r\n\t\t$lookupSearch.find('[data-postcode-search-fallback]').attr('aria-hidden', 'false');\r\n\t\t$lookupResult.attr('aria-hidden', 'false');\r\n\t\t$lookupForm.attr('aria-hidden', 'true');\r\n\t};\r\n\tthis.populateResults = () => {\r\n        var postcodehoney = $lookupSearch.find('input[name=\"postcodelookup\"]').val();\r\n        if (postcodehoney.length != 0) {\r\n            console.log('jacked');\r\n            return;\r\n        }\r\n\r\n        this.error(false);\r\n        this.buttonState(false);\r\n        var postcode = $lookupSearch.find('input[name!=\"postcodelookup\"]').val();\r\n        if (typeof postcode === 'undefined' || postcode == null || postcode.replace(/\\s/g, '').length < 1) {\r\n            $lookupSearch.find('input[name!=\"postcodelookup\"]').val('');\r\n            this.error('Please enter your postcode');\r\n            this.buttonState(true);\r\n            return;\r\n        }\r\n\t\t$.ajax({\r\n\t\t\turl: '/umbraco/surface/PostCodeAnywhereService/GetAddressesInPostcode',\r\n\t\t\tmethod: 'POST',\r\n\t\t\tdata: {\r\n\t\t\t\tpostcode\r\n            },\r\n            headers: {\r\n                'RequestVerificationToken': App.Helpers.AjaxVerificationToken \r\n            }\r\n        }).done((data) => {\r\n\t\t    if (data.Exceeded)\r\n\t\t    {\r\n\t\t        this.error('You have exceeded the amount of postcode searches a user is allowed, please try again in one minute.');\r\n\t\t        return;\r\n\t\t    }\r\n\r\n\t\t\tdata = data.Items;\r\n\t\t\tif (data[0].Error) {\r\n\t\t\t    this.error(`${data[0].Cause} ${data[0].Resolution}`);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tlookupData = data;\r\n\t\t\t\tconst $select = $lookupResult.find('select');\r\n\t\t\t\tlet output = '';\r\n\t\t\t\t$.each(lookupData, (i, row) => {\r\n\t\t\t\t\toutput += `<option value=\"${parseInt(row.Id)}\">${row.StreetAddress}, ${row.Place}</option>`;\r\n\t\t\t\t});\r\n\t\t\t\t$select.html(output);\r\n\t\t\t\tthis.showResults();\r\n\r\n\t\t\t}\r\n\r\n\r\n\t\t}).fail((jqXHR, textStatus, errorThrown) => {\r\n\t\t    this.error(errorThrown);\r\n\t\t}).always(() => {\r\n\t\t    this.buttonState(true);\r\n\t\t});\r\n\t};\r\n\tthis.showForm = () => {\r\n\t\t$lookupSearch.find('[data-postcode-search-fallback]').attr('aria-hidden', 'true');\r\n\t\t$lookupResult.attr('aria-hidden', 'false');\r\n\t\t$lookupForm.attr('aria-hidden', 'false');\r\n\t};\r\n    this.populateForm = (option) => {\r\n\r\n        var addresshoney = $lookupResult.find('input[name=\"addresslookup\"]').val();\r\n        if (addresshoney.length != 0) {\r\n            console.log('jacked');\r\n            return;\r\n        }\r\n\r\n\r\n\t    this.buttonState(false);\r\n\t\t$.ajax({\r\n\t\t\turl: '/umbraco/surface/PostCodeAnywhereService/GetAddressFromId',\r\n\t\t\tmethod: 'POST',\r\n\t\t\tdata: {\r\n\t\t\t\tid: option\r\n            },\r\n            headers: {\r\n                'RequestVerificationToken': App.Helpers.AjaxVerificationToken \r\n            }\r\n        }).done((data) => {\r\n            if (data.Exceeded) {\r\n                this.error('You have exceeded the amount of addressid searches a user is allowed, please try again in one minute.');\r\n                return;\r\n            }\r\n\r\n\t\t\tdata = data.Items[0];\r\n\t\t\tconst postcode = $lookupSearch.find('input').val().toUpperCase();\r\n\t\t\t$lookupForm.find('[data-postcode-form-address1]').val(`${data.BuildingNumber} ${data.Street}`);\r\n            $lookupForm.find('[data-postcode-form-address2]').val(this.formatValues([data.Company, data.SubBuilding, data.BuildingName]).join(', '));\r\n            $lookupForm.find('[data-postcode-form-address3]').val(data.Line3);\r\n\t\t\t$lookupForm.find('[data-postcode-form-town]').val(data.City);\r\n\t\t\t$lookupForm.find('[data-postcode-form-county]').val(data.AdminAreaName);\r\n\t\t\t$lookupForm.find('[data-postcode-form-country]').val(data.CountryName);\r\n\t\t\t$lookupForm.find('[data-postcode-form-postcode]').val(data.PostalCode);\r\n\t\t\tthis.showForm();\r\n\t\t}).fail((jqXHR, textStatus, errorThrown) => {\r\n\t\t    this.error(errorThrown);\r\n\t\t}).always(() => {\r\n\t\t    this.buttonState(true);\r\n\t\t});\r\n\t};\r\n\tthis.error = (errorMessage) => {\r\n\t    $lookupSearch.find('.form__error').remove();\r\n\t    const $errorMessage = $('<div/>', {\r\n\t        'class': 'form__error',\r\n\t        'text': errorMessage,\r\n\t        'role': 'alert',\r\n\t        'aria-live': 'assertive'\r\n\t    });\r\n\t    if (errorMessage) {\r\n\t        $lookupSearch.find('.form__label').append($errorMessage);\r\n\t    }\r\n\t};\r\n\tthis.buttonState = (enabled) => {\r\n\t    const $button = $lookupSearch.find('button');\r\n\t    if (enabled) {\r\n\t        $button.prop('disabled', false).removeClass('button--loading');\r\n\t    }\r\n\t    else {\r\n\t        $button.prop('disabled', true).addClass('button--loading');\r\n\t    }\r\n\t};\r\n\tthis.formatValues = (valueArray) => {\r\n\t\tconst sanitisedArray = [];\r\n\t\t$.each(valueArray, (i, value) => {\r\n\t\t\tif (value != '') {\r\n\t\t\t\tsanitisedArray.push(value);\r\n\t\t\t}\r\n\t\t});\r\n\t\treturn sanitisedArray;\r\n\t};\r\n\tthis.init();\r\n};\r\n\r\n$(document).ready(function() {\r\n    $('[data-postcode]').each((i, form) => {\r\n\t\tconst jsAddressLookup = new App.UI.AddressLookup($(form));\r\n\t});\r\n});","App.UI.ArticleNavigation = function ($selector) {\r\n    const self = this;\r\n    let $article;\r\n    let $articleNavigation;\r\n    let $articleNavigationTitle;\r\n    let $articleNavigationList;\r\n    let sections = [];\r\n    this.init = () => {\r\n        if (!$selector) { return; }\r\n        $article = $selector.eq(0);\r\n        this.addIDs();\r\n        this.buildNavigation();\r\n        this.bindEvents();\r\n        this.bindControls();\r\n        if (window.matchMedia('(min-width: 1160px) and (min-height: 700px)').matches) {\r\n            this.showNavigation();\r\n        }\r\n    };\r\n    /**\r\n     * @description Bind events from the browser.\r\n     */\r\n    this.bindEvents = () => {\r\n        $(window).on('resize', () => {\r\n            this.positionNavigation();\r\n        });\r\n    };\r\n    /**\r\n     * @description Binds events for user interactions.\r\n     */\r\n    this.bindControls = () => {\r\n        $articleNavigationList.find('a[href^=\"#\"]').on('click', function (e) {\r\n            e.preventDefault();\r\n            const $target = $($(this).attr('href'));\r\n            $(window).scrollTop($target.offset().top);\r\n            App.UI.Helpers.MoveFocus($target);\r\n        });\r\n        $articleNavigationTitle.on('click', (e) => {\r\n            this.toggleNavigation();\r\n        });\r\n    };\r\n    /**\r\n     * @description Finds headers inside of the article and adds\r\n     * IDs to them, so we can link to each one.\r\n     */\r\n    this.addIDs = () => {\r\n        $article.find('h2, h3').each((i, header) => {\r\n            const title = $(header).text();\r\n            const slug = this.makeSlug(title);\r\n            const level = $(header).prop('tagName').substr(-1, 1);\r\n            sections.push({ title, slug, level });\r\n            $(header).attr('id', slug);\r\n        });\r\n    };\r\n    /**\r\n     * @description Takes a human-readible text string and \r\n     * converts it to a URL compatible 'slug'. Also appends a \r\n     * random five character string to the end to ensure\r\n     * uniqueness.\r\n     * @param  {string} string The text string to convert to a slug.\r\n     * @return {string}        The resulting slug.\r\n     */\r\n    this.makeSlug = (string) => {\r\n        return App.UI.Helpers.Slugify(string) + '-' + App.UI.Helpers.RandomString();\r\n    };\r\n    /**\r\n     * @description Build containers used for the floating \r\n     * navigation.\r\n     */\r\n    this.buildNavigation = () => {\r\n        $articleNavigation = $('<nav/>', {\r\n            'class': 'article-navigation content content--list'\r\n        });\r\n        $articleNavigationTitle = $('<button/>', {\r\n            'type': 'button',\r\n            'class': 'article-navigation__title',\r\n            'text': 'Sections on this page',\r\n            'tabindex': 0,\r\n            'aria-expanded': 'false',\r\n            'aria-controls': 'articleNavigationList'\r\n        });\r\n        $articleNavigationList = $('<ol/>', {\r\n            'class': 'article-navigation__list',\r\n            'aria-hidden': 'true',\r\n            'id': 'articleNavigationList'\r\n        });\r\n        $articleNavigation.append($articleNavigationTitle).append($articleNavigationList);\r\n        $article.prepend($articleNavigation);\r\n        this.populateNavigation();\r\n        this.positionNavigation();\r\n    };\r\n    /**\r\n     * @description Populate the container with list items.\r\n     */\r\n    this.populateNavigation = () => {\r\n        let returnHtml = '';\r\n        $.each(sections, (i, section) => {\r\n            returnHtml += `<li class=\"article-navigation__item\" aria-level=\"${section.level}\"><a aria-label=\"Skip to ${section.title}\" href=\"#${section.slug}\">${section.title}</a></li>`;\r\n        });\r\n        $articleNavigationList.append(returnHtml);\r\n        $articleNavigation.show();\r\n    };\r\n    /**\r\n     * @description Position container to align to article body.\r\n     */\r\n    this.positionNavigation = () => {\r\n        $articleNavigation.css({\r\n            'left': ($article.offset().left + $article.outerWidth()) - $articleNavigation.outerWidth(),\r\n            'width': $article.outerWidth()\r\n        });\r\n    };\r\n    this.showNavigation = () => {\r\n        $articleNavigationList.attr('aria-hidden', 'false');\r\n        $articleNavigationTitle.attr('aria-expanded', 'true');\r\n    };\r\n    this.hideNavigation = () => {\r\n        $articleNavigationList.attr('aria-hidden', 'true');\r\n        $articleNavigationTitle.attr('aria-expanded', 'false');\r\n    };\r\n    this.toggleNavigation = () => {\r\n        if ($articleNavigationList.attr('aria-hidden') === 'true') {\r\n            this.showNavigation();\r\n            return;\r\n        }\r\n        this.hideNavigation();\r\n    };\r\n    this.init();\r\n};\r\n","App.UI.CCNumber = function($field) {\r\n\tconst self = this;\r\n\tthis.init = () => {\r\n\t\t$field.addClass('cc-number').attr('placeholder', '0000000000000000');\r\n\t\tthis.cardIcon();\r\n\t\tthis.bindControls();\r\n\t};\r\n\tthis.bindControls = () => {\r\n\t\t$field.on('keyup change', () => {\r\n\t\t\tconst number = $field.val();\r\n\t\t\tconst cardType = this.cardTypeFromNumber(number);\r\n\t\t\tthis.cardIcon(cardType);\r\n\t\t});\r\n\t};\r\n\tthis.cardIcon = (cardType = '') => {\r\n\t    if($field.siblings('.cc-number__card').length === 0) {\r\n\t\t\t$field.after('<svg focusable=\"false\" class=\"cc-number__card\" role=\"presentation\"><use xlink:href=\"#cc\"></use></svg>');\r\n\t\t}\r\n\t\tlet cardTypeId = 'cc';\r\n\t\tif(cardType != '') {\r\n\t\t\tcardTypeId = `cc-${cardType}`;\r\n\t\t}\r\n\t\t$field.siblings('.cc-number__card').replaceWith(`<svg focusable=\"false\" class=\"cc-number__card\" role=\"presentation\"><use xlink:href=\"#${cardTypeId}\"></use></svg>`);\r\n\t};\r\n\tthis.cardTypeFromNumber = (number) => {\r\n\t\tconst regex = {\r\n\t\t\tvisa: /^4[0-9]{12}(?:[0-9]{3})?$/,\r\n\t\t\tmastercard: /^5[1-5][0-9]{14}$/,\r\n\t\t\tamex: /^3[47][0-9]{13}$/,\r\n\t\t\tdiners: /^3(?:0[0-5]|[68][0-9])[0-9]{11}$/,\r\n\t\t\tjcb: /^(?:2131|1800|35\\d{3})\\d{11}$/,\r\n\t\t\tdiscover: /^6(?:011|5[0-9]{2})[0-9]{12}$/\r\n\t\t};\r\n\t\tnumber = number.toString().replace(/-|\\s/g, '');\r\n\t\tif(regex.visa.test(number)) {\r\n\t\t\treturn 'visa';\r\n\t\t}\r\n\t\telse if(regex.mastercard.test(number)) {\r\n\t\t\treturn 'mastercard';\r\n\t\t}\r\n\t\telse if(regex.amex.test(number)) {\r\n\t\t\treturn 'amex';\r\n\t\t}\r\n\t\telse if(regex.diners.test(number)) {\r\n\t\t\treturn 'diners';\r\n\t\t}\r\n\t\telse if(regex.jcb.test(number)) {\r\n\t\t\treturn 'jcb';\r\n\t\t}\r\n\t\telse if(regex.discover.test(number)) {\r\n\t\t\treturn 'discover';\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\tthis.init();\r\n};","App.UI.Checkbox = function() {\r\n    const self = this;\r\n    const checkedClass = 'checkbox--checked';\r\n    this.init = () => {\r\n        this.checkOnLoad();\r\n        this.bindControls();\r\n    };\r\n    this.checkOnLoad = () => {\r\n        $('.checkbox input:radio').each(() => {\r\n            $('.checkbox:has(input:radio:checked)').addClass(checkedClass);\r\n        });\r\n        $('.checkbox input:checkbox').each(() => {\r\n            $('.checkbox:has(input:checkbox:checked)').addClass(checkedClass);\r\n        });\r\n    };\r\n    this.bindControls = () => {\r\n        $(document).on('change', '.checkbox input:radio', () => {\r\n            $('.checkbox:has(input:radio:checked)').addClass(checkedClass);\r\n            $('.checkbox:has(input:radio:not(:checked))').removeClass(checkedClass);\r\n        });\r\n        $(document).on('change', '.checkbox input:checkbox', () => {\r\n            $('.checkbox:has(input:checkbox:checked)').addClass(checkedClass);\r\n            $('.checkbox:has(input:checkbox:not(:checked))').removeClass(checkedClass);\r\n        });\r\n    };\r\n    this.init();\r\n};\r\n\r\n$(document).ready(function() {\r\n    const jsCheckbox = new App.UI.Checkbox();\r\n});","App.UI.CookieNotification = function() {\r\n\tconst self = this;\r\n\tthis.init = () => {\r\n\t\tthis.bindControls();\r\n\t};\r\n\tthis.bindControls = () => {\r\n\t\t$(document).on('click', '.cookie-notification__close', function(e) {\r\n\t\t\tconst $banner = $(this).closest('.cookie-notification');\r\n\t\t\tconst cookieName = $banner.attr('id');\r\n\t\t\tApp.Helpers.CreateCookie(cookieName, '1', 365); // 365 days is the maximum allowed under cookie legislation\r\n\t\t\t$banner.remove();\r\n\t\t});\r\n\t};\r\n\tthis.init();\r\n};\r\n\r\n$(document).ready(function() {\r\n\tApp.UI.CookieNotification();\r\n});","App.UI.CTAGroup = function($ctaGroup) {\r\n\tconst self = this;\r\n\tconst $banner = $ctaGroup.closest('.banner');\r\n\tlet pinned = false;\r\n\tthis.init = () => {\r\n\t\tthis.bindEvents();\r\n\t};\r\n\tthis.bindEvents = () => {\r\n\t\t$(window).on('load resize scroll', () => {\r\n\t\t\tif(!$banner.length) { return; }\r\n\t\t\tconst bannerPosition = $banner.get(0).getBoundingClientRect();\r\n\t\t\tconst triggerPosition = bannerPosition.top + $banner.outerHeight();\r\n\t\t\tif(App.UI.Helpers.MQ('{>>>}')) {\r\n\t\t\t\tif(triggerPosition <= 0 && pinned === false) {\r\n\t\t\t\t\tthis.pin();\r\n\t\t\t\t}\r\n\t\t\t\telse if(triggerPosition > 0 && pinned === true) {\r\n\t\t\t\t\tthis.unpin();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t};\r\n\tthis.pin = () => {\r\n\t\t$ctaGroup.addClass('card-cta-group--fixed');\r\n\t\tpinned = true;\r\n\t};\r\n\tthis.unpin = () => {\r\n\t\t$ctaGroup.removeClass('card-cta-group--fixed');\r\n\t\tpinned = false;\r\n\t};\r\n\tthis.init();\r\n};\r\n\r\n$(document).ready(function() {\r\n\tconst jsCtaGroup = App.UI.CTAGroup($('.banner .card-cta-group').eq(0));\r\n});","App.UI.DashboardNavigation = function($container) {\r\n\tconst self = this;\r\n\tconst $menu = $container.find('.dashboard-navigation__list');\r\n\tthis.init = () => {\r\n\t\tthis.buildHtml();\r\n\t\tthis.bindControls();\r\n\t\tthis.bindEvents();\r\n\t\tthis.calculateOverflow();\r\n\t};\r\n\tthis.bindControls = () => {\r\n\t\t$(document).on('click', '.dashboard-navigation__overflow-toggle', (e) => {\r\n\t\t\tconst $button = $(e.target);\r\n\t\t\tif($button.attr('aria-expanded') === 'false') {\r\n\t\t\t\t$button.attr('aria-expanded', 'true');\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\t$button.attr('aria-expanded', 'false');\r\n\t\t\treturn;\r\n\t\t});\r\n\t};\r\n\tthis.bindEvents = () => {\r\n\t\t$(window).on('resize', () => {\r\n\t\t\tthis.calculateOverflow();\r\n\t\t});\r\n\t};\r\n\tthis.buildHtml = () => {\r\n\t\tconst randId = App.UI.Helpers.RandomString();\r\n\t\t// Create all the elements\r\n\t\tconst $overflowMenu = $('<ul/>', {\r\n\t\t\t'class': 'dashboard-navigation__overflow-menu',\r\n\t\t\t'id': `overflow-${randId}`,\r\n\t\t\t'aria-controlledby': `overflow-${randId}-toggle`\r\n\t\t});\r\n\t\tconst $overflowToggleButton = $('<button/>', {\r\n\t\t\t'class': 'dashboard-navigation__overflow-toggle',\r\n\t\t\t'id': `overflow-${randId}-toggle`,\r\n\t\t\t'type': 'button',\r\n\t\t\t'html': `More <svg class=\"dashboard-navigation__icon\" focusable=\"false\"><use xlink:href=\"#chevron-down\"></use></svg>`,\r\n\t\t\t'aria-controls': `overflow-${randId}`,\r\n\t\t\t'aria-expanded': 'false'\r\n\t\t});\r\n\t\tconst $navigationListItem = $('<li/>', {\r\n\t\t\t'class': 'dashboard-navigation__item dashboard-navigation__item--overflow',\r\n\t\t});\r\n\t\t$navigationListItem.append($overflowToggleButton).append($overflowMenu);\r\n\t\t$menu.append($navigationListItem);\r\n\t\t$container.addClass('has-overflow')\r\n\t};\r\n\tthis.calculateOverflow = () => {\r\n\t\tconst $overflowMenu = $menu.find('.dashboard-navigation__overflow-menu');\r\n\t\tconst $overflowToggle = $menu.find('.dashboard-navigation__item--overflow');\r\n\r\n\t\t// Reset the state before we try running all these calculations\r\n\t\t$menu.children().removeAttr('hidden');\r\n\t\t$overflowMenu.empty();\r\n\t\tthis.hideOverflowMenu();\r\n\t\t\r\n\t\tconst availableWidth = $menu.width() - $overflowToggle.outerWidth(true);\r\n\t\tlet accumulatedWidth = 0;\r\n\t\t$menu.children('.dashboard-navigation__item:not(.dashboard-navigation__item--overflow)').each((i, item) => {\r\n\t\t\tconst $item = $(item);\r\n\t\t\taccumulatedWidth += $item.outerWidth(true);\r\n\t\t\tif(accumulatedWidth > availableWidth) {\r\n\t\t\t\t$item.clone().appendTo($overflowMenu);\r\n\t\t\t\t$item.attr('hidden', 'hidden');\r\n\t\t\t}\r\n\t\t});\r\n\t\tif(accumulatedWidth > availableWidth) {\r\n\t\t\tthis.showOverflowMenu();\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis.hideOverflowMenu();\r\n\t\t}\r\n\t};\r\n\tthis.showOverflowMenu = () => {\r\n\t\t$container.addClass('has-overflow-visible');\r\n\t};\r\n\tthis.hideOverflowMenu = () => {\r\n\t\t$container.removeClass('has-overflow-visible');\r\n\t};\r\n\tthis.init();\r\n};","App.UI.Datepicker = function ($input) {\r\n    const self = this;\r\n    this.init = () => {\r\n        if (this.supportsDate()) { return; }\r\n        this.initFallback();\r\n    };\r\n    this.initFallback = () => {\r\n        const today = new Date();\r\n        const format = 'YYYY-MM-DD';\r\n        let minDate = $input.attr('min') ? new Date($input.attr('min')) : false;\r\n        let maxDate = $input.attr('max') ? new Date($input.attr('max')) : false;\r\n        const picker = new Pikaday({\r\n            field: $input.get(0),\r\n            format: format,\r\n            firstDay: 1,\r\n            minDate: minDate,\r\n            maxDate: maxDate,\r\n            theme: 'datepicker',\r\n            position: 'bottom left',\r\n            i18n: {\r\n                previousMonth: 'Previous Month',\r\n                nextMonth: 'Next Month',\r\n                months: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],\r\n                weekdays: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\r\n                weekdaysShort: ['S', 'M', 'T', 'W', 'T', 'F', 'S']\r\n            }\r\n        });\r\n        $input.attr('type', 'text').attr('placeholder', format);\r\n    };\r\n    this.supportsDate = () => {\r\n        let el = document.createElement('input');\r\n        el.setAttribute('type', 'date');\r\n        if (el.type === 'text') {\r\n            return false;\r\n        }\r\n        return true;\r\n    };\r\n    this.init();\r\n}\r\n\r\n$(document).ready(function () {\r\n    $('[data-datepicker]').each((i, input) => {\r\n        new App.UI.Datepicker($(input));\r\n    });\r\n});","App.UI.FileUploader = function ($uploader, options) {\r\n\tconst defaults = {\r\n\t\tupload: {\r\n\t\t\turl: false,\r\n\t\t\tfieldName: false,\r\n\t\t\tallowedFileTypes: ['image/jpeg', 'image/png', 'image/gif'],\r\n\t\t\tfileSizeLimit: 5242880, // 5 megabytes\r\n\t\t\tformData: []\r\n\t\t},\r\n\t\tcallback: {\r\n\t\t\tsuccess: function () { },\r\n\t\t\tfailure: function () { }\r\n\t\t}\r\n\t};\r\n\tconst settings = $.extend(true, {}, defaults, options);\r\n\tconst self = this;\r\n\tconst htmlClass = 'file-uploader';\r\n\tconst $uploaderInput = $uploader.find(`.${htmlClass}__input`);\r\n\tconst $uploaderLabel = $uploader.find(`.${htmlClass}__label`);\r\n\tlet droppedFiles;\r\n\tlet defaultLabel;\r\n\tlet allowMultipleFiles = false;\r\n\tthis.init = () => {\r\n\t\tif(this.detectSupport()) {\r\n\t\t\tdefaultLabel = $uploaderLabel.html();\r\n\t\t\tallowMultipleFiles = $uploaderInput.attr('multiple');\r\n\t\t\t$uploader.addClass(`${htmlClass}--enabled`).attr('tabindex', '0');\r\n\t\t\t$uploaderInput.attr('tabindex', '-1');\r\n\t\t\tthis.bindControls();\r\n\t\t};\r\n\t};\r\n\tthis.bindControls = () => {\r\n\t\t$uploader.on('drag dragstart dragend dragover dragenter dragleave drop', (e) => {\r\n\t\t\te.preventDefault();\r\n\t\t\te.stopPropagation();\r\n\t\t}).on('dragover dragenter', () => {\r\n\t\t\t$uploader.addClass(`${htmlClass}--hover`);\r\n\t\t}).on('dragleave dragend drop', () => {\r\n\t\t\t$uploader.removeClass(`${htmlClass}--hover`);\r\n\t\t}).on('drop', (e) => {\r\n\t\t\tthis.validateFiles(e.originalEvent.dataTransfer.files);\r\n\t\t}).on('keydown', (e) => {\r\n\t\t\tif(e.keyCode != 13 && e.keyCode != 32) { return; }\r\n\t\t\t$uploaderInput.trigger('click');\r\n\t\t});\r\n\t\t$uploaderInput.on('change', (e) => {\r\n\t\t    var target = e.target || e.srcElement;\r\n\t\t    this.validateFiles(target.files);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * @description Check for support for drag-n-drop functionality. \r\n\t * @return {boolean} Returns true if support requirements are met. False if not. \r\n\t */\r\n\tthis.detectSupport = () => {\r\n\t\tconst div = document.createElement('div');\r\n\t\treturn (('draggable' in div) || ('ondragstart' in div && 'ondrop' in div)) && 'FormData' in window && 'FileReader' in window;\r\n\t};\r\n\t/**\r\n\t * @description An intermediary function that allows \r\n\t * validating the files that are uploaded. If they're good\r\n\t * they're added to a new array, which is passed on to the\r\n\t * upload function.\r\n\t * @param  {array} files Array of files.\r\n\t */\r\n\tthis.validateFiles = (files) => {\r\n\t    let allowedFiles = [];\r\n\t    let formLabel = [];\r\n\t    let returnedError = false;\r\n\t\t$.each(files, (i, file) => {\r\n\t\t    // Do any filesize limit or mime-type checking here \r\n\t\t    // file.name - file.size - file.type\r\n\t\t    // console.log(file.name, file.size, file.type);\r\n\t\t    if (!allowMultipleFiles && i > 0) {\r\n\t\t        returnedError = { key: 'toomanyfiles', message: 'Please upload only one file.' };\r\n\t\t        return;\r\n\t\t    }\r\n\t\t    if (settings.upload.allowedFileTypes && $.inArray(file.type, settings.upload.allowedFileTypes) === -1) {\r\n\t\t\t\treturnedError = { key: 'filetypenotallowed', message: 'We are unable to upload your image. Please try one of the formats suggested below.' };\r\n\t\t        return;\r\n\t\t    }\r\n\t\t    if (settings.upload.fileSizeLimit && file.size > settings.upload.fileSizeLimit) {\r\n\t\t\t\treturnedError = { key: 'filetoolarge', message: 'We are unable to upload your image. Please try one of the formats suggested below.' };\r\n\t\t\t    return;\r\n\t\t\t}\r\n\t\t\tformLabel.push(file.name);\r\n\t\t\tallowedFiles.push(file);\r\n\t\t});\r\n\t\tif (returnedError && settings.callback && settings.callback.failure) {\r\n\t\t    let func = settings.callback.failure;\r\n\t\t    func.call(this, returnedError.key, returnedError.message);\r\n\t\t}\r\n\t\telse {\r\n\r\n\t\t    if (settings.callback && settings.callback.validationsuccess) {\r\n\t\t        let func = settings.callback.validationsuccess;\r\n\t\t        func.call(this);\r\n\r\n\t\t    }\r\n\t\t}\r\n\t\r\n\t\tthis.updateLabel(formLabel.join(', '));\r\n        this.uploadFiles(allowedFiles);\r\n\t};\r\n\t/**\r\n\t * @description Updates the UI label with what files have been selected.\r\n\t * @param  {string} filename The text to display.\r\n\t */\r\n    this.updateLabel = (filename) => {\r\n        if (typeof filename != 'undefined' && filename != '') {\r\n            $uploaderLabel.html(`<span>${filename}</span><br><small>Your new file has been uploaded, please click save to continue.</small>`);\r\n\t\t\t$uploader.addClass(`${htmlClass}--active`);\r\n\t\t}\r\n\t\telse {\r\n\t\t\t$uploaderLabel.html(defaultLabel);\r\n\t\t\t$uploader.removeClass(`${htmlClass}--active`);\r\n\t\t};\r\n\t};\r\n\t/**\r\n\t * @description Run AJAX request to upload the files.\r\n\t * @param  {array} fileList List of files to upload.\r\n\t */\r\n    this.uploadFiles = (fileList) => {\r\n\t\tif (settings.upload.url && fileList.length > 0) {\r\n\t\t\tlet ajaxData = new FormData();\r\n\t\t\tlet fieldName = $uploaderInput.attr('name');\r\n\t\t\tif (settings.upload.fieldName) {\r\n\t\t\t\tfieldName = settings.upload.fieldName;\r\n\t\t\t}\r\n\t\t\t$.each(settings.upload.formData, (i, row) => {\r\n\t\t\t    ajaxData.append(row.key, row.value);\r\n\t\t\t});\r\n\t\t\tfor (let i = 0; i < fileList.length; i++) {\r\n\t\t\t\tajaxData.append(fieldName, fileList[i]);\r\n\t\t\t};\r\n            // DEBUG\r\n\t\t\t//for(let pair of ajaxData.entries()) {\r\n\t\t\t//\tconsole.log('ajaxData', pair[0], pair[1]);\r\n\t\t\t//}\r\n\t\t\t$.ajax({\r\n\t\t\t\turl: settings.upload.url,\r\n\t\t\t\tmethod: 'POST',\r\n\t\t\t\tdataType: 'json',\r\n\t\t\t\tdata: ajaxData,\r\n\t\t\t\tcache: false,\r\n\t\t\t\tcontentType: false,\r\n\t\t\t\tprocessData: false\r\n\t\t\t}).done((data, textStatus, jqXHR) => {\r\n\t\t\t\t//console.log(data);\r\n\t\t\t\tif (settings.callback && settings.callback.success) {\r\n\t\t\t\t\tlet func = settings.callback.success;\r\n\t\t\t\t\tfunc.call(this, data, textStatus, jqXHR);\r\n\t\t\t\t}\r\n\t\t\t}).fail((jqXHR, textStatus, errorThrown) => {\r\n\t\t\t\t//console.log('FAIL');\r\n\t\t\t\tif (settings.callback && settings.callback.failure) {\r\n\t\t\t\t\tlet func = settings.callback.failure;\r\n\t\t\t\t\tfunc.call(this, textStatus, errorThrown);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t};\r\n\tthis.init();\r\n};","App.UI.Form = function ($form, timeout = null) {\r\n    const self = this;\r\n    this.init = () => {\r\n        this.bindControls();\r\n    };\r\n    this.bindControls = () => {\r\n        $form.on('submit', (e) => {\r\n            $form.find('[type=\"submit\"]').prop('disabled', true).addClass('button--loading');\r\n            if (timeout) {\r\n                setTimeout(() => {\r\n                    $form.find('[type=\"submit\"]').prop('disabled', false).removeClass('button--loading');\r\n                }, timeout * 1000)\r\n            }\r\n        });\r\n    };\r\n    this.init();\r\n}","App.UI.Geopicker = function($input) {\r\n\tconst self = this;\r\n\tthis.init = () => {\r\n\t\tthis.buildHtml();\r\n\t};\r\n\tthis.buildHtml = () => {\r\n\t\tif(!'geolocation' in navigator) { return; } // browser doesn't support geolocation, don't do anything\r\n\t\tconst $geolocateButton = $('<button/>', {\r\n\t\t\t'type': 'button',\r\n\t\t\t'class': 'button button--naked geopicker',\r\n\t\t\t'html': '<svg focusable=\"false\"><use xlink:href=\"#geolocation\"></use></svg>',\r\n\t\t\t'aria-label': 'Automatically find my location',\r\n\t\t\t'title': 'Automatically find my location'\r\n\t\t}).on('click', (e) => {\r\n\t\t    if (localStorage.getItem('location')) {\r\n\t\t        this.populateInput(localStorage.getItem('location'));\r\n\t\t    }\r\n\t\t\telse if (navigator.geolocation) {\r\n\t\t\t    navigator.geolocation.getCurrentPosition((position) => {\r\n\t\t\t        this.populateInput(App.Helpers.PositionToString(position));\r\n\t\t\t    });\r\n\t\t\t}\r\n\t\t});\r\n\t\t$input.after($geolocateButton);\r\n\t};\r\n\tthis.populateInput = (coords) => {\r\n\t    $input.val(coords);\r\n\t    localStorage.setItem('location', coords);\r\n\t};\r\n\tthis.init();\r\n};\r\n\r\n$(document).ready(function() {\r\n\tconst jsGeopicker = new App.UI.Geopicker($('[data-geopicker]'));\r\n});","App.UI.GoogleMaps = function() {\r\n\tconst self = this;\r\n\tlet apiLoaded = false;\r\n\tlet map;\r\n\tthis.init = () => {\r\n\t    if(!$('[data-map]').length || typeof CONFIG.GOOGLE_MAPS_API_KEY == 'undefined') { return; }\r\n\t\tthis.loadApi();\t\r\n\t};\r\n\t/**\r\n\t * @description Checks to see if the Google Maps API has already been loaded\r\n\t * into the page. If it hasn't, it loads it. After the script has been\r\n\t * loaded it initialises the maps on the page.\r\n\t */\r\n\tthis.loadApi = () => {\r\n\t\tif(apiLoaded) { \r\n\t\t\tthis.loadAllMaps();\r\n\t\t\treturn;\r\n\t\t}\r\n\t\t$.when(\r\n\t\t\t$.getScript(`//maps.googleapis.com/maps/api/js?v=3&key=${CONFIG.GOOGLE_MAPS_API_KEY}`),\r\n\t\t\t$.Deferred((deferred) => {\r\n\t\t\t\t$(deferred.resolve);\r\n\t\t\t})\r\n\t\t).done(() => {\r\n\t\t\tapiLoaded = true;\r\n\t\t\tthis.loadAllMaps();\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * @description Finds all the maps on the page and passes them indiviudally\r\n\t * to the loadMap function.\r\n\t */\r\n\tthis.loadAllMaps = () => {\r\n\t\t$('[data-map]').each((i, mapCanvas) => {\r\n\t\t\tthis.loadMap(mapCanvas);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * @description Initialises individual maps, checking for any options\r\n\t * already set on the DOM and using those if present. A marker is placed at\r\n\t * the centre of the map, with a click event attached to it to open Google\r\n\t * Maps in a new tab.\r\n\t * @param canvas {Object}\r\n\t * @param lat {Number}\r\n\t * @param lng {Number}\r\n\t * @param zoom {Number}\r\n\t */\r\n\tthis.loadMap = (canvas, lat = 0, lng = 0, zoom = 0) => {\r\n\t\tconst mapData = $(canvas).attr('data-map').split(',');\r\n\t\tif(mapData[0] && mapData[1]) { lat = Number(mapData[0]); lng = Number(mapData[1]); }\r\n\t\tif(mapData[2]) { zoom = parseInt(mapData[2]); }\r\n\t\tmap = new google.maps.Map(canvas, {\r\n\t\t\tcenter: { lat: lat, lng: lng },\r\n\t\t\tzoom: zoom,\r\n\t\t\tdisableDefaultUI: true\r\n\t\t});\r\n\t\tconst marker = new google.maps.Marker({\r\n\t\t\tmap: map,\r\n\t\t\tposition: { lat: lat, lng: lng }\r\n\t\t});\r\n\t\tmarker.addListener('click', () => {\r\n\t\t\twindow.open(`https://www.google.com/maps?q=loc:${lat},${lng}`);\r\n\t\t});\r\n\t};\r\n\tthis.init();\r\n};\r\n\r\n$(document).ready(function() {\r\n\tconst jsGoogleMaps = App.UI.GoogleMaps();\r\n});","App.UI.GridMasonry = function() {\r\n\tconst self = this;\r\n\tthis.init = () => {\r\n\t\t$('.grid-masonry').masonry({\r\n\t\t\titemSelector: '.grid-masonry > *',\r\n\t\t\tgutter: 20,\r\n\t\t\tpercentPosition: true,\r\n\t\t\ttransitionDuration: 0\r\n\t\t})\r\n\t};\r\n\tthis.init();\r\n};\r\n\r\n$(document).ready(function() {\r\n\tconst jsGridMasonry = App.UI.GridMasonry();\r\n});","App.UI.Invoices = function(url) {\r\n    var isLoading = false;\r\n\r\n    $('[data-id]').on('click', function(e) {\r\n        var $button = $(this);\r\n        $button.prop('disabled', true).addClass('button--loading');\r\n\r\n        //only enter this code if isloading is false\r\n        if (!isLoading) {\r\n            isLoading = true;\r\n\r\n            //grab invoice details\r\n            $.ajax({\r\n                url: url,\r\n                method: \"POST\",\r\n                data: { invoiceId: $button.attr('data-id') },\r\n                cache: false\r\n            }).done(function (data) {                \r\n                //finished grabbing invoice details                \r\n                isLoading = false;\r\n                                \r\n                //if data was good\r\n                if (data != undefined) {\r\n\r\n                    //details html header\r\n                    var template = `<table class=\"page-invoices__returned-table\">\r\n                                <thead>\r\n                                    <tr>\r\n                                        <th>Product name</th>\r\n                                        <th class=\"page-invoices__price-header\">Amount due</th>\r\n                                    </tr>\r\n                                </thead>\r\n                                <tbody>`;\r\n\r\n                    //if there were any items in this invoice\r\n                    if (data.InvoiceProducts != undefined && data.InvoiceProducts != null && data.InvoiceProducts.length > 0) {\r\n\r\n                        //foreach one, output some details\r\n                        $.each(data.InvoiceProducts, function (i, row) {\r\n                            template += `<tr>\r\n                                        <td>${row.Description}</td>\r\n                                        <td class=\"page-invoices__numerical\">£${row.TotalAmount.toFixed(2)}</td>\r\n                                    </tr>`\r\n                        })\r\n                    }\r\n                    else {\r\n                        //else notify there were no items\r\n                        template += `<tr><td>No items on invoice</td><td></td></tr>`;\r\n                    }\r\n\r\n                    //standard invoice details\r\n                    template += `</tbody>\r\n                            <tfoot>\r\n                            <tr>\r\n                                <td class=\"page-invoices__text\">Amount due</td>\r\n                                <td class=\"page-invoices__numerical\">£${data.TotalAmount.toFixed(2)}</td>\r\n                            </tr>\r\n                                <tr>\r\n                                <td class=\"page-invoices__text\">Amount paid</td>\r\n                                <td class=\"page-invoices__numerical\">£${data.AmountPaid.toFixed(2)}</td>\r\n                            </tr>\r\n                                <tr>\r\n                                <td class=\"page-invoices__text\">Balance</td>\r\n                                <td class=\"page-invoices__numerical\">£${data.BalanceAmount.toFixed(2)}</td>\r\n                            </tr>\r\n                            </tfoot>\r\n                        </table>`;\r\n\r\n                    //QoL: change button to a minus to show this information can be collapsed                    \r\n                    $button.html('-');\r\n\r\n                    //replace button with a button that just hides and shows the info we've already fetched\r\n                    $button.closest('.page-invoices__invoice-item').find('.page-invoices__returned-info').removeAttr('hidden').prepend(template);\r\n                    $button.addClass('page-invoices__disabled-button');\r\n                    \r\n                    //new button slides info in and out of view and updates button to + or - to show expand/collapse functionality\r\n                    $button.closest('.page-invoices__invoice-item').find('.page-invoices__more-info').click(function () {\r\n                        $button.closest('.page-invoices__invoice-item').find('.page-invoices__returned-info').slideToggle(300);\r\n                        $button.html() == '+' ? $button.html('-') : $button.html('+');\r\n                        //TODO: maybe it would be a good idea to add some styling to the +/- button so it underlines or bolds or whatever on mouse hover?\r\n                        //after first click it ceases to be a standard text button and loses the hover underline at the moment.\r\n                    });                    \r\n                }\r\n            }).fail(function (jqXHR, textStatus, errorThrown) {\r\n                //show we've had a problem\r\n                $button.prop('disabled', false).html('error');\r\n            }).always(function() {\r\n                $button.removeClass('button--loading');\r\n            });\r\n        }\r\n    });\r\n};","App.UI.Helpers = {\r\n\t/**\r\n\t * @description Loads the contents of the icon SVG file into\r\n\t * the DOM of the page. This saves us having to specify the\r\n\t * full path to the SVG each time an icon is used.\r\n\t *\r\n\t * This could possibly be replaced with code that only \r\n\t * extracts the icons used and places them inline to their \r\n\t * location on the page. Not sure what benefits that would\r\n\t * give, but it would take more processing time/power.\r\n\t */\r\n    LoadIcons: () => {\r\n        $(document).ready(() => {\r\n            $.ajax({\r\n                url: CONFIG.ICON_SPRITE,\r\n                dataType: 'text'\r\n            }).done((data) => {\r\n                const $container = $('<div/>').css({ 'display': 'none' }).append(data);\r\n                $('body').append($container);\r\n            })\r\n        });\r\n    },\r\n    ObjectFitPolyfill: () => {\r\n        const selectors = ['.banner__media'];\r\n        if (!Modernizr.objectfit) {\r\n            $.each(selectors, (i, selector) => {\r\n                const $container = $(selector);\r\n                const imgSrc = $container.find('img').prop('src');\r\n                if (imgSrc) {\r\n                    $container.css({\r\n                        'background-image': `url(${imgSrc})`\r\n                    }).addClass('object-fit-fallback');\r\n                };\r\n            });\r\n        };\r\n    },\r\n    FitVids: () => {\r\n        const targets = [\r\n            'iframe[src*=\"player.vimeo.com\"]',\r\n            'iframe[src*=\"youtube.com\"]',\r\n            'iframe[src*=\"youtube-nocookie.com\"]',\r\n            '#bacpSmartDebitOnlineIFrame'\r\n        ];\r\n        $.each(targets, (i, target) => {\r\n            $(target).parent().fitVids();\r\n        });\r\n    },\r\n    SkipLinkFocusFix: () => {\r\n        $(document).on('click', '.skiplink', function () {\r\n            const $target = $($(this).attr('href'));\r\n            App.UI.Helpers.MoveFocus($target);\r\n        });\r\n    },\r\n    MQ: function (bp) {\r\n        const breakpoints = {\r\n            '{}': 'only screen',\r\n            '{>}': 'only screen and (min-width: 420px)',\r\n            '{<}': 'only screen and (max-width: 419px)',\r\n            '{>>}': 'only screen and (min-width: 600px)',\r\n            '{<<}': 'only screen and (max-width: 599px)',\r\n            '{>>>}': 'only screen and (min-width: 760px)',\r\n            '{<<<}': 'only screen and (max-width: 759px)',\r\n            '{>>>>}': 'only screen and (min-width: 1024px)',\r\n            '{<<<<}': 'only screen and (max-width: 1023px)',\r\n            '{>>>>>}': 'only screen and (min-width: 1280px)',\r\n            '{<<<<<}': 'only screen and (max-width: 1279px)',\r\n            '{>>>>>>}': 'only screen and (min-width: 1600px)',\r\n            '{<<<<<<}': 'only screen and (max-width: 1599px)',\r\n            '[]': 'only print'\r\n        };\r\n        return window.matchMedia(breakpoints[bp]).matches;\r\n    },\r\n    RandomString: function () {\r\n        return Math.random().toString(36).substring(6);\r\n    },\r\n    Slugify: function (string) {\r\n        return string.toLowerCase().replace(/\\W/g, '-');\r\n    },\r\n    AnyHasValue: function ($elem) {\r\n        return $elem.filter(function () { return $(this).val(); }).length > 0;\r\n    },\r\n    MoveFocus: function ($element, goInside) {\r\n        goInside = typeof goInside !== 'undefined' ? goInside : false;\r\n        if (goInside) {\r\n            $element.find('a, object, :input, iframe, [tabindex]').eq(0).trigger('focus');\r\n        }\r\n        else {\r\n            $element.attr('tabindex', '0').on('focus', () => {\r\n                $element.css({ 'outline': '0' });\r\n            }).on('blur', () => {\r\n                $element.removeAttr('tabindex').css({ 'outline': '' });\r\n            }).trigger('focus');\r\n        }\r\n    },\r\n    TrapFocus: function ($element, namespace) {\r\n        App.UI.Helpers.ReleaseFocus($element, namespace); // remove any existing focus trap\r\n        // Taken from https://hiddedevries.nl/en/blog/2017-01-29-using-javascript-to-trap-focus-in-an-element\r\n        const $focusableElements = $element.find('a, object, :input, iframe, [tabindex]');\r\n        const firstFocusable = $focusableElements.first().get(0);\r\n        const lastFocusable = $focusableElements.last().get(0);\r\n        $element.on(`keydown.${namespace}`, (e) => {\r\n            if (e.which !== 9) { return; }\r\n            if (e.shiftKey) {\r\n                if (document.activeElement === firstFocusable) {\r\n                    lastFocusable.focus();\r\n                    e.preventDefault();\r\n                }\r\n            }\r\n            else {\r\n                if (document.activeElement === lastFocusable) {\r\n                    firstFocusable.focus();\r\n                    e.preventDefault();\r\n                }\r\n            };\r\n        });\r\n    },\r\n    ReleaseFocus: function ($element, namespace) {\r\n        $element.off(`keydown.${namespace}`)\r\n    },\r\n    CreateOverlay: function (namespace) {\r\n        if ($('.overlay').length > 0) { return; }\r\n        const $overlay = $('<div/>', {\r\n            'class': 'overlay',\r\n            'data-overlay': namespace\r\n        });\r\n        $('body').append($overlay);\r\n    },\r\n    DestroyOverlay: function (namespace) {\r\n        $(`[data-overlay='${namespace}']`).remove();\r\n    },\r\n    ClickAndDisableShowLoading: function (link, timeout = null) {\r\n        $(link).attr('disabled', 'disabled').addClass('button--loading');\r\n        if (timeout) {\r\n            setTimeout(() => {\r\n                $(link).removeAttr('disabled').removeClass('button--loading');\r\n            }, timeout * 1000)\r\n        } \r\n    },\r\n    ClickAndDisable: function (link) {\r\n        // disable subsequent clicks\r\n        link.onclick = function (event) {\r\n            event.preventDefault();\r\n        }\r\n    },\r\n    DetailsPolyfill: function() {\r\n        if (!Modernizr.details) {\r\n            $(document).on('click', 'details summary', (e) => {\r\n                const $parent = $(e.target).parent();\r\n                if(typeof $parent.attr('open') === 'undefined') {\r\n                    $parent.attr('open', 'open');\r\n                }\r\n                else {\r\n                    $parent.removeAttr('open');\r\n                }\r\n            })\r\n        }\r\n    }\r\n};\r\n\r\n$(document).ready(function () {\r\n    App.UI.Helpers.LoadIcons();\r\n    App.UI.Helpers.FitVids();\r\n    App.UI.Helpers.ObjectFitPolyfill();\r\n    App.UI.Helpers.SkipLinkFocusFix();\r\n    App.UI.Helpers.DetailsPolyfill();\r\n});\r\n","App.UI.LegalAgreement = function ($container, multiple = false) {\r\n    const self = this;\r\n    const $termsCheckbox = $container.find('.legal-agreement__checkbox');\r\n    this.init = () => {\r\n        this.lockControls();\r\n        this.bindControls();\r\n    };\r\n    this.bindControls = () => {\r\n        $termsCheckbox.on('change', function (e) {\r\n            if (multiple) {\r\n                const $submitButton = $('.legal-agreement__submit');\r\n                let allChecked = true;\r\n                if ($('.legal-agreement__checkbox:not(:checked)').length > 0) {\r\n                    allChecked = false;\r\n                }\r\n                if (allChecked === true) {\r\n                    $submitButton.prop('disabled', false);\r\n                }\r\n                else {\r\n                    $submitButton.prop('disabled', true);\r\n                }\r\n            }\r\n            else {\r\n                const $submitButton = $container.find('.legal-agreement__submit');\r\n                if ($(this).prop('checked') === true) {\r\n                    $submitButton.prop('disabled', false);\r\n                }\r\n                else {\r\n                    $submitButton.prop('disabled', true);\r\n                }\r\n            }\r\n        });\r\n    };\r\n    this.lockControls = () => {\r\n        $termsCheckbox.prop('checked', false).trigger('change');\r\n        if (multiple) {\r\n            $('.legal-agreement__submit').prop('disabled', true);\r\n        }\r\n        else {\r\n            $container.find('.legal-agreement__submit').prop('disabled', false);\r\n        }\r\n    };\r\n    this.init();\r\n};","App.UI.Navigation = function () {\r\n    const self = this;\r\n    const namespace = 'nav';\r\n    const $navigation = $('.navigation');\r\n    this.init = () => {\r\n        $('.navigation__menu > .navigation__item > .navigation__list').attr('aria-hidden', 'true');\r\n        this.bindEvents();\r\n        this.bindControls();\r\n        if (App.UI.Helpers.MQ('{<<<<}')) {\r\n            this.hashcheckNavigation();\r\n        }\r\n    };\r\n    this.bindControls = () => {\r\n        $(document).on('mouseover', (e) => {\r\n            if (App.UI.Helpers.MQ('{>>>>}')) {\r\n                this.closeAllPanels();\r\n            }\r\n        }).on('click', (e) => {\r\n            if (window.location.hash == '#navigation') {\r\n                window.location.hash = '';\r\n            }\r\n        });\r\n        $navigation.on('mouseover click', (e) => {\r\n            e.stopPropagation();\r\n        });\r\n        $('.navigation__menu > .navigation__item > .navigation__header > .navigation__link').on('mouseover', (e) => {\r\n            if (App.UI.Helpers.MQ('{>>>>}')) {\r\n                this.closeAllPanels();\r\n            }\r\n        });\r\n        $('.navigation__menu > .navigation__item--has-children > .navigation__header').on('mouseover', function (e) {\r\n            if (App.UI.Helpers.MQ('{>>>>}')) {\r\n                const $target = $(this).find('.navigation__link');\r\n                self.openPanel($target);\r\n            }\r\n        });\r\n        $('.navigation__menu > .navigation__item--has-children > .navigation__header > .navigation__icon').on('keydown', function (e) {\r\n            if (e.which != 32 && e.which != 13) { return; }\r\n            e.preventDefault();\r\n            self.togglePanel($(this));\r\n        }).on('click', function (e) {\r\n            e.preventDefault();\r\n            self.togglePanel($(this));\r\n        });\r\n        $('.navigation__search').on('click', '.navigation__link', function(e) {\r\n            $(this).next('.navigation__icon').trigger('click');\r\n        });\r\n    };\r\n    this.togglePanel = ($panel) => {\r\n        if ($panel.attr('aria-expanded') === 'true') {\r\n            this.closePanel($panel);\r\n            return;\r\n        }\r\n        this.openPanel($panel);\r\n    };\r\n    this.openPanel = ($panel) => {\r\n        if (App.UI.Helpers.MQ('{>>>>}')) {\r\n            this.closeAllPanels();\r\n        }\r\n        const $item = $panel.closest('.navigation__item').addClass('navigation__item--open');\r\n        $item.find('.navigation__icon').attr('aria-expanded', 'true');\r\n        $item.find('.navigation__list').attr('aria-hidden', 'false');\r\n    };\r\n    this.closePanel = ($panel) => {\r\n        const $item = $panel.closest('.navigation__item').removeClass('navigation__item--open');\r\n        $item.find('.navigation__icon').attr('aria-expanded', 'false');\r\n        $item.find('.navigation__list').attr('aria-hidden', 'true');\r\n    };\r\n    this.closeAllPanels = ($panel) => {\r\n        this.closePanel($('.navigation__menu > .navigation__item > .navigation__header > .navigation__icon[aria-expanded=\"true\"]'));\r\n    };\r\n    this.bindEvents = () => {\r\n        $(window).on('resize', () => {\r\n            if (App.UI.Helpers.MQ('{<<<<}')) {\r\n                this.hashcheckNavigation();\r\n            }\r\n            else {\r\n                this.closeNavigation();\r\n            }\r\n        }).on('hashchange', () => {\r\n            this.hashcheckNavigation();\r\n        });\r\n    };\r\n    this.openNavigation = () => {\r\n        $('html').addClass('menu-open').data('menuOpen', true);\r\n        App.UI.Helpers.CreateOverlay(namespace);\r\n        App.UI.Helpers.TrapFocus($navigation, namespace);\r\n        App.UI.Helpers.MoveFocus($navigation);\r\n    };\r\n    this.closeNavigation = () => {\r\n        $('html').removeClass('menu-open').data('menuOpen', false);\r\n        App.UI.Helpers.DestroyOverlay(namespace);\r\n        App.UI.Helpers.ReleaseFocus($navigation, namespace);\r\n    };\r\n    this.hashcheckNavigation = () => {\r\n        if (window.location.hash === '#navigation') {\r\n            if ($('html').data('menuOpen') !== true) {\r\n                this.openNavigation();\r\n            }\r\n        }\r\n        else {\r\n            this.closeNavigation();\r\n        }\r\n    };\r\n    this.init();\r\n};\r\n$(document).ready(function () {\r\n    App.UI.Navigation();\r\n});","App.UI.Notification = function (message, options) {\r\n\tconst self = this;\r\n\tconst defaults = {\r\n\t\tdismissMessage: 'Dismiss',\r\n\t\tmods: [],\r\n\t\tdismissable: true,\r\n\t\tduration: 0, // milliseconds, 0 = visible until dismissed, >0 = timed\r\n\t\tdebug: false\r\n\t};\r\n\toptions = $.extend({}, defaults, options);\r\n\tthis.init = () => {\r\n\t\tif(message) {\r\n\t\t\tthis.buildContainer();\r\n\t\t\tthis.create();\r\n\t\t}\r\n\t};\r\n\tthis.buildContainer = () => {\r\n\t\tif($('#notification-centre').length > 0) {\r\n\t\t\treturn;\r\n\t\t};\r\n\t\tconst $notificationCentre = $('<div/>', {\r\n\t\t\t'id': 'notification-centre',\r\n\t\t\t'class': 'notification-centre',\r\n\t\t\t'aria-live': 'assertive',\r\n            'aria-relevant': 'additions'\r\n\t\t});\r\n\t\t$('body').append($notificationCentre);\r\n\t\tif(options.debug) console.log('buildContainer');\r\n\t};\r\n\tthis.create = () => {\r\n\t\tconst id = `notification-${Math.random().toString(36).substring(6)}`;\r\n\t\tconst classes = ['notification'];\r\n\t\t$.each(options.mods, (i, mod) => {\r\n\t\t\tclasses.push(`notification--${mod}`);\r\n\t\t});\r\n\t\tconst $notification = $('<aside/>', {\r\n\t\t\t'class': classes.join(' '),\r\n\t\t\t'role': 'alert',\r\n\t\t\t'aria-live': 'assertive',\r\n\t\t\t'id': id\r\n\t\t});\r\n\t\tconst $notificationMessage = $('<div/>', {\r\n\t\t\t'class': 'notification__message'\r\n\t\t}).html(message);\r\n\t\t$notification.append($notificationMessage);\r\n\t\tif(options.dismissable) {\r\n\t\t\tconst $notificationClose = $('<button/>', {\r\n\t\t\t\t'class': 'notification__close',\r\n\t\t\t\t'type': 'button',\r\n\t\t\t\t'aria-label': 'Close notification',\r\n\t\t\t\t'text': options.dismissMessage\r\n\t\t\t}).on('click', (e) => {\r\n\t\t\t\tthis.destroy(id);\r\n\t\t\t});\r\n\t\t\t$notification.append($notificationClose);\r\n\t\t}\r\n\t\t$('#notification-centre').append($notification);\r\n\t\tApp.UI.Helpers.TrapFocus($(`#${id}`), id);\r\n\t\tif(options.duration > 0) {\r\n\t\t\tsetTimeout(() => {\r\n\t\t\t\tthis.destroy(id);\r\n\t\t\t}, options.duration)\r\n\t\t};\r\n\t\tif(options.debug) console.log('create', message, options);\r\n\t};\r\n\tthis.destroy = (id) => {\r\n\t\t$(`#${id}`).remove();\r\n\t\tApp.UI.Helpers.ReleaseFocus($(`#${id}`), id);\r\n\t\tif(options.debug) console.log('destroy', id);\r\n\t};\r\n\tthis.init();\r\n};\r\n\r\nApp.UI.NotificationDD = function (message, options) {\r\n    var _this = this;\r\n\r\n    var self = this;\r\n    var defaults = {\r\n        dismissMessage: 'Dismiss',\r\n        mods: [],\r\n        dismissable: true,\r\n        duration: 0,\r\n        // milliseconds, 0 = visible until dismissed, >0 = timed\r\n        debug: false\r\n    };\r\n    options = $.extend({}, defaults, options);\r\n\r\n    this.init = function () {\r\n        if (message) {\r\n            _this.buildContainer();\r\n\r\n            _this.create();\r\n        }\r\n    };\r\n\r\n    this.buildContainer = function () {\r\n        if ($('#notification-centre').length > 0) {\r\n            return;\r\n        }\r\n\r\n        ;\r\n        var $notificationCentre = $('<div/>', {\r\n            'id': 'notification-centre',\r\n            'class': 'notification-centre',\r\n            'aria-live': 'assertive',\r\n            'aria-relevant': 'additions'\r\n        });\r\n        //if ($('.dashboard-navigation').length == 0) {\r\n        //    $('nav').append($notificationCentre);\r\n        //}\r\n        //else {\r\n        $($notificationCentre).insertBefore('.notification-append');\r\n        //}\r\n        /* if ($('.dashboard-navigation').length == 0) {*/\r\n        //}\r\n        //else {\r\n        //    $($notificationCentre).insertAfter('.dashboard-navigation');\r\n        //}\r\n        // $($notificationCentre).insertAfter('.notificationmessage');\r\n        if (options.debug) console.log('buildContainer');\r\n    };\r\n\r\n    this.create = function () {\r\n        var id = \"notification-\".concat(Math.random().toString(36).substring(6));\r\n        var classes = ['notification'];\r\n        $.each(options.mods, function (i, mod) {\r\n            classes.push(\"notification--\".concat(mod));\r\n        });\r\n        var $notification = $('<aside/>', {\r\n            'class': classes.join(' '),\r\n            'role': 'alert',\r\n            'aria-live': 'assertive',\r\n            'id': id\r\n        });\r\n        var $notificationMessage = $('<div/>', {\r\n            'class': 'notification__message'\r\n        }).html(message);\r\n        $notification.append($notificationMessage);\r\n\r\n        if (options.dismissable) {\r\n            var $notificationClose = $('<button/>', {\r\n                'class': 'notification__close',\r\n                'type': 'button',\r\n                'aria-label': 'Close notification',\r\n                'text': options.dismissMessage\r\n            }).on('click', function (e) {\r\n                _this.destroy(id);\r\n            });\r\n            $notification.append($notificationClose);\r\n        }\r\n\r\n        $('#notification-centre').append($notification);\r\n        App.UI.Helpers.TrapFocus($(\"#\".concat(id)), id);\r\n\r\n        if (options.duration > 0) {\r\n            setTimeout(function () {\r\n                _this.destroy(id);\r\n            }, options.duration);\r\n        }\r\n\r\n        ;\r\n        if (options.debug) console.log('create', message, options);\r\n    };\r\n\r\n    this.destroy = function (id) {\r\n        $(\"#\".concat(id)).remove();\r\n        App.UI.Helpers.ReleaseFocus($(\"#\".concat(id)), id);\r\n        if (options.debug) console.log('destroy', id);\r\n    };\r\n\r\n    this.init();\r\n};","App.UI.PasswordStrength = function ($input) {\r\n    const self = this;\r\n    this.init = () => {\r\n        this.prepareHtml();\r\n        this.bindControls();\r\n    };\r\n    this.bindControls = () => {\r\n        $input.on('keyup paste', (e) => {\r\n            const input = $input.val();\r\n            this.ratePassword(input);\r\n        });\r\n    };\r\n    this.prepareHtml = () => {\r\n        const id = `password-strength-${App.UI.Helpers.RandomString()}`;\r\n        const $container = $('<div/>', {\r\n            'class': 'password-strength'\r\n        });\r\n        const $state = $('<div/>', {\r\n            'class': 'password-strength__crack',\r\n            'aria-live': 'polite',\r\n            'aria-relevant': 'text',\r\n            'id': id\r\n        });\r\n        $input.wrap($container).after($state).attr('aria-controls', id);\r\n    };\r\n    this.ratePassword = (input) => {\r\n        const results = zxcvbn(input);\r\n        let strength = 'Unknown';\r\n        let status = '';\r\n        let output = '';\r\n        //console.log(results);\r\n        switch (results.score) {\r\n            case 0:\r\n                strength = 'Very weak';\r\n                status = 'error';\r\n                break;\r\n            case 1:\r\n                strength = 'Weak';\r\n                status = 'warning';\r\n                break;\r\n            case 2:\r\n                strength = 'Moderate';\r\n                status = 'warning';\r\n                break;\r\n            case 3:\r\n                strength = 'Strong';\r\n                status = 'success';\r\n                break;\r\n            case 4:\r\n                strength = 'Very strong';\r\n                status = 'success';\r\n                break;\r\n        }\r\n        if (strength) { \r\n            output += `<strong class=\"status status--${status}\">${strength}</strong> `; \r\n        }\r\n        output += `It would take ${results.crack_times_display.online_no_throttling_10_per_second} to crack this password.`;\r\n        //if(results.feedback.warning) {\r\n        //    output += `<br>${results.feedback.warning}.`;\r\n        //}\r\n        $input.siblings('.password-strength__crack').html(output);\r\n    }\r\n    this.init();\r\n}","App.UI.Qualifications = function ($container, options) {\r\n    const defaults = {\r\n        rowSelector: false\r\n    };\r\n    const settings = $.extend({}, defaults, options);\r\n    const self = this;\r\n    this.init = () => {\r\n        $container.find(`${settings.rowSelector}:not(:first)`).attr('aria-hidden', 'true');\r\n        this.bindControls();\r\n    };\r\n    this.bindControls = () => {\r\n        $container.find('input').on('keyup paste change', function (e) {\r\n            let showNext = false;\r\n            $(this).parent().children(':input').each((i, input) => {\r\n                if ($(input).val() != '') {\r\n                    showNext = true;\r\n                }\r\n            });\r\n            if (showNext) {\r\n                $(this).closest(settings.rowSelector).next(settings.rowSelector).attr('aria-hidden', 'false');\r\n            }\r\n            else {\r\n                $(this).closest(settings.rowSelector).next(settings.rowSelector).attr('aria-hidden', 'true');\r\n            }\r\n        });\r\n    };\r\n    this.init();\r\n};","App.UI.Range = function($slider, $input) {\r\n\tconst self = this;\r\n\tconst min = $slider.attr('min');\r\n\tconst max = $slider.attr('max');\r\n\tconst maxAndAbove = $slider.attr('maxAndAbove');\r\n\tthis.init = () => {\r\n\t    this.updateValue($slider.val());\r\n\t\tthis.bindControls();\r\n\t};\r\n\tthis.bindControls = () => {\r\n\t\t$slider.on('change input', () => {\r\n\t\t\tthis.updateValue($slider.val());\r\n\t\t});\r\n\t\t$input.on('change keyup', () => {\r\n\t\t\tthis.updateValue($input.val());\r\n\t\t});\r\n\t};\r\n\tthis.updateValue = (value) => {\r\n\t\tif($input.is(':focus')) { return; }\r\n\t\tif(value == '') { value = min; }\r\n\t\t$slider.val(value);\r\n\t\tif ($input.is(':input')) {\r\n\t\t    $input.val(value);\r\n\t\t}\r\n\t\telse {\r\n\t\t    if (maxAndAbove != null && parseInt(value) >= parseInt(max)) {\r\n\t\t        $input.text(`${value}+`);\r\n\t\t    }\r\n\t\t    else {\r\n                $input.text(value);\r\n\t\t    }\t\t    \r\n\t\t}\r\n\t};\r\n\tthis.init();\r\n};","App.UI.SearchFacets = function ($container) {\r\n    const self = this;\r\n    const namespace = 'facets';\r\n    const id = 'facets-' + App.UI.Helpers.RandomString();\r\n    this.init = () => {\r\n        $container.attr('id', id);\r\n        this.bindEvents();\r\n        if (App.UI.Helpers.MQ('{<<<<}')) {\r\n            $container.attr('role', 'modal').attr('aria-hidden', 'true');\r\n        }\r\n        this.buildButtons();\r\n    };\r\n    this.bindEvents = () => {\r\n        $(window).on('load resize', (e) => {\r\n            if (App.UI.Helpers.MQ('{<<<<}')) {\r\n                $container.attr('role', 'modal').attr('aria-hidden', 'true');\r\n                if ($('html').hasClass('facets-open')) {\r\n                    App.UI.Helpers.CreateOverlay(namespace);\r\n                    $container.attr('aria-hidden', 'false');\r\n                }\r\n            }\r\n            else {\r\n                $container.removeAttr('role').removeAttr('aria-hidden');\r\n                App.UI.Helpers.DestroyOverlay(namespace);\r\n            }\r\n        });\r\n    };\r\n    this.buildButtons = () => {\r\n        const $openButton = $('<button/>', {\r\n            'type': 'button',\r\n            'class': 'button button--inverse template-search__facets-open',\r\n            'html': '<svg focusable=\"false\"><use xlink:href=\"#filter\"></use></svg> <span class=\"screenreader\">Show search facets</span>',\r\n            'aria-controls': id\r\n        }).on('click', (e) => {\r\n            this.openModal();\r\n        });\r\n        $('.template-search__buttons').append($openButton);\r\n        const $closeButton = $('<button/>', {\r\n            'type': 'button',\r\n            'class': 'button button--primary button--small template-search__facets-close',\r\n            'html': '<svg focusable=\"false\"><use xlink:href=\"#close\"></use></svg> Close',\r\n            'aria-controls': id\r\n        }).on('click', (e) => {\r\n            this.closeModal();\r\n        });\r\n        $container.prepend($closeButton);\r\n    };\r\n    this.toggleModal = () => {\r\n        if ($('html').hasClass('facets-open')) {\r\n            this.closeModal();\r\n        }\r\n        else {\r\n            this.openModal();\r\n        }\r\n    };\r\n    this.openModal = () => {\r\n        App.UI.Helpers.CreateOverlay(namespace);\r\n        $('html').addClass('facets-open');\r\n        $container.attr('aria-hidden', 'false');\r\n        App.UI.Helpers.TrapFocus($container, namespace);\r\n        App.UI.Helpers.MoveFocus($container);\r\n    };\r\n    this.closeModal = () => {\r\n        App.UI.Helpers.DestroyOverlay(namespace);\r\n        $('html').removeClass('facets-open');\r\n        $container.attr('aria-hidden', 'true');\r\n        App.UI.Helpers.ReleaseFocus($container, namespace);\r\n    };\r\n    this.init();\r\n}","App.UI.SearchGlobal = function (options = {}) {\r\n    const self = this;\r\n    const defaults = {\r\n        placeholder: {\r\n            site: 'Enter topic you\\'re looking for, e.g. membership',\r\n            events: 'Enter name or topic of event, e.g. private practice',\r\n            jobs: 'Enter job title or keyword, e.g. counsellor',\r\n            courses: 'Enter course title or topic, e.g. humanist',\r\n            therapists: 'Enter problem or specialism, e.g. depression',\r\n            register: 'Enter name or registration number, e.g. John Smith',\r\n            trainersAndSupervisors: 'Enter specialism, e.g. depression'\r\n        },\r\n        placeholderheadersearch: {\r\n            site: 'Enter topic',\r\n            events: 'Enter name or topic',\r\n            jobs: 'Enter keyword',\r\n            courses: 'Enter course title',\r\n            therapists: 'Enter problem',\r\n            register: 'Enter name',\r\n            trainersAndSupervisors: 'Enter specialism'\r\n        }\r\n    };\r\n    const settings = $.extend(true, {}, defaults, options);\r\n    this.init = () => {\r\n        this.bindSearchPlaceholders();\r\n        this.bindSearchTabControls();\r\n        this.requestGeolocation();\r\n        this.setHeaderPlaceholder();\r\n        this.setSearchPlaceholder();\r\n    };\r\n    this.bindSearchPlaceholders = () => {\r\n        $(window).on('load', (e) => {\r\n            this.setHeaderPlaceholder();\r\n            this.setSearchPlaceholder();\r\n        });\r\n        $(document).on('change', '#hsearchcat', (e) => {\r\n            this.setHeaderPlaceholder();\r\n        });\r\n        $(document).on('change', '#nsearchcat', (e) => {\r\n            this.setHeaderPlaceholder();\r\n        });\r\n    };\r\n    this.bindSearchTabControls = () => {\r\n        const $searchNavigation = $('.search-navigation');\r\n        if (!$searchNavigation.length) { return; }\r\n        $searchNavigation.on('click', '.search-navigation__item > a', function(e) {\r\n            e.preventDefault();\r\n            let url = $(this).attr('href');\r\n            const searchQuery = $('#searchQuery').val();\r\n            const userLocation = localStorage.getItem('location');\r\n            url += encodeURI(`?q=${searchQuery}`);\r\n            if (userLocation) {\r\n                url += encodeURI(`&UserLocation=${userLocation}`);\r\n            }\r\n            window.location.href = url;\r\n        });\r\n    };\r\n    this.requestGeolocation = () => {\r\n        if (localStorage.getItem('location')) {\r\n            this.populateGeolocation(localStorage.getItem('location'));\r\n        }\r\n        else if (navigator.geolocation) {\r\n            navigator.geolocation.getCurrentPosition((position) => {\r\n                this.populateGeolocation(App.Helpers.PositionToString(position));\r\n            });\r\n        }\r\n    };\r\n    this.populateGeolocation = (coords) => {\r\n        // Web\r\n        const $searchLocation = $('#hsearchlocation');\r\n        $searchLocation.val(coords);\r\n\r\n        // Mobile\r\n        const $mobileSearchLocation = $('#nsearchlocation');\r\n        $mobileSearchLocation.val(coords);\r\n\r\n\r\n        const $GeneralSearchLocation = $('#ssearchlocation');\r\n        $GeneralSearchLocation.val(coords);\r\n\r\n        localStorage.setItem('location', coords);\r\n    };\r\n    this.setHeaderPlaceholder = () => {\r\n        // Web\r\n        const $searchInput = $('#hsearchquery');\r\n        if (!$searchInput.length) { return; }\r\n        const $searchCategory = $('#hsearchcat');\r\n        $searchInput.attr('placeholder', this.determineHeaderSearchPlaceholder($searchCategory.val()));\r\n\r\n        // Mobile\r\n        const $mobileSearchInput = $('#nsearchquery');\r\n        if (!$mobileSearchInput.length) { return; }\r\n        const $mobileSearchCategory = $('#nsearchcat');\r\n        $mobileSearchInput.attr('placeholder', this.determineHeaderSearchPlaceholder($mobileSearchCategory.val()));\r\n    };\r\n    this.setSearchPlaceholder = () => {\r\n        const $searchInput = $('#searchQuery');\r\n        if (!$searchInput.length) { return; }\r\n        const urlSegments = window.location.pathname.split('/');\r\n        $searchInput.attr('placeholder', this.determinePlaceholder(urlSegments[urlSegments.length - 1]));\r\n    };\r\n    this.determinePlaceholder = (category) => {\r\n        switch (category) {\r\n            case 'Events':\r\n                return settings.placeholder.events;\r\n                break;\r\n            case 'Jobs':\r\n                return settings.placeholder.jobs;\r\n                break;\r\n            case 'Courses':\r\n                return settings.placeholder.courses;\r\n                break;\r\n            case 'Therapists':\r\n                return settings.placeholder.therapists;\r\n                break;\r\n            case 'Register':\r\n                return settings.placeholder.register;\r\n                break;\r\n            case 'TrainersAndSupervisors':\r\n                return settings.placeholder.trainersAndSupervisors;\r\n                break;\r\n            default:\r\n                return settings.placeholder.site;\r\n                break;\r\n        }\r\n    };\r\n    this.determineHeaderSearchPlaceholder = (category) => {\r\n        switch (category) {\r\n            case 'Events':\r\n                return settings.placeholderheadersearch.events;\r\n                break;\r\n            case 'Jobs':\r\n                return settings.placeholderheadersearch.jobs;\r\n                break;\r\n            case 'Courses':\r\n                return settings.placeholderheadersearch.courses;\r\n                break;\r\n            case 'Therapists':\r\n                return settings.placeholderheadersearch.therapists;\r\n                break;\r\n            case 'Register':\r\n                return settings.placeholderheadersearch.register;\r\n                break;\r\n            case 'TrainersAndSupervisors':\r\n                return settings.placeholderheadersearch.trainersAndSupervisors;\r\n                break;\r\n            default:\r\n                return settings.placeholderheadersearch.site;\r\n                break;\r\n        }\r\n    };\r\n    this.init();\r\n}\r\n\r\n$(document).ready(function () {\r\n    new App.UI.SearchGlobal();\r\n})","App.UI.SubsectionCTA = function($subsection) {\r\n\tconst self = this;\r\n\tthis.init = () => {\r\n\t\tthis.bindControls();\r\n\t};\r\n\tthis.bindControls = () => {\r\n\t\t$subsection.on('mouseover', () => {\r\n\t\t\t$subsection.addClass('subsection-cta--hover');\r\n\t\t}).on('mouseout', () => {\r\n\t\t\t$subsection.removeClass('subsection-cta--hover');\r\n\t\t}).on('click', () => {\r\n\t\t\tconst url = $subsection.find('.subsection-cta__link').attr('href');\r\n\t\t\twindow.location.href = url;\r\n\t\t});\r\n\t\t$subsection.find('subsection-cta__content a').on('click', (e) => {\r\n\t\t\te.stopPropagation();\r\n\t\t});\r\n\t};\r\n\tthis.init();\r\n};\r\n\r\n$(document).ready(function() {\r\n\t$('.subsection-cta').each(function() {\r\n\t\tconst jsSubsectionCTA = App.UI.SubsectionCTA($(this));\r\n\t});\r\n});","App.UI.Table = function ($table) {\r\n    const self = this;\r\n    const columns = [];\r\n    this.init = () => {\r\n        if (!$table.find('thead').length) { return; }\r\n        $table.addClass('table--responsive');\r\n        $table.find('thead tr').children().each((i, cell) => {\r\n            columns.push($(cell).text());\r\n        });\r\n        $table.find('tbody tr').each((i, row) => {\r\n            $(row).children().each((i, cell) => {\r\n                $(cell).attr('data-th', columns[i]);\r\n            });\r\n        });\r\n    };\r\n    this.init();\r\n};\r\n\r\n$(document).ready(function () {\r\n    $('.table--responsive, .content table').each((i, table) => {\r\n        new App.UI.Table($(table));\r\n    });\r\n});","App.UI.Tabs = function ($container, options = {}) {\r\n    const self = this;\r\n    const defaults = {\r\n        panelSelector: '[data-tab-panel]',\r\n        tabContainerClass: 'tabs__tablist',\r\n        tabClass: 'tabs__item'\r\n    };\r\n    const settings = $.extend(true, {}, defaults, options);\r\n    let tabList = [];\r\n    let $tabList;\r\n    this.init = () => {\r\n        const $panelSelector = $container.find(settings.panelSelector);\r\n        if ($panelSelector.length < 2) { return; }\r\n        $panelSelector.each((i, tab) => {\r\n            const $tab = $(tab);\r\n            const id = App.UI.Helpers.RandomString();\r\n            $tab.attr({\r\n                'hidden': 'hidden',\r\n                'role': 'tabpanel',\r\n                'id': `tab-${id}-panel`,\r\n                'aria-labelledby': `tab-${id}`\r\n            });\r\n            tabList.push({ id: id, name: $tab.attr('data-tab-panel') });\r\n        });\r\n        this.generateTabs();\r\n        this.openPanel($panelSelector.first().attr('id'));\r\n    };\r\n    this.generateTabs = () => {\r\n        $tabList = $('<div/>', {\r\n            'class': settings.tabContainerClass,\r\n            'role': 'tablist'\r\n        });\r\n        $.each(tabList, (i, tab) => {\r\n            const $tab = $('<button/>', {\r\n                'type': 'button',\r\n                'class': settings.tabClass,\r\n                'text': tab.name,\r\n                'aria-controls': `tab-${tab.id}-panel`,\r\n                'aria-selected': 'false',\r\n                'role': 'tab',\r\n                'id': `tab-${tab.id}`\r\n            }).on('click', (e) => {\r\n                this.openPanel(`tab-${tab.id}-panel`);\r\n                App.UI.Helpers.MoveFocus($(`#tab-${tab.id}-panel`));\r\n            });\r\n            $tabList.append($tab);\r\n        });\r\n        $container.prepend($tabList);\r\n    };\r\n    this.openPanel = (panelId) => {\r\n        this.closeAllPanels();\r\n        $(`#${panelId}`).removeAttr('hidden');\r\n        // highlight and align associated tab\r\n        const $tab = $container.find(`[aria-controls=\"${panelId}\"]`);\r\n        $tab.attr('aria-selected', 'true');\r\n        //$tabList.scrollLeft($tab.position().left);\r\n        //console.log('scrolled to', $tabList, $tab.position().left);\r\n    };\r\n    this.closeAllPanels = () => {\r\n        $container.find(settings.panelSelector).attr('hidden', 'hidden');\r\n        $container.find('[aria-controls]').attr('aria-selected', 'false');\r\n    };\r\n    this.init();\r\n}","App.UI.WYSIWYG = function() {\r\n    const self = this;\r\n    this.init = () => {\r\n        $('[data-wysiwyg]').each((i, container) => {\r\n            $(container).addClass('wysiwyg');\r\n            const $editor = $(container).find('textarea');\r\n            const $toolbar = $('<div/>', { 'class': 'wysiwyg__toolbar' });\r\n            $(container).prepend($toolbar);\r\n\r\n            this.initEditor($editor, $toolbar);\r\n        });\r\n    };\r\n    this.initEditor = ($editor, $toolbar) => {\r\n\t\tconst editor = new MediumEditor($editor.get(0), {\r\n\t\t\tkeyboardCommands: {\r\n\t\t\t\tcommands: [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcommand: 'bold',\r\n\t\t\t\t\t\tkey: 'B',\r\n\t\t\t\t\t\tmeta: true,\r\n\t\t\t\t\t\tshift: false,\r\n\t\t\t\t\t\talt: false\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcommand: 'italic',\r\n\t\t\t\t\t\tkey: 'I',\r\n\t\t\t\t\t\tmeta: true,\r\n\t\t\t\t\t\tshift: false,\r\n\t\t\t\t\t\talt: false\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcommand: function () { },\r\n\t\t\t\t\t\tkey: 'U',\r\n\t\t\t\t\t\tmeta: true,\r\n\t\t\t\t\t\tshift: false,\r\n\t\t\t\t\t\talt: false\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcommand: 'orderedlist',\r\n\t\t\t\t\t\tkey: 'L',\r\n\t\t\t\t\t\tmeta: true,\r\n\t\t\t\t\t\tshift: true,\r\n\t\t\t\t\t\talt: false\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcommand: 'unorderedlist',\r\n\t\t\t\t\t\tkey: 'L',\r\n\t\t\t\t\t\tmeta: true,\r\n\t\t\t\t\t\tshift: false,\r\n\t\t\t\t\t\talt: false\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcommand: 'removeFormat',\r\n\t\t\t\t\t\tkey: '\\\\',\r\n\t\t\t\t\t\tmeta: true,\r\n\t\t\t\t\t\tshift: false,\r\n\t\t\t\t\t\talt: false\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t    },\r\n\t\t\ttoolbar: {\r\n\t\t\t    relativeContainer: $toolbar.get(0),\r\n\t\t\t    standardizeSelectionStart: true,\r\n\t\t\t\tbuttons: [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tname: 'bold',\r\n\t\t\t\t\t\tcontentDefault: '<svg><use xlink:href=\"#wysiwyg-bold\"></use></svg>'\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tname: 'italic',\r\n\t\t\t\t\t\tcontentDefault: '<svg><use xlink:href=\"#wysiwyg-italic\"></use></svg>'\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tname: 'orderedlist',\r\n\t\t\t\t\t\tcontentDefault: '<svg><use xlink:href=\"#wysiwyg-ol\"></use></svg>'\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tname: 'unorderedlist',\r\n\t\t\t\t\t\tcontentDefault: '<svg><use xlink:href=\"#wysiwyg-ul\"></use></svg>'\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tname: 'removeFormat',\r\n\t\t\t\t\t\tcontentDefault: '<svg><use xlink:href=\"#wysiwyg-removeformat\"></use></svg>'\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\tplaceholder: {\r\n\t\t\t\ttext: '',\r\n\t\t\t\thideOnClick: true\r\n\t\t\t},\r\n\t\t\tpaste: {\r\n\t\t\t\tforcePlainText: true\r\n\t\t\t},\r\n\t\t\timageDragging: false\r\n\t\t});\r\n\t};\r\n\tthis.init();\r\n};\r\n\r\n$(document).ready(function() {\r\n\tconst jsWYSIWYG = App.UI.WYSIWYG();\r\n});","function getbankdetail() {\r\n    $(\".sortcodeerror\").text('');\r\n    $(\".accnumbererror\").text('');\r\n    var accountname = $('.accname').val();\r\n    var sortcode = $('.sortcode').val();\r\n    var accountnumber = $('.accnumber').val();\r\n    var frequencytype = $('.freqencytype').val();\r\n    var refNo = $('.referencenumber').val();\r\n    var firstname = $(\".firstname\").val();\r\n    var lastname = $(\".lastname\").val();\r\n    var numregex = /^[0-9]*$/;\r\n\r\n    if (!numregex.test(sortcode)) {\r\n        $(\".sortcodeerror\").text('Sortcode Must be numbers only');\r\n    }\r\n    if (!numregex.test(accountnumber)) {\r\n        $(\".accnumbererror\").text('AccountNumber Must be numbers only');\r\n    }\r\n    if (accountname != \"\" && sortcode != \"\" && accountnumber != \"\" && numregex.test(sortcode) && numregex.test(accountnumber)) {\r\n        $.ajax({\r\n            type: \"GET\",\r\n            url: \"/Ecommerce/GetBankDetails\",\r\n            data: { membershipNumber: refNo, sortCode: sortcode, accountNumber: accountnumber, firstName: firstname, lastName: lastname, frequencyType: frequencytype },\r\n            dataType: 'json',\r\n            success: function (data) {\r\n                if (data != \"null\") {\r\n                    var json = $.parseJSON(data);\r\n                    $(\".BankName\").val(json.BankName);\r\n                    $(\".BranchName\").val(json.Branch);\r\n                    $(\".BankNamelabel\").text(json.BankName);\r\n                    $(\".BranchNamelabel\").text(json.Branch);\r\n                    $(\".labelclass\").css(\"display\", \"none\");\r\n                    $(\".updatebutton\").prop('disabled', false);\r\n                }\r\n                else {\r\n                    $(\".BankName\").val('');\r\n                    $(\".BranchName\").val('');\r\n                    $(\".BankNamelabel\").text('');\r\n                    $(\".BranchNamelabel\").text('');\r\n                    $(\".labelclass\").css(\"display\", \"block\");\r\n                    $(\".labelclass\").text(\"Please enter valid account details\");\r\n                    $(\".updatebutton\").prop('disabled', true);\r\n                }\r\n\r\n            },\r\n            error: function (result) {\r\n                // do nothing\r\n            }\r\n        });\r\n    }\r\n    else {\r\n        if (accountname == \"\") {\r\n            $(\".labelclass\").text(\"Please enter Account name\");\r\n        }\r\n        else if (sortcode == \"\") {\r\n            $(\".labelclass\").text(\"Please enter Sort code\");\r\n        }\r\n        else if (accountnumber == \"\") {\r\n            $(\".labelclass\").text(\"Please enter Account number\");\r\n        }\r\n        $(\".labelclass\").css(\"display\", \"block\");\r\n        /* $(\".labelclass\").text(\"Please add Account name,Sort code and Account number\");*/\r\n        $(\".updatebutton\").prop('disabled', true);\r\n    }\r\n}\r\n\r\n$(\".numeric-only\").keypress(function (e) {\r\n    if (e.which != 8 && e.which != 0 && (e.which < 48 || e.which > 57)) {\r\n        return false;\r\n    }\r\n});","var checkbox = document.getElementById(\"add_chk\");\r\nvar buttons = document.querySelectorAll(\"#SaveAndPublishButton, #prvw_btn, #sbmt_btn\");\r\n\r\nif (checkbox === null) {\r\n    buttons.forEach(el => {\r\n        el.disabled = false;\r\n    })\r\n}\r\nfunction validateAddress() {\r\n        buttons.forEach(el => {\r\n            el.disabled = !checkbox.checked;\r\n        })\r\n}\r\n\r\nwindow.onload = function () {\r\n    if (checkbox !== null) {\r\n        checkbox.checked = false;\r\n    }\r\n}\r\n\r\nfunction showHideLabel(dropdown) {\r\n    var labelAst = document.getElementById('code_' + dropdown.id);\r\n    if (dropdown.value !== \"GB\") {\r\n        $(labelAst).css(\"visibility\", \"hidden\")\r\n    }\r\n    else {\r\n        $(labelAst).css(\"visibility\", \"visible\")\r\n    }\r\n}"]}