{"version":3,"file":"js/43264-e9ca085e3e484aadb8eb.js","mappings":"0JAKA,IAAIA,GAAqB,EAEzB,MAKMC,EAAgB,WACfD,IACHA,GAAqB,EACrB,iFAKJ,GAGEE,EAAAA,EAAAA,GAAG,CACDC,UAAW,QACXC,SAAU,6BACVC,OAAAA,CAAQC,GACNA,EAAEC,iBACF,MAAMC,EAAOF,EAAEG,OAAOC,QAAQ,8BAC9BT,KACAU,EAAAA,EAAAA,KAEA,4FAIGC,MAAKC,GAAWA,EAAQC,eAAeC,EAAEP,MACzCQ,OAAM,QACX,EACAC,MAAM,KAIRf,EAAAA,EAAAA,GAAG,CACDC,UAAW,QACXC,SAAU,oBACVC,OAAAA,CAAQC,GACNA,EAAEC,iBACF,MAAMC,EAAOF,EAAEG,OACfR,IACA,2DAIGW,MAAKC,GAAWA,EAAQK,iBAAiBH,EAAEP,MAC3CQ,OAAM,QACX,EACAC,MAAM,IAIJE,GAAGC,gBAAgBC,YACrBC,EAAAA,EAAAA,O,0DC5DyB,WAC3B,MAAMC,EAAU,GACVC,GAAoCC,EAAAA,EAAAA,IAAW,4BAGrD,GACED,GACqC,IAArCA,GACqC,cAArCA,EAEAE,UAAYX,EAAEY,OAAO,CAAC,EAAGD,UAAW,CAAEE,yBAA0BJ,QAC3D,CACL,MAAMK,EAAgCC,SAASC,cAAc,QAAQC,QAAQC,uBAC7EP,UAAYX,EAAEY,OAAO,CAAC,EAAGD,UAAW,CAAEE,yBAA0BC,IAEhEN,EAAQW,KAAK,CAAEC,KAAM,2BAA4BC,MAAOP,GAC1D,CAGA,MAAMQ,EAA+BP,SAASC,cAAc,QAAQC,QAAQM,sBAC5EZ,UAAYX,EAAEY,OAAO,CAAC,EAAGD,UAAW,CAAEa,wBAAyBF,IAE/Dd,EAAQW,KAAK,CAAEC,KAAM,0BAA2BC,MAAOC,KACvDG,EAAAA,EAAAA,IAAWjB,EACb,CAEAkB,E,iHCvBAC,IAAAA,OAAaC,KAEN,MACDC,EAAqB,IAAIC,MADK,kBAGpC,IAAIC,EAA4B,KAC5BC,EAAkB,KACtB,MAAMC,EAAYlB,SAASC,cAAc,uBACzC,IAAIkB,GAAc,EACdC,EAAY,GAMhB,SAASC,IACP,IACE,MAAMC,EAAM,IAAIC,KAGhB,OAFAC,aAAaC,QAAQH,EAAKA,GAC1BE,aAAaE,WAAWJ,IACjB,CACT,CAAE,MAAOK,GACP,OAAO,CACT,CACF,CAEA,SAASC,EAASC,GACZR,IACFG,aAAaC,QAAQ,mBAAoBK,KAAKC,UAAUF,IAExDb,EAA4Bc,KAAKC,UAAUF,EAE/C,CASA,SAASG,IAGP,GAFoBC,OAAO5C,GAAG6C,sBAAsBC,YAGlD,OAAO,EAET,MAAMC,EAAUN,KAAKO,MAAMb,aAAac,QAAQ,qBAC1CC,EAAcH,EAAUN,KAAKO,MAAMb,aAAac,QAAQ,qBAAqBE,aAAe,CAAC,EAGnG,QAFmBJ,GAAoC,SAA1BG,EAAYE,SAG3C,CAEA,SAASC,IACHrB,KACFG,aAAaE,WAAW,oBAExBrC,GAAGsD,cAAcC,cAAc,CAAC,oBAChC5C,SAAS6C,cAAc/B,IAEvBE,EAA4B,IAEhC,CACA,SAAS8B,EAAUC,GACjB,MAAMC,EAAQ/D,EAAE,yBACVgE,EAAShE,EAAE,qBAEZ+D,EAAME,QAAWD,EAAOC,eAChBC,IAATJ,EACFC,EAAMI,KAAK,OAAQJ,EAAMD,KAAK,oBACWI,IAAhCJ,EAAKP,aAAaC,WAE3BO,EAAMpE,QAAQ,MAAMyE,SAAS,+CAC7BL,EAAMI,KAAK,OAAQ,KACnBJ,EAAMM,WAAW,gBAGjBN,EAAMI,KAAK,OAAQJ,EAAMD,KAAK,eAElC,CAEA,SAASQ,IACPtE,EAAEuE,KAAKpC,GAAW,SAAUqC,EAAGC,GAC7BA,GACF,IACAtC,EAAY,EACd,CASA,SAASuC,EAAatD,EAAMuD,EAAMC,EAAUC,GAC1C,GAAIF,EAAKV,QAAUU,EAAKb,KAAKc,IAAqC,KAAxBD,EAAKb,KAAKc,GAAkB,CAChEC,IACFzD,EAAOA,EAAK0D,MAAM,KAAK,IAEzB,MAAMC,EAAUJ,EAAKb,KAAKc,GAAUI,QAAQ,WAAY5D,GACxDuD,EAAKM,KAAKF,EACZ,CACF,CA2BA,SAASG,EAAaC,EAAW/D,GAC/B,MAAM0C,EAAOjB,KAAKO,MAAMb,aAAac,QAAQ,qBACvCG,EAAqB,OAATM,EAAgBA,EAAKP,aAAaC,UAAY,KAEhEzC,SAASqE,iBAAiB,iCAAiCC,SAAQC,IACjE,MAAMC,EAAevF,EAAEsF,GACnBH,GACFI,EAAa5F,QAAQ,eAAeyE,SAAS,0BAA0BoB,YAAY,0BACnFD,EAAa5F,QAAQ,eAAesF,KAAK,8CAA8CE,SAEnF/D,GACFmE,EAAaN,KAAK7D,EAAKqE,OAAO,IAC9BF,EAAa5F,QAAQ,eAAeyE,SAAS,aAAasB,KAAK,sBAAsBF,YAAY,gBAEjGD,EAAa5F,QAAQ,eAAeyE,SAAS,gBAE/CmB,EAAa5F,QAAQ,eAAeyE,SAAS,oBAEtB,WAArBhE,GAAGuF,eACDnC,IACFxD,EAAE,4CAA4C4F,OAC9C5F,EAAE,8CAA8C4F,OAChD5F,EAAE,uCAAuC4F,QAEvCxF,GAAGC,gBAAgBwF,cACrB7F,EAAE,4CAA4C4F,QAElB,WAArBxF,GAAGuF,cACZ3F,EAAE,0CAA0C4F,OAE5C5F,EAAE,sCAAsC4F,MAC1C,GAEJ,CAWA,SAASE,EAAcC,EAAMpB,QACdT,IAAT6B,EACEA,EAAK9B,QACPU,EAAKR,KAAK,OAAQ4B,GAAMC,OAG1BrB,EAAKiB,MAET,CAsBA,SAASK,EAAqBnC,GAC5B,GAAa,OAATA,EAAe,CACjB,MAAMe,EAAWf,EAAKP,aAAanC,MAAQpB,EAAEkG,OAAO,wBAC9C9E,EACJ0C,EAAKP,aAAanC,MAClBpB,EAAEkG,OAAO,yBACTlG,EAAE,oCAAoCmE,KAAK,kBACvCgC,EAAkBrC,EAAKP,aAAa4C,gBACpCC,EAAiBtC,EAAKP,aAAa6C,eACnCC,EAAQvC,EAAKP,aAAa8C,MAC1BC,EAtGV,SAAwBD,GACtB,IAAIE,EAAa,GACjB,OAAQF,GACN,IAAK,IACHE,EAAa,OACb,MACF,IAAK,IACHA,EAAa,QACb,MACF,IAAK,IACHA,EAAa,MACb,MACF,IAAK,IACHA,EAAa,WAEjB,OAAOA,CACT,CAsFgCC,CAAe1C,EAAKP,aAAa8C,OAE7D,QAAkBnC,KADAJ,EAAKP,aAAaC,WAAaxD,EAAEkG,OAAO,yBAC7B,EA/GjC,SAAuBG,EAAO1B,EAAMC,GAClC,GAAID,EAAKV,QAAUU,EAAKb,KAAKc,IAAqC,KAAxBD,EAAKb,KAAKc,GAAkB,CACpE,MAAMG,EAAUJ,EAAKb,KAAKc,GAAUI,QAAQ,wBAAyBqB,GACrE1B,EAAKM,KAAKF,EACZ,CACF,CA2GM0B,CAAcH,EAAqBtG,EAAE,sBAAuB,qBAC5D,IAAI0G,EAA0B,0BAEV,qBAATtF,IACTsF,EAA0B,QAE5BhC,EAAatD,EAAMpB,EAAE,oBAAqB0G,EAAyB7B,GACnEH,EAAatD,EAAMpB,EAAE,mBAAoB,iBAAkB6E,GAC3DH,EAAatD,EAAMpB,EAAE,+BAAgC,OAAQ6E,GAC7DH,EAAatD,EAAMpB,EAAE,oCAAqC,OAAQ6E,GAClEK,EAAapB,EAAKP,aAAa4B,UAAWN,GA9DhD,SAAyBzD,GACnBA,IACYpB,EAAE,uBAAuB0F,KAAK,SACtCiB,KAAKvF,GACXpB,EAAE,8BAA8BgG,OAChChG,EAAE,8BAA8B4F,OAEpC,CAwDMgB,CAAgBxF,GAChBpB,EAAE,+BAA+BwF,YAAY,oBAC7CxF,EAAE,uBAAuB4F,MAC3B,MACE5F,EAAE,+BAA+BoE,SAAS,oBAG5C0B,EAAcK,EAAiBnG,EAAE,0BACjC8F,EAAcM,EAAgBpG,EAAE,yBAClBkE,IAAVmC,GAAuBrG,EAAEkG,OAAO,qBAAuB,QAAQG,MAEjEQ,EAAAA,EAAAA,IAAU,kBAAmB,QAAQR,KAvD3C,SAAoBvC,GAClB,MAAMgD,EAAe9G,EAAE,gBAAgB0F,KAAK,cAGxCoB,GACW,OAAThD,QAA4CI,IAA3BJ,EAAKP,aAAanC,MACrC0F,EAAatB,YAAY,SAG/B,CAgDIuB,CAAWjD,GA7Cf,WACE,GAAIf,KAAkB/C,EAAE,kBAAkBiE,OAAQ,CAChD,MAAM+C,EAAahH,EAAE,kBAAkB0F,KAAK,sBAC5CsB,EAAW7C,KAAK,OAAQ6C,EAAWlD,KAAK,SACxCkD,EAAW3C,WAAW,cACxB,CACF,CAwCI4C,EACF,CACF,CAoDA,SAASC,IACP,MAAMC,EAAe,IAAI7E,KACrBF,IACFG,aAAaC,QAAQ,kBAAmB2E,GAExCnF,EAAkBmF,CAEtB,CAuBA,SAASC,EAAIC,EAAUC,QACepD,IAAhClE,EAAEkG,OAAO,qBACXzC,KACAoD,EAAAA,EAAAA,IAAU,mBAAmB,GAAQ,SAEH3C,IAAhClE,EAAEkG,OAAO,qBAzBT9D,IACFG,aAAaE,WAAW,mBAExBT,EAAkB,MAwBlB6E,EAAAA,EAAAA,IAAU,mBAAmB,GAAQ,SAEF3C,IAAjClE,EAAEkG,OAAO,oBACsC,OAA7C3D,aAAac,QAAQ,oBACvBrD,EAAEuH,KAAK,CACLC,SAAU,OACVC,KAAM,MACNC,IAAK,+BAEJC,SAAQ,SAAU7D,GACjBnB,EAASmB,GACTuD,EAASvD,GACgB,oBAAdwD,GAA0BA,GACvC,IACCM,OAAM,SAAU9D,GAAO,KAE1BuD,EAAS9E,aAAac,QAAQ,qBACL,oBAAdiE,GAA0BA,MAGvC7D,IACAI,IACAoC,EAAqB,CAAE1C,aAAc,YAAasE,UAAW,cACpC,oBAAdP,GAA0BA,IAEzC,CAEA,SAASQ,IACP,MAAM3E,EAAUN,KAAKO,MAAMb,aAAac,QAAQ,qBAC1CC,EAAcH,EAAUN,KAAKO,MAAMb,aAAac,QAAQ,qBAAqBE,aAAe,CAAC,EACnG,OAAOJ,GAAWG,GAAeA,EAAY+C,OAAS/C,EAAY+C,MAAQ,CAC5E,CAmEArD,OAAO5C,GAAG2H,kBAAoB,CAC5BC,UAjCF,SAAmBX,QACAnD,IAAbmD,GACFlF,EAAUhB,KAAKkG,GAGZnF,EAuBHoC,IAtBA8C,GACE,SAAUtD,GACY,kBAATA,IACTA,EAAOjB,KAAKO,MAAMU,SAEPI,IAATJ,IA5CZ,SAAkCA,GAChC,IAAIuC,EAAQ,EACZ,IACEA,EAAQvC,EAAKP,aAAa8C,KAC5B,CAAE,MAAO3D,GACPuF,QAAQC,IAAI,iCACd,CACA,MAAMC,EAAanI,EAAE,QAAQ8D,KAAK,0BAGlC,MACwB,qBAAfqE,GACQ,IAAfA,GACU,IAAV9B,GACiB,qBAAVA,GACPA,EAAM+B,aAAeD,EAAWC,UAEpC,CA4BeC,CAAyBvE,IA1BxC,WACE,IAAI4D,EAAM1E,OAAOsF,SAASC,KAC1B,MAAMC,EAAc,SAASlG,KAAKmG,SAASnG,KAAKmG,QACjCf,EAAI5C,MAAM,KACdb,OAAS,EAClByD,GAAO,IAEPA,GAAO,KAEuC,IAA5C1E,OAAOsF,SAASC,KAAKG,QAAQ,WAC/B1F,OAAOsF,SAASK,OAAOjB,EAAMc,EAEjC,CAeYI,GAEF3C,EAAqBnC,GArG/B,SAAwBuD,GACtB,MAAMF,EAAe,IAAI7E,KACzBN,EAAkBO,aAAac,QAAQ,oBAEf,OAApBrB,GAGOmF,EAAexF,IAAM,IAAIW,KAAKN,IAAkB6G,IAAI,IAAK,WAFlExB,IACAH,IAKJ,CA2FU4B,EAAe,YAvUzB,SAAsBhF,QAEFI,IADAJ,EAAKP,aAAaC,WAElCvB,EAAU8G,UAAUF,IAAI,kBAE5B,CAmUYG,CAAalF,EACf,IACAD,EAAUC,IAEZ5B,GAAc,CAChB,IACA,WACEoC,GACF,GAKN,EAIEb,YACAwF,QAjZF,WACE,OAAI7G,IACKS,KAAKO,MAAMb,aAAac,QAAQ,qBAElCR,KAAKO,MA1BLrB,EA2BT,EA6YEY,WACAI,eACA+E,eACA5C,eACAgE,MAjMF,SAAeC,EAAK9H,GAClBrB,EAAEuH,KAAK,CACLC,SAAU,OACVC,KAAM,OACNC,IAAK,mCACL5D,KAAM,CACJqF,MACA9H,UAGN,EAwLE+H,UAtLF,SAAmBC,EAAMhC,GACvBrH,EAAEuH,KAAK,CACLC,SAAU,OACVC,KAAM,OACNC,IAAK,mCACL5D,KAAM,CACJuF,OACAC,iBAAiB,KAGlB3B,SAAQ,SAAU7D,QACAI,IAAbmD,GACFA,EAASvD,EAEb,IACC8D,OAAM,SAAU9D,GACfmE,QAAQC,IAAIpE,GAEZ,IAAIyF,EAAiB,KACrB,IACEA,EAAiB1G,KAAKO,MAAM,GAAGU,EAAK0F,iBACtC,CAAE,MAAOjK,GACP,IACEgK,EAAiB1G,KAAKO,MAAM,GAAGU,EAAK0F,mBACtC,CAAE,MAAOjK,GACP,IACEgK,EAAiB1G,KAAKO,MAAM,GAAGU,EAAK0F,oBACtC,CAAE,MAAOjK,GAAI,CACf,CACAgK,EAAiB,IACnB,MAEiBrF,IAAbmD,GACFA,EAASkC,EAEb,GACJ,GAqJAxI,SAAS0I,iBAAiB,oBAAoB,KAC5CrJ,GAAG2H,kBAAkBC,WAAW,G,+IC5blCrG,IAAAA,OAAa+H,KACb/H,IAAAA,OAAaC,KAGb,IAAI+H,EAAmB,KACvB,MAAMC,EAAe,GAUrB,IAAIC,GAAqC,EACrCC,EAA2B,GAE/B,SAAS1C,EAAIC,GAA4B,IAAlB0C,EAAWC,UAAA/F,OAAA,QAAAC,IAAA8F,UAAA,GAAAA,UAAA,GAAG,GACnC,MAAMC,EAAYjK,EAAE,QAAQmE,KAAK,kBAC3BuD,EAAM,IAAGwC,EAAAA,EAAAA,2CAAiDN,eAA0BK,IAG1F,GAAIJ,EAEF,YADAC,EAAyB3I,KAAKkG,GAIhC,IAAI8C,EAAW,EAqCf,MAAMC,EAASnB,IAEXmB,EACF/C,EAAS+C,IAIXP,GAAqC,EAzCrC,SAASQ,IAEHF,GAAYJ,EACdF,GAAqC,EAKvCS,MAAM5C,GACH7H,MAAK0K,IAEJ,IAAKA,EAASC,GACZ,MAAM,IAAIC,MAAM,+BAGlB,OAAOF,EAASG,MAAM,IAEvB7K,MAAKiE,IAEJ+F,GAAqC,EA8B7C,SAAkBjH,GAChB,MAAM+H,EAAI/H,EACV+H,EAAEC,cAAgBjJ,MAAQ+H,MAAMmB,UAChCF,EAAEG,QAAUlB,EACRmB,IACFC,eAAexI,QAAQ,mBAAoBK,KAAKC,UAAU6H,IAE1DhB,EAAmB9G,KAAKC,UAAU6H,EAEtC,CAtCQhI,CAASmB,GACTuD,EAASvD,GACTgG,EAAyBzE,SAAQ4F,GAAMA,EAAGnH,KAE1CgG,EAA2B,EAAE,IAE9B7J,OAAM2H,IAELuC,IACAe,WAAWb,EAAa,IAAK,GAEnC,CAWAA,GACF,CAqBO,SAASc,IACd,OAAO,IAAIC,SAAQ,CAACC,EAASC,KAC3BlE,GAAImE,IACFF,EAAQE,EAAW,GACnB,GAEN,CAEO,SAAStC,IACd,IAAIuC,EAMJ,OAJEA,EADET,IACYlI,KAAKO,MAAM4H,eAAe3H,QAAQ,qBAElCR,KAAKO,MA/BduG,GAiCA6B,CACT,CAaA,SAAST,IACP,IACE,MAAM1I,EAAM,IAAIC,KAGhB,OAFA0I,eAAexI,QAAQH,EAAKA,GAC5B2I,eAAevI,WAAWJ,IACnB,CACT,CAAE,MAAOK,GACP,OAAO,CACT,CACF,CAoBA,MAAM+I,EAAa,CACjBrE,MACA6B,UACAkC,eACAO,aA5CF,SAAsBC,GACpB,IAAKA,EAAS,OAEd,MAAMvB,EAASnB,IAEf,IAAKmB,EAAQ,OAGb,OADmBA,EAAOwB,OAAO,GACflG,MAAKmG,GAASA,EAAMC,KAAOH,GAC/C,EAoCEI,MAvBF,WACE,IAAIjI,EAAOkH,eAAe3H,QAAQ,oBAClC,IAAKS,EAAM,OAAO,EAIlB,GAFAA,EAAOjB,KAAKO,MAAMU,QAESI,IAAvBJ,EAAK8G,cAEP,OADAI,eAAevI,WAAW,qBACnB,EAGT,IAAI8H,EAAW5I,IAAMA,OAASqK,KAAKrK,IAAMmC,EAAK8G,eAAeqB,SAAU,SAAW,GAIlF,OAHI1B,IAAUA,EAAWzG,EAAKgH,UAAYlB,GACrCW,GAAUS,eAAevI,WAAW,oBAElC8H,CACT,EAQE2B,sBApEF,WACE,OAAOnB,IAAwBoB,QAAQnB,eAAe3H,QAAQ,qBAAuB8I,QAAQxC,EAC/F,GAqEA3G,OAAO5C,GAAGoL,YAAcC,C,yKC9JxB9J,IAAAA,OAAaC,MAEbwK,EAAAA,EAAAA,MAEAzK,IAAAA,OAAa0K,KACb1K,IAAAA,OAAaC,KAEN,MAAM0K,EAAcA,MACzBC,EAAAA,EAAAA,UAEkCrI,IAA9BlE,EAAEkG,OAAO,kBACXlG,EAAE,wBAAwB0F,KAAK,2CAA2C/F,QAAQ,MAAM6M,SAG1F,MAAMC,EAAqBzM,EAAE,sBA4D7B,GA1DIyM,EAAmBxI,QAA+B,WAArB7D,GAAGuF,eAClC3F,EAAE,gBAAgB0M,OAAOD,EAAmB9M,QAAQ,YAGtDK,EAAE,gBAAgB0F,KAAK,mDAAmDiH,IAAI,kBAAkBC,cAE5F5M,EAAE,iCAAiC6M,WAAW5I,OAAS,GACzDjE,EAAE,iCAAiCoE,SAAS,mBAE1CpE,EAAE,sBAAsBiE,OAAS,GACnCjE,EAAE,sBAAsB8M,UAG1B9M,EAAE,mBAAmB+M,SAAS,CAC5BC,SAAS,EACTC,UAAU,EACVxF,KAAM,SACNyF,UAAW,iBACXC,WAAY,0EAGdnN,EAAE,aAAa+M,SAAS,CACtBK,QAAS,EACTC,SAAU,IACVC,gBAAgB,EAChBC,UAAU,EACVC,eAAe,EACfC,WAAAA,GACMzN,EAAE,wBAAwB0N,GAAG,aAC/B1N,EAAE,wBAAwB4F,MAE9B,IAGF5F,EAAE,mBAAmB+M,SAAS,CAC5BY,MAAO,OACPC,OAAQ,OACRL,UAAU,EACVM,UAAW,SACXP,gBAAgB,EAChBE,eAAe,EACfM,QAAS,CACPC,QAAS,CACPC,QAAQ,IAGZP,WAAAA,GACMzN,EAAE,wBAAwB0N,GAAG,aAC/B1N,EAAE,wBAAwB4F,MAE9B,EACAwH,QAAS,EACTa,OAAQ,CAAC,GAAI,GAAI,GAAI,MAMnBjO,EAAE,0BAA0BiE,OAAS,EAAG,CAC1C,MAAMiK,EAAWnN,SAASoN,gBAAgBC,aAAa,gBACjDC,EAAcrO,EAAE,QAAQmE,KAAK,oBAC7BmK,EAAgBtO,EAAE,QAAQmE,KAAK,sBAErCnE,EAAE,sBAAsBuE,MAAK,WAC3B,MAAMgK,EAAMvO,EAAEwO,MACRC,OAA2CvK,IAA7BqK,EAAIzK,KAAK,iBAAgC,OAE7DyK,EACGG,gBAAgB,CACfC,WAAW,EACX1C,OAAQoC,EACRO,YAAaN,EACbJ,WACAW,UAAWN,EAAIO,SAAS,wBAA0B,GAAI,IAAInN,MAAQsK,OAAOoC,GACzEU,YAAY,EACZN,cACAO,YAAY,IAEb7P,GAAG,qBAAqB,SAAU8P,EAAIC,GACrCX,EAAIY,KAAK,YAAY,GACjBZ,EAAIO,SAAS,yBAAyBI,EAAOE,cAAcC,IAAI,OAAQd,EAAIe,SAASC,KAC1F,IACCpQ,GAAG,kCAAkC,SAAU8P,EAAIC,GAClDX,EAAIY,KAAK,YAAY,GACrBZ,EAAIiB,IAAI7N,IAAMuN,GAAQjD,OAAOoC,GAC/B,GACJ,IAEArO,EAAE,iCAAiCb,GAAG,SAAS,SAAUI,GACvDA,EAAEkQ,kBACFzP,EAAEwO,MAAMkB,SAAShK,KAAK,sBAAsB5B,KAAK,mBAAmB6L,MACtE,GACF,CClHK,IAAyBtI,EDoHL,WAArBjH,GAAGuF,eACL3F,EAAE,uBAAuB4P,cAG3B5P,EAAE,2EAA2E8M,UCxH/CzF,ED8Hd,WACVtG,SAASC,cAAc,iBAAiB+H,UAAU8G,SAAS,aAE7DC,EAAAA,EAAAA,IAEJ,EClIA9M,OAAOyG,iBAAiB,YAAY,SAASsG,GACvCA,EAAMC,WACR3I,GAEJ,GD8HE,EAEJrH,GAAE,WACAsM,IAEAtM,EAAEe,UAAU5B,GAAG,QAAS,yBAAyB,SAAUI,GACzDA,EAAEC,iBACF,MAAMyQ,EAAQjQ,EAAEwO,MAEhB,GAAIyB,EAAMnB,SAAS,gBACjB,IAAInB,EAAQ,SACVC,EAAS,aACN,GAAIqC,EAAMnB,SAAS,UACpBnB,EAAQ,SACVC,EAAS,aACN,GAAIqC,EAAMnB,SAAS,kBACpBnB,EAAQ,QACVC,EAAS,aAEPD,EAAQ,QACVC,EAAS,QAGb5N,EAAE+M,SAAS4C,KAAK,CACdO,IAAKD,EAAM9L,KAAK,QAEhBsD,KAAM,SACNuF,SAAS,EACTC,UAAU,EACVkD,OAAQ,CACNd,IAAK,CACH1B,QACAC,WAGJH,WAAAA,GACMzN,EAAE,wBAAwB0N,GAAG,aAC/B1N,EAAE,wBAAwB4F,MAE9B,GAEJ,IAGA5F,EAAEe,UAAU5B,GAAG,QAAS,yBAAyB,SAAUI,GACzDS,EAAE+M,SAASqD,OACb,GACF,IAEArP,SAAS0I,iBAAiB,6BAA6BlK,IACrD8Q,EAAAA,EAAYC,aAAa/Q,EAAEgR,OAAO,IAGpCvQ,EAAEe,UACC5B,GAAG,QAAS,kBAAkB,SAAUI,GACvCA,EAAEC,iBACFQ,EAAE,uBAAuBwQ,QAAQ,QACnC,IACCrR,GAAG,SAAU,uBAAuB,WACnCa,EAAEwO,MAAM7O,QAAQ,eAAe+F,KAAK,aAAaF,YAAY,SAC/D,IACCrG,GAAG,SAAU,aAAa,WACzBa,EAAEwO,MAAMgC,QAAQ,SAClB,IACCrR,GAAG,QAAS,aAAa,SAAUI,GAClCA,EAAEC,iBACF,MAAME,EAAS8O,KAAKnF,MAAQ,GAC5B,IAAIiG,EAAS,EAEb,MAAMmB,EAAUzQ,EAAEN,GACI,GAAlB+Q,EAAQxM,SACVqL,EAASmB,EAAQnB,SAASoB,IACrBD,EAAQ/C,GAAG,cACdnO,EAAEC,iBACF8P,EAASmB,EAAQE,eAAerB,SAASoB,KAEzB,sBAAdlC,KAAKnF,MACPoH,EAAQ/K,KAAK,aAAaiH,IAAI,WAAW6D,QAAQ,UAIrDxQ,EAAE,aAAa4Q,QAAQ,CAAEC,UAAWvB,GAAU,IAChD,IACCnQ,GAAG,QAAS,oBAAoB,SAAUI,GACzCA,EAAEC,iBACF,MAAM+O,EAAMvO,EAAEwO,MAEdxO,EAAEuO,EAAIpK,KAAK,SAAS2M,SACpBvC,EAAIwC,YAAY,SAClB,IACC5R,GAAG,QAAS,eAAe,SAAUI,GACpCA,EAAEC,iBACF,MAAM+O,EAAMvO,EAAEwO,MAEd,GAAID,EAAI5O,QAAQ,wBAAwBsE,OAAQ,CAC9CjE,EAAEuO,EAAIpK,KAAK,SAAS4M,YAAY,UAChCxC,EAAIwC,YAAY,UAEZxC,EAAIO,SAAS,iBACfP,EAAIpK,KAAK,gBAAiBoK,EAAIO,SAAS,WAGzC,MAAMkC,EAAuBzC,EAAI5O,QAAQ,wBAChB,WAArBS,GAAGuF,eAA8BqL,EAAqBlC,SAAS,WACjE9O,EAAE,aAAa4Q,QAAQ,CAAEC,UAAWG,EAAqB1B,SAASoB,IAAM,IAAM,KAEhFM,EAAqBD,YAAY,UAC7BxC,EAAIO,SAAS,UAAWP,EAAItJ,KAAKsJ,EAAIzK,KAAK,WACzCyK,EAAItJ,KAAKsJ,EAAIzK,KAAK,UACzB,MACEyK,EAAI0C,SAAS1C,EAAIpK,KAAK,SAAS2M,SAC/BvC,EAAIwC,YAAY,UAiBlB,GAdIxC,EAAI5O,QAAQ,gCAAgCsE,QAC9CjE,EAAE,gCAAgC+Q,YAAY,UAG5C/Q,EAAEwO,MAAM7O,QAAQ,mBAAmBsE,QACjCjE,EAAE+M,SAASmE,eACblR,EAAE+M,SAASmE,cAAcC,SAIwC,0BAAjEnR,EAAE,oCAAoC0F,KAAK6I,GAAKpK,KAAK,SACvDnE,EAAE,oCAAoC0F,KAAK,eAAeE,OAGnC,sBAArB2I,EAAIpK,KAAK,SAAwD,WAArB/D,GAAGuF,cAA4B,CAC7E,MAAMyL,EAAW7C,EAAIe,SAASC,KAAOhB,EAAI8C,aAEzCrR,EAAE,qBAAqBqP,IAAI,CACzBiC,MAAO,OACP/B,KAAM6B,EAAWpR,EAAE,qBAAqBqR,aAAe,IAE3D,CAEuB,6BAAnB9C,EAAIpK,KAAK,OACXoK,EAAI5O,QAAQ,uBAAuBoR,YAAY,mBAG1B,yBAAnBxC,EAAIpK,KAAK,OACXoK,EAAI5O,QAAQ,mBAAmBoR,YAAY,kBAE/C,IAGC5R,GAAG,SAAS,SAAUI,GACrB,MAAMgS,EAAWvR,EAAE,oCACbN,EAASH,EAAEG,OAEjB6R,EAAShN,MAAK,WACZ,MAAMgK,EAAMvO,EAAEwO,MACTD,EAAI,GAAGsB,SAASnQ,IAAY6O,EAAIO,SAAS,qBAC5CP,EAAI7I,KAAK,oBAAoBF,YAAY,UACzC+I,EAAInK,SAAS,mBAEjB,GACF,IAECjF,GAAG,QAAS,wBAAwB,SAAUI,GAC7CA,EAAEC,iBACF,MAAMgS,GAAWxR,EAAEwO,MAAMiD,KAAK,OAAOxN,OAASjE,EAAEwO,MAAMiD,KAAK,QAM3D,GALAzR,EAAE,wBAAwB2M,IAAI3M,EAAEwO,OAAOhJ,YAAY,gBACnDxF,EAAE,sBAAsB2M,IAAI6E,GAAU5L,OACtC4L,EAASV,SACT9Q,EAAEwO,MAAMuC,YAAY,qBACS7M,IAAzBsN,EAAS1N,KAAK,QAAsB0N,EAASrN,KAAK,YAAY,QACtCD,IAAxBsN,EAASrN,KAAK,MAAqB,CACrC,IAAI2H,EAAK0C,KAAKnF,KACdyC,EAAKA,EAAG4F,UAAU,GAClBF,EAASrN,KAAK,KAAM2H,EACtB,CACF,IAEC3M,GAAG,QAAS,iBAAiB,SAAUI,GACtCA,EAAEC,iBACFQ,EAAEA,EAAEwO,MAAMrK,KAAK,SAASwN,YAAY,QACpC3R,EAAEwO,MAAMuC,YAAY,UAChB/Q,EAAEwO,MAAM7O,QAAQ,mBAAmBsE,QACrCjE,EAAE+M,SAASmE,cAAcC,QAE7B,IACChS,GAAG,WAAW,SAAUI,GACvB,MAAMqS,EAAa5R,EAAE,sBACf6R,EAAW7R,EAAE,WAAW4R,EAAWzN,KAAK,WAEzCyN,EAAW3N,SAGb2N,EAAWlE,GAAGnO,EAAEG,SAChBmS,EAASnE,GAAGnO,EAAEG,SACdmS,EAASnE,GAAG1N,EAAET,EAAEG,QAAQC,QAAQ,iBACG,IAApCiS,EAAWE,IAAIvS,EAAEG,QAAQuE,QACxBjE,EAAE,wBAAwB0N,GAAGnO,EAAEG,SACmB,IAAnDM,EAAE,wBAAwB8R,IAAIvS,EAAEG,QAAQuE,SAEV,mBAA1B2N,EAAWzN,KAAK,MAClByN,EAAWlM,KAAK,yBAAyB8K,QAAQ,SACa,IAArDxQ,EAAET,EAAEG,QAAQC,QAAQ,sBAAsBsE,SACnD4N,EAASrM,YAAY,uBACrBoM,EAAWhM,OAC+D,yBAAtE5F,EAAE,oCAAoC0F,KAAKkM,GAAYzN,KAAK,OAC9DnE,EAAE,oCAAoC0F,KAAK,eAAeM,SAIlE,IAEC7G,GAAG,QAAS,YAAY,SAAUI,GACjCA,EAAEC,iBAEF,MAAM+O,EAAMvO,EAAEwO,MACRuD,EAAUxD,EACb5O,QAAQ,SACR+F,KAAK,gBACLsM,QACAC,KAAI,WACH,MAAO,CAAE/B,IAAKlQ,EAAEwO,MAAMrK,KAAK,iBAC7B,IACC+N,UACGC,EAAc5D,EAAI5O,QAAQ,qBAAqB+F,KAAK,gBAAgBzB,OAAS,cAAgB,GAEnGjE,EAAE+M,SAAS4C,KAAKoC,EAAS,CACvB7E,UAAWiF,GAEf,IACChT,GAAG,QAAS,oBAAoB,SAAUI,GACzCA,EAAEC,iBACFQ,EAAEuH,KAAK,CACLC,SAAU,SACVC,KAAM,MACNC,IAAK1H,EAAEwO,MAAMrK,KAAK,SAEtB,IACChF,GAAG,QAAS,yDAAyD,SAAUI,GAC9EA,EAAEC,gBACJ,G,8CEjWF,SAAS4S,EAA2B7D,EAAKpK,GACvC,MAAiC,qBAAnBoK,EAAIzK,KAAKK,GAAwB,GAAKoK,EAAIzK,KAAKK,EAC/D,CAEA,SAASkO,EAAqBC,GAC5B,IAAI7K,EAAO6K,EAASxO,KAAK,WACrByO,EAAQH,EAA2BE,EAAU,SAC7CE,EAAOJ,EAA2BE,EAAU,QAC5CG,EAAYL,EAA2BE,EAAU,aACjDI,EAAWN,EAA2BE,EAAU,YAChDxG,EAAKsG,EAA2BE,EAAU,MAC1CK,EAAY3S,EAAE,6BAA+ByH,EAAO,IAAMiL,EAAW,2BACrE5G,GACF6G,EAAUxO,KAAK,KAAM2H,GAEvB6G,EAAUC,QACNL,GAAOI,EAAUjG,OAAO,4BAA8B6F,EAAQ,QAC9DC,IAASC,GAAWE,EAAUjG,OAAO,6BAA+B8F,EAAO,WAC1EA,GAAQC,GAAWE,EAAUjG,OAAO,6BAA+B1M,EAAEyS,GAAWxN,OAAS,UAE9FqN,EAASO,OAAM,WACbP,EAAS9B,QAAQ,aACnB,IACA8B,EAASQ,MAAK,WACZR,EAAS9B,QAAQ,aACnB,IACA8B,EAASS,OAAM,WACbT,EAAS5F,OAAOiG,EAClB,IAAG,WACDL,EAAS5M,KAAK,kBAAkB8G,QAClC,IACA8F,EAASnT,GAAG,SAAS,WACnBmT,EAAS5F,OAAOiG,EAClB,IACAL,EAASnT,GAAG,QAAQ,WAClBmT,EAAS5M,KAAK,kBAAkB8G,QAClC,IACA8F,EAASnT,GAAG,SAAS,SAAUI,QACP2E,IAAlB3E,EAAEG,OAAO6I,MAAoBhJ,EAAEC,iBACnCD,EAAEyT,0BACJ,GACF,CAoCA,MAAMC,EAAU,CACdC,KAvFF,SAAcZ,GACPA,EAASrO,SACW,YAArB7D,GAAGuF,eAAgC2M,EAASxO,KAAK,mBAErB,YAArB1D,GAAGuF,eAA+B2M,EAASxO,KAAK,qBACnC,WAArB1D,GAAGuF,eAA+B2M,EAAS3S,QAAQ,kBAAkBsE,OAASoO,EAAqBC,GA+CxG,SAA+BA,GAC7BA,EAASa,OAAO,SAChBb,EAASnT,GAAG,SAAS,SAAUI,GAC7BA,EAAEC,iBACFD,EAAEyT,2BACF,IAAI/C,EAAQjQ,EAAEwO,MACV+D,EAAQH,EAA2BnC,EAAO,SAC1CuC,EAAOJ,EAA2BnC,EAAO,QACzCwC,EAAYL,EAA2BnC,EAAO,aAC9C0C,EAAY3S,EAAE,eAEduS,GAAOI,EAAUjG,OAAO,0BAA4B6F,EAAQ,QAC5DC,IAASC,GAAWE,EAAUjG,OAAO,oBAAsB8F,EAAO,WACjEA,GAAQC,GAAWE,EAAUjG,OAAO,oBAAsB1M,EAAEyS,GAAWxN,OAAS,UAErFjF,EAAE+M,SAAS4C,KAAKgD,EAAW,CACzBS,WAAY,WACVC,WAAWlU,IACb,EACAmU,WAAY,WACVD,WAAWE,KACb,GAEJ,GACF,CAvEoHC,CAAsBlB,IAFtID,EAAqBC,GAIzB,EAiFEmB,QAVF,SAAyBnB,GACvBA,EAASiB,IAAI,SACbjB,EAASiB,IAAI,QACbjB,EAASiB,IAAI,cACbjB,EAASiB,IAAI,cACbjB,EAASiB,IAAI,QACf,GAOAvQ,OAAO5C,GAAGsT,QAAUT,EAIpBjT,GAAE,WACAA,EAAE,kBAAkBuE,MAAK,SAAUoP,EAAOC,GACxCX,EAAQC,KAAKlT,EAAE4T,GACjB,GACF,G,6ECuCA,SAASC,EAAaC,EAAUC,GAC9B,MAAMC,GAAqBtT,EAAAA,EAAAA,IAAW,YACtC,IAAIuT,EAEFA,OADa/P,IAAX6P,GAAmC,OAAXA,GAAmBA,EAAO9P,OAC/B8P,EAAOrO,KAAK,yBAEZ1F,EAAE,yBAGzBA,EAAEuE,KAAK0P,GAAoB,SAAUN,EAAOC,GAC1C,MAAM3D,EAAQjQ,EAAEwO,MACV0F,EAAiBjE,EAAMnM,KAAK,kBAClC,IAAIqQ,EAAelE,EAAMnM,KAAK,SAC1BsQ,EAAiBnE,EAAMnM,KAAK,YAEhC,QAAuBI,IAAnBkQ,EAA8B,OAAO,EAEzC,GAAkC,qBAAvBJ,EAAoC,CAC7C,MAAMK,EAAoBpE,EAAMnM,KAAK,kBAC/BwQ,EAAgBrE,EAAMnM,KAAK,iBACA,qBAAtBuQ,GAAqCA,EAAoB,GAAKL,IAAuBM,IAC9FH,EAAeE,EAEnB,CAEA,GAAsB,KAAlBD,EAAuB,CACH,QAAlBA,IACFA,EAAiB,MACjBD,EAAeA,EAAanP,QAAQ,IAAK,KAE3C,MAAMuP,EAAcvR,OAAO5C,GAAG,oBAAoBgU,EAAeI,iBACjE,IAAIC,EAAcC,IAAMH,GAAa,SAAU9P,GAC7C,OAAOA,EAAEkQ,KAAOb,CAClB,IACA,GAA2B,qBAAhBW,EAA6B,CACtC,MAAMG,EAAgBT,EAAeM,EAAYI,OACjDJ,EAAcC,IAAM1R,OAAO5C,GAAG0U,iBAAiB,SAAUrQ,GACvD,OAAOA,EAAEsQ,QAAsB,OAAZjB,EAAoBM,EAAiBN,EAC1D,IAEA,MAAMkB,GAAsB,EACtBC,EAAmBjV,EAAEkV,OACzBN,EACAI,EAAsBP,EAAYU,QAAU,EAC5CV,EAAYW,OACZX,EAAYY,QAERC,EAAetV,EAAE4T,GAASlO,KAAK,UAAUvB,KAAK,SAC9CoR,EAAcvV,EAAE4T,GAASlO,KAAK,SAASvB,KAAK,SAC5CqR,EAAa,gBAAgBF,MAAiBL,WAC9CQ,EAAgB,gBAAgBF,MAAgBd,EAAYM,cAC5DW,EAAkB,gBAAgBH,MAAgBd,EAAYkB,gBAC9DC,EAAWnB,EAAYxI,OAC1BjH,QAAQ,SAAUyQ,GAClBzQ,QAAQ,WAAY0Q,GACpB1Q,QAAQ,WAAYwQ,GACD,UAAlBtB,GACFlU,EAAE4T,GAASlO,KAAK,SAAS8G,SACzBxM,EAAE4T,GAASlO,KAAK,UAAUmQ,YAAYD,IAEtC5V,EAAE4T,GAAS3O,KAAK2Q,EAEpB,CACF,CACF,IACA5V,EAAEe,UAAUyP,QAAQ,oBAGpB,MAAMT,EAAQ,IAAIjO,MAAM,oBACxBf,SAAS6C,cAAcmM,EACzB,CA2CA,SAAS+F,EAAwBhC,GAC/B,MAAMiC,EAAuBhV,SAASC,cAAc,gCAAgC8S,OAC9EkC,EAAyC,OAAzBD,EAAgCA,EAAqB1U,MAAQ,KACnF,GAAsB,OAAlB2U,EAAwB,OAE0C,OAAlEjV,SAASC,cAAc,yCACzBD,SAASC,cAAc,uCAAuCiV,YAAcD,GAC9E,MAAME,EAAUlW,EAAE,yBAClB,IAAImW,GAAU,EAEdD,EAAQxQ,KAAK,UAAUnB,MAAK,WAC1B4R,EAAUnW,EAAEwO,MAAMgB,QAAUsE,GAAkBqC,CAChD,IAEArC,EAAYqC,EAAkBrC,EAAR,MAEtBoC,EAAQ1G,IAAIsE,GACZ,MAAMsC,EAAgBpW,EAAE,iCACxBoW,EAAc5Q,cACd4Q,EAAchS,SAAS,sBAAsB0P,KAC7C9T,EAAE,uCAAuC2G,KAAKqP,GAG9C,MACMK,EADyBrW,EAAE,gBAAgB0F,KAAK,sBAAsBA,KAAK,SAASiB,OAC9B7B,MAAM,KAElE9E,EAAE,gBAAgB0F,KAAK,sBAAsBA,KAAK,SAASiB,KAAK,GAAG0P,EAA6B,OAAOvC,IACzG,CA3RA9T,EAAEkV,OAAS,SAAUA,EAAQoB,EAAUC,EAAWC,GAEhDA,EAC2B,qBAAlBA,EACmC,SAAtC,IAAIC,OAAO,KAAMC,iBACf,IAAID,OAAO,KAAMC,iBAAiBjR,OAAO,GACzC,GACF+Q,EACND,EAAiC,qBAAdA,EAA4B,IAAIE,OAAO,IAAKC,iBAAiBjR,OAAO,GAAK8Q,EAC5FD,EAAYK,UAAUL,GAAgBM,KAAKC,IAAIP,GAAb,EAGlC,MAAMQ,EAAQ,MAAM,OAAOP,EAAUQ,WAAW,GAAG3O,SAAS,MAAM4O,OAAO,KACnEC,EAAQ,MAAM,OAAOT,EAAcO,WAAW,GAAG3O,SAAS,MAAM4O,OAAO,KAG7E9B,EAAS,GAAGA,IACTlQ,QAAQ,IAAKuR,GACbvR,QAAQ,IAAIkS,OAAOD,EAAO,KAAM,IAChCjS,QAAQ,IAAIkS,OAAOJ,EAAO,KAAM,KAChC9R,QAAQ,IAAIkS,OAAO,cAAe,KAAM,IAE3C,MAAMC,EAAKR,UAAUzB,IAAeA,EAAL,EAC/B,IAAIkC,EAAI,GAcR,OARAA,GAAKd,EALc,SAAUa,EAAGb,GAC9B,MAAO,KAAI,GAAGM,KAAKS,MAAM,GAAGF,IAAIzO,QAAQ,KAAO,EAAIyO,EAAI,GAAGA,MAAMb,SAAgBA,GAClF,CAGgBgB,CAAWH,EAAGb,GAAY,GAAGa,IAAIrS,MAAM,KAAK,IAAIA,MAAM,KAClEsS,EAAE,GAAGnT,OAAS,IAChBmT,EAAE,GAAKA,EAAE,GAAGpS,QAAQ,0BAA2BwR,KAE5CY,EAAE,IAAM,IAAInT,OAASqS,IACxBc,EAAE,GAAKA,EAAE,IAAM,GACfA,EAAE,IAAM,IAAIG,MAAMjB,EAAWc,EAAE,GAAGnT,OAAS,GAAGuT,KAAK,MAE9CJ,EAAEI,KAAKjB,EAChB,EAwFAvW,EAAEe,UAAU5B,GAAG,QAAS,gBAAgB,WACtCa,EAAE,gBAAgB2M,IAAI6B,MAAMrK,KAAK,iBAAiB,GAClDnE,EAAEwO,MAAMrK,KAAK,iBAAiB,EAChC,IASAnE,EAAEe,UAAU5B,GAAG,gBAAgB,SAAU4Q,GAEvC8D,GADiBnT,EAAAA,EAAAA,IAAW,aAAeV,EAAE,QAAQ8D,KAAK,oBAE5D,IAgJAd,OAAO5C,GAAGqX,aAAe,CACvBvE,KAtPF,WACE,IAAIY,GAAWpT,EAAAA,EAAAA,IAAW,aAAeV,EAAE,QAAQ8D,KAAK,oBACxD,MACM4T,EAAgB,IADF3W,SAAS4W,OAAO7S,MAAM,KAAKkS,OAAO,GAAGQ,KAAK,QAI9D3Q,EAAAA,EAAAA,IAAU,WAAY,KAAM,KAAM,MAG8C,MAA5E9F,SAASC,cAAc,oCAAoC8S,SAC7DA,EAAW9T,EAAE,QAAQ8D,KAAK,qBAC1B+C,EAAAA,EAAAA,IAAU,WAAYiN,EAAU,IAAK,KAAM4D,IAGzC5D,GACFD,EAAaC,GAGuB,qBAA3BpT,EAAAA,EAAAA,IAAW,cACpBmG,EAAAA,EAAAA,IAAU,WAAYiN,EAAU,IAAK,KAAM4D,GAE7C5B,EAAwBhC,GAGxB9T,EAAEe,UAAU5B,GAAG,SAAU,yBAAyB,WAGhD,GAFA2U,EAAW9T,EAAEwO,MAAMgB,MAEfsE,EACF,IACEnT,UAAUiX,cAAgB9D,CAC5B,CAAE,MAAOlM,GACPK,QAAQC,IAAIN,EACd,CAEF5H,EAAE+M,SAAS4C,KAAK,CACdO,IAAK,uBACL3C,UAAU,EACVI,MAAO,IACPC,OAAQ,OACRR,QAAS,EACTyK,QAAS,2BACTC,WAAW,EACXrK,WAAAA,GACOzN,EAAE,QAAQ8O,SAAS,sBACtBgF,GAAWpT,EAAAA,EAAAA,IAAW,cAExBmG,EAAAA,EAAAA,IAAU,WAAYiN,EAAU,IAAK,KAAM4D,GAC3C7D,EAAaC,GACbgC,EAAwBhC,GACxB9T,EAAE,QAAQwF,YAAY,mBACxB,GAEJ,IAEAxF,EAAEe,UAAU5B,GAAG,mBAAmB,WAChC0U,EAAaC,EACf,IAEA9T,EAAEe,UAAU5B,GAAG,QAAS,yCAAyC,WAC/D0U,GAAanT,EAAAA,EAAAA,IAAW,aAAeV,EAAE,QAAQ8D,KAAK,qBACtDgS,EAAwBhC,GAExB9T,EAAE,QAAQoE,SAAS,oBAEnBpE,EAAE+M,SAASqD,OACb,IAEApQ,EAAEe,UAAU5B,GAAG,QAAS,4CAA4C,WAClEa,EAAE+M,SAASqD,OACb,IAEApQ,EAAEe,UAAU5B,GAAG,QAAS,oBAAoB,SAAU4Q,GACpDA,EAAMvQ,iBAEmB,WAArBY,GAAGuF,gBACL3F,EAAE,sBAAsB4F,OACxB5F,EAAE,2BAA2BoE,SAAS,kBACtCpE,EAAEwO,MAAMpK,SAAS,UACjBpE,EAAE,mBAAmBwF,YAAY,mBACjCxF,EAAE,6BAA6BwF,YAAY,mBAC3CxF,EAAE,6BAA6BwF,YAAY,kBAE/C,GACF,EAoKEuS,YA5JF,SAAqBhE,GAGnBF,GAFiBnT,EAAAA,EAAAA,IAAW,aAAeV,EAAE,QAAQ8D,KAAK,oBAEnCiQ,EAEzB,EAwJEiE,eAAgBlC,EAChBmC,mBA1EF,SAA4BC,GAC1B,IAAI/D,EAAe,EACfyB,EAAW,GACX9B,GAAWpT,EAAAA,EAAAA,IAAW,aAAeV,EAAE,QAAQ8D,KAAK,oBAExD,GAAIgQ,GAAwB,KAAZA,EAAiB,CACf,QAAZA,IACFA,EAAW,MACXK,EAAeA,EAAanP,QAAQ,IAAK,KAE3CmP,GAAgBA,EAChB,MAAMI,EAAcvR,OAAO5C,GAAG,oBAAoB0T,EAASU,iBAC3D,IAAIC,EAAcC,IAAMH,GAAa,SAAU9P,GAC7C,OAAOA,EAAEkQ,KAAOb,CAClB,IACA,GAA2B,qBAAhBW,EAA6B,CACtC,MAAMG,EAAgBsD,EAAQzD,EAAYI,OAC1CJ,EAAcC,IAAM1R,OAAO5C,GAAG0U,iBAAiB,SAAUrQ,GACvD,OAAOA,EAAEsQ,OAASjB,CACpB,IAEA,MAAMkB,GAAsB,EAOtBQ,EAAa,+BANMxV,EAAEkV,OACzBN,EACAI,EAAsBP,EAAYU,QAAU,EAC5CV,EAAYW,OACZX,EAAYY,iBAGRI,EAAgB,6BAA6BhB,EAAYM,cACzDW,EAAkB,6BAA6BjB,EAAYkB,gBACjEC,EAAWnB,EAAYxI,OACpBjH,QAAQ,SAAUyQ,GAClBzQ,QAAQ,WAAY0Q,GACpB1Q,QAAQ,WAAYwQ,EACzB,CACF,CAEA,OAAOI,CACT,GAsCAxV,GAAGqX,aAAavE,OAEhBlT,GAAE,WAEA,MAAMmY,EAAkBnY,EAAE,6BAExBI,GAAGgY,UAAUC,SAAS,mBACtBF,EAAgBlU,QAChBjE,EAAE,2BAA2BiE,SAC5BjE,EAAE,mCAAmCiE,SAEtCkU,EAAgB3H,QAAQ,SACxBxQ,EAAEgD,QAAQsV,MAAK,WACbtY,EAAE,cAAc4Q,QACd,CACEC,UAAWsH,EAAgB7I,SAASoB,IAAM,IAE5C,IAEJ,IAEJ,G,yDC5TA,SAAS6H,IAEP,OADkBhW,aAAac,QAAQ,kCAEzC,CAEA,SAASmV,IAEP,OADoBjW,aAAac,QAAQ,oCAE3C,CAEA,SAASoV,EAAyBC,EAAWC,GAC3C,MAAMnY,EAAU,GAEZR,EAAEkG,OAAO,eAAiBwS,GAC5BlY,EAAQW,KAAK,CAAEC,KAAM,aAAcC,MAAOqX,IAExC1Y,EAAEkG,OAAO,iBAAmByS,GAC9BnY,EAAQW,KAAK,CAAEC,KAAM,eAAgBC,MAAOsX,IAE1CnY,EAAQyD,OAAS,IACnBxC,EAAAA,EAAAA,IAAWjB,EAEf,CA6BA,SAASoY,EAAwBF,GAC/B,MAAMG,EAAaH,EAAU5T,MAAM,KAEnC,MAAO,CACLgU,cAAeD,EAAW,GAC1BE,eAAgBF,EAAW,GAC3BG,cAAeH,EAAW,GAC1BI,eAAgBJ,EAAW,GAC3BK,cAAeL,EAAW,GAE9B,CA6CA7V,OAAO5C,GAAG+Y,eAAiB,CACzBC,qBAnFF,WACE,GAAIpZ,EAAE,oBAAoBiE,OAAS,EAAG,CACpC,MAAMyU,EAAYH,IACZI,EAAcH,IAIpB,GAFAC,EAAyBC,EAAWC,QAEnBzU,GAAbwU,QAAyCxU,GAAfyU,OAMvB,CACL,MAAM,cAAEG,EAAa,eAAEC,EAAc,cAAEC,EAAa,eAAEC,EAAc,cAAEC,GACpEN,EAAwBF,GAE1B1Y,EAAE,oBAAoBwP,IAAIsJ,GAC1B9Y,EAAE,qBAAqBwP,IAAIuJ,GAC3B/Y,EAAE,oBAAoBwP,IAAIwJ,GAC1BhZ,EAAE,qBAAqBwP,IAAIyJ,GAC3BjZ,EAAE,oBAAoBwP,IAAI0J,GAC1BlZ,EAAE,gBAAgBwP,IAAImJ,EACxB,CACF,CACF,EA2DEU,eA7CF,WACE,MAAMX,EAAYH,IACZI,EAAcH,IAGpB,GAFAC,EAAyBC,EAAWC,QAEnBzU,GAAbwU,GAAuC,MAAbA,QAAoCxU,GAAfyU,EAA0B,CAC3E,MAAM,cAAEG,EAAa,eAAEC,EAAc,cAAEC,EAAa,eAAEC,EAAc,cAAEC,GACpEN,EAAwBF,GAE1B1Y,EAAEuH,KAAK,CACLC,SAAU,OACVC,KAAM,OACNC,IAAK,gCACL5D,KAAM,CACJwV,qBAAsBR,EACtBS,sBAAuBR,EACvBS,qBAAsBR,EACtBS,sBAAuBR,EACvBS,qBAAsBR,EACtBR,WAAW,EACXC,eAEFhR,OAAAA,CAAQ7D,GACN,GAAIA,GAAQA,EAAc,QAAG,CAC3B,MAAM6V,EAAgBvZ,GAAG2H,kBAAkBkB,UACtB,MAAjB0Q,GAA0D,MAAjCA,EAA4B,cACvDA,EAA4B,aAAa,UAAI7V,EAAS,GACtD6V,EAA4B,aAAe,YAAI7V,EAAW,KAC1D1D,GAAG2H,kBAAkBpF,SAASgX,IAE9BvZ,GAAG2H,kBAAkBqB,UAAU,CAAEsP,UAAW5U,EAAS,GAAG6U,YAAa7U,EAAW,MAEpF,MACEmE,QAAQC,IAAI,4CAEhB,EACAN,KAAAA,GACEK,QAAQC,IAAI,2CACd,GAEJ,CACF,GAOAlI,GAAE,WAGA,GAFAI,GAAG+Y,eAAeC,uBAEoB,MAAlChZ,GAAG2H,kBAAkBkB,UAAmB,CAC1C,MAAM0P,EAAcvY,GAAG2H,kBAAkBkB,UAAwB,aAAe,YAC1EzF,EAAYpD,GAAG2H,kBAAkBkB,UAAwB,aAAa,eACxD/E,IAAhByU,QAA2CzU,IAAdV,GAC/BpD,GAAG+Y,eAAeE,gBAEtB,CACF,G,0BCrHO,MAAMO,EAAiBhG,IAC5B,GAAgB,OAAZA,EAAkB,OAEtB,MAAM,WAAEiG,EAAU,cAAEC,EAAa,eAAEC,EAAc,kBAAEC,EAAiB,UAAEC,EAAS,aAAEC,GAC/ElX,OAAOmX,iBAAiBvG,GAa1B,OAREA,EAAQwG,aACRC,SAASR,EAAY,IACrBQ,SAASP,EAAe,IACxBO,SAASN,EAAgB,IACzBM,SAASL,EAAmB,IAC5BK,SAASJ,EAAW,IACpBI,SAASH,EAAc,GAEI,ECyD/BlX,OAAO5C,GAAGka,UAAY,CACpBpH,KAtDK,SAAc5N,GACnB,MAAMiV,EAAWjV,GAAUvE,SAASqE,iBAAiB,oBAEhDmV,EAAStW,QAEdsW,EAASlV,SAAQmV,IACf,MAAMC,EAAmBD,EAAiBxZ,cAAc,iBAExD,IAAKyZ,GAAoBA,EAAiBxE,YAAYyE,OAAOzW,OAAS,IACpE,QA7BN,SAA4B0W,GAC1B,MAAMC,EAAwBD,EAAgBvM,aAAa,2BAE3D,IAAKwM,EAAuB,OAC5B,MAAMC,EAAwBtD,MAAMuD,KAAKH,EAAgBvV,iBAAiB,kBAG1E,IAAKyV,GAAyBA,EAAsB5W,QAAU2W,EAAuB,OAErF,IAAIG,EAAc,EAElB,IAAK,IAAIC,EAAI,EAAGA,EAAIJ,EAAuBI,IACzCD,GAAenB,EAAeiB,EAAsBG,IAItDL,EAAgBM,MAAMrN,OAAYmN,EAAc,EAAjB,KAC/BJ,EAAgBO,aAAa,oBAAqBH,EAAc,EAClE,CAcII,CAAmBV,GAEnB,MAAMW,EAAuBZ,GAAkBxZ,cAAc,qBAE7DyZ,EAAiB1R,UAAUF,IAAI,gBAE/BuS,GAAsBrS,UAAUyD,OAAO,UACvC4O,GAAsBpa,cAAc,aAAa+H,UAAUF,IAAI,UAE/DuS,GAAsB3R,iBAAiB,SAAS,SAAUlK,GAoBxD,GAnBAA,EAAEC,iBAEFib,EAAiB1R,UAAU+H,OAAO,gBAE7B2J,EAAiB1R,UAAU8G,SAAS,iBAOvCuL,EAAqBrS,UAAUyD,OAAO,QAClCgO,EAAiBzR,UAAU8G,SAAS,aACtCuL,EAAqBpa,cAAc,aAAa+H,UAAUF,IAAI,UAC9DuS,EAAqBpa,cAAc,YAAY+H,UAAUyD,OAAO,aATlE4O,EAAqBrS,UAAUF,IAAI,QAC/B2R,EAAiBzR,UAAU8G,SAAS,aACtCuL,EAAqBpa,cAAc,aAAa+H,UAAUyD,OAAO,UACjE4O,EAAqBpa,cAAc,YAAY+H,UAAUF,IAAI,YAW7D4R,EAAiBrM,aAAa,qBAChC,GAAsC,SAAlCqM,EAAiBQ,MAAMrN,OACzB6M,EAAiBQ,MAAMrN,OAAS,WAC3B,CACL,MAAMyN,EAAcZ,EAAiBrM,aAAa,qBAClDqM,EAAiBQ,MAAMrN,OAAS,GAAGyN,KACrC,CAEJ,GAAE,GAEN,GAMAjb,GAAGka,UAAUpH,M,2BCpFXnG,SAASuO,SAASC,OAAQ,C","sources":["webpack://cms-web/./app/frontend/src/blocks/ib_gallery/gallery_init.js","webpack://cms-web/./app/frontend/src/core/analytics/getHotelHeadquarters.js","webpack://cms-web/./app/frontend/src/core/iberapi/browsing_session/browsing_session.js","webpack://cms-web/./app/frontend/src/core/iberapi/hotels_data/hotels_data.js","webpack://cms-web/./app/frontend/src/core/iberapi/ready/ready.js","webpack://cms-web/./app/frontend/src/utils/prevoius_page_cache.js","webpack://cms-web/./app/frontend/src/elements/tooltip/tooltip.js","webpack://cms-web/./app/frontend/src/shared/currency_form/currency_form.js","webpack://cms-web/./app/frontend/src/shared/device_detector/device_detector.js","webpack://cms-web/./app/frontend/src/utils/get_total_height.js","webpack://cms-web/./app/frontend/src/shared/truncable/truncable.js","webpack://cms-web/./app/frontend/src/vendors/fancybox/fancybox.custom.js"],"sourcesContent":["// TODO: Este import habría que cargárselo seguramente\nimport { init as initHotelGallery } from '../../blocks/hotel_gallery/hotel_gallery'\nimport { openLoader } from '../../elements/wait_loading/wait_loading.js'\nimport on from '../../utils/events_delegation.js'\n\nlet galleryInitialized = false\n\nconst getThumbnailId = function (elem) {\n const dataId = elem.getAttribute('data-id')\n return dataId ? parseInt(dataId, 10) : null\n}\n\nconst initIbGallery = function () {\n if (!galleryInitialized) {\n galleryInitialized = true\n import(\n /* webpackChunkName: 'ib_gallery' */\n `./ib_gallery`\n )\n }\n}\n\nfunction init() {\n on({\n eventName: 'click',\n selector: '[data-multi-modal-trigger]',\n handler(e) {\n e.preventDefault()\n const elem = e.target.closest('[data-multi-modal-trigger]')\n initIbGallery()\n openLoader()\n\n import(\n /* webpackChunkName: 'multi_modal' */\n `../multi_modal/multi_modal.js`\n )\n .then(blockJS => blockJS.openMultiModal($(elem)))\n .catch(() => {})\n },\n once: true,\n })\n\n // TODO: Este click no debería estar aquí. Solo sirve para abrir el modal desde el badge de star prestige. Este fichero no debería ser el responsable de hacer esto.\n on({\n eventName: 'click',\n selector: '.is-star-prestige',\n handler(e) {\n e.preventDefault()\n const elem = e.target\n initIbGallery()\n import(\n /* webpackChunkName: 'star_prestige' */\n `../../shared/star_prestige/star_prestige`\n )\n .then(blockJS => blockJS.openStarPrestige($(elem)))\n .catch(() => {})\n },\n once: true,\n })\n\n // If isHotel -> render hotel_gallery\n if (IB.currentPageType.isHotel()) {\n initHotelGallery()\n }\n}\n\ninit()\n","import { readCookie, setCookies } from '../../utils/cookie_manager'\n\nconst getHotelHeadquarters = function () {\n const cookies = []\n const previous_hotel_headquarter_origin = readCookie('hotel_headquarter_origin')\n\n // Gets hotel_headquarter_origin\n if (\n previous_hotel_headquarter_origin &&\n previous_hotel_headquarter_origin != '' &&\n previous_hotel_headquarter_origin != 'uninformed'\n ) {\n utag_data = $.extend({}, utag_data, { hotel_headquarter_origin: previous_hotel_headquarter_origin })\n } else {\n const hotel_headquarter_origin_data = document.querySelector('body').dataset.hotelHeadquarterOrigin\n utag_data = $.extend({}, utag_data, { hotel_headquarter_origin: hotel_headquarter_origin_data })\n\n cookies.push({ name: 'hotel_headquarter_origin', value: hotel_headquarter_origin_data })\n }\n\n // Gets hotel_headquarter_final\n const hotel_headquarter_final_data = document.querySelector('body').dataset.hotelHeadquarterFinal\n utag_data = $.extend({}, utag_data, { hotel_headquarter_final: hotel_headquarter_final_data })\n\n cookies.push({ name: 'hotel_headquarter_final', value: hotel_headquarter_final_data })\n setCookies(cookies)\n}\n\ngetHotelHeadquarters()\n","import dayjs from 'dayjs'\nimport customParseFormat from 'dayjs/plugin/customParseFormat'\n\nimport { setCookie } from '../../../utils/cookie_manager'\n\ndayjs.extend(customParseFormat)\n\nexport const EVENT_SESSION_LOGOUT = 'session:logout'\nconst eventSessionLogout = new Event(EVENT_SESSION_LOGOUT)\n\nlet not_browsing_session_data = null\nlet last_time_write = null\nconst greetings = document.querySelector('.js-greetings-popup')\nlet initialized = false\nlet callbacks = []\n\nfunction notBrowsingSessionData() {\n return not_browsing_session_data\n}\n\nfunction checkLocalStorage() {\n try {\n const uid = new Date()\n localStorage.setItem(uid, uid)\n localStorage.removeItem(uid)\n return true\n } catch (exception) {\n return false\n }\n}\n\nfunction saveData(res) {\n if (checkLocalStorage()) {\n localStorage.setItem('browsing_session', JSON.stringify(res))\n } else {\n not_browsing_session_data = JSON.stringify(res)\n }\n}\n\nfunction getData() {\n if (checkLocalStorage()) {\n return JSON.parse(localStorage.getItem('browsing_session'))\n }\n return JSON.parse(notBrowsingSessionData())\n}\n\nfunction isUserLogged() {\n const ibProLogged = window.IB.visitor_type_detector.is_agency()\n\n if (ibProLogged) {\n return true\n }\n const storage = JSON.parse(localStorage.getItem('browsing_session'))\n const storageData = storage ? JSON.parse(localStorage.getItem('browsing_session')).redis_values : {}\n const isLoggedIn = storage ? storageData.logged_in === 'true' : false\n\n return isLoggedIn\n}\n\nfunction clearData() {\n if (checkLocalStorage()) {\n localStorage.removeItem('browsing_session')\n //setCookie('logged_messages', false, '-1')\n IB.cookieManager.deleteCookies(['logged_messages'])\n document.dispatchEvent(eventSessionLogout)\n } else {\n not_browsing_session_data = null\n }\n}\nfunction getCookie(data) {\n const $link = $('.js-user-options-link')\n const $popup = $('.js-user-options')\n\n if (!$link.length && !$popup.length) return\n if (data === undefined) {\n $link.attr('href', $link.data('log-in-url'))\n } else if (data.redis_values.logged_in !== undefined) {\n // if user is logged in, add classes and remove link (vue menu)\n $link.closest('li').addClass('dropdown-link js-user-options-dropdown-link')\n $link.attr('href', '#')\n $link.removeAttr('data-remote')\n } else {\n // if user is not logged in, set login url\n $link.attr('href', $link.data('log-in-url'))\n }\n}\n\nfunction executeCallbacks() {\n $.each(callbacks, function (_, c) {\n c()\n })\n callbacks = []\n}\n\nfunction addGreetings(data) {\n const logged_in = data.redis_values.logged_in\n if (logged_in !== undefined) {\n greetings.classList.add('start-animation')\n }\n}\n\nfunction setNameToDiv(name, $div, dataAttr, truncate) {\n if ($div.length && $div.data(dataAttr) && $div.data(dataAttr) !== '') {\n if (truncate) {\n name = name.split(' ')[0] // Only show the first name on compound names\n }\n const message = $div.data(dataAttr).replace('{{name}}', name)\n $div.html(message)\n }\n}\n\nfunction setLevelToDiv(level, $div, dataAttr) {\n if ($div.length && $div.data(dataAttr) && $div.data(dataAttr) !== '') {\n const message = $div.data(dataAttr).replace('{{level-text-number}}', level)\n $div.html(message)\n }\n}\n\nfunction horizons_level(level) {\n var level_text = ''\n switch (level) {\n case '2':\n level_text = 'Sand'\n break\n case '3':\n level_text = 'Ocean'\n break\n case '4':\n level_text = 'Sky'\n break\n case '5':\n level_text = 'Infinity'\n }\n return level_text\n}\n\nfunction setUserImage(image_url, name) {\n const data = JSON.parse(localStorage.getItem('browsing_session'))\n const logged_in = data !== null ? data.redis_values.logged_in : null\n\n document.querySelectorAll('[data-user-image-with-letter]').forEach(el => {\n const $user_letter = $(el)\n if (image_url) {\n $user_letter.closest('.user-image').addClass('user-image-with-avatar').removeClass('user-image-with-letter')\n $user_letter.closest('.user-image').html(`\"Avatar\"`)\n } else {\n if (name) {\n $user_letter.html(name.charAt(0))\n $user_letter.closest('.user-image').addClass('with-name').find('.user-image-letter').removeClass('s s-person2')\n } else {\n $user_letter.closest('.user-image').addClass('without-name')\n }\n $user_letter.closest('.user-image').addClass('user-image-flex')\n }\n if (IB.currentDevice === 'mobile') {\n if (logged_in) {\n $('.mobile-header .mobile-user .person-icon').hide()\n $('.mobile-header .mobile-user .js-image-test').hide()\n $('.info-user-container .js-image-test').hide()\n }\n if (IB.currentPageType.isHorizons()) {\n $('.mobile-header .mobile-user .person-icon').hide()\n }\n } else if (IB.currentDevice === 'tablet') {\n $('.main-header .mobile-user .person-icon').hide()\n } else {\n $('.js-user-options-link .person-icon').hide()\n }\n })\n}\n\nfunction personalizeMenu(name) {\n if (name) {\n const $name = $('.header-mobile-menu').find('.name')\n $name.text(name)\n $('.header-mobile-menu.logged').show()\n $('.header-mobile-menu.logout').hide()\n }\n}\n\nfunction setHrefToLink(link, $div) {\n if (link !== undefined) {\n if (link.length) {\n $div.attr('href', link).show()\n }\n } else {\n $div.hide()\n }\n}\n\nfunction mobileMenu(data) {\n const $logged_menu = $('.mobile-menu').find('.user-menu')\n\n // LOGIN\n if ($logged_menu) {\n if (data !== null && data.redis_values.name !== undefined) {\n $logged_menu.removeClass('hidden')\n }\n }\n}\n\n//Moved from app/frontend/src/layout/mobile_header/mobile_header.js\nfunction mobileHeader() {\n if (isUserLogged() && $('.mobile-header').length) {\n const $user_link = $('.mobile-header').find('.my-iberostar-link')\n $user_link.attr('href', $user_link.data('mibe'))\n $user_link.removeAttr('data-remote')\n }\n}\n\nfunction personalizeInterface(data) {\n if (data !== null) {\n const truncate = data.redis_values.name || $.cookie('agency_user_web_name')\n const name =\n data.redis_values.name ||\n $.cookie('agency_user_web_name') ||\n $('.user-options-link-wrapper .name').attr('data-name-soft')\n const destination_url = data.redis_values.destination_url\n const last_hotel_url = data.redis_values.last_hotel_url\n const level = data.redis_values.level\n const horizons_level_text = horizons_level(data.redis_values.level)\n const logged_in = data.redis_values.logged_in || $.cookie('agency_user_web_name')\n if (logged_in !== undefined) {\n setLevelToDiv(horizons_level_text, $('.level-text-number'), 'level-text-number')\n let greetings_title_message = 'greetings-title-message'\n // If the user doesn't have name, only shoy the welcome text without the greeting\n if (typeof name === 'undefined') {\n greetings_title_message = 'name'\n }\n setNameToDiv(name, $('.greetings-title'), greetings_title_message, truncate)\n setNameToDiv(name, $('.logout-are-you'), 'logout-message', truncate)\n setNameToDiv(name, $('.js-user-options-link .name'), 'name', truncate)\n setNameToDiv(name, $('.mobile-user .mobile-button-text'), 'name', truncate)\n setUserImage(data.redis_values.image_url, truncate)\n personalizeMenu(name)\n $('a.user-options-link-wrapper').removeClass('utag-ib-register')\n $('.js-login-url .link').hide()\n } else {\n $('a.user-options-link-wrapper').addClass('utag-ib-register')\n }\n\n setHrefToLink(destination_url, $('a.mx-last-destination'))\n setHrefToLink(last_hotel_url, $('a.mx-last-hotel'))\n if (level !== undefined && $.cookie('logged_messages') !== `true:${level}`) {\n // Set the logged_messages cookie\n setCookie('logged_messages', `true:${level}`)\n }\n mobileMenu(data)\n mobileHeader()\n }\n}\n\nfunction store(key, value) {\n $.ajax({\n dataType: 'JSON',\n type: 'POST',\n url: '/api/v3/browsing_sessions/store/',\n data: {\n key,\n value,\n },\n })\n}\n\nfunction storeHash(hash, callback) {\n $.ajax({\n dataType: 'JSON',\n type: 'POST',\n url: '/api/v3/browsing_sessions/store/',\n data: {\n hash,\n return_key_only: false,\n },\n })\n .success(function (data) {\n if (callback !== undefined) {\n callback(data)\n }\n })\n .error(function (data) {\n console.log(data)\n // Parece algún problema con el nginx de IBP\n let fixed_response = null\n try {\n fixed_response = JSON.parse(`${data.responseText}}}`)\n } catch (e) {\n try {\n fixed_response = JSON.parse(`${data.responseText}]\"}}`)\n } catch (e) {\n try {\n fixed_response = JSON.parse(`${data.responseText}\"]\"}}`)\n } catch (e) {}\n }\n fixed_response = null\n }\n\n if (callback !== undefined) {\n callback(fixed_response)\n }\n })\n}\n\nfunction setTimestamp() {\n const current_date = new Date()\n if (checkLocalStorage()) {\n localStorage.setItem('last_time_write', current_date)\n } else {\n last_time_write = current_date\n }\n}\n\nfunction cleanTimestamp() {\n if (checkLocalStorage()) {\n localStorage.removeItem('last_time_write')\n } else {\n last_time_write = null\n }\n}\n\nfunction checkTimestamp(callback) {\n const current_date = new Date()\n last_time_write = localStorage.getItem('last_time_write')\n\n if (last_time_write === null) {\n callback()\n setTimestamp()\n } else if (current_date > dayjs(new Date(last_time_write)).add('1', 'hour')) {\n callback()\n setTimestamp()\n }\n}\n\nfunction get(callback, callback2) {\n if ($.cookie('remove_browsing') !== undefined) {\n clearData()\n setCookie('remove_browsing', false, -1)\n }\n if ($.cookie('clean_timestamp') !== undefined) {\n cleanTimestamp()\n setCookie('clean_timestamp', false, -1)\n }\n if ($.cookie('browsing_session') !== undefined) {\n if (localStorage.getItem('browsing_session') === null) {\n $.ajax({\n dataType: 'JSON',\n type: 'GET',\n url: '/api/v3/browsing_sessions/',\n })\n .success(function (data) {\n saveData(data)\n callback(data)\n if (typeof callback2 === 'function') callback2()\n })\n .error(function (data) {})\n } else {\n callback(localStorage.getItem('browsing_session'))\n if (typeof callback2 === 'function') callback2()\n }\n } else {\n clearData()\n getCookie()\n personalizeInterface({ redis_values: 'undefined', redis_key: 'undefined' })\n if (typeof callback2 === 'function') callback2()\n }\n}\n\nfunction getUserLevel() {\n const storage = JSON.parse(localStorage.getItem('browsing_session'))\n const storageData = storage ? JSON.parse(localStorage.getItem('browsing_session')).redis_values : {}\n return storage && storageData && storageData.level ? +storageData.level : 1\n}\n\nfunction isUserLevelSamePageLevel(data) {\n let level = 0\n try {\n level = data.redis_values.level\n } catch (exception) {\n console.log('isUserLevelSamePageLevel error')\n }\n const view_level = $('body').data('constrained-view-level')\n\n // If there are any data that does not exists asume the level is the same\n return (\n typeof view_level === 'undefined' ||\n view_level === 0 ||\n level === 0 ||\n typeof level === 'undefined' ||\n level.toString() === view_level.toString()\n )\n}\n\nfunction force_browser_to_reload() {\n let url = window.location.href\n const cache_param = `cache=${Date.now()}&${Date.now()}`\n const params = url.split('?')\n if (params.length > 1) {\n url += '&'\n } else {\n url += '?'\n }\n if (window.location.href.indexOf('cache=') === -1) {\n window.location.assign(url + cache_param)\n }\n}\n\nfunction readRedis(callback) {\n if (callback !== undefined) {\n callbacks.push(callback)\n }\n\n if (!initialized) {\n get(\n function (data) {\n if (typeof data === 'string') {\n data = JSON.parse(data)\n }\n if (data !== undefined) {\n if (!isUserLevelSamePageLevel(data)) {\n force_browser_to_reload()\n }\n personalizeInterface(data)\n checkTimestamp(function () {\n addGreetings(data)\n })\n getCookie(data)\n }\n initialized = true\n },\n function () {\n executeCallbacks()\n }\n )\n } else {\n executeCallbacks()\n }\n}\n\nwindow.IB.browsing_sessions = {\n readRedis,\n clearData,\n getData,\n saveData,\n isUserLogged,\n getUserLevel,\n setUserImage,\n store,\n storeHash,\n}\n\ndocument.addEventListener('DOMContentLoaded', () => {\n IB.browsing_sessions.readRedis()\n})\n\nexport { getUserLevel }\n","import dayjs from 'dayjs'\nimport customParseFormat from 'dayjs/plugin/customParseFormat'\nimport utc from 'dayjs/plugin/utc'\n\nimport { getPrefix } from '../../../core/utils/locale.js'\n\ndayjs.extend(utc)\ndayjs.extend(customParseFormat)\n\nconst get_data = null\nlet not_session_data = null\nconst version_data = 15\n\n/**\n * This function makes a GET request to the specified URL and retries up to a specified number of times if the request fails.\n * It ensures that only one request is in progress at a time. If there is already a request in progress, it stores the callbacks\n * and executes them when the request is successful.\n *\n * @param {function} callback - The callback function to be executed when the request is successful.\n * @param {number} maxAttempts - The maximum number of attempts to make the request.\n */\nlet isFastbookingDataRequestInProgress = false\nlet fastbookingDataCallbacks = []\n\nfunction get(callback, maxAttempts = 10) {\n const market_id = $('html').attr('data-market-id')\n const url = `${getPrefix()}/ajax_contents/fastbooking_data/?v=${version_data}&market_id=${market_id}`\n\n // If a request is already in progress, store the callback and return\n if (isFastbookingDataRequestInProgress) {\n fastbookingDataCallbacks.push(callback)\n return\n }\n\n let attempts = 0\n\n // Function to make the request\n function makeRequest() {\n // If the maximum number of attempts has been reached, stop making requests\n if (attempts >= maxAttempts) {\n isFastbookingDataRequestInProgress = false\n return\n }\n\n // Make the request\n fetch(url)\n .then(response => {\n // If the response is not ok, throw an error\n if (!response.ok) {\n throw new Error('Network response was not ok')\n }\n // If the response is ok, return the data\n return response.json()\n })\n .then(data => {\n // If the request is successful, execute the callback and all stored callbacks\n isFastbookingDataRequestInProgress = false\n saveData(data)\n callback(data)\n fastbookingDataCallbacks.forEach(cb => cb(data))\n // Clear the array of callbacks\n fastbookingDataCallbacks = []\n })\n .catch(error => {\n // If the request fails, increment the attempts counter and retry the request after 1 second\n attempts++\n setTimeout(makeRequest, 1000)\n })\n }\n\n // Start the request\n const fbData = getData()\n\n if (fbData) {\n callback(fbData)\n return\n }\n\n isFastbookingDataRequestInProgress = true\n makeRequest()\n}\n\nfunction notSessionData() {\n return not_session_data\n}\n\nfunction saveData(res) {\n const d = res\n d.creation_date = dayjs().utc().valueOf()\n d.version = version_data\n if (checkSessionStorage()) {\n sessionStorage.setItem('fastbooking_data', JSON.stringify(d))\n } else {\n not_session_data = JSON.stringify(d)\n }\n}\n\nfunction isHotelsDataAvailable() {\n return checkSessionStorage() ? Boolean(sessionStorage.getItem('fastbooking_data')) : Boolean(not_session_data)\n}\n\nexport function asyncGetData() {\n return new Promise((resolve, reject) => {\n get(hotelsData => {\n resolve(hotelsData)\n })\n })\n}\n\nexport function getData() {\n let hotels_data\n if (checkSessionStorage()) {\n hotels_data = JSON.parse(sessionStorage.getItem('fastbooking_data'))\n } else {\n hotels_data = JSON.parse(notSessionData())\n }\n return hotels_data\n}\n\nfunction getHotelById(hotelId) {\n if (!hotelId) return\n\n const fbData = getData()\n\n if (!fbData) return\n\n const hotelsData = fbData.hotels[1]\n return hotelsData.find(hotel => hotel.id === hotelId)\n}\n\nfunction checkSessionStorage() {\n try {\n const uid = new Date()\n sessionStorage.setItem(uid, uid)\n sessionStorage.removeItem(uid)\n return true\n } catch (exception) {\n return false\n }\n}\n\nfunction checkDateAndVersion() {\n let data = sessionStorage.getItem('fastbooking_data')\n if (!data) return false\n\n data = JSON.parse(data)\n\n if (data.creation_date === undefined) {\n sessionStorage.removeItem('fastbooking_data')\n return false\n }\n\n let response = dayjs(dayjs()).diff(dayjs(data.creation_date).format(), 'hours') < 24\n if (response) response = data.version === version_data\n if (!response) sessionStorage.removeItem('fastbooking_data')\n\n return response\n}\n\nconst HotelsData = {\n get,\n getData,\n asyncGetData,\n getHotelById,\n check: checkDateAndVersion,\n isHotelsDataAvailable,\n}\n\nwindow.IB.hotels_data = HotelsData\n\nexport default HotelsData\n","import dayjs from 'dayjs'\nimport customParseFormat from 'dayjs/plugin/customParseFormat'\nimport localizedFormat from 'dayjs/plugin/localizedFormat'\n\nimport { setAsyncDayjsLocale } from '../../../core/utils/locale'\nimport { closeLoader } from '../../../elements/wait_loading/wait_loading'\nimport fastbooking from '../../../shared/fastbooking/ibh_fastbooking'\nimport { updatePricesInfo } from '../../../shared/update_prices/update_prices'\nimport { setOnCachedPage } from '../../../utils/prevoius_page_cache'\n\ndayjs.extend(customParseFormat)\n\nsetAsyncDayjsLocale()\n\ndayjs.extend(localizedFormat)\ndayjs.extend(customParseFormat)\n\nexport const onPageReady = () => {\n updatePricesInfo()\n\n if ($.cookie('user_the_club') !== undefined) {\n $('.main-header-content').find('[data-visible-to-the-club-user=\"false\"]').closest('li').remove()\n }\n\n const $js_reset_password = $('.js-reset-password')\n\n if ($js_reset_password.length && IB.currentDevice === 'mobile') {\n $('.fz-row.save').append($js_reset_password.closest('.fz-col'))\n }\n\n $('.formikation').find('input[type=checkbox], input[type=radio], select').not('.chosen-select').formikation()\n\n if ($('.payment-newsletter-container').children().length > 1)\n $('.payment-newsletter-container').addClass('with-newsletter')\n\n if ($('.form-wrapper form').length > 0) {\n $('.form-wrapper form').parsley()\n }\n\n $('.fancybox-video').fancybox({\n toolbar: false,\n smallBtn: true,\n type: 'iframe',\n baseClass: 'iframe-youtube',\n spinnerTpl: '
',\n })\n\n $('.fancybox').fancybox({\n padding: 0,\n maxWidth: 1000,\n autoDimensions: true,\n autoSize: true,\n showNavArrows: false,\n beforeClose() {\n if ($('.date-picker-wrapper').is(':visible')) {\n $('.date-picker-wrapper').hide()\n }\n },\n })\n\n $('[data-fancybox]').fancybox({\n width: 'auto',\n height: 'auto',\n autoSize: true,\n scrolling: 'hidden',\n autoDimensions: true,\n showNavArrows: false,\n helpers: {\n overlay: {\n locked: true,\n },\n },\n beforeClose() {\n if ($('.date-picker-wrapper').is(':visible')) {\n $('.date-picker-wrapper').hide()\n }\n },\n padding: 0,\n margin: [10, 10, 10, 10],\n })\n\n // fix/PY04776-590--gestionar-mis-reservas-datarangepicker\n // TODO I think all this conditional can be deleted because it is the same as in reservarion_management_form.js.\n\n if ($('.single-datepicker-cnt').length > 0) {\n const language = document.documentElement.getAttribute('data-js-lang')\n const date_format = $('html').attr('data-date-format')\n const start_of_week = $('html').attr('data-start-of-week')\n\n $('.single-datepicker').each(function () {\n const $el = $(this)\n const singleMonth = $el.data('single-month') === undefined ? 'auto' : true\n\n $el\n .dateRangePicker({\n autoClose: true,\n format: date_format,\n startOfWeek: start_of_week,\n language,\n startDate: $el.hasClass('complaint-datepicker') ? 0 : new dayjs().format(date_format),\n singleDate: true,\n singleMonth,\n showTopbar: false,\n })\n .on('datepicker-opened', function (ev, picker) {\n $el.prop('readonly', true)\n if ($el.hasClass('complaint-datepicker')) picker.relatedTarget.css('left', $el.offset().left)\n })\n .on('datepicker-first-date-selected', function (ev, picker) {\n $el.prop('readonly', false)\n $el.val(dayjs(picker).format(date_format))\n })\n })\n\n $('.single-datepicker-cnt > span').on('click', function (e) {\n e.stopPropagation()\n $(this).parent().find('.single-datepicker').data('dateRangePicker').open()\n })\n }\n\n if (IB.currentDevice === 'mobile') {\n $('[data-mobile-panel]').mobilepanel()\n }\n\n $('.footer-newsletter, .sidebar-newsletter-suscription, .custom-newsletter').parsley()\n\n /*\n On Safari browsers, previous pages are cached.\n setOnCachedPage restore the page by default.\n */\n setOnCachedPage(function () {\n if (document.querySelector('#wait-loading').classList.contains('is-open')) {\n // Removes loading state\n closeLoader()\n }\n })\n}\n$(function () {\n onPageReady()\n\n $(document).on('click', '.fancybox-iframe-link', function (e) {\n e.preventDefault()\n const $this = $(this)\n\n if ($this.hasClass('availability')) {\n var width = '1360px',\n height = '700px'\n } else if ($this.hasClass('agents')) {\n var width = '1000px',\n height = '542px'\n } else if ($this.hasClass('reset-password')) {\n var width = '600px',\n height = '400px'\n } else {\n var width = '462px',\n height = '417px'\n }\n\n $.fancybox.open({\n src: $this.attr('href'),\n // width: dimensions ? 800: 1200,\n type: 'iframe',\n toolbar: false,\n smallBtn: true,\n iframe: {\n css: {\n width,\n height,\n },\n },\n beforeClose() {\n if ($('.date-picker-wrapper').is(':visible')) {\n $('.date-picker-wrapper').hide()\n }\n },\n })\n })\n\n // Closes every open fancybox\n $(document).on('click', '[data-fancybox-close]', function (e) {\n $.fancybox.close()\n })\n})\n\ndocument.addEventListener('setPromocodeInFastbooking', e => {\n fastbooking.setPromocode(e.detail)\n})\n\n$(document)\n .on('click', '.burger-search', function (e) {\n e.preventDefault()\n $('#burgermenu-blocker').trigger('click')\n })\n .on('submit', '.js-login-form form', function () {\n $(this).closest('.block-form').find('.b-loader').removeClass('hidden')\n })\n .on('change', '.autoform', function () {\n $(this).trigger('submit')\n })\n .on('click', '[data-go]', function (e) {\n e.preventDefault()\n const target = this.hash || ''\n let offset = 0\n\n const $target = $(target)\n if ($target.length != 0) {\n offset = $target.offset().top\n if (!$target.is(':visible')) {\n e.preventDefault()\n offset = $target.offsetParent().offset().top\n }\n if (this.hash === '#availabity-dates') {\n $target.find('.btn-down').not('.active').trigger('click')\n }\n }\n\n $('html,body').animate({ scrollTop: offset }, 500)\n })\n .on('click', '[data-show-href]', function (e) {\n e.preventDefault()\n const $el = $(this)\n\n $($el.attr('href')).toggle()\n $el.toggleClass('active')\n })\n .on('click', '[data-show]', function (e) {\n e.preventDefault()\n const $el = $(this)\n\n if ($el.closest('.hotel-services-list').length) {\n $($el.attr('href')).toggleClass('hidden')\n $el.toggleClass('active')\n\n if ($el.hasClass('room-details')) {\n $el.attr('aria-expanded', $el.hasClass('active'))\n }\n\n const $hotel_services_list = $el.closest('.hotel-services-list')\n if (IB.currentDevice === 'mobile' && $hotel_services_list.hasClass('opened')) {\n $('html,body').animate({ scrollTop: $hotel_services_list.offset().top - 60 }, 500)\n }\n $hotel_services_list.toggleClass('opened')\n if ($el.hasClass('active')) $el.html($el.data('opened'))\n else $el.html($el.data('closed'))\n } else {\n $el.siblings($el.attr('href')).toggle()\n $el.toggleClass('active')\n }\n\n if ($el.closest('.filters-fastbooking-results').length) {\n $('.filters-fastbooking-results').toggleClass('active')\n }\n\n if ($(this).closest('.fancybox-inner').length) {\n if ($.fancybox.getInstance()) {\n $.fancybox.getInstance().update()\n }\n }\n\n if ($('.destination-index-header-module').find($el).attr('href') === '#destination-index-fb') {\n $('.destination-index-header-module').find('[data-show]').hide()\n }\n\n if ($el.attr('href') === '#offers-drop-down' && IB.currentDevice === 'mobile') {\n const el_right = $el.offset().left + $el.outerWidth()\n\n $('#offers-drop-down').css({\n right: 'auto',\n left: el_right - $('#offers-drop-down').outerWidth() + 10,\n })\n }\n\n if ($el.attr('id') === 'poi-categories-collapser') {\n $el.closest('.poi-categories-cnt').toggleClass('hidden-dropdown')\n }\n\n if ($el.attr('id') === 'poi-how-to-collapser') {\n $el.closest('.poi-how-to-cnt').toggleClass('hidden-dropdown')\n }\n })\n\n // Detect click outside map buttons element to hide dropdown\n .on('click', function (e) {\n const $element = $('.js-map-options .js-map-dropdown')\n const target = e.target\n\n $element.each(function () {\n const $el = $(this)\n if (!$el[0].contains(target) && !$el.hasClass('hidden-dropdown')) {\n $el.find('.selector.active').removeClass('active')\n $el.addClass('hidden-dropdown')\n }\n })\n })\n\n .on('click', '[data-show-sub-menu]', function (e) {\n e.preventDefault()\n const $submenu = $(this).next('div').length ? $(this).next('div') : $(this).next('div')\n $('[data-show-sub-menu]').not($(this)).removeClass('is-displayed')\n $('[data-out]:visible').not($submenu).hide()\n $submenu.toggle()\n $(this).toggleClass('is-displayed')\n if ($submenu.data('out') === undefined) $submenu.attr('data-out', true)\n if ($submenu.attr('id') === undefined) {\n let id = this.hash\n id = id.substring(1)\n $submenu.attr('id', id)\n }\n })\n\n .on('click', '[data-slider]', function (e) {\n e.preventDefault()\n $($(this).attr('href')).slideToggle('fast')\n $(this).toggleClass('active')\n if ($(this).closest('.fancybox-inner').length) {\n $.fancybox.getInstance().update()\n }\n })\n .on('mouseup', function (e) {\n const $container = $('[data-out]:visible')\n const $trigger = $(`[href=\"#${$container.attr('id')}\"]`)\n\n if (!$container.length) return\n\n if (\n !$container.is(e.target) && // if the target of the click isn't the container...\n !$trigger.is(e.target) &&\n !$trigger.is($(e.target).closest('[data-show]')) &&\n $container.has(e.target).length === 0 && // ... nor a descendant of the container\n !$('.date-picker-wrapper').is(e.target) &&\n $('.date-picker-wrapper').has(e.target).length === 0\n ) {\n if ($container.attr('id') === 'people-popover') {\n $container.find('.close-people-popover').trigger('click')\n } else if ($(e.target).closest('.language-selector').length === 0) {\n $trigger.removeClass('active is-displayed')\n $container.hide()\n if ($('.destination-index-header-module').find($container).attr('id') === 'destination-index-fb') {\n $('.destination-index-header-module').find('[data-show]').show()\n }\n }\n }\n })\n\n .on('click', '.gallery', function (e) {\n e.preventDefault()\n\n const $el = $(this)\n const $slides = $el\n .closest('.card')\n .find('.swiper-lazy')\n .clone()\n .map(function () {\n return { src: $(this).attr('data-original') }\n })\n .toArray()\n const with_filter = $el.closest('.swiper-container').find('.with-filter').length ? 'with-filter' : ''\n\n $.fancybox.open($slides, {\n baseClass: with_filter,\n })\n })\n .on('click', '#activation-link', function (e) {\n e.preventDefault()\n $.ajax({\n dataType: 'script',\n type: 'GET',\n url: $(this).attr('href'),\n })\n })\n .on('paste', '#iberostar_api_user_password_repeat, #password_repeat', function (e) {\n e.preventDefault()\n })\n","/*\n Executes this callback only on cached previous pages.\n*/\n\nexport function setOnCachedPage(callback){\n window.addEventListener('pageshow', function(event) {\n if (event.persisted) {\n callback();\n }\n });\n}\n","import './tooltip.scss';\n\n//\n// Opens tooltip in desktop, popup in responsive\n//\n// In order to make the fancybox work in responsive\n// the attribute desc_html presence is mandatory.\n// This is a temporary condition as we will unify\n// the funcionality with tooltip discount type's\n// in near future.\nfunction init($tooltip) {\n if (!$tooltip.length) return;\n if (IB.currentDevice === 'desktop' || !$tooltip.data('mobile-fancybox')) {\n init_desktop_tooltip($tooltip);\n } else if (IB.currentDevice !== 'desktop' && $tooltip.data('mobile-fancybox')) {\n (IB.currentDevice !== 'mobile') && $tooltip.closest('.filters-block').length ? init_desktop_tooltip($tooltip) : init_responsive_popup($tooltip);\n }\n}\n\nfunction get_attribute_if_available($el, attr) {\n return typeof $el.data(attr) === 'undefined' ? '' : $el.data(attr);\n}\n\nfunction init_desktop_tooltip($tooltip) {\n let type = $tooltip.data('tooltip');\n let title = get_attribute_if_available($tooltip, 'title');\n let desc = get_attribute_if_available($tooltip, 'desc');\n let desc_html = get_attribute_if_available($tooltip, 'desc-html');\n let position = get_attribute_if_available($tooltip, 'position');\n let id = get_attribute_if_available($tooltip, 'id');\n let $template = $('
');\n if (id) {\n $template.attr('id', id);\n }\n $template.empty();\n if (title) $template.append('

' + title + '

');\n if (desc && !desc_html) $template.append('
' + desc + '
');\n if (!desc && desc_html) $template.append('
' + $(desc_html).html() + '
');\n\n $tooltip.focus(function () {\n $tooltip.trigger('mouseenter');\n });\n $tooltip.blur(function () {\n $tooltip.trigger('mouseleave');\n });\n $tooltip.hover(function () {\n $tooltip.append($template);\n }, function () {\n $tooltip.find('.basic-tooltip').remove();\n });\n $tooltip.on('focus', function () {\n $tooltip.append($template);\n });\n $tooltip.on('blur', function () {\n $tooltip.find('.basic-tooltip').remove();\n });\n $tooltip.on('click', function (e) {\n if (e.target.href === undefined) e.preventDefault();\n e.stopImmediatePropagation();\n });\n}\n\nfunction init_responsive_popup($tooltip) {\n $tooltip.unbind('click');\n $tooltip.on('click', function (e) {\n e.preventDefault();\n e.stopImmediatePropagation();\n let $this = $(this);\n let title = get_attribute_if_available($this, 'title');\n let desc = get_attribute_if_available($this, 'desc');\n let desc_html = get_attribute_if_available($this, 'desc-html');\n let $template = $('
');\n\n if (title) $template.append('

' + title + '

');\n if (desc && !desc_html) $template.append('
' + desc + '
');\n if (!desc && desc_html) $template.append('
' + $(desc_html).html() + '
');\n\n $.fancybox.open($template, {\n beforeShow: function () {\n ScrollLock.on();\n },\n afterClose: function () {\n ScrollLock.off();\n }\n });\n });\n}\n\nfunction destroy_tooltip($tooltip) {\n $tooltip.off('focus');\n $tooltip.off('blur');\n $tooltip.off('mouseenter');\n $tooltip.off('mouseleave');\n $tooltip.off('click');\n}\n\nconst Tooltip = {\n init: init,\n destroy: destroy_tooltip\n};\n\nwindow.IB.tooltip = Tooltip;\n\nexport default Tooltip;\n\n$(function () {\n $('[data-tooltip]').each(function (index, element) {\n Tooltip.init($(element));\n });\n});\n","import _find from 'lodash/find'\n\nimport { readCookie, setCookie } from '../../utils/cookie_manager'\n\n// function from jQuery number plug-in 2.1.5\n$.number = function (number, decimals, dec_point, thousands_sep) {\n // Set the default values here, instead so we can use them in the replace below.\n thousands_sep =\n typeof thousands_sep === 'undefined'\n ? new Number(1000).toLocaleString() !== '1000'\n ? new Number(1000).toLocaleString().charAt(1)\n : ''\n : thousands_sep\n dec_point = typeof dec_point === 'undefined' ? new Number(0.1).toLocaleString().charAt(1) : dec_point\n decimals = !isFinite(+decimals) ? 0 : Math.abs(decimals)\n\n // Work out the unicode representation for the decimal place and thousand sep.\n const u_dec = `\\\\u${`0000${dec_point.charCodeAt(0).toString(16)}`.slice(-4)}`\n const u_sep = `\\\\u${`0000${thousands_sep.charCodeAt(0).toString(16)}`.slice(-4)}`\n\n // Fix the number, so that it's an actual number.\n number = `${number}`\n .replace('.', dec_point) // because the number if passed in as a float (having . as decimal point per definition) we need to replace this with the passed in decimal point character\n .replace(new RegExp(u_sep, 'g'), '')\n .replace(new RegExp(u_dec, 'g'), '.')\n .replace(new RegExp('[^0-9+-Ee.]', 'g'), '')\n\n const n = !isFinite(+number) ? 0 : +number\n let s = ''\n const toFixedFix = function (n, decimals) {\n return `${+`${Math.round(`${n}`.indexOf('e') > 0 ? n : `${n}e+${decimals}`)}e-${decimals}`}`\n }\n\n // Fix for IE parseFloat(0.55).toFixed(0) = 0;\n s = (decimals ? toFixedFix(n, decimals) : `${n}`.split('.')[0]).split('.') // Do not round if there are no decimals. Math.round(n) ---> n).split('.')[0]\n if (s[0].length > 3) {\n s[0] = s[0].replace(/\\B(?=(?:\\d{3})+(?!\\d))/g, thousands_sep)\n }\n if ((s[1] || '').length < decimals) {\n s[1] = s[1] || ''\n s[1] += new Array(decimals - s[1].length + 1).join('0')\n }\n return s.join(dec_point)\n}\n\nfunction init() {\n let currency = readCookie('currency') || $('body').data('default-currency')\n const base_domain = document.domain.split('.').slice(-2).join('.')\n const shared_domain = `.${base_domain}`\n\n //Remove cookie in domain\n setCookie('currency', '-1', '-1', null)\n\n //If cookie doesnt exists load default cookie for url user market.\n if (document.querySelector(`.currency-selector option[value=\"${currency}\"]`) == null) {\n currency = $('body').data('default-currency')\n setCookie('currency', currency, 365, null, shared_domain)\n }\n\n if (currency) {\n updatePrices(currency)\n }\n\n if (typeof readCookie('currency') === 'undefined') {\n setCookie('currency', currency, 365, null, shared_domain)\n }\n updateCurrencySelectors(currency)\n\n // on change we update all prices of page\n $(document).on('change', '.currency-form select', function () {\n currency = $(this).val()\n\n if (currency) {\n try {\n utag_data.page_currency = currency\n } catch (error) {\n console.log(error)\n }\n }\n $.fancybox.open({\n src: '#msg-currency-change',\n autoSize: false,\n width: 476,\n height: 'auto',\n padding: 0,\n wrapCSS: 'fancybox-currency-change',\n backFocus: false,\n beforeClose() {\n if (!$('html').hasClass('updated-currency')) {\n currency = readCookie('currency')\n }\n setCookie('currency', currency, 365, null, shared_domain)\n updatePrices(currency)\n updateCurrencySelectors(currency)\n $('html').removeClass('updated-currency')\n },\n })\n })\n\n $(document).on('price_displayed', function () {\n updatePrices(currency)\n })\n\n $(document).on('click', '#msg-currency-change .update-currency', function () {\n updatePrices(readCookie('currency') || $('body').data('default-currency'))\n updateCurrencySelectors(currency)\n // Se añade un clase temporal para saber que la moneda fue cambiada\n $('html').addClass('updated-currency')\n\n $.fancybox.close()\n })\n\n $(document).on('click', '#msg-currency-change .no-update-currency', function () {\n $.fancybox.close()\n })\n\n $(document).on('click', '.hotel-list-link', function (event) {\n event.preventDefault()\n\n if (IB.currentDevice !== 'mobile') {\n $('#hotels-filter-map').hide()\n $('[data-block-comparator]').addClass('hidden current')\n $(this).addClass('active')\n $('.hotel-map-link').removeClass('active disabled')\n $('.js-hotel-comparison-link').removeClass('active disabled')\n $('.current[data-block-list]').removeClass('hidden current')\n }\n })\n}\n\n// change aria-selected attr of tabs when change selected\n$(document).on('click', '.tabs-menu a', function () {\n $('.tabs-menu a').not(this).attr('aria-selected', false)\n $(this).attr('aria-selected', true)\n})\n\nfunction forceUpdate($block) {\n const currency = readCookie('currency') || $('body').data('default-currency')\n // if (currency && currency != \"DEF\") {\n updatePrices(currency, $block)\n // }\n}\n\n$(document).on('updatePrices', function (event) {\n const currency = readCookie('currency') || $('body').data('default-currency')\n updatePrices(currency)\n})\n\nfunction updatePrices(currency, $block) {\n const user_resident_type = readCookie('resident')\n let $prices_to_convert\n if ($block !== undefined && $block !== null && $block.length) {\n $prices_to_convert = $block.find('[data-curr-converter]')\n } else {\n $prices_to_convert = $('[data-curr-converter]')\n }\n\n $.each($prices_to_convert, function (index, element) {\n const $this = $(this)\n const converter_type = $this.data('curr-converter')\n let price_amount = $this.data('price')\n let price_currency = $this.data('currency')\n\n if (price_currency === undefined) return true // return true equals continue in $.each. Won't break the loop. Continue to next iteration.\n\n if (typeof user_resident_type !== 'undefined') {\n const residentPriceData = $this.data('resident-price')\n const resident_type = $this.data('resident-type')\n if (typeof residentPriceData !== 'undefined' && residentPriceData > 0 && user_resident_type === resident_type) {\n price_amount = residentPriceData\n }\n }\n\n if (price_currency != '%') {\n if (price_currency == 'MXN$') {\n price_currency = 'MXN'\n price_amount = price_amount.replace(',', '')\n }\n const conversions = window.IB[`conversions_from_${price_currency.toLowerCase()}`]\n let to_currency = _find(conversions, function (c) {\n return c.to === currency\n })\n if (typeof to_currency !== 'undefined') {\n const result_amount = price_amount * to_currency.factor\n to_currency = _find(window.IB.currencies_data, function (c) {\n return c.code === (currency == 'DEF' ? price_currency : currency)\n })\n\n const price_with_decimals = false // Deactivated. Read from config maybe?\n const result_formatted = $.number(\n result_amount,\n price_with_decimals ? to_currency.num_dec : 0,\n to_currency.fr_del,\n to_currency.th_del\n )\n const priceClasses = $(element).find('.price').attr('class')\n const coinClasses = $(element).find('.coin').attr('class')\n const html_price = `${result_formatted}`\n const html_cur_code = `${to_currency.code}`\n const html_cur_symbol = `${to_currency.symbol}`\n const html_tag = to_currency.format\n .replace('{code}', html_cur_code)\n .replace('{symbol}', html_cur_symbol)\n .replace('{amount}', html_price)\n if (converter_type == 'inline') {\n $(element).find('.coin').remove()\n $(element).find('.price').replaceWith(html_tag)\n } else {\n $(element).html(html_tag)\n }\n }\n }\n })\n $(document).trigger('currency_updated')\n\n // Event created for non-JQuery users\n const event = new Event('currency_updated')\n document.dispatchEvent(event)\n}\n\nfunction buildTagsFromPrice(price) {\n let price_amount = 0\n let html_tag = ''\n let currency = readCookie('currency') || $('body').data('default-currency')\n\n if (currency && currency != '%') {\n if (currency == 'MXN$') {\n currency = 'MXN'\n price_amount = price_amount.replace(',', '')\n }\n price_amount = +price_amount\n const conversions = window.IB[`conversions_from_${currency.toLowerCase()}`]\n let to_currency = _find(conversions, function (c) {\n return c.to === currency\n })\n if (typeof to_currency !== 'undefined') {\n const result_amount = price * to_currency.factor\n to_currency = _find(window.IB.currencies_data, function (c) {\n return c.code === currency\n })\n\n const price_with_decimals = false // Deactivated. Read from config maybe?\n const result_formatted = $.number(\n result_amount,\n price_with_decimals ? to_currency.num_dec : 0,\n to_currency.fr_del,\n to_currency.th_del\n )\n const html_price = `${result_formatted}`\n const html_cur_code = `${to_currency.code}`\n const html_cur_symbol = `${to_currency.symbol}`\n html_tag = to_currency.format\n .replace('{code}', html_cur_code)\n .replace('{symbol}', html_cur_symbol)\n .replace('{amount}', html_price)\n }\n }\n\n return html_tag\n}\n\nfunction updateCurrencySelectors(currency) {\n const currency_form_option = document.querySelector(`.currency-form option[value=\"${currency}\"]`)\n const currency_text = currency_form_option !== null ? currency_form_option.value : null\n if (currency_text === null) return\n\n if (document.querySelector('.currency-form span.fk-select-label') !== null)\n document.querySelector('.currency-form span.fk-select-label').textContent = currency_text\n const $select = $('.currency-form select')\n let present = false\n\n $select.find('option').each(function () {\n present = $(this).val() === currency ? true : present\n })\n\n currency = !present ? 'DEF' : currency\n\n $select.val(currency)\n const currency_icon = $('.currency-form span.fk-select')\n currency_icon.removeClass()\n currency_icon.addClass(`fk-select currency-${currency}`)\n $('.currency-form span.fk-select-label').text(currency_text)\n\n // Update mobile\n const currency_selector_text = $('.mobile-menu').find('.currency-selector').find('.link').text()\n const selector_text_currency_value = currency_selector_text.split(':')\n\n $('.mobile-menu').find('.currency-selector').find('.link').text(`${selector_text_currency_value[0]}: ${currency}`)\n}\n\nwindow.IB.currencyForm = {\n init,\n forceUpdate,\n updateSelector: updateCurrencySelectors,\n buildTagsFromPrice,\n}\n\nIB.currencyForm.init()\n\n$(function () {\n // Show comparator tab if url param 'showComparator' is present and there's a comparator in page\n const $comparatorLink = $('.js-hotel-comparison-link')\n if (\n IB.urlParser.getParam('showComparator') &&\n $comparatorLink.length &&\n $('[data-block-comparator]').length &&\n !$('[data-block-comparator]:visible').length\n ) {\n $comparatorLink.trigger('click')\n $(window).load(function () {\n $('html, body').animate(\n {\n scrollTop: $comparatorLink.offset().top - 50,\n },\n 500\n )\n })\n }\n})\n","import { setCookies } from '../../utils/cookie_manager'\n\nfunction getDeviceId() {\n const device_id = localStorage.getItem('indigitall.repository.DEVICE_ID')\n return device_id\n}\n\nfunction getDeviceType() {\n const device_type = localStorage.getItem('indigitall.repository.DEVICE_TYPE')\n return device_type\n}\n\nfunction storeDeviceDataInCookies(device_id, device_type) {\n const cookies = []\n\n if ($.cookie('idevice_id') != device_id) {\n cookies.push({ name: 'idevice_id', value: device_id })\n }\n if ($.cookie('idevice_type') != device_type) {\n cookies.push({ name: 'idevice_type', value: device_type })\n }\n if (cookies.length > 0) {\n setCookies(cookies)\n }\n}\n\nfunction loadDeviceDataToForm() {\n if ($('.device-id-first').length > 0) {\n const device_id = getDeviceId()\n const device_type = getDeviceType()\n\n storeDeviceDataInCookies(device_id, device_type)\n\n if (device_id == undefined || device_type == undefined) {\n // indigitall.deviceGet((device) => {\n // // success function\n // },() => {\n // // error function\n // });\n } else {\n const { first_element, second_element, third_element, fourth_element, fifth_element } =\n decomposeDeviceIdForWaf(device_id)\n\n $('.device-id-first').val(first_element)\n $('.device-id-second').val(second_element)\n $('.device-id-third').val(third_element)\n $('.device-id-fourth').val(fourth_element)\n $('.device-id-fifth').val(fifth_element)\n $('.device-type').val(device_type)\n }\n }\n}\n\nfunction decomposeDeviceIdForWaf(device_id) {\n const get_values = device_id.split('-')\n\n return {\n first_element: get_values[0],\n second_element: get_values[1],\n third_element: get_values[2],\n fourth_element: get_values[3],\n fifth_element: get_values[4],\n }\n}\n\nfunction sendDeviceData() {\n const device_id = getDeviceId()\n const device_type = getDeviceType()\n storeDeviceDataInCookies(device_id, device_type)\n\n if (device_id != undefined && device_id != null && device_type != undefined) {\n const { first_element, second_element, third_element, fourth_element, fifth_element } =\n decomposeDeviceIdForWaf(device_id)\n\n $.ajax({\n dataType: 'JSON',\n type: 'POST',\n url: '/ajax_contents/assign_device/',\n data: {\n device_first_element: first_element,\n device_second_element: second_element,\n device_third_element: third_element,\n device_fourth_element: fourth_element,\n device_fifth_element: fifth_element,\n device_id: true,\n device_type,\n },\n success(data) {\n if (data && data['success']) {\n const browsing_data = IB.browsing_sessions.getData()\n if (browsing_data != null && browsing_data['redis_values'] != null) {\n browsing_data['redis_values']['device_id'] = data['id']\n browsing_data['redis_values']['device_type'] = data['type']\n IB.browsing_sessions.saveData(browsing_data)\n } else {\n IB.browsing_sessions.storeHash({ device_id: data['id'], device_type: data['type'] })\n }\n } else {\n console.log('Error al asignar los datos de dispositivo')\n }\n },\n error() {\n console.log('Error al enviar los datos de dispositivo')\n },\n })\n }\n}\n\nwindow.IB.deviceDetector = {\n loadDeviceDataToForm,\n sendDeviceData,\n}\n\n$(function () {\n IB.deviceDetector.loadDeviceDataToForm()\n\n if (IB.browsing_sessions.getData() != null) {\n const device_type = IB.browsing_sessions.getData()['redis_values']['device_type']\n const logged_in = IB.browsing_sessions.getData()['redis_values']['logged_in']\n if (device_type === undefined && logged_in !== undefined) {\n IB.deviceDetector.sendDeviceData()\n }\n }\n})\n","/**\n * Calculates the total height of an element, including padding, border, and margins.\n *\n * @param {HTMLElement} element - The element for which the total height will be calculated.\n * @returns {number} - The total height of the element including padding, border, and margins.\n */\nexport const getTotalHeight = element => {\n if (element === null) return\n\n const { paddingTop, paddingBottom, borderTopWidth, borderBottomWidth, marginTop, marginBottom } =\n window.getComputedStyle(element)\n\n // Calculate total height with margins\n // Indicate decimal system, which is base 10, to avoid the Linter\n const totalHeightWithMargins =\n element.offsetHeight +\n parseInt(paddingTop, 10) +\n parseInt(paddingBottom, 10) +\n parseInt(borderTopWidth, 10) +\n parseInt(borderBottomWidth, 10) +\n parseInt(marginTop, 10) +\n parseInt(marginBottom, 10)\n\n return totalHeightWithMargins\n}\n","import { getTotalHeight } from '../../utils/get_total_height'\n\n/**\n * Adjusts the height of a container element based on the cumulative height of its child elements.\n *\n * @param {HTMLElement} contentElements - The container element whose height will be adjusted.\n */\nfunction showNumberElements(contentElements) {\n const numberVisibleElements = contentElements.getAttribute('data-n-visible-elements')\n\n if (!numberVisibleElements) return\n const elementWithDataHeight = Array.from(contentElements.querySelectorAll('[data-height]'))\n\n // Check if the data-height has not yet been loaded. Ex: In modal\n if (!elementWithDataHeight || elementWithDataHeight.length <= numberVisibleElements) return\n\n let heightTotal = 0\n\n for (let i = 0; i < numberVisibleElements; i++) {\n heightTotal += getTotalHeight(elementWithDataHeight[i])\n }\n\n // Mystery. Always over 1px, so it is subtracted.\n contentElements.style.height = `${heightTotal - 1}px`\n contentElements.setAttribute('data-total-height', heightTotal - 1)\n}\n\nexport function init(el) {\n const elements = el ? el : document.querySelectorAll('.js-is-truncable')\n\n if (!elements.length) return\n\n elements.forEach(elementTruncable => {\n const elementTruncated = elementTruncable.querySelector('.js-truncated')\n // check if element has content\n if (!elementTruncated || elementTruncated.textContent.trim().length < 300) {\n return\n }\n\n showNumberElements(elementTruncated)\n\n const toggleViewMoreButton = elementTruncable?.querySelector('.js-link-see-more')\n\n elementTruncated.classList.add('is-truncable')\n\n toggleViewMoreButton?.classList.remove('hidden')\n toggleViewMoreButton?.querySelector('.js-close').classList.add('hidden')\n\n toggleViewMoreButton?.addEventListener('click', function (e) {\n e.preventDefault()\n\n elementTruncated.classList.toggle('is-truncable')\n\n if (!elementTruncated.classList.contains('is-truncable')) {\n toggleViewMoreButton.classList.add('l-up')\n if (elementTruncable.classList.contains('opinion')) {\n toggleViewMoreButton.querySelector('.js-close').classList.remove('hidden')\n toggleViewMoreButton.querySelector('.js-more').classList.add('hidden')\n }\n } else {\n toggleViewMoreButton.classList.remove('l-up')\n if (elementTruncable.classList.contains('opinion')) {\n toggleViewMoreButton.querySelector('.js-close').classList.add('hidden')\n toggleViewMoreButton.querySelector('.js-more').classList.remove('hidden')\n }\n }\n\n // REB - Truncate div according to number of elements\n if (elementTruncated.getAttribute('data-total-height')) {\n if (elementTruncated.style.height !== '100%') {\n elementTruncated.style.height = '100%'\n } else {\n const totalHeight = elementTruncated.getAttribute('data-total-height')\n elementTruncated.style.height = `${totalHeight}px`\n }\n }\n })\n })\n}\n\nwindow.IB.truncable = {\n init,\n}\n\nIB.truncable.init()\n","$.fancybox.defaults.touch = false;\n"],"names":["galleryInitialized","initIbGallery","on","eventName","selector","handler","e","preventDefault","elem","target","closest","openLoader","then","blockJS","openMultiModal","$","catch","once","openStarPrestige","IB","currentPageType","isHotel","initHotelGallery","cookies","previous_hotel_headquarter_origin","readCookie","utag_data","extend","hotel_headquarter_origin","hotel_headquarter_origin_data","document","querySelector","dataset","hotelHeadquarterOrigin","push","name","value","hotel_headquarter_final_data","hotelHeadquarterFinal","hotel_headquarter_final","setCookies","getHotelHeadquarters","dayjs","customParseFormat","eventSessionLogout","Event","not_browsing_session_data","last_time_write","greetings","initialized","callbacks","checkLocalStorage","uid","Date","localStorage","setItem","removeItem","exception","saveData","res","JSON","stringify","isUserLogged","window","visitor_type_detector","is_agency","storage","parse","getItem","storageData","redis_values","logged_in","clearData","cookieManager","deleteCookies","dispatchEvent","getCookie","data","$link","$popup","length","undefined","attr","addClass","removeAttr","executeCallbacks","each","_","c","setNameToDiv","$div","dataAttr","truncate","split","message","replace","html","setUserImage","image_url","querySelectorAll","forEach","el","$user_letter","removeClass","charAt","find","currentDevice","hide","isHorizons","setHrefToLink","link","show","personalizeInterface","cookie","destination_url","last_hotel_url","level","horizons_level_text","level_text","horizons_level","setLevelToDiv","greetings_title_message","text","personalizeMenu","setCookie","$logged_menu","mobileMenu","$user_link","mobileHeader","setTimestamp","current_date","get","callback","callback2","ajax","dataType","type","url","success","error","redis_key","getUserLevel","browsing_sessions","readRedis","console","log","view_level","toString","isUserLevelSamePageLevel","location","href","cache_param","now","indexOf","assign","force_browser_to_reload","add","checkTimestamp","classList","addGreetings","getData","store","key","storeHash","hash","return_key_only","fixed_response","responseText","addEventListener","utc","not_session_data","version_data","isFastbookingDataRequestInProgress","fastbookingDataCallbacks","maxAttempts","arguments","market_id","getPrefix","attempts","fbData","makeRequest","fetch","response","ok","Error","json","d","creation_date","valueOf","version","checkSessionStorage","sessionStorage","cb","setTimeout","asyncGetData","Promise","resolve","reject","hotelsData","hotels_data","HotelsData","getHotelById","hotelId","hotels","hotel","id","check","diff","format","isHotelsDataAvailable","Boolean","setAsyncDayjsLocale","localizedFormat","onPageReady","updatePricesInfo","remove","$js_reset_password","append","not","formikation","children","parsley","fancybox","toolbar","smallBtn","baseClass","spinnerTpl","padding","maxWidth","autoDimensions","autoSize","showNavArrows","beforeClose","is","width","height","scrolling","helpers","overlay","locked","margin","language","documentElement","getAttribute","date_format","start_of_week","$el","this","singleMonth","dateRangePicker","autoClose","startOfWeek","startDate","hasClass","singleDate","showTopbar","ev","picker","prop","relatedTarget","css","offset","left","val","stopPropagation","parent","open","mobilepanel","contains","closeLoader","event","persisted","$this","src","iframe","close","fastbooking","setPromocode","detail","trigger","$target","top","offsetParent","animate","scrollTop","toggle","toggleClass","$hotel_services_list","siblings","getInstance","update","el_right","outerWidth","right","$element","$submenu","next","substring","slideToggle","$container","$trigger","has","$slides","clone","map","toArray","with_filter","get_attribute_if_available","init_desktop_tooltip","$tooltip","title","desc","desc_html","position","$template","empty","focus","blur","hover","stopImmediatePropagation","Tooltip","init","unbind","beforeShow","ScrollLock","afterClose","off","init_responsive_popup","destroy","tooltip","index","element","updatePrices","currency","$block","user_resident_type","$prices_to_convert","converter_type","price_amount","price_currency","residentPriceData","resident_type","conversions","toLowerCase","to_currency","_find","to","result_amount","factor","currencies_data","code","price_with_decimals","result_formatted","number","num_dec","fr_del","th_del","priceClasses","coinClasses","html_price","html_cur_code","html_cur_symbol","symbol","html_tag","replaceWith","updateCurrencySelectors","currency_form_option","currency_text","textContent","$select","present","currency_icon","selector_text_currency_value","decimals","dec_point","thousands_sep","Number","toLocaleString","isFinite","Math","abs","u_dec","charCodeAt","slice","u_sep","RegExp","n","s","round","toFixedFix","Array","join","currencyForm","shared_domain","domain","page_currency","wrapCSS","backFocus","forceUpdate","updateSelector","buildTagsFromPrice","price","$comparatorLink","urlParser","getParam","load","getDeviceId","getDeviceType","storeDeviceDataInCookies","device_id","device_type","decomposeDeviceIdForWaf","get_values","first_element","second_element","third_element","fourth_element","fifth_element","deviceDetector","loadDeviceDataToForm","sendDeviceData","device_first_element","device_second_element","device_third_element","device_fourth_element","device_fifth_element","browsing_data","getTotalHeight","paddingTop","paddingBottom","borderTopWidth","borderBottomWidth","marginTop","marginBottom","getComputedStyle","offsetHeight","parseInt","truncable","elements","elementTruncable","elementTruncated","trim","contentElements","numberVisibleElements","elementWithDataHeight","from","heightTotal","i","style","setAttribute","showNumberElements","toggleViewMoreButton","totalHeight","defaults","touch"],"sourceRoot":""}