{"version":3,"file":"/dist/js/about.js","mappings":"yDAYA,SAASA,EAASC,GACd,OAAgB,OAARA,GACW,iBAARA,GACP,gBAAiBA,GACjBA,EAAIC,cAAgBC,MAC5B,CACA,SAASC,EAAOC,EAAS,CAAC,EAAGC,EAAM,CAAC,GAChCH,OAAOI,KAAKD,GAAKE,SAASC,SACK,IAAhBJ,EAAOI,GACdJ,EAAOI,GAAOH,EAAIG,GACbT,EAASM,EAAIG,KAClBT,EAASK,EAAOI,KAChBN,OAAOI,KAAKD,EAAIG,IAAMC,OAAS,GAC/BN,EAAOC,EAAOI,GAAMH,EAAIG,GAC5B,GAER,CAEA,MAAME,EAAc,CAChBC,KAAM,CAAC,EACPC,mBAAqB,EACrBC,sBAAwB,EACxBC,cAAe,CACXC,OAAS,EACTC,SAAU,IAEdC,cAAa,IACF,KAEXC,iBAAgB,IACL,GAEXC,eAAc,IACH,KAEXC,YAAW,KACA,CACHC,YAAc,IAGtBC,cAAa,KACF,CACHC,SAAU,GACVC,WAAY,GACZC,MAAO,CAAC,EACRC,eAAiB,EACjBC,qBAAoB,IACT,KAInBC,gBAAe,KACJ,CAAC,GAEZC,WAAU,IACC,KAEXC,SAAU,CACNC,KAAM,GACNC,KAAM,GACNC,SAAU,GACVC,KAAM,GACNC,OAAQ,GACRC,SAAU,GACVC,SAAU,GACVC,OAAQ,KAGhB,SAASC,IACL,MAAMC,EAA0B,oBAAbC,SAA2BA,SAAW,CAAC,EAE1D,OADAtC,EAAOqC,EAAK9B,GACL8B,CACX,CAEA,MAAME,EAAY,CACdD,SAAU/B,EACViC,UAAW,CACPC,UAAW,IAEfd,SAAU,CACNC,KAAM,GACNC,KAAM,GACNC,SAAU,GACVC,KAAM,GACNC,OAAQ,GACRC,SAAU,GACVC,SAAU,GACVC,OAAQ,IAEZO,QAAS,CACLC,eAAiB,EACjBC,YAAc,EACdC,KAAO,EACPC,OAAS,GAEbC,YAAa,WACT,OAAOC,IACX,EACAvC,mBAAqB,EACrBC,sBAAwB,EACxBuC,iBAAgB,KACL,CACHC,iBAAgB,IACL,KAInBC,QAAU,EACVC,OAAS,EACTC,OAAQ,CAAC,EACTC,aAAe,EACfC,eAAiB,EACjBC,WAAU,KACC,CAAC,GAEZC,sBAAsBC,GACQ,oBAAfJ,YACPI,IACO,MAEJJ,WAAWI,EAAU,GAEhCC,qBAAqBC,GACS,oBAAfN,YAGXC,aAAaK,EACjB,GAEJ,SAASC,IACL,MAAMC,EAAwB,oBAAXC,OAAyBA,OAAS,CAAC,EAEtD,OADA/D,EAAO8D,EAAKvB,GACLuB,CACX,CCjIA,SAASE,EAASN,EAAUO,EAAQ,GAClC,OAAOX,WAAWI,EAAUO,EAC9B,CACA,SAASC,IACP,OAAOd,KAAKc,KACd,CAeA,SAASC,EAAaC,EAAIC,EAAO,KAC/B,MAAMN,EAASF,IACf,IAAIS,EACAC,EACAC,EACJ,MAAMC,EAnBR,SAA0BL,GACxB,MAAML,EAASF,IACf,IAAIvC,EAUJ,OATIyC,EAAOd,mBACT3B,EAAQyC,EAAOd,iBAAiBmB,EAAI,QAEjC9C,GAAS8C,EAAGM,eACfpD,EAAQ8C,EAAGM,cAERpD,IACHA,EAAQ8C,EAAG9C,OAENA,CACT,CAMmB,CAAiB8C,GA6BlC,OA5BIL,EAAOY,iBACTJ,EAAeE,EAASG,WAAaH,EAASI,gBAC1CN,EAAaO,MAAM,KAAKxE,OAAS,IACnCiE,EAAeA,EAAaO,MAAM,MAAMC,KAAIC,GAAKA,EAAEC,QAAQ,IAAK,OAAMC,KAAK,OAI7EV,EAAkB,IAAIT,EAAOY,gBAAiC,SAAjBJ,EAA0B,GAAKA,KAE5EC,EAAkBC,EAASU,cAAgBV,EAASW,YAAcX,EAASY,aAAeZ,EAASa,aAAeb,EAASG,WAAaH,EAASvB,iBAAiB,aAAa+B,QAAQ,aAAc,sBACrMX,EAASE,EAAgBe,WAAWT,MAAM,MAE/B,MAATT,IAE0BE,EAAxBR,EAAOY,gBAAgCH,EAAgBgB,IAEhC,KAAlBlB,EAAOhE,OAA8BmF,WAAWnB,EAAO,KAE5CmB,WAAWnB,EAAO,KAE3B,MAATD,IAE0BE,EAAxBR,EAAOY,gBAAgCH,EAAgBkB,IAEhC,KAAlBpB,EAAOhE,OAA8BmF,WAAWnB,EAAO,KAE5CmB,WAAWnB,EAAO,KAEjCC,GAAgB,CACzB,CACA,SAAS,EAASoB,GAChB,MAAoB,iBAANA,GAAwB,OAANA,GAAcA,EAAE7F,aAAkE,WAAnDC,OAAO6F,UAAUL,SAASM,KAAKF,GAAGG,MAAM,GAAI,EAC7G,CAQA,SAAS,KAAUC,GACjB,MAAMC,EAAKjG,OAAOgG,EAAK,IACjBE,EAAW,CAAC,YAAa,cAAe,aAC9C,IAAK,IAAIC,EAAI,EAAGA,EAAIH,EAAKzF,OAAQ4F,GAAK,EAAG,CACvC,MAAMC,EAAaJ,EAAKG,GACxB,GAAIC,UAZQC,EAYmDD,IAV3C,oBAAXpC,aAAwD,IAAvBA,OAAOsC,YAC1CD,aAAgBC,YAElBD,IAA2B,IAAlBA,EAAKE,UAAoC,KAAlBF,EAAKE,YAOkC,CAC1E,MAAMC,EAAYxG,OAAOI,KAAKJ,OAAOoG,IAAaK,QAAOnG,GAAO4F,EAASQ,QAAQpG,GAAO,IACxF,IAAK,IAAIqG,EAAY,EAAGC,EAAMJ,EAAUjG,OAAQoG,EAAYC,EAAKD,GAAa,EAAG,CAC/E,MAAME,EAAUL,EAAUG,GACpBG,EAAO9G,OAAO+G,yBAAyBX,EAAYS,QAC5CG,IAATF,GAAsBA,EAAKG,aACzB,EAAShB,EAAGY,KAAa,EAAST,EAAWS,IAC3CT,EAAWS,GAASK,WACtBjB,EAAGY,GAAWT,EAAWS,GAEzB,EAAOZ,EAAGY,GAAUT,EAAWS,KAEvB,EAASZ,EAAGY,KAAa,EAAST,EAAWS,KACvDZ,EAAGY,GAAW,CAAC,EACXT,EAAWS,GAASK,WACtBjB,EAAGY,GAAWT,EAAWS,GAEzB,EAAOZ,EAAGY,GAAUT,EAAWS,KAGjCZ,EAAGY,GAAWT,EAAWS,GAG/B,CACF,CACF,CArCF,IAAgBR,EAsCd,OAAOJ,CACT,CACA,SAASkB,EAAe9C,EAAI+C,EAASC,GACnChD,EAAG9C,MAAM+F,YAAYF,EAASC,EAChC,CACA,SAASE,GAAqB,OAC5BC,EAAM,eACNC,EAAc,KACdC,IAEA,MAAM1D,EAASF,IACT6D,GAAiBH,EAAOI,UAC9B,IACIC,EADAC,EAAY,KAEhB,MAAMC,EAAWP,EAAOQ,OAAOC,MAC/BT,EAAOU,UAAU3G,MAAM4G,eAAiB,OACxCnE,EAAOJ,qBAAqB4D,EAAOY,gBACnC,MAAMC,EAAMZ,EAAiBE,EAAgB,OAAS,OAChDW,EAAe,CAACC,EAASrI,IACd,SAARmI,GAAkBE,GAAWrI,GAAkB,SAARmI,GAAkBE,GAAWrI,EAEvEsI,EAAU,KACdX,GAAO,IAAIxE,MAAOoF,UACA,OAAdX,IACFA,EAAYD,GAEd,MAAMa,EAAWC,KAAKC,IAAID,KAAKE,KAAKhB,EAAOC,GAAaC,EAAU,GAAI,GAChEe,EAAe,GAAMH,KAAKI,IAAIL,EAAWC,KAAKK,IAAM,EAC1D,IAAIC,EAAkBtB,EAAgBmB,GAAgBrB,EAAiBE,GAOvE,GANIW,EAAaW,EAAiBxB,KAChCwB,EAAkBxB,GAEpBD,EAAOU,UAAUgB,SAAS,CACxB,CAACxB,GAAOuB,IAENX,EAAaW,EAAiBxB,GAUhC,OATAD,EAAOU,UAAU3G,MAAM4H,SAAW,SAClC3B,EAAOU,UAAU3G,MAAM4G,eAAiB,GACxC5E,YAAW,KACTiE,EAAOU,UAAU3G,MAAM4H,SAAW,GAClC3B,EAAOU,UAAUgB,SAAS,CACxB,CAACxB,GAAOuB,GACR,SAEJjF,EAAOJ,qBAAqB4D,EAAOY,gBAGrCZ,EAAOY,eAAiBpE,EAAON,sBAAsB8E,EAAQ,EAE/DA,GACF,CACA,SAASY,EAAoBC,GAC3B,OAAOA,EAAQtI,cAAc,4BAA8BsI,EAAQC,UAAYD,EAAQC,SAASvI,cAAc,4BAA8BsI,CAC9I,CAQA,SAASE,EAAgBC,EAASC,EAAW,IAC3C,MAAO,IAAID,EAAQnI,UAAUoF,QAAOpC,GAAMA,EAAGqF,QAAQD,IACvD,CACA,SAASrI,EAAcuI,EAAKC,EAAU,IACpC,MAAMvF,EAAK9B,SAASnB,cAAcuI,GAElC,OADAtF,EAAGwF,UAAUC,OAAQC,MAAMC,QAAQJ,GAAWA,EAAU,CAACA,IAClDvF,CACT,CACA,SAAS4F,EAAc5F,GACrB,MAAML,EAASF,IACTvB,EAAWF,IACX6H,EAAM7F,EAAG8F,wBACT1J,EAAO8B,EAAS9B,KAChB2J,EAAY/F,EAAG+F,WAAa3J,EAAK2J,WAAa,EAC9CC,EAAahG,EAAGgG,YAAc5J,EAAK4J,YAAc,EACjDC,EAAYjG,IAAOL,EAASA,EAAOuG,QAAUlG,EAAGiG,UAChDE,EAAanG,IAAOL,EAASA,EAAOyG,QAAUpG,EAAGmG,WACvD,MAAO,CACLE,IAAKR,EAAIQ,IAAMJ,EAAYF,EAC3BO,KAAMT,EAAIS,KAAOH,EAAaH,EAElC,CAuBA,SAASO,EAAavG,EAAIwG,GAExB,OADe/G,IACDZ,iBAAiBmB,EAAI,MAAMlB,iBAAiB0H,EAC5D,CACA,SAASC,EAAazG,GACpB,IACI8B,EADA4E,EAAQ1G,EAEZ,GAAI0G,EAAO,CAGT,IAFA5E,EAAI,EAEuC,QAAnC4E,EAAQA,EAAMC,kBACG,IAAnBD,EAAMxE,WAAgBJ,GAAK,GAEjC,OAAOA,CACT,CAEF,CACA,SAAS8E,EAAe5G,EAAIoF,GAC1B,MAAMyB,EAAU,GAChB,IAAIC,EAAS9G,EAAG+G,cAChB,KAAOD,GACD1B,EACE0B,EAAOzB,QAAQD,IAAWyB,EAAQG,KAAKF,GAE3CD,EAAQG,KAAKF,GAEfA,EAASA,EAAOC,cAElB,OAAOF,CACT,CACA,SAASI,EAAqBjH,EAAIV,GAM5BA,GACFU,EAAG3D,iBAAiB,iBANtB,SAAS6K,EAAaC,GAChBA,EAAEtL,SAAWmE,IACjBV,EAASmC,KAAKzB,EAAImH,GAClBnH,EAAG1D,oBAAoB,gBAAiB4K,GAC1C,GAIF,CACA,SAASE,EAAiBpH,EAAIqH,EAAMC,GAClC,MAAM3H,EAASF,IACf,OAAI6H,EACKtH,EAAY,UAATqH,EAAmB,cAAgB,gBAAkBhG,WAAW1B,EAAOd,iBAAiBmB,EAAI,MAAMlB,iBAA0B,UAATuI,EAAmB,eAAiB,eAAiBhG,WAAW1B,EAAOd,iBAAiBmB,EAAI,MAAMlB,iBAA0B,UAATuI,EAAmB,cAAgB,kBAE9QrH,EAAGuH,WACZ,CCvQA,IAAIC,ECCAC,ECDAC,EFSJ,SAASC,IAIP,OAHKH,IACHA,EAVJ,WACE,MAAM7H,EAASF,IACTvB,EAAWF,IACjB,MAAO,CACL4J,aAAc1J,EAAS2J,iBAAmB,mBAAoB3J,EAAS2J,gBAAgB3K,MACvF4K,SAAU,iBAAkBnI,GAAUA,EAAOoI,eAAiB7J,aAAoByB,EAAOoI,eAE7F,CAGcC,IAELR,CACT,CC6BA,SAASS,EAAUC,EAAY,CAAC,GAI9B,OAHKT,IACHA,EA3CJ,UAAoB,UAClBpJ,GACE,CAAC,GACH,MAAMmJ,EAAUG,IACVhI,EAASF,IACT0I,EAAWxI,EAAOvB,UAAU+J,SAC5BC,EAAK/J,GAAasB,EAAOvB,UAAUC,UACnCgK,EAAS,CACbC,KAAK,EACLC,SAAS,GAELC,EAAc7I,EAAOV,OAAOwJ,MAC5BC,EAAe/I,EAAOV,OAAO0J,OAC7BJ,EAAUH,EAAGQ,MAAM,+BACzB,IAAIC,EAAOT,EAAGQ,MAAM,wBACpB,MAAME,EAAOV,EAAGQ,MAAM,2BAChBG,GAAUF,GAAQT,EAAGQ,MAAM,8BAC3BI,EAAuB,UAAbb,EAChB,IAAIc,EAAqB,aAAbd,EAqBZ,OAjBKU,GAAQI,GAASzB,EAAQM,OADV,CAAC,YAAa,YAAa,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,YACxGzF,QAAQ,GAAGmG,KAAeE,MAAmB,IAC9FG,EAAOT,EAAGQ,MAAM,uBACXC,IAAMA,EAAO,CAAC,EAAG,EAAG,WACzBI,GAAQ,GAINV,IAAYS,IACdX,EAAOa,GAAK,UACZb,EAAOE,SAAU,IAEfM,GAAQE,GAAUD,KACpBT,EAAOa,GAAK,MACZb,EAAOC,KAAM,GAIRD,CACT,CAGmBc,CAAWjB,IAErBT,CACT,CC3BA,SAAS2B,IAIP,OAHK1B,IACHA,EAtBJ,WACE,MAAM/H,EAASF,IACf,IAAI4J,GAAqB,EACzB,SAASC,IACP,MAAMlB,EAAKzI,EAAOvB,UAAUC,UAAUkL,cACtC,OAAOnB,EAAG/F,QAAQ,WAAa,GAAK+F,EAAG/F,QAAQ,UAAY,GAAK+F,EAAG/F,QAAQ,WAAa,CAC1F,CACA,GAAIiH,IAAY,CACd,MAAMlB,EAAKoB,OAAO7J,EAAOvB,UAAUC,WACnC,GAAI+J,EAAGqB,SAAS,YAAa,CAC3B,MAAOC,EAAOC,GAASvB,EAAG1H,MAAM,YAAY,GAAGA,MAAM,KAAK,GAAGA,MAAM,KAAKC,KAAIiJ,GAAOC,OAAOD,KAC1FP,EAAqBK,EAAQ,IAAgB,KAAVA,GAAgBC,EAAQ,CAC7D,CACF,CACA,MAAO,CACLL,SAAUD,GAAsBC,IAChCD,qBACAS,UAAW,+CAA+CC,KAAKpK,EAAOvB,UAAUC,WAEpF,CAGc2L,IAELtC,CACT,CCzBA,SACEuC,GAAGC,EAAQC,EAASC,GAClB,MAAMC,EAAOzL,KACb,IAAKyL,EAAKC,iBAAmBD,EAAKE,UAAW,OAAOF,EACpD,GAAuB,mBAAZF,EAAwB,OAAOE,EAC1C,MAAMG,EAASJ,EAAW,UAAY,OAKtC,OAJAF,EAAOxJ,MAAM,KAAK1E,SAAQyO,IACnBJ,EAAKC,gBAAgBG,KAAQJ,EAAKC,gBAAgBG,GAAS,IAChEJ,EAAKC,gBAAgBG,GAAOD,GAAQL,EAAQ,IAEvCE,CACT,EACAK,KAAKR,EAAQC,EAASC,GACpB,MAAMC,EAAOzL,KACb,IAAKyL,EAAKC,iBAAmBD,EAAKE,UAAW,OAAOF,EACpD,GAAuB,mBAAZF,EAAwB,OAAOE,EAC1C,SAASM,KAAehJ,GACtB0I,EAAKO,IAAIV,EAAQS,GACbA,EAAYE,uBACPF,EAAYE,eAErBV,EAAQW,MAAMT,EAAM1I,EACtB,CAEA,OADAgJ,EAAYE,eAAiBV,EACtBE,EAAKJ,GAAGC,EAAQS,EAAaP,EACtC,EACAW,MAAMZ,EAASC,GACb,MAAMC,EAAOzL,KACb,IAAKyL,EAAKC,iBAAmBD,EAAKE,UAAW,OAAOF,EACpD,GAAuB,mBAAZF,EAAwB,OAAOE,EAC1C,MAAMG,EAASJ,EAAW,UAAY,OAItC,OAHIC,EAAKW,mBAAmB3I,QAAQ8H,GAAW,GAC7CE,EAAKW,mBAAmBR,GAAQL,GAE3BE,CACT,EACAY,OAAOd,GACL,MAAME,EAAOzL,KACb,IAAKyL,EAAKC,iBAAmBD,EAAKE,UAAW,OAAOF,EACpD,IAAKA,EAAKW,mBAAoB,OAAOX,EACrC,MAAMa,EAAQb,EAAKW,mBAAmB3I,QAAQ8H,GAI9C,OAHIe,GAAS,GACXb,EAAKW,mBAAmBG,OAAOD,EAAO,GAEjCb,CACT,EACAO,IAAIV,EAAQC,GACV,MAAME,EAAOzL,KACb,OAAKyL,EAAKC,iBAAmBD,EAAKE,UAAkBF,EAC/CA,EAAKC,iBACVJ,EAAOxJ,MAAM,KAAK1E,SAAQyO,SACD,IAAZN,EACTE,EAAKC,gBAAgBG,GAAS,GACrBJ,EAAKC,gBAAgBG,IAC9BJ,EAAKC,gBAAgBG,GAAOzO,SAAQ,CAACoP,EAAcF,MAC7CE,IAAiBjB,GAAWiB,EAAaP,gBAAkBO,EAAaP,iBAAmBV,IAC7FE,EAAKC,gBAAgBG,GAAOU,OAAOD,EAAO,EAC5C,GAEJ,IAEKb,GAZ2BA,CAapC,EACAgB,QAAQ1J,GACN,MAAM0I,EAAOzL,KACb,IAAKyL,EAAKC,iBAAmBD,EAAKE,UAAW,OAAOF,EACpD,IAAKA,EAAKC,gBAAiB,OAAOD,EAClC,IAAIH,EACAoB,EACAC,EACmB,iBAAZ5J,EAAK,IAAmB+D,MAAMC,QAAQhE,EAAK,KACpDuI,EAASvI,EAAK,GACd2J,EAAO3J,EAAKD,MAAM,EAAGC,EAAKzF,QAC1BqP,EAAUlB,IAEVH,EAASvI,EAAK,GAAGuI,OACjBoB,EAAO3J,EAAK,GAAG2J,KACfC,EAAU5J,EAAK,GAAG4J,SAAWlB,GAE/BiB,EAAKE,QAAQD,GAcb,OAboB7F,MAAMC,QAAQuE,GAAUA,EAASA,EAAOxJ,MAAM,MACtD1E,SAAQyO,IACdJ,EAAKW,oBAAsBX,EAAKW,mBAAmB9O,QACrDmO,EAAKW,mBAAmBhP,SAAQoP,IAC9BA,EAAaN,MAAMS,EAAS,CAACd,KAAUa,GAAM,IAG7CjB,EAAKC,iBAAmBD,EAAKC,gBAAgBG,IAC/CJ,EAAKC,gBAAgBG,GAAOzO,SAAQoP,IAClCA,EAAaN,MAAMS,EAASD,EAAK,GAErC,IAEKjB,CACT,GCvFF,SACEoB,WCTa,WACb,MAAMtI,EAASvE,KACf,IAAI6J,EACAE,EACJ,MAAM3I,EAAKmD,EAAOnD,GAEhByI,OADiC,IAAxBtF,EAAOQ,OAAO8E,OAAiD,OAAxBtF,EAAOQ,OAAO8E,MACtDtF,EAAOQ,OAAO8E,MAEdzI,EAAG0L,YAGX/C,OADkC,IAAzBxF,EAAOQ,OAAOgF,QAAmD,OAAzBxF,EAAOQ,OAAOgF,OACtDxF,EAAOQ,OAAOgF,OAEd3I,EAAG2L,aAEA,IAAVlD,GAAetF,EAAOyI,gBAA6B,IAAXjD,GAAgBxF,EAAO0I,eAKnEpD,EAAQA,EAAQqD,SAASvF,EAAavG,EAAI,iBAAmB,EAAG,IAAM8L,SAASvF,EAAavG,EAAI,kBAAoB,EAAG,IACvH2I,EAASA,EAASmD,SAASvF,EAAavG,EAAI,gBAAkB,EAAG,IAAM8L,SAASvF,EAAavG,EAAI,mBAAqB,EAAG,IACrH6J,OAAOkC,MAAMtD,KAAQA,EAAQ,GAC7BoB,OAAOkC,MAAMpD,KAASA,EAAS,GACnChN,OAAOqQ,OAAO7I,EAAQ,CACpBsF,QACAE,SACAtB,KAAMlE,EAAOyI,eAAiBnD,EAAQE,IAE1C,EDnBEsD,aEVa,WACb,MAAM9I,EAASvE,KACf,SAASsN,EAAkBC,GACzB,OAAIhJ,EAAOyI,eACFO,EAGF,CACL,MAAS,SACT,aAAc,cACd,iBAAkB,eAClB,cAAe,aACf,eAAgB,gBAChB,eAAgB,cAChB,gBAAiB,iBACjB,YAAe,gBACfA,EACJ,CACA,SAASC,EAA0BpK,EAAMqK,GACvC,OAAOhL,WAAWW,EAAKlD,iBAAiBoN,EAAkBG,KAAW,EACvE,CACA,MAAM1I,EAASR,EAAOQ,QAChB,UACJE,EAAS,SACTyI,EACAjF,KAAMkF,EACNC,aAAcC,EAAG,SACjBC,GACEvJ,EACEwJ,EAAYxJ,EAAOyJ,SAAWjJ,EAAOiJ,QAAQC,QAC7CC,EAAuBH,EAAYxJ,EAAOyJ,QAAQG,OAAO7Q,OAASiH,EAAO4J,OAAO7Q,OAChF6Q,EAAS7H,EAAgBoH,EAAU,IAAInJ,EAAOQ,OAAOqJ,4BACrDC,EAAeN,EAAYxJ,EAAOyJ,QAAQG,OAAO7Q,OAAS6Q,EAAO7Q,OACvE,IAAIgR,EAAW,GACf,MAAMC,EAAa,GACbC,EAAkB,GACxB,IAAIC,EAAe1J,EAAO2J,mBACE,mBAAjBD,IACTA,EAAe1J,EAAO2J,mBAAmB7L,KAAK0B,IAEhD,IAAIoK,EAAc5J,EAAO6J,kBACE,mBAAhBD,IACTA,EAAc5J,EAAO6J,kBAAkB/L,KAAK0B,IAE9C,MAAMsK,EAAyBtK,EAAO+J,SAAShR,OACzCwR,EAA2BvK,EAAOgK,WAAWjR,OACnD,IAAIyR,EAAehK,EAAOgK,aACtBC,GAAiBP,EACjBQ,EAAgB,EAChB3C,EAAQ,EACZ,QAA0B,IAAfqB,EACT,OAE0B,iBAAjBoB,GAA6BA,EAAatL,QAAQ,MAAQ,IACnEsL,EAAetM,WAAWsM,EAAa9M,QAAQ,IAAK,KAAO,IAAM0L,GAEnEpJ,EAAO2K,aAAeH,EAGtBZ,EAAO/Q,SAAQgJ,IACTyH,EACFzH,EAAQ9H,MAAM6Q,WAAa,GAE3B/I,EAAQ9H,MAAM8Q,YAAc,GAE9BhJ,EAAQ9H,MAAM+Q,aAAe,GAC7BjJ,EAAQ9H,MAAMgR,UAAY,EAAE,IAI1BvK,EAAOwK,gBAAkBxK,EAAOyK,UAClCtL,EAAee,EAAW,kCAAmC,IAC7Df,EAAee,EAAW,iCAAkC,KAE9D,MAAMwK,EAAc1K,EAAO2K,MAAQ3K,EAAO2K,KAAKC,KAAO,GAAKpL,EAAOmL,KAMlE,IAAIE,EALAH,GACFlL,EAAOmL,KAAKG,WAAWxB,GAKzB,MAAMyB,EAAgD,SAAzB/K,EAAOgL,eAA4BhL,EAAOiL,aAAejT,OAAOI,KAAK4H,EAAOiL,aAAaxM,QAAOnG,QACnE,IAA1C0H,EAAOiL,YAAY3S,GAAK0S,gBACrCzS,OAAS,EACZ,IAAK,IAAI4F,EAAI,EAAGA,EAAImL,EAAcnL,GAAK,EAAG,CAExC,IAAI+M,EAKJ,GANAL,EAAY,EAERzB,EAAOjL,KAAI+M,EAAQ9B,EAAOjL,IAC1BuM,GACFlL,EAAOmL,KAAKQ,YAAYhN,EAAG+M,EAAO5B,EAAcf,IAE9Ca,EAAOjL,IAAyC,SAAnCyE,EAAasI,EAAO,WAArC,CAEA,GAA6B,SAAzBlL,EAAOgL,cAA0B,CAC/BD,IACF3B,EAAOjL,GAAG5E,MAAMgP,EAAkB,UAAY,IAEhD,MAAM6C,EAAclQ,iBAAiBgQ,GAC/BG,EAAmBH,EAAM3R,MAAMsD,UAC/ByO,EAAyBJ,EAAM3R,MAAMuD,gBAO3C,GANIuO,IACFH,EAAM3R,MAAMsD,UAAY,QAEtByO,IACFJ,EAAM3R,MAAMuD,gBAAkB,QAE5BkD,EAAOuL,aACTV,EAAYrL,EAAOyI,eAAiBxE,EAAiByH,EAAO,SAAS,GAAQzH,EAAiByH,EAAO,UAAU,OAC1G,CAEL,MAAMpG,EAAQ2D,EAA0B2C,EAAa,SAC/CI,EAAc/C,EAA0B2C,EAAa,gBACrDK,EAAehD,EAA0B2C,EAAa,iBACtDhB,EAAa3B,EAA0B2C,EAAa,eACpDf,EAAc5B,EAA0B2C,EAAa,gBACrDM,EAAYN,EAAYjQ,iBAAiB,cAC/C,GAAIuQ,GAA2B,eAAdA,EACfb,EAAY/F,EAAQsF,EAAaC,MAC5B,CACL,MAAM,YACJtC,EAAW,YACXnE,GACEsH,EACJL,EAAY/F,EAAQ0G,EAAcC,EAAerB,EAAaC,GAAezG,EAAcmE,EAC7F,CACF,CACIsD,IACFH,EAAM3R,MAAMsD,UAAYwO,GAEtBC,IACFJ,EAAM3R,MAAMuD,gBAAkBwO,GAE5BtL,EAAOuL,eAAcV,EAAYlK,KAAKgL,MAAMd,GAClD,MACEA,GAAajC,GAAc5I,EAAOgL,cAAgB,GAAKhB,GAAgBhK,EAAOgL,cAC1EhL,EAAOuL,eAAcV,EAAYlK,KAAKgL,MAAMd,IAC5CzB,EAAOjL,KACTiL,EAAOjL,GAAG5E,MAAMgP,EAAkB,UAAY,GAAGsC,OAGjDzB,EAAOjL,KACTiL,EAAOjL,GAAGyN,gBAAkBf,GAE9BpB,EAAgBpG,KAAKwH,GACjB7K,EAAOwK,gBACTP,EAAgBA,EAAgBY,EAAY,EAAIX,EAAgB,EAAIF,EAC9C,IAAlBE,GAA6B,IAAN/L,IAAS8L,EAAgBA,EAAgBrB,EAAa,EAAIoB,GAC3E,IAAN7L,IAAS8L,EAAgBA,EAAgBrB,EAAa,EAAIoB,GAC1DrJ,KAAKkL,IAAI5B,GAAiB,OAAUA,EAAgB,GACpDjK,EAAOuL,eAActB,EAAgBtJ,KAAKgL,MAAM1B,IAChD1C,EAAQvH,EAAO8L,gBAAmB,GAAGvC,EAASlG,KAAK4G,GACvDT,EAAWnG,KAAK4G,KAEZjK,EAAOuL,eAActB,EAAgBtJ,KAAKgL,MAAM1B,KAC/C1C,EAAQ5G,KAAKE,IAAIrB,EAAOQ,OAAO+L,mBAAoBxE,IAAU/H,EAAOQ,OAAO8L,gBAAmB,GAAGvC,EAASlG,KAAK4G,GACpHT,EAAWnG,KAAK4G,GAChBA,EAAgBA,EAAgBY,EAAYb,GAE9CxK,EAAO2K,aAAeU,EAAYb,EAClCE,EAAgBW,EAChBtD,GAAS,CArE2D,CAsEtE,CAaA,GAZA/H,EAAO2K,YAAcxJ,KAAKC,IAAIpB,EAAO2K,YAAavB,GAAcgB,EAC5Dd,GAAOC,IAA+B,UAAlB/I,EAAOgM,QAAwC,cAAlBhM,EAAOgM,UAC1D9L,EAAU3G,MAAMuL,MAAQ,GAAGtF,EAAO2K,YAAcnK,EAAOgK,kBAErDhK,EAAOiM,iBACT/L,EAAU3G,MAAMgP,EAAkB,UAAY,GAAG/I,EAAO2K,YAAcnK,EAAOgK,kBAE3EU,GACFlL,EAAOmL,KAAKuB,kBAAkBrB,EAAWtB,EAAUhB,IAIhDvI,EAAOwK,eAAgB,CAC1B,MAAM2B,EAAgB,GACtB,IAAK,IAAIhO,EAAI,EAAGA,EAAIoL,EAAShR,OAAQ4F,GAAK,EAAG,CAC3C,IAAIiO,EAAiB7C,EAASpL,GAC1B6B,EAAOuL,eAAca,EAAiBzL,KAAKgL,MAAMS,IACjD7C,EAASpL,IAAMqB,EAAO2K,YAAcvB,GACtCuD,EAAc9I,KAAK+I,EAEvB,CACA7C,EAAW4C,EACPxL,KAAKgL,MAAMnM,EAAO2K,YAAcvB,GAAcjI,KAAKgL,MAAMpC,EAASA,EAAShR,OAAS,IAAM,GAC5FgR,EAASlG,KAAK7D,EAAO2K,YAAcvB,EAEvC,CACA,GAAII,GAAahJ,EAAOqM,KAAM,CAC5B,MAAM3I,EAAO+F,EAAgB,GAAKO,EAClC,GAAIhK,EAAO8L,eAAiB,EAAG,CAC7B,MAAMQ,EAAS3L,KAAK4L,MAAM/M,EAAOyJ,QAAQuD,aAAehN,EAAOyJ,QAAQwD,aAAezM,EAAO8L,gBACvFY,EAAYhJ,EAAO1D,EAAO8L,eAChC,IAAK,IAAI3N,EAAI,EAAGA,EAAImO,EAAQnO,GAAK,EAC/BoL,EAASlG,KAAKkG,EAASA,EAAShR,OAAS,GAAKmU,EAElD,CACA,IAAK,IAAIvO,EAAI,EAAGA,EAAIqB,EAAOyJ,QAAQuD,aAAehN,EAAOyJ,QAAQwD,YAAatO,GAAK,EACnD,IAA1B6B,EAAO8L,gBACTvC,EAASlG,KAAKkG,EAASA,EAAShR,OAAS,GAAKmL,GAEhD8F,EAAWnG,KAAKmG,EAAWA,EAAWjR,OAAS,GAAKmL,GACpDlE,EAAO2K,aAAezG,CAE1B,CAEA,GADwB,IAApB6F,EAAShR,SAAcgR,EAAW,CAAC,IACX,IAAxBvJ,EAAOgK,aAAoB,CAC7B,MAAM1R,EAAMkH,EAAOyI,gBAAkBa,EAAM,aAAeP,EAAkB,eAC5Ea,EAAO3K,QAAO,CAACkO,EAAGC,MACX5M,EAAOyK,UAAWzK,EAAOqM,OAC1BO,IAAexD,EAAO7Q,OAAS,IAIlCF,SAAQgJ,IACTA,EAAQ9H,MAAMjB,GAAO,GAAG0R,KAAgB,GAE5C,CACA,GAAIhK,EAAOwK,gBAAkBxK,EAAO6M,qBAAsB,CACxD,IAAIC,EAAgB,EACpBrD,EAAgBpR,SAAQ0U,IACtBD,GAAiBC,GAAkB/M,EAAOgK,aAAehK,EAAOgK,aAAe,EAAE,IAEnF8C,GAAiB9M,EAAOgK,aACxB,MAAMgD,EAAUF,EAAgBlE,EAChCW,EAAWA,EAASvM,KAAIiQ,GAClBA,EAAO,GAAWvD,EAClBuD,EAAOD,EAAgBA,EAAUpD,EAC9BqD,GAEX,CACA,GAAIjN,EAAOkN,yBAA0B,CACnC,IAAIJ,EAAgB,EAKpB,GAJArD,EAAgBpR,SAAQ0U,IACtBD,GAAiBC,GAAkB/M,EAAOgK,aAAehK,EAAOgK,aAAe,EAAE,IAEnF8C,GAAiB9M,EAAOgK,aACpB8C,EAAgBlE,EAAY,CAC9B,MAAMuE,GAAmBvE,EAAakE,GAAiB,EACvDvD,EAASlR,SAAQ,CAAC4U,EAAMG,KACtB7D,EAAS6D,GAAaH,EAAOE,CAAe,IAE9C3D,EAAWnR,SAAQ,CAAC4U,EAAMG,KACxB5D,EAAW4D,GAAaH,EAAOE,CAAe,GAElD,CACF,CAOA,GANAnV,OAAOqQ,OAAO7I,EAAQ,CACpB4J,SACAG,WACAC,aACAC,oBAEEzJ,EAAOwK,gBAAkBxK,EAAOyK,UAAYzK,EAAO6M,qBAAsB,CAC3E1N,EAAee,EAAW,mCAAuCqJ,EAAS,GAAb,MAC7DpK,EAAee,EAAW,iCAAqCV,EAAOkE,KAAO,EAAI+F,EAAgBA,EAAgBlR,OAAS,GAAK,EAAnE,MAC5D,MAAM8U,GAAiB7N,EAAO+J,SAAS,GACjC+D,GAAmB9N,EAAOgK,WAAW,GAC3ChK,EAAO+J,SAAW/J,EAAO+J,SAASvM,KAAIuQ,GAAKA,EAAIF,IAC/C7N,EAAOgK,WAAahK,EAAOgK,WAAWxM,KAAIuQ,GAAKA,EAAID,GACrD,CAcA,GAbIhE,IAAiBH,GACnB3J,EAAOkI,KAAK,sBAEV6B,EAAShR,SAAWuR,IAClBtK,EAAOQ,OAAOwN,eAAehO,EAAOiO,gBACxCjO,EAAOkI,KAAK,yBAEV8B,EAAWjR,SAAWwR,GACxBvK,EAAOkI,KAAK,0BAEV1H,EAAO0N,qBACTlO,EAAOmO,uBAEJ3E,GAAchJ,EAAOyK,SAA8B,UAAlBzK,EAAOgM,QAAwC,SAAlBhM,EAAOgM,QAAoB,CAC5F,MAAM4B,EAAsB,GAAG5N,EAAO6N,wCAChCC,EAA6BtO,EAAOnD,GAAGwF,UAAUkM,SAASH,GAC5DtE,GAAgBtJ,EAAOgO,wBACpBF,GAA4BtO,EAAOnD,GAAGwF,UAAUC,IAAI8L,GAChDE,GACTtO,EAAOnD,GAAGwF,UAAUoM,OAAOL,EAE/B,CACF,EFhREM,iBGZa,SAA0BjO,GACvC,MAAMT,EAASvE,KACTkT,EAAe,GACfnF,EAAYxJ,EAAOyJ,SAAWzJ,EAAOQ,OAAOiJ,QAAQC,QAC1D,IACI/K,EADAiQ,EAAY,EAEK,iBAAVnO,EACTT,EAAO6O,cAAcpO,IACF,IAAVA,GACTT,EAAO6O,cAAc7O,EAAOQ,OAAOC,OAErC,MAAMqO,EAAkB/G,GAClByB,EACKxJ,EAAO4J,OAAO3K,QAAOpC,GAAM8L,SAAS9L,EAAGkS,aAAa,2BAA4B,MAAQhH,IAAO,GAEjG/H,EAAO4J,OAAO7B,GAGvB,GAAoC,SAAhC/H,EAAOQ,OAAOgL,eAA4BxL,EAAOQ,OAAOgL,cAAgB,EAC1E,GAAIxL,EAAOQ,OAAOwK,gBACfhL,EAAOgP,eAAiB,IAAInW,SAAQ6S,IACnCiD,EAAa9K,KAAK6H,EAAM,SAG1B,IAAK/M,EAAI,EAAGA,EAAIwC,KAAK4L,KAAK/M,EAAOQ,OAAOgL,eAAgB7M,GAAK,EAAG,CAC9D,MAAMoJ,EAAQ/H,EAAOiP,YAActQ,EACnC,GAAIoJ,EAAQ/H,EAAO4J,OAAO7Q,SAAWyQ,EAAW,MAChDmF,EAAa9K,KAAKiL,EAAgB/G,GACpC,MAGF4G,EAAa9K,KAAKiL,EAAgB9O,EAAOiP,cAI3C,IAAKtQ,EAAI,EAAGA,EAAIgQ,EAAa5V,OAAQ4F,GAAK,EACxC,QAA+B,IAApBgQ,EAAahQ,GAAoB,CAC1C,MAAM6G,EAASmJ,EAAahQ,GAAGuQ,aAC/BN,EAAYpJ,EAASoJ,EAAYpJ,EAASoJ,CAC5C,EAIEA,GAA2B,IAAdA,KAAiB5O,EAAOU,UAAU3G,MAAMyL,OAAS,GAAGoJ,MACvE,EH/BET,mBIba,WACb,MAAMnO,EAASvE,KACTmO,EAAS5J,EAAO4J,OAEhBuF,EAAcnP,EAAOoP,UAAYpP,EAAOyI,eAAiBzI,EAAOU,UAAU2O,WAAarP,EAAOU,UAAU4O,UAAY,EAC1H,IAAK,IAAI3Q,EAAI,EAAGA,EAAIiL,EAAO7Q,OAAQ4F,GAAK,EACtCiL,EAAOjL,GAAG4Q,mBAAqBvP,EAAOyI,eAAiBmB,EAAOjL,GAAG0Q,WAAazF,EAAOjL,GAAG2Q,WAAaH,CAEzG,EJMEK,qBKda,SAA8BpP,EAAY3E,MAAQA,KAAK2E,WAAa,GACjF,MAAMJ,EAASvE,KACT+E,EAASR,EAAOQ,QAChB,OACJoJ,EACAP,aAAcC,EAAG,SACjBS,GACE/J,EACJ,GAAsB,IAAlB4J,EAAO7Q,OAAc,YACkB,IAAhC6Q,EAAO,GAAG2F,mBAAmCvP,EAAOmO,qBAC/D,IAAIsB,GAAgBrP,EAChBkJ,IAAKmG,EAAerP,GAGxBwJ,EAAO/Q,SAAQgJ,IACbA,EAAQQ,UAAUoM,OAAOjO,EAAOkP,kBAAkB,IAEpD1P,EAAO2P,qBAAuB,GAC9B3P,EAAOgP,cAAgB,GACvB,IAAK,IAAIrQ,EAAI,EAAGA,EAAIiL,EAAO7Q,OAAQ4F,GAAK,EAAG,CACzC,MAAM+M,EAAQ9B,EAAOjL,GACrB,IAAIiR,EAAclE,EAAM6D,kBACpB/O,EAAOyK,SAAWzK,EAAOwK,iBAC3B4E,GAAehG,EAAO,GAAG2F,mBAE3B,MAAMM,GAAiBJ,GAAgBjP,EAAOwK,eAAiBhL,EAAO8P,eAAiB,GAAKF,IAAgBlE,EAAMU,gBAAkB5L,EAAOgK,cACrIuF,GAAyBN,EAAe1F,EAAS,IAAMvJ,EAAOwK,eAAiBhL,EAAO8P,eAAiB,GAAKF,IAAgBlE,EAAMU,gBAAkB5L,EAAOgK,cAC3JwF,IAAgBP,EAAeG,GAC/BK,EAAaD,EAAchQ,EAAOiK,gBAAgBtL,IACtCqR,GAAe,GAAKA,EAAchQ,EAAOkE,KAAO,GAAK+L,EAAa,GAAKA,GAAcjQ,EAAOkE,MAAQ8L,GAAe,GAAKC,GAAcjQ,EAAOkE,QAE7JlE,EAAOgP,cAAcnL,KAAK6H,GAC1B1L,EAAO2P,qBAAqB9L,KAAKlF,GACjCiL,EAAOjL,GAAG0D,UAAUC,IAAI9B,EAAOkP,oBAEjChE,EAAMxK,SAAWoI,GAAOuG,EAAgBA,EACxCnE,EAAMwE,iBAAmB5G,GAAOyG,EAAwBA,CAC1D,CACF,ELvBEI,eMfa,SAAwB/P,GACrC,MAAMJ,EAASvE,KACf,QAAyB,IAAd2E,EAA2B,CACpC,MAAMgQ,EAAapQ,EAAOqJ,cAAgB,EAAI,EAE9CjJ,EAAYJ,GAAUA,EAAOI,WAAaJ,EAAOI,UAAYgQ,GAAc,CAC7E,CACA,MAAM5P,EAASR,EAAOQ,OAChB6P,EAAiBrQ,EAAOsQ,eAAiBtQ,EAAO8P,eACtD,IAAI,SACF5O,EAAQ,YACRqP,EAAW,MACXC,EAAK,aACLC,GACEzQ,EACJ,MAAM0Q,EAAeH,EACfI,EAASH,EACf,GAAuB,IAAnBH,EACFnP,EAAW,EACXqP,GAAc,EACdC,GAAQ,MACH,CACLtP,GAAYd,EAAYJ,EAAO8P,gBAAkBO,EACjD,MAAMO,EAAqBzP,KAAKkL,IAAIjM,EAAYJ,EAAO8P,gBAAkB,EACnEe,EAAe1P,KAAKkL,IAAIjM,EAAYJ,EAAOsQ,gBAAkB,EACnEC,EAAcK,GAAsB1P,GAAY,EAChDsP,EAAQK,GAAgB3P,GAAY,EAChC0P,IAAoB1P,EAAW,GAC/B2P,IAAc3P,EAAW,EAC/B,CACA,GAAIV,EAAOqM,KAAM,CACf,MAAMiE,EAAkB9Q,EAAO+Q,cAAc/Q,EAAO4J,OAAO3K,QAAOpC,GAAqD,MAA/CA,EAAGkS,aAAa,6BAAoC,IACtHiC,EAAiBhR,EAAO+Q,cAAc/Q,EAAO4J,OAAO3K,QAAOpC,GAAmD,EAA7CA,EAAGkS,aAAa,4BAAmC/O,EAAO4J,OAAO7Q,OAAS,IAAG,IAC9IkY,EAAsBjR,EAAOgK,WAAW8G,GACxCI,EAAqBlR,EAAOgK,WAAWgH,GACvCG,EAAenR,EAAOgK,WAAWhK,EAAOgK,WAAWjR,OAAS,GAC5DqY,EAAejQ,KAAKkL,IAAIjM,GAE5BqQ,EADEW,GAAgBH,GACFG,EAAeH,GAAuBE,GAEtCC,EAAeD,EAAeD,GAAsBC,EAElEV,EAAe,IAAGA,GAAgB,EACxC,CACAjY,OAAOqQ,OAAO7I,EAAQ,CACpBkB,WACAuP,eACAF,cACAC,WAEEhQ,EAAO0N,qBAAuB1N,EAAOwK,gBAAkBxK,EAAO6Q,aAAYrR,EAAOwP,qBAAqBpP,GACtGmQ,IAAgBG,GAClB1Q,EAAOkI,KAAK,yBAEVsI,IAAUG,GACZ3Q,EAAOkI,KAAK,oBAEVwI,IAAiBH,GAAeI,IAAWH,IAC7CxQ,EAAOkI,KAAK,YAEdlI,EAAOkI,KAAK,WAAYhH,EAC1B,EN7CEoQ,oBOfa,WACb,MAAMtR,EAASvE,MACT,OACJmO,EAAM,OACNpJ,EAAM,SACN2I,EAAQ,YACR8F,GACEjP,EACEwJ,EAAYxJ,EAAOyJ,SAAWjJ,EAAOiJ,QAAQC,QAC7C6H,EAAmBtP,GAChBF,EAAgBoH,EAAU,IAAI3I,EAAOqJ,aAAa5H,kBAAyBA,KAAY,GAKhG,IAAIuP,EACJ,GAJA5H,EAAO/Q,SAAQgJ,IACbA,EAAQQ,UAAUoM,OAAOjO,EAAOiR,iBAAkBjR,EAAOkR,eAAgBlR,EAAOmR,eAAe,IAG7FnI,EACF,GAAIhJ,EAAOqM,KAAM,CACf,IAAIO,EAAa6B,EAAcjP,EAAOyJ,QAAQuD,aAC1CI,EAAa,IAAGA,EAAapN,EAAOyJ,QAAQG,OAAO7Q,OAASqU,GAC5DA,GAAcpN,EAAOyJ,QAAQG,OAAO7Q,SAAQqU,GAAcpN,EAAOyJ,QAAQG,OAAO7Q,QACpFyY,EAAcD,EAAiB,6BAA6BnE,MAC9D,MACEoE,EAAcD,EAAiB,6BAA6BtC,YAG9DuC,EAAc5H,EAAOqF,GAEvB,GAAIuC,EAAa,CAEfA,EAAYnP,UAAUC,IAAI9B,EAAOiR,kBAGjC,IAAIG,EZ6KR,SAAwB/U,EAAIoF,GAC1B,MAAM4P,EAAU,GAChB,KAAOhV,EAAGiV,oBAAoB,CAC5B,MAAMC,EAAOlV,EAAGiV,mBACZ7P,EACE8P,EAAK7P,QAAQD,IAAW4P,EAAQhO,KAAKkO,GACpCF,EAAQhO,KAAKkO,GACpBlV,EAAKkV,CACP,CACA,OAAOF,CACT,CYvLoBG,CAAeR,EAAa,IAAIhR,EAAOqJ,4BAA4B,GAC/ErJ,EAAOqM,OAAS+E,IAClBA,EAAYhI,EAAO,IAEjBgI,GACFA,EAAUvP,UAAUC,IAAI9B,EAAOkR,gBAGjC,IAAIO,EZ0JR,SAAwBpV,EAAIoF,GAC1B,MAAMiQ,EAAU,GAChB,KAAOrV,EAAGsV,wBAAwB,CAChC,MAAMC,EAAOvV,EAAGsV,uBACZlQ,EACEmQ,EAAKlQ,QAAQD,IAAWiQ,EAAQrO,KAAKuO,GACpCF,EAAQrO,KAAKuO,GACpBvV,EAAKuV,CACP,CACA,OAAOF,CACT,CYpKoBG,CAAeb,EAAa,IAAIhR,EAAOqJ,4BAA4B,GAC/ErJ,EAAOqM,MAAuB,KAAdoF,IAClBA,EAAYrI,EAAOA,EAAO7Q,OAAS,IAEjCkZ,GACFA,EAAU5P,UAAUC,IAAI9B,EAAOmR,eAEnC,CACA3R,EAAOsS,mBACT,EPlCEC,kBQOa,SAA2BC,GACxC,MAAMxS,EAASvE,KACT2E,EAAYJ,EAAOqJ,aAAerJ,EAAOI,WAAaJ,EAAOI,WAC7D,SACJ2J,EAAQ,OACRvJ,EACAyO,YAAawD,EACbC,UAAWC,EACX/E,UAAWgF,GACT5S,EACJ,IACI4N,EADAqB,EAAcuD,EAElB,MAAMK,EAAsBC,IAC1B,IAAIJ,EAAYI,EAAS9S,EAAOyJ,QAAQuD,aAOxC,OANI0F,EAAY,IACdA,EAAY1S,EAAOyJ,QAAQG,OAAO7Q,OAAS2Z,GAEzCA,GAAa1S,EAAOyJ,QAAQG,OAAO7Q,SACrC2Z,GAAa1S,EAAOyJ,QAAQG,OAAO7Q,QAE9B2Z,CAAS,EAKlB,QAH2B,IAAhBzD,IACTA,EA/CG,SAAmCjP,GACxC,MAAM,WACJgK,EAAU,OACVxJ,GACER,EACEI,EAAYJ,EAAOqJ,aAAerJ,EAAOI,WAAaJ,EAAOI,UACnE,IAAI6O,EACJ,IAAK,IAAItQ,EAAI,EAAGA,EAAIqL,EAAWjR,OAAQ4F,GAAK,OACT,IAAtBqL,EAAWrL,EAAI,GACpByB,GAAa4J,EAAWrL,IAAMyB,EAAY4J,EAAWrL,EAAI,IAAMqL,EAAWrL,EAAI,GAAKqL,EAAWrL,IAAM,EACtGsQ,EAActQ,EACLyB,GAAa4J,EAAWrL,IAAMyB,EAAY4J,EAAWrL,EAAI,KAClEsQ,EAActQ,EAAI,GAEXyB,GAAa4J,EAAWrL,KACjCsQ,EAActQ,GAOlB,OAHI6B,EAAOuS,sBACL9D,EAAc,QAA4B,IAAhBA,KAA6BA,EAAc,GAEpEA,CACT,CAwBkB+D,CAA0BhT,IAEtC+J,EAAS7K,QAAQkB,IAAc,EACjCwN,EAAY7D,EAAS7K,QAAQkB,OACxB,CACL,MAAM6S,EAAO9R,KAAKE,IAAIb,EAAO+L,mBAAoB0C,GACjDrB,EAAYqF,EAAO9R,KAAKgL,OAAO8C,EAAcgE,GAAQzS,EAAO8L,eAC9D,CAEA,GADIsB,GAAa7D,EAAShR,SAAQ6U,EAAY7D,EAAShR,OAAS,GAC5DkW,IAAgBwD,EAQlB,OAPI7E,IAAcgF,IAChB5S,EAAO4N,UAAYA,EACnB5N,EAAOkI,KAAK,yBAEVlI,EAAOQ,OAAOqM,MAAQ7M,EAAOyJ,SAAWzJ,EAAOQ,OAAOiJ,QAAQC,UAChE1J,EAAO0S,UAAYG,EAAoB5D,KAK3C,IAAIyD,EAEFA,EADE1S,EAAOyJ,SAAWjJ,EAAOiJ,QAAQC,SAAWlJ,EAAOqM,KACzCgG,EAAoB5D,GACvBjP,EAAO4J,OAAOqF,GACXtG,SAAS3I,EAAO4J,OAAOqF,GAAaF,aAAa,4BAA8BE,EAAa,IAE5FA,EAEdzW,OAAOqQ,OAAO7I,EAAQ,CACpB4N,YACA8E,YACAD,gBACAxD,gBAEFjP,EAAOkI,KAAK,qBACZlI,EAAOkI,KAAK,mBACRyK,IAAsBD,GACxB1S,EAAOkI,KAAK,oBAEVlI,EAAOkT,aAAelT,EAAOQ,OAAO2S,qBACtCnT,EAAOkI,KAAK,cAEhB,ERvEEkL,mBSlBa,SAA4BpP,GACzC,MAAMhE,EAASvE,KACT+E,EAASR,EAAOQ,OAChBkL,EAAQ1H,EAAEqP,QAAQ,IAAI7S,EAAOqJ,4BACnC,IACIuD,EADAkG,GAAa,EAEjB,GAAI5H,EACF,IAAK,IAAI/M,EAAI,EAAGA,EAAIqB,EAAO4J,OAAO7Q,OAAQ4F,GAAK,EAC7C,GAAIqB,EAAO4J,OAAOjL,KAAO+M,EAAO,CAC9B4H,GAAa,EACblG,EAAazO,EACb,KACF,CAGJ,IAAI+M,IAAS4H,EAUX,OAFAtT,EAAOuT,kBAAe/T,OACtBQ,EAAOwT,kBAAehU,GARtBQ,EAAOuT,aAAe7H,EAClB1L,EAAOyJ,SAAWzJ,EAAOQ,OAAOiJ,QAAQC,QAC1C1J,EAAOwT,aAAe7K,SAAS+C,EAAMqD,aAAa,2BAA4B,IAE9E/O,EAAOwT,aAAepG,EAOtB5M,EAAOiT,0BAA+CjU,IAAxBQ,EAAOwT,cAA8BxT,EAAOwT,eAAiBxT,EAAOiP,aACpGjP,EAAOyT,qBAEX,GCzBA,SACE7W,aCLa,SAA4BE,GAAOrB,KAAKgN,eAAiB,IAAM,MAC5E,MACM,OACJjI,EACA6I,aAAcC,EAAG,UACjBlJ,EAAS,UACTM,GALajF,KAOf,GAAI+E,EAAOkT,iBACT,OAAOpK,GAAOlJ,EAAYA,EAE5B,GAAII,EAAOyK,QACT,OAAO7K,EAET,IAAIuT,EAAmB/W,EAAa8D,EAAW5D,GAE/C,OADIwM,IAAKqK,GAAoBA,GACtBA,GAAoB,CAC7B,EDXEC,aEPa,SAAsBxT,EAAWyT,GAC9C,MAAM7T,EAASvE,MAEb4N,aAAcC,EAAG,OACjB9I,EAAM,UACNE,EAAS,SACTQ,GACElB,EACJ,IAqBI8T,EArBAC,EAAI,EACJC,EAAI,EAEJhU,EAAOyI,eACTsL,EAAIzK,GAAOlJ,EAAYA,EAEvB4T,EAAI5T,EAEFI,EAAOuL,eACTgI,EAAI5S,KAAKgL,MAAM4H,GACfC,EAAI7S,KAAKgL,MAAM6H,IAEbxT,EAAOyK,QACTvK,EAAUV,EAAOyI,eAAiB,aAAe,aAAezI,EAAOyI,gBAAkBsL,GAAKC,EACpFxT,EAAOkT,mBACjBhT,EAAU3G,MAAMsD,UAAY,eAAe0W,QAAQC,aAErDhU,EAAOiU,kBAAoBjU,EAAOI,UAClCJ,EAAOI,UAAYJ,EAAOyI,eAAiBsL,EAAIC,EAI/C,MAAM3D,EAAiBrQ,EAAOsQ,eAAiBtQ,EAAO8P,eAEpDgE,EADqB,IAAnBzD,EACY,GAECjQ,EAAYJ,EAAO8P,gBAAkBO,EAElDyD,IAAgB5S,GAClBlB,EAAOmQ,eAAe/P,GAExBJ,EAAOkI,KAAK,eAAgBlI,EAAOI,UAAWyT,EAChD,EFhCE/D,aGRa,WACb,OAAQrU,KAAKsO,SAAS,EACxB,EHOEuG,aITa,WACb,OAAQ7U,KAAKsO,SAAStO,KAAKsO,SAAShR,OAAS,EAC/C,EJQEmb,YKTa,SAAqB9T,EAAY,EAAGK,EAAQhF,KAAK+E,OAAOC,MAAO0T,GAAe,EAAMC,GAAkB,EAAMC,GACzH,MAAMrU,EAASvE,MACT,OACJ+E,EAAM,UACNE,GACEV,EACJ,GAAIA,EAAOsU,WAAa9T,EAAO+T,+BAC7B,OAAO,EAET,MAAMzE,EAAe9P,EAAO8P,eACtBQ,EAAetQ,EAAOsQ,eAC5B,IAAIkE,EAKJ,GAJiDA,EAA7CJ,GAAmBhU,EAAY0P,EAA6BA,EAAsBsE,GAAmBhU,EAAYkQ,EAA6BA,EAAiClQ,EAGnLJ,EAAOmQ,eAAeqE,GAClBhU,EAAOyK,QAAS,CAClB,MAAMwJ,EAAMzU,EAAOyI,eACnB,GAAc,IAAVhI,EACFC,EAAU+T,EAAM,aAAe,cAAgBD,MAC1C,CACL,IAAKxU,EAAOqE,QAAQI,aAMlB,OALA1E,EAAqB,CACnBC,SACAC,gBAAiBuU,EACjBtU,KAAMuU,EAAM,OAAS,SAEhB,EAET/T,EAAUgB,SAAS,CACjB,CAAC+S,EAAM,OAAS,QAASD,EACzBE,SAAU,UAEd,CACA,OAAO,CACT,CAgCA,OA/Bc,IAAVjU,GACFT,EAAO6O,cAAc,GACrB7O,EAAO4T,aAAaY,GAChBL,IACFnU,EAAOkI,KAAK,wBAAyBzH,EAAO4T,GAC5CrU,EAAOkI,KAAK,oBAGdlI,EAAO6O,cAAcpO,GACrBT,EAAO4T,aAAaY,GAChBL,IACFnU,EAAOkI,KAAK,wBAAyBzH,EAAO4T,GAC5CrU,EAAOkI,KAAK,oBAETlI,EAAOsU,YACVtU,EAAOsU,WAAY,EACdtU,EAAO2U,oCACV3U,EAAO2U,kCAAoC,SAAuB3Q,GAC3DhE,IAAUA,EAAOoH,WAClBpD,EAAEtL,SAAW+C,OACjBuE,EAAOU,UAAUvH,oBAAoB,gBAAiB6G,EAAO2U,mCAC7D3U,EAAO2U,kCAAoC,YACpC3U,EAAO2U,kCACVR,GACFnU,EAAOkI,KAAK,iBAEhB,GAEFlI,EAAOU,UAAUxH,iBAAiB,gBAAiB8G,EAAO2U,sCAGvD,CACT,GCrEe,SAASC,GAAe,OACrC5U,EAAM,aACNmU,EAAY,UACZU,EAAS,KACTC,IAEA,MAAM,YACJ7F,EAAW,cACXwD,GACEzS,EACJ,IAAIa,EAAMgU,EAKV,GAJKhU,IAC8BA,EAA7BoO,EAAcwD,EAAqB,OAAgBxD,EAAcwD,EAAqB,OAAkB,SAE9GzS,EAAOkI,KAAK,aAAa4M,KACrBX,GAAgBlF,IAAgBwD,EAAe,CACjD,GAAY,UAAR5R,EAEF,YADAb,EAAOkI,KAAK,uBAAuB4M,KAGrC9U,EAAOkI,KAAK,wBAAwB4M,KACxB,SAARjU,EACFb,EAAOkI,KAAK,sBAAsB4M,KAElC9U,EAAOkI,KAAK,sBAAsB4M,IAEtC,CACF,CCpBA,SACEC,QCPa,SAAiBhN,EAAQ,EAAGtH,EAAQhF,KAAK+E,OAAOC,MAAO0T,GAAe,EAAME,EAAUW,GAC9E,iBAAVjN,IACTA,EAAQY,SAASZ,EAAO,KAE1B,MAAM/H,EAASvE,KACf,IAAI2R,EAAarF,EACbqF,EAAa,IAAGA,EAAa,GACjC,MAAM,OACJ5M,EAAM,SACNuJ,EAAQ,WACRC,EAAU,cACVyI,EAAa,YACbxD,EACA5F,aAAcC,EAAG,UACjB5I,EAAS,QACTgJ,GACE1J,EACJ,GAAIA,EAAOsU,WAAa9T,EAAO+T,iCAAmC7K,IAAY2K,IAAaW,EACzF,OAAO,EAET,MAAM/B,EAAO9R,KAAKE,IAAIrB,EAAOQ,OAAO+L,mBAAoBa,GACxD,IAAIQ,EAAYqF,EAAO9R,KAAKgL,OAAOiB,EAAa6F,GAAQjT,EAAOQ,OAAO8L,gBAClEsB,GAAa7D,EAAShR,SAAQ6U,EAAY7D,EAAShR,OAAS,GAChE,MAAMqH,GAAa2J,EAAS6D,GAE5B,GAAIpN,EAAOuS,oBACT,IAAK,IAAIpU,EAAI,EAAGA,EAAIqL,EAAWjR,OAAQ4F,GAAK,EAAG,CAC7C,MAAMsW,GAAuB9T,KAAKgL,MAAkB,IAAZ/L,GAClC8U,EAAiB/T,KAAKgL,MAAsB,IAAhBnC,EAAWrL,IACvCwW,EAAqBhU,KAAKgL,MAA0B,IAApBnC,EAAWrL,EAAI,SACpB,IAAtBqL,EAAWrL,EAAI,GACpBsW,GAAuBC,GAAkBD,EAAsBE,GAAsBA,EAAqBD,GAAkB,EAC9H9H,EAAazO,EACJsW,GAAuBC,GAAkBD,EAAsBE,IACxE/H,EAAazO,EAAI,GAEVsW,GAAuBC,IAChC9H,EAAazO,EAEjB,CAGF,GAAIqB,EAAOkT,aAAe9F,IAAe6B,EAAa,CACpD,IAAKjP,EAAOoV,gBAAkBhV,EAAYJ,EAAOI,WAAaA,EAAYJ,EAAO8P,eAC/E,OAAO,EAET,IAAK9P,EAAOqV,gBAAkBjV,EAAYJ,EAAOI,WAAaA,EAAYJ,EAAOsQ,iBAC1ErB,GAAe,KAAO7B,EACzB,OAAO,CAGb,CAOA,IAAIyH,EAIJ,GAVIzH,KAAgBqF,GAAiB,IAAM0B,GACzCnU,EAAOkI,KAAK,0BAIdlI,EAAOmQ,eAAe/P,GAEQyU,EAA1BzH,EAAa6B,EAAyB,OAAgB7B,EAAa6B,EAAyB,OAAwB,QAGpH3F,IAAQlJ,IAAcJ,EAAOI,YAAckJ,GAAOlJ,IAAcJ,EAAOI,UAczE,OAbAJ,EAAOuS,kBAAkBnF,GAErB5M,EAAO6Q,YACTrR,EAAO0O,mBAET1O,EAAOsR,sBACe,UAAlB9Q,EAAOgM,QACTxM,EAAO4T,aAAaxT,GAEJ,UAAdyU,IACF7U,EAAOsV,gBAAgBnB,EAAcU,GACrC7U,EAAOuV,cAAcpB,EAAcU,KAE9B,EAET,GAAIrU,EAAOyK,QAAS,CAClB,MAAMwJ,EAAMzU,EAAOyI,eACb+M,EAAIlM,EAAMlJ,GAAaA,EAC7B,GAAc,IAAVK,EAAa,CACf,MAAM+I,EAAYxJ,EAAOyJ,SAAWzJ,EAAOQ,OAAOiJ,QAAQC,QACtDF,IACFxJ,EAAOU,UAAU3G,MAAM4G,eAAiB,OACxCX,EAAOyV,mBAAoB,GAEzBjM,IAAcxJ,EAAO0V,2BAA6B1V,EAAOQ,OAAOmV,aAAe,GACjF3V,EAAO0V,2BAA4B,EACnCxZ,uBAAsB,KACpBwE,EAAU+T,EAAM,aAAe,aAAee,CAAC,KAGjD9U,EAAU+T,EAAM,aAAe,aAAee,EAE5ChM,GACFtN,uBAAsB,KACpB8D,EAAOU,UAAU3G,MAAM4G,eAAiB,GACxCX,EAAOyV,mBAAoB,CAAK,GAGtC,KAAO,CACL,IAAKzV,EAAOqE,QAAQI,aAMlB,OALA1E,EAAqB,CACnBC,SACAC,eAAgBuV,EAChBtV,KAAMuU,EAAM,OAAS,SAEhB,EAET/T,EAAUgB,SAAS,CACjB,CAAC+S,EAAM,OAAS,OAAQe,EACxBd,SAAU,UAEd,CACA,OAAO,CACT,CAuBA,OAtBA1U,EAAO6O,cAAcpO,GACrBT,EAAO4T,aAAaxT,GACpBJ,EAAOuS,kBAAkBnF,GACzBpN,EAAOsR,sBACPtR,EAAOkI,KAAK,wBAAyBzH,EAAO4T,GAC5CrU,EAAOsV,gBAAgBnB,EAAcU,GACvB,IAAVpU,EACFT,EAAOuV,cAAcpB,EAAcU,GACzB7U,EAAOsU,YACjBtU,EAAOsU,WAAY,EACdtU,EAAO4V,gCACV5V,EAAO4V,8BAAgC,SAAuB5R,GACvDhE,IAAUA,EAAOoH,WAClBpD,EAAEtL,SAAW+C,OACjBuE,EAAOU,UAAUvH,oBAAoB,gBAAiB6G,EAAO4V,+BAC7D5V,EAAO4V,8BAAgC,YAChC5V,EAAO4V,8BACd5V,EAAOuV,cAAcpB,EAAcU,GACrC,GAEF7U,EAAOU,UAAUxH,iBAAiB,gBAAiB8G,EAAO4V,iCAErD,CACT,EDpIEC,YETa,SAAqB9N,EAAQ,EAAGtH,EAAQhF,KAAK+E,OAAOC,MAAO0T,GAAe,EAAME,GAC7F,GAAqB,iBAAVtM,EAAoB,CAE7BA,EADsBY,SAASZ,EAAO,GAExC,CACA,MAAM/H,EAASvE,KACf,IAAIqa,EAAW/N,EASf,OARI/H,EAAOQ,OAAOqM,OACZ7M,EAAOyJ,SAAWzJ,EAAOQ,OAAOiJ,QAAQC,QAE1CoM,GAAsB9V,EAAOyJ,QAAQuD,aAErC8I,EAAW9V,EAAO+Q,cAAc/Q,EAAO4J,OAAO3K,QAAO4C,GAA6D,EAAlDA,EAAQkN,aAAa,6BAAmC+G,IAAU,KAG/H9V,EAAO+U,QAAQe,EAAUrV,EAAO0T,EAAcE,EACvD,EFNE0B,UGTa,SAAmBtV,EAAQhF,KAAK+E,OAAOC,MAAO0T,GAAe,EAAME,GAChF,MAAMrU,EAASvE,MACT,QACJiO,EAAO,OACPlJ,EAAM,UACN8T,GACEtU,EACJ,IAAK0J,EAAS,OAAO1J,EACrB,IAAIgW,EAAWxV,EAAO8L,eACO,SAAzB9L,EAAOgL,eAAsD,IAA1BhL,EAAO8L,gBAAwB9L,EAAOyV,qBAC3ED,EAAW7U,KAAKC,IAAIpB,EAAOkW,qBAAqB,WAAW,GAAO,IAEpE,MAAMC,EAAYnW,EAAOiP,YAAczO,EAAO+L,mBAAqB,EAAIyJ,EACjExM,EAAYxJ,EAAOyJ,SAAWjJ,EAAOiJ,QAAQC,QACnD,GAAIlJ,EAAOqM,KAAM,CACf,GAAIyH,IAAc9K,GAAahJ,EAAO4V,oBAAqB,OAAO,EAClEpW,EAAOqW,QAAQ,CACbxB,UAAW,SAGb7U,EAAOsW,YAActW,EAAOU,UAAUmC,UACxC,CACA,OAAIrC,EAAO+V,QAAUvW,EAAOwQ,MACnBxQ,EAAO+U,QAAQ,EAAGtU,EAAO0T,EAAcE,GAEzCrU,EAAO+U,QAAQ/U,EAAOiP,YAAckH,EAAW1V,EAAO0T,EAAcE,EAC7E,EHhBEmC,UIVa,SAAmB/V,EAAQhF,KAAK+E,OAAOC,MAAO0T,GAAe,EAAME,GAChF,MAAMrU,EAASvE,MACT,OACJ+E,EAAM,SACNuJ,EAAQ,WACRC,EAAU,aACVX,EAAY,QACZK,EAAO,UACP4K,GACEtU,EACJ,IAAK0J,EAAS,OAAO1J,EACrB,MAAMwJ,EAAYxJ,EAAOyJ,SAAWjJ,EAAOiJ,QAAQC,QACnD,GAAIlJ,EAAOqM,KAAM,CACf,GAAIyH,IAAc9K,GAAahJ,EAAO4V,oBAAqB,OAAO,EAClEpW,EAAOqW,QAAQ,CACbxB,UAAW,SAGb7U,EAAOsW,YAActW,EAAOU,UAAUmC,UACxC,CAEA,SAAS4T,EAAUC,GACjB,OAAIA,EAAM,GAAWvV,KAAKgL,MAAMhL,KAAKkL,IAAIqK,IAClCvV,KAAKgL,MAAMuK,EACpB,CACA,MAAMzB,EAAsBwB,EALVpN,EAAerJ,EAAOI,WAAaJ,EAAOI,WAMtDuW,EAAqB5M,EAASvM,KAAIkZ,GAAOD,EAAUC,KACzD,IAAIE,EAAW7M,EAAS4M,EAAmBzX,QAAQ+V,GAAuB,GAC1E,QAAwB,IAAb2B,GAA4BpW,EAAOyK,QAAS,CACrD,IAAI4L,EACJ9M,EAASlR,SAAQ,CAAC4U,EAAMG,KAClBqH,GAAuBxH,IAEzBoJ,EAAgBjJ,EAClB,SAE2B,IAAlBiJ,IACTD,EAAW7M,EAAS8M,EAAgB,EAAIA,EAAgB,EAAIA,GAEhE,CACA,IAAIC,EAAY,EAShB,QARwB,IAAbF,IACTE,EAAY9M,EAAW9K,QAAQ0X,GAC3BE,EAAY,IAAGA,EAAY9W,EAAOiP,YAAc,GACvB,SAAzBzO,EAAOgL,eAAsD,IAA1BhL,EAAO8L,gBAAwB9L,EAAOyV,qBAC3Ea,EAAYA,EAAY9W,EAAOkW,qBAAqB,YAAY,GAAQ,EACxEY,EAAY3V,KAAKC,IAAI0V,EAAW,KAGhCtW,EAAO+V,QAAUvW,EAAOuQ,YAAa,CACvC,MAAMwG,EAAY/W,EAAOQ,OAAOiJ,SAAWzJ,EAAOQ,OAAOiJ,QAAQC,SAAW1J,EAAOyJ,QAAUzJ,EAAOyJ,QAAQG,OAAO7Q,OAAS,EAAIiH,EAAO4J,OAAO7Q,OAAS,EACvJ,OAAOiH,EAAO+U,QAAQgC,EAAWtW,EAAO0T,EAAcE,EACxD,CACA,OAAOrU,EAAO+U,QAAQ+B,EAAWrW,EAAO0T,EAAcE,EACxD,EJ3CE2C,WKXa,SAAoBvW,EAAQhF,KAAK+E,OAAOC,MAAO0T,GAAe,EAAME,GAEjF,OADe5Y,KACDsZ,QADCtZ,KACcwT,YAAaxO,EAAO0T,EAAcE,EACjE,ELSE4C,eMZa,SAAwBxW,EAAQhF,KAAK+E,OAAOC,MAAO0T,GAAe,EAAME,EAAU6C,EAAY,IAC3G,MAAMlX,EAASvE,KACf,IAAIsM,EAAQ/H,EAAOiP,YACnB,MAAMgE,EAAO9R,KAAKE,IAAIrB,EAAOQ,OAAO+L,mBAAoBxE,GAClD6F,EAAYqF,EAAO9R,KAAKgL,OAAOpE,EAAQkL,GAAQjT,EAAOQ,OAAO8L,gBAC7DlM,EAAYJ,EAAOqJ,aAAerJ,EAAOI,WAAaJ,EAAOI,UACnE,GAAIA,GAAaJ,EAAO+J,SAAS6D,GAAY,CAG3C,MAAMuJ,EAAcnX,EAAO+J,SAAS6D,GAEhCxN,EAAY+W,GADCnX,EAAO+J,SAAS6D,EAAY,GACHuJ,GAAeD,IACvDnP,GAAS/H,EAAOQ,OAAO8L,eAE3B,KAAO,CAGL,MAAMsK,EAAW5W,EAAO+J,SAAS6D,EAAY,GAEzCxN,EAAYwW,IADI5W,EAAO+J,SAAS6D,GACOgJ,GAAYM,IACrDnP,GAAS/H,EAAOQ,OAAO8L,eAE3B,CAGA,OAFAvE,EAAQ5G,KAAKC,IAAI2G,EAAO,GACxBA,EAAQ5G,KAAKE,IAAI0G,EAAO/H,EAAOgK,WAAWjR,OAAS,GAC5CiH,EAAO+U,QAAQhN,EAAOtH,EAAO0T,EAAcE,EACpD,ENbEZ,oBOba,WACb,MAAMzT,EAASvE,MACT,OACJ+E,EAAM,SACN2I,GACEnJ,EACEwL,EAAyC,SAAzBhL,EAAOgL,cAA2BxL,EAAOkW,uBAAyB1V,EAAOgL,cAC/F,IACIkH,EADA0E,EAAepX,EAAOwT,aAE1B,MAAM6D,EAAgBrX,EAAOoP,UAAY,eAAiB,IAAI5O,EAAOqJ,aACrE,GAAIrJ,EAAOqM,KAAM,CACf,GAAI7M,EAAOsU,UAAW,OACtB5B,EAAY/J,SAAS3I,EAAOuT,aAAaxE,aAAa,2BAA4B,IAC9EvO,EAAOwK,eACLoM,EAAepX,EAAOsX,aAAe9L,EAAgB,GAAK4L,EAAepX,EAAO4J,OAAO7Q,OAASiH,EAAOsX,aAAe9L,EAAgB,GACxIxL,EAAOqW,UACPe,EAAepX,EAAO+Q,cAAchP,EAAgBoH,EAAU,GAAGkO,8BAA0C3E,OAAe,IAC1HjW,GAAS,KACPuD,EAAO+U,QAAQqC,EAAa,KAG9BpX,EAAO+U,QAAQqC,GAERA,EAAepX,EAAO4J,OAAO7Q,OAASyS,GAC/CxL,EAAOqW,UACPe,EAAepX,EAAO+Q,cAAchP,EAAgBoH,EAAU,GAAGkO,8BAA0C3E,OAAe,IAC1HjW,GAAS,KACPuD,EAAO+U,QAAQqC,EAAa,KAG9BpX,EAAO+U,QAAQqC,EAEnB,MACEpX,EAAO+U,QAAQqC,EAEnB,GCjCA,SACEG,WCHa,SAAoBC,GACjC,MAAMxX,EAASvE,MACT,OACJ+E,EAAM,SACN2I,GACEnJ,EACJ,IAAKQ,EAAOqM,MAAQ7M,EAAOyJ,SAAWzJ,EAAOQ,OAAOiJ,QAAQC,QAAS,OACtD3H,EAAgBoH,EAAU,IAAI3I,EAAOqJ,4BAC7ChR,SAAQ,CAACgE,EAAIkL,KAClBlL,EAAG7C,aAAa,0BAA2B+N,EAAM,IAEnD/H,EAAOqW,QAAQ,CACbmB,iBACA3C,UAAWrU,EAAOwK,oBAAiBxL,EAAY,QAEnD,EDXE6W,QELa,UAAiB,eAC9BmB,EAAc,QACdzC,GAAU,EAAI,UACdF,EAAS,aACTjB,EAAY,iBACZ6D,EAAgB,aAChB5D,EAAY,aACZ6D,GACE,CAAC,GACH,MAAM1X,EAASvE,KACf,IAAKuE,EAAOQ,OAAOqM,KAAM,OACzB7M,EAAOkI,KAAK,iBACZ,MAAM,OACJ0B,EAAM,eACNyL,EAAc,eACdD,EAAc,SACdjM,EAAQ,OACR3I,GACER,EAGJ,GAFAA,EAAOqV,gBAAiB,EACxBrV,EAAOoV,gBAAiB,EACpBpV,EAAOyJ,SAAWjJ,EAAOiJ,QAAQC,QAanC,OAZIqL,IACGvU,EAAOwK,gBAAuC,IAArBhL,EAAO4N,UAE1BpN,EAAOwK,gBAAkBhL,EAAO4N,UAAYpN,EAAOgL,cAC5DxL,EAAO+U,QAAQ/U,EAAOyJ,QAAQG,OAAO7Q,OAASiH,EAAO4N,UAAW,GAAG,GAAO,GACjE5N,EAAO4N,YAAc5N,EAAO+J,SAAShR,OAAS,GACvDiH,EAAO+U,QAAQ/U,EAAOyJ,QAAQuD,aAAc,GAAG,GAAO,GAJtDhN,EAAO+U,QAAQ/U,EAAOyJ,QAAQG,OAAO7Q,OAAQ,GAAG,GAAO,IAO3DiH,EAAOqV,eAAiBA,EACxBrV,EAAOoV,eAAiBA,OACxBpV,EAAOkI,KAAK,WAGd,MAAMsD,EAAyC,SAAzBhL,EAAOgL,cAA2BxL,EAAOkW,uBAAyB/U,KAAK4L,KAAK7O,WAAWsC,EAAOgL,cAAe,KACnI,IAAI8L,EAAe9W,EAAO8W,cAAgB9L,EACtC8L,EAAe9W,EAAO8L,gBAAmB,IAC3CgL,GAAgB9W,EAAO8L,eAAiBgL,EAAe9W,EAAO8L,gBAEhEtM,EAAOsX,aAAeA,EACtB,MAAMK,EAAuB,GACvBC,EAAsB,GAC5B,IAAI3I,EAAcjP,EAAOiP,iBACO,IAArBwI,EACTA,EAAmBzX,EAAO+Q,cAAc/Q,EAAO4J,OAAO3K,QAAOpC,GAAMA,EAAGwF,UAAUkM,SAAS,yBAAwB,IAEjHU,EAAcwI,EAEhB,MAAMI,EAAuB,SAAdhD,IAAyBA,EAClCiD,EAAuB,SAAdjD,IAAyBA,EACxC,IAAIkD,EAAkB,EAClBC,EAAiB,EAErB,GAAIP,EAAmBH,EAAc,CACnCS,EAAkB5W,KAAKC,IAAIkW,EAAeG,EAAkBjX,EAAO8L,gBACnE,IAAK,IAAI3N,EAAI,EAAGA,EAAI2Y,EAAeG,EAAkB9Y,GAAK,EAAG,CAC3D,MAAMoJ,EAAQpJ,EAAIwC,KAAKgL,MAAMxN,EAAIiL,EAAO7Q,QAAU6Q,EAAO7Q,OACzD4e,EAAqB9T,KAAK+F,EAAO7Q,OAASgP,EAAQ,EACpD,CACF,MAAO,GAAI0P,EAAyCzX,EAAO4J,OAAO7Q,OAAwB,EAAfue,EAAkB,CAC3FU,EAAiB7W,KAAKC,IAAIqW,GAAoBzX,EAAO4J,OAAO7Q,OAAwB,EAAfue,GAAmB9W,EAAO8L,gBAC/F,IAAK,IAAI3N,EAAI,EAAGA,EAAIqZ,EAAgBrZ,GAAK,EAAG,CAC1C,MAAMoJ,EAAQpJ,EAAIwC,KAAKgL,MAAMxN,EAAIiL,EAAO7Q,QAAU6Q,EAAO7Q,OACzD6e,EAAoB/T,KAAKkE,EAC3B,CACF,CAeA,GAdI+P,GACFH,EAAqB9e,SAAQkP,IAC3BoB,EAAS8O,QAAQjY,EAAO4J,OAAO7B,GAAO,IAGtC8P,GACFD,EAAoB/e,SAAQkP,IAC1BoB,EAAS+O,OAAOlY,EAAO4J,OAAO7B,GAAO,IAGzC/H,EAAOmY,eACH3X,EAAO0N,qBACTlO,EAAOmO,qBAEL4G,EACF,GAAI4C,EAAqB5e,OAAS,GAAK+e,EACrC,QAA8B,IAAnBN,EAAgC,CACzC,MAAMY,EAAwBpY,EAAOgK,WAAWiF,GAE1CoJ,EADoBrY,EAAOgK,WAAWiF,EAAc8I,GACzBK,EAC7BV,EACF1X,EAAO4T,aAAa5T,EAAOI,UAAYiY,IAEvCrY,EAAO+U,QAAQ9F,EAAc8I,EAAiB,GAAG,GAAO,GACpDnE,IACF5T,EAAOsY,QAAQtY,EAAOyI,eAAiB,SAAW,WAAa4P,GAGrE,MACMzE,GACF5T,EAAO6V,YAAY2B,EAAgB,GAAG,GAAO,QAG5C,GAAII,EAAoB7e,OAAS,GAAK8e,EAC3C,QAA8B,IAAnBL,EAAgC,CACzC,MAAMY,EAAwBpY,EAAOgK,WAAWiF,GAE1CoJ,EADoBrY,EAAOgK,WAAWiF,EAAc+I,GACzBI,EAC7BV,EACF1X,EAAO4T,aAAa5T,EAAOI,UAAYiY,IAEvCrY,EAAO+U,QAAQ9F,EAAc+I,EAAgB,GAAG,GAAO,GACnDpE,IACF5T,EAAOsY,QAAQtY,EAAOyI,eAAiB,SAAW,WAAa4P,GAGrE,MACErY,EAAO6V,YAAY2B,EAAgB,GAAG,GAAO,GAMnD,GAFAxX,EAAOqV,eAAiBA,EACxBrV,EAAOoV,eAAiBA,EACpBpV,EAAOuY,YAAcvY,EAAOuY,WAAWC,UAAY3E,EAAc,CACnE,MAAM4E,EAAa,CACjBjB,iBACAzC,SAAS,EACTF,YACAjB,eACA6D,mBACA5D,cAAc,GAEZtR,MAAMC,QAAQxC,EAAOuY,WAAWC,SAClCxY,EAAOuY,WAAWC,QAAQ3f,SAAQ6f,IAC5BA,EAAElY,OAAOqM,MAAM6L,EAAErC,QAAQoC,EAAW,IAEjCzY,EAAOuY,WAAWC,mBAAmBxY,EAAOzH,aAAeyH,EAAOuY,WAAWC,QAAQhY,OAAOqM,MACrG7M,EAAOuY,WAAWC,QAAQnC,QAAQoC,EAEtC,CACAzY,EAAOkI,KAAK,UACd,EFrIEyQ,YGNa,WACb,MAAM3Y,EAASvE,MACT,OACJmO,EAAM,OACNpJ,EAAM,SACN2I,GACEnJ,EACJ,IAAKQ,EAAOqM,MAAQ7M,EAAOyJ,SAAWzJ,EAAOQ,OAAOiJ,QAAQC,QAAS,OACrE1J,EAAOmY,eACP,MAAMS,EAAiB,GACvBhP,EAAO/Q,SAAQgJ,IACb,MAAMkG,OAA4C,IAA7BlG,EAAQgX,iBAAqF,EAAlDhX,EAAQkN,aAAa,2BAAiClN,EAAQgX,iBAC9HD,EAAe7Q,GAASlG,CAAO,IAEjC+H,EAAO/Q,SAAQgJ,IACbA,EAAQiX,gBAAgB,0BAA0B,IAEpDF,EAAe/f,SAAQgJ,IACrBsH,EAAS+O,OAAOrW,EAAQ,IAE1B7B,EAAOmY,eACPnY,EAAO+U,QAAQ/U,EAAO0S,UAAW,EACnC,GCNe,SAASqG,EAAazR,GACnC,MAAMtH,EAASvE,KACTV,EAAWF,IACX2B,EAASF,IACT6L,EAAOnI,EAAOgZ,gBACpB7Q,EAAK8Q,QAAQpV,KAAKyD,GAClB,MAAM,OACJ9G,EAAM,QACN8X,EAAO,QACP5O,GACE1J,EACJ,IAAK0J,EAAS,OACd,IAAKlJ,EAAO0Y,eAAuC,UAAtB5R,EAAM6R,YAAyB,OAC5D,GAAInZ,EAAOsU,WAAa9T,EAAO+T,+BAC7B,QAEGvU,EAAOsU,WAAa9T,EAAOyK,SAAWzK,EAAOqM,MAChD7M,EAAOqW,UAET,IAAIrS,EAAIsD,EACJtD,EAAEoV,gBAAepV,EAAIA,EAAEoV,eAC3B,IAAIC,EAAWrV,EAAEtL,OACjB,GAAiC,YAA7B8H,EAAO8Y,oBACJtZ,EAAOU,UAAU6N,SAAS8K,GAAW,OAE5C,GAAI,UAAWrV,GAAiB,IAAZA,EAAEuV,MAAa,OACnC,GAAI,WAAYvV,GAAKA,EAAEwV,OAAS,EAAG,OACnC,GAAIrR,EAAKsR,WAAatR,EAAKuR,QAAS,OAGpC,MAAMC,IAAyBnZ,EAAOoZ,gBAA4C,KAA1BpZ,EAAOoZ,eAEzDC,EAAYvS,EAAMwS,aAAexS,EAAMwS,eAAiBxS,EAAMyS,KAChEJ,GAAwB3V,EAAEtL,QAAUsL,EAAEtL,OAAOshB,YAAcH,IAC7DR,EAAWQ,EAAU,IAEvB,MAAMI,EAAoBzZ,EAAOyZ,kBAAoBzZ,EAAOyZ,kBAAoB,IAAIzZ,EAAOoZ,iBACrFM,KAAoBlW,EAAEtL,SAAUsL,EAAEtL,OAAOshB,YAG/C,GAAIxZ,EAAO2Z,YAAcD,EApD3B,SAAwBjY,EAAUmY,EAAO3e,MAUvC,OATA,SAAS4e,EAAcxd,GACrB,IAAKA,GAAMA,IAAOhC,KAAiBgC,IAAOP,IAAa,OAAO,KAC1DO,EAAGyd,eAAczd,EAAKA,EAAGyd,cAC7B,MAAMC,EAAQ1d,EAAGwW,QAAQpR,GACzB,OAAKsY,GAAU1d,EAAG2d,YAGXD,GAASF,EAAcxd,EAAG2d,cAAclgB,MAFtC,IAGX,CACO+f,CAAcD,EACvB,CAyC4CK,CAAeR,EAAmBZ,GAAYA,EAAShG,QAAQ4G,IAEvG,YADAja,EAAO0a,YAAa,GAGtB,GAAIla,EAAOma,eACJtB,EAAShG,QAAQ7S,EAAOma,cAAe,OAE9CrC,EAAQsC,SAAW5W,EAAE6W,MACrBvC,EAAQwC,SAAW9W,EAAE+W,MACrB,MAAMC,EAAS1C,EAAQsC,SACjBK,EAAS3C,EAAQwC,SAIjBI,EAAqB1a,EAAO0a,oBAAsB1a,EAAO2a,sBACzDC,EAAqB5a,EAAO4a,oBAAsB5a,EAAO6a,sBAC/D,GAAIH,IAAuBF,GAAUI,GAAsBJ,GAAUxe,EAAO8e,WAAaF,GAAqB,CAC5G,GAA2B,YAAvBF,EAGF,OAFA5T,EAAMiU,gBAIV,CACA/iB,OAAOqQ,OAAOV,EAAM,CAClBsR,WAAW,EACXC,SAAS,EACT8B,qBAAqB,EACrBC,iBAAajc,EACbkc,iBAAalc,IAEf8Y,EAAQ0C,OAASA,EACjB1C,EAAQ2C,OAASA,EACjB9S,EAAKwT,eAAiBhf,IACtBqD,EAAO0a,YAAa,EACpB1a,EAAOsI,aACPtI,EAAO4b,oBAAiBpc,EACpBgB,EAAO0W,UAAY,IAAG/O,EAAK0T,oBAAqB,GACpD,IAAIN,GAAiB,EACjBlC,EAASnX,QAAQiG,EAAK2T,qBACxBP,GAAiB,EACS,WAAtBlC,EAAS/f,WACX6O,EAAKsR,WAAY,IAGjB1e,EAAS3B,eAAiB2B,EAAS3B,cAAc8I,QAAQiG,EAAK2T,oBAAsB/gB,EAAS3B,gBAAkBigB,GACjHte,EAAS3B,cAAcC,OAEzB,MAAM0iB,EAAuBR,GAAkBvb,EAAOgc,gBAAkBxb,EAAOyb,0BAC1Ezb,EAAO0b,gCAAiCH,GAA0B1C,EAAS8C,mBAC9EnY,EAAEuX,iBAEAvb,EAAOQ,OAAO4b,UAAYpc,EAAOQ,OAAO4b,SAAS1S,SAAW1J,EAAOoc,UAAYpc,EAAOsU,YAAc9T,EAAOyK,SAC7GjL,EAAOoc,SAASrD,eAElB/Y,EAAOkI,KAAK,aAAclE,EAC5B,CC7Ge,SAASqY,EAAY/U,GAClC,MAAMvM,EAAWF,IACXmF,EAASvE,KACT0M,EAAOnI,EAAOgZ,iBACd,OACJxY,EAAM,QACN8X,EACAjP,aAAcC,EAAG,QACjBI,GACE1J,EACJ,IAAK0J,EAAS,OACd,IAAKlJ,EAAO0Y,eAAuC,UAAtB5R,EAAM6R,YAAyB,OAC5D,IAAInV,EAAIsD,EAER,GADItD,EAAEoV,gBAAepV,EAAIA,EAAEoV,gBACtBjR,EAAKsR,UAIR,YAHItR,EAAKuT,aAAevT,EAAKsT,aAC3Bzb,EAAOkI,KAAK,oBAAqBlE,IAIrC,MAAMsY,EAAenU,EAAK8Q,QAAQsD,WAAUC,GAAYA,EAASC,YAAczY,EAAEyY,YAC7EH,GAAgB,IAAGnU,EAAK8Q,QAAQqD,GAAgBtY,GACpD,MAAM0Y,EAAcvU,EAAK8Q,QAAQlgB,OAAS,EAAIoP,EAAK8Q,QAAQ,GAAKjV,EAC1D6W,EAAQ6B,EAAY7B,MACpBE,EAAQ2B,EAAY3B,MAC1B,GAAI/W,EAAE2Y,wBAGJ,OAFArE,EAAQ0C,OAASH,OACjBvC,EAAQ2C,OAASF,GAGnB,IAAK/a,EAAOgc,eAeV,OAdKhY,EAAEtL,OAAOwJ,QAAQiG,EAAK2T,qBACzB9b,EAAO0a,YAAa,QAElBvS,EAAKsR,YACPjhB,OAAOqQ,OAAOyP,EAAS,CACrB0C,OAAQH,EACRI,OAAQF,EACR6B,MAAO5c,EAAOsY,QAAQsC,SACtBiC,MAAO7c,EAAOsY,QAAQwC,SACtBF,SAAUC,EACVC,SAAUC,IAEZ5S,EAAKwT,eAAiBhf,MAI1B,GAAI6D,EAAOsc,sBAAwBtc,EAAOqM,KACxC,GAAI7M,EAAO0I,cAET,GAAIqS,EAAQzC,EAAQ2C,QAAUjb,EAAOI,WAAaJ,EAAOsQ,gBAAkByK,EAAQzC,EAAQ2C,QAAUjb,EAAOI,WAAaJ,EAAO8P,eAG9H,OAFA3H,EAAKsR,WAAY,OACjBtR,EAAKuR,SAAU,QAGZ,GAAImB,EAAQvC,EAAQ0C,QAAUhb,EAAOI,WAAaJ,EAAOsQ,gBAAkBuK,EAAQvC,EAAQ0C,QAAUhb,EAAOI,WAAaJ,EAAO8P,eACrI,OAGJ,GAAI/U,EAAS3B,eACP4K,EAAEtL,SAAWqC,EAAS3B,eAAiB4K,EAAEtL,OAAOwJ,QAAQiG,EAAK2T,mBAG/D,OAFA3T,EAAKuR,SAAU,OACf1Z,EAAO0a,YAAa,GAOxB,GAHIvS,EAAKqT,qBACPxb,EAAOkI,KAAK,YAAalE,GAEvBA,EAAE+Y,eAAiB/Y,EAAE+Y,cAAchkB,OAAS,EAAG,OACnDuf,EAAQsC,SAAWC,EACnBvC,EAAQwC,SAAWC,EACnB,MAAMiC,EAAQ1E,EAAQsC,SAAWtC,EAAQ0C,OACnCiC,EAAQ3E,EAAQwC,SAAWxC,EAAQ2C,OACzC,GAAIjb,EAAOQ,OAAO0W,WAAa/V,KAAK+b,KAAKF,GAAS,EAAIC,GAAS,GAAKjd,EAAOQ,OAAO0W,UAAW,OAC7F,QAAgC,IAArB/O,EAAKsT,YAA6B,CAC3C,IAAI0B,EACAnd,EAAOyI,gBAAkB6P,EAAQwC,WAAaxC,EAAQ2C,QAAUjb,EAAO0I,cAAgB4P,EAAQsC,WAAatC,EAAQ0C,OACtH7S,EAAKsT,aAAc,EAGfuB,EAAQA,EAAQC,EAAQA,GAAS,KACnCE,EAA4D,IAA/Chc,KAAKic,MAAMjc,KAAKkL,IAAI4Q,GAAQ9b,KAAKkL,IAAI2Q,IAAgB7b,KAAKK,GACvE2G,EAAKsT,YAAczb,EAAOyI,eAAiB0U,EAAa3c,EAAO2c,WAAa,GAAKA,EAAa3c,EAAO2c,WAG3G,CASA,GARIhV,EAAKsT,aACPzb,EAAOkI,KAAK,oBAAqBlE,QAEH,IAArBmE,EAAKuT,cACVpD,EAAQsC,WAAatC,EAAQ0C,QAAU1C,EAAQwC,WAAaxC,EAAQ2C,SACtE9S,EAAKuT,aAAc,IAGnBvT,EAAKsT,aAAezb,EAAOqd,MAAQrd,EAAOQ,OAAO6c,MAAQrd,EAAOQ,OAAO6c,KAAK3T,SAAWvB,EAAK8Q,QAAQlgB,OAAS,EAE/G,YADAoP,EAAKsR,WAAY,GAGnB,IAAKtR,EAAKuT,YACR,OAEF1b,EAAO0a,YAAa,GACfla,EAAOyK,SAAWjH,EAAEsZ,YACvBtZ,EAAEuX,iBAEA/a,EAAO+c,2BAA6B/c,EAAOgd,QAC7CxZ,EAAEyZ,kBAEJ,IAAIpF,EAAOrY,EAAOyI,eAAiBuU,EAAQC,EACvCS,EAAc1d,EAAOyI,eAAiB6P,EAAQsC,SAAWtC,EAAQqF,UAAYrF,EAAQwC,SAAWxC,EAAQsF,UACxGpd,EAAOqd,iBACTxF,EAAOlX,KAAKkL,IAAIgM,IAAS/O,EAAM,GAAK,GACpCoU,EAAcvc,KAAKkL,IAAIqR,IAAgBpU,EAAM,GAAK,IAEpDgP,EAAQD,KAAOA,EACfA,GAAQ7X,EAAOsd,WACXxU,IACF+O,GAAQA,EACRqF,GAAeA,GAEjB,MAAMK,EAAuB/d,EAAOge,iBACpChe,EAAO4b,eAAiBvD,EAAO,EAAI,OAAS,OAC5CrY,EAAOge,iBAAmBN,EAAc,EAAI,OAAS,OACrD,MAAMO,EAASje,EAAOQ,OAAOqM,OAASrM,EAAOyK,QAC7C,IAAK9C,EAAKuR,QAAS,CAQjB,GAPIuE,GACFje,EAAOqW,QAAQ,CACbxB,UAAW7U,EAAO4b,iBAGtBzT,EAAK+V,eAAiBle,EAAOpD,eAC7BoD,EAAO6O,cAAc,GACjB7O,EAAOsU,UAAW,CACpB,MAAM6J,EAAM,IAAI3hB,OAAOhB,YAAY,gBAAiB,CAClD4iB,SAAS,EACTd,YAAY,IAEdtd,EAAOU,UAAU2d,cAAcF,EACjC,CACAhW,EAAKmW,qBAAsB,GAEvB9d,EAAO+d,aAAyC,IAA1Bve,EAAOoV,iBAAqD,IAA1BpV,EAAOqV,gBACjErV,EAAOwe,eAAc,GAEvBxe,EAAOkI,KAAK,kBAAmBlE,EACjC,CACA,IAAIya,EACAtW,EAAKuR,SAAWqE,IAAyB/d,EAAOge,kBAAoBC,GAAU9c,KAAKkL,IAAIgM,IAAS,IAElGrY,EAAOqW,QAAQ,CACbxB,UAAW7U,EAAO4b,eAClBhI,cAAc,IAEhB6K,GAAY,GAEdze,EAAOkI,KAAK,aAAclE,GAC1BmE,EAAKuR,SAAU,EACfvR,EAAKwL,iBAAmB0E,EAAOlQ,EAAK+V,eACpC,IAAIQ,GAAsB,EACtBC,EAAkBne,EAAOme,gBAiD7B,GAhDIne,EAAOsc,sBACT6B,EAAkB,GAEhBtG,EAAO,GACL4F,IAAWQ,GAAatW,EAAKwL,kBAAoBnT,EAAOwK,eAAiBhL,EAAO8P,eAAiB9P,EAAOkE,KAAO,EAAIlE,EAAO8P,iBAC5H9P,EAAOqW,QAAQ,CACbxB,UAAW,OACXjB,cAAc,EACd6D,iBAAkB,IAGlBtP,EAAKwL,iBAAmB3T,EAAO8P,iBACjC4O,GAAsB,EAClBle,EAAOoe,aACTzW,EAAKwL,iBAAmB3T,EAAO8P,eAAiB,IAAM9P,EAAO8P,eAAiB3H,EAAK+V,eAAiB7F,IAASsG,KAGxGtG,EAAO,IACZ4F,IAAWQ,GAAatW,EAAKwL,kBAAoBnT,EAAOwK,eAAiBhL,EAAOsQ,eAAiBtQ,EAAOkE,KAAO,EAAIlE,EAAOsQ,iBAC5HtQ,EAAOqW,QAAQ,CACbxB,UAAW,OACXjB,cAAc,EACd6D,iBAAkBzX,EAAO4J,OAAO7Q,QAAmC,SAAzByH,EAAOgL,cAA2BxL,EAAOkW,uBAAyB/U,KAAK4L,KAAK7O,WAAWsC,EAAOgL,cAAe,QAGvJrD,EAAKwL,iBAAmB3T,EAAOsQ,iBACjCoO,GAAsB,EAClBle,EAAOoe,aACTzW,EAAKwL,iBAAmB3T,EAAOsQ,eAAiB,GAAKtQ,EAAOsQ,eAAiBnI,EAAK+V,eAAiB7F,IAASsG,KAI9GD,IACF1a,EAAE2Y,yBAA0B,IAIzB3c,EAAOoV,gBAA4C,SAA1BpV,EAAO4b,gBAA6BzT,EAAKwL,iBAAmBxL,EAAK+V,iBAC7F/V,EAAKwL,iBAAmBxL,EAAK+V,iBAE1Ble,EAAOqV,gBAA4C,SAA1BrV,EAAO4b,gBAA6BzT,EAAKwL,iBAAmBxL,EAAK+V,iBAC7F/V,EAAKwL,iBAAmBxL,EAAK+V,gBAE1Ble,EAAOqV,gBAAmBrV,EAAOoV,iBACpCjN,EAAKwL,iBAAmBxL,EAAK+V,gBAI3B1d,EAAO0W,UAAY,EAAG,CACxB,KAAI/V,KAAKkL,IAAIgM,GAAQ7X,EAAO0W,WAAa/O,EAAK0T,oBAW5C,YADA1T,EAAKwL,iBAAmBxL,EAAK+V,gBAT7B,IAAK/V,EAAK0T,mBAMR,OALA1T,EAAK0T,oBAAqB,EAC1BvD,EAAQ0C,OAAS1C,EAAQsC,SACzBtC,EAAQ2C,OAAS3C,EAAQwC,SACzB3S,EAAKwL,iBAAmBxL,EAAK+V,oBAC7B5F,EAAQD,KAAOrY,EAAOyI,eAAiB6P,EAAQsC,SAAWtC,EAAQ0C,OAAS1C,EAAQwC,SAAWxC,EAAQ2C,OAO5G,CACKza,EAAOqe,eAAgBre,EAAOyK,WAG/BzK,EAAO4b,UAAY5b,EAAO4b,SAAS1S,SAAW1J,EAAOoc,UAAY5b,EAAO0N,uBAC1ElO,EAAOuS,oBACPvS,EAAOsR,uBAELtR,EAAOQ,OAAO4b,UAAY5b,EAAO4b,SAAS1S,SAAW1J,EAAOoc,UAC9Dpc,EAAOoc,SAASC,cAGlBrc,EAAOmQ,eAAehI,EAAKwL,kBAE3B3T,EAAO4T,aAAazL,EAAKwL,kBAC3B,CC/Oe,SAASmL,EAAWxX,GACjC,MAAMtH,EAASvE,KACT0M,EAAOnI,EAAOgZ,gBACdsD,EAAenU,EAAK8Q,QAAQsD,WAAUC,GAAYA,EAASC,YAAcnV,EAAMmV,YAIrF,GAHIH,GAAgB,GAClBnU,EAAK8Q,QAAQjR,OAAOsU,EAAc,GAEhC,CAAC,gBAAiB,aAAc,gBAAgBhW,SAASgB,EAAMyX,MAAO,CAExE,KAD+B,kBAAfzX,EAAMyX,OAA6B/e,EAAOuE,QAAQ4B,UAAYnG,EAAOuE,QAAQoC,YAE3F,MAEJ,CACA,MAAM,OACJnG,EAAM,QACN8X,EACAjP,aAAcC,EAAG,WACjBU,EAAU,QACVN,GACE1J,EACJ,IAAK0J,EAAS,OACd,IAAKlJ,EAAO0Y,eAAuC,UAAtB5R,EAAM6R,YAAyB,OAC5D,IAAInV,EAAIsD,EAMR,GALItD,EAAEoV,gBAAepV,EAAIA,EAAEoV,eACvBjR,EAAKqT,qBACPxb,EAAOkI,KAAK,WAAYlE,GAE1BmE,EAAKqT,qBAAsB,GACtBrT,EAAKsR,UAMR,OALItR,EAAKuR,SAAWlZ,EAAO+d,YACzBve,EAAOwe,eAAc,GAEvBrW,EAAKuR,SAAU,OACfvR,EAAKuT,aAAc,GAIjBlb,EAAO+d,YAAcpW,EAAKuR,SAAWvR,EAAKsR,aAAwC,IAA1BzZ,EAAOoV,iBAAqD,IAA1BpV,EAAOqV,iBACnGrV,EAAOwe,eAAc,GAIvB,MAAMQ,EAAeriB,IACfsiB,EAAWD,EAAe7W,EAAKwT,eAGrC,GAAI3b,EAAO0a,WAAY,CACrB,MAAMwE,EAAWlb,EAAE+V,MAAQ/V,EAAE8V,cAAgB9V,EAAE8V,eAC/C9Z,EAAOoT,mBAAmB8L,GAAYA,EAAS,IAAMlb,EAAEtL,QACvDsH,EAAOkI,KAAK,YAAalE,GACrBib,EAAW,KAAOD,EAAe7W,EAAKgX,cAAgB,KACxDnf,EAAOkI,KAAK,wBAAyBlE,EAEzC,CAKA,GAJAmE,EAAKgX,cAAgBxiB,IACrBF,GAAS,KACFuD,EAAOoH,YAAWpH,EAAO0a,YAAa,EAAI,KAE5CvS,EAAKsR,YAActR,EAAKuR,UAAY1Z,EAAO4b,gBAAmC,IAAjBtD,EAAQD,MAAclQ,EAAKwL,mBAAqBxL,EAAK+V,eAIrH,OAHA/V,EAAKsR,WAAY,EACjBtR,EAAKuR,SAAU,OACfvR,EAAKuT,aAAc,GAMrB,IAAI0D,EAMJ,GATAjX,EAAKsR,WAAY,EACjBtR,EAAKuR,SAAU,EACfvR,EAAKuT,aAAc,EAGjB0D,EADE5e,EAAOqe,aACIvV,EAAMtJ,EAAOI,WAAaJ,EAAOI,WAEhC+H,EAAKwL,iBAEjBnT,EAAOyK,QACT,OAEF,GAAIjL,EAAOQ,OAAO4b,UAAY5b,EAAO4b,SAAS1S,QAI5C,YAHA1J,EAAOoc,SAAS0C,WAAW,CACzBM,eAMJ,IAAIC,EAAY,EACZnS,EAAYlN,EAAOiK,gBAAgB,GACvC,IAAK,IAAItL,EAAI,EAAGA,EAAIqL,EAAWjR,OAAQ4F,GAAKA,EAAI6B,EAAO+L,mBAAqB,EAAI/L,EAAO8L,eAAgB,CACrG,MAAM6J,EAAYxX,EAAI6B,EAAO+L,mBAAqB,EAAI,EAAI/L,EAAO8L,oBACxB,IAA9BtC,EAAWrL,EAAIwX,GACpBiJ,GAAcpV,EAAWrL,IAAMygB,EAAapV,EAAWrL,EAAIwX,KAC7DkJ,EAAY1gB,EACZuO,EAAYlD,EAAWrL,EAAIwX,GAAanM,EAAWrL,IAE5CygB,GAAcpV,EAAWrL,KAClC0gB,EAAY1gB,EACZuO,EAAYlD,EAAWA,EAAWjR,OAAS,GAAKiR,EAAWA,EAAWjR,OAAS,GAEnF,CACA,IAAIumB,EAAmB,KACnBC,EAAkB,KAClB/e,EAAO+V,SACLvW,EAAOuQ,YACTgP,EAAkBvf,EAAOQ,OAAOiJ,SAAWzJ,EAAOQ,OAAOiJ,QAAQC,SAAW1J,EAAOyJ,QAAUzJ,EAAOyJ,QAAQG,OAAO7Q,OAAS,EAAIiH,EAAO4J,OAAO7Q,OAAS,EAC9IiH,EAAOwQ,QAChB8O,EAAmB,IAIvB,MAAME,GAASJ,EAAapV,EAAWqV,IAAcnS,EAC/CiJ,EAAYkJ,EAAY7e,EAAO+L,mBAAqB,EAAI,EAAI/L,EAAO8L,eACzE,GAAI2S,EAAWze,EAAOif,aAAc,CAElC,IAAKjf,EAAOkf,WAEV,YADA1f,EAAO+U,QAAQ/U,EAAOiP,aAGM,SAA1BjP,EAAO4b,iBACL4D,GAAShf,EAAOmf,gBAAiB3f,EAAO+U,QAAQvU,EAAO+V,QAAUvW,EAAOwQ,MAAQ8O,EAAmBD,EAAYlJ,GAAgBnW,EAAO+U,QAAQsK,IAEtH,SAA1Brf,EAAO4b,iBACL4D,EAAQ,EAAIhf,EAAOmf,gBACrB3f,EAAO+U,QAAQsK,EAAYlJ,GACE,OAApBoJ,GAA4BC,EAAQ,GAAKre,KAAKkL,IAAImT,GAAShf,EAAOmf,gBAC3E3f,EAAO+U,QAAQwK,GAEfvf,EAAO+U,QAAQsK,GAGrB,KAAO,CAEL,IAAK7e,EAAOof,YAEV,YADA5f,EAAO+U,QAAQ/U,EAAOiP,aAGEjP,EAAO6f,aAAe7b,EAAEtL,SAAWsH,EAAO6f,WAAWC,QAAU9b,EAAEtL,SAAWsH,EAAO6f,WAAWE,QAQ7G/b,EAAEtL,SAAWsH,EAAO6f,WAAWC,OACxC9f,EAAO+U,QAAQsK,EAAYlJ,GAE3BnW,EAAO+U,QAAQsK,IATe,SAA1Brf,EAAO4b,gBACT5b,EAAO+U,QAA6B,OAArBuK,EAA4BA,EAAmBD,EAAYlJ,GAE9C,SAA1BnW,EAAO4b,gBACT5b,EAAO+U,QAA4B,OAApBwK,EAA2BA,EAAkBF,GAOlE,CACF,CCrJA,IAAIW,EACW,SAASC,IACtB,MAAMjgB,EAASvE,MACT,OACJ+E,EAAM,GACN3D,GACEmD,EACJ,GAAInD,GAAyB,IAAnBA,EAAGuH,YAAmB,OAG5B5D,EAAOiL,aACTzL,EAAOkgB,gBAIT,MAAM,eACJ9K,EAAc,eACdC,EAAc,SACdtL,GACE/J,EACEwJ,EAAYxJ,EAAOyJ,SAAWzJ,EAAOQ,OAAOiJ,QAAQC,QAG1D1J,EAAOoV,gBAAiB,EACxBpV,EAAOqV,gBAAiB,EACxBrV,EAAOsI,aACPtI,EAAO8I,eACP9I,EAAOsR,sBACP,MAAM6O,EAAgB3W,GAAahJ,EAAOqM,OACZ,SAAzBrM,EAAOgL,eAA4BhL,EAAOgL,cAAgB,KAAMxL,EAAOwQ,OAAUxQ,EAAOuQ,aAAgBvQ,EAAOQ,OAAOwK,gBAAmBmV,EAGxIngB,EAAOQ,OAAOqM,OAASrD,EACzBxJ,EAAO6V,YAAY7V,EAAO0S,UAAW,GAAG,GAAO,GAE/C1S,EAAO+U,QAAQ/U,EAAOiP,YAAa,GAAG,GAAO,GAL/CjP,EAAO+U,QAAQ/U,EAAO4J,OAAO7Q,OAAS,EAAG,GAAG,GAAO,GAQjDiH,EAAOogB,UAAYpgB,EAAOogB,SAASC,SAAWrgB,EAAOogB,SAASE,SAChEtkB,aAAagkB,GACbA,EAAUjkB,YAAW,KACfiE,EAAOogB,UAAYpgB,EAAOogB,SAASC,SAAWrgB,EAAOogB,SAASE,QAChEtgB,EAAOogB,SAASG,QAClB,GACC,MAGLvgB,EAAOqV,eAAiBA,EACxBrV,EAAOoV,eAAiBA,EACpBpV,EAAOQ,OAAOwN,eAAiBjE,IAAa/J,EAAO+J,UACrD/J,EAAOiO,eAEX,CCpDe,SAASuS,EAAQxc,GAC9B,MAAMhE,EAASvE,KACVuE,EAAO0J,UACP1J,EAAO0a,aACN1a,EAAOQ,OAAOigB,eAAezc,EAAEuX,iBAC/Bvb,EAAOQ,OAAOkgB,0BAA4B1gB,EAAOsU,YACnDtQ,EAAEyZ,kBACFzZ,EAAE2c,6BAGR,CCVe,SAASC,IACtB,MAAM5gB,EAASvE,MACT,UACJiF,EAAS,aACT2I,EAAY,QACZK,GACE1J,EACJ,IAAK0J,EAAS,OAWd,IAAIoK,EAVJ9T,EAAOiU,kBAAoBjU,EAAOI,UAC9BJ,EAAOyI,eACTzI,EAAOI,WAAaM,EAAUsC,WAE9BhD,EAAOI,WAAaM,EAAUoC,UAGP,IAArB9C,EAAOI,YAAiBJ,EAAOI,UAAY,GAC/CJ,EAAOuS,oBACPvS,EAAOsR,sBAEP,MAAMjB,EAAiBrQ,EAAOsQ,eAAiBtQ,EAAO8P,eAEpDgE,EADqB,IAAnBzD,EACY,GAECrQ,EAAOI,UAAYJ,EAAO8P,gBAAkBO,EAEzDyD,IAAgB9T,EAAOkB,UACzBlB,EAAOmQ,eAAe9G,GAAgBrJ,EAAOI,UAAYJ,EAAOI,WAElEJ,EAAOkI,KAAK,eAAgBlI,EAAOI,WAAW,EAChD,CC7BO,MAAMygB,EAAuB,CAAC7gB,EAAQ8gB,KAC3C,IAAK9gB,GAAUA,EAAOoH,YAAcpH,EAAOQ,OAAQ,OACnD,MACMqB,EAAUif,EAAQzN,QADIrT,EAAOoP,UAAY,eAAiB,IAAIpP,EAAOQ,OAAOqJ,cAElF,GAAIhI,EAAS,CACX,MAAMkf,EAASlf,EAAQtI,cAAc,IAAIyG,EAAOQ,OAAOwgB,sBACnDD,GAAQA,EAAOtS,QACrB,GCNa,SAASwS,EAAOjd,GAE7B6c,EADeplB,KACcuI,EAAEtL,QADhB+C,KAERylB,QACT,CCGA,IAAIC,GAAqB,EACzB,SAASC,IAAsB,CAC/B,MAAMra,EAAS,CAAC/G,EAAQqH,KACtB,MAAMtM,EAAWF,KACX,OACJ2F,EAAM,GACN3D,EAAE,UACF6D,EAAS,OACTwE,GACElF,EACEqhB,IAAY7gB,EAAOgd,OACnB8D,EAAuB,OAAXja,EAAkB,mBAAqB,sBACnDka,EAAela,EAGrBxK,EAAGykB,GAAW,cAAethB,EAAO+Y,aAAc,CAChDyI,SAAS,IAEXzmB,EAASumB,GAAW,cAAethB,EAAOqc,YAAa,CACrDmF,SAAS,EACTH,YAEFtmB,EAASumB,GAAW,YAAathB,EAAO8e,WAAY,CAClD0C,SAAS,IAEXzmB,EAASumB,GAAW,gBAAiBthB,EAAO8e,WAAY,CACtD0C,SAAS,IAEXzmB,EAASumB,GAAW,aAActhB,EAAO8e,WAAY,CACnD0C,SAAS,IAEXzmB,EAASumB,GAAW,eAAgBthB,EAAO8e,WAAY,CACrD0C,SAAS,KAIPhhB,EAAOigB,eAAiBjgB,EAAOkgB,2BACjC7jB,EAAGykB,GAAW,QAASthB,EAAOwgB,SAAS,GAErChgB,EAAOyK,SACTvK,EAAU4gB,GAAW,SAAUthB,EAAO4gB,UAIpCpgB,EAAOihB,qBACTzhB,EAAOuhB,GAAcrc,EAAOC,KAAOD,EAAOE,QAAU,0CAA4C,wBAAyB6a,GAAU,GAEnIjgB,EAAOuhB,GAAc,iBAAkBtB,GAAU,GAInDpjB,EAAGykB,GAAW,OAAQthB,EAAOihB,OAAQ,CACnCI,SAAS,GACT,EA0BJ,MCtFMK,EAAgB,CAAC1hB,EAAQQ,IACtBR,EAAOmL,MAAQ3K,EAAO2K,MAAQ3K,EAAO2K,KAAKC,KAAO,EC2B1D,MC7BA,GACEuW,MAAM,EACN9M,UAAW,aACXgJ,gBAAgB,EAChBvE,kBAAmB,UACnB3D,aAAc,EACdlV,MAAO,IACPwK,SAAS,EACTwW,sBAAsB,EACtBG,gBAAgB,EAChBpE,QAAQ,EACRqE,gBAAgB,EAChBnY,SAAS,EACToS,kBAAmB,wDAEnBxW,MAAO,KACPE,OAAQ,KAER+O,gCAAgC,EAEhCrZ,UAAW,KACX4mB,IAAK,KAEL5G,oBAAoB,EACpBE,mBAAoB,GAEpB/J,YAAY,EAEZ5E,gBAAgB,EAEhBiH,kBAAkB,EAElBlH,OAAQ,QAIRf,iBAAajM,EACbuiB,gBAAiB,SAEjBvX,aAAc,EACdgB,cAAe,EACfc,eAAgB,EAChBC,mBAAoB,EACpB0J,oBAAoB,EACpBjL,gBAAgB,EAChBqC,sBAAsB,EACtBlD,mBAAoB,EAEpBE,kBAAmB,EAEnB0I,qBAAqB,EACrBrF,0BAA0B,EAE1BM,eAAe,EAEfjC,cAAc,EAEd+R,WAAY,EACZX,WAAY,GACZjE,eAAe,EACf0G,aAAa,EACbF,YAAY,EACZC,gBAAiB,GACjBF,aAAc,IACdZ,cAAc,EACd7C,gBAAgB,EAChB9E,UAAW,EACXqG,0BAA0B,EAC1BtB,0BAA0B,EAC1BC,+BAA+B,EAC/BY,qBAAqB,EAErBkF,mBAAmB,EAEnBpD,YAAY,EACZD,gBAAiB,IAEjBzQ,qBAAqB,EAErBqQ,YAAY,EAEZkC,eAAe,EACfC,0BAA0B,EAC1BjN,qBAAqB,EAErB5G,MAAM,EACNyK,aAAc,KACdlB,qBAAqB,EAErBG,QAAQ,EAERlB,gBAAgB,EAChBD,gBAAgB,EAChBuF,aAAc,KAEdR,WAAW,EACXP,eAAgB,oBAChBK,kBAAmB,KAEnBgI,kBAAkB,EAClBzT,wBAAyB,GAEzBH,uBAAwB,UAExBxE,WAAY,eACZ4H,iBAAkB,sBAClB/B,kBAAmB,uBACnBgC,eAAgB,oBAChBC,eAAgB,oBAChBuQ,aAAc,iBACdlB,mBAAoB,wBAEpB7N,oBAAoB,EAEpBgP,cAAc,GCjHD,SAASC,EAAmB5hB,EAAQ6hB,GACjD,OAAO,SAAsB/pB,EAAM,CAAC,GAClC,MAAMgqB,EAAkB9pB,OAAOI,KAAKN,GAAK,GACnCiqB,EAAejqB,EAAIgqB,GACG,iBAAjBC,GAA8C,OAAjBA,GAIpC,CAAC,aAAc,aAAc,aAAarjB,QAAQojB,IAAoB,IAAiC,IAA5B9hB,EAAO8hB,KACpF9hB,EAAO8hB,GAAmB,CACxBE,MAAM,IAGJF,KAAmB9hB,GAAU,YAAa+hB,IAIhB,IAA5B/hB,EAAO8hB,KACT9hB,EAAO8hB,GAAmB,CACxB5Y,SAAS,IAG0B,iBAA5BlJ,EAAO8hB,IAAmC,YAAa9hB,EAAO8hB,KACvE9hB,EAAO8hB,GAAiB5Y,SAAU,GAE/BlJ,EAAO8hB,KAAkB9hB,EAAO8hB,GAAmB,CACtD5Y,SAAS,IAEX,EAAO2Y,EAAkB/pB,IAdvB,EAAO+pB,EAAkB/pB,IATzB,EAAO+pB,EAAkB/pB,EAwB7B,CACF,CCTA,MAAMmqB,EAAa,CACjBC,cAAa,EACbxB,OAAM,EACN9gB,UAAS,EACTuiB,WCvBF,CACE9T,cCJa,SAAuBtO,EAAUsT,GAC9C,MAAM7T,EAASvE,KACVuE,EAAOQ,OAAOyK,UACjBjL,EAAOU,UAAU3G,MAAM6oB,mBAAqB,GAAGriB,OAEjDP,EAAOkI,KAAK,gBAAiB3H,EAAUsT,EACzC,EDDEyB,gBEJa,SAAyBnB,GAAe,EAAMU,GAC3D,MAAM7U,EAASvE,MACT,OACJ+E,GACER,EACAQ,EAAOyK,UACPzK,EAAO6Q,YACTrR,EAAO0O,mBAETkG,EAAe,CACb5U,SACAmU,eACAU,YACAC,KAAM,UAEV,EFVES,cGLa,SAAuBpB,GAAe,EAAMU,GACzD,MAAM7U,EAASvE,MACT,OACJ+E,GACER,EACJA,EAAOsU,WAAY,EACf9T,EAAOyK,UACXjL,EAAO6O,cAAc,GACrB+F,EAAe,CACb5U,SACAmU,eACAU,YACAC,KAAM,QAEV,GJYEpJ,MAAK,EACLmB,KAAI,EACJ0R,WK3BF,CACEC,cCHa,SAAuBqE,GACpC,MAAM7iB,EAASvE,KACf,IAAKuE,EAAOQ,OAAO0Y,eAAiBlZ,EAAOQ,OAAOwN,eAAiBhO,EAAO8iB,UAAY9iB,EAAOQ,OAAOyK,QAAS,OAC7G,MAAMpO,EAAyC,cAApCmD,EAAOQ,OAAO8Y,kBAAoCtZ,EAAOnD,GAAKmD,EAAOU,UAC5EV,EAAOoP,YACTpP,EAAO+iB,qBAAsB,GAE/BlmB,EAAG9C,MAAMipB,OAAS,OAClBnmB,EAAG9C,MAAMipB,OAASH,EAAS,WAAa,OACpC7iB,EAAOoP,WACTlT,uBAAsB,KACpB8D,EAAO+iB,qBAAsB,CAAK,GAGxC,EDVEE,gBEJa,WACb,MAAMjjB,EAASvE,KACXuE,EAAOQ,OAAOwN,eAAiBhO,EAAO8iB,UAAY9iB,EAAOQ,OAAOyK,UAGhEjL,EAAOoP,YACTpP,EAAO+iB,qBAAsB,GAE/B/iB,EAA2C,cAApCA,EAAOQ,OAAO8Y,kBAAoC,KAAO,aAAavf,MAAMipB,OAAS,GACxFhjB,EAAOoP,WACTlT,uBAAsB,KACpB8D,EAAO+iB,qBAAsB,CAAK,IAGxC,GPgBEhc,OLyDF,CACEmc,aAzBF,WACE,MAAMljB,EAASvE,KACTV,EAAWF,KACX,OACJ2F,GACER,EACJA,EAAO+Y,aAAeA,EAAaoK,KAAKnjB,GACxCA,EAAOqc,YAAcA,EAAY8G,KAAKnjB,GACtCA,EAAO8e,WAAaA,EAAWqE,KAAKnjB,GAChCQ,EAAOyK,UACTjL,EAAO4gB,SAAWA,EAASuC,KAAKnjB,IAElCA,EAAOwgB,QAAUA,EAAQ2C,KAAKnjB,GAC9BA,EAAOihB,OAASA,EAAOkC,KAAKnjB,GACvBmhB,IACHpmB,EAAS7B,iBAAiB,aAAckoB,GACxCD,GAAqB,GAEvBpa,EAAO/G,EAAQ,KACjB,EAOEojB,aANF,WAEErc,EADetL,KACA,MACjB,GKvDEgQ,YQ7BF,CACEyU,cZCa,WACb,MAAMlgB,EAASvE,MACT,UACJiX,EAAS,YACTQ,EAAW,OACX1S,EAAM,GACN3D,GACEmD,EACEyL,EAAcjL,EAAOiL,YAC3B,IAAKA,GAAeA,GAAmD,IAApCjT,OAAOI,KAAK6S,GAAa1S,OAAc,OAG1E,MAAMsqB,EAAarjB,EAAOsjB,cAAc7X,EAAazL,EAAOQ,OAAOuhB,gBAAiB/hB,EAAOnD,IAC3F,IAAKwmB,GAAcrjB,EAAOujB,oBAAsBF,EAAY,OAC5D,MACMG,GADuBH,KAAc5X,EAAcA,EAAY4X,QAAc7jB,IAClCQ,EAAOyjB,eAClDC,EAAchC,EAAc1hB,EAAQQ,GACpCmjB,EAAajC,EAAc1hB,EAAQwjB,GACnCI,EAAapjB,EAAOkJ,QACtBga,IAAgBC,GAClB9mB,EAAGwF,UAAUoM,OAAO,GAAGjO,EAAO6N,6BAA8B,GAAG7N,EAAO6N,qCACtErO,EAAO6jB,yBACGH,GAAeC,IACzB9mB,EAAGwF,UAAUC,IAAI,GAAG9B,EAAO6N,+BACvBmV,EAAiBrY,KAAK2Y,MAAuC,WAA/BN,EAAiBrY,KAAK2Y,OAAsBN,EAAiBrY,KAAK2Y,MAA6B,WAArBtjB,EAAO2K,KAAK2Y,OACtHjnB,EAAGwF,UAAUC,IAAI,GAAG9B,EAAO6N,qCAE7BrO,EAAO6jB,wBAIT,CAAC,aAAc,aAAc,aAAahrB,SAAQwK,IAChD,MAAM0gB,EAAmBvjB,EAAO6C,IAAS7C,EAAO6C,GAAMqG,QAChDsa,EAAkBR,EAAiBngB,IAASmgB,EAAiBngB,GAAMqG,QACrEqa,IAAqBC,GACvBhkB,EAAOqD,GAAM4gB,WAEVF,GAAoBC,GACvBhkB,EAAOqD,GAAM6gB,QACf,IAEF,MAAMC,EAAmBX,EAAiB3O,WAAa2O,EAAiB3O,YAAcrU,EAAOqU,UACvFuP,EAAc5jB,EAAOqM,OAAS2W,EAAiBhY,gBAAkBhL,EAAOgL,eAAiB2Y,GAC3FA,GAAoBjR,GACtBlT,EAAOqkB,kBAET,EAAOrkB,EAAOQ,OAAQgjB,GACtB,MAAMc,EAAYtkB,EAAOQ,OAAOkJ,QAChClR,OAAOqQ,OAAO7I,EAAQ,CACpBgc,eAAgBhc,EAAOQ,OAAOwb,eAC9B5G,eAAgBpV,EAAOQ,OAAO4U,eAC9BC,eAAgBrV,EAAOQ,OAAO6U,iBAE5BuO,IAAeU,EACjBtkB,EAAOikB,WACGL,GAAcU,GACxBtkB,EAAOkkB,SAETlkB,EAAOujB,kBAAoBF,EAC3BrjB,EAAOkI,KAAK,oBAAqBsb,GAC7BY,GAAelR,IACjBlT,EAAO2Y,cACP3Y,EAAOuX,WAAW7E,GAClB1S,EAAO8I,gBAET9I,EAAOkI,KAAK,aAAcsb,EAC5B,EYlEEF,cCHa,SAAuB7X,EAAa2O,EAAO,SAAUmK,GAClE,IAAK9Y,GAAwB,cAAT2O,IAAyBmK,EAAa,OAC1D,IAAIlB,GAAa,EACjB,MAAM7mB,EAASF,IACTkoB,EAAyB,WAATpK,EAAoB5d,EAAOioB,YAAcF,EAAY/b,aACrEkc,EAASlsB,OAAOI,KAAK6S,GAAajO,KAAImnB,IAC1C,GAAqB,iBAAVA,GAA6C,IAAvBA,EAAMzlB,QAAQ,KAAY,CACzD,MAAM0lB,EAAW1mB,WAAWymB,EAAME,OAAO,IAEzC,MAAO,CACLC,MAFYN,EAAgBI,EAG5BD,QAEJ,CACA,MAAO,CACLG,MAAOH,EACPA,QACD,IAEHD,EAAOK,MAAK,CAACtnB,EAAGunB,IAAMrc,SAASlL,EAAEqnB,MAAO,IAAMnc,SAASqc,EAAEF,MAAO,MAChE,IAAK,IAAInmB,EAAI,EAAGA,EAAI+lB,EAAO3rB,OAAQ4F,GAAK,EAAG,CACzC,MAAM,MACJgmB,EAAK,MACLG,GACEJ,EAAO/lB,GACE,WAATyb,EACE5d,EAAOP,WAAW,eAAe6oB,QAAY5iB,UAC/CmhB,EAAasB,GAENG,GAASP,EAAYhc,cAC9B8a,EAAasB,EAEjB,CACA,OAAOtB,GAAc,KACvB,GTHEpV,cHHF,CACEA,cA9BF,WACE,MAAMjO,EAASvE,MAEbqnB,SAAUmC,EAAS,OACnBzkB,GACER,GACE,mBACJmK,GACE3J,EACJ,GAAI2J,EAAoB,CACtB,MAAM6G,EAAiBhR,EAAO4J,OAAO7Q,OAAS,EACxCmsB,EAAqBllB,EAAOgK,WAAWgH,GAAkBhR,EAAOiK,gBAAgB+G,GAAuC,EAArB7G,EACxGnK,EAAO8iB,SAAW9iB,EAAOkE,KAAOghB,CAClC,MACEllB,EAAO8iB,SAAsC,IAA3B9iB,EAAO+J,SAAShR,QAEN,IAA1ByH,EAAO4U,iBACTpV,EAAOoV,gBAAkBpV,EAAO8iB,WAEJ,IAA1BtiB,EAAO6U,iBACTrV,EAAOqV,gBAAkBrV,EAAO8iB,UAE9BmC,GAAaA,IAAcjlB,EAAO8iB,WACpC9iB,EAAOwQ,OAAQ,GAEbyU,IAAcjlB,EAAO8iB,UACvB9iB,EAAOkI,KAAKlI,EAAO8iB,SAAW,OAAS,SAE3C,GGKE1gB,QU/BF,CACE+iB,WCYa,WACb,MAAMnlB,EAASvE,MACT,WACJ2pB,EAAU,OACV5kB,EAAM,IACN8I,EAAG,GACHzM,EAAE,OACFqI,GACElF,EAEEqlB,EAzBR,SAAwBC,EAASC,GAC/B,MAAMC,EAAgB,GAYtB,OAXAF,EAAQzsB,SAAQ4sB,IACM,iBAATA,EACTjtB,OAAOI,KAAK6sB,GAAM5sB,SAAQusB,IACpBK,EAAKL,IACPI,EAAc3hB,KAAK0hB,EAASH,EAC9B,IAEuB,iBAATK,GAChBD,EAAc3hB,KAAK0hB,EAASE,EAC9B,IAEKD,CACT,CAWmBE,CAAe,CAAC,cAAellB,EAAOqU,UAAW,CAChE,YAAa7U,EAAOQ,OAAO4b,UAAY5b,EAAO4b,SAAS1S,SACtD,CACD,WAAclJ,EAAO6Q,YACpB,CACD,IAAO/H,GACN,CACD,KAAQ9I,EAAO2K,MAAQ3K,EAAO2K,KAAKC,KAAO,GACzC,CACD,cAAe5K,EAAO2K,MAAQ3K,EAAO2K,KAAKC,KAAO,GAA0B,WAArB5K,EAAO2K,KAAK2Y,MACjE,CACD,QAAW5e,EAAOE,SACjB,CACD,IAAOF,EAAOC,KACb,CACD,WAAY3E,EAAOyK,SAClB,CACD,SAAYzK,EAAOyK,SAAWzK,EAAOwK,gBACpC,CACD,iBAAkBxK,EAAO0N,sBACvB1N,EAAO6N,wBACX+W,EAAWvhB,QAAQwhB,GACnBxoB,EAAGwF,UAAUC,OAAO8iB,GACpBplB,EAAO6jB,sBACT,ED7CE8B,cEJa,WACb,MACM,GACJ9oB,EAAE,WACFuoB,GAHa3pB,KAKfoB,EAAGwF,UAAUoM,UAAU2W,GALR3pB,KAMRooB,sBACT,IZ2BM+B,EAAmB,CAAC,EAC1B,MAAMC,EACJttB,eAAeiG,GACb,IAAI3B,EACA2D,EACgB,IAAhBhC,EAAKzF,QAAgByF,EAAK,GAAGjG,aAAwE,WAAzDC,OAAO6F,UAAUL,SAASM,KAAKE,EAAK,IAAID,MAAM,GAAI,GAChGiC,EAAShC,EAAK,IAEb3B,EAAI2D,GAAUhC,EAEZgC,IAAQA,EAAS,CAAC,GACvBA,EAAS,EAAO,CAAC,EAAGA,GAChB3D,IAAO2D,EAAO3D,KAAI2D,EAAO3D,GAAKA,GAClC,MAAM9B,EAAWF,IACjB,GAAI2F,EAAO3D,IAA2B,iBAAd2D,EAAO3D,IAAmB9B,EAASvB,iBAAiBgH,EAAO3D,IAAI9D,OAAS,EAAG,CACjG,MAAM+sB,EAAU,GAQhB,OAPA/qB,EAASvB,iBAAiBgH,EAAO3D,IAAIhE,SAAQ0rB,IAC3C,MAAMwB,EAAY,EAAO,CAAC,EAAGvlB,EAAQ,CACnC3D,GAAI0nB,IAENuB,EAAQjiB,KAAK,IAAIgiB,EAAOE,GAAW,IAG9BD,CACT,CAGA,MAAM9lB,EAASvE,KACfuE,EAAON,YAAa,EACpBM,EAAOqE,QAAUG,IACjBxE,EAAOkF,OAASJ,EAAU,CACxB5J,UAAWsF,EAAOtF,YAEpB8E,EAAOuE,QAAU0B,IACjBjG,EAAOmH,gBAAkB,CAAC,EAC1BnH,EAAO6H,mBAAqB,GAC5B7H,EAAOgmB,QAAU,IAAIhmB,EAAOimB,aACxBzlB,EAAOwlB,SAAWzjB,MAAMC,QAAQhC,EAAOwlB,UACzChmB,EAAOgmB,QAAQniB,QAAQrD,EAAOwlB,SAEhC,MAAM3D,EAAmB,CAAC,EAC1BriB,EAAOgmB,QAAQntB,SAAQqtB,IACrBA,EAAI,CACF1lB,SACAR,SACAmmB,aAAc/D,EAAmB5hB,EAAQ6hB,GACzCvb,GAAI9G,EAAO8G,GAAGqc,KAAKnjB,GACnBuH,KAAMvH,EAAOuH,KAAK4b,KAAKnjB,GACvByH,IAAKzH,EAAOyH,IAAI0b,KAAKnjB,GACrBkI,KAAMlI,EAAOkI,KAAKib,KAAKnjB,IACvB,IAIJ,MAAMomB,EAAe,EAAO,CAAC,EAAGC,EAAUhE,GA+F1C,OA5FAriB,EAAOQ,OAAS,EAAO,CAAC,EAAG4lB,EAAcR,EAAkBplB,GAC3DR,EAAOyjB,eAAiB,EAAO,CAAC,EAAGzjB,EAAOQ,QAC1CR,EAAOsmB,aAAe,EAAO,CAAC,EAAG9lB,GAG7BR,EAAOQ,QAAUR,EAAOQ,OAAOsG,IACjCtO,OAAOI,KAAKoH,EAAOQ,OAAOsG,IAAIjO,SAAQ0tB,IACpCvmB,EAAO8G,GAAGyf,EAAWvmB,EAAOQ,OAAOsG,GAAGyf,GAAW,IAGjDvmB,EAAOQ,QAAUR,EAAOQ,OAAOoH,OACjC5H,EAAO4H,MAAM5H,EAAOQ,OAAOoH,OAI7BpP,OAAOqQ,OAAO7I,EAAQ,CACpB0J,QAAS1J,EAAOQ,OAAOkJ,QACvB7M,KAEAuoB,WAAY,GAEZxb,OAAQ,GACRI,WAAY,GACZD,SAAU,GACVE,gBAAiB,GAEjBxB,aAAY,IACyB,eAA5BzI,EAAOQ,OAAOqU,UAEvBnM,WAAU,IAC2B,aAA5B1I,EAAOQ,OAAOqU,UAGvB5F,YAAa,EACbyD,UAAW,EAEXnC,aAAa,EACbC,OAAO,EAEPpQ,UAAW,EACX6T,kBAAmB,EACnB/S,SAAU,EACVslB,SAAU,EACVlS,WAAW,EAEXc,eAAgBpV,EAAOQ,OAAO4U,eAC9BC,eAAgBrV,EAAOQ,OAAO6U,eAE9B2D,gBAAiB,CACfS,eAAWja,EACXka,aAASla,EACTgc,yBAAqBhc,EACrBmc,oBAAgBnc,EAChBic,iBAAajc,EACbmU,sBAAkBnU,EAClB0e,oBAAgB1e,EAChBqc,wBAAoBrc,EAEpBsc,kBAAmB9b,EAAOQ,OAAOsb,kBAEjCqD,cAAexiB,IACf8pB,kBAAcjnB,EAEdknB,WAAY,GACZpI,yBAAqB9e,EACrBkc,iBAAalc,EACbyZ,QAAS,IAGXyB,YAAY,EAEZsB,eAAgBhc,EAAOQ,OAAOwb,eAC9B1D,QAAS,CACP0C,OAAQ,EACRC,OAAQ,EACRL,SAAU,EACVE,SAAU,EACVzC,KAAM,GAGRsO,aAAc,GACdC,aAAc,IAEhB5mB,EAAOkI,KAAK,WAGRlI,EAAOQ,OAAOmhB,MAChB3hB,EAAO2hB,OAKF3hB,CACT,CACA+Q,cAAclP,GACZ,MAAM,SACJsH,EAAQ,OACR3I,GACE/E,KAEEqV,EAAkBxN,EADTvB,EAAgBoH,EAAU,IAAI3I,EAAOqJ,4BACR,IAC5C,OAAOvG,EAAazB,GAAWiP,CACjC,CACAqH,eACE,MACM,SACJhP,EAAQ,OACR3I,GAHa/E,UAKRmO,OAAS7H,EAAgBoH,EAAU,IAAI3I,EAAOqJ,2BACvD,CACAqa,SACE,MAAMlkB,EAASvE,KACXuE,EAAO0J,UACX1J,EAAO0J,SAAU,EACb1J,EAAOQ,OAAO+d,YAChBve,EAAOwe,gBAETxe,EAAOkI,KAAK,UACd,CACA+b,UACE,MAAMjkB,EAASvE,KACVuE,EAAO0J,UACZ1J,EAAO0J,SAAU,EACb1J,EAAOQ,OAAO+d,YAChBve,EAAOijB,kBAETjjB,EAAOkI,KAAK,WACd,CACA2e,YAAY3lB,EAAUT,GACpB,MAAMT,EAASvE,KACfyF,EAAWC,KAAKE,IAAIF,KAAKC,IAAIF,EAAU,GAAI,GAC3C,MAAMG,EAAMrB,EAAO8P,eAEb/O,GADMf,EAAOsQ,eACIjP,GAAOH,EAAWG,EACzCrB,EAAOkU,YAAYnT,OAA0B,IAAVN,EAAwB,EAAIA,GAC/DT,EAAOuS,oBACPvS,EAAOsR,qBACT,CACAuS,uBACE,MAAM7jB,EAASvE,KACf,IAAKuE,EAAOQ,OAAO2hB,eAAiBniB,EAAOnD,GAAI,OAC/C,MAAMiqB,EAAM9mB,EAAOnD,GAAGkqB,UAAUxpB,MAAM,KAAK0B,QAAO8nB,GACT,IAAhCA,EAAU7nB,QAAQ,WAA+E,IAA5D6nB,EAAU7nB,QAAQc,EAAOQ,OAAO6N,0BAE9ErO,EAAOkI,KAAK,oBAAqB4e,EAAInpB,KAAK,KAC5C,CACAqpB,gBAAgBnlB,GACd,MAAM7B,EAASvE,KACf,OAAIuE,EAAOoH,UAAkB,GACtBvF,EAAQklB,UAAUxpB,MAAM,KAAK0B,QAAO8nB,GACI,IAAtCA,EAAU7nB,QAAQ,iBAAyE,IAAhD6nB,EAAU7nB,QAAQc,EAAOQ,OAAOqJ,cACjFlM,KAAK,IACV,CACA2U,oBACE,MAAMtS,EAASvE,KACf,IAAKuE,EAAOQ,OAAO2hB,eAAiBniB,EAAOnD,GAAI,OAC/C,MAAMoqB,EAAU,GAChBjnB,EAAO4J,OAAO/Q,SAAQgJ,IACpB,MAAMujB,EAAaplB,EAAOgnB,gBAAgBnlB,GAC1ColB,EAAQpjB,KAAK,CACXhC,UACAujB,eAEFplB,EAAOkI,KAAK,cAAerG,EAASujB,EAAW,IAEjDplB,EAAOkI,KAAK,gBAAiB+e,EAC/B,CACA/Q,qBAAqBgR,EAAO,UAAWC,GAAQ,GAC7C,MACM,OACJ3mB,EAAM,OACNoJ,EAAM,WACNI,EAAU,gBACVC,EACA/F,KAAMkF,EAAU,YAChB6F,GAPaxT,KASf,IAAI2rB,EAAM,EACV,GAAI5mB,EAAOwK,eAAgB,CACzB,IACIqc,EADAhc,EAAYzB,EAAOqF,GAAa7C,gBAEpC,IAAK,IAAIzN,EAAIsQ,EAAc,EAAGtQ,EAAIiL,EAAO7Q,OAAQ4F,GAAK,EAChDiL,EAAOjL,KAAO0oB,IAChBhc,GAAazB,EAAOjL,GAAGyN,gBACvBgb,GAAO,EACH/b,EAAYjC,IAAYie,GAAY,IAG5C,IAAK,IAAI1oB,EAAIsQ,EAAc,EAAGtQ,GAAK,EAAGA,GAAK,EACrCiL,EAAOjL,KAAO0oB,IAChBhc,GAAazB,EAAOjL,GAAGyN,gBACvBgb,GAAO,EACH/b,EAAYjC,IAAYie,GAAY,GAG9C,MAEE,GAAa,YAATH,EACF,IAAK,IAAIvoB,EAAIsQ,EAAc,EAAGtQ,EAAIiL,EAAO7Q,OAAQ4F,GAAK,EAAG,EACnCwoB,EAAQnd,EAAWrL,GAAKsL,EAAgBtL,GAAKqL,EAAWiF,GAAe7F,EAAaY,EAAWrL,GAAKqL,EAAWiF,GAAe7F,KAEhJge,GAAO,EAEX,MAGA,IAAK,IAAIzoB,EAAIsQ,EAAc,EAAGtQ,GAAK,EAAGA,GAAK,EAAG,CACxBqL,EAAWiF,GAAejF,EAAWrL,GAAKyK,IAE5Dge,GAAO,EAEX,CAGJ,OAAOA,CACT,CACAlG,SACE,MAAMlhB,EAASvE,KACf,IAAKuE,GAAUA,EAAOoH,UAAW,OACjC,MAAM,SACJ2C,EAAQ,OACRvJ,GACER,EAcJ,SAAS4T,IACP,MAAM0T,EAAiBtnB,EAAOqJ,cAAmC,EAApBrJ,EAAOI,UAAiBJ,EAAOI,UACtEoU,EAAerT,KAAKE,IAAIF,KAAKC,IAAIkmB,EAAgBtnB,EAAOsQ,gBAAiBtQ,EAAO8P,gBACtF9P,EAAO4T,aAAaY,GACpBxU,EAAOuS,oBACPvS,EAAOsR,qBACT,CACA,IAAIiW,EAnBA/mB,EAAOiL,aACTzL,EAAOkgB,gBAET,IAAIlgB,EAAOnD,GAAGrD,iBAAiB,qBAAqBX,SAAQioB,IACtDA,EAAQ0G,UACV3G,EAAqB7gB,EAAQ8gB,EAC/B,IAEF9gB,EAAOsI,aACPtI,EAAO8I,eACP9I,EAAOmQ,iBACPnQ,EAAOsR,sBASHtR,EAAOQ,OAAO4b,UAAYpc,EAAOQ,OAAO4b,SAAS1S,SACnDkK,IACI5T,EAAOQ,OAAO6Q,YAChBrR,EAAO0O,qBAIP6Y,GADmC,SAAhCvnB,EAAOQ,OAAOgL,eAA4BxL,EAAOQ,OAAOgL,cAAgB,IAAMxL,EAAOwQ,QAAUxQ,EAAOQ,OAAOwK,eACnGhL,EAAO+U,QAAQ/U,EAAO4J,OAAO7Q,OAAS,EAAG,GAAG,GAAO,GAEnDiH,EAAO+U,QAAQ/U,EAAOiP,YAAa,GAAG,GAAO,GAEvDsY,GACH3T,KAGApT,EAAOwN,eAAiBjE,IAAa/J,EAAO+J,UAC9C/J,EAAOiO,gBAETjO,EAAOkI,KAAK,SACd,CACAmc,gBAAgBoD,EAAcC,GAAa,GACzC,MAAM1nB,EAASvE,KACTksB,EAAmB3nB,EAAOQ,OAAOqU,UAKvC,OAJK4S,IAEHA,EAAoC,eAArBE,EAAoC,WAAa,cAE9DF,IAAiBE,GAAqC,eAAjBF,GAAkD,aAAjBA,IAG1EznB,EAAOnD,GAAGwF,UAAUoM,OAAO,GAAGzO,EAAOQ,OAAO6N,yBAAyBsZ,KACrE3nB,EAAOnD,GAAGwF,UAAUC,IAAI,GAAGtC,EAAOQ,OAAO6N,yBAAyBoZ,KAClEznB,EAAO6jB,uBACP7jB,EAAOQ,OAAOqU,UAAY4S,EAC1BznB,EAAO4J,OAAO/Q,SAAQgJ,IACC,aAAjB4lB,EACF5lB,EAAQ9H,MAAMuL,MAAQ,GAEtBzD,EAAQ9H,MAAMyL,OAAS,EACzB,IAEFxF,EAAOkI,KAAK,mBACRwf,GAAY1nB,EAAOkhB,UAddlhB,CAgBX,CACA4nB,wBAAwB/S,GACtB,MAAM7U,EAASvE,KACXuE,EAAOsJ,KAAqB,QAAduL,IAAwB7U,EAAOsJ,KAAqB,QAAduL,IACxD7U,EAAOsJ,IAAoB,QAAduL,EACb7U,EAAOqJ,aAA2C,eAA5BrJ,EAAOQ,OAAOqU,WAA8B7U,EAAOsJ,IACrEtJ,EAAOsJ,KACTtJ,EAAOnD,GAAGwF,UAAUC,IAAI,GAAGtC,EAAOQ,OAAO6N,6BACzCrO,EAAOnD,GAAGgE,IAAM,QAEhBb,EAAOnD,GAAGwF,UAAUoM,OAAO,GAAGzO,EAAOQ,OAAO6N,6BAC5CrO,EAAOnD,GAAGgE,IAAM,OAElBb,EAAOkhB,SACT,CACA2G,MAAM7lB,GACJ,MAAMhC,EAASvE,KACf,GAAIuE,EAAO8nB,QAAS,OAAO,EAG3B,IAAIjrB,EAAKmF,GAAWhC,EAAOQ,OAAO3D,GAIlC,GAHkB,iBAAPA,IACTA,EAAK9B,SAASxB,cAAcsD,KAEzBA,EACH,OAAO,EAETA,EAAGmD,OAASA,EACRnD,EAAGiF,WACL9B,EAAOoP,WAAY,GAErB,MAAM2Y,EAAqB,IAClB,KAAK/nB,EAAOQ,OAAO0hB,cAAgB,IAAI8F,OAAOzqB,MAAM,KAAKI,KAAK,OAWvE,IAAI+C,EATe,MACjB,GAAI7D,GAAMA,EAAGmd,YAAcnd,EAAGmd,WAAWzgB,cAAe,CAGtD,OAFYsD,EAAGmd,WAAWzgB,cAAcwuB,IAG1C,CACA,OAAOhmB,EAAgBlF,EAAIkrB,KAAsB,EAAE,EAGrCE,GAkBhB,OAjBKvnB,GAAaV,EAAOQ,OAAOqhB,iBAC9BnhB,EAAY9G,EAAc,MAAOoG,EAAOQ,OAAO0hB,cAC/CrlB,EAAGqb,OAAOxX,GACVqB,EAAgBlF,EAAI,IAAImD,EAAOQ,OAAOqJ,cAAchR,SAAQgJ,IAC1DnB,EAAUwX,OAAOrW,EAAQ,KAG7BrJ,OAAOqQ,OAAO7I,EAAQ,CACpBnD,KACA6D,YACAyI,SAAUnJ,EAAOoP,UAAYvS,EAAK6D,EAClConB,SAAS,EAETxe,IAA8B,QAAzBzM,EAAGgE,IAAIuF,eAA6D,QAAlChD,EAAavG,EAAI,aACxDwM,aAA0C,eAA5BrJ,EAAOQ,OAAOqU,YAAwD,QAAzBhY,EAAGgE,IAAIuF,eAA6D,QAAlChD,EAAavG,EAAI,cAC9G0M,SAAiD,gBAAvCnG,EAAa1C,EAAW,cAE7B,CACT,CACAihB,KAAK9kB,GACH,MAAMmD,EAASvE,KACf,GAAIuE,EAAOkT,YAAa,OAAOlT,EAE/B,OAAgB,IADAA,EAAO6nB,MAAMhrB,KAE7BmD,EAAOkI,KAAK,cAGRlI,EAAOQ,OAAOiL,aAChBzL,EAAOkgB,gBAITlgB,EAAOmlB,aAGPnlB,EAAOsI,aAGPtI,EAAO8I,eACH9I,EAAOQ,OAAOwN,eAChBhO,EAAOiO,gBAILjO,EAAOQ,OAAO+d,YAAcve,EAAO0J,SACrC1J,EAAOwe,gBAILxe,EAAOQ,OAAOqM,MAAQ7M,EAAOyJ,SAAWzJ,EAAOQ,OAAOiJ,QAAQC,QAChE1J,EAAO+U,QAAQ/U,EAAOQ,OAAOmV,aAAe3V,EAAOyJ,QAAQuD,aAAc,EAAGhN,EAAOQ,OAAO2S,oBAAoB,GAAO,GAErHnT,EAAO+U,QAAQ/U,EAAOQ,OAAOmV,aAAc,EAAG3V,EAAOQ,OAAO2S,oBAAoB,GAAO,GAIrFnT,EAAOQ,OAAOqM,MAChB7M,EAAOuX,aAITvX,EAAOkjB,eACP,IAAIljB,EAAOnD,GAAGrD,iBAAiB,qBAAqBX,SAAQioB,IACtDA,EAAQ0G,SACV3G,EAAqB7gB,EAAQ8gB,GAE7BA,EAAQ5nB,iBAAiB,QAAQ8K,IAC/B6c,EAAqB7gB,EAAQgE,EAAEtL,OAAO,GAE1C,IAIFsH,EAAOkT,aAAc,EAGrBlT,EAAOkI,KAAK,QACZlI,EAAOkI,KAAK,cAtDkBlI,CAwDhC,CACAkoB,QAAQC,GAAiB,EAAMC,GAAc,GAC3C,MAAMpoB,EAASvE,MACT,OACJ+E,EAAM,GACN3D,EAAE,UACF6D,EAAS,OACTkJ,GACE5J,EACJ,YAA6B,IAAlBA,EAAOQ,QAA0BR,EAAOoH,YAGnDpH,EAAOkI,KAAK,iBAGZlI,EAAOkT,aAAc,EAGrBlT,EAAOojB,eAGH5iB,EAAOqM,MACT7M,EAAO2Y,cAILyP,IACFpoB,EAAO2lB,gBACP9oB,EAAGic,gBAAgB,SACnBpY,EAAUoY,gBAAgB,SACtBlP,GAAUA,EAAO7Q,QACnB6Q,EAAO/Q,SAAQgJ,IACbA,EAAQQ,UAAUoM,OAAOjO,EAAOkP,kBAAmBlP,EAAOiR,iBAAkBjR,EAAOkR,eAAgBlR,EAAOmR,gBAC1G9P,EAAQiX,gBAAgB,SACxBjX,EAAQiX,gBAAgB,0BAA0B,KAIxD9Y,EAAOkI,KAAK,WAGZ1P,OAAOI,KAAKoH,EAAOmH,iBAAiBtO,SAAQ0tB,IAC1CvmB,EAAOyH,IAAI8e,EAAU,KAEA,IAAnB4B,IACFnoB,EAAOnD,GAAGmD,OAAS,K/CpiBzB,SAAqB1H,GACnB,MAAM+vB,EAAS/vB,EACfE,OAAOI,KAAKyvB,GAAQxvB,SAAQC,IAC1B,IACEuvB,EAAOvvB,GAAO,IAChB,CAAE,MAAOkL,GAET,CACA,WACSqkB,EAAOvvB,EAChB,CAAE,MAAOkL,GAET,IAEJ,C+CuhBMskB,CAAYtoB,IAEdA,EAAOoH,WAAY,GAtCV,IAwCX,CACAmhB,sBAAsBC,GACpB,EAAO5C,EAAkB4C,EAC3B,CACW5C,8BACT,OAAOA,CACT,CACWS,sBACT,OAAOA,CACT,CACAkC,qBAAqBrC,GACdL,EAAOxnB,UAAU4nB,cAAaJ,EAAOxnB,UAAU4nB,YAAc,IAClE,MAAMD,EAAUH,EAAOxnB,UAAU4nB,YACd,mBAARC,GAAsBF,EAAQ9mB,QAAQgnB,GAAO,GACtDF,EAAQniB,KAAKqiB,EAEjB,CACAqC,WAAWE,GACT,OAAIlmB,MAAMC,QAAQimB,IAChBA,EAAO5vB,SAAQ6vB,GAAK7C,EAAO8C,cAAcD,KAClC7C,IAETA,EAAO8C,cAAcF,GACd5C,EACT,EAEFrtB,OAAOI,KAAK6pB,GAAY5pB,SAAQ+vB,IAC9BpwB,OAAOI,KAAK6pB,EAAWmG,IAAiB/vB,SAAQgwB,IAC9ChD,EAAOxnB,UAAUwqB,GAAepG,EAAWmG,GAAgBC,EAAY,GACvE,IAEJhD,EAAOiD,IAAI,CaxkBI,UAAgB,OAC7B9oB,EAAM,GACN8G,EAAE,KACFoB,IAEA,MAAM1L,EAASF,IACf,IAAIysB,EAAW,KACXC,EAAiB,KACrB,MAAMC,EAAgB,KACfjpB,IAAUA,EAAOoH,WAAcpH,EAAOkT,cAC3ChL,EAAK,gBACLA,EAAK,UAAS,EAqCVghB,EAA2B,KAC1BlpB,IAAUA,EAAOoH,WAAcpH,EAAOkT,aAC3ChL,EAAK,oBAAoB,EAE3BpB,EAAG,QAAQ,KACL9G,EAAOQ,OAAOohB,qBAAmD,IAA1BplB,EAAO2sB,eAvC7CnpB,IAAUA,EAAOoH,WAAcpH,EAAOkT,cAC3C6V,EAAW,IAAII,gBAAe7D,IAC5B0D,EAAiBxsB,EAAON,uBAAsB,KAC5C,MAAM,MACJoJ,EAAK,OACLE,GACExF,EACJ,IAAIopB,EAAW9jB,EACXsJ,EAAYpJ,EAChB8f,EAAQzsB,SAAQ,EACdwwB,iBACAC,cACA5wB,aAEIA,GAAUA,IAAWsH,EAAOnD,KAChCusB,EAAWE,EAAcA,EAAYhkB,OAAS+jB,EAAe,IAAMA,GAAgBE,WACnF3a,EAAY0a,EAAcA,EAAY9jB,QAAU6jB,EAAe,IAAMA,GAAgBG,UAAS,IAE5FJ,IAAa9jB,GAASsJ,IAAcpJ,GACtCyjB,GACF,GACA,IAEJF,EAASU,QAAQzpB,EAAOnD,MAoBxBL,EAAOtD,iBAAiB,SAAU+vB,GAClCzsB,EAAOtD,iBAAiB,oBAAqBgwB,GAAyB,IAExEpiB,EAAG,WAAW,KApBRkiB,GACFxsB,EAAOJ,qBAAqB4sB,GAE1BD,GAAYA,EAASW,WAAa1pB,EAAOnD,KAC3CksB,EAASW,UAAU1pB,EAAOnD,IAC1BksB,EAAW,MAiBbvsB,EAAOrD,oBAAoB,SAAU8vB,GACrCzsB,EAAOrD,oBAAoB,oBAAqB+vB,EAAyB,GAE7E,EChEe,UAAkB,OAC/BlpB,EAAM,aACNmmB,EAAY,GACZrf,EAAE,KACFoB,IAEA,MAAMyhB,EAAY,GACZntB,EAASF,IACTstB,EAAS,CAAClxB,EAAQmxB,EAAU,CAAC,KACjC,MACMd,EAAW,IADIvsB,EAAOstB,kBAAoBttB,EAAOutB,yBACrBC,IAIhC,GAAIhqB,EAAO+iB,oBAAqB,OAChC,GAAyB,IAArBiH,EAAUjxB,OAEZ,YADAmP,EAAK,iBAAkB8hB,EAAU,IAGnC,MAAMC,EAAiB,WACrB/hB,EAAK,iBAAkB8hB,EAAU,GACnC,EACIxtB,EAAON,sBACTM,EAAON,sBAAsB+tB,GAE7BztB,EAAOT,WAAWkuB,EAAgB,EACpC,IAEFlB,EAASU,QAAQ/wB,EAAQ,CACvBwxB,gBAA0C,IAAvBL,EAAQK,YAAoCL,EAAQK,WACvEC,eAAwC,IAAtBN,EAAQM,WAAmCN,EAAQM,UACrEC,mBAAgD,IAA1BP,EAAQO,eAAuCP,EAAQO,gBAE/ET,EAAU9lB,KAAKklB,EAAS,EA0B1B5C,EAAa,CACX4C,UAAU,EACVsB,gBAAgB,EAChBC,sBAAsB,IAExBxjB,EAAG,QA7BU,KACX,GAAK9G,EAAOQ,OAAOuoB,SAAnB,CACA,GAAI/oB,EAAOQ,OAAO6pB,eAAgB,CAChC,MAAME,EAAmB9mB,EAAezD,EAAOnD,IAC/C,IAAK,IAAI8B,EAAI,EAAGA,EAAI4rB,EAAiBxxB,OAAQ4F,GAAK,EAChDirB,EAAOW,EAAiB5rB,GAE5B,CAEAirB,EAAO5pB,EAAOnD,GAAI,CAChBstB,UAAWnqB,EAAOQ,OAAO8pB,uBAI3BV,EAAO5pB,EAAOU,UAAW,CACvBwpB,YAAY,GAdqB,CAejC,IAcJpjB,EAAG,WAZa,KACd6iB,EAAU9wB,SAAQkwB,IAChBA,EAASyB,YAAY,IAEvBb,EAAU3hB,OAAO,EAAG2hB,EAAU5wB,OAAO,GASzC,ICnEe,SAAS0xB,EAA0BzqB,EAAQyjB,EAAgBjjB,EAAQkqB,GAehF,OAdI1qB,EAAOQ,OAAOqhB,gBAChBrpB,OAAOI,KAAK8xB,GAAY7xB,SAAQC,IAC9B,IAAK0H,EAAO1H,KAAwB,IAAhB0H,EAAOgiB,KAAe,CACxC,IAAIxgB,EAAUD,EAAgB/B,EAAOnD,GAAI,IAAI6tB,EAAW5xB,MAAQ,GAC3DkJ,IACHA,EAAUpI,EAAc,MAAO8wB,EAAW5xB,IAC1CkJ,EAAQ+kB,UAAY2D,EAAW5xB,GAC/BkH,EAAOnD,GAAGqb,OAAOlW,IAEnBxB,EAAO1H,GAAOkJ,EACdyhB,EAAe3qB,GAAOkJ,CACxB,KAGGxB,CACT,CCjBe,SAASmqB,EAAkBvoB,EAAU,IAClD,MAAO,IAAIA,EAAQ4lB,OAAOtqB,QAAQ,cAAe,QAChDA,QAAQ,KAAM,MACjB,CCHe,SAASktB,GAAYhhB,GAClC,MAAM5J,EAASvE,MACT,OACJ+E,EAAM,SACN2I,GACEnJ,EACAQ,EAAOqM,MACT7M,EAAO2Y,cAET,MAAMkS,EAAgBhpB,IACpB,GAAuB,iBAAZA,EAAsB,CAC/B,MAAMipB,EAAU/vB,SAASnB,cAAc,OACvCkxB,EAAQC,UAAYlpB,EACpBsH,EAAS+O,OAAO4S,EAAQjxB,SAAS,IACjCixB,EAAQC,UAAY,EACtB,MACE5hB,EAAS+O,OAAOrW,EAClB,EAEF,GAAsB,iBAAX+H,GAAuB,WAAYA,EAC5C,IAAK,IAAIjL,EAAI,EAAGA,EAAIiL,EAAO7Q,OAAQ4F,GAAK,EAClCiL,EAAOjL,IAAIksB,EAAcjhB,EAAOjL,SAGtCksB,EAAcjhB,GAEhB5J,EAAOmY,eACH3X,EAAOqM,MACT7M,EAAOuX,aAEJ/W,EAAOuoB,WAAY/oB,EAAOoP,WAC7BpP,EAAOkhB,QAEX,CCjCe,SAAS8J,GAAaphB,GACnC,MAAM5J,EAASvE,MACT,OACJ+E,EAAM,YACNyO,EAAW,SACX9F,GACEnJ,EACAQ,EAAOqM,MACT7M,EAAO2Y,cAET,IAAInG,EAAiBvD,EAAc,EACnC,MAAMgc,EAAiBppB,IACrB,GAAuB,iBAAZA,EAAsB,CAC/B,MAAMipB,EAAU/vB,SAASnB,cAAc,OACvCkxB,EAAQC,UAAYlpB,EACpBsH,EAAS8O,QAAQ6S,EAAQjxB,SAAS,IAClCixB,EAAQC,UAAY,EACtB,MACE5hB,EAAS8O,QAAQpW,EACnB,EAEF,GAAsB,iBAAX+H,GAAuB,WAAYA,EAAQ,CACpD,IAAK,IAAIjL,EAAI,EAAGA,EAAIiL,EAAO7Q,OAAQ4F,GAAK,EAClCiL,EAAOjL,IAAIssB,EAAerhB,EAAOjL,IAEvC6T,EAAiBvD,EAAcrF,EAAO7Q,MACxC,MACEkyB,EAAerhB,GAEjB5J,EAAOmY,eACH3X,EAAOqM,MACT7M,EAAOuX,aAEJ/W,EAAOuoB,WAAY/oB,EAAOoP,WAC7BpP,EAAOkhB,SAETlhB,EAAO+U,QAAQvC,EAAgB,GAAG,EACpC,CCrCe,SAAS0Y,GAASnjB,EAAO6B,GACtC,MAAM5J,EAASvE,MACT,OACJ+E,EAAM,YACNyO,EAAW,SACX9F,GACEnJ,EACJ,IAAImrB,EAAoBlc,EACpBzO,EAAOqM,OACTse,GAAqBnrB,EAAOsX,aAC5BtX,EAAO2Y,cACP3Y,EAAOmY,gBAET,MAAMiT,EAAaprB,EAAO4J,OAAO7Q,OACjC,GAAIgP,GAAS,EAEX,YADA/H,EAAOgrB,aAAaphB,GAGtB,GAAI7B,GAASqjB,EAEX,YADAprB,EAAO4qB,YAAYhhB,GAGrB,IAAI4I,EAAiB2Y,EAAoBpjB,EAAQojB,EAAoB,EAAIA,EACzE,MAAME,EAAe,GACrB,IAAK,IAAI1sB,EAAIysB,EAAa,EAAGzsB,GAAKoJ,EAAOpJ,GAAK,EAAG,CAC/C,MAAM2sB,EAAetrB,EAAO4J,OAAOjL,GACnC2sB,EAAa7c,SACb4c,EAAahjB,QAAQijB,EACvB,CACA,GAAsB,iBAAX1hB,GAAuB,WAAYA,EAAQ,CACpD,IAAK,IAAIjL,EAAI,EAAGA,EAAIiL,EAAO7Q,OAAQ4F,GAAK,EAClCiL,EAAOjL,IAAIwK,EAAS+O,OAAOtO,EAAOjL,IAExC6T,EAAiB2Y,EAAoBpjB,EAAQojB,EAAoBvhB,EAAO7Q,OAASoyB,CACnF,MACEhiB,EAAS+O,OAAOtO,GAElB,IAAK,IAAIjL,EAAI,EAAGA,EAAI0sB,EAAatyB,OAAQ4F,GAAK,EAC5CwK,EAAS+O,OAAOmT,EAAa1sB,IAE/BqB,EAAOmY,eACH3X,EAAOqM,MACT7M,EAAOuX,aAEJ/W,EAAOuoB,WAAY/oB,EAAOoP,WAC7BpP,EAAOkhB,SAEL1gB,EAAOqM,KACT7M,EAAO+U,QAAQvC,EAAiBxS,EAAOsX,aAAc,GAAG,GAExDtX,EAAO+U,QAAQvC,EAAgB,GAAG,EAEtC,CCpDe,SAAS+Y,GAAYC,GAClC,MAAMxrB,EAASvE,MACT,OACJ+E,EAAM,YACNyO,GACEjP,EACJ,IAAImrB,EAAoBlc,EACpBzO,EAAOqM,OACTse,GAAqBnrB,EAAOsX,aAC5BtX,EAAO2Y,eAET,IACI8S,EADAjZ,EAAiB2Y,EAErB,GAA6B,iBAAlBK,GAA8B,WAAYA,EAAe,CAClE,IAAK,IAAI7sB,EAAI,EAAGA,EAAI6sB,EAAczyB,OAAQ4F,GAAK,EAC7C8sB,EAAgBD,EAAc7sB,GAC1BqB,EAAO4J,OAAO6hB,IAAgBzrB,EAAO4J,OAAO6hB,GAAehd,SAC3Dgd,EAAgBjZ,IAAgBA,GAAkB,GAExDA,EAAiBrR,KAAKC,IAAIoR,EAAgB,EAC5C,MACEiZ,EAAgBD,EACZxrB,EAAO4J,OAAO6hB,IAAgBzrB,EAAO4J,OAAO6hB,GAAehd,SAC3Dgd,EAAgBjZ,IAAgBA,GAAkB,GACtDA,EAAiBrR,KAAKC,IAAIoR,EAAgB,GAE5CxS,EAAOmY,eACH3X,EAAOqM,MACT7M,EAAOuX,aAEJ/W,EAAOuoB,WAAY/oB,EAAOoP,WAC7BpP,EAAOkhB,SAEL1gB,EAAOqM,KACT7M,EAAO+U,QAAQvC,EAAiBxS,EAAOsX,aAAc,GAAG,GAExDtX,EAAO+U,QAAQvC,EAAgB,GAAG,EAEtC,CCtCe,SAASkZ,KACtB,MAAM1rB,EAASvE,KACT+vB,EAAgB,GACtB,IAAK,IAAI7sB,EAAI,EAAGA,EAAIqB,EAAO4J,OAAO7Q,OAAQ4F,GAAK,EAC7C6sB,EAAc3nB,KAAKlF,GAErBqB,EAAOurB,YAAYC,EACrB,CCPe,SAASG,GAAWnrB,GACjC,MAAM,OACJgM,EAAM,OACNxM,EAAM,GACN8G,EAAE,aACF8M,EAAY,cACZ/E,EAAa,gBACb+c,EAAe,YACfC,EAAW,gBACXC,EAAe,gBACfC,GACEvrB,EA+BJ,IAAIwrB,EA9BJllB,EAAG,cAAc,KACf,GAAI9G,EAAOQ,OAAOgM,SAAWA,EAAQ,OACrCxM,EAAOolB,WAAWvhB,KAAK,GAAG7D,EAAOQ,OAAO6N,yBAAyB7B,KAC7Dqf,GAAeA,KACjB7rB,EAAOolB,WAAWvhB,KAAK,GAAG7D,EAAOQ,OAAO6N,4BAE1C,MAAM4d,EAAwBL,EAAkBA,IAAoB,CAAC,EACrEpzB,OAAOqQ,OAAO7I,EAAOQ,OAAQyrB,GAC7BzzB,OAAOqQ,OAAO7I,EAAOyjB,eAAgBwI,EAAsB,IAE7DnlB,EAAG,gBAAgB,KACb9G,EAAOQ,OAAOgM,SAAWA,GAC7BoH,GAAc,IAEhB9M,EAAG,iBAAiB,CAAColB,EAAI3rB,KACnBP,EAAOQ,OAAOgM,SAAWA,GAC7BqC,EAActO,EAAS,IAEzBuG,EAAG,iBAAiB,KAClB,GAAI9G,EAAOQ,OAAOgM,SAAWA,GACzBsf,EAAiB,CACnB,IAAKC,IAAoBA,IAAkBI,aAAc,OAEzDnsB,EAAO4J,OAAO/Q,SAAQgJ,IACpBA,EAAQrI,iBAAiB,gHAAgHX,SAAQiJ,GAAYA,EAAS2M,UAAS,IAGjLqd,GACF,KAGFhlB,EAAG,iBAAiB,KACd9G,EAAOQ,OAAOgM,SAAWA,IACxBxM,EAAO4J,OAAO7Q,SACjBizB,GAAyB,GAE3B9vB,uBAAsB,KAChB8vB,GAA0BhsB,EAAO4J,QAAU5J,EAAO4J,OAAO7Q,SAC3D6a,IACAoY,GAAyB,EAC3B,IACA,GAEN,CCtDe,SAASI,GAAaC,EAAcxqB,GACjD,MAAMyqB,EAAc1qB,EAAoBC,GAKxC,OAJIyqB,IAAgBzqB,IAClByqB,EAAYvyB,MAAMwyB,mBAAqB,SACvCD,EAAYvyB,MAAM,+BAAiC,UAE9CuyB,CACT,CCPe,SAASE,IAA2B,OACjDxsB,EAAM,SACNO,EAAQ,kBACRksB,EAAiB,UACjBC,IAEA,MAAM,YACJzd,GACEjP,EASJ,GAAIA,EAAOQ,OAAOkT,kBAAiC,IAAbnT,EAAgB,CACpD,IACIosB,EADAC,GAAiB,EAGnBD,EADED,EACoBD,EAEAA,EAAkBxtB,QAAOqtB,IAC7C,MAAMzvB,EAAKyvB,EAAYjqB,UAAUkM,SAAS,0BAf/B1R,KACf,IAAKA,EAAG+G,cAGN,OADc5D,EAAO4J,OAAO3K,QAAO4C,GAAWA,EAAQC,UAAYD,EAAQC,WAAajF,EAAGgwB,aAAY,GAGxG,OAAOhwB,EAAG+G,aAAa,EASmDkpB,CAASR,GAAeA,EAC9F,OAAOtsB,EAAO+Q,cAAclU,KAAQoS,CAAW,IAGnD0d,EAAoB9zB,SAAQgE,IAC1BiH,EAAqBjH,GAAI,KACvB,GAAI+vB,EAAgB,OACpB,IAAK5sB,GAAUA,EAAOoH,UAAW,OACjCwlB,GAAiB,EACjB5sB,EAAOsU,WAAY,EACnB,MAAM6J,EAAM,IAAI3hB,OAAOhB,YAAY,gBAAiB,CAClD4iB,SAAS,EACTd,YAAY,IAEdtd,EAAOU,UAAU2d,cAAcF,EAAI,GACnC,GAEN,CACF,CC1Ce,SAAS4O,GAAavsB,EAAQqB,EAAS3B,GACpD,MAAM8sB,EAAc,uBAAsB9sB,EAAO,IAAIA,IAAS,IACxD+sB,EAAkBrrB,EAAoBC,GAC5C,IAAIC,EAAWmrB,EAAgB1zB,cAAc,IAAIyzB,KAKjD,OAJKlrB,IACHA,EAAWlI,EAAc,MAAO,uBAAsBsG,EAAO,IAAIA,IAAS,KAC1E+sB,EAAgB/U,OAAOpW,IAElBA,CACT,CC6BA,MAAMkkB,GAAU,CCrCD,UAAiB,OAC9BhmB,EAAM,aACNmmB,EAAY,GACZrf,EAAE,KACFoB,IAcA,IAAIglB,EAZJ/G,EAAa,CACX1c,QAAS,CACPC,SAAS,EACTE,OAAQ,GACRujB,OAAO,EACPC,YAAa,KACbC,eAAgB,KAChBC,sBAAsB,EACtBC,gBAAiB,EACjBC,eAAgB,KAIpB,MAAMzyB,EAAWF,IACjBmF,EAAOyJ,QAAU,CACf0jB,MAAO,CAAC,EACRM,UAAMjuB,EACNf,QAAIe,EACJoK,OAAQ,GACR8jB,OAAQ,EACR1jB,WAAY,IAEd,MAAM8gB,EAAU/vB,EAASnB,cAAc,OACvC,SAASwzB,EAAY1hB,EAAO3D,GAC1B,MAAMvH,EAASR,EAAOQ,OAAOiJ,QAC7B,GAAIjJ,EAAO2sB,OAASntB,EAAOyJ,QAAQ0jB,MAAMplB,GACvC,OAAO/H,EAAOyJ,QAAQ0jB,MAAMplB,GAG9B,IAAIlG,EAiBJ,OAhBIrB,EAAO4sB,aACTvrB,EAAUrB,EAAO4sB,YAAY9uB,KAAK0B,EAAQ0L,EAAO3D,GAC1B,iBAAZlG,IACTipB,EAAQC,UAAYlpB,EACpBA,EAAUipB,EAAQjxB,SAAS,KAG7BgI,EADS7B,EAAOoP,UACNxV,EAAc,gBAEdA,EAAc,MAAOoG,EAAOQ,OAAOqJ,YAE/ChI,EAAQ7H,aAAa,0BAA2B+N,GAC3CvH,EAAO4sB,cACVvrB,EAAQkpB,UAAYrf,GAElBlL,EAAO2sB,QAAOntB,EAAOyJ,QAAQ0jB,MAAMplB,GAASlG,GACzCA,CACT,CACA,SAASqf,EAAOyM,GACd,MAAM,cACJniB,EAAa,eACbc,EAAc,eACdtB,EACA6B,KAAMoR,GACJje,EAAOQ,QACL,gBACJ+sB,EAAe,eACfC,GACExtB,EAAOQ,OAAOiJ,SAEhBgkB,KAAMG,EACNnvB,GAAIovB,EAAU,OACdjkB,EACAI,WAAY8jB,EACZJ,OAAQK,GACN/tB,EAAOyJ,QACNzJ,EAAOQ,OAAOyK,SACjBjL,EAAOuS,oBAET,MAAMtD,EAAcjP,EAAOiP,aAAe,EAC1C,IAAI+e,EAEA/gB,EACAD,EAFqBghB,EAArBhuB,EAAOqJ,aAA2B,QAA0BrJ,EAAOyI,eAAiB,OAAS,MAG7FuC,GACFiC,EAAc9L,KAAKgL,MAAMX,EAAgB,GAAKc,EAAiBkhB,EAC/DxgB,EAAe7L,KAAKgL,MAAMX,EAAgB,GAAKc,EAAiBihB,IAEhEtgB,EAAczB,GAAiBc,EAAiB,GAAKkhB,EACrDxgB,GAAgBiR,EAASzS,EAAgBc,GAAkBihB,GAE7D,IAAIE,EAAOxe,EAAcjC,EACrBvO,EAAKwQ,EAAchC,EAClBgR,IACHwP,EAAOtsB,KAAKC,IAAIqsB,EAAM,GACtBhvB,EAAK0C,KAAKE,IAAI5C,EAAImL,EAAO7Q,OAAS,IAEpC,IAAI20B,GAAU1tB,EAAOgK,WAAWyjB,IAAS,IAAMztB,EAAOgK,WAAW,IAAM,GAgBvE,SAASikB,IACPjuB,EAAO8I,eACP9I,EAAOmQ,iBACPnQ,EAAOsR,sBACPpJ,EAAK,gBACP,CACA,GArBI+V,GAAUhP,GAAejC,GAC3BygB,GAAQzgB,EACHhC,IAAgB0iB,GAAU1tB,EAAOgK,WAAW,KACxCiU,GAAUhP,EAAcjC,IACjCygB,GAAQzgB,EACJhC,IAAgB0iB,GAAU1tB,EAAOgK,WAAW,KAElDxR,OAAOqQ,OAAO7I,EAAOyJ,QAAS,CAC5BgkB,OACAhvB,KACAivB,SACA1jB,WAAYhK,EAAOgK,WACnBgD,eACAC,gBAQE2gB,IAAiBH,GAAQI,IAAepvB,IAAOkvB,EAQjD,OAPI3tB,EAAOgK,aAAe8jB,GAAsBJ,IAAWK,GACzD/tB,EAAO4J,OAAO/Q,SAAQgJ,IACpBA,EAAQ9H,MAAMi0B,GAAc,GAAGN,KAAU,IAG7C1tB,EAAOmQ,sBACPjI,EAAK,iBAGP,GAAIlI,EAAOQ,OAAOiJ,QAAQ4jB,eAkBxB,OAjBArtB,EAAOQ,OAAOiJ,QAAQ4jB,eAAe/uB,KAAK0B,EAAQ,CAChD0tB,SACAD,OACAhvB,KACAmL,OAAQ,WACN,MAAMskB,EAAiB,GACvB,IAAK,IAAIvvB,EAAI8uB,EAAM9uB,GAAKF,EAAIE,GAAK,EAC/BuvB,EAAerqB,KAAK+F,EAAOjL,IAE7B,OAAOuvB,CACT,CANQ,UAQNluB,EAAOQ,OAAOiJ,QAAQ6jB,qBACxBW,IAEA/lB,EAAK,kBAIT,MAAMimB,EAAiB,GACjBC,EAAgB,GAChBrd,EAAgBhJ,IACpB,IAAIqF,EAAarF,EAOjB,OANIA,EAAQ,EACVqF,EAAaxD,EAAO7Q,OAASgP,EACpBqF,GAAcxD,EAAO7Q,SAE9BqU,GAA0BxD,EAAO7Q,QAE5BqU,CAAU,EAEnB,GAAIugB,EACF3tB,EAAOmJ,SAAS3P,iBAAiB,IAAIwG,EAAOQ,OAAOqJ,4BAA4BhR,SAAQgJ,IACrFA,EAAQ4M,QAAQ,SAGlB,IAAK,IAAI9P,EAAIivB,EAAcjvB,GAAKkvB,EAAYlvB,GAAK,EAC/C,GAAIA,EAAI8uB,GAAQ9uB,EAAIF,EAAI,CACtB,MAAM2O,EAAa2D,EAAcpS,GACjCqB,EAAOmJ,SAAS3P,iBAAiB,IAAIwG,EAAOQ,OAAOqJ,uCAAuCuD,8CAAuDA,OAAgBvU,SAAQgJ,IACvKA,EAAQ4M,QAAQ,GAEpB,CAGJ,MAAM4f,EAAWpQ,GAAUrU,EAAO7Q,OAAS,EACrCu1B,EAASrQ,EAAyB,EAAhBrU,EAAO7Q,OAAa6Q,EAAO7Q,OACnD,IAAK,IAAI4F,EAAI0vB,EAAU1vB,EAAI2vB,EAAQ3vB,GAAK,EACtC,GAAIA,GAAK8uB,GAAQ9uB,GAAKF,EAAI,CACxB,MAAM2O,EAAa2D,EAAcpS,QACP,IAAfkvB,GAA8BF,EACvCS,EAAcvqB,KAAKuJ,IAEfzO,EAAIkvB,GAAYO,EAAcvqB,KAAKuJ,GACnCzO,EAAIivB,GAAcO,EAAetqB,KAAKuJ,GAE9C,CAKF,GAHAghB,EAAcv1B,SAAQkP,IACpB/H,EAAOmJ,SAAS+O,OAAOkV,EAAYxjB,EAAO7B,GAAQA,GAAO,IAEvDkW,EACF,IAAK,IAAItf,EAAIwvB,EAAep1B,OAAS,EAAG4F,GAAK,EAAGA,GAAK,EAAG,CACtD,MAAMoJ,EAAQomB,EAAexvB,GAC7BqB,EAAOmJ,SAAS8O,QAAQmV,EAAYxjB,EAAO7B,GAAQA,GACrD,MAEAomB,EAAepJ,MAAK,CAACtnB,EAAGunB,IAAMA,EAAIvnB,IAClC0wB,EAAet1B,SAAQkP,IACrB/H,EAAOmJ,SAAS8O,QAAQmV,EAAYxjB,EAAO7B,GAAQA,GAAO,IAG9DhG,EAAgB/B,EAAOmJ,SAAU,+BAA+BtQ,SAAQgJ,IACtEA,EAAQ9H,MAAMi0B,GAAc,GAAGN,KAAU,IAE3CO,GACF,CAuEAnnB,EAAG,cAAc,KACf,IAAK9G,EAAOQ,OAAOiJ,QAAQC,QAAS,OACpC,IAAI6kB,EACJ,QAAkD,IAAvCvuB,EAAOsmB,aAAa7c,QAAQG,OAAwB,CAC7D,MAAMA,EAAS,IAAI5J,EAAOmJ,SAAStP,UAAUoF,QAAOpC,GAAMA,EAAGqF,QAAQ,IAAIlC,EAAOQ,OAAOqJ,8BACnFD,GAAUA,EAAO7Q,SACnBiH,EAAOyJ,QAAQG,OAAS,IAAIA,GAC5B2kB,GAAoB,EACpB3kB,EAAO/Q,SAAQ,CAACgJ,EAASuL,KACvBvL,EAAQ7H,aAAa,0BAA2BoT,GAChDpN,EAAOyJ,QAAQ0jB,MAAM/f,GAAcvL,EACnCA,EAAQ4M,QAAQ,IAGtB,CACK8f,IACHvuB,EAAOyJ,QAAQG,OAAS5J,EAAOQ,OAAOiJ,QAAQG,QAEhD5J,EAAOolB,WAAWvhB,KAAK,GAAG7D,EAAOQ,OAAO6N,iCACxCrO,EAAOQ,OAAO0N,qBAAsB,EACpClO,EAAOyjB,eAAevV,qBAAsB,EACvClO,EAAOQ,OAAOmV,cACjBuL,GACF,IAEFpa,EAAG,gBAAgB,KACZ9G,EAAOQ,OAAOiJ,QAAQC,UACvB1J,EAAOQ,OAAOyK,UAAYjL,EAAOyV,mBACnCzZ,aAAakxB,GACbA,EAAiBnxB,YAAW,KAC1BmlB,GAAQ,GACP,MAEHA,IACF,IAEFpa,EAAG,sBAAsB,KAClB9G,EAAOQ,OAAOiJ,QAAQC,SACvB1J,EAAOQ,OAAOyK,SAChBtL,EAAeK,EAAOU,UAAW,wBAAyB,GAAGV,EAAO2K,gBACtE,IAEFnS,OAAOqQ,OAAO7I,EAAOyJ,QAAS,CAC5BmhB,YAjHF,SAAqBhhB,GACnB,GAAsB,iBAAXA,GAAuB,WAAYA,EAC5C,IAAK,IAAIjL,EAAI,EAAGA,EAAIiL,EAAO7Q,OAAQ4F,GAAK,EAClCiL,EAAOjL,IAAIqB,EAAOyJ,QAAQG,OAAO/F,KAAK+F,EAAOjL,SAGnDqB,EAAOyJ,QAAQG,OAAO/F,KAAK+F,GAE7BsX,GAAO,EACT,EAyGE8J,aAxGF,SAAsBphB,GACpB,MAAMqF,EAAcjP,EAAOiP,YAC3B,IAAIuD,EAAiBvD,EAAc,EAC/Buf,EAAoB,EACxB,GAAIjsB,MAAMC,QAAQoH,GAAS,CACzB,IAAK,IAAIjL,EAAI,EAAGA,EAAIiL,EAAO7Q,OAAQ4F,GAAK,EAClCiL,EAAOjL,IAAIqB,EAAOyJ,QAAQG,OAAOvB,QAAQuB,EAAOjL,IAEtD6T,EAAiBvD,EAAcrF,EAAO7Q,OACtCy1B,EAAoB5kB,EAAO7Q,MAC7B,MACEiH,EAAOyJ,QAAQG,OAAOvB,QAAQuB,GAEhC,GAAI5J,EAAOQ,OAAOiJ,QAAQ0jB,MAAO,CAC/B,MAAMA,EAAQntB,EAAOyJ,QAAQ0jB,MACvBsB,EAAW,CAAC,EAClBj2B,OAAOI,KAAKu0B,GAAOt0B,SAAQ61B,IACzB,MAAMC,EAAWxB,EAAMuB,GACjBE,EAAgBD,EAAS5f,aAAa,2BACxC6f,GACFD,EAAS30B,aAAa,0BAA2B2O,SAASimB,EAAe,IAAMJ,GAEjFC,EAAS9lB,SAAS+lB,EAAa,IAAMF,GAAqBG,CAAQ,IAEpE3uB,EAAOyJ,QAAQ0jB,MAAQsB,CACzB,CACAvN,GAAO,GACPlhB,EAAO+U,QAAQvC,EAAgB,EACjC,EA6EE+Y,YA5EF,SAAqBC,GACnB,GAAI,MAAOA,EAAyD,OACpE,IAAIvc,EAAcjP,EAAOiP,YACzB,GAAI1M,MAAMC,QAAQgpB,GAChB,IAAK,IAAI7sB,EAAI6sB,EAAczyB,OAAS,EAAG4F,GAAK,EAAGA,GAAK,EAClDqB,EAAOyJ,QAAQG,OAAO5B,OAAOwjB,EAAc7sB,GAAI,GAC3CqB,EAAOQ,OAAOiJ,QAAQ0jB,cACjBntB,EAAOyJ,QAAQ0jB,MAAM3B,EAAc7sB,IAExC6sB,EAAc7sB,GAAKsQ,IAAaA,GAAe,GACnDA,EAAc9N,KAAKC,IAAI6N,EAAa,QAGtCjP,EAAOyJ,QAAQG,OAAO5B,OAAOwjB,EAAe,GACxCxrB,EAAOQ,OAAOiJ,QAAQ0jB,cACjBntB,EAAOyJ,QAAQ0jB,MAAM3B,GAE1BA,EAAgBvc,IAAaA,GAAe,GAChDA,EAAc9N,KAAKC,IAAI6N,EAAa,GAEtCiS,GAAO,GACPlhB,EAAO+U,QAAQ9F,EAAa,EAC9B,EAuDEyc,gBAtDF,WACE1rB,EAAOyJ,QAAQG,OAAS,GACpB5J,EAAOQ,OAAOiJ,QAAQ0jB,QACxBntB,EAAOyJ,QAAQ0jB,MAAQ,CAAC,GAE1BjM,GAAO,GACPlhB,EAAO+U,QAAQ,EAAG,EACpB,EAgDEmM,UAEJ,ECjUe,UAAkB,OAC/BlhB,EAAM,aACNmmB,EAAY,GACZrf,EAAE,KACFoB,IAEA,MAAMnN,EAAWF,IACX2B,EAASF,IAWf,SAASuyB,EAAOvnB,GACd,IAAKtH,EAAO0J,QAAS,OACrB,MACEL,aAAcC,GACZtJ,EACJ,IAAIgE,EAAIsD,EACJtD,EAAEoV,gBAAepV,EAAIA,EAAEoV,eAC3B,MAAM0V,EAAK9qB,EAAE+qB,SAAW/qB,EAAEgrB,SACpBC,EAAajvB,EAAOQ,OAAO0uB,SAASD,WACpCE,EAAWF,GAAqB,KAAPH,EACzBM,EAAaH,GAAqB,KAAPH,EAC3BO,EAAqB,KAAPP,EACdQ,EAAsB,KAAPR,EACfS,EAAmB,KAAPT,EACZU,EAAqB,KAAPV,EAEpB,IAAK9uB,EAAOoV,iBAAmBpV,EAAOyI,gBAAkB6mB,GAAgBtvB,EAAO0I,cAAgB8mB,GAAeJ,GAC5G,OAAO,EAET,IAAKpvB,EAAOqV,iBAAmBrV,EAAOyI,gBAAkB4mB,GAAervB,EAAO0I,cAAgB6mB,GAAaJ,GACzG,OAAO,EAET,KAAInrB,EAAEyrB,UAAYzrB,EAAE0rB,QAAU1rB,EAAE2rB,SAAW3rB,EAAE4rB,SAGzC70B,EAAS3B,eAAiB2B,EAAS3B,cAAcE,WAA+D,UAAlDyB,EAAS3B,cAAcE,SAAS8M,eAA+E,aAAlDrL,EAAS3B,cAAcE,SAAS8M,gBAA/J,CAGA,GAAIpG,EAAOQ,OAAO0uB,SAASW,iBAAmBV,GAAYC,GAAcC,GAAeC,GAAgBC,GAAaC,GAAc,CAChI,IAAIM,GAAS,EAEb,GAAIrsB,EAAezD,EAAOnD,GAAI,IAAImD,EAAOQ,OAAOqJ,4BAA4B9Q,OAAS,GAAgF,IAA3E0K,EAAezD,EAAOnD,GAAI,IAAImD,EAAOQ,OAAOiR,oBAAoB1Y,OACxJ,OAEF,MAAM8D,EAAKmD,EAAOnD,GACZkzB,EAAclzB,EAAG0L,YACjBynB,EAAenzB,EAAG2L,aAClBynB,EAAczzB,EAAO8e,WACrB4U,EAAe1zB,EAAOioB,YACtB0L,EAAe1tB,EAAc5F,GAC/ByM,IAAK6mB,EAAahtB,MAAQtG,EAAGmG,YACjC,MAAMotB,EAAc,CAAC,CAACD,EAAahtB,KAAMgtB,EAAajtB,KAAM,CAACitB,EAAahtB,KAAO4sB,EAAaI,EAAajtB,KAAM,CAACitB,EAAahtB,KAAMgtB,EAAajtB,IAAM8sB,GAAe,CAACG,EAAahtB,KAAO4sB,EAAaI,EAAajtB,IAAM8sB,IAC5N,IAAK,IAAIrxB,EAAI,EAAGA,EAAIyxB,EAAYr3B,OAAQ4F,GAAK,EAAG,CAC9C,MAAMgmB,EAAQyL,EAAYzxB,GAC1B,GAAIgmB,EAAM,IAAM,GAAKA,EAAM,IAAMsL,GAAetL,EAAM,IAAM,GAAKA,EAAM,IAAMuL,EAAc,CACzF,GAAiB,IAAbvL,EAAM,IAAyB,IAAbA,EAAM,GAAU,SACtCmL,GAAS,CACX,CACF,CACA,IAAKA,EAAQ,MACf,CACI9vB,EAAOyI,iBACL0mB,GAAYC,GAAcC,GAAeC,KACvCtrB,EAAEuX,eAAgBvX,EAAEuX,iBAAsBvX,EAAEqsB,aAAc,KAE3DjB,GAAcE,KAAkBhmB,IAAQ6lB,GAAYE,IAAgB/lB,IAAKtJ,EAAO+V,cAChFoZ,GAAYE,KAAiB/lB,IAAQ8lB,GAAcE,IAAiBhmB,IAAKtJ,EAAOwW,eAEjF2Y,GAAYC,GAAcG,GAAaC,KACrCxrB,EAAEuX,eAAgBvX,EAAEuX,iBAAsBvX,EAAEqsB,aAAc,IAE5DjB,GAAcI,IAAaxvB,EAAO+V,aAClCoZ,GAAYI,IAAWvvB,EAAOwW,aAEpCtO,EAAK,WAAY4mB,EArCjB,CAuCF,CACA,SAAS5K,IACHlkB,EAAOkvB,SAASxlB,UACpB3O,EAAS7B,iBAAiB,UAAW21B,GACrC7uB,EAAOkvB,SAASxlB,SAAU,EAC5B,CACA,SAASua,IACFjkB,EAAOkvB,SAASxlB,UACrB3O,EAAS5B,oBAAoB,UAAW01B,GACxC7uB,EAAOkvB,SAASxlB,SAAU,EAC5B,CAtFA1J,EAAOkvB,SAAW,CAChBxlB,SAAS,GAEXyc,EAAa,CACX+I,SAAU,CACRxlB,SAAS,EACTmmB,gBAAgB,EAChBZ,YAAY,KAgFhBnoB,EAAG,QAAQ,KACL9G,EAAOQ,OAAO0uB,SAASxlB,SACzBwa,GACF,IAEFpd,EAAG,WAAW,KACR9G,EAAOkvB,SAASxlB,SAClBua,GACF,IAEFzrB,OAAOqQ,OAAO7I,EAAOkvB,SAAU,CAC7BhL,SACAD,WAEJ,EC7Ge,UAAoB,OACjCjkB,EAAM,aACNmmB,EAAY,GACZrf,EAAE,KACFoB,IAEA,MAAM1L,EAASF,IAgBf,IAAI0jB,EAfJmG,EAAa,CACXmK,WAAY,CACV5mB,SAAS,EACT6mB,gBAAgB,EAChBC,QAAQ,EACRC,aAAa,EACbC,YAAa,EACbC,aAAc,YACdC,eAAgB,KAChBC,cAAe,QAGnB7wB,EAAOswB,WAAa,CAClB5mB,SAAS,GAGX,IACIonB,EADAC,EAAiBp0B,IAErB,MAAMq0B,EAAoB,GAqE1B,SAASC,IACFjxB,EAAO0J,UACZ1J,EAAOkxB,cAAe,EACxB,CACA,SAASC,IACFnxB,EAAO0J,UACZ1J,EAAOkxB,cAAe,EACxB,CACA,SAASE,EAAcC,GACrB,QAAIrxB,EAAOQ,OAAO8vB,WAAWM,gBAAkBS,EAASC,MAAQtxB,EAAOQ,OAAO8vB,WAAWM,oBAIrF5wB,EAAOQ,OAAO8vB,WAAWO,eAAiBl0B,IAAQo0B,EAAiB/wB,EAAOQ,OAAO8vB,WAAWO,iBAQ5FQ,EAASC,OAAS,GAAK30B,IAAQo0B,EAAiB,KAgBhDM,EAASxc,UAAY,EACjB7U,EAAOwQ,QAASxQ,EAAOQ,OAAOqM,MAAU7M,EAAOsU,YACnDtU,EAAO+V,YACP7N,EAAK,SAAUmpB,EAASE,MAEfvxB,EAAOuQ,cAAevQ,EAAOQ,OAAOqM,MAAU7M,EAAOsU,YAChEtU,EAAOwW,YACPtO,EAAK,SAAUmpB,EAASE,MAG1BR,GAAiB,IAAIv0B,EAAOX,MAAOoF,WAE5B,IACT,CAcA,SAAS4tB,EAAOvnB,GACd,IAAItD,EAAIsD,EACJoX,GAAsB,EAC1B,IAAK1e,EAAO0J,QAAS,OACrB,MAAMlJ,EAASR,EAAOQ,OAAO8vB,WACzBtwB,EAAOQ,OAAOyK,SAChBjH,EAAEuX,iBAEJ,IAAIlC,EAAWrZ,EAAOnD,GACwB,cAA1CmD,EAAOQ,OAAO8vB,WAAWK,eAC3BtX,EAAWte,SAASxB,cAAcyG,EAAOQ,OAAO8vB,WAAWK,eAE7D,MAAMa,EAAyBnY,GAAYA,EAAS9K,SAASvK,EAAEtL,QAC/D,IAAKsH,EAAOkxB,eAAiBM,IAA2BhxB,EAAO+vB,eAAgB,OAAO,EAClFvsB,EAAEoV,gBAAepV,EAAIA,EAAEoV,eAC3B,IAAIkY,EAAQ,EACZ,MAAMG,EAAYzxB,EAAOqJ,cAAgB,EAAI,EACvClB,EArJR,SAAmBnE,GAKjB,IAAI0tB,EAAK,EACLC,EAAK,EACLC,EAAK,EACLC,EAAK,EAqDT,MAlDI,WAAY7tB,IACd2tB,EAAK3tB,EAAE8tB,QAEL,eAAgB9tB,IAClB2tB,GAAM3tB,EAAE+tB,WAAa,KAEnB,gBAAiB/tB,IACnB2tB,GAAM3tB,EAAEguB,YAAc,KAEpB,gBAAiBhuB,IACnB0tB,GAAM1tB,EAAEiuB,YAAc,KAIpB,SAAUjuB,GAAKA,EAAElH,OAASkH,EAAEkuB,kBAC9BR,EAAKC,EACLA,EAAK,GAEPC,EA3BmB,GA2BdF,EACLG,EA5BmB,GA4BdF,EACD,WAAY3tB,IACd6tB,EAAK7tB,EAAEmuB,QAEL,WAAYnuB,IACd4tB,EAAK5tB,EAAEouB,QAELpuB,EAAEyrB,WAAamC,IAEjBA,EAAKC,EACLA,EAAK,IAEFD,GAAMC,IAAO7tB,EAAEquB,YACE,IAAhBruB,EAAEquB,WAEJT,GA1CgB,GA2ChBC,GA3CgB,KA8ChBD,GA7CgB,IA8ChBC,GA9CgB,MAmDhBD,IAAOF,IACTA,EAAKE,EAAK,GAAK,EAAI,GAEjBC,IAAOF,IACTA,EAAKE,EAAK,GAAK,EAAI,GAEd,CACLS,MAAOZ,EACPa,MAAOZ,EACPa,OAAQZ,EACRa,OAAQZ,EAEZ,CAkFepb,CAAUzS,GACvB,GAAIxD,EAAOiwB,YACT,GAAIzwB,EAAOyI,eAAgB,CACzB,KAAItH,KAAKkL,IAAIlE,EAAKqqB,QAAUrxB,KAAKkL,IAAIlE,EAAKsqB,SAA+C,OAAO,EAA7CnB,GAASnpB,EAAKqqB,OAASf,CAC5E,KAAO,MAAItwB,KAAKkL,IAAIlE,EAAKsqB,QAAUtxB,KAAKkL,IAAIlE,EAAKqqB,SAAmC,OAAO,EAAjClB,GAASnpB,EAAKsqB,MAAuB,MAE/FnB,EAAQnwB,KAAKkL,IAAIlE,EAAKqqB,QAAUrxB,KAAKkL,IAAIlE,EAAKsqB,SAAWtqB,EAAKqqB,OAASf,GAAatpB,EAAKsqB,OAE3F,GAAc,IAAVnB,EAAa,OAAO,EACpB9wB,EAAOgwB,SAAQc,GAASA,GAG5B,IAAIoB,EAAY1yB,EAAOpD,eAAiB00B,EAAQ9wB,EAAOkwB,YAavD,GAZIgC,GAAa1yB,EAAO8P,iBAAgB4iB,EAAY1yB,EAAO8P,gBACvD4iB,GAAa1yB,EAAOsQ,iBAAgBoiB,EAAY1yB,EAAOsQ,gBAS3DoO,IAAsB1e,EAAOQ,OAAOqM,QAAgB6lB,IAAc1yB,EAAO8P,gBAAkB4iB,IAAc1yB,EAAOsQ,gBAC5GoO,GAAuB1e,EAAOQ,OAAOgd,QAAQxZ,EAAEyZ,kBAC9Czd,EAAOQ,OAAO4b,UAAapc,EAAOQ,OAAO4b,SAAS1S,QAoChD,CAOL,MAAM2nB,EAAW,CACfhxB,KAAM1D,IACN20B,MAAOnwB,KAAKkL,IAAIilB,GAChBzc,UAAW1T,KAAKwxB,KAAKrB,IAEjBsB,EAAoB9B,GAAuBO,EAAShxB,KAAOywB,EAAoBzwB,KAAO,KAAOgxB,EAASC,OAASR,EAAoBQ,OAASD,EAASxc,YAAcic,EAAoBjc,UAC7L,IAAK+d,EAAmB,CACtB9B,OAAsBtxB,EACtB,IAAIqzB,EAAW7yB,EAAOpD,eAAiB00B,EAAQ9wB,EAAOkwB,YACtD,MAAMhgB,EAAe1Q,EAAOuQ,YACtBI,EAAS3Q,EAAOwQ,MAiBtB,GAhBIqiB,GAAY7yB,EAAO8P,iBAAgB+iB,EAAW7yB,EAAO8P,gBACrD+iB,GAAY7yB,EAAOsQ,iBAAgBuiB,EAAW7yB,EAAOsQ,gBACzDtQ,EAAO6O,cAAc,GACrB7O,EAAO4T,aAAaif,GACpB7yB,EAAOmQ,iBACPnQ,EAAOuS,oBACPvS,EAAOsR,wBACFZ,GAAgB1Q,EAAOuQ,cAAgBI,GAAU3Q,EAAOwQ,QAC3DxQ,EAAOsR,sBAELtR,EAAOQ,OAAOqM,MAChB7M,EAAOqW,QAAQ,CACbxB,UAAWwc,EAASxc,UAAY,EAAI,OAAS,OAC7C6C,cAAc,IAGd1X,EAAOQ,OAAO4b,SAAS0W,OAAQ,CAYjC92B,aAAagkB,GACbA,OAAUxgB,EACNwxB,EAAkBj4B,QAAU,IAC9Bi4B,EAAkB+B,QAGpB,MAAMC,EAAYhC,EAAkBj4B,OAASi4B,EAAkBA,EAAkBj4B,OAAS,QAAKyG,EACzFyzB,EAAajC,EAAkB,GAErC,GADAA,EAAkBntB,KAAKwtB,GACnB2B,IAAc3B,EAASC,MAAQ0B,EAAU1B,OAASD,EAASxc,YAAcme,EAAUne,WAErFmc,EAAkBhpB,OAAO,QACpB,GAAIgpB,EAAkBj4B,QAAU,IAAMs4B,EAAShxB,KAAO4yB,EAAW5yB,KAAO,KAAO4yB,EAAW3B,MAAQD,EAASC,OAAS,GAAKD,EAASC,OAAS,EAAG,CAOnJ,MAAM4B,EAAkB5B,EAAQ,EAAI,GAAM,GAC1CR,EAAsBO,EACtBL,EAAkBhpB,OAAO,GACzBgY,EAAUvjB,GAAS,KACjBuD,EAAOiX,eAAejX,EAAOQ,OAAOC,OAAO,OAAMjB,EAAW0zB,EAAgB,GAC3E,EACL,CAEKlT,IAIHA,EAAUvjB,GAAS,KAEjBq0B,EAAsBO,EACtBL,EAAkBhpB,OAAO,GACzBhI,EAAOiX,eAAejX,EAAOQ,OAAOC,OAAO,OAAMjB,EAHzB,GAGoD,GAC3E,KAEP,CAQA,GALKozB,GAAmB1qB,EAAK,SAAUlE,GAGnChE,EAAOQ,OAAO4f,UAAYpgB,EAAOQ,OAAO2yB,8BAA8BnzB,EAAOogB,SAASgT,OAEtFP,IAAa7yB,EAAO8P,gBAAkB+iB,IAAa7yB,EAAOsQ,eAAgB,OAAO,CACvF,CACF,KAlIgE,CAE9D,MAAM+gB,EAAW,CACfhxB,KAAM1D,IACN20B,MAAOnwB,KAAKkL,IAAIilB,GAChBzc,UAAW1T,KAAKwxB,KAAKrB,GACrBC,IAAKjqB,GAIH0pB,EAAkBj4B,QAAU,GAC9Bi4B,EAAkB+B,QAGpB,MAAMC,EAAYhC,EAAkBj4B,OAASi4B,EAAkBA,EAAkBj4B,OAAS,QAAKyG,EAmB/F,GAlBAwxB,EAAkBntB,KAAKwtB,GAQnB2B,GACE3B,EAASxc,YAAcme,EAAUne,WAAawc,EAASC,MAAQ0B,EAAU1B,OAASD,EAAShxB,KAAO2yB,EAAU3yB,KAAO,MACrH+wB,EAAcC,GAGhBD,EAAcC,GAnFpB,SAAuBA,GACrB,MAAM7wB,EAASR,EAAOQ,OAAO8vB,WAC7B,GAAIe,EAASxc,UAAY,GACvB,GAAI7U,EAAOwQ,QAAUxQ,EAAOQ,OAAOqM,MAAQrM,EAAO+vB,eAEhD,OAAO,OAEJ,GAAIvwB,EAAOuQ,cAAgBvQ,EAAOQ,OAAOqM,MAAQrM,EAAO+vB,eAE7D,OAAO,EAET,OAAO,CACT,CA4EQ8C,CAAchC,GAChB,OAAO,CAEX,CAgGA,OADIrtB,EAAEuX,eAAgBvX,EAAEuX,iBAAsBvX,EAAEqsB,aAAc,GACvD,CACT,CACA,SAAStpB,EAAOM,GACd,IAAIgS,EAAWrZ,EAAOnD,GACwB,cAA1CmD,EAAOQ,OAAO8vB,WAAWK,eAC3BtX,EAAWte,SAASxB,cAAcyG,EAAOQ,OAAO8vB,WAAWK,eAE7DtX,EAAShS,GAAQ,aAAc4pB,GAC/B5X,EAAShS,GAAQ,aAAc8pB,GAC/B9X,EAAShS,GAAQ,QAASwnB,EAC5B,CACA,SAAS3K,IACP,OAAIlkB,EAAOQ,OAAOyK,SAChBjL,EAAOU,UAAUvH,oBAAoB,QAAS01B,IACvC,IAEL7uB,EAAOswB,WAAW5mB,UACtB3C,EAAO,oBACP/G,EAAOswB,WAAW5mB,SAAU,GACrB,EACT,CACA,SAASua,IACP,OAAIjkB,EAAOQ,OAAOyK,SAChBjL,EAAOU,UAAUxH,iBAAiBoO,MAAOunB,IAClC,KAEJ7uB,EAAOswB,WAAW5mB,UACvB3C,EAAO,uBACP/G,EAAOswB,WAAW5mB,SAAU,GACrB,EACT,CACA5C,EAAG,QAAQ,MACJ9G,EAAOQ,OAAO8vB,WAAW5mB,SAAW1J,EAAOQ,OAAOyK,SACrDgZ,IAEEjkB,EAAOQ,OAAO8vB,WAAW5mB,SAASwa,GAAQ,IAEhDpd,EAAG,WAAW,KACR9G,EAAOQ,OAAOyK,SAChBiZ,IAEElkB,EAAOswB,WAAW5mB,SAASua,GAAS,IAE1CzrB,OAAOqQ,OAAO7I,EAAOswB,WAAY,CAC/BpM,SACAD,WAEJ,EC7Xe,UAAoB,OACjCjkB,EAAM,aACNmmB,EAAY,GACZrf,EAAE,KACFoB,IAEAie,EAAa,CACXtG,WAAY,CACVC,OAAQ,KACRC,OAAQ,KACRuT,aAAa,EACbC,cAAe,yBACfC,YAAa,uBACbC,UAAW,qBACXC,wBAAyB,gCAG7B1zB,EAAO6f,WAAa,CAClBC,OAAQ,KACRC,OAAQ,MAEV,MAAM4T,EAAoB92B,IACnB0F,MAAMC,QAAQ3F,KAAKA,EAAK,CAACA,GAAIoC,QAAO+E,KAAOA,KACzCnH,GAET,SAAS+2B,EAAM/2B,GACb,IAAIg3B,EACJ,OAAIh3B,GAAoB,iBAAPA,GAAmBmD,EAAOoP,YACzCykB,EAAM7zB,EAAOnD,GAAGmd,WAAWzgB,cAAcsD,GACrCg3B,GAAYA,GAEdh3B,IACgB,iBAAPA,IAAiBg3B,EAAM,IAAI94B,SAASvB,iBAAiBqD,KAC5DmD,EAAOQ,OAAOwhB,mBAAmC,iBAAPnlB,GAAmBg3B,EAAI96B,OAAS,GAA+C,IAA1CiH,EAAOnD,GAAGrD,iBAAiBqD,GAAI9D,SAChH86B,EAAM7zB,EAAOnD,GAAGtD,cAAcsD,KAG9BA,IAAOg3B,EAAYh3B,EAEhBg3B,EACT,CACA,SAASC,EAASj3B,EAAIk3B,GACpB,MAAMvzB,EAASR,EAAOQ,OAAOqf,YAC7BhjB,EAAK82B,EAAkB92B,IACpBhE,SAAQm7B,IACLA,IACFA,EAAM3xB,UAAU0xB,EAAW,MAAQ,aAAavzB,EAAO+yB,cAAch2B,MAAM,MACrD,WAAlBy2B,EAAMC,UAAsBD,EAAMD,SAAWA,GAC7C/zB,EAAOQ,OAAOwN,eAAiBhO,EAAO0J,SACxCsqB,EAAM3xB,UAAUrC,EAAO8iB,SAAW,MAAQ,UAAUtiB,EAAOizB,WAE/D,GAEJ,CACA,SAASvS,IAEP,MAAM,OACJpB,EAAM,OACNC,GACE/f,EAAO6f,WACX,GAAI7f,EAAOQ,OAAOqM,KAGhB,OAFAinB,EAAS/T,GAAQ,QACjB+T,EAAShU,GAAQ,GAGnBgU,EAAS/T,EAAQ/f,EAAOuQ,cAAgBvQ,EAAOQ,OAAO+V,QACtDud,EAAShU,EAAQ9f,EAAOwQ,QAAUxQ,EAAOQ,OAAO+V,OAClD,CACA,SAAS2d,EAAYlwB,GACnBA,EAAEuX,mBACEvb,EAAOuQ,aAAgBvQ,EAAOQ,OAAOqM,MAAS7M,EAAOQ,OAAO+V,UAChEvW,EAAOwW,YACPtO,EAAK,kBACP,CACA,SAASisB,EAAYnwB,GACnBA,EAAEuX,mBACEvb,EAAOwQ,OAAUxQ,EAAOQ,OAAOqM,MAAS7M,EAAOQ,OAAO+V,UAC1DvW,EAAO+V,YACP7N,EAAK,kBACP,CACA,SAASyZ,IACP,MAAMnhB,EAASR,EAAOQ,OAAOqf,WAK7B,GAJA7f,EAAOQ,OAAOqf,WAAa4K,EAA0BzqB,EAAQA,EAAOyjB,eAAe5D,WAAY7f,EAAOQ,OAAOqf,WAAY,CACvHC,OAAQ,qBACRC,OAAQ,wBAEJvf,EAAOsf,SAAUtf,EAAOuf,OAAS,OACvC,IAAID,EAAS8T,EAAMpzB,EAAOsf,QACtBC,EAAS6T,EAAMpzB,EAAOuf,QAC1BvnB,OAAOqQ,OAAO7I,EAAO6f,WAAY,CAC/BC,SACAC,WAEFD,EAAS6T,EAAkB7T,GAC3BC,EAAS4T,EAAkB5T,GAC3B,MAAMqU,EAAa,CAACv3B,EAAIgE,KAClBhE,GACFA,EAAG3D,iBAAiB,QAAiB,SAAR2H,EAAiBszB,EAAcD,IAEzDl0B,EAAO0J,SAAW7M,GACrBA,EAAGwF,UAAUC,OAAO9B,EAAOizB,UAAUl2B,MAAM,KAC7C,EAEFuiB,EAAOjnB,SAAQgE,GAAMu3B,EAAWv3B,EAAI,UACpCkjB,EAAOlnB,SAAQgE,GAAMu3B,EAAWv3B,EAAI,SACtC,CACA,SAASqrB,IACP,IAAI,OACFpI,EAAM,OACNC,GACE/f,EAAO6f,WACXC,EAAS6T,EAAkB7T,GAC3BC,EAAS4T,EAAkB5T,GAC3B,MAAMsU,EAAgB,CAACx3B,EAAIgE,KACzBhE,EAAG1D,oBAAoB,QAAiB,SAAR0H,EAAiBszB,EAAcD,GAC/Dr3B,EAAGwF,UAAUoM,UAAUzO,EAAOQ,OAAOqf,WAAW0T,cAAch2B,MAAM,KAAK,EAE3EuiB,EAAOjnB,SAAQgE,GAAMw3B,EAAcx3B,EAAI,UACvCkjB,EAAOlnB,SAAQgE,GAAMw3B,EAAcx3B,EAAI,SACzC,CACAiK,EAAG,QAAQ,MACgC,IAArC9G,EAAOQ,OAAOqf,WAAWnW,QAE3Bua,KAEAtC,IACAT,IACF,IAEFpa,EAAG,+BAA+B,KAChCoa,GAAQ,IAEVpa,EAAG,WAAW,KACZohB,GAAS,IAEXphB,EAAG,kBAAkB,KACnB,IAAI,OACFgZ,EAAM,OACNC,GACE/f,EAAO6f,WACXC,EAAS6T,EAAkB7T,GAC3BC,EAAS4T,EAAkB5T,GAC3B,IAAID,KAAWC,GAAQ9gB,QAAOpC,KAAQA,IAAIhE,SAAQgE,GAAMA,EAAGwF,UAAUrC,EAAO0J,QAAU,SAAW,OAAO1J,EAAOQ,OAAOqf,WAAW4T,YAAW,IAE9I3sB,EAAG,SAAS,CAAColB,EAAIloB,KACf,IAAI,OACF8b,EAAM,OACNC,GACE/f,EAAO6f,WACXC,EAAS6T,EAAkB7T,GAC3BC,EAAS4T,EAAkB5T,GAC3B,MAAM1G,EAAWrV,EAAEtL,OACnB,GAAIsH,EAAOQ,OAAOqf,WAAWyT,cAAgBvT,EAAOzZ,SAAS+S,KAAcyG,EAAOxZ,SAAS+S,GAAW,CACpG,GAAIrZ,EAAOs0B,YAAct0B,EAAOQ,OAAO8zB,YAAct0B,EAAOQ,OAAO8zB,WAAWC,YAAcv0B,EAAOs0B,WAAWz3B,KAAOwc,GAAYrZ,EAAOs0B,WAAWz3B,GAAG0R,SAAS8K,IAAY,OAC3K,IAAImb,EACA1U,EAAO/mB,OACTy7B,EAAW1U,EAAO,GAAGzd,UAAUkM,SAASvO,EAAOQ,OAAOqf,WAAW2T,aACxDzT,EAAOhnB,SAChBy7B,EAAWzU,EAAO,GAAG1d,UAAUkM,SAASvO,EAAOQ,OAAOqf,WAAW2T,cAGjEtrB,GADe,IAAbssB,EACG,iBAEA,kBAEP,IAAI1U,KAAWC,GAAQ9gB,QAAOpC,KAAQA,IAAIhE,SAAQgE,GAAMA,EAAGwF,UAAUoyB,OAAOz0B,EAAOQ,OAAOqf,WAAW2T,cACvG,KAEF,MAKMvP,EAAU,KACdjkB,EAAOnD,GAAGwF,UAAUC,OAAOtC,EAAOQ,OAAOqf,WAAW6T,wBAAwBn2B,MAAM,MAClF2qB,GAAS,EAEX1vB,OAAOqQ,OAAO7I,EAAO6f,WAAY,CAC/BqE,OAVa,KACblkB,EAAOnD,GAAGwF,UAAUoM,UAAUzO,EAAOQ,OAAOqf,WAAW6T,wBAAwBn2B,MAAM,MACrFokB,IACAT,GAAQ,EAQR+C,UACA/C,SACAS,OACAuG,WAEJ,ECtLe,UAAoB,OACjCloB,EAAM,aACNmmB,EAAY,GACZrf,EAAE,KACFoB,IAEA,MAAMwsB,EAAM,oBAqCZ,IAAIC,EApCJxO,EAAa,CACXmO,WAAY,CACVz3B,GAAI,KACJ+3B,cAAe,OACfL,WAAW,EACXjB,aAAa,EACbuB,aAAc,KACdC,kBAAmB,KACnBC,eAAgB,KAChBC,aAAc,KACdC,qBAAqB,EACrBlW,KAAM,UAENmW,gBAAgB,EAChBC,mBAAoB,EACpBC,sBAAuBC,GAAUA,EACjCC,oBAAqBD,GAAUA,EAC/BE,YAAa,GAAGb,WAChBc,kBAAmB,GAAGd,kBACtBe,cAAe,GAAGf,KAClBgB,aAAc,GAAGhB,YACjBiB,WAAY,GAAGjB,UACflB,YAAa,GAAGkB,WAChBkB,qBAAsB,GAAGlB,qBACzBmB,yBAA0B,GAAGnB,yBAC7BoB,eAAgB,GAAGpB,cACnBjB,UAAW,GAAGiB,SACdqB,gBAAiB,GAAGrB,eACpBsB,cAAe,GAAGtB,aAClBuB,wBAAyB,GAAGvB,gBAGhC10B,EAAOs0B,WAAa,CAClBz3B,GAAI,KACJq5B,QAAS,IAGX,IAAIC,EAAqB,EACzB,MAAMxC,EAAoB92B,IACnB0F,MAAMC,QAAQ3F,KAAKA,EAAK,CAACA,GAAIoC,QAAO+E,KAAOA,KACzCnH,GAET,SAASu5B,IACP,OAAQp2B,EAAOQ,OAAO8zB,WAAWz3B,KAAOmD,EAAOs0B,WAAWz3B,IAAM0F,MAAMC,QAAQxC,EAAOs0B,WAAWz3B,KAAuC,IAAhCmD,EAAOs0B,WAAWz3B,GAAG9D,MAC9H,CACA,SAASs9B,EAAeC,EAAUzD,GAChC,MAAM,kBACJ2C,GACEx1B,EAAOQ,OAAO8zB,WACbgC,IACLA,EAAWA,GAAyB,SAAbzD,EAAsB,WAAa,QAAtC,qBAElByD,EAASj0B,UAAUC,IAAI,GAAGkzB,KAAqB3C,MAC/CyD,EAAWA,GAAyB,SAAbzD,EAAsB,WAAa,QAAtC,oBAElByD,EAASj0B,UAAUC,IAAI,GAAGkzB,KAAqB3C,KAAYA,KAGjE,CACA,SAAS0D,EAAcvyB,GACrB,MAAMsyB,EAAWtyB,EAAEtL,OAAO2a,QAAQsX,EAAkB3qB,EAAOQ,OAAO8zB,WAAWiB,cAC7E,IAAKe,EACH,OAEFtyB,EAAEuX,iBACF,MAAMxT,EAAQzE,EAAagzB,GAAYt2B,EAAOQ,OAAO8L,eACrD,GAAItM,EAAOQ,OAAOqM,KAAM,CACtB,GAAI7M,EAAO0S,YAAc3K,EAAO,QAC5BA,EAAQ/H,EAAOsX,cAAgBvP,EAAQ/H,EAAO4J,OAAO7Q,OAASiH,EAAOsX,eACvEtX,EAAOqW,QAAQ,CACbxB,UAAW9M,EAAQ/H,EAAOsX,aAAe,OAAS,OAClDG,iBAAkB1P,EAClBgN,SAAS,IAGb/U,EAAO6V,YAAY9N,EACrB,MACE/H,EAAO+U,QAAQhN,EAEnB,CACA,SAASmZ,IAEP,MAAM5X,EAAMtJ,EAAOsJ,IACb9I,EAASR,EAAOQ,OAAO8zB,WAC7B,GAAI8B,IAAwB,OAC5B,IAGIr1B,EAHAlE,EAAKmD,EAAOs0B,WAAWz3B,GAC3BA,EAAK82B,EAAkB92B,GAGvB,MAAMiN,EAAe9J,EAAOyJ,SAAWzJ,EAAOQ,OAAOiJ,QAAQC,QAAU1J,EAAOyJ,QAAQG,OAAO7Q,OAASiH,EAAO4J,OAAO7Q,OAC9Gy9B,EAAQx2B,EAAOQ,OAAOqM,KAAO1L,KAAK4L,KAAKjD,EAAe9J,EAAOQ,OAAO8L,gBAAkBtM,EAAO+J,SAAShR,OAS5G,GAPEgI,EADEf,EAAOQ,OAAOqM,KACN7M,EAAOQ,OAAO8L,eAAiB,EAAInL,KAAKgL,MAAMnM,EAAO0S,UAAY1S,EAAOQ,OAAO8L,gBAAkBtM,EAAO0S,eAC7E,IAArB1S,EAAO4N,UACb5N,EAAO4N,UAEP5N,EAAOiP,aAAe,EAGd,YAAhBzO,EAAOue,MAAsB/e,EAAOs0B,WAAW4B,SAAWl2B,EAAOs0B,WAAW4B,QAAQn9B,OAAS,EAAG,CAClG,MAAMm9B,EAAUl2B,EAAOs0B,WAAW4B,QAClC,IAAIO,EACA1f,EACA2f,EAqBJ,GApBIl2B,EAAO00B,iBACTP,EAAa1wB,EAAiBiyB,EAAQ,GAAIl2B,EAAOyI,eAAiB,QAAU,UAAU,GACtF5L,EAAGhE,SAAQm7B,IACTA,EAAMj6B,MAAMiG,EAAOyI,eAAiB,QAAU,UAAeksB,GAAcn0B,EAAO20B,mBAAqB,GAA7C,IAAmD,IAE3G30B,EAAO20B,mBAAqB,QAA8B31B,IAAzBQ,EAAOyS,gBAC1C0jB,GAAsBp1B,GAAWf,EAAOyS,eAAiB,GACrD0jB,EAAqB31B,EAAO20B,mBAAqB,EACnDgB,EAAqB31B,EAAO20B,mBAAqB,EACxCgB,EAAqB,IAC9BA,EAAqB,IAGzBM,EAAat1B,KAAKC,IAAIL,EAAUo1B,EAAoB,GACpDpf,EAAY0f,GAAct1B,KAAKE,IAAI60B,EAAQn9B,OAAQyH,EAAO20B,oBAAsB,GAChFuB,GAAY3f,EAAY0f,GAAc,GAExCP,EAAQr9B,SAAQy9B,IACdA,EAASj0B,UAAUoM,UAAU,CAAC,GAAI,QAAS,aAAc,QAAS,aAAc,SAASjR,KAAIm5B,GAAU,GAAGn2B,EAAOg1B,oBAAoBmB,MAAU,IAE7I95B,EAAG9D,OAAS,EACdm9B,EAAQr9B,SAAQ+9B,IACd,MAAMC,EAAcvzB,EAAaszB,GAC7BC,IAAgB91B,GAClB61B,EAAOv0B,UAAUC,IAAI9B,EAAOg1B,mBAE1Bh1B,EAAO00B,iBACL2B,GAAeJ,GAAcI,GAAe9f,GAC9C6f,EAAOv0B,UAAUC,IAAI,GAAG9B,EAAOg1B,0BAE7BqB,IAAgBJ,GAClBJ,EAAeO,EAAQ,QAErBC,IAAgB9f,GAClBsf,EAAeO,EAAQ,QAE3B,QAEG,CACL,MAAMA,EAASV,EAAQn1B,GAIvB,GAHI61B,GACFA,EAAOv0B,UAAUC,IAAI9B,EAAOg1B,mBAE1Bh1B,EAAO00B,eAAgB,CACzB,MAAM4B,EAAuBZ,EAAQO,GAC/BM,EAAsBb,EAAQnf,GACpC,IAAK,IAAIpY,EAAI83B,EAAY93B,GAAKoY,EAAWpY,GAAK,EACxCu3B,EAAQv3B,IACVu3B,EAAQv3B,GAAG0D,UAAUC,IAAI,GAAG9B,EAAOg1B,0BAGvCa,EAAeS,EAAsB,QACrCT,EAAeU,EAAqB,OACtC,CACF,CACA,GAAIv2B,EAAO00B,eAAgB,CACzB,MAAM8B,EAAuB71B,KAAKE,IAAI60B,EAAQn9B,OAAQyH,EAAO20B,mBAAqB,GAC5E8B,GAAiBtC,EAAaqC,EAAuBrC,GAAc,EAAI+B,EAAW/B,EAClF3G,EAAa1kB,EAAM,QAAU,OACnC4sB,EAAQr9B,SAAQ+9B,IACdA,EAAO78B,MAAMiG,EAAOyI,eAAiBulB,EAAa,OAAS,GAAGiJ,KAAiB,GAEnF,CACF,CACAp6B,EAAGhE,SAAQ,CAACm7B,EAAOkD,KASjB,GARoB,aAAhB12B,EAAOue,OACTiV,EAAMx6B,iBAAiBmxB,EAAkBnqB,EAAOk1B,eAAe78B,SAAQs+B,IACrEA,EAAWC,YAAc52B,EAAO40B,sBAAsBr0B,EAAU,EAAE,IAEpEizB,EAAMx6B,iBAAiBmxB,EAAkBnqB,EAAOm1B,aAAa98B,SAAQw+B,IACnEA,EAAQD,YAAc52B,EAAO80B,oBAAoBkB,EAAM,KAGvC,gBAAhBh2B,EAAOue,KAAwB,CACjC,IAAIuY,EAEFA,EADE92B,EAAOy0B,oBACcj1B,EAAOyI,eAAiB,WAAa,aAErCzI,EAAOyI,eAAiB,aAAe,WAEhE,MAAM8uB,GAASx2B,EAAU,GAAKy1B,EAC9B,IAAIgB,EAAS,EACTC,EAAS,EACgB,eAAzBH,EACFE,EAASD,EAETE,EAASF,EAEXvD,EAAMx6B,iBAAiBmxB,EAAkBnqB,EAAOo1B,uBAAuB/8B,SAAQ6+B,IAC7EA,EAAW39B,MAAMsD,UAAY,6BAA6Bm6B,aAAkBC,KAC5EC,EAAW39B,MAAM6oB,mBAAqB,GAAG5iB,EAAOQ,OAAOC,SAAS,GAEpE,CACoB,WAAhBD,EAAOue,MAAqBve,EAAOw0B,cACrChB,EAAMjJ,UAAYvqB,EAAOw0B,aAAah1B,EAAQe,EAAU,EAAGy1B,GACxC,IAAfU,GAAkBhvB,EAAK,mBAAoB8rB,KAE5B,IAAfkD,GAAkBhvB,EAAK,mBAAoB8rB,GAC/C9rB,EAAK,mBAAoB8rB,IAEvBh0B,EAAOQ,OAAOwN,eAAiBhO,EAAO0J,SACxCsqB,EAAM3xB,UAAUrC,EAAO8iB,SAAW,MAAQ,UAAUtiB,EAAOizB,UAC7D,GAEJ,CACA,SAASkE,IAEP,MAAMn3B,EAASR,EAAOQ,OAAO8zB,WAC7B,GAAI8B,IAAwB,OAC5B,MAAMtsB,EAAe9J,EAAOyJ,SAAWzJ,EAAOQ,OAAOiJ,QAAQC,QAAU1J,EAAOyJ,QAAQG,OAAO7Q,OAASiH,EAAO4J,OAAO7Q,OACpH,IAAI8D,EAAKmD,EAAOs0B,WAAWz3B,GAC3BA,EAAK82B,EAAkB92B,GACvB,IAAI+6B,EAAiB,GACrB,GAAoB,YAAhBp3B,EAAOue,KAAoB,CAC7B,IAAI8Y,EAAkB73B,EAAOQ,OAAOqM,KAAO1L,KAAK4L,KAAKjD,EAAe9J,EAAOQ,OAAO8L,gBAAkBtM,EAAO+J,SAAShR,OAChHiH,EAAOQ,OAAO4b,UAAYpc,EAAOQ,OAAO4b,SAAS1S,SAAWmuB,EAAkB/tB,IAChF+tB,EAAkB/tB,GAEpB,IAAK,IAAInL,EAAI,EAAGA,EAAIk5B,EAAiBl5B,GAAK,EACpC6B,EAAOq0B,aACT+C,GAAkBp3B,EAAOq0B,aAAav2B,KAAK0B,EAAQrB,EAAG6B,EAAO+0B,aAE7DqC,GAAkB,IAAIp3B,EAAOo0B,wBAAwBp0B,EAAO+0B,kBAAkB/0B,EAAOo0B,gBAG3F,CACoB,aAAhBp0B,EAAOue,OAEP6Y,EADEp3B,EAAOu0B,eACQv0B,EAAOu0B,eAAez2B,KAAK0B,EAAQQ,EAAOk1B,aAAcl1B,EAAOm1B,YAE/D,gBAAgBn1B,EAAOk1B,wCAAkDl1B,EAAOm1B,uBAGjF,gBAAhBn1B,EAAOue,OAEP6Y,EADEp3B,EAAOs0B,kBACQt0B,EAAOs0B,kBAAkBx2B,KAAK0B,EAAQQ,EAAOo1B,sBAE7C,gBAAgBp1B,EAAOo1B,iCAG5C/4B,EAAGhE,SAAQm7B,IACW,WAAhBxzB,EAAOue,OACTiV,EAAMjJ,UAAY6M,GAAkB,IAElB,YAAhBp3B,EAAOue,OACT/e,EAAOs0B,WAAW4B,QAAU,IAAIlC,EAAMx6B,iBAAiBmxB,EAAkBnqB,EAAO+0B,eAClF,IAEkB,WAAhB/0B,EAAOue,MACT7W,EAAK,mBAAoBrL,EAAG,GAEhC,CACA,SAAS8kB,IACP3hB,EAAOQ,OAAO8zB,WAAa7J,EAA0BzqB,EAAQA,EAAOyjB,eAAe6Q,WAAYt0B,EAAOQ,OAAO8zB,WAAY,CACvHz3B,GAAI,sBAEN,MAAM2D,EAASR,EAAOQ,OAAO8zB,WAC7B,IAAK9zB,EAAO3D,GAAI,OAChB,IAAIA,EACqB,iBAAd2D,EAAO3D,IAAmBmD,EAAOoP,YAC1CvS,EAAKmD,EAAOnD,GAAGmd,WAAWzgB,cAAciH,EAAO3D,KAE5CA,GAA2B,iBAAd2D,EAAO3D,KACvBA,EAAK,IAAI9B,SAASvB,iBAAiBgH,EAAO3D,MAEvCA,IACHA,EAAK2D,EAAO3D,IAETA,GAAoB,IAAdA,EAAG9D,SACViH,EAAOQ,OAAOwhB,mBAA0C,iBAAdxhB,EAAO3D,IAAmB0F,MAAMC,QAAQ3F,IAAOA,EAAG9D,OAAS,IACvG8D,EAAK,IAAImD,EAAOnD,GAAGrD,iBAAiBgH,EAAO3D,KAEvCA,EAAG9D,OAAS,IACd8D,EAAKA,EAAGoC,QAAO+0B,GACTvwB,EAAeuwB,EAAO,WAAW,KAAOh0B,EAAOnD,KAElD,KAGH0F,MAAMC,QAAQ3F,IAAqB,IAAdA,EAAG9D,SAAc8D,EAAKA,EAAG,IAClDrE,OAAOqQ,OAAO7I,EAAOs0B,WAAY,CAC/Bz3B,OAEFA,EAAK82B,EAAkB92B,GACvBA,EAAGhE,SAAQm7B,IACW,YAAhBxzB,EAAOue,MAAsBve,EAAO+zB,WACtCP,EAAM3xB,UAAUC,IAAI9B,EAAOs1B,gBAE7B9B,EAAM3xB,UAAUC,IAAI9B,EAAOi1B,cAAgBj1B,EAAOue,MAClDiV,EAAM3xB,UAAUC,IAAItC,EAAOyI,eAAiBjI,EAAOu1B,gBAAkBv1B,EAAOw1B,eACxD,YAAhBx1B,EAAOue,MAAsBve,EAAO00B,iBACtClB,EAAM3xB,UAAUC,IAAI,GAAG9B,EAAOi1B,gBAAgBj1B,EAAOue,gBACrDoX,EAAqB,EACjB31B,EAAO20B,mBAAqB,IAC9B30B,EAAO20B,mBAAqB,IAGZ,gBAAhB30B,EAAOue,MAA0Bve,EAAOy0B,qBAC1CjB,EAAM3xB,UAAUC,IAAI9B,EAAOq1B,0BAEzBr1B,EAAO+zB,WACTP,EAAM96B,iBAAiB,QAASq9B,GAE7Bv2B,EAAO0J,SACVsqB,EAAM3xB,UAAUC,IAAI9B,EAAOizB,UAC7B,IAEJ,CACA,SAASvL,IACP,MAAM1nB,EAASR,EAAOQ,OAAO8zB,WAC7B,GAAI8B,IAAwB,OAC5B,IAAIv5B,EAAKmD,EAAOs0B,WAAWz3B,GACvBA,IACFA,EAAK82B,EAAkB92B,GACvBA,EAAGhE,SAAQm7B,IACTA,EAAM3xB,UAAUoM,OAAOjO,EAAOgzB,aAC9BQ,EAAM3xB,UAAUoM,OAAOjO,EAAOi1B,cAAgBj1B,EAAOue,MACrDiV,EAAM3xB,UAAUoM,OAAOzO,EAAOyI,eAAiBjI,EAAOu1B,gBAAkBv1B,EAAOw1B,eAC3Ex1B,EAAO+zB,WACTP,EAAM76B,oBAAoB,QAASo9B,EACrC,KAGAv2B,EAAOs0B,WAAW4B,SAASl2B,EAAOs0B,WAAW4B,QAAQr9B,SAAQm7B,GAASA,EAAM3xB,UAAUoM,OAAOjO,EAAOg1B,oBAC1G,CACA1uB,EAAG,QAAQ,MACgC,IAArC9G,EAAOQ,OAAO8zB,WAAW5qB,QAE3Bua,KAEAtC,IACAgW,IACAzW,IACF,IAEFpa,EAAG,qBAAqB,UACU,IAArB9G,EAAO4N,WAChBsT,GACF,IAEFpa,EAAG,mBAAmB,KACpBoa,GAAQ,IAEVpa,EAAG,wBAAwB,KACzB6wB,IACAzW,GAAQ,IAEVpa,EAAG,WAAW,KACZohB,GAAS,IAEXphB,EAAG,kBAAkB,KACnB,IAAI,GACFjK,GACEmD,EAAOs0B,WACPz3B,IACFA,EAAK82B,EAAkB92B,GACvBA,EAAGhE,SAAQm7B,GAASA,EAAM3xB,UAAUrC,EAAO0J,QAAU,SAAW,OAAO1J,EAAOQ,OAAO8zB,WAAWb,aAClG,IAEF3sB,EAAG,eAAe,KAChBoa,GAAQ,IAEVpa,EAAG,SAAS,CAAColB,EAAIloB,KACf,MAAMqV,EAAWrV,EAAEtL,OACnB,IAAI,GACFmE,GACEmD,EAAOs0B,WAEX,GADK/xB,MAAMC,QAAQ3F,KAAKA,EAAK,CAACA,GAAIoC,QAAO+C,KAAaA,KAClDhC,EAAOQ,OAAO8zB,WAAWz3B,IAAMmD,EAAOQ,OAAO8zB,WAAWhB,aAAez2B,GAAMA,EAAG9D,OAAS,IAAMsgB,EAAShX,UAAUkM,SAASvO,EAAOQ,OAAO8zB,WAAWiB,aAAc,CACpK,GAAIv1B,EAAO6f,aAAe7f,EAAO6f,WAAWC,QAAUzG,IAAarZ,EAAO6f,WAAWC,QAAU9f,EAAO6f,WAAWE,QAAU1G,IAAarZ,EAAO6f,WAAWE,QAAS,OACnK,MAAMyU,EAAW33B,EAAG,GAAGwF,UAAUkM,SAASvO,EAAOQ,OAAO8zB,WAAWd,aAEjEtrB,GADe,IAAbssB,EACG,iBAEA,kBAEP33B,EAAGhE,SAAQm7B,GAASA,EAAM3xB,UAAUoyB,OAAOz0B,EAAOQ,OAAO8zB,WAAWd,cACtE,KAEF,MAaMvP,EAAU,KACdjkB,EAAOnD,GAAGwF,UAAUC,IAAItC,EAAOQ,OAAO8zB,WAAW2B,yBACjD,IAAI,GACFp5B,GACEmD,EAAOs0B,WACPz3B,IACFA,EAAK82B,EAAkB92B,GACvBA,EAAGhE,SAAQm7B,GAASA,EAAM3xB,UAAUC,IAAItC,EAAOQ,OAAO8zB,WAAW2B,4BAEnE/N,GAAS,EAEX1vB,OAAOqQ,OAAO7I,EAAOs0B,WAAY,CAC/BpQ,OAzBa,KACblkB,EAAOnD,GAAGwF,UAAUoM,OAAOzO,EAAOQ,OAAO8zB,WAAW2B,yBACpD,IAAI,GACFp5B,GACEmD,EAAOs0B,WACPz3B,IACFA,EAAK82B,EAAkB92B,GACvBA,EAAGhE,SAAQm7B,GAASA,EAAM3xB,UAAUoM,OAAOzO,EAAOQ,OAAO8zB,WAAW2B,4BAEtEtU,IACAgW,IACAzW,GAAQ,EAeR+C,UACA0T,SACAzW,SACAS,OACAuG,WAEJ,ECtae,UAAmB,OAChCloB,EAAM,aACNmmB,EAAY,GACZrf,EAAE,KACFoB,IAEA,MAAMnN,EAAWF,IACjB,IAGIi9B,EACAC,EACAC,EACAC,EANAxe,GAAY,EACZuG,EAAU,KACVkY,EAAc,KAuBlB,SAAStkB,IACP,IAAK5T,EAAOQ,OAAO23B,UAAUt7B,KAAOmD,EAAOm4B,UAAUt7B,GAAI,OACzD,MAAM,UACJs7B,EACA9uB,aAAcC,GACZtJ,GACE,OACJo4B,EAAM,GACNv7B,GACEs7B,EACE33B,EAASR,EAAOQ,OAAO23B,UACvBj3B,EAAWlB,EAAOQ,OAAOqM,KAAO7M,EAAOyQ,aAAezQ,EAAOkB,SACnE,IAAIm3B,EAAUN,EACVO,GAAUN,EAAYD,GAAY72B,EAClCoI,GACFgvB,GAAUA,EACNA,EAAS,GACXD,EAAUN,EAAWO,EACrBA,EAAS,IACCA,EAASP,EAAWC,IAC9BK,EAAUL,EAAYM,IAEfA,EAAS,GAClBD,EAAUN,EAAWO,EACrBA,EAAS,GACAA,EAASP,EAAWC,IAC7BK,EAAUL,EAAYM,GAEpBt4B,EAAOyI,gBACT2vB,EAAOr+B,MAAMsD,UAAY,eAAei7B,aACxCF,EAAOr+B,MAAMuL,MAAQ,GAAG+yB,QAExBD,EAAOr+B,MAAMsD,UAAY,oBAAoBi7B,UAC7CF,EAAOr+B,MAAMyL,OAAS,GAAG6yB,OAEvB73B,EAAO+3B,OACTv8B,aAAagkB,GACbnjB,EAAG9C,MAAMy+B,QAAU,EACnBxY,EAAUjkB,YAAW,KACnBc,EAAG9C,MAAMy+B,QAAU,EACnB37B,EAAG9C,MAAM6oB,mBAAqB,OAAO,GACpC,KAEP,CAKA,SAASta,IACP,IAAKtI,EAAOQ,OAAO23B,UAAUt7B,KAAOmD,EAAOm4B,UAAUt7B,GAAI,OACzD,MAAM,UACJs7B,GACEn4B,GACE,OACJo4B,EAAM,GACNv7B,GACEs7B,EACJC,EAAOr+B,MAAMuL,MAAQ,GACrB8yB,EAAOr+B,MAAMyL,OAAS,GACtBwyB,EAAYh4B,EAAOyI,eAAiB5L,EAAGuH,YAAcvH,EAAGqS,aACxD+oB,EAAUj4B,EAAOkE,MAAQlE,EAAO2K,YAAc3K,EAAOQ,OAAO2J,oBAAsBnK,EAAOQ,OAAOwK,eAAiBhL,EAAO+J,SAAS,GAAK,IAEpIguB,EADuC,SAArC/3B,EAAOQ,OAAO23B,UAAUJ,SACfC,EAAYC,EAEZtvB,SAAS3I,EAAOQ,OAAO23B,UAAUJ,SAAU,IAEpD/3B,EAAOyI,eACT2vB,EAAOr+B,MAAMuL,MAAQ,GAAGyyB,MAExBK,EAAOr+B,MAAMyL,OAAS,GAAGuyB,MAGzBl7B,EAAG9C,MAAM0+B,QADPR,GAAW,EACM,OAEA,GAEjBj4B,EAAOQ,OAAO23B,UAAUI,OAC1B17B,EAAG9C,MAAMy+B,QAAU,GAEjBx4B,EAAOQ,OAAOwN,eAAiBhO,EAAO0J,SACxCyuB,EAAUt7B,GAAGwF,UAAUrC,EAAO8iB,SAAW,MAAQ,UAAU9iB,EAAOQ,OAAO23B,UAAU1E,UAEvF,CACA,SAASiF,EAAmB10B,GAC1B,OAAOhE,EAAOyI,eAAiBzE,EAAE20B,QAAU30B,EAAE40B,OAC/C,CACA,SAASC,EAAgB70B,GACvB,MAAM,UACJm0B,EACA9uB,aAAcC,GACZtJ,GACE,GACJnD,GACEs7B,EACJ,IAAIW,EACJA,GAAiBJ,EAAmB10B,GAAKvB,EAAc5F,GAAImD,EAAOyI,eAAiB,OAAS,QAA2B,OAAjBqvB,EAAwBA,EAAeC,EAAW,KAAOC,EAAYD,GAC3Ke,EAAgB33B,KAAKC,IAAID,KAAKE,IAAIy3B,EAAe,GAAI,GACjDxvB,IACFwvB,EAAgB,EAAIA,GAEtB,MAAMjG,EAAW7yB,EAAO8P,gBAAkB9P,EAAOsQ,eAAiBtQ,EAAO8P,gBAAkBgpB,EAC3F94B,EAAOmQ,eAAe0iB,GACtB7yB,EAAO4T,aAAaif,GACpB7yB,EAAOuS,oBACPvS,EAAOsR,qBACT,CACA,SAASynB,EAAY/0B,GACnB,MAAMxD,EAASR,EAAOQ,OAAO23B,WACvB,UACJA,EAAS,UACTz3B,GACEV,GACE,GACJnD,EAAE,OACFu7B,GACED,EACJ1e,GAAY,EACZqe,EAAe9zB,EAAEtL,SAAW0/B,EAASM,EAAmB10B,GAAKA,EAAEtL,OAAOiK,wBAAwB3C,EAAOyI,eAAiB,OAAS,OAAS,KACxIzE,EAAEuX,iBACFvX,EAAEyZ,kBACF/c,EAAU3G,MAAM6oB,mBAAqB,QACrCwV,EAAOr+B,MAAM6oB,mBAAqB,QAClCiW,EAAgB70B,GAChBhI,aAAak8B,GACbr7B,EAAG9C,MAAM6oB,mBAAqB,MAC1BpiB,EAAO+3B,OACT17B,EAAG9C,MAAMy+B,QAAU,GAEjBx4B,EAAOQ,OAAOyK,UAChBjL,EAAOU,UAAU3G,MAAM,oBAAsB,QAE/CmO,EAAK,qBAAsBlE,EAC7B,CACA,SAASg1B,EAAWh1B,GAClB,MAAM,UACJm0B,EAAS,UACTz3B,GACEV,GACE,GACJnD,EAAE,OACFu7B,GACED,EACC1e,IACDzV,EAAEuX,eAAgBvX,EAAEuX,iBAAsBvX,EAAEqsB,aAAc,EAC9DwI,EAAgB70B,GAChBtD,EAAU3G,MAAM6oB,mBAAqB,MACrC/lB,EAAG9C,MAAM6oB,mBAAqB,MAC9BwV,EAAOr+B,MAAM6oB,mBAAqB,MAClC1a,EAAK,oBAAqBlE,GAC5B,CACA,SAASi1B,EAAUj1B,GACjB,MAAMxD,EAASR,EAAOQ,OAAO23B,WACvB,UACJA,EAAS,UACTz3B,GACEV,GACE,GACJnD,GACEs7B,EACC1e,IACLA,GAAY,EACRzZ,EAAOQ,OAAOyK,UAChBjL,EAAOU,UAAU3G,MAAM,oBAAsB,GAC7C2G,EAAU3G,MAAM6oB,mBAAqB,IAEnCpiB,EAAO+3B,OACTv8B,aAAak8B,GACbA,EAAcz7B,GAAS,KACrBI,EAAG9C,MAAMy+B,QAAU,EACnB37B,EAAG9C,MAAM6oB,mBAAqB,OAAO,GACpC,MAEL1a,EAAK,mBAAoBlE,GACrBxD,EAAO04B,eACTl5B,EAAOiX,iBAEX,CACA,SAASlQ,EAAOM,GACd,MAAM,UACJ8wB,EAAS,OACT33B,GACER,EACEnD,EAAKs7B,EAAUt7B,GACrB,IAAKA,EAAI,OACT,MAAMnE,EAASmE,EACTs8B,IAAiB34B,EAAOyhB,kBAAmB,CAC/CT,SAAS,EACTH,SAAS,GAEL+X,IAAkB54B,EAAOyhB,kBAAmB,CAChDT,SAAS,EACTH,SAAS,GAEX,IAAK3oB,EAAQ,OACb,MAAM2gC,EAAyB,OAAXhyB,EAAkB,mBAAqB,sBAC3D3O,EAAO2gC,GAAa,cAAeN,EAAaI,GAChDp+B,EAASs+B,GAAa,cAAeL,EAAYG,GACjDp+B,EAASs+B,GAAa,YAAaJ,EAAWG,EAChD,CASA,SAASzX,IACP,MAAM,UACJwW,EACAt7B,GAAIy8B,GACFt5B,EACJA,EAAOQ,OAAO23B,UAAY1N,EAA0BzqB,EAAQA,EAAOyjB,eAAe0U,UAAWn4B,EAAOQ,OAAO23B,UAAW,CACpHt7B,GAAI,qBAEN,MAAM2D,EAASR,EAAOQ,OAAO23B,UAC7B,IAAK33B,EAAO3D,GAAI,OAChB,IAAIA,EAcAu7B,EAbqB,iBAAd53B,EAAO3D,IAAmBmD,EAAOoP,YAC1CvS,EAAKmD,EAAOnD,GAAGmd,WAAWzgB,cAAciH,EAAO3D,KAE5CA,GAA2B,iBAAd2D,EAAO3D,GAEbA,IACVA,EAAK2D,EAAO3D,IAFZA,EAAK9B,EAASvB,iBAAiBgH,EAAO3D,IAIpCmD,EAAOQ,OAAOwhB,mBAA0C,iBAAdxhB,EAAO3D,IAAmBA,EAAG9D,OAAS,GAAqD,IAAhDugC,EAAS9/B,iBAAiBgH,EAAO3D,IAAI9D,SAC5H8D,EAAKy8B,EAAS//B,cAAciH,EAAO3D,KAEjCA,EAAG9D,OAAS,IAAG8D,EAAKA,EAAG,IAC3BA,EAAGwF,UAAUC,IAAItC,EAAOyI,eAAiBjI,EAAOu1B,gBAAkBv1B,EAAOw1B,eAErEn5B,IACFu7B,EAASv7B,EAAGtD,cAAc,IAAIyG,EAAOQ,OAAO23B,UAAUoB,aACjDnB,IACHA,EAASx+B,EAAc,MAAOoG,EAAOQ,OAAO23B,UAAUoB,WACtD18B,EAAGqb,OAAOkgB,KAGd5/B,OAAOqQ,OAAOsvB,EAAW,CACvBt7B,KACAu7B,WAEE53B,EAAOg5B,WA3CNx5B,EAAOQ,OAAO23B,UAAUt7B,IAAOmD,EAAOm4B,UAAUt7B,IACrDkK,EAAO,MA6CHlK,GACFA,EAAGwF,UAAUrC,EAAO0J,QAAU,SAAW,OAAO1J,EAAOQ,OAAO23B,UAAU1E,UAE5E,CACA,SAASvL,IACP,MAAM1nB,EAASR,EAAOQ,OAAO23B,UACvBt7B,EAAKmD,EAAOm4B,UAAUt7B,GACxBA,GACFA,EAAGwF,UAAUoM,OAAOzO,EAAOyI,eAAiBjI,EAAOu1B,gBAAkBv1B,EAAOw1B,eAlDzEh2B,EAAOQ,OAAO23B,UAAUt7B,IAAOmD,EAAOm4B,UAAUt7B,IACrDkK,EAAO,MAoDT,CAnRAof,EAAa,CACXgS,UAAW,CACTt7B,GAAI,KACJk7B,SAAU,OACVQ,MAAM,EACNiB,WAAW,EACXN,eAAe,EACfzF,UAAW,wBACX8F,UAAW,wBACXE,uBAAwB,4BACxB1D,gBAAiB,8BACjBC,cAAe,+BAGnBh2B,EAAOm4B,UAAY,CACjBt7B,GAAI,KACJu7B,OAAQ,MAoQVtxB,EAAG,QAAQ,MAC+B,IAApC9G,EAAOQ,OAAO23B,UAAUzuB,QAE1Bua,KAEAtC,IACArZ,IACAsL,IACF,IAEF9M,EAAG,4CAA4C,KAC7CwB,GAAY,IAEdxB,EAAG,gBAAgB,KACjB8M,GAAc,IAEhB9M,EAAG,iBAAiB,CAAColB,EAAI3rB,MAtOzB,SAAuBA,GAChBP,EAAOQ,OAAO23B,UAAUt7B,IAAOmD,EAAOm4B,UAAUt7B,KACrDmD,EAAOm4B,UAAUC,OAAOr+B,MAAM6oB,mBAAqB,GAAGriB,MACxD,CAoOEsO,CAActO,EAAS,IAEzBuG,EAAG,kBAAkB,KACnB,MAAM,GACJjK,GACEmD,EAAOm4B,UACPt7B,GACFA,EAAGwF,UAAUrC,EAAO0J,QAAU,SAAW,OAAO1J,EAAOQ,OAAO23B,UAAU1E,UAC1E,IAEF3sB,EAAG,WAAW,KACZohB,GAAS,IAEX,MASMjE,EAAU,KACdjkB,EAAOnD,GAAGwF,UAAUC,IAAItC,EAAOQ,OAAO23B,UAAUsB,wBAC5Cz5B,EAAOm4B,UAAUt7B,IACnBmD,EAAOm4B,UAAUt7B,GAAGwF,UAAUC,IAAItC,EAAOQ,OAAO23B,UAAUsB,wBAE5DvR,GAAS,EAEX1vB,OAAOqQ,OAAO7I,EAAOm4B,UAAW,CAC9BjU,OAjBa,KACblkB,EAAOnD,GAAGwF,UAAUoM,OAAOzO,EAAOQ,OAAO23B,UAAUsB,wBAC/Cz5B,EAAOm4B,UAAUt7B,IACnBmD,EAAOm4B,UAAUt7B,GAAGwF,UAAUoM,OAAOzO,EAAOQ,OAAO23B,UAAUsB,wBAE/D9X,IACArZ,IACAsL,GAAc,EAWdqQ,UACA3b,aACAsL,eACA+N,OACAuG,WAEJ,EC1Ve,UAAkB,OAC/BloB,EAAM,aACNmmB,EAAY,GACZrf,IAEAqf,EAAa,CACXuT,SAAU,CACRhwB,SAAS,KAGb,MAAMiwB,EAAe,CAAC98B,EAAIqE,KACxB,MAAM,IACJoI,GACEtJ,EACEyxB,EAAYnoB,GAAO,EAAI,EACvBswB,EAAI/8B,EAAGkS,aAAa,yBAA2B,IACrD,IAAIgF,EAAIlX,EAAGkS,aAAa,0BACpBiF,EAAInX,EAAGkS,aAAa,0BACxB,MAAMwoB,EAAQ16B,EAAGkS,aAAa,8BACxBypB,EAAU37B,EAAGkS,aAAa,gCAC1B8qB,EAASh9B,EAAGkS,aAAa,+BAqB/B,GApBIgF,GAAKC,GACPD,EAAIA,GAAK,IACTC,EAAIA,GAAK,KACAhU,EAAOyI,gBAChBsL,EAAI6lB,EACJ5lB,EAAI,MAEJA,EAAI4lB,EACJ7lB,EAAI,KAGJA,EADEA,EAAE7U,QAAQ,MAAQ,EACbyJ,SAASoL,EAAG,IAAM7S,EAAWuwB,EAAhC,IAEG1d,EAAI7S,EAAWuwB,EAAlB,KAGJzd,EADEA,EAAE9U,QAAQ,MAAQ,EACbyJ,SAASqL,EAAG,IAAM9S,EAArB,IAEG8S,EAAI9S,EAAP,KAEF,MAAOs3B,EAA6C,CACtD,MAAMsB,EAAiBtB,GAAWA,EAAU,IAAM,EAAIr3B,KAAKkL,IAAInL,IAC/DrE,EAAG9C,MAAMy+B,QAAUsB,CACrB,CACA,IAAIz8B,EAAY,eAAe0W,MAAMC,UACrC,GAAI,MAAOujB,EAAyC,CAElDl6B,GAAa,UADQk6B,GAASA,EAAQ,IAAM,EAAIp2B,KAAKkL,IAAInL,MAE3D,CACA,GAAI24B,SAAiBA,EAA2C,CAE9Dx8B,GAAa,WADSw8B,EAAS34B,GAAY,OAE7C,CACArE,EAAG9C,MAAMsD,UAAYA,CAAS,EAE1BuW,EAAe,KACnB,MAAM,GACJ/W,EAAE,OACF+M,EAAM,SACN1I,EAAQ,SACR6I,GACE/J,EACJ+B,EAAgBlF,EAAI,4IAA4IhE,SAAQm7B,IACtK2F,EAAa3F,EAAO9yB,EAAS,IAE/B0I,EAAO/Q,SAAQ,CAACgJ,EAASuL,KACvB,IAAIyC,EAAgBhO,EAAQX,SACxBlB,EAAOQ,OAAO8L,eAAiB,GAAqC,SAAhCtM,EAAOQ,OAAOgL,gBACpDqE,GAAiB1O,KAAK4L,KAAKK,EAAa,GAAKlM,GAAY6I,EAAShR,OAAS,IAE7E8W,EAAgB1O,KAAKE,IAAIF,KAAKC,IAAIyO,GAAgB,GAAI,GACtDhO,EAAQrI,iBAAiB,2KAA2KX,SAAQm7B,IAC1M2F,EAAa3F,EAAOnkB,EAAc,GAClC,GACF,EAYJ/I,EAAG,cAAc,KACV9G,EAAOQ,OAAOk5B,SAAShwB,UAC5B1J,EAAOQ,OAAO0N,qBAAsB,EACpClO,EAAOyjB,eAAevV,qBAAsB,EAAI,IAElDpH,EAAG,QAAQ,KACJ9G,EAAOQ,OAAOk5B,SAAShwB,SAC5BkK,GAAc,IAEhB9M,EAAG,gBAAgB,KACZ9G,EAAOQ,OAAOk5B,SAAShwB,SAC5BkK,GAAc,IAEhB9M,EAAG,iBAAiB,CAACizB,EAASx5B,KACvBP,EAAOQ,OAAOk5B,SAAShwB,SAxBR,EAACnJ,EAAWP,EAAOQ,OAAOC,SAC9C,MAAM,GACJ5D,GACEmD,EACJnD,EAAGrD,iBAAiB,4IAA4IX,SAAQmhC,IACtK,IAAIC,EAAmBtxB,SAASqxB,EAAWjrB,aAAa,iCAAkC,KAAOxO,EAChF,IAAbA,IAAgB05B,EAAmB,GACvCD,EAAWjgC,MAAM6oB,mBAAqB,GAAGqX,KAAoB,GAC7D,EAiBFprB,CAActO,EAAS,GAE3B,ECvGe,UAAc,OAC3BP,EAAM,aACNmmB,EAAY,GACZrf,EAAE,KACFoB,IAEA,MAAM1L,EAASF,IACf6pB,EAAa,CACX9I,KAAM,CACJ3T,SAAS,EACTwwB,SAAU,EACVtV,SAAU,EACV6P,QAAQ,EACR0F,eAAgB,wBAChBC,iBAAkB,yBAGtBp6B,EAAOqd,KAAO,CACZ3T,SAAS,GAEX,IAEI2wB,EACAC,EAHAC,EAAe,EACfC,GAAY,EAGhB,MAAMvhB,EAAU,GACVwhB,EAAU,CACd54B,aAASrC,EACTk7B,gBAAYl7B,EACZm7B,iBAAan7B,EACbshB,aAASthB,EACTo7B,iBAAap7B,EACb06B,SAAU,GAENW,EAAQ,CACZphB,eAAWja,EACXka,aAASla,EACTob,cAAUpb,EACVsb,cAAUtb,EACVs7B,UAAMt7B,EACNu7B,UAAMv7B,EACNw7B,UAAMx7B,EACNy7B,UAAMz7B,EACN8F,WAAO9F,EACPgG,YAAQhG,EACRwb,YAAQxb,EACRyb,YAAQzb,EACR07B,aAAc,CAAC,EACfC,eAAgB,CAAC,GAEb3U,EAAW,CACfzS,OAAGvU,EACHwU,OAAGxU,EACH47B,mBAAe57B,EACf67B,mBAAe77B,EACf87B,cAAU97B,GAEZ,IAAI+3B,EAAQ,EAcZ,SAASgE,IACP,GAAItiB,EAAQlgB,OAAS,EAAG,OAAO,EAC/B,MAAMyiC,EAAKviB,EAAQ,GAAG4B,MAChB4gB,EAAKxiB,EAAQ,GAAG8B,MAChB2gB,EAAKziB,EAAQ,GAAG4B,MAChB8gB,EAAK1iB,EAAQ,GAAG8B,MAEtB,OADiB5Z,KAAK+b,MAAMwe,EAAKF,IAAO,GAAKG,EAAKF,IAAO,EAE3D,CAYA,SAASG,EAAiB53B,GACxB,MAAMqT,EAHCrX,EAAOoP,UAAY,eAAiB,IAAIpP,EAAOQ,OAAOqJ,aAI7D,QAAI7F,EAAEtL,OAAOwJ,QAAQmV,IACjBrX,EAAO4J,OAAO3K,QAAO4C,GAAWA,EAAQ0M,SAASvK,EAAEtL,UAASK,OAAS,CAE3E,CASA,SAAS8iC,EAAe73B,GAItB,GAHsB,UAAlBA,EAAEmV,aACJF,EAAQjR,OAAO,EAAGiR,EAAQlgB,SAEvB6iC,EAAiB53B,GAAI,OAC1B,MAAMxD,EAASR,EAAOQ,OAAO6c,KAI7B,GAHAgd,GAAqB,EACrBC,GAAmB,EACnBrhB,EAAQpV,KAAKG,KACTiV,EAAQlgB,OAAS,GAArB,CAKA,GAFAshC,GAAqB,EACrBI,EAAQqB,WAAaP,KAChBd,EAAQ54B,QAAS,CACpB44B,EAAQ54B,QAAUmC,EAAEtL,OAAO2a,QAAQ,IAAIrT,EAAOQ,OAAOqJ,4BAChD4wB,EAAQ54B,UAAS44B,EAAQ54B,QAAU7B,EAAO4J,OAAO5J,EAAOiP,cAC7D,IAAI6R,EAAU2Z,EAAQ54B,QAAQtI,cAAc,IAAIiH,EAAO25B,kBAUvD,GATIrZ,IACFA,EAAUA,EAAQtnB,iBAAiB,kDAAkD,IAEvFihC,EAAQ3Z,QAAUA,EAEhB2Z,EAAQG,YADN9Z,EACoBrd,EAAeg3B,EAAQ3Z,QAAS,IAAItgB,EAAO25B,kBAAkB,QAE7D36B,GAEnBi7B,EAAQG,YAEX,YADAH,EAAQ3Z,aAAUthB,GAGpBi7B,EAAQP,SAAWO,EAAQG,YAAY7rB,aAAa,qBAAuBvO,EAAO05B,QACpF,CACA,GAAIO,EAAQ3Z,QAAS,CACnB,MAAOib,EAASC,GA3DpB,WACE,GAAI/iB,EAAQlgB,OAAS,EAAG,MAAO,CAC7Bgb,EAAG,KACHC,EAAG,MAEL,MAAMtR,EAAM+3B,EAAQ3Z,QAAQne,wBAC5B,MAAO,EAAEsW,EAAQ,GAAG4B,OAAS5B,EAAQ,GAAG4B,MAAQ5B,EAAQ,GAAG4B,OAAS,EAAInY,EAAIqR,GAAKwmB,GAAethB,EAAQ,GAAG8B,OAAS9B,EAAQ,GAAG8B,MAAQ9B,EAAQ,GAAG8B,OAAS,EAAIrY,EAAIsR,GAAKumB,EAC1K,CAoD+B0B,GAC3BxB,EAAQ3Z,QAAQ/mB,MAAMmiC,gBAAkB,GAAGH,OAAaC,MACxDvB,EAAQ3Z,QAAQ/mB,MAAM6oB,mBAAqB,KAC7C,CACA4X,GAAY,CA3BZ,CA4BF,CACA,SAAS2B,EAAgBn4B,GACvB,IAAK43B,EAAiB53B,GAAI,OAC1B,MAAMxD,EAASR,EAAOQ,OAAO6c,KACvBA,EAAOrd,EAAOqd,KACdf,EAAerD,EAAQsD,WAAUC,GAAYA,EAASC,YAAczY,EAAEyY,YACxEH,GAAgB,IAAGrD,EAAQqD,GAAgBtY,GAC3CiV,EAAQlgB,OAAS,IAGrBuhC,GAAmB,EACnBG,EAAQ2B,UAAYb,IACfd,EAAQ3Z,UAGbzD,EAAKka,MAAQkD,EAAQ2B,UAAY3B,EAAQqB,WAAavB,EAClDld,EAAKka,MAAQkD,EAAQP,WACvB7c,EAAKka,MAAQkD,EAAQP,SAAW,GAAK7c,EAAKka,MAAQkD,EAAQP,SAAW,IAAM,IAEzE7c,EAAKka,MAAQ/2B,EAAOokB,WACtBvH,EAAKka,MAAQ/2B,EAAOokB,SAAW,GAAKpkB,EAAOokB,SAAWvH,EAAKka,MAAQ,IAAM,IAE3EkD,EAAQ3Z,QAAQ/mB,MAAMsD,UAAY,4BAA4BggB,EAAKka,UACrE,CACA,SAAS8E,EAAar4B,GACpB,IAAK43B,EAAiB53B,GAAI,OAC1B,GAAsB,UAAlBA,EAAEmV,aAAsC,eAAXnV,EAAE+a,KAAuB,OAC1D,MAAMve,EAASR,EAAOQ,OAAO6c,KACvBA,EAAOrd,EAAOqd,KACdf,EAAerD,EAAQsD,WAAUC,GAAYA,EAASC,YAAczY,EAAEyY,YACxEH,GAAgB,GAAGrD,EAAQjR,OAAOsU,EAAc,GAC/C+d,GAAuBC,IAG5BD,GAAqB,EACrBC,GAAmB,EACdG,EAAQ3Z,UACbzD,EAAKka,MAAQp2B,KAAKC,IAAID,KAAKE,IAAIgc,EAAKka,MAAOkD,EAAQP,UAAW15B,EAAOokB,UACrE6V,EAAQ3Z,QAAQ/mB,MAAM6oB,mBAAqB,GAAG5iB,EAAOQ,OAAOC,UAC5Dg6B,EAAQ3Z,QAAQ/mB,MAAMsD,UAAY,4BAA4BggB,EAAKka,SACnEgD,EAAeld,EAAKka,MACpBiD,GAAY,EACO,IAAfnd,EAAKka,QAAakD,EAAQ54B,aAAUrC,IAC1C,CAUA,SAAS6c,EAAYrY,GACnB,IAAK43B,EAAiB53B,KArGxB,SAAkCA,GAChC,MAAM/B,EAAW,IAAIjC,EAAOQ,OAAO6c,KAAK8c,iBACxC,QAAIn2B,EAAEtL,OAAOwJ,QAAQD,IACjB,IAAIjC,EAAOnD,GAAGrD,iBAAiByI,IAAWhD,QAAOslB,GAAeA,EAAYhW,SAASvK,EAAEtL,UAASK,OAAS,CAE/G,CAgG+BujC,CAAyBt4B,GAAI,OAC1D,MAAMqZ,EAAOrd,EAAOqd,KACpB,IAAKod,EAAQ3Z,QAAS,OAEtB,GADA9gB,EAAO0a,YAAa,GACfmgB,EAAMphB,YAAcghB,EAAQ54B,QAAS,OACrCg5B,EAAMnhB,UACTmhB,EAAMv1B,MAAQm1B,EAAQ3Z,QAAQ1c,YAC9By2B,EAAMr1B,OAASi1B,EAAQ3Z,QAAQ5R,aAC/B2rB,EAAM7f,OAASpe,EAAa69B,EAAQG,YAAa,MAAQ,EACzDC,EAAM5f,OAASre,EAAa69B,EAAQG,YAAa,MAAQ,EACzDH,EAAQC,WAAaD,EAAQ54B,QAAQuC,YACrCq2B,EAAQE,YAAcF,EAAQ54B,QAAQqN,aACtCurB,EAAQG,YAAY7gC,MAAM6oB,mBAAqB,OAGjD,MAAM2Z,EAAc1B,EAAMv1B,MAAQ+X,EAAKka,MACjCiF,EAAe3B,EAAMr1B,OAAS6X,EAAKka,MACzC,KAAIgF,EAAc9B,EAAQC,YAAc8B,EAAe/B,EAAQE,aAA/D,CAOA,GANAE,EAAMC,KAAO35B,KAAKE,IAAIo5B,EAAQC,WAAa,EAAI6B,EAAc,EAAG,GAChE1B,EAAMG,MAAQH,EAAMC,KACpBD,EAAME,KAAO55B,KAAKE,IAAIo5B,EAAQE,YAAc,EAAI6B,EAAe,EAAG,GAClE3B,EAAMI,MAAQJ,EAAME,KACpBF,EAAMM,eAAepnB,EAAIkF,EAAQlgB,OAAS,EAAIkgB,EAAQ,GAAG4B,MAAQ7W,EAAE6W,MACnEggB,EAAMM,eAAennB,EAAIiF,EAAQlgB,OAAS,EAAIkgB,EAAQ,GAAG8B,MAAQ/W,EAAE+W,OAC9D8f,EAAMnhB,UAAY8gB,EAAW,CAChC,GAAIx6B,EAAOyI,iBAAmBtH,KAAKgL,MAAM0uB,EAAMC,QAAU35B,KAAKgL,MAAM0uB,EAAM7f,SAAW6f,EAAMM,eAAepnB,EAAI8mB,EAAMK,aAAannB,GAAK5S,KAAKgL,MAAM0uB,EAAMG,QAAU75B,KAAKgL,MAAM0uB,EAAM7f,SAAW6f,EAAMM,eAAepnB,EAAI8mB,EAAMK,aAAannB,GAEvO,YADA8mB,EAAMphB,WAAY,GAGpB,IAAKzZ,EAAOyI,iBAAmBtH,KAAKgL,MAAM0uB,EAAME,QAAU55B,KAAKgL,MAAM0uB,EAAM5f,SAAW4f,EAAMM,eAAennB,EAAI6mB,EAAMK,aAAalnB,GAAK7S,KAAKgL,MAAM0uB,EAAMI,QAAU95B,KAAKgL,MAAM0uB,EAAM5f,SAAW4f,EAAMM,eAAennB,EAAI6mB,EAAMK,aAAalnB,GAExO,YADA6mB,EAAMphB,WAAY,EAGtB,CACIzV,EAAEsZ,YACJtZ,EAAEuX,iBAEJvX,EAAEyZ,kBACFod,EAAMnhB,SAAU,EAChBmhB,EAAMjgB,SAAWigB,EAAMM,eAAepnB,EAAI8mB,EAAMK,aAAannB,EAAI8mB,EAAM7f,OACvE6f,EAAM/f,SAAW+f,EAAMM,eAAennB,EAAI6mB,EAAMK,aAAalnB,EAAI6mB,EAAM5f,OACnE4f,EAAMjgB,SAAWigB,EAAMC,OACzBD,EAAMjgB,SAAWigB,EAAMC,KAAO,GAAKD,EAAMC,KAAOD,EAAMjgB,SAAW,IAAM,IAErEigB,EAAMjgB,SAAWigB,EAAMG,OACzBH,EAAMjgB,SAAWigB,EAAMG,KAAO,GAAKH,EAAMjgB,SAAWigB,EAAMG,KAAO,IAAM,IAErEH,EAAM/f,SAAW+f,EAAME,OACzBF,EAAM/f,SAAW+f,EAAME,KAAO,GAAKF,EAAME,KAAOF,EAAM/f,SAAW,IAAM,IAErE+f,EAAM/f,SAAW+f,EAAMI,OACzBJ,EAAM/f,SAAW+f,EAAMI,KAAO,GAAKJ,EAAM/f,SAAW+f,EAAMI,KAAO,IAAM,IAIpEzU,EAAS4U,gBAAe5U,EAAS4U,cAAgBP,EAAMM,eAAepnB,GACtEyS,EAAS6U,gBAAe7U,EAAS6U,cAAgBR,EAAMM,eAAennB,GACtEwS,EAAS8U,WAAU9U,EAAS8U,SAAWz/B,KAAKc,OACjD6pB,EAASzS,GAAK8mB,EAAMM,eAAepnB,EAAIyS,EAAS4U,gBAAkBv/B,KAAKc,MAAQ6pB,EAAS8U,UAAY,EACpG9U,EAASxS,GAAK6mB,EAAMM,eAAennB,EAAIwS,EAAS6U,gBAAkBx/B,KAAKc,MAAQ6pB,EAAS8U,UAAY,EAChGn6B,KAAKkL,IAAIwuB,EAAMM,eAAepnB,EAAIyS,EAAS4U,eAAiB,IAAG5U,EAASzS,EAAI,GAC5E5S,KAAKkL,IAAIwuB,EAAMM,eAAennB,EAAIwS,EAAS6U,eAAiB,IAAG7U,EAASxS,EAAI,GAChFwS,EAAS4U,cAAgBP,EAAMM,eAAepnB,EAC9CyS,EAAS6U,cAAgBR,EAAMM,eAAennB,EAC9CwS,EAAS8U,SAAWz/B,KAAKc,MACzB89B,EAAQG,YAAY7gC,MAAMsD,UAAY,eAAew9B,EAAMjgB,eAAeigB,EAAM/f,eAhDE,CAiDpF,CAqCA,SAAS2hB,IACP,MAAMpf,EAAOrd,EAAOqd,KAChBod,EAAQ54B,SAAW7B,EAAOyS,gBAAkBzS,EAAOiP,cACjDwrB,EAAQ3Z,UACV2Z,EAAQ3Z,QAAQ/mB,MAAMsD,UAAY,+BAEhCo9B,EAAQG,cACVH,EAAQG,YAAY7gC,MAAMsD,UAAY,sBAExCggB,EAAKka,MAAQ,EACbgD,EAAe,EACfE,EAAQ54B,aAAUrC,EAClBi7B,EAAQ3Z,aAAUthB,EAClBi7B,EAAQG,iBAAcp7B,EAE1B,CACA,SAASk9B,EAAO14B,GACd,MAAMqZ,EAAOrd,EAAOqd,KACd7c,EAASR,EAAOQ,OAAO6c,KAC7B,IAAKod,EAAQ54B,QAAS,CAChBmC,GAAKA,EAAEtL,SACT+hC,EAAQ54B,QAAUmC,EAAEtL,OAAO2a,QAAQ,IAAIrT,EAAOQ,OAAOqJ,6BAElD4wB,EAAQ54B,UACP7B,EAAOQ,OAAOiJ,SAAWzJ,EAAOQ,OAAOiJ,QAAQC,SAAW1J,EAAOyJ,QACnEgxB,EAAQ54B,QAAUE,EAAgB/B,EAAOmJ,SAAU,IAAInJ,EAAOQ,OAAOiR,oBAAoB,GAEzFgpB,EAAQ54B,QAAU7B,EAAO4J,OAAO5J,EAAOiP,cAG3C,IAAI6R,EAAU2Z,EAAQ54B,QAAQtI,cAAc,IAAIiH,EAAO25B,kBACnDrZ,IACFA,EAAUA,EAAQtnB,iBAAiB,kDAAkD,IAEvFihC,EAAQ3Z,QAAUA,EAEhB2Z,EAAQG,YADN9Z,EACoBrd,EAAeg3B,EAAQ3Z,QAAS,IAAItgB,EAAO25B,kBAAkB,QAE7D36B,CAE1B,CACA,IAAKi7B,EAAQ3Z,UAAY2Z,EAAQG,YAAa,OAM9C,IAAI+B,EACAC,EACAC,EACAC,EACA9f,EACAC,EACA8f,EACAC,EACAC,EACAC,EACAX,EACAC,EACAW,EACAC,EACAC,EACAC,EACA5C,EACAC,EAtBA36B,EAAOQ,OAAOyK,UAChBjL,EAAOU,UAAU3G,MAAM4H,SAAW,SAClC3B,EAAOU,UAAU3G,MAAMwjC,YAAc,QAEvC9C,EAAQ54B,QAAQQ,UAAUC,IAAI,GAAG9B,EAAO45B,yBAmBJ,IAAzBS,EAAMK,aAAannB,GAAqB/P,GACjD24B,EAAS34B,EAAE6W,MACX+hB,EAAS54B,EAAE+W,QAEX4hB,EAAS9B,EAAMK,aAAannB,EAC5B6oB,EAAS/B,EAAMK,aAAalnB,GAE9B,MAAMwpB,EAA8B,iBAANx5B,EAAiBA,EAAI,KAC9B,IAAjBu2B,GAAsBiD,IACxBb,OAASn9B,EACTo9B,OAASp9B,GAEX6d,EAAKka,MAAQiG,GAAkB/C,EAAQG,YAAY7rB,aAAa,qBAAuBvO,EAAO05B,SAC9FK,EAAeiD,GAAkB/C,EAAQG,YAAY7rB,aAAa,qBAAuBvO,EAAO05B,UAC5Fl2B,GAAwB,IAAjBu2B,GAAsBiD,GA8B/BT,EAAa,EACbC,EAAa,IA9BbtC,EAAaD,EAAQ54B,QAAQuC,YAC7Bu2B,EAAcF,EAAQ54B,QAAQqN,aAC9B2tB,EAAUp6B,EAAcg4B,EAAQ54B,SAASsB,KAAO3G,EAAOyG,QACvD65B,EAAUr6B,EAAcg4B,EAAQ54B,SAASqB,IAAM1G,EAAOuG,QACtDia,EAAQ6f,EAAUnC,EAAa,EAAIiC,EACnC1f,EAAQ6f,EAAUnC,EAAc,EAAIiC,EACpCK,EAAaxC,EAAQ3Z,QAAQ1c,YAC7B84B,EAAczC,EAAQ3Z,QAAQ5R,aAC9BqtB,EAAcU,EAAa5f,EAAKka,MAChCiF,EAAeU,EAAc7f,EAAKka,MAClC4F,EAAgBh8B,KAAKE,IAAIq5B,EAAa,EAAI6B,EAAc,EAAG,GAC3Da,EAAgBj8B,KAAKE,IAAIs5B,EAAc,EAAI6B,EAAe,EAAG,GAC7Da,GAAiBF,EACjBG,GAAiBF,EACjBL,EAAa/f,EAAQK,EAAKka,MAC1ByF,EAAa/f,EAAQI,EAAKka,MACtBwF,EAAaI,IACfJ,EAAaI,GAEXJ,EAAaM,IACfN,EAAaM,GAEXL,EAAaI,IACfJ,EAAaI,GAEXJ,EAAaM,IACfN,EAAaM,IAMjB7C,EAAQG,YAAY7gC,MAAM6oB,mBAAqB,QAC/C6X,EAAQG,YAAY7gC,MAAMsD,UAAY,eAAe0/B,QAAiBC,SACtEvC,EAAQ3Z,QAAQ/mB,MAAM6oB,mBAAqB,QAC3C6X,EAAQ3Z,QAAQ/mB,MAAMsD,UAAY,4BAA4BggB,EAAKka,QACrE,CACA,SAASkG,IACP,MAAMpgB,EAAOrd,EAAOqd,KACd7c,EAASR,EAAOQ,OAAO6c,KAC7B,IAAKod,EAAQ54B,QAAS,CAChB7B,EAAOQ,OAAOiJ,SAAWzJ,EAAOQ,OAAOiJ,QAAQC,SAAW1J,EAAOyJ,QACnEgxB,EAAQ54B,QAAUE,EAAgB/B,EAAOmJ,SAAU,IAAInJ,EAAOQ,OAAOiR,oBAAoB,GAEzFgpB,EAAQ54B,QAAU7B,EAAO4J,OAAO5J,EAAOiP,aAEzC,IAAI6R,EAAU2Z,EAAQ54B,QAAQtI,cAAc,IAAIiH,EAAO25B,kBACnDrZ,IACFA,EAAUA,EAAQtnB,iBAAiB,kDAAkD,IAEvFihC,EAAQ3Z,QAAUA,EAEhB2Z,EAAQG,YADN9Z,EACoBrd,EAAeg3B,EAAQ3Z,QAAS,IAAItgB,EAAO25B,kBAAkB,QAE7D36B,CAE1B,CACKi7B,EAAQ3Z,SAAY2Z,EAAQG,cAC7B56B,EAAOQ,OAAOyK,UAChBjL,EAAOU,UAAU3G,MAAM4H,SAAW,GAClC3B,EAAOU,UAAU3G,MAAMwjC,YAAc,IAEvClgB,EAAKka,MAAQ,EACbgD,EAAe,EACfE,EAAQG,YAAY7gC,MAAM6oB,mBAAqB,QAC/C6X,EAAQG,YAAY7gC,MAAMsD,UAAY,qBACtCo9B,EAAQ3Z,QAAQ/mB,MAAM6oB,mBAAqB,QAC3C6X,EAAQ3Z,QAAQ/mB,MAAMsD,UAAY,8BAClCo9B,EAAQ54B,QAAQQ,UAAUoM,OAAO,GAAGjO,EAAO45B,oBAC3CK,EAAQ54B,aAAUrC,EACpB,CAGA,SAASk+B,EAAW15B,GAClB,MAAMqZ,EAAOrd,EAAOqd,KAChBA,EAAKka,OAAwB,IAAfla,EAAKka,MAErBkG,IAGAf,EAAO14B,EAEX,CACA,SAAS25B,IASP,MAAO,CACLvE,kBATsBp5B,EAAOQ,OAAOyhB,kBAAmB,CACvDT,SAAS,EACTH,SAAS,GAQTuc,2BANgC59B,EAAOQ,OAAOyhB,kBAAmB,CACjET,SAAS,EACTH,SAAS,GAMb,CAGA,SAAS6C,IACP,MAAM7G,EAAOrd,EAAOqd,KACpB,GAAIA,EAAK3T,QAAS,OAClB2T,EAAK3T,SAAU,EACf,MAAM,gBACJ0vB,EAAe,0BACfwE,GACED,IAIJ39B,EAAOU,UAAUxH,iBAAiB,cAAe2iC,EAAgBzC,GACjEp5B,EAAOU,UAAUxH,iBAAiB,cAAeijC,EAAiByB,GAClE,CAAC,YAAa,gBAAiB,cAAc/kC,SAAQ0tB,IACnDvmB,EAAOU,UAAUxH,iBAAiBqtB,EAAW8V,EAAcjD,EAAgB,IAI7Ep5B,EAAOU,UAAUxH,iBAAiB,cAAemjB,EAAauhB,EAChE,CACA,SAAS3Z,IACP,MAAM5G,EAAOrd,EAAOqd,KACpB,IAAKA,EAAK3T,QAAS,OACnB2T,EAAK3T,SAAU,EACf,MAAM,gBACJ0vB,EAAe,0BACfwE,GACED,IAGJ39B,EAAOU,UAAUvH,oBAAoB,cAAe0iC,EAAgBzC,GACpEp5B,EAAOU,UAAUvH,oBAAoB,cAAegjC,EAAiByB,GACrE,CAAC,YAAa,gBAAiB,cAAc/kC,SAAQ0tB,IACnDvmB,EAAOU,UAAUvH,oBAAoBotB,EAAW8V,EAAcjD,EAAgB,IAIhFp5B,EAAOU,UAAUvH,oBAAoB,cAAekjB,EAAauhB,EACnE,CA5cAplC,OAAOqlC,eAAe79B,EAAOqd,KAAM,QAAS,CAC1CygB,IAAG,IACMvG,EAETwG,IAAIjZ,GACF,GAAIyS,IAAUzS,EAAO,CACnB,MAAMhE,EAAU2Z,EAAQ3Z,QAClBjf,EAAU44B,EAAQ54B,QACxBqG,EAAK,aAAc4c,EAAOhE,EAASjf,EACrC,CACA01B,EAAQzS,CACV,IAkcFhe,EAAG,QAAQ,KACL9G,EAAOQ,OAAO6c,KAAK3T,SACrBwa,GACF,IAEFpd,EAAG,WAAW,KACZmd,GAAS,IAEXnd,EAAG,cAAc,CAAColB,EAAIloB,KACfhE,EAAOqd,KAAK3T,SApVnB,SAAsB1F,GACpB,MAAMkB,EAASlF,EAAOkF,OACjBu1B,EAAQ3Z,UACT+Z,EAAMphB,YACNvU,EAAOE,SAAWpB,EAAEsZ,YAAYtZ,EAAEuX,iBACtCsf,EAAMphB,WAAY,EAClBohB,EAAMK,aAAannB,EAAI/P,EAAE6W,MACzBggB,EAAMK,aAAalnB,EAAIhQ,EAAE+W,OAC3B,CA6UEhC,CAAa/U,EAAE,IAEjB8C,EAAG,YAAY,CAAColB,EAAIloB,KACbhE,EAAOqd,KAAK3T,SA3QnB,WACE,MAAM2T,EAAOrd,EAAOqd,KACpB,IAAKod,EAAQ3Z,QAAS,OACtB,IAAK+Z,EAAMphB,YAAcohB,EAAMnhB,QAG7B,OAFAmhB,EAAMphB,WAAY,OAClBohB,EAAMnhB,SAAU,GAGlBmhB,EAAMphB,WAAY,EAClBohB,EAAMnhB,SAAU,EAChB,IAAIskB,EAAoB,IACpBC,EAAoB,IACxB,MAAMC,EAAoB1X,EAASzS,EAAIiqB,EACjCG,EAAetD,EAAMjgB,SAAWsjB,EAChCE,EAAoB5X,EAASxS,EAAIiqB,EACjCI,EAAexD,EAAM/f,SAAWsjB,EAGnB,IAAf5X,EAASzS,IAASiqB,EAAoB78B,KAAKkL,KAAK8xB,EAAetD,EAAMjgB,UAAY4L,EAASzS,IAC3E,IAAfyS,EAASxS,IAASiqB,EAAoB98B,KAAKkL,KAAKgyB,EAAexD,EAAM/f,UAAY0L,EAASxS,IAC9F,MAAMsqB,EAAmBn9B,KAAKC,IAAI48B,EAAmBC,GACrDpD,EAAMjgB,SAAWujB,EACjBtD,EAAM/f,SAAWujB,EAGjB,MAAM9B,EAAc1B,EAAMv1B,MAAQ+X,EAAKka,MACjCiF,EAAe3B,EAAMr1B,OAAS6X,EAAKka,MACzCsD,EAAMC,KAAO35B,KAAKE,IAAIo5B,EAAQC,WAAa,EAAI6B,EAAc,EAAG,GAChE1B,EAAMG,MAAQH,EAAMC,KACpBD,EAAME,KAAO55B,KAAKE,IAAIo5B,EAAQE,YAAc,EAAI6B,EAAe,EAAG,GAClE3B,EAAMI,MAAQJ,EAAME,KACpBF,EAAMjgB,SAAWzZ,KAAKC,IAAID,KAAKE,IAAIw5B,EAAMjgB,SAAUigB,EAAMG,MAAOH,EAAMC,MACtED,EAAM/f,SAAW3Z,KAAKC,IAAID,KAAKE,IAAIw5B,EAAM/f,SAAU+f,EAAMI,MAAOJ,EAAME,MACtEN,EAAQG,YAAY7gC,MAAM6oB,mBAAqB,GAAG0b,MAClD7D,EAAQG,YAAY7gC,MAAMsD,UAAY,eAAew9B,EAAMjgB,eAAeigB,EAAM/f,eAClF,CAyOEgE,EAAa,IAEfhY,EAAG,aAAa,CAAColB,EAAIloB,MACdhE,EAAOsU,WAAatU,EAAOQ,OAAO6c,KAAK3T,SAAW1J,EAAOqd,KAAK3T,SAAW1J,EAAOQ,OAAO6c,KAAKoX,QAC/FiJ,EAAW15B,EACb,IAEF8C,EAAG,iBAAiB,KACd9G,EAAOqd,KAAK3T,SAAW1J,EAAOQ,OAAO6c,KAAK3T,SAC5C+yB,GACF,IAEF31B,EAAG,eAAe,KACZ9G,EAAOqd,KAAK3T,SAAW1J,EAAOQ,OAAO6c,KAAK3T,SAAW1J,EAAOQ,OAAOyK,SACrEwxB,GACF,IAEFjkC,OAAOqQ,OAAO7I,EAAOqd,KAAM,CACzB6G,SACAD,UACAsa,GAAI7B,EACJ8B,IAAKf,EACLhJ,OAAQiJ,GAEZ,EC5iBe,UAAoB,OACjC19B,EAAM,aACNmmB,EAAY,GACZrf,IAaA,SAAS23B,EAAa1qB,EAAGC,GACvB,MAAM0qB,EAAe,WACnB,IAAIC,EACAC,EACAC,EACJ,MAAO,CAACC,EAAOpoB,KAGb,IAFAkoB,GAAY,EACZD,EAAWG,EAAM/lC,OACV4lC,EAAWC,EAAW,GAC3BC,EAAQF,EAAWC,GAAY,EAC3BE,EAAMD,IAAUnoB,EAClBkoB,EAAWC,EAEXF,EAAWE,EAGf,OAAOF,CAAQ,CAEnB,CAjBqB,GAwBrB,IAAII,EACAC,EAYJ,OAnBAvjC,KAAKsY,EAAIA,EACTtY,KAAKuY,EAAIA,EACTvY,KAAKsb,UAAYhD,EAAEhb,OAAS,EAM5B0C,KAAKwjC,YAAc,SAAqBvD,GACtC,OAAKA,GAGLsD,EAAKN,EAAajjC,KAAKsY,EAAG2nB,GAC1BqD,EAAKC,EAAK,GAIFtD,EAAKjgC,KAAKsY,EAAEgrB,KAAQtjC,KAAKuY,EAAEgrB,GAAMvjC,KAAKuY,EAAE+qB,KAAQtjC,KAAKsY,EAAEirB,GAAMvjC,KAAKsY,EAAEgrB,IAAOtjC,KAAKuY,EAAE+qB,IAR1E,CASlB,EACOtjC,IACT,CA2EA,SAASyjC,IACFl/B,EAAOuY,WAAWC,SACnBxY,EAAOuY,WAAW4mB,SACpBn/B,EAAOuY,WAAW4mB,YAAS3/B,SACpBQ,EAAOuY,WAAW4mB,OAE7B,CAnIAhZ,EAAa,CACX5N,WAAY,CACVC,aAAShZ,EACT4/B,SAAS,EACTC,GAAI,WAIRr/B,EAAOuY,WAAa,CAClBC,aAAShZ,GA2HXsH,EAAG,cAAc,KACf,GAAsB,oBAAXtK,SAEiC,iBAArCwD,EAAOQ,OAAO+X,WAAWC,SAAwBxY,EAAOQ,OAAO+X,WAAWC,mBAAmB1Z,aAFpG,CAGE,MAAMwgC,EAAiBvkC,SAASxB,cAAcyG,EAAOQ,OAAO+X,WAAWC,SACvE,GAAI8mB,GAAkBA,EAAet/B,OACnCA,EAAOuY,WAAWC,QAAU8mB,EAAet/B,YACtC,GAAIs/B,EAAgB,CACzB,MAAMC,EAAqBv7B,IACzBhE,EAAOuY,WAAWC,QAAUxU,EAAE8tB,OAAO,GACrC9xB,EAAOkhB,SACPoe,EAAenmC,oBAAoB,OAAQomC,EAAmB,EAEhED,EAAepmC,iBAAiB,OAAQqmC,EAC1C,CAEF,MACAv/B,EAAOuY,WAAWC,QAAUxY,EAAOQ,OAAO+X,WAAWC,OAAO,IAE9D1R,EAAG,UAAU,KACXo4B,GAAc,IAEhBp4B,EAAG,UAAU,KACXo4B,GAAc,IAEhBp4B,EAAG,kBAAkB,KACnBo4B,GAAc,IAEhBp4B,EAAG,gBAAgB,CAAColB,EAAI9rB,EAAWyT,KAC5B7T,EAAOuY,WAAWC,SACvBxY,EAAOuY,WAAW3E,aAAaxT,EAAWyT,EAAa,IAEzD/M,EAAG,iBAAiB,CAAColB,EAAI3rB,EAAUsT,KAC5B7T,EAAOuY,WAAWC,SACvBxY,EAAOuY,WAAW1J,cAActO,EAAUsT,EAAa,IAEzDrb,OAAOqQ,OAAO7I,EAAOuY,WAAY,CAC/B3E,aAhHF,SAAsB4rB,EAAI3rB,GACxB,MAAM4rB,EAAaz/B,EAAOuY,WAAWC,QACrC,IAAIpI,EACAsvB,EACJ,MAAM7Z,EAAS7lB,EAAOzH,YACtB,SAASonC,EAAuBjnB,GAK9B,MAAMtY,EAAYJ,EAAOqJ,cAAgBrJ,EAAOI,UAAYJ,EAAOI,UAC/B,UAAhCJ,EAAOQ,OAAO+X,WAAW8mB,MAhBjC,SAAgC3mB,GACzB1Y,EAAOuY,WAAW4mB,SACrBn/B,EAAOuY,WAAW4mB,OAASn/B,EAAOQ,OAAOqM,KAAO,IAAI4xB,EAAaz+B,EAAOgK,WAAY0O,EAAE1O,YAAc,IAAIy0B,EAAaz+B,EAAO+J,SAAU2O,EAAE3O,UAE5I,CAaM61B,CAAuBlnB,GAGvBgnB,GAAuB1/B,EAAOuY,WAAW4mB,OAAOF,aAAa7+B,IAE1Ds/B,GAAuD,cAAhC1/B,EAAOQ,OAAO+X,WAAW8mB,KACnDjvB,GAAcsI,EAAEpI,eAAiBoI,EAAE5I,iBAAmB9P,EAAOsQ,eAAiBtQ,EAAO8P,gBACrF4vB,GAAuBt/B,EAAYJ,EAAO8P,gBAAkBM,EAAasI,EAAE5I,gBAEzE9P,EAAOQ,OAAO+X,WAAW6mB,UAC3BM,EAAsBhnB,EAAEpI,eAAiBovB,GAE3ChnB,EAAEvI,eAAeuvB,GACjBhnB,EAAE9E,aAAa8rB,EAAqB1/B,GACpC0Y,EAAEnG,oBACFmG,EAAEpH,qBACJ,CACA,GAAI/O,MAAMC,QAAQi9B,GAChB,IAAK,IAAI9gC,EAAI,EAAGA,EAAI8gC,EAAW1mC,OAAQ4F,GAAK,EACtC8gC,EAAW9gC,KAAOkV,GAAgB4rB,EAAW9gC,aAAcknB,GAC7D8Z,EAAuBF,EAAW9gC,SAG7B8gC,aAAsB5Z,GAAUhS,IAAiB4rB,GAC1DE,EAAuBF,EAE3B,EA2EE5wB,cA1EF,SAAuBtO,EAAUsT,GAC/B,MAAMgS,EAAS7lB,EAAOzH,YAChBknC,EAAaz/B,EAAOuY,WAAWC,QACrC,IAAI7Z,EACJ,SAASkhC,EAAwBnnB,GAC/BA,EAAE7J,cAActO,EAAUP,GACT,IAAbO,IACFmY,EAAEpD,kBACEoD,EAAElY,OAAO6Q,YACX5U,GAAS,KACPic,EAAEhK,kBAAkB,IAGxB5K,EAAqB4U,EAAEhY,WAAW,KAC3B++B,GACL/mB,EAAEnD,eAAe,IAGvB,CACA,GAAIhT,MAAMC,QAAQi9B,GAChB,IAAK9gC,EAAI,EAAGA,EAAI8gC,EAAW1mC,OAAQ4F,GAAK,EAClC8gC,EAAW9gC,KAAOkV,GAAgB4rB,EAAW9gC,aAAcknB,GAC7Dga,EAAwBJ,EAAW9gC,SAG9B8gC,aAAsB5Z,GAAUhS,IAAiB4rB,GAC1DI,EAAwBJ,EAE5B,GAgDF,ECjLe,UAAc,OAC3Bz/B,EAAM,aACNmmB,EAAY,GACZrf,IAEAqf,EAAa,CACX2Z,KAAM,CACJp2B,SAAS,EACTq2B,kBAAmB,sBACnBC,iBAAkB,iBAClBC,iBAAkB,aAClBC,kBAAmB,0BACnBC,iBAAkB,yBAClBC,wBAAyB,wBACzBC,kBAAmB,+BACnBC,iBAAkB,KAClBC,gCAAiC,KACjCC,2BAA4B,KAC5BC,UAAW,QACXpkC,GAAI,QAGR2D,EAAO8/B,KAAO,CACZY,SAAS,GAEX,IAAIC,EAAa,KACjB,SAASC,EAAOC,GACd,MAAMC,EAAeH,EACO,IAAxBG,EAAa/nC,SACjB+nC,EAAa/V,UAAY,GACzB+V,EAAa/V,UAAY8V,EAC3B,CACA,MAAMlN,EAAoB92B,IACnB0F,MAAMC,QAAQ3F,KAAKA,EAAK,CAACA,GAAIoC,QAAO+E,KAAOA,KACzCnH,GAMT,SAASkkC,EAAgBlkC,IACvBA,EAAK82B,EAAkB92B,IACpBhE,SAAQm7B,IACTA,EAAMh6B,aAAa,WAAY,IAAI,GAEvC,CACA,SAASgnC,EAAmBnkC,IAC1BA,EAAK82B,EAAkB92B,IACpBhE,SAAQm7B,IACTA,EAAMh6B,aAAa,WAAY,KAAK,GAExC,CACA,SAASinC,EAAUpkC,EAAIqkC,IACrBrkC,EAAK82B,EAAkB92B,IACpBhE,SAAQm7B,IACTA,EAAMh6B,aAAa,OAAQknC,EAAK,GAEpC,CACA,SAASC,EAAqBtkC,EAAIukC,IAChCvkC,EAAK82B,EAAkB92B,IACpBhE,SAAQm7B,IACTA,EAAMh6B,aAAa,uBAAwBonC,EAAY,GAE3D,CAOA,SAASC,EAAWxkC,EAAIqM,IACtBrM,EAAK82B,EAAkB92B,IACpBhE,SAAQm7B,IACTA,EAAMh6B,aAAa,aAAckP,EAAM,GAE3C,CAaA,SAASo4B,EAAUzkC,IACjBA,EAAK82B,EAAkB92B,IACpBhE,SAAQm7B,IACTA,EAAMh6B,aAAa,iBAAiB,EAAK,GAE7C,CACA,SAASunC,EAAS1kC,IAChBA,EAAK82B,EAAkB92B,IACpBhE,SAAQm7B,IACTA,EAAMh6B,aAAa,iBAAiB,EAAM,GAE9C,CACA,SAASwnC,EAAkBx9B,GACzB,GAAkB,KAAdA,EAAE+qB,SAAgC,KAAd/qB,EAAE+qB,QAAgB,OAC1C,MAAMvuB,EAASR,EAAOQ,OAAOs/B,KACvBzmB,EAAWrV,EAAEtL,OACfsH,EAAOs0B,YAAct0B,EAAOs0B,WAAWz3B,KAAOwc,IAAarZ,EAAOs0B,WAAWz3B,IAAMmD,EAAOs0B,WAAWz3B,GAAG0R,SAASvK,EAAEtL,WAChHsL,EAAEtL,OAAOwJ,QAAQyoB,EAAkB3qB,EAAOQ,OAAO8zB,WAAWiB,gBAE/Dv1B,EAAO6f,YAAc7f,EAAO6f,WAAWC,QAAUzG,IAAarZ,EAAO6f,WAAWC,SAC5E9f,EAAOwQ,QAAUxQ,EAAOQ,OAAOqM,MACnC7M,EAAO+V,YAEL/V,EAAOwQ,MACTowB,EAAOpgC,EAAO2/B,kBAEdS,EAAOpgC,EAAOy/B,mBAGdjgC,EAAO6f,YAAc7f,EAAO6f,WAAWE,QAAU1G,IAAarZ,EAAO6f,WAAWE,SAC5E/f,EAAOuQ,cAAgBvQ,EAAOQ,OAAOqM,MACzC7M,EAAOwW,YAELxW,EAAOuQ,YACTqwB,EAAOpgC,EAAO0/B,mBAEdU,EAAOpgC,EAAOw/B,mBAGdhgC,EAAOs0B,YAAcjb,EAASnX,QAAQyoB,EAAkB3qB,EAAOQ,OAAO8zB,WAAWiB,eACnFlc,EAASooB,QAEb,CA0BA,SAASC,IACP,OAAO1hC,EAAOs0B,YAAct0B,EAAOs0B,WAAW4B,SAAWl2B,EAAOs0B,WAAW4B,QAAQn9B,MACrF,CACA,SAAS4oC,IACP,OAAOD,KAAmB1hC,EAAOQ,OAAO8zB,WAAWC,SACrD,CAmBA,MAAMqN,EAAY,CAAC/kC,EAAIglC,EAAWhB,KAChCE,EAAgBlkC,GACG,WAAfA,EAAGo3B,UACLgN,EAAUpkC,EAAI,UACdA,EAAG3D,iBAAiB,UAAWsoC,IAEjCH,EAAWxkC,EAAIgkC,GA1HjB,SAAuBhkC,EAAIilC,IACzBjlC,EAAK82B,EAAkB92B,IACpBhE,SAAQm7B,IACTA,EAAMh6B,aAAa,gBAAiB8nC,EAAS,GAEjD,CAsHEC,CAAcllC,EAAIglC,EAAU,EAExBG,EAAoB,KACxBhiC,EAAO8/B,KAAKY,SAAU,CAAI,EAEtBuB,EAAkB,KACtB/lC,uBAAsB,KACpBA,uBAAsB,KACf8D,EAAOoH,YACVpH,EAAO8/B,KAAKY,SAAU,EACxB,GACA,GACF,EAEEwB,EAAcl+B,IAClB,GAAIhE,EAAO8/B,KAAKY,QAAS,OACzB,MAAM7+B,EAAUmC,EAAEtL,OAAO2a,QAAQ,IAAIrT,EAAOQ,OAAOqJ,4BACnD,IAAKhI,IAAY7B,EAAO4J,OAAOtD,SAASzE,GAAU,OAClD,MAAMsgC,EAAWniC,EAAO4J,OAAO1K,QAAQ2C,KAAa7B,EAAOiP,YACrDmzB,EAAYpiC,EAAOQ,OAAO0N,qBAAuBlO,EAAOgP,eAAiBhP,EAAOgP,cAAc1I,SAASzE,GACzGsgC,GAAYC,GACZp+B,EAAEq+B,oBAAsBr+B,EAAEq+B,mBAAmBC,mBAC7CtiC,EAAOyI,eACTzI,EAAOnD,GAAGmG,WAAa,EAEvBhD,EAAOnD,GAAGiG,UAAY,EAExB9C,EAAO+U,QAAQ/U,EAAO4J,OAAO1K,QAAQ2C,GAAU,GAAE,EAE7CyJ,EAAa,KACjB,MAAM9K,EAASR,EAAOQ,OAAOs/B,KACzBt/B,EAAOggC,4BACTW,EAAqBnhC,EAAO4J,OAAQpJ,EAAOggC,4BAEzChgC,EAAOigC,WACTQ,EAAUjhC,EAAO4J,OAAQpJ,EAAOigC,WAElC,MAAM32B,EAAe9J,EAAO4J,OAAO7Q,OAC/ByH,EAAO6/B,mBACTrgC,EAAO4J,OAAO/Q,SAAQ,CAACgJ,EAASkG,KAC9B,MAAMqF,EAAapN,EAAOQ,OAAOqM,KAAOlE,SAAS9G,EAAQkN,aAAa,2BAA4B,IAAMhH,EAExGs5B,EAAWx/B,EADcrB,EAAO6/B,kBAAkB3iC,QAAQ,gBAAiB0P,EAAa,GAAG1P,QAAQ,uBAAwBoM,GACtF,GAEzC,EAEI6X,EAAO,KACX,MAAMnhB,EAASR,EAAOQ,OAAOs/B,KAC7B9/B,EAAOnD,GAAGqb,OAAOyoB,GAGjB,MAAMpc,EAAcvkB,EAAOnD,GACvB2D,EAAO+/B,iCACTY,EAAqB5c,EAAa/jB,EAAO+/B,iCAEvC//B,EAAO8/B,kBACTe,EAAW9c,EAAa/jB,EAAO8/B,kBAIjC,MAAM5/B,EAAYV,EAAOU,UACnBmhC,EAAYrhC,EAAOnE,IAAMqE,EAAUqO,aAAa,OAAS,kBApNjE,SAAyB7K,EAAO,IAE9B,MAAO,IAAIq+B,OAAOr+B,GAAMxG,QAAQ,MADb,IAAMyD,KAAKqhC,MAAM,GAAKrhC,KAAKshC,UAAUzkC,SAAS,KAEnE,CAiNmF0kC,CAAgB,MAC3FC,EAAO3iC,EAAOQ,OAAO4f,UAAYpgB,EAAOQ,OAAO4f,SAAS1W,QAAU,MAAQ,SA7KlF,IAAqBrN,IA8KAwlC,EA7KdlO,EA6KGjzB,GA5KL7H,SAAQm7B,IACTA,EAAMh6B,aAAa,KAAMqC,EAAG,IAGhC,SAAmBQ,EAAI8lC,IACrB9lC,EAAK82B,EAAkB92B,IACpBhE,SAAQm7B,IACTA,EAAMh6B,aAAa,YAAa2oC,EAAK,GAEzC,CAoKEC,CAAUliC,EAAWiiC,GAGrBr3B,IAGA,IAAI,OACFwU,EAAM,OACNC,GACE/f,EAAO6f,WAAa7f,EAAO6f,WAAa,CAAC,EAW7C,GAVAC,EAAS6T,EAAkB7T,GAC3BC,EAAS4T,EAAkB5T,GACvBD,GACFA,EAAOjnB,SAAQgE,GAAM+kC,EAAU/kC,EAAIglC,EAAWrhC,EAAOy/B,oBAEnDlgB,GACFA,EAAOlnB,SAAQgE,GAAM+kC,EAAU/kC,EAAIglC,EAAWrhC,EAAOw/B,oBAInD2B,IAA0B,EACPp/B,MAAMC,QAAQxC,EAAOs0B,WAAWz3B,IAAMmD,EAAOs0B,WAAWz3B,GAAK,CAACmD,EAAOs0B,WAAWz3B,KACxFhE,SAAQgE,IACnBA,EAAG3D,iBAAiB,UAAWsoC,EAAkB,GAErD,CAGAxhC,EAAOnD,GAAG3D,iBAAiB,QAASgpC,GAAa,GACjDliC,EAAOnD,GAAG3D,iBAAiB,cAAe8oC,GAAmB,GAC7DhiC,EAAOnD,GAAG3D,iBAAiB,YAAa+oC,GAAiB,EAAK,EA8BhEn7B,EAAG,cAAc,KACf65B,EAAa/mC,EAAc,OAAQoG,EAAOQ,OAAOs/B,KAAKC,mBACtDY,EAAW3mC,aAAa,YAAa,aACrC2mC,EAAW3mC,aAAa,cAAe,QACnCgG,EAAOoP,WACTuxB,EAAW3mC,aAAa,OAAQ,gBAClC,IAEF8M,EAAG,aAAa,KACT9G,EAAOQ,OAAOs/B,KAAKp2B,SACxBiY,GAAM,IAER7a,EAAG,kEAAkE,KAC9D9G,EAAOQ,OAAOs/B,KAAKp2B,SACxB4B,GAAY,IAEdxE,EAAG,yCAAyC,KACrC9G,EAAOQ,OAAOs/B,KAAKp2B,SArM1B,WACE,GAAI1J,EAAOQ,OAAOqM,MAAQ7M,EAAOQ,OAAO+V,SAAWvW,EAAO6f,WAAY,OACtE,MAAM,OACJC,EAAM,OACNC,GACE/f,EAAO6f,WACPE,IACE/f,EAAOuQ,aACT+wB,EAAUvhB,GACVihB,EAAmBjhB,KAEnBwhB,EAASxhB,GACTghB,EAAgBhhB,KAGhBD,IACE9f,EAAOwQ,OACT8wB,EAAUxhB,GACVkhB,EAAmBlhB,KAEnByhB,EAASzhB,GACTihB,EAAgBjhB,IAGtB,CA8KE+iB,EAAkB,IAEpB/7B,EAAG,oBAAoB,KAChB9G,EAAOQ,OAAOs/B,KAAKp2B,SA1K1B,WACE,MAAMlJ,EAASR,EAAOQ,OAAOs/B,KACxB4B,KACL1hC,EAAOs0B,WAAW4B,QAAQr9B,SAAQy9B,IAC5Bt2B,EAAOQ,OAAO8zB,WAAWC,YAC3BwM,EAAgBzK,GACXt2B,EAAOQ,OAAO8zB,WAAWO,eAC5BoM,EAAU3K,EAAU,UACpB+K,EAAW/K,EAAU91B,EAAO4/B,wBAAwB1iC,QAAQ,gBAAiB4F,EAAagzB,GAAY,MAGtGA,EAASp0B,QAAQ,IAAIlC,EAAOQ,OAAO8zB,WAAWkB,qBAChDc,EAASt8B,aAAa,eAAgB,QAEtCs8B,EAASxd,gBAAgB,eAC3B,GAEJ,CA0JEgqB,EAAkB,IAEpBh8B,EAAG,WAAW,KACP9G,EAAOQ,OAAOs/B,KAAKp2B,SArD1B,WACMi3B,GAAcA,EAAW5nC,OAAS,GAAG4nC,EAAWlyB,SACpD,IAAI,OACFqR,EAAM,OACNC,GACE/f,EAAO6f,WAAa7f,EAAO6f,WAAa,CAAC,EAC7CC,EAAS6T,EAAkB7T,GAC3BC,EAAS4T,EAAkB5T,GACvBD,GACFA,EAAOjnB,SAAQgE,GAAMA,EAAG1D,oBAAoB,UAAWqoC,KAErDzhB,GACFA,EAAOlnB,SAAQgE,GAAMA,EAAG1D,oBAAoB,UAAWqoC,KAIrDG,MACmBp/B,MAAMC,QAAQxC,EAAOs0B,WAAWz3B,IAAMmD,EAAOs0B,WAAWz3B,GAAK,CAACmD,EAAOs0B,WAAWz3B,KACxFhE,SAAQgE,IACnBA,EAAG1D,oBAAoB,UAAWqoC,EAAkB,IAKxDxhC,EAAOnD,GAAG1D,oBAAoB,QAAS+oC,GAAa,GACpDliC,EAAOnD,GAAG1D,oBAAoB,cAAe6oC,GAAmB,GAChEhiC,EAAOnD,GAAG1D,oBAAoB,YAAa8oC,GAAiB,EAC9D,CA2BE/Z,EAAS,GAEb,ECpVe,UAAiB,OAC9BloB,EAAM,aACNmmB,EAAY,GACZrf,IAEAqf,EAAa,CACXhrB,QAAS,CACPuO,SAAS,EACTq5B,KAAM,GACN3nC,cAAc,EACdtC,IAAK,SACLkqC,WAAW,KAGf,IAAI9vB,GAAc,EACd+vB,EAAQ,CAAC,EACb,MAAMC,EAAUC,GACPA,EAAKnlC,WAAWN,QAAQ,OAAQ,KAAKA,QAAQ,WAAY,IAAIA,QAAQ,OAAQ,KAAKA,QAAQ,MAAO,IAAIA,QAAQ,MAAO,IAEvH0lC,EAAgBC,IACpB,MAAM7mC,EAASF,IACf,IAAIlC,EAEFA,EADEipC,EACS,IAAIC,IAAID,GAER7mC,EAAOpC,SAEpB,MAAMmpC,EAAYnpC,EAASM,SAAS6D,MAAM,GAAGhB,MAAM,KAAK0B,QAAOukC,GAAiB,KAATA,IACjEhN,EAAQ+M,EAAUxqC,OAGxB,MAAO,CACLD,IAHUyqC,EAAU/M,EAAQ,GAI5B1R,MAHYye,EAAU/M,EAAQ,GAI/B,EAEGiN,EAAa,CAAC3qC,EAAKiP,KACvB,MAAMvL,EAASF,IACf,IAAK4W,IAAgBlT,EAAOQ,OAAOrF,QAAQuO,QAAS,OACpD,IAAItP,EAEFA,EADE4F,EAAOQ,OAAOshB,IACL,IAAIwhB,IAAItjC,EAAOQ,OAAOshB,KAEtBtlB,EAAOpC,SAEpB,MAAMsR,EAAQ1L,EAAO4J,OAAO7B,GAC5B,IAAI+c,EAAQoe,EAAQx3B,EAAMqD,aAAa,iBACvC,GAAI/O,EAAOQ,OAAOrF,QAAQ4nC,KAAKhqC,OAAS,EAAG,CACzC,IAAIgqC,EAAO/iC,EAAOQ,OAAOrF,QAAQ4nC,KACH,MAA1BA,EAAKA,EAAKhqC,OAAS,KAAYgqC,EAAOA,EAAKxkC,MAAM,EAAGwkC,EAAKhqC,OAAS,IACtE+rB,EAAQ,GAAGie,KAAQjqC,EAAM,GAAGA,KAAS,KAAKgsB,GAC5C,MAAY1qB,EAASM,SAAS4L,SAASxN,KACrCgsB,EAAQ,GAAGhsB,EAAM,GAAGA,KAAS,KAAKgsB,KAEhC9kB,EAAOQ,OAAOrF,QAAQ6nC,YACxBle,GAAS1qB,EAASQ,QAEpB,MAAM8oC,EAAelnC,EAAOrB,QAAQwoC,MAChCD,GAAgBA,EAAa5e,QAAUA,IAGvC9kB,EAAOQ,OAAOrF,QAAQC,aACxBoB,EAAOrB,QAAQC,aAAa,CAC1B0pB,SACC,KAAMA,GAETtoB,EAAOrB,QAAQE,UAAU,CACvBypB,SACC,KAAMA,GACX,EAEI8e,EAAgB,CAACnjC,EAAOqkB,EAAO3Q,KACnC,GAAI2Q,EACF,IAAK,IAAInmB,EAAI,EAAG5F,EAASiH,EAAO4J,OAAO7Q,OAAQ4F,EAAI5F,EAAQ4F,GAAK,EAAG,CACjE,MAAM+M,EAAQ1L,EAAO4J,OAAOjL,GAE5B,GADqBukC,EAAQx3B,EAAMqD,aAAa,mBAC3B+V,EAAO,CAC1B,MAAM/c,EAAQ/H,EAAO+Q,cAAcrF,GACnC1L,EAAO+U,QAAQhN,EAAOtH,EAAO0T,EAC/B,CACF,MAEAnU,EAAO+U,QAAQ,EAAGtU,EAAO0T,EAC3B,EAEI0vB,EAAqB,KACzBZ,EAAQG,EAAcpjC,EAAOQ,OAAOshB,KACpC8hB,EAAc5jC,EAAOQ,OAAOC,MAAOwiC,EAAMne,OAAO,EAAM,EA6BxDhe,EAAG,QAAQ,KACL9G,EAAOQ,OAAOrF,QAAQuO,SA5Bf,MACX,MAAMlN,EAASF,IACf,GAAK0D,EAAOQ,OAAOrF,QAAnB,CACA,IAAKqB,EAAOrB,UAAYqB,EAAOrB,QAAQE,UAGrC,OAFA2E,EAAOQ,OAAOrF,QAAQuO,SAAU,OAChC1J,EAAOQ,OAAOsjC,eAAep6B,SAAU,GAGzCwJ,GAAc,EACd+vB,EAAQG,EAAcpjC,EAAOQ,OAAOshB,KAC/BmhB,EAAMnqC,KAAQmqC,EAAMne,OAMzB8e,EAAc,EAAGX,EAAMne,MAAO9kB,EAAOQ,OAAO2S,oBACvCnT,EAAOQ,OAAOrF,QAAQC,cACzBoB,EAAOtD,iBAAiB,WAAY2qC,IAP/B7jC,EAAOQ,OAAOrF,QAAQC,cACzBoB,EAAOtD,iBAAiB,WAAY2qC,EAVN,CAiBlC,EAUEliB,EACF,IAEF7a,EAAG,WAAW,KACR9G,EAAOQ,OAAOrF,QAAQuO,SAZZ,MACd,MAAMlN,EAASF,IACV0D,EAAOQ,OAAOrF,QAAQC,cACzBoB,EAAOrD,oBAAoB,WAAY0qC,EACzC,EASE3b,EACF,IAEFphB,EAAG,4CAA4C,KACzCoM,GACFuwB,EAAWzjC,EAAOQ,OAAOrF,QAAQrC,IAAKkH,EAAOiP,YAC/C,IAEFnI,EAAG,eAAe,KACZoM,GAAelT,EAAOQ,OAAOyK,SAC/Bw4B,EAAWzjC,EAAOQ,OAAOrF,QAAQrC,IAAKkH,EAAOiP,YAC/C,GAEJ,ECvIe,UAAwB,OACrCjP,EAAM,aACNmmB,EAAY,KACZje,EAAI,GACJpB,IAEA,IAAIoM,GAAc,EAClB,MAAMnY,EAAWF,IACX2B,EAASF,IACf6pB,EAAa,CACX2d,eAAgB,CACdp6B,SAAS,EACTtO,cAAc,EACd2oC,YAAY,KAGhB,MAAMC,EAAe,KACnB97B,EAAK,cACL,MAAM+7B,EAAUlpC,EAASX,SAASC,KAAKqD,QAAQ,IAAK,IAEpD,GAAIumC,IADoBjkC,EAAO4J,OAAO5J,EAAOiP,aAAaF,aAAa,aACtC,CAC/B,MAAM+G,EAAW9V,EAAO+Q,cAAchP,EAAgB/B,EAAOmJ,SAAU,IAAInJ,EAAOQ,OAAOqJ,yBAAyBo6B,gCAAsCA,OAAa,IACrK,QAAwB,IAAbnuB,EAA0B,OACrC9V,EAAO+U,QAAQe,EACjB,GAEIouB,EAAU,KACd,GAAKhxB,GAAgBlT,EAAOQ,OAAOsjC,eAAep6B,QAClD,GAAI1J,EAAOQ,OAAOsjC,eAAe1oC,cAAgBoB,EAAOrB,SAAWqB,EAAOrB,QAAQC,aAChFoB,EAAOrB,QAAQC,aAAa,KAAM,KAAM,IAAI4E,EAAO4J,OAAO5J,EAAOiP,aAAaF,aAAa,gBAAkB,IAC7G7G,EAAK,eACA,CACL,MAAMwD,EAAQ1L,EAAO4J,OAAO5J,EAAOiP,aAC7B5U,EAAOqR,EAAMqD,aAAa,cAAgBrD,EAAMqD,aAAa,gBACnEhU,EAASX,SAASC,KAAOA,GAAQ,GACjC6N,EAAK,UACP,GA0BFpB,EAAG,QAAQ,KACL9G,EAAOQ,OAAOsjC,eAAep6B,SAzBtB,MACX,IAAK1J,EAAOQ,OAAOsjC,eAAep6B,SAAW1J,EAAOQ,OAAOrF,SAAW6E,EAAOQ,OAAOrF,QAAQuO,QAAS,OACrGwJ,GAAc,EACd,MAAM7Y,EAAOU,EAASX,SAASC,KAAKqD,QAAQ,IAAK,IACjD,GAAIrD,EAAM,CACR,MAAMoG,EAAQ,EACd,IAAK,IAAI9B,EAAI,EAAG5F,EAASiH,EAAO4J,OAAO7Q,OAAQ4F,EAAI5F,EAAQ4F,GAAK,EAAG,CACjE,MAAM+M,EAAQ1L,EAAO4J,OAAOjL,GAE5B,IADkB+M,EAAMqD,aAAa,cAAgBrD,EAAMqD,aAAa,mBACtD1U,EAAM,CACtB,MAAM0N,EAAQ/H,EAAO+Q,cAAcrF,GACnC1L,EAAO+U,QAAQhN,EAAOtH,EAAOT,EAAOQ,OAAO2S,oBAAoB,EACjE,CACF,CACF,CACInT,EAAOQ,OAAOsjC,eAAeC,YAC/BvnC,EAAOtD,iBAAiB,aAAc8qC,EACxC,EASEriB,EACF,IAEF7a,EAAG,WAAW,KACR9G,EAAOQ,OAAOsjC,eAAep6B,SAV7B1J,EAAOQ,OAAOsjC,eAAeC,YAC/BvnC,EAAOrD,oBAAoB,aAAc6qC,EAW3C,IAEFl9B,EAAG,4CAA4C,KACzCoM,GACFgxB,GACF,IAEFp9B,EAAG,eAAe,KACZoM,GAAelT,EAAOQ,OAAOyK,SAC/Bi5B,GACF,GAEJ,ECjFe,UAAkB,OAC/BlkC,EAAM,aACNmmB,EAAY,GACZrf,EAAE,KACFoB,EAAI,OACJ1H,IAkBA,IAAIwf,EACAmkB,EAjBJnkC,EAAOogB,SAAW,CAChBC,SAAS,EACTC,QAAQ,EACR8jB,SAAU,GAEZje,EAAa,CACX/F,SAAU,CACR1W,SAAS,EACThN,MAAO,IACP2nC,mBAAmB,EACnBC,sBAAsB,EACtBC,iBAAiB,EACjBC,kBAAkB,EAClBC,mBAAmB,KAKvB,IAEIC,EAEAC,EACAlrB,EACAmrB,EACAC,EACAC,EACAC,EATAC,EAAqBxkC,GAAUA,EAAO4f,SAAW5f,EAAO4f,SAAS1jB,MAAQ,IACzEuoC,EAAuBzkC,GAAUA,EAAO4f,SAAW5f,EAAO4f,SAAS1jB,MAAQ,IAE3EwoC,GAAoB,IAAIrpC,MAAOoF,QAOnC,SAASw7B,EAAgBz4B,GAClBhE,IAAUA,EAAOoH,WAAcpH,EAAOU,WACvCsD,EAAEtL,SAAWsH,EAAOU,YACxBV,EAAOU,UAAUvH,oBAAoB,gBAAiBsjC,GACtDlc,IACF,CACA,MAAM4kB,EAAe,KACnB,GAAInlC,EAAOoH,YAAcpH,EAAOogB,SAASC,QAAS,OAC9CrgB,EAAOogB,SAASE,OAClBqkB,GAAY,EACHA,IACTM,EAAuBP,EACvBC,GAAY,GAEd,MAAMP,EAAWpkC,EAAOogB,SAASE,OAASokB,EAAmBQ,EAAoBD,GAAuB,IAAIppC,MAAOoF,UACnHjB,EAAOogB,SAASgkB,SAAWA,EAC3Bl8B,EAAK,mBAAoBk8B,EAAUA,EAAWY,GAC9Cb,EAAMjoC,uBAAsB,KAC1BipC,GAAc,GACd,EAaEC,EAAMC,IACV,GAAIrlC,EAAOoH,YAAcpH,EAAOogB,SAASC,QAAS,OAClDjkB,qBAAqB+nC,GACrBgB,IACA,IAAIzoC,OAA8B,IAAf2oC,EAA6BrlC,EAAOQ,OAAO4f,SAAS1jB,MAAQ2oC,EAC/EL,EAAqBhlC,EAAOQ,OAAO4f,SAAS1jB,MAC5CuoC,EAAuBjlC,EAAOQ,OAAO4f,SAAS1jB,MAC9C,MAAM4oC,EAlBc,MACpB,IAAIC,EAMJ,GAJEA,EADEvlC,EAAOyJ,SAAWzJ,EAAOQ,OAAOiJ,QAAQC,QAC1B1J,EAAO4J,OAAO3K,QAAO4C,GAAWA,EAAQQ,UAAUkM,SAAS,yBAAwB,GAEnFvO,EAAO4J,OAAO5J,EAAOiP,cAElCs2B,EAAe,OAEpB,OAD0B58B,SAAS48B,EAAcx2B,aAAa,wBAAyB,GAC/D,EASEy2B,IACrB9+B,OAAOkC,MAAM08B,IAAsBA,EAAoB,QAA2B,IAAfD,IACtE3oC,EAAQ4oC,EACRN,EAAqBM,EACrBL,EAAuBK,GAEzBZ,EAAmBhoC,EACnB,MAAM+D,EAAQT,EAAOQ,OAAOC,MACtBglC,EAAU,KACTzlC,IAAUA,EAAOoH,YAClBpH,EAAOQ,OAAO4f,SAASokB,kBACpBxkC,EAAOuQ,aAAevQ,EAAOQ,OAAOqM,MAAQ7M,EAAOQ,OAAO+V,QAC7DvW,EAAOwW,UAAU/V,GAAO,GAAM,GAC9ByH,EAAK,aACKlI,EAAOQ,OAAO4f,SAASmkB,kBACjCvkC,EAAO+U,QAAQ/U,EAAO4J,OAAO7Q,OAAS,EAAG0H,GAAO,GAAM,GACtDyH,EAAK,cAGFlI,EAAOwQ,OAASxQ,EAAOQ,OAAOqM,MAAQ7M,EAAOQ,OAAO+V,QACvDvW,EAAO+V,UAAUtV,GAAO,GAAM,GAC9ByH,EAAK,aACKlI,EAAOQ,OAAO4f,SAASmkB,kBACjCvkC,EAAO+U,QAAQ,EAAGtU,GAAO,GAAM,GAC/ByH,EAAK,aAGLlI,EAAOQ,OAAOyK,UAChBi6B,GAAoB,IAAIrpC,MAAOoF,UAC/B/E,uBAAsB,KACpBkpC,GAAK,KAET,EAcF,OAZI1oC,EAAQ,GACVV,aAAagkB,GACbA,EAAUjkB,YAAW,KACnB0pC,GAAS,GACR/oC,IAEHR,uBAAsB,KACpBupC,GAAS,IAKN/oC,CAAK,EAERgpC,EAAQ,KACZ1lC,EAAOogB,SAASC,SAAU,EAC1B+kB,IACAl9B,EAAK,gBAAgB,EAEjBkrB,EAAO,KACXpzB,EAAOogB,SAASC,SAAU,EAC1BrkB,aAAagkB,GACb5jB,qBAAqB+nC,GACrBj8B,EAAK,eAAe,EAEhBy9B,EAAQ,CAACtxB,EAAUuxB,KACvB,GAAI5lC,EAAOoH,YAAcpH,EAAOogB,SAASC,QAAS,OAClDrkB,aAAagkB,GACR3L,IACH0wB,GAAsB,GAExB,MAAMU,EAAU,KACdv9B,EAAK,iBACDlI,EAAOQ,OAAO4f,SAASikB,kBACzBrkC,EAAOU,UAAUxH,iBAAiB,gBAAiBujC,GAEnDlc,GACF,EAGF,GADAvgB,EAAOogB,SAASE,QAAS,EACrBslB,EAMF,OALId,IACFJ,EAAmB1kC,EAAOQ,OAAO4f,SAAS1jB,OAE5CooC,GAAe,OACfW,IAGF,MAAM/oC,EAAQgoC,GAAoB1kC,EAAOQ,OAAO4f,SAAS1jB,MACzDgoC,EAAmBhoC,IAAS,IAAIb,MAAOoF,UAAYikC,GAC/CllC,EAAOwQ,OAASk0B,EAAmB,IAAM1kC,EAAOQ,OAAOqM,OACvD63B,EAAmB,IAAGA,EAAmB,GAC7Ce,IAAS,EAELllB,EAAS,KACTvgB,EAAOwQ,OAASk0B,EAAmB,IAAM1kC,EAAOQ,OAAOqM,MAAQ7M,EAAOoH,YAAcpH,EAAOogB,SAASC,UACxG6kB,GAAoB,IAAIrpC,MAAOoF,UAC3B8jC,GACFA,GAAsB,EACtBK,EAAIV,IAEJU,IAEFplC,EAAOogB,SAASE,QAAS,EACzBpY,EAAK,kBAAiB,EAElB29B,EAAqB,KACzB,GAAI7lC,EAAOoH,YAAcpH,EAAOogB,SAASC,QAAS,OAClD,MAAMtlB,EAAWF,IACgB,WAA7BE,EAAS+qC,kBACXf,GAAsB,EACtBY,GAAM,IAEyB,YAA7B5qC,EAAS+qC,iBACXvlB,GACF,EAEIwlB,EAAiB/hC,IACC,UAAlBA,EAAEmV,cACN4rB,GAAsB,EACtBY,GAAM,GAAK,EAEPK,EAAiBhiC,IACC,UAAlBA,EAAEmV,aACFnZ,EAAOogB,SAASE,QAClBC,GACF,EAoBFzZ,EAAG,QAAQ,KACL9G,EAAOQ,OAAO4f,SAAS1W,UAlBvB1J,EAAOQ,OAAO4f,SAASqkB,oBACzBzkC,EAAOnD,GAAG3D,iBAAiB,eAAgB6sC,GAC3C/lC,EAAOnD,GAAG3D,iBAAiB,eAAgB8sC,IAQ5BnrC,IACR3B,iBAAiB,mBAAoB2sC,GAU5CX,GAAoB,IAAIrpC,MAAOoF,UAC/BykC,IACF,IAEF5+B,EAAG,WAAW,KAnBZ9G,EAAOnD,GAAG1D,oBAAoB,eAAgB4sC,GAC9C/lC,EAAOnD,GAAG1D,oBAAoB,eAAgB6sC,GAO7BnrC,IACR1B,oBAAoB,mBAAoB0sC,GAa7C7lC,EAAOogB,SAASC,SAClB+S,GACF,IAEFtsB,EAAG,yBAAyB,CAAColB,EAAIzrB,EAAO4T,MAClCrU,EAAOoH,WAAcpH,EAAOogB,SAASC,UACrChM,IAAarU,EAAOQ,OAAO4f,SAASkkB,qBACtCqB,GAAM,GAAM,GAEZvS,IACF,IAEFtsB,EAAG,mBAAmB,MAChB9G,EAAOoH,WAAcpH,EAAOogB,SAASC,UACrCrgB,EAAOQ,OAAO4f,SAASkkB,qBACzBlR,KAGF3Z,GAAY,EACZmrB,GAAgB,EAChBG,GAAsB,EACtBF,EAAoB9oC,YAAW,KAC7BgpC,GAAsB,EACtBH,GAAgB,EAChBe,GAAM,EAAK,GACV,MAAI,IAET7+B,EAAG,YAAY,KACb,IAAI9G,EAAOoH,WAAcpH,EAAOogB,SAASC,SAAY5G,EAArD,CAGA,GAFAzd,aAAa6oC,GACb7oC,aAAagkB,GACThgB,EAAOQ,OAAO4f,SAASkkB,qBAGzB,OAFAM,GAAgB,OAChBnrB,GAAY,GAGVmrB,GAAiB5kC,EAAOQ,OAAOyK,SAASsV,IAC5CqkB,GAAgB,EAChBnrB,GAAY,CAV0D,CAUrD,IAEnB3S,EAAG,eAAe,MACZ9G,EAAOoH,WAAcpH,EAAOogB,SAASC,UACzCykB,GAAe,EAAI,IAErBtsC,OAAOqQ,OAAO7I,EAAOogB,SAAU,CAC7BslB,QACAtS,OACAuS,QACAplB,UAEJ,ECpRe,UAAe,OAC5BvgB,EAAM,aACNmmB,EAAY,GACZrf,IAEAqf,EAAa,CACX8f,OAAQ,CACNjmC,OAAQ,KACRkmC,sBAAsB,EACtBC,iBAAkB,EAClBC,sBAAuB,4BACvBC,qBAAsB,mBAG1B,IAAInzB,GAAc,EACdozB,GAAgB,EAIpB,SAASC,IACP,MAAMC,EAAexmC,EAAOimC,OAAOjmC,OACnC,IAAKwmC,GAAgBA,EAAap/B,UAAW,OAC7C,MAAMoM,EAAegzB,EAAahzB,aAC5BD,EAAeizB,EAAajzB,aAClC,GAAIA,GAAgBA,EAAalR,UAAUkM,SAASvO,EAAOQ,OAAOylC,OAAOG,uBAAwB,OACjG,GAAI,MAAO5yB,EAAuD,OAClE,IAAI4D,EAEFA,EADEovB,EAAahmC,OAAOqM,KACPlE,SAAS69B,EAAajzB,aAAaxE,aAAa,2BAA4B,IAE5EyE,EAEbxT,EAAOQ,OAAOqM,KAChB7M,EAAO6V,YAAYuB,GAEnBpX,EAAO+U,QAAQqC,EAEnB,CACA,SAASuK,IACP,MACEskB,OAAQQ,GACNzmC,EAAOQ,OACX,GAAI0S,EAAa,OAAO,EACxBA,GAAc,EACd,MAAMwzB,EAAc1mC,EAAOzH,YAC3B,GAAIkuC,EAAazmC,kBAAkB0mC,EACjC1mC,EAAOimC,OAAOjmC,OAASymC,EAAazmC,OACpCxH,OAAOqQ,OAAO7I,EAAOimC,OAAOjmC,OAAOyjB,eAAgB,CACjDvV,qBAAqB,EACrBuF,qBAAqB,IAEvBjb,OAAOqQ,OAAO7I,EAAOimC,OAAOjmC,OAAOQ,OAAQ,CACzC0N,qBAAqB,EACrBuF,qBAAqB,IAEvBzT,EAAOimC,OAAOjmC,OAAOkhB,cAChB,GAAI,EAASulB,EAAazmC,QAAS,CACxC,MAAM2mC,EAAqBnuC,OAAOqQ,OAAO,CAAC,EAAG49B,EAAazmC,QAC1DxH,OAAOqQ,OAAO89B,EAAoB,CAChCz4B,qBAAqB,EACrBuF,qBAAqB,IAEvBzT,EAAOimC,OAAOjmC,OAAS,IAAI0mC,EAAYC,GACvCL,GAAgB,CAClB,CAGA,OAFAtmC,EAAOimC,OAAOjmC,OAAOnD,GAAGwF,UAAUC,IAAItC,EAAOQ,OAAOylC,OAAOI,sBAC3DrmC,EAAOimC,OAAOjmC,OAAO8G,GAAG,MAAOy/B,IACxB,CACT,CACA,SAASrlB,EAAOlM,GACd,MAAMwxB,EAAexmC,EAAOimC,OAAOjmC,OACnC,IAAKwmC,GAAgBA,EAAap/B,UAAW,OAC7C,MAAMoE,EAAsD,SAAtCg7B,EAAahmC,OAAOgL,cAA2Bg7B,EAAatwB,uBAAyBswB,EAAahmC,OAAOgL,cAG/H,IAAIo7B,EAAmB,EACvB,MAAMC,EAAmB7mC,EAAOQ,OAAOylC,OAAOG,sBAS9C,GARIpmC,EAAOQ,OAAOgL,cAAgB,IAAMxL,EAAOQ,OAAOwK,iBACpD47B,EAAmB5mC,EAAOQ,OAAOgL,eAE9BxL,EAAOQ,OAAOylC,OAAOC,uBACxBU,EAAmB,GAErBA,EAAmBzlC,KAAKgL,MAAMy6B,GAC9BJ,EAAa58B,OAAO/Q,SAAQgJ,GAAWA,EAAQQ,UAAUoM,OAAOo4B,KAC5DL,EAAahmC,OAAOqM,MAAQ25B,EAAahmC,OAAOiJ,SAAW+8B,EAAahmC,OAAOiJ,QAAQC,QACzF,IAAK,IAAI/K,EAAI,EAAGA,EAAIioC,EAAkBjoC,GAAK,EACzCoD,EAAgBykC,EAAar9B,SAAU,6BAA6BnJ,EAAO0S,UAAY/T,OAAO9F,SAAQgJ,IACpGA,EAAQQ,UAAUC,IAAIukC,EAAiB,SAI3C,IAAK,IAAIloC,EAAI,EAAGA,EAAIioC,EAAkBjoC,GAAK,EACrC6nC,EAAa58B,OAAO5J,EAAO0S,UAAY/T,IACzC6nC,EAAa58B,OAAO5J,EAAO0S,UAAY/T,GAAG0D,UAAUC,IAAIukC,GAI9D,MAAMV,EAAmBnmC,EAAOQ,OAAOylC,OAAOE,iBACxCW,EAAYX,IAAqBK,EAAahmC,OAAOqM,KAC3D,GAAI7M,EAAO0S,YAAc8zB,EAAa9zB,WAAao0B,EAAW,CAC5D,MAAMC,EAAqBP,EAAav3B,YACxC,IAAI+3B,EACAnyB,EACJ,GAAI2xB,EAAahmC,OAAOqM,KAAM,CAC5B,MAAMo6B,EAAiBT,EAAa58B,OAAO3K,QAAO4C,GAAWA,EAAQkN,aAAa,6BAA+B,GAAG/O,EAAO0S,cAAa,GACxIs0B,EAAiBR,EAAa58B,OAAO1K,QAAQ+nC,GAC7CpyB,EAAY7U,EAAOiP,YAAcjP,EAAOyS,cAAgB,OAAS,MACnE,MACEu0B,EAAiBhnC,EAAO0S,UACxBmC,EAAYmyB,EAAiBhnC,EAAOyS,cAAgB,OAAS,OAE3Dq0B,IACFE,GAAgC,SAAdnyB,EAAuBsxB,GAAoB,EAAIA,GAE/DK,EAAa72B,sBAAwB62B,EAAa72B,qBAAqBzQ,QAAQ8nC,GAAkB,IAC/FR,EAAahmC,OAAOwK,eAEpBg8B,EADEA,EAAiBD,EACFC,EAAiB7lC,KAAKgL,MAAMX,EAAgB,GAAK,EAEjDw7B,EAAiB7lC,KAAKgL,MAAMX,EAAgB,GAAK,EAE3Dw7B,EAAiBD,GAAsBP,EAAahmC,OAAO8L,eAGtEk6B,EAAazxB,QAAQiyB,EAAgBhyB,EAAU,OAAIxV,GAEvD,CACF,CAhHAQ,EAAOimC,OAAS,CACdjmC,OAAQ,MAgHV8G,EAAG,cAAc,KACf,MAAM,OACJm/B,GACEjmC,EAAOQ,OACX,GAAKylC,GAAWA,EAAOjmC,OACvB,GAA6B,iBAAlBimC,EAAOjmC,QAAuBimC,EAAOjmC,kBAAkBlB,YAAa,CAC7E,MAAM/D,EAAWF,IACXqsC,EAA0B,KAC9B,MAAMC,EAAyC,iBAAlBlB,EAAOjmC,OAAsBjF,EAASxB,cAAc0sC,EAAOjmC,QAAUimC,EAAOjmC,OACzG,GAAImnC,GAAiBA,EAAcnnC,OACjCimC,EAAOjmC,OAASmnC,EAAcnnC,OAC9B2hB,IACAT,GAAO,QACF,GAAIimB,EAAe,CACxB,MAAMC,EAAiBpjC,IACrBiiC,EAAOjmC,OAASgE,EAAE8tB,OAAO,GACzBqV,EAAchuC,oBAAoB,OAAQiuC,GAC1CzlB,IACAT,GAAO,GACP+kB,EAAOjmC,OAAOkhB,SACdlhB,EAAOkhB,QAAQ,EAEjBimB,EAAcjuC,iBAAiB,OAAQkuC,EACzC,CACA,OAAOD,CAAa,EAEhBE,EAAyB,KAC7B,GAAIrnC,EAAOoH,UAAW,OACA8/B,KAEpBhrC,sBAAsBmrC,EACxB,EAEFnrC,sBAAsBmrC,EACxB,MACE1lB,IACAT,GAAO,EACT,IAEFpa,EAAG,4CAA4C,KAC7Coa,GAAQ,IAEVpa,EAAG,iBAAiB,CAAColB,EAAI3rB,KACvB,MAAMimC,EAAexmC,EAAOimC,OAAOjmC,OAC9BwmC,IAAgBA,EAAap/B,WAClCo/B,EAAa33B,cAActO,EAAS,IAEtCuG,EAAG,iBAAiB,KAClB,MAAM0/B,EAAexmC,EAAOimC,OAAOjmC,OAC9BwmC,IAAgBA,EAAap/B,WAC9Bk/B,GACFE,EAAate,SACf,IAEF1vB,OAAOqQ,OAAO7I,EAAOimC,OAAQ,CAC3BtkB,OACAT,UAEJ,EC5Le,UAAkB,OAC/BlhB,EAAM,aACNmmB,EAAY,KACZje,EAAI,KACJX,IAEA4e,EAAa,CACX/J,SAAU,CACR1S,SAAS,EACT49B,UAAU,EACVC,cAAe,EACfC,gBAAgB,EAChBC,oBAAqB,EACrBC,sBAAuB,EACvB5U,QAAQ,EACR6U,gBAAiB,OA4MrBnvC,OAAOqQ,OAAO7I,EAAQ,CACpBoc,SAAU,CACRrD,aA3MJ,WACE,MAAM3Y,EAAYJ,EAAOpD,eACzBoD,EAAO4T,aAAaxT,GACpBJ,EAAO6O,cAAc,GACrB7O,EAAOgZ,gBAAgB0N,WAAW3tB,OAAS,EAC3CiH,EAAOoc,SAAS0C,WAAW,CACzBM,WAAYpf,EAAOsJ,IAAMtJ,EAAOI,WAAaJ,EAAOI,WAExD,EAoMIic,YAnMJ,WACE,MACErD,gBAAiB7Q,EAAI,QACrBmQ,GACEtY,EAE2B,IAA3BmI,EAAKue,WAAW3tB,QAClBoP,EAAKue,WAAW7iB,KAAK,CACnBgvB,SAAUva,EAAQtY,EAAOyI,eAAiB,SAAW,UACrDpI,KAAM8H,EAAKwT,iBAGfxT,EAAKue,WAAW7iB,KAAK,CACnBgvB,SAAUva,EAAQtY,EAAOyI,eAAiB,WAAa,YACvDpI,KAAM1D,KAEV,EAoLImiB,WAnLJ,UAAoB,WAClBM,IAEA,MAAM,OACJ5e,EAAM,UACNE,EACA2I,aAAcC,EAAG,SACjBS,EACAiP,gBAAiB7Q,GACfnI,EAGEif,EADetiB,IACWwL,EAAKwT,eACrC,GAAIyD,GAAcpf,EAAO8P,eACvB9P,EAAO+U,QAAQ/U,EAAOiP,kBAGxB,GAAImQ,GAAcpf,EAAOsQ,eACnBtQ,EAAO4J,OAAO7Q,OAASgR,EAAShR,OAClCiH,EAAO+U,QAAQhL,EAAShR,OAAS,GAEjCiH,EAAO+U,QAAQ/U,EAAO4J,OAAO7Q,OAAS,OAJ1C,CAQA,GAAIyH,EAAO4b,SAASkrB,SAAU,CAC5B,GAAIn/B,EAAKue,WAAW3tB,OAAS,EAAG,CAC9B,MAAM6uC,EAAgBz/B,EAAKue,WAAWmhB,MAChCC,EAAgB3/B,EAAKue,WAAWmhB,MAChCE,EAAWH,EAAc/U,SAAWiV,EAAcjV,SAClDxyB,EAAOunC,EAAcvnC,KAAOynC,EAAcznC,KAChDL,EAAOwmB,SAAWuhB,EAAW1nC,EAC7BL,EAAOwmB,UAAY,EACfrlB,KAAKkL,IAAIrM,EAAOwmB,UAAYhmB,EAAO4b,SAASurB,kBAC9C3nC,EAAOwmB,SAAW,IAIhBnmB,EAAO,KAAO1D,IAAQirC,EAAcvnC,KAAO,OAC7CL,EAAOwmB,SAAW,EAEtB,MACExmB,EAAOwmB,SAAW,EAEpBxmB,EAAOwmB,UAAYhmB,EAAO4b,SAASsrB,sBACnCv/B,EAAKue,WAAW3tB,OAAS,EACzB,IAAIulC,EAAmB,IAAO99B,EAAO4b,SAASmrB,cAC9C,MAAMS,EAAmBhoC,EAAOwmB,SAAW8X,EAC3C,IAAI2J,EAAcjoC,EAAOI,UAAY4nC,EACjC1+B,IAAK2+B,GAAeA,GACxB,IACIC,EADAC,GAAW,EAEf,MAAMC,EAA2C,GAA5BjnC,KAAKkL,IAAIrM,EAAOwmB,UAAiBhmB,EAAO4b,SAASqrB,oBACtE,IAAIY,EACJ,GAAIJ,EAAcjoC,EAAOsQ,eACnB9P,EAAO4b,SAASorB,gBACdS,EAAcjoC,EAAOsQ,gBAAkB83B,IACzCH,EAAcjoC,EAAOsQ,eAAiB83B,GAExCF,EAAsBloC,EAAOsQ,eAC7B63B,GAAW,EACXhgC,EAAKmW,qBAAsB,GAE3B2pB,EAAcjoC,EAAOsQ,eAEnB9P,EAAOqM,MAAQrM,EAAOwK,iBAAgBq9B,GAAe,QACpD,GAAIJ,EAAcjoC,EAAO8P,eAC1BtP,EAAO4b,SAASorB,gBACdS,EAAcjoC,EAAO8P,eAAiBs4B,IACxCH,EAAcjoC,EAAO8P,eAAiBs4B,GAExCF,EAAsBloC,EAAO8P,eAC7Bq4B,GAAW,EACXhgC,EAAKmW,qBAAsB,GAE3B2pB,EAAcjoC,EAAO8P,eAEnBtP,EAAOqM,MAAQrM,EAAOwK,iBAAgBq9B,GAAe,QACpD,GAAI7nC,EAAO4b,SAAS0W,OAAQ,CACjC,IAAIlhB,EACJ,IAAK,IAAI02B,EAAI,EAAGA,EAAIv+B,EAAShR,OAAQuvC,GAAK,EACxC,GAAIv+B,EAASu+B,IAAML,EAAa,CAC9Br2B,EAAY02B,EACZ,KACF,CAGAL,EADE9mC,KAAKkL,IAAItC,EAAS6H,GAAaq2B,GAAe9mC,KAAKkL,IAAItC,EAAS6H,EAAY,GAAKq2B,IAA0C,SAA1BjoC,EAAO4b,eAC5F7R,EAAS6H,GAET7H,EAAS6H,EAAY,GAErCq2B,GAAeA,CACjB,CAOA,GANII,GACF9gC,EAAK,iBAAiB,KACpBvH,EAAOqW,SAAS,IAII,IAApBrW,EAAOwmB,UAMT,GAJE8X,EADEh1B,EACiBnI,KAAKkL,MAAM47B,EAAcjoC,EAAOI,WAAaJ,EAAOwmB,UAEpDrlB,KAAKkL,KAAK47B,EAAcjoC,EAAOI,WAAaJ,EAAOwmB,UAEpEhmB,EAAO4b,SAAS0W,OAAQ,CAQ1B,MAAMyV,EAAepnC,KAAKkL,KAAK/C,GAAO2+B,EAAcA,GAAejoC,EAAOI,WACpEooC,EAAmBxoC,EAAOiK,gBAAgBjK,EAAOiP,aAErDqvB,EADEiK,EAAeC,EACEhoC,EAAOC,MACjB8nC,EAAe,EAAIC,EACM,IAAfhoC,EAAOC,MAEQ,IAAfD,EAAOC,KAE9B,OACK,GAAID,EAAO4b,SAAS0W,OAEzB,YADA9yB,EAAOiX,iBAGLzW,EAAO4b,SAASorB,gBAAkBW,GACpCnoC,EAAOmQ,eAAe+3B,GACtBloC,EAAO6O,cAAcyvB,GACrBt+B,EAAO4T,aAAaq0B,GACpBjoC,EAAOsV,iBAAgB,EAAMtV,EAAO4b,gBACpC5b,EAAOsU,WAAY,EACnBxQ,EAAqBpD,GAAW,KACzBV,IAAUA,EAAOoH,WAAce,EAAKmW,sBACzCpW,EAAK,kBACLlI,EAAO6O,cAAcrO,EAAOC,OAC5B1E,YAAW,KACTiE,EAAO4T,aAAas0B,GACpBpkC,EAAqBpD,GAAW,KACzBV,IAAUA,EAAOoH,WACtBpH,EAAOuV,eAAe,GACtB,GACD,GAAE,KAEEvV,EAAOwmB,UAChBte,EAAK,8BACLlI,EAAOmQ,eAAe83B,GACtBjoC,EAAO6O,cAAcyvB,GACrBt+B,EAAO4T,aAAaq0B,GACpBjoC,EAAOsV,iBAAgB,EAAMtV,EAAO4b,gBAC/B5b,EAAOsU,YACVtU,EAAOsU,WAAY,EACnBxQ,EAAqBpD,GAAW,KACzBV,IAAUA,EAAOoH,WACtBpH,EAAOuV,eAAe,MAI1BvV,EAAOmQ,eAAe83B,GAExBjoC,EAAOuS,oBACPvS,EAAOsR,qBACT,KAAO,IAAI9Q,EAAO4b,SAAS0W,OAEzB,YADA9yB,EAAOiX,iBAEEzW,EAAO4b,UAChBlU,EAAK,6BACP,GACK1H,EAAO4b,SAASkrB,UAAYroB,GAAYze,EAAOif,gBAClDzf,EAAOmQ,iBACPnQ,EAAOuS,oBACPvS,EAAOsR,sBApJT,CAsJF,IAQF,ECnOe,UAAc,OAC3BtR,EAAM,aACNmmB,IAQA,IAAIsiB,EACAC,EACAC,EARJxiB,EAAa,CACXhb,KAAM,CACJC,KAAM,EACN0Y,KAAM,YAqFV9jB,EAAOmL,KAAO,CACZG,WAhFiBxB,IACjB,MAAM,cACJ0B,GACExL,EAAOQ,QACL,KACJ4K,EAAI,KACJ0Y,GACE9jB,EAAOQ,OAAO2K,KAClBu9B,EAAeD,EAAyBr9B,EACxCu9B,EAAiBxnC,KAAKgL,MAAMrC,EAAesB,GAEzCq9B,EADEtnC,KAAKgL,MAAMrC,EAAesB,KAAUtB,EAAesB,EAC5BtB,EAEA3I,KAAK4L,KAAKjD,EAAesB,GAAQA,EAEtC,SAAlBI,GAAqC,QAATsY,IAC9B2kB,EAAyBtnC,KAAKC,IAAIqnC,EAAwBj9B,EAAgBJ,GAC5E,EAgEAO,YA9DkB,CAAChN,EAAG+M,EAAO5B,EAAcf,KAC3C,MAAM,eACJuD,EAAc,aACd9B,GACExK,EAAOQ,QACL,KACJ4K,EAAI,KACJ0Y,GACE9jB,EAAOQ,OAAO2K,KAElB,IAAIy9B,EACAC,EACAC,EACJ,GAAa,QAAThlB,GAAkBxX,EAAiB,EAAG,CACxC,MAAMy8B,EAAa5nC,KAAKgL,MAAMxN,GAAK2N,EAAiBlB,IAC9C49B,EAAoBrqC,EAAIyM,EAAOkB,EAAiBy8B,EAChDE,EAAgC,IAAfF,EAAmBz8B,EAAiBnL,KAAKE,IAAIF,KAAK4L,MAAMjD,EAAei/B,EAAa39B,EAAOkB,GAAkBlB,GAAOkB,GAC3Iw8B,EAAM3nC,KAAKgL,MAAM68B,EAAoBC,GACrCJ,EAASG,EAAoBF,EAAMG,EAAiBF,EAAaz8B,EACjEs8B,EAAqBC,EAASC,EAAML,EAAyBr9B,EAC7DM,EAAM3R,MAAMmvC,MAAQN,CACtB,KAAoB,WAAT9kB,GACT+kB,EAAS1nC,KAAKgL,MAAMxN,EAAIyM,GACxB09B,EAAMnqC,EAAIkqC,EAASz9B,GACfy9B,EAASF,GAAkBE,IAAWF,GAAkBG,IAAQ19B,EAAO,KACzE09B,GAAO,EACHA,GAAO19B,IACT09B,EAAM,EACND,GAAU,MAIdC,EAAM3nC,KAAKgL,MAAMxN,EAAI+pC,GACrBG,EAASlqC,EAAImqC,EAAMJ,GAErBh9B,EAAM3R,MAAMgP,EAAkB,eAAyB,IAAR+/B,EAAYt+B,GAAgB,GAAGA,MAAmB,EAAE,EA4BnGkC,kBA1BwB,CAACrB,EAAWtB,EAAUhB,KAC9C,MAAM,aACJyB,EAAY,eACZQ,EAAc,aACde,GACE/L,EAAOQ,QACL,KACJ4K,GACEpL,EAAOQ,OAAO2K,KAIlB,GAHAnL,EAAO2K,aAAeU,EAAYb,GAAgBi+B,EAClDzoC,EAAO2K,YAAcxJ,KAAK4L,KAAK/M,EAAO2K,YAAcS,GAAQZ,EAC5DxK,EAAOU,UAAU3G,MAAMgP,EAAkB,UAAY,GAAG/I,EAAO2K,YAAcH,MACzEQ,EAAgB,CAClB,MAAM2B,EAAgB,GACtB,IAAK,IAAIhO,EAAI,EAAGA,EAAIoL,EAAShR,OAAQ4F,GAAK,EAAG,CAC3C,IAAIiO,EAAiB7C,EAASpL,GAC1BoN,IAAca,EAAiBzL,KAAKgL,MAAMS,IAC1C7C,EAASpL,GAAKqB,EAAO2K,YAAcZ,EAAS,IAAI4C,EAAc9I,KAAK+I,EACzE,CACA7C,EAAS/B,OAAO,EAAG+B,EAAShR,QAC5BgR,EAASlG,QAAQ8I,EACnB,GAOJ,EC5Fe,UAAsB,OACnC3M,IAEAxH,OAAOqQ,OAAO7I,EAAQ,CACpB4qB,YAAaA,GAAYzH,KAAKnjB,GAC9BgrB,aAAcA,GAAa7H,KAAKnjB,GAChCkrB,SAAUA,GAAS/H,KAAKnjB,GACxBurB,YAAaA,GAAYpI,KAAKnjB,GAC9B0rB,gBAAiBA,GAAgBvI,KAAKnjB,IAE1C,ECXe,UAAoB,OACjCA,EAAM,aACNmmB,EAAY,GACZrf,IAEAqf,EAAa,CACXgjB,WAAY,CACVC,WAAW,KAoCfzd,GAAW,CACTnf,OAAQ,OACRxM,SACA8G,KACA8M,aArCmB,KACnB,MAAM,OACJhK,GACE5J,EACWA,EAAOQ,OAAO2oC,WAC7B,IAAK,IAAIxqC,EAAI,EAAGA,EAAIiL,EAAO7Q,OAAQ4F,GAAK,EAAG,CACzC,MAAMkD,EAAU7B,EAAO4J,OAAOjL,GAE9B,IAAI0qC,GADWxnC,EAAQ0N,kBAElBvP,EAAOQ,OAAOkT,mBAAkB21B,GAAMrpC,EAAOI,WAClD,IAAIkpC,EAAK,EACJtpC,EAAOyI,iBACV6gC,EAAKD,EACLA,EAAK,GAEP,MAAME,EAAevpC,EAAOQ,OAAO2oC,WAAWC,UAAYjoC,KAAKC,IAAI,EAAID,KAAKkL,IAAIxK,EAAQX,UAAW,GAAK,EAAIC,KAAKE,IAAIF,KAAKC,IAAIS,EAAQX,UAAW,GAAI,GAC/ImY,EAAW+S,GAAa5rB,EAAQqB,GACtCwX,EAAStf,MAAMy+B,QAAU+Q,EACzBlwB,EAAStf,MAAMsD,UAAY,eAAegsC,QAASC,WACrD,GAmBAz6B,cAjBoBtO,IACpB,MAAMksB,EAAoBzsB,EAAO4J,OAAOpM,KAAIqE,GAAWD,EAAoBC,KAC3E4qB,EAAkB5zB,SAAQgE,IACxBA,EAAG9C,MAAM6oB,mBAAqB,GAAGriB,KAAY,IAE/CisB,GAA2B,CACzBxsB,SACAO,WACAksB,oBACAC,WAAW,GACX,EAQFd,gBAAiB,KAAM,CACrBpgB,cAAe,EACfc,eAAgB,EAChB4B,qBAAqB,EACrB1D,aAAc,EACdkJ,kBAAmB1T,EAAOQ,OAAOyK,WAGvC,EC3De,UAAoB,OACjCjL,EAAM,aACNmmB,EAAY,GACZrf,IAEAqf,EAAa,CACXqjB,WAAY,CACVrd,cAAc,EACdsd,QAAQ,EACRC,aAAc,GACdC,YAAa,OAGjB,MAAMC,EAAqB,CAAC/nC,EAASX,EAAUuH,KAC7C,IAAIohC,EAAephC,EAAe5G,EAAQtI,cAAc,6BAA+BsI,EAAQtI,cAAc,4BACzGuwC,EAAcrhC,EAAe5G,EAAQtI,cAAc,8BAAgCsI,EAAQtI,cAAc,+BACxGswC,IACHA,EAAejwC,EAAc,MAAO,wBAAuB6O,EAAe,OAAS,QACnF5G,EAAQqW,OAAO2xB,IAEZC,IACHA,EAAclwC,EAAc,MAAO,wBAAuB6O,EAAe,QAAU,WACnF5G,EAAQqW,OAAO4xB,IAEbD,IAAcA,EAAa9vC,MAAMy+B,QAAUr3B,KAAKC,KAAKF,EAAU,IAC/D4oC,IAAaA,EAAY/vC,MAAMy+B,QAAUr3B,KAAKC,IAAIF,EAAU,GAAE,EA0HpEyqB,GAAW,CACTnf,OAAQ,OACRxM,SACA8G,KACA8M,aApHmB,KACnB,MAAM,GACJ/W,EAAE,UACF6D,EAAS,OACTkJ,EACAtE,MAAOyqB,EACPvqB,OAAQwqB,EACR3mB,aAAcC,EACdpF,KAAMkF,EAAU,QAChB7E,GACEvE,EACEQ,EAASR,EAAOQ,OAAOgpC,WACvB/gC,EAAezI,EAAOyI,eACtBe,EAAYxJ,EAAOyJ,SAAWzJ,EAAOQ,OAAOiJ,QAAQC,QAC1D,IACIqgC,EADAC,EAAgB,EAEhBxpC,EAAOipC,SACLhhC,GACFshC,EAAe/pC,EAAOmJ,SAAS5P,cAAc,uBACxCwwC,IACHA,EAAenwC,EAAc,MAAO,sBACpCoG,EAAOmJ,SAAS+O,OAAO6xB,IAEzBA,EAAahwC,MAAMyL,OAAS,GAAGuqB,QAE/Bga,EAAeltC,EAAGtD,cAAc,uBAC3BwwC,IACHA,EAAenwC,EAAc,MAAO,sBACpCiD,EAAGqb,OAAO6xB,MAIhB,IAAK,IAAIprC,EAAI,EAAGA,EAAIiL,EAAO7Q,OAAQ4F,GAAK,EAAG,CACzC,MAAMkD,EAAU+H,EAAOjL,GACvB,IAAIyO,EAAazO,EACb6K,IACF4D,EAAazE,SAAS9G,EAAQkN,aAAa,2BAA4B,KAEzE,IAAIk7B,EAA0B,GAAb78B,EACbo1B,EAAQrhC,KAAKgL,MAAM89B,EAAa,KAChC3gC,IACF2gC,GAAcA,EACdzH,EAAQrhC,KAAKgL,OAAO89B,EAAa,MAEnC,MAAM/oC,EAAWC,KAAKC,IAAID,KAAKE,IAAIQ,EAAQX,SAAU,IAAK,GAC1D,IAAImoC,EAAK,EACLC,EAAK,EACLY,EAAK,EACL98B,EAAa,GAAM,GACrBi8B,EAAc,GAAR7G,EAAYp5B,EAClB8gC,EAAK,IACK98B,EAAa,GAAK,GAAM,GAClCi8B,EAAK,EACLa,EAAc,GAAR1H,EAAYp5B,IACRgE,EAAa,GAAK,GAAM,GAClCi8B,EAAKjgC,EAAqB,EAARo5B,EAAYp5B,EAC9B8gC,EAAK9gC,IACKgE,EAAa,GAAK,GAAM,IAClCi8B,GAAMjgC,EACN8gC,EAAK,EAAI9gC,EAA0B,EAAbA,EAAiBo5B,GAErCl5B,IACF+/B,GAAMA,GAEH5gC,IACH6gC,EAAKD,EACLA,EAAK,GAEP,MAAMhsC,EAAY,WAAWoL,EAAe,GAAKwhC,iBAA0BxhC,EAAewhC,EAAa,qBAAqBZ,QAASC,QAASY,OAC1IhpC,GAAY,GAAKA,GAAY,IAC/B8oC,EAA6B,GAAb58B,EAA6B,GAAXlM,EAC9BoI,IAAK0gC,EAA8B,IAAb58B,EAA6B,GAAXlM,IAE9CW,EAAQ9H,MAAMsD,UAAYA,EACtBmD,EAAO2rB,cACTyd,EAAmB/nC,EAASX,EAAUuH,EAE1C,CAGA,GAFA/H,EAAU3G,MAAMmiC,gBAAkB,YAAY9yB,EAAa,MAC3D1I,EAAU3G,MAAM,4BAA8B,YAAYqP,EAAa,MACnE5I,EAAOipC,OACT,GAAIhhC,EACFshC,EAAahwC,MAAMsD,UAAY,oBAAoB0yB,EAAc,EAAIvvB,EAAOkpC,oBAAoB3Z,EAAc,2CAA2CvvB,EAAOmpC,mBAC3J,CACL,MAAMQ,EAAchpC,KAAKkL,IAAI29B,GAA4D,GAA3C7oC,KAAKgL,MAAMhL,KAAKkL,IAAI29B,GAAiB,IAC7E55B,EAAa,KAAOjP,KAAKipC,IAAkB,EAAdD,EAAkBhpC,KAAKK,GAAK,KAAO,EAAIL,KAAKI,IAAkB,EAAd4oC,EAAkBhpC,KAAKK,GAAK,KAAO,GAChH6oC,EAAS7pC,EAAOmpC,YAChBW,EAAS9pC,EAAOmpC,YAAcv5B,EAC9Bsd,EAASltB,EAAOkpC,aACtBK,EAAahwC,MAAMsD,UAAY,WAAWgtC,SAAcC,uBAA4Bta,EAAe,EAAItC,SAAcsC,EAAe,EAAIsa,sBAC1I,CAEF,MAAMC,GAAWhmC,EAAQ4B,UAAY5B,EAAQoC,YAAcpC,EAAQ2B,oBAAsBkD,EAAa,EAAI,EAC1G1I,EAAU3G,MAAMsD,UAAY,qBAAqBktC,gBAAsBvqC,EAAOyI,eAAiB,EAAIuhC,iBAA6BhqC,EAAOyI,gBAAkBuhC,EAAgB,QACzKtpC,EAAU3G,MAAM+F,YAAY,4BAA6B,GAAGyqC,MAAY,EAuBxE17B,cArBoBtO,IACpB,MAAM,GACJ1D,EAAE,OACF+M,GACE5J,EAOJ,GANA4J,EAAO/Q,SAAQgJ,IACbA,EAAQ9H,MAAM6oB,mBAAqB,GAAGriB,MACtCsB,EAAQrI,iBAAiB,gHAAgHX,SAAQm7B,IAC/IA,EAAMj6B,MAAM6oB,mBAAqB,GAAGriB,KAAY,GAChD,IAEAP,EAAOQ,OAAOgpC,WAAWC,SAAWzpC,EAAOyI,eAAgB,CAC7D,MAAM3G,EAAWjF,EAAGtD,cAAc,uBAC9BuI,IAAUA,EAAS/H,MAAM6oB,mBAAqB,GAAGriB,MACvD,GAQAurB,gBA9HsB,KAEtB,MAAMrjB,EAAezI,EAAOyI,eAC5BzI,EAAO4J,OAAO/Q,SAAQgJ,IACpB,MAAMX,EAAWC,KAAKC,IAAID,KAAKE,IAAIQ,EAAQX,SAAU,IAAK,GAC1D0oC,EAAmB/nC,EAASX,EAAUuH,EAAa,GACnD,EAyHFsjB,gBAAiB,IAAM/rB,EAAOQ,OAAOgpC,WACrC3d,YAAa,KAAM,EACnBD,gBAAiB,KAAM,CACrBpgB,cAAe,EACfc,eAAgB,EAChB4B,qBAAqB,EACrByQ,gBAAiB,EACjBnU,aAAc,EACdQ,gBAAgB,EAChB0I,kBAAkB,KAGxB,ECnKe,UAAoB,OACjC1T,EAAM,aACNmmB,EAAY,GACZrf,IAEAqf,EAAa,CACXqkB,WAAY,CACVre,cAAc,EACdse,eAAe,KAGnB,MAAMb,EAAqB,CAAC/nC,EAASX,EAAUV,KAC7C,IAAIqpC,EAAe7pC,EAAOyI,eAAiB5G,EAAQtI,cAAc,6BAA+BsI,EAAQtI,cAAc,4BAClHuwC,EAAc9pC,EAAOyI,eAAiB5G,EAAQtI,cAAc,8BAAgCsI,EAAQtI,cAAc,+BACjHswC,IACHA,EAAe9c,GAAavsB,EAAQqB,EAAS7B,EAAOyI,eAAiB,OAAS,QAE3EqhC,IACHA,EAAc/c,GAAavsB,EAAQqB,EAAS7B,EAAOyI,eAAiB,QAAU,WAE5EohC,IAAcA,EAAa9vC,MAAMy+B,QAAUr3B,KAAKC,KAAKF,EAAU,IAC/D4oC,IAAaA,EAAY/vC,MAAMy+B,QAAUr3B,KAAKC,IAAIF,EAAU,GAAE,EA8DpEyqB,GAAW,CACTnf,OAAQ,OACRxM,SACA8G,KACA8M,aArDmB,KACnB,MAAM,OACJhK,EACAP,aAAcC,GACZtJ,EACEQ,EAASR,EAAOQ,OAAOgqC,WAC7B,IAAK,IAAI7rC,EAAI,EAAGA,EAAIiL,EAAO7Q,OAAQ4F,GAAK,EAAG,CACzC,MAAMkD,EAAU+H,EAAOjL,GACvB,IAAIuC,EAAWW,EAAQX,SACnBlB,EAAOQ,OAAOgqC,WAAWC,gBAC3BvpC,EAAWC,KAAKC,IAAID,KAAKE,IAAIQ,EAAQX,SAAU,IAAK,IAEtD,MAAMwsB,EAAS7rB,EAAQ0N,kBAEvB,IAAIm7B,GADY,IAAMxpC,EAElBypC,EAAU,EACVtB,EAAKrpC,EAAOQ,OAAOyK,SAAWyiB,EAAS1tB,EAAOI,WAAastB,EAC3D4b,EAAK,EACJtpC,EAAOyI,eAKDa,IACTohC,GAAWA,IALXpB,EAAKD,EACLA,EAAK,EACLsB,GAAWD,EACXA,EAAU,GAIZ7oC,EAAQ9H,MAAM6wC,QAAUzpC,KAAKkL,IAAIlL,KAAKqhC,MAAMthC,IAAa0I,EAAO7Q,OAC5DyH,EAAO2rB,cACTyd,EAAmB/nC,EAASX,GAE9B,MAAM7D,EAAY,eAAegsC,QAASC,qBAAsBqB,iBAAuBD,QACtEte,GAAa5rB,EAAQqB,GAC7B9H,MAAMsD,UAAYA,CAC7B,GAqBAwR,cAnBoBtO,IACpB,MAAMksB,EAAoBzsB,EAAO4J,OAAOpM,KAAIqE,GAAWD,EAAoBC,KAC3E4qB,EAAkB5zB,SAAQgE,IACxBA,EAAG9C,MAAM6oB,mBAAqB,GAAGriB,MACjC1D,EAAGrD,iBAAiB,gHAAgHX,SAAQiJ,IAC1IA,EAAS/H,MAAM6oB,mBAAqB,GAAGriB,KAAY,GACnD,IAEJisB,GAA2B,CACzBxsB,SACAO,WACAksB,qBACA,EAQFX,gBAlEsB,KAEP9rB,EAAOQ,OAAOgqC,WAC7BxqC,EAAO4J,OAAO/Q,SAAQgJ,IACpB,IAAIX,EAAWW,EAAQX,SACnBlB,EAAOQ,OAAOgqC,WAAWC,gBAC3BvpC,EAAWC,KAAKC,IAAID,KAAKE,IAAIQ,EAAQX,SAAU,IAAK,IAEtD0oC,EAAmB/nC,EAASX,EAAiB,GAC7C,EA0DF6qB,gBAAiB,IAAM/rB,EAAOQ,OAAOgqC,WACrC3e,YAAa,KAAM,EACnBD,gBAAiB,KAAM,CACrBpgB,cAAe,EACfc,eAAgB,EAChB4B,qBAAqB,EACrB1D,aAAc,EACdkJ,kBAAmB1T,EAAOQ,OAAOyK,WAGvC,ECrGe,UAAyB,OACtCjL,EAAM,aACNmmB,EAAY,GACZrf,IAEAqf,EAAa,CACX0kB,gBAAiB,CACfhR,OAAQ,GACRiR,QAAS,EACTC,MAAO,IACPxT,MAAO,EACPyT,SAAU,EACV7e,cAAc,KAuElBR,GAAW,CACTnf,OAAQ,YACRxM,SACA8G,KACA8M,aAxEmB,KACnB,MACEtO,MAAOyqB,EACPvqB,OAAQwqB,EAAY,OACpBpmB,EAAM,gBACNK,GACEjK,EACEQ,EAASR,EAAOQ,OAAOqqC,gBACvBpiC,EAAezI,EAAOyI,eACtBpL,EAAY2C,EAAOI,UACnB6qC,EAASxiC,EAA4BsnB,EAAc,EAA1B1yB,EAA2C2yB,EAAe,EAA3B3yB,EACxDw8B,EAASpxB,EAAejI,EAAOq5B,QAAUr5B,EAAOq5B,OAChDz5B,EAAYI,EAAOuqC,MAEzB,IAAK,IAAIpsC,EAAI,EAAG5F,EAAS6Q,EAAO7Q,OAAQ4F,EAAI5F,EAAQ4F,GAAK,EAAG,CAC1D,MAAMkD,EAAU+H,EAAOjL,GACjB0M,EAAYpB,EAAgBtL,GAE5BusC,GAAgBD,EADFppC,EAAQ0N,kBACiBlE,EAAY,GAAKA,EACxD8/B,EAA8C,mBAApB3qC,EAAOwqC,SAA0BxqC,EAAOwqC,SAASE,GAAgBA,EAAe1qC,EAAOwqC,SACvH,IAAIN,EAAUjiC,EAAeoxB,EAASsR,EAAmB,EACrDR,EAAUliC,EAAe,EAAIoxB,EAASsR,EAEtCC,GAAchrC,EAAYe,KAAKkL,IAAI8+B,GACnCL,EAAUtqC,EAAOsqC,QAEE,iBAAZA,IAAkD,IAA1BA,EAAQ5rC,QAAQ,OACjD4rC,EAAU5sC,WAAWsC,EAAOsqC,SAAW,IAAMz/B,GAE/C,IAAI2xB,EAAav0B,EAAe,EAAIqiC,EAAUK,EAC1CpO,EAAat0B,EAAeqiC,EAAUK,EAAmB,EACzD5T,EAAQ,GAAK,EAAI/2B,EAAO+2B,OAASp2B,KAAKkL,IAAI8+B,GAG1ChqC,KAAKkL,IAAI0wB,GAAc,OAAOA,EAAa,GAC3C57B,KAAKkL,IAAI2wB,GAAc,OAAOA,EAAa,GAC3C77B,KAAKkL,IAAI++B,GAAc,OAAOA,EAAa,GAC3CjqC,KAAKkL,IAAIq+B,GAAW,OAAOA,EAAU,GACrCvpC,KAAKkL,IAAIs+B,GAAW,OAAOA,EAAU,GACrCxpC,KAAKkL,IAAIkrB,GAAS,OAAOA,EAAQ,GACrC,MAAM8T,EAAiB,eAAetO,OAAgBC,OAAgBoO,iBAA0BT,iBAAuBD,eAAqBnT,KAI5I,GAHiBnL,GAAa5rB,EAAQqB,GAC7B9H,MAAMsD,UAAYguC,EAC3BxpC,EAAQ9H,MAAM6wC,OAAmD,EAAzCzpC,KAAKkL,IAAIlL,KAAKqhC,MAAM2I,IACxC3qC,EAAO2rB,aAAc,CAEvB,IAAImf,EAAiB7iC,EAAe5G,EAAQtI,cAAc,6BAA+BsI,EAAQtI,cAAc,4BAC3GgyC,EAAgB9iC,EAAe5G,EAAQtI,cAAc,8BAAgCsI,EAAQtI,cAAc,+BAC1G+xC,IACHA,EAAiBve,GAAavsB,EAAQqB,EAAS4G,EAAe,OAAS,QAEpE8iC,IACHA,EAAgBxe,GAAavsB,EAAQqB,EAAS4G,EAAe,QAAU,WAErE6iC,IAAgBA,EAAevxC,MAAMy+B,QAAU2S,EAAmB,EAAIA,EAAmB,GACzFI,IAAeA,EAAcxxC,MAAMy+B,SAAW2S,EAAmB,GAAKA,EAAmB,EAC/F,CACF,GAgBAt8B,cAdoBtO,IACMP,EAAO4J,OAAOpM,KAAIqE,GAAWD,EAAoBC,KACzDhJ,SAAQgE,IACxBA,EAAG9C,MAAM6oB,mBAAqB,GAAGriB,MACjC1D,EAAGrD,iBAAiB,gHAAgHX,SAAQiJ,IAC1IA,EAAS/H,MAAM6oB,mBAAqB,GAAGriB,KAAY,GACnD,GACF,EAQFsrB,YAAa,KAAM,EACnBD,gBAAiB,KAAM,CACrB1d,qBAAqB,KAG3B,EC7Fe,UAAwB,OACrClO,EAAM,aACNmmB,EAAY,GACZrf,IAEAqf,EAAa,CACXqlB,eAAgB,CACdC,cAAe,EACfC,mBAAmB,EACnBC,mBAAoB,EACpB9f,aAAa,EACbzZ,KAAM,CACJhS,UAAW,CAAC,EAAG,EAAG,GAClBy5B,OAAQ,CAAC,EAAG,EAAG,GACfrB,QAAS,EACTjB,MAAO,GAETxlB,KAAM,CACJ3R,UAAW,CAAC,EAAG,EAAG,GAClBy5B,OAAQ,CAAC,EAAG,EAAG,GACfrB,QAAS,EACTjB,MAAO,MAIb,MAAMqU,EAAoB9mB,GACH,iBAAVA,EAA2BA,EAC/B,GAAGA,MA+FZ6G,GAAW,CACTnf,OAAQ,WACRxM,SACA8G,KACA8M,aAjGmB,KACnB,MAAM,OACJhK,EAAM,UACNlJ,EAAS,gBACTuJ,GACEjK,EACEQ,EAASR,EAAOQ,OAAOgrC,gBAE3BG,mBAAoBv7B,GAClB5P,EACEqrC,EAAmB7rC,EAAOQ,OAAOwK,eACvC,GAAI6gC,EAAkB,CACpB,MAAMC,EAAS7hC,EAAgB,GAAK,EAAIjK,EAAOQ,OAAO2J,oBAAsB,EAC5EzJ,EAAU3G,MAAMsD,UAAY,yBAAyByuC,OACvD,CACA,IAAK,IAAIntC,EAAI,EAAGA,EAAIiL,EAAO7Q,OAAQ4F,GAAK,EAAG,CACzC,MAAMkD,EAAU+H,EAAOjL,GACjBkR,EAAgBhO,EAAQX,SACxBA,EAAWC,KAAKE,IAAIF,KAAKC,IAAIS,EAAQX,UAAWV,EAAOirC,eAAgBjrC,EAAOirC,eACpF,IAAIv7B,EAAmBhP,EAClB2qC,IACH37B,EAAmB/O,KAAKE,IAAIF,KAAKC,IAAIS,EAAQqO,kBAAmB1P,EAAOirC,eAAgBjrC,EAAOirC,gBAEhG,MAAM/d,EAAS7rB,EAAQ0N,kBACjBiG,EAAI,CAACxV,EAAOQ,OAAOyK,SAAWyiB,EAAS1tB,EAAOI,WAAastB,EAAQ,EAAG,GACtEqe,EAAI,CAAC,EAAG,EAAG,GACjB,IAAIC,GAAS,EACRhsC,EAAOyI,iBACV+M,EAAE,GAAKA,EAAE,GACTA,EAAE,GAAK,GAET,IAAIrN,EAAO,CACT/H,UAAW,CAAC,EAAG,EAAG,GAClBy5B,OAAQ,CAAC,EAAG,EAAG,GACftC,MAAO,EACPiB,QAAS,GAEPt3B,EAAW,GACbiH,EAAO3H,EAAOuR,KACdi6B,GAAS,GACA9qC,EAAW,IACpBiH,EAAO3H,EAAO4R,KACd45B,GAAS,GAGXx2B,EAAE3c,SAAQ,CAACisB,EAAO/c,KAChByN,EAAEzN,GAAS,QAAQ+c,UAAc8mB,EAAkBzjC,EAAK/H,UAAU2H,SAAa5G,KAAKkL,IAAInL,EAAWkP,MAAe,IAGpH27B,EAAElzC,SAAQ,CAACisB,EAAO/c,KAChBgkC,EAAEhkC,GAASI,EAAK0xB,OAAO9xB,GAAS5G,KAAKkL,IAAInL,EAAWkP,EAAW,IAEjEvO,EAAQ9H,MAAM6wC,QAAUzpC,KAAKkL,IAAIlL,KAAKqhC,MAAM3yB,IAAkBjG,EAAO7Q,OACrE,MAAMkzC,EAAkBz2B,EAAE7X,KAAK,MACzBuuC,EAAe,WAAWH,EAAE,kBAAkBA,EAAE,kBAAkBA,EAAE,SACpEI,EAAcj8B,EAAmB,EAAI,SAAS,GAAK,EAAI/H,EAAKovB,OAASrnB,EAAmBE,KAAgB,SAAS,GAAK,EAAIjI,EAAKovB,OAASrnB,EAAmBE,KAC3Jg8B,EAAgBl8B,EAAmB,EAAI,GAAK,EAAI/H,EAAKqwB,SAAWtoB,EAAmBE,EAAa,GAAK,EAAIjI,EAAKqwB,SAAWtoB,EAAmBE,EAC5I/S,EAAY,eAAe4uC,MAAoBC,KAAgBC,IAGrE,GAAIH,GAAU7jC,EAAKshC,SAAWuC,EAAQ,CACpC,IAAIlqC,EAAWD,EAAQtI,cAAc,wBAIrC,IAHKuI,GAAYqG,EAAKshC,SACpB3nC,EAAWirB,GAAavsB,EAAQqB,IAE9BC,EAAU,CACZ,MAAMuqC,EAAgB7rC,EAAOkrC,kBAAoBxqC,GAAY,EAAIV,EAAOirC,eAAiBvqC,EACzFY,EAAS/H,MAAMy+B,QAAUr3B,KAAKE,IAAIF,KAAKC,IAAID,KAAKkL,IAAIggC,GAAgB,GAAI,EAC1E,CACF,CACA,MAAMhzB,EAAW+S,GAAa5rB,EAAQqB,GACtCwX,EAAStf,MAAMsD,UAAYA,EAC3Bgc,EAAStf,MAAMy+B,QAAU4T,EACrBjkC,EAAK1N,SACP4e,EAAStf,MAAMmiC,gBAAkB/zB,EAAK1N,OAE1C,GAsBAoU,cApBoBtO,IACpB,MAAMksB,EAAoBzsB,EAAO4J,OAAOpM,KAAIqE,GAAWD,EAAoBC,KAC3E4qB,EAAkB5zB,SAAQgE,IACxBA,EAAG9C,MAAM6oB,mBAAqB,GAAGriB,MACjC1D,EAAGrD,iBAAiB,wBAAwBX,SAAQiJ,IAClDA,EAAS/H,MAAM6oB,mBAAqB,GAAGriB,KAAY,GACnD,IAEJisB,GAA2B,CACzBxsB,SACAO,WACAksB,oBACAC,WAAW,GACX,EAQFb,YAAa,IAAM7rB,EAAOQ,OAAOgrC,eAAe3f,YAChDD,gBAAiB,KAAM,CACrB1d,qBAAqB,EACrBwF,kBAAmB1T,EAAOQ,OAAOyK,WAGvC,ECtIe,UAAqB,OAClCjL,EAAM,aACNmmB,EAAY,GACZrf,IAEAqf,EAAa,CACXmmB,YAAa,CACXngB,cAAc,EACd0N,QAAQ,EACR0S,eAAgB,EAChBC,eAAgB,KAwFpB7gB,GAAW,CACTnf,OAAQ,QACRxM,SACA8G,KACA8M,aAzFmB,KACnB,MAAM,OACJhK,EAAM,YACNqF,GACEjP,EACEQ,EAASR,EAAOQ,OAAO8rC,aACvB,eACJpuB,EAAc,UACdzE,GACEzZ,EAAOgZ,gBACLrF,EAAmB3T,EAAOI,UAChC,IAAK,IAAIzB,EAAI,EAAGA,EAAIiL,EAAO7Q,OAAQ4F,GAAK,EAAG,CACzC,MAAMkD,EAAU+H,EAAOjL,GACjBkR,EAAgBhO,EAAQX,SACxBA,EAAWC,KAAKE,IAAIF,KAAKC,IAAIyO,GAAgB,GAAI,GACvD,IAAI6d,EAAS7rB,EAAQ0N,kBACjBvP,EAAOQ,OAAOwK,iBAAmBhL,EAAOQ,OAAOyK,UACjDjL,EAAOU,UAAU3G,MAAMsD,UAAY,cAAc2C,EAAO8P,qBAEtD9P,EAAOQ,OAAOwK,gBAAkBhL,EAAOQ,OAAOyK,UAChDyiB,GAAU9jB,EAAO,GAAG2F,mBAEtB,IAAIk9B,EAAKzsC,EAAOQ,OAAOyK,SAAWyiB,EAAS1tB,EAAOI,WAAastB,EAC3Dgf,EAAK,EACT,MAAMC,GAAM,IAAMxrC,KAAKkL,IAAInL,GAC3B,IAAIq2B,EAAQ,EACRsC,GAAUr5B,EAAO+rC,eAAiBrrC,EAClC0rC,EAAQpsC,EAAOgsC,eAAsC,IAArBrrC,KAAKkL,IAAInL,GAC7C,MAAMkM,EAAapN,EAAOyJ,SAAWzJ,EAAOQ,OAAOiJ,QAAQC,QAAU1J,EAAOyJ,QAAQgkB,KAAO9uB,EAAIA,EACzFkuC,GAAiBz/B,IAAe6B,GAAe7B,IAAe6B,EAAc,IAAM/N,EAAW,GAAKA,EAAW,IAAMuY,GAAazZ,EAAOQ,OAAOyK,UAAY0I,EAAmBuK,EAC7K4uB,GAAiB1/B,IAAe6B,GAAe7B,IAAe6B,EAAc,IAAM/N,EAAW,GAAKA,GAAY,IAAMuY,GAAazZ,EAAOQ,OAAOyK,UAAY0I,EAAmBuK,EACpL,GAAI2uB,GAAiBC,EAAe,CAClC,MAAMC,GAAe,EAAI5rC,KAAKkL,KAAKlL,KAAKkL,IAAInL,GAAY,IAAO,MAAS,GACxE24B,IAAW,GAAK34B,EAAW6rC,EAC3BxV,IAAU,GAAMwV,EAChBH,GAAS,GAAKG,EACdL,GAAS,GAAKK,EAAc5rC,KAAKkL,IAAInL,GAAhC,GACP,CAUA,GAPEurC,EAFEvrC,EAAW,EAER,QAAQurC,UAAWG,EAAQzrC,KAAKkL,IAAInL,QAChCA,EAAW,EAEf,QAAQurC,WAAYG,EAAQzrC,KAAKkL,IAAInL,QAErC,GAAGurC,OAELzsC,EAAOyI,eAAgB,CAC1B,MAAMoU,EAAQ6vB,EACdA,EAAKD,EACLA,EAAK5vB,CACP,CACA,MAAMsvB,EAAcjrC,EAAW,EAAI,IAAG,GAAK,EAAIq2B,GAASr2B,GAAa,IAAG,GAAK,EAAIq2B,GAASr2B,GACpF7D,EAAY,yBACFovC,MAAOC,MAAOC,yBAClBnsC,EAAOq5B,OAASA,EAAS,wBAC3BsS,aAEV,GAAI3rC,EAAO2rB,aAAc,CAEvB,IAAIrqB,EAAWD,EAAQtI,cAAc,wBAChCuI,IACHA,EAAWirB,GAAavsB,EAAQqB,IAE9BC,IAAUA,EAAS/H,MAAMy+B,QAAUr3B,KAAKE,IAAIF,KAAKC,KAAKD,KAAKkL,IAAInL,GAAY,IAAO,GAAK,GAAI,GACjG,CACAW,EAAQ9H,MAAM6wC,QAAUzpC,KAAKkL,IAAIlL,KAAKqhC,MAAM3yB,IAAkBjG,EAAO7Q,OACpDqzB,GAAa5rB,EAAQqB,GAC7B9H,MAAMsD,UAAYA,CAC7B,GAqBAwR,cAnBoBtO,IACpB,MAAMksB,EAAoBzsB,EAAO4J,OAAOpM,KAAIqE,GAAWD,EAAoBC,KAC3E4qB,EAAkB5zB,SAAQgE,IACxBA,EAAG9C,MAAM6oB,mBAAqB,GAAGriB,MACjC1D,EAAGrD,iBAAiB,wBAAwBX,SAAQiJ,IAClDA,EAAS/H,MAAM6oB,mBAAqB,GAAGriB,KAAY,GACnD,IAEJisB,GAA2B,CACzBxsB,SACAO,WACAksB,qBACA,EAQFZ,YAAa,KAAM,EACnBD,gBAAiB,KAAM,CACrB1d,qBAAqB,EACrBwF,kBAAmB1T,EAAOQ,OAAOyK,WAGvC,GjDudA,E0BliBA,IAAW+a,G,GwBvCPgnB,EAA2B,CAAC,EAGhC,SAASC,EAAoBC,GAE5B,IAAIC,EAAeH,EAAyBE,GAC5C,QAAqB1tC,IAAjB2tC,EACH,OAAOA,EAAaC,QAGrB,IAAI3kB,EAASukB,EAAyBE,GAAY,CAGjDE,QAAS,CAAC,GAOX,OAHAC,EAAoBH,GAAUzkB,EAAQA,EAAO2kB,QAASH,GAG/CxkB,EAAO2kB,OACf,CCrBAH,EAAoBK,EAAI,CAACF,EAASG,KACjC,IAAI,IAAIz0C,KAAOy0C,EACXN,EAAoB7uC,EAAEmvC,EAAYz0C,KAASm0C,EAAoB7uC,EAAEgvC,EAASt0C,IAC5EN,OAAOqlC,eAAeuP,EAASt0C,EAAK,CAAE2G,YAAY,EAAMq+B,IAAKyP,EAAWz0C,IAE1E,ECNDm0C,EAAoB7uC,EAAI,CAAC9F,EAAK+K,IAAU7K,OAAO6F,UAAUmvC,eAAelvC,KAAKhG,EAAK+K,G","sources":["webpack://tailwind_umbraco_theme/./node_modules/ssr-window/ssr-window.esm.js","webpack://tailwind_umbraco_theme/./node_modules/swiper/shared/utils.js","webpack://tailwind_umbraco_theme/./node_modules/swiper/shared/get-support.js","webpack://tailwind_umbraco_theme/./node_modules/swiper/shared/get-device.js","webpack://tailwind_umbraco_theme/./node_modules/swiper/shared/get-browser.js","webpack://tailwind_umbraco_theme/./node_modules/swiper/core/events-emitter.js","webpack://tailwind_umbraco_theme/./node_modules/swiper/core/update/index.js","webpack://tailwind_umbraco_theme/./node_modules/swiper/core/update/updateSize.js","webpack://tailwind_umbraco_theme/./node_modules/swiper/core/update/updateSlides.js","webpack://tailwind_umbraco_theme/./node_modules/swiper/core/update/updateAutoHeight.js","webpack://tailwind_umbraco_theme/./node_modules/swiper/core/update/updateSlidesOffset.js","webpack://tailwind_umbraco_theme/./node_modules/swiper/core/update/updateSlidesProgress.js","webpack://tailwind_umbraco_theme/./node_modules/swiper/core/update/updateProgress.js","webpack://tailwind_umbraco_theme/./node_modules/swiper/core/update/updateSlidesClasses.js","webpack://tailwind_umbraco_theme/./node_modules/swiper/core/update/updateActiveIndex.js","webpack://tailwind_umbraco_theme/./node_modules/swiper/core/update/updateClickedSlide.js","webpack://tailwind_umbraco_theme/./node_modules/swiper/core/translate/index.js","webpack://tailwind_umbraco_theme/./node_modules/swiper/core/translate/getTranslate.js","webpack://tailwind_umbraco_theme/./node_modules/swiper/core/translate/setTranslate.js","webpack://tailwind_umbraco_theme/./node_modules/swiper/core/translate/minTranslate.js","webpack://tailwind_umbraco_theme/./node_modules/swiper/core/translate/maxTranslate.js","webpack://tailwind_umbraco_theme/./node_modules/swiper/core/translate/translateTo.js","webpack://tailwind_umbraco_theme/./node_modules/swiper/core/transition/transitionEmit.js","webpack://tailwind_umbraco_theme/./node_modules/swiper/core/slide/index.js","webpack://tailwind_umbraco_theme/./node_modules/swiper/core/slide/slideTo.js","webpack://tailwind_umbraco_theme/./node_modules/swiper/core/slide/slideToLoop.js","webpack://tailwind_umbraco_theme/./node_modules/swiper/core/slide/slideNext.js","webpack://tailwind_umbraco_theme/./node_modules/swiper/core/slide/slidePrev.js","webpack://tailwind_umbraco_theme/./node_modules/swiper/core/slide/slideReset.js","webpack://tailwind_umbraco_theme/./node_modules/swiper/core/slide/slideToClosest.js","webpack://tailwind_umbraco_theme/./node_modules/swiper/core/slide/slideToClickedSlide.js","webpack://tailwind_umbraco_theme/./node_modules/swiper/core/loop/index.js","webpack://tailwind_umbraco_theme/./node_modules/swiper/core/loop/loopCreate.js","webpack://tailwind_umbraco_theme/./node_modules/swiper/core/loop/loopFix.js","webpack://tailwind_umbraco_theme/./node_modules/swiper/core/loop/loopDestroy.js","webpack://tailwind_umbraco_theme/./node_modules/swiper/core/events/onTouchStart.js","webpack://tailwind_umbraco_theme/./node_modules/swiper/core/events/onTouchMove.js","webpack://tailwind_umbraco_theme/./node_modules/swiper/core/events/onTouchEnd.js","webpack://tailwind_umbraco_theme/./node_modules/swiper/core/events/onResize.js","webpack://tailwind_umbraco_theme/./node_modules/swiper/core/events/onClick.js","webpack://tailwind_umbraco_theme/./node_modules/swiper/core/events/onScroll.js","webpack://tailwind_umbraco_theme/./node_modules/swiper/shared/process-lazy-preloader.js","webpack://tailwind_umbraco_theme/./node_modules/swiper/core/events/onLoad.js","webpack://tailwind_umbraco_theme/./node_modules/swiper/core/events/index.js","webpack://tailwind_umbraco_theme/./node_modules/swiper/core/breakpoints/setBreakpoint.js","webpack://tailwind_umbraco_theme/./node_modules/swiper/core/check-overflow/index.js","webpack://tailwind_umbraco_theme/./node_modules/swiper/core/defaults.js","webpack://tailwind_umbraco_theme/./node_modules/swiper/core/moduleExtendParams.js","webpack://tailwind_umbraco_theme/./node_modules/swiper/core/core.js","webpack://tailwind_umbraco_theme/./node_modules/swiper/core/transition/index.js","webpack://tailwind_umbraco_theme/./node_modules/swiper/core/transition/setTransition.js","webpack://tailwind_umbraco_theme/./node_modules/swiper/core/transition/transitionStart.js","webpack://tailwind_umbraco_theme/./node_modules/swiper/core/transition/transitionEnd.js","webpack://tailwind_umbraco_theme/./node_modules/swiper/core/grab-cursor/index.js","webpack://tailwind_umbraco_theme/./node_modules/swiper/core/grab-cursor/setGrabCursor.js","webpack://tailwind_umbraco_theme/./node_modules/swiper/core/grab-cursor/unsetGrabCursor.js","webpack://tailwind_umbraco_theme/./node_modules/swiper/core/breakpoints/index.js","webpack://tailwind_umbraco_theme/./node_modules/swiper/core/breakpoints/getBreakpoint.js","webpack://tailwind_umbraco_theme/./node_modules/swiper/core/classes/index.js","webpack://tailwind_umbraco_theme/./node_modules/swiper/core/classes/addClasses.js","webpack://tailwind_umbraco_theme/./node_modules/swiper/core/classes/removeClasses.js","webpack://tailwind_umbraco_theme/./node_modules/swiper/core/modules/resize/resize.js","webpack://tailwind_umbraco_theme/./node_modules/swiper/core/modules/observer/observer.js","webpack://tailwind_umbraco_theme/./node_modules/swiper/shared/create-element-if-not-defined.js","webpack://tailwind_umbraco_theme/./node_modules/swiper/shared/classes-to-selector.js","webpack://tailwind_umbraco_theme/./node_modules/swiper/modules/manipulation/methods/appendSlide.js","webpack://tailwind_umbraco_theme/./node_modules/swiper/modules/manipulation/methods/prependSlide.js","webpack://tailwind_umbraco_theme/./node_modules/swiper/modules/manipulation/methods/addSlide.js","webpack://tailwind_umbraco_theme/./node_modules/swiper/modules/manipulation/methods/removeSlide.js","webpack://tailwind_umbraco_theme/./node_modules/swiper/modules/manipulation/methods/removeAllSlides.js","webpack://tailwind_umbraco_theme/./node_modules/swiper/shared/effect-init.js","webpack://tailwind_umbraco_theme/./node_modules/swiper/shared/effect-target.js","webpack://tailwind_umbraco_theme/./node_modules/swiper/shared/effect-virtual-transition-end.js","webpack://tailwind_umbraco_theme/./node_modules/swiper/shared/create-shadow.js","webpack://tailwind_umbraco_theme/./node_modules/swiper/swiper-bundle.esm.js","webpack://tailwind_umbraco_theme/./node_modules/swiper/modules/virtual/virtual.js","webpack://tailwind_umbraco_theme/./node_modules/swiper/modules/keyboard/keyboard.js","webpack://tailwind_umbraco_theme/./node_modules/swiper/modules/mousewheel/mousewheel.js","webpack://tailwind_umbraco_theme/./node_modules/swiper/modules/navigation/navigation.js","webpack://tailwind_umbraco_theme/./node_modules/swiper/modules/pagination/pagination.js","webpack://tailwind_umbraco_theme/./node_modules/swiper/modules/scrollbar/scrollbar.js","webpack://tailwind_umbraco_theme/./node_modules/swiper/modules/parallax/parallax.js","webpack://tailwind_umbraco_theme/./node_modules/swiper/modules/zoom/zoom.js","webpack://tailwind_umbraco_theme/./node_modules/swiper/modules/controller/controller.js","webpack://tailwind_umbraco_theme/./node_modules/swiper/modules/a11y/a11y.js","webpack://tailwind_umbraco_theme/./node_modules/swiper/modules/history/history.js","webpack://tailwind_umbraco_theme/./node_modules/swiper/modules/hash-navigation/hash-navigation.js","webpack://tailwind_umbraco_theme/./node_modules/swiper/modules/autoplay/autoplay.js","webpack://tailwind_umbraco_theme/./node_modules/swiper/modules/thumbs/thumbs.js","webpack://tailwind_umbraco_theme/./node_modules/swiper/modules/free-mode/free-mode.js","webpack://tailwind_umbraco_theme/./node_modules/swiper/modules/grid/grid.js","webpack://tailwind_umbraco_theme/./node_modules/swiper/modules/manipulation/manipulation.js","webpack://tailwind_umbraco_theme/./node_modules/swiper/modules/effect-fade/effect-fade.js","webpack://tailwind_umbraco_theme/./node_modules/swiper/modules/effect-cube/effect-cube.js","webpack://tailwind_umbraco_theme/./node_modules/swiper/modules/effect-flip/effect-flip.js","webpack://tailwind_umbraco_theme/./node_modules/swiper/modules/effect-coverflow/effect-coverflow.js","webpack://tailwind_umbraco_theme/./node_modules/swiper/modules/effect-creative/effect-creative.js","webpack://tailwind_umbraco_theme/./node_modules/swiper/modules/effect-cards/effect-cards.js","webpack://tailwind_umbraco_theme/webpack/bootstrap","webpack://tailwind_umbraco_theme/webpack/runtime/define property getters","webpack://tailwind_umbraco_theme/webpack/runtime/hasOwnProperty shorthand"],"sourcesContent":["/**\n * SSR Window 4.0.2\n * Better handling for window object in SSR environment\n * https://github.com/nolimits4web/ssr-window\n *\n * Copyright 2021, Vladimir Kharlampidi\n *\n * Licensed under MIT\n *\n * Released on: December 13, 2021\n */\n/* eslint-disable no-param-reassign */\nfunction isObject(obj) {\n return (obj !== null &&\n typeof obj === 'object' &&\n 'constructor' in obj &&\n obj.constructor === Object);\n}\nfunction extend(target = {}, src = {}) {\n Object.keys(src).forEach((key) => {\n if (typeof target[key] === 'undefined')\n target[key] = src[key];\n else if (isObject(src[key]) &&\n isObject(target[key]) &&\n Object.keys(src[key]).length > 0) {\n extend(target[key], src[key]);\n }\n });\n}\n\nconst ssrDocument = {\n body: {},\n addEventListener() { },\n removeEventListener() { },\n activeElement: {\n blur() { },\n nodeName: '',\n },\n querySelector() {\n return null;\n },\n querySelectorAll() {\n return [];\n },\n getElementById() {\n return null;\n },\n createEvent() {\n return {\n initEvent() { },\n };\n },\n createElement() {\n return {\n children: [],\n childNodes: [],\n style: {},\n setAttribute() { },\n getElementsByTagName() {\n return [];\n },\n };\n },\n createElementNS() {\n return {};\n },\n importNode() {\n return null;\n },\n location: {\n hash: '',\n host: '',\n hostname: '',\n href: '',\n origin: '',\n pathname: '',\n protocol: '',\n search: '',\n },\n};\nfunction getDocument() {\n const doc = typeof document !== 'undefined' ? document : {};\n extend(doc, ssrDocument);\n return doc;\n}\n\nconst ssrWindow = {\n document: ssrDocument,\n navigator: {\n userAgent: '',\n },\n location: {\n hash: '',\n host: '',\n hostname: '',\n href: '',\n origin: '',\n pathname: '',\n protocol: '',\n search: '',\n },\n history: {\n replaceState() { },\n pushState() { },\n go() { },\n back() { },\n },\n CustomEvent: function CustomEvent() {\n return this;\n },\n addEventListener() { },\n removeEventListener() { },\n getComputedStyle() {\n return {\n getPropertyValue() {\n return '';\n },\n };\n },\n Image() { },\n Date() { },\n screen: {},\n setTimeout() { },\n clearTimeout() { },\n matchMedia() {\n return {};\n },\n requestAnimationFrame(callback) {\n if (typeof setTimeout === 'undefined') {\n callback();\n return null;\n }\n return setTimeout(callback, 0);\n },\n cancelAnimationFrame(id) {\n if (typeof setTimeout === 'undefined') {\n return;\n }\n clearTimeout(id);\n },\n};\nfunction getWindow() {\n const win = typeof window !== 'undefined' ? window : {};\n extend(win, ssrWindow);\n return win;\n}\n\nexport { extend, getDocument, getWindow, ssrDocument, ssrWindow };\n","import { getWindow, getDocument } from 'ssr-window';\nfunction deleteProps(obj) {\n const object = obj;\n Object.keys(object).forEach(key => {\n try {\n object[key] = null;\n } catch (e) {\n // no getter for object\n }\n try {\n delete object[key];\n } catch (e) {\n // something got wrong\n }\n });\n}\nfunction nextTick(callback, delay = 0) {\n return setTimeout(callback, delay);\n}\nfunction now() {\n return Date.now();\n}\nfunction getComputedStyle(el) {\n const window = getWindow();\n let style;\n if (window.getComputedStyle) {\n style = window.getComputedStyle(el, null);\n }\n if (!style && el.currentStyle) {\n style = el.currentStyle;\n }\n if (!style) {\n style = el.style;\n }\n return style;\n}\nfunction getTranslate(el, axis = 'x') {\n const window = getWindow();\n let matrix;\n let curTransform;\n let transformMatrix;\n const curStyle = getComputedStyle(el, null);\n if (window.WebKitCSSMatrix) {\n curTransform = curStyle.transform || curStyle.webkitTransform;\n if (curTransform.split(',').length > 6) {\n curTransform = curTransform.split(', ').map(a => a.replace(',', '.')).join(', ');\n }\n // Some old versions of Webkit choke when 'none' is passed; pass\n // empty string instead in this case\n transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);\n } else {\n transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,');\n matrix = transformMatrix.toString().split(',');\n }\n if (axis === 'x') {\n // Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix) curTransform = transformMatrix.m41;\n // Crazy IE10 Matrix\n else if (matrix.length === 16) curTransform = parseFloat(matrix[12]);\n // Normal Browsers\n else curTransform = parseFloat(matrix[4]);\n }\n if (axis === 'y') {\n // Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix) curTransform = transformMatrix.m42;\n // Crazy IE10 Matrix\n else if (matrix.length === 16) curTransform = parseFloat(matrix[13]);\n // Normal Browsers\n else curTransform = parseFloat(matrix[5]);\n }\n return curTransform || 0;\n}\nfunction isObject(o) {\n return typeof o === 'object' && o !== null && o.constructor && Object.prototype.toString.call(o).slice(8, -1) === 'Object';\n}\nfunction isNode(node) {\n // eslint-disable-next-line\n if (typeof window !== 'undefined' && typeof window.HTMLElement !== 'undefined') {\n return node instanceof HTMLElement;\n }\n return node && (node.nodeType === 1 || node.nodeType === 11);\n}\nfunction extend(...args) {\n const to = Object(args[0]);\n const noExtend = ['__proto__', 'constructor', 'prototype'];\n for (let i = 1; i < args.length; i += 1) {\n const nextSource = args[i];\n if (nextSource !== undefined && nextSource !== null && !isNode(nextSource)) {\n const keysArray = Object.keys(Object(nextSource)).filter(key => noExtend.indexOf(key) < 0);\n for (let nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) {\n const nextKey = keysArray[nextIndex];\n const desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);\n if (desc !== undefined && desc.enumerable) {\n if (isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n if (nextSource[nextKey].__swiper__) {\n to[nextKey] = nextSource[nextKey];\n } else {\n extend(to[nextKey], nextSource[nextKey]);\n }\n } else if (!isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n to[nextKey] = {};\n if (nextSource[nextKey].__swiper__) {\n to[nextKey] = nextSource[nextKey];\n } else {\n extend(to[nextKey], nextSource[nextKey]);\n }\n } else {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n }\n }\n return to;\n}\nfunction setCSSProperty(el, varName, varValue) {\n el.style.setProperty(varName, varValue);\n}\nfunction animateCSSModeScroll({\n swiper,\n targetPosition,\n side\n}) {\n const window = getWindow();\n const startPosition = -swiper.translate;\n let startTime = null;\n let time;\n const duration = swiper.params.speed;\n swiper.wrapperEl.style.scrollSnapType = 'none';\n window.cancelAnimationFrame(swiper.cssModeFrameID);\n const dir = targetPosition > startPosition ? 'next' : 'prev';\n const isOutOfBound = (current, target) => {\n return dir === 'next' && current >= target || dir === 'prev' && current <= target;\n };\n const animate = () => {\n time = new Date().getTime();\n if (startTime === null) {\n startTime = time;\n }\n const progress = Math.max(Math.min((time - startTime) / duration, 1), 0);\n const easeProgress = 0.5 - Math.cos(progress * Math.PI) / 2;\n let currentPosition = startPosition + easeProgress * (targetPosition - startPosition);\n if (isOutOfBound(currentPosition, targetPosition)) {\n currentPosition = targetPosition;\n }\n swiper.wrapperEl.scrollTo({\n [side]: currentPosition\n });\n if (isOutOfBound(currentPosition, targetPosition)) {\n swiper.wrapperEl.style.overflow = 'hidden';\n swiper.wrapperEl.style.scrollSnapType = '';\n setTimeout(() => {\n swiper.wrapperEl.style.overflow = '';\n swiper.wrapperEl.scrollTo({\n [side]: currentPosition\n });\n });\n window.cancelAnimationFrame(swiper.cssModeFrameID);\n return;\n }\n swiper.cssModeFrameID = window.requestAnimationFrame(animate);\n };\n animate();\n}\nfunction getSlideTransformEl(slideEl) {\n return slideEl.querySelector('.swiper-slide-transform') || slideEl.shadowEl && slideEl.shadowEl.querySelector('.swiper-slide-transform') || slideEl;\n}\nfunction findElementsInElements(elements = [], selector = '') {\n const found = [];\n elements.forEach(el => {\n found.push(...el.querySelectorAll(selector));\n });\n return found;\n}\nfunction elementChildren(element, selector = '') {\n return [...element.children].filter(el => el.matches(selector));\n}\nfunction createElement(tag, classes = []) {\n const el = document.createElement(tag);\n el.classList.add(...(Array.isArray(classes) ? classes : [classes]));\n return el;\n}\nfunction elementOffset(el) {\n const window = getWindow();\n const document = getDocument();\n const box = el.getBoundingClientRect();\n const body = document.body;\n const clientTop = el.clientTop || body.clientTop || 0;\n const clientLeft = el.clientLeft || body.clientLeft || 0;\n const scrollTop = el === window ? window.scrollY : el.scrollTop;\n const scrollLeft = el === window ? window.scrollX : el.scrollLeft;\n return {\n top: box.top + scrollTop - clientTop,\n left: box.left + scrollLeft - clientLeft\n };\n}\nfunction elementPrevAll(el, selector) {\n const prevEls = [];\n while (el.previousElementSibling) {\n const prev = el.previousElementSibling; // eslint-disable-line\n if (selector) {\n if (prev.matches(selector)) prevEls.push(prev);\n } else prevEls.push(prev);\n el = prev;\n }\n return prevEls;\n}\nfunction elementNextAll(el, selector) {\n const nextEls = [];\n while (el.nextElementSibling) {\n const next = el.nextElementSibling; // eslint-disable-line\n if (selector) {\n if (next.matches(selector)) nextEls.push(next);\n } else nextEls.push(next);\n el = next;\n }\n return nextEls;\n}\nfunction elementStyle(el, prop) {\n const window = getWindow();\n return window.getComputedStyle(el, null).getPropertyValue(prop);\n}\nfunction elementIndex(el) {\n let child = el;\n let i;\n if (child) {\n i = 0;\n // eslint-disable-next-line\n while ((child = child.previousSibling) !== null) {\n if (child.nodeType === 1) i += 1;\n }\n return i;\n }\n return undefined;\n}\nfunction elementParents(el, selector) {\n const parents = []; // eslint-disable-line\n let parent = el.parentElement; // eslint-disable-line\n while (parent) {\n if (selector) {\n if (parent.matches(selector)) parents.push(parent);\n } else {\n parents.push(parent);\n }\n parent = parent.parentElement;\n }\n return parents;\n}\nfunction elementTransitionEnd(el, callback) {\n function fireCallBack(e) {\n if (e.target !== el) return;\n callback.call(el, e);\n el.removeEventListener('transitionend', fireCallBack);\n }\n if (callback) {\n el.addEventListener('transitionend', fireCallBack);\n }\n}\nfunction elementOuterSize(el, size, includeMargins) {\n const window = getWindow();\n if (includeMargins) {\n return el[size === 'width' ? 'offsetWidth' : 'offsetHeight'] + parseFloat(window.getComputedStyle(el, null).getPropertyValue(size === 'width' ? 'margin-right' : 'margin-top')) + parseFloat(window.getComputedStyle(el, null).getPropertyValue(size === 'width' ? 'margin-left' : 'margin-bottom'));\n }\n return el.offsetWidth;\n}\nexport { animateCSSModeScroll, deleteProps, nextTick, now, getTranslate, isObject, extend, getComputedStyle, setCSSProperty, getSlideTransformEl,\n// dom\nfindElementsInElements, createElement, elementChildren, elementOffset, elementPrevAll, elementNextAll, elementStyle, elementIndex, elementParents, elementTransitionEnd, elementOuterSize };","import { getWindow, getDocument } from 'ssr-window';\nlet support;\nfunction calcSupport() {\n const window = getWindow();\n const document = getDocument();\n return {\n smoothScroll: document.documentElement && 'scrollBehavior' in document.documentElement.style,\n touch: !!('ontouchstart' in window || window.DocumentTouch && document instanceof window.DocumentTouch)\n };\n}\nfunction getSupport() {\n if (!support) {\n support = calcSupport();\n }\n return support;\n}\nexport { getSupport };","import { getWindow } from 'ssr-window';\nimport { getSupport } from './get-support.js';\nlet deviceCached;\nfunction calcDevice({\n userAgent\n} = {}) {\n const support = getSupport();\n const window = getWindow();\n const platform = window.navigator.platform;\n const ua = userAgent || window.navigator.userAgent;\n const device = {\n ios: false,\n android: false\n };\n const screenWidth = window.screen.width;\n const screenHeight = window.screen.height;\n const android = ua.match(/(Android);?[\\s\\/]+([\\d.]+)?/); // eslint-disable-line\n let ipad = ua.match(/(iPad).*OS\\s([\\d_]+)/);\n const ipod = ua.match(/(iPod)(.*OS\\s([\\d_]+))?/);\n const iphone = !ipad && ua.match(/(iPhone\\sOS|iOS)\\s([\\d_]+)/);\n const windows = platform === 'Win32';\n let macos = platform === 'MacIntel';\n\n // iPadOs 13 fix\n const iPadScreens = ['1024x1366', '1366x1024', '834x1194', '1194x834', '834x1112', '1112x834', '768x1024', '1024x768', '820x1180', '1180x820', '810x1080', '1080x810'];\n if (!ipad && macos && support.touch && iPadScreens.indexOf(`${screenWidth}x${screenHeight}`) >= 0) {\n ipad = ua.match(/(Version)\\/([\\d.]+)/);\n if (!ipad) ipad = [0, 1, '13_0_0'];\n macos = false;\n }\n\n // Android\n if (android && !windows) {\n device.os = 'android';\n device.android = true;\n }\n if (ipad || iphone || ipod) {\n device.os = 'ios';\n device.ios = true;\n }\n\n // Export object\n return device;\n}\nfunction getDevice(overrides = {}) {\n if (!deviceCached) {\n deviceCached = calcDevice(overrides);\n }\n return deviceCached;\n}\nexport { getDevice };","import { getWindow } from 'ssr-window';\nlet browser;\nfunction calcBrowser() {\n const window = getWindow();\n let needPerspectiveFix = false;\n function isSafari() {\n const ua = window.navigator.userAgent.toLowerCase();\n return ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0;\n }\n if (isSafari()) {\n const ua = String(window.navigator.userAgent);\n if (ua.includes('Version/')) {\n const [major, minor] = ua.split('Version/')[1].split(' ')[0].split('.').map(num => Number(num));\n needPerspectiveFix = major < 16 || major === 16 && minor < 2;\n }\n }\n return {\n isSafari: needPerspectiveFix || isSafari(),\n needPerspectiveFix,\n isWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent)\n };\n}\nfunction getBrowser() {\n if (!browser) {\n browser = calcBrowser();\n }\n return browser;\n}\nexport { getBrowser };","/* eslint-disable no-underscore-dangle */\n\nexport default {\n on(events, handler, priority) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (typeof handler !== 'function') return self;\n const method = priority ? 'unshift' : 'push';\n events.split(' ').forEach(event => {\n if (!self.eventsListeners[event]) self.eventsListeners[event] = [];\n self.eventsListeners[event][method](handler);\n });\n return self;\n },\n once(events, handler, priority) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (typeof handler !== 'function') return self;\n function onceHandler(...args) {\n self.off(events, onceHandler);\n if (onceHandler.__emitterProxy) {\n delete onceHandler.__emitterProxy;\n }\n handler.apply(self, args);\n }\n onceHandler.__emitterProxy = handler;\n return self.on(events, onceHandler, priority);\n },\n onAny(handler, priority) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (typeof handler !== 'function') return self;\n const method = priority ? 'unshift' : 'push';\n if (self.eventsAnyListeners.indexOf(handler) < 0) {\n self.eventsAnyListeners[method](handler);\n }\n return self;\n },\n offAny(handler) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (!self.eventsAnyListeners) return self;\n const index = self.eventsAnyListeners.indexOf(handler);\n if (index >= 0) {\n self.eventsAnyListeners.splice(index, 1);\n }\n return self;\n },\n off(events, handler) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (!self.eventsListeners) return self;\n events.split(' ').forEach(event => {\n if (typeof handler === 'undefined') {\n self.eventsListeners[event] = [];\n } else if (self.eventsListeners[event]) {\n self.eventsListeners[event].forEach((eventHandler, index) => {\n if (eventHandler === handler || eventHandler.__emitterProxy && eventHandler.__emitterProxy === handler) {\n self.eventsListeners[event].splice(index, 1);\n }\n });\n }\n });\n return self;\n },\n emit(...args) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (!self.eventsListeners) return self;\n let events;\n let data;\n let context;\n if (typeof args[0] === 'string' || Array.isArray(args[0])) {\n events = args[0];\n data = args.slice(1, args.length);\n context = self;\n } else {\n events = args[0].events;\n data = args[0].data;\n context = args[0].context || self;\n }\n data.unshift(context);\n const eventsArray = Array.isArray(events) ? events : events.split(' ');\n eventsArray.forEach(event => {\n if (self.eventsAnyListeners && self.eventsAnyListeners.length) {\n self.eventsAnyListeners.forEach(eventHandler => {\n eventHandler.apply(context, [event, ...data]);\n });\n }\n if (self.eventsListeners && self.eventsListeners[event]) {\n self.eventsListeners[event].forEach(eventHandler => {\n eventHandler.apply(context, data);\n });\n }\n });\n return self;\n }\n};","import updateSize from './updateSize.js';\nimport updateSlides from './updateSlides.js';\nimport updateAutoHeight from './updateAutoHeight.js';\nimport updateSlidesOffset from './updateSlidesOffset.js';\nimport updateSlidesProgress from './updateSlidesProgress.js';\nimport updateProgress from './updateProgress.js';\nimport updateSlidesClasses from './updateSlidesClasses.js';\nimport updateActiveIndex from './updateActiveIndex.js';\nimport updateClickedSlide from './updateClickedSlide.js';\nexport default {\n updateSize,\n updateSlides,\n updateAutoHeight,\n updateSlidesOffset,\n updateSlidesProgress,\n updateProgress,\n updateSlidesClasses,\n updateActiveIndex,\n updateClickedSlide\n};","import { elementStyle } from '../../shared/utils.js';\nexport default function updateSize() {\n const swiper = this;\n let width;\n let height;\n const el = swiper.el;\n if (typeof swiper.params.width !== 'undefined' && swiper.params.width !== null) {\n width = swiper.params.width;\n } else {\n width = el.clientWidth;\n }\n if (typeof swiper.params.height !== 'undefined' && swiper.params.height !== null) {\n height = swiper.params.height;\n } else {\n height = el.clientHeight;\n }\n if (width === 0 && swiper.isHorizontal() || height === 0 && swiper.isVertical()) {\n return;\n }\n\n // Subtract paddings\n width = width - parseInt(elementStyle(el, 'padding-left') || 0, 10) - parseInt(elementStyle(el, 'padding-right') || 0, 10);\n height = height - parseInt(elementStyle(el, 'padding-top') || 0, 10) - parseInt(elementStyle(el, 'padding-bottom') || 0, 10);\n if (Number.isNaN(width)) width = 0;\n if (Number.isNaN(height)) height = 0;\n Object.assign(swiper, {\n width,\n height,\n size: swiper.isHorizontal() ? width : height\n });\n}","import { elementChildren, elementOuterSize, elementStyle, setCSSProperty } from '../../shared/utils.js';\nexport default function updateSlides() {\n const swiper = this;\n function getDirectionLabel(property) {\n if (swiper.isHorizontal()) {\n return property;\n }\n // prettier-ignore\n return {\n 'width': 'height',\n 'margin-top': 'margin-left',\n 'margin-bottom ': 'margin-right',\n 'margin-left': 'margin-top',\n 'margin-right': 'margin-bottom',\n 'padding-left': 'padding-top',\n 'padding-right': 'padding-bottom',\n 'marginRight': 'marginBottom'\n }[property];\n }\n function getDirectionPropertyValue(node, label) {\n return parseFloat(node.getPropertyValue(getDirectionLabel(label)) || 0);\n }\n const params = swiper.params;\n const {\n wrapperEl,\n slidesEl,\n size: swiperSize,\n rtlTranslate: rtl,\n wrongRTL\n } = swiper;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n const previousSlidesLength = isVirtual ? swiper.virtual.slides.length : swiper.slides.length;\n const slides = elementChildren(slidesEl, `.${swiper.params.slideClass}, swiper-slide`);\n const slidesLength = isVirtual ? swiper.virtual.slides.length : slides.length;\n let snapGrid = [];\n const slidesGrid = [];\n const slidesSizesGrid = [];\n let offsetBefore = params.slidesOffsetBefore;\n if (typeof offsetBefore === 'function') {\n offsetBefore = params.slidesOffsetBefore.call(swiper);\n }\n let offsetAfter = params.slidesOffsetAfter;\n if (typeof offsetAfter === 'function') {\n offsetAfter = params.slidesOffsetAfter.call(swiper);\n }\n const previousSnapGridLength = swiper.snapGrid.length;\n const previousSlidesGridLength = swiper.slidesGrid.length;\n let spaceBetween = params.spaceBetween;\n let slidePosition = -offsetBefore;\n let prevSlideSize = 0;\n let index = 0;\n if (typeof swiperSize === 'undefined') {\n return;\n }\n if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\n spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiperSize;\n }\n swiper.virtualSize = -spaceBetween;\n\n // reset margins\n slides.forEach(slideEl => {\n if (rtl) {\n slideEl.style.marginLeft = '';\n } else {\n slideEl.style.marginRight = '';\n }\n slideEl.style.marginBottom = '';\n slideEl.style.marginTop = '';\n });\n\n // reset cssMode offsets\n if (params.centeredSlides && params.cssMode) {\n setCSSProperty(wrapperEl, '--swiper-centered-offset-before', '');\n setCSSProperty(wrapperEl, '--swiper-centered-offset-after', '');\n }\n const gridEnabled = params.grid && params.grid.rows > 1 && swiper.grid;\n if (gridEnabled) {\n swiper.grid.initSlides(slidesLength);\n }\n\n // Calc slides\n let slideSize;\n const shouldResetSlideSize = params.slidesPerView === 'auto' && params.breakpoints && Object.keys(params.breakpoints).filter(key => {\n return typeof params.breakpoints[key].slidesPerView !== 'undefined';\n }).length > 0;\n for (let i = 0; i < slidesLength; i += 1) {\n slideSize = 0;\n let slide;\n if (slides[i]) slide = slides[i];\n if (gridEnabled) {\n swiper.grid.updateSlide(i, slide, slidesLength, getDirectionLabel);\n }\n if (slides[i] && elementStyle(slide, 'display') === 'none') continue; // eslint-disable-line\n\n if (params.slidesPerView === 'auto') {\n if (shouldResetSlideSize) {\n slides[i].style[getDirectionLabel('width')] = ``;\n }\n const slideStyles = getComputedStyle(slide);\n const currentTransform = slide.style.transform;\n const currentWebKitTransform = slide.style.webkitTransform;\n if (currentTransform) {\n slide.style.transform = 'none';\n }\n if (currentWebKitTransform) {\n slide.style.webkitTransform = 'none';\n }\n if (params.roundLengths) {\n slideSize = swiper.isHorizontal() ? elementOuterSize(slide, 'width', true) : elementOuterSize(slide, 'height', true);\n } else {\n // eslint-disable-next-line\n const width = getDirectionPropertyValue(slideStyles, 'width');\n const paddingLeft = getDirectionPropertyValue(slideStyles, 'padding-left');\n const paddingRight = getDirectionPropertyValue(slideStyles, 'padding-right');\n const marginLeft = getDirectionPropertyValue(slideStyles, 'margin-left');\n const marginRight = getDirectionPropertyValue(slideStyles, 'margin-right');\n const boxSizing = slideStyles.getPropertyValue('box-sizing');\n if (boxSizing && boxSizing === 'border-box') {\n slideSize = width + marginLeft + marginRight;\n } else {\n const {\n clientWidth,\n offsetWidth\n } = slide;\n slideSize = width + paddingLeft + paddingRight + marginLeft + marginRight + (offsetWidth - clientWidth);\n }\n }\n if (currentTransform) {\n slide.style.transform = currentTransform;\n }\n if (currentWebKitTransform) {\n slide.style.webkitTransform = currentWebKitTransform;\n }\n if (params.roundLengths) slideSize = Math.floor(slideSize);\n } else {\n slideSize = (swiperSize - (params.slidesPerView - 1) * spaceBetween) / params.slidesPerView;\n if (params.roundLengths) slideSize = Math.floor(slideSize);\n if (slides[i]) {\n slides[i].style[getDirectionLabel('width')] = `${slideSize}px`;\n }\n }\n if (slides[i]) {\n slides[i].swiperSlideSize = slideSize;\n }\n slidesSizesGrid.push(slideSize);\n if (params.centeredSlides) {\n slidePosition = slidePosition + slideSize / 2 + prevSlideSize / 2 + spaceBetween;\n if (prevSlideSize === 0 && i !== 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;\n if (i === 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;\n if (Math.abs(slidePosition) < 1 / 1000) slidePosition = 0;\n if (params.roundLengths) slidePosition = Math.floor(slidePosition);\n if (index % params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n slidesGrid.push(slidePosition);\n } else {\n if (params.roundLengths) slidePosition = Math.floor(slidePosition);\n if ((index - Math.min(swiper.params.slidesPerGroupSkip, index)) % swiper.params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n slidesGrid.push(slidePosition);\n slidePosition = slidePosition + slideSize + spaceBetween;\n }\n swiper.virtualSize += slideSize + spaceBetween;\n prevSlideSize = slideSize;\n index += 1;\n }\n swiper.virtualSize = Math.max(swiper.virtualSize, swiperSize) + offsetAfter;\n if (rtl && wrongRTL && (params.effect === 'slide' || params.effect === 'coverflow')) {\n wrapperEl.style.width = `${swiper.virtualSize + params.spaceBetween}px`;\n }\n if (params.setWrapperSize) {\n wrapperEl.style[getDirectionLabel('width')] = `${swiper.virtualSize + params.spaceBetween}px`;\n }\n if (gridEnabled) {\n swiper.grid.updateWrapperSize(slideSize, snapGrid, getDirectionLabel);\n }\n\n // Remove last grid elements depending on width\n if (!params.centeredSlides) {\n const newSlidesGrid = [];\n for (let i = 0; i < snapGrid.length; i += 1) {\n let slidesGridItem = snapGrid[i];\n if (params.roundLengths) slidesGridItem = Math.floor(slidesGridItem);\n if (snapGrid[i] <= swiper.virtualSize - swiperSize) {\n newSlidesGrid.push(slidesGridItem);\n }\n }\n snapGrid = newSlidesGrid;\n if (Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) > 1) {\n snapGrid.push(swiper.virtualSize - swiperSize);\n }\n }\n if (isVirtual && params.loop) {\n const size = slidesSizesGrid[0] + spaceBetween;\n if (params.slidesPerGroup > 1) {\n const groups = Math.ceil((swiper.virtual.slidesBefore + swiper.virtual.slidesAfter) / params.slidesPerGroup);\n const groupSize = size * params.slidesPerGroup;\n for (let i = 0; i < groups; i += 1) {\n snapGrid.push(snapGrid[snapGrid.length - 1] + groupSize);\n }\n }\n for (let i = 0; i < swiper.virtual.slidesBefore + swiper.virtual.slidesAfter; i += 1) {\n if (params.slidesPerGroup === 1) {\n snapGrid.push(snapGrid[snapGrid.length - 1] + size);\n }\n slidesGrid.push(slidesGrid[slidesGrid.length - 1] + size);\n swiper.virtualSize += size;\n }\n }\n if (snapGrid.length === 0) snapGrid = [0];\n if (params.spaceBetween !== 0) {\n const key = swiper.isHorizontal() && rtl ? 'marginLeft' : getDirectionLabel('marginRight');\n slides.filter((_, slideIndex) => {\n if (!params.cssMode || params.loop) return true;\n if (slideIndex === slides.length - 1) {\n return false;\n }\n return true;\n }).forEach(slideEl => {\n slideEl.style[key] = `${spaceBetween}px`;\n });\n }\n if (params.centeredSlides && params.centeredSlidesBounds) {\n let allSlidesSize = 0;\n slidesSizesGrid.forEach(slideSizeValue => {\n allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);\n });\n allSlidesSize -= params.spaceBetween;\n const maxSnap = allSlidesSize - swiperSize;\n snapGrid = snapGrid.map(snap => {\n if (snap < 0) return -offsetBefore;\n if (snap > maxSnap) return maxSnap + offsetAfter;\n return snap;\n });\n }\n if (params.centerInsufficientSlides) {\n let allSlidesSize = 0;\n slidesSizesGrid.forEach(slideSizeValue => {\n allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);\n });\n allSlidesSize -= params.spaceBetween;\n if (allSlidesSize < swiperSize) {\n const allSlidesOffset = (swiperSize - allSlidesSize) / 2;\n snapGrid.forEach((snap, snapIndex) => {\n snapGrid[snapIndex] = snap - allSlidesOffset;\n });\n slidesGrid.forEach((snap, snapIndex) => {\n slidesGrid[snapIndex] = snap + allSlidesOffset;\n });\n }\n }\n Object.assign(swiper, {\n slides,\n snapGrid,\n slidesGrid,\n slidesSizesGrid\n });\n if (params.centeredSlides && params.cssMode && !params.centeredSlidesBounds) {\n setCSSProperty(wrapperEl, '--swiper-centered-offset-before', `${-snapGrid[0]}px`);\n setCSSProperty(wrapperEl, '--swiper-centered-offset-after', `${swiper.size / 2 - slidesSizesGrid[slidesSizesGrid.length - 1] / 2}px`);\n const addToSnapGrid = -swiper.snapGrid[0];\n const addToSlidesGrid = -swiper.slidesGrid[0];\n swiper.snapGrid = swiper.snapGrid.map(v => v + addToSnapGrid);\n swiper.slidesGrid = swiper.slidesGrid.map(v => v + addToSlidesGrid);\n }\n if (slidesLength !== previousSlidesLength) {\n swiper.emit('slidesLengthChange');\n }\n if (snapGrid.length !== previousSnapGridLength) {\n if (swiper.params.watchOverflow) swiper.checkOverflow();\n swiper.emit('snapGridLengthChange');\n }\n if (slidesGrid.length !== previousSlidesGridLength) {\n swiper.emit('slidesGridLengthChange');\n }\n if (params.watchSlidesProgress) {\n swiper.updateSlidesOffset();\n }\n if (!isVirtual && !params.cssMode && (params.effect === 'slide' || params.effect === 'fade')) {\n const backFaceHiddenClass = `${params.containerModifierClass}backface-hidden`;\n const hasClassBackfaceClassAdded = swiper.el.classList.contains(backFaceHiddenClass);\n if (slidesLength <= params.maxBackfaceHiddenSlides) {\n if (!hasClassBackfaceClassAdded) swiper.el.classList.add(backFaceHiddenClass);\n } else if (hasClassBackfaceClassAdded) {\n swiper.el.classList.remove(backFaceHiddenClass);\n }\n }\n}","export default function updateAutoHeight(speed) {\n const swiper = this;\n const activeSlides = [];\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n let newHeight = 0;\n let i;\n if (typeof speed === 'number') {\n swiper.setTransition(speed);\n } else if (speed === true) {\n swiper.setTransition(swiper.params.speed);\n }\n const getSlideByIndex = index => {\n if (isVirtual) {\n return swiper.slides.filter(el => parseInt(el.getAttribute('data-swiper-slide-index'), 10) === index)[0];\n }\n return swiper.slides[index];\n };\n // Find slides currently in view\n if (swiper.params.slidesPerView !== 'auto' && swiper.params.slidesPerView > 1) {\n if (swiper.params.centeredSlides) {\n (swiper.visibleSlides || []).forEach(slide => {\n activeSlides.push(slide);\n });\n } else {\n for (i = 0; i < Math.ceil(swiper.params.slidesPerView); i += 1) {\n const index = swiper.activeIndex + i;\n if (index > swiper.slides.length && !isVirtual) break;\n activeSlides.push(getSlideByIndex(index));\n }\n }\n } else {\n activeSlides.push(getSlideByIndex(swiper.activeIndex));\n }\n\n // Find new height from highest slide in view\n for (i = 0; i < activeSlides.length; i += 1) {\n if (typeof activeSlides[i] !== 'undefined') {\n const height = activeSlides[i].offsetHeight;\n newHeight = height > newHeight ? height : newHeight;\n }\n }\n\n // Update Height\n if (newHeight || newHeight === 0) swiper.wrapperEl.style.height = `${newHeight}px`;\n}","export default function updateSlidesOffset() {\n const swiper = this;\n const slides = swiper.slides;\n // eslint-disable-next-line\n const minusOffset = swiper.isElement ? swiper.isHorizontal() ? swiper.wrapperEl.offsetLeft : swiper.wrapperEl.offsetTop : 0;\n for (let i = 0; i < slides.length; i += 1) {\n slides[i].swiperSlideOffset = (swiper.isHorizontal() ? slides[i].offsetLeft : slides[i].offsetTop) - minusOffset;\n }\n}","export default function updateSlidesProgress(translate = this && this.translate || 0) {\n const swiper = this;\n const params = swiper.params;\n const {\n slides,\n rtlTranslate: rtl,\n snapGrid\n } = swiper;\n if (slides.length === 0) return;\n if (typeof slides[0].swiperSlideOffset === 'undefined') swiper.updateSlidesOffset();\n let offsetCenter = -translate;\n if (rtl) offsetCenter = translate;\n\n // Visible Slides\n slides.forEach(slideEl => {\n slideEl.classList.remove(params.slideVisibleClass);\n });\n swiper.visibleSlidesIndexes = [];\n swiper.visibleSlides = [];\n for (let i = 0; i < slides.length; i += 1) {\n const slide = slides[i];\n let slideOffset = slide.swiperSlideOffset;\n if (params.cssMode && params.centeredSlides) {\n slideOffset -= slides[0].swiperSlideOffset;\n }\n const slideProgress = (offsetCenter + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + params.spaceBetween);\n const originalSlideProgress = (offsetCenter - snapGrid[0] + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + params.spaceBetween);\n const slideBefore = -(offsetCenter - slideOffset);\n const slideAfter = slideBefore + swiper.slidesSizesGrid[i];\n const isVisible = slideBefore >= 0 && slideBefore < swiper.size - 1 || slideAfter > 1 && slideAfter <= swiper.size || slideBefore <= 0 && slideAfter >= swiper.size;\n if (isVisible) {\n swiper.visibleSlides.push(slide);\n swiper.visibleSlidesIndexes.push(i);\n slides[i].classList.add(params.slideVisibleClass);\n }\n slide.progress = rtl ? -slideProgress : slideProgress;\n slide.originalProgress = rtl ? -originalSlideProgress : originalSlideProgress;\n }\n}","export default function updateProgress(translate) {\n const swiper = this;\n if (typeof translate === 'undefined') {\n const multiplier = swiper.rtlTranslate ? -1 : 1;\n // eslint-disable-next-line\n translate = swiper && swiper.translate && swiper.translate * multiplier || 0;\n }\n const params = swiper.params;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n let {\n progress,\n isBeginning,\n isEnd,\n progressLoop\n } = swiper;\n const wasBeginning = isBeginning;\n const wasEnd = isEnd;\n if (translatesDiff === 0) {\n progress = 0;\n isBeginning = true;\n isEnd = true;\n } else {\n progress = (translate - swiper.minTranslate()) / translatesDiff;\n const isBeginningRounded = Math.abs(translate - swiper.minTranslate()) < 1;\n const isEndRounded = Math.abs(translate - swiper.maxTranslate()) < 1;\n isBeginning = isBeginningRounded || progress <= 0;\n isEnd = isEndRounded || progress >= 1;\n if (isBeginningRounded) progress = 0;\n if (isEndRounded) progress = 1;\n }\n if (params.loop) {\n const firstSlideIndex = swiper.getSlideIndex(swiper.slides.filter(el => el.getAttribute('data-swiper-slide-index') === '0')[0]);\n const lastSlideIndex = swiper.getSlideIndex(swiper.slides.filter(el => el.getAttribute('data-swiper-slide-index') * 1 === swiper.slides.length - 1)[0]);\n const firstSlideTranslate = swiper.slidesGrid[firstSlideIndex];\n const lastSlideTranslate = swiper.slidesGrid[lastSlideIndex];\n const translateMax = swiper.slidesGrid[swiper.slidesGrid.length - 1];\n const translateAbs = Math.abs(translate);\n if (translateAbs >= firstSlideTranslate) {\n progressLoop = (translateAbs - firstSlideTranslate) / translateMax;\n } else {\n progressLoop = (translateAbs + translateMax - lastSlideTranslate) / translateMax;\n }\n if (progressLoop > 1) progressLoop -= 1;\n }\n Object.assign(swiper, {\n progress,\n progressLoop,\n isBeginning,\n isEnd\n });\n if (params.watchSlidesProgress || params.centeredSlides && params.autoHeight) swiper.updateSlidesProgress(translate);\n if (isBeginning && !wasBeginning) {\n swiper.emit('reachBeginning toEdge');\n }\n if (isEnd && !wasEnd) {\n swiper.emit('reachEnd toEdge');\n }\n if (wasBeginning && !isBeginning || wasEnd && !isEnd) {\n swiper.emit('fromEdge');\n }\n swiper.emit('progress', progress);\n}","import { elementChildren, elementNextAll, elementPrevAll } from '../../shared/utils.js';\nexport default function updateSlidesClasses() {\n const swiper = this;\n const {\n slides,\n params,\n slidesEl,\n activeIndex\n } = swiper;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n const getFilteredSlide = selector => {\n return elementChildren(slidesEl, `.${params.slideClass}${selector}, swiper-slide${selector}`)[0];\n };\n slides.forEach(slideEl => {\n slideEl.classList.remove(params.slideActiveClass, params.slideNextClass, params.slidePrevClass);\n });\n let activeSlide;\n if (isVirtual) {\n if (params.loop) {\n let slideIndex = activeIndex - swiper.virtual.slidesBefore;\n if (slideIndex < 0) slideIndex = swiper.virtual.slides.length + slideIndex;\n if (slideIndex >= swiper.virtual.slides.length) slideIndex -= swiper.virtual.slides.length;\n activeSlide = getFilteredSlide(`[data-swiper-slide-index=\"${slideIndex}\"]`);\n } else {\n activeSlide = getFilteredSlide(`[data-swiper-slide-index=\"${activeIndex}\"]`);\n }\n } else {\n activeSlide = slides[activeIndex];\n }\n if (activeSlide) {\n // Active classes\n activeSlide.classList.add(params.slideActiveClass);\n\n // Next Slide\n let nextSlide = elementNextAll(activeSlide, `.${params.slideClass}, swiper-slide`)[0];\n if (params.loop && !nextSlide) {\n nextSlide = slides[0];\n }\n if (nextSlide) {\n nextSlide.classList.add(params.slideNextClass);\n }\n // Prev Slide\n let prevSlide = elementPrevAll(activeSlide, `.${params.slideClass}, swiper-slide`)[0];\n if (params.loop && !prevSlide === 0) {\n prevSlide = slides[slides.length - 1];\n }\n if (prevSlide) {\n prevSlide.classList.add(params.slidePrevClass);\n }\n }\n swiper.emitSlidesClasses();\n}","export function getActiveIndexByTranslate(swiper) {\n const {\n slidesGrid,\n params\n } = swiper;\n const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n let activeIndex;\n for (let i = 0; i < slidesGrid.length; i += 1) {\n if (typeof slidesGrid[i + 1] !== 'undefined') {\n if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1] - (slidesGrid[i + 1] - slidesGrid[i]) / 2) {\n activeIndex = i;\n } else if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1]) {\n activeIndex = i + 1;\n }\n } else if (translate >= slidesGrid[i]) {\n activeIndex = i;\n }\n }\n // Normalize slideIndex\n if (params.normalizeSlideIndex) {\n if (activeIndex < 0 || typeof activeIndex === 'undefined') activeIndex = 0;\n }\n return activeIndex;\n}\nexport default function updateActiveIndex(newActiveIndex) {\n const swiper = this;\n const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n const {\n snapGrid,\n params,\n activeIndex: previousIndex,\n realIndex: previousRealIndex,\n snapIndex: previousSnapIndex\n } = swiper;\n let activeIndex = newActiveIndex;\n let snapIndex;\n const getVirtualRealIndex = aIndex => {\n let realIndex = aIndex - swiper.virtual.slidesBefore;\n if (realIndex < 0) {\n realIndex = swiper.virtual.slides.length + realIndex;\n }\n if (realIndex >= swiper.virtual.slides.length) {\n realIndex -= swiper.virtual.slides.length;\n }\n return realIndex;\n };\n if (typeof activeIndex === 'undefined') {\n activeIndex = getActiveIndexByTranslate(swiper);\n }\n if (snapGrid.indexOf(translate) >= 0) {\n snapIndex = snapGrid.indexOf(translate);\n } else {\n const skip = Math.min(params.slidesPerGroupSkip, activeIndex);\n snapIndex = skip + Math.floor((activeIndex - skip) / params.slidesPerGroup);\n }\n if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n if (activeIndex === previousIndex) {\n if (snapIndex !== previousSnapIndex) {\n swiper.snapIndex = snapIndex;\n swiper.emit('snapIndexChange');\n }\n if (swiper.params.loop && swiper.virtual && swiper.params.virtual.enabled) {\n swiper.realIndex = getVirtualRealIndex(activeIndex);\n }\n return;\n }\n // Get real index\n let realIndex;\n if (swiper.virtual && params.virtual.enabled && params.loop) {\n realIndex = getVirtualRealIndex(activeIndex);\n } else if (swiper.slides[activeIndex]) {\n realIndex = parseInt(swiper.slides[activeIndex].getAttribute('data-swiper-slide-index') || activeIndex, 10);\n } else {\n realIndex = activeIndex;\n }\n Object.assign(swiper, {\n snapIndex,\n realIndex,\n previousIndex,\n activeIndex\n });\n swiper.emit('activeIndexChange');\n swiper.emit('snapIndexChange');\n if (previousRealIndex !== realIndex) {\n swiper.emit('realIndexChange');\n }\n if (swiper.initialized || swiper.params.runCallbacksOnInit) {\n swiper.emit('slideChange');\n }\n}","export default function updateClickedSlide(e) {\n const swiper = this;\n const params = swiper.params;\n const slide = e.closest(`.${params.slideClass}, swiper-slide`);\n let slideFound = false;\n let slideIndex;\n if (slide) {\n for (let i = 0; i < swiper.slides.length; i += 1) {\n if (swiper.slides[i] === slide) {\n slideFound = true;\n slideIndex = i;\n break;\n }\n }\n }\n if (slide && slideFound) {\n swiper.clickedSlide = slide;\n if (swiper.virtual && swiper.params.virtual.enabled) {\n swiper.clickedIndex = parseInt(slide.getAttribute('data-swiper-slide-index'), 10);\n } else {\n swiper.clickedIndex = slideIndex;\n }\n } else {\n swiper.clickedSlide = undefined;\n swiper.clickedIndex = undefined;\n return;\n }\n if (params.slideToClickedSlide && swiper.clickedIndex !== undefined && swiper.clickedIndex !== swiper.activeIndex) {\n swiper.slideToClickedSlide();\n }\n}","import getTranslate from './getTranslate.js';\nimport setTranslate from './setTranslate.js';\nimport minTranslate from './minTranslate.js';\nimport maxTranslate from './maxTranslate.js';\nimport translateTo from './translateTo.js';\nexport default {\n getTranslate,\n setTranslate,\n minTranslate,\n maxTranslate,\n translateTo\n};","import { getTranslate } from '../../shared/utils.js';\nexport default function getSwiperTranslate(axis = this.isHorizontal() ? 'x' : 'y') {\n const swiper = this;\n const {\n params,\n rtlTranslate: rtl,\n translate,\n wrapperEl\n } = swiper;\n if (params.virtualTranslate) {\n return rtl ? -translate : translate;\n }\n if (params.cssMode) {\n return translate;\n }\n let currentTranslate = getTranslate(wrapperEl, axis);\n if (rtl) currentTranslate = -currentTranslate;\n return currentTranslate || 0;\n}","export default function setTranslate(translate, byController) {\n const swiper = this;\n const {\n rtlTranslate: rtl,\n params,\n wrapperEl,\n progress\n } = swiper;\n let x = 0;\n let y = 0;\n const z = 0;\n if (swiper.isHorizontal()) {\n x = rtl ? -translate : translate;\n } else {\n y = translate;\n }\n if (params.roundLengths) {\n x = Math.floor(x);\n y = Math.floor(y);\n }\n if (params.cssMode) {\n wrapperEl[swiper.isHorizontal() ? 'scrollLeft' : 'scrollTop'] = swiper.isHorizontal() ? -x : -y;\n } else if (!params.virtualTranslate) {\n wrapperEl.style.transform = `translate3d(${x}px, ${y}px, ${z}px)`;\n }\n swiper.previousTranslate = swiper.translate;\n swiper.translate = swiper.isHorizontal() ? x : y;\n\n // Check if we need to update progress\n let newProgress;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n if (translatesDiff === 0) {\n newProgress = 0;\n } else {\n newProgress = (translate - swiper.minTranslate()) / translatesDiff;\n }\n if (newProgress !== progress) {\n swiper.updateProgress(translate);\n }\n swiper.emit('setTranslate', swiper.translate, byController);\n}","export default function minTranslate() {\n return -this.snapGrid[0];\n}","export default function maxTranslate() {\n return -this.snapGrid[this.snapGrid.length - 1];\n}","import { animateCSSModeScroll } from '../../shared/utils.js';\nexport default function translateTo(translate = 0, speed = this.params.speed, runCallbacks = true, translateBounds = true, internal) {\n const swiper = this;\n const {\n params,\n wrapperEl\n } = swiper;\n if (swiper.animating && params.preventInteractionOnTransition) {\n return false;\n }\n const minTranslate = swiper.minTranslate();\n const maxTranslate = swiper.maxTranslate();\n let newTranslate;\n if (translateBounds && translate > minTranslate) newTranslate = minTranslate;else if (translateBounds && translate < maxTranslate) newTranslate = maxTranslate;else newTranslate = translate;\n\n // Update progress\n swiper.updateProgress(newTranslate);\n if (params.cssMode) {\n const isH = swiper.isHorizontal();\n if (speed === 0) {\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;\n } else {\n if (!swiper.support.smoothScroll) {\n animateCSSModeScroll({\n swiper,\n targetPosition: -newTranslate,\n side: isH ? 'left' : 'top'\n });\n return true;\n }\n wrapperEl.scrollTo({\n [isH ? 'left' : 'top']: -newTranslate,\n behavior: 'smooth'\n });\n }\n return true;\n }\n if (speed === 0) {\n swiper.setTransition(0);\n swiper.setTranslate(newTranslate);\n if (runCallbacks) {\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.emit('transitionEnd');\n }\n } else {\n swiper.setTransition(speed);\n swiper.setTranslate(newTranslate);\n if (runCallbacks) {\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.emit('transitionStart');\n }\n if (!swiper.animating) {\n swiper.animating = true;\n if (!swiper.onTranslateToWrapperTransitionEnd) {\n swiper.onTranslateToWrapperTransitionEnd = function transitionEnd(e) {\n if (!swiper || swiper.destroyed) return;\n if (e.target !== this) return;\n swiper.wrapperEl.removeEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n swiper.onTranslateToWrapperTransitionEnd = null;\n delete swiper.onTranslateToWrapperTransitionEnd;\n if (runCallbacks) {\n swiper.emit('transitionEnd');\n }\n };\n }\n swiper.wrapperEl.addEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n }\n }\n return true;\n}","export default function transitionEmit({\n swiper,\n runCallbacks,\n direction,\n step\n}) {\n const {\n activeIndex,\n previousIndex\n } = swiper;\n let dir = direction;\n if (!dir) {\n if (activeIndex > previousIndex) dir = 'next';else if (activeIndex < previousIndex) dir = 'prev';else dir = 'reset';\n }\n swiper.emit(`transition${step}`);\n if (runCallbacks && activeIndex !== previousIndex) {\n if (dir === 'reset') {\n swiper.emit(`slideResetTransition${step}`);\n return;\n }\n swiper.emit(`slideChangeTransition${step}`);\n if (dir === 'next') {\n swiper.emit(`slideNextTransition${step}`);\n } else {\n swiper.emit(`slidePrevTransition${step}`);\n }\n }\n}","import slideTo from './slideTo.js';\nimport slideToLoop from './slideToLoop.js';\nimport slideNext from './slideNext.js';\nimport slidePrev from './slidePrev.js';\nimport slideReset from './slideReset.js';\nimport slideToClosest from './slideToClosest.js';\nimport slideToClickedSlide from './slideToClickedSlide.js';\nexport default {\n slideTo,\n slideToLoop,\n slideNext,\n slidePrev,\n slideReset,\n slideToClosest,\n slideToClickedSlide\n};","import { animateCSSModeScroll } from '../../shared/utils.js';\nexport default function slideTo(index = 0, speed = this.params.speed, runCallbacks = true, internal, initial) {\n if (typeof index === 'string') {\n index = parseInt(index, 10);\n }\n const swiper = this;\n let slideIndex = index;\n if (slideIndex < 0) slideIndex = 0;\n const {\n params,\n snapGrid,\n slidesGrid,\n previousIndex,\n activeIndex,\n rtlTranslate: rtl,\n wrapperEl,\n enabled\n } = swiper;\n if (swiper.animating && params.preventInteractionOnTransition || !enabled && !internal && !initial) {\n return false;\n }\n const skip = Math.min(swiper.params.slidesPerGroupSkip, slideIndex);\n let snapIndex = skip + Math.floor((slideIndex - skip) / swiper.params.slidesPerGroup);\n if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n const translate = -snapGrid[snapIndex];\n // Normalize slideIndex\n if (params.normalizeSlideIndex) {\n for (let i = 0; i < slidesGrid.length; i += 1) {\n const normalizedTranslate = -Math.floor(translate * 100);\n const normalizedGrid = Math.floor(slidesGrid[i] * 100);\n const normalizedGridNext = Math.floor(slidesGrid[i + 1] * 100);\n if (typeof slidesGrid[i + 1] !== 'undefined') {\n if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext - (normalizedGridNext - normalizedGrid) / 2) {\n slideIndex = i;\n } else if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext) {\n slideIndex = i + 1;\n }\n } else if (normalizedTranslate >= normalizedGrid) {\n slideIndex = i;\n }\n }\n }\n // Directions locks\n if (swiper.initialized && slideIndex !== activeIndex) {\n if (!swiper.allowSlideNext && translate < swiper.translate && translate < swiper.minTranslate()) {\n return false;\n }\n if (!swiper.allowSlidePrev && translate > swiper.translate && translate > swiper.maxTranslate()) {\n if ((activeIndex || 0) !== slideIndex) {\n return false;\n }\n }\n }\n if (slideIndex !== (previousIndex || 0) && runCallbacks) {\n swiper.emit('beforeSlideChangeStart');\n }\n\n // Update progress\n swiper.updateProgress(translate);\n let direction;\n if (slideIndex > activeIndex) direction = 'next';else if (slideIndex < activeIndex) direction = 'prev';else direction = 'reset';\n\n // Update Index\n if (rtl && -translate === swiper.translate || !rtl && translate === swiper.translate) {\n swiper.updateActiveIndex(slideIndex);\n // Update Height\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n swiper.updateSlidesClasses();\n if (params.effect !== 'slide') {\n swiper.setTranslate(translate);\n }\n if (direction !== 'reset') {\n swiper.transitionStart(runCallbacks, direction);\n swiper.transitionEnd(runCallbacks, direction);\n }\n return false;\n }\n if (params.cssMode) {\n const isH = swiper.isHorizontal();\n const t = rtl ? translate : -translate;\n if (speed === 0) {\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n if (isVirtual) {\n swiper.wrapperEl.style.scrollSnapType = 'none';\n swiper._immediateVirtual = true;\n }\n if (isVirtual && !swiper._cssModeVirtualInitialSet && swiper.params.initialSlide > 0) {\n swiper._cssModeVirtualInitialSet = true;\n requestAnimationFrame(() => {\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;\n });\n } else {\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;\n }\n if (isVirtual) {\n requestAnimationFrame(() => {\n swiper.wrapperEl.style.scrollSnapType = '';\n swiper._immediateVirtual = false;\n });\n }\n } else {\n if (!swiper.support.smoothScroll) {\n animateCSSModeScroll({\n swiper,\n targetPosition: t,\n side: isH ? 'left' : 'top'\n });\n return true;\n }\n wrapperEl.scrollTo({\n [isH ? 'left' : 'top']: t,\n behavior: 'smooth'\n });\n }\n return true;\n }\n swiper.setTransition(speed);\n swiper.setTranslate(translate);\n swiper.updateActiveIndex(slideIndex);\n swiper.updateSlidesClasses();\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.transitionStart(runCallbacks, direction);\n if (speed === 0) {\n swiper.transitionEnd(runCallbacks, direction);\n } else if (!swiper.animating) {\n swiper.animating = true;\n if (!swiper.onSlideToWrapperTransitionEnd) {\n swiper.onSlideToWrapperTransitionEnd = function transitionEnd(e) {\n if (!swiper || swiper.destroyed) return;\n if (e.target !== this) return;\n swiper.wrapperEl.removeEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n swiper.onSlideToWrapperTransitionEnd = null;\n delete swiper.onSlideToWrapperTransitionEnd;\n swiper.transitionEnd(runCallbacks, direction);\n };\n }\n swiper.wrapperEl.addEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n }\n return true;\n}","export default function slideToLoop(index = 0, speed = this.params.speed, runCallbacks = true, internal) {\n if (typeof index === 'string') {\n const indexAsNumber = parseInt(index, 10);\n index = indexAsNumber;\n }\n const swiper = this;\n let newIndex = index;\n if (swiper.params.loop) {\n if (swiper.virtual && swiper.params.virtual.enabled) {\n // eslint-disable-next-line\n newIndex = newIndex + swiper.virtual.slidesBefore;\n } else {\n newIndex = swiper.getSlideIndex(swiper.slides.filter(slideEl => slideEl.getAttribute('data-swiper-slide-index') * 1 === newIndex)[0]);\n }\n }\n return swiper.slideTo(newIndex, speed, runCallbacks, internal);\n}","/* eslint no-unused-vars: \"off\" */\nexport default function slideNext(speed = this.params.speed, runCallbacks = true, internal) {\n const swiper = this;\n const {\n enabled,\n params,\n animating\n } = swiper;\n if (!enabled) return swiper;\n let perGroup = params.slidesPerGroup;\n if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {\n perGroup = Math.max(swiper.slidesPerViewDynamic('current', true), 1);\n }\n const increment = swiper.activeIndex < params.slidesPerGroupSkip ? 1 : perGroup;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n if (params.loop) {\n if (animating && !isVirtual && params.loopPreventsSliding) return false;\n swiper.loopFix({\n direction: 'next'\n });\n // eslint-disable-next-line\n swiper._clientLeft = swiper.wrapperEl.clientLeft;\n }\n if (params.rewind && swiper.isEnd) {\n return swiper.slideTo(0, speed, runCallbacks, internal);\n }\n return swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);\n}","/* eslint no-unused-vars: \"off\" */\nexport default function slidePrev(speed = this.params.speed, runCallbacks = true, internal) {\n const swiper = this;\n const {\n params,\n snapGrid,\n slidesGrid,\n rtlTranslate,\n enabled,\n animating\n } = swiper;\n if (!enabled) return swiper;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n if (params.loop) {\n if (animating && !isVirtual && params.loopPreventsSliding) return false;\n swiper.loopFix({\n direction: 'prev'\n });\n // eslint-disable-next-line\n swiper._clientLeft = swiper.wrapperEl.clientLeft;\n }\n const translate = rtlTranslate ? swiper.translate : -swiper.translate;\n function normalize(val) {\n if (val < 0) return -Math.floor(Math.abs(val));\n return Math.floor(val);\n }\n const normalizedTranslate = normalize(translate);\n const normalizedSnapGrid = snapGrid.map(val => normalize(val));\n let prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1];\n if (typeof prevSnap === 'undefined' && params.cssMode) {\n let prevSnapIndex;\n snapGrid.forEach((snap, snapIndex) => {\n if (normalizedTranslate >= snap) {\n // prevSnap = snap;\n prevSnapIndex = snapIndex;\n }\n });\n if (typeof prevSnapIndex !== 'undefined') {\n prevSnap = snapGrid[prevSnapIndex > 0 ? prevSnapIndex - 1 : prevSnapIndex];\n }\n }\n let prevIndex = 0;\n if (typeof prevSnap !== 'undefined') {\n prevIndex = slidesGrid.indexOf(prevSnap);\n if (prevIndex < 0) prevIndex = swiper.activeIndex - 1;\n if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {\n prevIndex = prevIndex - swiper.slidesPerViewDynamic('previous', true) + 1;\n prevIndex = Math.max(prevIndex, 0);\n }\n }\n if (params.rewind && swiper.isBeginning) {\n const lastIndex = swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual ? swiper.virtual.slides.length - 1 : swiper.slides.length - 1;\n return swiper.slideTo(lastIndex, speed, runCallbacks, internal);\n }\n return swiper.slideTo(prevIndex, speed, runCallbacks, internal);\n}","/* eslint no-unused-vars: \"off\" */\nexport default function slideReset(speed = this.params.speed, runCallbacks = true, internal) {\n const swiper = this;\n return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal);\n}","/* eslint no-unused-vars: \"off\" */\nexport default function slideToClosest(speed = this.params.speed, runCallbacks = true, internal, threshold = 0.5) {\n const swiper = this;\n let index = swiper.activeIndex;\n const skip = Math.min(swiper.params.slidesPerGroupSkip, index);\n const snapIndex = skip + Math.floor((index - skip) / swiper.params.slidesPerGroup);\n const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n if (translate >= swiper.snapGrid[snapIndex]) {\n // The current translate is on or after the current snap index, so the choice\n // is between the current index and the one after it.\n const currentSnap = swiper.snapGrid[snapIndex];\n const nextSnap = swiper.snapGrid[snapIndex + 1];\n if (translate - currentSnap > (nextSnap - currentSnap) * threshold) {\n index += swiper.params.slidesPerGroup;\n }\n } else {\n // The current translate is before the current snap index, so the choice\n // is between the current index and the one before it.\n const prevSnap = swiper.snapGrid[snapIndex - 1];\n const currentSnap = swiper.snapGrid[snapIndex];\n if (translate - prevSnap <= (currentSnap - prevSnap) * threshold) {\n index -= swiper.params.slidesPerGroup;\n }\n }\n index = Math.max(index, 0);\n index = Math.min(index, swiper.slidesGrid.length - 1);\n return swiper.slideTo(index, speed, runCallbacks, internal);\n}","import { elementChildren, nextTick } from '../../shared/utils.js';\nexport default function slideToClickedSlide() {\n const swiper = this;\n const {\n params,\n slidesEl\n } = swiper;\n const slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : params.slidesPerView;\n let slideToIndex = swiper.clickedIndex;\n let realIndex;\n const slideSelector = swiper.isElement ? `swiper-slide` : `.${params.slideClass}`;\n if (params.loop) {\n if (swiper.animating) return;\n realIndex = parseInt(swiper.clickedSlide.getAttribute('data-swiper-slide-index'), 10);\n if (params.centeredSlides) {\n if (slideToIndex < swiper.loopedSlides - slidesPerView / 2 || slideToIndex > swiper.slides.length - swiper.loopedSlides + slidesPerView / 2) {\n swiper.loopFix();\n slideToIndex = swiper.getSlideIndex(elementChildren(slidesEl, `${slideSelector}[data-swiper-slide-index=\"${realIndex}\"]`)[0]);\n nextTick(() => {\n swiper.slideTo(slideToIndex);\n });\n } else {\n swiper.slideTo(slideToIndex);\n }\n } else if (slideToIndex > swiper.slides.length - slidesPerView) {\n swiper.loopFix();\n slideToIndex = swiper.getSlideIndex(elementChildren(slidesEl, `${slideSelector}[data-swiper-slide-index=\"${realIndex}\"]`)[0]);\n nextTick(() => {\n swiper.slideTo(slideToIndex);\n });\n } else {\n swiper.slideTo(slideToIndex);\n }\n } else {\n swiper.slideTo(slideToIndex);\n }\n}","import loopCreate from './loopCreate.js';\nimport loopFix from './loopFix.js';\nimport loopDestroy from './loopDestroy.js';\nexport default {\n loopCreate,\n loopFix,\n loopDestroy\n};","import { elementChildren } from '../../shared/utils.js';\nexport default function loopCreate(slideRealIndex) {\n const swiper = this;\n const {\n params,\n slidesEl\n } = swiper;\n if (!params.loop || swiper.virtual && swiper.params.virtual.enabled) return;\n const slides = elementChildren(slidesEl, `.${params.slideClass}, swiper-slide`);\n slides.forEach((el, index) => {\n el.setAttribute('data-swiper-slide-index', index);\n });\n swiper.loopFix({\n slideRealIndex,\n direction: params.centeredSlides ? undefined : 'next'\n });\n}","export default function loopFix({\n slideRealIndex,\n slideTo = true,\n direction,\n setTranslate,\n activeSlideIndex,\n byController,\n byMousewheel\n} = {}) {\n const swiper = this;\n if (!swiper.params.loop) return;\n swiper.emit('beforeLoopFix');\n const {\n slides,\n allowSlidePrev,\n allowSlideNext,\n slidesEl,\n params\n } = swiper;\n swiper.allowSlidePrev = true;\n swiper.allowSlideNext = true;\n if (swiper.virtual && params.virtual.enabled) {\n if (slideTo) {\n if (!params.centeredSlides && swiper.snapIndex === 0) {\n swiper.slideTo(swiper.virtual.slides.length, 0, false, true);\n } else if (params.centeredSlides && swiper.snapIndex < params.slidesPerView) {\n swiper.slideTo(swiper.virtual.slides.length + swiper.snapIndex, 0, false, true);\n } else if (swiper.snapIndex === swiper.snapGrid.length - 1) {\n swiper.slideTo(swiper.virtual.slidesBefore, 0, false, true);\n }\n }\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n swiper.emit('loopFix');\n return;\n }\n const slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : Math.ceil(parseFloat(params.slidesPerView, 10));\n let loopedSlides = params.loopedSlides || slidesPerView;\n if (loopedSlides % params.slidesPerGroup !== 0) {\n loopedSlides += params.slidesPerGroup - loopedSlides % params.slidesPerGroup;\n }\n swiper.loopedSlides = loopedSlides;\n const prependSlidesIndexes = [];\n const appendSlidesIndexes = [];\n let activeIndex = swiper.activeIndex;\n if (typeof activeSlideIndex === 'undefined') {\n activeSlideIndex = swiper.getSlideIndex(swiper.slides.filter(el => el.classList.contains('swiper-slide-active'))[0]);\n } else {\n activeIndex = activeSlideIndex;\n }\n const isNext = direction === 'next' || !direction;\n const isPrev = direction === 'prev' || !direction;\n let slidesPrepended = 0;\n let slidesAppended = 0;\n // prepend last slides before start\n if (activeSlideIndex < loopedSlides) {\n slidesPrepended = Math.max(loopedSlides - activeSlideIndex, params.slidesPerGroup);\n for (let i = 0; i < loopedSlides - activeSlideIndex; i += 1) {\n const index = i - Math.floor(i / slides.length) * slides.length;\n prependSlidesIndexes.push(slides.length - index - 1);\n }\n } else if (activeSlideIndex /* + slidesPerView */ > swiper.slides.length - loopedSlides * 2) {\n slidesAppended = Math.max(activeSlideIndex - (swiper.slides.length - loopedSlides * 2), params.slidesPerGroup);\n for (let i = 0; i < slidesAppended; i += 1) {\n const index = i - Math.floor(i / slides.length) * slides.length;\n appendSlidesIndexes.push(index);\n }\n }\n if (isPrev) {\n prependSlidesIndexes.forEach(index => {\n slidesEl.prepend(swiper.slides[index]);\n });\n }\n if (isNext) {\n appendSlidesIndexes.forEach(index => {\n slidesEl.append(swiper.slides[index]);\n });\n }\n swiper.recalcSlides();\n if (params.watchSlidesProgress) {\n swiper.updateSlidesOffset();\n }\n if (slideTo) {\n if (prependSlidesIndexes.length > 0 && isPrev) {\n if (typeof slideRealIndex === 'undefined') {\n const currentSlideTranslate = swiper.slidesGrid[activeIndex];\n const newSlideTranslate = swiper.slidesGrid[activeIndex + slidesPrepended];\n const diff = newSlideTranslate - currentSlideTranslate;\n if (byMousewheel) {\n swiper.setTranslate(swiper.translate - diff);\n } else {\n swiper.slideTo(activeIndex + slidesPrepended, 0, false, true);\n if (setTranslate) {\n swiper.touches[swiper.isHorizontal() ? 'startX' : 'startY'] += diff;\n }\n }\n } else {\n if (setTranslate) {\n swiper.slideToLoop(slideRealIndex, 0, false, true);\n }\n }\n } else if (appendSlidesIndexes.length > 0 && isNext) {\n if (typeof slideRealIndex === 'undefined') {\n const currentSlideTranslate = swiper.slidesGrid[activeIndex];\n const newSlideTranslate = swiper.slidesGrid[activeIndex - slidesAppended];\n const diff = newSlideTranslate - currentSlideTranslate;\n if (byMousewheel) {\n swiper.setTranslate(swiper.translate - diff);\n } else {\n swiper.slideTo(activeIndex - slidesAppended, 0, false, true);\n if (setTranslate) {\n swiper.touches[swiper.isHorizontal() ? 'startX' : 'startY'] += diff;\n }\n }\n } else {\n swiper.slideToLoop(slideRealIndex, 0, false, true);\n }\n }\n }\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n if (swiper.controller && swiper.controller.control && !byController) {\n const loopParams = {\n slideRealIndex,\n slideTo: false,\n direction,\n setTranslate,\n activeSlideIndex,\n byController: true\n };\n if (Array.isArray(swiper.controller.control)) {\n swiper.controller.control.forEach(c => {\n if (c.params.loop) c.loopFix(loopParams);\n });\n } else if (swiper.controller.control instanceof swiper.constructor && swiper.controller.control.params.loop) {\n swiper.controller.control.loopFix(loopParams);\n }\n }\n swiper.emit('loopFix');\n}","export default function loopDestroy() {\n const swiper = this;\n const {\n slides,\n params,\n slidesEl\n } = swiper;\n if (!params.loop || swiper.virtual && swiper.params.virtual.enabled) return;\n swiper.recalcSlides();\n const newSlidesOrder = [];\n slides.forEach(slideEl => {\n const index = typeof slideEl.swiperSlideIndex === 'undefined' ? slideEl.getAttribute('data-swiper-slide-index') * 1 : slideEl.swiperSlideIndex;\n newSlidesOrder[index] = slideEl;\n });\n slides.forEach(slideEl => {\n slideEl.removeAttribute('data-swiper-slide-index');\n });\n newSlidesOrder.forEach(slideEl => {\n slidesEl.append(slideEl);\n });\n swiper.recalcSlides();\n swiper.slideTo(swiper.realIndex, 0);\n}","import { getWindow, getDocument } from 'ssr-window';\nimport { now } from '../../shared/utils.js';\n\n// Modified from https://stackoverflow.com/questions/54520554/custom-element-getrootnode-closest-function-crossing-multiple-parent-shadowd\nfunction closestElement(selector, base = this) {\n function __closestFrom(el) {\n if (!el || el === getDocument() || el === getWindow()) return null;\n if (el.assignedSlot) el = el.assignedSlot;\n const found = el.closest(selector);\n if (!found && !el.getRootNode) {\n return null;\n }\n return found || __closestFrom(el.getRootNode().host);\n }\n return __closestFrom(base);\n}\nexport default function onTouchStart(event) {\n const swiper = this;\n const document = getDocument();\n const window = getWindow();\n const data = swiper.touchEventsData;\n data.evCache.push(event);\n const {\n params,\n touches,\n enabled\n } = swiper;\n if (!enabled) return;\n if (!params.simulateTouch && event.pointerType === 'mouse') return;\n if (swiper.animating && params.preventInteractionOnTransition) {\n return;\n }\n if (!swiper.animating && params.cssMode && params.loop) {\n swiper.loopFix();\n }\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n let targetEl = e.target;\n if (params.touchEventsTarget === 'wrapper') {\n if (!swiper.wrapperEl.contains(targetEl)) return;\n }\n if ('which' in e && e.which === 3) return;\n if ('button' in e && e.button > 0) return;\n if (data.isTouched && data.isMoved) return;\n\n // change target el for shadow root component\n const swipingClassHasValue = !!params.noSwipingClass && params.noSwipingClass !== '';\n // eslint-disable-next-line\n const eventPath = event.composedPath ? event.composedPath() : event.path;\n if (swipingClassHasValue && e.target && e.target.shadowRoot && eventPath) {\n targetEl = eventPath[0];\n }\n const noSwipingSelector = params.noSwipingSelector ? params.noSwipingSelector : `.${params.noSwipingClass}`;\n const isTargetShadow = !!(e.target && e.target.shadowRoot);\n\n // use closestElement for shadow root element to get the actual closest for nested shadow root element\n if (params.noSwiping && (isTargetShadow ? closestElement(noSwipingSelector, targetEl) : targetEl.closest(noSwipingSelector))) {\n swiper.allowClick = true;\n return;\n }\n if (params.swipeHandler) {\n if (!targetEl.closest(params.swipeHandler)) return;\n }\n touches.currentX = e.pageX;\n touches.currentY = e.pageY;\n const startX = touches.currentX;\n const startY = touches.currentY;\n\n // Do NOT start if iOS edge swipe is detected. Otherwise iOS app cannot swipe-to-go-back anymore\n\n const edgeSwipeDetection = params.edgeSwipeDetection || params.iOSEdgeSwipeDetection;\n const edgeSwipeThreshold = params.edgeSwipeThreshold || params.iOSEdgeSwipeThreshold;\n if (edgeSwipeDetection && (startX <= edgeSwipeThreshold || startX >= window.innerWidth - edgeSwipeThreshold)) {\n if (edgeSwipeDetection === 'prevent') {\n event.preventDefault();\n } else {\n return;\n }\n }\n Object.assign(data, {\n isTouched: true,\n isMoved: false,\n allowTouchCallbacks: true,\n isScrolling: undefined,\n startMoving: undefined\n });\n touches.startX = startX;\n touches.startY = startY;\n data.touchStartTime = now();\n swiper.allowClick = true;\n swiper.updateSize();\n swiper.swipeDirection = undefined;\n if (params.threshold > 0) data.allowThresholdMove = false;\n let preventDefault = true;\n if (targetEl.matches(data.focusableElements)) {\n preventDefault = false;\n if (targetEl.nodeName === 'SELECT') {\n data.isTouched = false;\n }\n }\n if (document.activeElement && document.activeElement.matches(data.focusableElements) && document.activeElement !== targetEl) {\n document.activeElement.blur();\n }\n const shouldPreventDefault = preventDefault && swiper.allowTouchMove && params.touchStartPreventDefault;\n if ((params.touchStartForcePreventDefault || shouldPreventDefault) && !targetEl.isContentEditable) {\n e.preventDefault();\n }\n if (swiper.params.freeMode && swiper.params.freeMode.enabled && swiper.freeMode && swiper.animating && !params.cssMode) {\n swiper.freeMode.onTouchStart();\n }\n swiper.emit('touchStart', e);\n}","import { getDocument } from 'ssr-window';\nimport { now } from '../../shared/utils.js';\nexport default function onTouchMove(event) {\n const document = getDocument();\n const swiper = this;\n const data = swiper.touchEventsData;\n const {\n params,\n touches,\n rtlTranslate: rtl,\n enabled\n } = swiper;\n if (!enabled) return;\n if (!params.simulateTouch && event.pointerType === 'mouse') return;\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n if (!data.isTouched) {\n if (data.startMoving && data.isScrolling) {\n swiper.emit('touchMoveOpposite', e);\n }\n return;\n }\n const pointerIndex = data.evCache.findIndex(cachedEv => cachedEv.pointerId === e.pointerId);\n if (pointerIndex >= 0) data.evCache[pointerIndex] = e;\n const targetTouch = data.evCache.length > 1 ? data.evCache[0] : e;\n const pageX = targetTouch.pageX;\n const pageY = targetTouch.pageY;\n if (e.preventedByNestedSwiper) {\n touches.startX = pageX;\n touches.startY = pageY;\n return;\n }\n if (!swiper.allowTouchMove) {\n if (!e.target.matches(data.focusableElements)) {\n swiper.allowClick = false;\n }\n if (data.isTouched) {\n Object.assign(touches, {\n startX: pageX,\n startY: pageY,\n prevX: swiper.touches.currentX,\n prevY: swiper.touches.currentY,\n currentX: pageX,\n currentY: pageY\n });\n data.touchStartTime = now();\n }\n return;\n }\n if (params.touchReleaseOnEdges && !params.loop) {\n if (swiper.isVertical()) {\n // Vertical\n if (pageY < touches.startY && swiper.translate <= swiper.maxTranslate() || pageY > touches.startY && swiper.translate >= swiper.minTranslate()) {\n data.isTouched = false;\n data.isMoved = false;\n return;\n }\n } else if (pageX < touches.startX && swiper.translate <= swiper.maxTranslate() || pageX > touches.startX && swiper.translate >= swiper.minTranslate()) {\n return;\n }\n }\n if (document.activeElement) {\n if (e.target === document.activeElement && e.target.matches(data.focusableElements)) {\n data.isMoved = true;\n swiper.allowClick = false;\n return;\n }\n }\n if (data.allowTouchCallbacks) {\n swiper.emit('touchMove', e);\n }\n if (e.targetTouches && e.targetTouches.length > 1) return;\n touches.currentX = pageX;\n touches.currentY = pageY;\n const diffX = touches.currentX - touches.startX;\n const diffY = touches.currentY - touches.startY;\n if (swiper.params.threshold && Math.sqrt(diffX ** 2 + diffY ** 2) < swiper.params.threshold) return;\n if (typeof data.isScrolling === 'undefined') {\n let touchAngle;\n if (swiper.isHorizontal() && touches.currentY === touches.startY || swiper.isVertical() && touches.currentX === touches.startX) {\n data.isScrolling = false;\n } else {\n // eslint-disable-next-line\n if (diffX * diffX + diffY * diffY >= 25) {\n touchAngle = Math.atan2(Math.abs(diffY), Math.abs(diffX)) * 180 / Math.PI;\n data.isScrolling = swiper.isHorizontal() ? touchAngle > params.touchAngle : 90 - touchAngle > params.touchAngle;\n }\n }\n }\n if (data.isScrolling) {\n swiper.emit('touchMoveOpposite', e);\n }\n if (typeof data.startMoving === 'undefined') {\n if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) {\n data.startMoving = true;\n }\n }\n if (data.isScrolling || swiper.zoom && swiper.params.zoom && swiper.params.zoom.enabled && data.evCache.length > 1) {\n data.isTouched = false;\n return;\n }\n if (!data.startMoving) {\n return;\n }\n swiper.allowClick = false;\n if (!params.cssMode && e.cancelable) {\n e.preventDefault();\n }\n if (params.touchMoveStopPropagation && !params.nested) {\n e.stopPropagation();\n }\n let diff = swiper.isHorizontal() ? diffX : diffY;\n let touchesDiff = swiper.isHorizontal() ? touches.currentX - touches.previousX : touches.currentY - touches.previousY;\n if (params.oneWayMovement) {\n diff = Math.abs(diff) * (rtl ? 1 : -1);\n touchesDiff = Math.abs(touchesDiff) * (rtl ? 1 : -1);\n }\n touches.diff = diff;\n diff *= params.touchRatio;\n if (rtl) {\n diff = -diff;\n touchesDiff = -touchesDiff;\n }\n const prevTouchesDirection = swiper.touchesDirection;\n swiper.swipeDirection = diff > 0 ? 'prev' : 'next';\n swiper.touchesDirection = touchesDiff > 0 ? 'prev' : 'next';\n const isLoop = swiper.params.loop && !params.cssMode;\n if (!data.isMoved) {\n if (isLoop) {\n swiper.loopFix({\n direction: swiper.swipeDirection\n });\n }\n data.startTranslate = swiper.getTranslate();\n swiper.setTransition(0);\n if (swiper.animating) {\n const evt = new window.CustomEvent('transitionend', {\n bubbles: true,\n cancelable: true\n });\n swiper.wrapperEl.dispatchEvent(evt);\n }\n data.allowMomentumBounce = false;\n // Grab Cursor\n if (params.grabCursor && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n swiper.setGrabCursor(true);\n }\n swiper.emit('sliderFirstMove', e);\n }\n let loopFixed;\n if (data.isMoved && prevTouchesDirection !== swiper.touchesDirection && isLoop && Math.abs(diff) >= 1) {\n // need another loop fix\n swiper.loopFix({\n direction: swiper.swipeDirection,\n setTranslate: true\n });\n loopFixed = true;\n }\n swiper.emit('sliderMove', e);\n data.isMoved = true;\n data.currentTranslate = diff + data.startTranslate;\n let disableParentSwiper = true;\n let resistanceRatio = params.resistanceRatio;\n if (params.touchReleaseOnEdges) {\n resistanceRatio = 0;\n }\n if (diff > 0) {\n if (isLoop && !loopFixed && data.currentTranslate > (params.centeredSlides ? swiper.minTranslate() - swiper.size / 2 : swiper.minTranslate())) {\n swiper.loopFix({\n direction: 'prev',\n setTranslate: true,\n activeSlideIndex: 0\n });\n }\n if (data.currentTranslate > swiper.minTranslate()) {\n disableParentSwiper = false;\n if (params.resistance) {\n data.currentTranslate = swiper.minTranslate() - 1 + (-swiper.minTranslate() + data.startTranslate + diff) ** resistanceRatio;\n }\n }\n } else if (diff < 0) {\n if (isLoop && !loopFixed && data.currentTranslate < (params.centeredSlides ? swiper.maxTranslate() + swiper.size / 2 : swiper.maxTranslate())) {\n swiper.loopFix({\n direction: 'next',\n setTranslate: true,\n activeSlideIndex: swiper.slides.length - (params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : Math.ceil(parseFloat(params.slidesPerView, 10)))\n });\n }\n if (data.currentTranslate < swiper.maxTranslate()) {\n disableParentSwiper = false;\n if (params.resistance) {\n data.currentTranslate = swiper.maxTranslate() + 1 - (swiper.maxTranslate() - data.startTranslate - diff) ** resistanceRatio;\n }\n }\n }\n if (disableParentSwiper) {\n e.preventedByNestedSwiper = true;\n }\n\n // Directions locks\n if (!swiper.allowSlideNext && swiper.swipeDirection === 'next' && data.currentTranslate < data.startTranslate) {\n data.currentTranslate = data.startTranslate;\n }\n if (!swiper.allowSlidePrev && swiper.swipeDirection === 'prev' && data.currentTranslate > data.startTranslate) {\n data.currentTranslate = data.startTranslate;\n }\n if (!swiper.allowSlidePrev && !swiper.allowSlideNext) {\n data.currentTranslate = data.startTranslate;\n }\n\n // Threshold\n if (params.threshold > 0) {\n if (Math.abs(diff) > params.threshold || data.allowThresholdMove) {\n if (!data.allowThresholdMove) {\n data.allowThresholdMove = true;\n touches.startX = touches.currentX;\n touches.startY = touches.currentY;\n data.currentTranslate = data.startTranslate;\n touches.diff = swiper.isHorizontal() ? touches.currentX - touches.startX : touches.currentY - touches.startY;\n return;\n }\n } else {\n data.currentTranslate = data.startTranslate;\n return;\n }\n }\n if (!params.followFinger || params.cssMode) return;\n\n // Update active index in free mode\n if (params.freeMode && params.freeMode.enabled && swiper.freeMode || params.watchSlidesProgress) {\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n if (swiper.params.freeMode && params.freeMode.enabled && swiper.freeMode) {\n swiper.freeMode.onTouchMove();\n }\n // Update progress\n swiper.updateProgress(data.currentTranslate);\n // Update translate\n swiper.setTranslate(data.currentTranslate);\n}","import { now, nextTick } from '../../shared/utils.js';\nexport default function onTouchEnd(event) {\n const swiper = this;\n const data = swiper.touchEventsData;\n const pointerIndex = data.evCache.findIndex(cachedEv => cachedEv.pointerId === event.pointerId);\n if (pointerIndex >= 0) {\n data.evCache.splice(pointerIndex, 1);\n }\n if (['pointercancel', 'pointerout', 'pointerleave'].includes(event.type)) {\n const proceed = event.type === 'pointercancel' && (swiper.browser.isSafari || swiper.browser.isWebView);\n if (!proceed) {\n return;\n }\n }\n const {\n params,\n touches,\n rtlTranslate: rtl,\n slidesGrid,\n enabled\n } = swiper;\n if (!enabled) return;\n if (!params.simulateTouch && event.pointerType === 'mouse') return;\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n if (data.allowTouchCallbacks) {\n swiper.emit('touchEnd', e);\n }\n data.allowTouchCallbacks = false;\n if (!data.isTouched) {\n if (data.isMoved && params.grabCursor) {\n swiper.setGrabCursor(false);\n }\n data.isMoved = false;\n data.startMoving = false;\n return;\n }\n // Return Grab Cursor\n if (params.grabCursor && data.isMoved && data.isTouched && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n swiper.setGrabCursor(false);\n }\n\n // Time diff\n const touchEndTime = now();\n const timeDiff = touchEndTime - data.touchStartTime;\n\n // Tap, doubleTap, Click\n if (swiper.allowClick) {\n const pathTree = e.path || e.composedPath && e.composedPath();\n swiper.updateClickedSlide(pathTree && pathTree[0] || e.target);\n swiper.emit('tap click', e);\n if (timeDiff < 300 && touchEndTime - data.lastClickTime < 300) {\n swiper.emit('doubleTap doubleClick', e);\n }\n }\n data.lastClickTime = now();\n nextTick(() => {\n if (!swiper.destroyed) swiper.allowClick = true;\n });\n if (!data.isTouched || !data.isMoved || !swiper.swipeDirection || touches.diff === 0 || data.currentTranslate === data.startTranslate) {\n data.isTouched = false;\n data.isMoved = false;\n data.startMoving = false;\n return;\n }\n data.isTouched = false;\n data.isMoved = false;\n data.startMoving = false;\n let currentPos;\n if (params.followFinger) {\n currentPos = rtl ? swiper.translate : -swiper.translate;\n } else {\n currentPos = -data.currentTranslate;\n }\n if (params.cssMode) {\n return;\n }\n if (swiper.params.freeMode && params.freeMode.enabled) {\n swiper.freeMode.onTouchEnd({\n currentPos\n });\n return;\n }\n\n // Find current slide\n let stopIndex = 0;\n let groupSize = swiper.slidesSizesGrid[0];\n for (let i = 0; i < slidesGrid.length; i += i < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup) {\n const increment = i < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;\n if (typeof slidesGrid[i + increment] !== 'undefined') {\n if (currentPos >= slidesGrid[i] && currentPos < slidesGrid[i + increment]) {\n stopIndex = i;\n groupSize = slidesGrid[i + increment] - slidesGrid[i];\n }\n } else if (currentPos >= slidesGrid[i]) {\n stopIndex = i;\n groupSize = slidesGrid[slidesGrid.length - 1] - slidesGrid[slidesGrid.length - 2];\n }\n }\n let rewindFirstIndex = null;\n let rewindLastIndex = null;\n if (params.rewind) {\n if (swiper.isBeginning) {\n rewindLastIndex = swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual ? swiper.virtual.slides.length - 1 : swiper.slides.length - 1;\n } else if (swiper.isEnd) {\n rewindFirstIndex = 0;\n }\n }\n // Find current slide size\n const ratio = (currentPos - slidesGrid[stopIndex]) / groupSize;\n const increment = stopIndex < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;\n if (timeDiff > params.longSwipesMs) {\n // Long touches\n if (!params.longSwipes) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n if (swiper.swipeDirection === 'next') {\n if (ratio >= params.longSwipesRatio) swiper.slideTo(params.rewind && swiper.isEnd ? rewindFirstIndex : stopIndex + increment);else swiper.slideTo(stopIndex);\n }\n if (swiper.swipeDirection === 'prev') {\n if (ratio > 1 - params.longSwipesRatio) {\n swiper.slideTo(stopIndex + increment);\n } else if (rewindLastIndex !== null && ratio < 0 && Math.abs(ratio) > params.longSwipesRatio) {\n swiper.slideTo(rewindLastIndex);\n } else {\n swiper.slideTo(stopIndex);\n }\n }\n } else {\n // Short swipes\n if (!params.shortSwipes) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n const isNavButtonTarget = swiper.navigation && (e.target === swiper.navigation.nextEl || e.target === swiper.navigation.prevEl);\n if (!isNavButtonTarget) {\n if (swiper.swipeDirection === 'next') {\n swiper.slideTo(rewindFirstIndex !== null ? rewindFirstIndex : stopIndex + increment);\n }\n if (swiper.swipeDirection === 'prev') {\n swiper.slideTo(rewindLastIndex !== null ? rewindLastIndex : stopIndex);\n }\n } else if (e.target === swiper.navigation.nextEl) {\n swiper.slideTo(stopIndex + increment);\n } else {\n swiper.slideTo(stopIndex);\n }\n }\n}","let timeout;\nexport default function onResize() {\n const swiper = this;\n const {\n params,\n el\n } = swiper;\n if (el && el.offsetWidth === 0) return;\n\n // Breakpoints\n if (params.breakpoints) {\n swiper.setBreakpoint();\n }\n\n // Save locks\n const {\n allowSlideNext,\n allowSlidePrev,\n snapGrid\n } = swiper;\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n\n // Disable locks on resize\n swiper.allowSlideNext = true;\n swiper.allowSlidePrev = true;\n swiper.updateSize();\n swiper.updateSlides();\n swiper.updateSlidesClasses();\n const isVirtualLoop = isVirtual && params.loop;\n if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !swiper.isBeginning && !swiper.params.centeredSlides && !isVirtualLoop) {\n swiper.slideTo(swiper.slides.length - 1, 0, false, true);\n } else {\n if (swiper.params.loop && !isVirtual) {\n swiper.slideToLoop(swiper.realIndex, 0, false, true);\n } else {\n swiper.slideTo(swiper.activeIndex, 0, false, true);\n }\n }\n if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {\n clearTimeout(timeout);\n timeout = setTimeout(() => {\n if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {\n swiper.autoplay.resume();\n }\n }, 500);\n }\n // Return locks after resize\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n if (swiper.params.watchOverflow && snapGrid !== swiper.snapGrid) {\n swiper.checkOverflow();\n }\n}","export default function onClick(e) {\n const swiper = this;\n if (!swiper.enabled) return;\n if (!swiper.allowClick) {\n if (swiper.params.preventClicks) e.preventDefault();\n if (swiper.params.preventClicksPropagation && swiper.animating) {\n e.stopPropagation();\n e.stopImmediatePropagation();\n }\n }\n}","export default function onScroll() {\n const swiper = this;\n const {\n wrapperEl,\n rtlTranslate,\n enabled\n } = swiper;\n if (!enabled) return;\n swiper.previousTranslate = swiper.translate;\n if (swiper.isHorizontal()) {\n swiper.translate = -wrapperEl.scrollLeft;\n } else {\n swiper.translate = -wrapperEl.scrollTop;\n }\n // eslint-disable-next-line\n if (swiper.translate === 0) swiper.translate = 0;\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n let newProgress;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n if (translatesDiff === 0) {\n newProgress = 0;\n } else {\n newProgress = (swiper.translate - swiper.minTranslate()) / translatesDiff;\n }\n if (newProgress !== swiper.progress) {\n swiper.updateProgress(rtlTranslate ? -swiper.translate : swiper.translate);\n }\n swiper.emit('setTranslate', swiper.translate, false);\n}","export const processLazyPreloader = (swiper, imageEl) => {\n if (!swiper || swiper.destroyed || !swiper.params) return;\n const slideSelector = () => swiper.isElement ? `swiper-slide` : `.${swiper.params.slideClass}`;\n const slideEl = imageEl.closest(slideSelector());\n if (slideEl) {\n const lazyEl = slideEl.querySelector(`.${swiper.params.lazyPreloaderClass}`);\n if (lazyEl) lazyEl.remove();\n }\n};","import { processLazyPreloader } from '../../shared/process-lazy-preloader.js';\nexport default function onLoad(e) {\n const swiper = this;\n processLazyPreloader(swiper, e.target);\n swiper.update();\n}","import { getDocument } from 'ssr-window';\nimport onTouchStart from './onTouchStart.js';\nimport onTouchMove from './onTouchMove.js';\nimport onTouchEnd from './onTouchEnd.js';\nimport onResize from './onResize.js';\nimport onClick from './onClick.js';\nimport onScroll from './onScroll.js';\nimport onLoad from './onLoad.js';\nlet dummyEventAttached = false;\nfunction dummyEventListener() {}\nconst events = (swiper, method) => {\n const document = getDocument();\n const {\n params,\n el,\n wrapperEl,\n device\n } = swiper;\n const capture = !!params.nested;\n const domMethod = method === 'on' ? 'addEventListener' : 'removeEventListener';\n const swiperMethod = method;\n\n // Touch Events\n el[domMethod]('pointerdown', swiper.onTouchStart, {\n passive: false\n });\n document[domMethod]('pointermove', swiper.onTouchMove, {\n passive: false,\n capture\n });\n document[domMethod]('pointerup', swiper.onTouchEnd, {\n passive: true\n });\n document[domMethod]('pointercancel', swiper.onTouchEnd, {\n passive: true\n });\n document[domMethod]('pointerout', swiper.onTouchEnd, {\n passive: true\n });\n document[domMethod]('pointerleave', swiper.onTouchEnd, {\n passive: true\n });\n\n // Prevent Links Clicks\n if (params.preventClicks || params.preventClicksPropagation) {\n el[domMethod]('click', swiper.onClick, true);\n }\n if (params.cssMode) {\n wrapperEl[domMethod]('scroll', swiper.onScroll);\n }\n\n // Resize handler\n if (params.updateOnWindowResize) {\n swiper[swiperMethod](device.ios || device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate', onResize, true);\n } else {\n swiper[swiperMethod]('observerUpdate', onResize, true);\n }\n\n // Images loader\n el[domMethod]('load', swiper.onLoad, {\n capture: true\n });\n};\nfunction attachEvents() {\n const swiper = this;\n const document = getDocument();\n const {\n params\n } = swiper;\n swiper.onTouchStart = onTouchStart.bind(swiper);\n swiper.onTouchMove = onTouchMove.bind(swiper);\n swiper.onTouchEnd = onTouchEnd.bind(swiper);\n if (params.cssMode) {\n swiper.onScroll = onScroll.bind(swiper);\n }\n swiper.onClick = onClick.bind(swiper);\n swiper.onLoad = onLoad.bind(swiper);\n if (!dummyEventAttached) {\n document.addEventListener('touchstart', dummyEventListener);\n dummyEventAttached = true;\n }\n events(swiper, 'on');\n}\nfunction detachEvents() {\n const swiper = this;\n events(swiper, 'off');\n}\nexport default {\n attachEvents,\n detachEvents\n};","import { extend } from '../../shared/utils.js';\nconst isGridEnabled = (swiper, params) => {\n return swiper.grid && params.grid && params.grid.rows > 1;\n};\nexport default function setBreakpoint() {\n const swiper = this;\n const {\n realIndex,\n initialized,\n params,\n el\n } = swiper;\n const breakpoints = params.breakpoints;\n if (!breakpoints || breakpoints && Object.keys(breakpoints).length === 0) return;\n\n // Get breakpoint for window width and update parameters\n const breakpoint = swiper.getBreakpoint(breakpoints, swiper.params.breakpointsBase, swiper.el);\n if (!breakpoint || swiper.currentBreakpoint === breakpoint) return;\n const breakpointOnlyParams = breakpoint in breakpoints ? breakpoints[breakpoint] : undefined;\n const breakpointParams = breakpointOnlyParams || swiper.originalParams;\n const wasMultiRow = isGridEnabled(swiper, params);\n const isMultiRow = isGridEnabled(swiper, breakpointParams);\n const wasEnabled = params.enabled;\n if (wasMultiRow && !isMultiRow) {\n el.classList.remove(`${params.containerModifierClass}grid`, `${params.containerModifierClass}grid-column`);\n swiper.emitContainerClasses();\n } else if (!wasMultiRow && isMultiRow) {\n el.classList.add(`${params.containerModifierClass}grid`);\n if (breakpointParams.grid.fill && breakpointParams.grid.fill === 'column' || !breakpointParams.grid.fill && params.grid.fill === 'column') {\n el.classList.add(`${params.containerModifierClass}grid-column`);\n }\n swiper.emitContainerClasses();\n }\n\n // Toggle navigation, pagination, scrollbar\n ['navigation', 'pagination', 'scrollbar'].forEach(prop => {\n const wasModuleEnabled = params[prop] && params[prop].enabled;\n const isModuleEnabled = breakpointParams[prop] && breakpointParams[prop].enabled;\n if (wasModuleEnabled && !isModuleEnabled) {\n swiper[prop].disable();\n }\n if (!wasModuleEnabled && isModuleEnabled) {\n swiper[prop].enable();\n }\n });\n const directionChanged = breakpointParams.direction && breakpointParams.direction !== params.direction;\n const needsReLoop = params.loop && (breakpointParams.slidesPerView !== params.slidesPerView || directionChanged);\n if (directionChanged && initialized) {\n swiper.changeDirection();\n }\n extend(swiper.params, breakpointParams);\n const isEnabled = swiper.params.enabled;\n Object.assign(swiper, {\n allowTouchMove: swiper.params.allowTouchMove,\n allowSlideNext: swiper.params.allowSlideNext,\n allowSlidePrev: swiper.params.allowSlidePrev\n });\n if (wasEnabled && !isEnabled) {\n swiper.disable();\n } else if (!wasEnabled && isEnabled) {\n swiper.enable();\n }\n swiper.currentBreakpoint = breakpoint;\n swiper.emit('_beforeBreakpoint', breakpointParams);\n if (needsReLoop && initialized) {\n swiper.loopDestroy();\n swiper.loopCreate(realIndex);\n swiper.updateSlides();\n }\n swiper.emit('breakpoint', breakpointParams);\n}","function checkOverflow() {\n const swiper = this;\n const {\n isLocked: wasLocked,\n params\n } = swiper;\n const {\n slidesOffsetBefore\n } = params;\n if (slidesOffsetBefore) {\n const lastSlideIndex = swiper.slides.length - 1;\n const lastSlideRightEdge = swiper.slidesGrid[lastSlideIndex] + swiper.slidesSizesGrid[lastSlideIndex] + slidesOffsetBefore * 2;\n swiper.isLocked = swiper.size > lastSlideRightEdge;\n } else {\n swiper.isLocked = swiper.snapGrid.length === 1;\n }\n if (params.allowSlideNext === true) {\n swiper.allowSlideNext = !swiper.isLocked;\n }\n if (params.allowSlidePrev === true) {\n swiper.allowSlidePrev = !swiper.isLocked;\n }\n if (wasLocked && wasLocked !== swiper.isLocked) {\n swiper.isEnd = false;\n }\n if (wasLocked !== swiper.isLocked) {\n swiper.emit(swiper.isLocked ? 'lock' : 'unlock');\n }\n}\nexport default {\n checkOverflow\n};","export default {\n init: true,\n direction: 'horizontal',\n oneWayMovement: false,\n touchEventsTarget: 'wrapper',\n initialSlide: 0,\n speed: 300,\n cssMode: false,\n updateOnWindowResize: true,\n resizeObserver: true,\n nested: false,\n createElements: false,\n enabled: true,\n focusableElements: 'input, select, option, textarea, button, video, label',\n // Overrides\n width: null,\n height: null,\n //\n preventInteractionOnTransition: false,\n // ssr\n userAgent: null,\n url: null,\n // To support iOS's swipe-to-go-back gesture (when being used in-app).\n edgeSwipeDetection: false,\n edgeSwipeThreshold: 20,\n // Autoheight\n autoHeight: false,\n // Set wrapper width\n setWrapperSize: false,\n // Virtual Translate\n virtualTranslate: false,\n // Effects\n effect: 'slide',\n // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip'\n\n // Breakpoints\n breakpoints: undefined,\n breakpointsBase: 'window',\n // Slides grid\n spaceBetween: 0,\n slidesPerView: 1,\n slidesPerGroup: 1,\n slidesPerGroupSkip: 0,\n slidesPerGroupAuto: false,\n centeredSlides: false,\n centeredSlidesBounds: false,\n slidesOffsetBefore: 0,\n // in px\n slidesOffsetAfter: 0,\n // in px\n normalizeSlideIndex: true,\n centerInsufficientSlides: false,\n // Disable swiper and hide navigation when container not overflow\n watchOverflow: true,\n // Round length\n roundLengths: false,\n // Touches\n touchRatio: 1,\n touchAngle: 45,\n simulateTouch: true,\n shortSwipes: true,\n longSwipes: true,\n longSwipesRatio: 0.5,\n longSwipesMs: 300,\n followFinger: true,\n allowTouchMove: true,\n threshold: 5,\n touchMoveStopPropagation: false,\n touchStartPreventDefault: true,\n touchStartForcePreventDefault: false,\n touchReleaseOnEdges: false,\n // Unique Navigation Elements\n uniqueNavElements: true,\n // Resistance\n resistance: true,\n resistanceRatio: 0.85,\n // Progress\n watchSlidesProgress: false,\n // Cursor\n grabCursor: false,\n // Clicks\n preventClicks: true,\n preventClicksPropagation: true,\n slideToClickedSlide: false,\n // loop\n loop: false,\n loopedSlides: null,\n loopPreventsSliding: true,\n // rewind\n rewind: false,\n // Swiping/no swiping\n allowSlidePrev: true,\n allowSlideNext: true,\n swipeHandler: null,\n // '.swipe-handler',\n noSwiping: true,\n noSwipingClass: 'swiper-no-swiping',\n noSwipingSelector: null,\n // Passive Listeners\n passiveListeners: true,\n maxBackfaceHiddenSlides: 10,\n // NS\n containerModifierClass: 'swiper-',\n // NEW\n slideClass: 'swiper-slide',\n slideActiveClass: 'swiper-slide-active',\n slideVisibleClass: 'swiper-slide-visible',\n slideNextClass: 'swiper-slide-next',\n slidePrevClass: 'swiper-slide-prev',\n wrapperClass: 'swiper-wrapper',\n lazyPreloaderClass: 'swiper-lazy-preloader',\n // Callbacks\n runCallbacksOnInit: true,\n // Internals\n _emitClasses: false\n};","import { extend } from '../shared/utils.js';\nexport default function moduleExtendParams(params, allModulesParams) {\n return function extendParams(obj = {}) {\n const moduleParamName = Object.keys(obj)[0];\n const moduleParams = obj[moduleParamName];\n if (typeof moduleParams !== 'object' || moduleParams === null) {\n extend(allModulesParams, obj);\n return;\n }\n if (['navigation', 'pagination', 'scrollbar'].indexOf(moduleParamName) >= 0 && params[moduleParamName] === true) {\n params[moduleParamName] = {\n auto: true\n };\n }\n if (!(moduleParamName in params && 'enabled' in moduleParams)) {\n extend(allModulesParams, obj);\n return;\n }\n if (params[moduleParamName] === true) {\n params[moduleParamName] = {\n enabled: true\n };\n }\n if (typeof params[moduleParamName] === 'object' && !('enabled' in params[moduleParamName])) {\n params[moduleParamName].enabled = true;\n }\n if (!params[moduleParamName]) params[moduleParamName] = {\n enabled: false\n };\n extend(allModulesParams, obj);\n };\n}","/* eslint no-param-reassign: \"off\" */\nimport { getDocument } from 'ssr-window';\nimport { extend, now, deleteProps, createElement, elementChildren, elementStyle, elementIndex } from '../shared/utils.js';\nimport { getSupport } from '../shared/get-support.js';\nimport { getDevice } from '../shared/get-device.js';\nimport { getBrowser } from '../shared/get-browser.js';\nimport Resize from './modules/resize/resize.js';\nimport Observer from './modules/observer/observer.js';\nimport eventsEmitter from './events-emitter.js';\nimport update from './update/index.js';\nimport translate from './translate/index.js';\nimport transition from './transition/index.js';\nimport slide from './slide/index.js';\nimport loop from './loop/index.js';\nimport grabCursor from './grab-cursor/index.js';\nimport events from './events/index.js';\nimport breakpoints from './breakpoints/index.js';\nimport classes from './classes/index.js';\nimport checkOverflow from './check-overflow/index.js';\nimport defaults from './defaults.js';\nimport moduleExtendParams from './moduleExtendParams.js';\nimport { processLazyPreloader } from '../shared/process-lazy-preloader.js';\nconst prototypes = {\n eventsEmitter,\n update,\n translate,\n transition,\n slide,\n loop,\n grabCursor,\n events,\n breakpoints,\n checkOverflow,\n classes\n};\nconst extendedDefaults = {};\nclass Swiper {\n constructor(...args) {\n let el;\n let params;\n if (args.length === 1 && args[0].constructor && Object.prototype.toString.call(args[0]).slice(8, -1) === 'Object') {\n params = args[0];\n } else {\n [el, params] = args;\n }\n if (!params) params = {};\n params = extend({}, params);\n if (el && !params.el) params.el = el;\n const document = getDocument();\n if (params.el && typeof params.el === 'string' && document.querySelectorAll(params.el).length > 1) {\n const swipers = [];\n document.querySelectorAll(params.el).forEach(containerEl => {\n const newParams = extend({}, params, {\n el: containerEl\n });\n swipers.push(new Swiper(newParams));\n });\n // eslint-disable-next-line no-constructor-return\n return swipers;\n }\n\n // Swiper Instance\n const swiper = this;\n swiper.__swiper__ = true;\n swiper.support = getSupport();\n swiper.device = getDevice({\n userAgent: params.userAgent\n });\n swiper.browser = getBrowser();\n swiper.eventsListeners = {};\n swiper.eventsAnyListeners = [];\n swiper.modules = [...swiper.__modules__];\n if (params.modules && Array.isArray(params.modules)) {\n swiper.modules.push(...params.modules);\n }\n const allModulesParams = {};\n swiper.modules.forEach(mod => {\n mod({\n params,\n swiper,\n extendParams: moduleExtendParams(params, allModulesParams),\n on: swiper.on.bind(swiper),\n once: swiper.once.bind(swiper),\n off: swiper.off.bind(swiper),\n emit: swiper.emit.bind(swiper)\n });\n });\n\n // Extend defaults with modules params\n const swiperParams = extend({}, defaults, allModulesParams);\n\n // Extend defaults with passed params\n swiper.params = extend({}, swiperParams, extendedDefaults, params);\n swiper.originalParams = extend({}, swiper.params);\n swiper.passedParams = extend({}, params);\n\n // add event listeners\n if (swiper.params && swiper.params.on) {\n Object.keys(swiper.params.on).forEach(eventName => {\n swiper.on(eventName, swiper.params.on[eventName]);\n });\n }\n if (swiper.params && swiper.params.onAny) {\n swiper.onAny(swiper.params.onAny);\n }\n\n // Extend Swiper\n Object.assign(swiper, {\n enabled: swiper.params.enabled,\n el,\n // Classes\n classNames: [],\n // Slides\n slides: [],\n slidesGrid: [],\n snapGrid: [],\n slidesSizesGrid: [],\n // isDirection\n isHorizontal() {\n return swiper.params.direction === 'horizontal';\n },\n isVertical() {\n return swiper.params.direction === 'vertical';\n },\n // Indexes\n activeIndex: 0,\n realIndex: 0,\n //\n isBeginning: true,\n isEnd: false,\n // Props\n translate: 0,\n previousTranslate: 0,\n progress: 0,\n velocity: 0,\n animating: false,\n // Locks\n allowSlideNext: swiper.params.allowSlideNext,\n allowSlidePrev: swiper.params.allowSlidePrev,\n // Touch Events\n touchEventsData: {\n isTouched: undefined,\n isMoved: undefined,\n allowTouchCallbacks: undefined,\n touchStartTime: undefined,\n isScrolling: undefined,\n currentTranslate: undefined,\n startTranslate: undefined,\n allowThresholdMove: undefined,\n // Form elements to match\n focusableElements: swiper.params.focusableElements,\n // Last click time\n lastClickTime: now(),\n clickTimeout: undefined,\n // Velocities\n velocities: [],\n allowMomentumBounce: undefined,\n startMoving: undefined,\n evCache: []\n },\n // Clicks\n allowClick: true,\n // Touches\n allowTouchMove: swiper.params.allowTouchMove,\n touches: {\n startX: 0,\n startY: 0,\n currentX: 0,\n currentY: 0,\n diff: 0\n },\n // Images\n imagesToLoad: [],\n imagesLoaded: 0\n });\n swiper.emit('_swiper');\n\n // Init\n if (swiper.params.init) {\n swiper.init();\n }\n\n // Return app instance\n // eslint-disable-next-line no-constructor-return\n return swiper;\n }\n getSlideIndex(slideEl) {\n const {\n slidesEl,\n params\n } = this;\n const slides = elementChildren(slidesEl, `.${params.slideClass}, swiper-slide`);\n const firstSlideIndex = elementIndex(slides[0]);\n return elementIndex(slideEl) - firstSlideIndex;\n }\n recalcSlides() {\n const swiper = this;\n const {\n slidesEl,\n params\n } = swiper;\n swiper.slides = elementChildren(slidesEl, `.${params.slideClass}, swiper-slide`);\n }\n enable() {\n const swiper = this;\n if (swiper.enabled) return;\n swiper.enabled = true;\n if (swiper.params.grabCursor) {\n swiper.setGrabCursor();\n }\n swiper.emit('enable');\n }\n disable() {\n const swiper = this;\n if (!swiper.enabled) return;\n swiper.enabled = false;\n if (swiper.params.grabCursor) {\n swiper.unsetGrabCursor();\n }\n swiper.emit('disable');\n }\n setProgress(progress, speed) {\n const swiper = this;\n progress = Math.min(Math.max(progress, 0), 1);\n const min = swiper.minTranslate();\n const max = swiper.maxTranslate();\n const current = (max - min) * progress + min;\n swiper.translateTo(current, typeof speed === 'undefined' ? 0 : speed);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n emitContainerClasses() {\n const swiper = this;\n if (!swiper.params._emitClasses || !swiper.el) return;\n const cls = swiper.el.className.split(' ').filter(className => {\n return className.indexOf('swiper') === 0 || className.indexOf(swiper.params.containerModifierClass) === 0;\n });\n swiper.emit('_containerClasses', cls.join(' '));\n }\n getSlideClasses(slideEl) {\n const swiper = this;\n if (swiper.destroyed) return '';\n return slideEl.className.split(' ').filter(className => {\n return className.indexOf('swiper-slide') === 0 || className.indexOf(swiper.params.slideClass) === 0;\n }).join(' ');\n }\n emitSlidesClasses() {\n const swiper = this;\n if (!swiper.params._emitClasses || !swiper.el) return;\n const updates = [];\n swiper.slides.forEach(slideEl => {\n const classNames = swiper.getSlideClasses(slideEl);\n updates.push({\n slideEl,\n classNames\n });\n swiper.emit('_slideClass', slideEl, classNames);\n });\n swiper.emit('_slideClasses', updates);\n }\n slidesPerViewDynamic(view = 'current', exact = false) {\n const swiper = this;\n const {\n params,\n slides,\n slidesGrid,\n slidesSizesGrid,\n size: swiperSize,\n activeIndex\n } = swiper;\n let spv = 1;\n if (params.centeredSlides) {\n let slideSize = slides[activeIndex].swiperSlideSize;\n let breakLoop;\n for (let i = activeIndex + 1; i < slides.length; i += 1) {\n if (slides[i] && !breakLoop) {\n slideSize += slides[i].swiperSlideSize;\n spv += 1;\n if (slideSize > swiperSize) breakLoop = true;\n }\n }\n for (let i = activeIndex - 1; i >= 0; i -= 1) {\n if (slides[i] && !breakLoop) {\n slideSize += slides[i].swiperSlideSize;\n spv += 1;\n if (slideSize > swiperSize) breakLoop = true;\n }\n }\n } else {\n // eslint-disable-next-line\n if (view === 'current') {\n for (let i = activeIndex + 1; i < slides.length; i += 1) {\n const slideInView = exact ? slidesGrid[i] + slidesSizesGrid[i] - slidesGrid[activeIndex] < swiperSize : slidesGrid[i] - slidesGrid[activeIndex] < swiperSize;\n if (slideInView) {\n spv += 1;\n }\n }\n } else {\n // previous\n for (let i = activeIndex - 1; i >= 0; i -= 1) {\n const slideInView = slidesGrid[activeIndex] - slidesGrid[i] < swiperSize;\n if (slideInView) {\n spv += 1;\n }\n }\n }\n }\n return spv;\n }\n update() {\n const swiper = this;\n if (!swiper || swiper.destroyed) return;\n const {\n snapGrid,\n params\n } = swiper;\n // Breakpoints\n if (params.breakpoints) {\n swiper.setBreakpoint();\n }\n [...swiper.el.querySelectorAll('[loading=\"lazy\"]')].forEach(imageEl => {\n if (imageEl.complete) {\n processLazyPreloader(swiper, imageEl);\n }\n });\n swiper.updateSize();\n swiper.updateSlides();\n swiper.updateProgress();\n swiper.updateSlidesClasses();\n function setTranslate() {\n const translateValue = swiper.rtlTranslate ? swiper.translate * -1 : swiper.translate;\n const newTranslate = Math.min(Math.max(translateValue, swiper.maxTranslate()), swiper.minTranslate());\n swiper.setTranslate(newTranslate);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n let translated;\n if (swiper.params.freeMode && swiper.params.freeMode.enabled) {\n setTranslate();\n if (swiper.params.autoHeight) {\n swiper.updateAutoHeight();\n }\n } else {\n if ((swiper.params.slidesPerView === 'auto' || swiper.params.slidesPerView > 1) && swiper.isEnd && !swiper.params.centeredSlides) {\n translated = swiper.slideTo(swiper.slides.length - 1, 0, false, true);\n } else {\n translated = swiper.slideTo(swiper.activeIndex, 0, false, true);\n }\n if (!translated) {\n setTranslate();\n }\n }\n if (params.watchOverflow && snapGrid !== swiper.snapGrid) {\n swiper.checkOverflow();\n }\n swiper.emit('update');\n }\n changeDirection(newDirection, needUpdate = true) {\n const swiper = this;\n const currentDirection = swiper.params.direction;\n if (!newDirection) {\n // eslint-disable-next-line\n newDirection = currentDirection === 'horizontal' ? 'vertical' : 'horizontal';\n }\n if (newDirection === currentDirection || newDirection !== 'horizontal' && newDirection !== 'vertical') {\n return swiper;\n }\n swiper.el.classList.remove(`${swiper.params.containerModifierClass}${currentDirection}`);\n swiper.el.classList.add(`${swiper.params.containerModifierClass}${newDirection}`);\n swiper.emitContainerClasses();\n swiper.params.direction = newDirection;\n swiper.slides.forEach(slideEl => {\n if (newDirection === 'vertical') {\n slideEl.style.width = '';\n } else {\n slideEl.style.height = '';\n }\n });\n swiper.emit('changeDirection');\n if (needUpdate) swiper.update();\n return swiper;\n }\n changeLanguageDirection(direction) {\n const swiper = this;\n if (swiper.rtl && direction === 'rtl' || !swiper.rtl && direction === 'ltr') return;\n swiper.rtl = direction === 'rtl';\n swiper.rtlTranslate = swiper.params.direction === 'horizontal' && swiper.rtl;\n if (swiper.rtl) {\n swiper.el.classList.add(`${swiper.params.containerModifierClass}rtl`);\n swiper.el.dir = 'rtl';\n } else {\n swiper.el.classList.remove(`${swiper.params.containerModifierClass}rtl`);\n swiper.el.dir = 'ltr';\n }\n swiper.update();\n }\n mount(element) {\n const swiper = this;\n if (swiper.mounted) return true;\n\n // Find el\n let el = element || swiper.params.el;\n if (typeof el === 'string') {\n el = document.querySelector(el);\n }\n if (!el) {\n return false;\n }\n el.swiper = swiper;\n if (el.shadowEl) {\n swiper.isElement = true;\n }\n const getWrapperSelector = () => {\n return `.${(swiper.params.wrapperClass || '').trim().split(' ').join('.')}`;\n };\n const getWrapper = () => {\n if (el && el.shadowRoot && el.shadowRoot.querySelector) {\n const res = el.shadowRoot.querySelector(getWrapperSelector());\n // Children needs to return slot items\n return res;\n }\n return elementChildren(el, getWrapperSelector())[0];\n };\n // Find Wrapper\n let wrapperEl = getWrapper();\n if (!wrapperEl && swiper.params.createElements) {\n wrapperEl = createElement('div', swiper.params.wrapperClass);\n el.append(wrapperEl);\n elementChildren(el, `.${swiper.params.slideClass}`).forEach(slideEl => {\n wrapperEl.append(slideEl);\n });\n }\n Object.assign(swiper, {\n el,\n wrapperEl,\n slidesEl: swiper.isElement ? el : wrapperEl,\n mounted: true,\n // RTL\n rtl: el.dir.toLowerCase() === 'rtl' || elementStyle(el, 'direction') === 'rtl',\n rtlTranslate: swiper.params.direction === 'horizontal' && (el.dir.toLowerCase() === 'rtl' || elementStyle(el, 'direction') === 'rtl'),\n wrongRTL: elementStyle(wrapperEl, 'display') === '-webkit-box'\n });\n return true;\n }\n init(el) {\n const swiper = this;\n if (swiper.initialized) return swiper;\n const mounted = swiper.mount(el);\n if (mounted === false) return swiper;\n swiper.emit('beforeInit');\n\n // Set breakpoint\n if (swiper.params.breakpoints) {\n swiper.setBreakpoint();\n }\n\n // Add Classes\n swiper.addClasses();\n\n // Update size\n swiper.updateSize();\n\n // Update slides\n swiper.updateSlides();\n if (swiper.params.watchOverflow) {\n swiper.checkOverflow();\n }\n\n // Set Grab Cursor\n if (swiper.params.grabCursor && swiper.enabled) {\n swiper.setGrabCursor();\n }\n\n // Slide To Initial Slide\n if (swiper.params.loop && swiper.virtual && swiper.params.virtual.enabled) {\n swiper.slideTo(swiper.params.initialSlide + swiper.virtual.slidesBefore, 0, swiper.params.runCallbacksOnInit, false, true);\n } else {\n swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit, false, true);\n }\n\n // Create loop\n if (swiper.params.loop) {\n swiper.loopCreate();\n }\n\n // Attach events\n swiper.attachEvents();\n [...swiper.el.querySelectorAll('[loading=\"lazy\"]')].forEach(imageEl => {\n if (imageEl.complete) {\n processLazyPreloader(swiper, imageEl);\n } else {\n imageEl.addEventListener('load', e => {\n processLazyPreloader(swiper, e.target);\n });\n }\n });\n\n // Init Flag\n swiper.initialized = true;\n\n // Emit\n swiper.emit('init');\n swiper.emit('afterInit');\n return swiper;\n }\n destroy(deleteInstance = true, cleanStyles = true) {\n const swiper = this;\n const {\n params,\n el,\n wrapperEl,\n slides\n } = swiper;\n if (typeof swiper.params === 'undefined' || swiper.destroyed) {\n return null;\n }\n swiper.emit('beforeDestroy');\n\n // Init Flag\n swiper.initialized = false;\n\n // Detach events\n swiper.detachEvents();\n\n // Destroy loop\n if (params.loop) {\n swiper.loopDestroy();\n }\n\n // Cleanup styles\n if (cleanStyles) {\n swiper.removeClasses();\n el.removeAttribute('style');\n wrapperEl.removeAttribute('style');\n if (slides && slides.length) {\n slides.forEach(slideEl => {\n slideEl.classList.remove(params.slideVisibleClass, params.slideActiveClass, params.slideNextClass, params.slidePrevClass);\n slideEl.removeAttribute('style');\n slideEl.removeAttribute('data-swiper-slide-index');\n });\n }\n }\n swiper.emit('destroy');\n\n // Detach emitter events\n Object.keys(swiper.eventsListeners).forEach(eventName => {\n swiper.off(eventName);\n });\n if (deleteInstance !== false) {\n swiper.el.swiper = null;\n deleteProps(swiper);\n }\n swiper.destroyed = true;\n return null;\n }\n static extendDefaults(newDefaults) {\n extend(extendedDefaults, newDefaults);\n }\n static get extendedDefaults() {\n return extendedDefaults;\n }\n static get defaults() {\n return defaults;\n }\n static installModule(mod) {\n if (!Swiper.prototype.__modules__) Swiper.prototype.__modules__ = [];\n const modules = Swiper.prototype.__modules__;\n if (typeof mod === 'function' && modules.indexOf(mod) < 0) {\n modules.push(mod);\n }\n }\n static use(module) {\n if (Array.isArray(module)) {\n module.forEach(m => Swiper.installModule(m));\n return Swiper;\n }\n Swiper.installModule(module);\n return Swiper;\n }\n}\nObject.keys(prototypes).forEach(prototypeGroup => {\n Object.keys(prototypes[prototypeGroup]).forEach(protoMethod => {\n Swiper.prototype[protoMethod] = prototypes[prototypeGroup][protoMethod];\n });\n});\nSwiper.use([Resize, Observer]);\nexport default Swiper;","import setTransition from './setTransition.js';\nimport transitionStart from './transitionStart.js';\nimport transitionEnd from './transitionEnd.js';\nexport default {\n setTransition,\n transitionStart,\n transitionEnd\n};","export default function setTransition(duration, byController) {\n const swiper = this;\n if (!swiper.params.cssMode) {\n swiper.wrapperEl.style.transitionDuration = `${duration}ms`;\n }\n swiper.emit('setTransition', duration, byController);\n}","import transitionEmit from './transitionEmit.js';\nexport default function transitionStart(runCallbacks = true, direction) {\n const swiper = this;\n const {\n params\n } = swiper;\n if (params.cssMode) return;\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n transitionEmit({\n swiper,\n runCallbacks,\n direction,\n step: 'Start'\n });\n}","import transitionEmit from './transitionEmit.js';\nexport default function transitionEnd(runCallbacks = true, direction) {\n const swiper = this;\n const {\n params\n } = swiper;\n swiper.animating = false;\n if (params.cssMode) return;\n swiper.setTransition(0);\n transitionEmit({\n swiper,\n runCallbacks,\n direction,\n step: 'End'\n });\n}","import setGrabCursor from './setGrabCursor.js';\nimport unsetGrabCursor from './unsetGrabCursor.js';\nexport default {\n setGrabCursor,\n unsetGrabCursor\n};","export default function setGrabCursor(moving) {\n const swiper = this;\n if (!swiper.params.simulateTouch || swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) return;\n const el = swiper.params.touchEventsTarget === 'container' ? swiper.el : swiper.wrapperEl;\n if (swiper.isElement) {\n swiper.__preventObserver__ = true;\n }\n el.style.cursor = 'move';\n el.style.cursor = moving ? 'grabbing' : 'grab';\n if (swiper.isElement) {\n requestAnimationFrame(() => {\n swiper.__preventObserver__ = false;\n });\n }\n}","export default function unsetGrabCursor() {\n const swiper = this;\n if (swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) {\n return;\n }\n if (swiper.isElement) {\n swiper.__preventObserver__ = true;\n }\n swiper[swiper.params.touchEventsTarget === 'container' ? 'el' : 'wrapperEl'].style.cursor = '';\n if (swiper.isElement) {\n requestAnimationFrame(() => {\n swiper.__preventObserver__ = false;\n });\n }\n}","import setBreakpoint from './setBreakpoint.js';\nimport getBreakpoint from './getBreakpoint.js';\nexport default {\n setBreakpoint,\n getBreakpoint\n};","import { getWindow } from 'ssr-window';\nexport default function getBreakpoint(breakpoints, base = 'window', containerEl) {\n if (!breakpoints || base === 'container' && !containerEl) return undefined;\n let breakpoint = false;\n const window = getWindow();\n const currentHeight = base === 'window' ? window.innerHeight : containerEl.clientHeight;\n const points = Object.keys(breakpoints).map(point => {\n if (typeof point === 'string' && point.indexOf('@') === 0) {\n const minRatio = parseFloat(point.substr(1));\n const value = currentHeight * minRatio;\n return {\n value,\n point\n };\n }\n return {\n value: point,\n point\n };\n });\n points.sort((a, b) => parseInt(a.value, 10) - parseInt(b.value, 10));\n for (let i = 0; i < points.length; i += 1) {\n const {\n point,\n value\n } = points[i];\n if (base === 'window') {\n if (window.matchMedia(`(min-width: ${value}px)`).matches) {\n breakpoint = point;\n }\n } else if (value <= containerEl.clientWidth) {\n breakpoint = point;\n }\n }\n return breakpoint || 'max';\n}","import addClasses from './addClasses.js';\nimport removeClasses from './removeClasses.js';\nexport default {\n addClasses,\n removeClasses\n};","function prepareClasses(entries, prefix) {\n const resultClasses = [];\n entries.forEach(item => {\n if (typeof item === 'object') {\n Object.keys(item).forEach(classNames => {\n if (item[classNames]) {\n resultClasses.push(prefix + classNames);\n }\n });\n } else if (typeof item === 'string') {\n resultClasses.push(prefix + item);\n }\n });\n return resultClasses;\n}\nexport default function addClasses() {\n const swiper = this;\n const {\n classNames,\n params,\n rtl,\n el,\n device\n } = swiper;\n // prettier-ignore\n const suffixes = prepareClasses(['initialized', params.direction, {\n 'free-mode': swiper.params.freeMode && params.freeMode.enabled\n }, {\n 'autoheight': params.autoHeight\n }, {\n 'rtl': rtl\n }, {\n 'grid': params.grid && params.grid.rows > 1\n }, {\n 'grid-column': params.grid && params.grid.rows > 1 && params.grid.fill === 'column'\n }, {\n 'android': device.android\n }, {\n 'ios': device.ios\n }, {\n 'css-mode': params.cssMode\n }, {\n 'centered': params.cssMode && params.centeredSlides\n }, {\n 'watch-progress': params.watchSlidesProgress\n }], params.containerModifierClass);\n classNames.push(...suffixes);\n el.classList.add(...classNames);\n swiper.emitContainerClasses();\n}","export default function removeClasses() {\n const swiper = this;\n const {\n el,\n classNames\n } = swiper;\n el.classList.remove(...classNames);\n swiper.emitContainerClasses();\n}","import { getWindow } from 'ssr-window';\nexport default function Resize({\n swiper,\n on,\n emit\n}) {\n const window = getWindow();\n let observer = null;\n let animationFrame = null;\n const resizeHandler = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n emit('beforeResize');\n emit('resize');\n };\n const createObserver = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n observer = new ResizeObserver(entries => {\n animationFrame = window.requestAnimationFrame(() => {\n const {\n width,\n height\n } = swiper;\n let newWidth = width;\n let newHeight = height;\n entries.forEach(({\n contentBoxSize,\n contentRect,\n target\n }) => {\n if (target && target !== swiper.el) return;\n newWidth = contentRect ? contentRect.width : (contentBoxSize[0] || contentBoxSize).inlineSize;\n newHeight = contentRect ? contentRect.height : (contentBoxSize[0] || contentBoxSize).blockSize;\n });\n if (newWidth !== width || newHeight !== height) {\n resizeHandler();\n }\n });\n });\n observer.observe(swiper.el);\n };\n const removeObserver = () => {\n if (animationFrame) {\n window.cancelAnimationFrame(animationFrame);\n }\n if (observer && observer.unobserve && swiper.el) {\n observer.unobserve(swiper.el);\n observer = null;\n }\n };\n const orientationChangeHandler = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n emit('orientationchange');\n };\n on('init', () => {\n if (swiper.params.resizeObserver && typeof window.ResizeObserver !== 'undefined') {\n createObserver();\n return;\n }\n window.addEventListener('resize', resizeHandler);\n window.addEventListener('orientationchange', orientationChangeHandler);\n });\n on('destroy', () => {\n removeObserver();\n window.removeEventListener('resize', resizeHandler);\n window.removeEventListener('orientationchange', orientationChangeHandler);\n });\n}","import { getWindow } from 'ssr-window';\nimport { elementParents } from '../../../shared/utils.js';\nexport default function Observer({\n swiper,\n extendParams,\n on,\n emit\n}) {\n const observers = [];\n const window = getWindow();\n const attach = (target, options = {}) => {\n const ObserverFunc = window.MutationObserver || window.WebkitMutationObserver;\n const observer = new ObserverFunc(mutations => {\n // The observerUpdate event should only be triggered\n // once despite the number of mutations. Additional\n // triggers are redundant and are very costly\n if (swiper.__preventObserver__) return;\n if (mutations.length === 1) {\n emit('observerUpdate', mutations[0]);\n return;\n }\n const observerUpdate = function observerUpdate() {\n emit('observerUpdate', mutations[0]);\n };\n if (window.requestAnimationFrame) {\n window.requestAnimationFrame(observerUpdate);\n } else {\n window.setTimeout(observerUpdate, 0);\n }\n });\n observer.observe(target, {\n attributes: typeof options.attributes === 'undefined' ? true : options.attributes,\n childList: typeof options.childList === 'undefined' ? true : options.childList,\n characterData: typeof options.characterData === 'undefined' ? true : options.characterData\n });\n observers.push(observer);\n };\n const init = () => {\n if (!swiper.params.observer) return;\n if (swiper.params.observeParents) {\n const containerParents = elementParents(swiper.el);\n for (let i = 0; i < containerParents.length; i += 1) {\n attach(containerParents[i]);\n }\n }\n // Observe container\n attach(swiper.el, {\n childList: swiper.params.observeSlideChildren\n });\n\n // Observe wrapper\n attach(swiper.wrapperEl, {\n attributes: false\n });\n };\n const destroy = () => {\n observers.forEach(observer => {\n observer.disconnect();\n });\n observers.splice(0, observers.length);\n };\n extendParams({\n observer: false,\n observeParents: false,\n observeSlideChildren: false\n });\n on('init', init);\n on('destroy', destroy);\n}","import { createElement, elementChildren } from './utils.js';\nexport default function createElementIfNotDefined(swiper, originalParams, params, checkProps) {\n if (swiper.params.createElements) {\n Object.keys(checkProps).forEach(key => {\n if (!params[key] && params.auto === true) {\n let element = elementChildren(swiper.el, `.${checkProps[key]}`)[0];\n if (!element) {\n element = createElement('div', checkProps[key]);\n element.className = checkProps[key];\n swiper.el.append(element);\n }\n params[key] = element;\n originalParams[key] = element;\n }\n });\n }\n return params;\n}","export default function classesToSelector(classes = '') {\n return `.${classes.trim().replace(/([\\.:!\\/])/g, '\\\\$1') // eslint-disable-line\n .replace(/ /g, '.')}`;\n}","export default function appendSlide(slides) {\n const swiper = this;\n const {\n params,\n slidesEl\n } = swiper;\n if (params.loop) {\n swiper.loopDestroy();\n }\n const appendElement = slideEl => {\n if (typeof slideEl === 'string') {\n const tempDOM = document.createElement('div');\n tempDOM.innerHTML = slideEl;\n slidesEl.append(tempDOM.children[0]);\n tempDOM.innerHTML = '';\n } else {\n slidesEl.append(slideEl);\n }\n };\n if (typeof slides === 'object' && 'length' in slides) {\n for (let i = 0; i < slides.length; i += 1) {\n if (slides[i]) appendElement(slides[i]);\n }\n } else {\n appendElement(slides);\n }\n swiper.recalcSlides();\n if (params.loop) {\n swiper.loopCreate();\n }\n if (!params.observer || swiper.isElement) {\n swiper.update();\n }\n}","export default function prependSlide(slides) {\n const swiper = this;\n const {\n params,\n activeIndex,\n slidesEl\n } = swiper;\n if (params.loop) {\n swiper.loopDestroy();\n }\n let newActiveIndex = activeIndex + 1;\n const prependElement = slideEl => {\n if (typeof slideEl === 'string') {\n const tempDOM = document.createElement('div');\n tempDOM.innerHTML = slideEl;\n slidesEl.prepend(tempDOM.children[0]);\n tempDOM.innerHTML = '';\n } else {\n slidesEl.prepend(slideEl);\n }\n };\n if (typeof slides === 'object' && 'length' in slides) {\n for (let i = 0; i < slides.length; i += 1) {\n if (slides[i]) prependElement(slides[i]);\n }\n newActiveIndex = activeIndex + slides.length;\n } else {\n prependElement(slides);\n }\n swiper.recalcSlides();\n if (params.loop) {\n swiper.loopCreate();\n }\n if (!params.observer || swiper.isElement) {\n swiper.update();\n }\n swiper.slideTo(newActiveIndex, 0, false);\n}","export default function addSlide(index, slides) {\n const swiper = this;\n const {\n params,\n activeIndex,\n slidesEl\n } = swiper;\n let activeIndexBuffer = activeIndex;\n if (params.loop) {\n activeIndexBuffer -= swiper.loopedSlides;\n swiper.loopDestroy();\n swiper.recalcSlides();\n }\n const baseLength = swiper.slides.length;\n if (index <= 0) {\n swiper.prependSlide(slides);\n return;\n }\n if (index >= baseLength) {\n swiper.appendSlide(slides);\n return;\n }\n let newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + 1 : activeIndexBuffer;\n const slidesBuffer = [];\n for (let i = baseLength - 1; i >= index; i -= 1) {\n const currentSlide = swiper.slides[i];\n currentSlide.remove();\n slidesBuffer.unshift(currentSlide);\n }\n if (typeof slides === 'object' && 'length' in slides) {\n for (let i = 0; i < slides.length; i += 1) {\n if (slides[i]) slidesEl.append(slides[i]);\n }\n newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + slides.length : activeIndexBuffer;\n } else {\n slidesEl.append(slides);\n }\n for (let i = 0; i < slidesBuffer.length; i += 1) {\n slidesEl.append(slidesBuffer[i]);\n }\n swiper.recalcSlides();\n if (params.loop) {\n swiper.loopCreate();\n }\n if (!params.observer || swiper.isElement) {\n swiper.update();\n }\n if (params.loop) {\n swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);\n } else {\n swiper.slideTo(newActiveIndex, 0, false);\n }\n}","export default function removeSlide(slidesIndexes) {\n const swiper = this;\n const {\n params,\n activeIndex\n } = swiper;\n let activeIndexBuffer = activeIndex;\n if (params.loop) {\n activeIndexBuffer -= swiper.loopedSlides;\n swiper.loopDestroy();\n }\n let newActiveIndex = activeIndexBuffer;\n let indexToRemove;\n if (typeof slidesIndexes === 'object' && 'length' in slidesIndexes) {\n for (let i = 0; i < slidesIndexes.length; i += 1) {\n indexToRemove = slidesIndexes[i];\n if (swiper.slides[indexToRemove]) swiper.slides[indexToRemove].remove();\n if (indexToRemove < newActiveIndex) newActiveIndex -= 1;\n }\n newActiveIndex = Math.max(newActiveIndex, 0);\n } else {\n indexToRemove = slidesIndexes;\n if (swiper.slides[indexToRemove]) swiper.slides[indexToRemove].remove();\n if (indexToRemove < newActiveIndex) newActiveIndex -= 1;\n newActiveIndex = Math.max(newActiveIndex, 0);\n }\n swiper.recalcSlides();\n if (params.loop) {\n swiper.loopCreate();\n }\n if (!params.observer || swiper.isElement) {\n swiper.update();\n }\n if (params.loop) {\n swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);\n } else {\n swiper.slideTo(newActiveIndex, 0, false);\n }\n}","export default function removeAllSlides() {\n const swiper = this;\n const slidesIndexes = [];\n for (let i = 0; i < swiper.slides.length; i += 1) {\n slidesIndexes.push(i);\n }\n swiper.removeSlide(slidesIndexes);\n}","export default function effectInit(params) {\n const {\n effect,\n swiper,\n on,\n setTranslate,\n setTransition,\n overwriteParams,\n perspective,\n recreateShadows,\n getEffectParams\n } = params;\n on('beforeInit', () => {\n if (swiper.params.effect !== effect) return;\n swiper.classNames.push(`${swiper.params.containerModifierClass}${effect}`);\n if (perspective && perspective()) {\n swiper.classNames.push(`${swiper.params.containerModifierClass}3d`);\n }\n const overwriteParamsResult = overwriteParams ? overwriteParams() : {};\n Object.assign(swiper.params, overwriteParamsResult);\n Object.assign(swiper.originalParams, overwriteParamsResult);\n });\n on('setTranslate', () => {\n if (swiper.params.effect !== effect) return;\n setTranslate();\n });\n on('setTransition', (_s, duration) => {\n if (swiper.params.effect !== effect) return;\n setTransition(duration);\n });\n on('transitionEnd', () => {\n if (swiper.params.effect !== effect) return;\n if (recreateShadows) {\n if (!getEffectParams || !getEffectParams().slideShadows) return;\n // remove shadows\n swiper.slides.forEach(slideEl => {\n slideEl.querySelectorAll('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').forEach(shadowEl => shadowEl.remove());\n });\n // create new one\n recreateShadows();\n }\n });\n let requireUpdateOnVirtual;\n on('virtualUpdate', () => {\n if (swiper.params.effect !== effect) return;\n if (!swiper.slides.length) {\n requireUpdateOnVirtual = true;\n }\n requestAnimationFrame(() => {\n if (requireUpdateOnVirtual && swiper.slides && swiper.slides.length) {\n setTranslate();\n requireUpdateOnVirtual = false;\n }\n });\n });\n}","import { getSlideTransformEl } from './utils.js';\nexport default function effectTarget(effectParams, slideEl) {\n const transformEl = getSlideTransformEl(slideEl);\n if (transformEl !== slideEl) {\n transformEl.style.backfaceVisibility = 'hidden';\n transformEl.style['-webkit-backface-visibility'] = 'hidden';\n }\n return transformEl;\n}","import { elementTransitionEnd } from './utils.js';\nexport default function effectVirtualTransitionEnd({\n swiper,\n duration,\n transformElements,\n allSlides\n}) {\n const {\n activeIndex\n } = swiper;\n const getSlide = el => {\n if (!el.parentElement) {\n // assume shadow root\n const slide = swiper.slides.filter(slideEl => slideEl.shadowEl && slideEl.shadowEl === el.parentNode)[0];\n return slide;\n }\n return el.parentElement;\n };\n if (swiper.params.virtualTranslate && duration !== 0) {\n let eventTriggered = false;\n let transitionEndTarget;\n if (allSlides) {\n transitionEndTarget = transformElements;\n } else {\n transitionEndTarget = transformElements.filter(transformEl => {\n const el = transformEl.classList.contains('swiper-slide-transform') ? getSlide(transformEl) : transformEl;\n return swiper.getSlideIndex(el) === activeIndex;\n });\n }\n transitionEndTarget.forEach(el => {\n elementTransitionEnd(el, () => {\n if (eventTriggered) return;\n if (!swiper || swiper.destroyed) return;\n eventTriggered = true;\n swiper.animating = false;\n const evt = new window.CustomEvent('transitionend', {\n bubbles: true,\n cancelable: true\n });\n swiper.wrapperEl.dispatchEvent(evt);\n });\n });\n }\n}","import { createElement, getSlideTransformEl } from './utils.js';\nexport default function createShadow(params, slideEl, side) {\n const shadowClass = `swiper-slide-shadow${side ? `-${side}` : ''}`;\n const shadowContainer = getSlideTransformEl(slideEl);\n let shadowEl = shadowContainer.querySelector(`.${shadowClass}`);\n if (!shadowEl) {\n shadowEl = createElement('div', `swiper-slide-shadow${side ? `-${side}` : ''}`);\n shadowContainer.append(shadowEl);\n }\n return shadowEl;\n}","/**\n * Swiper 9.1.0\n * Most modern mobile touch slider and framework with hardware accelerated transitions\n * https://swiperjs.com\n *\n * Copyright 2014-2023 Vladimir Kharlampidi\n *\n * Released under the MIT License\n *\n * Released on: February 28, 2023\n */\n\nimport Swiper from './core/core.js';\nexport { default as Swiper, default } from './core/core.js';\nimport Virtual from './modules/virtual/virtual.js';\nimport Keyboard from './modules/keyboard/keyboard.js';\nimport Mousewheel from './modules/mousewheel/mousewheel.js';\nimport Navigation from './modules/navigation/navigation.js';\nimport Pagination from './modules/pagination/pagination.js';\nimport Scrollbar from './modules/scrollbar/scrollbar.js';\nimport Parallax from './modules/parallax/parallax.js';\nimport Zoom from './modules/zoom/zoom.js';\nimport Controller from './modules/controller/controller.js';\nimport A11y from './modules/a11y/a11y.js';\nimport History from './modules/history/history.js';\nimport HashNavigation from './modules/hash-navigation/hash-navigation.js';\nimport Autoplay from './modules/autoplay/autoplay.js';\nimport Thumbs from './modules/thumbs/thumbs.js';\nimport FreeMode from './modules/free-mode/free-mode.js';\nimport Grid from './modules/grid/grid.js';\nimport Manipulation from './modules/manipulation/manipulation.js';\nimport EffectFade from './modules/effect-fade/effect-fade.js';\nimport EffectCube from './modules/effect-cube/effect-cube.js';\nimport EffectFlip from './modules/effect-flip/effect-flip.js';\nimport EffectCoverflow from './modules/effect-coverflow/effect-coverflow.js';\nimport EffectCreative from './modules/effect-creative/effect-creative.js';\nimport EffectCards from './modules/effect-cards/effect-cards.js';\n\n// Swiper Class\nconst modules = [Virtual, Keyboard, Mousewheel, Navigation, Pagination, Scrollbar, Parallax, Zoom, Controller, A11y, History, HashNavigation, Autoplay, Thumbs, FreeMode, Grid, Manipulation, EffectFade, EffectCube, EffectFlip, EffectCoverflow, EffectCreative, EffectCards];\nSwiper.use(modules);\n","import { getDocument } from 'ssr-window';\nimport { createElement, elementChildren, setCSSProperty } from '../../shared/utils.js';\nexport default function Virtual({\n swiper,\n extendParams,\n on,\n emit\n}) {\n extendParams({\n virtual: {\n enabled: false,\n slides: [],\n cache: true,\n renderSlide: null,\n renderExternal: null,\n renderExternalUpdate: true,\n addSlidesBefore: 0,\n addSlidesAfter: 0\n }\n });\n let cssModeTimeout;\n const document = getDocument();\n swiper.virtual = {\n cache: {},\n from: undefined,\n to: undefined,\n slides: [],\n offset: 0,\n slidesGrid: []\n };\n const tempDOM = document.createElement('div');\n function renderSlide(slide, index) {\n const params = swiper.params.virtual;\n if (params.cache && swiper.virtual.cache[index]) {\n return swiper.virtual.cache[index];\n }\n // eslint-disable-next-line\n let slideEl;\n if (params.renderSlide) {\n slideEl = params.renderSlide.call(swiper, slide, index);\n if (typeof slideEl === 'string') {\n tempDOM.innerHTML = slideEl;\n slideEl = tempDOM.children[0];\n }\n } else if (swiper.isElement) {\n slideEl = createElement('swiper-slide');\n } else {\n slideEl = createElement('div', swiper.params.slideClass);\n }\n slideEl.setAttribute('data-swiper-slide-index', index);\n if (!params.renderSlide) {\n slideEl.innerHTML = slide;\n }\n if (params.cache) swiper.virtual.cache[index] = slideEl;\n return slideEl;\n }\n function update(force) {\n const {\n slidesPerView,\n slidesPerGroup,\n centeredSlides,\n loop: isLoop\n } = swiper.params;\n const {\n addSlidesBefore,\n addSlidesAfter\n } = swiper.params.virtual;\n const {\n from: previousFrom,\n to: previousTo,\n slides,\n slidesGrid: previousSlidesGrid,\n offset: previousOffset\n } = swiper.virtual;\n if (!swiper.params.cssMode) {\n swiper.updateActiveIndex();\n }\n const activeIndex = swiper.activeIndex || 0;\n let offsetProp;\n if (swiper.rtlTranslate) offsetProp = 'right';else offsetProp = swiper.isHorizontal() ? 'left' : 'top';\n let slidesAfter;\n let slidesBefore;\n if (centeredSlides) {\n slidesAfter = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesAfter;\n slidesBefore = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesBefore;\n } else {\n slidesAfter = slidesPerView + (slidesPerGroup - 1) + addSlidesAfter;\n slidesBefore = (isLoop ? slidesPerView : slidesPerGroup) + addSlidesBefore;\n }\n let from = activeIndex - slidesBefore;\n let to = activeIndex + slidesAfter;\n if (!isLoop) {\n from = Math.max(from, 0);\n to = Math.min(to, slides.length - 1);\n }\n let offset = (swiper.slidesGrid[from] || 0) - (swiper.slidesGrid[0] || 0);\n if (isLoop && activeIndex >= slidesBefore) {\n from -= slidesBefore;\n if (!centeredSlides) offset += swiper.slidesGrid[0];\n } else if (isLoop && activeIndex < slidesBefore) {\n from = -slidesBefore;\n if (centeredSlides) offset += swiper.slidesGrid[0];\n }\n Object.assign(swiper.virtual, {\n from,\n to,\n offset,\n slidesGrid: swiper.slidesGrid,\n slidesBefore,\n slidesAfter\n });\n function onRendered() {\n swiper.updateSlides();\n swiper.updateProgress();\n swiper.updateSlidesClasses();\n emit('virtualUpdate');\n }\n if (previousFrom === from && previousTo === to && !force) {\n if (swiper.slidesGrid !== previousSlidesGrid && offset !== previousOffset) {\n swiper.slides.forEach(slideEl => {\n slideEl.style[offsetProp] = `${offset}px`;\n });\n }\n swiper.updateProgress();\n emit('virtualUpdate');\n return;\n }\n if (swiper.params.virtual.renderExternal) {\n swiper.params.virtual.renderExternal.call(swiper, {\n offset,\n from,\n to,\n slides: function getSlides() {\n const slidesToRender = [];\n for (let i = from; i <= to; i += 1) {\n slidesToRender.push(slides[i]);\n }\n return slidesToRender;\n }()\n });\n if (swiper.params.virtual.renderExternalUpdate) {\n onRendered();\n } else {\n emit('virtualUpdate');\n }\n return;\n }\n const prependIndexes = [];\n const appendIndexes = [];\n const getSlideIndex = index => {\n let slideIndex = index;\n if (index < 0) {\n slideIndex = slides.length + index;\n } else if (slideIndex >= slides.length) {\n // eslint-disable-next-line\n slideIndex = slideIndex - slides.length;\n }\n return slideIndex;\n };\n if (force) {\n swiper.slidesEl.querySelectorAll(`.${swiper.params.slideClass}, swiper-slide`).forEach(slideEl => {\n slideEl.remove();\n });\n } else {\n for (let i = previousFrom; i <= previousTo; i += 1) {\n if (i < from || i > to) {\n const slideIndex = getSlideIndex(i);\n swiper.slidesEl.querySelectorAll(`.${swiper.params.slideClass}[data-swiper-slide-index=\"${slideIndex}\"], swiper-slide[data-swiper-slide-index=\"${slideIndex}\"]`).forEach(slideEl => {\n slideEl.remove();\n });\n }\n }\n }\n const loopFrom = isLoop ? -slides.length : 0;\n const loopTo = isLoop ? slides.length * 2 : slides.length;\n for (let i = loopFrom; i < loopTo; i += 1) {\n if (i >= from && i <= to) {\n const slideIndex = getSlideIndex(i);\n if (typeof previousTo === 'undefined' || force) {\n appendIndexes.push(slideIndex);\n } else {\n if (i > previousTo) appendIndexes.push(slideIndex);\n if (i < previousFrom) prependIndexes.push(slideIndex);\n }\n }\n }\n appendIndexes.forEach(index => {\n swiper.slidesEl.append(renderSlide(slides[index], index));\n });\n if (isLoop) {\n for (let i = prependIndexes.length - 1; i >= 0; i -= 1) {\n const index = prependIndexes[i];\n swiper.slidesEl.prepend(renderSlide(slides[index], index));\n }\n } else {\n prependIndexes.sort((a, b) => b - a);\n prependIndexes.forEach(index => {\n swiper.slidesEl.prepend(renderSlide(slides[index], index));\n });\n }\n elementChildren(swiper.slidesEl, '.swiper-slide, swiper-slide').forEach(slideEl => {\n slideEl.style[offsetProp] = `${offset}px`;\n });\n onRendered();\n }\n function appendSlide(slides) {\n if (typeof slides === 'object' && 'length' in slides) {\n for (let i = 0; i < slides.length; i += 1) {\n if (slides[i]) swiper.virtual.slides.push(slides[i]);\n }\n } else {\n swiper.virtual.slides.push(slides);\n }\n update(true);\n }\n function prependSlide(slides) {\n const activeIndex = swiper.activeIndex;\n let newActiveIndex = activeIndex + 1;\n let numberOfNewSlides = 1;\n if (Array.isArray(slides)) {\n for (let i = 0; i < slides.length; i += 1) {\n if (slides[i]) swiper.virtual.slides.unshift(slides[i]);\n }\n newActiveIndex = activeIndex + slides.length;\n numberOfNewSlides = slides.length;\n } else {\n swiper.virtual.slides.unshift(slides);\n }\n if (swiper.params.virtual.cache) {\n const cache = swiper.virtual.cache;\n const newCache = {};\n Object.keys(cache).forEach(cachedIndex => {\n const cachedEl = cache[cachedIndex];\n const cachedElIndex = cachedEl.getAttribute('data-swiper-slide-index');\n if (cachedElIndex) {\n cachedEl.setAttribute('data-swiper-slide-index', parseInt(cachedElIndex, 10) + numberOfNewSlides);\n }\n newCache[parseInt(cachedIndex, 10) + numberOfNewSlides] = cachedEl;\n });\n swiper.virtual.cache = newCache;\n }\n update(true);\n swiper.slideTo(newActiveIndex, 0);\n }\n function removeSlide(slidesIndexes) {\n if (typeof slidesIndexes === 'undefined' || slidesIndexes === null) return;\n let activeIndex = swiper.activeIndex;\n if (Array.isArray(slidesIndexes)) {\n for (let i = slidesIndexes.length - 1; i >= 0; i -= 1) {\n swiper.virtual.slides.splice(slidesIndexes[i], 1);\n if (swiper.params.virtual.cache) {\n delete swiper.virtual.cache[slidesIndexes[i]];\n }\n if (slidesIndexes[i] < activeIndex) activeIndex -= 1;\n activeIndex = Math.max(activeIndex, 0);\n }\n } else {\n swiper.virtual.slides.splice(slidesIndexes, 1);\n if (swiper.params.virtual.cache) {\n delete swiper.virtual.cache[slidesIndexes];\n }\n if (slidesIndexes < activeIndex) activeIndex -= 1;\n activeIndex = Math.max(activeIndex, 0);\n }\n update(true);\n swiper.slideTo(activeIndex, 0);\n }\n function removeAllSlides() {\n swiper.virtual.slides = [];\n if (swiper.params.virtual.cache) {\n swiper.virtual.cache = {};\n }\n update(true);\n swiper.slideTo(0, 0);\n }\n on('beforeInit', () => {\n if (!swiper.params.virtual.enabled) return;\n let domSlidesAssigned;\n if (typeof swiper.passedParams.virtual.slides === 'undefined') {\n const slides = [...swiper.slidesEl.children].filter(el => el.matches(`.${swiper.params.slideClass}, swiper-slide`));\n if (slides && slides.length) {\n swiper.virtual.slides = [...slides];\n domSlidesAssigned = true;\n slides.forEach((slideEl, slideIndex) => {\n slideEl.setAttribute('data-swiper-slide-index', slideIndex);\n swiper.virtual.cache[slideIndex] = slideEl;\n slideEl.remove();\n });\n }\n }\n if (!domSlidesAssigned) {\n swiper.virtual.slides = swiper.params.virtual.slides;\n }\n swiper.classNames.push(`${swiper.params.containerModifierClass}virtual`);\n swiper.params.watchSlidesProgress = true;\n swiper.originalParams.watchSlidesProgress = true;\n if (!swiper.params.initialSlide) {\n update();\n }\n });\n on('setTranslate', () => {\n if (!swiper.params.virtual.enabled) return;\n if (swiper.params.cssMode && !swiper._immediateVirtual) {\n clearTimeout(cssModeTimeout);\n cssModeTimeout = setTimeout(() => {\n update();\n }, 100);\n } else {\n update();\n }\n });\n on('init update resize', () => {\n if (!swiper.params.virtual.enabled) return;\n if (swiper.params.cssMode) {\n setCSSProperty(swiper.wrapperEl, '--swiper-virtual-size', `${swiper.virtualSize}px`);\n }\n });\n Object.assign(swiper.virtual, {\n appendSlide,\n prependSlide,\n removeSlide,\n removeAllSlides,\n update\n });\n}","/* eslint-disable consistent-return */\nimport { getWindow, getDocument } from 'ssr-window';\nimport { elementOffset, elementParents } from '../../shared/utils.js';\nexport default function Keyboard({\n swiper,\n extendParams,\n on,\n emit\n}) {\n const document = getDocument();\n const window = getWindow();\n swiper.keyboard = {\n enabled: false\n };\n extendParams({\n keyboard: {\n enabled: false,\n onlyInViewport: true,\n pageUpDown: true\n }\n });\n function handle(event) {\n if (!swiper.enabled) return;\n const {\n rtlTranslate: rtl\n } = swiper;\n let e = event;\n if (e.originalEvent) e = e.originalEvent; // jquery fix\n const kc = e.keyCode || e.charCode;\n const pageUpDown = swiper.params.keyboard.pageUpDown;\n const isPageUp = pageUpDown && kc === 33;\n const isPageDown = pageUpDown && kc === 34;\n const isArrowLeft = kc === 37;\n const isArrowRight = kc === 39;\n const isArrowUp = kc === 38;\n const isArrowDown = kc === 40;\n // Directions locks\n if (!swiper.allowSlideNext && (swiper.isHorizontal() && isArrowRight || swiper.isVertical() && isArrowDown || isPageDown)) {\n return false;\n }\n if (!swiper.allowSlidePrev && (swiper.isHorizontal() && isArrowLeft || swiper.isVertical() && isArrowUp || isPageUp)) {\n return false;\n }\n if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) {\n return undefined;\n }\n if (document.activeElement && document.activeElement.nodeName && (document.activeElement.nodeName.toLowerCase() === 'input' || document.activeElement.nodeName.toLowerCase() === 'textarea')) {\n return undefined;\n }\n if (swiper.params.keyboard.onlyInViewport && (isPageUp || isPageDown || isArrowLeft || isArrowRight || isArrowUp || isArrowDown)) {\n let inView = false;\n // Check that swiper should be inside of visible area of window\n if (elementParents(swiper.el, `.${swiper.params.slideClass}, swiper-slide`).length > 0 && elementParents(swiper.el, `.${swiper.params.slideActiveClass}`).length === 0) {\n return undefined;\n }\n const el = swiper.el;\n const swiperWidth = el.clientWidth;\n const swiperHeight = el.clientHeight;\n const windowWidth = window.innerWidth;\n const windowHeight = window.innerHeight;\n const swiperOffset = elementOffset(el);\n if (rtl) swiperOffset.left -= el.scrollLeft;\n const swiperCoord = [[swiperOffset.left, swiperOffset.top], [swiperOffset.left + swiperWidth, swiperOffset.top], [swiperOffset.left, swiperOffset.top + swiperHeight], [swiperOffset.left + swiperWidth, swiperOffset.top + swiperHeight]];\n for (let i = 0; i < swiperCoord.length; i += 1) {\n const point = swiperCoord[i];\n if (point[0] >= 0 && point[0] <= windowWidth && point[1] >= 0 && point[1] <= windowHeight) {\n if (point[0] === 0 && point[1] === 0) continue; // eslint-disable-line\n inView = true;\n }\n }\n if (!inView) return undefined;\n }\n if (swiper.isHorizontal()) {\n if (isPageUp || isPageDown || isArrowLeft || isArrowRight) {\n if (e.preventDefault) e.preventDefault();else e.returnValue = false;\n }\n if ((isPageDown || isArrowRight) && !rtl || (isPageUp || isArrowLeft) && rtl) swiper.slideNext();\n if ((isPageUp || isArrowLeft) && !rtl || (isPageDown || isArrowRight) && rtl) swiper.slidePrev();\n } else {\n if (isPageUp || isPageDown || isArrowUp || isArrowDown) {\n if (e.preventDefault) e.preventDefault();else e.returnValue = false;\n }\n if (isPageDown || isArrowDown) swiper.slideNext();\n if (isPageUp || isArrowUp) swiper.slidePrev();\n }\n emit('keyPress', kc);\n return undefined;\n }\n function enable() {\n if (swiper.keyboard.enabled) return;\n document.addEventListener('keydown', handle);\n swiper.keyboard.enabled = true;\n }\n function disable() {\n if (!swiper.keyboard.enabled) return;\n document.removeEventListener('keydown', handle);\n swiper.keyboard.enabled = false;\n }\n on('init', () => {\n if (swiper.params.keyboard.enabled) {\n enable();\n }\n });\n on('destroy', () => {\n if (swiper.keyboard.enabled) {\n disable();\n }\n });\n Object.assign(swiper.keyboard, {\n enable,\n disable\n });\n}","/* eslint-disable consistent-return */\nimport { getWindow } from 'ssr-window';\nimport { now, nextTick } from '../../shared/utils.js';\nexport default function Mousewheel({\n swiper,\n extendParams,\n on,\n emit\n}) {\n const window = getWindow();\n extendParams({\n mousewheel: {\n enabled: false,\n releaseOnEdges: false,\n invert: false,\n forceToAxis: false,\n sensitivity: 1,\n eventsTarget: 'container',\n thresholdDelta: null,\n thresholdTime: null\n }\n });\n swiper.mousewheel = {\n enabled: false\n };\n let timeout;\n let lastScrollTime = now();\n let lastEventBeforeSnap;\n const recentWheelEvents = [];\n function normalize(e) {\n // Reasonable defaults\n const PIXEL_STEP = 10;\n const LINE_HEIGHT = 40;\n const PAGE_HEIGHT = 800;\n let sX = 0;\n let sY = 0; // spinX, spinY\n let pX = 0;\n let pY = 0; // pixelX, pixelY\n\n // Legacy\n if ('detail' in e) {\n sY = e.detail;\n }\n if ('wheelDelta' in e) {\n sY = -e.wheelDelta / 120;\n }\n if ('wheelDeltaY' in e) {\n sY = -e.wheelDeltaY / 120;\n }\n if ('wheelDeltaX' in e) {\n sX = -e.wheelDeltaX / 120;\n }\n\n // side scrolling on FF with DOMMouseScroll\n if ('axis' in e && e.axis === e.HORIZONTAL_AXIS) {\n sX = sY;\n sY = 0;\n }\n pX = sX * PIXEL_STEP;\n pY = sY * PIXEL_STEP;\n if ('deltaY' in e) {\n pY = e.deltaY;\n }\n if ('deltaX' in e) {\n pX = e.deltaX;\n }\n if (e.shiftKey && !pX) {\n // if user scrolls with shift he wants horizontal scroll\n pX = pY;\n pY = 0;\n }\n if ((pX || pY) && e.deltaMode) {\n if (e.deltaMode === 1) {\n // delta in LINE units\n pX *= LINE_HEIGHT;\n pY *= LINE_HEIGHT;\n } else {\n // delta in PAGE units\n pX *= PAGE_HEIGHT;\n pY *= PAGE_HEIGHT;\n }\n }\n\n // Fall-back if spin cannot be determined\n if (pX && !sX) {\n sX = pX < 1 ? -1 : 1;\n }\n if (pY && !sY) {\n sY = pY < 1 ? -1 : 1;\n }\n return {\n spinX: sX,\n spinY: sY,\n pixelX: pX,\n pixelY: pY\n };\n }\n function handleMouseEnter() {\n if (!swiper.enabled) return;\n swiper.mouseEntered = true;\n }\n function handleMouseLeave() {\n if (!swiper.enabled) return;\n swiper.mouseEntered = false;\n }\n function animateSlider(newEvent) {\n if (swiper.params.mousewheel.thresholdDelta && newEvent.delta < swiper.params.mousewheel.thresholdDelta) {\n // Prevent if delta of wheel scroll delta is below configured threshold\n return false;\n }\n if (swiper.params.mousewheel.thresholdTime && now() - lastScrollTime < swiper.params.mousewheel.thresholdTime) {\n // Prevent if time between scrolls is below configured threshold\n return false;\n }\n\n // If the movement is NOT big enough and\n // if the last time the user scrolled was too close to the current one (avoid continuously triggering the slider):\n // Don't go any further (avoid insignificant scroll movement).\n if (newEvent.delta >= 6 && now() - lastScrollTime < 60) {\n // Return false as a default\n return true;\n }\n // If user is scrolling towards the end:\n // If the slider hasn't hit the latest slide or\n // if the slider is a loop and\n // if the slider isn't moving right now:\n // Go to next slide and\n // emit a scroll event.\n // Else (the user is scrolling towards the beginning) and\n // if the slider hasn't hit the first slide or\n // if the slider is a loop and\n // if the slider isn't moving right now:\n // Go to prev slide and\n // emit a scroll event.\n if (newEvent.direction < 0) {\n if ((!swiper.isEnd || swiper.params.loop) && !swiper.animating) {\n swiper.slideNext();\n emit('scroll', newEvent.raw);\n }\n } else if ((!swiper.isBeginning || swiper.params.loop) && !swiper.animating) {\n swiper.slidePrev();\n emit('scroll', newEvent.raw);\n }\n // If you got here is because an animation has been triggered so store the current time\n lastScrollTime = new window.Date().getTime();\n // Return false as a default\n return false;\n }\n function releaseScroll(newEvent) {\n const params = swiper.params.mousewheel;\n if (newEvent.direction < 0) {\n if (swiper.isEnd && !swiper.params.loop && params.releaseOnEdges) {\n // Return true to animate scroll on edges\n return true;\n }\n } else if (swiper.isBeginning && !swiper.params.loop && params.releaseOnEdges) {\n // Return true to animate scroll on edges\n return true;\n }\n return false;\n }\n function handle(event) {\n let e = event;\n let disableParentSwiper = true;\n if (!swiper.enabled) return;\n const params = swiper.params.mousewheel;\n if (swiper.params.cssMode) {\n e.preventDefault();\n }\n let targetEl = swiper.el;\n if (swiper.params.mousewheel.eventsTarget !== 'container') {\n targetEl = document.querySelector(swiper.params.mousewheel.eventsTarget);\n }\n const targetElContainsTarget = targetEl && targetEl.contains(e.target);\n if (!swiper.mouseEntered && !targetElContainsTarget && !params.releaseOnEdges) return true;\n if (e.originalEvent) e = e.originalEvent; // jquery fix\n let delta = 0;\n const rtlFactor = swiper.rtlTranslate ? -1 : 1;\n const data = normalize(e);\n if (params.forceToAxis) {\n if (swiper.isHorizontal()) {\n if (Math.abs(data.pixelX) > Math.abs(data.pixelY)) delta = -data.pixelX * rtlFactor;else return true;\n } else if (Math.abs(data.pixelY) > Math.abs(data.pixelX)) delta = -data.pixelY;else return true;\n } else {\n delta = Math.abs(data.pixelX) > Math.abs(data.pixelY) ? -data.pixelX * rtlFactor : -data.pixelY;\n }\n if (delta === 0) return true;\n if (params.invert) delta = -delta;\n\n // Get the scroll positions\n let positions = swiper.getTranslate() + delta * params.sensitivity;\n if (positions >= swiper.minTranslate()) positions = swiper.minTranslate();\n if (positions <= swiper.maxTranslate()) positions = swiper.maxTranslate();\n\n // When loop is true:\n // the disableParentSwiper will be true.\n // When loop is false:\n // if the scroll positions is not on edge,\n // then the disableParentSwiper will be true.\n // if the scroll on edge positions,\n // then the disableParentSwiper will be false.\n disableParentSwiper = swiper.params.loop ? true : !(positions === swiper.minTranslate() || positions === swiper.maxTranslate());\n if (disableParentSwiper && swiper.params.nested) e.stopPropagation();\n if (!swiper.params.freeMode || !swiper.params.freeMode.enabled) {\n // Register the new event in a variable which stores the relevant data\n const newEvent = {\n time: now(),\n delta: Math.abs(delta),\n direction: Math.sign(delta),\n raw: event\n };\n\n // Keep the most recent events\n if (recentWheelEvents.length >= 2) {\n recentWheelEvents.shift(); // only store the last N events\n }\n\n const prevEvent = recentWheelEvents.length ? recentWheelEvents[recentWheelEvents.length - 1] : undefined;\n recentWheelEvents.push(newEvent);\n\n // If there is at least one previous recorded event:\n // If direction has changed or\n // if the scroll is quicker than the previous one:\n // Animate the slider.\n // Else (this is the first time the wheel is moved):\n // Animate the slider.\n if (prevEvent) {\n if (newEvent.direction !== prevEvent.direction || newEvent.delta > prevEvent.delta || newEvent.time > prevEvent.time + 150) {\n animateSlider(newEvent);\n }\n } else {\n animateSlider(newEvent);\n }\n\n // If it's time to release the scroll:\n // Return now so you don't hit the preventDefault.\n if (releaseScroll(newEvent)) {\n return true;\n }\n } else {\n // Freemode or scrollContainer:\n\n // If we recently snapped after a momentum scroll, then ignore wheel events\n // to give time for the deceleration to finish. Stop ignoring after 500 msecs\n // or if it's a new scroll (larger delta or inverse sign as last event before\n // an end-of-momentum snap).\n const newEvent = {\n time: now(),\n delta: Math.abs(delta),\n direction: Math.sign(delta)\n };\n const ignoreWheelEvents = lastEventBeforeSnap && newEvent.time < lastEventBeforeSnap.time + 500 && newEvent.delta <= lastEventBeforeSnap.delta && newEvent.direction === lastEventBeforeSnap.direction;\n if (!ignoreWheelEvents) {\n lastEventBeforeSnap = undefined;\n let position = swiper.getTranslate() + delta * params.sensitivity;\n const wasBeginning = swiper.isBeginning;\n const wasEnd = swiper.isEnd;\n if (position >= swiper.minTranslate()) position = swiper.minTranslate();\n if (position <= swiper.maxTranslate()) position = swiper.maxTranslate();\n swiper.setTransition(0);\n swiper.setTranslate(position);\n swiper.updateProgress();\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n if (!wasBeginning && swiper.isBeginning || !wasEnd && swiper.isEnd) {\n swiper.updateSlidesClasses();\n }\n if (swiper.params.loop) {\n swiper.loopFix({\n direction: newEvent.direction < 0 ? 'next' : 'prev',\n byMousewheel: true\n });\n }\n if (swiper.params.freeMode.sticky) {\n // When wheel scrolling starts with sticky (aka snap) enabled, then detect\n // the end of a momentum scroll by storing recent (N=15?) wheel events.\n // 1. do all N events have decreasing or same (absolute value) delta?\n // 2. did all N events arrive in the last M (M=500?) msecs?\n // 3. does the earliest event have an (absolute value) delta that's\n // at least P (P=1?) larger than the most recent event's delta?\n // 4. does the latest event have a delta that's smaller than Q (Q=6?) pixels?\n // If 1-4 are \"yes\" then we're near the end of a momentum scroll deceleration.\n // Snap immediately and ignore remaining wheel events in this scroll.\n // See comment above for \"remaining wheel events in this scroll\" determination.\n // If 1-4 aren't satisfied, then wait to snap until 500ms after the last event.\n clearTimeout(timeout);\n timeout = undefined;\n if (recentWheelEvents.length >= 15) {\n recentWheelEvents.shift(); // only store the last N events\n }\n\n const prevEvent = recentWheelEvents.length ? recentWheelEvents[recentWheelEvents.length - 1] : undefined;\n const firstEvent = recentWheelEvents[0];\n recentWheelEvents.push(newEvent);\n if (prevEvent && (newEvent.delta > prevEvent.delta || newEvent.direction !== prevEvent.direction)) {\n // Increasing or reverse-sign delta means the user started scrolling again. Clear the wheel event log.\n recentWheelEvents.splice(0);\n } else if (recentWheelEvents.length >= 15 && newEvent.time - firstEvent.time < 500 && firstEvent.delta - newEvent.delta >= 1 && newEvent.delta <= 6) {\n // We're at the end of the deceleration of a momentum scroll, so there's no need\n // to wait for more events. Snap ASAP on the next tick.\n // Also, because there's some remaining momentum we'll bias the snap in the\n // direction of the ongoing scroll because it's better UX for the scroll to snap\n // in the same direction as the scroll instead of reversing to snap. Therefore,\n // if it's already scrolled more than 20% in the current direction, keep going.\n const snapToThreshold = delta > 0 ? 0.8 : 0.2;\n lastEventBeforeSnap = newEvent;\n recentWheelEvents.splice(0);\n timeout = nextTick(() => {\n swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold);\n }, 0); // no delay; move on next tick\n }\n\n if (!timeout) {\n // if we get here, then we haven't detected the end of a momentum scroll, so\n // we'll consider a scroll \"complete\" when there haven't been any wheel events\n // for 500ms.\n timeout = nextTick(() => {\n const snapToThreshold = 0.5;\n lastEventBeforeSnap = newEvent;\n recentWheelEvents.splice(0);\n swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold);\n }, 500);\n }\n }\n\n // Emit event\n if (!ignoreWheelEvents) emit('scroll', e);\n\n // Stop autoplay\n if (swiper.params.autoplay && swiper.params.autoplayDisableOnInteraction) swiper.autoplay.stop();\n // Return page scroll on edge positions\n if (position === swiper.minTranslate() || position === swiper.maxTranslate()) return true;\n }\n }\n if (e.preventDefault) e.preventDefault();else e.returnValue = false;\n return false;\n }\n function events(method) {\n let targetEl = swiper.el;\n if (swiper.params.mousewheel.eventsTarget !== 'container') {\n targetEl = document.querySelector(swiper.params.mousewheel.eventsTarget);\n }\n targetEl[method]('mouseenter', handleMouseEnter);\n targetEl[method]('mouseleave', handleMouseLeave);\n targetEl[method]('wheel', handle);\n }\n function enable() {\n if (swiper.params.cssMode) {\n swiper.wrapperEl.removeEventListener('wheel', handle);\n return true;\n }\n if (swiper.mousewheel.enabled) return false;\n events('addEventListener');\n swiper.mousewheel.enabled = true;\n return true;\n }\n function disable() {\n if (swiper.params.cssMode) {\n swiper.wrapperEl.addEventListener(event, handle);\n return true;\n }\n if (!swiper.mousewheel.enabled) return false;\n events('removeEventListener');\n swiper.mousewheel.enabled = false;\n return true;\n }\n on('init', () => {\n if (!swiper.params.mousewheel.enabled && swiper.params.cssMode) {\n disable();\n }\n if (swiper.params.mousewheel.enabled) enable();\n });\n on('destroy', () => {\n if (swiper.params.cssMode) {\n enable();\n }\n if (swiper.mousewheel.enabled) disable();\n });\n Object.assign(swiper.mousewheel, {\n enable,\n disable\n });\n}","import createElementIfNotDefined from '../../shared/create-element-if-not-defined.js';\nexport default function Navigation({\n swiper,\n extendParams,\n on,\n emit\n}) {\n extendParams({\n navigation: {\n nextEl: null,\n prevEl: null,\n hideOnClick: false,\n disabledClass: 'swiper-button-disabled',\n hiddenClass: 'swiper-button-hidden',\n lockClass: 'swiper-button-lock',\n navigationDisabledClass: 'swiper-navigation-disabled'\n }\n });\n swiper.navigation = {\n nextEl: null,\n prevEl: null\n };\n const makeElementsArray = el => {\n if (!Array.isArray(el)) el = [el].filter(e => !!e);\n return el;\n };\n function getEl(el) {\n let res;\n if (el && typeof el === 'string' && swiper.isElement) {\n res = swiper.el.shadowRoot.querySelector(el);\n if (res) return res;\n }\n if (el) {\n if (typeof el === 'string') res = [...document.querySelectorAll(el)];\n if (swiper.params.uniqueNavElements && typeof el === 'string' && res.length > 1 && swiper.el.querySelectorAll(el).length === 1) {\n res = swiper.el.querySelector(el);\n }\n }\n if (el && !res) return el;\n // if (Array.isArray(res) && res.length === 1) res = res[0];\n return res;\n }\n function toggleEl(el, disabled) {\n const params = swiper.params.navigation;\n el = makeElementsArray(el);\n el.forEach(subEl => {\n if (subEl) {\n subEl.classList[disabled ? 'add' : 'remove'](...params.disabledClass.split(' '));\n if (subEl.tagName === 'BUTTON') subEl.disabled = disabled;\n if (swiper.params.watchOverflow && swiper.enabled) {\n subEl.classList[swiper.isLocked ? 'add' : 'remove'](params.lockClass);\n }\n }\n });\n }\n function update() {\n // Update Navigation Buttons\n const {\n nextEl,\n prevEl\n } = swiper.navigation;\n if (swiper.params.loop) {\n toggleEl(prevEl, false);\n toggleEl(nextEl, false);\n return;\n }\n toggleEl(prevEl, swiper.isBeginning && !swiper.params.rewind);\n toggleEl(nextEl, swiper.isEnd && !swiper.params.rewind);\n }\n function onPrevClick(e) {\n e.preventDefault();\n if (swiper.isBeginning && !swiper.params.loop && !swiper.params.rewind) return;\n swiper.slidePrev();\n emit('navigationPrev');\n }\n function onNextClick(e) {\n e.preventDefault();\n if (swiper.isEnd && !swiper.params.loop && !swiper.params.rewind) return;\n swiper.slideNext();\n emit('navigationNext');\n }\n function init() {\n const params = swiper.params.navigation;\n swiper.params.navigation = createElementIfNotDefined(swiper, swiper.originalParams.navigation, swiper.params.navigation, {\n nextEl: 'swiper-button-next',\n prevEl: 'swiper-button-prev'\n });\n if (!(params.nextEl || params.prevEl)) return;\n let nextEl = getEl(params.nextEl);\n let prevEl = getEl(params.prevEl);\n Object.assign(swiper.navigation, {\n nextEl,\n prevEl\n });\n nextEl = makeElementsArray(nextEl);\n prevEl = makeElementsArray(prevEl);\n const initButton = (el, dir) => {\n if (el) {\n el.addEventListener('click', dir === 'next' ? onNextClick : onPrevClick);\n }\n if (!swiper.enabled && el) {\n el.classList.add(...params.lockClass.split(' '));\n }\n };\n nextEl.forEach(el => initButton(el, 'next'));\n prevEl.forEach(el => initButton(el, 'prev'));\n }\n function destroy() {\n let {\n nextEl,\n prevEl\n } = swiper.navigation;\n nextEl = makeElementsArray(nextEl);\n prevEl = makeElementsArray(prevEl);\n const destroyButton = (el, dir) => {\n el.removeEventListener('click', dir === 'next' ? onNextClick : onPrevClick);\n el.classList.remove(...swiper.params.navigation.disabledClass.split(' '));\n };\n nextEl.forEach(el => destroyButton(el, 'next'));\n prevEl.forEach(el => destroyButton(el, 'prev'));\n }\n on('init', () => {\n if (swiper.params.navigation.enabled === false) {\n // eslint-disable-next-line\n disable();\n } else {\n init();\n update();\n }\n });\n on('toEdge fromEdge lock unlock', () => {\n update();\n });\n on('destroy', () => {\n destroy();\n });\n on('enable disable', () => {\n let {\n nextEl,\n prevEl\n } = swiper.navigation;\n nextEl = makeElementsArray(nextEl);\n prevEl = makeElementsArray(prevEl);\n [...nextEl, ...prevEl].filter(el => !!el).forEach(el => el.classList[swiper.enabled ? 'remove' : 'add'](swiper.params.navigation.lockClass));\n });\n on('click', (_s, e) => {\n let {\n nextEl,\n prevEl\n } = swiper.navigation;\n nextEl = makeElementsArray(nextEl);\n prevEl = makeElementsArray(prevEl);\n const targetEl = e.target;\n if (swiper.params.navigation.hideOnClick && !prevEl.includes(targetEl) && !nextEl.includes(targetEl)) {\n if (swiper.pagination && swiper.params.pagination && swiper.params.pagination.clickable && (swiper.pagination.el === targetEl || swiper.pagination.el.contains(targetEl))) return;\n let isHidden;\n if (nextEl.length) {\n isHidden = nextEl[0].classList.contains(swiper.params.navigation.hiddenClass);\n } else if (prevEl.length) {\n isHidden = prevEl[0].classList.contains(swiper.params.navigation.hiddenClass);\n }\n if (isHidden === true) {\n emit('navigationShow');\n } else {\n emit('navigationHide');\n }\n [...nextEl, ...prevEl].filter(el => !!el).forEach(el => el.classList.toggle(swiper.params.navigation.hiddenClass));\n }\n });\n const enable = () => {\n swiper.el.classList.remove(...swiper.params.navigation.navigationDisabledClass.split(' '));\n init();\n update();\n };\n const disable = () => {\n swiper.el.classList.add(...swiper.params.navigation.navigationDisabledClass.split(' '));\n destroy();\n };\n Object.assign(swiper.navigation, {\n enable,\n disable,\n update,\n init,\n destroy\n });\n}","import classesToSelector from '../../shared/classes-to-selector.js';\nimport createElementIfNotDefined from '../../shared/create-element-if-not-defined.js';\nimport { elementIndex, elementOuterSize, elementParents } from '../../shared/utils.js';\nexport default function Pagination({\n swiper,\n extendParams,\n on,\n emit\n}) {\n const pfx = 'swiper-pagination';\n extendParams({\n pagination: {\n el: null,\n bulletElement: 'span',\n clickable: false,\n hideOnClick: false,\n renderBullet: null,\n renderProgressbar: null,\n renderFraction: null,\n renderCustom: null,\n progressbarOpposite: false,\n type: 'bullets',\n // 'bullets' or 'progressbar' or 'fraction' or 'custom'\n dynamicBullets: false,\n dynamicMainBullets: 1,\n formatFractionCurrent: number => number,\n formatFractionTotal: number => number,\n bulletClass: `${pfx}-bullet`,\n bulletActiveClass: `${pfx}-bullet-active`,\n modifierClass: `${pfx}-`,\n currentClass: `${pfx}-current`,\n totalClass: `${pfx}-total`,\n hiddenClass: `${pfx}-hidden`,\n progressbarFillClass: `${pfx}-progressbar-fill`,\n progressbarOppositeClass: `${pfx}-progressbar-opposite`,\n clickableClass: `${pfx}-clickable`,\n lockClass: `${pfx}-lock`,\n horizontalClass: `${pfx}-horizontal`,\n verticalClass: `${pfx}-vertical`,\n paginationDisabledClass: `${pfx}-disabled`\n }\n });\n swiper.pagination = {\n el: null,\n bullets: []\n };\n let bulletSize;\n let dynamicBulletIndex = 0;\n const makeElementsArray = el => {\n if (!Array.isArray(el)) el = [el].filter(e => !!e);\n return el;\n };\n function isPaginationDisabled() {\n return !swiper.params.pagination.el || !swiper.pagination.el || Array.isArray(swiper.pagination.el) && swiper.pagination.el.length === 0;\n }\n function setSideBullets(bulletEl, position) {\n const {\n bulletActiveClass\n } = swiper.params.pagination;\n if (!bulletEl) return;\n bulletEl = bulletEl[`${position === 'prev' ? 'previous' : 'next'}ElementSibling`];\n if (bulletEl) {\n bulletEl.classList.add(`${bulletActiveClass}-${position}`);\n bulletEl = bulletEl[`${position === 'prev' ? 'previous' : 'next'}ElementSibling`];\n if (bulletEl) {\n bulletEl.classList.add(`${bulletActiveClass}-${position}-${position}`);\n }\n }\n }\n function onBulletClick(e) {\n const bulletEl = e.target.closest(classesToSelector(swiper.params.pagination.bulletClass));\n if (!bulletEl) {\n return;\n }\n e.preventDefault();\n const index = elementIndex(bulletEl) * swiper.params.slidesPerGroup;\n if (swiper.params.loop) {\n if (swiper.realIndex === index) return;\n if (index < swiper.loopedSlides || index > swiper.slides.length - swiper.loopedSlides) {\n swiper.loopFix({\n direction: index < swiper.loopedSlides ? 'prev' : 'next',\n activeSlideIndex: index,\n slideTo: false\n });\n }\n swiper.slideToLoop(index);\n } else {\n swiper.slideTo(index);\n }\n }\n function update() {\n // Render || Update Pagination bullets/items\n const rtl = swiper.rtl;\n const params = swiper.params.pagination;\n if (isPaginationDisabled()) return;\n let el = swiper.pagination.el;\n el = makeElementsArray(el);\n // Current/Total\n let current;\n const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;\n const total = swiper.params.loop ? Math.ceil(slidesLength / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n if (swiper.params.loop) {\n current = swiper.params.slidesPerGroup > 1 ? Math.floor(swiper.realIndex / swiper.params.slidesPerGroup) : swiper.realIndex;\n } else if (typeof swiper.snapIndex !== 'undefined') {\n current = swiper.snapIndex;\n } else {\n current = swiper.activeIndex || 0;\n }\n // Types\n if (params.type === 'bullets' && swiper.pagination.bullets && swiper.pagination.bullets.length > 0) {\n const bullets = swiper.pagination.bullets;\n let firstIndex;\n let lastIndex;\n let midIndex;\n if (params.dynamicBullets) {\n bulletSize = elementOuterSize(bullets[0], swiper.isHorizontal() ? 'width' : 'height', true);\n el.forEach(subEl => {\n subEl.style[swiper.isHorizontal() ? 'width' : 'height'] = `${bulletSize * (params.dynamicMainBullets + 4)}px`;\n });\n if (params.dynamicMainBullets > 1 && swiper.previousIndex !== undefined) {\n dynamicBulletIndex += current - (swiper.previousIndex || 0);\n if (dynamicBulletIndex > params.dynamicMainBullets - 1) {\n dynamicBulletIndex = params.dynamicMainBullets - 1;\n } else if (dynamicBulletIndex < 0) {\n dynamicBulletIndex = 0;\n }\n }\n firstIndex = Math.max(current - dynamicBulletIndex, 0);\n lastIndex = firstIndex + (Math.min(bullets.length, params.dynamicMainBullets) - 1);\n midIndex = (lastIndex + firstIndex) / 2;\n }\n bullets.forEach(bulletEl => {\n bulletEl.classList.remove(...['', '-next', '-next-next', '-prev', '-prev-prev', '-main'].map(suffix => `${params.bulletActiveClass}${suffix}`));\n });\n if (el.length > 1) {\n bullets.forEach(bullet => {\n const bulletIndex = elementIndex(bullet);\n if (bulletIndex === current) {\n bullet.classList.add(params.bulletActiveClass);\n }\n if (params.dynamicBullets) {\n if (bulletIndex >= firstIndex && bulletIndex <= lastIndex) {\n bullet.classList.add(`${params.bulletActiveClass}-main`);\n }\n if (bulletIndex === firstIndex) {\n setSideBullets(bullet, 'prev');\n }\n if (bulletIndex === lastIndex) {\n setSideBullets(bullet, 'next');\n }\n }\n });\n } else {\n const bullet = bullets[current];\n if (bullet) {\n bullet.classList.add(params.bulletActiveClass);\n }\n if (params.dynamicBullets) {\n const firstDisplayedBullet = bullets[firstIndex];\n const lastDisplayedBullet = bullets[lastIndex];\n for (let i = firstIndex; i <= lastIndex; i += 1) {\n if (bullets[i]) {\n bullets[i].classList.add(`${params.bulletActiveClass}-main`);\n }\n }\n setSideBullets(firstDisplayedBullet, 'prev');\n setSideBullets(lastDisplayedBullet, 'next');\n }\n }\n if (params.dynamicBullets) {\n const dynamicBulletsLength = Math.min(bullets.length, params.dynamicMainBullets + 4);\n const bulletsOffset = (bulletSize * dynamicBulletsLength - bulletSize) / 2 - midIndex * bulletSize;\n const offsetProp = rtl ? 'right' : 'left';\n bullets.forEach(bullet => {\n bullet.style[swiper.isHorizontal() ? offsetProp : 'top'] = `${bulletsOffset}px`;\n });\n }\n }\n el.forEach((subEl, subElIndex) => {\n if (params.type === 'fraction') {\n subEl.querySelectorAll(classesToSelector(params.currentClass)).forEach(fractionEl => {\n fractionEl.textContent = params.formatFractionCurrent(current + 1);\n });\n subEl.querySelectorAll(classesToSelector(params.totalClass)).forEach(totalEl => {\n totalEl.textContent = params.formatFractionTotal(total);\n });\n }\n if (params.type === 'progressbar') {\n let progressbarDirection;\n if (params.progressbarOpposite) {\n progressbarDirection = swiper.isHorizontal() ? 'vertical' : 'horizontal';\n } else {\n progressbarDirection = swiper.isHorizontal() ? 'horizontal' : 'vertical';\n }\n const scale = (current + 1) / total;\n let scaleX = 1;\n let scaleY = 1;\n if (progressbarDirection === 'horizontal') {\n scaleX = scale;\n } else {\n scaleY = scale;\n }\n subEl.querySelectorAll(classesToSelector(params.progressbarFillClass)).forEach(progressEl => {\n progressEl.style.transform = `translate3d(0,0,0) scaleX(${scaleX}) scaleY(${scaleY})`;\n progressEl.style.transitionDuration = `${swiper.params.speed}ms`;\n });\n }\n if (params.type === 'custom' && params.renderCustom) {\n subEl.innerHTML = params.renderCustom(swiper, current + 1, total);\n if (subElIndex === 0) emit('paginationRender', subEl);\n } else {\n if (subElIndex === 0) emit('paginationRender', subEl);\n emit('paginationUpdate', subEl);\n }\n if (swiper.params.watchOverflow && swiper.enabled) {\n subEl.classList[swiper.isLocked ? 'add' : 'remove'](params.lockClass);\n }\n });\n }\n function render() {\n // Render Container\n const params = swiper.params.pagination;\n if (isPaginationDisabled()) return;\n const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;\n let el = swiper.pagination.el;\n el = makeElementsArray(el);\n let paginationHTML = '';\n if (params.type === 'bullets') {\n let numberOfBullets = swiper.params.loop ? Math.ceil(slidesLength / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n if (swiper.params.freeMode && swiper.params.freeMode.enabled && numberOfBullets > slidesLength) {\n numberOfBullets = slidesLength;\n }\n for (let i = 0; i < numberOfBullets; i += 1) {\n if (params.renderBullet) {\n paginationHTML += params.renderBullet.call(swiper, i, params.bulletClass);\n } else {\n paginationHTML += `<${params.bulletElement} class=\"${params.bulletClass}\">`;\n }\n }\n }\n if (params.type === 'fraction') {\n if (params.renderFraction) {\n paginationHTML = params.renderFraction.call(swiper, params.currentClass, params.totalClass);\n } else {\n paginationHTML = `` + ' / ' + ``;\n }\n }\n if (params.type === 'progressbar') {\n if (params.renderProgressbar) {\n paginationHTML = params.renderProgressbar.call(swiper, params.progressbarFillClass);\n } else {\n paginationHTML = ``;\n }\n }\n el.forEach(subEl => {\n if (params.type !== 'custom') {\n subEl.innerHTML = paginationHTML || '';\n }\n if (params.type === 'bullets') {\n swiper.pagination.bullets = [...subEl.querySelectorAll(classesToSelector(params.bulletClass))];\n }\n });\n if (params.type !== 'custom') {\n emit('paginationRender', el[0]);\n }\n }\n function init() {\n swiper.params.pagination = createElementIfNotDefined(swiper, swiper.originalParams.pagination, swiper.params.pagination, {\n el: 'swiper-pagination'\n });\n const params = swiper.params.pagination;\n if (!params.el) return;\n let el;\n if (typeof params.el === 'string' && swiper.isElement) {\n el = swiper.el.shadowRoot.querySelector(params.el);\n }\n if (!el && typeof params.el === 'string') {\n el = [...document.querySelectorAll(params.el)];\n }\n if (!el) {\n el = params.el;\n }\n if (!el || el.length === 0) return;\n if (swiper.params.uniqueNavElements && typeof params.el === 'string' && Array.isArray(el) && el.length > 1) {\n el = [...swiper.el.querySelectorAll(params.el)];\n // check if it belongs to another nested Swiper\n if (el.length > 1) {\n el = el.filter(subEl => {\n if (elementParents(subEl, '.swiper')[0] !== swiper.el) return false;\n return true;\n })[0];\n }\n }\n if (Array.isArray(el) && el.length === 1) el = el[0];\n Object.assign(swiper.pagination, {\n el\n });\n el = makeElementsArray(el);\n el.forEach(subEl => {\n if (params.type === 'bullets' && params.clickable) {\n subEl.classList.add(params.clickableClass);\n }\n subEl.classList.add(params.modifierClass + params.type);\n subEl.classList.add(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n if (params.type === 'bullets' && params.dynamicBullets) {\n subEl.classList.add(`${params.modifierClass}${params.type}-dynamic`);\n dynamicBulletIndex = 0;\n if (params.dynamicMainBullets < 1) {\n params.dynamicMainBullets = 1;\n }\n }\n if (params.type === 'progressbar' && params.progressbarOpposite) {\n subEl.classList.add(params.progressbarOppositeClass);\n }\n if (params.clickable) {\n subEl.addEventListener('click', onBulletClick);\n }\n if (!swiper.enabled) {\n subEl.classList.add(params.lockClass);\n }\n });\n }\n function destroy() {\n const params = swiper.params.pagination;\n if (isPaginationDisabled()) return;\n let el = swiper.pagination.el;\n if (el) {\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.classList.remove(params.hiddenClass);\n subEl.classList.remove(params.modifierClass + params.type);\n subEl.classList.remove(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n if (params.clickable) {\n subEl.removeEventListener('click', onBulletClick);\n }\n });\n }\n if (swiper.pagination.bullets) swiper.pagination.bullets.forEach(subEl => subEl.classList.remove(params.bulletActiveClass));\n }\n on('init', () => {\n if (swiper.params.pagination.enabled === false) {\n // eslint-disable-next-line\n disable();\n } else {\n init();\n render();\n update();\n }\n });\n on('activeIndexChange', () => {\n if (typeof swiper.snapIndex === 'undefined') {\n update();\n }\n });\n on('snapIndexChange', () => {\n update();\n });\n on('snapGridLengthChange', () => {\n render();\n update();\n });\n on('destroy', () => {\n destroy();\n });\n on('enable disable', () => {\n let {\n el\n } = swiper.pagination;\n if (el) {\n el = makeElementsArray(el);\n el.forEach(subEl => subEl.classList[swiper.enabled ? 'remove' : 'add'](swiper.params.pagination.lockClass));\n }\n });\n on('lock unlock', () => {\n update();\n });\n on('click', (_s, e) => {\n const targetEl = e.target;\n let {\n el\n } = swiper.pagination;\n if (!Array.isArray(el)) el = [el].filter(element => !!element);\n if (swiper.params.pagination.el && swiper.params.pagination.hideOnClick && el && el.length > 0 && !targetEl.classList.contains(swiper.params.pagination.bulletClass)) {\n if (swiper.navigation && (swiper.navigation.nextEl && targetEl === swiper.navigation.nextEl || swiper.navigation.prevEl && targetEl === swiper.navigation.prevEl)) return;\n const isHidden = el[0].classList.contains(swiper.params.pagination.hiddenClass);\n if (isHidden === true) {\n emit('paginationShow');\n } else {\n emit('paginationHide');\n }\n el.forEach(subEl => subEl.classList.toggle(swiper.params.pagination.hiddenClass));\n }\n });\n const enable = () => {\n swiper.el.classList.remove(swiper.params.pagination.paginationDisabledClass);\n let {\n el\n } = swiper.pagination;\n if (el) {\n el = makeElementsArray(el);\n el.forEach(subEl => subEl.classList.remove(swiper.params.pagination.paginationDisabledClass));\n }\n init();\n render();\n update();\n };\n const disable = () => {\n swiper.el.classList.add(swiper.params.pagination.paginationDisabledClass);\n let {\n el\n } = swiper.pagination;\n if (el) {\n el = makeElementsArray(el);\n el.forEach(subEl => subEl.classList.add(swiper.params.pagination.paginationDisabledClass));\n }\n destroy();\n };\n Object.assign(swiper.pagination, {\n enable,\n disable,\n render,\n update,\n init,\n destroy\n });\n}","import { getDocument } from 'ssr-window';\nimport { createElement, elementOffset, nextTick } from '../../shared/utils.js';\nimport createElementIfNotDefined from '../../shared/create-element-if-not-defined.js';\nexport default function Scrollbar({\n swiper,\n extendParams,\n on,\n emit\n}) {\n const document = getDocument();\n let isTouched = false;\n let timeout = null;\n let dragTimeout = null;\n let dragStartPos;\n let dragSize;\n let trackSize;\n let divider;\n extendParams({\n scrollbar: {\n el: null,\n dragSize: 'auto',\n hide: false,\n draggable: false,\n snapOnRelease: true,\n lockClass: 'swiper-scrollbar-lock',\n dragClass: 'swiper-scrollbar-drag',\n scrollbarDisabledClass: 'swiper-scrollbar-disabled',\n horizontalClass: `swiper-scrollbar-horizontal`,\n verticalClass: `swiper-scrollbar-vertical`\n }\n });\n swiper.scrollbar = {\n el: null,\n dragEl: null\n };\n function setTranslate() {\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n const {\n scrollbar,\n rtlTranslate: rtl\n } = swiper;\n const {\n dragEl,\n el\n } = scrollbar;\n const params = swiper.params.scrollbar;\n const progress = swiper.params.loop ? swiper.progressLoop : swiper.progress;\n let newSize = dragSize;\n let newPos = (trackSize - dragSize) * progress;\n if (rtl) {\n newPos = -newPos;\n if (newPos > 0) {\n newSize = dragSize - newPos;\n newPos = 0;\n } else if (-newPos + dragSize > trackSize) {\n newSize = trackSize + newPos;\n }\n } else if (newPos < 0) {\n newSize = dragSize + newPos;\n newPos = 0;\n } else if (newPos + dragSize > trackSize) {\n newSize = trackSize - newPos;\n }\n if (swiper.isHorizontal()) {\n dragEl.style.transform = `translate3d(${newPos}px, 0, 0)`;\n dragEl.style.width = `${newSize}px`;\n } else {\n dragEl.style.transform = `translate3d(0px, ${newPos}px, 0)`;\n dragEl.style.height = `${newSize}px`;\n }\n if (params.hide) {\n clearTimeout(timeout);\n el.style.opacity = 1;\n timeout = setTimeout(() => {\n el.style.opacity = 0;\n el.style.transitionDuration = '400ms';\n }, 1000);\n }\n }\n function setTransition(duration) {\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n swiper.scrollbar.dragEl.style.transitionDuration = `${duration}ms`;\n }\n function updateSize() {\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n const {\n scrollbar\n } = swiper;\n const {\n dragEl,\n el\n } = scrollbar;\n dragEl.style.width = '';\n dragEl.style.height = '';\n trackSize = swiper.isHorizontal() ? el.offsetWidth : el.offsetHeight;\n divider = swiper.size / (swiper.virtualSize + swiper.params.slidesOffsetBefore - (swiper.params.centeredSlides ? swiper.snapGrid[0] : 0));\n if (swiper.params.scrollbar.dragSize === 'auto') {\n dragSize = trackSize * divider;\n } else {\n dragSize = parseInt(swiper.params.scrollbar.dragSize, 10);\n }\n if (swiper.isHorizontal()) {\n dragEl.style.width = `${dragSize}px`;\n } else {\n dragEl.style.height = `${dragSize}px`;\n }\n if (divider >= 1) {\n el.style.display = 'none';\n } else {\n el.style.display = '';\n }\n if (swiper.params.scrollbar.hide) {\n el.style.opacity = 0;\n }\n if (swiper.params.watchOverflow && swiper.enabled) {\n scrollbar.el.classList[swiper.isLocked ? 'add' : 'remove'](swiper.params.scrollbar.lockClass);\n }\n }\n function getPointerPosition(e) {\n return swiper.isHorizontal() ? e.clientX : e.clientY;\n }\n function setDragPosition(e) {\n const {\n scrollbar,\n rtlTranslate: rtl\n } = swiper;\n const {\n el\n } = scrollbar;\n let positionRatio;\n positionRatio = (getPointerPosition(e) - elementOffset(el)[swiper.isHorizontal() ? 'left' : 'top'] - (dragStartPos !== null ? dragStartPos : dragSize / 2)) / (trackSize - dragSize);\n positionRatio = Math.max(Math.min(positionRatio, 1), 0);\n if (rtl) {\n positionRatio = 1 - positionRatio;\n }\n const position = swiper.minTranslate() + (swiper.maxTranslate() - swiper.minTranslate()) * positionRatio;\n swiper.updateProgress(position);\n swiper.setTranslate(position);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n function onDragStart(e) {\n const params = swiper.params.scrollbar;\n const {\n scrollbar,\n wrapperEl\n } = swiper;\n const {\n el,\n dragEl\n } = scrollbar;\n isTouched = true;\n dragStartPos = e.target === dragEl ? getPointerPosition(e) - e.target.getBoundingClientRect()[swiper.isHorizontal() ? 'left' : 'top'] : null;\n e.preventDefault();\n e.stopPropagation();\n wrapperEl.style.transitionDuration = '100ms';\n dragEl.style.transitionDuration = '100ms';\n setDragPosition(e);\n clearTimeout(dragTimeout);\n el.style.transitionDuration = '0ms';\n if (params.hide) {\n el.style.opacity = 1;\n }\n if (swiper.params.cssMode) {\n swiper.wrapperEl.style['scroll-snap-type'] = 'none';\n }\n emit('scrollbarDragStart', e);\n }\n function onDragMove(e) {\n const {\n scrollbar,\n wrapperEl\n } = swiper;\n const {\n el,\n dragEl\n } = scrollbar;\n if (!isTouched) return;\n if (e.preventDefault) e.preventDefault();else e.returnValue = false;\n setDragPosition(e);\n wrapperEl.style.transitionDuration = '0ms';\n el.style.transitionDuration = '0ms';\n dragEl.style.transitionDuration = '0ms';\n emit('scrollbarDragMove', e);\n }\n function onDragEnd(e) {\n const params = swiper.params.scrollbar;\n const {\n scrollbar,\n wrapperEl\n } = swiper;\n const {\n el\n } = scrollbar;\n if (!isTouched) return;\n isTouched = false;\n if (swiper.params.cssMode) {\n swiper.wrapperEl.style['scroll-snap-type'] = '';\n wrapperEl.style.transitionDuration = '';\n }\n if (params.hide) {\n clearTimeout(dragTimeout);\n dragTimeout = nextTick(() => {\n el.style.opacity = 0;\n el.style.transitionDuration = '400ms';\n }, 1000);\n }\n emit('scrollbarDragEnd', e);\n if (params.snapOnRelease) {\n swiper.slideToClosest();\n }\n }\n function events(method) {\n const {\n scrollbar,\n params\n } = swiper;\n const el = scrollbar.el;\n if (!el) return;\n const target = el;\n const activeListener = params.passiveListeners ? {\n passive: false,\n capture: false\n } : false;\n const passiveListener = params.passiveListeners ? {\n passive: true,\n capture: false\n } : false;\n if (!target) return;\n const eventMethod = method === 'on' ? 'addEventListener' : 'removeEventListener';\n target[eventMethod]('pointerdown', onDragStart, activeListener);\n document[eventMethod]('pointermove', onDragMove, activeListener);\n document[eventMethod]('pointerup', onDragEnd, passiveListener);\n }\n function enableDraggable() {\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n events('on');\n }\n function disableDraggable() {\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n events('off');\n }\n function init() {\n const {\n scrollbar,\n el: swiperEl\n } = swiper;\n swiper.params.scrollbar = createElementIfNotDefined(swiper, swiper.originalParams.scrollbar, swiper.params.scrollbar, {\n el: 'swiper-scrollbar'\n });\n const params = swiper.params.scrollbar;\n if (!params.el) return;\n let el;\n if (typeof params.el === 'string' && swiper.isElement) {\n el = swiper.el.shadowRoot.querySelector(params.el);\n }\n if (!el && typeof params.el === 'string') {\n el = document.querySelectorAll(params.el);\n } else if (!el) {\n el = params.el;\n }\n if (swiper.params.uniqueNavElements && typeof params.el === 'string' && el.length > 1 && swiperEl.querySelectorAll(params.el).length === 1) {\n el = swiperEl.querySelector(params.el);\n }\n if (el.length > 0) el = el[0];\n el.classList.add(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n let dragEl;\n if (el) {\n dragEl = el.querySelector(`.${swiper.params.scrollbar.dragClass}`);\n if (!dragEl) {\n dragEl = createElement('div', swiper.params.scrollbar.dragClass);\n el.append(dragEl);\n }\n }\n Object.assign(scrollbar, {\n el,\n dragEl\n });\n if (params.draggable) {\n enableDraggable();\n }\n if (el) {\n el.classList[swiper.enabled ? 'remove' : 'add'](swiper.params.scrollbar.lockClass);\n }\n }\n function destroy() {\n const params = swiper.params.scrollbar;\n const el = swiper.scrollbar.el;\n if (el) {\n el.classList.remove(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n }\n disableDraggable();\n }\n on('init', () => {\n if (swiper.params.scrollbar.enabled === false) {\n // eslint-disable-next-line\n disable();\n } else {\n init();\n updateSize();\n setTranslate();\n }\n });\n on('update resize observerUpdate lock unlock', () => {\n updateSize();\n });\n on('setTranslate', () => {\n setTranslate();\n });\n on('setTransition', (_s, duration) => {\n setTransition(duration);\n });\n on('enable disable', () => {\n const {\n el\n } = swiper.scrollbar;\n if (el) {\n el.classList[swiper.enabled ? 'remove' : 'add'](swiper.params.scrollbar.lockClass);\n }\n });\n on('destroy', () => {\n destroy();\n });\n const enable = () => {\n swiper.el.classList.remove(swiper.params.scrollbar.scrollbarDisabledClass);\n if (swiper.scrollbar.el) {\n swiper.scrollbar.el.classList.remove(swiper.params.scrollbar.scrollbarDisabledClass);\n }\n init();\n updateSize();\n setTranslate();\n };\n const disable = () => {\n swiper.el.classList.add(swiper.params.scrollbar.scrollbarDisabledClass);\n if (swiper.scrollbar.el) {\n swiper.scrollbar.el.classList.add(swiper.params.scrollbar.scrollbarDisabledClass);\n }\n destroy();\n };\n Object.assign(swiper.scrollbar, {\n enable,\n disable,\n updateSize,\n setTranslate,\n init,\n destroy\n });\n}","import { elementChildren } from '../../shared/utils.js';\nexport default function Parallax({\n swiper,\n extendParams,\n on\n}) {\n extendParams({\n parallax: {\n enabled: false\n }\n });\n const setTransform = (el, progress) => {\n const {\n rtl\n } = swiper;\n const rtlFactor = rtl ? -1 : 1;\n const p = el.getAttribute('data-swiper-parallax') || '0';\n let x = el.getAttribute('data-swiper-parallax-x');\n let y = el.getAttribute('data-swiper-parallax-y');\n const scale = el.getAttribute('data-swiper-parallax-scale');\n const opacity = el.getAttribute('data-swiper-parallax-opacity');\n const rotate = el.getAttribute('data-swiper-parallax-rotate');\n if (x || y) {\n x = x || '0';\n y = y || '0';\n } else if (swiper.isHorizontal()) {\n x = p;\n y = '0';\n } else {\n y = p;\n x = '0';\n }\n if (x.indexOf('%') >= 0) {\n x = `${parseInt(x, 10) * progress * rtlFactor}%`;\n } else {\n x = `${x * progress * rtlFactor}px`;\n }\n if (y.indexOf('%') >= 0) {\n y = `${parseInt(y, 10) * progress}%`;\n } else {\n y = `${y * progress}px`;\n }\n if (typeof opacity !== 'undefined' && opacity !== null) {\n const currentOpacity = opacity - (opacity - 1) * (1 - Math.abs(progress));\n el.style.opacity = currentOpacity;\n }\n let transform = `translate3d(${x}, ${y}, 0px)`;\n if (typeof scale !== 'undefined' && scale !== null) {\n const currentScale = scale - (scale - 1) * (1 - Math.abs(progress));\n transform += ` scale(${currentScale})`;\n }\n if (rotate && typeof rotate !== 'undefined' && rotate !== null) {\n const currentRotate = rotate * progress * -1;\n transform += ` rotate(${currentRotate}deg)`;\n }\n el.style.transform = transform;\n };\n const setTranslate = () => {\n const {\n el,\n slides,\n progress,\n snapGrid\n } = swiper;\n elementChildren(el, '[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]').forEach(subEl => {\n setTransform(subEl, progress);\n });\n slides.forEach((slideEl, slideIndex) => {\n let slideProgress = slideEl.progress;\n if (swiper.params.slidesPerGroup > 1 && swiper.params.slidesPerView !== 'auto') {\n slideProgress += Math.ceil(slideIndex / 2) - progress * (snapGrid.length - 1);\n }\n slideProgress = Math.min(Math.max(slideProgress, -1), 1);\n slideEl.querySelectorAll('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale], [data-swiper-parallax-rotate]').forEach(subEl => {\n setTransform(subEl, slideProgress);\n });\n });\n };\n const setTransition = (duration = swiper.params.speed) => {\n const {\n el\n } = swiper;\n el.querySelectorAll('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]').forEach(parallaxEl => {\n let parallaxDuration = parseInt(parallaxEl.getAttribute('data-swiper-parallax-duration'), 10) || duration;\n if (duration === 0) parallaxDuration = 0;\n parallaxEl.style.transitionDuration = `${parallaxDuration}ms`;\n });\n };\n on('beforeInit', () => {\n if (!swiper.params.parallax.enabled) return;\n swiper.params.watchSlidesProgress = true;\n swiper.originalParams.watchSlidesProgress = true;\n });\n on('init', () => {\n if (!swiper.params.parallax.enabled) return;\n setTranslate();\n });\n on('setTranslate', () => {\n if (!swiper.params.parallax.enabled) return;\n setTranslate();\n });\n on('setTransition', (_swiper, duration) => {\n if (!swiper.params.parallax.enabled) return;\n setTransition(duration);\n });\n}","import { getWindow } from 'ssr-window';\nimport { elementChildren, elementOffset, elementParents, getTranslate } from '../../shared/utils.js';\nexport default function Zoom({\n swiper,\n extendParams,\n on,\n emit\n}) {\n const window = getWindow();\n extendParams({\n zoom: {\n enabled: false,\n maxRatio: 3,\n minRatio: 1,\n toggle: true,\n containerClass: 'swiper-zoom-container',\n zoomedSlideClass: 'swiper-slide-zoomed'\n }\n });\n swiper.zoom = {\n enabled: false\n };\n let currentScale = 1;\n let isScaling = false;\n let fakeGestureTouched;\n let fakeGestureMoved;\n const evCache = [];\n const gesture = {\n slideEl: undefined,\n slideWidth: undefined,\n slideHeight: undefined,\n imageEl: undefined,\n imageWrapEl: undefined,\n maxRatio: 3\n };\n const image = {\n isTouched: undefined,\n isMoved: undefined,\n currentX: undefined,\n currentY: undefined,\n minX: undefined,\n minY: undefined,\n maxX: undefined,\n maxY: undefined,\n width: undefined,\n height: undefined,\n startX: undefined,\n startY: undefined,\n touchesStart: {},\n touchesCurrent: {}\n };\n const velocity = {\n x: undefined,\n y: undefined,\n prevPositionX: undefined,\n prevPositionY: undefined,\n prevTime: undefined\n };\n let scale = 1;\n Object.defineProperty(swiper.zoom, 'scale', {\n get() {\n return scale;\n },\n set(value) {\n if (scale !== value) {\n const imageEl = gesture.imageEl;\n const slideEl = gesture.slideEl;\n emit('zoomChange', value, imageEl, slideEl);\n }\n scale = value;\n }\n });\n function getDistanceBetweenTouches() {\n if (evCache.length < 2) return 1;\n const x1 = evCache[0].pageX;\n const y1 = evCache[0].pageY;\n const x2 = evCache[1].pageX;\n const y2 = evCache[1].pageY;\n const distance = Math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2);\n return distance;\n }\n function getScaleOrigin() {\n if (evCache.length < 2) return {\n x: null,\n y: null\n };\n const box = gesture.imageEl.getBoundingClientRect();\n return [(evCache[0].pageX + (evCache[1].pageX - evCache[0].pageX) / 2 - box.x) / currentScale, (evCache[0].pageY + (evCache[1].pageY - evCache[0].pageY) / 2 - box.y) / currentScale];\n }\n function getSlideSelector() {\n return swiper.isElement ? `swiper-slide` : `.${swiper.params.slideClass}`;\n }\n function eventWithinSlide(e) {\n const slideSelector = getSlideSelector();\n if (e.target.matches(slideSelector)) return true;\n if (swiper.slides.filter(slideEl => slideEl.contains(e.target)).length > 0) return true;\n return false;\n }\n function eventWithinZoomContainer(e) {\n const selector = `.${swiper.params.zoom.containerClass}`;\n if (e.target.matches(selector)) return true;\n if ([...swiper.el.querySelectorAll(selector)].filter(containerEl => containerEl.contains(e.target)).length > 0) return true;\n return false;\n }\n\n // Events\n function onGestureStart(e) {\n if (e.pointerType === 'mouse') {\n evCache.splice(0, evCache.length);\n }\n if (!eventWithinSlide(e)) return;\n const params = swiper.params.zoom;\n fakeGestureTouched = false;\n fakeGestureMoved = false;\n evCache.push(e);\n if (evCache.length < 2) {\n return;\n }\n fakeGestureTouched = true;\n gesture.scaleStart = getDistanceBetweenTouches();\n if (!gesture.slideEl) {\n gesture.slideEl = e.target.closest(`.${swiper.params.slideClass}, swiper-slide`);\n if (!gesture.slideEl) gesture.slideEl = swiper.slides[swiper.activeIndex];\n let imageEl = gesture.slideEl.querySelector(`.${params.containerClass}`);\n if (imageEl) {\n imageEl = imageEl.querySelectorAll('picture, img, svg, canvas, .swiper-zoom-target')[0];\n }\n gesture.imageEl = imageEl;\n if (imageEl) {\n gesture.imageWrapEl = elementParents(gesture.imageEl, `.${params.containerClass}`)[0];\n } else {\n gesture.imageWrapEl = undefined;\n }\n if (!gesture.imageWrapEl) {\n gesture.imageEl = undefined;\n return;\n }\n gesture.maxRatio = gesture.imageWrapEl.getAttribute('data-swiper-zoom') || params.maxRatio;\n }\n if (gesture.imageEl) {\n const [originX, originY] = getScaleOrigin();\n gesture.imageEl.style.transformOrigin = `${originX}px ${originY}px`;\n gesture.imageEl.style.transitionDuration = '0ms';\n }\n isScaling = true;\n }\n function onGestureChange(e) {\n if (!eventWithinSlide(e)) return;\n const params = swiper.params.zoom;\n const zoom = swiper.zoom;\n const pointerIndex = evCache.findIndex(cachedEv => cachedEv.pointerId === e.pointerId);\n if (pointerIndex >= 0) evCache[pointerIndex] = e;\n if (evCache.length < 2) {\n return;\n }\n fakeGestureMoved = true;\n gesture.scaleMove = getDistanceBetweenTouches();\n if (!gesture.imageEl) {\n return;\n }\n zoom.scale = gesture.scaleMove / gesture.scaleStart * currentScale;\n if (zoom.scale > gesture.maxRatio) {\n zoom.scale = gesture.maxRatio - 1 + (zoom.scale - gesture.maxRatio + 1) ** 0.5;\n }\n if (zoom.scale < params.minRatio) {\n zoom.scale = params.minRatio + 1 - (params.minRatio - zoom.scale + 1) ** 0.5;\n }\n gesture.imageEl.style.transform = `translate3d(0,0,0) scale(${zoom.scale})`;\n }\n function onGestureEnd(e) {\n if (!eventWithinSlide(e)) return;\n if (e.pointerType === 'mouse' && e.type === 'pointerout') return;\n const params = swiper.params.zoom;\n const zoom = swiper.zoom;\n const pointerIndex = evCache.findIndex(cachedEv => cachedEv.pointerId === e.pointerId);\n if (pointerIndex >= 0) evCache.splice(pointerIndex, 1);\n if (!fakeGestureTouched || !fakeGestureMoved) {\n return;\n }\n fakeGestureTouched = false;\n fakeGestureMoved = false;\n if (!gesture.imageEl) return;\n zoom.scale = Math.max(Math.min(zoom.scale, gesture.maxRatio), params.minRatio);\n gesture.imageEl.style.transitionDuration = `${swiper.params.speed}ms`;\n gesture.imageEl.style.transform = `translate3d(0,0,0) scale(${zoom.scale})`;\n currentScale = zoom.scale;\n isScaling = false;\n if (zoom.scale === 1) gesture.slideEl = undefined;\n }\n function onTouchStart(e) {\n const device = swiper.device;\n if (!gesture.imageEl) return;\n if (image.isTouched) return;\n if (device.android && e.cancelable) e.preventDefault();\n image.isTouched = true;\n image.touchesStart.x = e.pageX;\n image.touchesStart.y = e.pageY;\n }\n function onTouchMove(e) {\n if (!eventWithinSlide(e) || !eventWithinZoomContainer(e)) return;\n const zoom = swiper.zoom;\n if (!gesture.imageEl) return;\n swiper.allowClick = false;\n if (!image.isTouched || !gesture.slideEl) return;\n if (!image.isMoved) {\n image.width = gesture.imageEl.offsetWidth;\n image.height = gesture.imageEl.offsetHeight;\n image.startX = getTranslate(gesture.imageWrapEl, 'x') || 0;\n image.startY = getTranslate(gesture.imageWrapEl, 'y') || 0;\n gesture.slideWidth = gesture.slideEl.offsetWidth;\n gesture.slideHeight = gesture.slideEl.offsetHeight;\n gesture.imageWrapEl.style.transitionDuration = '0ms';\n }\n // Define if we need image drag\n const scaledWidth = image.width * zoom.scale;\n const scaledHeight = image.height * zoom.scale;\n if (scaledWidth < gesture.slideWidth && scaledHeight < gesture.slideHeight) return;\n image.minX = Math.min(gesture.slideWidth / 2 - scaledWidth / 2, 0);\n image.maxX = -image.minX;\n image.minY = Math.min(gesture.slideHeight / 2 - scaledHeight / 2, 0);\n image.maxY = -image.minY;\n image.touchesCurrent.x = evCache.length > 0 ? evCache[0].pageX : e.pageX;\n image.touchesCurrent.y = evCache.length > 0 ? evCache[0].pageY : e.pageY;\n if (!image.isMoved && !isScaling) {\n if (swiper.isHorizontal() && (Math.floor(image.minX) === Math.floor(image.startX) && image.touchesCurrent.x < image.touchesStart.x || Math.floor(image.maxX) === Math.floor(image.startX) && image.touchesCurrent.x > image.touchesStart.x)) {\n image.isTouched = false;\n return;\n }\n if (!swiper.isHorizontal() && (Math.floor(image.minY) === Math.floor(image.startY) && image.touchesCurrent.y < image.touchesStart.y || Math.floor(image.maxY) === Math.floor(image.startY) && image.touchesCurrent.y > image.touchesStart.y)) {\n image.isTouched = false;\n return;\n }\n }\n if (e.cancelable) {\n e.preventDefault();\n }\n e.stopPropagation();\n image.isMoved = true;\n image.currentX = image.touchesCurrent.x - image.touchesStart.x + image.startX;\n image.currentY = image.touchesCurrent.y - image.touchesStart.y + image.startY;\n if (image.currentX < image.minX) {\n image.currentX = image.minX + 1 - (image.minX - image.currentX + 1) ** 0.8;\n }\n if (image.currentX > image.maxX) {\n image.currentX = image.maxX - 1 + (image.currentX - image.maxX + 1) ** 0.8;\n }\n if (image.currentY < image.minY) {\n image.currentY = image.minY + 1 - (image.minY - image.currentY + 1) ** 0.8;\n }\n if (image.currentY > image.maxY) {\n image.currentY = image.maxY - 1 + (image.currentY - image.maxY + 1) ** 0.8;\n }\n\n // Velocity\n if (!velocity.prevPositionX) velocity.prevPositionX = image.touchesCurrent.x;\n if (!velocity.prevPositionY) velocity.prevPositionY = image.touchesCurrent.y;\n if (!velocity.prevTime) velocity.prevTime = Date.now();\n velocity.x = (image.touchesCurrent.x - velocity.prevPositionX) / (Date.now() - velocity.prevTime) / 2;\n velocity.y = (image.touchesCurrent.y - velocity.prevPositionY) / (Date.now() - velocity.prevTime) / 2;\n if (Math.abs(image.touchesCurrent.x - velocity.prevPositionX) < 2) velocity.x = 0;\n if (Math.abs(image.touchesCurrent.y - velocity.prevPositionY) < 2) velocity.y = 0;\n velocity.prevPositionX = image.touchesCurrent.x;\n velocity.prevPositionY = image.touchesCurrent.y;\n velocity.prevTime = Date.now();\n gesture.imageWrapEl.style.transform = `translate3d(${image.currentX}px, ${image.currentY}px,0)`;\n }\n function onTouchEnd() {\n const zoom = swiper.zoom;\n if (!gesture.imageEl) return;\n if (!image.isTouched || !image.isMoved) {\n image.isTouched = false;\n image.isMoved = false;\n return;\n }\n image.isTouched = false;\n image.isMoved = false;\n let momentumDurationX = 300;\n let momentumDurationY = 300;\n const momentumDistanceX = velocity.x * momentumDurationX;\n const newPositionX = image.currentX + momentumDistanceX;\n const momentumDistanceY = velocity.y * momentumDurationY;\n const newPositionY = image.currentY + momentumDistanceY;\n\n // Fix duration\n if (velocity.x !== 0) momentumDurationX = Math.abs((newPositionX - image.currentX) / velocity.x);\n if (velocity.y !== 0) momentumDurationY = Math.abs((newPositionY - image.currentY) / velocity.y);\n const momentumDuration = Math.max(momentumDurationX, momentumDurationY);\n image.currentX = newPositionX;\n image.currentY = newPositionY;\n\n // Define if we need image drag\n const scaledWidth = image.width * zoom.scale;\n const scaledHeight = image.height * zoom.scale;\n image.minX = Math.min(gesture.slideWidth / 2 - scaledWidth / 2, 0);\n image.maxX = -image.minX;\n image.minY = Math.min(gesture.slideHeight / 2 - scaledHeight / 2, 0);\n image.maxY = -image.minY;\n image.currentX = Math.max(Math.min(image.currentX, image.maxX), image.minX);\n image.currentY = Math.max(Math.min(image.currentY, image.maxY), image.minY);\n gesture.imageWrapEl.style.transitionDuration = `${momentumDuration}ms`;\n gesture.imageWrapEl.style.transform = `translate3d(${image.currentX}px, ${image.currentY}px,0)`;\n }\n function onTransitionEnd() {\n const zoom = swiper.zoom;\n if (gesture.slideEl && swiper.previousIndex !== swiper.activeIndex) {\n if (gesture.imageEl) {\n gesture.imageEl.style.transform = 'translate3d(0,0,0) scale(1)';\n }\n if (gesture.imageWrapEl) {\n gesture.imageWrapEl.style.transform = 'translate3d(0,0,0)';\n }\n zoom.scale = 1;\n currentScale = 1;\n gesture.slideEl = undefined;\n gesture.imageEl = undefined;\n gesture.imageWrapEl = undefined;\n }\n }\n function zoomIn(e) {\n const zoom = swiper.zoom;\n const params = swiper.params.zoom;\n if (!gesture.slideEl) {\n if (e && e.target) {\n gesture.slideEl = e.target.closest(`.${swiper.params.slideClass}, swiper-slide`);\n }\n if (!gesture.slideEl) {\n if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) {\n gesture.slideEl = elementChildren(swiper.slidesEl, `.${swiper.params.slideActiveClass}`)[0];\n } else {\n gesture.slideEl = swiper.slides[swiper.activeIndex];\n }\n }\n let imageEl = gesture.slideEl.querySelector(`.${params.containerClass}`);\n if (imageEl) {\n imageEl = imageEl.querySelectorAll('picture, img, svg, canvas, .swiper-zoom-target')[0];\n }\n gesture.imageEl = imageEl;\n if (imageEl) {\n gesture.imageWrapEl = elementParents(gesture.imageEl, `.${params.containerClass}`)[0];\n } else {\n gesture.imageWrapEl = undefined;\n }\n }\n if (!gesture.imageEl || !gesture.imageWrapEl) return;\n if (swiper.params.cssMode) {\n swiper.wrapperEl.style.overflow = 'hidden';\n swiper.wrapperEl.style.touchAction = 'none';\n }\n gesture.slideEl.classList.add(`${params.zoomedSlideClass}`);\n let touchX;\n let touchY;\n let offsetX;\n let offsetY;\n let diffX;\n let diffY;\n let translateX;\n let translateY;\n let imageWidth;\n let imageHeight;\n let scaledWidth;\n let scaledHeight;\n let translateMinX;\n let translateMinY;\n let translateMaxX;\n let translateMaxY;\n let slideWidth;\n let slideHeight;\n if (typeof image.touchesStart.x === 'undefined' && e) {\n touchX = e.pageX;\n touchY = e.pageY;\n } else {\n touchX = image.touchesStart.x;\n touchY = image.touchesStart.y;\n }\n const forceZoomRatio = typeof e === 'number' ? e : null;\n if (currentScale === 1 && forceZoomRatio) {\n touchX = undefined;\n touchY = undefined;\n }\n zoom.scale = forceZoomRatio || gesture.imageWrapEl.getAttribute('data-swiper-zoom') || params.maxRatio;\n currentScale = forceZoomRatio || gesture.imageWrapEl.getAttribute('data-swiper-zoom') || params.maxRatio;\n if (e && !(currentScale === 1 && forceZoomRatio)) {\n slideWidth = gesture.slideEl.offsetWidth;\n slideHeight = gesture.slideEl.offsetHeight;\n offsetX = elementOffset(gesture.slideEl).left + window.scrollX;\n offsetY = elementOffset(gesture.slideEl).top + window.scrollY;\n diffX = offsetX + slideWidth / 2 - touchX;\n diffY = offsetY + slideHeight / 2 - touchY;\n imageWidth = gesture.imageEl.offsetWidth;\n imageHeight = gesture.imageEl.offsetHeight;\n scaledWidth = imageWidth * zoom.scale;\n scaledHeight = imageHeight * zoom.scale;\n translateMinX = Math.min(slideWidth / 2 - scaledWidth / 2, 0);\n translateMinY = Math.min(slideHeight / 2 - scaledHeight / 2, 0);\n translateMaxX = -translateMinX;\n translateMaxY = -translateMinY;\n translateX = diffX * zoom.scale;\n translateY = diffY * zoom.scale;\n if (translateX < translateMinX) {\n translateX = translateMinX;\n }\n if (translateX > translateMaxX) {\n translateX = translateMaxX;\n }\n if (translateY < translateMinY) {\n translateY = translateMinY;\n }\n if (translateY > translateMaxY) {\n translateY = translateMaxY;\n }\n } else {\n translateX = 0;\n translateY = 0;\n }\n gesture.imageWrapEl.style.transitionDuration = '300ms';\n gesture.imageWrapEl.style.transform = `translate3d(${translateX}px, ${translateY}px,0)`;\n gesture.imageEl.style.transitionDuration = '300ms';\n gesture.imageEl.style.transform = `translate3d(0,0,0) scale(${zoom.scale})`;\n }\n function zoomOut() {\n const zoom = swiper.zoom;\n const params = swiper.params.zoom;\n if (!gesture.slideEl) {\n if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) {\n gesture.slideEl = elementChildren(swiper.slidesEl, `.${swiper.params.slideActiveClass}`)[0];\n } else {\n gesture.slideEl = swiper.slides[swiper.activeIndex];\n }\n let imageEl = gesture.slideEl.querySelector(`.${params.containerClass}`);\n if (imageEl) {\n imageEl = imageEl.querySelectorAll('picture, img, svg, canvas, .swiper-zoom-target')[0];\n }\n gesture.imageEl = imageEl;\n if (imageEl) {\n gesture.imageWrapEl = elementParents(gesture.imageEl, `.${params.containerClass}`)[0];\n } else {\n gesture.imageWrapEl = undefined;\n }\n }\n if (!gesture.imageEl || !gesture.imageWrapEl) return;\n if (swiper.params.cssMode) {\n swiper.wrapperEl.style.overflow = '';\n swiper.wrapperEl.style.touchAction = '';\n }\n zoom.scale = 1;\n currentScale = 1;\n gesture.imageWrapEl.style.transitionDuration = '300ms';\n gesture.imageWrapEl.style.transform = 'translate3d(0,0,0)';\n gesture.imageEl.style.transitionDuration = '300ms';\n gesture.imageEl.style.transform = 'translate3d(0,0,0) scale(1)';\n gesture.slideEl.classList.remove(`${params.zoomedSlideClass}`);\n gesture.slideEl = undefined;\n }\n\n // Toggle Zoom\n function zoomToggle(e) {\n const zoom = swiper.zoom;\n if (zoom.scale && zoom.scale !== 1) {\n // Zoom Out\n zoomOut();\n } else {\n // Zoom In\n zoomIn(e);\n }\n }\n function getListeners() {\n const passiveListener = swiper.params.passiveListeners ? {\n passive: true,\n capture: false\n } : false;\n const activeListenerWithCapture = swiper.params.passiveListeners ? {\n passive: false,\n capture: true\n } : true;\n return {\n passiveListener,\n activeListenerWithCapture\n };\n }\n\n // Attach/Detach Events\n function enable() {\n const zoom = swiper.zoom;\n if (zoom.enabled) return;\n zoom.enabled = true;\n const {\n passiveListener,\n activeListenerWithCapture\n } = getListeners();\n\n // Scale image\n\n swiper.wrapperEl.addEventListener('pointerdown', onGestureStart, passiveListener);\n swiper.wrapperEl.addEventListener('pointermove', onGestureChange, activeListenerWithCapture);\n ['pointerup', 'pointercancel', 'pointerout'].forEach(eventName => {\n swiper.wrapperEl.addEventListener(eventName, onGestureEnd, passiveListener);\n });\n\n // Move image\n swiper.wrapperEl.addEventListener('pointermove', onTouchMove, activeListenerWithCapture);\n }\n function disable() {\n const zoom = swiper.zoom;\n if (!zoom.enabled) return;\n zoom.enabled = false;\n const {\n passiveListener,\n activeListenerWithCapture\n } = getListeners();\n\n // Scale image\n swiper.wrapperEl.removeEventListener('pointerdown', onGestureStart, passiveListener);\n swiper.wrapperEl.removeEventListener('pointermove', onGestureChange, activeListenerWithCapture);\n ['pointerup', 'pointercancel', 'pointerout'].forEach(eventName => {\n swiper.wrapperEl.removeEventListener(eventName, onGestureEnd, passiveListener);\n });\n\n // Move image\n swiper.wrapperEl.removeEventListener('pointermove', onTouchMove, activeListenerWithCapture);\n }\n on('init', () => {\n if (swiper.params.zoom.enabled) {\n enable();\n }\n });\n on('destroy', () => {\n disable();\n });\n on('touchStart', (_s, e) => {\n if (!swiper.zoom.enabled) return;\n onTouchStart(e);\n });\n on('touchEnd', (_s, e) => {\n if (!swiper.zoom.enabled) return;\n onTouchEnd(e);\n });\n on('doubleTap', (_s, e) => {\n if (!swiper.animating && swiper.params.zoom.enabled && swiper.zoom.enabled && swiper.params.zoom.toggle) {\n zoomToggle(e);\n }\n });\n on('transitionEnd', () => {\n if (swiper.zoom.enabled && swiper.params.zoom.enabled) {\n onTransitionEnd();\n }\n });\n on('slideChange', () => {\n if (swiper.zoom.enabled && swiper.params.zoom.enabled && swiper.params.cssMode) {\n onTransitionEnd();\n }\n });\n Object.assign(swiper.zoom, {\n enable,\n disable,\n in: zoomIn,\n out: zoomOut,\n toggle: zoomToggle\n });\n}","/* eslint no-bitwise: [\"error\", { \"allow\": [\">>\"] }] */\nimport { elementTransitionEnd, nextTick } from '../../shared/utils.js';\nexport default function Controller({\n swiper,\n extendParams,\n on\n}) {\n extendParams({\n controller: {\n control: undefined,\n inverse: false,\n by: 'slide' // or 'container'\n }\n });\n\n swiper.controller = {\n control: undefined\n };\n function LinearSpline(x, y) {\n const binarySearch = function search() {\n let maxIndex;\n let minIndex;\n let guess;\n return (array, val) => {\n minIndex = -1;\n maxIndex = array.length;\n while (maxIndex - minIndex > 1) {\n guess = maxIndex + minIndex >> 1;\n if (array[guess] <= val) {\n minIndex = guess;\n } else {\n maxIndex = guess;\n }\n }\n return maxIndex;\n };\n }();\n this.x = x;\n this.y = y;\n this.lastIndex = x.length - 1;\n // Given an x value (x2), return the expected y2 value:\n // (x1,y1) is the known point before given value,\n // (x3,y3) is the known point after given value.\n let i1;\n let i3;\n this.interpolate = function interpolate(x2) {\n if (!x2) return 0;\n\n // Get the indexes of x1 and x3 (the array indexes before and after given x2):\n i3 = binarySearch(this.x, x2);\n i1 = i3 - 1;\n\n // We have our indexes i1 & i3, so we can calculate already:\n // y2 := ((x2−x1) × (y3−y1)) ÷ (x3−x1) + y1\n return (x2 - this.x[i1]) * (this.y[i3] - this.y[i1]) / (this.x[i3] - this.x[i1]) + this.y[i1];\n };\n return this;\n }\n // xxx: for now i will just save one spline function to to\n function getInterpolateFunction(c) {\n if (!swiper.controller.spline) {\n swiper.controller.spline = swiper.params.loop ? new LinearSpline(swiper.slidesGrid, c.slidesGrid) : new LinearSpline(swiper.snapGrid, c.snapGrid);\n }\n }\n function setTranslate(_t, byController) {\n const controlled = swiper.controller.control;\n let multiplier;\n let controlledTranslate;\n const Swiper = swiper.constructor;\n function setControlledTranslate(c) {\n // this will create an Interpolate function based on the snapGrids\n // x is the Grid of the scrolled scroller and y will be the controlled scroller\n // it makes sense to create this only once and recall it for the interpolation\n // the function does a lot of value caching for performance\n const translate = swiper.rtlTranslate ? -swiper.translate : swiper.translate;\n if (swiper.params.controller.by === 'slide') {\n getInterpolateFunction(c);\n // i am not sure why the values have to be multiplicated this way, tried to invert the snapGrid\n // but it did not work out\n controlledTranslate = -swiper.controller.spline.interpolate(-translate);\n }\n if (!controlledTranslate || swiper.params.controller.by === 'container') {\n multiplier = (c.maxTranslate() - c.minTranslate()) / (swiper.maxTranslate() - swiper.minTranslate());\n controlledTranslate = (translate - swiper.minTranslate()) * multiplier + c.minTranslate();\n }\n if (swiper.params.controller.inverse) {\n controlledTranslate = c.maxTranslate() - controlledTranslate;\n }\n c.updateProgress(controlledTranslate);\n c.setTranslate(controlledTranslate, swiper);\n c.updateActiveIndex();\n c.updateSlidesClasses();\n }\n if (Array.isArray(controlled)) {\n for (let i = 0; i < controlled.length; i += 1) {\n if (controlled[i] !== byController && controlled[i] instanceof Swiper) {\n setControlledTranslate(controlled[i]);\n }\n }\n } else if (controlled instanceof Swiper && byController !== controlled) {\n setControlledTranslate(controlled);\n }\n }\n function setTransition(duration, byController) {\n const Swiper = swiper.constructor;\n const controlled = swiper.controller.control;\n let i;\n function setControlledTransition(c) {\n c.setTransition(duration, swiper);\n if (duration !== 0) {\n c.transitionStart();\n if (c.params.autoHeight) {\n nextTick(() => {\n c.updateAutoHeight();\n });\n }\n elementTransitionEnd(c.wrapperEl, () => {\n if (!controlled) return;\n c.transitionEnd();\n });\n }\n }\n if (Array.isArray(controlled)) {\n for (i = 0; i < controlled.length; i += 1) {\n if (controlled[i] !== byController && controlled[i] instanceof Swiper) {\n setControlledTransition(controlled[i]);\n }\n }\n } else if (controlled instanceof Swiper && byController !== controlled) {\n setControlledTransition(controlled);\n }\n }\n function removeSpline() {\n if (!swiper.controller.control) return;\n if (swiper.controller.spline) {\n swiper.controller.spline = undefined;\n delete swiper.controller.spline;\n }\n }\n on('beforeInit', () => {\n if (typeof window !== 'undefined' && (\n // eslint-disable-line\n typeof swiper.params.controller.control === 'string' || swiper.params.controller.control instanceof HTMLElement)) {\n const controlElement = document.querySelector(swiper.params.controller.control);\n if (controlElement && controlElement.swiper) {\n swiper.controller.control = controlElement.swiper;\n } else if (controlElement) {\n const onControllerSwiper = e => {\n swiper.controller.control = e.detail[0];\n swiper.update();\n controlElement.removeEventListener('init', onControllerSwiper);\n };\n controlElement.addEventListener('init', onControllerSwiper);\n }\n return;\n }\n swiper.controller.control = swiper.params.controller.control;\n });\n on('update', () => {\n removeSpline();\n });\n on('resize', () => {\n removeSpline();\n });\n on('observerUpdate', () => {\n removeSpline();\n });\n on('setTranslate', (_s, translate, byController) => {\n if (!swiper.controller.control) return;\n swiper.controller.setTranslate(translate, byController);\n });\n on('setTransition', (_s, duration, byController) => {\n if (!swiper.controller.control) return;\n swiper.controller.setTransition(duration, byController);\n });\n Object.assign(swiper.controller, {\n setTranslate,\n setTransition\n });\n}","import classesToSelector from '../../shared/classes-to-selector.js';\nimport { createElement, elementIndex } from '../../shared/utils.js';\nexport default function A11y({\n swiper,\n extendParams,\n on\n}) {\n extendParams({\n a11y: {\n enabled: true,\n notificationClass: 'swiper-notification',\n prevSlideMessage: 'Previous slide',\n nextSlideMessage: 'Next slide',\n firstSlideMessage: 'This is the first slide',\n lastSlideMessage: 'This is the last slide',\n paginationBulletMessage: 'Go to slide {{index}}',\n slideLabelMessage: '{{index}} / {{slidesLength}}',\n containerMessage: null,\n containerRoleDescriptionMessage: null,\n itemRoleDescriptionMessage: null,\n slideRole: 'group',\n id: null\n }\n });\n swiper.a11y = {\n clicked: false\n };\n let liveRegion = null;\n function notify(message) {\n const notification = liveRegion;\n if (notification.length === 0) return;\n notification.innerHTML = '';\n notification.innerHTML = message;\n }\n const makeElementsArray = el => {\n if (!Array.isArray(el)) el = [el].filter(e => !!e);\n return el;\n };\n function getRandomNumber(size = 16) {\n const randomChar = () => Math.round(16 * Math.random()).toString(16);\n return 'x'.repeat(size).replace(/x/g, randomChar);\n }\n function makeElFocusable(el) {\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.setAttribute('tabIndex', '0');\n });\n }\n function makeElNotFocusable(el) {\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.setAttribute('tabIndex', '-1');\n });\n }\n function addElRole(el, role) {\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.setAttribute('role', role);\n });\n }\n function addElRoleDescription(el, description) {\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.setAttribute('aria-roledescription', description);\n });\n }\n function addElControls(el, controls) {\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.setAttribute('aria-controls', controls);\n });\n }\n function addElLabel(el, label) {\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.setAttribute('aria-label', label);\n });\n }\n function addElId(el, id) {\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.setAttribute('id', id);\n });\n }\n function addElLive(el, live) {\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.setAttribute('aria-live', live);\n });\n }\n function disableEl(el) {\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.setAttribute('aria-disabled', true);\n });\n }\n function enableEl(el) {\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.setAttribute('aria-disabled', false);\n });\n }\n function onEnterOrSpaceKey(e) {\n if (e.keyCode !== 13 && e.keyCode !== 32) return;\n const params = swiper.params.a11y;\n const targetEl = e.target;\n if (swiper.pagination && swiper.pagination.el && (targetEl === swiper.pagination.el || swiper.pagination.el.contains(e.target))) {\n if (!e.target.matches(classesToSelector(swiper.params.pagination.bulletClass))) return;\n }\n if (swiper.navigation && swiper.navigation.nextEl && targetEl === swiper.navigation.nextEl) {\n if (!(swiper.isEnd && !swiper.params.loop)) {\n swiper.slideNext();\n }\n if (swiper.isEnd) {\n notify(params.lastSlideMessage);\n } else {\n notify(params.nextSlideMessage);\n }\n }\n if (swiper.navigation && swiper.navigation.prevEl && targetEl === swiper.navigation.prevEl) {\n if (!(swiper.isBeginning && !swiper.params.loop)) {\n swiper.slidePrev();\n }\n if (swiper.isBeginning) {\n notify(params.firstSlideMessage);\n } else {\n notify(params.prevSlideMessage);\n }\n }\n if (swiper.pagination && targetEl.matches(classesToSelector(swiper.params.pagination.bulletClass))) {\n targetEl.click();\n }\n }\n function updateNavigation() {\n if (swiper.params.loop || swiper.params.rewind || !swiper.navigation) return;\n const {\n nextEl,\n prevEl\n } = swiper.navigation;\n if (prevEl) {\n if (swiper.isBeginning) {\n disableEl(prevEl);\n makeElNotFocusable(prevEl);\n } else {\n enableEl(prevEl);\n makeElFocusable(prevEl);\n }\n }\n if (nextEl) {\n if (swiper.isEnd) {\n disableEl(nextEl);\n makeElNotFocusable(nextEl);\n } else {\n enableEl(nextEl);\n makeElFocusable(nextEl);\n }\n }\n }\n function hasPagination() {\n return swiper.pagination && swiper.pagination.bullets && swiper.pagination.bullets.length;\n }\n function hasClickablePagination() {\n return hasPagination() && swiper.params.pagination.clickable;\n }\n function updatePagination() {\n const params = swiper.params.a11y;\n if (!hasPagination()) return;\n swiper.pagination.bullets.forEach(bulletEl => {\n if (swiper.params.pagination.clickable) {\n makeElFocusable(bulletEl);\n if (!swiper.params.pagination.renderBullet) {\n addElRole(bulletEl, 'button');\n addElLabel(bulletEl, params.paginationBulletMessage.replace(/\\{\\{index\\}\\}/, elementIndex(bulletEl) + 1));\n }\n }\n if (bulletEl.matches(`.${swiper.params.pagination.bulletActiveClass}`)) {\n bulletEl.setAttribute('aria-current', 'true');\n } else {\n bulletEl.removeAttribute('aria-current');\n }\n });\n }\n const initNavEl = (el, wrapperId, message) => {\n makeElFocusable(el);\n if (el.tagName !== 'BUTTON') {\n addElRole(el, 'button');\n el.addEventListener('keydown', onEnterOrSpaceKey);\n }\n addElLabel(el, message);\n addElControls(el, wrapperId);\n };\n const handlePointerDown = () => {\n swiper.a11y.clicked = true;\n };\n const handlePointerUp = () => {\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n if (!swiper.destroyed) {\n swiper.a11y.clicked = false;\n }\n });\n });\n };\n const handleFocus = e => {\n if (swiper.a11y.clicked) return;\n const slideEl = e.target.closest(`.${swiper.params.slideClass}, swiper-slide`);\n if (!slideEl || !swiper.slides.includes(slideEl)) return;\n const isActive = swiper.slides.indexOf(slideEl) === swiper.activeIndex;\n const isVisible = swiper.params.watchSlidesProgress && swiper.visibleSlides && swiper.visibleSlides.includes(slideEl);\n if (isActive || isVisible) return;\n if (e.sourceCapabilities && e.sourceCapabilities.firesTouchEvents) return;\n if (swiper.isHorizontal()) {\n swiper.el.scrollLeft = 0;\n } else {\n swiper.el.scrollTop = 0;\n }\n swiper.slideTo(swiper.slides.indexOf(slideEl), 0);\n };\n const initSlides = () => {\n const params = swiper.params.a11y;\n if (params.itemRoleDescriptionMessage) {\n addElRoleDescription(swiper.slides, params.itemRoleDescriptionMessage);\n }\n if (params.slideRole) {\n addElRole(swiper.slides, params.slideRole);\n }\n const slidesLength = swiper.slides.length;\n if (params.slideLabelMessage) {\n swiper.slides.forEach((slideEl, index) => {\n const slideIndex = swiper.params.loop ? parseInt(slideEl.getAttribute('data-swiper-slide-index'), 10) : index;\n const ariaLabelMessage = params.slideLabelMessage.replace(/\\{\\{index\\}\\}/, slideIndex + 1).replace(/\\{\\{slidesLength\\}\\}/, slidesLength);\n addElLabel(slideEl, ariaLabelMessage);\n });\n }\n };\n const init = () => {\n const params = swiper.params.a11y;\n swiper.el.append(liveRegion);\n\n // Container\n const containerEl = swiper.el;\n if (params.containerRoleDescriptionMessage) {\n addElRoleDescription(containerEl, params.containerRoleDescriptionMessage);\n }\n if (params.containerMessage) {\n addElLabel(containerEl, params.containerMessage);\n }\n\n // Wrapper\n const wrapperEl = swiper.wrapperEl;\n const wrapperId = params.id || wrapperEl.getAttribute('id') || `swiper-wrapper-${getRandomNumber(16)}`;\n const live = swiper.params.autoplay && swiper.params.autoplay.enabled ? 'off' : 'polite';\n addElId(wrapperEl, wrapperId);\n addElLive(wrapperEl, live);\n\n // Slide\n initSlides();\n\n // Navigation\n let {\n nextEl,\n prevEl\n } = swiper.navigation ? swiper.navigation : {};\n nextEl = makeElementsArray(nextEl);\n prevEl = makeElementsArray(prevEl);\n if (nextEl) {\n nextEl.forEach(el => initNavEl(el, wrapperId, params.nextSlideMessage));\n }\n if (prevEl) {\n prevEl.forEach(el => initNavEl(el, wrapperId, params.prevSlideMessage));\n }\n\n // Pagination\n if (hasClickablePagination()) {\n const paginationEl = Array.isArray(swiper.pagination.el) ? swiper.pagination.el : [swiper.pagination.el];\n paginationEl.forEach(el => {\n el.addEventListener('keydown', onEnterOrSpaceKey);\n });\n }\n\n // Tab focus\n swiper.el.addEventListener('focus', handleFocus, true);\n swiper.el.addEventListener('pointerdown', handlePointerDown, true);\n swiper.el.addEventListener('pointerup', handlePointerUp, true);\n };\n function destroy() {\n if (liveRegion && liveRegion.length > 0) liveRegion.remove();\n let {\n nextEl,\n prevEl\n } = swiper.navigation ? swiper.navigation : {};\n nextEl = makeElementsArray(nextEl);\n prevEl = makeElementsArray(prevEl);\n if (nextEl) {\n nextEl.forEach(el => el.removeEventListener('keydown', onEnterOrSpaceKey));\n }\n if (prevEl) {\n prevEl.forEach(el => el.removeEventListener('keydown', onEnterOrSpaceKey));\n }\n\n // Pagination\n if (hasClickablePagination()) {\n const paginationEl = Array.isArray(swiper.pagination.el) ? swiper.pagination.el : [swiper.pagination.el];\n paginationEl.forEach(el => {\n el.removeEventListener('keydown', onEnterOrSpaceKey);\n });\n }\n\n // Tab focus\n swiper.el.removeEventListener('focus', handleFocus, true);\n swiper.el.removeEventListener('pointerdown', handlePointerDown, true);\n swiper.el.removeEventListener('pointerup', handlePointerUp, true);\n }\n on('beforeInit', () => {\n liveRegion = createElement('span', swiper.params.a11y.notificationClass);\n liveRegion.setAttribute('aria-live', 'assertive');\n liveRegion.setAttribute('aria-atomic', 'true');\n if (swiper.isElement) {\n liveRegion.setAttribute('slot', 'container-end');\n }\n });\n on('afterInit', () => {\n if (!swiper.params.a11y.enabled) return;\n init();\n });\n on('slidesLengthChange snapGridLengthChange slidesGridLengthChange', () => {\n if (!swiper.params.a11y.enabled) return;\n initSlides();\n });\n on('fromEdge toEdge afterInit lock unlock', () => {\n if (!swiper.params.a11y.enabled) return;\n updateNavigation();\n });\n on('paginationUpdate', () => {\n if (!swiper.params.a11y.enabled) return;\n updatePagination();\n });\n on('destroy', () => {\n if (!swiper.params.a11y.enabled) return;\n destroy();\n });\n}","import { getWindow } from 'ssr-window';\nexport default function History({\n swiper,\n extendParams,\n on\n}) {\n extendParams({\n history: {\n enabled: false,\n root: '',\n replaceState: false,\n key: 'slides',\n keepQuery: false\n }\n });\n let initialized = false;\n let paths = {};\n const slugify = text => {\n return text.toString().replace(/\\s+/g, '-').replace(/[^\\w-]+/g, '').replace(/--+/g, '-').replace(/^-+/, '').replace(/-+$/, '');\n };\n const getPathValues = urlOverride => {\n const window = getWindow();\n let location;\n if (urlOverride) {\n location = new URL(urlOverride);\n } else {\n location = window.location;\n }\n const pathArray = location.pathname.slice(1).split('/').filter(part => part !== '');\n const total = pathArray.length;\n const key = pathArray[total - 2];\n const value = pathArray[total - 1];\n return {\n key,\n value\n };\n };\n const setHistory = (key, index) => {\n const window = getWindow();\n if (!initialized || !swiper.params.history.enabled) return;\n let location;\n if (swiper.params.url) {\n location = new URL(swiper.params.url);\n } else {\n location = window.location;\n }\n const slide = swiper.slides[index];\n let value = slugify(slide.getAttribute('data-history'));\n if (swiper.params.history.root.length > 0) {\n let root = swiper.params.history.root;\n if (root[root.length - 1] === '/') root = root.slice(0, root.length - 1);\n value = `${root}/${key ? `${key}/` : ''}${value}`;\n } else if (!location.pathname.includes(key)) {\n value = `${key ? `${key}/` : ''}${value}`;\n }\n if (swiper.params.history.keepQuery) {\n value += location.search;\n }\n const currentState = window.history.state;\n if (currentState && currentState.value === value) {\n return;\n }\n if (swiper.params.history.replaceState) {\n window.history.replaceState({\n value\n }, null, value);\n } else {\n window.history.pushState({\n value\n }, null, value);\n }\n };\n const scrollToSlide = (speed, value, runCallbacks) => {\n if (value) {\n for (let i = 0, length = swiper.slides.length; i < length; i += 1) {\n const slide = swiper.slides[i];\n const slideHistory = slugify(slide.getAttribute('data-history'));\n if (slideHistory === value) {\n const index = swiper.getSlideIndex(slide);\n swiper.slideTo(index, speed, runCallbacks);\n }\n }\n } else {\n swiper.slideTo(0, speed, runCallbacks);\n }\n };\n const setHistoryPopState = () => {\n paths = getPathValues(swiper.params.url);\n scrollToSlide(swiper.params.speed, paths.value, false);\n };\n const init = () => {\n const window = getWindow();\n if (!swiper.params.history) return;\n if (!window.history || !window.history.pushState) {\n swiper.params.history.enabled = false;\n swiper.params.hashNavigation.enabled = true;\n return;\n }\n initialized = true;\n paths = getPathValues(swiper.params.url);\n if (!paths.key && !paths.value) {\n if (!swiper.params.history.replaceState) {\n window.addEventListener('popstate', setHistoryPopState);\n }\n return;\n }\n scrollToSlide(0, paths.value, swiper.params.runCallbacksOnInit);\n if (!swiper.params.history.replaceState) {\n window.addEventListener('popstate', setHistoryPopState);\n }\n };\n const destroy = () => {\n const window = getWindow();\n if (!swiper.params.history.replaceState) {\n window.removeEventListener('popstate', setHistoryPopState);\n }\n };\n on('init', () => {\n if (swiper.params.history.enabled) {\n init();\n }\n });\n on('destroy', () => {\n if (swiper.params.history.enabled) {\n destroy();\n }\n });\n on('transitionEnd _freeModeNoMomentumRelease', () => {\n if (initialized) {\n setHistory(swiper.params.history.key, swiper.activeIndex);\n }\n });\n on('slideChange', () => {\n if (initialized && swiper.params.cssMode) {\n setHistory(swiper.params.history.key, swiper.activeIndex);\n }\n });\n}","import { getWindow, getDocument } from 'ssr-window';\nimport { elementChildren } from '../../shared/utils.js';\nexport default function HashNavigation({\n swiper,\n extendParams,\n emit,\n on\n}) {\n let initialized = false;\n const document = getDocument();\n const window = getWindow();\n extendParams({\n hashNavigation: {\n enabled: false,\n replaceState: false,\n watchState: false\n }\n });\n const onHashChange = () => {\n emit('hashChange');\n const newHash = document.location.hash.replace('#', '');\n const activeSlideHash = swiper.slides[swiper.activeIndex].getAttribute('data-hash');\n if (newHash !== activeSlideHash) {\n const newIndex = swiper.getSlideIndex(elementChildren(swiper.slidesEl, `.${swiper.params.slideClass}[data-hash=\"${newHash}\"], swiper-slide[data-hash=\"${newHash}\"]`)[0]);\n if (typeof newIndex === 'undefined') return;\n swiper.slideTo(newIndex);\n }\n };\n const setHash = () => {\n if (!initialized || !swiper.params.hashNavigation.enabled) return;\n if (swiper.params.hashNavigation.replaceState && window.history && window.history.replaceState) {\n window.history.replaceState(null, null, `#${swiper.slides[swiper.activeIndex].getAttribute('data-hash')}` || '');\n emit('hashSet');\n } else {\n const slide = swiper.slides[swiper.activeIndex];\n const hash = slide.getAttribute('data-hash') || slide.getAttribute('data-history');\n document.location.hash = hash || '';\n emit('hashSet');\n }\n };\n const init = () => {\n if (!swiper.params.hashNavigation.enabled || swiper.params.history && swiper.params.history.enabled) return;\n initialized = true;\n const hash = document.location.hash.replace('#', '');\n if (hash) {\n const speed = 0;\n for (let i = 0, length = swiper.slides.length; i < length; i += 1) {\n const slide = swiper.slides[i];\n const slideHash = slide.getAttribute('data-hash') || slide.getAttribute('data-history');\n if (slideHash === hash) {\n const index = swiper.getSlideIndex(slide);\n swiper.slideTo(index, speed, swiper.params.runCallbacksOnInit, true);\n }\n }\n }\n if (swiper.params.hashNavigation.watchState) {\n window.addEventListener('hashchange', onHashChange);\n }\n };\n const destroy = () => {\n if (swiper.params.hashNavigation.watchState) {\n window.removeEventListener('hashchange', onHashChange);\n }\n };\n on('init', () => {\n if (swiper.params.hashNavigation.enabled) {\n init();\n }\n });\n on('destroy', () => {\n if (swiper.params.hashNavigation.enabled) {\n destroy();\n }\n });\n on('transitionEnd _freeModeNoMomentumRelease', () => {\n if (initialized) {\n setHash();\n }\n });\n on('slideChange', () => {\n if (initialized && swiper.params.cssMode) {\n setHash();\n }\n });\n}","/* eslint no-underscore-dangle: \"off\" */\n/* eslint no-use-before-define: \"off\" */\nimport { getDocument } from 'ssr-window';\nexport default function Autoplay({\n swiper,\n extendParams,\n on,\n emit,\n params\n}) {\n swiper.autoplay = {\n running: false,\n paused: false,\n timeLeft: 0\n };\n extendParams({\n autoplay: {\n enabled: false,\n delay: 3000,\n waitForTransition: true,\n disableOnInteraction: true,\n stopOnLastSlide: false,\n reverseDirection: false,\n pauseOnMouseEnter: false\n }\n });\n let timeout;\n let raf;\n let autoplayDelayTotal = params && params.autoplay ? params.autoplay.delay : 3000;\n let autoplayDelayCurrent = params && params.autoplay ? params.autoplay.delay : 3000;\n let autoplayTimeLeft;\n let autoplayStartTime = new Date().getTime;\n let wasPaused;\n let isTouched;\n let pausedByTouch;\n let touchStartTimeout;\n let slideChanged;\n let pausedByInteraction;\n function onTransitionEnd(e) {\n if (!swiper || swiper.destroyed || !swiper.wrapperEl) return;\n if (e.target !== swiper.wrapperEl) return;\n swiper.wrapperEl.removeEventListener('transitionend', onTransitionEnd);\n resume();\n }\n const calcTimeLeft = () => {\n if (swiper.destroyed || !swiper.autoplay.running) return;\n if (swiper.autoplay.paused) {\n wasPaused = true;\n } else if (wasPaused) {\n autoplayDelayCurrent = autoplayTimeLeft;\n wasPaused = false;\n }\n const timeLeft = swiper.autoplay.paused ? autoplayTimeLeft : autoplayStartTime + autoplayDelayCurrent - new Date().getTime();\n swiper.autoplay.timeLeft = timeLeft;\n emit('autoplayTimeLeft', timeLeft, timeLeft / autoplayDelayTotal);\n raf = requestAnimationFrame(() => {\n calcTimeLeft();\n });\n };\n const getSlideDelay = () => {\n let activeSlideEl;\n if (swiper.virtual && swiper.params.virtual.enabled) {\n activeSlideEl = swiper.slides.filter(slideEl => slideEl.classList.contains('swiper-slide-active'))[0];\n } else {\n activeSlideEl = swiper.slides[swiper.activeIndex];\n }\n if (!activeSlideEl) return undefined;\n const currentSlideDelay = parseInt(activeSlideEl.getAttribute('data-swiper-autoplay'), 10);\n return currentSlideDelay;\n };\n const run = delayForce => {\n if (swiper.destroyed || !swiper.autoplay.running) return;\n cancelAnimationFrame(raf);\n calcTimeLeft();\n let delay = typeof delayForce === 'undefined' ? swiper.params.autoplay.delay : delayForce;\n autoplayDelayTotal = swiper.params.autoplay.delay;\n autoplayDelayCurrent = swiper.params.autoplay.delay;\n const currentSlideDelay = getSlideDelay();\n if (!Number.isNaN(currentSlideDelay) && currentSlideDelay > 0 && typeof delayForce === 'undefined') {\n delay = currentSlideDelay;\n autoplayDelayTotal = currentSlideDelay;\n autoplayDelayCurrent = currentSlideDelay;\n }\n autoplayTimeLeft = delay;\n const speed = swiper.params.speed;\n const proceed = () => {\n if (!swiper || swiper.destroyed) return;\n if (swiper.params.autoplay.reverseDirection) {\n if (!swiper.isBeginning || swiper.params.loop || swiper.params.rewind) {\n swiper.slidePrev(speed, true, true);\n emit('autoplay');\n } else if (!swiper.params.autoplay.stopOnLastSlide) {\n swiper.slideTo(swiper.slides.length - 1, speed, true, true);\n emit('autoplay');\n }\n } else {\n if (!swiper.isEnd || swiper.params.loop || swiper.params.rewind) {\n swiper.slideNext(speed, true, true);\n emit('autoplay');\n } else if (!swiper.params.autoplay.stopOnLastSlide) {\n swiper.slideTo(0, speed, true, true);\n emit('autoplay');\n }\n }\n if (swiper.params.cssMode) {\n autoplayStartTime = new Date().getTime();\n requestAnimationFrame(() => {\n run();\n });\n }\n };\n if (delay > 0) {\n clearTimeout(timeout);\n timeout = setTimeout(() => {\n proceed();\n }, delay);\n } else {\n requestAnimationFrame(() => {\n proceed();\n });\n }\n\n // eslint-disable-next-line\n return delay;\n };\n const start = () => {\n swiper.autoplay.running = true;\n run();\n emit('autoplayStart');\n };\n const stop = () => {\n swiper.autoplay.running = false;\n clearTimeout(timeout);\n cancelAnimationFrame(raf);\n emit('autoplayStop');\n };\n const pause = (internal, reset) => {\n if (swiper.destroyed || !swiper.autoplay.running) return;\n clearTimeout(timeout);\n if (!internal) {\n pausedByInteraction = true;\n }\n const proceed = () => {\n emit('autoplayPause');\n if (swiper.params.autoplay.waitForTransition) {\n swiper.wrapperEl.addEventListener('transitionend', onTransitionEnd);\n } else {\n resume();\n }\n };\n swiper.autoplay.paused = true;\n if (reset) {\n if (slideChanged) {\n autoplayTimeLeft = swiper.params.autoplay.delay;\n }\n slideChanged = false;\n proceed();\n return;\n }\n const delay = autoplayTimeLeft || swiper.params.autoplay.delay;\n autoplayTimeLeft = delay - (new Date().getTime() - autoplayStartTime);\n if (swiper.isEnd && autoplayTimeLeft < 0 && !swiper.params.loop) return;\n if (autoplayTimeLeft < 0) autoplayTimeLeft = 0;\n proceed();\n };\n const resume = () => {\n if (swiper.isEnd && autoplayTimeLeft < 0 && !swiper.params.loop || swiper.destroyed || !swiper.autoplay.running) return;\n autoplayStartTime = new Date().getTime();\n if (pausedByInteraction) {\n pausedByInteraction = false;\n run(autoplayTimeLeft);\n } else {\n run();\n }\n swiper.autoplay.paused = false;\n emit('autoplayResume');\n };\n const onVisibilityChange = () => {\n if (swiper.destroyed || !swiper.autoplay.running) return;\n const document = getDocument();\n if (document.visibilityState === 'hidden') {\n pausedByInteraction = true;\n pause(true);\n }\n if (document.visibilityState === 'visible') {\n resume();\n }\n };\n const onPointerEnter = e => {\n if (e.pointerType !== 'mouse') return;\n pausedByInteraction = true;\n pause(true);\n };\n const onPointerLeave = e => {\n if (e.pointerType !== 'mouse') return;\n if (swiper.autoplay.paused) {\n resume();\n }\n };\n const attachMouseEvents = () => {\n if (swiper.params.autoplay.pauseOnMouseEnter) {\n swiper.el.addEventListener('pointerenter', onPointerEnter);\n swiper.el.addEventListener('pointerleave', onPointerLeave);\n }\n };\n const detachMouseEvents = () => {\n swiper.el.removeEventListener('pointerenter', onPointerEnter);\n swiper.el.removeEventListener('pointerleave', onPointerLeave);\n };\n const attachDocumentEvents = () => {\n const document = getDocument();\n document.addEventListener('visibilitychange', onVisibilityChange);\n };\n const detachDocumentEvents = () => {\n const document = getDocument();\n document.removeEventListener('visibilitychange', onVisibilityChange);\n };\n on('init', () => {\n if (swiper.params.autoplay.enabled) {\n attachMouseEvents();\n attachDocumentEvents();\n autoplayStartTime = new Date().getTime();\n start();\n }\n });\n on('destroy', () => {\n detachMouseEvents();\n detachDocumentEvents();\n if (swiper.autoplay.running) {\n stop();\n }\n });\n on('beforeTransitionStart', (_s, speed, internal) => {\n if (swiper.destroyed || !swiper.autoplay.running) return;\n if (internal || !swiper.params.autoplay.disableOnInteraction) {\n pause(true, true);\n } else {\n stop();\n }\n });\n on('sliderFirstMove', () => {\n if (swiper.destroyed || !swiper.autoplay.running) return;\n if (swiper.params.autoplay.disableOnInteraction) {\n stop();\n return;\n }\n isTouched = true;\n pausedByTouch = false;\n pausedByInteraction = false;\n touchStartTimeout = setTimeout(() => {\n pausedByInteraction = true;\n pausedByTouch = true;\n pause(true);\n }, 200);\n });\n on('touchEnd', () => {\n if (swiper.destroyed || !swiper.autoplay.running || !isTouched) return;\n clearTimeout(touchStartTimeout);\n clearTimeout(timeout);\n if (swiper.params.autoplay.disableOnInteraction) {\n pausedByTouch = false;\n isTouched = false;\n return;\n }\n if (pausedByTouch && swiper.params.cssMode) resume();\n pausedByTouch = false;\n isTouched = false;\n });\n on('slideChange', () => {\n if (swiper.destroyed || !swiper.autoplay.running) return;\n slideChanged = true;\n });\n Object.assign(swiper.autoplay, {\n start,\n stop,\n pause,\n resume\n });\n}","import { getDocument } from 'ssr-window';\nimport { elementChildren, isObject } from '../../shared/utils.js';\nexport default function Thumb({\n swiper,\n extendParams,\n on\n}) {\n extendParams({\n thumbs: {\n swiper: null,\n multipleActiveThumbs: true,\n autoScrollOffset: 0,\n slideThumbActiveClass: 'swiper-slide-thumb-active',\n thumbsContainerClass: 'swiper-thumbs'\n }\n });\n let initialized = false;\n let swiperCreated = false;\n swiper.thumbs = {\n swiper: null\n };\n function onThumbClick() {\n const thumbsSwiper = swiper.thumbs.swiper;\n if (!thumbsSwiper || thumbsSwiper.destroyed) return;\n const clickedIndex = thumbsSwiper.clickedIndex;\n const clickedSlide = thumbsSwiper.clickedSlide;\n if (clickedSlide && clickedSlide.classList.contains(swiper.params.thumbs.slideThumbActiveClass)) return;\n if (typeof clickedIndex === 'undefined' || clickedIndex === null) return;\n let slideToIndex;\n if (thumbsSwiper.params.loop) {\n slideToIndex = parseInt(thumbsSwiper.clickedSlide.getAttribute('data-swiper-slide-index'), 10);\n } else {\n slideToIndex = clickedIndex;\n }\n if (swiper.params.loop) {\n swiper.slideToLoop(slideToIndex);\n } else {\n swiper.slideTo(slideToIndex);\n }\n }\n function init() {\n const {\n thumbs: thumbsParams\n } = swiper.params;\n if (initialized) return false;\n initialized = true;\n const SwiperClass = swiper.constructor;\n if (thumbsParams.swiper instanceof SwiperClass) {\n swiper.thumbs.swiper = thumbsParams.swiper;\n Object.assign(swiper.thumbs.swiper.originalParams, {\n watchSlidesProgress: true,\n slideToClickedSlide: false\n });\n Object.assign(swiper.thumbs.swiper.params, {\n watchSlidesProgress: true,\n slideToClickedSlide: false\n });\n swiper.thumbs.swiper.update();\n } else if (isObject(thumbsParams.swiper)) {\n const thumbsSwiperParams = Object.assign({}, thumbsParams.swiper);\n Object.assign(thumbsSwiperParams, {\n watchSlidesProgress: true,\n slideToClickedSlide: false\n });\n swiper.thumbs.swiper = new SwiperClass(thumbsSwiperParams);\n swiperCreated = true;\n }\n swiper.thumbs.swiper.el.classList.add(swiper.params.thumbs.thumbsContainerClass);\n swiper.thumbs.swiper.on('tap', onThumbClick);\n return true;\n }\n function update(initial) {\n const thumbsSwiper = swiper.thumbs.swiper;\n if (!thumbsSwiper || thumbsSwiper.destroyed) return;\n const slidesPerView = thumbsSwiper.params.slidesPerView === 'auto' ? thumbsSwiper.slidesPerViewDynamic() : thumbsSwiper.params.slidesPerView;\n\n // Activate thumbs\n let thumbsToActivate = 1;\n const thumbActiveClass = swiper.params.thumbs.slideThumbActiveClass;\n if (swiper.params.slidesPerView > 1 && !swiper.params.centeredSlides) {\n thumbsToActivate = swiper.params.slidesPerView;\n }\n if (!swiper.params.thumbs.multipleActiveThumbs) {\n thumbsToActivate = 1;\n }\n thumbsToActivate = Math.floor(thumbsToActivate);\n thumbsSwiper.slides.forEach(slideEl => slideEl.classList.remove(thumbActiveClass));\n if (thumbsSwiper.params.loop || thumbsSwiper.params.virtual && thumbsSwiper.params.virtual.enabled) {\n for (let i = 0; i < thumbsToActivate; i += 1) {\n elementChildren(thumbsSwiper.slidesEl, `[data-swiper-slide-index=\"${swiper.realIndex + i}\"]`).forEach(slideEl => {\n slideEl.classList.add(thumbActiveClass);\n });\n }\n } else {\n for (let i = 0; i < thumbsToActivate; i += 1) {\n if (thumbsSwiper.slides[swiper.realIndex + i]) {\n thumbsSwiper.slides[swiper.realIndex + i].classList.add(thumbActiveClass);\n }\n }\n }\n const autoScrollOffset = swiper.params.thumbs.autoScrollOffset;\n const useOffset = autoScrollOffset && !thumbsSwiper.params.loop;\n if (swiper.realIndex !== thumbsSwiper.realIndex || useOffset) {\n const currentThumbsIndex = thumbsSwiper.activeIndex;\n let newThumbsIndex;\n let direction;\n if (thumbsSwiper.params.loop) {\n const newThumbsSlide = thumbsSwiper.slides.filter(slideEl => slideEl.getAttribute('data-swiper-slide-index') === `${swiper.realIndex}`)[0];\n newThumbsIndex = thumbsSwiper.slides.indexOf(newThumbsSlide);\n direction = swiper.activeIndex > swiper.previousIndex ? 'next' : 'prev';\n } else {\n newThumbsIndex = swiper.realIndex;\n direction = newThumbsIndex > swiper.previousIndex ? 'next' : 'prev';\n }\n if (useOffset) {\n newThumbsIndex += direction === 'next' ? autoScrollOffset : -1 * autoScrollOffset;\n }\n if (thumbsSwiper.visibleSlidesIndexes && thumbsSwiper.visibleSlidesIndexes.indexOf(newThumbsIndex) < 0) {\n if (thumbsSwiper.params.centeredSlides) {\n if (newThumbsIndex > currentThumbsIndex) {\n newThumbsIndex = newThumbsIndex - Math.floor(slidesPerView / 2) + 1;\n } else {\n newThumbsIndex = newThumbsIndex + Math.floor(slidesPerView / 2) - 1;\n }\n } else if (newThumbsIndex > currentThumbsIndex && thumbsSwiper.params.slidesPerGroup === 1) {\n // newThumbsIndex = newThumbsIndex - slidesPerView + 1;\n }\n thumbsSwiper.slideTo(newThumbsIndex, initial ? 0 : undefined);\n }\n }\n }\n on('beforeInit', () => {\n const {\n thumbs\n } = swiper.params;\n if (!thumbs || !thumbs.swiper) return;\n if (typeof thumbs.swiper === 'string' || thumbs.swiper instanceof HTMLElement) {\n const document = getDocument();\n const getThumbsElementAndInit = () => {\n const thumbsElement = typeof thumbs.swiper === 'string' ? document.querySelector(thumbs.swiper) : thumbs.swiper;\n if (thumbsElement && thumbsElement.swiper) {\n thumbs.swiper = thumbsElement.swiper;\n init();\n update(true);\n } else if (thumbsElement) {\n const onThumbsSwiper = e => {\n thumbs.swiper = e.detail[0];\n thumbsElement.removeEventListener('init', onThumbsSwiper);\n init();\n update(true);\n thumbs.swiper.update();\n swiper.update();\n };\n thumbsElement.addEventListener('init', onThumbsSwiper);\n }\n return thumbsElement;\n };\n const watchForThumbsToAppear = () => {\n if (swiper.destroyed) return;\n const thumbsElement = getThumbsElementAndInit();\n if (!thumbsElement) {\n requestAnimationFrame(watchForThumbsToAppear);\n }\n };\n requestAnimationFrame(watchForThumbsToAppear);\n } else {\n init();\n update(true);\n }\n });\n on('slideChange update resize observerUpdate', () => {\n update();\n });\n on('setTransition', (_s, duration) => {\n const thumbsSwiper = swiper.thumbs.swiper;\n if (!thumbsSwiper || thumbsSwiper.destroyed) return;\n thumbsSwiper.setTransition(duration);\n });\n on('beforeDestroy', () => {\n const thumbsSwiper = swiper.thumbs.swiper;\n if (!thumbsSwiper || thumbsSwiper.destroyed) return;\n if (swiperCreated) {\n thumbsSwiper.destroy();\n }\n });\n Object.assign(swiper.thumbs, {\n init,\n update\n });\n}","import { elementTransitionEnd, now } from '../../shared/utils.js';\nexport default function freeMode({\n swiper,\n extendParams,\n emit,\n once\n}) {\n extendParams({\n freeMode: {\n enabled: false,\n momentum: true,\n momentumRatio: 1,\n momentumBounce: true,\n momentumBounceRatio: 1,\n momentumVelocityRatio: 1,\n sticky: false,\n minimumVelocity: 0.02\n }\n });\n function onTouchStart() {\n const translate = swiper.getTranslate();\n swiper.setTranslate(translate);\n swiper.setTransition(0);\n swiper.touchEventsData.velocities.length = 0;\n swiper.freeMode.onTouchEnd({\n currentPos: swiper.rtl ? swiper.translate : -swiper.translate\n });\n }\n function onTouchMove() {\n const {\n touchEventsData: data,\n touches\n } = swiper;\n // Velocity\n if (data.velocities.length === 0) {\n data.velocities.push({\n position: touches[swiper.isHorizontal() ? 'startX' : 'startY'],\n time: data.touchStartTime\n });\n }\n data.velocities.push({\n position: touches[swiper.isHorizontal() ? 'currentX' : 'currentY'],\n time: now()\n });\n }\n function onTouchEnd({\n currentPos\n }) {\n const {\n params,\n wrapperEl,\n rtlTranslate: rtl,\n snapGrid,\n touchEventsData: data\n } = swiper;\n // Time diff\n const touchEndTime = now();\n const timeDiff = touchEndTime - data.touchStartTime;\n if (currentPos < -swiper.minTranslate()) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n if (currentPos > -swiper.maxTranslate()) {\n if (swiper.slides.length < snapGrid.length) {\n swiper.slideTo(snapGrid.length - 1);\n } else {\n swiper.slideTo(swiper.slides.length - 1);\n }\n return;\n }\n if (params.freeMode.momentum) {\n if (data.velocities.length > 1) {\n const lastMoveEvent = data.velocities.pop();\n const velocityEvent = data.velocities.pop();\n const distance = lastMoveEvent.position - velocityEvent.position;\n const time = lastMoveEvent.time - velocityEvent.time;\n swiper.velocity = distance / time;\n swiper.velocity /= 2;\n if (Math.abs(swiper.velocity) < params.freeMode.minimumVelocity) {\n swiper.velocity = 0;\n }\n // this implies that the user stopped moving a finger then released.\n // There would be no events with distance zero, so the last event is stale.\n if (time > 150 || now() - lastMoveEvent.time > 300) {\n swiper.velocity = 0;\n }\n } else {\n swiper.velocity = 0;\n }\n swiper.velocity *= params.freeMode.momentumVelocityRatio;\n data.velocities.length = 0;\n let momentumDuration = 1000 * params.freeMode.momentumRatio;\n const momentumDistance = swiper.velocity * momentumDuration;\n let newPosition = swiper.translate + momentumDistance;\n if (rtl) newPosition = -newPosition;\n let doBounce = false;\n let afterBouncePosition;\n const bounceAmount = Math.abs(swiper.velocity) * 20 * params.freeMode.momentumBounceRatio;\n let needsLoopFix;\n if (newPosition < swiper.maxTranslate()) {\n if (params.freeMode.momentumBounce) {\n if (newPosition + swiper.maxTranslate() < -bounceAmount) {\n newPosition = swiper.maxTranslate() - bounceAmount;\n }\n afterBouncePosition = swiper.maxTranslate();\n doBounce = true;\n data.allowMomentumBounce = true;\n } else {\n newPosition = swiper.maxTranslate();\n }\n if (params.loop && params.centeredSlides) needsLoopFix = true;\n } else if (newPosition > swiper.minTranslate()) {\n if (params.freeMode.momentumBounce) {\n if (newPosition - swiper.minTranslate() > bounceAmount) {\n newPosition = swiper.minTranslate() + bounceAmount;\n }\n afterBouncePosition = swiper.minTranslate();\n doBounce = true;\n data.allowMomentumBounce = true;\n } else {\n newPosition = swiper.minTranslate();\n }\n if (params.loop && params.centeredSlides) needsLoopFix = true;\n } else if (params.freeMode.sticky) {\n let nextSlide;\n for (let j = 0; j < snapGrid.length; j += 1) {\n if (snapGrid[j] > -newPosition) {\n nextSlide = j;\n break;\n }\n }\n if (Math.abs(snapGrid[nextSlide] - newPosition) < Math.abs(snapGrid[nextSlide - 1] - newPosition) || swiper.swipeDirection === 'next') {\n newPosition = snapGrid[nextSlide];\n } else {\n newPosition = snapGrid[nextSlide - 1];\n }\n newPosition = -newPosition;\n }\n if (needsLoopFix) {\n once('transitionEnd', () => {\n swiper.loopFix();\n });\n }\n // Fix duration\n if (swiper.velocity !== 0) {\n if (rtl) {\n momentumDuration = Math.abs((-newPosition - swiper.translate) / swiper.velocity);\n } else {\n momentumDuration = Math.abs((newPosition - swiper.translate) / swiper.velocity);\n }\n if (params.freeMode.sticky) {\n // If freeMode.sticky is active and the user ends a swipe with a slow-velocity\n // event, then durations can be 20+ seconds to slide one (or zero!) slides.\n // It's easy to see this when simulating touch with mouse events. To fix this,\n // limit single-slide swipes to the default slide duration. This also has the\n // nice side effect of matching slide speed if the user stopped moving before\n // lifting finger or mouse vs. moving slowly before lifting the finger/mouse.\n // For faster swipes, also apply limits (albeit higher ones).\n const moveDistance = Math.abs((rtl ? -newPosition : newPosition) - swiper.translate);\n const currentSlideSize = swiper.slidesSizesGrid[swiper.activeIndex];\n if (moveDistance < currentSlideSize) {\n momentumDuration = params.speed;\n } else if (moveDistance < 2 * currentSlideSize) {\n momentumDuration = params.speed * 1.5;\n } else {\n momentumDuration = params.speed * 2.5;\n }\n }\n } else if (params.freeMode.sticky) {\n swiper.slideToClosest();\n return;\n }\n if (params.freeMode.momentumBounce && doBounce) {\n swiper.updateProgress(afterBouncePosition);\n swiper.setTransition(momentumDuration);\n swiper.setTranslate(newPosition);\n swiper.transitionStart(true, swiper.swipeDirection);\n swiper.animating = true;\n elementTransitionEnd(wrapperEl, () => {\n if (!swiper || swiper.destroyed || !data.allowMomentumBounce) return;\n emit('momentumBounce');\n swiper.setTransition(params.speed);\n setTimeout(() => {\n swiper.setTranslate(afterBouncePosition);\n elementTransitionEnd(wrapperEl, () => {\n if (!swiper || swiper.destroyed) return;\n swiper.transitionEnd();\n });\n }, 0);\n });\n } else if (swiper.velocity) {\n emit('_freeModeNoMomentumRelease');\n swiper.updateProgress(newPosition);\n swiper.setTransition(momentumDuration);\n swiper.setTranslate(newPosition);\n swiper.transitionStart(true, swiper.swipeDirection);\n if (!swiper.animating) {\n swiper.animating = true;\n elementTransitionEnd(wrapperEl, () => {\n if (!swiper || swiper.destroyed) return;\n swiper.transitionEnd();\n });\n }\n } else {\n swiper.updateProgress(newPosition);\n }\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n } else if (params.freeMode.sticky) {\n swiper.slideToClosest();\n return;\n } else if (params.freeMode) {\n emit('_freeModeNoMomentumRelease');\n }\n if (!params.freeMode.momentum || timeDiff >= params.longSwipesMs) {\n swiper.updateProgress();\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n }\n Object.assign(swiper, {\n freeMode: {\n onTouchStart,\n onTouchMove,\n onTouchEnd\n }\n });\n}","export default function Grid({\n swiper,\n extendParams\n}) {\n extendParams({\n grid: {\n rows: 1,\n fill: 'column'\n }\n });\n let slidesNumberEvenToRows;\n let slidesPerRow;\n let numFullColumns;\n const initSlides = slidesLength => {\n const {\n slidesPerView\n } = swiper.params;\n const {\n rows,\n fill\n } = swiper.params.grid;\n slidesPerRow = slidesNumberEvenToRows / rows;\n numFullColumns = Math.floor(slidesLength / rows);\n if (Math.floor(slidesLength / rows) === slidesLength / rows) {\n slidesNumberEvenToRows = slidesLength;\n } else {\n slidesNumberEvenToRows = Math.ceil(slidesLength / rows) * rows;\n }\n if (slidesPerView !== 'auto' && fill === 'row') {\n slidesNumberEvenToRows = Math.max(slidesNumberEvenToRows, slidesPerView * rows);\n }\n };\n const updateSlide = (i, slide, slidesLength, getDirectionLabel) => {\n const {\n slidesPerGroup,\n spaceBetween\n } = swiper.params;\n const {\n rows,\n fill\n } = swiper.params.grid;\n // Set slides order\n let newSlideOrderIndex;\n let column;\n let row;\n if (fill === 'row' && slidesPerGroup > 1) {\n const groupIndex = Math.floor(i / (slidesPerGroup * rows));\n const slideIndexInGroup = i - rows * slidesPerGroup * groupIndex;\n const columnsInGroup = groupIndex === 0 ? slidesPerGroup : Math.min(Math.ceil((slidesLength - groupIndex * rows * slidesPerGroup) / rows), slidesPerGroup);\n row = Math.floor(slideIndexInGroup / columnsInGroup);\n column = slideIndexInGroup - row * columnsInGroup + groupIndex * slidesPerGroup;\n newSlideOrderIndex = column + row * slidesNumberEvenToRows / rows;\n slide.style.order = newSlideOrderIndex;\n } else if (fill === 'column') {\n column = Math.floor(i / rows);\n row = i - column * rows;\n if (column > numFullColumns || column === numFullColumns && row === rows - 1) {\n row += 1;\n if (row >= rows) {\n row = 0;\n column += 1;\n }\n }\n } else {\n row = Math.floor(i / slidesPerRow);\n column = i - row * slidesPerRow;\n }\n slide.style[getDirectionLabel('margin-top')] = row !== 0 ? spaceBetween && `${spaceBetween}px` : '';\n };\n const updateWrapperSize = (slideSize, snapGrid, getDirectionLabel) => {\n const {\n spaceBetween,\n centeredSlides,\n roundLengths\n } = swiper.params;\n const {\n rows\n } = swiper.params.grid;\n swiper.virtualSize = (slideSize + spaceBetween) * slidesNumberEvenToRows;\n swiper.virtualSize = Math.ceil(swiper.virtualSize / rows) - spaceBetween;\n swiper.wrapperEl.style[getDirectionLabel('width')] = `${swiper.virtualSize + spaceBetween}px`;\n if (centeredSlides) {\n const newSlidesGrid = [];\n for (let i = 0; i < snapGrid.length; i += 1) {\n let slidesGridItem = snapGrid[i];\n if (roundLengths) slidesGridItem = Math.floor(slidesGridItem);\n if (snapGrid[i] < swiper.virtualSize + snapGrid[0]) newSlidesGrid.push(slidesGridItem);\n }\n snapGrid.splice(0, snapGrid.length);\n snapGrid.push(...newSlidesGrid);\n }\n };\n swiper.grid = {\n initSlides,\n updateSlide,\n updateWrapperSize\n };\n}","import appendSlide from './methods/appendSlide.js';\nimport prependSlide from './methods/prependSlide.js';\nimport addSlide from './methods/addSlide.js';\nimport removeSlide from './methods/removeSlide.js';\nimport removeAllSlides from './methods/removeAllSlides.js';\nexport default function Manipulation({\n swiper\n}) {\n Object.assign(swiper, {\n appendSlide: appendSlide.bind(swiper),\n prependSlide: prependSlide.bind(swiper),\n addSlide: addSlide.bind(swiper),\n removeSlide: removeSlide.bind(swiper),\n removeAllSlides: removeAllSlides.bind(swiper)\n });\n}","import effectInit from '../../shared/effect-init.js';\nimport effectTarget from '../../shared/effect-target.js';\nimport effectVirtualTransitionEnd from '../../shared/effect-virtual-transition-end.js';\nimport { getSlideTransformEl } from '../../shared/utils.js';\nexport default function EffectFade({\n swiper,\n extendParams,\n on\n}) {\n extendParams({\n fadeEffect: {\n crossFade: false\n }\n });\n const setTranslate = () => {\n const {\n slides\n } = swiper;\n const params = swiper.params.fadeEffect;\n for (let i = 0; i < slides.length; i += 1) {\n const slideEl = swiper.slides[i];\n const offset = slideEl.swiperSlideOffset;\n let tx = -offset;\n if (!swiper.params.virtualTranslate) tx -= swiper.translate;\n let ty = 0;\n if (!swiper.isHorizontal()) {\n ty = tx;\n tx = 0;\n }\n const slideOpacity = swiper.params.fadeEffect.crossFade ? Math.max(1 - Math.abs(slideEl.progress), 0) : 1 + Math.min(Math.max(slideEl.progress, -1), 0);\n const targetEl = effectTarget(params, slideEl);\n targetEl.style.opacity = slideOpacity;\n targetEl.style.transform = `translate3d(${tx}px, ${ty}px, 0px)`;\n }\n };\n const setTransition = duration => {\n const transformElements = swiper.slides.map(slideEl => getSlideTransformEl(slideEl));\n transformElements.forEach(el => {\n el.style.transitionDuration = `${duration}ms`;\n });\n effectVirtualTransitionEnd({\n swiper,\n duration,\n transformElements,\n allSlides: true\n });\n };\n effectInit({\n effect: 'fade',\n swiper,\n on,\n setTranslate,\n setTransition,\n overwriteParams: () => ({\n slidesPerView: 1,\n slidesPerGroup: 1,\n watchSlidesProgress: true,\n spaceBetween: 0,\n virtualTranslate: !swiper.params.cssMode\n })\n });\n}","import effectInit from '../../shared/effect-init.js';\nimport { createElement } from '../../shared/utils.js';\nexport default function EffectCube({\n swiper,\n extendParams,\n on\n}) {\n extendParams({\n cubeEffect: {\n slideShadows: true,\n shadow: true,\n shadowOffset: 20,\n shadowScale: 0.94\n }\n });\n const createSlideShadows = (slideEl, progress, isHorizontal) => {\n let shadowBefore = isHorizontal ? slideEl.querySelector('.swiper-slide-shadow-left') : slideEl.querySelector('.swiper-slide-shadow-top');\n let shadowAfter = isHorizontal ? slideEl.querySelector('.swiper-slide-shadow-right') : slideEl.querySelector('.swiper-slide-shadow-bottom');\n if (!shadowBefore) {\n shadowBefore = createElement('div', `swiper-slide-shadow-${isHorizontal ? 'left' : 'top'}`);\n slideEl.append(shadowBefore);\n }\n if (!shadowAfter) {\n shadowAfter = createElement('div', `swiper-slide-shadow-${isHorizontal ? 'right' : 'bottom'}`);\n slideEl.append(shadowAfter);\n }\n if (shadowBefore) shadowBefore.style.opacity = Math.max(-progress, 0);\n if (shadowAfter) shadowAfter.style.opacity = Math.max(progress, 0);\n };\n const recreateShadows = () => {\n // create new ones\n const isHorizontal = swiper.isHorizontal();\n swiper.slides.forEach(slideEl => {\n const progress = Math.max(Math.min(slideEl.progress, 1), -1);\n createSlideShadows(slideEl, progress, isHorizontal);\n });\n };\n const setTranslate = () => {\n const {\n el,\n wrapperEl,\n slides,\n width: swiperWidth,\n height: swiperHeight,\n rtlTranslate: rtl,\n size: swiperSize,\n browser\n } = swiper;\n const params = swiper.params.cubeEffect;\n const isHorizontal = swiper.isHorizontal();\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n let wrapperRotate = 0;\n let cubeShadowEl;\n if (params.shadow) {\n if (isHorizontal) {\n cubeShadowEl = swiper.slidesEl.querySelector('.swiper-cube-shadow');\n if (!cubeShadowEl) {\n cubeShadowEl = createElement('div', 'swiper-cube-shadow');\n swiper.slidesEl.append(cubeShadowEl);\n }\n cubeShadowEl.style.height = `${swiperWidth}px`;\n } else {\n cubeShadowEl = el.querySelector('.swiper-cube-shadow');\n if (!cubeShadowEl) {\n cubeShadowEl = createElement('div', 'swiper-cube-shadow');\n el.append(cubeShadowEl);\n }\n }\n }\n for (let i = 0; i < slides.length; i += 1) {\n const slideEl = slides[i];\n let slideIndex = i;\n if (isVirtual) {\n slideIndex = parseInt(slideEl.getAttribute('data-swiper-slide-index'), 10);\n }\n let slideAngle = slideIndex * 90;\n let round = Math.floor(slideAngle / 360);\n if (rtl) {\n slideAngle = -slideAngle;\n round = Math.floor(-slideAngle / 360);\n }\n const progress = Math.max(Math.min(slideEl.progress, 1), -1);\n let tx = 0;\n let ty = 0;\n let tz = 0;\n if (slideIndex % 4 === 0) {\n tx = -round * 4 * swiperSize;\n tz = 0;\n } else if ((slideIndex - 1) % 4 === 0) {\n tx = 0;\n tz = -round * 4 * swiperSize;\n } else if ((slideIndex - 2) % 4 === 0) {\n tx = swiperSize + round * 4 * swiperSize;\n tz = swiperSize;\n } else if ((slideIndex - 3) % 4 === 0) {\n tx = -swiperSize;\n tz = 3 * swiperSize + swiperSize * 4 * round;\n }\n if (rtl) {\n tx = -tx;\n }\n if (!isHorizontal) {\n ty = tx;\n tx = 0;\n }\n const transform = `rotateX(${isHorizontal ? 0 : -slideAngle}deg) rotateY(${isHorizontal ? slideAngle : 0}deg) translate3d(${tx}px, ${ty}px, ${tz}px)`;\n if (progress <= 1 && progress > -1) {\n wrapperRotate = slideIndex * 90 + progress * 90;\n if (rtl) wrapperRotate = -slideIndex * 90 - progress * 90;\n }\n slideEl.style.transform = transform;\n if (params.slideShadows) {\n createSlideShadows(slideEl, progress, isHorizontal);\n }\n }\n wrapperEl.style.transformOrigin = `50% 50% -${swiperSize / 2}px`;\n wrapperEl.style['-webkit-transform-origin'] = `50% 50% -${swiperSize / 2}px`;\n if (params.shadow) {\n if (isHorizontal) {\n cubeShadowEl.style.transform = `translate3d(0px, ${swiperWidth / 2 + params.shadowOffset}px, ${-swiperWidth / 2}px) rotateX(90deg) rotateZ(0deg) scale(${params.shadowScale})`;\n } else {\n const shadowAngle = Math.abs(wrapperRotate) - Math.floor(Math.abs(wrapperRotate) / 90) * 90;\n const multiplier = 1.5 - (Math.sin(shadowAngle * 2 * Math.PI / 360) / 2 + Math.cos(shadowAngle * 2 * Math.PI / 360) / 2);\n const scale1 = params.shadowScale;\n const scale2 = params.shadowScale / multiplier;\n const offset = params.shadowOffset;\n cubeShadowEl.style.transform = `scale3d(${scale1}, 1, ${scale2}) translate3d(0px, ${swiperHeight / 2 + offset}px, ${-swiperHeight / 2 / scale2}px) rotateX(-90deg)`;\n }\n }\n const zFactor = (browser.isSafari || browser.isWebView) && browser.needPerspectiveFix ? -swiperSize / 2 : 0;\n wrapperEl.style.transform = `translate3d(0px,0,${zFactor}px) rotateX(${swiper.isHorizontal() ? 0 : wrapperRotate}deg) rotateY(${swiper.isHorizontal() ? -wrapperRotate : 0}deg)`;\n wrapperEl.style.setProperty('--swiper-cube-translate-z', `${zFactor}px`);\n };\n const setTransition = duration => {\n const {\n el,\n slides\n } = swiper;\n slides.forEach(slideEl => {\n slideEl.style.transitionDuration = `${duration}ms`;\n slideEl.querySelectorAll('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').forEach(subEl => {\n subEl.style.transitionDuration = `${duration}ms`;\n });\n });\n if (swiper.params.cubeEffect.shadow && !swiper.isHorizontal()) {\n const shadowEl = el.querySelector('.swiper-cube-shadow');\n if (shadowEl) shadowEl.style.transitionDuration = `${duration}ms`;\n }\n };\n effectInit({\n effect: 'cube',\n swiper,\n on,\n setTranslate,\n setTransition,\n recreateShadows,\n getEffectParams: () => swiper.params.cubeEffect,\n perspective: () => true,\n overwriteParams: () => ({\n slidesPerView: 1,\n slidesPerGroup: 1,\n watchSlidesProgress: true,\n resistanceRatio: 0,\n spaceBetween: 0,\n centeredSlides: false,\n virtualTranslate: true\n })\n });\n}","import createShadow from '../../shared/create-shadow.js';\nimport effectInit from '../../shared/effect-init.js';\nimport effectTarget from '../../shared/effect-target.js';\nimport effectVirtualTransitionEnd from '../../shared/effect-virtual-transition-end.js';\nimport { getSlideTransformEl } from '../../shared/utils.js';\nexport default function EffectFlip({\n swiper,\n extendParams,\n on\n}) {\n extendParams({\n flipEffect: {\n slideShadows: true,\n limitRotation: true\n }\n });\n const createSlideShadows = (slideEl, progress, params) => {\n let shadowBefore = swiper.isHorizontal() ? slideEl.querySelector('.swiper-slide-shadow-left') : slideEl.querySelector('.swiper-slide-shadow-top');\n let shadowAfter = swiper.isHorizontal() ? slideEl.querySelector('.swiper-slide-shadow-right') : slideEl.querySelector('.swiper-slide-shadow-bottom');\n if (!shadowBefore) {\n shadowBefore = createShadow(params, slideEl, swiper.isHorizontal() ? 'left' : 'top');\n }\n if (!shadowAfter) {\n shadowAfter = createShadow(params, slideEl, swiper.isHorizontal() ? 'right' : 'bottom');\n }\n if (shadowBefore) shadowBefore.style.opacity = Math.max(-progress, 0);\n if (shadowAfter) shadowAfter.style.opacity = Math.max(progress, 0);\n };\n const recreateShadows = () => {\n // Set shadows\n const params = swiper.params.flipEffect;\n swiper.slides.forEach(slideEl => {\n let progress = slideEl.progress;\n if (swiper.params.flipEffect.limitRotation) {\n progress = Math.max(Math.min(slideEl.progress, 1), -1);\n }\n createSlideShadows(slideEl, progress, params);\n });\n };\n const setTranslate = () => {\n const {\n slides,\n rtlTranslate: rtl\n } = swiper;\n const params = swiper.params.flipEffect;\n for (let i = 0; i < slides.length; i += 1) {\n const slideEl = slides[i];\n let progress = slideEl.progress;\n if (swiper.params.flipEffect.limitRotation) {\n progress = Math.max(Math.min(slideEl.progress, 1), -1);\n }\n const offset = slideEl.swiperSlideOffset;\n const rotate = -180 * progress;\n let rotateY = rotate;\n let rotateX = 0;\n let tx = swiper.params.cssMode ? -offset - swiper.translate : -offset;\n let ty = 0;\n if (!swiper.isHorizontal()) {\n ty = tx;\n tx = 0;\n rotateX = -rotateY;\n rotateY = 0;\n } else if (rtl) {\n rotateY = -rotateY;\n }\n slideEl.style.zIndex = -Math.abs(Math.round(progress)) + slides.length;\n if (params.slideShadows) {\n createSlideShadows(slideEl, progress, params);\n }\n const transform = `translate3d(${tx}px, ${ty}px, 0px) rotateX(${rotateX}deg) rotateY(${rotateY}deg)`;\n const targetEl = effectTarget(params, slideEl);\n targetEl.style.transform = transform;\n }\n };\n const setTransition = duration => {\n const transformElements = swiper.slides.map(slideEl => getSlideTransformEl(slideEl));\n transformElements.forEach(el => {\n el.style.transitionDuration = `${duration}ms`;\n el.querySelectorAll('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').forEach(shadowEl => {\n shadowEl.style.transitionDuration = `${duration}ms`;\n });\n });\n effectVirtualTransitionEnd({\n swiper,\n duration,\n transformElements\n });\n };\n effectInit({\n effect: 'flip',\n swiper,\n on,\n setTranslate,\n setTransition,\n recreateShadows,\n getEffectParams: () => swiper.params.flipEffect,\n perspective: () => true,\n overwriteParams: () => ({\n slidesPerView: 1,\n slidesPerGroup: 1,\n watchSlidesProgress: true,\n spaceBetween: 0,\n virtualTranslate: !swiper.params.cssMode\n })\n });\n}","import createShadow from '../../shared/create-shadow.js';\nimport effectInit from '../../shared/effect-init.js';\nimport effectTarget from '../../shared/effect-target.js';\nimport { getSlideTransformEl } from '../../shared/utils.js';\nexport default function EffectCoverflow({\n swiper,\n extendParams,\n on\n}) {\n extendParams({\n coverflowEffect: {\n rotate: 50,\n stretch: 0,\n depth: 100,\n scale: 1,\n modifier: 1,\n slideShadows: true\n }\n });\n const setTranslate = () => {\n const {\n width: swiperWidth,\n height: swiperHeight,\n slides,\n slidesSizesGrid\n } = swiper;\n const params = swiper.params.coverflowEffect;\n const isHorizontal = swiper.isHorizontal();\n const transform = swiper.translate;\n const center = isHorizontal ? -transform + swiperWidth / 2 : -transform + swiperHeight / 2;\n const rotate = isHorizontal ? params.rotate : -params.rotate;\n const translate = params.depth;\n // Each slide offset from center\n for (let i = 0, length = slides.length; i < length; i += 1) {\n const slideEl = slides[i];\n const slideSize = slidesSizesGrid[i];\n const slideOffset = slideEl.swiperSlideOffset;\n const centerOffset = (center - slideOffset - slideSize / 2) / slideSize;\n const offsetMultiplier = typeof params.modifier === 'function' ? params.modifier(centerOffset) : centerOffset * params.modifier;\n let rotateY = isHorizontal ? rotate * offsetMultiplier : 0;\n let rotateX = isHorizontal ? 0 : rotate * offsetMultiplier;\n // var rotateZ = 0\n let translateZ = -translate * Math.abs(offsetMultiplier);\n let stretch = params.stretch;\n // Allow percentage to make a relative stretch for responsive sliders\n if (typeof stretch === 'string' && stretch.indexOf('%') !== -1) {\n stretch = parseFloat(params.stretch) / 100 * slideSize;\n }\n let translateY = isHorizontal ? 0 : stretch * offsetMultiplier;\n let translateX = isHorizontal ? stretch * offsetMultiplier : 0;\n let scale = 1 - (1 - params.scale) * Math.abs(offsetMultiplier);\n\n // Fix for ultra small values\n if (Math.abs(translateX) < 0.001) translateX = 0;\n if (Math.abs(translateY) < 0.001) translateY = 0;\n if (Math.abs(translateZ) < 0.001) translateZ = 0;\n if (Math.abs(rotateY) < 0.001) rotateY = 0;\n if (Math.abs(rotateX) < 0.001) rotateX = 0;\n if (Math.abs(scale) < 0.001) scale = 0;\n const slideTransform = `translate3d(${translateX}px,${translateY}px,${translateZ}px) rotateX(${rotateX}deg) rotateY(${rotateY}deg) scale(${scale})`;\n const targetEl = effectTarget(params, slideEl);\n targetEl.style.transform = slideTransform;\n slideEl.style.zIndex = -Math.abs(Math.round(offsetMultiplier)) + 1;\n if (params.slideShadows) {\n // Set shadows\n let shadowBeforeEl = isHorizontal ? slideEl.querySelector('.swiper-slide-shadow-left') : slideEl.querySelector('.swiper-slide-shadow-top');\n let shadowAfterEl = isHorizontal ? slideEl.querySelector('.swiper-slide-shadow-right') : slideEl.querySelector('.swiper-slide-shadow-bottom');\n if (!shadowBeforeEl) {\n shadowBeforeEl = createShadow(params, slideEl, isHorizontal ? 'left' : 'top');\n }\n if (!shadowAfterEl) {\n shadowAfterEl = createShadow(params, slideEl, isHorizontal ? 'right' : 'bottom');\n }\n if (shadowBeforeEl) shadowBeforeEl.style.opacity = offsetMultiplier > 0 ? offsetMultiplier : 0;\n if (shadowAfterEl) shadowAfterEl.style.opacity = -offsetMultiplier > 0 ? -offsetMultiplier : 0;\n }\n }\n };\n const setTransition = duration => {\n const transformElements = swiper.slides.map(slideEl => getSlideTransformEl(slideEl));\n transformElements.forEach(el => {\n el.style.transitionDuration = `${duration}ms`;\n el.querySelectorAll('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').forEach(shadowEl => {\n shadowEl.style.transitionDuration = `${duration}ms`;\n });\n });\n };\n effectInit({\n effect: 'coverflow',\n swiper,\n on,\n setTranslate,\n setTransition,\n perspective: () => true,\n overwriteParams: () => ({\n watchSlidesProgress: true\n })\n });\n}","import createShadow from '../../shared/create-shadow.js';\nimport effectInit from '../../shared/effect-init.js';\nimport effectTarget from '../../shared/effect-target.js';\nimport effectVirtualTransitionEnd from '../../shared/effect-virtual-transition-end.js';\nimport { getSlideTransformEl } from '../../shared/utils.js';\nexport default function EffectCreative({\n swiper,\n extendParams,\n on\n}) {\n extendParams({\n creativeEffect: {\n limitProgress: 1,\n shadowPerProgress: false,\n progressMultiplier: 1,\n perspective: true,\n prev: {\n translate: [0, 0, 0],\n rotate: [0, 0, 0],\n opacity: 1,\n scale: 1\n },\n next: {\n translate: [0, 0, 0],\n rotate: [0, 0, 0],\n opacity: 1,\n scale: 1\n }\n }\n });\n const getTranslateValue = value => {\n if (typeof value === 'string') return value;\n return `${value}px`;\n };\n const setTranslate = () => {\n const {\n slides,\n wrapperEl,\n slidesSizesGrid\n } = swiper;\n const params = swiper.params.creativeEffect;\n const {\n progressMultiplier: multiplier\n } = params;\n const isCenteredSlides = swiper.params.centeredSlides;\n if (isCenteredSlides) {\n const margin = slidesSizesGrid[0] / 2 - swiper.params.slidesOffsetBefore || 0;\n wrapperEl.style.transform = `translateX(calc(50% - ${margin}px))`;\n }\n for (let i = 0; i < slides.length; i += 1) {\n const slideEl = slides[i];\n const slideProgress = slideEl.progress;\n const progress = Math.min(Math.max(slideEl.progress, -params.limitProgress), params.limitProgress);\n let originalProgress = progress;\n if (!isCenteredSlides) {\n originalProgress = Math.min(Math.max(slideEl.originalProgress, -params.limitProgress), params.limitProgress);\n }\n const offset = slideEl.swiperSlideOffset;\n const t = [swiper.params.cssMode ? -offset - swiper.translate : -offset, 0, 0];\n const r = [0, 0, 0];\n let custom = false;\n if (!swiper.isHorizontal()) {\n t[1] = t[0];\n t[0] = 0;\n }\n let data = {\n translate: [0, 0, 0],\n rotate: [0, 0, 0],\n scale: 1,\n opacity: 1\n };\n if (progress < 0) {\n data = params.next;\n custom = true;\n } else if (progress > 0) {\n data = params.prev;\n custom = true;\n }\n // set translate\n t.forEach((value, index) => {\n t[index] = `calc(${value}px + (${getTranslateValue(data.translate[index])} * ${Math.abs(progress * multiplier)}))`;\n });\n // set rotates\n r.forEach((value, index) => {\n r[index] = data.rotate[index] * Math.abs(progress * multiplier);\n });\n slideEl.style.zIndex = -Math.abs(Math.round(slideProgress)) + slides.length;\n const translateString = t.join(', ');\n const rotateString = `rotateX(${r[0]}deg) rotateY(${r[1]}deg) rotateZ(${r[2]}deg)`;\n const scaleString = originalProgress < 0 ? `scale(${1 + (1 - data.scale) * originalProgress * multiplier})` : `scale(${1 - (1 - data.scale) * originalProgress * multiplier})`;\n const opacityString = originalProgress < 0 ? 1 + (1 - data.opacity) * originalProgress * multiplier : 1 - (1 - data.opacity) * originalProgress * multiplier;\n const transform = `translate3d(${translateString}) ${rotateString} ${scaleString}`;\n\n // Set shadows\n if (custom && data.shadow || !custom) {\n let shadowEl = slideEl.querySelector('.swiper-slide-shadow');\n if (!shadowEl && data.shadow) {\n shadowEl = createShadow(params, slideEl);\n }\n if (shadowEl) {\n const shadowOpacity = params.shadowPerProgress ? progress * (1 / params.limitProgress) : progress;\n shadowEl.style.opacity = Math.min(Math.max(Math.abs(shadowOpacity), 0), 1);\n }\n }\n const targetEl = effectTarget(params, slideEl);\n targetEl.style.transform = transform;\n targetEl.style.opacity = opacityString;\n if (data.origin) {\n targetEl.style.transformOrigin = data.origin;\n }\n }\n };\n const setTransition = duration => {\n const transformElements = swiper.slides.map(slideEl => getSlideTransformEl(slideEl));\n transformElements.forEach(el => {\n el.style.transitionDuration = `${duration}ms`;\n el.querySelectorAll('.swiper-slide-shadow').forEach(shadowEl => {\n shadowEl.style.transitionDuration = `${duration}ms`;\n });\n });\n effectVirtualTransitionEnd({\n swiper,\n duration,\n transformElements,\n allSlides: true\n });\n };\n effectInit({\n effect: 'creative',\n swiper,\n on,\n setTranslate,\n setTransition,\n perspective: () => swiper.params.creativeEffect.perspective,\n overwriteParams: () => ({\n watchSlidesProgress: true,\n virtualTranslate: !swiper.params.cssMode\n })\n });\n}","import createShadow from '../../shared/create-shadow.js';\nimport effectInit from '../../shared/effect-init.js';\nimport effectTarget from '../../shared/effect-target.js';\nimport effectVirtualTransitionEnd from '../../shared/effect-virtual-transition-end.js';\nimport { getSlideTransformEl } from '../../shared/utils.js';\nexport default function EffectCards({\n swiper,\n extendParams,\n on\n}) {\n extendParams({\n cardsEffect: {\n slideShadows: true,\n rotate: true,\n perSlideRotate: 2,\n perSlideOffset: 8\n }\n });\n const setTranslate = () => {\n const {\n slides,\n activeIndex\n } = swiper;\n const params = swiper.params.cardsEffect;\n const {\n startTranslate,\n isTouched\n } = swiper.touchEventsData;\n const currentTranslate = swiper.translate;\n for (let i = 0; i < slides.length; i += 1) {\n const slideEl = slides[i];\n const slideProgress = slideEl.progress;\n const progress = Math.min(Math.max(slideProgress, -4), 4);\n let offset = slideEl.swiperSlideOffset;\n if (swiper.params.centeredSlides && !swiper.params.cssMode) {\n swiper.wrapperEl.style.transform = `translateX(${swiper.minTranslate()}px)`;\n }\n if (swiper.params.centeredSlides && swiper.params.cssMode) {\n offset -= slides[0].swiperSlideOffset;\n }\n let tX = swiper.params.cssMode ? -offset - swiper.translate : -offset;\n let tY = 0;\n const tZ = -100 * Math.abs(progress);\n let scale = 1;\n let rotate = -params.perSlideRotate * progress;\n let tXAdd = params.perSlideOffset - Math.abs(progress) * 0.75;\n const slideIndex = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.from + i : i;\n const isSwipeToNext = (slideIndex === activeIndex || slideIndex === activeIndex - 1) && progress > 0 && progress < 1 && (isTouched || swiper.params.cssMode) && currentTranslate < startTranslate;\n const isSwipeToPrev = (slideIndex === activeIndex || slideIndex === activeIndex + 1) && progress < 0 && progress > -1 && (isTouched || swiper.params.cssMode) && currentTranslate > startTranslate;\n if (isSwipeToNext || isSwipeToPrev) {\n const subProgress = (1 - Math.abs((Math.abs(progress) - 0.5) / 0.5)) ** 0.5;\n rotate += -28 * progress * subProgress;\n scale += -0.5 * subProgress;\n tXAdd += 96 * subProgress;\n tY = `${-25 * subProgress * Math.abs(progress)}%`;\n }\n if (progress < 0) {\n // next\n tX = `calc(${tX}px + (${tXAdd * Math.abs(progress)}%))`;\n } else if (progress > 0) {\n // prev\n tX = `calc(${tX}px + (-${tXAdd * Math.abs(progress)}%))`;\n } else {\n tX = `${tX}px`;\n }\n if (!swiper.isHorizontal()) {\n const prevY = tY;\n tY = tX;\n tX = prevY;\n }\n const scaleString = progress < 0 ? `${1 + (1 - scale) * progress}` : `${1 - (1 - scale) * progress}`;\n const transform = `\n translate3d(${tX}, ${tY}, ${tZ}px)\n rotateZ(${params.rotate ? rotate : 0}deg)\n scale(${scaleString})\n `;\n if (params.slideShadows) {\n // Set shadows\n let shadowEl = slideEl.querySelector('.swiper-slide-shadow');\n if (!shadowEl) {\n shadowEl = createShadow(params, slideEl);\n }\n if (shadowEl) shadowEl.style.opacity = Math.min(Math.max((Math.abs(progress) - 0.5) / 0.5, 0), 1);\n }\n slideEl.style.zIndex = -Math.abs(Math.round(slideProgress)) + slides.length;\n const targetEl = effectTarget(params, slideEl);\n targetEl.style.transform = transform;\n }\n };\n const setTransition = duration => {\n const transformElements = swiper.slides.map(slideEl => getSlideTransformEl(slideEl));\n transformElements.forEach(el => {\n el.style.transitionDuration = `${duration}ms`;\n el.querySelectorAll('.swiper-slide-shadow').forEach(shadowEl => {\n shadowEl.style.transitionDuration = `${duration}ms`;\n });\n });\n effectVirtualTransitionEnd({\n swiper,\n duration,\n transformElements\n });\n };\n effectInit({\n effect: 'cards',\n swiper,\n on,\n setTranslate,\n setTransition,\n perspective: () => true,\n overwriteParams: () => ({\n watchSlidesProgress: true,\n virtualTranslate: !swiper.params.cssMode\n })\n });\n}","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))"],"names":["isObject","obj","constructor","Object","extend","target","src","keys","forEach","key","length","ssrDocument","body","addEventListener","removeEventListener","activeElement","blur","nodeName","querySelector","querySelectorAll","getElementById","createEvent","initEvent","createElement","children","childNodes","style","setAttribute","getElementsByTagName","createElementNS","importNode","location","hash","host","hostname","href","origin","pathname","protocol","search","getDocument","doc","document","ssrWindow","navigator","userAgent","history","replaceState","pushState","go","back","CustomEvent","this","getComputedStyle","getPropertyValue","Image","Date","screen","setTimeout","clearTimeout","matchMedia","requestAnimationFrame","callback","cancelAnimationFrame","id","getWindow","win","window","nextTick","delay","now","getTranslate","el","axis","matrix","curTransform","transformMatrix","curStyle","currentStyle","WebKitCSSMatrix","transform","webkitTransform","split","map","a","replace","join","MozTransform","OTransform","MsTransform","msTransform","toString","m41","parseFloat","m42","o","prototype","call","slice","args","to","noExtend","i","nextSource","node","HTMLElement","nodeType","keysArray","filter","indexOf","nextIndex","len","nextKey","desc","getOwnPropertyDescriptor","undefined","enumerable","__swiper__","setCSSProperty","varName","varValue","setProperty","animateCSSModeScroll","swiper","targetPosition","side","startPosition","translate","time","startTime","duration","params","speed","wrapperEl","scrollSnapType","cssModeFrameID","dir","isOutOfBound","current","animate","getTime","progress","Math","max","min","easeProgress","cos","PI","currentPosition","scrollTo","overflow","getSlideTransformEl","slideEl","shadowEl","elementChildren","element","selector","matches","tag","classes","classList","add","Array","isArray","elementOffset","box","getBoundingClientRect","clientTop","clientLeft","scrollTop","scrollY","scrollLeft","scrollX","top","left","elementStyle","prop","elementIndex","child","previousSibling","elementParents","parents","parent","parentElement","push","elementTransitionEnd","fireCallBack","e","elementOuterSize","size","includeMargins","offsetWidth","support","deviceCached","browser","getSupport","smoothScroll","documentElement","touch","DocumentTouch","calcSupport","getDevice","overrides","platform","ua","device","ios","android","screenWidth","width","screenHeight","height","match","ipad","ipod","iphone","windows","macos","os","calcDevice","getBrowser","needPerspectiveFix","isSafari","toLowerCase","String","includes","major","minor","num","Number","isWebView","test","calcBrowser","on","events","handler","priority","self","eventsListeners","destroyed","method","event","once","onceHandler","off","__emitterProxy","apply","onAny","eventsAnyListeners","offAny","index","splice","eventHandler","emit","data","context","unshift","updateSize","clientWidth","clientHeight","isHorizontal","isVertical","parseInt","isNaN","assign","updateSlides","getDirectionLabel","property","getDirectionPropertyValue","label","slidesEl","swiperSize","rtlTranslate","rtl","wrongRTL","isVirtual","virtual","enabled","previousSlidesLength","slides","slideClass","slidesLength","snapGrid","slidesGrid","slidesSizesGrid","offsetBefore","slidesOffsetBefore","offsetAfter","slidesOffsetAfter","previousSnapGridLength","previousSlidesGridLength","spaceBetween","slidePosition","prevSlideSize","virtualSize","marginLeft","marginRight","marginBottom","marginTop","centeredSlides","cssMode","gridEnabled","grid","rows","slideSize","initSlides","shouldResetSlideSize","slidesPerView","breakpoints","slide","updateSlide","slideStyles","currentTransform","currentWebKitTransform","roundLengths","paddingLeft","paddingRight","boxSizing","floor","swiperSlideSize","abs","slidesPerGroup","slidesPerGroupSkip","effect","setWrapperSize","updateWrapperSize","newSlidesGrid","slidesGridItem","loop","groups","ceil","slidesBefore","slidesAfter","groupSize","_","slideIndex","centeredSlidesBounds","allSlidesSize","slideSizeValue","maxSnap","snap","centerInsufficientSlides","allSlidesOffset","snapIndex","addToSnapGrid","addToSlidesGrid","v","watchOverflow","checkOverflow","watchSlidesProgress","updateSlidesOffset","backFaceHiddenClass","containerModifierClass","hasClassBackfaceClassAdded","contains","maxBackfaceHiddenSlides","remove","updateAutoHeight","activeSlides","newHeight","setTransition","getSlideByIndex","getAttribute","visibleSlides","activeIndex","offsetHeight","minusOffset","isElement","offsetLeft","offsetTop","swiperSlideOffset","updateSlidesProgress","offsetCenter","slideVisibleClass","visibleSlidesIndexes","slideOffset","slideProgress","minTranslate","originalSlideProgress","slideBefore","slideAfter","originalProgress","updateProgress","multiplier","translatesDiff","maxTranslate","isBeginning","isEnd","progressLoop","wasBeginning","wasEnd","isBeginningRounded","isEndRounded","firstSlideIndex","getSlideIndex","lastSlideIndex","firstSlideTranslate","lastSlideTranslate","translateMax","translateAbs","autoHeight","updateSlidesClasses","getFilteredSlide","activeSlide","slideActiveClass","slideNextClass","slidePrevClass","nextSlide","nextEls","nextElementSibling","next","elementNextAll","prevSlide","prevEls","previousElementSibling","prev","elementPrevAll","emitSlidesClasses","updateActiveIndex","newActiveIndex","previousIndex","realIndex","previousRealIndex","previousSnapIndex","getVirtualRealIndex","aIndex","normalizeSlideIndex","getActiveIndexByTranslate","skip","initialized","runCallbacksOnInit","updateClickedSlide","closest","slideFound","clickedSlide","clickedIndex","slideToClickedSlide","virtualTranslate","currentTranslate","setTranslate","byController","newProgress","x","y","previousTranslate","translateTo","runCallbacks","translateBounds","internal","animating","preventInteractionOnTransition","newTranslate","isH","behavior","onTranslateToWrapperTransitionEnd","transitionEmit","direction","step","slideTo","initial","normalizedTranslate","normalizedGrid","normalizedGridNext","allowSlideNext","allowSlidePrev","transitionStart","transitionEnd","t","_immediateVirtual","_cssModeVirtualInitialSet","initialSlide","onSlideToWrapperTransitionEnd","slideToLoop","newIndex","slideNext","perGroup","slidesPerGroupAuto","slidesPerViewDynamic","increment","loopPreventsSliding","loopFix","_clientLeft","rewind","slidePrev","normalize","val","normalizedSnapGrid","prevSnap","prevSnapIndex","prevIndex","lastIndex","slideReset","slideToClosest","threshold","currentSnap","slideToIndex","slideSelector","loopedSlides","loopCreate","slideRealIndex","activeSlideIndex","byMousewheel","prependSlidesIndexes","appendSlidesIndexes","isNext","isPrev","slidesPrepended","slidesAppended","prepend","append","recalcSlides","currentSlideTranslate","diff","touches","controller","control","loopParams","c","loopDestroy","newSlidesOrder","swiperSlideIndex","removeAttribute","onTouchStart","touchEventsData","evCache","simulateTouch","pointerType","originalEvent","targetEl","touchEventsTarget","which","button","isTouched","isMoved","swipingClassHasValue","noSwipingClass","eventPath","composedPath","path","shadowRoot","noSwipingSelector","isTargetShadow","noSwiping","base","__closestFrom","assignedSlot","found","getRootNode","closestElement","allowClick","swipeHandler","currentX","pageX","currentY","pageY","startX","startY","edgeSwipeDetection","iOSEdgeSwipeDetection","edgeSwipeThreshold","iOSEdgeSwipeThreshold","innerWidth","preventDefault","allowTouchCallbacks","isScrolling","startMoving","touchStartTime","swipeDirection","allowThresholdMove","focusableElements","shouldPreventDefault","allowTouchMove","touchStartPreventDefault","touchStartForcePreventDefault","isContentEditable","freeMode","onTouchMove","pointerIndex","findIndex","cachedEv","pointerId","targetTouch","preventedByNestedSwiper","prevX","prevY","touchReleaseOnEdges","targetTouches","diffX","diffY","sqrt","touchAngle","atan2","zoom","cancelable","touchMoveStopPropagation","nested","stopPropagation","touchesDiff","previousX","previousY","oneWayMovement","touchRatio","prevTouchesDirection","touchesDirection","isLoop","startTranslate","evt","bubbles","dispatchEvent","allowMomentumBounce","grabCursor","setGrabCursor","loopFixed","disableParentSwiper","resistanceRatio","resistance","followFinger","onTouchEnd","type","touchEndTime","timeDiff","pathTree","lastClickTime","currentPos","stopIndex","rewindFirstIndex","rewindLastIndex","ratio","longSwipesMs","longSwipes","longSwipesRatio","shortSwipes","navigation","nextEl","prevEl","timeout","onResize","setBreakpoint","isVirtualLoop","autoplay","running","paused","resume","onClick","preventClicks","preventClicksPropagation","stopImmediatePropagation","onScroll","processLazyPreloader","imageEl","lazyEl","lazyPreloaderClass","onLoad","update","dummyEventAttached","dummyEventListener","capture","domMethod","swiperMethod","passive","updateOnWindowResize","isGridEnabled","init","resizeObserver","createElements","url","breakpointsBase","uniqueNavElements","passiveListeners","wrapperClass","_emitClasses","moduleExtendParams","allModulesParams","moduleParamName","moduleParams","auto","prototypes","eventsEmitter","transition","transitionDuration","moving","isLocked","__preventObserver__","cursor","unsetGrabCursor","attachEvents","bind","detachEvents","breakpoint","getBreakpoint","currentBreakpoint","breakpointParams","originalParams","wasMultiRow","isMultiRow","wasEnabled","emitContainerClasses","fill","wasModuleEnabled","isModuleEnabled","disable","enable","directionChanged","needsReLoop","changeDirection","isEnabled","containerEl","currentHeight","innerHeight","points","point","minRatio","substr","value","sort","b","wasLocked","lastSlideRightEdge","addClasses","classNames","suffixes","entries","prefix","resultClasses","item","prepareClasses","removeClasses","extendedDefaults","Swiper","swipers","newParams","modules","__modules__","mod","extendParams","swiperParams","defaults","passedParams","eventName","velocity","clickTimeout","velocities","imagesToLoad","imagesLoaded","setProgress","cls","className","getSlideClasses","updates","view","exact","spv","breakLoop","translateValue","translated","complete","newDirection","needUpdate","currentDirection","changeLanguageDirection","mount","mounted","getWrapperSelector","trim","getWrapper","destroy","deleteInstance","cleanStyles","object","deleteProps","static","newDefaults","module","m","installModule","prototypeGroup","protoMethod","use","observer","animationFrame","resizeHandler","orientationChangeHandler","ResizeObserver","newWidth","contentBoxSize","contentRect","inlineSize","blockSize","observe","unobserve","observers","attach","options","MutationObserver","WebkitMutationObserver","mutations","observerUpdate","attributes","childList","characterData","observeParents","observeSlideChildren","containerParents","disconnect","createElementIfNotDefined","checkProps","classesToSelector","appendSlide","appendElement","tempDOM","innerHTML","prependSlide","prependElement","addSlide","activeIndexBuffer","baseLength","slidesBuffer","currentSlide","removeSlide","slidesIndexes","indexToRemove","removeAllSlides","effectInit","overwriteParams","perspective","recreateShadows","getEffectParams","requireUpdateOnVirtual","overwriteParamsResult","_s","slideShadows","effectTarget","effectParams","transformEl","backfaceVisibility","effectVirtualTransitionEnd","transformElements","allSlides","transitionEndTarget","eventTriggered","parentNode","getSlide","createShadow","shadowClass","shadowContainer","cssModeTimeout","cache","renderSlide","renderExternal","renderExternalUpdate","addSlidesBefore","addSlidesAfter","from","offset","force","previousFrom","previousTo","previousSlidesGrid","previousOffset","offsetProp","onRendered","slidesToRender","prependIndexes","appendIndexes","loopFrom","loopTo","domSlidesAssigned","numberOfNewSlides","newCache","cachedIndex","cachedEl","cachedElIndex","handle","kc","keyCode","charCode","pageUpDown","keyboard","isPageUp","isPageDown","isArrowLeft","isArrowRight","isArrowUp","isArrowDown","shiftKey","altKey","ctrlKey","metaKey","onlyInViewport","inView","swiperWidth","swiperHeight","windowWidth","windowHeight","swiperOffset","swiperCoord","returnValue","mousewheel","releaseOnEdges","invert","forceToAxis","sensitivity","eventsTarget","thresholdDelta","thresholdTime","lastEventBeforeSnap","lastScrollTime","recentWheelEvents","handleMouseEnter","mouseEntered","handleMouseLeave","animateSlider","newEvent","delta","raw","targetElContainsTarget","rtlFactor","sX","sY","pX","pY","detail","wheelDelta","wheelDeltaY","wheelDeltaX","HORIZONTAL_AXIS","deltaY","deltaX","deltaMode","spinX","spinY","pixelX","pixelY","positions","sign","ignoreWheelEvents","position","sticky","shift","prevEvent","firstEvent","snapToThreshold","autoplayDisableOnInteraction","stop","releaseScroll","hideOnClick","disabledClass","hiddenClass","lockClass","navigationDisabledClass","makeElementsArray","getEl","res","toggleEl","disabled","subEl","tagName","onPrevClick","onNextClick","initButton","destroyButton","pagination","clickable","isHidden","toggle","pfx","bulletSize","bulletElement","renderBullet","renderProgressbar","renderFraction","renderCustom","progressbarOpposite","dynamicBullets","dynamicMainBullets","formatFractionCurrent","number","formatFractionTotal","bulletClass","bulletActiveClass","modifierClass","currentClass","totalClass","progressbarFillClass","progressbarOppositeClass","clickableClass","horizontalClass","verticalClass","paginationDisabledClass","bullets","dynamicBulletIndex","isPaginationDisabled","setSideBullets","bulletEl","onBulletClick","total","firstIndex","midIndex","suffix","bullet","bulletIndex","firstDisplayedBullet","lastDisplayedBullet","dynamicBulletsLength","bulletsOffset","subElIndex","fractionEl","textContent","totalEl","progressbarDirection","scale","scaleX","scaleY","progressEl","render","paginationHTML","numberOfBullets","dragStartPos","dragSize","trackSize","divider","dragTimeout","scrollbar","dragEl","newSize","newPos","hide","opacity","display","getPointerPosition","clientX","clientY","setDragPosition","positionRatio","onDragStart","onDragMove","onDragEnd","snapOnRelease","activeListener","passiveListener","eventMethod","swiperEl","dragClass","draggable","scrollbarDisabledClass","parallax","setTransform","p","rotate","currentOpacity","_swiper","parallaxEl","parallaxDuration","maxRatio","containerClass","zoomedSlideClass","fakeGestureTouched","fakeGestureMoved","currentScale","isScaling","gesture","slideWidth","slideHeight","imageWrapEl","image","minX","minY","maxX","maxY","touchesStart","touchesCurrent","prevPositionX","prevPositionY","prevTime","getDistanceBetweenTouches","x1","y1","x2","y2","eventWithinSlide","onGestureStart","scaleStart","originX","originY","getScaleOrigin","transformOrigin","onGestureChange","scaleMove","onGestureEnd","eventWithinZoomContainer","scaledWidth","scaledHeight","onTransitionEnd","zoomIn","touchX","touchY","offsetX","offsetY","translateX","translateY","imageWidth","imageHeight","translateMinX","translateMinY","translateMaxX","translateMaxY","touchAction","forceZoomRatio","zoomOut","zoomToggle","getListeners","activeListenerWithCapture","defineProperty","get","set","momentumDurationX","momentumDurationY","momentumDistanceX","newPositionX","momentumDistanceY","newPositionY","momentumDuration","in","out","LinearSpline","binarySearch","maxIndex","minIndex","guess","array","i1","i3","interpolate","removeSpline","spline","inverse","by","controlElement","onControllerSwiper","_t","controlled","controlledTranslate","setControlledTranslate","getInterpolateFunction","setControlledTransition","a11y","notificationClass","prevSlideMessage","nextSlideMessage","firstSlideMessage","lastSlideMessage","paginationBulletMessage","slideLabelMessage","containerMessage","containerRoleDescriptionMessage","itemRoleDescriptionMessage","slideRole","clicked","liveRegion","notify","message","notification","makeElFocusable","makeElNotFocusable","addElRole","role","addElRoleDescription","description","addElLabel","disableEl","enableEl","onEnterOrSpaceKey","click","hasPagination","hasClickablePagination","initNavEl","wrapperId","controls","addElControls","handlePointerDown","handlePointerUp","handleFocus","isActive","isVisible","sourceCapabilities","firesTouchEvents","repeat","round","random","getRandomNumber","live","addElLive","updateNavigation","updatePagination","root","keepQuery","paths","slugify","text","getPathValues","urlOverride","URL","pathArray","part","setHistory","currentState","state","scrollToSlide","setHistoryPopState","hashNavigation","watchState","onHashChange","newHash","setHash","raf","timeLeft","waitForTransition","disableOnInteraction","stopOnLastSlide","reverseDirection","pauseOnMouseEnter","autoplayTimeLeft","wasPaused","pausedByTouch","touchStartTimeout","slideChanged","pausedByInteraction","autoplayDelayTotal","autoplayDelayCurrent","autoplayStartTime","calcTimeLeft","run","delayForce","currentSlideDelay","activeSlideEl","getSlideDelay","proceed","start","pause","reset","onVisibilityChange","visibilityState","onPointerEnter","onPointerLeave","thumbs","multipleActiveThumbs","autoScrollOffset","slideThumbActiveClass","thumbsContainerClass","swiperCreated","onThumbClick","thumbsSwiper","thumbsParams","SwiperClass","thumbsSwiperParams","thumbsToActivate","thumbActiveClass","useOffset","currentThumbsIndex","newThumbsIndex","newThumbsSlide","getThumbsElementAndInit","thumbsElement","onThumbsSwiper","watchForThumbsToAppear","momentum","momentumRatio","momentumBounce","momentumBounceRatio","momentumVelocityRatio","minimumVelocity","lastMoveEvent","pop","velocityEvent","distance","momentumDistance","newPosition","afterBouncePosition","doBounce","bounceAmount","needsLoopFix","j","moveDistance","currentSlideSize","slidesNumberEvenToRows","slidesPerRow","numFullColumns","newSlideOrderIndex","column","row","groupIndex","slideIndexInGroup","columnsInGroup","order","fadeEffect","crossFade","tx","ty","slideOpacity","cubeEffect","shadow","shadowOffset","shadowScale","createSlideShadows","shadowBefore","shadowAfter","cubeShadowEl","wrapperRotate","slideAngle","tz","shadowAngle","sin","scale1","scale2","zFactor","flipEffect","limitRotation","rotateY","rotateX","zIndex","coverflowEffect","stretch","depth","modifier","center","centerOffset","offsetMultiplier","translateZ","slideTransform","shadowBeforeEl","shadowAfterEl","creativeEffect","limitProgress","shadowPerProgress","progressMultiplier","getTranslateValue","isCenteredSlides","margin","r","custom","translateString","rotateString","scaleString","opacityString","shadowOpacity","cardsEffect","perSlideRotate","perSlideOffset","tX","tY","tZ","tXAdd","isSwipeToNext","isSwipeToPrev","subProgress","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","exports","__webpack_modules__","d","definition","hasOwnProperty"],"sourceRoot":""}