File: D:/HostingSpaces/SBogers10/farmfun.komma.pro/wwwroot/js/site/app.js.map
{"version":3,"file":"/js/site/app.js","mappings":"2EAAAA,OAAOC,UAAYD,OAAOC,WAAa,SAASC,GAC5C,MAAwB,iBAAVA,GACVC,SAASD,IACTE,KAAKC,MAAMH,KAAWA,I,6BCHXI,E,sOAAAA,EAIV,WAAc,aAKnB,SAASC,EAAmBC,GACxB,IAAIC,EAAcC,KAAKD,YACvB,OAAOC,KAAKC,MACR,SAAST,GACL,OAAOO,EAAYG,QAAQJ,KAAYG,MAAK,WACxC,OAAOT,QAGf,SAASW,GACL,OAAOJ,EAAYG,QAAQJ,KAAYG,MAAK,WACxC,OAAOF,EAAYK,OAAOD,SAQ1C,IAAIE,EAAiBC,WAErB,SAASC,KAaT,SAASC,EAAQC,GACb,KAAMT,gBAAgBQ,GAClB,MAAM,IAAIE,UAAU,wCACxB,GAAkB,mBAAPD,EAAmB,MAAM,IAAIC,UAAU,kBAElDV,KAAKW,OAAS,EAEdX,KAAKY,UAAW,EAEhBZ,KAAKa,YAASC,EAEdd,KAAKe,WAAa,GAElBC,EAAUP,EAAIT,MAGlB,SAASiB,EAAOC,EAAMC,GAClB,KAAuB,IAAhBD,EAAKP,QACRO,EAAOA,EAAKL,OAEI,IAAhBK,EAAKP,QAITO,EAAKN,UAAW,EAChBJ,EAAQY,cAAa,WACjB,IAAIC,EAAqB,IAAhBH,EAAKP,OAAeQ,EAASG,YAAcH,EAASI,WAC7D,GAAW,OAAPF,EAAJ,CAIA,IAAIG,EACJ,IACIA,EAAMH,EAAGH,EAAKL,QAChB,MAAOY,GAEL,YADArB,EAAOe,EAASO,QAASD,GAG7BvB,EAAQiB,EAASO,QAASF,QAVL,IAAhBN,EAAKP,OAAeT,EAAUE,GAAQe,EAASO,QAASR,EAAKL,YAPlEK,EAAKH,WAAWY,KAAKR,GAqB7B,SAASjB,EAAQgB,EAAMU,GACnB,IAEI,GAAIA,IAAaV,EACb,MAAM,IAAIR,UAAU,6CACxB,GACIkB,IACqB,WAApB,EAAOA,IAA6C,mBAAbA,GAC1C,CACE,IAAI3B,EAAO2B,EAAS3B,KACpB,GAAI2B,aAAoBpB,EAIpB,OAHAU,EAAKP,OAAS,EACdO,EAAKL,OAASe,OACdC,EAAOX,GAEJ,GAAoB,mBAATjB,EAEd,YADAe,GApEFP,EAoEiBR,EApEb6B,EAoEmBF,EAnE1B,WACHnB,EAAGsB,MAAMD,EAASE,aAkEsBd,GAIxCA,EAAKP,OAAS,EACdO,EAAKL,OAASe,EACdC,EAAOX,GACT,MAAOO,GACLrB,EAAOc,EAAMO,GA5ErB,IAAchB,EAAIqB,EAgFlB,SAAS1B,EAAOc,EAAMU,GAClBV,EAAKP,OAAS,EACdO,EAAKL,OAASe,EACdC,EAAOX,GAGX,SAASW,EAAOX,GACQ,IAAhBA,EAAKP,QAA2C,IAA3BO,EAAKH,WAAWkB,QACrCzB,EAAQY,cAAa,WACZF,EAAKN,UACNJ,EAAQ0B,sBAAsBhB,EAAKL,WAK/C,IAAK,IAAIsB,EAAI,EAAGC,EAAMlB,EAAKH,WAAWkB,OAAQE,EAAIC,EAAKD,IACnDlB,EAAOC,EAAMA,EAAKH,WAAWoB,IAEjCjB,EAAKH,WAAa,KAMtB,SAASsB,EAAQf,EAAaC,EAAYG,GACtC1B,KAAKsB,YAAqC,mBAAhBA,EAA6BA,EAAc,KACrEtB,KAAKuB,WAAmC,mBAAfA,EAA4BA,EAAa,KAClEvB,KAAK0B,QAAUA,EASnB,SAASV,EAAUP,EAAIS,GACnB,IAAIoB,GAAO,EACX,IACI7B,GACI,SAASjB,GACD8C,IACJA,GAAO,EACPpC,EAAQgB,EAAM1B,OAElB,SAASW,GACDmC,IACJA,GAAO,EACPlC,EAAOc,EAAMf,OAGvB,MAAOoC,GACL,GAAID,EAAM,OACVA,GAAO,EACPlC,EAAOc,EAAMqB,IAIrB/B,EAAQgC,UAAiB,MAAI,SAASjB,GAClC,OAAOvB,KAAKC,KAAK,KAAMsB,IAG3Bf,EAAQgC,UAAUvC,KAAO,SAASqB,EAAaC,GAE3C,IAAIkB,EAAO,IAAIzC,KAAKD,YAAYQ,GAGhC,OADAU,EAAOjB,KAAM,IAAIqC,EAAQf,EAAaC,EAAYkB,IAC3CA,GAGXjC,EAAQgC,UAAmB,QAAI3C,EAE/BW,EAAQkC,IAAM,SAASC,GACnB,OAAO,IAAInC,GAAQ,SAASN,EAASE,GACjC,IAAKuC,QAA6B,IAAfA,EAAIV,OACnB,MAAM,IAAIvB,UAAU,gCACxB,IAAIkC,EAAOC,MAAML,UAAUM,MAAMC,KAAKJ,GACtC,GAAoB,IAAhBC,EAAKX,OAAc,OAAO/B,EAAQ,IACtC,IAAI8C,EAAYJ,EAAKX,OAErB,SAASgB,EAAId,EAAGe,GACZ,IACI,GAAIA,IAAuB,WAAf,EAAOA,IAAmC,mBAARA,GAAqB,CAC/D,IAAIjD,EAAOiD,EAAIjD,KACf,GAAoB,mBAATA,EAQP,YAPAA,EAAK8C,KACDG,GACA,SAASA,GACLD,EAAId,EAAGe,KAEX9C,GAKZwC,EAAKT,GAAKe,EACU,KAAdF,GACF9C,EAAQ0C,GAEd,MAAOL,GACLnC,EAAOmC,IAIf,IAAK,IAAIJ,EAAI,EAAGA,EAAIS,EAAKX,OAAQE,IAC7Bc,EAAId,EAAGS,EAAKT,QAKxB3B,EAAQN,QAAU,SAASV,GACvB,OAAIA,GAA0B,WAAjB,EAAOA,IAAsBA,EAAMO,cAAgBS,EACrDhB,EAGJ,IAAIgB,GAAQ,SAASN,GACxBA,EAAQV,OAIhBgB,EAAQJ,OAAS,SAASZ,GACtB,OAAO,IAAIgB,GAAQ,SAASN,EAASE,GACjCA,EAAOZ,OAIfgB,EAAQ2C,KAAO,SAASC,GACpB,OAAO,IAAI5C,GAAQ,SAASN,EAASE,GACjC,IAAK,IAAI+B,EAAI,EAAGC,EAAMgB,EAAOnB,OAAQE,EAAIC,EAAKD,IAC1CiB,EAAOjB,GAAGlC,KAAKC,EAASE,OAMpCI,EAAQY,aACqB,mBAAjBiC,cACJ,SAAS5C,GACL4C,aAAa5C,KAErB,SAASA,GACLJ,EAAeI,EAAI,IAG3BD,EAAQ0B,sBAAwB,SAA+BoB,GACpC,oBAAZC,SAA2BA,SAClCA,QAAQC,KAAK,wCAAyCF,IAK9D,IAAIG,EAAY,WAIZ,GAAoB,oBAATvC,KACP,OAAOA,KAEX,GAAsB,oBAAXwC,OACP,OAAOA,OAEX,QAAsB,IAAXC,EAAAA,EACP,OAAOA,EAAAA,EAEX,MAAM,IAAIC,MAAM,kCAbJ,GAgBV,YAAaH,EAEPA,EAASjD,QAAQgC,UAAmB,UAC5CiB,EAASjD,QAAQgC,UAAmB,QAAI3C,GAFxC4D,EAAkB,QAAIjD,GAvRP,WAAL,EAAPqD,GAAwDjE,SACA,0BAAdkE,EAAAA,GAAc,mC,UCgBhE,CAACC,QAAQvB,UAAWwB,cAAcxB,UAAWyB,aAAazB,WAhBrD0B,SAAQ,SAAUC,GACdA,EAAKC,eAAe,WAGxBC,OAAOC,eAAeH,EAAM,SAAU,CAClCI,cAAc,EACdC,YAAY,EACZC,UAAU,EACVjF,MAAO,WACqB,OAApBQ,KAAK0E,YAGT1E,KAAK0E,WAAWC,YAAY3E,a,kMCd5C,IAGM4E,EAAsB,WAExB,c,4FAAc,SAEV5E,KAAK6E,iBAAmBC,SAASC,cAAc,0BAE3CC,MAAMhF,KAAK6E,oBAEf7E,KAAKiF,wCAA0CjF,KAAK6E,iBAAiBE,cAAc,yCACnF/E,KAAKkF,uBAAyBlF,KAAK6E,iBAAiBM,uBAAuB,kBAExEnF,KAAKiF,yCAAyCjF,KAAKoF,iCAAiCpF,KAAKiF,wCAAwCI,SAGpIrF,KAAKsF,iBAAmBtF,KAAKsF,iBAAiBC,KAAKvF,MACnDA,KAAKwF,yCAA2CxF,KAAKwF,yCAAyCD,KAAKvF,MACnGA,KAAKoF,iCAAmCpF,KAAKoF,iCAAiCG,KAAKvF,MACnFA,KAAKyF,kBAAoBzF,KAAKyF,kBAAkBF,KAAKvF,MACrDA,KAAK0F,iBAAmB1F,KAAK0F,iBAAiBH,KAAKvF,MAGnDA,KAAKsF,kBAAiB,I,UAgEzB,O,EA7DD,G,EAAA,+BAGA,SAAiBK,GAEb3F,KAAKiF,wCAAwCW,oBAAoB,SAAU5F,KAAKwF,0CAGhF,IADA,IAAMK,EAA+B7F,KAAKkF,uBAAuBjD,OACxD6D,EAAQ,EAAGA,EAAQD,EAA8BC,IAAS,CAC/D,IAAMC,EAAwB/F,KAAKkF,uBAAuBY,GAC1DC,EAAsBH,oBAAoB,SAAU5F,KAAKyF,mBAErDM,EAAsBV,SACtBrF,KAAK0F,iBAAiBK,EAAsBvG,OAIpD,GAAImG,EAAS,CACT3F,KAAKiF,wCAAwCe,iBAAiB,SAAUhG,KAAKwF,0CAC7E,IAAK,IAAIM,EAAQ,EAAGA,EAAQD,EAA8BC,IAAS9F,KAAKkF,uBAAuBY,GAAOE,iBAAiB,SAAUhG,KAAKyF,sBAI9I,sDAKA,SAAyCQ,GAErC,IAAMC,EAAQD,EAAME,cACpBnG,KAAKoF,iCAAiCc,EAAMb,WAC/C,8CAED,SAAiC7F,GAEEQ,KAAK6E,iBAAiBE,cAAc,oCAG5CqB,QAAU5G,IACpC,+BAGD,SAAkByG,GAEd,IAAMI,EAAqBJ,EAAME,cACjCnG,KAAK0F,iBAAiBW,EAAmB7G,SAG7C,8BAQA,SAAiB8G,GAEStG,KAAK6E,iBAAiBE,cAAc,oBAC5CqB,OAA0B,GAAhBE,O,8EAC3B,EArFuB,G,8RCHrB,IAAMC,EAAS,WAClB,WAAYC,GAAe,Y,4FAAA,4CAkBA,SAACP,GACxB,IAAMQ,EAAmBR,EAAMS,OAAOC,QAAQC,WACxCC,EAAsB,EAAKC,QAAQC,QAAO,SAAAC,GAAM,OAAIA,EAAOL,QAAQC,aAAeH,KAAkB,GACtGI,GAAqBA,EAAoBI,UAAUC,IAAI,aAC9D,mCAE0B,SAACjB,GACxB,IAAMQ,EAAmBR,EAAMS,OAAOC,QAAQC,WACxCC,EAAsB,EAAKC,QAAQC,QAAO,SAAAC,GAAM,OAAIA,EAAOL,QAAQC,aAAeH,KAAkB,GACtGI,GAAqBA,EAAoBI,UAAUE,OAAO,aACjE,iCAEwB,SAAClB,GACtB,IAAMQ,EAAmBR,EAAMS,OAAOC,QAAQC,WACxCQ,EAAwB,EAAKC,UAAUN,QAAO,SAAA5C,GAAI,OAAIA,EAAKwC,QAAQC,aAAeH,KAAkB,GACtGW,GAAuBA,EAAsB1C,WAAWuC,UAAUC,IAAI,UAC1EjB,EAAMS,OAAOO,UAAUC,IAAI,aAC9B,iCAEwB,SAACjB,GACtB,IAAMQ,EAAmBR,EAAMS,OAAOC,QAAQC,WACxCQ,EAAwB,EAAKC,UAAUN,QAAO,SAAA5C,GAAI,OAAIA,EAAKwC,QAAQC,aAAeH,KAAkB,GACtGW,GAAuBA,EAAsB1C,WAAWuC,UAAUE,OAAO,UAC7ElB,EAAMS,OAAOO,UAAUE,OAAO,aACjC,sBAEa,SAAClB,GACX,IAAMqB,EAAkBrB,EAAMS,OAAOC,QAAQC,WAC7C,EAAKW,cAAcD,MA7CnBtH,KAAKqH,UAAYxE,MAAM2E,KAAKhB,EAAciB,iBAAiB,4BAC3DzH,KAAK8G,QAAUjE,MAAM2E,KAAKhB,EAAciB,iBAAiB,yBACzDzH,KAAK0H,MAAQ7E,MAAM2E,KAAKhB,EAAciB,iBAAiB,uBACvDzH,KAAK2H,aAAenB,EAAczB,cAAc,uBAEhD/E,KAAKqH,UAAUnD,SAAQ,SAAAC,GAAI,OAAIA,EAAK6B,iBAAiB,aAAc,EAAK4B,6BACxE5H,KAAKqH,UAAUnD,SAAQ,SAAAC,GAAI,OAAIA,EAAK6B,iBAAiB,aAAc,EAAK6B,6BACxE7H,KAAKqH,UAAUnD,SAAQ,SAAAC,GAAI,OAAIA,EAAK6B,iBAAiB,QAAS,EAAK8B,gBACnE9H,KAAK8G,QAAQ5C,SAAQ,SAAAC,GAAI,OAAIA,EAAK6B,iBAAiB,aAAc,EAAK+B,2BACtE/H,KAAK8G,QAAQ5C,SAAQ,SAAAC,GAAI,OAAIA,EAAK6B,iBAAiB,aAAc,EAAKgC,2BACtEhI,KAAK8G,QAAQ5C,SAAQ,SAAAC,GAAI,OAAIA,EAAK6B,iBAAiB,QAAS,EAAK8B,gBAEjE,IAAMG,EAAiBvI,KAAKC,MAAMD,KAAKwI,UAAYlI,KAAKqH,UAAUpF,OAAS,GAAK,GAChFjC,KAAKuH,cAAcU,G,UAiDtB,O,EAhDA,G,EAAA,4BAkCD,SAAcE,GACVnI,KAAK0H,MAAMxD,SAAQ,SAAAkE,GAAI,OAAIA,EAAKnB,UAAUC,IAAI,aAC3BlH,KAAK0H,MAAMX,QAAO,SAAAqB,GAAI,OAAIA,EAAKzB,QAAQC,YAAcuB,KAAQ,GAErElB,UAAUE,OAAO,UAC5BnH,KAAK8G,QAAQ5C,SAAQ,SAAA8C,GAAM,OAAIA,EAAOC,UAAUE,OAAO,eACvDnH,KAAKqH,UAAUnD,SAAQ,SAAAC,GAAI,OAAIA,EAAKO,WAAWuC,UAAUE,OAAO,eAGhE,IAAMkB,EAAsBrI,KAAK8G,QAAQC,QAAO,SAAAC,GAAM,OAAIA,EAAOL,QAAQC,YAAcuB,KAAQ,GACzFG,EAAwBtI,KAAKqH,UAAUN,QAAO,SAAA5C,GAAI,OAAIA,EAAKwC,QAAQC,YAAcuB,KAAQ,GAE5FE,GAAqBA,EAAoBpB,UAAUC,IAAI,YAC1DoB,EAAsB5D,WAAWuC,UAAUC,IAAI,iB,8EAClD,EAhEiB,G,mBCAtB,MAAMqB,EAAM,CAMRC,WAAY,MAKZC,gBAAiB,eACjBC,cAAe,aAKfC,SAAU,GAKVC,QAAS,CACLC,KAAM,KACNC,WAAY,sBACZC,UAAW,GAMfC,eAAgB,CACZC,MAAM,GAIVC,qBAAsB,KAEtBC,KAAM,gBAEiCrI,IAAhC4C,OAAO0F,sBAKVb,EAAII,SAAW7D,SAAS2C,iBAAiB,UAAWc,EAAIC,WAAY,KACzC,IAAxBD,EAAII,SAAS1G,QAEhBsG,EAAIc,8BAPA9F,QAAQC,KAAK,0CAcrB6F,2BAA4B,WAExBd,EAAIW,qBAAuB,IAAIE,qBAAqBb,EAAIe,eAAgB,CACpET,KAAMN,EAAIK,QAAQC,KAClBC,WAAYP,EAAIK,QAAQE,WACxBC,UAAWR,EAAIK,QAAQG,YAG3BR,EAAII,SAASzE,SAAQ,SAAUqF,GAC3BhB,EAAIW,qBAAqBM,QAAQD,GACjCA,EAAQtC,UAAUC,IAAIqB,EAAIE,qBASlCa,eAAgB,SAAUG,EAASC,GAC/BD,EAAQvF,SAAQ,SAAUyF,GAIlBA,EAAMC,kBAAoBrB,EAAIK,QAAQG,WAEtCR,EAAIsB,iBAAiBF,GAEjBpB,EAAIuB,iBAAiBH,EAAMjD,OAAQ,SACnCgD,EAASK,UAAUJ,EAAMjD,SAErB6B,EAAIuB,iBAAiBH,EAAMjD,OAAQ,SAG3C6B,EAAIyB,iBAAiBL,OAQjCM,0BAA2B,WACzB1B,EAAIW,qBAAqBgB,aACzB3B,EAAIW,qBAAuB,MAS7BY,iBAAkB,SAAUP,EAASY,GAEjC,MAAMC,EAASb,EAAQc,aAAa,QAAS9B,EAAIC,WAAa,IAAM2B,GAEpE,OAAc,OAAXC,EAMU,SAHDD,EAIkB,QAAVC,EAGDA,EAGZ7B,EAAIS,eAAemB,IAO9BN,iBAAkB,SAAUF,GACxB,MAAMJ,EAAUI,EAAMjD,OACtB6C,EAAQtC,UAAUE,OAAOoB,EAAIE,iBAC7Bc,EAAQtC,UAAUC,IAAIqB,EAAIG,gBAO9BsB,iBAAkB,SAAUL,GACxB,MAAMJ,EAAUI,EAAMjD,OACtB6C,EAAQtC,UAAUC,IAAIqB,EAAIE,iBAC1Bc,EAAQtC,UAAUE,OAAOoB,EAAIG,iB,wBCvIrCH,EAAIK,QAAQE,WAAa,qBACzBP,EAAIY,OAEJzF,OAAO4G,MAAQA,IAAAA,SACf5G,OAAO4G,MAAMC,SAASC,QAAQC,OAAS,CACnC,mBAAoB,iBACpB,eAAiB3F,SAASC,cAAc,2BAA2BsF,aAAa,YASpFK,EAAQ,KACRA,EAAQ,MAKRA,EAAQ,IACRA,EAAQ,MACRA,EAAQ,MACRA,EAAQ,MAMRA,EAAQ,MACRA,EAAQ,MACRA,EAAQ,MACRA,EAAQ,MAORA,EAAQ,MACRA,EAAQ,MACRA,EAAQ,KACRA,EAAQ,MACRA,EAAQ,MACRA,EAAQ,MACRA,EAAQ,MACRA,EAAQ,MACRA,EAAQ,MACRA,EAAQ,MACRA,EAAQ,MAERA,EAAQ,KACRA,EAAQ,MAER,IAAI9F,EAEJE,SAAS2C,iBAAiB,iBAAiBvD,SAAQ,SAACsC,GAAa,OAAK,IAAID,EAAUC,MAQpF,IAAImE,EAAiB7F,SAASC,cAAc,YACxC4F,GACA,8BAAmE1K,MAAK,YACpE,IAAI2K,EADuF,WAC1ED,MAIzB,IAAIE,EAAe/F,SAASC,cAAc,kBACtC8F,GACA,8BAAyE5K,MAAK,YAC1E,IAAI6K,EAD+F,WAChFD,MAI3B,IAAIE,EAAiBjG,SAASC,cAAc,qBACxCgG,GACA,6BAAsE9K,MAAK,YACvE,IAAI+K,EAD0F,WAC7ED,MAIzB,IAAIE,EAAwBnG,SAASC,cAAc,wBAC/CkG,GACA,4BAA2FhL,MAAK,YAC5F,IAAIiL,EADkH,WAClGD,MAI5B,IAAIE,GAAgBC,EAAAA,EAAAA,IAAI,MACpBC,GAAcD,EAAAA,EAAAA,IAAI,MAClBE,GAAkBF,EAAAA,EAAAA,IAAI,MAEtBG,EAAYzG,SAAS0G,eAAe,aACpCC,EAAc3G,SAAS2C,iBAAiB,kBAE5C,GAAGgE,EAAYxJ,OAAS,EAAG,CACvB,IAAIsJ,EAAW,MAAM,IAAI3H,MAAM,wDAE5B2H,EAAU5E,QAAQ+E,WAAUJ,EAAgB9L,MAAQ+L,EAAU5E,QAAQ+E,UACtEH,EAAU5E,QAAQgF,OAAMN,EAAY7L,MAAQ+L,EAAU5E,QAAQgF,OAEjEC,EAAAA,EAAAA,GAAmBC,KAAKC,MAAMP,EAAU5E,QAAQoF,sBACzCR,EAAU5E,QAAQoF,aAEzB,8BAAmE9L,MAAK,YAA0B,IAAf+L,EAAS,UAExFP,EAAYvH,SAAQ,SAAC+H,GAEjBA,EAAOjG,iBAAiB,SAAS,WAE7B,IAAMkG,EAAiBC,SAASlG,MAAME,cAAcQ,QAAQyF,WAEzDjB,EAAc3L,QAAU0M,EAAgBf,EAAc3L,MAAQ,KAC5D2L,EAAc3L,MAAQ0M,SAInCG,EAAAA,EAAAA,IAAU,CACNC,WAAY,CAACN,UAAAA,GACbO,KAAI,WACA,MAAO,CACHpB,cAAAA,EACAE,YAAAA,EACAC,gBAAAA,MAGTkB,MAAMjB,Q,UCxIjB,IAAMkB,EAAkB,CAEpBC,oBAAsB,qBACtBC,mBAAqB,oBAErBxD,KAAM,WAEF,IAAMyD,EAAa9H,SAAS2C,iBAAiB,IAAIgF,EAAgBC,qBAC3DG,EAAkBD,EAAW3K,OAEnC,GAAG+C,MAAM4H,IAAmC,IAApBC,EACpB,IAAI,IAAI1K,EAAI,EAAGA,EAAI0K,EAAiB1K,IAAI,CACpC,IAAM2K,EAASF,EAAWzK,GAC1BsK,EAAgBM,WAAWD,KAKvCC,WAAY,SAAUD,GAClBA,EAAO9G,iBAAiB,QAASyG,EAAgBO,gBAAgB,IAGrEA,eAAgB,SAAU/G,GAOtB,IANA,IAAM9B,EAAO8B,EAAMS,OACbuG,EAAS9I,EAAKkG,aAAa,iBAC3B6C,EAAapI,SAAS2C,iBAAiB,IAAIgF,EAAgBC,qBAC3DS,EAAYrI,SAAS2C,iBAAiB,IAAIgF,EAAgBE,oBAGxDxK,EAAI,EAAGA,EAAI+K,EAAWjL,OAAQE,IAClC+K,EAAW/K,GAAG8E,UAAUE,OAAO,aAKnC,IAAI,IAAIhF,EAAI,EAAGA,EAAIgL,EAAUlL,OAAQE,IACjCgL,EAAUhL,GAAG8E,UAAUE,OAAO,aAE3BgG,EAAUhL,GAAGkI,aAAa,mBAAqB4C,GAC9CE,EAAUhL,GAAG8E,UAAUC,IAAI,aAKnCjB,EAAMmH,iBAGNjJ,EAAK8C,UAAUC,IAAI,eAI3BuF,EAAgBtD,Q,UChDhB,IAAMkE,EAAmB,CAErBC,cAAe,GAKfC,MAAO,WAGH,IAAMC,EAAqB1I,SAAS2C,iBAAiB,yBAErD,GAAGzC,MAAMwI,GAGL,IADA,IAAMC,EAA6BD,EAAmBvL,OAC9CE,EAAI,EAAGA,EAAIsL,EAA4BtL,IAAI,CAE/C,IAAMuL,EAAeF,EAAmBrL,GACxCkL,EAAiBM,aAAaD,KAY1CC,aAAc,SAAUC,GAGpB,IAAMC,EAAeD,EAAa7I,cAAc,qBAG7CC,MAAM6I,GAELA,EAAa7H,iBAAiB,SAAS,WACnCqH,EAAiBS,aAAaF,MAIlCrK,QAAQwK,IAAI,8CAWpBD,aAAY,SAACE,GAGT,IAAMC,EAAYD,EAAiBvG,iBAAiB,mBAEpD,GAAGzC,MAAMiJ,GAAW,CAOhB,IAJA,IAAIC,EAAe,GACfC,EAAuB,EAErBC,EAAgBH,EAAUhM,OACxBE,EAAI,EAAGA,EAAIiM,EAAejM,IAAI,CAGlC,IAAMkM,EAAUJ,EAAU9L,GAGpBmM,EAAcD,EAAQhE,aAAa,QAGrCgD,EAAiBkB,iBAAiBD,KAEtCJ,EAAcI,GAAgBjB,EAAiBmB,gBAAgBH,GAC/DF,KAIJ,GAA4B,IAAzBA,EAA4B,OAG/Bd,EAAiBoB,YAAYP,EAAcF,QAG3CzK,QAAQwK,IAAI,6CAWpBQ,iBAAkB,SAASD,GACvB,OAA4D,IAAzDjB,EAAiBC,cAAcoB,QAAQJ,IAe9CE,gBAAiB,SAASH,GAGFA,EAAQM,SAI5B,MAAoB,aAAjBN,EAAQO,KACAP,EAAQhJ,QAKJgJ,EAAQ7O,OAc3BiP,YAAa,SAASI,EAAOb,GAGzBa,EAAQxB,EAAiByB,gBAAgBD,GAEzC,IAAME,EAAYf,EAAiB3D,aAAa,cAG1C2E,EAAO,IAAH,OAAOD,EAAS,YAE1B,IACIE,KAAKC,KAAKF,EAAMH,GAAO,SAAUM,GAE7B,IAAMC,EAAWvD,KAAKC,MAAMqD,EAAYC,UAExC,OAAQD,EAAYE,QAChB,KAAK,IACD,OAAOhC,EAAiBiC,mBAAmBF,EAASG,aACxD,KAAK,IACD,OAAOlC,EAAiBmC,uBAAuBJ,EAASK,OAAQzB,GAKxE,OAAOX,EAAiBqC,qBAAqB1B,MAGrD,MAAOvM,GACH,OAAO4L,EAAiBqC,qBAAqB1B,KAYrDc,gBAAiB,SAASD,GAEtB,OADAA,EAAMc,QAAU,QACTd,GAWXW,uBAAwB,SAASC,EAAQzB,GAGrC,IAAM4B,EAAe5B,EAAiBjJ,cAAc,kBAGjDC,MAAM4K,KAAeA,EAAaC,UAAY,IAGjDxC,EAAiByC,4BAA4B9B,GAE7C3J,OAAO0L,KAAKN,GAAQvL,SAAQ,SAASmK,GAEjC,IAAI2B,EAAS,KACTC,EAAsB,KAG1B,GAAe,WAAZ5B,GAAoC,gBAAZA,EAA2B,CAGlD,IAAM6B,EAAclC,EAAiBjJ,cAAc,IAAMsJ,GAGzD2B,EAAS3C,EAAiB8C,mBAAmBD,GAG1ClL,MAAMgL,KAASC,EAAsBD,EAAOjL,cAAc,2BAG1DC,MAAMiL,KAAsBA,EAAoBJ,UAAY,IASnE,IAJA,IAAMO,EAAkBX,EAAOpB,GAGzBgC,EAAwBD,EAAgBnO,OACtCE,EAAI,EAAGA,EAAIkO,EAAuBlO,IAAI,CAC1C,IAAMmO,EAAsBF,EAAgBjO,GAG5C,GAAe,WAAZkM,GAAoC,gBAAZA,IAGpBrJ,MAAMgL,IAASA,EAAO/I,UAAUC,IAAI,aAGpClC,MAAMiL,IACT,CACI,IAAIM,EAAsBN,EAAoBJ,UAC9CU,GAAuB,SAAWC,sBAAsBF,GAAuB,UAC/EL,EAAoBJ,UAAYU,EAKxC,GAAGvL,MAAM4K,GAAc,CACnB,IAAIW,EAAsBX,EAAaC,UACvCU,GAAuB,OAASC,sBAAsBF,GAAuB,QAC7EV,EAAaC,UAAYU,QAYzCT,4BAA2B,SAAC9B,GAKxB,IAHA,IAAMyC,EAAgBzC,EAAiBvG,iBAAiB,cAClDiJ,EAAsBD,EAAcxO,OAElCE,EAAI,EAAGA,EAAIuO,EAAqBvO,IACpCsO,EAActO,GAAG8E,UAAUE,OAAO,cAW1CgJ,mBAAoB,SAAS9B,GAGzB,IAAKrJ,MAAMqJ,GAAU,OAAO,KAG5BsC,aAAetC,EACfuC,YAAc,EAGd,GAGI,GAFAA,cACAD,aAAeA,aAAajM,WACzBiM,aAAa1J,UAAU4J,SAAS,mBAAoB,OAAOF,mBAChC,SAAzBA,aAAaG,SAAsBF,aAAe,IAE3D,OAAO,MASXtB,mBAAoB,SAAUyB,GAC1BrN,OAAOgI,SAAWqF,GAStBrB,qBAAsB,SAAU1B,GAC5BzK,QAAQwK,IAAIC,GACZzK,QAAQwK,IAAI,oCAIpBV,EAAiBE,S,SCxUjB,IAAMyD,EAAgB,CAElBC,UAAY,KACZC,cAAgB,KAChBC,cAAgB,KAEhBC,aAAe,KAEfC,+BAAiC,IACjCC,gBAAiB,EAGjBnI,KAAO,WAGH6H,EAAcG,cAAgBrM,SAASC,cAAc,sCAGrDiM,EAAcC,UAAYnM,SAASC,cAAc,kBAG9CC,MAAMgM,EAAcC,WACnBD,EAAcO,iBAIdP,EAAcE,cAAgBpM,SAASC,cAAc,sBAGlDC,MAAMgM,EAAcE,gBACnBF,EAAcQ,qBAKnBxM,MAAMgM,EAAcG,gBACnBH,EAAcS,yBAIlBT,EAAcI,aAAetM,SAASC,cAAc,qBAEjDC,MAAMgM,EAAcI,eACnBJ,EAAcU,oBAKtBH,cAAe,WACX,IAAMI,EAAcX,EAAcC,UAAUlM,cAAc,0BACvDC,MAAM2M,IACLA,EAAY3L,iBAAiB,QAASgL,EAAcY,qBAK5DJ,kBAAmB,WAGf,IAAMK,EAA2Bb,EAAcG,cAAcpM,cAAc,+BACxEC,MAAM6M,IACLA,EAAyB7L,iBAAiB,QAASgL,EAAcc,oBAIrE,IAAMC,EAAsBf,EAAcG,cAAcpM,cAAc,mCACnEC,MAAM+M,MAE8B,IAAhCA,EAAoB1M,UACnB2L,EAAcM,gBAAiB,GAGnCS,EAAoB/L,iBAAiB,SAAUgL,EAAcgB,wBAIjE,IAAMC,EAAejB,EAAcG,cAAcpM,cAAc,sBAC5DC,MAAMiN,IACLA,EAAajM,iBAAiB,QAASgL,EAAckB,oBAM7DR,iBAAkB,WAGd,IAAMK,EAAsBf,EAAcI,aAAarM,cAAc,mCAClEC,MAAM+M,MAI8B,IAAhCA,EAAoB1M,QACnB2L,EAAcM,gBAAiB,EAG/BN,EAAcM,gBAAiB,EAGnCS,EAAoB/L,iBAAiB,SAAUgL,EAAcgB,wBAIjE,IAAMG,EAAanB,EAAcI,aAAarM,cAAc,4BACzDC,MAAMmN,IACLA,EAAWnM,iBAAiB,SAAS,WACjCgL,EAAcK,+BAAiC,EAC/CL,EAAckB,wBAM1BT,uBAAwB,WAChBW,OAAOC,IAAI,iBACXrB,EAAcG,cAAclK,UAAUC,IAAI,gBAG1C8J,EAAcG,cAAclK,UAAUE,OAAO,eAC7CrC,SAASwN,KAAKrL,UAAUC,IAAI,2BAIpC0K,mBAAoB,WAChBQ,OAAOG,IAAI,iBAAiB,EAAM,IAClCvB,EAAcG,cAAclK,UAAUC,IAAI,wBAC1CpC,SAASwN,KAAKrL,UAAUE,OAAO,0BAGnC2K,mBAAoB,WAChBd,EAAcE,cAAcnM,cAAc,uBAAuBkC,UAAUE,OAAO,aAClF6J,EAAcE,cAAcnM,cAAc,mBAAmBkC,UAAUC,IAAI,cAG/E8K,sBAAuB,WAChBhB,EAAcM,eACbN,EAAcM,gBAAiB,EAG/BN,EAAcM,gBAAiB,GAIvCY,kBAAmB,WAGZlB,EAAcM,eACbc,OAAOG,IAAI,yBAA0B,OAAQ,IAG1CH,OAAOC,IAAI,2BACVD,OAAOI,MAAM,0BAIrBxB,EAAcY,qBAGdtR,YAAW,WACPoL,SAAS+G,WACVzB,EAAcK,kCAKzBL,EAAc7H,Q,UCrKd,IAAMuJ,EAA4B,CAE9BC,uBAAwB,KACxBC,mBAAoB,KACpBC,WAAY,EACZC,UAAU,EACVC,iBAAkB,IAElB5J,KAAM,WAEFuJ,EAA0BC,uBAAyB7N,SAASC,cAAc,4BAItEC,MAAM0N,EAA0BC,0BAEhCD,EAA0BM,eAAiBN,EAA0BC,uBAAuBtI,aAAa,uBACzGqI,EAA0BO,eAAiBP,EAA0BC,uBAAuBtI,aAAa,yBAEzGqI,EAA0BE,mBAAqBF,EAA0BC,uBAAuBlL,iBAAiB,2BAEjHiL,EAA0BQ,YAEuB,SAA7CR,EAA0BO,gBAC1BP,EAA0BS,kBAGa,IAAvCT,EAA0BI,WAC1BJ,EAA0BK,iBAAmBK,YAAYV,EAA0BW,YAAaX,EAA0BK,qBAMtIM,YAAa,WACTX,EAA0BY,WAC1BZ,EAA0Ba,gBAG9BL,UAAW,WAEP,IAAMM,EAAOd,EAA0BC,uBAAuB5N,cAAc,wCACtE0O,EAAWf,EAA0BC,uBAAuB5N,cAAc,4CAEhFyO,EAAKxN,iBAAiB,SAAS,WAC3B0M,EAA0BY,WAC1BZ,EAA0Ba,kBAE9BE,EAASzN,iBAAiB,SAAS,WAC/B0M,EAA0BgB,eAC1BhB,EAA0Ba,mBAIlCJ,eAAgB,WAGZ,IAAMQ,EAAgB,IAAIC,OAAOlB,EAA0BC,wBAC3DgB,EAAcE,GAAG,aAAa,WAC1BnB,EAA0BY,WAC1BZ,EAA0Ba,kBAG9BI,EAAcE,GAAG,cAAc,WAC3BnB,EAA0BgB,eAC1BhB,EAA0Ba,mBAMlCO,WAAY,WAKR,IAHA,IAAMC,EAAsBrB,EAA0BE,mBAAmB3Q,OACrE+R,EAAkB,GAEd7R,EAAG,EAAGA,EAAI4R,EAAqB5R,IAAK,CAExC,IACM8R,EADevB,EAA0BE,mBAAmBzQ,GAC9BkI,aAAa,gBACjD2J,EAAgBrS,KAAKsS,GAGzB,MAAO,CAACC,IAAKF,IAGjBG,cAAe,WACXzB,EAA0BC,uBAAuB5N,cAAc,qCAAqCkC,UAAUE,OAAO,cACrHiN,iBAAiBC,UAGrBf,SAAU,WAENZ,EAA0BG,aAGtBH,EAA0BG,aAAeH,EAA0BE,mBAAmB3Q,SAAQyQ,EAA0BG,WAAa,IAG7Ia,aAAc,WAGVhB,EAA0BG,aAGtBH,EAA0BG,WAAa,IAAGH,EAA0BG,WAAaH,EAA0BE,mBAAmB3Q,OAAS,IAI/IqS,gBAAiB,WAEb5B,EAA0BE,mBAAqBF,EAA0BC,uBAAuBlL,iBAAiB,2BAEjH,IADA,IAAMsM,EAAsBrB,EAA0BE,mBAAmB3Q,OACjEE,EAAI,EAAGA,EAAI4R,EAAqB5R,IAAK,CACpBuQ,EAA0BE,mBAAmBzQ,GACrDoS,aAAa,gBAAiBpS,GAG/CuQ,EAA0Ba,gBAI9BA,aAAc,WASV,IAPA,IAAMiB,EAAkB9B,EAA0B+B,uBAAuB,GACnEC,EAAahC,EAA0B+B,uBAAuB,GAC9DhB,EAAWf,EAA0B+B,uBAAuB,GAC5DjB,EAAOd,EAA0BiC,mBAAmB,GACpDC,EAASlC,EAA0BiC,mBAAmB,GACtDE,EAAgBnC,EAA0BiC,mBAAmB,GAE1DxS,EAAI,EAAGA,EAAIuQ,EAA0BE,mBAAmB3Q,OAAQE,IAAK,CAE1E,IAAM2S,EAAQpC,EAA0BE,mBAAmBzQ,GAY3D,OATA2S,EAAM7N,UAAUE,OAAO,8CACvB2N,EAAM7N,UAAUE,OAAO,4CACvB2N,EAAM7N,UAAUE,OAAO,4CACvB2N,EAAM7N,UAAUE,OAAO,4CACvB2N,EAAM7N,UAAUE,OAAO,4CACvB2N,EAAM7N,UAAUE,OAAO,4CACvB2N,EAAM7N,UAAUE,OAAO,0CACvB2N,EAAM7N,UAAUE,OAAO,aAEfhF,GACJ,KAAKqS,EACDM,EAAM7N,UAAUC,IAAI,8CACpB,MACJ,KAAKwN,EACDI,EAAM7N,UAAUC,IAAI,4CACpB,MACJ,KAAKuM,EACDqB,EAAM7N,UAAUC,IAAI,4CACpB,MACJ,KAAKwL,EAA0BG,WAC3BiC,EAAM7N,UAAUC,IAAI,4CACpB,MACJ,KAAKsM,EACDsB,EAAM7N,UAAUC,IAAI,4CACpB,MACJ,KAAK0N,EACDE,EAAM7N,UAAUC,IAAI,4CACpB,MACJ,KAAK2N,EACDC,EAAM7N,UAAUC,IAAI,0CACpB,MACJ,QACI4N,EAAM7N,UAAUC,IAAI,gBAOpCuN,uBAAwB,SAASM,GAC7B,IAAIrJ,EAAWgH,EAA0BG,WAAakC,EACtD,OAAIrJ,EAAW,EAAUgH,EAA0BE,mBAAmB3Q,OAASyJ,EACxEA,GAGXiJ,mBAAoB,SAASI,GACzB,IAAIrJ,EAAWgH,EAA0BG,WAAakC,EACtD,OAAGrJ,GAAYgH,EAA0BE,mBAAmB3Q,OAAeyJ,EAAWgH,EAA0BE,mBAAmB3Q,OAC5HyJ,GAIXsJ,uBAAuB,SAAUC,GAE7B,GAAsB,MAAnBA,EAAQ5F,OAGP,OAFA9L,QAAQwK,IAAI,2CACZ2E,EAA0ByB,gBAI9B,GAAsB,MAAnBc,EAAQ5F,OAGP,OAFA9L,QAAQwK,IAAI,2CAA6CkH,EAAQ5F,aACjEqD,EAA0ByB,gBAI9B,IACMe,EADuBrJ,KAAKC,MAAMmJ,EAAQ7F,UACL7C,KAEvC4I,EAAoB,GAExBD,EAAchR,SAAQ,SAAUC,GAC5BgR,EAAoBzC,EAA0B0C,yBAAyBD,EAAmBhR,GAG1F,IAAMkR,EAAoB3C,EAA0BC,uBAAuB5N,cAAc,yCAA2CZ,EAAKmR,GAAK,MAC3ItQ,MAAMqQ,IAKLA,EAAkBlO,YAI1B,IAAMoO,EAAwB7C,EAA0BC,uBAAuB5N,cAAc,qCACzFyQ,EAAmBD,EAAsB1F,UAC7C0F,EAAsB1F,UAAYsF,EAAoBK,EAEtD9C,EAA0B4B,kBAE1B5B,EAA0ByB,iBAG9BiB,yBAA0B,SAASD,EAAmBM,GAWlD,OATGzQ,MAAMyQ,EAAaC,MAA6B,KAArBD,EAAaC,IAAYP,GAAqB,+DAAiEM,EAAaC,IAAM,6CAA+CD,EAAaC,IAAM,KAC7NP,GAAqB,OAC1BA,GAAqB,iEACrBA,GAAqB,kCAAoCM,EAAaH,GAAjD,iEACgDG,EAAaE,MAAQ,WAEvF3Q,MAAMyQ,EAAaC,MAA8B,KAArBD,EAAaC,IAAYP,GAAqB,OACxEA,GAAqB,SAEnBA,IAKfzC,EAA0BvJ,Q,4FCzP1ByM,EAAAA,EAAAA,SAAmBC,EAAAA,OAInBD,EAAAA,EAAAA,cAA0B,CACtBE,WAAY,QAIZC,UAAW,yEACXC,UAAW,yEACXC,cAAe,QAgBnB,IAAMC,EAAoB,CAEtBC,YAAa,GAEbhN,KAAM,WAIF,IAFA,IAAMiN,EAAqBtR,SAASK,uBAAuB,kBAEnDhD,EAAI,EAAGA,EAAIiU,EAAmBnU,OAAQE,IAC1C+T,EAAkBG,cAAcD,EAAmBjU,KAI3DkU,cAAa,SAACC,GAEV,IAAIC,EAAeD,EAAkB9W,MACjCgX,EAAUF,EAAkBjM,aAAa,iBAEzCoM,EAAqBH,EAAkBjM,aAAa,gCAEnDoM,EADDzR,MAAMyR,GACgB5K,KAAKC,MAAM2K,GADe,IAGpDb,EAAAA,EAAAA,GAAUU,EAAmB,CACzBE,QAASA,EACTE,YAAaH,EACb,QAAW,CACP,SAAS5K,GACL,OAAsD,IAA/C8K,EAAmB/H,QAAQ/C,EAAKgL,gBAO3DT,EAAkB/M,Q,UC1DlB,IAAMyN,EAAqB,CAEvBC,IAAK,KACLC,IAAK,GAEL3N,KAAM,WAEF,GADAyN,EAAmBC,IAAM/R,SAASC,cAAc,oBAC3CC,MAAM4R,EAAmBC,KAI9B,IAFA,IAAME,EAAaH,EAAmBC,IAAIpP,iBAAiB,uBAEnDuP,EAAI,EAAGA,EAAID,EAAW9U,OAAQ+U,IAAK,CACvC,IAAMC,EAAYF,EAAWC,GAE7BC,EAAUjR,iBAAiB,aAAa,WACpC4Q,EAAmBM,oBAAoBlX,SAE3CiX,EAAUjR,iBAAiB,YAAY,WACnC4Q,EAAmBO,qBAAqBnX,WAMpDkX,oBAAqB,SAAU3N,GACLqN,EAAmBC,IAAI9R,cAAc,IAAMwE,EAAQ5C,QAAQD,QACnEO,UAAUE,OAAO,cAGnCgQ,qBAAsB,SAAU5N,GACNqN,EAAmBC,IAAI9R,cAAc,IAAMwE,EAAQ5C,QAAQD,QACnEO,UAAUC,IAAI,eAMpC0P,EAAmBzN,Q,UCrCnB,IAAMiO,EAAc,CAEhBC,KAAM,GACNP,IAAK,GAEL3N,KAAM,WAGF,IAAMkO,EAAOvS,SAAS2C,iBAAiB,kBAGvC,GAAmB,IAAhB4P,EAAKpV,OAAe,CAGnB,IAAI,IAAIE,EAAI,EAAGA,EAAIkV,EAAKpV,OAAQE,IAAK,CAGjC,IAAM0U,EAAMQ,EAAKlV,GAEjB,GAAI0U,EAAIS,aAAa,oBAAuBT,EAAIS,aAAa,mBAA7D,CAEA,IAAIC,EAAMC,WAAWX,EAAIxM,aAAa,oBAClCoN,EAAMD,WAAWX,EAAIxM,aAAa,oBAEtC+M,EAAYC,KAAK1V,KAAK,CAClB+V,KAAMb,EACNnL,SAAU,CACN6L,IAAKA,EACLE,IAAKA,GAETE,OAAQP,EAAYQ,sBAKN,oBAAXC,aAAiD,IAAhBA,OAAOR,KAE/CS,UAAU,+CAAiDV,EAAYN,IAAKM,EAAYW,UAGxFX,EAAYW,aAQxBA,SAAU,WAEN,IAAK,IAAI5V,EAAI,EAAGA,EAAIiV,EAAYC,KAAKpV,OAAQE,IAEzC,KAAM0U,EAAMO,EAAYC,KAAKlV,GAGvB6V,EAAY,IAAIH,OAAOR,KAAKY,IAAIpB,EAAIa,KAAM,CAC5CQ,KAAM,GACNC,OAAQtB,EAAInL,SACZ0M,kBAAkB,EAClBT,OAAQd,EAAIc,SAID,IAAIE,OAAOR,KAAKgB,OAAO,CAClCC,SAAUzB,EAAInL,SACdmL,IAAKmB,MAUjBJ,iBAAkB,WAEd,MAAO,CACC,CACI,YAAe,MACf,YAAe,mBACf,QAAW,CACP,CACI,MAAS,WAEb,CACI,UAAa,QAIzB,CACI,YAAe,iBACf,YAAe,gBACf,QAAW,CACP,CACI,MAAS,aAIrB,CACI,YAAe,iBACf,YAAe,gBACf,QAAW,CACP,CACI,MAAS,aAIrB,CACI,YAAe,cACf,YAAe,gBACf,QAAW,CACP,CACI,MAAS,aAIrB,CACI,YAAe,WACf,YAAe,gBACf,QAAW,CACP,CACI,MAAS,aAIrB,CACI,YAAe,uBACf,YAAe,gBACf,QAAW,CACP,CACI,MAAS,aAIrB,CACI,YAAe,aACf,YAAe,gBACf,QAAW,CACP,CACI,MAAS,aAIrB,CACI,YAAe,qBACf,YAAe,gBACf,QAAW,CACP,CACI,MAAS,aAIrB,CACI,YAAe,OACf,YAAe,WACf,QAAW,CACP,CACI,UAAa,SAIzB,CACI,YAAe,OACf,YAAe,SACf,QAAW,CACP,CACI,WAAc,OAElB,CACI,UAAa,SAIzB,CACI,YAAe,eACf,YAAe,gBACf,QAAW,CACP,CACI,MAAS,aAIrB,CACI,YAAe,gBACf,YAAe,gBACf,QAAW,CACP,CACI,MAAS,aAIrB,CACI,YAAe,aACf,YAAe,MACf,QAAW,CACP,CACI,WAAc,gBAI1B,CACI,YAAe,aACf,YAAe,gBACf,QAAW,CACP,CACI,OAAU,UAItB,CACI,YAAe,aACf,YAAe,kBACf,QAAW,CACP,CACI,OAAU,UAItB,CACI,YAAe,aACf,YAAe,cACf,QAAW,CACP,CACI,WAAc,QAI1B,CACI,YAAe,aACf,YAAe,mBACf,QAAW,CACP,CACI,MAAS,WAEb,CACI,UAAa,QAIzB,CACI,YAAe,aACf,YAAe,qBACf,QAAW,CACP,CACI,MAAS,WAEb,CACI,UAAa,QAIzB,CACI,YAAe,eACf,YAAe,WACf,QAAW,CACP,CACI,WAAc,MAElB,CACI,UAAa,SAIzB,CACI,YAAe,QACf,YAAe,MACf,QAAW,CACP,CACI,MAAS,gBAQrCR,EAAYjO,Q,eCrRZ,IAAMoP,EAAiB7N,EAAQ,MAEzB8N,EAAqB,CAOvBrP,KAAM,WAEF,IAAMsP,EAAyB3T,SAAS2C,iBAAiB,4BACnDiR,EAA8BD,EAAuBxW,OAE3D,GAAG+C,MAAMyT,IAA2D,IAAhCC,EAChC,IAAI,IAAIvW,EAAI,EAAGA,EAAIuW,EAA6BvW,IAAI,CAChD,IAAMwW,EAAqBF,EAAuBtW,GAClDqW,EAAmBI,gBAAgBD,KAK/CC,gBAAiB,SAAUD,GACvBA,EAAmB3S,iBAAiB,QAASwS,EAAmBK,mBAAmB,IAGvFA,kBAAmB,SAAU5S,GACzB,IAAM6S,EAAiBhU,SAASC,cAAc,oBAI9C,GAAK+T,EAAL,CAMA,GAHAP,EAAeQ,iBAAiBD,GAG5BhU,SAASwN,KAAKrL,UAAU4J,SAAS,0BAMjC,OALAiI,EAAerR,iBAAiB,kBAAkBvD,SAAQ,SAAS8U,GAC/DA,EAAKC,UAAY,UAGrBnU,SAASwN,KAAKrL,UAAUE,OAAO,0BAKnCoR,EAAeW,kBAAkBJ,GAEjCA,EAAerR,iBAAiB,mBAAmBvD,SAAQ,SAAS8U,GAChEA,EAAKC,SAAW,KAIpBnU,SAASwN,KAAKrL,UAAU6F,OAAO,0BAC/BgM,EAAe1S,QAAS,KAIhCoS,EAAmBrP,Q,UCtCnB,IALA,IAAIgQ,EAAa,GAEXC,EAAsBtU,SAAS2C,iBAAiB,iBAChD4R,EAA4BD,EAAoBnX,OAE9CE,EAAG,EAAGA,EAAIkX,EAA2BlX,IAAI,CAE7C,IACMmX,EADYF,EAAoBjX,GACRkI,aAAa,MAE3C,GAAmB,OAAhBiP,EAAqB,CAEpB,IAAMC,EAAmB,IAAIC,EAAiB,CAC1CC,SAAUH,EACVI,WAAY,IAAMJ,EAAa,uBAC/BK,kBAAmB,IAAML,EAAa,wBACtCM,KAAM,IAAMN,EAAa,2BACzBO,WAAW,EACXC,eAAgB,MAGpBX,EAAWxX,KAAM,IAAIoY,EAAUR,EAAiBS,qBAAqB7Q,aAEpE5F,QAAQwK,IAAI,gCAIrB,SAASyL,EAAiBS,GAEtB,IAAM/Y,EAAOlB,KAuGb,OArGAA,KAAKyZ,SAAW,GAChBzZ,KAAKka,qBAAsB,EAC3Bla,KAAK6Z,WAAY,EACjB7Z,KAAK8Z,eAAiB,IACtB9Z,KAAK2Z,kBAAoB,GACzB3Z,KAAK4Z,KAAO,GACZ5Z,KAAKma,SAAW,GAChBna,KAAK0Z,WAAa,GAElB1Z,KAAKoa,eAAiB,SAAUC,GAE5B,OADAra,KAAKyZ,SAAWY,EACTra,MAEXA,KAAKsa,uBAAyB,SAAUC,GAEpC,OADAva,KAAKka,oBAAsBK,EACpBva,MAEXA,KAAKwa,aAAe,SAAUD,GAE1B,OADAva,KAAK6Z,UAAYU,EACVva,MAEXA,KAAKya,kBAAoB,SAAUC,GAE/B,OADA1a,KAAK8Z,eAAiBY,EACf1a,MAEXA,KAAK2a,cAAgB,SAAUN,GAE3B,OADAra,KAAK0Z,WAAaW,EACXra,MAEXA,KAAK4a,qBAAuB,SAAUP,GAElC,OADAra,KAAK2Z,kBAAoBU,EAClBra,MAEXA,KAAK6a,QAAU,SAAUR,GAErB,OADAra,KAAK4Z,KAAOS,EACLra,MAEXA,KAAK8a,YAAc,SAAUT,GAEzB,OADAra,KAAKma,SAAWE,EACTra,MAEXA,KAAK+a,eAAiB,WAClB,OAAO/a,KAAKyZ,UAEhBzZ,KAAKgb,uBAAyB,WAC1B,OAAOhb,KAAKka,qBAEhBla,KAAKib,aAAe,WAChB,OAAOjb,KAAK6Z,WAEhB7Z,KAAKkb,kBAAoB,WACrB,OAAOlb,KAAK8Z,gBAEhB9Z,KAAKmb,cAAgB,WACjB,OAAOnb,KAAK0Z,YAEhB1Z,KAAKob,qBAAuB,WACxB,OAAOpb,KAAK2Z,mBAEhB3Z,KAAKqb,QAAU,WACX,OAAOrb,KAAK4Z,MAEhB5Z,KAAKsb,YAAc,WACf,OAAOtb,KAAKma,UAKhBna,KAAKga,kBAAoB,WAErB,MAAO,CACHP,SAAUvY,EAAK6Z,iBACfb,oBAAqBhZ,EAAK8Z,yBAC1BnB,UAAW3Y,EAAK+Z,eAChBnB,eAAgB5Y,EAAKga,oBACrBvB,kBAAmBzY,EAAKka,uBACxBxB,KAAM1Y,EAAKma,UACXlB,SAAUjZ,EAAKoa,cACf5B,WAAYxY,EAAKia,kBAMzBnb,KAAKub,KAAO,WAQR,IAHA,IAAMC,EAAqBnX,OAAO0L,KAAKkK,GACjCwB,EAAuBD,EAAmBvZ,OAExCE,EAAI,EAAGA,EAAIsZ,EAAsBtZ,IAAI,CACzC,IAAM2U,EAAM0E,EAAmBrZ,GAC/BjB,EAAK4V,GAAOmD,EAAenD,KAKnC9W,KAAKub,OAEE,CACH9B,SAAUvY,EAAKkZ,eACfF,oBAAqBhZ,EAAKoZ,uBAC1BT,UAAW3Y,EAAKsZ,aAChBV,eAAgB5Y,EAAKuZ,kBACrBd,kBAAmBzY,EAAK0Z,qBACxBhB,KAAM1Y,EAAK2Z,QACXV,SAAUjZ,EAAK4Z,YACfpB,WAAYxY,EAAKyZ,cACjBX,kBAAmB9Y,EAAK8Y,mBAIhC,SAASD,EAAU2B,GAGf,IAAMxa,EAAOlB,KACbA,KAAK2b,aAAe,GAGpB3b,KAAK4b,cAAgB,EACrB5b,KAAK6b,gBAAkB,EACvB7b,KAAK8b,YAAc,EACnB9b,KAAK+b,gBAAkB,EACvB/b,KAAKgc,OAAS,GACdhc,KAAKic,kBAAoB,KAEzBjc,KAAK0b,SAAW,GAEhB1b,KAAKmJ,KAAO,WAGRnJ,KAAK0b,SAAWA,EAGhB1b,KAAK2b,aAAe7W,SAAS0G,eAAexL,KAAK0b,SAASjC,UAC1DzZ,KAAKgc,OAASlX,SAAS2C,iBAAiBzH,KAAK0b,SAAShC,YACtD1Z,KAAK+b,gBAAkB/b,KAAKgc,OAAO/Z,OACnCjC,KAAK4b,cAAgB,EAGjB1a,EAAKwa,SAASxB,qBAAqBla,KAAKkc,0BAG5Clc,KAAKmc,WAGL,IAAMxI,EAAgB,IAAIC,OAAO5T,KAAK2b,cActC,GAbAhI,EAAcE,GAAG,aAAa,WAC1B3S,EAAKkb,iBACLlb,EAAKmb,YACLnb,EAAKib,cAETxI,EAAcE,GAAG,cAAc,WAC3B3S,EAAKkb,iBACLlb,EAAKob,gBACLpb,EAAKib,cAK+B,KAApCnc,KAAK0b,SAAS/B,kBAKd,IAFA,IAAMA,EAAoB7U,SAAS2C,iBAAiBzH,KAAK0b,SAAS/B,mBAC5D4C,EAA0B5C,EAAkB1X,OAC1CE,EAAI,EAAGA,EAAIoa,EAAyBpa,IAAI,CACnBwX,EAAkBxX,GAC1B6D,iBAAiB,SAAS,WACvC9E,EAAKsb,sBAAsBxc,SAMvC,GAA2B,KAAvBA,KAAK0b,SAAS9B,KAMd,IAJA,IAAMA,EAAO9U,SAAS2C,iBAAiBzH,KAAK0b,SAAS9B,MAC/C6C,EAAa7C,EAAK3X,OAGhBE,EAAI,EAAGA,EAAIsa,EAAYta,IAAI,CACnByX,EAAKzX,GAEb6D,iBAAiB,SAAS,WAC1B9E,EAAKwb,SAAS1c,SAM1BkB,EAAK2Y,aAIT7Z,KAAK6Z,UAAY,WAEiB,OAA3B7Z,KAAKic,mBAA4BU,cAAc3c,KAAKic,mBAEpDjc,KAAK0b,SAAS7B,WAAava,OAAOC,UAAUS,KAAK0b,SAAS5B,kBAEzD9Z,KAAKic,kBAAoB7I,aAAY,WAC7BlS,EAAKmb,YACLnb,EAAKib,aACNnc,KAAK0b,SAAS5B,kBAK7B9Z,KAAKoc,eAAiBlb,EAAK2Y,UAG3B7Z,KAAKqc,UAAY,WACbrc,KAAK4b,gBACD5b,KAAK4b,eAAiB5b,KAAK+b,kBAAiB/b,KAAK4b,cAAgB,GAEjE1a,EAAKwa,SAASxB,qBAAqBla,KAAKkc,2BAGhDlc,KAAKsc,cAAgB,WACjBtc,KAAK4b,gBACD5b,KAAK4b,cAAgB,IAAG5b,KAAK4b,cAAgB5b,KAAK+b,gBAAkB,GAEpE7a,EAAKwa,SAASxB,qBAAqBla,KAAKkc,2BAGhDlc,KAAKkc,wBAA0B,WAC3Blc,KAAK8b,YAAc9b,KAAK4b,cAAgB,EACpC5b,KAAK8b,aAAe9b,KAAK+b,kBAAiB/b,KAAK8b,YAAc,GAEjE9b,KAAK6b,gBAAkB7b,KAAK4b,cAAgB,EACxC5b,KAAK6b,gBAAkB,IAAG7b,KAAK6b,gBAAkB7b,KAAK+b,gBAAkB,IAGhF/b,KAAKmc,SAAW,WAIZ,IADA,IAAMS,EAAe1b,EAAK8a,OAAO/Z,OACzBE,EAAI,EAAGA,EAAIya,EAAcza,IAAI,CACjC,IAAM2S,EAAQ5T,EAAK8a,OAAO7Z,GAGpB0a,EAAa1Q,SAAS2I,EAAMzK,aAAa,eAG3CwS,IAAe3b,EAAK0a,cAAe9G,EAAM7N,UAAUE,OAAO,aACzD2N,EAAM7N,UAAUC,IAAI,aAGrBhG,EAAKwa,SAASxB,sBAEV2C,IAAe3b,EAAK2a,gBAAiB/G,EAAM7N,UAAUE,OAAO,YAC3D2N,EAAM7N,UAAUC,IAAI,YAErB2V,IAAe3b,EAAK4a,YAAahH,EAAM7N,UAAUE,OAAO,QACvD2N,EAAM7N,UAAUC,IAAI,SAIN,KAAvBhG,EAAKwa,SAAS9B,MAAe1Y,EAAK4b,eACP,KAA3B5b,EAAKwa,SAASvB,UAAmBjZ,EAAK6b,oBAG9C/c,KAAKwc,sBAAwB,SAAUQ,GACnC9b,EAAK0a,cAAgBzP,SAAS6Q,EAAU3S,aAAa,eACjDnJ,EAAKwa,SAASxB,qBAAqBhZ,EAAKgb,0BAC5Chb,EAAKib,WAEL,IAAM3I,EAAO1O,SAASC,cAAc7D,EAAKwa,SAAS/B,kBAAoB,SAChElG,EAAW3O,SAASC,cAAc7D,EAAKwa,SAAS/B,kBAAoB,aAE1EnG,EAAKe,aAAa,aAAcrT,EAAK4a,aACrCrI,EAASc,aAAa,aAAcrT,EAAK2a,iBAEzC3a,EAAKkb,kBAMTpc,KAAK0c,SAAW,SAAUO,GACtB/b,EAAK0a,cAAgBzP,SAAS8Q,EAAW5S,aAAa,eACtDnJ,EAAKib,WACLjb,EAAKkb,kBAGTpc,KAAK8c,aAAe,WAIhB,IAFA,IAAMlD,EAAO9U,SAAS2C,iBAAiBzH,KAAK0b,SAAS9B,MAC/C6C,EAAa7C,EAAK3X,OAChBE,EAAI,EAAGA,EAAIsa,EAAYta,IAAI,CAC/B,IAAM+a,EAAMtD,EAAKzX,GACjBgb,SAAWhR,SAAS+Q,EAAI7S,aAAa,eAElC8S,WAAajc,EAAK0a,cAAesB,EAAIjW,UAAUE,OAAO,aACpD+V,EAAIjW,UAAUC,IAAI,eAI/BlH,KAAK+c,iBAAmB,WAIpB,IAFA,IAAM5C,EAAWrV,SAAS2C,iBAAiBzH,KAAK0b,SAASvB,UACnDiD,EAAiBjD,EAASlY,OACxBE,EAAI,EAAGA,EAAIib,EAAgBjb,IAAI,CACnC,IAAMkb,EAAUlD,EAAShY,GACzBmb,aAAenR,SAASkR,EAAQhT,aAAa,eAE1CiT,eAAiBpc,EAAK0a,cAAeyB,EAAQpW,UAAUE,OAAO,aAC5DkW,EAAQpW,UAAUC,IAAI,iB,UCrWvC,IAAMqW,EAAkB,CAGpBC,OAAS,GACTC,SAAW,KAGXnL,KAAO,KACPoL,MAAQ,EACRC,OAAS,EACTC,YAAc,EACdC,gBAAiB,EACjBC,kBAAoB,KAGpBC,OAAQ,gBAER5U,KAAO,WAKH,IAHA,IAAM6U,EAAclZ,SAAS2C,iBAAiB,wBACxCwW,EAAoBD,EAAY/b,OAE9BE,EAAI,EAAGA,EAAI8b,EAAmB9b,IAAK,CAEpB6b,EAAY7b,GAEpB6D,iBAAiB,SAAS,SAAUC,GAC3CsX,EAAgBW,gBAAgBle,KAAKqK,aAAa,SAClDpE,EAAMmH,sBAQlB8Q,gBAAkB,SAASC,GAGvBA,EAAYA,EAAUC,OAAOD,EAAUzP,QAAQ,KAAK,GACpD,IACM2P,EADkBvZ,SAAS0G,eAAe2S,GACAG,wBAGhDf,EAAgBjL,KAAOxN,SAASyZ,gBAChChB,EAAgBG,MAAQhe,KAAK8e,IAAIjB,EAAgBjL,KAAKmM,UAAW3Z,SAASwN,KAAKmM,UAAW/a,OAAOgb,aACjGnB,EAAgBI,OAAWU,EAAwBM,IAAMpB,EAAgBG,MAASH,EAAgBG,MAASH,EAAgBC,OAC3HD,EAAgBqB,UAAY,QAASlb,OAAOmb,YAAcA,YAAYC,OAAQ,IAAIC,MAAOC,UACzFzB,EAAgBM,gBAAiB,EAGjCC,kBAAoBmB,sBAAsB1B,EAAgB2B,eAG1Dxb,OAAOsC,iBAAiB,YAAauX,EAAgB4B,sBACrDzb,OAAOsC,iBAAiB,QAASuX,EAAgB4B,sBACjDzb,OAAOsC,iBAAiB,iBAAkBuX,EAAgB4B,sBAC1Dzb,OAAOsC,iBAAiB,aAAcuX,EAAgB4B,sBACtDzb,OAAOsC,iBAAiB,QAASuX,EAAgB4B,sBACjDzb,OAAOsC,iBAAiB,YAAauX,EAAgB4B,uBAOzDD,cAAgB,SAAUE,GAGtB,IAAIC,EAAW3f,KAAK4f,IAAI,GAAIF,EAAa7B,EAAgBqB,WAAarB,EAAgBE,UACnF4B,EAAW,IAAGA,EAAW,GAG5BA,EAAWE,gBAAgBhC,EAAgBQ,QAAQsB,GAEnD,IAAMG,EAAejC,EAAgBG,MAAUH,EAAgBI,OAAS0B,EAExE9B,EAAgBjL,KAAKmM,UAAYe,EACM,IAAnCjC,EAAgBjL,KAAKmM,YAAkB3Z,SAASwN,KAAKmM,UAAYe,GAElEH,EAAW,GAAK9B,EAAgBM,iBAC/BC,kBAAoBmB,sBAAsB1B,EAAgB2B,iBAOlEC,qBAAuB,SAAUlZ,GAC7BsX,EAAgBM,gBAAiB,EACjC4B,qBAAqBlC,EAAgBO,qBAK7CP,EAAgBpU,Q,SC/FhB,IAAMuW,EAAoB,CAEtBC,KAAM,KAENxW,KAAM,WAIF,GAFAuW,EAAkBC,KAAO7a,SAASC,cAAc,mBAE5CC,MAAM0a,EAAkBC,MAA5B,CAEA,IAAMC,EAAiBF,EAAkBC,KAAK5a,cAAc,uBAS5D,GAPA2a,EAAkBC,KAAK3Z,iBAAiB,UAAU,SAAUvE,GAC5B,KAAzBme,EAAepgB,QACdogB,EAAe3Y,UAAUC,IAAI,mBAC7BzF,EAAE2L,qBAIPsS,EAAkBC,KAAK1Y,UAAU4J,SAAS,4BAEzC,IADA,IAAMgP,EAAaH,EAAkBC,KAAKlY,iBAAiB,iBACnDtF,EAAI,EAAGA,EAAI0d,EAAW5d,OAAQE,IAAK,CACrB0d,EAAW1d,GACnB6D,iBAAiB,UAAU,WACL,KAAzB4Z,EAAepgB,OACdkgB,EAAkBC,KAAKG,gBAQ/CJ,EAAkBvW,Q,UChClB,IAAM4W,EAAgB,CAElBC,YAAc,YACdC,kBAAoB,mBACpBC,mBAAqB,oBAGrB/W,KAAM,WAEF,IAAMyD,EAAa9H,SAAS2C,iBAAiB,IAAIsY,EAAcC,aACzDnT,EAAkBD,EAAW3K,OAEnC,GAAG+C,MAAM4H,IAAmC,IAApBC,EACpB,IAAI,IAAI1K,EAAI,EAAGA,EAAI0K,EAAiB1K,IAAI,CACpC,IAAM2K,EAASF,EAAWzK,GAC1B4d,EAAchT,WAAWD,KAKrCC,WAAY,SAAUD,GAOlB,IADA,IAAMF,EAAaE,EAAOrF,iBAAiB,IAAIsY,EAAcE,mBACpD9d,EAAI,EAAGA,EAAIyK,EAAW3K,OAAQE,IAGnC,IAFA,IAAIge,EAAavT,EAAWzK,GAEnBie,EAAI,EAAGA,EAAID,EAAWE,SAASpe,OAAQme,IAAK,CAC/BD,EAAWE,SAASD,GAE1BE,MAAMC,cAAgB,OAI1CzT,EAAO9G,iBAAiB,QAAS+Z,EAAc/S,gBAAgB,IAGnEA,eAAgB,SAAU/G,GACtB,IAAM9B,EAAO8B,EAAMS,OAAOhC,WACTP,EAAKO,WAAW2b,SAG5Bpa,EAAMS,OAAOO,UAAU4J,SAASkP,EAAcE,oBAG9C9b,EAAKY,cAAc,IAAIgb,EAAcG,sBAG1Cja,EAAMmH,iBAGNjJ,EAAK8C,UAAU6F,OAAO,gBAI9BiT,EAAc5W,Q,UC3Dd,IAAMqX,EAAiB,CAEnBC,aAAe,qBACfC,QAAS,GAETvX,KAAO,WAMH,IAHA,IAAMwX,EAAiB7b,SAAS2C,iBAAiB+Y,EAAeC,cAC1DG,EAAuBD,EAAe1e,OAEpCE,EAAI,EAAGA,EAAIye,EAAsBze,IAAI,CAEzC,IAAM0e,EAAgBF,EAAexe,GAIrC,GAAuB,OADC0e,EAAcxW,aAAa,MAEnD,CAEI,IAAMyW,EAAiB,CACnBxL,GAAIuL,EAAcxW,aAAa,MAC/B0W,KAAMF,EAAcxW,aAAa,qBACjCyI,SAAU3G,SAAS0U,EAAcxW,aAAa,mBAC9C2W,UAAW7U,SAAS0U,EAAcxW,aAAa,oBAC/C4W,SAAU9U,SAAS0U,EAAcxW,aAAa,kBAC9C6W,KAAM/U,SAAS0U,EAAcxW,aAAa,eAG9CmW,EAAeE,QAAQ/e,KAAKmf,QAG5Bvd,QAAQwK,IAAI,8DACZxK,QAAQwK,IAAI8S,GAIjBD,GAAwB,GAAGJ,EAAeW,eAQjDA,YAAa,WAES,oBAAPC,SAA2C,IAAdA,GAAGC,QAEvC3d,OAAO4d,wBAA0B,WAC7Bd,EAAee,eAGnBzJ,UAAU,uCAGV0I,EAAee,eASvBA,YAAa,WAKT,IAHA,IAAIb,EAAU,GAERE,EAAuBJ,EAAeE,QAAQze,OAC5CE,EAAI,EAAGA,EAAIye,EAAsBze,IAAI,CAEzC,IAAI0e,EAAgBL,EAAeE,QAAQve,GAG3C0e,EAAcW,OAAS,IAAIJ,GAAGC,OAAOR,EAAcvL,GAAG,CAClDmM,OAAQ,IACRC,MAAO,IACPC,QAASd,EAAcE,KACvBa,KAAM,mCACNC,WAAY,CACRC,eAAgB,EAChBC,IAAK,EACLC,SAAUnB,EAAc/N,SACxBmO,SAAUJ,EAAcI,SACxBgB,UAAWpB,EAAcG,WAE7BkB,OAAQ,CACJ,QAAW1B,EAAe2B,QAC1B,cAAiB3B,EAAe4B,iBAIxC1B,EAAQG,EAAcvL,IAAMuL,EAIhCL,EAAeE,QAAUA,GAO7ByB,QAAU,SAASlc,GAEf,IAAMoc,EAAoBpc,EAAMS,OAAO4b,YAAYjY,aAAa,MAC1DkY,EAAc/B,EAAeE,QAAQ2B,GAG3C/hB,YAAW,WAAYwE,SAASC,cAAc,IAAMsd,GAAmBpb,UAAUC,IAAI,eAAe,KAExE,IAAzBqb,EAAYzP,WAGfyP,EAAYf,OAAOgB,OACnBD,EAAYf,OAAOiB,YACnBF,EAAYf,OAAOkB,mBAAmB,YAM1CN,cAAgB,SAASnc,GAErB,IAAMoc,EAAoBpc,EAAMS,OAAO4b,YAAYjY,aAAa,MAC1DkY,EAAc/B,EAAeE,QAAQ2B,GAGvCpc,EAAMsG,OAAS6U,GAAGuB,YAAYC,OACN,IAArBL,EAAYrB,MAAYqB,EAAYf,OAAOiB,cAK1DjC,EAAerX,Q,UCvIf,IAAM0Z,EAAiB,CAEnBC,UAAW,GACXC,YAAa,GAGb5Z,KAAM,WACF0Z,EAAeC,UAAYpf,OAAOsf,UAAUF,UAC5CD,EAAeE,YAAcF,EAAeI,iBAC5CJ,EAAeK,WACfL,EAAeM,gBAGnBD,SAAU,WAGN,IAAIE,EAAOP,EAAeC,UAAUpU,QAAQ,SACtC2U,EAASD,EAAO,EAGhBE,IAASN,UAAUF,UAAUS,MAAM,qBAGzC,GAAIF,GAAUC,EAAM,CAEhB,IAAIE,EAAU,KAGVH,IAAQG,EAAUrX,SAAS0W,EAAeC,UAAUW,UACpDL,EAAO,EACPP,EAAeC,UAAUpU,QAAQ,IAAK0U,MAI1Cte,SAASwN,KAAKrL,UAAUC,IAAI,MAC5BpC,SAASwN,KAAKrL,UAAUC,IAAI,IAAIsc,KAMxCL,aAAc,WAE6B,WAApCN,EAAeE,YAAYW,MAAqBb,EAAeE,YAAYS,SAAW,IACrF1e,SAAS6e,qBAAqB,QAAQ,GAAG1c,UAAUC,IAAI,OAK/D+b,eAAgB,WACZ,IAA2BW,EAAvBC,EAAGb,UAAUF,UAAcgB,EAAED,EAAGN,MAAM,iEAAmE,GAC7G,MAAG,WAAWQ,KAAKD,EAAE,IAEV,CAACJ,KAAK,MAAMF,SADnBI,EAAI,kBAAkBI,KAAKH,IAAO,IACF,IAAI,IAE9B,WAAPC,EAAE,IAEO,OADRF,EAAIC,EAAGN,MAAM,iBACW,CAACG,KAAK,QAASF,QAAQI,EAAI,KAEvDE,EAAEA,EAAE,GAAI,CAACA,EAAE,GAAIA,EAAE,IAAK,CAACd,UAAUiB,QAASjB,UAAUkB,WAAY,MAC1B,OAAlCN,EAAIC,EAAGN,MAAM,qBAA4BO,EAAEK,OAAO,EAAE,EAAEP,EAAI,IACvD,CACHF,KAAMI,EAAE,GACRN,QAASM,EAAE,OAKvBjB,EAAe1Z,Q,UCjEfzF,OAAOsB,MAAQ,SAAUof,GACrB,OAAO,MAAOA,GAOlB1gB,OAAO6b,gBAAkB,CAErB8E,OAAQ,SAAUC,GACd,OAAOA,GAGXC,WAAY,SAAUD,GAClB,OAAOA,EAAIA,GAGfE,YAAa,SAAUF,GACnB,OAAOA,GAAK,EAAIA,IAGpBG,cAAe,SAAUH,GACrB,OAAOA,EAAI,GAAK,EAAIA,EAAIA,GAAU,EAAI,EAAIA,GAAKA,EAAlB,GAGjCI,YAAa,SAAUJ,GACnB,OAAOA,EAAIA,EAAIA,GAGnBK,aAAc,SAAUL,GACpB,QAAUA,EAAKA,EAAIA,EAAI,GAG3BM,eAAgB,SAAUN,GACtB,OAAOA,EAAI,GAAK,EAAIA,EAAIA,EAAIA,GAAKA,EAAI,IAAM,EAAIA,EAAI,IAAM,EAAIA,EAAI,GAAK,GAG1EO,YAAa,SAAUP,GACnB,OAAOA,EAAIA,EAAIA,EAAIA,GAGvBQ,aAAc,SAAUR,GACpB,OAAO,KAAOA,EAAKA,EAAIA,EAAIA,GAG/BS,eAAgB,SAAUT,GACtB,OAAOA,EAAI,GAAK,EAAIA,EAAIA,EAAIA,EAAIA,EAAI,EAAI,IAAOA,EAAKA,EAAIA,EAAIA,GAGhEU,YAAa,SAAUV,GACnB,OAAOA,EAAIA,EAAIA,EAAIA,EAAIA,GAG3BW,aAAc,SAAUX,GACpB,OAAO,IAAOA,EAAKA,EAAIA,EAAIA,EAAIA,GAGnCY,eAAgB,SAAUZ,GACtB,OAAOA,EAAI,GAAK,GAAKA,EAAIA,EAAIA,EAAIA,EAAIA,EAAI,EAAI,KAAQA,EAAKA,EAAIA,EAAIA,EAAIA,IAO9E5gB,OAAOoU,UAAY,SAAUqN,EAAQrlB,GACjC,IAAIslB,EAAStgB,SAASugB,cAAc,UACpCD,EAAOE,MAAQ,EAEf,IAAMC,EAAUzgB,SAAS6e,qBAAqB,UAC1C6B,EAAQD,EAAQA,EAAQtjB,OAAS,GAErCmjB,EAAOK,OAASL,EAAOM,mBAAqB,SAAUC,EAAGC,IACjDA,IAAYR,EAAOS,YAAc,kBAAkB9B,KAAKqB,EAAOS,eAC/DT,EAAOK,OAASL,EAAOM,mBAAqB,KAC5CN,OAAStkB,EAEJ8kB,GACG9lB,GAAUA,MAK1BslB,EAAOU,IAAMX,EACbK,EAAM9gB,WAAWqhB,aAAaX,EAAQI,IAa1C9hB,OAAOsiB,SAAW,SAASC,EAAMC,EAAMC,GACnC,IAAIC,EACJ,OAAO,WACH,IAAIC,EAAUrmB,KAAM4C,EAAOZ,UACvBskB,EAAQ,WACRF,EAAU,KACLD,GAAWF,EAAKlkB,MAAMskB,EAASzjB,IAEpC2jB,EAAUJ,IAAcC,EAC5BI,aAAaJ,GACbA,EAAU9lB,WAAWgmB,EAAOJ,GACxBK,GAASN,EAAKlkB,MAAMskB,EAASzjB,KAOzCc,OAAO0O,OAAS,CACZG,IAAK,SAAUmR,EAAMlkB,EAAOinB,GACxB,IAAIC,EAAQC,EAAahb,EAAMib,EAAShF,EAEpC6E,IACA9a,EAAO,IAAIoT,MACN8H,QAAQlb,EAAKqT,UAAoB,GAAPyH,EAAY,GAAK,GAAK,KACrDG,EAAU,aAAejb,EAAKmb,eAG9BF,EAAU,GAIiB,KAD/BhF,EAAOlW,SAASkW,MACPmF,MAAM,KAAK9kB,OAEhB6C,SAASkiB,OAAStD,EAAO,IAAMlkB,EAAQonB,EAAU,aAYjDD,EAAc/E,EAAKmF,MAAM,MACbE,QACZP,EAAS,IAAMC,EAAYO,KAAK,KAKhCpiB,SAASkiB,OAAStD,EAAO,IAAMlkB,EAAQonB,EAAU,oBAAsBF,EAI/C,MAApBtU,OAAOC,IAAIqR,IAAiBtR,OAAOC,IAAIqR,IAASlkB,IAEhDknB,EAAS,IAAM9E,EACf9c,SAASkiB,OAAStD,EAAO,IAAMlkB,EAAQonB,EAAU,oBAAsBF,KAKnFrU,IAAK,SAAUqR,GAGX,IAFA,IAAMyD,EAASzD,EAAO,IAChB0D,EAAKtiB,SAASkiB,OAAOD,MAAM,KACxB5kB,EAAI,EAAGA,EAAIilB,EAAGnlB,OAAQE,IAAK,CAEhC,IADA,IAAIklB,EAAID,EAAGjlB,GACY,MAAhBklB,EAAEC,OAAO,IACZD,EAAIA,EAAE5D,UAAU,EAAG4D,EAAEplB,QAGzB,GAA0B,IAAtBolB,EAAE3Y,QAAQyY,GAAe,OAAOE,EAAE5D,UAAU0D,EAAOllB,OAAQolB,EAAEplB,QAErE,OAAO,MAGXuQ,MAAO,SAAUkR,GACbtR,OAAOG,IAAImR,EAAM,IAAK,KAO9BhgB,OAAO6jB,cAAgB,SAAUC,EAAQC,EAAUC,EAAWC,GAE1DH,GAAUA,EAAS,IAAII,QAAQ,gBAAiB,IAChD,IAAIC,EAAKpoB,UAAU+nB,IAAeA,EAAL,EACzBM,EAAQroB,UAAUgoB,GAAgB/nB,KAAKqoB,IAAIN,GAAb,EAC9BO,OAAgC,IAAlBL,EAAiC,IAAMA,EACrDM,OAA4B,IAAdP,EAA6B,IAAMA,EACjDQ,EAAI,GAcR,OARAA,GAAKJ,EALY,SAAUD,EAAGC,GACtB,IAAIK,EAAIzoB,KAAK0oB,IAAI,GAAIN,GACrB,MAAO,GAAKpoB,KAAK2oB,MAAMR,EAAIM,GAAKA,EAG5BG,CAAWT,EAAGC,GAAQ,GAAKpoB,KAAK2oB,MAAMR,IAAId,MAAM,KACxDmB,EAAE,GAAGjmB,OAAS,IACdimB,EAAE,GAAKA,EAAE,GAAGN,QAAQ,0BAA2BI,KAE9CE,EAAE,IAAM,IAAIjmB,OAAS6lB,IACtBI,EAAE,GAAKA,EAAE,IAAM,GACfA,EAAE,IAAM,IAAIrlB,MAAMilB,EAAOI,EAAE,GAAGjmB,OAAS,GAAGilB,KAAK,MAE5CgB,EAAEhB,KAAKe,IAQblkB,QAAQvB,UAAU+lB,UACdxkB,QAAQvB,UAAUgmB,UACnBzkB,QAAQvB,UAAUgmB,QAAUzkB,QAAQvB,UAAUimB,mBAAqB1kB,QAAQvB,UAAUkmB,uBAEzF3kB,QAAQvB,UAAU+lB,QAAU,SAAUL,GAClC,IACIS,EAAW3oB,KACf,IAAK8E,SAASyZ,gBAAgB1N,SAFrB7Q,MAEmC,OAAO,KACnD,EAAG,CACC,GAAI2oB,EAASH,QAAQN,GAAI,OAAOS,EAChCA,EAAWA,EAASniB,oBACF,OAAbmiB,GACT,OAAO,OAIfjlB,OAAOuL,KAAO,CAIVoD,IAAK,SAASqD,EAAK5V,GACf,IAAI8oB,EAAM,IAAIC,eACVC,EAAQhkB,SAASC,cAAc,2BAA2BgkB,QAE9DH,EAAII,KAAK,MAAOtT,GAAK,GACrBkT,EAAIK,iBAAiB,eAAgB,oBACrCL,EAAIK,iBAAiB,eAAgBH,GACrCF,EAAIK,iBAAiB,mBAAoB,kBACzCL,EAAIlD,mBAAqB,WACE,IAAnBkD,EAAI/C,YACJ/lB,EAAS8oB,IAGjBA,EAAIM,QAGRha,KAAM,SAASwG,EAAKnJ,EAAMzM,GACtB,IAAI8oB,EAAM,IAAIC,eACVC,EAAQhkB,SAASC,cAAc,2BAA2BgkB,QAE9DH,EAAII,KAAK,OAAQtT,GAAK,GACtBkT,EAAIK,iBAAiB,eAAgB,oBACrCL,EAAIK,iBAAiB,eAAgBH,GACrCF,EAAIK,iBAAiB,mBAAoB,kBACzCL,EAAIlD,mBAAqB,WACE,IAAnBkD,EAAI/C,YACJ/lB,EAAS8oB,IAGjBA,EAAIM,KAAMrd,KAAKsd,UAAU5c,KAG7B6c,aAAc,SAAS1T,EAAKnJ,EAAMzM,GAC9B,IAAI8oB,EAAM,IAAIC,eACVC,EAAQhkB,SAASC,cAAc,2BAA2BgkB,QAE9DH,EAAII,KAAK,OAAQtT,GAAK,GACtBkT,EAAIK,iBAAiB,eAAgBH,GACrCF,EAAIK,iBAAiB,mBAAoB,kBACzCL,EAAIlD,mBAAqB,WACE,IAAnBkD,EAAI/C,YACJ/lB,EAAS8oB,IAGjBA,EAAIM,KAAK3c,KASjB7I,OAAO8M,sBAAwB,SAAU6J,GACrC,OAAOA,EAAOiN,OAAO,GAAG+B,cAAgBhP,EAAOvX,MAAM,IASzDY,OAAO4lB,aAAe,SAAUjP,GAC5B,OAAOA,EAAOuN,QAAQ,WAAW,SAAS5Q,GAAG,OAAOA,EAAE,GAAGqS,kBAM7D3lB,OAAO6lB,cAAe,SAAU7R,GAG5B,IAFA,IAAM2I,EAAW3I,EAAKhT,WAAW8kB,WAC7BC,EAAM,EACDtnB,EAAI,EAAGA,EAAIke,EAASpe,OAAQE,IAAK,CACtC,GAAIke,EAASle,IAAMuV,EAAM,OAAO+R,EACJ,GAAxBpJ,EAASle,GAAGunB,UAAeD,IAEnC,OAAQ,GASZ/lB,OAAOimB,gBAAkB,SAAUC,GAM/B,GAHAA,EAAoB,iBAAPA,EAAmB9kB,SAASC,cAAc6kB,GAAMA,EAGzD5G,UAAUF,UAAUS,MAAM,qBAAsB,CAGhD,IAAMsG,EAAWD,EAAGE,gBACdC,EAAWH,EAAGG,SAGpBH,EAAGE,iBAAkB,EACrBF,EAAGG,UAAW,EAGd,IAAIC,EAAQllB,SAASmlB,cACrBD,EAAME,mBAAmBN,GAGzB,IAAMO,EAAYzmB,OAAO0mB,eACzBD,EAAUE,kBACVF,EAAUG,SAASN,GACnBJ,EAAGW,kBAAkB,EAAG,QAGxBX,EAAGE,gBAAkBD,EACrBD,EAAGG,SAAWA,OAGdH,EAAGY,SAIP1lB,SAAS2lB,YAAY,SASzB/mB,OAAOgnB,WAAa,SAAUd,GAC1B,IAAMe,EAAOf,EAAGtL,wBACZsM,EAAalnB,OAAOmnB,aAAe/lB,SAASyZ,gBAAgBqM,WAC5DnM,EAAY/a,OAAOgb,aAAe5Z,SAASyZ,gBAAgBE,UAC/D,MAAO,CAAEE,IAAKgM,EAAKhM,IAAMF,EAAWqM,KAAMH,EAAKG,KAAOF,K,UClX1D,IAAMG,EAAgB,CAGlBC,KAAMjM,KAAKD,MACXsH,QAAS,KACT6E,aAAc,IACdC,aAAc,IAGdC,sBAAuB,EACvBC,qBAAqB,EACrBC,mBAAmB,EAGnBliB,KAAM,WAGF4hB,EAAcO,gBAGd5nB,OAAOsC,iBAAiB,UAAU,WACzB+kB,EAAcC,KAAOD,EAAcE,aAAelM,KAAKD,MAAS,IACjEiM,EAAcQ,kBACdR,EAAcC,KAAOjM,KAAKD,UAKlCpb,OAAOsC,iBAAiB,UAAU,WAC9B+kB,EAAcS,mBAIlB9nB,OAAOsC,iBAAiB,UAAU,WAC3BhB,MAAM+lB,EAAc3E,UAAUI,aAAauE,EAAc3E,SAC5D2E,EAAc3E,QAAU9lB,WAAWyqB,EAAcU,gBAAiBV,EAAcG,kBAKxFI,cAAe,WACXP,EAAcW,qCAIlBH,gBAAiB,WAEbR,EAAcW,qCAIlBD,gBAAiB,aAKjBD,cAAe,WAEXT,EAAcY,wBACdZ,EAAca,sBAKlBC,kCAAmC,SAASjC,GAExC,GAAG5kB,MAAM4kB,GAAI,CAET,IAAMe,EAAOf,EAAGtL,wBAEVwN,EAAgBpoB,OAAOqoB,aAAejnB,SAASyZ,gBAAgByN,aAC/DC,EAAevoB,OAAOwoB,YAAcpnB,SAASyZ,gBAAgB4N,YAE7DC,EAAkBzB,EAAKhM,KAAQmN,GAAoBnB,EAAKhM,IAAMgM,EAAKlJ,QAAW,EAC9E4K,EAAoB1B,EAAKG,MAAQmB,GAAkBtB,EAAKG,KAAOH,EAAKjJ,OAAU,EAEpF,OAAQ0K,GAAkBC,IAMlCC,iCAAkC,SAAS1C,GAEvC,GAAG5kB,MAAM4kB,GAAI,CACT,IAAMe,EAAOf,EAAGtL,wBAEhB,OACIqM,EAAKhM,KAAO,GACZgM,EAAK4B,QAAU7oB,OAAOqoB,cAKlCJ,sBAAuB,WACnB,IAAMa,EAAoB9oB,OAAOgb,aAAe5Z,SAASyZ,gBAAgBE,UACrE+N,GAAqBzB,EAAcI,uBACnCJ,EAAcK,qBAAsB,EACpCL,EAAcM,mBAAoB,IAElCN,EAAcK,qBAAsB,EACpCL,EAAcM,mBAAoB,GAEtCN,EAAcI,sBAAwBqB,GAK1Cd,kCAAmC,WAI/B,IAHA,IAAM/iB,EAAW7D,SAAS2C,iBAAiB,wBACrCglB,EAAiB9jB,EAAS1G,OAExBR,EAAI,EAAGA,EAAIgrB,EAAgBhrB,IAAI,CAEnC,IAAM8H,EAAUZ,EAASlH,GACtBspB,EAAcc,kCAAkCtiB,IAC/CA,EAAQtC,UAAUE,OAAO,yBASrCykB,mBAAoB,WAChB,IAAMc,EAAe5nB,SAASC,cAAc,qBAC5C,GAAI2nB,EAAJ,CACA,IAAMC,EAA2B,2BAC3BC,EAAa9nB,SAAS2C,iBAAiB,cACzColB,GAAkB,EACtBH,EAAatmB,QAAS,EAEtB,IAAK,IAAIjE,EAAI,EAAGA,EAAIyqB,EAAW3qB,OAAQE,IACnC,GAA+D,WAA3DuB,OAAOopB,iBAAiBF,EAAWzqB,GAAI,MAAM4qB,WAC7C,OAAyB,EAI9B/nB,MAAM0nB,KAAkBG,IAEpB9B,EAAcK,qBAAuBL,EAAcI,sBAAwB,IAC1ErmB,SAASwN,KAAKrL,UAAUE,OAAOwlB,GAI/B7nB,SAASwN,KAAKrL,UAAUC,IAAIylB,OAO5C5B,EAAc5hB,Q,gECzJd,IAAM4W,EAAgB,CAElB5W,KAAM,WACF,IAAM6jB,EAAiBloB,SAAS2C,iBAAiB,sBAC3CwlB,EAAsBD,EAAe/qB,OAE3C,GAAG+C,MAAMgoB,IAAmBC,EAAsB,EAC9C,IAAI,IAAI9qB,EAAI,EAAGA,EAAI8qB,EAAqB9qB,IAAI,CACxC,IAAM+qB,EAAgBF,EAAe7qB,GACrC4d,EAAchT,WAAWmgB,KAKrCngB,WAAY,SAAUmgB,GAClBA,EAAclnB,iBAAiB,QAAS+Z,EAAcoN,cAAc,IAGxEA,aAAc,SAAUlnB,GAEpB,IAAMqP,EAAKrP,EAAME,cAAckE,aAAa,kBAGtC3D,EAFc7D,MAAM2E,KAAK1C,SAAS2C,iBAAiB,sBAE9B2lB,MAAK,SAAS1mB,GACvC,OAAOA,EAAO2D,aAAa,oBAAsBiL,KAI9C5O,IAGLA,EAAOO,UAAU6F,OAAO,YACxB7G,EAAME,cAAcc,UAAU6F,OAAO,iBAM7CiT,EAAc5W,Q,yDCzCR4C,GAAeshB,E,QAAAA,IAAS,IAEf,SAASC,IAyCpB,MAAO,CACHC,MArCU,SAACzW,GAMX,IAN0D,IAA1C8Q,EAAU,UAAH,kDAAG9mB,EAAW0sB,IAAY,UAAH,+CAE1CC,EAAc,KACZ1d,EAAO+G,EAAIiQ,MAAM,KAEnB2G,EAAqB,EAClBA,EAAqB3d,EAAK9N,SAGH,IAAvByrB,GAA4C,OAAhBD,IAEL,IAAvBC,EAA0BD,EAAc1hB,EAAagE,EAAK2d,KAAwB,KAC7D,MAAfD,IAAqBA,EAAcA,EAAY1d,EAAK2d,KAAwB,MAErFA,IAGJ,GAAoB,OAAhBD,EACA,OAAGD,GACCjqB,QAAQC,KAAK,sBAAwBsT,EAAM,wCACpCA,GAEC,GAIhB,QAAehW,IAAZ8mB,EAAuB,OAAO6F,EAEjC,IAAME,EAActpB,OAAO0L,KAAK6X,GAKhC,OAJA+F,EAAYzpB,SAAQ,SAAC4S,GACjB2W,EAAcA,EAAY7F,QAAQ,IAAM9Q,EAAK8Q,EAAQ9Q,OAGlD2W,IAQR,SAAS7hB,EAAmBgiB,GAC/BvpB,OAAOwpB,OAAO9hB,EAAc6hB,K,iCClDhC,IAOIE,EACAC,EARAC,EAAUC,EAAOpqB,QAAU,GAU/B,SAASqqB,IACL,MAAM,IAAItqB,MAAM,mCAEpB,SAASuqB,IACL,MAAM,IAAIvqB,MAAM,qCAsBpB,SAASwqB,EAAWC,GAChB,GAAIP,IAAqBxtB,WAErB,OAAOA,WAAW+tB,EAAK,GAG3B,IAAKP,IAAqBI,IAAqBJ,IAAqBxtB,WAEhE,OADAwtB,EAAmBxtB,WACZA,WAAW+tB,EAAK,GAE3B,IAEI,OAAOP,EAAiBO,EAAK,GAC/B,MAAM5sB,GACJ,IAEI,OAAOqsB,EAAiB/qB,KAAK,KAAMsrB,EAAK,GAC1C,MAAM5sB,GAEJ,OAAOqsB,EAAiB/qB,KAAK/C,KAAMquB,EAAK,MAvCnD,WACG,IAEQP,EADsB,mBAAfxtB,WACYA,WAEA4tB,EAEzB,MAAOzsB,GACLqsB,EAAmBI,EAEvB,IAEQH,EADwB,mBAAjBvH,aACcA,aAEA2H,EAE3B,MAAO1sB,GACLssB,EAAqBI,GAjB7B,GAwEA,IAEIG,EAFAC,EAAQ,GACRC,GAAW,EAEXC,GAAc,EAElB,SAASC,IACAF,GAAaF,IAGlBE,GAAW,EACPF,EAAarsB,OACbssB,EAAQD,EAAaK,OAAOJ,GAE5BE,GAAc,EAEdF,EAAMtsB,QACN2sB,KAIR,SAASA,IACL,IAAIJ,EAAJ,CAGA,IAAIpI,EAAUgI,EAAWM,GACzBF,GAAW,EAGX,IADA,IAAIpsB,EAAMmsB,EAAMtsB,OACVG,GAAK,CAGP,IAFAksB,EAAeC,EACfA,EAAQ,KACCE,EAAarsB,GACdksB,GACAA,EAAaG,GAAYI,MAGjCJ,GAAc,EACdrsB,EAAMmsB,EAAMtsB,OAEhBqsB,EAAe,KACfE,GAAW,EAnEf,SAAyBxnB,GACrB,GAAI+mB,IAAuBvH,aAEvB,OAAOA,aAAaxf,GAGxB,IAAK+mB,IAAuBI,IAAwBJ,IAAuBvH,aAEvE,OADAuH,EAAqBvH,aACdA,aAAaxf,GAExB,IAEW+mB,EAAmB/mB,GAC5B,MAAOvF,GACL,IAEI,OAAOssB,EAAmBhrB,KAAK,KAAMiE,GACvC,MAAOvF,GAGL,OAAOssB,EAAmBhrB,KAAK/C,KAAMgH,KAgD7C8nB,CAAgB1I,IAiBpB,SAAS2I,EAAKV,EAAKW,GACfhvB,KAAKquB,IAAMA,EACXruB,KAAKgvB,MAAQA,EAYjB,SAASzuB,KA5BTytB,EAAQiB,SAAW,SAAUZ,GACzB,IAAIzrB,EAAO,IAAIC,MAAMb,UAAUC,OAAS,GACxC,GAAID,UAAUC,OAAS,EACnB,IAAK,IAAIE,EAAI,EAAGA,EAAIH,UAAUC,OAAQE,IAClCS,EAAKT,EAAI,GAAKH,UAAUG,GAGhCosB,EAAM5sB,KAAK,IAAIotB,EAAKV,EAAKzrB,IACJ,IAAjB2rB,EAAMtsB,QAAiBusB,GACvBJ,EAAWQ,IASnBG,EAAKvsB,UAAUqsB,IAAM,WACjB7uB,KAAKquB,IAAItsB,MAAM,KAAM/B,KAAKgvB,QAE9BhB,EAAQkB,MAAQ,UAChBlB,EAAQmB,SAAU,EAClBnB,EAAQoB,IAAM,GACdpB,EAAQqB,KAAO,GACfrB,EAAQxK,QAAU,GAClBwK,EAAQsB,SAAW,GAInBtB,EAAQna,GAAKtT,EACbytB,EAAQuB,YAAchvB,EACtBytB,EAAQ/kB,KAAO1I,EACfytB,EAAQwB,IAAMjvB,EACdytB,EAAQyB,eAAiBlvB,EACzBytB,EAAQ0B,mBAAqBnvB,EAC7BytB,EAAQ2B,KAAOpvB,EACfytB,EAAQ4B,gBAAkBrvB,EAC1BytB,EAAQ6B,oBAAsBtvB,EAE9BytB,EAAQ8B,UAAY,SAAUpM,GAAQ,MAAO,IAE7CsK,EAAQ+B,QAAU,SAAUrM,GACxB,MAAM,IAAI9f,MAAM,qCAGpBoqB,EAAQgC,IAAM,WAAc,MAAO,KACnChC,EAAQiC,MAAQ,SAAUC,GACtB,MAAM,IAAItsB,MAAM,mCAEpBoqB,EAAQmC,MAAQ,WAAa,OAAO,I,4tBCvKpC,MAAMC,EAAe/rB,OAAOgsB,OAAO,OAgDnC,SA/CA,SAA2BC,EAAU1nB,GACjC,KAAK,QAAS0nB,GAAW,CACrB,IAAIA,EAAS5G,SAKT,OAAO,KAJP4G,EAAWA,EAASzgB,UAO5B,MAAMiH,EAAMwZ,EACNC,EAASH,EAAatZ,GAC5B,GAAIyZ,EACA,OAAOA,EAEX,GAAoB,MAAhBD,EAAS,GAAY,CACrB,MAAM1G,EAAK9kB,SAASC,cAAcurB,GAC9B,EAOJA,EAAW1G,EAAKA,EAAG/Z,UAAY,GAEnC,MAAM,KAAE2gB,IAAS,QAAQF,GAAU,QAAO,CACtCG,aAAa,EACbC,aAA6D5vB,EAC7D6vB,OAA0E,MAC3E/nB,IAaGgoB,EAAU,IAAIC,SAAS,MAAOL,EAArB,CAA2B,GAE1C,OADAI,EAAOE,KAAM,EACLV,EAAatZ,GAAO8Z,O","sources":["webpack:///./resources/js/global/polyfills/isInteger.js","webpack:///./resources/js/global/polyfills/promise.js","webpack:///./resources/js/global/polyfills/remove.js","webpack:///./resources/js/site/components/checkoutDataController.js","webpack:///./resources/js/site/components/Locations.js","webpack:///./node_modules/@komma/kal/kal.js","webpack:///./resources/js/site/app.js","webpack:///./resources/js/site/components/categoryHandler.js","webpack:///./resources/js/site/components/chocolateFactory.js","webpack:///./resources/js/site/components/cookieHandler.js","webpack:///./resources/js/site/components/customerLogoSliderHandler.js","webpack:///./resources/js/site/components/datePickerHandler.js","webpack:///./resources/js/site/components/locationMapHandler.js","webpack:///./resources/js/site/components/mapsHandler.js","webpack:///./resources/js/site/components/overlayMenuHandler.js","webpack:///./resources/js/site/components/projectorHandler.js","webpack:///./resources/js/site/components/scrollToHandler.js","webpack:///./resources/js/site/components/searchFormHandler.js","webpack:///./resources/js/site/components/toggleHandler.js","webpack:///./resources/js/site/components/youtubeHandler.js","webpack:///./resources/js/site/global/browserHandler.js","webpack:///./resources/js/site/global/helpers.js","webpack:///./resources/js/site/global/scrollHandler.js","webpack:///./resources/js/site/global/toggleHandler.js","webpack:///./resources/js/site/services/useTranslations.js","webpack:///./node_modules/process/browser.js","webpack:///./node_modules/vue/dist/vue.esm-bundler.js"],"sourcesContent":["Number.isInteger = Number.isInteger || function(value) {\n return typeof value === \"number\" &&\n isFinite(value) &&\n Math.floor(value) === value;\n};","(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (factory());\n}(this, (function () { 'use strict';\n\n /**\n * @this {Promise}\n */\n function finallyConstructor(callback) {\n var constructor = this.constructor;\n return this.then(\n function(value) {\n return constructor.resolve(callback()).then(function() {\n return value;\n });\n },\n function(reason) {\n return constructor.resolve(callback()).then(function() {\n return constructor.reject(reason);\n });\n }\n );\n }\n\n// Store setTimeout reference so promise-polyfill will be unaffected by\n// other code modifying setTimeout (like sinon.useFakeTimers())\n var setTimeoutFunc = setTimeout;\n\n function noop() {}\n\n// Polyfill for Function.prototype.bind\n function bind(fn, thisArg) {\n return function() {\n fn.apply(thisArg, arguments);\n };\n }\n\n /**\n * @constructor\n * @param {Function} fn\n */\n function Promise(fn) {\n if (!(this instanceof Promise))\n throw new TypeError('Promises must be constructed via new');\n if (typeof fn !== 'function') throw new TypeError('not a function');\n /** @type {!number} */\n this._state = 0;\n /** @type {!boolean} */\n this._handled = false;\n /** @type {Promise|undefined} */\n this._value = undefined;\n /** @type {!Array<!Function>} */\n this._deferreds = [];\n\n doResolve(fn, this);\n }\n\n function handle(self, deferred) {\n while (self._state === 3) {\n self = self._value;\n }\n if (self._state === 0) {\n self._deferreds.push(deferred);\n return;\n }\n self._handled = true;\n Promise._immediateFn(function() {\n var cb = self._state === 1 ? deferred.onFulfilled : deferred.onRejected;\n if (cb === null) {\n (self._state === 1 ? resolve : reject)(deferred.promise, self._value);\n return;\n }\n var ret;\n try {\n ret = cb(self._value);\n } catch (e) {\n reject(deferred.promise, e);\n return;\n }\n resolve(deferred.promise, ret);\n });\n }\n\n function resolve(self, newValue) {\n try {\n // Promise Resolution Procedure: https://github.com/promises-aplus/promises-spec#the-promise-resolution-procedure\n if (newValue === self)\n throw new TypeError('A promise cannot be resolved with itself.');\n if (\n newValue &&\n (typeof newValue === 'object' || typeof newValue === 'function')\n ) {\n var then = newValue.then;\n if (newValue instanceof Promise) {\n self._state = 3;\n self._value = newValue;\n finale(self);\n return;\n } else if (typeof then === 'function') {\n doResolve(bind(then, newValue), self);\n return;\n }\n }\n self._state = 1;\n self._value = newValue;\n finale(self);\n } catch (e) {\n reject(self, e);\n }\n }\n\n function reject(self, newValue) {\n self._state = 2;\n self._value = newValue;\n finale(self);\n }\n\n function finale(self) {\n if (self._state === 2 && self._deferreds.length === 0) {\n Promise._immediateFn(function() {\n if (!self._handled) {\n Promise._unhandledRejectionFn(self._value);\n }\n });\n }\n\n for (var i = 0, len = self._deferreds.length; i < len; i++) {\n handle(self, self._deferreds[i]);\n }\n self._deferreds = null;\n }\n\n /**\n * @constructor\n */\n function Handler(onFulfilled, onRejected, promise) {\n this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;\n this.onRejected = typeof onRejected === 'function' ? onRejected : null;\n this.promise = promise;\n }\n\n /**\n * Take a potentially misbehaving resolver function and make sure\n * onFulfilled and onRejected are only called once.\n *\n * Makes no guarantees about asynchrony.\n */\n function doResolve(fn, self) {\n var done = false;\n try {\n fn(\n function(value) {\n if (done) return;\n done = true;\n resolve(self, value);\n },\n function(reason) {\n if (done) return;\n done = true;\n reject(self, reason);\n }\n );\n } catch (ex) {\n if (done) return;\n done = true;\n reject(self, ex);\n }\n }\n\n Promise.prototype['catch'] = function(onRejected) {\n return this.then(null, onRejected);\n };\n\n Promise.prototype.then = function(onFulfilled, onRejected) {\n // @ts-ignore\n var prom = new this.constructor(noop);\n\n handle(this, new Handler(onFulfilled, onRejected, prom));\n return prom;\n };\n\n Promise.prototype['finally'] = finallyConstructor;\n\n Promise.all = function(arr) {\n return new Promise(function(resolve, reject) {\n if (!arr || typeof arr.length === 'undefined')\n throw new TypeError('Promise.all accepts an array');\n var args = Array.prototype.slice.call(arr);\n if (args.length === 0) return resolve([]);\n var remaining = args.length;\n\n function res(i, val) {\n try {\n if (val && (typeof val === 'object' || typeof val === 'function')) {\n var then = val.then;\n if (typeof then === 'function') {\n then.call(\n val,\n function(val) {\n res(i, val);\n },\n reject\n );\n return;\n }\n }\n args[i] = val;\n if (--remaining === 0) {\n resolve(args);\n }\n } catch (ex) {\n reject(ex);\n }\n }\n\n for (var i = 0; i < args.length; i++) {\n res(i, args[i]);\n }\n });\n };\n\n Promise.resolve = function(value) {\n if (value && typeof value === 'object' && value.constructor === Promise) {\n return value;\n }\n\n return new Promise(function(resolve) {\n resolve(value);\n });\n };\n\n Promise.reject = function(value) {\n return new Promise(function(resolve, reject) {\n reject(value);\n });\n };\n\n Promise.race = function(values) {\n return new Promise(function(resolve, reject) {\n for (var i = 0, len = values.length; i < len; i++) {\n values[i].then(resolve, reject);\n }\n });\n };\n\n// Use polyfill for setImmediate for performance gains\n Promise._immediateFn =\n (typeof setImmediate === 'function' &&\n function(fn) {\n setImmediate(fn);\n }) ||\n function(fn) {\n setTimeoutFunc(fn, 0);\n };\n\n Promise._unhandledRejectionFn = function _unhandledRejectionFn(err) {\n if (typeof console !== 'undefined' && console) {\n console.warn('Possible Unhandled Promise Rejection:', err); // eslint-disable-line no-console\n }\n };\n\n /** @suppress {undefinedVars} */\n var globalNS = (function() {\n // the only reliable means to get the global object is\n // `Function('return this')()`\n // However, this causes CSP violations in Chrome apps.\n if (typeof self !== 'undefined') {\n return self;\n }\n if (typeof window !== 'undefined') {\n return window;\n }\n if (typeof global !== 'undefined') {\n return global;\n }\n throw new Error('unable to locate global object');\n })();\n\n if (!('Promise' in globalNS)) {\n globalNS['Promise'] = Promise;\n } else if (!globalNS.Promise.prototype['finally']) {\n globalNS.Promise.prototype['finally'] = finallyConstructor;\n }\n\n})));","// from:https://github.com/jserz/js_piece/blob/master/DOM/ChildNode/remove()/remove().md\n(function (arr) {\n arr.forEach(function (item) {\n if (item.hasOwnProperty('remove')) {\n return;\n }\n Object.defineProperty(item, 'remove', {\n configurable: true,\n enumerable: true,\n writable: true,\n value: function remove() {\n if (this.parentNode === null) {\n return;\n }\n this.parentNode.removeChild(this);\n }\n });\n });\n})([Element.prototype, CharacterData.prototype, DocumentType.prototype]);","/**\n * Controls the checkout form\n */\nclass CheckoutDataController {\n\n constructor() {\n\n this.checkoutDataForm = document.querySelector('.js-checkout-data-form');\n\n if(!isset(this.checkoutDataForm)) return;\n\n this.differentEmailAddressForInvoiceCheckbox = this.checkoutDataForm.querySelector('#checkout_send_invoice_to_other_email');\n this.clientTypeRadioButtons = this.checkoutDataForm.getElementsByClassName('js-client-type');\n\n if(this.differentEmailAddressForInvoiceCheckbox) this.toggleDifferentEmailAddressField(this.differentEmailAddressForInvoiceCheckbox.checked);\n\n //Bind event listeners to this class.\n this.controlListeners = this.controlListeners.bind(this);\n this.triggerToggleOtherEmailAddressForInvoice = this.triggerToggleOtherEmailAddressForInvoice.bind(this);\n this.toggleDifferentEmailAddressField = this.toggleDifferentEmailAddressField.bind(this);\n this.clientTypeChanged = this.clientTypeChanged.bind(this);\n this.changeClientType = this.changeClientType.bind(this);\n\n //Enable the listeners.\n this.controlListeners(true);\n }\n\n /**\n * @param {boolean} enabled\n */\n controlListeners(enabled) {\n\n this.differentEmailAddressForInvoiceCheckbox.removeEventListener('change', this.triggerToggleOtherEmailAddressForInvoice);\n\n const clientTypeRadioButtonsLength = this.clientTypeRadioButtons.length;\n for (let index = 0; index < clientTypeRadioButtonsLength; index++) {\n const clientTypeRadioButton = this.clientTypeRadioButtons[index];\n clientTypeRadioButton.removeEventListener('change', this.clientTypeChanged);\n\n if( clientTypeRadioButton.checked ) {\n this.changeClientType(clientTypeRadioButton.value);\n }\n }\n\n if (enabled) {\n this.differentEmailAddressForInvoiceCheckbox.addEventListener('change', this.triggerToggleOtherEmailAddressForInvoice);\n for (let index = 0; index < clientTypeRadioButtonsLength; index++) this.clientTypeRadioButtons[index].addEventListener('change', this.clientTypeChanged);\n }\n }\n\n /**\n * Toggle the shipping address fields\n *\n * @param event\n */\n triggerToggleOtherEmailAddressForInvoice(event)\n {\n const input = event.currentTarget;\n this.toggleDifferentEmailAddressField(input.checked);\n }\n\n toggleDifferentEmailAddressField(value)\n {\n const otherEmailAddressField = this.checkoutDataForm.querySelector('.js-other-email-for-invoice-area');\n\n // Hidden is the inverted value of the checked\n otherEmailAddressField.hidden = !value;\n }\n \n\n clientTypeChanged(event)\n {\n const changedRadioButton = event.currentTarget;\n this.changeClientType(changedRadioButton.value);\n }\n\n /**\n * Note: The client type is the index of the site.client_types config.\n * 0 = business\n * 1 = private\n * 2 = organisation\n *\n * @param clientTypeId\n */\n changeClientType(clientTypeId)\n {\n const companyFields = this.checkoutDataForm.querySelector('.js-company-area');\n companyFields.hidden = (clientTypeId == 1);\n }\n}\n\nexport { CheckoutDataController }","export class Locations {\n constructor(parentElement) {\n this.listItems = Array.from(parentElement.querySelectorAll('.js-locations-list-item'));\n this.markers = Array.from(parentElement.querySelectorAll('.js-locations-marker'));\n this.cards = Array.from(parentElement.querySelectorAll('.js-locations-card'));\n this.cardsWrapper = parentElement.querySelector('.js-locations-cards');\n\n this.listItems.forEach(item => item.addEventListener('mouseenter', this.handleListItemMouseEnter))\n this.listItems.forEach(item => item.addEventListener('mouseleave', this.handleListItemMouseLeave))\n this.listItems.forEach(item => item.addEventListener('click', this.handleClick))\n this.markers.forEach(item => item.addEventListener('mouseenter', this.handleMarkerMouseEnter))\n this.markers.forEach(item => item.addEventListener('mouseleave', this.handleMarkerMouseLeave))\n this.markers.forEach(item => item.addEventListener('click', this.handleClick))\n\n const randomActiveId = Math.floor(Math.random() * (this.listItems.length - 1) + 1 )\n this.setActiveCard(randomActiveId)\n }\n\n\n handleListItemMouseEnter = (event) => {\n const targetLocationId = event.target.dataset.locationId;\n const hoverLocationMarker = this.markers.filter(marker => marker.dataset.locationId === targetLocationId)[0];\n if (hoverLocationMarker) hoverLocationMarker.classList.add('active');\n }\n\n handleListItemMouseLeave = (event) => {\n const targetLocationId = event.target.dataset.locationId;\n const hoverLocationMarker = this.markers.filter(marker => marker.dataset.locationId === targetLocationId)[0];\n if (hoverLocationMarker) hoverLocationMarker.classList.remove('active');\n }\n\n handleMarkerMouseEnter = (event) => {\n const targetLocationId = event.target.dataset.locationId;\n const hoverLocationListItem = this.listItems.filter(item => item.dataset.locationId === targetLocationId)[0];\n if (hoverLocationListItem) hoverLocationListItem.parentNode.classList.add('active');\n event.target.classList.add('active');\n }\n\n handleMarkerMouseLeave = (event) => {\n const targetLocationId = event.target.dataset.locationId;\n const hoverLocationListItem = this.listItems.filter(item => item.dataset.locationId === targetLocationId)[0];\n if (hoverLocationListItem) hoverLocationListItem.parentNode.classList.remove('active');\n event.target.classList.remove('active');\n }\n\n handleClick = (event) => {\n const clickLocationId = event.target.dataset.locationId;\n this.setActiveCard(clickLocationId);\n }\n\n setActiveCard(cardId) {\n this.cards.forEach(card => card.classList.add('hidden'));\n const activeCard = this.cards.filter(card => card.dataset.locationId == cardId)[0];\n\n activeCard.classList.remove('hidden');\n this.markers.forEach(marker => marker.classList.remove('selected'));\n this.listItems.forEach(item => item.parentNode.classList.remove('selected'));\n\n\n const correspondingMarker = this.markers.filter(marker => marker.dataset.locationId == cardId)[0];\n const correspondingListItem = this.listItems.filter(item => item.dataset.locationId == cardId)[0];\n\n if(correspondingMarker) correspondingMarker.classList.add('selected');\n correspondingListItem.parentNode.classList.add('selected');\n }\n\n}","const KAL = {\n\n /**\n * The data attribute prefix we use for our animation library\n * @type string\n */\n dataPrefix: 'kal',\n\n /**\n * Define the class we used to set the states of the animations\n */\n startStateClass: 'is-kal-start',\n endStateClass: 'is-kal-end',\n\n /**\n * Empty basket for putting the NodeElements in\n */\n elements: [],\n\n /**\n * Default options\n */\n options: {\n root: null,\n rootMargin: '-48px 0px -48px 0px', // offset from the edge of the intersection root\n threshold: 0, // The visual percentage of component when animation is triggered\n },\n\n /**\n * Element default options\n */\n elementOptions: {\n once: true,\n },\n\n /** @type {IntersectionObserver} */\n intersectionObserver: null,\n\n init: function () {\n\n if(window.IntersectionObserver === undefined) {\n console.warn('IntersectionObserver is not supported');\n return;\n }\n\n KAL.elements = document.querySelectorAll('*[data-'+ KAL.dataPrefix +']');\n if(KAL.elements.length === 0 ) return;\n\n KAL.createIntersectionObserver();\n },\n\n /**\n * Create the Intersection Observer\n * and append the KAL elements into it.\n */\n createIntersectionObserver: function () {\n\n KAL.intersectionObserver = new IntersectionObserver(KAL.onIntersection, {\n root: KAL.options.root,\n rootMargin: KAL.options.rootMargin,\n threshold: KAL.options.threshold,\n });\n\n KAL.elements.forEach(function (element) {\n KAL.intersectionObserver.observe(element);\n element.classList.add(KAL.startStateClass);\n });\n },\n\n /**\n * IntersectionObserver callback\n * @param {Array<IntersectionObserverEntry>} entries\n * @param {IntersectionObserver} observer\n */\n onIntersection: function (entries, observer) {\n entries.forEach(function (entry) {\n\n // When element's is in viewport and within threshold,\n // Trigger animation!\n if (entry.intersectionRatio > KAL.options.threshold) {\n\n KAL.triggerAnimation(entry);\n\n if (KAL.getElementOption(entry.target, 'once')) {\n observer.unobserve(entry.target);\n }\n } else if (!KAL.getElementOption(entry.target, 'once')) {\n\n // Reverse the animation if options is not once\n KAL.reverseAnimation(entry);\n }\n });\n },\n\n /**\n * Clear the intersection observer.\n */\n clearIntersectionObserver: function () {\n KAL.intersectionObserver.disconnect();\n KAL.intersectionObserver = null;\n },\n\n /**\n * Get an animation option of the element.\n *\n * @param element\n * @param attribute\n */\n getElementOption: function (element, attribute)\n {\n const option = element.getAttribute('data-'+ KAL.dataPrefix + '-' + attribute);\n\n if(option !== null){\n\n // Map the attributes values into the right type\n switch (attribute) {\n\n // Boolean attributes\n case 'once':\n return (option == 'true');\n\n default:\n return option;\n }\n }\n return KAL.elementOptions[attribute];\n },\n\n /**\n * Trigger animation\n * @param {IntersectionObserverEntry} entry\n */\n triggerAnimation: function (entry) {\n const element = entry.target;\n element.classList.remove(KAL.startStateClass);\n element.classList.add(KAL.endStateClass);\n },\n\n /**\n * Reverse animation\n * @param {IntersectionObserverEntry} entry\n */\n reverseAnimation: function (entry) {\n const element = entry.target;\n element.classList.add(KAL.startStateClass);\n element.classList.remove(KAL.endStateClass);\n },\n};\n\nexport { KAL }","/** ==========================================================================\n * Import ES6 Modules (https://webpack.js.org/api/module-methods/)\n * =========================================================================*/\n\nimport { CheckoutDataController } from './components/checkoutDataController';\nimport CheckoutSummaryController from \"./components/checkoutSummaryController\";\nimport { Locations } from './components/Locations';\nimport axios from 'axios'\n\nimport {KAL} from '@komma/kal';\nKAL.options.rootMargin = '0px 0px -100px 0px';\nKAL.init();\n\nwindow.axios = axios.create()\nwindow.axios.defaults.headers.common = {\n 'X-Requested-With': 'XMLHttpRequest',\n 'X-CSRF-TOKEN' : document.querySelector('meta[name=\"csrf-token\"]').getAttribute('content')\n}\n/** ==========================================================================\n * Dependencies\n * =========================================================================*/\n\n/**\n * External\n */\nrequire('hammerjs');\nrequire('objectFitPolyfill');\n\n/**\n * Global / Shared with KMS\n */\nrequire('./../global/polyfills/eventPolyFill');\nrequire('./../global/polyfills/isInteger');\nrequire('./../global/polyfills/promise');\nrequire('./../global/polyfills/remove');\n\n/** ==========================================================================\n * Global functionalities\n * =========================================================================*/\n\nrequire('./global/helpers'); // Should be first\nrequire('./global/browserHandler');\nrequire('./global/scrollHandler');\nrequire('./global/toggleHandler');\n\n\n/** ==========================================================================\n * Component functionalities\n * =========================================================================*/\n\nrequire('./components/categoryHandler');\nrequire('./components/chocolateFactory');\nrequire('./components/cookieHandler');\nrequire('./components/mapsHandler');\nrequire('./components/overlayMenuHandler');\nrequire('./components/projectorHandler');\nrequire('./components/scrollToHandler');\nrequire('./components/locationMapHandler');\nrequire('./components/toggleHandler');\nrequire('./components/youtubeHandler');\nrequire('./components/datePickerHandler');\n// require('./components/modalHandler');\nrequire('./components/searchFormHandler');\nrequire('./components/customerLogoSliderHandler');\n\nnew CheckoutDataController();\n\ndocument.querySelectorAll('.js-locations').forEach((parentElement) => new Locations(parentElement));\n\n/** ==========================================================================\n * Vue Shopping Cart\n * =========================================================================*/\nimport { createApp, ref } from 'vue'\nimport {appendTranslations} from \"./services/useTranslations\"\n\nlet shoppingCartEl = document.querySelector('.js-cart');\nif (shoppingCartEl) {\n import(/* webpackChunkName: \"cart\" */ \"./components/ShoppingCart\").then(({default: ShoppingCart}) => {\n new ShoppingCart(shoppingCartEl)\n })\n}\n\nlet activitiesEl = document.querySelector('.js-activities');\nif (activitiesEl) {\n import(/* webpackChunkName: \"activity\" */ \"./components/ActivitySwiper\").then(({default: ActivitySwiper}) => {\n new ActivitySwiper(activitiesEl)\n })\n}\n\nlet reviewSliderEl = document.querySelector('.js-review-slider');\nif (reviewSliderEl) {\n import(/* webpackChunkName: \"reviews\" */ \"./components/ReviewSwiper\").then(({default: ReviewSwiper}) => {\n new ReviewSwiper(reviewSliderEl)\n })\n}\n\nlet checkoutSummaryFormEl = document.querySelector('.js-checkout-summary');\nif (checkoutSummaryFormEl) {\n import(/* webpackChunkName: \"checkoutSummary\" */ \"./components/checkoutSummaryController\").then(({default: CheckoutSummary}) => {\n new CheckoutSummary(checkoutSummaryFormEl)\n })\n}\n\nlet activeProduct = ref(null);\nlet sessionDate = ref(null);\nlet sessionLocation = ref(null);\n\nlet planModal = document.getElementById('planModal')\nlet planButtons = document.querySelectorAll('.js-plan-popup');\n\nif(planButtons.length > 0) {\n if(!planModal) throw new Error('Plan buttons found but Plan modal element is missing')\n\n if(planModal.dataset.location) sessionLocation.value = planModal.dataset.location\n if(planModal.dataset.date) sessionDate.value = planModal.dataset.date\n\n appendTranslations(JSON.parse(planModal.dataset.translations))\n delete planModal.dataset.translations\n\n import(/* webpackChunkName: \"booking\" */ \"./components/PlanModal\").then(({default: PlanModal}) => {\n\n planButtons.forEach((button) => {\n\n button.addEventListener('click', function () {\n\n const clickProductId = parseInt(event.currentTarget.dataset.productId)\n\n if(activeProduct.value === clickProductId) activeProduct.value = null\n else activeProduct.value = clickProductId\n })\n })\n\n createApp({\n components: {PlanModal},\n data() {\n return {\n activeProduct,\n sessionDate,\n sessionLocation,\n }\n }\n }).mount(planModal);\n })\n}\n","/* ==========================================================================\n Accordion handler\n - Handles the accordion component which has the proper classes.\n ========================================================================== */\n\nconst CategoryHandler = {\n\n categoryToggleClass : 'js-category-toggle',\n categoryGroupClass : 'js-category-group',\n\n init: function () {\n\n const toggleList = document.querySelectorAll('.'+CategoryHandler.categoryToggleClass);\n const toggleListCount = toggleList.length;\n\n if(isset(toggleList) && toggleListCount !== 0){\n for(let i = 0; i < toggleListCount; i++){\n const toggle = toggleList[i];\n CategoryHandler.initToggle(toggle);\n }\n }\n },\n\n initToggle: function (toggle) {\n toggle.addEventListener('click', CategoryHandler.activateToggle, false);\n },\n\n activateToggle: function (event) {\n const item = event.target;\n const itemId = item.getAttribute('data-category')\n const allToggles = document.querySelectorAll('.'+CategoryHandler.categoryToggleClass);\n const allGroups = document.querySelectorAll('.'+CategoryHandler.categoryGroupClass);\n\n // Remove all active classes from toggles\n for(let i = 0; i < allToggles.length; i++){\n allToggles[i].classList.remove('is-active');\n }\n\n // Remove all active classes from groups\n // and show the correct group\n for(let i = 0; i < allGroups.length; i++){\n allGroups[i].classList.remove('is-active');\n\n if(allGroups[i].getAttribute('data-category') === itemId){\n allGroups[i].classList.add('is-active');\n }\n }\n\n // Prevent default link behavior\n event.preventDefault();\n\n // Toggle the active class\n item.classList.add('is-active');\n }\n};\n\nCategoryHandler.init();","/* ==========================================================================\n | Prevent Bots handler\n |\n | We named this chocolate factory and belonging confusing js hooks\n | to prevent smart bots from blocking these variable or functions.\n |\n ========================================================================== */\n\nconst ChocolateFactory = {\n\n bannedVisitor: [],\n\n /** Get all the chocolate factory and start\n * Looping through those start flashing tickets\n */\n enter: function()\n {\n\n const chocolateFactories = document.querySelectorAll('.js-chocolate-factory');\n\n if(isset(chocolateFactories)){\n\n const amountOfChocolateFactories = chocolateFactories.length;\n for(let i = 0; i < amountOfChocolateFactories; i++){\n\n const ChocolateBar = chocolateFactories[i];\n ChocolateFactory._flashTicket(ChocolateBar);\n }\n }\n },\n\n /**\n * If factory has a golden ticket\n * Then we can make them go on the tour if there has been click on the ticket\n *\n * @param chocolateBar\n * @private\n */\n _flashTicket: function (chocolateBar) {\n\n // Try get the ticket from the chocolateBar\n const goldenTicket = chocolateBar.querySelector('.js-golden-ticket');\n\n // Only continue if chocolate bar has a golden ticket\n if(isset(goldenTicket)){\n\n goldenTicket.addEventListener('click', function () {\n ChocolateFactory.enjoyTheTour(chocolateBar);\n });\n }\n else{\n console.log('To bad, no golden tickets has been found.');\n }\n },\n\n /**\n * Start the tour through the factory\n * And get the names and properties of the members of the group\n * If there are members in the group of course\n *\n * @param chocolateFactory\n */\n enjoyTheTour(chocolateFactory){\n\n // Ask for the tour group\n const tourGroup = chocolateFactory.querySelectorAll('input, textarea');\n\n if(isset(tourGroup)){\n\n // For each visitor we want a belonging Oompa Loompa\n let oompaLoompas = {};\n let amountOfOompaLoompas = 0;\n\n const tourGroupSize = tourGroup.length;\n for(let i = 0; i < tourGroupSize; i++){\n\n // Get the visitor from the group\n const visitor = tourGroup[i];\n\n // Ask for its name\n const visitorName = visitor.getAttribute('name');\n\n // Check if the visitor is banned\n if( ChocolateFactory._isVisitorBanned(visitorName)) continue;\n\n oompaLoompas[ visitorName ] = ChocolateFactory._getArrangement(visitor);\n amountOfOompaLoompas++;\n }\n\n // Check for insurance that there are oompa loompas\n if(amountOfOompaLoompas === 0) return;\n\n // Send submit request\n ChocolateFactory._finishTour(oompaLoompas, chocolateFactory);\n }\n else{\n console.log('To bad, no members to visit this factory')\n }\n },\n\n /**\n * Check if the visitor name isn't allow\n *\n * @param visitorName\n * @returns {boolean}\n * @private\n */\n _isVisitorBanned: function(visitorName){\n if(ChocolateFactory.bannedVisitor.indexOf(visitorName) !== -1){\n return true;\n }\n return false;\n },\n\n /**\n * Most get visitor have a normal arrangement\n * But sometimes there are special cases\n * Like a Selector or checkbox\n *\n * @param visitor\n * @returns {*}\n * @private\n */\n _getArrangement: function(visitor)\n {\n\n const visitorType = visitor.nodeName;\n\n // Special way to retrieve the checkbox\n // Because then the value is send through the checked attribute instead of value\n if(visitor.type === 'checkbox') {\n return visitor.checked;\n }\n\n switch (visitorType) {\n default:\n return visitor.value;\n }\n },\n\n /**\n * Finish the tour\n * If successful show thanks message\n * Or show defined error message or fallback\n *\n * @param group\n * @param chocolateFactory\n * @returns {*|void}\n * @private\n */\n _finishTour: function(group, chocolateFactory)\n {\n // Add willie to the group\n group = ChocolateFactory._addWillieWonka(group);\n\n const baseRoute = chocolateFactory.getAttribute('data-route')\n\n // Get the gate for finish the tour\n const gate = `/${baseRoute}/process`;\n\n try {\n Ajax.post(gate, group, function (HttpRequest) {\n\n const response = JSON.parse(HttpRequest.response);\n\n switch (HttpRequest.status) {\n case 200:\n return ChocolateFactory._thanksForVisiting(response.redirectUrl);\n case 422:\n return ChocolateFactory._giveFeedbackToMembers(response.errors, chocolateFactory);\n default:\n break;\n }\n\n return ChocolateFactory._unknownGapInFactory(chocolateFactory);\n });\n }\n catch (e) {\n return ChocolateFactory._unknownGapInFactory(chocolateFactory);\n }\n },\n\n /**\n * Add willie wonka to the group\n * Ps... it actually the secret code!\n *\n * @param group\n * @returns {*}\n * @private\n */\n _addWillieWonka: function(group){\n group._willie = 'wonka';\n return group;\n },\n\n /**\n * Add the feedback to the desired area.\n * Most likely to the visitor directly, but sometime to the factory desired feedback area\n *\n * @param errors\n * @param chocolateFactory\n * @private\n */\n _giveFeedbackToMembers: function(errors, chocolateFactory){\n\n // Grab the factory feedback area\n const feedbackArea = chocolateFactory.querySelector('.js-error-area');\n\n // Clear the current html\n if(isset(feedbackArea)) feedbackArea.innerHTML = '';\n\n // Clear the previous marked jackets\n ChocolateFactory._clearPreviousMarkedJackets(chocolateFactory);\n\n Object.keys(errors).forEach(function(visitor) {\n\n let jacket = null;\n let visitorFeedbackArea = null;\n\n // Honey elements doesn't has a accessible element\n if(visitor !== '_honey' && visitor !== '_secretCode') {\n\n // Grab the visitor\n const visitorNode = chocolateFactory.querySelector('#' + visitor);\n\n // Find the jacket of a visitor\n jacket = ChocolateFactory._grabVisitorJacket(visitorNode);\n\n // If found get the desired area\n if(isset(jacket)) visitorFeedbackArea = jacket.querySelector('.js-form-element-error');\n\n // Clear the current html\n if(isset(visitorFeedbackArea)) visitorFeedbackArea.innerHTML = '';\n\n }\n\n // Get the feedback for this visitor\n const visitorFeedback = errors[visitor];\n\n // Spit out each line\n const visitorFeedbackAmount = visitorFeedback.length;\n for(let i = 0; i < visitorFeedbackAmount; i++){\n const visitorFeedbackLine = visitorFeedback[i];\n\n // Honey elements doesn't has a accessible element area\n if(visitor !== '_honey' && visitor !== '_secretCode') {\n\n // Mark the jacket\n if(isset(jacket)) jacket.classList.add('has-error');\n\n // Append feedback to visitor feedback area if defined\n if(isset(visitorFeedbackArea))\n {\n let currentFeedbackArea = visitorFeedbackArea.innerHTML;\n currentFeedbackArea += '<span>' + capitalizeFirstLetter(visitorFeedbackLine) + '</span>';\n visitorFeedbackArea.innerHTML = currentFeedbackArea;\n }\n }\n\n // Append feedback to factory feedback area if defined\n if(isset(feedbackArea)){\n let currentFeedbackArea = feedbackArea.innerHTML;\n currentFeedbackArea += '<li>' + capitalizeFirstLetter(visitorFeedbackLine) + '</li>';\n feedbackArea.innerHTML = currentFeedbackArea;\n }\n }\n });\n },\n\n /**\n * Clear the previous marked jackets\n *\n * @param chocolateFactory\n * @private\n */\n _clearPreviousMarkedJackets(chocolateFactory) {\n\n const markedJackets = chocolateFactory.querySelectorAll('.has-error');\n const markedJacketsAmount = markedJackets.length;\n\n for(let i = 0; i < markedJacketsAmount; i++){\n markedJackets[i].classList.remove('has-error');\n }\n },\n\n /**\n * Grab the jacket of the visitor\n *\n * @param visitor\n * @returns {null|*|(() => (Node | null))|ActiveX.IXMLDOMNode|(Node & ParentNode)}\n * @private\n */\n _grabVisitorJacket: function(visitor){\n\n // Check if visitor is defined\n if (!isset(visitor)) return null;\n\n // Do loop settings\n currentLayer = visitor;\n safetyBreak = 0;\n\n // Grab the next layer till it is the jacket (or safetyBreak has been reached\n do {\n safetyBreak++;\n currentLayer = currentLayer.parentNode;\n if(currentLayer.classList.contains('js-form-element')) return currentLayer;\n } while (currentLayer.tagName !== 'BODY' && safetyBreak <= 10);\n\n return null;\n },\n\n /**\n * Redirect the visitor to the thanks page\n *\n * @param nextStop\n * @private\n */\n _thanksForVisiting: function (nextStop) {\n window.location = nextStop;\n },\n\n /**\n * Unknown error occurred, log the error\n *\n * @param chocolateFactory\n * @private\n */\n _unknownGapInFactory: function (chocolateFactory) {\n console.log(chocolateFactory);\n console.log('ChocolateFactory: Unkown Error');\n },\n};\n\nChocolateFactory.enter();","/* ==========================================================================\n Cookie handler\n - Primary usage for toggling the cookie message and/or switch\n ========================================================================== */\n\nconst CookieHandler = {\n\n cookieBar : null,\n cookieOverlay : null,\n cookieMessage : null,\n\n cookieSwitch : null,\n\n cookieFadeOutAnimationDuration : 400,\n acceptTracking : false,\n\n // Initialize cookie handler\n init : function()\n {\n // Bind cookie bar or overlay to cookieMessage\n CookieHandler.cookieMessage = document.querySelector('.js-cookie-bar, .js-cookie-overlay');\n\n // Bind cookie bar to cookieBar\n CookieHandler.cookieBar = document.querySelector('.js-cookie-bar');\n\n // If isset init the functions for cookie bar\n if(isset(CookieHandler.cookieBar)){\n CookieHandler.initCookieBar();\n }\n else{\n // Else try to connect cookie overlay with tracking to cookieOverlay\n CookieHandler.cookieOverlay = document.querySelector('.js-cookie-overlay');\n\n // If isset init the functions for cookie overlay\n if(isset(CookieHandler.cookieOverlay)){\n CookieHandler.initCookieOverlay();\n }\n }\n\n // If either type of cookie has been found check if settings are defined\n if(isset(CookieHandler.cookieMessage)){\n CookieHandler.checkForCookieSettings();\n }\n\n // Bind cookie switch to Handler\n CookieHandler.cookieSwitch = document.querySelector('.js-cookie-switch');\n // If isset init the functions for cookie switch\n if(isset(CookieHandler.cookieSwitch)){\n CookieHandler.initCookieSwitch();\n }\n },\n\n // Init the cookie bar actions\n initCookieBar: function(){\n const closeButton = CookieHandler.cookieBar.querySelector('.js-disable-cookie-bar');\n if(isset(closeButton)){\n closeButton.addEventListener('click', CookieHandler.closeCookieMessage);\n }\n },\n\n // Init the cookie overlay actions\n initCookieOverlay: function(){\n\n // Open the cookie settings event\n const openCookieSettingsButton = CookieHandler.cookieMessage.querySelector('.js-change-cookies-settings');\n if(isset(openCookieSettingsButton)){\n openCookieSettingsButton.addEventListener('click', CookieHandler.openCookieSettings);\n }\n\n // Toggle of the tracking input\n const toggleTrackingInput = CookieHandler.cookieMessage.querySelector('.c-cookie-type__input--tracking');\n if(isset(toggleTrackingInput)){\n\n if(toggleTrackingInput.checked === true) {\n CookieHandler.acceptTracking = true;\n }\n\n toggleTrackingInput.addEventListener('change', CookieHandler.toggleTrackingSetting);\n }\n\n // Accept / Save cookies button event\n const acceptButton = CookieHandler.cookieMessage.querySelector('.js-accept-cookies');\n if(isset(acceptButton)){\n acceptButton.addEventListener('click', CookieHandler.setCookieSettings);\n }\n\n },\n\n // Init the cookie switch actions\n initCookieSwitch: function(){\n\n // Toggle of the tracking input\n const toggleTrackingInput = CookieHandler.cookieSwitch.querySelector('.c-cookie-type__input--tracking');\n if(isset(toggleTrackingInput)){\n\n // Force the state of the cookie switch input because the pop-up is forced on checked\n // while the switch checks by php if the cookie really exist or not\n if(toggleTrackingInput.checked === true) {\n CookieHandler.acceptTracking = true;\n }\n else{\n CookieHandler.acceptTracking = false;\n }\n\n toggleTrackingInput.addEventListener('change', CookieHandler.toggleTrackingSetting);\n }\n\n // Save cookies button event\n const saveButton = CookieHandler.cookieSwitch.querySelector('.js-save-cookie-settings');\n if(isset(saveButton)){\n saveButton.addEventListener('click', function(){\n CookieHandler.cookieFadeOutAnimationDuration = 0; // On the switch click we want no delay :)\n CookieHandler.setCookieSettings();\n });\n }\n\n },\n\n checkForCookieSettings: function(){\n if (Cookie.get('cookieMessage')) {\n CookieHandler.cookieMessage.classList.add('is-accepted');\n }\n else {\n CookieHandler.cookieMessage.classList.remove('is-accepted');\n document.body.classList.add('is-cookie-bar-visible');\n }\n },\n\n closeCookieMessage: function (){\n Cookie.set('cookieMessage', true, 90);\n CookieHandler.cookieMessage.classList.add('is-transitioning-out');\n document.body.classList.remove('is-cookie-bar-visible');\n },\n\n openCookieSettings: function (){\n CookieHandler.cookieOverlay.querySelector('.js-cookie-settings').classList.remove('is-hidden');\n CookieHandler.cookieOverlay.querySelector('.js-cookie-info').classList.add('is-hidden');\n },\n\n toggleTrackingSetting: function(){\n if(CookieHandler.acceptTracking){\n CookieHandler.acceptTracking = false;\n }\n else{\n CookieHandler.acceptTracking = true;\n }\n },\n\n setCookieSettings: function () {\n\n // Set tracking cookie or delete it if isset according to the desired settings\n if(CookieHandler.acceptTracking){\n Cookie.set('trackingCookieAccepted', 'true', 90);\n }\n else{\n if(Cookie.get('trackingCookieAccepted')){\n Cookie.erase('trackingCookieAccepted');\n }\n }\n\n CookieHandler.closeCookieMessage();\n\n // Reload after animation to automatically trigger the tracking after accepting it\n setTimeout(function(){\n location.reload()\n }, CookieHandler.cookieFadeOutAnimationDuration);\n },\n\n};\n\nCookieHandler.init();","/* ==========================================================================\n Customer logos slider handler\n - Slide to next logo.\n ========================================================================== */\n\nconst CustomerLogoSliderHandler = {\n\n customerLogoSliderArea: null,\n customerLogoSlides: null,\n activeLogo: 2,\n autoPlay: true,\n autoPlayInterval: 3000,\n\n init: function () {\n\n CustomerLogoSliderHandler.customerLogoSliderArea = document.querySelector('.js-customer-logo-slider');\n\n\n // Only continue the init if the customer logo area is found\n if (isset(CustomerLogoSliderHandler.customerLogoSliderArea)) {\n\n CustomerLogoSliderHandler.replaceSources = CustomerLogoSliderHandler.customerLogoSliderArea.getAttribute('data-replace-source')\n CustomerLogoSliderHandler.hasSwipeEvents = CustomerLogoSliderHandler.customerLogoSliderArea.getAttribute('data-has-swipe-events')\n\n CustomerLogoSliderHandler.customerLogoSlides = CustomerLogoSliderHandler.customerLogoSliderArea.querySelectorAll('.js-customer-logo-slide');\n\n CustomerLogoSliderHandler.addEvents();\n\n if (CustomerLogoSliderHandler.hasSwipeEvents === 'true') {\n CustomerLogoSliderHandler.addSwipeEvents();\n }\n\n if (CustomerLogoSliderHandler.autoPlay === true) {\n CustomerLogoSliderHandler.autoPlayInterval = setInterval(CustomerLogoSliderHandler.slideToNext, CustomerLogoSliderHandler.autoPlayInterval);\n }\n }\n },\n\n // implement auto play slide to next\n slideToNext: function () {\n CustomerLogoSliderHandler.nextLogo();\n CustomerLogoSliderHandler.updateSlider();\n },\n\n addEvents: function () {\n\n const next = CustomerLogoSliderHandler.customerLogoSliderArea.querySelector('.c-customer-logo-slider__button.next');\n const previous = CustomerLogoSliderHandler.customerLogoSliderArea.querySelector('.c-customer-logo-slider__button.previous');\n\n next.addEventListener('click', function () {\n CustomerLogoSliderHandler.nextLogo();\n CustomerLogoSliderHandler.updateSlider();\n });\n previous.addEventListener('click', function () {\n CustomerLogoSliderHandler.previousLogo();\n CustomerLogoSliderHandler.updateSlider();\n });\n },\n\n addSwipeEvents: function () {\n\n // Swipe interaction\n const swipeGestures = new Hammer(CustomerLogoSliderHandler.customerLogoSliderArea);\n swipeGestures.on('swipeleft', function () {\n CustomerLogoSliderHandler.nextLogo();\n CustomerLogoSliderHandler.updateSlider();\n });\n\n swipeGestures.on('swiperight', function () {\n CustomerLogoSliderHandler.previousLogo();\n CustomerLogoSliderHandler.updateSlider();\n });\n\n },\n\n\n getLogoIds: function() {\n\n const customerLogosLength = CustomerLogoSliderHandler.customerLogoSlides.length;\n let customerLogoIds = [];\n\n for(let i =0; i < customerLogosLength; i++) {\n\n const customerLogo = CustomerLogoSliderHandler.customerLogoSlides[i];\n const customerLogoId = customerLogo.getAttribute('data-logo-id');\n customerLogoIds.push(customerLogoId);\n }\n\n return {ids: customerLogoIds};\n },\n\n finishLoading: function() {\n CustomerLogoSliderHandler.customerLogoSliderArea.querySelector('.js-customer-logo-slide-container').classList.remove('is-loading');\n lazyLoadInstance.update();\n },\n\n nextLogo: function () {\n // Increment active logo id\n CustomerLogoSliderHandler.activeLogo++;\n\n // If it's the same as length then reset it to zero\n if (CustomerLogoSliderHandler.activeLogo === CustomerLogoSliderHandler.customerLogoSlides.length) CustomerLogoSliderHandler.activeLogo = 0;\n },\n\n previousLogo: function () {\n\n // Decrement active logo id\n CustomerLogoSliderHandler.activeLogo--;\n\n // If it's below zero reset it to last item\n if (CustomerLogoSliderHandler.activeLogo < 0) CustomerLogoSliderHandler.activeLogo = CustomerLogoSliderHandler.customerLogoSlides.length - 1;\n\n },\n\n resetLogosOrder: function() {\n\n CustomerLogoSliderHandler.customerLogoSlides = CustomerLogoSliderHandler.customerLogoSliderArea.querySelectorAll('.js-customer-logo-slide');\n const customerLogosLength = CustomerLogoSliderHandler.customerLogoSlides.length;\n for(let i = 0; i < customerLogosLength; i++) {\n const customerLogo = CustomerLogoSliderHandler.customerLogoSlides[i];\n customerLogo.setAttribute('data-slide-id', i);\n }\n\n CustomerLogoSliderHandler.updateSlider();\n\n },\n\n updateSlider: function () {\n\n const previousLocator = CustomerLogoSliderHandler._calcPreviousPositions(3);\n const previouser = CustomerLogoSliderHandler._calcPreviousPositions(2);\n const previous = CustomerLogoSliderHandler._calcPreviousPositions(1);\n const next = CustomerLogoSliderHandler._calcNextPositions(1);\n const nexter = CustomerLogoSliderHandler._calcNextPositions(2);\n const nexterLocator = CustomerLogoSliderHandler._calcNextPositions(3);\n\n for (let i = 0; i < CustomerLogoSliderHandler.customerLogoSlides.length; i++) {\n\n const slide = CustomerLogoSliderHandler.customerLogoSlides[i];\n\n // Reset all possible classes\n slide.classList.remove('c-customer-logo-slider__item--pre-previous');\n slide.classList.remove('c-customer-logo-slider__item--position-1');\n slide.classList.remove('c-customer-logo-slider__item--position-2');\n slide.classList.remove('c-customer-logo-slider__item--position-3');\n slide.classList.remove('c-customer-logo-slider__item--position-4');\n slide.classList.remove('c-customer-logo-slider__item--position-5');\n slide.classList.remove('c-customer-logo-slider__item--pre-next');\n slide.classList.remove('is-hidden');\n\n switch (i) {\n case previousLocator:\n slide.classList.add('c-customer-logo-slider__item--pre-previous');\n break;\n case previouser:\n slide.classList.add('c-customer-logo-slider__item--position-1');\n break;\n case previous:\n slide.classList.add('c-customer-logo-slider__item--position-2');\n break;\n case CustomerLogoSliderHandler.activeLogo:\n slide.classList.add('c-customer-logo-slider__item--position-3');\n break;\n case next:\n slide.classList.add('c-customer-logo-slider__item--position-4');\n break;\n case nexter:\n slide.classList.add('c-customer-logo-slider__item--position-5');\n break;\n case nexterLocator:\n slide.classList.add('c-customer-logo-slider__item--pre-next');\n break;\n default:\n slide.classList.add('is-hidden');\n }\n\n }\n\n },\n\n _calcPreviousPositions: function($amount) {\n let location = CustomerLogoSliderHandler.activeLogo - $amount;\n if (location < 0) return CustomerLogoSliderHandler.customerLogoSlides.length + location;\n return location\n },\n\n _calcNextPositions: function($amount) {\n let location = CustomerLogoSliderHandler.activeLogo + $amount;\n if(location >= CustomerLogoSliderHandler.customerLogoSlides.length) return location - CustomerLogoSliderHandler.customerLogoSlides.length;\n return location;\n\n },\n\n _loadCountryBasedLogos:function (request) {\n\n if(request.status === 204) {\n console.log('CustomerLogoSlider: Empty response');\n CustomerLogoSliderHandler.finishLoading();\n return;\n }\n\n if(request.status !== 200) {\n console.log('CustomerLogoSlider: Unexpected response ' + request.status);\n CustomerLogoSliderHandler.finishLoading();\n return;\n }\n\n const customerLogoResponse = JSON.parse(request.response);\n const customerLogos = customerLogoResponse.data;\n\n let customerLogosHtml = '';\n\n customerLogos.forEach(function (item) {\n customerLogosHtml = CustomerLogoSliderHandler._prepareCustomerLogoHtml(customerLogosHtml, item);\n\n // Check if a logo is already from generated in the cache / blade\n const alreadyRenderLogo = CustomerLogoSliderHandler.customerLogoSliderArea.querySelector('.js-customer-logo-slide[data-logo-id=\"' + item.id + '\"]');\n if(isset(alreadyRenderLogo)){\n\n // console.log('delete: ' + item.id);\n\n // Delete if found because it would be at the end.\n alreadyRenderLogo.remove();\n }\n });\n\n const customerLogoContainer = CustomerLogoSliderHandler.customerLogoSliderArea.querySelector('.js-customer-logo-slide-container');\n let currentInnerHtml = customerLogoContainer.innerHTML;\n customerLogoContainer.innerHTML = customerLogosHtml + currentInnerHtml;\n\n CustomerLogoSliderHandler.resetLogosOrder();\n\n CustomerLogoSliderHandler.finishLoading();\n },\n\n _prepareCustomerLogoHtml: function(customerLogosHtml, customerLogo) {\n\n if(isset(customerLogo.url) && customerLogo.url !== '') customerLogosHtml += '<a target=\"_blank\" rel=\"nofollow noopener noreferrer\" href=\"' + customerLogo.url + '\" aria-label=\"Go to our partners website: ' + customerLogo.url + '\" ';\n else customerLogosHtml += '<div';\n customerLogosHtml += ' class=\"c-customer-logo-slider__item js-customer-logo-slide\" ';\n customerLogosHtml += 'data-slide-id=\"\" data-logo-id=\"' + customerLogo.id + '\">' +\n '<div class=\"c-customer-logo-slider__logo js-lazy\" data-bg=\"' + customerLogo.image + '\"></div>';\n\n if(isset(customerLogo.url) && customerLogo.url !== '') customerLogosHtml += '</a>';\n else customerLogosHtml += '</div>';\n\n return customerLogosHtml;\n\n }\n};\n\nCustomerLogoSliderHandler.init();","import flatpickr from \"flatpickr\";\nimport { Dutch } from \"flatpickr/dist/l10n/nl\";\nflatpickr.localize(Dutch);\n\n// const today = new Date().setHours(0,0,0,0);\n\nflatpickr.defaultConfig = {\n dateFormat: \"d-m-Y\",\n // minDate: today, // Probably bug in flatpickr but doesn't work\n // defaultDate: new Date().setHours(0,0,0,0),\n // allowInput: true, // We disable by input, because it's buggy and not working if you change the format style...\n nextArrow: '<span class=\"lib-flatpickr__arrow lib-flatpickr__arrow--next\"></span>',\n prevArrow: '<span class=\"lib-flatpickr__arrow lib-flatpickr__arrow--prev\"></span>',\n disableMobile: \"true\" // needs to be disabled, otherwise it crashes on mobile\n\n // This allows to change the date by changing the input\n // onClose: function (selectedDates, dateStr, instance) {\n // if(selectedDates.length === 1) {\n // instance.setDate(dateStr);\n // instance.onClose(selectedDates, dateStr, instance);\n // }\n // },\n \n // We check in the on change method that it must be before the minDate\n // onChange: function (selectedDates, dateStr, instance) {\n // debugger;\n // }\n};\n\nconst DatePickerHandler = {\n\n datePickers: [],\n\n init: function () {\n\n const datePickerElements = document.getElementsByClassName('js-date-picker');\n\n for(let i = 0; i < datePickerElements.length; i++) {\n DatePickerHandler.makeFlatPickr(datePickerElements[i]);\n }\n },\n\n makeFlatPickr(datePickerElement) {\n\n let selectedDate = datePickerElement.value;\n let minDate = datePickerElement.getAttribute('data-min-date');\n\n let daysOfThWeekClosed = datePickerElement.getAttribute('data-days-of-the-week-closed');\n if(!isset(daysOfThWeekClosed)) daysOfThWeekClosed = [];\n else daysOfThWeekClosed = JSON.parse(daysOfThWeekClosed);\n\n flatpickr(datePickerElement, {\n minDate: minDate,\n defaultDate: selectedDate,\n \"disable\": [\n function(date) {\n return daysOfThWeekClosed.indexOf(date.getDay()) !== -1;\n }\n ],\n });\n }\n};\n\nDatePickerHandler.init();\n\nexport { DatePickerHandler };","/* ==========================================================================\n Google Maps handler\n - https://developers.google.com/maps/documentation/javascript/adding-a-google-map\n ========================================================================== */\n\nconst LocationMapHandler = {\n\n map: null,\n key: '',\n\n init: function () {\n LocationMapHandler.map = document.querySelector('.js-location-map')\n if (!isset(LocationMapHandler.map)) return;\n\n const mapMarkers = LocationMapHandler.map.querySelectorAll('.js-location-marker');\n\n for(let m = 0; m < mapMarkers.length; m++) {\n const mapMarker = mapMarkers[m];\n\n mapMarker.addEventListener('mouseover', function () {\n LocationMapHandler.enableBelongTooltip(this);\n });\n mapMarker.addEventListener('mouseout', function () {\n LocationMapHandler.disableBelongTooltip(this);\n });\n }\n\n },\n\n enableBelongTooltip: function (element) {\n const targetElement = LocationMapHandler.map.querySelector('#' + element.dataset.target);\n targetElement.classList.remove('is-hidden');\n },\n\n disableBelongTooltip: function (element) {\n const targetElement = LocationMapHandler.map.querySelector('#' + element.dataset.target);\n targetElement.classList.add('is-hidden');\n },\n\n\n};\n\nLocationMapHandler.init();","/* ==========================================================================\n Google Maps handler\n - https://developers.google.com/maps/documentation/javascript/adding-a-google-map\n ========================================================================== */\n\nconst MapsHandler = {\n\n maps: [],\n key: '',\n\n init: function () {\n\n // Get map elements\n const maps = document.querySelectorAll('.js-google-map');\n\n // If there are map elements loop through them and draw the maps\n if(maps.length !== 0 ) {\n\n // Convert elements into object for callback when script as been loaded\n for(let i = 0; i < maps.length; i++) {\n\n // Get map from nodeList\n const map = maps[i];\n\n if(!map.hasAttribute('data-google-lat') || !map.hasAttribute('data-google-lng')) continue;\n\n let lat = parseFloat(map.getAttribute('data-google-lat'));\n let lng = parseFloat(map.getAttribute('data-google-lng'));\n\n MapsHandler.maps.push({\n node: map,\n location: {\n lat: lat,\n lng: lng,\n },\n styles: MapsHandler.setCustomStyling()\n });\n }\n\n // See if google variable exists\n if (typeof(google) == 'undefined' || typeof(google.maps) == 'undefined') {\n // Load external script with drawMaps callback\n getScript('https://maps.googleapis.com/maps/api/js?key=' + MapsHandler.key, MapsHandler.drawMaps);\n } else {\n // If already loaded draw maps\n MapsHandler.drawMaps()\n }\n }\n },\n\n /**\n * Draw the google maps\n */\n drawMaps: function () {\n\n for (let i = 0; i < MapsHandler.maps.length; i++) {\n\n const map = MapsHandler.maps[i];\n\n // Create a map\n const googleMap = new google.maps.Map(map.node, {\n zoom: 11,\n center: map.location,\n disableDefaultUI: true,\n styles: map.styles\n });\n\n // Add a marker\n const marker = new google.maps.Marker({\n position: map.location,\n map: googleMap\n });\n }\n },\n\n /**\n * Set the custom styling for the Google Maps\n *\n * @returns {*[]}\n */\n setCustomStyling: function () {\n\n return [\n {\n \"featureType\": \"poi\",\n \"elementType\": \"labels.text.fill\",\n \"stylers\": [\n {\n \"color\": \"#747474\"\n },\n {\n \"lightness\": \"23\"\n }\n ]\n },\n {\n \"featureType\": \"poi.attraction\",\n \"elementType\": \"geometry.fill\",\n \"stylers\": [\n {\n \"color\": \"#f38eb0\"\n }\n ]\n },\n {\n \"featureType\": \"poi.government\",\n \"elementType\": \"geometry.fill\",\n \"stylers\": [\n {\n \"color\": \"#ced7db\"\n }\n ]\n },\n {\n \"featureType\": \"poi.medical\",\n \"elementType\": \"geometry.fill\",\n \"stylers\": [\n {\n \"color\": \"#ffa5a8\"\n }\n ]\n },\n {\n \"featureType\": \"poi.park\",\n \"elementType\": \"geometry.fill\",\n \"stylers\": [\n {\n \"color\": \"#c7e5c8\"\n }\n ]\n },\n {\n \"featureType\": \"poi.place_of_worship\",\n \"elementType\": \"geometry.fill\",\n \"stylers\": [\n {\n \"color\": \"#d6cbc7\"\n }\n ]\n },\n {\n \"featureType\": \"poi.school\",\n \"elementType\": \"geometry.fill\",\n \"stylers\": [\n {\n \"color\": \"#c4c9e8\"\n }\n ]\n },\n {\n \"featureType\": \"poi.sports_complex\",\n \"elementType\": \"geometry.fill\",\n \"stylers\": [\n {\n \"color\": \"#b1eaf1\"\n }\n ]\n },\n {\n \"featureType\": \"road\",\n \"elementType\": \"geometry\",\n \"stylers\": [\n {\n \"lightness\": \"100\"\n }\n ]\n },\n {\n \"featureType\": \"road\",\n \"elementType\": \"labels\",\n \"stylers\": [\n {\n \"visibility\": \"off\"\n },\n {\n \"lightness\": \"100\"\n }\n ]\n },\n {\n \"featureType\": \"road.highway\",\n \"elementType\": \"geometry.fill\",\n \"stylers\": [\n {\n \"color\": \"#ffd4a5\"\n }\n ]\n },\n {\n \"featureType\": \"road.arterial\",\n \"elementType\": \"geometry.fill\",\n \"stylers\": [\n {\n \"color\": \"#ffe9d2\"\n }\n ]\n },\n {\n \"featureType\": \"road.local\",\n \"elementType\": \"all\",\n \"stylers\": [\n {\n \"visibility\": \"simplified\"\n }\n ]\n },\n {\n \"featureType\": \"road.local\",\n \"elementType\": \"geometry.fill\",\n \"stylers\": [\n {\n \"weight\": \"3.00\"\n }\n ]\n },\n {\n \"featureType\": \"road.local\",\n \"elementType\": \"geometry.stroke\",\n \"stylers\": [\n {\n \"weight\": \"0.30\"\n }\n ]\n },\n {\n \"featureType\": \"road.local\",\n \"elementType\": \"labels.text\",\n \"stylers\": [\n {\n \"visibility\": \"on\"\n }\n ]\n },\n {\n \"featureType\": \"road.local\",\n \"elementType\": \"labels.text.fill\",\n \"stylers\": [\n {\n \"color\": \"#747474\"\n },\n {\n \"lightness\": \"36\"\n }\n ]\n },\n {\n \"featureType\": \"road.local\",\n \"elementType\": \"labels.text.stroke\",\n \"stylers\": [\n {\n \"color\": \"#e9e5dc\"\n },\n {\n \"lightness\": \"30\"\n }\n ]\n },\n {\n \"featureType\": \"transit.line\",\n \"elementType\": \"geometry\",\n \"stylers\": [\n {\n \"visibility\": \"on\"\n },\n {\n \"lightness\": \"100\"\n }\n ]\n },\n {\n \"featureType\": \"water\",\n \"elementType\": \"all\",\n \"stylers\": [\n {\n \"color\": \"#d2e7f7\"\n }\n ]\n }\n ];\n }\n};\n\nMapsHandler.init();","/* ==========================================================================\n Navigation handler\n - Handles the showing and hiding of the overlay-menu component which has the proper classes.\n ========================================================================== */\n\nconst bodyScrollLock = require('body-scroll-lock');\n\nconst OverlayMenuHandler = {\n\n // init: function () {\n // const overlayMenuTrigger = document.querySelector('.js-overlay-menu-trigger');\n // OverlayMenuHandler.initOverlayMenu(overlayMenuTrigger);\n // },\n\n init: function () {\n\n const overlayMenuTriggerList = document.querySelectorAll('.js-overlay-menu-trigger');\n const overlayMenuTriggerListCount = overlayMenuTriggerList.length;\n\n if(isset(overlayMenuTriggerList) && overlayMenuTriggerListCount !== 0){\n for(let i = 0; i < overlayMenuTriggerListCount; i++){\n const overlayMenuTrigger = overlayMenuTriggerList[i];\n OverlayMenuHandler.initOverlayMenu(overlayMenuTrigger);\n }\n }\n },\n\n initOverlayMenu: function (overlayMenuTrigger) {\n overlayMenuTrigger.addEventListener('click', OverlayMenuHandler.toggleOverlayMenu, false);\n },\n\n toggleOverlayMenu: function (event) {\n const overlayMenuNav = document.querySelector('.js-overlay-menu');\n // const overlayMenuBody = overlayMenu.querySelector('.js-overlay-menu-persist-scrolling');\n\n // Bail if overlayMenu doesn't exist\n if (!overlayMenuNav) return;\n\n // Clear previously locked scroll on the body\n bodyScrollLock.enableBodyScroll(overlayMenuNav);\n\n // If the overlayMenu is already active, collapse it and quit\n if (document.body.classList.contains('is-overlay-menu-active')) {\n overlayMenuNav.querySelectorAll('[tabindex=\"0\"]').forEach(function(elem) {\n elem.tabIndex = -1;\n });\n\n document.body.classList.remove('is-overlay-menu-active');\n return;\n }\n\n // Lock scrolling on the body\n bodyScrollLock.disableBodyScroll(overlayMenuNav);\n\n overlayMenuNav.querySelectorAll('[tabindex=\"-1\"]').forEach(function(elem) {\n elem.tabIndex = 0;\n });\n\n // Toggle active overlayMenu by setting a class on the body\n document.body.classList.toggle('is-overlay-menu-active');\n overlayMenuNav.hidden = false;\n }\n};\n\nOverlayMenuHandler.init();","/**\n * Created by Pascal on 06/12/17.\n * (Name changes by Rob on 18/03/18)\n */\n\n/* Example\n\nconst headerImageSliderSetting = new ProjectorSetting({\n sliderProjectorId: 'header-image-slider',\n slideQuery: '#header-image-slider .placeholder figure',\n dots: '#header-image-slider .slider-navigation-labels .navigation span',\n captions: '#header-image-slider .slider-navigation-labels .caption p',\n autoSlide: true,\n sliderInterval: 4000\n});\nheaderImageSliderSetting = headerImageSliderSetting.prepareParameters();\n\nconst headerImageSlider = new Projector(headerImageSliderSetting).init();\n\n */\n\nlet projectors = [];\n\nconst projectorContainers = document.querySelectorAll('.js-projector');\nconst projectorContainersLength = projectorContainers.length;\n\nfor(let i =0; i < projectorContainersLength; i++){\n\n const projector = projectorContainers[i];\n const projectorId = projector.getAttribute('id');\n\n if(projectorId !== null){\n\n const projectorSetting = new ProjectorSetting({\n sliderId: projectorId,\n slideQuery: '#' + projectorId +' .js-projector-slide',\n navigationButtons: '#' + projectorId +' .js-projector-button' ,\n dots: '#' + projectorId +' .js-projector-indicator' ,\n autoSlide: true,\n sliderInterval: 4000\n });\n\n projectors.push( new Projector(projectorSetting.prepareParameters()).init() );\n }\n else console.log('An image slider has no id...');\n}\n\n\nfunction ProjectorSetting(settingsObject) {\n\n const self = this;\n\n this.sliderId = '';\n this.definedPreviousNext = true;\n this.autoSlide = false;\n this.sliderInterval = 4000;\n this.navigationButtons = '';\n this.dots = '';\n this.captions = '';\n this.slideQuery = '';\n\n this.setProjectorId = function (string) {\n this.sliderId = string;\n return this;\n };\n this.setDefinedPreviousNext = function (boolean) {\n this.definedPreviousNext = boolean;\n return this;\n };\n this.setAutoSlide = function (boolean) {\n this.autoSlide = boolean;\n return this;\n };\n this.setSliderInterval = function (integer) {\n this.sliderInterval = integer;\n return this;\n };\n this.setSlideQuery = function (string) {\n this.slideQuery = string;\n return this;\n };\n this.setNavigationButtons = function (string) {\n this.navigationButtons = string;\n return this;\n };\n this.setDots = function (string) {\n this.dots = string;\n return this;\n };\n this.setCaptions = function (string) {\n this.captions = string;\n return this;\n };\n this.getProjectorId = function () {\n return this.sliderId;\n };\n this.getDefinedPreviousNext = function () {\n return this.definedPreviousNext;\n };\n this.getAutoSlide = function () {\n return this.autoSlide;\n };\n this.getSliderInterval = function () {\n return this.sliderInterval;\n };\n this.getSlideQuery = function () {\n return this.slideQuery;\n };\n this.getNavigationButtons = function () {\n return this.navigationButtons;\n };\n this.getDots = function () {\n return this.dots;\n };\n this.getCaptions = function () {\n return this.captions;\n };\n\n\n // Invert setters to getters\n this.prepareParameters = function () {\n\n return {\n sliderId: self.getProjectorId(),\n definedPreviousNext: self.getDefinedPreviousNext(),\n autoSlide: self.getAutoSlide(),\n sliderInterval: self.getSliderInterval(),\n navigationButtons: self.getNavigationButtons(),\n dots: self.getDots(),\n captions: self.getCaptions(),\n slideQuery: self.getSlideQuery()\n }\n\n };\n\n // Mass assign settings\n this.fill = function () {\n // Object.keys(settingsObject).forEach(function (key) {\n // self[key] = settingsObject[key];\n // });\n\n const settingsObjectKeys = Object.keys(settingsObject);\n const settingsObjectLength = settingsObjectKeys.length;\n\n for(let i = 0; i < settingsObjectLength; i++){\n const key = settingsObjectKeys[i];\n self[key] = settingsObject[key];\n }\n\n };\n\n this.fill();\n\n return {\n sliderId: self.setProjectorId,\n definedPreviousNext: self.setDefinedPreviousNext,\n autoSlide: self.setAutoSlide,\n sliderInterval: self.setSliderInterval,\n navigationButtons: self.setNavigationButtons,\n dots: self.setDots,\n captions: self.setCaptions,\n slideQuery: self.setSlideQuery,\n prepareParameters: self.prepareParameters\n };\n}\n\nfunction Projector(settings) {\n\n //Define Projector object\n const self = this;\n this.sliderObject = '';\n\n //SlideParameters\n this.activeSlideId = 0;\n this.previousSlideId = 0;\n this.nextSlideId = 0;\n this.availableSlides = 1;\n this.slides = [];\n this.autoSlideInterval = null;\n\n this.settings = {};\n\n this.init = function () {\n\n //Append settings to self\n this.settings = settings;\n\n //Assign needed elements and calculations\n this.sliderObject = document.getElementById(this.settings.sliderId);\n this.slides = document.querySelectorAll(this.settings.slideQuery);\n this.availableSlides = this.slides.length;\n this.activeSlideId = 0;\n\n //Define previous and next if we want to use those\n if (self.settings.definedPreviousNext) this.setPreviousAndNextSlide();\n\n // Set active slide (and possible previous and next classes)\n this.setSlide();\n\n // Swipe interaction\n const swipeGestures = new Hammer(this.sliderObject);\n swipeGestures.on('swipeleft', function () {\n self.resetAutoSlide();\n self.nextSlide();\n self.setSlide();\n });\n swipeGestures.on('swiperight', function () {\n self.resetAutoSlide();\n self.previousSlide();\n self.setSlide();\n });\n\n\n\n if (this.settings.navigationButtons !== '') {\n\n // Click interaction\n const navigationButtons = document.querySelectorAll(this.settings.navigationButtons);\n const navigationButtonsLength = navigationButtons.length;\n for(let i = 0; i < navigationButtonsLength; i++){\n const navigationButton = navigationButtons[i];\n navigationButton.addEventListener('click', function () {\n self.clickNavigationButton(this);\n });\n }\n\n }\n\n if (this.settings.dots !== '') {\n // Click interaction\n const dots = document.querySelectorAll(this.settings.dots);\n const dotsLength = dots.length;\n // console.log(this.settings.dots);\n // console.log(dots);\n for(let i = 0; i < dotsLength; i++){\n const dot = dots[i];\n // console.log('hier');\n dot.addEventListener('click', function () {\n self.clickDot(this);\n });\n }\n\n }\n\n self.autoSlide();\n };\n\n\n this.autoSlide = function (){\n\n if(this.autoSlideInterval !== null) clearInterval(this.autoSlideInterval);\n\n if(this.settings.autoSlide && Number.isInteger(this.settings.sliderInterval) ){\n\n this.autoSlideInterval = setInterval(function() {\n self.nextSlide();\n self.setSlide();\n }, this.settings.sliderInterval\n );\n }\n };\n\n this.resetAutoSlide = self.autoSlide;\n\n\n this.nextSlide = function () {\n this.activeSlideId++;\n if (this.activeSlideId >= this.availableSlides) this.activeSlideId = 0;\n\n if (self.settings.definedPreviousNext) this.setPreviousAndNextSlide();\n };\n\n this.previousSlide = function () {\n this.activeSlideId--;\n if (this.activeSlideId < 0) this.activeSlideId = this.availableSlides - 1;\n\n if (self.settings.definedPreviousNext) this.setPreviousAndNextSlide();\n };\n\n this.setPreviousAndNextSlide = function () {\n this.nextSlideId = this.activeSlideId + 1;\n if (this.nextSlideId >= this.availableSlides) this.nextSlideId = 0;\n\n this.previousSlideId = this.activeSlideId - 1;\n if (this.previousSlideId < 0) this.previousSlideId = this.availableSlides - 1;\n };\n\n this.setSlide = function () {\n\n // Loop through the form elements\n const slidesLength = self.slides.length;\n for(let i = 0; i < slidesLength; i++){\n const slide = self.slides[i];\n\n // Convert data set attribute to desired type\n const slideOrder = parseInt(slide.getAttribute('data-order'));\n\n // Remove and set active for all slides\n if (slideOrder !== self.activeSlideId) slide.classList.remove('is-active');\n else slide.classList.add('is-active');\n\n // If we use the previous and next, also set those classes\n if (self.settings.definedPreviousNext) {\n\n if (slideOrder !== self.previousSlideId) slide.classList.remove('previous');\n else slide.classList.add('previous');\n\n if (slideOrder !== self.nextSlideId) slide.classList.remove('next');\n else slide.classList.add('next');\n }\n }\n\n if (self.settings.dots !== '') { self.setActiveDot(); }\n if (self.settings.captions !== '') { self.setActiveCaption(); }\n };\n\n this.clickNavigationButton = function (navButton) {\n self.activeSlideId = parseInt(navButton.getAttribute('data-order'));\n if (self.settings.definedPreviousNext) self.setPreviousAndNextSlide();\n self.setSlide();\n\n const next = document.querySelector(self.settings.navigationButtons + '.next');\n const previous = document.querySelector(self.settings.navigationButtons + '.previous');\n\n next.setAttribute('data-order', self.nextSlideId);\n previous.setAttribute('data-order', self.previousSlideId);\n\n self.resetAutoSlide();\n\n // next.querySelector('p').innerHTML = self.slides[self.nextSlideId].dataset.name;\n // previous.querySelector('p').innerHTML = self.slides[self.previousSlideId].dataset.name;\n };\n\n this.clickDot = function (clickedDot) {\n self.activeSlideId = parseInt(clickedDot.getAttribute('data-order'));\n self.setSlide();\n self.resetAutoSlide();\n };\n\n this.setActiveDot = function () {\n\n const dots = document.querySelectorAll(this.settings.dots);\n const dotsLength = dots.length;\n for(let i = 0; i < dotsLength; i++){\n const dot = dots[i];\n dotOrder = parseInt(dot.getAttribute('data-order'));\n\n if(dotOrder !== self.activeSlideId) dot.classList.remove('is-active');\n else dot.classList.add('is-active');\n }\n };\n\n this.setActiveCaption = function () {\n\n const captions = document.querySelectorAll(this.settings.captions);\n const captionsLength = captions.length;\n for(let i = 0; i < captionsLength; i++){\n const caption = captions[i];\n captionOrder = parseInt(caption.getAttribute('data-order'));\n\n if(captionOrder !== self.activeSlideId) caption.classList.remove('is-active');\n else caption.classList.add('is-active');\n }\n };\n}","/* ==========================================================================\n Scroll To Click handler\n ========================================================================== */\n\nconst ScrollToHandler = {\n\n // Animation settings\n offset : 60, //pixel\n duration : 1400, //ms\n\n // Animation variables\n body : null,\n start : 0,\n change : 0,\n currentTime : 0,\n allowAnimation : false,\n scrollToAnimation : null,\n\n // Watch the EasingFunction helper for the available methods\n easing: 'easeInOutQuad',\n\n init : function(){\n\n const anchorLinks = document.querySelectorAll('.js-scroll-to-target');\n const anchorLinksAmount = anchorLinks.length;\n\n for(let i = 0; i < anchorLinksAmount; i++) {\n\n const anchorLink = anchorLinks[i];\n\n anchorLink.addEventListener('click', function (event) {\n ScrollToHandler.prepareScrollTo(this.getAttribute('href'));\n event.preventDefault();\n });\n }\n },\n\n /**\n * Prepare the Handler for the animation\n */\n prepareScrollTo : function(elementId){\n\n // Get the scroll to element\n elementId = elementId.substr(elementId.indexOf('#')+1);\n const scrollToElement = document.getElementById(elementId);\n const scrollToElementPosition = scrollToElement.getBoundingClientRect();\n\n // Reset or define the Handler variables\n ScrollToHandler.body = document.documentElement;\n ScrollToHandler.start = Math.max(ScrollToHandler.body.scrollTop, document.body.scrollTop, window.pageYOffset); //Use Math.max because safari doesn't support document.documentElement.scrollTop\n ScrollToHandler.change = ((scrollToElementPosition.top + ScrollToHandler.start) - ScrollToHandler.start) - ScrollToHandler.offset;\n ScrollToHandler.startTime = 'now' in window.performance ? performance.now() : new Date().getTime();\n ScrollToHandler.allowAnimation = true;\n\n // Trigger animation\n scrollToAnimation = requestAnimationFrame(ScrollToHandler.animateScroll);\n\n // Stop on scroll\n window.addEventListener('mousedown', ScrollToHandler.abortScrollAnimation);\n window.addEventListener('wheel', ScrollToHandler.abortScrollAnimation);\n window.addEventListener('DOMMouseScroll', ScrollToHandler.abortScrollAnimation);\n window.addEventListener('mousewheel', ScrollToHandler.abortScrollAnimation);\n window.addEventListener('keyup', ScrollToHandler.abortScrollAnimation);\n window.addEventListener('touchmove', ScrollToHandler.abortScrollAnimation);\n\n },\n\n /*\n * Animate the scroll position\n */\n animateScroll : function (timestamp) {\n\n // Calculate progress from 0 - 1\n let progress = Math.min(1, (timestamp - ScrollToHandler.startTime) / ScrollToHandler.duration);\n if(progress < 0) progress = 0;\n\n // Convert progress with easing function\n progress = EasingFunctions[ScrollToHandler.easing](progress);\n\n const newScrollTop = ScrollToHandler.start + ( ScrollToHandler.change * progress );\n\n ScrollToHandler.body.scrollTop = newScrollTop;\n if( ScrollToHandler.body.scrollTop === 0 ) document.body.scrollTop = newScrollTop; // Safari doesn't support so if ScrollToHandler.body.scrollTop is 0 force the scroll position through document.body.scrollTop\n\n if(progress < 1 && ScrollToHandler.allowAnimation){\n scrollToAnimation = requestAnimationFrame(ScrollToHandler.animateScroll);\n }\n },\n\n /*\n * Abort the scroll animation\n */\n abortScrollAnimation : function (event) {\n ScrollToHandler.allowAnimation = false;\n cancelAnimationFrame(ScrollToHandler.scrollToAnimation);\n }\n\n};\n\nScrollToHandler.init();","/* ==========================================================================\n Search form\n ========================================================================== */\n\nconst SearchFormHandler = {\n\n form: null,\n\n init: function () {\n\n SearchFormHandler.form = document.querySelector('.js-search-form');\n\n if(!isset(SearchFormHandler.form)) return;\n\n const searchLocation = SearchFormHandler.form.querySelector('.js-search-location');\n\n SearchFormHandler.form.addEventListener('submit', function (e) {\n if(searchLocation.value === '') {\n searchLocation.classList.add('c-select--alert');\n e.preventDefault();\n }\n });\n\n if(SearchFormHandler.form.classList.contains('js-search-form-on-change')) {\n const formFields = SearchFormHandler.form.querySelectorAll('select, input');\n for(let i = 0; i < formFields.length; i++) {\n const formField = formFields[i];\n formField.addEventListener('change', function () {\n if(searchLocation.value !== '') {\n SearchFormHandler.form.submit();\n }\n });\n }\n }\n },\n};\n\nSearchFormHandler.init();","/* ==========================================================================\n Accordion handler\n - Handles the accordion component which has the proper classes.\n ========================================================================== */\n\nconst ToggleHandler = {\n\n toggleClass : 'js-toggle',\n toggleSwitchClass : 'js-toggle-switch',\n toggleContentClass : 'js-toggle-content',\n\n\n init: function () {\n\n const toggleList = document.querySelectorAll('.'+ToggleHandler.toggleClass);\n const toggleListCount = toggleList.length;\n\n if(isset(toggleList) && toggleListCount !== 0){\n for(let i = 0; i < toggleListCount; i++){\n const toggle = toggleList[i];\n ToggleHandler.initToggle(toggle);\n }\n }\n },\n\n initToggle: function (toggle) {\n\n /*\n * Set \"pointer events: none\" on all direct children of the toggle\n * Because we don't want clicks on them to register, only on the parent toggle element\n */\n const toggleList = toggle.querySelectorAll('.'+ToggleHandler.toggleSwitchClass);\n for (var i = 0; i < toggleList.length; i++) {\n var toggleItem = toggleList[i];\n\n for (var j = 0; j < toggleItem.children.length; j++) {\n var toggleChild = toggleItem.children[j];\n\n toggleChild.style.pointerEvents = \"none\";\n }\n\n }\n toggle.addEventListener('click', ToggleHandler.activateToggle, false);\n },\n\n activateToggle: function (event) {\n const item = event.target.parentNode;\n const itemList = item.parentNode.children;\n\n // Bail if we didn't click on the toggle element\n if (!event.target.classList.contains(ToggleHandler.toggleSwitchClass)) return;\n\n // Check if content element exists\n if (!item.querySelector('.'+ToggleHandler.toggleContentClass)) return;\n\n // Prevent default link behavior\n event.preventDefault();\n\n // Toggle the active class\n item.classList.toggle('is-active');\n }\n};\n\nToggleHandler.init();","/* ==========================================================================\n Youtube handler\n ========================================================================== */\n\nconst YoutubeHandler = {\n\n youtubeClass : '.js-youtube-player',\n players: [],\n\n init : function()\n {\n // Get the youtube players containers\n const youtubePlayers = document.querySelectorAll(YoutubeHandler.youtubeClass);\n const youtubePlayersAmount = youtubePlayers.length;\n\n for(let i = 0; i < youtubePlayersAmount; i++){\n\n const youtubePlayer = youtubePlayers[i];\n\n\n const youtubePlayerId = youtubePlayer.getAttribute('id');\n if(youtubePlayerId !== null )\n {\n // Strip the necessary data from the html and create objects from it\n const youtubeElement = {\n id: youtubePlayer.getAttribute('id'),\n link: youtubePlayer.getAttribute('data-youtube-link'),\n autoPlay: parseInt(youtubePlayer.getAttribute('data-auto-play')),\n disableKB: parseInt(youtubePlayer.getAttribute('data-disable-kb')),\n controls: parseInt(youtubePlayer.getAttribute('data-controls')),\n loop: parseInt(youtubePlayer.getAttribute('data-loop')),\n };\n\n YoutubeHandler.players.push(youtubeElement);\n }\n else{\n console.log(\"Element not include because there isn't a id on the player\");\n console.log(youtubePlayer);\n }\n }\n\n if(youtubePlayersAmount >= 1) YoutubeHandler.initYoutube();\n\n },\n\n /**\n * Check if external script is loaded\n *\n */\n initYoutube: function() {\n // See if YT variable exists\n if (typeof(YT) == 'undefined' || typeof(YT.Player) == 'undefined') {\n // Setup API ready function\n window.onYouTubePlayerAPIReady = function() {\n YoutubeHandler.loadPlayers();\n };\n // Load external script\n getScript('https://www.youtube.com/iframe_api');\n // If YT already exists load player\n } else {\n YoutubeHandler.loadPlayers();\n }\n },\n\n /**\n * Create the Youtube player(s) with parameters\n * And rewrite the players to key them by the element id\n *\n */\n loadPlayers: function() {\n\n let players = [];\n\n const youtubePlayersAmount = YoutubeHandler.players.length;\n for(let i = 0; i < youtubePlayersAmount; i++){\n\n let youtubePlayer = YoutubeHandler.players[i];\n\n // Load player\n youtubePlayer.player = new YT.Player(youtubePlayer.id,{\n height: 200,\n width: 200,\n videoId: youtubePlayer.link,\n host: 'https://www.youtube-nocookie.com',\n playerVars: {\n modestbranding: 0,\n rel: 0,\n autoplay: youtubePlayer.autoPlay,\n controls: youtubePlayer.controls,\n disablekb: youtubePlayer.disableKB,\n },\n events: {\n 'onReady': YoutubeHandler.onReady,\n 'onStateChange': YoutubeHandler.onStateChange\n }\n });\n\n players[youtubePlayer.id] = youtubePlayer;\n\n }\n\n YoutubeHandler.players = players;\n\n },\n\n /**\n * When player is ready to play\n */\n onReady : function(event) {\n\n const playerContainerId = event.target.getIframe().getAttribute('id');\n const videoPlayer = YoutubeHandler.players[playerContainerId];\n\n // Show video\n setTimeout(function(){ document.querySelector('#' + playerContainerId).classList.add('is-active') },800);\n\n if(videoPlayer.autoPlay !== 1) return\n\n // If not on tablet or mobile, play on high quality\n videoPlayer.player.mute();\n videoPlayer.player.playVideo();\n videoPlayer.player.setPlaybackQuality('hd1080');\n },\n\n /**\n * Listener for Youtube state change\n */\n onStateChange : function(event) {\n\n const playerContainerId = event.target.getIframe().getAttribute('id');\n const videoPlayer = YoutubeHandler.players[playerContainerId];\n\n // Loop video\n if (event.data === YT.PlayerState.ENDED ) {\n if(videoPlayer.loop === 1) videoPlayer.player.playVideo();\n }\n }\n};\n\nYoutubeHandler.init();","/* ==========================================================================\n Browser Handler\n ========================================================================== */\n\nconst BrowserHandler = {\n\n userAgent: '',\n browserInfo: '',\n\n\n init: function () {\n BrowserHandler.userAgent = window.navigator.userAgent;\n BrowserHandler.browserInfo = BrowserHandler.getBrowserInfo();\n BrowserHandler.handleIE();\n BrowserHandler.handleSafari();\n },\n\n handleIE: function () {\n\n // Detect versions below ie11\n let msie = BrowserHandler.userAgent.indexOf('MSIE ');\n const ielt11 = msie > 0;\n\n // Detect ie11\n const ie11 = !!navigator.userAgent.match(/Trident.*rv\\:11\\./);\n\n // If Internet Explorer\n if (ielt11 || ie11) {\n // Default version\n let version = '11';\n\n // Way to detect version < 11\n if (ielt11) version = parseInt(BrowserHandler.userAgent.substring(\n msie + 5,\n BrowserHandler.userAgent.indexOf(\".\", msie)\n ));\n\n // Append classes to HTML (we have to do this separately because else ie will fail)\n document.body.classList.add('ie');\n document.body.classList.add('v'+version);\n }\n\n },\n\n // Fallback for older safari version\n handleSafari: function () {\n\n if(BrowserHandler.browserInfo.name === 'Safari' && BrowserHandler.browserInfo.version <= 10){\n document.getElementsByTagName('html')[0].classList.add('ie');\n }\n\n },\n\n getBrowserInfo: function () {\n let ua=navigator.userAgent,tem,M=ua.match(/(opera|chrome|safari|firefox|msie|trident(?=\\/))\\/?\\s*(\\d+)/i) || [];\n if(/trident/i.test(M[1])){\n tem=/\\brv[ :]+(\\d+)/g.exec(ua) || [];\n return {name:'IE ',version:(tem[1]||'')};\n }\n if(M[1]==='Chrome'){\n tem=ua.match(/\\bOPR\\/(\\d+)/)\n if(tem!=null) {return {name:'Opera', version:tem[1]};}\n }\n M=M[2]? [M[1], M[2]]: [navigator.appName, navigator.appVersion, '-?'];\n if((tem=ua.match(/version\\/(\\d+)/i))!=null) {M.splice(1,1,tem[1]);}\n return {\n name: M[0],\n version: M[1]\n };\n }\n};\n\nBrowserHandler.init();","/* ==========================================================================\n Helper functions\n ========================================================================== */\n\n/*\n * Simple isset method for this does not exist in javascript\n */\nwindow.isset = function (obj) {\n return typeof obj !== 'undefined' && obj !== null;\n};\n\n/*\n * Easing Functions - inspired from http://gizma.com/easing/\n * only considering the t value for the range [0, 1] => [0, 1]\n */\nwindow.EasingFunctions = {\n // no easing, no acceleration\n linear: function (t) {\n return t\n },\n // accelerating from zero velocity\n easeInQuad: function (t) {\n return t * t\n },\n // decelerating to zero velocity\n easeOutQuad: function (t) {\n return t * (2 - t)\n },\n // acceleration until halfway, then deceleration\n easeInOutQuad: function (t) {\n return t < .5 ? 2 * t * t : -1 + (4 - 2 * t) * t\n },\n // accelerating from zero velocity\n easeInCubic: function (t) {\n return t * t * t\n },\n // decelerating to zero velocity\n easeOutCubic: function (t) {\n return (--t) * t * t + 1\n },\n // acceleration until halfway, then deceleration\n easeInOutCubic: function (t) {\n return t < .5 ? 4 * t * t * t : (t - 1) * (2 * t - 2) * (2 * t - 2) + 1\n },\n // accelerating from zero velocity\n easeInQuart: function (t) {\n return t * t * t * t\n },\n // decelerating to zero velocity\n easeOutQuart: function (t) {\n return 1 - (--t) * t * t * t\n },\n // acceleration until halfway, then deceleration\n easeInOutQuart: function (t) {\n return t < .5 ? 8 * t * t * t * t : 1 - 8 * (--t) * t * t * t\n },\n // accelerating from zero velocity\n easeInQuint: function (t) {\n return t * t * t * t * t\n },\n // decelerating to zero velocity\n easeOutQuint: function (t) {\n return 1 + (--t) * t * t * t * t\n },\n // acceleration until halfway, then deceleration\n easeInOutQuint: function (t) {\n return t < .5 ? 16 * t * t * t * t * t : 1 + 16 * (--t) * t * t * t * t\n }\n};\n\n/*\n * Vanilla version of the $.getScript\n */\nwindow.getScript = function (source, callback) {\n let script = document.createElement('script');\n script.async = 1;\n\n const scripts = document.getElementsByTagName('script');\n let prior = scripts[scripts.length - 1];\n\n script.onload = script.onreadystatechange = function (_, isAbort) {\n if (isAbort || !script.readyState || /loaded|complete/.test(script.readyState)) {\n script.onload = script.onreadystatechange = null;\n script = undefined;\n\n if (!isAbort) {\n if (callback) callback();\n }\n }\n };\n\n script.src = source;\n prior.parentNode.insertBefore(script, prior);\n};\n\n/**\n * Returns a function, that, as long as it continues to be invoked, will not\n * be triggered. The function will be called after it stops being called for\n * N milliseconds. If `immediate` is passed, trigger the function on the\n * leading edge, instead of the trailing.\n * @param func\n * @param wait\n * @param immediate\n * @returns {Function}\n */\nwindow.debounce = function(func, wait, immediate) {\n let timeout;\n return function () {\n let context = this, args = arguments;\n let later = function () {\n timeout = null;\n if (!immediate) func.apply(context, args);\n };\n let callNow = immediate && !timeout;\n clearTimeout(timeout);\n timeout = setTimeout(later, wait);\n if (callNow) func.apply(context, args);\n };\n};\n\n/*\n * Cookie helper class\n */\nwindow.Cookie = {\n set: function (name, value, days) {\n let domain, domainParts, date, expires, host;\n\n if (days) {\n date = new Date();\n date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));\n expires = \"; expires=\" + date.toGMTString();\n }\n else {\n expires = \"\";\n }\n\n host = location.host;\n if (host.split('.').length === 1) {\n // no \".\" in a domain - it's localhost or something similar\n document.cookie = name + \"=\" + value + expires + \"; path=/\";\n }\n else {\n // Remember the cookie on all sub domains.\n //\n // Start with trying to set cookie to the top domain.\n // (example: if user is on foo.com, try to set\n // cookie to domain \".com\")\n //\n // If the cookie will not be set, it means \".com\"\n // is a top level domain and we need to\n // set the cookie to \".foo.com\"\n domainParts = host.split('.');\n domainParts.shift();\n domain = '.' + domainParts.join('.');\n\n // For development purpose, remove this when moving to production\n // domain = '.komma.pro';\n\n document.cookie = name + \"=\" + value + expires + \"; path=/; domain=\" + domain;\n\n // check if cookie was successfuly set to the given domain\n // (otherwise it was a Top-Level Domain)\n if (Cookie.get(name) == null || Cookie.get(name) != value) {\n // append \".\" to current domain\n domain = '.' + host;\n document.cookie = name + \"=\" + value + expires + \"; path=/; domain=\" + domain;\n }\n }\n },\n\n get: function (name) {\n const nameEQ = name + \"=\";\n const ca = document.cookie.split(';');\n for (let i = 0; i < ca.length; i++) {\n let c = ca[i];\n while (c.charAt(0) === ' ') {\n c = c.substring(1, c.length);\n }\n\n if (c.indexOf(nameEQ) === 0) return c.substring(nameEQ.length, c.length);\n }\n return null;\n },\n\n erase: function (name) {\n Cookie.set(name, '', -1);\n }\n};\n\n/*\n * Javascript version of the number_format method of PHP\n */\nwindow.number_format = function (number, decimals, dec_point, thousands_sep) {\n // Strip all characters but numerical ones.\n number = (number + '').replace(/[^0-9+\\-Ee.]/g, '');\n let n = !isFinite(+number) ? 0 : +number,\n prec = !isFinite(+decimals) ? 0 : Math.abs(decimals),\n sep = (typeof thousands_sep === 'undefined') ? ',' : thousands_sep,\n dec = (typeof dec_point === 'undefined') ? '.' : dec_point,\n s = '',\n toFixedFix = function (n, prec) {\n var k = Math.pow(10, prec);\n return '' + Math.round(n * k) / k;\n };\n // Fix for IE parseFloat(0.55).toFixed(0) = 0;\n s = (prec ? toFixedFix(n, prec) : '' + Math.round(n)).split('.');\n if (s[0].length > 3) {\n s[0] = s[0].replace(/\\B(?=(?:\\d{3})+(?!\\d))/g, sep);\n }\n if ((s[1] || '').length < prec) {\n s[1] = s[1] || '';\n s[1] += new Array(prec - s[1].length + 1).join('0');\n }\n return s.join(dec);\n};\n\n\n/**\n * Element.closest() polyfill\n * https://developer.mozilla.org/en-US/docs/Web/API/Element/closest#Polyfill\n */\nif (!Element.prototype.closest) {\n if (!Element.prototype.matches) {\n Element.prototype.matches = Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector;\n }\n Element.prototype.closest = function (s) {\n var el = this;\n var ancestor = this;\n if (!document.documentElement.contains(el)) return null;\n do {\n if (ancestor.matches(s)) return ancestor;\n ancestor = ancestor.parentElement;\n } while (ancestor !== null);\n return null;\n };\n}\n\nwindow.Ajax = {\n\n //TODO: Can we create a prepare request function ??\n\n get: function(url, callback) {\n let xhr = new XMLHttpRequest();\n let token = document.querySelector('meta[name=\"csrf-token\"]').content;\n\n xhr.open('get', url, true);\n xhr.setRequestHeader('Content-Type', 'application/json');\n xhr.setRequestHeader('X-CSRF-TOKEN', token);\n xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\n xhr.onreadystatechange = function() {\n if (xhr.readyState === 4) {\n callback(xhr);\n }\n };\n xhr.send();\n },\n\n post: function(url, data, callback) {\n let xhr = new XMLHttpRequest();\n let token = document.querySelector('meta[name=\"csrf-token\"]').content;\n\n xhr.open('post', url, true);\n xhr.setRequestHeader('Content-Type', 'application/json');\n xhr.setRequestHeader('X-CSRF-TOKEN', token);\n xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\n xhr.onreadystatechange = function() {\n if (xhr.readyState === 4) {\n callback(xhr);\n }\n };\n xhr.send( JSON.stringify(data));\n },\n\n postFormData: function(url, data, callback) {\n let xhr = new XMLHttpRequest();\n let token = document.querySelector('meta[name=\"csrf-token\"]').content;\n\n xhr.open('post', url, true);\n xhr.setRequestHeader('X-CSRF-TOKEN', token);\n xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\n xhr.onreadystatechange = function() {\n if (xhr.readyState === 4) {\n callback(xhr);\n }\n };\n xhr.send(data);\n }\n};\n\n/**\n * Capitalize the first letter of the string\n * @param string\n * @returns {string}\n */\nwindow.capitalizeFirstLetter = function (string) {\n return string.charAt(0).toUpperCase() + string.slice(1);\n};\n\n/**\n * Convert snake case into camelcase\n *\n * @param string\n * @returns {*}\n */\nwindow.snakeToCamel = function (string){\n return string.replace(/(\\-\\w)/g, function(m){return m[1].toUpperCase();});\n};\n\n/**\n * Get the index of an element inside its parent\n */\nwindow.indexInParent= function (node) {\n const children = node.parentNode.childNodes;\n let num = 0;\n for (let i = 0; i < children.length; i++) {\n if (children[i] == node) return num;\n if (children[i].nodeType == 1) num++;\n }\n return -1;\n};\n\n/**\n * For security reasons iOS Safari only allows document.execCommand('copy') for text within a contentEditable container.\n * The workaround is to detect iOS Safari and quickly toggle contentEditable before executing document.execCommand('copy').\n * Wheb input or textarea is READONLY you can prevent the unwanted popup with copy/paste functions and the input keyboard\n * Code from: https://stackoverflow.com/a/46981847\n */\nwindow.copyToClipboard = function (el) {\n\n // resolve the element\n el = (typeof el === 'string') ? document.querySelector(el) : el;\n\n // handle iOS as a special case\n if (navigator.userAgent.match(/ipad|ipod|iphone/i)) {\n\n // save current contentEditable/readOnly status\n const editable = el.contentEditable;\n const readOnly = el.readOnly;\n\n // convert to editable with readonly to stop iOS keyboard opening\n el.contentEditable = true;\n el.readOnly = true;\n\n // create a selectable range\n var range = document.createRange();\n range.selectNodeContents(el);\n\n // select the range\n const selection = window.getSelection();\n selection.removeAllRanges();\n selection.addRange(range);\n el.setSelectionRange(0, 999999);\n\n // restore contentEditable/readOnly to original state\n el.contentEditable = editable;\n el.readOnly = readOnly;\n }\n else {\n el.select();\n }\n\n // execute copy command\n document.execCommand('copy');\n};\n\n/**\n * Get the position of the element related to the body\n *\n * @param el\n * @returns {{top: number, left: number}}\n */\nwindow.bodyOffset = function (el) {\n const rect = el.getBoundingClientRect(),\n scrollLeft = window.pageXOffset || document.documentElement.scrollLeft,\n scrollTop = window.pageYOffset || document.documentElement.scrollTop;\n return { top: rect.top + scrollTop, left: rect.left + scrollLeft }\n};","/* ==========================================================================\n Scroll handler\n - Handler the objects which are bind on scroll events or visible in viewport\n ========================================================================== */\n\nconst ScrollHandler = {\n\n // Variables for debounce and throttle effects\n time: Date.now(),\n timeout: null,\n waitThrottle: 1000,\n waitDebounce: 300,\n\n // Variables for scroll direction\n lastScrollTopPosition: 0,\n scrollDirectionDown: true,\n scrollDirectionUp: false,\n\n //Initialisation\n init: function () {\n\n // Trigger start on start up\n ScrollHandler.triggerOnInit();\n\n // Throttle scroll\n window.addEventListener('scroll', function () {\n if ((ScrollHandler.time + ScrollHandler.waitThrottle - Date.now()) < 0) {\n ScrollHandler.triggerThrottle();\n ScrollHandler.time = Date.now();\n }\n });\n\n // Smooth scroll\n window.addEventListener('scroll', function () {\n ScrollHandler.triggerSmooth();\n });\n\n // Debounce scroll\n window.addEventListener('scroll', function () {\n if(isset(ScrollHandler.timeout)) clearTimeout(ScrollHandler.timeout);\n ScrollHandler.timeout = setTimeout(ScrollHandler.triggerDebounce, ScrollHandler.waitDebounce);\n });\n },\n\n // Trigger on start up\n triggerOnInit: function () {\n ScrollHandler.triggerElementInViewportAnimation();\n },\n\n // Trigger scroll functions with throttle (preferred)\n triggerThrottle: function () {\n // console.log('Throttled scroll');\n ScrollHandler.triggerElementInViewportAnimation();\n },\n\n // Trigger scroll on debounce\n triggerDebounce: function () {\n // console.log('Debounce scroll');\n },\n\n // Trigger scroll on the flight\n triggerSmooth: function () {\n // console.log('Smooth scroll');\n ScrollHandler.detectScrollDirection();\n ScrollHandler.toggleStickyHeader();\n },\n\n // Detect if part of a given element is visible in the viewport\n // El must be a node element\n detectIfElementIsPartlyInViewport: function(el)\n {\n if(isset(el)){\n\n const rect = el.getBoundingClientRect();\n // DOMRect { x: 8, y: 8, width: 100, height: 100, top: 8, right: 108, bottom: 108, left: 8 }\n const windowHeight = (window.innerHeight || document.documentElement.clientHeight);\n const windowWidth = (window.innerWidth || document.documentElement.clientWidth);\n\n const verticalInView = (rect.top <= (windowHeight)) && ((rect.top + rect.height) >= 0);\n const horizontalInView = (rect.left <= windowWidth) && ((rect.left + rect.width) >= 0);\n\n return (verticalInView && horizontalInView);\n }\n },\n\n // Detect if a given element is fully visible in the viewport\n // El must be a node element\n detectIfElementIsFullyInViewport: function(el)\n {\n if(isset(el)){\n const rect = el.getBoundingClientRect();\n\n return (\n rect.top >= 0 &&\n rect.bottom <= window.innerHeight\n );\n }\n },\n\n detectScrollDirection: function () {\n const scrollTopPosition = window.pageYOffset || document.documentElement.scrollTop; // Credits: \"https://github.com/qeremy/so/blob/master/so.dom.js#L426\"\n if (scrollTopPosition >= ScrollHandler.lastScrollTopPosition){\n ScrollHandler.scrollDirectionDown = true;\n ScrollHandler.scrollDirectionUp = false;\n } else {\n ScrollHandler.scrollDirectionDown = false;\n ScrollHandler.scrollDirectionUp = true;\n }\n ScrollHandler.lastScrollTopPosition = scrollTopPosition;\n },\n\n // Trigger animation on elements that have 'element-in-viewport' and that are in the viewport\n // These animation can only be triggered once, if you want more then that you should write an specific function for this\n triggerElementInViewportAnimation: function () {\n const elements = document.querySelectorAll('.element-in-viewport');\n const elementsLength = elements.length;\n\n for(let e = 0; e < elementsLength; e++){\n\n const element = elements[e];\n if(ScrollHandler.detectIfElementIsPartlyInViewport(element)){\n element.classList.remove('element-in-viewport');\n }\n }\n\n },\n\n // ------------------------------ CUSTOM SCROLL HANDLERS ------------------------------------\n\n // Hide or show sticky navigation when header isn't visible\n toggleStickyHeader: function () {\n const stickyHeader = document.querySelector('.js-sticky-header');\n if(!stickyHeader) return;\n const visibleStickyHeaderClass = 'is-sticky-header-visible';\n const subnavList = document.querySelectorAll('.js-subnav');\n var subNavIsVisible = false;\n stickyHeader.hidden = false;\n\n for (let i = 0; i < subnavList.length; i++) {\n if (window.getComputedStyle(subnavList[i], null).visibility == \"visible\") {\n return subNavIsVisible = true;\n }\n }\n\n if(isset(stickyHeader) && !subNavIsVisible){\n // Hide when scrolling DOWN (OR within offset)\n if(ScrollHandler.scrollDirectionDown || ScrollHandler.lastScrollTopPosition < 110){\n document.body.classList.remove(visibleStickyHeaderClass);\n }\n // Show when scrolling UP and outside of offset\n else {\n document.body.classList.add(visibleStickyHeaderClass);\n }\n }\n },\n\n};\n\nScrollHandler.init();","/* ==========================================================================\n Navigation handler\n - Handles the showing and hiding of the overlay-menu component which has the proper classes.\n ========================================================================== */\n\nconst ToggleHandler = {\n\n init: function () {\n const toggleTriggers = document.querySelectorAll('.js-toggle-trigger');\n const toggleTriggersCount = toggleTriggers.length;\n\n if(isset(toggleTriggers) && toggleTriggersCount > 0){\n for(let i = 0; i < toggleTriggersCount; i++){\n const toggleTrigger = toggleTriggers[i];\n ToggleHandler.initToggle(toggleTrigger);\n }\n }\n },\n\n initToggle: function (toggleTrigger) {\n toggleTrigger.addEventListener('click', ToggleHandler.adjustToggle, false);\n },\n\n adjustToggle: function (event) {\n\n const id = event.currentTarget.getAttribute('data-toggle-id');\n const targetArray = Array.from(document.querySelectorAll('.js-toggle-target'));\n\n const target = targetArray.find(function(target) {\n return target.getAttribute('data-toggle-id') === id;\n });\n\n // Bail if toggle doesn't exist\n if (!target) return;\n\n // If the toggle is already active, collapse it and quit\n target.classList.toggle('u-hidden');\n event.currentTarget.classList.toggle('is-toggled');\n }\n};\n\nexport { ToggleHandler };\n\nToggleHandler.init();","import {reactive} from \"vue\";\n\nconst translations = reactive({})\n\nexport default function useTranslations() {\n\n /**\n * Translate the given key.\n */\n const trans = (key, replace = undefined, returnKey = true) => {\n\n let translation = null;\n const keys = key.split('.');\n\n let resolvedKeyCounter = 0;\n while (resolvedKeyCounter < keys.length) {\n\n // Break if first key isn't resolved\n if(resolvedKeyCounter !== 0 && translation === null) break;\n\n if(resolvedKeyCounter === 0) translation = translations[keys[resolvedKeyCounter]] || null\n else if (translation != null) translation = translation[keys[resolvedKeyCounter]] || null;\n\n resolvedKeyCounter++;\n }\n\n if (translation === null) {\n if(returnKey) {\n console.warn('No translation for ' + key + '. Try clearing your session storage.');\n return key;\n }\n else return '';\n }\n\n // If we don't need to replace placeholders, return the translation\n if(replace === undefined) return translation;\n\n const replaceKeys = Object.keys(replace);\n replaceKeys.forEach((key) => {\n translation = translation.replace('%' + key, replace[key]);\n });\n\n return translation\n }\n\n return {\n trans\n }\n}\n\nexport function appendTranslations(newTranslations) {\n Object.assign(translations, newTranslations);\n}\n","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","import * as runtimeDom from '@vue/runtime-dom';\nimport { initCustomFormatter, warn, registerRuntimeCompiler } from '@vue/runtime-dom';\nexport * from '@vue/runtime-dom';\nimport { compile } from '@vue/compiler-dom';\nimport { isString, NOOP, extend, generateCodeFrame } from '@vue/shared';\n\nfunction initDev() {\r\n {\r\n initCustomFormatter();\r\n }\r\n}\n\n// This entry is the \"full-build\" that includes both the runtime\r\nif ((process.env.NODE_ENV !== 'production')) {\r\n initDev();\r\n}\r\nconst compileCache = Object.create(null);\r\nfunction compileToFunction(template, options) {\r\n if (!isString(template)) {\r\n if (template.nodeType) {\r\n template = template.innerHTML;\r\n }\r\n else {\r\n (process.env.NODE_ENV !== 'production') && warn(`invalid template option: `, template);\r\n return NOOP;\r\n }\r\n }\r\n const key = template;\r\n const cached = compileCache[key];\r\n if (cached) {\r\n return cached;\r\n }\r\n if (template[0] === '#') {\r\n const el = document.querySelector(template);\r\n if ((process.env.NODE_ENV !== 'production') && !el) {\r\n warn(`Template element not found or is empty: ${template}`);\r\n }\r\n // __UNSAFE__\r\n // Reason: potential execution of JS expressions in in-DOM template.\r\n // The user must make sure the in-DOM template is trusted. If it's rendered\r\n // by the server, the template should not contain any user data.\r\n template = el ? el.innerHTML : ``;\r\n }\r\n const { code } = compile(template, extend({\r\n hoistStatic: true,\r\n onError: (process.env.NODE_ENV !== 'production') ? onError : undefined,\r\n onWarn: (process.env.NODE_ENV !== 'production') ? e => onError(e, true) : NOOP\r\n }, options));\r\n function onError(err, asWarning = false) {\r\n const message = asWarning\r\n ? err.message\r\n : `Template compilation error: ${err.message}`;\r\n const codeFrame = err.loc &&\r\n generateCodeFrame(template, err.loc.start.offset, err.loc.end.offset);\r\n warn(codeFrame ? `${message}\\n${codeFrame}` : message);\r\n }\r\n // The wildcard import results in a huge object with every export\r\n // with keys that cannot be mangled, and can be quite heavy size-wise.\r\n // In the global build we know `Vue` is available globally so we can avoid\r\n // the wildcard object.\r\n const render = (new Function('Vue', code)(runtimeDom));\r\n render._rc = true;\r\n return (compileCache[key] = render);\r\n}\r\nregisterRuntimeCompiler(compileToFunction);\n\nexport { compileToFunction as compile };\n"],"names":["Number","isInteger","value","isFinite","Math","floor","factory","finallyConstructor","callback","constructor","this","then","resolve","reason","reject","setTimeoutFunc","setTimeout","noop","Promise","fn","TypeError","_state","_handled","_value","undefined","_deferreds","doResolve","handle","self","deferred","_immediateFn","cb","onFulfilled","onRejected","ret","e","promise","push","newValue","finale","thisArg","apply","arguments","length","_unhandledRejectionFn","i","len","Handler","done","ex","prototype","prom","all","arr","args","Array","slice","call","remaining","res","val","race","values","setImmediate","err","console","warn","globalNS","window","global","Error","exports","define","Element","CharacterData","DocumentType","forEach","item","hasOwnProperty","Object","defineProperty","configurable","enumerable","writable","parentNode","removeChild","CheckoutDataController","checkoutDataForm","document","querySelector","isset","differentEmailAddressForInvoiceCheckbox","clientTypeRadioButtons","getElementsByClassName","toggleDifferentEmailAddressField","checked","controlListeners","bind","triggerToggleOtherEmailAddressForInvoice","clientTypeChanged","changeClientType","enabled","removeEventListener","clientTypeRadioButtonsLength","index","clientTypeRadioButton","addEventListener","event","input","currentTarget","hidden","changedRadioButton","clientTypeId","Locations","parentElement","targetLocationId","target","dataset","locationId","hoverLocationMarker","markers","filter","marker","classList","add","remove","hoverLocationListItem","listItems","clickLocationId","setActiveCard","from","querySelectorAll","cards","cardsWrapper","handleListItemMouseEnter","handleListItemMouseLeave","handleClick","handleMarkerMouseEnter","handleMarkerMouseLeave","randomActiveId","random","cardId","card","correspondingMarker","correspondingListItem","KAL","dataPrefix","startStateClass","endStateClass","elements","options","root","rootMargin","threshold","elementOptions","once","intersectionObserver","init","IntersectionObserver","createIntersectionObserver","onIntersection","element","observe","entries","observer","entry","intersectionRatio","triggerAnimation","getElementOption","unobserve","reverseAnimation","clearIntersectionObserver","disconnect","attribute","option","getAttribute","axios","defaults","headers","common","require","shoppingCartEl","ShoppingCart","activitiesEl","ActivitySwiper","reviewSliderEl","ReviewSwiper","checkoutSummaryFormEl","CheckoutSummary","activeProduct","ref","sessionDate","sessionLocation","planModal","getElementById","planButtons","location","date","appendTranslations","JSON","parse","translations","PlanModal","button","clickProductId","parseInt","productId","createApp","components","data","mount","CategoryHandler","categoryToggleClass","categoryGroupClass","toggleList","toggleListCount","toggle","initToggle","activateToggle","itemId","allToggles","allGroups","preventDefault","ChocolateFactory","bannedVisitor","enter","chocolateFactories","amountOfChocolateFactories","ChocolateBar","_flashTicket","chocolateBar","goldenTicket","enjoyTheTour","log","chocolateFactory","tourGroup","oompaLoompas","amountOfOompaLoompas","tourGroupSize","visitor","visitorName","_isVisitorBanned","_getArrangement","_finishTour","indexOf","nodeName","type","group","_addWillieWonka","baseRoute","gate","Ajax","post","HttpRequest","response","status","_thanksForVisiting","redirectUrl","_giveFeedbackToMembers","errors","_unknownGapInFactory","_willie","feedbackArea","innerHTML","_clearPreviousMarkedJackets","keys","jacket","visitorFeedbackArea","visitorNode","_grabVisitorJacket","visitorFeedback","visitorFeedbackAmount","visitorFeedbackLine","currentFeedbackArea","capitalizeFirstLetter","markedJackets","markedJacketsAmount","currentLayer","safetyBreak","contains","tagName","nextStop","CookieHandler","cookieBar","cookieOverlay","cookieMessage","cookieSwitch","cookieFadeOutAnimationDuration","acceptTracking","initCookieBar","initCookieOverlay","checkForCookieSettings","initCookieSwitch","closeButton","closeCookieMessage","openCookieSettingsButton","openCookieSettings","toggleTrackingInput","toggleTrackingSetting","acceptButton","setCookieSettings","saveButton","Cookie","get","body","set","erase","reload","CustomerLogoSliderHandler","customerLogoSliderArea","customerLogoSlides","activeLogo","autoPlay","autoPlayInterval","replaceSources","hasSwipeEvents","addEvents","addSwipeEvents","setInterval","slideToNext","nextLogo","updateSlider","next","previous","previousLogo","swipeGestures","Hammer","on","getLogoIds","customerLogosLength","customerLogoIds","customerLogoId","ids","finishLoading","lazyLoadInstance","update","resetLogosOrder","setAttribute","previousLocator","_calcPreviousPositions","previouser","_calcNextPositions","nexter","nexterLocator","slide","$amount","_loadCountryBasedLogos","request","customerLogos","customerLogosHtml","_prepareCustomerLogoHtml","alreadyRenderLogo","id","customerLogoContainer","currentInnerHtml","customerLogo","url","image","flatpickr","Dutch","dateFormat","nextArrow","prevArrow","disableMobile","DatePickerHandler","datePickers","datePickerElements","makeFlatPickr","datePickerElement","selectedDate","minDate","daysOfThWeekClosed","defaultDate","getDay","LocationMapHandler","map","key","mapMarkers","m","mapMarker","enableBelongTooltip","disableBelongTooltip","MapsHandler","maps","hasAttribute","lat","parseFloat","lng","node","styles","setCustomStyling","google","getScript","drawMaps","googleMap","Map","zoom","center","disableDefaultUI","Marker","position","bodyScrollLock","OverlayMenuHandler","overlayMenuTriggerList","overlayMenuTriggerListCount","overlayMenuTrigger","initOverlayMenu","toggleOverlayMenu","overlayMenuNav","enableBodyScroll","elem","tabIndex","disableBodyScroll","projectors","projectorContainers","projectorContainersLength","projectorId","projectorSetting","ProjectorSetting","sliderId","slideQuery","navigationButtons","dots","autoSlide","sliderInterval","Projector","prepareParameters","settingsObject","definedPreviousNext","captions","setProjectorId","string","setDefinedPreviousNext","boolean","setAutoSlide","setSliderInterval","integer","setSlideQuery","setNavigationButtons","setDots","setCaptions","getProjectorId","getDefinedPreviousNext","getAutoSlide","getSliderInterval","getSlideQuery","getNavigationButtons","getDots","getCaptions","fill","settingsObjectKeys","settingsObjectLength","settings","sliderObject","activeSlideId","previousSlideId","nextSlideId","availableSlides","slides","autoSlideInterval","setPreviousAndNextSlide","setSlide","resetAutoSlide","nextSlide","previousSlide","navigationButtonsLength","clickNavigationButton","dotsLength","clickDot","clearInterval","slidesLength","slideOrder","setActiveDot","setActiveCaption","navButton","clickedDot","dot","dotOrder","captionsLength","caption","captionOrder","ScrollToHandler","offset","duration","start","change","currentTime","allowAnimation","scrollToAnimation","easing","anchorLinks","anchorLinksAmount","prepareScrollTo","elementId","substr","scrollToElementPosition","getBoundingClientRect","documentElement","max","scrollTop","pageYOffset","top","startTime","performance","now","Date","getTime","requestAnimationFrame","animateScroll","abortScrollAnimation","timestamp","progress","min","EasingFunctions","newScrollTop","cancelAnimationFrame","SearchFormHandler","form","searchLocation","formFields","submit","ToggleHandler","toggleClass","toggleSwitchClass","toggleContentClass","toggleItem","j","children","style","pointerEvents","YoutubeHandler","youtubeClass","players","youtubePlayers","youtubePlayersAmount","youtubePlayer","youtubeElement","link","disableKB","controls","loop","initYoutube","YT","Player","onYouTubePlayerAPIReady","loadPlayers","player","height","width","videoId","host","playerVars","modestbranding","rel","autoplay","disablekb","events","onReady","onStateChange","playerContainerId","getIframe","videoPlayer","mute","playVideo","setPlaybackQuality","PlayerState","ENDED","BrowserHandler","userAgent","browserInfo","navigator","getBrowserInfo","handleIE","handleSafari","msie","ielt11","ie11","match","version","substring","name","getElementsByTagName","tem","ua","M","test","exec","appName","appVersion","splice","obj","linear","t","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","source","script","createElement","async","scripts","prior","onload","onreadystatechange","_","isAbort","readyState","src","insertBefore","debounce","func","wait","immediate","timeout","context","later","callNow","clearTimeout","days","domain","domainParts","expires","setTime","toGMTString","split","cookie","shift","join","nameEQ","ca","c","charAt","number_format","number","decimals","dec_point","thousands_sep","replace","n","prec","abs","sep","dec","s","k","pow","round","toFixedFix","closest","matches","msMatchesSelector","webkitMatchesSelector","ancestor","xhr","XMLHttpRequest","token","content","open","setRequestHeader","send","stringify","postFormData","toUpperCase","snakeToCamel","indexInParent","childNodes","num","nodeType","copyToClipboard","el","editable","contentEditable","readOnly","range","createRange","selectNodeContents","selection","getSelection","removeAllRanges","addRange","setSelectionRange","select","execCommand","bodyOffset","rect","scrollLeft","pageXOffset","left","ScrollHandler","time","waitThrottle","waitDebounce","lastScrollTopPosition","scrollDirectionDown","scrollDirectionUp","triggerOnInit","triggerThrottle","triggerSmooth","triggerDebounce","triggerElementInViewportAnimation","detectScrollDirection","toggleStickyHeader","detectIfElementIsPartlyInViewport","windowHeight","innerHeight","clientHeight","windowWidth","innerWidth","clientWidth","verticalInView","horizontalInView","detectIfElementIsFullyInViewport","bottom","scrollTopPosition","elementsLength","stickyHeader","visibleStickyHeaderClass","subnavList","subNavIsVisible","getComputedStyle","visibility","toggleTriggers","toggleTriggersCount","toggleTrigger","adjustToggle","find","reactive","useTranslations","trans","returnKey","translation","resolvedKeyCounter","replaceKeys","newTranslations","assign","cachedSetTimeout","cachedClearTimeout","process","module","defaultSetTimout","defaultClearTimeout","runTimeout","fun","currentQueue","queue","draining","queueIndex","cleanUpNextTick","concat","drainQueue","run","runClearTimeout","Item","array","nextTick","title","browser","env","argv","versions","addListener","off","removeListener","removeAllListeners","emit","prependListener","prependOnceListener","listeners","binding","cwd","chdir","dir","umask","compileCache","create","template","cached","code","hoistStatic","onError","onWarn","render","Function","_rc"],"sourceRoot":""}