{"version":3,"file":"js/407-0fbda01cf7f47a371f19.js","mappings":";8EAAwEA,EAAOC,QAAoP,WAAW,IAAIC,EAC9UC,EAAsB,CAAC,aAAc,UAAW,UAAW,MAAO,OAAQ,QAAS,QAAS,UAG5FC,EAAc,SAAUC,EAAKC,EAAIC,GAGnC,IAFA,IAAIC,EAAMD,EAEDE,EAAI,EAAGC,EAAML,EAAIM,OAAQF,EAAIC,EAAKD,IACzCD,EAAMF,EAAGE,EAAKH,EAAII,GAAIA,EAAGJ,GAG3B,OAAOG,CACT,EAKII,EAAc,SAAUP,EAAKC,GAC/B,OAAOF,EAAYC,GAAK,SAAUE,EAAOM,EAAMJ,EAAGJ,GAChD,OAAQC,EAAGO,EAAMJ,EAAGJ,GAAeE,EAAMO,OAAOD,GAArBN,CAC7B,GAAG,GACL,EAKIQ,EAAgB,SAAUV,EAAKW,GACjC,OAAOZ,EAAYC,GAAK,SAAUE,EAAOM,EAAMJ,EAAGJ,GAChD,OAAiB,IAAVE,GAAkBM,IAASG,CACpC,IAAG,EACL,EAGIC,EAAe,SAAUC,GAC3B,MAA+C,mBAAxCC,OAAOC,UAAUC,SAASC,KAAKJ,EACxC,EAGIK,GAAmB,CACrBF,SAAU,MACVG,qBAAqB,YAEnBC,EAAa,CAAC,WAAY,iBAAkB,UAAW,iBAAkB,gBAAiB,uBAAwB,eAElHC,EAAY,SAAUR,GAGxB,IACIS,EADAC,EAAS,GAGb,IAAKD,KAAQT,EACPC,OAAOC,UAAUS,eAAeP,KAAKJ,EAAKS,IAAOC,EAAOE,KAAKH,GAGnE,IAAKJ,EAAiB,OAAOK,EAE7B,IAAK,IAAInB,EAAI,EAAGC,EAAMe,EAAWd,OAAQF,EAAIC,EAAKD,IAC5CU,OAAOC,UAAUS,eAAeP,KAAKJ,EAAKO,EAAWhB,KAAKmB,EAAOE,KAAKL,EAAWhB,IAGvF,OAAOmB,CACT,EAEIG,EAAgB,SAAUC,EAAKC,GASjC,YARY,IAARD,IACFA,EAAM,QAGI,IAARC,IACFA,EAAMC,KAGD,SAAUC,GACf,MAAwB,kBAAVA,GAAsBC,SAAS,GAAKD,EAAO,MAAQA,GAASA,GAASH,GAAOG,GAASF,CACrG,CACF,EAMII,EAAuB,SAAUF,GACnC,MAAwB,oBAAVA,GAAwBlB,EAAakB,IAAUvB,EAAYuB,GAAO,SAAUG,GACxF,MAAoB,oBAANA,CAChB,IAAG3B,SAAWwB,EAAMxB,MACtB,EAEI4B,EAAwB,SAAUJ,GACpC,MAAwB,kBAAVA,KAAwBA,EAAMxB,MAC9C,EAEI6B,EAAa,CAAC,EAmBdC,EAAoB,WACtB,MAAO,CACLC,qBAAqB,EACrBC,qBAAqB,EAEzB,EAEAH,EAAWI,OAAS,CAClBC,OAAQ,CACNC,aAAc,WACZ,OAAO,IACT,EACAC,QAAS,cACTC,SAAUT,GAEZU,WAAY,CACVH,aAAc,WAEd,EACAC,QAAS,qBACTC,SAAU,SAAUb,GAClB,YAAiBe,IAAVf,GAAuBI,EAAsBJ,EACtD,GAEFgB,QAAS,CACPL,aAAc,WAEd,EACAC,QAAS,qBACTC,SAAU,SAAUb,GAClB,YAAiBe,IAAVf,GAAuBI,EAAsBJ,EACtD,GAEFiB,iBAAkB,CAChBN,aAAc,WACZ,OAAO,CACT,EACAC,QAAS,uBACTC,SAAU,SAAUb,GAClB,OAAiB,IAAVA,IAA4B,IAAVA,CAC3B,GAEFkB,kBAAmB,CACjBP,aAAc,WACZ,OAAOL,GACT,EACAM,QAAS,8GACTO,oBAAoB,EACpBN,SAAU,SAAUb,GAElB,GAAqB,kBAAVA,IAAuBA,EAAO,OAAO,EAChD,IAAIoB,EAAe7B,EAAUS,GACzBqB,EAAc9B,EAAUe,KAE5B,QAAI7B,EAAY2C,GAAc,SAAUE,GACtC,OAAO1C,EAAcyC,EAAaC,EACpC,IAAG9C,OAAS4C,EAAa5C,WAErBC,EAAYc,EAAUS,IAAQ,SAAUsB,GAC1C,MAA2B,mBAAbtB,EAAMsB,EACtB,IAAG9C,OAAS,EAEd,GAEF+C,QAAS,CACPZ,aAAc,WACZ,MAAO,EACT,EACAC,QAAS,6CACTC,SAAUX,GAEZsB,UAAW,CACTb,aAAc,WACZ,MAAO,EACT,EACAC,QAAS,6CACTC,SAAUX,GAEZuB,aAAc,CACZd,aAAc,WACZ,MAAO,EACT,EACAC,QAAS,6CACTC,SAAUX,GAEZwB,UAAW,CACTf,aAAc,WACZ,MAAO,CACLgB,OAAQ,6BACRC,SAAU,+BAEd,EACAhB,QAAS,oEACTC,SAAU,SAAUxC,GAClB,OACEA,GAAsB,kBAARA,GACd+B,EAAsB/B,EAAIsD,SAAWvB,EAAsB/B,EAAIuD,WAGjD,IAFdnD,EAAYc,EAAUlB,IAAM,SAAUiD,GACpC,OAAQ1C,EAAc,CAAC,SAAU,YAAa0C,EAChD,IAAG9C,MAEP,GAEFqD,kBAAmB,CACjBlB,aAAc,SAAUtC,GACtB,OAAO,CACT,EACAuC,QAAS,uBACTC,SAAU,SAAUxC,GAClB,OAAe,IAARA,IAAwB,IAARA,CACzB,GAEFyD,qBAAsB,CACpBnB,aAAc,WACZ,OAAO,IACT,EACAC,QAAS,gCACTC,SAAU,SAAUb,GAClB,OAAiB,OAAVA,GAAkBlB,EAAakB,IAAUvB,EAAYuB,GAAO,SAAUG,GAC3E,MAAoB,kBAANA,CAChB,IAAG3B,SAAWwB,EAAMxB,MACtB,GAEFuD,aAAc,CACZpB,aAAc,WACZ,MAAO,YACT,EACAC,QAAS,qBACTC,SAAU,SAAUb,GAClB,MAAwB,kBAAVA,GAAsBA,EAAMxB,MAC5C,GAEFwD,eAAgB,CACdrB,aAAc,WACZ,OAAO,EACT,EACAC,QAAS,+BACTC,SAAU,SAAUb,GAClB,OAAOJ,EAAc,EAAG,IAAjBA,CAAsBI,EAC/B,GAEFiC,uBAAwB,CACtBtB,aAAc,WACZ,OAAO3C,CACT,EACA4C,QAAS,2DAA6D5C,EAAoBkE,KAAK,KAAO,IACtGrB,SAAU,SAAUb,GAClB,OAAiB,OAAVA,GAAkBlB,EAAakB,IAAU/B,EAAY+B,GAAO,SAAU5B,EAAO+D,GAClF,OAAc,IAAV/D,EAAwBA,EACrBQ,EAAcZ,EAAqBmE,EAC5C,IAAG,EACL,GAEFC,QAAS,CACPzB,aAAc,WAEd,EACAC,QAAS,qBACTC,SAAU,SAAUb,GAClB,YAAiBe,IAAVf,GAAwC,kBAAVA,CACvC,GAEFqC,KAAM,CACJ1B,aAAc,WACZ,MAAO,CAAC,CACV,EACAC,QAAS,0DACTC,SAAU,SAAUb,GAClB,OAAiB,OAAVA,GAAkBA,GAAS/B,EAAYsB,EAAUS,IAAQ,SAAU5B,EAAOkE,GAC/E,OAAOlE,GAASQ,EAAc,CAAC,KAAM,QAAS,QAAS0D,EACzD,IAAG,EACL,GAEFC,SAAU,CACR5B,aAAc,WACZ,MAAO,CAAC,CACV,EACAC,QAAS,sBACTC,SAAU,SAAUb,GAClB,MAAwB,kBAAVA,GAAgC,OAAVA,CACtC,GAEFwC,OAAQ,CACN7B,aAAc,WAEd,EACAC,QAAS,wEACTC,SAAU,SAAUb,GAClB,OAAQA,GAASA,GAAS/B,EAAY,CAAC,QAAS,OAAQ,OAAQ,UAAU,SAAUG,EAAOqE,GACzF,OAAOrE,GAAkC,oBAAlB4B,EAAMyC,EAC/B,IAAG,EACL,GAEFC,aAAc,CACZ/B,aAAc,WACZ,MAAO,CAAC,WACV,EACAC,QAAS,wCACTC,SAAU,SAAUb,GAClB,OAAOlB,EAAakB,IAAUA,EAAMxB,SAAWC,EAAYuB,GAAO,SAAU2C,GAC1E,MAAoB,kBAANA,GAAkBA,GAAuB,oBAAXA,EAAEC,IAChD,IAAGpE,MACL,GAEFqE,QAAS,CACPlC,aAAc,WACZ,MAAO,EACT,EACAC,QAAS,uCACTC,SAAU,SAAUb,GAClB,OAAOlB,EAAakB,IAAUA,EAAMxB,SAAWC,EAAYuB,GAAO,SAAU8C,GAC1E,OAAOA,GAAkB,kBAANA,GAAoC,oBAAXA,EAAEC,IAChD,IAAGvE,MACL,GAEFwE,aAAc,CACZrC,aAAc,WACZ,MAAO,EACT,EACAC,QAAS,4DACTC,SAAU,SAAUb,GAClB,OAAOlB,EAAakB,IAAUA,EAAMxB,SAAWC,EAAYuB,GAAO,SAAUiD,GAC1E,OAAOA,GAA8B,kBAAZA,GAAgD,kBAAjBA,EAAQC,IAClE,IAAG1E,MACL,IAMJ,IAAI2E,EAAc,SAAUC,GAC1B,IAAK,IAAI9E,EAAI,EAAGA,EAAI+E,UAAU7E,OAAQF,IAAK,CACzC,IAAIgF,EAASD,UAAU/E,GAEvB,IAAK,IAAIgE,KAAOgB,EACVtE,OAAOC,UAAUS,eAAeP,KAAKmE,EAAQhB,KAC/Cc,EAAOd,GAAOgB,EAAOhB,GAG3B,CAEA,OAAOc,CACT,EAKIG,EAAW,SAAUrF,EAAKC,GAC5B,OAAOF,EAAYC,GAAK,SAAUE,EAAOM,EAAMJ,EAAGJ,GAChD,OAAOE,EAAMO,OAAOR,EAAGO,EAAMJ,EAAGJ,GAClC,GAAG,GACL,EAEA,SAASsF,IAA2Q,OAA9PA,EAAWxE,OAAOyE,QAAU,SAAUL,GAAU,IAAK,IAAI9E,EAAI,EAAGA,EAAI+E,UAAU7E,OAAQF,IAAK,CAAE,IAAIgF,EAASD,UAAU/E,GAAI,IAAK,IAAIgE,KAAOgB,EAActE,OAAOC,UAAUS,eAAeP,KAAKmE,EAAQhB,KAAQc,EAAOd,GAAOgB,EAAOhB,GAAU,CAAE,OAAOc,CAAQ,EAAUI,EAASE,MAAMC,KAAMN,UAAY,CAE5T,IAAI5C,EAASJ,EAAWI,OAMpBmD,EAAa,CACf7B,aAAcoB,EAAY,CAAC,EAAG1C,EAAOsB,aAAc,CACjDpB,aAAc,WACZ,MAAI,qBAAqBiC,KAAKiB,OAAOC,SAASC,MAAc,cACrD,YACT,IAEF/C,QAASwC,EAAS,CAAC,EAAG/C,EAAOO,QAAS,CACpCL,aAAc,WACZ,MAAO,SACT,IAEF6B,OAAQW,EAAY,CAAC,EAAG1C,EAAO+B,OAAQ,CACrC7B,aAAc,WACZ,MACqB,qBAAZqD,SAAoD,oBAAlBA,QAAQC,MAAuBC,SAAuBnD,CAEnG,KAIAmD,EAAqB,WACvB,IAAI1B,EAAS,CAAC,EACV2B,EAAaH,QAAQI,IAKzB,OAJAb,EAAS,CAAC,QAAS,OAAQ,OAAQ,UAAU,SAAUd,GACrD,IAAI4B,EAAgBL,QAAQvB,GAC5BD,EAAOC,GAAmC,oBAAlB4B,EAA+BA,EAAcC,KAAKN,QAAS,aAAeG,EAAWG,KAAKN,QAAS,YAC7H,IACOxB,CACT,EA4BI+B,EA1B0B,WAC5B,SAASC,EAAW5D,EAAS2B,EAAUkC,EAAMC,QACzB,IAAdA,IACFA,EAAY,IAAIC,MAGlBhB,KAAKc,KAAOA,EACZd,KAAK/C,QAAUA,EACf+C,KAAKpB,SAAWA,EAChBoB,KAAKe,UAAYA,CACnB,CAaA,OAXaF,EAAWvF,UAEjB2F,OAAS,WACd,MAAO,CACLH,KAAMd,KAAKc,KACXvB,KAAMS,KAAK/C,QACX8D,UAAWf,KAAKe,UAChBG,SAAUlB,KAAKpB,SAEnB,EAEOiC,CACT,CAxB8B,GA4B1BM,EAAkB,CAAC,GACvB,SAAWC,EAAMC,GACf,aAIsB,oBAAXjH,GAAyBA,EAAOkH,IACzClH,EAAO,aAAc,GAAIiH,GACW,kBAApBF,EAChBA,EAAkBE,IAElBD,EAAKG,WAAaF,GAErB,CAZD,CAYGrB,MAAM,WACP,aAEA,SAASwB,EAAUC,GACjB,OAAQC,MAAMC,WAAWF,KAAOG,SAASH,EAC3C,CAEA,SAASI,EAAYC,GACnB,OAAOA,EAAIC,OAAO,GAAGC,cAAgBF,EAAIG,UAAU,EACrD,CAEA,SAASC,EAAQ/C,GACf,OAAO,WACL,OAAOa,KAAKb,EACd,CACF,CAEA,IAAIgD,EAAe,CAAC,gBAAiB,SAAU,WAAY,cACvDC,EAAe,CAAC,eAAgB,cAChCC,EAAc,CAAC,WAAY,eAAgB,UAC3CC,EAAa,CAAC,QACdC,EAAQJ,EAAanH,OAAOoH,EAAcC,EAAaC,GAE3D,SAASf,EAAWnG,GAClB,GAAIA,aAAeC,OACjB,IAAK,IAAIV,EAAI,EAAGA,EAAI4H,EAAM1H,OAAQF,IAC5BS,EAAIW,eAAewG,EAAM5H,UAAyByC,IAAlBhC,EAAImH,EAAM5H,KAC5CqF,KAAK,MAAQ6B,EAAYU,EAAM5H,KAAKS,EAAImH,EAAM5H,IAItD,CAEA4G,EAAWjG,UAAY,CACrBkH,QAAS,WACP,OAAOxC,KAAKyC,IACd,EACAC,QAAS,SAAUC,GACjB,GAA0C,mBAAtCtH,OAAOC,UAAUC,SAASC,KAAKmH,GACjC,MAAM,IAAIC,UAAU,yBAGtB5C,KAAKyC,KAAOE,CACd,EACAE,cAAe,WACb,OAAO7C,KAAK8C,UACd,EACAC,cAAe,SAAUJ,GACvB,GAAIA,aAAapB,EACfvB,KAAK8C,WAAaH,MACb,MAAIA,aAAatH,QAGtB,MAAM,IAAIuH,UAAU,+CAFpB5C,KAAK8C,WAAa,IAAIvB,EAAWoB,EAGnC,CACF,EACApH,SAAU,WAMR,OALmByE,KAAKgD,mBAAqB,eAClC,KAAOhD,KAAKwC,WAAa,IAAIjE,KAAK,KAAO,KACrCyB,KAAKiD,cAAgB,IAAMjD,KAAKiD,cAAgB,KAC9CzB,EAAUxB,KAAKkD,iBAAmB,IAAMlD,KAAKkD,gBAAkB,KAC7D1B,EAAUxB,KAAKmD,mBAAqB,IAAMnD,KAAKmD,kBAAoB,GAExF,GAGF,IAAK,IAAIxI,EAAI,EAAGA,EAAIwH,EAAatH,OAAQF,IACvC4G,EAAWjG,UAAU,MAAQuG,EAAYM,EAAaxH,KAAOuH,EAAQC,EAAaxH,IAElF4G,EAAWjG,UAAU,MAAQuG,EAAYM,EAAaxH,KAAO,SAAUwE,GACrE,OAAO,SAAUwD,GACf3C,KAAKb,GAAKiE,QAAQT,EACpB,CACF,CAJ6D,CAI3DR,EAAaxH,IAGjB,IAAK,IAAI0I,EAAI,EAAGA,EAAIjB,EAAavH,OAAQwI,IACvC9B,EAAWjG,UAAU,MAAQuG,EAAYO,EAAaiB,KAAOnB,EAAQE,EAAaiB,IAElF9B,EAAWjG,UAAU,MAAQuG,EAAYO,EAAaiB,KAAO,SAAUlE,GACrE,OAAO,SAAUwD,GACf,IAAKnB,EAAUmB,GACb,MAAM,IAAIC,UAAUzD,EAAI,qBAG1Ba,KAAKb,GAAKmE,OAAOX,EACnB,CACF,CAR6D,CAQ3DP,EAAaiB,IAGjB,IAAK,IAAI1F,EAAI,EAAGA,EAAI0E,EAAYxH,OAAQ8C,IACtC4D,EAAWjG,UAAU,MAAQuG,EAAYQ,EAAY1E,KAAOuE,EAAQG,EAAY1E,IAEhF4D,EAAWjG,UAAU,MAAQuG,EAAYQ,EAAY1E,KAAO,SAAUwB,GACpE,OAAO,SAAUwD,GACf3C,KAAKb,GAAKoE,OAAOZ,EACnB,CACF,CAJ4D,CAI1DN,EAAY1E,IAGhB,OAAO4D,CACT,IAEA,IAAIiC,EAAwB,CAAC,GAC7B,SAAWpC,EAAMC,GACf,aAIsB,oBAAXjH,GAAyBA,EAAOkH,IACzClH,EAAO,qBAAsB,CAAC,cAAeiH,GACH,kBAA1BmC,EAChBA,EAAwBnC,EAAQF,GAEhCC,EAAKqC,iBAAmBpC,EAAQD,EAAKG,WAExC,CAZD,CAYGvB,MAAM,SAA0BuB,GACjC,aAEA,IAAImC,EAA8B,gBAC9BC,EAAyB,kCACzBC,EAA4B,+BAChC,MAAO,CAOLC,MAAO,SAAiCC,GACtC,GAAgC,qBAArBA,EAAMC,YAAkE,qBAA7BD,EAAM,mBAC1D,OAAO9D,KAAKgE,WAAWF,GAClB,GAAIA,EAAMG,OAASH,EAAMG,MAAMC,MAAMP,GAC1C,OAAO3D,KAAKmE,YAAYL,GACnB,GAAIA,EAAMG,MACf,OAAOjE,KAAKoE,gBAAgBN,GAE5B,MAAM,IAAIO,MAAM,kCAEpB,EAEAC,gBAAiB,SAA2CC,GAE1D,IAA8B,IAA1BA,EAAQC,QAAQ,KAClB,MAAO,CAACD,GAGV,IACIE,EADS,iCACMC,KAAKH,EAAQI,QAAQ,UAAW,KACnD,MAAO,CAACF,EAAM,GAAIA,EAAM,SAAMrH,EAAWqH,EAAM,SAAMrH,EACvD,EACA+G,YAAa,SAAuCL,GAIlD,OAHeA,EAAMG,MAAMW,MAAM,MAAMC,QAAO,SAAUC,GACtD,QAASA,EAAKZ,MAAMP,EACtB,GAAG3D,MACa+E,KAAI,SAAUD,GACxBA,EAAKN,QAAQ,WAAa,IAE5BM,EAAOA,EAAKH,QAAQ,aAAc,QAAQA,QAAQ,iCAAkC,KAGtF,IAAIK,EAAgBF,EAAKH,QAAQ,OAAQ,IAAIA,QAAQ,eAAgB,KAGjExE,EAAW6E,EAAcd,MAAM,4BAG/Be,GADJD,EAAgB7E,EAAW6E,EAAcL,QAAQxE,EAAS,GAAI,IAAM6E,GACzCJ,MAAM,OAAOM,MAAM,GAE1CC,EAAgBnF,KAAKsE,gBAAgBnE,EAAWA,EAAS,GAAK8E,EAAOG,OACrEC,EAAeJ,EAAO1G,KAAK,WAAQnB,EACnCkI,EAAW,CAAC,OAAQ,eAAed,QAAQW,EAAc,KAAO,OAAI/H,EAAY+H,EAAc,GAClG,OAAO,IAAI5D,EAAW,CACpB8D,aAAcA,EACdC,SAAUA,EACVC,WAAYJ,EAAc,GAC1BK,aAAcL,EAAc,GAC5BxF,OAAQmF,GAEZ,GAAG9E,KACL,EACAoE,gBAAiB,SAA2CN,GAI1D,OAHeA,EAAMG,MAAMW,MAAM,MAAMC,QAAO,SAAUC,GACtD,OAAQA,EAAKZ,MAAMN,EACrB,GAAG5D,MACa+E,KAAI,SAAUD,GAM5B,GAJIA,EAAKN,QAAQ,YAAc,IAC7BM,EAAOA,EAAKH,QAAQ,qDAAsD,SAGjD,IAAvBG,EAAKN,QAAQ,OAAsC,IAAvBM,EAAKN,QAAQ,KAE3C,OAAO,IAAIjD,EAAW,CACpB8D,aAAcP,IAGhB,IAAIW,EAAoB,6BACpBC,EAAUZ,EAAKZ,MAAMuB,GACrBJ,EAAeK,GAAWA,EAAQ,GAAKA,EAAQ,QAAKtI,EACpD+H,EAAgBnF,KAAKsE,gBAAgBQ,EAAKH,QAAQc,EAAmB,KACzE,OAAO,IAAIlE,EAAW,CACpB8D,aAAcA,EACdC,SAAUH,EAAc,GACxBI,WAAYJ,EAAc,GAC1BK,aAAcL,EAAc,GAC5BxF,OAAQmF,GAGd,GAAG9E,KACL,EACAgE,WAAY,SAAsC2B,GAChD,OAAKA,EAAE5B,YAAc4B,EAAE1I,QAAQuH,QAAQ,OAAS,GAAKmB,EAAE1I,QAAQ2H,MAAM,MAAM/J,OAAS8K,EAAE5B,WAAWa,MAAM,MAAM/J,OACpGmF,KAAK4F,YAAYD,GACdA,EAAE1B,MAGLjE,KAAK6F,aAAaF,GAFlB3F,KAAK8F,aAAaH,EAI7B,EACAC,YAAa,SAAuCD,GAKlD,IAJA,IAAII,EAAS,oCACTC,EAAQL,EAAE1I,QAAQ2H,MAAM,MACxB9I,EAAS,GAEJnB,EAAI,EAAGC,EAAMoL,EAAMnL,OAAQF,EAAIC,EAAKD,GAAK,EAAG,CACnD,IAAIuJ,EAAQ6B,EAAOrB,KAAKsB,EAAMrL,IAE1BuJ,GACFpI,EAAOE,KAAK,IAAIuF,EAAW,CACzB+D,SAAUpB,EAAM,GAChBqB,WAAYrB,EAAM,GAClBvE,OAAQqG,EAAMrL,KAGpB,CAEA,OAAOmB,CACT,EACAgK,aAAc,SAAwCH,GAKpD,IAJA,IAAII,EAAS,6DACTC,EAAQL,EAAE5B,WAAWa,MAAM,MAC3B9I,EAAS,GAEJnB,EAAI,EAAGC,EAAMoL,EAAMnL,OAAQF,EAAIC,EAAKD,GAAK,EAAG,CACnD,IAAIuJ,EAAQ6B,EAAOrB,KAAKsB,EAAMrL,IAE1BuJ,GACFpI,EAAOE,KAAK,IAAIuF,EAAW,CACzB8D,aAAcnB,EAAM,SAAM9G,EAC1BkI,SAAUpB,EAAM,GAChBqB,WAAYrB,EAAM,GAClBvE,OAAQqG,EAAMrL,KAGpB,CAEA,OAAOmB,CACT,EAEA+J,aAAc,SAAwC/B,GAIpD,OAHeA,EAAMG,MAAMW,MAAM,MAAMC,QAAO,SAAUC,GACtD,QAASA,EAAKZ,MAAMR,KAAiCoB,EAAKZ,MAAM,oBAClE,GAAGlE,MACa+E,KAAI,SAAUD,GAC5B,IAIImB,EAJAhB,EAASH,EAAKF,MAAM,KACpBO,EAAgBnF,KAAKsE,gBAAgBW,EAAOG,OAC5Cc,EAAejB,EAAOkB,SAAW,GACjCd,EAAea,EAAavB,QAAQ,iCAAkC,MAAMA,QAAQ,cAAe,UAAOvH,EAG1G8I,EAAahC,MAAM,kBACrB+B,EAAUC,EAAavB,QAAQ,uBAAwB,OAGzD,IAAIlC,OAAmBrF,IAAZ6I,GAAqC,8BAAZA,OAA0C7I,EAAY6I,EAAQrB,MAAM,KACxG,OAAO,IAAIrD,EAAW,CACpB8D,aAAcA,EACd5C,KAAMA,EACN6C,SAAUH,EAAc,GACxBI,WAAYJ,EAAc,GAC1BK,aAAcL,EAAc,GAC5BxF,OAAQmF,GAEZ,GAAG9E,KACL,EAEJ,IAEA,IAAIoG,EAAwB5C,EAExB6C,EAAyB,SAAUC,EAAMC,EAAUC,EAAOC,GAC5D,IAAI1H,EAAe0H,GAAQA,EAAK1H,aAAe0H,EAAK1H,aAAe,GAC/D2H,EAAgBD,GAAQA,EAAKC,cAAgBD,EAAKC,cAAgB,GACtE,OAAOC,KAAKC,UAAUC,EAA2BP,EAAMvH,EAAc2H,GAAgBH,EAAUC,EACjG,EAEIM,EAAY,GACZC,EAAY,KACZC,EAAsB,EACtBC,EAAmB,MAEvB,SAASC,EAAQC,GACf,OAAOA,aAAa9C,OAAS,uCAAuCpF,KAAK5D,OAAOC,UAAUC,SAASC,KAAK2L,GAC1G,CAEA,SAASC,EAAcC,GACrB,MAAO,aAAeA,EAAMA,EAAIpK,QAAU,KAAO,GACnD,CAEA,SAASqK,EAAKC,EAAUC,GACtB,IAAK,IAAI7M,EAAI,EAAGC,EAAM2M,EAAS1M,OAAQF,EAAIC,EAAKD,IAC9C,GAAI4M,EAAS5M,KAAO6M,EAAQ,OAAO,EAGrC,OAAO,CACT,CAGA,SAASC,EAAaC,EAAOC,GAC3B,IAAK,IAAIhN,EAAI,EAAGC,EAAM8M,EAAM7M,OAAQF,EAAIC,EAAKD,IAC3C,GAA+B,IAA3BgN,EAAKnD,QAAQkD,EAAM/M,IAAW,OAAO,EAG3C,OAAO,CACT,CAEA,SAASiN,EAAaC,EAAUlJ,GAC9B,IAAK,IAAIhE,EAAI,EAAGC,EAAMiN,EAAShN,OAAQF,EAAIC,EAAKD,IAAK,CACnD,GAA2B,kBAAhBkN,EAASlN,IAAmBkN,EAASlN,GAAGmN,gBAAkBnJ,EAAImJ,cAAe,OAAO,EAC/F,GAAID,EAASlN,IAAkC,oBAArBkN,EAASlN,GAAGsE,MAAuB4I,EAASlN,GAAGsE,KAAKN,GAAM,OAAO,CAC7F,CAEA,OAAO,CACT,CAEA,SAASoJ,EAAa3M,GACpB,MAA+C,mBAAxCC,OAAOC,UAAUC,SAASC,KAAKJ,EACxC,CAEA,SAAS4M,EAAc5M,EAAKS,GAC1B,IACE,OAAOT,EAAIS,EACb,CAAE,MAAOwL,GACP,OAAOD,EAAcC,EACvB,CACF,CAEA,SAASR,EAA2BzL,EAAK2D,EAAc2H,GACrD,IAAIuB,EAAO,GAEPC,EAAQ,EAEZ,SAASC,EAAM/M,EAAKuM,GAClB,SAASS,IACP,OAAOT,EAAK9M,OAASmM,GAAuBkB,EAAQnB,CACtD,CAGA,GADAmB,IACIP,EAAK9M,OAASiM,EAAW,OAAOG,EACpC,GAAImB,IAAiB,OAAOnB,EAC5B,GAAY,OAAR7L,GAA+B,kBAARA,EAAkB,OAAOA,EACpD,GAAIkM,EAAKW,EAAM7M,GAAM,MAAO,aAG5B,GAFA6M,EAAKjM,KAAKZ,GAEgB,oBAAfA,EAAI6F,OACb,IAGEiH,IACA,IAAIG,EAAUF,EAAM/M,EAAI6F,SAAU0G,GAElC,OADAM,EAAK7C,MACEiD,CACT,CAAE,MAAOhB,GACP,OAAOD,EAAcC,EACvB,CAKF,GAFSH,EAAQ9L,GAET,CACN8M,IACA,IAAII,EAAUH,EAAM,CAClB5I,KAAMnE,EAAImE,KACVtC,QAAS7B,EAAI6B,SACZ0K,GAEH,OADAM,EAAK7C,MACEkD,CACT,CAEA,GAAIP,EAAa3M,GAAM,CAGrB,IAFA,IAAImN,EAAU,GAEL5N,EAAI,EAAGC,EAAMQ,EAAIP,OAAQF,EAAIC,EAAKD,IAAK,CAC9C,GAAIyN,IAAiB,CACnBG,EAAQvM,KAAKiL,GACb,KACF,CAEAsB,EAAQvM,KAAKmM,EAAM/M,EAAIT,GAAIgN,EAAK3M,OAAO,OACzC,CAGA,OADAiN,EAAK7C,MACEmD,CACT,CAEA,IAAIzM,EAAS,CAAC,EAEd,IACE,IAAK,IAAID,KAAQT,EACf,GAAKC,OAAOC,UAAUS,eAAeP,KAAKJ,EAAKS,GAE/C,GAAI4L,EAAaf,EAAeiB,EAAKpJ,KAAK,OAASqJ,EAAa7I,EAAclD,GAC5EC,EAAOD,GAAQ,iBADjB,CAKA,GAAIuM,IAAiB,CACnBtM,EAAOD,GAAQoL,EACf,KACF,CAEAnL,EAAOD,GAAQsM,EAAMH,EAAc5M,EAAKS,GAAO8L,EAAK3M,OAAOa,GAP3D,CASJ,CAAE,MAAO8J,GAAI,CAGb,OADAsC,EAAK7C,MACEtJ,CACT,CAEA,OAAOqM,EAAM/M,EAAK,GACpB,CAUA,SAASoN,EAAIC,EAAkBC,EAAqBnJ,EAAMoJ,GACxD,GAAoB,kBAATpJ,EAAX,MAIgBnC,IAAZuL,EACFA,EAAU,KACW,OAAZA,GAAuC,kBAAZA,IACpCA,EAAUtC,EAAuBsC,IAGnC,IAAIC,EAAgBF,EAAoBnJ,GAEX,kBAAlBqJ,GAQXH,EAAiBzM,KAAK,CACpBuD,KAAMA,EACNoJ,QAASA,IAEXD,EAAoBnJ,GAAQkJ,EAAiB5N,OAAS,GAXpD4N,EAAiBG,GAAiB,CAChCrJ,KAAMA,EACNoJ,QAASA,EAbb,CAuBF,CAEA,SAASE,EAAMJ,EAAkBK,EAAaJ,GAC5C,GAAKvN,EAAa2N,GAAlB,CAIA,IAAK,IAAInO,EAAI,EAAGA,EAAImO,EAAYjO,SAAUF,EAAG,CAC3C,IAAI2E,EAAUwJ,EAAYnO,GAEV,OAAZ2E,GAAuC,kBAAZA,GAK/BkJ,EAAIC,EAAkBC,EAAqBpJ,EAAQC,KAAMD,EAAQqJ,QACnE,CAEA,OAAOF,CAbP,CAcF,CAKA,SAASM,EAAW1J,GAClB,OAAOO,EAAS9E,EAAYuE,EAAc+D,UAAU,SAAU4F,GAC5D,IAAIzJ,EAAOyJ,EAAKzJ,KACZoJ,EAAUK,EAAKL,QACfM,EAAO,CACTC,YAAa3J,GAOf,MAJuB,kBAAZoJ,IACTM,EAAKN,QAAUA,GAGVM,CACT,GACF,CAEA,SAASE,EAAMC,EAAUC,EAAe9J,GACtC,IAAIqJ,EAAgBS,EAAc9J,GAEL,kBAAlBqJ,IACTQ,EAASR,GAAiB,YACnBS,EAAc9J,GAEzB,CAEA,IAAI+J,EAA2B,CAC7Bd,IAAKA,EACLW,MAAOA,EACPN,MAAOA,EACPE,WAAYA,GAIVQ,EAAgB,SAAUlC,GAC5B,QAASA,MAAUA,EAAIpD,SAAWoD,EAAItD,cAAgBsD,EAAI,qBAA0F,kBAA3DA,EAAIpD,OAASoD,EAAItD,YAAcsD,EAAI,qBAAoCA,EAAIpD,QAAUoD,EAAI9H,KAAO,KAAO8H,EAAIpK,OACtM,EAaA,SAASuM,EAAanN,GACpB,OAAQhB,OAAOC,UAAUC,SAASC,KAAKa,IACrC,IAAK,iBAGL,IAAK,qBAGL,IAAK,wBACH,OAAO,EAET,QACE,OAAOA,aAAiBgI,MAE9B,CAEA,IAAIoF,EAxBeD,EA4BfE,EAAW,SAAUC,EAAOC,EAASC,EAAUC,GACjD,IAAIC,EAEJ,GAAKH,EAAL,CACA,IAAII,EAEJ,GAAiB,OAAbH,EAAmB,OAAOI,EAAWN,EAAOC,GAExB,kBAAbC,IAAuBG,EAAUH,GACpB,kBAAbA,KAAkCE,EAAW,CAAC,GAAYF,GAAYC,EAA/CE,EAAyDD,GAEtFC,IAEAL,EAAMC,KAAUD,EAAMC,GAAW,CAAC,GAEvCD,EAAMC,GAAWpK,EAAY,CAAC,EAAGmK,EAAMC,GAAUI,GAZ7B,CAatB,EAgBIC,EAAa,SAAUN,EAAOC,EAASjL,GAClB,kBAAZiL,IAENjL,EAMDgL,EAAMC,WACDD,EAAMC,GAASjL,UANfgL,EAAMC,GAQjB,EAEIM,EAAwB,CAC1B1B,IAAKkB,EACLS,IA9BQ,SAAUR,EAAOC,EAASjL,GAClC,GAAuB,kBAAZiL,EAEX,OAAKjL,EAIDgL,EAAMC,GACDD,EAAMC,GAASjL,QADxB,EAHSgL,EAAMC,EAQjB,EAmBET,MAAOc,GAGLG,EAAsB,CAAC,GAC3B,SAAWhJ,EAAMC,GACf,aAIsB,oBAAXjH,GAAyBA,EAAOkH,IACzClH,EAAO,kBAAmB,CAAC,cAAeiH,GACF,kBAAxB+I,EAChBA,EAAsB/I,EAAQF,GAE9BC,EAAKiJ,eAAiBhJ,EAAQD,EAAKG,WAEtC,CAZD,CAYGvB,MAAM,SAAUuB,GACjB,MAAO,CACL+I,UAAW,SAAmC7D,GAC5C,IAAIxC,EAAQ,GACRsG,EAAe,GAEC,kBAAT9D,GAAkD,kBAAtBA,EAAK8D,eAC1CA,EAAe9D,EAAK8D,cAKtB,IAFA,IAAIC,EAAO9K,UAAU+K,OAEdD,GAAQvG,EAAMpJ,OAAS0P,GAAgBC,EAAgB,WAAG,CAI/D,IAFA,IAAI/H,EAAO,IAAIiI,MAAMF,EAAgB,UAAE3P,QAE9BF,EAAI,EAAGA,EAAI8H,EAAK5H,SAAUF,EACjC8H,EAAK9H,GAAK6P,EAAgB,UAAE7P,GAG1B,gCAAgCsE,KAAKuL,EAAKjP,YAC5C0I,EAAMjI,KAAK,IAAIuF,EAAW,CACxB8D,aAAcsF,OAAOC,SAAMxN,EAC3BqF,KAAMA,KAGRwB,EAAMjI,KAAK,IAAIuF,EAAW,CACxBkB,KAAMA,KAIV,IACE+H,EAAOA,EAAKK,MACd,CAAE,MAAOlF,GACP,KACF,CACF,CAEA,OAAO1B,CACT,EAEJ,IAsBA,IAAI6G,EAAqB,WACvB,SAASA,EAAMC,EAAYC,EAAcjH,EAAYkH,EAAcC,QAC9C,IAAfnH,IACFA,EAAa,SAGM,IAAjBkH,IACFA,EAAeE,KAGjBnL,KAAKjD,YAASK,EACd4C,KAAKvB,aAAUrB,EACf4C,KAAKoL,kBAAehO,EACpB4C,KAAKkL,cAAgBA,EACrBlL,KAAKqL,cAAgBJ,EACrBjL,KAAKsL,SAAWtL,KAAKqL,cAAcC,SACnCtL,KAAKuL,UAAYvL,KAAKqL,cAAcE,UACpCvL,KAAKwL,IAAM,CAAC,EACZxL,KAAKyL,OAAS,CAAC,EACfzL,KAAK0L,QAAU,CAAC,EAChB1L,KAAK2L,YAAc,GACnB3L,KAAK4L,QAAU,GACf5L,KAAK6L,UAAY,CAAC,EAClB7L,KAAK8L,UAAY,GACjB9L,KAAK+L,eAAiB,CAAC,EACvB/L,KAAKgM,MAAQ,CAAC,EACdhM,KAAKiM,cAAW7O,EAChB4C,KAAKkM,OAAS,CAACC,GAAmBpB,EAAYC,EAAcF,EAAMsB,OAAQrI,GAK5E,CAEA,IAAIsI,EAASvB,EAAMxP,UA2EnB,OAzEA+Q,EAAOC,YAAc,SAAqB1C,EAASC,EAAUC,GAC3D,OAAOI,EAAsB1B,IAAIxI,KAAK6L,UAAWjC,EAASC,EAAUC,EACtE,EAEAuC,EAAOE,YAAc,SAAqB3C,EAASjL,GACjD,OAAOuL,EAAsBC,IAAInK,KAAK6L,UAAWjC,EAASjL,EAC5D,EAEA0N,EAAOG,cAAgB,SAAuB5C,EAASjL,GACrD,OAAOuL,EAAsBf,MAAMnJ,KAAK6L,UAAWjC,EAASjL,EAC9D,EAEA0N,EAAOI,eAAiB,SAAwBlN,EAAMoJ,QACpC,IAAZA,IACFA,EAAU,MAGZW,EAAyBd,IAAIxI,KAAK8L,UAAW9L,KAAK+L,eAAgBxM,EAAMoJ,EAC1E,EAEA0D,EAAOK,gBAAkB,SAAyBrN,GAChDiK,EAAyBT,MAAM7I,KAAK8L,UAAWzM,EAAcW,KAAK+L,eACpE,EAEAM,EAAOM,gBAAkB,WACvB,OAAOrD,EAAyBP,WAAW/I,KAAK8L,UAClD,EAEAO,EAAOO,iBAAmB,SAA0BrN,GAClD+J,EAAyBH,MAAMnJ,KAAK8L,UAAW9L,KAAK+L,eAAgBxM,EACtE,EAEA8M,EAAOQ,kBAAoB,WACzB7M,KAAK8L,UAAY,GACjB9L,KAAK+L,eAAiB,CAAC,CACzB,EAEAM,EAAOS,QAAU,WACf,OAAO9M,KAAKgM,KACd,EAEAK,EAAOU,QAAU,SAAiBC,EAAIC,EAAO1N,GAC3CS,KAAKgM,MAAQ,CACXgB,GAAIA,EACJC,MAAOA,EACP1N,KAAMA,EAEV,EAEA8M,EAAOpL,OAAS,WACd,MAAO,CACLiM,eAAgB,IAChBC,WAAYvN,EAASI,KAAKkM,QAAQ,SAAUkB,GAC1C,OAAO5N,EAAY,CAAC,EAAG4N,EAAI,CACzBnQ,QAASmQ,EAAGpC,cAEhB,IACAM,SAAUtL,KAAKsL,SACfC,UAAWvL,KAAKqL,cAAcE,UAC9B8B,eAAgBrN,KAAKqL,cAAcgC,eACnC7B,IAAKxL,KAAKwL,IACVC,OAAQzL,KAAKyL,OACbC,QAAS1L,KAAK0L,QACdC,YAAa3L,KAAK2L,YAClBlN,QAASuB,KAAKvB,QACd2M,aAAcpL,KAAKoL,aACnBlK,SAAUlB,KAAK6L,UACfnN,KAAMsB,KAAKgM,MACXsB,QAAStN,KAAKiM,SACd5M,aAAcW,KAAK2M,kBAEvB,EAEO7B,CACT,CA9GyB,GAkHrByC,EAAmB,SAAUC,GAC/B,IAAIhR,EAAI,CACNiR,KAAMD,EAAMlI,SACZxG,OAAQ4O,EAAsBF,EAAMnI,cACpCE,WAAYiI,EAAMjI,WAClBC,aAAcgI,EAAMhI,aACpBmI,UAAMvQ,EACNwQ,eAAWxQ,GAUb,OAJIZ,EAAE+I,YAAc,IAAM/I,EAAEiR,OAASjR,EAAEsC,SACrCtC,EAAEiR,KAAO,eAGJjR,CACT,EAEIkR,EAAwB,SAAUnO,GACpC,MAAO,iBAAiBN,KAAKM,GAAQ,cAAgBA,CACvD,EAEI4L,EAAsB,WACxB,MAAO,CACLI,WAAW,EACXD,SAAU,UACV+B,eAAgB,CACdvM,KAAM,oBAGZ,EAEI+M,EAAe,SAAU/L,GAC3B,MAAsB,kBAARA,EAAmBA,EAAM,EACzC,EAEA,SAASqK,GAAmBpB,EAAYC,EAAclK,EAAMiD,GAC1D,MAAO,CACLgH,WAAY8C,EAAa9C,GACzBC,aAAc6C,EAAa7C,GAC3BlK,KAAMA,EACNiD,WAAYzJ,EAAYyJ,GAAY,SAAUtJ,EAAO+S,GACnD,IAAIhR,EAAI+Q,EAAiBC,GAEzB,IACE,MAA0B,OAAtB7G,KAAKC,UAAUpK,GAAoB/B,EAChCA,EAAMO,OAAOwB,EACtB,CAAE,MAAOmJ,GACP,OAAOlL,CACT,CACF,GAAG,IAEP,CAEA,SAASqT,GAAchK,GACrB,OAAIA,EAAMiK,MACD,CAACjK,GAAO9I,OAAO8S,GAAchK,EAAMiK,QAEnC,CAACjK,EAEZ,CAGAgH,EAAMkD,cAAgB,SAAUlK,EAAOmK,EAAmBC,GACxD,GAAI3E,EAAczF,GAAQ,OAAOsC,EAAsBvC,MAAMC,GAAOoB,MAAM+I,GAE1E,IACE,OAAOnT,EAAYsP,EAAoBE,aAAa,SAAUkD,GAC5D,OAAmE,KAA3DA,EAAMnI,cAAgB,IAAIb,QAAQ,mBAC5C,IAAGU,MAAM,EAAIgJ,EACf,CAAE,MAAOvI,GACP,MAAO,EACT,CACF,EAEAmF,EAAMqD,OAAS,SAAUC,EAAYC,EAAmBpD,EAAcqD,EAAWL,EAAmBpP,QACxE,IAAtBoP,IACFA,EAAoB,GAGtB,IAIIM,EAJAC,EAAkBC,GAAeL,EAAYC,EAAmBC,EAAWzP,GAC3EiF,EAAQ0K,EAAgB,GACxBE,EAAiBF,EAAgB,GAIrC,IACE,IAAIzK,EAAa+G,EAAMkD,cAAclK,EAIrC4K,EAAiB,EAAI,EAAIA,EAAiBT,EAAoB,EAE9D,EAAIA,GACJM,EAAQ,IAAIzD,EAAMhH,EAAMvE,KAAMuE,EAAM7G,QAAS8G,EAAYkH,EAAcmD,EACzE,CAAE,MAAOzI,GACP4I,EAAQ,IAAIzD,EAAMhH,EAAMvE,KAAMuE,EAAM7G,QAAS,GAAIgO,EAAcmD,EACjE,CAMA,GAJmB,iBAAftK,EAAMvE,MACRgP,EAAMjC,YAAY,GAAKgC,EAAW,sBAAuBK,GAAiBP,IAGxEtK,EAAMiK,MAAO,CACf,IAAIa,EAEAC,EAASf,GAAchK,GAAOoB,MAAM,GACpC4J,EAAmBlP,EAASiP,GAAQ,SAAUd,GAEhD,IAAIhK,EAAa0F,EAAasE,IAAUxE,EAAcwE,GAAS3H,EAAsBvC,MAAMkK,GAAS,GAGhGjK,EADmB2K,GAAeV,GAAO,EAAM,eACtB,GAG7B,MADmB,iBAAfjK,EAAMvE,MAAyBgP,EAAMjC,YAAY,cAAeqC,GAAiBZ,IAC9E5B,GAAmBrI,EAAMvE,KAAMuE,EAAM7G,QAAS6N,EAAMsB,OAAQrI,EACrE,KAEC6K,EAAgBL,EAAMrC,QAAQlQ,KAAK+D,MAAM6O,EAAeE,EAC3D,CAEA,OAAOP,CACT,EAEA,IAAII,GAAmB,SAAUtH,GAC/B,OAAY,OAARA,EAAqB,YACbjK,IAARiK,EAA0B,YACvBA,CACT,EAEIoH,GAAiB,SAAUL,EAAYC,EAAmBC,EAAWzP,GACvE,IAAIiF,EACA4K,EAAiB,EAEjBK,EAAyB,SAAUC,GACrC,IAAIC,EAAqB,gBAAdX,EAA8B,MAAQ,WAC7CzP,GAAQA,EAAOqQ,KAAKZ,EAAY,IAAMW,EAAO,kBAAqBD,EAAS,KAC/E,IAAI3H,EAAM,IAAIhD,MAAMiK,EAAY,IAAMW,EAAO,sBAAyBX,EAAY,0BAElF,OADAjH,EAAI9H,KAAO,eACJ8H,CACT,EAUA,GAAKgH,EAQH,cAAeD,GACb,IAAK,SACL,IAAK,SACL,IAAK,UACHtK,EAAQ,IAAIO,MAAMd,OAAO6K,IACzBM,GAAkB,EAClB,MAEF,IAAK,WACH5K,EAAQiL,EAAuB,YAC/BL,GAAkB,EAClB,MAEF,IAAK,SACgB,OAAfN,GAAuB3E,EAAa2E,GACtCtK,EAAQsK,EACgB,OAAfA,GAAuBe,GAAmBf,KACnDtK,EAAQ,IAAIO,MAAM+J,EAAWnR,SAAWmR,EAAWpD,eAC7CzL,KAAO6O,EAAW7O,MAAQ6O,EAAWrD,WAC3C2D,GAAkB,IAElB5K,EAAQiL,EAAsC,OAAfX,EAAsB,OAAS,sBAC9DM,GAAkB,GAGpB,MAEF,QACE5K,EAAQiL,EAAuB,WAC/BL,GAAkB,OApClBjF,EAAa2E,GACftK,EAAQsK,GAERtK,EAAQiL,SAA8BX,GACtCM,GAAkB,GAoCtB,IAAKnF,EAAczF,GAEjB,IACE,MAAMA,CACR,CAAE,MAAO6B,GACH4D,EAAc5D,KAChB7B,EAAQ6B,EAIR+I,EAAiB,EAErB,CAGF,MAAO,CAAC5K,EAAO4K,EACjB,EAGA5D,EAAMsB,OAAS,YAEf,IAAI+C,GAAqB,SAAUrL,GACjC,OAA8B,kBAAfA,EAAMvE,MAAiD,kBAArBuE,EAAMiH,cAAsD,kBAAlBjH,EAAM7G,SAAsD,kBAAvB6G,EAAMkH,aACxI,EAEIoE,GAAYtE,EAYZuE,GAAiB,SAAU9U,EAAKC,EAAI8U,GACtC,IAAIC,EAAQ,EAERC,EAAO,WACT,GAAID,GAAShV,EAAIM,OAAQ,OAAOyU,EAAG,MAAM,GACzC9U,EAAGD,EAAIgV,IAAQ,SAAUlI,EAAKvL,GAC5B,OAAIuL,EAAYiI,EAAGjI,IACJ,IAAXvL,EAAyBwT,EAAG,MAAM,IACtCC,SACAC,IACF,GACF,EAEAA,GACF,EAIIC,GAAqB,SAAUC,EAAWnB,EAAOoB,EAAiBL,GAMpE,IAAIM,EAAwB,SAAUpV,EAAI8U,GACxC,GAAkB,oBAAP9U,EAAmB,OAAO8U,EAAG,MAExC,IAEE,GAAkB,IAAd9U,EAAGK,OAAc,CACnB,IAAIgV,EAAMrV,EAAG+T,GAEb,OAAIsB,GAA2B,oBAAbA,EAAIC,KACbD,EAAIC,MACX,SAAUpV,GACR,OAAOqV,YAAW,WAChB,OAAOT,EAAG,KAAM5U,EAClB,GACF,IACA,SAAU2M,GACR0I,YAAW,WAET,OADAJ,EAAgBtI,GACTiI,EAAG,MAAM,EAClB,GACF,IAGKA,EAAG,KAAMO,EAClB,CAGArV,EAAG+T,GAAO,SAAUlH,EAAKvL,GACvB,GAAIuL,EAEF,OADAsI,EAAgBtI,GACTiI,EAAG,MAGZA,EAAG,KAAMxT,EACX,GACF,CAAE,MAAO6J,GACPgK,EAAgBhK,GAChB2J,EAAG,KACL,CACF,EAEAD,GAAeK,EAAWE,EAAuBN,EACnD,EAEIU,GAA0B,SAAUN,EAAWO,EAAaC,EAAcrR,GAI5E,IAHA,IAAIsR,GAAS,EACTC,EAAMV,EAAUxK,SAEZiL,GACDC,EAAIvV,QAET,IACEsV,GAAoC,IAA3BC,EAAIhL,KAAJgL,CAAUH,EACrB,CAAE,MAAOtK,GACP9G,EAAOiF,MAAM,qBAAuBoM,EAAe,sCACnDrR,EAAOiF,MAAM6B,EACf,CAGF,OAAOwK,CACT,EAEIE,GAAW,SAAaC,EAAKC,GAC/B,IAAIvR,EAAI,YAAcsR,EACtB,OAAOtR,EAAEwR,OAAOxR,EAAEnE,OAAS0V,EAC7B,EAIIE,GAAwB,kBAAXvQ,OAAsBA,OAASwQ,KAC5CC,GAAc,EAElB,IAAK,IAAI9U,MAAQ4U,GACXpV,OAAOU,eAAeP,KAAKiV,GAAK5U,KAAO8U,KAG7C,IAAIC,GAAkBC,UAAUC,UAAYD,UAAUC,UAAUjW,OAAS,EACrEkW,GAAWV,IAAUO,GAAkBC,UAAUG,UAAUnW,QAAQU,SAAS,IAAMoV,GAAYpV,SAAS,IAAK,GAE5G0V,GAAmB,WACrB,OAAOF,EACT,EAiBIG,GAAI,EACJC,GAAY,EACZC,GAAO,GACPC,GAAiBC,KAAKC,IAAIH,GAAMD,IAEpC,SAASK,KACP,OAAOnB,IAAUiB,KAAKG,SAAWJ,IAAkB,GAAG9V,SAAS6V,IAAOD,GACxE,CAEA,SAASO,KAIP,OAHAR,GAAIA,GAAIG,GAAiBH,GAAI,IAC7BA,GAEW,CACb,CAEA,SAASS,KAiBP,MAda,KAKD,IAAI3Q,MAAO4Q,UAAUrW,SAAS6V,IAEhCf,GAASqB,KAAcnW,SAAS6V,IAAOD,IAIzCF,MAECO,KAAgBA,KAE3B,CAEAG,GAAKE,YAAcZ,GACnB,IAAIa,GAAYH,GA+CZI,GA3CuB,WACzB,SAASC,IACPhS,KAAKgN,GAAK8E,KACV9R,KAAKiS,UAAY,IAAIjR,KACrBhB,KAAKkS,SAAW,EAChBlS,KAAKmS,WAAa,EAClBnS,KAAKgM,MAAQ,CAAC,EACdhM,KAAKwL,IAAM,CAAC,EACZxL,KAAKyL,OAAS,CAAC,CACjB,CAEA,IAAIY,EAAS2F,EAAQ1W,UA6BrB,OA3BA+Q,EAAOS,QAAU,WACf,OAAO9M,KAAKgM,KACd,EAEAK,EAAOU,QAAU,SAAiBC,EAAIC,EAAO1N,GAC3CS,KAAKgM,MAAQ,CACXgB,GAAIA,EACJC,MAAOA,EACP1N,KAAMA,EAEV,EAEA8M,EAAOpL,OAAS,WACd,MAAO,CACL+L,GAAIhN,KAAKgN,GACTiF,UAAWjS,KAAKiS,UAChBG,OAAQ,CACNC,QAASrS,KAAKkS,SACd3G,UAAWvL,KAAKmS,YAGtB,EAEA9F,EAAOiG,OAAS,SAAgB/D,GAC9BvO,KAAKuO,EAAMlD,cAAcE,UAAY,aAAe,aAAe,CACrE,EAEOyG,CACT,CAzC2B,GAyEvBO,GAAUjJ,EAAyBd,IACnCgK,GAAYlJ,EAAyBH,MACrCsJ,GAAYnJ,EAAyBT,MAErC6J,GAAO,WAAa,EAEpBC,GAAsB,WACxB,SAASA,EAAOC,EAAe9V,EAAQ+V,EAAiBC,GACtD,IAAIC,EAAQ/S,UAEG,IAAXlD,IACFA,EAASJ,EAAWI,aAGE,IAApB+V,IACFA,EAAkB,IAIpB7S,KAAKgT,UAAYF,EAEjB9S,KAAKiT,QAAU,CAAC,EAChBjT,KAAKkT,QAAUpW,EAEfkD,KAAKmT,UAAY,CACfC,YAAaV,GACbW,UAAWX,IAEb1S,KAAKsT,QAAU,CACbhT,MAAOoS,GACPa,KAAMb,GACNxD,KAAMwD,GACN5O,MAAO4O,IAGT1S,KAAKwT,SAAW,CAAC,EAEjBxT,KAAKyT,aAAe,GACpBzT,KAAKiM,SAAW,KAChBjM,KAAK6L,UAAY,CAAC,EAClB7L,KAAK+L,eAAiB,CAAC,EACvB/L,KAAK8L,UAAY,GACjB9L,KAAK0T,cAAWtW,EAChB4C,KAAKgM,MAAQ,CAAC,EAQdhM,KAAK2T,KAAO,CACVhO,EAAG,GACH3G,EAAG,GACH4U,GAAI,GACJC,EAAG,IAGL7T,KAAK2S,OAASA,EACd3S,KAAK8K,MAAQsE,GACbpP,KAAKa,WAAaD,EAClBZ,KAAKgS,QAAUD,GACf/R,KAAKiT,QAAUjT,KAAK8T,WAAWlB,EAAeC,GAC9CjT,EAASiT,EAAgB7X,OAAOgF,KAAKiT,QAAQ/T,UAAU,SAAU6U,GAC3DA,GAAIhB,EAAMiB,YAAYD,EAC5B,IAIA/T,KAAKiU,OAAS,EACd,IAAIvD,EAAO1Q,KACPhC,EAASgC,KAAKhC,OAElBgC,KAAKhC,OAAS,WACZ,OAAOA,EAAO+B,MAAM2Q,EAAMhR,UAC5B,CACF,CAEA,IAAI2M,EAASsG,EAAOrX,UA+TpB,OA7TA+Q,EAAOC,YAAc,SAAqB1C,EAASC,EAAUC,GAC3D,OAAOI,EAAsB1B,IAAIxI,KAAK6L,UAAWjC,EAASC,EAAUC,EACtE,EAEAuC,EAAOE,YAAc,SAAqB3C,EAASjL,GACjD,OAAOuL,EAAsBC,IAAInK,KAAK6L,UAAWjC,EAASjL,EAC5D,EAEA0N,EAAOG,cAAgB,SAAuB5C,EAASjL,GACrD,OAAOuL,EAAsBf,MAAMnJ,KAAK6L,UAAWjC,EAASjL,EAC9D,EAEA0N,EAAOI,eAAiB,SAAwBlN,EAAMoJ,QACpC,IAAZA,IACFA,EAAU,MAGZ4J,GAAQvS,KAAK8L,UAAW9L,KAAK+L,eAAgBxM,EAAMoJ,EACrD,EAEA0D,EAAOK,gBAAkB,SAAyBrN,GAChDoT,GAAUzS,KAAK8L,UAAWzM,EAAcW,KAAK+L,eAC/C,EAEAM,EAAOO,iBAAmB,SAA0BrN,GAClDiT,GAAUxS,KAAK8L,UAAW9L,KAAK+L,eAAgBxM,EACjD,EAEA8M,EAAOQ,kBAAoB,WACzB7M,KAAK8L,UAAY,GACjB9L,KAAK+L,eAAiB,CAAC,CACzB,EAEAM,EAAO6H,WAAa,WAClB,OAAOlU,KAAK0T,QACd,EAEArH,EAAO8H,WAAa,SAAoBjD,GACtClR,KAAK0T,SAAWxC,CAClB,EAEA7E,EAAOyH,WAAa,SAAoBrN,EAAMoM,GAC5C,IAAI/V,EAASxC,EAAYuY,GAAiB,SAAU/V,EAAQsX,GAC1D,OAAIA,GAAUA,EAAOC,aAAqB7U,EAAY,CAAC,EAAG1C,EAAQsX,EAAOC,cAClEvX,CACT,GAAGkD,KAAKkT,SAEJoB,EAAUha,EAAYsB,EAAUkB,IAAS,SAAUrC,EAAOkE,GAC5D,IAAI3B,EAAeF,EAAO6B,GAAK3B,aAAayJ,EAAK9H,IAmBjD,YAjBkBvB,IAAdqJ,EAAK9H,GACK7B,EAAO6B,GAAKzB,SAASuJ,EAAK9H,IAMhC7B,EAAO6B,GAAKnB,mBACd/C,EAAM8Z,OAAO5V,GAAOa,EAAYxC,EAAcyJ,EAAK9H,IAEnDlE,EAAM8Z,OAAO5V,GAAO8H,EAAK9H,IAN3BlE,EAAMyR,OAAOvN,GAAO7B,EAAO6B,GAAK1B,QAChCxC,EAAM8Z,OAAO5V,GAAO3B,GAStBvC,EAAM8Z,OAAO5V,GAAO3B,EAGfvC,CACT,GAAG,CACDyR,OAAQ,CAAC,EACTqI,OAAQ,CAAC,IAEPrI,EAASoI,EAAQpI,OACjBqI,EAASD,EAAQC,OAErB,GAAIzX,EAAOC,OAAQ,CAEjB,IAAKwX,EAAOxX,OAAQ,MAAM,IAAIsH,MAAM,0BAE/B,kBAAkBpF,KAAKsV,EAAOxX,UAASmP,EAAOnP,OAAS,kDAC9D,CAiBA,OAdAiD,KAAK6L,UAAYrM,EAAY,CAAC,EAAG+U,EAAO3V,UACxC6T,GAAUzS,KAAK8L,UAAWyI,EAAOlV,aAAcW,KAAK+L,gBACpD/L,KAAKgM,MAAQxM,EAAY,CAAC,EAAG+U,EAAO7V,MACpCsB,KAAK0T,SAAWa,EAAO9V,QACnB8V,EAAO1V,SAAQmB,KAAKsT,QAAUiB,EAAO1V,QAErC0V,EAAO3W,UAASoC,KAAK2T,KAAKhO,EAAI3F,KAAK2T,KAAKhO,EAAE3K,OAAOuZ,EAAO3W,UACxD2W,EAAOzW,eAAckC,KAAK2T,KAAKE,EAAI7T,KAAK2T,KAAKE,EAAE7Y,OAAOuZ,EAAOzW,eAC7DyW,EAAO1W,YAAWmC,KAAK2T,KAAK3U,EAAIgB,KAAK2T,KAAK3U,EAAEhE,OAAOuZ,EAAO1W,YAE1DjC,EAAUsQ,GAAQrR,QACpBmF,KAAKsT,QAAQpE,KAAKsF,GAA2BtI,EAAQzF,IAGhD8N,CACT,EAEAlI,EAAOS,QAAU,WACf,OAAO9M,KAAKgM,KACd,EAEAK,EAAOU,QAAU,SAAiBC,EAAIC,EAAO1N,GAC3CS,KAAKgM,MAAQ,CACXgB,GAAIA,EACJC,MAAOA,EACP1N,KAAMA,EAEV,EAEA8M,EAAO2H,YAAc,SAAqBI,GACxC,IAAItY,EAASsY,EAAOhV,KAAKY,MAMzB,OADIoU,EAAO7U,OAAMS,KAAKwT,SAAS,IAAMY,EAAO7U,KAAO,KAAOzD,GACnDkE,IACT,EAEAqM,EAAOoI,UAAY,SAAmBlV,GACpC,OAAOS,KAAKwT,SAAS,IAAMjU,EAAO,IACpC,EAEA8M,EAAOqI,aAAe,SAAsBC,GAC1C3U,KAAKmT,UAAYwB,EAAE3U,KACrB,EAEAqM,EAAOuI,aAAe,WACpB,IAAItH,EAAU,IAAIyE,GAQlB,OAPAzE,EAAQ9B,IAAIpN,aAAe4B,KAAKiT,QAAQ7U,aACxCkP,EAAQ9B,IAAIqJ,QAAU7U,KAAKiT,QAAQ9V,WACnCmQ,EAAQ9B,IAAI1K,KAAOd,KAAKiT,QAAQ5V,QAChCiQ,EAAQtB,MAAQxM,EAAY,CAAC,EAAGQ,KAAKgM,OAExBgE,GAAwBhQ,KAAK2T,KAAK3U,EAAGsO,EAAS,YAAatN,KAAKsT,UAG3EtT,KAAKsT,QAAQhT,MAAM,iDAEZN,MAGFA,KAAK8U,iBAAiBF,aAAa5U,KAAMsN,EAClD,EAEAjB,EAAO0I,WAAa,SAAoBva,EAAIwa,QAC5B,IAAVA,IACFA,GAAQ,GAGVhV,KAAK2T,KAAKhO,EAAEqP,EAAQ,UAAY,QAAQxa,EAC1C,EAEA6R,EAAO4I,cAAgB,SAAuBza,GAC5CwF,KAAK2T,KAAKhO,EAAI7K,EAAYkF,KAAK2T,KAAKhO,GAAG,SAAUnJ,GAC/C,OAAOA,IAAMhC,CACf,GACF,EAEA6R,EAAO6I,qBAAuB,SAA8B1a,GAC1DwF,KAAK2T,KAAKC,GAAG5X,KAAKxB,EACpB,EAEA6R,EAAO8I,aAAe,SAAsB3a,GAC1CwF,KAAK2T,KAAK3U,EAAEhD,KAAKxB,EACnB,EAEA6R,EAAO+I,gBAAkB,SAAyB5a,GAChDwF,KAAK2T,KAAK3U,EAAIlE,EAAYkF,KAAK2T,KAAK3U,GAAG,SAAUxC,GAC/C,OAAOA,IAAMhC,CACf,GACF,EAEA6R,EAAOgJ,gBAAkB,SAAyB7a,EAAIwa,QACtC,IAAVA,IACFA,GAAQ,GAGVhV,KAAK2T,KAAKE,EAAEmB,EAAQ,UAAY,QAAQxa,EAC1C,EAEA6R,EAAOiJ,mBAAqB,SAA4B9a,GACtDwF,KAAK2T,KAAKE,EAAI/Y,EAAYkF,KAAK2T,KAAKE,GAAG,SAAUrX,GAC/C,OAAOA,IAAMhC,CACf,GACF,EAEA6R,EAAOkJ,aAAe,WACpB,OAAOvV,KAAK8U,iBAAiBS,aAAavV,KAC5C,EAEAqM,EAAOmJ,cAAgB,WACrB,OAAOxV,KAAK8U,iBAAiBU,cAAcxV,KAC7C,EAEAqM,EAAOoJ,gBAAkB,SAAyBxY,EAAS2B,EAAUkC,GAMnE,GAJA7D,EAA6B,kBAAZA,EAAuBA,EAAU,GAClD6D,EAAuB,kBAATA,GAAqB7F,EAAcZ,EAAqByG,GAAQA,EAAO,SACrFlC,EAA+B,kBAAbA,GAAsC,OAAbA,EAAoBA,EAAW,CAAC,EAEtE3B,EAAL,CACA,IAAIyY,EAAQ,IAAI9U,EAAe3D,EAAS2B,EAAUkC,GAErCkP,GAAwBhQ,KAAK2T,KAAKE,EAAG6B,EAAO,eAAgB1V,KAAKsT,SAG5EtT,KAAKsT,QAAQhT,MAAM,yDAMrBN,KAAKyT,aAAazX,KAAK0Z,GAEnB1V,KAAKyT,aAAa5Y,OAASmF,KAAKiT,QAAQ5U,iBAC1C2B,KAAKyT,aAAezT,KAAKyT,aAAavO,MAAMlF,KAAKyT,aAAa5Y,OAASmF,KAAKiT,QAAQ5U,iBAflE,CAiBtB,EAEAgO,EAAOsJ,yBAA2B,SAAkC7U,GAClE,IAAI8U,EAAQ5V,KAAKiT,QAAQ3U,uBACzB,OAAiB,OAAVsX,GAAkB3a,EAAc2a,EAAO9U,EAChD,EAEAuL,EAAOrO,OAAS,SAAgBoQ,EAAYxQ,EAASiY,QACxB,IAAvBA,IACFA,EAAqBnD,IAGvB,IAAInE,EAAQa,GAAUjB,OAAOC,GAAY,OAAMhR,EAAW,WAAY4C,KAAKiU,OAAS,EAAGjU,KAAKsT,SAE5FtT,KAAK8V,QAAQvH,EAAO3Q,EAASiY,EAC/B,EAEAxJ,EAAOyJ,QAAU,SAAiBvH,EAAO3Q,EAASiY,GAChD,IAAIE,EAAS/V,KAiBb,QAf2B,IAAvB6V,IACFA,EAAqBnD,IAGvBnE,EAAM/C,IAAMhM,EAAY,CAAC,EAAG+O,EAAM/C,IAAK,CACrCpN,aAAc4B,KAAKiT,QAAQ7U,aAC3ByW,QAAS7U,KAAKiT,QAAQ9V,WACtB2D,KAAMd,KAAKiT,QAAQ5V,UAErBkR,EAAM9P,QAAU8P,EAAM9P,SAAWuB,KAAK0T,SACtCnF,EAAM1C,UAAYrM,EAAY,CAAC,EAAG+O,EAAM1C,UAAW7L,KAAK6L,WACxD0C,EAAMvC,MAAQxM,EAAY,CAAC,EAAG+O,EAAMvC,MAAOhM,KAAKgM,OAChDuC,EAAM5C,YAAc3L,KAAKyT,aAAavO,QACtCuN,GAAUlE,EAAMzC,UAAW9L,KAAK8L,UAAWyC,EAAMxC,gBAEP,OAAtC/L,KAAKiT,QAAQ9U,uBAAkClD,EAAc+E,KAAKiT,QAAQ9U,qBAAsB6B,KAAKiT,QAAQ7U,cAG/G,OAFA4B,KAAKsT,QAAQpE,KAAK,yEAEX2G,EAAmB,KAAMtH,GAGlC,IAAIyH,EAAmBzH,EAAMjD,SAEzBqE,EAAkB,SAAUtI,GAE9B0O,EAAOzC,QAAQxP,MAAM,+DAErBiS,EAAOzC,QAAQxP,MAAMuD,EACvB,EAEIqI,EAAY,GAAG1U,OAAOgF,KAAK2T,KAAKhO,GAAG3K,OAAO4C,GAC9C6R,GAAmBC,EAAWnB,EAAOoB,GAAiB,SAAUtI,EAAK4O,GAGnE,GAFI5O,GAAKsI,EAAgBtI,IAEpB4O,EAGH,OAFAF,EAAOzC,QAAQhT,MAAM,0CAEduV,EAAmB,KAAMtH,GAG9BwH,EAAOJ,yBAAyB,UAElChD,EAAOrX,UAAUma,gBAAgBja,KAAKua,EAAQxH,EAAMrC,OAAO,GAAGnB,WAAY,CACxEA,WAAYwD,EAAMrC,OAAO,GAAGnB,WAC5BC,aAAcuD,EAAMrC,OAAO,GAAGlB,aAC9BM,SAAUiD,EAAMjD,UACf,SAGD0K,IAAqBzH,EAAMjD,WAC7BiD,EAAMlD,cAAcgC,eAAiB,CACnCvM,KAAM,4BAINyN,EAAMhD,YAAcgD,EAAMlD,cAAcE,YAC1CgD,EAAMlD,cAAcgC,eAAe6I,qBAAsB,EACzD3H,EAAMlD,cAAcE,UAAYgD,EAAMhD,WAGpCwK,EAAO9J,WACT8J,EAAO9J,SAASqG,OAAO/D,GAEvBA,EAAMtC,SAAW8J,EAAO9J,UAG1B8J,EAAO5C,UAAUE,UAAU,CACzBtW,OAAQwR,EAAMxR,QAAUgZ,EAAO9C,QAAQlW,OACvC+V,SAAUiD,EAAO/C,UACjBZ,OAAQ,CAAC7D,KACR,SAAUlH,GACX,OAAOwO,EAAmBxO,EAAKkH,EACjC,GACF,GACF,EAEOoE,CACT,CAxY0B,GA0YtB6B,GAA6B,SAAUtI,EAAQiK,GAIjD,OAHS,IAAI9R,MAAM,0BAA4BzE,EAAShE,EAAUsQ,IAAS,SAAUvN,GACnF,MAAO,OAASA,EAAM,IAAMuN,EAAOvN,GAAO,SAAWiI,GAAUuP,EAASxX,GAC1E,IAAGJ,KAAK,QAEV,EAEIqI,GAAY,SAAUlM,GACxB,cAAeA,GACb,IAAK,SACL,IAAK,SACL,IAAK,SACH,OAAOiM,KAAKC,UAAUlM,GAExB,QACE,OAAO6I,OAAO7I,GAEpB,EAEI0b,GAAazD,GAEb0D,GAAmB,CAAC,EAGpBC,GAAwB,CAAC,qBAAsB,oCAAqC,qBAExFD,GAAiB9H,MAAQ,SAAUA,EAAOxP,GACxC,IAAIwX,EAAUlQ,EAAuBkI,EAAO,KAAM,KAAM,CACtD7H,cAAe4P,GACfvX,aAAcA,IAahB,OAVIwX,EAAQ1b,OAAS,MACnB0T,EAAM6D,OAAO,GAAGvG,UAAY,CAC1BiH,SAAU,oCAAsCyD,EAAQ1b,OAAS,IAAO,0CAE1E0b,EAAUlQ,EAAuBkI,EAAO,KAAM,KAAM,CAClD7H,cAAe4P,GACfvX,aAAcA,KAIXwX,CACT,EAEAF,GAAiB/I,QAAU,SAAUA,EAASvO,GAE5C,OADcsH,EAAuBiH,EAAS,KAAM,KAEtD,EAEA,IAAIkJ,GAAgB,CAAC,EAGrBA,GAAgB,SAAUC,EAAQC,GAKhC,YAJY,IAARA,IACFA,EAAMxW,QAGD,CACLmT,UAAW,SAAU9E,EAAOe,QACf,IAAPA,IACFA,EAAK,WAAa,GAGpB,IAAIqH,EAAMC,GAAUH,EAAOxD,QAAS,SAAU,IAAKyD,GAC/CG,EAAOR,GAAiB9H,MAAMA,EAAOkI,EAAOxD,QAAQlU,cACpD+X,EAAM,IAAIJ,EAAIK,eAElBD,EAAIE,OAAS,WACX1H,EAAG,KACL,EAEAwH,EAAIG,QAAU,WACZ,IAAI5P,EAAM,IAAIhD,MAAM,wBAEpBoS,EAAOnD,QAAQxP,MAAM,6BAAyBuD,GAE1CwP,EAAKhc,OAAS,KAChB4b,EAAOnD,QAAQpE,KAAK,qBAAuB2H,EAAKhc,OAAS,KAAMqc,QAAQ,GAAK,QAG9E5H,EAAGjI,EACL,EAEAyP,EAAIK,KAAK,OAAQR,GACjB5G,YAAW,WACT,IACE+G,EAAIM,KAAKP,EACX,CAAE,MAAOlR,GACP8Q,EAAOnD,QAAQxP,MAAM6B,GAErB2J,EAAG3J,EACL,CACF,GAAG,EACL,EACAyN,YAAa,SAAU9F,EAASgC,QACnB,IAAPA,IACFA,EAAK,WAAa,GAGpB,IAAIqH,EAAMC,GAAUH,EAAOxD,QAAS,WAAY,IAAKyD,GACjDI,EAAM,IAAIJ,EAAIK,eAElBD,EAAIE,OAAS,WACX1H,EAAG,KACL,EAEAwH,EAAIK,KAAK,OAAQR,GACjB5G,YAAW,WACT,IACE+G,EAAIM,KAAKf,GAAiB/I,QAAQA,EAASmJ,EAAOxD,QAAQlU,cAC5D,CAAE,MAAO4G,GACP8Q,EAAOnD,QAAQxP,MAAM6B,GAErB2J,EAAG3J,EACL,CACF,GAAG,EACL,EAEJ,EAEA,IAAIiR,GAAY,SAAUrC,EAAQ8C,EAAUxC,EAAS6B,GAInD,IAAIY,EAAU3Q,KAAK9C,MAAM8C,KAAKC,UAAU,IAAI5F,OAE5C,OADUuW,GAAkBhD,EAAOxW,UAAUsZ,GAAWX,EAAIvW,SAASqX,UACxD,WAAaC,mBAAmBlD,EAAOxX,QAAU,mBAAqB8X,EAAU,WAAa4C,mBAAmBH,EAC/H,EAEIC,GAAoBf,GAAckB,mBAAqB,SAAUL,EAAUM,GAC7E,MAAwB,UAAjBA,EAA2BN,EAAS1S,QAAQ,UAAW,SAAW0S,CAC3E,EAIIO,GAAgB,SAAUnB,EAAQC,GAKpC,YAJY,IAARA,IACFA,EAAMxW,QAGD,CACLmT,UAAW,SAAU9E,EAAOe,QACf,IAAPA,IACFA,EAAK,WAAa,GAGpB,IACE,IAAIqH,EAAMF,EAAOxD,QAAQlV,UAAUC,OAC/B8Y,EAAM,IAAIJ,EAAImB,eACdhB,EAAOR,GAAiB9H,MAAMA,EAAOkI,EAAOxD,QAAQlU,cAExD+X,EAAIgB,mBAAqB,WACvB,GAAIhB,EAAIiB,aAAerB,EAAImB,eAAeG,KAAM,CAC9C,IAAIC,EAASnB,EAAImB,OAEjB,GAAe,IAAXA,GAAgBA,GAAU,IAAK,CACjC,IAAI5Q,EAAM,IAAIhD,MAAM,8BAAgC4T,GAEpDxB,EAAOnD,QAAQxP,MAAM,6BAAyBuD,GAE1CwP,EAAKhc,OAAS,KAChB4b,EAAOnD,QAAQpE,KAAK,qBAAuB2H,EAAKhc,OAAS,KAAMqc,QAAQ,GAAK,QAG9E5H,EAAGjI,EACL,MACEiI,EAAG,KAEP,CACF,EAEAwH,EAAIK,KAAK,OAAQR,GACjBG,EAAIoB,iBAAiB,eAAgB,oBACrCpB,EAAIoB,iBAAiB,kBAAmB3J,EAAMxR,QAAU0Z,EAAOxD,QAAQlW,QACvE+Z,EAAIoB,iBAAiB,0BAA2B,KAChDpB,EAAIoB,iBAAiB,mBAAmB,IAAIlX,MAAOmX,eACnDrB,EAAIM,KAAKP,EACX,CAAE,MAAOlR,GACP8Q,EAAOnD,QAAQxP,MAAM6B,EACvB,CACF,EACAyN,YAAa,SAAU9F,EAASgC,QACnB,IAAPA,IACFA,EAAK,WAAa,GAGpB,IACE,IAAIqH,EAAMF,EAAOxD,QAAQlV,UAAUE,SAC/B6Y,EAAM,IAAIJ,EAAImB,eAElBf,EAAIgB,mBAAqB,WACvB,GAAIhB,EAAIiB,aAAerB,EAAImB,eAAeG,KAAM,CAC9C,IAAIC,EAASnB,EAAImB,OAEjB,GAAe,IAAXA,GAAgBA,GAAU,IAAK,CACjC,IAAI5Q,EAAM,IAAIhD,MAAM,8BAAgC4T,GAEpDxB,EAAOnD,QAAQxP,MAAM,+BAA2BuD,GAEhDiI,EAAGjI,EACL,MACEiI,EAAG,KAEP,CACF,EAEAwH,EAAIK,KAAK,OAAQR,GACjBG,EAAIoB,iBAAiB,eAAgB,oBACrCpB,EAAIoB,iBAAiB,kBAAmBzB,EAAOxD,QAAQlW,QACvD+Z,EAAIoB,iBAAiB,0BAA2B,KAChDpB,EAAIoB,iBAAiB,mBAAmB,IAAIlX,MAAOmX,eACnDrB,EAAIM,KAAKf,GAAiB/I,QAAQA,EAASmJ,EAAOxD,QAAQlU,cAC5D,CAAE,MAAO4G,GACP8Q,EAAOnD,QAAQxP,MAAM6B,EACvB,CACF,EAEJ,EAEIyS,GAAW,IAAIpX,KAEfqX,GAAQ,WACVD,GAAW,IAAIpX,IACjB,EAEIsX,GAAW,CACb/Y,KAAM,cACNH,KAAM,SAAUqX,GAKd,OAJAA,EAAO1B,YAAW,SAAUxG,GAC1B,IAAIgK,EAAM,IAAIvX,KACduN,EAAM/C,IAAIgN,SAAWD,EAAMH,EAC7B,IAAG,GACI,CACLC,MAAOA,GAEX,GAMEI,GAAe,SAAU/B,GAK3B,YAJY,IAARA,IACFA,EAAMxW,QAGD,CACLd,KAAM,SAAUqX,GACdA,EAAO1B,YAAW,SAAUxG,QACJnR,IAAlBmR,EAAM9P,UACV8P,EAAM9P,QAAUiY,EAAIvW,SAASuY,SAC/B,IAAG,EACL,EAEJ,EAEIC,GAAW,SAAarI,EAAKC,GAC/B,IAAIvR,EAAI,YAAcsR,EACtB,OAAOtR,EAAEwR,OAAOxR,EAAEnE,OAAS0V,EAC7B,EAIIqI,GAA6B,kBAAX1Y,OAAsBA,OAASwQ,KACjDmI,GAAmB,EAEvB,IAAK,IAAIC,MAAaF,GAChBvd,OAAOU,eAAeP,KAAKod,GAAUE,KAAYD,KAGvD,IAAIE,GAAuBlI,UAAUC,UAAYD,UAAUC,UAAUjW,OAAS,EAC1Eme,GAAgBL,IAAUI,GAAuBlI,UAAUG,UAAUnW,QAAQU,SAAS,IAAMsd,GAAiBtd,SAAS,IAAK,GAE3H0d,GAAmB,WACrB,OAAOD,EACT,EAiBIE,GAAS,EACTC,GAAiB,EACjBC,GAAY,GACZC,GAAsB/H,KAAKC,IAAI6H,GAAWD,IAE9C,SAASG,KACP,OAAOX,IAAUrH,KAAKG,SAAW4H,IAAuB,GAAG9d,SAAS6d,IAAYD,GAClF,CAEA,SAASI,KAIP,OAHAL,GAASA,GAASG,GAAsBH,GAAS,IACjDA,GAEgB,CAClB,CAEA,SAASM,KAiBP,MAda,KAKD,IAAIxY,MAAO4Q,UAAUrW,SAAS6d,IAEhCT,GAASY,KAAmBhe,SAAS6d,IAAYD,IAInDF,MAECK,KAAqBA,KAEhC,CAEAE,GAAU3H,YAAcoH,GACxB,IAAIQ,GAAYD,GAIZE,GAA2B,uBAE3BC,GAAc,SAAUjD,GAC1B,IACE,IAAIkD,EAAUlD,EAAImD,aACd7M,EAAK4M,EAAQE,QAAQJ,IAGzB,OAAI1M,GAAM,qBAAqB/N,KAAK+N,KAMpCA,EAAKyM,KACLG,EAAQG,QAAQL,GAA0B1M,IANjCA,CAQX,CAAE,MAAO3F,GACT,CACF,EAMI2S,GAAc,SAAUC,EAAKvD,GAS/B,YARY,IAARuD,IACFA,EAAMpJ,gBAGI,IAAR6F,IACFA,EAAMxW,QAGD,CACLd,KAAM,SAAUqX,GACd,IAAIhL,EAAS,CACXyO,OAAQD,EAAIE,iBAAmBF,EAAIG,gBAAkBH,EAAII,cAAgBJ,EAAIK,SAC7EtJ,UAAWiJ,EAAIjJ,WAGb0F,GAAOA,EAAI6D,QAAU7D,EAAI6D,OAAOC,aAAe9D,EAAI6D,OAAOC,YAAY1Z,KACxE2K,EAAO+O,YAAc9D,EAAI6D,OAAOC,YAAY1Z,KACnC4V,GAAOA,EAAI+D,WACpBhP,EAAO+O,YAAc9D,EAAI+D,SAASC,gBAAgBC,YAAcjE,EAAI+D,SAASC,gBAAgBE,aAAe,YAAc,YAGxHnE,EAAOxD,QAAQ4H,sBACjBpP,EAAOuB,GAAK2M,GAAYjD,IAG1BD,EAAOtB,cAAa,SAAU7H,GAC5BA,EAAQ7B,OAASjM,EAAY,CAAC,EAAG8N,EAAQ7B,OAAQA,GAE5CgL,EAAOxD,QAAQ6H,eAAeC,GAAiBzN,EACtD,IAEAmJ,EAAO1B,YAAW,SAAUxG,GAC1BA,EAAM9C,OAASjM,EAAY,CAAC,EAAG+O,EAAM9C,OAAQA,EAAQ,CACnDuP,KAAM,IAAIha,OAEPyV,EAAOxD,QAAQ6H,eAAeC,GAAiBxM,EACtD,IAAG,EACL,EACA8F,aAAc,CACZwG,oBAAqB,CACnB3d,SAAU,SAAUb,GAClB,OAAiB,IAAVA,IAA4B,IAAVA,CAC3B,EACAW,aAAc,WACZ,OAAO,CACT,EACAC,QAAS,yBAIjB,EAEI8d,GAAmB,SAAUE,GAE/B,IAAIvc,EAAOuc,EAAenO,UAErBpO,GAASA,EAAKsO,IACjBiO,EAAelO,QAAQkO,EAAexP,OAAOuB,GAEjD,EAQIkO,GAAe,SAAUxE,GAK3B,YAJY,IAARA,IACFA,EAAMxW,QAGD,CACLd,KAAM,SAAUqX,GACdA,EAAO1B,YAAW,SAAUxG,GACtBA,EAAM7C,SAAW6C,EAAM7C,QAAQiL,MACnCpI,EAAM7C,QAAUlM,EAAY,CAAC,EAAG+O,EAAM7C,QAAS,CAC7CiL,IAAKD,EAAIvW,SAASgb,OAEtB,IAAG,EACL,EAEJ,EAIIC,GAAe,CACjBhc,KAAM,SAAUqX,GACdA,EAAO3B,iBAAmBuG,EAC5B,GAEEA,GAAkB,CACpBzG,aAAc,SAAU6B,EAAQnJ,GAC9B,IAAIgO,EAAgB7E,EAIpB,OAHA6E,EAAcrP,SAAWqB,EACzBgO,EAAcC,eAAiB,KAEoB,OAA/CD,EAAcrI,QAAQ9U,sBAAkClD,EAAcqgB,EAAcrI,QAAQ9U,qBAAsBmd,EAAcrI,QAAQ7U,eAM5Ikd,EAAcnI,UAAUC,YAAY,CAClCN,SAAUwI,EAActI,UACxBvH,OAAQ6B,EAAQ7B,OAChBD,IAAK8B,EAAQ9B,IACbvN,SAAU,CAAC,CACT+O,GAAIM,EAAQN,GACZiF,UAAW3E,EAAQ2E,UACnBvT,KAAM4O,EAAQtB,UAIXsP,IAhBLA,EAAchI,QAAQpE,KAAK,2EAEpBoM,EAeX,EACA9F,cAAe,SAAUiB,GAEvB,OAAIA,EAAOxK,SACFwK,EAILA,EAAO8E,gBACT9E,EAAOxK,SAAWwK,EAAO8E,eACzB9E,EAAO8E,eAAiB,KACjB9E,GAIFA,EAAO7B,cAChB,EACAW,aAAc,SAAUkB,GACtBA,EAAO8E,eAAiB9E,EAAOxK,SAC/BwK,EAAOxK,SAAW,IACpB,GASEuP,GAAgB,CAClBpc,KAAM,SAAUqX,GACVA,EAAOxD,QAAQ6H,eACnBrE,EAAO1B,YAAW,SAAUxG,GAGtBA,EAAMvC,OAAmC,qBAAnBuC,EAAMvC,MAAMgB,WAA2BuB,EAAMvC,MAAMgB,GAC7EuB,EAAMvC,MAAQxM,EAAY,CACxBwN,GAAI,cACHuB,EAAMvC,OACTuC,EAAM7C,QAAUlM,EAAY,CAC1Bic,SAAU,cACTlN,EAAM7C,QACX,GACF,EACA2I,aAAc,CACZyG,cAAe,CACb9d,aAAc,WACZ,OAAO,CACT,EACAC,QAAS,uBACTC,SAAU,SAAUb,GAClB,OAAiB,IAAVA,IAA4B,IAAVA,CAC3B,KAKFqf,GAA0B,CAW9BA,KAA+B,SAAUjF,IAC3B,4BAA4BxX,KAAKwX,EAAOxD,QAAQ7U,eAC9CqY,EAAOd,yBAAyB,QAC9C/V,EAAS+b,IAAqB,SAAU7c,GACtC,IAAI8c,EAAWvb,QAAQvB,GAEvBuB,QAAQvB,GAAU,WAChB,IAAK,IAAI+c,EAAOnc,UAAU7E,OAAQ4H,EAAO,IAAIiI,MAAMmR,GAAOC,EAAO,EAAGA,EAAOD,EAAMC,IAC/ErZ,EAAKqZ,GAAQpc,UAAUoc,GAGzBrF,EAAOhB,gBAAgB,iBAAkBnb,EAAYmI,GAAM,SAAUhI,EAAOshB,EAAKphB,GAE/E,IAAIqhB,EAAc,kBAIlB,IACEA,EAAczY,OAAOwY,EACvB,CAAE,MAAOpW,GAAI,CAGb,GAAoB,oBAAhBqW,EAEF,IACEA,EAAcrV,KAAKC,UAAUmV,EAC/B,CAAE,MAAOpW,GAAI,CAIf,OADAlL,EAAM,IAAME,EAAI,KAAOqhB,EAChBvhB,CACT,GAAG,CACD6Q,SAAsC,IAA5BxM,EAAO0F,QAAQ,SAAiB,MAAQ1F,IAChD,OACJ8c,EAAS7b,MAAMM,QAASoC,EAC1B,EAEApC,QAAQvB,GAAQmd,SAAW,WACzB5b,QAAQvB,GAAU8c,CACpB,CACF,GACF,GAUID,GAAsB7gB,EAAY,CAAC,MAAO,QAAS,OAAQ,OAAQ,UAAU,SAAUgE,GACzF,MAA0B,qBAAZuB,SAAsD,oBAApBA,QAAQvB,EAC1D,IAQIod,GAAkB,IAClBC,GAAoB,IAEpBC,GAA2B,SAAUC,EAAK3F,GAS5C,YARY,IAAR2F,IACFA,EAAM5B,eAGI,IAAR/D,IACFA,EAAMxW,QAGD,CACLd,KAAM,SAAUqX,GACd,GAAKA,EAAOxD,QAAQqJ,mBAApB,CACA,IAAIC,EAAmB7F,EAAIvW,SAASgb,KAChCqB,EAAO,GAIPC,EADYJ,EAAIK,YACgC,aAAnBL,EAAItE,WAA+C,YAAnBsE,EAAItE,WAEjE4E,EAAU,WACZ,OAAON,EAAI3B,gBAAgBkC,SAC7B,EAGAJ,EAAOG,IACP,IAAIE,EAAOR,EAAIvE,mBAEfuE,EAAIvE,mBAAqB,WAEA,gBAAnBuE,EAAItE,aACNyE,EAAOG,IACPF,GAAmB,GAGrB,IACEI,EAAK9c,MAAMC,KAAMN,UACnB,CAAE,MAAOiG,GAAI,CACf,EAEA,IAAImX,EAAc,KAEdC,EAAmB,SAAUC,GAC/BF,EAAcE,CAChB,EAEIC,EAAmB,WACrB,IAAID,EAASX,EAAIa,eAAiBJ,EAElC,IAAKE,IAAWP,EAAkB,CAChC,IAAIU,EAAUd,EAAIc,SAAWd,EAAIe,qBAAqB,UACtDJ,EAASG,EAAQA,EAAQtiB,OAAS,EACpC,CAEA,OAAOmiB,CACT,EAEIK,EAAqB,SAAU9X,GAE5BkX,GAAqBD,IAAMA,EAAOG,KAEvC,IAAIW,EAAY,CAAC,4BAAsBtiB,OAAOwhB,EAAK5X,MAAM,OACrD2Y,EAAgBhY,EAAa,EAC7BiY,EAAQlM,KAAKnV,IAAIohB,EAAgB,EAAG,GACpCE,EAAMnM,KAAKpV,IAAIqhB,EAAgB,EAAGD,EAAUziB,QAChD,OAAOP,EAAYgjB,EAAUpY,MAAMsY,EAAOC,IAAM,SAAUhjB,EAAOqK,EAAMnK,GAErE,OADAF,EAAM+iB,EAAQ,EAAI7iB,GAAKmK,EAAKjK,QAAUqhB,GAAkBpX,EAAOA,EAAK0L,OAAO,EAAG0L,IACvEzhB,CACT,GAAG,CAAC,EACN,EAEAgc,EAAO1B,YAAW,SAAUxG,GAG1BA,EAAMrC,OAAO,GAAGnI,WAAajJ,EAAYyT,EAAMrC,OAAO,GAAGnI,YAAY,SAAUvH,GAC7E,OAAQ,aAAayC,KAAKzC,EAAEsC,OAC9B,IACA,IAAI0O,EAAQe,EAAMrC,OAAO,GAAGnI,WAAW,GAEnC2Z,EAAW,SAAU/G,GACvB,OAAOA,EAAIhS,QAAQ,OAAQ,IAAIA,QAAQ,QAAS,GAClD,EAGA,IAAI6I,IAASA,EAAMC,MAAQiQ,EAASlQ,EAAMC,QAAUiQ,EAASnB,GAA7D,CAEA,IAAIW,EAAgBD,IAEpB,GAAIC,EAAe,CACjB,IAAIS,EAAUT,EAAcU,UAC5BrP,EAAMjC,YAAY,SAAU,UAAWqR,EAAQ9iB,QAAUshB,GAAoBwB,EAAUA,EAAQnN,OAAO,EAAG2L,KAErG3O,GAASA,EAAMjI,aACjBiI,EAAMG,KAAO0P,EAAmB7P,EAAMjI,YAE1C,CAXsF,CAYxF,IAAG,GAGH,IAcIsY,EAdOje,EAAS,CAAC,aAAc,cAAe,eAAgB,0BAA0B,SAAUpF,GACpG,OAAOsjB,GAAQpH,EAAKlc,GAAI,SAAUohB,GAChC,OAAOmC,EAAsBnC,GAAU,SAAUnZ,GAC/C,MAAO,CACL0H,IAAK,WACH,OAAO1H,EAAK,EACd,EACAkC,QAAS,SAAUnK,GACjBiI,EAAK,GAAKjI,CACZ,EAEJ,GACF,GACF,IACuB,GAGvBoF,EAAS,CAAC,cAAe,SAAU,OAAQ,mBAAoB,iBAAkB,oBAAqB,kBAAmB,cAAe,aAAc,qBAAsB,cAAe,aAAc,iBAAkB,eAAgB,kBAAmB,cAAe,cAAe,eAAgB,qBAAsB,SAAU,YAAa,eAAgB,gBAAiB,YAAa,kBAAmB,SAAU,iBAAkB,4BAA6B,yBAAyB,SAAUuH,GAC/euP,EAAIvP,IAAOuP,EAAIvP,GAAG7L,WAAcD,OAAOC,UAAUS,eAAeP,KAAKkb,EAAIvP,GAAG7L,UAAW,sBAE5FwiB,GAAQpH,EAAIvP,GAAG7L,UAAW,oBAAoB,SAAUsgB,GACtD,OAAOmC,EAAsBnC,EAAUoC,GACzC,IAEAF,GAAQpH,EAAIvP,GAAG7L,UAAW,uBAAuB,SAAUsgB,GACzD,OAAOmC,EAAsBnC,EAAUoC,IAA6B,EACtE,IACF,GAlH8C,CAoH9C,SAASD,EAAsBvjB,EAAIyjB,EAAkBC,GAKnD,YAJyB,IAArBA,IACFA,GAAmB,GAGd,WAGL,IAAIzb,EAAO,GAAGyC,MAAM1J,KAAKkE,WAEzB,IACE,IAAIye,EAAMF,EAAiBxb,GACvB6M,EAAK6O,EAAIhU,MAEb,GADI+T,GAAkB1jB,EAAGuF,MAAMC,KAAMyC,GACnB,oBAAP6M,EAAmB,OAAO9U,EAAGuF,MAAMC,KAAMyC,GAEpD,GAAI6M,EAAG8O,UACLD,EAAIxZ,QAAQ2K,EAAG8O,eACV,CACL,IAAIpB,EAASC,IAIb3N,EAAG8O,UAAY,WAEbrB,EAAiBC,GAIjBa,GAAY,WACVd,EAAiB,KACnB,GAAG,GAEH,IAAIlN,EAAMP,EAAGvP,MAAMC,KAAMN,WAEzB,OADAqd,EAAiB,MACVlN,CACT,EAEAP,EAAG8O,UAAUA,UAAY9O,EAAG8O,UAC5BD,EAAIxZ,QAAQ2K,EAAG8O,UACjB,CACF,CAAE,MAAOzY,GAGT,CAGA,GAAInL,EAAGuF,MAAO,OAAOvF,EAAGuF,MAAMC,KAAMyC,GAEpC,OAAQA,EAAK5H,QACX,KAAK,EACH,OAAOL,EAAGiI,EAAK,IAEjB,KAAK,EACH,OAAOjI,EAAGiI,EAAK,GAAIA,EAAK,IAE1B,QACE,OAAOjI,IAEb,CACF,CACF,EACA6Z,aAAc,CACZiI,mBAAoB,CAClBpf,SAAU,SAAUb,GAClB,OAAiB,IAAVA,IAA4B,IAAVA,CAC3B,EACAW,aAAc,WACZ,OAAO,CACT,EACAC,QAAS,yBAIjB,EAEA,SAAS6gB,GAAQ1d,EAAMb,EAAMgH,GAC3B,IAAIqV,EAAWxb,EAAKb,GACpB,IAAKqc,EAAU,OAAOA,EACtB,IAAIyC,EAAc9X,EAASqV,GAE3B,OADAxb,EAAKb,GAAQ8e,EACNzC,CACT,CAEA,SAASoC,GAA4Bvb,GACnC,IAAI6b,IAAsB7b,EAAK,IAAqC,oBAAxBA,EAAK,GAAG8b,YACpD,MAAO,CACLpU,IAAK,WACH,OAAOmU,EAAoB7b,EAAK,GAAG8b,YAAc9b,EAAK,EACxD,EACAkC,QAAS,SAAUnK,GACb8jB,EACF7b,EAAK,GAAG8b,YAAc/jB,EAEtBiI,EAAK,GAAKjI,CAEd,EAEJ,CAKA,IAAIgkB,GAA8B,SAAU9H,GAK1C,YAJY,IAARA,IACFA,EAAMxW,QAGD,CACLd,KAAM,SAAUqX,GACR,qBAAsBC,GACvBD,EAAOd,yBAAyB,SACrCe,EAAI+H,iBAAiB,SAAS,SAAUlQ,GACtC,IAAImQ,EAAYC,EAEhB,IACED,EAAaE,GAAYrQ,EAAM9O,QAC/Bkf,EAAiBE,GAAgBtQ,EAAM9O,OAAQiX,EACjD,CAAE,MAAO/Q,GACP+Y,EAAa,WACbC,EAAiB,WAEjBlI,EAAOnD,QAAQxP,MAAM,uFACvB,CAEA2S,EAAOhB,gBAAgB,WAAY,CACjCiJ,WAAYA,EACZC,eAAgBA,GACf,OACL,IAAG,EACL,EAEJ,EAEIG,GAAY,OACZC,GAAU,gBAEd,SAASH,GAAYI,GACnB,IAAIC,EAAOD,EAAGE,aAAeF,EAAGG,WAAa,GAQ7C,OANKF,GAAqB,WAAZD,EAAGle,MAAiC,WAAZke,EAAGle,OACvCme,EAAOD,EAAG3iB,QAGZ4iB,EAAOA,EAAKta,QAAQma,GAAW,IAAIna,QAAQoa,GAAS,OAE3ClkB,OAAS,IACTokB,EAAK/Z,MAAM,EAAG,KAAO,QAGvB+Z,CACT,CAGA,SAASJ,GAAgBG,EAAItI,GAC3B,IAAIjS,EAAQ,CAACua,EAAGI,SAIhB,GAHIJ,EAAGhS,IAAIvI,EAAMzI,KAAK,IAAMgjB,EAAGhS,IAC3BgS,EAAGK,WAAaL,EAAGK,UAAUxkB,QAAQ4J,EAAMzI,KAAK,IAAMgjB,EAAGK,UAAUza,MAAM,KAAKrG,KAAK,OAElFmY,EAAI+D,SAAS6E,mBAAqB5U,MAAMpP,UAAUkJ,QAAS,OAAOC,EAAMlG,KAAK,IAElF,IACE,GAA6D,IAAzDmY,EAAI+D,SAAS6E,iBAAiB7a,EAAMlG,KAAK,KAAK1D,OAAc,OAAO4J,EAAMlG,KAAK,GACpF,CAAE,MAAOoH,GAEP,OAAOlB,EAAMlG,KAAK,GACpB,CAGA,GAAIygB,EAAGO,WAAWC,WAAW3kB,OAAS,EAAG,CACvC,IAAI0U,EAAQ7E,MAAMpP,UAAUkJ,QAAQhJ,KAAKwjB,EAAGO,WAAWC,WAAYR,GAAM,EACzEva,EAAMzI,KAAK,cAAgBuT,EAAQ,IACrC,CAEA,OAA6D,IAAzDmH,EAAI+D,SAAS6E,iBAAiB7a,EAAMlG,KAAK,KAAK1D,OAAqB4J,EAAMlG,KAAK,IAE9EygB,EAAGO,WAAmBV,GAAgBG,EAAGO,WAAY7I,GAAO,MAAQjS,EAAMlG,KAAK,IAC5EkG,EAAMlG,KAAK,GACpB,CAEA,IAAIkhB,GAA6B,CAAC,EAIlCA,GAA6B,SAAU/I,QACzB,IAARA,IACFA,EAAMxW,QAGR,IAAIkU,EAAS,CACXhV,KAAM,SAAUqX,GACd,GAAM,qBAAsBC,GACvBD,EAAOd,yBAAyB,cAArC,CAEA,IAAI+J,EAAO,SAAUngB,GACnB,OAAO,WACL,OAAOkX,EAAOhB,gBAAgBlW,EAAM,CAAC,EAAG,aAC1C,CACF,EAGAmX,EAAI+H,iBAAiB,WAAYiB,EAAK,gBAAgB,GACtDhJ,EAAI+H,iBAAiB,WAAYiB,EAAK,eAAe,GACrDhJ,EAAI+H,iBAAiB,OAAQiB,EAAK,gBAAgB,GAClDhJ,EAAI+D,SAASgE,iBAAiB,mBAAoBiB,EAAK,qBAAqB,GAE5EhJ,EAAI+H,iBAAiB,QAAQ,WAC3B,OAAO/H,EAAI+H,iBAAiB,WAAYiB,EAAK,mBAAmB,EAClE,IAEAhJ,EAAI+H,iBAAiB,cAAc,SAAUlQ,GAC3C,IAAI3P,EAAW2P,EAAMoR,OAAS,CAC5BC,KAAMC,GAAiBtR,EAAMoR,OAAQjJ,GACrCoJ,GAAID,GAAiBtR,EAAMwR,OAAQrJ,GACnC/M,MAAOqW,GAAgBtJ,IACrB,CACFoJ,GAAID,GAAiBnJ,EAAIvW,SAASgb,KAAMzE,IAE1CD,EAAOhB,gBAAgB,eAAgB7W,EAAU,aACnD,IAAG,GAEC8X,EAAIuJ,QAAQC,cAAcC,GAAc1J,EAAQC,EAAIuJ,QAAS,eAAgBvJ,GAC7EA,EAAIuJ,QAAQG,WAAWD,GAAc1J,EAAQC,EAAIuJ,QAAS,YAAavJ,EA9BjB,CA+B5D,GAeF,OAAOtC,CACT,EAgBA,IAAIyL,GAAmB,SAAUlJ,EAAKD,GACpC,IAAI2J,EAAI3J,EAAI+D,SAAS6F,cAAc,KAEnC,OADAD,EAAElF,KAAOxE,EACF,GAAK0J,EAAE3H,SAAW2H,EAAEE,OAASF,EAAEG,IACxC,EAEIC,GAAwB,SAAU/J,EAAK/M,EAAO+W,EAAO/J,GACvD,IAAIgK,EAAcd,GAAiBnJ,EAAIvW,SAASgb,KAAMzE,GACtD,MAAO,CACLgK,MAAOA,EACP/W,MAAOA,EACPiX,UAAWZ,GAAgBtJ,GAC3BoJ,GAAInJ,GAAOgK,EACXf,KAAMe,EAEV,EAEIR,GAAgB,SAAU1J,EAAQhX,EAAQjF,EAAIkc,GAChD,IAAImK,EAAOphB,EAAOjF,GAElBiF,EAAOjF,GAAM,SAAUmP,EAAO+W,EAAO/J,GACnCF,EAAOhB,gBAAgB,WAAajb,EAAIimB,GAAsB/J,EAAK/M,EAAO+W,EAAO/J,GAAM,cAEjD,oBAA3BF,EAAOqK,iBAAgCrK,EAAOqK,kBAErDrK,EAAOxD,QAAQ/U,mBAAmBuY,EAAO7B,eAG7CiM,EAAK9gB,MAAMN,EAAQ,CAACkK,EAAO+W,GAAO1lB,YAAeoC,IAARuZ,EAAoBA,EAAM,IACrE,CAOF,EAEIqJ,GAAkB,SAAUtJ,GAC9B,IACE,OAAOA,EAAIuJ,QAAQtW,KACrB,CAAE,MAAOhE,GAAI,CACf,EAEIob,GAAkB,UAQlBC,GAA0B,SAAUC,EAAcvK,QAC/B,IAAjBuK,IACFA,EAAe,SAGL,IAARvK,IACFA,EAAMxW,QAGR,IACIkU,EAAS,CACXhV,KAAM,SAAUqX,GACd,GAAKA,EAAOd,yBAAyB,WAArC,CACA,IAAIuL,EAAc,CAACzK,EAAOxD,QAAQlV,UAAUC,OAAQyY,EAAOxD,QAAQlV,UAAUE,UAAUjD,OAAOimB,GAC9FE,IACAC,IA4IA,IAAIC,EAAqB,SAAUC,EAAUxiB,EAAQ6X,GACnD,IAAI/X,EAAW,CACbqZ,OAAQqJ,EAASrJ,OACjBvM,QAAS5M,EAAS,IAAM6X,GAGtB2K,EAASrJ,QAAU,IAErBxB,EAAOhB,gBAAgB,iBAAkB7W,EAAUmiB,IAEnDtK,EAAOhB,gBAAgB,oBAAqB7W,EAAUmiB,GAE1D,EAEIQ,EAAmB,SAAUziB,EAAQ6X,GACvCF,EAAOhB,gBAAgB,gBAAiB,CACtC/J,QAAS5M,EAAS,IAAM6X,GACvBoK,GACL,CAjKuD,CAKvD,SAASI,IACP,GAAM,qBAAsBzK,EAAImB,eAAevc,UAA/C,CACA,IAAIkmB,EAAa9K,EAAImB,eAAevc,UAAU6b,KAE9CT,EAAImB,eAAevc,UAAU6b,KAAO,SAAcrY,EAAQ6X,GACxD,IAAI5D,EAAQ/S,KAERyhB,GAAkB,EAElB3d,EAAQ,WACV,OAAO4d,EAAe5iB,EAAQ6X,EAChC,EAEIvX,EAAO,WACT,OAAOuiB,EAAc7iB,EAAQ6X,EAAK5D,EAAMkF,OAC1C,EAIIwJ,IACFzhB,KAAK4hB,oBAAoB,OAAQxiB,GACjCY,KAAK4hB,oBAAoB,QAAS9d,IAIpC9D,KAAKye,iBAAiB,OAAQrf,GAE9BY,KAAKye,iBAAiB,QAAS3a,GAC/B2d,GAAkB,EAClBD,EAAWzhB,MAAMC,KAAMN,UACzB,CA7BiE,CAoCnE,CAEA,SAASiiB,EAAc7iB,EAAQ6X,EAAKsB,GAClC,QAAY7a,IAARuZ,GAQJ,GAAmB,kBAARA,IAAoB1b,EAAcimB,EAAavK,EAAIhS,QAAQ,QAAS,KAA/E,CAKA,IAAI/F,EAAW,CACbqZ,OAAQA,EACRvM,QAAS5M,EAAS,IAAM6X,GAGtBsB,GAAU,IAEZxB,EAAOhB,gBAAgB,wBAAyB7W,EAAUmiB,IAE1DtK,EAAOhB,gBAAgB,2BAA4B7W,EAAUmiB,GAX/D,OAVEtK,EAAOnD,QAAQpE,KAAK,6GAuBxB,CAEA,SAASwS,EAAe5iB,EAAQ6X,QAClBvZ,IAARuZ,EAMe,kBAARA,GAAoB1b,EAAcimB,EAAavK,EAAIhS,QAAQ,QAAS,MAM/E8R,EAAOhB,gBAAgB,uBAAwB,CAC7C/J,QAAS5M,EAAS,IAAM6X,GACvBoK,IAbDtK,EAAOnD,QAAQpE,KAAK,6GAcxB,CAGA,SAASkS,IAIP,GAAM,UAAW1K,IAAQA,EAAImL,MAAMC,SAAnC,CACA,IAAIC,EAAWrL,EAAImL,MAEnBnL,EAAImL,MAAQ,WACV,IAGI/iB,EAHAkjB,EAAatiB,UACbuiB,EAAeviB,UAAU,GACzBwiB,EAAUxiB,UAAU,GAEpBiX,EAAM,KAsBV,OApBIsL,GAAwC,kBAAjBA,GACzBtL,EAAMsL,EAAatL,IAEfuL,GAAW,WAAYA,EACzBpjB,EAASojB,EAAQpjB,OACRmjB,GAAgB,WAAYA,IACrCnjB,EAASmjB,EAAanjB,UAGxB6X,EAAMsL,EAEFC,GAAW,WAAYA,IACzBpjB,EAASojB,EAAQpjB,cAIN1B,IAAX0B,IACFA,EAAS,OAGJ,IAAIqjB,SAAQ,SAAUC,EAASC,GAEpCN,EAAShiB,WAAM,EAAQiiB,GAAYlS,MAAK,SAAUwR,GAChDD,EAAmBC,EAAUxiB,EAAQ6X,GACrCyL,EAAQd,EACV,IAAU,OAAE,SAAUxd,GACpByd,EAAiBziB,EAAQ6X,GACzB0L,EAAOve,EACT,GACF,GACF,CAxCmD,CA+CrD,CAqBF,GAYF,OAAOsQ,CACT,EAQIkO,GAAgB,CAClBljB,KAAM,SAAUqX,GAEd,IAAIhV,EAAI,EAERgV,EAAO1B,YAAW,SAAUxG,GAE1B,GAAI9M,GAAKgV,EAAOxD,QAAQsP,UAGtB,OAFA9L,EAAOnD,QAAQpE,KAAK,+DAAiEuH,EAAOxD,QAAQsP,UAAY,mBAEzG,EAGT9gB,GACF,IAEAgV,EAAOqK,gBAAkB,WACvBrf,EAAI,CACN,CACF,EACA4S,aAAc,CACZkO,UAAW,CACTvlB,aAAc,WACZ,OAAO,EACT,EACAC,QAAS,yCACTC,SAAU,SAAUxC,GAClB,OAAOuB,EAAc,EAAG,IAAjBA,CAAsBvB,EAC/B,KAKF8nB,GAAwB,CAAC,EAqBzBC,IAbJD,GAAwB,CACtBpjB,KAAM,SAAUqX,GACdA,EAAO1B,YAAW,SAAUxG,GAC1B,IAAImU,EAAYpoB,EAAYiU,EAAMrC,QAAQ,SAAUzR,EAAO2S,GACzD,OAAO3S,EAAMO,OAAOoS,EAAGrJ,WACzB,GAAG,IACHnE,EAAS8iB,GAAW,SAAUlV,GAC5BA,EAAMC,KAAOgV,GAAMjV,EAAMC,KAC3B,GACF,GACF,IAGgCkV,OAAS,SAAU7gB,GACnD,MAAsB,kBAARA,EAAmBA,EAAI6C,QAAQ,QAAS,IAAIA,QAAQ,OAAQ,IAAM7C,CAClF,EAKI8gB,GAAe,SAAUlM,EAAKpI,GAShC,YARY,IAARoI,IACFA,EAAMxW,aAGU,IAAdoO,IACFA,EAAY,kBAGP,CACLlP,KAAM,SAAUqX,GACd,GAAKA,EAAOxD,QAAQ3V,kBACfmZ,EAAOxD,QAAQ1V,kBAAkBX,oBAAtC,CA6DA,IAAIimB,EAAcnM,EAAIO,QACtBP,EAAIO,QAAUA,CA9DmD,CAEjE,SAASA,EAAQ6L,EAAgBnM,EAAKoM,EAAQC,EAAQlf,GAEpD,GAAe,IAAXif,GAAgB,kBAAkB9jB,KAAK6jB,GACzCrM,EAAOnD,QAAQpE,KAAK,0FACf,CAEL,IAOIX,EAPAtD,EAAe,CACjBK,SAAU,QACVC,WAAW,EACX8B,eAAgB,CACdvM,KAAM,uBAMV,GAAIgD,EAGFyK,EAAQkI,EAAO3L,MAAMqD,OAAOrK,GAAO,EAAMmH,EAAcqD,EAAW,GAClE2U,GAAc1U,EAAMrC,OAAO,GAAGnI,WAAY4S,EAAKoM,EAAQC,QAClD,GAQmB,kBAAnBF,GAAkD,OAAnBA,GAA6BnM,GAAsB,kBAARA,GAAsBoM,GAAWC,GAAWlf,EAoB3HyK,EAAQkI,EAAO3L,MAAMqD,OAAO2U,GAAgB,EAAM7X,EAAcqD,EAAW,GAC3E2U,GAAc1U,EAAMrC,OAAO,GAAGnI,WAAY4S,EAAKoM,EAAQC,OArB2E,CAElI,IAAIzjB,EAAOujB,EAAehiB,KAAO,UAAYgiB,EAAehiB,KAAO,QAG/D7D,EAAU6lB,EAAe7lB,SAAW6lB,EAAeI,QAAU,IACjE3U,EAAQkI,EAAO3L,MAAMqD,OAAO,CAC1B5O,KAAMA,EACNtC,QAASA,IACR,EAAMgO,EAAcqD,EAAW,IAE5BpD,cAAgB4X,EAEtBvU,EAAMjC,YAAYgC,EAAW,CAC3BC,MAAOuU,EACPK,gBAAiBxM,GAErB,CAOAF,EAAOX,QAAQvH,EACjB,CAE2B,oBAAhBsU,GAA4BA,EAAY9iB,MAAMC,KAAMN,UACjE,CAIF,EAEJ,EAKIujB,GAAgB,SAAUhf,EAAO0S,EAAKoM,EAAQC,GAC3C/e,EAAM,IAAIA,EAAMjI,KAAK,CAAC,GAC3B,IAAIonB,EAAUnf,EAAM,GACfmf,EAAQ3V,MAAuB,kBAARkJ,IAAkByM,EAAQ3V,KAAOkJ,IACxDyM,EAAQ7d,YAAc8d,GAAeN,KAASK,EAAQ7d,WAAawd,GAEnEK,EAAQ5d,eACP6d,GAAeL,GACjBI,EAAQ5d,aAAewd,EACd9iB,OAAOqO,OAAS8U,GAAenjB,OAAOqO,MAAM+U,kBACrDF,EAAQ5d,aAAetF,OAAOqO,MAAM+U,gBAG1C,EAEID,GAAiB,SAAU5hB,GAC7B,MAAoB,kBAANA,GAAqC,QAAnB8B,OAAO/H,KAAKiG,EAC9C,EAYI8hB,GAA0B,SAAU7M,GAgFtC,YA/EY,IAARA,IACFA,EAAMxW,QAGK,CACXd,KAAM,SAAUqX,GACd,GAAKA,EAAOxD,QAAQ3V,kBAAqBmZ,EAAOxD,QAAQ1V,kBAAkBV,oBAA1E,CAEA,IAAI2mB,EAAW,SAAUC,GACvB,IAAI3f,EAAQ2f,EAAIzU,OACZ0U,GAAa,EAEjB,IACMD,EAAIP,QAAUO,EAAIP,OAAOlU,SAC3BlL,EAAQ2f,EAAIP,OAAOlU,OACnB0U,GAAa,EAEjB,CAAE,MAAO/d,GAAI,CAEb,IAAI4I,EAAQkI,EAAO3L,MAAMqD,OAAOrK,GAAO,EAAO,CAC5CwH,SAAU,QACVC,WAAW,EACX8B,eAAgB,CACdvM,KAAM,8BAEP,6BAA8B,EAAG2V,EAAOnD,SAEvCoQ,GACF9jB,EAAS2O,EAAMrC,OAAO,GAAGnI,WAAY4f,GAAsB7f,IAG7D2S,EAAOX,QAAQvH,GAAO,SAAUA,GAE5B,IAAIqV,EADFna,EAAa8E,EAAMrD,iBAAmBqD,EAAMrD,cAAcjH,OAG5DsK,EAAMjC,YAAY,+BAA+BsX,EAAqB,CAAC,GAAsBvoB,OAAOC,UAAUC,SAASC,KAAK+S,EAAMrD,gBAAkB,CAClJ3L,KAAMgP,EAAMrD,cAAc3L,KAC1BtC,QAASsR,EAAMrD,cAAcjO,QAC7B0Q,KAAMY,EAAMrD,cAAcyC,MACzBiW,GAEP,GACF,EAEI,qBAAsBlN,EACxBA,EAAI+H,iBAAiB,qBAAsB+E,GAE3C9M,EAAImN,qBAAuB,SAAU7U,EAAQ8U,GAC3CN,EAAS,CACPN,OAAQ,CACNlU,OAAQA,EACR8U,QAASA,IAGf,CAhDmG,CAoDvG,EAsBJ,EAoBIH,GAAwB,SAAU7f,GACpC,OAAO,SAAU0J,GACXA,EAAMC,OAAS3J,EAAMvI,YAErBiS,EAAM1O,SACR0O,EAAM1O,OAAS0O,EAAM1O,OAAO6F,QAAQ,OAAQ,IAEhD,CACF,EAEIof,GAAe,CAAC,EAChBxkB,GAAO,qBACPsV,GAAU,SACV8B,GAAM,wCAiBNqN,GAAaxkB,EAAY,CAAC,EAAG9C,EAAWI,OAAQmD,GAqChDgkB,GAAU,CACZC,QAAS,KACTC,aAAc,SAAU1d,GAEF,kBAATA,IAAmBA,EAAO,CACnC1J,OAAQ0J,IAELA,IAAMA,EAAO,CAAC,GACnB,IAAIoM,EAAkB,CACtByF,GAAU0B,KAAevB,KAAgByC,KAAgBoH,GAAelH,GAAcI,GAAegH,GAAuBI,KAAgBW,KAA2B9D,KAA8BjB,KAA+BwC,KAA2BtF,GAC/PU,MAEIgI,EAAU,IAAIhO,GAAW3P,EAAMud,GAAYnR,EAAiB,CAC9DtT,KAAMA,GACNsV,QAASA,GACT8B,IAAKA,KAQP,OALAyN,EAAQ1P,aAAaxU,OAAO6W,eAAiBP,GAAgBoB,IAE7DwM,EAAQ9Q,QAAQhT,MAAM,WAEtB8jB,EAAQ3O,gBAAgB,iBAAkB,CAAC,EAAG,SACvC2O,EAAQnR,QAAQ/U,kBAAoBkmB,EAAQxP,eAAiBwP,CACtE,EACA5G,MAAO,SAAU/W,GACf,OAAIwd,GAAQC,SACVD,GAAQC,QAAQ5Q,QAAQpE,KAAK,wDAEtB+U,GAAQC,UAGjBD,GAAQC,QAAUD,GAAQE,aAAa1d,GAChCwd,GAAQC,QACjB,EACAG,UAAW,WACT,OAA0B,MAAnBJ,GAAQC,OACjB,GAuBF,OArBAtkB,EAAS,CAAC,mBAAmB5E,OAAOY,EAAUwa,GAAW9a,aAAa,SAAUgpB,GAC1E,KAAKrlB,KAAKqlB,KAEdL,GAAQK,GAAK,WACX,IAAKL,GAAQC,QAAS,OAAO7jB,QAAQI,IAAI,WAAa6jB,EAAI,wCAC1DL,GAAQC,QAAQjQ,QAAU,EAE1B,IAAIpE,EAAMoU,GAAQC,QAAQI,GAAGvkB,MAAMkkB,GAAQC,QAASxkB,WAGpD,OADAukB,GAAQC,QAAQjQ,QAAU,EACnBpE,CACT,EACF,KACAkU,GAAeE,IACFtR,OAASyD,GACtB2N,GAAajZ,MAAQsE,GACrB2U,GAAa/R,QAAUD,GACvBgS,GAAaljB,WAAaD,EAE1BmjB,GAAsB,QAAIE,GAEnBF,EAEP,CApqHuFvnB,yBCAvFtC,EAAOC,QAAU,EAAjB,4BCAA,QAWMiH,IAAsB,iBAARsP,MAAoBA,KAAKA,OAASA,MAAQA,MACjC,iBAAV,EAAA6T,GAAsB,EAAAA,EAAOC,SAAW,EAAAD,GAAU,EAAAA,EAIjE,EAAO,CAAC,QAAc,QAAU,GAAY,EAAF,SAAWE,EAAGC,EAAGvqB,GAGzDiH,EAAKujB,SAcR,SAASvjB,EAAMujB,EAAUF,EAAGC,GAO7B,IAAIE,EAAmBxjB,EAAKujB,SAGxBzf,EAAQwF,MAAMpP,UAAU4J,MAG5Byf,EAASE,QAAU,QAInBF,EAASD,EAAIA,EAIbC,EAASG,WAAa,WAEpB,OADA1jB,EAAKujB,SAAWC,EACT5kB,IACT,EAKA2kB,EAASI,aAAc,EAMvBJ,EAASK,aAAc,EAevB,IAMIC,EANAC,EAASP,EAASO,OAAS,CAAC,EAG5BC,EAAgB,MAQhBC,EAAY,SAASC,EAAUjT,EAAQ7S,EAAM+lB,EAAU7e,GACzD,IAAW8e,EAAP5qB,EAAI,EACR,GAAI4E,GAAwB,kBAATA,EAAmB,MAEnB,IAAb+lB,GAAuB,YAAa7e,QAAyB,IAAjBA,EAAKhI,UAAoBgI,EAAKhI,QAAU6mB,GACxF,IAAKC,EAAQd,EAAEe,KAAKjmB,GAAO5E,EAAI4qB,EAAM1qB,OAASF,IAC5CyX,EAASgT,EAAUC,EAAUjT,EAAQmT,EAAM5qB,GAAI4E,EAAKgmB,EAAM5qB,IAAK8L,EAEnE,MAAO,GAAIlH,GAAQ4lB,EAAclmB,KAAKM,GAEpC,IAAKgmB,EAAQhmB,EAAKqF,MAAMugB,GAAgBxqB,EAAI4qB,EAAM1qB,OAAQF,IACxDyX,EAASiT,EAASjT,EAAQmT,EAAM5qB,GAAI2qB,EAAU7e,QAIhD2L,EAASiT,EAASjT,EAAQ7S,EAAM+lB,EAAU7e,GAE5C,OAAO2L,CACT,EAIA8S,EAAOO,GAAK,SAASlmB,EAAM+lB,EAAU7mB,GAenC,OAdAuB,KAAK0lB,QAAUN,EAAUO,EAAO3lB,KAAK0lB,SAAW,CAAC,EAAGnmB,EAAM+lB,EAAU,CAClE7mB,QAASA,EACTmnB,IAAK5lB,KACL6lB,UAAWZ,IAGTA,KACcjlB,KAAK8lB,aAAe9lB,KAAK8lB,WAAa,CAAC,IAC7Cb,EAAWjY,IAAMiY,EAG3BA,EAAWc,SAAU,GAGhB/lB,IACT,EAKAklB,EAAOc,SAAW,SAAS5qB,EAAKmE,EAAM+lB,GACpC,IAAKlqB,EAAK,OAAO4E,KACjB,IAAIgN,EAAK5R,EAAI6qB,YAAc7qB,EAAI6qB,UAAYxB,EAAEyB,SAAS,MAClDC,EAAcnmB,KAAKomB,eAAiBpmB,KAAKomB,aAAe,CAAC,GACzDP,EAAYZ,EAAakB,EAAYnZ,GAIpC6Y,IACH7lB,KAAKimB,YAAcjmB,KAAKimB,UAAYxB,EAAEyB,SAAS,MAC/CL,EAAYZ,EAAakB,EAAYnZ,GAAM,IAAIqZ,EAAUrmB,KAAM5E,IAIjE,IAAI0I,EAAQwiB,EAAWlrB,EAAKmE,EAAM+lB,EAAUtlB,MAG5C,GAFAilB,OAAa,EAETnhB,EAAO,MAAMA,EAIjB,OAFI+hB,EAAUE,SAASF,EAAUJ,GAAGlmB,EAAM+lB,GAEnCtlB,IACT,EAGA,IAAI2lB,EAAQ,SAASvT,EAAQ7S,EAAM+lB,EAAUpD,GAC3C,GAAIoD,EAAU,CACZ,IAAIiB,EAAWnU,EAAO7S,KAAU6S,EAAO7S,GAAQ,IAC3Cd,EAAUyjB,EAAQzjB,QAASmnB,EAAM1D,EAAQ0D,IAAKC,EAAY3D,EAAQ2D,UAClEA,GAAWA,EAAUW,QAEzBD,EAASvqB,KAAK,CAACspB,SAAUA,EAAU7mB,QAASA,EAASmnB,IAAKnnB,GAAWmnB,EAAKC,UAAWA,GACvF,CACA,OAAOzT,CACT,EAIIkU,EAAa,SAASlrB,EAAKmE,EAAM+lB,EAAU7mB,GAC7C,IACErD,EAAIqqB,GAAGlmB,EAAM+lB,EAAU7mB,EACzB,CAAE,MAAOkH,GACP,OAAOA,CACT,CACF,EAMAuf,EAAOuB,IAAM,SAASlnB,EAAM+lB,EAAU7mB,GACpC,OAAKuB,KAAK0lB,SACV1lB,KAAK0lB,QAAUN,EAAUsB,EAAQ1mB,KAAK0lB,QAASnmB,EAAM+lB,EAAU,CAC7D7mB,QAASA,EACTkoB,UAAW3mB,KAAK8lB,aAGX9lB,MANmBA,IAO5B,EAIAklB,EAAO0B,cAAgB,SAASxrB,EAAKmE,EAAM+lB,GACzC,IAAIa,EAAcnmB,KAAKomB,aACvB,IAAKD,EAAa,OAAOnmB,KAGzB,IADA,IAAI6mB,EAAMzrB,EAAM,CAACA,EAAI6qB,WAAaxB,EAAEe,KAAKW,GAChCxrB,EAAI,EAAGA,EAAIksB,EAAIhsB,OAAQF,IAAK,CACnC,IAAIkrB,EAAYM,EAAYU,EAAIlsB,IAIhC,IAAKkrB,EAAW,MAEhBA,EAAUzqB,IAAIqrB,IAAIlnB,EAAM+lB,EAAUtlB,MAC9B6lB,EAAUE,SAASF,EAAUY,IAAIlnB,EAAM+lB,EAC7C,CAGA,OAFIb,EAAEqC,QAAQX,KAAcnmB,KAAKomB,kBAAe,GAEzCpmB,IACT,EAGA,IAAI0mB,EAAS,SAAStU,EAAQ7S,EAAM+lB,EAAUpD,GAC5C,GAAK9P,EAAL,CAEA,IACWmT,EADP9mB,EAAUyjB,EAAQzjB,QAASkoB,EAAYzE,EAAQyE,UAC/ChsB,EAAI,EAGR,GAAK4E,GAASd,GAAY6mB,EAA1B,CAQA,IADAC,EAAQhmB,EAAO,CAACA,GAAQklB,EAAEe,KAAKpT,GACxBzX,EAAI4qB,EAAM1qB,OAAQF,IAAK,CAE5B,IAAI4rB,EAAWnU,EADf7S,EAAOgmB,EAAM5qB,IAIb,IAAK4rB,EAAU,MAIf,IADA,IAAIQ,EAAY,GACP1jB,EAAI,EAAGA,EAAIkjB,EAAS1rB,OAAQwI,IAAK,CACxC,IAAI2jB,EAAUT,EAASljB,GACvB,GACEiiB,GAAYA,IAAa0B,EAAQ1B,UAC/BA,IAAa0B,EAAQ1B,SAAS2B,WAC5BxoB,GAAWA,IAAYuoB,EAAQvoB,QAEnCsoB,EAAU/qB,KAAKgrB,OACV,CACL,IAAInB,EAAYmB,EAAQnB,UACpBA,GAAWA,EAAUY,IAAIlnB,EAAM+lB,EACrC,CACF,CAGIyB,EAAUlsB,OACZuX,EAAO7S,GAAQwnB,SAER3U,EAAO7S,EAElB,CAEA,OAAO6S,CAlCP,CAJE,IAAKmT,EAAQd,EAAEe,KAAKmB,GAAYhsB,EAAI4qB,EAAM1qB,OAAQF,IAChDgsB,EAAUpB,EAAM5qB,IAAIusB,SARL,CA8CrB,EAMAhC,EAAOiC,KAAO,SAAS5nB,EAAM+lB,EAAU7mB,GAErC,IAAI2T,EAASgT,EAAUgC,EAAS,CAAC,EAAG7nB,EAAM+lB,EAAUtlB,KAAKymB,IAAI9lB,KAAKX,OAElE,MADoB,kBAATT,GAAgC,MAAXd,IAAiB6mB,OAAW,GACrDtlB,KAAKylB,GAAGrT,EAAQkT,EAAU7mB,EACnC,EAGAymB,EAAOmC,aAAe,SAASjsB,EAAKmE,EAAM+lB,GAExC,IAAIlT,EAASgT,EAAUgC,EAAS,CAAC,EAAG7nB,EAAM+lB,EAAUtlB,KAAK4mB,cAAcjmB,KAAKX,KAAM5E,IAClF,OAAO4E,KAAKgmB,SAAS5qB,EAAKgX,EAC5B,EAIA,IAAIgV,EAAU,SAASriB,EAAKxF,EAAM+lB,EAAUgC,GAC1C,GAAIhC,EAAU,CACZ,IAAI6B,EAAOpiB,EAAIxF,GAAQklB,EAAE0C,MAAK,WAC5BG,EAAM/nB,EAAM4nB,GACZ7B,EAASvlB,MAAMC,KAAMN,UACvB,IACAynB,EAAKF,UAAY3B,CACnB,CACA,OAAOvgB,CACT,EAMAmgB,EAAOqC,QAAU,SAAShoB,GACxB,IAAKS,KAAK0lB,QAAS,OAAO1lB,KAI1B,IAFA,IAAInF,EAASyW,KAAKnV,IAAI,EAAGuD,UAAU7E,OAAS,GACxC4H,EAAOiI,MAAM7P,GACRF,EAAI,EAAGA,EAAIE,EAAQF,IAAK8H,EAAK9H,GAAK+E,UAAU/E,EAAI,GAGzD,OADAyqB,EAAUoC,EAAYxnB,KAAK0lB,QAASnmB,OAAM,EAAQkD,GAC3CzC,IACT,EAGA,IAAIwnB,EAAa,SAASC,EAAWloB,EAAM+lB,EAAU7iB,GACnD,GAAIglB,EAAW,CACb,IAAIrV,EAASqV,EAAUloB,GACnBmoB,EAAYD,EAAUE,IACtBvV,GAAUsV,IAAWA,EAAYA,EAAUxiB,SAC3CkN,GAAQwV,EAAcxV,EAAQ3P,GAC9BilB,GAAWE,EAAcF,EAAW,CAACnoB,GAAMvE,OAAOyH,GACxD,CACA,OAAOglB,CACT,EAKIG,EAAgB,SAASxV,EAAQ3P,GACnC,IAAIolB,EAAIltB,GAAK,EAAGmtB,EAAI1V,EAAOvX,OAAQktB,EAAKtlB,EAAK,GAAIulB,EAAKvlB,EAAK,GAAIwlB,EAAKxlB,EAAK,GACzE,OAAQA,EAAK5H,QACX,KAAK,EAAG,OAASF,EAAImtB,IAAID,EAAKzV,EAAOzX,IAAI2qB,SAAS9pB,KAAKqsB,EAAGjC,KAAM,OAChE,KAAK,EAAG,OAASjrB,EAAImtB,IAAID,EAAKzV,EAAOzX,IAAI2qB,SAAS9pB,KAAKqsB,EAAGjC,IAAKmC,GAAK,OACpE,KAAK,EAAG,OAASptB,EAAImtB,IAAID,EAAKzV,EAAOzX,IAAI2qB,SAAS9pB,KAAKqsB,EAAGjC,IAAKmC,EAAIC,GAAK,OACxE,KAAK,EAAG,OAASrtB,EAAImtB,IAAID,EAAKzV,EAAOzX,IAAI2qB,SAAS9pB,KAAKqsB,EAAGjC,IAAKmC,EAAIC,EAAIC,GAAK,OAC5E,QAAS,OAASttB,EAAImtB,IAAID,EAAKzV,EAAOzX,IAAI2qB,SAASvlB,MAAM8nB,EAAGjC,IAAKnjB,GAAO,OAE5E,EAII4jB,EAAY,SAAS7C,EAAUpoB,GACjC4E,KAAKgN,GAAKwW,EAASyC,UACnBjmB,KAAKwjB,SAAWA,EAChBxjB,KAAK5E,IAAMA,EACX4E,KAAK+lB,SAAU,EACf/lB,KAAKwmB,MAAQ,EACbxmB,KAAK0lB,aAAU,CACjB,EAEAW,EAAU/qB,UAAUmqB,GAAKP,EAAOO,GAMhCY,EAAU/qB,UAAUmrB,IAAM,SAASlnB,EAAM+lB,GACvC,IAAI4B,EACAlnB,KAAK+lB,SACP/lB,KAAK0lB,QAAUN,EAAUsB,EAAQ1mB,KAAK0lB,QAASnmB,EAAM+lB,EAAU,CAC7D7mB,aAAS,EACTkoB,eAAW,IAEbO,GAAWlnB,KAAK0lB,UAEhB1lB,KAAKwmB,QACLU,EAAyB,IAAflnB,KAAKwmB,OAEbU,GAASlnB,KAAKknB,SACpB,EAGAb,EAAU/qB,UAAU4rB,QAAU,kBACrBlnB,KAAKwjB,SAAS4C,aAAapmB,KAAK5E,IAAI6qB,WACtCjmB,KAAK+lB,gBAAgB/lB,KAAK5E,IAAI0qB,WAAW9lB,KAAKgN,GACrD,EAGAkY,EAAOvkB,KAASukB,EAAOO,GACvBP,EAAOgD,OAAShD,EAAOuB,IAIvBhC,EAAE0D,OAAOxD,EAAUO,GAYnB,IAAIkD,EAAQzD,EAASyD,MAAQ,SAASC,EAAYnG,GAChD,IAAIoG,EAAQD,GAAc,CAAC,EAC3BnG,IAAYA,EAAU,CAAC,GACvBliB,KAAKuoB,cAAcxoB,MAAMC,KAAMN,WAC/BM,KAAKwoB,IAAM/D,EAAEyB,SAASlmB,KAAKyoB,WAC3BzoB,KAAKqoB,WAAa,CAAC,EACfnG,EAAQwG,aAAY1oB,KAAK0oB,WAAaxG,EAAQwG,YAC9CxG,EAAQre,QAAOykB,EAAQtoB,KAAK6D,MAAMykB,EAAOpG,IAAY,CAAC,GAC1D,IAAIyG,EAAWlE,EAAE3oB,OAAOkE,KAAM,YAI9BsoB,EAAQ7D,EAAEkE,SAASlE,EAAE0D,OAAO,CAAC,EAAGQ,EAAUL,GAAQK,GAElD3oB,KAAK4oB,IAAIN,EAAOpG,GAChBliB,KAAK6oB,QAAU,CAAC,EAChB7oB,KAAK8oB,WAAW/oB,MAAMC,KAAMN,UAC9B,EAGA+kB,EAAE0D,OAAOC,EAAM9sB,UAAW4pB,EAAQ,CAGhC2D,QAAS,KAGTE,gBAAiB,KAIjBC,YAAa,KAIbP,UAAW,IAIXF,cAAe,WAAW,EAI1BO,WAAY,WAAW,EAGvB7nB,OAAQ,SAASihB,GACf,OAAOuC,EAAEwE,MAAMjpB,KAAKqoB,WACtB,EAIAa,KAAM,WACJ,OAAOvE,EAASuE,KAAKnpB,MAAMC,KAAMN,UACnC,EAGAyK,IAAK,SAASgf,GACZ,OAAOnpB,KAAKqoB,WAAWc,EACzB,EAGAC,OAAQ,SAASD,GACf,OAAO1E,EAAE2E,OAAOppB,KAAKmK,IAAIgf,GAC3B,EAIAE,IAAK,SAASF,GACZ,OAAyB,MAAlBnpB,KAAKmK,IAAIgf,EAClB,EAGAzjB,QAAS,SAAS4iB,GAChB,QAAS7D,EAAEY,SAASiD,EAAOtoB,KAAlBykB,CAAwBzkB,KAAKqoB,WACxC,EAKAO,IAAK,SAASjqB,EAAKjE,EAAKwnB,GACtB,GAAW,MAAPvjB,EAAa,OAAOqB,KAGxB,IAAIsoB,EAWJ,GAVmB,kBAAR3pB,GACT2pB,EAAQ3pB,EACRujB,EAAUxnB,IAET4tB,EAAQ,CAAC,GAAG3pB,GAAOjE,EAGtBwnB,IAAYA,EAAU,CAAC,IAGlBliB,KAAKspB,UAAUhB,EAAOpG,GAAU,OAAO,EAG5C,IAAIqH,EAAarH,EAAQqH,MACrBC,EAAatH,EAAQsH,OACrBC,EAAa,GACbC,EAAa1pB,KAAK2pB,UACtB3pB,KAAK2pB,WAAY,EAEZD,IACH1pB,KAAK4pB,oBAAsBnF,EAAEwE,MAAMjpB,KAAKqoB,YACxCroB,KAAK6oB,QAAU,CAAC,GAGlB,IAAIgB,EAAU7pB,KAAKqoB,WACfQ,EAAU7oB,KAAK6oB,QACfhM,EAAU7c,KAAK4pB,oBAGnB,IAAK,IAAIT,KAAQb,EACf5tB,EAAM4tB,EAAMa,GACP1E,EAAEqF,QAAQD,EAAQV,GAAOzuB,IAAM+uB,EAAQztB,KAAKmtB,GAC5C1E,EAAEqF,QAAQjN,EAAKsM,GAAOzuB,UAGlBmuB,EAAQM,GAFfN,EAAQM,GAAQzuB,EAIlB6uB,SAAeM,EAAQV,GAAQU,EAAQV,GAAQzuB,EAIjD,GAAIsF,KAAKgpB,eAAeV,EAAO,CAC7B,IAAIyB,EAAS/pB,KAAKgN,GAClBhN,KAAKgN,GAAKhN,KAAKmK,IAAInK,KAAKgpB,aACxBhpB,KAAKunB,QAAQ,WAAYvnB,KAAM+pB,EAAQ7H,EACzC,CAGA,IAAKsH,EAAQ,CACPC,EAAQ5uB,SAAQmF,KAAKgqB,SAAW9H,GACpC,IAAK,IAAIvnB,EAAI,EAAGA,EAAI8uB,EAAQ5uB,OAAQF,IAClCqF,KAAKunB,QAAQ,UAAYkC,EAAQ9uB,GAAIqF,KAAM6pB,EAAQJ,EAAQ9uB,IAAKunB,EAEpE,CAIA,GAAIwH,EAAU,OAAO1pB,KACrB,IAAKwpB,EACH,KAAOxpB,KAAKgqB,UACV9H,EAAUliB,KAAKgqB,SACfhqB,KAAKgqB,UAAW,EAChBhqB,KAAKunB,QAAQ,SAAUvnB,KAAMkiB,GAKjC,OAFAliB,KAAKgqB,UAAW,EAChBhqB,KAAK2pB,WAAY,EACV3pB,IACT,EAIAupB,MAAO,SAASJ,EAAMjH,GACpB,OAAOliB,KAAK4oB,IAAIO,OAAM,EAAQ1E,EAAE0D,OAAO,CAAC,EAAGjG,EAAS,CAACqH,OAAO,IAC9D,EAGApgB,MAAO,SAAS+Y,GACd,IAAIoG,EAAQ,CAAC,EACb,IAAK,IAAI3pB,KAAOqB,KAAKqoB,WAAYC,EAAM3pB,QAAO,EAC9C,OAAOqB,KAAK4oB,IAAIN,EAAO7D,EAAE0D,OAAO,CAAC,EAAGjG,EAAS,CAACqH,OAAO,IACvD,EAIAU,WAAY,SAASd,GACnB,OAAY,MAARA,GAAsB1E,EAAEqC,QAAQ9mB,KAAK6oB,SAClCpE,EAAE4E,IAAIrpB,KAAK6oB,QAASM,EAC7B,EAQAe,kBAAmB,SAASC,GAC1B,IAAKA,EAAM,QAAOnqB,KAAKiqB,cAAexF,EAAEwE,MAAMjpB,KAAK6oB,SACnD,IAEIoB,EAFAG,EAAMpqB,KAAK2pB,UAAY3pB,KAAK4pB,oBAAsB5pB,KAAKqoB,WACvDQ,EAAU,CAAC,EAEf,IAAK,IAAIM,KAAQgB,EAAM,CACrB,IAAIzvB,EAAMyvB,EAAKhB,GACX1E,EAAEqF,QAAQM,EAAIjB,GAAOzuB,KACzBmuB,EAAQM,GAAQzuB,EAChBuvB,GAAa,EACf,CACA,QAAOA,GAAapB,CACtB,EAIAwB,SAAU,SAASlB,GACjB,OAAY,MAARA,GAAiBnpB,KAAK4pB,oBACnB5pB,KAAK4pB,oBAAoBT,GADsB,IAExD,EAIAmB,mBAAoB,WAClB,OAAO7F,EAAEwE,MAAMjpB,KAAK4pB,oBACtB,EAIA/H,MAAO,SAASK,GACdA,EAAUuC,EAAE0D,OAAO,CAACtkB,OAAO,GAAOqe,GAClC,IAAIqI,EAAQvqB,KACRwqB,EAAUtI,EAAQsI,QAQtB,OAPAtI,EAAQsI,QAAU,SAASC,GACzB,IAAIC,EAAcxI,EAAQre,MAAQ0mB,EAAM1mB,MAAM4mB,EAAMvI,GAAWuI,EAC/D,IAAKF,EAAM3B,IAAI8B,EAAaxI,GAAU,OAAO,EACzCsI,GAASA,EAAQhvB,KAAK0mB,EAAQzjB,QAAS8rB,EAAOE,EAAMvI,GACxDqI,EAAMhD,QAAQ,OAAQgD,EAAOE,EAAMvI,EACrC,EACAyI,EAAU3qB,KAAMkiB,GACTliB,KAAKkpB,KAAK,OAAQlpB,KAAMkiB,EACjC,EAKA0I,KAAM,SAASjsB,EAAKjE,EAAKwnB,GAEvB,IAAIoG,EACO,MAAP3pB,GAA8B,kBAARA,GACxB2pB,EAAQ3pB,EACRujB,EAAUxnB,IAET4tB,EAAQ,CAAC,GAAG3pB,GAAOjE,EAItB,IAAImwB,GADJ3I,EAAUuC,EAAE0D,OAAO,CAACjrB,UAAU,EAAM2G,OAAO,GAAOqe,IAC/B2I,KAKnB,GAAIvC,IAAUuC,GACZ,IAAK7qB,KAAK4oB,IAAIN,EAAOpG,GAAU,OAAO,OACjC,IAAKliB,KAAKspB,UAAUhB,EAAOpG,GAChC,OAAO,EAKT,IAAIqI,EAAQvqB,KACRwqB,EAAUtI,EAAQsI,QAClBnC,EAAaroB,KAAKqoB,WACtBnG,EAAQsI,QAAU,SAASC,GAEzBF,EAAMlC,WAAaA,EACnB,IAAIqC,EAAcxI,EAAQre,MAAQ0mB,EAAM1mB,MAAM4mB,EAAMvI,GAAWuI,EAE/D,GADII,IAAMH,EAAcjG,EAAE0D,OAAO,CAAC,EAAGG,EAAOoC,IACxCA,IAAgBH,EAAM3B,IAAI8B,EAAaxI,GAAU,OAAO,EACxDsI,GAASA,EAAQhvB,KAAK0mB,EAAQzjB,QAAS8rB,EAAOE,EAAMvI,GACxDqI,EAAMhD,QAAQ,OAAQgD,EAAOE,EAAMvI,EACrC,EACAyI,EAAU3qB,KAAMkiB,GAGZoG,GAASuC,IAAM7qB,KAAKqoB,WAAa5D,EAAE0D,OAAO,CAAC,EAAGE,EAAYC,IAE9D,IAAIxpB,EAASkB,KAAK8qB,QAAU,SAAW5I,EAAQ6I,MAAQ,QAAU,SAClD,UAAXjsB,GAAuBojB,EAAQoG,QAAOpG,EAAQoG,MAAQA,GAC1D,IAAI0C,EAAMhrB,KAAKkpB,KAAKpqB,EAAQkB,KAAMkiB,GAKlC,OAFAliB,KAAKqoB,WAAaA,EAEX2C,CACT,EAKAC,QAAS,SAAS/I,GAChBA,EAAUA,EAAUuC,EAAEwE,MAAM/G,GAAW,CAAC,EACxC,IAAIqI,EAAQvqB,KACRwqB,EAAUtI,EAAQsI,QAClBK,EAAO3I,EAAQ2I,KAEfI,EAAU,WACZV,EAAM3D,gBACN2D,EAAMhD,QAAQ,UAAWgD,EAAOA,EAAM7B,WAAYxG,EACpD,EAEAA,EAAQsI,QAAU,SAASC,GACrBI,GAAMI,IACNT,GAASA,EAAQhvB,KAAK0mB,EAAQzjB,QAAS8rB,EAAOE,EAAMvI,GACnDqI,EAAMO,SAASP,EAAMhD,QAAQ,OAAQgD,EAAOE,EAAMvI,EACzD,EAEA,IAAI8I,GAAM,EAQV,OAPIhrB,KAAK8qB,QACPrG,EAAEyG,MAAMhJ,EAAQsI,UAEhBG,EAAU3qB,KAAMkiB,GAChB8I,EAAMhrB,KAAKkpB,KAAK,SAAUlpB,KAAMkiB,IAE7B2I,GAAMI,IACJD,CACT,EAKArU,IAAK,WACH,IAAIvF,EACFqT,EAAE3oB,OAAOkE,KAAM,YACfykB,EAAE3oB,OAAOkE,KAAK0oB,WAAY,QAC1ByC,IACF,GAAInrB,KAAK8qB,QAAS,OAAO1Z,EACzB,IAAIpE,EAAKhN,KAAKmK,IAAInK,KAAKgpB,aACvB,OAAO5X,EAAKzM,QAAQ,SAAU,OAAS8S,mBAAmBzK,EAC5D,EAIAnJ,MAAO,SAAS4mB,EAAMvI,GACpB,OAAOuI,CACT,EAGAxB,MAAO,WACL,OAAO,IAAIjpB,KAAKorB,YAAYprB,KAAKqoB,WACnC,EAGAyC,MAAO,WACL,OAAQ9qB,KAAKqpB,IAAIrpB,KAAKgpB,YACxB,EAGAqC,QAAS,SAASnJ,GAChB,OAAOliB,KAAKspB,UAAU,CAAC,EAAG7E,EAAE0D,OAAO,CAAC,EAAGjG,EAAS,CAAChlB,UAAU,IAC7D,EAIAosB,UAAW,SAAShB,EAAOpG,GACzB,IAAKA,EAAQhlB,WAAa8C,KAAK9C,SAAU,OAAO,EAChDorB,EAAQ7D,EAAE0D,OAAO,CAAC,EAAGnoB,KAAKqoB,WAAYC,GACtC,IAAIxkB,EAAQ9D,KAAK+oB,gBAAkB/oB,KAAK9C,SAASorB,EAAOpG,IAAY,KACpE,OAAKpe,IACL9D,KAAKunB,QAAQ,UAAWvnB,KAAM8D,EAAO2gB,EAAE0D,OAAOjG,EAAS,CAAC6G,gBAAiBjlB,MAClE,EACT,IAiBF,IAAIwnB,EAAa3G,EAAS2G,WAAa,SAASC,EAAQrJ,GACtDA,IAAYA,EAAU,CAAC,GACvBliB,KAAKuoB,cAAcxoB,MAAMC,KAAMN,WAC3BwiB,EAAQqI,QAAOvqB,KAAKuqB,MAAQrI,EAAQqI,YACb,IAAvBrI,EAAQsJ,aAAuBxrB,KAAKwrB,WAAatJ,EAAQsJ,YAC7DxrB,KAAKyrB,SACLzrB,KAAK8oB,WAAW/oB,MAAMC,KAAMN,WACxB6rB,GAAQvrB,KAAKqY,MAAMkT,EAAQ9G,EAAE0D,OAAO,CAACqB,QAAQ,GAAOtH,GAC1D,EAGIwJ,EAAa,CAACljB,KAAK,EAAMmjB,QAAQ,EAAM9iB,OAAO,GAC9C+iB,EAAa,CAACpjB,KAAK,EAAMmjB,QAAQ,GAGjCE,EAAS,SAASC,EAAOC,EAAQC,GACnCA,EAAK1a,KAAKpV,IAAIoV,KAAKnV,IAAI6vB,EAAI,GAAIF,EAAMjxB,QACrC,IAEIF,EAFAsxB,EAAOvhB,MAAMohB,EAAMjxB,OAASmxB,GAC5BnxB,EAASkxB,EAAOlxB,OAEpB,IAAKF,EAAI,EAAGA,EAAIsxB,EAAKpxB,OAAQF,IAAKsxB,EAAKtxB,GAAKmxB,EAAMnxB,EAAIqxB,GACtD,IAAKrxB,EAAI,EAAGA,EAAIE,EAAQF,IAAKmxB,EAAMnxB,EAAIqxB,GAAMD,EAAOpxB,GACpD,IAAKA,EAAI,EAAGA,EAAIsxB,EAAKpxB,OAAQF,IAAKmxB,EAAMnxB,EAAIE,EAASmxB,GAAMC,EAAKtxB,EAClE,EAGA8pB,EAAE0D,OAAOmD,EAAWhwB,UAAW4pB,EAAQ,CAIrCqF,MAAOnC,EAKPG,cAAe,WAAW,EAI1BO,WAAY,WAAW,EAIvB7nB,OAAQ,SAASihB,GACf,OAAOliB,KAAK+E,KAAI,SAASwlB,GAAS,OAAOA,EAAMtpB,OAAOihB,EAAU,GAClE,EAGAgH,KAAM,WACJ,OAAOvE,EAASuE,KAAKnpB,MAAMC,KAAMN,UACnC,EAKA8I,IAAK,SAAS+iB,EAAQrJ,GACpB,OAAOliB,KAAK4oB,IAAI2C,EAAQ9G,EAAE0D,OAAO,CAACtf,OAAO,GAAQqZ,EAAS0J,GAC5D,EAGAD,OAAQ,SAASJ,EAAQrJ,GACvBA,EAAUuC,EAAE0D,OAAO,CAAC,EAAGjG,GACvB,IAAIgK,GAAYzH,EAAE0H,QAAQZ,GAC1BA,EAASW,EAAW,CAACX,GAAUA,EAAOrmB,QACtC,IAAIknB,EAAUpsB,KAAKqsB,cAAcd,EAAQrJ,GAKzC,OAJKA,EAAQsH,QAAU4C,EAAQvxB,SAC7BqnB,EAAQuH,QAAU,CAAC6C,MAAO,GAAIC,OAAQ,GAAIH,QAASA,GACnDpsB,KAAKunB,QAAQ,SAAUvnB,KAAMkiB,IAExBgK,EAAWE,EAAQ,GAAKA,CACjC,EAMAxD,IAAK,SAAS2C,EAAQrJ,GACpB,GAAc,MAAVqJ,EAAJ,EAEArJ,EAAUuC,EAAE0D,OAAO,CAAC,EAAGuD,EAAYxJ,IACvBre,QAAU7D,KAAKwsB,SAASjB,KAClCA,EAASvrB,KAAK6D,MAAM0nB,EAAQrJ,IAAY,IAG1C,IAAIgK,GAAYzH,EAAE0H,QAAQZ,GAC1BA,EAASW,EAAW,CAACX,GAAUA,EAAOrmB,QAEtC,IAAI8mB,EAAK9J,EAAQ8J,GACP,MAANA,IAAYA,GAAMA,GAClBA,EAAKhsB,KAAKnF,SAAQmxB,EAAKhsB,KAAKnF,QAC5BmxB,EAAK,IAAGA,GAAMhsB,KAAKnF,OAAS,GAEhC,IAgBI0vB,EAAO5vB,EAhBPiuB,EAAM,GACN6D,EAAQ,GACRC,EAAU,GACVC,EAAW,GACXC,EAAW,CAAC,EAEZpkB,EAAM0Z,EAAQ1Z,IACdK,EAAQqZ,EAAQrZ,MAChB8iB,EAASzJ,EAAQyJ,OAEjBkB,GAAO,EACPC,EAAW9sB,KAAKwrB,YAAoB,MAANQ,IAA+B,IAAjB9J,EAAQ2K,KACpDE,EAAWtI,EAAEuI,SAAShtB,KAAKwrB,YAAcxrB,KAAKwrB,WAAa,KAK/D,IAAK7wB,EAAI,EAAGA,EAAI4wB,EAAO1wB,OAAQF,IAAK,CAClC4vB,EAAQgB,EAAO5wB,GAIf,IAAIsyB,EAAWjtB,KAAKmK,IAAIogB,GACxB,GAAI0C,EAAU,CACZ,GAAIpkB,GAAS0hB,IAAU0C,EAAU,CAC/B,IAAI3E,EAAQtoB,KAAKwsB,SAASjC,GAASA,EAAMlC,WAAakC,EAClDrI,EAAQre,QAAOykB,EAAQ2E,EAASppB,MAAMykB,EAAOpG,IACjD+K,EAASrE,IAAIN,EAAOpG,GACpBwK,EAAQ1wB,KAAKixB,GACTH,IAAaD,IAAMA,EAAOI,EAAShD,WAAW8C,GACpD,CACKH,EAASK,EAASzE,OACrBoE,EAASK,EAASzE,MAAO,EACzBI,EAAI5sB,KAAKixB,IAEX1B,EAAO5wB,GAAKsyB,CAGd,MAAWzkB,IACT+hB,EAAQgB,EAAO5wB,GAAKqF,KAAKktB,cAAc3C,EAAOrI,MAE5CuK,EAAMzwB,KAAKuuB,GACXvqB,KAAKmtB,cAAc5C,EAAOrI,GAC1B0K,EAASrC,EAAM/B,MAAO,EACtBI,EAAI5sB,KAAKuuB,GAGf,CAGA,GAAIoB,EAAQ,CACV,IAAKhxB,EAAI,EAAGA,EAAIqF,KAAKnF,OAAQF,IAEtBiyB,GADLrC,EAAQvqB,KAAKurB,OAAO5wB,IACA6tB,MAAMmE,EAAS3wB,KAAKuuB,GAEtCoC,EAAS9xB,QAAQmF,KAAKqsB,cAAcM,EAAUzK,EACpD,CAGA,IAAIkL,GAAe,EACfzoB,GAAWmoB,GAAYtkB,GAAOmjB,EAkBlC,GAjBI/C,EAAI/tB,QAAU8J,GAChByoB,EAAeptB,KAAKnF,SAAW+tB,EAAI/tB,QAAU4pB,EAAE4I,KAAKrtB,KAAKurB,QAAQ,SAASjH,EAAG/U,GAC3E,OAAO+U,IAAMsE,EAAIrZ,EACnB,IACAvP,KAAKurB,OAAO1wB,OAAS,EACrBgxB,EAAO7rB,KAAKurB,OAAQ3C,EAAK,GACzB5oB,KAAKnF,OAASmF,KAAKurB,OAAO1wB,QACjB4xB,EAAM5xB,SACXiyB,IAAUD,GAAO,GACrBhB,EAAO7rB,KAAKurB,OAAQkB,EAAa,MAANT,EAAahsB,KAAKnF,OAASmxB,GACtDhsB,KAAKnF,OAASmF,KAAKurB,OAAO1wB,QAIxBgyB,GAAM7sB,KAAK6sB,KAAK,CAACrD,QAAQ,KAGxBtH,EAAQsH,OAAQ,CACnB,IAAK7uB,EAAI,EAAGA,EAAI8xB,EAAM5xB,OAAQF,IAClB,MAANqxB,IAAY9J,EAAQ3S,MAAQyc,EAAKrxB,IACrC4vB,EAAQkC,EAAM9xB,IACR4sB,QAAQ,MAAOgD,EAAOvqB,KAAMkiB,IAEhC2K,GAAQO,IAAcptB,KAAKunB,QAAQ,OAAQvnB,KAAMkiB,IACjDuK,EAAM5xB,QAAU8xB,EAAS9xB,QAAU6xB,EAAQ7xB,UAC7CqnB,EAAQuH,QAAU,CAChB6C,MAAOG,EACPL,QAASO,EACTJ,OAAQG,GAEV1sB,KAAKunB,QAAQ,SAAUvnB,KAAMkiB,GAEjC,CAGA,OAAOgK,EAAWX,EAAO,GAAKA,CA/GJ,CAgH5B,EAMAlT,MAAO,SAASkT,EAAQrJ,GACtBA,EAAUA,EAAUuC,EAAEwE,MAAM/G,GAAW,CAAC,EACxC,IAAK,IAAIvnB,EAAI,EAAGA,EAAIqF,KAAKurB,OAAO1wB,OAAQF,IACtCqF,KAAKstB,iBAAiBttB,KAAKurB,OAAO5wB,GAAIunB,GAMxC,OAJAA,EAAQqL,eAAiBvtB,KAAKurB,OAC9BvrB,KAAKyrB,SACLF,EAASvrB,KAAKwI,IAAI+iB,EAAQ9G,EAAE0D,OAAO,CAACqB,QAAQ,GAAOtH,IAC9CA,EAAQsH,QAAQxpB,KAAKunB,QAAQ,QAASvnB,KAAMkiB,GAC1CqJ,CACT,EAGAvvB,KAAM,SAASuuB,EAAOrI,GACpB,OAAOliB,KAAKwI,IAAI+hB,EAAO9F,EAAE0D,OAAO,CAAC6D,GAAIhsB,KAAKnF,QAASqnB,GACrD,EAGA9c,IAAK,SAAS8c,GACZ,IAAIqI,EAAQvqB,KAAKgsB,GAAGhsB,KAAKnF,OAAS,GAClC,OAAOmF,KAAK2rB,OAAOpB,EAAOrI,EAC5B,EAGAsL,QAAS,SAASjD,EAAOrI,GACvB,OAAOliB,KAAKwI,IAAI+hB,EAAO9F,EAAE0D,OAAO,CAAC6D,GAAI,GAAI9J,GAC3C,EAGA/b,MAAO,SAAS+b,GACd,IAAIqI,EAAQvqB,KAAKgsB,GAAG,GACpB,OAAOhsB,KAAK2rB,OAAOpB,EAAOrI,EAC5B,EAGAhd,MAAO,WACL,OAAOA,EAAMnF,MAAMC,KAAKurB,OAAQ7rB,UAClC,EAIAyK,IAAK,SAAS/O,GACZ,GAAW,MAAPA,EACJ,OAAO4E,KAAKytB,MAAMryB,IAChB4E,KAAKytB,MAAMztB,KAAK0tB,QAAQ1tB,KAAKwsB,SAASpxB,GAAOA,EAAIitB,WAAajtB,EAAKA,EAAI4tB,eACvE5tB,EAAIotB,KAAOxoB,KAAKytB,MAAMryB,EAAIotB,IAC9B,EAGAa,IAAK,SAASjuB,GACZ,OAAwB,MAAjB4E,KAAKmK,IAAI/O,EAClB,EAGA4wB,GAAI,SAASzc,GAEX,OADIA,EAAQ,IAAGA,GAASvP,KAAKnF,QACtBmF,KAAKurB,OAAOhc,EACrB,EAIAoe,MAAO,SAASrF,EAAOsF,GACrB,OAAO5tB,KAAK4tB,EAAQ,OAAS,UAAUtF,EACzC,EAIAuF,UAAW,SAASvF,GAClB,OAAOtoB,KAAK2tB,MAAMrF,GAAO,EAC3B,EAKAuE,KAAM,SAAS3K,GACb,IAAIsJ,EAAaxrB,KAAKwrB,WACtB,IAAKA,EAAY,MAAM,IAAInnB,MAAM,0CACjC6d,IAAYA,EAAU,CAAC,GAEvB,IAAIrnB,EAAS2wB,EAAW3wB,OAUxB,OATI4pB,EAAEqJ,WAAWtC,KAAaA,EAAaA,EAAW7qB,KAAKX,OAG5C,IAAXnF,GAAgB4pB,EAAEuI,SAASxB,GAC7BxrB,KAAKurB,OAASvrB,KAAK+tB,OAAOvC,GAE1BxrB,KAAKurB,OAAOsB,KAAKrB,GAEdtJ,EAAQsH,QAAQxpB,KAAKunB,QAAQ,OAAQvnB,KAAMkiB,GACzCliB,IACT,EAGAguB,MAAO,SAAS7E,GACd,OAAOnpB,KAAK+E,IAAIokB,EAAO,GACzB,EAKAtH,MAAO,SAASK,GAEd,IAAIsI,GADJtI,EAAUuC,EAAE0D,OAAO,CAACtkB,OAAO,GAAOqe,IACZsI,QAClB9B,EAAa1oB,KAQjB,OAPAkiB,EAAQsI,QAAU,SAASC,GACzB,IAAI3rB,EAASojB,EAAQ7J,MAAQ,QAAU,MACvCqQ,EAAW5pB,GAAQ2rB,EAAMvI,GACrBsI,GAASA,EAAQhvB,KAAK0mB,EAAQzjB,QAASiqB,EAAY+B,EAAMvI,GAC7DwG,EAAWnB,QAAQ,OAAQmB,EAAY+B,EAAMvI,EAC/C,EACAyI,EAAU3qB,KAAMkiB,GACTliB,KAAKkpB,KAAK,OAAQlpB,KAAMkiB,EACjC,EAKA/T,OAAQ,SAASoc,EAAOrI,GAEtB,IAAI2I,GADJ3I,EAAUA,EAAUuC,EAAEwE,MAAM/G,GAAW,CAAC,GACrB2I,KAEnB,KADAN,EAAQvqB,KAAKktB,cAAc3C,EAAOrI,IACtB,OAAO,EACd2I,GAAM7qB,KAAKwI,IAAI+hB,EAAOrI,GAC3B,IAAIwG,EAAa1oB,KACbwqB,EAAUtI,EAAQsI,QAoBtB,OAnBAtI,EAAQsI,QAAU,SAASlG,EAAGmG,EAAMwD,GAC9BpD,IACFvG,EAAEmC,IAAI,QAASzmB,KAAKkuB,sBAAuBluB,MAC3C0oB,EAAWlgB,IAAI8b,EAAG2J,IAEhBzD,GAASA,EAAQhvB,KAAKyyB,EAAaxvB,QAAS6lB,EAAGmG,EAAMwD,EAC3D,EASIpD,GACFN,EAAMpD,KAAK,QAASnnB,KAAKkuB,sBAAuBluB,MAElDuqB,EAAMK,KAAK,KAAM1I,GACVqI,CACT,EAIA1mB,MAAO,SAAS4mB,EAAMvI,GACpB,OAAOuI,CACT,EAGAxB,MAAO,WACL,OAAO,IAAIjpB,KAAKorB,YAAYprB,KAAKurB,OAAQ,CACvChB,MAAOvqB,KAAKuqB,MACZiB,WAAYxrB,KAAKwrB,YAErB,EAGAkC,QAAS,SAASpF,EAAOU,GACvB,OAAOV,EAAMU,GAAehpB,KAAKuqB,MAAMjvB,UAAU0tB,aAAe,KAClE,EAGAmF,OAAQ,WACN,OAAO,IAAIC,EAAmBpuB,KAAMquB,EACtC,EAGA7I,KAAM,WACJ,OAAO,IAAI4I,EAAmBpuB,KAAMsuB,EACtC,EAGAC,QAAS,WACP,OAAO,IAAIH,EAAmBpuB,KAAMwuB,EACtC,EAIA/C,OAAQ,WACNzrB,KAAKnF,OAAS,EACdmF,KAAKurB,OAAS,GACdvrB,KAAKytB,MAAS,CAAC,CACjB,EAIAP,cAAe,SAAS5E,EAAOpG,GAC7B,OAAIliB,KAAKwsB,SAASlE,IACXA,EAAMI,aAAYJ,EAAMI,WAAa1oB,MACnCsoB,KAETpG,EAAUA,EAAUuC,EAAEwE,MAAM/G,GAAW,CAAC,GAChCwG,WAAa1oB,MAInBuqB,EADEvqB,KAAKuqB,MAAMjvB,UACL,IAAI0E,KAAKuqB,MAAMjC,EAAOpG,GAGtBliB,KAAKuqB,MAAMjC,EAAOpG,IAGjB6G,iBACX/oB,KAAKunB,QAAQ,UAAWvnB,KAAMuqB,EAAMxB,gBAAiB7G,IAC9C,GAF4BqI,GARnC,IAAIA,CAWN,EAGA8B,cAAe,SAASd,EAAQrJ,GAE9B,IADA,IAAIkK,EAAU,GACLzxB,EAAI,EAAGA,EAAI4wB,EAAO1wB,OAAQF,IAAK,CACtC,IAAI4vB,EAAQvqB,KAAKmK,IAAIohB,EAAO5wB,IAC5B,GAAK4vB,EAAL,CAEA,IAAIhb,EAAQvP,KAAKwE,QAAQ+lB,GACzBvqB,KAAKurB,OAAOM,OAAOtc,EAAO,GAC1BvP,KAAKnF,gBAIEmF,KAAKytB,MAAMlD,EAAM/B,KACxB,IAAIxb,EAAKhN,KAAK0tB,QAAQnD,EAAMlC,WAAYkC,EAAMvB,aACpC,MAANhc,UAAmBhN,KAAKytB,MAAMzgB,GAE7BkV,EAAQsH,SACXtH,EAAQ3S,MAAQA,EAChBgb,EAAMhD,QAAQ,SAAUgD,EAAOvqB,KAAMkiB,IAGvCkK,EAAQpwB,KAAKuuB,GACbvqB,KAAKstB,iBAAiB/C,EAAOrI,EAlBT,CAmBtB,CAEA,OADIqJ,EAAO1wB,OAAS,IAAMqnB,EAAQsH,eAAetH,EAAQ3S,MAClD6c,CACT,EAIAI,SAAU,SAASjC,GACjB,OAAOA,aAAiBnC,CAC1B,EAGA+E,cAAe,SAAS5C,EAAOrI,GAC7BliB,KAAKytB,MAAMlD,EAAM/B,KAAO+B,EACxB,IAAIvd,EAAKhN,KAAK0tB,QAAQnD,EAAMlC,WAAYkC,EAAMvB,aACpC,MAANhc,IAAYhN,KAAKytB,MAAMzgB,GAAMud,GACjCA,EAAM9E,GAAG,MAAOzlB,KAAKyuB,cAAezuB,KACtC,EAGAstB,iBAAkB,SAAS/C,EAAOrI,UACzBliB,KAAKytB,MAAMlD,EAAM/B,KACxB,IAAIxb,EAAKhN,KAAK0tB,QAAQnD,EAAMlC,WAAYkC,EAAMvB,aACpC,MAANhc,UAAmBhN,KAAKytB,MAAMzgB,GAC9BhN,OAASuqB,EAAM7B,mBAAmB6B,EAAM7B,WAC5C6B,EAAM9D,IAAI,MAAOzmB,KAAKyuB,cAAezuB,KACvC,EAMAyuB,cAAe,SAASlgB,EAAOgc,EAAO7B,EAAYxG,GAChD,GAAIqI,EAAO,CACT,IAAe,QAAVhc,GAA6B,WAAVA,IAAuBma,IAAe1oB,KAAM,OAEpE,GADc,YAAVuO,GAAqBvO,KAAK2rB,OAAOpB,EAAOrI,GAC9B,aAAV3T,EAAsB,CACxB,IAAIwb,EAAS/pB,KAAK0tB,QAAQnD,EAAMD,qBAAsBC,EAAMvB,aACxDhc,EAAKhN,KAAK0tB,QAAQnD,EAAMlC,WAAYkC,EAAMvB,aAChC,MAAVe,UAAuB/pB,KAAKytB,MAAM1D,GAC5B,MAAN/c,IAAYhN,KAAKytB,MAAMzgB,GAAMud,EACnC,CACF,CACAvqB,KAAKunB,QAAQxnB,MAAMC,KAAMN,UAC3B,EAOAwuB,sBAAuB,SAAS3D,EAAO7B,EAAYxG,GAG7CliB,KAAKqpB,IAAIkB,IACbvqB,KAAKyuB,cAAc,QAASlE,EAAO7B,EAAYxG,EACjD,IAMF,IAAIwM,EAA+B,oBAAXC,QAAyBA,OAAOC,SACpDF,IACFpD,EAAWhwB,UAAUozB,GAAcpD,EAAWhwB,UAAU6yB,QAU1D,IAAIC,EAAqB,SAAS1F,EAAYmG,GAC5C7uB,KAAK8uB,YAAcpG,EACnB1oB,KAAK+uB,MAAQF,EACb7uB,KAAKgvB,OAAS,CAChB,EAKIX,EAAkB,EAClBC,EAAgB,EAChBE,EAAsB,EAGtBE,IACFN,EAAmB9yB,UAAUozB,GAAc,WACzC,OAAO1uB,IACT,GAGFouB,EAAmB9yB,UAAUkU,KAAO,WAClC,GAAIxP,KAAK8uB,YAAa,CAGpB,GAAI9uB,KAAKgvB,OAAShvB,KAAK8uB,YAAYj0B,OAAQ,CACzC,IAIIwB,EAJAkuB,EAAQvqB,KAAK8uB,YAAY9C,GAAGhsB,KAAKgvB,QAKrC,GAJAhvB,KAAKgvB,SAIDhvB,KAAK+uB,QAAUV,EACjBhyB,EAAQkuB,MACH,CACL,IAAIvd,EAAKhN,KAAK8uB,YAAYpB,QAAQnD,EAAMlC,WAAYkC,EAAMvB,aAExD3sB,EADE2D,KAAK+uB,QAAUT,EACTthB,EAEA,CAACA,EAAIud,EAEjB,CACA,MAAO,CAACluB,MAAOA,EAAO4yB,MAAM,EAC9B,CAIAjvB,KAAK8uB,iBAAc,CACrB,CAEA,MAAO,CAACzyB,WAAO,EAAQ4yB,MAAM,EAC/B,EAeA,IAAIC,EAAOvK,EAASuK,KAAO,SAAShN,GAClCliB,KAAKwoB,IAAM/D,EAAEyB,SAAS,QACtBlmB,KAAKuoB,cAAcxoB,MAAMC,KAAMN,WAC/B+kB,EAAE0D,OAAOnoB,KAAMykB,EAAE0K,KAAKjN,EAASkN,IAC/BpvB,KAAKqvB,iBACLrvB,KAAK8oB,WAAW/oB,MAAMC,KAAMN,UAC9B,EAGI4vB,EAAwB,iBAGxBF,EAAc,CAAC,QAAS,aAAc,KAAM,KAAM,aAAc,YAAa,UAAW,UAG5F3K,EAAE0D,OAAO+G,EAAK5zB,UAAW4pB,EAAQ,CAG/B9F,QAAS,MAITsF,EAAG,SAAS6K,GACV,OAAOvvB,KAAKwvB,IAAIloB,KAAKioB,EACvB,EAIAhH,cAAe,WAAW,EAI1BO,WAAY,WAAW,EAKvB2G,OAAQ,WACN,OAAOzvB,IACT,EAIA2rB,OAAQ,WAGN,OAFA3rB,KAAK0vB,iBACL1vB,KAAK4mB,gBACE5mB,IACT,EAKA0vB,eAAgB,WACd1vB,KAAKwvB,IAAI7D,QACX,EAIAgE,WAAY,SAASC,GAInB,OAHA5vB,KAAK6vB,mBACL7vB,KAAK8vB,YAAYF,GACjB5vB,KAAK+vB,iBACE/vB,IACT,EAOA8vB,YAAa,SAAS9Q,GACpBhf,KAAKwvB,IAAMxQ,aAAc2F,EAASD,EAAI1F,EAAK2F,EAASD,EAAE1F,GACtDhf,KAAKgf,GAAKhf,KAAKwvB,IAAI,EACrB,EAeAO,eAAgB,SAAS3d,GAEvB,GADAA,IAAWA,EAASqS,EAAE3oB,OAAOkE,KAAM,YAC9BoS,EAAQ,OAAOpS,KAEpB,IAAK,IAAIrB,KADTqB,KAAK6vB,mBACWzd,EAAQ,CACtB,IAAItT,EAASsT,EAAOzT,GAEpB,GADK8lB,EAAEqJ,WAAWhvB,KAASA,EAASkB,KAAKlB,IACpCA,EAAL,CACA,IAAIoF,EAAQvF,EAAIuF,MAAMorB,GACtBtvB,KAAKgwB,SAAS9rB,EAAM,GAAIA,EAAM,GAAIpF,EAAO6B,KAAKX,MAFzB,CAGvB,CACA,OAAOA,IACT,EAKAgwB,SAAU,SAASC,EAAWV,EAAU/L,GAEtC,OADAxjB,KAAKwvB,IAAI/J,GAAGwK,EAAY,kBAAoBjwB,KAAKwoB,IAAK+G,EAAU/L,GACzDxjB,IACT,EAKA6vB,iBAAkB,WAEhB,OADI7vB,KAAKwvB,KAAKxvB,KAAKwvB,IAAI/I,IAAI,kBAAoBzmB,KAAKwoB,KAC7CxoB,IACT,EAIAkwB,WAAY,SAASD,EAAWV,EAAU/L,GAExC,OADAxjB,KAAKwvB,IAAI/I,IAAIwJ,EAAY,kBAAoBjwB,KAAKwoB,IAAK+G,EAAU/L,GAC1DxjB,IACT,EAIAmwB,eAAgB,SAAS/Q,GACvB,OAAO3E,SAAS6F,cAAclB,EAChC,EAMAiQ,eAAgB,WACd,GAAKrvB,KAAKgf,GAORhf,KAAK2vB,WAAWlL,EAAE3oB,OAAOkE,KAAM,WAPnB,CACZ,IAAIsoB,EAAQ7D,EAAE0D,OAAO,CAAC,EAAG1D,EAAE3oB,OAAOkE,KAAM,eACpCA,KAAKgN,KAAIsb,EAAMtb,GAAKyX,EAAE3oB,OAAOkE,KAAM,OACnCA,KAAKqf,YAAWiJ,EAAa,MAAI7D,EAAE3oB,OAAOkE,KAAM,cACpDA,KAAK2vB,WAAW3vB,KAAKmwB,eAAe1L,EAAE3oB,OAAOkE,KAAM,aACnDA,KAAKowB,eAAe9H,EACtB,CAGF,EAIA8H,eAAgB,SAAS/H,GACvBroB,KAAKwvB,IAAIrG,KAAKd,EAChB,IAWF,IAAIgI,EAAY,SAASjf,EAAMvW,EAAQiE,EAAQwxB,GAC7C,OAAQz1B,GACN,KAAK,EAAG,OAAO,WACb,OAAOuW,EAAKtS,GAAQkB,KAAKswB,GAC3B,EACA,KAAK,EAAG,OAAO,SAASj0B,GACtB,OAAO+U,EAAKtS,GAAQkB,KAAKswB,GAAYj0B,EACvC,EACA,KAAK,EAAG,OAAO,SAASgpB,EAAU5mB,GAChC,OAAO2S,EAAKtS,GAAQkB,KAAKswB,GAAYhhB,EAAG+V,EAAUrlB,MAAOvB,EAC3D,EACA,KAAK,EAAG,OAAO,SAAS4mB,EAAUkL,EAAY9xB,GAC5C,OAAO2S,EAAKtS,GAAQkB,KAAKswB,GAAYhhB,EAAG+V,EAAUrlB,MAAOuwB,EAAY9xB,EACvE,EACA,QAAS,OAAO,WACd,IAAIgE,EAAOyC,EAAM1J,KAAKkE,WAEtB,OADA+C,EAAK+qB,QAAQxtB,KAAKswB,IACXlf,EAAKtS,GAAQiB,MAAMqR,EAAM3O,EAClC,EAEJ,EAEI+tB,EAAuB,SAASC,EAAOrf,EAAMsf,EAASJ,GACxD7L,EAAEkM,KAAKD,GAAS,SAAS71B,EAAQiE,GAC3BsS,EAAKtS,KAAS2xB,EAAMn1B,UAAUwD,GAAUuxB,EAAUjf,EAAMvW,EAAQiE,EAAQwxB,GAC9E,GACF,EAGIhhB,EAAK,SAAS+V,EAAUuL,GAC1B,OAAInM,EAAEqJ,WAAWzI,GAAkBA,EAC/BZ,EAAEoM,SAASxL,KAAcuL,EAASpE,SAASnH,GAAkByL,EAAazL,GAC1EZ,EAAEuI,SAAS3H,GAAkB,SAASkF,GAAS,OAAOA,EAAMpgB,IAAIkb,EAAW,EACxEA,CACT,EACIyL,EAAe,SAASxI,GAC1B,IAAIyI,EAAUtM,EAAE/e,QAAQ4iB,GACxB,OAAO,SAASiC,GACd,OAAOwG,EAAQxG,EAAMlC,WACvB,CACF,EAKI2I,EAAoB,CAACC,QAAS,EAAGN,KAAM,EAAG5rB,IAAK,EAAGmsB,QAAS,EAAGC,OAAQ,EACxEC,MAAO,EAAGC,OAAQ,EAAGC,YAAa,EAAGC,MAAO,EAAGjqB,KAAM,EAAGkqB,OAAQ,EAAG3sB,OAAQ,EAC3E4sB,OAAQ,EAAGpP,OAAQ,EAAGqP,MAAO,EAAG/J,IAAK,EAAG0F,KAAM,EAAGsE,IAAK,EAAGC,QAAS,EAAGC,SAAU,EAC/EC,SAAU,EAAGC,OAAQ,EAAG51B,IAAK,EAAGD,IAAK,EAAG81B,QAAS,EAAGzhB,KAAM,EAAGqd,MAAO,EACpEqE,KAAM,EAAGC,KAAM,EAAGC,QAAS,EAAGC,KAAM,EAAGnG,KAAM,EAAGvM,KAAM,EAAG2S,KAAM,EAC/DC,QAAS,EAAGC,WAAY,EAAG/tB,QAAS,EAAGguB,QAAS,EAAGC,YAAa,EAChE3L,QAAS,EAAG4L,MAAO,EAAGC,OAAQ,EAAGC,UAAW,EAAGC,QAAS,EAAGC,QAAS,EACpE/E,OAAQ,EAAGgF,QAAS,EAAGC,UAAW,EAAGC,cAAe,GAKlDC,EAAe,CAAC1N,KAAM,EAAG2I,OAAQ,EAAGgF,MAAO,EAAGC,OAAQ,EAAGjE,KAAM,EACjEkE,KAAM,EAAGX,MAAO,EAAG5L,QAAS,GAI9BrC,EAAEkM,KAAK,CACL,CAACrF,EAAY0F,EAAmB,UAChC,CAAC5I,EAAO8K,EAAc,gBACrB,SAAS3e,GACV,IAAI+e,EAAO/e,EAAO,GACdmc,EAAUnc,EAAO,GACjB+b,EAAY/b,EAAO,GAEvB+e,EAAKC,MAAQ,SAASn4B,GACpB,IAAIo4B,EAAW/O,EAAE0M,OAAO1M,EAAEgP,UAAUr4B,IAAM,SAASs4B,EAAMn0B,GAEvD,OADAm0B,EAAKn0B,GAAQ,EACNm0B,CACT,GAAG,CAAC,GACJlD,EAAqB8C,EAAMl4B,EAAKo4B,EAAUlD,EAC5C,EAEAE,EAAqB8C,EAAM7O,EAAGiM,EAASJ,EACzC,IAoBA3L,EAASuE,KAAO,SAASpqB,EAAQyrB,EAAOrI,GACtC,IAAIphB,EAAO6yB,EAAU70B,GAGrB2lB,EAAEkE,SAASzG,IAAYA,EAAU,CAAC,GAAI,CACpC6C,YAAaJ,EAASI,YACtBC,YAAaL,EAASK,cAIxB,IAAI4O,EAAS,CAAC9yB,KAAMA,EAAM+yB,SAAU,QAqBpC,GAlBK3R,EAAQvL,MACXid,EAAOjd,IAAM8N,EAAE3oB,OAAOyuB,EAAO,QAAUY,KAIrB,MAAhBjJ,EAAQ5b,OAAgBikB,GAAqB,WAAXzrB,GAAkC,WAAXA,GAAkC,UAAXA,IAClF80B,EAAOE,YAAc,mBACrBF,EAAOttB,KAAOK,KAAKC,UAAUsb,EAAQoG,OAASiC,EAAMtpB,OAAOihB,KAIzDA,EAAQ8C,cACV4O,EAAOE,YAAc,oCACrBF,EAAOttB,KAAOstB,EAAOttB,KAAO,CAACikB,MAAOqJ,EAAOttB,MAAQ,CAAC,GAKlD4b,EAAQ6C,cAAyB,QAATjkB,GAA2B,WAATA,GAA8B,UAATA,GAAmB,CACpF8yB,EAAO9yB,KAAO,OACVohB,EAAQ8C,cAAa4O,EAAOttB,KAAKytB,QAAUjzB,GAC/C,IAAIkzB,EAAa9R,EAAQ8R,WACzB9R,EAAQ8R,WAAa,SAAShJ,GAE5B,GADAA,EAAI9S,iBAAiB,yBAA0BpX,GAC3CkzB,EAAY,OAAOA,EAAWj0B,MAAMC,KAAMN,UAChD,CACF,CAGoB,QAAhBk0B,EAAO9yB,MAAmBohB,EAAQ8C,cACpC4O,EAAOK,aAAc,GAIvB,IAAInwB,EAAQoe,EAAQpe,MACpBoe,EAAQpe,MAAQ,SAASknB,EAAKkJ,EAAYC,GACxCjS,EAAQgS,WAAaA,EACrBhS,EAAQiS,YAAcA,EAClBrwB,GAAOA,EAAMtI,KAAK0mB,EAAQzjB,QAASusB,EAAKkJ,EAAYC,EAC1D,EAGA,IAAInJ,EAAM9I,EAAQ8I,IAAMrG,EAASyP,KAAK3P,EAAE0D,OAAOyL,EAAQ1R,IAEvD,OADAqI,EAAMhD,QAAQ,UAAWgD,EAAOS,EAAK9I,GAC9B8I,CACT,EAGA,IAAI2I,EAAY,CACd,OAAU,OACV,OAAU,MACV,MAAS,QACT,OAAU,SACV,KAAQ,OAKVhP,EAASyP,KAAO,WACd,OAAOzP,EAASD,EAAE0P,KAAKr0B,MAAM4kB,EAASD,EAAGhlB,UAC3C,EAOA,IAAI20B,EAAS1P,EAAS0P,OAAS,SAASnS,GACtCA,IAAYA,EAAU,CAAC,GACvBliB,KAAKuoB,cAAcxoB,MAAMC,KAAMN,WAC3BwiB,EAAQoS,SAAQt0B,KAAKs0B,OAASpS,EAAQoS,QAC1Ct0B,KAAKu0B,cACLv0B,KAAK8oB,WAAW/oB,MAAMC,KAAMN,UAC9B,EAII80B,EAAgB,aAChBC,EAAgB,eAChBC,EAAgB,SAChBC,EAAgB,2BAGpBlQ,EAAE0D,OAAOkM,EAAO/4B,UAAW4pB,EAAQ,CAIjCqD,cAAe,WAAW,EAI1BO,WAAY,WAAW,EAQvB8L,MAAO,SAASA,EAAOr1B,EAAM+lB,GACtBb,EAAEoQ,SAASD,KAAQA,EAAQ50B,KAAK80B,eAAeF,IAChDnQ,EAAEqJ,WAAWvuB,KACf+lB,EAAW/lB,EACXA,EAAO,IAEJ+lB,IAAUA,EAAWtlB,KAAKT,IAC/B,IAAIw1B,EAAS/0B,KASb,OARA2kB,EAAS1E,QAAQ2U,MAAMA,GAAO,SAASI,GACrC,IAAIvyB,EAAOsyB,EAAOE,mBAAmBL,EAAOI,IACC,IAAzCD,EAAOG,QAAQ5P,EAAU7iB,EAAMlD,KACjCw1B,EAAOxN,QAAQxnB,MAAMg1B,EAAQ,CAAC,SAAWx1B,GAAMvE,OAAOyH,IACtDsyB,EAAOxN,QAAQ,QAAShoB,EAAMkD,GAC9BkiB,EAAS1E,QAAQsH,QAAQ,QAASwN,EAAQx1B,EAAMkD,GAEpD,IACOzC,IACT,EAIAk1B,QAAS,SAAS5P,EAAU7iB,EAAMlD,GAC5B+lB,GAAUA,EAASvlB,MAAMC,KAAMyC,EACrC,EAGA0yB,SAAU,SAASH,EAAU9S,GAE3B,OADAyC,EAAS1E,QAAQkV,SAASH,EAAU9S,GAC7BliB,IACT,EAKAu0B,YAAa,WACX,GAAKv0B,KAAKs0B,OAAV,CACAt0B,KAAKs0B,OAAS7P,EAAE3oB,OAAOkE,KAAM,UAE7B,IADA,IAAI40B,EAAON,EAAS7P,EAAEe,KAAKxlB,KAAKs0B,QACC,OAAzBM,EAAQN,EAAOlvB,QACrBpF,KAAK40B,MAAMA,EAAO50B,KAAKs0B,OAAOM,GAJR,CAM1B,EAIAE,eAAgB,SAASF,GAOvB,OANAA,EAAQA,EAAMjwB,QAAQgwB,EAAc,QACnChwB,QAAQ6vB,EAAe,WACvB7vB,QAAQ8vB,GAAY,SAASvwB,EAAOkxB,GACnC,OAAOA,EAAWlxB,EAAQ,UAC5B,IACCS,QAAQ+vB,EAAY,YACd,IAAI/pB,OAAO,IAAMiqB,EAAQ,uBAClC,EAKAK,mBAAoB,SAASL,EAAOI,GAClC,IAAIpB,EAASgB,EAAMlwB,KAAKswB,GAAU9vB,MAAM,GACxC,OAAOuf,EAAE1f,IAAI6uB,GAAQ,SAASyB,EAAO16B,GAEnC,OAAIA,IAAMi5B,EAAO/4B,OAAS,EAAUw6B,GAAS,KACtCA,EAAQC,mBAAmBD,GAAS,IAC7C,GACF,IAYF,IAAIE,EAAU5Q,EAAS4Q,QAAU,WAC/Bv1B,KAAKumB,SAAW,GAChBvmB,KAAKw1B,SAAWx1B,KAAKw1B,SAAS70B,KAAKX,MAGb,qBAAXE,SACTF,KAAKG,SAAWD,OAAOC,SACvBH,KAAKigB,QAAU/f,OAAO+f,QAE1B,EAGIwV,EAAgB,eAGhBC,EAAe,aAGfC,EAAe,OAGnBJ,EAAQK,SAAU,EAGlBnR,EAAE0D,OAAOoN,EAAQj6B,UAAW4pB,EAAQ,CAIlC2Q,SAAU,GAGVC,OAAQ,WAEN,OADW91B,KAAKG,SAASuY,SAAS/T,QAAQ,SAAU,SACpC3E,KAAKoB,OAASpB,KAAK+1B,WACrC,EAGAC,UAAW,WAGT,OAFWh2B,KAAKi2B,eAAej2B,KAAKG,SAASuY,UACzBxT,MAAM,EAAGlF,KAAKoB,KAAKvG,OAAS,GAAK,MACjCmF,KAAKoB,IAC3B,EAKA60B,eAAgB,SAASjB,GACvB,OAAOkB,UAAUlB,EAASrwB,QAAQ,OAAQ,SAC5C,EAIAoxB,UAAW,WACT,IAAI7xB,EAAQlE,KAAKG,SAASgb,KAAKxW,QAAQ,MAAO,IAAIT,MAAM,QACxD,OAAOA,EAAQA,EAAM,GAAK,EAC5B,EAIAiyB,QAAS,SAASj2B,GAChB,IAAIgE,GAAShE,GAAUF,MAAMG,SAASgb,KAAKjX,MAAM,UACjD,OAAOA,EAAQA,EAAM,GAAK,EAC5B,EAGAkyB,QAAS,WACP,IAAIzuB,EAAO3H,KAAKi2B,eACdj2B,KAAKG,SAASuY,SAAW1Y,KAAK+1B,aAC9B7wB,MAAMlF,KAAKoB,KAAKvG,OAAS,GAC3B,MAA0B,MAAnB8M,EAAK5F,OAAO,GAAa4F,EAAKzC,MAAM,GAAKyC,CAClD,EAGA0uB,YAAa,SAASrB,GAQpB,OAPgB,MAAZA,IAEAA,EADEh1B,KAAKs2B,gBAAkBt2B,KAAKu2B,iBACnBv2B,KAAKo2B,UAELp2B,KAAKm2B,WAGbnB,EAASrwB,QAAQ8wB,EAAe,GACzC,EAIAjY,MAAO,SAAS0E,GACd,GAAIqT,EAAQK,QAAS,MAAM,IAAIvxB,MAAM,6CAqBrC,GApBAkxB,EAAQK,SAAU,EAIlB51B,KAAKkiB,QAAmBuC,EAAE0D,OAAO,CAAC/mB,KAAM,KAAMpB,KAAKkiB,QAASA,GAC5DliB,KAAKoB,KAAmBpB,KAAKkiB,QAAQ9gB,KACrCpB,KAAKw2B,eAAmBx2B,KAAKkiB,QAAQuU,cACrCz2B,KAAKu2B,kBAA+C,IAA5Bv2B,KAAKkiB,QAAQwU,WACrC12B,KAAK22B,eAAmB,iBAAkBz2B,cAAqC,IAA1Bua,SAASmc,cAA2Bnc,SAASmc,aAAe,GACjH52B,KAAK62B,eAAmB72B,KAAKu2B,kBAAoBv2B,KAAK22B,eACtD32B,KAAK82B,kBAAqB92B,KAAKkiB,QAAQ9B,UACvCpgB,KAAK+2B,iBAAsB/2B,KAAKigB,UAAWjgB,KAAKigB,QAAQG,WACxDpgB,KAAKs2B,cAAmBt2B,KAAK82B,iBAAmB92B,KAAK+2B,cACrD/2B,KAAKg1B,SAAmBh1B,KAAKq2B,cAG7Br2B,KAAKoB,MAAQ,IAAMpB,KAAKoB,KAAO,KAAKuD,QAAQ+wB,EAAc,KAItD11B,KAAKu2B,kBAAoBv2B,KAAK82B,gBAAiB,CAIjD,IAAK92B,KAAK+2B,gBAAkB/2B,KAAK81B,SAAU,CACzC,IAAIkB,EAAWh3B,KAAKoB,KAAK8D,MAAM,GAAI,IAAM,IAGzC,OAFAlF,KAAKG,SAASwE,QAAQqyB,EAAW,IAAMh3B,KAAKo2B,YAErC,CAIT,CAAWp2B,KAAK+2B,eAAiB/2B,KAAK81B,UACpC91B,KAAKm1B,SAASn1B,KAAKm2B,UAAW,CAACxxB,SAAS,GAG5C,CAKA,IAAK3E,KAAK22B,gBAAkB32B,KAAKu2B,mBAAqBv2B,KAAKs2B,cAAe,CACxEt2B,KAAKi3B,OAASxc,SAAS6F,cAAc,UACrCtgB,KAAKi3B,OAAOC,IAAM,eAClBl3B,KAAKi3B,OAAOE,MAAMC,QAAU,OAC5Bp3B,KAAKi3B,OAAOI,UAAY,EACxB,IAAIxgB,EAAO4D,SAAS5D,KAEhBygB,EAAUzgB,EAAK0gB,aAAav3B,KAAKi3B,OAAQpgB,EAAK2gB,YAAYC,cAC9DH,EAAQ7c,SAAStD,OACjBmgB,EAAQ7c,SAASid,QACjBJ,EAAQn3B,SAASqgB,KAAO,IAAMxgB,KAAKg1B,QACrC,CAGA,IAAIvW,EAAmBve,OAAOue,kBAAoB,SAASwR,EAAWzM,GACpE,OAAO9G,YAAY,KAAOuT,EAAWzM,EACvC,EAYA,GARIxjB,KAAKs2B,cACP7X,EAAiB,WAAYze,KAAKw1B,UAAU,GACnCx1B,KAAK62B,iBAAmB72B,KAAKi3B,OACtCxY,EAAiB,aAAcze,KAAKw1B,UAAU,GACrCx1B,KAAKu2B,mBACdv2B,KAAK23B,kBAAoBC,YAAY53B,KAAKw1B,SAAUx1B,KAAK61B,YAGtD71B,KAAKkiB,QAAQsH,OAAQ,OAAOxpB,KAAK63B,SACxC,EAIAC,KAAM,WAEJ,IAAIlW,EAAsB1hB,OAAO0hB,qBAAuB,SAASqO,EAAWzM,GAC1E,OAAOuU,YAAY,KAAO9H,EAAWzM,EACvC,EAGIxjB,KAAKs2B,cACP1U,EAAoB,WAAY5hB,KAAKw1B,UAAU,GACtCx1B,KAAK62B,iBAAmB72B,KAAKi3B,QACtCrV,EAAoB,aAAc5hB,KAAKw1B,UAAU,GAI/Cx1B,KAAKi3B,SACPxc,SAAS5D,KAAKmhB,YAAYh4B,KAAKi3B,QAC/Bj3B,KAAKi3B,OAAS,MAIZj3B,KAAK23B,mBAAmBM,cAAcj4B,KAAK23B,mBAC/CpC,EAAQK,SAAU,CACpB,EAIAhB,MAAO,SAASA,EAAOtP,GACrBtlB,KAAKumB,SAASiH,QAAQ,CAACoH,MAAOA,EAAOtP,SAAUA,GACjD,EAIAkQ,SAAU,SAAS7vB,GACjB,IAAIkkB,EAAU7pB,KAAKq2B,cAQnB,GAJIxM,IAAY7pB,KAAKg1B,UAAYh1B,KAAKi3B,SACpCpN,EAAU7pB,KAAKm2B,QAAQn2B,KAAKi3B,OAAOQ,gBAGjC5N,IAAY7pB,KAAKg1B,SAAU,OAAO,EAClCh1B,KAAKi3B,QAAQj3B,KAAKm1B,SAAStL,GAC/B7pB,KAAK63B,SACP,EAKAA,QAAS,SAAS7C,GAEhB,QAAKh1B,KAAKg2B,cACVhB,EAAWh1B,KAAKg1B,SAAWh1B,KAAKq2B,YAAYrB,GACrCvQ,EAAE4I,KAAKrtB,KAAKumB,UAAU,SAASS,GACpC,GAAIA,EAAQ4N,MAAM31B,KAAK+1B,GAErB,OADAhO,EAAQ1B,SAAS0P,IACV,CAEX,IACF,EASAG,SAAU,SAASH,EAAU9S,GAC3B,IAAKqT,EAAQK,QAAS,OAAO,EACxB1T,IAAuB,IAAZA,IAAkBA,EAAU,CAACqF,UAAWrF,IAGxD8S,EAAWh1B,KAAKq2B,YAAYrB,GAAY,IAGxC,IAAIgC,EAAWh3B,KAAKoB,KACfpB,KAAKw2B,gBAAgC,KAAbxB,GAA0C,MAAvBA,EAASjzB,OAAO,KAC9Di1B,EAAWA,EAAS9xB,MAAM,GAAI,IAAM,KAEtC,IAAIyR,EAAMqgB,EAAWhC,EAGrBA,EAAWA,EAASrwB,QAAQgxB,EAAc,IAG1C,IAAIuC,EAAkBl4B,KAAKi2B,eAAejB,GAE1C,GAAIh1B,KAAKg1B,WAAakD,EAAtB,CAIA,GAHAl4B,KAAKg1B,SAAWkD,EAGZl4B,KAAKs2B,cACPt2B,KAAKigB,QAAQiC,EAAQvd,QAAU,eAAiB,aAAa,CAAC,EAAG8V,SAASiG,MAAO/J,OAI5E,KAAI3W,KAAKu2B,iBAmBd,OAAOv2B,KAAKG,SAASL,OAAO6W,GAjB5B,GADA3W,KAAKm4B,YAAYn4B,KAAKG,SAAU60B,EAAU9S,EAAQvd,SAC9C3E,KAAKi3B,QAAUjC,IAAah1B,KAAKm2B,QAAQn2B,KAAKi3B,OAAOQ,eAAgB,CACvE,IAAIH,EAAUt3B,KAAKi3B,OAAOQ,cAKrBvV,EAAQvd,UACX2yB,EAAQ7c,SAAStD,OACjBmgB,EAAQ7c,SAASid,SAGnB13B,KAAKm4B,YAAYb,EAAQn3B,SAAU60B,EAAU9S,EAAQvd,QACvD,CAMF,CACA,OAAIud,EAAQqF,QAAgBvnB,KAAK63B,QAAQ7C,QAAzC,CA9B6C,CA+B/C,EAIAmD,YAAa,SAASh4B,EAAU60B,EAAUrwB,GACxC,GAAIA,EAAS,CACX,IAAIwW,EAAOhb,EAASgb,KAAKxW,QAAQ,qBAAsB,IACvDxE,EAASwE,QAAQwW,EAAO,IAAM6Z,EAChC,MAEE70B,EAASqgB,KAAO,IAAMwU,CAE1B,IAKFrQ,EAAS1E,QAAU,IAAIsV,EAQvB,IAAIpN,EAAS,SAASiQ,EAAYC,GAChC,IACIC,EADAC,EAASv4B,KAwBb,OAjBEs4B,EADEF,GAAc3T,EAAE4E,IAAI+O,EAAY,eAC1BA,EAAWhN,YAEX,WAAY,OAAOmN,EAAOx4B,MAAMC,KAAMN,UAAY,EAI5D+kB,EAAE0D,OAAOmQ,EAAOC,EAAQF,GAIxBC,EAAMh9B,UAAYmpB,EAAEtW,OAAOoqB,EAAOj9B,UAAW88B,GAC7CE,EAAMh9B,UAAU8vB,YAAckN,EAI9BA,EAAME,UAAYD,EAAOj9B,UAElBg9B,CACT,EAGAlQ,EAAMD,OAASmD,EAAWnD,OAASkM,EAAOlM,OAAS+G,EAAK/G,OAASoN,EAAQpN,OAASA,EAGlF,IAAIgD,EAAW,WACb,MAAM,IAAI9mB,MAAM,iDAClB,EAGIsmB,EAAY,SAASJ,EAAOrI,GAC9B,IAAIpe,EAAQoe,EAAQpe,MACpBoe,EAAQpe,MAAQ,SAAS2mB,GACnB3mB,GAAOA,EAAMtI,KAAK0mB,EAAQzjB,QAAS8rB,EAAOE,EAAMvI,GACpDqI,EAAMhD,QAAQ,QAASgD,EAAOE,EAAMvI,EACtC,CACF,EAEA,OAAOyC,CACT,CArkEsBtjB,CAAQD,EAAMjH,EAASsqB,EAAGC,EAC3C,yDCZL,IAAI+T,EAAU,CAAC,EAEXC,EAAiB,KAEjBC,GAAiB,EACjBC,EAAiB,SACjBC,EAAiB,eACjBC,EAAiB,GACjBC,EAAiB,CAAC,EAClBC,EAAiB,CAAC,EAOtBP,EAAQQ,UAAY,SAAS/e,GACzB,IAAK,IAAIvf,KAAKu+B,EACV,GAAIv+B,GAAKuf,EAEL,YADAwe,EAAUxe,GAIlB,MAAM,IAAI7V,MAAM,mBAAmB6V,EACvC,EAEAue,EAAQU,UAAY,SAASjf,EAAQkf,GAIjC,IAAK,IAAIt3B,IAHuB,qBAArBo3B,EAAShf,KAChBgf,EAAShf,GAAU,CAAC,GAERkf,EACZF,EAAShf,GAAQpY,GAAOs3B,EAAat3B,EAE7C,EAEA22B,EAAQY,SAAW,SAASC,GAEF,kBADtBN,EAASM,IACoC,OAAXN,IAC9BA,EAAS,CAAC,EAElB,EAEAP,EAAQc,cAAgB,SAASC,GAEF,kBAD3BT,EAAcS,IACyC,OAAhBT,IACnCA,EAAc,CAAC,EAEvB,EAEAN,EAAQgB,MAAQ,WACZ,IAAI33B,EAAQ,GACR43B,EAAQC,EAAW,MACnBrqB,EAAQ,KAEZ,OAAQ5P,UAAU7E,QACd,KAAK,EAEDiH,EAAMpC,UAAU,GAChB,MACJ,KAAK,EAEDoC,EAAMpC,UAAU,GACW,mBAAhBA,UAAU,GACjB4P,EAAK5P,UAAU,GAEfg6B,EAAQh6B,UAAU,GAEtB,MACJ,KAAK,EAEDoC,EAAQpC,UAAU,GAClBg6B,EAAQh6B,UAAU,GAClB4P,EAAQ5P,UAAU,GAClB,MACJ,QACI,MAAM,IAAI2E,MAAM,+CAGxB,OAAOo0B,EAAQmB,OAAO93B,EAAK,CAEvB,MAAY43B,EACZ,KAAYV,EAAOa,GACnB,MAAYd,EAAYc,GACxB,SAAYvqB,GACb,CAGC,SAAYA,IAAM,GAE1B,EAEAmpB,EAAQqB,QAAU,WACd,IAAIh4B,EAAc,GACdi4B,EAAcJ,EAAW,UACzBK,EAAcL,EAAW,WACzBrqB,EAAc,KAElB,OAAQ5P,UAAU7E,QACd,KAAK,EACDiH,EAAMpC,UAAU,GAChB,MACJ,KAAK,EACDoC,EAAMpC,UAAU,GACW,mBAAhBA,UAAU,GACjB4P,EAAK5P,UAAU,GAEfq6B,EAAcr6B,UAAU,GAE5B,MACJ,KAAK,EACDoC,EAAcpC,UAAU,GACxBq6B,EAAcr6B,UAAU,GACG,mBAAhBA,UAAU,GACjB4P,EAAK5P,UAAU,GAEfs6B,EAAUt6B,UAAU,GAExB,MACJ,KAAK,EACDoC,EAAcpC,UAAU,GACxBq6B,EAAcr6B,UAAU,GACxBs6B,EAAct6B,UAAU,GACxB4P,EAAc5P,UAAU,GACxB,MACJ,QACI,MAAM,IAAI2E,MAAM,+CAGxB,IAAI41B,EAAiB,WACjB,GAAkB,oBAAP3qB,EACP,OAAOA,GAAG,EAElB,EAQA,OAAOmpB,EAAQmB,OAAO93B,EAAK,CAAC,CAExB,MAAYi4B,EACZ,KAAYf,EAAOkB,OACnB,MAAYnB,EAAYmB,OACxB,SAAYD,GACb,CAEC,MAAYD,EACZ,KAAYhB,EAAOmB,QACnB,MAAYpB,EAAYoB,QACxB,SAjBkB,WAClB,GAAkB,oBAAP7qB,EACP,OAAOA,GAAG,EAElB,IAcI,CAEA,SAAY2qB,GAEpB,EAEAxB,EAAQ2B,OAAS,WACb,IAAIt4B,EAAc,GACdi4B,EAAcJ,EAAW,UACzBK,EAAcL,EAAW,WACzBrqB,EAAc,KACdihB,EAAc,GAElB,OAAQ7wB,UAAU7E,QACd,KAAK,EACDiH,EAAMpC,UAAU,GAChB,MACJ,KAAK,EACDoC,EAAMpC,UAAU,GACW,mBAAhBA,UAAU,GACjB4P,EAAK5P,UAAU,GAEfq6B,EAAcr6B,UAAU,GAE5B,MACJ,KAAK,EACDoC,EAAcpC,UAAU,GACxBq6B,EAAcr6B,UAAU,GACG,mBAAhBA,UAAU,GACjB4P,EAAK5P,UAAU,GAEfs6B,EAAUt6B,UAAU,GAExB,MACJ,KAAK,EACDoC,EAAcpC,UAAU,GACxBq6B,EAAcr6B,UAAU,GACxBs6B,EAAct6B,UAAU,GACxB4P,EAAc5P,UAAU,GACxB,MACJ,KAAK,EACDoC,EAAcpC,UAAU,GACxBq6B,EAAcr6B,UAAU,GACxBs6B,EAAct6B,UAAU,GACxB4P,EAAc5P,UAAU,GACxB6wB,EAAc7wB,UAAU,GACxB,MACJ,QACI,MAAM,IAAI2E,MAAM,+CAGxB,IAAIg2B,EAASv4B,EAGTw4B,EAAO5V,EAAE,iBACb4V,EAAKC,OAAO,4CAA8ChK,EAAa,QAEvE,IAAI0J,EAAiB,WACjB,GAAkB,oBAAP3qB,EAGP,OAAOA,EAAG,KAElB,EAQIkrB,EAAM/B,EAAQmB,OAAOU,EAAM,CAAC,CAE5B,MAAYP,EACZ,KAAYf,EAAOkB,OACnB,MAAYnB,EAAYmB,OACxB,SAAaD,GACd,CAEC,MAAYD,EACZ,KAAYhB,EAAOmB,QACnB,MAAYpB,EAAYoB,QACxB,SAjBkB,WAClB,GAAkB,oBAAP7qB,EACP,OAAOA,EAAGgrB,EAAKhzB,KAAK,oBAAoB5M,MAEhD,IAcI,CAEA,OAAY2/B,EAEZ,MAAY,EACZ,SAAYJ,IAqBhB,OAbAO,EAAI/U,GAAG,SAAS,WACZ6U,EAAKhzB,KAAK,oBAAoBmzB,QAI9BH,EAAK7U,GAAG,UAAU,SAAS9f,GACvBA,EAAE+0B,iBACFF,EAAIlzB,KAAK,gBAAgBqzB,OAC7B,GACJ,IAEAH,EAAII,MAAM,QAEHJ,CACX,EAEA/B,EAAQmB,OAAS,SAAS93B,EAAKykB,EAAUrE,GACrC,IAAI2Y,EAAa,GACbnrB,EAAa,GAEZwS,IACDA,EAAU,CAAC,GAIS,qBAAbqE,EACPA,EAAW,GACsB,oBAAnBA,EAAS1rB,SACvB0rB,EAAW,CAACA,IAIhB,IADA,IAAI5rB,EAAI4rB,EAAS1rB,OACVF,KAAK,CACR,IAAI++B,EAAW,KAEXoB,EAAW,KACXC,EAAW,GACXzV,EAAW,KAEf,GAAsC,oBAA3BiB,EAAS5rB,GAAU,OACQ,oBAA3B4rB,EAAS5rB,GAAU,OACQ,oBAA3B4rB,EAAS5rB,GAAa,SAAkB,CAG/C,IAAIqgC,EAAY,EACZC,EAAY,KAGhB,IAAK,IAAI53B,KAAKkjB,EAAS5rB,GAEnB,GADAsgC,EAAW53B,IACL23B,EAAY,EAEd,MAIS,GAAbA,GAA2C,mBAAlBzU,EAAS5rB,GAAG0I,KAErCkjB,EAAS5rB,GAAU,MAAOsgC,EAC1B1U,EAAS5rB,GAAa,SAAI4rB,EAAS5rB,GAAG0I,GAE9C,CAEqC,mBAA1BkjB,EAAS5rB,GAAa,WAC7B2qB,EAAWiB,EAAS5rB,GAAa,UAGjC4rB,EAAS5rB,GAAU,MACnBmgC,EAASvU,EAAS5rB,GAAU,MACrBA,GAAK4rB,EAAS1rB,OAAQ,GAAK0rB,EAAS1rB,QAAU,IAErDigC,EAAS,eAITpB,EADAnT,EAAS5rB,GAAU,MACX4rB,EAAS5rB,GAAU,MAEnB,WAAWA,EAAE,GAGrB4rB,EAAS5rB,GAAS,OAClBogC,EAAO,aAAaxU,EAAS5rB,GAAS,KAAE,WAU5CkgC,EAAU,oBAAoBlgC,EAAE,gBAAgBmgC,EAAO,YAPnDvU,EAAS5rB,GAAS,KACX4rB,EAAS5rB,GAAS,KAGlBk+B,GAGgE,KAAKkC,EAAQrB,EAAM,OAASmB,EAEvGnrB,EAAU/U,GAAK2qB,CACnB,CAQA,IAAI7gB,EAAQ,CAAC,sEAEb,GAAIyd,EAAgB,OAAG,CACnB,IAAIgZ,EAAc,IACyB,oBAAhChZ,EAA2B,mBAAoBA,EAA2B,qBACjFgZ,EAAc,YAAYrC,EAAa,+BAG3Cp0B,EAAMzI,KAAK,6BAA6Bk/B,EAAY,OAAOhZ,EAAgB,OAAE,cACjF,CAGAzd,EAAMzI,KAAK,kCAEP6+B,GACAp2B,EAAMzI,KAAK,6BAA6B6+B,EAAQ,UAGpDp2B,EAAMzI,KAAK,UAEX,IAAIw+B,EAAM9V,EAAEjgB,EAAMlG,KAAK,QAGsB,qBAApB2jB,EAAQiZ,QAA2BxC,EAAWzW,EAAQiZ,UAG3EX,EAAIY,SAAS,QAGjB,IAAIC,EAA8C,qBAApBnZ,EAAQoZ,QAA2BxC,EAAW5W,EAAQoZ,QAQpF,SAASC,EAAS57B,GAEd,IAAI67B,EAAY,KACgB,oBAArBtZ,EAAQuZ,WAEfD,EAAYtZ,EAAQuZ,aAGN,IAAdD,GACAhB,EAAII,MAAM,OAElB,CAkFA,OApGIS,GACAb,EAAIY,SAASC,GAIjBb,EAAIlzB,KAAK,eAAekV,KAAK1a,GAgB7B04B,EAAI/U,GAAG,uBAAuB,SAAS9f,GAGnB,KAAZA,EAAE+1B,OAAgBxZ,EAAQuZ,UAC1BF,GAER,IAGAf,EAAI/U,GAAG,QAAS,WAAW,SAAS9f,GAChCA,EAAE+0B,iBACFa,GACJ,IAGAf,EAAI/U,GAAG,SAAS,WACZ+U,EAAIlzB,KAAK,uBAAuBmzB,OACpC,IAEAD,EAAI/U,GAAG,UAAU,WACb+U,EAAI7O,QACR,IAGA6O,EAAI/U,GAAG,QAAS,mBAAmB,SAAS9f,GAExC,IAAIqhB,EAAYtC,EAAE1kB,MAAMsG,KAAK,WACzBgJ,EAAYI,EAAUsX,GACtBwU,EAAY,KAIyB,qBAA9BxU,GAC8B,qBAA9BT,EAASS,GAAe,OAKnCrhB,EAAE+0B,iBAEgB,oBAAPprB,IACPksB,EAAYlsB,MAME,IAAdksB,GACAhB,EAAII,MAAM,QAElB,IAGAlW,EAAE,QAAQ6V,OAAOC,GAEjBA,EAAII,MAAM,CAENe,SAAyC,qBAAtBzZ,EAAQyZ,SAA6B/C,EAAY1W,EAAQyZ,SAE5EC,UAAW,EAKXC,MAAW,IAOfrB,EAAI/U,GAAG,QAAQ,SAAS9f,GACpB+e,EAAEjK,UAAUgM,IAAI,gBACpB,IAE4B,qBAAjBvE,EAAQ2Z,OAAyC,IAAjB3Z,EAAQ2Z,MAC/CrB,EAAII,MAAM,QAGPJ,CACX,EAOA/B,EAAQmC,MAAQ,WACZ,IAAI94B,EACA43B,EACAxX,EAEA4Z,EAAiB,CACjB,SAAY,KACZ,UAAY,EACZ,SAAYlD,GAGhB,OAAQl5B,UAAU7E,QACd,KAAK,EACDiH,EAAMpC,UAAU,GAChB,MACJ,KAAK,EACDoC,EAAMpC,UAAU,GACW,iBAAhBA,UAAU,GACjBwiB,EAAUxiB,UAAU,GAEpBg6B,EAAQh6B,UAAU,GAEtB,MACJ,KAAK,EACDoC,EAAUpC,UAAU,GACpBg6B,EAAUh6B,UAAU,GACpBwiB,EAAUxiB,UAAU,GACpB,MACJ,QACI,MAAM,IAAI2E,MAAM,+CAWxB,OARAy3B,EAAuB,OAAIpC,EAGvBxX,EADkB,iBAAXA,EACGwC,EAAEyD,OAAO2T,EAAgB5Z,GAEzB4Z,EAGPrD,EAAQmB,OAAO93B,EAAK,GAAIogB,EACnC,EAGAuW,EAAQsD,QAAU,WACdrX,EAAE,YAAYkW,MAAM,OACxB,EAEAnC,EAAQ0C,QAAU,SAASA,GACvBxC,EAAWwC,CACf,EAEA1C,EAAQkD,SAAW,SAASA,GACxB/C,EAAY+C,CAChB,EAEAlD,EAAQ6C,QAAU,SAASA,GACvBxC,EAAWwC,CACf,EAUA,IAAIpC,EAAW,CACX,GAAO,CACHW,GAAU,KACVK,OAAU,SACVC,QAAU,MAEd,GAAO,CACHN,GAAU,KACVK,OAAU,UACVC,QAAU,YAEd,GAAO,CACHN,GAAU,KACVK,OAAU,YACVC,QAAU,eAEd,GAAO,CACHN,GAAU,KACVK,OAAU,WACVC,QAAU,WAEd,GAAO,CACHN,GAAU,KACVK,OAAU,WACVC,QAAU,OAEd,GAAO,CACHN,GAAU,KACVK,OAAU,YACVC,QAAU,cAEd,GAAO,CACHN,GAAU,KACVK,OAAU,uCACVC,QAAU,0DAEd,GAAO,CACHN,GAAU,KACVK,OAAU,UACVC,QAAU,YAEd,GAAO,CACHN,GAAU,KACVK,OAAU,SACVC,QAAU,mBAIlB,SAASR,EAAW73B,EAAKoY,GAKrB,MAHsB,qBAAXA,IACPA,EAASwe,GAEwB,kBAA1BQ,EAAShf,GAAQpY,GACjBo3B,EAAShf,GAAQpY,GA/lBX,MAomBboY,EACOyf,EAAW73B,EArmBL,MAymBVA,CACX,CAEA5H,EAAOC,QAAUs+B,qEC9mBjB,MAAMuD,EAAU,CACdC,SAAU,yBACVC,YAAa,gBACbC,OAAQ,YACRC,OAAQ,SACRC,KAAM,KACNC,IAAK,QACLC,KAAM,KACNC,MAAO,WACPC,QAAS,cACTC,KAAM,QAGR,KAAUC,MAAMC,SAA2B,oBAAX,IAAwB,CACtDC,IAAK,SAELC,QAAS,WACP,OAAOd,CACT,EAEAn4B,MAAO,SAASxH,EAAO0gC,GAMrB,MALqB,kBAAV1gC,GAAwC,kBAAX0gC,EACtC1gC,EAAQ,IAAOA,EAAO0gC,GACX1gC,aAAiB,MAC5BA,EAAQ,IAAOA,IAEVA,EAAMgvB,UAAYhvB,EAAM2gC,UAAY,IAC7C,EAEAD,OAAQ,SAAS/hB,EAAM+hB,GACrB,OAAO,IAAO/hB,GAAM+hB,OAAOA,EAC7B,EAEAv0B,IAAK,SAASwS,EAAMiiB,EAAQC,GAC1B,OAAO,IAAOliB,GAAMxS,IAAIy0B,EAAQC,GAAMF,SACxC,EAEA7S,KAAM,SAAShuB,EAAKD,EAAKghC,GACvB,OAAO,IAAO/gC,GAAKguB,KAAK,IAAOjuB,GAAMghC,EACvC,EAEAC,QAAS,SAASniB,EAAMkiB,EAAME,GAE5B,OADApiB,EAAO,IAAOA,GACD,YAATkiB,GACFE,EAAU9rB,KAAK+rB,MAAM/rB,KAAKpV,IAAIoV,KAAKnV,IAAI,EAAGihC,GAAU,IAC7CpiB,EAAKsiB,WAAWF,GAASD,QAAQ,OAAOH,WAE1ChiB,EAAKmiB,QAAQD,GAAMF,SAC5B,EAEAO,MAAO,SAASviB,EAAMkiB,GACpB,OAAO,IAAOliB,GAAMuiB,MAAML,GAAMF,SAClC,GACE,CAAC,yBC9DL,UAeE,EAAQ,CAAE,SAAY,EAMb,SAAUQ,EAAQpgC,GAE5B,IAkIAqgC,EAlIIC,EAAY,6JAGhBC,EAAa,CAAC,EACdpiC,EAAWoiC,EAAWpiC,SAGtBqiC,EAAc,0BAGdC,EAAgB,CAAE,CAChBC,GAAI,sFACJj6B,MAAO,SAAUk6B,GAChB,MAAO,CACNA,EAAY,GACZA,EAAY,GACZA,EAAY,GACZA,EAAY,GAEd,GACE,CACFD,GAAI,8GACJj6B,MAAO,SAAUk6B,GAChB,MAAO,CACY,KAAlBA,EAAY,GACM,KAAlBA,EAAY,GACM,KAAlBA,EAAY,GACZA,EAAY,GAEd,GACE,CAGFD,GAAI,yDACJj6B,MAAO,SAAUk6B,GAChB,MAAO,CACNzhC,SAAUyhC,EAAY,GAAK,IAC3BzhC,SAAUyhC,EAAY,GAAK,IAC3BzhC,SAAUyhC,EAAY,GAAK,IAC3BA,EAAY,IACTzhC,SAAUyhC,EAAY,GAAK,IAAO,KAAM7mB,QAAS,GACnD,EAEH,GACE,CAGF4mB,GAAI,6CACJj6B,MAAO,SAAUk6B,GAChB,MAAO,CACNzhC,SAAUyhC,EAAY,GAAMA,EAAY,GAAK,IAC7CzhC,SAAUyhC,EAAY,GAAMA,EAAY,GAAK,IAC7CzhC,SAAUyhC,EAAY,GAAMA,EAAY,GAAK,IAC7CA,EAAY,IACTzhC,SAAUyhC,EAAY,GAAMA,EAAY,GAAK,IAAO,KACpD7mB,QAAS,GACX,EAEH,GACE,CACF4mB,GAAI,4GACJt3B,MAAO,OACP3C,MAAO,SAAUk6B,GAChB,MAAO,CACNA,EAAY,GACZA,EAAY,GAAM,IAClBA,EAAY,GAAM,IAClBA,EAAY,GAEd,IAIFC,EAAQR,EAAOS,MAAQ,SAAUD,EAAOE,EAAOC,EAAMC,GACpD,OAAO,IAAIZ,EAAOS,MAAMzjC,GAAGqJ,MAAOm6B,EAAOE,EAAOC,EAAMC,EACvD,EACAC,EAAS,CACRC,KAAM,CACL/7B,MAAO,CACNg8B,IAAK,CACJC,IAAK,EACL19B,KAAM,QAEPo9B,MAAO,CACNM,IAAK,EACL19B,KAAM,QAEPq9B,KAAM,CACLK,IAAK,EACL19B,KAAM,UAKT29B,KAAM,CACLl8B,MAAO,CACNm8B,IAAK,CACJF,IAAK,EACL19B,KAAM,WAEP69B,WAAY,CACXH,IAAK,EACL19B,KAAM,WAEP89B,UAAW,CACVJ,IAAK,EACL19B,KAAM,cAKV+9B,EAAY,CACX,KAAQ,CACPC,OAAO,EACP3iC,IAAK,KAEN,QAAW,CACVA,IAAK,GAEN,QAAW,CACV4iC,IAAK,IACLD,OAAO,IAGTE,EAAUhB,EAAMgB,QAAU,CAAC,EAG3BC,EAAczB,EAAQ,OAAS,GAM/B7M,EAAO6M,EAAO7M,KAuBf,SAASuO,EAAS9jC,GACjB,OAAY,MAAPA,EACGA,EAAM,GAGQ,kBAARA,EACbuiC,EAAYpiC,EAASC,KAAMJ,KAAW,gBAC/BA,CACT,CAEA,SAAS+jC,EAAO9iC,EAAOR,EAAMujC,GAC5B,IAAIt+B,EAAO+9B,EAAWhjC,EAAKiF,OAAU,CAAC,EAEtC,OAAc,MAATzE,EACK+iC,IAAevjC,EAAKwjC,IAAQ,KAAOxjC,EAAKwjC,KAIlDhjC,EAAQyE,EAAKg+B,QAAUziC,EAAQsF,WAAYtF,GAItCqF,MAAOrF,GACJR,EAAKwjC,IAGRv+B,EAAKi+B,KAIA1iC,EAAQyE,EAAKi+B,KAAQj+B,EAAKi+B,IAI7BztB,KAAKpV,IAAK4E,EAAK3E,IAAKmV,KAAKnV,IAAK,EAAGE,IACzC,CAEA,SAASijC,EAAaC,GACrB,IAAIC,EAAOxB,IACVM,EAAOkB,EAAKC,MAAQ,GAwBrB,OAtBAF,EAASA,EAAOz3B,cAEhB6oB,EAAMkN,GAAe,SAAU6B,EAAIC,GAClC,IAAIC,EACH17B,EAAQy7B,EAAO7B,GAAGp5B,KAAM66B,GACxBpR,EAASjqB,GAASy7B,EAAO97B,MAAOK,GAChC27B,EAAYF,EAAOn5B,OAAS,OAE7B,GAAK2nB,EASJ,OARAyR,EAASJ,EAAMK,GAAa1R,GAI5BqR,EAAMnB,EAAQwB,GAAYC,OAAUF,EAAQvB,EAAQwB,GAAYC,OAChExB,EAAOkB,EAAKC,MAAQG,EAAOH,OAGpB,CAET,IAGKnB,EAAKzjC,QAIY,YAAhByjC,EAAK//B,QACTi/B,EAAOrV,OAAQmW,EAAMb,EAAOsC,aAEtBP,GAID/B,EAAQ8B,EAChB,CA6NA,SAASS,EAAS7gC,EAAG8gC,EAAGC,GAEvB,OAAS,GADTA,GAAMA,EAAI,GAAM,GACH,EACL/gC,GAAM8gC,EAAI9gC,GAAM+gC,EAAI,EAEnB,EAAJA,EAAQ,EACLD,EAEC,EAAJC,EAAQ,EACL/gC,GAAM8gC,EAAI9gC,IAAU,EAAI,EAAM+gC,GAAM,EAErC/gC,CACR,CAxUA8/B,EAAY9H,MAAMgJ,QAAU,kCAC5BnB,EAAQV,KAAOW,EAAY9H,MAAMiJ,gBAAgB57B,QAAS,SAAY,EAItEmsB,EAAM0N,GAAQ,SAAUwB,EAAWr5B,GAClCA,EAAMs5B,MAAQ,IAAMD,EACpBr5B,EAAMjE,MAAM67B,MAAQ,CACnBI,IAAK,EACL19B,KAAM,UACNu+B,IAAK,EAEP,IAGA7B,EAAO7M,KAAM,uEAAuE/rB,MAAO,MAC1F,SAAU86B,EAAIngC,GACbo+B,EAAY,WAAap+B,EAAO,KAAQA,EAAKuI,aAC9C,IA+EDk2B,EAAMxjC,GAAKgjC,EAAOrV,OAAQ6V,EAAM1iC,UAAW,CAC1CuI,MAAO,SAAU06B,EAAKL,EAAOC,EAAMC,GAClC,GAAKG,IAAQnhC,EAEZ,OADA4C,KAAKy/B,MAAQ,CAAE,KAAM,KAAM,KAAM,MAC1Bz/B,MAEHu+B,EAAI8B,QAAU9B,EAAI+B,YACtB/B,EAAMf,EAAQe,GAAMgC,IAAKrC,GACzBA,EAAQ9gC,GAGT,IAAIoiC,EAAOx/B,KACVc,EAAOo+B,EAASX,GAChBD,EAAOt+B,KAAKy/B,MAAQ,GAQrB,OALKvB,IAAU9gC,IACdmhC,EAAM,CAAEA,EAAKL,EAAOC,EAAMC,GAC1Bt9B,EAAO,SAGM,WAATA,EACGd,KAAK6D,MAAOy7B,EAAaf,IAASd,EAAO+C,UAGnC,UAAT1/B,GACJ6vB,EAAM0N,EAAOC,KAAK/7B,OAAO,SAAUuZ,EAAMjgB,GACxCyiC,EAAMziC,EAAK2iC,KAAQW,EAAOZ,EAAK1iC,EAAK2iC,KAAO3iC,EAC5C,IACOmE,MAGM,WAATc,GAEH6vB,EAAM0N,EADFE,aAAeP,EACL,SAAUyC,EAAYj6B,GAC9B+3B,EAAK/3B,EAAMs5B,SACfN,EAAMh5B,EAAMs5B,OAAUvB,EAAK/3B,EAAMs5B,OAAQ56B,QAE3C,EAEc,SAAUu7B,EAAYj6B,GACnC,IAAIs5B,EAAQt5B,EAAMs5B,MAClBnP,EAAMnqB,EAAMjE,OAAO,SAAU5D,EAAK9C,GAGjC,IAAM2jC,EAAMM,IAAWt5B,EAAMsZ,GAAK,CAIjC,GAAa,UAARnhB,GAAiC,MAAd4/B,EAAK5/B,GAC5B,OAED6gC,EAAMM,GAAUt5B,EAAMsZ,GAAI0f,EAAKC,MAChC,CAIAD,EAAMM,GAASjkC,EAAK2iC,KAAQW,EAAOZ,EAAK5/B,GAAO9C,GAAM,EACtD,IAGK2jC,EAAMM,IAAWtC,EAAOkD,QAAS,KAAMlB,EAAMM,GAAQ56B,MAAO,EAAG,IAAQ,IAGhD,MAAtBs6B,EAAMM,GAAS,KACnBN,EAAMM,GAAS,GAAM,GAGjBt5B,EAAMoZ,OACV4f,EAAKC,MAAQj5B,EAAMoZ,KAAM4f,EAAMM,KAGlC,GAEM9/B,WA1CR,CA4CD,EACA2gC,GAAI,SAAUC,GACb,IAAID,EAAK3C,EAAO4C,GACfC,GAAO,EACPrB,EAAOx/B,KAgBR,OAdA2wB,EAAM0N,GAAQ,SAAU5Z,EAAGje,GAC1B,IAAIs6B,EACHC,EAAUJ,EAAIn6B,EAAMs5B,OAUrB,OATKiB,IACJD,EAAatB,EAAMh5B,EAAMs5B,QAAWt5B,EAAMsZ,IAAMtZ,EAAMsZ,GAAI0f,EAAKC,QAAW,GAC1E9O,EAAMnqB,EAAMjE,OAAO,SAAUkiB,EAAG5oB,GAC/B,GAA4B,MAAvBklC,EAASllC,EAAK2iC,KAElB,OADAqC,EAASE,EAASllC,EAAK2iC,OAAUsC,EAAYjlC,EAAK2iC,IAGpD,KAEMqC,CACR,IACOA,CACR,EACAG,OAAQ,WACP,IAAIC,EAAO,GACVzB,EAAOx/B,KAMR,OALA2wB,EAAM0N,GAAQ,SAAUwB,EAAWr5B,GAC7Bg5B,EAAMh5B,EAAMs5B,QAChBmB,EAAKjlC,KAAM6jC,EAEb,IACOoB,EAAK77B,KACb,EACA87B,WAAY,SAAUC,EAAOC,GAC5B,IAAI3jB,EAAMugB,EAAOmD,GAChBtB,EAAYpiB,EAAIujB,SAChBx6B,EAAQ63B,EAAQwB,GAChBwB,EAA8B,IAAjBrhC,KAAKo+B,QAAgBJ,EAAO,eAAkBh+B,KAC3Dwd,EAAQ6jB,EAAY76B,EAAMs5B,QAAWt5B,EAAMsZ,GAAIuhB,EAAW5B,OAC1D3jC,EAAS0hB,EAAMtY,QA4BhB,OA1BAuY,EAAMA,EAAKjX,EAAMs5B,OACjBnP,EAAMnqB,EAAMjE,OAAO,SAAUuZ,EAAMjgB,GAClC,IAAI0T,EAAQ1T,EAAK2iC,IAChB8C,EAAa9jB,EAAOjO,GACpBgyB,EAAW9jB,EAAKlO,GAChBzO,EAAO+9B,EAAWhjC,EAAKiF,OAAU,CAAC,EAGjB,OAAbygC,IAKe,OAAfD,EACJxlC,EAAQyT,GAAUgyB,GAEbzgC,EAAKi+B,MACJwC,EAAWD,EAAaxgC,EAAKi+B,IAAM,EACvCuC,GAAcxgC,EAAKi+B,IACRuC,EAAaC,EAAWzgC,EAAKi+B,IAAM,IAC9CuC,GAAcxgC,EAAKi+B,MAGrBjjC,EAAQyT,GAAU4vB,GAASoC,EAAWD,GAAeF,EAAWE,EAAYzlC,IAE9E,IACOmE,KAAM6/B,GAAa/jC,EAC3B,EACA0lC,MAAO,SAAUC,GAGhB,GAAyB,IAApBzhC,KAAKy/B,MAAO,GAChB,OAAOz/B,KAGR,IAAI0hC,EAAM1hC,KAAKy/B,MAAMv6B,QACpBmb,EAAIqhB,EAAIt8B,MACRo8B,EAAQxD,EAAOyD,GAAShC,MAEzB,OAAOzB,EAAOR,EAAOz4B,IAAK28B,GAAK,SAAU/+B,EAAGhI,GAC3C,OAAS,EAAI0lB,GAAMmhB,EAAO7mC,GAAM0lB,EAAI1d,CACrC,IACD,EACAg/B,aAAc,WACb,IAAIC,EAAS,QACZtD,EAAOd,EAAOz4B,IAAK/E,KAAKy/B,OAAO,SAAU98B,EAAGhI,GAC3C,OAAU,MAALgI,EACGA,EAEDhI,EAAI,EAAI,EAAI,CACpB,IAOD,OALmB,IAAd2jC,EAAM,KACVA,EAAKl5B,MACLw8B,EAAS,QAGHA,EAAStD,EAAK//B,OAAS,GAC/B,EACAsjC,aAAc,WACb,IAAID,EAAS,QACZnD,EAAOjB,EAAOz4B,IAAK/E,KAAKy+B,QAAQ,SAAU97B,EAAGhI,GAS5C,OARU,MAALgI,IACJA,EAAIhI,EAAI,EAAI,EAAI,GAIZA,GAAKA,EAAI,IACbgI,EAAI2O,KAAKwwB,MAAW,IAAJn/B,GAAY,KAEtBA,CACR,IAMD,OAJmB,IAAd87B,EAAM,KACVA,EAAKr5B,MACLw8B,EAAS,QAEHA,EAASnD,EAAKlgC,OAAS,GAC/B,EACAwjC,YAAa,SAAUC,GACtB,IAAI1D,EAAOt+B,KAAKy/B,MAAMv6B,QACrBk5B,EAAQE,EAAKl5B,MAMd,OAJK48B,GACJ1D,EAAKtiC,QAAkB,IAARoiC,IAGT,IAAMZ,EAAOz4B,IAAKu5B,GAAM,SAAU37B,GAIxC,OAAoB,KADpBA,GAAMA,GAAK,GAAIpH,SAAU,KAChBV,OAAe,IAAM8H,EAAIA,CACnC,IAAIpE,KAAM,GACX,EACAhD,SAAU,WACT,OAA2B,IAApByE,KAAKy/B,MAAO,GAAY,cAAgBz/B,KAAK2hC,cACrD,IAED3D,EAAMxjC,GAAGqJ,MAAMvI,UAAY0iC,EAAMxjC,GAmBjC6jC,EAAOI,KAAK3e,GAAK,SAAUwe,GAC1B,GAAkB,MAAbA,EAAM,IAA4B,MAAbA,EAAM,IAA4B,MAAbA,EAAM,GACpD,MAAO,CAAE,KAAM,KAAM,KAAMA,EAAM,IAElC,IASC4B,EAAGlhC,EATAijC,EAAI3D,EAAM,GAAM,IACnB/Z,EAAI+Z,EAAM,GAAM,IAChBzqB,EAAIyqB,EAAM,GAAM,IAChBje,EAAIie,EAAM,GACVniC,EAAMmV,KAAKnV,IAAK8lC,EAAG1d,EAAG1Q,GACtB3X,EAAMoV,KAAKpV,IAAK+lC,EAAG1d,EAAG1Q,GACtBsW,EAAOhuB,EAAMD,EACbsM,EAAMrM,EAAMD,EACZ4rB,EAAU,GAANtf,EAsBL,OAlBC03B,EADIhkC,IAAQC,EACR,EACO8lC,IAAM9lC,EACX,IAAOooB,EAAI1Q,GAAMsW,EAAS,IACrB5F,IAAMpoB,EACX,IAAO0X,EAAIouB,GAAM9X,EAAS,IAE1B,IAAO8X,EAAI1d,GAAM4F,EAAS,IAMhCnrB,EADa,IAATmrB,EACA,EACOrC,GAAK,GACZqC,EAAO3hB,EAEP2hB,GAAS,EAAI3hB,GAEX,CAAE8I,KAAKwwB,MAAO5B,GAAM,IAAKlhC,EAAG8oB,EAAQ,MAALzH,EAAY,EAAIA,EACvD,EAEAge,EAAOI,KAAK7e,KAAO,SAAU6e,GAC5B,GAAkB,MAAbA,EAAM,IAA4B,MAAbA,EAAM,IAA4B,MAAbA,EAAM,GACpD,MAAO,CAAE,KAAM,KAAM,KAAMA,EAAM,IAElC,IAAIyB,EAAIzB,EAAM,GAAM,IACnBz/B,EAAIy/B,EAAM,GACV3W,EAAI2W,EAAM,GACVpe,EAAIoe,EAAM,GACVwB,EAAInY,GAAK,GAAMA,GAAM,EAAI9oB,GAAM8oB,EAAI9oB,EAAI8oB,EAAI9oB,EAC3CG,EAAI,EAAI2oB,EAAImY,EAEb,MAAO,CACN3uB,KAAKwwB,MAAwC,IAAjC9B,EAAS7gC,EAAG8gC,EAAGC,EAAM,EAAI,IACrC5uB,KAAKwwB,MAA4B,IAArB9B,EAAS7gC,EAAG8gC,EAAGC,IAC3B5uB,KAAKwwB,MAAwC,IAAjC9B,EAAS7gC,EAAG8gC,EAAGC,EAAM,EAAI,IACrC7f,EAEF,EAGAsQ,EAAM0N,GAAQ,SAAUwB,EAAWr5B,GAClC,IAAIjE,EAAQiE,EAAMjE,MACjBu9B,EAAQt5B,EAAMs5B,MACdhgB,EAAKtZ,EAAMsZ,GACXF,EAAOpZ,EAAMoZ,KAGdoe,EAAMxjC,GAAIqlC,GAAc,SAAUxjC,GAMjC,GAHKyjB,IAAO9f,KAAM8/B,KACjB9/B,KAAM8/B,GAAUhgB,EAAI9f,KAAKy/B,QAErBpjC,IAAUe,EACd,OAAO4C,KAAM8/B,GAAQ56B,QAGtB,IAAI2K,EACH/O,EAAOo+B,EAAS7iC,GAChB9B,EAAiB,UAATuG,GAA6B,WAATA,EAAsBzE,EAAQqD,UAC1DwiC,EAAQliC,KAAM8/B,GAAQ56B,QAUvB,OARAyrB,EAAMpuB,GAAO,SAAU5D,EAAK9C,GAC3B,IAAInB,EAAMH,EAAc,WAATuG,EAAoBnC,EAAM9C,EAAK2iC,KAClC,MAAP9jC,IACJA,EAAMwnC,EAAOrmC,EAAK2iC,MAEnB0D,EAAOrmC,EAAK2iC,KAAQW,EAAOzkC,EAAKmB,EACjC,IAEK+jB,IACJ/P,EAAMmuB,EAAOpe,EAAMsiB,KACdpC,GAAUoC,EACRryB,GAEAmuB,EAAOkE,EAEhB,EAGAvR,EAAMpuB,GAAO,SAAU5D,EAAK9C,GAGtBmiC,EAAMxjC,GAAImE,KAGfq/B,EAAMxjC,GAAImE,GAAQ,SAAUtC,GAC3B,IAAI6lC,EAAOC,EAAKj+B,EAAO1J,EACtB4nC,EAAQlD,EAAS7iC,GAUlB,OAFA8lC,GADAD,EAAQliC,KAJPxF,EADY,UAARmE,EACCqB,KAAKqiC,MAAQ,OAAS,OAEtBxC,MAGOhkC,EAAK2iC,KAEH,cAAV4D,EACGD,GAGO,aAAVC,IAEJA,EAAQlD,EADR7iC,EAAQA,EAAMb,KAAMwE,KAAMmiC,KAGb,MAAT9lC,GAAiBR,EAAKymC,MACnBtiC,MAEO,WAAVoiC,IACJl+B,EAAQ05B,EAAYl5B,KAAMrI,MAEzBA,EAAQ8lC,EAAMxgC,WAAYuC,EAAO,KAAyB,MAAfA,EAAO,GAAc,GAAK,IAGvEg+B,EAAOrmC,EAAK2iC,KAAQniC,EACb2D,KAAMxF,GAAM0nC,IACpB,EACD,GACD,IAIAlE,EAAMuE,KAAO,SAAUA,GACtB,IAAIC,EAAQD,EAAK39B,MAAO,KACxB+rB,EAAM6R,GAAO,SAAU9C,EAAI6C,GAC1B/E,EAAOiF,SAAUF,GAAS,CACzB3Z,IAAK,SAAU8Z,EAAMrmC,GACpB,IAAIujC,EAAQ+C,EACXvC,EAAkB,GAEnB,GAAe,gBAAV/jC,IAAkD,WAArB6iC,EAAS7iC,KAA0BujC,EAASN,EAAajjC,KAAc,CAExG,GADAA,EAAQ2hC,EAAO4B,GAAUvjC,IACnB2iC,EAAQV,MAA6B,IAArBjiC,EAAMojC,MAAO,GAAY,CAE9C,IADAkD,EAAmB,oBAATJ,EAA6BG,EAAKnjB,WAAamjB,GAElC,KAApBtC,GAA8C,gBAApBA,IAC5BuC,GAAWA,EAAQxL,OAEnB,IACCiJ,EAAkB5C,EAAO+C,IAAKoC,EAAS,mBACvCA,EAAUA,EAAQpjB,UACnB,CAAE,MAAQ5Z,GACV,CAGDtJ,EAAQA,EAAMmlC,MAAOpB,GAAuC,gBAApBA,EACvCA,EACA,WACF,CAEA/jC,EAAQA,EAAMslC,cACf,CACA,IACCe,EAAKvL,MAAOoL,GAASlmC,CACtB,CAAE,MAAQsJ,GAGV,CACD,GAED63B,EAAOoF,GAAGC,KAAMN,GAAS,SAAUK,GAC5BA,EAAGE,YACRF,EAAGplB,MAAQwgB,EAAO4E,EAAGF,KAAMH,GAC3BK,EAAGnlB,IAAMugB,EAAO4E,EAAGnlB,KACnBmlB,EAAGE,WAAY,GAEhBtF,EAAOiF,SAAUF,GAAO3Z,IAAKga,EAAGF,KAAME,EAAGplB,MAAM0jB,WAAY0B,EAAGnlB,IAAKmlB,EAAGG,KACvE,CACD,GAED,EAEA/E,EAAMuE,KAAM7E,GAEZF,EAAOiF,SAASO,YAAc,CAC7BC,OAAQ,SAAU5mC,GACjB,IAAI6mC,EAAW,CAAC,EAKhB,OAHAvS,EAAM,CAAE,MAAO,QAAS,SAAU,SAAU,SAAU+O,EAAIyD,GACzDD,EAAU,SAAWC,EAAO,SAAY9mC,CACzC,IACO6mC,CACR,GAMDzF,EAASD,EAAOS,MAAM1Y,MAAQ,CAG7B6d,KAAM,UACNC,MAAO,UACPlF,KAAM,UACNmF,QAAS,UACTC,KAAM,UACNrF,MAAO,UACPsF,KAAM,UACNC,OAAQ,UACRC,KAAM,UACNC,MAAO,UACPC,OAAQ,UACRrF,IAAK,UACLsF,OAAQ,UACRC,KAAM,UACNC,MAAO,UACPC,OAAQ,UAGRjE,YAAa,CAAE,KAAM,KAAM,KAAM,GAEjCS,SAAU,UAGX,OAlsB+B,mFCf/B,SAAUyD,GAEF,IACI,IAAI5D,EAAS,EAAQ,KACzB,CAAE,MAAO16B,GACT,CACAzL,EAAOC,QAcZ,SAAUuqB,GACT,IAAIuf,EAAU,SAAUrQ,EAAQsQ,GAC5B,IAAI9oC,EAAM,CAAC,EACX+oC,EAAe,CAAE,MAAQ,EAAI,OAAS,EAAI,KAAQ,MAGlD,OAAKvQ,GAKLA,EAAOjvB,QAAQ,MAAO,KAAKC,MAAM,KAAKqsB,SAAQ,SAAStuB,GACnD,IAEAjI,EAFI26B,EAAQ1yB,EAAEiC,MAAO,KACrBjG,EAAM22B,mBAAoBD,EAAM,IAEhC8M,EAAM/mC,EACNT,EAAI,EAIJ6qB,EAAO7mB,EAAIiG,MAAO,MAClBw/B,EAAY5e,EAAK3qB,OAAS,EAmB1B,GAfK,KAAKoE,KAAMumB,EAAK,KAAQ,MAAMvmB,KAAMumB,EAAM4e,KAE3C5e,EAAM4e,GAAc5e,EAAM4e,GAAYz/B,QAAS,MAAO,IAMtDy/B,GAFA5e,EAAOA,EAAKrf,QAAQvB,MAAM,KAAK5J,OAAQwqB,IAEtB3qB,OAAS,GAG1BupC,EAAY,EAIM,IAAjB/O,EAAMx6B,OAWP,GAVAH,EAAM46B,mBAAoBD,EAAM,IAG3B6O,IACDxpC,EAAMA,IAAQgH,MAAMhH,KAAWA,EAAM,KAAQA,GAAQA,EAC3C,cAARA,OAA4C0C,OACtBA,IAAtB+mC,EAAazpC,GAA+BypC,EAAazpC,GACzDA,GAGD0pC,EAUD,KAAQzpC,GAAKypC,EAAWzpC,IAEpBwnC,EAAMA,EADNxjC,EAAkB,KAAZ6mB,EAAK7qB,GAAYwnC,EAAItnC,OAAS2qB,EAAK7qB,IACxBA,EAAIypC,EACnBjC,EAAIxjC,KAAU6mB,EAAK7qB,EAAE,IAAM+G,MAAO8jB,EAAK7qB,EAAE,IAAO,CAAC,EAAI,IACrDD,MAO8C,mBAA/CW,OAAOC,UAAUC,SAASC,KAAMJ,EAAIuD,IAErCvD,EAAIuD,GAAK3C,KAAMtB,IAEP,CAAC,EAAEqB,eAAeP,KAAKJ,EAAKuD,GAOpCvD,EAAIuD,GAAOjE,EAJXU,EAAIuD,GAAO,CAAEvD,EAAIuD,GAAMjE,QAQvBiE,IAERvD,EAAIuD,GAAOulC,OACT9mC,EACA,GAEV,IAEOhC,GAxFIA,CAyFf,EACIspB,IACFA,EAAEppB,UAAU2oC,QAAUvf,EAAEuf,QAAUA,GAEpC,OAAOA,CACX,CAnHyBA,CAAQ5D,EAchC,CApBD,yBCAA,SAIA,SAAYh/B,GACX,aAKC,EAAQ,CAAE,SAAY,EAAF,SAAYm8B,GAC/B,OAYE,SAAUA,EAAQt9B,GAMvB,SAASmkC,EAAiBC,EAAIC,GAC7B,IAAI5pC,EACH6pC,EAAgB,uBAChBC,EAAMD,EAAc9/B,KAAM4/B,IAAQ,GAClCI,EAAMF,EAAc9/B,KAAM6/B,IAAQ,GAEnC,IAAM5pC,EAAI,EAAGA,GAAK,EAAGA,IAAM,CAC1B,IAAM8pC,EAAK9pC,IAAO+pC,EAAK/pC,GACtB,OAAO,EAER,IAAM8pC,EAAK9pC,IAAO+pC,EAAK/pC,GACtB,OAAQ,CAEV,CACA,OAAO,CACR,CAEA,SAASgqC,EAAoB9vB,GAC5B,OAAOwvB,EAAiB7G,EAAOhjC,GAAG6lC,OAAQxrB,IAAa,CACxD,CAtBA2oB,EAAOoH,eAAiB,QA0BxB,IAAIC,EAAkBxpC,OAAO8S,OAAQ,MAKrCqvB,EAAOsH,sBAAwB,WAC9B,IAAInqC,EACJ,IAAMA,EAAI,EAAGA,EAAI+E,UAAU7E,OAAQF,IAClCkqC,EAAiBnlC,UAAW/E,KAAQ,CAEtC,EAWA6iC,EAAOuH,qBAAuB,WAC7B,IAAIpqC,EACJ,IAAMA,EAAI,EAAGA,EAAI+E,UAAU7E,OAAQF,WAC3BkqC,EAAiBnlC,UAAW/E,GAErC,EAEA6iC,EAAOwH,sBAAwB,SAAUC,GACxC,OAAQJ,EAAiBI,EAC1B,EAOO/kC,EAAOG,SAAYH,EAAOG,QAAQI,MAKlC+8B,GAAWmH,EAAoB,WACnCA,EAAoB,UACrBzkC,EAAOG,QAAQI,IAAK,sCAEhB+8B,EAAO0H,iBACXhlC,EAAOG,QAAQI,IAAK,mDAIrBP,EAAOG,QAAQI,IAAK,mCACjB+8B,EAAO2H,YAAc,GAAK,wBAC5B,aAAe3H,EAAOoH,iBAIxB,IAAIQ,EAAc,CAAC,EAGnB5H,EAAO6H,4BAA6B,EAGpC7H,EAAO0H,gBAAkB,QAGI9nC,IAAxBogC,EAAO8H,eACX9H,EAAO8H,cAAe,GASvB,SAASC,EAAa53B,EAAM63B,GAC3B,IAAInlC,EAAUH,EAAOG,SAChBm9B,EAAOwH,sBAAuBr3B,IAC/B6vB,EAAO6H,4BAA+BD,EAAaI,KACtDJ,EAAaI,IAAQ,EACrBhI,EAAO0H,gBAAgBlpC,KAAMwpC,EAAM,KAAO73B,EAAO,KAC5CtN,GAAWA,EAAQ6O,OAASsuB,EAAO2H,cACvC9kC,EAAQ6O,KAAM,cAAgBs2B,GACzBhI,EAAO8H,cAAgBjlC,EAAQolC,OACnCplC,EAAQolC,SAIZ,CAEA,SAASC,EAAiBtqC,EAAKS,EAAMQ,EAAOsR,EAAM63B,GACjDnqC,OAAOsqC,eAAgBvqC,EAAKS,EAAM,CACjC+pC,cAAc,EACdC,YAAY,EACZ17B,IAAK,WAEJ,OADAo7B,EAAa53B,EAAM63B,GACZnpC,CACR,EACAusB,IAAK,SAAUkd,GACdP,EAAa53B,EAAM63B,GACnBnpC,EAAQypC,CACT,GAEF,CAEA,SAASC,EAAyB3qC,EAAKS,EAAMmqC,EAASr4B,EAAM63B,GAC3D,IACCS,EAAW7qC,EAAKS,GAEjBT,EAAKS,GAAS,WAkBb,OAZK2pC,GACJD,EAAa53B,EAAM63B,IAKRhI,EAAOwH,sBAAuBr3B,GACzCq4B,EAGEC,GAAYzI,EAAO9qB,MAEL3S,MAAOC,KAAMN,UAC/B,CACD,CAEA,SAASwmC,EAAyB9qC,EAAKS,EAAMmqC,EAASr4B,EAAM63B,GAC3D,IAAMA,EACL,MAAM,IAAInhC,MAAO,+BAElB,OAAO0hC,EAAyB3qC,EAAKS,EAAMmqC,EAASr4B,EAAM63B,EAC3D,CAEA,SAASW,EAAkB/qC,EAAKS,EAAMmqC,EAASr4B,GAC9C,OAAOo4B,EAAyB3qC,EAAKS,EAAMmqC,EAASr4B,EACrD,CAtEA6vB,EAAO4I,aAAe,WACrBhB,EAAc,CAAC,EACf5H,EAAO0H,gBAAgBrqC,OAAS,CACjC,EAqEoC,eAA/BqF,EAAOua,SAAS4rB,YAGpBd,EAAa,SAAU,6CAGxB,IAAIe,EACH3I,EAAa,CAAC,EACd4I,EAAU/I,EAAOhjC,GAAGgsC,KACpBC,EAAUjJ,EAAOl2B,KAEjBo/B,EAAgB,wDAChBC,EAAgB,yDAIhBC,EAAQ,sDA0DT,IAAMN,KAxDNH,EAAkB3I,EAAOhjC,GAAI,QAAQ,SAAUqsC,GAC9C,IAAIpkC,EAAOiI,MAAMpP,UAAU4J,MAAM1J,KAAMkE,WAWvC,OATK89B,EAAOwH,sBAAuB,sBAClB,kBAAT6B,GAA8B,MAATA,IAI5BtB,EAAa,oBAAqB,yCAClC9iC,EAAM,GAAM,IAGN8jC,EAAQxmC,MAAOC,KAAMyC,EAC7B,GAAG,qBAKH+6B,EAAOhjC,GAAGgsC,KAAKlrC,UAAYkiC,EAAOhjC,GAElC2rC,EAAkB3I,EAAQ,QAAQ,SAAUjO,GAC3C,IAAI9sB,EAAOiI,MAAMpP,UAAU4J,MAAM1J,KAAMkE,WAIvC,GAAyB,kBAAb6vB,GAAyBmX,EAAcznC,KAAMswB,GAIxD,IACCrvB,EAAOua,SAASqsB,cAAevX,EAChC,CAAE,MAAQwX,GAGTxX,EAAWA,EAAS5qB,QAASgiC,GAAe,SAAUliB,EAAG0E,EAAM6d,EAAI3qC,GAClE,MAAO,IAAM8sB,EAAO6d,EAAK,IAAO3qC,EAAQ,IACzC,IAIA,IACC6D,EAAOua,SAASqsB,cAAevX,GAC/BgW,EAAa,gBACZ,+CAAiD9iC,EAAM,IACxDA,EAAM,GAAM8sB,CACb,CAAE,MAAQ0X,GACT1B,EAAa,gBACZ,8CAAgD9iC,EAAM,GACxD,CACD,CAGD,OAAOgkC,EAAQ1mC,MAAOC,KAAMyC,EAC7B,GAAG,iBAGegkC,EACZprC,OAAOC,UAAUS,eAAeP,KAAMirC,EAASH,KACnD9I,EAAOl2B,KAAMg/B,GAAaG,EAASH,IAKrCJ,EAAyB1I,EAAOhjC,GAAI,QAAQ,WAC3C,OAAOwF,KAAKnF,MACb,GAAG,OACH,wEAEAqrC,EAAyB1I,EAAQ,aAAa,WAC7C,OAAO72B,KAAK9C,MAAM9D,MAAO,KAAML,UAChC,GAAG,YACH,kDAEAwmC,EAAyB1I,EAAQ,YAAaA,EAAO0J,UACpD,YAAa,kCAEdhB,EAAyB1I,EAAQ,SAAUA,EAAO2J,WACjD,SAAU,sDAGXzB,EAAiBlI,EAAO4J,KAAM,UAAW5J,EAAO4J,KAAKC,QAAS,mBAC7D,8DACD3B,EAAiBlI,EAAO4J,KAAM,IAAK5J,EAAO4J,KAAKC,QAAS,mBACvD,2DAGI1C,EAAoB,UACxBuB,EAAyB1I,EAAQ,QAAQ,SAAUve,GAClD,OAAe,MAARA,EACN,IACEA,EAAO,IAAKta,QAASiiC,EAAO,KAChC,GAAG,OACH,wDAIIjC,EAAoB,WACxBuB,EAAyB1I,EAAQ,YAAY,SAAUkF,EAAMnjC,GAC5D,OAAOmjC,EAAK4E,UAAY5E,EAAK4E,SAASx/B,gBAAkBvI,EAAKuI,aAC9D,GAAG,WACH,iCAEAo+B,EAAyB1I,EAAQ,UAAW9yB,MAAMyhB,QAAS,UAC1D,oDAIGwY,EAAoB,WAExBuB,EAAyB1I,EAAQ,aAAa,SAAUpiC,GAKtD,IAAI0F,SAAc1F,EAClB,OAAkB,WAAT0F,GAA8B,WAATA,KAK5BY,MAAOtG,EAAMuG,WAAYvG,GAC5B,GAAG,YACH,oCAIDoiC,EAAO7M,KAAM,uEACZ/rB,MAAO,MACR,SAAU6f,EAAGllB,GACZo+B,EAAY,WAAap+B,EAAO,KAAQA,EAAKuI,aAC9C,IAEAo+B,EAAyB1I,EAAQ,QAAQ,SAAUpiC,GAClD,OAAY,MAAPA,EACGA,EAAM,GAIQ,kBAARA,GAAmC,oBAARA,EACxCuiC,EAAYtiC,OAAOC,UAAUC,SAASC,KAAMJ,KAAW,gBAChDA,CACT,GAAG,OACH,6BAEA8qC,EAAyB1I,EAAQ,cAChC,SAAUpiC,GACT,MAAsB,oBAARA,CACf,GAAG,aACH,qCAED8qC,EAAyB1I,EAAQ,YAChC,SAAUpiC,GACT,OAAc,MAAPA,GAAeA,IAAQA,EAAI8E,MACnC,GAAG,WACH,oCAKF,GAAKs9B,EAAOpJ,KAAO,CAEnB,IAAImT,EAAU/J,EAAOpJ,KACpBoT,EAAS,oBAEVrB,EAAkB3I,EAAQ,QAAQ,WACjC,IAAIiK,EAAQF,EAAQxnC,MAAOC,KAAMN,WAYjC,OATK+nC,EAAM3jB,UACVoiB,EAAyBuB,EAAO,UAAWA,EAAMxY,KAAM,gBACtD,2CACDiX,EAAyBuB,EAAO,QAASA,EAAMC,KAAM,gBACpD,yCACDxB,EAAyBuB,EAAO,WAAYA,EAAME,OAAQ,gBACzD,6CAGKF,CACR,GAAG,iBAKG9C,EAAoB,UAKzBnH,EAAOoK,cAAe,SAAS,SAAU5oC,IAGvB,IAAZA,EAAE6oC,QAAqBL,EAAOvoC,KAAMD,EAAE2X,MACvB,kBAAX3X,EAAEsH,MAE4C,KADnDtH,EAAE80B,aAAe,IACjBtvB,QAAS,sCACXgjC,EAAOvoC,KAAMD,EAAEsH,QAEhBi/B,EAAa,kBAAmB,6CAElC,GAGD,CAEA,IAAIuC,EAAgBtK,EAAOhjC,GAAGutC,WAC7BC,EAAiBxK,EAAOhjC,GAAGytC,YAC3BC,EAAiB,OA8DlB,SAASC,EAAW5I,GACnB,OAAOA,EAAO56B,QAAS,aAAa,SAAU8f,EAAG2jB,GAChD,OAAOA,EAAOpmC,aACf,GACD,CAhEAmkC,EAAkB3I,EAAOhjC,GAAI,cAAc,SAAU+E,GACpD,IAAImR,EAAO1Q,KACVqoC,GAAc,EAuBf,OArBA7K,EAAO7M,KAAMpxB,EAAK2E,MAAOgkC,IAAkB,SAAUxI,EAAIvW,GACnDqU,EAAO4J,KAAKljC,MAAMokC,KAAKrpC,KAAMkqB,IAKjCzY,EAAKigB,MAAM,WACV,IAAqC,IAAhC6M,EAAQx9B,MAAOnE,KAAMstB,GAEzB,OADAkf,GAAc,GACP,CAET,IAGIA,IACJ9C,EAAa,kBACZ,2DAA6Dpc,GAC9DzY,EAAK7U,KAAMstB,GAAM,GAEnB,IAEO2e,EAAc/nC,MAAOC,KAAMN,UACnC,GAAG,mBAEHymC,EAAkB3I,EAAOhjC,GAAI,eAAe,SAAUmP,GAGrD,YAAevM,IAAVuM,GAAwC,mBAAVA,EAE3Bq+B,EAAejoC,MAAOC,KAAMN,YAGpC6lC,EAAa,mBAAoB,kDAG1BvlC,KAAK2wB,MAAM,WACjB,IAAItR,EAAYrf,KAAKuoC,cAAgBvoC,KAAKuoC,aAAc,UAAa,GAEhElpB,GACJme,EAAOl3B,KAAMtG,KAAM,gBAAiBqf,GAOhCrf,KAAKwoC,cACTxoC,KAAKwoC,aAAc,QAClBnpB,IAAuB,IAAV1V,EACb,GACA6zB,EAAOl3B,KAAMtG,KAAM,kBAAqB,GAG3C,IACD,GAAG,oBAQH,IAAIyoC,EAAWC,EACdC,GAAmB,EACnBC,EAAc,SAuBdC,EAAU,8HAGNrL,EAAOsL,MACXtL,EAAO7M,KAAM,CAAE,SAAU,QAAS,wBAAyB,SAAUlM,EAAGllB,GACvE,IAAIwpC,EAAUvL,EAAOiF,SAAUljC,IAAUi+B,EAAOiF,SAAUljC,GAAO4K,IAE5D4+B,IACJvL,EAAOiF,SAAUljC,GAAO4K,IAAM,WAC7B,IAAI0F,EAKJ,OAHA84B,GAAmB,EACnB94B,EAAMk5B,EAAQhpC,MAAOC,KAAMN,WAC3BipC,GAAmB,EACZ94B,CACR,EAEF,IAGDs2B,EAAkB3I,EAAQ,QAAQ,SAAUkF,EAAMxgB,EAASoD,EAAU7iB,GACpE,IAAIoN,EAAKtQ,EACR6qB,EAAM,CAAC,EAOR,IAAM7qB,KALAopC,GACLpD,EAAa,OAAQ,gDAIRrjB,EACbkI,EAAK7qB,GAASmjC,EAAKvL,MAAO53B,GAC1BmjC,EAAKvL,MAAO53B,GAAS2iB,EAAS3iB,GAM/B,IAAMA,KAHNsQ,EAAMyV,EAASvlB,MAAO2iC,EAAMjgC,GAAQ,IAGtByf,EACbwgB,EAAKvL,MAAO53B,GAAS6qB,EAAK7qB,GAG3B,OAAOsQ,CACR,GAAG,QAEE80B,EAAoB,UAA8B,qBAAVqE,QAC5CxL,EAAOyL,SAAW,IAAID,MAAOxL,EAAOyL,UAAY,CAAC,EAAG,CACnDrgB,IAAK,WAEJ,OADA2c,EAAa,WAAY,iCAClB2D,QAAQtgB,IAAI7oB,MAAOC,KAAMN,UACjC,KAQGilC,EAAoB,UAIxB+D,EAAoB,CACnBS,yBAAyB,EACzBC,aAAa,EACbC,aAAa,EACbC,UAAU,EACVC,YAAY,EACZC,YAAY,EACZC,UAAU,EACVC,YAAY,EACZC,eAAe,EACfC,iBAAiB,EACjBC,SAAS,EACTC,YAAY,EACZC,cAAc,EACdC,YAAY,EACZC,SAAS,EACTC,OAAO,EACPC,SAAS,EACTC,QAAQ,EACRC,QAAQ,EACRC,MAAM,GAGe,qBAAVtB,MACXxL,EAAO+M,UAAY,IAAIvB,MAAON,EAAmB,CAChDv+B,IAAK,WAEJ,OADAo7B,EAAa,aAAc,kCACpB2D,QAAQ/+B,IAAIpK,MAAOC,KAAMN,UACjC,EACAkpB,IAAK,WAEJ,OADA2c,EAAa,aAAc,kCACpB2D,QAAQtgB,IAAI7oB,MAAOC,KAAMN,UACjC,IAOD89B,EAAO+M,UAAY7B,GAMpBA,EAAoBlL,EAAO+M,UAG5B,SAASC,EAAU3uC,GAKlB,OAAO+sC,EAAY3pC,KAAMpD,IACxBgtC,EAAQ5pC,KAAMpD,EAAM,GAAImG,cAAgBnG,EAAKqJ,MAAO,GACtD,CAEAujC,EAAYjL,EAAOhjC,GAAG+lC,IAEtB4F,EAAkB3I,EAAOhjC,GAAI,OAAO,SAAU+E,EAAMlD,GACnD,IAAIouC,EACHC,EAAW1qC,KAEZ,OAAKT,GAAwB,kBAATA,IAAsBmL,MAAMyhB,QAAS5sB,IACxDi+B,EAAO7M,KAAMpxB,GAAM,SAAUkC,EAAGkB,GAC/B66B,EAAOhjC,GAAG+lC,IAAI/kC,KAAMkvC,EAAUjpC,EAAGkB,EAClC,IACO3C,OAGc,kBAAV3D,IAKLmuC,EAJNC,EAAYtC,EAAW5oC,KAISmpC,EAAmB+B,IAClDlF,EAAa,aACZ,0DACAhmC,EAAO,eAIHkpC,EAAU1oC,MAAOC,KAAMN,WAC/B,GAAG,cAEH,IAAIirC,EAAWnN,EAAOl3B,KA2CtB,GAzCA6/B,EAAkB3I,EAAQ,QAAQ,SAAUkF,EAAMnjC,EAAMlD,GACvD,IAAIuuC,EAASC,EAAUlsC,EAGvB,GAAKY,GAAwB,kBAATA,GAA0C,IAArBG,UAAU7E,OAAe,CAIjE,IAAM8D,KAFNisC,EAAUpN,EAAOsN,QAASpI,IAAUiI,EAASnvC,KAAMwE,KAAM0iC,GACzDmI,EAAW,CAAC,EACCtrC,EACPZ,IAAQwpC,EAAWxpC,IACvB4mC,EAAa,iBACZ,oDAAsD5mC,GACvDisC,EAASjsC,GAAQY,EAAMZ,IAEvBksC,EAAUlsC,GAAQY,EAAMZ,GAM1B,OAFAgsC,EAASnvC,KAAMwE,KAAM0iC,EAAMmI,GAEpBtrC,CACR,CAGA,OAAKA,GAAwB,kBAATA,GAAqBA,IAAS4oC,EAAW5oC,KAE5DqrC,EAAUpN,EAAOsN,QAASpI,IAAUiI,EAASnvC,KAAMwE,KAAM0iC,KACzCnjC,KAAQqrC,GACvBrF,EAAa,iBACZ,oDAAsDhmC,GAClDG,UAAU7E,OAAS,IACvB+vC,EAASrrC,GAASlD,GAEZuuC,EAASrrC,IAIXorC,EAAS5qC,MAAOC,KAAMN,UAC9B,GAAG,kBAGE89B,EAAOoF,GAAK,CAEjB,IAAImI,EAAeC,EAClBC,EAAczN,EAAO0N,MAAM5vC,UAAU6vC,IACrCC,EAAe,SAAUC,GACxB,OAAOA,CACR,EAEDlF,EAAkB3I,EAAO0N,MAAM5vC,UAAW,OAAO,WAC3CkiC,EAAO8N,OAAQtrC,KAAKsrC,QAASzwC,OAAS,IAC1C0qC,EACC,iBACA,kBAAoBvlC,KAAKsrC,OAAO/vC,WAAa,kCAG9CiiC,EAAO8N,OAAQtrC,KAAKsrC,QAAWF,GAGhCH,EAAYlrC,MAAOC,KAAMN,UAC1B,GAAG,kBAEHqrC,EAAgBvN,EAAOoF,GAAG/M,SAC1BmV,EAAc,mCAKT9qC,EAAOqrC,uBACXlwC,OAAOsqC,eAAgBnI,EAAOoF,GAAI,WAAY,CAC7CgD,cAAc,EACdC,YAAY,EACZ17B,IAAK,WAMJ,OALMjK,EAAOua,SAAS+wB,QACrBjG,EAAa,cAAeyF,GAIvBxN,EAAOwH,sBAAuB,qBAGX5nC,IAAlB2tC,EAA8B,GAF7BA,CAGT,EACAniB,IAAK,SAAUkd,GACdP,EAAa,cAAeyF,GAC5BD,EAAgBjF,CACjB,GAIF,CAEA,IAAI2F,EAAUjO,EAAOhjC,GAAG4E,KACvBssC,EAAclO,EAAOjvB,MAAM/F,IAC3BmjC,EAAcnO,EAAOjvB,MAAMq9B,IAE5BpO,EAAOjvB,MAAMhM,MAAQ,GACrBi7B,EAAOjvB,MAAMs9B,SAAW,CAAC,EAEzBnG,EAAiBlI,EAAOjvB,MAAMhM,MAAO,SAAUi7B,EAAOjvB,MAAMhM,MAAMvH,OACjE,kBACA,yDAEDmrC,EAAkB3I,EAAOjvB,MAAO,OAAO,SAAUu9B,GAChD,IAAIv9B,EACHzN,EAAOgrC,EAAchrC,KACrBirC,EAAU/rC,KAAK6rC,SAAU/qC,GACzByB,EAAQi7B,EAAOjvB,MAAMhM,MAEtB,GAAKA,EAAM1H,OAGV,IAFA0qC,EAAa,kBACZ,kDAAoDhjC,EAAMhE,QACnDgE,EAAM1H,QACb2iC,EAAOjvB,MAAMy9B,QAASzpC,EAAM6C,OAI9B,GAAK2mC,IAAYA,EAAQE,aACxBF,EAAQE,YAAa,EACrB1G,EAAa,kBACZ,qDAAuDzkC,IACjDyB,EAAQwpC,EAAQxpC,QAAWA,EAAM1H,QACvC,KAAQ0H,EAAM1H,QACb2iC,EAAOjvB,MAAMy9B,QAASzpC,EAAM6C,OAO/B,OAFAmJ,EAAQo9B,EAAYnwC,KAAMwE,KAAM8rC,GAEzBC,GAAWA,EAAQlnC,OACzBknC,EAAQlnC,OAAQ0J,EAAOu9B,GACvBv9B,CACF,GAAG,mBAEH43B,EAAkB3I,EAAOjvB,MAAO,OAAO,SAAUm0B,EAAM9sB,GAOtD,OAJK8sB,IAASxiC,GAAoB,SAAV0V,GAAmD,aAA/B1V,EAAOua,SAAS1C,YAC3DwtB,EAAa,mBACZ,iEAEKmG,EAAY3rC,MAAOC,KAAMN,UACjC,GAAG,oBAEH89B,EAAO7M,KAAM,CAAE,OAAQ,SAAU,UAAW,SAAUlM,EAAGllB,GAExD4mC,EAAkB3I,EAAOhjC,GAAI+E,GAAM,WAClC,IAAIkD,EAAOiI,MAAMpP,UAAU4J,MAAM1J,KAAMkE,UAAW,GAMlD,MAAc,SAATH,GAAwC,kBAAdkD,EAAM,GAC7BgpC,EAAQ1rC,MAAOC,KAAMyC,IAG7B8iC,EAAa,uBACZ,aAAehmC,EAAO,oBAEvBkD,EAAKopB,OAAQ,EAAG,EAAGtsB,GACdG,UAAU7E,OACPmF,KAAKylB,GAAG1lB,MAAOC,KAAMyC,IAO7BzC,KAAKksC,eAAensC,MAAOC,KAAMyC,GAC1BzC,MACR,GAAG,uBAEJ,IAEAw9B,EAAO7M,KAAM,wLAEgD/rB,MAAO,MACnE,SAAU86B,EAAIngC,GAGd2mC,EAAyB1I,EAAOhjC,GAAI+E,GAAM,SAAU+G,EAAM9L,GACzD,OAAOkF,UAAU7E,OAAS,EACzBmF,KAAKylB,GAAIlmB,EAAM,KAAM+G,EAAM9L,GAC3BwF,KAAKunB,QAAShoB,EACf,GACA,0BACA,aAAeA,EAAO,mCACxB,IAGAi+B,GAAQ,WACPA,EAAQt9B,EAAOua,UAAWyxB,eAAgB,QAC3C,IAEA1O,EAAOjvB,MAAM49B,QAAQC,MAAQ,CAC5BC,MAAO,WACDrsC,OAASE,EAAOua,UACpB8qB,EAAa,cAAe,8BAE9B,GAGDW,EAAyB1I,EAAOhjC,GAAI,QAAQ,SAAUob,EAAOtP,EAAM9L,GAClE,OAAOwF,KAAKylB,GAAI7P,EAAO,KAAMtP,EAAM9L,EACpC,GAAG,iBAAkB,kCACrB0rC,EAAyB1I,EAAOhjC,GAAI,UAAU,SAAUob,EAAOpb,GAC9D,OAAOwF,KAAKymB,IAAK7Q,EAAO,KAAMpb,EAC/B,GAAG,iBAAkB,oCACrB0rC,EAAyB1I,EAAOhjC,GAAI,YAAY,SAAU+0B,EAAU3Z,EAAOtP,EAAM9L,GAChF,OAAOwF,KAAKylB,GAAI7P,EAAO2Z,EAAUjpB,EAAM9L,EACxC,GAAG,iBAAkB,sCACrB0rC,EAAyB1I,EAAOhjC,GAAI,cAAc,SAAU+0B,EAAU3Z,EAAOpb,GAC5E,OAA4B,IAArBkF,UAAU7E,OAChBmF,KAAKymB,IAAK8I,EAAU,MACpBvvB,KAAKymB,IAAK7Q,EAAO2Z,GAAY,KAAM/0B,EACrC,GAAG,iBAAkB,wCACrB0rC,EAAyB1I,EAAOhjC,GAAI,SAAS,SAAU8xC,EAAQC,GAC9D,OAAOvsC,KAAKylB,GAAI,aAAc6mB,GAAS7mB,GAAI,aAAc8mB,GAASD,EACnE,GAAG,iBAAkB,mCAErB,IAAIE,EAAY,8FACfC,EAAa,SAAUjwB,GACtB,IAAIH,EAAMnc,EAAOua,SAASiyB,eAAeC,mBAAoB,IAE7D,OADAtwB,EAAIxF,KAAK+G,UAAYpB,EACdH,EAAIxF,MAAQwF,EAAIxF,KAAK+G,SAC7B,EACAgvB,EAAgB,SAAUpwB,GACzB,IAAIqM,EAAUrM,EAAK7X,QAAS6nC,EAAW,aAClC3jB,IAAYrM,GAAQiwB,EAAYjwB,KAAWiwB,EAAY5jB,IAC3D0c,EAAa,mBACZ,iDAAmD/oB,EAEtD,EAMDghB,EAAOqP,kCAAoC,WAC1CrP,EAAOuH,qBAAsB,mBAC9B,EAEAoB,EAAkB3I,EAAQ,iBAAiB,SAAUhhB,GAEpD,OADAowB,EAAepwB,GACRA,EAAK7X,QAAS6nC,EAAW,YACjC,GAAG,oBAIHhP,EAAOsH,sBAAuB,oBAE9B,IAAIgI,EAAatP,EAAOhjC,GAAGuyC,OAgB3B,GAdA5G,EAAkB3I,EAAOhjC,GAAI,UAAU,WACtC,IAAIkoC,EAAO1iC,KAAM,GAEjB,OAAK0iC,GAAWA,EAAKpC,UAAaoC,EAAKsK,sBAKhCF,EAAW/sC,MAAOC,KAAMN,YAJ9B6lC,EAAa,oBAAqB,mDAC3B7lC,UAAU7E,OAASmF,UAAO5C,EAInC,GAAG,qBAKEogC,EAAOpJ,KAAO,CAEnB,IAAI6Y,EAAYzP,EAAOnI,MAEvB8Q,EAAkB3I,EAAQ,SAAS,SAAUl3B,EAAM4mC,GAClD,IAAIC,EAAkB3P,EAAO4P,cAAgB5P,EAAO4P,aAAaF,YASjE,YAPqB9vC,IAAhB8vC,GAA6BC,IAEjC5H,EAAa,yBACZ,iEACD2H,EAAcC,GAGRF,EAAUzxC,KAAMwE,KAAMsG,EAAM4mC,EACpC,GAAG,yBAEH,CAMA,GAJAhH,EAAyB1I,EAAOhjC,GAAI,UAAWgjC,EAAOhjC,GAAG6yC,QAAS,UACjE,0EAGI7P,EAAO8P,SAAW,CAEvB,IAAIC,EAAc/P,EAAO8P,SACxBE,EAAS,CAGR,CAAE,UAAW,OAAQhQ,EAAOiQ,UAAW,eACtCjQ,EAAOiQ,UAAW,eAAiB,YACpC,CAAE,SAAU,OAAQjQ,EAAOiQ,UAAW,eACrCjQ,EAAOiQ,UAAW,eAAiB,YACpC,CAAE,SAAU,WAAYjQ,EAAOiQ,UAAW,UACzCjQ,EAAOiQ,UAAW,YAGrBtH,EAAkB3I,EAAQ,YAAY,SAAUkQ,GAC/C,IAAIC,EAAWJ,IACdzpB,EAAU6pB,EAAS7pB,UAEpB,SAAS8pB,IACR,IAAIC,EAAMnuC,UAEV,OAAO89B,EAAO8P,UAAU,SAAUQ,GACjCtQ,EAAO7M,KAAM6c,GAAQ,SAAU7yC,EAAGozC,GACjC,IAAIvzC,EAAyB,oBAAbqzC,EAAKlzC,IAAsBkzC,EAAKlzC,GAKhDgzC,EAAUI,EAAO,KAAO,WACvB,IAAIC,EAAWxzC,GAAMA,EAAGuF,MAAOC,KAAMN,WAChCsuC,GAAwC,oBAArBA,EAASlqB,QAChCkqB,EAASlqB,UACPmL,KAAM6e,EAAS1rB,SACfslB,KAAMoG,EAASzrB,QACf4rB,SAAUH,EAAS9vC,QAErB8vC,EAAUC,EAAO,GAAM,QACtB/tC,OAAS8jB,EAAUgqB,EAAShqB,UAAY9jB,KACxCxF,EAAK,CAAEwzC,GAAatuC,UAGvB,GACD,IACAmuC,EAAM,IACP,IAAI/pB,SACL,CAWA,OATAoiB,EAAyByH,EAAU,OAAQC,EAAiB,gBAC3D,iCACD1H,EAAyBpiB,EAAS,OAAQ8pB,EAAiB,gBAC1D,iCAEIF,GACJA,EAAKlyC,KAAMmyC,EAAUA,GAGfA,CACR,GAAG,iBAGHnQ,EAAO8P,SAASY,cAAgBX,EAAYW,aAE5C,CAEA,OAAO1Q,CACP,CA9+BUn8B,CAASm8B,EAAQt9B,OACxB,sCAWD,CAnBF,sBCQA,WACE,aAEA,IAAIiuC,EAAgB,SAASzpB,EAAGtnB,GAShC,IAAIgxC,EALC1pB,EAAE0pB,QAAUhxC,GACfsnB,EAAE5gB,MAAM,uCAKV,IAAIuqC,EAAY3pB,EAAEjK,UAElBiK,EAAE0pB,MAAQA,EAAQ,CAEhBE,kBAAmB,yGAGnBC,oBAAqB,sGAGrBC,oBAAqB,iEAGrBC,mBAAoB,8BAGpBC,uBAAwB,ySAGxBC,gBAAiB,sMAGjBC,eAAgB,4MAGhBC,sBAAuB,kFAGvBC,kBAAmB,yCAGnBC,oBAAqB,wCAGrBC,sBAAuB,4EAGvBC,UAAW,WACV,OAAOvqB,EAAE,yBAAyByE,KAAK,UACxC,EAGA+lB,UAAW,WACV,OAAOxqB,EAAE,yBAAyByE,KAAK,UACxC,EAGAgmB,eAAgB,SAASnkB,GACvB,IAAIokB,EAAQhB,EAAMa,YACdG,GAAOpkB,EAAI9S,iBAAiB,eAAgBk3B,EAClD,EAGAC,kBAAmB,WACjB3qB,EAAE,oBAAsB0pB,EAAMc,YAAc,MAAMx0C,IAAI0zC,EAAMa,YAC9D,EAGAK,KAAM,SAASl0C,EAAKmE,EAAM+G,GACxB,IAAIiI,EAAQmW,EAAE5Z,MAAMvL,GAEpB,OADAnE,EAAImsB,QAAQhZ,EAAOjI,IACK,IAAjBiI,EAAMzS,MACf,EAGAg+B,QAAS,SAAS78B,GAChB,OAAO68B,QAAQ78B,EACjB,EAGAm3B,KAAM,SAASlS,GACb,OAAOwC,EAAE0P,KAAKlS,EAChB,EAGA/G,KAAM,SAASyU,GACb,OAAOA,EAAQ,GAAGzU,IACpB,EAGAo0B,SAAU,SAAS3f,GACjB,OAAOA,EAAQtpB,KAAK,YAAclJ,IAAwC,IAA3BwyB,EAAQtpB,KAAK,SAC9D,EAGAkpC,aAAc,SAAS5f,GACrB,IAAI9wB,EAAQ6X,EAAKrQ,EAAMmpC,EAAiB5b,EAAU3R,EAElD,GAAIksB,EAAMkB,KAAK1f,EAAS,eAAgB,CAItC,GAHA6f,EAAkB7f,EAAQtpB,KAAK,qBAAuB,KACtDutB,EAAWjE,EAAQtpB,KAAK,SAAYoe,EAAE0oB,cAAgB1oB,EAAE0oB,aAAavZ,SAEjEjE,EAAQ+Q,GAAG,QAAS,CACtB7hC,EAAS8wB,EAAQtpB,KAAK,iCAAmCspB,EAAQzG,KAAK,UACtExS,EAAMiZ,EAAQtpB,KAAK,iCAAmCspB,EAAQzG,KAAK,UACnE7iB,EAAOoe,EAAEkL,EAAQ,IAAI8f,iBAErB,IAAIC,EAAS/f,EAAQtpB,KAAK,qBACtBqpC,IACFrpC,EAAKtK,KAAK2zC,GACV/f,EAAQtpB,KAAK,oBAAqB,OAEpCspB,EAAQtpB,KAAK,+BAAgC,MAC7CspB,EAAQtpB,KAAK,+BAAgC,KAC/C,MAAWspB,EAAQ+Q,GAAGyN,EAAMI,sBAC1B1vC,EAAS8wB,EAAQtpB,KAAK,UACtBqQ,EAAMiZ,EAAQtpB,KAAK,OACnBA,EAAOspB,EAAQggB,YACXhgB,EAAQtpB,KAAK,YAAWA,EAAOA,EAAO,IAAMspB,EAAQtpB,KAAK,YACpDspB,EAAQ+Q,GAAGyN,EAAMG,sBAC1BzvC,EAAS8wB,EAAQtpB,KAAK,WAAa,MACnCqQ,EAAMiZ,EAAQtpB,KAAK,OACnBA,EAAOspB,EAAQggB,YACXhgB,EAAQtpB,KAAK,YAAWA,EAAOA,EAAO,IAAMspB,EAAQtpB,KAAK,aAE7DxH,EAAS8wB,EAAQtpB,KAAK,UACtBqQ,EAAMy3B,EAAMjzB,KAAKyU,GACjBtpB,EAAOspB,EAAQtpB,KAAK,WAAa,MAuCnC,OApCA4b,EAAU,CACRphB,KAAMhC,GAAU,MAAOwH,KAAMA,EAAMutB,SAAUA,EAE7CG,WAAY,SAAShJ,EAAK6kB,GAIxB,GAHIA,EAAShc,WAAaz2B,GACxB4tB,EAAI9S,iBAAiB,SAAU,cAAgB23B,EAASC,QAAQ9yB,SAE9DoxB,EAAMkB,KAAK1f,EAAS,kBAAmB,CAAC5E,EAAK6kB,IAG/C,OAAO,EAFPjgB,EAAQrI,QAAQ,YAAayD,EAIjC,EACAR,QAAS,SAASlkB,EAAM2R,EAAQ+S,GAC9B4E,EAAQrI,QAAQ,eAAgB,CAACjhB,EAAM2R,EAAQ+S,GACjD,EACA+kB,SAAU,SAAS/kB,EAAK/S,GACtB2X,EAAQrI,QAAQ,gBAAiB,CAACyD,EAAK/S,GACzC,EACAnU,MAAO,SAASknB,EAAK/S,EAAQnU,GAC3B8rB,EAAQrI,QAAQ,aAAc,CAACyD,EAAK/S,EAAQnU,GAC9C,EACAksC,YAAa5B,EAAM6B,cAAct5B,IAK/B84B,IACFvtB,EAAQguB,UAAY,CAClBT,gBAAiBA,IAKjB94B,IAAOuL,EAAQvL,IAAMA,GAElBy3B,EAAMha,KAAKlS,EACpB,CACE,OAAO,CAEX,EAGA+tB,cAAe,SAASt5B,GACtB,IAAIw5B,EAAe11B,SAAS6F,cAAc,KAC1C6vB,EAAah1B,KAAOhb,SAASgb,KAC7B,IAAIi1B,EAAY31B,SAAS6F,cAAc,KAEvC,IAUE,OATA8vB,EAAUj1B,KAAOxE,EAEjBy5B,EAAUj1B,KAAOi1B,EAAUj1B,SAOfi1B,EAAU54B,UAAmC,MAAvB44B,EAAU54B,YAAsB44B,EAAUhwC,MACzE+vC,EAAa34B,SAAW,KAAO24B,EAAa/vC,OAC3CgwC,EAAU54B,SAAW,KAAO44B,EAAUhwC,KAC5C,CAAE,MAAOuF,GAEP,OAAO,CACT,CACF,EAIA0qC,aAAc,SAASC,GACrB,IAAIn1B,EAAOizB,EAAMjzB,KAAKm1B,GACpBxxC,EAASwxC,EAAKhqC,KAAK,UACnB7G,EAAS6wC,EAAKnnB,KAAK,UACnB8lB,EAAYb,EAAMa,YAClBC,EAAYd,EAAMc,YAClB5U,EAAO5V,EAAE,+BAAiCvJ,EAAO,aACjDo1B,EAAgB,gCAAkCzxC,EAAS,qBAEzDowC,IAAc9xC,GAAa6xC,IAAc7xC,GAAcgxC,EAAM6B,cAAc90B,KAC7Eo1B,GAAiB,gBAAkBrB,EAAY,YAAcD,EAAY,sBAGvExvC,GAAU66B,EAAKnR,KAAK,SAAU1pB,GAElC66B,EAAKkW,OAAOjW,OAAOgW,GAAeE,SAAS,QAC3CnW,EAAKoW,QACP,EAKAC,aAAc,SAASrW,EAAM/K,GAC3B,OAAO+K,EAAKqG,GAAG,QAAUjc,EAAE4V,EAAK,GAAGsW,UAAU/rC,OAAO0qB,GAAY+K,EAAKhzB,KAAKioB,EAC5E,EAOAshB,oBAAqB,SAASvW,GAC5B8T,EAAMuC,aAAarW,EAAM8T,EAAMO,iBAAiBhe,MAAK,WACnDyd,EAAM0C,mBAAmBpsB,EAAE1kB,MAC7B,GACF,EAEA8wC,mBAAoB,SAASlhB,GAC3B,IAAI9wB,EAAQuf,EAEZvf,EAAS8wB,EAAQ+Q,GAAG,UAAY,OAAS,OACzCtiB,EAAcuR,EAAQtpB,KAAK,mBAEPlJ,IAClBwyB,EAAQtpB,KAAK,kBAAmBspB,EAAQ9wB,MACxC8wB,EAAQ9wB,GAAQuf,IAGlBuR,EAAQ/zB,KAAK,YAAY,GACzB+zB,EAAQtpB,KAAK,gBAAgB,EAC/B,EAMAyqC,mBAAoB,SAASzW,GAC3B8T,EAAMuC,aAAarW,EAAM8T,EAAMQ,gBAAgBje,MAAK,WAClDyd,EAAM4C,kBAAkBtsB,EAAE1kB,MAC5B,GACF,EAEAgxC,kBAAmB,SAASphB,GAC1B,IAAI9wB,EAAS8wB,EAAQ+Q,GAAG,UAAY,OAAS,MACzC/Q,EAAQtpB,KAAK,qBAAuBlJ,IACtCwyB,EAAQ9wB,GAAQ8wB,EAAQtpB,KAAK,oBAC7BspB,EAAQqhB,WAAW,oBAErBrhB,EAAQ/zB,KAAK,YAAY,GACzB+zB,EAAQqhB,WAAW,eACrB,EAYAC,YAAa,SAASthB,GACpB,IACoBtK,EADhBroB,EAAU2yB,EAAQtpB,KAAK,WACvB6qC,GAAS,EACb,IAAKl0C,EAAW,OAAO,EAEvB,GAAImxC,EAAMkB,KAAK1f,EAAS,WAAY,CAClC,IACEuhB,EAAS/C,EAAMtU,QAAQ78B,EACzB,CAAE,MAAO0I,IACNtF,QAAQyD,OAASzD,QAAQI,KAAKjF,KAAK6E,QAASsF,EAAE1B,OAAS0B,EAC1D,CACA2f,EAAW8oB,EAAMkB,KAAK1f,EAAS,mBAAoB,CAACuhB,GACtD,CACA,OAAOA,GAAU7rB,CACnB,EAGA8rB,YAAa,SAAS9W,EAAM+W,EAAmBC,GAC7C,IACEC,EAEAC,EACAC,EAJEC,EAAchtB,IAKhB6K,EAAW8hB,GAAqB,iBAChCM,EAAiBrX,EAAKhzB,KAAKioB,GAC3BqiB,EAA0B,CAAC,EA+B7B,OA7BAD,EAAehhB,MAAK,YAClB4gB,EAAQ7sB,EAAE1kB,OACA2gC,GAAG,sBAKX8Q,EAAYF,EAAMpoB,KAAK,QAGlByoB,EAAwBH,KAGqD,IAA5EnX,EAAKhzB,KAAK,mCAAqCmqC,EAAY,MAAM52C,SACnE22C,EAAgClX,EAAKhzB,KACnC,2BAA6BmqC,EAAY,MAC3CC,EAAcA,EAAYlpC,IAAIgpC,IAIhCI,EAAwBH,GAAaA,KAGxBF,EAAM5Q,GAAG,0CAA4C4Q,EAAM5Q,GAAG,cAAgB4Q,EAAM72C,SAC9E42C,IACnBI,EAAcA,EAAYlpC,IAAI+oC,GAGpC,MACOG,EAAY72C,QAAS62C,CAC9B,EAGAG,eAAgB,SAASvX,EAAM+W,GAC7B,OAAOjD,EAAMgD,YAAY9W,EAAM+W,GAAmB,EACpD,EAGAS,eAAgB,SAASnsC,GAGvB,OAFA+e,EAAE/e,EAAElG,QAAQ8nB,QAAQ,yBACpB5hB,EAAEosC,4BACK,CACT,EAIAC,eAAgB,SAASpiB,GACvB,IAAIvR,EAAcuR,EAAQtpB,KAAK,gBAE3B+X,IAAgBjhB,IAClBwyB,EAAQtpB,KAAK,kBAAmBspB,EAAQpT,QACxCoT,EAAQpT,KAAK6B,IAGfuR,EAAQnK,GAAG,sBAAsB,SAAS9f,GACxC,OAAOyoC,EAAM0D,eAAensC,EAC9B,IACAiqB,EAAQtpB,KAAK,gBAAgB,EAC/B,EAGA2rC,cAAe,SAASriB,GAClBA,EAAQtpB,KAAK,qBAAuBlJ,IACtCwyB,EAAQpT,KAAKoT,EAAQtpB,KAAK,oBAC1BspB,EAAQqhB,WAAW,oBAErBrhB,EAAQnJ,IAAI,sBACZmJ,EAAQqhB,WAAW,eACrB,GAGE7C,EAAMkB,KAAKjB,EAAW,0BAExB3pB,EAAEkjB,eAAc,SAAS1lB,EAASgwB,EAAiBlnB,GAAY9I,EAAQ8tB,aAAgB5B,EAAMe,eAAenkB,EAAO,IAOnHtG,EAAExkB,QAAQulB,GAAG,kBAAkB,WAC7Bf,EAAEA,EAAE0pB,MAAMQ,gBAAgBje,MAAK,WAC7B,IAAIf,EAAUlL,EAAE1kB,MAEZ4vB,EAAQtpB,KAAK,iBACfoe,EAAE0pB,MAAM4C,kBAAkBphB,EAE9B,IAEAlL,EAAEA,EAAE0pB,MAAMW,qBAAqBpe,MAAK,WAClC,IAAIf,EAAUlL,EAAE1kB,MAEZ4vB,EAAQtpB,KAAK,iBACfoe,EAAE0pB,MAAM6D,cAAcriB,EAE1B,GACF,IAEAye,EAAU5oB,GAAG,gBAAiB2oB,EAAMW,qBAAqB,WACrDX,EAAM6D,cAAcvtB,EAAE1kB,MAC1B,IAEAquC,EAAU5oB,GAAG,gBAAiB2oB,EAAMY,uBAAuB,WACvDZ,EAAM4C,kBAAkBtsB,EAAE1kB,MAC9B,IAEAquC,EAAU5oB,GAAG,cAAe2oB,EAAME,mBAAmB,SAAS3oC,GAC5D,IAAI2qC,EAAO5rB,EAAE1kB,MAAOlB,EAASwxC,EAAKhqC,KAAK,UAAWA,EAAOgqC,EAAKhqC,KAAK,UAAW6rC,EAAYxsC,EAAEysC,SAAWzsC,EAAE0sC,QACzG,IAAKjE,EAAM8C,YAAYZ,GAAO,OAAOlC,EAAM0D,eAAensC,GAI1D,IAFKwsC,GAAa7B,EAAK3P,GAAGyN,EAAMW,sBAAsBX,EAAM4D,eAAe1B,GAEvElC,EAAMmB,SAASe,GAAO,CACxB,GAAI6B,KAAerzC,GAAqB,QAAXA,KAAsBwH,EAAQ,OAAO,EAElE,IAAIkpC,EAAepB,EAAMoB,aAAac,GAOtC,OALqB,IAAjBd,EACFpB,EAAM6D,cAAc3B,GAEpBd,EAAa9H,MAAM,WAAa0G,EAAM6D,cAAc3B,EAAO,KAEtD,CAET,CAAO,OAAIxxC,GACTsvC,EAAMiC,aAAaC,IACZ,QAFF,CAIT,IAEAjC,EAAU5oB,GAAG,cAAe2oB,EAAMG,qBAAqB,SAAS5oC,GAC9D,IAAIgqC,EAASjrB,EAAE1kB,MAEf,IAAKouC,EAAM8C,YAAYvB,KAAYvB,EAAMmB,SAASI,GAAS,OAAOvB,EAAM0D,eAAensC,GAEnFgqC,EAAOhP,GAAGyN,EAAMY,wBAAwBZ,EAAM0C,mBAAmBnB,GAErE,IAAIH,EAAepB,EAAMoB,aAAaG,GAOtC,OALqB,IAAjBH,EACFpB,EAAM4C,kBAAkBrB,GAExBH,EAAa9H,MAAM,WAAa0G,EAAM4C,kBAAkBrB,EAAS,KAE5D,CACT,IAEAtB,EAAU5oB,GAAG,eAAgB2oB,EAAMI,qBAAqB,SAAS7oC,GAC/D,IAAI2qC,EAAO5rB,EAAE1kB,MACb,OAAKouC,EAAM8C,YAAYZ,IAAUlC,EAAMmB,SAASe,IAEhDlC,EAAMoB,aAAac,IACZ,GAHuDlC,EAAM0D,eAAensC,EAIrF,IAEA0oC,EAAU5oB,GAAG,eAAgB2oB,EAAMK,oBAAoB,SAAS9oC,GAC9D,IAEE2sC,EACAC,EAHEjY,EAAO5V,EAAE1kB,MACXwyC,EAASpE,EAAMmB,SAASjV,GAI1B,IAAK8T,EAAM8C,YAAY5W,GAAO,OAAO8T,EAAM0D,eAAensC,GAG1D,GAAI20B,EAAKnR,KAAK,gBAAkB/rB,EAC9B,GAAIk9B,EAAKh0B,KAAK,+BAAiClJ,GAE7C,IADAk1C,EAAsBlE,EAAMgD,YAAY9W,EAAM8T,EAAMS,uBAAuB,KAChDT,EAAMkB,KAAKhV,EAAM,wBAAyB,CAACgY,IACpE,OAAOlE,EAAM0D,eAAensC,QAK9B20B,EAAKh0B,KAAK,4BAA6BlJ,GAI3C,GAAIo1C,EAAQ,CAEV,GADAD,EAAqBnE,EAAMyD,eAAevX,EAAM8T,EAAMU,mBAC9B,CAGtB/+B,YAAW,WAAYq+B,EAAMyC,oBAAoBvW,EAAO,GAAG,IAC3D,IAAImY,EAAUrE,EAAMkB,KAAKhV,EAAM,oBAAqB,CAACiY,IAKrD,OAFKE,GAAW1iC,YAAW,WAAYq+B,EAAM2C,mBAAmBzW,EAAO,GAAG,IAEnEmY,CACT,CAGA,OADArE,EAAMoB,aAAalV,IACZ,CAET,CAEEvqB,YAAW,WAAYq+B,EAAMyC,oBAAoBvW,EAAO,GAAG,GAE/D,IAEA+T,EAAU5oB,GAAG,cAAe2oB,EAAMM,wBAAwB,SAASngC,GACjE,IAAIohC,EAASjrB,EAAE1kB,MAEf,IAAKouC,EAAM8C,YAAYvB,GAAS,OAAOvB,EAAM0D,eAAevjC,GAG5D,IAAIhP,EAAOowC,EAAOxmB,KAAK,QACrB7iB,EAAO/G,EAAO,CAACA,KAAKA,EAAMlD,MAAMszC,EAAOj1C,OAAS,KAE9C4/B,EAAOqV,EAAO+C,QAAQ,QACN,IAAhBpY,EAAKz/B,SACPy/B,EAAO5V,EAAE,IAAMirB,EAAOxmB,KAAK,UAE7BmR,EAAKh0B,KAAK,oBAAqBA,GAG/Bg0B,EAAKh0B,KAAK,4BAA6BqpC,EAAOxmB,KAAK,mBACnDmR,EAAKh0B,KAAK,+BAAgCqpC,EAAOxmB,KAAK,eACtDmR,EAAKh0B,KAAK,+BAAgCqpC,EAAOxmB,KAAK,cACxD,IAEAklB,EAAU5oB,GAAG,kBAAmB2oB,EAAMK,oBAAoB,SAASlgC,GAC7DvO,OAASuO,EAAM9O,QAAQ2uC,EAAMyC,oBAAoBnsB,EAAE1kB,MACzD,IAEAquC,EAAU5oB,GAAG,sBAAuB2oB,EAAMK,oBAAoB,SAASlgC,GACjEvO,OAASuO,EAAM9O,QAAQ2uC,EAAM2C,mBAAmBrsB,EAAE1kB,MACxD,IAEA0kB,GAAE,WACA0pB,EAAMiB,mBACR,IAGF,EAEInvC,OAAOs9B,OACT2Q,EAAc3Q,QAEdtjC,EAAOC,QAAUg0C,CAEpB,CAxiBD,mBCZA,IAAIwE,EAAe,WAAc,SAASC,EAAiBnzC,EAAQ8C,GAAS,IAAK,IAAI5H,EAAI,EAAGA,EAAI4H,EAAM1H,OAAQF,IAAK,CAAE,IAAIk4C,EAAatwC,EAAM5H,GAAIk4C,EAAWhN,WAAagN,EAAWhN,aAAc,EAAOgN,EAAWjN,cAAe,EAAU,UAAWiN,IAAYA,EAAWC,UAAW,GAAMz3C,OAAOsqC,eAAelmC,EAAQozC,EAAWl0C,IAAKk0C,EAAa,CAAE,CAAE,OAAO,SAAUE,EAAa3a,EAAYC,GAAiJ,OAA9HD,GAAYwa,EAAiBG,EAAYz3C,UAAW88B,GAAiBC,GAAaua,EAAiBG,EAAa1a,GAAqB0a,CAAa,CAAG,CAA7hB,GAEnB,SAASC,EAAgBpiB,EAAUmiB,GAAe,KAAMniB,aAAoBmiB,GAAgB,MAAM,IAAInwC,UAAU,oCAAwC,EAGxJ,WAME,aAEA,IAAI8hB,EAAGuuB,EAAWC,EAElBxuB,EAAI8Y,OAEJyV,EAAY,WACV,IAAIA,EAAY,WACd,SAASA,IACPD,EAAgBhzC,KAAMizC,EACxB,CAiBA,OAfAN,EAAaM,EAAW,KAAM,CAAC,CAC7Bt0C,IAAK,aACLtC,MAAO,SAAoBmzB,GACzB,IAAIxQ,EAAIm0B,EAAKr3C,EAAQgF,EAGrB,IAAKA,KAFLke,EAAKwQ,EAAI,GACT2jB,EAAMnzC,KAAKozC,YAGT,GADAt3C,EAASq3C,EAAIryC,GACS,MAAlBke,EAAGmY,MAAMr2B,GACX,OAAOhF,CAGb,KAGKm3C,CACT,CArBgB,GAgChB,OAPAA,EAAUG,YAAc,CACtB,iBAAoB,sBACpB,cAAiB,mBACjB,YAAe,iBACf,WAAc,iBAGTH,CACT,CAlCY,GAoCZC,EAAQ,WACN,IAAIA,EAAQ,WAUV,SAASA,IACP,IAAIrD,EAAWnwC,UAAU7E,OAAS,QAAsBuC,IAAjBsC,UAAU,GAAmBA,UAAU,GAAK,CAAC,EAEpFszC,EAAgBhzC,KAAMkzC,GAEtBlzC,KAAKyvB,OAASzvB,KAAKyvB,OAAO9uB,KAAKX,MAC/BA,KAAKW,KAAOX,KAAKW,KAAKA,KAAKX,MAC3BA,KAAKkoB,OAASloB,KAAKkoB,OAAOvnB,KAAKX,MAC/BA,KAAKqzC,WAAarzC,KAAKqzC,WAAW1yC,KAAKX,MACvCA,KAAKszC,WAAatzC,KAAKszC,WAAW3yC,KAAKX,MACvCA,KAAK26B,MAAQ36B,KAAK26B,MAAMh6B,KAAKX,MAC7BA,KAAK03B,MAAQ13B,KAAK03B,MAAM/2B,KAAKX,MAC7BA,KAAKuzC,MAAQvzC,KAAKuzC,MAAM5yC,KAAKX,MAC7BA,KAAKwzC,eAAiBxzC,KAAKwzC,eAAe7yC,KAAKX,MAC/CA,KAAKyzC,QAAUzzC,KAAKyzC,QAAQ9yC,KAAKX,MACjCA,KAAK0zC,QAAU1zC,KAAK0zC,QAAQ/yC,KAAKX,MACjCA,KAAK2rB,OAAS3rB,KAAK2rB,OAAOhrB,KAAKX,MAC/BA,KAAKm7B,QAAUn7B,KAAKm7B,QAAQx6B,KAAKX,MACjCA,KAAK2zC,QAAU3zC,KAAK2zC,QAAQhzC,KAAKX,MACjCA,KAAK4zC,OAAS5zC,KAAK4zC,OAAOjzC,KAAKX,MAC/BA,KAAKwc,KAAOxc,KAAKwc,KAAK7b,KAAKX,MAC3BA,KAAK2d,QAAU3d,KAAK2d,QAAQhd,KAAKX,MACjCA,KAAK6zC,UAAY7zC,KAAK6zC,UAAUlzC,KAAKX,MACrCA,KAAK6vC,SAAWnrB,EAAEyD,OAAO,CAAC,EAAG+qB,EAAMrD,SAAUA,GAC7C7vC,KAAK8oB,WAAW9oB,KAAK6vC,SAAS1vC,UAC9BH,KAAKyvB,QACP,CAkKA,OArMAkjB,EAAaO,EAAO,KAAM,CAAC,CACzBv0C,IAAK,QACLtC,MAAO,WAGL,OAAO,IAAI62C,EAFIxzC,UAAU7E,OAAS,QAAsBuC,IAAjBsC,UAAU,GAAmBA,UAAU,GAAK,CAAC,EAGtF,KA+BFizC,EAAaO,EAAO,CAAC,CACnBv0C,IAAK,aACLtC,MAAO,SAAoB8D,GACzB,IAAI6M,EAEJ,OAAO0X,EAAE,mBADT1X,EAAK,UAAY7M,GACiB,MAAMo6B,OAAO,YAAcvtB,EAAK,OACpE,GACC,CACDrO,IAAK,SACLtC,MAAO,WACL,IAAIu3C,EACJA,EAAS5zC,KAAK4zC,SACd5zC,KAAK2zC,QAAQ3zC,KAAK6vC,SAAS1vC,UAAUo6B,OAAOqZ,GACxC5zC,KAAK6vC,SAASiE,MAChB9zC,KAAKyzC,UAELzzC,KAAKuzC,OAET,GACC,CACD50C,IAAK,OACLtC,MAAO,WACL,IAAIu3C,EAASl0C,UAAU7E,OAAS,QAAsBuC,IAAjBsC,UAAU,GAAmBA,UAAU,GAAKM,KAAK4zC,SAOtF,OALAA,EAAOnuB,GAAG,QAASzlB,KAAK26B,OACpB36B,KAAK6vC,SAASkE,eAChBH,EAAOnuB,GAAG,aAAczlB,KAAKqzC,YAC7BO,EAAOnuB,GAAG,aAAczlB,KAAKszC,aAExBM,EAAOnuB,GAAG,cAAezlB,KAAK03B,OAAOpwB,KAAK,IAAMtH,KAAK6vC,SAASmE,UAAY,UAAUvuB,GAAG,QAASzlB,KAAK03B,MAC9G,GACC,CACD/4B,IAAK,SACLtC,MAAO,WACL,IAAIu3C,EAASl0C,UAAU7E,OAAS,QAAsBuC,IAAjBsC,UAAU,GAAmBA,UAAU,GAAKM,KAAK4zC,SAOtF,OALAA,EAAOntB,IAAI,QAASzmB,KAAK26B,OACrB36B,KAAK6vC,SAASkE,eAChBH,EAAOntB,IAAI,aAAczmB,KAAKqzC,YAC9BO,EAAOntB,IAAI,aAAczmB,KAAKszC,aAEzBM,EAAOntB,IAAI,cAAezmB,KAAK03B,OAAOpwB,KAAK,IAAMtH,KAAK6vC,SAASmE,UAAY,UAAUvtB,IAAI,QAASzmB,KAAK03B,MAChH,GACC,CACD/4B,IAAK,aACLtC,MAAO,SAAoBkS,GAGzB,OADSvO,KAAK4zC,SACA9b,MAAK,GAAM,EAC3B,GACC,CACDn5B,IAAK,aACLtC,MAAO,SAAoBkS,GACzB,OAAOvO,KAAKwzC,gBACd,GACC,CACD70C,IAAK,QACLtC,MAAO,SAAekS,GACpB,GAAyB,MAArBvO,KAAK6vC,SAASl5B,IAGhB,OAFApI,EAAMmsB,iBACNnsB,EAAM0lC,kBACC/zC,OAAOiX,KAAKnX,KAAK6vC,SAASl5B,IAErC,GACC,CACDhY,IAAK,QACLtC,MAAO,SAAekS,GAKpB,OAHAA,EAAMmsB,iBACNnsB,EAAM0lC,kBACGj0C,KAAK4zC,SACA9b,OAAOoc,MAAMl0C,KAAK0zC,SAASQ,MAAMl0C,KAAK2rB,OACtD,GACC,CACDhtB,IAAK,QACLtC,MAAO,WAGL,OADS2D,KAAK4zC,SACAM,MAAMl0C,KAAKyzC,SAASS,MAAMl0C,KAAKwzC,iBAC/C,GACC,CACD70C,IAAK,iBACLtC,MAAO,WAGL,OADS2D,KAAK4zC,SACAO,MAAMn0C,KAAK6vC,SAASr3B,UAAU07B,MAAMl0C,KAAK0zC,SAASQ,MAAMl0C,KAAK2rB,OAC7E,GACC,CACDhtB,IAAK,UACLtC,MAAO,SAAiBipB,GACtB,IAAIsuB,EAGJ,OAFAA,EAAS5zC,KAAK4zC,SACd5zC,KAAKW,KAAKizC,GACH5zC,KAAKm7B,QAAQyY,EAAQ5zC,KAAK6vC,SAASmE,UAAY,YAAa,MAAO1uB,EAC5E,GACC,CACD3mB,IAAK,UACLtC,MAAO,SAAiBipB,GACtB,IAAIsuB,EAGJ,OAFAA,EAAS5zC,KAAK4zC,SACd5zC,KAAKkoB,OAAO0rB,GACL5zC,KAAKm7B,QAAQyY,EAAQ5zC,KAAK6vC,SAASmE,UAAY,YAAa,KAAM1uB,EAC3E,GACC,CACD3mB,IAAK,SACLtC,MAAO,SAAgBipB,GAErB,OADAtlB,KAAK4zC,SAASjoB,SACa,oBAAbrG,EAA0BA,SAAa,CACvD,GACC,CACD3mB,IAAK,UACLtC,MAAO,SAAiB+3C,EAAU70C,GAChC,IAGI2hC,EAHAmT,EAAY30C,UAAU7E,OAAS,QAAsBuC,IAAjBsC,UAAU,GAAmBA,UAAU,GAAK,KAChF4lB,EAAW5lB,UAAU,GAGzBwhC,EAAa+R,EAAU/R,WAAWkT,GAClCA,EAAuB,OAAdC,EAAqB,cAAgB,YAAY90C,GAC1D60C,EAASrH,SAASuH,SAClBF,EAAuB,OAAdC,EAAqB,WAAa,eAAe90C,GAC1C,MAAZ+lB,IAGc,MAAd4b,EACFkT,EAASG,IAAIrT,EAAY5b,GAEzBA,IAEJ,GACC,CACD3mB,IAAK,UACLtC,MAAO,SAAiB8D,GACtB,IAAIiR,EAIJ,OAHqB,MAAjBpR,KAAKw0C,WACPx0C,KAAKw0C,SAAW,IAEyB,OAAnCpjC,EAAOpR,KAAKw0C,UAAUr0C,GAAoBiR,EAAKjR,GAAYiR,EAAKjR,GAAYukB,EAAE,WAAavkB,EACrG,GACC,CACDxB,IAAK,SACLtC,MAAO,WACL,OAAuB,MAAhB2D,KAAKy0C,QAAkBz0C,KAAKy0C,QAAUz0C,KAAKy0C,QAAU/vB,EAAE1kB,KAAKwc,OACrE,GACC,CACD7d,IAAK,OACLtC,MAAO,WACL,OAAO2D,KAAK6zC,UAAU7zC,KAAK2d,UAC7B,GACC,CACDhf,IAAK,UACLtC,MAAO,WACL,MAAO,eAAiB2D,KAAK6vC,SAASmE,UAAY,WAAah0C,KAAK6vC,SAASnY,MAAQ,uBAAyB13B,KAAK6vC,SAASmE,UAAY,WAAah0C,KAAK6vC,SAASnvB,MAAQ,uBAAyB1gB,KAAK6vC,SAASmE,UAAY,aAAeh0C,KAAK6vC,SAAS5yC,QAAU,QACvQ,GACC,CACD0B,IAAK,YACLtC,MAAO,SAAmBshB,GACxB,MAAO,eAAiB3d,KAAK6vC,SAASmE,UAAY,IAAMh0C,KAAK6vC,SAASmE,UAAY,IAAMh0C,KAAK6vC,SAAS1Y,MAAQ,IAAMn3B,KAAK6vC,SAASmE,UAAY,IAAMh0C,KAAK6vC,SAASt/B,KAAO,SAAWoN,EAAU,UAChM,KAGKu1B,CACT,CAvMY,GAqNZ,OAVAA,EAAMrD,SAAW,CACfmE,UAAW,QACXx7B,SAAU,KACVkf,MAAO,SACPv3B,SAAU,UACVg3B,MAAO,UACP5mB,KAAM,SACNwjC,cAAc,GAGTb,CACT,CAvNQ,GAyNRlzC,KAAKkzC,MAAQA,EAEbxuB,EAAEgwB,MAAQ,WACR,IAAIxyB,EAAUxiB,UAAU7E,OAAS,QAAsBuC,IAAjBsC,UAAU,GAAmBA,UAAU,GAAK,CAAC,EAEnF,OAAOwzC,EAAMwB,MAAMxyB,EACrB,EAEAwC,EAAEgwB,MAAM5wC,MAAQ,WACd,IAEI+rC,EAFA3tB,EAAUxiB,UAAU7E,OAAS,QAAsBuC,IAAjBsC,UAAU,GAAmBA,UAAU,GAAK,CAAC,EAOnF,OAJAmwC,EAAW,CACTnvB,MAAO,SACPyW,MAAO,SAEFzS,EAAEgwB,MAAMhwB,EAAEyD,OAAO0nB,EAAU3tB,GACpC,EAEAwC,EAAEgwB,MAAMC,OAAS,WACf,IAEI9E,EAFA3tB,EAAUxiB,UAAU7E,OAAS,QAAsBuC,IAAjBsC,UAAU,GAAmBA,UAAU,GAAK,CAAC,EAOnF,OAJAmwC,EAAW,CACTnvB,MAAO,UACPyW,MAAO,UAEFzS,EAAEgwB,MAAMhwB,EAAEyD,OAAO0nB,EAAU3tB,GACpC,EAEAwC,EAAEgwB,MAAME,QAAU,WAChB,IAEI/E,EAFA3tB,EAAUxiB,UAAU7E,OAAS,QAAsBuC,IAAjBsC,UAAU,GAAmBA,UAAU,GAAK,CAAC,EAOnF,OAJAmwC,EAAW,CACTnvB,MAAO,WACPyW,MAAO,WAEFzS,EAAEgwB,MAAMhwB,EAAEyD,OAAO0nB,EAAU3tB,GACpC,CACD,GAAE1mB,KAAKwE,yBCtTK,QACN60C,GAAGz1C,KAAK,EAAQ,6BCDvB,WAMC,SAAUgC,EAAMC,GAChB,aAGkCnH,EAAOC,QACxCD,EAAOC,QAAUkH,EAAQ,EAAQ,OAEjC,EAAO,CAAC,aAAkB,2BAAP,EAAF,GAAS,+BAI5B,CAXA,CAWErB,GAAM,SAAU80C,GACjB,kBAGuB13C,IAAnB03C,EAAOjgC,SAAyBigC,EAAOC,UAC1CD,EAASA,EAAOC,SASjB,IAMCC,EALAC,EAAQ,CAAC,EACTC,EAAQ,CAAC,EACTC,EAAY,CAAC,EACb5vB,EAAQ,CAAC,EACT6vB,EAAU,CAAC,EAGPN,GAAoC,kBAAnBA,EAAOjgC,SAC5BwgC,EAAS,gGAGV,IAAIC,EAAgBR,EAAOjgC,QAAQjQ,MAAM,KACxC2wC,GAASD,EAAc,GACvBE,GAASF,EAAc,GAWxB,SAASG,EAAcC,GACtB,OAAIA,EAAW,GACPA,EAAW,GACRA,EAAW,GACdA,EAAW,GAEZA,EAAW,EACnB,CAEA,SAASC,EAAapW,GACrB,IAAI5kC,EAAI,EACP8J,EAAQ86B,EAAO36B,MAAM,KACrBgxC,EAAQnxC,EAAM,GACdoxC,EAAapxC,EAAM,IAAM,GACzBqxC,EAAa,EAEbC,EAAM,EACNC,EAAO,EASR,IAN6B,KAAzBzW,EAAO0W,WAAW,KACrBt7C,EAAI,EACJq7C,GAAQ,GAIDr7C,EAAIi7C,EAAM/6C,OAAQF,IAEzBo7C,EAAM,GAAKA,EADLN,EAAcG,EAAMK,WAAWt7C,IAKtC,IAAKA,EAAI,EAAGA,EAAIk7C,EAAWh7C,OAAQF,IAClCm7C,GAA0B,GAE1BC,GADMN,EAAcI,EAAWI,WAAWt7C,IAC7Bm7C,EAGd,OAAOC,EAAMC,CACd,CAEA,SAASE,EAAYpqB,GACpB,IAAK,IAAInxB,EAAI,EAAGA,EAAImxB,EAAMjxB,OAAQF,IACjCmxB,EAAMnxB,GAAKg7C,EAAa7pB,EAAMnxB,GAEhC,CAUA,SAASw7C,EAAYx2C,EAAQy2C,GAC5B,IAAcz7C,EAAVo7C,EAAM,GAEV,IAAKp7C,EAAI,EAAGA,EAAIy7C,EAAQv7C,OAAQF,IAC/Bo7C,EAAIp7C,GAAKgF,EAAOy2C,EAAQz7C,IAGzB,OAAOo7C,CACR,CAEA,SAASM,EAAQ9W,GAChB,IAAIj5B,EAAOi5B,EAAO36B,MAAM,KACvB0xC,EAAUhwC,EAAK,GAAG1B,MAAM,KACxBwxC,EAAU9vC,EAAK,GAAG1B,MAAM,IACxB2xC,EAAUjwC,EAAK,GAAG1B,MAAM,KAQzB,OANAsxC,EAAWI,GACXJ,EAAWE,GACXF,EAAWK,GA1BZ,SAAqBzqB,EAAOjxB,GAC3B,IAAK,IAAIF,EAAI,EAAGA,EAAIE,EAAQF,IAC3BmxB,EAAMnxB,GAAK2W,KAAKwwB,OAAOhW,EAAMnxB,EAAI,IAAM,GAAiB,IAAXmxB,EAAMnxB,IAGpDmxB,EAAMjxB,EAAS,GAAKuB,GACrB,CAsBCo6C,CAAWD,EAAQH,EAAQv7C,QAEpB,CACN0E,KAAa+G,EAAK,GAClBmwC,MAAaN,EAAW7vC,EAAK,GAAG1B,MAAM,KAAMwxC,GAC5CE,QAAaH,EAAWG,EAASF,GACjCG,OAAaA,EACbG,WAAuB,EAAVpwC,EAAK,GAEpB,CAMA,SAASqwC,EAAMC,GACVA,GACH52C,KAAK62C,KAAKR,EAAOO,GAEnB,CAiGA,SAASE,EAASC,EAAcC,GAC/Bh3C,KAAKT,KAAOw3C,EACZ/2C,KAAKi1C,MAAQ+B,CACd,CAMA,SAASC,EAASjrB,GACjB,IAAIkrB,EAAalrB,EAAGmrB,eAChBC,EAAOF,EAAWhzC,MAAM,gBAaf,SARZkzC,EAJGA,GAAQA,EAAK,IAGhBA,EAAOA,EAAK,GAAGlzC,MAAM,WACPkzC,EAAK74C,KAAK,SAAMnB,GAI9Bg6C,EAAOF,EAAWhzC,MAAM,gBACVkzC,EAAK,QAAKh6C,KAIxBg6C,OAAOh6C,GAGR4C,KAAKgsB,IAAMA,EACXhsB,KAAKo3C,KAAOA,EACZp3C,KAAK+sC,OAAS/gB,EAAGqrB,mBAClB,CAEA,SAASC,EAAUC,GAClBv3C,KAAKu3C,KAAOA,EACZv3C,KAAKw3C,YAAc,EACnBx3C,KAAKy3C,UAAY,CAClB,CASA,SAASC,EAAWC,EAAKC,GAGxB,IAFA,IAAIC,EAAK1tB,EAEDA,EAAyC,MAAhCytB,EAAK5rB,GAAK2rB,EAAI3rB,IAAM,KAAO,KAC3C6rB,EAAM,IAAIZ,EAAS,IAAIj2C,KAAK22C,EAAI3rB,GAAK7B,KAC7B4iB,SAAW4K,EAAI5K,OACtB4K,EAAME,EAEND,EAAOC,EAIT,OAAOF,CACR,CA8BA,SAASG,EAAgBz3B,EAAGxM,GAC3B,OAAIwM,EAAEm3B,cAAgB3jC,EAAE2jC,YAChBn3B,EAAEm3B,YAAc3jC,EAAE2jC,YAEtBn3B,EAAEo3B,YAAc5jC,EAAE4jC,UACdp3B,EAAEo3B,UAAY5jC,EAAE4jC,UAEpBp3B,EAAEk3B,KAAKb,aAAe7iC,EAAE0jC,KAAKb,WACzB7iC,EAAE0jC,KAAKb,WAAar2B,EAAEk3B,KAAKb,WAE5B7iC,EAAE0jC,KAAKh4C,KAAKw4C,cAAc13B,EAAEk3B,KAAKh4C,KACzC,CAEA,SAASy4C,EAAcz4C,EAAM+2C,GAC5B,IAAI37C,EAAGoyC,EAEP,IADAmJ,EAAWI,GACN37C,EAAI,EAAGA,EAAI27C,EAAQz7C,OAAQF,IAC/BoyC,EAASuJ,EAAQ37C,GACjBy6C,EAAQrI,GAAUqI,EAAQrI,IAAW,CAAC,EACtCqI,EAAQrI,GAAQxtC,IAAQ,CAE1B,CAEA,SAAS04C,EAAuB3B,GAC/B,IAIC37C,EAAG0I,EAAG0pC,EAAQmL,EAJXC,EAAgB7B,EAAQz7C,OAC3Bu9C,EAAkB,CAAC,EACnBrC,EAAM,GACNsC,EAAiB,CAAC,EAGnB,IAAK19C,EAAI,EAAGA,EAAIw9C,EAAex9C,IAE9B,GADAoyC,EAASuJ,EAAQ37C,GAAGoyC,QAChBsL,EAAet8C,eAAegxC,GAAlC,CAIA,IAAK1pC,KADL60C,EAAgB9C,EAAQrI,IAAW,CAAC,EAE/BmL,EAAcn8C,eAAesH,KAChC+0C,EAAgB/0C,IAAK,GAGvBg1C,EAAetL,IAAU,CAPzB,CAUD,IAAKpyC,KAAKy9C,EACLA,EAAgBr8C,eAAepB,IAClCo7C,EAAI/5C,KAAKupB,EAAM5qB,IAIjB,OAAOo7C,CACR,CAEA,SAASuC,IAGR,IACC,IAAIC,EAAWC,KAAKC,iBAAiBC,kBAAkBC,SACvD,GAAIJ,GAAYA,EAAS19C,OAAS,EAAG,CACpC,IAAI0E,EAAOgmB,EAAMqzB,EAAcL,IAC/B,GAAIh5C,EACH,OAAOA,EAER81C,EAAS,yBAA2BkD,EAAW,yDAChD,CACD,CAAE,MAAO5yC,GAET,CAEA,IAICkzC,EAAWl+C,EAAG0I,EAJXizC,EAjGL,WACC,IAICwC,EAAQtpC,EAAMupC,EAAYp+C,EAJvBq+C,GAAY,IAAIh4C,MAAOi4C,cAAgB,EAC1C5mB,EAAO,IAAI4kB,EAAS,IAAIj2C,KAAKg4C,EAAW,EAAG,IAC3CE,EAAa7mB,EAAK0a,OAClBuJ,EAAU,CAACjkB,GAGZ,IAAK13B,EAAI,EAAGA,EAAI,GAAIA,KACnBo+C,EAAa,IAAI/3C,KAAKg4C,EAAWr+C,EAAG,GAAG08C,uBACpB6B,IAGlBJ,EAASpB,EAAWrlB,EADpB7iB,EAAO,IAAIynC,EAAS,IAAIj2C,KAAKg4C,EAAWr+C,EAAG,KAE3C27C,EAAQt6C,KAAK88C,GACbxC,EAAQt6C,KAAK,IAAIi7C,EAAS,IAAIj2C,KAAK83C,EAAO9sB,GAAK,OAC/CqG,EAAO7iB,EACP0pC,EAAaH,GAIf,IAAKp+C,EAAI,EAAGA,EAAI,EAAGA,IAClB27C,EAAQt6C,KAAK,IAAIi7C,EAAS,IAAIj2C,KAAKg4C,EAAYr+C,EAAG,EAAG,KACrD27C,EAAQt6C,KAAK,IAAIi7C,EAAS,IAAIj2C,KAAKg4C,EAAYr+C,EAAG,EAAG,KAGtD,OAAO27C,CACR,CAuEe6C,GACbhB,EAAgB7B,EAAQz7C,OACxBu6C,EAAU6C,EAAsB3B,GAChC8C,EAAa,GAGd,IAAKz+C,EAAI,EAAGA,EAAIy6C,EAAQv6C,OAAQF,IAAK,CAEpC,IADAk+C,EAAY,IAAIvB,EAAU+B,EAAQjE,EAAQz6C,IAAKw9C,GAC1C90C,EAAI,EAAGA,EAAI80C,EAAe90C,IAC9Bw1C,EAAUS,cAAchD,EAAQjzC,IAEjC+1C,EAAWp9C,KAAK68C,EACjB,CAIA,OAFAO,EAAWvsB,KAAKirB,GAETsB,EAAWv+C,OAAS,EAAIu+C,EAAW,GAAG7B,KAAKh4C,UAAOnC,CAC1D,CAaA,SAASw7C,EAAer5C,GACvB,OAAQA,GAAQ,IAAIuI,cAAcnD,QAAQ,MAAO,IAClD,CAEA,SAAS40C,EAASC,GACjB,IAAI7+C,EAAG4E,EAAMqF,EAAO60C,EAMpB,IAJsB,kBAAXD,IACVA,EAAS,CAACA,IAGN7+C,EAAI,EAAGA,EAAI6+C,EAAO3+C,OAAQF,IAG9B8+C,EAAab,EADbr5C,GADAqF,EAAQ40C,EAAO7+C,GAAGiK,MAAM,MACX,IAEbqwC,EAAMwE,GAAcD,EAAO7+C,GAC3B4qB,EAAMk0B,GAAcl6C,EACpBy4C,EAAayB,EAAY70C,EAAM,GAAGA,MAAM,KAE1C,CAEA,SAASy0C,EAAS95C,EAAMsL,GAEvBtL,EAAOq5C,EAAcr5C,GAErB,IACI+wC,EADAiH,EAAOtC,EAAM11C,GAGjB,OAAIg4C,aAAgBZ,EACZY,EAGY,kBAATA,GACVA,EAAO,IAAIZ,EAAKY,GAChBtC,EAAM11C,GAAQg4C,EACPA,GAIJrC,EAAM31C,IAASsL,IAAWwuC,IAAY/I,EAAO+I,EAAQnE,EAAM31C,GAAO85C,MACrE9B,EAAOtC,EAAM11C,GAAQ,IAAIo3C,GACpBE,KAAKvG,GACViH,EAAKh4C,KAAOgmB,EAAMhmB,GACXg4C,GAGD,IACR,CAkBA,SAASmC,EAASC,GACjB,IAAIh/C,EAAGi/C,EAAOC,EAASC,EAMvB,IAJuB,kBAAZH,IACVA,EAAU,CAACA,IAGPh/C,EAAI,EAAGA,EAAIg/C,EAAQ9+C,OAAQF,IAG/Bk/C,EAAUjB,GAFVgB,EAAQD,EAAQh/C,GAAGiK,MAAM,MAEK,IAC9Bk1C,EAAUlB,EAAcgB,EAAM,IAE9B1E,EAAM2E,GAAWC,EACjBv0B,EAAMs0B,GAAWD,EAAM,GAEvB1E,EAAM4E,GAAWD,EACjBt0B,EAAMu0B,GAAWF,EAAM,EAEzB,CAwDA,SAASG,EAAaz1B,GACrB,IAAI01B,EAA4B,MAAT11B,EAAE21B,IAAuB,MAAT31B,EAAE21B,GACzC,SAAU31B,EAAE41B,SAAkB98C,IAAXknB,EAAE61B,MAAwBH,EAC9C,CAEA,SAAS3E,EAAUp4C,GACK,qBAAZoD,SAAoD,oBAAlBA,QAAQyD,OACpDzD,QAAQyD,MAAM7G,EAEhB,CAMA,SAAS43C,EAAItD,GACZ,IAGCgG,EAHG90C,EAAOiI,MAAMpP,UAAU4J,MAAM1J,KAAKkE,UAAW,GAAI,GACpDH,EAAOG,UAAUA,UAAU7E,OAAS,GACpCk7C,EAAOjB,EAAOsF,IAAIr6C,MAAM,KAAM0C,GAS/B,OANKqyC,EAAOuF,SAAS9I,IAAUwI,EAAYhE,KAASwB,EAAO8B,EAAQ95C,KAClEw2C,EAAIvtC,IAAI+uC,EAAK1zC,MAAMkyC,GAAM,WAG1BA,EAAIlB,GAAGt1C,GAEAw2C,CACR,EA3iBIR,EAAQ,GAAgB,IAAVA,GAAeC,EAAQ,IACxCH,EAAS,wEAA0EP,EAAOjgC,QAAU,sBA+HrG8hC,EAAKr7C,UAAY,CAChBu7C,KAAO,SAAUyD,GAChBt6C,KAAKT,KAAa+6C,EAAS/6C,KAC3BS,KAAKy2C,MAAa6D,EAAS7D,MAC3Bz2C,KAAKu2C,OAAa+D,EAAS/D,OAC3Bv2C,KAAKs2C,QAAagE,EAAShE,QAC3Bt2C,KAAK02C,WAAa4D,EAAS5D,UAC5B,EAEA1nB,OAAS,SAAUjuB,GAClB,IAECpG,EAGD,IADAA,EAtCF,SAAkB2V,EAAK/V,GACtB,IASIs9C,EATAj9C,EAAML,EAAIM,OACd,GAAIyV,EAAM/V,EAAI,GACb,OAAO,EACD,GAAIK,EAAM,GAAKL,EAAIK,EAAM,KAAOwB,KAAYkU,GAAO/V,EAAIK,EAAM,GACnE,OAAOA,EAAM,EACP,GAAI0V,GAAO/V,EAAIK,EAAM,GAC3B,OAAQ,EAMT,IAFA,IAAI2/C,EAAK,EACLC,EAAK5/C,EAAM,EACR4/C,EAAKD,EAAK,GAEZhgD,EADJs9C,EAAMvmC,KAAKwtB,OAAOyb,EAAKC,GAAM,KACblqC,EACfiqC,EAAK1C,EAEL2C,EAAK3C,EAGP,OAAO2C,CACR,CAgBM9H,EAJU3xC,EACJf,KAAKu2C,UAIN,EACR,OAAO57C,CAET,EAEAw6C,UAAY,WACX,IAAIsF,EAAYz6C,KAAKT,KACrB,OAAOlE,OAAOmqB,KAAK2vB,GAAWtwC,QAAO,SAAU61C,GAC9C,OAA6D,IAAtDvF,EAAUuF,GAAczF,MAAMzwC,QAAQi2C,EAC9C,GACD,EAEA52C,MAAQ,SAAU9C,GACjB,IAICgsC,EAAQ4N,EAAYC,EAAYjgD,EAJ7B8E,GAAWsB,EACdu1C,EAAUt2C,KAAKs2C,QACfC,EAAUv2C,KAAKu2C,OACfp6C,EAAUo6C,EAAO17C,OAAS,EAG3B,IAAKF,EAAI,EAAGA,EAAIwB,EAAKxB,IAWpB,GAVAoyC,EAAauJ,EAAQ37C,GACrBggD,EAAarE,EAAQ37C,EAAI,GACzBigD,EAAatE,EAAQ37C,EAAIA,EAAI,EAAIA,GAE7BoyC,EAAS4N,GAAc9F,EAAGgG,qBAC7B9N,EAAS4N,EACC5N,EAAS6N,GAAc/F,EAAGiG,qBACpC/N,EAAS6N,GAGNn7C,EAAS82C,EAAO57C,GAAe,IAAToyC,EACzB,OAAOuJ,EAAQ37C,GAIjB,OAAO27C,EAAQn6C,EAChB,EAEAi7C,KAAO,SAAU2D,GAChB,OAAO/6C,KAAKy2C,MAAMz2C,KAAKgvB,OAAO+rB,GAC/B,EAEAhO,OAAS,SAAUgO,GAElB,OADA1F,EAAS,8DACFr1C,KAAKs2C,QAAQt2C,KAAKgvB,OAAO+rB,GACjC,EAEAC,UAAY,SAAUD,GACrB,OAAO/6C,KAAKs2C,QAAQt2C,KAAKgvB,OAAO+rB,GACjC,GA8CDzD,EAAUh8C,UAAUg+C,cAAgB,SAAU2B,GAC7Cj7C,KAAKw3C,aAAelmC,KAAK4pC,IAAIl7C,KAAKu3C,KAAKyD,UAAUC,EAASjvB,IAAMivB,EAASlO,QACrE/sC,KAAKu3C,KAAKH,KAAK6D,EAASjvB,IAAIrnB,QAAQ,UAAW,MAAQs2C,EAAS7D,MACnEp3C,KAAKy3C,WAEP,EA0TA5C,EAAGhgC,QA9jBW,SA+jBdggC,EAAGsG,YAAe,GAClBtG,EAAGuG,OAAenG,EAClBJ,EAAGwG,OAAenG,EAClBL,EAAGyG,OAAe/1B,EAClBsvB,EAAG0G,WAAapG,EAChBN,EAAGrsC,IAAe+wC,EAClB1E,EAAGvE,KAAeoJ,EAClB7E,EAAGz1C,KArDH,SAAmBkH,GAClBizC,EAAQjzC,EAAK2uC,OACbyE,EAAQpzC,EAAK4uC,OAzCd,SAAuB5uC,GACtB,IAAI3L,EAAG+/C,EAAcc,EAAe52C,EACpC,GAAK0B,GAASA,EAAKzL,OACnB,IAAKF,EAAI,EAAGA,EAAI2L,EAAKzL,OAAQF,IAE5B+/C,GADA91C,EAAQ0B,EAAK3L,GAAGiK,MAAM,MACD,GAAG5C,cACxBw5C,EAAgB52C,EAAM,GAAGA,MAAM,KAC/BuwC,EAAUuF,GAAgB,IAAI5D,EAC7B4D,EACAc,EAGH,CA8BCC,CAAan1C,EAAK6uC,WAClBN,EAAGsG,YAAc70C,EAAKuO,OACvB,EAiDAggC,EAAG0C,KAAe8B,EAClBxE,EAAG6G,WAhDH,SAASA,EAAYn8C,GAKpB,OAJKm8C,EAAWC,eACfD,EAAWC,cAAe,EACzBtG,EAAS,yBAA2B91C,EAAO,uDAAyDA,EAAO,SAEpG85C,EAAQ95C,EAClB,EA2CAs1C,EAAG+G,MAhMH,SAAgBC,GAIf,OAHK7G,IAAe6G,IACnB7G,EAAcsD,KAERtD,CACR,EA4LAH,EAAGtvB,MArIH,WACC,IAAI5qB,EAAGo7C,EAAM,GAEb,IAAKp7C,KAAK4qB,EACLA,EAAMxpB,eAAepB,KAAOs6C,EAAMt6C,IAAMs6C,EAAMC,EAAMv6C,MAAQ4qB,EAAM5qB,IACrEo7C,EAAI/5C,KAAKupB,EAAM5qB,IAIjB,OAAOo7C,EAAIlpB,MACZ,EA4HAgoB,EAAG8B,KAAeA,EAClB9B,EAAGwB,OAAeA,EAClBxB,EAAGc,aAAeA,EAClBd,EAAGkF,YAAeA,EAClBlF,EAAGiG,oBAAuB,EAC1BjG,EAAGgG,sBAAuB,EAC1BhG,EAAGM,UAhIH,WACC,OAAO95C,OAAOmqB,KAAK2vB,EACpB,EA+HAN,EAAGiH,gBArFH,SAAyBC,EAASC,GALlC,IAAqBz8C,EAQpB,GAPAA,GADoBA,EAMCw8C,GALT/5C,gBAKZ+5C,EAJO5G,EAAU51C,IAAS,MAMZ,OAAO,KAErB,IAAI01C,EAAQ8G,EAAQ9G,MAAMpoB,OAE1B,OAAImvB,EACI/G,EAAMlwC,KAAI,SAAU01C,GAE1B,MAAO,CACNl7C,KAAMk7C,EACN1N,OAHUsM,EAAQoB,GAGLO,UAAU,IAAIh6C,MAE7B,IAGMi0C,CACR,EAyEA,IA8DyB7qB,EA9DrB5vB,EAAKs6C,EAAOt6C,GAgDhB,SAASyhD,EAAU7xB,GAClB,OAAO,WACN,OAAIpqB,KAAKk8C,GAAal8C,KAAKk8C,GAAG9E,KAAKp3C,MAC5BoqB,EAAI5uB,KAAKwE,KACjB,CACD,CAEA,SAASm8C,EAAe/xB,GACvB,OAAO,WAEN,OADApqB,KAAKk8C,GAAK,KACH9xB,EAAIrqB,MAAMC,KAAMN,UACxB,CACD,CA1DAo1C,EAAOD,GAAKA,EAEZC,EAAOsH,YAAc,KAErBtH,EAAOuH,aAAe,SAAUtB,EAAKuB,GACpC,IACCvP,EADGwK,EAAOzC,EAAOsH,YAUlB,QAPeh/C,IAAX29C,EAAImB,KACH3E,GAAQwC,EAAYgB,KAASA,EAAIwB,QAAUxB,EAAI1vB,YAClD0vB,EAAIyB,GAAK1H,EAAOsF,IAAIW,EAAIb,IAAIsC,GAC5BzB,EAAIX,MAAM5xC,IAAI+uC,EAAK1zC,MAAMk3C,GAAM,YAEhCA,EAAImB,GAAK3E,GAENwD,EAAImB,GAKP,GAJAnP,EAASgO,EAAImB,GAAGlB,UAAUD,GACtBzpC,KAAK4pC,IAAInO,GAAU,KACtBA,GAAkB,SAEG3vC,IAAlB29C,EAAIC,UAAyB,CAChC,IAAIyB,EAAI1B,EAAImB,GACZnB,EAAIC,WAAWjO,EAAQuP,GACvBvB,EAAImB,GAAKO,CACV,MACC1B,EAAIxD,KAAKxK,EAAQuP,EAGpB,EAEA9hD,EAAGq6C,GAAK,SAAUt1C,EAAM+8C,GACvB,GAAI/8C,EAAM,CACT,GAAoB,kBAATA,EACV,MAAM,IAAI8E,MAAM,wCAA0C9E,EAAO,YAAcA,EAAO,KAQvF,OANAS,KAAKk8C,GAAK7C,EAAQ95C,GACdS,KAAKk8C,GACRpH,EAAOuH,aAAar8C,KAAMs8C,GAE1BjH,EAAS,mCAAqC91C,EAAO,4DAE/CS,IACR,CACA,GAAIA,KAAKk8C,GAAM,OAAOl8C,KAAKk8C,GAAG38C,IAC/B,EAuBA/E,EAAGkiD,SAAYT,EAASzhD,EAAGkiD,UAC3BliD,EAAGmiD,SAAYV,EAASzhD,EAAGmiD,UAC3BniD,EAAG4/C,IAAY+B,EAAc3hD,EAAG4/C,KAChC5/C,EAAG0nC,MAAYia,EAAc3hD,EAAG0nC,OAChC1nC,EAAGwgD,WAXsB5wB,EAWK5vB,EAAGwgD,UAVzB,WAEN,OADIt7C,UAAU7E,OAAS,IAAGmF,KAAKk8C,GAAK,MAC7B9xB,EAAIrqB,MAAMC,KAAMN,UACxB,GASDo1C,EAAOD,GAAG+H,WAAa,SAASr9C,GAK/B,OAJIg2C,EAAQ,GAAgB,IAAVA,GAAeC,EAAQ,IACxCH,EAAS,qFAAuFP,EAAOjgC,QAAU,KAElHigC,EAAOsH,YAAc78C,EAAO85C,EAAQ95C,GAAQ,KACrCu1C,CACR,EAGA,IAAI+H,EAAmB/H,EAAO+H,iBAY9B,MAXyD,mBAArDxhD,OAAOC,UAAUC,SAASC,KAAKqhD,IAElCA,EAAiB7gD,KAAK,MACtB6gD,EAAiB7gD,KAAK,OACZ6gD,IAEVA,EAAiBX,GAAK,MAKhBpH,CACR,0BCxtBA,QAMI,EAOK,WACP,IA0KM3iB,EAAatI,EA1KfizB,EAAY,CAEhBA,QAAoB,SAEhBC,EAAWD,EAAUjN,SAAW,CAClCmN,QAAS,IACT1R,OAAQ,OACR2R,cAAe,GACfC,MAAO,IACPC,SAAS,EACTC,YAAa,IACbC,aAAc,IACdC,aAAa,EACbC,YAAa,eACbC,gBAAiB,mBACjBjlB,OAAQ,OACRklB,SAAU,uIA6QZ,SAASte,EAAM19B,EAAGvF,EAAKC,GACrB,OAAIsF,EAAIvF,EAAYA,EAChBuF,EAAItF,EAAYA,EACbsF,CACT,CAOA,SAASi8C,EAAUj8C,GACjB,OAAkB,MAAT,EAAIA,EACf,CAQA,SAASk8C,EAAel8C,EAAGy7C,EAAOU,GAChC,IAAIC,EAYJ,OATEA,EAD6B,gBAA3Bd,EAASE,cACF,CAAEa,UAAW,eAAeJ,EAAUj8C,GAAG,UACd,cAA3Bs7C,EAASE,cACT,CAAEa,UAAW,aAAaJ,EAAUj8C,GAAG,QAEvC,CAAE,cAAei8C,EAAUj8C,GAAG,MAGlCy/B,WAAa,OAAOgc,EAAM,MAAMU,EAEhCC,CACT,CAtSAf,EAAUiB,UAAY,SAAS77B,GAC7B,IAAIvjB,EAAKtC,EACT,IAAKsC,KAAOujB,OAEI9kB,KADdf,EAAQ6lB,EAAQvjB,KACWujB,EAAQnmB,eAAe4C,KAAMo+C,EAASp+C,GAAOtC,GAG1E,OAAO2D,IACT,EAMA88C,EAAU7kC,OAAS,KASnB6kC,EAAUl0B,IAAM,SAASnnB,GACvB,IAAIm0B,EAAUknB,EAAUz4B,YAExB5iB,EAAI09B,EAAM19B,EAAGs7C,EAASC,QAAS,GAC/BF,EAAU7kC,OAAgB,IAANxW,EAAU,KAAOA,EAErC,IAAIwsC,EAAW6O,EAAUrtB,QAAQmG,GAC7BooB,EAAW/P,EAASnH,cAAciW,EAASQ,aAC3CL,EAAWH,EAASG,MACpBU,EAAWb,EAASzR,OAkCxB,OAhCA2C,EAASgQ,YAET/J,GAAM,SAAS1kC,GAEkB,KAA3ButC,EAASE,gBAAsBF,EAASE,cAAgBH,EAAUoB,qBAGtE3d,EAAIyd,EAAKL,EAAel8C,EAAGy7C,EAAOU,IAExB,IAANn8C,GAEF8+B,EAAI0N,EAAU,CACZ/M,WAAY,OACZ+I,QAAS,IAEXgE,EAASgQ,YAETluC,YAAW,WACTwwB,EAAI0N,EAAU,CACZ/M,WAAY,OAASgc,EAAQ,YAC7BjT,QAAS,IAEXl6B,YAAW,WACT+sC,EAAUnxB,SACVnc,GACF,GAAG0tC,EACL,GAAGA,IAEHntC,WAAWP,EAAM0tC,EAErB,IAEOl9C,IACT,EAEA88C,EAAUz4B,UAAY,WACpB,MAAmC,kBAArBy4B,EAAU7kC,MAC1B,EASA6kC,EAAUt/B,MAAQ,WACXs/B,EAAU7kC,QAAQ6kC,EAAUl0B,IAAI,GAErC,IAAIu1B,EAAO,WACTpuC,YAAW,WACJ+sC,EAAU7kC,SACf6kC,EAAUK,UACVgB,IACF,GAAGpB,EAASM,aACd,EAIA,OAFIN,EAASI,SAASgB,IAEfn+C,IACT,EAcA88C,EAAU7tB,KAAO,SAASmvB,GACxB,OAAKA,GAAUtB,EAAU7kC,OAElB6kC,EAAUuB,IAAI,GAAM,GAAM/sC,KAAKG,UAAUmX,IAAI,GAFZ5oB,IAG1C,EAMA88C,EAAUuB,IAAM,SAASphB,GACvB,IAAIx7B,EAAIq7C,EAAU7kC,OAElB,OAAKxW,GAGmB,kBAAXw7B,IACTA,GAAU,EAAIx7B,GAAK09B,EAAM7tB,KAAKG,SAAWhQ,EAAG,GAAK,MAGnDA,EAAI09B,EAAM19B,EAAIw7B,EAAQ,EAAG,MAClB6f,EAAUl0B,IAAInnB,IAPdq7C,EAAUt/B,OASrB,EAEAs/B,EAAUK,QAAU,WAClB,OAAOL,EAAUuB,IAAI/sC,KAAKG,SAAWsrC,EAASK,YAChD,EASMjrB,EAAU,EAAGtI,EAAU,EAE3BizB,EAAUh5B,QAAU,SAASw6B,GAC3B,OAAKA,GAAiC,aAArBA,EAAS30C,SAIV,IAAZkgB,GACFizB,EAAUt/B,QAGZ2U,IACAtI,IAEAy0B,EAAS3W,QAAO,WAEE,MADhB9d,GAEIsI,EAAU,EACV2qB,EAAU7tB,QAEV6tB,EAAUl0B,KAAKuJ,EAAUtI,GAAWsI,EAE1C,IAEOnyB,MApBEA,IAqBX,EASF88C,EAAUrtB,OAAS,SAAS8uB,GAC1B,GAAIzB,EAAU0B,aAAc,OAAO/jC,SAASgkC,eAAe,aAE3DrjB,EAAS3gB,SAASC,gBAAiB,kBAEnC,IAAIuzB,EAAWxzB,SAAS6F,cAAc,OACtC2tB,EAASjhC,GAAK,YACdihC,EAASrwB,UAAYm/B,EAASU,SAE9B,IAGIiB,EAHAV,EAAW/P,EAASnH,cAAciW,EAASQ,aAC3CoB,EAAWJ,EAAY,OAASb,EAAUZ,EAAU7kC,QAAU,GAC9DsgB,EAAW9d,SAASqsB,cAAciW,EAASxkB,QAkB/C,OAfAgI,EAAIyd,EAAK,CACP9c,WAAY,eACZ4c,UAAW,eAAiBa,EAAO,WAGhC5B,EAASO,cACZoB,EAAUzQ,EAASnH,cAAciW,EAASS,mBAC/BoB,EAAcF,GAGvBnmB,GAAU9d,SAAS5D,MACrBukB,EAAS7C,EAAQ,2BAGnBA,EAAOsmB,YAAY5Q,GACZA,CACT,EAMA6O,EAAUnxB,OAAS,WACjBmzB,EAAYrkC,SAASC,gBAAiB,kBACtCokC,EAAYrkC,SAASqsB,cAAciW,EAASxkB,QAAS,2BACrD,IAAI0V,EAAWxzB,SAASgkC,eAAe,aACvCxQ,GAAY2Q,EAAc3Q,EAC5B,EAMA6O,EAAU0B,WAAa,WACrB,QAAS/jC,SAASgkC,eAAe,YACnC,EAMA3B,EAAUoB,kBAAoB,WAE5B,IAAIa,EAAYtkC,SAAS5D,KAAKsgB,MAG1B6nB,EAAgB,oBAAqBD,EAAa,SAClC,iBAAkBA,EAAa,MAC/B,gBAAiBA,EAAa,KAC9B,eAAgBA,EAAa,IAAM,GAEvD,OAAIC,EAAe,gBAAiBD,EAE3B,cACEC,EAAe,cAAeD,EAEhC,YAGA,QAEX,EA+CA,IAAI7K,EAAQ,WACV,IAAI+K,EAAU,GAEd,SAASzvC,IACP,IAAIhV,EAAKykD,EAAQ94C,QACb3L,GACFA,EAAGgV,EAEP,CAEA,OAAO,SAAShV,GACdykD,EAAQjjD,KAAKxB,GACS,GAAlBykD,EAAQpkD,QAAa2U,GAC3B,CACD,CAdW,GAwBR+wB,EAAM,WACR,IAAI2e,EAAc,CAAE,SAAU,IAAK,MAAO,MACtCjW,EAAc,CAAC,EAEnB,SAASd,EAAU5I,GACjB,OAAOA,EAAO56B,QAAQ,QAAS,OAAOA,QAAQ,gBAAgB,SAAST,EAAOkkC,GAC5E,OAAOA,EAAOpmC,aAChB,GACF,CAEA,SAASm9C,EAAc5/C,GACrB,IAAI43B,EAAQ1c,SAAS5D,KAAKsgB,MAC1B,GAAI53B,KAAQ43B,EAAO,OAAO53B,EAK1B,IAHA,IAEI6/C,EAFAzkD,EAAIukD,EAAYrkD,OAChBwkD,EAAU9/C,EAAKwC,OAAO,GAAGC,cAAgBzC,EAAK2F,MAAM,GAEjDvK,KAEL,IADAykD,EAAaF,EAAYvkD,GAAK0kD,KACZloB,EAAO,OAAOioB,EAGlC,OAAO7/C,CACT,CAEA,SAAS+/C,EAAa//C,GAEpB,OADAA,EAAO4oC,EAAU5oC,GACV0pC,EAAS1pC,KAAU0pC,EAAS1pC,GAAQ4/C,EAAc5/C,GAC3D,CAEA,SAASggD,EAAS3vB,EAAS/zB,EAAMQ,GAC/BR,EAAOyjD,EAAazjD,GACpB+zB,EAAQuH,MAAMt7B,GAAQQ,CACxB,CAEA,OAAO,SAASuzB,EAAS4vB,GACvB,IACI3jD,EACAQ,EAFAoG,EAAO/C,UAIX,GAAmB,GAAf+C,EAAK5H,OACP,IAAKgB,KAAQ2jD,OAEGpiD,KADdf,EAAQmjD,EAAW3jD,KACQ2jD,EAAWzjD,eAAeF,IAAO0jD,EAAS3vB,EAAS/zB,EAAMQ,QAGtFkjD,EAAS3vB,EAASntB,EAAK,GAAIA,EAAK,GAEpC,CACD,CAjDS,GAuDV,SAASg9C,EAAS7vB,EAASrwB,GAEzB,OAD6B,iBAAXqwB,EAAsBA,EAAU8vB,EAAU9vB,IAChDprB,QAAQ,IAAMjF,EAAO,MAAQ,CAC3C,CAMA,SAAS67B,EAASxL,EAASrwB,GACzB,IAAIogD,EAAUD,EAAU9vB,GACpBgwB,EAAUD,EAAUpgD,EAEpBkgD,EAASE,EAASpgD,KAGtBqwB,EAAQvQ,UAAYugC,EAAQ39C,UAAU,GACxC,CAMA,SAAS68C,EAAYlvB,EAASrwB,GAC5B,IACIqgD,EADAD,EAAUD,EAAU9vB,GAGnB6vB,EAAS7vB,EAASrwB,KAGvBqgD,EAAUD,EAAQh7C,QAAQ,IAAMpF,EAAO,IAAK,KAG5CqwB,EAAQvQ,UAAYugC,EAAQ39C,UAAU,EAAG29C,EAAQ/kD,OAAS,GAC5D,CAQA,SAAS6kD,EAAU9vB,GACjB,OAAQ,KAAOA,EAAQvQ,WAAa,IAAM,KAAK1a,QAAQ,QAAS,IAClE,CAMA,SAASi6C,EAAchvB,GACrBA,GAAWA,EAAQrQ,YAAcqQ,EAAQrQ,WAAWyY,YAAYpI,EAClE,CAEA,OAAOktB,CACT,OApdkB,kGCAlB,SAAS+C,EAAQC,EAAQC,GACvB,IAAIv6B,EAAOnqB,OAAOmqB,KAAKs6B,GACvB,GAAIzkD,OAAO2kD,sBAAuB,CAChC,IAAIC,EAAU5kD,OAAO2kD,sBAAsBF,GACvCC,IACFE,EAAUA,EAAQp7C,QAAO,SAAUq7C,GACjC,OAAO7kD,OAAO8kD,yBAAyBL,EAAQI,GAAKra,UACtD,KAEFrgB,EAAKxpB,KAAK+D,MAAMylB,EAAMy6B,EACxB,CACA,OAAOz6B,CACT,CACA,SAAS46B,EAAe3gD,GACtB,IAAK,IAAI9E,EAAI,EAAGA,EAAI+E,UAAU7E,OAAQF,IAAK,CACzC,IAAIgF,EAAyB,MAAhBD,UAAU/E,GAAa+E,UAAU/E,GAAK,CAAC,EAChDA,EAAI,EACNklD,EAAQxkD,OAAOsE,IAAS,GAAMsxB,SAAQ,SAAUtyB,GAC9C0hD,EAAgB5gD,EAAQd,EAAKgB,EAAOhB,GACtC,IACStD,OAAOilD,0BAChBjlD,OAAOu3C,iBAAiBnzC,EAAQpE,OAAOilD,0BAA0B3gD,IAEjEkgD,EAAQxkD,OAAOsE,IAASsxB,SAAQ,SAAUtyB,GACxCtD,OAAOsqC,eAAelmC,EAAQd,EAAKtD,OAAO8kD,yBAAyBxgD,EAAQhB,GAC7E,GAEJ,CACA,OAAOc,CACT,CACA,SAAS8gD,EAAQnlD,GAYf,OAREmlD,EADoB,oBAAX5xB,QAAoD,kBAApBA,OAAOC,SACtC,SAAUxzB,GAClB,cAAcA,CAChB,EAEU,SAAUA,GAClB,OAAOA,GAAyB,oBAAXuzB,QAAyBvzB,EAAIgwB,cAAgBuD,QAAUvzB,IAAQuzB,OAAOrzB,UAAY,gBAAkBF,CAC3H,EAEKmlD,EAAQnlD,EACjB,CACA,SAASilD,EAAgBjlD,EAAKuD,EAAKtC,GAWjC,OAVIsC,KAAOvD,EACTC,OAAOsqC,eAAevqC,EAAKuD,EAAK,CAC9BtC,MAAOA,EACPwpC,YAAY,EACZD,cAAc,EACdkN,UAAU,IAGZ13C,EAAIuD,GAAOtC,EAENjB,CACT,CACA,SAASyE,IAYP,OAXAA,EAAWxE,OAAOyE,QAAU,SAAUL,GACpC,IAAK,IAAI9E,EAAI,EAAGA,EAAI+E,UAAU7E,OAAQF,IAAK,CACzC,IAAIgF,EAASD,UAAU/E,GACvB,IAAK,IAAIgE,KAAOgB,EACVtE,OAAOC,UAAUS,eAAeP,KAAKmE,EAAQhB,KAC/Cc,EAAOd,GAAOgB,EAAOhB,GAG3B,CACA,OAAOc,CACT,EACOI,EAASE,MAAMC,KAAMN,UAC9B,CAaA,SAAS8gD,EAAyB7gD,EAAQ8gD,GACxC,GAAc,MAAV9gD,EAAgB,MAAO,CAAC,EAC5B,IACIhB,EAAKhE,EADL8E,EAdN,SAAuCE,EAAQ8gD,GAC7C,GAAc,MAAV9gD,EAAgB,MAAO,CAAC,EAC5B,IAEIhB,EAAKhE,EAFL8E,EAAS,CAAC,EACVihD,EAAarlD,OAAOmqB,KAAK7lB,GAE7B,IAAKhF,EAAI,EAAGA,EAAI+lD,EAAW7lD,OAAQF,IACjCgE,EAAM+hD,EAAW/lD,GACb8lD,EAASj8C,QAAQ7F,IAAQ,IAC7Bc,EAAOd,GAAOgB,EAAOhB,IAEvB,OAAOc,CACT,CAGekhD,CAA8BhhD,EAAQ8gD,GAEnD,GAAIplD,OAAO2kD,sBAAuB,CAChC,IAAIY,EAAmBvlD,OAAO2kD,sBAAsBrgD,GACpD,IAAKhF,EAAI,EAAGA,EAAIimD,EAAiB/lD,OAAQF,IACvCgE,EAAMiiD,EAAiBjmD,GACnB8lD,EAASj8C,QAAQ7F,IAAQ,GACxBtD,OAAOC,UAAUI,qBAAqBF,KAAKmE,EAAQhB,KACxDc,EAAOd,GAAOgB,EAAOhB,GAEzB,CACA,OAAOc,CACT,CA6BA,SAASuR,EAAU6vC,GACjB,GAAsB,qBAAX3gD,QAA0BA,OAAO2Q,UAC1C,QAAuBA,UAAUG,UAAU9M,MAAM28C,EAErD,CACA,IAAIC,EAAa9vC,EAAU,yDACvB+vC,EAAO/vC,EAAU,SACjBgwC,EAAUhwC,EAAU,YACpBiwC,EAASjwC,EAAU,aAAeA,EAAU,aAAeA,EAAU,YACrEkwC,EAAMlwC,EAAU,mBAChBmwC,EAAmBnwC,EAAU,YAAcA,EAAU,YAErDowC,EAAc,CAChBC,SAAS,EACTC,SAAS,GAEX,SAAS77B,EAAGzG,EAAIzQ,EAAO/T,GACrBwkB,EAAGP,iBAAiBlQ,EAAO/T,GAAKsmD,GAAcM,EAChD,CACA,SAAS36B,EAAIzH,EAAIzQ,EAAO/T,GACtBwkB,EAAG4C,oBAAoBrT,EAAO/T,GAAKsmD,GAAcM,EACnD,CACA,SAAS17C,EAAyBsZ,EAAeuQ,GAC/C,GAAKA,EAAL,CAEA,GADgB,MAAhBA,EAAS,KAAeA,EAAWA,EAASttB,UAAU,IAClD+c,EACF,IACE,GAAIA,EAAGtZ,QACL,OAAOsZ,EAAGtZ,QAAQ6pB,GACb,GAAIvQ,EAAGuiC,kBACZ,OAAOviC,EAAGuiC,kBAAkBhyB,GACvB,GAAIvQ,EAAGwiC,sBACZ,OAAOxiC,EAAGwiC,sBAAsBjyB,EAEpC,CAAE,MAAO9K,GACP,OAAO,CACT,CAEF,OAAO,CAfc,CAgBvB,CACA,SAASg9B,EAAgBziC,GACvB,OAAOA,EAAG5e,MAAQ4e,IAAOvE,UAAYuE,EAAG5e,KAAKkgC,SAAWthB,EAAG5e,KAAO4e,EAAGO,UACvE,CACA,SAASmzB,EAAyB1zB,EAAeuQ,EAA0B3J,EAAK87B,GAC9E,GAAI1iC,EAAI,CACN4G,EAAMA,GAAOnL,SACb,EAAG,CACD,GAAgB,MAAZ8U,IAAqC,MAAhBA,EAAS,GAAavQ,EAAGO,aAAeqG,GAAOlgB,EAAQsZ,EAAIuQ,GAAY7pB,EAAQsZ,EAAIuQ,KAAcmyB,GAAc1iC,IAAO4G,EAC7I,OAAO5G,EAET,GAAIA,IAAO4G,EAAK,KAElB,OAAS5G,EAAKyiC,EAAgBziC,GAChC,CACA,OAAO,IACT,CACA,IA+TI2iC,EA/TAC,EAAU,OACd,SAAS3Z,EAAYjpB,EAAIzf,EAAMoK,GAC7B,GAAIqV,GAAMzf,EACR,GAAIyf,EAAG0gC,UACL1gC,EAAG0gC,UAAU/1C,EAAQ,MAAQ,UAAUpK,OAClC,CACL,IAAI8f,GAAa,IAAML,EAAGK,UAAY,KAAK1a,QAAQi9C,EAAS,KAAKj9C,QAAQ,IAAMpF,EAAO,IAAK,KAC3Fyf,EAAGK,WAAaA,GAAa1V,EAAQ,IAAMpK,EAAO,KAAKoF,QAAQi9C,EAAS,IAC1E,CAEJ,CACA,SAASrhB,EAAIvhB,EAAInjB,EAAMnB,GACrB,IAAIy8B,EAAQnY,GAAMA,EAAGmY,MACrB,GAAIA,EAAO,CACT,QAAY,IAARz8B,EAMF,OALI+f,SAASonC,aAAepnC,SAASonC,YAAYC,iBAC/CpnD,EAAM+f,SAASonC,YAAYC,iBAAiB9iC,EAAI,IACvCA,EAAG+iC,eACZrnD,EAAMskB,EAAG+iC,mBAEK,IAATlmD,EAAkBnB,EAAMA,EAAImB,GAE7BA,KAAQs7B,IAAsC,IAA5Bt7B,EAAK2I,QAAQ,YACnC3I,EAAO,WAAaA,GAEtBs7B,EAAMt7B,GAAQnB,GAAsB,kBAARA,EAAmB,GAAK,KAExD,CACF,CACA,SAASsnD,EAAOhjC,EAAIijC,GAClB,IAAIC,EAAoB,GACxB,GAAkB,kBAAPljC,EACTkjC,EAAoBljC,OAEpB,EAAG,CACD,IAAI8+B,EAAYvd,EAAIvhB,EAAI,aACpB8+B,GAA2B,SAAdA,IACfoE,EAAoBpE,EAAY,IAAMoE,EAG1C,QAAUD,IAAajjC,EAAKA,EAAGO,aAEjC,IAAI4iC,EAAWjiD,OAAOkiD,WAAaliD,OAAOmiD,iBAAmBniD,OAAOoiD,WAAapiD,OAAOqiD,YAExF,OAAOJ,GAAY,IAAIA,EAASD,EAClC,CACA,SAAS56C,EAAKse,EAAKxG,EAASwP,GAC1B,GAAIhJ,EAAK,CACP,IAAI48B,EAAO58B,EAAIxI,qBAAqBgC,GAClCzkB,EAAI,EACJ8G,EAAI+gD,EAAK3nD,OACX,GAAI+zB,EACF,KAAOj0B,EAAI8G,EAAG9G,IACZi0B,EAAS4zB,EAAK7nD,GAAIA,GAGtB,OAAO6nD,CACT,CACA,MAAO,EACT,CACA,SAASC,IACP,IAAIC,EAAmBjoC,SAASioC,iBAChC,OAAIA,GAGKjoC,SAASC,eAEpB,CAWA,SAASioC,EAAQ3jC,EAAI4jC,EAA2BC,EAA2BC,EAAWjP,GACpF,GAAK70B,EAAGguB,uBAAyBhuB,IAAO9e,OAAxC,CACA,IAAI6iD,EAAQC,EAAKC,EAAMC,EAAQC,EAAOC,EAAQC,EAiB9C,GAhBIrkC,IAAO9e,QAAU8e,EAAGO,YAAcP,IAAOyjC,KAE3CO,GADAD,EAAS/jC,EAAGguB,yBACCgW,IACbC,EAAOF,EAAOE,KACdC,EAASH,EAAOG,OAChBC,EAAQJ,EAAOI,MACfC,EAASL,EAAOK,OAChBC,EAAQN,EAAOM,QAEfL,EAAM,EACNC,EAAO,EACPC,EAAShjD,OAAOojD,YAChBH,EAAQjjD,OAAOqjD,WACfH,EAASljD,OAAOojD,YAChBD,EAAQnjD,OAAOqjD,aAEZX,GAA6BC,IAA8B7jC,IAAO9e,SAErE2zC,EAAYA,GAAa70B,EAAGO,YAIvBuhC,GACH,GACE,GAAIjN,GAAaA,EAAU7G,wBAA0D,SAAhCzM,EAAIsT,EAAW,cAA2BgP,GAA4D,WAA/BtiB,EAAIsT,EAAW,aAA2B,CACpK,IAAI2P,EAAgB3P,EAAU7G,wBAG9BgW,GAAOQ,EAAcR,IAAM1mD,SAASikC,EAAIsT,EAAW,qBACnDoP,GAAQO,EAAcP,KAAO3mD,SAASikC,EAAIsT,EAAW,sBACrDqP,EAASF,EAAMD,EAAOK,OACtBD,EAAQF,EAAOF,EAAOM,MACtB,KACF,QAEOxP,EAAYA,EAAUt0B,YAGnC,GAAIujC,GAAa9jC,IAAO9e,OAAQ,CAE9B,IAAIujD,EAAWzB,EAAOnO,GAAa70B,GACjC0kC,EAASD,GAAYA,EAASpjC,EAC9BsjC,EAASF,GAAYA,EAAS9uC,EAC5B8uC,IAKFP,GAJAF,GAAOW,IAGPP,GAAUO,GAEVR,GAJAF,GAAQS,IACRL,GAASK,GAKb,CACA,MAAO,CACLV,IAAKA,EACLC,KAAMA,EACNC,OAAQA,EACRC,MAAOA,EACPE,MAAOA,EACPD,OAAQA,EA5D4C,CA8DxD,CAMA,SAASQ,EAAe5kC,GACtB,IAAI6kC,EAAOlB,EAAQ3jC,GACf8kC,EAAcxnD,SAASikC,EAAIvhB,EAAI,iBACjC+kC,EAAaznD,SAASikC,EAAIvhB,EAAI,gBAC9BglC,EAAe1nD,SAASikC,EAAIvhB,EAAI,kBAChCilC,EAAgB3nD,SAASikC,EAAIvhB,EAAI,mBAQnC,OAPA6kC,EAAKb,KAAOe,EAAaznD,SAASikC,EAAIvhB,EAAI,qBAC1C6kC,EAAKZ,MAAQa,EAAcxnD,SAASikC,EAAIvhB,EAAI,sBAE5C6kC,EAAKR,MAAQrkC,EAAGrE,YAAcmpC,EAAcE,EAC5CH,EAAKT,OAASpkC,EAAGpE,aAAempC,EAAaE,EAC7CJ,EAAKX,OAASW,EAAKb,IAAMa,EAAKT,OAC9BS,EAAKV,MAAQU,EAAKZ,KAAOY,EAAKR,MACvBQ,CACT,CASA,SAASK,EAAellC,EAAImlC,EAAQC,GAKlC,IAJA,IAAI7rB,EAAS8rB,EAA2BrlC,GAAI,GAC1CslC,EAAY3B,EAAQ3jC,GAAImlC,GAGnB5rB,GAAQ,CACb,IAAIgsB,EAAgB5B,EAAQpqB,GAAQ6rB,GAOpC,KALmB,QAAfA,GAAuC,SAAfA,EAChBE,GAAaC,EAEbD,GAAaC,GAEX,OAAOhsB,EACrB,GAAIA,IAAWkqB,IAA6B,MAC5ClqB,EAAS8rB,EAA2B9rB,GAAQ,EAC9C,CACA,OAAO,CACT,CAUA,SAASisB,EAASxlC,EAAIylC,EAAUviC,EAASwiC,GAIvC,IAHA,IAAIC,EAAe,EACjBhqD,EAAI,EACJiqD,EAAW5lC,EAAG4lC,SACTjqD,EAAIiqD,EAAS/pD,QAAQ,CAC1B,GAAkC,SAA9B+pD,EAASjqD,GAAGw8B,MAAMC,SAAsBwtB,EAASjqD,KAAOkqD,GAASC,QAAUJ,GAAiBE,EAASjqD,KAAOkqD,GAASE,UAAYrS,EAAQkS,EAASjqD,GAAIunB,EAAQ8iC,UAAWhmC,GAAI,GAAQ,CACvL,GAAI2lC,IAAiBF,EACnB,OAAOG,EAASjqD,GAElBgqD,GACF,CACAhqD,GACF,CACA,OAAO,IACT,CAQA,SAASsqD,EAAUjmC,EAAIuQ,GAErB,IADA,IAAI8C,EAAOrT,EAAGkmC,iBACP7yB,IAASA,IAASwyB,GAASC,OAAkC,SAAzBvkB,EAAIlO,EAAM,YAAyB9C,IAAa7pB,EAAQ2sB,EAAM9C,KACvG8C,EAAOA,EAAK8yB,uBAEd,OAAO9yB,GAAQ,IACjB,CASA,SAAS9iB,EAAMyP,EAAIuQ,GACjB,IAAIhgB,EAAQ,EACZ,IAAKyP,IAAOA,EAAGO,WACb,OAAQ,EAIV,KAAOP,EAAKA,EAAGmmC,wBACqB,aAA9BnmC,EAAGsoB,SAAStlC,eAAgCgd,IAAO6lC,GAAS57B,OAAWsG,IAAY7pB,EAAQsZ,EAAIuQ,IACjGhgB,IAGJ,OAAOA,CACT,CAQA,SAAS61C,EAAwBpmC,GAC/B,IAAIqmC,EAAa,EACfC,EAAY,EACZC,EAAc9C,IAChB,GAAIzjC,EACF,EAAG,CACD,IAAIykC,EAAWzB,EAAOhjC,GACpB0kC,EAASD,EAASpjC,EAClBsjC,EAASF,EAAS9uC,EACpB0wC,GAAcrmC,EAAGwmC,WAAa9B,EAC9B4B,GAAatmC,EAAGymC,UAAY9B,CAC9B,OAAS3kC,IAAOumC,IAAgBvmC,EAAKA,EAAGO,aAE1C,MAAO,CAAC8lC,EAAYC,EACtB,CAiBA,SAASjB,EAA2BrlC,EAAI0mC,GAEtC,IAAK1mC,IAAOA,EAAGguB,sBAAuB,OAAOyV,IAC7C,IAAI/f,EAAO1jB,EACP2mC,GAAU,EACd,GAEE,GAAIjjB,EAAK/nB,YAAc+nB,EAAKkjB,aAAeljB,EAAK9nB,aAAe8nB,EAAKmjB,aAAc,CAChF,IAAIC,EAAUvlB,EAAImC,GAClB,GAAIA,EAAK/nB,YAAc+nB,EAAKkjB,cAAqC,QAArBE,EAAQC,WAA4C,UAArBD,EAAQC,YAA0BrjB,EAAK9nB,aAAe8nB,EAAKmjB,eAAsC,QAArBC,EAAQE,WAA4C,UAArBF,EAAQE,WAAwB,CACpN,IAAKtjB,EAAKsK,uBAAyBtK,IAASjoB,SAAS5D,KAAM,OAAO4rC,IAClE,GAAIkD,GAAWD,EAAa,OAAOhjB,EACnCijB,GAAU,CACZ,CACF,QAEOjjB,EAAOA,EAAKnjB,YACrB,OAAOkjC,GACT,CAWA,SAASwD,EAAYC,EAAOC,GAC1B,OAAO70C,KAAKwwB,MAAMokB,EAAMlD,OAAS1xC,KAAKwwB,MAAMqkB,EAAMnD,MAAQ1xC,KAAKwwB,MAAMokB,EAAMjD,QAAU3xC,KAAKwwB,MAAMqkB,EAAMlD,OAAS3xC,KAAKwwB,MAAMokB,EAAM9C,UAAY9xC,KAAKwwB,MAAMqkB,EAAM/C,SAAW9xC,KAAKwwB,MAAMokB,EAAM7C,SAAW/xC,KAAKwwB,MAAMqkB,EAAM9C,MACvN,CAEA,SAAS+C,EAAS9gC,EAAU+gC,GAC1B,OAAO,WACL,IAAK1E,EAAkB,CACrB,IAAIl/C,EAAO/C,UAES,IAAhB+C,EAAK5H,OACPyqB,EAAS9pB,KAFDwE,KAEayC,EAAK,IAE1B6iB,EAASvlB,MAJDC,KAIcyC,GAExBk/C,EAAmB5xC,YAAW,WAC5B4xC,OAAmB,CACrB,GAAG0E,EACL,CACF,CACF,CAKA,SAASC,EAAStnC,EAAI9jB,EAAGqrD,GACvBvnC,EAAGwmC,YAActqD,EACjB8jB,EAAGymC,WAAac,CAClB,CACA,SAASt9B,EAAMjK,GACb,IAAIwnC,EAAUtmD,OAAOsmD,QACjB9hC,EAAIxkB,OAAOs9B,QAAUt9B,OAAOumD,MAChC,OAAID,GAAWA,EAAQE,IACdF,EAAQE,IAAI1nC,GAAI2nC,WAAU,GACxBjiC,EACFA,EAAE1F,GAAIiK,OAAM,GAAM,GAElBjK,EAAG2nC,WAAU,EAExB,CAeA,IAAIC,EAAU,YAAa,IAAI5lD,MAAO4Q,UAEtC,SAASi1C,IACP,IACEC,EADEC,EAAkB,GAEtB,MAAO,CACLC,sBAAuB,YACrBD,EAAkB,GACb/mD,KAAKkiB,QAAQ+kC,YACH,GAAG/hD,MAAM1J,KAAKwE,KAAKgf,GAAG4lC,UAC5B3zB,SAAQ,SAAUqH,GACzB,GAA8B,SAA1BiI,EAAIjI,EAAO,YAAyBA,IAAUusB,GAASC,MAA3D,CACAiC,EAAgB/qD,KAAK,CACnByD,OAAQ64B,EACRurB,KAAMlB,EAAQrqB,KAEhB,IAAI4uB,EAAW9G,EAAe,CAAC,EAAG2G,EAAgBA,EAAgBlsD,OAAS,GAAGgpD,MAG9E,GAAIvrB,EAAM6uB,sBAAuB,CAC/B,IAAIC,EAAcpF,EAAO1pB,GAAO,GAC5B8uB,IACFF,EAASlE,KAAOoE,EAAY5qD,EAC5B0qD,EAASjE,MAAQmE,EAAYzhD,EAEjC,CACA2yB,EAAM4uB,SAAWA,CAfuD,CAgB1E,GACF,EACAG,kBAAmB,SAA2B19C,GAC5Co9C,EAAgB/qD,KAAK2N,EACvB,EACA29C,qBAAsB,SAA8B7nD,GAClDsnD,EAAgBl7B,OA5HtB,SAAuBtxB,EAAKa,GAC1B,IAAK,IAAIT,KAAKJ,EACZ,GAAKA,EAAIwB,eAAepB,GACxB,IAAK,IAAIgE,KAAOvD,EACd,GAAIA,EAAIW,eAAe4C,IAAQvD,EAAIuD,KAASpE,EAAII,GAAGgE,GAAM,OAAO2E,OAAO3I,GAG3E,OAAQ,CACV,CAoH6B4sD,CAAcR,EAAiB,CACpDtnD,OAAQA,IACN,EACN,EACA+nD,WAAY,SAAoBliC,GAC9B,IAAIvS,EAAQ/S,KACZ,IAAKA,KAAKkiB,QAAQ+kC,UAGhB,OAFAQ,aAAaX,QACW,oBAAbxhC,GAAyBA,KAGtC,IAAIoiC,GAAY,EACdC,EAAgB,EAClBZ,EAAgB91B,SAAQ,SAAUtnB,GAChC,IAAIqR,EAAO,EACTvb,EAASkK,EAAMlK,OACfynD,EAAWznD,EAAOynD,SAClBU,EAASjF,EAAQljD,GACjBooD,EAAepoD,EAAOooD,aACtBC,EAAaroD,EAAOqoD,WACpBC,EAAgBp+C,EAAMk6C,KACtBmE,EAAehG,EAAOviD,GAAQ,GAC5BuoD,IAEFJ,EAAO5E,KAAOgF,EAAaxrD,EAC3BorD,EAAO3E,MAAQ+E,EAAariD,GAE9BlG,EAAOmoD,OAASA,EACZnoD,EAAO0nD,uBAELlB,EAAY4B,EAAcD,KAAY3B,EAAYiB,EAAUU,KAE/DG,EAAc/E,IAAM4E,EAAO5E,MAAQ+E,EAAc9E,KAAO2E,EAAO3E,SAAWiE,EAASlE,IAAM4E,EAAO5E,MAAQkE,EAASjE,KAAO2E,EAAO3E,QAE9HjoC,EAoEZ,SAA2B+sC,EAAeb,EAAUU,EAAQ1lC,GAC1D,OAAO5Q,KAAK22C,KAAK32C,KAAKC,IAAI21C,EAASlE,IAAM+E,EAAc/E,IAAK,GAAK1xC,KAAKC,IAAI21C,EAASjE,KAAO8E,EAAc9E,KAAM,IAAM3xC,KAAK22C,KAAK32C,KAAKC,IAAI21C,EAASlE,IAAM4E,EAAO5E,IAAK,GAAK1xC,KAAKC,IAAI21C,EAASjE,KAAO2E,EAAO3E,KAAM,IAAM/gC,EAAQ+kC,SAC7N,CAtEmBiB,CAAkBH,EAAeF,EAAcC,EAAY/0C,EAAMmP,UAKvE+jC,EAAY2B,EAAQV,KACvBznD,EAAOooD,aAAeX,EACtBznD,EAAOqoD,WAAaF,EACf5sC,IACHA,EAAOjI,EAAMmP,QAAQ+kC,WAEvBl0C,EAAMooB,QAAQ17B,EAAQsoD,EAAeH,EAAQ5sC,IAE3CA,IACF0sC,GAAY,EACZC,EAAgBr2C,KAAKnV,IAAIwrD,EAAe3sC,GACxCysC,aAAahoD,EAAO0oD,qBACpB1oD,EAAO0oD,oBAAsBp4C,YAAW,WACtCtQ,EAAOkoD,cAAgB,EACvBloD,EAAOooD,aAAe,KACtBpoD,EAAOynD,SAAW,KAClBznD,EAAOqoD,WAAa,KACpBroD,EAAO0nD,sBAAwB,IACjC,GAAGnsC,GACHvb,EAAO0nD,sBAAwBnsC,EAEnC,IACAysC,aAAaX,GACRY,EAGHZ,EAAsB/2C,YAAW,WACP,oBAAbuV,GAAyBA,GACtC,GAAGqiC,GAJqB,oBAAbriC,GAAyBA,IAMtCyhC,EAAkB,EACpB,EACA5rB,QAAS,SAAiB17B,EAAQ2oD,EAAaR,EAAQpvC,GACrD,GAAIA,EAAU,CACZ+nB,EAAI9gC,EAAQ,aAAc,IAC1B8gC,EAAI9gC,EAAQ,YAAa,IACzB,IAAIgkD,EAAWzB,EAAOhiD,KAAKgf,IACzB0kC,EAASD,GAAYA,EAASpjC,EAC9BsjC,EAASF,GAAYA,EAAS9uC,EAC9B0zC,GAAcD,EAAYnF,KAAO2E,EAAO3E,OAASS,GAAU,GAC3D4E,GAAcF,EAAYpF,IAAM4E,EAAO5E,MAAQW,GAAU,GAC3DlkD,EAAO8oD,aAAeF,EACtB5oD,EAAO+oD,aAAeF,EACtB/nB,EAAI9gC,EAAQ,YAAa,eAAiB4oD,EAAa,MAAQC,EAAa,SAC5EtoD,KAAKyoD,gBAgBb,SAAiBhpD,GACf,OAAOA,EAAOw+C,WAChB,CAlB+ByK,CAAQjpD,GAE/B8gC,EAAI9gC,EAAQ,aAAc,aAAe+Y,EAAW,MAAQxY,KAAKkiB,QAAQopB,OAAS,IAAMtrC,KAAKkiB,QAAQopB,OAAS,KAC9G/K,EAAI9gC,EAAQ,YAAa,sBACE,kBAApBA,EAAOkpD,UAAyBlB,aAAahoD,EAAOkpD,UAC3DlpD,EAAOkpD,SAAW54C,YAAW,WAC3BwwB,EAAI9gC,EAAQ,aAAc,IAC1B8gC,EAAI9gC,EAAQ,YAAa,IACzBA,EAAOkpD,UAAW,EAClBlpD,EAAO8oD,YAAa,EACpB9oD,EAAO+oD,YAAa,CACtB,GAAGhwC,EACL,CACF,EAEJ,CAQA,IAAItZ,EAAU,GACVypB,EAAW,CACbigC,qBAAqB,GAEnBC,EAAgB,CAClBC,MAAO,SAAe10C,GAEpB,IAAK,IAAI20C,KAAUpgC,EACbA,EAAS5sB,eAAegtD,MAAaA,KAAU30C,KACjDA,EAAO20C,GAAUpgC,EAASogC,IAG9B7pD,EAAQ+xB,SAAQ,SAAU9xB,GACxB,GAAIA,EAAE6pD,aAAe50C,EAAO40C,WAC1B,KAAM,iCAAiChuD,OAAOoZ,EAAO40C,WAAY,kBAErE,IACA9pD,EAAQlD,KAAKoY,EACf,EACA60C,YAAa,SAAqBh5B,EAAWnD,EAAUrJ,GACrD,IAAI1Q,EAAQ/S,KACZA,KAAKkpD,eAAgB,EACrBzlC,EAAI0lC,OAAS,WACXp2C,EAAMm2C,eAAgB,CACxB,EACA,IAAIE,EAAkBn5B,EAAY,SAClC/wB,EAAQ+xB,SAAQ,SAAU7c,GACnB0Y,EAAS1Y,EAAO40C,cAEjBl8B,EAAS1Y,EAAO40C,YAAYI,IAC9Bt8B,EAAS1Y,EAAO40C,YAAYI,GAAiBhJ,EAAe,CAC1DtzB,SAAUA,GACTrJ,IAKDqJ,EAAS5K,QAAQ9N,EAAO40C,aAAel8B,EAAS1Y,EAAO40C,YAAY/4B,IACrEnD,EAAS1Y,EAAO40C,YAAY/4B,GAAWmwB,EAAe,CACpDtzB,SAAUA,GACTrJ,IAEP,GACF,EACA4lC,kBAAmB,SAA2Bv8B,EAAU9N,EAAI2J,EAAUzG,GAYpE,IAAK,IAAI6mC,KAXT7pD,EAAQ+xB,SAAQ,SAAU7c,GACxB,IAAI40C,EAAa50C,EAAO40C,WACxB,GAAKl8B,EAAS5K,QAAQ8mC,IAAgB50C,EAAOw0C,oBAA7C,CACA,IAAIU,EAAc,IAAIl1C,EAAO0Y,EAAU9N,EAAI8N,EAAS5K,SACpDonC,EAAYx8B,SAAWA,EACvBw8B,EAAYpnC,QAAU4K,EAAS5K,QAC/B4K,EAASk8B,GAAcM,EAGvBzpD,EAAS8oB,EAAU2gC,EAAY3gC,SAPyC,CAQ1E,IACmBmE,EAAS5K,QAC1B,GAAK4K,EAAS5K,QAAQnmB,eAAegtD,GAArC,CACA,IAAIQ,EAAWvpD,KAAKwpD,aAAa18B,EAAUi8B,EAAQj8B,EAAS5K,QAAQ6mC,IAC5C,qBAAbQ,IACTz8B,EAAS5K,QAAQ6mC,GAAUQ,EAHyB,CAM1D,EACAE,mBAAoB,SAA4BlqD,EAAMutB,GACpD,IAAI48B,EAAkB,CAAC,EAKvB,OAJAxqD,EAAQ+xB,SAAQ,SAAU7c,GACc,oBAA3BA,EAAOs1C,iBAClB7pD,EAAS6pD,EAAiBt1C,EAAOs1C,gBAAgBluD,KAAKsxB,EAAS1Y,EAAO40C,YAAazpD,GACrF,IACOmqD,CACT,EACAF,aAAc,SAAsB18B,EAAUvtB,EAAMlD,GAClD,IAAIstD,EAUJ,OATAzqD,EAAQ+xB,SAAQ,SAAU7c,GAEnB0Y,EAAS1Y,EAAO40C,aAGjB50C,EAAOw1C,iBAA2D,oBAAjCx1C,EAAOw1C,gBAAgBrqD,KAC1DoqD,EAAgBv1C,EAAOw1C,gBAAgBrqD,GAAM/D,KAAKsxB,EAAS1Y,EAAO40C,YAAa3sD,GAEnF,IACOstD,CACT,GAGF,SAASE,EAAc7gD,GACrB,IAAI8jB,EAAW9jB,EAAK8jB,SAClBg9B,EAAS9gD,EAAK8gD,OACdvqD,EAAOyJ,EAAKzJ,KACZwqD,EAAW/gD,EAAK+gD,SAChBC,EAAUhhD,EAAKghD,QACfC,EAAOjhD,EAAKihD,KACZC,EAASlhD,EAAKkhD,OACdC,EAAWnhD,EAAKmhD,SAChBC,EAAWphD,EAAKohD,SAChBC,EAAoBrhD,EAAKqhD,kBACzBC,EAAoBthD,EAAKshD,kBACzBxe,EAAgB9iC,EAAK8iC,cACrBye,EAAcvhD,EAAKuhD,YACnBC,EAAuBxhD,EAAKwhD,qBAE9B,GADA19B,EAAWA,GAAYg9B,GAAUA,EAAOlD,GACxC,CACA,IAAInjC,EACFvB,EAAU4K,EAAS5K,QACnBuoC,EAAS,KAAOlrD,EAAKwC,OAAO,GAAGC,cAAgBzC,EAAKiR,OAAO,IAEzDtQ,OAAOwqD,aAAgB5J,GAAeC,GAMxCt9B,EAAMhJ,SAASkwC,YAAY,UACvBC,UAAUrrD,GAAM,GAAM,GAN1BkkB,EAAM,IAAIinC,YAAYnrD,EAAM,CAC1BsrD,SAAS,EACTC,YAAY,IAMhBrnC,EAAI3D,GAAKmqC,GAAQH,EACjBrmC,EAAI7D,KAAOsqC,GAAUJ,EACrBrmC,EAAI1oB,KAAOgvD,GAAYD,EACvBrmC,EAAIwF,MAAQ+gC,EACZvmC,EAAI0mC,SAAWA,EACf1mC,EAAI2mC,SAAWA,EACf3mC,EAAI4mC,kBAAoBA,EACxB5mC,EAAI6mC,kBAAoBA,EACxB7mC,EAAIqoB,cAAgBA,EACpBroB,EAAIsnC,SAAWR,EAAcA,EAAYS,iBAAc5tD,EACvD,IAAI6tD,EAAqB7K,EAAeA,EAAe,CAAC,EAAGoK,GAAuB3B,EAAcY,mBAAmBlqD,EAAMutB,IACzH,IAAK,IAAIi8B,KAAUkC,EACjBxnC,EAAIslC,GAAUkC,EAAmBlC,GAE/Be,GACFA,EAAOD,cAAcpmC,GAEnBvB,EAAQuoC,IACVvoC,EAAQuoC,GAAQjvD,KAAKsxB,EAAUrJ,EAhCZ,CAkCvB,CAEA,IAAIynC,EAAY,CAAC,OACbjC,EAAc,SAAqBh5B,EAAWnD,GAChD,IAAI9jB,EAAOtJ,UAAU7E,OAAS,QAAsBuC,IAAjBsC,UAAU,GAAmBA,UAAU,GAAK,CAAC,EAC9EosC,EAAgB9iC,EAAKya,IACrBnd,EAAOk6C,EAAyBx3C,EAAMkiD,GACxCrC,EAAcI,YAAYtoD,KAAKkkD,GAA/BgE,CAAyC54B,EAAWnD,EAAUszB,EAAe,CAC3E+K,OAAQA,EACRC,SAAUA,EACVC,QAASA,EACTvB,OAAQA,EACRwB,OAAQA,GACRC,WAAYA,GACZvB,QAASA,GACTwB,YAAaA,GACbC,YAAaC,GACbnB,YAAaA,GACboB,eAAgB9G,GAAS+G,OACzB9f,cAAeA,EACfqe,SAAUA,GACVE,kBAAmBA,GACnBD,SAAUA,GACVE,kBAAmBA,GACnBuB,mBAAoBC,GACpBC,qBAAsBC,GACtBC,eAAgB,WACdT,IAAc,CAChB,EACAU,cAAe,WACbV,IAAc,CAChB,EACAW,sBAAuB,SAA+B5sD,GACpD6sD,EAAe,CACbt/B,SAAUA,EACVvtB,KAAMA,EACNusC,cAAeA,GAEnB,GACCxlC,GACL,EACA,SAAS8lD,EAAe74C,GACtBs2C,EAAczJ,EAAe,CAC3BmK,YAAaA,GACbP,QAASA,GACTD,SAAUoB,EACVrB,OAAQA,EACRK,SAAUA,GACVE,kBAAmBA,GACnBD,SAAUA,GACVE,kBAAmBA,IAClB/2C,GACL,CACA,IAAI43C,EACFC,EACAC,EACAvB,EACAwB,GACAC,GACAvB,GACAwB,GACArB,GACAC,GACAC,GACAC,GACA+B,GACA9B,GAIA+B,GACAC,GACAC,GACAC,GACAC,GACAC,GACAjB,GACAkB,GACAC,GAGAC,GAEAC,GAhBAC,IAAsB,EACtBC,IAAkB,EAClBC,GAAY,GAUZC,IAAwB,EACxBC,IAAyB,EAIzBC,GAAmC,GAGnCC,IAAU,EACVC,GAAoB,GAGlBC,GAAqC,qBAAb/yC,SAC1BgzC,GAA0BvM,EAC1BwM,GAAmB3M,GAAQD,EAAa,WAAa,QAErD6M,GAAmBH,KAAmBrM,IAAqBD,GAAO,cAAezmC,SAAS6F,cAAc,OACxGstC,GAA0B,WACxB,GAAKJ,GAAL,CAEA,GAAI1M,EACF,OAAO,EAET,IAAI9hC,EAAKvE,SAAS6F,cAAc,KAEhC,OADAtB,EAAGmY,MAAMgJ,QAAU,sBACe,SAA3BnhB,EAAGmY,MAAM02B,aAPW,CAQ7B,CAT0B,GAU1BC,GAAmB,SAA0B9uC,EAAIkD,GAC/C,IAAI6rC,EAAQxtB,EAAIvhB,GACdgvC,EAAU1xD,SAASyxD,EAAM1K,OAAS/mD,SAASyxD,EAAMjK,aAAexnD,SAASyxD,EAAM/J,cAAgB1nD,SAASyxD,EAAME,iBAAmB3xD,SAASyxD,EAAMG,kBAChJC,EAAS3J,EAASxlC,EAAI,EAAGkD,GACzBksC,EAAS5J,EAASxlC,EAAI,EAAGkD,GACzBmsC,EAAgBF,GAAU5tB,EAAI4tB,GAC9BG,EAAiBF,GAAU7tB,EAAI6tB,GAC/BG,EAAkBF,GAAiB/xD,SAAS+xD,EAAcG,YAAclyD,SAAS+xD,EAAcI,aAAe9L,EAAQwL,GAAQ9K,MAC9HqL,EAAmBJ,GAAkBhyD,SAASgyD,EAAeE,YAAclyD,SAASgyD,EAAeG,aAAe9L,EAAQyL,GAAQ/K,MACpI,GAAsB,SAAlB0K,EAAM32B,QACR,MAA+B,WAAxB22B,EAAMY,eAAsD,mBAAxBZ,EAAMY,cAAqC,WAAa,aAErG,GAAsB,SAAlBZ,EAAM32B,QACR,OAAO22B,EAAMa,oBAAoBhqD,MAAM,KAAK/J,QAAU,EAAI,WAAa,aAEzE,GAAIszD,GAAUE,EAAqB,OAAgC,SAA3BA,EAAqB,MAAc,CACzE,IAAIQ,EAAgD,SAA3BR,EAAqB,MAAe,OAAS,QACtE,OAAOD,GAAoC,SAAzBE,EAAenlD,OAAoBmlD,EAAenlD,QAAU0lD,EAAmC,aAAb,UACtG,CACA,OAAOV,IAAqC,UAA1BE,EAAcj3B,SAAiD,SAA1Bi3B,EAAcj3B,SAAgD,UAA1Bi3B,EAAcj3B,SAAiD,SAA1Bi3B,EAAcj3B,SAAsBm3B,GAAmBP,GAAuC,SAA5BD,EAAML,KAAgCU,GAAsC,SAA5BL,EAAML,KAAgCa,EAAkBG,EAAmBV,GAAW,WAAa,YACvV,EA8BAc,GAAgB,SAAuB5sC,GACrC,SAAS6sC,EAAK1yD,EAAO2yD,GACnB,OAAO,SAAUlvC,EAAIF,EAAMurC,EAAQ1nC,GACjC,IAAIwrC,EAAYnvC,EAAGoC,QAAQgtC,MAAM3vD,MAAQqgB,EAAKsC,QAAQgtC,MAAM3vD,MAAQugB,EAAGoC,QAAQgtC,MAAM3vD,OAASqgB,EAAKsC,QAAQgtC,MAAM3vD,KACjH,GAAa,MAATlD,IAAkB2yD,GAAQC,GAG5B,OAAO,EACF,GAAa,MAAT5yD,IAA2B,IAAVA,EAC1B,OAAO,EACF,GAAI2yD,GAAkB,UAAV3yD,EACjB,OAAOA,EACF,GAAqB,oBAAVA,EAChB,OAAO0yD,EAAK1yD,EAAMyjB,EAAIF,EAAMurC,EAAQ1nC,GAAMurC,EAAnCD,CAAyCjvC,EAAIF,EAAMurC,EAAQ1nC,GAElE,IAAI0rC,GAAcH,EAAOlvC,EAAKF,GAAMsC,QAAQgtC,MAAM3vD,KAClD,OAAiB,IAAVlD,GAAmC,kBAAVA,GAAsBA,IAAU8yD,GAAc9yD,EAAMkC,MAAQlC,EAAMmI,QAAQ2qD,IAAe,CAE7H,CACF,CACA,IAAID,EAAQ,CAAC,EACTE,EAAgBltC,EAAQgtC,MACvBE,GAA2C,UAA1B7O,EAAQ6O,KAC5BA,EAAgB,CACd7vD,KAAM6vD,IAGVF,EAAM3vD,KAAO6vD,EAAc7vD,KAC3B2vD,EAAMG,UAAYN,EAAKK,EAAcJ,MAAM,GAC3CE,EAAMI,SAAWP,EAAKK,EAAcG,KACpCL,EAAMM,YAAcJ,EAAcI,YAClCttC,EAAQgtC,MAAQA,CAClB,EACApD,GAAsB,YACf8B,IAA2BvC,GAC9B9qB,EAAI8qB,EAAS,UAAW,OAE5B,EACAW,GAAwB,YACjB4B,IAA2BvC,GAC9B9qB,EAAI8qB,EAAS,UAAW,GAE5B,EAGEmC,KAAmBrM,GACrB1mC,SAASgE,iBAAiB,SAAS,SAAUgF,GAC3C,GAAIwpC,GAKF,OAJAxpC,EAAIiX,iBACJjX,EAAIwwB,iBAAmBxwB,EAAIwwB,kBAC3BxwB,EAAIsuB,0BAA4BtuB,EAAIsuB,2BACpCkb,IAAkB,GACX,CAEX,IAAG,GAEL,IAAIwC,GAAgC,SAAuChsC,GACzE,GAAI0nC,EAAQ,CACV1nC,EAAMA,EAAIisC,QAAUjsC,EAAIisC,QAAQ,GAAKjsC,EACrC,IAAIksC,GAzE6Dz0D,EAyEvBuoB,EAAImsC,QAzEsBrJ,EAyEb9iC,EAAIosC,QAvE3D3C,GAAU7/B,MAAK,SAAUP,GACvB,IAAIgjC,EAAYhjC,EAAS85B,GAAS1kC,QAAQ6tC,qBAC1C,GAAKD,IAAa7K,EAAUn4B,GAA5B,CACA,IAAI+2B,EAAOlB,EAAQ71B,GACjBkjC,EAAqB90D,GAAK2oD,EAAKZ,KAAO6M,GAAa50D,GAAK2oD,EAAKV,MAAQ2M,EACrEG,EAAmB1J,GAAK1C,EAAKb,IAAM8M,GAAavJ,GAAK1C,EAAKX,OAAS4M,EACrE,OAAIE,GAAsBC,EACjBpgD,EAAMid,OADf,CAJ6C,CAO/C,IACOjd,GA8DP,GAAI8/C,EAAS,CAEX,IAAIphD,EAAQ,CAAC,EACb,IAAK,IAAI5T,KAAK8oB,EACRA,EAAI1nB,eAAepB,KACrB4T,EAAM5T,GAAK8oB,EAAI9oB,IAGnB4T,EAAM9O,OAAS8O,EAAMu7C,OAAS6F,EAC9BphD,EAAMmsB,oBAAiB,EACvBnsB,EAAM0lC,qBAAkB,EACxB0b,EAAQ/I,GAASsJ,YAAY3hD,EAC/B,CACF,CAvF8B,IAAqCrT,EAAGqrD,EAChE12C,CAuFR,EACIsgD,GAAwB,SAA+B1sC,GACrD0nC,GACFA,EAAO5rC,WAAWqnC,GAASwJ,iBAAiB3sC,EAAIhkB,OAEpD,EAOA,SAASolD,GAAS7lC,EAAIkD,GACpB,IAAMlD,IAAMA,EAAGshB,UAA4B,IAAhBthB,EAAGshB,SAC5B,KAAM,8CAA8CtlC,OAAO,CAAC,EAAEO,SAASC,KAAKwjB,IAE9Ehf,KAAKgf,GAAKA,EACVhf,KAAKkiB,QAAUA,EAAUriB,EAAS,CAAC,EAAGqiB,GAGtClD,EAAG4nC,GAAW5mD,KACd,IAAI2oB,EAAW,CACbumC,MAAO,KACPriC,MAAM,EACNwjC,UAAU,EACVC,MAAO,KACPC,OAAQ,KACRvL,UAAW,WAAW/lD,KAAK+f,EAAGsoB,UAAY,MAAQ,KAClDkpB,cAAe,EAEfC,YAAY,EAEZC,sBAAuB,KAEvBC,mBAAmB,EACnBtc,UAAW,WACT,OAAOyZ,GAAiB9uC,EAAIhf,KAAKkiB,QACnC,EACA0uC,WAAY,iBACZC,YAAa,kBACbC,UAAW,gBACX3gD,OAAQ,SACRtL,OAAQ,KACRksD,iBAAiB,EACjB9J,UAAW,EACX3b,OAAQ,KACR0lB,QAAS,SAAiBC,EAAc9F,GACtC8F,EAAaD,QAAQ,OAAQ7F,EAAOjsC,YACtC,EACAgyC,YAAY,EACZC,gBAAgB,EAChBC,WAAY,UACZjd,MAAO,EACPkd,kBAAkB,EAClBC,qBAAsBhuD,OAAOhH,SAAWgH,OAASpD,QAAQ5D,SAAS4D,OAAOqxD,iBAAkB,KAAO,EAClGC,eAAe,EACfC,cAAe,oBACfC,gBAAgB,EAChBC,kBAAmB,EACnBC,eAAgB,CACd12D,EAAG,EACHqrD,EAAG,GAELsL,gBAA4C,IAA5BhN,GAASgN,gBAA4B,iBAAkB3xD,SAAW+gD,EAClF8O,qBAAsB,GAKxB,IAAK,IAAIxwD,KAHTspD,EAAcQ,kBAAkBrpD,KAAMgf,EAAI2J,GAGzBA,IACbppB,KAAQ2iB,KAAaA,EAAQ3iB,GAAQopB,EAASppB,IAKlD,IAAK,IAAI/E,KAHTs0D,GAAc5sC,GAGCliB,KACQ,MAAjBxF,EAAGuH,OAAO,IAAkC,oBAAb/B,KAAKxF,KACtCwF,KAAKxF,GAAMwF,KAAKxF,GAAImG,KAAKX,OAK7BA,KAAK8xD,iBAAkB5vC,EAAQsvC,eAAwB7D,GACnD3tD,KAAK8xD,kBAEP9xD,KAAKkiB,QAAQovC,oBAAsB,GAIjCpvC,EAAQ2vC,eACVpsC,EAAGzG,EAAI,cAAehf,KAAK+xD,cAE3BtsC,EAAGzG,EAAI,YAAahf,KAAK+xD,aACzBtsC,EAAGzG,EAAI,aAAchf,KAAK+xD,cAExB/xD,KAAK8xD,kBACPrsC,EAAGzG,EAAI,WAAYhf,MACnBylB,EAAGzG,EAAI,YAAahf,OAEtBktD,GAAUlxD,KAAKgE,KAAKgf,IAGpBkD,EAAQouC,OAASpuC,EAAQouC,MAAMnmD,KAAOnK,KAAK6sB,KAAK3K,EAAQouC,MAAMnmD,IAAInK,OAAS,IAG3EH,EAASG,KAAM6mD,IACjB,CAmhCA,SAASmL,GAAQ9H,EAAQD,EAAMkB,EAAQ8G,EAAUlI,EAAUmI,EAAYpmB,EAAeqmB,GACpF,IAAI1uC,EAGF2uC,EAFAtlC,EAAWo9B,EAAOtD,GAClByL,EAAWvlC,EAAS5K,QAAQowC,OAwB9B,OArBIpyD,OAAOwqD,aAAgB5J,GAAeC,GAMxCt9B,EAAMhJ,SAASkwC,YAAY,UACvBC,UAAU,QAAQ,GAAM,GAN5BnnC,EAAM,IAAIinC,YAAY,OAAQ,CAC5BG,SAAS,EACTC,YAAY,IAMhBrnC,EAAI3D,GAAKmqC,EACTxmC,EAAI7D,KAAOsqC,EACXzmC,EAAIshC,QAAUoG,EACd1nC,EAAI8uC,YAAcN,EAClBxuC,EAAI+uC,QAAUzI,GAAYE,EAC1BxmC,EAAIgvC,YAAcP,GAAcvP,EAAQsH,GACxCxmC,EAAI0uC,gBAAkBA,EACtB1uC,EAAIqoB,cAAgBA,EACpBoe,EAAOL,cAAcpmC,GACjB4uC,IACFD,EAASC,EAAS72D,KAAKsxB,EAAUrJ,EAAKqoB,IAEjCsmB,CACT,CACA,SAASM,GAAkB1zC,GACzBA,EAAGgmC,WAAY,CACjB,CACA,SAAS2N,KACPrF,IAAU,CACZ,CA0EA,SAASsF,GAAY5zC,GAInB,IAHA,IAAIld,EAAMkd,EAAGI,QAAUJ,EAAGK,UAAYL,EAAGkY,IAAMlY,EAAG7D,KAAO6D,EAAGE,YAC1DvkB,EAAImH,EAAIjH,OACRg4D,EAAM,EACDl4D,KACLk4D,GAAO/wD,EAAIm0C,WAAWt7C,GAExB,OAAOk4D,EAAIt3D,SAAS,GACtB,CAUA,SAASu3D,GAAUt4D,GACjB,OAAOuV,WAAWvV,EAAI,EACxB,CACA,SAASu4D,GAAgB/lD,GACvB,OAAOy6C,aAAaz6C,EACtB,CArpCA63C,GAASvpD,UAA4C,CACnD8vB,YAAay5B,GACbuL,iBAAkB,SAA0B3wD,GACrCO,KAAKgf,GAAG8S,SAASryB,IAAWA,IAAWO,KAAKgf,KAC/C4tC,GAAa,KAEjB,EACAoG,cAAe,SAAuBvvC,EAAKhkB,GACzC,MAAyC,oBAA3BO,KAAKkiB,QAAQmyB,UAA2Br0C,KAAKkiB,QAAQmyB,UAAU74C,KAAKwE,KAAMyjB,EAAKhkB,EAAQ0rD,GAAUnrD,KAAKkiB,QAAQmyB,SAC9H,EACA0d,YAAa,SAA6CtuC,GACxD,GAAKA,EAAIqnC,WAAT,CACA,IAAI/3C,EAAQ/S,KACVgf,EAAKhf,KAAKgf,GACVkD,EAAUliB,KAAKkiB,QACf6uC,EAAkB7uC,EAAQ6uC,gBAC1BjwD,EAAO2iB,EAAI3iB,KACXmyD,EAAQxvC,EAAIisC,SAAWjsC,EAAIisC,QAAQ,IAAMjsC,EAAIyvC,aAAmC,UAApBzvC,EAAIyvC,aAA2BzvC,EAC3FhkB,GAAUwzD,GAASxvC,GAAKhkB,OACxB0zD,EAAiB1vC,EAAIhkB,OAAO2zD,aAAe3vC,EAAI9b,MAAQ8b,EAAI9b,KAAK,IAAM8b,EAAI4vC,cAAgB5vC,EAAI4vC,eAAe,KAAO5zD,EACpHoF,EAASqd,EAAQrd,OAInB,GA+mCJ,SAAgCzD,GAC9BmsD,GAAkB1yD,OAAS,EAC3B,IAAIy4D,EAASlyD,EAAKgc,qBAAqB,SACnCohB,EAAM80B,EAAOz4D,OACjB,KAAO2jC,KAAO,CACZ,IAAIxf,EAAKs0C,EAAO90B,GAChBxf,EAAGu0C,SAAWhG,GAAkBvxD,KAAKgjB,EACvC,CACF,CA1nCIw0C,CAAuBx0C,IAGnBmsC,KAGA,wBAAwBlsD,KAAK6B,IAAwB,IAAf2iB,EAAIksB,QAAgBztB,EAAQmuC,YAKlE8C,EAAeM,oBAKdzzD,KAAK8xD,kBAAmB7Q,IAAUxhD,GAA2C,WAAjCA,EAAO2f,QAAQpd,mBAGhEvC,EAASizC,EAAQjzC,EAAQyiB,EAAQ8iC,UAAWhmC,GAAI,MAClCvf,EAAOkpD,WAGjB4C,KAAe9rD,EAAnB,CAUA,GAJA0qD,GAAW56C,EAAM9P,GACjB4qD,GAAoB96C,EAAM9P,EAAQyiB,EAAQ8iC,WAGpB,oBAAXngD,GACT,GAAIA,EAAOrJ,KAAKwE,KAAMyjB,EAAKhkB,EAAQO,MAajC,OAZAosD,EAAe,CACbt/B,SAAU/Z,EACV+2C,OAAQqJ,EACR5zD,KAAM,SACNwqD,SAAUtqD,EACVwqD,KAAMjrC,EACNkrC,OAAQlrC,IAEViqC,EAAY,SAAUl2C,EAAO,CAC3B0Q,IAAKA,SAEPstC,GAAmBttC,EAAIqnC,YAAcrnC,EAAIiX,uBAGtC,GAAI71B,IACTA,EAASA,EAAOD,MAAM,KAAKyoB,MAAK,SAAUqmC,GAExC,GADAA,EAAWhhB,EAAQygB,EAAgBO,EAASC,OAAQ30C,GAAI,GAatD,OAXAotC,EAAe,CACbt/B,SAAU/Z,EACV+2C,OAAQ4J,EACRn0D,KAAM,SACNwqD,SAAUtqD,EACVyqD,OAAQlrC,EACRirC,KAAMjrC,IAERiqC,EAAY,SAAUl2C,EAAO,CAC3B0Q,IAAKA,KAEA,CAEX,KAGE,YADAstC,GAAmBttC,EAAIqnC,YAAcrnC,EAAIiX,kBAIzCxY,EAAQquC,SAAW7d,EAAQygB,EAAgBjxC,EAAQquC,OAAQvxC,GAAI,IAKnEhf,KAAK4zD,kBAAkBnwC,EAAKwvC,EAAOxzD,EAnDnC,CApC2B,CAwF7B,EACAm0D,kBAAmB,SAAwCnwC,EAAiBwvC,EAAyBxzD,GACnG,IAIEo0D,EAJE9gD,EAAQ/S,KACVgf,EAAKjM,EAAMiM,GACXkD,EAAUnP,EAAMmP,QAChB4xC,EAAgB90C,EAAG80C,cAErB,GAAIr0D,IAAW0rD,GAAU1rD,EAAO8f,aAAeP,EAAI,CACjD,IAAIizC,EAAWtP,EAAQljD,GAoEvB,GAnEAqqD,EAAS9qC,EAETosC,GADAD,EAAS1rD,GACS8f,WAClB+rC,GAASH,EAAO4I,YAChBxI,GAAa9rD,EACb4sD,GAAcnqC,EAAQgtC,MACtBrK,GAASE,QAAUoG,EACnBmB,GAAS,CACP7sD,OAAQ0rD,EACRyE,SAAUqD,GAASxvC,GAAKmsC,QACxBC,SAAUoD,GAASxvC,GAAKosC,SAE1BnD,GAAkBJ,GAAOsD,QAAUqC,EAAShP,KAC5C0J,GAAiBL,GAAOuD,QAAUoC,EAASjP,IAC3ChjD,KAAKg0D,QAAUf,GAASxvC,GAAKmsC,QAC7B5vD,KAAKi0D,QAAUhB,GAASxvC,GAAKosC,QAC7B1E,EAAOh0B,MAAM,eAAiB,MAC9B08B,EAAc,WACZ5K,EAAY,aAAcl2C,EAAO,CAC/B0Q,IAAKA,IAEHohC,GAASqE,cACXn2C,EAAMmhD,WAKRnhD,EAAMohD,6BACDnT,GAAWjuC,EAAM++C,kBACpB3G,EAAOnG,WAAY,GAIrBjyC,EAAMqhD,kBAAkB3wC,EAAKwvC,GAG7B7G,EAAe,CACbt/B,SAAU/Z,EACVxT,KAAM,SACNusC,cAAeroB,IAIjBwkB,EAAYkjB,EAAQjpC,EAAQ2uC,aAAa,GAC3C,EAGA3uC,EAAQ/R,OAAOvL,MAAM,KAAKqsB,SAAQ,SAAUyiC,GAC1CpsD,EAAK6jD,EAAQuI,EAASC,OAAQjB,GAChC,IACAjtC,EAAGquC,EAAe,WAAYrE,IAC9BhqC,EAAGquC,EAAe,YAAarE,IAC/BhqC,EAAGquC,EAAe,YAAarE,IAC/BhqC,EAAGquC,EAAe,UAAW/gD,EAAMmhD,SACnCzuC,EAAGquC,EAAe,WAAY/gD,EAAMmhD,SACpCzuC,EAAGquC,EAAe,cAAe/gD,EAAMmhD,SAGnClT,GAAWhhD,KAAK8xD,kBAClB9xD,KAAKkiB,QAAQovC,oBAAsB,EACnCnG,EAAOnG,WAAY,GAErBiE,EAAY,aAAcjpD,KAAM,CAC9ByjB,IAAKA,KAIHvB,EAAQiyB,OAAWjyB,EAAQmvC,mBAAoB4B,GAAYjzD,KAAK8xD,kBAAqB/Q,GAAQD,GAgB/F+S,QAhB6G,CAC7G,GAAIhP,GAASqE,cAEX,YADAlpD,KAAKk0D,UAMPzuC,EAAGquC,EAAe,UAAW/gD,EAAMshD,qBACnC5uC,EAAGquC,EAAe,WAAY/gD,EAAMshD,qBACpC5uC,EAAGquC,EAAe,cAAe/gD,EAAMshD,qBACvC5uC,EAAGquC,EAAe,YAAa/gD,EAAMuhD,8BACrC7uC,EAAGquC,EAAe,YAAa/gD,EAAMuhD,8BACrCpyC,EAAQ2vC,gBAAkBpsC,EAAGquC,EAAe,cAAe/gD,EAAMuhD,8BACjEvhD,EAAMwhD,gBAAkBxkD,WAAW8jD,EAAa3xC,EAAQiyB,MAC1D,CAGF,CACF,EACAmgB,6BAA8B,SAAsE3uD,GAClG,IAAIstD,EAAQttD,EAAE+pD,QAAU/pD,EAAE+pD,QAAQ,GAAK/pD,EACnC2L,KAAKnV,IAAImV,KAAK4pC,IAAI+X,EAAMrD,QAAU5vD,KAAKg0D,QAAS1iD,KAAK4pC,IAAI+X,EAAMpD,QAAU7vD,KAAKi0D,UAAY3iD,KAAKwtB,MAAM9+B,KAAKkiB,QAAQovC,qBAAuBtxD,KAAK8xD,iBAAmB5xD,OAAOqxD,kBAAoB,KAC9LvxD,KAAKq0D,qBAET,EACAA,oBAAqB,WACnBlJ,GAAUuH,GAAkBvH,GAC5B1D,aAAaznD,KAAKu0D,iBAClBv0D,KAAKm0D,2BACP,EACAA,0BAA2B,WACzB,IAAIL,EAAgB9zD,KAAKgf,GAAG80C,cAC5BrtC,EAAIqtC,EAAe,UAAW9zD,KAAKq0D,qBACnC5tC,EAAIqtC,EAAe,WAAY9zD,KAAKq0D,qBACpC5tC,EAAIqtC,EAAe,cAAe9zD,KAAKq0D,qBACvC5tC,EAAIqtC,EAAe,YAAa9zD,KAAKs0D,8BACrC7tC,EAAIqtC,EAAe,YAAa9zD,KAAKs0D,8BACrC7tC,EAAIqtC,EAAe,cAAe9zD,KAAKs0D,6BACzC,EACAF,kBAAmB,SAAwC3wC,EAAiBwvC,GAC1EA,EAAQA,GAA4B,SAAnBxvC,EAAIyvC,aAA0BzvC,GAC1CzjB,KAAK8xD,iBAAmBmB,EACvBjzD,KAAKkiB,QAAQ2vC,eACfpsC,EAAGhL,SAAU,cAAeza,KAAKw0D,cAEjC/uC,EAAGhL,SADMw4C,EACI,YAEA,YAFajzD,KAAKw0D,eAKjC/uC,EAAG0lC,EAAQ,UAAWnrD,MACtBylB,EAAGqkC,EAAQ,YAAa9pD,KAAKy0D,eAE/B,IACMh6C,SAASi6C,UAEX5B,IAAU,WACRr4C,SAASi6C,UAAUpyB,OACrB,IAEApiC,OAAOy0D,eAAeC,iBAE1B,CAAE,MAAOvtD,GAAM,CACjB,EACAwtD,aAAc,SAAsBC,EAAUrxC,GAE5C,GADAupC,IAAsB,EAClBlD,GAAUqB,EAAQ,CACpBlC,EAAY,cAAejpD,KAAM,CAC/ByjB,IAAKA,IAEHzjB,KAAK8xD,iBACPrsC,EAAGhL,SAAU,WAAY01C,IAE3B,IAAIjuC,EAAUliB,KAAKkiB,SAGlB4yC,GAAY7sB,EAAYkjB,EAAQjpC,EAAQ4uC,WAAW,GACpD7oB,EAAYkjB,EAAQjpC,EAAQ0uC,YAAY,GACxC/L,GAAS+G,OAAS5rD,KAClB80D,GAAY90D,KAAK+0D,eAGjB3I,EAAe,CACbt/B,SAAU9sB,KACVT,KAAM,QACNusC,cAAeroB,GAEnB,MACEzjB,KAAKg1D,UAET,EACAC,iBAAkB,WAChB,GAAI1I,GAAU,CACZvsD,KAAKg0D,OAASzH,GAASqD,QACvB5vD,KAAKi0D,OAAS1H,GAASsD,QACvB/D,KAGA,IAFA,IAAIrsD,EAASgb,SAASy6C,iBAAiB3I,GAASqD,QAASrD,GAASsD,SAC9Dt3B,EAAS94B,EACNA,GAAUA,EAAO2zD,aACtB3zD,EAASA,EAAO2zD,WAAW8B,iBAAiB3I,GAASqD,QAASrD,GAASsD,YACxDt3B,GACfA,EAAS94B,EAGX,GADA0rD,EAAO5rC,WAAWqnC,GAASwJ,iBAAiB3wD,GACxC84B,EACF,EAAG,CACD,GAAIA,EAAOquB,GAAU,CAQnB,GANWruB,EAAOquB,GAASsJ,YAAY,CACrCN,QAASrD,GAASqD,QAClBC,QAAStD,GAASsD,QAClBpwD,OAAQA,EACRqqD,OAAQvxB,MAEOv4B,KAAKkiB,QAAQivC,eAC5B,KAEJ,CACA1xD,EAAS84B,CACX,OAC8BA,EAASA,EAAOhZ,YAEhDysC,IACF,CACF,EACAwI,aAAc,SAAsC/wC,GAClD,GAAI6oC,GAAQ,CACV,IAAIpqC,EAAUliB,KAAKkiB,QACjByvC,EAAoBzvC,EAAQyvC,kBAC5BC,EAAiB1vC,EAAQ0vC,eACzBqB,EAAQxvC,EAAIisC,QAAUjsC,EAAIisC,QAAQ,GAAKjsC,EACvC0xC,EAAc9J,GAAWrJ,EAAOqJ,GAAS,GACzC3H,EAAS2H,GAAW8J,GAAeA,EAAY90C,EAC/CsjC,EAAS0H,GAAW8J,GAAeA,EAAYxgD,EAC/CygD,EAAuB3H,IAA2BV,IAAuB3H,EAAwB2H,IACjGsI,GAAMpC,EAAMrD,QAAUtD,GAAOsD,QAAUgC,EAAe12D,IAAMwoD,GAAU,IAAM0R,EAAuBA,EAAqB,GAAK/H,GAAiC,GAAK,IAAM3J,GAAU,GACnL4R,GAAMrC,EAAMpD,QAAUvD,GAAOuD,QAAU+B,EAAerL,IAAM5C,GAAU,IAAMyR,EAAuBA,EAAqB,GAAK/H,GAAiC,GAAK,IAAM1J,GAAU,GAGrL,IAAKkB,GAAS+G,SAAWoB,GAAqB,CAC5C,GAAI2E,GAAqBrgD,KAAKnV,IAAImV,KAAK4pC,IAAI+X,EAAMrD,QAAU5vD,KAAKg0D,QAAS1iD,KAAK4pC,IAAI+X,EAAMpD,QAAU7vD,KAAKi0D,SAAWtC,EAChH,OAEF3xD,KAAKy0D,aAAahxC,GAAK,EACzB,CACA,GAAI4nC,EAAS,CACP8J,GACFA,EAAYxvD,GAAK0vD,GAAM7I,IAAU,GACjC2I,EAAY34D,GAAK84D,GAAM7I,IAAU,IAEjC0I,EAAc,CACZ90C,EAAG,EACHxM,EAAG,EACH3C,EAAG,EACHyD,EAAG,EACHhP,EAAG0vD,EACH74D,EAAG84D,GAGP,IAAIC,EAAY,UAAUv6D,OAAOm6D,EAAY90C,EAAG,KAAKrlB,OAAOm6D,EAAYthD,EAAG,KAAK7Y,OAAOm6D,EAAYjkD,EAAG,KAAKlW,OAAOm6D,EAAYxgD,EAAG,KAAK3Z,OAAOm6D,EAAYxvD,EAAG,KAAK3K,OAAOm6D,EAAY34D,EAAG,KACvL+jC,EAAI8qB,EAAS,kBAAmBkK,GAChCh1B,EAAI8qB,EAAS,eAAgBkK,GAC7Bh1B,EAAI8qB,EAAS,cAAekK,GAC5Bh1B,EAAI8qB,EAAS,YAAakK,GAC1B/I,GAAS6I,EACT5I,GAAS6I,EACT/I,GAAW0G,CACb,CACAxvC,EAAIqnC,YAAcrnC,EAAIiX,gBACxB,CACF,EACAq6B,aAAc,WAGZ,IAAK1J,EAAS,CACZ,IAAIxX,EAAY7zC,KAAKkiB,QAAQwvC,eAAiBj3C,SAAS5D,KAAOizC,EAC5DjG,EAAOlB,EAAQwI,GAAQ,EAAMsC,IAAyB,EAAM5Z,GAC5D3xB,EAAUliB,KAAKkiB,QAGjB,GAAIurC,GAAyB,CAG3B,IADAV,GAAsBlZ,EAC0B,WAAzCtT,EAAIwsB,GAAqB,aAAsE,SAA1CxsB,EAAIwsB,GAAqB,cAA2BA,KAAwBtyC,UACtIsyC,GAAsBA,GAAoBxtC,WAExCwtC,KAAwBtyC,SAAS5D,MAAQk2C,KAAwBtyC,SAASC,iBACxEqyC,KAAwBtyC,WAAUsyC,GAAsBtK,KAC5DoB,EAAKb,KAAO+J,GAAoBtH,UAChC5B,EAAKZ,MAAQ8J,GAAoBvH,YAEjCuH,GAAsBtK,IAExB4K,GAAmCjI,EAAwB2H,GAC7D,CAEA9kB,EADAojB,EAAUF,EAAOxE,WAAU,GACNzkC,EAAQ0uC,YAAY,GACzC3oB,EAAYojB,EAASnpC,EAAQuvC,eAAe,GAC5CxpB,EAAYojB,EAASnpC,EAAQ4uC,WAAW,GACxCvwB,EAAI8qB,EAAS,aAAc,IAC3B9qB,EAAI8qB,EAAS,YAAa,IAC1B9qB,EAAI8qB,EAAS,aAAc,cAC3B9qB,EAAI8qB,EAAS,SAAU,GACvB9qB,EAAI8qB,EAAS,MAAOxH,EAAKb,KACzBziB,EAAI8qB,EAAS,OAAQxH,EAAKZ,MAC1B1iB,EAAI8qB,EAAS,QAASxH,EAAKR,OAC3B9iB,EAAI8qB,EAAS,SAAUxH,EAAKT,QAC5B7iB,EAAI8qB,EAAS,UAAW,OACxB9qB,EAAI8qB,EAAS,WAAYoC,GAA0B,WAAa,SAChEltB,EAAI8qB,EAAS,SAAU,UACvB9qB,EAAI8qB,EAAS,gBAAiB,QAC9BxG,GAASC,MAAQuG,EACjBxX,EAAUgL,YAAYwM,GAGtB9qB,EAAI8qB,EAAS,mBAAoBqB,GAAkBpwD,SAAS+uD,EAAQl0B,MAAMksB,OAAS,IAAM,KAAOsJ,GAAiBrwD,SAAS+uD,EAAQl0B,MAAMisB,QAAU,IAAM,IAC1J,CACF,EACAqR,aAAc,SAAiChxC,EAAiBqxC,GAC9D,IAAI/hD,EAAQ/S,KACRixD,EAAextC,EAAIwtC,aACnB/uC,EAAUnP,EAAMmP,QACpB+mC,EAAY,YAAajpD,KAAM,CAC7ByjB,IAAKA,IAEHohC,GAASqE,cACXlpD,KAAKk0D,WAGPjL,EAAY,aAAcjpD,MACrB6kD,GAASqE,iBACZc,GAAU/gC,EAAMkiC,IACRqK,gBAAgB,MACxBxL,GAAQhF,WAAY,EACpBgF,GAAQ7yB,MAAM,eAAiB,GAC/Bn3B,KAAKy1D,aACLxtB,EAAY+hB,GAAShqD,KAAKkiB,QAAQ2uC,aAAa,GAC/ChM,GAAS57B,MAAQ+gC,IAInBj3C,EAAM2iD,QAAU5C,IAAU,WACxB7J,EAAY,QAASl2C,GACjB8xC,GAASqE,gBACRn2C,EAAMmP,QAAQyuC,mBACjB7G,EAAOvyB,aAAayyB,GAASmB,GAE/Bp4C,EAAM0iD,aACNrJ,EAAe,CACbt/B,SAAU/Z,EACVxT,KAAM,UAEV,KACCu1D,GAAY7sB,EAAYkjB,EAAQjpC,EAAQ4uC,WAAW,GAGhDgE,GACF7H,IAAkB,EAClBl6C,EAAM4iD,QAAU/9B,YAAY7kB,EAAMkiD,iBAAkB,MAGpDxuC,EAAIhM,SAAU,UAAW1H,EAAMmhD,SAC/BztC,EAAIhM,SAAU,WAAY1H,EAAMmhD,SAChCztC,EAAIhM,SAAU,cAAe1H,EAAMmhD,SAC/BjD,IACFA,EAAa2E,cAAgB,OAC7B1zC,EAAQ8uC,SAAW9uC,EAAQ8uC,QAAQx1D,KAAKuX,EAAOk+C,EAAc9F,IAE/D1lC,EAAGhL,SAAU,OAAQ1H,GAGrBwtB,EAAI4qB,EAAQ,YAAa,kBAE3B6B,IAAsB,EACtBj6C,EAAM8iD,aAAe/C,GAAU//C,EAAM8hD,aAAal0D,KAAKoS,EAAO+hD,EAAUrxC,IACxEgC,EAAGhL,SAAU,cAAe1H,GAC5B24C,IAAQ,EACJzK,GACF1gB,EAAI9lB,SAAS5D,KAAM,cAAe,QAEtC,EAEAq5C,YAAa,SAAgCzsC,GAC3C,IAEEwuC,EACAC,EACA4D,EAOAC,EAXE/2C,EAAKhf,KAAKgf,GACZvf,EAASgkB,EAAIhkB,OAIbyiB,EAAUliB,KAAKkiB,QACfgtC,EAAQhtC,EAAQgtC,MAChBvD,EAAiB9G,GAAS+G,OAC1BoK,EAAU3J,KAAgB6C,EAC1B+G,EAAU/zC,EAAQ2K,KAClBqpC,EAAe3L,IAAeoB,EAE9B54C,EAAQ/S,KACRm2D,GAAiB,EACnB,IAAI7I,GAAJ,CAoGA,QAL2B,IAAvB7pC,EAAIiX,gBACNjX,EAAIqnC,YAAcrnC,EAAIiX,iBAExBj7B,EAASizC,EAAQjzC,EAAQyiB,EAAQ8iC,UAAWhmC,GAAI,GAChDo3C,EAAc,YACVvR,GAASqE,cAAe,OAAOiN,EACnC,GAAIhL,EAAOr5B,SAASrO,EAAIhkB,SAAWA,EAAOkpD,UAAYlpD,EAAO8oD,YAAc9oD,EAAO+oD,YAAcz1C,EAAMsjD,wBAA0B52D,EAC9H,OAAO62D,GAAU,GAGnB,GADArJ,IAAkB,EACdtB,IAAmBzpC,EAAQmuC,WAAa2F,EAAUC,IAAYH,EAAS1K,IAAatB,GACtFS,KAAgBvqD,OAASA,KAAKgrD,YAAcqB,GAAYgD,UAAUrvD,KAAM2rD,EAAgBR,EAAQ1nC,KAASyrC,EAAMI,SAAStvD,KAAM2rD,EAAgBR,EAAQ1nC,IAAO,CAI7J,GAHAsyC,EAA+C,aAApC/1D,KAAKgzD,cAAcvvC,EAAKhkB,GACnCwyD,EAAWtP,EAAQwI,GACnBiL,EAAc,iBACVvR,GAASqE,cAAe,OAAOiN,EACnC,GAAIL,EAYF,OAXA1K,EAAWtB,EACXzI,IACArhD,KAAKy1D,aACLW,EAAc,UACTvR,GAASqE,gBACRoC,GACFxB,EAAOvyB,aAAa4zB,EAAQG,IAE5BxB,EAAOjL,YAAYsM,IAGhBmL,GAAU,GAEnB,IAAIC,EAActR,EAAUjmC,EAAIkD,EAAQ8iC,WACxC,IAAKuR,GAoeX,SAAsB9yC,EAAKsyC,EAAUjpC,GACnC,IAAI0pC,EAAa7T,EAAQsC,EAAUn4B,EAAS9N,GAAI8N,EAAS5K,QAAQ8iC,YAC7DyR,EAAsB7S,EAAe92B,EAAS9N,IAC9C03C,EAAS,GACb,OAAOX,EAAWtyC,EAAImsC,QAAU6G,EAAoBtT,MAAQuT,GAAUjzC,EAAIosC,QAAU2G,EAAWtT,QAAUz/B,EAAImsC,QAAU4G,EAAWvT,KAAOx/B,EAAIosC,QAAU4G,EAAoBvT,OAASwT,GAAUjzC,EAAImsC,QAAU4G,EAAWrT,OAAS1/B,EAAIosC,QAAU2G,EAAWxT,GAC3P,CAze0B2T,CAAalzC,EAAKsyC,EAAU/1D,QAAUu2D,EAAY5N,SAAU,CAI9E,GAAI4N,IAAgBpL,EAClB,OAAOmL,GAAU,GAUnB,GANIC,GAAev3C,IAAOyE,EAAIhkB,SAC5BA,EAAS82D,GAEP92D,IACFyyD,EAAavP,EAAQljD,KAE0D,IAA7EuyD,GAAQlI,EAAQ9qC,EAAImsC,EAAQ8G,EAAUxyD,EAAQyyD,EAAYzuC,IAAOhkB,GAWnE,OAVA4hD,IACIkV,GAAeA,EAAYxC,YAE7B/0C,EAAGuY,aAAa4zB,EAAQoL,EAAYxC,aAEpC/0C,EAAG6/B,YAAYsM,GAEjBC,EAAWpsC,EAEX6J,IACOytC,GAAU,EAErB,MAAO,GAAIC,GAkcjB,SAAuB9yC,EAAKsyC,EAAUjpC,GACpC,IAAI8pC,EAAcjU,EAAQ6B,EAAS13B,EAAS9N,GAAI,EAAG8N,EAAS5K,SAAS,IACjEu0C,EAAsB7S,EAAe92B,EAAS9N,IAC9C03C,EAAS,GACb,OAAOX,EAAWtyC,EAAImsC,QAAU6G,EAAoBxT,KAAOyT,GAAUjzC,EAAIosC,QAAU+G,EAAY5T,KAAOv/B,EAAImsC,QAAUgH,EAAYzT,MAAQ1/B,EAAIosC,QAAU4G,EAAoBzT,IAAM0T,GAAUjzC,EAAIosC,QAAU+G,EAAY1T,QAAUz/B,EAAImsC,QAAUgH,EAAY3T,IAC1P,CAvcgC4T,CAAcpzC,EAAKsyC,EAAU/1D,MAAO,CAE5D,IAAIw3B,EAAagtB,EAASxlC,EAAI,EAAGkD,GAAS,GAC1C,GAAIsV,IAAe2zB,EACjB,OAAOmL,GAAU,GAInB,GADApE,EAAavP,EADbljD,EAAS+3B,IAEqE,IAA1Ew6B,GAAQlI,EAAQ9qC,EAAImsC,EAAQ8G,EAAUxyD,EAAQyyD,EAAYzuC,GAAK,GAMjE,OALA49B,IACAriC,EAAGuY,aAAa4zB,EAAQ3zB,GACxB4zB,EAAWpsC,EAEX6J,IACOytC,GAAU,EAErB,MAAO,GAAI72D,EAAO8f,aAAeP,EAAI,CACnCkzC,EAAavP,EAAQljD,GACrB,IAAI40C,EACFyiB,EAYEC,EAXFC,EAAiB7L,EAAO5rC,aAAeP,EACvCi4C,GA11Ba,SAA4BhF,EAAUC,EAAY6D,GACrE,IAAImB,EAAcnB,EAAW9D,EAAShP,KAAOgP,EAASjP,IACpDmU,EAAcpB,EAAW9D,EAAS9O,MAAQ8O,EAAS/O,OACnDkU,EAAkBrB,EAAW9D,EAAS5O,MAAQ4O,EAAS7O,OACvDiU,EAActB,EAAW7D,EAAWjP,KAAOiP,EAAWlP,IACtDsU,EAAcvB,EAAW7D,EAAW/O,MAAQ+O,EAAWhP,OACvDqU,EAAkBxB,EAAW7D,EAAW7O,MAAQ6O,EAAW9O,OAC7D,OAAO8T,IAAgBG,GAAeF,IAAgBG,GAAeJ,EAAcE,EAAkB,IAAMC,EAAcE,EAAkB,CAC7I,CAk1B2BC,CAAmBrM,EAAOxC,UAAYwC,EAAOvD,QAAUqK,EAAUxyD,EAAOkpD,UAAYlpD,EAAOmoD,QAAUsK,EAAY6D,GACpI0B,EAAQ1B,EAAW,MAAQ,OAC3B2B,EAAkBxT,EAAezkD,EAAQ,MAAO,QAAUykD,EAAeiH,EAAQ,MAAO,OACxFwM,EAAeD,EAAkBA,EAAgBjS,eAAY,EAQ/D,GAPImH,KAAentD,IACjBq3D,EAAwB5E,EAAWuF,GACnCtK,IAAwB,EACxBC,IAA0B6J,GAAmB/0C,EAAQuuC,YAAcuG,GAErE3iB,EAgbR,SAA2B5wB,EAAKhkB,EAAQyyD,EAAY6D,EAAUvF,EAAeE,EAAuBD,EAAYmH,GAC9G,IAAIC,EAAc9B,EAAWtyC,EAAIosC,QAAUpsC,EAAImsC,QAC7CkI,EAAe/B,EAAW7D,EAAW9O,OAAS8O,EAAW7O,MACzD0U,EAAWhC,EAAW7D,EAAWlP,IAAMkP,EAAWjP,KAClD+U,EAAWjC,EAAW7D,EAAWhP,OAASgP,EAAW/O,MACrD/vB,GAAS,EACX,IAAKq9B,EAEH,GAAImH,GAAgB9K,GAAqBgL,EAAetH,GAOtD,IAJKrD,KAA4C,IAAlBN,GAAsBgL,EAAcE,EAAWD,EAAepH,EAAwB,EAAImH,EAAcG,EAAWF,EAAepH,EAAwB,KAEvLvD,IAAwB,GAErBA,GAOH/5B,GAAS,OALT,GAAsB,IAAlBy5B,GAAsBgL,EAAcE,EAAWjL,GACjD+K,EAAcG,EAAWlL,GACzB,OAAQD,QAOZ,GAAIgL,EAAcE,EAAWD,GAAgB,EAAItH,GAAiB,GAAKqH,EAAcG,EAAWF,GAAgB,EAAItH,GAAiB,EACnI,OAoBR,SAA6B/wD,GAC3B,OAAI8P,EAAM47C,GAAU57C,EAAM9P,GACjB,GAEC,CAEZ,CA1Bew4D,CAAoBx4D,GAKjC,IADA2zB,EAASA,GAAUq9B,KAGboH,EAAcE,EAAWD,EAAepH,EAAwB,GAAKmH,EAAcG,EAAWF,EAAepH,EAAwB,GACvI,OAAOmH,EAAcE,EAAWD,EAAe,EAAI,GAAK,EAG5D,OAAO,CACT,CAvdoBI,CAAkBz0C,EAAKhkB,EAAQyyD,EAAY6D,EAAUkB,EAAkB,EAAI/0C,EAAQsuC,cAAgD,MAAjCtuC,EAAQwuC,sBAAgCxuC,EAAQsuC,cAAgBtuC,EAAQwuC,sBAAuBtD,GAAwBR,KAAentD,GAElO,IAAd40C,EAAiB,CAEnB,IAAI8jB,EAAY5oD,EAAM47C,GACtB,GACEgN,GAAa9jB,EACb0iB,EAAU3L,EAASxG,SAASuT,SACrBpB,IAAwC,SAA5Bx2B,EAAIw2B,EAAS,YAAyBA,IAAY1L,GACzE,CAEA,GAAkB,IAAdhX,GAAmB0iB,IAAYt3D,EACjC,OAAO62D,GAAU,GAEnB1J,GAAantD,EACbotD,GAAgBxY,EAChB,IAAI0f,EAAct0D,EAAO24D,mBACvBC,GAAQ,EAENC,EAAatG,GAAQlI,EAAQ9qC,EAAImsC,EAAQ8G,EAAUxyD,EAAQyyD,EAAYzuC,EAD3E40C,EAAsB,IAAdhkB,GAER,IAAmB,IAAfikB,EAwBF,OAvBmB,IAAfA,IAAoC,IAAhBA,IACtBD,EAAuB,IAAfC,GAEVhL,IAAU,EACVv9C,WAAW4iD,GAAW,IACtBtR,IACIgX,IAAUtE,EACZ/0C,EAAG6/B,YAAYsM,GAEf1rD,EAAO8f,WAAWgY,aAAa4zB,EAAQkN,EAAQtE,EAAct0D,GAI3Di4D,GACFpR,EAASoR,EAAiB,EAAGC,EAAeD,EAAgBjS,WAE9D2F,EAAWD,EAAO5rC,gBAGYniB,IAA1B05D,GAAwC1J,KAC1CN,GAAqBx7C,KAAK4pC,IAAI4b,EAAwBnU,EAAQljD,GAAQg4D,KAExE5uC,IACOytC,GAAU,EAErB,CACA,GAAIt3C,EAAG8S,SAASq5B,GACd,OAAOmL,GAAU,EAErB,CACA,OAAO,CA3OY,CACnB,SAASF,EAAc72D,EAAMg5D,GAC3BtP,EAAY1pD,EAAMwT,EAAOqtC,EAAe,CACtC38B,IAAKA,EACLuyC,QAASA,EACTwC,KAAMzC,EAAW,WAAa,aAC9BD,OAAQA,EACR7D,SAAUA,EACVC,WAAYA,EACZ+D,QAASA,EACTC,aAAcA,EACdz2D,OAAQA,EACR62D,UAAWA,EACXhE,OAAQ,SAAgB7yD,EAAQ44D,GAC9B,OAAOrG,GAAQlI,EAAQ9qC,EAAImsC,EAAQ8G,EAAUxyD,EAAQkjD,EAAQljD,GAASgkB,EAAK40C,EAC7E,EACAxvC,QAASA,GACR0vC,GACL,CAGA,SAASlX,IACP+U,EAAc,4BACdrjD,EAAMi0C,wBACFj0C,IAAUmjD,GACZA,EAAalP,uBAEjB,CAGA,SAASsP,EAAUmC,GAiDjB,OAhDArC,EAAc,oBAAqB,CACjCqC,UAAWA,IAETA,IAEEzC,EACFrK,EAAe8J,aAEf9J,EAAe+M,WAAW3lD,GAExBA,IAAUmjD,IAEZjuB,EAAYkjB,EAAQZ,GAAcA,GAAYroC,QAAQ0uC,WAAajF,EAAezpC,QAAQ0uC,YAAY,GACtG3oB,EAAYkjB,EAAQjpC,EAAQ0uC,YAAY,IAEtCrG,KAAgBx3C,GAASA,IAAU8xC,GAAS+G,OAC9CrB,GAAcx3C,EACLA,IAAU8xC,GAAS+G,QAAUrB,KACtCA,GAAc,MAIZ2L,IAAiBnjD,IACnBA,EAAMsjD,sBAAwB52D,GAEhCsT,EAAMy0C,YAAW,WACf4O,EAAc,6BACdrjD,EAAMsjD,sBAAwB,IAChC,IACItjD,IAAUmjD,IACZA,EAAa1O,aACb0O,EAAaG,sBAAwB,QAKrC52D,IAAW0rD,IAAWA,EAAOxC,UAAYlpD,IAAWuf,IAAOvf,EAAOkpD,YACpEiE,GAAa,MAIV1qC,EAAQivC,gBAAmB1tC,EAAIqmC,QAAUrqD,IAAWgb,WACvD0wC,EAAO5rC,WAAWqnC,GAASwJ,iBAAiB3sC,EAAIhkB,SAG/Cg5D,GAAahJ,GAA8BhsC,KAE7CvB,EAAQivC,gBAAkB1tC,EAAIwwB,iBAAmBxwB,EAAIwwB,kBAC/CkiB,GAAiB,CAC1B,CAGA,SAASttC,IACPuhC,GAAW76C,EAAM47C,GACjBb,GAAoB/6C,EAAM47C,EAAQjpC,EAAQ8iC,WAC1CoH,EAAe,CACbt/B,SAAU/Z,EACVxT,KAAM,SACN0qD,KAAMjrC,EACNorC,SAAUA,GACVE,kBAAmBA,GACnBxe,cAAeroB,GAEnB,CA8IF,EACA4yC,sBAAuB,KACvBsC,eAAgB,WACdlyC,EAAIhM,SAAU,YAAaza,KAAKw0D,cAChC/tC,EAAIhM,SAAU,YAAaza,KAAKw0D,cAChC/tC,EAAIhM,SAAU,cAAeza,KAAKw0D,cAClC/tC,EAAIhM,SAAU,WAAYg1C,IAC1BhpC,EAAIhM,SAAU,YAAag1C,IAC3BhpC,EAAIhM,SAAU,YAAag1C,GAC7B,EACAmJ,aAAc,WACZ,IAAI9E,EAAgB9zD,KAAKgf,GAAG80C,cAC5BrtC,EAAIqtC,EAAe,UAAW9zD,KAAKk0D,SACnCztC,EAAIqtC,EAAe,WAAY9zD,KAAKk0D,SACpCztC,EAAIqtC,EAAe,YAAa9zD,KAAKk0D,SACrCztC,EAAIqtC,EAAe,cAAe9zD,KAAKk0D,SACvCztC,EAAIhM,SAAU,cAAeza,KAC/B,EACAk0D,QAAS,SAA4BzwC,GACnC,IAAIzE,EAAKhf,KAAKgf,GACZkD,EAAUliB,KAAKkiB,QAGjBkoC,GAAW76C,EAAM47C,GACjBb,GAAoB/6C,EAAM47C,EAAQjpC,EAAQ8iC,WAC1CiE,EAAY,OAAQjpD,KAAM,CACxByjB,IAAKA,IAEP2nC,EAAWD,GAAUA,EAAO5rC,WAG5B6qC,GAAW76C,EAAM47C,GACjBb,GAAoB/6C,EAAM47C,EAAQjpC,EAAQ8iC,WACtCH,GAASqE,gBAIb8D,IAAsB,EACtBI,IAAyB,EACzBD,IAAwB,EACxBl1B,cAAcj4B,KAAK21D,SACnBlO,aAAaznD,KAAKu0D,iBAClBxB,GAAgB/yD,KAAK01D,SACrB3C,GAAgB/yD,KAAK61D,cAGjB71D,KAAK8xD,kBACPrrC,EAAIhM,SAAU,OAAQza,MACtBymB,EAAIzH,EAAI,YAAahf,KAAKy0D,eAE5Bz0D,KAAK24D,iBACL34D,KAAK44D,eACD3X,GACF1gB,EAAI9lB,SAAS5D,KAAM,cAAe,IAEpC0pB,EAAI4qB,EAAQ,YAAa,IACrB1nC,IACEioC,KACFjoC,EAAIqnC,YAAcrnC,EAAIiX,kBACrBxY,EAAQgvC,YAAcztC,EAAIwwB,mBAE7BoX,GAAWA,EAAQ9rC,YAAc8rC,EAAQ9rC,WAAWyY,YAAYqzB,IAC5DvB,IAAWsB,GAAYb,IAA2C,UAA5BA,GAAYS,cAEpDhB,IAAWA,GAAQzqC,YAAcyqC,GAAQzqC,WAAWyY,YAAYgyB,IAE9DmB,IACEnrD,KAAK8xD,iBACPrrC,EAAI0kC,EAAQ,UAAWnrD,MAEzB0yD,GAAkBvH,GAClBA,EAAOh0B,MAAM,eAAiB,GAI1Bu0B,KAAUsB,IACZ/kB,EAAYkjB,EAAQZ,GAAcA,GAAYroC,QAAQ0uC,WAAa5wD,KAAKkiB,QAAQ0uC,YAAY,GAE9F3oB,EAAYkjB,EAAQnrD,KAAKkiB,QAAQ2uC,aAAa,GAG9CzE,EAAe,CACbt/B,SAAU9sB,KACVT,KAAM,WACN0qD,KAAMmB,EACNhB,SAAU,KACVE,kBAAmB,KACnBxe,cAAeroB,IAEbqmC,IAAWsB,GACThB,IAAY,IAEdgC,EAAe,CACbtC,OAAQsB,EACR7rD,KAAM,MACN0qD,KAAMmB,EACNlB,OAAQJ,EACRhe,cAAeroB,IAIjB2oC,EAAe,CACbt/B,SAAU9sB,KACVT,KAAM,SACN0qD,KAAMmB,EACNtf,cAAeroB,IAIjB2oC,EAAe,CACbtC,OAAQsB,EACR7rD,KAAM,OACN0qD,KAAMmB,EACNlB,OAAQJ,EACRhe,cAAeroB,IAEjB2oC,EAAe,CACbt/B,SAAU9sB,KACVT,KAAM,OACN0qD,KAAMmB,EACNtf,cAAeroB,KAGnB8mC,IAAeA,GAAY3/B,QAEvBw/B,KAAaD,IACXC,IAAY,IAEdgC,EAAe,CACbt/B,SAAU9sB,KACVT,KAAM,SACN0qD,KAAMmB,EACNtf,cAAeroB,IAEjB2oC,EAAe,CACbt/B,SAAU9sB,KACVT,KAAM,OACN0qD,KAAMmB,EACNtf,cAAeroB,KAKnBohC,GAAS+G,SAEK,MAAZxB,KAAkC,IAAdA,KACtBA,GAAWD,GACXG,GAAoBD,IAEtB+B,EAAe,CACbt/B,SAAU9sB,KACVT,KAAM,MACN0qD,KAAMmB,EACNtf,cAAeroB,IAIjBzjB,KAAK4qB,WA3HT5qB,KAAKg1D,UAgIT,EACAA,SAAU,WACR/L,EAAY,UAAWjpD,MACvB8pD,EAASqB,EAASC,EAAWC,EAAUC,GAAStB,GAAUuB,GAAaC,GAAcc,GAASC,GAAWb,GAAQtB,GAAWE,GAAoBH,GAAWE,GAAoBuC,GAAaC,GAAgBtC,GAAc8B,GAAcxH,GAASE,QAAUF,GAASC,MAAQD,GAAS57B,MAAQ47B,GAAS+G,OAAS,KAC/S2B,GAAkBt8B,SAAQ,SAAUjS,GAClCA,EAAGu0C,SAAU,CACf,IACAhG,GAAkB1yD,OAAS2xD,GAASC,GAAS,CAC/C,EACAluC,YAAa,SAAgCkF,GAC3C,OAAQA,EAAI3iB,MACV,IAAK,OACL,IAAK,UACHd,KAAKk0D,QAAQzwC,GACb,MACF,IAAK,YACL,IAAK,WACC0nC,IACFnrD,KAAKkwD,YAAYzsC,GAmJ3B,SAAoCA,GAC9BA,EAAIwtC,eACNxtC,EAAIwtC,aAAa4H,WAAa,QAEhCp1C,EAAIqnC,YAAcrnC,EAAIiX,gBACxB,CAvJUo+B,CAAgBr1C,IAElB,MACF,IAAK,cACHA,EAAIiX,iBAGV,EAKA1I,QAAS,WAOP,IANA,IACEhT,EADEkrB,EAAQ,GAEV0a,EAAW5kD,KAAKgf,GAAG4lC,SACnBjqD,EAAI,EACJ8G,EAAImjD,EAAS/pD,OACbqnB,EAAUliB,KAAKkiB,QACVvnB,EAAI8G,EAAG9G,IAER+3C,EADJ1zB,EAAK4lC,EAASjqD,GACEunB,EAAQ8iC,UAAWhlD,KAAKgf,IAAI,IAC1CkrB,EAAMluC,KAAKgjB,EAAGupB,aAAarmB,EAAQkvC,aAAewB,GAAY5zC,IAGlE,OAAOkrB,CACT,EAKArd,KAAM,SAAcqd,EAAO6uB,GACzB,IAAIC,EAAQ,CAAC,EACXlP,EAAS9pD,KAAKgf,GAChBhf,KAAKgyB,UAAUf,SAAQ,SAAUjkB,EAAIrS,GACnC,IAAIqkB,EAAK8qC,EAAOlF,SAASjqD,GACrB+3C,EAAQ1zB,EAAIhf,KAAKkiB,QAAQ8iC,UAAW8E,GAAQ,KAC9CkP,EAAMhsD,GAAMgS,EAEhB,GAAGhf,MACH+4D,GAAgB/4D,KAAKgnD,wBACrB9c,EAAMjZ,SAAQ,SAAUjkB,GAClBgsD,EAAMhsD,KACR88C,EAAO9xB,YAAYghC,EAAMhsD,IACzB88C,EAAOjL,YAAYma,EAAMhsD,IAE7B,IACA+rD,GAAgB/4D,KAAKwnD,YACvB,EAIA58B,KAAM,WACJ,IAAI0lC,EAAQtwD,KAAKkiB,QAAQouC,MACzBA,GAASA,EAAM1nC,KAAO0nC,EAAM1nC,IAAI5oB,KAClC,EAOA0yC,QAAS,SAAmB1zB,EAAIuQ,GAC9B,OAAOmjB,EAAQ1zB,EAAIuQ,GAAYvvB,KAAKkiB,QAAQ8iC,UAAWhlD,KAAKgf,IAAI,EAClE,EAOA+pC,OAAQ,SAAgBxpD,EAAMlD,GAC5B,IAAI6lB,EAAUliB,KAAKkiB,QACnB,QAAc,IAAV7lB,EACF,OAAO6lB,EAAQ3iB,GAEf,IAAIoqD,EAAgBd,EAAcW,aAAaxpD,KAAMT,EAAMlD,GAEzD6lB,EAAQ3iB,GADmB,qBAAlBoqD,EACOA,EAEAttD,EAEL,UAATkD,GACFuvD,GAAc5sC,EAGpB,EAIA+I,QAAS,WACPg+B,EAAY,UAAWjpD,MACvB,IAAIgf,EAAKhf,KAAKgf,GACdA,EAAG4nC,GAAW,KACdngC,EAAIzH,EAAI,YAAahf,KAAK+xD,aAC1BtrC,EAAIzH,EAAI,aAAchf,KAAK+xD,aAC3BtrC,EAAIzH,EAAI,cAAehf,KAAK+xD,aACxB/xD,KAAK8xD,kBACPrrC,EAAIzH,EAAI,WAAYhf,MACpBymB,EAAIzH,EAAI,YAAahf,OAGvB0K,MAAMpP,UAAU21B,QAAQz1B,KAAKwjB,EAAGM,iBAAiB,gBAAgB,SAAUN,GACzEA,EAAGw2C,gBAAgB,YACrB,IACAx1D,KAAKk0D,UACLl0D,KAAKm0D,4BACLjH,GAAUrhC,OAAOqhC,GAAU1oD,QAAQxE,KAAKgf,IAAK,GAC7Chf,KAAKgf,GAAKA,EAAK,IACjB,EACAy2C,WAAY,WACV,IAAKjK,GAAa,CAEhB,GADAvC,EAAY,YAAajpD,MACrB6kD,GAASqE,cAAe,OAC5B3oB,EAAIypB,GAAS,UAAW,QACpBhqD,KAAKkiB,QAAQyuC,mBAAqB3G,GAAQzqC,YAC5CyqC,GAAQzqC,WAAWyY,YAAYgyB,IAEjCwB,IAAc,CAChB,CACF,EACAkN,WAAY,SAAoBnO,GAC9B,GAAgC,UAA5BA,EAAYS,aAIhB,GAAIQ,GAAa,CAEf,GADAvC,EAAY,YAAajpD,MACrB6kD,GAASqE,cAAe,OAGxBiC,EAAO5rC,YAAcuqC,GAAW9pD,KAAKkiB,QAAQgtC,MAAMM,YAE5ClE,GACTxB,EAAOvyB,aAAayyB,GAASsB,IAE7BxB,EAAOjL,YAAYmL,IAJnBF,EAAOvyB,aAAayyB,GAASmB,GAM3BnrD,KAAKkiB,QAAQgtC,MAAMM,aACrBxvD,KAAKm7B,QAAQgwB,EAAQnB,IAEvBzpB,EAAIypB,GAAS,UAAW,IACxBwB,IAAc,CAChB,OApBExrD,KAAKy1D,YAqBT,GA8IEjI,IACF/nC,EAAGhL,SAAU,aAAa,SAAUgJ,IAC7BohC,GAAS+G,QAAUoB,KAAwBvpC,EAAIqnC,YAClDrnC,EAAIiX,gBAER,IAIFmqB,GAASoU,MAAQ,CACfxzC,GAAIA,EACJgB,IAAKA,EACL8Z,IAAKA,EACLj5B,KAAMA,EACNq5B,GAAI,SAAY3hB,EAAIuQ,GAClB,QAASmjB,EAAQ1zB,EAAIuQ,EAAUvQ,GAAI,EACrC,EACAmJ,OA70DF,SAAgB+wC,EAAKhiC,GACnB,GAAIgiC,GAAOhiC,EACT,IAAK,IAAIv4B,KAAOu4B,EACVA,EAAIn7B,eAAe4C,KACrBu6D,EAAIv6D,GAAOu4B,EAAIv4B,IAIrB,OAAOu6D,CACT,EAq0DE9S,SAAUA,EACV1T,QAASA,EACTzK,YAAaA,EACbhf,MAAOA,EACP1Z,MAAOA,EACP4pD,SAAUrG,GACVsG,eAAgBrG,GAChBsG,gBAAiBvL,GACjBtJ,SAAUA,GAQZK,GAAS16C,IAAM,SAAUylB,GACvB,OAAOA,EAAQg3B,EACjB,EAMA/B,GAASiE,MAAQ,WACf,IAAK,IAAIjtC,EAAOnc,UAAU7E,OAAQqE,EAAU,IAAIwL,MAAMmR,GAAOC,EAAO,EAAGA,EAAOD,EAAMC,IAClF5c,EAAQ4c,GAAQpc,UAAUoc,GAExB5c,EAAQ,GAAGksB,cAAgB1gB,QAAOxL,EAAUA,EAAQ,IACxDA,EAAQ+xB,SAAQ,SAAU7c,GACxB,IAAKA,EAAO9Y,YAAc8Y,EAAO9Y,UAAU8vB,YACzC,KAAM,gEAAgEpwB,OAAO,CAAC,EAAEO,SAASC,KAAK4Y,IAE5FA,EAAO6kD,QAAOpU,GAASoU,MAAQ7Y,EAAeA,EAAe,CAAC,EAAGyE,GAASoU,OAAQ7kD,EAAO6kD,QAC7FpQ,EAAcC,MAAM10C,EACtB,GACF,EAOAywC,GAAS12C,OAAS,SAAU6Q,EAAIkD,GAC9B,OAAO,IAAI2iC,GAAS7lC,EAAIkD,EAC1B,EAGA2iC,GAAShwC,QA1uEK,SA4uEd,IACEykD,GACAC,GAEAC,GACAC,GACAC,GACAC,GAPEC,GAAc,GAGhBC,IAAY,EA4Gd,SAASC,KACPF,GAAY3oC,SAAQ,SAAU8oC,GAC5B9hC,cAAc8hC,EAAWC,IAC3B,IACAJ,GAAc,EAChB,CACA,SAASK,KACPhiC,cAAc0hC,GAChB,CACA,IAAII,GAAa3T,GAAS,SAAU3iC,EAAKvB,EAAS4nC,EAAQoQ,GAExD,GAAKh4C,EAAQi4C,OAAb,CACA,IAMEC,EANEl/D,GAAKuoB,EAAIisC,QAAUjsC,EAAIisC,QAAQ,GAAKjsC,GAAKmsC,QAC3CrJ,GAAK9iC,EAAIisC,QAAUjsC,EAAIisC,QAAQ,GAAKjsC,GAAKosC,QACzCwK,EAAOn4C,EAAQo4C,kBACfpd,EAAQh7B,EAAQq4C,YAChBhV,EAAc9C,IACZ+X,GAAqB,EAIrBjB,KAAiBzP,IACnByP,GAAezP,EACfgQ,KACAR,GAAWp3C,EAAQi4C,OACnBC,EAAiBl4C,EAAQu4C,UACR,IAAbnB,KACFA,GAAWjV,EAA2ByF,GAAQ,KAGlD,IAAI4Q,EAAY,EACZC,EAAgBrB,GACpB,EAAG,CACD,IAAIt6C,EAAK27C,EACP9W,EAAOlB,EAAQ3jC,GACfgkC,EAAMa,EAAKb,IACXE,EAASW,EAAKX,OACdD,EAAOY,EAAKZ,KACZE,EAAQU,EAAKV,MACbE,EAAQQ,EAAKR,MACbD,EAASS,EAAKT,OACdwX,OAAa,EACbC,OAAa,EACbjV,EAAc5mC,EAAG4mC,YACjBC,EAAe7mC,EAAG6mC,aAClBkI,EAAQxtB,EAAIvhB,GACZ87C,EAAa97C,EAAGwmC,WAChBuV,EAAa/7C,EAAGymC,UACdzmC,IAAOumC,GACTqV,EAAavX,EAAQuC,IAAoC,SAApBmI,EAAMhI,WAA4C,WAApBgI,EAAMhI,WAA8C,YAApBgI,EAAMhI,WACzG8U,EAAazX,EAASyC,IAAqC,SAApBkI,EAAM/H,WAA4C,WAApB+H,EAAM/H,WAA8C,YAApB+H,EAAM/H,aAE3G4U,EAAavX,EAAQuC,IAAoC,SAApBmI,EAAMhI,WAA4C,WAApBgI,EAAMhI,WACzE8U,EAAazX,EAASyC,IAAqC,SAApBkI,EAAM/H,WAA4C,WAApB+H,EAAM/H,YAE7E,IAAIgV,EAAKJ,IAAetpD,KAAK4pC,IAAIiI,EAAQjoD,IAAMm/D,GAAQS,EAAazX,EAAQuC,IAAgBt0C,KAAK4pC,IAAI+H,EAAO/nD,IAAMm/D,KAAUS,GACxHG,EAAKJ,IAAevpD,KAAK4pC,IAAIgI,EAASqD,IAAM8T,GAAQU,EAAa3X,EAASyC,IAAiBv0C,KAAK4pC,IAAI8H,EAAMuD,IAAM8T,KAAUU,GAC9H,IAAKnB,GAAYc,GACf,IAAK,IAAI//D,EAAI,EAAGA,GAAK+/D,EAAW//D,IACzBi/D,GAAYj/D,KACfi/D,GAAYj/D,GAAK,CAAC,GAIpBi/D,GAAYc,GAAWM,IAAMA,GAAMpB,GAAYc,GAAWO,IAAMA,GAAMrB,GAAYc,GAAW17C,KAAOA,IACtG46C,GAAYc,GAAW17C,GAAKA,EAC5B46C,GAAYc,GAAWM,GAAKA,EAC5BpB,GAAYc,GAAWO,GAAKA,EAC5BhjC,cAAc2hC,GAAYc,GAAWV,KAC3B,GAANgB,GAAiB,GAANC,IACbT,GAAqB,EAErBZ,GAAYc,GAAWV,IAAMpiC,YAAY,WAEnCsiC,GAA6B,IAAfl6D,KAAKk7D,OACrBrW,GAAS+G,OAAO4I,aAAakF,IAE/B,IAAIyB,EAAgBvB,GAAY55D,KAAKk7D,OAAOD,GAAKrB,GAAY55D,KAAKk7D,OAAOD,GAAK/d,EAAQ,EAClFke,EAAgBxB,GAAY55D,KAAKk7D,OAAOF,GAAKpB,GAAY55D,KAAKk7D,OAAOF,GAAK9d,EAAQ,EACxD,oBAAnBkd,GACoI,aAAzIA,EAAe5+D,KAAKqpD,GAASE,QAAQxlC,WAAWqnC,GAAUwU,EAAeD,EAAe13C,EAAKi2C,GAAYE,GAAY55D,KAAKk7D,OAAOl8C,KAIvIsnC,EAASsT,GAAY55D,KAAKk7D,OAAOl8C,GAAIo8C,EAAeD,EACtD,EAAEx6D,KAAK,CACLu6D,MAAOR,IACL,MAGRA,GACF,OAASx4C,EAAQm5C,cAAgBV,IAAkBpV,IAAgBoV,EAAgBtW,EAA2BsW,GAAe,KAC7Hd,GAAYW,CAjFe,CAkF7B,GAAG,IAEC96C,GAAO,SAAc1W,GACvB,IAAI8iC,EAAgB9iC,EAAK8iC,cACvBye,EAAcvhD,EAAKuhD,YACnBY,EAASniD,EAAKmiD,OACdQ,EAAiB3iD,EAAK2iD,eACtBQ,EAAwBnjD,EAAKmjD,sBAC7BN,EAAqB7iD,EAAK6iD,mBAC1BE,EAAuB/iD,EAAK+iD,qBAC9B,GAAKjgB,EAAL,CACA,IAAIwvB,EAAa/Q,GAAeoB,EAChCE,IACA,IAAIoH,EAAQnnB,EAAcyvB,gBAAkBzvB,EAAcyvB,eAAe1gE,OAASixC,EAAcyvB,eAAe,GAAKzvB,EAChHrsC,EAASgb,SAASy6C,iBAAiBjC,EAAMrD,QAASqD,EAAMpD,SAC5D9D,IACIuP,IAAeA,EAAWt8C,GAAG8S,SAASryB,KACxC0sD,EAAsB,SACtBnsD,KAAKw7D,QAAQ,CACXrQ,OAAQA,EACRZ,YAAaA,IAVS,CAa5B,EACA,SAASkR,KAAU,CA8BnB,SAASC,KAAU,CA7BnBD,GAAOngE,UAAY,CACjBqgE,WAAY,KACZC,UAAW,SAAmBC,GAC5B,IAAIxR,EAAoBwR,EAAMxR,kBAC9BrqD,KAAK27D,WAAatR,CACpB,EACAmR,QAAS,SAAiBM,GACxB,IAAI3Q,EAAS2Q,EAAM3Q,OACjBZ,EAAcuR,EAAMvR,YACtBvqD,KAAK8sB,SAASk6B,wBACVuD,GACFA,EAAYvD,wBAEd,IAAI+M,EAAcvP,EAASxkD,KAAK8sB,SAAS9N,GAAIhf,KAAK27D,WAAY37D,KAAKkiB,SAC/D6xC,EACF/zD,KAAK8sB,SAAS9N,GAAGuY,aAAa4zB,EAAQ4I,GAEtC/zD,KAAK8sB,SAAS9N,GAAG6/B,YAAYsM,GAE/BnrD,KAAK8sB,SAAS06B,aACV+C,GACFA,EAAY/C,YAEhB,EACA9nC,KAAMA,IAER7f,EAAS47D,GAAQ,CACfzS,WAAY,kBAGd0S,GAAOpgE,UAAY,CACjBkgE,QAAS,SAAiBO,GACxB,IAAI5Q,EAAS4Q,EAAM5Q,OAEf6Q,EADYD,EAAMxR,aACcvqD,KAAK8sB,SACzCkvC,EAAehV,wBACfmE,EAAO5rC,YAAc4rC,EAAO5rC,WAAWyY,YAAYmzB,GACnD6Q,EAAexU,YACjB,EACA9nC,KAAMA,IAER7f,EAAS67D,GAAQ,CACf1S,WAAY,kBAypBdnE,GAASiE,MAAM,IAh6Bf,WACE,SAASmT,IAUP,IAAK,IAAIzhE,KATTwF,KAAK2oB,SAAW,CACdwxC,QAAQ,EACR+B,yBAAyB,EACzB5B,kBAAmB,GACnBC,YAAa,GACbc,cAAc,GAIDr7D,KACQ,MAAjBxF,EAAGuH,OAAO,IAAkC,oBAAb/B,KAAKxF,KACtCwF,KAAKxF,GAAMwF,KAAKxF,GAAImG,KAAKX,MAG/B,CAkFA,OAjFAi8D,EAAW3gE,UAAY,CACrBmwD,YAAa,SAAqBziD,GAChC,IAAI8iC,EAAgB9iC,EAAK8iC,cACrB9rC,KAAK8sB,SAASglC,gBAChBrsC,EAAGhL,SAAU,WAAYza,KAAKm8D,mBAE1Bn8D,KAAKkiB,QAAQ2vC,eACfpsC,EAAGhL,SAAU,cAAeza,KAAKo8D,2BACxBtwB,EAAc4jB,QACvBjqC,EAAGhL,SAAU,YAAaza,KAAKo8D,2BAE/B32C,EAAGhL,SAAU,YAAaza,KAAKo8D,0BAGrC,EACAC,kBAAmB,SAA2BR,GAC5C,IAAI/vB,EAAgB+vB,EAAM/vB,cAErB9rC,KAAKkiB,QAAQo6C,gBAAmBxwB,EAAcge,QACjD9pD,KAAKm8D,kBAAkBrwB,EAE3B,EACApsB,KAAM,WACA1f,KAAK8sB,SAASglC,gBAChBrrC,EAAIhM,SAAU,WAAYza,KAAKm8D,oBAE/B11C,EAAIhM,SAAU,cAAeza,KAAKo8D,2BAClC31C,EAAIhM,SAAU,YAAaza,KAAKo8D,2BAChC31C,EAAIhM,SAAU,YAAaza,KAAKo8D,4BAElCnC,KACAH,KAz5DJrS,aAAa9F,GACbA,OAAmB,CA05DjB,EACA4a,QAAS,WACP7C,GAAaH,GAAeD,GAAWO,GAAYF,GAA6BH,GAAkBC,GAAkB,KACpHG,GAAY/+D,OAAS,CACvB,EACAuhE,0BAA2B,SAAmC34C,GAC5DzjB,KAAKm8D,kBAAkB14C,GAAK,EAC9B,EACA04C,kBAAmB,SAA2B14C,EAAKqxC,GACjD,IAAI/hD,EAAQ/S,KACR9E,GAAKuoB,EAAIisC,QAAUjsC,EAAIisC,QAAQ,GAAKjsC,GAAKmsC,QAC3CrJ,GAAK9iC,EAAIisC,QAAUjsC,EAAIisC,QAAQ,GAAKjsC,GAAKosC,QACzCntB,EAAOjoB,SAASy6C,iBAAiBh6D,EAAGqrD,GAOtC,GANAmT,GAAaj2C,EAMTqxC,GAAY90D,KAAKkiB,QAAQg6C,yBAA2Bnb,GAAQD,GAAcG,EAAQ,CACpF8Y,GAAWt2C,EAAKzjB,KAAKkiB,QAASwgB,EAAMoyB,GAGpC,IAAI0H,EAAiBnY,EAA2B3hB,GAAM,IAClDm3B,IAAeF,IAA8Bz+D,IAAMs+D,IAAmBjT,IAAMkT,KAC9EE,IAA8BM,KAE9BN,GAA6B/hC,aAAY,WACvC,IAAI6kC,EAAUpY,EAA2B5pC,SAASy6C,iBAAiBh6D,EAAGqrD,IAAI,GACtEkW,IAAYD,IACdA,EAAiBC,EACjB3C,MAEFC,GAAWt2C,EAAK1Q,EAAMmP,QAASu6C,EAAS3H,EAC1C,GAAG,IACH0E,GAAkBt+D,EAClBu+D,GAAkBlT,EAEtB,KAAO,CAEL,IAAKvmD,KAAKkiB,QAAQm5C,cAAgBhX,EAA2B3hB,GAAM,KAAU+f,IAE3E,YADAqX,KAGFC,GAAWt2C,EAAKzjB,KAAKkiB,QAASmiC,EAA2B3hB,GAAM,IAAQ,EACzE,CACF,GAEK7iC,EAASo8D,EAAY,CAC1BjT,WAAY,SACZJ,qBAAqB,GAEzB,GA2zBA/D,GAASiE,MAAM4S,GAAQD,IAEvB,4BCzxGA,OAmBA,KACC,EAAEr6D,EAAMC,KACP,GAAqCnH,EAAOC,QAE3C,OAAOD,EAAOC,QAAUkH,SAKvB,KAFU,GAAF,IACAD,EAAKs7D,OAASr7D,KACtB,QAFM,OAEN,YAKF,EAbD,CAaGrB,MAAM,KAER,IAAI08D,EAAS,CAEZC,eAAgB,CAAC,EACjBC,cAAe,IACfC,kBAAmB,EACnBC,qBAAsB,IACtBC,uBAAuB,EACvBC,qBAAqB,EACrBC,gBAAiB,oBACjBC,qBAAsB,GACtBC,kBAAmB,GACnBC,oBAAqB,GAErBC,mBAAqBC,IACpB,IAAI1tC,EAAUnV,SAASgkC,eAAe6e,GAClC1tC,IACHA,EAAQnR,iBAAiB,aAAa,KACrCi+C,EAAOa,WAAWD,EAAU,IAE7B1tC,EAAQnR,iBAAiB,aAAa,KACrCi+C,EAAOa,WAAWD,EAAU,IAE7B1tC,EAAQnR,iBAAiB,cAAc,KACtCi+C,EAAOc,UAAUF,EAAU,IAE5B1tC,EAAQnR,iBAAiB,YAAY,KACpCi+C,EAAOa,WAAWD,EAAU,IAE7B1tC,EAAQnR,iBAAiB,SAAS,KACjCi+C,EAAOa,WAAWD,EAAU,IAE9B,EAGDG,0BAA4BH,IAC3B,IAAItiD,EAAO0hD,EAAOgB,uBAAuBJ,GACzC,OAAItiD,GAGI,CACR,EAMDuiD,WAAY,CAACI,EAAUC,KAKtB,GAJKD,IACJA,EAAWjB,EAAOO,sBAGqB7/D,IAApCs/D,EAAOC,eAAegB,GACzBjB,EAAOC,eAAegB,GAAY,OAC5B,CACN,IAAIE,EAAenB,EAAOC,eAAegB,GACrCG,EAAuBD,EAAaA,EAAahjE,OAAS,GAC9D,QAA6BuC,IAAzB0gE,QAAwE1gE,IAAlC0gE,EAAqBC,SAE9D,MAEF,CACArB,EAAOC,eAAegB,GAAU3hE,KAAK,CACpC,UAAa4hE,GAAa,IAAI58D,KAC9B,cAAY5D,GACX,EAGH4gE,cAAe,KACd,IAAIC,EAAY5iE,OAAOmqB,KAAKk3C,EAAOC,gBACnC,IAAK,IAAIhiE,EAAI,EAAGA,EAAIsjE,EAAUpjE,OAAQF,IACrC+hE,EAAOc,UAAUS,EAAUtjE,GAC5B,EAMD6iE,UAAW,CAACG,EAAUI,KAChBJ,IACJA,EAAWjB,EAAOO,iBAEnB,IAAIY,EAAenB,EAAOC,eAAegB,QACpBvgE,IAAjBygE,GAAsD,IAAxBA,EAAahjE,aAIQuC,IAAnDygE,EAAaA,EAAahjE,OAAS,GAAGkjE,WACzCF,EAAaA,EAAahjE,OAAS,GAAGkjE,SAAWA,GAAY,IAAI/8D,KAClE,EAGDk9D,8BAA+B,IACvBxB,EAAOgB,uBAAuBhB,EAAOO,iBAG7CS,uBAAyBC,IACxB,IAAIQ,EAAWzB,EAAO0B,4BAA4BT,GAClD,YAAiBvgE,IAAb+gE,OACH,EAEOA,EAAW,GACnB,EAGDE,mCAAoC,IAC5B3B,EAAO0B,4BAA4B1B,EAAOO,iBAGlDmB,4BAA8BT,IAE7B,IAAIW,EAAkB,EAElBT,EAAenB,EAAOC,eAAegB,GACzC,QAAqBvgE,IAAjBygE,EAEH,OAGD,IAAIU,EAA2B,EAC/B,IAAK,IAAI5jE,EAAI,EAAGA,EAAIkjE,EAAahjE,OAAQF,IAAK,CAC7C,IAAIijE,EAAYC,EAAaljE,GAAGijE,UAC5BG,EAAWF,EAAaljE,GAAGojE,cACd3gE,IAAb2gE,IACHA,EAAW,IAAI/8D,MAGhBu9D,GADiBR,EAAWH,CAE7B,CAGA,OADAU,EAAkBh7D,OAAOi7D,GAClBD,CAAe,EAGvBE,2BAA4B,KAC3B,IAAIC,EAAW,GACXR,EAAY5iE,OAAOmqB,KAAKk3C,EAAOC,gBACnC,IAAK,IAAIhiE,EAAI,EAAGA,EAAIsjE,EAAUpjE,OAAQF,IAAK,CAC1C,IAAIgjE,EAAWM,EAAUtjE,GACrB+jE,EAAahC,EAAOgB,uBAAuBC,GAC/Cc,EAASziE,KAAK,CACb,SAAY2hE,EACZ,WAAce,GAEhB,CACA,OAAOD,CAAQ,EAGhBE,yBAA2BnmD,IAC1B,IAAIomD,EAAgBj9D,WAAW6W,GAC/B,IAA6B,IAAzB9W,MAAMk9D,GAGT,KAAM,CACLr/D,KAAM,2BACNtC,QAAS,6BAA+Bub,EAAW,mBAJpDkkD,EAAOE,cAA2B,IAAXpkD,CAMxB,EAGDqmD,mBAAqBlB,IACpBjB,EAAOO,gBAAkBU,CAAQ,EAGlCmB,sBAAwBnB,WAChBjB,EAAOC,eAAegB,EAAS,EAGvCoB,0BAA2B,KAC1B,IAAId,EAAY5iE,OAAOmqB,KAAKk3C,EAAOC,gBACnC,IAAK,IAAIhiE,EAAI,EAAGA,EAAIsjE,EAAUpjE,OAAQF,IACrC+hE,EAAOoC,sBAAsBb,EAAUtjE,GACxC,EAEDqkE,qBAAsB,KACjBtC,EAAOM,qBACVN,EAAOuC,yBAERvC,EAAOwC,oBAAoB,EAE5BA,mBAAoB,KACnBxC,EAAOM,qBAAsB,EAC7BN,EAAOG,kBAAoB,CAAC,EAG7BsC,mBAAoB,CAAC75C,EAAU85C,KAC9B1C,EAAOS,kBAAkBnhE,KAAK,CAC7BspB,SAAUA,EACV85C,sBAAuBA,GACvB,EAGFC,oBAAqB,CAAC/5C,EAAU85C,KAC/B1C,EAAOU,oBAAoBphE,KAAK,CAC/BspB,SAAUA,EACV85C,sBAAuBA,GACvB,EAGFH,uBAAwB,KACvB,IAAKvC,EAAOK,sBAAuB,CAClCL,EAAOK,uBAAwB,EAC/BL,EAAOwC,qBACP,IAAK,IAAIvkE,EAAI,EAAGA,EAAI+hE,EAAOU,oBAAoBviE,OAAQF,IAAK,CAC3D,IAAI2kE,EAAuB5C,EAAOU,oBAAoBziE,GAClD4kE,EAAcD,EAAqBF,uBACnC19D,MAAM69D,SAAiCniE,IAAhBmiE,GAA8BA,EAAc,KACtED,EAAqBF,uBAAyB,EAC9CE,EAAqBh6C,WAEvB,CACD,CACAo3C,EAAOa,YAAY,EAMpBiC,iCAAkC,KACjC,GAAI9C,EAAOK,sBAAuB,CACjCL,EAAOK,uBAAwB,EAC/B,IAAK,IAAIpiE,EAAI,EAAGA,EAAI+hE,EAAOS,kBAAkBtiE,OAAQF,IAAK,CACzD,IAAI8kE,EAAsB/C,EAAOS,kBAAkBxiE,GAC/C4kE,EAAcE,EAAoBL,uBAClC19D,MAAM69D,SAAiCniE,IAAhBmiE,GAA8BA,EAAc,KACtEE,EAAoBL,uBAAyB,EAC7CK,EAAoBn6C,WAEtB,CACD,CACAo3C,EAAOsB,eAAe,EAGvB0B,8BAA+B,CAACC,EAAer6C,KAC9Co3C,EAAOQ,qBAAqBlhE,KAAK,CAChC2jE,cAAeA,EACfr6C,SAAUA,EACV25B,SAAS,GACR,EAGH2gB,eAAgB,KACf,IAAK,IAAIjlE,EAAI,EAAGA,EAAI+hE,EAAOQ,qBAAqBriE,OAAQF,IACnD+hE,EAAOQ,qBAAqBviE,GAAGskD,SAAWyd,EAAOwB,gCAAkCxB,EAAOQ,qBAAqBviE,GAAGglE,gBACrHjD,EAAOQ,qBAAqBviE,GAAG2qB,WAC/Bo3C,EAAOQ,qBAAqBviE,GAAGskD,SAAU,IAGR,IAA/Byd,EAAOM,qBAAiCN,EAAOG,kBAAoBH,EAAOE,eAC7EF,EAAOM,qBAAsB,EAC7BN,EAAO8C,oCAEP9C,EAAOG,mBAAqBH,EAAOI,oBACpC,EAGD+C,+BAA2BziE,EAC3B0iE,oBAAgB1iE,EAEhB2iE,0BAA2B,CAACC,EAAyBC,KAEhDD,GACHtD,EAAOwD,qCAGJD,GACHvD,EAAOyD,mBACR,EAIDD,mCAAoC,KACJ,qBAApBzlD,SAAS+wB,QACnBkxB,EAAOoD,eAAiB,SACxBpD,EAAOmD,0BAA4B,oBACK,qBAAvBplD,SAAS2lD,WAC1B1D,EAAOoD,eAAiB,YACxBpD,EAAOmD,0BAA4B,uBACI,qBAAtBplD,SAAS4lD,UAC1B3D,EAAOoD,eAAiB,WACxBpD,EAAOmD,0BAA4B,sBACQ,qBAA1BplD,SAAS6lD,eAC1B5D,EAAOoD,eAAiB,eACxBpD,EAAOmD,0BAA4B,0BAGpCplD,SAASgE,iBAAiBi+C,EAAOmD,2BAA2B,KACvDplD,SAASiiD,EAAOoD,gBACnBpD,EAAO8C,mCAEP9C,EAAOuC,wBACR,IACE,GAEH/+D,OAAOue,iBAAiB,QAAQ,KAC/Bi+C,EAAO8C,kCAAkC,IAG1Ct/D,OAAOue,iBAAiB,SAAS,KAChCi+C,EAAOuC,wBAAwB,GAC9B,EAGHkB,kBAAmB,KAClB1lD,SAASgE,iBAAiB,aAAa,KAAQi+C,EAAOsC,sBAAsB,IAC5EvkD,SAASgE,iBAAiB,SAAS,KAAQi+C,EAAOsC,sBAAsB,IACxEvkD,SAASgE,iBAAiB,cAAc,KAAQi+C,EAAOsC,sBAAsB,IAC7E9+D,OAAOue,iBAAiB,UAAU,KAAQi+C,EAAOsC,sBAAsB,IAEvEpnC,aAAY,MACwB,IAA/B8kC,EAAOM,qBACVN,EAAOkD,gBACR,GACElD,EAAOI,qBAAqB,EAGhCyD,eAAWnjE,EAEXojE,mBAAepjE,EAEfqjE,eAAiBC,IAChB,GAAIxgE,OAAOygE,WAAaD,EAAkB,CACzC,IAAIF,EAAgBE,EAAiBF,cACrC,IACC9D,EAAO6D,UAAY,IAAII,UAAUH,GACjCtgE,OAAO0gE,eAAiB,KACvBlE,EAAOmE,gBAAgBH,EAAiBI,MAAM,EAE/CpE,EAAO6D,UAAUQ,OAAS,KACzBrE,EAAOsE,kBAAkBN,EAAiBI,MAAM,EAEjDpE,EAAO6D,UAAUtpD,QAAWnT,IACvBzD,SACHA,QAAQI,IAAI,2CAA6CqD,EAC1D,EAED44D,EAAO6D,UAAUU,UAAa1yD,IACzBlO,SACHA,QAAQI,IAAI8N,EAAMjI,KACnB,CAEF,CAAE,MAAOxC,GACJzD,SACHA,QAAQyD,MAAM,+CAAiDA,EAEjE,CACD,GAGDo9D,cAAgB56D,IACfo2D,EAAO6D,UAAUnpD,KAAKzQ,KAAKC,UAAUN,GAAM,EAG5Cu6D,gBAAkBC,IACjB,IACIx6D,EAAO,CACVxF,KAAM,cACNggE,MAAOA,EACPK,aAJqBzE,EAAO2B,qCAK5BV,SAAUjB,EAAOO,iBAElBP,EAAOwE,cAAc56D,EAAK,EAE3B06D,kBAAoBF,IACnB,IAAIx6D,EAAO,CACVxF,KAAM,OACNggE,MAAOA,GAERpE,EAAOwE,cAAc56D,EAAK,EAG3BwiB,WAAa5G,IAEZ,IAEIw+C,EACAU,EAHAC,EAAuB3E,EAAOE,eAAiB,GAC/CK,EAAkBP,EAAOO,iBAAmB,oBAG5C+C,GAA0B,EAC1BC,GAAwB,EAExB/9C,IACHm/C,EAAuBn/C,EAAQm/C,sBAAwBA,EACvDpE,EAAkB/6C,EAAQ+6C,iBAAmBA,EAC7CyD,EAAmBx+C,EAAQw+C,iBAC3BU,EAAmBl/C,EAAQk/C,kBAEa,IAApCl/C,EAAQ89C,0BACXA,GAA0B,IAEW,IAAlC99C,EAAQ+9C,wBACXA,GAAwB,IAI1BvD,EAAOiC,yBAAyB0C,GAChC3E,EAAOmC,mBAAmB5B,GAC1BP,EAAO+D,eAAeC,GACtBhE,EAAOqD,0BAA0BC,EAAyBC,GAI1DvD,EAAOa,gBAAWngE,EAAWgkE,EAAiB,GAGhD,OAAO1E,CAAM,GAEd,GAAElhE,KAAKwE,4BCxbR,SAcC,SAAUoB,EAAMC,GACf,aAEkCnH,EAAOC,QAEvCD,EAAOC,QAAUkH,SAGH,2BAAd,KAAc,iCAKlB,CAbA,CAaErB,GAAM,SAAUoB,GAChB,aAWA,IAAIkgE,EAAQlgE,GAAQA,EAAKmgE,KA6IzB,MAAO,CACLC,KA5IF,SAA0BC,GAWxB,IA6BI1+B,EAeA2+B,EA3CAC,EADWF,EAAQ35D,cACClD,MAAM,KAC1B/J,EAAS8mE,EAAS9mE,OAClB+mE,EAAQ,EA2BZ,IAxBoB,KAAhBD,EAAS,IAA6B,KAAhBA,EAAS,IAA6B,KAAhBA,EAAS,IAGvDA,EAASx7D,QACTw7D,EAASx7D,SACgB,KAAhBw7D,EAAS,IAA6B,KAAhBA,EAAS,GAGxCA,EAASx7D,QACyB,KAAzBw7D,EAAS9mE,EAAS,IAAsC,KAAzB8mE,EAAS9mE,EAAS,IAE1D8mE,EAASv8D,OAMgC,IAAvCu8D,GAHJ9mE,EAAS8mE,EAAS9mE,QAGI,GAAG2J,QAAQ,OAE/Bo9D,EAAQ,GAKL7+B,EAAM,EAAGA,EAAMloC,GACI,KAAlB8mE,EAAS5+B,GADaA,KAM5B,GAAIA,EAAM6+B,EAER,IADAD,EAAS91C,OAAOkX,EAAK,EAAG,QACjB4+B,EAAS9mE,OAAS+mE,GACvBD,EAAS91C,OAAOkX,EAAK,EAAG,QAM5B,IAAK,IAAIpoC,EAAI,EAAGA,EAAIinE,EAAOjnE,IAAK,CAC9B+mE,EAAYC,EAAShnE,GAAGiK,MAAM,IAC9B,IAAK,IAAIvB,EAAI,EAAGA,EAAI,IACG,MAAjBq+D,EAAU,IAAcA,EAAU7mE,OAAS,GADzBwI,IAEpBq+D,EAAU71C,OAAO,EAAE,GAMvB81C,EAAShnE,GAAK+mE,EAAUnjE,KAAK,GAC/B,CAGA,IAAIijE,GAAQ,EACRK,EAAQ,EACRC,EAAW,EACXj4C,GAAW,EACXk4C,GAAW,EAGf,IAAKpnE,EAAI,EAAGA,EAAIinE,EAAOjnE,IACjBonE,EACkB,MAAhBJ,EAAShnE,GACXmnE,GAAY,GAEZC,GAAW,EACPD,EAAWD,IACbL,EAAO33C,EACPg4C,EAAQC,IAIQ,MAAhBH,EAAShnE,KACXonE,GAAW,EACXl4C,EAAUlvB,EACVmnE,EAAW,GAKbA,EAAWD,IACbL,EAAO33C,EACPg4C,EAAQC,GAGND,EAAQ,GACVF,EAAS91C,OAAO21C,EAAMK,EAAO,IAG/BhnE,EAAS8mE,EAAS9mE,OAGlB,IAAIiB,EAAS,GAKb,IAJoB,KAAhB6lE,EAAS,KACX7lE,EAAS,KAGNnB,EAAI,EAAGA,EAAIE,IACdiB,GAAU6lE,EAAShnE,GACfA,IAAME,EAAS,GAFGF,IAMtBmB,GAAU,IAOZ,MAJ6B,KAAzB6lE,EAAS9mE,EAAS,KACpBiB,GAAU,KAGLA,CACT,EAaEgpB,WAXF,WAME,OAJI1jB,EAAKmgE,OAASvhE,OAChBoB,EAAKmgE,KAAOD,GAGPthE,IACT,EAMF,0BCxLA,SAcC,SAAUoB,EAAMC,GACf,aAEkCnH,EAAOC,QAEvCD,EAAOC,QAAUkH,SAGH,2BAAd,KAAc,iCAKlB,CAbA,CAaErB,GAAM,SAAUoB,GAChB,aAGA,IAAI4gE,EAAsB5gE,GAAQA,EAAK6gE,mBAEnCC,EAAM,CAQR1f,KAAM,CACJ,GAAK,wBACL,GAAK,uCACL,GAAK,wBACL,GAAK,4BACL,GAAK,sBACL,GAAK,wCACL,GAAK,gBACL,GAAK,qCACL,GAAK,2DACL,GAAK,6CACL,GAAK,oCACL,GAAK,wBACL,GAAK,uCACL,GAAK,gQACL,GAAK,wBACL,GAAK,mBACL,GAAK,8CACL,GAAK,oCACL,GAAK,+HACL,GAAK,gCACL,GAAK,2BACL,GAAK,oEACL,GAAK,4CACL,GAAK,qCACL,GAAK,6CACL,GAAK,yCACL,GAAK,0CACL,GAAK,wBACL,GAAK,sCACL,GAAK,yCACL,GAAK,0BACL,GAAK,sCACL,GAAK,eACL,GAAK,wBACL,GAAK,uBACL,GAAK,4BACL,GAAK,gCACL,GAAK,wBACL,GAAK,4BACL,GAAK,yLACL,GAAK,gCACL,GAAK,mCACL,GAAK,2DACL,GAAK,8BACL,GAAK,sCACL,GAAK,YACL,GAAK,eACL,GAAK,qCACL,GAAK,+BACL,GAAK,mCACL,GAAK,gCACL,GAAK,4CACL,GAAK,wFACL,GAAK,oBACL,GAAK,0KACL,GAAK,wBACL,GAAK,wBACL,GAAK,4BACL,GAAK,wBACL,GAAK,+DACL,GAAK,wBACL,GAAK,wCACL,GAAK,uCACL,GAAK,8BACL,GAAK,YACL,GAAK,mCACL,GAAK,mCACL,GAAK,qCACL,GAAK,+BACL,GAAK,gBACL,GAAK,wBACL,GAAK,wBACL,GAAK,mEACL,GAAK,8CACL,GAAK,wBACL,GAAK,qCACL,GAAK,mDACL,GAAK,8CACL,GAAK,sCACL,GAAK,4BACL,GAAK,iCACL,GAAK,yDACL,GAAK,oCACL,GAAK,kCACL,GAAK,wDACL,GAAK,oLACL,GAAK,2DACL,GAAK,gCACL,GAAK,yBACL,GAAK,mDACL,GAAK,yBACL,GAAK,wBACL,GAAK,wBACL,GAAK,+BACL,GAAK,wBACL,GAAK,0EACL,GAAK,wBACL,GAAK,cACL,GAAK,+EACL,GAAK,+FACL,GAAK,+CACL,GAAK,6BACL,GAAK,sBACL,GAAK,WACL,GAAK,2EACL,GAAK,+CACL,GAAK,sCACL,GAAK,4BACL,GAAK,4BACL,GAAK,iBACL,GAAK,+wBACL,GAAK,uCACL,GAAK,oCACL,GAAK,oCACL,GAAK,8EACL,GAAK,gCACL,GAAK,oCACL,GAAK,iCACL,GAAK,0BACL,GAAK,oEACL,GAAK,uGACL,GAAK,mBACL,GAAK,8UACL,GAAK,0BACL,GAAK,iKACL,GAAK,yBACL,GAAK,4BACL,GAAK,wCACL,GAAK,uBACL,GAAK,wDACL,GAAK,kCACL,GAAK,sBACL,GAAK,8IACL,GAAK,kCAEL,IAAO,6DACP,IAAO,eACP,IAAO,KACP,GAAM,QAORn5B,IAAK,SAAS84C,GACZ,IAAIC,EAAYD,EAAO1vC,YAAY,KACnC,GAAI2vC,GAAa,GAAKA,GAAcD,EAAOtnE,OAAO,EAChD,OAAO,EAET,IAAIwnE,EAAYF,EAAO1vC,YAAY,IAAK2vC,EAAU,GAClD,GAAIC,GAAa,GAAKA,GAAcD,EAAU,EAC5C,OAAO,EAET,IAAIE,EAAUJ,EAAI1f,KAAK2f,EAAOj9D,MAAMk9D,EAAU,IAC9C,QAAKE,GAGEA,EAAQ99D,QAAQ,IAAM29D,EAAOj9D,MAAMm9D,EAAU,EAAGD,GAAa,MAAQ,CAC9E,EACAzhC,GAAI,SAASwhC,GACX,IAAIC,EAAYD,EAAO1vC,YAAY,KACnC,GAAI2vC,GAAa,GAAKA,GAAcD,EAAOtnE,OAAO,EAChD,OAAO,EAGT,GADgBsnE,EAAO1vC,YAAY,IAAK2vC,EAAU,IACjC,EACf,OAAO,EAET,IAAIE,EAAUJ,EAAI1f,KAAK2f,EAAOj9D,MAAMk9D,EAAU,IAC9C,QAAKE,GAGEA,EAAQ99D,QAAQ,IAAM29D,EAAOj9D,MAAM,EAAGk9D,GAAa,MAAQ,CACpE,EACAj4D,IAAK,SAASg4D,GACZ,IAAIC,EAAYD,EAAO1vC,YAAY,KACnC,GAAI2vC,GAAa,GAAKA,GAAcD,EAAOtnE,OAAO,EAChD,OAAO,KAET,IAAIwnE,EAAYF,EAAO1vC,YAAY,IAAK2vC,EAAU,GAClD,GAAIC,GAAa,GAAKA,GAAcD,EAAU,EAC5C,OAAO,KAET,IAAIE,EAAUJ,EAAI1f,KAAK2f,EAAOj9D,MAAMk9D,EAAU,IAC9C,OAAKE,EAGDA,EAAQ99D,QAAQ,IAAM29D,EAAOj9D,MAAMm9D,EAAU,EAAGD,GAAa,KAAO,EAC/D,KAEFD,EAAOj9D,MAAMm9D,EAAU,GALrB,IAMX,EACAv9C,WAAY,WAIV,OAHI1jB,EAAK6gE,qBAAuBjiE,OAC9BoB,EAAK6gE,mBAAqBD,GAErBhiE,IACT,GAGF,OAAOkiE,CACT,0BCpPA,WAYC,SAAU9gE,EAAMC,GACf,aAEkCnH,EAAOC,QAEvCD,EAAOC,QAAUkH,EAAQ,EAAQ,MAAe,EAAQ,MAAW,EAAQ,QAG3E,EAAO,CAAC,QAAc,QAAU,cAAgC,2BAAP,EAAF,GAAS,+BAKpE,CAbA,CAaErB,GAAM,SAAUuiE,EAAUhB,EAAMW,EAAK9gE,GACrC,aAMA,IAAIohE,EAAOphE,GAAQA,EAAKqhE,IAExB,SAASA,EAAI9rD,EAAKvF,GAChB,IAAIsxD,EAAehjE,UAAU7E,QAAU,EAIvC,KAAMmF,gBAAgByiE,GACpB,OAAIC,EAJchjE,UAAU7E,QAAU,EAM3B,IAAI4nE,EAAI9rD,EAAKvF,GAGf,IAAIqxD,EAAI9rD,GAGV,IAAI8rD,EAGb,QAAYrlE,IAARuZ,EAAmB,CACrB,GAAI+rD,EACF,MAAM,IAAI9/D,UAAU,6CAIpB+T,EADsB,qBAAbxW,SACHA,SAASgb,KAAO,GAEhB,EAEV,CAEA,GAAY,OAARxE,GACE+rD,EACF,MAAM,IAAI9/D,UAAU,wCAOxB,OAHA5C,KAAKmb,KAAKxE,QAGGvZ,IAATgU,EACKpR,KAAK2iE,WAAWvxD,GAGlBpR,IACT,CAMAyiE,EAAI5tD,QAAU,UAEd,IAAI1V,EAAIsjE,EAAInnE,UACRsnE,EAASvnE,OAAOC,UAAUS,eAE9B,SAAS8mE,EAAYtjC,GAEnB,OAAOA,EAAO56B,QAAQ,6BAA8B,OACtD,CAEA,SAASu6B,EAAQ7iC,GAEf,YAAce,IAAVf,EACK,YAGFkH,OAAOlI,OAAOC,UAAUC,SAASC,KAAKa,IAAQ6I,MAAM,GAAI,EACjE,CAEA,SAASinB,EAAQ/wB,GACf,MAAwB,UAAjB8jC,EAAQ9jC,EACjB,CAEA,SAAS0nE,EAAkBx8D,EAAMjK,GAC/B,IACI1B,EAAGE,EADHkoE,EAAS,CAAC,EAGd,GAAuB,WAAnB7jC,EAAQ7iC,GACV0mE,EAAS,UACJ,GAAI52C,EAAQ9vB,GACjB,IAAK1B,EAAI,EAAGE,EAASwB,EAAMxB,OAAQF,EAAIE,EAAQF,IAC7CooE,EAAO1mE,EAAM1B,KAAM,OAGrBooE,EAAO1mE,IAAS,EAGlB,IAAK1B,EAAI,EAAGE,EAASyL,EAAKzL,OAAQF,EAAIE,EAAQF,IAAK,EAEpCooE,QAA8B3lE,IAApB2lE,EAAOz8D,EAAK3L,MAC7BooE,GAAU1mE,EAAM4C,KAAKqH,EAAK3L,OAG9B2L,EAAKulB,OAAOlxB,EAAG,GACfE,IACAF,IAEJ,CAEA,OAAO2L,CACT,CAEA,SAAS08D,EAAcxgB,EAAMnmD,GAC3B,IAAI1B,EAAGE,EAGP,GAAIsxB,EAAQ9vB,GAAQ,CAElB,IAAK1B,EAAI,EAAGE,EAASwB,EAAMxB,OAAQF,EAAIE,EAAQF,IAC7C,IAAKqoE,EAAcxgB,EAAMnmD,EAAM1B,IAC7B,OAAO,EAIX,OAAO,CACT,CAEA,IAAIsoE,EAAQ/jC,EAAQ7iC,GACpB,IAAK1B,EAAI,EAAGE,EAAS2nD,EAAK3nD,OAAQF,EAAIE,EAAQF,IAC5C,GAAc,WAAVsoE,GACF,GAAuB,kBAAZzgB,EAAK7nD,IAAmB6nD,EAAK7nD,GAAGuJ,MAAM7H,GAC/C,OAAO,OAEJ,GAAImmD,EAAK7nD,KAAO0B,EACrB,OAAO,EAIX,OAAO,CACT,CAEA,SAAS6mE,EAAY3uB,EAAK4uB,GACxB,IAAKh3C,EAAQooB,KAASpoB,EAAQg3C,GAC5B,OAAO,EAIT,GAAI5uB,EAAI15C,SAAWsoE,EAAItoE,OACrB,OAAO,EAGT05C,EAAI1nB,OACJs2C,EAAIt2C,OAEJ,IAAK,IAAIlyB,EAAI,EAAGmtB,EAAIysB,EAAI15C,OAAQF,EAAImtB,EAAGntB,IACrC,GAAI45C,EAAI55C,KAAOwoE,EAAIxoE,GACjB,OAAO,EAIX,OAAO,CACT,CAEA,SAASyoE,EAAYnkD,GAEnB,OAAOA,EAAKta,QADU,aACe,GACvC,CA2GA,SAAS0+D,EAAuBhnE,GAE9B,OAAO+sB,OAAO/sB,EAChB,CAGA,SAASinE,EAAyB/jC,GAEhC,OAAO9nB,mBAAmB8nB,GACvB56B,QAAQ,WAAY0+D,GACpB1+D,QAAQ,MAAO,MACpB,CApHA89D,EAAIc,OAAS,WACX,MAAO,CACL/rD,SAAU,KACVgsD,SAAU,KACVC,SAAU,KACVC,SAAU,KACVC,IAAK,KACLC,KAAM,KACNj8D,KAAM,KACNk8D,MAAO,KACP7uC,SAAU,KAEV8uC,uBAAwBrB,EAAIqB,uBAC5BC,yBAA0BtB,EAAIsB,yBAC9BC,iBAAkBvB,EAAIuB,iBAE1B,EAIAvB,EAAIqB,wBAAyB,EAE7BrB,EAAIsB,0BAA2B,EAE/BtB,EAAIuB,kBAAmB,EAEvBvB,EAAIwB,oBAAsB,uBAC1BxB,EAAIyB,eAAiB,iBACrBzB,EAAI0B,oBAAsB,UAE1B1B,EAAI2B,eAAiB,uCAIrB3B,EAAI4B,eAAiB,0jCAKrB5B,EAAI6B,oBAAsB,yOAC1B7B,EAAI8B,QAAU,CAEZ/mD,MAAO,yCAEPC,IAAK,aAELk2C,KAAM,gEAEN6Q,OAAQ,8CAEV/B,EAAIgC,8BAAgC,6EAEpChC,EAAIiC,qBAAuB,yBAG3BjC,EAAIkC,aAAe,CACjBC,KAAM,KACNC,MAAO,MACPC,IAAK,KACLC,OAAQ,KACRC,GAAI,KACJC,IAAK,OAGPxC,EAAIyC,cAAgB,CAClB,OACA,SAMFzC,EAAI0C,4BAA8B,qBAElC1C,EAAI2C,cAAgB,CAClB,EAAK,OACL,WAAc,OACd,KAAQ,OACR,KAAQ,OACR,OAAU,MACV,KAAQ,SACR,IAAO,MACP,KAAQ,OACR,OAAU,MACV,MAAS,MACT,OAAU,MACV,MAAS,MACT,MAAS,MACT,MAAS,MACT,MAAS,OAEX3C,EAAI4C,gBAAkB,SAASC,GAC7B,GAAKA,GAASA,EAAKh+B,SAAnB,CAIA,IAAIA,EAAWg+B,EAAKh+B,SAASx/B,cAE7B,GAAiB,UAAbw/B,GAAsC,UAAdg+B,EAAKxkE,KAIjC,OAAO2hE,EAAI2C,cAAc99B,EARzB,CASF,EAcAm7B,EAAI8C,OAASjC,EACbb,EAAI+C,OAASlwC,mBACbmtC,EAAIgD,QAAU,WACZhD,EAAI8C,OAASn8C,OACbq5C,EAAI+C,OAASE,QACf,EACAjD,EAAIkD,QAAU,WACZlD,EAAI8C,OAASjC,EACbb,EAAI+C,OAASlwC,kBACf,EACAmtC,EAAImD,WAAa,CACfltD,SAAU,CACR6sD,OAAQ,CAGNM,WAAY,+BACZ9gE,IAAK,CAEH,MAAO,IACP,MAAO,IACP,MAAO,IACP,MAAO,IACP,MAAO,IACP,MAAO,IACP,MAAO,IACP,MAAO,MAGXygE,OAAQ,CACNK,WAAY,WACZ9gE,IAAK,CACH,IAAK,MACL,IAAK,MACL,IAAK,SAIX+gE,SAAU,CACRP,OAAQ,CAGNM,WAAY,6DACZ9gE,IAAK,CAEH,MAAO,IACP,MAAO,IACP,MAAO,IACP,MAAO,IACP,MAAO,IACP,MAAO,IACP,MAAO,IAEP,MAAO,IACP,MAAO,IACP,MAAO,IACP,MAAO,IACP,MAAO,IACP,MAAO,IACP,MAAO,IACP,MAAO,IACP,MAAO,IACP,MAAO,IACP,MAAO,OAIbghE,QAAS,CAQPR,OAAQ,CACNM,WAAY,wCACZ9gE,IAAK,CACH,MAAO,IACP,MAAO,IACP,MAAO,IACP,MAAO,IACP,MAAO,IACP,MAAO,IACP,MAAO,IACP,MAAO,IACP,MAAO,IACP,MAAO,IACP,MAAO,MAKXygE,OAAQ,CACNK,WAAY,YACZ9gE,IAAK,CACH,IAAK,MACL,IAAK,MACL,IAAK,MACL,IAAK,UAKb09D,EAAIuD,YAAc,SAASzmC,EAAQykC,GACjC,IAAIiC,EAAUxD,EAAI8C,OAAOhmC,EAAS,IAKlC,YAJyBniC,IAArB4mE,IACFA,EAAmBvB,EAAIuB,kBAGlBA,EAAmBiC,EAAQthE,QAAQ,OAAQ,KAAOshE,CAC3D,EACAxD,EAAIyD,YAAc,SAAS3mC,EAAQykC,GACjCzkC,GAAU,QACeniC,IAArB4mE,IACFA,EAAmBvB,EAAIuB,kBAGzB,IACE,OAAOvB,EAAI+C,OAAOxB,EAAmBzkC,EAAO56B,QAAQ,MAAO,OAAS46B,EACtE,CAAE,MAAM55B,GAKN,OAAO45B,CACT,CACF,EAEA,IACI4mC,EADA5C,EAAS,CAAC,OAAS,SAAU,OAAS,UAEtC6C,EAAmB,SAASC,EAAQF,GACtC,OAAO,SAAS5mC,GACd,IACE,OAAOkjC,EAAI0D,GAAO5mC,EAAS,IAAI56B,QAAQ89D,EAAImD,WAAWS,GAAQF,GAAON,YAAY,SAAS30D,GACxF,OAAOuxD,EAAImD,WAAWS,GAAQF,GAAOphE,IAAImM,EAC3C,GACF,CAAE,MAAOvL,GAKP,OAAO45B,CACT,CACF,CACF,EAEA,IAAK4mC,KAAS5C,EACZd,EAAI0D,EAAQ,eAAiBC,EAAiB,WAAY7C,EAAO4C,IACjE1D,EAAI0D,EAAQ,kBAAoBC,EAAiB,UAAW7C,EAAO4C,IAGrE,IAAIG,EAAgC,SAASC,EAAMC,EAAiBC,GAClE,OAAO,SAASlnC,GAKd,IAAImnC,EAIFA,EAHGD,EAGgB,SAASlnC,GAC1B,OAAOkjC,EAAI+D,GAAiB/D,EAAIgE,GAAsBlnC,GACxD,EAJmBkjC,EAAI+D,GASzB,IAFA,IAAI7E,GAAYpiC,EAAS,IAAI36B,MAAM2hE,GAE1B5rE,EAAI,EAAGE,EAAS8mE,EAAS9mE,OAAQF,EAAIE,EAAQF,IACpDgnE,EAAShnE,GAAK+rE,EAAiB/E,EAAShnE,IAG1C,OAAOgnE,EAASpjE,KAAKgoE,EACvB,CACF,EAkrBA,SAASI,EAAuBR,GAC9B,OAAO,SAASxjE,EAAGikE,GACjB,YAAUxpE,IAANuF,EACK3C,KAAKujE,OAAO4C,IAAU,IAE7BnmE,KAAKujE,OAAO4C,GAASxjE,GAAK,KAC1B3C,KAAK4mE,OAAOA,GACL5mE,KAEX,CACF,CAEA,SAAS6mE,EAAuBV,EAAOrqD,GACrC,OAAO,SAASnZ,EAAGikE,GACjB,YAAUxpE,IAANuF,EACK3C,KAAKujE,OAAO4C,IAAU,IAEnB,OAANxjE,IACFA,GAAQ,IACFZ,OAAO,KAAO+Z,IAClBnZ,EAAIA,EAAEV,UAAU,IAIpBjC,KAAKujE,OAAO4C,GAASxjE,EACrB3C,KAAK4mE,OAAOA,GACL5mE,KAEX,CACF,CA5sBAyiE,EAAIqE,WAAaR,EAA8B,IAAK,qBACpD7D,EAAIsE,cAAgBT,EAA8B,IAAK,wBACvD7D,EAAIuE,WAAaV,EAA8B,IAAK,oBAAqB,UACzE7D,EAAIwE,cAAgBX,EAA8B,IAAK,uBAAwB,UAE/E7D,EAAIyE,eAAiBd,EAAiB,WAAY,UAElD3D,EAAI5+D,MAAQ,SAAS07B,EAAQ96B,GAC3B,IAAIs+B,EAgEJ,OA/DKt+B,IACHA,EAAQ,CACNq/D,uBAAwBrB,EAAIqB,0BAWhC/gC,GALAxD,GAFAA,EAASA,EAAO56B,QAAQ89D,EAAIgC,8BAA+B,KAE3C9/D,QAAQ89D,EAAIiC,qBAAsB,KAKrClgE,QAAQ,OACV,IAETC,EAAMuwB,SAAWuK,EAAOt9B,UAAU8gC,EAAM,IAAM,KAC9CxD,EAASA,EAAOt9B,UAAU,EAAG8gC,KAI/BA,EAAMxD,EAAO/6B,QAAQ,OACV,IAETC,EAAMo/D,MAAQtkC,EAAOt9B,UAAU8gC,EAAM,IAAM,KAC3CxD,EAASA,EAAOt9B,UAAU,EAAG8gC,IASA,QAH/BxD,GAFAA,EAASA,EAAO56B,QAAQ,+BAAgC,UAExCA,QAAQ,cAAe,OAG5B1C,UAAU,EAAG,IAEtBwC,EAAM+S,SAAW,KACjB+nB,EAASA,EAAOt9B,UAAU,GAE1Bs9B,EAASkjC,EAAI0E,eAAe5nC,EAAQ96B,KAEpCs+B,EAAMxD,EAAO/6B,QAAQ,OACV,IACTC,EAAM+S,SAAW+nB,EAAOt9B,UAAU,EAAG8gC,IAAQ,KACzCt+B,EAAM+S,WAAa/S,EAAM+S,SAAStT,MAAMu+D,EAAIwB,qBAE9Cx/D,EAAM+S,cAAWpa,EACmD,OAA3DmiC,EAAOt9B,UAAU8gC,EAAM,EAAGA,EAAM,GAAGp+B,QAAQ,MAAO,MAC3D46B,EAASA,EAAOt9B,UAAU8gC,EAAM,GAGhCxD,EAASkjC,EAAI0E,eAAe5nC,EAAQ96B,KAEpC86B,EAASA,EAAOt9B,UAAU8gC,EAAM,GAChCt+B,EAAMk/D,KAAM,IAMlBl/D,EAAMkD,KAAO43B,EAGN96B,CACT,EACAg+D,EAAI2E,UAAY,SAAS7nC,EAAQ96B,GAC1B86B,IACHA,EAAS,IAWX,IACI8nC,EACAC,EAFAvkC,GAHJxD,EAASA,EAAO56B,QAAQ,MAAO,MAGdH,QAAQ,KAQzB,IAJa,IAATu+B,IACFA,EAAMxD,EAAO1kC,QAGU,MAArB0kC,EAAOx9B,OAAO,GAIhBslE,EAAa9nC,EAAO/6B,QAAQ,KAC5BC,EAAMi/D,SAAWnkC,EAAOt9B,UAAU,EAAGolE,IAAe,KACpD5iE,EAAMm/D,KAAOrkC,EAAOt9B,UAAUolE,EAAa,EAAGtkC,IAAQ,KACnC,MAAft+B,EAAMm/D,OACRn/D,EAAMm/D,KAAO,UAEV,CACL,IAAI2D,EAAahoC,EAAO/6B,QAAQ,KAC5BgjE,EAAajoC,EAAO/6B,QAAQ,KAC5BijE,EAAYloC,EAAO/6B,QAAQ,IAAK+iE,EAAa,IAC9B,IAAfE,KAAqC,IAAhBD,GAAqBC,EAAYD,IAGxD/iE,EAAMi/D,SAAWnkC,EAAOt9B,UAAU,EAAG8gC,IAAQ,KAC7Ct+B,EAAMm/D,KAAO,OAEb0D,EAAI/nC,EAAOt9B,UAAU,EAAG8gC,GAAKn+B,MAAM,KACnCH,EAAMi/D,SAAW4D,EAAE,IAAM,KACzB7iE,EAAMm/D,KAAO0D,EAAE,IAAM,KAEzB,CAeA,OAbI7iE,EAAMi/D,UAAgD,MAApCnkC,EAAOt9B,UAAU8gC,GAAKhhC,OAAO,KACjDghC,IACAxD,EAAS,IAAMA,GAGb96B,EAAMq/D,wBACRrB,EAAIiF,oBAAoBjjE,EAAMi/D,SAAUj/D,EAAM+S,UAG5C/S,EAAMm/D,MACRnB,EAAIkF,gBAAgBljE,EAAMm/D,MAGrBrkC,EAAOt9B,UAAU8gC,IAAQ,GAClC,EACA0/B,EAAI0E,eAAiB,SAAS5nC,EAAQ96B,GAEpC,OADA86B,EAASkjC,EAAImF,cAAcroC,EAAQ96B,GAC5Bg+D,EAAI2E,UAAU7nC,EAAQ96B,EAC/B,EACAg+D,EAAImF,cAAgB,SAASroC,EAAQ96B,GAEnC,IAAIojE,EAAUtoC,GAEU,IADHA,EAAO/6B,QAAQ,QAElC+6B,EAASA,EAAO56B,QAAQ,MAAO,MAEjC,IAEI2iE,EAFAE,EAAajoC,EAAO/6B,QAAQ,KAC5Bu+B,EAAMxD,EAAO9M,YAAY,IAAK+0C,GAAc,EAAIA,EAAajoC,EAAO1kC,OAAS,GAejF,OAXIkoC,GAAO,KAAsB,IAAhBykC,GAAqBzkC,EAAMykC,IAC1CF,EAAI/nC,EAAOt9B,UAAU,EAAG8gC,GAAKn+B,MAAM,KACnCH,EAAM++D,SAAW8D,EAAE,GAAK7E,EAAI+C,OAAO8B,EAAE,IAAM,KAC3CA,EAAEnhE,QACF1B,EAAMg/D,SAAW6D,EAAE,GAAK7E,EAAI+C,OAAO8B,EAAE/oE,KAAK,MAAQ,KAClDghC,EAASsoC,EAAQ5lE,UAAU8gC,EAAM,KAEjCt+B,EAAM++D,SAAW,KACjB/+D,EAAMg/D,SAAW,MAGZlkC,CACT,EACAkjC,EAAIqF,WAAa,SAASvoC,EAAQykC,GAChC,IAAKzkC,EACH,MAAO,CAAC,EAMV,KAFAA,EAASA,EAAO56B,QAAQ,MAAO,KAAKA,QAAQ,cAAe,KAGzD,MAAO,CAAC,EAQV,IALA,IAGIhC,EAAGpD,EAAMlD,EAHT28D,EAAQ,CAAC,EACT+O,EAASxoC,EAAO36B,MAAM,KACtB/J,EAASktE,EAAOltE,OAGXF,EAAI,EAAGA,EAAIE,EAAQF,IAC1BgI,EAAIolE,EAAOptE,GAAGiK,MAAM,KACpBrF,EAAOkjE,EAAIyD,YAAYvjE,EAAEwD,QAAS69D,GAElC3nE,EAAQsG,EAAE9H,OAAS4nE,EAAIyD,YAAYvjE,EAAEpE,KAAK,KAAMylE,GAAoB,KAEvD,cAATzkE,IAGOqjE,EAAOpnE,KAAKw9D,EAAOz5D,IACD,kBAAhBy5D,EAAMz5D,IAAsC,OAAhBy5D,EAAMz5D,KAC3Cy5D,EAAMz5D,GAAQ,CAACy5D,EAAMz5D,KAGvBy5D,EAAMz5D,GAAMvD,KAAKK,IAEjB28D,EAAMz5D,GAAQlD,GAIlB,OAAO28D,CACT,EAEAyJ,EAAImE,MAAQ,SAASniE,GACnB,IAAI6iE,EAAI,GACJU,GAAsB,EA4B1B,OA1BIvjE,EAAM+S,WACR8vD,GAAK7iE,EAAM+S,SAAW,KAGnB/S,EAAMk/D,MAAQ2D,IAAK7iE,EAAMi/D,WAC5B4D,GAAK,KACLU,GAAsB,GAGxBV,GAAM7E,EAAIwF,eAAexjE,IAAU,GAET,kBAAfA,EAAMkD,OACc,MAAzBlD,EAAMkD,KAAK5F,OAAO,IAAcimE,IAClCV,GAAK,KAGPA,GAAK7iE,EAAMkD,MAGc,kBAAhBlD,EAAMo/D,OAAsBp/D,EAAMo/D,QAC3CyD,GAAK,IAAM7iE,EAAMo/D,OAGW,kBAAnBp/D,EAAMuwB,UAAyBvwB,EAAMuwB,WAC9CsyC,GAAK,IAAM7iE,EAAMuwB,UAEZsyC,CACT,EACA7E,EAAIyF,UAAY,SAASzjE,GACvB,IAAI6iE,EAAI,GAER,OAAK7iE,EAAMi/D,UAEAjB,EAAI4B,eAAeplE,KAAKwF,EAAMi/D,UACvC4D,GAAK,IAAM7iE,EAAMi/D,SAAW,IAE5B4D,GAAK7iE,EAAMi/D,SAGTj/D,EAAMm/D,OACR0D,GAAK,IAAM7iE,EAAMm/D,MAGZ0D,GAXE,EAYX,EACA7E,EAAIwF,eAAiB,SAASxjE,GAC5B,OAAOg+D,EAAI0F,cAAc1jE,GAASg+D,EAAIyF,UAAUzjE,EAClD,EACAg+D,EAAI0F,cAAgB,SAAS1jE,GAC3B,IAAI6iE,EAAI,GAcR,OAZI7iE,EAAM++D,WACR8D,GAAK7E,EAAI8C,OAAO9gE,EAAM++D,WAGpB/+D,EAAMg/D,WACR6D,GAAK,IAAM7E,EAAI8C,OAAO9gE,EAAMg/D,WAG1B6D,IACFA,GAAK,KAGAA,CACT,EACA7E,EAAI2F,WAAa,SAAS9hE,EAAMy9D,EAA0BC,GAOxD,IACIqE,EAAQ1pE,EAAKhE,EAAGE,EADhBysE,EAAI,GAER,IAAK3oE,KAAO2H,EACV,GAAY,cAAR3H,GAGOikE,EAAOpnE,KAAK8K,EAAM3H,GAC3B,GAAIwtB,EAAQ7lB,EAAK3H,IAEf,IADA0pE,EAAS,CAAC,EACL1tE,EAAI,EAAGE,EAASyL,EAAK3H,GAAK9D,OAAQF,EAAIE,EAAQF,SAC5ByC,IAAjBkJ,EAAK3H,GAAKhE,SAAkDyC,IAA9BirE,EAAO/hE,EAAK3H,GAAKhE,GAAK,MACtD2sE,GAAK,IAAM7E,EAAI6F,oBAAoB3pE,EAAK2H,EAAK3H,GAAKhE,GAAIqpE,IACrB,IAA7BD,IACFsE,EAAO/hE,EAAK3H,GAAKhE,GAAK,KAAM,cAIXyC,IAAdkJ,EAAK3H,KACd2oE,GAAK,IAAM7E,EAAI6F,oBAAoB3pE,EAAK2H,EAAK3H,GAAMqlE,IAKzD,OAAOsD,EAAErlE,UAAU,EACrB,EACAwgE,EAAI6F,oBAAsB,SAAS/oE,EAAMlD,EAAO2nE,GAG9C,OAAOvB,EAAIuD,YAAYzmE,EAAMykE,IAA+B,OAAV3nE,EAAiB,IAAMomE,EAAIuD,YAAY3pE,EAAO2nE,GAAoB,GACtH,EAEAvB,EAAI8F,SAAW,SAASjiE,EAAM/G,EAAMlD,GAClC,GAAoB,kBAATkD,EACT,IAAK,IAAIZ,KAAOY,EACVqjE,EAAOpnE,KAAK+D,EAAMZ,IACpB8jE,EAAI8F,SAASjiE,EAAM3H,EAAKY,EAAKZ,QAG5B,IAAoB,kBAATY,EAchB,MAAM,IAAIqD,UAAU,kEAbpB,QAAmBxF,IAAfkJ,EAAK/G,GAEP,YADA+G,EAAK/G,GAAQlD,GAEkB,kBAAfiK,EAAK/G,KACrB+G,EAAK/G,GAAQ,CAAC+G,EAAK/G,KAGhB4sB,EAAQ9vB,KACXA,EAAQ,CAACA,IAGXiK,EAAK/G,IAAS+G,EAAK/G,IAAS,IAAIvE,OAAOqB,EAGzC,CACF,EAEAomE,EAAI+F,SAAW,SAASliE,EAAM/G,EAAMlD,GAClC,GAAoB,kBAATkD,EACT,IAAK,IAAIZ,KAAOY,EACVqjE,EAAOpnE,KAAK+D,EAAMZ,IACpB8jE,EAAI+F,SAASliE,EAAM3H,EAAKY,EAAKZ,QAG5B,IAAoB,kBAATY,EAGhB,MAAM,IAAIqD,UAAU,kEAFpB0D,EAAK/G,QAAkBnC,IAAVf,EAAsB,KAAOA,CAG5C,CACF,EAEAomE,EAAIgG,YAAc,SAASniE,EAAM/G,EAAMlD,GACrC,IAAI1B,EAAGE,EAAQ8D,EAEf,GAAIwtB,EAAQ5sB,GACV,IAAK5E,EAAI,EAAGE,EAAS0E,EAAK1E,OAAQF,EAAIE,EAAQF,IAC5C2L,EAAK/G,EAAK5E,SAAMyC,OAEb,GAAsB,WAAlB8hC,EAAQ3/B,GACjB,IAAKZ,KAAO2H,EACN/G,EAAKN,KAAKN,KACZ2H,EAAK3H,QAAOvB,QAGX,GAAoB,kBAATmC,EAChB,IAAKZ,KAAOY,EACNqjE,EAAOpnE,KAAK+D,EAAMZ,IACpB8jE,EAAIgG,YAAYniE,EAAM3H,EAAKY,EAAKZ,QAG/B,IAAoB,kBAATY,EAiBhB,MAAM,IAAIqD,UAAU,mFAhBNxF,IAAVf,EACqB,WAAnB6iC,EAAQ7iC,IACL8vB,EAAQ7lB,EAAK/G,KAAUlD,EAAM4C,KAAKqH,EAAK/G,IAC1C+G,EAAK/G,QAAQnC,EAEbkJ,EAAK/G,GAAQujE,EAAkBx8D,EAAK/G,GAAOlD,GAEpCiK,EAAK/G,KAAUgE,OAAOlH,IAAY8vB,EAAQ9vB,IAA2B,IAAjBA,EAAMxB,OAE1DsxB,EAAQ7lB,EAAK/G,MACtB+G,EAAK/G,GAAQujE,EAAkBx8D,EAAK/G,GAAOlD,IAF3CiK,EAAK/G,QAAQnC,EAKfkJ,EAAK/G,QAAQnC,CAIjB,CACF,EACAqlE,EAAIiG,SAAW,SAASpiE,EAAM/G,EAAMlD,EAAOssE,GACzC,OAAQzpC,EAAQ3/B,IACd,IAAK,SAEH,MAEF,IAAK,SACH,IAAK,IAAIZ,KAAO2H,EACd,GAAIs8D,EAAOpnE,KAAK8K,EAAM3H,IAChBY,EAAKN,KAAKN,UAAmBvB,IAAVf,GAAuBomE,EAAIiG,SAASpiE,EAAM3H,EAAKtC,IACpE,OAAO,EAKb,OAAO,EAET,IAAK,SACH,IAAK,IAAIyf,KAAQvc,EACf,GAAIqjE,EAAOpnE,KAAK+D,EAAMuc,KACf2mD,EAAIiG,SAASpiE,EAAMwV,EAAMvc,EAAKuc,IACjC,OAAO,EAKb,OAAO,EAET,QACE,MAAM,IAAIlZ,UAAU,uFAGxB,OAAQs8B,EAAQ7iC,IACd,IAAK,YAEH,OAAOkD,KAAQ+G,EAEjB,IAAK,UAGH,OAAOjK,IADM+G,QAAQ+oB,EAAQ7lB,EAAK/G,IAAS+G,EAAK/G,GAAM1E,OAASyL,EAAK/G,IAGtE,IAAK,WAEH,QAASlD,EAAMiK,EAAK/G,GAAOA,EAAM+G,GAEnC,IAAK,QACH,QAAK6lB,EAAQ7lB,EAAK/G,MAITopE,EAAc3F,EAAgBE,GAC7B58D,EAAK/G,GAAOlD,GAExB,IAAK,SACH,OAAK8vB,EAAQ7lB,EAAK/G,MAIbopE,GAIE3F,EAAc18D,EAAK/G,GAAOlD,GAPxB+G,QAAQkD,EAAK/G,IAAS+G,EAAK/G,GAAM2E,MAAM7H,IASlD,IAAK,SACHA,EAAQkH,OAAOlH,GAEjB,IAAK,SACH,OAAK8vB,EAAQ7lB,EAAK/G,MAIbopE,GAIE3F,EAAc18D,EAAK/G,GAAOlD,GAPxBiK,EAAK/G,KAAUlD,EAS1B,QACE,MAAM,IAAIuG,UAAU,sGAE1B,EAGA6/D,EAAImG,UAAY,WAKd,IAJA,IAAIr3B,EAAQ,GACRowB,EAAW,GACXkH,EAAmB,EAEdluE,EAAI,EAAGA,EAAI+E,UAAU7E,OAAQF,IAAK,CACzC,IAAIgc,EAAM,IAAI8rD,EAAI/iE,UAAU/E,IAC5B42C,EAAMv1C,KAAK2a,GAEX,IADA,IAAI+qD,EAAY/qD,EAAImyD,UACX9pE,EAAI,EAAGA,EAAI0iE,EAAU7mE,OAAQmE,IACR,kBAAjB0iE,EAAU1iE,IACnB2iE,EAAS3lE,KAAK0lE,EAAU1iE,IAGtB0iE,EAAU1iE,IACZ6pE,GAGN,CAEA,IAAKlH,EAAS9mE,SAAWguE,EACvB,OAAO,IAAIpG,EAAI,IAGjB,IAAIsG,EAAM,IAAItG,EAAI,IAAIqG,QAAQnH,GAM9B,MAJwB,KAApBpwB,EAAM,GAAG5pC,QAAiD,MAAhC4pC,EAAM,GAAG5pC,OAAOzC,MAAM,EAAG,IACrD6jE,EAAIphE,KAAK,IAAMohE,EAAIphE,QAGdohE,EAAIC,WACb,EAEAvG,EAAIwG,WAAa,SAAS10B,EAAK4uB,GAC7B,IACIpgC,EADAloC,EAASyW,KAAKpV,IAAIq4C,EAAI15C,OAAQsoE,EAAItoE,QAItC,IAAKkoC,EAAM,EAAGA,EAAMloC,EAAQkoC,IAC1B,GAAIwR,EAAIxyC,OAAOghC,KAASogC,EAAIphE,OAAOghC,GAAM,CACvCA,IACA,KACF,CAGF,OAAIA,EAAM,EACDwR,EAAIxyC,OAAO,KAAOohE,EAAIphE,OAAO,IAAwB,MAAlBwyC,EAAIxyC,OAAO,GAAa,IAAM,IAIlD,MAApBwyC,EAAIxyC,OAAOghC,IAAoC,MAApBogC,EAAIphE,OAAOghC,KACxCA,EAAMwR,EAAItyC,UAAU,EAAG8gC,GAAKtQ,YAAY,MAGnC8hB,EAAItyC,UAAU,EAAG8gC,EAAM,GAChC,EAEA0/B,EAAIyG,aAAe,SAAS3pC,EAAQja,EAAUpD,GAC5CA,IAAYA,EAAU,CAAC,GACvB,IAAIinD,EAASjnD,EAAQ1E,OAASilD,EAAI8B,QAAQ/mD,MACtC4rD,EAAOlnD,EAAQzE,KAAOglD,EAAI8B,QAAQ9mD,IAClC4rD,EAAQnnD,EAAQyxC,MAAQ8O,EAAI8B,QAAQ5Q,KACpC2V,EAAUpnD,EAAQsiD,QAAU/B,EAAI8B,QAAQC,OACxC+E,EAAiB,oBAGrB,IADAJ,EAAOK,UAAY,IACN,CACX,IAAItlE,EAAQilE,EAAOzkE,KAAK66B,GACxB,IAAKr7B,EACH,MAGF,IAAIsZ,EAAQtZ,EAAMqL,MAClB,GAAI2S,EAAQunD,WAAY,CAEtB,IAAIC,EAAgBnqC,EAAOr6B,MAAMoM,KAAKnV,IAAIqhB,EAAQ,EAAG,GAAIA,GACzD,GAAIksD,GAAiBH,EAAetqE,KAAKyqE,GACvC,QAEJ,CAMA,IAJA,IAAIjsD,EAAMD,EAAQ+hB,EAAOr6B,MAAMsY,GAAO+C,OAAO6oD,GACzClkE,EAAQq6B,EAAOr6B,MAAMsY,EAAOC,GAE5BksD,GAAa,IACJ,CACX,IAAIC,EAAcN,EAAQ5kE,KAAKQ,GAC/B,IAAK0kE,EACH,MAGF,IAAIC,EAAiBD,EAAYr6D,MAAQq6D,EAAY,GAAG/uE,OACxD8uE,EAAYr4D,KAAKnV,IAAIwtE,EAAWE,EAClC,CAQA,MALE3kE,EADEykE,GAAa,EACPzkE,EAAMA,MAAM,EAAGykE,GAAazkE,EAAMA,MAAMykE,GAAWhlE,QAAQ0kE,EAAO,IAElEnkE,EAAMP,QAAQ0kE,EAAO,KAGrBxuE,QAAUqJ,EAAM,GAAGrJ,WAMzBqnB,EAAQ/R,SAAU+R,EAAQ/R,OAAOlR,KAAKiG,IAA1C,CAKA,IAAIpJ,EAASwpB,EAASpgB,EAAOsY,EAD7BC,EAAMD,EAAQtY,EAAMrK,OACqB0kC,QAC1BniC,IAAXtB,GAKJA,EAASyH,OAAOzH,GAChByjC,EAASA,EAAOr6B,MAAM,EAAGsY,GAAS1hB,EAASyjC,EAAOr6B,MAAMuY,GACxD0rD,EAAOK,UAAYhsD,EAAQ1hB,EAAOjB,QANhCsuE,EAAOK,UAAY/rD,CALrB,CAYF,CAGA,OADA0rD,EAAOK,UAAY,EACZjqC,CACT,EAEAkjC,EAAIiF,oBAAsB,SAAS/kE,EAAG6U,GAIpC,IAAIsyD,IAAgBnnE,EAEhBonE,GAAsB,EAM1B,KAPoBvyD,IAIlBuyD,EAAsB/G,EAAcP,EAAIyC,cAAe1tD,IAGrDuyD,IAAwBD,EAC1B,MAAM,IAAIlnE,UAAU,4CAA8C4U,GAC7D,GAAI7U,GAAKA,EAAEuB,MAAMu+D,EAAI0C,6BAA8B,CAExD,IAAK5C,EACH,MAAM,IAAI3/D,UAAU,aAAeD,EAAI,kFAEzC,GAAI4/D,EAASyH,QAAQrnE,GAAGuB,MAAMu+D,EAAI0C,6BAChC,MAAM,IAAIviE,UAAU,aAAeD,EAAI,gDAE3C,CACF,EAEA8/D,EAAIkF,gBAAkB,SAAUhlE,GAC9B,GAAKA,EAAL,CAIA,IAAIihE,EAAOtgE,OAAOX,GAClB,KA9gCO,WAAW1D,KA8gCJ2kE,IAAUA,EAAO,GAAOA,EAAO,OAI7C,MAAM,IAAIhhE,UAAU,SAAWD,EAAI,wBAPnC,CAQF,EAGA8/D,EAAI39C,WAAa,SAASmlD,GACxB,GAAIA,EAAW,CACb,IAAIC,EAAe,CACjBzH,IAAKziE,KAAK8kB,cAeZ,OAZI1jB,EAAK+oE,aAAsD,oBAAhC/oE,EAAK+oE,YAAYrlD,aAC9ColD,EAAaC,YAAc/oE,EAAK+oE,YAAYrlD,cAG1C1jB,EAAKmgE,MAAwC,oBAAzBngE,EAAKmgE,KAAKz8C,aAChColD,EAAa3I,KAAOngE,EAAKmgE,KAAKz8C,cAG5B1jB,EAAK6gE,oBAAoE,oBAAvC7gE,EAAK6gE,mBAAmBn9C,aAC5DolD,EAAajI,mBAAqB7gE,EAAK6gE,mBAAmBn9C,cAGrDolD,CACT,CAIA,OAJW9oE,EAAKqhE,MAAQziE,OACtBoB,EAAKqhE,IAAMD,GAGNxiE,IACT,EAEAb,EAAEynE,MAAQ,SAASwD,GAQjB,OAPmB,IAAfA,EACFpqE,KAAKqqE,iBAAkB,QACCjtE,IAAfgtE,GAA4BpqE,KAAKqqE,mBAC1CrqE,KAAK6nE,QAAUpF,EAAImE,MAAM5mE,KAAKujE,QAC9BvjE,KAAKqqE,iBAAkB,GAGlBrqE,IACT,EAEAb,EAAE8pB,MAAQ,WACR,OAAO,IAAIw5C,EAAIziE,KACjB,EAEAb,EAAE69B,QAAU79B,EAAE5D,SAAW,WACvB,OAAOyE,KAAK4mE,OAAM,GAAOiB,OAC3B,EAkCA1oE,EAAEqY,SAAWmvD,EAAuB,YACpCxnE,EAAEqkE,SAAWmD,EAAuB,YACpCxnE,EAAEskE,SAAWkD,EAAuB,YACpCxnE,EAAEukE,SAAWiD,EAAuB,YACpCxnE,EAAEykE,KAAO+C,EAAuB,QAChCxnE,EAAE0kE,MAAQgD,EAAuB,QAAS,KAC1C1nE,EAAE61B,SAAW6xC,EAAuB,WAAY,KAEhD1nE,EAAEohB,OAAS,SAAS5d,EAAGikE,GACrB,IAAIU,EAAItnE,KAAK6jE,MAAMlhE,EAAGikE,GACtB,MAAoB,kBAANU,GAAkBA,EAAEzsE,OAAU,IAAMysE,EAAKA,CACzD,EACAnoE,EAAEqhB,KAAO,SAAS7d,EAAGikE,GACnB,IAAIU,EAAItnE,KAAKg1B,SAASryB,EAAGikE,GACzB,MAAoB,kBAANU,GAAkBA,EAAEzsE,OAAU,IAAMysE,EAAKA,CACzD,EAEAnoE,EAAEuZ,SAAW,SAAS/V,EAAGikE,GACvB,QAAUxpE,IAANuF,IAAyB,IAANA,EAAY,CACjC,IAAI2nE,EAAMtqE,KAAKujE,OAAO57D,OAAS3H,KAAKujE,OAAOG,SAAW,IAAM,IAC5D,OAAO/gE,GAAK3C,KAAKujE,OAAOI,IAAMlB,EAAIsE,cAAgBtE,EAAIqE,YAAYwD,GAAOA,CAC3E,CAOE,OANItqE,KAAKujE,OAAOI,IACd3jE,KAAKujE,OAAO57D,KAAOhF,EAAI8/D,EAAIwE,cAActkE,GAAK,GAE9C3C,KAAKujE,OAAO57D,KAAOhF,EAAI8/D,EAAIuE,WAAWrkE,GAAK,IAE7C3C,KAAK4mE,OAAOA,GACL5mE,IAEX,EACAb,EAAEwI,KAAOxI,EAAEuZ,SACXvZ,EAAEgc,KAAO,SAASA,EAAMyrD,GACtB,IAAIjoE,EAEJ,QAAavB,IAAT+d,EACF,OAAOnb,KAAKzE,WAGdyE,KAAK6nE,QAAU,GACf7nE,KAAKujE,OAASd,EAAIc,SAElB,IAAIf,EAAOrnD,aAAgBsnD,EACvB8H,EAA0B,kBAATpvD,IAAsBA,EAAKuoD,UAAYvoD,EAAKxT,MAAQwT,EAAKzC,UAC1EyC,EAAKmsB,WAEPnsB,EAAOA,EADSsnD,EAAI4C,gBAAgBlqD,KACV,GAC1BovD,GAAU,GAcZ,IAJK/H,GAAQ+H,QAA6BntE,IAAlB+d,EAAKzC,WAC3ByC,EAAOA,EAAK5f,YAGM,kBAAT4f,GAAqBA,aAAgB5X,OAC9CvD,KAAKujE,OAASd,EAAI5+D,MAAMN,OAAO4X,GAAOnb,KAAKujE,YACtC,KAAIf,IAAQ+H,EAYjB,MAAM,IAAI3nE,UAAU,iBAXpB,IAAIs0B,EAAMsrC,EAAOrnD,EAAKooD,OAASpoD,EAC/B,IAAKxc,KAAOu4B,EACE,UAARv4B,GACAikE,EAAOpnE,KAAKwE,KAAKujE,OAAQ5kE,KAC3BqB,KAAKujE,OAAO5kE,GAAOu4B,EAAIv4B,IAGvBu4B,EAAI2sC,OACN7jE,KAAK6jE,MAAM3sC,EAAI2sC,OAAO,EAI1B,CAGA,OADA7jE,KAAK4mE,OAAOA,GACL5mE,IACT,EAGAb,EAAEwhC,GAAK,SAAS6pC,GACd,IAAIC,GAAK,EACLC,GAAM,EACNC,GAAM,EACNprE,GAAO,EACPqrE,GAAM,EACNC,GAAM,EACNtI,GAAW,EACXuI,GAAY9qE,KAAKujE,OAAOI,IAa5B,OAXI3jE,KAAKujE,OAAOG,WACdoH,GAAW,EACXJ,EAAMjI,EAAI2B,eAAenlE,KAAKe,KAAKujE,OAAOG,UAC1CiH,EAAMlI,EAAI4B,eAAeplE,KAAKe,KAAKujE,OAAOG,UAG1CkH,GADArrE,IADAkrE,EAAKC,GAAOC,KAEEzI,GAAOA,EAAI74C,IAAIrpB,KAAKujE,OAAOG,UACzCmH,EAAMtrE,GAAQkjE,EAAIyB,eAAejlE,KAAKe,KAAKujE,OAAOG,UAClDnB,EAAWhjE,GAAQkjE,EAAI0B,oBAAoBllE,KAAKe,KAAKujE,OAAOG,WAGtD8G,EAAK1iE,eACX,IAAK,WACH,OAAOgjE,EAET,IAAK,WACH,OAAQA,EAGV,IAAK,SACL,IAAK,OACH,OAAOvrE,EAET,IAAK,MACH,OAAOqrE,EAET,IAAK,KACH,OAAOH,EAET,IAAK,MACL,IAAK,OACL,IAAK,QACH,OAAOC,EAET,IAAK,MACL,IAAK,OACL,IAAK,QACH,OAAOC,EAET,IAAK,MACH,OAAOE,EAET,IAAK,MACH,OAAQ7qE,KAAKujE,OAAOI,IAEtB,IAAK,MACH,QAAS3jE,KAAKujE,OAAOI,IAEvB,IAAK,WACH,OAAOpB,EAGX,OAAO,IACT,EAGA,IAAIwI,EAAY5rE,EAAEqY,SACdwzD,EAAQ7rE,EAAEykE,KACVqH,EAAY9rE,EAAEukE,SAElBvkE,EAAEqY,SAAW,SAAS7U,EAAGikE,GACvB,GAAIjkE,KAEFA,EAAIA,EAAEgC,QAAQ,YAAa,KAEpBT,MAAMu+D,EAAIwB,qBACf,MAAM,IAAIrhE,UAAU,aAAeD,EAAI,6EAI3C,OAAOooE,EAAUvvE,KAAKwE,KAAM2C,EAAGikE,EACjC,EACAznE,EAAE+rE,OAAS/rE,EAAEqY,SACbrY,EAAEykE,KAAO,SAASjhE,EAAGikE,GACnB,OAAI5mE,KAAKujE,OAAOI,SACDvmE,IAANuF,EAAkB,GAAK3C,WAGtB5C,IAANuF,IACQ,IAANA,IACFA,EAAI,MAGFA,IAEkB,OADpBA,GAAK,IACCZ,OAAO,KACXY,EAAIA,EAAEV,UAAU,IAGlBwgE,EAAIkF,gBAAgBhlE,KAGjBqoE,EAAMxvE,KAAKwE,KAAM2C,EAAGikE,GAC7B,EACAznE,EAAEukE,SAAW,SAAS/gE,EAAGikE,GACvB,GAAI5mE,KAAKujE,OAAOI,IACd,YAAavmE,IAANuF,EAAkB,GAAK3C,KAGhC,QAAU5C,IAANuF,EAAiB,CACnB,IAAIzH,EAAI,CAAE4oE,uBAAwB9jE,KAAKujE,OAAOO,wBAE9C,GAAY,MADFrB,EAAI2E,UAAUzkE,EAAGzH,GAEzB,MAAM,IAAI0H,UAAU,aAAeD,EAAI,+CAGzCA,EAAIzH,EAAEwoE,SACF1jE,KAAKujE,OAAOO,wBACdrB,EAAIiF,oBAAoB/kE,EAAG3C,KAAKujE,OAAO/rD,SAE3C,CAEA,OAAOyzD,EAAUzvE,KAAKwE,KAAM2C,EAAGikE,EACjC,EAGAznE,EAAEgsE,OAAS,SAASxoE,EAAGikE,GACrB,GAAI5mE,KAAKujE,OAAOI,IACd,YAAavmE,IAANuF,EAAkB,GAAK3C,KAGhC,QAAU5C,IAANuF,EAAiB,CACnB,IAAI6U,EAAWxX,KAAKwX,WAEpB,OADgBxX,KAAKorE,aAKb5zD,EAAWA,EAAW,MAAQ,IAAMxX,KAAKorE,YAHxC,EAIX,CACE,IAAID,EAAS1I,EAAI9/D,GAKjB,OAJA3C,KACGwX,SAAS2zD,EAAO3zD,YAChB4zD,UAAUD,EAAOC,aACjBxE,OAAOA,GACH5mE,IAEX,EACAb,EAAEiB,KAAO,SAASuC,EAAGikE,GACnB,GAAI5mE,KAAKujE,OAAOI,IACd,YAAavmE,IAANuF,EAAkB,GAAK3C,KAGhC,QAAU5C,IAANuF,EACF,OAAO3C,KAAKujE,OAAOG,SAAWjB,EAAIyF,UAAUloE,KAAKujE,QAAU,GAG3D,GAAY,MADFd,EAAI2E,UAAUzkE,EAAG3C,KAAKujE,QAE9B,MAAM,IAAI3gE,UAAU,aAAeD,EAAI,+CAIzC,OADA3C,KAAK4mE,OAAOA,GACL5mE,IAEX,EACAb,EAAEisE,UAAY,SAASzoE,EAAGikE,GACxB,GAAI5mE,KAAKujE,OAAOI,IACd,YAAavmE,IAANuF,EAAkB,GAAK3C,KAGhC,QAAU5C,IAANuF,EACF,OAAO3C,KAAKujE,OAAOG,SAAWjB,EAAIwF,eAAejoE,KAAKujE,QAAU,GAGhE,GAAY,MADFd,EAAI0E,eAAexkE,EAAG3C,KAAKujE,QAEnC,MAAM,IAAI3gE,UAAU,aAAeD,EAAI,+CAIzC,OADA3C,KAAK4mE,OAAOA,GACL5mE,IAEX,EACAb,EAAEksE,SAAW,SAAS1oE,EAAGikE,GACvB,GAAI5mE,KAAKujE,OAAOI,IACd,YAAavmE,IAANuF,EAAkB,GAAK3C,KAGhC,QAAU5C,IAANuF,EAAiB,CACnB,IAAI2kE,EAAI7E,EAAI0F,cAAcnoE,KAAKujE,QAC/B,OAAO+D,EAAIA,EAAErlE,UAAU,EAAGqlE,EAAEzsE,OAAQ,GAAKysE,CAC3C,CAOE,MANsB,MAAlB3kE,EAAEA,EAAE9H,OAAO,KACb8H,GAAK,KAGP8/D,EAAImF,cAAcjlE,EAAG3C,KAAKujE,QAC1BvjE,KAAK4mE,OAAOA,GACL5mE,IAEX,EACAb,EAAEmsE,SAAW,SAAS3oE,EAAGikE,GACvB,IAAIniE,EAEJ,YAAUrH,IAANuF,EACK3C,KAAK2H,OAAS3H,KAAKugB,SAAWvgB,KAAKwgB,QAG5C/b,EAAQg+D,EAAI5+D,MAAMlB,GAClB3C,KAAKujE,OAAO57D,KAAOlD,EAAMkD,KACzB3H,KAAKujE,OAAOM,MAAQp/D,EAAMo/D,MAC1B7jE,KAAKujE,OAAOvuC,SAAWvwB,EAAMuwB,SAC7Bh1B,KAAK4mE,OAAOA,GACL5mE,KACT,EAGAb,EAAEosE,UAAY,SAAS5oE,EAAGikE,GACxB,GAAI5mE,KAAKujE,OAAOI,IACd,YAAavmE,IAANuF,EAAkB,GAAK3C,KAIhC,QAAU5C,IAANuF,EAAiB,CACnB,IAAK3C,KAAKujE,OAAOG,UAAY1jE,KAAK2gC,GAAG,MACnC,MAAO,GAIT,IAAIljB,EAAMzd,KAAKujE,OAAOG,SAAS7oE,OAASmF,KAAKmiE,SAAStnE,OAAS,EAC/D,OAAOmF,KAAKujE,OAAOG,SAASzhE,UAAU,EAAGwb,IAAQ,EACnD,CACE,IAAI9X,EAAI3F,KAAKujE,OAAOG,SAAS7oE,OAASmF,KAAKmiE,SAAStnE,OAChD2wE,EAAMxrE,KAAKujE,OAAOG,SAASzhE,UAAU,EAAG0D,GACxChB,EAAU,IAAIgG,OAAO,IAAMk4D,EAAY2I,IAM3C,GAJI7oE,GAAgC,MAA3BA,EAAEZ,OAAOY,EAAE9H,OAAS,KAC3B8H,GAAK,MAGiB,IAApBA,EAAE6B,QAAQ,KACZ,MAAM,IAAI5B,UAAU,iCAStB,OANID,GACF8/D,EAAIiF,oBAAoB/kE,EAAG3C,KAAKujE,OAAO/rD,UAGzCxX,KAAKujE,OAAOG,SAAW1jE,KAAKujE,OAAOG,SAAS/+D,QAAQA,EAAShC,GAC7D3C,KAAK4mE,OAAOA,GACL5mE,IAEX,EACAb,EAAEgjE,OAAS,SAASx/D,EAAGikE,GACrB,GAAI5mE,KAAKujE,OAAOI,IACd,YAAavmE,IAANuF,EAAkB,GAAK3C,KAShC,GANiB,mBAAN2C,IACTikE,EAAQjkE,EACRA,OAAIvF,QAIIA,IAANuF,EAAiB,CACnB,IAAK3C,KAAKujE,OAAOG,UAAY1jE,KAAK2gC,GAAG,MACnC,MAAO,GAIT,IAAI2mC,EAAItnE,KAAKujE,OAAOG,SAASx/D,MAAM,OACnC,GAAIojE,GAAKA,EAAEzsE,OAAS,EAClB,OAAOmF,KAAKujE,OAAOG,SAIrB,IAAIjmD,EAAMzd,KAAKujE,OAAOG,SAAS7oE,OAASmF,KAAKyrE,IAAI7E,GAAO/rE,OAAS,EAEjE,OADA4iB,EAAMzd,KAAKujE,OAAOG,SAASjxC,YAAY,IAAKhV,EAAK,GAAK,EAC/Czd,KAAKujE,OAAOG,SAASzhE,UAAUwb,IAAQ,EAChD,CACE,IAAK9a,EACH,MAAM,IAAIC,UAAU,2BAGtB,IAAwB,IAApBD,EAAE6B,QAAQ,KACZ,MAAM,IAAI5B,UAAU,iCAKtB,GAFA6/D,EAAIiF,oBAAoB/kE,EAAG3C,KAAKujE,OAAO/rD,WAElCxX,KAAKujE,OAAOG,UAAY1jE,KAAK2gC,GAAG,MACnC3gC,KAAKujE,OAAOG,SAAW/gE,MAClB,CACL,IAAIgC,EAAU,IAAIgG,OAAOk4D,EAAY7iE,KAAKmiE,UAAY,KACtDniE,KAAKujE,OAAOG,SAAW1jE,KAAKujE,OAAOG,SAAS/+D,QAAQA,EAAShC,EAC/D,CAGA,OADA3C,KAAK4mE,OAAOA,GACL5mE,IAEX,EACAb,EAAEssE,IAAM,SAAS9oE,EAAGikE,GAClB,GAAI5mE,KAAKujE,OAAOI,IACd,YAAavmE,IAANuF,EAAkB,GAAK3C,KAShC,GANiB,mBAAN2C,IACTikE,EAAQjkE,EACRA,OAAIvF,QAIIA,IAANuF,EAAiB,CACnB,IAAK3C,KAAKujE,OAAOG,UAAY1jE,KAAK2gC,GAAG,MACnC,MAAO,GAGT,IAAIoC,EAAM/iC,KAAKujE,OAAOG,SAASjxC,YAAY,KACvCg5C,EAAMzrE,KAAKujE,OAAOG,SAASzhE,UAAU8gC,EAAM,GAE/C,OAAc,IAAV6jC,GAAkB1E,GAAOA,EAAI1f,KAAKipB,EAAI3jE,gBACjCo6D,EAAI/3D,IAAInK,KAAKujE,OAAOG,WAGtB+H,CACT,CACE,IAAI9mE,EAEJ,IAAKhC,EACH,MAAM,IAAIC,UAAU,wBACf,GAAID,EAAEuB,MAAM,iBAAkB,CACnC,IAAIg+D,IAAOA,EAAIvhC,GAAGh+B,GAIhB,MAAM,IAAIC,UAAU,QAAUD,EAAI,6CAHlCgC,EAAU,IAAIgG,OAAOk4D,EAAY7iE,KAAKyrE,OAAS,KAC/CzrE,KAAKujE,OAAOG,SAAW1jE,KAAKujE,OAAOG,SAAS/+D,QAAQA,EAAShC,EAIjE,KAAO,KAAK3C,KAAKujE,OAAOG,UAAY1jE,KAAK2gC,GAAG,MAC1C,MAAM,IAAI+qC,eAAe,qCAEzB/mE,EAAU,IAAIgG,OAAOk4D,EAAY7iE,KAAKyrE,OAAS,KAC/CzrE,KAAKujE,OAAOG,SAAW1jE,KAAKujE,OAAOG,SAAS/+D,QAAQA,EAAShC,EAC/D,CAGA,OADA3C,KAAK4mE,OAAOA,GACL5mE,IAEX,EACAb,EAAEwsE,UAAY,SAAShpE,EAAGikE,GACxB,GAAI5mE,KAAKujE,OAAOI,IACd,YAAavmE,IAANuF,EAAkB,GAAK3C,KAGhC,QAAU5C,IAANuF,IAAyB,IAANA,EAAY,CACjC,IAAK3C,KAAKujE,OAAO57D,OAAS3H,KAAKujE,OAAOG,SACpC,MAAO,GAGT,GAAyB,MAArB1jE,KAAKujE,OAAO57D,KACd,MAAO,IAGT,IAAI8V,EAAMzd,KAAKujE,OAAO57D,KAAK9M,OAASmF,KAAK4rE,WAAW/wE,OAAS,EACzDyvE,EAAMtqE,KAAKujE,OAAO57D,KAAK1F,UAAU,EAAGwb,KAASzd,KAAKujE,OAAOG,SAAW,IAAM,IAE9E,OAAO/gE,EAAI8/D,EAAIqE,WAAWwD,GAAOA,CAEnC,CACE,IAAI3kE,EAAI3F,KAAKujE,OAAO57D,KAAK9M,OAASmF,KAAK4rE,WAAW/wE,OAC9C8wE,EAAY3rE,KAAKujE,OAAO57D,KAAK1F,UAAU,EAAG0D,GAC1ChB,EAAU,IAAIgG,OAAO,IAAMk4D,EAAY8I,IAqB3C,OAlBK3rE,KAAK2gC,GAAG,cACNh+B,IACHA,EAAI,KAGc,MAAhBA,EAAEZ,OAAO,KACXY,EAAI,IAAMA,IAKVA,GAAgC,MAA3BA,EAAEZ,OAAOY,EAAE9H,OAAS,KAC3B8H,GAAK,KAGPA,EAAI8/D,EAAIuE,WAAWrkE,GACnB3C,KAAKujE,OAAO57D,KAAO3H,KAAKujE,OAAO57D,KAAKhD,QAAQA,EAAShC,GACrD3C,KAAK4mE,OAAOA,GACL5mE,IAEX,EACAb,EAAEysE,SAAW,SAASjpE,EAAGikE,GACvB,GAAI5mE,KAAKujE,OAAOI,IACd,YAAavmE,IAANuF,EAAkB,GAAK3C,KAGhC,GAAiB,kBAAN2C,EAAgB,CACzB,IAAK3C,KAAKujE,OAAO57D,MAA6B,MAArB3H,KAAKujE,OAAO57D,KACnC,MAAO,GAGT,IAAIo7B,EAAM/iC,KAAKujE,OAAO57D,KAAK8qB,YAAY,KACnC63C,EAAMtqE,KAAKujE,OAAO57D,KAAK1F,UAAU8gC,EAAI,GAEzC,OAAOpgC,EAAI8/D,EAAIoJ,kBAAkBvB,GAAOA,CAC1C,CACE,IAAIwB,GAAmB,EAEH,MAAhBnpE,EAAEZ,OAAO,KACXY,EAAIA,EAAEV,UAAU,IAGdU,EAAEuB,MAAM,WACV4nE,GAAmB,GAGrB,IAAInnE,EAAU,IAAIgG,OAAOk4D,EAAY7iE,KAAK4rE,YAAc,KAUxD,OATAjpE,EAAI8/D,EAAIuE,WAAWrkE,GACnB3C,KAAKujE,OAAO57D,KAAO3H,KAAKujE,OAAO57D,KAAKhD,QAAQA,EAAShC,GAEjDmpE,EACF9rE,KAAK+rE,cAAcnF,GAEnB5mE,KAAK4mE,OAAOA,GAGP5mE,IAEX,EACAb,EAAE6sE,OAAS,SAASrpE,EAAGikE,GACrB,GAAI5mE,KAAKujE,OAAOI,IACd,YAAavmE,IAANuF,EAAkB,GAAK3C,KAGhC,QAAU5C,IAANuF,IAAyB,IAANA,EAAY,CACjC,IAAK3C,KAAKujE,OAAO57D,MAA6B,MAArB3H,KAAKujE,OAAO57D,KACnC,MAAO,GAGT,IAEI3I,EAAGsrE,EAFHsB,EAAW5rE,KAAK4rE,WAChB7oC,EAAM6oC,EAASn5C,YAAY,KAG/B,OAAa,IAATsQ,EACK,IAIT/jC,EAAI4sE,EAAS3pE,UAAU8gC,EAAI,GAC3BunC,EAAM,gBAAkBrrE,KAAKD,GAAKA,EAAI,GAC/B2D,EAAI8/D,EAAIoJ,kBAAkBvB,GAAOA,EAC1C,CACsB,MAAhB3nE,EAAEZ,OAAO,KACXY,EAAIA,EAAEV,UAAU,IAGlB,IACI0C,EADAqnE,EAAShsE,KAAKgsE,SAGlB,GAAKA,EASHrnE,EAHUhC,EAGA,IAAIgI,OAAOk4D,EAAYmJ,GAAU,KAFjC,IAAIrhE,OAAOk4D,EAAY,IAAMmJ,GAAU,SAPtC,CACX,IAAKrpE,EACH,OAAO3C,KAGTA,KAAKujE,OAAO57D,MAAQ,IAAM86D,EAAIuE,WAAWrkE,EAC3C,CAYA,OANIgC,IACFhC,EAAI8/D,EAAIuE,WAAWrkE,GACnB3C,KAAKujE,OAAO57D,KAAO3H,KAAKujE,OAAO57D,KAAKhD,QAAQA,EAAShC,IAGvD3C,KAAK4mE,OAAOA,GACL5mE,IAEX,EACAb,EAAE2pE,QAAU,SAASA,EAASnmE,EAAGikE,GAC/B,IAAIqF,EAAYjsE,KAAKujE,OAAOI,IAAM,IAAM,IACpCh8D,EAAO3H,KAAK2H,OACZukE,EAAoC,MAAzBvkE,EAAK1F,UAAU,EAAG,GAC7B0/D,EAAWh6D,EAAK/C,MAAMqnE,GAQ1B,QANgB7uE,IAAZ0rE,GAA4C,kBAAZA,IAClClC,EAAQjkE,EACRA,EAAImmE,EACJA,OAAU1rE,QAGIA,IAAZ0rE,GAA4C,kBAAZA,EAClC,MAAM,IAAIzkE,MAAM,gBAAkBykE,EAAU,8BAY9C,GATIoD,GACFvK,EAASx7D,QAGP2iE,EAAU,IAEZA,EAAUx3D,KAAKnV,IAAIwlE,EAAS9mE,OAASiuE,EAAS,SAGtC1rE,IAANuF,EAEF,YAAmBvF,IAAZ0rE,EACHnH,EACAA,EAASmH,GAER,GAAgB,OAAZA,QAA0C1rE,IAAtBukE,EAASmH,GACtC,GAAI38C,EAAQxpB,GAAI,CACdg/D,EAAW,GAEX,IAAK,IAAIhnE,EAAE,EAAGmtB,EAAEnlB,EAAE9H,OAAQF,EAAImtB,EAAGntB,KAC1BgI,EAAEhI,GAAGE,QAAY8mE,EAAS9mE,QAAW8mE,EAASA,EAAS9mE,OAAQ,GAAGA,UAInE8mE,EAAS9mE,SAAW8mE,EAASA,EAAS9mE,OAAQ,GAAGA,QACnD8mE,EAASv8D,MAGXu8D,EAAS3lE,KAAKonE,EAAYzgE,EAAEhI,KAEhC,MAAWgI,GAAkB,kBAANA,KACrBA,EAAIygE,EAAYzgE,GACqB,KAAjCg/D,EAASA,EAAS9mE,OAAQ,GAG5B8mE,EAASA,EAAS9mE,OAAQ,GAAK8H,EAE/Bg/D,EAAS3lE,KAAK2G,SAIdA,EACFg/D,EAASmH,GAAW1F,EAAYzgE,GAEhCg/D,EAAS91C,OAAOi9C,EAAS,GAQ7B,OAJIoD,GACFvK,EAASn0C,QAAQ,IAGZxtB,KAAK2H,KAAKg6D,EAASpjE,KAAK0tE,GAAYrF,EAC7C,EACAznE,EAAEgtE,aAAe,SAASrD,EAASnmE,EAAGikE,GACpC,IAAIjF,EAAUhnE,EAAGmtB,EAQjB,GANuB,kBAAZghD,IACTlC,EAAQjkE,EACRA,EAAImmE,EACJA,OAAU1rE,QAGFA,IAANuF,EAAiB,CAEnB,GAAKwpB,EADLw1C,EAAW3hE,KAAK8oE,QAAQA,EAASnmE,EAAGikE,IAIlC,IAAKjsE,EAAI,EAAGmtB,EAAI65C,EAAS9mE,OAAQF,EAAImtB,EAAGntB,IACtCgnE,EAAShnE,GAAK8nE,EAAI+C,OAAO7D,EAAShnE,SAHpCgnE,OAAwBvkE,IAAbukE,EAAyBc,EAAI+C,OAAO7D,QAAYvkE,EAO7D,OAAOukE,CACT,CAEA,GAAKx1C,EAAQxpB,GAGX,IAAKhI,EAAI,EAAGmtB,EAAInlB,EAAE9H,OAAQF,EAAImtB,EAAGntB,IAC/BgI,EAAEhI,GAAK8nE,EAAI8C,OAAO5iE,EAAEhI,SAHtBgI,EAAkB,kBAANA,GAAkBA,aAAaY,OAAUk/D,EAAI8C,OAAO5iE,GAAKA,EAOvE,OAAO3C,KAAK8oE,QAAQA,EAASnmE,EAAGikE,EAClC,EAGA,IAAI3mC,EAAI9gC,EAAE0kE,MA0eV,OAzeA1kE,EAAE0kE,MAAQ,SAASlhE,EAAGikE,GACpB,IAAU,IAANjkE,EACF,OAAO8/D,EAAIqF,WAAW9nE,KAAKujE,OAAOM,MAAO7jE,KAAKujE,OAAOS,kBAChD,GAAiB,oBAANrhE,EAAkB,CAClC,IAAI2D,EAAOm8D,EAAIqF,WAAW9nE,KAAKujE,OAAOM,MAAO7jE,KAAKujE,OAAOS,kBACrDloE,EAAS6G,EAAEnH,KAAKwE,KAAMsG,GAG1B,OAFAtG,KAAKujE,OAAOM,MAAQpB,EAAI2F,WAAWtsE,GAAUwK,EAAMtG,KAAKujE,OAAOQ,yBAA0B/jE,KAAKujE,OAAOS,kBACrGhkE,KAAK4mE,OAAOA,GACL5mE,IACT,CAAO,YAAU5C,IAANuF,GAAgC,kBAANA,GACnC3C,KAAKujE,OAAOM,MAAQpB,EAAI2F,WAAWzlE,EAAG3C,KAAKujE,OAAOQ,yBAA0B/jE,KAAKujE,OAAOS,kBACxFhkE,KAAK4mE,OAAOA,GACL5mE,MAEAigC,EAAEzkC,KAAKwE,KAAM2C,EAAGikE,EAE3B,EACAznE,EAAEqpE,SAAW,SAASjpE,EAAMlD,EAAOuqE,GACjC,IAAItgE,EAAOm8D,EAAIqF,WAAW9nE,KAAKujE,OAAOM,MAAO7jE,KAAKujE,OAAOS,kBAEzD,GAAoB,kBAATzkE,GAAqBA,aAAgBgE,OAC9C+C,EAAK/G,QAAkBnC,IAAVf,EAAsBA,EAAQ,SACtC,IAAoB,kBAATkD,EAOhB,MAAM,IAAIqD,UAAU,kEANpB,IAAK,IAAIjE,KAAOY,EACVqjE,EAAOpnE,KAAK+D,EAAMZ,KACpB2H,EAAK3H,GAAOY,EAAKZ,GAKvB,CAQA,OANAqB,KAAKujE,OAAOM,MAAQpB,EAAI2F,WAAW9hE,EAAMtG,KAAKujE,OAAOQ,yBAA0B/jE,KAAKujE,OAAOS,kBACvE,kBAATzkE,IACTqnE,EAAQvqE,GAGV2D,KAAK4mE,OAAOA,GACL5mE,IACT,EACAb,EAAEopE,SAAW,SAAShpE,EAAMlD,EAAOuqE,GACjC,IAAItgE,EAAOm8D,EAAIqF,WAAW9nE,KAAKujE,OAAOM,MAAO7jE,KAAKujE,OAAOS,kBAQzD,OAPAvB,EAAI8F,SAASjiE,EAAM/G,OAAgBnC,IAAVf,EAAsB,KAAOA,GACtD2D,KAAKujE,OAAOM,MAAQpB,EAAI2F,WAAW9hE,EAAMtG,KAAKujE,OAAOQ,yBAA0B/jE,KAAKujE,OAAOS,kBACvE,kBAATzkE,IACTqnE,EAAQvqE,GAGV2D,KAAK4mE,OAAOA,GACL5mE,IACT,EACAb,EAAEspE,YAAc,SAASlpE,EAAMlD,EAAOuqE,GACpC,IAAItgE,EAAOm8D,EAAIqF,WAAW9nE,KAAKujE,OAAOM,MAAO7jE,KAAKujE,OAAOS,kBAQzD,OAPAvB,EAAIgG,YAAYniE,EAAM/G,EAAMlD,GAC5B2D,KAAKujE,OAAOM,MAAQpB,EAAI2F,WAAW9hE,EAAMtG,KAAKujE,OAAOQ,yBAA0B/jE,KAAKujE,OAAOS,kBACvE,kBAATzkE,IACTqnE,EAAQvqE,GAGV2D,KAAK4mE,OAAOA,GACL5mE,IACT,EACAb,EAAEupE,SAAW,SAASnpE,EAAMlD,EAAOssE,GACjC,IAAIriE,EAAOm8D,EAAIqF,WAAW9nE,KAAKujE,OAAOM,MAAO7jE,KAAKujE,OAAOS,kBACzD,OAAOvB,EAAIiG,SAASpiE,EAAM/G,EAAMlD,EAAOssE,EACzC,EACAxpE,EAAEitE,UAAYjtE,EAAEqpE,SAChBrpE,EAAEktE,UAAYltE,EAAEopE,SAChBppE,EAAEmtE,aAAentE,EAAEspE,YACnBtpE,EAAEotE,UAAYptE,EAAEupE,SAGhBvpE,EAAE6pE,UAAY,WACZ,OAAIhpE,KAAKujE,OAAOI,IACP3jE,KACJwsE,mBAAkB,GAClBT,eAAc,GACdU,gBAAe,GACfC,mBAAkB,GAClB9F,QAGE5mE,KACJwsE,mBAAkB,GAClBG,mBAAkB,GAClBC,eAAc,GACdb,eAAc,GACdU,gBAAe,GACfC,mBAAkB,GAClB9F,OACL,EACAznE,EAAEqtE,kBAAoB,SAAS5F,GAM7B,MALoC,kBAAzB5mE,KAAKujE,OAAO/rD,WACrBxX,KAAKujE,OAAO/rD,SAAWxX,KAAKujE,OAAO/rD,SAAS1P,cAC5C9H,KAAK4mE,OAAOA,IAGP5mE,IACT,EACAb,EAAEwtE,kBAAoB,SAAS/F,GAY7B,OAXI5mE,KAAKujE,OAAOG,WACV1jE,KAAK2gC,GAAG,QAAU4hC,EACpBviE,KAAKujE,OAAOG,SAAWnB,EAASyH,QAAQhqE,KAAKujE,OAAOG,UAC3C1jE,KAAK2gC,GAAG,SAAW4gC,IAC5BvhE,KAAKujE,OAAOG,SAAWnC,EAAKC,KAAKxhE,KAAKujE,OAAOG,WAG/C1jE,KAAKujE,OAAOG,SAAW1jE,KAAKujE,OAAOG,SAAS57D,cAC5C9H,KAAK4mE,OAAOA,IAGP5mE,IACT,EACAb,EAAEytE,cAAgB,SAAShG,GAOzB,MALoC,kBAAzB5mE,KAAKujE,OAAO/rD,UAAyBxX,KAAKujE,OAAOK,OAASnB,EAAIkC,aAAa3kE,KAAKujE,OAAO/rD,YAChGxX,KAAKujE,OAAOK,KAAO,KACnB5jE,KAAK4mE,OAAOA,IAGP5mE,IACT,EACAb,EAAE4sE,cAAgB,SAASnF,GACzB,IAiBIiG,EAjBAC,EAAQ9sE,KAAKujE,OAAO57D,KACxB,IAAKmlE,EACH,OAAO9sE,KAGT,GAAIA,KAAKujE,OAAOI,IAGd,OAFA3jE,KAAKujE,OAAO57D,KAAO86D,EAAIwE,cAAcjnE,KAAKujE,OAAO57D,MACjD3H,KAAK4mE,OAAOA,GACL5mE,KAGT,GAAyB,MAArBA,KAAKujE,OAAO57D,KACd,OAAO3H,KAMT,IACI+sE,EAASC,EADTC,EAAkB,GA4BtB,IAxBwB,OAPxBH,EAAQrK,EAAIuE,WAAW8F,IAOb/qE,OAAO,KACf8qE,GAAgB,EAChBC,EAAQ,IAAMA,GAIQ,QAApBA,EAAM5nE,OAAO,IAAoC,OAApB4nE,EAAM5nE,OAAO,KAC5C4nE,GAAS,KAIXA,EAAQA,EACLnoE,QAAQ,uBAAwB,KAChCA,QAAQ,UAAW,KAGlBkoE,IACFI,EAAkBH,EAAM7qE,UAAU,GAAGiC,MAAM,eAAiB,MAE1D+oE,EAAkBA,EAAgB,KAOnB,KADjBF,EAAUD,EAAMvsD,OAAO,kBAIA,IAAZwsD,IAOG,KADdC,EAAOF,EAAM7qE,UAAU,EAAG8qE,GAASt6C,YAAY,QAE7Cu6C,EAAOD,GAETD,EAAQA,EAAM7qE,UAAU,EAAG+qE,GAAQF,EAAM7qE,UAAU8qE,EAAU,IAR3DD,EAAQA,EAAM7qE,UAAU,GAkB5B,OANI4qE,GAAiB7sE,KAAK2gC,GAAG,cAC3BmsC,EAAQG,EAAkBH,EAAM7qE,UAAU,IAG5CjC,KAAKujE,OAAO57D,KAAOmlE,EACnB9sE,KAAK4mE,OAAOA,GACL5mE,IACT,EACAb,EAAE+tE,kBAAoB/tE,EAAE4sE,cACxB5sE,EAAEstE,eAAiB,SAAS7F,GAW1B,MAViC,kBAAtB5mE,KAAKujE,OAAOM,QAChB7jE,KAAKujE,OAAOM,MAAMhpE,OAGrBmF,KAAK6jE,MAAMpB,EAAIqF,WAAW9nE,KAAKujE,OAAOM,MAAO7jE,KAAKujE,OAAOS,mBAFzDhkE,KAAKujE,OAAOM,MAAQ,KAKtB7jE,KAAK4mE,OAAOA,IAGP5mE,IACT,EACAb,EAAEutE,kBAAoB,SAAS9F,GAM7B,OALK5mE,KAAKujE,OAAOvuC,WACfh1B,KAAKujE,OAAOvuC,SAAW,KACvBh1B,KAAK4mE,OAAOA,IAGP5mE,IACT,EACAb,EAAEguE,gBAAkBhuE,EAAEstE,eACtBttE,EAAEiuE,cAAgBjuE,EAAEutE,kBAEpBvtE,EAAEsmE,QAAU,WAEV,IAAI9/D,EAAI88D,EAAI8C,OACR5wD,EAAI8tD,EAAI+C,OAEZ/C,EAAI8C,OAASn8C,OACbq5C,EAAI+C,OAASlwC,mBACb,IACEt1B,KAAKgpE,WACP,CAAE,QACAvG,EAAI8C,OAAS5/D,EACb88D,EAAI+C,OAAS7wD,CACf,CACA,OAAO3U,IACT,EAEAb,EAAEwmE,QAAU,WAEV,IAAIhgE,EAAI88D,EAAI8C,OACR5wD,EAAI8tD,EAAI+C,OAEZ/C,EAAI8C,OAASjC,EACbb,EAAI+C,OAASE,SACb,IACE1lE,KAAKgpE,WACP,CAAE,QACAvG,EAAI8C,OAAS5/D,EACb88D,EAAI+C,OAAS7wD,CACf,CACA,OAAO3U,IACT,EAEAb,EAAEkuE,SAAW,WACX,IAAItE,EAAM/oE,KAAKipB,QAEf8/C,EAAIvF,SAAS,IAAIC,SAAS,IAAIuF,YAC9B,IAAI1B,EAAI,GAqBR,GApBIyB,EAAIxF,OAAO/rD,WACb8vD,GAAKyB,EAAIxF,OAAO/rD,SAAW,OAGzBuxD,EAAIxF,OAAOG,WACTqF,EAAIpoC,GAAG,aAAe4hC,GACxB+E,GAAK/E,EAAS+K,UAAUvE,EAAIxF,OAAOG,UAC/BqF,EAAIxF,OAAOK,OACb0D,GAAK,IAAMyB,EAAIxF,OAAOK,OAGxB0D,GAAKyB,EAAI3oE,QAIT2oE,EAAIxF,OAAOG,UAAYqF,EAAIxF,OAAO57D,MAAsC,MAA9BohE,EAAIxF,OAAO57D,KAAK5F,OAAO,KACnEulE,GAAK,KAGPA,GAAKyB,EAAIphE,MAAK,GACVohE,EAAIxF,OAAOM,MAAO,CAEpB,IADA,IAAI5jC,EAAI,GACCtlC,EAAI,EAAG4yE,EAAKxE,EAAIxF,OAAOM,MAAMj/D,MAAM,KAAMkjB,EAAIylD,EAAG1yE,OAAQF,EAAImtB,EAAGntB,IAAK,CAC3E,IAAI6yE,GAAMD,EAAG5yE,IAAM,IAAIiK,MAAM,KAC7Bq7B,GAAK,IAAMwiC,EAAIyD,YAAYsH,EAAG,GAAIxtE,KAAKujE,OAAOS,kBAC3Cr/D,QAAQ,KAAM,YAEHvH,IAAVowE,EAAG,KACLvtC,GAAK,IAAMwiC,EAAIyD,YAAYsH,EAAG,GAAIxtE,KAAKujE,OAAOS,kBAC3Cr/D,QAAQ,KAAM,OAErB,CACA2iE,GAAK,IAAMrnC,EAAEh+B,UAAU,EACzB,CAGA,OADAqlE,GAAK7E,EAAIyD,YAAY6C,EAAIvoD,QAAQ,EAEnC,EAGArhB,EAAEwjE,WAAa,SAASvxD,GACtB,IAEIq8D,EAAS9yE,EAAGwE,EAFZuuE,EAAW1tE,KAAKipB,QAChBu2B,EAAa,CAAC,WAAY,WAAY,WAAY,WAAY,QAGlE,GAAIx/C,KAAKujE,OAAOI,IACd,MAAM,IAAIt/D,MAAM,kEAOlB,GAJM+M,aAAgBqxD,IACpBrxD,EAAO,IAAIqxD,EAAIrxD,IAGbs8D,EAASnK,OAAO/rD,SAElB,OAAOk2D,EAKT,GAHEA,EAASnK,OAAO/rD,SAAWpG,EAAKmyD,OAAO/rD,SAGrCxX,KAAKujE,OAAOG,SACd,OAAOgK,EAGT,IAAK/yE,EAAI,EAAIwE,EAAIqgD,EAAW7kD,GAAKA,IAC/B+yE,EAASnK,OAAOpkE,GAAKiS,EAAKmyD,OAAOpkE,GAsBnC,OAnBKuuE,EAASnK,OAAO57D,MAMwB,OAAvC+lE,EAASnK,OAAO57D,KAAK1F,WAAW,KAClCyrE,EAASnK,OAAO57D,MAAQ,KAGQ,MAA9B+lE,EAAS/lE,OAAO5F,OAAO,KAEzB0rE,GADAA,EAAUr8D,EAAKu6D,eAC4C,IAA7Bv6D,EAAKzJ,OAAOnD,QAAQ,KAAa,IAAM,IACrEkpE,EAASnK,OAAO57D,MAAQ8lE,EAAWA,EAAU,IAAO,IAAMC,EAASnK,OAAO57D,KAC1E+lE,EAAS3B,mBAbX2B,EAASnK,OAAO57D,KAAOyJ,EAAKmyD,OAAO57D,KAC9B+lE,EAASnK,OAAOM,QACnB6J,EAASnK,OAAOM,MAAQzyD,EAAKmyD,OAAOM,QAexC6J,EAAS9G,QACF8G,CACT,EACAvuE,EAAEwuE,WAAa,SAASv8D,GACtB,IACIw8D,EAAeC,EAAWC,EAAQC,EAAcC,EADhDlD,EAAW9qE,KAAKipB,QAAQ+/C,YAG5B,GAAI8B,EAASvH,OAAOI,IAClB,MAAM,IAAIt/D,MAAM,kEASlB,GANA+M,EAAO,IAAIqxD,EAAIrxD,GAAM43D,YACrB4E,EAAgB9C,EAASvH,OACzBsK,EAAYz8D,EAAKmyD,OACjBwK,EAAejD,EAASnjE,OACxBqmE,EAAW58D,EAAKzJ,OAEe,MAA3BomE,EAAahsE,OAAO,GACtB,MAAM,IAAIsC,MAAM,2BAGlB,GAA2B,MAAvB2pE,EAASjsE,OAAO,GAClB,MAAM,IAAIsC,MAAM,2DAOlB,GAJIupE,EAAcp2D,WAAaq2D,EAAUr2D,WACvCo2D,EAAcp2D,SAAW,MAGvBo2D,EAAcpK,WAAaqK,EAAUrK,UAAYoK,EAAcnK,WAAaoK,EAAUpK,SACxF,OAAOqH,EAASlE,QAGlB,GAA+B,OAA3BgH,EAAcp2D,UAAgD,OAA3Bo2D,EAAcpK,UAAgD,OAA3BoK,EAAcnK,SACtF,OAAOqH,EAASlE,QAGlB,GAAIgH,EAAclK,WAAamK,EAAUnK,UAAYkK,EAAchK,OAASiK,EAAUjK,KAIpF,OAAOkH,EAASlE,QAGlB,GANEgH,EAAclK,SAAW,KACzBkK,EAAchK,KAAO,KAKnBmK,IAAiBC,EAEnB,OADAJ,EAAcjmE,KAAO,GACdmjE,EAASlE,QAOlB,KAHAkH,EAASrL,EAAIwG,WAAW8E,EAAcC,IAIpC,OAAOlD,EAASlE,QAGlB,IAAIqH,EAAUJ,EAAUlmE,KACrB1F,UAAU6rE,EAAOjzE,QACjB8J,QAAQ,UAAW,IACnBA,QAAQ,SAAU,OAIrB,OAFAipE,EAAcjmE,KAAQsmE,EAAUL,EAAcjmE,KAAK1F,UAAU6rE,EAAOjzE,SAAY,KAEzEiwE,EAASlE,OAClB,EAGAznE,EAAE+uE,OAAS,SAASnF,GAClB,IAEIoF,EACAC,EAEAC,EAAWC,EAAW3vE,EALtB41C,EAAMv0C,KAAKipB,QACXk6C,EAAM,IAAIV,EAAIsG,GAGdxV,EAAU,CAAC,EAOf,GAJAhf,EAAIy0B,YACJ7F,EAAI6F,YAGAz0B,EAAIh5C,aAAe4nE,EAAI5nE,WACzB,OAAO,EAUT,GANA8yE,EAAY95B,EAAIsvB,QAChByK,EAAYnL,EAAIU,QAChBtvB,EAAIsvB,MAAM,IACVV,EAAIU,MAAM,IAGNtvB,EAAIh5C,aAAe4nE,EAAI5nE,WACzB,OAAO,EAIT,GAAI8yE,EAAUxzE,SAAWyzE,EAAUzzE,OACjC,OAAO,EAMT,IAAK8D,KAHLwvE,EAAU1L,EAAIqF,WAAWuG,EAAWruE,KAAKujE,OAAOS,kBAChDoK,EAAU3L,EAAIqF,WAAWwG,EAAWtuE,KAAKujE,OAAOS,kBAEpCmK,EACV,GAAIvL,EAAOpnE,KAAK2yE,EAASxvE,GAAM,CAC7B,GAAKwtB,EAAQgiD,EAAQxvE,KAId,IAAKukE,EAAYiL,EAAQxvE,GAAMyvE,EAAQzvE,IAC5C,OAAO,OAJP,GAAIwvE,EAAQxvE,KAASyvE,EAAQzvE,GAC3B,OAAO,EAMX40D,EAAQ50D,IAAO,CACjB,CAGF,IAAKA,KAAOyvE,EACV,GAAIxL,EAAOpnE,KAAK4yE,EAASzvE,KAClB40D,EAAQ50D,GAEX,OAAO,EAKb,OAAO,CACT,EAGAQ,EAAE2kE,uBAAyB,SAASnhE,GAElC,OADA3C,KAAKujE,OAAOO,yBAA2BnhE,EAChC3C,IACT,EAEAb,EAAE4kE,yBAA2B,SAASphE,GAEpC,OADA3C,KAAKujE,OAAOQ,2BAA6BphE,EAClC3C,IACT,EAEAb,EAAE6kE,iBAAmB,SAASrhE,GAE5B,OADA3C,KAAKujE,OAAOS,mBAAqBrhE,EAC1B3C,IACT,EAEOyiE,CACT,0BC3zEA,iBACE,SAASrhE,GAGsCjH,GAC9CA,EAAQmmC,SACoCpmC,GAC5CA,EAAOomC,SAHT,IAIIiuC,EAA8B,iBAAV,EAAAhqD,GAAsB,EAAAA,EAE7CgqD,EAAW/pD,SAAW+pD,GACtBA,EAAWruE,SAAWquE,GACtBA,EAAW79D,KAUZ,IAAI6xD,EAGJiM,EAAS,WAGTp9D,EAAO,GACPq9D,EAAO,EACPC,EAAO,GACPC,EAAO,GACPC,EAAO,IACPC,EAAc,GACdC,EAAW,IACXC,EAAY,IAGZC,EAAgB,QAChBC,EAAgB,eAChBC,EAAkB,4BAGlBhjE,EAAS,CACR,SAAY,kDACZ,YAAa,iDACb,gBAAiB,iBAIlBijE,EAAgB/9D,EAAOq9D,EACvB3vC,EAAQxtB,KAAKwtB,MACbswC,EAAqB7rE,OAAO8rE,aAa5B,SAASvrE,EAAMhD,GACd,MAAM,IAAIwuE,WAAWpjE,EAAOpL,GAC7B,CAUA,SAASiE,EAAI+mB,EAAOtxB,GAGnB,IAFA,IAAIK,EAASixB,EAAMjxB,OACfiB,EAAS,GACNjB,KACNiB,EAAOjB,GAAUL,EAAGsxB,EAAMjxB,IAE3B,OAAOiB,CACR,CAYA,SAASyzE,EAAUhwC,EAAQ/kC,GAC1B,IAAIiK,EAAQ86B,EAAO36B,MAAM,KACrB9I,EAAS,GAWb,OAVI2I,EAAM5J,OAAS,IAGlBiB,EAAS2I,EAAM,GAAK,IACpB86B,EAAS96B,EAAM,IAMT3I,EADOiJ,GAFdw6B,EAASA,EAAO56B,QAAQuqE,EAAiB,MACrBtqE,MAAM,KACApK,GAAI+D,KAAK,IAEpC,CAeA,SAASixE,EAAWjwC,GAMnB,IALA,IAGIljC,EACAk8D,EAJAkX,EAAS,GACTC,EAAU,EACV70E,EAAS0kC,EAAO1kC,OAGb60E,EAAU70E,IAChBwB,EAAQkjC,EAAO0W,WAAWy5B,OACb,OAAUrzE,GAAS,OAAUqzE,EAAU70E,EAG3B,QAAX,OADb09D,EAAQh5B,EAAO0W,WAAWy5B,OAEzBD,EAAOzzE,OAAe,KAARK,IAAkB,KAAe,KAARk8D,GAAiB,QAIxDkX,EAAOzzE,KAAKK,GACZqzE,KAGDD,EAAOzzE,KAAKK,GAGd,OAAOozE,CACR,CAUA,SAASE,EAAW7jD,GACnB,OAAO/mB,EAAI+mB,GAAO,SAASzvB,GAC1B,IAAIozE,EAAS,GAOb,OANIpzE,EAAQ,QAEXozE,GAAUL,GADV/yE,GAAS,SAC8B,GAAK,KAAQ,OACpDA,EAAQ,MAAiB,KAARA,GAElBozE,GAAUL,EAAmB/yE,EAE9B,IAAGkC,KAAK,GACT,CAmCA,SAASqxE,EAAaC,EAAO5mE,GAG5B,OAAO4mE,EAAQ,GAAK,IAAMA,EAAQ,MAAgB,GAAR5mE,IAAc,EACzD,CAOA,SAAS6mE,EAAMC,EAAOC,EAAWC,GAChC,IAAItyE,EAAI,EAGR,IAFAoyE,EAAQE,EAAYnxC,EAAMixC,EAAQnB,GAAQmB,GAAS,EACnDA,GAASjxC,EAAMixC,EAAQC,GACOD,EAAQZ,EAAgBT,GAAQ,EAAG/wE,GAAKyT,EACrE2+D,EAAQjxC,EAAMixC,EAAQZ,GAEvB,OAAOrwC,EAAMnhC,GAAKwxE,EAAgB,GAAKY,GAASA,EAAQpB,GACzD,CASA,SAASnJ,EAAOj0B,GAEf,IAEIwE,EAIAm6B,EACA7sE,EACAkM,EACA4gE,EACAC,EACAzyE,EACAkyE,EACAvI,EAEA+I,EArEiBC,EAsDjBb,EAAS,GACTc,EAAch/B,EAAM12C,OAEpBF,EAAI,EACJ8G,EAAIqtE,EACJ0B,EAAO3B,EAqBX,KALAqB,EAAQ3+B,EAAM9e,YAAYs8C,IACd,IACXmB,EAAQ,GAGJ7sE,EAAI,EAAGA,EAAI6sE,IAAS7sE,EAEpBkuC,EAAM0E,WAAW5yC,IAAM,KAC1BS,EAAM,aAEP2rE,EAAOzzE,KAAKu1C,EAAM0E,WAAW5yC,IAM9B,IAAKkM,EAAQ2gE,EAAQ,EAAIA,EAAQ,EAAI,EAAG3gE,EAAQghE,GAAwC,CAOvF,IAAKJ,EAAOx1E,EAAGy1E,EAAI,EAAGzyE,EAAIyT,EAErB7B,GAASghE,GACZzsE,EAAM,mBAGP+rE,GAxGmBS,EAwGE/+B,EAAM0E,WAAW1mC,MAvGxB,GAAK,GACb+gE,EAAY,GAEhBA,EAAY,GAAK,GACbA,EAAY,GAEhBA,EAAY,GAAK,GACbA,EAAY,GAEbl/D,IAgGQA,GAAQy+D,EAAQ/wC,GAAO0vC,EAAS7zE,GAAKy1E,KACjDtsE,EAAM,YAGPnJ,GAAKk1E,EAAQO,IAGTP,GAFJvI,EAAI3pE,GAAK6yE,EAAO/B,EAAQ9wE,GAAK6yE,EAAO9B,EAAOA,EAAO/wE,EAAI6yE,IAbH7yE,GAAKyT,EAoBpDg/D,EAAItxC,EAAM0vC,GADd6B,EAAaj/D,EAAOk2D,KAEnBxjE,EAAM,YAGPssE,GAAKC,EAKNG,EAAOV,EAAMn1E,EAAIw1E,EADjBp6B,EAAM05B,EAAO50E,OAAS,EACc,GAARs1E,GAIxBrxC,EAAMnkC,EAAIo7C,GAAOy4B,EAAS/sE,GAC7BqC,EAAM,YAGPrC,GAAKq9B,EAAMnkC,EAAIo7C,GACfp7C,GAAKo7C,EAGL05B,EAAO5jD,OAAOlxB,IAAK,EAAG8G,EAEvB,CAEA,OAAOkuE,EAAWF,EACnB,CASA,SAASlK,EAAOh0B,GACf,IAAI9vC,EACAsuE,EACAU,EACAC,EACAF,EACAntE,EACAihB,EACA2b,EACAtiC,EACA2pE,EACAqJ,EAGAJ,EAEAK,EACAP,EACAQ,EANApB,EAAS,GAoBb,IARAc,GAHAh/B,EAAQi+B,EAAWj+B,IAGC12C,OAGpB4G,EAAIqtE,EACJiB,EAAQ,EACRS,EAAO3B,EAGFxrE,EAAI,EAAGA,EAAIktE,IAAeltE,GAC9BstE,EAAep/B,EAAMluC,IACF,KAClBosE,EAAOzzE,KAAKozE,EAAmBuB,IAejC,IAXAF,EAAiBC,EAAcjB,EAAO50E,OAMlC61E,GACHjB,EAAOzzE,KAAK+yE,GAIN0B,EAAiBF,GAAa,CAIpC,IAAKjsD,EAAIkqD,EAAQnrE,EAAI,EAAGA,EAAIktE,IAAeltE,GAC1CstE,EAAep/B,EAAMluC,KACD5B,GAAKkvE,EAAersD,IACvCA,EAAIqsD,GAcN,IAPIrsD,EAAI7iB,EAAIq9B,GAAO0vC,EAASuB,IAD5Ba,EAAwBH,EAAiB,KAExC3sE,EAAM,YAGPisE,IAAUzrD,EAAI7iB,GAAKmvE,EACnBnvE,EAAI6iB,EAECjhB,EAAI,EAAGA,EAAIktE,IAAeltE,EAO9B,IANAstE,EAAep/B,EAAMluC,IAEF5B,KAAOsuE,EAAQvB,GACjC1qE,EAAM,YAGH6sE,GAAgBlvE,EAAG,CAEtB,IAAKw+B,EAAI8vC,EAAOpyE,EAAIyT,IAEf6uB,GADJqnC,EAAI3pE,GAAK6yE,EAAO/B,EAAQ9wE,GAAK6yE,EAAO9B,EAAOA,EAAO/wE,EAAI6yE,IADT7yE,GAAKyT,EAKlDy/D,EAAU5wC,EAAIqnC,EACd+I,EAAaj/D,EAAOk2D,EACpBmI,EAAOzzE,KACNozE,EAAmBQ,EAAatI,EAAIuJ,EAAUR,EAAY,KAE3DpwC,EAAInB,EAAM+xC,EAAUR,GAGrBZ,EAAOzzE,KAAKozE,EAAmBQ,EAAa3vC,EAAG,KAC/CuwC,EAAOV,EAAMC,EAAOa,EAAuBH,GAAkBC,GAC7DX,EAAQ,IACNU,CACH,GAGCV,IACAtuE,CAEH,CACA,OAAOguE,EAAOlxE,KAAK,GACpB,CA2CAgkE,EAAW,CAMV,QAAW,QAQX,KAAQ,CACP,OAAUiN,EACV,OAAUG,GAEX,OAAUnK,EACV,OAAUD,EACV,QA/BD,SAAiBh0B,GAChB,OAAOg+B,EAAUh+B,GAAO,SAAShS,GAChC,OAAO0vC,EAAchwE,KAAKsgC,GACvB,OAASgmC,EAAOhmC,GAChBA,CACJ,GACD,EA0BC,UAnDD,SAAmBgS,GAClB,OAAOg+B,EAAUh+B,GAAO,SAAShS,GAChC,OAAOyvC,EAAc/vE,KAAKsgC,GACvBimC,EAAOjmC,EAAOr6B,MAAM,GAAG4C,eACvBy3B,CACJ,GACD,QA0DE,KAFD,aACC,OAAOgjC,CACP,+BAgBH,CAnhBC,wFCCD,KAAMuO,YAAY,yCCIlB,SAAShvC,EAAMn/B,GACb,OAAOA,EAAI,GAAM,CACnB,qFACA,MAAMouE,EAAM,CAACpuE,EAAGmlB,EAAGoY,IAAM5uB,KAAKnV,IAAImV,KAAKpV,IAAIyG,EAAGu9B,GAAIpY,GAClD,SAASkpD,EAAIruE,GACX,OAAOouE,EAAIjvC,EAAU,KAAJn/B,GAAW,EAAG,IACjC,CAIA,SAASsuE,EAAItuE,GACX,OAAOouE,EAAIjvC,EAAU,IAAJn/B,GAAU,EAAG,IAChC,CACA,SAASuuE,EAAIvuE,GACX,OAAOouE,EAAIjvC,EAAMn/B,EAAI,MAAQ,IAAK,EAAG,EACvC,CACA,SAASwuE,EAAIxuE,GACX,OAAOouE,EAAIjvC,EAAU,IAAJn/B,GAAU,EAAG,IAChC,CAEA,MAAMyuE,EAAQ,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAGC,EAAG,GAAIC,EAAG,GAAIC,EAAG,GAAIC,EAAG,GAAIC,EAAG,GAAIC,EAAG,GAAIrxD,EAAG,GAAIxM,EAAG,GAAI3C,EAAG,GAAIyD,EAAG,GAAIhP,EAAG,GAAInJ,EAAG,IACrJm1E,EAAM,IAAI,oBACVC,EAAK/9D,GAAK89D,EAAQ,GAAJ99D,GACdg+D,EAAKh+D,GAAK89D,GAAS,IAAJ99D,IAAa,GAAK89D,EAAQ,GAAJ99D,GACrCi+D,EAAKj+D,IAAW,IAAJA,IAAa,KAAY,GAAJA,GAyBvC,SAASk+D,EAAUpvE,GACjB,IAAInG,EAzBUmG,IAAKmvE,EAAGnvE,EAAEs/B,IAAM6vC,EAAGnvE,EAAE4hB,IAAMutD,EAAGnvE,EAAEkR,IAAMi+D,EAAGnvE,EAAE0d,GAyBjD2xD,CAAQrvE,GAAKivE,EAAKC,EAC1B,OAAOlvE,EACH,IAAMnG,EAAEmG,EAAEs/B,GAAKzlC,EAAEmG,EAAE4hB,GAAK/nB,EAAEmG,EAAEkR,GAJpB,EAACwM,EAAG7jB,IAAM6jB,EAAI,IAAM7jB,EAAE6jB,GAAK,GAIF+d,CAAMz7B,EAAE0d,EAAG7jB,QAC5CY,CACN,CAEA,MAAM60E,EAAS,+GACf,SAASC,EAAShyC,EAAGlhC,EAAG8oB,GACtB,MAAMzH,EAAIrhB,EAAIsS,KAAKpV,IAAI4rB,EAAG,EAAIA,GACxBtrB,EAAI,CAACiF,EAAG9D,GAAK8D,EAAIy+B,EAAI,IAAM,KAAOpY,EAAIzH,EAAI/O,KAAKnV,IAAImV,KAAKpV,IAAIyB,EAAI,EAAG,EAAIA,EAAG,IAAK,GACrF,MAAO,CAACnB,EAAE,GAAIA,EAAE,GAAIA,EAAE,GACxB,CACA,SAAS21E,EAASjyC,EAAGlhC,EAAG2D,GACtB,MAAMnG,EAAI,CAACiF,EAAG9D,GAAK8D,EAAIy+B,EAAI,IAAM,IAAMv9B,EAAIA,EAAI3D,EAAIsS,KAAKnV,IAAImV,KAAKpV,IAAIyB,EAAG,EAAIA,EAAG,GAAI,GACnF,MAAO,CAACnB,EAAE,GAAIA,EAAE,GAAIA,EAAE,GACxB,CACA,SAAS41E,EAASlyC,EAAGkwC,EAAGv8D,GACtB,MAAM6tB,EAAMwwC,EAAShyC,EAAG,EAAG,IAC3B,IAAIvlC,EAMJ,IALIy1E,EAAIv8D,EAAI,IACVlZ,EAAI,GAAKy1E,EAAIv8D,GACbu8D,GAAKz1E,EACLkZ,GAAKlZ,GAEFA,EAAI,EAAGA,EAAI,EAAGA,IACjB+mC,EAAI/mC,IAAM,EAAIy1E,EAAIv8D,EAClB6tB,EAAI/mC,IAAMy1E,EAEZ,OAAO1uC,CACT,CAUA,SAAS2wC,EAAQ1vE,GACf,MACMs/B,EAAIt/B,EAAEs/B,EADE,IAER1d,EAAI5hB,EAAE4hB,EAFE,IAGR1Q,EAAIlR,EAAEkR,EAHE,IAIR1X,EAAMmV,KAAKnV,IAAI8lC,EAAG1d,EAAG1Q,GACrB3X,EAAMoV,KAAKpV,IAAI+lC,EAAG1d,EAAG1Q,GACrBiU,GAAK3rB,EAAMD,GAAO,EACxB,IAAIgkC,EAAGlhC,EAAG2V,EAOV,OANIxY,IAAQD,IACVyY,EAAIxY,EAAMD,EACV8C,EAAI8oB,EAAI,GAAMnT,GAAK,EAAIxY,EAAMD,GAAOyY,GAAKxY,EAAMD,GAC/CgkC,EArBJ,SAAkB+B,EAAG1d,EAAG1Q,EAAGc,EAAGxY,GAC5B,OAAI8lC,IAAM9lC,GACCooB,EAAI1Q,GAAKc,GAAM4P,EAAI1Q,EAAI,EAAI,GAElC0Q,IAAMpoB,GACA0X,EAAIouB,GAAKttB,EAAI,GAEfstB,EAAI1d,GAAK5P,EAAI,CACvB,CAaQ29D,CAASrwC,EAAG1d,EAAG1Q,EAAGc,EAAGxY,GACzB+jC,EAAQ,GAAJA,EAAS,IAER,CAAK,EAAJA,EAAOlhC,GAAK,EAAG8oB,EACzB,CACA,SAASyqD,EAAM/1E,EAAG6jB,EAAGxM,EAAG3C,GACtB,OACExG,MAAMyhB,QAAQ9L,GACV7jB,EAAE6jB,EAAE,GAAIA,EAAE,GAAIA,EAAE,IAChB7jB,EAAE6jB,EAAGxM,EAAG3C,IACZnM,IAAIksE,EACR,CACA,SAASuB,EAAQtyC,EAAGlhC,EAAG8oB,GACrB,OAAOyqD,EAAML,EAAUhyC,EAAGlhC,EAAG8oB,EAC/B,CAOA,SAAS4W,EAAIwB,GACX,OAAQA,EAAI,IAAM,KAAO,GAC3B,CACA,SAASuyC,EAAS3wE,GAChB,MAAMwiB,EAAI2tD,EAAOvtE,KAAK5C,GACtB,IACIa,EADA0d,EAAI,IAER,IAAKiE,EACH,OAEEA,EAAE,KAAO3hB,IACX0d,EAAIiE,EAAE,GAAK0sD,GAAK1sD,EAAE,IAAM2sD,GAAK3sD,EAAE,KAEjC,MAAM4b,EAAIxB,GAAKpa,EAAE,IACXouD,GAAMpuD,EAAE,GAAK,IACbquD,GAAMruD,EAAE,GAAK,IAQnB,OANE3hB,EADW,QAAT2hB,EAAE,GAtBR,SAAiB4b,EAAGkwC,EAAGv8D,GACrB,OAAO0+D,EAAMH,EAAUlyC,EAAGkwC,EAAGv8D,EAC/B,CAqBQ++D,CAAQ1yC,EAAGwyC,EAAIC,GACD,QAATruD,EAAE,GArBf,SAAiB4b,EAAGlhC,EAAG2D,GACrB,OAAO4vE,EAAMJ,EAAUjyC,EAAGlhC,EAAG2D,EAC/B,CAoBQkwE,CAAQ3yC,EAAGwyC,EAAIC,GAEfH,EAAQtyC,EAAGwyC,EAAIC,GAEd,CACL1wC,EAAGt/B,EAAE,GACL4hB,EAAG5hB,EAAE,GACLkR,EAAGlR,EAAE,GACL0d,EAAGA,EAEP,CAsBA,MAAMtb,EAAM,CACV7J,EAAG,OACH43E,EAAG,QACHC,EAAG,KACHC,EAAG,MACHC,EAAG,KACHC,EAAG,SACHC,EAAG,QACH9B,EAAG,KACH+B,EAAG,KACHC,EAAG,KACH/B,EAAG,KACHC,EAAG,QACHC,EAAG,QACH8B,EAAG,KACHC,EAAG,WACH9B,EAAG,KACH+B,EAAG,KACHC,EAAG,KACHC,EAAG,KACHC,EAAG,KACHC,EAAG,QACHlC,EAAG,KACHmC,EAAG,KACHC,EAAG,OACHC,EAAG,KACHC,EAAG,QACHC,EAAG,MAECC,EAAU,CACdC,OAAQ,SACRC,YAAa,SACbhxC,KAAM,OACNixC,UAAW,SACXC,KAAM,SACNC,MAAO,SACPC,OAAQ,SACRnxC,MAAO,IACPoxC,aAAc,SACdC,GAAI,KACJC,QAAS,SACTC,KAAM,SACNC,UAAW,SACXC,OAAQ,SACRC,SAAU,SACVC,QAAS,SACTC,IAAK,SACLC,YAAa,SACbC,QAAS,SACTC,QAAS,SACTC,KAAM,OACNC,IAAK,KACLC,MAAO,OACPC,QAAS,SACTC,KAAM,SACNC,KAAM,OACNC,KAAM,SACNC,OAAQ,SACRC,QAAS,SACTC,SAAU,SACVC,OAAQ,SACRC,MAAO,SACPC,IAAK,SACLC,OAAQ,SACRC,OAAQ,SACRC,KAAM,SACNC,MAAO,SACPC,MAAO,SACPC,IAAK,OACLC,OAAQ,SACRC,OAAQ,SACRC,SAAU,OACVC,OAAQ,SACRC,OAAQ,SACRC,SAAU,SACVC,SAAU,SACVC,SAAU,SACVC,SAAU,SACVC,OAAQ,SACRC,QAAS,SACTC,UAAW,SACXC,IAAK,SACLC,OAAQ,SACRC,IAAK,SACLC,IAAK,OACLC,MAAO,SACPC,IAAK,SACLC,QAAS,SACTC,OAAQ,SACRC,QAAS,SACTC,MAAO,SACPC,KAAM,SACNC,MAAO,SACPC,OAAQ,SACRC,UAAW,SACXC,QAAS,SACTC,WAAY,SACZC,IAAK,SACLC,KAAM,SACNC,MAAO,SACPC,UAAW,SACXC,KAAM,SACNC,KAAM,SACNC,KAAM,SACNC,KAAM,SACNC,OAAQ,SACRC,OAAQ,SACRC,OAAQ,SACRC,MAAO,SACPC,MAAO,SACPC,QAAS,SACTC,IAAK,SACL11C,KAAM,OACN21C,QAAS,SACTC,IAAK,SACLC,OAAQ,SACRC,MAAO,SACPC,WAAY,SACZC,IAAK,KACLC,MAAO,SACPC,OAAQ,SACRC,OAAQ,SACRC,KAAM,SACNC,UAAW,OACXC,IAAK,SACLC,SAAU,SACVC,WAAY,SACZC,QAAS,SACTC,SAAU,SACVC,QAAS,SACTC,WAAY,SACZ12C,KAAM,KACN22C,OAAQ,SACRC,KAAM,SACNC,QAAS,SACTC,MAAO,SACPC,QAAS,SACTC,KAAM,SACNC,UAAW,SACXC,OAAQ,SACRC,MAAO,SACPC,WAAY,SACZC,UAAW,SACXC,QAAS,SACTC,KAAM,SACNC,IAAK,SACLC,KAAM,SACNC,QAAS,SACTC,MAAO,SACPC,YAAa,SACbC,GAAI,SACJC,SAAU,SACVC,MAAO,SACPC,UAAW,SACXC,MAAO,SACPC,UAAW,SACXC,MAAO,SACPC,QAAS,SACTC,MAAO,SACPl4C,OAAQ,SACRm4C,MAAO,SACPC,IAAK,SACLC,KAAM,SACNC,KAAM,SACNC,KAAM,SACNC,SAAU,OACVC,OAAQ,SACRC,IAAK,SACLC,IAAK,OACLC,MAAO,SACPC,OAAQ,SACRC,GAAI,SACJC,MAAO,SACPC,IAAK,SACLC,KAAM,SACNC,UAAW,SACXC,GAAI,SACJC,MAAO,UAmBT,IAAI13D,EACJ,SAAS23D,EAAUp7E,GACZyjB,IACHA,EApBJ,WACE,MAAM+0B,EAAW,CAAC,EACZ90B,EAAOnqB,OAAOmqB,KAAK0uD,GACnBiJ,EAAQ9hF,OAAOmqB,KAAKzgB,GAC1B,IAAIpK,EAAG0I,EAAG1F,EAAGy/E,EAAIC,EACjB,IAAK1iF,EAAI,EAAGA,EAAI6qB,EAAK3qB,OAAQF,IAAK,CAEhC,IADAyiF,EAAKC,EAAK73D,EAAK7qB,GACV0I,EAAI,EAAGA,EAAI85E,EAAMtiF,OAAQwI,IAC5B1F,EAAIw/E,EAAM95E,GACVg6E,EAAKA,EAAG14E,QAAQhH,EAAGoH,EAAIpH,IAEzBA,EAAIrB,SAAS43E,EAAQkJ,GAAK,IAC1B9iC,EAAS+iC,GAAM,CAAC1/E,GAAK,GAAK,IAAMA,GAAK,EAAI,IAAU,IAAJA,EACjD,CACA,OAAO28C,CACT,CAKYjE,GACR9wB,EAAMwa,YAAc,CAAC,EAAG,EAAG,EAAG,IAEhC,MAAM1f,EAAIkF,EAAMzjB,EAAIgG,eACpB,OAAOuY,GAAK,CACV4hB,EAAG5hB,EAAE,GACLkE,EAAGlE,EAAE,GACLxM,EAAGwM,EAAE,GACLA,EAAgB,IAAbA,EAAExlB,OAAewlB,EAAE,GAAK,IAE/B,CAEA,MAAMi9D,EAAS,uGAiCf,MAAMx9D,EAAKnd,GAAKA,GAAK,SAAgB,MAAJA,EAAqC,MAAzB2O,KAAKC,IAAI5O,EAAG,EAAM,KAAe,KACxEid,EAAOjd,GAAKA,GAAK,OAAUA,EAAI,MAAQ2O,KAAKC,KAAK5O,EAAI,MAAS,MAAO,KAa3E,SAAS46E,EAAO56E,EAAGhI,EAAG6iF,GACpB,GAAI76E,EAAG,CACL,IAAI86E,EAAMpL,EAAQ1vE,GAClB86E,EAAI9iF,GAAK2W,KAAKnV,IAAI,EAAGmV,KAAKpV,IAAIuhF,EAAI9iF,GAAK8iF,EAAI9iF,GAAK6iF,EAAa,IAAN7iF,EAAU,IAAM,IACvE8iF,EAAMjL,EAAQiL,GACd96E,EAAEs/B,EAAIw7C,EAAI,GACV96E,EAAE4hB,EAAIk5D,EAAI,GACV96E,EAAEkR,EAAI4pE,EAAI,EACZ,CACF,CACA,SAASx0D,EAAMtmB,EAAG+6E,GAChB,OAAO/6E,EAAItH,OAAOyE,OAAO49E,GAAS,CAAC,EAAG/6E,GAAKA,CAC7C,CACA,SAASg7E,EAAWpsC,GAClB,IAAI5uC,EAAI,CAACs/B,EAAG,EAAG1d,EAAG,EAAG1Q,EAAG,EAAGwM,EAAG,KAY9B,OAXI3V,MAAMyhB,QAAQolB,GACZA,EAAM12C,QAAU,IAClB8H,EAAI,CAACs/B,EAAGsP,EAAM,GAAIhtB,EAAGgtB,EAAM,GAAI19B,EAAG09B,EAAM,GAAIlxB,EAAG,KAC3CkxB,EAAM12C,OAAS,IACjB8H,EAAE0d,EAAI4wD,EAAI1/B,EAAM,OAIpB5uC,EAAIsmB,EAAMsoB,EAAO,CAACtP,EAAG,EAAG1d,EAAG,EAAG1Q,EAAG,EAAGwM,EAAG,KACrCA,EAAI4wD,EAAItuE,EAAE0d,GAEP1d,CACT,CACA,SAASi7E,EAAc97E,GACrB,MAAsB,MAAlBA,EAAIC,OAAO,GA3EjB,SAAkBD,GAChB,MAAMwiB,EAAIg5D,EAAO54E,KAAK5C,GACtB,IACImgC,EAAG1d,EAAG1Q,EADNwM,EAAI,IAER,GAAKiE,EAAL,CAGA,GAAIA,EAAE,KAAO2d,EAAG,CACd,MAAMt/B,GAAK2hB,EAAE,GACbjE,EAAIiE,EAAE,GAAK0sD,EAAIruE,GAAKouE,EAAQ,IAAJpuE,EAAS,EAAG,IACtC,CAOA,OANAs/B,GAAK3d,EAAE,GACPC,GAAKD,EAAE,GACPzQ,GAAKyQ,EAAE,GACP2d,EAAI,KAAO3d,EAAE,GAAK0sD,EAAI/uC,GAAK8uC,EAAI9uC,EAAG,EAAG,MACrC1d,EAAI,KAAOD,EAAE,GAAK0sD,EAAIzsD,GAAKwsD,EAAIxsD,EAAG,EAAG,MACrC1Q,EAAI,KAAOyQ,EAAE,GAAK0sD,EAAIn9D,GAAKk9D,EAAIl9D,EAAG,EAAG,MAC9B,CACLouB,EAAGA,EACH1d,EAAGA,EACH1Q,EAAGA,EACHwM,EAAGA,EAfL,CAiBF,CAqDWw9D,CAAS/7E,GAEX2wE,EAAS3wE,EAClB,CACA,MAAMm8B,EACJ,WAAA7S,CAAYmmB,GACV,GAAIA,aAAiBtT,EACnB,OAAOsT,EAET,MAAMzwC,SAAcywC,EACpB,IAAI5uC,EA7bR,IAAkBb,EAEZ+N,EADAjV,EA6bW,WAATkG,EACF6B,EAAIg7E,EAAWpsC,GACG,WAATzwC,IA/bTlG,GADYkH,EAicCyvC,GAhcH12C,OAEC,MAAXiH,EAAI,KACM,IAARlH,GAAqB,IAARA,EACfiV,EAAM,CACJoyB,EAAG,IAAsB,GAAhBmvC,EAAMtvE,EAAI,IACnByiB,EAAG,IAAsB,GAAhB6sD,EAAMtvE,EAAI,IACnB+R,EAAG,IAAsB,GAAhBu9D,EAAMtvE,EAAI,IACnBue,EAAW,IAARzlB,EAA4B,GAAhBw2E,EAAMtvE,EAAI,IAAW,KAErB,IAARlH,GAAqB,IAARA,IACtBiV,EAAM,CACJoyB,EAAGmvC,EAAMtvE,EAAI,KAAO,EAAIsvE,EAAMtvE,EAAI,IAClCyiB,EAAG6sD,EAAMtvE,EAAI,KAAO,EAAIsvE,EAAMtvE,EAAI,IAClC+R,EAAGu9D,EAAMtvE,EAAI,KAAO,EAAIsvE,EAAMtvE,EAAI,IAClCue,EAAW,IAARzlB,EAAaw2E,EAAMtvE,EAAI,KAAO,EAAIsvE,EAAMtvE,EAAI,IAAO,OAibxDa,EA7aGkN,GA6aoBqtE,EAAU3rC,IAAUqsC,EAAcrsC,IAE3DvxC,KAAK89E,KAAOn7E,EACZ3C,KAAK+9E,SAAWp7E,CAClB,CACA,SAAIq7E,GACF,OAAOh+E,KAAK+9E,MACd,CACA,OAAIr8C,GACF,IAAI/+B,EAAIsmB,EAAMjpB,KAAK89E,MAInB,OAHIn7E,IACFA,EAAE0d,EAAI6wD,EAAIvuE,EAAE0d,IAEP1d,CACT,CACA,OAAI++B,CAAItmC,GACN4E,KAAK89E,KAAOH,EAAWviF,EACzB,CACA,SAAA6iF,GACE,OAAOj+E,KAAK+9E,QArFGp7E,EAqFgB3C,KAAK89E,QAnFpCn7E,EAAE0d,EAAI,IACF,QAAQ1d,EAAEs/B,MAAMt/B,EAAE4hB,MAAM5hB,EAAEkR,MAAMq9D,EAAIvuE,EAAE0d,MACtC,OAAO1d,EAAEs/B,MAAMt/B,EAAE4hB,MAAM5hB,EAAEkR,WAiFezW,EArFhD,IAAmBuF,CAsFjB,CACA,SAAAovE,GACE,OAAO/xE,KAAK+9E,OAAShM,EAAU/xE,KAAK89E,WAAQ1gF,CAC9C,CACA,SAAA8gF,GACE,OAAOl+E,KAAK+9E,OApVhB,SAAmBp7E,GACjB,IAAKA,EACH,OAEF,MAAM0d,EAAIgyD,EAAQ1vE,GACZu9B,EAAI7f,EAAE,GACNrhB,EAAImyE,EAAI9wD,EAAE,IACVyH,EAAIqpD,EAAI9wD,EAAE,IAChB,OAAO1d,EAAE0d,EAAI,IACT,QAAQ6f,MAAMlhC,OAAO8oB,OAAOopD,EAAIvuE,EAAE0d,MAClC,OAAO6f,MAAMlhC,OAAO8oB,KAC1B,CAyUyBo2D,CAAUl+E,KAAK89E,WAAQ1gF,CAC9C,CACA,GAAA+gF,CAAIngD,EAAOogD,GACT,GAAIpgD,EAAO,CACT,MAAMqgD,EAAKr+E,KAAK0hC,IACV48C,EAAKtgD,EAAM0D,IACjB,IAAI68C,EACJ,MAAMp/E,EAAIi/E,IAAWG,EAAK,GAAMH,EAC1BhO,EAAI,EAAIjxE,EAAI,EACZkhB,EAAIg+D,EAAGh+D,EAAIi+D,EAAGj+D,EACdm+D,IAAOpO,EAAI/vD,KAAO,EAAI+vD,GAAKA,EAAI/vD,IAAM,EAAI+vD,EAAI/vD,IAAM,GAAK,EAC9Dk+D,EAAK,EAAIC,EACTH,EAAGp8C,EAAI,IAAOu8C,EAAKH,EAAGp8C,EAAIs8C,EAAKD,EAAGr8C,EAAI,GACtCo8C,EAAG95D,EAAI,IAAOi6D,EAAKH,EAAG95D,EAAIg6D,EAAKD,EAAG/5D,EAAI,GACtC85D,EAAGxqE,EAAI,IAAO2qE,EAAKH,EAAGxqE,EAAI0qE,EAAKD,EAAGzqE,EAAI,GACtCwqE,EAAGh+D,EAAIlhB,EAAIk/E,EAAGh+D,GAAK,EAAIlhB,GAAKm/E,EAAGj+D,EAC/BrgB,KAAK0hC,IAAM28C,CACb,CACA,OAAOr+E,IACT,CACA,WAAAy+E,CAAYzgD,EAAOspC,GAIjB,OAHItpC,IACFh+B,KAAK89E,KAvGX,SAAqBY,EAAMC,EAAMrX,GAC/B,MAAMrlC,EAAIriB,EAAKsxD,EAAIwN,EAAKz8C,IAClB1d,EAAI3E,EAAKsxD,EAAIwN,EAAKn6D,IAClB1Q,EAAI+L,EAAKsxD,EAAIwN,EAAK7qE,IACxB,MAAO,CACLouB,EAAGgvC,EAAInxD,EAAGmiB,EAAIqlC,GAAK1nD,EAAKsxD,EAAIyN,EAAK18C,IAAMA,KACvC1d,EAAG0sD,EAAInxD,EAAGyE,EAAI+iD,GAAK1nD,EAAKsxD,EAAIyN,EAAKp6D,IAAMA,KACvC1Q,EAAGo9D,EAAInxD,EAAGjM,EAAIyzD,GAAK1nD,EAAKsxD,EAAIyN,EAAK9qE,IAAMA,KACvCwM,EAAGq+D,EAAKr+D,EAAIinD,GAAKqX,EAAKt+D,EAAIq+D,EAAKr+D,GAEnC,CA6FkBo+D,CAAYz+E,KAAK89E,KAAM9/C,EAAM8/C,KAAMxW,IAE1CtnE,IACT,CACA,KAAAipB,GACE,OAAO,IAAIgV,EAAMj+B,KAAK0hC,IACxB,CACA,KAAAtD,CAAM/d,GAEJ,OADArgB,KAAK89E,KAAKz9D,EAAI4wD,EAAI5wD,GACXrgB,IACT,CACA,OAAA4+E,CAAQpB,GAGN,OAFYx9E,KAAK89E,KACbz9D,GAAK,EAAIm9D,EACNx9E,IACT,CACA,SAAA6+E,GACE,MAAMn9C,EAAM1hC,KAAK89E,KACXpjF,EAAMonC,EAAc,GAARJ,EAAIO,EAAkB,IAARP,EAAInd,EAAmB,IAARmd,EAAI7tB,GAEnD,OADA6tB,EAAIO,EAAIP,EAAInd,EAAImd,EAAI7tB,EAAInZ,EACjBsF,IACT,CACA,OAAA8+E,CAAQtB,GAGN,OAFYx9E,KAAK89E,KACbz9D,GAAK,EAAIm9D,EACNx9E,IACT,CACA,MAAA++E,GACE,MAAMp8E,EAAI3C,KAAK89E,KAIf,OAHAn7E,EAAEs/B,EAAI,IAAMt/B,EAAEs/B,EACdt/B,EAAE4hB,EAAI,IAAM5hB,EAAE4hB,EACd5hB,EAAEkR,EAAI,IAAMlR,EAAEkR,EACP7T,IACT,CACA,OAAAg/E,CAAQxB,GAEN,OADAD,EAAOv9E,KAAK89E,KAAM,EAAGN,GACdx9E,IACT,CACA,MAAAi/E,CAAOzB,GAEL,OADAD,EAAOv9E,KAAK89E,KAAM,GAAIN,GACfx9E,IACT,CACA,QAAAk/E,CAAS1B,GAEP,OADAD,EAAOv9E,KAAK89E,KAAM,EAAGN,GACdx9E,IACT,CACA,UAAAm/E,CAAW3B,GAET,OADAD,EAAOv9E,KAAK89E,KAAM,GAAIN,GACfx9E,IACT,CACA,MAAAo/E,CAAOC,GAEL,OAtaJ,SAAgB18E,EAAG08E,GACjB,IAAIn/C,EAAImyC,EAAQ1vE,GAChBu9B,EAAE,GAAKxB,EAAIwB,EAAE,GAAKm/C,GAClBn/C,EAAIsyC,EAAQtyC,GACZv9B,EAAEs/B,EAAI/B,EAAE,GACRv9B,EAAE4hB,EAAI2b,EAAE,GACRv9B,EAAEkR,EAAIqsB,EAAE,EACV,CA8ZIk/C,CAAOp/E,KAAK89E,KAAMuB,GACXr/E,IACT,ECzjBE,SAAS0S,IACF,CAGP,MAAM4sE,EAAM,MACZ,IAAItyE,EAAK,EACT,MAAO,IAAIA,GACd,EAHe,GAQZ,SAASuyE,EAAcljF,GACvB,OAAiB,OAAVA,GAAmC,qBAAVA,CACpC,CAKI,SAAS8vB,EAAQ9vB,GACjB,GAAIqO,MAAMyhB,SAAWzhB,MAAMyhB,QAAQ9vB,GAC/B,OAAO,EAEX,MAAMyE,EAAOzF,OAAOC,UAAUC,SAASC,KAAKa,GAC5C,MAAyB,YAArByE,EAAKoE,MAAM,EAAG,IAAuC,WAAnBpE,EAAKoE,OAAO,EAItD,CAKI,SAAS2rB,EAASx0B,GAClB,OAAiB,OAAVA,GAA4D,oBAA1ChB,OAAOC,UAAUC,SAASC,KAAKa,EAC5D,CAII,SAASmjF,EAAenjF,GACxB,OAAyB,kBAAVA,GAAsBA,aAAiBiH,SAAW1B,UAAUvF,EAC/E,CAKI,SAASojF,EAAgBpjF,EAAOW,GAChC,OAAOwiF,EAAenjF,GAASA,EAAQW,CAC3C,CAKI,SAAS0iF,EAAerjF,EAAOW,GAC/B,MAAwB,qBAAVX,EAAwBW,EAAeX,CACzD,CACA,MACMsjF,EAAc,CAACtjF,EAAOujF,IAA6B,kBAAVvjF,GAAsBA,EAAMwjF,SAAS,KAAOl+E,WAAWtF,GAAS,IAAMujF,GAAavjF,EAO9H,SAASipB,EAAS9qB,EAAIiI,EAAMq9E,GAC5B,GAAItlF,GAAyB,oBAAZA,EAAGgB,KAChB,OAAOhB,EAAGuF,MAAM+/E,EAASr9E,EAEjC,CACA,SAASkuB,EAAKovD,EAAUvlF,EAAIslF,EAASE,GACjC,IAAIrlF,EAAGC,EAAK4qB,EACZ,GAAI2G,EAAQ4zD,GAER,GADAnlF,EAAMmlF,EAASllF,OACXmlF,EACA,IAAIrlF,EAAIC,EAAM,EAAGD,GAAK,EAAGA,IACrBH,EAAGgB,KAAKskF,EAASC,EAASplF,GAAIA,QAGlC,IAAIA,EAAI,EAAGA,EAAIC,EAAKD,IAChBH,EAAGgB,KAAKskF,EAASC,EAASplF,GAAIA,QAGnC,GAAIk2B,EAASkvD,GAGhB,IAFAv6D,EAAOnqB,OAAOmqB,KAAKu6D,GACnBnlF,EAAM4qB,EAAK3qB,OACPF,EAAI,EAAGA,EAAIC,EAAKD,IAChBH,EAAGgB,KAAKskF,EAASC,EAASv6D,EAAK7qB,IAAK6qB,EAAK7qB,GAGrD,CAMI,SAASslF,EAAeC,EAAIn4D,GAC5B,IAAIptB,EAAGwlF,EAAMC,EAAI97C,EACjB,IAAK47C,IAAOn4D,GAAMm4D,EAAGrlF,SAAWktB,EAAGltB,OAC/B,OAAO,EAEX,IAAIF,EAAI,EAAGwlF,EAAOD,EAAGrlF,OAAQF,EAAIwlF,IAAQxlF,EAGrC,GAFAylF,EAAKF,EAAGvlF,GACR2pC,EAAKvc,EAAGptB,GACJylF,EAAGC,eAAiB/7C,EAAG+7C,cAAgBD,EAAG7wE,QAAU+0B,EAAG/0B,MACvD,OAAO,EAGf,OAAO,CACX,CAII,SAAS,EAAM5P,GACf,GAAIwsB,EAAQxsB,GACR,OAAOA,EAAOoF,IAAI,GAEtB,GAAI8rB,EAASlxB,GAAS,CAClB,MAAMF,EAASpE,OAAO8S,OAAO,MACvBqX,EAAOnqB,OAAOmqB,KAAK7lB,GACnB2gF,EAAO96D,EAAK3qB,OAClB,IAAI8C,EAAI,EACR,KAAMA,EAAI2iF,IAAQ3iF,EACd8B,EAAO+lB,EAAK7nB,IAAM,EAAMgC,EAAO6lB,EAAK7nB,KAExC,OAAO8B,CACX,CACA,OAAOE,CACX,CACA,SAAS4gF,EAAW5hF,GAChB,OAIoB,IAJb,CACH,YACA,YACA,eACF6F,QAAQ7F,EACd,CAKI,SAAS6hF,EAAQ7hF,EAAKc,EAAQE,EAAQuiB,GACtC,IAAKq+D,EAAW5hF,GACZ,OAEJ,MAAM8hF,EAAOhhF,EAAOd,GACd+hF,EAAO/gF,EAAOhB,GAChBkyB,EAAS4vD,IAAS5vD,EAAS6vD,GAE3B73E,EAAM43E,EAAMC,EAAMx+D,GAElBziB,EAAOd,GAAO,EAAM+hF,EAE5B,CACA,SAAS73E,EAAMpJ,EAAQE,EAAQuiB,GAC3B,MAAMy+D,EAAUx0D,EAAQxsB,GAAUA,EAAS,CACvCA,GAEEwgF,EAAOQ,EAAQ9lF,OACrB,IAAKg2B,EAASpxB,GACV,OAAOA,EAGX,MAAMmhF,GADN1+D,EAAUA,GAAW,CAAC,GACC0+D,QAAUJ,EACjC,IAAI32D,EACJ,IAAI,IAAIlvB,EAAI,EAAGA,EAAIwlF,IAAQxlF,EAAE,CAEzB,GADAkvB,EAAU82D,EAAQhmF,IACbk2B,EAAShH,GACV,SAEJ,MAAMrE,EAAOnqB,OAAOmqB,KAAKqE,GACzB,IAAI,IAAIlsB,EAAI,EAAG2iF,EAAO96D,EAAK3qB,OAAQ8C,EAAI2iF,IAAQ3iF,EAC3CijF,EAAOp7D,EAAK7nB,GAAI8B,EAAQoqB,EAAS3H,EAEzC,CACA,OAAOziB,CACX,CACA,SAASohF,EAAQphF,EAAQE,GAErB,OAAOkJ,EAAMpJ,EAAQE,EAAQ,CACzBihF,OAAQE,GAEhB,CAII,SAASA,EAAUniF,EAAKc,EAAQE,GAChC,IAAK4gF,EAAW5hF,GACZ,OAEJ,MAAM8hF,EAAOhhF,EAAOd,GACd+hF,EAAO/gF,EAAOhB,GAChBkyB,EAAS4vD,IAAS5vD,EAAS6vD,GAC3BG,EAAQJ,EAAMC,GACNrlF,OAAOC,UAAUS,eAAeP,KAAKiE,EAAQd,KACrDc,EAAOd,GAAO,EAAM+hF,GAE5B,CASA,MAAMK,GAAe,CAEjB,GAAKp+E,GAAIA,EAETzH,EAAIiM,GAAIA,EAAEjM,EACVqrD,EAAIp/C,GAAIA,EAAEo/C,GA+Bd,SAASy6B,GAAiB5lF,EAAKuD,GAC3B,MAAMsiF,EAAWF,GAAapiF,KAASoiF,GAAapiF,GAbxD,SAAyBA,GACrB,MAAM6mB,EAhBN,SAAmB7mB,GACnB,MAAM8F,EAAQ9F,EAAIiG,MAAM,KAClB4gB,EAAO,GACb,IAAIi4D,EAAM,GACV,IAAK,MAAMt6C,KAAQ1+B,EACfg5E,GAAOt6C,EACHs6C,EAAIoC,SAAS,MACbpC,EAAMA,EAAIv4E,MAAM,GAAI,GAAK,KAEzBsgB,EAAKxpB,KAAKyhF,GACVA,EAAM,IAGd,OAAOj4D,CACX,CAEiB07D,CAAUviF,GACvB,OAAQvD,IACJ,IAAK,MAAMuC,KAAK6nB,EAAK,CACjB,GAAU,KAAN7nB,EACA,MAEJvC,EAAMA,GAAOA,EAAIuC,EACrB,CACA,OAAOvC,CAAG,CAElB,CAE+D+lF,CAAgBxiF,IAC3E,OAAOsiF,EAAS7lF,EACpB,CAGI,SAASyG,GAAYC,GACrB,OAAOA,EAAIC,OAAO,GAAGC,cAAgBF,EAAIoD,MAAM,EACnD,CACA,MAAMk8E,GAAW/kF,GAAyB,qBAAVA,EAC1ByxB,GAAczxB,GAAyB,oBAAVA,EAE7BglF,GAAY,CAAChhE,EAAGxM,KAClB,GAAIwM,EAAE9P,OAASsD,EAAEtD,KACb,OAAO,EAEX,IAAK,MAAMxV,KAAQslB,EACf,IAAKxM,EAAEwV,IAAItuB,GACP,OAAO,EAGf,OAAO,CAAI,EAYX,MAAMumF,GAAKhwE,KAAKgwE,GACdC,GAAM,EAAID,GACVE,GAAQD,GAAMD,GACdG,GAAWn+E,OAAOo+E,kBAClBC,GAAcL,GAAK,IACnBM,GAAUN,GAAK,EACfO,GAAaP,GAAK,EAClBQ,GAAqB,EAALR,GAAS,EACzBS,GAAQzwE,KAAKywE,MACb/rC,GAAO1kC,KAAK0kC,KAClB,SAASgsC,GAAa9mF,EAAGqrD,EAAG07B,GACxB,OAAO3wE,KAAK4pC,IAAIhgD,EAAIqrD,GAAK07B,CAC7B,CAGI,SAASC,GAAQC,GACjB,MAAMC,EAAe9wE,KAAKwwB,MAAMqgD,GAChCA,EAAQH,GAAaG,EAAOC,EAAcD,EAAQ,KAAQC,EAAeD,EACzE,MAAME,EAAY/wE,KAAKC,IAAI,GAAID,KAAKwtB,MAAMijD,GAAMI,KAC1CG,EAAWH,EAAQE,EAEzB,OADqBC,GAAY,EAAI,EAAIA,GAAY,EAAI,EAAIA,GAAY,EAAI,EAAI,IAC3DD,CAC1B,CAoBA,SAASE,GAAS9gF,GACd,OAAQC,MAAMC,WAAWF,KAAOG,SAASH,EAC7C,CAOI,SAAS+gF,GAAmB12D,EAAOrsB,EAAQw7B,GAC3C,IAAItgC,EAAGwlF,EAAM9jF,EACb,IAAI1B,EAAI,EAAGwlF,EAAOr0D,EAAMjxB,OAAQF,EAAIwlF,EAAMxlF,IACtC0B,EAAQyvB,EAAMnxB,GAAGsgC,GACZv5B,MAAMrF,KACPoD,EAAOvD,IAAMoV,KAAKpV,IAAIuD,EAAOvD,IAAKG,GAClCoD,EAAOtD,IAAMmV,KAAKnV,IAAIsD,EAAOtD,IAAKE,GAG9C,CACA,SAASomF,GAAUC,GACf,OAAOA,GAAWpB,GAAK,IAC3B,CACA,SAASqB,GAAUC,GACf,OAAOA,GAAW,IAAMtB,GAC5B,CAOI,SAASuB,GAAe3nF,GACxB,IAAKskF,EAAetkF,GAChB,OAEJ,IAAIyK,EAAI,EACJxG,EAAI,EACR,KAAMmS,KAAKwwB,MAAM5mC,EAAIyK,GAAKA,IAAMzK,GAC5ByK,GAAK,GACLxG,IAEJ,OAAOA,CACX,CAEA,SAAS2jF,GAAkBC,EAAaC,GACpC,MAAMC,EAAsBD,EAAW9nF,EAAI6nF,EAAY7nF,EACjDgoF,EAAsBF,EAAWz8B,EAAIw8B,EAAYx8B,EACjD48B,EAA2B7xE,KAAK22C,KAAKg7B,EAAsBA,EAAsBC,EAAsBA,GAC7G,IAAIE,EAAQ9xE,KAAK+xE,MAAMH,EAAqBD,GAI5C,OAHIG,GAAS,GAAM9B,KACf8B,GAAS7B,IAEN,CACH6B,QACAhiD,SAAU+hD,EAElB,CACA,SAASG,GAAsBC,EAAKC,GAChC,OAAOlyE,KAAK22C,KAAK32C,KAAKC,IAAIiyE,EAAItoF,EAAIqoF,EAAIroF,EAAG,GAAKoW,KAAKC,IAAIiyE,EAAIj9B,EAAIg9B,EAAIh9B,EAAG,GAC1E,CAII,SAASk9B,GAAWpjE,EAAGxM,GACvB,OAAQwM,EAAIxM,EAAI2tE,IAASD,GAAMD,EACnC,CAII,SAASoC,GAAgBrjE,GACzB,OAAQA,EAAIkhE,GAAMA,IAAOA,EAC7B,CAGI,SAASoC,GAAcP,EAAO5lE,EAAOC,EAAKmmE,GAC1C,MAAMvjE,EAAIqjE,GAAgBN,GACpBpkF,EAAI0kF,GAAgBlmE,GACpB7X,EAAI+9E,GAAgBjmE,GACpBomE,EAAeH,GAAgB1kF,EAAIqhB,GACnCyjE,EAAaJ,GAAgB/9E,EAAI0a,GACjC0jE,EAAeL,GAAgBrjE,EAAIrhB,GACnCglF,EAAaN,GAAgBrjE,EAAI1a,GACvC,OAAO0a,IAAMrhB,GAAKqhB,IAAM1a,GAAKi+E,GAAyB5kF,IAAM2G,GAAKk+E,EAAeC,GAAcC,EAAeC,CACjH,CAOI,SAASC,GAAY5nF,EAAOH,EAAKC,GACjC,OAAOmV,KAAKnV,IAAID,EAAKoV,KAAKpV,IAAIC,EAAKE,GACvC,CAaI,SAAS6nF,GAAW7nF,EAAOmhB,EAAOC,EAAKwkE,EAAU,MACjD,OAAO5lF,GAASiV,KAAKpV,IAAIshB,EAAOC,GAAOwkE,GAAW5lF,GAASiV,KAAKnV,IAAIqhB,EAAOC,GAAOwkE,CACtF,CAEA,SAASkC,GAAQC,EAAO/nF,EAAOgoF,GAC3BA,EAAMA,GAAO,CAAE90E,GAAQ60E,EAAM70E,GAASlT,GACtC,IAEIw7C,EAFA2C,EAAK4pC,EAAMvpF,OAAS,EACpB0/C,EAAK,EAET,KAAMC,EAAKD,EAAK,GACZ1C,EAAM0C,EAAKC,GAAM,EACb6pC,EAAIxsC,GACJ0C,EAAK1C,EAEL2C,EAAK3C,EAGb,MAAO,CACH0C,KACAC,KAER,CAQI,MAAM8pC,GAAe,CAACF,EAAOzlF,EAAKtC,EAAOg2B,IAAO8xD,GAAQC,EAAO/nF,EAAOg2B,EAAQ9iB,IAC1E,MAAMg1E,EAAKH,EAAM70E,GAAO5Q,GACxB,OAAO4lF,EAAKloF,GAASkoF,IAAOloF,GAAS+nF,EAAM70E,EAAQ,GAAG5Q,KAAStC,CAAK,EACnEkT,GAAQ60E,EAAM70E,GAAO5Q,GAAOtC,GAO3BmoF,GAAgB,CAACJ,EAAOzlF,EAAKtC,IAAQ8nF,GAAQC,EAAO/nF,GAAQkT,GAAQ60E,EAAM70E,GAAO5Q,IAAQtC,IAkBnG,MAAMooF,GAAc,CAChB,OACA,MACA,QACA,SACA,WAkCJ,SAASC,GAAoB54D,EAAOtI,GAChC,MAAMmhE,EAAO74D,EAAM84D,SACnB,IAAKD,EACD,OAEJ,MAAMh+D,EAAYg+D,EAAKh+D,UACjBpX,EAAQoX,EAAUniB,QAAQgf,IACjB,IAAXjU,GACAoX,EAAUkF,OAAOtc,EAAO,GAExBoX,EAAU9rB,OAAS,IAGvB4pF,GAAYxzD,SAAStyB,WACVmtB,EAAMntB,EAAI,WAEdmtB,EAAM84D,SACjB,CAGI,SAASC,GAAa7rB,GACtB,MAAMpwC,EAAM,IAAIk8D,IAAI9rB,GACpB,OAAIpwC,EAAIrY,OAASyoD,EAAMn+D,OACZm+D,EAEJtuD,MAAMkV,KAAKgJ,EACtB,CAOG,MAAMm8D,GACiB,qBAAX7kF,OACA,SAASolB,GACZ,OAAOA,GACX,EAEGplB,OAAOqrC,sBAKd,SAASy5C,GAAUxqF,EAAIslF,GACvB,IAAImF,EAAY,GACZC,GAAU,EACd,OAAO,YAAYziF,GAEfwiF,EAAYxiF,EACPyiF,IACDA,GAAU,EACVH,GAAiBvpF,KAAK0E,QAAQ,KAC1BglF,GAAU,EACV1qF,EAAGuF,MAAM+/E,EAASmF,EAAU,IAGxC,CACJ,CAkBI,MAAME,GAAsBC,GAAkB,UAAVA,EAAoB,OAAmB,QAAVA,EAAkB,QAAU,SAIvFC,GAAiB,CAACD,EAAO5nE,EAAOC,IAAgB,UAAV2nE,EAAoB5nE,EAAkB,QAAV4nE,EAAkB3nE,GAAOD,EAAQC,GAAO,EAWhH,SAAS6nE,GAAiCC,EAAMC,EAAQC,GACxD,MAAMC,EAAaF,EAAO3qF,OAC1B,IAAI2iB,EAAQ,EACRgJ,EAAQk/D,EACZ,GAAIH,EAAKI,QAAS,CACd,MAAM,OAAEC,EAAO,QAAEC,GAAaN,EACxB/sB,EAAOotB,EAAOptB,MACd,IAAEt8D,EAAI,IAAEC,EAAI,WAAE2pF,EAAW,WAAEC,GAAgBH,EAAOI,gBACpDF,IACAtoE,EAAQymE,GAAY3yE,KAAKpV,IACzBooF,GAAauB,EAASrtB,EAAMt8D,GAAKq+C,GACjCkrC,EAAqBC,EAAapB,GAAakB,EAAQhtB,EAAMotB,EAAOK,iBAAiB/pF,IAAMq+C,IAAK,EAAGmrC,EAAa,IAGhHl/D,EADAu/D,EACQ9B,GAAY3yE,KAAKnV,IACzBmoF,GAAauB,EAASD,EAAOptB,KAAMr8D,GAAK,GAAMq+C,GAAK,EACnDirC,EAAqB,EAAInB,GAAakB,EAAQhtB,EAAMotB,EAAOK,iBAAiB9pF,IAAM,GAAMq+C,GAAK,GAAIh9B,EAAOkoE,GAAcloE,EAE9GkoE,EAAaloE,CAE7B,CACA,MAAO,CACHA,QACAgJ,QAER,CAMI,SAAS0/D,GAAoBX,GAC7B,MAAM,OAAEY,EAAO,OAAEC,EAAO,aAAEC,GAAkBd,EACtCe,EAAY,CACdC,KAAMJ,EAAOjqF,IACbsqF,KAAML,EAAOhqF,IACbsqF,KAAML,EAAOlqF,IACbwqF,KAAMN,EAAOjqF,KAEjB,IAAKkqF,EAED,OADAd,EAAKc,aAAeC,GACb,EAEX,MAAMz9D,EAAUw9D,EAAaE,OAASJ,EAAOjqF,KAAOmqF,EAAaG,OAASL,EAAOhqF,KAAOkqF,EAAaI,OAASL,EAAOlqF,KAAOmqF,EAAaK,OAASN,EAAOjqF,IAEzJ,OADAd,OAAOyE,OAAOumF,EAAcC,GACrBz9D,CACX,CAEA,MAAM89D,GAAUrf,GAAU,IAANA,GAAiB,IAANA,EACzBsf,GAAY,CAACtf,EAAGtoE,EAAGG,KAAMmS,KAAKC,IAAI,EAAG,IAAM+1D,GAAK,IAAMh2D,KAAKu1E,KAAKvf,EAAItoE,GAAKuiF,GAAMpiF,GAC/E2nF,GAAa,CAACxf,EAAGtoE,EAAGG,IAAImS,KAAKC,IAAI,GAAI,GAAK+1D,GAAKh2D,KAAKu1E,KAAKvf,EAAItoE,GAAKuiF,GAAMpiF,GAAK,EAKzE4nF,GAAU,CAChBC,OAAS1f,GAAIA,EACb2f,WAAa3f,GAAIA,EAAIA,EACrB4f,YAAc5f,IAAKA,GAAKA,EAAI,GAC5B6f,cAAgB7f,IAAKA,GAAK,IAAO,EAAI,GAAMA,EAAIA,GAAK,MAASA,GAAKA,EAAI,GAAK,GAC3E8f,YAAc9f,GAAIA,EAAIA,EAAIA,EAC1B+f,aAAe/f,IAAKA,GAAK,GAAKA,EAAIA,EAAI,EACtCggB,eAAiBhgB,IAAKA,GAAK,IAAO,EAAI,GAAMA,EAAIA,EAAIA,EAAI,KAAQA,GAAK,GAAKA,EAAIA,EAAI,GAClFigB,YAAcjgB,GAAIA,EAAIA,EAAIA,EAAIA,EAC9BkgB,aAAelgB,MAAOA,GAAK,GAAKA,EAAIA,EAAIA,EAAI,GAC5CmgB,eAAiBngB,IAAKA,GAAK,IAAO,EAAI,GAAMA,EAAIA,EAAIA,EAAIA,GAAK,KAAQA,GAAK,GAAKA,EAAIA,EAAIA,EAAI,GAC3FogB,YAAcpgB,GAAIA,EAAIA,EAAIA,EAAIA,EAAIA,EAClCqgB,aAAergB,IAAKA,GAAK,GAAKA,EAAIA,EAAIA,EAAIA,EAAI,EAC9CsgB,eAAiBtgB,IAAKA,GAAK,IAAO,EAAI,GAAMA,EAAIA,EAAIA,EAAIA,EAAIA,EAAI,KAAQA,GAAK,GAAKA,EAAIA,EAAIA,EAAIA,EAAI,GAClGugB,WAAavgB,GAA6B,EAAxBh2D,KAAKw2E,IAAIxgB,EAAIsa,IAC/BmG,YAAczgB,GAAIh2D,KAAKu1E,IAAIvf,EAAIsa,IAC/BoG,cAAgB1gB,IAAK,IAAOh2D,KAAKw2E,IAAIxG,GAAKha,GAAK,GAC/C2gB,WAAa3gB,GAAU,IAANA,EAAU,EAAIh2D,KAAKC,IAAI,EAAG,IAAM+1D,EAAI,IACrD4gB,YAAc5gB,GAAU,IAANA,EAAU,EAA4B,EAAvBh2D,KAAKC,IAAI,GAAI,GAAK+1D,GACnD6gB,cAAgB7gB,GAAIqf,GAAOrf,GAAKA,EAAIA,EAAI,GAAM,GAAMh2D,KAAKC,IAAI,EAAG,IAAU,EAAJ+1D,EAAQ,IAAM,IAAyC,EAAjCh2D,KAAKC,IAAI,GAAI,IAAU,EAAJ+1D,EAAQ,KACvH8gB,WAAa9gB,GAAIA,GAAK,EAAIA,IAAMh2D,KAAK22C,KAAK,EAAIqf,EAAIA,GAAK,GACvD+gB,YAAc/gB,GAAIh2D,KAAK22C,KAAK,GAAKqf,GAAK,GAAKA,GAC3CghB,cAAgBhhB,IAAKA,GAAK,IAAO,GAAK,IAAOh2D,KAAK22C,KAAK,EAAIqf,EAAIA,GAAK,GAAK,IAAOh2D,KAAK22C,KAAK,GAAKqf,GAAK,GAAKA,GAAK,GAC9GihB,cAAgBjhB,GAAIqf,GAAOrf,GAAKA,EAAIsf,GAAUtf,EAAG,KAAO,IACxDkhB,eAAiBlhB,GAAIqf,GAAOrf,GAAKA,EAAIwf,GAAWxf,EAAG,KAAO,IAC1D,gBAAAmhB,CAAkBnhB,GACd,MAAMtoE,EAAI,MAEV,OAAO2nF,GAAOrf,GAAKA,EAAIA,EAAI,GAAM,GAAMsf,GAAc,EAAJtf,EAAOtoE,EAD9C,KACsD,GAAM,GAAM8nF,GAAe,EAAJxf,EAAQ,EAAGtoE,EADxF,IAEd,EACA,UAAA0pF,CAAYphB,GACR,MAAMtoE,EAAI,QACV,OAAOsoE,EAAIA,IAAMtoE,EAAI,GAAKsoE,EAAItoE,EAClC,EACA,WAAA2pF,CAAarhB,GACT,MAAMtoE,EAAI,QACV,OAAQsoE,GAAK,GAAKA,IAAMtoE,EAAI,GAAKsoE,EAAItoE,GAAK,CAC9C,EACA,aAAA4pF,CAAethB,GACX,IAAItoE,EAAI,QACR,OAAKsoE,GAAK,IAAO,EACCA,EAAIA,IAAqB,GAAdtoE,GAAK,QAAcsoE,EAAItoE,GAAzC,GAEJ,KAAQsoE,GAAK,GAAKA,IAAqB,GAAdtoE,GAAK,QAAcsoE,EAAItoE,GAAK,EAChE,EACA6pF,aAAevhB,GAAI,EAAIyf,GAAQ+B,cAAc,EAAIxhB,GACjD,aAAAwhB,CAAexhB,GACX,MAAMhjD,EAAI,OACJ3P,EAAI,KACV,OAAI2yD,EAAI,EAAI3yD,EACD2P,EAAIgjD,EAAIA,EAEfA,EAAI,EAAI3yD,EACD2P,GAAKgjD,GAAK,IAAM3yD,GAAK2yD,EAAI,IAEhCA,EAAI,IAAM3yD,EACH2P,GAAKgjD,GAAK,KAAO3yD,GAAK2yD,EAAI,MAE9BhjD,GAAKgjD,GAAK,MAAQ3yD,GAAK2yD,EAAI,OACtC,EACAyhB,gBAAkBzhB,GAAIA,EAAI,GAAoC,GAA9Byf,GAAQ8B,aAAiB,EAAJvhB,GAAkD,GAAnCyf,GAAQ+B,cAAkB,EAAJxhB,EAAQ,GAAW,IAGjH,SAAS0hB,GAAoB3sF,GACzB,GAAIA,GAA0B,kBAAVA,EAAoB,CACpC,MAAMyE,EAAOzE,EAAMd,WACnB,MAAgB,2BAATuF,GAA8C,4BAATA,CAChD,CACA,OAAO,CACX,CACA,SAASk9B,GAAM3hC,GACX,OAAO2sF,GAAoB3sF,GAASA,EAAQ,IAAI4hC,EAAM5hC,EAC1D,CACA,SAAS4sF,GAAc5sF,GACnB,OAAO2sF,GAAoB3sF,GAASA,EAAQ,IAAI4hC,EAAM5hC,GAAO6iF,SAAS,IAAKD,OAAO,IAAKlN,WAC3F,CAEA,MAAMmX,GAAU,CACZ,IACA,IACA,cACA,SACA,WAEEzrD,GAAS,CACX,QACA,cACA,mBAgFJ,MAAM0rD,GAAY,IAAIC,IAWtB,SAASC,GAAa/4E,EAAK4J,EAAQgI,GAC/B,OAXJ,SAAyBhI,EAAQgI,GAC7BA,EAAUA,GAAW,CAAC,EACtB,MAAMonE,EAAWpvE,EAASvT,KAAKC,UAAUsb,GACzC,IAAIqnE,EAAYJ,GAAUh/E,IAAIm/E,GAK9B,OAJKC,IACDA,EAAY,IAAI/wC,KAAKgxC,aAAatvE,EAAQgI,GAC1CinE,GAAUvgE,IAAI0gE,EAAUC,IAErBA,CACX,CAEWE,CAAgBvvE,EAAQgI,GAAS6a,OAAOzsB,EACnD,CAEA,MAAMo5E,GAAa,CAClB,MAAAv7D,CAAQ9xB,GACD,OAAO8vB,EAAQ9vB,GAAUA,EAAQ,GAAKA,CAC1C,EACH,OAAAstF,CAASC,EAAWr6E,EAAOs6E,GACpB,GAAkB,IAAdD,EACA,MAAO,IAEX,MAAM1vE,EAASla,KAAK8pF,MAAM5nE,QAAQhI,OAClC,IAAI6vE,EACAha,EAAQ6Z,EACZ,GAAIC,EAAMhvF,OAAS,EAAG,CAClB,MAAMmvF,EAAU14E,KAAKnV,IAAImV,KAAK4pC,IAAI2uC,EAAM,GAAGxtF,OAAQiV,KAAK4pC,IAAI2uC,EAAMA,EAAMhvF,OAAS,GAAGwB,SAChF2tF,EAAU,MAAQA,EAAU,QAC5BD,EAAW,cAEfha,EA8BZ,SAAwB6Z,EAAWC,GAC/B,IAAI9Z,EAAQ8Z,EAAMhvF,OAAS,EAAIgvF,EAAM,GAAGxtF,MAAQwtF,EAAM,GAAGxtF,MAAQwtF,EAAM,GAAGxtF,MAAQwtF,EAAM,GAAGxtF,MACvFiV,KAAK4pC,IAAI60B,IAAU,GAAK6Z,IAAct4E,KAAKwtB,MAAM8qD,KACjD7Z,EAAQ6Z,EAAYt4E,KAAKwtB,MAAM8qD,IAEnC,OAAO7Z,CACX,CApCoBka,CAAeL,EAAWC,EACtC,CACA,MAAMK,EAAWnI,GAAMzwE,KAAK4pC,IAAI60B,IAC1Boa,EAAazoF,MAAMwoF,GAAY,EAAI54E,KAAKnV,IAAImV,KAAKpV,KAAK,EAAIoV,KAAKwtB,MAAMorD,GAAW,IAAK,GACrFhoE,EAAU,CACZ6nE,WACAK,sBAAuBD,EACvBE,sBAAuBF,GAG3B,OADA9uF,OAAOyE,OAAOoiB,EAASliB,KAAKkiB,QAAQ2nE,MAAM9sD,QACnCssD,GAAaO,EAAW1vE,EAAQgI,EAC3C,EACH,WAAAooE,CAAaV,EAAWr6E,EAAOs6E,GACxB,GAAkB,IAAdD,EACA,MAAO,IAEX,MAAMW,EAASV,EAAMt6E,GAAOi7E,aAAeZ,EAAYt4E,KAAKC,IAAI,GAAID,KAAKwtB,MAAMijD,GAAM6H,KACrF,MAAI,CACA,EACA,EACA,EACA,EACA,GACA,IACF/3D,SAAS04D,IAAWh7E,EAAQ,GAAMs6E,EAAMhvF,OAC/B6uF,GAAWC,QAAQnuF,KAAKwE,KAAM4pF,EAAWr6E,EAAOs6E,GAEpD,EACX,GASH,IAAIY,GAAQ,CACTf,eA2EJ,MAAMgB,GAAYrvF,OAAO8S,OAAO,MAC1Bw8E,GAActvF,OAAO8S,OAAO,MACjC,SAASy8E,GAAWtlB,EAAM3mE,GACvB,IAAKA,EACD,OAAO2mE,EAEX,MAAM9/C,EAAO7mB,EAAIiG,MAAM,KACvB,IAAI,IAAIjK,EAAI,EAAG8G,EAAI+jB,EAAK3qB,OAAQF,EAAI8G,IAAK9G,EAAE,CACvC,MAAMgD,EAAI6nB,EAAK7qB,GACf2qE,EAAOA,EAAK3nE,KAAO2nE,EAAK3nE,GAAKtC,OAAO8S,OAAO,MAC/C,CACA,OAAOm3D,CACX,CACA,SAAS18C,GAAIxnB,EAAMypF,EAAO18D,GACtB,MAAqB,kBAAV08D,EACAhiF,EAAM+hF,GAAWxpF,EAAMypF,GAAQ18D,GAEnCtlB,EAAM+hF,GAAWxpF,EAAM,IAAKypF,EACvC,CACC,MAAMC,GACH,WAAA1/D,CAAY2/D,EAAcC,GACtBhrF,KAAKinD,eAAY7pD,EACjB4C,KAAKogC,gBAAkB,kBACvBpgC,KAAKgjC,YAAc,kBACnBhjC,KAAKg+B,MAAQ,OACbh+B,KAAKirF,SAAW,CAAC,EACjBjrF,KAAKuxD,iBAAoB9yD,GAAUA,EAAQqrF,MAAMoB,SAASC,sBAC1DnrF,KAAK4wC,SAAW,CAAC,EACjB5wC,KAAKoS,OAAS,CACV,YACA,WACA,QACA,aACA,aAEJpS,KAAKorF,KAAO,CACRC,OAAQ,qDACR96E,KAAM,GACN4mB,MAAO,SACP6S,WAAY,IACZo0C,OAAQ,MAEZp+E,KAAKsrF,MAAQ,CAAC,EACdtrF,KAAKurF,qBAAuB,CAAC3lE,EAAK1D,IAAU+mE,GAAc/mE,EAAQke,iBAClEpgC,KAAKwrF,iBAAmB,CAAC5lE,EAAK1D,IAAU+mE,GAAc/mE,EAAQ8gB,aAC9DhjC,KAAKyrF,WAAa,CAAC7lE,EAAK1D,IAAU+mE,GAAc/mE,EAAQ8b,OACxDh+B,KAAK0rF,UAAY,IACjB1rF,KAAK2rF,YAAc,CACfC,KAAM,UACNC,WAAW,EACXC,kBAAkB,GAEtB9rF,KAAK+rF,qBAAsB,EAC3B/rF,KAAKgsF,QAAU,KACfhsF,KAAKisF,QAAU,KACfjsF,KAAKksF,SAAU,EACflsF,KAAKd,QAAU,CAAC,EAChBc,KAAKmsF,YAAa,EAClBnsF,KAAKosF,WAAQhvF,EACb4C,KAAKqsF,OAAS,CAAC,EACfrsF,KAAKssF,UAAW,EAChBtsF,KAAKusF,yBAA0B,EAC/BvsF,KAAKwsF,SAASzB,GACd/qF,KAAKD,MAAMirF,EACf,CACH,GAAApiE,CAAIiiE,EAAO18D,GACJ,OAAOvF,GAAI5oB,KAAM6qF,EAAO18D,EAC5B,CACH,GAAAhkB,CAAI0gF,GACG,OAAOD,GAAW5qF,KAAM6qF,EAC5B,CACH,QAAA2B,CAAS3B,EAAO18D,GACT,OAAOvF,GAAI+hE,GAAaE,EAAO18D,EACnC,CACA,QAAAyO,CAASiuD,EAAO18D,GACZ,OAAOvF,GAAI8hE,GAAWG,EAAO18D,EACjC,CACH,KAAAyG,CAAMi2D,EAAOtrF,EAAMktF,EAAaC,GACzB,MAAMC,EAAc/B,GAAW5qF,KAAM6qF,GAC/B+B,EAAoBhC,GAAW5qF,KAAMysF,GACrCI,EAAc,IAAMttF,EAC1BlE,OAAOu3C,iBAAiB+5C,EAAa,CACjC,CAACE,GAAc,CACXxwF,MAAOswF,EAAYptF,GACnBuzC,UAAU,GAEd,CAACvzC,GAAO,CACJsmC,YAAY,EACZ,GAAA17B,GACI,MAAM+3B,EAAQliC,KAAK6sF,GACbptF,EAASmtF,EAAkBF,GACjC,OAAI77D,EAASqR,GACF7mC,OAAOyE,OAAO,CAAC,EAAGL,EAAQyiC,GAE9Bw9C,EAAex9C,EAAOziC,EACjC,EACA,GAAAmpB,CAAKvsB,GACD2D,KAAK6sF,GAAexwF,CACxB,IAGZ,CACA,KAAA0D,CAAM+sF,GACFA,EAAS77D,SAASlxB,GAAQA,EAAMC,OACpC,EAEJ,IAAI2oB,GAA2B,IAAImiE,GAAS,CACxCiC,YAAcxtF,IAAQA,EAAKytF,WAAW,MACtCC,WAAa1tF,GAAgB,WAATA,EACpB+rF,MAAO,CACH4B,UAAW,eAEfvB,YAAa,CACToB,aAAa,EACbE,YAAY,IAEjB,CAlVH,SAAiCtkE,GAC7BA,EAASC,IAAI,YAAa,CACtBurB,WAAO/2C,EACPob,SAAU,IACV8yB,OAAQ,eACR9wC,QAAI4C,EACJwiB,UAAMxiB,EACN+vF,UAAM/vF,EACN0iB,QAAI1iB,EACJ0D,UAAM1D,IAEVurB,EAAS6jE,SAAS,YAAa,CAC3BU,WAAW,EACXD,YAAY,EACZF,YAAcxtF,GAAgB,eAATA,GAAkC,eAATA,GAAkC,OAATA,IAE3EopB,EAASC,IAAI,aAAc,CACvB6U,OAAQ,CACJ38B,KAAM,QACN0+C,WAAY/hB,IAEhByrD,QAAS,CACLpoF,KAAM,SACN0+C,WAAY0pC,MAGpBvgE,EAAS6jE,SAAS,aAAc,CAC5BU,UAAW,cAEfvkE,EAASC,IAAI,cAAe,CACxBgjC,OAAQ,CACJ3E,UAAW,CACPzuC,SAAU,MAGlB40E,OAAQ,CACJnmC,UAAW,CACPzuC,SAAU,IAGlBqjB,KAAM,CACFwxD,WAAY,CACR5vD,OAAQ,CACJ7d,KAAM,eAEV0tE,QAAS,CACLxsF,KAAM,UACN0X,SAAU,KAItBg4B,KAAM,CACF68C,WAAY,CACR5vD,OAAQ,CACJ3d,GAAI,eAERwtE,QAAS,CACLxsF,KAAM,UACNwqC,OAAQ,SACR9wC,GAAKmI,GAAQ,EAAJA,MAK7B,EAEA,SAA8BgmB,GAC1BA,EAASC,IAAI,SAAU,CACnB2kE,aAAa,EACbC,QAAS,CACLxqC,IAAK,EACLG,MAAO,EACPD,OAAQ,EACRD,KAAM,IAGlB,EA0EA,SAA4Bt6B,GACxBA,EAASC,IAAI,QAAS,CAClBwO,SAAS,EACT2V,QAAQ,EACRizC,SAAS,EACTyN,aAAa,EACpBC,OAAQ,QACDC,MAAM,EACbC,MAAO,EACAC,KAAM,CACFz2D,SAAS,EACT02D,UAAW,EACXC,iBAAiB,EACjBC,WAAW,EACXC,WAAY,EACZC,UAAW,CAACC,EAAMjsE,IAAUA,EAAQ4rE,UACpCM,UAAW,CAACD,EAAMjsE,IAAUA,EAAQ8b,MACpC+O,QAAQ,GAEZshD,OAAQ,CACJj3D,SAAS,EACTk3D,KAAM,GACNC,WAAY,EACZlrC,MAAO,GAEX3iC,MAAO,CACH0W,SAAS,EACTnY,KAAM,GACNuuE,QAAS,CACLxqC,IAAK,EACLE,OAAQ,IAGhB2mC,MAAO,CACH2E,YAAa,EACbC,YAAa,GACbC,QAAQ,EACRC,gBAAiB,EACjBC,gBAAiB,GACjBpB,QAAS,EACTp2D,SAAS,EACTy3D,UAAU,EACVC,gBAAiB,EACjBC,YAAa,EACbzpE,SAAUmlE,GAAMf,WAAWv7D,OAC3BqnB,MAAO,CAAC,EACRD,MAAO,CAAC,EACR6vC,MAAO,SACP4J,WAAY,OACZC,mBAAmB,EACnBC,cAAe,4BACfC,gBAAiB,KAGzBxmE,EAASiM,MAAM,cAAe,QAAS,GAAI,SAC3CjM,EAASiM,MAAM,aAAc,QAAS,GAAI,eAC1CjM,EAASiM,MAAM,eAAgB,QAAS,GAAI,eAC5CjM,EAASiM,MAAM,cAAe,QAAS,GAAI,SAC3CjM,EAAS6jE,SAAS,QAAS,CACvBU,WAAW,EACXH,YAAcxtF,IAAQA,EAAKytF,WAAW,YAAcztF,EAAKytF,WAAW,UAAqB,aAATztF,GAAgC,WAATA,EACvG0tF,WAAa1tF,GAAgB,eAATA,GAAkC,mBAATA,GAAsC,SAATA,IAE9EopB,EAAS6jE,SAAS,SAAU,CACxBU,UAAW,UAEfvkE,EAAS6jE,SAAS,cAAe,CAC7BO,YAAcxtF,GAAgB,oBAATA,GAAuC,aAATA,EACnD0tF,WAAa1tF,GAAgB,oBAATA,GAE5B,IAyII,SAAS6vF,GAAaxpE,EAAKtf,EAAM+oF,EAAIC,EAAS/vD,GAC9C,IAAIgwD,EAAYjpF,EAAKi5B,GAQrB,OAPKgwD,IACDA,EAAYjpF,EAAKi5B,GAAU3Z,EAAI4pE,YAAYjwD,GAAQ8jB,MACnDgsC,EAAGrzF,KAAKujC,IAERgwD,EAAYD,IACZA,EAAUC,GAEPD,CACX,CAIA,SAASG,GAAa7pE,EAAKwlE,EAAMsE,EAAe5vD,GAE5C,IAAIx5B,GADJw5B,EAAQA,GAAS,CAAC,GACDx5B,KAAOw5B,EAAMx5B,MAAQ,CAAC,EACnC+oF,EAAKvvD,EAAM6vD,eAAiB7vD,EAAM6vD,gBAAkB,GACpD7vD,EAAMsrD,OAASA,IACf9kF,EAAOw5B,EAAMx5B,KAAO,CAAC,EACrB+oF,EAAKvvD,EAAM6vD,eAAiB,GAC5B7vD,EAAMsrD,KAAOA,GAEjBxlE,EAAIgF,OACJhF,EAAIwlE,KAAOA,EACX,IAAIkE,EAAU,EACd,MAAMnP,EAAOuP,EAAc70F,OAC3B,IAAIF,EAAG0I,EAAGusF,EAAMC,EAAOC,EACvB,IAAIn1F,EAAI,EAAGA,EAAIwlF,EAAMxlF,IAGjB,GAFAk1F,EAAQH,EAAc/0F,QAERyC,IAAVyyF,GAAiC,OAAVA,GAAmB1jE,EAAQ0jE,IAE/C,GAAI1jE,EAAQ0jE,GAGf,IAAIxsF,EAAI,EAAGusF,EAAOC,EAAMh1F,OAAQwI,EAAIusF,EAAMvsF,IACtCysF,EAAcD,EAAMxsF,QAEAjG,IAAhB0yF,GAA6C,OAAhBA,GAAyB3jE,EAAQ2jE,KAC9DR,EAAUF,GAAaxpE,EAAKtf,EAAM+oF,EAAIC,EAASQ,SARvDR,EAAUF,GAAaxpE,EAAKtf,EAAM+oF,EAAIC,EAASO,GAavDjqE,EAAImqE,UACJ,MAAMC,EAAQX,EAAGx0F,OAAS,EAC1B,GAAIm1F,EAAQN,EAAc70F,OAAQ,CAC9B,IAAIF,EAAI,EAAGA,EAAIq1F,EAAOr1F,WACX2L,EAAK+oF,EAAG10F,IAEnB00F,EAAGxjE,OAAO,EAAGmkE,EACjB,CACA,OAAOV,CACX,CAQI,SAASW,GAAYnG,EAAOoG,EAAO7sC,GACnC,MAAMkO,EAAmBu4B,EAAMqG,wBACzBC,EAAsB,IAAV/sC,EAAc/xC,KAAKnV,IAAIknD,EAAQ,EAAG,IAAO,EAC3D,OAAO/xC,KAAKwwB,OAAOouD,EAAQE,GAAa7+B,GAAoBA,EAAmB6+B,CACnF,CAGI,SAASC,GAAYC,EAAQ1qE,IAC7BA,EAAMA,GAAO0qE,EAAOp8E,WAAW,OAC3B0W,OAGJhF,EAAI2qE,iBACJ3qE,EAAI4qE,UAAU,EAAG,EAAGF,EAAOjtC,MAAOitC,EAAOltC,QACzCx9B,EAAImqE,SACR,CACA,SAASU,GAAU7qE,EAAK1D,EAAShnB,EAAGqrD,GAEhCmqC,GAAgB9qE,EAAK1D,EAAShnB,EAAGqrD,EAAG,KACxC,CAEA,SAASmqC,GAAgB9qE,EAAK1D,EAAShnB,EAAGqrD,EAAG6pB,GACzC,IAAItvE,EAAM6vF,EAASC,EAASrgF,EAAMsgF,EAAcxtC,EAAOytC,EAAUC,EACjE,MAAM55D,EAAQjV,EAAQ8uE,WAChBC,EAAW/uE,EAAQ+uE,SACnBC,EAAShvE,EAAQgvE,OACvB,IAAIC,GAAOF,GAAY,GAAKtP,GAC5B,GAAIxqD,GAA0B,kBAAVA,IAChBr2B,EAAOq2B,EAAM57B,WACA,8BAATuF,GAAiD,+BAATA,GAMxC,OALA8kB,EAAIgF,OACJhF,EAAIwrE,UAAUl2F,EAAGqrD,GACjB3gC,EAAIw5D,OAAO+R,GACXvrE,EAAIyrE,UAAUl6D,GAAQA,EAAMksB,MAAQ,GAAIlsB,EAAMisB,OAAS,EAAGjsB,EAAMksB,MAAOlsB,EAAMisB,aAC7Ex9B,EAAImqE,UAIZ,KAAIruF,MAAMwvF,IAAWA,GAAU,GAA/B,CAIA,OADAtrE,EAAI0rE,YACGn6D,GAEH,QACQi5C,EACAxqD,EAAI2rE,QAAQr2F,EAAGqrD,EAAG6pB,EAAI,EAAG8gB,EAAQ,EAAG,EAAG3P,IAEvC37D,EAAI4rE,IAAIt2F,EAAGqrD,EAAG2qC,EAAQ,EAAG3P,IAE7B37D,EAAI6rE,YACJ,MACJ,IAAK,WACDpuC,EAAQ+sB,EAAIA,EAAI,EAAI8gB,EACpBtrE,EAAI8rE,OAAOx2F,EAAIoW,KAAKu1E,IAAIsK,GAAO9tC,EAAOkD,EAAIj1C,KAAKw2E,IAAIqJ,GAAOD,GAC1DC,GAAOrP,GACPl8D,EAAI+rE,OAAOz2F,EAAIoW,KAAKu1E,IAAIsK,GAAO9tC,EAAOkD,EAAIj1C,KAAKw2E,IAAIqJ,GAAOD,GAC1DC,GAAOrP,GACPl8D,EAAI+rE,OAAOz2F,EAAIoW,KAAKu1E,IAAIsK,GAAO9tC,EAAOkD,EAAIj1C,KAAKw2E,IAAIqJ,GAAOD,GAC1DtrE,EAAI6rE,YACJ,MACJ,IAAK,cAQDZ,EAAwB,KAATK,EACf3gF,EAAO2gF,EAASL,EAChBF,EAAUr/E,KAAKw2E,IAAIqJ,EAAMtP,IAActxE,EACvCugF,EAAWx/E,KAAKw2E,IAAIqJ,EAAMtP,KAAezR,EAAIA,EAAI,EAAIygB,EAAetgF,GACpEqgF,EAAUt/E,KAAKu1E,IAAIsK,EAAMtP,IAActxE,EACvCwgF,EAAWz/E,KAAKu1E,IAAIsK,EAAMtP,KAAezR,EAAIA,EAAI,EAAIygB,EAAetgF,GACpEqV,EAAI4rE,IAAIt2F,EAAI41F,EAAUvqC,EAAIqqC,EAASC,EAAcM,EAAM7P,GAAI6P,EAAMvP,IACjEh8D,EAAI4rE,IAAIt2F,EAAI61F,EAAUxqC,EAAIoqC,EAASE,EAAcM,EAAMvP,GAASuP,GAChEvrE,EAAI4rE,IAAIt2F,EAAI41F,EAAUvqC,EAAIqqC,EAASC,EAAcM,EAAKA,EAAMvP,IAC5Dh8D,EAAI4rE,IAAIt2F,EAAI61F,EAAUxqC,EAAIoqC,EAASE,EAAcM,EAAMvP,GAASuP,EAAM7P,IACtE17D,EAAI6rE,YACJ,MACJ,IAAK,OACD,IAAKR,EAAU,CACX1gF,EAAOe,KAAKsgF,QAAUV,EACtB7tC,EAAQ+sB,EAAIA,EAAI,EAAI7/D,EACpBqV,EAAIi+B,KAAK3oD,EAAImoD,EAAOkD,EAAIh2C,EAAM,EAAI8yC,EAAO,EAAI9yC,GAC7C,KACJ,CACA4gF,GAAOtP,GACS,IAAK,UACrBiP,EAAWx/E,KAAKw2E,IAAIqJ,IAAQ/gB,EAAIA,EAAI,EAAI8gB,GACxCP,EAAUr/E,KAAKw2E,IAAIqJ,GAAOD,EAC1BN,EAAUt/E,KAAKu1E,IAAIsK,GAAOD,EAC1BH,EAAWz/E,KAAKu1E,IAAIsK,IAAQ/gB,EAAIA,EAAI,EAAI8gB,GACxCtrE,EAAI8rE,OAAOx2F,EAAI41F,EAAUvqC,EAAIqqC,GAC7BhrE,EAAI+rE,OAAOz2F,EAAI61F,EAAUxqC,EAAIoqC,GAC7B/qE,EAAI+rE,OAAOz2F,EAAI41F,EAAUvqC,EAAIqqC,GAC7BhrE,EAAI+rE,OAAOz2F,EAAI61F,EAAUxqC,EAAIoqC,GAC7B/qE,EAAI6rE,YACJ,MACJ,IAAK,WACDN,GAAOtP,GACS,IAAK,QACrBiP,EAAWx/E,KAAKw2E,IAAIqJ,IAAQ/gB,EAAIA,EAAI,EAAI8gB,GACxCP,EAAUr/E,KAAKw2E,IAAIqJ,GAAOD,EAC1BN,EAAUt/E,KAAKu1E,IAAIsK,GAAOD,EAC1BH,EAAWz/E,KAAKu1E,IAAIsK,IAAQ/gB,EAAIA,EAAI,EAAI8gB,GACxCtrE,EAAI8rE,OAAOx2F,EAAI41F,EAAUvqC,EAAIqqC,GAC7BhrE,EAAI+rE,OAAOz2F,EAAI41F,EAAUvqC,EAAIqqC,GAC7BhrE,EAAI8rE,OAAOx2F,EAAI61F,EAAUxqC,EAAIoqC,GAC7B/qE,EAAI+rE,OAAOz2F,EAAI61F,EAAUxqC,EAAIoqC,GAC7B,MACJ,IAAK,OACDG,EAAWx/E,KAAKw2E,IAAIqJ,IAAQ/gB,EAAIA,EAAI,EAAI8gB,GACxCP,EAAUr/E,KAAKw2E,IAAIqJ,GAAOD,EAC1BN,EAAUt/E,KAAKu1E,IAAIsK,GAAOD,EAC1BH,EAAWz/E,KAAKu1E,IAAIsK,IAAQ/gB,EAAIA,EAAI,EAAI8gB,GACxCtrE,EAAI8rE,OAAOx2F,EAAI41F,EAAUvqC,EAAIqqC,GAC7BhrE,EAAI+rE,OAAOz2F,EAAI41F,EAAUvqC,EAAIqqC,GAC7BhrE,EAAI8rE,OAAOx2F,EAAI61F,EAAUxqC,EAAIoqC,GAC7B/qE,EAAI+rE,OAAOz2F,EAAI61F,EAAUxqC,EAAIoqC,GAC7BQ,GAAOtP,GACPiP,EAAWx/E,KAAKw2E,IAAIqJ,IAAQ/gB,EAAIA,EAAI,EAAI8gB,GACxCP,EAAUr/E,KAAKw2E,IAAIqJ,GAAOD,EAC1BN,EAAUt/E,KAAKu1E,IAAIsK,GAAOD,EAC1BH,EAAWz/E,KAAKu1E,IAAIsK,IAAQ/gB,EAAIA,EAAI,EAAI8gB,GACxCtrE,EAAI8rE,OAAOx2F,EAAI41F,EAAUvqC,EAAIqqC,GAC7BhrE,EAAI+rE,OAAOz2F,EAAI41F,EAAUvqC,EAAIqqC,GAC7BhrE,EAAI8rE,OAAOx2F,EAAI61F,EAAUxqC,EAAIoqC,GAC7B/qE,EAAI+rE,OAAOz2F,EAAI61F,EAAUxqC,EAAIoqC,GAC7B,MACJ,IAAK,OACDA,EAAUvgB,EAAIA,EAAI,EAAI9+D,KAAKw2E,IAAIqJ,GAAOD,EACtCN,EAAUt/E,KAAKu1E,IAAIsK,GAAOD,EAC1BtrE,EAAI8rE,OAAOx2F,EAAIy1F,EAASpqC,EAAIqqC,GAC5BhrE,EAAI+rE,OAAOz2F,EAAIy1F,EAASpqC,EAAIqqC,GAC5B,MACJ,IAAK,OACDhrE,EAAI8rE,OAAOx2F,EAAGqrD,GACd3gC,EAAI+rE,OAAOz2F,EAAIoW,KAAKw2E,IAAIqJ,IAAQ/gB,EAAIA,EAAI,EAAI8gB,GAAS3qC,EAAIj1C,KAAKu1E,IAAIsK,GAAOD,GACzE,MACJ,KAAK,EACDtrE,EAAI6rE,YAGZ7rE,EAAIisE,OACA3vE,EAAQ4vE,YAAc,GACtBlsE,EAAImsE,QA3GR,CA6GJ,CAOI,SAASC,GAAeC,EAAOC,EAAMC,GAErC,OADAA,EAASA,GAAU,IACXD,GAAQD,GAASA,EAAM/2F,EAAIg3F,EAAKjvC,KAAOkvC,GAAUF,EAAM/2F,EAAIg3F,EAAK/uC,MAAQgvC,GAAUF,EAAM1rC,EAAI2rC,EAAKlvC,IAAMmvC,GAAUF,EAAM1rC,EAAI2rC,EAAKhvC,OAASivC,CACrJ,CACA,SAASC,GAASxsE,EAAKssE,GACnBtsE,EAAIgF,OACJhF,EAAI0rE,YACJ1rE,EAAIi+B,KAAKquC,EAAKjvC,KAAMivC,EAAKlvC,IAAKkvC,EAAK/uC,MAAQ+uC,EAAKjvC,KAAMivC,EAAKhvC,OAASgvC,EAAKlvC,KACzEp9B,EAAI+nE,MACR,CACA,SAAS0E,GAAWzsE,GAChBA,EAAImqE,SACR,CAGI,SAASuC,GAAe1sE,EAAKyE,EAAU5qB,EAAQ8yF,EAAM3G,GACrD,IAAKvhE,EACD,OAAOzE,EAAI+rE,OAAOlyF,EAAOvE,EAAGuE,EAAO8mD,GAEvC,GAAa,WAATqlC,EAAmB,CACnB,MAAM4G,GAAYnoE,EAASnvB,EAAIuE,EAAOvE,GAAK,EAC3C0qB,EAAI+rE,OAAOa,EAAUnoE,EAASk8B,GAC9B3gC,EAAI+rE,OAAOa,EAAU/yF,EAAO8mD,EAChC,KAAoB,UAATqlC,MAAuB2G,EAC9B3sE,EAAI+rE,OAAOtnE,EAASnvB,EAAGuE,EAAO8mD,GAE9B3gC,EAAI+rE,OAAOlyF,EAAOvE,EAAGmvB,EAASk8B,GAElC3gC,EAAI+rE,OAAOlyF,EAAOvE,EAAGuE,EAAO8mD,EAChC,CAGI,SAASksC,GAAe7sE,EAAKyE,EAAU5qB,EAAQ8yF,GAC/C,IAAKloE,EACD,OAAOzE,EAAI+rE,OAAOlyF,EAAOvE,EAAGuE,EAAO8mD,GAEvC3gC,EAAI8sE,cAAcH,EAAOloE,EAASsoE,KAAOtoE,EAASuoE,KAAML,EAAOloE,EAASwoE,KAAOxoE,EAASyoE,KAAMP,EAAO9yF,EAAOmzF,KAAOnzF,EAAOkzF,KAAMJ,EAAO9yF,EAAOqzF,KAAOrzF,EAAOozF,KAAMpzF,EAAOvE,EAAGuE,EAAO8mD,EACvL,CAkBA,SAASwsC,GAAantE,EAAK1qB,EAAGqrD,EAAGzhD,EAAM2B,GACnC,GAAIA,EAAKusF,eAAiBvsF,EAAKwsF,UAAW,CAOtC,MAAMC,EAAUttE,EAAI4pE,YAAY1qF,GAC1Bm+C,EAAO/nD,EAAIg4F,EAAQC,sBACnBhwC,EAAQjoD,EAAIg4F,EAAQE,uBACpBpwC,EAAMuD,EAAI2sC,EAAQG,wBAClBnwC,EAASqD,EAAI2sC,EAAQI,yBACrBC,EAAc9sF,EAAKusF,eAAiBhwC,EAAME,GAAU,EAAIA,EAC9Dt9B,EAAI4tE,YAAc5tE,EAAI6tE,UACtB7tE,EAAI0rE,YACJ1rE,EAAIkoE,UAAYrnF,EAAKitF,iBAAmB,EACxC9tE,EAAI8rE,OAAOzuC,EAAMswC,GACjB3tE,EAAI+rE,OAAOxuC,EAAOowC,GAClB3tE,EAAImsE,QACR,CACJ,CACA,SAAS4B,GAAa/tE,EAAKnf,GACvB,MAAMmtF,EAAWhuE,EAAI6tE,UACrB7tE,EAAI6tE,UAAYhtF,EAAKu3B,MACrBpY,EAAIiuE,SAASptF,EAAKw8C,KAAMx8C,EAAKu8C,IAAKv8C,EAAK48C,MAAO58C,EAAK28C,QACnDx9B,EAAI6tE,UAAYG,CACpB,CAGI,SAASE,GAAWluE,EAAK3G,EAAM/jB,EAAGqrD,EAAG6kC,EAAM3kF,EAAO,CAAC,GACnD,MAAMT,EAAQmmB,EAAQlN,GAAQA,EAAO,CACjCA,GAEE8yE,EAAStrF,EAAKstF,YAAc,GAA0B,KAArBttF,EAAKutF,YAC5C,IAAIr5F,EAAGmK,EAIP,IAHA8gB,EAAIgF,OACJhF,EAAIwlE,KAAOA,EAAK7rD,OAtDpB,SAAuB3Z,EAAKnf,GACpBA,EAAKwtF,aACLruE,EAAIwrE,UAAU3qF,EAAKwtF,YAAY,GAAIxtF,EAAKwtF,YAAY,IAEnD1U,EAAc94E,EAAKwqF,WACpBrrE,EAAIw5D,OAAO34E,EAAKwqF,UAEhBxqF,EAAKu3B,QACLpY,EAAI6tE,UAAYhtF,EAAKu3B,OAErBv3B,EAAKytF,YACLtuE,EAAIsuE,UAAYztF,EAAKytF,WAErBztF,EAAK0tF,eACLvuE,EAAIuuE,aAAe1tF,EAAK0tF,aAEhC,CAuCIC,CAAcxuE,EAAKnf,GACf9L,EAAI,EAAGA,EAAIqL,EAAMnL,SAAUF,EAC3BmK,EAAOkB,EAAMrL,GACT8L,EAAKk1B,UACLg4D,GAAa/tE,EAAKnf,EAAKk1B,UAEvBo2D,IACItrF,EAAKutF,cACLpuE,EAAI4tE,YAAc/sF,EAAKutF,aAEtBzU,EAAc94E,EAAKstF,eACpBnuE,EAAIkoE,UAAYrnF,EAAKstF,aAEzBnuE,EAAIyuE,WAAWvvF,EAAM5J,EAAGqrD,EAAG9/C,EAAK6tF,WAEpC1uE,EAAI2uE,SAASzvF,EAAM5J,EAAGqrD,EAAG9/C,EAAK6tF,UAC9BvB,GAAantE,EAAK1qB,EAAGqrD,EAAGzhD,EAAM2B,GAC9B8/C,GAAKjjD,OAAO8nF,EAAKphD,YAErBpkB,EAAImqE,SACR,CAKI,SAASyE,GAAmB5uE,EAAKi+B,GACjC,MAAM,EAAE3oD,EAAE,EAAEqrD,EAAE,EAAE6pB,EAAE,EAAElwC,EAAE,OAAEgxD,GAAYrtC,EAEpCj+B,EAAI4rE,IAAIt2F,EAAIg2F,EAAOuD,QAASluC,EAAI2qC,EAAOuD,QAASvD,EAAOuD,QAAS,IAAMnT,GAAIA,IAAI,GAE9E17D,EAAI+rE,OAAOz2F,EAAGqrD,EAAIrmB,EAAIgxD,EAAOwD,YAE7B9uE,EAAI4rE,IAAIt2F,EAAIg2F,EAAOwD,WAAYnuC,EAAIrmB,EAAIgxD,EAAOwD,WAAYxD,EAAOwD,WAAYpT,GAAIM,IAAS,GAE1Fh8D,EAAI+rE,OAAOz2F,EAAIk1E,EAAI8gB,EAAOyD,YAAapuC,EAAIrmB,GAE3Cta,EAAI4rE,IAAIt2F,EAAIk1E,EAAI8gB,EAAOyD,YAAapuC,EAAIrmB,EAAIgxD,EAAOyD,YAAazD,EAAOyD,YAAa/S,GAAS,GAAG,GAEhGh8D,EAAI+rE,OAAOz2F,EAAIk1E,EAAG7pB,EAAI2qC,EAAO0D,UAE7BhvE,EAAI4rE,IAAIt2F,EAAIk1E,EAAI8gB,EAAO0D,SAAUruC,EAAI2qC,EAAO0D,SAAU1D,EAAO0D,SAAU,GAAIhT,IAAS,GAEpFh8D,EAAI+rE,OAAOz2F,EAAIg2F,EAAOuD,QAASluC,EACnC,CAEA,MAAMsuC,GAAc,uCACdC,GAAa,wEAWf,SAASC,GAAa14F,EAAOkU,GAC7B,MAAM7K,GAAW,GAAKrJ,GAAO6H,MAAM2wF,IACnC,IAAKnvF,GAA0B,WAAfA,EAAQ,GACpB,OAAc,IAAP6K,EAGX,OADAlU,GAASqJ,EAAQ,GACVA,EAAQ,IACX,IAAK,KACD,OAAOrJ,EACX,IAAK,IACDA,GAAS,IAGjB,OAAOkU,EAAOlU,CAClB,CACA,MAAM24F,GAAgBryF,IAAKA,GAAK,EAChC,SAASsyF,GAAkB54F,EAAOkG,GAC9B,MAAMsN,EAAM,CAAC,EACPqlF,EAAWrkE,EAAStuB,GACpBijB,EAAO0vE,EAAW75F,OAAOmqB,KAAKjjB,GAASA,EACvC4yF,EAAOtkE,EAASx0B,GAAS64F,EAAYr5F,GAAO6jF,EAAerjF,EAAMR,GAAOQ,EAAMkG,EAAM1G,KAAWA,GAAOQ,EAAMR,GAAQ,IAAIQ,EAC9H,IAAK,MAAMR,KAAQ2pB,EACf3V,EAAIhU,GAAQm5F,GAAaG,EAAKt5F,IAElC,OAAOgU,CACX,CAQI,SAASulF,GAAO/4F,GAChB,OAAO44F,GAAkB54F,EAAO,CAC5B2mD,IAAK,IACLG,MAAO,IACPD,OAAQ,IACRD,KAAM,KAEd,CAOI,SAASoyC,GAAch5F,GACvB,OAAO44F,GAAkB54F,EAAO,CAC5B,UACA,WACA,aACA,eAER,CAQI,SAASi5F,GAAUj5F,GACnB,MAAMjB,EAAMg6F,GAAO/4F,GAGnB,OAFAjB,EAAIioD,MAAQjoD,EAAI6nD,KAAO7nD,EAAI+nD,MAC3B/nD,EAAIgoD,OAAShoD,EAAI4nD,IAAM5nD,EAAI8nD,OACpB9nD,CACX,CAOI,SAASm6F,GAAOrzE,EAAS4yC,GACzB5yC,EAAUA,GAAW,CAAC,EACtB4yC,EAAWA,GAAYnsC,GAASyiE,KAChC,IAAI76E,EAAOmvE,EAAex9D,EAAQ3R,KAAMukD,EAASvkD,MAC7B,kBAATA,IACPA,EAAOjU,SAASiU,EAAM,KAE1B,IAAI4mB,EAAQuoD,EAAex9D,EAAQiV,MAAO29B,EAAS39B,OAC/CA,KAAW,GAAKA,GAAOjzB,MAAM4wF,MAC7Bz0F,QAAQ6O,KAAK,kCAAoCioB,EAAQ,KACzDA,OAAQ/5B,GAEZ,MAAMguF,EAAO,CACTC,OAAQ3L,EAAex9D,EAAQmpE,OAAQv2B,EAASu2B,QAChDrhD,WAAY+qD,GAAarV,EAAex9D,EAAQ8nB,WAAY8qB,EAAS9qB,YAAaz5B,GAClFA,OACA4mB,QACAinD,OAAQsB,EAAex9D,EAAQk8D,OAAQtpB,EAASspB,QAChD7+C,OAAQ,IAGZ,OADA6rD,EAAK7rD,OAtdL,SAAsB6rD,GACtB,OAAKA,GAAQ7L,EAAc6L,EAAK76E,OAASgvE,EAAc6L,EAAKC,QACjD,MAEHD,EAAKj0D,MAAQi0D,EAAKj0D,MAAQ,IAAM,KAAOi0D,EAAKhN,OAASgN,EAAKhN,OAAS,IAAM,IAAMgN,EAAK76E,KAAO,MAAQ66E,EAAKC,MACpH,CAidkBmK,CAAapK,GACpBA,CACX,CAWI,SAAShpE,GAAQkxC,EAAQ70D,EAAS8Q,EAAOgE,GACzC,IACI5Y,EAAGwlF,EAAM9jF,EADTo5F,GAAY,EAEhB,IAAI96F,EAAI,EAAGwlF,EAAO7sB,EAAOz4D,OAAQF,EAAIwlF,IAAQxlF,EAEzC,GADA0B,EAAQi3D,EAAO34D,QACDyC,IAAVf,SAGYe,IAAZqB,GAA0C,oBAAVpC,IAChCA,EAAQA,EAAMoC,GACdg3F,GAAY,QAEFr4F,IAAVmS,GAAuB4c,EAAQ9vB,KAC/BA,EAAQA,EAAMkT,EAAQlT,EAAMxB,QAC5B46F,GAAY,QAEFr4F,IAAVf,GAIA,OAHIkX,IAASkiF,IACTliF,EAAKkiF,WAAY,GAEdp5F,CAGnB,CAeA,SAASq5F,GAAcC,EAAel3F,GAClC,OAAOpD,OAAOyE,OAAOzE,OAAO8S,OAAOwnF,GAAgBl3F,EACvD,CAWI,SAASm3F,GAAgBC,EAAQC,EAAW,CAC5C,IACDC,EAAYjhC,EAAUkhC,EAAY,KAAIH,EAAO,KAC5C,MAAMI,EAAkBF,GAAcF,EACd,qBAAb/gC,IACPA,EAAWohC,GAAS,YAAaL,IAErC,MAAM/1D,EAAQ,CACV,CAACnR,OAAOwnE,aAAc,SACtBC,YAAY,EACZC,QAASR,EACTS,YAAaL,EACb/I,UAAWp4B,EACXyhC,WAAYP,EACZp5D,SAAWiuD,GAAQ+K,GAAgB,CAC3B/K,KACGgL,GACJC,EAAUG,EAAiBnhC,IAEtC,OAAO,IAAI9rB,MAAMlJ,EAAO,CAGpB,cAAA02D,CAAgB/2F,EAAQ5D,GAIpB,cAHO4D,EAAO5D,UACP4D,EAAOg3F,aACPZ,EAAO,GAAGh6F,IACV,CACX,EAGA,GAAAsO,CAAK1K,EAAQ5D,GACT,OAAO66F,GAAQj3F,EAAQ5D,GAAM,IAyOzC,SAA8BA,EAAMi6F,EAAUD,EAAQc,GAClD,IAAIt6F,EACJ,IAAK,MAAMulC,KAAUk0D,EAEjB,GADAz5F,EAAQ65F,GAASU,GAAQh1D,EAAQ/lC,GAAOg6F,GACnB,qBAAVx5F,EACP,OAAOw6F,GAAiBh7F,EAAMQ,GAASy6F,GAAkBjB,EAAQc,EAAO96F,EAAMQ,GAASA,CAGnG,CAjP6C06F,CAAqBl7F,EAAMi6F,EAAUD,EAAQp2F,IAClF,EAIA,wBAAA0gD,CAA0B1gD,EAAQ5D,GAC9B,OAAOqtC,QAAQiX,yBAAyB1gD,EAAO42F,QAAQ,GAAIx6F,EAC/D,EAGA,cAAAm7F,GACI,OAAO9tD,QAAQ8tD,eAAenB,EAAO,GACzC,EAGA,GAAAxsE,CAAK5pB,EAAQ5D,GACT,OAAOo7F,GAAqBx3F,GAAQoyB,SAASh2B,EACjD,EAGA,OAAAgkD,CAASpgD,GACL,OAAOw3F,GAAqBx3F,EAChC,EAGA,GAAAmpB,CAAKnpB,EAAQ5D,EAAMQ,GACf,MAAMud,EAAUna,EAAOy3F,WAAaz3F,EAAOy3F,SAAWlB,KAGtD,OAFAv2F,EAAO5D,GAAQ+d,EAAQ/d,GAAQQ,SACxBoD,EAAOg3F,OACP,CACX,GAER,CAQI,SAASU,GAAeR,EAAOl4F,EAAS24F,EAAUC,GAClD,MAAMv3D,EAAQ,CACVs2D,YAAY,EACZkB,OAAQX,EACRjjF,SAAUjV,EACV84F,UAAWH,EACXI,OAAQ,IAAI1S,IACZiG,aAAcA,GAAa4L,EAAOU,GAClCljF,WAAayR,GAAMuxE,GAAeR,EAAO/wE,EAAKwxE,EAAUC,GACxDz6D,SAAWiuD,GAAQsM,GAAeR,EAAM/5D,SAASiuD,GAAQpsF,EAAS24F,EAAUC,IAEhF,OAAO,IAAIruD,MAAMlJ,EAAO,CAGpB,cAAA02D,CAAgB/2F,EAAQ5D,GAGpB,cAFO4D,EAAO5D,UACP86F,EAAM96F,IACN,CACX,EAGA,GAAAsO,CAAK1K,EAAQ5D,EAAM47F,GACf,OAAOf,GAAQj3F,EAAQ5D,GAAM,IA6DzC,SAA6B4D,EAAQ5D,EAAM47F,GACvC,MAAM,OAAEH,EAAO,SAAE5jF,EAAS,UAAE6jF,EAAYxM,aAAcJ,GAAiBlrF,EACvE,IAAIpD,EAAQi7F,EAAOz7F,GAEfiyB,GAAWzxB,IAAUsuF,EAAY+M,aAAa77F,KAC9CQ,EAWR,SAA4BR,EAAM87F,EAAUl4F,EAAQg4F,GAChD,MAAM,OAAEH,EAAO,SAAE5jF,EAAS,UAAE6jF,EAAU,OAAEC,GAAY/3F,EACpD,GAAI+3F,EAAOnuE,IAAIxtB,GACX,MAAM,IAAIwI,MAAM,uBAAyBqG,MAAMkV,KAAK43E,GAAQj5F,KAAK,MAAQ,KAAO1C,GAEpF27F,EAAOhvF,IAAI3M,GACX,IAAIQ,EAAQs7F,EAASjkF,EAAU6jF,GAAaE,GAC5CD,EAAOI,OAAO/7F,GACVg7F,GAAiBh7F,EAAMQ,KAEvBA,EAAQy6F,GAAkBQ,EAAOjB,QAASiB,EAAQz7F,EAAMQ,IAE5D,OAAOA,CACX,CAxBgBw7F,CAAmBh8F,EAAMQ,EAAOoD,EAAQg4F,IAEhDtrE,EAAQ9vB,IAAUA,EAAMxB,SACxBwB,EAsBR,SAAuBR,EAAMQ,EAAOoD,EAAQq4F,GACxC,MAAM,OAAER,EAAO,SAAE5jF,EAAS,UAAE6jF,EAAYxM,aAAcJ,GAAiBlrF,EACvE,GAA8B,qBAAnBiU,EAASnE,OAAyBuoF,EAAYj8F,GACrD,OAAOQ,EAAMqX,EAASnE,MAAQlT,EAAMxB,QACjC,GAAIg2B,EAASx0B,EAAM,IAAK,CAE3B,MAAM9B,EAAM8B,EACNw5F,EAASyB,EAAOjB,QAAQxxF,QAAQ7F,GAAIA,IAAMzE,IAChD8B,EAAQ,GACR,IAAK,MAAMtB,KAAQR,EAAI,CACnB,MAAM0mF,EAAW6V,GAAkBjB,EAAQyB,EAAQz7F,EAAMd,GACzDsB,EAAML,KAAKm7F,GAAelW,EAAUvtE,EAAU6jF,GAAaA,EAAU17F,GAAO8uF,GAChF,CACJ,CACA,OAAOtuF,CACX,CArCgB07F,CAAcl8F,EAAMQ,EAAOoD,EAAQkrF,EAAYmN,cAEvDjB,GAAiBh7F,EAAMQ,KAEvBA,EAAQ86F,GAAe96F,EAAOqX,EAAU6jF,GAAaA,EAAU17F,GAAO8uF,IAE1E,OAAOtuF,CACX,CA5E6C27F,CAAoBv4F,EAAQ5D,EAAM47F,IACvE,EAIA,wBAAAt3C,CAA0B1gD,EAAQ5D,GAC9B,OAAO4D,EAAOsrF,aAAakN,QAAU/uD,QAAQ7f,IAAIstE,EAAO96F,GAAQ,CAC5DgqC,YAAY,EACZD,cAAc,QACdxoC,EAAY8rC,QAAQiX,yBAAyBw2C,EAAO96F,EAC5D,EAGA,cAAAm7F,GACI,OAAO9tD,QAAQ8tD,eAAeL,EAClC,EAGA,GAAAttE,CAAK5pB,EAAQ5D,GACT,OAAOqtC,QAAQ7f,IAAIstE,EAAO96F,EAC9B,EAGA,OAAAgkD,GACI,OAAO3W,QAAQ2W,QAAQ82C,EAC3B,EAGA,GAAA/tE,CAAKnpB,EAAQ5D,EAAMQ,GAGf,OAFAs6F,EAAM96F,GAAQQ,SACPoD,EAAO5D,IACP,CACX,GAER,CAGI,SAASkvF,GAAa4L,EAAOhuE,EAAW,CACxCuvE,YAAY,EACZC,WAAW,IAEX,MAAM,YAAEpL,EAAapkE,EAASuvE,WAAW,WAAEjL,EAAYtkE,EAASwvE,UAAU,SAAEC,EAAUzvE,EAASsvE,SAAatB,EAC5G,MAAO,CACHsB,QAASG,EACTF,WAAYnL,EACZoL,UAAWlL,EACXyK,aAAc5pE,GAAWi/D,GAAeA,EAAc,IAAIA,EAC1D+K,YAAahqE,GAAWm/D,GAAcA,EAAa,IAAIA,EAE/D,CACA,MAAM2J,GAAU,CAACh1D,EAAQriC,IAAOqiC,EAASA,EAAS//B,GAAYtC,GAAQA,EAChEs3F,GAAmB,CAACh7F,EAAMQ,IAAQw0B,EAASx0B,IAAmB,aAATR,IAAyD,OAAjCR,OAAO27F,eAAe36F,IAAmBA,EAAM+uB,cAAgB/vB,QAClJ,SAASq7F,GAAQj3F,EAAQ5D,EAAMumB,GAC3B,GAAI/mB,OAAOC,UAAUS,eAAeP,KAAKiE,EAAQ5D,GAC7C,OAAO4D,EAAO5D,GAElB,MAAMQ,EAAQ+lB,IAGd,OADA3iB,EAAO5D,GAAQQ,EACRA,CACX,CA+CA,SAASg8F,GAAgBvjC,EAAUj5D,EAAMQ,GACrC,OAAOyxB,GAAWgnC,GAAYA,EAASj5D,EAAMQ,GAASy4D,CAC1D,CACA,MAAMwjC,GAAW,CAAC35F,EAAK45B,KAAiB,IAAR55B,EAAe45B,EAAwB,kBAAR55B,EAAmBqiF,GAAiBzoD,EAAQ55B,QAAOvB,EAClH,SAASm7F,GAAU3vE,EAAK4vE,EAAc75F,EAAK85F,EAAgBp8F,GACvD,IAAK,MAAMk8B,KAAUigE,EAAa,CAC9B,MAAM3N,EAAQyN,GAAS35F,EAAK45B,GAC5B,GAAIsyD,EAAO,CACPjiE,EAAIpgB,IAAIqiF,GACR,MAAM/1B,EAAWujC,GAAgBxN,EAAMqC,UAAWvuF,EAAKtC,GACvD,GAAwB,qBAAby4D,GAA4BA,IAAan2D,GAAOm2D,IAAa2jC,EAGpE,OAAO3jC,CAEf,MAAO,IAAc,IAAV+1B,GAA6C,qBAAnB4N,GAAkC95F,IAAQ85F,EAG3E,OAAO,IAEf,CACA,OAAO,CACX,CACA,SAAS3B,GAAkB0B,EAAcvX,EAAUplF,EAAMQ,GACrD,MAAM05F,EAAa9U,EAASqV,YACtBxhC,EAAWujC,GAAgBpX,EAASiM,UAAWrxF,EAAMQ,GACrDq8F,EAAY,IACXF,KACAzC,GAEDntE,EAAM,IAAIk8D,IAChBl8D,EAAIpgB,IAAInM,GACR,IAAIsC,EAAMg6F,GAAiB/vE,EAAK8vE,EAAW78F,EAAMi5D,GAAYj5D,EAAMQ,GACnE,OAAY,OAARsC,KAGoB,qBAAbm2D,GAA4BA,IAAaj5D,IAChD8C,EAAMg6F,GAAiB/vE,EAAK8vE,EAAW5jC,EAAUn2D,EAAKtC,GAC1C,OAARsC,KAIDi3F,GAAgBlrF,MAAMkV,KAAKgJ,GAAM,CACpC,IACDmtE,EAAYjhC,GAAU,IAQ7B,SAAsBmsB,EAAUplF,EAAMQ,GAClC,MAAMk8B,EAAS0oD,EAASsV,aAClB16F,KAAQ08B,IACVA,EAAO18B,GAAQ,CAAC,GAEpB,MAAM4D,EAAS84B,EAAO18B,GACtB,GAAIswB,EAAQ1sB,IAAWoxB,EAASx0B,GAE5B,OAAOA,EAEX,OAAOoD,GAAU,CAAC,CACtB,CAnBiCm5F,CAAa3X,EAAUplF,EAAMQ,KAC9D,CACA,SAASs8F,GAAiB/vE,EAAK8vE,EAAW/5F,EAAKm2D,EAAU/5D,GACrD,KAAM4D,GACFA,EAAM45F,GAAU3vE,EAAK8vE,EAAW/5F,EAAKm2D,EAAU/5D,GAEnD,OAAO4D,CACX,CAsBA,SAASu3F,GAASv3F,EAAKk3F,GACnB,IAAK,MAAMhL,KAASgL,EAAO,CACvB,IAAKhL,EACD,SAEJ,MAAMxuF,EAAQwuF,EAAMlsF,GACpB,GAAqB,qBAAVtC,EACP,OAAOA,CAEf,CACJ,CACA,SAAS46F,GAAqBx3F,GAC1B,IAAI+lB,EAAO/lB,EAAOg3F,MAIlB,OAHKjxE,IACDA,EAAO/lB,EAAOg3F,MAItB,SAAkCZ,GAC9B,MAAMjtE,EAAM,IAAIk8D,IAChB,IAAK,MAAM+F,KAASgL,EAChB,IAAK,MAAMl3F,KAAOtD,OAAOmqB,KAAKqlE,GAAOhmF,QAAQlH,IAAKA,EAAEqvF,WAAW,OAC3DpkE,EAAIpgB,IAAI7J,GAGhB,OAAO+L,MAAMkV,KAAKgJ,EACtB,CAZ8BiwE,CAAyBp5F,EAAO42F,UAEnD7wE,CACX,CAUA,SAASszE,GAA4BvT,EAAMj/E,EAAMkX,EAAOgJ,GACpD,MAAM,OAAEo/D,GAAYL,GACd,IAAE5mF,EAAK,KAASqB,KAAK+4F,SACrBn5D,EAAS,IAAIl1B,MAAM8b,GACzB,IAAI7rB,EAAGwlF,EAAM5wE,EAAOxU,EACpB,IAAIJ,EAAI,EAAGwlF,EAAO35D,EAAO7rB,EAAIwlF,IAAQxlF,EACjC4U,EAAQ5U,EAAI6iB,EACZziB,EAAOuL,EAAKiJ,GACZqwB,EAAOjlC,GAAK,CACRsnC,EAAG2jD,EAAO/hF,MAAMm9E,GAAiBjmF,EAAM4D,GAAM4Q,IAGrD,OAAOqwB,CACX,CAEA,MAAMo5D,GAAU11F,OAAO01F,SAAW,MAC5BC,GAAW,CAACzT,EAAQ7qF,IAAIA,EAAI6qF,EAAO3qF,SAAW2qF,EAAO7qF,GAAGu+F,MAAQ1T,EAAO7qF,GACvEw+F,GAAgBzN,GAA0B,MAAdA,EAAoB,IAAM,IAC5D,SAAS0N,GAAYC,EAAYC,EAAaC,EAAYjyB,GAItD,MAAMj9C,EAAWgvE,EAAWH,KAAOI,EAAcD,EAC3CxvE,EAAUyvE,EACV9pF,EAAO+pF,EAAWL,KAAOI,EAAcC,EACvCC,EAAMlW,GAAsBz5D,EAASQ,GACrCovE,EAAMnW,GAAsB9zE,EAAMqa,GACxC,IAAI6vE,EAAMF,GAAOA,EAAMC,GACnBE,EAAMF,GAAOD,EAAMC,GAEvBC,EAAMh4F,MAAMg4F,GAAO,EAAIA,EACvBC,EAAMj4F,MAAMi4F,GAAO,EAAIA,EACvB,MAAMC,EAAKtyB,EAAIoyB,EACTG,EAAKvyB,EAAIqyB,EACf,MAAO,CACHtvE,SAAU,CACNnvB,EAAG2uB,EAAQ3uB,EAAI0+F,GAAMpqF,EAAKtU,EAAImvB,EAASnvB,GACvCqrD,EAAG18B,EAAQ08B,EAAIqzC,GAAMpqF,EAAK+2C,EAAIl8B,EAASk8B,IAE3C/2C,KAAM,CACFtU,EAAG2uB,EAAQ3uB,EAAI2+F,GAAMrqF,EAAKtU,EAAImvB,EAASnvB,GACvCqrD,EAAG18B,EAAQ08B,EAAIszC,GAAMrqF,EAAK+2C,EAAIl8B,EAASk8B,IAGnD,CA2DI,SAASuzC,GAAoBtU,EAAQkG,EAAY,KACjD,MAAMqO,EAAYZ,GAAazN,GACzBsO,EAAYxU,EAAO3qF,OACnBo/F,EAASvvF,MAAMsvF,GAAWnI,KAAK,GAC/BqI,EAAKxvF,MAAMsvF,GAEjB,IAAIr/F,EAAGw/F,EAAaC,EAChBC,EAAapB,GAASzT,EAAQ,GAClC,IAAI7qF,EAAI,EAAGA,EAAIq/F,IAAar/F,EAIxB,GAHAw/F,EAAcC,EACdA,EAAeC,EACfA,EAAapB,GAASzT,EAAQ7qF,EAAI,GAC7By/F,EAAL,CAGA,GAAIC,EAAY,CACZ,MAAMC,EAAaD,EAAW3O,GAAa0O,EAAa1O,GAExDuO,EAAOt/F,GAAoB,IAAf2/F,GAAoBD,EAAWN,GAAaK,EAAaL,IAAcO,EAAa,CACpG,CACAJ,EAAGv/F,GAAMw/F,EAA2BE,EAA6BrkD,GAAKikD,EAAOt/F,EAAI,MAAQq7C,GAAKikD,EAAOt/F,IAAM,GAAKs/F,EAAOt/F,EAAI,GAAKs/F,EAAOt/F,IAAM,EAA5Fs/F,EAAOt/F,EAAI,GAArCs/F,EAAOt/F,EAN9B,EAtEJ,SAAwB6qF,EAAQyU,EAAQC,GACxC,MAAMF,EAAYxU,EAAO3qF,OACzB,IAAI0/F,EAAQC,EAAOC,EAAMC,EAAkBN,EACvCC,EAAapB,GAASzT,EAAQ,GAClC,IAAI,IAAI7qF,EAAI,EAAGA,EAAIq/F,EAAY,IAAKr/F,EAChCy/F,EAAeC,EACfA,EAAapB,GAASzT,EAAQ7qF,EAAI,GAC7By/F,GAAiBC,IAGlBrY,GAAaiY,EAAOt/F,GAAI,EAAGq+F,IAC3BkB,EAAGv/F,GAAKu/F,EAAGv/F,EAAI,GAAK,GAGxB4/F,EAASL,EAAGv/F,GAAKs/F,EAAOt/F,GACxB6/F,EAAQN,EAAGv/F,EAAI,GAAKs/F,EAAOt/F,GAC3B+/F,EAAmBppF,KAAKC,IAAIgpF,EAAQ,GAAKjpF,KAAKC,IAAIipF,EAAO,GACrDE,GAAoB,IAGxBD,EAAO,EAAInpF,KAAK22C,KAAKyyC,GACrBR,EAAGv/F,GAAK4/F,EAASE,EAAOR,EAAOt/F,GAC/Bu/F,EAAGv/F,EAAI,GAAK6/F,EAAQC,EAAOR,EAAOt/F,KAE1C,CAsDIggG,CAAenV,EAAQyU,EAAQC,GArDnC,SAAyB1U,EAAQ0U,EAAIxO,EAAY,KAC7C,MAAMqO,EAAYZ,GAAazN,GACzBsO,EAAYxU,EAAO3qF,OACzB,IAAIk1E,EAAOoqB,EAAaC,EACpBC,EAAapB,GAASzT,EAAQ,GAClC,IAAI,IAAI7qF,EAAI,EAAGA,EAAIq/F,IAAar/F,EAAE,CAI9B,GAHAw/F,EAAcC,EACdA,EAAeC,EACfA,EAAapB,GAASzT,EAAQ7qF,EAAI,IAC7By/F,EACD,SAEJ,MAAMQ,EAASR,EAAa1O,GACtBmP,EAAST,EAAaL,GACxBI,IACApqB,GAAS6qB,EAAST,EAAYzO,IAAc,EAC5C0O,EAAa,MAAM1O,KAAekP,EAAS7qB,EAC3CqqB,EAAa,MAAML,KAAec,EAAS9qB,EAAQmqB,EAAGv/F,IAEtD0/F,IACAtqB,GAASsqB,EAAW3O,GAAakP,GAAU,EAC3CR,EAAa,MAAM1O,KAAekP,EAAS7qB,EAC3CqqB,EAAa,MAAML,KAAec,EAAS9qB,EAAQmqB,EAAGv/F,GAE9D,CACJ,CA6BImgG,CAAgBtV,EAAQ0U,EAAIxO,EAChC,CACA,SAASqP,GAAgBC,EAAI9+F,EAAKC,GAC9B,OAAOmV,KAAKnV,IAAImV,KAAKpV,IAAI8+F,EAAI7+F,GAAMD,EACvC,CAwBI,SAAS++F,GAA2BzV,EAAQtjE,EAASgwE,EAAM/E,EAAMzB,GACjE,IAAI/wF,EAAGwlF,EAAM8R,EAAOiJ,EAKpB,GAHIh5E,EAAQi5E,WACR3V,EAASA,EAAO3gF,QAAQm2F,IAAMA,EAAG9B,QAEE,aAAnCh3E,EAAQk5E,uBACRtB,GAAoBtU,EAAQkG,OACzB,CACH,IAAI7uE,EAAOswE,EAAO3H,EAAOA,EAAO3qF,OAAS,GAAK2qF,EAAO,GACrD,IAAI7qF,EAAI,EAAGwlF,EAAOqF,EAAO3qF,OAAQF,EAAIwlF,IAAQxlF,EACzCs3F,EAAQzM,EAAO7qF,GACfugG,EAAgB9B,GAAYv8E,EAAMo1E,EAAOzM,EAAOl0E,KAAKpV,IAAIvB,EAAI,EAAGwlF,GAAQgN,EAAO,EAAI,IAAMhN,GAAOj+D,EAAQm5E,SACxGpJ,EAAMU,KAAOuI,EAAc7wE,SAASnvB,EACpC+2F,EAAMY,KAAOqI,EAAc7wE,SAASk8B,EACpC0rC,EAAMW,KAAOsI,EAAc1rF,KAAKtU,EAChC+2F,EAAMa,KAAOoI,EAAc1rF,KAAK+2C,EAChC1pC,EAAOo1E,CAEf,CACI/vE,EAAQo5E,iBA3ChB,SAAyB9V,EAAQ0M,GAC7B,IAAIv3F,EAAGwlF,EAAM8R,EAAOsJ,EAAQC,EACxBC,EAAazJ,GAAexM,EAAO,GAAI0M,GAC3C,IAAIv3F,EAAI,EAAGwlF,EAAOqF,EAAO3qF,OAAQF,EAAIwlF,IAAQxlF,EACzC6gG,EAAaD,EACbA,EAASE,EACTA,EAAa9gG,EAAIwlF,EAAO,GAAK6R,GAAexM,EAAO7qF,EAAI,GAAIu3F,GACtDqJ,IAGLtJ,EAAQzM,EAAO7qF,GACX6gG,IACAvJ,EAAMU,KAAOoI,GAAgB9I,EAAMU,KAAMT,EAAKjvC,KAAMivC,EAAK/uC,OACzD8uC,EAAMY,KAAOkI,GAAgB9I,EAAMY,KAAMX,EAAKlvC,IAAKkvC,EAAKhvC,SAExDu4C,IACAxJ,EAAMW,KAAOmI,GAAgB9I,EAAMW,KAAMV,EAAKjvC,KAAMivC,EAAK/uC,OACzD8uC,EAAMa,KAAOiI,GAAgB9I,EAAMa,KAAMZ,EAAKlvC,IAAKkvC,EAAKhvC,SAGpE,CAwBQo4C,CAAgB9V,EAAQ0M,EAEhC,CAUI,SAASwJ,KACT,MAAyB,qBAAXx7F,QAA8C,qBAAbua,QACnD,CAGI,SAASkhF,GAAeC,GACxB,IAAIrjE,EAASqjE,EAAQr8E,WAIrB,OAHIgZ,GAAgC,wBAAtBA,EAAOh9B,aACjBg9B,EAASA,EAAOn4B,MAEbm4B,CACX,CAII,SAASsjE,GAAcC,EAAYx2B,EAAMy2B,GACzC,IAAIC,EAUJ,MAT0B,kBAAfF,GACPE,EAAgB1/F,SAASw/F,EAAY,KACJ,IAA7BA,EAAWt3F,QAAQ,OAEnBw3F,EAAgBA,EAAgB,IAAM12B,EAAK/lD,WAAWw8E,KAG1DC,EAAgBF,EAEbE,CACX,CACA,MAAMl6C,GAAoBlyB,GAAUA,EAAQkkC,cAAcjS,YAAYC,iBAAiBlyB,EAAS,MAIhG,MAAMqsE,GAAY,CACd,MACA,QACA,SACA,QAEJ,SAASC,GAAmBC,EAAQhlE,EAAO60C,GACvC,MAAMlwE,EAAS,CAAC,EAChBkwE,EAASA,EAAS,IAAMA,EAAS,GACjC,IAAI,IAAIrxE,EAAI,EAAGA,EAAI,EAAGA,IAAI,CACtB,MAAMooC,EAAMk5D,GAAUthG,GACtBmB,EAAOinC,GAAOphC,WAAWw6F,EAAOhlE,EAAQ,IAAM4L,EAAMipC,KAAY,CACpE,CAGA,OAFAlwE,EAAOunD,MAAQvnD,EAAOmnD,KAAOnnD,EAAOqnD,MACpCrnD,EAAOsnD,OAAStnD,EAAOknD,IAAMlnD,EAAOonD,OAC7BpnD,CACX,CACA,MAAMsgG,GAAe,CAAClhG,EAAGqrD,EAAG9mD,KAAUvE,EAAI,GAAKqrD,EAAI,MAAQ9mD,IAAWA,EAAO2zD,YA+BzE,SAASipC,GAAoB9tF,EAAOu7E,GACpC,GAAI,WAAYv7E,EACZ,OAAOA,EAEX,MAAM,OAAE+hF,EAAO,wBAAEH,GAA6BrG,EACxC3yD,EAAQ2qB,GAAiBwuC,GACzBgM,EAAgC,eAApBnlE,EAAMolE,UAClBC,EAAWN,GAAmB/kE,EAAO,WACrCslE,EAAUP,GAAmB/kE,EAAO,SAAU,UAC9C,EAAEj8B,EAAE,EAAEqrD,EAAE,IAAEm2C,GAnChB,SAA2B/2F,EAAG2qF,GAC9B,MAAM5gC,EAAU/pD,EAAE+pD,QACZ/vD,EAAS+vD,GAAWA,EAAQ70D,OAAS60D,EAAQ,GAAK/pD,GAClD,QAAEg3F,EAAQ,QAAEC,GAAaj9F,EAC/B,IACIzE,EAAGqrD,EADHm2C,GAAM,EAEV,GAAIN,GAAaO,EAASC,EAASj3F,EAAElG,QACjCvE,EAAIyhG,EACJp2C,EAAIq2C,MACD,CACH,MAAM/4C,EAAOysC,EAAOtjD,wBACpB9xC,EAAIyE,EAAOiwD,QAAU/L,EAAKZ,KAC1BsD,EAAI5mD,EAAOkwD,QAAUhM,EAAKb,IAC1B05C,GAAM,CACV,CACA,MAAO,CACHxhG,IACAqrD,IACAm2C,MAER,CAe6BG,CAAkBtuF,EAAO+hF,GAC5CK,EAAU6L,EAASv5C,MAAQy5C,GAAOD,EAAQx5C,MAC1C2tC,EAAU4L,EAASx5C,KAAO05C,GAAOD,EAAQz5C,KAC/C,IAAI,MAAEK,EAAM,OAAED,GAAY0mC,EAK1B,OAJIwS,IACAj5C,GAASm5C,EAASn5C,MAAQo5C,EAAQp5C,MAClCD,GAAUo5C,EAASp5C,OAASq5C,EAAQr5C,QAEjC,CACHloD,EAAGoW,KAAKwwB,OAAO5mC,EAAIy1F,GAAWttC,EAAQitC,EAAOjtC,MAAQ8sC,GACrD5pC,EAAGj1C,KAAKwwB,OAAOykB,EAAIqqC,GAAWxtC,EAASktC,EAAOltC,OAAS+sC,GAE/D,CA0BA,MAAM2M,GAAUn6F,GAAI2O,KAAKwwB,MAAU,GAAJn/B,GAAU,GAEzC,SAASo6F,GAAezM,EAAQ0M,EAASC,EAAUC,GAC/C,MAAM/lE,EAAQ2qB,GAAiBwuC,GACzB6M,EAAUjB,GAAmB/kE,EAAO,UACpCm9D,EAAWuH,GAAc1kE,EAAMm9D,SAAUhE,EAAQ,gBAAkB7O,GACnE2b,EAAYvB,GAAc1kE,EAAMimE,UAAW9M,EAAQ,iBAAmB7O,GACtE4b,EAhCV,SAA0B/M,EAAQjtC,EAAOD,GACrC,IAAIkxC,EAAU8I,EACd,QAAchgG,IAAVimD,QAAkCjmD,IAAXgmD,EAAsB,CAC7C,MAAMvP,EAAY8nD,GAAerL,GACjC,GAAKz8C,EAGE,CACH,MAAMgQ,EAAOhQ,EAAU7G,wBACjBswD,EAAiBx7C,GAAiBjO,GAClC0pD,EAAkBrB,GAAmBoB,EAAgB,SAAU,SAC/DE,EAAmBtB,GAAmBoB,EAAgB,WAC5Dj6C,EAAQQ,EAAKR,MAAQm6C,EAAiBn6C,MAAQk6C,EAAgBl6C,MAC9DD,EAASS,EAAKT,OAASo6C,EAAiBp6C,OAASm6C,EAAgBn6C,OACjEkxC,EAAWuH,GAAcyB,EAAehJ,SAAUzgD,EAAW,eAC7DupD,EAAYvB,GAAcyB,EAAeF,UAAWvpD,EAAW,eACnE,MAXIwP,EAAQitC,EAAO31E,YACfyoC,EAASktC,EAAO11E,YAWxB,CACA,MAAO,CACHyoC,QACAD,SACAkxC,SAAUA,GAAY7S,GACtB2b,UAAWA,GAAa3b,GAEhC,CAQ0Bgc,CAAiBnN,EAAQ0M,EAASC,GACxD,IAAI,MAAE55C,EAAM,OAAED,GAAYi6C,EAC1B,GAAwB,gBAApBlmE,EAAMolE,UAA6B,CACnC,MAAME,EAAUP,GAAmB/kE,EAAO,SAAU,SAC9CqlE,EAAWN,GAAmB/kE,EAAO,WAC3CksB,GAASm5C,EAASn5C,MAAQo5C,EAAQp5C,MAClCD,GAAUo5C,EAASp5C,OAASq5C,EAAQr5C,MACxC,CACAC,EAAQ/xC,KAAKnV,IAAI,EAAGknD,EAAQ85C,EAAQ95C,OACpCD,EAAS9xC,KAAKnV,IAAI,EAAG+gG,EAAc75C,EAAQ65C,EAAc95C,EAAS+5C,EAAQ/5C,QAC1EC,EAAQy5C,GAAOxrF,KAAKpV,IAAImnD,EAAOixC,EAAU+I,EAAc/I,WACvDlxC,EAAS05C,GAAOxrF,KAAKpV,IAAIknD,EAAQg6C,EAAWC,EAAcD,YACtD/5C,IAAUD,IAGVA,EAAS05C,GAAOz5C,EAAQ,IAO5B,YALmCjmD,IAAZ4/F,QAAsC5/F,IAAb6/F,IAC1BC,GAAeG,EAAcj6C,QAAUA,EAASi6C,EAAcj6C,SAChFA,EAASi6C,EAAcj6C,OACvBC,EAAQy5C,GAAOxrF,KAAKwtB,MAAMskB,EAAS85C,KAEhC,CACH75C,QACAD,SAER,CAMI,SAASs6C,GAAY5T,EAAO6T,EAAYC,GACxC,MAAMC,EAAaF,GAAc,EAC3BG,EAAexsF,KAAKwtB,MAAMgrD,EAAM1mC,OAASy6C,GACzCE,EAAczsF,KAAKwtB,MAAMgrD,EAAMzmC,MAAQw6C,GAC7C/T,EAAM1mC,OAAS9xC,KAAKwtB,MAAMgrD,EAAM1mC,QAChC0mC,EAAMzmC,MAAQ/xC,KAAKwtB,MAAMgrD,EAAMzmC,OAC/B,MAAMitC,EAASxG,EAAMwG,OAQrB,OAJIA,EAAOn5D,QAAUymE,IAAetN,EAAOn5D,MAAMisB,SAAWktC,EAAOn5D,MAAMksB,SACrEitC,EAAOn5D,MAAMisB,OAAS,GAAG0mC,EAAM1mC,WAC/BktC,EAAOn5D,MAAMksB,MAAQ,GAAGymC,EAAMzmC,YAE9BymC,EAAMqG,0BAA4B0N,GAAcvN,EAAOltC,SAAW06C,GAAgBxN,EAAOjtC,QAAU06C,KACnGjU,EAAMqG,wBAA0B0N,EAChCvN,EAAOltC,OAAS06C,EAChBxN,EAAOjtC,MAAQ06C,EACfjU,EAAMlkE,IAAIo4E,aAAaH,EAAY,EAAG,EAAGA,EAAY,EAAG,IACjD,EAGf,CAKI,MAAMI,GAA+B,WACrC,IAAIC,GAAmB,EACvB,IACI,MAAMh8E,EAAU,CACZ,WAAIo/B,GAEA,OADA48C,GAAmB,GACZ,CACX,GAEAxC,OACAx7F,OAAOue,iBAAiB,OAAQ,KAAMyD,GACtChiB,OAAO0hB,oBAAoB,OAAQ,KAAMM,GAEjD,CAAE,MAAOvc,GAET,CACA,OAAOu4F,CACX,CAjByC,GA0BrC,SAASC,GAAavuE,EAASqL,GAC/B,MAAM5+B,EA/LV,SAAkB2iB,EAAIic,GAClB,OAAO6mB,GAAiB9iC,GAAIo/E,iBAAiBnjE,EACjD,CA6LkBojE,CAASzuE,EAASqL,GAC1Bv1B,EAAUrJ,GAASA,EAAM6H,MAAM,qBACrC,OAAOwB,GAAWA,EAAQ,QAAKtI,CACnC,CAII,SAASkhG,GAAa5rB,EAAIC,EAAIrL,EAAGskB,GACjC,MAAO,CACH1wF,EAAGw3E,EAAGx3E,EAAIosE,GAAKqL,EAAGz3E,EAAIw3E,EAAGx3E,GACzBqrD,EAAGmsB,EAAGnsB,EAAI+gB,GAAKqL,EAAGpsB,EAAImsB,EAAGnsB,GAEjC,CAGI,SAASg4C,GAAsB7rB,EAAIC,EAAIrL,EAAGskB,GAC1C,MAAO,CACH1wF,EAAGw3E,EAAGx3E,EAAIosE,GAAKqL,EAAGz3E,EAAIw3E,EAAGx3E,GACzBqrD,EAAY,WAATqlC,EAAoBtkB,EAAI,GAAMoL,EAAGnsB,EAAIosB,EAAGpsB,EAAa,UAATqlC,EAAmBtkB,EAAI,EAAIoL,EAAGnsB,EAAIosB,EAAGpsB,EAAI+gB,EAAI,EAAIqL,EAAGpsB,EAAImsB,EAAGnsB,EAElH,CAGI,SAASi4C,GAAqB9rB,EAAIC,EAAIrL,EAAGskB,GACzC,MAAM6S,EAAM,CACRvjG,EAAGw3E,EAAGkgB,KACNrsC,EAAGmsB,EAAGogB,MAEJ4L,EAAM,CACRxjG,EAAGy3E,EAAGggB,KACNpsC,EAAGosB,EAAGkgB,MAEJxyE,EAAIi+E,GAAa5rB,EAAI+rB,EAAKn3B,GAC1BzzD,EAAIyqF,GAAaG,EAAKC,EAAKp3B,GAC3Bp2D,EAAIotF,GAAaI,EAAK/rB,EAAIrL,GAC1B3yD,EAAI2pF,GAAaj+E,EAAGxM,EAAGyzD,GACvB3hE,EAAI24F,GAAazqF,EAAG3C,EAAGo2D,GAC7B,OAAOg3B,GAAa3pF,EAAGhP,EAAG2hE,EAC9B,CAyCA,SAASq3B,GAAcC,EAAKC,EAAOx7C,GAC/B,OAAOu7C,EAxCmB,SAASC,EAAOx7C,GAC1C,MAAO,CACH,CAAAnoD,CAAGA,GACC,OAAO2jG,EAAQA,EAAQx7C,EAAQnoD,CACnC,EACA,QAAA4jG,CAAU1uB,GACN/sB,EAAQ+sB,CACZ,EACA,SAAA8jB,CAAW9O,GACP,MAAc,WAAVA,EACOA,EAEM,UAAVA,EAAoB,OAAS,OACxC,EACA,KAAA2Z,CAAO7jG,EAAGmB,GACN,OAAOnB,EAAImB,CACf,EACA,UAAA2iG,CAAY9jG,EAAG+jG,GACX,OAAO/jG,EAAI+jG,CACf,EAER,CAmBiBC,CAAsBL,EAAOx7C,GAjBnC,CACH,CAAAnoD,CAAGA,GACC,OAAOA,CACX,EACA,QAAA4jG,CAAU1uB,GAAI,EACd,SAAA8jB,CAAW9O,GACP,OAAOA,CACX,EACA,KAAA2Z,CAAO7jG,EAAGmB,GACN,OAAOnB,EAAImB,CACf,EACA,UAAA2iG,CAAY9jG,EAAGikG,GACX,OAAOjkG,CACX,EAKR,CACA,SAASkkG,GAAsBx5E,EAAKyuB,GAChC,IAAIld,EAAOvb,EACO,QAAdy4B,GAAqC,QAAdA,IACvBld,EAAQvR,EAAI0qE,OAAOn5D,MACnBvb,EAAW,CACPub,EAAMinE,iBAAiB,aACvBjnE,EAAMkoE,oBAAoB,cAE9BloE,EAAMmoE,YAAY,YAAajrD,EAAW,aAC1CzuB,EAAI25E,kBAAoB3jF,EAEhC,CACA,SAAS4jF,GAAqB55E,EAAKhK,QACdxe,IAAbwe,WACOgK,EAAI25E,kBACX35E,EAAI0qE,OAAOn5D,MAAMmoE,YAAY,YAAa1jF,EAAS,GAAIA,EAAS,IAExE,CAEA,SAAS6jF,GAAWxkE,GAChB,MAAiB,UAAbA,EACO,CACHykE,QAAS/b,GACT/iD,QAAS6iD,GACTza,UAAW0a,IAGZ,CACHgc,QAASxb,GACTtjD,QAAS,CAACvgB,EAAGxM,IAAIwM,EAAIxM,EACrBm1D,UAAY9tE,GAAIA,EAExB,CACA,SAASykG,IAAiB,MAAEniF,EAAM,IAAEC,EAAI,MAAE+I,EAAM,KAAE2mE,EAAK,MAAEh2D,IACrD,MAAO,CACH3Z,MAAOA,EAAQgJ,EACf/I,IAAKA,EAAM+I,EACX2mE,KAAMA,IAAS1vE,EAAMD,EAAQ,GAAKgJ,IAAU,EAC5C2Q,QAER,CA8BC,SAASyoE,GAAc92B,EAAS0c,EAAQkI,GACrC,IAAKA,EACD,MAAO,CACH5kB,GAGR,MAAM,SAAE7tC,EAAWzd,MAAOqiF,EAAapiF,IAAKqiF,GAAcpS,EACpDlnE,EAAQg/D,EAAO3qF,QACf,QAAE+lC,EAAQ,QAAE8+D,EAAQ,UAAE12B,GAAey2B,GAAWxkE,IAChD,MAAEzd,EAAM,IAAEC,EAAI,KAAE0vE,EAAK,MAAEh2D,GAtCjC,SAAoB2xC,EAAS0c,EAAQkI,GACjC,MAAM,SAAEzyD,EAAWzd,MAAOqiF,EAAapiF,IAAKqiF,GAAcpS,GACpD,QAAEgS,EAAQ,UAAE12B,GAAey2B,GAAWxkE,GACtCzU,EAAQg/D,EAAO3qF,OACrB,IACIF,EAAGwlF,GADH,MAAE3iE,EAAM,IAAEC,EAAI,KAAE0vE,GAAUrkB,EAE9B,GAAIqkB,EAAM,CAGN,IAFA3vE,GAASgJ,EACT/I,GAAO+I,EACH7rB,EAAI,EAAGwlF,EAAO35D,EAAO7rB,EAAIwlF,GACpBuf,EAAQ12B,EAAUwc,EAAOhoE,EAAQgJ,GAAOyU,IAAY4kE,EAAYC,KADpCnlG,EAIjC6iB,IACAC,IAEJD,GAASgJ,EACT/I,GAAO+I,CACX,CAIA,OAHI/I,EAAMD,IACNC,GAAO+I,GAEJ,CACHhJ,QACAC,MACA0vE,OACAh2D,MAAO2xC,EAAQ3xC,MAEvB,CAU4C4oE,CAAWj3B,EAAS0c,EAAQkI,GAC9D5xF,EAAS,GACf,IAEIO,EAAO41F,EAAO+N,EAFdC,GAAS,EACTC,EAAW,KAEf,MAEMC,EAAc,IAAIF,GAFEP,EAAQG,EAAYG,EAAW3jG,IAA6C,IAAnCukC,EAAQi/D,EAAYG,GAGjFI,EAAa,KAAKH,GAF6B,IAA7Br/D,EAAQk/D,EAAUzjG,IAAgBqjG,EAAQI,EAAUE,EAAW3jG,GAGvF,IAAI,IAAI1B,EAAI6iB,EAAOX,EAAOW,EAAO7iB,GAAK8iB,IAAO9iB,EACzCs3F,EAAQzM,EAAO7qF,EAAI6rB,GACfyrE,EAAMiH,OAGV78F,EAAQ2sE,EAAUipB,EAAMh3D,IACpB5+B,IAAU2jG,IAGdC,EAASP,EAAQrjG,EAAOwjG,EAAYC,GACnB,OAAbI,GAAqBC,MACrBD,EAA0C,IAA/Bt/D,EAAQvkC,EAAOwjG,GAAoBllG,EAAIkiB,GAErC,OAAbqjF,GAAqBE,MACrBtkG,EAAOE,KAAK2jG,GAAiB,CACzBniF,MAAO0iF,EACPziF,IAAK9iB,EACLwyF,OACA3mE,QACA2Q,WAEJ+oE,EAAW,MAEfrjF,EAAOliB,EACPqlG,EAAY3jG,IAWhB,OATiB,OAAb6jG,GACApkG,EAAOE,KAAK2jG,GAAiB,CACzBniF,MAAO0iF,EACPziF,MACA0vE,OACA3mE,QACA2Q,WAGDr7B,CACX,CACC,SAASukG,GAAev7F,EAAM4oF,GAC3B,MAAM5xF,EAAS,GACT6lE,EAAW78D,EAAK68D,SACtB,IAAI,IAAIhnE,EAAI,EAAGA,EAAIgnE,EAAS9mE,OAAQF,IAAI,CACpC,MAAM6wE,EAAMo0B,GAAcj+B,EAAShnE,GAAImK,EAAK0gF,OAAQkI,GAChDliB,EAAI3wE,QACJiB,EAAOE,QAAQwvE,EAEvB,CACA,OAAO1vE,CACX,CAkFC,SAASwkG,GAAcx7F,EAAM68D,EAAU6jB,EAAQ+a,GAC5C,OAAKA,GAAmBA,EAAepsF,YAAeqxE,EAKzD,SAAyB1gF,EAAM68D,EAAU6jB,EAAQ+a,GAC9C,MAAMC,EAAe17F,EAAK27F,OAAOvsF,aAC3BwsF,EAAYC,GAAU77F,EAAKod,UACzB0+E,cAAevgB,EAAen+D,SAAS,SAAEi5E,IAAiBr2F,EAC5D0hB,EAAQg/D,EAAO3qF,OACfiB,EAAS,GACf,IAAI+kG,EAAYH,EACZljF,EAAQmkD,EAAS,GAAGnkD,MACpB7iB,EAAI6iB,EACR,SAASsjF,EAAS9hG,EAAG2G,EAAGmiB,EAAGi5E,GACvB,MAAMC,EAAM7F,GAAY,EAAI,EAC5B,GAAIn8F,IAAM2G,EAAV,CAIA,IADA3G,GAAKwnB,EACCg/D,EAAOxmF,EAAIwnB,GAAO0yE,MACpBl6F,GAAKgiG,EAET,KAAMxb,EAAO7/E,EAAI6gB,GAAO0yE,MACpBvzF,GAAKq7F,EAELhiG,EAAIwnB,IAAU7gB,EAAI6gB,IAClB1qB,EAAOE,KAAK,CACRwhB,MAAOxe,EAAIwnB,EACX/I,IAAK9X,EAAI6gB,EACT2mE,KAAMrlE,EACNqP,MAAO4pE,IAEXF,EAAYE,EACZvjF,EAAQ7X,EAAI6gB,EAhBhB,CAkBJ,CACA,IAAK,MAAMsiD,KAAWnH,EAAS,CAC3BnkD,EAAQ29E,EAAW39E,EAAQsrD,EAAQtrD,MACnC,IACI2Z,EADAta,EAAO2oE,EAAOhoE,EAAQgJ,GAE1B,IAAI7rB,EAAI6iB,EAAQ,EAAG7iB,GAAKmuE,EAAQrrD,IAAK9iB,IAAI,CACrC,MAAMqgG,EAAKxV,EAAO7qF,EAAI6rB,GACtB2Q,EAAQwpE,GAAUJ,EAAepsF,WAAWuhF,GAAc8K,EAAc,CACpE1/F,KAAM,UACNmgG,GAAIpkF,EACJ61D,GAAIsoB,EACJkG,aAAcvmG,EAAI,GAAK6rB,EACvB26E,YAAaxmG,EAAI6rB,EACjB65D,mBAEA+gB,GAAajqE,EAAO0pE,IACpBC,EAAStjF,EAAO7iB,EAAI,EAAGmuE,EAAQqkB,KAAM0T,GAEzChkF,EAAOm+E,EACP6F,EAAY1pE,CAChB,CACI3Z,EAAQ7iB,EAAI,GACZmmG,EAAStjF,EAAO7iB,EAAI,EAAGmuE,EAAQqkB,KAAM0T,EAE7C,CACA,OAAO/kG,CACX,CA3DWulG,CAAgBv8F,EAAM68D,EAAU6jB,EAAQ+a,GAFpC5+B,CAGf,CA2DA,SAASg/B,GAAUz+E,GACf,MAAO,CACHke,gBAAiBle,EAAQke,gBACzBkhE,eAAgBp/E,EAAQo/E,eACxBC,WAAYr/E,EAAQq/E,WACpBC,iBAAkBt/E,EAAQs/E,iBAC1BC,gBAAiBv/E,EAAQu/E,gBACzB3P,YAAa5vE,EAAQ4vE,YACrB9uD,YAAa9gB,EAAQ8gB,YAE7B,CACA,SAASo+D,GAAajqE,EAAO0pE,GACzB,IAAKA,EACD,OAAO,EAEX,MAAM/gE,EAAQ,GACRv5B,EAAW,SAAS5H,EAAKtC,GAC3B,OAAK2sF,GAAoB3sF,IAGpByjC,EAAMjO,SAASx1B,IAChByjC,EAAM9jC,KAAKK,GAERyjC,EAAMt7B,QAAQnI,IALVA,CAMf,EACA,OAAOsK,KAAKC,UAAUuwB,EAAO5wB,KAAcI,KAAKC,UAAUi6F,EAAWt6F,EACzE,CC7qFA,MAAMm7F,GACF,WAAAt2E,GACIprB,KAAK2hG,SAAW,KAChB3hG,KAAK4hG,QAAU,IAAIxY,IACnBppF,KAAK6hG,UAAW,EAChB7hG,KAAK8hG,eAAY1kG,CACrB,CACH,OAAA0Y,CAAQg0E,EAAOiY,EAAOC,EAAMlhG,GACrB,MAAM4O,EAAYqyF,EAAMp7E,UAAU7lB,GAC5BmhG,EAAWF,EAAMvpF,SACvB9I,EAAUuhB,SAASz2B,GAAKA,EAAG,CACnBsvF,QACA33D,QAAS4vE,EAAM5vE,QACf8vE,WACAC,YAAa5wF,KAAKpV,IAAI8lG,EAAOD,EAAMvkF,MAAOykF,MAEtD,CACH,QAAAE,GACWniG,KAAK2hG,WAGT3hG,KAAK6hG,UAAW,EAChB7hG,KAAK2hG,SAAW5c,GAAiBvpF,KAAK0E,QAAQ,KAC1CF,KAAKoiG,UACLpiG,KAAK2hG,SAAW,KACZ3hG,KAAK6hG,UACL7hG,KAAKmiG,UACT,IAER,CACH,OAAAC,CAAQJ,EAAOhhG,KAAKuX,OACb,IAAIwO,EAAY,EAChB/mB,KAAK4hG,QAAQ3wE,SAAQ,CAAC8wE,EAAOjY,KACzB,IAAKiY,EAAMM,UAAYN,EAAM/oC,MAAMn+D,OAC/B,OAEJ,MAAMm+D,EAAQ+oC,EAAM/oC,MACpB,IAEIj+D,EAFAJ,EAAIq+D,EAAMn+D,OAAS,EACnBynG,GAAO,EAEX,KAAM3nG,GAAK,IAAKA,EACZI,EAAOi+D,EAAMr+D,GACTI,EAAKwnG,SACDxnG,EAAKynG,OAAST,EAAMvpF,WACpBupF,EAAMvpF,SAAWzd,EAAKynG,QAE1BznG,EAAK0nG,KAAKT,GACVM,GAAO,IAEPtpC,EAAMr+D,GAAKq+D,EAAMA,EAAMn+D,OAAS,GAChCm+D,EAAM5zD,OAGVk9F,IACAxY,EAAMwY,OACNtiG,KAAK8V,QAAQg0E,EAAOiY,EAAOC,EAAM,aAEhChpC,EAAMn+D,SACPknG,EAAMM,SAAU,EAChBriG,KAAK8V,QAAQg0E,EAAOiY,EAAOC,EAAM,YACjCD,EAAM5vE,SAAU,GAEpBpL,GAAaiyC,EAAMn+D,MAAM,IAE7BmF,KAAK8hG,UAAYE,EACC,IAAdj7E,IACA/mB,KAAK6hG,UAAW,EAExB,CACH,SAAAa,CAAU5Y,GACH,MAAM6Y,EAAS3iG,KAAK4hG,QACpB,IAAIG,EAAQY,EAAOx4F,IAAI2/E,GAavB,OAZKiY,IACDA,EAAQ,CACJM,SAAS,EACTlwE,SAAS,EACT6mC,MAAO,GACPryC,UAAW,CACPopB,SAAU,GACV9B,SAAU,KAGlB00D,EAAO/5E,IAAIkhE,EAAOiY,IAEfA,CACX,CACH,MAAAa,CAAO9Y,EAAOv7E,EAAOe,GACdtP,KAAK0iG,UAAU5Y,GAAOnjE,UAAUpY,GAAOvS,KAAKsT,EAChD,CACH,GAAA9G,CAAIshF,EAAO9wB,GACCA,GAAUA,EAAMn+D,QAGrBmF,KAAK0iG,UAAU5Y,GAAO9wB,MAAMh9D,QAAQg9D,EACxC,CACH,GAAA3vC,CAAIygE,GACG,OAAO9pF,KAAK0iG,UAAU5Y,GAAO9wB,MAAMn+D,OAAS,CAChD,CACH,KAAA2iB,CAAMssE,GACC,MAAMiY,EAAQ/hG,KAAK4hG,QAAQz3F,IAAI2/E,GAC1BiY,IAGLA,EAAMM,SAAU,EAChBN,EAAMvkF,MAAQxc,KAAKuX,MACnBwpF,EAAMvpF,SAAWupF,EAAM/oC,MAAM7nC,QAAO,CAAC0xE,EAAK1gE,IAAM7wB,KAAKnV,IAAI0mG,EAAK1gE,EAAI2gE,YAAY,GAC9E9iG,KAAKmiG,WACT,CACA,OAAAE,CAAQvY,GACJ,IAAK9pF,KAAK6hG,SACN,OAAO,EAEX,MAAME,EAAQ/hG,KAAK4hG,QAAQz3F,IAAI2/E,GAC/B,SAAKiY,GAAUA,EAAMM,SAAYN,EAAM/oC,MAAMn+D,OAIjD,CACH,IAAAi9B,CAAKgyD,GACE,MAAMiY,EAAQ/hG,KAAK4hG,QAAQz3F,IAAI2/E,GAC/B,IAAKiY,IAAUA,EAAM/oC,MAAMn+D,OACvB,OAEJ,MAAMm+D,EAAQ+oC,EAAM/oC,MACpB,IAAIr+D,EAAIq+D,EAAMn+D,OAAS,EACvB,KAAMF,GAAK,IAAKA,EACZq+D,EAAMr+D,GAAGwuD,SAEb44C,EAAM/oC,MAAQ,GACdh5D,KAAK8V,QAAQg0E,EAAOiY,EAAO/gG,KAAKuX,MAAO,WAC3C,CACH,MAAAoT,CAAOm+D,GACA,OAAO9pF,KAAK4hG,QAAQhK,OAAO9N,EAC/B,EAEJ,IAAIiZ,GAA2B,IAAIrB,GAEnC,MAAM3hE,GAAc,cACdijE,GAAgB,CAClB,OAAAC,CAASrjF,EAAME,EAAIojF,GACf,OAAOA,EAAS,GAAMpjF,EAAKF,CAC/B,EACH,KAAAoe,CAAOpe,EAAME,EAAIojF,GACV,MAAMC,EAAKnlE,GAAMpe,GAAQmgB,IACnBs+C,EAAK8kB,EAAGnlB,OAAShgD,GAAMle,GAAMigB,IACnC,OAAOs+C,GAAMA,EAAGL,MAAQK,EAAGF,IAAIglB,EAAID,GAAQnxB,YAAcjyD,CAC7D,EACA,MAAAsjF,CAAQxjF,EAAME,EAAIojF,GACd,OAAOtjF,GAAQE,EAAKF,GAAQsjF,CAChC,GAEJ,MAAMjwD,GACF,WAAA7nB,CAAYi4E,EAAK5jG,EAAQ5D,EAAMikB,GAC3B,MAAM6wD,EAAelxE,EAAO5D,GAC5BikB,EAAKsC,GAAQ,CACTihF,EAAIvjF,GACJA,EACA6wD,EACA0yB,EAAIzjF,OAER,MAAMA,EAAOwC,GAAQ,CACjBihF,EAAIzjF,KACJ+wD,EACA7wD,IAEJ9f,KAAKuiG,SAAU,EACfviG,KAAKsjG,IAAMD,EAAI7oG,IAAMwoG,GAAcK,EAAIviG,aAAe8e,GACtD5f,KAAKujG,QAAUxc,GAAQsc,EAAI/3D,SAAWy7C,GAAQC,OAC9ChnF,KAAKmpE,OAAS73D,KAAKwtB,MAAM99B,KAAKuX,OAAS8qF,EAAIlvD,OAAS,IACpDn0C,KAAK8iG,UAAY9iG,KAAKwiG,OAASlxF,KAAKwtB,MAAMukE,EAAI7qF,UAC9CxY,KAAKwjG,QAAUH,EAAIlW,KACnBntF,KAAKyjG,QAAUhkG,EACfO,KAAK0jG,MAAQ7nG,EACbmE,KAAK2jG,MAAQ/jF,EACb5f,KAAK4jG,IAAM9jF,EACX9f,KAAK6jG,eAAYzmG,CACrB,CACA,MAAAwuD,GACI,OAAO5rD,KAAKuiG,OAChB,CACA,MAAAuB,CAAOT,EAAKvjF,EAAIkiF,GACZ,GAAIhiG,KAAKuiG,QAAS,CACdviG,KAAK8V,SAAQ,GACb,MAAM66D,EAAe3wE,KAAKyjG,QAAQzjG,KAAK0jG,OACjCK,EAAU/B,EAAOhiG,KAAKmpE,OACtBohB,EAASvqF,KAAK8iG,UAAYiB,EAChC/jG,KAAKmpE,OAAS64B,EACdhiG,KAAK8iG,UAAYxxF,KAAKwtB,MAAMxtB,KAAKnV,IAAIouF,EAAQ8Y,EAAI7qF,WACjDxY,KAAKwiG,QAAUuB,EACf/jG,KAAKwjG,QAAUH,EAAIlW,KACnBntF,KAAK4jG,IAAMxhF,GAAQ,CACfihF,EAAIvjF,GACJA,EACA6wD,EACA0yB,EAAIzjF,OAER5f,KAAK2jG,MAAQvhF,GAAQ,CACjBihF,EAAIzjF,KACJ+wD,EACA7wD,GAER,CACJ,CACA,MAAAqpC,GACQnpD,KAAKuiG,UACLviG,KAAKyiG,KAAKzhG,KAAKuX,OACfvY,KAAKuiG,SAAU,EACfviG,KAAK8V,SAAQ,GAErB,CACA,IAAA2sF,CAAKT,GACD,MAAM+B,EAAU/B,EAAOhiG,KAAKmpE,OACtB3wD,EAAWxY,KAAK8iG,UAChBjnG,EAAOmE,KAAK0jG,MACZ9jF,EAAO5f,KAAK2jG,MACZxW,EAAOntF,KAAKwjG,MACZ1jF,EAAK9f,KAAK4jG,IAChB,IAAIV,EAEJ,GADAljG,KAAKuiG,QAAU3iF,IAASE,IAAOqtE,GAAQ4W,EAAUvrF,IAC5CxY,KAAKuiG,QAGN,OAFAviG,KAAKyjG,QAAQ5nG,GAAQikB,OACrB9f,KAAK8V,SAAQ,GAGbiuF,EAAU,EACV/jG,KAAKyjG,QAAQ5nG,GAAQ+jB,GAGzBsjF,EAASa,EAAUvrF,EAAW,EAC9B0qF,EAAS/V,GAAQ+V,EAAS,EAAI,EAAIA,EAASA,EAC3CA,EAASljG,KAAKujG,QAAQjyF,KAAKpV,IAAI,EAAGoV,KAAKnV,IAAI,EAAG+mG,KAC9CljG,KAAKyjG,QAAQ5nG,GAAQmE,KAAKsjG,IAAI1jF,EAAME,EAAIojF,GAC5C,CACA,IAAAr4E,GACI,MAAMm5E,EAAWhkG,KAAK6jG,YAAc7jG,KAAK6jG,UAAY,IACrD,OAAO,IAAI1hF,SAAQ,CAACmoD,EAAK25B,KACrBD,EAAShoG,KAAK,CACVsuE,MACA25B,OACF,GAEV,CACA,OAAAnuF,CAAQ43D,GACJ,MAAM5uE,EAAS4uE,EAAW,MAAQ,MAC5Bs2B,EAAWhkG,KAAK6jG,WAAa,GACnC,IAAI,IAAIlpG,EAAI,EAAGA,EAAIqpG,EAASnpG,OAAQF,IAChCqpG,EAASrpG,GAAGmE,IAEpB,EAGJ,MAAMolG,GACF,WAAA94E,CAAY0+D,EAAOv1E,GACfvU,KAAKygG,OAAS3W,EACd9pF,KAAKmkG,YAAc,IAAI/a,IACvBppF,KAAK+9C,UAAUxpC,EACnB,CACA,SAAAwpC,CAAUxpC,GACN,IAAKsc,EAAStc,GACV,OAEJ,MAAM6vF,EAAmB/oG,OAAOmqB,KAAKmD,GAASs+B,WACxCo9C,EAAgBrkG,KAAKmkG,YAC3B9oG,OAAOipG,oBAAoB/vF,GAAQ0c,SAAStyB,IACxC,MAAM0kG,EAAM9uF,EAAO5V,GACnB,IAAKkyB,EAASwyE,GACV,OAEJ,MAAM31B,EAAW,CAAC,EAClB,IAAK,MAAM3kB,KAAUq7C,EACjB12B,EAAS3kB,GAAUs6C,EAAIt6C,IAE1B58B,EAAQk3E,EAAI7jD,aAAe6jD,EAAI7jD,YAAc,CAC1C7gD,IACDsyB,SAASp1B,IACJA,IAAS8C,GAAQ0lG,EAAch7E,IAAIxtB,IACnCwoG,EAAcz7E,IAAI/sB,EAAM6xE,EAC5B,GACF,GAEV,CACH,eAAA62B,CAAgB9kG,EAAQ0uB,GACjB,MAAMq2E,EAAar2E,EAAOjM,QACpBA,EAwEd,SAA8BziB,EAAQ+kG,GAClC,IAAKA,EACD,OAEJ,IAAItiF,EAAUziB,EAAOyiB,QACrB,IAAKA,EAED,YADAziB,EAAOyiB,QAAUsiF,GAGjBtiF,EAAQuiF,UACRhlG,EAAOyiB,QAAUA,EAAU7mB,OAAOyE,OAAO,CAAC,EAAGoiB,EAAS,CAClDuiF,SAAS,EACTC,YAAa,CAAC,KAGtB,OAAOxiF,CACX,CAxFwByiF,CAAqBllG,EAAQ+kG,GAC7C,IAAKtiF,EACD,MAAO,GAEX,MAAMmrE,EAAartF,KAAK4kG,kBAAkB1iF,EAASsiF,GAOnD,OANIA,EAAWC,SAwDvB,SAAkBpX,EAAY7tC,GAC1B,MAAM6iD,EAAU,GACV78E,EAAOnqB,OAAOmqB,KAAKg6B,GACzB,IAAI,IAAI7kD,EAAI,EAAGA,EAAI6qB,EAAK3qB,OAAQF,IAAI,CAChC,MAAMkqG,EAAOxX,EAAW7nE,EAAK7qB,IACzBkqG,GAAQA,EAAKj5C,UACby2C,EAAQrmG,KAAK6oG,EAAKh6E,OAE1B,CACA,OAAO1I,QAAQwF,IAAI06E,EACvB,CAjEYyC,CAASrlG,EAAOyiB,QAAQwiF,YAAaF,GAAY10F,MAAK,KAClDrQ,EAAOyiB,QAAUsiF,CAAU,IAC5B,SAGAnX,CACX,CACH,iBAAAuX,CAAkBnlG,EAAQ0uB,GACnB,MAAMk2E,EAAgBrkG,KAAKmkG,YACrB9W,EAAa,GACbgV,EAAU5iG,EAAOilG,cAAgBjlG,EAAOilG,YAAc,CAAC,GACvDniG,EAAQlH,OAAOmqB,KAAK2I,GACpB6zE,EAAOhhG,KAAKuX,MAClB,IAAI5d,EACJ,IAAIA,EAAI4H,EAAM1H,OAAS,EAAGF,GAAK,IAAKA,EAAE,CAClC,MAAMkB,EAAO0G,EAAM5H,GACnB,GAAuB,MAAnBkB,EAAKkG,OAAO,GACZ,SAEJ,GAAa,YAATlG,EAAoB,CACpBwxF,EAAWrxF,QAAQgE,KAAKukG,gBAAgB9kG,EAAQ0uB,IAChD,QACJ,CACA,MAAM9xB,EAAQ8xB,EAAOtyB,GACrB,IAAIorD,EAAYo7C,EAAQxmG,GACxB,MAAMwnG,EAAMgB,EAAcl6F,IAAItO,GAC9B,GAAIorD,EAAW,CACX,GAAIo8C,GAAOp8C,EAAU2E,SAAU,CAC3B3E,EAAU68C,OAAOT,EAAKhnG,EAAO2lG,GAC7B,QACJ,CACI/6C,EAAUkC,QAElB,CACKk6C,GAAQA,EAAI7qF,UAIjB6pF,EAAQxmG,GAAQorD,EAAY,IAAIhU,GAAUowD,EAAK5jG,EAAQ5D,EAAMQ,GAC7DgxF,EAAWrxF,KAAKirD,IAJZxnD,EAAO5D,GAAQQ,CAKvB,CACA,OAAOgxF,CACX,CACH,MAAAyW,CAAOrkG,EAAQ0uB,GACR,GAA8B,IAA1BnuB,KAAKmkG,YAAY5zF,KAEjB,YADAlV,OAAOyE,OAAOL,EAAQ0uB,GAG1B,MAAMk/D,EAAartF,KAAK4kG,kBAAkBnlG,EAAQ0uB,GAClD,OAAIk/D,EAAWxyF,QACXkoG,GAASv6F,IAAIxI,KAAKygG,OAAQpT,IACnB,QAFX,CAIJ,EA+BJ,SAAS0X,GAAU3Y,EAAO4Y,GACtB,MAAMv+F,EAAO2lF,GAASA,EAAMlqE,SAAW,CAAC,EAClC89D,EAAUv5E,EAAKu5E,QACf9jF,OAAmBkB,IAAbqJ,EAAKvK,IAAoB8oG,EAAkB,EACjD7oG,OAAmBiB,IAAbqJ,EAAKtK,IAAoB6oG,EAAkB,EACvD,MAAO,CACHxnF,MAAOwiE,EAAU7jF,EAAMD,EACvBuhB,IAAKuiE,EAAU9jF,EAAMC,EAE7B,CAgCA,SAAS8oG,GAAwBnb,EAAOob,GACpC,MAAM1/E,EAAO,GACP2/E,EAAWrb,EAAMsb,uBAAuBF,GAC9C,IAAIvqG,EAAGwlF,EACP,IAAIxlF,EAAI,EAAGwlF,EAAOglB,EAAStqG,OAAQF,EAAIwlF,IAAQxlF,EAC3C6qB,EAAKxpB,KAAKmpG,EAASxqG,GAAG4U,OAE1B,OAAOiW,CACX,CACA,SAAS6/E,GAAWphG,EAAO5H,EAAOipG,EAASpjF,EAAU,CAAC,GAClD,MAAMsD,EAAOvhB,EAAMuhB,KACb+/E,EAA8B,WAAjBrjF,EAAQ0pE,KAC3B,IAAIjxF,EAAGwlF,EAAME,EAAcmlB,EAC3B,GAAc,OAAVnpG,EAAJ,CAGA,IAAI1B,EAAI,EAAGwlF,EAAO36D,EAAK3qB,OAAQF,EAAIwlF,IAAQxlF,EAAE,CAEzC,GADA0lF,GAAgB76D,EAAK7qB,GACjB0lF,IAAiBilB,EAAS,CAC1B,GAAIpjF,EAAQyF,IACR,SAEJ,KACJ,CACA69E,EAAavhG,EAAMkqB,OAAOkyD,GACtBb,EAAegmB,KAAgBD,GAAwB,IAAVlpG,GAAe25C,GAAK35C,KAAW25C,GAAKwvD,MACjFnpG,GAASmpG,EAEjB,CACA,OAAOnpG,CAdP,CAeJ,CAcA,SAASopG,GAAUrZ,EAAO7G,GACtB,MAAMmgB,EAAUtZ,GAASA,EAAMlqE,QAAQwjF,QACvC,OAAOA,QAAuBtoG,IAAZsoG,QAAwCtoG,IAAfmoF,EAAKthF,KACpD,CAWA,SAAS0hG,GAAiBC,EAAQC,EAAUC,GACxC,MAAMC,EAAWH,EAAOC,KAAcD,EAAOC,GAAY,CAAC,GAC1D,OAAOE,EAASD,KAAgBC,EAASD,GAAc,CAAC,EAC5D,CACA,SAASE,GAAoB/hG,EAAOgiG,EAAQC,EAAUplG,GAClD,IAAK,MAAMykF,KAAQ0gB,EAAOE,wBAAwBrlG,GAAMk/E,UAAU,CAC9D,MAAM3jF,EAAQ4H,EAAMshF,EAAKh2E,OACzB,GAAI22F,GAAY7pG,EAAQ,IAAM6pG,GAAY7pG,EAAQ,EAC9C,OAAOkpF,EAAKh2E,KAEpB,CACA,OAAO,IACX,CACA,SAAS62F,GAAaC,EAAYzmE,GAC9B,MAAM,MAAEkqD,EAAQwc,YAAa/gB,GAAU8gB,EACjCT,EAAS9b,EAAMyc,UAAYzc,EAAMyc,QAAU,CAAC,IAC5C,OAAE3gB,EAAO,OAAEqgB,EAAS12F,MAAO8wE,GAAkBkF,EAC7CihB,EAAQ5gB,EAAOptB,KACfiuC,EAAQR,EAAOztC,KACf75D,EA7BV,SAAqB+nG,EAAYC,EAAYphB,GACzC,MAAO,GAAGmhB,EAAW15F,MAAM25F,EAAW35F,MAAMu4E,EAAKthF,OAASshF,EAAKzkF,MACnE,CA2BgB8lG,CAAYhhB,EAAQqgB,EAAQ1gB,GAClCpF,EAAOvgD,EAAO/kC,OACpB,IAAIoJ,EACJ,IAAI,IAAItJ,EAAI,EAAGA,EAAIwlF,IAAQxlF,EAAE,CACzB,MAAMI,EAAO6kC,EAAOjlC,IACZ,CAAC6rG,GAAQj3F,EAAQ,CAACk3F,GAAQpqG,GAAWtB,EAE7CkJ,GADmBlJ,EAAKwrG,UAAYxrG,EAAKwrG,QAAU,CAAC,IACjCE,GAASd,GAAiBC,EAAQjnG,EAAK4Q,GAC1DtL,EAAMo8E,GAAgBhkF,EACtB4H,EAAM4iG,KAAOb,GAAoB/hG,EAAOgiG,GAAQ,EAAM1gB,EAAKzkF,MAC3DmD,EAAM6iG,QAAUd,GAAoB/hG,EAAOgiG,GAAQ,EAAO1gB,EAAKzkF,OAC1CmD,EAAM8iG,gBAAkB9iG,EAAM8iG,cAAgB,CAAC,IACvD1mB,GAAgBhkF,CACjC,CACJ,CACA,SAAS2qG,GAAgBld,EAAOtxB,GAC5B,MAAM6zB,EAASvC,EAAMuC,OACrB,OAAOhxF,OAAOmqB,KAAK6mE,GAAQxnF,QAAQlG,GAAM0tF,EAAO1tF,GAAK65D,OAASA,IAAMryD,OACxE,CAuBA,SAAS8gG,GAAY1hB,EAAMvsB,GACvB,MAAMqnB,EAAekF,EAAK8gB,WAAW92F,MAC/BipD,EAAO+sB,EAAK0gB,QAAU1gB,EAAK0gB,OAAOztC,KACxC,GAAKA,EAAL,CAGAQ,EAAQA,GAASusB,EAAKM,QACtB,IAAK,MAAMjmD,KAAUo5B,EAAM,CACvB,MAAM4sC,EAAShmE,EAAO2mE,QACtB,IAAKX,QAA2BxoG,IAAjBwoG,EAAOptC,SAAsDp7D,IAA/BwoG,EAAOptC,GAAM6nB,GACtD,cAEGulB,EAAOptC,GAAM6nB,QACejjF,IAA/BwoG,EAAOptC,GAAMuuC,oBAA4E3pG,IAA7CwoG,EAAOptC,GAAMuuC,cAAc1mB,WAChEulB,EAAOptC,GAAMuuC,cAAc1mB,EAE1C,CAXA,CAYJ,CACA,MAAM6mB,GAAsBtb,GAAgB,UAATA,GAA6B,SAATA,EACjDub,GAAmB,CAACC,EAAQC,IAASA,EAASD,EAAS/rG,OAAOyE,OAAO,CAAC,EAAGsnG,GAK/E,MAAME,GACLC,gBAAkB,CAAC,EACnBA,0BAA4B,KAC5BA,uBAAyB,KACzB,WAAAn8E,CAAY0+D,EAAOzJ,GACZrgF,KAAK8pF,MAAQA,EACb9pF,KAAKmuF,KAAOrE,EAAMlkE,IAClB5lB,KAAKuP,MAAQ8wE,EACbrgF,KAAKwnG,gBAAkB,CAAC,EACxBxnG,KAAKsmG,YAActmG,KAAKynG,UACxBznG,KAAKijE,MAAQjjE,KAAKsmG,YAAYxlG,KAC9Bd,KAAKkiB,aAAU9kB,EACd4C,KAAK+4F,UAAW,EACjB/4F,KAAK0nG,WAAQtqG,EACb4C,KAAK2nG,iBAAcvqG,EACnB4C,KAAK4nG,oBAAiBxqG,EACtB4C,KAAK6nG,gBAAazqG,EAClB4C,KAAK8nG,gBAAa1qG,EAClB4C,KAAK+nG,qBAAsB,EAC3B/nG,KAAKgoG,oBAAqB,EAC1BhoG,KAAKioG,cAAW7qG,EAChB4C,KAAKkoG,UAAY,GACjBloG,KAAKmoG,8BAAgCA,mBACrCnoG,KAAKooG,2BAA6BA,gBAClCpoG,KAAK8oB,YACT,CACA,UAAAA,GACI,MAAMy8D,EAAOvlF,KAAKsmG,YAClBtmG,KAAK+9C,YACL/9C,KAAKqoG,aACL9iB,EAAK+iB,SAAW7C,GAAUlgB,EAAK0gB,OAAQ1gB,GACvCvlF,KAAKuoG,cACDvoG,KAAKkiB,QAAQ2vE,OAAS7xF,KAAK8pF,MAAM0e,gBAAgB,WACjDnoG,QAAQ6O,KAAK,qKAErB,CACA,WAAAu5F,CAAYpoB,GACJrgF,KAAKuP,QAAU8wE,GACf4mB,GAAYjnG,KAAKsmG,aAErBtmG,KAAKuP,MAAQ8wE,CACjB,CACA,UAAAgoB,GACI,MAAMve,EAAQ9pF,KAAK8pF,MACbvE,EAAOvlF,KAAKsmG,YACZoC,EAAU1oG,KAAK2oG,aACfC,EAAW,CAACpwC,EAAMt9D,EAAGqrD,EAAGtkB,IAAa,MAATu2B,EAAet9D,EAAa,MAATs9D,EAAev2B,EAAIskB,EAClEsiD,EAAMtjB,EAAKujB,QAAUppB,EAAegpB,EAAQI,QAAS9B,GAAgBld,EAAO,MAC5Eif,EAAMxjB,EAAKyjB,QAAUtpB,EAAegpB,EAAQM,QAAShC,GAAgBld,EAAO,MAC5Emf,EAAM1jB,EAAK2jB,QAAUxpB,EAAegpB,EAAQQ,QAASlC,GAAgBld,EAAO,MAC5E4B,EAAYnG,EAAKmG,UACjByd,EAAM5jB,EAAK6jB,QAAUR,EAASld,EAAWmd,EAAKE,EAAKE,GACnDI,EAAM9jB,EAAK+jB,QAAUV,EAASld,EAAWqd,EAAKF,EAAKI,GACzD1jB,EAAKY,OAASnmF,KAAKupG,cAAcV,GACjCtjB,EAAKa,OAASpmF,KAAKupG,cAAcR,GACjCxjB,EAAKikB,OAASxpG,KAAKupG,cAAcN,GACjC1jB,EAAKK,OAAS5lF,KAAKupG,cAAcJ,GACjC5jB,EAAK0gB,OAASjmG,KAAKupG,cAAcF,EACrC,CACA,UAAAV,GACI,OAAO3oG,KAAK8pF,MAAMxjF,KAAK2kF,SAASjrF,KAAKuP,MACzC,CACA,OAAAk4F,GACI,OAAOznG,KAAK8pF,MAAM2f,eAAezpG,KAAKuP,MAC1C,CACH,aAAAg6F,CAAcG,GACP,OAAO1pG,KAAK8pF,MAAMuC,OAAOqd,EAC7B,CACH,cAAAC,CAAevd,GACR,MAAM7G,EAAOvlF,KAAKsmG,YAClB,OAAOla,IAAU7G,EAAKK,OAASL,EAAK0gB,OAAS1gB,EAAKK,MACtD,CACA,KAAAvtE,GACIrY,KAAKoiG,QAAQ,QACjB,CACH,QAAAwH,GACO,MAAMrkB,EAAOvlF,KAAKsmG,YACdtmG,KAAK0nG,OACLhjB,GAAoB1kF,KAAK0nG,MAAO1nG,MAEhCulF,EAAK+iB,UACLrB,GAAY1hB,EAEpB,CACH,UAAAskB,GACO,MAAMnB,EAAU1oG,KAAK2oG,aACfriG,EAAOoiG,EAAQpiG,OAASoiG,EAAQpiG,KAAO,IACvCohG,EAAQ1nG,KAAK0nG,MACnB,GAAI72E,EAASvqB,GACTtG,KAAK0nG,MAxMjB,SAAkCphG,GAC9B,MAAMkf,EAAOnqB,OAAOmqB,KAAKlf,GACnBwjG,EAAQ,IAAIp/F,MAAM8a,EAAK3qB,QAC7B,IAAIF,EAAGwlF,EAAMxhF,EACb,IAAIhE,EAAI,EAAGwlF,EAAO36D,EAAK3qB,OAAQF,EAAIwlF,IAAQxlF,EACvCgE,EAAM6mB,EAAK7qB,GACXmvG,EAAMnvG,GAAK,CACPO,EAAGyD,EACH4nD,EAAGjgD,EAAK3H,IAGhB,OAAOmrG,CACX,CA4LyBC,CAAyBzjG,QACnC,GAAIohG,IAAUphG,EAAM,CACvB,GAAIohG,EAAO,CACPhjB,GAAoBgjB,EAAO1nG,MAC3B,MAAMulF,EAAOvlF,KAAKsmG,YAClBW,GAAY1hB,GACZA,EAAKM,QAAU,EACnB,CACIv/E,GAAQjL,OAAO2uG,aAAa1jG,KDtKVkd,ECuKMxjB,MDvKb8rB,ECuKOxlB,GDtKpBs+E,SACN94D,EAAM84D,SAASj+D,UAAU3qB,KAAKwnB,IAGlCnoB,OAAOsqC,eAAe7Z,EAAO,WAAY,CACrC8Z,cAAc,EACdC,YAAY,EACZxpC,MAAO,CACHsqB,UAAW,CACPnD,MAIZihE,GAAYxzD,SAAStyB,IACjB,MAAMG,EAAS,UAAY+C,GAAYlD,GACjCyS,EAAO0a,EAAMntB,GACnBtD,OAAOsqC,eAAe7Z,EAAOntB,EAAK,CAC9BinC,cAAc,EACdC,YAAY,EACZ,KAAAxpC,IAAUoG,GACN,MAAM6nE,EAAMl5D,EAAKrR,MAAMC,KAAMyC,GAM7B,OALAqpB,EAAM84D,SAASj+D,UAAUsK,SAAS6uB,IACA,oBAAnBA,EAAOhhD,IACdghD,EAAOhhD,MAAW2D,EACtB,IAEG6nE,CACX,GACF,MC4IEtqE,KAAKkoG,UAAY,GACjBloG,KAAK0nG,MAAQphG,CACjB,CD3KR,IAA2BwlB,EAAOtI,CC4K9B,CACA,WAAA+kF,GACI,MAAMhjB,EAAOvlF,KAAKsmG,YAClBtmG,KAAK6pG,aACD7pG,KAAKmoG,qBACL5iB,EAAKmjB,QAAU,IAAI1oG,KAAKmoG,mBAEhC,CACA,qBAAA8B,CAAsBC,GAClB,MAAM3kB,EAAOvlF,KAAKsmG,YACZoC,EAAU1oG,KAAK2oG,aACrB,IAAIwB,GAAe,EACnBnqG,KAAK6pG,aACL,MAAMO,EAAa7kB,EAAK+iB,SACxB/iB,EAAK+iB,SAAW7C,GAAUlgB,EAAK0gB,OAAQ1gB,GACnCA,EAAKthF,QAAUykG,EAAQzkG,QACvBkmG,GAAe,EACflD,GAAY1hB,GACZA,EAAKthF,MAAQykG,EAAQzkG,OAEzBjE,KAAKqqG,gBAAgBH,IACjBC,GAAgBC,IAAe7kB,EAAK+iB,WACpClC,GAAapmG,KAAMulF,EAAKM,QAEhC,CACH,SAAA9nC,GACO,MAAMxpC,EAASvU,KAAK8pF,MAAMv1E,OACpB+1F,EAAY/1F,EAAOg2F,iBAAiBvqG,KAAKijE,OACzC4yB,EAASthF,EAAOi2F,gBAAgBxqG,KAAK2oG,aAAc2B,GAAW,GACpEtqG,KAAKkiB,QAAU3N,EAAOk2F,eAAe5U,EAAQ71F,KAAKkU,cAClDlU,KAAK+4F,SAAW/4F,KAAKkiB,QAAQgqE,QAC7BlsF,KAAKwnG,gBAAkB,CAAC,CAC5B,CACH,KAAA3jG,CAAM2Z,EAAOgJ,GACN,MAAQ8/E,YAAa/gB,EAAOmiB,MAAOphG,GAAUtG,MACvC,OAAE4lF,EAAO,SAAE0iB,GAAc/iB,EACzBihB,EAAQ5gB,EAAOptB,KACrB,IAEI79D,EAAGwnC,EAAKvC,EAFR8qE,EAAmB,IAAVltF,GAAegJ,IAAUlgB,EAAKzL,QAAgB0qF,EAAKI,QAC5D9oE,EAAOW,EAAQ,GAAK+nE,EAAKM,QAAQroE,EAAQ,GAE7C,IAAsB,IAAlBxd,KAAK+4F,SACLxT,EAAKM,QAAUv/E,EACfi/E,EAAKI,SAAU,EACf/lD,EAASt5B,MACN,CAECs5B,EADAzT,EAAQ7lB,EAAKkX,IACJxd,KAAK2qG,eAAeplB,EAAMj/E,EAAMkX,EAAOgJ,GACzCqK,EAASvqB,EAAKkX,IACZxd,KAAK4qG,gBAAgBrlB,EAAMj/E,EAAMkX,EAAOgJ,GAExCxmB,KAAK6qG,mBAAmBtlB,EAAMj/E,EAAMkX,EAAOgJ,GAExD,MAAMskF,EAA6B,IAAmB,OAAf3oE,EAAIqkE,IAAmB3pF,GAAQslB,EAAIqkE,GAAS3pF,EAAK2pF,GACxF,IAAI7rG,EAAI,EAAGA,EAAI6rB,IAAS7rB,EACpB4qF,EAAKM,QAAQlrF,EAAI6iB,GAAS2kB,EAAMvC,EAAOjlC,GACnC+vG,IACII,MACAJ,GAAS,GAEb7tF,EAAOslB,GAGfojD,EAAKI,QAAU+kB,CACnB,CACIpC,GACAlC,GAAapmG,KAAM4/B,EAE3B,CACH,kBAAAirE,CAAmBtlB,EAAMj/E,EAAMkX,EAAOgJ,GAC/B,MAAM,OAAEo/D,EAAO,OAAEqgB,GAAY1gB,EACvBihB,EAAQ5gB,EAAOptB,KACfiuC,EAAQR,EAAOztC,KACfuyC,EAASnlB,EAAOolB,YAChBC,EAAcrlB,IAAWqgB,EACzBrmE,EAAS,IAAIl1B,MAAM8b,GACzB,IAAI7rB,EAAGwlF,EAAM5wE,EACb,IAAI5U,EAAI,EAAGwlF,EAAO35D,EAAO7rB,EAAIwlF,IAAQxlF,EACjC4U,EAAQ5U,EAAI6iB,EACZoiB,EAAOjlC,GAAK,CACR,CAAC6rG,GAAQyE,GAAerlB,EAAO/hF,MAAMknG,EAAOx7F,GAAQA,GACpD,CAACk3F,GAAQR,EAAOpiG,MAAMyC,EAAKiJ,GAAQA,IAG3C,OAAOqwB,CACX,CACH,cAAA+qE,CAAeplB,EAAMj/E,EAAMkX,EAAOgJ,GAC3B,MAAM,OAAE2/D,EAAO,OAAEC,GAAYb,EACvB3lD,EAAS,IAAIl1B,MAAM8b,GACzB,IAAI7rB,EAAGwlF,EAAM5wE,EAAOxU,EACpB,IAAIJ,EAAI,EAAGwlF,EAAO35D,EAAO7rB,EAAIwlF,IAAQxlF,EACjC4U,EAAQ5U,EAAI6iB,EACZziB,EAAOuL,EAAKiJ,GACZqwB,EAAOjlC,GAAK,CACRO,EAAGirF,EAAOtiF,MAAM9I,EAAK,GAAIwU,GACzBg3C,EAAG6/B,EAAOviF,MAAM9I,EAAK,GAAIwU,IAGjC,OAAOqwB,CACX,CACH,eAAAgrE,CAAgBrlB,EAAMj/E,EAAMkX,EAAOgJ,GAC5B,MAAM,OAAE2/D,EAAO,OAAEC,GAAYb,GACvB,SAAE2lB,EAAU,IAAI,SAAEC,EAAU,KAASnrG,KAAK+4F,SAC1Cn5D,EAAS,IAAIl1B,MAAM8b,GACzB,IAAI7rB,EAAGwlF,EAAM5wE,EAAOxU,EACpB,IAAIJ,EAAI,EAAGwlF,EAAO35D,EAAO7rB,EAAIwlF,IAAQxlF,EACjC4U,EAAQ5U,EAAI6iB,EACZziB,EAAOuL,EAAKiJ,GACZqwB,EAAOjlC,GAAK,CACRO,EAAGirF,EAAOtiF,MAAMm9E,GAAiBjmF,EAAMmwG,GAAW37F,GAClDg3C,EAAG6/B,EAAOviF,MAAMm9E,GAAiBjmF,EAAMowG,GAAW57F,IAG1D,OAAOqwB,CACX,CACH,SAAAwrE,CAAU77F,GACH,OAAOvP,KAAKsmG,YAAYzgB,QAAQt2E,EACpC,CACH,cAAA87F,CAAe97F,GACR,OAAOvP,KAAKsmG,YAAYhgG,KAAKiJ,EACjC,CACH,UAAA81F,CAAWjZ,EAAOxsD,EAAQgsD,GACnB,MAAM9B,EAAQ9pF,KAAK8pF,MACbvE,EAAOvlF,KAAKsmG,YACZjqG,EAAQujC,EAAOwsD,EAAM5zB,MAK3B,OAAO6sC,GAJO,CACV7/E,KAAMy/E,GAAwBnb,GAAO,GACrC37D,OAAQyR,EAAO2mE,QAAQna,EAAM5zB,MAAMuuC,eAEd1qG,EAAOkpF,EAAKh2E,MAAO,CACxCq8E,QAER,CACH,qBAAA0f,CAAsBnpB,EAAOiK,EAAOxsD,EAAQ37B,GACrC,MAAMsnG,EAAc3rE,EAAOwsD,EAAM5zB,MACjC,IAAIn8D,EAAwB,OAAhBkvG,EAAuBC,IAAMD,EACzC,MAAMp9E,EAASlqB,GAAS27B,EAAO2mE,QAAQna,EAAM5zB,MACzCv0D,GAASkqB,IACTlqB,EAAMkqB,OAASA,EACf9xB,EAAQgpG,GAAWphG,EAAOsnG,EAAavrG,KAAKsmG,YAAY/2F,QAE5D4yE,EAAMjmF,IAAMoV,KAAKpV,IAAIimF,EAAMjmF,IAAKG,GAChC8lF,EAAMhmF,IAAMmV,KAAKnV,IAAIgmF,EAAMhmF,IAAKE,EACpC,CACH,SAAAovG,CAAUrf,EAAOsf,GACV,MAAMnmB,EAAOvlF,KAAKsmG,YACZzgB,EAAUN,EAAKM,QACf6kB,EAASnlB,EAAKI,SAAWyG,IAAU7G,EAAKK,OACxCzF,EAAO0F,EAAQhrF,OACf8wG,EAAa3rG,KAAK2pG,eAAevd,GACjCnoF,EAhQM,EAACynG,EAAUnmB,EAAMuE,IAAQ4hB,IAAanmB,EAAK/5C,QAAU+5C,EAAK+iB,UAAY,CAClF9iF,KAAMy/E,GAAwBnb,GAAO,GACrC37D,OAAQ,MA8PMy9E,CAAYF,EAAUnmB,EAAMvlF,KAAK8pF,OACzC3H,EAAQ,CACVjmF,IAAKoH,OAAOo+E,kBACZvlF,IAAKmH,OAAOuoG,oBAER3vG,IAAK4vG,EAAW3vG,IAAK4vG,GA5VrC,SAAuB3f,GACnB,MAAM,IAAElwF,EAAI,IAAEC,EAAI,WAAE2pF,EAAW,WAAEC,GAAgBqG,EAAMpG,gBACvD,MAAO,CACH9pF,IAAK4pF,EAAa5pF,EAAMoH,OAAOuoG,kBAC/B1vG,IAAK4pF,EAAa5pF,EAAMmH,OAAOo+E,kBAEvC,CAsVmDsE,CAAc2lB,GACzD,IAAIhxG,EAAGilC,EACP,SAASosE,IACLpsE,EAASimD,EAAQlrF,GACjB,MAAM6qG,EAAa5lE,EAAO+rE,EAAWnzC,MACrC,OAAQgnB,EAAe5/C,EAAOwsD,EAAM5zB,QAAUszC,EAAWtG,GAAcuG,EAAWvG,CACtF,CACA,IAAI7qG,EAAI,EAAGA,EAAIwlF,IACP6rB,MAGJhsG,KAAKsrG,sBAAsBnpB,EAAOiK,EAAOxsD,EAAQ37B,IAC7CymG,MALe/vG,GASvB,GAAI+vG,EACA,IAAI/vG,EAAIwlF,EAAO,EAAGxlF,GAAK,IAAKA,EACxB,IAAIqxG,IAAJ,CAGAhsG,KAAKsrG,sBAAsBnpB,EAAOiK,EAAOxsD,EAAQ37B,GACjD,KAFA,CAKR,OAAOk+E,CACX,CACA,kBAAA8pB,CAAmB7f,GACf,MAAMxsD,EAAS5/B,KAAKsmG,YAAYzgB,QAC1B13D,EAAS,GACf,IAAIxzB,EAAGwlF,EAAM9jF,EACb,IAAI1B,EAAI,EAAGwlF,EAAOvgD,EAAO/kC,OAAQF,EAAIwlF,IAAQxlF,EACzC0B,EAAQujC,EAAOjlC,GAAGyxF,EAAM5zB,MACpBgnB,EAAenjF,IACf8xB,EAAOnyB,KAAKK,GAGpB,OAAO8xB,CACX,CACH,cAAA+9E,GACO,OAAO,CACX,CACH,gBAAAC,CAAiB58F,GACV,MAAMg2E,EAAOvlF,KAAKsmG,YACZ1gB,EAASL,EAAKK,OACdqgB,EAAS1gB,EAAK0gB,OACdrmE,EAAS5/B,KAAKorG,UAAU77F,GAC9B,MAAO,CACHmqB,MAAOksD,EAAS,GAAKA,EAAOwmB,iBAAiBxsE,EAAOgmD,EAAOptB,OAAS,GACpEn8D,MAAO4pG,EAAS,GAAKA,EAAOmG,iBAAiBxsE,EAAOqmE,EAAOztC,OAAS,GAE5E,CACH,OAAA4pC,CAAQxW,GACD,MAAMrG,EAAOvlF,KAAKsmG,YAClBtmG,KAAK8jG,OAAOlY,GAAQ,WACpBrG,EAAK8mB,MAxdb,SAAgBhwG,GACZ,IAAIirE,EAAGrlC,EAAGpuB,EAAGiU,EASb,OARI+I,EAASx0B,IACTirE,EAAIjrE,EAAM2mD,IACV/gB,EAAI5lC,EAAM8mD,MACVtvC,EAAIxX,EAAM6mD,OACVp7B,EAAIzrB,EAAM4mD,MAEVqkB,EAAIrlC,EAAIpuB,EAAIiU,EAAIzrB,EAEb,CACH2mD,IAAKskB,EACLnkB,MAAOlhB,EACPihB,OAAQrvC,EACRovC,KAAMn7B,EACNuoC,UAAoB,IAAVh0D,EAElB,CAucqBiwG,CAAO5sB,EAAe1/E,KAAKkiB,QAAQyrE,KArexD,SAAqBxH,EAAQC,EAAQ4e,GACjC,IAAwB,IAApBA,EACA,OAAO,EAEX,MAAM9pG,EAAI6pG,GAAU5e,EAAQ6e,GACtBz+C,EAAIw+C,GAAU3e,EAAQ4e,GAC5B,MAAO,CACHhiD,IAAKuD,EAAE9oC,IACP0lC,MAAOjoD,EAAEuiB,IACTylC,OAAQqD,EAAE/oC,MACVylC,KAAM/nD,EAAEsiB,MAEhB,CAyd8D+uF,CAAYhnB,EAAKY,OAAQZ,EAAKa,OAAQpmF,KAAKksG,mBACrG,CACH,MAAApI,CAAOlY,GAAO,CACX,IAAA0W,GACI,MAAM18E,EAAM5lB,KAAKmuF,KACXrE,EAAQ9pF,KAAK8pF,MACbvE,EAAOvlF,KAAKsmG,YACZ11D,EAAW20C,EAAKj/E,MAAQ,GACxB4rF,EAAOpI,EAAM0iB,UACb5gD,EAAS,GACTpuC,EAAQxd,KAAK6nG,YAAc,EAC3BrhF,EAAQxmB,KAAK8nG,YAAcl3D,EAAS/1C,OAAS2iB,EAC7C+uE,EAA0BvsF,KAAKkiB,QAAQqqE,wBAC7C,IAAI5xF,EAIJ,IAHI4qF,EAAKmjB,SACLnjB,EAAKmjB,QAAQpG,KAAK18E,EAAKssE,EAAM10E,EAAOgJ,GAEpC7rB,EAAI6iB,EAAO7iB,EAAI6iB,EAAQgJ,IAAS7rB,EAAE,CAClC,MAAMi1B,EAAUghB,EAASj2C,GACrBi1B,EAAQ4b,SAGR5b,EAAQg8B,QAAU2gC,EAClB3gC,EAAO5vD,KAAK4zB,GAEZA,EAAQ0yE,KAAK18E,EAAKssE,GAE1B,CACA,IAAIv3F,EAAI,EAAGA,EAAIixD,EAAO/wD,SAAUF,EAC5BixD,EAAOjxD,GAAG2nG,KAAK18E,EAAKssE,EAE5B,CACH,QAAAmM,CAAS9uF,EAAOq8C,GACT,MAAMggC,EAAOhgC,EAAS,SAAW,UACjC,YAAiBxuD,IAAVmS,GAAuBvP,KAAKsmG,YAAYoC,QAAU1oG,KAAKysG,6BAA6B7gB,GAAQ5rF,KAAK0sG,0BAA0Bn9F,GAAS,EAAGq8E,EAClJ,CACH,UAAA13E,CAAW3E,EAAOq8C,EAAQggC,GACnB,MAAM8c,EAAU1oG,KAAK2oG,aACrB,IAAIlqG,EACJ,GAAI8Q,GAAS,GAAKA,EAAQvP,KAAKsmG,YAAYhgG,KAAKzL,OAAQ,CACpD,MAAM+0B,EAAU5vB,KAAKsmG,YAAYhgG,KAAKiJ,GACtC9Q,EAAUmxB,EAAQq4E,WAAar4E,EAAQq4E,SArYnD,SAA2B1vE,EAAQhpB,EAAOqgB,GACtC,OAAO8lE,GAAcn9D,EAAQ,CACzBqzB,QAAQ,EACR+gD,UAAWp9F,EACXqwB,YAAQxiC,EACRwvG,SAAKxvG,EACLwyB,UACArgB,QACAq8E,KAAM,UACN9qF,KAAM,QAEd,CA0X8D+rG,CAAkB7sG,KAAKkU,aAAc3E,EAAOqgB,IAC9FnxB,EAAQmhC,OAAS5/B,KAAKorG,UAAU77F,GAChC9Q,EAAQmuG,IAAMlE,EAAQpiG,KAAKiJ,GAC3B9Q,EAAQ8Q,MAAQ9Q,EAAQkuG,UAAYp9F,CACxC,MACI9Q,EAAUuB,KAAKioG,WAAajoG,KAAKioG,SApZ7C,SAA8B1vE,EAAQhpB,GAClC,OAAOmmF,GAAcn9D,EAAQ,CACzBqzB,QAAQ,EACR88C,aAAStrG,EACTijF,aAAc9wE,EACdA,QACAq8E,KAAM,UACN9qF,KAAM,WAEd,CA2YwDgsG,CAAqB9sG,KAAK8pF,MAAM51E,aAAclU,KAAKuP,QAC/F9Q,EAAQiqG,QAAUA,EAClBjqG,EAAQ8Q,MAAQ9Q,EAAQ4hF,aAAergF,KAAKuP,MAIhD,OAFA9Q,EAAQmtD,SAAWA,EACnBntD,EAAQmtF,KAAOA,EACRntF,CACX,CACH,4BAAAguG,CAA6B7gB,GACtB,OAAO5rF,KAAK+sG,uBAAuB/sG,KAAKmoG,mBAAmBn7F,GAAI4+E,EACnE,CACH,yBAAA8gB,CAA0Bn9F,EAAOq8E,GAC1B,OAAO5rF,KAAK+sG,uBAAuB/sG,KAAKooG,gBAAgBp7F,GAAI4+E,EAAMr8E,EACtE,CACH,sBAAAw9F,CAAuBC,EAAaphB,EAAO,UAAWr8E,GAC/C,MAAMq8C,EAAkB,WAATggC,EACT9rD,EAAQ9/B,KAAKwnG,gBACble,EAAW0jB,EAAc,IAAMphB,EAC/Bwb,EAAStnE,EAAMwpD,GACf2jB,EAAUjtG,KAAK+nG,qBAAuB3mB,GAAQ7xE,GACpD,GAAI63F,EACA,OAAOD,GAAiBC,EAAQ6F,GAEpC,MAAM14F,EAASvU,KAAK8pF,MAAMv1E,OACpB+1F,EAAY/1F,EAAO24F,wBAAwBltG,KAAKijE,MAAO+pC,GACvDlX,EAAWlqC,EAAS,CACtB,GAAGohD,SACH,QACAA,EACA,IACA,CACAA,EACA,IAEEnX,EAASthF,EAAOi2F,gBAAgBxqG,KAAK2oG,aAAc2B,GACnD/kF,EAAQlqB,OAAOmqB,KAAKmD,GAASioB,SAASo8D,IAEtC7+E,EAAS5Z,EAAO44F,oBAAoBtX,EAAQtwE,GADlC,IAAIvlB,KAAKkU,WAAW3E,EAAOq8C,EAAQggC,IACekK,GAKlE,OAJI3nE,EAAOs2E,UACPt2E,EAAOs2E,QAAUwI,EACjBntE,EAAMwpD,GAAYjuF,OAAO+xG,OAAOjG,GAAiBh5E,EAAQ8+E,KAEtD9+E,CACX,CACH,kBAAAk/E,CAAmB99F,EAAO2xB,EAAY0qB,GAC/B,MAAMk+B,EAAQ9pF,KAAK8pF,MACbhqD,EAAQ9/B,KAAKwnG,gBACble,EAAW,aAAapoD,IACxBkmE,EAAStnE,EAAMwpD,GACrB,GAAI8d,EACA,OAAOA,EAEX,IAAIllF,EACJ,IAAgC,IAA5B4nE,EAAM5nE,QAAQ+kC,UAAqB,CACnC,MAAM1yC,EAASvU,KAAK8pF,MAAMv1E,OACpB+1F,EAAY/1F,EAAO+4F,0BAA0BttG,KAAKijE,MAAO/hC,GACzD20D,EAASthF,EAAOi2F,gBAAgBxqG,KAAK2oG,aAAc2B,GACzDpoF,EAAU3N,EAAOk2F,eAAe5U,EAAQ71F,KAAKkU,WAAW3E,EAAOq8C,EAAQ1qB,GAC3E,CACA,MAAMmsD,EAAa,IAAI6W,GAAWpa,EAAO5nE,GAAWA,EAAQmrE,YAI5D,OAHInrE,GAAWA,EAAQk0E,aACnBt2D,EAAMwpD,GAAYjuF,OAAO+xG,OAAO/f,IAE7BA,CACX,CACH,gBAAAkgB,CAAiBrrF,GACV,GAAKA,EAAQuiF,QAGb,OAAOzkG,KAAK4nG,iBAAmB5nG,KAAK4nG,eAAiBvsG,OAAOyE,OAAO,CAAC,EAAGoiB,GAC3E,CACH,cAAAsrF,CAAe5hB,EAAM6hB,GACd,OAAQA,GAAiBvG,GAAmBtb,IAAS5rF,KAAK8pF,MAAM4jB,mBACpE,CACH,iBAAAC,CAAkBnwF,EAAOouE,GAClB,MAAMgiB,EAAY5tG,KAAK0sG,0BAA0BlvF,EAAOouE,GAClDiiB,EAA0B7tG,KAAK4nG,eAC/B6F,EAAgBztG,KAAKutG,iBAAiBK,GACtCJ,EAAiBxtG,KAAKwtG,eAAe5hB,EAAM6hB,IAAkBA,IAAkBI,EAErF,OADA7tG,KAAK8tG,oBAAoBL,EAAe7hB,EAAMgiB,GACvC,CACHH,gBACAD,iBAER,CACH,aAAAO,CAAcn+E,EAASrgB,EAAOiwC,EAAYosC,GAC/Bsb,GAAmBtb,GACnBvwF,OAAOyE,OAAO8vB,EAAS4vB,GAEvBx/C,KAAKqtG,mBAAmB99F,EAAOq8E,GAAMkY,OAAOl0E,EAAS4vB,EAE7D,CACH,mBAAAsuD,CAAoBL,EAAe7hB,EAAM4Y,GAC9BiJ,IAAkBvG,GAAmBtb,IACrC5rF,KAAKqtG,wBAAmBjwG,EAAWwuF,GAAMkY,OAAO2J,EAAejJ,EAEvE,CACH,SAAAwJ,CAAUp+E,EAASrgB,EAAOq8E,EAAMhgC,GACzBh8B,EAAQg8B,OAASA,EACjB,MAAM1pC,EAAUliB,KAAKq+F,SAAS9uF,EAAOq8C,GACrC5rD,KAAKqtG,mBAAmB99F,EAAOq8E,EAAMhgC,GAAQk4C,OAAOl0E,EAAS,CACzD1N,SAAU0pC,GAAU5rD,KAAKutG,iBAAiBrrF,IAAYA,GAE9D,CACA,gBAAA+rF,CAAiBr+E,EAASywD,EAAc9wE,GACpCvP,KAAKguG,UAAUp+E,EAASrgB,EAAO,UAAU,EAC7C,CACA,aAAA2+F,CAAct+E,EAASywD,EAAc9wE,GACjCvP,KAAKguG,UAAUp+E,EAASrgB,EAAO,UAAU,EAC7C,CACH,wBAAA4+F,GACO,MAAMv+E,EAAU5vB,KAAKsmG,YAAYoC,QAC7B94E,GACA5vB,KAAKguG,UAAUp+E,OAASxyB,EAAW,UAAU,EAErD,CACH,qBAAAgxG,GACO,MAAMx+E,EAAU5vB,KAAKsmG,YAAYoC,QAC7B94E,GACA5vB,KAAKguG,UAAUp+E,OAASxyB,EAAW,UAAU,EAErD,CACH,eAAAitG,CAAgBH,GACT,MAAM5jG,EAAOtG,KAAK0nG,MACZ92D,EAAW5wC,KAAKsmG,YAAYhgG,KAClC,IAAK,MAAOxH,EAAQ+nC,EAAMwnE,KAASruG,KAAKkoG,UACpCloG,KAAKlB,GAAQ+nC,EAAMwnE,GAEvBruG,KAAKkoG,UAAY,GACjB,MAAMoG,EAAU19D,EAAS/1C,OACnB0zG,EAAUjoG,EAAKzL,OACf2rB,EAAQlV,KAAKpV,IAAIqyG,EAASD,GAC5B9nF,GACAxmB,KAAK6D,MAAM,EAAG2iB,GAEd+nF,EAAUD,EACVtuG,KAAKwuG,gBAAgBF,EAASC,EAAUD,EAASpE,GAC1CqE,EAAUD,GACjBtuG,KAAKyuG,gBAAgBF,EAASD,EAAUC,EAEhD,CACH,eAAAC,CAAgBhxF,EAAOgJ,EAAO0jF,GAAmB,GAC1C,MAAM3kB,EAAOvlF,KAAKsmG,YACZhgG,EAAOi/E,EAAKj/E,KACZmX,EAAMD,EAAQgJ,EACpB,IAAI7rB,EACJ,MAAM+zG,EAAQn0G,IAEV,IADAA,EAAIM,QAAU2rB,EACV7rB,EAAIJ,EAAIM,OAAS,EAAGF,GAAK8iB,EAAK9iB,IAC9BJ,EAAII,GAAKJ,EAAII,EAAI6rB,EACrB,EAGJ,IADAkoF,EAAKpoG,GACD3L,EAAI6iB,EAAO7iB,EAAI8iB,IAAO9iB,EACtB2L,EAAK3L,GAAK,IAAIqF,KAAKooG,gBAEnBpoG,KAAK+4F,UACL2V,EAAKnpB,EAAKM,SAEd7lF,KAAK6D,MAAM2Z,EAAOgJ,GACd0jF,GACAlqG,KAAK2uG,eAAeroG,EAAMkX,EAAOgJ,EAAO,QAEhD,CACA,cAAAmoF,CAAe/+E,EAASpS,EAAOgJ,EAAOolE,GAAO,CAChD,eAAA6iB,CAAgBjxF,EAAOgJ,GAChB,MAAM++D,EAAOvlF,KAAKsmG,YAClB,GAAItmG,KAAK+4F,SAAU,CACf,MAAM3sE,EAAUm5D,EAAKM,QAAQh6D,OAAOrO,EAAOgJ,GACvC++D,EAAK+iB,UACLrB,GAAY1hB,EAAMn5D,EAE1B,CACAm5D,EAAKj/E,KAAKulB,OAAOrO,EAAOgJ,EAC5B,CACH,KAAAooF,CAAMnsG,GACC,GAAIzC,KAAK+4F,SACL/4F,KAAKkoG,UAAUlsG,KAAKyG,OACjB,CACH,MAAO3D,EAAQ+nC,EAAMwnE,GAAQ5rG,EAC7BzC,KAAKlB,GAAQ+nC,EAAMwnE,EACvB,CACAruG,KAAK8pF,MAAM+kB,aAAa7yG,KAAK,CACzBgE,KAAKuP,SACF9M,GAEX,CACA,WAAAqsG,GACI,MAAMtoF,EAAQ9mB,UAAU7E,OACxBmF,KAAK4uG,MAAM,CACP,kBACA5uG,KAAK2oG,aAAariG,KAAKzL,OAAS2rB,EAChCA,GAER,CACA,UAAAuoF,GACI/uG,KAAK4uG,MAAM,CACP,kBACA5uG,KAAKsmG,YAAYhgG,KAAKzL,OAAS,EAC/B,GAER,CACA,YAAAm0G,GACIhvG,KAAK4uG,MAAM,CACP,kBACA,EACA,GAER,CACA,aAAAK,CAAczxF,EAAOgJ,GACbA,GACAxmB,KAAK4uG,MAAM,CACP,kBACApxF,EACAgJ,IAGR,MAAM0oF,EAAWxvG,UAAU7E,OAAS,EAChCq0G,GACAlvG,KAAK4uG,MAAM,CACP,kBACApxF,EACA0xF,GAGZ,CACA,cAAAC,GACInvG,KAAK4uG,MAAM,CACP,kBACA,EACAlvG,UAAU7E,QAElB,EAcH,SAASu0G,GAAqB7pB,GAC3B,MAAM6G,EAAQ7G,EAAKK,OACbz3D,EAbV,SAA2Bi+D,EAAOtrF,GAC9B,IAAKsrF,EAAMijB,OAAOC,KAAM,CACpB,MAAMC,EAAenjB,EAAM+Z,wBAAwBrlG,GACnD,IAAIqtB,EAAS,GACb,IAAI,IAAIxzB,EAAI,EAAGwlF,EAAOovB,EAAa10G,OAAQF,EAAIwlF,EAAMxlF,IACjDwzB,EAASA,EAAOnzB,OAAOu0G,EAAa50G,GAAG0rG,WAAW4F,mBAAmB7f,IAEzEA,EAAMijB,OAAOC,KAAOzqB,GAAa12D,EAAOtB,MAAK,CAACxM,EAAGxM,IAAIwM,EAAIxM,IAC7D,CACA,OAAOu4E,EAAMijB,OAAOC,IACxB,CAGmBE,CAAkBpjB,EAAO7G,EAAKzkF,MAC7C,IACInG,EAAGwlF,EAAM31E,EAAMqS,EADf3gB,EAAMkwF,EAAMqjB,QAEhB,MAAMC,EAAmB,KACR,QAATllG,IAA4B,QAAVA,IAGlB42E,GAAQvkE,KACR3gB,EAAMoV,KAAKpV,IAAIA,EAAKoV,KAAK4pC,IAAI1wC,EAAOqS,IAAS3gB,IAEjD2gB,EAAOrS,EAAI,EAEf,IAAI7P,EAAI,EAAGwlF,EAAOhyD,EAAOtzB,OAAQF,EAAIwlF,IAAQxlF,EACzC6P,EAAO4hF,EAAMnG,iBAAiB93D,EAAOxzB,IACrC+0G,IAGJ,IADA7yF,OAAOzf,EACHzC,EAAI,EAAGwlF,EAAOiM,EAAMvC,MAAMhvF,OAAQF,EAAIwlF,IAAQxlF,EAC9C6P,EAAO4hF,EAAMujB,gBAAgBh1G,GAC7B+0G,IAEJ,OAAOxzG,CACX,CA0DA,SAAS0zG,GAAWC,EAAO90G,EAAMkrG,EAAQtrG,GAMrC,OALIwxB,EAAQ0jF,GAtBhB,SAAuBA,EAAO90G,EAAMkrG,EAAQtrG,GACxC,MAAM2mC,EAAa2kE,EAAOpiG,MAAMgsG,EAAM,GAAIl1G,GACpC4mC,EAAW0kE,EAAOpiG,MAAMgsG,EAAM,GAAIl1G,GAClCuB,EAAMoV,KAAKpV,IAAIolC,EAAYC,GAC3BplC,EAAMmV,KAAKnV,IAAImlC,EAAYC,GACjC,IAAIuuE,EAAW5zG,EACX6zG,EAAS5zG,EACTmV,KAAK4pC,IAAIh/C,GAAOoV,KAAK4pC,IAAI/+C,KACzB2zG,EAAW3zG,EACX4zG,EAAS7zG,GAEbnB,EAAKkrG,EAAOztC,MAAQu3C,EACpBh1G,EAAKi1G,QAAU,CACXF,WACAC,SACAvyF,MAAO8jB,EACP7jB,IAAK8jB,EACLrlC,MACAC,MAER,CAGQ8zG,CAAcJ,EAAO90G,EAAMkrG,EAAQtrG,GAEnCI,EAAKkrG,EAAOztC,MAAQytC,EAAOpiG,MAAMgsG,EAAOl1G,GAErCI,CACX,CACA,SAASm1G,GAAsB3qB,EAAMj/E,EAAMkX,EAAOgJ,GAC9C,MAAMo/D,EAASL,EAAKK,OACdqgB,EAAS1gB,EAAK0gB,OACd8E,EAASnlB,EAAOolB,YAChBC,EAAcrlB,IAAWqgB,EACzBrmE,EAAS,GACf,IAAIjlC,EAAGwlF,EAAMplF,EAAM80G,EACnB,IAAIl1G,EAAI6iB,EAAO2iE,EAAO3iE,EAAQgJ,EAAO7rB,EAAIwlF,IAAQxlF,EAC7Ck1G,EAAQvpG,EAAK3L,GACbI,EAAO,CAAC,EACRA,EAAK6qF,EAAOptB,MAAQyyC,GAAerlB,EAAO/hF,MAAMknG,EAAOpwG,GAAIA,GAC3DilC,EAAO5jC,KAAK4zG,GAAWC,EAAO90G,EAAMkrG,EAAQtrG,IAEhD,OAAOilC,CACX,CACA,SAASuwE,GAAWC,GAChB,OAAOA,QAA8BhzG,IAApBgzG,EAAON,eAA4C1yG,IAAlBgzG,EAAOL,MAC7D,CAiCA,SAASM,GAAiB7wD,EAAYt9B,EAASje,EAAOsL,GAClD,IAAI+gG,EAAOpuF,EAAQquF,cACnB,MAAMjmC,EAAM,CAAC,EACb,IAAKgmC,EAED,YADA9wD,EAAW+wD,cAAgBjmC,GAG/B,IAAa,IAATgmC,EAOA,YANA9wD,EAAW+wD,cAAgB,CACvBvtD,KAAK,EACLG,OAAO,EACPD,QAAQ,EACRD,MAAM,IAId,MAAM,MAAEzlC,EAAM,IAAEC,EAAI,QAAEuiE,EAAQ,IAAEh9B,EAAI,OAAEE,GA1C1C,SAAqB1D,GACjB,IAAIwgC,EAASxiE,EAAOC,EAAKulC,EAAKE,EAiB9B,OAhBI1D,EAAWgxD,YACXxwB,EAAUxgC,EAAWpuC,KAAOouC,EAAWtkD,EACvCsiB,EAAQ,OACRC,EAAM,UAENuiE,EAAUxgC,EAAWpuC,KAAOouC,EAAW+G,EACvC/oC,EAAQ,SACRC,EAAM,OAENuiE,GACAh9B,EAAM,MACNE,EAAS,UAETF,EAAM,QACNE,EAAS,OAEN,CACH1lC,QACAC,MACAuiE,UACAh9B,MACAE,SAER,CAiBsDutD,CAAYjxD,GACjD,WAAT8wD,GAAqBrsG,IACrBu7C,EAAWkxD,oBAAqB,GAC3BzsG,EAAM4iG,MAAQ,KAAOt3F,EACtB+gG,EAAOttD,GACC/+C,EAAM6iG,SAAW,KAAOv3F,EAChC+gG,EAAOptD,GAEPonB,EAAIqmC,GAAUztD,EAAQ1lC,EAAOC,EAAKuiE,KAAY,EAC9CswB,EAAOttD,IAGfsnB,EAAIqmC,GAAUL,EAAM9yF,EAAOC,EAAKuiE,KAAY,EAC5CxgC,EAAW+wD,cAAgBjmC,CAC/B,CACA,SAASqmC,GAAUL,EAAMjwF,EAAGxM,EAAGmsE,GAS/B,IAAcn/D,EAAMyjB,EAAIC,EAFpB,OANIy7C,GAQgBz7C,EAPK1wB,EACrBy8F,EAAOM,GADPN,GAOMzvF,EAPMyvF,MAOAhsE,EAPMjkB,GAQDkkB,EAAK1jB,IAAS0jB,EAAKD,EAAKzjB,EAPnBhN,EAAGwM,IAEzBiwF,EAAOM,GAASN,EAAMjwF,EAAGxM,GAEtBy8F,CACX,CAIA,SAASM,GAASjuG,EAAG6a,EAAOC,GACxB,MAAa,UAAN9a,EAAgB6a,EAAc,QAAN7a,EAAc8a,EAAM9a,CACvD,CACA,SAASkuG,GAAiBrxD,GAAY,cAAEsxD,GAAkBtzB,GACtDh+B,EAAWsxD,cAAkC,SAAlBA,EAAqC,IAAVtzB,EAAc,IAAO,EAAIszB,CACnF,CAuaA,MAAMC,WAA2BzJ,GAC7BC,UAAY,WACfA,gBAAkB,CACXY,oBAAoB,EACpBC,gBAAiB,MACjBnhD,UAAW,CACP+pD,eAAe,EACfC,cAAc,GAElB5jB,WAAY,CACRnE,QAAS,CACLpoF,KAAM,SACN0+C,WAAY,CACR,gBACA,WACA,cACA,cACA,aACA,IACA,IACA,SACA,cACA,aAIZ0xD,OAAQ,MACRjgB,SAAU,EACVkgB,cAAe,IACfjgB,OAAQ,OACRkgB,QAAS,EACT1lB,UAAW,KAEf6b,mBAAqB,CACjBxa,YAAcxtF,GAAgB,YAATA,EACrB0tF,WAAa1tF,GAAgB,YAATA,IAAuBA,EAAKytF,WAAW,gBAAkBztF,EAAKytF,WAAW,oBAEpGua,iBAAmB,CACZrK,YAAa,EACbh+F,QAAS,CACLmyG,OAAQ,CACJtG,OAAQ,CACJ,cAAAuG,CAAgBxnB,GACZ,MAAMxjF,EAAOwjF,EAAMxjF,KACnB,GAAIA,EAAKykG,OAAOlwG,QAAUyL,EAAK2kF,SAASpwF,OAAQ,CAC5C,MAAQkwG,QAAQ,WAAE/Z,EAAW,MAAEhzD,IAAc8rD,EAAMunB,OAAOnvF,QAC1D,OAAO5b,EAAKykG,OAAOhmG,KAAI,CAAC20B,EAAO/+B,KAC3B,MACMw8B,EADO2yD,EAAM2f,eAAe,GACfpD,WAAWhI,SAAS1jG,GACvC,MAAO,CACHskB,KAAMya,EACN+5D,UAAWt8D,EAAMiJ,gBACjBozD,YAAar8D,EAAM6L,YACnBuuE,UAAWvzE,EACX8vD,UAAW32D,EAAM26D,YACjBd,WAAYA,EACZxlD,QAASs+C,EAAM0nB,kBAAkB72G,GACjC4U,MAAO5U,EACV,GAET,CACA,MAAO,EACX,GAEJ,OAAAsxF,CAAStmF,EAAG8rG,EAAYJ,GACpBA,EAAOvnB,MAAM4nB,qBAAqBD,EAAWliG,OAC7C8hG,EAAOvnB,MAAMga,QACjB,KAIZ,WAAA14E,CAAY0+D,EAAOzJ,GACfsxB,MAAM7nB,EAAOzJ,GACbrgF,KAAK+nG,qBAAsB,EAC3B/nG,KAAK4xG,iBAAcx0G,EACnB4C,KAAK6xG,iBAAcz0G,EACnB4C,KAAK28F,aAAUv/F,EACf4C,KAAK48F,aAAUx/F,CACnB,CACA,UAAAirG,GAAc,CACjB,KAAAxkG,CAAM2Z,EAAOgJ,GACN,MAAMlgB,EAAOtG,KAAK2oG,aAAariG,KACzBi/E,EAAOvlF,KAAKsmG,YAClB,IAAsB,IAAlBtmG,KAAK+4F,SACLxT,EAAKM,QAAUv/E,MACZ,CACH,IAKI3L,EAAGwlF,EALH2xB,EAAUn3G,IAAK2L,EAAK3L,GACxB,GAAIk2B,EAASvqB,EAAKkX,IAAS,CACvB,MAAM,IAAE7e,EAAK,SAAaqB,KAAK+4F,SAC/B+Y,EAAUn3G,IAAKqmF,GAAiB16E,EAAK3L,GAAIgE,EAC7C,CAEA,IAAIhE,EAAI6iB,EAAO2iE,EAAO3iE,EAAQgJ,EAAO7rB,EAAIwlF,IAAQxlF,EAC7C4qF,EAAKM,QAAQlrF,GAAKm3G,EAAOn3G,EAEjC,CACJ,CACH,YAAAo3G,GACO,OAAOtvB,GAAUziF,KAAKkiB,QAAQ+uE,SAAW,GAC7C,CACH,iBAAA+gB,GACO,OAAOvvB,GAAUziF,KAAKkiB,QAAQivF,cAClC,CACH,mBAAAc,GACO,IAAI/1G,EAAMqlF,GACNplF,GAAOolF,GACX,IAAI,IAAI5mF,EAAI,EAAGA,EAAIqF,KAAK8pF,MAAMxjF,KAAK2kF,SAASpwF,SAAUF,EAClD,GAAIqF,KAAK8pF,MAAMooB,iBAAiBv3G,IAAMqF,KAAK8pF,MAAM2f,eAAe9uG,GAAGmG,OAASd,KAAKijE,MAAO,CACpF,MAAMojC,EAAarmG,KAAK8pF,MAAM2f,eAAe9uG,GAAG0rG,WAC1CpV,EAAWoV,EAAW0L,eACtBZ,EAAgB9K,EAAW2L,oBACjC91G,EAAMoV,KAAKpV,IAAIA,EAAK+0F,GACpB90F,EAAMmV,KAAKnV,IAAIA,EAAK80F,EAAWkgB,EACnC,CAEJ,MAAO,CACHlgB,SAAU/0F,EACVi1G,cAAeh1G,EAAMD,EAE7B,CACH,MAAA4nG,CAAOlY,GACA,MAAM9B,EAAQ9pF,KAAK8pF,OACb,UAAE0iB,GAAe1iB,EACjBvE,EAAOvlF,KAAKsmG,YACZ6L,EAAO5sB,EAAKj/E,KACZ8qG,EAAUpxG,KAAKoyG,oBAAsBpyG,KAAKqyG,aAAaF,GAAQnyG,KAAKkiB,QAAQkvF,QAC5EkB,EAAUhhG,KAAKnV,KAAKmV,KAAKpV,IAAIswG,EAAUnpD,MAAOmpD,EAAUppD,QAAUguD,GAAW,EAAG,GAChFF,EAAS5/F,KAAKpV,KD/yDNG,EC+yDuB2D,KAAKkiB,QAAQgvF,OD/yD7BtxB,EC+yDqC0yB,ED/yDR,kBAAVj2G,GAAsBA,EAAMwjF,SAAS,KAAOl+E,WAAWtF,GAAS,KAAOA,EAAQujF,GC+yDnD,GD/yDvD,IAACvjF,EAAOujF,ECgzDrB,MAAM2yB,EAAcvyG,KAAKwyG,eAAexyG,KAAKuP,QACvC,cAAE4hG,EAAc,SAAElgB,GAAcjxF,KAAKiyG,uBACrC,OAAEQ,EAAO,OAAEC,EAAO,QAAE/V,EAAQ,QAAEC,GAhK5C,SAA2B3L,EAAUkgB,EAAeD,GAChD,IAAIuB,EAAS,EACTC,EAAS,EACT/V,EAAU,EACVC,EAAU,EACd,GAAIuU,EAAgB5vB,GAAK,CACrB,MAAMoxB,EAAa1hB,EACb2hB,EAAWD,EAAaxB,EACxB0B,EAASvhG,KAAKw2E,IAAI6qB,GAClBG,EAASxhG,KAAKu1E,IAAI8rB,GAClBI,EAAOzhG,KAAKw2E,IAAI8qB,GAChBI,EAAO1hG,KAAKu1E,IAAI+rB,GAChBK,EAAU,CAAC7vB,EAAO/iE,EAAGxM,IAAI8vE,GAAcP,EAAOuvB,EAAYC,GAAU,GAAQ,EAAIthG,KAAKnV,IAAIkkB,EAAGA,EAAI6wF,EAAQr9F,EAAGA,EAAIq9F,GAC/GgC,EAAU,CAAC9vB,EAAO/iE,EAAGxM,IAAI8vE,GAAcP,EAAOuvB,EAAYC,GAAU,IAAS,EAAIthG,KAAKpV,IAAImkB,EAAGA,EAAI6wF,EAAQr9F,EAAGA,EAAIq9F,GAChHiC,EAAOF,EAAQ,EAAGJ,EAAQE,GAC1BK,EAAOH,EAAQrxB,GAASkxB,EAAQE,GAChCK,EAAOH,EAAQ5xB,GAAIuxB,EAAQE,GAC3BO,EAAOJ,EAAQ5xB,GAAKM,GAASkxB,EAAQE,GAC3CP,GAAUU,EAAOE,GAAQ,EACzBX,GAAUU,EAAOE,GAAQ,EACzB3W,IAAYwW,EAAOE,GAAQ,EAC3BzW,IAAYwW,EAAOE,GAAQ,CAC/B,CACA,MAAO,CACHb,SACAC,SACA/V,UACAC,UAER,CAmIyD2W,CAAkBtiB,EAAUkgB,EAAeD,GACtF5c,GAAYkY,EAAUnpD,MAAQ+tD,GAAWqB,EACzCrV,GAAaoP,EAAUppD,OAASguD,GAAWsB,EAC3Cc,EAAYliG,KAAKnV,IAAImV,KAAKpV,IAAIo4F,EAAU8I,GAAa,EAAG,GACxDyU,EAAclyB,EAAY3/E,KAAKkiB,QAAQgvE,OAAQsiB,GAE/CC,GAAgB5B,EADFvgG,KAAKnV,IAAI01G,EAAcX,EAAQ,IACAlxG,KAAK0zG,gCACxD1zG,KAAK28F,QAAUA,EAAUkV,EACzB7xG,KAAK48F,QAAUA,EAAUiV,EACzBtsB,EAAK3jB,MAAQ5hE,KAAK2zG,iBAClB3zG,KAAK6xG,YAAcA,EAAc4B,EAAezzG,KAAK4zG,qBAAqB5zG,KAAKuP,OAC/EvP,KAAK4xG,YAActgG,KAAKnV,IAAI6D,KAAK6xG,YAAc4B,EAAelB,EAAa,GAC3EvyG,KAAK2uG,eAAewD,EAAM,EAAGA,EAAKt3G,OAAQ+wF,EAC9C,CACH,cAAAioB,CAAel5G,EAAG0d,GACX,MAAM5R,EAAOzG,KAAKkiB,QACZqjE,EAAOvlF,KAAKsmG,YACZ6K,EAAgBnxG,KAAKgyG,oBAC3B,OAAI35F,GAAS5R,EAAKwgD,UAAU+pD,gBAAkBhxG,KAAK8pF,MAAM0nB,kBAAkB72G,IAA0B,OAApB4qF,EAAKM,QAAQlrF,IAAe4qF,EAAKj/E,KAAK3L,GAAG6wC,OAC/G,EAEJxrC,KAAK8zG,uBAAuBvuB,EAAKM,QAAQlrF,GAAKw2G,EAAgB5vB,GACzE,CACA,cAAAotB,CAAewD,EAAM30F,EAAOgJ,EAAOolE,GAC/B,MAAMvzE,EAAiB,UAATuzE,EACR9B,EAAQ9pF,KAAK8pF,MACb0iB,EAAY1iB,EAAM0iB,UAElBuH,EADOjqB,EAAM5nE,QACQ+kC,UACrB+sD,GAAWxH,EAAUvpD,KAAOupD,EAAUrpD,OAAS,EAC/C8wD,GAAWzH,EAAUxpD,IAAMwpD,EAAUtpD,QAAU,EAC/C+tD,EAAe54F,GAAS07F,EAAc9C,aACtCW,EAAcX,EAAe,EAAIjxG,KAAK4xG,YACtCC,EAAcZ,EAAe,EAAIjxG,KAAK6xG,aACtC,cAAEpE,EAAc,eAAED,GAAoBxtG,KAAK2tG,kBAAkBnwF,EAAOouE,GAC1E,IACIjxF,EADAg4G,EAAa3yG,KAAK+xG,eAEtB,IAAIp3G,EAAI,EAAGA,EAAI6iB,IAAS7iB,EACpBg4G,GAAc3yG,KAAK6zG,eAAel5G,EAAG0d,GAEzC,IAAI1d,EAAI6iB,EAAO7iB,EAAI6iB,EAAQgJ,IAAS7rB,EAAE,CAClC,MAAMw2G,EAAgBnxG,KAAK6zG,eAAel5G,EAAG0d,GACvCm5E,EAAM2gB,EAAKx3G,GACX6kD,EAAa,CACftkD,EAAG84G,EAAUh0G,KAAK28F,QAClBp2C,EAAG0tD,EAAUj0G,KAAK48F,QAClB+V,aACAC,SAAUD,EAAaxB,EACvBA,gBACAU,cACAD,eAEApE,IACAhuD,EAAWt9B,QAAUurF,GAAiBztG,KAAK0sG,0BAA0B/xG,EAAG62F,EAAI5lC,OAAS,SAAWggC,IAEpG+mB,GAAcxB,EACdnxG,KAAK+tG,cAAcvc,EAAK72F,EAAG6kD,EAAYosC,EAC3C,CACJ,CACA,cAAA+nB,GACI,MAAMpuB,EAAOvlF,KAAKsmG,YACZplG,EAAWqkF,EAAKj/E,KACtB,IACI3L,EADAinE,EAAQ,EAEZ,IAAIjnE,EAAI,EAAGA,EAAIuG,EAASrG,OAAQF,IAAI,CAChC,MAAM0B,EAAQkpF,EAAKM,QAAQlrF,GACb,OAAV0B,GAAmBqF,MAAMrF,KAAU2D,KAAK8pF,MAAM0nB,kBAAkB72G,IAAOuG,EAASvG,GAAG6wC,SACnFo2B,GAAStwD,KAAK4pC,IAAI7+C,GAE1B,CACA,OAAOulE,CACX,CACA,sBAAAkyC,CAAuBz3G,GACnB,MAAMulE,EAAQ5hE,KAAKsmG,YAAY1kC,MAC/B,OAAIA,EAAQ,IAAMlgE,MAAMrF,GACbklF,IAAOjwE,KAAK4pC,IAAI7+C,GAASulE,GAE7B,CACX,CACA,gBAAAuqC,CAAiB58F,GACb,MAAMg2E,EAAOvlF,KAAKsmG,YACZxc,EAAQ9pF,KAAK8pF,MACbihB,EAASjhB,EAAMxjF,KAAKykG,QAAU,GAC9B1uG,EAAQgtF,GAAa9D,EAAKM,QAAQt2E,GAAQu6E,EAAM5nE,QAAQhI,QAC9D,MAAO,CACHwf,MAAOqxE,EAAOx7F,IAAU,GACxBlT,QAER,CACA,iBAAA+1G,CAAkBD,GACd,IAAIh2G,EAAM,EACV,MAAM2tF,EAAQ9pF,KAAK8pF,MACnB,IAAInvF,EAAGwlF,EAAMoF,EAAM8gB,EAAYnkF,EAC/B,IAAKiwF,EACD,IAAIx3G,EAAI,EAAGwlF,EAAO2J,EAAMxjF,KAAK2kF,SAASpwF,OAAQF,EAAIwlF,IAAQxlF,EACtD,GAAImvF,EAAMooB,iBAAiBv3G,GAAI,CAC3B4qF,EAAOuE,EAAM2f,eAAe9uG,GAC5Bw3G,EAAO5sB,EAAKj/E,KACZ+/F,EAAa9gB,EAAK8gB,WAClB,KACJ,CAGR,IAAK8L,EACD,OAAO,EAEX,IAAIx3G,EAAI,EAAGwlF,EAAOgyB,EAAKt3G,OAAQF,EAAIwlF,IAAQxlF,EACvCunB,EAAUmkF,EAAWqG,0BAA0B/xG,GACnB,UAAxBunB,EAAQgyF,cACR/3G,EAAMmV,KAAKnV,IAAIA,EAAK+lB,EAAQ4vE,aAAe,EAAG5vE,EAAQiyF,kBAAoB,IAGlF,OAAOh4G,CACX,CACA,YAAAk2G,CAAaF,GACT,IAAIh2G,EAAM,EACV,IAAI,IAAIxB,EAAI,EAAGwlF,EAAOgyB,EAAKt3G,OAAQF,EAAIwlF,IAAQxlF,EAAE,CAC7C,MAAMunB,EAAUliB,KAAK0sG,0BAA0B/xG,GAC/CwB,EAAMmV,KAAKnV,IAAIA,EAAK+lB,EAAQ6qB,QAAU,EAAG7qB,EAAQkyF,aAAe,EACpE,CACA,OAAOj4G,CACX,CACH,oBAAAy3G,CAAqBvzB,GACd,IAAIg0B,EAAmB,EACvB,IAAI,IAAI15G,EAAI,EAAGA,EAAI0lF,IAAgB1lF,EAC3BqF,KAAK8pF,MAAMooB,iBAAiBv3G,KAC5B05G,GAAoBr0G,KAAKwyG,eAAe73G,IAGhD,OAAO05G,CACX,CACH,cAAA7B,CAAenyB,GACR,OAAO/uE,KAAKnV,IAAIujF,EAAe1/E,KAAK8pF,MAAMxjF,KAAK2kF,SAAS5K,GAAcjC,OAAQ,GAAI,EACtF,CACH,6BAAAs1B,GACO,OAAO1zG,KAAK4zG,qBAAqB5zG,KAAK8pF,MAAMxjF,KAAK2kF,SAASpwF,SAAW,CACzE,EA6GJ,MAAMy5G,WAA4BhN,GAC9BC,UAAY,YACfA,gBAAkB,CACXa,gBAAiB,MACjBnhD,UAAW,CACP+pD,eAAe,EACfC,cAAc,GAElB5jB,WAAY,CACRnE,QAAS,CACLpoF,KAAM,SACN0+C,WAAY,CACR,IACA,IACA,aACA,WACA,cACA,iBAIZksC,UAAW,IACXinB,WAAY,GAEnBpL,iBAAmB,CACZrK,YAAa,EACbh+F,QAAS,CACLmyG,OAAQ,CACJtG,OAAQ,CACJ,cAAAuG,CAAgBxnB,GACZ,MAAMxjF,EAAOwjF,EAAMxjF,KACnB,GAAIA,EAAKykG,OAAOlwG,QAAUyL,EAAK2kF,SAASpwF,OAAQ,CAC5C,MAAQkwG,QAAQ,WAAE/Z,EAAW,MAAEhzD,IAAc8rD,EAAMunB,OAAOnvF,QAC1D,OAAO5b,EAAKykG,OAAOhmG,KAAI,CAAC20B,EAAO/+B,KAC3B,MACMw8B,EADO2yD,EAAM2f,eAAe,GACfpD,WAAWhI,SAAS1jG,GACvC,MAAO,CACHskB,KAAMya,EACN+5D,UAAWt8D,EAAMiJ,gBACjBozD,YAAar8D,EAAM6L,YACnBuuE,UAAWvzE,EACX8vD,UAAW32D,EAAM26D,YACjBd,WAAYA,EACZxlD,QAASs+C,EAAM0nB,kBAAkB72G,GACjC4U,MAAO5U,EACV,GAET,CACA,MAAO,EACX,GAEJ,OAAAsxF,CAAStmF,EAAG8rG,EAAYJ,GACpBA,EAAOvnB,MAAM4nB,qBAAqBD,EAAWliG,OAC7C8hG,EAAOvnB,MAAMga,QACjB,IAGRzX,OAAQ,CACJpqD,EAAG,CACCnhC,KAAM,eACNyzG,WAAY,CACRn9E,SAAS,GAEbq2D,aAAa,EACbI,KAAM,CACF2mB,UAAU,GAEdC,YAAa,CACTr9E,SAAS,GAEbu7E,WAAY,KAIxB,WAAAvnF,CAAY0+D,EAAOzJ,GACfsxB,MAAM7nB,EAAOzJ,GACbrgF,KAAK4xG,iBAAcx0G,EACnB4C,KAAK6xG,iBAAcz0G,CACvB,CACA,gBAAA+uG,CAAiB58F,GACb,MAAMg2E,EAAOvlF,KAAKsmG,YACZxc,EAAQ9pF,KAAK8pF,MACbihB,EAASjhB,EAAMxjF,KAAKykG,QAAU,GAC9B1uG,EAAQgtF,GAAa9D,EAAKM,QAAQt2E,GAAO0yB,EAAG6nD,EAAM5nE,QAAQhI,QAChE,MAAO,CACHwf,MAAOqxE,EAAOx7F,IAAU,GACxBlT,QAER,CACA,eAAAuuG,CAAgBrlB,EAAMj/E,EAAMkX,EAAOgJ,GAC/B,OAAOsyE,GAA4Bn4F,KAAKX,KAAjC84F,CAAuCvT,EAAMj/E,EAAMkX,EAAOgJ,EACrE,CACA,MAAAs9E,CAAOlY,GACH,MAAMumB,EAAOnyG,KAAKsmG,YAAYhgG,KAC9BtG,KAAK00G,gBACL10G,KAAK2uG,eAAewD,EAAM,EAAGA,EAAKt3G,OAAQ+wF,EAC9C,CACH,SAAA6f,GACO,MAAMlmB,EAAOvlF,KAAKsmG,YACZnkB,EAAQ,CACVjmF,IAAKoH,OAAOo+E,kBACZvlF,IAAKmH,OAAOuoG,mBAahB,OAXAtmB,EAAKj/E,KAAK2qB,SAAQ,CAACrB,EAASrgB,KACxB,MAAMqwB,EAAS5/B,KAAKorG,UAAU77F,GAAO0yB,GAChCvgC,MAAMk+B,IAAW5/B,KAAK8pF,MAAM0nB,kBAAkBjiG,KAC3CqwB,EAASuiD,EAAMjmF,MACfimF,EAAMjmF,IAAM0jC,GAEZA,EAASuiD,EAAMhmF,MACfgmF,EAAMhmF,IAAMyjC,GAEpB,IAEGuiD,CACX,CACH,aAAAuyB,GACO,MAAM5qB,EAAQ9pF,KAAK8pF,MACb0iB,EAAY1iB,EAAM0iB,UAClB/lG,EAAOqjF,EAAM5nE,QACbyyF,EAAUrjG,KAAKpV,IAAIswG,EAAUrpD,MAAQqpD,EAAUvpD,KAAMupD,EAAUtpD,OAASspD,EAAUxpD,KAClF6uD,EAAcvgG,KAAKnV,IAAIw4G,EAAU,EAAG,GAEpClB,GAAgB5B,EADFvgG,KAAKnV,IAAIsK,EAAKmuG,iBAAmB/C,EAAc,IAAMprG,EAAKmuG,iBAAmB,EAAG,IACjD9qB,EAAM+qB,yBACzD70G,KAAK6xG,YAAcA,EAAc4B,EAAezzG,KAAKuP,MACrDvP,KAAK4xG,YAAc5xG,KAAK6xG,YAAc4B,CAC1C,CACA,cAAA9E,CAAewD,EAAM30F,EAAOgJ,EAAOolE,GAC/B,MAAMvzE,EAAiB,UAATuzE,EACR9B,EAAQ9pF,KAAK8pF,MAEbiqB,EADOjqB,EAAM5nE,QACQ+kC,UACrBmlC,EAAQpsF,KAAKsmG,YAAYkD,OACzBwK,EAAU5nB,EAAM0oB,QAChBb,EAAU7nB,EAAM2oB,QAChBC,EAAoB5oB,EAAM6oB,cAAc,GAAK,GAAM3zB,GACzD,IACI3mF,EADAyoF,EAAQ4xB,EAEZ,MAAME,EAAe,IAAMl1G,KAAKm1G,uBAChC,IAAIx6G,EAAI,EAAGA,EAAI6iB,IAAS7iB,EACpByoF,GAASpjF,KAAKo1G,cAAcz6G,EAAGixF,EAAMspB,GAEzC,IAAIv6G,EAAI6iB,EAAO7iB,EAAI6iB,EAAQgJ,EAAO7rB,IAAI,CAClC,MAAM62F,EAAM2gB,EAAKx3G,GACjB,IAAIg4G,EAAavvB,EACbwvB,EAAWxvB,EAAQpjF,KAAKo1G,cAAcz6G,EAAGixF,EAAMspB,GAC/CrD,EAAc/nB,EAAM0nB,kBAAkB72G,GAAKyxF,EAAMipB,8BAA8Br1G,KAAKorG,UAAUzwG,GAAGsnC,GAAK,EAC1GmhD,EAAQwvB,EACJv6F,IACI07F,EAAc9C,eACdY,EAAc,GAEdkC,EAAc/C,gBACd2B,EAAaC,EAAWoC,IAGhC,MAAMx1D,EAAa,CACftkD,EAAG84G,EACHztD,EAAG0tD,EACHrC,YAAa,EACbC,cACAc,aACAC,WACA1wF,QAASliB,KAAK0sG,0BAA0B/xG,EAAG62F,EAAI5lC,OAAS,SAAWggC,IAEvE5rF,KAAK+tG,cAAcvc,EAAK72F,EAAG6kD,EAAYosC,EAC3C,CACJ,CACA,oBAAAupB,GACI,MAAM5vB,EAAOvlF,KAAKsmG,YAClB,IAAI9/E,EAAQ,EAMZ,OALA++D,EAAKj/E,KAAK2qB,SAAQ,CAACrB,EAASrgB,MACnB7N,MAAM1B,KAAKorG,UAAU77F,GAAO0yB,IAAMjiC,KAAK8pF,MAAM0nB,kBAAkBjiG,IAChEiX,GACJ,IAEGA,CACX,CACH,aAAA4uF,CAAc7lG,EAAOq8E,EAAMspB,GACpB,OAAOl1G,KAAK8pF,MAAM0nB,kBAAkBjiG,GAASkzE,GAAUziF,KAAK0sG,0BAA0Bn9F,EAAOq8E,GAAMxI,OAAS8xB,GAAgB,CAChI,EAsNJ,IAAII,GAA2Bj6G,OAAO+xG,OAAO,CAC7CmI,UAAW,KACXC,cAzqCA,cAA4BlO,GACxBC,UAAY,MACfA,gBAAkB,CACXY,oBAAoB,EACpBC,gBAAiB,MACjBqN,mBAAoB,GACpBC,cAAe,GACfC,SAAS,EACTtoB,WAAY,CACRnE,QAAS,CACLpoF,KAAM,SACN0+C,WAAY,CACR,IACA,IACA,OACA,QACA,aAKnB+nD,iBAAmB,CACZlb,OAAQ,CACJupB,QAAS,CACL90G,KAAM,WACNisC,QAAQ,EACR8gD,KAAM,CACF9gD,QAAQ,IAGhB8oE,QAAS,CACL/0G,KAAM,SACN2sF,aAAa,KAI5B,kBAAAod,CAAmBtlB,EAAMj/E,EAAMkX,EAAOgJ,GAC/B,OAAO0pF,GAAsB3qB,EAAMj/E,EAAMkX,EAAOgJ,EACpD,CACH,cAAAmkF,CAAeplB,EAAMj/E,EAAMkX,EAAOgJ,GAC3B,OAAO0pF,GAAsB3qB,EAAMj/E,EAAMkX,EAAOgJ,EACpD,CACH,eAAAokF,CAAgBrlB,EAAMj/E,EAAMkX,EAAOgJ,GAC5B,MAAM,OAAEo/D,EAAO,OAAEqgB,GAAY1gB,GACvB,SAAE2lB,EAAU,IAAI,SAAEC,EAAU,KAASnrG,KAAK+4F,SAC1C+c,EAA2B,MAAhBlwB,EAAOptB,KAAe0yC,EAAWC,EAC5C4K,EAA2B,MAAhB9P,EAAOztC,KAAe0yC,EAAWC,EAC5CvrE,EAAS,GACf,IAAIjlC,EAAGwlF,EAAMplF,EAAMK,EACnB,IAAIT,EAAI6iB,EAAO2iE,EAAO3iE,EAAQgJ,EAAO7rB,EAAIwlF,IAAQxlF,EAC7CS,EAAMkL,EAAK3L,GACXI,EAAO,CAAC,EACRA,EAAK6qF,EAAOptB,MAAQotB,EAAO/hF,MAAMm9E,GAAiB5lF,EAAK06G,GAAWn7G,GAClEilC,EAAO5jC,KAAK4zG,GAAW5uB,GAAiB5lF,EAAK26G,GAAWh7G,EAAMkrG,EAAQtrG,IAE1E,OAAOilC,CACX,CACH,qBAAA0rE,CAAsBnpB,EAAOiK,EAAOxsD,EAAQ37B,GACrC0tG,MAAMrG,sBAAsBnpB,EAAOiK,EAAOxsD,EAAQ37B,GAClD,MAAMmsG,EAASxwE,EAAOowE,QAClBI,GAAUhkB,IAAUpsF,KAAKsmG,YAAYL,SACrC9jB,EAAMjmF,IAAMoV,KAAKpV,IAAIimF,EAAMjmF,IAAKk0G,EAAOl0G,KACvCimF,EAAMhmF,IAAMmV,KAAKnV,IAAIgmF,EAAMhmF,IAAKi0G,EAAOj0G,KAE/C,CACH,cAAA+vG,GACO,OAAO,CACX,CACH,gBAAAC,CAAiB58F,GACV,MAAMg2E,EAAOvlF,KAAKsmG,aACZ,OAAE1gB,EAAO,OAAEqgB,GAAY1gB,EACvB3lD,EAAS5/B,KAAKorG,UAAU77F,GACxB6gG,EAASxwE,EAAOowE,QAChB3zG,EAAQ8zG,GAAWC,GAAU,IAAMA,EAAO5yF,MAAQ,KAAO4yF,EAAO3yF,IAAM,IAAM,GAAKwoF,EAAOmG,iBAAiBxsE,EAAOqmE,EAAOztC,OAC7H,MAAO,CACH9+B,MAAO,GAAKksD,EAAOwmB,iBAAiBxsE,EAAOgmD,EAAOptB,OAClDn8D,QAER,CACA,UAAAysB,GACI9oB,KAAK+nG,qBAAsB,EAC3B4J,MAAM7oF,aACO9oB,KAAKsmG,YACbriG,MAAQjE,KAAK2oG,aAAa1kG,KACnC,CACA,MAAA6/F,CAAOlY,GACH,MAAMrG,EAAOvlF,KAAKsmG,YAClBtmG,KAAK2uG,eAAeppB,EAAKj/E,KAAM,EAAGi/E,EAAKj/E,KAAKzL,OAAQ+wF,EACxD,CACA,cAAA+iB,CAAeqH,EAAMx4F,EAAOgJ,EAAOolE,GAC/B,MAAMvzE,EAAiB,UAATuzE,GACR,MAAEr8E,EAAQ+2F,aAAa,OAAEL,IAAejmG,KACxCoR,EAAO60F,EAAOgQ,eACdzF,EAAavK,EAAOiQ,eACpBC,EAAQn2G,KAAKo2G,aACb,cAAE3I,EAAc,eAAED,GAAoBxtG,KAAK2tG,kBAAkBnwF,EAAOouE,GAC1E,IAAI,IAAIjxF,EAAI6iB,EAAO7iB,EAAI6iB,EAAQgJ,EAAO7rB,IAAI,CACtC,MAAMilC,EAAS5/B,KAAKorG,UAAUzwG,GACxB07G,EAAUh+F,GAASknE,EAAc3/C,EAAOqmE,EAAOztC,OAAS,CAC1DpnD,OACA6gB,KAAM7gB,GACNpR,KAAKs2G,yBAAyB37G,GAC5B47G,EAAUv2G,KAAKw2G,yBAAyB77G,EAAGw7G,GAC3ClyG,GAAS27B,EAAO2mE,SAAW,CAAC,GAAGN,EAAOztC,MACtChZ,EAAa,CACfgxD,aACAp/F,KAAMilG,EAAQjlG,KACds/F,oBAAqBzsG,GAASksG,GAAWvwE,EAAOowE,UAAYzgG,IAAUtL,EAAM4iG,MAAQt3F,IAAUtL,EAAM6iG,QACpG5rG,EAAGs1G,EAAa6F,EAAQpkF,KAAOskF,EAAQE,OACvClwD,EAAGiqD,EAAa+F,EAAQE,OAASJ,EAAQpkF,KACzCmxB,OAAQotD,EAAa+F,EAAQhmG,KAAOe,KAAK4pC,IAAIm7D,EAAQ9lG,MACrD8yC,MAAOmtD,EAAal/F,KAAK4pC,IAAIm7D,EAAQ9lG,MAAQgmG,EAAQhmG,MAErDi9F,IACAhuD,EAAWt9B,QAAUurF,GAAiBztG,KAAK0sG,0BAA0B/xG,EAAGq7G,EAAKr7G,GAAGixD,OAAS,SAAWggC,IAExG,MAAM1pE,EAAUs9B,EAAWt9B,SAAW8zF,EAAKr7G,GAAGunB,QAC9CmuF,GAAiB7wD,EAAYt9B,EAASje,EAAOsL,GAC7CshG,GAAiBrxD,EAAYt9B,EAASi0F,EAAM34B,OAC5Cx9E,KAAK+tG,cAAciI,EAAKr7G,GAAIA,EAAG6kD,EAAYosC,EAC/C,CACJ,CACH,UAAA8qB,CAAWrkF,EAAMs6E,GACV,MAAM,OAAE/mB,GAAY5lF,KAAKsmG,YACnBnB,EAAWvf,EAAOugB,wBAAwBnmG,KAAKijE,OAAOp+D,QAAQ0gF,GAAOA,EAAK8gB,WAAWnkF,QAAQyzF,UAC7FjQ,EAAU9f,EAAO1jE,QAAQwjF,QACzBE,EAAS,GACT+Q,EAAYpxB,IACd,MAAM3lD,EAAS2lD,EAAK8gB,WAAW+E,UAAUuB,GACnCjyG,EAAMklC,GAAUA,EAAO2lD,EAAK0gB,OAAOztC,MACzC,GAAI+mB,EAAc7kF,IAAQgH,MAAMhH,GAC5B,OAAO,CACX,EAEJ,IAAK,MAAM6qF,KAAQ4f,EACf,SAAkB/nG,IAAduvG,IAA2BgK,EAASpxB,QAGxB,IAAZmgB,IAAqD,IAAhCE,EAAOphG,QAAQ+gF,EAAKthF,aAA6B7G,IAAZsoG,QAAwCtoG,IAAfmoF,EAAKthF,QACxF2hG,EAAO5pG,KAAKupF,EAAKthF,OAEjBshF,EAAKh2E,QAAU8iB,GACf,MAMR,OAHKuzE,EAAO/qG,QACR+qG,EAAO5pG,UAAKoB,GAETwoG,CACX,CACH,cAAAgR,CAAernG,GACR,OAAOvP,KAAK02G,gBAAWt5G,EAAWmS,GAAO1U,MAC7C,CACH,cAAAg8G,CAAex2B,EAAc9gF,EAAMotG,GAC5B,MAAM/G,EAAS5lG,KAAK02G,WAAWr2B,EAAcssB,GACvCp9F,OAAiBnS,IAATmC,EAAqBqmG,EAAOphG,QAAQjF,IAAS,EAC3D,OAAkB,IAAXgQ,EAAeq2F,EAAO/qG,OAAS,EAAI0U,CAC9C,CACH,SAAA6mG,GACO,MAAM3vG,EAAOzG,KAAKkiB,QACZqjE,EAAOvlF,KAAKsmG,YACZ1gB,EAASL,EAAKK,OACdkxB,EAAS,GACf,IAAIn8G,EAAGwlF,EACP,IAAIxlF,EAAI,EAAGwlF,EAAOoF,EAAKj/E,KAAKzL,OAAQF,EAAIwlF,IAAQxlF,EAC5Cm8G,EAAO96G,KAAK4pF,EAAOK,iBAAiBjmF,KAAKorG,UAAUzwG,GAAGirF,EAAOptB,MAAO79D,IAExE,MAAMo8G,EAAetwG,EAAKswG,aAE1B,MAAO,CACH76G,IAFQ66G,GAAgB3H,GAAqB7pB,GAG7CuxB,SACAt5F,MAAOooE,EAAOoxB,YACdv5F,IAAKmoE,EAAOqxB,UACZC,WAAYl3G,KAAK42G,iBACjBxqB,MAAOxG,EACP+vB,QAASlvG,EAAKkvG,QACdn4B,MAAOu5B,EAAe,EAAItwG,EAAKgvG,mBAAqBhvG,EAAKivG,cAEjE,CACH,wBAAAY,CAAyB/mG,GAClB,MAAQ+2F,aAAa,OAAEL,EAAO,SAAEqC,EAAW/4F,MAAO8wE,GAAkBn+D,SAAW9Q,KAAM+lG,EAAU,aAAEC,IAAqBp3G,KAChHq3G,EAAaF,GAAa,EAC1Bv3E,EAAS5/B,KAAKorG,UAAU77F,GACxB6gG,EAASxwE,EAAOowE,QAChBsH,EAAWnH,GAAWC,GAC5B,IAGIn+E,EAAM1hB,EAHNlU,EAAQujC,EAAOqmE,EAAOztC,MACtBh7C,EAAQ,EACR3iB,EAASytG,EAAWtoG,KAAKqlG,WAAWY,EAAQrmE,EAAQ0oE,GAAYjsG,EAEhExB,IAAWwB,IACXmhB,EAAQ3iB,EAASwB,EACjBxB,EAASwB,GAETi7G,IACAj7G,EAAQ+zG,EAAON,SACfj1G,EAASu1G,EAAOL,OAASK,EAAON,SAClB,IAAVzzG,GAAe25C,GAAK35C,KAAW25C,GAAKo6D,EAAOL,UAC3CvyF,EAAQ,GAEZA,GAASnhB,GAEb,MAAMilC,EAAci+C,EAAc43B,IAAeG,EAAuB95F,EAAZ25F,EAC5D,IAAI/lG,EAAO60F,EAAOhgB,iBAAiB3kD,GAOnC,GALIrP,EADAjyB,KAAK8pF,MAAM0nB,kBAAkBjiG,GACtB02F,EAAOhgB,iBAAiBzoE,EAAQ3iB,GAEhCuW,EAEXb,EAAO0hB,EAAO7gB,EACVE,KAAK4pC,IAAI3qC,GAAQ6mG,EAAc,CAC/B7mG,EApSZ,SAAiBA,EAAM01F,EAAQoR,GAC3B,OAAa,IAAT9mG,EACOylC,GAAKzlC,IAER01F,EAAOiQ,eAAiB,GAAK,IAAMjQ,EAAO/pG,KAAOm7G,EAAa,GAAK,EAC/E,CA+RmBE,CAAQhnG,EAAM01F,EAAQoR,GAAcD,EACvC/6G,IAAUg7G,IACVjmG,GAAQb,EAAO,GAEnB,MAAMinG,EAAavR,EAAOwR,mBAAmB,GACvCC,EAAWzR,EAAOwR,mBAAmB,GACrCv7G,EAAMoV,KAAKpV,IAAIs7G,EAAYE,GAC3Bv7G,EAAMmV,KAAKnV,IAAIq7G,EAAYE,GACjCtmG,EAAOE,KAAKnV,IAAImV,KAAKpV,IAAIkV,EAAMjV,GAAMD,GACrC+1B,EAAO7gB,EAAOb,EACV+3F,IAAagP,IACb13E,EAAO2mE,QAAQN,EAAOztC,MAAMuuC,cAAc1mB,GAAgB4lB,EAAO0R,iBAAiB1lF,GAAQg0E,EAAO0R,iBAAiBvmG,GAE1H,CACA,GAAIA,IAAS60F,EAAOhgB,iBAAiBoxB,GAAa,CAC9C,MAAMO,EAAW5hE,GAAKzlC,GAAQ01F,EAAO4R,qBAAqBR,GAAc,EACxEjmG,GAAQwmG,EACRrnG,GAAQqnG,CACZ,CACA,MAAO,CACHrnG,OACAa,OACA6gB,OACAwkF,OAAQxkF,EAAO1hB,EAAO,EAE9B,CACH,wBAAAimG,CAAyBjnG,EAAO4mG,GACzB,MAAM/pB,EAAQ+pB,EAAM/pB,MACdlqE,EAAUliB,KAAKkiB,QACfy0F,EAAWz0F,EAAQy0F,SACnBmB,EAAkBp4B,EAAex9D,EAAQ41F,gBAAiB17G,KAChE,IAAIq6G,EAAQlmG,EACZ,GAAI4lG,EAAMR,QAAS,CACf,MAAMuB,EAAaP,EAAW32G,KAAK42G,eAAernG,GAAS4mG,EAAMe,WAC3D/0B,EAAiC,SAAzBjgE,EAAQ60F,aAzYjC,SAAmCxnG,EAAO4mG,EAAOj0F,EAASg1F,GACvD,MAAMJ,EAASX,EAAMW,OACftsG,EAAOssG,EAAOvnG,GACpB,IAAIsN,EAAOtN,EAAQ,EAAIunG,EAAOvnG,EAAQ,GAAK,KACvCC,EAAOD,EAAQunG,EAAOj8G,OAAS,EAAIi8G,EAAOvnG,EAAQ,GAAK,KAC3D,MAAMwoG,EAAU71F,EAAQuzF,mBACX,OAAT54F,IACAA,EAAOrS,GAAiB,OAATgF,EAAgB2mG,EAAM14F,IAAM04F,EAAM34F,MAAQhO,EAAOhF,IAEvD,OAATgF,IACAA,EAAOhF,EAAOA,EAAOqS,GAEzB,MAAMW,EAAQhT,GAAQA,EAAO8G,KAAKpV,IAAI2gB,EAAMrN,IAAS,EAAIuoG,EAEzD,MAAO,CACHC,MAFS1mG,KAAK4pC,IAAI1rC,EAAOqN,GAAQ,EAAIk7F,EAEvBb,EACd15B,MAAOt7D,EAAQwzF,cACfl4F,QAER,CAsX4Dy6F,CAA0B1oG,EAAO4mG,EAAOj0F,EAASg1F,GAzZ5G,SAAkC3nG,EAAO4mG,EAAOj0F,EAASg1F,GACtD,MAAMgB,EAAYh2F,EAAQ60F,aAC1B,IAAIxmG,EAAMitE,EAQV,OAPI+B,EAAc24B,IACd3nG,EAAO4lG,EAAMj6G,IAAMgmB,EAAQuzF,mBAC3Bj4B,EAAQt7D,EAAQwzF,gBAEhBnlG,EAAO2nG,EAAYhB,EACnB15B,EAAQ,GAEL,CACHw6B,MAAOznG,EAAO2mG,EACd15B,QACAhgE,MAAO24F,EAAMW,OAAOvnG,GAASgB,EAAO,EAE5C,CA0Y2H4nG,CAAyB5oG,EAAO4mG,EAAOj0F,EAASg1F,GACzJkB,EAAap4G,KAAK62G,eAAe72G,KAAKuP,MAAOvP,KAAKsmG,YAAYriG,MAAO0yG,EAAWpnG,OAAQnS,GAC9Fq5G,EAASt0B,EAAM3kE,MAAQ2kE,EAAM61B,MAAQI,EAAaj2B,EAAM61B,MAAQ,EAChEznG,EAAOe,KAAKpV,IAAI47G,EAAiB31B,EAAM61B,MAAQ71B,EAAM3E,MACzD,MACIi5B,EAASrqB,EAAMnG,iBAAiBjmF,KAAKorG,UAAU77F,GAAO68E,EAAM5zB,MAAOjpD,GACnEgB,EAAOe,KAAKpV,IAAI47G,EAAiB3B,EAAMj6G,IAAMi6G,EAAM34B,OAEvD,MAAO,CACHpsE,KAAMqlG,EAASlmG,EAAO,EACtB0hB,KAAMwkF,EAASlmG,EAAO,EACtBkmG,SACAlmG,OAER,CACA,IAAA+xF,GACI,MAAM/c,EAAOvlF,KAAKsmG,YACZL,EAAS1gB,EAAK0gB,OACdoS,EAAQ9yB,EAAKj/E,KACb65E,EAAOk4B,EAAMx9G,OACnB,IAAIF,EAAI,EACR,KAAMA,EAAIwlF,IAAQxlF,EACyB,OAAnCqF,KAAKorG,UAAUzwG,GAAGsrG,EAAOztC,OACzB6/C,EAAM19G,GAAG2nG,KAAKtiG,KAAKmuF,KAG/B,GA25BJmqB,iBAx5BA,cAA+BhR,GAC3BC,UAAY,SACfA,gBAAkB,CACXY,oBAAoB,EACpBC,gBAAiB,QACjB/a,WAAY,CACRnE,QAAS,CACLpoF,KAAM,SACN0+C,WAAY,CACR,IACA,IACA,cACA,aAKnB+nD,iBAAmB,CACZlb,OAAQ,CACJnxF,EAAG,CACC4F,KAAM,UAEVylD,EAAG,CACCzlD,KAAM,YAIlB,UAAAgoB,GACI9oB,KAAK+nG,qBAAsB,EAC3B4J,MAAM7oF,YACV,CACH,kBAAA+hF,CAAmBtlB,EAAMj/E,EAAMkX,EAAOgJ,GAC/B,MAAMoZ,EAAS+xE,MAAM9G,mBAAmBtlB,EAAMj/E,EAAMkX,EAAOgJ,GAC3D,IAAI,IAAI7rB,EAAI,EAAGA,EAAIilC,EAAO/kC,OAAQF,IAC9BilC,EAAOjlC,GAAGq1G,QAAUhwG,KAAK0sG,0BAA0B/xG,EAAI6iB,GAAO0zE,OAElE,OAAOtxD,CACX,CACH,cAAA+qE,CAAeplB,EAAMj/E,EAAMkX,EAAOgJ,GAC3B,MAAMoZ,EAAS+xE,MAAMhH,eAAeplB,EAAMj/E,EAAMkX,EAAOgJ,GACvD,IAAI,IAAI7rB,EAAI,EAAGA,EAAIilC,EAAO/kC,OAAQF,IAAI,CAClC,MAAMI,EAAOuL,EAAKkX,EAAQ7iB,GAC1BilC,EAAOjlC,GAAGq1G,QAAUtwB,EAAe3kF,EAAK,GAAIiF,KAAK0sG,0BAA0B/xG,EAAI6iB,GAAO0zE,OAC1F,CACA,OAAOtxD,CACX,CACH,eAAAgrE,CAAgBrlB,EAAMj/E,EAAMkX,EAAOgJ,GAC5B,MAAMoZ,EAAS+xE,MAAM/G,gBAAgBrlB,EAAMj/E,EAAMkX,EAAOgJ,GACxD,IAAI,IAAI7rB,EAAI,EAAGA,EAAIilC,EAAO/kC,OAAQF,IAAI,CAClC,MAAMI,EAAOuL,EAAKkX,EAAQ7iB,GAC1BilC,EAAOjlC,GAAGq1G,QAAUtwB,EAAe3kF,GAAQA,EAAKknC,IAAMlnC,EAAKknC,EAAGjiC,KAAK0sG,0BAA0B/xG,EAAI6iB,GAAO0zE,OAC5G,CACA,OAAOtxD,CACX,CACH,cAAAssE,GACO,MAAM5lG,EAAOtG,KAAKsmG,YAAYhgG,KAC9B,IAAInK,EAAM,EACV,IAAI,IAAIxB,EAAI2L,EAAKzL,OAAS,EAAGF,GAAK,IAAKA,EACnCwB,EAAMmV,KAAKnV,IAAIA,EAAKmK,EAAK3L,GAAG4V,KAAKvQ,KAAK0sG,0BAA0B/xG,IAAM,GAE1E,OAAOwB,EAAM,GAAKA,CACtB,CACH,gBAAAgwG,CAAiB58F,GACV,MAAMg2E,EAAOvlF,KAAKsmG,YACZyE,EAAS/qG,KAAK8pF,MAAMxjF,KAAKykG,QAAU,IACnC,OAAE5kB,EAAO,OAAEC,GAAYb,EACvB3lD,EAAS5/B,KAAKorG,UAAU77F,GACxBrU,EAAIirF,EAAOimB,iBAAiBxsE,EAAO1kC,GACnCqrD,EAAI6/B,EAAOgmB,iBAAiBxsE,EAAO2mB,GACnCtkB,EAAIrC,EAAOowE,QACjB,MAAO,CACHt2E,MAAOqxE,EAAOx7F,IAAU,GACxBlT,MAAO,IAAMnB,EAAI,KAAOqrD,GAAKtkB,EAAI,KAAOA,EAAI,IAAM,IAE1D,CACA,MAAA6hE,CAAOlY,GACH,MAAMpG,EAASxlF,KAAKsmG,YAAYhgG,KAChCtG,KAAK2uG,eAAenpB,EAAQ,EAAGA,EAAO3qF,OAAQ+wF,EAClD,CACA,cAAA+iB,CAAenpB,EAAQhoE,EAAOgJ,EAAOolE,GACjC,MAAMvzE,EAAiB,UAATuzE,GACR,OAAEhG,EAAO,OAAEqgB,GAAYjmG,KAAKsmG,aAC5B,cAAEmH,EAAc,eAAED,GAAoBxtG,KAAK2tG,kBAAkBnwF,EAAOouE,GACpE4a,EAAQ5gB,EAAOptB,KACfiuC,EAAQR,EAAOztC,KACrB,IAAI,IAAI79D,EAAI6iB,EAAO7iB,EAAI6iB,EAAQgJ,EAAO7rB,IAAI,CACtC,MAAMs3F,EAAQzM,EAAO7qF,GACfilC,GAAUvnB,GAASrY,KAAKorG,UAAUzwG,GAClC6kD,EAAa,CAAC,EACdo7C,EAASp7C,EAAWgnD,GAASnuF,EAAQutE,EAAO6xB,mBAAmB,IAAO7xB,EAAOK,iBAAiBrmD,EAAO4mE,IACrG3L,EAASr7C,EAAWinD,GAASpuF,EAAQ4tF,EAAOgQ,eAAiBhQ,EAAOhgB,iBAAiBrmD,EAAO6mE,IAClGjnD,EAAW05C,KAAOx3F,MAAMk5F,IAAWl5F,MAAMm5F,GACrC2S,IACAhuD,EAAWt9B,QAAUurF,GAAiBztG,KAAK0sG,0BAA0B/xG,EAAGs3F,EAAMrmC,OAAS,SAAWggC,GAC9FvzE,IACAmnC,EAAWt9B,QAAQgvE,OAAS,IAGpClxF,KAAK+tG,cAAc9b,EAAOt3F,EAAG6kD,EAAYosC,EAC7C,CACJ,CACH,yBAAA8gB,CAA0Bn9F,EAAOq8E,GAC1B,MAAMhsD,EAAS5/B,KAAKorG,UAAU77F,GAC9B,IAAI4e,EAASwjF,MAAMjF,0BAA0Bn9F,EAAOq8E,GAChDz9D,EAAOs2E,UACPt2E,EAAS9yB,OAAOyE,OAAO,CAAC,EAAGquB,EAAQ,CAC/Bs2E,SAAS,KAGjB,MAAMvT,EAAS/iE,EAAO+iE,OAKtB,MAJa,WAATtF,IACAz9D,EAAO+iE,OAAS,GAEpB/iE,EAAO+iE,QAAUxR,EAAe9/C,GAAUA,EAAOowE,QAAS9e,GACnD/iE,CACX,GAsyBJ4iF,mBAAoBA,GACpBwH,eAzfA,cAA6BjR,GACzBC,UAAY,OACfA,gBAAkB,CACXY,mBAAoB,OACpBC,gBAAiB,QACjB9b,UAAU,EACV6O,UAAU,GAEjBoM,iBAAmB,CACZlb,OAAQ,CACJupB,QAAS,CACL90G,KAAM,YAEV+0G,QAAS,CACL/0G,KAAM,YAIlB,UAAAgoB,GACI9oB,KAAK+nG,qBAAsB,EAC3B/nG,KAAKgoG,oBAAqB,EAC1B2J,MAAM7oF,YACV,CACA,MAAAg7E,CAAOlY,GACH,MAAMrG,EAAOvlF,KAAKsmG,aACVoC,QAAS5jG,EAAOwB,KAAMk/E,EAAS,GAAG,SAAEgzB,GAAcjzB,EACpDE,EAAqBzlF,KAAK8pF,MAAM4jB,oBACtC,IAAI,MAAElwF,EAAM,MAAEgJ,GAAW8+D,GAAiCC,EAAMC,EAAQC,GACxEzlF,KAAK6nG,WAAarqF,EAClBxd,KAAK8nG,WAAathF,EACd0/D,GAAoBX,KACpB/nE,EAAQ,EACRgJ,EAAQg/D,EAAO3qF,QAEnBiK,EAAK27F,OAASzgG,KAAK8pF,MACnBhlF,EAAK87F,cAAgB5gG,KAAKuP,MAC1BzK,EAAK2zG,aAAeD,EAASC,WAC7B3zG,EAAK0gF,OAASA,EACd,MAAMtjE,EAAUliB,KAAKysG,6BAA6B7gB,GAC7C5rF,KAAKkiB,QAAQoqE,WACdpqE,EAAQ4vE,YAAc,GAE1B5vE,EAAQ4mD,QAAU9oE,KAAKkiB,QAAQ4mD,QAC/B9oE,KAAK+tG,cAAcjpG,OAAM1H,EAAW,CAChCurD,UAAW88B,EACXvjE,WACD0pE,GACH5rF,KAAK2uG,eAAenpB,EAAQhoE,EAAOgJ,EAAOolE,EAC9C,CACA,cAAA+iB,CAAenpB,EAAQhoE,EAAOgJ,EAAOolE,GACjC,MAAMvzE,EAAiB,UAATuzE,GACR,OAAEhG,EAAO,OAAEqgB,EAAO,SAAEqC,EAAS,SAAEkQ,GAAcx4G,KAAKsmG,aAClD,cAAEmH,EAAc,eAAED,GAAoBxtG,KAAK2tG,kBAAkBnwF,EAAOouE,GACpE4a,EAAQ5gB,EAAOptB,KACfiuC,EAAQR,EAAOztC,MACf,SAAE2iC,EAAS,QAAEryB,GAAa9oE,KAAKkiB,QAC/Bw2F,EAAen2B,GAAS4Y,GAAYA,EAAW73F,OAAOo+E,kBACtDi3B,EAAe34G,KAAK8pF,MAAM4jB,qBAAuBr1F,GAAkB,SAATuzE,EAC1DnuE,EAAMD,EAAQgJ,EACdoyF,EAAcpzB,EAAO3qF,OAC3B,IAAIg+G,EAAar7F,EAAQ,GAAKxd,KAAKorG,UAAU5tF,EAAQ,GACrD,IAAI,IAAI7iB,EAAI,EAAGA,EAAIi+G,IAAej+G,EAAE,CAChC,MAAMs3F,EAAQzM,EAAO7qF,GACf6kD,EAAam5D,EAAe1mB,EAAQ,CAAC,EAC3C,GAAIt3F,EAAI6iB,GAAS7iB,GAAK8iB,EAAK,CACvB+hC,EAAW05C,MAAO,EAClB,QACJ,CACA,MAAMt5D,EAAS5/B,KAAKorG,UAAUzwG,GACxBm+G,EAAWv5B,EAAc3/C,EAAO6mE,IAChC7L,EAASp7C,EAAWgnD,GAAS5gB,EAAOK,iBAAiBrmD,EAAO4mE,GAAQ7rG,GACpEkgG,EAASr7C,EAAWinD,GAASpuF,GAASygG,EAAW7S,EAAOgQ,eAAiBhQ,EAAOhgB,iBAAiBqiB,EAAWtoG,KAAKqlG,WAAWY,EAAQrmE,EAAQ0oE,GAAY1oE,EAAO6mE,GAAQ9rG,GAC7K6kD,EAAW05C,KAAOx3F,MAAMk5F,IAAWl5F,MAAMm5F,IAAWie,EACpDt5D,EAAW1nB,KAAOn9B,EAAI,GAAK2W,KAAK4pC,IAAItb,EAAO4mE,GAASqS,EAAWrS,IAAUkS,EACrE5vC,IACAtpB,EAAW5f,OAASA,EACpB4f,EAAWotD,IAAM4L,EAASlyG,KAAK3L,IAE/B6yG,IACAhuD,EAAWt9B,QAAUurF,GAAiBztG,KAAK0sG,0BAA0B/xG,EAAGs3F,EAAMrmC,OAAS,SAAWggC,IAEjG+sB,GACD34G,KAAK+tG,cAAc9b,EAAOt3F,EAAG6kD,EAAYosC,GAE7CitB,EAAaj5E,CACjB,CACJ,CACH,cAAAssE,GACO,MAAM3mB,EAAOvlF,KAAKsmG,YACZoC,EAAUnjB,EAAKmjB,QACfra,EAASqa,EAAQxmF,SAAWwmF,EAAQxmF,QAAQ4vE,aAAe,EAC3DxrF,EAAOi/E,EAAKj/E,MAAQ,GAC1B,IAAKA,EAAKzL,OACN,OAAOwzF,EAEX,MAAMgL,EAAa/yF,EAAK,GAAGiK,KAAKvQ,KAAK0sG,0BAA0B,IACzDqM,EAAYzyG,EAAKA,EAAKzL,OAAS,GAAG0V,KAAKvQ,KAAK0sG,0BAA0BpmG,EAAKzL,OAAS,IAC1F,OAAOyW,KAAKnV,IAAIkyF,EAAQgL,EAAY0f,GAAa,CACrD,CACA,IAAAzW,GACI,MAAM/c,EAAOvlF,KAAKsmG,YAClB/gB,EAAKmjB,QAAQsQ,oBAAoBh5G,KAAK8pF,MAAM0iB,UAAWjnB,EAAKK,OAAOptB,MACnEm5C,MAAMrP,MACV,GAmZJ2W,cAzNA,cAA4BlI,GACxBxJ,UAAY,MACfA,gBAAkB,CACX2J,OAAQ,EACRjgB,SAAU,EACVkgB,cAAe,IACfjgB,OAAQ,SAoNhBojB,oBAAqBA,GACrB4E,gBAjNA,cAA8B5R,GAC1BC,UAAY,QACfA,gBAAkB,CACXY,mBAAoB,OACpBC,gBAAiB,QACjB1c,UAAW,IACXY,UAAU,EACV17C,SAAU,CACN9rC,KAAM,CACF+sF,KAAM,WAIrB0V,iBAAmB,CACZrK,YAAa,EACb7Q,OAAQ,CACJpqD,EAAG,CACCnhC,KAAM,kBAIrB,gBAAAqrG,CAAiB58F,GACV,MAAM02F,EAASjmG,KAAKsmG,YAAYL,OAC1BrmE,EAAS5/B,KAAKorG,UAAU77F,GAC9B,MAAO,CACHmqB,MAAOusE,EAAO+E,YAAYz7F,GAC1BlT,MAAO,GAAK4pG,EAAOmG,iBAAiBxsE,EAAOqmE,EAAOztC,OAE1D,CACA,eAAAoyC,CAAgBrlB,EAAMj/E,EAAMkX,EAAOgJ,GAC/B,OAAOsyE,GAA4Bn4F,KAAKX,KAAjC84F,CAAuCvT,EAAMj/E,EAAMkX,EAAOgJ,EACrE,CACA,MAAAs9E,CAAOlY,GACH,MAAMrG,EAAOvlF,KAAKsmG,YACZxhG,EAAOygF,EAAKmjB,QACZljB,EAASD,EAAKj/E,MAAQ,GACtBykG,EAASxlB,EAAKK,OAAOolB,YAE3B,GADAlmG,EAAK0gF,OAASA,EACD,WAAToG,EAAmB,CACnB,MAAM1pE,EAAUliB,KAAKysG,6BAA6B7gB,GAC7C5rF,KAAKkiB,QAAQoqE,WACdpqE,EAAQ4vE,YAAc,GAE1B,MAAMtyC,EAAa,CACfgkD,OAAO,EACP2V,UAAWpO,EAAOlwG,SAAW2qF,EAAO3qF,OACpCqnB,WAEJliB,KAAK+tG,cAAcjpG,OAAM1H,EAAWoiD,EAAYosC,EACpD,CACA5rF,KAAK2uG,eAAenpB,EAAQ,EAAGA,EAAO3qF,OAAQ+wF,EAClD,CACA,cAAA+iB,CAAenpB,EAAQhoE,EAAOgJ,EAAOolE,GACjC,MAAMQ,EAAQpsF,KAAKsmG,YAAYkD,OACzBnxF,EAAiB,UAATuzE,EACd,IAAI,IAAIjxF,EAAI6iB,EAAO7iB,EAAI6iB,EAAQgJ,EAAO7rB,IAAI,CACtC,MAAMs3F,EAAQzM,EAAO7qF,GACfunB,EAAUliB,KAAK0sG,0BAA0B/xG,EAAGs3F,EAAMrmC,OAAS,SAAWggC,GACtEwtB,EAAgBhtB,EAAMitB,yBAAyB1+G,EAAGqF,KAAKorG,UAAUzwG,GAAGsnC,GACpE/mC,EAAImd,EAAQ+zE,EAAM0oB,QAAUsE,EAAcl+G,EAC1CqrD,EAAIluC,EAAQ+zE,EAAM2oB,QAAUqE,EAAc7yD,EAC1C/G,EAAa,CACftkD,IACAqrD,IACA68B,MAAOg2B,EAAch2B,MACrB8V,KAAMx3F,MAAMxG,IAAMwG,MAAM6kD,GACxBrkC,WAEJliB,KAAK+tG,cAAc9b,EAAOt3F,EAAG6kD,EAAYosC,EAC7C,CACJ,GA4IJ0tB,kBAzIA,cAAgChS,GAC5BC,UAAY,UACfA,gBAAkB,CACXY,oBAAoB,EACpBC,gBAAiB,QACjB9b,UAAU,EACVuF,MAAM,GAEb0V,iBAAmB,CACZ5b,YAAa,CACTC,KAAM,SAEVS,OAAQ,CACJnxF,EAAG,CACC4F,KAAM,UAEVylD,EAAG,CACCzlD,KAAM,YAIrB,gBAAAqrG,CAAiB58F,GACV,MAAMg2E,EAAOvlF,KAAKsmG,YACZyE,EAAS/qG,KAAK8pF,MAAMxjF,KAAKykG,QAAU,IACnC,OAAE5kB,EAAO,OAAEC,GAAYb,EACvB3lD,EAAS5/B,KAAKorG,UAAU77F,GACxBrU,EAAIirF,EAAOimB,iBAAiBxsE,EAAO1kC,GACnCqrD,EAAI6/B,EAAOgmB,iBAAiBxsE,EAAO2mB,GACzC,MAAO,CACH7sB,MAAOqxE,EAAOx7F,IAAU,GACxBlT,MAAO,IAAMnB,EAAI,KAAOqrD,EAAI,IAEpC,CACA,MAAAu9C,CAAOlY,GACH,MAAMrG,EAAOvlF,KAAKsmG,aACVhgG,KAAMk/E,EAAS,IAAQD,EACzBE,EAAqBzlF,KAAK8pF,MAAM4jB,oBACtC,IAAI,MAAElwF,EAAM,MAAEgJ,GAAW8+D,GAAiCC,EAAMC,EAAQC,GAOxE,GANAzlF,KAAK6nG,WAAarqF,EAClBxd,KAAK8nG,WAAathF,EACd0/D,GAAoBX,KACpB/nE,EAAQ,EACRgJ,EAAQg/D,EAAO3qF,QAEfmF,KAAKkiB,QAAQoqE,SAAU,CAClBtsF,KAAKmoG,oBACNnoG,KAAKuoG,cAET,MAAQG,QAAS5jG,EAAK,SAAE0zG,GAAcjzB,EACtCzgF,EAAK27F,OAASzgG,KAAK8pF,MACnBhlF,EAAK87F,cAAgB5gG,KAAKuP,MAC1BzK,EAAK2zG,aAAeD,EAASC,WAC7B3zG,EAAK0gF,OAASA,EACd,MAAMtjE,EAAUliB,KAAKysG,6BAA6B7gB,GAClD1pE,EAAQ4mD,QAAU9oE,KAAKkiB,QAAQ4mD,QAC/B9oE,KAAK+tG,cAAcjpG,OAAM1H,EAAW,CAChCurD,UAAW88B,EACXvjE,WACD0pE,EACP,MAAW5rF,KAAKmoG,4BACL5iB,EAAKmjB,QACZ1oG,KAAKmoG,oBAAqB,GAE9BnoG,KAAK2uG,eAAenpB,EAAQhoE,EAAOgJ,EAAOolE,EAC9C,CACA,WAAA2c,GACI,MAAM,SAAEjc,GAActsF,KAAKkiB,SACtBliB,KAAKmoG,oBAAsB7b,IAC5BtsF,KAAKmoG,mBAAqBnoG,KAAK8pF,MAAMyvB,SAASC,WAAW,SAE7D7H,MAAMpJ,aACV,CACA,cAAAoG,CAAenpB,EAAQhoE,EAAOgJ,EAAOolE,GACjC,MAAMvzE,EAAiB,UAATuzE,GACR,OAAEhG,EAAO,OAAEqgB,EAAO,SAAEqC,EAAS,SAAEkQ,GAAcx4G,KAAKsmG,YAClDsH,EAAY5tG,KAAK0sG,0BAA0BlvF,EAAOouE,GAClD6hB,EAAgBztG,KAAKutG,iBAAiBK,GACtCJ,EAAiBxtG,KAAKwtG,eAAe5hB,EAAM6hB,GAC3CjH,EAAQ5gB,EAAOptB,KACfiuC,EAAQR,EAAOztC,MACf,SAAE2iC,EAAS,QAAEryB,GAAa9oE,KAAKkiB,QAC/Bw2F,EAAen2B,GAAS4Y,GAAYA,EAAW73F,OAAOo+E,kBACtDi3B,EAAe34G,KAAK8pF,MAAM4jB,qBAAuBr1F,GAAkB,SAATuzE,EAChE,IAAIitB,EAAar7F,EAAQ,GAAKxd,KAAKorG,UAAU5tF,EAAQ,GACrD,IAAI,IAAI7iB,EAAI6iB,EAAO7iB,EAAI6iB,EAAQgJ,IAAS7rB,EAAE,CACtC,MAAMs3F,EAAQzM,EAAO7qF,GACfilC,EAAS5/B,KAAKorG,UAAUzwG,GACxB6kD,EAAam5D,EAAe1mB,EAAQ,CAAC,EACrC6mB,EAAWv5B,EAAc3/C,EAAO6mE,IAChC7L,EAASp7C,EAAWgnD,GAAS5gB,EAAOK,iBAAiBrmD,EAAO4mE,GAAQ7rG,GACpEkgG,EAASr7C,EAAWinD,GAASpuF,GAASygG,EAAW7S,EAAOgQ,eAAiBhQ,EAAOhgB,iBAAiBqiB,EAAWtoG,KAAKqlG,WAAWY,EAAQrmE,EAAQ0oE,GAAY1oE,EAAO6mE,GAAQ9rG,GAC7K6kD,EAAW05C,KAAOx3F,MAAMk5F,IAAWl5F,MAAMm5F,IAAWie,EACpDt5D,EAAW1nB,KAAOn9B,EAAI,GAAK2W,KAAK4pC,IAAItb,EAAO4mE,GAASqS,EAAWrS,IAAUkS,EACrE5vC,IACAtpB,EAAW5f,OAASA,EACpB4f,EAAWotD,IAAM4L,EAASlyG,KAAK3L,IAE/B6yG,IACAhuD,EAAWt9B,QAAUurF,GAAiBztG,KAAK0sG,0BAA0B/xG,EAAGs3F,EAAMrmC,OAAS,SAAWggC,IAEjG+sB,GACD34G,KAAK+tG,cAAc9b,EAAOt3F,EAAG6kD,EAAYosC,GAE7CitB,EAAaj5E,CACjB,CACA5/B,KAAK8tG,oBAAoBL,EAAe7hB,EAAMgiB,EAClD,CACH,cAAA1B,GACO,MAAM3mB,EAAOvlF,KAAKsmG,YACZhgG,EAAOi/E,EAAKj/E,MAAQ,GAC1B,IAAKtG,KAAKkiB,QAAQoqE,SAAU,CACxB,IAAInwF,EAAM,EACV,IAAI,IAAIxB,EAAI2L,EAAKzL,OAAS,EAAGF,GAAK,IAAKA,EACnCwB,EAAMmV,KAAKnV,IAAIA,EAAKmK,EAAK3L,GAAG4V,KAAKvQ,KAAK0sG,0BAA0B/xG,IAAM,GAE1E,OAAOwB,EAAM,GAAKA,CACtB,CACA,MAAMusG,EAAUnjB,EAAKmjB,QACfra,EAASqa,EAAQxmF,SAAWwmF,EAAQxmF,QAAQ4vE,aAAe,EACjE,IAAKxrF,EAAKzL,OACN,OAAOwzF,EAEX,MAAMgL,EAAa/yF,EAAK,GAAGiK,KAAKvQ,KAAK0sG,0BAA0B,IACzDqM,EAAYzyG,EAAKA,EAAKzL,OAAS,GAAG0V,KAAKvQ,KAAK0sG,0BAA0BpmG,EAAKzL,OAAS,IAC1F,OAAOyW,KAAKnV,IAAIkyF,EAAQgL,EAAY0f,GAAa,CACrD,KAmBA,SAAS,KACT,MAAM,IAAI10G,MAAM,kFACpB,CAMI,MAAMo1G,GAUJ,eAAO78E,CAAS88E,GACdr+G,OAAOyE,OAAO25G,GAAgBn+G,UAAWo+G,EAC7C,CACAx3F,QACA,WAAAkJ,CAAYlJ,GACRliB,KAAKkiB,QAAUA,GAAW,CAAC,CAC/B,CAEA,IAAAskB,GAAQ,CACR,OAAA1J,GACI,OAAO,IACX,CACA,KAAAj5B,GACI,OAAO,IACX,CACA,MAAAk5B,GACI,OAAO,IACX,CACA,GAAAv0B,GACI,OAAO,IACX,CACA,IAAA2hB,GACI,OAAO,IACX,CACA,OAAAgT,GACI,OAAO,IACX,CACA,KAAAI,GACI,OAAO,IACX,EAEJ,IAAIo8E,GAAW,CACXh9E,MAAO88E,IAGX,SAASG,GAAaC,EAASrhD,EAAMn8D,EAAOwvF,GACxC,MAAM,WAAEwa,EAAW,KAAE//F,EAAK,QAAEq/E,GAAak0B,EACnCj0B,EAASygB,EAAWC,YAAY1gB,OACtC,GAAIA,GAAUptB,IAASotB,EAAOptB,MAAiB,MAATA,GAAgBmtB,GAAWr/E,EAAKzL,OAAQ,CAC1E,MAAMi/G,EAAel0B,EAAOm0B,eAAiBv1B,GAAgBF,GAC7D,IAAKuH,EACD,OAAOiuB,EAAaxzG,EAAMkyD,EAAMn8D,GAC7B,GAAIgqG,EAAWuB,eAAgB,CAClC,MAAM5oF,EAAK1Y,EAAK,GACV67E,EAA+B,oBAAhBnjE,EAAGg7F,UAA2Bh7F,EAAGg7F,SAASxhD,GAC/D,GAAI2pB,EAAO,CACP,MAAM3kE,EAAQs8F,EAAaxzG,EAAMkyD,EAAMn8D,EAAQ8lF,GACzC1kE,EAAMq8F,EAAaxzG,EAAMkyD,EAAMn8D,EAAQ8lF,GAC7C,MAAO,CACH5nC,GAAI/8B,EAAM+8B,GACVC,GAAI/8B,EAAI+8B,GAEhB,CACJ,CACJ,CACA,MAAO,CACHD,GAAI,EACJC,GAAIl0C,EAAKzL,OAAS,EAE1B,CACC,SAASo/G,GAAyBnwB,EAAOtxB,EAAMlkB,EAAUttB,EAAS6kE,GAC/D,MAAMsZ,EAAWrb,EAAMowB,+BACjB79G,EAAQi4C,EAASkkB,GACvB,IAAI,IAAI79D,EAAI,EAAGwlF,EAAOglB,EAAStqG,OAAQF,EAAIwlF,IAAQxlF,EAAE,CACjD,MAAM,MAAE4U,EAAM,KAAEjJ,GAAU6+F,EAASxqG,IAC7B,GAAE4/C,EAAG,GAAEC,GAAQo/D,GAAazU,EAASxqG,GAAI69D,EAAMn8D,EAAOwvF,GAC5D,IAAI,IAAIxoF,EAAIk3C,EAAIl3C,GAAKm3C,IAAMn3C,EAAE,CACzB,MAAMusB,EAAUtpB,EAAKjD,GAChBusB,EAAQspE,MACTlyE,EAAQ4I,EAASrgB,EAAOlM,EAEhC,CACJ,CACJ,CAUC,SAAS82G,GAAkBrwB,EAAOx1C,EAAUkkB,EAAM4hD,EAAkBtuB,GACjE,MAAM9yB,EAAQ,GACd,IAAK8yB,IAAqBhC,EAAMuwB,cAAc/lE,GAC1C,OAAO0kB,EAeX,OADAihD,GAAyBnwB,EAAOtxB,EAAMlkB,GAZf,SAAS1kB,EAASywD,EAAc9wE,IAC9Cu8E,GAAqBkG,GAAepiE,EAASk6D,EAAM0iB,UAAW,KAG/D58E,EAAQ0qF,QAAQhmE,EAASp5C,EAAGo5C,EAASiS,EAAG6zD,IACxCphD,EAAMh9D,KAAK,CACP4zB,UACAywD,eACA9wE,SAGZ,IACgE,GACzDypD,CACX,CAuBC,SAASuhD,GAAyBzwB,EAAOx1C,EAAUkkB,EAAMqzB,EAAWuuB,EAAkBtuB,GACnF,IAAI9yB,EAAQ,GACZ,MAAMwhD,EArDT,SAAkChiD,GAC/B,MAAMiiD,GAA8B,IAAvBjiD,EAAKh0D,QAAQ,KACpBk2G,GAA8B,IAAvBliD,EAAKh0D,QAAQ,KAC1B,OAAO,SAAS++E,EAAKC,GACjB,MAAMm3B,EAASF,EAAOnpG,KAAK4pC,IAAIqoC,EAAIroF,EAAIsoF,EAAItoF,GAAK,EAC1C0/G,EAASF,EAAOppG,KAAK4pC,IAAIqoC,EAAIh9B,EAAIi9B,EAAIj9B,GAAK,EAChD,OAAOj1C,KAAK22C,KAAK32C,KAAKC,IAAIopG,EAAQ,GAAKrpG,KAAKC,IAAIqpG,EAAQ,GAC5D,CACJ,CA6C2BC,CAAyBriD,GAChD,IAAIsiD,EAAcx3G,OAAOo+E,kBA8BzB,OADAu4B,GAAyBnwB,EAAOtxB,EAAMlkB,GA5BtC,SAAwB1kB,EAASywD,EAAc9wE,GAC3C,MAAM+qG,EAAU1qF,EAAQ0qF,QAAQhmE,EAASp5C,EAAGo5C,EAASiS,EAAG6zD,GACxD,GAAIvuB,IAAcyuB,EACd,OAEJ,MAAM7D,EAAS7mF,EAAQmrF,eAAeX,GAEtC,OADsBtuB,GAAoBhC,EAAMuwB,cAAc5D,MACzC6D,EACjB,OAEJ,MAAMl5E,EAAWo5E,EAAelmE,EAAUmiE,GACtCr1E,EAAW05E,GACX9hD,EAAQ,CACJ,CACIppC,UACAywD,eACA9wE,UAGRurG,EAAc15E,GACPA,IAAa05E,GACpB9hD,EAAMh9D,KAAK,CACP4zB,UACAywD,eACA9wE,SAGZ,IAEOypD,CACX,CACC,SAASgiD,GAAgBlxB,EAAOx1C,EAAUkkB,EAAMqzB,EAAWuuB,EAAkBtuB,GAC1E,OAAKA,GAAqBhC,EAAMuwB,cAAc/lE,GAG9B,MAATkkB,GAAiBqzB,EAA6E0uB,GAAyBzwB,EAAOx1C,EAAUkkB,EAAMqzB,EAAWuuB,EAAkBtuB,GA7DrL,SAA+BhC,EAAOx1C,EAAUkkB,EAAM4hD,GACnD,IAAIphD,EAAQ,GAmBZ,OADAihD,GAAyBnwB,EAAOtxB,EAAMlkB,GAjBtC,SAAwB1kB,EAASywD,EAAc9wE,GAC3C,MAAM,WAAEojG,EAAW,SAAEC,GAAchjF,EAAQqrF,SAAS,CAChD,aACA,YACDb,IACG,MAAEh3B,GAAWN,GAAkBlzD,EAAS,CAC1C10B,EAAGo5C,EAASp5C,EACZqrD,EAAGjS,EAASiS,IAEZo9B,GAAcP,EAAOuvB,EAAYC,IACjC55C,EAAMh9D,KAAK,CACP4zB,UACAywD,eACA9wE,SAGZ,IAEOypD,CACX,CAwCwCkiD,CAAsBpxB,EAAOx1C,EAAUkkB,EAAM4hD,GAFtE,EAGf,CACC,SAASe,GAAarxB,EAAOx1C,EAAUkkB,EAAMqzB,EAAWuuB,GACrD,MAAMphD,EAAQ,GACRoiD,EAAuB,MAAT5iD,EAAe,WAAa,WAChD,IAAI6iD,GAAiB,EAWrB,OAVApB,GAAyBnwB,EAAOtxB,EAAMlkB,GAAU,CAAC1kB,EAASywD,EAAc9wE,KAChEqgB,EAAQwrF,GAAa9mE,EAASkkB,GAAO4hD,KACrCphD,EAAMh9D,KAAK,CACP4zB,UACAywD,eACA9wE,UAEJ8rG,EAAiBA,GAAkBzrF,EAAQ0qF,QAAQhmE,EAASp5C,EAAGo5C,EAASiS,EAAG6zD,GAC/E,IAEAvuB,IAAcwvB,EACP,GAEJriD,CACX,CACC,IAAIsiD,GAAc,CACfrB,4BACAsB,MAAO,CACV,KAAAhsG,CAAOu6E,EAAOnkF,EAAGuc,EAASk4F,GACf,MAAM9lE,EAAW+nD,GAAoB12F,EAAGmkF,GAClCtxB,EAAOt2C,EAAQs2C,MAAQ,IACvBszB,EAAmB5pE,EAAQ4pE,mBAAoB,EAC/C9yB,EAAQ92C,EAAQ2pE,UAAYsuB,GAAkBrwB,EAAOx1C,EAAUkkB,EAAM4hD,EAAkBtuB,GAAoBkvB,GAAgBlxB,EAAOx1C,EAAUkkB,GAAM,EAAO4hD,EAAkBtuB,GAC3Kl7C,EAAW,GACjB,OAAKooB,EAAMn+D,QAGXivF,EAAMowB,+BAA+BjpF,SAASs0D,IAC1C,MAAMh2E,EAAQypD,EAAM,GAAGzpD,MACjBqgB,EAAU21D,EAAKj/E,KAAKiJ,GACtBqgB,IAAYA,EAAQspE,MACpBtoD,EAAS50C,KAAK,CACV4zB,UACAywD,aAAckF,EAAKh2E,MACnBA,SAER,IAEGqhC,GAbI,EAcf,EACP,OAAA83D,CAAS5e,EAAOnkF,EAAGuc,EAASk4F,GACjB,MAAM9lE,EAAW+nD,GAAoB12F,EAAGmkF,GAClCtxB,EAAOt2C,EAAQs2C,MAAQ,KACvBszB,EAAmB5pE,EAAQ4pE,mBAAoB,EACrD,IAAI9yB,EAAQ92C,EAAQ2pE,UAAYsuB,GAAkBrwB,EAAOx1C,EAAUkkB,EAAM4hD,EAAkBtuB,GAAoBkvB,GAAgBlxB,EAAOx1C,EAAUkkB,GAAM,EAAO4hD,EAAkBtuB,GAC/K,GAAI9yB,EAAMn+D,OAAS,EAAG,CAClB,MAAMwlF,EAAernB,EAAM,GAAGqnB,aACxB/5E,EAAOwjF,EAAM2f,eAAeppB,GAAc/5E,KAChD0yD,EAAQ,GACR,IAAI,IAAIr+D,EAAI,EAAGA,EAAI2L,EAAKzL,SAAUF,EAC9Bq+D,EAAMh9D,KAAK,CACP4zB,QAAStpB,EAAK3L,GACd0lF,eACA9wE,MAAO5U,GAGnB,CACA,OAAOq+D,CACX,EACP,KAAAi5B,CAAOnI,EAAOnkF,EAAGuc,EAASk4F,GAIf,OAAOD,GAAkBrwB,EAHRuS,GAAoB12F,EAAGmkF,GAC3B5nE,EAAQs2C,MAAQ,KAEmB4hD,EADvBl4F,EAAQ4pE,mBAAoB,EAEzD,EACP,OAAAn8B,CAASm6B,EAAOnkF,EAAGuc,EAASk4F,GACjB,MAAM9lE,EAAW+nD,GAAoB12F,EAAGmkF,GAClCtxB,EAAOt2C,EAAQs2C,MAAQ,KACvBszB,EAAmB5pE,EAAQ4pE,mBAAoB,EACrD,OAAOkvB,GAAgBlxB,EAAOx1C,EAAUkkB,EAAMt2C,EAAQ2pE,UAAWuuB,EAAkBtuB,EACvF,EACP,CAAA5wF,CAAG4uF,EAAOnkF,EAAGuc,EAASk4F,GAEX,OAAOe,GAAarxB,EADHuS,GAAoB12F,EAAGmkF,GACH,IAAK5nE,EAAQ2pE,UAAWuuB,EACjE,EACP,CAAA7zD,CAAGujC,EAAOnkF,EAAGuc,EAASk4F,GAEX,OAAOe,GAAarxB,EADHuS,GAAoB12F,EAAGmkF,GACH,IAAK5nE,EAAQ2pE,UAAWuuB,EACjE,IAIR,MAAMoB,GAAmB,CACrB,OACA,MACA,QACA,UAEJ,SAASC,GAAiB3vF,EAAOwoB,GAC7B,OAAOxoB,EAAMjnB,QAAQlC,GAAIA,EAAEogC,MAAQuR,GACvC,CACA,SAASonE,GAA4B5vF,EAAO0sC,GACxC,OAAO1sC,EAAMjnB,QAAQlC,IAAyC,IAArC64G,GAAiBh3G,QAAQ7B,EAAEogC,MAAepgC,EAAE+5F,IAAIlkC,OAASA,GACtF,CACA,SAASmjD,GAAa7vF,EAAOk0D,GACzB,OAAOl0D,EAAMe,MAAK,CAACxM,EAAGxM,KAClB,MAAMusE,EAAKJ,EAAUnsE,EAAIwM,EACnBikB,EAAK07C,EAAU3/D,EAAIxM,EACzB,OAAOusE,EAAGhC,SAAW95C,EAAG85C,OAASgC,EAAG7wE,MAAQ+0B,EAAG/0B,MAAQ6wE,EAAGhC,OAAS95C,EAAG85C,MAAM,GAEpF,CAqCC,SAASw9B,GAAcC,EAASjoF,GAC7B,MAAMgyE,EAnBV,SAAqBiW,GACjB,MAAMjW,EAAS,CAAC,EAChB,IAAK,MAAMkW,KAAQD,EAAQ,CACvB,MAAM,MAAE53G,EAAM,IAAE8+B,EAAI,YAAEg5E,GAAiBD,EACvC,IAAK73G,IAAUu3G,GAAiB3pF,SAASkR,GACrC,SAEJ,MAAMy0D,EAASoO,EAAO3hG,KAAW2hG,EAAO3hG,GAAS,CAC7CuiB,MAAO,EACPw1F,OAAQ,EACR59B,OAAQ,EACR7tE,KAAM,IAEVinF,EAAOhxE,QACPgxE,EAAOpZ,QAAU29B,CACrB,CACA,OAAOnW,CACX,CAEmBqW,CAAYJ,IACrB,aAAEK,EAAa,cAAEC,GAAmBvoF,EAC1C,IAAIj5B,EAAGwlF,EAAMi8B,EACb,IAAIzhH,EAAI,EAAGwlF,EAAO07B,EAAQhhH,OAAQF,EAAIwlF,IAAQxlF,EAAE,CAC5CyhH,EAASP,EAAQlhH,GACjB,MAAM,SAAE0hH,GAAcD,EAAO1f,IACvBz4F,EAAQ2hG,EAAOwW,EAAOn4G,OACtBi/F,EAASj/F,GAASm4G,EAAOL,YAAc93G,EAAMm6E,OAC/Cg+B,EAAO5L,YACP4L,EAAO/4D,MAAQ6/C,EAASA,EAASgZ,EAAeG,GAAYzoF,EAAO0oF,eACnEF,EAAOh5D,OAAS+4D,IAEhBC,EAAO/4D,MAAQ64D,EACfE,EAAOh5D,OAAS8/C,EAASA,EAASiZ,EAAgBE,GAAYzoF,EAAO2oF,gBAE7E,CACA,OAAO3W,CACX,CAmBA,SAAS4W,GAAeC,EAAYjQ,EAAWnsF,EAAGxM,GAC9C,OAAOvC,KAAKnV,IAAIsgH,EAAWp8F,GAAImsF,EAAUnsF,IAAM/O,KAAKnV,IAAIsgH,EAAW5oG,GAAI24F,EAAU34F,GACrF,CACA,SAAS6oG,GAAiBD,EAAYE,GAClCF,EAAWz5D,IAAM1xC,KAAKnV,IAAIsgH,EAAWz5D,IAAK25D,EAAW35D,KACrDy5D,EAAWx5D,KAAO3xC,KAAKnV,IAAIsgH,EAAWx5D,KAAM05D,EAAW15D,MACvDw5D,EAAWv5D,OAAS5xC,KAAKnV,IAAIsgH,EAAWv5D,OAAQy5D,EAAWz5D,QAC3Du5D,EAAWt5D,MAAQ7xC,KAAKnV,IAAIsgH,EAAWt5D,MAAOw5D,EAAWx5D,MAC7D,CACA,SAASy5D,GAAWpQ,EAAW54E,EAAQwoF,EAAQxW,GAC3C,MAAM,IAAE7iE,EAAI,IAAE25D,GAAS0f,EACjBK,EAAajQ,EAAUiQ,WAC7B,IAAK5rF,EAASkS,GAAM,CACZq5E,EAAO7rG,OACPi8F,EAAUzpE,IAAQq5E,EAAO7rG,MAE7B,MAAMtM,EAAQ2hG,EAAOwW,EAAOn4G,QAAU,CAClCsM,KAAM,EACNiW,MAAO,GAEXviB,EAAMsM,KAAOe,KAAKnV,IAAI8H,EAAMsM,KAAM6rG,EAAO5L,WAAa9T,EAAIt5C,OAASs5C,EAAIr5C,OACvE+4D,EAAO7rG,KAAOtM,EAAMsM,KAAOtM,EAAMuiB,MACjCgmF,EAAUzpE,IAAQq5E,EAAO7rG,IAC7B,CACImsF,EAAImgB,YACJH,GAAiBD,EAAY/f,EAAImgB,cAErC,MAAMC,EAAWxrG,KAAKnV,IAAI,EAAGy3B,EAAOmpF,WAAaP,GAAeC,EAAYjQ,EAAW,OAAQ,UACzFwQ,EAAY1rG,KAAKnV,IAAI,EAAGy3B,EAAOqpF,YAAcT,GAAeC,EAAYjQ,EAAW,MAAO,WAC1F0Q,EAAeJ,IAAatQ,EAAUp8B,EACtC+sC,EAAgBH,IAAcxQ,EAAUtsE,EAG9C,OAFAssE,EAAUp8B,EAAI0sC,EACdtQ,EAAUtsE,EAAI88E,EACPZ,EAAO5L,WAAa,CACvB3vE,KAAMq8E,EACN/7E,MAAOg8E,GACP,CACAt8E,KAAMs8E,EACNh8E,MAAO+7E,EAEf,CAaA,SAASE,GAAW5M,EAAYhE,GAC5B,MAAMiQ,EAAajQ,EAAUiQ,WAC7B,SAASY,EAAmBphB,GACxB,MAAM9J,EAAS,CACXlvC,KAAM,EACND,IAAK,EACLG,MAAO,EACPD,OAAQ,GAKZ,OAHA+4C,EAAUhrE,SAAS8R,IACfovD,EAAOpvD,GAAOzxB,KAAKnV,IAAIqwG,EAAUzpE,GAAM05E,EAAW15E,GAAK,IAEpDovD,CACX,CACA,OAAoBkrB,EAAb7M,EAAgC,CACnC,OACA,SACoB,CACpB,MACA,UAER,CACA,SAAS8M,GAASC,EAAO/Q,EAAW54E,EAAQgyE,GACxC,MAAM4X,EAAa,GACnB,IAAI7iH,EAAGwlF,EAAMi8B,EAAQ1f,EAAK+gB,EAAO50F,EACjC,IAAIluB,EAAI,EAAGwlF,EAAOo9B,EAAM1iH,OAAQ4iH,EAAQ,EAAG9iH,EAAIwlF,IAAQxlF,EAAE,CACrDyhH,EAASmB,EAAM5iH,GACf+hG,EAAM0f,EAAO1f,IACbA,EAAIoH,OAAOsY,EAAO/4D,OAASmpD,EAAUp8B,EAAGgsC,EAAOh5D,QAAUopD,EAAUtsE,EAAGk9E,GAAWhB,EAAO5L,WAAYhE,IACpG,MAAM,KAAE3rE,EAAK,MAAEM,GAAWy7E,GAAWpQ,EAAW54E,EAAQwoF,EAAQxW,GAChE6X,GAAS58E,GAAQ28E,EAAW3iH,OAC5BguB,EAAUA,GAAWsY,EAChBu7D,EAAI2f,UACLmB,EAAWxhH,KAAKogH,EAExB,CACA,OAAOqB,GAASH,GAASE,EAAYhR,EAAW54E,EAAQgyE,IAAW/8E,CACvE,CACA,SAAS60F,GAAWhhB,EAAKz5C,EAAMD,EAAKK,EAAOD,GACvCs5C,EAAI15C,IAAMA,EACV05C,EAAIz5C,KAAOA,EACXy5C,EAAIv5C,MAAQF,EAAOI,EACnBq5C,EAAIx5C,OAASF,EAAMI,EACnBs5C,EAAIr5C,MAAQA,EACZq5C,EAAIt5C,OAASA,CACjB,CACA,SAASu6D,GAAWJ,EAAO/Q,EAAW54E,EAAQgyE,GAC1C,MAAMgY,EAAchqF,EAAO45D,QAC3B,IAAI,EAAEtyF,EAAE,EAAEqrD,GAAOimD,EACjB,IAAK,MAAM4P,KAAUmB,EAAM,CACvB,MAAM7gB,EAAM0f,EAAO1f,IACbz4F,EAAQ2hG,EAAOwW,EAAOn4G,QAAU,CAClCuiB,MAAO,EACPw1F,OAAQ,EACR59B,OAAQ,GAENA,EAASg+B,EAAOL,YAAc93G,EAAMm6E,QAAU,EACpD,GAAIg+B,EAAO5L,WAAY,CACnB,MAAMntD,EAAQmpD,EAAUp8B,EAAIgO,EACtBh7B,EAASn/C,EAAMsM,MAAQmsF,EAAIt5C,OAC7Bg+B,GAAQn9E,EAAMuZ,SACd+oC,EAAItiD,EAAMuZ,OAEVk/E,EAAI2f,SACJqB,GAAWhhB,EAAKkhB,EAAY36D,KAAMsD,EAAG3yB,EAAOmpF,WAAaa,EAAYz6D,MAAQy6D,EAAY36D,KAAMG,GAE/Fs6D,GAAWhhB,EAAK8P,EAAUvpD,KAAOh/C,EAAM+3G,OAAQz1D,EAAGlD,EAAOD,GAE7Dn/C,EAAMuZ,MAAQ+oC,EACdtiD,EAAM+3G,QAAU34D,EAChBkD,EAAIm2C,EAAIx5C,MACZ,KAAO,CACH,MAAME,EAASopD,EAAUtsE,EAAIk+C,EACvB/6B,EAAQp/C,EAAMsM,MAAQmsF,EAAIr5C,MAC5B+9B,GAAQn9E,EAAMuZ,SACdtiB,EAAI+I,EAAMuZ,OAEVk/E,EAAI2f,SACJqB,GAAWhhB,EAAKxhG,EAAG0iH,EAAY56D,IAAKK,EAAOzvB,EAAOqpF,YAAcW,EAAY16D,OAAS06D,EAAY56D,KAEjG06D,GAAWhhB,EAAKxhG,EAAGsxG,EAAUxpD,IAAM/+C,EAAM+3G,OAAQ34D,EAAOD,GAE5Dn/C,EAAMuZ,MAAQtiB,EACd+I,EAAM+3G,QAAU54D,EAChBloD,EAAIwhG,EAAIv5C,KACZ,CACJ,CACAqpD,EAAUtxG,EAAIA,EACdsxG,EAAUjmD,EAAIA,CAClB,CACA,IAAIs1D,GAAU,CACb,MAAAgC,CAAQ/zB,EAAO/uF,GACH+uF,EAAMyzB,QACPzzB,EAAMyzB,MAAQ,IAElBxiH,EAAKshH,SAAWthH,EAAKshH,WAAY,EACjCthH,EAAKu5C,SAAWv5C,EAAKu5C,UAAY,MACjCv5C,EAAKqjF,OAASrjF,EAAKqjF,QAAU,EAC7BrjF,EAAK+iH,QAAU/iH,EAAK+iH,SAAW,WAC3B,MAAO,CACH,CACIrhE,EAAG,EACH,IAAA6lD,CAAMkK,GACFzxG,EAAKunG,KAAKkK,EACd,GAGZ,EACA1iB,EAAMyzB,MAAMvhH,KAAKjB,EACrB,EACH,SAAAgjH,CAAWj0B,EAAOk0B,GACX,MAAMzuG,EAAQu6E,EAAMyzB,MAAQzzB,EAAMyzB,MAAM/4G,QAAQw5G,IAAe,GAChD,IAAXzuG,GACAu6E,EAAMyzB,MAAM1xF,OAAOtc,EAAO,EAElC,EACH,SAAAwuC,CAAW+rC,EAAO/uF,EAAMmnB,GACjBnnB,EAAKshH,SAAWn6F,EAAQm6F,SACxBthH,EAAKu5C,SAAWpyB,EAAQoyB,SACxBv5C,EAAKqjF,OAASl8D,EAAQk8D,MAC1B,EACH,MAAA0lB,CAAQha,EAAOzmC,EAAOD,EAAQ66D,GACvB,IAAKn0B,EACD,OAEJ,MAAM0D,EAAU8H,GAAUxL,EAAM5nE,QAAQk6F,OAAO5uB,SACzC8uB,EAAiBhrG,KAAKnV,IAAIknD,EAAQmqC,EAAQnqC,MAAO,GACjDk5D,EAAkBjrG,KAAKnV,IAAIinD,EAASoqC,EAAQpqC,OAAQ,GACpDm6D,EAvMd,SAA0BA,GACtB,MAAMW,EAxDV,SAAmBX,GACf,MAAMW,EAAc,GACpB,IAAIvjH,EAAGwlF,EAAMuc,EAAK35D,EAAK9+B,EAAO83G,EAC9B,IAAIphH,EAAI,EAAGwlF,GAAQo9B,GAAS,IAAI1iH,OAAQF,EAAIwlF,IAAQxlF,EAChD+hG,EAAM6gB,EAAM5iH,KACT25C,SAAUvR,EAAM7gB,SAAWje,QAAQ83G,cAAa,IAAUrf,GAC7DwhB,EAAYliH,KAAK,CACbuT,MAAO5U,EACP+hG,MACA35D,MACAytE,WAAY9T,EAAIwZ,eAChB93B,OAAQse,EAAIte,OACZn6E,MAAOA,GAAS8+B,EAAM9+B,EACtB83G,gBAGR,OAAOmC,CACX,CAuCwBC,CAAUZ,GACxBlB,EAAWV,GAAauC,EAAYr5G,QAAQi3G,GAAOA,EAAKpf,IAAI2f,YAAW,GACvEp5D,EAAO04D,GAAaF,GAAiByC,EAAa,SAAS,GAC3D/6D,EAAQw4D,GAAaF,GAAiByC,EAAa,UACnDl7D,EAAM24D,GAAaF,GAAiByC,EAAa,QAAQ,GACzDh7D,EAASy4D,GAAaF,GAAiByC,EAAa,WACpDE,EAAmB1C,GAA4BwC,EAAa,KAC5DG,EAAiB3C,GAA4BwC,EAAa,KAChE,MAAO,CACH7B,WACAiC,WAAYr7D,EAAKjoD,OAAOgoD,GACxBu7D,eAAgBp7D,EAAMnoD,OAAOqjH,GAAgBrjH,OAAOkoD,GAAQloD,OAAOojH,GACnE5R,UAAWiP,GAAiByC,EAAa,aACzCnoD,SAAU9S,EAAKjoD,OAAOmoD,GAAOnoD,OAAOqjH,GACpC7N,WAAYxtD,EAAIhoD,OAAOkoD,GAAQloD,OAAOojH,GAE9C,CAsLsBI,CAAiB10B,EAAMyzB,OAC/BkB,EAAgBlB,EAAMxnD,SACtB2oD,EAAkBnB,EAAM/M,WAC9B7/E,EAAKm5D,EAAMyzB,OAAQ7gB,IACiB,oBAArBA,EAAIiiB,cACXjiB,EAAIiiB,cACR,IAEJ,MAAMC,EAA0BH,EAActtF,QAAO,CAACywC,EAAOk6C,IAAOA,EAAKpf,IAAIx6E,UAAwC,IAA7B45F,EAAKpf,IAAIx6E,QAAQkV,QAAoBwqC,EAAQA,EAAQ,GAAG,IAAM,EAChJhuC,EAASv4B,OAAO+xG,OAAO,CACzB2P,WAAY15D,EACZ45D,YAAa75D,EACboqC,UACA8uB,iBACAC,kBACAL,aAAcI,EAAiB,EAAIsC,EACnCzC,cAAeI,EAAkB,IAE/BE,EAAaphH,OAAOyE,OAAO,CAAC,EAAG0tF,GACrCkvB,GAAiBD,EAAYnnB,GAAU2oB,IACvC,MAAMzR,EAAYnxG,OAAOyE,OAAO,CAC5B28G,aACArsC,EAAGksC,EACHp8E,EAAGq8E,EACHrhH,EAAGsyF,EAAQvqC,KACXsD,EAAGinC,EAAQxqC,KACZwqC,GACGoY,EAASgW,GAAc6C,EAAczjH,OAAO0jH,GAAkB9qF,GACpE0pF,GAASC,EAAMlB,SAAU7P,EAAW54E,EAAQgyE,GAC5C0X,GAASmB,EAAejS,EAAW54E,EAAQgyE,GACvC0X,GAASoB,EAAiBlS,EAAW54E,EAAQgyE,IAC7C0X,GAASmB,EAAejS,EAAW54E,EAAQgyE,GA3KvD,SAA0B4G,GACtB,MAAMiQ,EAAajQ,EAAUiQ,WAC7B,SAASoC,EAAU97E,GACf,MAAM+V,EAASxnC,KAAKnV,IAAIsgH,EAAW15E,GAAOypE,EAAUzpE,GAAM,GAE1D,OADAypE,EAAUzpE,IAAQ+V,EACXA,CACX,CACA0zD,EAAUjmD,GAAKs4D,EAAU,OACzBrS,EAAUtxG,GAAK2jH,EAAU,QACzBA,EAAU,SACVA,EAAU,SACd,CAkKQC,CAAiBtS,GACjBmR,GAAWJ,EAAMe,WAAY9R,EAAW54E,EAAQgyE,GAChD4G,EAAUtxG,GAAKsxG,EAAUp8B,EACzBo8B,EAAUjmD,GAAKimD,EAAUtsE,EACzBy9E,GAAWJ,EAAMgB,eAAgB/R,EAAW54E,EAAQgyE,GACpD9b,EAAM0iB,UAAY,CACdvpD,KAAMupD,EAAUvpD,KAChBD,IAAKwpD,EAAUxpD,IACfG,MAAOqpD,EAAUvpD,KAAOupD,EAAUp8B,EAClCltB,OAAQspD,EAAUxpD,IAAMwpD,EAAUtsE,EAClCkjB,OAAQopD,EAAUtsE,EAClBmjB,MAAOmpD,EAAUp8B,GAErBz/C,EAAK4sF,EAAM/Q,WAAY4P,IACnB,MAAM1f,EAAM0f,EAAO1f,IACnBrhG,OAAOyE,OAAO48F,EAAK5S,EAAM0iB,WACzB9P,EAAIoH,OAAO0I,EAAUp8B,EAAGo8B,EAAUtsE,EAAG,CACjC+iB,KAAM,EACND,IAAK,EACLG,MAAO,EACPD,OAAQ,GACV,GAEV,GAGJ,MAAM67D,GACL,cAAAC,CAAe1uB,EAAQ4M,GAAc,CACrC,cAAA+hB,CAAexgH,GACR,OAAO,CACX,CACH,gBAAAggB,CAAiBqrE,EAAOhpF,EAAM0iB,GAAW,CACzC,mBAAA5B,CAAoBkoE,EAAOhpF,EAAM0iB,GAAW,CAC5C,mBAAA2nE,GACO,OAAO,CACX,CACH,cAAA4R,CAAentE,EAASyzB,EAAOD,EAAQ85C,GAGhC,OAFA75C,EAAQ/xC,KAAKnV,IAAI,EAAGknD,GAASzzB,EAAQyzB,OACrCD,EAASA,GAAUxzB,EAAQwzB,OACpB,CACHC,QACAD,OAAQ9xC,KAAKnV,IAAI,EAAG+gG,EAAc5rF,KAAKwtB,MAAMukB,EAAQ65C,GAAe95C,GAE5E,CACH,UAAA87D,CAAW5uB,GACJ,OAAO,CACX,CACH,YAAA6uB,CAAa5qG,GACV,EAGJ,MAAM6qG,WAAsBL,GACxB,cAAAC,CAAejkH,GACX,OAAOA,GAAQA,EAAKmZ,YAAcnZ,EAAKmZ,WAAW,OAAS,IAC/D,CACA,YAAAirG,CAAa5qG,GACTA,EAAO2N,QAAQ+kC,WAAY,CAC/B,EAGJ,MAAMo4D,GAAc,WACbC,GAAc,CACjBC,WAAY,YACZC,UAAW,YACXC,SAAU,UACVC,aAAc,aACdC,YAAa,YACbC,YAAa,YACbC,UAAW,UACXC,aAAc,WACdC,WAAY,YAEVC,GAAiB3jH,GAAkB,OAAVA,GAA4B,KAAVA,EAoCjD,MAAM4jH,KAAuBhiB,IAA+B,CACxD38C,SAAS,GAKb,SAAS4+D,GAAep2B,EAAOhpF,EAAM0iB,GACjCsmE,EAAMwG,OAAO1uE,oBAAoB9gB,EAAM0iB,EAAUy8F,GACrD,CAYA,SAASE,GAAiBC,EAAU9vB,GAChC,IAAK,MAAMhrB,KAAQ86C,EACf,GAAI96C,IAASgrB,GAAUhrB,EAAKxzC,SAASw+D,GACjC,OAAO,CAGnB,CACA,SAAS+vB,GAAqBv2B,EAAOhpF,EAAM0iB,GACvC,MAAM8sE,EAASxG,EAAMwG,OACfgwB,EAAW,IAAIC,kBAAkBhyF,IACnC,IAAIhH,GAAU,EACd,IAAK,MAAMsoF,KAASthF,EAChBhH,EAAUA,GAAW44F,GAAiBtQ,EAAM2Q,WAAYlwB,GACxD/oE,EAAUA,IAAY44F,GAAiBtQ,EAAM4Q,aAAcnwB,GAE3D/oE,GACA/D,GACJ,IAMJ,OAJA88F,EAASI,QAAQjmG,SAAU,CACvBkmG,WAAW,EACXC,SAAS,IAENN,CACX,CACA,SAASO,GAAqB/2B,EAAOhpF,EAAM0iB,GACvC,MAAM8sE,EAASxG,EAAMwG,OACfgwB,EAAW,IAAIC,kBAAkBhyF,IACnC,IAAIhH,GAAU,EACd,IAAK,MAAMsoF,KAASthF,EAChBhH,EAAUA,GAAW44F,GAAiBtQ,EAAM4Q,aAAcnwB,GAC1D/oE,EAAUA,IAAY44F,GAAiBtQ,EAAM2Q,WAAYlwB,GAEzD/oE,GACA/D,GACJ,IAMJ,OAJA88F,EAASI,QAAQjmG,SAAU,CACvBkmG,WAAW,EACXC,SAAS,IAENN,CACX,CACA,MAAMQ,GAAqB,IAAI13B,IAC/B,IAAI23B,GAAsB,EAC1B,SAASC,KACL,MAAMC,EAAM/gH,OAAOqxD,iBACf0vD,IAAQF,KAGZA,GAAsBE,EACtBH,GAAmB7vF,SAAQ,CAACm8D,EAAQtD,KAC5BA,EAAMqG,0BAA4B8wB,GAClC7zB,GACJ,IAER,CAaA,SAAS8zB,GAAqBp3B,EAAOhpF,EAAM0iB,GACvC,MAAM8sE,EAASxG,EAAMwG,OACfz8C,EAAYy8C,GAAUqL,GAAerL,GAC3C,IAAKz8C,EACD,OAEJ,MAAMu5C,EAASpI,IAAU,CAAC3hC,EAAOD,KAC7B,MAAMgtB,EAAIv8B,EAAUl5B,YACpB6I,EAAS6/B,EAAOD,GACZgtB,EAAIv8B,EAAUl5B,aACd6I,GACJ,GACDtjB,QACGogH,EAAW,IAAIa,gBAAgB5yF,IACjC,MAAMshF,EAAQthF,EAAQ,GAChB80B,EAAQwsD,EAAMuR,YAAY/9D,MAC1BD,EAASysD,EAAMuR,YAAYh+D,OACnB,IAAVC,GAA0B,IAAXD,GAGnBgqC,EAAO/pC,EAAOD,EAAO,IAIzB,OAFAk9D,EAASI,QAAQ7sE,GAlCrB,SAAuCi2C,EAAOsD,GACrC0zB,GAAmBvwG,MACpBrQ,OAAOue,iBAAiB,SAAUuiG,IAEtCF,GAAmBl4F,IAAIkhE,EAAOsD,EAClC,CA8BIi0B,CAA8Bv3B,EAAOsD,GAC9BkzB,CACX,CACA,SAASgB,GAAgBx3B,EAAOhpF,EAAMw/G,GAC9BA,GACAA,EAASiB,aAEA,WAATzgH,GApCR,SAAyCgpF,GACrCg3B,GAAmBlpB,OAAO9N,GACrBg3B,GAAmBvwG,MACpBrQ,OAAO0hB,oBAAoB,SAAUo/F,GAE7C,CAgCQQ,CAAgC13B,EAExC,CACA,SAAS23B,GAAqB33B,EAAOhpF,EAAM0iB,GACvC,MAAM8sE,EAASxG,EAAMwG,OACfqG,EAAQ3R,IAAWz2E,IACH,OAAdu7E,EAAMlkE,KACNpC,EAtHZ,SAAyBjV,EAAOu7E,GAC5B,MAAMhpF,EAAOw+G,GAAY/wG,EAAMzN,OAASyN,EAAMzN,MACxC,EAAE5F,EAAE,EAAEqrD,GAAO81C,GAAoB9tF,EAAOu7E,GAC9C,MAAO,CACHhpF,OACAgpF,QACA43B,OAAQnzG,EACRrT,OAASkC,IAANlC,EAAkBA,EAAI,KACzBqrD,OAASnpD,IAANmpD,EAAkBA,EAAI,KAEjC,CA4GqBo7D,CAAgBpzG,EAAOu7E,GACpC,GACDA,GAEH,OAhIJ,SAAqBxkB,EAAMxkE,EAAM0iB,GAC7B8hD,EAAK7mD,iBAAiB3d,EAAM0iB,EAAUy8F,GAC1C,CA6HI2B,CAAYtxB,EAAQxvF,EAAM61F,GACnBA,CACX,CACC,MAAMkrB,WAAoB9C,GAC1B,cAAAC,CAAe1uB,EAAQ4M,GAChB,MAAMz+F,EAAU6xF,GAAUA,EAAOp8E,YAAco8E,EAAOp8E,WAAW,MACjE,OAAIzV,GAAWA,EAAQ6xF,SAAWA,GA3KzC,SAAoBA,EAAQ4M,GACzB,MAAM/lE,EAAQm5D,EAAOn5D,MACf2qF,EAAexxB,EAAO/nD,aAAa,UACnCw5E,EAAczxB,EAAO/nD,aAAa,SAcxC,GAbA+nD,EAAO+uB,IAAe,CAClBltF,QAAS,CACLixB,OAAQ0+D,EACRz+D,MAAO0+D,EACP5qF,MAAO,CACHC,QAASD,EAAMC,QACfgsB,OAAQjsB,EAAMisB,OACdC,MAAOlsB,EAAMksB,SAIzBlsB,EAAMC,QAAUD,EAAMC,SAAW,QACjCD,EAAMolE,UAAYplE,EAAMolE,WAAa,aACjCyjB,GAAc+B,GAAc,CAC5B,MAAMC,EAAe7jB,GAAa7N,EAAQ,cACrBlzF,IAAjB4kH,IACA1xB,EAAOjtC,MAAQ2+D,EAEvB,CACA,GAAIhC,GAAc8B,GACd,GAA4B,KAAxBxxB,EAAOn5D,MAAMisB,OACbktC,EAAOltC,OAASktC,EAAOjtC,OAAS65C,GAAe,OAC5C,CACH,MAAM+kB,EAAgB9jB,GAAa7N,EAAQ,eACrBlzF,IAAlB6kH,IACA3xB,EAAOltC,OAAS6+D,EAExB,CAGR,CA0IYC,CAAW5xB,EAAQ4M,GACZz+F,GAEJ,IACX,CACH,cAAAwgH,CAAexgH,GACR,MAAM6xF,EAAS7xF,EAAQ6xF,OACvB,IAAKA,EAAO+uB,IACR,OAAO,EAEX,MAAMltF,EAAUm+D,EAAO+uB,IAAaltF,QACpC,CACI,SACA,SACFlB,SAASp1B,IACP,MAAMQ,EAAQ81B,EAAQt2B,GAClB0jF,EAAcljF,GACdi0F,EAAO96B,gBAAgB35D,GAEvBy0F,EAAO9nD,aAAa3sC,EAAMQ,EAC9B,IAEJ,MAAM86B,EAAQhF,EAAQgF,OAAS,CAAC,EAMhC,OALA97B,OAAOmqB,KAAK2R,GAAOlG,SAAStyB,IACxB2xF,EAAOn5D,MAAMx4B,GAAOw4B,EAAMx4B,EAAI,IAElC2xF,EAAOjtC,MAAQitC,EAAOjtC,aACfitC,EAAO+uB,KACP,CACX,CACH,gBAAA5gG,CAAiBqrE,EAAOhpF,EAAM0iB,GACvBxjB,KAAK4hB,oBAAoBkoE,EAAOhpF,GAChC,MAAMqhH,EAAUr4B,EAAMs4B,WAAat4B,EAAMs4B,SAAW,CAAC,GAM/Cp7F,EALW,CACbq7F,OAAQhC,GACRiC,OAAQzB,GACRzzB,OAAQ8zB,IAEapgH,IAAS2gH,GAClCU,EAAQrhH,GAAQkmB,EAAQ8iE,EAAOhpF,EAAM0iB,EACzC,CACH,mBAAA5B,CAAoBkoE,EAAOhpF,GACpB,MAAMqhH,EAAUr4B,EAAMs4B,WAAat4B,EAAMs4B,SAAW,CAAC,GAC/CzrB,EAAQwrB,EAAQrhH,GACtB,IAAK61F,EACD,QAEa,CACb0rB,OAAQf,GACRgB,OAAQhB,GACRl0B,OAAQk0B,IAEaxgH,IAASo/G,IAC1Bp2B,EAAOhpF,EAAM61F,GACrBwrB,EAAQrhH,QAAQ1D,CACpB,CACA,mBAAA+tF,GACI,OAAOjrF,OAAOqxD,gBAClB,CACH,cAAAwrC,CAAezM,EAAQjtC,EAAOD,EAAQ85C,GAC/B,OAAOH,GAAezM,EAAQjtC,EAAOD,EAAQ85C,EACjD,CACH,UAAAgiB,CAAW5uB,GACJ,MAAMz8C,EAAY8nD,GAAerL,GACjC,SAAUz8C,IAAaA,EAAU0uE,YACrC,EAUJ,MAAMC,GACFjb,gBAAkB,CAAC,EACnBA,0BAAuBnqG,EACvBlC,EACAqrD,EACAqF,QAAS,EACT1pC,QACAwiF,YACA,eAAA+d,CAAgBrI,GACZ,MAAM,EAAEl/G,EAAE,EAAEqrD,GAAOvmD,KAAKi7G,SAAS,CAC7B,IACA,KACDb,GACH,MAAO,CACHl/G,IACAqrD,IAER,CACA,QAAAm8D,GACI,OAAOngC,GAASviF,KAAK9E,IAAMqnF,GAASviF,KAAKumD,EAC7C,CACA,QAAA00D,CAAS14G,EAAOogH,GACZ,MAAM5gB,EAAQ/hG,KAAK0kG,YACnB,IAAKie,IAAU5gB,EAEX,OAAO/hG,KAEX,MAAM6P,EAAM,CAAC,EAIb,OAHAtN,EAAM0uB,SAASp1B,IACXgU,EAAIhU,GAAQkmG,EAAMlmG,IAASkmG,EAAMlmG,GAAM+vD,SAAWm2C,EAAMlmG,GAAM+nG,IAAM5jG,KAAKnE,EAAK,IAE3EgU,CACX,EAGJ,SAASg/E,GAASzC,EAAOvC,GACrB,MAAM+4B,EAAWx2B,EAAMlqE,QAAQ2nE,MACzBg5B,EAyBV,SAA2Bz2B,GACvB,MAAMr/C,EAASq/C,EAAMlqE,QAAQ6qB,OACvBkhD,EAAa7B,EAAM02B,YACnBC,EAAW32B,EAAMqjB,QAAUxhB,GAAclhD,EAAS,EAAI,GACtDi2E,EAAW52B,EAAM62B,WAAah1B,EACpC,OAAO38E,KAAKwtB,MAAMxtB,KAAKpV,IAAI6mH,EAAUC,GACzC,CA/B+BE,CAAkB92B,GACvC+2B,EAAa7xG,KAAKpV,IAAI0mH,EAASQ,eAAiBP,EAAoBA,GACpEQ,EAAeT,EAASrtE,MAAM+tE,QA6CvC,SAAyBz5B,GACtB,MAAM/tF,EAAS,GACf,IAAInB,EAAGwlF,EACP,IAAIxlF,EAAI,EAAGwlF,EAAO0J,EAAMhvF,OAAQF,EAAIwlF,EAAMxlF,IAClCkvF,EAAMlvF,GAAG46C,OACTz5C,EAAOE,KAAKrB,GAGpB,OAAOmB,CACX,CAtDkDynH,CAAgB15B,GAAS,GACjE25B,EAAkBH,EAAaxoH,OAC/B+yB,EAAQy1F,EAAa,GACrBhxF,EAAOgxF,EAAaG,EAAkB,GACtCC,EAAW,GACjB,GAAID,EAAkBL,EAElB,OAgDP,SAAoBt5B,EAAO45B,EAAUJ,EAAcjS,GAChD,IAEIz2G,EAFA6rB,EAAQ,EACRhX,EAAO6zG,EAAa,GAGxB,IADAjS,EAAU9/F,KAAKoyG,KAAKtS,GAChBz2G,EAAI,EAAGA,EAAIkvF,EAAMhvF,OAAQF,IACrBA,IAAM6U,IACNi0G,EAASznH,KAAK6tF,EAAMlvF,IACpB6rB,IACAhX,EAAO6zG,EAAa78F,EAAQ4qF,GAGxC,CA7DQuS,CAAW95B,EAAO45B,EAAUJ,EAAcG,EAAkBL,GACrDM,EAEX,MAAMrS,EAqBT,SAA0BiS,EAAcx5B,EAAOs5B,GAC5C,MAAMS,EA4DT,SAAwBrpH,GACrB,MAAMK,EAAML,EAAIM,OAChB,IAAIF,EAAGwvB,EACP,GAAIvvB,EAAM,EACN,OAAO,EAEX,IAAIuvB,EAAO5vB,EAAI,GAAII,EAAI,EAAGA,EAAIC,IAAOD,EACjC,GAAIJ,EAAII,GAAKJ,EAAII,EAAI,KAAOwvB,EACxB,OAAO,EAGf,OAAOA,CACX,CAxE6B05F,CAAeR,GAClCjS,EAAUvnB,EAAMhvF,OAASsoH,EAC/B,IAAKS,EACD,OAAOtyG,KAAKnV,IAAIi1G,EAAS,GAE7B,MAAM0S,EDzpGN,SAAoBznH,GACpB,MAAMP,EAAS,GACTmsD,EAAO32C,KAAK22C,KAAK5rD,GACvB,IAAI1B,EACJ,IAAIA,EAAI,EAAGA,EAAIstD,EAAMttD,IACb0B,EAAQ1B,IAAM,IACdmB,EAAOE,KAAKrB,GACZmB,EAAOE,KAAKK,EAAQ1B,IAO5B,OAJIstD,KAAiB,EAAPA,IACVnsD,EAAOE,KAAKisD,GAEhBnsD,EAAO+wB,MAAK,CAACxM,EAAGxM,IAAIwM,EAAIxM,IAAGzO,MACpBtJ,CACX,CC0oGoBioH,CAAWH,GAC3B,IAAI,IAAIjpH,EAAI,EAAGwlF,EAAO2jC,EAAQjpH,OAAS,EAAGF,EAAIwlF,EAAMxlF,IAAI,CACpD,MAAMuoG,EAAS4gB,EAAQnpH,GACvB,GAAIuoG,EAASkO,EACT,OAAOlO,CAEf,CACA,OAAO5xF,KAAKnV,IAAIi1G,EAAS,EAC7B,CAnCoB4S,CAAiBX,EAAcx5B,EAAOs5B,GACtD,GAAIK,EAAkB,EAAG,CACrB,IAAI7oH,EAAGwlF,EACP,MAAM8jC,EAAkBT,EAAkB,EAAIlyG,KAAKwwB,OAAOzP,EAAOzE,IAAU41F,EAAkB,IAAM,KAEnG,IADAtqB,GAAKrP,EAAO45B,EAAUrS,EAAS7xB,EAAc0kC,GAAmB,EAAIr2F,EAAQq2F,EAAiBr2F,GACzFjzB,EAAI,EAAGwlF,EAAOqjC,EAAkB,EAAG7oH,EAAIwlF,EAAMxlF,IAC7Cu+F,GAAKrP,EAAO45B,EAAUrS,EAASiS,EAAa1oH,GAAI0oH,EAAa1oH,EAAI,IAGrE,OADAu+F,GAAKrP,EAAO45B,EAAUrS,EAAS/+E,EAAMktD,EAAc0kC,GAAmBp6B,EAAMhvF,OAASw3B,EAAO4xF,GACrFR,CACX,CAEA,OADAvqB,GAAKrP,EAAO45B,EAAUrS,GACfqS,CACX,CA8CC,SAASvqB,GAAKrP,EAAO45B,EAAUrS,EAAS8S,EAAYC,GACjD,MAAM3mG,EAAQkiE,EAAewkC,EAAY,GACnCzmG,EAAMnM,KAAKpV,IAAIwjF,EAAeykC,EAAUt6B,EAAMhvF,QAASgvF,EAAMhvF,QACnE,IACIA,EAAQF,EAAG6U,EADXgX,EAAQ,EAQZ,IANA4qF,EAAU9/F,KAAKoyG,KAAKtS,GAChB+S,IACAtpH,EAASspH,EAAWD,EACpB9S,EAAUv2G,EAASyW,KAAKwtB,MAAMjkC,EAASu2G,IAE3C5hG,EAAOgO,EACDhO,EAAO,GACTgX,IACAhX,EAAO8B,KAAKwwB,MAAMtkB,EAAQgJ,EAAQ4qF,GAEtC,IAAIz2G,EAAI2W,KAAKnV,IAAIqhB,EAAO,GAAI7iB,EAAI8iB,EAAK9iB,IAC7BA,IAAM6U,IACNi0G,EAASznH,KAAK6tF,EAAMlvF,IACpB6rB,IACAhX,EAAO8B,KAAKwwB,MAAMtkB,EAAQgJ,EAAQ4qF,GAG9C,CAeA,MACMgT,GAAiB,CAACh4B,EAAOkkB,EAAMvjE,IAAkB,QAATujE,GAA2B,SAATA,EAAkBlkB,EAAMkkB,GAAQvjE,EAASq/C,EAAMkkB,GAAQvjE,EACjHs3E,GAAgB,CAACC,EAAalB,IAAgB9xG,KAAKpV,IAAIknH,GAAiBkB,EAAaA,GAC1F,SAAS3xF,GAAOp4B,EAAKgqH,GAClB,MAAMzoH,EAAS,GACT0oH,EAAYjqH,EAAIM,OAAS0pH,EACzB3pH,EAAML,EAAIM,OAChB,IAAIF,EAAI,EACR,KAAMA,EAAIC,EAAKD,GAAK6pH,EAChB1oH,EAAOE,KAAKzB,EAAI+W,KAAKwtB,MAAMnkC,KAE/B,OAAOmB,CACX,CACC,SAAS2oH,GAAoBr4B,EAAO78E,EAAOm1G,GACxC,MAAM7pH,EAASuxF,EAAMvC,MAAMhvF,OACrB8pH,EAAarzG,KAAKpV,IAAIqT,EAAO1U,EAAS,GACtC2iB,EAAQ4uE,EAAM4qB,YACdv5F,EAAM2uE,EAAM6qB,UACZh1B,EAAU,KAChB,IACIl1C,EADA63E,EAAYx4B,EAAMujB,gBAAgBgV,GAEtC,KAAID,IAEI33E,EADW,IAAXlyC,EACSyW,KAAKnV,IAAIyoH,EAAYpnG,EAAOC,EAAMmnG,GAC1B,IAAVr1G,GACG68E,EAAMujB,gBAAgB,GAAKiV,GAAa,GAExCA,EAAYx4B,EAAMujB,gBAAgBgV,EAAa,IAAM,EAEnEC,GAAaD,EAAap1G,EAAQw9B,GAAUA,EACxC63E,EAAYpnG,EAAQykE,GAAW2iC,EAAYnnG,EAAMwkE,IAIzD,OAAO2iC,CACX,CAcC,SAASC,GAAkB3iG,GACxB,OAAOA,EAAQ8rE,UAAY9rE,EAAQ+rE,WAAa,CACpD,CACC,SAAS62B,GAAe5iG,EAAS4yC,GAC9B,IAAK5yC,EAAQkV,QACT,OAAO,EAEX,MAAMg0D,EAAOmK,GAAOrzE,EAAQkpE,KAAMt2B,GAC5B04B,EAAU8H,GAAUpzE,EAAQsrE,SAElC,OADcrhE,EAAQjK,EAAQjD,MAAQiD,EAAQjD,KAAKpkB,OAAS,GAC7CuwF,EAAKphD,WAAawjD,EAAQpqC,MAC7C,CAcA,SAAS2hE,GAAW3/B,EAAO9wC,EAAU0rC,GAChC,IAAInwE,EAAMs1E,GAAmBC,GAI9B,OAHIpF,GAAwB,UAAb1rC,IAAyB0rC,GAAwB,UAAb1rC,KAC/CzkC,EA7Ea,CAACu1E,GAAkB,SAAVA,EAAmB,QAAoB,UAAVA,EAAoB,OAASA,EA6E1E4/B,CAAan1G,IAEhBA,CACX,CAwCA,MAAMo1G,WAAczC,GAChB,WAAAp3F,CAAYi4E,GACRsO,QACC3xG,KAAKgN,GAAKq2F,EAAIr2F,GACdhN,KAAKc,KAAOuiG,EAAIviG,KAChBd,KAAKkiB,aAAU9kB,EACf4C,KAAK4lB,IAAMy9E,EAAIz9E,IACf5lB,KAAK8pF,MAAQuZ,EAAIvZ,MACjB9pF,KAAKgjD,SAAM5lD,EACX4C,KAAKkjD,YAAS9lD,EACd4C,KAAKijD,UAAO7lD,EACZ4C,KAAKmjD,WAAQ/lD,EACb4C,KAAKqjD,WAAQjmD,EACb4C,KAAKojD,YAAShmD,EACf4C,KAAKklH,SAAW,CACZjiE,KAAM,EACNE,MAAO,EACPH,IAAK,EACLE,OAAQ,GAEXljD,KAAKs0F,cAAWl3F,EAChB4C,KAAKo9F,eAAYhgG,EACjB4C,KAAK+jD,gBAAa3mD,EAClB4C,KAAKikD,mBAAgB7mD,EACrB4C,KAAK8jD,iBAAc1mD,EACnB4C,KAAKgkD,kBAAe5mD,EACpB4C,KAAKw4D,UAAOp7D,EACZ4C,KAAKmlH,mBAAgB/nH,EACtB4C,KAAK9D,SAAMkB,EACX4C,KAAK7D,SAAMiB,EACX4C,KAAKolH,YAAShoH,EACb4C,KAAK6pF,MAAQ,GACb7pF,KAAKqlH,eAAiB,KACtBrlH,KAAKslH,YAAc,KACnBtlH,KAAKulH,YAAc,KACpBvlH,KAAKyvG,QAAU,EACfzvG,KAAKijH,WAAa,EAClBjjH,KAAKwlH,kBAAoB,CAAC,EACzBxlH,KAAKg3G,iBAAc55G,EACnB4C,KAAKi3G,eAAY75G,EAClB4C,KAAK+5G,gBAAiB,EACtB/5G,KAAKylH,cAAWroH,EAChB4C,KAAK0lH,cAAWtoH,EAChB4C,KAAK2lH,mBAAgBvoH,EACrB4C,KAAK4lH,mBAAgBxoH,EACrB4C,KAAK6lH,aAAe,EACpB7lH,KAAK8lH,aAAe,EACpB9lH,KAAKqvG,OAAS,CAAC,EACfrvG,KAAK+lH,mBAAoB,EACzB/lH,KAAKioG,cAAW7qG,CACpB,CACH,IAAAopC,CAAKtkB,GACEliB,KAAKkiB,QAAUA,EAAQ/N,WAAWnU,KAAKkU,cACvClU,KAAKw4D,KAAOt2C,EAAQs2C,KACpBx4D,KAAK0lH,SAAW1lH,KAAK6D,MAAMqe,EAAQhmB,KACnC8D,KAAKylH,SAAWzlH,KAAK6D,MAAMqe,EAAQ/lB,KACnC6D,KAAK4lH,cAAgB5lH,KAAK6D,MAAMqe,EAAQ8jG,cACxChmH,KAAK2lH,cAAgB3lH,KAAK6D,MAAMqe,EAAQ+jG,aAC5C,CACH,KAAApiH,CAAM+oG,EAAKr9F,GACJ,OAAOq9F,CACX,CACH,aAAA5mB,GACO,IAAI,SAAE0/B,EAAS,SAAED,EAAS,cAAEG,EAAc,cAAED,GAAmB3lH,KAK/D,OAJA0lH,EAAWjmC,EAAgBimC,EAAUpiH,OAAOo+E,mBAC5C+jC,EAAWhmC,EAAgBgmC,EAAUniH,OAAOuoG,mBAC5C+Z,EAAgBnmC,EAAgBmmC,EAAetiH,OAAOo+E,mBACtDikC,EAAgBlmC,EAAgBkmC,EAAeriH,OAAOuoG,mBAC/C,CACH3vG,IAAKujF,EAAgBimC,EAAUE,GAC/BzpH,IAAKsjF,EAAgBgmC,EAAUE,GAC/B7/B,WAAYtG,EAAekmC,GAC3B3/B,WAAYvG,EAAeimC,GAEnC,CACH,SAAAha,CAAUC,GACH,IACIvpB,GADA,IAAEjmF,EAAI,IAAEC,EAAI,WAAE2pF,EAAW,WAAEC,GAAgB/lF,KAAKgmF,gBAEpD,GAAIF,GAAcC,EACd,MAAO,CACH7pF,MACAC,OAGR,MAAM+pH,EAAQlmH,KAAKmmG,0BACnB,IAAI,IAAIxrG,EAAI,EAAGwlF,EAAO+lC,EAAMrrH,OAAQF,EAAIwlF,IAAQxlF,EAC5CwnF,EAAQ+jC,EAAMvrH,GAAG0rG,WAAWoF,UAAUzrG,KAAM0rG,GACvC5lB,IACD5pF,EAAMoV,KAAKpV,IAAIA,EAAKimF,EAAMjmF,MAEzB6pF,IACD5pF,EAAMmV,KAAKnV,IAAIA,EAAKgmF,EAAMhmF,MAKlC,OAFAD,EAAM6pF,GAAc7pF,EAAMC,EAAMA,EAAMD,EACtCC,EAAM2pF,GAAc5pF,EAAMC,EAAMD,EAAMC,EAC/B,CACHD,IAAKujF,EAAgBvjF,EAAKujF,EAAgBtjF,EAAKD,IAC/CC,IAAKsjF,EAAgBtjF,EAAKsjF,EAAgBvjF,EAAKC,IAEvD,CACH,UAAA0gH,GACO,MAAO,CACH55D,KAAMjjD,KAAK8jD,aAAe,EAC1Bd,IAAKhjD,KAAK+jD,YAAc,EACxBZ,MAAOnjD,KAAKgkD,cAAgB,EAC5Bd,OAAQljD,KAAKikD,eAAiB,EAEtC,CACH,QAAAkiE,GACO,OAAOnmH,KAAK6pF,KAChB,CACH,SAAAmhB,GACO,MAAM1kG,EAAOtG,KAAK8pF,MAAMxjF,KACxB,OAAOtG,KAAKkiB,QAAQ6oF,SAAW/qG,KAAKk2G,eAAiB5vG,EAAK8/G,QAAU9/G,EAAK+/G,UAAY//G,EAAKykG,QAAU,EACxG,CACH,aAAAub,CAAc9Z,EAAYxsG,KAAK8pF,MAAM0iB,WAE9B,OADcxsG,KAAKslH,cAAgBtlH,KAAKslH,YAActlH,KAAKumH,mBAAmB/Z,GAElF,CACA,YAAAmS,GACI3+G,KAAKqvG,OAAS,CAAC,EACfrvG,KAAK+lH,mBAAoB,CAC7B,CACA,YAAAS,GACIlhG,EAAStlB,KAAKkiB,QAAQskG,aAAc,CAChCxmH,MAER,CACH,MAAA8jG,CAAOxP,EAAU8I,EAAWD,GACrB,MAAM,YAAE1P,EAAY,MAAEG,EAAQ/D,MAAO+4B,GAAc5iH,KAAKkiB,QAClDukG,EAAa7D,EAAS6D,WAC5BzmH,KAAKwmH,eACLxmH,KAAKs0F,SAAWA,EAChBt0F,KAAKo9F,UAAYA,EACjBp9F,KAAKklH,SAAW/nB,EAAU9hG,OAAOyE,OAAO,CACpCmjD,KAAM,EACNE,MAAO,EACPH,IAAK,EACLE,OAAQ,GACTi6C,GACHn9F,KAAK6pF,MAAQ,KACb7pF,KAAKulH,YAAc,KACnBvlH,KAAKqlH,eAAiB,KACtBrlH,KAAKslH,YAAc,KACnBtlH,KAAK0mH,sBACL1mH,KAAK2mH,gBACL3mH,KAAK4mH,qBACL5mH,KAAKijH,WAAajjH,KAAKk2G,eAAiBl2G,KAAKqjD,MAAQ85C,EAAQl6C,KAAOk6C,EAAQh6C,MAAQnjD,KAAKojD,OAAS+5C,EAAQn6C,IAAMm6C,EAAQj6C,OACnHljD,KAAK+lH,oBACN/lH,KAAK6mH,mBACL7mH,KAAK8mH,sBACL9mH,KAAK+mH,kBACL/mH,KAAKolH,OD9sEb,SAAmB4B,EAAQp5B,EAAOH,GAClC,MAAM,IAAEvxF,EAAI,IAAEC,GAAS6qH,EACjBluE,EAAS6mC,EAAYiO,GAAQzxF,EAAMD,GAAO,GAC1C+qH,EAAW,CAAC5qH,EAAOmM,IAAMilF,GAAyB,IAAVpxF,EAAc,EAAIA,EAAQmM,EACxE,MAAO,CACHtM,IAAK+qH,EAAS/qH,GAAMoV,KAAK4pC,IAAIpC,IAC7B38C,IAAK8qH,EAAS9qH,EAAK28C,GAE3B,CCssE0BouE,CAAUlnH,KAAM4tF,EAAOH,GACrCztF,KAAK+lH,mBAAoB,GAE7B/lH,KAAKmnH,mBACLnnH,KAAK6pF,MAAQ7pF,KAAKonH,cAAgB,GAClCpnH,KAAKqnH,kBACL,MAAMC,EAAkBb,EAAazmH,KAAK6pF,MAAMhvF,OAChDmF,KAAKunH,sBAAsBD,EAAkB30F,GAAO3yB,KAAK6pF,MAAO48B,GAAczmH,KAAK6pF,OACnF7pF,KAAK+9C,YACL/9C,KAAKwnH,+BACLxnH,KAAKynH,yBACLznH,KAAK0nH,8BACD9E,EAASxrF,UAAYwrF,EAAS/zB,UAAgC,SAApB+zB,EAASjjH,UACnDK,KAAK6pF,MAAQgF,GAAS7uF,KAAMA,KAAK6pF,OACjC7pF,KAAKulH,YAAc,KACnBvlH,KAAK2nH,iBAELL,GACAtnH,KAAKunH,sBAAsBvnH,KAAK6pF,OAEpC7pF,KAAK4nH,YACL5nH,KAAK6nH,MACL7nH,KAAK8nH,WACL9nH,KAAK+nH,aACT,CACH,SAAAhqE,GACO,IACIy5D,EAAYE,EADZsQ,EAAgBhoH,KAAKkiB,QAAQ89D,QAE7BhgF,KAAKk2G,gBACLsB,EAAax3G,KAAKijD,KAClBy0D,EAAW13G,KAAKmjD,QAEhBq0D,EAAax3G,KAAKgjD,IAClB00D,EAAW13G,KAAKkjD,OAChB8kE,GAAiBA,GAErBhoH,KAAKg3G,YAAcQ,EACnBx3G,KAAKi3G,UAAYS,EACjB13G,KAAK+5G,eAAiBiO,EACtBhoH,KAAKyvG,QAAUiI,EAAWF,EAC1Bx3G,KAAKioH,eAAiBjoH,KAAKkiB,QAAQgmG,aACvC,CACA,WAAAH,GACIziG,EAAStlB,KAAKkiB,QAAQ6lG,YAAa,CAC/B/nH,MAER,CACA,mBAAA0mH,GACIphG,EAAStlB,KAAKkiB,QAAQwkG,oBAAqB,CACvC1mH,MAER,CACA,aAAA2mH,GACQ3mH,KAAKk2G,gBACLl2G,KAAKqjD,MAAQrjD,KAAKs0F,SAClBt0F,KAAKijD,KAAO,EACZjjD,KAAKmjD,MAAQnjD,KAAKqjD,QAElBrjD,KAAKojD,OAASpjD,KAAKo9F,UACnBp9F,KAAKgjD,IAAM,EACXhjD,KAAKkjD,OAASljD,KAAKojD,QAEvBpjD,KAAK8jD,YAAc,EACnB9jD,KAAK+jD,WAAa,EAClB/jD,KAAKgkD,aAAe,EACpBhkD,KAAKikD,cAAgB,CACzB,CACA,kBAAA2iE,GACIthG,EAAStlB,KAAKkiB,QAAQ0kG,mBAAoB,CACtC5mH,MAER,CACA,UAAAmoH,CAAW5oH,GACPS,KAAK8pF,MAAMs+B,cAAc7oH,EAAMS,KAAKkU,cACpCoR,EAAStlB,KAAKkiB,QAAQ3iB,GAAO,CACzBS,MAER,CACA,gBAAA6mH,GACI7mH,KAAKmoH,WAAW,mBACpB,CACA,mBAAArB,GAAuB,CACvB,eAAAC,GACI/mH,KAAKmoH,WAAW,kBACpB,CACA,gBAAAhB,GACInnH,KAAKmoH,WAAW,mBACpB,CACH,UAAAf,GACO,MAAO,EACX,CACA,eAAAC,GACIrnH,KAAKmoH,WAAW,kBACpB,CACA,2BAAAE,GACI/iG,EAAStlB,KAAKkiB,QAAQmmG,4BAA6B,CAC/CroH,MAER,CACH,kBAAAsoH,CAAmBz+B,GACZ,MAAM+4B,EAAW5iH,KAAKkiB,QAAQ2nE,MAC9B,IAAIlvF,EAAGwlF,EAAMsiB,EACb,IAAI9nG,EAAI,EAAGwlF,EAAO0J,EAAMhvF,OAAQF,EAAIwlF,EAAMxlF,IACtC8nG,EAAO5Y,EAAMlvF,GACb8nG,EAAK/oE,MAAQpU,EAASs9F,EAASt9F,SAAU,CACrCm9E,EAAKpmG,MACL1B,EACAkvF,GACD7pF,KAEX,CACA,0BAAAuoH,GACIjjG,EAAStlB,KAAKkiB,QAAQqmG,2BAA4B,CAC9CvoH,MAER,CACA,4BAAAwnH,GACIliG,EAAStlB,KAAKkiB,QAAQslG,6BAA8B,CAChDxnH,MAER,CACA,sBAAAynH,GACI,MAAMvlG,EAAUliB,KAAKkiB,QACf0gG,EAAW1gG,EAAQ2nE,MACnB2+B,EAAWnE,GAAcrkH,KAAK6pF,MAAMhvF,OAAQqnB,EAAQ2nE,MAAMu5B,eAC1D50B,EAAco0B,EAASp0B,aAAe,EACtCC,EAAcm0B,EAASn0B,YAC7B,IACIP,EAAWkP,EAAWqrB,EADtBtD,EAAgB32B,EAEpB,IAAKxuF,KAAK0oH,eAAiB9F,EAASxrF,SAAWo3D,GAAeC,GAAe+5B,GAAY,IAAMxoH,KAAKk2G,eAEhG,YADAl2G,KAAKmlH,cAAgB32B,GAGzB,MAAMm6B,EAAa3oH,KAAK4oH,iBAClBC,EAAgBF,EAAWG,OAAOzlE,MAClC0lE,EAAiBJ,EAAWK,QAAQ5lE,OACpCkxC,EAAWrQ,GAAYjkF,KAAK8pF,MAAMzmC,MAAQwlE,EAAe,EAAG7oH,KAAKs0F,UACvEpG,EAAYhsE,EAAQ6qB,OAAS/sC,KAAKs0F,SAAWk0B,EAAWl0B,GAAYk0B,EAAW,GAC3EK,EAAgB,EAAI36B,IACpBA,EAAYoG,GAAYk0B,GAAYtmG,EAAQ6qB,OAAS,GAAM,IAC3DqwD,EAAYp9F,KAAKo9F,UAAYynB,GAAkB3iG,EAAQ2rE,MAAQ+0B,EAASp1B,QAAUs3B,GAAe5iG,EAAQxB,MAAO1gB,KAAK8pF,MAAM5nE,QAAQkpE,MACnIq9B,EAAmBn3G,KAAK22C,KAAK4gE,EAAgBA,EAAgBE,EAAiBA,GAC9E5D,EAAgBxiC,GAAUrxE,KAAKpV,IAAIoV,KAAK23G,KAAKhlC,IAAa0kC,EAAWK,QAAQ5lE,OAAS,GAAK8qC,GAAY,EAAG,IAAK58E,KAAK23G,KAAKhlC,GAAYmZ,EAAYqrB,GAAmB,EAAG,IAAMn3G,KAAK23G,KAAKhlC,GAAY8kC,EAAiBN,GAAmB,EAAG,MAC1OtD,EAAgB7zG,KAAKnV,IAAIqyF,EAAal9E,KAAKpV,IAAIuyF,EAAa02B,KAEhEnlH,KAAKmlH,cAAgBA,CACzB,CACA,2BAAAuC,GACIpiG,EAAStlB,KAAKkiB,QAAQwlG,4BAA6B,CAC/C1nH,MAER,CACA,aAAA2nH,GAAiB,CACjB,SAAAC,GACItiG,EAAStlB,KAAKkiB,QAAQ0lG,UAAW,CAC7B5nH,MAER,CACA,GAAA6nH,GACI,MAAMlT,EAAU,CACZtxD,MAAO,EACPD,OAAQ,IAEN,MAAE0mC,EAAQ5nE,SAAW2nE,MAAO+4B,EAAWliG,MAAOwoG,EAAYr7B,KAAMs7B,IAAiBnpH,KACjFo3B,EAAUp3B,KAAK0oH,aACfxS,EAAel2G,KAAKk2G,eAC1B,GAAI9+E,EAAS,CACT,MAAMgyF,EAActE,GAAeoE,EAAWp/B,EAAM5nE,QAAQkpE,MAQ5D,GAPI8qB,GACAvB,EAAQtxD,MAAQrjD,KAAKs0F,SACrBqgB,EAAQvxD,OAASyhE,GAAkBsE,GAAYC,IAE/CzU,EAAQvxD,OAASpjD,KAAKo9F,UACtBuX,EAAQtxD,MAAQwhE,GAAkBsE,GAAYC,GAE9CxG,EAASxrF,SAAWp3B,KAAK6pF,MAAMhvF,OAAQ,CACvC,MAAM,MAAE+yB,EAAM,KAAEyE,EAAK,OAAEy2F,EAAO,QAAEE,GAAahpH,KAAK4oH,iBAC5CS,EAAiC,EAAnBzG,EAASp1B,QACvB87B,EAAe7mC,GAAUziF,KAAKmlH,eAC9Br9B,EAAMx2E,KAAKw2E,IAAIwhC,GACfziC,EAAMv1E,KAAKu1E,IAAIyiC,GACrB,GAAIpT,EAAc,CACd,MAAMqT,EAAc3G,EAASl0B,OAAS,EAAI7H,EAAMiiC,EAAOzlE,MAAQykC,EAAMkhC,EAAQ5lE,OAC7EuxD,EAAQvxD,OAAS9xC,KAAKpV,IAAI8D,KAAKo9F,UAAWuX,EAAQvxD,OAASmmE,EAAcF,EAC7E,KAAO,CACH,MAAMG,EAAa5G,EAASl0B,OAAS,EAAI5G,EAAMghC,EAAOzlE,MAAQwjC,EAAMmiC,EAAQ5lE,OAC5EuxD,EAAQtxD,MAAQ/xC,KAAKpV,IAAI8D,KAAKs0F,SAAUqgB,EAAQtxD,MAAQmmE,EAAaH,EACzE,CACArpH,KAAKypH,kBAAkB77F,EAAOyE,EAAMw0D,EAAKiB,EAC7C,CACJ,CACA9nF,KAAK0pH,iBACDxT,GACAl2G,KAAKqjD,MAAQrjD,KAAKyvG,QAAU3lB,EAAMzmC,MAAQrjD,KAAKklH,SAASjiE,KAAOjjD,KAAKklH,SAAS/hE,MAC7EnjD,KAAKojD,OAASuxD,EAAQvxD,SAEtBpjD,KAAKqjD,MAAQsxD,EAAQtxD,MACrBrjD,KAAKojD,OAASpjD,KAAKyvG,QAAU3lB,EAAM1mC,OAASpjD,KAAKklH,SAASliE,IAAMhjD,KAAKklH,SAAShiE,OAEtF,CACA,iBAAAumE,CAAkB77F,EAAOyE,EAAMw0D,EAAKiB,GAChC,MAAQ+B,OAAO,MAAEzE,EAAM,QAAEoI,GAAW,SAAEl5C,GAAct0C,KAAKkiB,QACnDynG,EAAmC,IAAvB3pH,KAAKmlH,cACjByE,EAAgC,QAAbt1E,GAAoC,MAAdt0C,KAAKw4D,KACpD,GAAIx4D,KAAKk2G,eAAgB,CACrB,MAAM7wD,EAAarlD,KAAK2vG,gBAAgB,GAAK3vG,KAAKijD,KAC5C4mE,EAAc7pH,KAAKmjD,MAAQnjD,KAAK2vG,gBAAgB3vG,KAAK6pF,MAAMhvF,OAAS,GAC1E,IAAIipD,EAAc,EACdE,EAAe,EACf2lE,EACIC,GACA9lE,EAAcgkC,EAAMl6D,EAAMy1B,MAC1BW,EAAe6iC,EAAMx0D,EAAK+wB,SAE1BU,EAAc+iC,EAAMj5D,EAAMw1B,OAC1BY,EAAe8jC,EAAMz1D,EAAKgxB,OAEb,UAAV+hC,EACPphC,EAAe3xB,EAAKgxB,MACH,QAAV+hC,EACPthC,EAAcl2B,EAAMy1B,MACH,UAAV+hC,IACPthC,EAAcl2B,EAAMy1B,MAAQ,EAC5BW,EAAe3xB,EAAKgxB,MAAQ,GAEhCrjD,KAAK8jD,YAAcxyC,KAAKnV,KAAK2nD,EAAcuB,EAAamoC,GAAWxtF,KAAKqjD,OAASrjD,KAAKqjD,MAAQgC,GAAa,GAC3GrlD,KAAKgkD,aAAe1yC,KAAKnV,KAAK6nD,EAAe6lE,EAAcr8B,GAAWxtF,KAAKqjD,OAASrjD,KAAKqjD,MAAQwmE,GAAc,EACnH,KAAO,CACH,IAAI9lE,EAAa1xB,EAAK+wB,OAAS,EAC3Ba,EAAgBr2B,EAAMw1B,OAAS,EACrB,UAAVgiC,GACArhC,EAAa,EACbE,EAAgBr2B,EAAMw1B,QACL,QAAVgiC,IACPrhC,EAAa1xB,EAAK+wB,OAClBa,EAAgB,GAEpBjkD,KAAK+jD,WAAaA,EAAaypC,EAC/BxtF,KAAKikD,cAAgBA,EAAgBupC,CACzC,CACJ,CACH,cAAAk8B,GACW1pH,KAAKklH,WACLllH,KAAKklH,SAASjiE,KAAO3xC,KAAKnV,IAAI6D,KAAK8jD,YAAa9jD,KAAKklH,SAASjiE,MAC9DjjD,KAAKklH,SAASliE,IAAM1xC,KAAKnV,IAAI6D,KAAK+jD,WAAY/jD,KAAKklH,SAASliE,KAC5DhjD,KAAKklH,SAAS/hE,MAAQ7xC,KAAKnV,IAAI6D,KAAKgkD,aAAchkD,KAAKklH,SAAS/hE,OAChEnjD,KAAKklH,SAAShiE,OAAS5xC,KAAKnV,IAAI6D,KAAKikD,cAAejkD,KAAKklH,SAAShiE,QAE1E,CACA,QAAA4kE,GACIxiG,EAAStlB,KAAKkiB,QAAQ4lG,SAAU,CAC5B9nH,MAER,CACH,YAAAk2G,GACO,MAAM,KAAE19C,EAAK,SAAElkB,GAAct0C,KAAKkiB,QAClC,MAAoB,QAAboyB,GAAmC,WAAbA,GAAkC,MAATkkB,CAC1D,CACH,UAAAsxD,GACO,OAAO9pH,KAAKkiB,QAAQm6F,QACxB,CACH,qBAAAkL,CAAsB19B,GAGf,IAAIlvF,EAAGwlF,EACP,IAHAngF,KAAKqoH,8BACLroH,KAAKsoH,mBAAmBz+B,GAEpBlvF,EAAI,EAAGwlF,EAAO0J,EAAMhvF,OAAQF,EAAIwlF,EAAMxlF,IAClC4kF,EAAcsK,EAAMlvF,GAAG++B,SACvBmwD,EAAMh+D,OAAOlxB,EAAG,GAChBwlF,IACAxlF,KAGRqF,KAAKuoH,4BACT,CACH,cAAAK,GACO,IAAID,EAAa3oH,KAAKulH,YACtB,IAAKoD,EAAY,CACb,MAAMlC,EAAazmH,KAAKkiB,QAAQ2nE,MAAM48B,WACtC,IAAI58B,EAAQ7pF,KAAK6pF,MACb48B,EAAa58B,EAAMhvF,SACnBgvF,EAAQl3D,GAAOk3D,EAAO48B,IAE1BzmH,KAAKulH,YAAcoD,EAAa3oH,KAAK+pH,mBAAmBlgC,EAAOA,EAAMhvF,OAAQmF,KAAKkiB,QAAQ2nE,MAAMu5B,cACpG,CACA,OAAOuF,CACX,CACH,kBAAAoB,CAAmBlgC,EAAOhvF,EAAQuoH,GAC3B,MAAM,IAAEx9F,EAAM4/F,kBAAmBwE,GAAYhqH,KACvCiqH,EAAS,GACTC,EAAU,GACV1F,EAAYlzG,KAAKwtB,MAAMjkC,EAASwpH,GAAcxpH,EAAQuoH,IAC5D,IAEIzoH,EAAG0I,EAAGusF,EAAMl2D,EAAOywF,EAAUC,EAAYtqF,EAAOkK,EAAYqZ,EAAOD,EAAQinE,EAF3EC,EAAkB,EAClBC,EAAmB,EAEvB,IAAI5vH,EAAI,EAAGA,EAAIE,EAAQF,GAAK6pH,EAAU,CAUlC,GATA9qF,EAAQmwD,EAAMlvF,GAAG++B,MACjBywF,EAAWnqH,KAAKwqH,wBAAwB7vH,GACxCirB,EAAIwlE,KAAOg/B,EAAaD,EAAS5qF,OACjCO,EAAQkqF,EAAOI,GAAcJ,EAAOI,IAAe,CAC/C9jH,KAAM,CAAC,EACP+oF,GAAI,IAERrlD,EAAamgF,EAASngF,WACtBqZ,EAAQD,EAAS,EACZm8B,EAAc7lD,IAAWvN,EAAQuN,IAG/B,GAAIvN,EAAQuN,GACf,IAAIr2B,EAAI,EAAGusF,EAAOl2D,EAAM7+B,OAAQwI,EAAIusF,IAAQvsF,EACxCgnH,EAAe3wF,EAAMr2B,GAChBk8E,EAAc8qC,IAAiBl+F,EAAQk+F,KACxChnE,EAAQ+rC,GAAaxpE,EAAKka,EAAMx5B,KAAMw5B,EAAMuvD,GAAIhsC,EAAOgnE,GACvDjnE,GAAUpZ,QAPlBqZ,EAAQ+rC,GAAaxpE,EAAKka,EAAMx5B,KAAMw5B,EAAMuvD,GAAIhsC,EAAO3pB,GACvD0pB,EAASpZ,EAUbigF,EAAOjuH,KAAKqnD,GACZ6mE,EAAQluH,KAAKonD,GACbknE,EAAkBh5G,KAAKnV,IAAIknD,EAAOinE,GAClCC,EAAmBj5G,KAAKnV,IAAIinD,EAAQmnE,EACxC,EA7iBP,SAAwBP,EAAQnvH,GAC7B81B,EAAKq5F,GAASlqF,IACV,MAAMuvD,EAAKvvD,EAAMuvD,GACXW,EAAQX,EAAGx0F,OAAS,EAC1B,IAAIF,EACJ,GAAIq1F,EAAQn1F,EAAQ,CAChB,IAAIF,EAAI,EAAGA,EAAIq1F,IAASr1F,SACbmlC,EAAMx5B,KAAK+oF,EAAG10F,IAEzB00F,EAAGxjE,OAAO,EAAGmkE,EACjB,IAER,CAkiBQL,CAAeq6B,EAAQnvH,GACvB,MAAMiuH,EAASmB,EAAOzlH,QAAQ8lH,GACxBtB,EAAUkB,EAAQ1lH,QAAQ+lH,GAC1BE,EAAWjsF,IAAM,CACf6kB,MAAO4mE,EAAOzrF,IAAQ,EACtB4kB,OAAQ8mE,EAAQ1rF,IAAQ,IAEhC,MAAO,CACH5Q,MAAO68F,EAAQ,GACfp4F,KAAMo4F,EAAQ5vH,EAAS,GACvBiuH,OAAQ2B,EAAQ3B,GAChBE,QAASyB,EAAQzB,GACjBiB,SACAC,UAER,CACH,gBAAA9d,CAAiB/vG,GACV,OAAOA,CACX,CACH,gBAAA4pF,CAAiB5pF,EAAOkT,GACjB,OAAOi8F,GACX,CACH,gBAAAmM,CAAiBznB,GAAQ,CACzB,eAAAyf,CAAgBpgG,GACT,MAAMs6E,EAAQ7pF,KAAK6pF,MACnB,OAAIt6E,EAAQ,GAAKA,EAAQs6E,EAAMhvF,OAAS,EAC7B,KAEJmF,KAAKimF,iBAAiB4D,EAAMt6E,GAAOlT,MAC9C,CACH,kBAAAo7G,CAAmBiT,GACR1qH,KAAK+5G,iBACL2Q,EAAU,EAAIA,GAElB,MAAMx6B,EAAQlwF,KAAKg3G,YAAc0T,EAAU1qH,KAAKyvG,QAChD,ODluHGxrB,GCkuHgBjkF,KAAKioH,eAAiBh4B,GAAYjwF,KAAK8pF,MAAOoG,EAAO,GAAKA,GDluHtD,MAAO,MCmuHlC,CACH,kBAAAy6B,CAAmBz6B,GACZ,MAAMw6B,GAAWx6B,EAAQlwF,KAAKg3G,aAAeh3G,KAAKyvG,QAClD,OAAOzvG,KAAK+5G,eAAiB,EAAI2Q,EAAUA,CAC/C,CACH,YAAAzU,GACO,OAAOj2G,KAAKimF,iBAAiBjmF,KAAK4qH,eACtC,CACH,YAAAA,GACO,MAAM,IAAE1uH,EAAI,IAAEC,GAAS6D,KACvB,OAAO9D,EAAM,GAAKC,EAAM,EAAIA,EAAMD,EAAM,GAAKC,EAAM,EAAID,EAAM,CACjE,CACH,UAAAgY,CAAW3E,GACJ,MAAMs6E,EAAQ7pF,KAAK6pF,OAAS,GAC5B,GAAIt6E,GAAS,GAAKA,EAAQs6E,EAAMhvF,OAAQ,CACpC,MAAM4nG,EAAO5Y,EAAMt6E,GACnB,OAAOkzF,EAAKwF,WAAaxF,EAAKwF,SAnkB1C,SAA2B1vE,EAAQhpB,EAAOkzF,GACtC,OAAO/M,GAAcn9D,EAAQ,CACzBkqE,OACAlzF,QACAzO,KAAM,QAEd,CA6jBqD+pH,CAAkB7qH,KAAKkU,aAAc3E,EAAOkzF,GACzF,CACA,OAAOziG,KAAKioG,WAAajoG,KAAKioG,SA1kB3BvS,GA0kByD11F,KAAK8pF,MAAM51E,aA1kB9C,CACzBk4E,MAykBqFpsF,KAxkBrFc,KAAM,UAykBV,CACH,SAAAgiH,GACO,MAAMgI,EAAc9qH,KAAKkiB,QAAQ2nE,MAC3BkhC,EAAMtoC,GAAUziF,KAAKmlH,eACrBr9B,EAAMx2E,KAAK4pC,IAAI5pC,KAAKw2E,IAAIijC,IACxBlkC,EAAMv1E,KAAK4pC,IAAI5pC,KAAKu1E,IAAIkkC,IACxBpC,EAAa3oH,KAAK4oH,iBAClBp7B,EAAUs9B,EAAYh8B,iBAAmB,EACzC1e,EAAIu4C,EAAaA,EAAWG,OAAOzlE,MAAQmqC,EAAU,EACrDttD,EAAIyoF,EAAaA,EAAWK,QAAQ5lE,OAASoqC,EAAU,EAC7D,OAAOxtF,KAAKk2G,eAAiBh2E,EAAI4nD,EAAM1X,EAAIyW,EAAMzW,EAAI0X,EAAM5nD,EAAI2mD,EAAM3mD,EAAI2mD,EAAMzW,EAAI0X,EAAM5nD,EAAI4nD,EAAM1X,EAAIyW,CAC3G,CACH,UAAA6hC,GACO,MAAMtxF,EAAUp3B,KAAKkiB,QAAQkV,QAC7B,MAAgB,SAAZA,IACSA,EAENp3B,KAAKmmG,0BAA0BtrG,OAAS,CACnD,CACH,qBAAAmwH,CAAsBxe,GACf,MAAMh0C,EAAOx4D,KAAKw4D,KACZsxB,EAAQ9pF,KAAK8pF,MACb5nE,EAAUliB,KAAKkiB,SACf,KAAE2rE,EAAK,SAAEv5C,EAAS,OAAE+5C,GAAYnsE,EAChC6qB,EAAS8gD,EAAK9gD,OACdmpE,EAAel2G,KAAKk2G,eAEpBoO,EADQtkH,KAAK6pF,MACOhvF,QAAUkyC,EAAS,EAAI,GAC3Ck+E,EAAKpG,GAAkBh3B,GACvB70B,EAAQ,GACRkyD,EAAa78B,EAAOl6E,WAAWnU,KAAKkU,cACpCi3G,EAAYD,EAAW9zF,QAAU8zF,EAAW7nE,MAAQ,EACpD+nE,EAAgBD,EAAY,EAC5BE,EAAmB,SAASn7B,GAC9B,OAAOD,GAAYnG,EAAOoG,EAAOi7B,EACrC,EACA,IAAIG,EAAa3wH,EAAGiqH,EAAW2G,EAC3BC,EAAKC,EAAKC,EAAKC,EAAKC,EAAIC,EAAIC,EAAIC,EACpC,GAAiB,QAAbz3E,EACAg3E,EAAcD,EAAiBrrH,KAAKkjD,QACpCuoE,EAAMzrH,KAAKkjD,OAAS+nE,EACpBU,EAAML,EAAcF,EACpBS,EAAKR,EAAiB7e,EAAUxpD,KAAOooE,EACvCW,EAAKvf,EAAUtpD,YACZ,GAAiB,WAAb5O,EACPg3E,EAAcD,EAAiBrrH,KAAKgjD,KACpC6oE,EAAKrf,EAAUxpD,IACf+oE,EAAKV,EAAiB7e,EAAUtpD,QAAUkoE,EAC1CK,EAAMH,EAAcF,EACpBO,EAAM3rH,KAAKgjD,IAAMioE,OACd,GAAiB,SAAb32E,EACPg3E,EAAcD,EAAiBrrH,KAAKmjD,OACpCqoE,EAAMxrH,KAAKmjD,MAAQ8nE,EACnBS,EAAMJ,EAAcF,EACpBQ,EAAKP,EAAiB7e,EAAUvpD,MAAQmoE,EACxCU,EAAKtf,EAAUrpD,WACZ,GAAiB,UAAb7O,EACPg3E,EAAcD,EAAiBrrH,KAAKijD,MACpC2oE,EAAKpf,EAAUvpD,KACf6oE,EAAKT,EAAiB7e,EAAUrpD,OAASioE,EACzCI,EAAMF,EAAcF,EACpBM,EAAM1rH,KAAKijD,KAAOgoE,OACf,GAAa,MAATzyD,EAAc,CACrB,GAAiB,WAAblkB,EACAg3E,EAAcD,GAAkB7e,EAAUxpD,IAAMwpD,EAAUtpD,QAAU,EAAI,SACrE,GAAIryB,EAASyjB,GAAW,CAC3B,MAAM03E,EAAiB3wH,OAAOmqB,KAAK8uB,GAAU,GACvCj4C,EAAQi4C,EAAS03E,GACvBV,EAAcD,EAAiBrrH,KAAK8pF,MAAMuC,OAAO2/B,GAAgB/lC,iBAAiB5pF,GACtF,CACAwvH,EAAKrf,EAAUxpD,IACf+oE,EAAKvf,EAAUtpD,OACfuoE,EAAMH,EAAcF,EACpBO,EAAMF,EAAMR,CAChB,MAAO,GAAa,MAATzyD,EAAc,CACrB,GAAiB,WAAblkB,EACAg3E,EAAcD,GAAkB7e,EAAUvpD,KAAOupD,EAAUrpD,OAAS,QACjE,GAAItyB,EAASyjB,GAAW,CAC3B,MAAM03E,EAAiB3wH,OAAOmqB,KAAK8uB,GAAU,GACvCj4C,EAAQi4C,EAAS03E,GACvBV,EAAcD,EAAiBrrH,KAAK8pF,MAAMuC,OAAO2/B,GAAgB/lC,iBAAiB5pF,GACtF,CACAmvH,EAAMF,EAAcF,EACpBM,EAAMF,EAAMP,EACZW,EAAKpf,EAAUvpD,KACf6oE,EAAKtf,EAAUrpD,KACnB,CACA,MAAM8oE,EAAQvsC,EAAex9D,EAAQ2nE,MAAMu5B,cAAekB,GACpDzhF,EAAOvxB,KAAKnV,IAAI,EAAGmV,KAAKoyG,KAAKY,EAAc2H,IACjD,IAAItxH,EAAI,EAAGA,EAAI2pH,EAAa3pH,GAAKkoC,EAAK,CAClC,MAAMpkC,EAAUuB,KAAKkU,WAAWvZ,GAC1BuxH,EAAcr+B,EAAK15E,WAAW1V,GAC9B0tH,EAAoB99B,EAAOl6E,WAAW1V,GACtCqvF,EAAYo+B,EAAYp+B,UACxBs+B,EAAYF,EAAYluF,MACxBujE,EAAa4qB,EAAkB79B,MAAQ,GACvCkT,EAAmB2qB,EAAkB59B,WACrCL,EAAYg+B,EAAYh+B,UACxBE,EAAY89B,EAAY99B,UACxBi+B,EAAiBH,EAAYG,gBAAkB,GAC/CC,EAAuBJ,EAAYI,qBACzC1H,EAAYH,GAAoBzkH,KAAMrF,EAAGoyC,QACvB3vC,IAAdwnH,IAGJ2G,EAAmBt7B,GAAYnG,EAAO86B,EAAW92B,GAC7CooB,EACAsV,EAAME,EAAME,EAAKE,EAAKP,EAEtBE,EAAME,EAAME,EAAKE,EAAKR,EAE1BvyD,EAAMh9D,KAAK,CACPwvH,MACAC,MACAC,MACAC,MACAC,KACAC,KACAC,KACAC,KACA1oE,MAAOyqC,EACP9vD,MAAOouF,EACP7qB,aACAC,mBACAtT,YACAE,YACAi+B,iBACAC,yBAER,CAGA,OAFAtsH,KAAK6lH,aAAevB,EACpBtkH,KAAK8lH,aAAewF,EACbtyD,CACX,CACH,kBAAAutD,CAAmB/Z,GACZ,MAAMh0C,EAAOx4D,KAAKw4D,KACZt2C,EAAUliB,KAAKkiB,SACf,SAAEoyB,EAAWu1C,MAAOihC,GAAiB5oG,EACrCg0F,EAAel2G,KAAKk2G,eACpBrsB,EAAQ7pF,KAAK6pF,OACb,MAAEzE,EAAM,WAAE4J,EAAW,QAAExB,EAAQ,OAAEkB,GAAYo8B,EAC7CG,EAAKpG,GAAkB3iG,EAAQ2rE,MAC/B0+B,EAAiBtB,EAAKz9B,EACtBg/B,EAAkB99B,GAAUlB,EAAU++B,EACtCt7B,GAAYxO,GAAUziF,KAAKmlH,eAC3BnsD,EAAQ,GACd,IAAIr+D,EAAGwlF,EAAMsiB,EAAM/oE,EAAOx+B,EAAGqrD,EAAG2tC,EAAWhE,EAAO9E,EAAMphD,EAAYyiF,EAAWC,EAC3Ev4B,EAAe,SACnB,GAAiB,QAAb7/C,EACAiS,EAAIvmD,KAAKkjD,OAASspE,EAClBt4B,EAAYl0F,KAAK2sH,+BACd,GAAiB,WAAbr4E,EACPiS,EAAIvmD,KAAKgjD,IAAMwpE,EACft4B,EAAYl0F,KAAK2sH,+BACd,GAAiB,SAAbr4E,EAAqB,CAC5B,MAAMzkC,EAAM7P,KAAK4sH,wBAAwB3B,GACzC/2B,EAAYrkF,EAAIqkF,UAChBh5F,EAAI2U,EAAI3U,CACZ,MAAO,GAAiB,UAAbo5C,EAAsB,CAC7B,MAAMzkC,EAAM7P,KAAK4sH,wBAAwB3B,GACzC/2B,EAAYrkF,EAAIqkF,UAChBh5F,EAAI2U,EAAI3U,CACZ,MAAO,GAAa,MAATs9D,EAAc,CACrB,GAAiB,WAAblkB,EACAiS,GAAKimD,EAAUxpD,IAAMwpD,EAAUtpD,QAAU,EAAIqpE,OAC1C,GAAI17F,EAASyjB,GAAW,CAC3B,MAAM03E,EAAiB3wH,OAAOmqB,KAAK8uB,GAAU,GACvCj4C,EAAQi4C,EAAS03E,GACvBzlE,EAAIvmD,KAAK8pF,MAAMuC,OAAO2/B,GAAgB/lC,iBAAiB5pF,GAASkwH,CACpE,CACAr4B,EAAYl0F,KAAK2sH,yBACrB,MAAO,GAAa,MAATn0D,EAAc,CACrB,GAAiB,WAAblkB,EACAp5C,GAAKsxG,EAAUvpD,KAAOupD,EAAUrpD,OAAS,EAAIopE,OAC1C,GAAI17F,EAASyjB,GAAW,CAC3B,MAAM03E,EAAiB3wH,OAAOmqB,KAAK8uB,GAAU,GACvCj4C,EAAQi4C,EAAS03E,GACvB9wH,EAAI8E,KAAK8pF,MAAMuC,OAAO2/B,GAAgB/lC,iBAAiB5pF,EAC3D,CACA63F,EAAYl0F,KAAK4sH,wBAAwB3B,GAAI/2B,SACjD,CACa,MAAT17B,IACc,UAAV4sB,EACA+O,EAAe,MACE,QAAV/O,IACP+O,EAAe,WAGvB,MAAMw0B,EAAa3oH,KAAK4oH,iBACxB,IAAIjuH,EAAI,EAAGwlF,EAAO0J,EAAMhvF,OAAQF,EAAIwlF,IAAQxlF,EAAE,CAC1C8nG,EAAO5Y,EAAMlvF,GACb++B,EAAQ+oE,EAAK/oE,MACb,MAAMwyF,EAAcpB,EAAY32G,WAAWnU,KAAKkU,WAAWvZ,IAC3Du1F,EAAQlwF,KAAK2vG,gBAAgBh1G,GAAKmwH,EAAY/7B,YAC9C3D,EAAOprF,KAAKwqH,wBAAwB7vH,GACpCqvC,EAAaohD,EAAKphD,WAClByiF,EAAYtgG,EAAQuN,GAASA,EAAM7+B,OAAS,EAC5C,MAAMgyH,EAAYJ,EAAY,EACxBzuF,EAAQkuF,EAAYluF,MACpBg2D,EAAck4B,EAAYt9B,gBAC1BmF,EAAcm4B,EAAYv9B,gBAChC,IAuCIhzD,EAvCAmxF,EAAgB54B,EAwCpB,GAvCIgiB,GACAh7G,EAAIg1F,EACc,UAAdgE,IAEI44B,EADAnyH,IAAMwlF,EAAO,EACIngF,KAAKkiB,QAAQ89D,QAAoB,OAAV,QAC3B,IAANrlF,EACUqF,KAAKkiB,QAAQ89D,QAAmB,QAAT,OAExB,UAKhB0sC,EAFS,QAAbp4E,EACmB,SAAf06C,GAAsC,IAAbiC,GACXw7B,EAAYziF,EAAaA,EAAa,EAC9B,WAAfglD,GACO25B,EAAWK,QAAQ5lE,OAAS,EAAIypE,EAAY7iF,EAAaA,GAEzD2+E,EAAWK,QAAQ5lE,OAASpZ,EAAa,EAGxC,SAAfglD,GAAsC,IAAbiC,EACZjnD,EAAa,EACJ,WAAfglD,EACM25B,EAAWK,QAAQ5lE,OAAS,EAAIypE,EAAY7iF,EAE5C2+E,EAAWK,QAAQ5lE,OAASqpE,EAAYziF,EAGzD0kD,IACAg+B,IAAe,GAEF,IAAbz7B,GAAmBi7B,EAAYj9B,oBAC/B/zF,GAAK8uC,EAAa,EAAI14B,KAAKu1E,IAAIoK,MAGnC1qC,EAAI2pC,EACJw8B,GAAc,EAAID,GAAaziF,EAAa,GAG5CkiF,EAAYj9B,kBAAmB,CAC/B,MAAM89B,EAAez3B,GAAU42B,EAAY/8B,iBACrC/rC,EAASulE,EAAWuB,QAAQvvH,GAC5B0oD,EAAQslE,EAAWsB,OAAOtvH,GAChC,IAAIqoD,EAAM0pE,EAAaK,EAAa/pE,IAChCC,EAAO,EAAI8pE,EAAa9pE,KAC5B,OAAOkxC,GACH,IAAK,SACDnxC,GAAOI,EAAS,EAChB,MACJ,IAAK,SACDJ,GAAOI,EAGf,OAAO8wC,GACH,IAAK,SACDjxC,GAAQI,EAAQ,EAChB,MACJ,IAAK,QACDJ,GAAQI,EACR,MACJ,IAAK,QACG1oD,IAAMwlF,EAAO,EACbl9B,GAAQI,EACD1oD,EAAI,IACXsoD,GAAQI,EAAQ,GAI5B1nB,EAAW,CACPsnB,OACAD,MACAK,MAAOA,EAAQ0pE,EAAa1pE,MAC5BD,OAAQA,EAAS2pE,EAAa3pE,OAC9BplB,MAAOkuF,EAAYh9B,cAE3B,CACAl2B,EAAMh9D,KAAK,CACP09B,QACA0xD,OACAshC,aACAxqG,QAAS,CACL+uE,WACAjzD,QACAg2D,cACAD,cACAG,UAAW44B,EACX34B,eACAF,YAAa,CACT/4F,EACAqrD,GAEJ5qB,aAGZ,CACA,OAAOq9B,CACX,CACA,uBAAA2zD,GACI,MAAM,SAAEr4E,EAAS,MAAEu1C,GAAW7pF,KAAKkiB,QAEnC,IADkBugE,GAAUziF,KAAKmlH,eAE7B,MAAoB,QAAb7wE,EAAqB,OAAS,QAEzC,IAAI8wC,EAAQ,SAQZ,MAPoB,UAAhByE,EAAMzE,MACNA,EAAQ,OACe,QAAhByE,EAAMzE,MACbA,EAAQ,QACe,UAAhByE,EAAMzE,QACbA,EAAQ,SAELA,CACX,CACA,uBAAAwnC,CAAwB3B,GACpB,MAAM,SAAE32E,EAAWu1C,OAAO,WAAEmF,EAAW,OAAEN,EAAO,QAAElB,IAAgBxtF,KAAKkiB,QAEjEqqG,EAAiBtB,EAAKz9B,EACtBs7B,EAFa9oH,KAAK4oH,iBAEEE,OAAOzlE,MACjC,IAAI6wC,EACAh5F,EAoDJ,MAnDiB,SAAbo5C,EACIo6C,GACAxzF,EAAI8E,KAAKmjD,MAAQqqC,EACE,SAAfwB,EACAkF,EAAY,OACU,WAAflF,GACPkF,EAAY,SACZh5F,GAAK4tH,EAAS,IAEd50B,EAAY,QACZh5F,GAAK4tH,KAGT5tH,EAAI8E,KAAKmjD,MAAQopE,EACE,SAAfv9B,EACAkF,EAAY,QACU,WAAflF,GACPkF,EAAY,SACZh5F,GAAK4tH,EAAS,IAEd50B,EAAY,OACZh5F,EAAI8E,KAAKijD,OAGG,UAAb3O,EACHo6C,GACAxzF,EAAI8E,KAAKijD,KAAOuqC,EACG,SAAfwB,EACAkF,EAAY,QACU,WAAflF,GACPkF,EAAY,SACZh5F,GAAK4tH,EAAS,IAEd50B,EAAY,OACZh5F,GAAK4tH,KAGT5tH,EAAI8E,KAAKijD,KAAOspE,EACG,SAAfv9B,EACAkF,EAAY,OACU,WAAflF,GACPkF,EAAY,SACZh5F,GAAK4tH,EAAS,IAEd50B,EAAY,QACZh5F,EAAI8E,KAAKmjD,QAIjB+wC,EAAY,QAET,CACHA,YACAh5F,IAER,CACH,iBAAA8xH,GACO,GAAIhtH,KAAKkiB,QAAQ2nE,MAAM6E,OACnB,OAEJ,MAAM5E,EAAQ9pF,KAAK8pF,MACbx1C,EAAWt0C,KAAKkiB,QAAQoyB,SAC9B,MAAiB,SAAbA,GAAoC,UAAbA,EAChB,CACH0O,IAAK,EACLC,KAAMjjD,KAAKijD,KACXC,OAAQ4mC,EAAM1mC,OACdD,MAAOnjD,KAAKmjD,OAGH,QAAb7O,GAAmC,WAAbA,EACf,CACH0O,IAAKhjD,KAAKgjD,IACVC,KAAM,EACNC,OAAQljD,KAAKkjD,OACbC,MAAO2mC,EAAMzmC,YALrB,CAQJ,CACH,cAAA4pE,GACO,MAAM,IAAErnG,EAAM1D,SAAS,gBAAEke,GAAmB,KAAE6iB,EAAK,IAAED,EAAI,MAAEK,EAAM,OAAED,GAAYpjD,KAC3EogC,IACAxa,EAAIgF,OACJhF,EAAI6tE,UAAYrzD,EAChBxa,EAAIiuE,SAAS5wC,EAAMD,EAAKK,EAAOD,GAC/Bx9B,EAAImqE,UAEZ,CACA,oBAAA8nB,CAAqBx7G,GACjB,MAAMwxF,EAAO7tF,KAAKkiB,QAAQ2rE,KAC1B,IAAK7tF,KAAK0oH,eAAiB76B,EAAKz2D,QAC5B,OAAO,EAEX,MACM7nB,EADQvP,KAAK6pF,MACC72D,WAAWs0C,GAAIA,EAAEjrE,QAAUA,IAC/C,GAAIkT,GAAS,EAAG,CAEZ,OADas+E,EAAK15E,WAAWnU,KAAKkU,WAAW3E,IACjCu+E,SAChB,CACA,OAAO,CACX,CACH,QAAAo/B,CAAS1gB,GACF,MAAM3e,EAAO7tF,KAAKkiB,QAAQ2rE,KACpBjoE,EAAM5lB,KAAK4lB,IACXozC,EAAQh5D,KAAKqlH,iBAAmBrlH,KAAKqlH,eAAiBrlH,KAAKgrH,sBAAsBxe,IACvF,IAAI7xG,EAAGwlF,EACP,MAAMgtC,EAAW,CAACz6C,EAAIC,EAAIx7C,KACjBA,EAAMksB,OAAUlsB,EAAM6G,QAG3BpY,EAAIgF,OACJhF,EAAIkoE,UAAY32D,EAAMksB,MACtBz9B,EAAI4tE,YAAcr8D,EAAM6G,MACxBpY,EAAIwnG,YAAYj2F,EAAMoqE,YAAc,IACpC37E,EAAIynG,eAAiBl2F,EAAMqqE,iBAC3B57E,EAAI0rE,YACJ1rE,EAAI8rE,OAAOhf,EAAGx3E,EAAGw3E,EAAGnsB,GACpB3gC,EAAI+rE,OAAOhf,EAAGz3E,EAAGy3E,EAAGpsB,GACpB3gC,EAAImsE,SACJnsE,EAAImqE,UAAS,EAEjB,GAAIlC,EAAKz2D,QACL,IAAIz8B,EAAI,EAAGwlF,EAAOnnB,EAAMn+D,OAAQF,EAAIwlF,IAAQxlF,EAAE,CAC1C,MAAMI,EAAOi+D,EAAMr+D,GACfkzF,EAAKE,iBACLo/B,EAAS,CACLjyH,EAAGH,EAAK6wH,GACRrlE,EAAGxrD,EAAK8wH,IACT,CACC3wH,EAAGH,EAAK+wH,GACRvlE,EAAGxrD,EAAKgxH,IACThxH,GAEH8yF,EAAKG,WACLm/B,EAAS,CACLjyH,EAAGH,EAAKywH,IACRjlE,EAAGxrD,EAAK0wH,KACT,CACCvwH,EAAGH,EAAK2wH,IACRnlE,EAAGxrD,EAAK4wH,KACT,CACC3tF,MAAOjjC,EAAKqzF,UACZ/qC,MAAOtoD,EAAKmzF,UACZqT,WAAYxmG,EAAKsxH,eACjB7qB,iBAAkBzmG,EAAKuxH,sBAGnC,CAER,CACH,UAAAgB,GACO,MAAM,MAAExjC,EAAM,IAAElkE,EAAM1D,SAAS,OAAEmsE,EAAO,KAAER,IAAa7tF,KACjDkrH,EAAa78B,EAAOl6E,WAAWnU,KAAKkU,cACpCi3G,EAAY98B,EAAOj3D,QAAU8zF,EAAW7nE,MAAQ,EACtD,IAAK8nE,EACD,OAEJ,MAAMoC,EAAgB1/B,EAAK15E,WAAWnU,KAAKkU,WAAW,IAAI45E,UACpDw9B,EAActrH,KAAK8lH,aACzB,IAAI8F,EAAIE,EAAID,EAAIE,EACZ/rH,KAAKk2G,gBACL0V,EAAK37B,GAAYnG,EAAO9pF,KAAKijD,KAAMkoE,GAAaA,EAAY,EAC5DW,EAAK77B,GAAYnG,EAAO9pF,KAAKmjD,MAAOoqE,GAAiBA,EAAgB,EACrE1B,EAAKE,EAAKT,IAEVO,EAAK57B,GAAYnG,EAAO9pF,KAAKgjD,IAAKmoE,GAAaA,EAAY,EAC3DY,EAAK97B,GAAYnG,EAAO9pF,KAAKkjD,OAAQqqE,GAAiBA,EAAgB,EACtE3B,EAAKE,EAAKR,GAEd1lG,EAAIgF,OACJhF,EAAIkoE,UAAYo9B,EAAW7nE,MAC3Bz9B,EAAI4tE,YAAc03B,EAAWltF,MAC7BpY,EAAI0rE,YACJ1rE,EAAI8rE,OAAOk6B,EAAIC,GACfjmG,EAAI+rE,OAAOm6B,EAAIC,GACfnmG,EAAImsE,SACJnsE,EAAImqE,SACR,CACH,UAAAy9B,CAAWhhB,GAEJ,IADoBxsG,KAAKkiB,QAAQ2nE,MAChBzyD,QACb,OAEJ,MAAMxR,EAAM5lB,KAAK4lB,IACXssE,EAAOlyF,KAAKgtH,oBACd96B,GACAE,GAASxsE,EAAKssE,GAElB,MAAMl5B,EAAQh5D,KAAKsmH,cAAc9Z,GACjC,IAAK,MAAMzxG,KAAQi+D,EAAM,CACrB,MAAMy0D,EAAoB1yH,EAAKmnB,QACzBioG,EAAWpvH,EAAKqwF,KAGtB0I,GAAWluE,EAFG7qB,EAAK2+B,MAEI,EADb3+B,EAAK2xH,WACcvC,EAAUsD,EAC3C,CACIv7B,GACAG,GAAWzsE,EAEnB,CACH,SAAA8nG,GACO,MAAM,IAAE9nG,EAAM1D,SAAS,SAAEoyB,EAAS,MAAE5zB,EAAM,QAAEs/D,IAAgBhgF,KAC5D,IAAK0gB,EAAM0W,QACP,OAEJ,MAAMg0D,EAAOmK,GAAO70E,EAAM0qE,MACpBoC,EAAU8H,GAAU50E,EAAM8sE,SAC1BpI,EAAQ1kE,EAAM0kE,MACpB,IAAIr4C,EAASq+C,EAAKphD,WAAa,EACd,WAAbsK,GAAsC,WAAbA,GAAyBzjB,EAASyjB,IAC3DvH,GAAUygD,EAAQtqC,OACd/2B,EAAQzL,EAAMzB,QACd8tB,GAAUq+C,EAAKphD,YAActpB,EAAMzB,KAAKpkB,OAAS,KAGrDkyC,GAAUygD,EAAQxqC,IAEtB,MAAM,OAAE2qE,EAAO,OAAEC,EAAO,SAAEt5B,EAAS,SAAErD,GAnlC7C,SAAmB7E,EAAOr/C,EAAQuH,EAAU8wC,GACxC,MAAM,IAAEpiC,EAAI,KAAEC,EAAK,OAAEC,EAAO,MAAEC,EAAM,MAAE2mC,GAAWsC,GAC3C,UAAEogB,EAAU,OAAEngB,GAAYvC,EAChC,IACIwK,EAAUq5B,EAAQC,EADlB38B,EAAW,EAEf,MAAM7tC,EAASF,EAASF,EAClBK,EAAQF,EAAQF,EACtB,GAAImpC,EAAM8pB,eAAgB,CAEtB,GADAyX,EAAStoC,GAAeD,EAAOniC,EAAME,GACjCtyB,EAASyjB,GAAW,CACpB,MAAM03E,EAAiB3wH,OAAOmqB,KAAK8uB,GAAU,GACvCj4C,EAAQi4C,EAAS03E,GACvB4B,EAASvhC,EAAO2/B,GAAgB/lC,iBAAiB5pF,GAAS+mD,EAASrW,CACvE,MACI6gF,EADoB,WAAbt5E,GACGk4D,EAAUtpD,OAASspD,EAAUxpD,KAAO,EAAII,EAASrW,EAElDq3E,GAAeh4B,EAAO93C,EAAUvH,GAE7CunD,EAAWnxC,EAAQF,CACvB,KAAO,CACH,GAAIpyB,EAASyjB,GAAW,CACpB,MAAM03E,EAAiB3wH,OAAOmqB,KAAK8uB,GAAU,GACvCj4C,EAAQi4C,EAAS03E,GACvB2B,EAASthC,EAAO2/B,GAAgB/lC,iBAAiB5pF,GAASgnD,EAAQtW,CACtE,MACI4gF,EADoB,WAAbr5E,GACGk4D,EAAUvpD,KAAOupD,EAAUrpD,OAAS,EAAIE,EAAQtW,EAEjDq3E,GAAeh4B,EAAO93C,EAAUvH,GAE7C6gF,EAASvoC,GAAeD,EAAOliC,EAAQF,GACvCiuC,EAAwB,SAAb38C,GAAuBstC,GAAUA,EAChD,CACA,MAAO,CACH+rC,SACAC,SACAt5B,WACArD,WAER,CA6iC2D48B,CAAU7tH,KAAM+sC,EAAQuH,EAAU8wC,GACrF0O,GAAWluE,EAAKlF,EAAMzB,KAAM,EAAG,EAAGmsE,EAAM,CACpCptD,MAAOtd,EAAMsd,MACbs2D,WACArD,WACAiD,UAAW6wB,GAAW3/B,EAAO9wC,EAAU0rC,GACvCmU,aAAc,SACdF,YAAa,CACT05B,EACAC,IAGZ,CACA,IAAAtrB,CAAKkK,GACIxsG,KAAK0oH,eAGV1oH,KAAKitH,iBACLjtH,KAAKktH,SAAS1gB,GACdxsG,KAAKstH,aACLttH,KAAK0tH,YACL1tH,KAAKwtH,WAAWhhB,GACpB,CACH,OAAAsR,GACO,MAAMr3G,EAAOzG,KAAKkiB,QACZ2yB,EAAKpuC,EAAKojF,OAASpjF,EAAKojF,MAAMptC,GAAK,EACnCqxE,EAAKpuC,EAAej5E,EAAKonF,MAAQpnF,EAAKonF,KAAKpxC,GAAI,GAC/CsxE,EAAKruC,EAAej5E,EAAK4nF,QAAU5nF,EAAK4nF,OAAO5xC,EAAG,GACxD,OAAKz8C,KAAK0oH,cAAgB1oH,KAAKsiG,OAAS2iB,GAAM3pH,UAAUgnG,KAUjD,CACH,CACI7lD,EAAGqxE,EACHxrB,KAAOkK,IACHxsG,KAAKitH,iBACLjtH,KAAKktH,SAAS1gB,GACdxsG,KAAK0tH,WAAW,GAGxB,CACIjxE,EAAGsxE,EACHzrB,KAAM,KACFtiG,KAAKstH,YAAY,GAGzB,CACI7wE,EAAG5H,EACHytD,KAAOkK,IACHxsG,KAAKwtH,WAAWhhB,EAAU,IA3B3B,CACH,CACI/vD,EAAG5H,EACHytD,KAAOkK,IACHxsG,KAAKsiG,KAAKkK,EAAU,GA2BxC,CACH,uBAAArG,CAAwBrlG,GACjB,MAAMolH,EAAQlmH,KAAK8pF,MAAMowB,+BACnB8T,EAAShuH,KAAKw4D,KAAO,SACrB18D,EAAS,GACf,IAAInB,EAAGwlF,EACP,IAAIxlF,EAAI,EAAGwlF,EAAO+lC,EAAMrrH,OAAQF,EAAIwlF,IAAQxlF,EAAE,CAC1C,MAAM4qF,EAAO2gC,EAAMvrH,GACf4qF,EAAKyoC,KAAYhuH,KAAKgN,IAAQlM,GAAQykF,EAAKzkF,OAASA,GACpDhF,EAAOE,KAAKupF,EAEpB,CACA,OAAOzpF,CACX,CACH,uBAAA0uH,CAAwBj7G,GAEjB,OAAOgmF,GADMv1F,KAAKkiB,QAAQ2nE,MAAM11E,WAAWnU,KAAKkU,WAAW3E,IACxC67E,KACvB,CACH,UAAA6iC,GACO,MAAMC,EAAWluH,KAAKwqH,wBAAwB,GAAGxgF,WACjD,OAAQhqC,KAAKk2G,eAAiBl2G,KAAKqjD,MAAQrjD,KAAKojD,QAAU8qE,CAC9D,EAGJ,MAAMC,GACF,WAAA/iG,CAAYtqB,EAAM+pF,EAAOjuD,GACrB58B,KAAKc,KAAOA,EACZd,KAAK6qF,MAAQA,EACb7qF,KAAK48B,SAAWA,EAChB58B,KAAKg5D,MAAQ39D,OAAO8S,OAAO,KAC/B,CACA,SAAAigH,CAAUttH,GACN,OAAOzF,OAAOC,UAAU+yH,cAAc7yH,KAAKwE,KAAKc,KAAKxF,UAAWwF,EAAKxF,UACzE,CACH,QAAAw1E,CAAS/1E,GACF,MAAM2iF,EAAQriF,OAAO27F,eAAej8F,GACpC,IAAIuzH,GAiEZ,SAA2B5wC,GACvB,MAAO,OAAQA,GAAS,aAAcA,CAC1C,EAlEY6wC,CAAkB7wC,KAClB4wC,EAActuH,KAAK8wE,SAAS4M,IAEhC,MAAM1kB,EAAQh5D,KAAKg5D,MACbhsD,EAAKjS,EAAKiS,GACV69E,EAAQ7qF,KAAK6qF,MAAQ,IAAM79E,EACjC,IAAKA,EACD,MAAM,IAAI3I,MAAM,2BAA6BtJ,GAEjD,OAAIiS,KAAMgsD,IAGVA,EAAMhsD,GAAMjS,EAyBpB,SAA0BA,EAAM8vF,EAAOyjC,GACnC,MAAME,EAAe3lH,EAAMxN,OAAO8S,OAAO,MAAO,CAC5CmgH,EAAc3lG,GAASxe,IAAImkH,GAAe,CAAC,EAC3C3lG,GAASxe,IAAI0gF,GACb9vF,EAAK4tB,WAETA,GAASC,IAAIiiE,EAAO2jC,GAChBzzH,EAAK0zH,eAOb,SAAuB5jC,EAAOv2D,GAC1Bj5B,OAAOmqB,KAAK8O,GAAQrD,SAASgK,IACzB,MAAMyzF,EAAgBzzF,EAASr2B,MAAM,KAC/B+pH,EAAaD,EAActpH,MAC3BwpH,EAAc,CAChB/jC,GACF7vF,OAAO0zH,GAAenwH,KAAK,KACvBkG,EAAQ6vB,EAAO2G,GAAUr2B,MAAM,KAC/B8nF,EAAajoF,EAAMW,MACnBqnF,EAAchoF,EAAMlG,KAAK,KAC/BoqB,GAASiM,MAAMg6F,EAAaD,EAAYliC,EAAaC,EAAW,GAExE,CAlBQmiC,CAAchkC,EAAO9vF,EAAK0zH,eAE1B1zH,EAAK4vF,aACLhiE,GAAS6jE,SAAS3B,EAAO9vF,EAAK4vF,YAEtC,CArCQmkC,CAAiB/zH,EAAM8vF,EAAOyjC,GAC1BtuH,KAAK48B,UACLjU,GAASiU,SAAS7hC,EAAKiS,GAAIjS,EAAK2vF,YALzBG,CAQf,CACH,GAAA1gF,CAAI6C,GACG,OAAOhN,KAAKg5D,MAAMhsD,EACtB,CACH,UAAA+hH,CAAWh0H,GACJ,MAAMi+D,EAAQh5D,KAAKg5D,MACbhsD,EAAKjS,EAAKiS,GACV69E,EAAQ7qF,KAAK6qF,MACf79E,KAAMgsD,UACCA,EAAMhsD,GAEb69E,GAAS79E,KAAM2b,GAASkiE,YACjBliE,GAASkiE,GAAO79E,GACnBhN,KAAK48B,iBACE8tD,GAAU19E,GAG7B,EAiCJ,MAAMgiH,GACF,WAAA5jG,GACIprB,KAAKs1G,YAAc,IAAI6Y,GAAc7mB,GAAmB,YAAY,GACpEtnG,KAAK4wC,SAAW,IAAIu9E,GAAc3L,GAAS,YAC3CxiH,KAAKd,QAAU,IAAIivH,GAAc9yH,OAAQ,WACzC2E,KAAKqsF,OAAS,IAAI8hC,GAAclJ,GAAO,UACvCjlH,KAAKivH,iBAAmB,CACpBjvH,KAAKs1G,YACLt1G,KAAKqsF,OACLrsF,KAAK4wC,SAEb,CACH,GAAApoC,IAAO/F,GACAzC,KAAKkvH,MAAM,WAAYzsH,EAC3B,CACA,MAAAkpB,IAAUlpB,GACNzC,KAAKkvH,MAAM,aAAczsH,EAC7B,CACH,cAAA0sH,IAAkB1sH,GACXzC,KAAKkvH,MAAM,WAAYzsH,EAAMzC,KAAKs1G,YACtC,CACH,WAAA/M,IAAe9lG,GACRzC,KAAKkvH,MAAM,WAAYzsH,EAAMzC,KAAK4wC,SACtC,CACH,UAAAw+E,IAAc3sH,GACPzC,KAAKkvH,MAAM,WAAYzsH,EAAMzC,KAAKd,QACtC,CACH,SAAAmwH,IAAa5sH,GACNzC,KAAKkvH,MAAM,WAAYzsH,EAAMzC,KAAKqsF,OACtC,CACH,aAAAijC,CAActiH,GACP,OAAOhN,KAAKuvH,KAAKviH,EAAIhN,KAAKs1G,YAAa,aAC3C,CACH,UAAAkE,CAAWxsG,GACJ,OAAOhN,KAAKuvH,KAAKviH,EAAIhN,KAAK4wC,SAAU,UACxC,CACH,SAAAn8B,CAAUzH,GACH,OAAOhN,KAAKuvH,KAAKviH,EAAIhN,KAAKd,QAAS,SACvC,CACH,QAAAswH,CAASxiH,GACF,OAAOhN,KAAKuvH,KAAKviH,EAAIhN,KAAKqsF,OAAQ,QACtC,CACH,iBAAAojC,IAAqBhtH,GACdzC,KAAKkvH,MAAM,aAAczsH,EAAMzC,KAAKs1G,YACxC,CACH,cAAAoa,IAAkBjtH,GACXzC,KAAKkvH,MAAM,aAAczsH,EAAMzC,KAAK4wC,SACxC,CACH,aAAA++E,IAAiBltH,GACVzC,KAAKkvH,MAAM,aAAczsH,EAAMzC,KAAKd,QACxC,CACH,YAAA0wH,IAAgBntH,GACTzC,KAAKkvH,MAAM,aAAczsH,EAAMzC,KAAKqsF,OACxC,CACH,KAAA6iC,CAAMpwH,EAAQ2D,EAAMotH,GACb,IACOptH,GACLwuB,SAASlV,IACP,MAAM+zG,EAAMD,GAAiB7vH,KAAK+vH,oBAAoBh0G,GAClD8zG,GAAiBC,EAAI1B,UAAUryG,IAAQ+zG,IAAQ9vH,KAAKd,SAAW6c,EAAI/O,GACnEhN,KAAKgwH,MAAMlxH,EAAQgxH,EAAK/zG,GAExB4U,EAAK5U,GAAMhhB,IACP,MAAMk1H,EAAUJ,GAAiB7vH,KAAK+vH,oBAAoBh1H,GAC1DiF,KAAKgwH,MAAMlxH,EAAQmxH,EAASl1H,EAAK,GAEzC,GAER,CACH,KAAAi1H,CAAMlxH,EAAQy6G,EAAUjrG,GACjB,MAAM4hH,EAAcruH,GAAY/C,GAChCwmB,EAAShX,EAAU,SAAW4hH,GAAc,GAAI5hH,GAChDirG,EAASz6G,GAAQwP,GACjBgX,EAAShX,EAAU,QAAU4hH,GAAc,GAAI5hH,EACnD,CACH,mBAAAyhH,CAAoBjvH,GACb,IAAI,IAAInG,EAAI,EAAGA,EAAIqF,KAAKivH,iBAAiBp0H,OAAQF,IAAI,CACjD,MAAMm1H,EAAM9vH,KAAKivH,iBAAiBt0H,GAClC,GAAIm1H,EAAI1B,UAAUttH,GACd,OAAOgvH,CAEf,CACA,OAAO9vH,KAAKd,OAChB,CACH,IAAAqwH,CAAKviH,EAAI6iH,EAAe/uH,GACjB,MAAM/F,EAAO80H,EAAc1lH,IAAI6C,GAC/B,QAAa5P,IAATrC,EACA,MAAM,IAAIsJ,MAAM,IAAM2I,EAAK,yBAA2BlM,EAAO,KAEjE,OAAO/F,CACX,EAEJ,IAAIw+G,GAA2B,IAAIyV,GAEnC,MAAMmB,GACF,WAAA/kG,GACIprB,KAAKowH,MAAQ,EACjB,CACH,MAAApyH,CAAO8rF,EAAOvnD,EAAM9/B,EAAMoC,GACN,eAAT09B,IACAviC,KAAKowH,MAAQpwH,KAAKqwH,mBAAmBvmC,GAAO,GAC5C9pF,KAAK8V,QAAQ9V,KAAKowH,MAAOtmC,EAAO,YAEpC,MAAMa,EAAc9lF,EAAS7E,KAAK+qF,aAAajB,GAAOjlF,OAAOA,GAAU7E,KAAK+qF,aAAajB,GACnFhuF,EAASkE,KAAK8V,QAAQ60E,EAAab,EAAOvnD,EAAM9/B,GAKtD,MAJa,iBAAT8/B,IACAviC,KAAK8V,QAAQ60E,EAAab,EAAO,QACjC9pF,KAAK8V,QAAQ9V,KAAKowH,MAAOtmC,EAAO,cAE7BhuF,CACX,CACH,OAAAga,CAAQ60E,EAAab,EAAOvnD,EAAM9/B,GAC3BA,EAAOA,GAAQ,CAAC,EAChB,IAAK,MAAMowC,KAAc83C,EAAY,CACjC,MAAMv2E,EAASy+B,EAAWz+B,OAO1B,IAAyC,IAArCkR,EANWlR,EAAOmuB,GACP,CACXunD,EACArnF,EACAowC,EAAW3wB,SAEc9N,IAAqB3R,EAAKqoD,WACnD,OAAO,CAEf,CACA,OAAO,CACX,CACA,UAAAwlE,GACS/wC,EAAcv/E,KAAKqvG,UACpBrvG,KAAKuwH,UAAYvwH,KAAKqvG,OACtBrvG,KAAKqvG,YAASjyG,EAEtB,CACH,YAAA2tF,CAAajB,GACN,GAAI9pF,KAAKqvG,OACL,OAAOrvG,KAAKqvG,OAEhB,MAAM1kB,EAAc3qF,KAAKqvG,OAASrvG,KAAKqwH,mBAAmBvmC,GAE1D,OADA9pF,KAAKwwH,oBAAoB1mC,GAClBa,CACX,CACA,kBAAA0lC,CAAmBvmC,EAAOniE,GACtB,MAAMpT,EAASu1E,GAASA,EAAMv1E,OACxB2N,EAAUw9D,EAAenrE,EAAO2N,SAAW3N,EAAO2N,QAAQhjB,QAAS,CAAC,GACpEA,EAWb,SAAoBqV,GACjB,MAAMk8G,EAAW,CAAC,EACZvxH,EAAU,GACVsmB,EAAOnqB,OAAOmqB,KAAK+zF,GAASr6G,QAAQ85D,OAC1C,IAAI,IAAIr+D,EAAI,EAAGA,EAAI6qB,EAAK3qB,OAAQF,IAC5BuE,EAAQlD,KAAKu9G,GAAS9kG,UAAU+Q,EAAK7qB,KAEzC,MAAMunC,EAAQ3tB,EAAOrV,SAAW,GAChC,IAAI,IAAIvE,EAAI,EAAGA,EAAIunC,EAAMrnC,OAAQF,IAAI,CACjC,MAAMyZ,EAAS8tB,EAAMvnC,IACY,IAA7BuE,EAAQsF,QAAQ4P,KAChBlV,EAAQlD,KAAKoY,GACbq8G,EAASr8G,EAAOpH,KAAM,EAE9B,CACA,MAAO,CACH9N,UACAuxH,WAER,CA9BwBC,CAAWn8G,GAC3B,OAAmB,IAAZ2N,GAAsByF,EAuCrC,SAA2BmiE,GAAO,QAAE5qF,EAAQ,SAAEuxH,GAAavuG,EAASyF,GAChE,MAAM7rB,EAAS,GACT2C,EAAUqrF,EAAM51E,aACtB,IAAK,MAAME,KAAUlV,EAAQ,CACzB,MAAM8N,EAAKoH,EAAOpH,GACZvG,EAAOkqH,GAAQzuG,EAAQlV,GAAK2a,GACrB,OAATlhB,GAGJ3K,EAAOE,KAAK,CACRoY,SACA8N,QAAS0uG,GAAW9mC,EAAMv1E,OAAQ,CAC9BH,SACA8tB,MAAOuuF,EAASzjH,IACjBvG,EAAMhI,IAEjB,CACA,OAAO3C,CACX,CAzDgD+0H,CAAkB/mC,EAAO5qF,EAASgjB,EAASyF,GAAhD,EACvC,CACH,mBAAA6oG,CAAoB1mC,GACb,MAAMgnC,EAAsB9wH,KAAKuwH,WAAa,GACxC5lC,EAAc3qF,KAAKqvG,OACnBllF,EAAO,CAAC9J,EAAGxM,IAAIwM,EAAExb,QAAQ3J,IAAK2Y,EAAEwZ,MAAMk5B,GAAIrrD,EAAEkZ,OAAOpH,KAAOu5C,EAAEnyC,OAAOpH,OACzEhN,KAAK8V,QAAQqU,EAAK2mG,EAAqBnmC,GAAcb,EAAO,QAC5D9pF,KAAK8V,QAAQqU,EAAKwgE,EAAammC,GAAsBhnC,EAAO,QAChE,EAsBJ,SAAS6mC,GAAQzuG,EAASyF,GACtB,OAAKA,IAAmB,IAAZzF,GAGI,IAAZA,EACO,CAAC,EAELA,EALI,IAMf,CAoBA,SAAS0uG,GAAWr8G,GAAQ,OAAEH,EAAO,MAAE8tB,GAAUz7B,EAAMhI,GACnD,MAAM+mB,EAAOjR,EAAOw8G,gBAAgB38G,GAC9ByhF,EAASthF,EAAOi2F,gBAAgB/jG,EAAM+e,GAI5C,OAHI0c,GAAS9tB,EAAOuU,UAChBktE,EAAO75F,KAAKoY,EAAOuU,UAEhBpU,EAAOk2F,eAAe5U,EAAQp3F,EAAS,CAC1C,IACD,CACCy5F,YAAY,EACZC,WAAW,EACXF,SAAS,GAEjB,CAEA,SAAS+4B,GAAalwH,EAAMohB,GACxB,MAAM+uG,EAAkBtoG,GAASsiE,SAASnqF,IAAS,CAAC,EAEpD,QADwBohB,EAAQ+oE,UAAY,CAAC,GAAGnqF,IAAS,CAAC,GACpC4qF,WAAaxpE,EAAQwpE,WAAaulC,EAAgBvlC,WAAa,GACzF,CAaA,SAASwlC,GAAclkH,GACnB,GAAW,MAAPA,GAAqB,MAAPA,GAAqB,MAAPA,EAC5B,OAAOA,CAEf,CASA,SAASmkH,GAAcnkH,KAAOokH,GAC1B,GAAIF,GAAclkH,GACd,OAAOA,EAEX,IAAK,MAAMvG,KAAQ2qH,EAAa,CAC5B,MAAM54D,EAAO/xD,EAAK+xD,OAZL,SADKlkB,EAayB7tC,EAAK6tC,WAZb,WAAbA,EACf,IAEM,SAAbA,GAAoC,UAAbA,EAChB,SADX,IASiEtnC,EAAGnS,OAAS,GAAKq2H,GAAclkH,EAAG,GAAGlF,eAClG,GAAI0wD,EACA,OAAOA,CAEf,CAjBJ,IAA0BlkB,EAkBtB,MAAM,IAAIjwC,MAAM,6BAA6B2I,uDACjD,CACA,SAASqkH,GAAmBrkH,EAAIwrD,EAAMkwC,GAClC,GAAIA,EAAQlwC,EAAO,YAAcxrD,EAC7B,MAAO,CACHwrD,OAGZ,CAUA,SAAS84D,GAAiB/8G,EAAQ2N,GAC9B,MAAMqvG,EAAgB7mC,GAAUn2E,EAAOzT,OAAS,CAC5CurF,OAAQ,CAAC,GAEPmlC,EAAetvG,EAAQmqE,QAAU,CAAC,EAClColC,EAAiBT,GAAaz8G,EAAOzT,KAAMohB,GAC3CmqE,EAAShxF,OAAO8S,OAAO,MA8C7B,OA7CA9S,OAAOmqB,KAAKgsG,GAAcvgG,SAASjkB,IAC/B,MAAM0kH,EAAYF,EAAaxkH,GAC/B,IAAK6jB,EAAS6gG,GACV,OAAOrxH,QAAQyD,MAAM,0CAA0CkJ,KAEnE,GAAI0kH,EAAUp6B,OACV,OAAOj3F,QAAQ6O,KAAK,kDAAkDlC,KAE1E,MAAMwrD,EAAO24D,GAAcnkH,EAAI0kH,EAxBvC,SAAkC1kH,EAAIuH,GAClC,GAAIA,EAAOjO,MAAQiO,EAAOjO,KAAK2kF,SAAU,CACrC,MAAM0mC,EAAUp9G,EAAOjO,KAAK2kF,SAASpmF,QAAQ8P,GAAIA,EAAEm0F,UAAY97F,GAAM2H,EAAEq0F,UAAYh8F,IACnF,GAAI2kH,EAAQ92H,OACR,OAAOw2H,GAAmBrkH,EAAI,IAAK2kH,EAAQ,KAAON,GAAmBrkH,EAAI,IAAK2kH,EAAQ,GAE9F,CACA,MAAO,CAAC,CACZ,CAgBkDC,CAAyB5kH,EAAIuH,GAASoU,GAAS0jE,OAAOqlC,EAAU5wH,OACpG+wH,EA5Dd,SAAmCr5D,EAAMkzB,GACrC,OAAOlzB,IAASkzB,EAAY,UAAY,SAC5C,CA0D0BomC,CAA0Bt5D,EAAMi5D,GAC5CM,EAAsBR,EAAcllC,QAAU,CAAC,EACrDA,EAAOr/E,GAAM6zE,EAAQxlF,OAAO8S,OAAO,MAAO,CACtC,CACIqqD,QAEJk5D,EACAK,EAAoBv5D,GACpBu5D,EAAoBF,IACtB,IAENt9G,EAAOjO,KAAK2kF,SAASh6D,SAASy3E,IAC1B,MAAM5nG,EAAO4nG,EAAQ5nG,MAAQyT,EAAOzT,KAC9B4qF,EAAYgd,EAAQhd,WAAaslC,GAAalwH,EAAMohB,GAEpD6vG,GADkBrnC,GAAU5pF,IAAS,CAAC,GACAurF,QAAU,CAAC,EACvDhxF,OAAOmqB,KAAKusG,GAAqB9gG,SAAS+gG,IACtC,MAAMx5D,EAtFlB,SAAmCxrD,EAAI0+E,GACnC,IAAIlzB,EAAOxrD,EAMX,MALW,YAAPA,EACAwrD,EAAOkzB,EACO,YAAP1+E,IACPwrD,EAAqB,MAAdkzB,EAAoB,IAAM,KAE9BlzB,CACX,CA8EyBy5D,CAA0BD,EAAWtmC,GAC5C1+E,EAAK07F,EAAQlwC,EAAO,WAAaA,EACvC6zB,EAAOr/E,GAAMq/E,EAAOr/E,IAAO3R,OAAO8S,OAAO,MACzC0yE,EAAQwL,EAAOr/E,GAAK,CAChB,CACIwrD,QAEJg5D,EAAaxkH,GACb+kH,EAAoBC,IACtB,GACJ,IAEN32H,OAAOmqB,KAAK6mE,GAAQp7D,SAAStyB,IACzB,MAAMytF,EAAQC,EAAO1tF,GACrBkiF,EAAQuL,EAAO,CACXzjE,GAAS0jE,OAAOD,EAAMtrF,MACtB6nB,GAASyjE,OACX,IAECC,CACX,CACA,SAAS6lC,GAAY39G,GACjB,MAAM2N,EAAU3N,EAAO2N,UAAY3N,EAAO2N,QAAU,CAAC,GACrDA,EAAQhjB,QAAUwgF,EAAex9D,EAAQhjB,QAAS,CAAC,GACnDgjB,EAAQmqE,OAASilC,GAAiB/8G,EAAQ2N,EAC9C,CACA,SAASiwG,GAAS7rH,GAId,OAHAA,EAAOA,GAAQ,CAAC,GACX2kF,SAAW3kF,EAAK2kF,UAAY,GACjC3kF,EAAKykG,OAASzkG,EAAKykG,QAAU,GACtBzkG,CACX,CAOA,MAAM8rH,GAAW,IAAIhpC,IACfipC,GAAa,IAAIvtC,IACvB,SAASwtC,GAAWhpC,EAAUipC,GAC1B,IAAI/sG,EAAO4sG,GAASjoH,IAAIm/E,GAMxB,OALK9jE,IACDA,EAAO+sG,IACPH,GAASxpG,IAAI0gE,EAAU9jE,GACvB6sG,GAAW7pH,IAAIgd,IAEZA,CACX,CACA,MAAMgtG,GAAa,CAAC5pG,EAAKxtB,EAAKuD,KAC1B,MAAM8H,EAAOu6E,GAAiB5lF,EAAKuD,QACtBvB,IAATqJ,GACAmiB,EAAIpgB,IAAI/B,EACZ,EAEJ,MAAMgsH,GACF,WAAArnG,CAAY7W,GACRvU,KAAKiT,QAzBb,SAAoBsB,GAIhB,OAHAA,EAASA,GAAU,CAAC,GACbjO,KAAO6rH,GAAS59G,EAAOjO,MAC9B4rH,GAAY39G,GACLA,CACX,CAoBuBm+G,CAAWn+G,GAC1BvU,KAAK2yH,YAAc,IAAIvpC,IACvBppF,KAAK4yH,eAAiB,IAAIxpC,GAC9B,CACA,YAAI8B,GACA,OAAOlrF,KAAKiT,QAAQi4E,QACxB,CACA,QAAIpqF,GACA,OAAOd,KAAKiT,QAAQnS,IACxB,CACA,QAAIA,CAAKA,GACLd,KAAKiT,QAAQnS,KAAOA,CACxB,CACA,QAAIwF,GACA,OAAOtG,KAAKiT,QAAQ3M,IACxB,CACA,QAAIA,CAAKA,GACLtG,KAAKiT,QAAQ3M,KAAO6rH,GAAS7rH,EACjC,CACA,WAAI4b,GACA,OAAOliB,KAAKiT,QAAQiP,OACxB,CACA,WAAIA,CAAQA,GACRliB,KAAKiT,QAAQiP,QAAUA,CAC3B,CACA,WAAIhjB,GACA,OAAOc,KAAKiT,QAAQ/T,OACxB,CACA,MAAA4kG,GACI,MAAMvvF,EAASvU,KAAKiT,QACpBjT,KAAK6yH,aACLX,GAAY39G,EAChB,CACA,UAAAs+G,GACI7yH,KAAK2yH,YAAYxpH,QACjBnJ,KAAK4yH,eAAezpH,OACxB,CACH,gBAAAohG,CAAiBuoB,GACV,OAAOR,GAAWQ,GAAa,IAAI,CAC3B,CACI,YAAYA,IACZ,MAGhB,CACH,yBAAAxlB,CAA0BwlB,EAAa5xF,GAChC,OAAOoxF,GAAW,GAAGQ,gBAA0B5xF,KAAc,IAAI,CACzD,CACI,YAAY4xF,iBAA2B5xF,IACvC,eAAeA,KAEnB,CACI,YAAY4xF,IACZ,MAGhB,CACH,uBAAA5lB,CAAwB4lB,EAAa9lB,GAC9B,OAAOslB,GAAW,GAAGQ,KAAe9lB,KAAe,IAAI,CAC/C,CACI,YAAY8lB,cAAwB9lB,IACpC,YAAY8lB,IACZ,YAAY9lB,IACZ,MAGhB,CACH,eAAA+jB,CAAgB38G,GACT,MAAMpH,EAAKoH,EAAOpH,GAElB,OAAOslH,GAAW,GADLtyH,KAAKc,eACkBkM,KAAM,IAAI,CACtC,CACI,WAAWA,OACRoH,EAAO2+G,wBAA0B,MAGpD,CACH,aAAAC,CAAcC,EAAWC,GAClB,MAAMP,EAAc3yH,KAAK2yH,YACzB,IAAI7yF,EAAQ6yF,EAAYxoH,IAAI8oH,GAK5B,OAJKnzF,IAASozF,IACVpzF,EAAQ,IAAIspD,IACZupC,EAAY/pG,IAAIqqG,EAAWnzF,IAExBA,CACX,CACH,eAAA0qE,CAAgByoB,EAAWE,EAAUD,GAC9B,MAAM,QAAEhxG,EAAQ,KAAEphB,GAAUd,KACtB8/B,EAAQ9/B,KAAKgzH,cAAcC,EAAWC,GACtC9rB,EAAStnE,EAAM31B,IAAIgpH,GACzB,GAAI/rB,EACA,OAAOA,EAEX,MAAMvR,EAAS,IAAI/Q,IACnBquC,EAASliG,SAASzL,IACVytG,IACAp9B,EAAOrtF,IAAIyqH,GACXztG,EAAKyL,SAAStyB,GAAM6zH,GAAW38B,EAAQo9B,EAAWt0H,MAEtD6mB,EAAKyL,SAAStyB,GAAM6zH,GAAW38B,EAAQ3zE,EAASvjB,KAChD6mB,EAAKyL,SAAStyB,GAAM6zH,GAAW38B,EAAQnL,GAAU5pF,IAAS,CAAC,EAAGnC,KAC9D6mB,EAAKyL,SAAStyB,GAAM6zH,GAAW38B,EAAQltE,GAAUhqB,KACjD6mB,EAAKyL,SAAStyB,GAAM6zH,GAAW38B,EAAQlL,GAAahsF,IAAK,IAE7D,MAAMmtB,EAAQphB,MAAMkV,KAAKi2E,GAOzB,OANqB,IAAjB/pE,EAAMjxB,QACNixB,EAAM9vB,KAAKX,OAAO8S,OAAO,OAEzBkkH,GAAWhpG,IAAI8pG,IACfrzF,EAAMlX,IAAIuqG,EAAUrnG,GAEjBA,CACX,CACH,iBAAAsnG,GACO,MAAM,QAAElxG,EAAQ,KAAEphB,GAAUd,KAC5B,MAAO,CACHkiB,EACAwoE,GAAU5pF,IAAS,CAAC,EACpB6nB,GAASsiE,SAASnqF,IAAS,CAAC,EAC5B,CACIA,QAEJ6nB,GACAgiE,GAER,CACH,mBAAAwiB,CAAoBtX,EAAQtwE,EAAO9mB,EAASq3F,EAAW,CAChD,KAEA,MAAMh6F,EAAS,CACX2oG,SAAS,IAEP,SAAExjB,EAAS,YAAEoyC,GAAiBC,GAAYtzH,KAAK4yH,eAAgB/8B,EAAQC,GAC7E,IAAI5zE,EAAU++D,EACd,GAqCR,SAAqB0V,EAAOpxE,GACxB,MAAM,aAAEmyE,EAAa,YAAEI,GAAiB/M,GAAa4L,GACrD,IAAK,MAAM96F,KAAQ0pB,EAAM,CACrB,MAAM2yE,EAAaR,EAAa77F,GAC1Bs8F,EAAYL,EAAYj8F,GACxBQ,GAAS87F,GAAaD,IAAevB,EAAM96F,GACjD,GAAIq8F,IAAepqE,GAAWzxB,IAAUk3H,GAAYl3H,KAAW87F,GAAahsE,EAAQ9vB,GAChF,OAAO,CAEf,CACA,OAAO,CACX,CAhDYm3H,CAAYvyC,EAAU17D,GAAQ,CAC9BzpB,EAAO2oG,SAAU,EAGjBviF,EAAUi1E,GAAelW,EAFzBxiF,EAAUqvB,GAAWrvB,GAAWA,IAAYA,EACxBuB,KAAKyqG,eAAe5U,EAAQp3F,EAAS40H,GAE7D,CACA,IAAK,MAAMx3H,KAAQ0pB,EACfzpB,EAAOD,GAAQqmB,EAAQrmB,GAE3B,OAAOC,CACX,CACH,cAAA2uG,CAAe5U,EAAQp3F,EAASq3F,EAAW,CACpC,IACDuB,GACC,MAAM,SAAEpW,GAAcqyC,GAAYtzH,KAAK4yH,eAAgB/8B,EAAQC,GAC/D,OAAOjlE,EAASpyB,GAAW04F,GAAelW,EAAUxiF,OAASrB,EAAWi6F,GAAsBpW,CAClG,EAEJ,SAASqyC,GAAYG,EAAe59B,EAAQC,GACxC,IAAIh2D,EAAQ2zF,EAActpH,IAAI0rF,GACzB/1D,IACDA,EAAQ,IAAIspD,IACZqqC,EAAc7qG,IAAIitE,EAAQ/1D,IAE9B,MAAMwpD,EAAWwM,EAASv3F,OAC1B,IAAI6oG,EAAStnE,EAAM31B,IAAIm/E,GACvB,IAAK8d,EAAQ,CAETA,EAAS,CACLnmB,SAFa2U,GAAgBC,EAAQC,GAGrCu9B,YAAav9B,EAASjxF,QAAQ1F,IAAKA,EAAE2I,cAAc+pB,SAAS,YAEhEiO,EAAMlX,IAAI0gE,EAAU8d,EACxB,CACA,OAAOA,CACX,CACA,MAAMmsB,GAAel3H,GAAQw0B,EAASx0B,IAAUhB,OAAOipG,oBAAoBjoG,GAAOgxB,MAAM1uB,GAAMmvB,GAAWzxB,EAAMsC,MAgB/G,MAAM+0H,GAAkB,CACpB,MACA,SACA,OACA,QACA,aAEJ,SAASC,GAAqBr/E,EAAUkkB,GACpC,MAAoB,QAAblkB,GAAmC,WAAbA,IAAgE,IAAvCo/E,GAAgBlvH,QAAQ8vC,IAA6B,MAATkkB,CACtG,CACA,SAASo7D,GAAcC,EAAIC,GACvB,OAAO,SAASzzG,EAAGxM,GACf,OAAOwM,EAAEwzG,KAAQhgH,EAAEggH,GAAMxzG,EAAEyzG,GAAMjgH,EAAEigH,GAAMzzG,EAAEwzG,GAAMhgH,EAAEggH,EACvD,CACJ,CACA,SAASE,GAAqBt1H,GAC1B,MAAMqrF,EAAQrrF,EAAQqrF,MAChBsa,EAAmBta,EAAM5nE,QAAQ+kC,UACvC6iC,EAAMs+B,cAAc,eACpB9iG,EAAS8+E,GAAoBA,EAAiB4vB,WAAY,CACtDv1H,GACDqrF,EACP,CACA,SAASmqC,GAAoBx1H,GACzB,MAAMqrF,EAAQrrF,EAAQqrF,MAChBsa,EAAmBta,EAAM5nE,QAAQ+kC,UACvC3hC,EAAS8+E,GAAoBA,EAAiB8vB,WAAY,CACtDz1H,GACDqrF,EACP,CACC,SAASqqC,GAAUp5H,GAShB,OARI2gG,MAAqC,kBAAT3gG,EAC5BA,EAAO0f,SAASgkC,eAAe1jD,GACxBA,GAAQA,EAAKF,SACpBE,EAAOA,EAAK,IAEZA,GAAQA,EAAKu1F,SACbv1F,EAAOA,EAAKu1F,QAETv1F,CACX,CACA,MAAMq5H,GAAY,CAAC,EACbC,GAAY11H,IACd,MAAM2xF,EAAS6jC,GAAUx1H,GACzB,OAAOtD,OAAO8yB,OAAOimG,IAAWvvH,QAAQqM,GAAIA,EAAEo/E,SAAWA,IAAQlrF,KAAK,EAE1E,SAASkvH,GAAgBl5H,EAAKoiB,EAAOkxF,GACjC,MAAMlpF,EAAOnqB,OAAOmqB,KAAKpqB,GACzB,IAAK,MAAMuD,KAAO6mB,EAAK,CACnB,MAAM+uG,GAAU51H,EAChB,GAAI41H,GAAU/2G,EAAO,CACjB,MAAMnhB,EAAQjB,EAAIuD,UACXvD,EAAIuD,IACP+vG,EAAO,GAAK6lB,EAAS/2G,KACrBpiB,EAAIm5H,EAAS7lB,GAAQryG,EAE7B,CACJ,CACJ,CAUA,SAASm4H,GAAepoC,EAAOogB,EAAWioB,GACtC,OAAOroC,EAAMlqE,QAAQyrE,KAAOvB,EAAMqoC,GAASjoB,EAAUioB,EACzD,CAaA,MAAMC,GACFntB,gBAAkB5+E,GAClB4+E,iBAAmB6sB,GACnB7sB,iBAAmB7c,GACnB6c,gBAAkBgS,GAClBhS,eA1FU,QA2FVA,gBAAkB8sB,GAClB,eAAOvjD,IAAY9X,GACfugD,GAAS/wG,OAAOwwD,GAChB27D,IACJ,CACA,iBAAO5F,IAAc/1D,GACjBugD,GAAS5tF,UAAUqtC,GACnB27D,IACJ,CACA,WAAAvpG,CAAYrwB,EAAM65H,GACd,MAAMrgH,EAASvU,KAAKuU,OAAS,IAAIk+G,GAAOmC,GAClCC,EAAgBV,GAAUp5H,GAC1B+5H,EAAgBT,GAASQ,GAC/B,GAAIC,EACA,MAAM,IAAIzwH,MAAM,4CAA+CywH,EAAc9nH,GAA7D,kDAA6H8nH,EAAcxkC,OAAOtjF,GAAK,oBAE3K,MAAMkV,EAAU3N,EAAOk2F,eAAel2F,EAAO6+G,oBAAqBpzH,KAAKkU,cACvElU,KAAKkrF,SAAW,IAAK32E,EAAO22E,UAlnEpC,SAAyBoF,GACrB,OAAKoL,MAAgD,qBAApBq5B,iBAAmCzkC,aAAkBykC,gBAC3E3V,GAEJyC,EACX,CA6mEgDmT,CAAgBH,IACxD70H,KAAKkrF,SAASi0B,aAAa5qG,GAC3B,MAAM9V,EAAUuB,KAAKkrF,SAAS8zB,eAAe6V,EAAe3yG,EAAQg7E,aAC9D5M,EAAS7xF,GAAWA,EAAQ6xF,OAC5BltC,EAASktC,GAAUA,EAAOltC,OAC1BC,EAAQitC,GAAUA,EAAOjtC,MAC/BrjD,KAAKgN,GAAKsyE,IACVt/E,KAAK4lB,IAAMnnB,EACXuB,KAAKswF,OAASA,EACdtwF,KAAKqjD,MAAQA,EACbrjD,KAAKojD,OAASA,EACdpjD,KAAKi1H,SAAW/yG,EAChBliB,KAAKk1H,aAAel1H,KAAKk9F,YACzBl9F,KAAK89G,QAAU,GACf99G,KAAKm1H,UAAY,GACjBn1H,KAAKumG,aAAUnpG,EACf4C,KAAKu9G,MAAQ,GACbv9G,KAAKmwF,6BAA0B/yF,EAC/B4C,KAAKwsG,eAAYpvG,EACjB4C,KAAKuiG,QAAU,GACfviG,KAAKo1H,gBAAah4H,EAClB4C,KAAK8lB,WAAa,CAAC,EAClB9lB,KAAKq1H,0BAAuBj4H,EAC7B4C,KAAKs1H,gBAAkB,GACvBt1H,KAAKqsF,OAAS,CAAC,EACfrsF,KAAKwT,SAAW,IAAI28G,GACpBnwH,KAAKoiH,SAAW,CAAC,EACjBpiH,KAAKu1H,eAAiB,CAAC,EACvBv1H,KAAKw1H,UAAW,EAChBx1H,KAAK0tG,yBAAsBtwG,EAC3B4C,KAAKioG,cAAW7qG,EAChB4C,KAAKy1H,UDl8JT,SAAkBj7H,EAAI25C,GACtB,IAAIuhF,EACJ,OAAO,YAAYjzH,GAOf,OANI0xC,GACAsT,aAAaiuE,GACbA,EAAU3lH,WAAWvV,EAAI25C,EAAO1xC,IAEhCjI,EAAGuF,MAAMC,KAAMyC,GAEZ0xC,CACX,CACJ,CCu7JyBwhF,EAAU/pC,GAAO5rF,KAAK8jG,OAAOlY,IAAO1pE,EAAQ0zG,aAAe,GAC5E51H,KAAK6uG,aAAe,GACpBulB,GAAUp0H,KAAKgN,IAAMhN,KAChBvB,GAAY6xF,GAIjByS,GAASH,OAAO5iG,KAAM,WAAY+zH,IAClChxB,GAASH,OAAO5iG,KAAM,WAAYi0H,IAClCj0H,KAAK61H,cACD71H,KAAKw1H,UACLx1H,KAAK8jG,UAPLzjG,QAAQyD,MAAM,oEAStB,CACA,eAAIo5F,GACA,MAAQh7E,SAAS,YAAEg7E,EAAY,oBAAEnR,GAAuB,MAAE1oC,EAAM,OAAED,EAAO,aAAE8xE,GAAkBl1H,KAC7F,OAAKu/E,EAAc2d,GAGfnR,GAAuBmpC,EAChBA,EAEJ9xE,EAASC,EAAQD,EAAS,KALtB85C,CAMf,CACA,QAAI52F,GACA,OAAOtG,KAAKuU,OAAOjO,IACvB,CACA,QAAIA,CAAKA,GACLtG,KAAKuU,OAAOjO,KAAOA,CACvB,CACA,WAAI4b,GACA,OAAOliB,KAAKi1H,QAChB,CACA,WAAI/yG,CAAQA,GACRliB,KAAKuU,OAAO2N,QAAUA,CAC1B,CACA,YAAIq3F,GACA,OAAOA,EACX,CACH,WAAAsc,GASO,OARA71H,KAAKooH,cAAc,cACfpoH,KAAKkiB,QAAQiqE,WACbnsF,KAAKotF,SAELsQ,GAAY19F,KAAMA,KAAKkiB,QAAQqvC,kBAEnCvxD,KAAK81H,aACL91H,KAAKooH,cAAc,aACZpoH,IACX,CACA,KAAAmJ,GAEI,OADAknF,GAAYrwF,KAAKswF,OAAQtwF,KAAK4lB,KACvB5lB,IACX,CACA,IAAA83B,GAEI,OADAirE,GAASjrE,KAAK93B,MACPA,IACX,CACH,MAAAotF,CAAO/pC,EAAOD,GACF2/C,GAASV,QAAQriG,MAGlBA,KAAK+1H,kBAAoB,CACrB1yE,QACAD,UAJJpjD,KAAKg2H,QAAQ3yE,EAAOD,EAO5B,CACA,OAAA4yE,CAAQ3yE,EAAOD,GACX,MAAMlhC,EAAUliB,KAAKkiB,QACfouE,EAAStwF,KAAKswF,OACd4M,EAAch7E,EAAQ6pE,qBAAuB/rF,KAAKk9F,YAClD+4B,EAAUj2H,KAAKkrF,SAAS6R,eAAezM,EAAQjtC,EAAOD,EAAQ85C,GAC9Dg5B,EAAWh0G,EAAQqvC,kBAAoBvxD,KAAKkrF,SAASC,sBACrDS,EAAO5rF,KAAKqjD,MAAQ,SAAW,SACrCrjD,KAAKqjD,MAAQ4yE,EAAQ5yE,MACrBrjD,KAAKojD,OAAS6yE,EAAQ7yE,OACtBpjD,KAAKk1H,aAAel1H,KAAKk9F,YACpBQ,GAAY19F,KAAMk2H,GAAU,KAGjCl2H,KAAKooH,cAAc,SAAU,CACzB73G,KAAM0lH,IAEV3wG,EAASpD,EAAQi0G,SAAU,CACvBn2H,KACAi2H,GACDj2H,MACCA,KAAKw1H,UACDx1H,KAAKy1H,UAAU7pC,IACf5rF,KAAKyvB,SAGjB,CACA,mBAAA2mG,GAGIzlG,EAFgB3wB,KAAKkiB,QACSmqE,QAAU,CAAC,GACrB,CAACgqC,EAAarI,KAC9BqI,EAAYrpH,GAAKghH,CAAM,GAE/B,CACH,mBAAAsI,GACO,MAAMp0G,EAAUliB,KAAKkiB,QACfq0G,EAAYr0G,EAAQmqE,OACpBA,EAASrsF,KAAKqsF,OACdmqC,EAAUn7H,OAAOmqB,KAAK6mE,GAAQl7D,QAAO,CAAC/1B,EAAK4R,KAC7C5R,EAAI4R,IAAM,EACH5R,IACR,CAAC,GACJ,IAAI49D,EAAQ,GACRu9D,IACAv9D,EAAQA,EAAMh+D,OAAOK,OAAOmqB,KAAK+wG,GAAWxxH,KAAKiI,IAC7C,MAAMokH,EAAemF,EAAUvpH,GACzBwrD,EAAO24D,GAAcnkH,EAAIokH,GACzBqF,EAAoB,MAATj+D,EACX09C,EAAwB,MAAT19C,EACrB,MAAO,CACHt2C,QAASkvG,EACTsF,UAAWD,EAAW,YAAcvgB,EAAe,SAAW,OAC9DygB,MAAOF,EAAW,eAAiBvgB,EAAe,WAAa,SAClE,MAGTvlF,EAAKqoC,GAAQj+D,IACT,MAAMq2H,EAAer2H,EAAKmnB,QACpBlV,EAAKokH,EAAapkH,GAClBwrD,EAAO24D,GAAcnkH,EAAIokH,GACzBwF,EAAYl3C,EAAe0xC,EAAatwH,KAAM/F,EAAK47H,YAC3Bv5H,IAA1Bg0H,EAAa98E,UAA0Bq/E,GAAqBvC,EAAa98E,SAAUkkB,KAAUm7D,GAAqB54H,EAAK27H,aACvHtF,EAAa98E,SAAWv5C,EAAK27H,WAEjCF,EAAQxpH,IAAM,EACd,IAAIo/E,EAAQ,KACZ,GAAIp/E,KAAMq/E,GAAUA,EAAOr/E,GAAIlM,OAAS81H,EACpCxqC,EAAQC,EAAOr/E,OACZ,CAEHo/E,EAAQ,IADWmtB,GAASiW,SAASoH,GAC7B,CAAe,CACnB5pH,KACAlM,KAAM81H,EACNhxG,IAAK5lB,KAAK4lB,IACVkkE,MAAO9pF,OAEXqsF,EAAOD,EAAMp/E,IAAMo/E,CACvB,CACAA,EAAM5lD,KAAK4qF,EAAclvG,EAAQ,IAErCyO,EAAK6lG,GAAS,CAACK,EAAY7pH,KAClB6pH,UACMxqC,EAAOr/E,EAClB,IAEJ2jB,EAAK07D,GAASD,IACVyvB,GAAQ99D,UAAU/9C,KAAMosF,EAAOA,EAAMlqE,SACrC25F,GAAQgC,OAAO79G,KAAMosF,EAAM,GAEnC,CACH,eAAA0qC,GACO,MAAM3xB,EAAWnlG,KAAKm1H,UAChB5mB,EAAUvuG,KAAKsG,KAAK2kF,SAASpwF,OAC7ByzG,EAAUnJ,EAAStqG,OAEzB,GADAsqG,EAASt4E,MAAK,CAACxM,EAAGxM,IAAIwM,EAAE9Q,MAAQsE,EAAEtE,QAC9B++F,EAAUC,EAAS,CACnB,IAAI,IAAI5zG,EAAI4zG,EAAS5zG,EAAI2zG,IAAW3zG,EAChCqF,KAAK+2H,oBAAoBp8H,GAE7BwqG,EAASt5E,OAAO0iF,EAASD,EAAUC,EACvC,CACAvuG,KAAKs1H,gBAAkBnwB,EAASjgG,MAAM,GAAG2nB,KAAK+mG,GAAc,QAAS,SACzE,CACH,2BAAAoD,GACO,MAAQ7B,UAAWhwB,EAAW7+F,MAAM,SAAE2kF,IAAiBjrF,KACnDmlG,EAAStqG,OAASowF,EAASpwF,eACpBmF,KAAKumG,QAEhBpB,EAASl0E,SAAQ,CAACs0D,EAAMh2E,KACqC,IAArD07E,EAASpmF,QAAQ3J,GAAIA,IAAMqqF,EAAKizB,WAAU39G,QAC1CmF,KAAK+2H,oBAAoBxnH,EAC7B,GAER,CACA,wBAAA0nH,GACI,MAAMC,EAAiB,GACjBjsC,EAAWjrF,KAAKsG,KAAK2kF,SAC3B,IAAItwF,EAAGwlF,EAEP,IADAngF,KAAKg3H,8BACDr8H,EAAI,EAAGwlF,EAAO8K,EAASpwF,OAAQF,EAAIwlF,EAAMxlF,IAAI,CAC7C,MAAM+tG,EAAUzd,EAAStwF,GACzB,IAAI4qF,EAAOvlF,KAAKypG,eAAe9uG,GAC/B,MAAMmG,EAAO4nG,EAAQ5nG,MAAQd,KAAKuU,OAAOzT,KAWzC,GAVIykF,EAAKzkF,MAAQykF,EAAKzkF,OAASA,IAC3Bd,KAAK+2H,oBAAoBp8H,GACzB4qF,EAAOvlF,KAAKypG,eAAe9uG,IAE/B4qF,EAAKzkF,KAAOA,EACZykF,EAAKmG,UAAYgd,EAAQhd,WAAaslC,GAAalwH,EAAMd,KAAKkiB,SAC9DqjE,EAAKr7C,MAAQw+D,EAAQx+D,OAAS,EAC9Bq7C,EAAKh2E,MAAQ5U,EACb4qF,EAAK7rD,MAAQ,GAAKgvE,EAAQhvE,MAC1B6rD,EAAK+H,QAAUttF,KAAKkyG,iBAAiBv3G,GACjC4qF,EAAK8gB,WACL9gB,EAAK8gB,WAAWoC,YAAY9tG,GAC5B4qF,EAAK8gB,WAAWgC,iBACb,CACH,MAAM8uB,EAAkB5d,GAAS+V,cAAcxuH,IACzC,mBAAEqnG,EAAmB,gBAAEC,GAAqBz/E,GAASsiE,SAASnqF,GACpEzF,OAAOyE,OAAOq3H,EAAiB,CAC3B/uB,gBAAiBmR,GAASC,WAAWpR,GACrCD,mBAAoBA,GAAsBoR,GAASC,WAAWrR,KAElE5iB,EAAK8gB,WAAa,IAAI8wB,EAAgBn3H,KAAMrF,GAC5Cu8H,EAAel7H,KAAKupF,EAAK8gB,WAC7B,CACJ,CAEA,OADArmG,KAAK82H,kBACEI,CACX,CACH,cAAAE,GACOzmG,EAAK3wB,KAAKsG,KAAK2kF,UAAU,CAACyd,EAASroB,KAC/BrgF,KAAKypG,eAAeppB,GAAcgmB,WAAWhuF,OAAO,GACrDrY,KACP,CACH,KAAAqY,GACOrY,KAAKo3H,iBACLp3H,KAAKooH,cAAc,QACvB,CACA,MAAAtkB,CAAOlY,GACH,MAAMr3E,EAASvU,KAAKuU,OACpBA,EAAOuvF,SACP,MAAM5hF,EAAUliB,KAAKi1H,SAAW1gH,EAAOk2F,eAAel2F,EAAO6+G,oBAAqBpzH,KAAKkU,cACjFmjH,EAAgBr3H,KAAK0tG,qBAAuBxrF,EAAQ+kC,UAK1D,GAJAjnD,KAAKs3H,gBACLt3H,KAAKu3H,sBACLv3H,KAAKw3H,uBACLx3H,KAAKwT,SAAS88G,cAIP,IAHHtwH,KAAKooH,cAAc,eAAgB,CACnCx8B,OACA9gC,YAAY,IAEZ,OAEJ,MAAMosE,EAAiBl3H,KAAKi3H,2BAC5Bj3H,KAAKooH,cAAc,wBACnB,IAAInK,EAAa,EACjB,IAAI,IAAItjH,EAAI,EAAGwlF,EAAOngF,KAAKsG,KAAK2kF,SAASpwF,OAAQF,EAAIwlF,EAAMxlF,IAAI,CAC3D,MAAM,WAAE0rG,GAAgBrmG,KAAKypG,eAAe9uG,GACtC0d,GAASg/G,IAAyD,IAAxCH,EAAe1yH,QAAQ6hG,GACvDA,EAAW4D,sBAAsB5xF,GACjC4lG,EAAa3sG,KAAKnV,KAAKkqG,EAAW6F,iBAAkB+R,EACxD,CACAA,EAAaj+G,KAAKy3H,YAAcv1G,EAAQk6F,OAAO7uB,YAAc0wB,EAAa,EAC1Ej+G,KAAK03H,cAAczZ,GACdoZ,GACD1mG,EAAKumG,GAAiB7wB,IAClBA,EAAWhuF,OAAO,IAG1BrY,KAAK23H,gBAAgB/rC,GACrB5rF,KAAKooH,cAAc,cAAe,CAC9Bx8B,SAEJ5rF,KAAK89G,QAAQjxF,KAAK+mG,GAAc,IAAK,SACrC,MAAM,QAAErxB,EAAQ,WAAE6yB,GAAgBp1H,KAC9Bo1H,EACAp1H,KAAK43H,cAAcxC,GAAY,GACxB7yB,EAAQ1nG,QACfmF,KAAK63H,mBAAmBt1B,EAASA,GAAS,GAE9CviG,KAAKyvB,QACT,CACH,aAAA6nG,GACO3mG,EAAK3wB,KAAKqsF,QAASD,IACfyvB,GAAQkC,UAAU/9G,KAAMosF,EAAM,IAElCpsF,KAAKo2H,sBACLp2H,KAAKs2H,qBACT,CACH,mBAAAiB,GACO,MAAMr1G,EAAUliB,KAAKkiB,QACf41G,EAAiB,IAAIhzC,IAAIzpF,OAAOmqB,KAAKxlB,KAAK8lB,aAC1CiyG,EAAY,IAAIjzC,IAAI5iE,EAAQ9P,QAC7BivE,GAAUy2C,EAAgBC,MAAgB/3H,KAAKq1H,uBAAyBnzG,EAAQiqE,aACjFnsF,KAAKg4H,eACLh4H,KAAK81H,aAEb,CACH,oBAAA0B,GACO,MAAM,eAAEjC,GAAoBv1H,KACtBypB,EAAUzpB,KAAKi4H,0BAA4B,GACjD,IAAK,MAAM,OAAEn5H,EAAO,MAAE0e,EAAM,MAAEgJ,KAAYiD,EAAQ,CAE9C6qG,GAAgBiB,EAAgB/3G,EADR,oBAAX1e,GAAgC0nB,EAAQA,EAEzD,CACJ,CACH,sBAAAyxG,GACO,MAAMppB,EAAe7uG,KAAK6uG,aAC1B,IAAKA,IAAiBA,EAAah0G,OAC/B,OAEJmF,KAAK6uG,aAAe,GACpB,MAAMqpB,EAAel4H,KAAKsG,KAAK2kF,SAASpwF,OAClCs9H,EAAW35F,GAAM,IAAIsmD,IAAI+pB,EAAahqG,QAAQqM,GAAIA,EAAE,KAAOstB,IAAKz5B,KAAI,CAACmM,EAAGvW,IAAIA,EAAI,IAAMuW,EAAE2a,OAAO,GAAGttB,KAAK,QACvG65H,EAAYD,EAAQ,GAC1B,IAAI,IAAIx9H,EAAI,EAAGA,EAAIu9H,EAAcv9H,IAC7B,IAAK0mF,GAAU+2C,EAAWD,EAAQx9H,IAC9B,OAGR,OAAO+P,MAAMkV,KAAKw4G,GAAWrzH,KAAKmM,GAAIA,EAAEtM,MAAM,OAAMG,KAAKsb,IAAI,CACrDvhB,OAAQuhB,EAAE,GACV7C,OAAQ6C,EAAE,GACVmG,OAAQnG,EAAE,MAEtB,CACH,aAAAq3G,CAAczZ,GACP,IAEO,IAFHj+G,KAAKooH,cAAc,eAAgB,CACnCt9D,YAAY,IAEZ,OAEJ+wD,GAAQ/X,OAAO9jG,KAAMA,KAAKqjD,MAAOrjD,KAAKojD,OAAQ66D,GAC9C,MAAM/rB,EAAOlyF,KAAKwsG,UACZ6rB,EAASnmC,EAAK7uC,OAAS,GAAK6uC,EAAK9uC,QAAU,EACjDpjD,KAAK89G,QAAU,GACfntF,EAAK3wB,KAAKu9G,OAAQ7gB,IACV27B,GAA2B,cAAjB37B,EAAIpoD,WAGdooD,EAAI3+C,WACJ2+C,EAAI3+C,YAER/9C,KAAK89G,QAAQ9hH,QAAQ0gG,EAAIohB,WAAU,GACpC99G,MACHA,KAAK89G,QAAQ7sF,SAAQ,CAACl2B,EAAMwU,KACxBxU,EAAKu9H,KAAO/oH,CAAK,IAErBvP,KAAKooH,cAAc,cACvB,CACH,eAAAuP,CAAgB/rC,GACT,IAGO,IAHH5rF,KAAKooH,cAAc,uBAAwB,CAC3Cx8B,OACA9gC,YAAY,IAFhB,CAMA,IAAI,IAAInwD,EAAI,EAAGwlF,EAAOngF,KAAKsG,KAAK2kF,SAASpwF,OAAQF,EAAIwlF,IAAQxlF,EACzDqF,KAAKypG,eAAe9uG,GAAG0rG,WAAWtoD,YAEtC,IAAI,IAAIpjD,EAAI,EAAGwlF,EAAOngF,KAAKsG,KAAK2kF,SAASpwF,OAAQF,EAAIwlF,IAAQxlF,EACzDqF,KAAKu4H,eAAe59H,EAAGmzB,GAAW89D,GAAQA,EAAK,CAC3CvL,aAAc1lF,IACbixF,GAET5rF,KAAKooH,cAAc,sBAAuB,CACtCx8B,QAVJ,CAYJ,CACH,cAAA2sC,CAAehpH,EAAOq8E,GACf,MAAMrG,EAAOvlF,KAAKypG,eAAel6F,GAC3B9M,EAAO,CACT8iF,OACAh2E,QACAq8E,OACA9gC,YAAY,IAEwC,IAApD9qD,KAAKooH,cAAc,sBAAuB3lH,KAG9C8iF,EAAK8gB,WAAWjE,QAAQxW,GACxBnpF,EAAKqoD,YAAa,EAClB9qD,KAAKooH,cAAc,qBAAsB3lH,GAC7C,CACA,MAAAgtB,IAGW,IAFHzvB,KAAKooH,cAAc,eAAgB,CACnCt9D,YAAY,MAIZi4C,GAAS15E,IAAIrpB,MACTA,KAAKw1H,WAAazyB,GAASV,QAAQriG,OACnC+iG,GAASvlF,MAAMxd,OAGnBA,KAAKsiG,OACLyxB,GAAqB,CACjBjqC,MAAO9pF,QAGnB,CACA,IAAAsiG,GACI,IAAI3nG,EACJ,GAAIqF,KAAK+1H,kBAAmB,CACxB,MAAM,MAAE1yE,EAAM,OAAED,GAAYpjD,KAAK+1H,kBACjC/1H,KAAKg2H,QAAQ3yE,EAAOD,GACpBpjD,KAAK+1H,kBAAoB,IAC7B,CAEA,GADA/1H,KAAKmJ,QACDnJ,KAAKqjD,OAAS,GAAKrjD,KAAKojD,QAAU,EAClC,OAEJ,IAEO,IAFHpjD,KAAKooH,cAAc,aAAc,CACjCt9D,YAAY,IAEZ,OAEJ,MAAM0tE,EAASx4H,KAAK89G,QACpB,IAAInjH,EAAI,EAAGA,EAAI69H,EAAO39H,QAAU29H,EAAO79H,GAAG8hD,GAAK,IAAK9hD,EAChD69H,EAAO79H,GAAG2nG,KAAKtiG,KAAKwsG,WAGxB,IADAxsG,KAAKy4H,gBACC99H,EAAI69H,EAAO39H,SAAUF,EACvB69H,EAAO79H,GAAG2nG,KAAKtiG,KAAKwsG,WAExBxsG,KAAKooH,cAAc,YACvB,CACH,sBAAAhjB,CAAuBF,GAChB,MAAMC,EAAWnlG,KAAKs1H,gBAChBx5H,EAAS,GACf,IAAInB,EAAGwlF,EACP,IAAIxlF,EAAI,EAAGwlF,EAAOglB,EAAStqG,OAAQF,EAAIwlF,IAAQxlF,EAAE,CAC7C,MAAM4qF,EAAO4f,EAASxqG,GACjBuqG,IAAiB3f,EAAK+H,SACvBxxF,EAAOE,KAAKupF,EAEpB,CACA,OAAOzpF,CACX,CACH,4BAAAo+G,GACO,OAAOl6G,KAAKolG,wBAAuB,EACvC,CACH,aAAAqzB,GACO,IAEO,IAFHz4H,KAAKooH,cAAc,qBAAsB,CACzCt9D,YAAY,IAEZ,OAEJ,MAAMq6C,EAAWnlG,KAAKk6G,+BACtB,IAAI,IAAIv/G,EAAIwqG,EAAStqG,OAAS,EAAGF,GAAK,IAAKA,EACvCqF,KAAK04H,aAAavzB,EAASxqG,IAE/BqF,KAAKooH,cAAc,oBACvB,CACH,YAAAsQ,CAAanzC,GACN,MAAM3/D,EAAM5lB,KAAK4lB,IACX+nE,EAAOpI,EAAK8mB,MACZssB,GAAWhrC,EAAKt9B,SAChB6hC,EAhgBd,SAAwB3M,EAAMinB,GAC1B,MAAM,OAAErmB,EAAO,OAAEC,GAAYb,EAC7B,OAAIY,GAAUC,EACH,CACHnjC,KAAMuxE,GAAeruC,EAAQqmB,EAAW,QACxCrpD,MAAOqxE,GAAeruC,EAAQqmB,EAAW,SACzCxpD,IAAKwxE,GAAepuC,EAAQomB,EAAW,OACvCtpD,OAAQsxE,GAAepuC,EAAQomB,EAAW,WAG3CA,CACX,CAqfqBosB,CAAerzC,EAAMvlF,KAAKwsG,WACjC/pG,EAAO,CACT8iF,OACAh2E,MAAOg2E,EAAKh2E,MACZu7C,YAAY,IAEsC,IAAlD9qD,KAAKooH,cAAc,oBAAqB3lH,KAGxCk2H,GACAvmC,GAASxsE,EAAK,CACVq9B,MAAoB,IAAd0qC,EAAK1qC,KAAiB,EAAIivC,EAAKjvC,KAAO0qC,EAAK1qC,KACjDE,OAAsB,IAAfwqC,EAAKxqC,MAAkBnjD,KAAKqjD,MAAQ6uC,EAAK/uC,MAAQwqC,EAAKxqC,MAC7DH,KAAkB,IAAb2qC,EAAK3qC,IAAgB,EAAIkvC,EAAKlvC,IAAM2qC,EAAK3qC,IAC9CE,QAAwB,IAAhByqC,EAAKzqC,OAAmBljD,KAAKojD,OAAS8uC,EAAKhvC,OAASyqC,EAAKzqC,SAGzEqiC,EAAK8gB,WAAW/D,OACZq2B,GACAtmC,GAAWzsE,GAEfnjB,EAAKqoD,YAAa,EAClB9qD,KAAKooH,cAAc,mBAAoB3lH,GAC3C,CACH,aAAA43G,CAAcpoB,GACP,OAAOD,GAAeC,EAAOjyF,KAAKwsG,UAAWxsG,KAAKy3H,YACtD,CACA,yBAAAoB,CAA0BlzH,EAAGimF,EAAM1pE,EAASk4F,GACxC,MAAMt7G,EAASw8G,GAAYC,MAAM3vB,GACjC,MAAsB,oBAAX9sF,EACAA,EAAOkB,KAAM2F,EAAGuc,EAASk4F,GAE7B,EACX,CACA,cAAA3Q,CAAeppB,GACX,MAAMqoB,EAAU1oG,KAAKsG,KAAK2kF,SAAS5K,GAC7B8kB,EAAWnlG,KAAKm1H,UACtB,IAAI5vC,EAAO4f,EAAStgG,QAAQ3J,GAAIA,GAAKA,EAAEs9G,WAAa9P,IAAStjG,MAkB7D,OAjBKmgF,IACDA,EAAO,CACHzkF,KAAM,KACNwF,KAAM,GACNoiG,QAAS,KACTrC,WAAY,KACZ76D,OAAQ,KACRs9D,QAAS,KACTE,QAAS,KACT9+D,MAAOw+D,GAAWA,EAAQx+D,OAAS,EACnC36B,MAAO8wE,EACPm4B,SAAU9P,EACV7iB,QAAS,GACTF,SAAS,GAEbwf,EAASnpG,KAAKupF,IAEXA,CACX,CACA,UAAArxE,GACI,OAAOlU,KAAKioG,WAAajoG,KAAKioG,SAAWvS,GAAc,KAAM,CACzD5L,MAAO9pF,KACPc,KAAM,UAEd,CACA,sBAAA+zG,GACI,OAAO70G,KAAKk6G,+BAA+Br/G,MAC/C,CACA,gBAAAq3G,CAAiB7xB,GACb,MAAMqoB,EAAU1oG,KAAKsG,KAAK2kF,SAAS5K,GACnC,IAAKqoB,EACD,OAAO,EAEX,MAAMnjB,EAAOvlF,KAAKypG,eAAeppB,GACjC,MAA8B,mBAAhBkF,EAAK/5C,QAAwB+5C,EAAK/5C,QAAUk9D,EAAQl9D,MACtE,CACA,oBAAAstF,CAAqBz4C,EAAciN,GAClBttF,KAAKypG,eAAeppB,GAC5B70C,QAAU8hD,CACnB,CACA,oBAAAokB,CAAqBniG,GACjBvP,KAAKu1H,eAAehmH,IAAUvP,KAAKu1H,eAAehmH,EACtD,CACA,iBAAAiiG,CAAkBjiG,GACd,OAAQvP,KAAKu1H,eAAehmH,EAChC,CACH,iBAAAwpH,CAAkB14C,EAAcssB,EAAWrf,GACpC,MAAM1B,EAAO0B,EAAU,OAAS,OAC1B/H,EAAOvlF,KAAKypG,eAAeppB,GAC3B0hB,EAAQxc,EAAK8gB,WAAWgH,wBAAmBjwG,EAAWwuF,GACxDxK,GAAQurB,IACRpnB,EAAKj/E,KAAKqmG,GAAWnhE,QAAU8hD,EAC/BttF,KAAK8jG,WAEL9jG,KAAK84H,qBAAqBz4C,EAAciN,GACxCyU,EAAM+B,OAAOve,EAAM,CACf+H,YAEJttF,KAAK8jG,QAAQl+E,GAAMA,EAAIy6D,eAAiBA,EAAeuL,OAAOxuF,IAEtE,CACA,IAAAozC,CAAK6vC,EAAcssB,GACf3sG,KAAK+4H,kBAAkB14C,EAAcssB,GAAW,EACpD,CACA,IAAA9wE,CAAKwkD,EAAcssB,GACf3sG,KAAK+4H,kBAAkB14C,EAAcssB,GAAW,EACpD,CACH,mBAAAoqB,CAAoB12C,GACb,MAAMkF,EAAOvlF,KAAKm1H,UAAU90C,GACxBkF,GAAQA,EAAK8gB,YACb9gB,EAAK8gB,WAAWuD,kBAEb5pG,KAAKm1H,UAAU90C,EAC1B,CACA,KAAA24C,GACI,IAAIr+H,EAAGwlF,EAGP,IAFAngF,KAAK83B,OACLirE,GAASp3E,OAAO3rB,MACZrF,EAAI,EAAGwlF,EAAOngF,KAAKsG,KAAK2kF,SAASpwF,OAAQF,EAAIwlF,IAAQxlF,EACrDqF,KAAK+2H,oBAAoBp8H,EAEjC,CACA,OAAAswB,GACIjrB,KAAKooH,cAAc,iBACnB,MAAM,OAAE93B,EAAO,IAAE1qE,GAAS5lB,KAC1BA,KAAKg5H,QACLh5H,KAAKuU,OAAOs+G,aACRviC,IACAtwF,KAAKg4H,eACL3nC,GAAYC,EAAQ1qE,GACpB5lB,KAAKkrF,SAAS+zB,eAAer5F,GAC7B5lB,KAAKswF,OAAS,KACdtwF,KAAK4lB,IAAM,aAERwuG,GAAUp0H,KAAKgN,IACtBhN,KAAKooH,cAAc,eACvB,CACA,aAAA6Q,IAAiBx2H,GACb,OAAOzC,KAAKswF,OAAO4oC,aAAaz2H,EACpC,CACH,UAAAqzH,GACO91H,KAAKm5H,iBACDn5H,KAAKkiB,QAAQiqE,WACbnsF,KAAKo5H,uBAELp5H,KAAKw1H,UAAW,CAExB,CACH,cAAA2D,GACO,MAAMxyG,EAAY3mB,KAAK8lB,WACjBolE,EAAWlrF,KAAKkrF,SAChBmuC,EAAO,CAACv4H,EAAM0iB,KAChB0nE,EAASzsE,iBAAiBze,KAAMc,EAAM0iB,GACtCmD,EAAU7lB,GAAQ0iB,CAAQ,EAExBA,EAAW,CAAC7d,EAAGzK,EAAGqrD,KACpB5gD,EAAEg3F,QAAUzhG,EACZyK,EAAEi3F,QAAUr2C,EACZvmD,KAAK43H,cAAcjyH,EAAE,EAEzBgrB,EAAK3wB,KAAKkiB,QAAQ9P,QAAStR,GAAOu4H,EAAKv4H,EAAM0iB,IACjD,CACH,oBAAA41G,GACYp5H,KAAKq1H,uBACNr1H,KAAKq1H,qBAAuB,CAAC,GAEjC,MAAM1uG,EAAY3mB,KAAKq1H,qBACjBnqC,EAAWlrF,KAAKkrF,SAChBmuC,EAAO,CAACv4H,EAAM0iB,KAChB0nE,EAASzsE,iBAAiBze,KAAMc,EAAM0iB,GACtCmD,EAAU7lB,GAAQ0iB,CAAQ,EAExB81G,EAAU,CAACx4H,EAAM0iB,KACfmD,EAAU7lB,KACVoqF,EAAStpE,oBAAoB5hB,KAAMc,EAAM0iB,UAClCmD,EAAU7lB,GACrB,EAEE0iB,EAAW,CAAC6/B,EAAOD,KACjBpjD,KAAKswF,QACLtwF,KAAKotF,OAAO/pC,EAAOD,EACvB,EAEJ,IAAIm2E,EACJ,MAAM/D,EAAW,KACb8D,EAAQ,SAAU9D,GAClBx1H,KAAKw1H,UAAW,EAChBx1H,KAAKotF,SACLisC,EAAK,SAAU71G,GACf61G,EAAK,SAAUE,EAAS,EAE5BA,EAAW,KACPv5H,KAAKw1H,UAAW,EAChB8D,EAAQ,SAAU91G,GAClBxjB,KAAKg5H,QACLh5H,KAAKg2H,QAAQ,EAAG,GAChBqD,EAAK,SAAU7D,EAAS,EAExBtqC,EAASg0B,WAAWl/G,KAAKswF,QACzBklC,IAEA+D,GAER,CACH,YAAAvB,GACOrnG,EAAK3wB,KAAK8lB,YAAY,CAACtC,EAAU1iB,KAC7Bd,KAAKkrF,SAAStpE,oBAAoB5hB,KAAMc,EAAM0iB,EAAS,IAE3DxjB,KAAK8lB,WAAa,CAAC,EACnB6K,EAAK3wB,KAAKq1H,sBAAsB,CAAC7xG,EAAU1iB,KACvCd,KAAKkrF,SAAStpE,oBAAoB5hB,KAAMc,EAAM0iB,EAAS,IAE3DxjB,KAAKq1H,0BAAuBj4H,CAChC,CACA,gBAAAo8H,CAAiBxgE,EAAO4yB,EAAM03B,GAC1B,MAAM1hF,EAAS0hF,EAAU,MAAQ,SACjC,IAAI/9B,EAAMxqF,EAAMJ,EAAGwlF,EAKnB,IAJa,YAATyL,IACArG,EAAOvlF,KAAKypG,eAAezwC,EAAM,GAAGqnB,cACpCkF,EAAK8gB,WAAW,IAAMzkE,EAAS,wBAE/BjnC,EAAI,EAAGwlF,EAAOnnB,EAAMn+D,OAAQF,EAAIwlF,IAAQxlF,EAAE,CAC1CI,EAAOi+D,EAAMr+D,GACb,MAAM0rG,EAAatrG,GAAQiF,KAAKypG,eAAe1uG,EAAKslF,cAAcgmB,WAC9DA,GACAA,EAAWzkE,EAAS,cAAc7mC,EAAK60B,QAAS70B,EAAKslF,aAActlF,EAAKwU,MAEhF,CACJ,CACH,iBAAAkqH,GACO,OAAOz5H,KAAKuiG,SAAW,EAC3B,CACH,iBAAAm3B,CAAkBC,GACX,MAAMC,EAAa55H,KAAKuiG,SAAW,GAC7B32C,EAAS+tE,EAAe50H,KAAI,EAAGs7E,eAAe9wE,YAChD,MAAMg2E,EAAOvlF,KAAKypG,eAAeppB,GACjC,IAAKkF,EACD,MAAM,IAAIlhF,MAAM,6BAA+Bg8E,GAEnD,MAAO,CACHA,eACAzwD,QAAS21D,EAAKj/E,KAAKiJ,GACnBA,QACH,KAEY0wE,EAAer0B,EAAQguE,KAEpC55H,KAAKuiG,QAAU32C,EACf5rD,KAAKo1H,WAAa,KAClBp1H,KAAK63H,mBAAmBjsE,EAAQguE,GAExC,CACH,aAAAxR,CAAc7lF,EAAM9/B,EAAMoC,GACnB,OAAO7E,KAAKwT,SAASxV,OAAOgC,KAAMuiC,EAAM9/B,EAAMoC,EAClD,CACH,eAAA2jG,CAAgBqxB,GACT,OAA6E,IAAtE75H,KAAKwT,SAAS67F,OAAOxqG,QAAQ1F,GAAIA,EAAEiV,OAAOpH,KAAO6sH,IAAUh/H,MACtE,CACH,kBAAAg9H,CAAmBjsE,EAAQguE,EAAYE,GAChC,MAAMC,EAAe/5H,KAAKkiB,QAAQopE,MAC5BnhE,EAAO,CAAC9J,EAAGxM,IAAIwM,EAAExb,QAAQ3J,IAAK2Y,EAAEwZ,MAAMk5B,GAAIrrD,EAAEmlF,eAAiB95B,EAAE85B,cAAgBnlF,EAAEqU,QAAUg3C,EAAEh3C,UAC7FyqH,EAAc7vG,EAAKyvG,EAAYhuE,GAC/BquE,EAAYH,EAASluE,EAASzhC,EAAKyhC,EAAQguE,GAC7CI,EAAYn/H,QACZmF,KAAKw5H,iBAAiBQ,EAAaD,EAAanuC,MAAM,GAEtDquC,EAAUp/H,QAAUk/H,EAAanuC,MACjC5rF,KAAKw5H,iBAAiBS,EAAWF,EAAanuC,MAAM,EAE5D,CACH,aAAAgsC,CAAcjyH,EAAGm0H,GACV,MAAMr3H,EAAO,CACT8L,MAAO5I,EACPm0H,SACAhvE,YAAY,EACZovE,YAAal6H,KAAKq6G,cAAc10G,IAE9Bw0H,EAAe/lH,IAAUA,EAAO8N,QAAQ9P,QAAUpS,KAAKkiB,QAAQ9P,QAAQyf,SAASlsB,EAAE+7G,OAAO5gH,MAC/F,IAA6D,IAAzDd,KAAKooH,cAAc,cAAe3lH,EAAM03H,GACxC,OAEJ,MAAMtxG,EAAU7oB,KAAKo6H,aAAaz0H,EAAGm0H,EAAQr3H,EAAKy3H,aAMlD,OALAz3H,EAAKqoD,YAAa,EAClB9qD,KAAKooH,cAAc,aAAc3lH,EAAM03H,IACnCtxG,GAAWpmB,EAAKomB,UAChB7oB,KAAKyvB,SAEFzvB,IACX,CACH,YAAAo6H,CAAaz0H,EAAGm0H,EAAQI,GACjB,MAAQ33B,QAASq3B,EAAa,GAAG,QAAE13G,GAAaliB,KAC1Co6G,EAAmB0f,EACnBluE,EAAS5rD,KAAKq6H,mBAAmB10H,EAAGi0H,EAAYM,EAAa9f,GAC7DkgB,ED19LV,SAAuB30H,GACvB,MAAkB,YAAXA,EAAE7E,MAAiC,UAAX6E,EAAE7E,MAA+B,gBAAX6E,EAAE7E,IAC3D,CCw9LwBy5H,CAAc50H,GACxB60H,EAhzBb,SAA4B70H,EAAG60H,EAAWN,EAAaI,GACpD,OAAKJ,GAA0B,aAAXv0H,EAAE7E,KAGlBw5H,EACOE,EAEJ70H,EALI,IAMf,CAwyB0B80H,CAAmB90H,EAAG3F,KAAKo1H,WAAY8E,EAAaI,GAClEJ,IACAl6H,KAAKo1H,WAAa,KAClB9vG,EAASpD,EAAQ8pE,QAAS,CACtBrmF,EACAimD,EACA5rD,MACDA,MACCs6H,GACAh1G,EAASpD,EAAQ+pE,QAAS,CACtBtmF,EACAimD,EACA5rD,MACDA,OAGX,MAAM6oB,GAAWo3D,EAAer0B,EAAQguE,GAMxC,OALI/wG,GAAWixG,KACX95H,KAAKuiG,QAAU32C,EACf5rD,KAAK63H,mBAAmBjsE,EAAQguE,EAAYE,IAEhD95H,KAAKo1H,WAAaoF,EACX3xG,CACX,CACH,kBAAAwxG,CAAmB10H,EAAGi0H,EAAYM,EAAa9f,GACxC,GAAe,aAAXz0G,EAAE7E,KACF,MAAO,GAEX,IAAKo5H,EACD,OAAON,EAEX,MAAMG,EAAe/5H,KAAKkiB,QAAQopE,MAClC,OAAOtrF,KAAK64H,0BAA0BlzH,EAAGo0H,EAAanuC,KAAMmuC,EAAc3f,EAC9E,EAEJ,SAASua,KACL,OAAOhkG,EAAK+jG,GAAMN,WAAYtqC,GAAQA,EAAMt2E,SAAS88G,cACzD,CA4BI,SAASoK,GAAoBlpC,EAAKogB,EAAaC,EAAa8oB,GAC5D,MAAMxzH,EAVC8tF,GAUmBzD,EAAItvE,QAAQ04G,aAVN,CAC5B,aACA,WACA,aACA,aAOJ,MAAMC,GAAiBhpB,EAAcD,GAAe,EAC9CkpB,EAAaxpH,KAAKpV,IAAI2+H,EAAeF,EAAa/oB,EAAc,GAQhEmpB,EAAqBrgI,IACvB,MAAMsgI,GAAiBnpB,EAAcvgG,KAAKpV,IAAI2+H,EAAengI,IAAQigI,EAAa,EAClF,OAAO12C,GAAYvpF,EAAK,EAAG4W,KAAKpV,IAAI2+H,EAAeG,GAAe,EAEtE,MAAO,CACHC,WAAYF,EAAkB5zH,EAAE8zH,YAChCC,SAAUH,EAAkB5zH,EAAE+zH,UAC9BC,WAAYl3C,GAAY98E,EAAEg0H,WAAY,EAAGL,GACzCM,SAAUn3C,GAAY98E,EAAEi0H,SAAU,EAAGN,GAE7C,CAGI,SAASO,GAAWp5F,EAAGq5F,EAAOpgI,EAAGqrD,GACjC,MAAO,CACHrrD,EAAGA,EAAI+mC,EAAI3wB,KAAKw2E,IAAIwzC,GACpB/0E,EAAGA,EAAItkB,EAAI3wB,KAAKu1E,IAAIy0C,GAE5B,CAcI,SAASC,GAAQ31G,EAAKgK,EAASmd,EAAQqkE,EAAS3zF,EAAK+2F,GACrD,MAAM,EAAEt5G,EAAE,EAAEqrD,EAAIosD,WAAYn1F,EAAM,YAAEg+G,EAAc5pB,YAAa6pB,GAAY7rG,EACrEiiF,EAAcvgG,KAAKnV,IAAIyzB,EAAQiiF,YAAcT,EAAUrkE,EAASyuF,EAAa,GAC7E5pB,EAAc6pB,EAAS,EAAIA,EAASrqB,EAAUrkE,EAASyuF,EAAc,EAC3E,IAAIE,EAAgB,EACpB,MAAMt9F,EAAQ3gB,EAAMD,EACpB,GAAI4zF,EAAS,CAIT,MAEMuqB,IAFuBF,EAAS,EAAIA,EAASrqB,EAAU,IAChCS,EAAc,EAAIA,EAAcT,EAAU,IACI,EAE3EsqB,GAAiBt9F,GAD4B,IAAvBu9F,EAA2Bv9F,EAAQu9F,GAAsBA,EAAqBvqB,GAAWhzE,IACrE,CAC9C,CACA,MACMw9F,GAAex9F,EADR9sB,KAAKnV,IAAI,KAAOiiC,EAAQyzE,EAAc9kE,EAASu0C,IAAMuwB,GAC7B,EAC/Bc,EAAan1F,EAAQo+G,EAAcF,EACnC9oB,EAAWn1F,EAAMm+G,EAAcF,GAC/B,WAAET,EAAW,SAAEC,EAAS,WAAEC,EAAW,SAAEC,GAAcV,GAAoB9qG,EAASgiF,EAAaC,EAAae,EAAWD,GACvHkpB,EAA2BhqB,EAAcopB,EACzCa,EAAyBjqB,EAAcqpB,EACvCa,EAA0BppB,EAAasoB,EAAaY,EACpDG,EAAwBppB,EAAWsoB,EAAWY,EAC9CG,EAA2BrqB,EAAcupB,EACzCe,EAAyBtqB,EAAcwpB,EACvCe,EAA0BxpB,EAAawoB,EAAac,EACpDG,EAAwBxpB,EAAWwoB,EAAWc,EAEpD,GADAt2G,EAAI0rE,YACAkjB,EAAU,CAEV,MAAM6nB,GAAyBN,EAA0BC,GAAyB,EAIlF,GAHAp2G,EAAI4rE,IAAIt2F,EAAGqrD,EAAGsrD,EAAakqB,EAAyBM,GACpDz2G,EAAI4rE,IAAIt2F,EAAGqrD,EAAGsrD,EAAawqB,EAAuBL,GAE9Cd,EAAW,EAAG,CACd,MAAMoB,EAAUjB,GAAWS,EAAwBE,EAAuB9gI,EAAGqrD,GAC7E3gC,EAAI4rE,IAAI8qC,EAAQphI,EAAGohI,EAAQ/1E,EAAG20E,EAAUc,EAAuBppB,EAAWhxB,GAC9E,CAEA,MAAM26C,EAAKlB,GAAWa,EAAwBtpB,EAAU13G,EAAGqrD,GAG3D,GAFA3gC,EAAI+rE,OAAO4qC,EAAGrhI,EAAGqhI,EAAGh2E,GAEhB60E,EAAW,EAAG,CACd,MAAMkB,EAAUjB,GAAWa,EAAwBE,EAAuBlhI,EAAGqrD,GAC7E3gC,EAAI4rE,IAAI8qC,EAAQphI,EAAGohI,EAAQ/1E,EAAG60E,EAAUxoB,EAAWhxB,GAASw6C,EAAwB9qH,KAAKgwE,GAC7F,CAEA,MAAMk7C,GAAyB5pB,EAAWwoB,EAAWxpB,GAAee,EAAawoB,EAAavpB,IAAgB,EAI9G,GAHAhsF,EAAI4rE,IAAIt2F,EAAGqrD,EAAGqrD,EAAagB,EAAWwoB,EAAWxpB,EAAa4qB,GAAuB,GACrF52G,EAAI4rE,IAAIt2F,EAAGqrD,EAAGqrD,EAAa4qB,EAAuB7pB,EAAawoB,EAAavpB,GAAa,GAErFupB,EAAa,EAAG,CAChB,MAAMmB,EAAUjB,GAAWY,EAA0BE,EAAyBjhI,EAAGqrD,GACjF3gC,EAAI4rE,IAAI8qC,EAAQphI,EAAGohI,EAAQ/1E,EAAG40E,EAAYgB,EAA0B7qH,KAAKgwE,GAAIqxB,EAAa/wB,GAC9F,CAEA,MAAM66C,EAAKpB,GAAWQ,EAA0BlpB,EAAYz3G,EAAGqrD,GAG/D,GAFA3gC,EAAI+rE,OAAO8qC,EAAGvhI,EAAGuhI,EAAGl2E,GAEhB00E,EAAa,EAAG,CAChB,MAAMqB,EAAUjB,GAAWQ,EAA0BE,EAAyB7gI,EAAGqrD,GACjF3gC,EAAI4rE,IAAI8qC,EAAQphI,EAAGohI,EAAQ/1E,EAAG00E,EAAYtoB,EAAa/wB,GAASm6C,EACpE,CACJ,KAAO,CACHn2G,EAAI8rE,OAAOx2F,EAAGqrD,GACd,MAAMm2E,EAAcprH,KAAKw2E,IAAIi0C,GAA2BlqB,EAAc32G,EAChEyhI,EAAcrrH,KAAKu1E,IAAIk1C,GAA2BlqB,EAActrD,EACtE3gC,EAAI+rE,OAAO+qC,EAAaC,GACxB,MAAMC,EAAYtrH,KAAKw2E,IAAIk0C,GAAyBnqB,EAAc32G,EAC5D2hI,EAAYvrH,KAAKu1E,IAAIm1C,GAAyBnqB,EAActrD,EAClE3gC,EAAI+rE,OAAOirC,EAAWC,EAC1B,CACAj3G,EAAI6rE,WACR,CAiBA,SAAS67B,GAAW1nG,EAAKgK,EAASmd,EAAQqkE,EAASoD,GAC/C,MAAM,YAAEsoB,EAAY,WAAEnqB,EAAW,cAAExB,EAAc,QAAEjvF,GAAa0N,GAC1D,YAAEkiE,EAAY,gBAAE2P,EAAgB,WAAEF,EAAW,iBAAEC,GAAsBt/E,EACrE66G,EAAgC,UAAxB76G,EAAQgyF,YACtB,IAAKpiB,EACD,OAEJlsE,EAAIwnG,YAAY7rB,GAAc,IAC9B37E,EAAIynG,eAAiB7rB,EACjBu7B,GACAn3G,EAAIkoE,UAA0B,EAAdgE,EAChBlsE,EAAIo3G,SAAWv7B,GAAmB,UAElC77E,EAAIkoE,UAAYgE,EAChBlsE,EAAIo3G,SAAWv7B,GAAmB,SAEtC,IAAImR,EAAWhjF,EAAQgjF,SACvB,GAAIkqB,EAAa,CACbvB,GAAQ31G,EAAKgK,EAASmd,EAAQqkE,EAASwB,EAAU4B,GACjD,IAAI,IAAI75G,EAAI,EAAGA,EAAImiI,IAAeniI,EAC9BirB,EAAImsE,SAEHrwF,MAAMyvG,KACPyB,EAAWD,GAAcxB,EAAgB5vB,IAAOA,IAExD,CACIw7C,GA3LR,SAAiBn3G,EAAKgK,EAASgjF,GAC3B,MAAM,WAAED,EAAW,YAAE6oB,EAAY,EAAEtgI,EAAE,EAAEqrD,EAAE,YAAEsrD,EAAY,YAAED,GAAiBhiF,EAC1E,IAAIqtG,EAAczB,EAAc3pB,EAGhCjsF,EAAI0rE,YACJ1rE,EAAI4rE,IAAIt2F,EAAGqrD,EAAGsrD,EAAac,EAAasqB,EAAarqB,EAAWqqB,GAC5DrrB,EAAc4pB,GACdyB,EAAczB,EAAc5pB,EAC5BhsF,EAAI4rE,IAAIt2F,EAAGqrD,EAAGqrD,EAAagB,EAAWqqB,EAAatqB,EAAasqB,GAAa,IAE7Er3G,EAAI4rE,IAAIt2F,EAAGqrD,EAAGi1E,EAAa5oB,EAAWhxB,GAAS+wB,EAAa/wB,IAEhEh8D,EAAI6rE,YACJ7rE,EAAI+nE,MACR,CA6KQuvC,CAAQt3G,EAAKgK,EAASgjF,GAErBkqB,IACDvB,GAAQ31G,EAAKgK,EAASmd,EAAQqkE,EAASwB,EAAU4B,GACjD5uF,EAAImsE,SAEZ,CA6GA,SAASorC,GAASv3G,EAAK1D,EAASiV,EAAQjV,GACpC0D,EAAIw3G,QAAU19C,EAAevoD,EAAMmqE,eAAgBp/E,EAAQo/E,gBAC3D17E,EAAIwnG,YAAY1tC,EAAevoD,EAAMoqE,WAAYr/E,EAAQq/E,aACzD37E,EAAIynG,eAAiB3tC,EAAevoD,EAAMqqE,iBAAkBt/E,EAAQs/E,kBACpE57E,EAAIo3G,SAAWt9C,EAAevoD,EAAMsqE,gBAAiBv/E,EAAQu/E,iBAC7D77E,EAAIkoE,UAAYpO,EAAevoD,EAAM26D,YAAa5vE,EAAQ4vE,aAC1DlsE,EAAI4tE,YAAc9T,EAAevoD,EAAM6L,YAAa9gB,EAAQ8gB,YAChE,CACA,SAAS2uD,GAAO/rE,EAAKyE,EAAU5qB,GAC3BmmB,EAAI+rE,OAAOlyF,EAAOvE,EAAGuE,EAAO8mD,EAChC,CAUA,SAAS82E,GAAS73C,EAAQ1c,EAASl1C,EAAS,CAAC,GACzC,MAAMpN,EAAQg/D,EAAO3qF,QACb2iB,MAAO8/G,EAAc,EAAI7/G,IAAK8/G,EAAY/2G,EAAQ,GAAOoN,GACzDpW,MAAOggH,EAAe//G,IAAKggH,GAAgB30D,EAC7CtrD,EAAQlM,KAAKnV,IAAImhI,EAAaE,GAC9B//G,EAAMnM,KAAKpV,IAAIqhI,EAAWE,GAC1BC,EAAUJ,EAAcE,GAAgBD,EAAYC,GAAgBF,EAAcG,GAAcF,EAAYE,EAClH,MAAO,CACHj3G,QACAhJ,QACA2vE,KAAMrkB,EAAQqkB,KACdhN,KAAM1iE,EAAMD,IAAUkgH,EAAUl3G,EAAQ/I,EAAMD,EAAQC,EAAMD,EAEpE,CACC,SAASmgH,GAAY/3G,EAAK9gB,EAAMgkE,EAASl1C,GACtC,MAAM,OAAE4xD,EAAO,QAAEtjE,GAAapd,GACxB,MAAE0hB,EAAM,MAAEhJ,EAAM,KAAE2vE,EAAK,KAAEhN,GAAUk9C,GAAS73C,EAAQ1c,EAASl1C,GAC7DgqG,EA1BT,SAAuB17G,GACpB,OAAIA,EAAQ27G,QACDvrC,GAEPpwE,EAAQm5E,SAA8C,aAAnCn5E,EAAQk5E,uBACpB3I,GAEJd,EACX,CAkBuBmsC,CAAc57G,GACjC,IACIvnB,EAAGs3F,EAAOp1E,GADV,KAAE6xF,GAAM,EAAK,QAAE1uB,GAAapsD,GAAU,CAAC,EAE3C,IAAIj5B,EAAI,EAAGA,GAAKwlF,IAAQxlF,EACpBs3F,EAAQzM,GAAQhoE,GAASwiE,EAAUG,EAAOxlF,EAAIA,IAAM6rB,GAChDyrE,EAAMiH,OAECwV,GACP9oF,EAAI8rE,OAAOO,EAAM/2F,EAAG+2F,EAAM1rC,GAC1BmoD,GAAO,GAEPkvB,EAAWh4G,EAAK/I,EAAMo1E,EAAOjS,EAAS99D,EAAQ27G,SAElDhhH,EAAOo1E,GAMX,OAJI9E,IACA8E,EAAQzM,GAAQhoE,GAASwiE,EAAUG,EAAO,IAAM35D,GAChDo3G,EAAWh4G,EAAK/I,EAAMo1E,EAAOjS,EAAS99D,EAAQ27G,YAEzC1wC,CACb,CACC,SAAS4wC,GAAgBn4G,EAAK9gB,EAAMgkE,EAASl1C,GAC1C,MAAM4xD,EAAS1gF,EAAK0gF,QACd,MAAEh/D,EAAM,MAAEhJ,EAAM,KAAE2iE,GAAUk9C,GAAS73C,EAAQ1c,EAASl1C,IACtD,KAAE86E,GAAM,EAAK,QAAE1uB,GAAapsD,GAAU,CAAC,EAC7C,IAEIj5B,EAAGs3F,EAAO+rC,EAAO1qB,EAAMF,EAAM6qB,EAF7BC,EAAO,EACPC,EAAS,EAEb,MAAMC,EAAc7uH,IAASiO,GAASwiE,EAAUG,EAAO5wE,EAAQA,IAAUiX,EACnE63G,EAAQ,KACN/qB,IAASF,IACTxtF,EAAI+rE,OAAOusC,EAAM9qB,GACjBxtF,EAAI+rE,OAAOusC,EAAM5qB,GACjB1tF,EAAI+rE,OAAOusC,EAAMD,GACrB,EAMJ,IAJIvvB,IACAzc,EAAQzM,EAAO44C,EAAW,IAC1Bx4G,EAAI8rE,OAAOO,EAAM/2F,EAAG+2F,EAAM1rC,IAE1B5rD,EAAI,EAAGA,GAAKwlF,IAAQxlF,EAAE,CAEtB,GADAs3F,EAAQzM,EAAO44C,EAAWzjI,IACtBs3F,EAAMiH,KACN,SAEJ,MAAMh+F,EAAI+2F,EAAM/2F,EACVqrD,EAAI0rC,EAAM1rC,EACV+3E,EAAa,EAAJpjI,EACXojI,IAAWN,GACPz3E,EAAI+sD,EACJA,EAAO/sD,EACAA,EAAI6sD,IACXA,EAAO7sD,GAEX23E,GAAQC,EAASD,EAAOhjI,KAAOijI,IAE/BE,IACAz4G,EAAI+rE,OAAOz2F,EAAGqrD,GACdy3E,EAAQM,EACRH,EAAS,EACT7qB,EAAOF,EAAO7sD,GAElB03E,EAAQ13E,CACZ,CACA83E,GACJ,CACC,SAASE,GAAkBz5H,GACxB,MAAM2B,EAAO3B,EAAKod,QACZq/E,EAAa96F,EAAK86F,YAAc96F,EAAK86F,WAAW1mG,OAEtD,OADqBiK,EAAK2zG,aAAe3zG,EAAK0+F,QAAU/8F,EAAK40F,SAA2C,aAAhC50F,EAAK20F,yBAA0C30F,EAAKo3H,UAAYt8B,EACnHw8B,GAAkBJ,EAC3C,CAoCA,MAAMa,GAA8B,oBAAXC,OACzB,SAASn8B,GAAK18E,EAAK9gB,EAAM0Y,EAAOgJ,GACxBg4G,KAAc15H,EAAKod,QAAQ4mD,QA5BnC,SAA6BljD,EAAK9gB,EAAM0Y,EAAOgJ,GAC3C,IAAI7e,EAAO7C,EAAKgoE,MACXnlE,IACDA,EAAO7C,EAAKgoE,MAAQ,IAAI2xD,OACpB35H,EAAK6C,KAAKA,EAAM6V,EAAOgJ,IACvB7e,EAAK8pF,aAGb0rC,GAASv3G,EAAK9gB,EAAKod,SACnB0D,EAAImsE,OAAOpqF,EACf,CAmBQ+2H,CAAoB94G,EAAK9gB,EAAM0Y,EAAOgJ,GAlB9C,SAA0BZ,EAAK9gB,EAAM0Y,EAAOgJ,GACxC,MAAM,SAAEm7C,EAAS,QAAEz/C,GAAapd,EAC1B65H,EAAgBJ,GAAkBz5H,GACxC,IAAK,MAAMgkE,KAAWnH,EAClBw7D,GAASv3G,EAAK1D,EAAS4mD,EAAQ3xC,OAC/BvR,EAAI0rE,YACAqtC,EAAc/4G,EAAK9gB,EAAMgkE,EAAS,CAClCtrD,QACAC,IAAKD,EAAQgJ,EAAQ,KAErBZ,EAAI6rE,YAER7rE,EAAImsE,QAEZ,CAMQ6sC,CAAiBh5G,EAAK9gB,EAAM0Y,EAAOgJ,EAE3C,CACA,MAAMq4G,WAAoBrc,GACtBjb,UAAY,OACfA,gBAAkB,CACXjG,eAAgB,OAChBC,WAAY,GACZC,iBAAkB,EAClBC,gBAAiB,QACjB3P,YAAa,EACbwJ,iBAAiB,EACjBF,uBAAwB,UACxBvJ,MAAM,EACNsJ,UAAU,EACV0iC,SAAS,EACTxiC,QAAS,GAEhBkM,qBAAuB,CAChBnnE,gBAAiB,kBACjB4C,YAAa,eAEjBukE,mBAAqB,CACjBxa,aAAa,EACbE,WAAa1tF,GAAgB,eAATA,GAAkC,SAATA,GAEjD,WAAA6rB,CAAYi4E,GACRsO,QACA3xG,KAAK2oD,UAAW,EAChB3oD,KAAKkiB,aAAU9kB,EACf4C,KAAKygG,YAASrjG,EACd4C,KAAKwjG,WAAQpmG,EACb4C,KAAKm5G,eAAY/7G,EACjB4C,KAAK8sE,WAAQ1vE,EACb4C,KAAK8+H,aAAU1hI,EACf4C,KAAK0hE,eAAYtkE,EACjB4C,KAAKy4G,YAAa,EAClBz4G,KAAK++H,gBAAiB,EACtB/+H,KAAK4gG,mBAAgBxjG,EACjBimG,GACAhoG,OAAOyE,OAAOE,KAAMqjG,EAE5B,CACA,mBAAA2V,CAAoBxM,EAAW9gB,GAC3B,MAAMxpE,EAAUliB,KAAKkiB,QACrB,IAAKA,EAAQm5E,SAA8C,aAAnCn5E,EAAQk5E,0BAA2Cl5E,EAAQ27G,UAAY79H,KAAK++H,eAAgB,CAChH,MAAM5xC,EAAOjrE,EAAQi5E,SAAWn7F,KAAKwjG,MAAQxjG,KAAKm5G,UAClDle,GAA2Bj7F,KAAK8+H,QAAS58G,EAASsqF,EAAWrf,EAAMzB,GACnE1rF,KAAK++H,gBAAiB,CAC1B,CACJ,CACA,UAAIv5C,CAAOA,GACPxlF,KAAK8+H,QAAUt5C,SACRxlF,KAAK0hE,iBACL1hE,KAAK8sE,MACZ9sE,KAAK++H,gBAAiB,CAC1B,CACA,UAAIv5C,GACA,OAAOxlF,KAAK8+H,OAChB,CACA,YAAIn9D,GACA,OAAO3hE,KAAK0hE,YAAc1hE,KAAK0hE,UDntItC,SAA0B58D,EAAMy7F,GAC7B,MAAM/a,EAAS1gF,EAAK0gF,OACd2V,EAAWr2F,EAAKod,QAAQi5E,SACxB30E,EAAQg/D,EAAO3qF,OACrB,IAAK2rB,EACD,MAAO,GAEX,MAAM2mE,IAASroF,EAAK0+F,OACd,MAAEhmF,EAAM,IAAEC,GAnEnB,SAAyB+nE,EAAQh/D,EAAO2mE,EAAMgO,GAC3C,IAAI39E,EAAQ,EACRC,EAAM+I,EAAQ,EAClB,GAAI2mE,IAASgO,EACT,KAAM39E,EAAQgJ,IAAUg/D,EAAOhoE,GAAO07E,MAClC17E,IAGR,KAAMA,EAAQgJ,GAASg/D,EAAOhoE,GAAO07E,MACjC17E,IAMJ,IAJAA,GAASgJ,EACL2mE,IACA1vE,GAAOD,GAELC,EAAMD,GAASgoE,EAAO/nE,EAAM+I,GAAO0yE,MACrCz7E,IAGJ,OADAA,GAAO+I,EACA,CACHhJ,QACAC,MAER,CA4C6BuhH,CAAgBx5C,EAAQh/D,EAAO2mE,EAAMgO,GAC9D,OACWmF,GAAcx7F,GADR,IAAbq2F,EAC2B,CACvB,CACI39E,QACAC,MACA0vE,SAjDf,SAAuB3H,EAAQhoE,EAAOrhB,EAAKgxF,GACxC,MAAM3mE,EAAQg/D,EAAO3qF,OACfiB,EAAS,GACf,IAEI2hB,EAFA4U,EAAO7U,EACPX,EAAO2oE,EAAOhoE,GAElB,IAAIC,EAAMD,EAAQ,EAAGC,GAAOthB,IAAOshB,EAAI,CACnC,MAAM0kB,EAAMqjD,EAAO/nE,EAAM+I,GACrB2b,EAAI+2D,MAAQ/2D,EAAIrK,KACXjb,EAAKq8E,OACN/L,GAAO,EACPrxF,EAAOE,KAAK,CACRwhB,MAAOA,EAAQgJ,EACf/I,KAAMA,EAAM,GAAK+I,EACjB2mE,SAEJ3vE,EAAQ6U,EAAO8P,EAAIrK,KAAOra,EAAM,OAGpC4U,EAAO5U,EACHZ,EAAKq8E,OACL17E,EAAQC,IAGhBZ,EAAOslB,CACX,CAQA,OAPa,OAAT9P,GACAv2B,EAAOE,KAAK,CACRwhB,MAAOA,EAAQgJ,EACf/I,IAAK4U,EAAO7L,EACZ2mE,SAGDrxF,CACX,CAqB+BmjI,CAAcz5C,EAAQhoE,EAFrCC,EAAMD,EAAQC,EAAM+I,EAAQ/I,IACjB3Y,EAAKq0G,WAAuB,IAAV37F,GAAeC,IAAQ+I,EAAQ,GAHjEg/D,EAAQ+a,EAKnB,CC8rImD2+B,CAAiBl/H,KAAMA,KAAKkiB,QAAQ4mD,SACnF,CACH,KAAAl7C,GACO,MAAM+zC,EAAW3hE,KAAK2hE,SAChB6jB,EAASxlF,KAAKwlF,OACpB,OAAO7jB,EAAS9mE,QAAU2qF,EAAO7jB,EAAS,GAAGnkD,MACjD,CACH,IAAA6U,GACO,MAAMsvC,EAAW3hE,KAAK2hE,SAChB6jB,EAASxlF,KAAKwlF,OACdh/D,EAAQm7C,EAAS9mE,OACvB,OAAO2rB,GAASg/D,EAAO7jB,EAASn7C,EAAQ,GAAG/I,IAC/C,CACH,WAAAghE,CAAYwT,EAAOh3D,GACZ,MAAM/Y,EAAUliB,KAAKkiB,QACf7lB,EAAQ41F,EAAMh3D,GACduqD,EAASxlF,KAAKwlF,OACd7jB,EAAW0+B,GAAergG,KAAM,CAClCi7B,WACAzd,MAAOnhB,EACPohB,IAAKphB,IAET,IAAKslE,EAAS9mE,OACV,OAEJ,MAAMiB,EAAS,GACTqjI,EA/Hb,SAAiCj9G,GAC9B,OAAIA,EAAQ27G,QACDt/B,GAEPr8E,EAAQm5E,SAA8C,aAAnCn5E,EAAQk5E,uBACpBoD,GAEJF,EACX,CAuH6B8gC,CAAwBl9G,GAC7C,IAAIvnB,EAAGwlF,EACP,IAAIxlF,EAAI,EAAGwlF,EAAOxe,EAAS9mE,OAAQF,EAAIwlF,IAAQxlF,EAAE,CAC7C,MAAM,MAAE6iB,EAAM,IAAEC,GAASkkD,EAAShnE,GAC5B+3E,EAAK8S,EAAOhoE,GACZm1D,EAAK6S,EAAO/nE,GAClB,GAAIi1D,IAAOC,EAAI,CACX72E,EAAOE,KAAK02E,GACZ,QACJ,CACA,MACM2sD,EAAeF,EAAazsD,EAAIC,EAD5BrhE,KAAK4pC,KAAK7+C,EAAQq2E,EAAGz3C,KAAc03C,EAAG13C,GAAYy3C,EAAGz3C,KAClB/Y,EAAQ27G,SACrDwB,EAAapkG,GAAYg3D,EAAMh3D,GAC/Bn/B,EAAOE,KAAKqjI,EAChB,CACA,OAAyB,IAAlBvjI,EAAOjB,OAAeiB,EAAO,GAAKA,CAC7C,CACH,WAAA6hI,CAAY/3G,EAAKkjD,EAASl1C,GAEnB,OADsB2qG,GAAkBv+H,KACjC2+H,CAAc/4G,EAAK5lB,KAAM8oE,EAASl1C,EAC7C,CACH,IAAAjsB,CAAKie,EAAKpI,EAAOgJ,GACV,MAAMm7C,EAAW3hE,KAAK2hE,SAChBg9D,EAAgBJ,GAAkBv+H,MACxC,IAAImtF,EAAOntF,KAAKwjG,MAChBhmF,EAAQA,GAAS,EACjBgJ,EAAQA,GAASxmB,KAAKwlF,OAAO3qF,OAAS2iB,EACtC,IAAK,MAAMsrD,KAAWnH,EAClBwrB,GAAQwxC,EAAc/4G,EAAK5lB,KAAM8oE,EAAS,CACtCtrD,QACAC,IAAKD,EAAQgJ,EAAQ,IAG7B,QAAS2mE,CACb,CACH,IAAAmV,CAAK18E,EAAK4mF,EAAWhvF,EAAOgJ,GACrB,MAAMtE,EAAUliB,KAAKkiB,SAAW,CAAC,GAClBliB,KAAKwlF,QAAU,IACnB3qF,QAAUqnB,EAAQ4vE,cACzBlsE,EAAIgF,OACJ03E,GAAK18E,EAAK5lB,KAAMwd,EAAOgJ,GACvBZ,EAAImqE,WAEJ/vF,KAAK2oD,WACL3oD,KAAK++H,gBAAiB,EACtB/+H,KAAK8sE,WAAQ1vE,EAErB,EAGJ,SAASkiI,GAAUtgH,EAAI+jB,EAAKy1B,EAAM4hD,GAC9B,MAAMl4F,EAAUlD,EAAGkD,SACX,CAACs2C,GAAOn8D,GAAW2iB,EAAGi8F,SAAS,CACnCziD,GACD4hD,GACH,OAAO9oG,KAAK4pC,IAAInY,EAAM1mC,GAAS6lB,EAAQgvE,OAAShvE,EAAQq9G,SAC5D,CAiFA,SAASC,GAAaxhF,EAAKo8D,GACvB,MAAM,EAAEl/G,EAAE,EAAEqrD,EAAE,KAAEn1C,EAAK,MAAEiyC,EAAM,OAAED,GAAapF,EAAIi9D,SAAS,CACrD,IACA,IACA,OACA,QACA,UACDb,GACH,IAAIn3D,EAAME,EAAOH,EAAKE,EAAQu8E,EAc9B,OAbIzhF,EAAIwyD,YACJivB,EAAOr8E,EAAS,EAChBH,EAAO3xC,KAAKpV,IAAIhB,EAAGkW,GACnB+xC,EAAQ7xC,KAAKnV,IAAIjB,EAAGkW,GACpB4xC,EAAMuD,EAAIk5E,EACVv8E,EAASqD,EAAIk5E,IAEbA,EAAOp8E,EAAQ,EACfJ,EAAO/nD,EAAIukI,EACXt8E,EAAQjoD,EAAIukI,EACZz8E,EAAM1xC,KAAKpV,IAAIqqD,EAAGn1C,GAClB8xC,EAAS5xC,KAAKnV,IAAIoqD,EAAGn1C,IAElB,CACH6xC,OACAD,MACAG,QACAD,SAER,CACA,SAASw8E,GAAYxmC,EAAM78F,EAAOH,EAAKC,GACnC,OAAO+8F,EAAO,EAAIjV,GAAY5nF,EAAOH,EAAKC,EAC9C,CA4BA,SAASwjI,GAAc3hF,GACnB,MAAM0vC,EAAS8xC,GAAaxhF,GACtBqF,EAAQqqC,EAAOvqC,MAAQuqC,EAAOzqC,KAC9BG,EAASsqC,EAAOxqC,OAASwqC,EAAO1qC,IAChCqrC,EA/BV,SAA0BrwC,EAAK4hF,EAAMC,GACjC,MAAMxjI,EAAQ2hD,EAAI97B,QAAQ4vE,YACpBoH,EAAOl7C,EAAIuyD,cACXppG,EAAIiuF,GAAO/4F,GACjB,MAAO,CACHirE,EAAGo4D,GAAYxmC,EAAKl2C,IAAK77C,EAAE67C,IAAK,EAAG68E,GACnC59F,EAAGy9F,GAAYxmC,EAAK/1C,MAAOh8C,EAAEg8C,MAAO,EAAGy8E,GACvC/rH,EAAG6rH,GAAYxmC,EAAKh2C,OAAQ/7C,EAAE+7C,OAAQ,EAAG28E,GACzC/3G,EAAG43G,GAAYxmC,EAAKj2C,KAAM97C,EAAE87C,KAAM,EAAG28E,GAE7C,CAqBmBE,CAAiB9hF,EAAKqF,EAAQ,EAAGD,EAAS,GACnD8tC,EArBV,SAA2BlzC,EAAK4hF,EAAMC,GAClC,MAAM,mBAAEnvB,GAAwB1yD,EAAIi9D,SAAS,CACzC,uBAEE5+G,EAAQ2hD,EAAI97B,QAAQ04G,aACpBzzH,EAAIkuF,GAAch5F,GAClB0jI,EAAOzuH,KAAKpV,IAAI0jI,EAAMC,GACtB3mC,EAAOl7C,EAAIuyD,cACXyvB,EAAetvB,GAAsB7/E,EAASx0B,GACpD,MAAO,CACHo4F,QAASirC,IAAaM,GAAgB9mC,EAAKl2C,KAAOk2C,EAAKj2C,KAAM97C,EAAEstF,QAAS,EAAGsrC,GAC3EnrC,SAAU8qC,IAAaM,GAAgB9mC,EAAKl2C,KAAOk2C,EAAK/1C,MAAOh8C,EAAEytF,SAAU,EAAGmrC,GAC9ErrC,WAAYgrC,IAAaM,GAAgB9mC,EAAKh2C,QAAUg2C,EAAKj2C,KAAM97C,EAAEutF,WAAY,EAAGqrC,GACpFprC,YAAa+qC,IAAaM,GAAgB9mC,EAAKh2C,QAAUg2C,EAAK/1C,MAAOh8C,EAAEwtF,YAAa,EAAGorC,GAE/F,CAMmBE,CAAkBjiF,EAAKqF,EAAQ,EAAGD,EAAS,GAC1D,MAAO,CACH88E,MAAO,CACHhlI,EAAGwyF,EAAOzqC,KACVsD,EAAGmnC,EAAO1qC,IACVotB,EAAG/sB,EACHnjB,EAAGkjB,EACH8tC,UAEJ6rC,MAAO,CACH7hI,EAAGwyF,EAAOzqC,KAAOorC,EAAOvmE,EACxBy+B,EAAGmnC,EAAO1qC,IAAMqrC,EAAO/mB,EACvB8I,EAAG/sB,EAAQgrC,EAAOvmE,EAAIumE,EAAOpsD,EAC7B/B,EAAGkjB,EAASirC,EAAO/mB,EAAI+mB,EAAOx6E,EAC9Bq9E,OAAQ,CACJuD,QAASnjF,KAAKnV,IAAI,EAAG+0F,EAAOuD,QAAUnjF,KAAKnV,IAAIkyF,EAAO/mB,EAAG+mB,EAAOvmE,IAChE8sE,SAAUtjF,KAAKnV,IAAI,EAAG+0F,EAAO0D,SAAWtjF,KAAKnV,IAAIkyF,EAAO/mB,EAAG+mB,EAAOpsD,IAClEyyD,WAAYpjF,KAAKnV,IAAI,EAAG+0F,EAAOwD,WAAapjF,KAAKnV,IAAIkyF,EAAOx6E,EAAGw6E,EAAOvmE,IACtE6sE,YAAarjF,KAAKnV,IAAI,EAAG+0F,EAAOyD,YAAcrjF,KAAKnV,IAAIkyF,EAAOx6E,EAAGw6E,EAAOpsD,MAIxF,CACA,SAASq4E,GAAQt8D,EAAK9iD,EAAGqrD,EAAG6zD,GACxB,MAAM+lB,EAAc,OAANjlI,EACRklI,EAAc,OAAN75E,EAERmnC,EAAS1vC,KADEmiF,GAASC,IACSZ,GAAaxhF,EAAKo8D,GACrD,OAAO1sB,IAAWyyC,GAASj8C,GAAWhpF,EAAGwyF,EAAOzqC,KAAMyqC,EAAOvqC,UAAYi9E,GAASl8C,GAAW39B,EAAGmnC,EAAO1qC,IAAK0qC,EAAOxqC,QACvH,CAIC,SAASm9E,GAAkBz6G,EAAKi+B,GAC7Bj+B,EAAIi+B,KAAKA,EAAK3oD,EAAG2oD,EAAK0C,EAAG1C,EAAKusB,EAAGvsB,EAAK3jB,EAC1C,CACA,SAASogG,GAAYz8E,EAAM5mB,EAAQsjG,EAAU,CAAC,GAC1C,MAAMrlI,EAAI2oD,EAAK3oD,IAAMqlI,EAAQrlI,GAAK+hC,EAAS,EACrCspB,EAAI1C,EAAK0C,IAAMg6E,EAAQh6E,GAAKtpB,EAAS,EACrCmzC,GAAKvsB,EAAK3oD,EAAI2oD,EAAKusB,IAAMmwD,EAAQrlI,EAAIqlI,EAAQnwD,EAAInzC,EAAS,GAAK/hC,EAC/DglC,GAAK2jB,EAAK0C,EAAI1C,EAAK3jB,IAAMqgG,EAAQh6E,EAAIg6E,EAAQrgG,EAAIjD,EAAS,GAAKspB,EACrE,MAAO,CACHrrD,EAAG2oD,EAAK3oD,EAAIA,EACZqrD,EAAG1C,EAAK0C,EAAIA,EACZ6pB,EAAGvsB,EAAKusB,EAAIA,EACZlwC,EAAG2jB,EAAK3jB,EAAIA,EACZgxD,OAAQrtC,EAAKqtC,OAErB,CAuEA,IAAI,GAAwB71F,OAAO+xG,OAAO,CAC1CmI,UAAW,KACXirB,WA1pBA,cAAyBhe,GACrBjb,UAAY,MACZA,gBAAkB,CACd2M,YAAa,SACblxE,YAAa,OACbu+D,WAAY,GACZC,iBAAkB,EAClBC,qBAAiBrkG,EACjBw9H,aAAc,EACd9oC,YAAa,EACb/kD,OAAQ,EACRqkE,QAAS,EACThuB,WAAOhmF,EACPo3G,UAAU,GAEdjN,qBAAuB,CACnBnnE,gBAAiB,mBAErBmnE,mBAAqB,CACjBxa,aAAa,EACbE,WAAa1tF,GAAgB,eAATA,GAExB4xG,cACAyB,SACAkqB,YACAlrB,YACAC,YACA2pB,YACA7oB,WACA,WAAAvnF,CAAYi4E,GACRsO,QACA3xG,KAAKkiB,aAAU9kB,EACf4C,KAAKmxG,mBAAgB/zG,EACrB4C,KAAK2yG,gBAAav1G,EAClB4C,KAAK4yG,cAAWx1G,EAChB4C,KAAK4xG,iBAAcx0G,EACnB4C,KAAK6xG,iBAAcz0G,EACnB4C,KAAKw7H,YAAc,EACnBx7H,KAAK88H,YAAc,EACfz5B,GACAhoG,OAAOyE,OAAOE,KAAMqjG,EAE5B,CACA,OAAAiX,CAAQmmB,EAAQC,EAAQtmB,GACpB,MAAMnoB,EAAQjyF,KAAKi7G,SAAS,CACxB,IACA,KACDb,IACG,MAAEh3B,EAAM,SAAEhiD,GAAc0hD,GAAkBmP,EAAO,CACnD/2F,EAAGulI,EACHl6E,EAAGm6E,KAED,WAAE/tB,EAAW,SAAEC,EAAS,YAAEhB,EAAY,YAAEC,EAAY,cAAEV,GAAmBnxG,KAAKi7G,SAAS,CACzF,aACA,WACA,cACA,cACA,iBACDb,GACGumB,GAAW3gI,KAAKkiB,QAAQkvF,QAAUpxG,KAAKkiB,QAAQ4vE,aAAe,EAE9D8uC,EADiBlhD,EAAeyxB,EAAeyB,EAAWD,IACxBpxB,IAAOoC,GAAcP,EAAOuvB,EAAYC,GAC1EiuB,EAAe38C,GAAW9iD,EAAUwwE,EAAc+uB,EAAS9uB,EAAc8uB,GAC/E,OAAOC,GAAiBC,CAC5B,CACA,cAAA9lB,CAAeX,GACX,MAAM,EAAEl/G,EAAE,EAAEqrD,EAAE,WAAEosD,EAAW,SAAEC,EAAS,YAAEhB,EAAY,YAAEC,GAAiB7xG,KAAKi7G,SAAS,CACjF,IACA,IACA,aACA,WACA,cACA,eACDb,IACG,OAAErtE,EAAO,QAAEqkE,GAAapxG,KAAKkiB,QAC7B4+G,GAAanuB,EAAaC,GAAY,EACtCmuB,GAAcnvB,EAAcC,EAAcT,EAAUrkE,GAAU,EACpE,MAAO,CACH7xC,EAAGA,EAAIoW,KAAKw2E,IAAIg5C,GAAaC,EAC7Bx6E,EAAGA,EAAIj1C,KAAKu1E,IAAIi6C,GAAaC,EAErC,CACA,eAAAte,CAAgBrI,GACZ,OAAOp6G,KAAK+6G,eAAeX,EAC/B,CACA,IAAA9X,CAAK18E,GACD,MAAM,QAAE1D,EAAQ,cAAEivF,GAAmBnxG,KAC/B+sC,GAAU7qB,EAAQ6qB,QAAU,GAAK,EACjCqkE,GAAWlvF,EAAQkvF,SAAW,GAAK,EACnCoD,EAAWtyF,EAAQsyF,SAGzB,GAFAx0G,KAAKw7H,YAAsC,UAAxBt5G,EAAQgyF,YAA0B,IAAO,EAC5Dl0G,KAAK88H,YAAc3rB,EAAgB5vB,GAAMjwE,KAAKwtB,MAAMqyE,EAAgB5vB,IAAO,EACrD,IAAlB4vB,GAAuBnxG,KAAK4xG,YAAc,GAAK5xG,KAAK6xG,YAAc,EAClE,OAEJjsF,EAAIgF,OACJ,MAAMk2G,GAAa9gI,KAAK2yG,WAAa3yG,KAAK4yG,UAAY,EACtDhtF,EAAIwrE,UAAU9/E,KAAKw2E,IAAIg5C,GAAa/zF,EAAQz7B,KAAKu1E,IAAIi6C,GAAa/zF,GAClE,MACMi0F,EAAej0F,GADT,EAAIz7B,KAAKu1E,IAAIv1E,KAAKpV,IAAIolF,GAAI6vB,GAAiB,KAEvDvrF,EAAI6tE,UAAYvxE,EAAQke,gBACxBxa,EAAI4tE,YAActxE,EAAQ8gB,YAvJlC,SAAiBpd,EAAKgK,EAASmd,EAAQqkE,EAASoD,GAC5C,MAAM,YAAEsoB,EAAY,WAAEnqB,EAAW,cAAExB,GAAmBvhF,EACtD,IAAIgjF,EAAWhjF,EAAQgjF,SACvB,GAAIkqB,EAAa,CACbvB,GAAQ31G,EAAKgK,EAASmd,EAAQqkE,EAASwB,EAAU4B,GACjD,IAAI,IAAI75G,EAAI,EAAGA,EAAImiI,IAAeniI,EAC9BirB,EAAIisE,OAEHnwF,MAAMyvG,KACPyB,EAAWD,GAAcxB,EAAgB5vB,IAAOA,IAExD,CACAg6C,GAAQ31G,EAAKgK,EAASmd,EAAQqkE,EAASwB,EAAU4B,GACjD5uF,EAAIisE,MAER,CAyIQovC,CAAQr7G,EAAK5lB,KAAMghI,EAAc5vB,EAASoD,GAC1C8Y,GAAW1nG,EAAK5lB,KAAMghI,EAAc5vB,EAASoD,GAC7C5uF,EAAImqE,SACR,GAkjBJmxC,WAzEA,cAAyB1e,GACrBjb,UAAY,MACfA,gBAAkB,CACXgJ,cAAe,QACfze,YAAa,EACb8oC,aAAc,EACd9pB,cAAe,OACf9f,gBAAY5zF,GAEnBmqG,qBAAuB,CAChBnnE,gBAAiB,kBACjB4C,YAAa,eAEjB,WAAA5X,CAAYi4E,GACRsO,QACA3xG,KAAKkiB,aAAU9kB,EACf4C,KAAKwwG,gBAAapzG,EAClB4C,KAAKoR,UAAOhU,EACZ4C,KAAKqjD,WAAQjmD,EACb4C,KAAKojD,YAAShmD,EACd4C,KAAK8wG,mBAAgB1zG,EACjBimG,GACAhoG,OAAOyE,OAAOE,KAAMqjG,EAE5B,CACA,IAAAf,CAAK18E,GACD,MAAM,cAAEkrF,EAAgB5uF,SAAS,YAAE8gB,EAAY,gBAAE5C,IAAwBpgC,MACnE,MAAE+8H,EAAM,MAAEmD,GAAWP,GAAc3/H,MACnCmhI,GA/CKjwC,EA+CmBgvC,EAAMhvC,QA9C1BuD,SAAWvD,EAAO0D,UAAY1D,EAAOwD,YAAcxD,EAAOyD,YA8CtBH,GAAqB6rC,GA/C3E,IAAmBnvC,EAgDXtrE,EAAIgF,OACAs1G,EAAM9vD,IAAM2sD,EAAM3sD,GAAK8vD,EAAMhgG,IAAM68F,EAAM78F,IACzCta,EAAI0rE,YACJ6vC,EAAYv7G,EAAK06G,GAAYJ,EAAOpvB,EAAeisB,IACnDn3G,EAAI+nE,OACJwzC,EAAYv7G,EAAK06G,GAAYvD,GAAQjsB,EAAeovB,IACpDt6G,EAAI6tE,UAAYzwD,EAChBpd,EAAIisE,KAAK,YAEbjsE,EAAI0rE,YACJ6vC,EAAYv7G,EAAK06G,GAAYvD,EAAOjsB,IACpClrF,EAAI6tE,UAAYrzD,EAChBxa,EAAIisE,OACJjsE,EAAImqE,SACR,CACA,OAAAuqB,CAAQ8mB,EAAQC,EAAQjnB,GACpB,OAAOE,GAAQt6G,KAAMohI,EAAQC,EAAQjnB,EACzC,CACA,QAAAknB,CAASF,EAAQhnB,GACb,OAAOE,GAAQt6G,KAAMohI,EAAQ,KAAMhnB,EACvC,CACA,QAAAmnB,CAASF,EAAQjnB,GACb,OAAOE,GAAQt6G,KAAM,KAAMqhI,EAAQjnB,EACvC,CACA,cAAAW,CAAeX,GACX,MAAM,EAAEl/G,EAAE,EAAEqrD,EAAE,KAAEn1C,EAAK,WAAEo/F,GAAiBxwG,KAAKi7G,SAAS,CAClD,IACA,IACA,OACA,cACDb,GACH,MAAO,CACHl/G,EAAGs1G,GAAct1G,EAAIkW,GAAQ,EAAIlW,EACjCqrD,EAAGiqD,EAAajqD,GAAKA,EAAIn1C,GAAQ,EAEzC,CACA,QAAA4oG,CAASxhD,GACL,MAAgB,MAATA,EAAex4D,KAAKqjD,MAAQ,EAAIrjD,KAAKojD,OAAS,CACzD,GAOJy7E,YAAaA,GACb2C,aA5QA,cAA2Bhf,GACvBjb,UAAY,QACZ3nE,OACAs5D,KACAphE,KAGEyvE,gBAAkB,CAChBzV,YAAa,EACbytC,UAAW,EACXprB,iBAAkB,EAClBstB,YAAa,EACbzwC,WAAY,SACZE,OAAQ,EACRD,SAAU,GAIZsW,qBAAuB,CACrBnnE,gBAAiB,kBACjB4C,YAAa,eAEjB,WAAA5X,CAAYi4E,GACRsO,QACA3xG,KAAKkiB,aAAU9kB,EACf4C,KAAK4/B,YAASxiC,EACd4C,KAAKk5F,UAAO97F,EACZ4C,KAAK83B,UAAO16B,EACRimG,GACAhoG,OAAOyE,OAAOE,KAAMqjG,EAE5B,CACA,OAAAiX,CAAQ8mB,EAAQC,EAAQjnB,GACpB,MAAMl4F,EAAUliB,KAAKkiB,SACf,EAAEhnB,EAAE,EAAEqrD,GAAOvmD,KAAKi7G,SAAS,CAC7B,IACA,KACDb,GACH,OAAO9oG,KAAKC,IAAI6vH,EAASlmI,EAAG,GAAKoW,KAAKC,IAAI8vH,EAAS96E,EAAG,GAAKj1C,KAAKC,IAAI2Q,EAAQq9G,UAAYr9G,EAAQgvE,OAAQ,EAC5G,CACA,QAAAowC,CAASF,EAAQhnB,GACb,OAAOklB,GAAUt/H,KAAMohI,EAAQ,IAAKhnB,EACxC,CACA,QAAAmnB,CAASF,EAAQjnB,GACb,OAAOklB,GAAUt/H,KAAMqhI,EAAQ,IAAKjnB,EACxC,CACA,cAAAW,CAAeX,GACX,MAAM,EAAEl/G,EAAE,EAAEqrD,GAAOvmD,KAAKi7G,SAAS,CAC7B,IACA,KACDb,GACH,MAAO,CACHl/G,IACAqrD,IAER,CACA,IAAAh2C,CAAK2R,GAED,IAAIgvE,GADJhvE,EAAUA,GAAWliB,KAAKkiB,SAAW,CAAC,GACjBgvE,QAAU,EAC/BA,EAAS5/E,KAAKnV,IAAI+0F,EAAQA,GAAUhvE,EAAQu/G,aAAe,GAE3D,OAAgC,GAAxBvwC,GADYA,GAAUhvE,EAAQ4vE,aAAe,GAEzD,CACA,IAAAwQ,CAAK18E,EAAKssE,GACN,MAAMhwE,EAAUliB,KAAKkiB,QACjBliB,KAAKk5F,MAAQh3E,EAAQgvE,OAAS,KAAQc,GAAehyF,KAAMkyF,EAAMlyF,KAAKuQ,KAAK2R,GAAW,KAG1F0D,EAAI4tE,YAActxE,EAAQ8gB,YAC1Bpd,EAAIkoE,UAAY5rE,EAAQ4vE,YACxBlsE,EAAI6tE,UAAYvxE,EAAQke,gBACxBqwD,GAAU7qE,EAAK1D,EAASliB,KAAK9E,EAAG8E,KAAKumD,GACzC,CACA,QAAAyzD,GACI,MAAM93F,EAAUliB,KAAKkiB,SAAW,CAAC,EAEjC,OAAOA,EAAQgvE,OAAShvE,EAAQq9G,SACpC,KAkMJ,MAAMmC,GAAgB,CAClB,oBACA,oBACA,oBACA,oBACA,oBACA,qBACA,sBAGEC,GAAoCD,GAAc38H,KAAKi5B,GAAQA,EAAMr5B,QAAQ,OAAQ,SAASA,QAAQ,IAAK,YACjH,SAASi9H,GAAejnI,GACpB,OAAO+mI,GAAc/mI,EAAI+mI,GAAc7mI,OAC3C,CACA,SAASgnI,GAAmBlnI,GACxB,OAAOgnI,GAAkBhnI,EAAIgnI,GAAkB9mI,OACnD,CAcA,SAASinI,GAAah4C,GAClB,IAAInvF,EAAI,EACR,MAAO,CAAC+tG,EAASroB,KACb,MAAMgmB,EAAavc,EAAM2f,eAAeppB,GAAcgmB,WAClDA,aAAsB0K,GACtBp2G,EAbZ,SAAiC+tG,EAAS/tG,GAEtC,OADA+tG,EAAQtoE,gBAAkBsoE,EAAQpiG,KAAKvB,KAAI,IAAI68H,GAAejnI,OACvDA,CACX,CAUgBonI,CAAwBr5B,EAAS/tG,GAC9B0rG,aAAsBiO,GAC7B35G,EAXZ,SAAkC+tG,EAAS/tG,GAEvC,OADA+tG,EAAQtoE,gBAAkBsoE,EAAQpiG,KAAKvB,KAAI,IAAI88H,GAAmBlnI,OAC3DA,CACX,CAQgBqnI,CAAyBt5B,EAAS/tG,GAC/B0rG,IACP1rG,EAtBZ,SAAgC+tG,EAAS/tG,GAGrC,OAFA+tG,EAAQ1lE,YAAc4+F,GAAejnI,GACrC+tG,EAAQtoE,gBAAkByhG,GAAmBlnI,KACpCA,CACb,CAkBgBsnI,CAAuBv5B,EAAS/tG,GACxC,CAER,CACA,SAASunI,GAA0Bv3C,GAC/B,IAAIhtF,EACJ,IAAIA,KAAKgtF,EACL,GAAIA,EAAYhtF,GAAGqlC,aAAe2nD,EAAYhtF,GAAGyiC,gBAC7C,OAAO,EAGf,OAAO,CACX,CAIA,IAAI+hG,GAAgB,CAChBn1H,GAAI,SACJ2b,SAAU,CACN26F,SAAS,EACT8e,eAAe,GAEnB,YAAAzjB,CAAc70B,EAAOu4C,EAAOngH,GACxB,IAAKA,EAAQohG,QACT,OAEJ,MAAQh9G,MAAM,SAAE2kF,GAAc/oE,QAASogH,GAAkBx4C,EAAMv1E,QACzD,SAAEq8B,GAAc0xF,EACtB,IAAKpgH,EAAQkgH,gBAAkBF,GAA0Bj3C,KAf/Bp4C,EAeqEyvF,KAd7EzvF,EAAW7P,aAAe6P,EAAWzS,kBAcyDwQ,GAAYsxF,GAA0BtxF,IAClJ,OAhBZ,IAAkCiC,EAkB1B,MAAM0vF,EAAYT,GAAah4C,GAC/BmB,EAASh6D,QAAQsxG,EACrB,GAmGJ,SAASC,GAAsB95B,GAC3B,GAAIA,EAAQ+P,WAAY,CACpB,MAAMnyG,EAAOoiG,EAAQhB,aACdgB,EAAQ+P,kBACR/P,EAAQhB,MACfrsG,OAAOsqC,eAAe+iE,EAAS,OAAQ,CACnC9iE,cAAc,EACdC,YAAY,EACZiN,UAAU,EACVz2C,MAAOiK,GAEf,CACJ,CACA,SAASm8H,GAAmB34C,GACxBA,EAAMxjF,KAAK2kF,SAASh6D,SAASy3E,IACzB85B,GAAsB95B,EAAQ,GAEtC,CAoBA,IAAIg6B,GAAoB,CACpB11H,GAAI,aACJ2b,SAAU,CACNg6G,UAAW,UACXrf,SAAS,GAEbsf,qBAAsB,CAAC94C,EAAOrnF,EAAMyf,KAChC,IAAKA,EAAQohG,QAET,YADAmf,GAAmB34C,GAGvB,MAAMwyB,EAAiBxyB,EAAMzmC,MAC7BymC,EAAMxjF,KAAK2kF,SAASh6D,SAAQ,CAACy3E,EAASroB,KAClC,MAAM,MAAEqnB,EAAM,UAAEhc,GAAegd,EACzBnjB,EAAOuE,EAAM2f,eAAeppB,GAC5B/5E,EAAOohG,GAASgB,EAAQpiG,KAC9B,GAGO,MAHH8b,GAAQ,CACRspE,EACA5B,EAAM5nE,QAAQwpE,YAEd,OAEJ,IAAKnG,EAAK8gB,WAAW2B,mBACjB,OAEJ,MAAM66B,EAAQ/4C,EAAMuC,OAAO9G,EAAKujB,SAChC,GAAmB,WAAf+5B,EAAM/hI,MAAoC,SAAf+hI,EAAM/hI,KACjC,OAEJ,GAAIgpF,EAAM5nE,QAAQgqE,QACd,OAEJ,IAAI,MAAE1uE,EAAM,MAAEgJ,GAnD1B,SAAmD++D,EAAMC,GACrD,MAAME,EAAaF,EAAO3qF,OAC1B,IACI2rB,EADAhJ,EAAQ,EAEZ,MAAM,OAAEooE,GAAYL,GACd,IAAErpF,EAAI,IAAEC,EAAI,WAAE2pF,EAAW,WAAEC,GAAgBH,EAAOI,gBASxD,OARIF,IACAtoE,EAAQymE,GAAYK,GAAakB,EAAQI,EAAOptB,KAAMt8D,GAAKq+C,GAAI,EAAGmrC,EAAa,IAG/El/D,EADAu/D,EACQ9B,GAAYK,GAAakB,EAAQI,EAAOptB,KAAMr8D,GAAKq+C,GAAK,EAAGh9B,EAAOkoE,GAAcloE,EAEhFkoE,EAAaloE,EAElB,CACHA,QACAgJ,QAER,CAiCqCs8G,CAA0Cv9C,EAAMj/E,GAEzE,GAAIkgB,IADctE,EAAQ4tC,WAAa,EAAIwsD,GAGvC,YADAkmB,GAAsB95B,GAiB1B,IAAIq6B,EACJ,OAfIxjD,EAAcmoB,KACdgB,EAAQhB,MAAQphG,SACToiG,EAAQpiG,KACfjL,OAAOsqC,eAAe+iE,EAAS,OAAQ,CACnC9iE,cAAc,EACdC,YAAY,EACZ17B,IAAK,WACD,OAAOnK,KAAKy4G,UAChB,EACA7vF,IAAK,SAASjU,GACV3U,KAAK0nG,MAAQ/yF,CACjB,KAIDuN,EAAQygH,WACX,IAAK,OACDI,EA5LpB,SAAwBz8H,EAAMkX,EAAOgJ,EAAO81F,EAAgBp6F,GAC3D,MAAM8gH,EAAU9gH,EAAQ8gH,SAAW1mB,EAChC,GAAI0mB,GAAWx8G,EACX,OAAOlgB,EAAKpB,MAAMsY,EAAOA,EAAQgJ,GAErC,MAAMu8G,EAAY,GACZE,GAAez8G,EAAQ,IAAMw8G,EAAU,GAC7C,IAAIE,EAAe,EACnB,MAAMC,EAAW3lH,EAAQgJ,EAAQ,EACjC,IACI7rB,EAAGyoI,EAAcC,EAASnxC,EAAMoxC,EADhCjjH,EAAI7C,EAGR,IADAulH,EAAUG,KAAkB58H,EAAK+Z,GAC7B1lB,EAAI,EAAGA,EAAIqoI,EAAU,EAAGroI,IAAI,CAC5B,IAEI0I,EAFA66H,EAAO,EACPqF,EAAO,EAEX,MAAMC,EAAgBlyH,KAAKwtB,OAAOnkC,EAAI,GAAKsoI,GAAe,EAAIzlH,EACxDimH,EAAcnyH,KAAKpV,IAAIoV,KAAKwtB,OAAOnkC,EAAI,GAAKsoI,GAAe,EAAGz8G,GAAShJ,EACvEkmH,EAAiBD,EAAcD,EACrC,IAAIngI,EAAImgI,EAAengI,EAAIogI,EAAapgI,IACpC66H,GAAQ53H,EAAKjD,GAAGnI,EAChBqoI,GAAQj9H,EAAKjD,GAAGkjD,EAEpB23E,GAAQwF,EACRH,GAAQG,EACR,MAAMC,EAAYryH,KAAKwtB,MAAMnkC,EAAIsoI,GAAe,EAAIzlH,EAC9ComH,EAAUtyH,KAAKpV,IAAIoV,KAAKwtB,OAAOnkC,EAAI,GAAKsoI,GAAe,EAAGz8G,GAAShJ,GACjEtiB,EAAG2oI,EAAUt9E,EAAGu9E,GAAax9H,EAAK+Z,GAE1C,IADAgjH,EAAUnxC,GAAQ,EACd7uF,EAAIsgI,EAAWtgI,EAAIugI,EAASvgI,IAC5B6uF,EAAO,GAAM5gF,KAAK4pC,KAAK2oF,EAAU3F,IAAS53H,EAAKjD,GAAGkjD,EAAIu9E,IAAYD,EAAUv9H,EAAKjD,GAAGnI,IAAMqoI,EAAOO,IAC7F5xC,EAAOmxC,IACPA,EAAUnxC,EACVkxC,EAAe98H,EAAKjD,GACpBigI,EAAQjgI,GAGhB0/H,EAAUG,KAAkBE,EAC5B/iH,EAAIijH,CACR,CAEA,OADAP,EAAUG,KAAkB58H,EAAK68H,GAC1BJ,CACX,CAkJgCgB,CAAez9H,EAAMkX,EAAOgJ,EAAO81F,EAAgBp6F,GAC/D,MACJ,IAAK,UACD6gH,EApJpB,SAA0Bz8H,EAAMkX,EAAOgJ,EAAO81F,GAC1C,IAEI3hH,EAAGs3F,EAAO/2F,EAAGqrD,EAAGy3E,EAAOgG,EAAUC,EAAUtoE,EAAY23C,EAAMF,EAF7D8qB,EAAO,EACPC,EAAS,EAEb,MAAM4E,EAAY,GACZI,EAAW3lH,EAAQgJ,EAAQ,EAC3B09G,EAAO59H,EAAKkX,GAAOtiB,EAEnBm6D,EADO/uD,EAAK68H,GAAUjoI,EACVgpI,EAClB,IAAIvpI,EAAI6iB,EAAO7iB,EAAI6iB,EAAQgJ,IAAS7rB,EAAE,CAClCs3F,EAAQ3rF,EAAK3L,GACbO,GAAK+2F,EAAM/2F,EAAIgpI,GAAQ7uE,EAAKinD,EAC5B/1D,EAAI0rC,EAAM1rC,EACV,MAAM+3E,EAAa,EAAJpjI,EACf,GAAIojI,IAAWN,EACPz3E,EAAI+sD,GACJA,EAAO/sD,EACPy9E,EAAWrpI,GACJ4rD,EAAI6sD,IACXA,EAAO7sD,EACP09E,EAAWtpI,GAEfujI,GAAQC,EAASD,EAAOjsC,EAAM/2F,KAAOijI,MAClC,CACH,MAAM30D,EAAY7uE,EAAI,EACtB,IAAK4kF,EAAcykD,KAAczkD,EAAc0kD,GAAW,CACtD,MAAME,EAAqB7yH,KAAKpV,IAAI8nI,EAAUC,GACxCG,EAAqB9yH,KAAKnV,IAAI6nI,EAAUC,GAC1CE,IAAuBxoE,GAAcwoE,IAAuB36D,GAC5Du5D,EAAU/mI,KAAK,IACRsK,EAAK69H,GACRjpI,EAAGgjI,IAGPkG,IAAuBzoE,GAAcyoE,IAAuB56D,GAC5Du5D,EAAU/mI,KAAK,IACRsK,EAAK89H,GACRlpI,EAAGgjI,GAGf,CACIvjI,EAAI,GAAK6uE,IAAc7N,GACvBonE,EAAU/mI,KAAKsK,EAAKkjE,IAExBu5D,EAAU/mI,KAAKi2F,GACf+rC,EAAQM,EACRH,EAAS,EACT7qB,EAAOF,EAAO7sD,EACdy9E,EAAWC,EAAWtoE,EAAahhE,CACvC,CACJ,CACA,OAAOooI,CACX,CAgGgCsB,CAAiB/9H,EAAMkX,EAAOgJ,EAAO81F,GACjD,MACJ,QACI,MAAM,IAAIj4G,MAAM,qCAAqC6d,EAAQygH,cAErEj6B,EAAQ+P,WAAasqB,CAAS,GAChC,EAEN,OAAA93G,CAAS6+D,GACL24C,GAAmB34C,EACvB,GAyCJ,SAASw6C,GAAWrpG,EAAUrN,EAAOyE,EAAM86D,GACvC,GAAIA,EACA,OAEJ,IAAI3vE,EAAQoQ,EAAMqN,GACdxd,EAAM4U,EAAK4I,GAKf,MAJiB,UAAbA,IACAzd,EAAQkmE,GAAgBlmE,GACxBC,EAAMimE,GAAgBjmE,IAEnB,CACHwd,WACAzd,QACAC,MAER,CA+BA,SAAS8mH,GAAgB/mH,EAAOC,EAAK+nE,GACjC,KAAM/nE,EAAMD,EAAOC,IAAM,CACrB,MAAMw0E,EAAQzM,EAAO/nE,GACrB,IAAK/b,MAAMuwF,EAAM/2F,KAAOwG,MAAMuwF,EAAM1rC,GAChC,KAER,CACA,OAAO9oC,CACX,CACA,SAAS+mH,GAASnkH,EAAGxM,EAAGhY,EAAMrB,GAC1B,OAAI6lB,GAAKxM,EACErZ,EAAG6lB,EAAExkB,GAAOgY,EAAEhY,IAElBwkB,EAAIA,EAAExkB,GAAQgY,EAAIA,EAAEhY,GAAQ,CACvC,CAEA,SAAS4oI,GAAoBC,EAAU5/H,GACnC,IAAI0gF,EAAS,GACTge,GAAQ,EAOZ,OANIr3E,EAAQu4G,IACRlhC,GAAQ,EACRhe,EAASk/C,GAETl/C,EArDR,SAA6Bk/C,EAAU5/H,GACnC,MAAM,EAAE5J,EAAG,KAAK,EAAEqrD,EAAG,MAAUm+E,GAAY,CAAC,EACtCC,EAAa7/H,EAAK0gF,OAClBA,EAAS,GAyBf,OAxBA1gF,EAAK68D,SAAS1wC,SAAQ,EAAGzT,QAAQC,UAC7BA,EAAM8mH,GAAgB/mH,EAAOC,EAAKknH,GAClC,MAAM/2G,EAAQ+2G,EAAWnnH,GACnB6U,EAAOsyG,EAAWlnH,GACd,OAAN8oC,GACAi/B,EAAOxpF,KAAK,CACRd,EAAG0yB,EAAM1yB,EACTqrD,MAEJi/B,EAAOxpF,KAAK,CACRd,EAAGm3B,EAAKn3B,EACRqrD,OAES,OAANrrD,IACPsqF,EAAOxpF,KAAK,CACRd,IACAqrD,EAAG34B,EAAM24B,IAEbi/B,EAAOxpF,KAAK,CACRd,IACAqrD,EAAGl0B,EAAKk0B,IAEhB,IAEGi/B,CACX,CAwBiBo/C,CAAoBF,EAAU5/H,GAEpC0gF,EAAO3qF,OAAS,IAAIgkI,GAAY,CACnCr5C,SACAtjE,QAAS,CACLm5E,QAAS,GAEbmI,QACA2V,UAAW3V,IACV,IACT,CACA,SAASqhC,GAAiBllI,GACtB,OAAOA,IAA0B,IAAhBA,EAAOkyF,IAC5B,CAEA,SAASizC,GAAenkD,EAASpxE,EAAOw1H,GAEpC,IAAIlzC,EADWlR,EAAQpxE,GACLsiF,KAClB,MAAMmzC,EAAU,CACZz1H,GAEJ,IAAI9P,EACJ,IAAKslI,EACD,OAAOlzC,EAEX,MAAe,IAATA,IAA6C,IAA3BmzC,EAAQxgI,QAAQqtF,IAAa,CACjD,IAAKrS,EAAeqS,GAChB,OAAOA,EAGX,GADApyF,EAASkhF,EAAQkR,IACZpyF,EACD,OAAO,EAEX,GAAIA,EAAO6tF,QACP,OAAOuE,EAEXmzC,EAAQhpI,KAAK61F,GACbA,EAAOpyF,EAAOoyF,IAClB,CACA,OAAO,CACX,CACC,SAASozC,GAAYngI,EAAMyK,EAAOiX,GAC9B,MAAMqrE,EAmDV,SAAyB/sF,GACtB,MAAMod,EAAUpd,EAAKod,QACfgjH,EAAahjH,EAAQ2vE,KAC3B,IAAIA,EAAOnS,EAAewlD,GAAcA,EAAWzlI,OAAQylI,QAC9C9nI,IAATy0F,IACAA,IAAS3vE,EAAQke,iBAErB,IAAa,IAATyxD,GAA2B,OAATA,EAClB,OAAO,EAEX,IAAa,IAATA,EACA,MAAO,SAEX,OAAOA,CACX,CAjEkBszC,CAAgBrgI,GAC9B,GAAI+rB,EAASghE,GACT,OAAOnwF,MAAMmwF,EAAKx1F,QAAiBw1F,EAEvC,IAAIpyF,EAASkC,WAAWkwF,GACxB,OAAIrS,EAAe//E,IAAW6R,KAAKwtB,MAAMr/B,KAAYA,EAWzD,SAA2B2lI,EAAS71H,EAAO9P,EAAQ+mB,GAC/B,MAAZ4+G,GAA+B,MAAZA,IACnB3lI,EAAS8P,EAAQ9P,GAErB,GAAIA,IAAW8P,GAAS9P,EAAS,GAAKA,GAAU+mB,EAC5C,OAAO,EAEX,OAAO/mB,CACX,CAlBe4lI,CAAkBxzC,EAAK,GAAItiF,EAAO9P,EAAQ+mB,GAE9C,CACH,SACA,QACA,MACA,QACA,SACFhiB,QAAQqtF,IAAS,GAAKA,CAC5B,CAuFC,SAASyzC,GAAe9/C,EAAQ+/C,EAAaC,GAC1C,MAAMC,EAAY,GAClB,IAAI,IAAIpiI,EAAI,EAAGA,EAAImiI,EAAW3qI,OAAQwI,IAAI,CACtC,MAAMyB,EAAO0gI,EAAWniI,IAClB,MAAEuqB,EAAM,KAAEyE,EAAK,MAAE4/D,GAAWyzC,GAAU5gI,EAAMygI,EAAa,KAC/D,MAAKtzC,GAASrkE,GAASyE,GAGvB,GAAIzE,EACA63G,EAAUj4G,QAAQykE,QAGlB,GADAzM,EAAOxpF,KAAKi2F,IACP5/D,EACD,KAGZ,CACAmzD,EAAOxpF,QAAQypI,EACnB,CACC,SAASC,GAAU5gI,EAAMygI,EAAatqG,GACnC,MAAMg3D,EAAQntF,EAAK25E,YAAY8mD,EAAatqG,GAC5C,IAAKg3D,EACD,MAAO,CAAC,EAEZ,MAAM0zC,EAAa1zC,EAAMh3D,GACnB0mC,EAAW78D,EAAK68D,SAChBgjE,EAAa7/H,EAAK0gF,OACxB,IAAI53D,GAAQ,EACRyE,GAAO,EACX,IAAI,IAAI13B,EAAI,EAAGA,EAAIgnE,EAAS9mE,OAAQF,IAAI,CACpC,MAAMmuE,EAAUnH,EAAShnE,GACnBirI,EAAajB,EAAW77D,EAAQtrD,OAAOyd,GACvC4qG,EAAYlB,EAAW77D,EAAQrrD,KAAKwd,GAC1C,GAAIipD,GAAWyhD,EAAYC,EAAYC,GAAY,CAC/Cj4G,EAAQ+3G,IAAeC,EACvBvzG,EAAOszG,IAAeE,EACtB,KACJ,CACJ,CACA,MAAO,CACHj4G,QACAyE,OACA4/D,QAER,CAEA,MAAM6zC,GACF,WAAA16G,CAAY3kB,GACRzG,KAAK9E,EAAIuL,EAAKvL,EACd8E,KAAKumD,EAAI9/C,EAAK8/C,EACdvmD,KAAKkxF,OAASzqF,EAAKyqF,MACvB,CACA,WAAAysC,CAAY/3G,EAAK8nE,EAAQjnF,GACrB,MAAM,EAAEvL,EAAE,EAAEqrD,EAAE,OAAE2qC,GAAYlxF,KAM5B,OALA0tF,EAASA,GAAU,CACflwE,MAAO,EACPC,IAAK8jE,IAET37D,EAAI4rE,IAAIt2F,EAAGqrD,EAAG2qC,EAAQxD,EAAOjwE,IAAKiwE,EAAOlwE,OAAO,IACxC/W,EAAKinF,MACjB,CACA,WAAAjP,CAAYwT,GACR,MAAM,EAAE/2F,EAAE,EAAEqrD,EAAE,OAAE2qC,GAAYlxF,KACtBojF,EAAQ6O,EAAM7O,MACpB,MAAO,CACHloF,EAAGA,EAAIoW,KAAKw2E,IAAI1E,GAAS8N,EACzB3qC,EAAGA,EAAIj1C,KAAKu1E,IAAIzD,GAAS8N,EACzB9N,QAER,EAGJ,SAASmT,GAAW52F,GAChB,MAAM,MAAEmqF,EAAM,KAAE+H,EAAK,KAAE/sF,GAAUnF,EACjC,GAAI6/E,EAAeqS,GACf,OAcP,SAAwB/H,EAAOv6E,GAC5B,MAAMg2E,EAAOuE,EAAM2f,eAAel6F,GAC5B+9E,EAAU/H,GAAQuE,EAAMooB,iBAAiB3iG,GAC/C,OAAO+9E,EAAU/H,EAAKmjB,QAAU,IACpC,CAlBeq9B,CAAej8C,EAAO+H,GAEjC,GAAa,UAATA,EACA,OAjHR,SAAyBlyF,GACrB,MAAM,MAAEysF,EAAM,MAAE78E,EAAM,KAAEzK,GAAUnF,EAC5B6lF,EAAS,GACT7jB,EAAW78D,EAAK68D,SAChBqkE,EAAelhI,EAAK0gF,OACpBggD,EAgBT,SAAuBp5C,EAAO78E,GAC3B,MAAM02H,EAAQ,GACR/f,EAAQ95B,EAAM+Z,wBAAwB,QAC5C,IAAI,IAAIxrG,EAAI,EAAGA,EAAIurH,EAAMrrH,OAAQF,IAAI,CACjC,MAAM4qF,EAAO2gC,EAAMvrH,GACnB,GAAI4qF,EAAKh2E,QAAUA,EACf,MAECg2E,EAAK/5C,QACNy6F,EAAMz4G,QAAQ+3D,EAAKmjB,QAE3B,CACA,OAAOu9B,CACX,CA7BuBC,CAAc95C,EAAO78E,GACxCi2H,EAAWxpI,KAAKyoI,GAAoB,CAChCvpI,EAAG,KACHqrD,EAAG6lC,EAAMlpC,QACVp+C,IACH,IAAI,IAAInK,EAAI,EAAGA,EAAIgnE,EAAS9mE,OAAQF,IAAI,CACpC,MAAMmuE,EAAUnH,EAAShnE,GACzB,IAAI,IAAI0I,EAAIylE,EAAQtrD,MAAOna,GAAKylE,EAAQrrD,IAAKpa,IACzCiiI,GAAe9/C,EAAQwgD,EAAa3iI,GAAImiI,EAEhD,CACA,OAAO,IAAI3G,GAAY,CACnBr5C,SACAtjE,QAAS,CAAC,GAElB,CA6FeikH,CAAgBxmI,GAE3B,GAAa,UAATkyF,EACA,OAAO,EAEX,MAAM6yC,EAWV,SAAyB/kI,GACrB,MAAMysF,EAAQzsF,EAAOysF,OAAS,CAAC,EAC/B,GAAIA,EAAMitB,yBACN,OAgBR,SAAiC15G,GAC7B,MAAM,MAAEysF,EAAM,KAAEyF,GAAUlyF,EACpBuiB,EAAUkqE,EAAMlqE,QAChBrnB,EAASuxF,EAAM4e,YAAYnwG,OAC3B2iB,EAAQ0E,EAAQ89D,QAAUoM,EAAMjwF,IAAMiwF,EAAMlwF,IAC5CG,EAtLT,SAAyBw1F,EAAMzF,EAAO9qD,GACnC,IAAIjlC,EAUJ,OARIA,EADS,UAATw1F,EACQvwD,EACQ,QAATuwD,EACCzF,EAAMlqE,QAAQ89D,QAAUoM,EAAMlwF,IAAMkwF,EAAMjwF,IAC3C00B,EAASghE,GACRA,EAAKx1F,MAEL+vF,EAAMw+B,eAEXvuH,CACX,CA0KkB+pI,CAAgBv0C,EAAMzF,EAAO5uE,GACrC/d,EAAS,GACf,GAAIyiB,EAAQ2rE,KAAK2mB,SAAU,CACvB,MAAMiC,EAASrqB,EAAMitB,yBAAyB,EAAG77F,GACjD,OAAO,IAAIsoH,GAAU,CACjB5qI,EAAGu7G,EAAOv7G,EACVqrD,EAAGkwD,EAAOlwD,EACV2qC,OAAQ9E,EAAMipB,8BAA8Bh5G,IAEpD,CACA,IAAI,IAAI1B,EAAI,EAAGA,EAAIE,IAAUF,EACzB8E,EAAOzD,KAAKowF,EAAMitB,yBAAyB1+G,EAAG0B,IAElD,OAAOoD,CACX,CAnCe4mI,CAAwB1mI,GAEnC,OAEJ,SAA+BA,GAC3B,MAAM,MAAEysF,EAAO,CAAC,EAAE,KAAEyF,GAAUlyF,EACxBuwF,EApLT,SAAyB2B,EAAMzF,GAC5B,IAAI8D,EAAQ,KAUZ,MATa,UAAT2B,EACA3B,EAAQ9D,EAAMlpC,OACE,QAAT2uC,EACP3B,EAAQ9D,EAAMppC,IACPnyB,EAASghE,GAChB3B,EAAQ9D,EAAMnG,iBAAiB4L,EAAKx1F,OAC7B+vF,EAAM6pB,eACb/lB,EAAQ9D,EAAM6pB,gBAEX/lB,CACX,CAwKkBo2C,CAAgBz0C,EAAMzF,GACpC,GAAI5M,EAAe0Q,GAAQ,CACvB,MAAMsgB,EAAapkB,EAAM8pB,eACzB,MAAO,CACHh7G,EAAGs1G,EAAatgB,EAAQ,KACxB3pC,EAAGiqD,EAAa,KAAOtgB,EAE/B,CACA,OAAO,IACX,CAbWq2C,CAAsB5mI,EACjC,CAjBqB6mI,CAAgB7mI,GACjC,OAAI+kI,aAAoBoB,GACbpB,EAEJD,GAAoBC,EAAU5/H,EACzC,CA8CA,SAAS2hI,GAAU7gH,EAAKjmB,EAAQuyF,GAC5B,MAAMzyF,EAAS82F,GAAW52F,IACpB,KAAEmF,EAAK,MAAEsnF,EAAM,KAAE5zB,GAAU74D,EAC3B+mI,EAAW5hI,EAAKod,QAChBgjH,EAAawB,EAAS70C,KACtB7zD,EAAQ0oG,EAAStmG,iBACjB,MAAEumG,EAAO3oG,EAAM,MAAEioG,EAAOjoG,GAAWknG,GAAc,CAAC,EACpDzlI,GAAUqF,EAAK0gF,OAAO3qF,SACtBu3F,GAASxsE,EAAKssE,GAatB,SAAgBtsE,EAAKy9E,GACjB,MAAM,KAAEv+F,EAAK,OAAErF,EAAO,MAAEknI,EAAM,MAAEV,EAAM,KAAE/zC,EAAK,MAAE9F,GAAWiX,EACpDpoE,EAAWn2B,EAAK0+F,MAAQ,QAAUH,EAAI7qC,KAC5C5yC,EAAIgF,OACa,MAAbqQ,GAAoBgrG,IAAUU,IAC9BC,GAAahhH,EAAKnmB,EAAQyyF,EAAKlvC,KAC/B6uC,GAAKjsE,EAAK,CACN9gB,OACArF,SACAu+B,MAAO2oG,EACPv6C,QACAnxD,aAEJrV,EAAImqE,UACJnqE,EAAIgF,OACJg8G,GAAahhH,EAAKnmB,EAAQyyF,EAAKhvC,SAEnC2uC,GAAKjsE,EAAK,CACN9gB,OACArF,SACAu+B,MAAOioG,EACP75C,QACAnxD,aAEJrV,EAAImqE,SACR,CArCQ82C,CAAOjhH,EAAK,CACR9gB,OACArF,SACAknI,QACAV,QACA/zC,OACA9F,QACA5zB,SAEJ65B,GAAWzsE,GAEnB,CA2BA,SAASghH,GAAahhH,EAAKnmB,EAAQqnI,GAC/B,MAAM,SAAEnlE,EAAS,OAAE6jB,GAAY/lF,EAC/B,IAAImuB,GAAQ,EACRm5G,GAAW,EACfnhH,EAAI0rE,YACJ,IAAK,MAAMxoB,KAAWnH,EAAS,CAC3B,MAAM,MAAEnkD,EAAM,IAAEC,GAASqrD,EACnBuwB,EAAa7T,EAAOhoE,GACpBu7F,EAAYvzB,EAAO++C,GAAgB/mH,EAAOC,EAAK+nE,IACjD53D,GACAhI,EAAI8rE,OAAO2H,EAAWn+F,EAAGm+F,EAAW9yC,GACpC34B,GAAQ,IAERhI,EAAI+rE,OAAO0H,EAAWn+F,EAAG4rI,GACzBlhH,EAAI+rE,OAAO0H,EAAWn+F,EAAGm+F,EAAW9yC,IAExCwgF,IAAatnI,EAAOk+H,YAAY/3G,EAAKkjD,EAAS,CAC1C4lC,KAAMq4B,IAENA,EACAnhH,EAAI6rE,YAEJ7rE,EAAI+rE,OAAOonB,EAAU79G,EAAG4rI,EAEhC,CACAlhH,EAAI+rE,OAAOlyF,EAAOmuB,QAAQ1yB,EAAG4rI,GAC7BlhH,EAAI6rE,YACJ7rE,EAAI+nE,MACR,CACA,SAASkE,GAAKjsE,EAAKy9E,GACf,MAAM,KAAEv+F,EAAK,OAAErF,EAAO,SAAEw7B,EAAS,MAAE+C,EAAM,MAAEouD,GAAWiX,EAChD1hC,EA/cV,SAAmB78D,EAAMrF,EAAQw7B,GAC7B,MAAM0mC,EAAW78D,EAAK68D,SAChB6jB,EAAS1gF,EAAK0gF,OACdwhD,EAAUvnI,EAAO+lF,OACjB/gF,EAAQ,GACd,IAAK,MAAMqkE,KAAWnH,EAAS,CAC3B,IAAI,MAAEnkD,EAAM,IAAEC,GAASqrD,EACvBrrD,EAAM8mH,GAAgB/mH,EAAOC,EAAK+nE,GAClC,MAAMkI,EAAS42C,GAAWrpG,EAAUuqD,EAAOhoE,GAAQgoE,EAAO/nE,GAAMqrD,EAAQqkB,MACxE,IAAK1tF,EAAOkiE,SAAU,CAClBl9D,EAAMzI,KAAK,CACP2D,OAAQmpE,EACRrpE,OAAQiuF,EACRlwE,MAAOgoE,EAAOhoE,GACdC,IAAK+nE,EAAO/nE,KAEhB,QACJ,CACA,MAAMwpH,EAAiB5mC,GAAe5gG,EAAQiuF,GAC9C,IAAK,MAAMw5C,KAAOD,EAAe,CAC7B,MAAME,EAAY7C,GAAWrpG,EAAU+rG,EAAQE,EAAI1pH,OAAQwpH,EAAQE,EAAIzpH,KAAMypH,EAAI/5C,MAC3Ei6C,EAAcxnC,GAAc92B,EAAS0c,EAAQ2hD,GACnD,IAAK,MAAME,KAAcD,EACrB3iI,EAAMzI,KAAK,CACP2D,OAAQ0nI,EACR5nI,OAAQynI,EACR1pH,MAAO,CACH,CAACyd,GAAWupG,GAAS92C,EAAQy5C,EAAW,QAAS71H,KAAKnV,MAE1DshB,IAAK,CACD,CAACwd,GAAWupG,GAAS92C,EAAQy5C,EAAW,MAAO71H,KAAKpV,OAIpE,CACJ,CACA,OAAOuI,CACX,CA0aqBi9D,CAAU58D,EAAMrF,EAAQw7B,GACzC,IAAK,MAAQt7B,OAAQu3B,EAAMz3B,OAAQynI,EAAI,MAAE1pH,EAAM,IAAEC,KAAUkkD,EAAS,CAChE,MAAQxqC,OAAO,gBAAEiJ,EAAiBpC,GAAW,CAAC,GAAO9G,EAC/CowG,GAAsB,IAAX7nI,EACjBmmB,EAAIgF,OACJhF,EAAI6tE,UAAYrzD,EAChBmnG,GAAW3hH,EAAKwmE,EAAOk7C,GAAYhD,GAAWrpG,EAAUzd,EAAOC,IAC/DmI,EAAI0rE,YACJ,MAAMy1C,IAAajiI,EAAK64H,YAAY/3G,EAAKsR,GACzC,IAAIi2D,EACJ,GAAIm6C,EAAU,CACNP,EACAnhH,EAAI6rE,YAEJ+1C,GAAmB5hH,EAAKnmB,EAAQge,EAAKwd,GAEzC,MAAMwsG,IAAehoI,EAAOk+H,YAAY/3G,EAAKshH,EAAK,CAC9Cx4B,KAAMq4B,EACN/mD,SAAS,IAEbmN,EAAO45C,GAAYU,EACdt6C,GACDq6C,GAAmB5hH,EAAKnmB,EAAQ+d,EAAOyd,EAE/C,CACArV,EAAI6rE,YACJ7rE,EAAIisE,KAAK1E,EAAO,UAAY,WAC5BvnE,EAAImqE,SACR,CACJ,CACA,SAASw3C,GAAW3hH,EAAKwmE,EAAOsB,GAC5B,MAAM,IAAE1qC,EAAI,OAAEE,GAAYkpC,EAAMtC,MAAM0iB,WAChC,SAAEvxE,EAAS,MAAEzd,EAAM,IAAEC,GAASiwE,GAAU,CAAC,EAC9B,MAAbzyD,IACArV,EAAI0rE,YACJ1rE,EAAIi+B,KAAKrmC,EAAOwlC,EAAKvlC,EAAMD,EAAO0lC,EAASF,GAC3Cp9B,EAAI+nE,OAEZ,CACA,SAAS65C,GAAmB5hH,EAAKnmB,EAAQwyF,EAAOh3D,GAC5C,MAAMysG,EAAoBjoI,EAAOg/E,YAAYwT,EAAOh3D,GAChDysG,GACA9hH,EAAI+rE,OAAO+1C,EAAkBxsI,EAAGwsI,EAAkBnhF,EAE1D,CAEA,IAAIh3C,GAAQ,CACRvC,GAAI,SACJ,mBAAA26H,CAAqB79C,EAAOu4C,EAAOngH,GAC/B,MAAMsE,GAASsjE,EAAMxjF,KAAK2kF,UAAY,IAAIpwF,OACpC8lF,EAAU,GAChB,IAAI4E,EAAM5qF,EAAGmK,EAAMnF,EACnB,IAAIhF,EAAI,EAAGA,EAAI6rB,IAAS7rB,EACpB4qF,EAAOuE,EAAM2f,eAAe9uG,GAC5BmK,EAAOygF,EAAKmjB,QACZ/oG,EAAS,KACLmF,GAAQA,EAAKod,SAAWpd,aAAgB+5H,KACxCl/H,EAAS,CACL2tF,QAASxD,EAAMooB,iBAAiBv3G,GAChC4U,MAAO5U,EACPk3F,KAAMozC,GAAYngI,EAAMnK,EAAG6rB,GAC3BsjE,QACAtxB,KAAM+sB,EAAK8gB,WAAWnkF,QAAQwpE,UAC9BU,MAAO7G,EAAK0gB,OACZnhG,SAGRygF,EAAKqiD,QAAUjoI,EACfghF,EAAQ3kF,KAAK2D,GAEjB,IAAIhF,EAAI,EAAGA,EAAI6rB,IAAS7rB,EACpBgF,EAASghF,EAAQhmF,GACZgF,IAA0B,IAAhBA,EAAOkyF,OAGtBlyF,EAAOkyF,KAAOizC,GAAenkD,EAAShmF,EAAGunB,EAAQ6iH,WAEzD,EACA,UAAA8C,CAAY/9C,EAAOu4C,EAAOngH,GACtB,MAAMogF,EAA4B,eAArBpgF,EAAQ4lH,SACf3iC,EAAWrb,EAAMowB,+BACjBhoB,EAAOpI,EAAM0iB,UACnB,IAAI,IAAI7xG,EAAIwqG,EAAStqG,OAAS,EAAGF,GAAK,IAAKA,EAAE,CACzC,MAAMgF,EAASwlG,EAASxqG,GAAGitI,QACtBjoI,IAGLA,EAAOmF,KAAKk0G,oBAAoB9mB,EAAMvyF,EAAO64D,MACzC8pC,GAAQ3iG,EAAOkyF,MACf40C,GAAU38C,EAAMlkE,IAAKjmB,EAAQuyF,GAErC,CACJ,EACA,kBAAA61C,CAAoBj+C,EAAOu4C,EAAOngH,GAC9B,GAAyB,uBAArBA,EAAQ4lH,SACR,OAEJ,MAAM3iC,EAAWrb,EAAMowB,+BACvB,IAAI,IAAIv/G,EAAIwqG,EAAStqG,OAAS,EAAGF,GAAK,IAAKA,EAAE,CACzC,MAAMgF,EAASwlG,EAASxqG,GAAGitI,QACvB/C,GAAiBllI,IACjB8mI,GAAU38C,EAAMlkE,IAAKjmB,EAAQmqF,EAAM0iB,UAE3C,CACJ,EACA,iBAAAw7B,CAAmBl+C,EAAOrnF,EAAMyf,GAC5B,MAAMviB,EAAS8C,EAAK8iF,KAAKqiD,QACpB/C,GAAiBllI,IAAgC,sBAArBuiB,EAAQ4lH,UAGzCrB,GAAU38C,EAAMlkE,IAAKjmB,EAAQmqF,EAAM0iB,UACvC,EACA7jF,SAAU,CACNo8G,WAAW,EACX+C,SAAU,sBAIlB,MAAMG,GAAa,CAACC,EAAWha,KAC3B,IAAI,UAAEia,EAAWja,EAAS,SAAEka,EAAUla,GAAcga,EAKpD,OAJIA,EAAUG,gBACVF,EAAY72H,KAAKpV,IAAIisI,EAAWja,GAChCka,EAAWF,EAAUI,iBAAmBh3H,KAAKpV,IAAIksI,EAAUla,IAExD,CACHka,WACAD,YACAI,WAAYj3H,KAAKnV,IAAI+xH,EAAUia,GAClC,EAGL,MAAMK,WAAehmB,GACpB,WAAAp3F,CAAY7W,GACLo9F,QACA3xG,KAAKyoI,QAAS,EACdzoI,KAAK0oI,eAAiB,GAC7B1oI,KAAK2oI,aAAe,KACb3oI,KAAK4oI,cAAe,EACpB5oI,KAAK8pF,MAAQv1E,EAAOu1E,MACpB9pF,KAAKkiB,QAAU3N,EAAO2N,QACtBliB,KAAK4lB,IAAMrR,EAAOqR,IAClB5lB,KAAK6oI,iBAAczrI,EACnB4C,KAAK8oI,iBAAc1rI,EACnB4C,KAAK+oI,gBAAa3rI,EAClB4C,KAAKo9F,eAAYhgG,EACjB4C,KAAKs0F,cAAWl3F,EAChB4C,KAAKgjD,SAAM5lD,EACX4C,KAAKkjD,YAAS9lD,EACd4C,KAAKijD,UAAO7lD,EACZ4C,KAAKmjD,WAAQ/lD,EACb4C,KAAKojD,YAAShmD,EACd4C,KAAKqjD,WAAQjmD,EACb4C,KAAKklH,cAAW9nH,EAChB4C,KAAKs0C,cAAWl3C,EAChB4C,KAAKo+E,YAAShhF,EACd4C,KAAKq8G,cAAWj/G,CACpB,CACA,MAAA0mG,CAAOxP,EAAU8I,EAAWD,GACxBn9F,KAAKs0F,SAAWA,EAChBt0F,KAAKo9F,UAAYA,EACjBp9F,KAAKklH,SAAW/nB,EAChBn9F,KAAK2mH,gBACL3mH,KAAKgpI,cACLhpI,KAAK6nH,KACT,CACA,aAAAlB,GACQ3mH,KAAKk2G,gBACLl2G,KAAKqjD,MAAQrjD,KAAKs0F,SAClBt0F,KAAKijD,KAAOjjD,KAAKklH,SAASjiE,KAC1BjjD,KAAKmjD,MAAQnjD,KAAKqjD,QAElBrjD,KAAKojD,OAASpjD,KAAKo9F,UACnBp9F,KAAKgjD,IAAMhjD,KAAKklH,SAASliE,IACzBhjD,KAAKkjD,OAASljD,KAAKojD,OAE3B,CACA,WAAA4lF,GACI,MAAMd,EAAYloI,KAAKkiB,QAAQ6oF,QAAU,CAAC,EAC1C,IAAI89B,EAAcvjH,EAAS4iH,EAAU52B,eAAgB,CACjDtxG,KAAK8pF,OACN9pF,OAAS,GACRkoI,EAAUrjI,SACVgkI,EAAcA,EAAYhkI,QAAQ9J,GAAOmtI,EAAUrjI,OAAO9J,EAAMiF,KAAK8pF,MAAMxjF,SAE3E4hI,EAAUr7G,OACVg8G,EAAcA,EAAYh8G,MAAK,CAACxM,EAAGxM,IAAIq0H,EAAUr7G,KAAKxM,EAAGxM,EAAG7T,KAAK8pF,MAAMxjF,SAEvEtG,KAAKkiB,QAAQ89D,SACb6oD,EAAY7oD,UAEhBhgF,KAAK6oI,YAAcA,CACvB,CACA,GAAAhhB,GACI,MAAM,QAAE3lG,EAAQ,IAAE0D,GAAS5lB,KAC3B,IAAKkiB,EAAQkV,QAET,YADAp3B,KAAKqjD,MAAQrjD,KAAKojD,OAAS,GAG/B,MAAM8kF,EAAYhmH,EAAQ6oF,OACpBk+B,EAAY1zC,GAAO2yC,EAAU98C,MAC7B8iC,EAAW+a,EAAU14H,KACrB64G,EAAcppH,KAAKkpI,uBACnB,SAAEd,EAAS,WAAEG,GAAgBN,GAAWC,EAAWha,GACzD,IAAI7qE,EAAOD,EACXx9B,EAAIwlE,KAAO69C,EAAU1pG,OACjBv/B,KAAKk2G,gBACL7yD,EAAQrjD,KAAKs0F,SACblxC,EAASpjD,KAAKmpI,SAAS/f,EAAa8E,EAAUka,EAAUG,GAAc,KAEtEnlF,EAASpjD,KAAKo9F,UACd/5C,EAAQrjD,KAAKopI,SAAShgB,EAAa6f,EAAWb,EAAUG,GAAc,IAE1EvoI,KAAKqjD,MAAQ/xC,KAAKpV,IAAImnD,EAAOnhC,EAAQoyE,UAAYt0F,KAAKs0F,UACtDt0F,KAAKojD,OAAS9xC,KAAKpV,IAAIknD,EAAQlhC,EAAQk7E,WAAap9F,KAAKo9F,UAC7D,CACH,QAAA+rC,CAAS/f,EAAa8E,EAAUka,EAAUG,GACnC,MAAM,IAAE3iH,EAAI,SAAE0uE,EAAWpyE,SAAW6oF,QAAQ,QAAEvd,KAAmBxtF,KAC3DqpI,EAAWrpI,KAAK0oI,eAAiB,GACjCK,EAAa/oI,KAAK+oI,WAAa,CACjC,GAEE/+F,EAAau+F,EAAa/6C,EAChC,IAAI87C,EAAclgB,EAClBxjG,EAAIsuE,UAAY,OAChBtuE,EAAIuuE,aAAe,SACnB,IAAIo1C,GAAO,EACPvmF,GAAOhZ,EAkBX,OAjBAhqC,KAAK6oI,YAAY53G,SAAQ,CAACwgF,EAAY92G,KAClC,MAAMskG,EAAYmpC,EAAWla,EAAW,EAAItoG,EAAI4pE,YAAYiiB,EAAWxyF,MAAMokC,OACnE,IAAN1oD,GAAWouI,EAAWA,EAAWluI,OAAS,GAAKokG,EAAY,EAAIzR,EAAU8G,KACzEg1C,GAAet/F,EACf++F,EAAWA,EAAWluI,QAAUF,EAAI,EAAI,EAAI,IAAM,EAClDqoD,GAAOhZ,EACPu/F,KAEJF,EAAS1uI,GAAK,CACVsoD,KAAM,EACND,MACAumF,MACAlmF,MAAO47C,EACP77C,OAAQmlF,GAEZQ,EAAWA,EAAWluI,OAAS,IAAMokG,EAAYzR,CAAO,IAErD87C,CACX,CACA,QAAAF,CAAShgB,EAAa6f,EAAWb,EAAUoB,GACvC,MAAM,IAAE5jH,EAAI,UAAEw3E,EAAYl7E,SAAW6oF,QAAQ,QAAEvd,KAAmBxtF,KAC5DqpI,EAAWrpI,KAAK0oI,eAAiB,GACjCI,EAAc9oI,KAAK8oI,YAAc,GACjCW,EAAcrsC,EAAYgsB,EAChC,IAAIsgB,EAAal8C,EACbm8C,EAAkB,EAClBC,EAAmB,EACnB3mF,EAAO,EACP4mF,EAAM,EA4BV,OA3BA7pI,KAAK6oI,YAAY53G,SAAQ,CAACwgF,EAAY92G,KAClC,MAAM,UAAEskG,EAAU,WAAEspC,GAqRhC,SAA2BH,EAAUa,EAAWrjH,EAAK6rF,EAAY+3B,GAC7D,MAAMvqC,EAOV,SAA4BwS,EAAY22B,EAAUa,EAAWrjH,GACzD,IAAIkkH,EAAiBr4B,EAAWxyF,KAC5B6qH,GAA4C,kBAAnBA,IACzBA,EAAiBA,EAAe34G,QAAO,CAAC9Q,EAAGxM,IAAIwM,EAAExlB,OAASgZ,EAAEhZ,OAASwlB,EAAIxM,KAE7E,OAAOu0H,EAAWa,EAAU14H,KAAO,EAAIqV,EAAI4pE,YAAYs6C,GAAgBzmF,KAC3E,CAbsB0mF,CAAmBt4B,EAAY22B,EAAUa,EAAWrjH,GAChE2iH,EAaV,SAA6BiB,EAAa/3B,EAAYu4B,GAClD,IAAIzB,EAAaiB,EACc,kBAApB/3B,EAAWxyF,OAClBspH,EAAa0B,GAA0Bx4B,EAAYu4B,IAEvD,OAAOzB,CACX,CAnBuB2B,CAAoBV,EAAa/3B,EAAYw3B,EAAUj/F,YAC1E,MAAO,CACHi1D,YACAspC,aAER,CA5RgD4B,CAAkB/B,EAAUa,EAAWrjH,EAAK6rF,EAAY+3B,GACxF7uI,EAAI,GAAKivI,EAAmBrB,EAAa,EAAI/6C,EAAUi8C,IACvDC,GAAcC,EAAkBn8C,EAChCs7C,EAAY9sI,KAAK,CACbqnD,MAAOsmF,EACPvmF,OAAQwmF,IAEZ3mF,GAAQ0mF,EAAkBn8C,EAC1Bq8C,IACAF,EAAkBC,EAAmB,GAEzCP,EAAS1uI,GAAK,CACVsoD,OACAD,IAAK4mF,EACLC,MACAxmF,MAAO47C,EACP77C,OAAQmlF,GAEZoB,EAAkBr4H,KAAKnV,IAAIwtI,EAAiB1qC,GAC5C2qC,GAAoBrB,EAAa/6C,CAAO,IAE5Ck8C,GAAcC,EACdb,EAAY9sI,KAAK,CACbqnD,MAAOsmF,EACPvmF,OAAQwmF,IAELF,CACX,CACA,cAAAU,GACI,IAAKpqI,KAAKkiB,QAAQkV,QACd,OAEJ,MAAMgyF,EAAcppH,KAAKkpI,uBACjBR,eAAgBW,EAAWnnH,SAAS,MAAEkjE,EAAQ2lB,QAAQ,QAAEvd,GAAW,IAAEoR,IAAY5+F,KACnFqqI,EAAY1rC,GAAcC,EAAK5+F,KAAKijD,KAAMjjD,KAAKqjD,OACrD,GAAIrjD,KAAKk2G,eAAgB,CACrB,IAAIqzB,EAAM,EACNtmF,EAAOoiC,GAAeD,EAAOplF,KAAKijD,KAAOuqC,EAASxtF,KAAKmjD,MAAQnjD,KAAK+oI,WAAWQ,IACnF,IAAK,MAAMe,KAAUjB,EACbE,IAAQe,EAAOf,MACfA,EAAMe,EAAOf,IACbtmF,EAAOoiC,GAAeD,EAAOplF,KAAKijD,KAAOuqC,EAASxtF,KAAKmjD,MAAQnjD,KAAK+oI,WAAWQ,KAEnFe,EAAOtnF,KAAOhjD,KAAKgjD,IAAMomE,EAAc57B,EACvC88C,EAAOrnF,KAAOonF,EAAUrrC,WAAWqrC,EAAUnvI,EAAE+nD,GAAOqnF,EAAOjnF,OAC7DJ,GAAQqnF,EAAOjnF,MAAQmqC,CAE/B,KAAO,CACH,IAAIq8C,EAAM,EACN7mF,EAAMqiC,GAAeD,EAAOplF,KAAKgjD,IAAMomE,EAAc57B,EAASxtF,KAAKkjD,OAASljD,KAAK8oI,YAAYe,GAAKzmF,QACtG,IAAK,MAAMknF,KAAUjB,EACbiB,EAAOT,MAAQA,IACfA,EAAMS,EAAOT,IACb7mF,EAAMqiC,GAAeD,EAAOplF,KAAKgjD,IAAMomE,EAAc57B,EAASxtF,KAAKkjD,OAASljD,KAAK8oI,YAAYe,GAAKzmF,SAEtGknF,EAAOtnF,IAAMA,EACbsnF,EAAOrnF,MAAQjjD,KAAKijD,KAAOuqC,EAC3B88C,EAAOrnF,KAAOonF,EAAUrrC,WAAWqrC,EAAUnvI,EAAEovI,EAAOrnF,MAAOqnF,EAAOjnF,OACpEL,GAAOsnF,EAAOlnF,OAASoqC,CAE/B,CACJ,CACA,YAAA0oB,GACI,MAAiC,QAA1Bl2G,KAAKkiB,QAAQoyB,UAAgD,WAA1Bt0C,KAAKkiB,QAAQoyB,QAC3D,CACA,IAAAguD,GACI,GAAItiG,KAAKkiB,QAAQkV,QAAS,CACtB,MAAMxR,EAAM5lB,KAAK4lB,IACjBwsE,GAASxsE,EAAK5lB,MACdA,KAAKuqI,QACLl4C,GAAWzsE,EACf,CACJ,CACH,KAAA2kH,GACO,MAAQroH,QAASzb,EAAK,YAAEqiI,EAAY,WAAEC,EAAW,IAAEnjH,GAAS5lB,MACtD,MAAEolF,EAAQ2lB,OAAQm9B,GAAezhI,EACjC+jI,EAAe7hH,GAASqV,MACxBqsG,EAAY1rC,GAAcl4F,EAAKm4F,IAAK5+F,KAAKijD,KAAMjjD,KAAKqjD,OACpD4lF,EAAY1zC,GAAO2yC,EAAU98C,OAC7B,QAAEoC,GAAa06C,EACfha,EAAW+a,EAAU14H,KACrBk6H,EAAevc,EAAW,EAChC,IAAIwc,EACJ1qI,KAAK0tH,YACL9nG,EAAIsuE,UAAYm2C,EAAUn2C,UAAU,QACpCtuE,EAAIuuE,aAAe,SACnBvuE,EAAIkoE,UAAY,GAChBloE,EAAIwlE,KAAO69C,EAAU1pG,OACrB,MAAM,SAAE6oG,EAAS,UAAED,EAAU,WAAEI,GAAgBN,GAAWC,EAAWha,GAqD/DhY,EAAel2G,KAAKk2G,eACpBkT,EAAcppH,KAAKkpI,sBAErBwB,EADAx0B,EACS,CACLh7G,EAAGmqF,GAAeD,EAAOplF,KAAKijD,KAAOuqC,EAASxtF,KAAKmjD,MAAQ4lF,EAAW,IACtExiF,EAAGvmD,KAAKgjD,IAAMwqC,EAAU47B,EACxBtkH,KAAM,GAGD,CACL5J,EAAG8E,KAAKijD,KAAOuqC,EACfjnC,EAAG8+B,GAAeD,EAAOplF,KAAKgjD,IAAMomE,EAAc57B,EAASxtF,KAAKkjD,OAAS4lF,EAAY,GAAG1lF,QACxFt+C,KAAM,GAGds6F,GAAsBp/F,KAAK4lB,IAAKnf,EAAKkkI,eACrC,MAAM3gG,EAAau+F,EAAa/6C,EAChCxtF,KAAK6oI,YAAY53G,SAAQ,CAACwgF,EAAY92G,KAClCirB,EAAI4tE,YAAcie,EAAWF,UAC7B3rF,EAAI6tE,UAAYge,EAAWF,UAC3B,MAAMhiB,EAAY3pE,EAAI4pE,YAAYiiB,EAAWxyF,MAAMokC,MAC7C6wC,EAAYm2C,EAAUn2C,UAAUud,EAAWvd,YAAcud,EAAWvd,UAAYg0C,EAAUh0C,YAC1F7wC,EAAQ+kF,EAAWqC,EAAel7C,EACxC,IAAIr0F,EAAIwvI,EAAOxvI,EACXqrD,EAAImkF,EAAOnkF,EACf8jF,EAAUvrC,SAAS9+F,KAAKqjD,OACpB6yD,EACIv7G,EAAI,GAAKO,EAAImoD,EAAQmqC,EAAUxtF,KAAKmjD,QACpCoD,EAAImkF,EAAOnkF,GAAKvc,EAChB0gG,EAAO5lI,OACP5J,EAAIwvI,EAAOxvI,EAAImqF,GAAeD,EAAOplF,KAAKijD,KAAOuqC,EAASxtF,KAAKmjD,MAAQ4lF,EAAW2B,EAAO5lI,QAEtFnK,EAAI,GAAK4rD,EAAIvc,EAAahqC,KAAKkjD,SACtChoD,EAAIwvI,EAAOxvI,EAAIA,EAAI4tI,EAAY4B,EAAO5lI,MAAMu+C,MAAQmqC,EACpDk9C,EAAO5lI,OACPyhD,EAAImkF,EAAOnkF,EAAI8+B,GAAeD,EAAOplF,KAAKgjD,IAAMomE,EAAc57B,EAASxtF,KAAKkjD,OAAS4lF,EAAY4B,EAAO5lI,MAAMs+C,SAMlH,GA7FkB,SAASloD,EAAGqrD,EAAGkrD,GACjC,GAAI/vG,MAAM0mI,IAAaA,GAAY,GAAK1mI,MAAMymI,IAAcA,EAAY,EACpE,OAEJviH,EAAIgF,OACJ,MAAMkjE,EAAYpO,EAAe+xB,EAAW3jB,UAAW,GAQvD,GAPAloE,EAAI6tE,UAAY/T,EAAe+xB,EAAWhe,UAAW+2C,GACrD5kH,EAAIw3G,QAAU19C,EAAe+xB,EAAW2rB,QAAS,QACjDx3G,EAAIynG,eAAiB3tC,EAAe+xB,EAAW4b,eAAgB,GAC/DznG,EAAIo3G,SAAWt9C,EAAe+xB,EAAWurB,SAAU,SACnDp3G,EAAIkoE,UAAYA,EAChBloE,EAAI4tE,YAAc9T,EAAe+xB,EAAWje,YAAag3C,GACzD5kH,EAAIwnG,YAAY1tC,EAAe+xB,EAAWm5B,SAAU,KAChD1C,EAAUG,cAAe,CACzB,MAAMwC,EAAc,CAChB35C,OAAQi3C,EAAY72H,KAAKw5H,MAAQ,EACjC95C,WAAYygB,EAAWzgB,WACvBC,SAAUwgB,EAAWxgB,SACrBa,YAAahE,GAEXkmB,EAAUq2B,EAAUtrC,MAAM7jG,EAAGktI,EAAW,GAE9C13C,GAAgB9qE,EAAKilH,EAAa72B,EADlBztD,EAAIkkF,EACgCvC,EAAUI,iBAAmBF,EACrF,KAAO,CACH,MAAM2C,EAAUxkF,EAAIj1C,KAAKnV,KAAK+xH,EAAWia,GAAa,EAAG,GACnD6C,EAAWX,EAAUrrC,WAAW9jG,EAAGktI,GACnCxN,EAAevlC,GAAcoc,EAAWmpB,cAC9Ch1G,EAAI0rE,YACAj2F,OAAO8yB,OAAOysG,GAAcvtG,MAAM1qB,GAAU,IAANA,IACtC6xF,GAAmB5uE,EAAK,CACpB1qB,EAAG8vI,EACHzkF,EAAGwkF,EACH36D,EAAGg4D,EACHloG,EAAGioG,EACHj3C,OAAQ0pC,IAGZh1G,EAAIi+B,KAAKmnF,EAAUD,EAAS3C,EAAUD,GAE1CviH,EAAIisE,OACc,IAAd/D,GACAloE,EAAImsE,QAEZ,CACAnsE,EAAImqE,SACR,CA6CIk7C,CADcZ,EAAUnvI,EAAEA,GACLqrD,EAAGkrD,GACxBv2G,EDlrPO,EAACkqF,EAAOniC,EAAME,EAAOy7C,IAE7BxZ,KADOwZ,EAAM,OAAS,SACJz7C,EAAkB,WAAViiC,GAAsBniC,EAAOE,GAAS,EAAIF,ECgrP/DioF,CAAOh3C,EAAWh5F,EAAIktI,EAAWqC,EAAcv0B,EAAeh7G,EAAImoD,EAAQrjD,KAAKmjD,MAAO18C,EAAKm4F,KA7ClF,SAAS1jG,EAAGqrD,EAAGkrD,GAC5B3d,GAAWluE,EAAK6rF,EAAWxyF,KAAM/jB,EAAGqrD,EAAIgiF,EAAa,EAAGU,EAAW,CAC/Dj2C,cAAeye,EAAWjmE,OAC1B0oD,UAAWm2C,EAAUn2C,UAAUud,EAAWvd,YAElD,CAyCIK,CAAS81C,EAAUnvI,EAAEA,GAAIqrD,EAAGkrD,GACxByE,EACAw0B,EAAOxvI,GAAKmoD,EAAQmqC,OACjB,GAA+B,kBAApBikB,EAAWxyF,KAAmB,CAC5C,MAAM+qH,EAAiBf,EAAUj/F,WACjC0gG,EAAOnkF,GAAK0jF,GAA0Bx4B,EAAYu4B,GAAkBx8C,CACxE,MACIk9C,EAAOnkF,GAAKvc,CAChB,IAEJw1D,GAAqBx/F,KAAK4lB,IAAKnf,EAAKkkI,cACxC,CACH,SAAAjd,GACO,MAAMjnH,EAAOzG,KAAKkiB,QACZgnG,EAAYziH,EAAKia,MACjByqH,EAAY51C,GAAO2zB,EAAU99B,MAC7BggD,EAAe91C,GAAU4zB,EAAU17B,SACzC,IAAK07B,EAAU9xF,QACX,OAEJ,MAAMizG,EAAY1rC,GAAcl4F,EAAKm4F,IAAK5+F,KAAKijD,KAAMjjD,KAAKqjD,OACpDz9B,EAAM5lB,KAAK4lB,IACX0uB,EAAW40E,EAAU50E,SACrBm2F,EAAeU,EAAU56H,KAAO,EAChC86H,EAA6BD,EAAapoF,IAAMynF,EACtD,IAAIlkF,EACAtD,EAAOjjD,KAAKijD,KACZqxC,EAAWt0F,KAAKqjD,MACpB,GAAIrjD,KAAKk2G,eACL5hB,EAAWhjF,KAAKnV,OAAO6D,KAAK+oI,YAC5BxiF,EAAIvmD,KAAKgjD,IAAMqoF,EACfpoF,EAAOoiC,GAAe5+E,EAAK2+E,MAAOniC,EAAMjjD,KAAKmjD,MAAQmxC,OAClD,CACH,MAAM8I,EAAYp9F,KAAK8oI,YAAY33G,QAAO,CAAC0xE,EAAKtyF,IAAOe,KAAKnV,IAAI0mG,EAAKtyF,EAAK6yC,SAAS,GACnFmD,EAAI8kF,EAA6BhmD,GAAe5+E,EAAK2+E,MAAOplF,KAAKgjD,IAAKhjD,KAAKkjD,OAASk6C,EAAY32F,EAAKskG,OAAOvd,QAAUxtF,KAAKkpI,sBAC/H,CACA,MAAMhuI,EAAImqF,GAAe/wC,EAAU2O,EAAMA,EAAOqxC,GAChD1uE,EAAIsuE,UAAYm2C,EAAUn2C,UAAU/O,GAAmB7wC,IACvD1uB,EAAIuuE,aAAe,SACnBvuE,EAAI4tE,YAAc01B,EAAUlrF,MAC5BpY,EAAI6tE,UAAYy1B,EAAUlrF,MAC1BpY,EAAIwlE,KAAO+/C,EAAU5rG,OACrBu0D,GAAWluE,EAAKsjG,EAAUjqG,KAAM/jB,EAAGqrD,EAAG4kF,EAC1C,CACH,mBAAAjC,GACO,MAAMhgB,EAAYlpH,KAAKkiB,QAAQxB,MACzByqH,EAAY51C,GAAO2zB,EAAU99B,MAC7BggD,EAAe91C,GAAU4zB,EAAU17B,SACzC,OAAO07B,EAAU9xF,QAAU+zG,EAAUnhG,WAAaohG,EAAahoF,OAAS,CAC5E,CACH,gBAAAkoF,CAAiBpwI,EAAGqrD,GACb,IAAI5rD,EAAG4wI,EAAQC,EACf,GAAItnD,GAAWhpF,EAAG8E,KAAKijD,KAAMjjD,KAAKmjD,QAAU+gC,GAAW39B,EAAGvmD,KAAKgjD,IAAKhjD,KAAKkjD,QAErE,IADAsoF,EAAKxrI,KAAK0oI,eACN/tI,EAAI,EAAGA,EAAI6wI,EAAG3wI,SAAUF,EAExB,GADA4wI,EAASC,EAAG7wI,GACRupF,GAAWhpF,EAAGqwI,EAAOtoF,KAAMsoF,EAAOtoF,KAAOsoF,EAAOloF,QAAU6gC,GAAW39B,EAAGglF,EAAOvoF,IAAKuoF,EAAOvoF,IAAMuoF,EAAOnoF,QACxG,OAAOpjD,KAAK6oI,YAAYluI,GAIpC,OAAO,IACX,CACH,WAAA4jB,CAAY5Y,GACL,MAAMc,EAAOzG,KAAKkiB,QAClB,IAyDR,SAAoBphB,EAAM2F,GACtB,IAAc,cAAT3F,GAAiC,aAATA,KAAyB2F,EAAKulF,SAAWvlF,EAAKglI,SACvE,OAAO,EAEX,GAAIhlI,EAAKwlF,UAAqB,UAATnrF,GAA6B,YAATA,GACrC,OAAO,EAEX,OAAO,CACX,CAjEa4qI,CAAW/lI,EAAE7E,KAAM2F,GACpB,OAEJ,MAAMklI,EAAc3rI,KAAKsrI,iBAAiB3lI,EAAEzK,EAAGyK,EAAE4gD,GACjD,GAAe,cAAX5gD,EAAE7E,MAAmC,aAAX6E,EAAE7E,KAAqB,CACjD,MAAMupB,EAAWrqB,KAAK2oI,aAChBiD,GA3XK/3H,EA2X2B83H,EA3XjB,QAAbtrH,EA2XoBgK,IA3XO,OAANxW,GAAcwM,EAAEggE,eAAiBxsE,EAAEwsE,cAAgBhgE,EAAE9Q,QAAUsE,EAAEtE,OA4X1F8a,IAAauhH,GACbtmH,EAAS7e,EAAKglI,QAAS,CACnB9lI,EACA0kB,EACArqB,MACDA,MAEPA,KAAK2oI,aAAegD,EAChBA,IAAgBC,GAChBtmH,EAAS7e,EAAKulF,QAAS,CACnBrmF,EACAgmI,EACA3rI,MACDA,KAEX,MAAW2rI,GACPrmH,EAAS7e,EAAKwlF,QAAS,CACnBtmF,EACAgmI,EACA3rI,MACDA,MAhZI,IAACqgB,EAAGxM,CAkZnB,EAwBJ,SAASo2H,GAA0Bx4B,EAAYu4B,GAE3C,OAAOA,GADav4B,EAAWxyF,KAAOwyF,EAAWxyF,KAAKpkB,OAAS,EAEnE,CAUA,IAAIgxI,GAAgB,CAChB7+H,GAAI,SACP8+H,SAAUtD,GACP,KAAAhrH,CAAOssE,EAAOu4C,EAAOngH,GACjB,MAAMmvF,EAASvnB,EAAMunB,OAAS,IAAIm3B,GAAO,CACrC5iH,IAAKkkE,EAAMlkE,IACX1D,UACA4nE,UAEJ+xB,GAAQ99D,UAAU+rC,EAAOunB,EAAQnvF,GACjC25F,GAAQgC,OAAO/zB,EAAOunB,EAC1B,EACA,IAAAv5E,CAAMgyD,GACF+xB,GAAQkC,UAAUj0B,EAAOA,EAAMunB,eACxBvnB,EAAMunB,MACjB,EACA,YAAAmV,CAAc18B,EAAOu4C,EAAOngH,GACxB,MAAMmvF,EAASvnB,EAAMunB,OACrBwK,GAAQ99D,UAAU+rC,EAAOunB,EAAQnvF,GACjCmvF,EAAOnvF,QAAUA,CACrB,EACA,WAAA6lG,CAAaj+B,GACT,MAAMunB,EAASvnB,EAAMunB,OACrBA,EAAO23B,cACP33B,EAAO+4B,gBACX,EACA,UAAA2B,CAAYjiD,EAAOrnF,GACVA,EAAKq3H,QACNhwC,EAAMunB,OAAO9yF,YAAY9b,EAAK8L,MAEtC,EACAoa,SAAU,CACNyO,SAAS,EACTkd,SAAU,MACV8wC,MAAO,SACPi3B,UAAU,EACVr8B,SAAS,EACT5B,OAAQ,IACR,OAAA6N,CAAStmF,EAAG8rG,EAAYJ,GACpB,MAAM9hG,EAAQkiG,EAAWpxB,aACnB2rD,EAAK36B,EAAOvnB,MACdkiD,EAAG95B,iBAAiB3iG,IACpBy8H,EAAGx7F,KAAKjhC,GACRkiG,EAAWjmE,QAAS,IAEpBwgG,EAAGnwG,KAAKtsB,GACRkiG,EAAWjmE,QAAS,EAE5B,EACAwgD,QAAS,KACTy/C,QAAS,KACT1gC,OAAQ,CACJ/sE,MAAQpY,GAAMA,EAAIkkE,MAAM5nE,QAAQ8b,MAChCoqG,SAAU,GACV56C,QAAS,GACT,cAAA8jB,CAAgBxnB,GACZ,MAAMmB,EAAWnB,EAAMxjF,KAAK2kF,UACpB8f,QAAQ,cAAEs9B,EAAc,WAAEr3C,EAAW,UAAEkD,EAAU,MAAEl2D,EAAM,gBAAEiuG,EAAgB,aAAErR,IAAqB9wC,EAAMunB,OAAOnvF,QACvH,OAAO4nE,EAAMsb,yBAAyBrgG,KAAKwgF,IACvC,MAAMpuD,EAAQouD,EAAK8gB,WAAWhI,SAASgqC,EAAgB,OAAIjrI,GACrD00F,EAAcwD,GAAUn+D,EAAM26D,aACpC,MAAO,CACH7yE,KAAMgsE,EAAS1F,EAAKh2E,OAAOmqB,MAC3B+5D,UAAWt8D,EAAMiJ,gBACjBmxE,UAAWvzE,EACXwN,QAAS+5C,EAAK+H,QACd8vC,QAASjmG,EAAMmqE,eACfspC,SAAUzzG,EAAMoqE,WAChB8rB,eAAgBl2F,EAAMqqE,iBACtBw7B,SAAU7lG,EAAMsqE,gBAChB3T,WAAYgE,EAAYzuC,MAAQyuC,EAAY1uC,QAAU,EACtDowC,YAAar8D,EAAM6L,YACnBguD,WAAYA,GAAc75D,EAAM65D,WAChCC,SAAU95D,EAAM85D,SAChBiD,UAAWA,GAAa/8D,EAAM+8D,UAC9B0mC,aAAcqR,IAAoBrR,GAAgBzjG,EAAMyjG,cACxDv6C,aAAckF,EAAKh2E,MACtB,GACFvP,KACP,GAEJ0gB,MAAO,CACHsd,MAAQpY,GAAMA,EAAIkkE,MAAM5nE,QAAQ8b,MAChC5G,SAAS,EACTkd,SAAU,SACVr1B,KAAM,KAGd0rE,YAAa,CACToC,YAAcxtF,IAAQA,EAAKytF,WAAW,MACtC+d,OAAQ,CACJhe,YAAcxtF,IAAQ,CACd,iBACA,SACA,QACFsyB,SAAStyB,MAK3B,MAAM2sI,WAAc1pB,GACnB,WAAAp3F,CAAY7W,GACLo9F,QACA3xG,KAAK8pF,MAAQv1E,EAAOu1E,MACpB9pF,KAAKkiB,QAAU3N,EAAO2N,QACtBliB,KAAK4lB,IAAMrR,EAAOqR,IAClB5lB,KAAKmsI,cAAW/uI,EAChB4C,KAAKgjD,SAAM5lD,EACX4C,KAAKkjD,YAAS9lD,EACd4C,KAAKijD,UAAO7lD,EACZ4C,KAAKmjD,WAAQ/lD,EACb4C,KAAKqjD,WAAQjmD,EACb4C,KAAKojD,YAAShmD,EACd4C,KAAKs0C,cAAWl3C,EAChB4C,KAAKo+E,YAAShhF,EACd4C,KAAKq8G,cAAWj/G,CACpB,CACA,MAAA0mG,CAAOxP,EAAU8I,GACb,MAAM32F,EAAOzG,KAAKkiB,QAGlB,GAFAliB,KAAKijD,KAAO,EACZjjD,KAAKgjD,IAAM,GACNv8C,EAAK2wB,QAEN,YADAp3B,KAAKqjD,MAAQrjD,KAAKojD,OAASpjD,KAAKmjD,MAAQnjD,KAAKkjD,OAAS,GAG1DljD,KAAKqjD,MAAQrjD,KAAKmjD,MAAQmxC,EAC1Bt0F,KAAKojD,OAASpjD,KAAKkjD,OAASk6C,EAC5B,MAAMqvB,EAAYtgG,EAAQ1lB,EAAKwY,MAAQxY,EAAKwY,KAAKpkB,OAAS,EAC1DmF,KAAKmsI,SAAW72C,GAAU7uF,EAAK+mF,SAC/B,MAAM4+C,EAAW3f,EAAYl3B,GAAO9uF,EAAK2kF,MAAMphD,WAAahqC,KAAKmsI,SAAS/oF,OACtEpjD,KAAKk2G,eACLl2G,KAAKojD,OAASgpF,EAEdpsI,KAAKqjD,MAAQ+oF,CAErB,CACA,YAAAl2B,GACI,MAAMnzE,EAAM/iC,KAAKkiB,QAAQoyB,SACzB,MAAe,QAARvR,GAAyB,WAARA,CAC5B,CACA,SAAAspG,CAAUt/F,GACN,MAAM,IAAEiW,EAAI,KAAEC,EAAK,OAAEC,EAAO,MAAEC,EAAM,QAAEjhC,GAAaliB,KAC7ColF,EAAQljE,EAAQkjE,MACtB,IACIkP,EAAUq5B,EAAQC,EADlB38B,EAAW,EAkBf,OAhBIjxF,KAAKk2G,gBACLyX,EAAStoC,GAAeD,EAAOniC,EAAME,GACrCyqE,EAAS5qE,EAAMjW,EACfunD,EAAWnxC,EAAQF,IAEM,SAArB/gC,EAAQoyB,UACRq5E,EAAS1qE,EAAOlW,EAChB6gF,EAASvoC,GAAeD,EAAOliC,EAAQF,GACvCiuC,GAAiB,GAAN3P,KAEXqsC,EAASxqE,EAAQpW,EACjB6gF,EAASvoC,GAAeD,EAAOpiC,EAAKE,GACpC+tC,EAAgB,GAAL3P,IAEfgT,EAAWpxC,EAASF,GAEjB,CACH2qE,SACAC,SACAt5B,WACArD,WAER,CACA,IAAAqR,GACI,MAAM18E,EAAM5lB,KAAK4lB,IACXnf,EAAOzG,KAAKkiB,QAClB,IAAKzb,EAAK2wB,QACN,OAEJ,MAAMk1G,EAAW/2C,GAAO9uF,EAAK2kF,MAEvBr+C,EADau/F,EAAStiG,WACA,EAAIhqC,KAAKmsI,SAASnpF,KACxC,OAAE2qE,EAAO,OAAEC,EAAO,SAAEt5B,EAAS,SAAErD,GAAcjxF,KAAKqsI,UAAUt/F,GAClE+mD,GAAWluE,EAAKnf,EAAKwY,KAAM,EAAG,EAAGqtH,EAAU,CACvCtuG,MAAOv3B,EAAKu3B,MACZs2D,WACArD,WACAiD,UAAW/O,GAAmB1+E,EAAK2+E,OACnC+O,aAAc,SACdF,YAAa,CACT05B,EACAC,IAGZ,EAYJ,IAAI2e,GAAe,CACfv/H,GAAI,QACP8+H,SAAUI,GACP,KAAA1uH,CAAOssE,EAAOu4C,EAAOngH,IAbzB,SAAqB4nE,EAAOo/B,GACxB,MAAMxoG,EAAQ,IAAIwrH,GAAM,CACpBtmH,IAAKkkE,EAAMlkE,IACX1D,QAASgnG,EACTp/B,UAEJ+xB,GAAQ99D,UAAU+rC,EAAOppE,EAAOwoG,GAChCrN,GAAQgC,OAAO/zB,EAAOppE,GACtBopE,EAAM0iD,WAAa9rH,CACvB,CAKQ+rH,CAAY3iD,EAAO5nE,EACvB,EACA,IAAA4V,CAAMgyD,GACF,MAAM0iD,EAAa1iD,EAAM0iD,WACzB3wB,GAAQkC,UAAUj0B,EAAO0iD,UAClB1iD,EAAM0iD,UACjB,EACA,YAAAhmB,CAAc18B,EAAOu4C,EAAOngH,GACxB,MAAMxB,EAAQopE,EAAM0iD,WACpB3wB,GAAQ99D,UAAU+rC,EAAOppE,EAAOwB,GAChCxB,EAAMwB,QAAUA,CACpB,EACAyG,SAAU,CACNy8D,MAAO,SACPhuD,SAAS,EACTg0D,KAAM,CACFhN,OAAQ,QAEZi+B,UAAU,EACV7uB,QAAS,GACTl5C,SAAU,MACVr1B,KAAM,GACNm/D,OAAQ,KAEZqwC,cAAe,CACXzwF,MAAO,SAEX2sD,YAAa,CACToC,aAAa,EACbE,YAAY,IAIpB,MAAM,GAAM,IAAIy/C,QAChB,IAAIC,GAAkB,CAClB3/H,GAAI,WACJ,KAAAwQ,CAAOssE,EAAOu4C,EAAOngH,GACjB,MAAMxB,EAAQ,IAAIwrH,GAAM,CACpBtmH,IAAKkkE,EAAMlkE,IACX1D,UACA4nE,UAEJ+xB,GAAQ99D,UAAU+rC,EAAOppE,EAAOwB,GAChC25F,GAAQgC,OAAO/zB,EAAOppE,GACtB,GAAIkI,IAAIkhE,EAAOppE,EACnB,EACA,IAAAoX,CAAMgyD,GACF+xB,GAAQkC,UAAUj0B,EAAO,GAAI3/E,IAAI2/E,IACjC,GAAI8N,OAAO9N,EACf,EACA,YAAA08B,CAAc18B,EAAOu4C,EAAOngH,GACxB,MAAMxB,EAAQ,GAAIvW,IAAI2/E,GACtB+xB,GAAQ99D,UAAU+rC,EAAOppE,EAAOwB,GAChCxB,EAAMwB,QAAUA,CACpB,EACAyG,SAAU,CACNy8D,MAAO,SACPhuD,SAAS,EACTg0D,KAAM,CACFhN,OAAQ,UAEZi+B,UAAU,EACV7uB,QAAS,EACTl5C,SAAU,MACVr1B,KAAM,GACNm/D,OAAQ,MAEZqwC,cAAe,CACXzwF,MAAO,SAEX2sD,YAAa,CACToC,aAAa,EACbE,YAAY,IAIpB,MAAM2/C,GAAc,CACnB,OAAAC,CAAS7zE,GACF,IAAKA,EAAMn+D,OACP,OAAO,EAEX,IAAIF,EAAGC,EACHM,EAAI,EACJqrD,EAAI,EACJ//B,EAAQ,EACZ,IAAI7rB,EAAI,EAAGC,EAAMo+D,EAAMn+D,OAAQF,EAAIC,IAAOD,EAAE,CACxC,MAAMqkB,EAAKg6C,EAAMr+D,GAAGi1B,QACpB,GAAI5Q,GAAMA,EAAG0jG,WAAY,CACrB,MAAM3/E,EAAM/jB,EAAGyjG,kBACfvnH,GAAK6nC,EAAI7nC,EACTqrD,GAAKxjB,EAAIwjB,IACP//B,CACN,CACJ,CACA,MAAO,CACHtrB,EAAGA,EAAIsrB,EACP+/B,EAAGA,EAAI//B,EAEf,EACH,OAAAmpC,CAASqJ,EAAO8zE,GACT,IAAK9zE,EAAMn+D,OACP,OAAO,EAEX,IAGIF,EAAGC,EAAKmyI,EAHR7xI,EAAI4xI,EAAc5xI,EAClBqrD,EAAIumF,EAAcvmF,EAClBu0D,EAAcx3G,OAAOo+E,kBAEzB,IAAI/mF,EAAI,EAAGC,EAAMo+D,EAAMn+D,OAAQF,EAAIC,IAAOD,EAAE,CACxC,MAAMqkB,EAAKg6C,EAAMr+D,GAAGi1B,QACpB,GAAI5Q,GAAMA,EAAG0jG,WAAY,CACrB,MACM/tG,EAAI2uE,GAAsBwpD,EADjB9tH,EAAG+7F,kBAEdpmG,EAAImmG,IACJA,EAAcnmG,EACdo4H,EAAiB/tH,EAEzB,CACJ,CACA,GAAI+tH,EAAgB,CAChB,MAAMC,EAAKD,EAAetqB,kBAC1BvnH,EAAI8xI,EAAG9xI,EACPqrD,EAAIymF,EAAGzmF,CACX,CACA,MAAO,CACHrrD,IACAqrD,IAER,GAEJ,SAAS0mF,GAAa77H,EAAM87H,GAQxB,OAPIA,IACI/gH,EAAQ+gH,GACRxiI,MAAMpP,UAAUU,KAAK+D,MAAMqR,EAAM87H,GAEjC97H,EAAKpV,KAAKkxI,IAGX97H,CACX,CACC,SAAS+7H,GAAcrrI,GACpB,OAAoB,kBAARA,GAAoBA,aAAeyB,SAAWzB,EAAI0C,QAAQ,OAAS,EACpE1C,EAAI8C,MAAM,MAEd9C,CACX,CACC,SAASsrI,GAAkBtjD,EAAO/uF,GAC/B,MAAM,QAAE60B,EAAQ,aAAEywD,EAAa,MAAE9wE,GAAWxU,EACtCsrG,EAAavc,EAAM2f,eAAeppB,GAAcgmB,YAChD,MAAE3sE,EAAM,MAAEr9B,GAAWgqG,EAAW8F,iBAAiB58F,GACvD,MAAO,CACHu6E,QACApwD,QACAkG,OAAQymE,EAAW+E,UAAU77F,GAC7Bq9F,IAAK9iB,EAAMxjF,KAAK2kF,SAAS5K,GAAc/5E,KAAKiJ,GAC5C89H,eAAgBhxI,EAChBqsG,QAASrC,EAAWsC,aACpBgE,UAAWp9F,EACX8wE,eACAzwD,UAER,CACC,SAAS09G,GAAeC,EAASrrH,GAC9B,MAAM0D,EAAM2nH,EAAQzjD,MAAMlkE,KACpB,KAAE/O,EAAK,OAAE22H,EAAO,MAAE9sH,GAAW6sH,GAC7B,SAAEnF,EAAS,UAAED,GAAejmH,EAC5BurH,EAAWl4C,GAAOrzE,EAAQurH,UAC1BtC,EAAY51C,GAAOrzE,EAAQipH,WAC3BuC,EAAan4C,GAAOrzE,EAAQwrH,YAC5BC,EAAiBjtH,EAAM7lB,OACvB+yI,EAAkBJ,EAAO3yI,OACzBgzI,EAAoBh3H,EAAKhc,OACzB2yF,EAAU8H,GAAUpzE,EAAQsrE,SAClC,IAAIpqC,EAASoqC,EAAQpqC,OACjBC,EAAQ,EACRyqF,EAAqBj3H,EAAKsa,QAAO,CAAC3K,EAAOunH,IAAWvnH,EAAQunH,EAASC,OAAOnzI,OAASkzI,EAAS/nI,MAAMnL,OAASkzI,EAAS11E,MAAMx9D,QAAQ,GAKxI,GAJAizI,GAAsBP,EAAQU,WAAWpzI,OAAS0yI,EAAQW,UAAUrzI,OAChE8yI,IACAvqF,GAAUuqF,EAAiBxC,EAAUnhG,YAAc2jG,EAAiB,GAAKzrH,EAAQisH,aAAejsH,EAAQksH,mBAExGN,EAAoB,CAEpB1qF,GAAUyqF,GADa3rH,EAAQmsH,cAAgB/8H,KAAKnV,IAAIgsI,EAAWsF,EAASzjG,YAAcyjG,EAASzjG,aACnD8jG,EAAqBD,GAAqBJ,EAASzjG,YAAc8jG,EAAqB,GAAK5rH,EAAQosH,WACvJ,CACIV,IACAxqF,GAAUlhC,EAAQqsH,gBAAkBX,EAAkBF,EAAW1jG,YAAc4jG,EAAkB,GAAK1rH,EAAQssH,eAElH,IAAIC,EAAe,EACnB,MAAMC,EAAe,SAAS5pI,GAC1Bu+C,EAAQ/xC,KAAKnV,IAAIknD,EAAOz9B,EAAI4pE,YAAY1qF,GAAMu+C,MAAQorF,EAC1D,EAiBA,OAhBA7oH,EAAIgF,OACJhF,EAAIwlE,KAAO+/C,EAAU5rG,OACrB5O,EAAK48G,EAAQ7sH,MAAOguH,GACpB9oH,EAAIwlE,KAAOqiD,EAASluG,OACpB5O,EAAK48G,EAAQU,WAAWjzI,OAAOuyI,EAAQW,WAAYQ,GACnDD,EAAevsH,EAAQmsH,cAAgBjG,EAAW,EAAIlmH,EAAQy6F,WAAa,EAC3EhsF,EAAK9Z,GAAOk3H,IACRp9G,EAAKo9G,EAASC,OAAQU,GACtB/9G,EAAKo9G,EAAS/nI,MAAO0oI,GACrB/9G,EAAKo9G,EAAS11E,MAAOq2E,EAAa,IAEtCD,EAAe,EACf7oH,EAAIwlE,KAAOsiD,EAAWnuG,OACtB5O,EAAK48G,EAAQC,OAAQkB,GACrB9oH,EAAImqE,UACJ1sC,GAASmqC,EAAQnqC,MACV,CACHA,QACAD,SAER,CAoBA,SAASurF,GAAgB7kD,EAAO5nE,EAAS3R,EAAMq+H,GAC3C,MAAM,EAAE1zI,EAAE,MAAEmoD,GAAW9yC,GACf8yC,MAAOwrF,EAAariC,WAAW,KAAEvpD,EAAK,MAAEE,IAAc2mC,EAC9D,IAAIglD,EAAS,SAWb,MAVe,WAAXF,EACAE,EAAS5zI,IAAM+nD,EAAOE,GAAS,EAAI,OAAS,QACrCjoD,GAAKmoD,EAAQ,EACpByrF,EAAS,OACF5zI,GAAK2zI,EAAaxrF,EAAQ,IACjCyrF,EAAS,SAnBjB,SAA6BA,EAAQhlD,EAAO5nE,EAAS3R,GACjD,MAAM,EAAErV,EAAE,MAAEmoD,GAAW9yC,EACjBw+H,EAAQ7sH,EAAQ8sH,UAAY9sH,EAAQ+sH,aAC1C,MAAe,SAAXH,GAAqB5zI,EAAImoD,EAAQ0rF,EAAQjlD,EAAMzmC,OAGpC,UAAXyrF,GAAsB5zI,EAAImoD,EAAQ0rF,EAAQ,QAA9C,CAGJ,CAYQG,CAAoBJ,EAAQhlD,EAAO5nE,EAAS3R,KAC5Cu+H,EAAS,UAENA,CACX,CACC,SAASK,GAAmBrlD,EAAO5nE,EAAS3R,GACzC,MAAMq+H,EAASr+H,EAAKq+H,QAAU1sH,EAAQ0sH,QApC1C,SAAyB9kD,EAAOv5E,GAC5B,MAAM,EAAEg2C,EAAE,OAAEnD,GAAY7yC,EACxB,OAAIg2C,EAAInD,EAAS,EACN,MACAmD,EAAIujC,EAAM1mC,OAASA,EAAS,EAC5B,SAEJ,QACX,CA4BoDgsF,CAAgBtlD,EAAOv5E,GACvE,MAAO,CACHu+H,OAAQv+H,EAAKu+H,QAAU5sH,EAAQ4sH,QAAUH,GAAgB7kD,EAAO5nE,EAAS3R,EAAMq+H,GAC/EA,SAER,CAqBC,SAASS,GAAmBntH,EAAS3R,EAAM++H,EAAWxlD,GACnD,MAAM,UAAEklD,EAAU,aAAEC,EAAa,aAAEp+C,GAAkB3uE,GAC/C,OAAE4sH,EAAO,OAAEF,GAAYU,EACvBC,EAAiBP,EAAYC,GAC7B,QAAEx6C,EAAQ,SAAEG,EAAS,WAAEF,EAAW,YAAEC,GAAiBU,GAAcxE,GACzE,IAAI31F,EAzBR,SAAgBqV,EAAMu+H,GAClB,IAAI,EAAE5zI,EAAE,MAAEmoD,GAAW9yC,EAMrB,MALe,UAAXu+H,EACA5zI,GAAKmoD,EACa,WAAXyrF,IACP5zI,GAAKmoD,EAAQ,GAEVnoD,CACX,CAiBYs0I,CAAOj/H,EAAMu+H,GACrB,MAAMvoF,EAjBV,SAAgBh2C,EAAMq+H,EAAQW,GAC1B,IAAI,EAAEhpF,EAAE,OAAEnD,GAAY7yC,EAQtB,MAPe,QAAXq+H,EACAroF,GAAKgpF,EAELhpF,GADkB,WAAXqoF,EACFxrF,EAASmsF,EAETnsF,EAAS,EAEXmD,CACX,CAOckpF,CAAOl/H,EAAMq+H,EAAQW,GAY/B,MAXe,WAAXX,EACe,SAAXE,EACA5zI,GAAKq0I,EACa,UAAXT,IACP5zI,GAAKq0I,GAES,SAAXT,EACP5zI,GAAKoW,KAAKnV,IAAIs4F,EAASC,GAAcs6C,EACnB,UAAXF,IACP5zI,GAAKoW,KAAKnV,IAAIy4F,EAAUD,GAAeq6C,GAEpC,CACH9zI,EAAG+oF,GAAY/oF,EAAG,EAAG4uF,EAAMzmC,MAAQ9yC,EAAK8yC,OACxCkD,EAAG09B,GAAY19B,EAAG,EAAGujC,EAAM1mC,OAAS7yC,EAAK6yC,QAEjD,CACA,SAASssF,GAAYnC,EAASnoD,EAAOljE,GACjC,MAAMsrE,EAAU8H,GAAUpzE,EAAQsrE,SAClC,MAAiB,WAAVpI,EAAqBmoD,EAAQryI,EAAIqyI,EAAQlqF,MAAQ,EAAc,UAAV+hC,EAAoBmoD,EAAQryI,EAAIqyI,EAAQlqF,MAAQmqC,EAAQrqC,MAAQoqF,EAAQryI,EAAIsyF,EAAQvqC,IACpJ,CACC,SAAS0sF,GAAwBrqH,GAC9B,OAAO2nH,GAAa,GAAIE,GAAc7nH,GAC1C,CAQA,SAASsqH,GAAkBlgI,EAAWjR,GAClC,MAAMm+B,EAAWn+B,GAAWA,EAAQiqG,SAAWjqG,EAAQiqG,QAAQ6kC,SAAW9uI,EAAQiqG,QAAQ6kC,QAAQ79H,UAClG,OAAOktB,EAAWltB,EAAUktB,SAASA,GAAYltB,CACrD,CACA,MAAMmgI,GAAmB,CACrBC,YAAap9H,EACb,KAAAgO,CAAOqvH,GACH,GAAIA,EAAal1I,OAAS,EAAG,CACzB,MAAME,EAAOg1I,EAAa,GACpBhlC,EAAShwG,EAAK+uF,MAAMxjF,KAAKykG,OACzBilC,EAAajlC,EAASA,EAAOlwG,OAAS,EAC5C,GAAImF,MAAQA,KAAKkiB,SAAiC,YAAtBliB,KAAKkiB,QAAQ0pE,KACrC,OAAO7wF,EAAK2tG,QAAQhvE,OAAS,GAC1B,GAAI3+B,EAAK2+B,MACZ,OAAO3+B,EAAK2+B,MACT,GAAIs2G,EAAa,GAAKj1I,EAAK4xG,UAAYqjC,EAC1C,OAAOjlC,EAAOhwG,EAAK4xG,UAE3B,CACA,MAAO,EACX,EACAsjC,WAAYv9H,EACZu7H,WAAYv7H,EACZw9H,YAAax9H,EACb,KAAAgnB,CAAOy2G,GACH,GAAInwI,MAAQA,KAAKkiB,SAAiC,YAAtBliB,KAAKkiB,QAAQ0pE,KACrC,OAAOukD,EAAYz2G,MAAQ,KAAOy2G,EAAY9C,gBAAkB8C,EAAY9C,eAEhF,IAAI3zG,EAAQy2G,EAAYznC,QAAQhvE,OAAS,GACrCA,IACAA,GAAS,MAEb,MAAMr9B,EAAQ8zI,EAAY9C,eAI1B,OAHK9tD,EAAcljF,KACfq9B,GAASr9B,GAENq9B,CACX,EACA,UAAA02G,CAAYD,GACR,MACMjuH,EADOiuH,EAAYrmD,MAAM2f,eAAe0mC,EAAY9vD,cACrCgmB,WAAWhI,SAAS8xC,EAAYxjC,WACrD,MAAO,CACH3pE,YAAa9gB,EAAQ8gB,YACrB5C,gBAAiBle,EAAQke,gBACzB0xD,YAAa5vE,EAAQ4vE,YACrByP,WAAYr/E,EAAQq/E,WACpBC,iBAAkBt/E,EAAQs/E,iBAC1Bo5B,aAAc,EAEtB,EACA,cAAAyV,GACI,OAAOrwI,KAAKkiB,QAAQouH,SACxB,EACA,eAAAC,CAAiBJ,GACb,MACMjuH,EADOiuH,EAAYrmD,MAAM2f,eAAe0mC,EAAY9vD,cACrCgmB,WAAWhI,SAAS8xC,EAAYxjC,WACrD,MAAO,CACH3b,WAAY9uE,EAAQ8uE,WACpBC,SAAU/uE,EAAQ+uE,SAE1B,EACAu/C,WAAY99H,EACZw7H,UAAWx7H,EACX+9H,aAAc/9H,EACd86H,OAAQ96H,EACRg+H,YAAah+H,GAEhB,SAASi+H,GAA2BjhI,EAAWnQ,EAAMqmB,EAAK7J,GACvD,MAAMjgB,EAAS4T,EAAUnQ,GAAM/D,KAAKoqB,EAAK7J,GACzC,MAAsB,qBAAXjgB,EACA+zI,GAAiBtwI,GAAM/D,KAAKoqB,EAAK7J,GAErCjgB,CACX,CACA,MAAM80I,WAAgBpuB,GACrBjb,mBAAqBqlC,GAClB,WAAAxhH,CAAY7W,GACRo9F,QACA3xG,KAAKiqC,QAAU,EACfjqC,KAAKuiG,QAAU,GACfviG,KAAK6wI,oBAAiBzzI,EACtB4C,KAAK8wI,WAAQ1zI,EACb4C,KAAK+wI,uBAAoB3zI,EACzB4C,KAAKgxI,cAAgB,GACrBhxI,KAAK0kG,iBAActnG,EACnB4C,KAAKioG,cAAW7qG,EAChB4C,KAAK8pF,MAAQv1E,EAAOu1E,MACpB9pF,KAAKkiB,QAAU3N,EAAO2N,QACtBliB,KAAKixI,gBAAa7zI,EAClB4C,KAAK0gB,WAAQtjB,EACb4C,KAAKiuI,gBAAa7wI,EAClB4C,KAAK6W,UAAOzZ,EACZ4C,KAAKkuI,eAAY9wI,EACjB4C,KAAKwtI,YAASpwI,EACd4C,KAAK8uI,YAAS1xI,EACd4C,KAAK4uI,YAASxxI,EACd4C,KAAK9E,OAAIkC,EACT4C,KAAKumD,OAAInpD,EACT4C,KAAKojD,YAAShmD,EACd4C,KAAKqjD,WAAQjmD,EACb4C,KAAKkxI,YAAS9zI,EACd4C,KAAKmxI,YAAS/zI,EACd4C,KAAKoxI,iBAAch0I,EACnB4C,KAAKqxI,sBAAmBj0I,EACxB4C,KAAKsxI,qBAAkBl0I,CAC3B,CACA,UAAA0rB,CAAW5G,GACPliB,KAAKkiB,QAAUA,EACfliB,KAAK+wI,uBAAoB3zI,EACzB4C,KAAKioG,cAAW7qG,CACpB,CACH,kBAAAiwG,GACO,MAAMjG,EAASpnG,KAAK+wI,kBACpB,GAAI3pC,EACA,OAAOA,EAEX,MAAMtd,EAAQ9pF,KAAK8pF,MACb5nE,EAAUliB,KAAKkiB,QAAQ/N,WAAWnU,KAAKkU,cACvCzN,EAAOyb,EAAQohG,SAAWx5B,EAAM5nE,QAAQ+kC,WAAa/kC,EAAQmrE,WAC7DA,EAAa,IAAI6W,GAAWlkG,KAAK8pF,MAAOrjF,GAI9C,OAHIA,EAAK2vF,aACLp2F,KAAK+wI,kBAAoB11I,OAAO+xG,OAAO/f,IAEpCA,CACX,CACH,UAAAn5E,GACO,OAAOlU,KAAKioG,WAAajoG,KAAKioG,UArIR1vE,EAqIwCv4B,KAAK8pF,MAAM51E,aArI3Cq5H,EAqIyDvtI,KArIhD+vI,EAqIsD/vI,KAAKgxI,cApI/Ft7C,GAAcn9D,EAAQ,CACzBg1G,UACAwC,eACAjvI,KAAM,cAJd,IAA8By3B,EAAQg1G,EAASwC,CAsI3C,CACA,QAAAwB,CAAS9yI,EAASyjB,GACd,MAAM,UAAExS,GAAewS,EACjB4tH,EAAca,GAA2BjhI,EAAW,cAAe1P,KAAMvB,GACzEiiB,EAAQiwH,GAA2BjhI,EAAW,QAAS1P,KAAMvB,GAC7DwxI,EAAaU,GAA2BjhI,EAAW,aAAc1P,KAAMvB,GAC7E,IAAIuH,EAAQ,GAIZ,OAHAA,EAAQinI,GAAajnI,EAAOmnI,GAAc2C,IAC1C9pI,EAAQinI,GAAajnI,EAAOmnI,GAAczsH,IAC1C1a,EAAQinI,GAAajnI,EAAOmnI,GAAc8C,IACnCjqI,CACX,CACA,aAAAwrI,CAAczB,EAAc7tH,GACxB,OAAOytH,GAAwBgB,GAA2BzuH,EAAQxS,UAAW,aAAc1P,KAAM+vI,GACrG,CACA,OAAA0B,CAAQ1B,EAAc7tH,GAClB,MAAM,UAAExS,GAAewS,EACjBwvH,EAAY,GAalB,OAZA/gH,EAAKo/G,GAAetxI,IAChB,MAAMsvI,EAAW,CACbC,OAAQ,GACRhoI,MAAO,GACPqyD,MAAO,IAELs5E,EAAS/B,GAAkBlgI,EAAWjR,GAC5CwuI,GAAac,EAASC,OAAQb,GAAcwD,GAA2BgB,EAAQ,cAAe3xI,KAAMvB,KACpGwuI,GAAac,EAAS/nI,MAAO2qI,GAA2BgB,EAAQ,QAAS3xI,KAAMvB,IAC/EwuI,GAAac,EAAS11E,MAAO80E,GAAcwD,GAA2BgB,EAAQ,aAAc3xI,KAAMvB,KAClGizI,EAAU11I,KAAK+xI,EAAS,IAErB2D,CACX,CACA,YAAAE,CAAa7B,EAAc7tH,GACvB,OAAOytH,GAAwBgB,GAA2BzuH,EAAQxS,UAAW,YAAa1P,KAAM+vI,GACpG,CACA,SAAA8B,CAAU9B,EAAc7tH,GACpB,MAAM,UAAExS,GAAewS,EACjBuuH,EAAeE,GAA2BjhI,EAAW,eAAgB1P,KAAM+vI,GAC3EvC,EAASmD,GAA2BjhI,EAAW,SAAU1P,KAAM+vI,GAC/DW,EAAcC,GAA2BjhI,EAAW,cAAe1P,KAAM+vI,GAC/E,IAAI/pI,EAAQ,GAIZ,OAHAA,EAAQinI,GAAajnI,EAAOmnI,GAAcsD,IAC1CzqI,EAAQinI,GAAajnI,EAAOmnI,GAAcK,IAC1CxnI,EAAQinI,GAAajnI,EAAOmnI,GAAcuD,IACnC1qI,CACX,CACH,YAAA8rI,CAAa5vH,GACN,MAAM0pC,EAAS5rD,KAAKuiG,QACdj8F,EAAOtG,KAAK8pF,MAAMxjF,KAClB8qI,EAAc,GACdC,EAAmB,GACnBC,EAAkB,GACxB,IACI32I,EAAGC,EADHm1I,EAAe,GAEnB,IAAIp1I,EAAI,EAAGC,EAAMgxD,EAAO/wD,OAAQF,EAAIC,IAAOD,EACvCo1I,EAAa/zI,KAAKoxI,GAAkBptI,KAAK8pF,MAAOl+B,EAAOjxD,KAkB3D,OAhBIunB,EAAQrd,SACRkrI,EAAeA,EAAalrI,QAAO,CAAC+qB,EAASrgB,EAAOuc,IAAQ5J,EAAQrd,OAAO+qB,EAASrgB,EAAOuc,EAAOxlB,MAElG4b,EAAQ6vH,WACRhC,EAAeA,EAAaljH,MAAK,CAACxM,EAAGxM,IAAIqO,EAAQ6vH,SAAS1xH,EAAGxM,EAAGvN,MAEpEqqB,EAAKo/G,GAAetxI,IAChB,MAAMkzI,EAAS/B,GAAkB1tH,EAAQxS,UAAWjR,GACpD2yI,EAAYp1I,KAAK20I,GAA2BgB,EAAQ,aAAc3xI,KAAMvB,IACxE4yI,EAAiBr1I,KAAK20I,GAA2BgB,EAAQ,kBAAmB3xI,KAAMvB,IAClF6yI,EAAgBt1I,KAAK20I,GAA2BgB,EAAQ,iBAAkB3xI,KAAMvB,GAAS,IAE7FuB,KAAKoxI,YAAcA,EACnBpxI,KAAKqxI,iBAAmBA,EACxBrxI,KAAKsxI,gBAAkBA,EACvBtxI,KAAKixI,WAAalB,EACXA,CACX,CACA,MAAAjsC,CAAOj7E,EAASixG,GACZ,MAAM53G,EAAUliB,KAAKkiB,QAAQ/N,WAAWnU,KAAKkU,cACvC03C,EAAS5rD,KAAKuiG,QACpB,IAAI/iD,EACAuwF,EAAe,GACnB,GAAKnkF,EAAO/wD,OAML,CACH,MAAMy5C,EAAWs4F,GAAY1qH,EAAQoyB,UAAU94C,KAAKwE,KAAM4rD,EAAQ5rD,KAAK6wI,gBACvEd,EAAe/vI,KAAK8xI,aAAa5vH,GACjCliB,KAAK0gB,MAAQ1gB,KAAKuxI,SAASxB,EAAc7tH,GACzCliB,KAAKiuI,WAAajuI,KAAKwxI,cAAczB,EAAc7tH,GACnDliB,KAAK6W,KAAO7W,KAAKyxI,QAAQ1B,EAAc7tH,GACvCliB,KAAKkuI,UAAYluI,KAAK4xI,aAAa7B,EAAc7tH,GACjDliB,KAAKwtI,OAASxtI,KAAK6xI,UAAU9B,EAAc7tH,GAC3C,MAAM3R,EAAOvQ,KAAK8wI,MAAQxD,GAAettI,KAAMkiB,GACzC8vH,EAAkB32I,OAAOyE,OAAO,CAAC,EAAGw0C,EAAU/jC,GAC9C++H,EAAYH,GAAmBnvI,KAAK8pF,MAAO5nE,EAAS8vH,GACpDC,EAAkB5C,GAAmBntH,EAAS8vH,EAAiB1C,EAAWtvI,KAAK8pF,OACrF9pF,KAAK8uI,OAASQ,EAAUR,OACxB9uI,KAAK4uI,OAASU,EAAUV,OACxBpvF,EAAa,CACTvV,QAAS,EACT/uC,EAAG+2I,EAAgB/2I,EACnBqrD,EAAG0rF,EAAgB1rF,EACnBlD,MAAO9yC,EAAK8yC,MACZD,OAAQ7yC,EAAK6yC,OACb8tF,OAAQ58F,EAASp5C,EACjBi2I,OAAQ78F,EAASiS,EAEzB,MA5ByB,IAAjBvmD,KAAKiqC,UACLuV,EAAa,CACTvV,QAAS,IA2BrBjqC,KAAKgxI,cAAgBjB,EACrB/vI,KAAKioG,cAAW7qG,EACZoiD,GACAx/C,KAAKqtG,qBAAqBvJ,OAAO9jG,KAAMw/C,GAEvC32B,GAAW3G,EAAQgwH,UACnBhwH,EAAQgwH,SAAS12I,KAAKwE,KAAM,CACxB8pF,MAAO9pF,KAAK8pF,MACZyjD,QAASvtI,KACT85H,UAGZ,CACA,SAAAqY,CAAUC,EAAcxsH,EAAKrV,EAAM2R,GAC/B,MAAMmwH,EAAgBryI,KAAKsyI,iBAAiBF,EAAc7hI,EAAM2R,GAChE0D,EAAI+rE,OAAO0gD,EAAczmB,GAAIymB,EAAcxmB,IAC3CjmG,EAAI+rE,OAAO0gD,EAAcvmB,GAAIumB,EAActmB,IAC3CnmG,EAAI+rE,OAAO0gD,EAAcE,GAAIF,EAAcG,GAC/C,CACA,gBAAAF,CAAiBF,EAAc7hI,EAAM2R,GACjC,MAAM,OAAE4sH,EAAO,OAAEF,GAAY5uI,MACvB,UAAEgvI,EAAU,aAAEn+C,GAAkB3uE,GAChC,QAAEuyE,EAAQ,SAAEG,EAAS,WAAEF,EAAW,YAAEC,GAAiBU,GAAcxE,IACjE31F,EAAGu3I,EAAMlsF,EAAGmsF,GAASN,GACvB,MAAE/uF,EAAM,OAAED,GAAY7yC,EAC5B,IAAIq7G,EAAIE,EAAIymB,EAAI1mB,EAAIE,EAAIymB,EAoCxB,MAnCe,WAAX5D,GACA7iB,EAAK2mB,EAAMtvF,EAAS,EACL,SAAX0rF,GACAljB,EAAK6mB,EACL3mB,EAAKF,EAAKojB,EACVnjB,EAAKE,EAAKijB,EACVwD,EAAKzmB,EAAKijB,IAEVpjB,EAAK6mB,EAAMpvF,EACXyoE,EAAKF,EAAKojB,EACVnjB,EAAKE,EAAKijB,EACVwD,EAAKzmB,EAAKijB,GAEduD,EAAK3mB,IAGDE,EADW,SAAXgjB,EACK2D,EAAMnhI,KAAKnV,IAAIs4F,EAASC,GAAcs6C,EACzB,UAAXF,EACF2D,EAAMpvF,EAAQ/xC,KAAKnV,IAAIy4F,EAAUD,GAAeq6C,EAEhDhvI,KAAKkxI,OAEC,QAAXtC,GACA/iB,EAAK6mB,EACL3mB,EAAKF,EAAKmjB,EACVpjB,EAAKE,EAAKkjB,EACVuD,EAAKzmB,EAAKkjB,IAEVnjB,EAAK6mB,EAAMtvF,EACX2oE,EAAKF,EAAKmjB,EACVpjB,EAAKE,EAAKkjB,EACVuD,EAAKzmB,EAAKkjB,GAEdwD,EAAK3mB,GAEF,CACHD,KACAE,KACAymB,KACA1mB,KACAE,KACAymB,KAER,CACA,SAAA9kB,CAAU1yB,EAAIp1E,EAAK1D,GACf,MAAMxB,EAAQ1gB,KAAK0gB,MACb7lB,EAAS6lB,EAAM7lB,OACrB,IAAIswI,EAAWgD,EAAcxzI,EAC7B,GAAIE,EAAQ,CACR,MAAMwvI,EAAY1rC,GAAcz8E,EAAQ08E,IAAK5+F,KAAK9E,EAAG8E,KAAKqjD,OAQ1D,IAPA23C,EAAG9/F,EAAIw0I,GAAY1vI,KAAMkiB,EAAQ6iG,WAAY7iG,GAC7C0D,EAAIsuE,UAAYm2C,EAAUn2C,UAAUhyE,EAAQ6iG,YAC5Cn/F,EAAIuuE,aAAe,SACnBg3C,EAAY51C,GAAOrzE,EAAQipH,WAC3BgD,EAAejsH,EAAQisH,aACvBvoH,EAAI6tE,UAAYvxE,EAAQywH,WACxB/sH,EAAIwlE,KAAO+/C,EAAU5rG,OACjB5kC,EAAI,EAAGA,EAAIE,IAAUF,EACrBirB,EAAI2uE,SAAS7zE,EAAM/lB,GAAI0vI,EAAUnvI,EAAE8/F,EAAG9/F,GAAI8/F,EAAGz0C,EAAI4kF,EAAUnhG,WAAa,GACxEgxD,EAAGz0C,GAAK4kF,EAAUnhG,WAAamkG,EAC3BxzI,EAAI,IAAME,IACVmgG,EAAGz0C,GAAKrkC,EAAQksH,kBAAoBD,EAGhD,CACJ,CACH,aAAAyE,CAAchtH,EAAKo1E,EAAIrgG,EAAG0vI,EAAWnoH,GAC9B,MAAMkuH,EAAapwI,KAAKoxI,YAAYz2I,GAC9B41I,EAAkBvwI,KAAKqxI,iBAAiB12I,IACxC,UAAEwtI,EAAU,SAAEC,GAAclmH,EAC5BurH,EAAWl4C,GAAOrzE,EAAQurH,UAC1BoF,EAASnD,GAAY1vI,KAAM,OAAQkiB,GACnC4wH,EAAYzI,EAAUnvI,EAAE23I,GACxBE,EAAU5K,EAAYsF,EAASzjG,YAAcyjG,EAASzjG,WAAam+F,GAAa,EAAI,EACpF6K,EAASh4C,EAAGz0C,EAAIwsF,EACtB,GAAI7wH,EAAQmmH,cAAe,CACvB,MAAMwC,EAAc,CAChB35C,OAAQ5/E,KAAKpV,IAAIksI,EAAUD,GAAa,EACxCn3C,WAAYu/C,EAAgBv/C,WAC5BC,SAAUs/C,EAAgBt/C,SAC1Ba,YAAa,GAEXkiB,EAAUq2B,EAAUrrC,WAAW8zC,EAAW1K,GAAYA,EAAW,EACjEn0B,EAAU++B,EAAS7K,EAAY,EACrCviH,EAAI4tE,YAActxE,EAAQ+wH,mBAC1BrtH,EAAI6tE,UAAYvxE,EAAQ+wH,mBACxBxiD,GAAU7qE,EAAKilH,EAAa72B,EAASC,GACrCruF,EAAI4tE,YAAc48C,EAAWptG,YAC7Bpd,EAAI6tE,UAAY28C,EAAWhwG,gBAC3BqwD,GAAU7qE,EAAKilH,EAAa72B,EAASC,EACzC,KAAO,CACHruF,EAAIkoE,UAAYj9D,EAASu/G,EAAWt+C,aAAexgF,KAAKnV,OAAOd,OAAO8yB,OAAOiiH,EAAWt+C,cAAgBs+C,EAAWt+C,aAAe,EAClIlsE,EAAI4tE,YAAc48C,EAAWptG,YAC7Bpd,EAAIwnG,YAAYgjB,EAAW7uC,YAAc,IACzC37E,EAAIynG,eAAiB+iB,EAAW5uC,kBAAoB,EACpD,MAAM0xC,EAAS7I,EAAUrrC,WAAW8zC,EAAW1K,GACzC+K,EAAS9I,EAAUrrC,WAAWqrC,EAAUtrC,MAAM+zC,EAAW,GAAI1K,EAAW,GACxExN,EAAevlC,GAAc+6C,EAAWxV,cAC1Cv/H,OAAO8yB,OAAOysG,GAAcvtG,MAAM1qB,GAAU,IAANA,KACtCijB,EAAI0rE,YACJ1rE,EAAI6tE,UAAYvxE,EAAQ+wH,mBACxBz+C,GAAmB5uE,EAAK,CACpB1qB,EAAGg4I,EACH3sF,EAAGysF,EACH5iE,EAAGg4D,EACHloG,EAAGioG,EACHj3C,OAAQ0pC,IAEZh1G,EAAIisE,OACJjsE,EAAImsE,SACJnsE,EAAI6tE,UAAY28C,EAAWhwG,gBAC3Bxa,EAAI0rE,YACJkD,GAAmB5uE,EAAK,CACpB1qB,EAAGi4I,EACH5sF,EAAGysF,EAAS,EACZ5iE,EAAGg4D,EAAW,EACdloG,EAAGioG,EAAY,EACfj3C,OAAQ0pC,IAEZh1G,EAAIisE,SAEJjsE,EAAI6tE,UAAYvxE,EAAQ+wH,mBACxBrtH,EAAIiuE,SAASq/C,EAAQF,EAAQ5K,EAAUD,GACvCviH,EAAIwtH,WAAWF,EAAQF,EAAQ5K,EAAUD,GACzCviH,EAAI6tE,UAAY28C,EAAWhwG,gBAC3Bxa,EAAIiuE,SAASs/C,EAAQH,EAAS,EAAG5K,EAAW,EAAGD,EAAY,GAEnE,CACAviH,EAAI6tE,UAAYzzF,KAAKsxI,gBAAgB32I,EACzC,CACA,QAAA04I,CAASr4C,EAAIp1E,EAAK1D,GACd,MAAM,KAAErL,GAAU7W,MACZ,YAAEsuI,EAAY,UAAEgF,EAAU,cAAEjF,EAAc,UAAElG,EAAU,SAAEC,EAAS,WAAEzrB,GAAgBz6F,EACnFurH,EAAWl4C,GAAOrzE,EAAQurH,UAChC,IAAI8F,EAAiB9F,EAASzjG,WAC1BwpG,EAAe,EACnB,MAAMnJ,EAAY1rC,GAAcz8E,EAAQ08E,IAAK5+F,KAAK9E,EAAG8E,KAAKqjD,OACpDowF,EAAiB,SAAS3uI,GAC5B8gB,EAAI2uE,SAASzvF,EAAMulI,EAAUnvI,EAAE8/F,EAAG9/F,EAAIs4I,GAAex4C,EAAGz0C,EAAIgtF,EAAiB,GAC7Ev4C,EAAGz0C,GAAKgtF,EAAiBjF,CAC7B,EACMoF,EAA0BrJ,EAAUn2C,UAAUo/C,GACpD,IAAIvF,EAAU4F,EAAW3tI,EAAOrL,EAAG0I,EAAG88E,EAAMyP,EAQ5C,IAPAhqE,EAAIsuE,UAAYo/C,EAChB1tH,EAAIuuE,aAAe,SACnBvuE,EAAIwlE,KAAOqiD,EAASluG,OACpBy7D,EAAG9/F,EAAIw0I,GAAY1vI,KAAM0zI,EAAyBxxH,GAClD0D,EAAI6tE,UAAYvxE,EAAQouH,UACxB3/G,EAAK3wB,KAAKiuI,WAAYwF,GACtBD,EAAenF,GAA6C,UAA5BqF,EAAoD,WAAdJ,EAAyBlL,EAAW,EAAIzrB,EAAayrB,EAAW,EAAIzrB,EAAa,EACnJhiH,EAAI,EAAGwlF,EAAOtpE,EAAKhc,OAAQF,EAAIwlF,IAAQxlF,EAAE,CAUzC,IATAozI,EAAWl3H,EAAKlc,GAChBg5I,EAAY3zI,KAAKsxI,gBAAgB32I,GACjCirB,EAAI6tE,UAAYkgD,EAChBhjH,EAAKo9G,EAASC,OAAQyF,GACtBztI,EAAQ+nI,EAAS/nI,MACbqoI,GAAiBroI,EAAMnL,SACvBmF,KAAK4yI,cAAchtH,EAAKo1E,EAAIrgG,EAAG0vI,EAAWnoH,GAC1CqxH,EAAiBjiI,KAAKnV,IAAIsxI,EAASzjG,WAAYm+F,IAE/C9kI,EAAI,EAAGusF,EAAO5pF,EAAMnL,OAAQwI,EAAIusF,IAAQvsF,EACxCowI,EAAeztI,EAAM3C,IACrBkwI,EAAiB9F,EAASzjG,WAE9BrZ,EAAKo9G,EAAS11E,MAAOo7E,EACzB,CACAD,EAAe,EACfD,EAAiB9F,EAASzjG,WAC1BrZ,EAAK3wB,KAAKkuI,UAAWuF,GACrBz4C,EAAGz0C,GAAK+nF,CACZ,CACA,UAAAsF,CAAW54C,EAAIp1E,EAAK1D,GAChB,MAAMsrH,EAASxtI,KAAKwtI,OACd3yI,EAAS2yI,EAAO3yI,OACtB,IAAI6yI,EAAY/yI,EAChB,GAAIE,EAAQ,CACR,MAAMwvI,EAAY1rC,GAAcz8E,EAAQ08E,IAAK5+F,KAAK9E,EAAG8E,KAAKqjD,OAQ1D,IAPA23C,EAAG9/F,EAAIw0I,GAAY1vI,KAAMkiB,EAAQ2xH,YAAa3xH,GAC9C84E,EAAGz0C,GAAKrkC,EAAQqsH,gBAChB3oH,EAAIsuE,UAAYm2C,EAAUn2C,UAAUhyE,EAAQ2xH,aAC5CjuH,EAAIuuE,aAAe,SACnBu5C,EAAan4C,GAAOrzE,EAAQwrH,YAC5B9nH,EAAI6tE,UAAYvxE,EAAQ4xH,YACxBluH,EAAIwlE,KAAOsiD,EAAWnuG,OAClB5kC,EAAI,EAAGA,EAAIE,IAAUF,EACrBirB,EAAI2uE,SAASi5C,EAAO7yI,GAAI0vI,EAAUnvI,EAAE8/F,EAAG9/F,GAAI8/F,EAAGz0C,EAAImnF,EAAW1jG,WAAa,GAC1EgxD,EAAGz0C,GAAKmnF,EAAW1jG,WAAa9nB,EAAQssH,aAEhD,CACJ,CACA,cAAAvhB,CAAejyB,EAAIp1E,EAAKmuH,EAAa7xH,GACjC,MAAM,OAAE4sH,EAAO,OAAEF,GAAY5uI,MACvB,EAAE9E,EAAE,EAAEqrD,GAAOy0C,GACb,MAAE33C,EAAM,OAAED,GAAY2wF,GACtB,QAAEt/C,EAAQ,SAAEG,EAAS,WAAEF,EAAW,YAAEC,GAAiBU,GAAcnzE,EAAQ2uE,cACjFjrE,EAAI6tE,UAAYvxE,EAAQke,gBACxBxa,EAAI4tE,YAActxE,EAAQ8gB,YAC1Bpd,EAAIkoE,UAAY5rE,EAAQ4vE,YACxBlsE,EAAI0rE,YACJ1rE,EAAI8rE,OAAOx2F,EAAIu5F,EAASluC,GACT,QAAXqoF,GACA5uI,KAAKmyI,UAAUn3C,EAAIp1E,EAAKmuH,EAAa7xH,GAEzC0D,EAAI+rE,OAAOz2F,EAAImoD,EAAQuxC,EAAUruC,GACjC3gC,EAAIouH,iBAAiB94I,EAAImoD,EAAOkD,EAAGrrD,EAAImoD,EAAOkD,EAAIquC,GACnC,WAAXg6C,GAAkC,UAAXE,GACvB9uI,KAAKmyI,UAAUn3C,EAAIp1E,EAAKmuH,EAAa7xH,GAEzC0D,EAAI+rE,OAAOz2F,EAAImoD,EAAOkD,EAAInD,EAASuxC,GACnC/uE,EAAIouH,iBAAiB94I,EAAImoD,EAAOkD,EAAInD,EAAQloD,EAAImoD,EAAQsxC,EAAapuC,EAAInD,GAC1D,WAAXwrF,GACA5uI,KAAKmyI,UAAUn3C,EAAIp1E,EAAKmuH,EAAa7xH,GAEzC0D,EAAI+rE,OAAOz2F,EAAIw5F,EAAYnuC,EAAInD,GAC/Bx9B,EAAIouH,iBAAiB94I,EAAGqrD,EAAInD,EAAQloD,EAAGqrD,EAAInD,EAASsxC,GACrC,WAAXk6C,GAAkC,SAAXE,GACvB9uI,KAAKmyI,UAAUn3C,EAAIp1E,EAAKmuH,EAAa7xH,GAEzC0D,EAAI+rE,OAAOz2F,EAAGqrD,EAAIkuC,GAClB7uE,EAAIouH,iBAAiB94I,EAAGqrD,EAAGrrD,EAAIu5F,EAASluC,GACxC3gC,EAAI6rE,YACJ7rE,EAAIisE,OACA3vE,EAAQ4vE,YAAc,GACtBlsE,EAAImsE,QAEZ,CACH,sBAAAkiD,CAAuB/xH,GAChB,MAAM4nE,EAAQ9pF,KAAK8pF,MACbiY,EAAQ/hG,KAAK0kG,YACbwvC,EAAQnyC,GAASA,EAAM7mG,EACvBi5I,EAAQpyC,GAASA,EAAMx7C,EAC7B,GAAI2tF,GAASC,EAAO,CAChB,MAAM7/F,EAAWs4F,GAAY1qH,EAAQoyB,UAAU94C,KAAKwE,KAAMA,KAAKuiG,QAASviG,KAAK6wI,gBAC7E,IAAKv8F,EACD,OAEJ,MAAM/jC,EAAOvQ,KAAK8wI,MAAQxD,GAAettI,KAAMkiB,GACzC8vH,EAAkB32I,OAAOyE,OAAO,CAAC,EAAGw0C,EAAUt0C,KAAK8wI,OACnDxB,EAAYH,GAAmBrlD,EAAO5nE,EAAS8vH,GAC/C//C,EAAQo9C,GAAmBntH,EAAS8vH,EAAiB1C,EAAWxlD,GAClEoqD,EAAMtwC,MAAQ3R,EAAM/2F,GAAKi5I,EAAMvwC,MAAQ3R,EAAM1rC,IAC7CvmD,KAAK8uI,OAASQ,EAAUR,OACxB9uI,KAAK4uI,OAASU,EAAUV,OACxB5uI,KAAKqjD,MAAQ9yC,EAAK8yC,MAClBrjD,KAAKojD,OAAS7yC,EAAK6yC,OACnBpjD,KAAKkxI,OAAS58F,EAASp5C,EACvB8E,KAAKmxI,OAAS78F,EAASiS,EACvBvmD,KAAKqtG,qBAAqBvJ,OAAO9jG,KAAMiyF,GAE/C,CACJ,CACH,WAAAmiD,GACO,QAASp0I,KAAKiqC,OAClB,CACA,IAAAq4D,CAAK18E,GACD,MAAM1D,EAAUliB,KAAKkiB,QAAQ/N,WAAWnU,KAAKkU,cAC7C,IAAI+1B,EAAUjqC,KAAKiqC,QACnB,IAAKA,EACD,OAEJjqC,KAAKi0I,uBAAuB/xH,GAC5B,MAAM6xH,EAAc,CAChB1wF,MAAOrjD,KAAKqjD,MACZD,OAAQpjD,KAAKojD,QAEX43C,EAAK,CACP9/F,EAAG8E,KAAK9E,EACRqrD,EAAGvmD,KAAKumD,GAEZtc,EAAU34B,KAAK4pC,IAAIjR,GAAW,KAAO,EAAIA,EACzC,MAAMujD,EAAU8H,GAAUpzE,EAAQsrE,SAC5B6mD,EAAoBr0I,KAAK0gB,MAAM7lB,QAAUmF,KAAKiuI,WAAWpzI,QAAUmF,KAAK6W,KAAKhc,QAAUmF,KAAKkuI,UAAUrzI,QAAUmF,KAAKwtI,OAAO3yI,OAC9HqnB,EAAQohG,SAAW+wB,IACnBzuH,EAAIgF,OACJhF,EAAI0uH,YAAcrqG,EAClBjqC,KAAKitH,eAAejyB,EAAIp1E,EAAKmuH,EAAa7xH,GAC1Ck9E,GAAsBx5E,EAAK1D,EAAQyoH,eACnC3vC,EAAGz0C,GAAKinC,EAAQxqC,IAChBhjD,KAAK0tH,UAAU1yB,EAAIp1E,EAAK1D,GACxBliB,KAAKqzI,SAASr4C,EAAIp1E,EAAK1D,GACvBliB,KAAK4zI,WAAW54C,EAAIp1E,EAAK1D,GACzBs9E,GAAqB55E,EAAK1D,EAAQyoH,eAClC/kH,EAAImqE,UAEZ,CACH,iBAAA0pC,GACO,OAAOz5H,KAAKuiG,SAAW,EAC3B,CACH,iBAAAm3B,CAAkBC,EAAgBmT,GAC3B,MAAMlT,EAAa55H,KAAKuiG,QAClB32C,EAAS+tE,EAAe50H,KAAI,EAAGs7E,eAAe9wE,YAChD,MAAMg2E,EAAOvlF,KAAK8pF,MAAM2f,eAAeppB,GACvC,IAAKkF,EACD,MAAM,IAAIlhF,MAAM,kCAAoCg8E,GAExD,MAAO,CACHA,eACAzwD,QAAS21D,EAAKj/E,KAAKiJ,GACnBA,QACH,IAECsZ,GAAWo3D,EAAe25C,EAAYhuE,GACtC2oF,EAAkBv0I,KAAKw0I,iBAAiB5oF,EAAQkhF,IAClDjkH,GAAW0rH,KACXv0I,KAAKuiG,QAAU32C,EACf5rD,KAAK6wI,eAAiB/D,EACtB9sI,KAAKy0I,qBAAsB,EAC3Bz0I,KAAK8jG,QAAO,GAEpB,CACH,WAAAvlF,CAAY5Y,EAAGm0H,EAAQI,GAAc,GAC9B,GAAIJ,GAAU95H,KAAKy0I,oBACf,OAAO,EAEXz0I,KAAKy0I,qBAAsB,EAC3B,MAAMvyH,EAAUliB,KAAKkiB,QACf03G,EAAa55H,KAAKuiG,SAAW,GAC7B32C,EAAS5rD,KAAKq6H,mBAAmB10H,EAAGi0H,EAAYE,EAAQI,GACxDqa,EAAkBv0I,KAAKw0I,iBAAiB5oF,EAAQjmD,GAChDkjB,EAAUixG,IAAW75C,EAAer0B,EAAQguE,IAAe2a,EAWjE,OAVI1rH,IACA7oB,KAAKuiG,QAAU32C,GACX1pC,EAAQohG,SAAWphG,EAAQgwH,YAC3BlyI,KAAK6wI,eAAiB,CAClB31I,EAAGyK,EAAEzK,EACLqrD,EAAG5gD,EAAE4gD,GAETvmD,KAAK8jG,QAAO,EAAMg2B,KAGnBjxG,CACX,CACH,kBAAAwxG,CAAmB10H,EAAGi0H,EAAYE,EAAQI,GACnC,MAAMh4G,EAAUliB,KAAKkiB,QACrB,GAAe,aAAXvc,EAAE7E,KACF,MAAO,GAEX,IAAKo5H,EACD,OAAON,EAAW/0H,QAAQlK,GAAIqF,KAAK8pF,MAAMxjF,KAAK2kF,SAAStwF,EAAE0lF,oBAA6FjjF,IAA5E4C,KAAK8pF,MAAM2f,eAAe9uG,EAAE0lF,cAAcgmB,WAAW+E,UAAUzwG,EAAE4U,SAE/I,MAAMq8C,EAAS5rD,KAAK8pF,MAAM+uC,0BAA0BlzH,EAAGuc,EAAQ0pE,KAAM1pE,EAAS43G,GAI9E,OAHI53G,EAAQ89D,SACRp0B,EAAOo0B,UAEJp0B,CACX,CACH,gBAAA4oF,CAAiB5oF,EAAQjmD,GAClB,MAAM,OAAEurI,EAAO,OAAEC,EAAO,QAAEjvH,GAAaliB,KACjCs0C,EAAWs4F,GAAY1qH,EAAQoyB,UAAU94C,KAAKwE,KAAM4rD,EAAQjmD,GAClE,OAAoB,IAAb2uC,IAAuB48F,IAAW58F,EAASp5C,GAAKi2I,IAAW78F,EAASiS,EAC/E,EAEJ,IAAImuF,GAAiB,CACjB1nI,GAAI,UACJ8+H,SAAU8E,GACVhE,eACA,SAAA+H,CAAW7qD,EAAOu4C,EAAOngH,GACjBA,IACA4nE,EAAMyjD,QAAU,IAAIqD,GAAQ,CACxB9mD,QACA5nE,YAGZ,EACA,YAAAskG,CAAc18B,EAAOu4C,EAAOngH,GACpB4nE,EAAMyjD,SACNzjD,EAAMyjD,QAAQzkH,WAAW5G,EAEjC,EACA,KAAA7J,CAAOyxE,EAAOu4C,EAAOngH,GACb4nE,EAAMyjD,SACNzjD,EAAMyjD,QAAQzkH,WAAW5G,EAEjC,EACA,SAAA0yH,CAAW9qD,GACP,MAAMyjD,EAAUzjD,EAAMyjD,QACtB,GAAIA,GAAWA,EAAQ6G,cAAe,CAClC,MAAM3xI,EAAO,CACT8qI,WAEJ,IAGO,IAHHzjD,EAAMs+B,cAAc,oBAAqB,IACtC3lH,EACHqoD,YAAY,IAEZ,OAEJyiF,EAAQjrC,KAAKxY,EAAMlkE,KACnBkkE,EAAMs+B,cAAc,mBAAoB3lH,EAC5C,CACJ,EACA,UAAAspI,CAAYjiD,EAAOrnF,GACf,GAAIqnF,EAAMyjD,QAAS,CACf,MAAMnzB,EAAmB33G,EAAKq3H,OAC1BhwC,EAAMyjD,QAAQhvH,YAAY9b,EAAK8L,MAAO6rG,EAAkB33G,EAAKy3H,eAC7Dz3H,EAAKomB,SAAU,EAEvB,CACJ,EACAF,SAAU,CACN26F,SAAS,EACT4uB,SAAU,KACV59F,SAAU,UACVlU,gBAAiB,kBACjBuyG,WAAY,OACZxH,UAAW,CACP/sD,OAAQ,QAEZ+vD,aAAc,EACdC,kBAAmB,EACnBrpB,WAAY,OACZurB,UAAW,OACXhC,YAAa,EACbb,SAAU,CAAC,EACX6F,UAAW,OACXQ,YAAa,OACbtF,cAAe,EACfD,gBAAiB,EACjBb,WAAY,CACRtvD,OAAQ,QAEZy1D,YAAa,OACbrmD,QAAS,EACTyhD,aAAc,EACdD,UAAW,EACXn+C,aAAc,EACds3C,UAAW,CAACviH,EAAKnf,IAAOA,EAAKgnI,SAASl9H,KACtC63H,SAAU,CAACxiH,EAAKnf,IAAOA,EAAKgnI,SAASl9H,KACrC0iI,mBAAoB,OACpB5E,eAAe,EACf1xB,WAAY,EACZ35E,YAAa,gBACb8uD,YAAa,EACb7qC,UAAW,CACPzuC,SAAU,IACV8yB,OAAQ,gBAEZ+hD,WAAY,CACRnE,QAAS,CACLpoF,KAAM,SACN0+C,WAAY,CACR,IACA,IACA,QACA,SACA,SACA,WAGRvV,QAAS,CACLqB,OAAQ,SACR9yB,SAAU,MAGlB9I,UAAWmgI,IAEfphB,cAAe,CACXgf,SAAU,OACVC,WAAY,OACZvC,UAAW,QAEfxgD,YAAa,CACToC,YAAcxtF,GAAgB,WAATA,GAA8B,aAATA,GAAgC,aAATA,EACjE0tF,YAAY,EACZv9E,UAAW,CACPq9E,aAAa,EACbE,YAAY,GAEhBhmC,UAAW,CACPimC,WAAW,GAEfG,WAAY,CACRH,UAAW,cAGnB6lC,uBAAwB,CACpB,gBAIJ7zH,GAAuB7D,OAAO+xG,OAAO,CACzCmI,UAAW,KACXs/B,OAAQ1S,GACR2S,WAAYpS,GACZqS,OAAQxlI,GACRi5H,OAAQqD,GACRmJ,SAAUrI,GACVT,MAAOK,GACPqE,QAAS8D,KAeT,SAASO,GAAelqC,EAAQ6B,EAAKr9F,EAAO2lI,GACxC,MAAMtnH,EAAQm9E,EAAOvmG,QAAQooG,GAC7B,IAAe,IAAXh/E,EACA,MAfY,EAACm9E,EAAQ6B,EAAKr9F,EAAO2lI,KAClB,kBAARtoC,GACPr9F,EAAQw7F,EAAO/uG,KAAK4wG,GAAO,EAC3BsoC,EAAY1nH,QAAQ,CAChBje,QACAmqB,MAAOkzE,KAEJlrG,MAAMkrG,KACbr9F,EAAQ,MAELA,GAKI4lI,CAAYpqC,EAAQ6B,EAAKr9F,EAAO2lI,GAG3C,OAAOtnH,IADMm9E,EAAOt4E,YAAYm6E,GACRr9F,EAAQqe,CACpC,CAEA,SAASwnH,GAAkB/4I,GACvB,MAAM0uG,EAAS/qG,KAAKgrG,YACpB,OAAI3uG,GAAS,GAAKA,EAAQ0uG,EAAOlwG,OACtBkwG,EAAO1uG,GAEXA,CACX,CA+FA,SAASg5I,GAAgBC,EAAmBC,GACxC,MAAM1rD,EAAQ,IAER,OAAE6D,EAAO,KAAE7qD,EAAK,IAAE3mC,EAAI,IAAEC,EAAI,UAAEq5I,EAAU,MAAEhvH,EAAM,SAAEivH,EAAS,UAAEC,EAAU,cAAEC,GAAmBL,EAC5Fp4G,EAAO2F,GAAQ,EACf+yG,EAAYH,EAAW,GACrBv5I,IAAK25I,EAAO15I,IAAK25I,GAAUP,EAC7BzvD,GAAcvG,EAAcrjF,GAC5B6pF,GAAcxG,EAAcpjF,GAC5B45I,GAAgBx2D,EAAc/4D,GAC9BwvH,GAAcF,EAAOD,IAASH,EAAY,GAChD,IACIxyC,EAAQ+yC,EAASC,EAASC,EAD1B/kC,EAAUlvB,IAAS4zD,EAAOD,GAAQD,EAAY14G,GAAQA,EAE1D,GAAIk0E,EAXgB,QAWUtrB,IAAeC,EACzC,MAAO,CACH,CACI1pF,MAAOw5I,GAEX,CACIx5I,MAAOy5I,IAInBK,EAAY7kI,KAAKoyG,KAAKoyB,EAAO1kC,GAAW9/F,KAAKwtB,MAAM+2G,EAAOzkC,GACtD+kC,EAAYP,IACZxkC,EAAUlvB,GAAQi0D,EAAY/kC,EAAUwkC,EAAY14G,GAAQA,GAE3DqiD,EAAci2D,KACftyC,EAAS5xF,KAAKC,IAAI,GAAIikI,GACtBpkC,EAAU9/F,KAAKoyG,KAAKtS,EAAUlO,GAAUA,GAE7B,UAAXxV,GACAuoD,EAAU3kI,KAAKwtB,MAAM+2G,EAAOzkC,GAAWA,EACvC8kC,EAAU5kI,KAAKoyG,KAAKoyB,EAAO1kC,GAAWA,IAEtC6kC,EAAUJ,EACVK,EAAUJ,GAEVhwD,GAAcC,GAAcljD,GDp+SpC,SAAqB3nC,EAAG+mF,GACpB,MAAMm0D,EAAU9kI,KAAKwwB,MAAM5mC,GAC3B,OAAOk7I,EAAUn0D,GAAW/mF,GAAKk7I,EAAUn0D,GAAW/mF,CAC1D,CCi+S4Cm7I,EAAal6I,EAAMD,GAAO2mC,EAAMuuE,EAAU,MAC9E+kC,EAAY7kI,KAAKwwB,MAAMxwB,KAAKpV,KAAKC,EAAMD,GAAOk1G,EAASqkC,IACvDrkC,GAAWj1G,EAAMD,GAAOi6I,EACxBF,EAAU/5I,EACVg6I,EAAU/5I,GACH45I,GACPE,EAAUnwD,EAAa5pF,EAAM+5I,EAC7BC,EAAUnwD,EAAa5pF,EAAM+5I,EAC7BC,EAAY3vH,EAAQ,EACpB4qF,GAAW8kC,EAAUD,GAAWE,IAEhCA,GAAaD,EAAUD,GAAW7kC,EAE9B+kC,EADAn0D,GAAam0D,EAAW7kI,KAAKwwB,MAAMq0G,GAAY/kC,EAAU,KAC7C9/F,KAAKwwB,MAAMq0G,GAEX7kI,KAAKoyG,KAAKyyB,IAG9B,MAAMG,EAAgBhlI,KAAKnV,IAAI0mF,GAAeuuB,GAAUvuB,GAAeozD,IACvE/yC,EAAS5xF,KAAKC,IAAI,GAAIguE,EAAci2D,GAAac,EAAgBd,GACjES,EAAU3kI,KAAKwwB,MAAMm0G,EAAU/yC,GAAUA,EACzCgzC,EAAU5kI,KAAKwwB,MAAMo0G,EAAUhzC,GAAUA,EACzC,IAAI7/F,EAAI,EAgBR,IAfIyiF,IACI6vD,GAAiBM,IAAY/5I,GAC7B2tF,EAAM7tF,KAAK,CACPK,MAAOH,IAEP+5I,EAAU/5I,GACVmH,IAEA2+E,GAAa1wE,KAAKwwB,OAAOm0G,EAAU5yI,EAAI+tG,GAAWlO,GAAUA,EAAQhnG,EAAKq6I,GAAkBr6I,EAAK85I,EAAYV,KAC5GjyI,KAEG4yI,EAAU/5I,GACjBmH,KAGFA,EAAI8yI,IAAa9yI,EAAE,CACrB,MAAMumF,EAAYt4E,KAAKwwB,OAAOm0G,EAAU5yI,EAAI+tG,GAAWlO,GAAUA,EACjE,GAAInd,GAAc6D,EAAYztF,EAC1B,MAEJ0tF,EAAM7tF,KAAK,CACPK,MAAOutF,GAEf,CAcA,OAbI7D,GAAc4vD,GAAiBO,IAAY/5I,EACvC0tF,EAAMhvF,QAAUmnF,GAAa6H,EAAMA,EAAMhvF,OAAS,GAAGwB,MAAOF,EAAKo6I,GAAkBp6I,EAAK65I,EAAYV,IACpGzrD,EAAMA,EAAMhvF,OAAS,GAAGwB,MAAQF,EAEhC0tF,EAAM7tF,KAAK,CACPK,MAAOF,IAGP4pF,GAAcmwD,IAAY/5I,GAClC0tF,EAAM7tF,KAAK,CACPK,MAAO65I,IAGRrsD,CACX,CACA,SAAS0sD,GAAkBl6I,EAAO25I,GAAY,WAAExlC,EAAW,YAAEhiB,IACzD,MAAM2C,EAAM1O,GAAU+L,GAChBhR,GAASgzB,EAAal/F,KAAKu1E,IAAIsK,GAAO7/E,KAAKw2E,IAAIqJ,KAAS,KACxDt2F,EAAS,IAAOm7I,GAAc,GAAK35I,GAAOxB,OAChD,OAAOyW,KAAKpV,IAAI85I,EAAax4D,EAAO3iF,EACxC,CACA,MAAM27I,WAAwBvxB,GAC1B,WAAA75F,CAAYi4E,GACRsO,MAAMtO,GACLrjG,KAAKwd,WAAQpgB,EACb4C,KAAKyd,SAAMrgB,EACX4C,KAAKy2I,iBAAcr5I,EACnB4C,KAAK02I,eAAYt5I,EAClB4C,KAAK22I,YAAc,CACvB,CACA,KAAA9yI,CAAM+oG,EAAKr9F,GACP,OAAIgwE,EAAcqtB,KAGE,kBAARA,GAAoBA,aAAetpG,UAAY1B,UAAUgrG,GAF1D,MAKHA,CACZ,CACA,sBAAAgqC,GACI,MAAM,YAAEnpD,GAAiBztF,KAAKkiB,SACxB,WAAE4jE,EAAW,WAAEC,GAAgB/lF,KAAKgmF,gBAC1C,IAAI,IAAE9pF,EAAI,IAAEC,GAAS6D,KACrB,MAAM62I,EAAUl0I,GAAIzG,EAAM4pF,EAAa5pF,EAAMyG,EACvCm0I,EAAUn0I,GAAIxG,EAAM4pF,EAAa5pF,EAAMwG,EAC7C,GAAI8qF,EAAa,CACb,MAAMspD,EAAU/gG,GAAK95C,GACf86I,EAAUhhG,GAAK75C,GACjB46I,EAAU,GAAKC,EAAU,EACzBF,EAAO,GACAC,EAAU,GAAKC,EAAU,GAChCH,EAAO,EAEf,CACA,GAAI36I,IAAQC,EAAK,CACb,IAAI4wC,EAAiB,IAAR5wC,EAAY,EAAImV,KAAK4pC,IAAU,IAAN/+C,GACtC26I,EAAO36I,EAAM4wC,GACR0gD,GACDopD,EAAO36I,EAAM6wC,EAErB,CACA/sC,KAAK9D,IAAMA,EACX8D,KAAK7D,IAAMA,CACf,CACA,YAAA86I,GACI,MAAMr0B,EAAW5iH,KAAKkiB,QAAQ2nE,MAC9B,IACI4rD,GADA,cAAEryB,EAAc,SAAE8zB,GAAct0B,EAepC,OAbIs0B,GACAzB,EAAWnkI,KAAKoyG,KAAK1jH,KAAK7D,IAAM+6I,GAAY5lI,KAAKwtB,MAAM9+B,KAAK9D,IAAMg7I,GAAY,EAC1EzB,EAAW,MACXp1I,QAAQ6O,KAAK,UAAUlP,KAAKgN,sBAAsBkqI,mCAA0CzB,8BAC5FA,EAAW,OAGfA,EAAWz1I,KAAKm3I,mBAChB/zB,EAAgBA,GAAiB,IAEjCA,IACAqyB,EAAWnkI,KAAKpV,IAAIknH,EAAeqyB,IAEhCA,CACX,CACH,gBAAA0B,GACO,OAAO7zI,OAAOo+E,iBAClB,CACA,UAAA0lC,GACI,MAAM3gH,EAAOzG,KAAKkiB,QACZ0gG,EAAWn8G,EAAKojF,MACtB,IAAI4rD,EAAWz1I,KAAKi3I,eACpBxB,EAAWnkI,KAAKnV,IAAI,EAAGs5I,GACvB,MAcM5rD,EAAQwrD,GAdkB,CAC5BI,WACA/nD,OAAQjnF,EAAKinF,OACbxxF,IAAKuK,EAAKvK,IACVC,IAAKsK,EAAKtK,IACVq5I,UAAW5yB,EAAS4yB,UACpB3yG,KAAM+/E,EAASs0B,SACf1wH,MAAOo8F,EAASp8F,MAChBkvH,UAAW11I,KAAKiuH,aAChBzd,WAAYxwG,KAAKk2G,eACjB1nB,YAAao0B,EAASp0B,aAAe,EACrCmnD,eAA0C,IAA3B/yB,EAAS+yB,eAEV31I,KAAKolH,QAAUplH,MAajC,MAXoB,UAAhByG,EAAKinF,QACLlL,GAAmBqH,EAAO7pF,KAAM,SAEhCyG,EAAKu5E,SACL6J,EAAM7J,UACNhgF,KAAKwd,MAAQxd,KAAK7D,IAClB6D,KAAKyd,IAAMzd,KAAK9D,MAEhB8D,KAAKwd,MAAQxd,KAAK9D,IAClB8D,KAAKyd,IAAMzd,KAAK7D,KAEb0tF,CACX,CACH,SAAA9rC,GACO,MAAM8rC,EAAQ7pF,KAAK6pF,MACnB,IAAIrsE,EAAQxd,KAAK9D,IACbuhB,EAAMzd,KAAK7D,IAEf,GADAw1G,MAAM5zD,YACF/9C,KAAKkiB,QAAQ6qB,QAAU88C,EAAMhvF,OAAQ,CACrC,MAAMkyC,GAAUtvB,EAAMD,GAASlM,KAAKnV,IAAI0tF,EAAMhvF,OAAS,EAAG,GAAK,EAC/D2iB,GAASuvB,EACTtvB,GAAOsvB,CACX,CACA/sC,KAAKy2I,YAAcj5H,EACnBxd,KAAK02I,UAAYj5H,EACjBzd,KAAK22I,YAAcl5H,EAAMD,CAC7B,CACA,gBAAA4uF,CAAiB/vG,GACb,OAAOgtF,GAAahtF,EAAO2D,KAAK8pF,MAAM5nE,QAAQhI,OAAQla,KAAKkiB,QAAQ2nE,MAAM9sD,OAC7E,EAGJ,MAAMq6G,WAAoBZ,GACtBjvC,UAAY,SACfA,gBAAkB,CACX1d,MAAO,CACHvkE,SAAUmlE,GAAMf,WAAWC,UAGnC,mBAAAm9B,GACI,MAAM,IAAE5qH,EAAI,IAAEC,GAAS6D,KAAKyrG,WAAU,GACtCzrG,KAAK9D,IAAMsjF,EAAetjF,GAAOA,EAAM,EACvC8D,KAAK7D,IAAMqjF,EAAerjF,GAAOA,EAAM,EACvC6D,KAAK42I,wBACT,CACH,gBAAAO,GACO,MAAM3mC,EAAaxwG,KAAKk2G,eAClBr7G,EAAS21G,EAAaxwG,KAAKqjD,MAAQrjD,KAAKojD,OACxCorC,EAAc/L,GAAUziF,KAAKkiB,QAAQ2nE,MAAM2E,aAC3ChR,GAASgzB,EAAal/F,KAAKu1E,IAAI2H,GAAel9E,KAAKw2E,IAAI0G,KAAiB,KACxE27B,EAAWnqH,KAAKwqH,wBAAwB,GAC9C,OAAOl5G,KAAKoyG,KAAK7oH,EAASyW,KAAKpV,IAAI,GAAIiuH,EAASngF,WAAawzC,GACjE,CACA,gBAAAyI,CAAiB5pF,GACb,OAAiB,OAAVA,EAAiBmvG,IAAMxrG,KAAKy3G,oBAAoBp7G,EAAQ2D,KAAKy2I,aAAez2I,KAAK22I,YAC5F,CACA,gBAAAh/B,CAAiBznB,GACb,OAAOlwF,KAAKy2I,YAAcz2I,KAAK2qH,mBAAmBz6B,GAASlwF,KAAK22I,WACpE,EAGJ,MAAMU,GAAc10I,GAAI2O,KAAKwtB,MAAMijD,GAAMp/E,IACnC20I,GAAiB,CAAC30I,EAAG2hB,IAAIhT,KAAKC,IAAI,GAAI8lI,GAAW10I,GAAK2hB,GAC5D,SAASizH,GAAQC,GAEb,OAAkB,IADHA,EAAUlmI,KAAKC,IAAI,GAAI8lI,GAAWG,GAErD,CACA,SAASC,GAAMv7I,EAAKC,EAAKu7I,GACrB,MAAMC,EAAYrmI,KAAKC,IAAI,GAAImmI,GACzBl6H,EAAQlM,KAAKwtB,MAAM5iC,EAAMy7I,GAE/B,OADYrmI,KAAKoyG,KAAKvnH,EAAMw7I,GACfn6H,CACjB,CAYC,SAASo6H,GAActC,GAAmB,IAAEp5I,EAAI,IAAEC,IAC/CD,EAAMujF,EAAgB61D,EAAkBp5I,IAAKA,GAC7C,MAAM2tF,EAAQ,GACRguD,EAASR,GAAWn7I,GAC1B,IAAI47I,EAfR,SAAkB57I,EAAKC,GAEnB,IAAIu7I,EAAWL,GADDl7I,EAAMD,GAEpB,KAAMu7I,GAAMv7I,EAAKC,EAAKu7I,GAAY,IAC9BA,IAEJ,KAAMD,GAAMv7I,EAAKC,EAAKu7I,GAAY,IAC9BA,IAEJ,OAAOpmI,KAAKpV,IAAIw7I,EAAUL,GAAWn7I,GACzC,CAKc67I,CAAS77I,EAAKC,GACpBq5I,EAAYsC,EAAM,EAAIxmI,KAAKC,IAAI,GAAID,KAAK4pC,IAAI48F,IAAQ,EACxD,MAAMZ,EAAW5lI,KAAKC,IAAI,GAAIumI,GACxB1mI,EAAOymI,EAASC,EAAMxmI,KAAKC,IAAI,GAAIsmI,GAAU,EAC7Cr6H,EAAQlM,KAAKwwB,OAAO5lC,EAAMkV,GAAQokI,GAAaA,EAC/CzoG,EAASz7B,KAAKwtB,OAAO5iC,EAAMkV,GAAQ8lI,EAAW,IAAMA,EAAW,GACrE,IAAI1sD,EAAcl5E,KAAKwtB,OAAOthB,EAAQuvB,GAAUz7B,KAAKC,IAAI,GAAIumI,IACzDz7I,EAAQojF,EAAgB61D,EAAkBp5I,IAAKoV,KAAKwwB,OAAO1wB,EAAO27B,EAASy9C,EAAcl5E,KAAKC,IAAI,GAAIumI,IAAQtC,GAAaA,GAC/H,KAAMn5I,EAAQF,GACV0tF,EAAM7tF,KAAK,CACPK,QACAk5C,MAAOgiG,GAAQl7I,GACfmuF,gBAEAA,GAAe,GACfA,EAAcA,EAAc,GAAK,GAAK,GAEtCA,IAEAA,GAAe,KACfstD,IACAttD,EAAc,EACdgrD,EAAYsC,GAAO,EAAI,EAAItC,GAE/Bn5I,EAAQiV,KAAKwwB,OAAO1wB,EAAO27B,EAASy9C,EAAcl5E,KAAKC,IAAI,GAAIumI,IAAQtC,GAAaA,EAExF,MAAMwC,EAAWv4D,EAAgB61D,EAAkBn5I,IAAKE,GAMxD,OALAwtF,EAAM7tF,KAAK,CACPK,MAAO27I,EACPziG,MAAOgiG,GAAQS,GACfxtD,gBAEGX,CACX,CACA,MAAMouD,WAAyBhzB,GAC3B1d,UAAY,cACfA,gBAAkB,CACX1d,MAAO,CACHvkE,SAAUmlE,GAAMf,WAAWY,YAC3B/0C,MAAO,CACH+tE,SAAS,KAIrB,WAAAl4F,CAAYi4E,GACRsO,MAAMtO,GACLrjG,KAAKwd,WAAQpgB,EACb4C,KAAKyd,SAAMrgB,EACX4C,KAAKy2I,iBAAcr5I,EACpB4C,KAAK22I,YAAc,CACvB,CACA,KAAA9yI,CAAM+oG,EAAKr9F,GACP,MAAMlT,EAAQm6I,GAAgBl7I,UAAUuI,MAAM9D,MAAMC,KAAM,CACtD4sG,EACAr9F,IAEJ,GAAc,IAAVlT,EAIJ,OAAOmjF,EAAenjF,IAAUA,EAAQ,EAAIA,EAAQ,KAHhD2D,KAAKk4I,OAAQ,CAIrB,CACA,mBAAApxB,GACI,MAAM,IAAE5qH,EAAI,IAAEC,GAAS6D,KAAKyrG,WAAU,GACtCzrG,KAAK9D,IAAMsjF,EAAetjF,GAAOoV,KAAKnV,IAAI,EAAGD,GAAO,KACpD8D,KAAK7D,IAAMqjF,EAAerjF,GAAOmV,KAAKnV,IAAI,EAAGA,GAAO,KAChD6D,KAAKkiB,QAAQurE,cACbztF,KAAKk4I,OAAQ,GAEbl4I,KAAKk4I,OAASl4I,KAAK9D,MAAQ8D,KAAK4lH,gBAAkBpmC,EAAex/E,KAAK0lH,YACtE1lH,KAAK9D,IAAMA,IAAQo7I,GAAet3I,KAAK9D,IAAK,GAAKo7I,GAAet3I,KAAK9D,KAAM,GAAKo7I,GAAet3I,KAAK9D,IAAK,IAE7G8D,KAAK42I,wBACT,CACA,sBAAAA,GACI,MAAM,WAAE9wD,EAAW,WAAEC,GAAgB/lF,KAAKgmF,gBAC1C,IAAI9pF,EAAM8D,KAAK9D,IACXC,EAAM6D,KAAK7D,IACf,MAAM06I,EAAUl0I,GAAIzG,EAAM4pF,EAAa5pF,EAAMyG,EACvCm0I,EAAUn0I,GAAIxG,EAAM4pF,EAAa5pF,EAAMwG,EACzCzG,IAAQC,IACJD,GAAO,GACP26I,EAAO,GACPC,EAAO,MAEPD,EAAOS,GAAep7I,GAAM,IAC5B46I,EAAOQ,GAAen7I,EAAK,MAG/BD,GAAO,GACP26I,EAAOS,GAAen7I,GAAM,IAE5BA,GAAO,GACP26I,EAAOQ,GAAep7I,EAAK,IAE/B8D,KAAK9D,IAAMA,EACX8D,KAAK7D,IAAMA,CACf,CACA,UAAAirH,GACI,MAAM3gH,EAAOzG,KAAKkiB,QAKZ2nE,EAAQ+tD,GAJY,CACtB17I,IAAK8D,KAAK0lH,SACVvpH,IAAK6D,KAAKylH,UAEiCzlH,MAY/C,MAXoB,UAAhByG,EAAKinF,QACLlL,GAAmBqH,EAAO7pF,KAAM,SAEhCyG,EAAKu5E,SACL6J,EAAM7J,UACNhgF,KAAKwd,MAAQxd,KAAK7D,IAClB6D,KAAKyd,IAAMzd,KAAK9D,MAEhB8D,KAAKwd,MAAQxd,KAAK9D,IAClB8D,KAAKyd,IAAMzd,KAAK7D,KAEb0tF,CACX,CACH,gBAAAuiB,CAAiB/vG,GACV,YAAiBe,IAAVf,EAAsB,IAAMgtF,GAAahtF,EAAO2D,KAAK8pF,MAAM5nE,QAAQhI,OAAQla,KAAKkiB,QAAQ2nE,MAAM9sD,OACzG,CACH,SAAAghB,GACO,MAAMvgC,EAAQxd,KAAK9D,IACnBy1G,MAAM5zD,YACN/9C,KAAKy2I,YAAc10D,GAAMvkE,GACzBxd,KAAK22I,YAAc50D,GAAM/hF,KAAK7D,KAAO4lF,GAAMvkE,EAC/C,CACA,gBAAAyoE,CAAiB5pF,GAIb,YAHce,IAAVf,GAAiC,IAAVA,IACvBA,EAAQ2D,KAAK9D,KAEH,OAAVG,GAAkBqF,MAAMrF,GACjBmvG,IAEJxrG,KAAKy3G,mBAAmBp7G,IAAU2D,KAAK9D,IAAM,GAAK6lF,GAAM1lF,GAAS2D,KAAKy2I,aAAez2I,KAAK22I,YACrG,CACA,gBAAAh/B,CAAiBznB,GACb,MAAMw6B,EAAU1qH,KAAK2qH,mBAAmBz6B,GACxC,OAAO5+E,KAAKC,IAAI,GAAIvR,KAAKy2I,YAAc/rB,EAAU1qH,KAAK22I,YAC1D,EAGJ,SAASwB,GAAsB1xI,GAC3B,MAAMm8G,EAAWn8G,EAAKojF,MACtB,GAAI+4B,EAASxrF,SAAW3wB,EAAK2wB,QAAS,CAClC,MAAMo2D,EAAU8H,GAAUstB,EAASzzB,iBACnC,OAAOzP,EAAekjC,EAASx3B,MAAQw3B,EAASx3B,KAAK76E,KAAMoY,GAASyiE,KAAK76E,MAAQi9E,EAAQpqC,MAC7F,CACA,OAAO,CACX,CAUA,SAASg1F,GAAgBh1D,EAAOrgD,EAAKxyB,EAAMrU,EAAKC,GAC5C,OAAIinF,IAAUlnF,GAAOknF,IAAUjnF,EACpB,CACHqhB,MAAOulB,EAAMxyB,EAAO,EACpBkN,IAAKslB,EAAMxyB,EAAO,GAEf6yE,EAAQlnF,GAAOknF,EAAQjnF,EACvB,CACHqhB,MAAOulB,EAAMxyB,EACbkN,IAAKslB,GAGN,CACHvlB,MAAOulB,EACPtlB,IAAKslB,EAAMxyB,EAEnB,CACC,SAAS8nI,GAAmBjsD,GACzB,MAAMvrE,EAAO,CACTiH,EAAGskE,EAAMnpC,KAAOmpC,EAAM+/C,SAASlpF,KAC/BhhB,EAAGmqD,EAAMjpC,MAAQipC,EAAM+/C,SAAShpF,MAChCmkB,EAAG8kB,EAAMppC,IAAMopC,EAAM+/C,SAASnpF,IAC9BnvC,EAAGu4E,EAAMlpC,OAASkpC,EAAM+/C,SAASjpF,QAE/Bo1F,EAASj9I,OAAOyE,OAAO,CAAC,EAAG+gB,GAC3B8nG,EAAa,GACbn7B,EAAU,GACV+qD,EAAansD,EAAMosD,aAAa39I,OAChC49I,EAAiBrsD,EAAMlqE,QAAQuyF,YAC/BikC,EAAkBD,EAAeE,kBAAoBr3D,GAAKi3D,EAAa,EAC7E,IAAI,IAAI59I,EAAI,EAAGA,EAAI49I,EAAY59I,IAAI,CAC/B,MAAM8L,EAAOgyI,EAAetkI,WAAWi4E,EAAMwsD,qBAAqBj+I,IAClE6yF,EAAQ7yF,GAAK8L,EAAK+mF,QAClB,MAAM4rB,EAAgBhtB,EAAMysD,iBAAiBl+I,EAAGyxF,EAAM0sD,YAActrD,EAAQ7yF,GAAI+9I,GAC1EK,EAASxjD,GAAO9uF,EAAK2kF,MACrBghD,GA5CYxmH,EA4CgBwmE,EAAMxmE,IA5CjBwlE,EA4CsB2tD,EA3CjDr/G,EAAQvN,EADyBuN,EA4CwB0yD,EAAMosD,aAAa79I,IA3CnD++B,EAAQ,CAC7BA,GAEG,CACH02C,EAAGqf,GAAa7pE,EAAKwlE,EAAK7rD,OAAQ7F,GAClCwG,EAAGxG,EAAM7+B,OAASuwF,EAAKphD,aAuCvB2+E,EAAWhuH,GAAKyxI,EAChB,MAAM9iB,EAAe5lC,GAAgB0I,EAAM6oB,cAAct6G,GAAK+9I,GACxDt1D,EAAQ9xE,KAAKwwB,MAAM6gD,GAAU2mC,IAGnC0vB,GAAaV,EAAQz3H,EAAMyoG,EAFX8uB,GAAgBh1D,EAAOg2B,EAAcl+G,EAAGkxI,EAASh8D,EAAG,EAAG,KACvDgoE,GAAgBh1D,EAAOg2B,EAAc7yD,EAAG6lF,EAASlsG,EAAG,GAAI,KAE5E,CAnDJ,IAA0Bta,EAAKwlE,EAAM1xD,EAoDjC0yD,EAAM6sD,eAAep4H,EAAKiH,EAAIwwH,EAAOxwH,EAAGwwH,EAAOr2G,EAAIphB,EAAKohB,EAAGphB,EAAKymD,EAAIgxE,EAAOhxE,EAAGgxE,EAAOzkI,EAAIgN,EAAKhN,GAC9Fu4E,EAAM8sD,iBA6DV,SAA8B9sD,EAAOu8B,EAAYn7B,GAC7C,MAAMx0B,EAAQ,GACRu/E,EAAansD,EAAMosD,aAAa39I,OAChC4L,EAAO2lF,EAAMlqE,SACb,kBAAEy2H,EAAkB,QAAEvhH,GAAa3wB,EAAKguG,YACxC0kC,EAAW,CACb5gF,MAAO4/E,GAAsB1xI,GAAQ,EACrCiyI,gBAAiBC,EAAoBr3D,GAAKi3D,EAAa,GAE3D,IAAIrmD,EACJ,IAAI,IAAIv3F,EAAI,EAAGA,EAAI49I,EAAY59I,IAAI,CAC/Bw+I,EAAS3rD,QAAUA,EAAQ7yF,GAC3Bw+I,EAAS5oI,KAAOo4G,EAAWhuH,GAC3B,MAAMI,EAAOq+I,GAAqBhtD,EAAOzxF,EAAGw+I,GAC5CngF,EAAMh9D,KAAKjB,GACK,SAAZq8B,IACAr8B,EAAKuyF,QAAU+rD,GAAgBt+I,EAAMm3F,GACjCn3F,EAAKuyF,UACL4E,EAAOn3F,GAGnB,CACA,OAAOi+D,CACX,CApF6BsgF,CAAqBltD,EAAOu8B,EAAYn7B,EACrE,CACA,SAASwrD,GAAaV,EAAQz3H,EAAMuiE,EAAOm2D,EAASC,GAChD,MAAM3yD,EAAMv1E,KAAK4pC,IAAI5pC,KAAKu1E,IAAIzD,IACxB0E,EAAMx2E,KAAK4pC,IAAI5pC,KAAKw2E,IAAI1E,IAC9B,IAAIloF,EAAI,EACJqrD,EAAI,EACJgzF,EAAQ/7H,MAAQqD,EAAKiH,GACrB5sB,GAAK2lB,EAAKiH,EAAIyxH,EAAQ/7H,OAASqpE,EAC/ByxD,EAAOxwH,EAAIxW,KAAKpV,IAAIo8I,EAAOxwH,EAAGjH,EAAKiH,EAAI5sB,IAChCq+I,EAAQ97H,IAAMoD,EAAKohB,IAC1B/mC,GAAKq+I,EAAQ97H,IAAMoD,EAAKohB,GAAK4kD,EAC7ByxD,EAAOr2G,EAAI3wB,KAAKnV,IAAIm8I,EAAOr2G,EAAGphB,EAAKohB,EAAI/mC,IAEvCs+I,EAAQh8H,MAAQqD,EAAKymD,GACrB/gB,GAAK1lC,EAAKymD,EAAIkyE,EAAQh8H,OAASsqE,EAC/BwwD,EAAOhxE,EAAIh2D,KAAKpV,IAAIo8I,EAAOhxE,EAAGzmD,EAAKymD,EAAI/gB,IAChCizF,EAAQ/7H,IAAMoD,EAAKhN,IAC1B0yC,GAAKizF,EAAQ/7H,IAAMoD,EAAKhN,GAAKi0E,EAC7BwwD,EAAOzkI,EAAIvC,KAAKnV,IAAIm8I,EAAOzkI,EAAGgN,EAAKhN,EAAI0yC,GAE/C,CACA,SAAS6yF,GAAqBhtD,EAAO78E,EAAO4pI,GACxC,MAAMM,EAAgBrtD,EAAM0sD,aACtB,MAAEvgF,EAAM,gBAAEmgF,EAAgB,QAAElrD,EAAQ,KAAEj9E,GAAU4oI,EAChDO,EAAqBttD,EAAMysD,iBAAiBtpI,EAAOkqI,EAAgBlhF,EAAQi1B,EAASkrD,GACpFt1D,EAAQ9xE,KAAKwwB,MAAM6gD,GAAUe,GAAgBg2D,EAAmBt2D,MAAQxB,MACxEr7B,EA0EV,SAAmBA,EAAGrmB,EAAGkjD,GACP,KAAVA,GAA0B,MAAVA,EAChB78B,GAAKrmB,EAAI,GACFkjD,EAAQ,KAAOA,EAAQ,MAC9B78B,GAAKrmB,GAET,OAAOqmB,CACX,CAjFcozF,CAAUD,EAAmBnzF,EAAGh2C,EAAK2vB,EAAGkjD,GAC5C8Q,EAyDV,SAA8B9Q,GAC1B,GAAc,IAAVA,GAAyB,MAAVA,EACf,MAAO,SACJ,GAAIA,EAAQ,IACf,MAAO,OAEX,MAAO,OACX,CAhEsBw2D,CAAqBx2D,GACjCngC,EAgEV,SAA0B/nD,EAAGk1E,EAAGgV,GACd,UAAVA,EACAlqF,GAAKk1E,EACY,WAAVgV,IACPlqF,GAAKk1E,EAAI,GAEb,OAAOl1E,CACX,CAvEiB2+I,CAAiBH,EAAmBx+I,EAAGqV,EAAK6/D,EAAG8jB,GAC5D,MAAO,CACH5G,SAAS,EACTpyF,EAAGw+I,EAAmBx+I,EACtBqrD,IACA2tC,YACAjxC,OACAD,IAAKuD,EACLpD,MAAOF,EAAO1yC,EAAK6/D,EACnBltB,OAAQqD,EAAIh2C,EAAK2vB,EAEzB,CACA,SAASm5G,GAAgBt+I,EAAMm3F,GAC3B,IAAKA,EACD,OAAO,EAEX,MAAM,KAAEjvC,EAAK,IAAED,EAAI,MAAEG,EAAM,OAAED,GAAYnoD,EAczC,QAbqBi3F,GAAe,CAChC92F,EAAG+nD,EACHsD,EAAGvD,GACJkvC,IAASF,GAAe,CACvB92F,EAAG+nD,EACHsD,EAAGrD,GACJgvC,IAASF,GAAe,CACvB92F,EAAGioD,EACHoD,EAAGvD,GACJkvC,IAASF,GAAe,CACvB92F,EAAGioD,EACHoD,EAAGrD,GACJgvC,GAEP,CAiDA,SAAS4nD,GAAkBl0H,EAAKnf,EAAM1L,GAClC,MAAM,KAAEkoD,EAAK,IAAED,EAAI,MAAEG,EAAM,OAAED,GAAYnoD,GACnC,cAAEm0F,GAAmBzoF,EAC3B,IAAK84E,EAAc2P,GAAgB,CAC/B,MAAM0rC,EAAevlC,GAAc5uF,EAAKm0H,cAClCptC,EAAU8H,GAAU7uF,EAAK0oF,iBAC/BvpE,EAAI6tE,UAAYvE,EAChB,MAAM6qD,EAAe92F,EAAOuqC,EAAQvqC,KAC9B+2F,EAAch3F,EAAMwqC,EAAQxqC,IAC5Bi3F,EAAgB92F,EAAQF,EAAOuqC,EAAQnqC,MACvC62F,EAAiBh3F,EAASF,EAAMwqC,EAAQpqC,OAC1C/nD,OAAO8yB,OAAOysG,GAAcvtG,MAAM1qB,GAAU,IAANA,KACtCijB,EAAI0rE,YACJkD,GAAmB5uE,EAAK,CACpB1qB,EAAG6+I,EACHxzF,EAAGyzF,EACH5pE,EAAG6pE,EACH/5G,EAAGg6G,EACHhpD,OAAQ0pC,IAEZh1G,EAAIisE,QAEJjsE,EAAIiuE,SAASkmD,EAAcC,EAAaC,EAAeC,EAE/D,CACJ,CAmBA,SAASC,GAAe/tD,EAAO8E,EAAQsjB,EAAUw7B,GAC7C,MAAM,IAAEpqH,GAASwmE,EACjB,GAAIooB,EACA5uF,EAAI4rE,IAAIpF,EAAM0oB,QAAS1oB,EAAM2oB,QAAS7jB,EAAQ,EAAG3P,QAC9C,CACH,IAAI63B,EAAgBhtB,EAAMysD,iBAAiB,EAAG3nD,GAC9CtrE,EAAI8rE,OAAO0nB,EAAcl+G,EAAGk+G,EAAc7yD,GAC1C,IAAI,IAAI5rD,EAAI,EAAGA,EAAIq1I,EAAYr1I,IAC3By+G,EAAgBhtB,EAAMysD,iBAAiBl+I,EAAGu2F,GAC1CtrE,EAAI+rE,OAAOynB,EAAcl+G,EAAGk+G,EAAc7yD,EAElD,CACJ,CA0BA,MAAM6zF,WAA0B5D,GAC5BjvC,UAAY,eACfA,gBAAkB,CACXnwE,SAAS,EACT+D,SAAS,EACTmZ,SAAU,YACVigE,WAAY,CACRn9E,SAAS,EACT02D,UAAW,EACXyT,WAAY,GACZC,iBAAkB,GAEtB3T,KAAM,CACF2mB,UAAU,GAEd7B,WAAY,EACZ9oB,MAAO,CACHoF,mBAAmB,EACnB3pE,SAAUmlE,GAAMf,WAAWC,SAE/B8qB,YAAa,CACTvlB,mBAAe9xF,EACf+xF,gBAAiB,EACjB/3D,SAAS,EACTg0D,KAAM,CACF76E,KAAM,IAEV,QAAA+U,CAAUoU,GACN,OAAOA,CACX,EACA8zD,QAAS,EACTmrD,mBAAmB,IAG3BpxC,qBAAuB,CACnB,mBAAoB,cACpB,oBAAqB,QACrB,cAAe,SAEnBA,mBAAqB,CACjBgN,WAAY,CACRrnB,UAAW,SAGnB,WAAA9hE,CAAYi4E,GACRsO,MAAMtO,GACLrjG,KAAK80G,aAAU13G,EACf4C,KAAK+0G,aAAU33G,EACf4C,KAAK84I,iBAAc17I,EACnB4C,KAAKw4I,aAAe,GACrBx4I,KAAKk5I,iBAAmB,EAC5B,CACA,aAAAvyB,GACI,MAAMn5B,EAAUxtF,KAAKmsI,SAAW72C,GAAU6iD,GAAsBn4I,KAAKkiB,SAAW,GAC1EkuD,EAAIpwE,KAAKqjD,MAAQrjD,KAAKs0F,SAAW9G,EAAQnqC,MACzCnjB,EAAIlgC,KAAKojD,OAASpjD,KAAKo9F,UAAY5P,EAAQpqC,OACjDpjD,KAAK80G,QAAUxjG,KAAKwtB,MAAM9+B,KAAKijD,KAAOmtB,EAAI,EAAIod,EAAQvqC,MACtDjjD,KAAK+0G,QAAUzjG,KAAKwtB,MAAM9+B,KAAKgjD,IAAM9iB,EAAI,EAAIstD,EAAQxqC,KACrDhjD,KAAK84I,YAAcxnI,KAAKwtB,MAAMxtB,KAAKpV,IAAIk0E,EAAGlwC,GAAK,EACnD,CACA,mBAAA4mF,GACI,MAAM,IAAE5qH,EAAI,IAAEC,GAAS6D,KAAKyrG,WAAU,GACtCzrG,KAAK9D,IAAMsjF,EAAetjF,KAASwF,MAAMxF,GAAOA,EAAM,EACtD8D,KAAK7D,IAAMqjF,EAAerjF,KAASuF,MAAMvF,GAAOA,EAAM,EACtD6D,KAAK42I,wBACT,CACH,gBAAAO,GACO,OAAO7lI,KAAKoyG,KAAK1jH,KAAK84I,YAAcX,GAAsBn4I,KAAKkiB,SACnE,CACA,kBAAAomG,CAAmBz+B,GACf2sD,GAAgBl7I,UAAUgtH,mBAAmB9sH,KAAKwE,KAAM6pF,GACxD7pF,KAAKw4I,aAAex4I,KAAKgrG,YAAYjmG,KAAI,CAAC1I,EAAOkT,KAC7C,MAAMmqB,EAAQpU,EAAStlB,KAAKkiB,QAAQuyF,YAAYnvF,SAAU,CACtDjpB,EACAkT,GACDvP,MACH,OAAO05B,GAAmB,IAAVA,EAAcA,EAAQ,EAAE,IACzC70B,QAAO,CAAClC,EAAGhI,IAAIqF,KAAK8pF,MAAM0nB,kBAAkB72G,IACnD,CACA,GAAAktH,GACI,MAAMphH,EAAOzG,KAAKkiB,QACdzb,EAAK2wB,SAAW3wB,EAAKguG,YAAYr9E,QACjCihH,GAAmBr4I,MAEnBA,KAAKi5I,eAAe,EAAG,EAAG,EAAG,EAErC,CACA,cAAAA,CAAeoB,EAAcC,EAAeC,EAAaC,GACrDx6I,KAAK80G,SAAWxjG,KAAKwtB,OAAOu7G,EAAeC,GAAiB,GAC5Dt6I,KAAK+0G,SAAWzjG,KAAKwtB,OAAOy7G,EAAcC,GAAkB,GAC5Dx6I,KAAK84I,aAAexnI,KAAKpV,IAAI8D,KAAK84I,YAAc,EAAGxnI,KAAKnV,IAAIk+I,EAAcC,EAAeC,EAAaC,GAC1G,CACA,aAAAvlC,CAAc1lG,GAGV,OAAOm0E,GAAgBn0E,GAFCgyE,IAAOvhF,KAAKw4I,aAAa39I,QAAU,IAEV4nF,GAD9BziF,KAAKkiB,QAAQywF,YAAc,GAElD,CACA,6BAAA0C,CAA8Bh5G,GAC1B,GAAIkjF,EAAcljF,GACd,OAAOmvG,IAEX,MAAMivC,EAAgBz6I,KAAK84I,aAAe94I,KAAK7D,IAAM6D,KAAK9D,KAC1D,OAAI8D,KAAKkiB,QAAQ89D,SACLhgF,KAAK7D,IAAME,GAASo+I,GAExBp+I,EAAQ2D,KAAK9D,KAAOu+I,CAChC,CACA,6BAAAC,CAA8Bt5G,GAC1B,GAAIm+C,EAAcn+C,GACd,OAAOoqE,IAEX,MAAMmvC,EAAiBv5G,GAAYphC,KAAK84I,aAAe94I,KAAK7D,IAAM6D,KAAK9D,MACvE,OAAO8D,KAAKkiB,QAAQ89D,QAAUhgF,KAAK7D,IAAMw+I,EAAiB36I,KAAK9D,IAAMy+I,CACzE,CACA,oBAAA/B,CAAqBrpI,GACjB,MAAMklG,EAAcz0G,KAAKw4I,cAAgB,GACzC,GAAIjpI,GAAS,GAAKA,EAAQklG,EAAY55G,OAAQ,CAC1C,MAAM+/I,EAAanmC,EAAYllG,GAC/B,OA7HZ,SAAiCgpB,EAAQhpB,EAAOmqB,GAC5C,OAAOg8D,GAAcn9D,EAAQ,CACzBmB,QACAnqB,QACAzO,KAAM,cAEd,CAuHmB+5I,CAAwB76I,KAAKkU,aAAc3E,EAAOqrI,EAC7D,CACJ,CACA,gBAAA/B,CAAiBtpI,EAAOurI,EAAoBpC,EAAkB,GAC1D,MAAMt1D,EAAQpjF,KAAKi1G,cAAc1lG,GAASqyE,GAAU82D,EACpD,MAAO,CACHx9I,EAAGoW,KAAKw2E,IAAI1E,GAAS03D,EAAqB96I,KAAK80G,QAC/CvuD,EAAGj1C,KAAKu1E,IAAIzD,GAAS03D,EAAqB96I,KAAK+0G,QAC/C3xB,QAER,CACA,wBAAAi2B,CAAyB9pG,EAAOlT,GAC5B,OAAO2D,KAAK64I,iBAAiBtpI,EAAOvP,KAAKq1G,8BAA8Bh5G,GAC3E,CACA,eAAA0+I,CAAgBxrI,GACZ,OAAOvP,KAAKq5G,yBAAyB9pG,GAAS,EAAGvP,KAAK4qH,eAC1D,CACA,qBAAAowB,CAAsBzrI,GAClB,MAAM,KAAE0zC,EAAK,IAAED,EAAI,MAAEG,EAAM,OAAED,GAAYljD,KAAKk5I,iBAAiB3pI,GAC/D,MAAO,CACH0zC,OACAD,MACAG,QACAD,SAER,CACH,cAAA+pE,GACO,MAAM,gBAAE7sF,EAAkBytD,MAAM,SAAE2mB,IAAiBx0G,KAAKkiB,QACxD,GAAIke,EAAiB,CACjB,MAAMxa,EAAM5lB,KAAK4lB,IACjBA,EAAIgF,OACJhF,EAAI0rE,YACJ6oD,GAAen6I,KAAMA,KAAKq1G,8BAA8Br1G,KAAK02I,WAAYliC,EAAUx0G,KAAKw4I,aAAa39I,QACrG+qB,EAAI6rE,YACJ7rE,EAAI6tE,UAAYrzD,EAChBxa,EAAIisE,OACJjsE,EAAImqE,SACR,CACJ,CACH,QAAAm9B,GACO,MAAMtnG,EAAM5lB,KAAK4lB,IACXnf,EAAOzG,KAAKkiB,SACZ,WAAEqyF,EAAW,KAAE1mB,EAAK,OAAEQ,GAAY5nF,EAClCupI,EAAahwI,KAAKw4I,aAAa39I,OACrC,IAAIF,EAAGoyC,EAAQuH,EAef,GAdI7tC,EAAKguG,YAAYr9E,SA3N7B,SAAyBg1D,EAAO4jD,GAC5B,MAAM,IAAEpqH,EAAM1D,SAAS,YAAEuyF,IAAoBroB,EAC7C,IAAI,IAAIzxF,EAAIq1I,EAAa,EAAGr1I,GAAK,EAAGA,IAAI,CACpC,MAAMI,EAAOqxF,EAAM8sD,iBAAiBv+I,GACpC,IAAKI,EAAKuyF,QACN,SAEJ,MAAM4+B,EAAczX,EAAYtgG,WAAWi4E,EAAMwsD,qBAAqBj+I,IACtEm/I,GAAkBl0H,EAAKsmG,EAAanxH,GACpC,MAAMg+I,EAASxjD,GAAO22B,EAAY9gC,OAC5B,EAAElwF,EAAE,EAAEqrD,EAAE,UAAE2tC,GAAen5F,EAC/B+4F,GAAWluE,EAAKwmE,EAAMosD,aAAa79I,GAAIO,EAAGqrD,EAAIwyF,EAAO/uG,WAAa,EAAG+uG,EAAQ,CACzE/6G,MAAOkuF,EAAYluF,MACnBk2D,UAAWA,EACXC,aAAc,UAEtB,CACJ,CA2MY8mD,CAAgBj7I,KAAMgwI,GAEtBniD,EAAKz2D,SACLp3B,KAAK6pF,MAAM54D,SAAQ,CAACwxE,EAAMlzF,KACtB,GAAc,IAAVA,EAAa,CACbw9B,EAAS/sC,KAAKq1G,8BAA8B5S,EAAKpmG,OACjD,MAAMoC,EAAUuB,KAAKkU,WAAW3E,GAC1B28G,EAAcr+B,EAAK15E,WAAW1V,GAC9B0tH,EAAoB99B,EAAOl6E,WAAW1V,IArMhE,SAAwB2tF,EAAO8uD,EAAchqD,EAAQ8+C,EAAY9kB,GAC7D,MAAMtlG,EAAMwmE,EAAMxmE,IACZ4uF,EAAW0mC,EAAa1mC,UACxB,MAAEx2E,EAAM,UAAE8vD,GAAeotD,GAC1B1mC,IAAaw7B,IAAehyG,IAAU8vD,GAAaoD,EAAS,IAGjEtrE,EAAIgF,OACJhF,EAAI4tE,YAAcx1D,EAClBpY,EAAIkoE,UAAYA,EAChBloE,EAAIwnG,YAAYlC,EAAW58B,MAC3B1oE,EAAIynG,eAAiBnC,EAAW38B,WAChC3oE,EAAI0rE,YACJ6oD,GAAe/tD,EAAO8E,EAAQsjB,EAAUw7B,GACxCpqH,EAAI6rE,YACJ7rE,EAAImsE,SACJnsE,EAAImqE,UACR,CAqLoBorD,CAAen7I,KAAMksH,EAAan/E,EAAQijG,EAAY7jB,EAC1D,KAGJ5X,EAAWn9E,QAAS,CAEpB,IADAxR,EAAIgF,OACAjwB,EAAIq1I,EAAa,EAAGr1I,GAAK,EAAGA,IAAI,CAChC,MAAMuxH,EAAc3X,EAAWpgG,WAAWnU,KAAK44I,qBAAqBj+I,KAC9D,MAAEqjC,EAAM,UAAE8vD,GAAeo+B,EAC1Bp+B,GAAc9vD,IAGnBpY,EAAIkoE,UAAYA,EAChBloE,EAAI4tE,YAAcx1D,EAClBpY,EAAIwnG,YAAYlB,EAAY3qB,YAC5B37E,EAAIynG,eAAiBnB,EAAY1qB,iBACjCz0D,EAAS/sC,KAAKq1G,8BAA8B5uG,EAAKojF,MAAM7J,QAAUhgF,KAAK9D,IAAM8D,KAAK7D,KACjFm4C,EAAWt0C,KAAK64I,iBAAiBl+I,EAAGoyC,GACpCnnB,EAAI0rE,YACJ1rE,EAAI8rE,OAAO1xF,KAAK80G,QAAS90G,KAAK+0G,SAC9BnvF,EAAI+rE,OAAOr9C,EAASp5C,EAAGo5C,EAASiS,GAChC3gC,EAAImsE,SACR,CACAnsE,EAAImqE,SACR,CACJ,CACH,UAAAu9B,GAAc,CACd,UAAAE,GACO,MAAM5nG,EAAM5lB,KAAK4lB,IACXnf,EAAOzG,KAAKkiB,QACZ0gG,EAAWn8G,EAAKojF,MACtB,IAAK+4B,EAASxrF,QACV,OAEJ,MAAMu7E,EAAa3yG,KAAKi1G,cAAc,GACtC,IAAIloE,EAAQsW,EACZz9B,EAAIgF,OACJhF,EAAIwrE,UAAUpxF,KAAK80G,QAAS90G,KAAK+0G,SACjCnvF,EAAIw5D,OAAOuzB,GACX/sF,EAAIsuE,UAAY,SAChBtuE,EAAIuuE,aAAe,SACnBn0F,KAAK6pF,MAAM54D,SAAQ,CAACwxE,EAAMlzF,KACtB,GAAc,IAAVA,IAAgB9I,EAAKu5E,QACrB,OAEJ,MAAMksC,EAActJ,EAASzuG,WAAWnU,KAAKkU,WAAW3E,IAClD46G,EAAW50B,GAAO22B,EAAY9gC,MAEpC,GADAr+C,EAAS/sC,KAAKq1G,8BAA8Br1G,KAAK6pF,MAAMt6E,GAAOlT,OAC1D6vH,EAAYj9B,kBAAmB,CAC/BrpE,EAAIwlE,KAAO++B,EAAS5qF,OACpB8jB,EAAQz9B,EAAI4pE,YAAYiT,EAAK/oE,OAAO2pB,MACpCz9B,EAAI6tE,UAAYy4B,EAAYh9B,cAC5B,MAAM1B,EAAU8H,GAAU42B,EAAY/8B,iBACtCvpE,EAAIiuE,UAAUxwC,EAAQ,EAAImqC,EAAQvqC,MAAOlW,EAASo9E,EAAS55G,KAAO,EAAIi9E,EAAQxqC,IAAKK,EAAQmqC,EAAQnqC,MAAO8mE,EAAS55G,KAAOi9E,EAAQpqC,OACtI,CACA0wC,GAAWluE,EAAK68E,EAAK/oE,MAAO,GAAIqT,EAAQo9E,EAAU,CAC9CnsF,MAAOkuF,EAAYluF,MACnBg2D,YAAak4B,EAAYt9B,gBACzBmF,YAAam4B,EAAYv9B,iBAC3B,IAEN/oE,EAAImqE,SACR,CACH,SAAA29B,GAAa,EAGd,MAAM0tB,GAAY,CACdl/G,YAAa,CACT4xC,QAAQ,EACRv9D,KAAM,EACNknI,MAAO,KAEXt7G,OAAQ,CACJ2xC,QAAQ,EACRv9D,KAAM,IACNknI,MAAO,IAEXr7G,OAAQ,CACJ0xC,QAAQ,EACRv9D,KAAM,IACNknI,MAAO,IAEXp7G,KAAM,CACFyxC,QAAQ,EACRv9D,KAAM,KACNknI,MAAO,IAEXn7G,IAAK,CACDwxC,QAAQ,EACRv9D,KAAM,MACNknI,MAAO,IAEXl7G,KAAM,CACFuxC,QAAQ,EACRv9D,KAAM,OACNknI,MAAO,GAEXj7G,MAAO,CACHsxC,QAAQ,EACRv9D,KAAM,OACNknI,MAAO,IAEXh7G,QAAS,CACLqxC,QAAQ,EACRv9D,KAAM,OACNknI,MAAO,GAEX/6G,KAAM,CACFoxC,QAAQ,EACRv9D,KAAM,SAGP8qI,GAAyBhgJ,OAAOmqB,KAAK41H,IAC3C,SAASE,GAAOj7H,EAAGxM,GAChB,OAAOwM,EAAIxM,CACf,CACC,SAAShQ,GAAMuoF,EAAO76C,GACnB,GAAIguC,EAAchuC,GACd,OAAO,KAEX,MAAMgqG,EAAUnvD,EAAMovD,UAChB,OAAE77G,EAAO,MAAEmC,EAAM,WAAExE,GAAgB8uD,EAAMqvD,WAC/C,IAAIp/I,EAAQk1C,EAOZ,MANsB,oBAAX5R,IACPtjC,EAAQsjC,EAAOtjC,IAEdmjF,EAAenjF,KAChBA,EAA0B,kBAAXsjC,EAAsB47G,EAAQ13I,MAAMxH,EAAQsjC,GAAU47G,EAAQ13I,MAAMxH,IAEzE,OAAVA,EACO,MAEPylC,IACAzlC,EAAkB,SAAVylC,IAAqBygD,GAASjlD,KAA8B,IAAfA,EAAuEi+G,EAAQp+G,QAAQ9gC,EAAOylC,GAAvEy5G,EAAQp+G,QAAQ9gC,EAAO,UAAWihC,KAE1GjhC,EACZ,CACC,SAASq/I,GAA0BC,EAASz/I,EAAKC,EAAKy/I,GACnD,MAAMz7D,EAAOk7D,GAAMxgJ,OACnB,IAAI,IAAIF,EAAI0gJ,GAAM72I,QAAQm3I,GAAUhhJ,EAAIwlF,EAAO,IAAKxlF,EAAE,CAClD,MAAMk7B,EAAWulH,GAAUC,GAAM1gJ,IAC3BuoG,EAASrtE,EAAS4hH,MAAQ5hH,EAAS4hH,MAAQn0I,OAAOu4I,iBACxD,GAAIhmH,EAASi4C,QAAUx8D,KAAKoyG,MAAMvnH,EAAMD,IAAQgnG,EAASrtE,EAAStlB,QAAUqrI,EACxE,OAAOP,GAAM1gJ,EAErB,CACA,OAAO0gJ,GAAMl7D,EAAO,EACxB,CAiBC,SAAS27D,GAAQjyD,EAAO7uE,EAAM+gI,GAC3B,GAAKA,GAEE,GAAIA,EAAWlhJ,OAAQ,CAC1B,MAAM,GAAE0/C,EAAG,GAAEC,GAAQ2pC,GAAQ43D,EAAY/gI,GAEzC6uE,EADkBkyD,EAAWxhG,IAAOv/B,EAAO+gI,EAAWxhG,GAAMwhG,EAAWvhG,KACpD,CACvB,OALIqvC,EAAM7uE,IAAQ,CAMtB,CAcC,SAASghI,GAAoB5vD,EAAOj+D,EAAQ8tH,GACzC,MAAMpyD,EAAQ,GACP9kF,EAAM,CAAC,EACRo7E,EAAOhyD,EAAOtzB,OACpB,IAAIF,EAAG0B,EACP,IAAI1B,EAAI,EAAGA,EAAIwlF,IAAQxlF,EACnB0B,EAAQ8xB,EAAOxzB,GACfoK,EAAI1I,GAAS1B,EACbkvF,EAAM7tF,KAAK,CACPK,QACAk5C,OAAO,IAGf,OAAgB,IAAT4qC,GAAe87D,EA1BzB,SAAuB7vD,EAAOvC,EAAO9kF,EAAKk3I,GACvC,MAAMV,EAAUnvD,EAAMovD,SAChB5tH,GAAS2tH,EAAQp+G,QAAQ0sD,EAAM,GAAGxtF,MAAO4/I,GACzC5pH,EAAOw3D,EAAMA,EAAMhvF,OAAS,GAAGwB,MACrC,IAAIk5C,EAAOhmC,EACX,IAAIgmC,EAAQ3nB,EAAO2nB,GAASljB,EAAMkjB,GAASgmG,EAAQ/yI,IAAI+sC,EAAO,EAAG0mG,GAC7D1sI,EAAQxK,EAAIwwC,GACRhmC,GAAS,IACTs6E,EAAMt6E,GAAOgmC,OAAQ,GAG7B,OAAOs0C,CACX,CAc8CqyD,CAAc9vD,EAAOvC,EAAO9kF,EAAKk3I,GAAzCpyD,CACtC,CACA,MAAMsyD,WAAkBl3B,GACpB1d,UAAY,OACfA,gBAAkB,CAClB7Z,OAAQ,OACDisB,SAAU,CAAC,EACX3+F,KAAM,CACF2kB,QAAQ,EACRzC,MAAM,EACN4E,OAAO,EACPxE,YAAY,EACZq+G,QAAS,cACTS,eAAgB,CAAC,GAErBvyD,MAAO,CACdlqF,OAAQ,OACG2lB,UAAU,EACViwB,MAAO,CACH+tE,SAAS,KAIxB,WAAAl4F,CAAY7oB,GACLovG,MAAMpvG,GACLvC,KAAKqvG,OAAS,CACX/oG,KAAM,GACNykG,OAAQ,GACRpjF,IAAK,IAER3nB,KAAKq8I,MAAQ,MACbr8I,KAAKs8I,gBAAal/I,EACnB4C,KAAKu8I,SAAW,CAAC,EACjBv8I,KAAKw8I,aAAc,EACnBx8I,KAAKy7I,gBAAar+I,CACtB,CACA,IAAAopC,CAAK+vF,EAAW9vH,EAAO,CAAC,GACpB,MAAMuU,EAAOu7G,EAAUv7G,OAASu7G,EAAUv7G,KAAO,CAAC,GAC3CugI,EAAUv7I,KAAKw7I,SAAW,IAAI7hC,GAASh9E,MAAM45F,EAAU5c,SAAS3X,MACvEu5C,EAAQ/0G,KAAK//B,GACbo6E,EAAQ7lE,EAAKohI,eAAgBb,EAAQz+G,WACrC98B,KAAKy7I,WAAa,CACd97G,OAAQ3kB,EAAK2kB,OACbmC,MAAO9mB,EAAK8mB,MACZxE,WAAYtiB,EAAKsiB,YAErBq0E,MAAMnrE,KAAK+vF,GACXv2H,KAAKw8I,YAAc/1I,EAAKgzC,UAC5B,CACH,KAAA51C,CAAM+oG,EAAKr9F,GACJ,YAAYnS,IAARwvG,EACO,KAEJ/oG,GAAM7D,KAAM4sG,EACvB,CACA,YAAA+R,GACIhN,MAAMgN,eACN3+G,KAAKqvG,OAAS,CACV/oG,KAAM,GACNykG,OAAQ,GACRpjF,IAAK,GAEb,CACA,mBAAAm/F,GACI,MAAM5kG,EAAUliB,KAAKkiB,QACfq5H,EAAUv7I,KAAKw7I,SACft+G,EAAOhb,EAAQlH,KAAKkiB,MAAQ,MAClC,IAAI,IAAEhhC,EAAI,IAAEC,EAAI,WAAE2pF,EAAW,WAAEC,GAAgB/lF,KAAKgmF,gBAC3D,SAASy2D,EAAa/uD,GACN5H,GAAepkF,MAAMgsF,EAAOxxF,OAC7BA,EAAMoV,KAAKpV,IAAIA,EAAKwxF,EAAOxxF,MAE1B6pF,GAAerkF,MAAMgsF,EAAOvxF,OAC7BA,EAAMmV,KAAKnV,IAAIA,EAAKuxF,EAAOvxF,KAEnC,CACK2pF,GAAeC,IAChB02D,EAAaz8I,KAAK08I,mBACK,UAAnBx6H,EAAQwrE,QAA+C,WAAzBxrE,EAAQ2nE,MAAMlqF,QAC5C88I,EAAaz8I,KAAKyrG,WAAU,KAGpCvvG,EAAMsjF,EAAetjF,KAASwF,MAAMxF,GAAOA,GAAOq/I,EAAQp+G,QAAQn8B,KAAKuX,MAAO2kB,GAC9E/gC,EAAMqjF,EAAerjF,KAASuF,MAAMvF,GAAOA,GAAOo/I,EAAQh+G,MAAMv8B,KAAKuX,MAAO2kB,GAAQ,EACpFl9B,KAAK9D,IAAMoV,KAAKpV,IAAIA,EAAKC,EAAM,GAC/B6D,KAAK7D,IAAMmV,KAAKnV,IAAID,EAAM,EAAGC,EACjC,CACH,eAAAugJ,GACO,MAAMniJ,EAAMyF,KAAK28I,qBACjB,IAAIzgJ,EAAMoH,OAAOo+E,kBACbvlF,EAAMmH,OAAOuoG,kBAKjB,OAJItxG,EAAIM,SACJqB,EAAM3B,EAAI,GACV4B,EAAM5B,EAAIA,EAAIM,OAAS,IAEpB,CACHqB,MACAC,MAER,CACH,UAAAirH,GACO,MAAMllG,EAAUliB,KAAKkiB,QACf06H,EAAW16H,EAAQlH,KACnB4nG,EAAW1gG,EAAQ2nE,MACnBkyD,EAAiC,WAApBn5B,EAASjjH,OAAsBK,KAAK28I,qBAAuB38I,KAAK68I,YAC5D,UAAnB36H,EAAQwrE,QAAsBquD,EAAWlhJ,SACzCmF,KAAK9D,IAAM8D,KAAK0lH,UAAYq2B,EAAW,GACvC/7I,KAAK7D,IAAM6D,KAAKylH,UAAYs2B,EAAWA,EAAWlhJ,OAAS,IAE/D,MAAMqB,EAAM8D,KAAK9D,IAEX2tF,ED96UV,SAAwB17D,EAAQjyB,EAAKC,GACrC,IAAIqhB,EAAQ,EACRC,EAAM0Q,EAAOtzB,OACjB,KAAM2iB,EAAQC,GAAO0Q,EAAO3Q,GAASthB,GACjCshB,IAEJ,KAAMC,EAAMD,GAAS2Q,EAAO1Q,EAAM,GAAKthB,GACnCshB,IAEJ,OAAOD,EAAQ,GAAKC,EAAM0Q,EAAOtzB,OAASszB,EAAOjpB,MAAMsY,EAAOC,GAAO0Q,CACzE,CCo6UsB2uH,CAAef,EAAY7/I,EAD7B8D,KAAK7D,KAQjB,OANA6D,KAAKq8I,MAAQO,EAAS1/G,OAAS0lF,EAAS/zB,SAAW6sD,GAA0BkB,EAASjB,QAAS37I,KAAK9D,IAAK8D,KAAK7D,IAAK6D,KAAK+8I,kBAAkB7gJ,IAnKjJ,SAAoCkwF,EAAOo8B,EAAUmzB,EAASz/I,EAAKC,GAChE,IAAI,IAAIxB,EAAI0gJ,GAAMxgJ,OAAS,EAAGF,GAAK0gJ,GAAM72I,QAAQm3I,GAAUhhJ,IAAI,CAC3D,MAAMuiC,EAAOm+G,GAAM1gJ,GACnB,GAAIygJ,GAAUl+G,GAAM4wC,QAAUse,EAAMovD,SAASrxH,KAAKhuB,EAAKD,EAAKghC,IAASsrF,EAAW,EAC5E,OAAOtrF,CAEf,CACA,OAAOm+G,GAAMM,EAAUN,GAAM72I,QAAQm3I,GAAW,EACpD,CA2J0JqB,CAA2Bh9I,KAAM6pF,EAAMhvF,OAAQ+hJ,EAASjB,QAAS37I,KAAK9D,IAAK8D,KAAK7D,MAClO6D,KAAKs8I,WAAc15B,EAASrtE,MAAM+tE,SAA0B,SAAftjH,KAAKq8I,MA3JzD,SAA4Bn/G,GACzB,IAAI,IAAIviC,EAAI0gJ,GAAM72I,QAAQ04B,GAAQ,EAAGijD,EAAOk7D,GAAMxgJ,OAAQF,EAAIwlF,IAAQxlF,EAClE,GAAIygJ,GAAUC,GAAM1gJ,IAAImzE,OACpB,OAAOutE,GAAM1gJ,EAGzB,CAqJyFsiJ,CAAmBj9I,KAAKq8I,YAApCj/I,EACrE4C,KAAKk9I,YAAYnB,GACb75H,EAAQ89D,SACR6J,EAAM7J,UAEHg8D,GAAoBh8I,KAAM6pF,EAAO7pF,KAAKs8I,WACjD,CACA,aAAA30B,GACQ3nH,KAAKkiB,QAAQi7H,qBACbn9I,KAAKk9I,YAAYl9I,KAAK6pF,MAAM9kF,KAAK09F,IAAQA,EAAKpmG,QAEtD,CACH,WAAA6gJ,CAAYnB,EAAa,IAClB,IAEInuH,EAAOyE,EAFP7U,EAAQ,EACRC,EAAM,EAENzd,KAAKkiB,QAAQ6qB,QAAUgvG,EAAWlhJ,SAClC+yB,EAAQ5tB,KAAKo9I,mBAAmBrB,EAAW,IAEvCv+H,EADsB,IAAtBu+H,EAAWlhJ,OACH,EAAI+yB,GAEH5tB,KAAKo9I,mBAAmBrB,EAAW,IAAMnuH,GAAS,EAE/DyE,EAAOryB,KAAKo9I,mBAAmBrB,EAAWA,EAAWlhJ,OAAS,IAE1D4iB,EADsB,IAAtBs+H,EAAWlhJ,OACLw3B,GAECA,EAAOryB,KAAKo9I,mBAAmBrB,EAAWA,EAAWlhJ,OAAS,KAAO,GAGpF,MAAMoxH,EAAQ8vB,EAAWlhJ,OAAS,EAAI,GAAM,IAC5C2iB,EAAQymE,GAAYzmE,EAAO,EAAGyuG,GAC9BxuG,EAAMwmE,GAAYxmE,EAAK,EAAGwuG,GAC1BjsH,KAAKu8I,SAAW,CACZ/+H,QACAC,MACAylF,OAAQ,GAAK1lF,EAAQ,EAAIC,GAEjC,CACH,SAAAo/H,GACO,MAAMtB,EAAUv7I,KAAKw7I,SACft/I,EAAM8D,KAAK9D,IACXC,EAAM6D,KAAK7D,IACX+lB,EAAUliB,KAAKkiB,QACf06H,EAAW16H,EAAQlH,KACnBw6B,EAAQonG,EAAS1/G,MAAQw+G,GAA0BkB,EAASjB,QAASz/I,EAAKC,EAAK6D,KAAK+8I,kBAAkB7gJ,IACtGg7I,EAAWx3D,EAAex9D,EAAQ2nE,MAAMqtD,SAAU,GAClD95G,EAAoB,SAAVoY,GAAmBonG,EAASt/G,WACtC+/G,EAAa96D,GAASnlD,KAAwB,IAAZA,EAClCysD,EAAQ,CAAC,EACf,IACI7uE,EAAMwL,EADNoH,EAAQ1xB,EAMZ,GAJImhJ,IACAzvH,GAAS2tH,EAAQp+G,QAAQvP,EAAO,UAAWwP,IAE/CxP,GAAS2tH,EAAQp+G,QAAQvP,EAAOyvH,EAAa,MAAQ7nG,GACjD+lG,EAAQpxH,KAAKhuB,EAAKD,EAAKs5C,GAAS,IAAS0hG,EACzC,MAAM,IAAI7yI,MAAMnI,EAAM,QAAUC,EAAM,uCAAyC+6I,EAAW,IAAM1hG,GAEpG,MAAMumG,EAAsC,SAAzB75H,EAAQ2nE,MAAMlqF,QAAqBK,KAAKs9I,oBAC3D,IAAItiI,EAAO4S,EAAOpH,EAAQ,EAAGxL,EAAO7e,EAAK6e,GAAQugI,EAAQ/yI,IAAIwS,EAAMk8H,EAAU1hG,GAAQhvB,IACjFs1H,GAAQjyD,EAAO7uE,EAAM+gI,GAKzB,OAHI/gI,IAAS7e,GAA0B,UAAnB+lB,EAAQwrE,QAAgC,IAAVlnE,GAC9Cs1H,GAAQjyD,EAAO7uE,EAAM+gI,GAElB1gJ,OAAOmqB,KAAKqkE,GAAOh9D,KAAKyuH,IAAQv2I,KAAK7J,IAAKA,GACrD,CACH,gBAAAkxG,CAAiB/vG,GACV,MAAMk/I,EAAUv7I,KAAKw7I,SACfoB,EAAW58I,KAAKkiB,QAAQlH,KAC9B,OAAI4hI,EAASW,cACFhC,EAAQx+G,OAAO1gC,EAAOugJ,EAASW,eAEnChC,EAAQx+G,OAAO1gC,EAAOugJ,EAASR,eAAengH,SACzD,CACH,MAAAc,CAAO1gC,EAAO0gC,GACP,MACMD,EADU98B,KAAKkiB,QACGlH,KAAKohI,eACvBl/G,EAAOl9B,KAAKq8I,MACZmB,EAAMzgH,GAAUD,EAAQI,GAC9B,OAAOl9B,KAAKw7I,SAASz+G,OAAO1gC,EAAOmhJ,EACvC,CACH,mBAAAC,CAAoBziI,EAAMzL,EAAOs6E,EAAO9sD,GACjC,MAAM7a,EAAUliB,KAAKkiB,QACfqnE,EAAYrnE,EAAQ2nE,MAAMvkE,SAChC,GAAIikE,EACA,OAAOjkE,EAASikE,EAAW,CACvBvuE,EACAzL,EACAs6E,GACD7pF,MAEP,MAAM88B,EAAU5a,EAAQlH,KAAKohI,eACvBl/G,EAAOl9B,KAAKq8I,MACZJ,EAAYj8I,KAAKs8I,WACjBoB,EAAcxgH,GAAQJ,EAAQI,GAC9BygH,EAAc1B,GAAan/G,EAAQm/G,GACnCx5C,EAAO5Y,EAAMt6E,GACbgmC,EAAQ0mG,GAAa0B,GAAel7C,GAAQA,EAAKltD,MACvD,OAAOv1C,KAAKw7I,SAASz+G,OAAO/hB,EAAM+hB,IAAWwY,EAAQooG,EAAcD,GACvE,CACH,kBAAAp1B,CAAmBz+B,GACZ,IAAIlvF,EAAGwlF,EAAMsiB,EACb,IAAI9nG,EAAI,EAAGwlF,EAAO0J,EAAMhvF,OAAQF,EAAIwlF,IAAQxlF,EACxC8nG,EAAO5Y,EAAMlvF,GACb8nG,EAAK/oE,MAAQ15B,KAAKy9I,oBAAoBh7C,EAAKpmG,MAAO1B,EAAGkvF,EAE7D,CACH,kBAAAuzD,CAAmB/gJ,GACZ,OAAiB,OAAVA,EAAiBmvG,KAAOnvG,EAAQ2D,KAAK9D,MAAQ8D,KAAK7D,IAAM6D,KAAK9D,IACxE,CACH,gBAAA+pF,CAAiB5pF,GACV,MAAMi6C,EAAUt2C,KAAKu8I,SACfx5G,EAAM/iC,KAAKo9I,mBAAmB/gJ,GACpC,OAAO2D,KAAKy3G,oBAAoBnhE,EAAQ94B,MAAQulB,GAAOuT,EAAQ4sD,OACnE,CACH,gBAAAyU,CAAiBznB,GACV,MAAM55C,EAAUt2C,KAAKu8I,SACfx5G,EAAM/iC,KAAK2qH,mBAAmBz6B,GAAS55C,EAAQ4sD,OAAS5sD,EAAQ74B,IACtE,OAAOzd,KAAK9D,IAAM6mC,GAAO/iC,KAAK7D,IAAM6D,KAAK9D,IAC7C,CACH,aAAA0hJ,CAAclkH,GACP,MAAMmkH,EAAY79I,KAAKkiB,QAAQ2nE,MACzBi0D,EAAiB99I,KAAK4lB,IAAI4pE,YAAY91D,GAAO2pB,MAC7C+/B,EAAQX,GAAUziF,KAAKk2G,eAAiB2nC,EAAUpvD,YAAcovD,EAAUrvD,aAC1EuvD,EAAczsI,KAAKw2E,IAAI1E,GACvB46D,EAAc1sI,KAAKu1E,IAAIzD,GACvB66D,EAAej+I,KAAKwqH,wBAAwB,GAAGj6G,KACrD,MAAO,CACH6/D,EAAG0tE,EAAiBC,EAAcE,EAAeD,EACjD99G,EAAG49G,EAAiBE,EAAcC,EAAeF,EAEzD,CACH,iBAAAhB,CAAkBmB,GACX,MAAMtB,EAAW58I,KAAKkiB,QAAQlH,KACxBohI,EAAiBQ,EAASR,eAC1Br/G,EAASq/G,EAAeQ,EAAS1/G,OAASk/G,EAAelgH,YACzDiiH,EAAen+I,KAAKy9I,oBAAoBS,EAAa,EAAGlC,GAAoBh8I,KAAM,CACpFk+I,GACDl+I,KAAKs8I,YAAav/G,GACfxsB,EAAOvQ,KAAK49I,cAAcO,GAC1BvC,EAAWtqI,KAAKwtB,MAAM9+B,KAAKk2G,eAAiBl2G,KAAKqjD,MAAQ9yC,EAAK6/D,EAAIpwE,KAAKojD,OAAS7yC,EAAK2vB,GAAK,EAChG,OAAO07G,EAAW,EAAIA,EAAW,CACrC,CACH,iBAAA0B,GACO,IACI3iJ,EAAGwlF,EADH47D,EAAa/7I,KAAKqvG,OAAO/oG,MAAQ,GAErC,GAAIy1I,EAAWlhJ,OACX,OAAOkhJ,EAEX,MAAM71B,EAAQlmH,KAAKmmG,0BACnB,GAAInmG,KAAKw8I,aAAet2B,EAAMrrH,OAC1B,OAAOmF,KAAKqvG,OAAO/oG,KAAO4/G,EAAM,GAAG7f,WAAW4F,mBAAmBjsG,MAErE,IAAIrF,EAAI,EAAGwlF,EAAO+lC,EAAMrrH,OAAQF,EAAIwlF,IAAQxlF,EACxCohJ,EAAaA,EAAW/gJ,OAAOkrH,EAAMvrH,GAAG0rG,WAAW4F,mBAAmBjsG,OAE1E,OAAOA,KAAKqvG,OAAO/oG,KAAOtG,KAAKgpE,UAAU+yE,EAC7C,CACH,kBAAAY,GACO,MAAMZ,EAAa/7I,KAAKqvG,OAAOtE,QAAU,GACzC,IAAIpwG,EAAGwlF,EACP,GAAI47D,EAAWlhJ,OACX,OAAOkhJ,EAEX,MAAMhxC,EAAS/qG,KAAKgrG,YACpB,IAAIrwG,EAAI,EAAGwlF,EAAO4qB,EAAOlwG,OAAQF,EAAIwlF,IAAQxlF,EACzCohJ,EAAW//I,KAAK6H,GAAM7D,KAAM+qG,EAAOpwG,KAEvC,OAAOqF,KAAKqvG,OAAOtE,OAAS/qG,KAAKw8I,YAAcT,EAAa/7I,KAAKgpE,UAAU+yE,EAC/E,CACH,SAAA/yE,CAAU76C,GACH,OAAO02D,GAAa12D,EAAOtB,KAAKyuH,IACpC,EAGJ,SAAS,GAAYl3D,EAAO1pF,EAAKslF,GAC7B,IAEIo+D,EAAYC,EAAYC,EAAYC,EAFpChkG,EAAK,EACLC,EAAK4pC,EAAMvpF,OAAS,EAEpBmlF,GACItlF,GAAO0pF,EAAM7pC,GAAIxX,KAAOroC,GAAO0pF,EAAM5pC,GAAIzX,OACtCwX,KAAKC,MAAQ8pC,GAAaF,EAAO,MAAO1pF,MAE5CqoC,IAAKq7G,EAAapjI,KAAMsjI,GAAgBl6D,EAAM7pC,MAC9CxX,IAAKs7G,EAAarjI,KAAMujI,GAAgBn6D,EAAM5pC,MAE7C9/C,GAAO0pF,EAAM7pC,GAAIv/B,MAAQtgB,GAAO0pF,EAAM5pC,GAAIx/B,QACvCu/B,KAAKC,MAAQ8pC,GAAaF,EAAO,OAAQ1pF,MAE7CsgB,KAAMojI,EAAar7G,IAAKu7G,GAAgBl6D,EAAM7pC,MAC9Cv/B,KAAMqjI,EAAat7G,IAAKw7G,GAAgBn6D,EAAM5pC,KAErD,MAAMgkG,EAAOH,EAAaD,EAC1B,OAAOI,EAAOF,GAAcC,EAAaD,IAAe5jJ,EAAM0jJ,GAAcI,EAAOF,CACvF,CA0FA,IAAIjyD,GAAsBhxF,OAAO+xG,OAAO,CACxCmI,UAAW,KACXkpC,cApgDA,cAA4Bx5B,GACxB1d,UAAY,WACfA,gBAAkB,CACX1d,MAAO,CACHvkE,SAAU8vH,KAGlB,WAAAhqH,CAAYi4E,GACRsO,MAAMtO,GACLrjG,KAAKy2I,iBAAcr5I,EACpB4C,KAAK22I,YAAc,EACnB32I,KAAK0+I,aAAe,EACxB,CACA,IAAAl4G,CAAK4qF,GACD,MAAM9kG,EAAQtsB,KAAK0+I,aACnB,GAAIpyH,EAAMzxB,OAAQ,CACd,MAAMkwG,EAAS/qG,KAAKgrG,YACpB,IAAK,MAAM,MAAEz7F,EAAM,MAAEmqB,KAAYpN,EACzBy+E,EAAOx7F,KAAWmqB,GAClBqxE,EAAOl/E,OAAOtc,EAAO,GAG7BvP,KAAK0+I,aAAe,EACxB,CACA/sC,MAAMnrE,KAAK4qF,EACf,CACA,KAAAvtH,CAAM+oG,EAAKr9F,GACP,GAAIgwE,EAAcqtB,GACd,OAAO,KAEX,MAAM7B,EAAS/qG,KAAKgrG,YAEpB,MAxCW,EAACz7F,EAAOpT,IAAgB,OAAVoT,EAAiB,KAAO00E,GAAY3yE,KAAKwwB,MAAMvyB,GAAQ,EAAGpT,GAwC5EwoH,CADPp1G,EAAQ3N,SAAS2N,IAAUw7F,EAAOx7F,KAAWq9F,EAAMr9F,EAAQ0lI,GAAelqC,EAAQ6B,EAAKltB,EAAenwE,EAAOq9F,GAAM5sG,KAAK0+I,cAC/F3zC,EAAOlwG,OAAS,EAC7C,CACA,mBAAAisH,GACI,MAAM,WAAEhhC,EAAW,WAAEC,GAAgB/lF,KAAKgmF,gBAC1C,IAAI,IAAE9pF,EAAI,IAAEC,GAAS6D,KAAKyrG,WAAU,GACR,UAAxBzrG,KAAKkiB,QAAQwrE,SACR5H,IACD5pF,EAAM,GAEL6pF,IACD5pF,EAAM6D,KAAKgrG,YAAYnwG,OAAS,IAGxCmF,KAAK9D,IAAMA,EACX8D,KAAK7D,IAAMA,CACf,CACA,UAAAirH,GACI,MAAMlrH,EAAM8D,KAAK9D,IACXC,EAAM6D,KAAK7D,IACX4wC,EAAS/sC,KAAKkiB,QAAQ6qB,OACtB88C,EAAQ,GACd,IAAIkhB,EAAS/qG,KAAKgrG,YAClBD,EAAiB,IAAR7uG,GAAaC,IAAQ4uG,EAAOlwG,OAAS,EAAIkwG,EAASA,EAAO7lG,MAAMhJ,EAAKC,EAAM,GACnF6D,KAAK22I,YAAcrlI,KAAKnV,IAAI4uG,EAAOlwG,QAAUkyC,EAAS,EAAI,GAAI,GAC9D/sC,KAAKy2I,YAAcz2I,KAAK9D,KAAO6wC,EAAS,GAAM,GAC9C,IAAI,IAAI1wC,EAAQH,EAAKG,GAASF,EAAKE,IAC/BwtF,EAAM7tF,KAAK,CACPK,UAGR,OAAOwtF,CACX,CACA,gBAAAuiB,CAAiB/vG,GACb,OAAO+4I,GAAkB55I,KAAKwE,KAAM3D,EACxC,CACH,SAAA0hD,GACO4zD,MAAM5zD,YACD/9C,KAAKk2G,iBACNl2G,KAAK+5G,gBAAkB/5G,KAAK+5G,eAEpC,CACA,gBAAA9zB,CAAiB5pF,GAIb,MAHqB,kBAAVA,IACPA,EAAQ2D,KAAK6D,MAAMxH,IAEN,OAAVA,EAAiBmvG,IAAMxrG,KAAKy3G,oBAAoBp7G,EAAQ2D,KAAKy2I,aAAez2I,KAAK22I,YAC5F,CACA,eAAAhnC,CAAgBpgG,GACZ,MAAMs6E,EAAQ7pF,KAAK6pF,MACnB,OAAIt6E,EAAQ,GAAKA,EAAQs6E,EAAMhvF,OAAS,EAC7B,KAEJmF,KAAKimF,iBAAiB4D,EAAMt6E,GAAOlT,MAC9C,CACA,gBAAAs7G,CAAiBznB,GACb,OAAO5+E,KAAKwwB,MAAM9hC,KAAKy2I,YAAcz2I,KAAK2qH,mBAAmBz6B,GAASlwF,KAAK22I,YAC/E,CACA,YAAA1gC,GACI,OAAOj2G,KAAKkjD,MAChB,GA06CJk0F,YAAaA,GACba,iBAAkBA,GAClBmC,kBAAmBA,GACnB+B,UAAWA,GACXwC,gBAhGA,cAA8BxC,GAC1B50C,UAAY,aACfA,gBAAkB40C,GAAUxzH,SAC5B,WAAAyC,CAAY7oB,GACLovG,MAAMpvG,GACLvC,KAAK4+I,OAAS,GACd5+I,KAAK6+I,aAAUzhJ,EACf4C,KAAK8+I,iBAAc1hJ,CACxB,CACH,WAAA8/I,GACO,MAAMnB,EAAa/7I,KAAK++I,yBAClB36D,EAAQpkF,KAAK4+I,OAAS5+I,KAAKg/I,iBAAiBjD,GAClD/7I,KAAK6+I,QAAU,GAAYz6D,EAAOpkF,KAAK9D,KACvC8D,KAAK8+I,YAAc,GAAY16D,EAAOpkF,KAAK7D,KAAO6D,KAAK6+I,QACvDltC,MAAMurC,YAAYnB,EACtB,CACH,gBAAAiD,CAAiBjD,GACV,MAAM,IAAE7/I,EAAI,IAAEC,GAAS6D,KACjBg5D,EAAQ,GACRorB,EAAQ,GACd,IAAIzpF,EAAGwlF,EAAMtjE,EAAMrS,EAAMgF,EACzB,IAAI7U,EAAI,EAAGwlF,EAAO47D,EAAWlhJ,OAAQF,EAAIwlF,IAAQxlF,EAC7C6P,EAAOuxI,EAAWphJ,GACd6P,GAAQtO,GAAOsO,GAAQrO,GACvB68D,EAAMh9D,KAAKwO,GAGnB,GAAIwuD,EAAMn+D,OAAS,EACf,MAAO,CACH,CACImgB,KAAM9e,EACN6mC,IAAK,GAET,CACI/nB,KAAM7e,EACN4mC,IAAK,IAIjB,IAAIpoC,EAAI,EAAGwlF,EAAOnnB,EAAMn+D,OAAQF,EAAIwlF,IAAQxlF,EACxC6U,EAAOwpD,EAAMr+D,EAAI,GACjBkiB,EAAOm8C,EAAMr+D,EAAI,GACjB6P,EAAOwuD,EAAMr+D,GACT2W,KAAKwwB,OAAOtyB,EAAOqN,GAAQ,KAAOrS,GAClC45E,EAAMpoF,KAAK,CACPgf,KAAMxQ,EACNu4B,IAAKpoC,GAAKwlF,EAAO,KAI7B,OAAOiE,CACX,CACH,SAAAy4D,GACO,MAAM3gJ,EAAM8D,KAAK9D,IACXC,EAAM6D,KAAK7D,IACjB,IAAI4/I,EAAapqC,MAAM2rC,oBAOvB,OANKvB,EAAWlqH,SAAS31B,IAAS6/I,EAAWlhJ,QACzCkhJ,EAAWlwH,OAAO,EAAG,EAAG3vB,GAEvB6/I,EAAWlqH,SAAS11B,IAA8B,IAAtB4/I,EAAWlhJ,QACxCkhJ,EAAW//I,KAAKG,GAEb4/I,EAAWlvH,MAAK,CAACxM,EAAGxM,IAAIwM,EAAIxM,GACvC,CACH,sBAAAkrI,GACO,IAAIhD,EAAa/7I,KAAKqvG,OAAO1nF,KAAO,GACpC,GAAIo0H,EAAWlhJ,OACX,OAAOkhJ,EAEX,MAAMz1I,EAAOtG,KAAKs9I,oBACZ5jH,EAAQ15B,KAAK28I,qBAOnB,OALIZ,EADAz1I,EAAKzL,QAAU6+B,EAAM7+B,OACRmF,KAAKgpE,UAAU1iE,EAAKtL,OAAO0+B,IAE3BpzB,EAAKzL,OAASyL,EAAOozB,EAEtCqiH,EAAa/7I,KAAKqvG,OAAO1nF,IAAMo0H,EACxBA,CACX,CACH,kBAAAqB,CAAmB/gJ,GACZ,OAAQ,GAAY2D,KAAK4+I,OAAQviJ,GAAS2D,KAAK6+I,SAAW7+I,KAAK8+I,WACnE,CACH,gBAAAnnC,CAAiBznB,GACV,MAAM55C,EAAUt2C,KAAKu8I,SACf7xB,EAAU1qH,KAAK2qH,mBAAmBz6B,GAAS55C,EAAQ4sD,OAAS5sD,EAAQ74B,IAC1E,OAAO,GAAYzd,KAAK4+I,OAAQl0B,EAAU1qH,KAAK8+I,YAAc9+I,KAAK6+I,SAAS,EAC/E,KAaJ,MAAMI,GAAgB,CAClB3pC,GACA,GACAp2G,GACAmtF","sources":["webpack://app/./node_modules/@bugsnag/browser/dist/bugsnag.js","webpack://app/./node_modules/@bugsnag/js/browser/notifier.js","webpack://app/./node_modules/backbone/backbone.js","webpack://app/./node_modules/bootbox/bootbox.js","webpack://app/./node_modules/chartjs-adapter-moment/dist/chartjs-adapter-moment.esm.js","webpack://app/./node_modules/jquery-color/dist/jquery.color.js","webpack://app/./node_modules/jquery-deparam/jquery-deparam.js","webpack://app/./node_modules/jquery-migrate/dist/jquery-migrate.js","webpack://app/./node_modules/jquery-ujs/src/rails.js","webpack://app/./node_modules/jquery.growl/javascripts/jquery.growl.js","webpack://app/./node_modules/moment-timezone/index.js","webpack://app/./node_modules/moment-timezone/moment-timezone.js","webpack://app/./node_modules/nprogress/nprogress.js","webpack://app/./node_modules/sortablejs/modular/sortable.esm.js","webpack://app/./node_modules/timeme.js/timeme.js","webpack://app/./node_modules/urijs/src/IPv6.js","webpack://app/./node_modules/urijs/src/SecondLevelDomains.js","webpack://app/./node_modules/urijs/src/URI.js","webpack://app/./node_modules/urijs/src/punycode.js","webpack://app/./node_modules/chart.js/auto/auto.js","webpack://app/./node_modules/@kurkle/color/dist/color.esm.js","webpack://app/./node_modules/chart.js/dist/chunks/helpers.segment.js","webpack://app/./node_modules/chart.js/dist/chart.js"],"sourcesContent":["(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.Bugsnag = f()}})(function(){var define,module,exports;\nvar _$breadcrumbTypes_8 = ['navigation', 'request', 'process', 'log', 'user', 'state', 'error', 'manual'];\n\n// Array#reduce\nvar _$reduce_17 = function (arr, fn, accum) {\n var val = accum;\n\n for (var i = 0, len = arr.length; i < len; i++) {\n val = fn(val, arr[i], i, arr);\n }\n\n return val;\n};\n\n/* removed: var _$reduce_17 = require('./reduce'); */; // Array#filter\n\n\nvar _$filter_12 = function (arr, fn) {\n return _$reduce_17(arr, function (accum, item, i, arr) {\n return !fn(item, i, arr) ? accum : accum.concat(item);\n }, []);\n};\n\n/* removed: var _$reduce_17 = require('./reduce'); */; // Array#includes\n\n\nvar _$includes_13 = function (arr, x) {\n return _$reduce_17(arr, function (accum, item, i, arr) {\n return accum === true || item === x;\n }, false);\n};\n\n// Array#isArray\nvar _$isArray_14 = function (obj) {\n return Object.prototype.toString.call(obj) === '[object Array]';\n};\n\n/* eslint-disable-next-line no-prototype-builtins */\nvar _hasDontEnumBug = !{\n toString: null\n}.propertyIsEnumerable('toString');\n\nvar _dontEnums = ['toString', 'toLocaleString', 'valueOf', 'hasOwnProperty', 'isPrototypeOf', 'propertyIsEnumerable', 'constructor']; // Object#keys\n\nvar _$keys_15 = function (obj) {\n // stripped down version of\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/Keys\n var result = [];\n var prop;\n\n for (prop in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, prop)) result.push(prop);\n }\n\n if (!_hasDontEnumBug) return result;\n\n for (var i = 0, len = _dontEnums.length; i < len; i++) {\n if (Object.prototype.hasOwnProperty.call(obj, _dontEnums[i])) result.push(_dontEnums[i]);\n }\n\n return result;\n};\n\nvar _$intRange_24 = function (min, max) {\n if (min === void 0) {\n min = 1;\n }\n\n if (max === void 0) {\n max = Infinity;\n }\n\n return function (value) {\n return typeof value === 'number' && parseInt('' + value, 10) === value && value >= min && value <= max;\n };\n};\n\n/* removed: var _$filter_12 = require('../es-utils/filter'); */;\n\n/* removed: var _$isArray_14 = require('../es-utils/is-array'); */;\n\nvar _$listOfFunctions_25 = function (value) {\n return typeof value === 'function' || _$isArray_14(value) && _$filter_12(value, function (f) {\n return typeof f === 'function';\n }).length === value.length;\n};\n\nvar _$stringWithLength_26 = function (value) {\n return typeof value === 'string' && !!value.length;\n};\n\nvar _$config_5 = {};\n/* removed: var _$filter_12 = require('./lib/es-utils/filter'); */;\n\n/* removed: var _$reduce_17 = require('./lib/es-utils/reduce'); */;\n\n/* removed: var _$keys_15 = require('./lib/es-utils/keys'); */;\n\n/* removed: var _$isArray_14 = require('./lib/es-utils/is-array'); */;\n\n/* removed: var _$includes_13 = require('./lib/es-utils/includes'); */;\n\n/* removed: var _$intRange_24 = require('./lib/validators/int-range'); */;\n\n/* removed: var _$stringWithLength_26 = require('./lib/validators/string-with-length'); */;\n\n/* removed: var _$listOfFunctions_25 = require('./lib/validators/list-of-functions'); */;\n\n/* removed: var _$breadcrumbTypes_8 = require('./lib/breadcrumb-types'); */;\n\nvar defaultErrorTypes = function () {\n return {\n unhandledExceptions: true,\n unhandledRejections: true\n };\n};\n\n_$config_5.schema = {\n apiKey: {\n defaultValue: function () {\n return null;\n },\n message: 'is required',\n validate: _$stringWithLength_26\n },\n appVersion: {\n defaultValue: function () {\n return undefined;\n },\n message: 'should be a string',\n validate: function (value) {\n return value === undefined || _$stringWithLength_26(value);\n }\n },\n appType: {\n defaultValue: function () {\n return undefined;\n },\n message: 'should be a string',\n validate: function (value) {\n return value === undefined || _$stringWithLength_26(value);\n }\n },\n autoDetectErrors: {\n defaultValue: function () {\n return true;\n },\n message: 'should be true|false',\n validate: function (value) {\n return value === true || value === false;\n }\n },\n enabledErrorTypes: {\n defaultValue: function () {\n return defaultErrorTypes();\n },\n message: 'should be an object containing the flags { unhandledExceptions:true|false, unhandledRejections:true|false }',\n allowPartialObject: true,\n validate: function (value) {\n // ensure we have an object\n if (typeof value !== 'object' || !value) return false;\n var providedKeys = _$keys_15(value);\n var defaultKeys = _$keys_15(defaultErrorTypes()); // ensure it only has a subset of the allowed keys\n\n if (_$filter_12(providedKeys, function (k) {\n return _$includes_13(defaultKeys, k);\n }).length < providedKeys.length) return false; // ensure all of the values are boolean\n\n if (_$filter_12(_$keys_15(value), function (k) {\n return typeof value[k] !== 'boolean';\n }).length > 0) return false;\n return true;\n }\n },\n onError: {\n defaultValue: function () {\n return [];\n },\n message: 'should be a function or array of functions',\n validate: _$listOfFunctions_25\n },\n onSession: {\n defaultValue: function () {\n return [];\n },\n message: 'should be a function or array of functions',\n validate: _$listOfFunctions_25\n },\n onBreadcrumb: {\n defaultValue: function () {\n return [];\n },\n message: 'should be a function or array of functions',\n validate: _$listOfFunctions_25\n },\n endpoints: {\n defaultValue: function () {\n return {\n notify: 'https://notify.bugsnag.com',\n sessions: 'https://sessions.bugsnag.com'\n };\n },\n message: 'should be an object containing endpoint URLs { notify, sessions }',\n validate: function (val) {\n return (// first, ensure it's an object\n val && typeof val === 'object' && // notify and sessions must always be set\n _$stringWithLength_26(val.notify) && _$stringWithLength_26(val.sessions) && // ensure no keys other than notify/session are set on endpoints object\n _$filter_12(_$keys_15(val), function (k) {\n return !_$includes_13(['notify', 'sessions'], k);\n }).length === 0\n );\n }\n },\n autoTrackSessions: {\n defaultValue: function (val) {\n return true;\n },\n message: 'should be true|false',\n validate: function (val) {\n return val === true || val === false;\n }\n },\n enabledReleaseStages: {\n defaultValue: function () {\n return null;\n },\n message: 'should be an array of strings',\n validate: function (value) {\n return value === null || _$isArray_14(value) && _$filter_12(value, function (f) {\n return typeof f === 'string';\n }).length === value.length;\n }\n },\n releaseStage: {\n defaultValue: function () {\n return 'production';\n },\n message: 'should be a string',\n validate: function (value) {\n return typeof value === 'string' && value.length;\n }\n },\n maxBreadcrumbs: {\n defaultValue: function () {\n return 25;\n },\n message: 'should be a number ≤100',\n validate: function (value) {\n return _$intRange_24(0, 100)(value);\n }\n },\n enabledBreadcrumbTypes: {\n defaultValue: function () {\n return _$breadcrumbTypes_8;\n },\n message: \"should be null or a list of available breadcrumb types (\" + _$breadcrumbTypes_8.join(',') + \")\",\n validate: function (value) {\n return value === null || _$isArray_14(value) && _$reduce_17(value, function (accum, maybeType) {\n if (accum === false) return accum;\n return _$includes_13(_$breadcrumbTypes_8, maybeType);\n }, true);\n }\n },\n context: {\n defaultValue: function () {\n return undefined;\n },\n message: 'should be a string',\n validate: function (value) {\n return value === undefined || typeof value === 'string';\n }\n },\n user: {\n defaultValue: function () {\n return {};\n },\n message: 'should be an object with { id, email, name } properties',\n validate: function (value) {\n return value === null || value && _$reduce_17(_$keys_15(value), function (accum, key) {\n return accum && _$includes_13(['id', 'email', 'name'], key);\n }, true);\n }\n },\n metadata: {\n defaultValue: function () {\n return {};\n },\n message: 'should be an object',\n validate: function (value) {\n return typeof value === 'object' && value !== null;\n }\n },\n logger: {\n defaultValue: function () {\n return undefined;\n },\n message: 'should be null or an object with methods { debug, info, warn, error }',\n validate: function (value) {\n return !value || value && _$reduce_17(['debug', 'info', 'warn', 'error'], function (accum, method) {\n return accum && typeof value[method] === 'function';\n }, true);\n }\n },\n redactedKeys: {\n defaultValue: function () {\n return ['password'];\n },\n message: 'should be an array of strings|regexes',\n validate: function (value) {\n return _$isArray_14(value) && value.length === _$filter_12(value, function (s) {\n return typeof s === 'string' || s && typeof s.test === 'function';\n }).length;\n }\n },\n plugins: {\n defaultValue: function () {\n return [];\n },\n message: 'should be an array of plugin objects',\n validate: function (value) {\n return _$isArray_14(value) && value.length === _$filter_12(value, function (p) {\n return p && typeof p === 'object' && typeof p.load === 'function';\n }).length;\n }\n },\n featureFlags: {\n defaultValue: function () {\n return [];\n },\n message: 'should be an array of objects that have a \"name\" property',\n validate: function (value) {\n return _$isArray_14(value) && value.length === _$filter_12(value, function (feature) {\n return feature && typeof feature === 'object' && typeof feature.name === 'string';\n }).length;\n }\n }\n};\n\n// extends helper from babel\n// https://github.com/babel/babel/blob/916429b516e6466fd06588ee820e40e025d7f3a3/packages/babel-helpers/src/helpers.js#L377-L393\nvar _$assign_11 = function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\n/* removed: var _$reduce_17 = require('./reduce'); */; // Array#map\n\n\nvar _$map_16 = function (arr, fn) {\n return _$reduce_17(arr, function (accum, item, i, arr) {\n return accum.concat(fn(item, i, arr));\n }, []);\n};\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nvar schema = _$config_5.schema;\n\n/* removed: var _$map_16 = require('@bugsnag/core/lib/es-utils/map'); */;\n\n/* removed: var _$assign_11 = require('@bugsnag/core/lib/es-utils/assign'); */;\n\nvar _$config_1 = {\n releaseStage: _$assign_11({}, schema.releaseStage, {\n defaultValue: function () {\n if (/^localhost(:\\d+)?$/.test(window.location.host)) return 'development';\n return 'production';\n }\n }),\n appType: _extends({}, schema.appType, {\n defaultValue: function () {\n return 'browser';\n }\n }),\n logger: _$assign_11({}, schema.logger, {\n defaultValue: function () {\n return (// set logger based on browser capability\n typeof console !== 'undefined' && typeof console.debug === 'function' ? getPrefixedConsole() : undefined\n );\n }\n })\n};\n\nvar getPrefixedConsole = function () {\n var logger = {};\n var consoleLog = console.log;\n _$map_16(['debug', 'info', 'warn', 'error'], function (method) {\n var consoleMethod = console[method];\n logger[method] = typeof consoleMethod === 'function' ? consoleMethod.bind(console, '[bugsnag]') : consoleLog.bind(console, '[bugsnag]');\n });\n return logger;\n};\n\nvar Breadcrumb = /*#__PURE__*/function () {\n function Breadcrumb(message, metadata, type, timestamp) {\n if (timestamp === void 0) {\n timestamp = new Date();\n }\n\n this.type = type;\n this.message = message;\n this.metadata = metadata;\n this.timestamp = timestamp;\n }\n\n var _proto = Breadcrumb.prototype;\n\n _proto.toJSON = function toJSON() {\n return {\n type: this.type,\n name: this.message,\n timestamp: this.timestamp,\n metaData: this.metadata\n };\n };\n\n return Breadcrumb;\n}();\n\nvar _$Breadcrumb_3 = Breadcrumb;\n\nvar _$stackframe_34 = {};\n(function (root, factory) {\n 'use strict'; // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n\n if (typeof define === 'function' && define.amd) {\n define('stackframe', [], factory);\n } else if (typeof _$stackframe_34 === 'object') {\n _$stackframe_34 = factory();\n } else {\n root.StackFrame = factory();\n }\n})(this, function () {\n 'use strict';\n\n function _isNumber(n) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n }\n\n function _capitalize(str) {\n return str.charAt(0).toUpperCase() + str.substring(1);\n }\n\n function _getter(p) {\n return function () {\n return this[p];\n };\n }\n\n var booleanProps = ['isConstructor', 'isEval', 'isNative', 'isToplevel'];\n var numericProps = ['columnNumber', 'lineNumber'];\n var stringProps = ['fileName', 'functionName', 'source'];\n var arrayProps = ['args'];\n var props = booleanProps.concat(numericProps, stringProps, arrayProps);\n\n function StackFrame(obj) {\n if (obj instanceof Object) {\n for (var i = 0; i < props.length; i++) {\n if (obj.hasOwnProperty(props[i]) && obj[props[i]] !== undefined) {\n this['set' + _capitalize(props[i])](obj[props[i]]);\n }\n }\n }\n }\n\n StackFrame.prototype = {\n getArgs: function () {\n return this.args;\n },\n setArgs: function (v) {\n if (Object.prototype.toString.call(v) !== '[object Array]') {\n throw new TypeError('Args must be an Array');\n }\n\n this.args = v;\n },\n getEvalOrigin: function () {\n return this.evalOrigin;\n },\n setEvalOrigin: function (v) {\n if (v instanceof StackFrame) {\n this.evalOrigin = v;\n } else if (v instanceof Object) {\n this.evalOrigin = new StackFrame(v);\n } else {\n throw new TypeError('Eval Origin must be an Object or StackFrame');\n }\n },\n toString: function () {\n var functionName = this.getFunctionName() || '{anonymous}';\n var args = '(' + (this.getArgs() || []).join(',') + ')';\n var fileName = this.getFileName() ? '@' + this.getFileName() : '';\n var lineNumber = _isNumber(this.getLineNumber()) ? ':' + this.getLineNumber() : '';\n var columnNumber = _isNumber(this.getColumnNumber()) ? ':' + this.getColumnNumber() : '';\n return functionName + args + fileName + lineNumber + columnNumber;\n }\n };\n\n for (var i = 0; i < booleanProps.length; i++) {\n StackFrame.prototype['get' + _capitalize(booleanProps[i])] = _getter(booleanProps[i]);\n\n StackFrame.prototype['set' + _capitalize(booleanProps[i])] = function (p) {\n return function (v) {\n this[p] = Boolean(v);\n };\n }(booleanProps[i]);\n }\n\n for (var j = 0; j < numericProps.length; j++) {\n StackFrame.prototype['get' + _capitalize(numericProps[j])] = _getter(numericProps[j]);\n\n StackFrame.prototype['set' + _capitalize(numericProps[j])] = function (p) {\n return function (v) {\n if (!_isNumber(v)) {\n throw new TypeError(p + ' must be a Number');\n }\n\n this[p] = Number(v);\n };\n }(numericProps[j]);\n }\n\n for (var k = 0; k < stringProps.length; k++) {\n StackFrame.prototype['get' + _capitalize(stringProps[k])] = _getter(stringProps[k]);\n\n StackFrame.prototype['set' + _capitalize(stringProps[k])] = function (p) {\n return function (v) {\n this[p] = String(v);\n };\n }(stringProps[k]);\n }\n\n return StackFrame;\n});\n\nvar _$errorStackParser_31 = {};\n(function (root, factory) {\n 'use strict'; // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof _$errorStackParser_31 === 'object') {\n _$errorStackParser_31 = factory(_$stackframe_34);\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n})(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /^\\s*at .*(\\S+\\:\\d+|\\(native\\))/m;\n var SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\\[native code\\])?$/;\n return {\n /**\n * Given an Error object, extract the most information from it.\n *\n * @param {Error} error object\n * @return {Array} of StackFrames\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n // Separate line and column numbers from a string of the form: (URI:Line:Column)\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var regExp = /(.+?)(?:\\:(\\d+))?(?:\\:(\\d+))?$/;\n var parts = regExp.exec(urlLike.replace(/[\\(\\)]/g, ''));\n return [parts[1], parts[2] || undefined, parts[3] || undefined];\n },\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n var filtered = error.stack.split('\\n').filter(function (line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this);\n return filtered.map(function (line) {\n if (line.indexOf('(eval ') > -1) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n line = line.replace(/eval code/g, 'eval').replace(/(\\(eval at [^\\()]*)|(\\)\\,.*$)/g, '');\n }\n\n var sanitizedLine = line.replace(/^\\s+/, '').replace(/\\(eval code/g, '('); // capture and preseve the parenthesized location \"(/foo/my bar.js:12:87)\" in\n // case it has spaces in it, as the string is split on \\s+ later on\n\n var location = sanitizedLine.match(/ (\\((.+):(\\d+):(\\d+)\\)$)/); // remove the parenthesized location from the line, if it was matched\n\n sanitizedLine = location ? sanitizedLine.replace(location[0], '') : sanitizedLine;\n var tokens = sanitizedLine.split(/\\s+/).slice(1); // if a location was matched, pass it to extractLocation() otherwise pop the last token\n\n var locationParts = this.extractLocation(location ? location[1] : tokens.pop());\n var functionName = tokens.join(' ') || undefined;\n var fileName = ['eval', ''].indexOf(locationParts[0]) > -1 ? undefined : locationParts[0];\n return new StackFrame({\n functionName: functionName,\n fileName: fileName,\n lineNumber: locationParts[1],\n columnNumber: locationParts[2],\n source: line\n });\n }, this);\n },\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n var filtered = error.stack.split('\\n').filter(function (line) {\n return !line.match(SAFARI_NATIVE_CODE_REGEXP);\n }, this);\n return filtered.map(function (line) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n if (line.indexOf(' > eval') > -1) {\n line = line.replace(/ line (\\d+)(?: > eval line \\d+)* > eval\\:\\d+\\:\\d+/g, ':$1');\n }\n\n if (line.indexOf('@') === -1 && line.indexOf(':') === -1) {\n // Safari eval frames only have function names and nothing else\n return new StackFrame({\n functionName: line\n });\n } else {\n var functionNameRegex = /((.*\".+\"[^@]*)?[^@]*)(?:@)/;\n var matches = line.match(functionNameRegex);\n var functionName = matches && matches[1] ? matches[1] : undefined;\n var locationParts = this.extractLocation(line.replace(functionNameRegex, ''));\n return new StackFrame({\n functionName: functionName,\n fileName: locationParts[0],\n lineNumber: locationParts[1],\n columnNumber: locationParts[2],\n source: line\n });\n }\n }, this);\n },\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || e.message.indexOf('\\n') > -1 && e.message.split('\\n').length > e.stacktrace.split('\\n').length) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n\n if (match) {\n result.push(new StackFrame({\n fileName: match[2],\n lineNumber: match[1],\n source: lines[i]\n }));\n }\n }\n\n return result;\n },\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n\n if (match) {\n result.push(new StackFrame({\n functionName: match[3] || undefined,\n fileName: match[2],\n lineNumber: match[1],\n source: lines[i]\n }));\n }\n }\n\n return result;\n },\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n var filtered = error.stack.split('\\n').filter(function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) && !line.match(/^Error created at/);\n }, this);\n return filtered.map(function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = tokens.shift() || '';\n var functionName = functionCall.replace(//, '$2').replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n\n var args = argsRaw === undefined || argsRaw === '[arguments not available]' ? undefined : argsRaw.split(',');\n return new StackFrame({\n functionName: functionName,\n args: args,\n fileName: locationParts[0],\n lineNumber: locationParts[1],\n columnNumber: locationParts[2],\n source: line\n });\n }, this);\n }\n };\n});\n\nvar _$errorStackParser_10 = _$errorStackParser_31;\n\nvar _$safeJsonStringify_30 = function (data, replacer, space, opts) {\n var redactedKeys = opts && opts.redactedKeys ? opts.redactedKeys : [];\n var redactedPaths = opts && opts.redactedPaths ? opts.redactedPaths : [];\n return JSON.stringify(prepareObjForSerialization(data, redactedKeys, redactedPaths), replacer, space);\n};\n\nvar MAX_DEPTH = 20;\nvar MAX_EDGES = 25000;\nvar MIN_PRESERVED_DEPTH = 8;\nvar REPLACEMENT_NODE = '...';\n\nfunction isError(o) {\n return o instanceof Error || /^\\[object (Error|(Dom)?Exception)\\]$/.test(Object.prototype.toString.call(o));\n}\n\nfunction throwsMessage(err) {\n return '[Throws: ' + (err ? err.message : '?') + ']';\n}\n\nfunction find(haystack, needle) {\n for (var i = 0, len = haystack.length; i < len; i++) {\n if (haystack[i] === needle) return true;\n }\n\n return false;\n} // returns true if the string `path` starts with any of the provided `paths`\n\n\nfunction isDescendent(paths, path) {\n for (var i = 0, len = paths.length; i < len; i++) {\n if (path.indexOf(paths[i]) === 0) return true;\n }\n\n return false;\n}\n\nfunction shouldRedact(patterns, key) {\n for (var i = 0, len = patterns.length; i < len; i++) {\n if (typeof patterns[i] === 'string' && patterns[i].toLowerCase() === key.toLowerCase()) return true;\n if (patterns[i] && typeof patterns[i].test === 'function' && patterns[i].test(key)) return true;\n }\n\n return false;\n}\n\nfunction __isArray_30(obj) {\n return Object.prototype.toString.call(obj) === '[object Array]';\n}\n\nfunction safelyGetProp(obj, prop) {\n try {\n return obj[prop];\n } catch (err) {\n return throwsMessage(err);\n }\n}\n\nfunction prepareObjForSerialization(obj, redactedKeys, redactedPaths) {\n var seen = []; // store references to objects we have seen before\n\n var edges = 0;\n\n function visit(obj, path) {\n function edgesExceeded() {\n return path.length > MIN_PRESERVED_DEPTH && edges > MAX_EDGES;\n }\n\n edges++;\n if (path.length > MAX_DEPTH) return REPLACEMENT_NODE;\n if (edgesExceeded()) return REPLACEMENT_NODE;\n if (obj === null || typeof obj !== 'object') return obj;\n if (find(seen, obj)) return '[Circular]';\n seen.push(obj);\n\n if (typeof obj.toJSON === 'function') {\n try {\n // we're not going to count this as an edge because it\n // replaces the value of the currently visited object\n edges--;\n var fResult = visit(obj.toJSON(), path);\n seen.pop();\n return fResult;\n } catch (err) {\n return throwsMessage(err);\n }\n }\n\n var er = isError(obj);\n\n if (er) {\n edges--;\n var eResult = visit({\n name: obj.name,\n message: obj.message\n }, path);\n seen.pop();\n return eResult;\n }\n\n if (__isArray_30(obj)) {\n var aResult = [];\n\n for (var i = 0, len = obj.length; i < len; i++) {\n if (edgesExceeded()) {\n aResult.push(REPLACEMENT_NODE);\n break;\n }\n\n aResult.push(visit(obj[i], path.concat('[]')));\n }\n\n seen.pop();\n return aResult;\n }\n\n var result = {};\n\n try {\n for (var prop in obj) {\n if (!Object.prototype.hasOwnProperty.call(obj, prop)) continue;\n\n if (isDescendent(redactedPaths, path.join('.')) && shouldRedact(redactedKeys, prop)) {\n result[prop] = '[REDACTED]';\n continue;\n }\n\n if (edgesExceeded()) {\n result[prop] = REPLACEMENT_NODE;\n break;\n }\n\n result[prop] = visit(safelyGetProp(obj, prop), path.concat(prop));\n }\n } catch (e) {}\n\n seen.pop();\n return result;\n }\n\n return visit(obj, []);\n}\n\n/* removed: var _$map_16 = require('./es-utils/map'); */;\n\n/* removed: var _$filter_12 = require('./es-utils/filter'); */;\n\n/* removed: var _$isArray_14 = require('./es-utils/is-array'); */;\n\n/* removed: var _$safeJsonStringify_30 = require('@bugsnag/safe-json-stringify'); */;\n\nfunction add(existingFeatures, existingFeatureKeys, name, variant) {\n if (typeof name !== 'string') {\n return;\n }\n\n if (variant === undefined) {\n variant = null;\n } else if (variant !== null && typeof variant !== 'string') {\n variant = _$safeJsonStringify_30(variant);\n }\n\n var existingIndex = existingFeatureKeys[name];\n\n if (typeof existingIndex === 'number') {\n existingFeatures[existingIndex] = {\n name: name,\n variant: variant\n };\n return;\n }\n\n existingFeatures.push({\n name: name,\n variant: variant\n });\n existingFeatureKeys[name] = existingFeatures.length - 1;\n}\n\nfunction merge(existingFeatures, newFeatures, existingFeatureKeys) {\n if (!_$isArray_14(newFeatures)) {\n return;\n }\n\n for (var i = 0; i < newFeatures.length; ++i) {\n var feature = newFeatures[i];\n\n if (feature === null || typeof feature !== 'object') {\n continue;\n } // 'add' will handle if 'name' doesn't exist & 'variant' is optional\n\n\n add(existingFeatures, existingFeatureKeys, feature.name, feature.variant);\n }\n\n return existingFeatures;\n} // convert feature flags from a map of 'name -> variant' into the format required\n// by the Bugsnag Event API:\n// [{ featureFlag: 'name', variant: 'variant' }, { featureFlag: 'name 2' }]\n\n\nfunction toEventApi(featureFlags) {\n return _$map_16(_$filter_12(featureFlags, Boolean), function (_ref) {\n var name = _ref.name,\n variant = _ref.variant;\n var flag = {\n featureFlag: name\n }; // don't add a 'variant' property unless there's actually a value\n\n if (typeof variant === 'string') {\n flag.variant = variant;\n }\n\n return flag;\n });\n}\n\nfunction clear(features, featuresIndex, name) {\n var existingIndex = featuresIndex[name];\n\n if (typeof existingIndex === 'number') {\n features[existingIndex] = null;\n delete featuresIndex[name];\n }\n}\n\nvar _$featureFlagDelegate_18 = {\n add: add,\n clear: clear,\n merge: merge,\n toEventApi: toEventApi\n};\n\n// Given `err` which may be an error, does it have a stack property which is a string?\nvar _$hasStack_19 = function (err) {\n return !!err && (!!err.stack || !!err.stacktrace || !!err['opera#sourceloc']) && typeof (err.stack || err.stacktrace || err['opera#sourceloc']) === 'string' && err.stack !== err.name + \": \" + err.message;\n};\n\n/**\n * Expose `isError`.\n */\nvar _$isError_32 = __isError_32;\n/**\n * Test whether `value` is error object.\n *\n * @param {*} value\n * @returns {boolean}\n */\n\nfunction __isError_32(value) {\n switch (Object.prototype.toString.call(value)) {\n case '[object Error]':\n return true;\n\n case '[object Exception]':\n return true;\n\n case '[object DOMException]':\n return true;\n\n default:\n return value instanceof Error;\n }\n}\n\nvar _$iserror_20 = _$isError_32;\n\n/* removed: var _$assign_11 = require('./es-utils/assign'); */;\n\nvar __add_22 = function (state, section, keyOrObj, maybeVal) {\n var _updates;\n\n if (!section) return;\n var updates; // addMetadata(\"section\", null) -> clears section\n\n if (keyOrObj === null) return __clear_22(state, section); // normalise the two supported input types into object form\n\n if (typeof keyOrObj === 'object') updates = keyOrObj;\n if (typeof keyOrObj === 'string') updates = (_updates = {}, _updates[keyOrObj] = maybeVal, _updates); // exit if we don't have an updates object at this point\n\n if (!updates) return; // ensure a section with this name exists\n\n if (!state[section]) state[section] = {}; // merge the updates with the existing section\n\n state[section] = _$assign_11({}, state[section], updates);\n};\n\nvar get = function (state, section, key) {\n if (typeof section !== 'string') return undefined;\n\n if (!key) {\n return state[section];\n }\n\n if (state[section]) {\n return state[section][key];\n }\n\n return undefined;\n};\n\nvar __clear_22 = function (state, section, key) {\n if (typeof section !== 'string') return; // clear an entire section\n\n if (!key) {\n delete state[section];\n return;\n } // clear a single value from a section\n\n\n if (state[section]) {\n delete state[section][key];\n }\n};\n\nvar _$metadataDelegate_22 = {\n add: __add_22,\n get: get,\n clear: __clear_22\n};\n\nvar _$stackGenerator_33 = {};\n(function (root, factory) {\n 'use strict'; // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n\n if (typeof define === 'function' && define.amd) {\n define('stack-generator', ['stackframe'], factory);\n } else if (typeof _$stackGenerator_33 === 'object') {\n _$stackGenerator_33 = factory(_$stackframe_34);\n } else {\n root.StackGenerator = factory(root.StackFrame);\n }\n})(this, function (StackFrame) {\n return {\n backtrace: function StackGenerator$$backtrace(opts) {\n var stack = [];\n var maxStackSize = 10;\n\n if (typeof opts === 'object' && typeof opts.maxStackSize === 'number') {\n maxStackSize = opts.maxStackSize;\n }\n\n var curr = arguments.callee;\n\n while (curr && stack.length < maxStackSize && curr['arguments']) {\n // Allow V8 optimizations\n var args = new Array(curr['arguments'].length);\n\n for (var i = 0; i < args.length; ++i) {\n args[i] = curr['arguments'][i];\n }\n\n if (/function(?:\\s+([\\w$]+))+\\s*\\(/.test(curr.toString())) {\n stack.push(new StackFrame({\n functionName: RegExp.$1 || undefined,\n args: args\n }));\n } else {\n stack.push(new StackFrame({\n args: args\n }));\n }\n\n try {\n curr = curr.caller;\n } catch (e) {\n break;\n }\n }\n\n return stack;\n }\n };\n});\n\n/* removed: var _$errorStackParser_10 = require('./lib/error-stack-parser'); */;\n\n/* removed: var _$stackGenerator_33 = require('stack-generator'); */;\n\n/* removed: var _$hasStack_19 = require('./lib/has-stack'); */;\n\n/* removed: var _$map_16 = require('./lib/es-utils/map'); */;\n\n/* removed: var _$reduce_17 = require('./lib/es-utils/reduce'); */;\n\n/* removed: var _$filter_12 = require('./lib/es-utils/filter'); */;\n\n/* removed: var _$assign_11 = require('./lib/es-utils/assign'); */;\n\n/* removed: var _$metadataDelegate_22 = require('./lib/metadata-delegate'); */;\n\n/* removed: var _$featureFlagDelegate_18 = require('./lib/feature-flag-delegate'); */;\n\n/* removed: var _$iserror_20 = require('./lib/iserror'); */;\n\nvar Event = /*#__PURE__*/function () {\n function Event(errorClass, errorMessage, stacktrace, handledState, originalError) {\n if (stacktrace === void 0) {\n stacktrace = [];\n }\n\n if (handledState === void 0) {\n handledState = defaultHandledState();\n }\n\n this.apiKey = undefined;\n this.context = undefined;\n this.groupingHash = undefined;\n this.originalError = originalError;\n this._handledState = handledState;\n this.severity = this._handledState.severity;\n this.unhandled = this._handledState.unhandled;\n this.app = {};\n this.device = {};\n this.request = {};\n this.breadcrumbs = [];\n this.threads = [];\n this._metadata = {};\n this._features = [];\n this._featuresIndex = {};\n this._user = {};\n this._session = undefined;\n this.errors = [createBugsnagError(errorClass, errorMessage, Event.__type, stacktrace)]; // Flags.\n // Note these are not initialised unless they are used\n // to save unnecessary bytes in the browser bundle\n\n /* this.attemptImmediateDelivery, default: true */\n }\n\n var _proto = Event.prototype;\n\n _proto.addMetadata = function addMetadata(section, keyOrObj, maybeVal) {\n return _$metadataDelegate_22.add(this._metadata, section, keyOrObj, maybeVal);\n };\n\n _proto.getMetadata = function getMetadata(section, key) {\n return _$metadataDelegate_22.get(this._metadata, section, key);\n };\n\n _proto.clearMetadata = function clearMetadata(section, key) {\n return _$metadataDelegate_22.clear(this._metadata, section, key);\n };\n\n _proto.addFeatureFlag = function addFeatureFlag(name, variant) {\n if (variant === void 0) {\n variant = null;\n }\n\n _$featureFlagDelegate_18.add(this._features, this._featuresIndex, name, variant);\n };\n\n _proto.addFeatureFlags = function addFeatureFlags(featureFlags) {\n _$featureFlagDelegate_18.merge(this._features, featureFlags, this._featuresIndex);\n };\n\n _proto.getFeatureFlags = function getFeatureFlags() {\n return _$featureFlagDelegate_18.toEventApi(this._features);\n };\n\n _proto.clearFeatureFlag = function clearFeatureFlag(name) {\n _$featureFlagDelegate_18.clear(this._features, this._featuresIndex, name);\n };\n\n _proto.clearFeatureFlags = function clearFeatureFlags() {\n this._features = [];\n this._featuresIndex = {};\n };\n\n _proto.getUser = function getUser() {\n return this._user;\n };\n\n _proto.setUser = function setUser(id, email, name) {\n this._user = {\n id: id,\n email: email,\n name: name\n };\n };\n\n _proto.toJSON = function toJSON() {\n return {\n payloadVersion: '4',\n exceptions: _$map_16(this.errors, function (er) {\n return _$assign_11({}, er, {\n message: er.errorMessage\n });\n }),\n severity: this.severity,\n unhandled: this._handledState.unhandled,\n severityReason: this._handledState.severityReason,\n app: this.app,\n device: this.device,\n request: this.request,\n breadcrumbs: this.breadcrumbs,\n context: this.context,\n groupingHash: this.groupingHash,\n metaData: this._metadata,\n user: this._user,\n session: this._session,\n featureFlags: this.getFeatureFlags()\n };\n };\n\n return Event;\n}(); // takes a stacktrace.js style stackframe (https://github.com/stacktracejs/stackframe)\n// and returns a Bugsnag compatible stackframe (https://docs.bugsnag.com/api/error-reporting/#json-payload)\n\n\nvar formatStackframe = function (frame) {\n var f = {\n file: frame.fileName,\n method: normaliseFunctionName(frame.functionName),\n lineNumber: frame.lineNumber,\n columnNumber: frame.columnNumber,\n code: undefined,\n inProject: undefined\n }; // Some instances result in no file:\n // - calling notify() from chrome's terminal results in no file/method.\n // - non-error exception thrown from global code in FF\n // This adds one.\n\n if (f.lineNumber > -1 && !f.file && !f.method) {\n f.file = 'global code';\n }\n\n return f;\n};\n\nvar normaliseFunctionName = function (name) {\n return /^global code$/i.test(name) ? 'global code' : name;\n};\n\nvar defaultHandledState = function () {\n return {\n unhandled: false,\n severity: 'warning',\n severityReason: {\n type: 'handledException'\n }\n };\n};\n\nvar ensureString = function (str) {\n return typeof str === 'string' ? str : '';\n};\n\nfunction createBugsnagError(errorClass, errorMessage, type, stacktrace) {\n return {\n errorClass: ensureString(errorClass),\n errorMessage: ensureString(errorMessage),\n type: type,\n stacktrace: _$reduce_17(stacktrace, function (accum, frame) {\n var f = formatStackframe(frame); // don't include a stackframe if none of its properties are defined\n\n try {\n if (JSON.stringify(f) === '{}') return accum;\n return accum.concat(f);\n } catch (e) {\n return accum;\n }\n }, [])\n };\n}\n\nfunction getCauseStack(error) {\n if (error.cause) {\n return [error].concat(getCauseStack(error.cause));\n } else {\n return [error];\n }\n} // Helpers\n\n\nEvent.getStacktrace = function (error, errorFramesToSkip, backtraceFramesToSkip) {\n if (_$hasStack_19(error)) return _$errorStackParser_10.parse(error).slice(errorFramesToSkip); // error wasn't provided or didn't have a stacktrace so try to walk the callstack\n\n try {\n return _$filter_12(_$stackGenerator_33.backtrace(), function (frame) {\n return (frame.functionName || '').indexOf('StackGenerator$$') === -1;\n }).slice(1 + backtraceFramesToSkip);\n } catch (e) {\n return [];\n }\n};\n\nEvent.create = function (maybeError, tolerateNonErrors, handledState, component, errorFramesToSkip, logger) {\n if (errorFramesToSkip === void 0) {\n errorFramesToSkip = 0;\n }\n\n var _normaliseError = normaliseError(maybeError, tolerateNonErrors, component, logger),\n error = _normaliseError[0],\n internalFrames = _normaliseError[1];\n\n var event;\n\n try {\n var stacktrace = Event.getStacktrace(error, // if an error was created/throw in the normaliseError() function, we need to\n // tell the getStacktrace() function to skip the number of frames we know will\n // be from our own functions. This is added to the number of frames deep we\n // were told about\n internalFrames > 0 ? 1 + internalFrames + errorFramesToSkip : 0, // if there's no stacktrace, the callstack may be walked to generated one.\n // this is how many frames should be removed because they come from our library\n 1 + errorFramesToSkip);\n event = new Event(error.name, error.message, stacktrace, handledState, maybeError);\n } catch (e) {\n event = new Event(error.name, error.message, [], handledState, maybeError);\n }\n\n if (error.name === 'InvalidError') {\n event.addMetadata(\"\" + component, 'non-error parameter', makeSerialisable(maybeError));\n }\n\n if (error.cause) {\n var _event$errors;\n\n var causes = getCauseStack(error).slice(1);\n var normalisedCauses = _$map_16(causes, function (cause) {\n // Only get stacktrace for error causes that are a valid JS Error and already have a stack\n var stacktrace = _$iserror_20(cause) && _$hasStack_19(cause) ? _$errorStackParser_10.parse(cause) : [];\n\n var _normaliseError2 = normaliseError(cause, true, 'error cause'),\n error = _normaliseError2[0];\n\n if (error.name === 'InvalidError') event.addMetadata('error cause', makeSerialisable(cause));\n return createBugsnagError(error.name, error.message, Event.__type, stacktrace);\n });\n\n (_event$errors = event.errors).push.apply(_event$errors, normalisedCauses);\n }\n\n return event;\n};\n\nvar makeSerialisable = function (err) {\n if (err === null) return 'null';\n if (err === undefined) return 'undefined';\n return err;\n};\n\nvar normaliseError = function (maybeError, tolerateNonErrors, component, logger) {\n var error;\n var internalFrames = 0;\n\n var createAndLogInputError = function (reason) {\n var verb = component === 'error cause' ? 'was' : 'received';\n if (logger) logger.warn(component + \" \" + verb + \" a non-error: \\\"\" + reason + \"\\\"\");\n var err = new Error(component + \" \" + verb + \" a non-error. See \\\"\" + component + \"\\\" tab for more detail.\");\n err.name = 'InvalidError';\n return err;\n }; // In some cases:\n //\n // - the promise rejection handler (both in the browser and node)\n // - the node uncaughtException handler\n //\n // We are really limited in what we can do to get a stacktrace. So we use the\n // tolerateNonErrors option to ensure that the resulting error communicates as\n // such.\n\n\n if (!tolerateNonErrors) {\n if (_$iserror_20(maybeError)) {\n error = maybeError;\n } else {\n error = createAndLogInputError(typeof maybeError);\n internalFrames += 2;\n }\n } else {\n switch (typeof maybeError) {\n case 'string':\n case 'number':\n case 'boolean':\n error = new Error(String(maybeError));\n internalFrames += 1;\n break;\n\n case 'function':\n error = createAndLogInputError('function');\n internalFrames += 2;\n break;\n\n case 'object':\n if (maybeError !== null && _$iserror_20(maybeError)) {\n error = maybeError;\n } else if (maybeError !== null && hasNecessaryFields(maybeError)) {\n error = new Error(maybeError.message || maybeError.errorMessage);\n error.name = maybeError.name || maybeError.errorClass;\n internalFrames += 1;\n } else {\n error = createAndLogInputError(maybeError === null ? 'null' : 'unsupported object');\n internalFrames += 2;\n }\n\n break;\n\n default:\n error = createAndLogInputError('nothing');\n internalFrames += 2;\n }\n }\n\n if (!_$hasStack_19(error)) {\n // in IE10/11 a new Error() doesn't have a stacktrace until you throw it, so try that here\n try {\n throw error;\n } catch (e) {\n if (_$hasStack_19(e)) {\n error = e; // if the error only got a stacktrace after we threw it here, we know it\n // will only have one extra internal frame from this function, regardless\n // of whether it went through createAndLogInputError() or not\n\n internalFrames = 1;\n }\n }\n }\n\n return [error, internalFrames];\n}; // default value for stacktrace.type\n\n\nEvent.__type = 'browserjs';\n\nvar hasNecessaryFields = function (error) {\n return (typeof error.name === 'string' || typeof error.errorClass === 'string') && (typeof error.message === 'string' || typeof error.errorMessage === 'string');\n};\n\nvar _$Event_6 = Event;\n\n// This is a heavily modified/simplified version of\n// https://github.com/othiym23/async-some\n// with the logic flipped so that it is akin to the\n// synchronous \"every\" method instead of \"some\".\n// run the asynchronous test function (fn) over each item in the array (arr)\n// in series until:\n// - fn(item, cb) => calls cb(null, false)\n// - or the end of the array is reached\n// the callback (cb) will be passed (null, false) if any of the items in arr\n// caused fn to call back with false, otherwise it will be passed (null, true)\nvar _$asyncEvery_7 = function (arr, fn, cb) {\n var index = 0;\n\n var next = function () {\n if (index >= arr.length) return cb(null, true);\n fn(arr[index], function (err, result) {\n if (err) return cb(err);\n if (result === false) return cb(null, false);\n index++;\n next();\n });\n };\n\n next();\n};\n\n/* removed: var _$asyncEvery_7 = require('./async-every'); */;\n\nvar _$callbackRunner_9 = function (callbacks, event, onCallbackError, cb) {\n // This function is how we support different kinds of callback:\n // - synchronous - return value\n // - node-style async with callback - cb(err, value)\n // - promise/thenable - resolve(value)\n // It normalises each of these into the lowest common denominator – a node-style callback\n var runMaybeAsyncCallback = function (fn, cb) {\n if (typeof fn !== 'function') return cb(null);\n\n try {\n // if function appears sync…\n if (fn.length !== 2) {\n var ret = fn(event); // check if it returned a \"thenable\" (promise)\n\n if (ret && typeof ret.then === 'function') {\n return ret.then( // resolve\n function (val) {\n return setTimeout(function () {\n return cb(null, val);\n });\n }, // reject\n function (err) {\n setTimeout(function () {\n onCallbackError(err);\n return cb(null, true);\n });\n });\n }\n\n return cb(null, ret);\n } // if function is async…\n\n\n fn(event, function (err, result) {\n if (err) {\n onCallbackError(err);\n return cb(null);\n }\n\n cb(null, result);\n });\n } catch (e) {\n onCallbackError(e);\n cb(null);\n }\n };\n\n _$asyncEvery_7(callbacks, runMaybeAsyncCallback, cb);\n};\n\nvar _$syncCallbackRunner_23 = function (callbacks, callbackArg, callbackType, logger) {\n var ignore = false;\n var cbs = callbacks.slice();\n\n while (!ignore) {\n if (!cbs.length) break;\n\n try {\n ignore = cbs.pop()(callbackArg) === false;\n } catch (e) {\n logger.error(\"Error occurred in \" + callbackType + \" callback, continuing anyway\\u2026\");\n logger.error(e);\n }\n }\n\n return ignore;\n};\n\nvar _$pad_29 = function pad(num, size) {\n var s = '000000000' + num;\n return s.substr(s.length - size);\n};\n\n/* removed: var _$pad_29 = require('./pad.js'); */;\n\nvar env = typeof window === 'object' ? window : self;\nvar globalCount = 0;\n\nfor (var prop in env) {\n if (Object.hasOwnProperty.call(env, prop)) globalCount++;\n}\n\nvar mimeTypesLength = navigator.mimeTypes ? navigator.mimeTypes.length : 0;\nvar clientId = _$pad_29((mimeTypesLength + navigator.userAgent.length).toString(36) + globalCount.toString(36), 4);\n\nvar _$fingerprint_28 = function fingerprint() {\n return clientId;\n};\n\n/**\n * cuid.js\n * Collision-resistant UID generator for browsers and node.\n * Sequential for fast db lookups and recency sorting.\n * Safe for element IDs and server-side lookups.\n *\n * Extracted from CLCTR\n *\n * Copyright (c) Eric Elliott 2012\n * MIT License\n */\n/* removed: var _$fingerprint_28 = require('./lib/fingerprint.js'); */;\n\n/* removed: var _$pad_29 = require('./lib/pad.js'); */;\n\nvar c = 0,\n blockSize = 4,\n base = 36,\n discreteValues = Math.pow(base, blockSize);\n\nfunction randomBlock() {\n return _$pad_29((Math.random() * discreteValues << 0).toString(base), blockSize);\n}\n\nfunction safeCounter() {\n c = c < discreteValues ? c : 0;\n c++; // this is not subliminal\n\n return c - 1;\n}\n\nfunction cuid() {\n // Starting with a lowercase letter makes\n // it HTML element ID friendly.\n var letter = 'c',\n // hard-coded allows for sequential access\n // timestamp\n // warning: this exposes the exact date and time\n // that the uid was created.\n timestamp = new Date().getTime().toString(base),\n // Prevent same-machine collisions.\n counter = _$pad_29(safeCounter().toString(base), blockSize),\n // A few chars to generate distinct ids for different\n // clients (so different computers are far less\n // likely to generate the same id)\n print = _$fingerprint_28(),\n // Grab some more chars from Math.random()\n random = randomBlock() + randomBlock();\n return letter + timestamp + counter + print + random;\n}\n\ncuid.fingerprint = _$fingerprint_28;\nvar _$cuid_27 = cuid;\n\n/* removed: var _$cuid_27 = require('@bugsnag/cuid'); */;\n\nvar Session = /*#__PURE__*/function () {\n function Session() {\n this.id = _$cuid_27();\n this.startedAt = new Date();\n this._handled = 0;\n this._unhandled = 0;\n this._user = {};\n this.app = {};\n this.device = {};\n }\n\n var _proto = Session.prototype;\n\n _proto.getUser = function getUser() {\n return this._user;\n };\n\n _proto.setUser = function setUser(id, email, name) {\n this._user = {\n id: id,\n email: email,\n name: name\n };\n };\n\n _proto.toJSON = function toJSON() {\n return {\n id: this.id,\n startedAt: this.startedAt,\n events: {\n handled: this._handled,\n unhandled: this._unhandled\n }\n };\n };\n\n _proto._track = function _track(event) {\n this[event._handledState.unhandled ? '_unhandled' : '_handled'] += 1;\n };\n\n return Session;\n}();\n\nvar _$Session_35 = Session;\n\n/* removed: var _$config_5 = require('./config'); */;\n\n/* removed: var _$Event_6 = require('./event'); */;\n\n/* removed: var _$Breadcrumb_3 = require('./breadcrumb'); */;\n\n/* removed: var _$Session_35 = require('./session'); */;\n\n/* removed: var _$map_16 = require('./lib/es-utils/map'); */;\n\n/* removed: var _$includes_13 = require('./lib/es-utils/includes'); */;\n\n/* removed: var _$filter_12 = require('./lib/es-utils/filter'); */;\n\n/* removed: var _$reduce_17 = require('./lib/es-utils/reduce'); */;\n\n/* removed: var _$keys_15 = require('./lib/es-utils/keys'); */;\n\n/* removed: var _$assign_11 = require('./lib/es-utils/assign'); */;\n\n/* removed: var _$callbackRunner_9 = require('./lib/callback-runner'); */;\n\n/* removed: var _$metadataDelegate_22 = require('./lib/metadata-delegate'); */;\n\n/* removed: var _$syncCallbackRunner_23 = require('./lib/sync-callback-runner'); */;\n\n/* removed: var _$breadcrumbTypes_8 = require('./lib/breadcrumb-types'); */;\n\nvar __add_4 = _$featureFlagDelegate_18.add,\n __clear_4 = _$featureFlagDelegate_18.clear,\n __merge_4 = _$featureFlagDelegate_18.merge;\n\nvar noop = function () {};\n\nvar Client = /*#__PURE__*/function () {\n function Client(configuration, schema, internalPlugins, notifier) {\n var _this = this;\n\n if (schema === void 0) {\n schema = _$config_5.schema;\n }\n\n if (internalPlugins === void 0) {\n internalPlugins = [];\n }\n\n // notifier id\n this._notifier = notifier; // intialise opts and config\n\n this._config = {};\n this._schema = schema; // i/o\n\n this._delivery = {\n sendSession: noop,\n sendEvent: noop\n };\n this._logger = {\n debug: noop,\n info: noop,\n warn: noop,\n error: noop\n }; // plugins\n\n this._plugins = {}; // state\n\n this._breadcrumbs = [];\n this._session = null;\n this._metadata = {};\n this._featuresIndex = {};\n this._features = [];\n this._context = undefined;\n this._user = {}; // callbacks:\n // e: onError\n // s: onSession\n // sp: onSessionPayload\n // b: onBreadcrumb\n // (note these names are minified by hand because object\n // properties are not safe to minify automatically)\n\n this._cbs = {\n e: [],\n s: [],\n sp: [],\n b: []\n }; // expose internal constructors\n\n this.Client = Client;\n this.Event = _$Event_6;\n this.Breadcrumb = _$Breadcrumb_3;\n this.Session = _$Session_35;\n this._config = this._configure(configuration, internalPlugins);\n _$map_16(internalPlugins.concat(this._config.plugins), function (pl) {\n if (pl) _this._loadPlugin(pl);\n }); // when notify() is called we need to know how many frames are from our own source\n // this inital value is 1 not 0 because we wrap notify() to ensure it is always\n // bound to have the client as its `this` value – see below.\n\n this._depth = 1;\n var self = this;\n var notify = this.notify;\n\n this.notify = function () {\n return notify.apply(self, arguments);\n };\n }\n\n var _proto = Client.prototype;\n\n _proto.addMetadata = function addMetadata(section, keyOrObj, maybeVal) {\n return _$metadataDelegate_22.add(this._metadata, section, keyOrObj, maybeVal);\n };\n\n _proto.getMetadata = function getMetadata(section, key) {\n return _$metadataDelegate_22.get(this._metadata, section, key);\n };\n\n _proto.clearMetadata = function clearMetadata(section, key) {\n return _$metadataDelegate_22.clear(this._metadata, section, key);\n };\n\n _proto.addFeatureFlag = function addFeatureFlag(name, variant) {\n if (variant === void 0) {\n variant = null;\n }\n\n __add_4(this._features, this._featuresIndex, name, variant);\n };\n\n _proto.addFeatureFlags = function addFeatureFlags(featureFlags) {\n __merge_4(this._features, featureFlags, this._featuresIndex);\n };\n\n _proto.clearFeatureFlag = function clearFeatureFlag(name) {\n __clear_4(this._features, this._featuresIndex, name);\n };\n\n _proto.clearFeatureFlags = function clearFeatureFlags() {\n this._features = [];\n this._featuresIndex = {};\n };\n\n _proto.getContext = function getContext() {\n return this._context;\n };\n\n _proto.setContext = function setContext(c) {\n this._context = c;\n };\n\n _proto._configure = function _configure(opts, internalPlugins) {\n var schema = _$reduce_17(internalPlugins, function (schema, plugin) {\n if (plugin && plugin.configSchema) return _$assign_11({}, schema, plugin.configSchema);\n return schema;\n }, this._schema); // accumulate configuration and error messages\n\n var _reduce = _$reduce_17(_$keys_15(schema), function (accum, key) {\n var defaultValue = schema[key].defaultValue(opts[key]);\n\n if (opts[key] !== undefined) {\n var valid = schema[key].validate(opts[key]);\n\n if (!valid) {\n accum.errors[key] = schema[key].message;\n accum.config[key] = defaultValue;\n } else {\n if (schema[key].allowPartialObject) {\n accum.config[key] = _$assign_11(defaultValue, opts[key]);\n } else {\n accum.config[key] = opts[key];\n }\n }\n } else {\n accum.config[key] = defaultValue;\n }\n\n return accum;\n }, {\n errors: {},\n config: {}\n }),\n errors = _reduce.errors,\n config = _reduce.config;\n\n if (schema.apiKey) {\n // missing api key is the only fatal error\n if (!config.apiKey) throw new Error('No Bugsnag API Key set'); // warn about an apikey that is not of the expected format\n\n if (!/^[0-9a-f]{32}$/i.test(config.apiKey)) errors.apiKey = 'should be a string of 32 hexadecimal characters';\n } // update and elevate some options\n\n\n this._metadata = _$assign_11({}, config.metadata);\n __merge_4(this._features, config.featureFlags, this._featuresIndex);\n this._user = _$assign_11({}, config.user);\n this._context = config.context;\n if (config.logger) this._logger = config.logger; // add callbacks\n\n if (config.onError) this._cbs.e = this._cbs.e.concat(config.onError);\n if (config.onBreadcrumb) this._cbs.b = this._cbs.b.concat(config.onBreadcrumb);\n if (config.onSession) this._cbs.s = this._cbs.s.concat(config.onSession); // finally warn about any invalid config where we fell back to the default\n\n if (_$keys_15(errors).length) {\n this._logger.warn(generateConfigErrorMessage(errors, opts));\n }\n\n return config;\n };\n\n _proto.getUser = function getUser() {\n return this._user;\n };\n\n _proto.setUser = function setUser(id, email, name) {\n this._user = {\n id: id,\n email: email,\n name: name\n };\n };\n\n _proto._loadPlugin = function _loadPlugin(plugin) {\n var result = plugin.load(this); // JS objects are not the safest way to store arbitrarily keyed values,\n // so bookend the key with some characters that prevent tampering with\n // stuff like __proto__ etc. (only store the result if the plugin had a\n // name)\n\n if (plugin.name) this._plugins[\"~\" + plugin.name + \"~\"] = result;\n return this;\n };\n\n _proto.getPlugin = function getPlugin(name) {\n return this._plugins[\"~\" + name + \"~\"];\n };\n\n _proto._setDelivery = function _setDelivery(d) {\n this._delivery = d(this);\n };\n\n _proto.startSession = function startSession() {\n var session = new _$Session_35();\n session.app.releaseStage = this._config.releaseStage;\n session.app.version = this._config.appVersion;\n session.app.type = this._config.appType;\n session._user = _$assign_11({}, this._user); // run onSession callbacks\n\n var ignore = _$syncCallbackRunner_23(this._cbs.s, session, 'onSession', this._logger);\n\n if (ignore) {\n this._logger.debug('Session not started due to onSession callback');\n\n return this;\n }\n\n return this._sessionDelegate.startSession(this, session);\n };\n\n _proto.addOnError = function addOnError(fn, front) {\n if (front === void 0) {\n front = false;\n }\n\n this._cbs.e[front ? 'unshift' : 'push'](fn);\n };\n\n _proto.removeOnError = function removeOnError(fn) {\n this._cbs.e = _$filter_12(this._cbs.e, function (f) {\n return f !== fn;\n });\n };\n\n _proto._addOnSessionPayload = function _addOnSessionPayload(fn) {\n this._cbs.sp.push(fn);\n };\n\n _proto.addOnSession = function addOnSession(fn) {\n this._cbs.s.push(fn);\n };\n\n _proto.removeOnSession = function removeOnSession(fn) {\n this._cbs.s = _$filter_12(this._cbs.s, function (f) {\n return f !== fn;\n });\n };\n\n _proto.addOnBreadcrumb = function addOnBreadcrumb(fn, front) {\n if (front === void 0) {\n front = false;\n }\n\n this._cbs.b[front ? 'unshift' : 'push'](fn);\n };\n\n _proto.removeOnBreadcrumb = function removeOnBreadcrumb(fn) {\n this._cbs.b = _$filter_12(this._cbs.b, function (f) {\n return f !== fn;\n });\n };\n\n _proto.pauseSession = function pauseSession() {\n return this._sessionDelegate.pauseSession(this);\n };\n\n _proto.resumeSession = function resumeSession() {\n return this._sessionDelegate.resumeSession(this);\n };\n\n _proto.leaveBreadcrumb = function leaveBreadcrumb(message, metadata, type) {\n // coerce bad values so that the defaults get set\n message = typeof message === 'string' ? message : '';\n type = typeof type === 'string' && _$includes_13(_$breadcrumbTypes_8, type) ? type : 'manual';\n metadata = typeof metadata === 'object' && metadata !== null ? metadata : {}; // if no message, discard\n\n if (!message) return;\n var crumb = new _$Breadcrumb_3(message, metadata, type); // run onBreadcrumb callbacks\n\n var ignore = _$syncCallbackRunner_23(this._cbs.b, crumb, 'onBreadcrumb', this._logger);\n\n if (ignore) {\n this._logger.debug('Breadcrumb not attached due to onBreadcrumb callback');\n\n return;\n } // push the valid crumb onto the queue and maintain the length\n\n\n this._breadcrumbs.push(crumb);\n\n if (this._breadcrumbs.length > this._config.maxBreadcrumbs) {\n this._breadcrumbs = this._breadcrumbs.slice(this._breadcrumbs.length - this._config.maxBreadcrumbs);\n }\n };\n\n _proto._isBreadcrumbTypeEnabled = function _isBreadcrumbTypeEnabled(type) {\n var types = this._config.enabledBreadcrumbTypes;\n return types === null || _$includes_13(types, type);\n };\n\n _proto.notify = function notify(maybeError, onError, postReportCallback) {\n if (postReportCallback === void 0) {\n postReportCallback = noop;\n }\n\n var event = _$Event_6.create(maybeError, true, undefined, 'notify()', this._depth + 1, this._logger);\n\n this._notify(event, onError, postReportCallback);\n };\n\n _proto._notify = function _notify(event, onError, postReportCallback) {\n var _this2 = this;\n\n if (postReportCallback === void 0) {\n postReportCallback = noop;\n }\n\n event.app = _$assign_11({}, event.app, {\n releaseStage: this._config.releaseStage,\n version: this._config.appVersion,\n type: this._config.appType\n });\n event.context = event.context || this._context;\n event._metadata = _$assign_11({}, event._metadata, this._metadata);\n event._user = _$assign_11({}, event._user, this._user);\n event.breadcrumbs = this._breadcrumbs.slice();\n __merge_4(event._features, this._features, event._featuresIndex); // exit early if events should not be sent on the current releaseStage\n\n if (this._config.enabledReleaseStages !== null && !_$includes_13(this._config.enabledReleaseStages, this._config.releaseStage)) {\n this._logger.warn('Event not sent due to releaseStage/enabledReleaseStages configuration');\n\n return postReportCallback(null, event);\n }\n\n var originalSeverity = event.severity;\n\n var onCallbackError = function (err) {\n // errors in callbacks are tolerated but we want to log them out\n _this2._logger.error('Error occurred in onError callback, continuing anyway…');\n\n _this2._logger.error(err);\n };\n\n var callbacks = [].concat(this._cbs.e).concat(onError);\n _$callbackRunner_9(callbacks, event, onCallbackError, function (err, shouldSend) {\n if (err) onCallbackError(err);\n\n if (!shouldSend) {\n _this2._logger.debug('Event not sent due to onError callback');\n\n return postReportCallback(null, event);\n }\n\n if (_this2._isBreadcrumbTypeEnabled('error')) {\n // only leave a crumb for the error if actually got sent\n Client.prototype.leaveBreadcrumb.call(_this2, event.errors[0].errorClass, {\n errorClass: event.errors[0].errorClass,\n errorMessage: event.errors[0].errorMessage,\n severity: event.severity\n }, 'error');\n }\n\n if (originalSeverity !== event.severity) {\n event._handledState.severityReason = {\n type: 'userCallbackSetSeverity'\n };\n }\n\n if (event.unhandled !== event._handledState.unhandled) {\n event._handledState.severityReason.unhandledOverridden = true;\n event._handledState.unhandled = event.unhandled;\n }\n\n if (_this2._session) {\n _this2._session._track(event);\n\n event._session = _this2._session;\n }\n\n _this2._delivery.sendEvent({\n apiKey: event.apiKey || _this2._config.apiKey,\n notifier: _this2._notifier,\n events: [event]\n }, function (err) {\n return postReportCallback(err, event);\n });\n });\n };\n\n return Client;\n}();\n\nvar generateConfigErrorMessage = function (errors, rawInput) {\n var er = new Error(\"Invalid configuration\\n\" + _$map_16(_$keys_15(errors), function (key) {\n return \" - \" + key + \" \" + errors[key] + \", got \" + stringify(rawInput[key]);\n }).join('\\n\\n'));\n return er;\n};\n\nvar stringify = function (val) {\n switch (typeof val) {\n case 'string':\n case 'number':\n case 'object':\n return JSON.stringify(val);\n\n default:\n return String(val);\n }\n};\n\nvar _$Client_4 = Client;\n\nvar _$jsonPayload_21 = {};\n/* removed: var _$safeJsonStringify_30 = require('@bugsnag/safe-json-stringify'); */;\n\nvar EVENT_REDACTION_PATHS = ['events.[].metaData', 'events.[].breadcrumbs.[].metaData', 'events.[].request'];\n\n_$jsonPayload_21.event = function (event, redactedKeys) {\n var payload = _$safeJsonStringify_30(event, null, null, {\n redactedPaths: EVENT_REDACTION_PATHS,\n redactedKeys: redactedKeys\n });\n\n if (payload.length > 10e5) {\n event.events[0]._metadata = {\n notifier: \"WARNING!\\nSerialized payload was \" + payload.length / 10e5 + \"MB (limit = 1MB)\\nmetadata was removed\"\n };\n payload = _$safeJsonStringify_30(event, null, null, {\n redactedPaths: EVENT_REDACTION_PATHS,\n redactedKeys: redactedKeys\n });\n }\n\n return payload;\n};\n\n_$jsonPayload_21.session = function (session, redactedKeys) {\n var payload = _$safeJsonStringify_30(session, null, null);\n return payload;\n};\n\nvar _$delivery_36 = {};\n/* removed: var _$jsonPayload_21 = require('@bugsnag/core/lib/json-payload'); */;\n\n_$delivery_36 = function (client, win) {\n if (win === void 0) {\n win = window;\n }\n\n return {\n sendEvent: function (event, cb) {\n if (cb === void 0) {\n cb = function () {};\n }\n\n var url = getApiUrl(client._config, 'notify', '4', win);\n var body = _$jsonPayload_21.event(event, client._config.redactedKeys);\n var req = new win.XDomainRequest();\n\n req.onload = function () {\n cb(null);\n };\n\n req.onerror = function () {\n var err = new Error('Event failed to send');\n\n client._logger.error('Event failed to send…', err);\n\n if (body.length > 10e5) {\n client._logger.warn(\"Event oversized (\" + (body.length / 10e5).toFixed(2) + \" MB)\");\n }\n\n cb(err);\n };\n\n req.open('POST', url);\n setTimeout(function () {\n try {\n req.send(body);\n } catch (e) {\n client._logger.error(e);\n\n cb(e);\n }\n }, 0);\n },\n sendSession: function (session, cb) {\n if (cb === void 0) {\n cb = function () {};\n }\n\n var url = getApiUrl(client._config, 'sessions', '1', win);\n var req = new win.XDomainRequest();\n\n req.onload = function () {\n cb(null);\n };\n\n req.open('POST', url);\n setTimeout(function () {\n try {\n req.send(_$jsonPayload_21.session(session, client._config.redactedKeys));\n } catch (e) {\n client._logger.error(e);\n\n cb(e);\n }\n }, 0);\n }\n };\n};\n\nvar getApiUrl = function (config, endpoint, version, win) {\n // IE8 doesn't support Date.prototype.toISOstring(), but it does convert a date\n // to an ISO string when you use JSON stringify. Simply parsing the result of\n // JSON.stringify is smaller than using a toISOstring() polyfill.\n var isoDate = JSON.parse(JSON.stringify(new Date()));\n var url = matchPageProtocol(config.endpoints[endpoint], win.location.protocol);\n return url + \"?apiKey=\" + encodeURIComponent(config.apiKey) + \"&payloadVersion=\" + version + \"&sentAt=\" + encodeURIComponent(isoDate);\n};\n\nvar matchPageProtocol = _$delivery_36._matchPageProtocol = function (endpoint, pageProtocol) {\n return pageProtocol === 'http:' ? endpoint.replace(/^https:/, 'http:') : endpoint;\n};\n\n/* removed: var _$jsonPayload_21 = require('@bugsnag/core/lib/json-payload'); */;\n\nvar _$delivery_37 = function (client, win) {\n if (win === void 0) {\n win = window;\n }\n\n return {\n sendEvent: function (event, cb) {\n if (cb === void 0) {\n cb = function () {};\n }\n\n try {\n var url = client._config.endpoints.notify;\n var req = new win.XMLHttpRequest();\n var body = _$jsonPayload_21.event(event, client._config.redactedKeys);\n\n req.onreadystatechange = function () {\n if (req.readyState === win.XMLHttpRequest.DONE) {\n var status = req.status;\n\n if (status === 0 || status >= 400) {\n var err = new Error(\"Request failed with status \" + status);\n\n client._logger.error('Event failed to send…', err);\n\n if (body.length > 10e5) {\n client._logger.warn(\"Event oversized (\" + (body.length / 10e5).toFixed(2) + \" MB)\");\n }\n\n cb(err);\n } else {\n cb(null);\n }\n }\n };\n\n req.open('POST', url);\n req.setRequestHeader('Content-Type', 'application/json');\n req.setRequestHeader('Bugsnag-Api-Key', event.apiKey || client._config.apiKey);\n req.setRequestHeader('Bugsnag-Payload-Version', '4');\n req.setRequestHeader('Bugsnag-Sent-At', new Date().toISOString());\n req.send(body);\n } catch (e) {\n client._logger.error(e);\n }\n },\n sendSession: function (session, cb) {\n if (cb === void 0) {\n cb = function () {};\n }\n\n try {\n var url = client._config.endpoints.sessions;\n var req = new win.XMLHttpRequest();\n\n req.onreadystatechange = function () {\n if (req.readyState === win.XMLHttpRequest.DONE) {\n var status = req.status;\n\n if (status === 0 || status >= 400) {\n var err = new Error(\"Request failed with status \" + status);\n\n client._logger.error('Session failed to send…', err);\n\n cb(err);\n } else {\n cb(null);\n }\n }\n };\n\n req.open('POST', url);\n req.setRequestHeader('Content-Type', 'application/json');\n req.setRequestHeader('Bugsnag-Api-Key', client._config.apiKey);\n req.setRequestHeader('Bugsnag-Payload-Version', '1');\n req.setRequestHeader('Bugsnag-Sent-At', new Date().toISOString());\n req.send(_$jsonPayload_21.session(session, client._config.redactedKeys));\n } catch (e) {\n client._logger.error(e);\n }\n }\n };\n};\n\nvar appStart = new Date();\n\nvar reset = function () {\n appStart = new Date();\n};\n\nvar _$app_38 = {\n name: 'appDuration',\n load: function (client) {\n client.addOnError(function (event) {\n var now = new Date();\n event.app.duration = now - appStart;\n }, true);\n return {\n reset: reset\n };\n }\n};\n\n/*\n * Sets the default context to be the current URL\n */\nvar _$context_39 = function (win) {\n if (win === void 0) {\n win = window;\n }\n\n return {\n load: function (client) {\n client.addOnError(function (event) {\n if (event.context !== undefined) return;\n event.context = win.location.pathname;\n }, true);\n }\n };\n};\n\nvar _$pad_43 = function pad(num, size) {\n var s = '000000000' + num;\n return s.substr(s.length - size);\n};\n\n/* removed: var _$pad_43 = require('./pad.js'); */;\n\nvar __env_42 = typeof window === 'object' ? window : self;\nvar __globalCount_42 = 0;\n\nfor (var __prop_42 in __env_42) {\n if (Object.hasOwnProperty.call(__env_42, __prop_42)) __globalCount_42++;\n}\n\nvar __mimeTypesLength_42 = navigator.mimeTypes ? navigator.mimeTypes.length : 0;\nvar __clientId_42 = _$pad_43((__mimeTypesLength_42 + navigator.userAgent.length).toString(36) + __globalCount_42.toString(36), 4);\n\nvar _$fingerprint_42 = function fingerprint() {\n return __clientId_42;\n};\n\n/**\n * cuid.js\n * Collision-resistant UID generator for browsers and node.\n * Sequential for fast db lookups and recency sorting.\n * Safe for element IDs and server-side lookups.\n *\n * Extracted from CLCTR\n *\n * Copyright (c) Eric Elliott 2012\n * MIT License\n */\n/* removed: var _$fingerprint_42 = require('./lib/fingerprint.js'); */;\n\n/* removed: var _$pad_43 = require('./lib/pad.js'); */;\n\nvar __c_41 = 0,\n __blockSize_41 = 4,\n __base_41 = 36,\n __discreteValues_41 = Math.pow(__base_41, __blockSize_41);\n\nfunction __randomBlock_41() {\n return _$pad_43((Math.random() * __discreteValues_41 << 0).toString(__base_41), __blockSize_41);\n}\n\nfunction __safeCounter_41() {\n __c_41 = __c_41 < __discreteValues_41 ? __c_41 : 0;\n __c_41++; // this is not subliminal\n\n return __c_41 - 1;\n}\n\nfunction __cuid_41() {\n // Starting with a lowercase letter makes\n // it HTML element ID friendly.\n var letter = 'c',\n // hard-coded allows for sequential access\n // timestamp\n // warning: this exposes the exact date and time\n // that the uid was created.\n timestamp = new Date().getTime().toString(__base_41),\n // Prevent same-machine collisions.\n counter = _$pad_43(__safeCounter_41().toString(__base_41), __blockSize_41),\n // A few chars to generate distinct ids for different\n // clients (so different computers are far less\n // likely to generate the same id)\n print = _$fingerprint_42(),\n // Grab some more chars from Math.random()\n random = __randomBlock_41() + __randomBlock_41();\n return letter + timestamp + counter + print + random;\n}\n\n__cuid_41.fingerprint = _$fingerprint_42;\nvar _$cuid_41 = __cuid_41;\n\n/* removed: var _$assign_11 = require('@bugsnag/core/lib/es-utils/assign'); */;\n\nvar BUGSNAG_ANONYMOUS_ID_KEY = 'bugsnag-anonymous-id';\n\nvar getDeviceId = function (win) {\n try {\n var storage = win.localStorage;\n var id = storage.getItem(BUGSNAG_ANONYMOUS_ID_KEY); // If we get an ID, make sure it looks like a valid cuid. The length can\n // fluctuate slightly, so some leeway is built in\n\n if (id && /^c[a-z0-9]{20,32}$/.test(id)) {\n return id;\n }\n\n /* removed: var _$cuid_41 = require('@bugsnag/cuid'); */;\n\n id = _$cuid_41();\n storage.setItem(BUGSNAG_ANONYMOUS_ID_KEY, id);\n return id;\n } catch (err) {// If localStorage is not available (e.g. because it's disabled) then give up\n }\n};\n/*\n * Automatically detects browser device details\n */\n\n\nvar _$device_40 = function (nav, win) {\n if (nav === void 0) {\n nav = navigator;\n }\n\n if (win === void 0) {\n win = window;\n }\n\n return {\n load: function (client) {\n var device = {\n locale: nav.browserLanguage || nav.systemLanguage || nav.userLanguage || nav.language,\n userAgent: nav.userAgent\n };\n\n if (win && win.screen && win.screen.orientation && win.screen.orientation.type) {\n device.orientation = win.screen.orientation.type;\n } else if (win && win.document) {\n device.orientation = win.document.documentElement.clientWidth > win.document.documentElement.clientHeight ? 'landscape' : 'portrait';\n }\n\n if (client._config.generateAnonymousId) {\n device.id = getDeviceId(win);\n }\n\n client.addOnSession(function (session) {\n session.device = _$assign_11({}, session.device, device); // only set device id if collectUserIp is false\n\n if (!client._config.collectUserIp) setDefaultUserId(session);\n }); // add time just as the event is sent\n\n client.addOnError(function (event) {\n event.device = _$assign_11({}, event.device, device, {\n time: new Date()\n });\n if (!client._config.collectUserIp) setDefaultUserId(event);\n }, true);\n },\n configSchema: {\n generateAnonymousId: {\n validate: function (value) {\n return value === true || value === false;\n },\n defaultValue: function () {\n return true;\n },\n message: 'should be true|false'\n }\n }\n };\n};\n\nvar setDefaultUserId = function (eventOrSession) {\n // device id is also used to populate the user id field, if it's not already set\n var user = eventOrSession.getUser();\n\n if (!user || !user.id) {\n eventOrSession.setUser(eventOrSession.device.id);\n }\n};\n\n/* removed: var _$assign_11 = require('@bugsnag/core/lib/es-utils/assign'); */;\n/*\n * Sets the event request: { url } to be the current href\n */\n\n\nvar _$request_44 = function (win) {\n if (win === void 0) {\n win = window;\n }\n\n return {\n load: function (client) {\n client.addOnError(function (event) {\n if (event.request && event.request.url) return;\n event.request = _$assign_11({}, event.request, {\n url: win.location.href\n });\n }, true);\n }\n };\n};\n\n/* removed: var _$includes_13 = require('@bugsnag/core/lib/es-utils/includes'); */;\n\nvar _$session_45 = {\n load: function (client) {\n client._sessionDelegate = sessionDelegate;\n }\n};\nvar sessionDelegate = {\n startSession: function (client, session) {\n var sessionClient = client;\n sessionClient._session = session;\n sessionClient._pausedSession = null; // exit early if the current releaseStage is not enabled\n\n if (sessionClient._config.enabledReleaseStages !== null && !_$includes_13(sessionClient._config.enabledReleaseStages, sessionClient._config.releaseStage)) {\n sessionClient._logger.warn('Session not sent due to releaseStage/enabledReleaseStages configuration');\n\n return sessionClient;\n }\n\n sessionClient._delivery.sendSession({\n notifier: sessionClient._notifier,\n device: session.device,\n app: session.app,\n sessions: [{\n id: session.id,\n startedAt: session.startedAt,\n user: session._user\n }]\n });\n\n return sessionClient;\n },\n resumeSession: function (client) {\n // Do nothing if there's already an active session\n if (client._session) {\n return client;\n } // If we have a paused session then make it the active session\n\n\n if (client._pausedSession) {\n client._session = client._pausedSession;\n client._pausedSession = null;\n return client;\n } // Otherwise start a new session\n\n\n return client.startSession();\n },\n pauseSession: function (client) {\n client._pausedSession = client._session;\n client._session = null;\n }\n};\n\n/* removed: var _$assign_11 = require('@bugsnag/core/lib/es-utils/assign'); */;\n/*\n * Prevent collection of user IPs\n */\n\n\nvar _$clientIp_46 = {\n load: function (client) {\n if (client._config.collectUserIp) return;\n client.addOnError(function (event) {\n // If user.id is explicitly undefined, it will be missing from the payload. It needs\n // removing so that the following line replaces it\n if (event._user && typeof event._user.id === 'undefined') delete event._user.id;\n event._user = _$assign_11({\n id: '[REDACTED]'\n }, event._user);\n event.request = _$assign_11({\n clientIp: '[REDACTED]'\n }, event.request);\n });\n },\n configSchema: {\n collectUserIp: {\n defaultValue: function () {\n return true;\n },\n message: 'should be true|false',\n validate: function (value) {\n return value === true || value === false;\n }\n }\n }\n};\n\nvar _$consoleBreadcrumbs_47 = {};\n/* removed: var _$map_16 = require('@bugsnag/core/lib/es-utils/map'); */;\n\n/* removed: var _$reduce_17 = require('@bugsnag/core/lib/es-utils/reduce'); */;\n\n/* removed: var _$filter_12 = require('@bugsnag/core/lib/es-utils/filter'); */;\n/*\n * Leaves breadcrumbs when console log methods are called\n */\n\n\n_$consoleBreadcrumbs_47.load = function (client) {\n var isDev = /^(local-)?dev(elopment)?$/.test(client._config.releaseStage);\n if (isDev || !client._isBreadcrumbTypeEnabled('log')) return;\n _$map_16(CONSOLE_LOG_METHODS, function (method) {\n var original = console[method];\n\n console[method] = function () {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n client.leaveBreadcrumb('Console output', _$reduce_17(args, function (accum, arg, i) {\n // do the best/simplest stringification of each argument\n var stringified = '[Unknown value]'; // this may fail if the input is:\n // - an object whose [[Prototype]] is null (no toString)\n // - an object with a broken toString or @@toPrimitive implementation\n\n try {\n stringified = String(arg);\n } catch (e) {} // if it stringifies to [object Object] attempt to JSON stringify\n\n\n if (stringified === '[object Object]') {\n // catch stringify errors and fallback to [object Object]\n try {\n stringified = JSON.stringify(arg);\n } catch (e) {}\n }\n\n accum[\"[\" + i + \"]\"] = stringified;\n return accum;\n }, {\n severity: method.indexOf('group') === 0 ? 'log' : method\n }), 'log');\n original.apply(console, args);\n };\n\n console[method]._restore = function () {\n console[method] = original;\n };\n });\n};\n\nif (\"production\" !== 'production') {\n _$consoleBreadcrumbs_47.destroy = function () {\n return CONSOLE_LOG_METHODS.forEach(function (method) {\n if (typeof console[method]._restore === 'function') console[method]._restore();\n });\n };\n}\n\nvar CONSOLE_LOG_METHODS = _$filter_12(['log', 'debug', 'info', 'warn', 'error'], function (method) {\n return typeof console !== 'undefined' && typeof console[method] === 'function';\n});\n\n/* removed: var _$map_16 = require('@bugsnag/core/lib/es-utils/map'); */;\n\n/* removed: var _$reduce_17 = require('@bugsnag/core/lib/es-utils/reduce'); */;\n\n/* removed: var _$filter_12 = require('@bugsnag/core/lib/es-utils/filter'); */;\n\nvar MAX_LINE_LENGTH = 200;\nvar MAX_SCRIPT_LENGTH = 500000;\n\nvar _$inlineScriptContent_48 = function (doc, win) {\n if (doc === void 0) {\n doc = document;\n }\n\n if (win === void 0) {\n win = window;\n }\n\n return {\n load: function (client) {\n if (!client._config.trackInlineScripts) return;\n var originalLocation = win.location.href;\n var html = ''; // in IE8-10 the 'interactive' state can fire too soon (before scripts have finished executing), so in those\n // we wait for the 'complete' state before assuming that synchronous scripts are no longer executing\n\n var isOldIe = !!doc.attachEvent;\n var DOMContentLoaded = isOldIe ? doc.readyState === 'complete' : doc.readyState !== 'loading';\n\n var getHtml = function () {\n return doc.documentElement.outerHTML;\n }; // get whatever HTML exists at this point in time\n\n\n html = getHtml();\n var prev = doc.onreadystatechange; // then update it when the DOM content has loaded\n\n doc.onreadystatechange = function () {\n // IE8 compatible alternative to document#DOMContentLoaded\n if (doc.readyState === 'interactive') {\n html = getHtml();\n DOMContentLoaded = true;\n }\n\n try {\n prev.apply(this, arguments);\n } catch (e) {}\n };\n\n var _lastScript = null;\n\n var updateLastScript = function (script) {\n _lastScript = script;\n };\n\n var getCurrentScript = function () {\n var script = doc.currentScript || _lastScript;\n\n if (!script && !DOMContentLoaded) {\n var scripts = doc.scripts || doc.getElementsByTagName('script');\n script = scripts[scripts.length - 1];\n }\n\n return script;\n };\n\n var addSurroundingCode = function (lineNumber) {\n // get whatever html has rendered at this point\n if (!DOMContentLoaded || !html) html = getHtml(); // simulate the raw html\n\n var htmlLines = [''].concat(html.split('\\n'));\n var zeroBasedLine = lineNumber - 1;\n var start = Math.max(zeroBasedLine - 3, 0);\n var end = Math.min(zeroBasedLine + 3, htmlLines.length);\n return _$reduce_17(htmlLines.slice(start, end), function (accum, line, i) {\n accum[start + 1 + i] = line.length <= MAX_LINE_LENGTH ? line : line.substr(0, MAX_LINE_LENGTH);\n return accum;\n }, {});\n };\n\n client.addOnError(function (event) {\n // remove any of our own frames that may be part the stack this\n // happens before the inline script check as it happens for all errors\n event.errors[0].stacktrace = _$filter_12(event.errors[0].stacktrace, function (f) {\n return !/__trace__$/.test(f.method);\n });\n var frame = event.errors[0].stacktrace[0]; // remove hash and query string from url\n\n var cleanUrl = function (url) {\n return url.replace(/#.*$/, '').replace(/\\?.*$/, '');\n }; // if frame.file exists and is not the original location of the page, this can't be an inline script\n\n\n if (frame && frame.file && cleanUrl(frame.file) !== cleanUrl(originalLocation)) return; // grab the last script known to have run\n\n var currentScript = getCurrentScript();\n\n if (currentScript) {\n var content = currentScript.innerHTML;\n event.addMetadata('script', 'content', content.length <= MAX_SCRIPT_LENGTH ? content : content.substr(0, MAX_SCRIPT_LENGTH)); // only attempt to grab some surrounding code if we have a line number\n\n if (frame && frame.lineNumber) {\n frame.code = addSurroundingCode(frame.lineNumber);\n }\n }\n }, true); // Proxy all the timer functions whose callback is their 0th argument.\n // Keep a reference to the original setTimeout because we need it later\n\n var _map = _$map_16(['setTimeout', 'setInterval', 'setImmediate', 'requestAnimationFrame'], function (fn) {\n return __proxy(win, fn, function (original) {\n return __traceOriginalScript(original, function (args) {\n return {\n get: function () {\n return args[0];\n },\n replace: function (fn) {\n args[0] = fn;\n }\n };\n });\n });\n }),\n _setTimeout = _map[0]; // Proxy all the host objects whose prototypes have an addEventListener function\n\n\n _$map_16(['EventTarget', 'Window', 'Node', 'ApplicationCache', 'AudioTrackList', 'ChannelMergerNode', 'CryptoOperation', 'EventSource', 'FileReader', 'HTMLUnknownElement', 'IDBDatabase', 'IDBRequest', 'IDBTransaction', 'KeyOperation', 'MediaController', 'MessagePort', 'ModalWindow', 'Notification', 'SVGElementInstance', 'Screen', 'TextTrack', 'TextTrackCue', 'TextTrackList', 'WebSocket', 'WebSocketWorker', 'Worker', 'XMLHttpRequest', 'XMLHttpRequestEventTarget', 'XMLHttpRequestUpload'], function (o) {\n if (!win[o] || !win[o].prototype || !Object.prototype.hasOwnProperty.call(win[o].prototype, 'addEventListener')) return;\n\n __proxy(win[o].prototype, 'addEventListener', function (original) {\n return __traceOriginalScript(original, eventTargetCallbackAccessor);\n });\n\n __proxy(win[o].prototype, 'removeEventListener', function (original) {\n return __traceOriginalScript(original, eventTargetCallbackAccessor, true);\n });\n });\n\n function __traceOriginalScript(fn, callbackAccessor, alsoCallOriginal) {\n if (alsoCallOriginal === void 0) {\n alsoCallOriginal = false;\n }\n\n return function () {\n // this is required for removeEventListener to remove anything added with\n // addEventListener before the functions started being wrapped by Bugsnag\n var args = [].slice.call(arguments);\n\n try {\n var cba = callbackAccessor(args);\n var cb = cba.get();\n if (alsoCallOriginal) fn.apply(this, args);\n if (typeof cb !== 'function') return fn.apply(this, args);\n\n if (cb.__trace__) {\n cba.replace(cb.__trace__);\n } else {\n var script = getCurrentScript(); // this function mustn't be annonymous due to a bug in the stack\n // generation logic, meaning it gets tripped up\n // see: https://github.com/stacktracejs/stack-generator/issues/6\n\n cb.__trace__ = function __trace__() {\n // set the script that called this function\n updateLastScript(script); // immediately unset the currentScript synchronously below, however\n // if this cb throws an error the line after will not get run so schedule\n // an almost-immediate aysnc update too\n\n _setTimeout(function () {\n updateLastScript(null);\n }, 0);\n\n var ret = cb.apply(this, arguments);\n updateLastScript(null);\n return ret;\n };\n\n cb.__trace__.__trace__ = cb.__trace__;\n cba.replace(cb.__trace__);\n }\n } catch (e) {// swallow these errors on Selenium:\n // Permission denied to access property '__trace__'\n // WebDriverException: Message: Permission denied to access property \"handleEvent\"\n } // IE8 doesn't let you call .apply() on setTimeout/setInterval\n\n\n if (fn.apply) return fn.apply(this, args);\n\n switch (args.length) {\n case 1:\n return fn(args[0]);\n\n case 2:\n return fn(args[0], args[1]);\n\n default:\n return fn();\n }\n };\n }\n },\n configSchema: {\n trackInlineScripts: {\n validate: function (value) {\n return value === true || value === false;\n },\n defaultValue: function () {\n return true;\n },\n message: 'should be true|false'\n }\n }\n };\n};\n\nfunction __proxy(host, name, replacer) {\n var original = host[name];\n if (!original) return original;\n var replacement = replacer(original);\n host[name] = replacement;\n return original;\n}\n\nfunction eventTargetCallbackAccessor(args) {\n var isEventHandlerObj = !!args[1] && typeof args[1].handleEvent === 'function';\n return {\n get: function () {\n return isEventHandlerObj ? args[1].handleEvent : args[1];\n },\n replace: function (fn) {\n if (isEventHandlerObj) {\n args[1].handleEvent = fn;\n } else {\n args[1] = fn;\n }\n }\n };\n}\n\n/*\n * Leaves breadcrumbs when the user interacts with the DOM\n */\nvar _$interactionBreadcrumbs_49 = function (win) {\n if (win === void 0) {\n win = window;\n }\n\n return {\n load: function (client) {\n if (!('addEventListener' in win)) return;\n if (!client._isBreadcrumbTypeEnabled('user')) return;\n win.addEventListener('click', function (event) {\n var targetText, targetSelector;\n\n try {\n targetText = getNodeText(event.target);\n targetSelector = getNodeSelector(event.target, win);\n } catch (e) {\n targetText = '[hidden]';\n targetSelector = '[hidden]';\n\n client._logger.error('Cross domain error when tracking click event. See docs: https://tinyurl.com/yy3rn63z');\n }\n\n client.leaveBreadcrumb('UI click', {\n targetText: targetText,\n targetSelector: targetSelector\n }, 'user');\n }, true);\n }\n };\n};\n\nvar trimStart = /^\\s+/;\nvar trimEnd = /(^|[^\\s])\\s+$/;\n\nfunction getNodeText(el) {\n var text = el.textContent || el.innerText || '';\n\n if (!text && (el.type === 'submit' || el.type === 'button')) {\n text = el.value;\n }\n\n text = text.replace(trimStart, '').replace(trimEnd, '$1');\n\n if (text.length > 140) {\n return text.slice(0, 135) + '(...)';\n }\n\n return text;\n} // Create a label from tagname, id and css class of the element\n\n\nfunction getNodeSelector(el, win) {\n var parts = [el.tagName];\n if (el.id) parts.push('#' + el.id);\n if (el.className && el.className.length) parts.push(\".\" + el.className.split(' ').join('.')); // Can't get much more advanced with the current browser\n\n if (!win.document.querySelectorAll || !Array.prototype.indexOf) return parts.join('');\n\n try {\n if (win.document.querySelectorAll(parts.join('')).length === 1) return parts.join('');\n } catch (e) {\n // Sometimes the query selector can be invalid just return it as-is\n return parts.join('');\n } // try to get a more specific selector if this one matches more than one element\n\n\n if (el.parentNode.childNodes.length > 1) {\n var index = Array.prototype.indexOf.call(el.parentNode.childNodes, el) + 1;\n parts.push(\":nth-child(\" + index + \")\");\n }\n\n if (win.document.querySelectorAll(parts.join('')).length === 1) return parts.join(''); // try prepending the parent node selector\n\n if (el.parentNode) return getNodeSelector(el.parentNode, win) + \" > \" + parts.join('');\n return parts.join('');\n}\n\nvar _$navigationBreadcrumbs_50 = {};\n/*\n* Leaves breadcrumbs when navigation methods are called or events are emitted\n*/\n_$navigationBreadcrumbs_50 = function (win) {\n if (win === void 0) {\n win = window;\n }\n\n var plugin = {\n load: function (client) {\n if (!('addEventListener' in win)) return;\n if (!client._isBreadcrumbTypeEnabled('navigation')) return; // returns a function that will drop a breadcrumb with a given name\n\n var drop = function (name) {\n return function () {\n return client.leaveBreadcrumb(name, {}, 'navigation');\n };\n }; // simple drops – just names, no meta\n\n\n win.addEventListener('pagehide', drop('Page hidden'), true);\n win.addEventListener('pageshow', drop('Page shown'), true);\n win.addEventListener('load', drop('Page loaded'), true);\n win.document.addEventListener('DOMContentLoaded', drop('DOMContentLoaded'), true); // some browsers like to emit popstate when the page loads, so only add the popstate listener after that\n\n win.addEventListener('load', function () {\n return win.addEventListener('popstate', drop('Navigated back'), true);\n }); // hashchange has some metadata that we care about\n\n win.addEventListener('hashchange', function (event) {\n var metadata = event.oldURL ? {\n from: relativeLocation(event.oldURL, win),\n to: relativeLocation(event.newURL, win),\n state: getCurrentState(win)\n } : {\n to: relativeLocation(win.location.href, win)\n };\n client.leaveBreadcrumb('Hash changed', metadata, 'navigation');\n }, true); // the only way to know about replaceState/pushState is to wrap them… >_<\n\n if (win.history.replaceState) wrapHistoryFn(client, win.history, 'replaceState', win);\n if (win.history.pushState) wrapHistoryFn(client, win.history, 'pushState', win);\n }\n };\n\n if (\"production\" !== 'production') {\n plugin.destroy = function (win) {\n if (win === void 0) {\n win = window;\n }\n\n win.history.replaceState._restore();\n\n win.history.pushState._restore();\n };\n }\n\n return plugin;\n};\n\nif (\"production\" !== 'production') {\n _$navigationBreadcrumbs_50.destroy = function (win) {\n if (win === void 0) {\n win = window;\n }\n\n win.history.replaceState._restore();\n\n win.history.pushState._restore();\n };\n} // takes a full url like http://foo.com:1234/pages/01.html?yes=no#section-2 and returns\n// just the path and hash parts, e.g. /pages/01.html?yes=no#section-2\n\n\nvar relativeLocation = function (url, win) {\n var a = win.document.createElement('A');\n a.href = url;\n return \"\" + a.pathname + a.search + a.hash;\n};\n\nvar stateChangeToMetadata = function (win, state, title, url) {\n var currentPath = relativeLocation(win.location.href, win);\n return {\n title: title,\n state: state,\n prevState: getCurrentState(win),\n to: url || currentPath,\n from: currentPath\n };\n};\n\nvar wrapHistoryFn = function (client, target, fn, win) {\n var orig = target[fn];\n\n target[fn] = function (state, title, url) {\n client.leaveBreadcrumb(\"History \" + fn, stateChangeToMetadata(win, state, title, url), 'navigation'); // if throttle plugin is in use, reset the event sent count\n\n if (typeof client.resetEventCount === 'function') client.resetEventCount(); // if the client is operating in auto session-mode, a new route should trigger a new session\n\n if (client._config.autoTrackSessions) client.startSession(); // Internet Explorer will convert `undefined` to a string when passed, causing an unintended redirect\n // to '/undefined'. therefore we only pass the url if it's not undefined.\n\n orig.apply(target, [state, title].concat(url !== undefined ? url : []));\n };\n\n if (\"production\" !== 'production') {\n target[fn]._restore = function () {\n target[fn] = orig;\n };\n }\n};\n\nvar getCurrentState = function (win) {\n try {\n return win.history.state;\n } catch (e) {}\n};\n\nvar BREADCRUMB_TYPE = 'request';\n\n/* removed: var _$includes_13 = require('@bugsnag/core/lib/es-utils/includes'); */;\n/*\n * Leaves breadcrumbs when network requests occur\n */\n\n\nvar _$networkBreadcrumbs_51 = function (_ignoredUrls, win) {\n if (_ignoredUrls === void 0) {\n _ignoredUrls = [];\n }\n\n if (win === void 0) {\n win = window;\n }\n\n var restoreFunctions = [];\n var plugin = {\n load: function (client) {\n if (!client._isBreadcrumbTypeEnabled('request')) return;\n var ignoredUrls = [client._config.endpoints.notify, client._config.endpoints.sessions].concat(_ignoredUrls);\n monkeyPatchXMLHttpRequest();\n monkeyPatchFetch(); // XMLHttpRequest monkey patch\n\n function monkeyPatchXMLHttpRequest() {\n if (!('addEventListener' in win.XMLHttpRequest.prototype)) return;\n var nativeOpen = win.XMLHttpRequest.prototype.open; // override native open()\n\n win.XMLHttpRequest.prototype.open = function open(method, url) {\n var _this = this;\n\n var requestSetupKey = false;\n\n var error = function () {\n return handleXHRError(method, url);\n };\n\n var load = function () {\n return handleXHRLoad(method, url, _this.status);\n }; // if we have already setup listeners, it means open() was called twice, we need to remove\n // the listeners and recreate them\n\n\n if (requestSetupKey) {\n this.removeEventListener('load', load);\n this.removeEventListener('error', error);\n } // attach load event listener\n\n\n this.addEventListener('load', load); // attach error event listener\n\n this.addEventListener('error', error);\n requestSetupKey = true;\n nativeOpen.apply(this, arguments);\n };\n\n if (\"production\" !== 'production') {\n restoreFunctions.push(function () {\n win.XMLHttpRequest.prototype.open = nativeOpen;\n });\n }\n }\n\n function handleXHRLoad(method, url, status) {\n if (url === undefined) {\n client._logger.warn('The request URL is no longer present on this XMLHttpRequest. A breadcrumb cannot be left for this request.');\n\n return;\n } // an XMLHttpRequest's URL can be an object as long as its 'toString'\n // returns a URL, e.g. a HTMLAnchorElement\n\n\n if (typeof url === 'string' && _$includes_13(ignoredUrls, url.replace(/\\?.*$/, ''))) {\n // don't leave a network breadcrumb from bugsnag notify calls\n return;\n }\n\n var metadata = {\n status: status,\n request: method + \" \" + url\n };\n\n if (status >= 400) {\n // contacted server but got an error response\n client.leaveBreadcrumb('XMLHttpRequest failed', metadata, BREADCRUMB_TYPE);\n } else {\n client.leaveBreadcrumb('XMLHttpRequest succeeded', metadata, BREADCRUMB_TYPE);\n }\n }\n\n function handleXHRError(method, url) {\n if (url === undefined) {\n client._logger.warn('The request URL is no longer present on this XMLHttpRequest. A breadcrumb cannot be left for this request.');\n\n return;\n }\n\n if (typeof url === 'string' && _$includes_13(ignoredUrls, url.replace(/\\?.*$/, ''))) {\n // don't leave a network breadcrumb from bugsnag notify calls\n return;\n } // failed to contact server\n\n\n client.leaveBreadcrumb('XMLHttpRequest error', {\n request: method + \" \" + url\n }, BREADCRUMB_TYPE);\n } // window.fetch monkey patch\n\n\n function monkeyPatchFetch() {\n // only patch it if it exists and if it is not a polyfill (patching a polyfilled\n // fetch() results in duplicate breadcrumbs for the same request because the\n // implementation uses XMLHttpRequest which is also patched)\n if (!('fetch' in win) || win.fetch.polyfill) return;\n var oldFetch = win.fetch;\n\n win.fetch = function fetch() {\n var _arguments = arguments;\n var urlOrRequest = arguments[0];\n var options = arguments[1];\n var method;\n var url = null;\n\n if (urlOrRequest && typeof urlOrRequest === 'object') {\n url = urlOrRequest.url;\n\n if (options && 'method' in options) {\n method = options.method;\n } else if (urlOrRequest && 'method' in urlOrRequest) {\n method = urlOrRequest.method;\n }\n } else {\n url = urlOrRequest;\n\n if (options && 'method' in options) {\n method = options.method;\n }\n }\n\n if (method === undefined) {\n method = 'GET';\n }\n\n return new Promise(function (resolve, reject) {\n // pass through to native fetch\n oldFetch.apply(void 0, _arguments).then(function (response) {\n handleFetchSuccess(response, method, url);\n resolve(response);\n })[\"catch\"](function (error) {\n handleFetchError(method, url);\n reject(error);\n });\n });\n };\n\n if (\"production\" !== 'production') {\n restoreFunctions.push(function () {\n win.fetch = oldFetch;\n });\n }\n }\n\n var handleFetchSuccess = function (response, method, url) {\n var metadata = {\n status: response.status,\n request: method + \" \" + url\n };\n\n if (response.status >= 400) {\n // when the request comes back with a 4xx or 5xx status it does not reject the fetch promise,\n client.leaveBreadcrumb('fetch() failed', metadata, BREADCRUMB_TYPE);\n } else {\n client.leaveBreadcrumb('fetch() succeeded', metadata, BREADCRUMB_TYPE);\n }\n };\n\n var handleFetchError = function (method, url) {\n client.leaveBreadcrumb('fetch() error', {\n request: method + \" \" + url\n }, BREADCRUMB_TYPE);\n };\n }\n };\n\n if (\"production\" !== 'production') {\n plugin.destroy = function () {\n restoreFunctions.forEach(function (fn) {\n return fn();\n });\n restoreFunctions = [];\n };\n }\n\n return plugin;\n};\n\n/* removed: var _$intRange_24 = require('@bugsnag/core/lib/validators/int-range'); */;\n/*\n * Throttles and dedupes events\n */\n\n\nvar _$throttle_52 = {\n load: function (client) {\n // track sent events for each init of the plugin\n var n = 0; // add onError hook\n\n client.addOnError(function (event) {\n // have max events been sent already?\n if (n >= client._config.maxEvents) {\n client._logger.warn(\"Cancelling event send due to maxEvents per session limit of \" + client._config.maxEvents + \" being reached\");\n\n return false;\n }\n\n n++;\n });\n\n client.resetEventCount = function () {\n n = 0;\n };\n },\n configSchema: {\n maxEvents: {\n defaultValue: function () {\n return 10;\n },\n message: 'should be a positive integer ≤100',\n validate: function (val) {\n return _$intRange_24(1, 100)(val);\n }\n }\n }\n};\n\nvar _$stripQueryString_53 = {};\n/*\n * Remove query strings (and fragments) from stacktraces\n */\n/* removed: var _$map_16 = require('@bugsnag/core/lib/es-utils/map'); */;\n\n/* removed: var _$reduce_17 = require('@bugsnag/core/lib/es-utils/reduce'); */;\n\n_$stripQueryString_53 = {\n load: function (client) {\n client.addOnError(function (event) {\n var allFrames = _$reduce_17(event.errors, function (accum, er) {\n return accum.concat(er.stacktrace);\n }, []);\n _$map_16(allFrames, function (frame) {\n frame.file = strip(frame.file);\n });\n });\n }\n};\n\nvar strip = _$stripQueryString_53._strip = function (str) {\n return typeof str === 'string' ? str.replace(/\\?.*$/, '').replace(/#.*$/, '') : str;\n};\n\n/*\n * Automatically notifies Bugsnag when window.onerror is called\n */\nvar _$onerror_54 = function (win, component) {\n if (win === void 0) {\n win = window;\n }\n\n if (component === void 0) {\n component = 'window onerror';\n }\n\n return {\n load: function (client) {\n if (!client._config.autoDetectErrors) return;\n if (!client._config.enabledErrorTypes.unhandledExceptions) return;\n\n function onerror(messageOrEvent, url, lineNo, charNo, error) {\n // Ignore errors with no info due to CORS settings\n if (lineNo === 0 && /Script error\\.?/.test(messageOrEvent)) {\n client._logger.warn('Ignoring cross-domain or eval script error. See docs: https://tinyurl.com/yy3rn63z');\n } else {\n // any error sent to window.onerror is unhandled and has severity=error\n var handledState = {\n severity: 'error',\n unhandled: true,\n severityReason: {\n type: 'unhandledException'\n }\n };\n var event; // window.onerror can be called in a number of ways. This big if-else is how we\n // figure out which arguments were supplied, and what kind of values it received.\n\n if (error) {\n // if the last parameter (error) was supplied, this is a modern browser's\n // way of saying \"this value was thrown and not caught\"\n event = client.Event.create(error, true, handledState, component, 1);\n decorateStack(event.errors[0].stacktrace, url, lineNo, charNo);\n } else if ( // This complex case detects \"error\" events that are typically synthesised\n // by jquery's trigger method (although can be created in other ways). In\n // order to detect this:\n // - the first argument (message) must exist and be an object (most likely it's a jQuery event)\n // - the second argument (url) must either not exist or be something other than a string (if it\n // exists and is not a string, it'll be the extraParameters argument from jQuery's trigger()\n // function)\n // - the third, fourth and fifth arguments must not exist (lineNo, charNo and error)\n typeof messageOrEvent === 'object' && messageOrEvent !== null && (!url || typeof url !== 'string') && !lineNo && !charNo && !error) {\n // The jQuery event may have a \"type\" property, if so use it as part of the error message\n var name = messageOrEvent.type ? \"Event: \" + messageOrEvent.type : 'Error'; // attempt to find a message from one of the conventional properties, but\n // default to empty string (the event will fill it with a placeholder)\n\n var message = messageOrEvent.message || messageOrEvent.detail || '';\n event = client.Event.create({\n name: name,\n message: message\n }, true, handledState, component, 1); // provide the original thing onerror received – not our error-like object we passed to _notify\n\n event.originalError = messageOrEvent; // include the raw input as metadata – it might contain more info than we extracted\n\n event.addMetadata(component, {\n event: messageOrEvent,\n extraParameters: url\n });\n } else {\n // Lastly, if there was no \"error\" parameter this event was probably from an old\n // browser that doesn't support that. Instead we need to generate a stacktrace.\n event = client.Event.create(messageOrEvent, true, handledState, component, 1);\n decorateStack(event.errors[0].stacktrace, url, lineNo, charNo);\n }\n\n client._notify(event);\n }\n\n if (typeof prevOnError === 'function') prevOnError.apply(this, arguments);\n }\n\n var prevOnError = win.onerror;\n win.onerror = onerror;\n }\n };\n}; // Sometimes the stacktrace has less information than was passed to window.onerror.\n// This function will augment the first stackframe with any useful info that was\n// received as arguments to the onerror callback.\n\n\nvar decorateStack = function (stack, url, lineNo, charNo) {\n if (!stack[0]) stack.push({});\n var culprit = stack[0];\n if (!culprit.file && typeof url === 'string') culprit.file = url;\n if (!culprit.lineNumber && isActualNumber(lineNo)) culprit.lineNumber = lineNo;\n\n if (!culprit.columnNumber) {\n if (isActualNumber(charNo)) {\n culprit.columnNumber = charNo;\n } else if (window.event && isActualNumber(window.event.errorCharacter)) {\n culprit.columnNumber = window.event.errorCharacter;\n }\n }\n};\n\nvar isActualNumber = function (n) {\n return typeof n === 'number' && String.call(n) !== 'NaN';\n};\n\n/* removed: var _$map_16 = require('@bugsnag/core/lib/es-utils/map'); */;\n\n/* removed: var _$iserror_20 = require('@bugsnag/core/lib/iserror'); */;\n\nvar _listener;\n/*\n * Automatically notifies Bugsnag when window.onunhandledrejection is called\n */\n\n\nvar _$unhandledRejection_55 = function (win) {\n if (win === void 0) {\n win = window;\n }\n\n var plugin = {\n load: function (client) {\n if (!client._config.autoDetectErrors || !client._config.enabledErrorTypes.unhandledRejections) return;\n\n var listener = function (evt) {\n var error = evt.reason;\n var isBluebird = false; // accessing properties on evt.detail can throw errors (see #394)\n\n try {\n if (evt.detail && evt.detail.reason) {\n error = evt.detail.reason;\n isBluebird = true;\n }\n } catch (e) {}\n\n var event = client.Event.create(error, false, {\n severity: 'error',\n unhandled: true,\n severityReason: {\n type: 'unhandledPromiseRejection'\n }\n }, 'unhandledrejection handler', 1, client._logger);\n\n if (isBluebird) {\n _$map_16(event.errors[0].stacktrace, fixBluebirdStacktrace(error));\n }\n\n client._notify(event, function (event) {\n if (_$iserror_20(event.originalError) && !event.originalError.stack) {\n var _event$addMetadata;\n\n event.addMetadata('unhandledRejection handler', (_event$addMetadata = {}, _event$addMetadata[Object.prototype.toString.call(event.originalError)] = {\n name: event.originalError.name,\n message: event.originalError.message,\n code: event.originalError.code\n }, _event$addMetadata));\n }\n });\n };\n\n if ('addEventListener' in win) {\n win.addEventListener('unhandledrejection', listener);\n } else {\n win.onunhandledrejection = function (reason, promise) {\n listener({\n detail: {\n reason: reason,\n promise: promise\n }\n });\n };\n }\n\n _listener = listener;\n }\n };\n\n if (\"production\" !== 'production') {\n plugin.destroy = function (win) {\n if (win === void 0) {\n win = window;\n }\n\n if (_listener) {\n if ('addEventListener' in win) {\n win.removeEventListener('unhandledrejection', _listener);\n } else {\n win.onunhandledrejection = null;\n }\n }\n\n _listener = null;\n };\n }\n\n return plugin;\n}; // The stack parser on bluebird stacks in FF get a suprious first frame:\n//\n// Error: derp\n// b@http://localhost:5000/bluebird.html:22:24\n// a@http://localhost:5000/bluebird.html:18:9\n// @http://localhost:5000/bluebird.html:14:9\n//\n// results in\n// […]\n// 0: Object { file: \"Error: derp\", method: undefined, lineNumber: undefined, … }\n// 1: Object { file: \"http://localhost:5000/bluebird.html\", method: \"b\", lineNumber: 22, … }\n// 2: Object { file: \"http://localhost:5000/bluebird.html\", method: \"a\", lineNumber: 18, … }\n// 3: Object { file: \"http://localhost:5000/bluebird.html\", lineNumber: 14, columnNumber: 9, … }\n//\n// so the following reduce/accumulator function removes such frames\n//\n// Bluebird pads method names with spaces so trim that too…\n// https://github.com/petkaantonov/bluebird/blob/b7f21399816d02f979fe434585334ce901dcaf44/src/debuggability.js#L568-L571\n\n\nvar fixBluebirdStacktrace = function (error) {\n return function (frame) {\n if (frame.file === error.toString()) return;\n\n if (frame.method) {\n frame.method = frame.method.replace(/^\\s+/, '');\n }\n };\n};\n\nvar _$notifier_2 = {};\nvar name = 'Bugsnag JavaScript';\nvar version = '7.22.3';\nvar url = 'https://github.com/bugsnag/bugsnag-js';\n\n/* removed: var _$Client_4 = require('@bugsnag/core/client'); */;\n\n/* removed: var _$Event_6 = require('@bugsnag/core/event'); */;\n\n/* removed: var _$Session_35 = require('@bugsnag/core/session'); */;\n\n/* removed: var _$Breadcrumb_3 = require('@bugsnag/core/breadcrumb'); */;\n\n/* removed: var _$map_16 = require('@bugsnag/core/lib/es-utils/map'); */;\n\n/* removed: var _$keys_15 = require('@bugsnag/core/lib/es-utils/keys'); */;\n\n/* removed: var _$assign_11 = require('@bugsnag/core/lib/es-utils/assign'); */; // extend the base config schema with some browser-specific options\n\n\nvar __schema_2 = _$assign_11({}, _$config_5.schema, _$config_1);\n\n/* removed: var _$onerror_54 = require('@bugsnag/plugin-window-onerror'); */;\n\n/* removed: var _$unhandledRejection_55 = require('@bugsnag/plugin-window-unhandled-rejection'); */;\n\n/* removed: var _$app_38 = require('@bugsnag/plugin-app-duration'); */;\n\n/* removed: var _$device_40 = require('@bugsnag/plugin-browser-device'); */;\n\n/* removed: var _$context_39 = require('@bugsnag/plugin-browser-context'); */;\n\n/* removed: var _$request_44 = require('@bugsnag/plugin-browser-request'); */;\n\n/* removed: var _$throttle_52 = require('@bugsnag/plugin-simple-throttle'); */;\n\n/* removed: var _$consoleBreadcrumbs_47 = require('@bugsnag/plugin-console-breadcrumbs'); */;\n\n/* removed: var _$networkBreadcrumbs_51 = require('@bugsnag/plugin-network-breadcrumbs'); */;\n\n/* removed: var _$navigationBreadcrumbs_50 = require('@bugsnag/plugin-navigation-breadcrumbs'); */;\n\n/* removed: var _$interactionBreadcrumbs_49 = require('@bugsnag/plugin-interaction-breadcrumbs'); */;\n\n/* removed: var _$inlineScriptContent_48 = require('@bugsnag/plugin-inline-script-content'); */;\n\n/* removed: var _$session_45 = require('@bugsnag/plugin-browser-session'); */;\n\n/* removed: var _$clientIp_46 = require('@bugsnag/plugin-client-ip'); */;\n\n/* removed: var _$stripQueryString_53 = require('@bugsnag/plugin-strip-query-string'); */; // delivery mechanisms\n\n\n/* removed: var _$delivery_36 = require('@bugsnag/delivery-x-domain-request'); */;\n\n/* removed: var _$delivery_37 = require('@bugsnag/delivery-xml-http-request'); */;\n\nvar Bugsnag = {\n _client: null,\n createClient: function (opts) {\n // handle very simple use case where user supplies just the api key as a string\n if (typeof opts === 'string') opts = {\n apiKey: opts\n };\n if (!opts) opts = {};\n var internalPlugins = [// add browser-specific plugins\n _$app_38, _$device_40(), _$context_39(), _$request_44(), _$throttle_52, _$session_45, _$clientIp_46, _$stripQueryString_53, _$onerror_54(), _$unhandledRejection_55(), _$navigationBreadcrumbs_50(), _$interactionBreadcrumbs_49(), _$networkBreadcrumbs_51(), _$consoleBreadcrumbs_47, // this one added last to avoid wrapping functionality before bugsnag uses it\n _$inlineScriptContent_48()]; // configure a client with user supplied options\n\n var bugsnag = new _$Client_4(opts, __schema_2, internalPlugins, {\n name: name,\n version: version,\n url: url\n }); // set delivery based on browser capability (IE 8+9 have an XDomainRequest object)\n\n bugsnag._setDelivery(window.XDomainRequest ? _$delivery_36 : _$delivery_37);\n\n bugsnag._logger.debug('Loaded!');\n\n bugsnag.leaveBreadcrumb('Bugsnag loaded', {}, 'state');\n return bugsnag._config.autoTrackSessions ? bugsnag.startSession() : bugsnag;\n },\n start: function (opts) {\n if (Bugsnag._client) {\n Bugsnag._client._logger.warn('Bugsnag.start() was called more than once. Ignoring.');\n\n return Bugsnag._client;\n }\n\n Bugsnag._client = Bugsnag.createClient(opts);\n return Bugsnag._client;\n },\n isStarted: function () {\n return Bugsnag._client != null;\n }\n};\n_$map_16(['resetEventCount'].concat(_$keys_15(_$Client_4.prototype)), function (m) {\n if (/^_/.test(m)) return;\n\n Bugsnag[m] = function () {\n if (!Bugsnag._client) return console.log(\"Bugsnag.\" + m + \"() was called before Bugsnag.start()\");\n Bugsnag._client._depth += 1;\n\n var ret = Bugsnag._client[m].apply(Bugsnag._client, arguments);\n\n Bugsnag._client._depth -= 1;\n return ret;\n };\n});\n_$notifier_2 = Bugsnag;\n_$notifier_2.Client = _$Client_4;\n_$notifier_2.Event = _$Event_6;\n_$notifier_2.Session = _$Session_35;\n_$notifier_2.Breadcrumb = _$Breadcrumb_3; // Export a \"default\" property for compatibility with ESM imports\n\n_$notifier_2[\"default\"] = Bugsnag;\n\nreturn _$notifier_2;\n\n});\n//# sourceMappingURL=bugsnag.js.map\n","module.exports = require('@bugsnag/browser')\n","// Backbone.js 1.5.0\n\n// (c) 2010-2022 Jeremy Ashkenas and DocumentCloud\n// Backbone may be freely distributed under the MIT license.\n// For all details and documentation:\n// http://backbonejs.org\n\n(function(factory) {\n\n // Establish the root object, `window` (`self`) in the browser, or `global` on the server.\n // We use `self` instead of `window` for `WebWorker` support.\n var root = typeof self == 'object' && self.self === self && self ||\n typeof global == 'object' && global.global === global && global;\n\n // Set up Backbone appropriately for the environment. Start with AMD.\n if (typeof define === 'function' && define.amd) {\n define(['underscore', 'jquery', 'exports'], function(_, $, exports) {\n // Export global even in AMD case in case this script is loaded with\n // others that may still expect a global Backbone.\n root.Backbone = factory(root, exports, _, $);\n });\n\n // Next for Node.js or CommonJS. jQuery may not be needed as a module.\n } else if (typeof exports !== 'undefined') {\n var _ = require('underscore'), $;\n try { $ = require('jquery'); } catch (e) {}\n factory(root, exports, _, $);\n\n // Finally, as a browser global.\n } else {\n root.Backbone = factory(root, {}, root._, root.jQuery || root.Zepto || root.ender || root.$);\n }\n\n})(function(root, Backbone, _, $) {\n\n // Initial Setup\n // -------------\n\n // Save the previous value of the `Backbone` variable, so that it can be\n // restored later on, if `noConflict` is used.\n var previousBackbone = root.Backbone;\n\n // Create a local reference to a common array method we'll want to use later.\n var slice = Array.prototype.slice;\n\n // Current version of the library. Keep in sync with `package.json`.\n Backbone.VERSION = '1.5.0';\n\n // For Backbone's purposes, jQuery, Zepto, Ender, or My Library (kidding) owns\n // the `$` variable.\n Backbone.$ = $;\n\n // Runs Backbone.js in *noConflict* mode, returning the `Backbone` variable\n // to its previous owner. Returns a reference to this Backbone object.\n Backbone.noConflict = function() {\n root.Backbone = previousBackbone;\n return this;\n };\n\n // Turn on `emulateHTTP` to support legacy HTTP servers. Setting this option\n // will fake `\"PATCH\"`, `\"PUT\"` and `\"DELETE\"` requests via the `_method` parameter and\n // set a `X-Http-Method-Override` header.\n Backbone.emulateHTTP = false;\n\n // Turn on `emulateJSON` to support legacy servers that can't deal with direct\n // `application/json` requests ... this will encode the body as\n // `application/x-www-form-urlencoded` instead and will send the model in a\n // form param named `model`.\n Backbone.emulateJSON = false;\n\n // Backbone.Events\n // ---------------\n\n // A module that can be mixed in to *any object* in order to provide it with\n // a custom event channel. You may bind a callback to an event with `on` or\n // remove with `off`; `trigger`-ing an event fires all callbacks in\n // succession.\n //\n // var object = {};\n // _.extend(object, Backbone.Events);\n // object.on('expand', function(){ alert('expanded'); });\n // object.trigger('expand');\n //\n var Events = Backbone.Events = {};\n\n // Regular expression used to split event strings.\n var eventSplitter = /\\s+/;\n\n // A private global variable to share between listeners and listenees.\n var _listening;\n\n // Iterates over the standard `event, callback` (as well as the fancy multiple\n // space-separated events `\"change blur\", callback` and jQuery-style event\n // maps `{event: callback}`).\n var eventsApi = function(iteratee, events, name, callback, opts) {\n var i = 0, names;\n if (name && typeof name === 'object') {\n // Handle event maps.\n if (callback !== void 0 && 'context' in opts && opts.context === void 0) opts.context = callback;\n for (names = _.keys(name); i < names.length ; i++) {\n events = eventsApi(iteratee, events, names[i], name[names[i]], opts);\n }\n } else if (name && eventSplitter.test(name)) {\n // Handle space-separated event names by delegating them individually.\n for (names = name.split(eventSplitter); i < names.length; i++) {\n events = iteratee(events, names[i], callback, opts);\n }\n } else {\n // Finally, standard events.\n events = iteratee(events, name, callback, opts);\n }\n return events;\n };\n\n // Bind an event to a `callback` function. Passing `\"all\"` will bind\n // the callback to all events fired.\n Events.on = function(name, callback, context) {\n this._events = eventsApi(onApi, this._events || {}, name, callback, {\n context: context,\n ctx: this,\n listening: _listening\n });\n\n if (_listening) {\n var listeners = this._listeners || (this._listeners = {});\n listeners[_listening.id] = _listening;\n // Allow the listening to use a counter, instead of tracking\n // callbacks for library interop\n _listening.interop = false;\n }\n\n return this;\n };\n\n // Inversion-of-control versions of `on`. Tell *this* object to listen to\n // an event in another object... keeping track of what it's listening to\n // for easier unbinding later.\n Events.listenTo = function(obj, name, callback) {\n if (!obj) return this;\n var id = obj._listenId || (obj._listenId = _.uniqueId('l'));\n var listeningTo = this._listeningTo || (this._listeningTo = {});\n var listening = _listening = listeningTo[id];\n\n // This object is not listening to any other events on `obj` yet.\n // Setup the necessary references to track the listening callbacks.\n if (!listening) {\n this._listenId || (this._listenId = _.uniqueId('l'));\n listening = _listening = listeningTo[id] = new Listening(this, obj);\n }\n\n // Bind callbacks on obj.\n var error = tryCatchOn(obj, name, callback, this);\n _listening = void 0;\n\n if (error) throw error;\n // If the target obj is not Backbone.Events, track events manually.\n if (listening.interop) listening.on(name, callback);\n\n return this;\n };\n\n // The reducing API that adds a callback to the `events` object.\n var onApi = function(events, name, callback, options) {\n if (callback) {\n var handlers = events[name] || (events[name] = []);\n var context = options.context, ctx = options.ctx, listening = options.listening;\n if (listening) listening.count++;\n\n handlers.push({callback: callback, context: context, ctx: context || ctx, listening: listening});\n }\n return events;\n };\n\n // An try-catch guarded #on function, to prevent poisoning the global\n // `_listening` variable.\n var tryCatchOn = function(obj, name, callback, context) {\n try {\n obj.on(name, callback, context);\n } catch (e) {\n return e;\n }\n };\n\n // Remove one or many callbacks. If `context` is null, removes all\n // callbacks with that function. If `callback` is null, removes all\n // callbacks for the event. If `name` is null, removes all bound\n // callbacks for all events.\n Events.off = function(name, callback, context) {\n if (!this._events) return this;\n this._events = eventsApi(offApi, this._events, name, callback, {\n context: context,\n listeners: this._listeners\n });\n\n return this;\n };\n\n // Tell this object to stop listening to either specific events ... or\n // to every object it's currently listening to.\n Events.stopListening = function(obj, name, callback) {\n var listeningTo = this._listeningTo;\n if (!listeningTo) return this;\n\n var ids = obj ? [obj._listenId] : _.keys(listeningTo);\n for (var i = 0; i < ids.length; i++) {\n var listening = listeningTo[ids[i]];\n\n // If listening doesn't exist, this object is not currently\n // listening to obj. Break out early.\n if (!listening) break;\n\n listening.obj.off(name, callback, this);\n if (listening.interop) listening.off(name, callback);\n }\n if (_.isEmpty(listeningTo)) this._listeningTo = void 0;\n\n return this;\n };\n\n // The reducing API that removes a callback from the `events` object.\n var offApi = function(events, name, callback, options) {\n if (!events) return;\n\n var context = options.context, listeners = options.listeners;\n var i = 0, names;\n\n // Delete all event listeners and \"drop\" events.\n if (!name && !context && !callback) {\n for (names = _.keys(listeners); i < names.length; i++) {\n listeners[names[i]].cleanup();\n }\n return;\n }\n\n names = name ? [name] : _.keys(events);\n for (; i < names.length; i++) {\n name = names[i];\n var handlers = events[name];\n\n // Bail out if there are no events stored.\n if (!handlers) break;\n\n // Find any remaining events.\n var remaining = [];\n for (var j = 0; j < handlers.length; j++) {\n var handler = handlers[j];\n if (\n callback && callback !== handler.callback &&\n callback !== handler.callback._callback ||\n context && context !== handler.context\n ) {\n remaining.push(handler);\n } else {\n var listening = handler.listening;\n if (listening) listening.off(name, callback);\n }\n }\n\n // Replace events if there are any remaining. Otherwise, clean up.\n if (remaining.length) {\n events[name] = remaining;\n } else {\n delete events[name];\n }\n }\n\n return events;\n };\n\n // Bind an event to only be triggered a single time. After the first time\n // the callback is invoked, its listener will be removed. If multiple events\n // are passed in using the space-separated syntax, the handler will fire\n // once for each event, not once for a combination of all events.\n Events.once = function(name, callback, context) {\n // Map the event into a `{event: once}` object.\n var events = eventsApi(onceMap, {}, name, callback, this.off.bind(this));\n if (typeof name === 'string' && context == null) callback = void 0;\n return this.on(events, callback, context);\n };\n\n // Inversion-of-control versions of `once`.\n Events.listenToOnce = function(obj, name, callback) {\n // Map the event into a `{event: once}` object.\n var events = eventsApi(onceMap, {}, name, callback, this.stopListening.bind(this, obj));\n return this.listenTo(obj, events);\n };\n\n // Reduces the event callbacks into a map of `{event: onceWrapper}`.\n // `offer` unbinds the `onceWrapper` after it has been called.\n var onceMap = function(map, name, callback, offer) {\n if (callback) {\n var once = map[name] = _.once(function() {\n offer(name, once);\n callback.apply(this, arguments);\n });\n once._callback = callback;\n }\n return map;\n };\n\n // Trigger one or many events, firing all bound callbacks. Callbacks are\n // passed the same arguments as `trigger` is, apart from the event name\n // (unless you're listening on `\"all\"`, which will cause your callback to\n // receive the true name of the event as the first argument).\n Events.trigger = function(name) {\n if (!this._events) return this;\n\n var length = Math.max(0, arguments.length - 1);\n var args = Array(length);\n for (var i = 0; i < length; i++) args[i] = arguments[i + 1];\n\n eventsApi(triggerApi, this._events, name, void 0, args);\n return this;\n };\n\n // Handles triggering the appropriate event callbacks.\n var triggerApi = function(objEvents, name, callback, args) {\n if (objEvents) {\n var events = objEvents[name];\n var allEvents = objEvents.all;\n if (events && allEvents) allEvents = allEvents.slice();\n if (events) triggerEvents(events, args);\n if (allEvents) triggerEvents(allEvents, [name].concat(args));\n }\n return objEvents;\n };\n\n // A difficult-to-believe, but optimized internal dispatch function for\n // triggering events. Tries to keep the usual cases speedy (most internal\n // Backbone events have 3 arguments).\n var triggerEvents = function(events, args) {\n var ev, i = -1, l = events.length, a1 = args[0], a2 = args[1], a3 = args[2];\n switch (args.length) {\n case 0: while (++i < l) (ev = events[i]).callback.call(ev.ctx); return;\n case 1: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1); return;\n case 2: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1, a2); return;\n case 3: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1, a2, a3); return;\n default: while (++i < l) (ev = events[i]).callback.apply(ev.ctx, args); return;\n }\n };\n\n // A listening class that tracks and cleans up memory bindings\n // when all callbacks have been offed.\n var Listening = function(listener, obj) {\n this.id = listener._listenId;\n this.listener = listener;\n this.obj = obj;\n this.interop = true;\n this.count = 0;\n this._events = void 0;\n };\n\n Listening.prototype.on = Events.on;\n\n // Offs a callback (or several).\n // Uses an optimized counter if the listenee uses Backbone.Events.\n // Otherwise, falls back to manual tracking to support events\n // library interop.\n Listening.prototype.off = function(name, callback) {\n var cleanup;\n if (this.interop) {\n this._events = eventsApi(offApi, this._events, name, callback, {\n context: void 0,\n listeners: void 0\n });\n cleanup = !this._events;\n } else {\n this.count--;\n cleanup = this.count === 0;\n }\n if (cleanup) this.cleanup();\n };\n\n // Cleans up memory bindings between the listener and the listenee.\n Listening.prototype.cleanup = function() {\n delete this.listener._listeningTo[this.obj._listenId];\n if (!this.interop) delete this.obj._listeners[this.id];\n };\n\n // Aliases for backwards compatibility.\n Events.bind = Events.on;\n Events.unbind = Events.off;\n\n // Allow the `Backbone` object to serve as a global event bus, for folks who\n // want global \"pubsub\" in a convenient place.\n _.extend(Backbone, Events);\n\n // Backbone.Model\n // --------------\n\n // Backbone **Models** are the basic data object in the framework --\n // frequently representing a row in a table in a database on your server.\n // A discrete chunk of data and a bunch of useful, related methods for\n // performing computations and transformations on that data.\n\n // Create a new model with the specified attributes. A client id (`cid`)\n // is automatically generated and assigned for you.\n var Model = Backbone.Model = function(attributes, options) {\n var attrs = attributes || {};\n options || (options = {});\n this.preinitialize.apply(this, arguments);\n this.cid = _.uniqueId(this.cidPrefix);\n this.attributes = {};\n if (options.collection) this.collection = options.collection;\n if (options.parse) attrs = this.parse(attrs, options) || {};\n var defaults = _.result(this, 'defaults');\n\n // Just _.defaults would work fine, but the additional _.extends\n // is in there for historical reasons. See #3843.\n attrs = _.defaults(_.extend({}, defaults, attrs), defaults);\n\n this.set(attrs, options);\n this.changed = {};\n this.initialize.apply(this, arguments);\n };\n\n // Attach all inheritable methods to the Model prototype.\n _.extend(Model.prototype, Events, {\n\n // A hash of attributes whose current and previous value differ.\n changed: null,\n\n // The value returned during the last failed validation.\n validationError: null,\n\n // The default name for the JSON `id` attribute is `\"id\"`. MongoDB and\n // CouchDB users may want to set this to `\"_id\"`.\n idAttribute: 'id',\n\n // The prefix is used to create the client id which is used to identify models locally.\n // You may want to override this if you're experiencing name clashes with model ids.\n cidPrefix: 'c',\n\n // preinitialize is an empty function by default. You can override it with a function\n // or object. preinitialize will run before any instantiation logic is run in the Model.\n preinitialize: function(){},\n\n // Initialize is an empty function by default. Override it with your own\n // initialization logic.\n initialize: function(){},\n\n // Return a copy of the model's `attributes` object.\n toJSON: function(options) {\n return _.clone(this.attributes);\n },\n\n // Proxy `Backbone.sync` by default -- but override this if you need\n // custom syncing semantics for *this* particular model.\n sync: function() {\n return Backbone.sync.apply(this, arguments);\n },\n\n // Get the value of an attribute.\n get: function(attr) {\n return this.attributes[attr];\n },\n\n // Get the HTML-escaped value of an attribute.\n escape: function(attr) {\n return _.escape(this.get(attr));\n },\n\n // Returns `true` if the attribute contains a value that is not null\n // or undefined.\n has: function(attr) {\n return this.get(attr) != null;\n },\n\n // Special-cased proxy to underscore's `_.matches` method.\n matches: function(attrs) {\n return !!_.iteratee(attrs, this)(this.attributes);\n },\n\n // Set a hash of model attributes on the object, firing `\"change\"`. This is\n // the core primitive operation of a model, updating the data and notifying\n // anyone who needs to know about the change in state. The heart of the beast.\n set: function(key, val, options) {\n if (key == null) return this;\n\n // Handle both `\"key\", value` and `{key: value}` -style arguments.\n var attrs;\n if (typeof key === 'object') {\n attrs = key;\n options = val;\n } else {\n (attrs = {})[key] = val;\n }\n\n options || (options = {});\n\n // Run validation.\n if (!this._validate(attrs, options)) return false;\n\n // Extract attributes and options.\n var unset = options.unset;\n var silent = options.silent;\n var changes = [];\n var changing = this._changing;\n this._changing = true;\n\n if (!changing) {\n this._previousAttributes = _.clone(this.attributes);\n this.changed = {};\n }\n\n var current = this.attributes;\n var changed = this.changed;\n var prev = this._previousAttributes;\n\n // For each `set` attribute, update or delete the current value.\n for (var attr in attrs) {\n val = attrs[attr];\n if (!_.isEqual(current[attr], val)) changes.push(attr);\n if (!_.isEqual(prev[attr], val)) {\n changed[attr] = val;\n } else {\n delete changed[attr];\n }\n unset ? delete current[attr] : current[attr] = val;\n }\n\n // Update the `id`.\n if (this.idAttribute in attrs) {\n var prevId = this.id;\n this.id = this.get(this.idAttribute);\n this.trigger('changeId', this, prevId, options);\n }\n\n // Trigger all relevant attribute changes.\n if (!silent) {\n if (changes.length) this._pending = options;\n for (var i = 0; i < changes.length; i++) {\n this.trigger('change:' + changes[i], this, current[changes[i]], options);\n }\n }\n\n // You might be wondering why there's a `while` loop here. Changes can\n // be recursively nested within `\"change\"` events.\n if (changing) return this;\n if (!silent) {\n while (this._pending) {\n options = this._pending;\n this._pending = false;\n this.trigger('change', this, options);\n }\n }\n this._pending = false;\n this._changing = false;\n return this;\n },\n\n // Remove an attribute from the model, firing `\"change\"`. `unset` is a noop\n // if the attribute doesn't exist.\n unset: function(attr, options) {\n return this.set(attr, void 0, _.extend({}, options, {unset: true}));\n },\n\n // Clear all attributes on the model, firing `\"change\"`.\n clear: function(options) {\n var attrs = {};\n for (var key in this.attributes) attrs[key] = void 0;\n return this.set(attrs, _.extend({}, options, {unset: true}));\n },\n\n // Determine if the model has changed since the last `\"change\"` event.\n // If you specify an attribute name, determine if that attribute has changed.\n hasChanged: function(attr) {\n if (attr == null) return !_.isEmpty(this.changed);\n return _.has(this.changed, attr);\n },\n\n // Return an object containing all the attributes that have changed, or\n // false if there are no changed attributes. Useful for determining what\n // parts of a view need to be updated and/or what attributes need to be\n // persisted to the server. Unset attributes will be set to undefined.\n // You can also pass an attributes object to diff against the model,\n // determining if there *would be* a change.\n changedAttributes: function(diff) {\n if (!diff) return this.hasChanged() ? _.clone(this.changed) : false;\n var old = this._changing ? this._previousAttributes : this.attributes;\n var changed = {};\n var hasChanged;\n for (var attr in diff) {\n var val = diff[attr];\n if (_.isEqual(old[attr], val)) continue;\n changed[attr] = val;\n hasChanged = true;\n }\n return hasChanged ? changed : false;\n },\n\n // Get the previous value of an attribute, recorded at the time the last\n // `\"change\"` event was fired.\n previous: function(attr) {\n if (attr == null || !this._previousAttributes) return null;\n return this._previousAttributes[attr];\n },\n\n // Get all of the attributes of the model at the time of the previous\n // `\"change\"` event.\n previousAttributes: function() {\n return _.clone(this._previousAttributes);\n },\n\n // Fetch the model from the server, merging the response with the model's\n // local attributes. Any changed attributes will trigger a \"change\" event.\n fetch: function(options) {\n options = _.extend({parse: true}, options);\n var model = this;\n var success = options.success;\n options.success = function(resp) {\n var serverAttrs = options.parse ? model.parse(resp, options) : resp;\n if (!model.set(serverAttrs, options)) return false;\n if (success) success.call(options.context, model, resp, options);\n model.trigger('sync', model, resp, options);\n };\n wrapError(this, options);\n return this.sync('read', this, options);\n },\n\n // Set a hash of model attributes, and sync the model to the server.\n // If the server returns an attributes hash that differs, the model's\n // state will be `set` again.\n save: function(key, val, options) {\n // Handle both `\"key\", value` and `{key: value}` -style arguments.\n var attrs;\n if (key == null || typeof key === 'object') {\n attrs = key;\n options = val;\n } else {\n (attrs = {})[key] = val;\n }\n\n options = _.extend({validate: true, parse: true}, options);\n var wait = options.wait;\n\n // If we're not waiting and attributes exist, save acts as\n // `set(attr).save(null, opts)` with validation. Otherwise, check if\n // the model will be valid when the attributes, if any, are set.\n if (attrs && !wait) {\n if (!this.set(attrs, options)) return false;\n } else if (!this._validate(attrs, options)) {\n return false;\n }\n\n // After a successful server-side save, the client is (optionally)\n // updated with the server-side state.\n var model = this;\n var success = options.success;\n var attributes = this.attributes;\n options.success = function(resp) {\n // Ensure attributes are restored during synchronous saves.\n model.attributes = attributes;\n var serverAttrs = options.parse ? model.parse(resp, options) : resp;\n if (wait) serverAttrs = _.extend({}, attrs, serverAttrs);\n if (serverAttrs && !model.set(serverAttrs, options)) return false;\n if (success) success.call(options.context, model, resp, options);\n model.trigger('sync', model, resp, options);\n };\n wrapError(this, options);\n\n // Set temporary attributes if `{wait: true}` to properly find new ids.\n if (attrs && wait) this.attributes = _.extend({}, attributes, attrs);\n\n var method = this.isNew() ? 'create' : options.patch ? 'patch' : 'update';\n if (method === 'patch' && !options.attrs) options.attrs = attrs;\n var xhr = this.sync(method, this, options);\n\n // Restore attributes.\n this.attributes = attributes;\n\n return xhr;\n },\n\n // Destroy this model on the server if it was already persisted.\n // Optimistically removes the model from its collection, if it has one.\n // If `wait: true` is passed, waits for the server to respond before removal.\n destroy: function(options) {\n options = options ? _.clone(options) : {};\n var model = this;\n var success = options.success;\n var wait = options.wait;\n\n var destroy = function() {\n model.stopListening();\n model.trigger('destroy', model, model.collection, options);\n };\n\n options.success = function(resp) {\n if (wait) destroy();\n if (success) success.call(options.context, model, resp, options);\n if (!model.isNew()) model.trigger('sync', model, resp, options);\n };\n\n var xhr = false;\n if (this.isNew()) {\n _.defer(options.success);\n } else {\n wrapError(this, options);\n xhr = this.sync('delete', this, options);\n }\n if (!wait) destroy();\n return xhr;\n },\n\n // Default URL for the model's representation on the server -- if you're\n // using Backbone's restful methods, override this to change the endpoint\n // that will be called.\n url: function() {\n var base =\n _.result(this, 'urlRoot') ||\n _.result(this.collection, 'url') ||\n urlError();\n if (this.isNew()) return base;\n var id = this.get(this.idAttribute);\n return base.replace(/[^\\/]$/, '$&/') + encodeURIComponent(id);\n },\n\n // **parse** converts a response into the hash of attributes to be `set` on\n // the model. The default implementation is just to pass the response along.\n parse: function(resp, options) {\n return resp;\n },\n\n // Create a new model with identical attributes to this one.\n clone: function() {\n return new this.constructor(this.attributes);\n },\n\n // A model is new if it has never been saved to the server, and lacks an id.\n isNew: function() {\n return !this.has(this.idAttribute);\n },\n\n // Check if the model is currently in a valid state.\n isValid: function(options) {\n return this._validate({}, _.extend({}, options, {validate: true}));\n },\n\n // Run validation against the next complete set of model attributes,\n // returning `true` if all is well. Otherwise, fire an `\"invalid\"` event.\n _validate: function(attrs, options) {\n if (!options.validate || !this.validate) return true;\n attrs = _.extend({}, this.attributes, attrs);\n var error = this.validationError = this.validate(attrs, options) || null;\n if (!error) return true;\n this.trigger('invalid', this, error, _.extend(options, {validationError: error}));\n return false;\n }\n\n });\n\n // Backbone.Collection\n // -------------------\n\n // If models tend to represent a single row of data, a Backbone Collection is\n // more analogous to a table full of data ... or a small slice or page of that\n // table, or a collection of rows that belong together for a particular reason\n // -- all of the messages in this particular folder, all of the documents\n // belonging to this particular author, and so on. Collections maintain\n // indexes of their models, both in order, and for lookup by `id`.\n\n // Create a new **Collection**, perhaps to contain a specific type of `model`.\n // If a `comparator` is specified, the Collection will maintain\n // its models in sort order, as they're added and removed.\n var Collection = Backbone.Collection = function(models, options) {\n options || (options = {});\n this.preinitialize.apply(this, arguments);\n if (options.model) this.model = options.model;\n if (options.comparator !== void 0) this.comparator = options.comparator;\n this._reset();\n this.initialize.apply(this, arguments);\n if (models) this.reset(models, _.extend({silent: true}, options));\n };\n\n // Default options for `Collection#set`.\n var setOptions = {add: true, remove: true, merge: true};\n var addOptions = {add: true, remove: false};\n\n // Splices `insert` into `array` at index `at`.\n var splice = function(array, insert, at) {\n at = Math.min(Math.max(at, 0), array.length);\n var tail = Array(array.length - at);\n var length = insert.length;\n var i;\n for (i = 0; i < tail.length; i++) tail[i] = array[i + at];\n for (i = 0; i < length; i++) array[i + at] = insert[i];\n for (i = 0; i < tail.length; i++) array[i + length + at] = tail[i];\n };\n\n // Define the Collection's inheritable methods.\n _.extend(Collection.prototype, Events, {\n\n // The default model for a collection is just a **Backbone.Model**.\n // This should be overridden in most cases.\n model: Model,\n\n\n // preinitialize is an empty function by default. You can override it with a function\n // or object. preinitialize will run before any instantiation logic is run in the Collection.\n preinitialize: function(){},\n\n // Initialize is an empty function by default. Override it with your own\n // initialization logic.\n initialize: function(){},\n\n // The JSON representation of a Collection is an array of the\n // models' attributes.\n toJSON: function(options) {\n return this.map(function(model) { return model.toJSON(options); });\n },\n\n // Proxy `Backbone.sync` by default.\n sync: function() {\n return Backbone.sync.apply(this, arguments);\n },\n\n // Add a model, or list of models to the set. `models` may be Backbone\n // Models or raw JavaScript objects to be converted to Models, or any\n // combination of the two.\n add: function(models, options) {\n return this.set(models, _.extend({merge: false}, options, addOptions));\n },\n\n // Remove a model, or a list of models from the set.\n remove: function(models, options) {\n options = _.extend({}, options);\n var singular = !_.isArray(models);\n models = singular ? [models] : models.slice();\n var removed = this._removeModels(models, options);\n if (!options.silent && removed.length) {\n options.changes = {added: [], merged: [], removed: removed};\n this.trigger('update', this, options);\n }\n return singular ? removed[0] : removed;\n },\n\n // Update a collection by `set`-ing a new list of models, adding new ones,\n // removing models that are no longer present, and merging models that\n // already exist in the collection, as necessary. Similar to **Model#set**,\n // the core operation for updating the data contained by the collection.\n set: function(models, options) {\n if (models == null) return;\n\n options = _.extend({}, setOptions, options);\n if (options.parse && !this._isModel(models)) {\n models = this.parse(models, options) || [];\n }\n\n var singular = !_.isArray(models);\n models = singular ? [models] : models.slice();\n\n var at = options.at;\n if (at != null) at = +at;\n if (at > this.length) at = this.length;\n if (at < 0) at += this.length + 1;\n\n var set = [];\n var toAdd = [];\n var toMerge = [];\n var toRemove = [];\n var modelMap = {};\n\n var add = options.add;\n var merge = options.merge;\n var remove = options.remove;\n\n var sort = false;\n var sortable = this.comparator && at == null && options.sort !== false;\n var sortAttr = _.isString(this.comparator) ? this.comparator : null;\n\n // Turn bare objects into model references, and prevent invalid models\n // from being added.\n var model, i;\n for (i = 0; i < models.length; i++) {\n model = models[i];\n\n // If a duplicate is found, prevent it from being added and\n // optionally merge it into the existing model.\n var existing = this.get(model);\n if (existing) {\n if (merge && model !== existing) {\n var attrs = this._isModel(model) ? model.attributes : model;\n if (options.parse) attrs = existing.parse(attrs, options);\n existing.set(attrs, options);\n toMerge.push(existing);\n if (sortable && !sort) sort = existing.hasChanged(sortAttr);\n }\n if (!modelMap[existing.cid]) {\n modelMap[existing.cid] = true;\n set.push(existing);\n }\n models[i] = existing;\n\n // If this is a new, valid model, push it to the `toAdd` list.\n } else if (add) {\n model = models[i] = this._prepareModel(model, options);\n if (model) {\n toAdd.push(model);\n this._addReference(model, options);\n modelMap[model.cid] = true;\n set.push(model);\n }\n }\n }\n\n // Remove stale models.\n if (remove) {\n for (i = 0; i < this.length; i++) {\n model = this.models[i];\n if (!modelMap[model.cid]) toRemove.push(model);\n }\n if (toRemove.length) this._removeModels(toRemove, options);\n }\n\n // See if sorting is needed, update `length` and splice in new models.\n var orderChanged = false;\n var replace = !sortable && add && remove;\n if (set.length && replace) {\n orderChanged = this.length !== set.length || _.some(this.models, function(m, index) {\n return m !== set[index];\n });\n this.models.length = 0;\n splice(this.models, set, 0);\n this.length = this.models.length;\n } else if (toAdd.length) {\n if (sortable) sort = true;\n splice(this.models, toAdd, at == null ? this.length : at);\n this.length = this.models.length;\n }\n\n // Silently sort the collection if appropriate.\n if (sort) this.sort({silent: true});\n\n // Unless silenced, it's time to fire all appropriate add/sort/update events.\n if (!options.silent) {\n for (i = 0; i < toAdd.length; i++) {\n if (at != null) options.index = at + i;\n model = toAdd[i];\n model.trigger('add', model, this, options);\n }\n if (sort || orderChanged) this.trigger('sort', this, options);\n if (toAdd.length || toRemove.length || toMerge.length) {\n options.changes = {\n added: toAdd,\n removed: toRemove,\n merged: toMerge\n };\n this.trigger('update', this, options);\n }\n }\n\n // Return the added (or merged) model (or models).\n return singular ? models[0] : models;\n },\n\n // When you have more items than you want to add or remove individually,\n // you can reset the entire set with a new list of models, without firing\n // any granular `add` or `remove` events. Fires `reset` when finished.\n // Useful for bulk operations and optimizations.\n reset: function(models, options) {\n options = options ? _.clone(options) : {};\n for (var i = 0; i < this.models.length; i++) {\n this._removeReference(this.models[i], options);\n }\n options.previousModels = this.models;\n this._reset();\n models = this.add(models, _.extend({silent: true}, options));\n if (!options.silent) this.trigger('reset', this, options);\n return models;\n },\n\n // Add a model to the end of the collection.\n push: function(model, options) {\n return this.add(model, _.extend({at: this.length}, options));\n },\n\n // Remove a model from the end of the collection.\n pop: function(options) {\n var model = this.at(this.length - 1);\n return this.remove(model, options);\n },\n\n // Add a model to the beginning of the collection.\n unshift: function(model, options) {\n return this.add(model, _.extend({at: 0}, options));\n },\n\n // Remove a model from the beginning of the collection.\n shift: function(options) {\n var model = this.at(0);\n return this.remove(model, options);\n },\n\n // Slice out a sub-array of models from the collection.\n slice: function() {\n return slice.apply(this.models, arguments);\n },\n\n // Get a model from the set by id, cid, model object with id or cid\n // properties, or an attributes object that is transformed through modelId.\n get: function(obj) {\n if (obj == null) return void 0;\n return this._byId[obj] ||\n this._byId[this.modelId(this._isModel(obj) ? obj.attributes : obj, obj.idAttribute)] ||\n obj.cid && this._byId[obj.cid];\n },\n\n // Returns `true` if the model is in the collection.\n has: function(obj) {\n return this.get(obj) != null;\n },\n\n // Get the model at the given index.\n at: function(index) {\n if (index < 0) index += this.length;\n return this.models[index];\n },\n\n // Return models with matching attributes. Useful for simple cases of\n // `filter`.\n where: function(attrs, first) {\n return this[first ? 'find' : 'filter'](attrs);\n },\n\n // Return the first model with matching attributes. Useful for simple cases\n // of `find`.\n findWhere: function(attrs) {\n return this.where(attrs, true);\n },\n\n // Force the collection to re-sort itself. You don't need to call this under\n // normal circumstances, as the set will maintain sort order as each item\n // is added.\n sort: function(options) {\n var comparator = this.comparator;\n if (!comparator) throw new Error('Cannot sort a set without a comparator');\n options || (options = {});\n\n var length = comparator.length;\n if (_.isFunction(comparator)) comparator = comparator.bind(this);\n\n // Run sort based on type of `comparator`.\n if (length === 1 || _.isString(comparator)) {\n this.models = this.sortBy(comparator);\n } else {\n this.models.sort(comparator);\n }\n if (!options.silent) this.trigger('sort', this, options);\n return this;\n },\n\n // Pluck an attribute from each model in the collection.\n pluck: function(attr) {\n return this.map(attr + '');\n },\n\n // Fetch the default set of models for this collection, resetting the\n // collection when they arrive. If `reset: true` is passed, the response\n // data will be passed through the `reset` method instead of `set`.\n fetch: function(options) {\n options = _.extend({parse: true}, options);\n var success = options.success;\n var collection = this;\n options.success = function(resp) {\n var method = options.reset ? 'reset' : 'set';\n collection[method](resp, options);\n if (success) success.call(options.context, collection, resp, options);\n collection.trigger('sync', collection, resp, options);\n };\n wrapError(this, options);\n return this.sync('read', this, options);\n },\n\n // Create a new instance of a model in this collection. Add the model to the\n // collection immediately, unless `wait: true` is passed, in which case we\n // wait for the server to agree.\n create: function(model, options) {\n options = options ? _.clone(options) : {};\n var wait = options.wait;\n model = this._prepareModel(model, options);\n if (!model) return false;\n if (!wait) this.add(model, options);\n var collection = this;\n var success = options.success;\n options.success = function(m, resp, callbackOpts) {\n if (wait) {\n m.off('error', this._forwardPristineError, this);\n collection.add(m, callbackOpts);\n }\n if (success) success.call(callbackOpts.context, m, resp, callbackOpts);\n };\n // In case of wait:true, our collection is not listening to any\n // of the model's events yet, so it will not forward the error\n // event. In this special case, we need to listen for it\n // separately and handle the event just once.\n // (The reason we don't need to do this for the sync event is\n // in the success handler above: we add the model first, which\n // causes the collection to listen, and then invoke the callback\n // that triggers the event.)\n if (wait) {\n model.once('error', this._forwardPristineError, this);\n }\n model.save(null, options);\n return model;\n },\n\n // **parse** converts a response into a list of models to be added to the\n // collection. The default implementation is just to pass it through.\n parse: function(resp, options) {\n return resp;\n },\n\n // Create a new collection with an identical list of models as this one.\n clone: function() {\n return new this.constructor(this.models, {\n model: this.model,\n comparator: this.comparator\n });\n },\n\n // Define how to uniquely identify models in the collection.\n modelId: function(attrs, idAttribute) {\n return attrs[idAttribute || this.model.prototype.idAttribute || 'id'];\n },\n\n // Get an iterator of all models in this collection.\n values: function() {\n return new CollectionIterator(this, ITERATOR_VALUES);\n },\n\n // Get an iterator of all model IDs in this collection.\n keys: function() {\n return new CollectionIterator(this, ITERATOR_KEYS);\n },\n\n // Get an iterator of all [ID, model] tuples in this collection.\n entries: function() {\n return new CollectionIterator(this, ITERATOR_KEYSVALUES);\n },\n\n // Private method to reset all internal state. Called when the collection\n // is first initialized or reset.\n _reset: function() {\n this.length = 0;\n this.models = [];\n this._byId = {};\n },\n\n // Prepare a hash of attributes (or other model) to be added to this\n // collection.\n _prepareModel: function(attrs, options) {\n if (this._isModel(attrs)) {\n if (!attrs.collection) attrs.collection = this;\n return attrs;\n }\n options = options ? _.clone(options) : {};\n options.collection = this;\n\n var model;\n if (this.model.prototype) {\n model = new this.model(attrs, options);\n } else {\n // ES class methods didn't have prototype\n model = this.model(attrs, options);\n }\n\n if (!model.validationError) return model;\n this.trigger('invalid', this, model.validationError, options);\n return false;\n },\n\n // Internal method called by both remove and set.\n _removeModels: function(models, options) {\n var removed = [];\n for (var i = 0; i < models.length; i++) {\n var model = this.get(models[i]);\n if (!model) continue;\n\n var index = this.indexOf(model);\n this.models.splice(index, 1);\n this.length--;\n\n // Remove references before triggering 'remove' event to prevent an\n // infinite loop. #3693\n delete this._byId[model.cid];\n var id = this.modelId(model.attributes, model.idAttribute);\n if (id != null) delete this._byId[id];\n\n if (!options.silent) {\n options.index = index;\n model.trigger('remove', model, this, options);\n }\n\n removed.push(model);\n this._removeReference(model, options);\n }\n if (models.length > 0 && !options.silent) delete options.index;\n return removed;\n },\n\n // Method for checking whether an object should be considered a model for\n // the purposes of adding to the collection.\n _isModel: function(model) {\n return model instanceof Model;\n },\n\n // Internal method to create a model's ties to a collection.\n _addReference: function(model, options) {\n this._byId[model.cid] = model;\n var id = this.modelId(model.attributes, model.idAttribute);\n if (id != null) this._byId[id] = model;\n model.on('all', this._onModelEvent, this);\n },\n\n // Internal method to sever a model's ties to a collection.\n _removeReference: function(model, options) {\n delete this._byId[model.cid];\n var id = this.modelId(model.attributes, model.idAttribute);\n if (id != null) delete this._byId[id];\n if (this === model.collection) delete model.collection;\n model.off('all', this._onModelEvent, this);\n },\n\n // Internal method called every time a model in the set fires an event.\n // Sets need to update their indexes when models change ids. All other\n // events simply proxy through. \"add\" and \"remove\" events that originate\n // in other collections are ignored.\n _onModelEvent: function(event, model, collection, options) {\n if (model) {\n if ((event === 'add' || event === 'remove') && collection !== this) return;\n if (event === 'destroy') this.remove(model, options);\n if (event === 'changeId') {\n var prevId = this.modelId(model.previousAttributes(), model.idAttribute);\n var id = this.modelId(model.attributes, model.idAttribute);\n if (prevId != null) delete this._byId[prevId];\n if (id != null) this._byId[id] = model;\n }\n }\n this.trigger.apply(this, arguments);\n },\n\n // Internal callback method used in `create`. It serves as a\n // stand-in for the `_onModelEvent` method, which is not yet bound\n // during the `wait` period of the `create` call. We still want to\n // forward any `'error'` event at the end of the `wait` period,\n // hence a customized callback.\n _forwardPristineError: function(model, collection, options) {\n // Prevent double forward if the model was already in the\n // collection before the call to `create`.\n if (this.has(model)) return;\n this._onModelEvent('error', model, collection, options);\n }\n });\n\n // Defining an @@iterator method implements JavaScript's Iterable protocol.\n // In modern ES2015 browsers, this value is found at Symbol.iterator.\n /* global Symbol */\n var $$iterator = typeof Symbol === 'function' && Symbol.iterator;\n if ($$iterator) {\n Collection.prototype[$$iterator] = Collection.prototype.values;\n }\n\n // CollectionIterator\n // ------------------\n\n // A CollectionIterator implements JavaScript's Iterator protocol, allowing the\n // use of `for of` loops in modern browsers and interoperation between\n // Backbone.Collection and other JavaScript functions and third-party libraries\n // which can operate on Iterables.\n var CollectionIterator = function(collection, kind) {\n this._collection = collection;\n this._kind = kind;\n this._index = 0;\n };\n\n // This \"enum\" defines the three possible kinds of values which can be emitted\n // by a CollectionIterator that correspond to the values(), keys() and entries()\n // methods on Collection, respectively.\n var ITERATOR_VALUES = 1;\n var ITERATOR_KEYS = 2;\n var ITERATOR_KEYSVALUES = 3;\n\n // All Iterators should themselves be Iterable.\n if ($$iterator) {\n CollectionIterator.prototype[$$iterator] = function() {\n return this;\n };\n }\n\n CollectionIterator.prototype.next = function() {\n if (this._collection) {\n\n // Only continue iterating if the iterated collection is long enough.\n if (this._index < this._collection.length) {\n var model = this._collection.at(this._index);\n this._index++;\n\n // Construct a value depending on what kind of values should be iterated.\n var value;\n if (this._kind === ITERATOR_VALUES) {\n value = model;\n } else {\n var id = this._collection.modelId(model.attributes, model.idAttribute);\n if (this._kind === ITERATOR_KEYS) {\n value = id;\n } else { // ITERATOR_KEYSVALUES\n value = [id, model];\n }\n }\n return {value: value, done: false};\n }\n\n // Once exhausted, remove the reference to the collection so future\n // calls to the next method always return done.\n this._collection = void 0;\n }\n\n return {value: void 0, done: true};\n };\n\n // Backbone.View\n // -------------\n\n // Backbone Views are almost more convention than they are actual code. A View\n // is simply a JavaScript object that represents a logical chunk of UI in the\n // DOM. This might be a single item, an entire list, a sidebar or panel, or\n // even the surrounding frame which wraps your whole app. Defining a chunk of\n // UI as a **View** allows you to define your DOM events declaratively, without\n // having to worry about render order ... and makes it easy for the view to\n // react to specific changes in the state of your models.\n\n // Creating a Backbone.View creates its initial element outside of the DOM,\n // if an existing element is not provided...\n var View = Backbone.View = function(options) {\n this.cid = _.uniqueId('view');\n this.preinitialize.apply(this, arguments);\n _.extend(this, _.pick(options, viewOptions));\n this._ensureElement();\n this.initialize.apply(this, arguments);\n };\n\n // Cached regex to split keys for `delegate`.\n var delegateEventSplitter = /^(\\S+)\\s*(.*)$/;\n\n // List of view options to be set as properties.\n var viewOptions = ['model', 'collection', 'el', 'id', 'attributes', 'className', 'tagName', 'events'];\n\n // Set up all inheritable **Backbone.View** properties and methods.\n _.extend(View.prototype, Events, {\n\n // The default `tagName` of a View's element is `\"div\"`.\n tagName: 'div',\n\n // jQuery delegate for element lookup, scoped to DOM elements within the\n // current view. This should be preferred to global lookups where possible.\n $: function(selector) {\n return this.$el.find(selector);\n },\n\n // preinitialize is an empty function by default. You can override it with a function\n // or object. preinitialize will run before any instantiation logic is run in the View\n preinitialize: function(){},\n\n // Initialize is an empty function by default. Override it with your own\n // initialization logic.\n initialize: function(){},\n\n // **render** is the core function that your view should override, in order\n // to populate its element (`this.el`), with the appropriate HTML. The\n // convention is for **render** to always return `this`.\n render: function() {\n return this;\n },\n\n // Remove this view by taking the element out of the DOM, and removing any\n // applicable Backbone.Events listeners.\n remove: function() {\n this._removeElement();\n this.stopListening();\n return this;\n },\n\n // Remove this view's element from the document and all event listeners\n // attached to it. Exposed for subclasses using an alternative DOM\n // manipulation API.\n _removeElement: function() {\n this.$el.remove();\n },\n\n // Change the view's element (`this.el` property) and re-delegate the\n // view's events on the new element.\n setElement: function(element) {\n this.undelegateEvents();\n this._setElement(element);\n this.delegateEvents();\n return this;\n },\n\n // Creates the `this.el` and `this.$el` references for this view using the\n // given `el`. `el` can be a CSS selector or an HTML string, a jQuery\n // context or an element. Subclasses can override this to utilize an\n // alternative DOM manipulation API and are only required to set the\n // `this.el` property.\n _setElement: function(el) {\n this.$el = el instanceof Backbone.$ ? el : Backbone.$(el);\n this.el = this.$el[0];\n },\n\n // Set callbacks, where `this.events` is a hash of\n //\n // *{\"event selector\": \"callback\"}*\n //\n // {\n // 'mousedown .title': 'edit',\n // 'click .button': 'save',\n // 'click .open': function(e) { ... }\n // }\n //\n // pairs. Callbacks will be bound to the view, with `this` set properly.\n // Uses event delegation for efficiency.\n // Omitting the selector binds the event to `this.el`.\n delegateEvents: function(events) {\n events || (events = _.result(this, 'events'));\n if (!events) return this;\n this.undelegateEvents();\n for (var key in events) {\n var method = events[key];\n if (!_.isFunction(method)) method = this[method];\n if (!method) continue;\n var match = key.match(delegateEventSplitter);\n this.delegate(match[1], match[2], method.bind(this));\n }\n return this;\n },\n\n // Add a single event listener to the view's element (or a child element\n // using `selector`). This only works for delegate-able events: not `focus`,\n // `blur`, and not `change`, `submit`, and `reset` in Internet Explorer.\n delegate: function(eventName, selector, listener) {\n this.$el.on(eventName + '.delegateEvents' + this.cid, selector, listener);\n return this;\n },\n\n // Clears all callbacks previously bound to the view by `delegateEvents`.\n // You usually don't need to use this, but may wish to if you have multiple\n // Backbone views attached to the same DOM element.\n undelegateEvents: function() {\n if (this.$el) this.$el.off('.delegateEvents' + this.cid);\n return this;\n },\n\n // A finer-grained `undelegateEvents` for removing a single delegated event.\n // `selector` and `listener` are both optional.\n undelegate: function(eventName, selector, listener) {\n this.$el.off(eventName + '.delegateEvents' + this.cid, selector, listener);\n return this;\n },\n\n // Produces a DOM element to be assigned to your view. Exposed for\n // subclasses using an alternative DOM manipulation API.\n _createElement: function(tagName) {\n return document.createElement(tagName);\n },\n\n // Ensure that the View has a DOM element to render into.\n // If `this.el` is a string, pass it through `$()`, take the first\n // matching element, and re-assign it to `el`. Otherwise, create\n // an element from the `id`, `className` and `tagName` properties.\n _ensureElement: function() {\n if (!this.el) {\n var attrs = _.extend({}, _.result(this, 'attributes'));\n if (this.id) attrs.id = _.result(this, 'id');\n if (this.className) attrs['class'] = _.result(this, 'className');\n this.setElement(this._createElement(_.result(this, 'tagName')));\n this._setAttributes(attrs);\n } else {\n this.setElement(_.result(this, 'el'));\n }\n },\n\n // Set attributes from a hash on this view's element. Exposed for\n // subclasses using an alternative DOM manipulation API.\n _setAttributes: function(attributes) {\n this.$el.attr(attributes);\n }\n\n });\n\n // Proxy Backbone class methods to Underscore functions, wrapping the model's\n // `attributes` object or collection's `models` array behind the scenes.\n //\n // collection.filter(function(model) { return model.get('age') > 10 });\n // collection.each(this.addView);\n //\n // `Function#apply` can be slow so we use the method's arg count, if we know it.\n var addMethod = function(base, length, method, attribute) {\n switch (length) {\n case 1: return function() {\n return base[method](this[attribute]);\n };\n case 2: return function(value) {\n return base[method](this[attribute], value);\n };\n case 3: return function(iteratee, context) {\n return base[method](this[attribute], cb(iteratee, this), context);\n };\n case 4: return function(iteratee, defaultVal, context) {\n return base[method](this[attribute], cb(iteratee, this), defaultVal, context);\n };\n default: return function() {\n var args = slice.call(arguments);\n args.unshift(this[attribute]);\n return base[method].apply(base, args);\n };\n }\n };\n\n var addUnderscoreMethods = function(Class, base, methods, attribute) {\n _.each(methods, function(length, method) {\n if (base[method]) Class.prototype[method] = addMethod(base, length, method, attribute);\n });\n };\n\n // Support `collection.sortBy('attr')` and `collection.findWhere({id: 1})`.\n var cb = function(iteratee, instance) {\n if (_.isFunction(iteratee)) return iteratee;\n if (_.isObject(iteratee) && !instance._isModel(iteratee)) return modelMatcher(iteratee);\n if (_.isString(iteratee)) return function(model) { return model.get(iteratee); };\n return iteratee;\n };\n var modelMatcher = function(attrs) {\n var matcher = _.matches(attrs);\n return function(model) {\n return matcher(model.attributes);\n };\n };\n\n // Underscore methods that we want to implement on the Collection.\n // 90% of the core usefulness of Backbone Collections is actually implemented\n // right here:\n var collectionMethods = {forEach: 3, each: 3, map: 3, collect: 3, reduce: 0,\n foldl: 0, inject: 0, reduceRight: 0, foldr: 0, find: 3, detect: 3, filter: 3,\n select: 3, reject: 3, every: 3, all: 3, some: 3, any: 3, include: 3, includes: 3,\n contains: 3, invoke: 0, max: 3, min: 3, toArray: 1, size: 1, first: 3,\n head: 3, take: 3, initial: 3, rest: 3, tail: 3, drop: 3, last: 3,\n without: 0, difference: 0, indexOf: 3, shuffle: 1, lastIndexOf: 3,\n isEmpty: 1, chain: 1, sample: 3, partition: 3, groupBy: 3, countBy: 3,\n sortBy: 3, indexBy: 3, findIndex: 3, findLastIndex: 3};\n\n\n // Underscore methods that we want to implement on the Model, mapped to the\n // number of arguments they take.\n var modelMethods = {keys: 1, values: 1, pairs: 1, invert: 1, pick: 0,\n omit: 0, chain: 1, isEmpty: 1};\n\n // Mix in each Underscore method as a proxy to `Collection#models`.\n\n _.each([\n [Collection, collectionMethods, 'models'],\n [Model, modelMethods, 'attributes']\n ], function(config) {\n var Base = config[0],\n methods = config[1],\n attribute = config[2];\n\n Base.mixin = function(obj) {\n var mappings = _.reduce(_.functions(obj), function(memo, name) {\n memo[name] = 0;\n return memo;\n }, {});\n addUnderscoreMethods(Base, obj, mappings, attribute);\n };\n\n addUnderscoreMethods(Base, _, methods, attribute);\n });\n\n // Backbone.sync\n // -------------\n\n // Override this function to change the manner in which Backbone persists\n // models to the server. You will be passed the type of request, and the\n // model in question. By default, makes a RESTful Ajax request\n // to the model's `url()`. Some possible customizations could be:\n //\n // * Use `setTimeout` to batch rapid-fire updates into a single request.\n // * Send up the models as XML instead of JSON.\n // * Persist models via WebSockets instead of Ajax.\n //\n // Turn on `Backbone.emulateHTTP` in order to send `PUT` and `DELETE` requests\n // as `POST`, with a `_method` parameter containing the true HTTP method,\n // as well as all requests with the body as `application/x-www-form-urlencoded`\n // instead of `application/json` with the model in a param named `model`.\n // Useful when interfacing with server-side languages like **PHP** that make\n // it difficult to read the body of `PUT` requests.\n Backbone.sync = function(method, model, options) {\n var type = methodMap[method];\n\n // Default options, unless specified.\n _.defaults(options || (options = {}), {\n emulateHTTP: Backbone.emulateHTTP,\n emulateJSON: Backbone.emulateJSON\n });\n\n // Default JSON-request options.\n var params = {type: type, dataType: 'json'};\n\n // Ensure that we have a URL.\n if (!options.url) {\n params.url = _.result(model, 'url') || urlError();\n }\n\n // Ensure that we have the appropriate request data.\n if (options.data == null && model && (method === 'create' || method === 'update' || method === 'patch')) {\n params.contentType = 'application/json';\n params.data = JSON.stringify(options.attrs || model.toJSON(options));\n }\n\n // For older servers, emulate JSON by encoding the request into an HTML-form.\n if (options.emulateJSON) {\n params.contentType = 'application/x-www-form-urlencoded';\n params.data = params.data ? {model: params.data} : {};\n }\n\n // For older servers, emulate HTTP by mimicking the HTTP method with `_method`\n // And an `X-HTTP-Method-Override` header.\n if (options.emulateHTTP && (type === 'PUT' || type === 'DELETE' || type === 'PATCH')) {\n params.type = 'POST';\n if (options.emulateJSON) params.data._method = type;\n var beforeSend = options.beforeSend;\n options.beforeSend = function(xhr) {\n xhr.setRequestHeader('X-HTTP-Method-Override', type);\n if (beforeSend) return beforeSend.apply(this, arguments);\n };\n }\n\n // Don't process data on a non-GET request.\n if (params.type !== 'GET' && !options.emulateJSON) {\n params.processData = false;\n }\n\n // Pass along `textStatus` and `errorThrown` from jQuery.\n var error = options.error;\n options.error = function(xhr, textStatus, errorThrown) {\n options.textStatus = textStatus;\n options.errorThrown = errorThrown;\n if (error) error.call(options.context, xhr, textStatus, errorThrown);\n };\n\n // Make the request, allowing the user to override any Ajax options.\n var xhr = options.xhr = Backbone.ajax(_.extend(params, options));\n model.trigger('request', model, xhr, options);\n return xhr;\n };\n\n // Map from CRUD to HTTP for our default `Backbone.sync` implementation.\n var methodMap = {\n 'create': 'POST',\n 'update': 'PUT',\n 'patch': 'PATCH',\n 'delete': 'DELETE',\n 'read': 'GET'\n };\n\n // Set the default implementation of `Backbone.ajax` to proxy through to `$`.\n // Override this if you'd like to use a different library.\n Backbone.ajax = function() {\n return Backbone.$.ajax.apply(Backbone.$, arguments);\n };\n\n // Backbone.Router\n // ---------------\n\n // Routers map faux-URLs to actions, and fire events when routes are\n // matched. Creating a new one sets its `routes` hash, if not set statically.\n var Router = Backbone.Router = function(options) {\n options || (options = {});\n this.preinitialize.apply(this, arguments);\n if (options.routes) this.routes = options.routes;\n this._bindRoutes();\n this.initialize.apply(this, arguments);\n };\n\n // Cached regular expressions for matching named param parts and splatted\n // parts of route strings.\n var optionalParam = /\\((.*?)\\)/g;\n var namedParam = /(\\(\\?)?:\\w+/g;\n var splatParam = /\\*\\w+/g;\n var escapeRegExp = /[\\-{}\\[\\]+?.,\\\\\\^$|#\\s]/g;\n\n // Set up all inheritable **Backbone.Router** properties and methods.\n _.extend(Router.prototype, Events, {\n\n // preinitialize is an empty function by default. You can override it with a function\n // or object. preinitialize will run before any instantiation logic is run in the Router.\n preinitialize: function(){},\n\n // Initialize is an empty function by default. Override it with your own\n // initialization logic.\n initialize: function(){},\n\n // Manually bind a single named route to a callback. For example:\n //\n // this.route('search/:query/p:num', 'search', function(query, num) {\n // ...\n // });\n //\n route: function(route, name, callback) {\n if (!_.isRegExp(route)) route = this._routeToRegExp(route);\n if (_.isFunction(name)) {\n callback = name;\n name = '';\n }\n if (!callback) callback = this[name];\n var router = this;\n Backbone.history.route(route, function(fragment) {\n var args = router._extractParameters(route, fragment);\n if (router.execute(callback, args, name) !== false) {\n router.trigger.apply(router, ['route:' + name].concat(args));\n router.trigger('route', name, args);\n Backbone.history.trigger('route', router, name, args);\n }\n });\n return this;\n },\n\n // Execute a route handler with the provided parameters. This is an\n // excellent place to do pre-route setup or post-route cleanup.\n execute: function(callback, args, name) {\n if (callback) callback.apply(this, args);\n },\n\n // Simple proxy to `Backbone.history` to save a fragment into the history.\n navigate: function(fragment, options) {\n Backbone.history.navigate(fragment, options);\n return this;\n },\n\n // Bind all defined routes to `Backbone.history`. We have to reverse the\n // order of the routes here to support behavior where the most general\n // routes can be defined at the bottom of the route map.\n _bindRoutes: function() {\n if (!this.routes) return;\n this.routes = _.result(this, 'routes');\n var route, routes = _.keys(this.routes);\n while ((route = routes.pop()) != null) {\n this.route(route, this.routes[route]);\n }\n },\n\n // Convert a route string into a regular expression, suitable for matching\n // against the current location hash.\n _routeToRegExp: function(route) {\n route = route.replace(escapeRegExp, '\\\\$&')\n .replace(optionalParam, '(?:$1)?')\n .replace(namedParam, function(match, optional) {\n return optional ? match : '([^/?]+)';\n })\n .replace(splatParam, '([^?]*?)');\n return new RegExp('^' + route + '(?:\\\\?([\\\\s\\\\S]*))?$');\n },\n\n // Given a route, and a URL fragment that it matches, return the array of\n // extracted decoded parameters. Empty or unmatched parameters will be\n // treated as `null` to normalize cross-browser behavior.\n _extractParameters: function(route, fragment) {\n var params = route.exec(fragment).slice(1);\n return _.map(params, function(param, i) {\n // Don't decode the search params.\n if (i === params.length - 1) return param || null;\n return param ? decodeURIComponent(param) : null;\n });\n }\n\n });\n\n // Backbone.History\n // ----------------\n\n // Handles cross-browser history management, based on either\n // [pushState](http://diveintohtml5.info/history.html) and real URLs, or\n // [onhashchange](https://developer.mozilla.org/en-US/docs/DOM/window.onhashchange)\n // and URL fragments. If the browser supports neither (old IE, natch),\n // falls back to polling.\n var History = Backbone.History = function() {\n this.handlers = [];\n this.checkUrl = this.checkUrl.bind(this);\n\n // Ensure that `History` can be used outside of the browser.\n if (typeof window !== 'undefined') {\n this.location = window.location;\n this.history = window.history;\n }\n };\n\n // Cached regex for stripping a leading hash/slash and trailing space.\n var routeStripper = /^[#\\/]|\\s+$/g;\n\n // Cached regex for stripping leading and trailing slashes.\n var rootStripper = /^\\/+|\\/+$/g;\n\n // Cached regex for stripping urls of hash.\n var pathStripper = /#.*$/;\n\n // Has the history handling already been started?\n History.started = false;\n\n // Set up all inheritable **Backbone.History** properties and methods.\n _.extend(History.prototype, Events, {\n\n // The default interval to poll for hash changes, if necessary, is\n // twenty times a second.\n interval: 50,\n\n // Are we at the app root?\n atRoot: function() {\n var path = this.location.pathname.replace(/[^\\/]$/, '$&/');\n return path === this.root && !this.getSearch();\n },\n\n // Does the pathname match the root?\n matchRoot: function() {\n var path = this.decodeFragment(this.location.pathname);\n var rootPath = path.slice(0, this.root.length - 1) + '/';\n return rootPath === this.root;\n },\n\n // Unicode characters in `location.pathname` are percent encoded so they're\n // decoded for comparison. `%25` should not be decoded since it may be part\n // of an encoded parameter.\n decodeFragment: function(fragment) {\n return decodeURI(fragment.replace(/%25/g, '%2525'));\n },\n\n // In IE6, the hash fragment and search params are incorrect if the\n // fragment contains `?`.\n getSearch: function() {\n var match = this.location.href.replace(/#.*/, '').match(/\\?.+/);\n return match ? match[0] : '';\n },\n\n // Gets the true hash value. Cannot use location.hash directly due to bug\n // in Firefox where location.hash will always be decoded.\n getHash: function(window) {\n var match = (window || this).location.href.match(/#(.*)$/);\n return match ? match[1] : '';\n },\n\n // Get the pathname and search params, without the root.\n getPath: function() {\n var path = this.decodeFragment(\n this.location.pathname + this.getSearch()\n ).slice(this.root.length - 1);\n return path.charAt(0) === '/' ? path.slice(1) : path;\n },\n\n // Get the cross-browser normalized URL fragment from the path or hash.\n getFragment: function(fragment) {\n if (fragment == null) {\n if (this._usePushState || !this._wantsHashChange) {\n fragment = this.getPath();\n } else {\n fragment = this.getHash();\n }\n }\n return fragment.replace(routeStripper, '');\n },\n\n // Start the hash change handling, returning `true` if the current URL matches\n // an existing route, and `false` otherwise.\n start: function(options) {\n if (History.started) throw new Error('Backbone.history has already been started');\n History.started = true;\n\n // Figure out the initial configuration. Do we need an iframe?\n // Is pushState desired ... is it available?\n this.options = _.extend({root: '/'}, this.options, options);\n this.root = this.options.root;\n this._trailingSlash = this.options.trailingSlash;\n this._wantsHashChange = this.options.hashChange !== false;\n this._hasHashChange = 'onhashchange' in window && (document.documentMode === void 0 || document.documentMode > 7);\n this._useHashChange = this._wantsHashChange && this._hasHashChange;\n this._wantsPushState = !!this.options.pushState;\n this._hasPushState = !!(this.history && this.history.pushState);\n this._usePushState = this._wantsPushState && this._hasPushState;\n this.fragment = this.getFragment();\n\n // Normalize root to always include a leading and trailing slash.\n this.root = ('/' + this.root + '/').replace(rootStripper, '/');\n\n // Transition from hashChange to pushState or vice versa if both are\n // requested.\n if (this._wantsHashChange && this._wantsPushState) {\n\n // If we've started off with a route from a `pushState`-enabled\n // browser, but we're currently in a browser that doesn't support it...\n if (!this._hasPushState && !this.atRoot()) {\n var rootPath = this.root.slice(0, -1) || '/';\n this.location.replace(rootPath + '#' + this.getPath());\n // Return immediately as browser will do redirect to new url\n return true;\n\n // Or if we've started out with a hash-based route, but we're currently\n // in a browser where it could be `pushState`-based instead...\n } else if (this._hasPushState && this.atRoot()) {\n this.navigate(this.getHash(), {replace: true});\n }\n\n }\n\n // Proxy an iframe to handle location events if the browser doesn't\n // support the `hashchange` event, HTML5 history, or the user wants\n // `hashChange` but not `pushState`.\n if (!this._hasHashChange && this._wantsHashChange && !this._usePushState) {\n this.iframe = document.createElement('iframe');\n this.iframe.src = 'javascript:0';\n this.iframe.style.display = 'none';\n this.iframe.tabIndex = -1;\n var body = document.body;\n // Using `appendChild` will throw on IE < 9 if the document is not ready.\n var iWindow = body.insertBefore(this.iframe, body.firstChild).contentWindow;\n iWindow.document.open();\n iWindow.document.close();\n iWindow.location.hash = '#' + this.fragment;\n }\n\n // Add a cross-platform `addEventListener` shim for older browsers.\n var addEventListener = window.addEventListener || function(eventName, listener) {\n return attachEvent('on' + eventName, listener);\n };\n\n // Depending on whether we're using pushState or hashes, and whether\n // 'onhashchange' is supported, determine how we check the URL state.\n if (this._usePushState) {\n addEventListener('popstate', this.checkUrl, false);\n } else if (this._useHashChange && !this.iframe) {\n addEventListener('hashchange', this.checkUrl, false);\n } else if (this._wantsHashChange) {\n this._checkUrlInterval = setInterval(this.checkUrl, this.interval);\n }\n\n if (!this.options.silent) return this.loadUrl();\n },\n\n // Disable Backbone.history, perhaps temporarily. Not useful in a real app,\n // but possibly useful for unit testing Routers.\n stop: function() {\n // Add a cross-platform `removeEventListener` shim for older browsers.\n var removeEventListener = window.removeEventListener || function(eventName, listener) {\n return detachEvent('on' + eventName, listener);\n };\n\n // Remove window listeners.\n if (this._usePushState) {\n removeEventListener('popstate', this.checkUrl, false);\n } else if (this._useHashChange && !this.iframe) {\n removeEventListener('hashchange', this.checkUrl, false);\n }\n\n // Clean up the iframe if necessary.\n if (this.iframe) {\n document.body.removeChild(this.iframe);\n this.iframe = null;\n }\n\n // Some environments will throw when clearing an undefined interval.\n if (this._checkUrlInterval) clearInterval(this._checkUrlInterval);\n History.started = false;\n },\n\n // Add a route to be tested when the fragment changes. Routes added later\n // may override previous routes.\n route: function(route, callback) {\n this.handlers.unshift({route: route, callback: callback});\n },\n\n // Checks the current URL to see if it has changed, and if it has,\n // calls `loadUrl`, normalizing across the hidden iframe.\n checkUrl: function(e) {\n var current = this.getFragment();\n\n // If the user pressed the back button, the iframe's hash will have\n // changed and we should use that for comparison.\n if (current === this.fragment && this.iframe) {\n current = this.getHash(this.iframe.contentWindow);\n }\n\n if (current === this.fragment) return false;\n if (this.iframe) this.navigate(current);\n this.loadUrl();\n },\n\n // Attempt to load the current URL fragment. If a route succeeds with a\n // match, returns `true`. If no defined routes matches the fragment,\n // returns `false`.\n loadUrl: function(fragment) {\n // If the root doesn't match, no routes can match either.\n if (!this.matchRoot()) return false;\n fragment = this.fragment = this.getFragment(fragment);\n return _.some(this.handlers, function(handler) {\n if (handler.route.test(fragment)) {\n handler.callback(fragment);\n return true;\n }\n });\n },\n\n // Save a fragment into the hash history, or replace the URL state if the\n // 'replace' option is passed. You are responsible for properly URL-encoding\n // the fragment in advance.\n //\n // The options object can contain `trigger: true` if you wish to have the\n // route callback be fired (not usually desirable), or `replace: true`, if\n // you wish to modify the current URL without adding an entry to the history.\n navigate: function(fragment, options) {\n if (!History.started) return false;\n if (!options || options === true) options = {trigger: !!options};\n\n // Normalize the fragment.\n fragment = this.getFragment(fragment || '');\n\n // Strip trailing slash on the root unless _trailingSlash is true\n var rootPath = this.root;\n if (!this._trailingSlash && (fragment === '' || fragment.charAt(0) === '?')) {\n rootPath = rootPath.slice(0, -1) || '/';\n }\n var url = rootPath + fragment;\n\n // Strip the fragment of the query and hash for matching.\n fragment = fragment.replace(pathStripper, '');\n\n // Decode for matching.\n var decodedFragment = this.decodeFragment(fragment);\n\n if (this.fragment === decodedFragment) return;\n this.fragment = decodedFragment;\n\n // If pushState is available, we use it to set the fragment as a real URL.\n if (this._usePushState) {\n this.history[options.replace ? 'replaceState' : 'pushState']({}, document.title, url);\n\n // If hash changes haven't been explicitly disabled, update the hash\n // fragment to store history.\n } else if (this._wantsHashChange) {\n this._updateHash(this.location, fragment, options.replace);\n if (this.iframe && fragment !== this.getHash(this.iframe.contentWindow)) {\n var iWindow = this.iframe.contentWindow;\n\n // Opening and closing the iframe tricks IE7 and earlier to push a\n // history entry on hash-tag change. When replace is true, we don't\n // want this.\n if (!options.replace) {\n iWindow.document.open();\n iWindow.document.close();\n }\n\n this._updateHash(iWindow.location, fragment, options.replace);\n }\n\n // If you've told us that you explicitly don't want fallback hashchange-\n // based history, then `navigate` becomes a page refresh.\n } else {\n return this.location.assign(url);\n }\n if (options.trigger) return this.loadUrl(fragment);\n },\n\n // Update the hash location, either replacing the current entry, or adding\n // a new one to the browser history.\n _updateHash: function(location, fragment, replace) {\n if (replace) {\n var href = location.href.replace(/(javascript:|#).*$/, '');\n location.replace(href + '#' + fragment);\n } else {\n // Some browsers require that `hash` contains a leading #.\n location.hash = '#' + fragment;\n }\n }\n\n });\n\n // Create the default Backbone.history.\n Backbone.history = new History;\n\n // Helpers\n // -------\n\n // Helper function to correctly set up the prototype chain for subclasses.\n // Similar to `goog.inherits`, but uses a hash of prototype properties and\n // class properties to be extended.\n var extend = function(protoProps, staticProps) {\n var parent = this;\n var child;\n\n // The constructor function for the new subclass is either defined by you\n // (the \"constructor\" property in your `extend` definition), or defaulted\n // by us to simply call the parent constructor.\n if (protoProps && _.has(protoProps, 'constructor')) {\n child = protoProps.constructor;\n } else {\n child = function(){ return parent.apply(this, arguments); };\n }\n\n // Add static properties to the constructor function, if supplied.\n _.extend(child, parent, staticProps);\n\n // Set the prototype chain to inherit from `parent`, without calling\n // `parent`'s constructor function and add the prototype properties.\n child.prototype = _.create(parent.prototype, protoProps);\n child.prototype.constructor = child;\n\n // Set a convenience property in case the parent's prototype is needed\n // later.\n child.__super__ = parent.prototype;\n\n return child;\n };\n\n // Set up inheritance for the model, collection, router, view and history.\n Model.extend = Collection.extend = Router.extend = View.extend = History.extend = extend;\n\n // Throw an error when a URL is needed, and none is supplied.\n var urlError = function() {\n throw new Error('A \"url\" property or function must be specified');\n };\n\n // Wrap an optional error callback with a fallback error event.\n var wrapError = function(model, options) {\n var error = options.error;\n options.error = function(resp) {\n if (error) error.call(options.context, model, resp, options);\n model.trigger('error', model, resp, options);\n };\n };\n\n return Backbone;\n});\n","/**\n * bootbox.js v3.2.0\n *\n * http://bootboxjs.com/license.txt\n */\n\n/*jshint scripturl:true sub:true */\n\nvar bootbox = {};\n\nvar _locale = 'en',\n _defaultLocale = 'en',\n _animate = true,\n _backdrop = 'static',\n _defaultHref = 'javascript:;',\n _classes = '',\n _btnClasses = {},\n _icons = {}\n;\n\n\n/**\n * public API\n */\nbootbox.setLocale = function(locale) {\n for (var i in _locales) {\n if (i == locale) {\n _locale = locale;\n return;\n }\n }\n throw new Error('Invalid locale: '+locale);\n};\n\nbootbox.addLocale = function(locale, translations) {\n if (typeof _locales[locale] === 'undefined') {\n _locales[locale] = {};\n }\n for (var str in translations) {\n _locales[locale][str] = translations[str];\n }\n};\n\nbootbox.setIcons = function(icons) {\n _icons = icons;\n if (typeof _icons !== 'object' || _icons === null) {\n _icons = {};\n }\n};\n\nbootbox.setBtnClasses = function(btnClasses) {\n _btnClasses = btnClasses;\n if (typeof _btnClasses !== 'object' || _btnClasses === null) {\n _btnClasses = {};\n }\n};\n\nbootbox.alert = function(/*str, label, cb*/) {\n var str = \"\",\n label = _translate('OK'),\n cb = null;\n\n switch (arguments.length) {\n case 1:\n // no callback, default button label\n str = arguments[0];\n break;\n case 2:\n // callback *or* custom button label dependent on type\n str = arguments[0];\n if (typeof arguments[1] == 'function') {\n cb = arguments[1];\n } else {\n label = arguments[1];\n }\n break;\n case 3:\n // callback and custom button label\n str = arguments[0];\n label = arguments[1];\n cb = arguments[2];\n break;\n default:\n throw new Error(\"Incorrect number of arguments: expected 1-3\");\n }\n\n return bootbox.dialog(str, {\n // only button (ok)\n \"label\" : label,\n \"icon\" : _icons.OK,\n \"class\" : _btnClasses.OK,\n \"callback\": cb\n }, {\n // ensure that the escape key works; either invoking the user's\n // callback or true to just close the dialog\n \"onEscape\": cb || true\n });\n};\n\nbootbox.confirm = function(/*str, labelCancel, labelOk, cb*/) {\n var str = \"\",\n labelCancel = _translate('CANCEL'),\n labelOk = _translate('CONFIRM'),\n cb = null;\n\n switch (arguments.length) {\n case 1:\n str = arguments[0];\n break;\n case 2:\n str = arguments[0];\n if (typeof arguments[1] == 'function') {\n cb = arguments[1];\n } else {\n labelCancel = arguments[1];\n }\n break;\n case 3:\n str = arguments[0];\n labelCancel = arguments[1];\n if (typeof arguments[2] == 'function') {\n cb = arguments[2];\n } else {\n labelOk = arguments[2];\n }\n break;\n case 4:\n str = arguments[0];\n labelCancel = arguments[1];\n labelOk = arguments[2];\n cb = arguments[3];\n break;\n default:\n throw new Error(\"Incorrect number of arguments: expected 1-4\");\n }\n\n var cancelCallback = function() {\n if (typeof cb === 'function') {\n return cb(false);\n }\n };\n\n var confirmCallback = function() {\n if (typeof cb === 'function') {\n return cb(true);\n }\n };\n\n return bootbox.dialog(str, [{\n // first button (cancel)\n \"label\" : labelCancel,\n \"icon\" : _icons.CANCEL,\n \"class\" : _btnClasses.CANCEL,\n \"callback\": cancelCallback\n }, {\n // second button (confirm)\n \"label\" : labelOk,\n \"icon\" : _icons.CONFIRM,\n \"class\" : _btnClasses.CONFIRM,\n \"callback\": confirmCallback\n }], {\n // escape key bindings\n \"onEscape\": cancelCallback\n });\n};\n\nbootbox.prompt = function(/*str, labelCancel, labelOk, cb, defaultVal*/) {\n var str = \"\",\n labelCancel = _translate('CANCEL'),\n labelOk = _translate('CONFIRM'),\n cb = null,\n defaultVal = \"\";\n\n switch (arguments.length) {\n case 1:\n str = arguments[0];\n break;\n case 2:\n str = arguments[0];\n if (typeof arguments[1] == 'function') {\n cb = arguments[1];\n } else {\n labelCancel = arguments[1];\n }\n break;\n case 3:\n str = arguments[0];\n labelCancel = arguments[1];\n if (typeof arguments[2] == 'function') {\n cb = arguments[2];\n } else {\n labelOk = arguments[2];\n }\n break;\n case 4:\n str = arguments[0];\n labelCancel = arguments[1];\n labelOk = arguments[2];\n cb = arguments[3];\n break;\n case 5:\n str = arguments[0];\n labelCancel = arguments[1];\n labelOk = arguments[2];\n cb = arguments[3];\n defaultVal = arguments[4];\n break;\n default:\n throw new Error(\"Incorrect number of arguments: expected 1-5\");\n }\n\n var header = str;\n\n // let's keep a reference to the form object for later\n var form = $(\"
\");\n form.append(\"\");\n\n var cancelCallback = function() {\n if (typeof cb === 'function') {\n // yep, native prompts dismiss with null, whereas native\n // confirms dismiss with false...\n return cb(null);\n }\n };\n\n var confirmCallback = function() {\n if (typeof cb === 'function') {\n return cb(form.find(\"input[type=text]\").val());\n }\n };\n\n var div = bootbox.dialog(form, [{\n // first button (cancel)\n \"label\" : labelCancel,\n \"icon\" : _icons.CANCEL,\n \"class\" : _btnClasses.CANCEL,\n \"callback\": cancelCallback\n }, {\n // second button (confirm)\n \"label\" : labelOk,\n \"icon\" : _icons.CONFIRM,\n \"class\" : _btnClasses.CONFIRM,\n \"callback\": confirmCallback\n }], {\n // prompts need a few extra options\n \"header\" : header,\n // explicitly tell dialog NOT to show the dialog...\n \"show\" : false,\n \"onEscape\": cancelCallback\n });\n\n // ... the reason the prompt needs to be hidden is because we need\n // to bind our own \"shown\" handler, after creating the modal but\n // before any show(n) events are triggered\n // @see https://github.com/makeusabrew/bootbox/issues/69\n\n div.on(\"shown\", function() {\n form.find(\"input[type=text]\").focus();\n\n // ensure that submitting the form (e.g. with the enter key)\n // replicates the behaviour of a normal prompt()\n form.on(\"submit\", function(e) {\n e.preventDefault();\n div.find(\".btn-primary\").click();\n });\n });\n\n div.modal(\"show\");\n\n return div;\n};\n\nbootbox.dialog = function(str, handlers, options) {\n var buttons = \"\",\n callbacks = [];\n\n if (!options) {\n options = {};\n }\n\n // check for single object and convert to array if necessary\n if (typeof handlers === 'undefined') {\n handlers = [];\n } else if (typeof handlers.length == 'undefined') {\n handlers = [handlers];\n }\n\n var i = handlers.length;\n while (i--) {\n var label = null,\n href = null,\n _class = null,\n icon = '',\n callback = null;\n\n if (typeof handlers[i]['label'] == 'undefined' &&\n typeof handlers[i]['class'] == 'undefined' &&\n typeof handlers[i]['callback'] == 'undefined') {\n // if we've got nothing we expect, check for condensed format\n\n var propCount = 0, // condensed will only match if this == 1\n property = null; // save the last property we found\n\n // be nicer to count the properties without this, but don't think it's possible...\n for (var j in handlers[i]) {\n property = j;\n if (++propCount > 1) {\n // forget it, too many properties\n break;\n }\n }\n\n if (propCount == 1 && typeof handlers[i][j] == 'function') {\n // matches condensed format of label -> function\n handlers[i]['label'] = property;\n handlers[i]['callback'] = handlers[i][j];\n }\n }\n\n if (typeof handlers[i]['callback']== 'function') {\n callback = handlers[i]['callback'];\n }\n\n if (handlers[i]['class']) {\n _class = handlers[i]['class'];\n } else if (i == handlers.length -1 && handlers.length <= 2) {\n // always add a primary to the main option in a two-button dialog\n _class = 'btn-primary';\n }\n\n if (handlers[i]['label']) {\n label = handlers[i]['label'];\n } else {\n label = \"Option \"+(i+1);\n }\n\n if (handlers[i]['icon']) {\n icon = \" \";\n }\n\n if (handlers[i]['href']) {\n href = handlers[i]['href'];\n }\n else {\n href = _defaultHref;\n }\n\n buttons = \"\"+icon+\"\"+label+\"\" + buttons;\n\n callbacks[i] = callback;\n }\n\n // @see https://github.com/makeusabrew/bootbox/issues/46#issuecomment-8235302\n // and https://github.com/twitter/bootstrap/issues/4474\n // for an explanation of the inline overflow: hidden\n // @see https://github.com/twitter/bootstrap/issues/4854\n // for an explanation of tabIndex=-1\n\n var parts = [\"\");\n\n var div = $(parts.join(\"\\n\"));\n\n // check whether we should fade in/out\n var shouldFade = (typeof options.animate === 'undefined') ? _animate : options.animate;\n\n if (shouldFade) {\n div.addClass(\"fade\");\n }\n\n var optionalClasses = (typeof options.classes === 'undefined') ? _classes : options.classes;\n if (optionalClasses) {\n div.addClass(optionalClasses);\n }\n\n // now we've built up the div properly we can inject the content whether it was a string or a jQuery object\n div.find(\".modal-body\").html(str);\n\n function onCancel(source) {\n // for now source is unused, but it will be in future\n var hideModal = null;\n if (typeof options.onEscape === 'function') {\n // @see https://github.com/makeusabrew/bootbox/issues/91\n hideModal = options.onEscape();\n }\n\n if (hideModal !== false) {\n div.modal('hide');\n }\n }\n\n // hook into the modal's keyup trigger to check for the escape key\n div.on('keyup.dismiss.modal', function(e) {\n // any truthy value passed to onEscape will dismiss the dialog\n // as long as the onEscape function (if defined) doesn't prevent it\n if (e.which === 27 && options.onEscape) {\n onCancel('escape');\n }\n });\n\n // handle close buttons too\n div.on('click', 'a.close', function(e) {\n e.preventDefault();\n onCancel('close');\n });\n\n // well, *if* we have a primary - give the first dom element focus\n div.on('shown', function() {\n div.find(\"a.btn-primary:first\").focus();\n });\n\n div.on('hidden', function() {\n div.remove();\n });\n\n // wire up button handlers\n div.on('click', '.modal-footer a', function(e) {\n\n var handler = $(this).data(\"handler\"),\n cb = callbacks[handler],\n hideModal = null;\n\n // sort of @see https://github.com/makeusabrew/bootbox/pull/68 - heavily adapted\n // if we've got a custom href attribute, all bets are off\n if (typeof handler !== 'undefined' &&\n typeof handlers[handler]['href'] !== 'undefined') {\n\n return;\n }\n\n e.preventDefault();\n\n if (typeof cb === 'function') {\n hideModal = cb();\n }\n\n // the only way hideModal *will* be false is if a callback exists and\n // returns it as a value. in those situations, don't hide the dialog\n // @see https://github.com/makeusabrew/bootbox/pull/25\n if (hideModal !== false) {\n div.modal(\"hide\");\n }\n });\n\n // stick the modal right at the bottom of the main body out of the way\n $(\"body\").append(div);\n\n div.modal({\n // unless explicitly overridden take whatever our default backdrop value is\n backdrop : (typeof options.backdrop === 'undefined') ? _backdrop : options.backdrop,\n // ignore bootstrap's keyboard options; we'll handle this ourselves (more fine-grained control)\n keyboard : false,\n // @ see https://github.com/makeusabrew/bootbox/issues/69\n // we *never* want the modal to be shown before we can bind stuff to it\n // this method can also take a 'show' option, but we'll only use that\n // later if we need to\n show : false\n });\n\n // @see https://github.com/makeusabrew/bootbox/issues/64\n // @see https://github.com/makeusabrew/bootbox/issues/60\n // ...caused by...\n // @see https://github.com/twitter/bootstrap/issues/4781\n div.on(\"show\", function(e) {\n $(document).off(\"focusin.modal\");\n });\n\n if (typeof options.show === 'undefined' || options.show === true) {\n div.modal(\"show\");\n }\n\n return div;\n};\n\n/**\n * #modal is deprecated in v3; it can still be used but no guarantees are\n * made - have never been truly convinced of its merit but perhaps just\n * needs a tidyup and some TLC\n */\nbootbox.modal = function(/*str, label, options*/) {\n var str;\n var label;\n var options;\n\n var defaultOptions = {\n \"onEscape\": null,\n \"keyboard\": true,\n \"backdrop\": _backdrop\n };\n\n switch (arguments.length) {\n case 1:\n str = arguments[0];\n break;\n case 2:\n str = arguments[0];\n if (typeof arguments[1] == 'object') {\n options = arguments[1];\n } else {\n label = arguments[1];\n }\n break;\n case 3:\n str = arguments[0];\n label = arguments[1];\n options = arguments[2];\n break;\n default:\n throw new Error(\"Incorrect number of arguments: expected 1-3\");\n }\n\n defaultOptions['header'] = label;\n\n if (typeof options == 'object') {\n options = $.extend(defaultOptions, options);\n } else {\n options = defaultOptions;\n }\n\n return bootbox.dialog(str, [], options);\n};\n\n\nbootbox.hideAll = function() {\n $(\".bootbox\").modal(\"hide\");\n};\n\nbootbox.animate = function(animate) {\n _animate = animate;\n};\n\nbootbox.backdrop = function(backdrop) {\n _backdrop = backdrop;\n};\n\nbootbox.classes = function(classes) {\n _classes = classes;\n};\n\n/**\n * private API\n */\n\n/**\n * standard locales. Please add more according to ISO 639-1 standard. Multiple language variants are\n * unlikely to be required. If this gets too large it can be split out into separate JS files.\n */\nvar _locales = {\n 'en' : {\n OK : 'OK',\n CANCEL : 'Cancel',\n CONFIRM : 'OK'\n },\n 'fr' : {\n OK : 'OK',\n CANCEL : 'Annuler',\n CONFIRM : 'D\\'accord'\n },\n 'de' : {\n OK : 'OK',\n CANCEL : 'Abbrechen',\n CONFIRM : 'Akzeptieren'\n },\n 'es' : {\n OK : 'OK',\n CANCEL : 'Cancelar',\n CONFIRM : 'Aceptar'\n },\n 'br' : {\n OK : 'OK',\n CANCEL : 'Cancelar',\n CONFIRM : 'Sim'\n },\n 'nl' : {\n OK : 'OK',\n CANCEL : 'Annuleren',\n CONFIRM : 'Accepteren'\n },\n 'ru' : {\n OK : 'OK',\n CANCEL : 'Отмена',\n CONFIRM : 'Применить'\n },\n 'it' : {\n OK : 'OK',\n CANCEL : 'Annulla',\n CONFIRM : 'Conferma'\n },\n 'pl' : {\n OK : 'OK',\n CANCEL : 'Anuluj',\n CONFIRM : 'Potwierdź'\n }\n};\n\nfunction _translate(str, locale) {\n // we assume if no target locale is probided then we should take it from current setting\n if (typeof locale === 'undefined') {\n locale = _locale;\n }\n if (typeof _locales[locale][str] === 'string') {\n return _locales[locale][str];\n }\n\n // if we couldn't find a lookup then try and fallback to a default translation\n\n if (locale != _defaultLocale) {\n return _translate(str, _defaultLocale);\n }\n\n // if we can't do anything then bail out with whatever string was passed in - last resort\n return str;\n}\n\nmodule.exports = bootbox;\n","/*!\n * chartjs-adapter-moment v1.0.1\n * https://www.chartjs.org\n * (c) 2022 chartjs-adapter-moment Contributors\n * Released under the MIT license\n */\nimport moment from 'moment';\nimport { _adapters } from 'chart.js';\n\nconst FORMATS = {\n datetime: 'MMM D, YYYY, h:mm:ss a',\n millisecond: 'h:mm:ss.SSS a',\n second: 'h:mm:ss a',\n minute: 'h:mm a',\n hour: 'hA',\n day: 'MMM D',\n week: 'll',\n month: 'MMM YYYY',\n quarter: '[Q]Q - YYYY',\n year: 'YYYY'\n};\n\n_adapters._date.override(typeof moment === 'function' ? {\n _id: 'moment', // DEBUG ONLY\n\n formats: function() {\n return FORMATS;\n },\n\n parse: function(value, format) {\n if (typeof value === 'string' && typeof format === 'string') {\n value = moment(value, format);\n } else if (!(value instanceof moment)) {\n value = moment(value);\n }\n return value.isValid() ? value.valueOf() : null;\n },\n\n format: function(time, format) {\n return moment(time).format(format);\n },\n\n add: function(time, amount, unit) {\n return moment(time).add(amount, unit).valueOf();\n },\n\n diff: function(max, min, unit) {\n return moment(max).diff(moment(min), unit);\n },\n\n startOf: function(time, unit, weekday) {\n time = moment(time);\n if (unit === 'isoWeek') {\n weekday = Math.trunc(Math.min(Math.max(0, weekday), 6));\n return time.isoWeekday(weekday).startOf('day').valueOf();\n }\n return time.startOf(unit).valueOf();\n },\n\n endOf: function(time, unit) {\n return moment(time).endOf(unit).valueOf();\n }\n} : {});\n","/*!\n * jQuery Color Animations v2.2.0\n * https://github.com/jquery/jquery-color\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * Date: Sun May 10 09:02:36 2020 +0200\n */\n\n( function( root, factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine( [ \"jquery\" ], factory );\n\t} else if ( typeof exports === \"object\" ) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( root.jQuery );\n\t}\n} )( this, function( jQuery, undefined ) {\n\n\tvar stepHooks = \"backgroundColor borderBottomColor borderLeftColor borderRightColor \" +\n\t\t\"borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor\",\n\n\tclass2type = {},\n\ttoString = class2type.toString,\n\n\t// plusequals test for += 100 -= 100\n\trplusequals = /^([\\-+])=\\s*(\\d+\\.?\\d*)/,\n\n\t// a set of RE's that can match strings and generate color tuples.\n\tstringParsers = [ {\n\t\t\tre: /rgba?\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*(?:,\\s*(\\d?(?:\\.\\d+)?)\\s*)?\\)/,\n\t\t\tparse: function( execResult ) {\n\t\t\t\treturn [\n\t\t\t\t\texecResult[ 1 ],\n\t\t\t\t\texecResult[ 2 ],\n\t\t\t\t\texecResult[ 3 ],\n\t\t\t\t\texecResult[ 4 ]\n\t\t\t\t];\n\t\t\t}\n\t\t}, {\n\t\t\tre: /rgba?\\(\\s*(\\d+(?:\\.\\d+)?)\\%\\s*,\\s*(\\d+(?:\\.\\d+)?)\\%\\s*,\\s*(\\d+(?:\\.\\d+)?)\\%\\s*(?:,\\s*(\\d?(?:\\.\\d+)?)\\s*)?\\)/,\n\t\t\tparse: function( execResult ) {\n\t\t\t\treturn [\n\t\t\t\t\texecResult[ 1 ] * 2.55,\n\t\t\t\t\texecResult[ 2 ] * 2.55,\n\t\t\t\t\texecResult[ 3 ] * 2.55,\n\t\t\t\t\texecResult[ 4 ]\n\t\t\t\t];\n\t\t\t}\n\t\t}, {\n\n\t\t\t// this regex ignores A-F because it's compared against an already lowercased string\n\t\t\tre: /#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})?/,\n\t\t\tparse: function( execResult ) {\n\t\t\t\treturn [\n\t\t\t\t\tparseInt( execResult[ 1 ], 16 ),\n\t\t\t\t\tparseInt( execResult[ 2 ], 16 ),\n\t\t\t\t\tparseInt( execResult[ 3 ], 16 ),\n\t\t\t\t\texecResult[ 4 ] ?\n\t\t\t\t\t\t( parseInt( execResult[ 4 ], 16 ) / 255 ).toFixed( 2 ) :\n\t\t\t\t\t\t1\n\t\t\t\t];\n\t\t\t}\n\t\t}, {\n\n\t\t\t// this regex ignores A-F because it's compared against an already lowercased string\n\t\t\tre: /#([a-f0-9])([a-f0-9])([a-f0-9])([a-f0-9])?/,\n\t\t\tparse: function( execResult ) {\n\t\t\t\treturn [\n\t\t\t\t\tparseInt( execResult[ 1 ] + execResult[ 1 ], 16 ),\n\t\t\t\t\tparseInt( execResult[ 2 ] + execResult[ 2 ], 16 ),\n\t\t\t\t\tparseInt( execResult[ 3 ] + execResult[ 3 ], 16 ),\n\t\t\t\t\texecResult[ 4 ] ?\n\t\t\t\t\t\t( parseInt( execResult[ 4 ] + execResult[ 4 ], 16 ) / 255 )\n\t\t\t\t\t\t\t.toFixed( 2 ) :\n\t\t\t\t\t\t1\n\t\t\t\t];\n\t\t\t}\n\t\t}, {\n\t\t\tre: /hsla?\\(\\s*(\\d+(?:\\.\\d+)?)\\s*,\\s*(\\d+(?:\\.\\d+)?)\\%\\s*,\\s*(\\d+(?:\\.\\d+)?)\\%\\s*(?:,\\s*(\\d?(?:\\.\\d+)?)\\s*)?\\)/,\n\t\t\tspace: \"hsla\",\n\t\t\tparse: function( execResult ) {\n\t\t\t\treturn [\n\t\t\t\t\texecResult[ 1 ],\n\t\t\t\t\texecResult[ 2 ] / 100,\n\t\t\t\t\texecResult[ 3 ] / 100,\n\t\t\t\t\texecResult[ 4 ]\n\t\t\t\t];\n\t\t\t}\n\t\t} ],\n\n\t// jQuery.Color( )\n\tcolor = jQuery.Color = function( color, green, blue, alpha ) {\n\t\treturn new jQuery.Color.fn.parse( color, green, blue, alpha );\n\t},\n\tspaces = {\n\t\trgba: {\n\t\t\tprops: {\n\t\t\t\tred: {\n\t\t\t\t\tidx: 0,\n\t\t\t\t\ttype: \"byte\"\n\t\t\t\t},\n\t\t\t\tgreen: {\n\t\t\t\t\tidx: 1,\n\t\t\t\t\ttype: \"byte\"\n\t\t\t\t},\n\t\t\t\tblue: {\n\t\t\t\t\tidx: 2,\n\t\t\t\t\ttype: \"byte\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\thsla: {\n\t\t\tprops: {\n\t\t\t\thue: {\n\t\t\t\t\tidx: 0,\n\t\t\t\t\ttype: \"degrees\"\n\t\t\t\t},\n\t\t\t\tsaturation: {\n\t\t\t\t\tidx: 1,\n\t\t\t\t\ttype: \"percent\"\n\t\t\t\t},\n\t\t\t\tlightness: {\n\t\t\t\t\tidx: 2,\n\t\t\t\t\ttype: \"percent\"\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\tpropTypes = {\n\t\t\"byte\": {\n\t\t\tfloor: true,\n\t\t\tmax: 255\n\t\t},\n\t\t\"percent\": {\n\t\t\tmax: 1\n\t\t},\n\t\t\"degrees\": {\n\t\t\tmod: 360,\n\t\t\tfloor: true\n\t\t}\n\t},\n\tsupport = color.support = {},\n\n\t// element for support tests\n\tsupportElem = jQuery( \"

\" )[ 0 ],\n\n\t// colors = jQuery.Color.names\n\tcolors,\n\n\t// local aliases of functions called often\n\teach = jQuery.each;\n\n// determine rgba support immediately\nsupportElem.style.cssText = \"background-color:rgba(1,1,1,.5)\";\nsupport.rgba = supportElem.style.backgroundColor.indexOf( \"rgba\" ) > -1;\n\n// define cache name and alpha properties\n// for rgba and hsla spaces\neach( spaces, function( spaceName, space ) {\n\tspace.cache = \"_\" + spaceName;\n\tspace.props.alpha = {\n\t\tidx: 3,\n\t\ttype: \"percent\",\n\t\tdef: 1\n\t};\n} );\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\n\tfunction( _i, name ) {\n\t\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n\t} );\n\nfunction getType( obj ) {\n\tif ( obj == null ) {\n\t\treturn obj + \"\";\n\t}\n\n\treturn typeof obj === \"object\" ?\n\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\ttypeof obj;\n}\n\nfunction clamp( value, prop, allowEmpty ) {\n\tvar type = propTypes[ prop.type ] || {};\n\n\tif ( value == null ) {\n\t\treturn ( allowEmpty || !prop.def ) ? null : prop.def;\n\t}\n\n\t// ~~ is an short way of doing floor for positive numbers\n\tvalue = type.floor ? ~~value : parseFloat( value );\n\n\t// IE will pass in empty strings as value for alpha,\n\t// which will hit this case\n\tif ( isNaN( value ) ) {\n\t\treturn prop.def;\n\t}\n\n\tif ( type.mod ) {\n\n\t\t// we add mod before modding to make sure that negatives values\n\t\t// get converted properly: -10 -> 350\n\t\treturn ( value + type.mod ) % type.mod;\n\t}\n\n\t// for now all property types without mod have min and max\n\treturn Math.min( type.max, Math.max( 0, value ) );\n}\n\nfunction stringParse( string ) {\n\tvar inst = color(),\n\t\trgba = inst._rgba = [];\n\n\tstring = string.toLowerCase();\n\n\teach( stringParsers, function( _i, parser ) {\n\t\tvar parsed,\n\t\t\tmatch = parser.re.exec( string ),\n\t\t\tvalues = match && parser.parse( match ),\n\t\t\tspaceName = parser.space || \"rgba\";\n\n\t\tif ( values ) {\n\t\t\tparsed = inst[ spaceName ]( values );\n\n\t\t\t// if this was an rgba parse the assignment might happen twice\n\t\t\t// oh well....\n\t\t\tinst[ spaces[ spaceName ].cache ] = parsed[ spaces[ spaceName ].cache ];\n\t\t\trgba = inst._rgba = parsed._rgba;\n\n\t\t\t// exit each( stringParsers ) here because we matched\n\t\t\treturn false;\n\t\t}\n\t} );\n\n\t// Found a stringParser that handled it\n\tif ( rgba.length ) {\n\n\t\t// if this came from a parsed string, force \"transparent\" when alpha is 0\n\t\t// chrome, (and maybe others) return \"transparent\" as rgba(0,0,0,0)\n\t\tif ( rgba.join() === \"0,0,0,0\" ) {\n\t\t\tjQuery.extend( rgba, colors.transparent );\n\t\t}\n\t\treturn inst;\n\t}\n\n\t// named colors\n\treturn colors[ string ];\n}\n\ncolor.fn = jQuery.extend( color.prototype, {\n\tparse: function( red, green, blue, alpha ) {\n\t\tif ( red === undefined ) {\n\t\t\tthis._rgba = [ null, null, null, null ];\n\t\t\treturn this;\n\t\t}\n\t\tif ( red.jquery || red.nodeType ) {\n\t\t\tred = jQuery( red ).css( green );\n\t\t\tgreen = undefined;\n\t\t}\n\n\t\tvar inst = this,\n\t\t\ttype = getType( red ),\n\t\t\trgba = this._rgba = [];\n\n\t\t// more than 1 argument specified - assume ( red, green, blue, alpha )\n\t\tif ( green !== undefined ) {\n\t\t\tred = [ red, green, blue, alpha ];\n\t\t\ttype = \"array\";\n\t\t}\n\n\t\tif ( type === \"string\" ) {\n\t\t\treturn this.parse( stringParse( red ) || colors._default );\n\t\t}\n\n\t\tif ( type === \"array\" ) {\n\t\t\teach( spaces.rgba.props, function( _key, prop ) {\n\t\t\t\trgba[ prop.idx ] = clamp( red[ prop.idx ], prop );\n\t\t\t} );\n\t\t\treturn this;\n\t\t}\n\n\t\tif ( type === \"object\" ) {\n\t\t\tif ( red instanceof color ) {\n\t\t\t\teach( spaces, function( _spaceName, space ) {\n\t\t\t\t\tif ( red[ space.cache ] ) {\n\t\t\t\t\t\tinst[ space.cache ] = red[ space.cache ].slice();\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t} else {\n\t\t\t\teach( spaces, function( _spaceName, space ) {\n\t\t\t\t\tvar cache = space.cache;\n\t\t\t\t\teach( space.props, function( key, prop ) {\n\n\t\t\t\t\t\t// if the cache doesn't exist, and we know how to convert\n\t\t\t\t\t\tif ( !inst[ cache ] && space.to ) {\n\n\t\t\t\t\t\t\t// if the value was null, we don't need to copy it\n\t\t\t\t\t\t\t// if the key was alpha, we don't need to copy it either\n\t\t\t\t\t\t\tif ( key === \"alpha\" || red[ key ] == null ) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tinst[ cache ] = space.to( inst._rgba );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// this is the only case where we allow nulls for ALL properties.\n\t\t\t\t\t\t// call clamp with alwaysAllowEmpty\n\t\t\t\t\t\tinst[ cache ][ prop.idx ] = clamp( red[ key ], prop, true );\n\t\t\t\t\t} );\n\n\t\t\t\t\t// everything defined but alpha?\n\t\t\t\t\tif ( inst[ cache ] && jQuery.inArray( null, inst[ cache ].slice( 0, 3 ) ) < 0 ) {\n\n\t\t\t\t\t\t// use the default of 1\n\t\t\t\t\t\tif ( inst[ cache ][ 3 ] == null ) {\n\t\t\t\t\t\t\tinst[ cache ][ 3 ] = 1;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( space.from ) {\n\t\t\t\t\t\t\tinst._rgba = space.from( inst[ cache ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t},\n\tis: function( compare ) {\n\t\tvar is = color( compare ),\n\t\t\tsame = true,\n\t\t\tinst = this;\n\n\t\teach( spaces, function( _, space ) {\n\t\t\tvar localCache,\n\t\t\t\tisCache = is[ space.cache ];\n\t\t\tif ( isCache ) {\n\t\t\t\tlocalCache = inst[ space.cache ] || space.to && space.to( inst._rgba ) || [];\n\t\t\t\teach( space.props, function( _, prop ) {\n\t\t\t\t\tif ( isCache[ prop.idx ] != null ) {\n\t\t\t\t\t\tsame = ( isCache[ prop.idx ] === localCache[ prop.idx ] );\n\t\t\t\t\t\treturn same;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\t\t\treturn same;\n\t\t} );\n\t\treturn same;\n\t},\n\t_space: function() {\n\t\tvar used = [],\n\t\t\tinst = this;\n\t\teach( spaces, function( spaceName, space ) {\n\t\t\tif ( inst[ space.cache ] ) {\n\t\t\t\tused.push( spaceName );\n\t\t\t}\n\t\t} );\n\t\treturn used.pop();\n\t},\n\ttransition: function( other, distance ) {\n\t\tvar end = color( other ),\n\t\t\tspaceName = end._space(),\n\t\t\tspace = spaces[ spaceName ],\n\t\t\tstartColor = this.alpha() === 0 ? color( \"transparent\" ) : this,\n\t\t\tstart = startColor[ space.cache ] || space.to( startColor._rgba ),\n\t\t\tresult = start.slice();\n\n\t\tend = end[ space.cache ];\n\t\teach( space.props, function( _key, prop ) {\n\t\t\tvar index = prop.idx,\n\t\t\t\tstartValue = start[ index ],\n\t\t\t\tendValue = end[ index ],\n\t\t\t\ttype = propTypes[ prop.type ] || {};\n\n\t\t\t// if null, don't override start value\n\t\t\tif ( endValue === null ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// if null - use end\n\t\t\tif ( startValue === null ) {\n\t\t\t\tresult[ index ] = endValue;\n\t\t\t} else {\n\t\t\t\tif ( type.mod ) {\n\t\t\t\t\tif ( endValue - startValue > type.mod / 2 ) {\n\t\t\t\t\t\tstartValue += type.mod;\n\t\t\t\t\t} else if ( startValue - endValue > type.mod / 2 ) {\n\t\t\t\t\t\tstartValue -= type.mod;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tresult[ index ] = clamp( ( endValue - startValue ) * distance + startValue, prop );\n\t\t\t}\n\t\t} );\n\t\treturn this[ spaceName ]( result );\n\t},\n\tblend: function( opaque ) {\n\n\t\t// if we are already opaque - return ourself\n\t\tif ( this._rgba[ 3 ] === 1 ) {\n\t\t\treturn this;\n\t\t}\n\n\t\tvar rgb = this._rgba.slice(),\n\t\t\ta = rgb.pop(),\n\t\t\tblend = color( opaque )._rgba;\n\n\t\treturn color( jQuery.map( rgb, function( v, i ) {\n\t\t\treturn ( 1 - a ) * blend[ i ] + a * v;\n\t\t} ) );\n\t},\n\ttoRgbaString: function() {\n\t\tvar prefix = \"rgba(\",\n\t\t\trgba = jQuery.map( this._rgba, function( v, i ) {\n\t\t\t\tif ( v != null ) {\n\t\t\t\t\treturn v;\n\t\t\t\t}\n\t\t\t\treturn i > 2 ? 1 : 0;\n\t\t\t} );\n\n\t\tif ( rgba[ 3 ] === 1 ) {\n\t\t\trgba.pop();\n\t\t\tprefix = \"rgb(\";\n\t\t}\n\n\t\treturn prefix + rgba.join() + \")\";\n\t},\n\ttoHslaString: function() {\n\t\tvar prefix = \"hsla(\",\n\t\t\thsla = jQuery.map( this.hsla(), function( v, i ) {\n\t\t\t\tif ( v == null ) {\n\t\t\t\t\tv = i > 2 ? 1 : 0;\n\t\t\t\t}\n\n\t\t\t\t// catch 1 and 2\n\t\t\t\tif ( i && i < 3 ) {\n\t\t\t\t\tv = Math.round( v * 100 ) + \"%\";\n\t\t\t\t}\n\t\t\t\treturn v;\n\t\t\t} );\n\n\t\tif ( hsla[ 3 ] === 1 ) {\n\t\t\thsla.pop();\n\t\t\tprefix = \"hsl(\";\n\t\t}\n\t\treturn prefix + hsla.join() + \")\";\n\t},\n\ttoHexString: function( includeAlpha ) {\n\t\tvar rgba = this._rgba.slice(),\n\t\t\talpha = rgba.pop();\n\n\t\tif ( includeAlpha ) {\n\t\t\trgba.push( ~~( alpha * 255 ) );\n\t\t}\n\n\t\treturn \"#\" + jQuery.map( rgba, function( v ) {\n\n\t\t\t// default to 0 when nulls exist\n\t\t\tv = ( v || 0 ).toString( 16 );\n\t\t\treturn v.length === 1 ? \"0\" + v : v;\n\t\t} ).join( \"\" );\n\t},\n\ttoString: function() {\n\t\treturn this._rgba[ 3 ] === 0 ? \"transparent\" : this.toRgbaString();\n\t}\n} );\ncolor.fn.parse.prototype = color.fn;\n\n// hsla conversions adapted from:\n// https://code.google.com/p/maashaack/source/browse/packages/graphics/trunk/src/graphics/colors/HUE2RGB.as?r=5021\n\nfunction hue2rgb( p, q, h ) {\n\th = ( h + 1 ) % 1;\n\tif ( h * 6 < 1 ) {\n\t\treturn p + ( q - p ) * h * 6;\n\t}\n\tif ( h * 2 < 1 ) {\n\t\treturn q;\n\t}\n\tif ( h * 3 < 2 ) {\n\t\treturn p + ( q - p ) * ( ( 2 / 3 ) - h ) * 6;\n\t}\n\treturn p;\n}\n\nspaces.hsla.to = function( rgba ) {\n\tif ( rgba[ 0 ] == null || rgba[ 1 ] == null || rgba[ 2 ] == null ) {\n\t\treturn [ null, null, null, rgba[ 3 ] ];\n\t}\n\tvar r = rgba[ 0 ] / 255,\n\t\tg = rgba[ 1 ] / 255,\n\t\tb = rgba[ 2 ] / 255,\n\t\ta = rgba[ 3 ],\n\t\tmax = Math.max( r, g, b ),\n\t\tmin = Math.min( r, g, b ),\n\t\tdiff = max - min,\n\t\tadd = max + min,\n\t\tl = add * 0.5,\n\t\th, s;\n\n\tif ( min === max ) {\n\t\th = 0;\n\t} else if ( r === max ) {\n\t\th = ( 60 * ( g - b ) / diff ) + 360;\n\t} else if ( g === max ) {\n\t\th = ( 60 * ( b - r ) / diff ) + 120;\n\t} else {\n\t\th = ( 60 * ( r - g ) / diff ) + 240;\n\t}\n\n\t// chroma (diff) == 0 means greyscale which, by definition, saturation = 0%\n\t// otherwise, saturation is based on the ratio of chroma (diff) to lightness (add)\n\tif ( diff === 0 ) {\n\t\ts = 0;\n\t} else if ( l <= 0.5 ) {\n\t\ts = diff / add;\n\t} else {\n\t\ts = diff / ( 2 - add );\n\t}\n\treturn [ Math.round( h ) % 360, s, l, a == null ? 1 : a ];\n};\n\nspaces.hsla.from = function( hsla ) {\n\tif ( hsla[ 0 ] == null || hsla[ 1 ] == null || hsla[ 2 ] == null ) {\n\t\treturn [ null, null, null, hsla[ 3 ] ];\n\t}\n\tvar h = hsla[ 0 ] / 360,\n\t\ts = hsla[ 1 ],\n\t\tl = hsla[ 2 ],\n\t\ta = hsla[ 3 ],\n\t\tq = l <= 0.5 ? l * ( 1 + s ) : l + s - l * s,\n\t\tp = 2 * l - q;\n\n\treturn [\n\t\tMath.round( hue2rgb( p, q, h + ( 1 / 3 ) ) * 255 ),\n\t\tMath.round( hue2rgb( p, q, h ) * 255 ),\n\t\tMath.round( hue2rgb( p, q, h - ( 1 / 3 ) ) * 255 ),\n\t\ta\n\t];\n};\n\n\neach( spaces, function( spaceName, space ) {\n\tvar props = space.props,\n\t\tcache = space.cache,\n\t\tto = space.to,\n\t\tfrom = space.from;\n\n\t// makes rgba() and hsla()\n\tcolor.fn[ spaceName ] = function( value ) {\n\n\t\t// generate a cache for this space if it doesn't exist\n\t\tif ( to && !this[ cache ] ) {\n\t\t\tthis[ cache ] = to( this._rgba );\n\t\t}\n\t\tif ( value === undefined ) {\n\t\t\treturn this[ cache ].slice();\n\t\t}\n\n\t\tvar ret,\n\t\t\ttype = getType( value ),\n\t\t\tarr = ( type === \"array\" || type === \"object\" ) ? value : arguments,\n\t\t\tlocal = this[ cache ].slice();\n\n\t\teach( props, function( key, prop ) {\n\t\t\tvar val = arr[ type === \"object\" ? key : prop.idx ];\n\t\t\tif ( val == null ) {\n\t\t\t\tval = local[ prop.idx ];\n\t\t\t}\n\t\t\tlocal[ prop.idx ] = clamp( val, prop );\n\t\t} );\n\n\t\tif ( from ) {\n\t\t\tret = color( from( local ) );\n\t\t\tret[ cache ] = local;\n\t\t\treturn ret;\n\t\t} else {\n\t\t\treturn color( local );\n\t\t}\n\t};\n\n\t// makes red() green() blue() alpha() hue() saturation() lightness()\n\teach( props, function( key, prop ) {\n\n\t\t// alpha is included in more than one space\n\t\tif ( color.fn[ key ] ) {\n\t\t\treturn;\n\t\t}\n\t\tcolor.fn[ key ] = function( value ) {\n\t\t\tvar local, cur, match, fn,\n\t\t\t\tvtype = getType( value );\n\n\t\t\tif ( key === \"alpha\" ) {\n\t\t\t\tfn = this._hsla ? \"hsla\" : \"rgba\";\n\t\t\t} else {\n\t\t\t\tfn = spaceName;\n\t\t\t}\n\t\t\tlocal = this[ fn ]();\n\t\t\tcur = local[ prop.idx ];\n\n\t\t\tif ( vtype === \"undefined\" ) {\n\t\t\t\treturn cur;\n\t\t\t}\n\n\t\t\tif ( vtype === \"function\" ) {\n\t\t\t\tvalue = value.call( this, cur );\n\t\t\t\tvtype = getType( value );\n\t\t\t}\n\t\t\tif ( value == null && prop.empty ) {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\tif ( vtype === \"string\" ) {\n\t\t\t\tmatch = rplusequals.exec( value );\n\t\t\t\tif ( match ) {\n\t\t\t\t\tvalue = cur + parseFloat( match[ 2 ] ) * ( match[ 1 ] === \"+\" ? 1 : -1 );\n\t\t\t\t}\n\t\t\t}\n\t\t\tlocal[ prop.idx ] = value;\n\t\t\treturn this[ fn ]( local );\n\t\t};\n\t} );\n} );\n\n// add cssHook and .fx.step function for each named hook.\n// accept a space separated string of properties\ncolor.hook = function( hook ) {\n\tvar hooks = hook.split( \" \" );\n\teach( hooks, function( _i, hook ) {\n\t\tjQuery.cssHooks[ hook ] = {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar parsed, curElem,\n\t\t\t\t\tbackgroundColor = \"\";\n\n\t\t\t\tif ( value !== \"transparent\" && ( getType( value ) !== \"string\" || ( parsed = stringParse( value ) ) ) ) {\n\t\t\t\t\tvalue = color( parsed || value );\n\t\t\t\t\tif ( !support.rgba && value._rgba[ 3 ] !== 1 ) {\n\t\t\t\t\t\tcurElem = hook === \"backgroundColor\" ? elem.parentNode : elem;\n\t\t\t\t\t\twhile (\n\t\t\t\t\t\t\t( backgroundColor === \"\" || backgroundColor === \"transparent\" ) &&\n\t\t\t\t\t\t\tcurElem && curElem.style\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tbackgroundColor = jQuery.css( curElem, \"backgroundColor\" );\n\t\t\t\t\t\t\t\tcurElem = curElem.parentNode;\n\t\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvalue = value.blend( backgroundColor && backgroundColor !== \"transparent\" ?\n\t\t\t\t\t\t\tbackgroundColor :\n\t\t\t\t\t\t\t\"_default\" );\n\t\t\t\t\t}\n\n\t\t\t\t\tvalue = value.toRgbaString();\n\t\t\t\t}\n\t\t\t\ttry {\n\t\t\t\t\telem.style[ hook ] = value;\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// wrapped to prevent IE from throwing errors on \"invalid\" values like 'auto' or 'inherit'\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tjQuery.fx.step[ hook ] = function( fx ) {\n\t\t\tif ( !fx.colorInit ) {\n\t\t\t\tfx.start = color( fx.elem, hook );\n\t\t\t\tfx.end = color( fx.end );\n\t\t\t\tfx.colorInit = true;\n\t\t\t}\n\t\t\tjQuery.cssHooks[ hook ].set( fx.elem, fx.start.transition( fx.end, fx.pos ) );\n\t\t};\n\t} );\n\n};\n\ncolor.hook( stepHooks );\n\njQuery.cssHooks.borderColor = {\n\texpand: function( value ) {\n\t\tvar expanded = {};\n\n\t\teach( [ \"Top\", \"Right\", \"Bottom\", \"Left\" ], function( _i, part ) {\n\t\t\texpanded[ \"border\" + part + \"Color\" ] = value;\n\t\t} );\n\t\treturn expanded;\n\t}\n};\n\n// Basic color names only.\n// Usage of any of the other color names requires adding yourself or including\n// jquery.color.svg-names.js.\ncolors = jQuery.Color.names = {\n\n\t// 4.1. Basic color keywords\n\taqua: \"#00ffff\",\n\tblack: \"#000000\",\n\tblue: \"#0000ff\",\n\tfuchsia: \"#ff00ff\",\n\tgray: \"#808080\",\n\tgreen: \"#008000\",\n\tlime: \"#00ff00\",\n\tmaroon: \"#800000\",\n\tnavy: \"#000080\",\n\tolive: \"#808000\",\n\tpurple: \"#800080\",\n\tred: \"#ff0000\",\n\tsilver: \"#c0c0c0\",\n\tteal: \"#008080\",\n\twhite: \"#ffffff\",\n\tyellow: \"#ffff00\",\n\n\t// 4.2.3. \"transparent\" color keyword\n\ttransparent: [ null, null, null, 0 ],\n\n\t_default: \"#ffffff\"\n};\n\n} );\n","(function(deparam){\n if (typeof require === 'function' && typeof exports === 'object' && typeof module === 'object') {\n try {\n var jquery = require('jquery');\n } catch (e) {\n }\n module.exports = deparam(jquery);\n } else if (typeof define === 'function' && define.amd){\n define(['jquery'], function(jquery){\n return deparam(jquery);\n });\n } else {\n var global;\n try {\n global = (false || eval)('this'); // best cross-browser way to determine global for < ES5\n } catch (e) {\n global = window; // fails only if browser (https://developer.mozilla.org/en-US/docs/Web/Security/CSP/CSP_policy_directives)\n }\n global.deparam = deparam(global.jQuery); // assume jQuery is in global namespace\n }\n})(function ($) {\n var deparam = function( params, coerce ) {\n var obj = {},\n coerce_types = { 'true': !0, 'false': !1, 'null': null };\n\n // If params is an empty string or otherwise falsy, return obj.\n if (!params) {\n return obj;\n }\n\n // Iterate over all name=value pairs.\n params.replace(/\\+/g, ' ').split('&').forEach(function(v){\n var param = v.split( '=' ),\n key = decodeURIComponent( param[0] ),\n val,\n cur = obj,\n i = 0,\n\n // If key is more complex than 'foo', like 'a[]' or 'a[b][c]', split it\n // into its component parts.\n keys = key.split( '][' ),\n keys_last = keys.length - 1;\n\n // If the first keys part contains [ and the last ends with ], then []\n // are correctly balanced.\n if ( /\\[/.test( keys[0] ) && /\\]$/.test( keys[ keys_last ] ) ) {\n // Remove the trailing ] from the last keys part.\n keys[ keys_last ] = keys[ keys_last ].replace( /\\]$/, '' );\n\n // Split first keys part into two parts on the [ and add them back onto\n // the beginning of the keys array.\n keys = keys.shift().split('[').concat( keys );\n\n keys_last = keys.length - 1;\n } else {\n // Basic 'foo' style key.\n keys_last = 0;\n }\n\n // Are we dealing with a name=value pair, or just a name?\n if ( param.length === 2 ) {\n val = decodeURIComponent( param[1] );\n\n // Coerce values.\n if ( coerce ) {\n val = val && !isNaN(val) && ((+val + '') === val) ? +val // number\n : val === 'undefined' ? undefined // undefined\n : coerce_types[val] !== undefined ? coerce_types[val] // true, false, null\n : val; // string\n }\n\n if ( keys_last ) {\n // Complex key, build deep object structure based on a few rules:\n // * The 'cur' pointer starts at the object top-level.\n // * [] = array push (n is set to array length), [n] = array if n is\n // numeric, otherwise object.\n // * If at the last keys part, set the value.\n // * For each keys part, if the current level is undefined create an\n // object or array based on the type of the next keys part.\n // * Move the 'cur' pointer to the next level.\n // * Rinse & repeat.\n for ( ; i <= keys_last; i++ ) {\n key = keys[i] === '' ? cur.length : keys[i];\n cur = cur[key] = i < keys_last\n ? cur[key] || ( keys[i+1] && isNaN( keys[i+1] ) ? {} : [] )\n : val;\n }\n\n } else {\n // Simple key, even simpler rules, since only scalars and shallow\n // arrays are allowed.\n\n if ( Object.prototype.toString.call( obj[key] ) === '[object Array]' ) {\n // val is already an array, so push on the next value.\n obj[key].push( val );\n\n } else if ( {}.hasOwnProperty.call(obj, key) ) {\n // val isn't an array, but since a second value has been specified,\n // convert val into an array.\n obj[key] = [ obj[key], val ];\n\n } else {\n // val is a scalar.\n obj[key] = val;\n }\n }\n\n } else if ( key ) {\n // No value was defined, so set something meaningful.\n obj[key] = coerce\n ? undefined\n : '';\n }\n });\n\n return obj;\n };\n if ($) {\n $.prototype.deparam = $.deparam = deparam;\n }\n return deparam;\n});\n","/*!\n * jQuery Migrate - v3.4.1 - 2023-02-23T15:31Z\n * Copyright OpenJS Foundation and other contributors\n */\n( function( factory ) {\n\t\"use strict\";\n\n\tif ( typeof define === \"function\" && define.amd ) {\n\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine( [ \"jquery\" ], function( jQuery ) {\n\t\t\treturn factory( jQuery, window );\n\t\t} );\n\t} else if ( typeof module === \"object\" && module.exports ) {\n\n\t\t// Node/CommonJS\n\t\t// eslint-disable-next-line no-undef\n\t\tmodule.exports = factory( require( \"jquery\" ), window );\n\t} else {\n\n\t\t// Browser globals\n\t\tfactory( jQuery, window );\n\t}\n} )( function( jQuery, window ) {\n\"use strict\";\n\njQuery.migrateVersion = \"3.4.1\";\n\n// Returns 0 if v1 == v2, -1 if v1 < v2, 1 if v1 > v2\nfunction compareVersions( v1, v2 ) {\n\tvar i,\n\t\trVersionParts = /^(\\d+)\\.(\\d+)\\.(\\d+)/,\n\t\tv1p = rVersionParts.exec( v1 ) || [ ],\n\t\tv2p = rVersionParts.exec( v2 ) || [ ];\n\n\tfor ( i = 1; i <= 3; i++ ) {\n\t\tif ( +v1p[ i ] > +v2p[ i ] ) {\n\t\t\treturn 1;\n\t\t}\n\t\tif ( +v1p[ i ] < +v2p[ i ] ) {\n\t\t\treturn -1;\n\t\t}\n\t}\n\treturn 0;\n}\n\nfunction jQueryVersionSince( version ) {\n\treturn compareVersions( jQuery.fn.jquery, version ) >= 0;\n}\n\n// A map from disabled patch codes to `true`. This should really\n// be a `Set` but those are unsupported in IE.\nvar disabledPatches = Object.create( null );\n\n// Don't apply patches for specified codes. Helpful for code bases\n// where some Migrate warnings have been addressed and it's desirable\n// to avoid needless patches or false positives.\njQuery.migrateDisablePatches = function() {\n\tvar i;\n\tfor ( i = 0; i < arguments.length; i++ ) {\n\t\tdisabledPatches[ arguments[ i ] ] = true;\n\t}\n};\n\n// Allow enabling patches disabled via `jQuery.migrateDisablePatches`.\n// Helpful if you want to disable a patch only for some code that won't\n// be updated soon to be able to focus on other warnings - and enable it\n// immediately after such a call:\n// ```js\n// jQuery.migrateDisablePatches( \"workaroundA\" );\n// elem.pluginViolatingWarningA( \"pluginMethod\" );\n// jQuery.migrateEnablePatches( \"workaroundA\" );\n// ```\njQuery.migrateEnablePatches = function() {\n\tvar i;\n\tfor ( i = 0; i < arguments.length; i++ ) {\n\t\tdelete disabledPatches[ arguments[ i ] ];\n\t}\n};\n\njQuery.migrateIsPatchEnabled = function( patchCode ) {\n\treturn !disabledPatches[ patchCode ];\n};\n\n( function() {\n\n\t// Support: IE9 only\n\t// IE9 only creates console object when dev tools are first opened\n\t// IE9 console is a host object, callable but doesn't have .apply()\n\tif ( !window.console || !window.console.log ) {\n\t\treturn;\n\t}\n\n\t// Need jQuery 3.x-4.x and no older Migrate loaded\n\tif ( !jQuery || !jQueryVersionSince( \"3.0.0\" ) ||\n\t\t\tjQueryVersionSince( \"5.0.0\" ) ) {\n\t\twindow.console.log( \"JQMIGRATE: jQuery 3.x-4.x REQUIRED\" );\n\t}\n\tif ( jQuery.migrateWarnings ) {\n\t\twindow.console.log( \"JQMIGRATE: Migrate plugin loaded multiple times\" );\n\t}\n\n\t// Show a message on the console so devs know we're active\n\twindow.console.log( \"JQMIGRATE: Migrate is installed\" +\n\t\t( jQuery.migrateMute ? \"\" : \" with logging active\" ) +\n\t\t\", version \" + jQuery.migrateVersion );\n\n} )();\n\nvar warnedAbout = {};\n\n// By default each warning is only reported once.\njQuery.migrateDeduplicateWarnings = true;\n\n// List of warnings already given; public read only\njQuery.migrateWarnings = [];\n\n// Set to false to disable traces that appear with warnings\nif ( jQuery.migrateTrace === undefined ) {\n\tjQuery.migrateTrace = true;\n}\n\n// Forget any warnings we've already given; public\njQuery.migrateReset = function() {\n\twarnedAbout = {};\n\tjQuery.migrateWarnings.length = 0;\n};\n\nfunction migrateWarn( code, msg ) {\n\tvar console = window.console;\n\tif ( jQuery.migrateIsPatchEnabled( code ) &&\n\t\t( !jQuery.migrateDeduplicateWarnings || !warnedAbout[ msg ] ) ) {\n\t\twarnedAbout[ msg ] = true;\n\t\tjQuery.migrateWarnings.push( msg + \" [\" + code + \"]\" );\n\t\tif ( console && console.warn && !jQuery.migrateMute ) {\n\t\t\tconsole.warn( \"JQMIGRATE: \" + msg );\n\t\t\tif ( jQuery.migrateTrace && console.trace ) {\n\t\t\t\tconsole.trace();\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction migrateWarnProp( obj, prop, value, code, msg ) {\n\tObject.defineProperty( obj, prop, {\n\t\tconfigurable: true,\n\t\tenumerable: true,\n\t\tget: function() {\n\t\t\tmigrateWarn( code, msg );\n\t\t\treturn value;\n\t\t},\n\t\tset: function( newValue ) {\n\t\t\tmigrateWarn( code, msg );\n\t\t\tvalue = newValue;\n\t\t}\n\t} );\n}\n\nfunction migrateWarnFuncInternal( obj, prop, newFunc, code, msg ) {\n\tvar finalFunc,\n\t\torigFunc = obj[ prop ];\n\n\tobj[ prop ] = function() {\n\n\t\t// If `msg` not provided, do not warn; more sophisticated warnings\n\t\t// logic is most likely embedded in `newFunc`, in that case here\n\t\t// we just care about the logic choosing the proper implementation\n\t\t// based on whether the patch is disabled or not.\n\t\tif ( msg ) {\n\t\t\tmigrateWarn( code, msg );\n\t\t}\n\n\t\t// Since patches can be disabled & enabled dynamically, we\n\t\t// need to decide which implementation to run on each invocation.\n\t\tfinalFunc = jQuery.migrateIsPatchEnabled( code ) ?\n\t\t\tnewFunc :\n\n\t\t\t// The function may not have existed originally so we need a fallback.\n\t\t\t( origFunc || jQuery.noop );\n\n\t\treturn finalFunc.apply( this, arguments );\n\t};\n}\n\nfunction migratePatchAndWarnFunc( obj, prop, newFunc, code, msg ) {\n\tif ( !msg ) {\n\t\tthrow new Error( \"No warning message provided\" );\n\t}\n\treturn migrateWarnFuncInternal( obj, prop, newFunc, code, msg );\n}\n\nfunction migratePatchFunc( obj, prop, newFunc, code ) {\n\treturn migrateWarnFuncInternal( obj, prop, newFunc, code );\n}\n\nif ( window.document.compatMode === \"BackCompat\" ) {\n\n\t// jQuery has never supported or tested Quirks Mode\n\tmigrateWarn( \"quirks\", \"jQuery is not compatible with Quirks Mode\" );\n}\n\nvar findProp,\n\tclass2type = {},\n\toldInit = jQuery.fn.init,\n\toldFind = jQuery.find,\n\n\trattrHashTest = /\\[(\\s*[-\\w]+\\s*)([~|^$*]?=)\\s*([-\\w#]*?#[-\\w#]*)\\s*\\]/,\n\trattrHashGlob = /\\[(\\s*[-\\w]+\\s*)([~|^$*]?=)\\s*([-\\w#]*?#[-\\w#]*)\\s*\\]/g,\n\n\t// Require that the \"whitespace run\" starts from a non-whitespace\n\t// to avoid O(N^2) behavior when the engine would try matching \"\\s+$\" at each space position.\n\trtrim = /^[\\s\\uFEFF\\xA0]+|([^\\s\\uFEFF\\xA0])[\\s\\uFEFF\\xA0]+$/g;\n\nmigratePatchFunc( jQuery.fn, \"init\", function( arg1 ) {\n\tvar args = Array.prototype.slice.call( arguments );\n\n\tif ( jQuery.migrateIsPatchEnabled( \"selector-empty-id\" ) &&\n\t\ttypeof arg1 === \"string\" && arg1 === \"#\" ) {\n\n\t\t// JQuery( \"#\" ) is a bogus ID selector, but it returned an empty set\n\t\t// before jQuery 3.0\n\t\tmigrateWarn( \"selector-empty-id\", \"jQuery( '#' ) is not a valid selector\" );\n\t\targs[ 0 ] = [];\n\t}\n\n\treturn oldInit.apply( this, args );\n}, \"selector-empty-id\" );\n\n// This is already done in Core but the above patch will lose this assignment\n// so we need to redo it. It doesn't matter whether the patch is enabled or not\n// as the method is always going to be a Migrate-created wrapper.\njQuery.fn.init.prototype = jQuery.fn;\n\nmigratePatchFunc( jQuery, \"find\", function( selector ) {\n\tvar args = Array.prototype.slice.call( arguments );\n\n\t// Support: PhantomJS 1.x\n\t// String#match fails to match when used with a //g RegExp, only on some strings\n\tif ( typeof selector === \"string\" && rattrHashTest.test( selector ) ) {\n\n\t\t// The nonstandard and undocumented unquoted-hash was removed in jQuery 1.12.0\n\t\t// First see if qS thinks it's a valid selector, if so avoid a false positive\n\t\ttry {\n\t\t\twindow.document.querySelector( selector );\n\t\t} catch ( err1 ) {\n\n\t\t\t// Didn't *look* valid to qSA, warn and try quoting what we think is the value\n\t\t\tselector = selector.replace( rattrHashGlob, function( _, attr, op, value ) {\n\t\t\t\treturn \"[\" + attr + op + \"\\\"\" + value + \"\\\"]\";\n\t\t\t} );\n\n\t\t\t// If the regexp *may* have created an invalid selector, don't update it\n\t\t\t// Note that there may be false alarms if selector uses jQuery extensions\n\t\t\ttry {\n\t\t\t\twindow.document.querySelector( selector );\n\t\t\t\tmigrateWarn( \"selector-hash\",\n\t\t\t\t\t\"Attribute selector with '#' must be quoted: \" + args[ 0 ] );\n\t\t\t\targs[ 0 ] = selector;\n\t\t\t} catch ( err2 ) {\n\t\t\t\tmigrateWarn( \"selector-hash\",\n\t\t\t\t\t\"Attribute selector with '#' was not fixed: \" + args[ 0 ] );\n\t\t\t}\n\t\t}\n\t}\n\n\treturn oldFind.apply( this, args );\n}, \"selector-hash\" );\n\n// Copy properties attached to original jQuery.find method (e.g. .attr, .isXML)\nfor ( findProp in oldFind ) {\n\tif ( Object.prototype.hasOwnProperty.call( oldFind, findProp ) ) {\n\t\tjQuery.find[ findProp ] = oldFind[ findProp ];\n\t}\n}\n\n// The number of elements contained in the matched element set\nmigratePatchAndWarnFunc( jQuery.fn, \"size\", function() {\n\treturn this.length;\n}, \"size\",\n\"jQuery.fn.size() is deprecated and removed; use the .length property\" );\n\nmigratePatchAndWarnFunc( jQuery, \"parseJSON\", function() {\n\treturn JSON.parse.apply( null, arguments );\n}, \"parseJSON\",\n\"jQuery.parseJSON is deprecated; use JSON.parse\" );\n\nmigratePatchAndWarnFunc( jQuery, \"holdReady\", jQuery.holdReady,\n\t\"holdReady\", \"jQuery.holdReady is deprecated\" );\n\nmigratePatchAndWarnFunc( jQuery, \"unique\", jQuery.uniqueSort,\n\t\"unique\", \"jQuery.unique is deprecated; use jQuery.uniqueSort\" );\n\n// Now jQuery.expr.pseudos is the standard incantation\nmigrateWarnProp( jQuery.expr, \"filters\", jQuery.expr.pseudos, \"expr-pre-pseudos\",\n\t\"jQuery.expr.filters is deprecated; use jQuery.expr.pseudos\" );\nmigrateWarnProp( jQuery.expr, \":\", jQuery.expr.pseudos, \"expr-pre-pseudos\",\n\t\"jQuery.expr[':'] is deprecated; use jQuery.expr.pseudos\" );\n\n// Prior to jQuery 3.1.1 there were internal refs so we don't warn there\nif ( jQueryVersionSince( \"3.1.1\" ) ) {\n\tmigratePatchAndWarnFunc( jQuery, \"trim\", function( text ) {\n\t\treturn text == null ?\n\t\t\t\"\" :\n\t\t\t( text + \"\" ).replace( rtrim, \"$1\" );\n\t}, \"trim\",\n\t\"jQuery.trim is deprecated; use String.prototype.trim\" );\n}\n\n// Prior to jQuery 3.2 there were internal refs so we don't warn there\nif ( jQueryVersionSince( \"3.2.0\" ) ) {\n\tmigratePatchAndWarnFunc( jQuery, \"nodeName\", function( elem, name ) {\n\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\t}, \"nodeName\",\n\t\"jQuery.nodeName is deprecated\" );\n\n\tmigratePatchAndWarnFunc( jQuery, \"isArray\", Array.isArray, \"isArray\",\n\t\t\"jQuery.isArray is deprecated; use Array.isArray\"\n\t);\n}\n\nif ( jQueryVersionSince( \"3.3.0\" ) ) {\n\n\tmigratePatchAndWarnFunc( jQuery, \"isNumeric\", function( obj ) {\n\n\t\t\t// As of jQuery 3.0, isNumeric is limited to\n\t\t\t// strings and numbers (primitives or objects)\n\t\t\t// that can be coerced to finite numbers (gh-2662)\n\t\t\tvar type = typeof obj;\n\t\t\treturn ( type === \"number\" || type === \"string\" ) &&\n\n\t\t\t\t// parseFloat NaNs numeric-cast false positives (\"\")\n\t\t\t\t// ...but misinterprets leading-number strings, e.g. hex literals (\"0x...\")\n\t\t\t\t// subtraction forces infinities to NaN\n\t\t\t\t!isNaN( obj - parseFloat( obj ) );\n\t\t}, \"isNumeric\",\n\t\t\"jQuery.isNumeric() is deprecated\"\n\t);\n\n\t// Populate the class2type map\n\tjQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".\n\t\tsplit( \" \" ),\n\tfunction( _, name ) {\n\t\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n\t} );\n\n\tmigratePatchAndWarnFunc( jQuery, \"type\", function( obj ) {\n\t\tif ( obj == null ) {\n\t\t\treturn obj + \"\";\n\t\t}\n\n\t\t// Support: Android <=2.3 only (functionish RegExp)\n\t\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\t\tclass2type[ Object.prototype.toString.call( obj ) ] || \"object\" :\n\t\t\ttypeof obj;\n\t}, \"type\",\n\t\"jQuery.type is deprecated\" );\n\n\tmigratePatchAndWarnFunc( jQuery, \"isFunction\",\n\t\tfunction( obj ) {\n\t\t\treturn typeof obj === \"function\";\n\t\t}, \"isFunction\",\n\t\t\"jQuery.isFunction() is deprecated\" );\n\n\tmigratePatchAndWarnFunc( jQuery, \"isWindow\",\n\t\tfunction( obj ) {\n\t\t\treturn obj != null && obj === obj.window;\n\t\t}, \"isWindow\",\n\t\t\"jQuery.isWindow() is deprecated\"\n\t);\n}\n\n// Support jQuery slim which excludes the ajax module\nif ( jQuery.ajax ) {\n\nvar oldAjax = jQuery.ajax,\n\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\nmigratePatchFunc( jQuery, \"ajax\", function() {\n\tvar jQXHR = oldAjax.apply( this, arguments );\n\n\t// Be sure we got a jQXHR (e.g., not sync)\n\tif ( jQXHR.promise ) {\n\t\tmigratePatchAndWarnFunc( jQXHR, \"success\", jQXHR.done, \"jqXHR-methods\",\n\t\t\t\"jQXHR.success is deprecated and removed\" );\n\t\tmigratePatchAndWarnFunc( jQXHR, \"error\", jQXHR.fail, \"jqXHR-methods\",\n\t\t\t\"jQXHR.error is deprecated and removed\" );\n\t\tmigratePatchAndWarnFunc( jQXHR, \"complete\", jQXHR.always, \"jqXHR-methods\",\n\t\t\t\"jQXHR.complete is deprecated and removed\" );\n\t}\n\n\treturn jQXHR;\n}, \"jqXHR-methods\" );\n\n// Only trigger the logic in jQuery <4 as the JSON-to-JSONP auto-promotion\n// behavior is gone in jQuery 4.0 and as it has security implications, we don't\n// want to restore the legacy behavior.\nif ( !jQueryVersionSince( \"4.0.0\" ) ) {\n\n\t// Register this prefilter before the jQuery one. Otherwise, a promoted\n\t// request is transformed into one with the script dataType and we can't\n\t// catch it anymore.\n\tjQuery.ajaxPrefilter( \"+json\", function( s ) {\n\n\t\t// Warn if JSON-to-JSONP auto-promotion happens.\n\t\tif ( s.jsonp !== false && ( rjsonp.test( s.url ) ||\n\t\t\t\ttypeof s.data === \"string\" &&\n\t\t\t\t( s.contentType || \"\" )\n\t\t\t\t\t.indexOf( \"application/x-www-form-urlencoded\" ) === 0 &&\n\t\t\t\trjsonp.test( s.data )\n\t\t) ) {\n\t\t\tmigrateWarn( \"jsonp-promotion\", \"JSON-to-JSONP auto-promotion is deprecated\" );\n\t\t}\n\t} );\n}\n\n}\n\nvar oldRemoveAttr = jQuery.fn.removeAttr,\n\toldToggleClass = jQuery.fn.toggleClass,\n\trmatchNonSpace = /\\S+/g;\n\nmigratePatchFunc( jQuery.fn, \"removeAttr\", function( name ) {\n\tvar self = this,\n\t\tpatchNeeded = false;\n\n\tjQuery.each( name.match( rmatchNonSpace ), function( _i, attr ) {\n\t\tif ( jQuery.expr.match.bool.test( attr ) ) {\n\n\t\t\t// Only warn if at least a single node had the property set to\n\t\t\t// something else than `false`. Otherwise, this Migrate patch\n\t\t\t// doesn't influence the behavior and there's no need to set or warn.\n\t\t\tself.each( function() {\n\t\t\t\tif ( jQuery( this ).prop( attr ) !== false ) {\n\t\t\t\t\tpatchNeeded = true;\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\tif ( patchNeeded ) {\n\t\t\tmigrateWarn( \"removeAttr-bool\",\n\t\t\t\t\"jQuery.fn.removeAttr no longer sets boolean properties: \" + attr );\n\t\t\tself.prop( attr, false );\n\t\t}\n\t} );\n\n\treturn oldRemoveAttr.apply( this, arguments );\n}, \"removeAttr-bool\" );\n\nmigratePatchFunc( jQuery.fn, \"toggleClass\", function( state ) {\n\n\t// Only deprecating no-args or single boolean arg\n\tif ( state !== undefined && typeof state !== \"boolean\" ) {\n\n\t\treturn oldToggleClass.apply( this, arguments );\n\t}\n\n\tmigrateWarn( \"toggleClass-bool\", \"jQuery.fn.toggleClass( boolean ) is deprecated\" );\n\n\t// Toggle entire class name of each element\n\treturn this.each( function() {\n\t\tvar className = this.getAttribute && this.getAttribute( \"class\" ) || \"\";\n\n\t\tif ( className ) {\n\t\t\tjQuery.data( this, \"__className__\", className );\n\t\t}\n\n\t\t// If the element has a class name or if we're passed `false`,\n\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t// falling back to the empty string if nothing was stored.\n\t\tif ( this.setAttribute ) {\n\t\t\tthis.setAttribute( \"class\",\n\t\t\t\tclassName || state === false ?\n\t\t\t\t\"\" :\n\t\t\t\tjQuery.data( this, \"__className__\" ) || \"\"\n\t\t\t);\n\t\t}\n\t} );\n}, \"toggleClass-bool\" );\n\nfunction camelCase( string ) {\n\treturn string.replace( /-([a-z])/g, function( _, letter ) {\n\t\treturn letter.toUpperCase();\n\t} );\n}\n\nvar origFnCss, internalCssNumber,\n\tinternalSwapCall = false,\n\tralphaStart = /^[a-z]/,\n\n\t// The regex visualized:\n\t//\n\t// /----------\\\n\t// | | /-------\\\n\t// | / Top \\ | | |\n\t// /--- Border ---+-| Right |-+---+- Width -+---\\\n\t// | | Bottom | |\n\t// | \\ Left / |\n\t// | |\n\t// | /----------\\ |\n\t// | /-------------\\ | | |- END\n\t// | | | | / Top \\ | |\n\t// | | / Margin \\ | | | Right | | |\n\t// |---------+-| |-+---+-| Bottom |-+----|\n\t// | \\ Padding / \\ Left / |\n\t// BEGIN -| |\n\t// | /---------\\ |\n\t// | | | |\n\t// | | / Min \\ | / Width \\ |\n\t// \\--------------+-| |-+---| |---/\n\t// \\ Max / \\ Height /\n\trautoPx = /^(?:Border(?:Top|Right|Bottom|Left)?(?:Width|)|(?:Margin|Padding)?(?:Top|Right|Bottom|Left)?|(?:Min|Max)?(?:Width|Height))$/;\n\n// If this version of jQuery has .swap(), don't false-alarm on internal uses\nif ( jQuery.swap ) {\n\tjQuery.each( [ \"height\", \"width\", \"reliableMarginRight\" ], function( _, name ) {\n\t\tvar oldHook = jQuery.cssHooks[ name ] && jQuery.cssHooks[ name ].get;\n\n\t\tif ( oldHook ) {\n\t\t\tjQuery.cssHooks[ name ].get = function() {\n\t\t\t\tvar ret;\n\n\t\t\t\tinternalSwapCall = true;\n\t\t\t\tret = oldHook.apply( this, arguments );\n\t\t\t\tinternalSwapCall = false;\n\t\t\t\treturn ret;\n\t\t\t};\n\t\t}\n\t} );\n}\n\nmigratePatchFunc( jQuery, \"swap\", function( elem, options, callback, args ) {\n\tvar ret, name,\n\t\told = {};\n\n\tif ( !internalSwapCall ) {\n\t\tmigrateWarn( \"swap\", \"jQuery.swap() is undocumented and deprecated\" );\n\t}\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.apply( elem, args || [] );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n}, \"swap\" );\n\nif ( jQueryVersionSince( \"3.4.0\" ) && typeof Proxy !== \"undefined\" ) {\n\tjQuery.cssProps = new Proxy( jQuery.cssProps || {}, {\n\t\tset: function() {\n\t\t\tmigrateWarn( \"cssProps\", \"jQuery.cssProps is deprecated\" );\n\t\t\treturn Reflect.set.apply( this, arguments );\n\t\t}\n\t} );\n}\n\n// In jQuery >=4 where jQuery.cssNumber is missing fill it with the latest 3.x version:\n// https://github.com/jquery/jquery/blob/3.6.0/src/css.js#L212-L233\n// This way, number values for the CSS properties below won't start triggering\n// Migrate warnings when jQuery gets updated to >=4.0.0 (gh-438).\nif ( jQueryVersionSince( \"4.0.0\" ) ) {\n\n\t// We need to keep this as a local variable as we need it internally\n\t// in a `jQuery.fn.css` patch and this usage shouldn't warn.\n\tinternalCssNumber = {\n\t\tanimationIterationCount: true,\n\t\tcolumnCount: true,\n\t\tfillOpacity: true,\n\t\tflexGrow: true,\n\t\tflexShrink: true,\n\t\tfontWeight: true,\n\t\tgridArea: true,\n\t\tgridColumn: true,\n\t\tgridColumnEnd: true,\n\t\tgridColumnStart: true,\n\t\tgridRow: true,\n\t\tgridRowEnd: true,\n\t\tgridRowStart: true,\n\t\tlineHeight: true,\n\t\topacity: true,\n\t\torder: true,\n\t\torphans: true,\n\t\twidows: true,\n\t\tzIndex: true,\n\t\tzoom: true\n\t};\n\n\tif ( typeof Proxy !== \"undefined\" ) {\n\t\tjQuery.cssNumber = new Proxy( internalCssNumber, {\n\t\t\tget: function() {\n\t\t\t\tmigrateWarn( \"css-number\", \"jQuery.cssNumber is deprecated\" );\n\t\t\t\treturn Reflect.get.apply( this, arguments );\n\t\t\t},\n\t\t\tset: function() {\n\t\t\t\tmigrateWarn( \"css-number\", \"jQuery.cssNumber is deprecated\" );\n\t\t\t\treturn Reflect.set.apply( this, arguments );\n\t\t\t}\n\t\t} );\n\t} else {\n\n\t\t// Support: IE 9-11+\n\t\t// IE doesn't support proxies, but we still want to restore the legacy\n\t\t// jQuery.cssNumber there.\n\t\tjQuery.cssNumber = internalCssNumber;\n\t}\n} else {\n\n\t// Make `internalCssNumber` defined for jQuery <4 as well as it's needed\n\t// in the `jQuery.fn.css` patch below.\n\tinternalCssNumber = jQuery.cssNumber;\n}\n\nfunction isAutoPx( prop ) {\n\n\t// The first test is used to ensure that:\n\t// 1. The prop starts with a lowercase letter (as we uppercase it for the second regex).\n\t// 2. The prop is not empty.\n\treturn ralphaStart.test( prop ) &&\n\t\trautoPx.test( prop[ 0 ].toUpperCase() + prop.slice( 1 ) );\n}\n\norigFnCss = jQuery.fn.css;\n\nmigratePatchFunc( jQuery.fn, \"css\", function( name, value ) {\n\tvar camelName,\n\t\torigThis = this;\n\n\tif ( name && typeof name === \"object\" && !Array.isArray( name ) ) {\n\t\tjQuery.each( name, function( n, v ) {\n\t\t\tjQuery.fn.css.call( origThis, n, v );\n\t\t} );\n\t\treturn this;\n\t}\n\n\tif ( typeof value === \"number\" ) {\n\t\tcamelName = camelCase( name );\n\n\t\t// Use `internalCssNumber` to avoid triggering our warnings in this\n\t\t// internal check.\n\t\tif ( !isAutoPx( camelName ) && !internalCssNumber[ camelName ] ) {\n\t\t\tmigrateWarn( \"css-number\",\n\t\t\t\t\"Number-typed values are deprecated for jQuery.fn.css( \\\"\" +\n\t\t\t\tname + \"\\\", value )\" );\n\t\t}\n\t}\n\n\treturn origFnCss.apply( this, arguments );\n}, \"css-number\" );\n\nvar origData = jQuery.data;\n\nmigratePatchFunc( jQuery, \"data\", function( elem, name, value ) {\n\tvar curData, sameKeys, key;\n\n\t// Name can be an object, and each entry in the object is meant to be set as data\n\tif ( name && typeof name === \"object\" && arguments.length === 2 ) {\n\n\t\tcurData = jQuery.hasData( elem ) && origData.call( this, elem );\n\t\tsameKeys = {};\n\t\tfor ( key in name ) {\n\t\t\tif ( key !== camelCase( key ) ) {\n\t\t\t\tmigrateWarn( \"data-camelCase\",\n\t\t\t\t\t\"jQuery.data() always sets/gets camelCased names: \" + key );\n\t\t\t\tcurData[ key ] = name[ key ];\n\t\t\t} else {\n\t\t\t\tsameKeys[ key ] = name[ key ];\n\t\t\t}\n\t\t}\n\n\t\torigData.call( this, elem, sameKeys );\n\n\t\treturn name;\n\t}\n\n\t// If the name is transformed, look for the un-transformed name in the data object\n\tif ( name && typeof name === \"string\" && name !== camelCase( name ) ) {\n\n\t\tcurData = jQuery.hasData( elem ) && origData.call( this, elem );\n\t\tif ( curData && name in curData ) {\n\t\t\tmigrateWarn( \"data-camelCase\",\n\t\t\t\t\"jQuery.data() always sets/gets camelCased names: \" + name );\n\t\t\tif ( arguments.length > 2 ) {\n\t\t\t\tcurData[ name ] = value;\n\t\t\t}\n\t\t\treturn curData[ name ];\n\t\t}\n\t}\n\n\treturn origData.apply( this, arguments );\n}, \"data-camelCase\" );\n\n// Support jQuery slim which excludes the effects module\nif ( jQuery.fx ) {\n\nvar intervalValue, intervalMsg,\n\toldTweenRun = jQuery.Tween.prototype.run,\n\tlinearEasing = function( pct ) {\n\t\treturn pct;\n\t};\n\nmigratePatchFunc( jQuery.Tween.prototype, \"run\", function( ) {\n\tif ( jQuery.easing[ this.easing ].length > 1 ) {\n\t\tmigrateWarn(\n\t\t\t\"easing-one-arg\",\n\t\t\t\"'jQuery.easing.\" + this.easing.toString() + \"' should use only one argument\"\n\t\t);\n\n\t\tjQuery.easing[ this.easing ] = linearEasing;\n\t}\n\n\toldTweenRun.apply( this, arguments );\n}, \"easing-one-arg\" );\n\nintervalValue = jQuery.fx.interval;\nintervalMsg = \"jQuery.fx.interval is deprecated\";\n\n// Support: IE9, Android <=4.4\n// Avoid false positives on browsers that lack rAF\n// Don't warn if document is hidden, jQuery uses setTimeout (#292)\nif ( window.requestAnimationFrame ) {\n\tObject.defineProperty( jQuery.fx, \"interval\", {\n\t\tconfigurable: true,\n\t\tenumerable: true,\n\t\tget: function() {\n\t\t\tif ( !window.document.hidden ) {\n\t\t\t\tmigrateWarn( \"fx-interval\", intervalMsg );\n\t\t\t}\n\n\t\t\t// Only fallback to the default if patch is enabled\n\t\t\tif ( !jQuery.migrateIsPatchEnabled( \"fx-interval\" ) ) {\n\t\t\t\treturn intervalValue;\n\t\t\t}\n\t\t\treturn intervalValue === undefined ? 13 : intervalValue;\n\t\t},\n\t\tset: function( newValue ) {\n\t\t\tmigrateWarn( \"fx-interval\", intervalMsg );\n\t\t\tintervalValue = newValue;\n\t\t}\n\t} );\n}\n\n}\n\nvar oldLoad = jQuery.fn.load,\n\toldEventAdd = jQuery.event.add,\n\toriginalFix = jQuery.event.fix;\n\njQuery.event.props = [];\njQuery.event.fixHooks = {};\n\nmigrateWarnProp( jQuery.event.props, \"concat\", jQuery.event.props.concat,\n\t\"event-old-patch\",\n\t\"jQuery.event.props.concat() is deprecated and removed\" );\n\nmigratePatchFunc( jQuery.event, \"fix\", function( originalEvent ) {\n\tvar event,\n\t\ttype = originalEvent.type,\n\t\tfixHook = this.fixHooks[ type ],\n\t\tprops = jQuery.event.props;\n\n\tif ( props.length ) {\n\t\tmigrateWarn( \"event-old-patch\",\n\t\t\t\"jQuery.event.props are deprecated and removed: \" + props.join() );\n\t\twhile ( props.length ) {\n\t\t\tjQuery.event.addProp( props.pop() );\n\t\t}\n\t}\n\n\tif ( fixHook && !fixHook._migrated_ ) {\n\t\tfixHook._migrated_ = true;\n\t\tmigrateWarn( \"event-old-patch\",\n\t\t\t\"jQuery.event.fixHooks are deprecated and removed: \" + type );\n\t\tif ( ( props = fixHook.props ) && props.length ) {\n\t\t\twhile ( props.length ) {\n\t\t\t\tjQuery.event.addProp( props.pop() );\n\t\t\t}\n\t\t}\n\t}\n\n\tevent = originalFix.call( this, originalEvent );\n\n\treturn fixHook && fixHook.filter ?\n\t\tfixHook.filter( event, originalEvent ) :\n\t\tevent;\n}, \"event-old-patch\" );\n\nmigratePatchFunc( jQuery.event, \"add\", function( elem, types ) {\n\n\t// This misses the multiple-types case but that seems awfully rare\n\tif ( elem === window && types === \"load\" && window.document.readyState === \"complete\" ) {\n\t\tmigrateWarn( \"load-after-event\",\n\t\t\t\"jQuery(window).on('load'...) called after load event occurred\" );\n\t}\n\treturn oldEventAdd.apply( this, arguments );\n}, \"load-after-event\" );\n\njQuery.each( [ \"load\", \"unload\", \"error\" ], function( _, name ) {\n\n\tmigratePatchFunc( jQuery.fn, name, function() {\n\t\tvar args = Array.prototype.slice.call( arguments, 0 );\n\n\t\t// If this is an ajax load() the first arg should be the string URL;\n\t\t// technically this could also be the \"Anything\" arg of the event .load()\n\t\t// which just goes to show why this dumb signature has been deprecated!\n\t\t// jQuery custom builds that exclude the Ajax module justifiably die here.\n\t\tif ( name === \"load\" && typeof args[ 0 ] === \"string\" ) {\n\t\t\treturn oldLoad.apply( this, args );\n\t\t}\n\n\t\tmigrateWarn( \"shorthand-removed-v3\",\n\t\t\t\"jQuery.fn.\" + name + \"() is deprecated\" );\n\n\t\targs.splice( 0, 0, name );\n\t\tif ( arguments.length ) {\n\t\t\treturn this.on.apply( this, args );\n\t\t}\n\n\t\t// Use .triggerHandler here because:\n\t\t// - load and unload events don't need to bubble, only applied to window or image\n\t\t// - error event should not bubble to window, although it does pre-1.7\n\t\t// See http://bugs.jquery.com/ticket/11820\n\t\tthis.triggerHandler.apply( this, args );\n\t\treturn this;\n\t}, \"shorthand-removed-v3\" );\n\n} );\n\njQuery.each( ( \"blur focus focusin focusout resize scroll click dblclick \" +\n\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\"change select submit keydown keypress keyup contextmenu\" ).split( \" \" ),\n\tfunction( _i, name ) {\n\n\t// Handle event binding\n\tmigratePatchAndWarnFunc( jQuery.fn, name, function( data, fn ) {\n\t\treturn arguments.length > 0 ?\n\t\t\tthis.on( name, null, data, fn ) :\n\t\t\tthis.trigger( name );\n\t\t},\n\t\t\"shorthand-deprecated-v3\",\n\t\t\"jQuery.fn.\" + name + \"() event shorthand is deprecated\" );\n} );\n\n// Trigger \"ready\" event only once, on document ready\njQuery( function() {\n\tjQuery( window.document ).triggerHandler( \"ready\" );\n} );\n\njQuery.event.special.ready = {\n\tsetup: function() {\n\t\tif ( this === window.document ) {\n\t\t\tmigrateWarn( \"ready-event\", \"'ready' event is deprecated\" );\n\t\t}\n\t}\n};\n\nmigratePatchAndWarnFunc( jQuery.fn, \"bind\", function( types, data, fn ) {\n\treturn this.on( types, null, data, fn );\n}, \"pre-on-methods\", \"jQuery.fn.bind() is deprecated\" );\nmigratePatchAndWarnFunc( jQuery.fn, \"unbind\", function( types, fn ) {\n\treturn this.off( types, null, fn );\n}, \"pre-on-methods\", \"jQuery.fn.unbind() is deprecated\" );\nmigratePatchAndWarnFunc( jQuery.fn, \"delegate\", function( selector, types, data, fn ) {\n\treturn this.on( types, selector, data, fn );\n}, \"pre-on-methods\", \"jQuery.fn.delegate() is deprecated\" );\nmigratePatchAndWarnFunc( jQuery.fn, \"undelegate\", function( selector, types, fn ) {\n\treturn arguments.length === 1 ?\n\t\tthis.off( selector, \"**\" ) :\n\t\tthis.off( types, selector || \"**\", fn );\n}, \"pre-on-methods\", \"jQuery.fn.undelegate() is deprecated\" );\nmigratePatchAndWarnFunc( jQuery.fn, \"hover\", function( fnOver, fnOut ) {\n\treturn this.on( \"mouseenter\", fnOver ).on( \"mouseleave\", fnOut || fnOver );\n}, \"pre-on-methods\", \"jQuery.fn.hover() is deprecated\" );\n\nvar rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)[^>]*)\\/>/gi,\n\tmakeMarkup = function( html ) {\n\t\tvar doc = window.document.implementation.createHTMLDocument( \"\" );\n\t\tdoc.body.innerHTML = html;\n\t\treturn doc.body && doc.body.innerHTML;\n\t},\n\twarnIfChanged = function( html ) {\n\t\tvar changed = html.replace( rxhtmlTag, \"<$1>\" );\n\t\tif ( changed !== html && makeMarkup( html ) !== makeMarkup( changed ) ) {\n\t\t\tmigrateWarn( \"self-closed-tags\",\n\t\t\t\t\"HTML tags must be properly nested and closed: \" + html );\n\t\t}\n\t};\n\n/**\n * Deprecated, please use `jQuery.migrateDisablePatches( \"self-closed-tags\" )` instead.\n * @deprecated\n */\njQuery.UNSAFE_restoreLegacyHtmlPrefilter = function() {\n\tjQuery.migrateEnablePatches( \"self-closed-tags\" );\n};\n\nmigratePatchFunc( jQuery, \"htmlPrefilter\", function( html ) {\n\twarnIfChanged( html );\n\treturn html.replace( rxhtmlTag, \"<$1>\" );\n}, \"self-closed-tags\" );\n\n// This patch needs to be disabled by default as it re-introduces\n// security issues (CVE-2020-11022, CVE-2020-11023).\njQuery.migrateDisablePatches( \"self-closed-tags\" );\n\nvar origOffset = jQuery.fn.offset;\n\nmigratePatchFunc( jQuery.fn, \"offset\", function() {\n\tvar elem = this[ 0 ];\n\n\tif ( elem && ( !elem.nodeType || !elem.getBoundingClientRect ) ) {\n\t\tmigrateWarn( \"offset-valid-elem\", \"jQuery.fn.offset() requires a valid DOM element\" );\n\t\treturn arguments.length ? this : undefined;\n\t}\n\n\treturn origOffset.apply( this, arguments );\n}, \"offset-valid-elem\" );\n\n// Support jQuery slim which excludes the ajax module\n// The jQuery.param patch is about respecting `jQuery.ajaxSettings.traditional`\n// so it doesn't make sense for the slim build.\nif ( jQuery.ajax ) {\n\nvar origParam = jQuery.param;\n\nmigratePatchFunc( jQuery, \"param\", function( data, traditional ) {\n\tvar ajaxTraditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;\n\n\tif ( traditional === undefined && ajaxTraditional ) {\n\n\t\tmigrateWarn( \"param-ajax-traditional\",\n\t\t\t\"jQuery.param() no longer uses jQuery.ajaxSettings.traditional\" );\n\t\ttraditional = ajaxTraditional;\n\t}\n\n\treturn origParam.call( this, data, traditional );\n}, \"param-ajax-traditional\" );\n\n}\n\nmigratePatchAndWarnFunc( jQuery.fn, \"andSelf\", jQuery.fn.addBack, \"andSelf\",\n\t\"jQuery.fn.andSelf() is deprecated and removed, use jQuery.fn.addBack()\" );\n\n// Support jQuery slim which excludes the deferred module in jQuery 4.0+\nif ( jQuery.Deferred ) {\n\nvar oldDeferred = jQuery.Deferred,\n\ttuples = [\n\n\t\t// Action, add listener, callbacks, .then handlers, final state\n\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ),\n\t\t\tjQuery.Callbacks( \"once memory\" ), \"resolved\" ],\n\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ),\n\t\t\tjQuery.Callbacks( \"once memory\" ), \"rejected\" ],\n\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ),\n\t\t\tjQuery.Callbacks( \"memory\" ) ]\n\t];\n\nmigratePatchFunc( jQuery, \"Deferred\", function( func ) {\n\tvar deferred = oldDeferred(),\n\t\tpromise = deferred.promise();\n\n\tfunction newDeferredPipe( /* fnDone, fnFail, fnProgress */ ) {\n\t\tvar fns = arguments;\n\n\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\t\tvar fn = typeof fns[ i ] === \"function\" && fns[ i ];\n\n\t\t\t\t// Deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\tif ( returned && typeof returned.promise === \"function\" ) {\n\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t.fail( newDefer.reject )\n\t\t\t\t\t\t\t.progress( newDefer.notify );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\tthis === promise ? newDefer.promise() : this,\n\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t} );\n\t\t\tfns = null;\n\t\t} ).promise();\n\t}\n\n\tmigratePatchAndWarnFunc( deferred, \"pipe\", newDeferredPipe, \"deferred-pipe\",\n\t\t\"deferred.pipe() is deprecated\" );\n\tmigratePatchAndWarnFunc( promise, \"pipe\", newDeferredPipe, \"deferred-pipe\",\n\t\t\"deferred.pipe() is deprecated\" );\n\n\tif ( func ) {\n\t\tfunc.call( deferred, deferred );\n\t}\n\n\treturn deferred;\n}, \"deferred-pipe\" );\n\n// Preserve handler of uncaught exceptions in promise chains\njQuery.Deferred.exceptionHook = oldDeferred.exceptionHook;\n\n}\n\nreturn jQuery;\n} );\n","/* jshint node: true */\n\n/**\n * Unobtrusive scripting adapter for jQuery\n * https://github.com/rails/jquery-ujs\n *\n * Requires jQuery 1.8.0 or later.\n *\n * Released under the MIT license\n *\n */\n\n(function() {\n 'use strict';\n\n var jqueryUjsInit = function($, undefined) {\n\n // Cut down on the number of issues from people inadvertently including jquery_ujs twice\n // by detecting and raising an error when it happens.\n if ( $.rails !== undefined ) {\n $.error('jquery-ujs has already been loaded!');\n }\n\n // Shorthand to make it a little easier to call public rails functions from within rails.js\n var rails;\n var $document = $(document);\n\n $.rails = rails = {\n // Link elements bound by jquery-ujs\n linkClickSelector: 'a[data-confirm], a[data-method], a[data-remote]:not([disabled]), a[data-disable-with], a[data-disable]',\n\n // Button elements bound by jquery-ujs\n buttonClickSelector: 'button[data-remote]:not([form]):not(form button), button[data-confirm]:not([form]):not(form button)',\n\n // Select elements bound by jquery-ujs\n inputChangeSelector: 'select[data-remote], input[data-remote], textarea[data-remote]',\n\n // Form elements bound by jquery-ujs\n formSubmitSelector: 'form:not([data-turbo=true])',\n\n // Form input elements bound by jquery-ujs\n formInputClickSelector: 'form:not([data-turbo=true]) input[type=submit], form:not([data-turbo=true]) input[type=image], form:not([data-turbo=true]) button[type=submit], form:not([data-turbo=true]) button:not([type]), input[type=submit][form], input[type=image][form], button[type=submit][form], button[form]:not([type])',\n\n // Form input elements disabled during form submission\n disableSelector: 'input[data-disable-with]:enabled, button[data-disable-with]:enabled, textarea[data-disable-with]:enabled, input[data-disable]:enabled, button[data-disable]:enabled, textarea[data-disable]:enabled',\n\n // Form input elements re-enabled after form submission\n enableSelector: 'input[data-disable-with]:disabled, button[data-disable-with]:disabled, textarea[data-disable-with]:disabled, input[data-disable]:disabled, button[data-disable]:disabled, textarea[data-disable]:disabled',\n\n // Form required input elements\n requiredInputSelector: 'input[name][required]:not([disabled]), textarea[name][required]:not([disabled])',\n\n // Form file input elements\n fileInputSelector: 'input[name][type=file]:not([disabled])',\n\n // Link onClick disable selector with possible reenable after remote submission\n linkDisableSelector: 'a[data-disable-with], a[data-disable]',\n\n // Button onClick disable selector with possible reenable after remote submission\n buttonDisableSelector: 'button[data-remote][data-disable-with], button[data-remote][data-disable]',\n\n // Up-to-date Cross-Site Request Forgery token\n csrfToken: function() {\n return $('meta[name=csrf-token]').attr('content');\n },\n\n // URL param that must contain the CSRF token\n csrfParam: function() {\n return $('meta[name=csrf-param]').attr('content');\n },\n\n // Make sure that every Ajax request sends the CSRF token\n CSRFProtection: function(xhr) {\n var token = rails.csrfToken();\n if (token) xhr.setRequestHeader('X-CSRF-Token', token);\n },\n\n // Make sure that all forms have actual up-to-date tokens (cached forms contain old ones)\n refreshCSRFTokens: function(){\n $('form input[name=\"' + rails.csrfParam() + '\"]').val(rails.csrfToken());\n },\n\n // Triggers an event on an element and returns false if the event result is false\n fire: function(obj, name, data) {\n var event = $.Event(name);\n obj.trigger(event, data);\n return event.result !== false;\n },\n\n // Default confirm dialog, may be overridden with custom confirm dialog in $.rails.confirm\n confirm: function(message) {\n return confirm(message);\n },\n\n // Default ajax function, may be overridden with custom function in $.rails.ajax\n ajax: function(options) {\n return $.ajax(options);\n },\n\n // Default way to get an element's href. May be overridden at $.rails.href.\n href: function(element) {\n return element[0].href;\n },\n\n // Checks \"data-remote\" if true to handle the request through a XHR request.\n isRemote: function(element) {\n return element.data('remote') !== undefined && element.data('remote') !== false;\n },\n\n // Submits \"remote\" forms and links with ajax\n handleRemote: function(element) {\n var method, url, data, withCredentials, dataType, options;\n\n if (rails.fire(element, 'ajax:before')) {\n withCredentials = element.data('with-credentials') || null;\n dataType = element.data('type') || ($.ajaxSettings && $.ajaxSettings.dataType);\n\n if (element.is('form')) {\n method = element.data('ujs:submit-button-formmethod') || element.attr('method');\n url = element.data('ujs:submit-button-formaction') || element.attr('action');\n data = $(element[0]).serializeArray();\n // memoized value from clicked submit button\n var button = element.data('ujs:submit-button');\n if (button) {\n data.push(button);\n element.data('ujs:submit-button', null);\n }\n element.data('ujs:submit-button-formmethod', null);\n element.data('ujs:submit-button-formaction', null);\n } else if (element.is(rails.inputChangeSelector)) {\n method = element.data('method');\n url = element.data('url');\n data = element.serialize();\n if (element.data('params')) data = data + '&' + element.data('params');\n } else if (element.is(rails.buttonClickSelector)) {\n method = element.data('method') || 'get';\n url = element.data('url');\n data = element.serialize();\n if (element.data('params')) data = data + '&' + element.data('params');\n } else {\n method = element.data('method');\n url = rails.href(element);\n data = element.data('params') || null;\n }\n\n options = {\n type: method || 'GET', data: data, dataType: dataType,\n // stopping the \"ajax:beforeSend\" event will cancel the ajax request\n beforeSend: function(xhr, settings) {\n if (settings.dataType === undefined) {\n xhr.setRequestHeader('accept', '*/*;q=0.5, ' + settings.accepts.script);\n }\n if (rails.fire(element, 'ajax:beforeSend', [xhr, settings])) {\n element.trigger('ajax:send', xhr);\n } else {\n return false;\n }\n },\n success: function(data, status, xhr) {\n element.trigger('ajax:success', [data, status, xhr]);\n },\n complete: function(xhr, status) {\n element.trigger('ajax:complete', [xhr, status]);\n },\n error: function(xhr, status, error) {\n element.trigger('ajax:error', [xhr, status, error]);\n },\n crossDomain: rails.isCrossDomain(url)\n };\n\n // There is no withCredentials for IE6-8 when\n // \"Enable native XMLHTTP support\" is disabled\n if (withCredentials) {\n options.xhrFields = {\n withCredentials: withCredentials\n };\n }\n\n // Only pass url to `ajax` options if not blank\n if (url) { options.url = url; }\n\n return rails.ajax(options);\n } else {\n return false;\n }\n },\n\n // Determines if the request is a cross domain request.\n isCrossDomain: function(url) {\n var originAnchor = document.createElement('a');\n originAnchor.href = location.href;\n var urlAnchor = document.createElement('a');\n\n try {\n urlAnchor.href = url;\n // This is a workaround to a IE bug.\n urlAnchor.href = urlAnchor.href;\n\n // If URL protocol is false or is a string containing a single colon\n // *and* host are false, assume it is not a cross-domain request\n // (should only be the case for IE7 and IE compatibility mode).\n // Otherwise, evaluate protocol and host of the URL against the origin\n // protocol and host.\n return !(((!urlAnchor.protocol || urlAnchor.protocol === ':') && !urlAnchor.host) ||\n (originAnchor.protocol + '//' + originAnchor.host ===\n urlAnchor.protocol + '//' + urlAnchor.host));\n } catch (e) {\n // If there is an error parsing the URL, assume it is crossDomain.\n return true;\n }\n },\n\n // Handles \"data-method\" on links such as:\n // Delete\n handleMethod: function(link) {\n var href = rails.href(link),\n method = link.data('method'),\n target = link.attr('target'),\n csrfToken = rails.csrfToken(),\n csrfParam = rails.csrfParam(),\n form = $('

'),\n metadataInput = '';\n\n if (csrfParam !== undefined && csrfToken !== undefined && !rails.isCrossDomain(href)) {\n metadataInput += '';\n }\n\n if (target) { form.attr('target', target); }\n\n form.hide().append(metadataInput).appendTo('body');\n form.submit();\n },\n\n // Helper function that returns form elements that match the specified CSS selector\n // If form is actually a \"form\" element this will return associated elements outside the from that have\n // the html form attribute set\n formElements: function(form, selector) {\n return form.is('form') ? $(form[0].elements).filter(selector) : form.find(selector);\n },\n\n /* Disables form elements:\n - Caches element value in 'ujs:enable-with' data store\n - Replaces element text with value of 'data-disable-with' attribute\n - Sets disabled property to true\n */\n disableFormElements: function(form) {\n rails.formElements(form, rails.disableSelector).each(function() {\n rails.disableFormElement($(this));\n });\n },\n\n disableFormElement: function(element) {\n var method, replacement;\n\n method = element.is('button') ? 'html' : 'val';\n replacement = element.data('disable-with');\n\n if (replacement !== undefined) {\n element.data('ujs:enable-with', element[method]());\n element[method](replacement);\n }\n\n element.prop('disabled', true);\n element.data('ujs:disabled', true);\n },\n\n /* Re-enables disabled form elements:\n - Replaces element text with cached value from 'ujs:enable-with' data store (created in `disableFormElements`)\n - Sets disabled property to false\n */\n enableFormElements: function(form) {\n rails.formElements(form, rails.enableSelector).each(function() {\n rails.enableFormElement($(this));\n });\n },\n\n enableFormElement: function(element) {\n var method = element.is('button') ? 'html' : 'val';\n if (element.data('ujs:enable-with') !== undefined) {\n element[method](element.data('ujs:enable-with'));\n element.removeData('ujs:enable-with'); // clean up cache\n }\n element.prop('disabled', false);\n element.removeData('ujs:disabled');\n },\n\n /* For 'data-confirm' attribute:\n - Fires `confirm` event\n - Shows the confirmation dialog\n - Fires the `confirm:complete` event\n\n Returns `true` if no function stops the chain and user chose yes; `false` otherwise.\n Attaching a handler to the element's `confirm` event that returns a `falsy` value cancels the confirmation dialog.\n Attaching a handler to the element's `confirm:complete` event that returns a `falsy` value makes this function\n return false. The `confirm:complete` event is fired whether or not the user answered true or false to the dialog.\n */\n allowAction: function(element) {\n var message = element.data('confirm'),\n answer = false, callback;\n if (!message) { return true; }\n\n if (rails.fire(element, 'confirm')) {\n try {\n answer = rails.confirm(message);\n } catch (e) {\n (console.error || console.log).call(console, e.stack || e);\n }\n callback = rails.fire(element, 'confirm:complete', [answer]);\n }\n return answer && callback;\n },\n\n // Helper function which checks for blank inputs in a form that match the specified CSS selector\n blankInputs: function(form, specifiedSelector, nonBlank) {\n var foundInputs = $(),\n input,\n valueToCheck,\n radiosForNameWithNoneSelected,\n radioName,\n selector = specifiedSelector || 'input,textarea',\n requiredInputs = form.find(selector),\n checkedRadioButtonNames = {};\n\n requiredInputs.each(function() {\n input = $(this);\n if (input.is('input[type=radio]')) {\n\n // Don't count unchecked required radio as blank if other radio with same name is checked,\n // regardless of whether same-name radio input has required attribute or not. The spec\n // states https://www.w3.org/TR/html5/forms.html#the-required-attribute\n radioName = input.attr('name');\n\n // Skip if we've already seen the radio with this name.\n if (!checkedRadioButtonNames[radioName]) {\n\n // If none checked\n if (form.find('input[type=radio]:checked[name=\"' + radioName + '\"]').length === 0) {\n radiosForNameWithNoneSelected = form.find(\n 'input[type=radio][name=\"' + radioName + '\"]');\n foundInputs = foundInputs.add(radiosForNameWithNoneSelected);\n }\n\n // We only need to check each name once.\n checkedRadioButtonNames[radioName] = radioName;\n }\n } else {\n valueToCheck = input.is('input[type=checkbox],input[type=radio]') ? input.is(':checked') : !!input.val();\n if (valueToCheck === nonBlank) {\n foundInputs = foundInputs.add(input);\n }\n }\n });\n return foundInputs.length ? foundInputs : false;\n },\n\n // Helper function which checks for non-blank inputs in a form that match the specified CSS selector\n nonBlankInputs: function(form, specifiedSelector) {\n return rails.blankInputs(form, specifiedSelector, true); // true specifies nonBlank\n },\n\n // Helper function, needed to provide consistent behavior in IE\n stopEverything: function(e) {\n $(e.target).trigger('ujs:everythingStopped');\n e.stopImmediatePropagation();\n return false;\n },\n\n // Replace element's html with the 'data-disable-with' after storing original html\n // and prevent clicking on it\n disableElement: function(element) {\n var replacement = element.data('disable-with');\n\n if (replacement !== undefined) {\n element.data('ujs:enable-with', element.html()); // store enabled state\n element.html(replacement);\n }\n\n element.on('click.railsDisable', function(e) { // prevent further clicking\n return rails.stopEverything(e);\n });\n element.data('ujs:disabled', true);\n },\n\n // Restore element to its original state which was disabled by 'disableElement' above\n enableElement: function(element) {\n if (element.data('ujs:enable-with') !== undefined) {\n element.html(element.data('ujs:enable-with')); // set to old enabled state\n element.removeData('ujs:enable-with'); // clean up cache\n }\n element.off('click.railsDisable'); // enable element\n element.removeData('ujs:disabled');\n }\n };\n\n if (rails.fire($document, 'rails:attachBindings')) {\n\n $.ajaxPrefilter(function(options, originalOptions, xhr){ if ( !options.crossDomain ) { rails.CSRFProtection(xhr); }});\n\n // This event works the same as the load event, except that it fires every\n // time the page is loaded.\n //\n // See https://github.com/rails/jquery-ujs/issues/357\n // See https://developer.mozilla.org/en-US/docs/Using_Firefox_1.5_caching\n $(window).on('pageshow.rails', function () {\n $($.rails.enableSelector).each(function () {\n var element = $(this);\n\n if (element.data('ujs:disabled')) {\n $.rails.enableFormElement(element);\n }\n });\n\n $($.rails.linkDisableSelector).each(function () {\n var element = $(this);\n\n if (element.data('ujs:disabled')) {\n $.rails.enableElement(element);\n }\n });\n });\n\n $document.on('ajax:complete', rails.linkDisableSelector, function() {\n rails.enableElement($(this));\n });\n\n $document.on('ajax:complete', rails.buttonDisableSelector, function() {\n rails.enableFormElement($(this));\n });\n\n $document.on('click.rails', rails.linkClickSelector, function(e) {\n var link = $(this), method = link.data('method'), data = link.data('params'), metaClick = e.metaKey || e.ctrlKey;\n if (!rails.allowAction(link)) return rails.stopEverything(e);\n\n if (!metaClick && link.is(rails.linkDisableSelector)) rails.disableElement(link);\n\n if (rails.isRemote(link)) {\n if (metaClick && (!method || method === 'GET') && !data) { return true; }\n\n var handleRemote = rails.handleRemote(link);\n // Response from rails.handleRemote() will either be false or a deferred object promise.\n if (handleRemote === false) {\n rails.enableElement(link);\n } else {\n handleRemote.fail( function() { rails.enableElement(link); } );\n }\n return false;\n\n } else if (method) {\n rails.handleMethod(link);\n return false;\n }\n });\n\n $document.on('click.rails', rails.buttonClickSelector, function(e) {\n var button = $(this);\n\n if (!rails.allowAction(button) || !rails.isRemote(button)) return rails.stopEverything(e);\n\n if (button.is(rails.buttonDisableSelector)) rails.disableFormElement(button);\n\n var handleRemote = rails.handleRemote(button);\n // Response from rails.handleRemote() will either be false or a deferred object promise.\n if (handleRemote === false) {\n rails.enableFormElement(button);\n } else {\n handleRemote.fail( function() { rails.enableFormElement(button); } );\n }\n return false;\n });\n\n $document.on('change.rails', rails.inputChangeSelector, function(e) {\n var link = $(this);\n if (!rails.allowAction(link) || !rails.isRemote(link)) return rails.stopEverything(e);\n\n rails.handleRemote(link);\n return false;\n });\n\n $document.on('submit.rails', rails.formSubmitSelector, function(e) {\n var form = $(this),\n remote = rails.isRemote(form),\n blankRequiredInputs,\n nonBlankFileInputs;\n\n if (!rails.allowAction(form)) return rails.stopEverything(e);\n\n // Skip other logic when required values are missing or file upload is present\n if (form.attr('novalidate') === undefined) {\n if (form.data('ujs:formnovalidate-button') === undefined) {\n blankRequiredInputs = rails.blankInputs(form, rails.requiredInputSelector, false);\n if (blankRequiredInputs && rails.fire(form, 'ajax:aborted:required', [blankRequiredInputs])) {\n return rails.stopEverything(e);\n }\n } else {\n // Clear the formnovalidate in case the next button click is not on a formnovalidate button\n // Not strictly necessary to do here, since it is also reset on each button click, but just to be certain\n form.data('ujs:formnovalidate-button', undefined);\n }\n }\n\n if (remote) {\n nonBlankFileInputs = rails.nonBlankInputs(form, rails.fileInputSelector);\n if (nonBlankFileInputs) {\n // Slight timeout so that the submit button gets properly serialized\n // (make it easy for event handler to serialize form without disabled values)\n setTimeout(function(){ rails.disableFormElements(form); }, 13);\n var aborted = rails.fire(form, 'ajax:aborted:file', [nonBlankFileInputs]);\n\n // Re-enable form elements if event bindings return false (canceling normal form submission)\n if (!aborted) { setTimeout(function(){ rails.enableFormElements(form); }, 13); }\n\n return aborted;\n }\n\n rails.handleRemote(form);\n return false;\n\n } else {\n // Slight timeout so that the submit button gets properly serialized\n setTimeout(function(){ rails.disableFormElements(form); }, 13);\n }\n });\n\n $document.on('click.rails', rails.formInputClickSelector, function(event) {\n var button = $(this);\n\n if (!rails.allowAction(button)) return rails.stopEverything(event);\n\n // Register the pressed submit button\n var name = button.attr('name'),\n data = name ? {name:name, value:button.val()} : null;\n\n var form = button.closest('form');\n if (form.length === 0) {\n form = $('#' + button.attr('form'));\n }\n form.data('ujs:submit-button', data);\n\n // Save attributes from button\n form.data('ujs:formnovalidate-button', button.attr('formnovalidate'));\n form.data('ujs:submit-button-formaction', button.attr('formaction'));\n form.data('ujs:submit-button-formmethod', button.attr('formmethod'));\n });\n\n $document.on('ajax:send.rails', rails.formSubmitSelector, function(event) {\n if (this === event.target) rails.disableFormElements($(this));\n });\n\n $document.on('ajax:complete.rails', rails.formSubmitSelector, function(event) {\n if (this === event.target) rails.enableFormElements($(this));\n });\n\n $(function(){\n rails.refreshCSRFTokens();\n });\n }\n\n };\n\n if (window.jQuery) {\n jqueryUjsInit(jQuery);\n } else if (typeof exports === 'object' && typeof module === 'object') {\n module.exports = jqueryUjsInit;\n }\n})();\n","var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n// Generated by CoffeeScript 2.1.0\n(function () {\n /*\n jQuery Growl\n Copyright 2015 Kevin Sylvestre\n 1.3.5\n */\n \"use strict\";\n\n var $, Animation, Growl;\n\n $ = jQuery;\n\n Animation = function () {\n var Animation = function () {\n function Animation() {\n _classCallCheck(this, Animation);\n }\n\n _createClass(Animation, null, [{\n key: \"transition\",\n value: function transition($el) {\n var el, ref, result, type;\n el = $el[0];\n ref = this.transitions;\n for (type in ref) {\n result = ref[type];\n if (el.style[type] != null) {\n return result;\n }\n }\n }\n }]);\n\n return Animation;\n }();\n\n ;\n\n Animation.transitions = {\n \"webkitTransition\": \"webkitTransitionEnd\",\n \"mozTransition\": \"mozTransitionEnd\",\n \"oTransition\": \"oTransitionEnd\",\n \"transition\": \"transitionend\"\n };\n\n return Animation;\n }();\n\n Growl = function () {\n var Growl = function () {\n _createClass(Growl, null, [{\n key: \"growl\",\n value: function growl() {\n var settings = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n return new Growl(settings);\n }\n }]);\n\n function Growl() {\n var settings = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n _classCallCheck(this, Growl);\n\n this.render = this.render.bind(this);\n this.bind = this.bind.bind(this);\n this.unbind = this.unbind.bind(this);\n this.mouseEnter = this.mouseEnter.bind(this);\n this.mouseLeave = this.mouseLeave.bind(this);\n this.click = this.click.bind(this);\n this.close = this.close.bind(this);\n this.cycle = this.cycle.bind(this);\n this.waitAndDismiss = this.waitAndDismiss.bind(this);\n this.present = this.present.bind(this);\n this.dismiss = this.dismiss.bind(this);\n this.remove = this.remove.bind(this);\n this.animate = this.animate.bind(this);\n this.$growls = this.$growls.bind(this);\n this.$growl = this.$growl.bind(this);\n this.html = this.html.bind(this);\n this.content = this.content.bind(this);\n this.container = this.container.bind(this);\n this.settings = $.extend({}, Growl.settings, settings);\n this.initialize(this.settings.location);\n this.render();\n }\n\n _createClass(Growl, [{\n key: \"initialize\",\n value: function initialize(location) {\n var id;\n id = 'growls-' + location;\n return $('body:not(:has(#' + id + '))').append('
');\n }\n }, {\n key: \"render\",\n value: function render() {\n var $growl;\n $growl = this.$growl();\n this.$growls(this.settings.location).append($growl);\n if (this.settings.fixed) {\n this.present();\n } else {\n this.cycle();\n }\n }\n }, {\n key: \"bind\",\n value: function bind() {\n var $growl = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.$growl();\n\n $growl.on(\"click\", this.click);\n if (this.settings.delayOnHover) {\n $growl.on(\"mouseenter\", this.mouseEnter);\n $growl.on(\"mouseleave\", this.mouseLeave);\n }\n return $growl.on(\"contextmenu\", this.close).find(\".\" + this.settings.namespace + \"-close\").on(\"click\", this.close);\n }\n }, {\n key: \"unbind\",\n value: function unbind() {\n var $growl = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.$growl();\n\n $growl.off(\"click\", this.click);\n if (this.settings.delayOnHover) {\n $growl.off(\"mouseenter\", this.mouseEnter);\n $growl.off(\"mouseleave\", this.mouseLeave);\n }\n return $growl.off(\"contextmenu\", this.close).find(\".\" + this.settings.namespace + \"-close\").off(\"click\", this.close);\n }\n }, {\n key: \"mouseEnter\",\n value: function mouseEnter(event) {\n var $growl;\n $growl = this.$growl();\n return $growl.stop(true, true);\n }\n }, {\n key: \"mouseLeave\",\n value: function mouseLeave(event) {\n return this.waitAndDismiss();\n }\n }, {\n key: \"click\",\n value: function click(event) {\n if (this.settings.url != null) {\n event.preventDefault();\n event.stopPropagation();\n return window.open(this.settings.url);\n }\n }\n }, {\n key: \"close\",\n value: function close(event) {\n var $growl;\n event.preventDefault();\n event.stopPropagation();\n $growl = this.$growl();\n return $growl.stop().queue(this.dismiss).queue(this.remove);\n }\n }, {\n key: \"cycle\",\n value: function cycle() {\n var $growl;\n $growl = this.$growl();\n return $growl.queue(this.present).queue(this.waitAndDismiss());\n }\n }, {\n key: \"waitAndDismiss\",\n value: function waitAndDismiss() {\n var $growl;\n $growl = this.$growl();\n return $growl.delay(this.settings.duration).queue(this.dismiss).queue(this.remove);\n }\n }, {\n key: \"present\",\n value: function present(callback) {\n var $growl;\n $growl = this.$growl();\n this.bind($growl);\n return this.animate($growl, this.settings.namespace + \"-incoming\", 'out', callback);\n }\n }, {\n key: \"dismiss\",\n value: function dismiss(callback) {\n var $growl;\n $growl = this.$growl();\n this.unbind($growl);\n return this.animate($growl, this.settings.namespace + \"-outgoing\", 'in', callback);\n }\n }, {\n key: \"remove\",\n value: function remove(callback) {\n this.$growl().remove();\n return typeof callback === \"function\" ? callback() : void 0;\n }\n }, {\n key: \"animate\",\n value: function animate($element, name) {\n var direction = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'in';\n var callback = arguments[3];\n\n var transition;\n transition = Animation.transition($element);\n $element[direction === 'in' ? 'removeClass' : 'addClass'](name);\n $element.offset().position;\n $element[direction === 'in' ? 'addClass' : 'removeClass'](name);\n if (callback == null) {\n return;\n }\n if (transition != null) {\n $element.one(transition, callback);\n } else {\n callback();\n }\n }\n }, {\n key: \"$growls\",\n value: function $growls(location) {\n var base;\n if (this.$_growls == null) {\n this.$_growls = [];\n }\n return (base = this.$_growls)[location] != null ? base[location] : base[location] = $('#growls-' + location);\n }\n }, {\n key: \"$growl\",\n value: function $growl() {\n return this.$_growl != null ? this.$_growl : this.$_growl = $(this.html());\n }\n }, {\n key: \"html\",\n value: function html() {\n return this.container(this.content());\n }\n }, {\n key: \"content\",\n value: function content() {\n return \"
\" + this.settings.close + \"
\\n
\" + this.settings.title + \"
\\n
\" + this.settings.message + \"
\";\n }\n }, {\n key: \"container\",\n value: function container(content) {\n return \"
\\n \" + content + \"\\n
\";\n }\n }]);\n\n return Growl;\n }();\n\n ;\n\n Growl.settings = {\n namespace: 'growl',\n duration: 3200,\n close: \"×\",\n location: \"default\",\n style: \"default\",\n size: \"medium\",\n delayOnHover: true\n };\n\n return Growl;\n }();\n\n this.Growl = Growl;\n\n $.growl = function () {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n return Growl.growl(options);\n };\n\n $.growl.error = function () {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n var settings;\n settings = {\n title: \"Error!\",\n style: \"error\"\n };\n return $.growl($.extend(settings, options));\n };\n\n $.growl.notice = function () {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n var settings;\n settings = {\n title: \"Notice!\",\n style: \"notice\"\n };\n return $.growl($.extend(settings, options));\n };\n\n $.growl.warning = function () {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n var settings;\n settings = {\n title: \"Warning!\",\n style: \"warning\"\n };\n return $.growl($.extend(settings, options));\n };\n}).call(this);","var moment = module.exports = require(\"./moment-timezone\");\nmoment.tz.load(require('./data/packed/latest.json'));\n","//! moment-timezone.js\n//! version : 0.5.44\n//! Copyright (c) JS Foundation and other contributors\n//! license : MIT\n//! github.com/moment/moment-timezone\n\n(function (root, factory) {\n\t\"use strict\";\n\n\t/*global define*/\n\tif (typeof module === 'object' && module.exports) {\n\t\tmodule.exports = factory(require('moment')); // Node\n\t} else if (typeof define === 'function' && define.amd) {\n\t\tdefine(['moment'], factory); // AMD\n\t} else {\n\t\tfactory(root.moment); // Browser\n\t}\n}(this, function (moment) {\n\t\"use strict\";\n\n\t// Resolves es6 module loading issue\n\tif (moment.version === undefined && moment.default) {\n\t\tmoment = moment.default;\n\t}\n\n\t// Do not load moment-timezone a second time.\n\t// if (moment.tz !== undefined) {\n\t// \tlogError('Moment Timezone ' + moment.tz.version + ' was already loaded ' + (moment.tz.dataVersion ? 'with data from ' : 'without any data') + moment.tz.dataVersion);\n\t// \treturn moment;\n\t// }\n\n\tvar VERSION = \"0.5.44\",\n\t\tzones = {},\n\t\tlinks = {},\n\t\tcountries = {},\n\t\tnames = {},\n\t\tguesses = {},\n\t\tcachedGuess;\n\n\tif (!moment || typeof moment.version !== 'string') {\n\t\tlogError('Moment Timezone requires Moment.js. See https://momentjs.com/timezone/docs/#/use-it/browser/');\n\t}\n\n\tvar momentVersion = moment.version.split('.'),\n\t\tmajor = +momentVersion[0],\n\t\tminor = +momentVersion[1];\n\n\t// Moment.js version check\n\tif (major < 2 || (major === 2 && minor < 6)) {\n\t\tlogError('Moment Timezone requires Moment.js >= 2.6.0. You are using Moment.js ' + moment.version + '. See momentjs.com');\n\t}\n\n\t/************************************\n\t\tUnpacking\n\t************************************/\n\n\tfunction charCodeToInt(charCode) {\n\t\tif (charCode > 96) {\n\t\t\treturn charCode - 87;\n\t\t} else if (charCode > 64) {\n\t\t\treturn charCode - 29;\n\t\t}\n\t\treturn charCode - 48;\n\t}\n\n\tfunction unpackBase60(string) {\n\t\tvar i = 0,\n\t\t\tparts = string.split('.'),\n\t\t\twhole = parts[0],\n\t\t\tfractional = parts[1] || '',\n\t\t\tmultiplier = 1,\n\t\t\tnum,\n\t\t\tout = 0,\n\t\t\tsign = 1;\n\n\t\t// handle negative numbers\n\t\tif (string.charCodeAt(0) === 45) {\n\t\t\ti = 1;\n\t\t\tsign = -1;\n\t\t}\n\n\t\t// handle digits before the decimal\n\t\tfor (i; i < whole.length; i++) {\n\t\t\tnum = charCodeToInt(whole.charCodeAt(i));\n\t\t\tout = 60 * out + num;\n\t\t}\n\n\t\t// handle digits after the decimal\n\t\tfor (i = 0; i < fractional.length; i++) {\n\t\t\tmultiplier = multiplier / 60;\n\t\t\tnum = charCodeToInt(fractional.charCodeAt(i));\n\t\t\tout += num * multiplier;\n\t\t}\n\n\t\treturn out * sign;\n\t}\n\n\tfunction arrayToInt (array) {\n\t\tfor (var i = 0; i < array.length; i++) {\n\t\t\tarray[i] = unpackBase60(array[i]);\n\t\t}\n\t}\n\n\tfunction intToUntil (array, length) {\n\t\tfor (var i = 0; i < length; i++) {\n\t\t\tarray[i] = Math.round((array[i - 1] || 0) + (array[i] * 60000)); // minutes to milliseconds\n\t\t}\n\n\t\tarray[length - 1] = Infinity;\n\t}\n\n\tfunction mapIndices (source, indices) {\n\t\tvar out = [], i;\n\n\t\tfor (i = 0; i < indices.length; i++) {\n\t\t\tout[i] = source[indices[i]];\n\t\t}\n\n\t\treturn out;\n\t}\n\n\tfunction unpack (string) {\n\t\tvar data = string.split('|'),\n\t\t\toffsets = data[2].split(' '),\n\t\t\tindices = data[3].split(''),\n\t\t\tuntils = data[4].split(' ');\n\n\t\tarrayToInt(offsets);\n\t\tarrayToInt(indices);\n\t\tarrayToInt(untils);\n\n\t\tintToUntil(untils, indices.length);\n\n\t\treturn {\n\t\t\tname : data[0],\n\t\t\tabbrs : mapIndices(data[1].split(' '), indices),\n\t\t\toffsets : mapIndices(offsets, indices),\n\t\t\tuntils : untils,\n\t\t\tpopulation : data[5] | 0\n\t\t};\n\t}\n\n\t/************************************\n\t\tZone object\n\t************************************/\n\n\tfunction Zone (packedString) {\n\t\tif (packedString) {\n\t\t\tthis._set(unpack(packedString));\n\t\t}\n\t}\n\n\tfunction closest (num, arr) {\n\t\tvar len = arr.length;\n\t\tif (num < arr[0]) {\n\t\t\treturn 0;\n\t\t} else if (len > 1 && arr[len - 1] === Infinity && num >= arr[len - 2]) {\n\t\t\treturn len - 1;\n\t\t} else if (num >= arr[len - 1]) {\n\t\t\treturn -1;\n\t\t}\n\t\n\t\tvar mid;\n\t\tvar lo = 0;\n\t\tvar hi = len - 1; \n\t\twhile (hi - lo > 1) {\n\t\t\tmid = Math.floor((lo + hi) / 2);\n\t\t\tif (arr[mid] <= num) {\n\t\t\t\tlo = mid;\n\t\t\t} else {\n\t\t\t\thi = mid;\n\t\t\t}\n\t\t}\n\t\treturn hi;\n\t}\n\t\n\tZone.prototype = {\n\t\t_set : function (unpacked) {\n\t\t\tthis.name = unpacked.name;\n\t\t\tthis.abbrs = unpacked.abbrs;\n\t\t\tthis.untils = unpacked.untils;\n\t\t\tthis.offsets = unpacked.offsets;\n\t\t\tthis.population = unpacked.population;\n\t\t},\n\n\t\t_index : function (timestamp) {\n\t\t\tvar target = +timestamp,\n\t\t\t\tuntils = this.untils,\n\t\t\t\ti;\n\n\t\t\ti = closest(target, untils);\n\t\t\tif (i >= 0) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t},\n\n\t\tcountries : function () {\n\t\t\tvar zone_name = this.name;\n\t\t\treturn Object.keys(countries).filter(function (country_code) {\n\t\t\t\treturn countries[country_code].zones.indexOf(zone_name) !== -1;\n\t\t\t});\n\t\t},\n\n\t\tparse : function (timestamp) {\n\t\t\tvar target = +timestamp,\n\t\t\t\toffsets = this.offsets,\n\t\t\t\tuntils = this.untils,\n\t\t\t\tmax = untils.length - 1,\n\t\t\t\toffset, offsetNext, offsetPrev, i;\n\n\t\t\tfor (i = 0; i < max; i++) {\n\t\t\t\toffset = offsets[i];\n\t\t\t\toffsetNext = offsets[i + 1];\n\t\t\t\toffsetPrev = offsets[i ? i - 1 : i];\n\n\t\t\t\tif (offset < offsetNext && tz.moveAmbiguousForward) {\n\t\t\t\t\toffset = offsetNext;\n\t\t\t\t} else if (offset > offsetPrev && tz.moveInvalidForward) {\n\t\t\t\t\toffset = offsetPrev;\n\t\t\t\t}\n\n\t\t\t\tif (target < untils[i] - (offset * 60000)) {\n\t\t\t\t\treturn offsets[i];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn offsets[max];\n\t\t},\n\n\t\tabbr : function (mom) {\n\t\t\treturn this.abbrs[this._index(mom)];\n\t\t},\n\n\t\toffset : function (mom) {\n\t\t\tlogError(\"zone.offset has been deprecated in favor of zone.utcOffset\");\n\t\t\treturn this.offsets[this._index(mom)];\n\t\t},\n\n\t\tutcOffset : function (mom) {\n\t\t\treturn this.offsets[this._index(mom)];\n\t\t}\n\t};\n\n\t/************************************\n\t\tCountry object\n\t************************************/\n\n\tfunction Country (country_name, zone_names) {\n\t\tthis.name = country_name;\n\t\tthis.zones = zone_names;\n\t}\n\n\t/************************************\n\t\tCurrent Timezone\n\t************************************/\n\n\tfunction OffsetAt(at) {\n\t\tvar timeString = at.toTimeString();\n\t\tvar abbr = timeString.match(/\\([a-z ]+\\)/i);\n\t\tif (abbr && abbr[0]) {\n\t\t\t// 17:56:31 GMT-0600 (CST)\n\t\t\t// 17:56:31 GMT-0600 (Central Standard Time)\n\t\t\tabbr = abbr[0].match(/[A-Z]/g);\n\t\t\tabbr = abbr ? abbr.join('') : undefined;\n\t\t} else {\n\t\t\t// 17:56:31 CST\n\t\t\t// 17:56:31 GMT+0800 (台北標準時間)\n\t\t\tabbr = timeString.match(/[A-Z]{3,5}/g);\n\t\t\tabbr = abbr ? abbr[0] : undefined;\n\t\t}\n\n\t\tif (abbr === 'GMT') {\n\t\t\tabbr = undefined;\n\t\t}\n\n\t\tthis.at = +at;\n\t\tthis.abbr = abbr;\n\t\tthis.offset = at.getTimezoneOffset();\n\t}\n\n\tfunction ZoneScore(zone) {\n\t\tthis.zone = zone;\n\t\tthis.offsetScore = 0;\n\t\tthis.abbrScore = 0;\n\t}\n\n\tZoneScore.prototype.scoreOffsetAt = function (offsetAt) {\n\t\tthis.offsetScore += Math.abs(this.zone.utcOffset(offsetAt.at) - offsetAt.offset);\n\t\tif (this.zone.abbr(offsetAt.at).replace(/[^A-Z]/g, '') !== offsetAt.abbr) {\n\t\t\tthis.abbrScore++;\n\t\t}\n\t};\n\n\tfunction findChange(low, high) {\n\t\tvar mid, diff;\n\n\t\twhile ((diff = ((high.at - low.at) / 12e4 | 0) * 6e4)) {\n\t\t\tmid = new OffsetAt(new Date(low.at + diff));\n\t\t\tif (mid.offset === low.offset) {\n\t\t\t\tlow = mid;\n\t\t\t} else {\n\t\t\t\thigh = mid;\n\t\t\t}\n\t\t}\n\n\t\treturn low;\n\t}\n\n\tfunction userOffsets() {\n\t\tvar startYear = new Date().getFullYear() - 2,\n\t\t\tlast = new OffsetAt(new Date(startYear, 0, 1)),\n\t\t\tlastOffset = last.offset,\n\t\t\toffsets = [last],\n\t\t\tchange, next, nextOffset, i;\n\n\t\tfor (i = 1; i < 48; i++) {\n\t\t\tnextOffset = new Date(startYear, i, 1).getTimezoneOffset();\n\t\t\tif (nextOffset !== lastOffset) {\n\t\t\t\t// Create OffsetAt here to avoid unnecessary abbr parsing before checking offsets\n\t\t\t\tnext = new OffsetAt(new Date(startYear, i, 1));\n\t\t\t\tchange = findChange(last, next);\n\t\t\t\toffsets.push(change);\n\t\t\t\toffsets.push(new OffsetAt(new Date(change.at + 6e4)));\n\t\t\t\tlast = next;\n\t\t\t\tlastOffset = nextOffset;\n\t\t\t}\n\t\t}\n\n\t\tfor (i = 0; i < 4; i++) {\n\t\t\toffsets.push(new OffsetAt(new Date(startYear + i, 0, 1)));\n\t\t\toffsets.push(new OffsetAt(new Date(startYear + i, 6, 1)));\n\t\t}\n\n\t\treturn offsets;\n\t}\n\n\tfunction sortZoneScores (a, b) {\n\t\tif (a.offsetScore !== b.offsetScore) {\n\t\t\treturn a.offsetScore - b.offsetScore;\n\t\t}\n\t\tif (a.abbrScore !== b.abbrScore) {\n\t\t\treturn a.abbrScore - b.abbrScore;\n\t\t}\n\t\tif (a.zone.population !== b.zone.population) {\n\t\t\treturn b.zone.population - a.zone.population;\n\t\t}\n\t\treturn b.zone.name.localeCompare(a.zone.name);\n\t}\n\n\tfunction addToGuesses (name, offsets) {\n\t\tvar i, offset;\n\t\tarrayToInt(offsets);\n\t\tfor (i = 0; i < offsets.length; i++) {\n\t\t\toffset = offsets[i];\n\t\t\tguesses[offset] = guesses[offset] || {};\n\t\t\tguesses[offset][name] = true;\n\t\t}\n\t}\n\n\tfunction guessesForUserOffsets (offsets) {\n\t\tvar offsetsLength = offsets.length,\n\t\t\tfilteredGuesses = {},\n\t\t\tout = [],\n\t\t\tcheckedOffsets = {},\n\t\t\ti, j, offset, guessesOffset;\n\n\t\tfor (i = 0; i < offsetsLength; i++) {\n\t\t\toffset = offsets[i].offset;\n\t\t\tif (checkedOffsets.hasOwnProperty(offset)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tguessesOffset = guesses[offset] || {};\n\t\t\tfor (j in guessesOffset) {\n\t\t\t\tif (guessesOffset.hasOwnProperty(j)) {\n\t\t\t\t\tfilteredGuesses[j] = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\tcheckedOffsets[offset] = true;\n\t\t}\n\n\t\tfor (i in filteredGuesses) {\n\t\t\tif (filteredGuesses.hasOwnProperty(i)) {\n\t\t\t\tout.push(names[i]);\n\t\t\t}\n\t\t}\n\n\t\treturn out;\n\t}\n\n\tfunction rebuildGuess () {\n\n\t\t// use Intl API when available and returning valid time zone\n\t\ttry {\n\t\t\tvar intlName = Intl.DateTimeFormat().resolvedOptions().timeZone;\n\t\t\tif (intlName && intlName.length > 3) {\n\t\t\t\tvar name = names[normalizeName(intlName)];\n\t\t\t\tif (name) {\n\t\t\t\t\treturn name;\n\t\t\t\t}\n\t\t\t\tlogError(\"Moment Timezone found \" + intlName + \" from the Intl api, but did not have that data loaded.\");\n\t\t\t}\n\t\t} catch (e) {\n\t\t\t// Intl unavailable, fall back to manual guessing.\n\t\t}\n\n\t\tvar offsets = userOffsets(),\n\t\t\toffsetsLength = offsets.length,\n\t\t\tguesses = guessesForUserOffsets(offsets),\n\t\t\tzoneScores = [],\n\t\t\tzoneScore, i, j;\n\n\t\tfor (i = 0; i < guesses.length; i++) {\n\t\t\tzoneScore = new ZoneScore(getZone(guesses[i]), offsetsLength);\n\t\t\tfor (j = 0; j < offsetsLength; j++) {\n\t\t\t\tzoneScore.scoreOffsetAt(offsets[j]);\n\t\t\t}\n\t\t\tzoneScores.push(zoneScore);\n\t\t}\n\n\t\tzoneScores.sort(sortZoneScores);\n\n\t\treturn zoneScores.length > 0 ? zoneScores[0].zone.name : undefined;\n\t}\n\n\tfunction guess (ignoreCache) {\n\t\tif (!cachedGuess || ignoreCache) {\n\t\t\tcachedGuess = rebuildGuess();\n\t\t}\n\t\treturn cachedGuess;\n\t}\n\n\t/************************************\n\t\tGlobal Methods\n\t************************************/\n\n\tfunction normalizeName (name) {\n\t\treturn (name || '').toLowerCase().replace(/\\//g, '_');\n\t}\n\n\tfunction addZone (packed) {\n\t\tvar i, name, split, normalized;\n\n\t\tif (typeof packed === \"string\") {\n\t\t\tpacked = [packed];\n\t\t}\n\n\t\tfor (i = 0; i < packed.length; i++) {\n\t\t\tsplit = packed[i].split('|');\n\t\t\tname = split[0];\n\t\t\tnormalized = normalizeName(name);\n\t\t\tzones[normalized] = packed[i];\n\t\t\tnames[normalized] = name;\n\t\t\taddToGuesses(normalized, split[2].split(' '));\n\t\t}\n\t}\n\n\tfunction getZone (name, caller) {\n\n\t\tname = normalizeName(name);\n\n\t\tvar zone = zones[name];\n\t\tvar link;\n\n\t\tif (zone instanceof Zone) {\n\t\t\treturn zone;\n\t\t}\n\n\t\tif (typeof zone === 'string') {\n\t\t\tzone = new Zone(zone);\n\t\t\tzones[name] = zone;\n\t\t\treturn zone;\n\t\t}\n\n\t\t// Pass getZone to prevent recursion more than 1 level deep\n\t\tif (links[name] && caller !== getZone && (link = getZone(links[name], getZone))) {\n\t\t\tzone = zones[name] = new Zone();\n\t\t\tzone._set(link);\n\t\t\tzone.name = names[name];\n\t\t\treturn zone;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tfunction getNames () {\n\t\tvar i, out = [];\n\n\t\tfor (i in names) {\n\t\t\tif (names.hasOwnProperty(i) && (zones[i] || zones[links[i]]) && names[i]) {\n\t\t\t\tout.push(names[i]);\n\t\t\t}\n\t\t}\n\n\t\treturn out.sort();\n\t}\n\n\tfunction getCountryNames () {\n\t\treturn Object.keys(countries);\n\t}\n\n\tfunction addLink (aliases) {\n\t\tvar i, alias, normal0, normal1;\n\n\t\tif (typeof aliases === \"string\") {\n\t\t\taliases = [aliases];\n\t\t}\n\n\t\tfor (i = 0; i < aliases.length; i++) {\n\t\t\talias = aliases[i].split('|');\n\n\t\t\tnormal0 = normalizeName(alias[0]);\n\t\t\tnormal1 = normalizeName(alias[1]);\n\n\t\t\tlinks[normal0] = normal1;\n\t\t\tnames[normal0] = alias[0];\n\n\t\t\tlinks[normal1] = normal0;\n\t\t\tnames[normal1] = alias[1];\n\t\t}\n\t}\n\n\tfunction addCountries (data) {\n\t\tvar i, country_code, country_zones, split;\n\t\tif (!data || !data.length) return;\n\t\tfor (i = 0; i < data.length; i++) {\n\t\t\tsplit = data[i].split('|');\n\t\t\tcountry_code = split[0].toUpperCase();\n\t\t\tcountry_zones = split[1].split(' ');\n\t\t\tcountries[country_code] = new Country(\n\t\t\t\tcountry_code,\n\t\t\t\tcountry_zones\n\t\t\t);\n\t\t}\n\t}\n\n\tfunction getCountry (name) {\n\t\tname = name.toUpperCase();\n\t\treturn countries[name] || null;\n\t}\n\n\tfunction zonesForCountry(country, with_offset) {\n\t\tcountry = getCountry(country);\n\n\t\tif (!country) return null;\n\n\t\tvar zones = country.zones.sort();\n\n\t\tif (with_offset) {\n\t\t\treturn zones.map(function (zone_name) {\n\t\t\t\tvar zone = getZone(zone_name);\n\t\t\t\treturn {\n\t\t\t\t\tname: zone_name,\n\t\t\t\t\toffset: zone.utcOffset(new Date())\n\t\t\t\t};\n\t\t\t});\n\t\t}\n\n\t\treturn zones;\n\t}\n\n\tfunction loadData (data) {\n\t\taddZone(data.zones);\n\t\taddLink(data.links);\n\t\taddCountries(data.countries);\n\t\ttz.dataVersion = data.version;\n\t}\n\n\tfunction zoneExists (name) {\n\t\tif (!zoneExists.didShowError) {\n\t\t\tzoneExists.didShowError = true;\n\t\t\t\tlogError(\"moment.tz.zoneExists('\" + name + \"') has been deprecated in favor of !moment.tz.zone('\" + name + \"')\");\n\t\t}\n\t\treturn !!getZone(name);\n\t}\n\n\tfunction needsOffset (m) {\n\t\tvar isUnixTimestamp = (m._f === 'X' || m._f === 'x');\n\t\treturn !!(m._a && (m._tzm === undefined) && !isUnixTimestamp);\n\t}\n\n\tfunction logError (message) {\n\t\tif (typeof console !== 'undefined' && typeof console.error === 'function') {\n\t\t\tconsole.error(message);\n\t\t}\n\t}\n\n\t/************************************\n\t\tmoment.tz namespace\n\t************************************/\n\n\tfunction tz (input) {\n\t\tvar args = Array.prototype.slice.call(arguments, 0, -1),\n\t\t\tname = arguments[arguments.length - 1],\n\t\t\tout = moment.utc.apply(null, args),\n\t\t\tzone;\n\n\t\tif (!moment.isMoment(input) && needsOffset(out) && (zone = getZone(name))) {\n\t\t\tout.add(zone.parse(out), 'minutes');\n\t\t}\n\n\t\tout.tz(name);\n\n\t\treturn out;\n\t}\n\n\ttz.version = VERSION;\n\ttz.dataVersion = '';\n\ttz._zones = zones;\n\ttz._links = links;\n\ttz._names = names;\n\ttz._countries\t= countries;\n\ttz.add = addZone;\n\ttz.link = addLink;\n\ttz.load = loadData;\n\ttz.zone = getZone;\n\ttz.zoneExists = zoneExists; // deprecated in 0.1.0\n\ttz.guess = guess;\n\ttz.names = getNames;\n\ttz.Zone = Zone;\n\ttz.unpack = unpack;\n\ttz.unpackBase60 = unpackBase60;\n\ttz.needsOffset = needsOffset;\n\ttz.moveInvalidForward = true;\n\ttz.moveAmbiguousForward = false;\n\ttz.countries = getCountryNames;\n\ttz.zonesForCountry = zonesForCountry;\n\n\t/************************************\n\t\tInterface with Moment.js\n\t************************************/\n\n\tvar fn = moment.fn;\n\n\tmoment.tz = tz;\n\n\tmoment.defaultZone = null;\n\n\tmoment.updateOffset = function (mom, keepTime) {\n\t\tvar zone = moment.defaultZone,\n\t\t\toffset;\n\n\t\tif (mom._z === undefined) {\n\t\t\tif (zone && needsOffset(mom) && !mom._isUTC && mom.isValid()) {\n\t\t\t\tmom._d = moment.utc(mom._a)._d;\n\t\t\t\tmom.utc().add(zone.parse(mom), 'minutes');\n\t\t\t}\n\t\t\tmom._z = zone;\n\t\t}\n\t\tif (mom._z) {\n\t\t\toffset = mom._z.utcOffset(mom);\n\t\t\tif (Math.abs(offset) < 16) {\n\t\t\t\toffset = offset / 60;\n\t\t\t}\n\t\t\tif (mom.utcOffset !== undefined) {\n\t\t\t\tvar z = mom._z;\n\t\t\t\tmom.utcOffset(-offset, keepTime);\n\t\t\t\tmom._z = z;\n\t\t\t} else {\n\t\t\t\tmom.zone(offset, keepTime);\n\t\t\t}\n\t\t}\n\t};\n\n\tfn.tz = function (name, keepTime) {\n\t\tif (name) {\n\t\t\tif (typeof name !== 'string') {\n\t\t\t\tthrow new Error('Time zone name must be a string, got ' + name + ' [' + typeof name + ']');\n\t\t\t}\n\t\t\tthis._z = getZone(name);\n\t\t\tif (this._z) {\n\t\t\t\tmoment.updateOffset(this, keepTime);\n\t\t\t} else {\n\t\t\t\tlogError(\"Moment Timezone has no data for \" + name + \". See http://momentjs.com/timezone/docs/#/data-loading/.\");\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif (this._z) { return this._z.name; }\n\t};\n\n\tfunction abbrWrap (old) {\n\t\treturn function () {\n\t\t\tif (this._z) { return this._z.abbr(this); }\n\t\t\treturn old.call(this);\n\t\t};\n\t}\n\n\tfunction resetZoneWrap (old) {\n\t\treturn function () {\n\t\t\tthis._z = null;\n\t\t\treturn old.apply(this, arguments);\n\t\t};\n\t}\n\n\tfunction resetZoneWrap2 (old) {\n\t\treturn function () {\n\t\t\tif (arguments.length > 0) this._z = null;\n\t\t\treturn old.apply(this, arguments);\n\t\t};\n\t}\n\n\tfn.zoneName = abbrWrap(fn.zoneName);\n\tfn.zoneAbbr = abbrWrap(fn.zoneAbbr);\n\tfn.utc = resetZoneWrap(fn.utc);\n\tfn.local = resetZoneWrap(fn.local);\n\tfn.utcOffset = resetZoneWrap2(fn.utcOffset);\n\n\tmoment.tz.setDefault = function(name) {\n\t\tif (major < 2 || (major === 2 && minor < 9)) {\n\t\t\tlogError('Moment Timezone setDefault() requires Moment.js >= 2.9.0. You are using Moment.js ' + moment.version + '.');\n\t\t}\n\t\tmoment.defaultZone = name ? getZone(name) : null;\n\t\treturn moment;\n\t};\n\n\t// Cloning a moment should include the _z property.\n\tvar momentProperties = moment.momentProperties;\n\tif (Object.prototype.toString.call(momentProperties) === '[object Array]') {\n\t\t// moment 2.8.1+\n\t\tmomentProperties.push('_z');\n\t\tmomentProperties.push('_a');\n\t} else if (momentProperties) {\n\t\t// moment 2.7.0\n\t\tmomentProperties._z = null;\n\t}\n\n\t// INJECT DATA\n\n\treturn moment;\n}));\n","/* NProgress, (c) 2013, 2014 Rico Sta. Cruz - http://ricostacruz.com/nprogress\n * @license MIT */\n\n;(function(root, factory) {\n\n if (typeof define === 'function' && define.amd) {\n define(factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.NProgress = factory();\n }\n\n})(this, function() {\n var NProgress = {};\n\n NProgress.version = '0.2.0';\n\n var Settings = NProgress.settings = {\n minimum: 0.08,\n easing: 'ease',\n positionUsing: '',\n speed: 200,\n trickle: true,\n trickleRate: 0.02,\n trickleSpeed: 800,\n showSpinner: true,\n barSelector: '[role=\"bar\"]',\n spinnerSelector: '[role=\"spinner\"]',\n parent: 'body',\n template: '
'\n };\n\n /**\n * Updates configuration.\n *\n * NProgress.configure({\n * minimum: 0.1\n * });\n */\n NProgress.configure = function(options) {\n var key, value;\n for (key in options) {\n value = options[key];\n if (value !== undefined && options.hasOwnProperty(key)) Settings[key] = value;\n }\n\n return this;\n };\n\n /**\n * Last number.\n */\n\n NProgress.status = null;\n\n /**\n * Sets the progress bar status, where `n` is a number from `0.0` to `1.0`.\n *\n * NProgress.set(0.4);\n * NProgress.set(1.0);\n */\n\n NProgress.set = function(n) {\n var started = NProgress.isStarted();\n\n n = clamp(n, Settings.minimum, 1);\n NProgress.status = (n === 1 ? null : n);\n\n var progress = NProgress.render(!started),\n bar = progress.querySelector(Settings.barSelector),\n speed = Settings.speed,\n ease = Settings.easing;\n\n progress.offsetWidth; /* Repaint */\n\n queue(function(next) {\n // Set positionUsing if it hasn't already been set\n if (Settings.positionUsing === '') Settings.positionUsing = NProgress.getPositioningCSS();\n\n // Add transition\n css(bar, barPositionCSS(n, speed, ease));\n\n if (n === 1) {\n // Fade out\n css(progress, { \n transition: 'none', \n opacity: 1 \n });\n progress.offsetWidth; /* Repaint */\n\n setTimeout(function() {\n css(progress, { \n transition: 'all ' + speed + 'ms linear', \n opacity: 0 \n });\n setTimeout(function() {\n NProgress.remove();\n next();\n }, speed);\n }, speed);\n } else {\n setTimeout(next, speed);\n }\n });\n\n return this;\n };\n\n NProgress.isStarted = function() {\n return typeof NProgress.status === 'number';\n };\n\n /**\n * Shows the progress bar.\n * This is the same as setting the status to 0%, except that it doesn't go backwards.\n *\n * NProgress.start();\n *\n */\n NProgress.start = function() {\n if (!NProgress.status) NProgress.set(0);\n\n var work = function() {\n setTimeout(function() {\n if (!NProgress.status) return;\n NProgress.trickle();\n work();\n }, Settings.trickleSpeed);\n };\n\n if (Settings.trickle) work();\n\n return this;\n };\n\n /**\n * Hides the progress bar.\n * This is the *sort of* the same as setting the status to 100%, with the\n * difference being `done()` makes some placebo effect of some realistic motion.\n *\n * NProgress.done();\n *\n * If `true` is passed, it will show the progress bar even if its hidden.\n *\n * NProgress.done(true);\n */\n\n NProgress.done = function(force) {\n if (!force && !NProgress.status) return this;\n\n return NProgress.inc(0.3 + 0.5 * Math.random()).set(1);\n };\n\n /**\n * Increments by a random amount.\n */\n\n NProgress.inc = function(amount) {\n var n = NProgress.status;\n\n if (!n) {\n return NProgress.start();\n } else {\n if (typeof amount !== 'number') {\n amount = (1 - n) * clamp(Math.random() * n, 0.1, 0.95);\n }\n\n n = clamp(n + amount, 0, 0.994);\n return NProgress.set(n);\n }\n };\n\n NProgress.trickle = function() {\n return NProgress.inc(Math.random() * Settings.trickleRate);\n };\n\n /**\n * Waits for all supplied jQuery promises and\n * increases the progress as the promises resolve.\n *\n * @param $promise jQUery Promise\n */\n (function() {\n var initial = 0, current = 0;\n\n NProgress.promise = function($promise) {\n if (!$promise || $promise.state() === \"resolved\") {\n return this;\n }\n\n if (current === 0) {\n NProgress.start();\n }\n\n initial++;\n current++;\n\n $promise.always(function() {\n current--;\n if (current === 0) {\n initial = 0;\n NProgress.done();\n } else {\n NProgress.set((initial - current) / initial);\n }\n });\n\n return this;\n };\n\n })();\n\n /**\n * (Internal) renders the progress bar markup based on the `template`\n * setting.\n */\n\n NProgress.render = function(fromStart) {\n if (NProgress.isRendered()) return document.getElementById('nprogress');\n\n addClass(document.documentElement, 'nprogress-busy');\n \n var progress = document.createElement('div');\n progress.id = 'nprogress';\n progress.innerHTML = Settings.template;\n\n var bar = progress.querySelector(Settings.barSelector),\n perc = fromStart ? '-100' : toBarPerc(NProgress.status || 0),\n parent = document.querySelector(Settings.parent),\n spinner;\n \n css(bar, {\n transition: 'all 0 linear',\n transform: 'translate3d(' + perc + '%,0,0)'\n });\n\n if (!Settings.showSpinner) {\n spinner = progress.querySelector(Settings.spinnerSelector);\n spinner && removeElement(spinner);\n }\n\n if (parent != document.body) {\n addClass(parent, 'nprogress-custom-parent');\n }\n\n parent.appendChild(progress);\n return progress;\n };\n\n /**\n * Removes the element. Opposite of render().\n */\n\n NProgress.remove = function() {\n removeClass(document.documentElement, 'nprogress-busy');\n removeClass(document.querySelector(Settings.parent), 'nprogress-custom-parent');\n var progress = document.getElementById('nprogress');\n progress && removeElement(progress);\n };\n\n /**\n * Checks if the progress bar is rendered.\n */\n\n NProgress.isRendered = function() {\n return !!document.getElementById('nprogress');\n };\n\n /**\n * Determine which positioning CSS rule to use.\n */\n\n NProgress.getPositioningCSS = function() {\n // Sniff on document.body.style\n var bodyStyle = document.body.style;\n\n // Sniff prefixes\n var vendorPrefix = ('WebkitTransform' in bodyStyle) ? 'Webkit' :\n ('MozTransform' in bodyStyle) ? 'Moz' :\n ('msTransform' in bodyStyle) ? 'ms' :\n ('OTransform' in bodyStyle) ? 'O' : '';\n\n if (vendorPrefix + 'Perspective' in bodyStyle) {\n // Modern browsers with 3D support, e.g. Webkit, IE10\n return 'translate3d';\n } else if (vendorPrefix + 'Transform' in bodyStyle) {\n // Browsers without 3D support, e.g. IE9\n return 'translate';\n } else {\n // Browsers without translate() support, e.g. IE7-8\n return 'margin';\n }\n };\n\n /**\n * Helpers\n */\n\n function clamp(n, min, max) {\n if (n < min) return min;\n if (n > max) return max;\n return n;\n }\n\n /**\n * (Internal) converts a percentage (`0..1`) to a bar translateX\n * percentage (`-100%..0%`).\n */\n\n function toBarPerc(n) {\n return (-1 + n) * 100;\n }\n\n\n /**\n * (Internal) returns the correct CSS for changing the bar's\n * position given an n percentage, and speed and ease from Settings\n */\n\n function barPositionCSS(n, speed, ease) {\n var barCSS;\n\n if (Settings.positionUsing === 'translate3d') {\n barCSS = { transform: 'translate3d('+toBarPerc(n)+'%,0,0)' };\n } else if (Settings.positionUsing === 'translate') {\n barCSS = { transform: 'translate('+toBarPerc(n)+'%,0)' };\n } else {\n barCSS = { 'margin-left': toBarPerc(n)+'%' };\n }\n\n barCSS.transition = 'all '+speed+'ms '+ease;\n\n return barCSS;\n }\n\n /**\n * (Internal) Queues a function to be executed.\n */\n\n var queue = (function() {\n var pending = [];\n \n function next() {\n var fn = pending.shift();\n if (fn) {\n fn(next);\n }\n }\n\n return function(fn) {\n pending.push(fn);\n if (pending.length == 1) next();\n };\n })();\n\n /**\n * (Internal) Applies css properties to an element, similar to the jQuery \n * css method.\n *\n * While this helper does assist with vendor prefixed property names, it \n * does not perform any manipulation of values prior to setting styles.\n */\n\n var css = (function() {\n var cssPrefixes = [ 'Webkit', 'O', 'Moz', 'ms' ],\n cssProps = {};\n\n function camelCase(string) {\n return string.replace(/^-ms-/, 'ms-').replace(/-([\\da-z])/gi, function(match, letter) {\n return letter.toUpperCase();\n });\n }\n\n function getVendorProp(name) {\n var style = document.body.style;\n if (name in style) return name;\n\n var i = cssPrefixes.length,\n capName = name.charAt(0).toUpperCase() + name.slice(1),\n vendorName;\n while (i--) {\n vendorName = cssPrefixes[i] + capName;\n if (vendorName in style) return vendorName;\n }\n\n return name;\n }\n\n function getStyleProp(name) {\n name = camelCase(name);\n return cssProps[name] || (cssProps[name] = getVendorProp(name));\n }\n\n function applyCss(element, prop, value) {\n prop = getStyleProp(prop);\n element.style[prop] = value;\n }\n\n return function(element, properties) {\n var args = arguments,\n prop, \n value;\n\n if (args.length == 2) {\n for (prop in properties) {\n value = properties[prop];\n if (value !== undefined && properties.hasOwnProperty(prop)) applyCss(element, prop, value);\n }\n } else {\n applyCss(element, args[1], args[2]);\n }\n }\n })();\n\n /**\n * (Internal) Determines if an element or space separated list of class names contains a class name.\n */\n\n function hasClass(element, name) {\n var list = typeof element == 'string' ? element : classList(element);\n return list.indexOf(' ' + name + ' ') >= 0;\n }\n\n /**\n * (Internal) Adds a class to an element.\n */\n\n function addClass(element, name) {\n var oldList = classList(element),\n newList = oldList + name;\n\n if (hasClass(oldList, name)) return; \n\n // Trim the opening space.\n element.className = newList.substring(1);\n }\n\n /**\n * (Internal) Removes a class from an element.\n */\n\n function removeClass(element, name) {\n var oldList = classList(element),\n newList;\n\n if (!hasClass(element, name)) return;\n\n // Replace the class name.\n newList = oldList.replace(' ' + name + ' ', ' ');\n\n // Trim the opening and closing spaces.\n element.className = newList.substring(1, newList.length - 1);\n }\n\n /**\n * (Internal) Gets a space separated list of the class names on the element. \n * The list is wrapped with a single space on each end to facilitate finding \n * matches within the list.\n */\n\n function classList(element) {\n return (' ' + (element.className || '') + ' ').replace(/\\s+/gi, ' ');\n }\n\n /**\n * (Internal) Removes an element from the DOM.\n */\n\n function removeElement(element) {\n element && element.parentNode && element.parentNode.removeChild(element);\n }\n\n return NProgress;\n});\n\n","/**!\n * Sortable 1.15.1\n * @author\tRubaXa \n * @author\towenm \n * @license MIT\n */\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) {\n symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n }\n keys.push.apply(keys, symbols);\n }\n return keys;\n}\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n return target;\n}\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function (obj) {\n return typeof obj;\n };\n } else {\n _typeof = function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n return _typeof(obj);\n}\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n };\n return _extends.apply(this, arguments);\n}\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n return target;\n}\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n var target = _objectWithoutPropertiesLoose(source, excluded);\n var key, i;\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n return target;\n}\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\nfunction _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n return arr2;\n}\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nvar version = \"1.15.1\";\n\nfunction userAgent(pattern) {\n if (typeof window !== 'undefined' && window.navigator) {\n return !! /*@__PURE__*/navigator.userAgent.match(pattern);\n }\n}\nvar IE11OrLess = userAgent(/(?:Trident.*rv[ :]?11\\.|msie|iemobile|Windows Phone)/i);\nvar Edge = userAgent(/Edge/i);\nvar FireFox = userAgent(/firefox/i);\nvar Safari = userAgent(/safari/i) && !userAgent(/chrome/i) && !userAgent(/android/i);\nvar IOS = userAgent(/iP(ad|od|hone)/i);\nvar ChromeForAndroid = userAgent(/chrome/i) && userAgent(/android/i);\n\nvar captureMode = {\n capture: false,\n passive: false\n};\nfunction on(el, event, fn) {\n el.addEventListener(event, fn, !IE11OrLess && captureMode);\n}\nfunction off(el, event, fn) {\n el.removeEventListener(event, fn, !IE11OrLess && captureMode);\n}\nfunction matches( /**HTMLElement*/el, /**String*/selector) {\n if (!selector) return;\n selector[0] === '>' && (selector = selector.substring(1));\n if (el) {\n try {\n if (el.matches) {\n return el.matches(selector);\n } else if (el.msMatchesSelector) {\n return el.msMatchesSelector(selector);\n } else if (el.webkitMatchesSelector) {\n return el.webkitMatchesSelector(selector);\n }\n } catch (_) {\n return false;\n }\n }\n return false;\n}\nfunction getParentOrHost(el) {\n return el.host && el !== document && el.host.nodeType ? el.host : el.parentNode;\n}\nfunction closest( /**HTMLElement*/el, /**String*/selector, /**HTMLElement*/ctx, includeCTX) {\n if (el) {\n ctx = ctx || document;\n do {\n if (selector != null && (selector[0] === '>' ? el.parentNode === ctx && matches(el, selector) : matches(el, selector)) || includeCTX && el === ctx) {\n return el;\n }\n if (el === ctx) break;\n /* jshint boss:true */\n } while (el = getParentOrHost(el));\n }\n return null;\n}\nvar R_SPACE = /\\s+/g;\nfunction toggleClass(el, name, state) {\n if (el && name) {\n if (el.classList) {\n el.classList[state ? 'add' : 'remove'](name);\n } else {\n var className = (' ' + el.className + ' ').replace(R_SPACE, ' ').replace(' ' + name + ' ', ' ');\n el.className = (className + (state ? ' ' + name : '')).replace(R_SPACE, ' ');\n }\n }\n}\nfunction css(el, prop, val) {\n var style = el && el.style;\n if (style) {\n if (val === void 0) {\n if (document.defaultView && document.defaultView.getComputedStyle) {\n val = document.defaultView.getComputedStyle(el, '');\n } else if (el.currentStyle) {\n val = el.currentStyle;\n }\n return prop === void 0 ? val : val[prop];\n } else {\n if (!(prop in style) && prop.indexOf('webkit') === -1) {\n prop = '-webkit-' + prop;\n }\n style[prop] = val + (typeof val === 'string' ? '' : 'px');\n }\n }\n}\nfunction matrix(el, selfOnly) {\n var appliedTransforms = '';\n if (typeof el === 'string') {\n appliedTransforms = el;\n } else {\n do {\n var transform = css(el, 'transform');\n if (transform && transform !== 'none') {\n appliedTransforms = transform + ' ' + appliedTransforms;\n }\n /* jshint boss:true */\n } while (!selfOnly && (el = el.parentNode));\n }\n var matrixFn = window.DOMMatrix || window.WebKitCSSMatrix || window.CSSMatrix || window.MSCSSMatrix;\n /*jshint -W056 */\n return matrixFn && new matrixFn(appliedTransforms);\n}\nfunction find(ctx, tagName, iterator) {\n if (ctx) {\n var list = ctx.getElementsByTagName(tagName),\n i = 0,\n n = list.length;\n if (iterator) {\n for (; i < n; i++) {\n iterator(list[i], i);\n }\n }\n return list;\n }\n return [];\n}\nfunction getWindowScrollingElement() {\n var scrollingElement = document.scrollingElement;\n if (scrollingElement) {\n return scrollingElement;\n } else {\n return document.documentElement;\n }\n}\n\n/**\r\n * Returns the \"bounding client rect\" of given element\r\n * @param {HTMLElement} el The element whose boundingClientRect is wanted\r\n * @param {[Boolean]} relativeToContainingBlock Whether the rect should be relative to the containing block of (including) the container\r\n * @param {[Boolean]} relativeToNonStaticParent Whether the rect should be relative to the relative parent of (including) the contaienr\r\n * @param {[Boolean]} undoScale Whether the container's scale() should be undone\r\n * @param {[HTMLElement]} container The parent the element will be placed in\r\n * @return {Object} The boundingClientRect of el, with specified adjustments\r\n */\nfunction getRect(el, relativeToContainingBlock, relativeToNonStaticParent, undoScale, container) {\n if (!el.getBoundingClientRect && el !== window) return;\n var elRect, top, left, bottom, right, height, width;\n if (el !== window && el.parentNode && el !== getWindowScrollingElement()) {\n elRect = el.getBoundingClientRect();\n top = elRect.top;\n left = elRect.left;\n bottom = elRect.bottom;\n right = elRect.right;\n height = elRect.height;\n width = elRect.width;\n } else {\n top = 0;\n left = 0;\n bottom = window.innerHeight;\n right = window.innerWidth;\n height = window.innerHeight;\n width = window.innerWidth;\n }\n if ((relativeToContainingBlock || relativeToNonStaticParent) && el !== window) {\n // Adjust for translate()\n container = container || el.parentNode;\n\n // solves #1123 (see: https://stackoverflow.com/a/37953806/6088312)\n // Not needed on <= IE11\n if (!IE11OrLess) {\n do {\n if (container && container.getBoundingClientRect && (css(container, 'transform') !== 'none' || relativeToNonStaticParent && css(container, 'position') !== 'static')) {\n var containerRect = container.getBoundingClientRect();\n\n // Set relative to edges of padding box of container\n top -= containerRect.top + parseInt(css(container, 'border-top-width'));\n left -= containerRect.left + parseInt(css(container, 'border-left-width'));\n bottom = top + elRect.height;\n right = left + elRect.width;\n break;\n }\n /* jshint boss:true */\n } while (container = container.parentNode);\n }\n }\n if (undoScale && el !== window) {\n // Adjust for scale()\n var elMatrix = matrix(container || el),\n scaleX = elMatrix && elMatrix.a,\n scaleY = elMatrix && elMatrix.d;\n if (elMatrix) {\n top /= scaleY;\n left /= scaleX;\n width /= scaleX;\n height /= scaleY;\n bottom = top + height;\n right = left + width;\n }\n }\n return {\n top: top,\n left: left,\n bottom: bottom,\n right: right,\n width: width,\n height: height\n };\n}\n\n/**\r\n * Returns the content rect of the element (bounding rect minus border and padding)\r\n * @param {HTMLElement} el \r\n */\nfunction getContentRect(el) {\n var rect = getRect(el);\n var paddingLeft = parseInt(css(el, 'padding-left')),\n paddingTop = parseInt(css(el, 'padding-top')),\n paddingRight = parseInt(css(el, 'padding-right')),\n paddingBottom = parseInt(css(el, 'padding-bottom'));\n rect.top += paddingTop + parseInt(css(el, 'border-top-width'));\n rect.left += paddingLeft + parseInt(css(el, 'border-left-width'));\n // Client Width/Height includes padding only\n rect.width = el.clientWidth - paddingLeft - paddingRight;\n rect.height = el.clientHeight - paddingTop - paddingBottom;\n rect.bottom = rect.top + rect.height;\n rect.right = rect.left + rect.width;\n return rect;\n}\n\n/**\r\n * Checks if a side of an element is scrolled past a side of its parents\r\n * @param {HTMLElement} el The element who's side being scrolled out of view is in question\r\n * @param {String} elSide Side of the element in question ('top', 'left', 'right', 'bottom')\r\n * @param {String} parentSide Side of the parent in question ('top', 'left', 'right', 'bottom')\r\n * @return {HTMLElement} The parent scroll element that the el's side is scrolled past, or null if there is no such element\r\n */\nfunction isScrolledPast(el, elSide, parentSide) {\n var parent = getParentAutoScrollElement(el, true),\n elSideVal = getRect(el)[elSide];\n\n /* jshint boss:true */\n while (parent) {\n var parentSideVal = getRect(parent)[parentSide],\n visible = void 0;\n if (parentSide === 'top' || parentSide === 'left') {\n visible = elSideVal >= parentSideVal;\n } else {\n visible = elSideVal <= parentSideVal;\n }\n if (!visible) return parent;\n if (parent === getWindowScrollingElement()) break;\n parent = getParentAutoScrollElement(parent, false);\n }\n return false;\n}\n\n/**\r\n * Gets nth child of el, ignoring hidden children, sortable's elements (does not ignore clone if it's visible)\r\n * and non-draggable elements\r\n * @param {HTMLElement} el The parent element\r\n * @param {Number} childNum The index of the child\r\n * @param {Object} options Parent Sortable's options\r\n * @return {HTMLElement} The child at index childNum, or null if not found\r\n */\nfunction getChild(el, childNum, options, includeDragEl) {\n var currentChild = 0,\n i = 0,\n children = el.children;\n while (i < children.length) {\n if (children[i].style.display !== 'none' && children[i] !== Sortable.ghost && (includeDragEl || children[i] !== Sortable.dragged) && closest(children[i], options.draggable, el, false)) {\n if (currentChild === childNum) {\n return children[i];\n }\n currentChild++;\n }\n i++;\n }\n return null;\n}\n\n/**\r\n * Gets the last child in the el, ignoring ghostEl or invisible elements (clones)\r\n * @param {HTMLElement} el Parent element\r\n * @param {selector} selector Any other elements that should be ignored\r\n * @return {HTMLElement} The last child, ignoring ghostEl\r\n */\nfunction lastChild(el, selector) {\n var last = el.lastElementChild;\n while (last && (last === Sortable.ghost || css(last, 'display') === 'none' || selector && !matches(last, selector))) {\n last = last.previousElementSibling;\n }\n return last || null;\n}\n\n/**\r\n * Returns the index of an element within its parent for a selected set of\r\n * elements\r\n * @param {HTMLElement} el\r\n * @param {selector} selector\r\n * @return {number}\r\n */\nfunction index(el, selector) {\n var index = 0;\n if (!el || !el.parentNode) {\n return -1;\n }\n\n /* jshint boss:true */\n while (el = el.previousElementSibling) {\n if (el.nodeName.toUpperCase() !== 'TEMPLATE' && el !== Sortable.clone && (!selector || matches(el, selector))) {\n index++;\n }\n }\n return index;\n}\n\n/**\r\n * Returns the scroll offset of the given element, added with all the scroll offsets of parent elements.\r\n * The value is returned in real pixels.\r\n * @param {HTMLElement} el\r\n * @return {Array} Offsets in the format of [left, top]\r\n */\nfunction getRelativeScrollOffset(el) {\n var offsetLeft = 0,\n offsetTop = 0,\n winScroller = getWindowScrollingElement();\n if (el) {\n do {\n var elMatrix = matrix(el),\n scaleX = elMatrix.a,\n scaleY = elMatrix.d;\n offsetLeft += el.scrollLeft * scaleX;\n offsetTop += el.scrollTop * scaleY;\n } while (el !== winScroller && (el = el.parentNode));\n }\n return [offsetLeft, offsetTop];\n}\n\n/**\r\n * Returns the index of the object within the given array\r\n * @param {Array} arr Array that may or may not hold the object\r\n * @param {Object} obj An object that has a key-value pair unique to and identical to a key-value pair in the object you want to find\r\n * @return {Number} The index of the object in the array, or -1\r\n */\nfunction indexOfObject(arr, obj) {\n for (var i in arr) {\n if (!arr.hasOwnProperty(i)) continue;\n for (var key in obj) {\n if (obj.hasOwnProperty(key) && obj[key] === arr[i][key]) return Number(i);\n }\n }\n return -1;\n}\nfunction getParentAutoScrollElement(el, includeSelf) {\n // skip to window\n if (!el || !el.getBoundingClientRect) return getWindowScrollingElement();\n var elem = el;\n var gotSelf = false;\n do {\n // we don't need to get elem css if it isn't even overflowing in the first place (performance)\n if (elem.clientWidth < elem.scrollWidth || elem.clientHeight < elem.scrollHeight) {\n var elemCSS = css(elem);\n if (elem.clientWidth < elem.scrollWidth && (elemCSS.overflowX == 'auto' || elemCSS.overflowX == 'scroll') || elem.clientHeight < elem.scrollHeight && (elemCSS.overflowY == 'auto' || elemCSS.overflowY == 'scroll')) {\n if (!elem.getBoundingClientRect || elem === document.body) return getWindowScrollingElement();\n if (gotSelf || includeSelf) return elem;\n gotSelf = true;\n }\n }\n /* jshint boss:true */\n } while (elem = elem.parentNode);\n return getWindowScrollingElement();\n}\nfunction extend(dst, src) {\n if (dst && src) {\n for (var key in src) {\n if (src.hasOwnProperty(key)) {\n dst[key] = src[key];\n }\n }\n }\n return dst;\n}\nfunction isRectEqual(rect1, rect2) {\n return Math.round(rect1.top) === Math.round(rect2.top) && Math.round(rect1.left) === Math.round(rect2.left) && Math.round(rect1.height) === Math.round(rect2.height) && Math.round(rect1.width) === Math.round(rect2.width);\n}\nvar _throttleTimeout;\nfunction throttle(callback, ms) {\n return function () {\n if (!_throttleTimeout) {\n var args = arguments,\n _this = this;\n if (args.length === 1) {\n callback.call(_this, args[0]);\n } else {\n callback.apply(_this, args);\n }\n _throttleTimeout = setTimeout(function () {\n _throttleTimeout = void 0;\n }, ms);\n }\n };\n}\nfunction cancelThrottle() {\n clearTimeout(_throttleTimeout);\n _throttleTimeout = void 0;\n}\nfunction scrollBy(el, x, y) {\n el.scrollLeft += x;\n el.scrollTop += y;\n}\nfunction clone(el) {\n var Polymer = window.Polymer;\n var $ = window.jQuery || window.Zepto;\n if (Polymer && Polymer.dom) {\n return Polymer.dom(el).cloneNode(true);\n } else if ($) {\n return $(el).clone(true)[0];\n } else {\n return el.cloneNode(true);\n }\n}\nfunction setRect(el, rect) {\n css(el, 'position', 'absolute');\n css(el, 'top', rect.top);\n css(el, 'left', rect.left);\n css(el, 'width', rect.width);\n css(el, 'height', rect.height);\n}\nfunction unsetRect(el) {\n css(el, 'position', '');\n css(el, 'top', '');\n css(el, 'left', '');\n css(el, 'width', '');\n css(el, 'height', '');\n}\nvar expando = 'Sortable' + new Date().getTime();\n\nfunction AnimationStateManager() {\n var animationStates = [],\n animationCallbackId;\n return {\n captureAnimationState: function captureAnimationState() {\n animationStates = [];\n if (!this.options.animation) return;\n var children = [].slice.call(this.el.children);\n children.forEach(function (child) {\n if (css(child, 'display') === 'none' || child === Sortable.ghost) return;\n animationStates.push({\n target: child,\n rect: getRect(child)\n });\n var fromRect = _objectSpread2({}, animationStates[animationStates.length - 1].rect);\n\n // If animating: compensate for current animation\n if (child.thisAnimationDuration) {\n var childMatrix = matrix(child, true);\n if (childMatrix) {\n fromRect.top -= childMatrix.f;\n fromRect.left -= childMatrix.e;\n }\n }\n child.fromRect = fromRect;\n });\n },\n addAnimationState: function addAnimationState(state) {\n animationStates.push(state);\n },\n removeAnimationState: function removeAnimationState(target) {\n animationStates.splice(indexOfObject(animationStates, {\n target: target\n }), 1);\n },\n animateAll: function animateAll(callback) {\n var _this = this;\n if (!this.options.animation) {\n clearTimeout(animationCallbackId);\n if (typeof callback === 'function') callback();\n return;\n }\n var animating = false,\n animationTime = 0;\n animationStates.forEach(function (state) {\n var time = 0,\n target = state.target,\n fromRect = target.fromRect,\n toRect = getRect(target),\n prevFromRect = target.prevFromRect,\n prevToRect = target.prevToRect,\n animatingRect = state.rect,\n targetMatrix = matrix(target, true);\n if (targetMatrix) {\n // Compensate for current animation\n toRect.top -= targetMatrix.f;\n toRect.left -= targetMatrix.e;\n }\n target.toRect = toRect;\n if (target.thisAnimationDuration) {\n // Could also check if animatingRect is between fromRect and toRect\n if (isRectEqual(prevFromRect, toRect) && !isRectEqual(fromRect, toRect) &&\n // Make sure animatingRect is on line between toRect & fromRect\n (animatingRect.top - toRect.top) / (animatingRect.left - toRect.left) === (fromRect.top - toRect.top) / (fromRect.left - toRect.left)) {\n // If returning to same place as started from animation and on same axis\n time = calculateRealTime(animatingRect, prevFromRect, prevToRect, _this.options);\n }\n }\n\n // if fromRect != toRect: animate\n if (!isRectEqual(toRect, fromRect)) {\n target.prevFromRect = fromRect;\n target.prevToRect = toRect;\n if (!time) {\n time = _this.options.animation;\n }\n _this.animate(target, animatingRect, toRect, time);\n }\n if (time) {\n animating = true;\n animationTime = Math.max(animationTime, time);\n clearTimeout(target.animationResetTimer);\n target.animationResetTimer = setTimeout(function () {\n target.animationTime = 0;\n target.prevFromRect = null;\n target.fromRect = null;\n target.prevToRect = null;\n target.thisAnimationDuration = null;\n }, time);\n target.thisAnimationDuration = time;\n }\n });\n clearTimeout(animationCallbackId);\n if (!animating) {\n if (typeof callback === 'function') callback();\n } else {\n animationCallbackId = setTimeout(function () {\n if (typeof callback === 'function') callback();\n }, animationTime);\n }\n animationStates = [];\n },\n animate: function animate(target, currentRect, toRect, duration) {\n if (duration) {\n css(target, 'transition', '');\n css(target, 'transform', '');\n var elMatrix = matrix(this.el),\n scaleX = elMatrix && elMatrix.a,\n scaleY = elMatrix && elMatrix.d,\n translateX = (currentRect.left - toRect.left) / (scaleX || 1),\n translateY = (currentRect.top - toRect.top) / (scaleY || 1);\n target.animatingX = !!translateX;\n target.animatingY = !!translateY;\n css(target, 'transform', 'translate3d(' + translateX + 'px,' + translateY + 'px,0)');\n this.forRepaintDummy = repaint(target); // repaint\n\n css(target, 'transition', 'transform ' + duration + 'ms' + (this.options.easing ? ' ' + this.options.easing : ''));\n css(target, 'transform', 'translate3d(0,0,0)');\n typeof target.animated === 'number' && clearTimeout(target.animated);\n target.animated = setTimeout(function () {\n css(target, 'transition', '');\n css(target, 'transform', '');\n target.animated = false;\n target.animatingX = false;\n target.animatingY = false;\n }, duration);\n }\n }\n };\n}\nfunction repaint(target) {\n return target.offsetWidth;\n}\nfunction calculateRealTime(animatingRect, fromRect, toRect, options) {\n return Math.sqrt(Math.pow(fromRect.top - animatingRect.top, 2) + Math.pow(fromRect.left - animatingRect.left, 2)) / Math.sqrt(Math.pow(fromRect.top - toRect.top, 2) + Math.pow(fromRect.left - toRect.left, 2)) * options.animation;\n}\n\nvar plugins = [];\nvar defaults = {\n initializeByDefault: true\n};\nvar PluginManager = {\n mount: function mount(plugin) {\n // Set default static properties\n for (var option in defaults) {\n if (defaults.hasOwnProperty(option) && !(option in plugin)) {\n plugin[option] = defaults[option];\n }\n }\n plugins.forEach(function (p) {\n if (p.pluginName === plugin.pluginName) {\n throw \"Sortable: Cannot mount plugin \".concat(plugin.pluginName, \" more than once\");\n }\n });\n plugins.push(plugin);\n },\n pluginEvent: function pluginEvent(eventName, sortable, evt) {\n var _this = this;\n this.eventCanceled = false;\n evt.cancel = function () {\n _this.eventCanceled = true;\n };\n var eventNameGlobal = eventName + 'Global';\n plugins.forEach(function (plugin) {\n if (!sortable[plugin.pluginName]) return;\n // Fire global events if it exists in this sortable\n if (sortable[plugin.pluginName][eventNameGlobal]) {\n sortable[plugin.pluginName][eventNameGlobal](_objectSpread2({\n sortable: sortable\n }, evt));\n }\n\n // Only fire plugin event if plugin is enabled in this sortable,\n // and plugin has event defined\n if (sortable.options[plugin.pluginName] && sortable[plugin.pluginName][eventName]) {\n sortable[plugin.pluginName][eventName](_objectSpread2({\n sortable: sortable\n }, evt));\n }\n });\n },\n initializePlugins: function initializePlugins(sortable, el, defaults, options) {\n plugins.forEach(function (plugin) {\n var pluginName = plugin.pluginName;\n if (!sortable.options[pluginName] && !plugin.initializeByDefault) return;\n var initialized = new plugin(sortable, el, sortable.options);\n initialized.sortable = sortable;\n initialized.options = sortable.options;\n sortable[pluginName] = initialized;\n\n // Add default options from plugin\n _extends(defaults, initialized.defaults);\n });\n for (var option in sortable.options) {\n if (!sortable.options.hasOwnProperty(option)) continue;\n var modified = this.modifyOption(sortable, option, sortable.options[option]);\n if (typeof modified !== 'undefined') {\n sortable.options[option] = modified;\n }\n }\n },\n getEventProperties: function getEventProperties(name, sortable) {\n var eventProperties = {};\n plugins.forEach(function (plugin) {\n if (typeof plugin.eventProperties !== 'function') return;\n _extends(eventProperties, plugin.eventProperties.call(sortable[plugin.pluginName], name));\n });\n return eventProperties;\n },\n modifyOption: function modifyOption(sortable, name, value) {\n var modifiedValue;\n plugins.forEach(function (plugin) {\n // Plugin must exist on the Sortable\n if (!sortable[plugin.pluginName]) return;\n\n // If static option listener exists for this option, call in the context of the Sortable's instance of this plugin\n if (plugin.optionListeners && typeof plugin.optionListeners[name] === 'function') {\n modifiedValue = plugin.optionListeners[name].call(sortable[plugin.pluginName], value);\n }\n });\n return modifiedValue;\n }\n};\n\nfunction dispatchEvent(_ref) {\n var sortable = _ref.sortable,\n rootEl = _ref.rootEl,\n name = _ref.name,\n targetEl = _ref.targetEl,\n cloneEl = _ref.cloneEl,\n toEl = _ref.toEl,\n fromEl = _ref.fromEl,\n oldIndex = _ref.oldIndex,\n newIndex = _ref.newIndex,\n oldDraggableIndex = _ref.oldDraggableIndex,\n newDraggableIndex = _ref.newDraggableIndex,\n originalEvent = _ref.originalEvent,\n putSortable = _ref.putSortable,\n extraEventProperties = _ref.extraEventProperties;\n sortable = sortable || rootEl && rootEl[expando];\n if (!sortable) return;\n var evt,\n options = sortable.options,\n onName = 'on' + name.charAt(0).toUpperCase() + name.substr(1);\n // Support for new CustomEvent feature\n if (window.CustomEvent && !IE11OrLess && !Edge) {\n evt = new CustomEvent(name, {\n bubbles: true,\n cancelable: true\n });\n } else {\n evt = document.createEvent('Event');\n evt.initEvent(name, true, true);\n }\n evt.to = toEl || rootEl;\n evt.from = fromEl || rootEl;\n evt.item = targetEl || rootEl;\n evt.clone = cloneEl;\n evt.oldIndex = oldIndex;\n evt.newIndex = newIndex;\n evt.oldDraggableIndex = oldDraggableIndex;\n evt.newDraggableIndex = newDraggableIndex;\n evt.originalEvent = originalEvent;\n evt.pullMode = putSortable ? putSortable.lastPutMode : undefined;\n var allEventProperties = _objectSpread2(_objectSpread2({}, extraEventProperties), PluginManager.getEventProperties(name, sortable));\n for (var option in allEventProperties) {\n evt[option] = allEventProperties[option];\n }\n if (rootEl) {\n rootEl.dispatchEvent(evt);\n }\n if (options[onName]) {\n options[onName].call(sortable, evt);\n }\n}\n\nvar _excluded = [\"evt\"];\nvar pluginEvent = function pluginEvent(eventName, sortable) {\n var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},\n originalEvent = _ref.evt,\n data = _objectWithoutProperties(_ref, _excluded);\n PluginManager.pluginEvent.bind(Sortable)(eventName, sortable, _objectSpread2({\n dragEl: dragEl,\n parentEl: parentEl,\n ghostEl: ghostEl,\n rootEl: rootEl,\n nextEl: nextEl,\n lastDownEl: lastDownEl,\n cloneEl: cloneEl,\n cloneHidden: cloneHidden,\n dragStarted: moved,\n putSortable: putSortable,\n activeSortable: Sortable.active,\n originalEvent: originalEvent,\n oldIndex: oldIndex,\n oldDraggableIndex: oldDraggableIndex,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex,\n hideGhostForTarget: _hideGhostForTarget,\n unhideGhostForTarget: _unhideGhostForTarget,\n cloneNowHidden: function cloneNowHidden() {\n cloneHidden = true;\n },\n cloneNowShown: function cloneNowShown() {\n cloneHidden = false;\n },\n dispatchSortableEvent: function dispatchSortableEvent(name) {\n _dispatchEvent({\n sortable: sortable,\n name: name,\n originalEvent: originalEvent\n });\n }\n }, data));\n};\nfunction _dispatchEvent(info) {\n dispatchEvent(_objectSpread2({\n putSortable: putSortable,\n cloneEl: cloneEl,\n targetEl: dragEl,\n rootEl: rootEl,\n oldIndex: oldIndex,\n oldDraggableIndex: oldDraggableIndex,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex\n }, info));\n}\nvar dragEl,\n parentEl,\n ghostEl,\n rootEl,\n nextEl,\n lastDownEl,\n cloneEl,\n cloneHidden,\n oldIndex,\n newIndex,\n oldDraggableIndex,\n newDraggableIndex,\n activeGroup,\n putSortable,\n awaitingDragStarted = false,\n ignoreNextClick = false,\n sortables = [],\n tapEvt,\n touchEvt,\n lastDx,\n lastDy,\n tapDistanceLeft,\n tapDistanceTop,\n moved,\n lastTarget,\n lastDirection,\n pastFirstInvertThresh = false,\n isCircumstantialInvert = false,\n targetMoveDistance,\n // For positioning ghost absolutely\n ghostRelativeParent,\n ghostRelativeParentInitialScroll = [],\n // (left, top)\n\n _silent = false,\n savedInputChecked = [];\n\n/** @const */\nvar documentExists = typeof document !== 'undefined',\n PositionGhostAbsolutely = IOS,\n CSSFloatProperty = Edge || IE11OrLess ? 'cssFloat' : 'float',\n // This will not pass for IE9, because IE9 DnD only works on anchors\n supportDraggable = documentExists && !ChromeForAndroid && !IOS && 'draggable' in document.createElement('div'),\n supportCssPointerEvents = function () {\n if (!documentExists) return;\n // false when <= IE11\n if (IE11OrLess) {\n return false;\n }\n var el = document.createElement('x');\n el.style.cssText = 'pointer-events:auto';\n return el.style.pointerEvents === 'auto';\n }(),\n _detectDirection = function _detectDirection(el, options) {\n var elCSS = css(el),\n elWidth = parseInt(elCSS.width) - parseInt(elCSS.paddingLeft) - parseInt(elCSS.paddingRight) - parseInt(elCSS.borderLeftWidth) - parseInt(elCSS.borderRightWidth),\n child1 = getChild(el, 0, options),\n child2 = getChild(el, 1, options),\n firstChildCSS = child1 && css(child1),\n secondChildCSS = child2 && css(child2),\n firstChildWidth = firstChildCSS && parseInt(firstChildCSS.marginLeft) + parseInt(firstChildCSS.marginRight) + getRect(child1).width,\n secondChildWidth = secondChildCSS && parseInt(secondChildCSS.marginLeft) + parseInt(secondChildCSS.marginRight) + getRect(child2).width;\n if (elCSS.display === 'flex') {\n return elCSS.flexDirection === 'column' || elCSS.flexDirection === 'column-reverse' ? 'vertical' : 'horizontal';\n }\n if (elCSS.display === 'grid') {\n return elCSS.gridTemplateColumns.split(' ').length <= 1 ? 'vertical' : 'horizontal';\n }\n if (child1 && firstChildCSS[\"float\"] && firstChildCSS[\"float\"] !== 'none') {\n var touchingSideChild2 = firstChildCSS[\"float\"] === 'left' ? 'left' : 'right';\n return child2 && (secondChildCSS.clear === 'both' || secondChildCSS.clear === touchingSideChild2) ? 'vertical' : 'horizontal';\n }\n return child1 && (firstChildCSS.display === 'block' || firstChildCSS.display === 'flex' || firstChildCSS.display === 'table' || firstChildCSS.display === 'grid' || firstChildWidth >= elWidth && elCSS[CSSFloatProperty] === 'none' || child2 && elCSS[CSSFloatProperty] === 'none' && firstChildWidth + secondChildWidth > elWidth) ? 'vertical' : 'horizontal';\n },\n _dragElInRowColumn = function _dragElInRowColumn(dragRect, targetRect, vertical) {\n var dragElS1Opp = vertical ? dragRect.left : dragRect.top,\n dragElS2Opp = vertical ? dragRect.right : dragRect.bottom,\n dragElOppLength = vertical ? dragRect.width : dragRect.height,\n targetS1Opp = vertical ? targetRect.left : targetRect.top,\n targetS2Opp = vertical ? targetRect.right : targetRect.bottom,\n targetOppLength = vertical ? targetRect.width : targetRect.height;\n return dragElS1Opp === targetS1Opp || dragElS2Opp === targetS2Opp || dragElS1Opp + dragElOppLength / 2 === targetS1Opp + targetOppLength / 2;\n },\n /**\r\n * Detects first nearest empty sortable to X and Y position using emptyInsertThreshold.\r\n * @param {Number} x X position\r\n * @param {Number} y Y position\r\n * @return {HTMLElement} Element of the first found nearest Sortable\r\n */\n _detectNearestEmptySortable = function _detectNearestEmptySortable(x, y) {\n var ret;\n sortables.some(function (sortable) {\n var threshold = sortable[expando].options.emptyInsertThreshold;\n if (!threshold || lastChild(sortable)) return;\n var rect = getRect(sortable),\n insideHorizontally = x >= rect.left - threshold && x <= rect.right + threshold,\n insideVertically = y >= rect.top - threshold && y <= rect.bottom + threshold;\n if (insideHorizontally && insideVertically) {\n return ret = sortable;\n }\n });\n return ret;\n },\n _prepareGroup = function _prepareGroup(options) {\n function toFn(value, pull) {\n return function (to, from, dragEl, evt) {\n var sameGroup = to.options.group.name && from.options.group.name && to.options.group.name === from.options.group.name;\n if (value == null && (pull || sameGroup)) {\n // Default pull value\n // Default pull and put value if same group\n return true;\n } else if (value == null || value === false) {\n return false;\n } else if (pull && value === 'clone') {\n return value;\n } else if (typeof value === 'function') {\n return toFn(value(to, from, dragEl, evt), pull)(to, from, dragEl, evt);\n } else {\n var otherGroup = (pull ? to : from).options.group.name;\n return value === true || typeof value === 'string' && value === otherGroup || value.join && value.indexOf(otherGroup) > -1;\n }\n };\n }\n var group = {};\n var originalGroup = options.group;\n if (!originalGroup || _typeof(originalGroup) != 'object') {\n originalGroup = {\n name: originalGroup\n };\n }\n group.name = originalGroup.name;\n group.checkPull = toFn(originalGroup.pull, true);\n group.checkPut = toFn(originalGroup.put);\n group.revertClone = originalGroup.revertClone;\n options.group = group;\n },\n _hideGhostForTarget = function _hideGhostForTarget() {\n if (!supportCssPointerEvents && ghostEl) {\n css(ghostEl, 'display', 'none');\n }\n },\n _unhideGhostForTarget = function _unhideGhostForTarget() {\n if (!supportCssPointerEvents && ghostEl) {\n css(ghostEl, 'display', '');\n }\n };\n\n// #1184 fix - Prevent click event on fallback if dragged but item not changed position\nif (documentExists && !ChromeForAndroid) {\n document.addEventListener('click', function (evt) {\n if (ignoreNextClick) {\n evt.preventDefault();\n evt.stopPropagation && evt.stopPropagation();\n evt.stopImmediatePropagation && evt.stopImmediatePropagation();\n ignoreNextClick = false;\n return false;\n }\n }, true);\n}\nvar nearestEmptyInsertDetectEvent = function nearestEmptyInsertDetectEvent(evt) {\n if (dragEl) {\n evt = evt.touches ? evt.touches[0] : evt;\n var nearest = _detectNearestEmptySortable(evt.clientX, evt.clientY);\n if (nearest) {\n // Create imitation event\n var event = {};\n for (var i in evt) {\n if (evt.hasOwnProperty(i)) {\n event[i] = evt[i];\n }\n }\n event.target = event.rootEl = nearest;\n event.preventDefault = void 0;\n event.stopPropagation = void 0;\n nearest[expando]._onDragOver(event);\n }\n }\n};\nvar _checkOutsideTargetEl = function _checkOutsideTargetEl(evt) {\n if (dragEl) {\n dragEl.parentNode[expando]._isOutsideThisEl(evt.target);\n }\n};\n\n/**\r\n * @class Sortable\r\n * @param {HTMLElement} el\r\n * @param {Object} [options]\r\n */\nfunction Sortable(el, options) {\n if (!(el && el.nodeType && el.nodeType === 1)) {\n throw \"Sortable: `el` must be an HTMLElement, not \".concat({}.toString.call(el));\n }\n this.el = el; // root element\n this.options = options = _extends({}, options);\n\n // Export instance\n el[expando] = this;\n var defaults = {\n group: null,\n sort: true,\n disabled: false,\n store: null,\n handle: null,\n draggable: /^[uo]l$/i.test(el.nodeName) ? '>li' : '>*',\n swapThreshold: 1,\n // percentage; 0 <= x <= 1\n invertSwap: false,\n // invert always\n invertedSwapThreshold: null,\n // will be set to same as swapThreshold if default\n removeCloneOnHide: true,\n direction: function direction() {\n return _detectDirection(el, this.options);\n },\n ghostClass: 'sortable-ghost',\n chosenClass: 'sortable-chosen',\n dragClass: 'sortable-drag',\n ignore: 'a, img',\n filter: null,\n preventOnFilter: true,\n animation: 0,\n easing: null,\n setData: function setData(dataTransfer, dragEl) {\n dataTransfer.setData('Text', dragEl.textContent);\n },\n dropBubble: false,\n dragoverBubble: false,\n dataIdAttr: 'data-id',\n delay: 0,\n delayOnTouchOnly: false,\n touchStartThreshold: (Number.parseInt ? Number : window).parseInt(window.devicePixelRatio, 10) || 1,\n forceFallback: false,\n fallbackClass: 'sortable-fallback',\n fallbackOnBody: false,\n fallbackTolerance: 0,\n fallbackOffset: {\n x: 0,\n y: 0\n },\n supportPointer: Sortable.supportPointer !== false && 'PointerEvent' in window && !Safari,\n emptyInsertThreshold: 5\n };\n PluginManager.initializePlugins(this, el, defaults);\n\n // Set default options\n for (var name in defaults) {\n !(name in options) && (options[name] = defaults[name]);\n }\n _prepareGroup(options);\n\n // Bind all private methods\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n }\n\n // Setup drag mode\n this.nativeDraggable = options.forceFallback ? false : supportDraggable;\n if (this.nativeDraggable) {\n // Touch start threshold cannot be greater than the native dragstart threshold\n this.options.touchStartThreshold = 1;\n }\n\n // Bind events\n if (options.supportPointer) {\n on(el, 'pointerdown', this._onTapStart);\n } else {\n on(el, 'mousedown', this._onTapStart);\n on(el, 'touchstart', this._onTapStart);\n }\n if (this.nativeDraggable) {\n on(el, 'dragover', this);\n on(el, 'dragenter', this);\n }\n sortables.push(this.el);\n\n // Restore sorting\n options.store && options.store.get && this.sort(options.store.get(this) || []);\n\n // Add animation state manager\n _extends(this, AnimationStateManager());\n}\nSortable.prototype = /** @lends Sortable.prototype */{\n constructor: Sortable,\n _isOutsideThisEl: function _isOutsideThisEl(target) {\n if (!this.el.contains(target) && target !== this.el) {\n lastTarget = null;\n }\n },\n _getDirection: function _getDirection(evt, target) {\n return typeof this.options.direction === 'function' ? this.options.direction.call(this, evt, target, dragEl) : this.options.direction;\n },\n _onTapStart: function _onTapStart( /** Event|TouchEvent */evt) {\n if (!evt.cancelable) return;\n var _this = this,\n el = this.el,\n options = this.options,\n preventOnFilter = options.preventOnFilter,\n type = evt.type,\n touch = evt.touches && evt.touches[0] || evt.pointerType && evt.pointerType === 'touch' && evt,\n target = (touch || evt).target,\n originalTarget = evt.target.shadowRoot && (evt.path && evt.path[0] || evt.composedPath && evt.composedPath()[0]) || target,\n filter = options.filter;\n _saveInputCheckedState(el);\n\n // Don't trigger start event when an element is been dragged, otherwise the evt.oldindex always wrong when set option.group.\n if (dragEl) {\n return;\n }\n if (/mousedown|pointerdown/.test(type) && evt.button !== 0 || options.disabled) {\n return; // only left button and enabled\n }\n\n // cancel dnd if original target is content editable\n if (originalTarget.isContentEditable) {\n return;\n }\n\n // Safari ignores further event handling after mousedown\n if (!this.nativeDraggable && Safari && target && target.tagName.toUpperCase() === 'SELECT') {\n return;\n }\n target = closest(target, options.draggable, el, false);\n if (target && target.animated) {\n return;\n }\n if (lastDownEl === target) {\n // Ignoring duplicate `down`\n return;\n }\n\n // Get the index of the dragged element within its parent\n oldIndex = index(target);\n oldDraggableIndex = index(target, options.draggable);\n\n // Check filter\n if (typeof filter === 'function') {\n if (filter.call(this, evt, target, this)) {\n _dispatchEvent({\n sortable: _this,\n rootEl: originalTarget,\n name: 'filter',\n targetEl: target,\n toEl: el,\n fromEl: el\n });\n pluginEvent('filter', _this, {\n evt: evt\n });\n preventOnFilter && evt.cancelable && evt.preventDefault();\n return; // cancel dnd\n }\n } else if (filter) {\n filter = filter.split(',').some(function (criteria) {\n criteria = closest(originalTarget, criteria.trim(), el, false);\n if (criteria) {\n _dispatchEvent({\n sortable: _this,\n rootEl: criteria,\n name: 'filter',\n targetEl: target,\n fromEl: el,\n toEl: el\n });\n pluginEvent('filter', _this, {\n evt: evt\n });\n return true;\n }\n });\n if (filter) {\n preventOnFilter && evt.cancelable && evt.preventDefault();\n return; // cancel dnd\n }\n }\n if (options.handle && !closest(originalTarget, options.handle, el, false)) {\n return;\n }\n\n // Prepare `dragstart`\n this._prepareDragStart(evt, touch, target);\n },\n _prepareDragStart: function _prepareDragStart( /** Event */evt, /** Touch */touch, /** HTMLElement */target) {\n var _this = this,\n el = _this.el,\n options = _this.options,\n ownerDocument = el.ownerDocument,\n dragStartFn;\n if (target && !dragEl && target.parentNode === el) {\n var dragRect = getRect(target);\n rootEl = el;\n dragEl = target;\n parentEl = dragEl.parentNode;\n nextEl = dragEl.nextSibling;\n lastDownEl = target;\n activeGroup = options.group;\n Sortable.dragged = dragEl;\n tapEvt = {\n target: dragEl,\n clientX: (touch || evt).clientX,\n clientY: (touch || evt).clientY\n };\n tapDistanceLeft = tapEvt.clientX - dragRect.left;\n tapDistanceTop = tapEvt.clientY - dragRect.top;\n this._lastX = (touch || evt).clientX;\n this._lastY = (touch || evt).clientY;\n dragEl.style['will-change'] = 'all';\n dragStartFn = function dragStartFn() {\n pluginEvent('delayEnded', _this, {\n evt: evt\n });\n if (Sortable.eventCanceled) {\n _this._onDrop();\n return;\n }\n // Delayed drag has been triggered\n // we can re-enable the events: touchmove/mousemove\n _this._disableDelayedDragEvents();\n if (!FireFox && _this.nativeDraggable) {\n dragEl.draggable = true;\n }\n\n // Bind the events: dragstart/dragend\n _this._triggerDragStart(evt, touch);\n\n // Drag start event\n _dispatchEvent({\n sortable: _this,\n name: 'choose',\n originalEvent: evt\n });\n\n // Chosen item\n toggleClass(dragEl, options.chosenClass, true);\n };\n\n // Disable \"draggable\"\n options.ignore.split(',').forEach(function (criteria) {\n find(dragEl, criteria.trim(), _disableDraggable);\n });\n on(ownerDocument, 'dragover', nearestEmptyInsertDetectEvent);\n on(ownerDocument, 'mousemove', nearestEmptyInsertDetectEvent);\n on(ownerDocument, 'touchmove', nearestEmptyInsertDetectEvent);\n on(ownerDocument, 'mouseup', _this._onDrop);\n on(ownerDocument, 'touchend', _this._onDrop);\n on(ownerDocument, 'touchcancel', _this._onDrop);\n\n // Make dragEl draggable (must be before delay for FireFox)\n if (FireFox && this.nativeDraggable) {\n this.options.touchStartThreshold = 4;\n dragEl.draggable = true;\n }\n pluginEvent('delayStart', this, {\n evt: evt\n });\n\n // Delay is impossible for native DnD in Edge or IE\n if (options.delay && (!options.delayOnTouchOnly || touch) && (!this.nativeDraggable || !(Edge || IE11OrLess))) {\n if (Sortable.eventCanceled) {\n this._onDrop();\n return;\n }\n // If the user moves the pointer or let go the click or touch\n // before the delay has been reached:\n // disable the delayed drag\n on(ownerDocument, 'mouseup', _this._disableDelayedDrag);\n on(ownerDocument, 'touchend', _this._disableDelayedDrag);\n on(ownerDocument, 'touchcancel', _this._disableDelayedDrag);\n on(ownerDocument, 'mousemove', _this._delayedDragTouchMoveHandler);\n on(ownerDocument, 'touchmove', _this._delayedDragTouchMoveHandler);\n options.supportPointer && on(ownerDocument, 'pointermove', _this._delayedDragTouchMoveHandler);\n _this._dragStartTimer = setTimeout(dragStartFn, options.delay);\n } else {\n dragStartFn();\n }\n }\n },\n _delayedDragTouchMoveHandler: function _delayedDragTouchMoveHandler( /** TouchEvent|PointerEvent **/e) {\n var touch = e.touches ? e.touches[0] : e;\n if (Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) >= Math.floor(this.options.touchStartThreshold / (this.nativeDraggable && window.devicePixelRatio || 1))) {\n this._disableDelayedDrag();\n }\n },\n _disableDelayedDrag: function _disableDelayedDrag() {\n dragEl && _disableDraggable(dragEl);\n clearTimeout(this._dragStartTimer);\n this._disableDelayedDragEvents();\n },\n _disableDelayedDragEvents: function _disableDelayedDragEvents() {\n var ownerDocument = this.el.ownerDocument;\n off(ownerDocument, 'mouseup', this._disableDelayedDrag);\n off(ownerDocument, 'touchend', this._disableDelayedDrag);\n off(ownerDocument, 'touchcancel', this._disableDelayedDrag);\n off(ownerDocument, 'mousemove', this._delayedDragTouchMoveHandler);\n off(ownerDocument, 'touchmove', this._delayedDragTouchMoveHandler);\n off(ownerDocument, 'pointermove', this._delayedDragTouchMoveHandler);\n },\n _triggerDragStart: function _triggerDragStart( /** Event */evt, /** Touch */touch) {\n touch = touch || evt.pointerType == 'touch' && evt;\n if (!this.nativeDraggable || touch) {\n if (this.options.supportPointer) {\n on(document, 'pointermove', this._onTouchMove);\n } else if (touch) {\n on(document, 'touchmove', this._onTouchMove);\n } else {\n on(document, 'mousemove', this._onTouchMove);\n }\n } else {\n on(dragEl, 'dragend', this);\n on(rootEl, 'dragstart', this._onDragStart);\n }\n try {\n if (document.selection) {\n // Timeout neccessary for IE9\n _nextTick(function () {\n document.selection.empty();\n });\n } else {\n window.getSelection().removeAllRanges();\n }\n } catch (err) {}\n },\n _dragStarted: function _dragStarted(fallback, evt) {\n awaitingDragStarted = false;\n if (rootEl && dragEl) {\n pluginEvent('dragStarted', this, {\n evt: evt\n });\n if (this.nativeDraggable) {\n on(document, 'dragover', _checkOutsideTargetEl);\n }\n var options = this.options;\n\n // Apply effect\n !fallback && toggleClass(dragEl, options.dragClass, false);\n toggleClass(dragEl, options.ghostClass, true);\n Sortable.active = this;\n fallback && this._appendGhost();\n\n // Drag start event\n _dispatchEvent({\n sortable: this,\n name: 'start',\n originalEvent: evt\n });\n } else {\n this._nulling();\n }\n },\n _emulateDragOver: function _emulateDragOver() {\n if (touchEvt) {\n this._lastX = touchEvt.clientX;\n this._lastY = touchEvt.clientY;\n _hideGhostForTarget();\n var target = document.elementFromPoint(touchEvt.clientX, touchEvt.clientY);\n var parent = target;\n while (target && target.shadowRoot) {\n target = target.shadowRoot.elementFromPoint(touchEvt.clientX, touchEvt.clientY);\n if (target === parent) break;\n parent = target;\n }\n dragEl.parentNode[expando]._isOutsideThisEl(target);\n if (parent) {\n do {\n if (parent[expando]) {\n var inserted = void 0;\n inserted = parent[expando]._onDragOver({\n clientX: touchEvt.clientX,\n clientY: touchEvt.clientY,\n target: target,\n rootEl: parent\n });\n if (inserted && !this.options.dragoverBubble) {\n break;\n }\n }\n target = parent; // store last element\n }\n /* jshint boss:true */ while (parent = parent.parentNode);\n }\n _unhideGhostForTarget();\n }\n },\n _onTouchMove: function _onTouchMove( /**TouchEvent*/evt) {\n if (tapEvt) {\n var options = this.options,\n fallbackTolerance = options.fallbackTolerance,\n fallbackOffset = options.fallbackOffset,\n touch = evt.touches ? evt.touches[0] : evt,\n ghostMatrix = ghostEl && matrix(ghostEl, true),\n scaleX = ghostEl && ghostMatrix && ghostMatrix.a,\n scaleY = ghostEl && ghostMatrix && ghostMatrix.d,\n relativeScrollOffset = PositionGhostAbsolutely && ghostRelativeParent && getRelativeScrollOffset(ghostRelativeParent),\n dx = (touch.clientX - tapEvt.clientX + fallbackOffset.x) / (scaleX || 1) + (relativeScrollOffset ? relativeScrollOffset[0] - ghostRelativeParentInitialScroll[0] : 0) / (scaleX || 1),\n dy = (touch.clientY - tapEvt.clientY + fallbackOffset.y) / (scaleY || 1) + (relativeScrollOffset ? relativeScrollOffset[1] - ghostRelativeParentInitialScroll[1] : 0) / (scaleY || 1);\n\n // only set the status to dragging, when we are actually dragging\n if (!Sortable.active && !awaitingDragStarted) {\n if (fallbackTolerance && Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) < fallbackTolerance) {\n return;\n }\n this._onDragStart(evt, true);\n }\n if (ghostEl) {\n if (ghostMatrix) {\n ghostMatrix.e += dx - (lastDx || 0);\n ghostMatrix.f += dy - (lastDy || 0);\n } else {\n ghostMatrix = {\n a: 1,\n b: 0,\n c: 0,\n d: 1,\n e: dx,\n f: dy\n };\n }\n var cssMatrix = \"matrix(\".concat(ghostMatrix.a, \",\").concat(ghostMatrix.b, \",\").concat(ghostMatrix.c, \",\").concat(ghostMatrix.d, \",\").concat(ghostMatrix.e, \",\").concat(ghostMatrix.f, \")\");\n css(ghostEl, 'webkitTransform', cssMatrix);\n css(ghostEl, 'mozTransform', cssMatrix);\n css(ghostEl, 'msTransform', cssMatrix);\n css(ghostEl, 'transform', cssMatrix);\n lastDx = dx;\n lastDy = dy;\n touchEvt = touch;\n }\n evt.cancelable && evt.preventDefault();\n }\n },\n _appendGhost: function _appendGhost() {\n // Bug if using scale(): https://stackoverflow.com/questions/2637058\n // Not being adjusted for\n if (!ghostEl) {\n var container = this.options.fallbackOnBody ? document.body : rootEl,\n rect = getRect(dragEl, true, PositionGhostAbsolutely, true, container),\n options = this.options;\n\n // Position absolutely\n if (PositionGhostAbsolutely) {\n // Get relatively positioned parent\n ghostRelativeParent = container;\n while (css(ghostRelativeParent, 'position') === 'static' && css(ghostRelativeParent, 'transform') === 'none' && ghostRelativeParent !== document) {\n ghostRelativeParent = ghostRelativeParent.parentNode;\n }\n if (ghostRelativeParent !== document.body && ghostRelativeParent !== document.documentElement) {\n if (ghostRelativeParent === document) ghostRelativeParent = getWindowScrollingElement();\n rect.top += ghostRelativeParent.scrollTop;\n rect.left += ghostRelativeParent.scrollLeft;\n } else {\n ghostRelativeParent = getWindowScrollingElement();\n }\n ghostRelativeParentInitialScroll = getRelativeScrollOffset(ghostRelativeParent);\n }\n ghostEl = dragEl.cloneNode(true);\n toggleClass(ghostEl, options.ghostClass, false);\n toggleClass(ghostEl, options.fallbackClass, true);\n toggleClass(ghostEl, options.dragClass, true);\n css(ghostEl, 'transition', '');\n css(ghostEl, 'transform', '');\n css(ghostEl, 'box-sizing', 'border-box');\n css(ghostEl, 'margin', 0);\n css(ghostEl, 'top', rect.top);\n css(ghostEl, 'left', rect.left);\n css(ghostEl, 'width', rect.width);\n css(ghostEl, 'height', rect.height);\n css(ghostEl, 'opacity', '0.8');\n css(ghostEl, 'position', PositionGhostAbsolutely ? 'absolute' : 'fixed');\n css(ghostEl, 'zIndex', '100000');\n css(ghostEl, 'pointerEvents', 'none');\n Sortable.ghost = ghostEl;\n container.appendChild(ghostEl);\n\n // Set transform-origin\n css(ghostEl, 'transform-origin', tapDistanceLeft / parseInt(ghostEl.style.width) * 100 + '% ' + tapDistanceTop / parseInt(ghostEl.style.height) * 100 + '%');\n }\n },\n _onDragStart: function _onDragStart( /**Event*/evt, /**boolean*/fallback) {\n var _this = this;\n var dataTransfer = evt.dataTransfer;\n var options = _this.options;\n pluginEvent('dragStart', this, {\n evt: evt\n });\n if (Sortable.eventCanceled) {\n this._onDrop();\n return;\n }\n pluginEvent('setupClone', this);\n if (!Sortable.eventCanceled) {\n cloneEl = clone(dragEl);\n cloneEl.removeAttribute(\"id\");\n cloneEl.draggable = false;\n cloneEl.style['will-change'] = '';\n this._hideClone();\n toggleClass(cloneEl, this.options.chosenClass, false);\n Sortable.clone = cloneEl;\n }\n\n // #1143: IFrame support workaround\n _this.cloneId = _nextTick(function () {\n pluginEvent('clone', _this);\n if (Sortable.eventCanceled) return;\n if (!_this.options.removeCloneOnHide) {\n rootEl.insertBefore(cloneEl, dragEl);\n }\n _this._hideClone();\n _dispatchEvent({\n sortable: _this,\n name: 'clone'\n });\n });\n !fallback && toggleClass(dragEl, options.dragClass, true);\n\n // Set proper drop events\n if (fallback) {\n ignoreNextClick = true;\n _this._loopId = setInterval(_this._emulateDragOver, 50);\n } else {\n // Undo what was set in _prepareDragStart before drag started\n off(document, 'mouseup', _this._onDrop);\n off(document, 'touchend', _this._onDrop);\n off(document, 'touchcancel', _this._onDrop);\n if (dataTransfer) {\n dataTransfer.effectAllowed = 'move';\n options.setData && options.setData.call(_this, dataTransfer, dragEl);\n }\n on(document, 'drop', _this);\n\n // #1276 fix:\n css(dragEl, 'transform', 'translateZ(0)');\n }\n awaitingDragStarted = true;\n _this._dragStartId = _nextTick(_this._dragStarted.bind(_this, fallback, evt));\n on(document, 'selectstart', _this);\n moved = true;\n if (Safari) {\n css(document.body, 'user-select', 'none');\n }\n },\n // Returns true - if no further action is needed (either inserted or another condition)\n _onDragOver: function _onDragOver( /**Event*/evt) {\n var el = this.el,\n target = evt.target,\n dragRect,\n targetRect,\n revert,\n options = this.options,\n group = options.group,\n activeSortable = Sortable.active,\n isOwner = activeGroup === group,\n canSort = options.sort,\n fromSortable = putSortable || activeSortable,\n vertical,\n _this = this,\n completedFired = false;\n if (_silent) return;\n function dragOverEvent(name, extra) {\n pluginEvent(name, _this, _objectSpread2({\n evt: evt,\n isOwner: isOwner,\n axis: vertical ? 'vertical' : 'horizontal',\n revert: revert,\n dragRect: dragRect,\n targetRect: targetRect,\n canSort: canSort,\n fromSortable: fromSortable,\n target: target,\n completed: completed,\n onMove: function onMove(target, after) {\n return _onMove(rootEl, el, dragEl, dragRect, target, getRect(target), evt, after);\n },\n changed: changed\n }, extra));\n }\n\n // Capture animation state\n function capture() {\n dragOverEvent('dragOverAnimationCapture');\n _this.captureAnimationState();\n if (_this !== fromSortable) {\n fromSortable.captureAnimationState();\n }\n }\n\n // Return invocation when dragEl is inserted (or completed)\n function completed(insertion) {\n dragOverEvent('dragOverCompleted', {\n insertion: insertion\n });\n if (insertion) {\n // Clones must be hidden before folding animation to capture dragRectAbsolute properly\n if (isOwner) {\n activeSortable._hideClone();\n } else {\n activeSortable._showClone(_this);\n }\n if (_this !== fromSortable) {\n // Set ghost class to new sortable's ghost class\n toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : activeSortable.options.ghostClass, false);\n toggleClass(dragEl, options.ghostClass, true);\n }\n if (putSortable !== _this && _this !== Sortable.active) {\n putSortable = _this;\n } else if (_this === Sortable.active && putSortable) {\n putSortable = null;\n }\n\n // Animation\n if (fromSortable === _this) {\n _this._ignoreWhileAnimating = target;\n }\n _this.animateAll(function () {\n dragOverEvent('dragOverAnimationComplete');\n _this._ignoreWhileAnimating = null;\n });\n if (_this !== fromSortable) {\n fromSortable.animateAll();\n fromSortable._ignoreWhileAnimating = null;\n }\n }\n\n // Null lastTarget if it is not inside a previously swapped element\n if (target === dragEl && !dragEl.animated || target === el && !target.animated) {\n lastTarget = null;\n }\n\n // no bubbling and not fallback\n if (!options.dragoverBubble && !evt.rootEl && target !== document) {\n dragEl.parentNode[expando]._isOutsideThisEl(evt.target);\n\n // Do not detect for empty insert if already inserted\n !insertion && nearestEmptyInsertDetectEvent(evt);\n }\n !options.dragoverBubble && evt.stopPropagation && evt.stopPropagation();\n return completedFired = true;\n }\n\n // Call when dragEl has been inserted\n function changed() {\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n _dispatchEvent({\n sortable: _this,\n name: 'change',\n toEl: el,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex,\n originalEvent: evt\n });\n }\n if (evt.preventDefault !== void 0) {\n evt.cancelable && evt.preventDefault();\n }\n target = closest(target, options.draggable, el, true);\n dragOverEvent('dragOver');\n if (Sortable.eventCanceled) return completedFired;\n if (dragEl.contains(evt.target) || target.animated && target.animatingX && target.animatingY || _this._ignoreWhileAnimating === target) {\n return completed(false);\n }\n ignoreNextClick = false;\n if (activeSortable && !options.disabled && (isOwner ? canSort || (revert = parentEl !== rootEl) // Reverting item into the original list\n : putSortable === this || (this.lastPutMode = activeGroup.checkPull(this, activeSortable, dragEl, evt)) && group.checkPut(this, activeSortable, dragEl, evt))) {\n vertical = this._getDirection(evt, target) === 'vertical';\n dragRect = getRect(dragEl);\n dragOverEvent('dragOverValid');\n if (Sortable.eventCanceled) return completedFired;\n if (revert) {\n parentEl = rootEl; // actualization\n capture();\n this._hideClone();\n dragOverEvent('revert');\n if (!Sortable.eventCanceled) {\n if (nextEl) {\n rootEl.insertBefore(dragEl, nextEl);\n } else {\n rootEl.appendChild(dragEl);\n }\n }\n return completed(true);\n }\n var elLastChild = lastChild(el, options.draggable);\n if (!elLastChild || _ghostIsLast(evt, vertical, this) && !elLastChild.animated) {\n // Insert to end of list\n\n // If already at end of list: Do not insert\n if (elLastChild === dragEl) {\n return completed(false);\n }\n\n // if there is a last element, it is the target\n if (elLastChild && el === evt.target) {\n target = elLastChild;\n }\n if (target) {\n targetRect = getRect(target);\n }\n if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, !!target) !== false) {\n capture();\n if (elLastChild && elLastChild.nextSibling) {\n // the last draggable element is not the last node\n el.insertBefore(dragEl, elLastChild.nextSibling);\n } else {\n el.appendChild(dragEl);\n }\n parentEl = el; // actualization\n\n changed();\n return completed(true);\n }\n } else if (elLastChild && _ghostIsFirst(evt, vertical, this)) {\n // Insert to start of list\n var firstChild = getChild(el, 0, options, true);\n if (firstChild === dragEl) {\n return completed(false);\n }\n target = firstChild;\n targetRect = getRect(target);\n if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, false) !== false) {\n capture();\n el.insertBefore(dragEl, firstChild);\n parentEl = el; // actualization\n\n changed();\n return completed(true);\n }\n } else if (target.parentNode === el) {\n targetRect = getRect(target);\n var direction = 0,\n targetBeforeFirstSwap,\n differentLevel = dragEl.parentNode !== el,\n differentRowCol = !_dragElInRowColumn(dragEl.animated && dragEl.toRect || dragRect, target.animated && target.toRect || targetRect, vertical),\n side1 = vertical ? 'top' : 'left',\n scrolledPastTop = isScrolledPast(target, 'top', 'top') || isScrolledPast(dragEl, 'top', 'top'),\n scrollBefore = scrolledPastTop ? scrolledPastTop.scrollTop : void 0;\n if (lastTarget !== target) {\n targetBeforeFirstSwap = targetRect[side1];\n pastFirstInvertThresh = false;\n isCircumstantialInvert = !differentRowCol && options.invertSwap || differentLevel;\n }\n direction = _getSwapDirection(evt, target, targetRect, vertical, differentRowCol ? 1 : options.swapThreshold, options.invertedSwapThreshold == null ? options.swapThreshold : options.invertedSwapThreshold, isCircumstantialInvert, lastTarget === target);\n var sibling;\n if (direction !== 0) {\n // Check if target is beside dragEl in respective direction (ignoring hidden elements)\n var dragIndex = index(dragEl);\n do {\n dragIndex -= direction;\n sibling = parentEl.children[dragIndex];\n } while (sibling && (css(sibling, 'display') === 'none' || sibling === ghostEl));\n }\n // If dragEl is already beside target: Do not insert\n if (direction === 0 || sibling === target) {\n return completed(false);\n }\n lastTarget = target;\n lastDirection = direction;\n var nextSibling = target.nextElementSibling,\n after = false;\n after = direction === 1;\n var moveVector = _onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, after);\n if (moveVector !== false) {\n if (moveVector === 1 || moveVector === -1) {\n after = moveVector === 1;\n }\n _silent = true;\n setTimeout(_unsilent, 30);\n capture();\n if (after && !nextSibling) {\n el.appendChild(dragEl);\n } else {\n target.parentNode.insertBefore(dragEl, after ? nextSibling : target);\n }\n\n // Undo chrome's scroll adjustment (has no effect on other browsers)\n if (scrolledPastTop) {\n scrollBy(scrolledPastTop, 0, scrollBefore - scrolledPastTop.scrollTop);\n }\n parentEl = dragEl.parentNode; // actualization\n\n // must be done before animation\n if (targetBeforeFirstSwap !== undefined && !isCircumstantialInvert) {\n targetMoveDistance = Math.abs(targetBeforeFirstSwap - getRect(target)[side1]);\n }\n changed();\n return completed(true);\n }\n }\n if (el.contains(dragEl)) {\n return completed(false);\n }\n }\n return false;\n },\n _ignoreWhileAnimating: null,\n _offMoveEvents: function _offMoveEvents() {\n off(document, 'mousemove', this._onTouchMove);\n off(document, 'touchmove', this._onTouchMove);\n off(document, 'pointermove', this._onTouchMove);\n off(document, 'dragover', nearestEmptyInsertDetectEvent);\n off(document, 'mousemove', nearestEmptyInsertDetectEvent);\n off(document, 'touchmove', nearestEmptyInsertDetectEvent);\n },\n _offUpEvents: function _offUpEvents() {\n var ownerDocument = this.el.ownerDocument;\n off(ownerDocument, 'mouseup', this._onDrop);\n off(ownerDocument, 'touchend', this._onDrop);\n off(ownerDocument, 'pointerup', this._onDrop);\n off(ownerDocument, 'touchcancel', this._onDrop);\n off(document, 'selectstart', this);\n },\n _onDrop: function _onDrop( /**Event*/evt) {\n var el = this.el,\n options = this.options;\n\n // Get the index of the dragged element within its parent\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n pluginEvent('drop', this, {\n evt: evt\n });\n parentEl = dragEl && dragEl.parentNode;\n\n // Get again after plugin event\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n if (Sortable.eventCanceled) {\n this._nulling();\n return;\n }\n awaitingDragStarted = false;\n isCircumstantialInvert = false;\n pastFirstInvertThresh = false;\n clearInterval(this._loopId);\n clearTimeout(this._dragStartTimer);\n _cancelNextTick(this.cloneId);\n _cancelNextTick(this._dragStartId);\n\n // Unbind events\n if (this.nativeDraggable) {\n off(document, 'drop', this);\n off(el, 'dragstart', this._onDragStart);\n }\n this._offMoveEvents();\n this._offUpEvents();\n if (Safari) {\n css(document.body, 'user-select', '');\n }\n css(dragEl, 'transform', '');\n if (evt) {\n if (moved) {\n evt.cancelable && evt.preventDefault();\n !options.dropBubble && evt.stopPropagation();\n }\n ghostEl && ghostEl.parentNode && ghostEl.parentNode.removeChild(ghostEl);\n if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') {\n // Remove clone(s)\n cloneEl && cloneEl.parentNode && cloneEl.parentNode.removeChild(cloneEl);\n }\n if (dragEl) {\n if (this.nativeDraggable) {\n off(dragEl, 'dragend', this);\n }\n _disableDraggable(dragEl);\n dragEl.style['will-change'] = '';\n\n // Remove classes\n // ghostClass is added in dragStarted\n if (moved && !awaitingDragStarted) {\n toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : this.options.ghostClass, false);\n }\n toggleClass(dragEl, this.options.chosenClass, false);\n\n // Drag stop event\n _dispatchEvent({\n sortable: this,\n name: 'unchoose',\n toEl: parentEl,\n newIndex: null,\n newDraggableIndex: null,\n originalEvent: evt\n });\n if (rootEl !== parentEl) {\n if (newIndex >= 0) {\n // Add event\n _dispatchEvent({\n rootEl: parentEl,\n name: 'add',\n toEl: parentEl,\n fromEl: rootEl,\n originalEvent: evt\n });\n\n // Remove event\n _dispatchEvent({\n sortable: this,\n name: 'remove',\n toEl: parentEl,\n originalEvent: evt\n });\n\n // drag from one list and drop into another\n _dispatchEvent({\n rootEl: parentEl,\n name: 'sort',\n toEl: parentEl,\n fromEl: rootEl,\n originalEvent: evt\n });\n _dispatchEvent({\n sortable: this,\n name: 'sort',\n toEl: parentEl,\n originalEvent: evt\n });\n }\n putSortable && putSortable.save();\n } else {\n if (newIndex !== oldIndex) {\n if (newIndex >= 0) {\n // drag & drop within the same list\n _dispatchEvent({\n sortable: this,\n name: 'update',\n toEl: parentEl,\n originalEvent: evt\n });\n _dispatchEvent({\n sortable: this,\n name: 'sort',\n toEl: parentEl,\n originalEvent: evt\n });\n }\n }\n }\n if (Sortable.active) {\n /* jshint eqnull:true */\n if (newIndex == null || newIndex === -1) {\n newIndex = oldIndex;\n newDraggableIndex = oldDraggableIndex;\n }\n _dispatchEvent({\n sortable: this,\n name: 'end',\n toEl: parentEl,\n originalEvent: evt\n });\n\n // Save sorting\n this.save();\n }\n }\n }\n this._nulling();\n },\n _nulling: function _nulling() {\n pluginEvent('nulling', this);\n rootEl = dragEl = parentEl = ghostEl = nextEl = cloneEl = lastDownEl = cloneHidden = tapEvt = touchEvt = moved = newIndex = newDraggableIndex = oldIndex = oldDraggableIndex = lastTarget = lastDirection = putSortable = activeGroup = Sortable.dragged = Sortable.ghost = Sortable.clone = Sortable.active = null;\n savedInputChecked.forEach(function (el) {\n el.checked = true;\n });\n savedInputChecked.length = lastDx = lastDy = 0;\n },\n handleEvent: function handleEvent( /**Event*/evt) {\n switch (evt.type) {\n case 'drop':\n case 'dragend':\n this._onDrop(evt);\n break;\n case 'dragenter':\n case 'dragover':\n if (dragEl) {\n this._onDragOver(evt);\n _globalDragOver(evt);\n }\n break;\n case 'selectstart':\n evt.preventDefault();\n break;\n }\n },\n /**\r\n * Serializes the item into an array of string.\r\n * @returns {String[]}\r\n */\n toArray: function toArray() {\n var order = [],\n el,\n children = this.el.children,\n i = 0,\n n = children.length,\n options = this.options;\n for (; i < n; i++) {\n el = children[i];\n if (closest(el, options.draggable, this.el, false)) {\n order.push(el.getAttribute(options.dataIdAttr) || _generateId(el));\n }\n }\n return order;\n },\n /**\r\n * Sorts the elements according to the array.\r\n * @param {String[]} order order of the items\r\n */\n sort: function sort(order, useAnimation) {\n var items = {},\n rootEl = this.el;\n this.toArray().forEach(function (id, i) {\n var el = rootEl.children[i];\n if (closest(el, this.options.draggable, rootEl, false)) {\n items[id] = el;\n }\n }, this);\n useAnimation && this.captureAnimationState();\n order.forEach(function (id) {\n if (items[id]) {\n rootEl.removeChild(items[id]);\n rootEl.appendChild(items[id]);\n }\n });\n useAnimation && this.animateAll();\n },\n /**\r\n * Save the current sorting\r\n */\n save: function save() {\n var store = this.options.store;\n store && store.set && store.set(this);\n },\n /**\r\n * For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.\r\n * @param {HTMLElement} el\r\n * @param {String} [selector] default: `options.draggable`\r\n * @returns {HTMLElement|null}\r\n */\n closest: function closest$1(el, selector) {\n return closest(el, selector || this.options.draggable, this.el, false);\n },\n /**\r\n * Set/get option\r\n * @param {string} name\r\n * @param {*} [value]\r\n * @returns {*}\r\n */\n option: function option(name, value) {\n var options = this.options;\n if (value === void 0) {\n return options[name];\n } else {\n var modifiedValue = PluginManager.modifyOption(this, name, value);\n if (typeof modifiedValue !== 'undefined') {\n options[name] = modifiedValue;\n } else {\n options[name] = value;\n }\n if (name === 'group') {\n _prepareGroup(options);\n }\n }\n },\n /**\r\n * Destroy\r\n */\n destroy: function destroy() {\n pluginEvent('destroy', this);\n var el = this.el;\n el[expando] = null;\n off(el, 'mousedown', this._onTapStart);\n off(el, 'touchstart', this._onTapStart);\n off(el, 'pointerdown', this._onTapStart);\n if (this.nativeDraggable) {\n off(el, 'dragover', this);\n off(el, 'dragenter', this);\n }\n // Remove draggable attributes\n Array.prototype.forEach.call(el.querySelectorAll('[draggable]'), function (el) {\n el.removeAttribute('draggable');\n });\n this._onDrop();\n this._disableDelayedDragEvents();\n sortables.splice(sortables.indexOf(this.el), 1);\n this.el = el = null;\n },\n _hideClone: function _hideClone() {\n if (!cloneHidden) {\n pluginEvent('hideClone', this);\n if (Sortable.eventCanceled) return;\n css(cloneEl, 'display', 'none');\n if (this.options.removeCloneOnHide && cloneEl.parentNode) {\n cloneEl.parentNode.removeChild(cloneEl);\n }\n cloneHidden = true;\n }\n },\n _showClone: function _showClone(putSortable) {\n if (putSortable.lastPutMode !== 'clone') {\n this._hideClone();\n return;\n }\n if (cloneHidden) {\n pluginEvent('showClone', this);\n if (Sortable.eventCanceled) return;\n\n // show clone at dragEl or original position\n if (dragEl.parentNode == rootEl && !this.options.group.revertClone) {\n rootEl.insertBefore(cloneEl, dragEl);\n } else if (nextEl) {\n rootEl.insertBefore(cloneEl, nextEl);\n } else {\n rootEl.appendChild(cloneEl);\n }\n if (this.options.group.revertClone) {\n this.animate(dragEl, cloneEl);\n }\n css(cloneEl, 'display', '');\n cloneHidden = false;\n }\n }\n};\nfunction _globalDragOver( /**Event*/evt) {\n if (evt.dataTransfer) {\n evt.dataTransfer.dropEffect = 'move';\n }\n evt.cancelable && evt.preventDefault();\n}\nfunction _onMove(fromEl, toEl, dragEl, dragRect, targetEl, targetRect, originalEvent, willInsertAfter) {\n var evt,\n sortable = fromEl[expando],\n onMoveFn = sortable.options.onMove,\n retVal;\n // Support for new CustomEvent feature\n if (window.CustomEvent && !IE11OrLess && !Edge) {\n evt = new CustomEvent('move', {\n bubbles: true,\n cancelable: true\n });\n } else {\n evt = document.createEvent('Event');\n evt.initEvent('move', true, true);\n }\n evt.to = toEl;\n evt.from = fromEl;\n evt.dragged = dragEl;\n evt.draggedRect = dragRect;\n evt.related = targetEl || toEl;\n evt.relatedRect = targetRect || getRect(toEl);\n evt.willInsertAfter = willInsertAfter;\n evt.originalEvent = originalEvent;\n fromEl.dispatchEvent(evt);\n if (onMoveFn) {\n retVal = onMoveFn.call(sortable, evt, originalEvent);\n }\n return retVal;\n}\nfunction _disableDraggable(el) {\n el.draggable = false;\n}\nfunction _unsilent() {\n _silent = false;\n}\nfunction _ghostIsFirst(evt, vertical, sortable) {\n var firstElRect = getRect(getChild(sortable.el, 0, sortable.options, true));\n var sortableContentRect = getContentRect(sortable.el);\n var spacer = 10;\n return vertical ? evt.clientX < sortableContentRect.left - spacer || evt.clientY < firstElRect.top && evt.clientX < firstElRect.right : evt.clientY < sortableContentRect.top - spacer || evt.clientY < firstElRect.bottom && evt.clientX < firstElRect.left;\n}\nfunction _ghostIsLast(evt, vertical, sortable) {\n var lastElRect = getRect(lastChild(sortable.el, sortable.options.draggable));\n var sortableContentRect = getContentRect(sortable.el);\n var spacer = 10;\n return vertical ? evt.clientX > sortableContentRect.right + spacer || evt.clientY > lastElRect.bottom && evt.clientX > lastElRect.left : evt.clientY > sortableContentRect.bottom + spacer || evt.clientX > lastElRect.right && evt.clientY > lastElRect.top;\n}\nfunction _getSwapDirection(evt, target, targetRect, vertical, swapThreshold, invertedSwapThreshold, invertSwap, isLastTarget) {\n var mouseOnAxis = vertical ? evt.clientY : evt.clientX,\n targetLength = vertical ? targetRect.height : targetRect.width,\n targetS1 = vertical ? targetRect.top : targetRect.left,\n targetS2 = vertical ? targetRect.bottom : targetRect.right,\n invert = false;\n if (!invertSwap) {\n // Never invert or create dragEl shadow when target movemenet causes mouse to move past the end of regular swapThreshold\n if (isLastTarget && targetMoveDistance < targetLength * swapThreshold) {\n // multiplied only by swapThreshold because mouse will already be inside target by (1 - threshold) * targetLength / 2\n // check if past first invert threshold on side opposite of lastDirection\n if (!pastFirstInvertThresh && (lastDirection === 1 ? mouseOnAxis > targetS1 + targetLength * invertedSwapThreshold / 2 : mouseOnAxis < targetS2 - targetLength * invertedSwapThreshold / 2)) {\n // past first invert threshold, do not restrict inverted threshold to dragEl shadow\n pastFirstInvertThresh = true;\n }\n if (!pastFirstInvertThresh) {\n // dragEl shadow (target move distance shadow)\n if (lastDirection === 1 ? mouseOnAxis < targetS1 + targetMoveDistance // over dragEl shadow\n : mouseOnAxis > targetS2 - targetMoveDistance) {\n return -lastDirection;\n }\n } else {\n invert = true;\n }\n } else {\n // Regular\n if (mouseOnAxis > targetS1 + targetLength * (1 - swapThreshold) / 2 && mouseOnAxis < targetS2 - targetLength * (1 - swapThreshold) / 2) {\n return _getInsertDirection(target);\n }\n }\n }\n invert = invert || invertSwap;\n if (invert) {\n // Invert of regular\n if (mouseOnAxis < targetS1 + targetLength * invertedSwapThreshold / 2 || mouseOnAxis > targetS2 - targetLength * invertedSwapThreshold / 2) {\n return mouseOnAxis > targetS1 + targetLength / 2 ? 1 : -1;\n }\n }\n return 0;\n}\n\n/**\r\n * Gets the direction dragEl must be swapped relative to target in order to make it\r\n * seem that dragEl has been \"inserted\" into that element's position\r\n * @param {HTMLElement} target The target whose position dragEl is being inserted at\r\n * @return {Number} Direction dragEl must be swapped\r\n */\nfunction _getInsertDirection(target) {\n if (index(dragEl) < index(target)) {\n return 1;\n } else {\n return -1;\n }\n}\n\n/**\r\n * Generate id\r\n * @param {HTMLElement} el\r\n * @returns {String}\r\n * @private\r\n */\nfunction _generateId(el) {\n var str = el.tagName + el.className + el.src + el.href + el.textContent,\n i = str.length,\n sum = 0;\n while (i--) {\n sum += str.charCodeAt(i);\n }\n return sum.toString(36);\n}\nfunction _saveInputCheckedState(root) {\n savedInputChecked.length = 0;\n var inputs = root.getElementsByTagName('input');\n var idx = inputs.length;\n while (idx--) {\n var el = inputs[idx];\n el.checked && savedInputChecked.push(el);\n }\n}\nfunction _nextTick(fn) {\n return setTimeout(fn, 0);\n}\nfunction _cancelNextTick(id) {\n return clearTimeout(id);\n}\n\n// Fixed #973:\nif (documentExists) {\n on(document, 'touchmove', function (evt) {\n if ((Sortable.active || awaitingDragStarted) && evt.cancelable) {\n evt.preventDefault();\n }\n });\n}\n\n// Export utils\nSortable.utils = {\n on: on,\n off: off,\n css: css,\n find: find,\n is: function is(el, selector) {\n return !!closest(el, selector, el, false);\n },\n extend: extend,\n throttle: throttle,\n closest: closest,\n toggleClass: toggleClass,\n clone: clone,\n index: index,\n nextTick: _nextTick,\n cancelNextTick: _cancelNextTick,\n detectDirection: _detectDirection,\n getChild: getChild\n};\n\n/**\r\n * Get the Sortable instance of an element\r\n * @param {HTMLElement} element The element\r\n * @return {Sortable|undefined} The instance of Sortable\r\n */\nSortable.get = function (element) {\n return element[expando];\n};\n\n/**\r\n * Mount a plugin to Sortable\r\n * @param {...SortablePlugin|SortablePlugin[]} plugins Plugins being mounted\r\n */\nSortable.mount = function () {\n for (var _len = arguments.length, plugins = new Array(_len), _key = 0; _key < _len; _key++) {\n plugins[_key] = arguments[_key];\n }\n if (plugins[0].constructor === Array) plugins = plugins[0];\n plugins.forEach(function (plugin) {\n if (!plugin.prototype || !plugin.prototype.constructor) {\n throw \"Sortable: Mounted plugin must be a constructor function, not \".concat({}.toString.call(plugin));\n }\n if (plugin.utils) Sortable.utils = _objectSpread2(_objectSpread2({}, Sortable.utils), plugin.utils);\n PluginManager.mount(plugin);\n });\n};\n\n/**\r\n * Create sortable instance\r\n * @param {HTMLElement} el\r\n * @param {Object} [options]\r\n */\nSortable.create = function (el, options) {\n return new Sortable(el, options);\n};\n\n// Export\nSortable.version = version;\n\nvar autoScrolls = [],\n scrollEl,\n scrollRootEl,\n scrolling = false,\n lastAutoScrollX,\n lastAutoScrollY,\n touchEvt$1,\n pointerElemChangedInterval;\nfunction AutoScrollPlugin() {\n function AutoScroll() {\n this.defaults = {\n scroll: true,\n forceAutoScrollFallback: false,\n scrollSensitivity: 30,\n scrollSpeed: 10,\n bubbleScroll: true\n };\n\n // Bind all private methods\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n }\n }\n AutoScroll.prototype = {\n dragStarted: function dragStarted(_ref) {\n var originalEvent = _ref.originalEvent;\n if (this.sortable.nativeDraggable) {\n on(document, 'dragover', this._handleAutoScroll);\n } else {\n if (this.options.supportPointer) {\n on(document, 'pointermove', this._handleFallbackAutoScroll);\n } else if (originalEvent.touches) {\n on(document, 'touchmove', this._handleFallbackAutoScroll);\n } else {\n on(document, 'mousemove', this._handleFallbackAutoScroll);\n }\n }\n },\n dragOverCompleted: function dragOverCompleted(_ref2) {\n var originalEvent = _ref2.originalEvent;\n // For when bubbling is canceled and using fallback (fallback 'touchmove' always reached)\n if (!this.options.dragOverBubble && !originalEvent.rootEl) {\n this._handleAutoScroll(originalEvent);\n }\n },\n drop: function drop() {\n if (this.sortable.nativeDraggable) {\n off(document, 'dragover', this._handleAutoScroll);\n } else {\n off(document, 'pointermove', this._handleFallbackAutoScroll);\n off(document, 'touchmove', this._handleFallbackAutoScroll);\n off(document, 'mousemove', this._handleFallbackAutoScroll);\n }\n clearPointerElemChangedInterval();\n clearAutoScrolls();\n cancelThrottle();\n },\n nulling: function nulling() {\n touchEvt$1 = scrollRootEl = scrollEl = scrolling = pointerElemChangedInterval = lastAutoScrollX = lastAutoScrollY = null;\n autoScrolls.length = 0;\n },\n _handleFallbackAutoScroll: function _handleFallbackAutoScroll(evt) {\n this._handleAutoScroll(evt, true);\n },\n _handleAutoScroll: function _handleAutoScroll(evt, fallback) {\n var _this = this;\n var x = (evt.touches ? evt.touches[0] : evt).clientX,\n y = (evt.touches ? evt.touches[0] : evt).clientY,\n elem = document.elementFromPoint(x, y);\n touchEvt$1 = evt;\n\n // IE does not seem to have native autoscroll,\n // Edge's autoscroll seems too conditional,\n // MACOS Safari does not have autoscroll,\n // Firefox and Chrome are good\n if (fallback || this.options.forceAutoScrollFallback || Edge || IE11OrLess || Safari) {\n autoScroll(evt, this.options, elem, fallback);\n\n // Listener for pointer element change\n var ogElemScroller = getParentAutoScrollElement(elem, true);\n if (scrolling && (!pointerElemChangedInterval || x !== lastAutoScrollX || y !== lastAutoScrollY)) {\n pointerElemChangedInterval && clearPointerElemChangedInterval();\n // Detect for pointer elem change, emulating native DnD behaviour\n pointerElemChangedInterval = setInterval(function () {\n var newElem = getParentAutoScrollElement(document.elementFromPoint(x, y), true);\n if (newElem !== ogElemScroller) {\n ogElemScroller = newElem;\n clearAutoScrolls();\n }\n autoScroll(evt, _this.options, newElem, fallback);\n }, 10);\n lastAutoScrollX = x;\n lastAutoScrollY = y;\n }\n } else {\n // if DnD is enabled (and browser has good autoscrolling), first autoscroll will already scroll, so get parent autoscroll of first autoscroll\n if (!this.options.bubbleScroll || getParentAutoScrollElement(elem, true) === getWindowScrollingElement()) {\n clearAutoScrolls();\n return;\n }\n autoScroll(evt, this.options, getParentAutoScrollElement(elem, false), false);\n }\n }\n };\n return _extends(AutoScroll, {\n pluginName: 'scroll',\n initializeByDefault: true\n });\n}\nfunction clearAutoScrolls() {\n autoScrolls.forEach(function (autoScroll) {\n clearInterval(autoScroll.pid);\n });\n autoScrolls = [];\n}\nfunction clearPointerElemChangedInterval() {\n clearInterval(pointerElemChangedInterval);\n}\nvar autoScroll = throttle(function (evt, options, rootEl, isFallback) {\n // Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=505521\n if (!options.scroll) return;\n var x = (evt.touches ? evt.touches[0] : evt).clientX,\n y = (evt.touches ? evt.touches[0] : evt).clientY,\n sens = options.scrollSensitivity,\n speed = options.scrollSpeed,\n winScroller = getWindowScrollingElement();\n var scrollThisInstance = false,\n scrollCustomFn;\n\n // New scroll root, set scrollEl\n if (scrollRootEl !== rootEl) {\n scrollRootEl = rootEl;\n clearAutoScrolls();\n scrollEl = options.scroll;\n scrollCustomFn = options.scrollFn;\n if (scrollEl === true) {\n scrollEl = getParentAutoScrollElement(rootEl, true);\n }\n }\n var layersOut = 0;\n var currentParent = scrollEl;\n do {\n var el = currentParent,\n rect = getRect(el),\n top = rect.top,\n bottom = rect.bottom,\n left = rect.left,\n right = rect.right,\n width = rect.width,\n height = rect.height,\n canScrollX = void 0,\n canScrollY = void 0,\n scrollWidth = el.scrollWidth,\n scrollHeight = el.scrollHeight,\n elCSS = css(el),\n scrollPosX = el.scrollLeft,\n scrollPosY = el.scrollTop;\n if (el === winScroller) {\n canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll' || elCSS.overflowX === 'visible');\n canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll' || elCSS.overflowY === 'visible');\n } else {\n canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll');\n canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll');\n }\n var vx = canScrollX && (Math.abs(right - x) <= sens && scrollPosX + width < scrollWidth) - (Math.abs(left - x) <= sens && !!scrollPosX);\n var vy = canScrollY && (Math.abs(bottom - y) <= sens && scrollPosY + height < scrollHeight) - (Math.abs(top - y) <= sens && !!scrollPosY);\n if (!autoScrolls[layersOut]) {\n for (var i = 0; i <= layersOut; i++) {\n if (!autoScrolls[i]) {\n autoScrolls[i] = {};\n }\n }\n }\n if (autoScrolls[layersOut].vx != vx || autoScrolls[layersOut].vy != vy || autoScrolls[layersOut].el !== el) {\n autoScrolls[layersOut].el = el;\n autoScrolls[layersOut].vx = vx;\n autoScrolls[layersOut].vy = vy;\n clearInterval(autoScrolls[layersOut].pid);\n if (vx != 0 || vy != 0) {\n scrollThisInstance = true;\n /* jshint loopfunc:true */\n autoScrolls[layersOut].pid = setInterval(function () {\n // emulate drag over during autoscroll (fallback), emulating native DnD behaviour\n if (isFallback && this.layer === 0) {\n Sortable.active._onTouchMove(touchEvt$1); // To move ghost if it is positioned absolutely\n }\n var scrollOffsetY = autoScrolls[this.layer].vy ? autoScrolls[this.layer].vy * speed : 0;\n var scrollOffsetX = autoScrolls[this.layer].vx ? autoScrolls[this.layer].vx * speed : 0;\n if (typeof scrollCustomFn === 'function') {\n if (scrollCustomFn.call(Sortable.dragged.parentNode[expando], scrollOffsetX, scrollOffsetY, evt, touchEvt$1, autoScrolls[this.layer].el) !== 'continue') {\n return;\n }\n }\n scrollBy(autoScrolls[this.layer].el, scrollOffsetX, scrollOffsetY);\n }.bind({\n layer: layersOut\n }), 24);\n }\n }\n layersOut++;\n } while (options.bubbleScroll && currentParent !== winScroller && (currentParent = getParentAutoScrollElement(currentParent, false)));\n scrolling = scrollThisInstance; // in case another function catches scrolling as false in between when it is not\n}, 30);\n\nvar drop = function drop(_ref) {\n var originalEvent = _ref.originalEvent,\n putSortable = _ref.putSortable,\n dragEl = _ref.dragEl,\n activeSortable = _ref.activeSortable,\n dispatchSortableEvent = _ref.dispatchSortableEvent,\n hideGhostForTarget = _ref.hideGhostForTarget,\n unhideGhostForTarget = _ref.unhideGhostForTarget;\n if (!originalEvent) return;\n var toSortable = putSortable || activeSortable;\n hideGhostForTarget();\n var touch = originalEvent.changedTouches && originalEvent.changedTouches.length ? originalEvent.changedTouches[0] : originalEvent;\n var target = document.elementFromPoint(touch.clientX, touch.clientY);\n unhideGhostForTarget();\n if (toSortable && !toSortable.el.contains(target)) {\n dispatchSortableEvent('spill');\n this.onSpill({\n dragEl: dragEl,\n putSortable: putSortable\n });\n }\n};\nfunction Revert() {}\nRevert.prototype = {\n startIndex: null,\n dragStart: function dragStart(_ref2) {\n var oldDraggableIndex = _ref2.oldDraggableIndex;\n this.startIndex = oldDraggableIndex;\n },\n onSpill: function onSpill(_ref3) {\n var dragEl = _ref3.dragEl,\n putSortable = _ref3.putSortable;\n this.sortable.captureAnimationState();\n if (putSortable) {\n putSortable.captureAnimationState();\n }\n var nextSibling = getChild(this.sortable.el, this.startIndex, this.options);\n if (nextSibling) {\n this.sortable.el.insertBefore(dragEl, nextSibling);\n } else {\n this.sortable.el.appendChild(dragEl);\n }\n this.sortable.animateAll();\n if (putSortable) {\n putSortable.animateAll();\n }\n },\n drop: drop\n};\n_extends(Revert, {\n pluginName: 'revertOnSpill'\n});\nfunction Remove() {}\nRemove.prototype = {\n onSpill: function onSpill(_ref4) {\n var dragEl = _ref4.dragEl,\n putSortable = _ref4.putSortable;\n var parentSortable = putSortable || this.sortable;\n parentSortable.captureAnimationState();\n dragEl.parentNode && dragEl.parentNode.removeChild(dragEl);\n parentSortable.animateAll();\n },\n drop: drop\n};\n_extends(Remove, {\n pluginName: 'removeOnSpill'\n});\n\nvar lastSwapEl;\nfunction SwapPlugin() {\n function Swap() {\n this.defaults = {\n swapClass: 'sortable-swap-highlight'\n };\n }\n Swap.prototype = {\n dragStart: function dragStart(_ref) {\n var dragEl = _ref.dragEl;\n lastSwapEl = dragEl;\n },\n dragOverValid: function dragOverValid(_ref2) {\n var completed = _ref2.completed,\n target = _ref2.target,\n onMove = _ref2.onMove,\n activeSortable = _ref2.activeSortable,\n changed = _ref2.changed,\n cancel = _ref2.cancel;\n if (!activeSortable.options.swap) return;\n var el = this.sortable.el,\n options = this.options;\n if (target && target !== el) {\n var prevSwapEl = lastSwapEl;\n if (onMove(target) !== false) {\n toggleClass(target, options.swapClass, true);\n lastSwapEl = target;\n } else {\n lastSwapEl = null;\n }\n if (prevSwapEl && prevSwapEl !== lastSwapEl) {\n toggleClass(prevSwapEl, options.swapClass, false);\n }\n }\n changed();\n completed(true);\n cancel();\n },\n drop: function drop(_ref3) {\n var activeSortable = _ref3.activeSortable,\n putSortable = _ref3.putSortable,\n dragEl = _ref3.dragEl;\n var toSortable = putSortable || this.sortable;\n var options = this.options;\n lastSwapEl && toggleClass(lastSwapEl, options.swapClass, false);\n if (lastSwapEl && (options.swap || putSortable && putSortable.options.swap)) {\n if (dragEl !== lastSwapEl) {\n toSortable.captureAnimationState();\n if (toSortable !== activeSortable) activeSortable.captureAnimationState();\n swapNodes(dragEl, lastSwapEl);\n toSortable.animateAll();\n if (toSortable !== activeSortable) activeSortable.animateAll();\n }\n }\n },\n nulling: function nulling() {\n lastSwapEl = null;\n }\n };\n return _extends(Swap, {\n pluginName: 'swap',\n eventProperties: function eventProperties() {\n return {\n swapItem: lastSwapEl\n };\n }\n });\n}\nfunction swapNodes(n1, n2) {\n var p1 = n1.parentNode,\n p2 = n2.parentNode,\n i1,\n i2;\n if (!p1 || !p2 || p1.isEqualNode(n2) || p2.isEqualNode(n1)) return;\n i1 = index(n1);\n i2 = index(n2);\n if (p1.isEqualNode(p2) && i1 < i2) {\n i2++;\n }\n p1.insertBefore(n2, p1.children[i1]);\n p2.insertBefore(n1, p2.children[i2]);\n}\n\nvar multiDragElements = [],\n multiDragClones = [],\n lastMultiDragSelect,\n // for selection with modifier key down (SHIFT)\n multiDragSortable,\n initialFolding = false,\n // Initial multi-drag fold when drag started\n folding = false,\n // Folding any other time\n dragStarted = false,\n dragEl$1,\n clonesFromRect,\n clonesHidden;\nfunction MultiDragPlugin() {\n function MultiDrag(sortable) {\n // Bind all private methods\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n }\n if (!sortable.options.avoidImplicitDeselect) {\n if (sortable.options.supportPointer) {\n on(document, 'pointerup', this._deselectMultiDrag);\n } else {\n on(document, 'mouseup', this._deselectMultiDrag);\n on(document, 'touchend', this._deselectMultiDrag);\n }\n }\n on(document, 'keydown', this._checkKeyDown);\n on(document, 'keyup', this._checkKeyUp);\n this.defaults = {\n selectedClass: 'sortable-selected',\n multiDragKey: null,\n avoidImplicitDeselect: false,\n setData: function setData(dataTransfer, dragEl) {\n var data = '';\n if (multiDragElements.length && multiDragSortable === sortable) {\n multiDragElements.forEach(function (multiDragElement, i) {\n data += (!i ? '' : ', ') + multiDragElement.textContent;\n });\n } else {\n data = dragEl.textContent;\n }\n dataTransfer.setData('Text', data);\n }\n };\n }\n MultiDrag.prototype = {\n multiDragKeyDown: false,\n isMultiDrag: false,\n delayStartGlobal: function delayStartGlobal(_ref) {\n var dragged = _ref.dragEl;\n dragEl$1 = dragged;\n },\n delayEnded: function delayEnded() {\n this.isMultiDrag = ~multiDragElements.indexOf(dragEl$1);\n },\n setupClone: function setupClone(_ref2) {\n var sortable = _ref2.sortable,\n cancel = _ref2.cancel;\n if (!this.isMultiDrag) return;\n for (var i = 0; i < multiDragElements.length; i++) {\n multiDragClones.push(clone(multiDragElements[i]));\n multiDragClones[i].sortableIndex = multiDragElements[i].sortableIndex;\n multiDragClones[i].draggable = false;\n multiDragClones[i].style['will-change'] = '';\n toggleClass(multiDragClones[i], this.options.selectedClass, false);\n multiDragElements[i] === dragEl$1 && toggleClass(multiDragClones[i], this.options.chosenClass, false);\n }\n sortable._hideClone();\n cancel();\n },\n clone: function clone(_ref3) {\n var sortable = _ref3.sortable,\n rootEl = _ref3.rootEl,\n dispatchSortableEvent = _ref3.dispatchSortableEvent,\n cancel = _ref3.cancel;\n if (!this.isMultiDrag) return;\n if (!this.options.removeCloneOnHide) {\n if (multiDragElements.length && multiDragSortable === sortable) {\n insertMultiDragClones(true, rootEl);\n dispatchSortableEvent('clone');\n cancel();\n }\n }\n },\n showClone: function showClone(_ref4) {\n var cloneNowShown = _ref4.cloneNowShown,\n rootEl = _ref4.rootEl,\n cancel = _ref4.cancel;\n if (!this.isMultiDrag) return;\n insertMultiDragClones(false, rootEl);\n multiDragClones.forEach(function (clone) {\n css(clone, 'display', '');\n });\n cloneNowShown();\n clonesHidden = false;\n cancel();\n },\n hideClone: function hideClone(_ref5) {\n var _this = this;\n var sortable = _ref5.sortable,\n cloneNowHidden = _ref5.cloneNowHidden,\n cancel = _ref5.cancel;\n if (!this.isMultiDrag) return;\n multiDragClones.forEach(function (clone) {\n css(clone, 'display', 'none');\n if (_this.options.removeCloneOnHide && clone.parentNode) {\n clone.parentNode.removeChild(clone);\n }\n });\n cloneNowHidden();\n clonesHidden = true;\n cancel();\n },\n dragStartGlobal: function dragStartGlobal(_ref6) {\n var sortable = _ref6.sortable;\n if (!this.isMultiDrag && multiDragSortable) {\n multiDragSortable.multiDrag._deselectMultiDrag();\n }\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.sortableIndex = index(multiDragElement);\n });\n\n // Sort multi-drag elements\n multiDragElements = multiDragElements.sort(function (a, b) {\n return a.sortableIndex - b.sortableIndex;\n });\n dragStarted = true;\n },\n dragStarted: function dragStarted(_ref7) {\n var _this2 = this;\n var sortable = _ref7.sortable;\n if (!this.isMultiDrag) return;\n if (this.options.sort) {\n // Capture rects,\n // hide multi drag elements (by positioning them absolute),\n // set multi drag elements rects to dragRect,\n // show multi drag elements,\n // animate to rects,\n // unset rects & remove from DOM\n\n sortable.captureAnimationState();\n if (this.options.animation) {\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n css(multiDragElement, 'position', 'absolute');\n });\n var dragRect = getRect(dragEl$1, false, true, true);\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n setRect(multiDragElement, dragRect);\n });\n folding = true;\n initialFolding = true;\n }\n }\n sortable.animateAll(function () {\n folding = false;\n initialFolding = false;\n if (_this2.options.animation) {\n multiDragElements.forEach(function (multiDragElement) {\n unsetRect(multiDragElement);\n });\n }\n\n // Remove all auxiliary multidrag items from el, if sorting enabled\n if (_this2.options.sort) {\n removeMultiDragElements();\n }\n });\n },\n dragOver: function dragOver(_ref8) {\n var target = _ref8.target,\n completed = _ref8.completed,\n cancel = _ref8.cancel;\n if (folding && ~multiDragElements.indexOf(target)) {\n completed(false);\n cancel();\n }\n },\n revert: function revert(_ref9) {\n var fromSortable = _ref9.fromSortable,\n rootEl = _ref9.rootEl,\n sortable = _ref9.sortable,\n dragRect = _ref9.dragRect;\n if (multiDragElements.length > 1) {\n // Setup unfold animation\n multiDragElements.forEach(function (multiDragElement) {\n sortable.addAnimationState({\n target: multiDragElement,\n rect: folding ? getRect(multiDragElement) : dragRect\n });\n unsetRect(multiDragElement);\n multiDragElement.fromRect = dragRect;\n fromSortable.removeAnimationState(multiDragElement);\n });\n folding = false;\n insertMultiDragElements(!this.options.removeCloneOnHide, rootEl);\n }\n },\n dragOverCompleted: function dragOverCompleted(_ref10) {\n var sortable = _ref10.sortable,\n isOwner = _ref10.isOwner,\n insertion = _ref10.insertion,\n activeSortable = _ref10.activeSortable,\n parentEl = _ref10.parentEl,\n putSortable = _ref10.putSortable;\n var options = this.options;\n if (insertion) {\n // Clones must be hidden before folding animation to capture dragRectAbsolute properly\n if (isOwner) {\n activeSortable._hideClone();\n }\n initialFolding = false;\n // If leaving sort:false root, or already folding - Fold to new location\n if (options.animation && multiDragElements.length > 1 && (folding || !isOwner && !activeSortable.options.sort && !putSortable)) {\n // Fold: Set all multi drag elements's rects to dragEl's rect when multi-drag elements are invisible\n var dragRectAbsolute = getRect(dragEl$1, false, true, true);\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n setRect(multiDragElement, dragRectAbsolute);\n\n // Move element(s) to end of parentEl so that it does not interfere with multi-drag clones insertion if they are inserted\n // while folding, and so that we can capture them again because old sortable will no longer be fromSortable\n parentEl.appendChild(multiDragElement);\n });\n folding = true;\n }\n\n // Clones must be shown (and check to remove multi drags) after folding when interfering multiDragElements are moved out\n if (!isOwner) {\n // Only remove if not folding (folding will remove them anyways)\n if (!folding) {\n removeMultiDragElements();\n }\n if (multiDragElements.length > 1) {\n var clonesHiddenBefore = clonesHidden;\n activeSortable._showClone(sortable);\n\n // Unfold animation for clones if showing from hidden\n if (activeSortable.options.animation && !clonesHidden && clonesHiddenBefore) {\n multiDragClones.forEach(function (clone) {\n activeSortable.addAnimationState({\n target: clone,\n rect: clonesFromRect\n });\n clone.fromRect = clonesFromRect;\n clone.thisAnimationDuration = null;\n });\n }\n } else {\n activeSortable._showClone(sortable);\n }\n }\n }\n },\n dragOverAnimationCapture: function dragOverAnimationCapture(_ref11) {\n var dragRect = _ref11.dragRect,\n isOwner = _ref11.isOwner,\n activeSortable = _ref11.activeSortable;\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.thisAnimationDuration = null;\n });\n if (activeSortable.options.animation && !isOwner && activeSortable.multiDrag.isMultiDrag) {\n clonesFromRect = _extends({}, dragRect);\n var dragMatrix = matrix(dragEl$1, true);\n clonesFromRect.top -= dragMatrix.f;\n clonesFromRect.left -= dragMatrix.e;\n }\n },\n dragOverAnimationComplete: function dragOverAnimationComplete() {\n if (folding) {\n folding = false;\n removeMultiDragElements();\n }\n },\n drop: function drop(_ref12) {\n var evt = _ref12.originalEvent,\n rootEl = _ref12.rootEl,\n parentEl = _ref12.parentEl,\n sortable = _ref12.sortable,\n dispatchSortableEvent = _ref12.dispatchSortableEvent,\n oldIndex = _ref12.oldIndex,\n putSortable = _ref12.putSortable;\n var toSortable = putSortable || this.sortable;\n if (!evt) return;\n var options = this.options,\n children = parentEl.children;\n\n // Multi-drag selection\n if (!dragStarted) {\n if (options.multiDragKey && !this.multiDragKeyDown) {\n this._deselectMultiDrag();\n }\n toggleClass(dragEl$1, options.selectedClass, !~multiDragElements.indexOf(dragEl$1));\n if (!~multiDragElements.indexOf(dragEl$1)) {\n multiDragElements.push(dragEl$1);\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'select',\n targetEl: dragEl$1,\n originalEvent: evt\n });\n\n // Modifier activated, select from last to dragEl\n if (evt.shiftKey && lastMultiDragSelect && sortable.el.contains(lastMultiDragSelect)) {\n var lastIndex = index(lastMultiDragSelect),\n currentIndex = index(dragEl$1);\n if (~lastIndex && ~currentIndex && lastIndex !== currentIndex) {\n // Must include lastMultiDragSelect (select it), in case modified selection from no selection\n // (but previous selection existed)\n var n, i;\n if (currentIndex > lastIndex) {\n i = lastIndex;\n n = currentIndex;\n } else {\n i = currentIndex;\n n = lastIndex + 1;\n }\n for (; i < n; i++) {\n if (~multiDragElements.indexOf(children[i])) continue;\n toggleClass(children[i], options.selectedClass, true);\n multiDragElements.push(children[i]);\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'select',\n targetEl: children[i],\n originalEvent: evt\n });\n }\n }\n } else {\n lastMultiDragSelect = dragEl$1;\n }\n multiDragSortable = toSortable;\n } else {\n multiDragElements.splice(multiDragElements.indexOf(dragEl$1), 1);\n lastMultiDragSelect = null;\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'deselect',\n targetEl: dragEl$1,\n originalEvent: evt\n });\n }\n }\n\n // Multi-drag drop\n if (dragStarted && this.isMultiDrag) {\n folding = false;\n // Do not \"unfold\" after around dragEl if reverted\n if ((parentEl[expando].options.sort || parentEl !== rootEl) && multiDragElements.length > 1) {\n var dragRect = getRect(dragEl$1),\n multiDragIndex = index(dragEl$1, ':not(.' + this.options.selectedClass + ')');\n if (!initialFolding && options.animation) dragEl$1.thisAnimationDuration = null;\n toSortable.captureAnimationState();\n if (!initialFolding) {\n if (options.animation) {\n dragEl$1.fromRect = dragRect;\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.thisAnimationDuration = null;\n if (multiDragElement !== dragEl$1) {\n var rect = folding ? getRect(multiDragElement) : dragRect;\n multiDragElement.fromRect = rect;\n\n // Prepare unfold animation\n toSortable.addAnimationState({\n target: multiDragElement,\n rect: rect\n });\n }\n });\n }\n\n // Multi drag elements are not necessarily removed from the DOM on drop, so to reinsert\n // properly they must all be removed\n removeMultiDragElements();\n multiDragElements.forEach(function (multiDragElement) {\n if (children[multiDragIndex]) {\n parentEl.insertBefore(multiDragElement, children[multiDragIndex]);\n } else {\n parentEl.appendChild(multiDragElement);\n }\n multiDragIndex++;\n });\n\n // If initial folding is done, the elements may have changed position because they are now\n // unfolding around dragEl, even though dragEl may not have his index changed, so update event\n // must be fired here as Sortable will not.\n if (oldIndex === index(dragEl$1)) {\n var update = false;\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement.sortableIndex !== index(multiDragElement)) {\n update = true;\n return;\n }\n });\n if (update) {\n dispatchSortableEvent('update');\n dispatchSortableEvent('sort');\n }\n }\n }\n\n // Must be done after capturing individual rects (scroll bar)\n multiDragElements.forEach(function (multiDragElement) {\n unsetRect(multiDragElement);\n });\n toSortable.animateAll();\n }\n multiDragSortable = toSortable;\n }\n\n // Remove clones if necessary\n if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') {\n multiDragClones.forEach(function (clone) {\n clone.parentNode && clone.parentNode.removeChild(clone);\n });\n }\n },\n nullingGlobal: function nullingGlobal() {\n this.isMultiDrag = dragStarted = false;\n multiDragClones.length = 0;\n },\n destroyGlobal: function destroyGlobal() {\n this._deselectMultiDrag();\n off(document, 'pointerup', this._deselectMultiDrag);\n off(document, 'mouseup', this._deselectMultiDrag);\n off(document, 'touchend', this._deselectMultiDrag);\n off(document, 'keydown', this._checkKeyDown);\n off(document, 'keyup', this._checkKeyUp);\n },\n _deselectMultiDrag: function _deselectMultiDrag(evt) {\n if (typeof dragStarted !== \"undefined\" && dragStarted) return;\n\n // Only deselect if selection is in this sortable\n if (multiDragSortable !== this.sortable) return;\n\n // Only deselect if target is not item in this sortable\n if (evt && closest(evt.target, this.options.draggable, this.sortable.el, false)) return;\n\n // Only deselect if left click\n if (evt && evt.button !== 0) return;\n while (multiDragElements.length) {\n var el = multiDragElements[0];\n toggleClass(el, this.options.selectedClass, false);\n multiDragElements.shift();\n dispatchEvent({\n sortable: this.sortable,\n rootEl: this.sortable.el,\n name: 'deselect',\n targetEl: el,\n originalEvent: evt\n });\n }\n },\n _checkKeyDown: function _checkKeyDown(evt) {\n if (evt.key === this.options.multiDragKey) {\n this.multiDragKeyDown = true;\n }\n },\n _checkKeyUp: function _checkKeyUp(evt) {\n if (evt.key === this.options.multiDragKey) {\n this.multiDragKeyDown = false;\n }\n }\n };\n return _extends(MultiDrag, {\n // Static methods & properties\n pluginName: 'multiDrag',\n utils: {\n /**\r\n * Selects the provided multi-drag item\r\n * @param {HTMLElement} el The element to be selected\r\n */\n select: function select(el) {\n var sortable = el.parentNode[expando];\n if (!sortable || !sortable.options.multiDrag || ~multiDragElements.indexOf(el)) return;\n if (multiDragSortable && multiDragSortable !== sortable) {\n multiDragSortable.multiDrag._deselectMultiDrag();\n multiDragSortable = sortable;\n }\n toggleClass(el, sortable.options.selectedClass, true);\n multiDragElements.push(el);\n },\n /**\r\n * Deselects the provided multi-drag item\r\n * @param {HTMLElement} el The element to be deselected\r\n */\n deselect: function deselect(el) {\n var sortable = el.parentNode[expando],\n index = multiDragElements.indexOf(el);\n if (!sortable || !sortable.options.multiDrag || !~index) return;\n toggleClass(el, sortable.options.selectedClass, false);\n multiDragElements.splice(index, 1);\n }\n },\n eventProperties: function eventProperties() {\n var _this3 = this;\n var oldIndicies = [],\n newIndicies = [];\n multiDragElements.forEach(function (multiDragElement) {\n oldIndicies.push({\n multiDragElement: multiDragElement,\n index: multiDragElement.sortableIndex\n });\n\n // multiDragElements will already be sorted if folding\n var newIndex;\n if (folding && multiDragElement !== dragEl$1) {\n newIndex = -1;\n } else if (folding) {\n newIndex = index(multiDragElement, ':not(.' + _this3.options.selectedClass + ')');\n } else {\n newIndex = index(multiDragElement);\n }\n newIndicies.push({\n multiDragElement: multiDragElement,\n index: newIndex\n });\n });\n return {\n items: _toConsumableArray(multiDragElements),\n clones: [].concat(multiDragClones),\n oldIndicies: oldIndicies,\n newIndicies: newIndicies\n };\n },\n optionListeners: {\n multiDragKey: function multiDragKey(key) {\n key = key.toLowerCase();\n if (key === 'ctrl') {\n key = 'Control';\n } else if (key.length > 1) {\n key = key.charAt(0).toUpperCase() + key.substr(1);\n }\n return key;\n }\n }\n });\n}\nfunction insertMultiDragElements(clonesInserted, rootEl) {\n multiDragElements.forEach(function (multiDragElement, i) {\n var target = rootEl.children[multiDragElement.sortableIndex + (clonesInserted ? Number(i) : 0)];\n if (target) {\n rootEl.insertBefore(multiDragElement, target);\n } else {\n rootEl.appendChild(multiDragElement);\n }\n });\n}\n\n/**\r\n * Insert multi-drag clones\r\n * @param {[Boolean]} elementsInserted Whether the multi-drag elements are inserted\r\n * @param {HTMLElement} rootEl\r\n */\nfunction insertMultiDragClones(elementsInserted, rootEl) {\n multiDragClones.forEach(function (clone, i) {\n var target = rootEl.children[clone.sortableIndex + (elementsInserted ? Number(i) : 0)];\n if (target) {\n rootEl.insertBefore(clone, target);\n } else {\n rootEl.appendChild(clone);\n }\n });\n}\nfunction removeMultiDragElements() {\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n multiDragElement.parentNode && multiDragElement.parentNode.removeChild(multiDragElement);\n });\n}\n\nSortable.mount(new AutoScrollPlugin());\nSortable.mount(Remove, Revert);\n\nexport default Sortable;\nexport { MultiDragPlugin as MultiDrag, Sortable, SwapPlugin as Swap };\n","/*Copyright (c) 2020 Jason Zissman\r\nPermission is hereby granted, free of charge, to any person obtaining a copy of\r\nthis software and associated documentation files (the \"Software\"), to deal in\r\nthe Software without restriction, including without limitation the rights to\r\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software is furnished to do so,\r\nsubject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\r\nFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\r\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\r\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r\nCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n*/\r\n\r\n(() => {\r\n\t((root, factory) => {\r\n\t\tif (typeof module !== 'undefined' && module.exports) {\r\n\t\t\t// CommonJS\r\n\t\t\treturn module.exports = factory();\r\n\t\t} else if (typeof define === 'function' && define.amd) {\r\n\t\t\t// AMD\r\n\t\t\tdefine([], () => {\r\n\t\t\t\treturn (root.TimeMe = factory());\r\n\t\t\t});\r\n\t\t} else {\r\n\t\t\t// Global Variables\r\n\t\t\treturn root.TimeMe = factory();\r\n\t\t}\r\n\t})(this, () => {\r\n\r\n\t\tlet TimeMe = {\r\n\r\n\t\t\tstartStopTimes: {},\r\n\t\t\tidleTimeoutMs: 30 * 1000,\r\n\t\t\tcurrentIdleTimeMs: 0,\r\n\t\t\tcheckIdleStateRateMs: 250,\r\n\t\t\tisUserCurrentlyOnPage: true, \r\n\t\t\tisUserCurrentlyIdle: false, \r\n\t\t\tcurrentPageName: \"default-page-name\",\r\n\t\t\ttimeElapsedCallbacks: [],\r\n\t\t\tuserLeftCallbacks: [],\r\n\t\t\tuserReturnCallbacks: [],\r\n\r\n\t\t\ttrackTimeOnElement: (elementId) => {\r\n\t\t\t\tlet element = document.getElementById(elementId);\r\n\t\t\t\tif (element) {\r\n\t\t\t\t\telement.addEventListener(\"mouseover\", () => {\r\n\t\t\t\t\t\tTimeMe.startTimer(elementId);\r\n\t\t\t\t\t});\r\n\t\t\t\t\telement.addEventListener(\"mousemove\", () => {\r\n\t\t\t\t\t\tTimeMe.startTimer(elementId);\r\n\t\t\t\t\t});\r\n\t\t\t\t\telement.addEventListener(\"mouseleave\", () => {\r\n\t\t\t\t\t\tTimeMe.stopTimer(elementId);\r\n\t\t\t\t\t});\r\n\t\t\t\t\telement.addEventListener(\"keypress\", () => {\r\n\t\t\t\t\t\tTimeMe.startTimer(elementId);\r\n\t\t\t\t\t});\r\n\t\t\t\t\telement.addEventListener(\"focus\", () => {\r\n\t\t\t\t\t\tTimeMe.startTimer(elementId);\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\tgetTimeOnElementInSeconds: (elementId) => {\r\n\t\t\t\tlet time = TimeMe.getTimeOnPageInSeconds(elementId);\r\n\t\t\t\tif (time) {\r\n\t\t\t\t\treturn time;\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn 0;\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\t// startTime is optional. If provided, must be of type Date(). By providing\r\n\t\t\t// startTime, you are overriding the internal timing mechanism and manually\r\n\t\t\t// indicating the start time.\r\n\t\t\tstartTimer: (pageName, startTime) => {\r\n\t\t\t\tif (!pageName) {\r\n\t\t\t\t\tpageName = TimeMe.currentPageName;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (TimeMe.startStopTimes[pageName] === undefined) {\r\n\t\t\t\t\tTimeMe.startStopTimes[pageName] = [];\r\n\t\t\t\t} else {\r\n\t\t\t\t\tlet arrayOfTimes = TimeMe.startStopTimes[pageName];\r\n\t\t\t\t\tlet latestStartStopEntry = arrayOfTimes[arrayOfTimes.length - 1];\r\n\t\t\t\t\tif (latestStartStopEntry !== undefined && latestStartStopEntry.stopTime === undefined) {\r\n\t\t\t\t\t\t// Can't start new timer until previous finishes.\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tTimeMe.startStopTimes[pageName].push({\r\n\t\t\t\t\t\"startTime\": startTime || new Date(),\r\n\t\t\t\t\t\"stopTime\": undefined\r\n\t\t\t\t});\t\t\t\t\r\n\t\t\t},\r\n\r\n\t\t\tstopAllTimers: () => {\r\n\t\t\t\tlet pageNames = Object.keys(TimeMe.startStopTimes);\r\n\t\t\t\tfor (let i = 0; i < pageNames.length; i++) {\r\n\t\t\t\t\tTimeMe.stopTimer(pageNames[i]);\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\t// stopTime is optional. If provided, must be of type Date(). By providing\r\n\t\t\t// stopTime, you are overriding the internal timing mechanism and manually\r\n\t\t\t// indicating the stop time.\r\n\t\t\tstopTimer: (pageName, stopTime) => {\r\n\t\t\t\tif (!pageName) {\r\n\t\t\t\t\tpageName = TimeMe.currentPageName;\r\n\t\t\t\t}\r\n\t\t\t\tlet arrayOfTimes = TimeMe.startStopTimes[pageName];\r\n\t\t\t\tif (arrayOfTimes === undefined || arrayOfTimes.length === 0) {\r\n\t\t\t\t\t// Can't stop timer before you've started it.\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tif (arrayOfTimes[arrayOfTimes.length - 1].stopTime === undefined) {\r\n\t\t\t\t\tarrayOfTimes[arrayOfTimes.length - 1].stopTime = stopTime || new Date();\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\tgetTimeOnCurrentPageInSeconds: () => {\r\n\t\t\t\treturn TimeMe.getTimeOnPageInSeconds(TimeMe.currentPageName);\r\n\t\t\t},\r\n\r\n\t\t\tgetTimeOnPageInSeconds: (pageName) => {\r\n\t\t\t\tlet timeInMs = TimeMe.getTimeOnPageInMilliseconds(pageName);\r\n\t\t\t\tif (timeInMs === undefined) {\r\n\t\t\t\t\treturn undefined;\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn timeInMs / 1000;\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\tgetTimeOnCurrentPageInMilliseconds: () => {\r\n\t\t\t\treturn TimeMe.getTimeOnPageInMilliseconds(TimeMe.currentPageName);\r\n\t\t\t},\r\n\r\n\t\t\tgetTimeOnPageInMilliseconds: (pageName) => {\r\n\r\n\t\t\t\tlet totalTimeOnPage = 0;\r\n\r\n\t\t\t\tlet arrayOfTimes = TimeMe.startStopTimes[pageName];\r\n\t\t\t\tif (arrayOfTimes === undefined) {\r\n\t\t\t\t\t// Can't get time on page before you've started the timer.\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tlet timeSpentOnPageInSeconds = 0;\r\n\t\t\t\tfor (let i = 0; i < arrayOfTimes.length; i++) {\r\n\t\t\t\t\tlet startTime = arrayOfTimes[i].startTime;\r\n\t\t\t\t\tlet stopTime = arrayOfTimes[i].stopTime;\r\n\t\t\t\t\tif (stopTime === undefined) {\r\n\t\t\t\t\t\tstopTime = new Date();\r\n\t\t\t\t\t}\r\n\t\t\t\t\tlet difference = stopTime - startTime;\r\n\t\t\t\t\ttimeSpentOnPageInSeconds += (difference);\r\n\t\t\t\t}\r\n\r\n\t\t\t\ttotalTimeOnPage = Number(timeSpentOnPageInSeconds);\r\n\t\t\t\treturn totalTimeOnPage;\r\n\t\t\t},\r\n\r\n\t\t\tgetTimeOnAllPagesInSeconds: () => {\r\n\t\t\t\tlet allTimes = [];\r\n\t\t\t\tlet pageNames = Object.keys(TimeMe.startStopTimes);\r\n\t\t\t\tfor (let i = 0; i < pageNames.length; i++) {\r\n\t\t\t\t\tlet pageName = pageNames[i];\r\n\t\t\t\t\tlet timeOnPage = TimeMe.getTimeOnPageInSeconds(pageName);\r\n\t\t\t\t\tallTimes.push({\r\n\t\t\t\t\t\t\"pageName\": pageName,\r\n\t\t\t\t\t\t\"timeOnPage\": timeOnPage\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\treturn allTimes;\r\n\t\t\t},\r\n\r\n\t\t\tsetIdleDurationInSeconds: (duration) => {\r\n\t\t\t\tlet durationFloat = parseFloat(duration);\r\n\t\t\t\tif (isNaN(durationFloat) === false) {\r\n\t\t\t\t\tTimeMe.idleTimeoutMs = duration * 1000;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthrow {\r\n\t\t\t\t\t\tname: \"InvalidDurationException\",\r\n\t\t\t\t\t\tmessage: \"An invalid duration time (\" + duration + \") was provided.\"\r\n\t\t\t\t\t};\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\tsetCurrentPageName: (pageName) => {\r\n\t\t\t\tTimeMe.currentPageName = pageName;\r\n\t\t\t},\r\n\r\n\t\t\tresetRecordedPageTime: (pageName) => {\r\n\t\t\t\tdelete TimeMe.startStopTimes[pageName];\r\n\t\t\t},\r\n\r\n\t\t\tresetAllRecordedPageTimes: () => {\r\n\t\t\t\tlet pageNames = Object.keys(TimeMe.startStopTimes);\r\n\t\t\t\tfor (let i = 0; i < pageNames.length; i++) {\r\n\t\t\t\t\tTimeMe.resetRecordedPageTime(pageNames[i]);\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tuserActivityDetected: () => {\r\n\t\t\t\tif (TimeMe.isUserCurrentlyIdle) {\r\n\t\t\t\t\tTimeMe.triggerUserHasReturned();\r\n\t\t\t\t}\r\n\t\t\t\tTimeMe.resetIdleCountdown();\r\n\t\t\t},\r\n\t\t\tresetIdleCountdown: () => {\r\n\t\t\t\tTimeMe.isUserCurrentlyIdle = false;\r\n\t\t\t\tTimeMe.currentIdleTimeMs = 0;\r\n\t\t\t},\r\n\r\n\t\t\tcallWhenUserLeaves: (callback, numberOfTimesToInvoke) => {\r\n\t\t\t\tTimeMe.userLeftCallbacks.push({\r\n\t\t\t\t\tcallback: callback,\r\n\t\t\t\t\tnumberOfTimesToInvoke: numberOfTimesToInvoke\r\n\t\t\t\t})\r\n\t\t\t},\r\n\r\n\t\t\tcallWhenUserReturns: (callback, numberOfTimesToInvoke) => {\r\n\t\t\t\tTimeMe.userReturnCallbacks.push({\r\n\t\t\t\t\tcallback: callback,\r\n\t\t\t\t\tnumberOfTimesToInvoke: numberOfTimesToInvoke\r\n\t\t\t\t})\r\n\t\t\t},\r\n\r\n\t\t\ttriggerUserHasReturned: () => {\r\n\t\t\t\tif (!TimeMe.isUserCurrentlyOnPage) {\r\n\t\t\t\t\tTimeMe.isUserCurrentlyOnPage = true;\r\n\t\t\t\t\tTimeMe.resetIdleCountdown();\r\n\t\t\t\t\tfor (let i = 0; i < TimeMe.userReturnCallbacks.length; i++) {\r\n\t\t\t\t\t\tlet userReturnedCallback = TimeMe.userReturnCallbacks[i];\r\n\t\t\t\t\t\tlet numberTimes = userReturnedCallback.numberOfTimesToInvoke;\r\n\t\t\t\t\t\tif (isNaN(numberTimes) || (numberTimes === undefined) || numberTimes > 0) {\r\n\t\t\t\t\t\t\tuserReturnedCallback.numberOfTimesToInvoke -= 1;\r\n\t\t\t\t\t\t\tuserReturnedCallback.callback();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tTimeMe.startTimer();\r\n\t\t\t},\r\n\t\t\t// TODO - we are muddying the waters in between\r\n\t\t\t// 'user left page' and 'user gone idle'. Really should be\r\n\t\t\t// two separate concepts entirely. Need to break this into smaller functions\r\n\t\t\t// for either scenario.\r\n\t\t\ttriggerUserHasLeftPageOrGoneIdle: () => {\r\n\t\t\t\tif (TimeMe.isUserCurrentlyOnPage) {\r\n\t\t\t\t\tTimeMe.isUserCurrentlyOnPage = false;\t\t\t\t\t\r\n\t\t\t\t\tfor (let i = 0; i < TimeMe.userLeftCallbacks.length; i++) {\r\n\t\t\t\t\t\tlet userHasLeftCallback = TimeMe.userLeftCallbacks[i];\r\n\t\t\t\t\t\tlet numberTimes = userHasLeftCallback.numberOfTimesToInvoke;\r\n\t\t\t\t\t\tif (isNaN(numberTimes) || (numberTimes === undefined) || numberTimes > 0) {\r\n\t\t\t\t\t\t\tuserHasLeftCallback.numberOfTimesToInvoke -= 1;\r\n\t\t\t\t\t\t\tuserHasLeftCallback.callback();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tTimeMe.stopAllTimers();\r\n\t\t\t},\r\n\r\n\t\t\tcallAfterTimeElapsedInSeconds: (timeInSeconds, callback) => {\r\n\t\t\t\tTimeMe.timeElapsedCallbacks.push({\r\n\t\t\t\t\ttimeInSeconds: timeInSeconds,\r\n\t\t\t\t\tcallback: callback,\r\n\t\t\t\t\tpending: true\r\n\t\t\t\t});\r\n\t\t\t},\r\n\r\n\t\t\tcheckIdleState: () => {\r\n\t\t\t\tfor (let i = 0; i < TimeMe.timeElapsedCallbacks.length; i++) {\r\n\t\t\t\t\tif (TimeMe.timeElapsedCallbacks[i].pending && TimeMe.getTimeOnCurrentPageInSeconds() > TimeMe.timeElapsedCallbacks[i].timeInSeconds) {\r\n\t\t\t\t\t\tTimeMe.timeElapsedCallbacks[i].callback();\r\n\t\t\t\t\t\tTimeMe.timeElapsedCallbacks[i].pending = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif (TimeMe.isUserCurrentlyIdle === false && TimeMe.currentIdleTimeMs > TimeMe.idleTimeoutMs) {\r\n\t\t\t\t\tTimeMe.isUserCurrentlyIdle = true;\r\n\t\t\t\t\tTimeMe.triggerUserHasLeftPageOrGoneIdle();\r\n\t\t\t\t} else {\r\n\t\t\t\t\tTimeMe.currentIdleTimeMs += TimeMe.checkIdleStateRateMs;\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\tvisibilityChangeEventName: undefined,\r\n\t\t\thiddenPropName: undefined,\r\n\r\n\t\t\tlistenForVisibilityEvents: (trackWhenUserLeavesPage, trackWhenUserGoesIdle) => {\r\n\r\n\t\t\t\tif (trackWhenUserLeavesPage) {\r\n\t\t\t\t\tTimeMe.listenForUserLeavesOrReturnsEvents();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (trackWhenUserGoesIdle) {\r\n\t\t\t\t\tTimeMe.listForIdleEvents();\r\n\t\t\t\t}\r\n\r\n\t\t\t},\r\n\r\n\t\t\tlistenForUserLeavesOrReturnsEvents: () => {\r\n\t\t\t\tif (typeof document.hidden !== \"undefined\") {\r\n\t\t\t\t\tTimeMe.hiddenPropName = \"hidden\";\r\n\t\t\t\t\tTimeMe.visibilityChangeEventName = \"visibilitychange\";\r\n\t\t\t\t} else if (typeof document.mozHidden !== \"undefined\") {\r\n\t\t\t\t\tTimeMe.hiddenPropName = \"mozHidden\";\r\n\t\t\t\t\tTimeMe.visibilityChangeEventName = \"mozvisibilitychange\";\r\n\t\t\t\t} else if (typeof document.msHidden !== \"undefined\") {\r\n\t\t\t\t\tTimeMe.hiddenPropName = \"msHidden\";\r\n\t\t\t\t\tTimeMe.visibilityChangeEventName = \"msvisibilitychange\";\r\n\t\t\t\t} else if (typeof document.webkitHidden !== \"undefined\") {\r\n\t\t\t\t\tTimeMe.hiddenPropName = \"webkitHidden\";\r\n\t\t\t\t\tTimeMe.visibilityChangeEventName = \"webkitvisibilitychange\";\r\n\t\t\t\t}\r\n\r\n\t\t\t\tdocument.addEventListener(TimeMe.visibilityChangeEventName, () => {\r\n\t\t\t\t\tif (document[TimeMe.hiddenPropName]) {\r\n\t\t\t\t\t\tTimeMe.triggerUserHasLeftPageOrGoneIdle();\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tTimeMe.triggerUserHasReturned();\r\n\t\t\t\t\t}\r\n\t\t\t\t}, false);\r\n\r\n\t\t\t\twindow.addEventListener('blur', () => {\r\n\t\t\t\t\tTimeMe.triggerUserHasLeftPageOrGoneIdle();\r\n\t\t\t\t});\r\n\r\n\t\t\t\twindow.addEventListener('focus', () => {\r\n\t\t\t\t\tTimeMe.triggerUserHasReturned();\r\n\t\t\t\t});\r\n\t\t\t},\r\n\r\n\t\t\tlistForIdleEvents: () => {\r\n\t\t\t\tdocument.addEventListener(\"mousemove\", () => { TimeMe.userActivityDetected(); });\r\n\t\t\t\tdocument.addEventListener(\"keyup\", () => { TimeMe.userActivityDetected(); });\r\n\t\t\t\tdocument.addEventListener(\"touchstart\", () => { TimeMe.userActivityDetected(); });\r\n\t\t\t\twindow.addEventListener(\"scroll\", () => { TimeMe.userActivityDetected(); });\r\n\r\n\t\t\t\tsetInterval(() => {\r\n\t\t\t\t\tif (TimeMe.isUserCurrentlyIdle !== true) {\r\n\t\t\t\t\t\tTimeMe.checkIdleState();\r\n\t\t\t\t\t}\r\n\t\t\t\t}, TimeMe.checkIdleStateRateMs);\r\n\t\t\t},\r\n\r\n\t\t\twebsocket: undefined,\r\n\r\n\t\t\twebsocketHost: undefined,\r\n\r\n\t\t\tsetUpWebsocket: (websocketOptions) => {\r\n\t\t\t\tif (window.WebSocket && websocketOptions) {\r\n\t\t\t\t\tlet websocketHost = websocketOptions.websocketHost; // \"ws://hostname:port\"\r\n\t\t\t\t\ttry {\r\n\t\t\t\t\t\tTimeMe.websocket = new WebSocket(websocketHost);\r\n\t\t\t\t\t\twindow.onbeforeunload = () => {\r\n\t\t\t\t\t\t\tTimeMe.sendCurrentTime(websocketOptions.appId);\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t\tTimeMe.websocket.onopen = () => {\r\n\t\t\t\t\t\t\tTimeMe.sendInitWsRequest(websocketOptions.appId);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tTimeMe.websocket.onerror = (error) => {\r\n\t\t\t\t\t\t\tif (console) {\r\n\t\t\t\t\t\t\t\tconsole.log(\"Error occurred in websocket connection: \" + error);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tTimeMe.websocket.onmessage = (event) => {\r\n\t\t\t\t\t\t\tif (console) {\r\n\t\t\t\t\t\t\t\tconsole.log(event.data);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} catch (error) {\r\n\t\t\t\t\t\tif (console) {\r\n\t\t\t\t\t\t\tconsole.error(\"Failed to connect to websocket host. Error:\" + error);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\twebsocketSend: (data) => {\r\n\t\t\t\tTimeMe.websocket.send(JSON.stringify(data));\r\n\t\t\t},\r\n\r\n\t\t\tsendCurrentTime: (appId) => {\r\n\t\t\t\tlet timeSpentOnPage = TimeMe.getTimeOnCurrentPageInMilliseconds();\r\n\t\t\t\tlet data = {\r\n\t\t\t\t\ttype: \"INSERT_TIME\",\r\n\t\t\t\t\tappId: appId,\r\n\t\t\t\t\ttimeOnPageMs: timeSpentOnPage,\r\n\t\t\t\t\tpageName: TimeMe.currentPageName\r\n\t\t\t\t};\r\n\t\t\t\tTimeMe.websocketSend(data);\r\n\t\t\t},\r\n\t\t\tsendInitWsRequest: (appId) => {\r\n\t\t\t\tlet data = {\r\n\t\t\t\t\ttype: \"INIT\",\r\n\t\t\t\t\tappId: appId\r\n\t\t\t\t};\r\n\t\t\t\tTimeMe.websocketSend(data);\r\n\t\t\t},\r\n\r\n\t\t\tinitialize: (options) => {\r\n\r\n\t\t\t\tlet idleTimeoutInSeconds = TimeMe.idleTimeoutMs || 30;\r\n\t\t\t\tlet currentPageName = TimeMe.currentPageName || \"default-page-name\";\r\n\t\t\t\tlet websocketOptions = undefined;\r\n\t\t\t\tlet initialStartTime = undefined;\r\n\t\t\t\tlet trackWhenUserLeavesPage = true;\r\n\t\t\t\tlet trackWhenUserGoesIdle = true;\r\n\r\n\t\t\t\tif (options) {\r\n\t\t\t\t\tidleTimeoutInSeconds = options.idleTimeoutInSeconds || idleTimeoutInSeconds;\r\n\t\t\t\t\tcurrentPageName = options.currentPageName || currentPageName;\r\n\t\t\t\t\twebsocketOptions = options.websocketOptions;\r\n\t\t\t\t\tinitialStartTime = options.initialStartTime;\r\n\r\n\t\t\t\t\tif (options.trackWhenUserLeavesPage === false) {\r\n\t\t\t\t\t\ttrackWhenUserLeavesPage = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (options.trackWhenUserGoesIdle === false) {\r\n\t\t\t\t\t\ttrackWhenUserGoesIdle = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tTimeMe.setIdleDurationInSeconds(idleTimeoutInSeconds)\r\n\t\t\t\tTimeMe.setCurrentPageName(currentPageName)\r\n\t\t\t\tTimeMe.setUpWebsocket(websocketOptions)\r\n\t\t\t\tTimeMe.listenForVisibilityEvents(trackWhenUserLeavesPage, trackWhenUserGoesIdle);\r\n\r\n\t\t\t\t// TODO - only do this if page currently visible.\r\n\r\n\t\t\t\tTimeMe.startTimer(undefined, initialStartTime);\r\n\t\t\t}\r\n\t\t};\r\n\t\treturn TimeMe;\r\n\t});\r\n}).call(this);\r\n","/*!\n * URI.js - Mutating URLs\n * IPv6 Support\n *\n * Version: 1.19.11\n *\n * Author: Rodney Rehm\n * Web: http://medialize.github.io/URI.js/\n *\n * Licensed under\n * MIT License http://www.opensource.org/licenses/mit-license\n *\n */\n\n(function (root, factory) {\n 'use strict';\n // https://github.com/umdjs/umd/blob/master/returnExports.js\n if (typeof module === 'object' && module.exports) {\n // Node\n module.exports = factory();\n } else if (typeof define === 'function' && define.amd) {\n // AMD. Register as an anonymous module.\n define(factory);\n } else {\n // Browser globals (root is window)\n root.IPv6 = factory(root);\n }\n}(this, function (root) {\n 'use strict';\n\n /*\n var _in = \"fe80:0000:0000:0000:0204:61ff:fe9d:f156\";\n var _out = IPv6.best(_in);\n var _expected = \"fe80::204:61ff:fe9d:f156\";\n\n console.log(_in, _out, _expected, _out === _expected);\n */\n\n // save current IPv6 variable, if any\n var _IPv6 = root && root.IPv6;\n\n function bestPresentation(address) {\n // based on:\n // Javascript to test an IPv6 address for proper format, and to\n // present the \"best text representation\" according to IETF Draft RFC at\n // http://tools.ietf.org/html/draft-ietf-6man-text-addr-representation-04\n // 8 Feb 2010 Rich Brown, Dartware, LLC\n // Please feel free to use this code as long as you provide a link to\n // http://www.intermapper.com\n // http://intermapper.com/support/tools/IPV6-Validator.aspx\n // http://download.dartware.com/thirdparty/ipv6validator.js\n\n var _address = address.toLowerCase();\n var segments = _address.split(':');\n var length = segments.length;\n var total = 8;\n\n // trim colons (:: or ::a:b:c… or …a:b:c::)\n if (segments[0] === '' && segments[1] === '' && segments[2] === '') {\n // must have been ::\n // remove first two items\n segments.shift();\n segments.shift();\n } else if (segments[0] === '' && segments[1] === '') {\n // must have been ::xxxx\n // remove the first item\n segments.shift();\n } else if (segments[length - 1] === '' && segments[length - 2] === '') {\n // must have been xxxx::\n segments.pop();\n }\n\n length = segments.length;\n\n // adjust total segments for IPv4 trailer\n if (segments[length - 1].indexOf('.') !== -1) {\n // found a \".\" which means IPv4\n total = 7;\n }\n\n // fill empty segments them with \"0000\"\n var pos;\n for (pos = 0; pos < length; pos++) {\n if (segments[pos] === '') {\n break;\n }\n }\n\n if (pos < total) {\n segments.splice(pos, 1, '0000');\n while (segments.length < total) {\n segments.splice(pos, 0, '0000');\n }\n }\n\n // strip leading zeros\n var _segments;\n for (var i = 0; i < total; i++) {\n _segments = segments[i].split('');\n for (var j = 0; j < 3 ; j++) {\n if (_segments[0] === '0' && _segments.length > 1) {\n _segments.splice(0,1);\n } else {\n break;\n }\n }\n\n segments[i] = _segments.join('');\n }\n\n // find longest sequence of zeroes and coalesce them into one segment\n var best = -1;\n var _best = 0;\n var _current = 0;\n var current = -1;\n var inzeroes = false;\n // i; already declared\n\n for (i = 0; i < total; i++) {\n if (inzeroes) {\n if (segments[i] === '0') {\n _current += 1;\n } else {\n inzeroes = false;\n if (_current > _best) {\n best = current;\n _best = _current;\n }\n }\n } else {\n if (segments[i] === '0') {\n inzeroes = true;\n current = i;\n _current = 1;\n }\n }\n }\n\n if (_current > _best) {\n best = current;\n _best = _current;\n }\n\n if (_best > 1) {\n segments.splice(best, _best, '');\n }\n\n length = segments.length;\n\n // assemble remaining segments\n var result = '';\n if (segments[0] === '') {\n result = ':';\n }\n\n for (i = 0; i < length; i++) {\n result += segments[i];\n if (i === length - 1) {\n break;\n }\n\n result += ':';\n }\n\n if (segments[length - 1] === '') {\n result += ':';\n }\n\n return result;\n }\n\n function noConflict() {\n /*jshint validthis: true */\n if (root.IPv6 === this) {\n root.IPv6 = _IPv6;\n }\n\n return this;\n }\n\n return {\n best: bestPresentation,\n noConflict: noConflict\n };\n}));\n","/*!\n * URI.js - Mutating URLs\n * Second Level Domain (SLD) Support\n *\n * Version: 1.19.11\n *\n * Author: Rodney Rehm\n * Web: http://medialize.github.io/URI.js/\n *\n * Licensed under\n * MIT License http://www.opensource.org/licenses/mit-license\n *\n */\n\n(function (root, factory) {\n 'use strict';\n // https://github.com/umdjs/umd/blob/master/returnExports.js\n if (typeof module === 'object' && module.exports) {\n // Node\n module.exports = factory();\n } else if (typeof define === 'function' && define.amd) {\n // AMD. Register as an anonymous module.\n define(factory);\n } else {\n // Browser globals (root is window)\n root.SecondLevelDomains = factory(root);\n }\n}(this, function (root) {\n 'use strict';\n\n // save current SecondLevelDomains variable, if any\n var _SecondLevelDomains = root && root.SecondLevelDomains;\n\n var SLD = {\n // list of known Second Level Domains\n // converted list of SLDs from https://github.com/gavingmiller/second-level-domains\n // ----\n // publicsuffix.org is more current and actually used by a couple of browsers internally.\n // downside is it also contains domains like \"dyndns.org\" - which is fine for the security\n // issues browser have to deal with (SOP for cookies, etc) - but is way overboard for URI.js\n // ----\n list: {\n 'ac':' com gov mil net org ',\n 'ae':' ac co gov mil name net org pro sch ',\n 'af':' com edu gov net org ',\n 'al':' com edu gov mil net org ',\n 'ao':' co ed gv it og pb ',\n 'ar':' com edu gob gov int mil net org tur ',\n 'at':' ac co gv or ',\n 'au':' asn com csiro edu gov id net org ',\n 'ba':' co com edu gov mil net org rs unbi unmo unsa untz unze ',\n 'bb':' biz co com edu gov info net org store tv ',\n 'bh':' biz cc com edu gov info net org ',\n 'bn':' com edu gov net org ',\n 'bo':' com edu gob gov int mil net org tv ',\n 'br':' adm adv agr am arq art ato b bio blog bmd cim cng cnt com coop ecn edu eng esp etc eti far flog fm fnd fot fst g12 ggf gov imb ind inf jor jus lel mat med mil mus net nom not ntr odo org ppg pro psc psi qsl rec slg srv tmp trd tur tv vet vlog wiki zlg ',\n 'bs':' com edu gov net org ',\n 'bz':' du et om ov rg ',\n 'ca':' ab bc mb nb nf nl ns nt nu on pe qc sk yk ',\n 'ck':' biz co edu gen gov info net org ',\n 'cn':' ac ah bj com cq edu fj gd gov gs gx gz ha hb he hi hl hn jl js jx ln mil net nm nx org qh sc sd sh sn sx tj tw xj xz yn zj ',\n 'co':' com edu gov mil net nom org ',\n 'cr':' ac c co ed fi go or sa ',\n 'cy':' ac biz com ekloges gov ltd name net org parliament press pro tm ',\n 'do':' art com edu gob gov mil net org sld web ',\n 'dz':' art asso com edu gov net org pol ',\n 'ec':' com edu fin gov info med mil net org pro ',\n 'eg':' com edu eun gov mil name net org sci ',\n 'er':' com edu gov ind mil net org rochest w ',\n 'es':' com edu gob nom org ',\n 'et':' biz com edu gov info name net org ',\n 'fj':' ac biz com info mil name net org pro ',\n 'fk':' ac co gov net nom org ',\n 'fr':' asso com f gouv nom prd presse tm ',\n 'gg':' co net org ',\n 'gh':' com edu gov mil org ',\n 'gn':' ac com gov net org ',\n 'gr':' com edu gov mil net org ',\n 'gt':' com edu gob ind mil net org ',\n 'gu':' com edu gov net org ',\n 'hk':' com edu gov idv net org ',\n 'hu':' 2000 agrar bolt casino city co erotica erotika film forum games hotel info ingatlan jogasz konyvelo lakas media news org priv reklam sex shop sport suli szex tm tozsde utazas video ',\n 'id':' ac co go mil net or sch web ',\n 'il':' ac co gov idf k12 muni net org ',\n 'in':' ac co edu ernet firm gen gov i ind mil net nic org res ',\n 'iq':' com edu gov i mil net org ',\n 'ir':' ac co dnssec gov i id net org sch ',\n 'it':' edu gov ',\n 'je':' co net org ',\n 'jo':' com edu gov mil name net org sch ',\n 'jp':' ac ad co ed go gr lg ne or ',\n 'ke':' ac co go info me mobi ne or sc ',\n 'kh':' com edu gov mil net org per ',\n 'ki':' biz com de edu gov info mob net org tel ',\n 'km':' asso com coop edu gouv k medecin mil nom notaires pharmaciens presse tm veterinaire ',\n 'kn':' edu gov net org ',\n 'kr':' ac busan chungbuk chungnam co daegu daejeon es gangwon go gwangju gyeongbuk gyeonggi gyeongnam hs incheon jeju jeonbuk jeonnam k kg mil ms ne or pe re sc seoul ulsan ',\n 'kw':' com edu gov net org ',\n 'ky':' com edu gov net org ',\n 'kz':' com edu gov mil net org ',\n 'lb':' com edu gov net org ',\n 'lk':' assn com edu gov grp hotel int ltd net ngo org sch soc web ',\n 'lr':' com edu gov net org ',\n 'lv':' asn com conf edu gov id mil net org ',\n 'ly':' com edu gov id med net org plc sch ',\n 'ma':' ac co gov m net org press ',\n 'mc':' asso tm ',\n 'me':' ac co edu gov its net org priv ',\n 'mg':' com edu gov mil nom org prd tm ',\n 'mk':' com edu gov inf name net org pro ',\n 'ml':' com edu gov net org presse ',\n 'mn':' edu gov org ',\n 'mo':' com edu gov net org ',\n 'mt':' com edu gov net org ',\n 'mv':' aero biz com coop edu gov info int mil museum name net org pro ',\n 'mw':' ac co com coop edu gov int museum net org ',\n 'mx':' com edu gob net org ',\n 'my':' com edu gov mil name net org sch ',\n 'nf':' arts com firm info net other per rec store web ',\n 'ng':' biz com edu gov mil mobi name net org sch ',\n 'ni':' ac co com edu gob mil net nom org ',\n 'np':' com edu gov mil net org ',\n 'nr':' biz com edu gov info net org ',\n 'om':' ac biz co com edu gov med mil museum net org pro sch ',\n 'pe':' com edu gob mil net nom org sld ',\n 'ph':' com edu gov i mil net ngo org ',\n 'pk':' biz com edu fam gob gok gon gop gos gov net org web ',\n 'pl':' art bialystok biz com edu gda gdansk gorzow gov info katowice krakow lodz lublin mil net ngo olsztyn org poznan pwr radom slupsk szczecin torun warszawa waw wroc wroclaw zgora ',\n 'pr':' ac biz com edu est gov info isla name net org pro prof ',\n 'ps':' com edu gov net org plo sec ',\n 'pw':' belau co ed go ne or ',\n 'ro':' arts com firm info nom nt org rec store tm www ',\n 'rs':' ac co edu gov in org ',\n 'sb':' com edu gov net org ',\n 'sc':' com edu gov net org ',\n 'sh':' co com edu gov net nom org ',\n 'sl':' com edu gov net org ',\n 'st':' co com consulado edu embaixada gov mil net org principe saotome store ',\n 'sv':' com edu gob org red ',\n 'sz':' ac co org ',\n 'tr':' av bbs bel biz com dr edu gen gov info k12 name net org pol tel tsk tv web ',\n 'tt':' aero biz cat co com coop edu gov info int jobs mil mobi museum name net org pro tel travel ',\n 'tw':' club com ebiz edu game gov idv mil net org ',\n 'mu':' ac co com gov net or org ',\n 'mz':' ac co edu gov org ',\n 'na':' co com ',\n 'nz':' ac co cri geek gen govt health iwi maori mil net org parliament school ',\n 'pa':' abo ac com edu gob ing med net nom org sld ',\n 'pt':' com edu gov int net nome org publ ',\n 'py':' com edu gov mil net org ',\n 'qa':' com edu gov mil net org ',\n 're':' asso com nom ',\n 'ru':' ac adygeya altai amur arkhangelsk astrakhan bashkiria belgorod bir bryansk buryatia cbg chel chelyabinsk chita chukotka chuvashia com dagestan e-burg edu gov grozny int irkutsk ivanovo izhevsk jar joshkar-ola kalmykia kaluga kamchatka karelia kazan kchr kemerovo khabarovsk khakassia khv kirov koenig komi kostroma kranoyarsk kuban kurgan kursk lipetsk magadan mari mari-el marine mil mordovia mosreg msk murmansk nalchik net nnov nov novosibirsk nsk omsk orenburg org oryol penza perm pp pskov ptz rnd ryazan sakhalin samara saratov simbirsk smolensk spb stavropol stv surgut tambov tatarstan tom tomsk tsaritsyn tsk tula tuva tver tyumen udm udmurtia ulan-ude vladikavkaz vladimir vladivostok volgograd vologda voronezh vrn vyatka yakutia yamal yekaterinburg yuzhno-sakhalinsk ',\n 'rw':' ac co com edu gouv gov int mil net ',\n 'sa':' com edu gov med net org pub sch ',\n 'sd':' com edu gov info med net org tv ',\n 'se':' a ac b bd c d e f g h i k l m n o org p parti pp press r s t tm u w x y z ',\n 'sg':' com edu gov idn net org per ',\n 'sn':' art com edu gouv org perso univ ',\n 'sy':' com edu gov mil net news org ',\n 'th':' ac co go in mi net or ',\n 'tj':' ac biz co com edu go gov info int mil name net nic org test web ',\n 'tn':' agrinet com defense edunet ens fin gov ind info intl mincom nat net org perso rnrt rns rnu tourism ',\n 'tz':' ac co go ne or ',\n 'ua':' biz cherkassy chernigov chernovtsy ck cn co com crimea cv dn dnepropetrovsk donetsk dp edu gov if in ivano-frankivsk kh kharkov kherson khmelnitskiy kiev kirovograd km kr ks kv lg lugansk lutsk lviv me mk net nikolaev od odessa org pl poltava pp rovno rv sebastopol sumy te ternopil uzhgorod vinnica vn zaporizhzhe zhitomir zp zt ',\n 'ug':' ac co go ne or org sc ',\n 'uk':' ac bl british-library co cym gov govt icnet jet lea ltd me mil mod national-library-scotland nel net nhs nic nls org orgn parliament plc police sch scot soc ',\n 'us':' dni fed isa kids nsn ',\n 'uy':' com edu gub mil net org ',\n 've':' co com edu gob info mil net org web ',\n 'vi':' co com k12 net org ',\n 'vn':' ac biz com edu gov health info int name net org pro ',\n 'ye':' co com gov ltd me net org plc ',\n 'yu':' ac co edu gov org ',\n 'za':' ac agric alt bourse city co cybernet db edu gov grondar iaccess imt inca landesign law mil net ngo nis nom olivetti org pix school tm web ',\n 'zm':' ac co com edu gov net org sch ',\n // https://en.wikipedia.org/wiki/CentralNic#Second-level_domains\n 'com': 'ar br cn de eu gb gr hu jpn kr no qc ru sa se uk us uy za ',\n 'net': 'gb jp se uk ',\n 'org': 'ae',\n 'de': 'com '\n },\n // gorhill 2013-10-25: Using indexOf() instead Regexp(). Significant boost\n // in both performance and memory footprint. No initialization required.\n // http://jsperf.com/uri-js-sld-regex-vs-binary-search/4\n // Following methods use lastIndexOf() rather than array.split() in order\n // to avoid any memory allocations.\n has: function(domain) {\n var tldOffset = domain.lastIndexOf('.');\n if (tldOffset <= 0 || tldOffset >= (domain.length-1)) {\n return false;\n }\n var sldOffset = domain.lastIndexOf('.', tldOffset-1);\n if (sldOffset <= 0 || sldOffset >= (tldOffset-1)) {\n return false;\n }\n var sldList = SLD.list[domain.slice(tldOffset+1)];\n if (!sldList) {\n return false;\n }\n return sldList.indexOf(' ' + domain.slice(sldOffset+1, tldOffset) + ' ') >= 0;\n },\n is: function(domain) {\n var tldOffset = domain.lastIndexOf('.');\n if (tldOffset <= 0 || tldOffset >= (domain.length-1)) {\n return false;\n }\n var sldOffset = domain.lastIndexOf('.', tldOffset-1);\n if (sldOffset >= 0) {\n return false;\n }\n var sldList = SLD.list[domain.slice(tldOffset+1)];\n if (!sldList) {\n return false;\n }\n return sldList.indexOf(' ' + domain.slice(0, tldOffset) + ' ') >= 0;\n },\n get: function(domain) {\n var tldOffset = domain.lastIndexOf('.');\n if (tldOffset <= 0 || tldOffset >= (domain.length-1)) {\n return null;\n }\n var sldOffset = domain.lastIndexOf('.', tldOffset-1);\n if (sldOffset <= 0 || sldOffset >= (tldOffset-1)) {\n return null;\n }\n var sldList = SLD.list[domain.slice(tldOffset+1)];\n if (!sldList) {\n return null;\n }\n if (sldList.indexOf(' ' + domain.slice(sldOffset+1, tldOffset) + ' ') < 0) {\n return null;\n }\n return domain.slice(sldOffset+1);\n },\n noConflict: function(){\n if (root.SecondLevelDomains === this) {\n root.SecondLevelDomains = _SecondLevelDomains;\n }\n return this;\n }\n };\n\n return SLD;\n}));\n","/*!\n * URI.js - Mutating URLs\n *\n * Version: 1.19.11\n *\n * Author: Rodney Rehm\n * Web: http://medialize.github.io/URI.js/\n *\n * Licensed under\n * MIT License http://www.opensource.org/licenses/mit-license\n *\n */\n(function (root, factory) {\n 'use strict';\n // https://github.com/umdjs/umd/blob/master/returnExports.js\n if (typeof module === 'object' && module.exports) {\n // Node\n module.exports = factory(require('./punycode'), require('./IPv6'), require('./SecondLevelDomains'));\n } else if (typeof define === 'function' && define.amd) {\n // AMD. Register as an anonymous module.\n define(['./punycode', './IPv6', './SecondLevelDomains'], factory);\n } else {\n // Browser globals (root is window)\n root.URI = factory(root.punycode, root.IPv6, root.SecondLevelDomains, root);\n }\n}(this, function (punycode, IPv6, SLD, root) {\n 'use strict';\n /*global location, escape, unescape */\n // FIXME: v2.0.0 renamce non-camelCase properties to uppercase\n /*jshint camelcase: false */\n\n // save current URI variable, if any\n var _URI = root && root.URI;\n\n function URI(url, base) {\n var _urlSupplied = arguments.length >= 1;\n var _baseSupplied = arguments.length >= 2;\n\n // Allow instantiation without the 'new' keyword\n if (!(this instanceof URI)) {\n if (_urlSupplied) {\n if (_baseSupplied) {\n return new URI(url, base);\n }\n\n return new URI(url);\n }\n\n return new URI();\n }\n\n if (url === undefined) {\n if (_urlSupplied) {\n throw new TypeError('undefined is not a valid argument for URI');\n }\n\n if (typeof location !== 'undefined') {\n url = location.href + '';\n } else {\n url = '';\n }\n }\n\n if (url === null) {\n if (_urlSupplied) {\n throw new TypeError('null is not a valid argument for URI');\n }\n }\n\n this.href(url);\n\n // resolve to base according to http://dvcs.w3.org/hg/url/raw-file/tip/Overview.html#constructor\n if (base !== undefined) {\n return this.absoluteTo(base);\n }\n\n return this;\n }\n\n function isInteger(value) {\n return /^[0-9]+$/.test(value);\n }\n\n URI.version = '1.19.11';\n\n var p = URI.prototype;\n var hasOwn = Object.prototype.hasOwnProperty;\n\n function escapeRegEx(string) {\n // https://github.com/medialize/URI.js/commit/85ac21783c11f8ccab06106dba9735a31a86924d#commitcomment-821963\n return string.replace(/([.*+?^=!:${}()|[\\]\\/\\\\])/g, '\\\\$1');\n }\n\n function getType(value) {\n // IE8 doesn't return [Object Undefined] but [Object Object] for undefined value\n if (value === undefined) {\n return 'Undefined';\n }\n\n return String(Object.prototype.toString.call(value)).slice(8, -1);\n }\n\n function isArray(obj) {\n return getType(obj) === 'Array';\n }\n\n function filterArrayValues(data, value) {\n var lookup = {};\n var i, length;\n\n if (getType(value) === 'RegExp') {\n lookup = null;\n } else if (isArray(value)) {\n for (i = 0, length = value.length; i < length; i++) {\n lookup[value[i]] = true;\n }\n } else {\n lookup[value] = true;\n }\n\n for (i = 0, length = data.length; i < length; i++) {\n /*jshint laxbreak: true */\n var _match = lookup && lookup[data[i]] !== undefined\n || !lookup && value.test(data[i]);\n /*jshint laxbreak: false */\n if (_match) {\n data.splice(i, 1);\n length--;\n i--;\n }\n }\n\n return data;\n }\n\n function arrayContains(list, value) {\n var i, length;\n\n // value may be string, number, array, regexp\n if (isArray(value)) {\n // Note: this can be optimized to O(n) (instead of current O(m * n))\n for (i = 0, length = value.length; i < length; i++) {\n if (!arrayContains(list, value[i])) {\n return false;\n }\n }\n\n return true;\n }\n\n var _type = getType(value);\n for (i = 0, length = list.length; i < length; i++) {\n if (_type === 'RegExp') {\n if (typeof list[i] === 'string' && list[i].match(value)) {\n return true;\n }\n } else if (list[i] === value) {\n return true;\n }\n }\n\n return false;\n }\n\n function arraysEqual(one, two) {\n if (!isArray(one) || !isArray(two)) {\n return false;\n }\n\n // arrays can't be equal if they have different amount of content\n if (one.length !== two.length) {\n return false;\n }\n\n one.sort();\n two.sort();\n\n for (var i = 0, l = one.length; i < l; i++) {\n if (one[i] !== two[i]) {\n return false;\n }\n }\n\n return true;\n }\n\n function trimSlashes(text) {\n var trim_expression = /^\\/+|\\/+$/g;\n return text.replace(trim_expression, '');\n }\n\n URI._parts = function() {\n return {\n protocol: null,\n username: null,\n password: null,\n hostname: null,\n urn: null,\n port: null,\n path: null,\n query: null,\n fragment: null,\n // state\n preventInvalidHostname: URI.preventInvalidHostname,\n duplicateQueryParameters: URI.duplicateQueryParameters,\n escapeQuerySpace: URI.escapeQuerySpace\n };\n };\n // state: throw on invalid hostname\n // see https://github.com/medialize/URI.js/pull/345\n // and https://github.com/medialize/URI.js/issues/354\n URI.preventInvalidHostname = false;\n // state: allow duplicate query parameters (a=1&a=1)\n URI.duplicateQueryParameters = false;\n // state: replaces + with %20 (space in query strings)\n URI.escapeQuerySpace = true;\n // static properties\n URI.protocol_expression = /^[a-z][a-z0-9.+-]*$/i;\n URI.idn_expression = /[^a-z0-9\\._-]/i;\n URI.punycode_expression = /(xn--)/i;\n // well, 333.444.555.666 matches, but it sure ain't no IPv4 - do we care?\n URI.ip4_expression = /^\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}$/;\n // credits to Rich Brown\n // source: http://forums.intermapper.com/viewtopic.php?p=1096#1096\n // specification: http://www.ietf.org/rfc/rfc4291.txt\n URI.ip6_expression = /^\\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))(%.+)?\\s*$/;\n // expression used is \"gruber revised\" (@gruber v2) determined to be the\n // best solution in a regex-golf we did a couple of ages ago at\n // * http://mathiasbynens.be/demo/url-regex\n // * http://rodneyrehm.de/t/url-regex.html\n URI.find_uri_expression = /\\b((?:[a-z][\\w-]+:(?:\\/{1,3}|[a-z0-9%])|www\\d{0,3}[.]|[a-z0-9.\\-]+[.][a-z]{2,4}\\/)(?:[^\\s()<>]+|\\(([^\\s()<>]+|(\\([^\\s()<>]+\\)))*\\))+(?:\\(([^\\s()<>]+|(\\([^\\s()<>]+\\)))*\\)|[^\\s`!()\\[\\]{};:'\".,<>?«»“”‘’]))/ig;\n URI.findUri = {\n // valid \"scheme://\" or \"www.\"\n start: /\\b(?:([a-z][a-z0-9.+-]*:\\/\\/)|www\\.)/gi,\n // everything up to the next whitespace\n end: /[\\s\\r\\n]|$/,\n // trim trailing punctuation captured by end RegExp\n trim: /[`!()\\[\\]{};:'\".,<>?«»“”„‘’]+$/,\n // balanced parens inclusion (), [], {}, <>\n parens: /(\\([^\\)]*\\)|\\[[^\\]]*\\]|\\{[^}]*\\}|<[^>]*>)/g,\n };\n URI.leading_whitespace_expression = /^[\\x00-\\x20\\u00a0\\u1680\\u2000-\\u200a\\u2028\\u2029\\u202f\\u205f\\u3000\\ufeff]+/\n // https://infra.spec.whatwg.org/#ascii-tab-or-newline\n URI.ascii_tab_whitespace = /[\\u0009\\u000A\\u000D]+/g\n // http://www.iana.org/assignments/uri-schemes.html\n // http://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers#Well-known_ports\n URI.defaultPorts = {\n http: '80',\n https: '443',\n ftp: '21',\n gopher: '70',\n ws: '80',\n wss: '443'\n };\n // list of protocols which always require a hostname\n URI.hostProtocols = [\n 'http',\n 'https'\n ];\n\n // allowed hostname characters according to RFC 3986\n // ALPHA DIGIT \"-\" \".\" \"_\" \"~\" \"!\" \"$\" \"&\" \"'\" \"(\" \")\" \"*\" \"+\" \",\" \";\" \"=\" %encoded\n // I've never seen a (non-IDN) hostname other than: ALPHA DIGIT . - _\n URI.invalid_hostname_characters = /[^a-zA-Z0-9\\.\\-:_]/;\n // map DOM Elements to their URI attribute\n URI.domAttributes = {\n 'a': 'href',\n 'blockquote': 'cite',\n 'link': 'href',\n 'base': 'href',\n 'script': 'src',\n 'form': 'action',\n 'img': 'src',\n 'area': 'href',\n 'iframe': 'src',\n 'embed': 'src',\n 'source': 'src',\n 'track': 'src',\n 'input': 'src', // but only if type=\"image\"\n 'audio': 'src',\n 'video': 'src'\n };\n URI.getDomAttribute = function(node) {\n if (!node || !node.nodeName) {\n return undefined;\n }\n\n var nodeName = node.nodeName.toLowerCase();\n // should only expose src for type=\"image\"\n if (nodeName === 'input' && node.type !== 'image') {\n return undefined;\n }\n\n return URI.domAttributes[nodeName];\n };\n\n function escapeForDumbFirefox36(value) {\n // https://github.com/medialize/URI.js/issues/91\n return escape(value);\n }\n\n // encoding / decoding according to RFC3986\n function strictEncodeURIComponent(string) {\n // see https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/encodeURIComponent\n return encodeURIComponent(string)\n .replace(/[!'()*]/g, escapeForDumbFirefox36)\n .replace(/\\*/g, '%2A');\n }\n URI.encode = strictEncodeURIComponent;\n URI.decode = decodeURIComponent;\n URI.iso8859 = function() {\n URI.encode = escape;\n URI.decode = unescape;\n };\n URI.unicode = function() {\n URI.encode = strictEncodeURIComponent;\n URI.decode = decodeURIComponent;\n };\n URI.characters = {\n pathname: {\n encode: {\n // RFC3986 2.1: For consistency, URI producers and normalizers should\n // use uppercase hexadecimal digits for all percent-encodings.\n expression: /%(24|26|2B|2C|3B|3D|3A|40)/ig,\n map: {\n // -._~!'()*\n '%24': '$',\n '%26': '&',\n '%2B': '+',\n '%2C': ',',\n '%3B': ';',\n '%3D': '=',\n '%3A': ':',\n '%40': '@'\n }\n },\n decode: {\n expression: /[\\/\\?#]/g,\n map: {\n '/': '%2F',\n '?': '%3F',\n '#': '%23'\n }\n }\n },\n reserved: {\n encode: {\n // RFC3986 2.1: For consistency, URI producers and normalizers should\n // use uppercase hexadecimal digits for all percent-encodings.\n expression: /%(21|23|24|26|27|28|29|2A|2B|2C|2F|3A|3B|3D|3F|40|5B|5D)/ig,\n map: {\n // gen-delims\n '%3A': ':',\n '%2F': '/',\n '%3F': '?',\n '%23': '#',\n '%5B': '[',\n '%5D': ']',\n '%40': '@',\n // sub-delims\n '%21': '!',\n '%24': '$',\n '%26': '&',\n '%27': '\\'',\n '%28': '(',\n '%29': ')',\n '%2A': '*',\n '%2B': '+',\n '%2C': ',',\n '%3B': ';',\n '%3D': '='\n }\n }\n },\n urnpath: {\n // The characters under `encode` are the characters called out by RFC 2141 as being acceptable\n // for usage in a URN. RFC2141 also calls out \"-\", \".\", and \"_\" as acceptable characters, but\n // these aren't encoded by encodeURIComponent, so we don't have to call them out here. Also\n // note that the colon character is not featured in the encoding map; this is because URI.js\n // gives the colons in URNs semantic meaning as the delimiters of path segements, and so it\n // should not appear unencoded in a segment itself.\n // See also the note above about RFC3986 and capitalalized hex digits.\n encode: {\n expression: /%(21|24|27|28|29|2A|2B|2C|3B|3D|40)/ig,\n map: {\n '%21': '!',\n '%24': '$',\n '%27': '\\'',\n '%28': '(',\n '%29': ')',\n '%2A': '*',\n '%2B': '+',\n '%2C': ',',\n '%3B': ';',\n '%3D': '=',\n '%40': '@'\n }\n },\n // These characters are the characters called out by RFC2141 as \"reserved\" characters that\n // should never appear in a URN, plus the colon character (see note above).\n decode: {\n expression: /[\\/\\?#:]/g,\n map: {\n '/': '%2F',\n '?': '%3F',\n '#': '%23',\n ':': '%3A'\n }\n }\n }\n };\n URI.encodeQuery = function(string, escapeQuerySpace) {\n var escaped = URI.encode(string + '');\n if (escapeQuerySpace === undefined) {\n escapeQuerySpace = URI.escapeQuerySpace;\n }\n\n return escapeQuerySpace ? escaped.replace(/%20/g, '+') : escaped;\n };\n URI.decodeQuery = function(string, escapeQuerySpace) {\n string += '';\n if (escapeQuerySpace === undefined) {\n escapeQuerySpace = URI.escapeQuerySpace;\n }\n\n try {\n return URI.decode(escapeQuerySpace ? string.replace(/\\+/g, '%20') : string);\n } catch(e) {\n // we're not going to mess with weird encodings,\n // give up and return the undecoded original string\n // see https://github.com/medialize/URI.js/issues/87\n // see https://github.com/medialize/URI.js/issues/92\n return string;\n }\n };\n // generate encode/decode path functions\n var _parts = {'encode':'encode', 'decode':'decode'};\n var _part;\n var generateAccessor = function(_group, _part) {\n return function(string) {\n try {\n return URI[_part](string + '').replace(URI.characters[_group][_part].expression, function(c) {\n return URI.characters[_group][_part].map[c];\n });\n } catch (e) {\n // we're not going to mess with weird encodings,\n // give up and return the undecoded original string\n // see https://github.com/medialize/URI.js/issues/87\n // see https://github.com/medialize/URI.js/issues/92\n return string;\n }\n };\n };\n\n for (_part in _parts) {\n URI[_part + 'PathSegment'] = generateAccessor('pathname', _parts[_part]);\n URI[_part + 'UrnPathSegment'] = generateAccessor('urnpath', _parts[_part]);\n }\n\n var generateSegmentedPathFunction = function(_sep, _codingFuncName, _innerCodingFuncName) {\n return function(string) {\n // Why pass in names of functions, rather than the function objects themselves? The\n // definitions of some functions (but in particular, URI.decode) will occasionally change due\n // to URI.js having ISO8859 and Unicode modes. Passing in the name and getting it will ensure\n // that the functions we use here are \"fresh\".\n var actualCodingFunc;\n if (!_innerCodingFuncName) {\n actualCodingFunc = URI[_codingFuncName];\n } else {\n actualCodingFunc = function(string) {\n return URI[_codingFuncName](URI[_innerCodingFuncName](string));\n };\n }\n\n var segments = (string + '').split(_sep);\n\n for (var i = 0, length = segments.length; i < length; i++) {\n segments[i] = actualCodingFunc(segments[i]);\n }\n\n return segments.join(_sep);\n };\n };\n\n // This takes place outside the above loop because we don't want, e.g., encodeUrnPath functions.\n URI.decodePath = generateSegmentedPathFunction('/', 'decodePathSegment');\n URI.decodeUrnPath = generateSegmentedPathFunction(':', 'decodeUrnPathSegment');\n URI.recodePath = generateSegmentedPathFunction('/', 'encodePathSegment', 'decode');\n URI.recodeUrnPath = generateSegmentedPathFunction(':', 'encodeUrnPathSegment', 'decode');\n\n URI.encodeReserved = generateAccessor('reserved', 'encode');\n\n URI.parse = function(string, parts) {\n var pos;\n if (!parts) {\n parts = {\n preventInvalidHostname: URI.preventInvalidHostname\n };\n }\n\n string = string.replace(URI.leading_whitespace_expression, '')\n // https://infra.spec.whatwg.org/#ascii-tab-or-newline\n string = string.replace(URI.ascii_tab_whitespace, '')\n\n // [protocol\"://\"[username[\":\"password]\"@\"]hostname[\":\"port]\"/\"?][path][\"?\"querystring][\"#\"fragment]\n\n // extract fragment\n pos = string.indexOf('#');\n if (pos > -1) {\n // escaping?\n parts.fragment = string.substring(pos + 1) || null;\n string = string.substring(0, pos);\n }\n\n // extract query\n pos = string.indexOf('?');\n if (pos > -1) {\n // escaping?\n parts.query = string.substring(pos + 1) || null;\n string = string.substring(0, pos);\n }\n\n // slashes and backslashes have lost all meaning for the web protocols (https, http, wss, ws)\n string = string.replace(/^(https?|ftp|wss?)?:+[/\\\\]*/i, '$1://');\n // slashes and backslashes have lost all meaning for scheme relative URLs\n string = string.replace(/^[/\\\\]{2,}/i, '//');\n\n // extract protocol\n if (string.substring(0, 2) === '//') {\n // relative-scheme\n parts.protocol = null;\n string = string.substring(2);\n // extract \"user:pass@host:port\"\n string = URI.parseAuthority(string, parts);\n } else {\n pos = string.indexOf(':');\n if (pos > -1) {\n parts.protocol = string.substring(0, pos) || null;\n if (parts.protocol && !parts.protocol.match(URI.protocol_expression)) {\n // : may be within the path\n parts.protocol = undefined;\n } else if (string.substring(pos + 1, pos + 3).replace(/\\\\/g, '/') === '//') {\n string = string.substring(pos + 3);\n\n // extract \"user:pass@host:port\"\n string = URI.parseAuthority(string, parts);\n } else {\n string = string.substring(pos + 1);\n parts.urn = true;\n }\n }\n }\n\n // what's left must be the path\n parts.path = string;\n\n // and we're done\n return parts;\n };\n URI.parseHost = function(string, parts) {\n if (!string) {\n string = '';\n }\n\n // Copy chrome, IE, opera backslash-handling behavior.\n // Back slashes before the query string get converted to forward slashes\n // See: https://github.com/joyent/node/blob/386fd24f49b0e9d1a8a076592a404168faeecc34/lib/url.js#L115-L124\n // See: https://code.google.com/p/chromium/issues/detail?id=25916\n // https://github.com/medialize/URI.js/pull/233\n string = string.replace(/\\\\/g, '/');\n\n // extract host:port\n var pos = string.indexOf('/');\n var bracketPos;\n var t;\n\n if (pos === -1) {\n pos = string.length;\n }\n\n if (string.charAt(0) === '[') {\n // IPv6 host - http://tools.ietf.org/html/draft-ietf-6man-text-addr-representation-04#section-6\n // I claim most client software breaks on IPv6 anyways. To simplify things, URI only accepts\n // IPv6+port in the format [2001:db8::1]:80 (for the time being)\n bracketPos = string.indexOf(']');\n parts.hostname = string.substring(1, bracketPos) || null;\n parts.port = string.substring(bracketPos + 2, pos) || null;\n if (parts.port === '/') {\n parts.port = null;\n }\n } else {\n var firstColon = string.indexOf(':');\n var firstSlash = string.indexOf('/');\n var nextColon = string.indexOf(':', firstColon + 1);\n if (nextColon !== -1 && (firstSlash === -1 || nextColon < firstSlash)) {\n // IPv6 host contains multiple colons - but no port\n // this notation is actually not allowed by RFC 3986, but we're a liberal parser\n parts.hostname = string.substring(0, pos) || null;\n parts.port = null;\n } else {\n t = string.substring(0, pos).split(':');\n parts.hostname = t[0] || null;\n parts.port = t[1] || null;\n }\n }\n\n if (parts.hostname && string.substring(pos).charAt(0) !== '/') {\n pos++;\n string = '/' + string;\n }\n\n if (parts.preventInvalidHostname) {\n URI.ensureValidHostname(parts.hostname, parts.protocol);\n }\n\n if (parts.port) {\n URI.ensureValidPort(parts.port);\n }\n\n return string.substring(pos) || '/';\n };\n URI.parseAuthority = function(string, parts) {\n string = URI.parseUserinfo(string, parts);\n return URI.parseHost(string, parts);\n };\n URI.parseUserinfo = function(string, parts) {\n // extract username:password\n var _string = string\n var firstBackSlash = string.indexOf('\\\\');\n if (firstBackSlash !== -1) {\n string = string.replace(/\\\\/g, '/')\n }\n var firstSlash = string.indexOf('/');\n var pos = string.lastIndexOf('@', firstSlash > -1 ? firstSlash : string.length - 1);\n var t;\n\n // authority@ must come before /path or \\path\n if (pos > -1 && (firstSlash === -1 || pos < firstSlash)) {\n t = string.substring(0, pos).split(':');\n parts.username = t[0] ? URI.decode(t[0]) : null;\n t.shift();\n parts.password = t[0] ? URI.decode(t.join(':')) : null;\n string = _string.substring(pos + 1);\n } else {\n parts.username = null;\n parts.password = null;\n }\n\n return string;\n };\n URI.parseQuery = function(string, escapeQuerySpace) {\n if (!string) {\n return {};\n }\n\n // throw out the funky business - \"?\"[name\"=\"value\"&\"]+\n string = string.replace(/&+/g, '&').replace(/^\\?*&*|&+$/g, '');\n\n if (!string) {\n return {};\n }\n\n var items = {};\n var splits = string.split('&');\n var length = splits.length;\n var v, name, value;\n\n for (var i = 0; i < length; i++) {\n v = splits[i].split('=');\n name = URI.decodeQuery(v.shift(), escapeQuerySpace);\n // no \"=\" is null according to http://dvcs.w3.org/hg/url/raw-file/tip/Overview.html#collect-url-parameters\n value = v.length ? URI.decodeQuery(v.join('='), escapeQuerySpace) : null;\n\n if (name === '__proto__') {\n // ignore attempt at exploiting JavaScript internals\n continue;\n } else if (hasOwn.call(items, name)) {\n if (typeof items[name] === 'string' || items[name] === null) {\n items[name] = [items[name]];\n }\n\n items[name].push(value);\n } else {\n items[name] = value;\n }\n }\n\n return items;\n };\n\n URI.build = function(parts) {\n var t = '';\n var requireAbsolutePath = false\n\n if (parts.protocol) {\n t += parts.protocol + ':';\n }\n\n if (!parts.urn && (t || parts.hostname)) {\n t += '//';\n requireAbsolutePath = true\n }\n\n t += (URI.buildAuthority(parts) || '');\n\n if (typeof parts.path === 'string') {\n if (parts.path.charAt(0) !== '/' && requireAbsolutePath) {\n t += '/';\n }\n\n t += parts.path;\n }\n\n if (typeof parts.query === 'string' && parts.query) {\n t += '?' + parts.query;\n }\n\n if (typeof parts.fragment === 'string' && parts.fragment) {\n t += '#' + parts.fragment;\n }\n return t;\n };\n URI.buildHost = function(parts) {\n var t = '';\n\n if (!parts.hostname) {\n return '';\n } else if (URI.ip6_expression.test(parts.hostname)) {\n t += '[' + parts.hostname + ']';\n } else {\n t += parts.hostname;\n }\n\n if (parts.port) {\n t += ':' + parts.port;\n }\n\n return t;\n };\n URI.buildAuthority = function(parts) {\n return URI.buildUserinfo(parts) + URI.buildHost(parts);\n };\n URI.buildUserinfo = function(parts) {\n var t = '';\n\n if (parts.username) {\n t += URI.encode(parts.username);\n }\n\n if (parts.password) {\n t += ':' + URI.encode(parts.password);\n }\n\n if (t) {\n t += '@';\n }\n\n return t;\n };\n URI.buildQuery = function(data, duplicateQueryParameters, escapeQuerySpace) {\n // according to http://tools.ietf.org/html/rfc3986 or http://labs.apache.org/webarch/uri/rfc/rfc3986.html\n // being »-._~!$&'()*+,;=:@/?« %HEX and alnum are allowed\n // the RFC explicitly states ?/foo being a valid use case, no mention of parameter syntax!\n // URI.js treats the query string as being application/x-www-form-urlencoded\n // see http://www.w3.org/TR/REC-html40/interact/forms.html#form-content-type\n\n var t = '';\n var unique, key, i, length;\n for (key in data) {\n if (key === '__proto__') {\n // ignore attempt at exploiting JavaScript internals\n continue;\n } else if (hasOwn.call(data, key)) {\n if (isArray(data[key])) {\n unique = {};\n for (i = 0, length = data[key].length; i < length; i++) {\n if (data[key][i] !== undefined && unique[data[key][i] + ''] === undefined) {\n t += '&' + URI.buildQueryParameter(key, data[key][i], escapeQuerySpace);\n if (duplicateQueryParameters !== true) {\n unique[data[key][i] + ''] = true;\n }\n }\n }\n } else if (data[key] !== undefined) {\n t += '&' + URI.buildQueryParameter(key, data[key], escapeQuerySpace);\n }\n }\n }\n\n return t.substring(1);\n };\n URI.buildQueryParameter = function(name, value, escapeQuerySpace) {\n // http://www.w3.org/TR/REC-html40/interact/forms.html#form-content-type -- application/x-www-form-urlencoded\n // don't append \"=\" for null values, according to http://dvcs.w3.org/hg/url/raw-file/tip/Overview.html#url-parameter-serialization\n return URI.encodeQuery(name, escapeQuerySpace) + (value !== null ? '=' + URI.encodeQuery(value, escapeQuerySpace) : '');\n };\n\n URI.addQuery = function(data, name, value) {\n if (typeof name === 'object') {\n for (var key in name) {\n if (hasOwn.call(name, key)) {\n URI.addQuery(data, key, name[key]);\n }\n }\n } else if (typeof name === 'string') {\n if (data[name] === undefined) {\n data[name] = value;\n return;\n } else if (typeof data[name] === 'string') {\n data[name] = [data[name]];\n }\n\n if (!isArray(value)) {\n value = [value];\n }\n\n data[name] = (data[name] || []).concat(value);\n } else {\n throw new TypeError('URI.addQuery() accepts an object, string as the name parameter');\n }\n };\n\n URI.setQuery = function(data, name, value) {\n if (typeof name === 'object') {\n for (var key in name) {\n if (hasOwn.call(name, key)) {\n URI.setQuery(data, key, name[key]);\n }\n }\n } else if (typeof name === 'string') {\n data[name] = value === undefined ? null : value;\n } else {\n throw new TypeError('URI.setQuery() accepts an object, string as the name parameter');\n }\n };\n\n URI.removeQuery = function(data, name, value) {\n var i, length, key;\n\n if (isArray(name)) {\n for (i = 0, length = name.length; i < length; i++) {\n data[name[i]] = undefined;\n }\n } else if (getType(name) === 'RegExp') {\n for (key in data) {\n if (name.test(key)) {\n data[key] = undefined;\n }\n }\n } else if (typeof name === 'object') {\n for (key in name) {\n if (hasOwn.call(name, key)) {\n URI.removeQuery(data, key, name[key]);\n }\n }\n } else if (typeof name === 'string') {\n if (value !== undefined) {\n if (getType(value) === 'RegExp') {\n if (!isArray(data[name]) && value.test(data[name])) {\n data[name] = undefined;\n } else {\n data[name] = filterArrayValues(data[name], value);\n }\n } else if (data[name] === String(value) && (!isArray(value) || value.length === 1)) {\n data[name] = undefined;\n } else if (isArray(data[name])) {\n data[name] = filterArrayValues(data[name], value);\n }\n } else {\n data[name] = undefined;\n }\n } else {\n throw new TypeError('URI.removeQuery() accepts an object, string, RegExp as the first parameter');\n }\n };\n URI.hasQuery = function(data, name, value, withinArray) {\n switch (getType(name)) {\n case 'String':\n // Nothing to do here\n break;\n\n case 'RegExp':\n for (var key in data) {\n if (hasOwn.call(data, key)) {\n if (name.test(key) && (value === undefined || URI.hasQuery(data, key, value))) {\n return true;\n }\n }\n }\n\n return false;\n\n case 'Object':\n for (var _key in name) {\n if (hasOwn.call(name, _key)) {\n if (!URI.hasQuery(data, _key, name[_key])) {\n return false;\n }\n }\n }\n\n return true;\n\n default:\n throw new TypeError('URI.hasQuery() accepts a string, regular expression or object as the name parameter');\n }\n\n switch (getType(value)) {\n case 'Undefined':\n // true if exists (but may be empty)\n return name in data; // data[name] !== undefined;\n\n case 'Boolean':\n // true if exists and non-empty\n var _booly = Boolean(isArray(data[name]) ? data[name].length : data[name]);\n return value === _booly;\n\n case 'Function':\n // allow complex comparison\n return !!value(data[name], name, data);\n\n case 'Array':\n if (!isArray(data[name])) {\n return false;\n }\n\n var op = withinArray ? arrayContains : arraysEqual;\n return op(data[name], value);\n\n case 'RegExp':\n if (!isArray(data[name])) {\n return Boolean(data[name] && data[name].match(value));\n }\n\n if (!withinArray) {\n return false;\n }\n\n return arrayContains(data[name], value);\n\n case 'Number':\n value = String(value);\n /* falls through */\n case 'String':\n if (!isArray(data[name])) {\n return data[name] === value;\n }\n\n if (!withinArray) {\n return false;\n }\n\n return arrayContains(data[name], value);\n\n default:\n throw new TypeError('URI.hasQuery() accepts undefined, boolean, string, number, RegExp, Function as the value parameter');\n }\n };\n\n\n URI.joinPaths = function() {\n var input = [];\n var segments = [];\n var nonEmptySegments = 0;\n\n for (var i = 0; i < arguments.length; i++) {\n var url = new URI(arguments[i]);\n input.push(url);\n var _segments = url.segment();\n for (var s = 0; s < _segments.length; s++) {\n if (typeof _segments[s] === 'string') {\n segments.push(_segments[s]);\n }\n\n if (_segments[s]) {\n nonEmptySegments++;\n }\n }\n }\n\n if (!segments.length || !nonEmptySegments) {\n return new URI('');\n }\n\n var uri = new URI('').segment(segments);\n\n if (input[0].path() === '' || input[0].path().slice(0, 1) === '/') {\n uri.path('/' + uri.path());\n }\n\n return uri.normalize();\n };\n\n URI.commonPath = function(one, two) {\n var length = Math.min(one.length, two.length);\n var pos;\n\n // find first non-matching character\n for (pos = 0; pos < length; pos++) {\n if (one.charAt(pos) !== two.charAt(pos)) {\n pos--;\n break;\n }\n }\n\n if (pos < 1) {\n return one.charAt(0) === two.charAt(0) && one.charAt(0) === '/' ? '/' : '';\n }\n\n // revert to last /\n if (one.charAt(pos) !== '/' || two.charAt(pos) !== '/') {\n pos = one.substring(0, pos).lastIndexOf('/');\n }\n\n return one.substring(0, pos + 1);\n };\n\n URI.withinString = function(string, callback, options) {\n options || (options = {});\n var _start = options.start || URI.findUri.start;\n var _end = options.end || URI.findUri.end;\n var _trim = options.trim || URI.findUri.trim;\n var _parens = options.parens || URI.findUri.parens;\n var _attributeOpen = /[a-z0-9-]=[\"']?$/i;\n\n _start.lastIndex = 0;\n while (true) {\n var match = _start.exec(string);\n if (!match) {\n break;\n }\n\n var start = match.index;\n if (options.ignoreHtml) {\n // attribut(e=[\"']?$)\n var attributeOpen = string.slice(Math.max(start - 3, 0), start);\n if (attributeOpen && _attributeOpen.test(attributeOpen)) {\n continue;\n }\n }\n\n var end = start + string.slice(start).search(_end);\n var slice = string.slice(start, end);\n // make sure we include well balanced parens\n var parensEnd = -1;\n while (true) {\n var parensMatch = _parens.exec(slice);\n if (!parensMatch) {\n break;\n }\n\n var parensMatchEnd = parensMatch.index + parensMatch[0].length;\n parensEnd = Math.max(parensEnd, parensMatchEnd);\n }\n\n if (parensEnd > -1) {\n slice = slice.slice(0, parensEnd) + slice.slice(parensEnd).replace(_trim, '');\n } else {\n slice = slice.replace(_trim, '');\n }\n\n if (slice.length <= match[0].length) {\n // the extract only contains the starting marker of a URI,\n // e.g. \"www\" or \"http://\"\n continue;\n }\n\n if (options.ignore && options.ignore.test(slice)) {\n continue;\n }\n\n end = start + slice.length;\n var result = callback(slice, start, end, string);\n if (result === undefined) {\n _start.lastIndex = end;\n continue;\n }\n\n result = String(result);\n string = string.slice(0, start) + result + string.slice(end);\n _start.lastIndex = start + result.length;\n }\n\n _start.lastIndex = 0;\n return string;\n };\n\n URI.ensureValidHostname = function(v, protocol) {\n // Theoretically URIs allow percent-encoding in Hostnames (according to RFC 3986)\n // they are not part of DNS and therefore ignored by URI.js\n\n var hasHostname = !!v; // not null and not an empty string\n var hasProtocol = !!protocol;\n var rejectEmptyHostname = false;\n\n if (hasProtocol) {\n rejectEmptyHostname = arrayContains(URI.hostProtocols, protocol);\n }\n\n if (rejectEmptyHostname && !hasHostname) {\n throw new TypeError('Hostname cannot be empty, if protocol is ' + protocol);\n } else if (v && v.match(URI.invalid_hostname_characters)) {\n // test punycode\n if (!punycode) {\n throw new TypeError('Hostname \"' + v + '\" contains characters other than [A-Z0-9.-:_] and Punycode.js is not available');\n }\n if (punycode.toASCII(v).match(URI.invalid_hostname_characters)) {\n throw new TypeError('Hostname \"' + v + '\" contains characters other than [A-Z0-9.-:_]');\n }\n }\n };\n\n URI.ensureValidPort = function (v) {\n if (!v) {\n return;\n }\n\n var port = Number(v);\n if (isInteger(port) && (port > 0) && (port < 65536)) {\n return;\n }\n\n throw new TypeError('Port \"' + v + '\" is not a valid port');\n };\n\n // noConflict\n URI.noConflict = function(removeAll) {\n if (removeAll) {\n var unconflicted = {\n URI: this.noConflict()\n };\n\n if (root.URITemplate && typeof root.URITemplate.noConflict === 'function') {\n unconflicted.URITemplate = root.URITemplate.noConflict();\n }\n\n if (root.IPv6 && typeof root.IPv6.noConflict === 'function') {\n unconflicted.IPv6 = root.IPv6.noConflict();\n }\n\n if (root.SecondLevelDomains && typeof root.SecondLevelDomains.noConflict === 'function') {\n unconflicted.SecondLevelDomains = root.SecondLevelDomains.noConflict();\n }\n\n return unconflicted;\n } else if (root.URI === this) {\n root.URI = _URI;\n }\n\n return this;\n };\n\n p.build = function(deferBuild) {\n if (deferBuild === true) {\n this._deferred_build = true;\n } else if (deferBuild === undefined || this._deferred_build) {\n this._string = URI.build(this._parts);\n this._deferred_build = false;\n }\n\n return this;\n };\n\n p.clone = function() {\n return new URI(this);\n };\n\n p.valueOf = p.toString = function() {\n return this.build(false)._string;\n };\n\n\n function generateSimpleAccessor(_part){\n return function(v, build) {\n if (v === undefined) {\n return this._parts[_part] || '';\n } else {\n this._parts[_part] = v || null;\n this.build(!build);\n return this;\n }\n };\n }\n\n function generatePrefixAccessor(_part, _key){\n return function(v, build) {\n if (v === undefined) {\n return this._parts[_part] || '';\n } else {\n if (v !== null) {\n v = v + '';\n if (v.charAt(0) === _key) {\n v = v.substring(1);\n }\n }\n\n this._parts[_part] = v;\n this.build(!build);\n return this;\n }\n };\n }\n\n p.protocol = generateSimpleAccessor('protocol');\n p.username = generateSimpleAccessor('username');\n p.password = generateSimpleAccessor('password');\n p.hostname = generateSimpleAccessor('hostname');\n p.port = generateSimpleAccessor('port');\n p.query = generatePrefixAccessor('query', '?');\n p.fragment = generatePrefixAccessor('fragment', '#');\n\n p.search = function(v, build) {\n var t = this.query(v, build);\n return typeof t === 'string' && t.length ? ('?' + t) : t;\n };\n p.hash = function(v, build) {\n var t = this.fragment(v, build);\n return typeof t === 'string' && t.length ? ('#' + t) : t;\n };\n\n p.pathname = function(v, build) {\n if (v === undefined || v === true) {\n var res = this._parts.path || (this._parts.hostname ? '/' : '');\n return v ? (this._parts.urn ? URI.decodeUrnPath : URI.decodePath)(res) : res;\n } else {\n if (this._parts.urn) {\n this._parts.path = v ? URI.recodeUrnPath(v) : '';\n } else {\n this._parts.path = v ? URI.recodePath(v) : '/';\n }\n this.build(!build);\n return this;\n }\n };\n p.path = p.pathname;\n p.href = function(href, build) {\n var key;\n\n if (href === undefined) {\n return this.toString();\n }\n\n this._string = '';\n this._parts = URI._parts();\n\n var _URI = href instanceof URI;\n var _object = typeof href === 'object' && (href.hostname || href.path || href.pathname);\n if (href.nodeName) {\n var attribute = URI.getDomAttribute(href);\n href = href[attribute] || '';\n _object = false;\n }\n\n // window.location is reported to be an object, but it's not the sort\n // of object we're looking for:\n // * location.protocol ends with a colon\n // * location.query != object.search\n // * location.hash != object.fragment\n // simply serializing the unknown object should do the trick\n // (for location, not for everything...)\n if (!_URI && _object && href.pathname !== undefined) {\n href = href.toString();\n }\n\n if (typeof href === 'string' || href instanceof String) {\n this._parts = URI.parse(String(href), this._parts);\n } else if (_URI || _object) {\n var src = _URI ? href._parts : href;\n for (key in src) {\n if (key === 'query') { continue; }\n if (hasOwn.call(this._parts, key)) {\n this._parts[key] = src[key];\n }\n }\n if (src.query) {\n this.query(src.query, false);\n }\n } else {\n throw new TypeError('invalid input');\n }\n\n this.build(!build);\n return this;\n };\n\n // identification accessors\n p.is = function(what) {\n var ip = false;\n var ip4 = false;\n var ip6 = false;\n var name = false;\n var sld = false;\n var idn = false;\n var punycode = false;\n var relative = !this._parts.urn;\n\n if (this._parts.hostname) {\n relative = false;\n ip4 = URI.ip4_expression.test(this._parts.hostname);\n ip6 = URI.ip6_expression.test(this._parts.hostname);\n ip = ip4 || ip6;\n name = !ip;\n sld = name && SLD && SLD.has(this._parts.hostname);\n idn = name && URI.idn_expression.test(this._parts.hostname);\n punycode = name && URI.punycode_expression.test(this._parts.hostname);\n }\n\n switch (what.toLowerCase()) {\n case 'relative':\n return relative;\n\n case 'absolute':\n return !relative;\n\n // hostname identification\n case 'domain':\n case 'name':\n return name;\n\n case 'sld':\n return sld;\n\n case 'ip':\n return ip;\n\n case 'ip4':\n case 'ipv4':\n case 'inet4':\n return ip4;\n\n case 'ip6':\n case 'ipv6':\n case 'inet6':\n return ip6;\n\n case 'idn':\n return idn;\n\n case 'url':\n return !this._parts.urn;\n\n case 'urn':\n return !!this._parts.urn;\n\n case 'punycode':\n return punycode;\n }\n\n return null;\n };\n\n // component specific input validation\n var _protocol = p.protocol;\n var _port = p.port;\n var _hostname = p.hostname;\n\n p.protocol = function(v, build) {\n if (v) {\n // accept trailing ://\n v = v.replace(/:(\\/\\/)?$/, '');\n\n if (!v.match(URI.protocol_expression)) {\n throw new TypeError('Protocol \"' + v + '\" contains characters other than [A-Z0-9.+-] or doesn\\'t start with [A-Z]');\n }\n }\n\n return _protocol.call(this, v, build);\n };\n p.scheme = p.protocol;\n p.port = function(v, build) {\n if (this._parts.urn) {\n return v === undefined ? '' : this;\n }\n\n if (v !== undefined) {\n if (v === 0) {\n v = null;\n }\n\n if (v) {\n v += '';\n if (v.charAt(0) === ':') {\n v = v.substring(1);\n }\n\n URI.ensureValidPort(v);\n }\n }\n return _port.call(this, v, build);\n };\n p.hostname = function(v, build) {\n if (this._parts.urn) {\n return v === undefined ? '' : this;\n }\n\n if (v !== undefined) {\n var x = { preventInvalidHostname: this._parts.preventInvalidHostname };\n var res = URI.parseHost(v, x);\n if (res !== '/') {\n throw new TypeError('Hostname \"' + v + '\" contains characters other than [A-Z0-9.-]');\n }\n\n v = x.hostname;\n if (this._parts.preventInvalidHostname) {\n URI.ensureValidHostname(v, this._parts.protocol);\n }\n }\n\n return _hostname.call(this, v, build);\n };\n\n // compound accessors\n p.origin = function(v, build) {\n if (this._parts.urn) {\n return v === undefined ? '' : this;\n }\n\n if (v === undefined) {\n var protocol = this.protocol();\n var authority = this.authority();\n if (!authority) {\n return '';\n }\n\n return (protocol ? protocol + '://' : '') + this.authority();\n } else {\n var origin = URI(v);\n this\n .protocol(origin.protocol())\n .authority(origin.authority())\n .build(!build);\n return this;\n }\n };\n p.host = function(v, build) {\n if (this._parts.urn) {\n return v === undefined ? '' : this;\n }\n\n if (v === undefined) {\n return this._parts.hostname ? URI.buildHost(this._parts) : '';\n } else {\n var res = URI.parseHost(v, this._parts);\n if (res !== '/') {\n throw new TypeError('Hostname \"' + v + '\" contains characters other than [A-Z0-9.-]');\n }\n\n this.build(!build);\n return this;\n }\n };\n p.authority = function(v, build) {\n if (this._parts.urn) {\n return v === undefined ? '' : this;\n }\n\n if (v === undefined) {\n return this._parts.hostname ? URI.buildAuthority(this._parts) : '';\n } else {\n var res = URI.parseAuthority(v, this._parts);\n if (res !== '/') {\n throw new TypeError('Hostname \"' + v + '\" contains characters other than [A-Z0-9.-]');\n }\n\n this.build(!build);\n return this;\n }\n };\n p.userinfo = function(v, build) {\n if (this._parts.urn) {\n return v === undefined ? '' : this;\n }\n\n if (v === undefined) {\n var t = URI.buildUserinfo(this._parts);\n return t ? t.substring(0, t.length -1) : t;\n } else {\n if (v[v.length-1] !== '@') {\n v += '@';\n }\n\n URI.parseUserinfo(v, this._parts);\n this.build(!build);\n return this;\n }\n };\n p.resource = function(v, build) {\n var parts;\n\n if (v === undefined) {\n return this.path() + this.search() + this.hash();\n }\n\n parts = URI.parse(v);\n this._parts.path = parts.path;\n this._parts.query = parts.query;\n this._parts.fragment = parts.fragment;\n this.build(!build);\n return this;\n };\n\n // fraction accessors\n p.subdomain = function(v, build) {\n if (this._parts.urn) {\n return v === undefined ? '' : this;\n }\n\n // convenience, return \"www\" from \"www.example.org\"\n if (v === undefined) {\n if (!this._parts.hostname || this.is('IP')) {\n return '';\n }\n\n // grab domain and add another segment\n var end = this._parts.hostname.length - this.domain().length - 1;\n return this._parts.hostname.substring(0, end) || '';\n } else {\n var e = this._parts.hostname.length - this.domain().length;\n var sub = this._parts.hostname.substring(0, e);\n var replace = new RegExp('^' + escapeRegEx(sub));\n\n if (v && v.charAt(v.length - 1) !== '.') {\n v += '.';\n }\n\n if (v.indexOf(':') !== -1) {\n throw new TypeError('Domains cannot contain colons');\n }\n\n if (v) {\n URI.ensureValidHostname(v, this._parts.protocol);\n }\n\n this._parts.hostname = this._parts.hostname.replace(replace, v);\n this.build(!build);\n return this;\n }\n };\n p.domain = function(v, build) {\n if (this._parts.urn) {\n return v === undefined ? '' : this;\n }\n\n if (typeof v === 'boolean') {\n build = v;\n v = undefined;\n }\n\n // convenience, return \"example.org\" from \"www.example.org\"\n if (v === undefined) {\n if (!this._parts.hostname || this.is('IP')) {\n return '';\n }\n\n // if hostname consists of 1 or 2 segments, it must be the domain\n var t = this._parts.hostname.match(/\\./g);\n if (t && t.length < 2) {\n return this._parts.hostname;\n }\n\n // grab tld and add another segment\n var end = this._parts.hostname.length - this.tld(build).length - 1;\n end = this._parts.hostname.lastIndexOf('.', end -1) + 1;\n return this._parts.hostname.substring(end) || '';\n } else {\n if (!v) {\n throw new TypeError('cannot set domain empty');\n }\n\n if (v.indexOf(':') !== -1) {\n throw new TypeError('Domains cannot contain colons');\n }\n\n URI.ensureValidHostname(v, this._parts.protocol);\n\n if (!this._parts.hostname || this.is('IP')) {\n this._parts.hostname = v;\n } else {\n var replace = new RegExp(escapeRegEx(this.domain()) + '$');\n this._parts.hostname = this._parts.hostname.replace(replace, v);\n }\n\n this.build(!build);\n return this;\n }\n };\n p.tld = function(v, build) {\n if (this._parts.urn) {\n return v === undefined ? '' : this;\n }\n\n if (typeof v === 'boolean') {\n build = v;\n v = undefined;\n }\n\n // return \"org\" from \"www.example.org\"\n if (v === undefined) {\n if (!this._parts.hostname || this.is('IP')) {\n return '';\n }\n\n var pos = this._parts.hostname.lastIndexOf('.');\n var tld = this._parts.hostname.substring(pos + 1);\n\n if (build !== true && SLD && SLD.list[tld.toLowerCase()]) {\n return SLD.get(this._parts.hostname) || tld;\n }\n\n return tld;\n } else {\n var replace;\n\n if (!v) {\n throw new TypeError('cannot set TLD empty');\n } else if (v.match(/[^a-zA-Z0-9-]/)) {\n if (SLD && SLD.is(v)) {\n replace = new RegExp(escapeRegEx(this.tld()) + '$');\n this._parts.hostname = this._parts.hostname.replace(replace, v);\n } else {\n throw new TypeError('TLD \"' + v + '\" contains characters other than [A-Z0-9]');\n }\n } else if (!this._parts.hostname || this.is('IP')) {\n throw new ReferenceError('cannot set TLD on non-domain host');\n } else {\n replace = new RegExp(escapeRegEx(this.tld()) + '$');\n this._parts.hostname = this._parts.hostname.replace(replace, v);\n }\n\n this.build(!build);\n return this;\n }\n };\n p.directory = function(v, build) {\n if (this._parts.urn) {\n return v === undefined ? '' : this;\n }\n\n if (v === undefined || v === true) {\n if (!this._parts.path && !this._parts.hostname) {\n return '';\n }\n\n if (this._parts.path === '/') {\n return '/';\n }\n\n var end = this._parts.path.length - this.filename().length - 1;\n var res = this._parts.path.substring(0, end) || (this._parts.hostname ? '/' : '');\n\n return v ? URI.decodePath(res) : res;\n\n } else {\n var e = this._parts.path.length - this.filename().length;\n var directory = this._parts.path.substring(0, e);\n var replace = new RegExp('^' + escapeRegEx(directory));\n\n // fully qualifier directories begin with a slash\n if (!this.is('relative')) {\n if (!v) {\n v = '/';\n }\n\n if (v.charAt(0) !== '/') {\n v = '/' + v;\n }\n }\n\n // directories always end with a slash\n if (v && v.charAt(v.length - 1) !== '/') {\n v += '/';\n }\n\n v = URI.recodePath(v);\n this._parts.path = this._parts.path.replace(replace, v);\n this.build(!build);\n return this;\n }\n };\n p.filename = function(v, build) {\n if (this._parts.urn) {\n return v === undefined ? '' : this;\n }\n\n if (typeof v !== 'string') {\n if (!this._parts.path || this._parts.path === '/') {\n return '';\n }\n\n var pos = this._parts.path.lastIndexOf('/');\n var res = this._parts.path.substring(pos+1);\n\n return v ? URI.decodePathSegment(res) : res;\n } else {\n var mutatedDirectory = false;\n\n if (v.charAt(0) === '/') {\n v = v.substring(1);\n }\n\n if (v.match(/\\.?\\//)) {\n mutatedDirectory = true;\n }\n\n var replace = new RegExp(escapeRegEx(this.filename()) + '$');\n v = URI.recodePath(v);\n this._parts.path = this._parts.path.replace(replace, v);\n\n if (mutatedDirectory) {\n this.normalizePath(build);\n } else {\n this.build(!build);\n }\n\n return this;\n }\n };\n p.suffix = function(v, build) {\n if (this._parts.urn) {\n return v === undefined ? '' : this;\n }\n\n if (v === undefined || v === true) {\n if (!this._parts.path || this._parts.path === '/') {\n return '';\n }\n\n var filename = this.filename();\n var pos = filename.lastIndexOf('.');\n var s, res;\n\n if (pos === -1) {\n return '';\n }\n\n // suffix may only contain alnum characters (yup, I made this up.)\n s = filename.substring(pos+1);\n res = (/^[a-z0-9%]+$/i).test(s) ? s : '';\n return v ? URI.decodePathSegment(res) : res;\n } else {\n if (v.charAt(0) === '.') {\n v = v.substring(1);\n }\n\n var suffix = this.suffix();\n var replace;\n\n if (!suffix) {\n if (!v) {\n return this;\n }\n\n this._parts.path += '.' + URI.recodePath(v);\n } else if (!v) {\n replace = new RegExp(escapeRegEx('.' + suffix) + '$');\n } else {\n replace = new RegExp(escapeRegEx(suffix) + '$');\n }\n\n if (replace) {\n v = URI.recodePath(v);\n this._parts.path = this._parts.path.replace(replace, v);\n }\n\n this.build(!build);\n return this;\n }\n };\n p.segment = function(segment, v, build) {\n var separator = this._parts.urn ? ':' : '/';\n var path = this.path();\n var absolute = path.substring(0, 1) === '/';\n var segments = path.split(separator);\n\n if (segment !== undefined && typeof segment !== 'number') {\n build = v;\n v = segment;\n segment = undefined;\n }\n\n if (segment !== undefined && typeof segment !== 'number') {\n throw new Error('Bad segment \"' + segment + '\", must be 0-based integer');\n }\n\n if (absolute) {\n segments.shift();\n }\n\n if (segment < 0) {\n // allow negative indexes to address from the end\n segment = Math.max(segments.length + segment, 0);\n }\n\n if (v === undefined) {\n /*jshint laxbreak: true */\n return segment === undefined\n ? segments\n : segments[segment];\n /*jshint laxbreak: false */\n } else if (segment === null || segments[segment] === undefined) {\n if (isArray(v)) {\n segments = [];\n // collapse empty elements within array\n for (var i=0, l=v.length; i < l; i++) {\n if (!v[i].length && (!segments.length || !segments[segments.length -1].length)) {\n continue;\n }\n\n if (segments.length && !segments[segments.length -1].length) {\n segments.pop();\n }\n\n segments.push(trimSlashes(v[i]));\n }\n } else if (v || typeof v === 'string') {\n v = trimSlashes(v);\n if (segments[segments.length -1] === '') {\n // empty trailing elements have to be overwritten\n // to prevent results such as /foo//bar\n segments[segments.length -1] = v;\n } else {\n segments.push(v);\n }\n }\n } else {\n if (v) {\n segments[segment] = trimSlashes(v);\n } else {\n segments.splice(segment, 1);\n }\n }\n\n if (absolute) {\n segments.unshift('');\n }\n\n return this.path(segments.join(separator), build);\n };\n p.segmentCoded = function(segment, v, build) {\n var segments, i, l;\n\n if (typeof segment !== 'number') {\n build = v;\n v = segment;\n segment = undefined;\n }\n\n if (v === undefined) {\n segments = this.segment(segment, v, build);\n if (!isArray(segments)) {\n segments = segments !== undefined ? URI.decode(segments) : undefined;\n } else {\n for (i = 0, l = segments.length; i < l; i++) {\n segments[i] = URI.decode(segments[i]);\n }\n }\n\n return segments;\n }\n\n if (!isArray(v)) {\n v = (typeof v === 'string' || v instanceof String) ? URI.encode(v) : v;\n } else {\n for (i = 0, l = v.length; i < l; i++) {\n v[i] = URI.encode(v[i]);\n }\n }\n\n return this.segment(segment, v, build);\n };\n\n // mutating query string\n var q = p.query;\n p.query = function(v, build) {\n if (v === true) {\n return URI.parseQuery(this._parts.query, this._parts.escapeQuerySpace);\n } else if (typeof v === 'function') {\n var data = URI.parseQuery(this._parts.query, this._parts.escapeQuerySpace);\n var result = v.call(this, data);\n this._parts.query = URI.buildQuery(result || data, this._parts.duplicateQueryParameters, this._parts.escapeQuerySpace);\n this.build(!build);\n return this;\n } else if (v !== undefined && typeof v !== 'string') {\n this._parts.query = URI.buildQuery(v, this._parts.duplicateQueryParameters, this._parts.escapeQuerySpace);\n this.build(!build);\n return this;\n } else {\n return q.call(this, v, build);\n }\n };\n p.setQuery = function(name, value, build) {\n var data = URI.parseQuery(this._parts.query, this._parts.escapeQuerySpace);\n\n if (typeof name === 'string' || name instanceof String) {\n data[name] = value !== undefined ? value : null;\n } else if (typeof name === 'object') {\n for (var key in name) {\n if (hasOwn.call(name, key)) {\n data[key] = name[key];\n }\n }\n } else {\n throw new TypeError('URI.addQuery() accepts an object, string as the name parameter');\n }\n\n this._parts.query = URI.buildQuery(data, this._parts.duplicateQueryParameters, this._parts.escapeQuerySpace);\n if (typeof name !== 'string') {\n build = value;\n }\n\n this.build(!build);\n return this;\n };\n p.addQuery = function(name, value, build) {\n var data = URI.parseQuery(this._parts.query, this._parts.escapeQuerySpace);\n URI.addQuery(data, name, value === undefined ? null : value);\n this._parts.query = URI.buildQuery(data, this._parts.duplicateQueryParameters, this._parts.escapeQuerySpace);\n if (typeof name !== 'string') {\n build = value;\n }\n\n this.build(!build);\n return this;\n };\n p.removeQuery = function(name, value, build) {\n var data = URI.parseQuery(this._parts.query, this._parts.escapeQuerySpace);\n URI.removeQuery(data, name, value);\n this._parts.query = URI.buildQuery(data, this._parts.duplicateQueryParameters, this._parts.escapeQuerySpace);\n if (typeof name !== 'string') {\n build = value;\n }\n\n this.build(!build);\n return this;\n };\n p.hasQuery = function(name, value, withinArray) {\n var data = URI.parseQuery(this._parts.query, this._parts.escapeQuerySpace);\n return URI.hasQuery(data, name, value, withinArray);\n };\n p.setSearch = p.setQuery;\n p.addSearch = p.addQuery;\n p.removeSearch = p.removeQuery;\n p.hasSearch = p.hasQuery;\n\n // sanitizing URLs\n p.normalize = function() {\n if (this._parts.urn) {\n return this\n .normalizeProtocol(false)\n .normalizePath(false)\n .normalizeQuery(false)\n .normalizeFragment(false)\n .build();\n }\n\n return this\n .normalizeProtocol(false)\n .normalizeHostname(false)\n .normalizePort(false)\n .normalizePath(false)\n .normalizeQuery(false)\n .normalizeFragment(false)\n .build();\n };\n p.normalizeProtocol = function(build) {\n if (typeof this._parts.protocol === 'string') {\n this._parts.protocol = this._parts.protocol.toLowerCase();\n this.build(!build);\n }\n\n return this;\n };\n p.normalizeHostname = function(build) {\n if (this._parts.hostname) {\n if (this.is('IDN') && punycode) {\n this._parts.hostname = punycode.toASCII(this._parts.hostname);\n } else if (this.is('IPv6') && IPv6) {\n this._parts.hostname = IPv6.best(this._parts.hostname);\n }\n\n this._parts.hostname = this._parts.hostname.toLowerCase();\n this.build(!build);\n }\n\n return this;\n };\n p.normalizePort = function(build) {\n // remove port of it's the protocol's default\n if (typeof this._parts.protocol === 'string' && this._parts.port === URI.defaultPorts[this._parts.protocol]) {\n this._parts.port = null;\n this.build(!build);\n }\n\n return this;\n };\n p.normalizePath = function(build) {\n var _path = this._parts.path;\n if (!_path) {\n return this;\n }\n\n if (this._parts.urn) {\n this._parts.path = URI.recodeUrnPath(this._parts.path);\n this.build(!build);\n return this;\n }\n\n if (this._parts.path === '/') {\n return this;\n }\n\n _path = URI.recodePath(_path);\n\n var _was_relative;\n var _leadingParents = '';\n var _parent, _pos;\n\n // handle relative paths\n if (_path.charAt(0) !== '/') {\n _was_relative = true;\n _path = '/' + _path;\n }\n\n // handle relative files (as opposed to directories)\n if (_path.slice(-3) === '/..' || _path.slice(-2) === '/.') {\n _path += '/';\n }\n\n // resolve simples\n _path = _path\n .replace(/(\\/(\\.\\/)+)|(\\/\\.$)/g, '/')\n .replace(/\\/{2,}/g, '/');\n\n // remember leading parents\n if (_was_relative) {\n _leadingParents = _path.substring(1).match(/^(\\.\\.\\/)+/) || '';\n if (_leadingParents) {\n _leadingParents = _leadingParents[0];\n }\n }\n\n // resolve parents\n while (true) {\n _parent = _path.search(/\\/\\.\\.(\\/|$)/);\n if (_parent === -1) {\n // no more ../ to resolve\n break;\n } else if (_parent === 0) {\n // top level cannot be relative, skip it\n _path = _path.substring(3);\n continue;\n }\n\n _pos = _path.substring(0, _parent).lastIndexOf('/');\n if (_pos === -1) {\n _pos = _parent;\n }\n _path = _path.substring(0, _pos) + _path.substring(_parent + 3);\n }\n\n // revert to relative\n if (_was_relative && this.is('relative')) {\n _path = _leadingParents + _path.substring(1);\n }\n\n this._parts.path = _path;\n this.build(!build);\n return this;\n };\n p.normalizePathname = p.normalizePath;\n p.normalizeQuery = function(build) {\n if (typeof this._parts.query === 'string') {\n if (!this._parts.query.length) {\n this._parts.query = null;\n } else {\n this.query(URI.parseQuery(this._parts.query, this._parts.escapeQuerySpace));\n }\n\n this.build(!build);\n }\n\n return this;\n };\n p.normalizeFragment = function(build) {\n if (!this._parts.fragment) {\n this._parts.fragment = null;\n this.build(!build);\n }\n\n return this;\n };\n p.normalizeSearch = p.normalizeQuery;\n p.normalizeHash = p.normalizeFragment;\n\n p.iso8859 = function() {\n // expect unicode input, iso8859 output\n var e = URI.encode;\n var d = URI.decode;\n\n URI.encode = escape;\n URI.decode = decodeURIComponent;\n try {\n this.normalize();\n } finally {\n URI.encode = e;\n URI.decode = d;\n }\n return this;\n };\n\n p.unicode = function() {\n // expect iso8859 input, unicode output\n var e = URI.encode;\n var d = URI.decode;\n\n URI.encode = strictEncodeURIComponent;\n URI.decode = unescape;\n try {\n this.normalize();\n } finally {\n URI.encode = e;\n URI.decode = d;\n }\n return this;\n };\n\n p.readable = function() {\n var uri = this.clone();\n // removing username, password, because they shouldn't be displayed according to RFC 3986\n uri.username('').password('').normalize();\n var t = '';\n if (uri._parts.protocol) {\n t += uri._parts.protocol + '://';\n }\n\n if (uri._parts.hostname) {\n if (uri.is('punycode') && punycode) {\n t += punycode.toUnicode(uri._parts.hostname);\n if (uri._parts.port) {\n t += ':' + uri._parts.port;\n }\n } else {\n t += uri.host();\n }\n }\n\n if (uri._parts.hostname && uri._parts.path && uri._parts.path.charAt(0) !== '/') {\n t += '/';\n }\n\n t += uri.path(true);\n if (uri._parts.query) {\n var q = '';\n for (var i = 0, qp = uri._parts.query.split('&'), l = qp.length; i < l; i++) {\n var kv = (qp[i] || '').split('=');\n q += '&' + URI.decodeQuery(kv[0], this._parts.escapeQuerySpace)\n .replace(/&/g, '%26');\n\n if (kv[1] !== undefined) {\n q += '=' + URI.decodeQuery(kv[1], this._parts.escapeQuerySpace)\n .replace(/&/g, '%26');\n }\n }\n t += '?' + q.substring(1);\n }\n\n t += URI.decodeQuery(uri.hash(), true);\n return t;\n };\n\n // resolving relative and absolute URLs\n p.absoluteTo = function(base) {\n var resolved = this.clone();\n var properties = ['protocol', 'username', 'password', 'hostname', 'port'];\n var basedir, i, p;\n\n if (this._parts.urn) {\n throw new Error('URNs do not have any generally defined hierarchical components');\n }\n\n if (!(base instanceof URI)) {\n base = new URI(base);\n }\n\n if (resolved._parts.protocol) {\n // Directly returns even if this._parts.hostname is empty.\n return resolved;\n } else {\n resolved._parts.protocol = base._parts.protocol;\n }\n\n if (this._parts.hostname) {\n return resolved;\n }\n\n for (i = 0; (p = properties[i]); i++) {\n resolved._parts[p] = base._parts[p];\n }\n\n if (!resolved._parts.path) {\n resolved._parts.path = base._parts.path;\n if (!resolved._parts.query) {\n resolved._parts.query = base._parts.query;\n }\n } else {\n if (resolved._parts.path.substring(-2) === '..') {\n resolved._parts.path += '/';\n }\n\n if (resolved.path().charAt(0) !== '/') {\n basedir = base.directory();\n basedir = basedir ? basedir : base.path().indexOf('/') === 0 ? '/' : '';\n resolved._parts.path = (basedir ? (basedir + '/') : '') + resolved._parts.path;\n resolved.normalizePath();\n }\n }\n\n resolved.build();\n return resolved;\n };\n p.relativeTo = function(base) {\n var relative = this.clone().normalize();\n var relativeParts, baseParts, common, relativePath, basePath;\n\n if (relative._parts.urn) {\n throw new Error('URNs do not have any generally defined hierarchical components');\n }\n\n base = new URI(base).normalize();\n relativeParts = relative._parts;\n baseParts = base._parts;\n relativePath = relative.path();\n basePath = base.path();\n\n if (relativePath.charAt(0) !== '/') {\n throw new Error('URI is already relative');\n }\n\n if (basePath.charAt(0) !== '/') {\n throw new Error('Cannot calculate a URI relative to another relative URI');\n }\n\n if (relativeParts.protocol === baseParts.protocol) {\n relativeParts.protocol = null;\n }\n\n if (relativeParts.username !== baseParts.username || relativeParts.password !== baseParts.password) {\n return relative.build();\n }\n\n if (relativeParts.protocol !== null || relativeParts.username !== null || relativeParts.password !== null) {\n return relative.build();\n }\n\n if (relativeParts.hostname === baseParts.hostname && relativeParts.port === baseParts.port) {\n relativeParts.hostname = null;\n relativeParts.port = null;\n } else {\n return relative.build();\n }\n\n if (relativePath === basePath) {\n relativeParts.path = '';\n return relative.build();\n }\n\n // determine common sub path\n common = URI.commonPath(relativePath, basePath);\n\n // If the paths have nothing in common, return a relative URL with the absolute path.\n if (!common) {\n return relative.build();\n }\n\n var parents = baseParts.path\n .substring(common.length)\n .replace(/[^\\/]*$/, '')\n .replace(/.*?\\//g, '../');\n\n relativeParts.path = (parents + relativeParts.path.substring(common.length)) || './';\n\n return relative.build();\n };\n\n // comparing URIs\n p.equals = function(uri) {\n var one = this.clone();\n var two = new URI(uri);\n var one_map = {};\n var two_map = {};\n var checked = {};\n var one_query, two_query, key;\n\n one.normalize();\n two.normalize();\n\n // exact match\n if (one.toString() === two.toString()) {\n return true;\n }\n\n // extract query string\n one_query = one.query();\n two_query = two.query();\n one.query('');\n two.query('');\n\n // definitely not equal if not even non-query parts match\n if (one.toString() !== two.toString()) {\n return false;\n }\n\n // query parameters have the same length, even if they're permuted\n if (one_query.length !== two_query.length) {\n return false;\n }\n\n one_map = URI.parseQuery(one_query, this._parts.escapeQuerySpace);\n two_map = URI.parseQuery(two_query, this._parts.escapeQuerySpace);\n\n for (key in one_map) {\n if (hasOwn.call(one_map, key)) {\n if (!isArray(one_map[key])) {\n if (one_map[key] !== two_map[key]) {\n return false;\n }\n } else if (!arraysEqual(one_map[key], two_map[key])) {\n return false;\n }\n\n checked[key] = true;\n }\n }\n\n for (key in two_map) {\n if (hasOwn.call(two_map, key)) {\n if (!checked[key]) {\n // two contains a parameter not present in one\n return false;\n }\n }\n }\n\n return true;\n };\n\n // state\n p.preventInvalidHostname = function(v) {\n this._parts.preventInvalidHostname = !!v;\n return this;\n };\n\n p.duplicateQueryParameters = function(v) {\n this._parts.duplicateQueryParameters = !!v;\n return this;\n };\n\n p.escapeQuerySpace = function(v) {\n this._parts.escapeQuerySpace = !!v;\n return this;\n };\n\n return URI;\n}));\n","/*! https://mths.be/punycode v1.4.0 by @mathias */\n;(function(root) {\n\n\t/** Detect free variables */\n\tvar freeExports = typeof exports == 'object' && exports &&\n\t\t!exports.nodeType && exports;\n\tvar freeModule = typeof module == 'object' && module &&\n\t\t!module.nodeType && module;\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (\n\t\tfreeGlobal.global === freeGlobal ||\n\t\tfreeGlobal.window === freeGlobal ||\n\t\tfreeGlobal.self === freeGlobal\n\t) {\n\t\troot = freeGlobal;\n\t}\n\n\t/**\n\t * The `punycode` object.\n\t * @name punycode\n\t * @type Object\n\t */\n\tvar punycode,\n\n\t/** Highest positive signed 32-bit float value */\n\tmaxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1\n\n\t/** Bootstring parameters */\n\tbase = 36,\n\ttMin = 1,\n\ttMax = 26,\n\tskew = 38,\n\tdamp = 700,\n\tinitialBias = 72,\n\tinitialN = 128, // 0x80\n\tdelimiter = '-', // '\\x2D'\n\n\t/** Regular expressions */\n\tregexPunycode = /^xn--/,\n\tregexNonASCII = /[^\\x20-\\x7E]/, // unprintable ASCII chars + non-ASCII chars\n\tregexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g, // RFC 3490 separators\n\n\t/** Error messages */\n\terrors = {\n\t\t'overflow': 'Overflow: input needs wider integers to process',\n\t\t'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n\t\t'invalid-input': 'Invalid input'\n\t},\n\n\t/** Convenience shortcuts */\n\tbaseMinusTMin = base - tMin,\n\tfloor = Math.floor,\n\tstringFromCharCode = String.fromCharCode,\n\n\t/** Temporary variable */\n\tkey;\n\n\t/*--------------------------------------------------------------------------*/\n\n\t/**\n\t * A generic error utility function.\n\t * @private\n\t * @param {String} type The error type.\n\t * @returns {Error} Throws a `RangeError` with the applicable error message.\n\t */\n\tfunction error(type) {\n\t\tthrow new RangeError(errors[type]);\n\t}\n\n\t/**\n\t * A generic `Array#map` utility function.\n\t * @private\n\t * @param {Array} array The array to iterate over.\n\t * @param {Function} callback The function that gets called for every array\n\t * item.\n\t * @returns {Array} A new array of values returned by the callback function.\n\t */\n\tfunction map(array, fn) {\n\t\tvar length = array.length;\n\t\tvar result = [];\n\t\twhile (length--) {\n\t\t\tresult[length] = fn(array[length]);\n\t\t}\n\t\treturn result;\n\t}\n\n\t/**\n\t * A simple `Array#map`-like wrapper to work with domain name strings or email\n\t * addresses.\n\t * @private\n\t * @param {String} domain The domain name or email address.\n\t * @param {Function} callback The function that gets called for every\n\t * character.\n\t * @returns {Array} A new string of characters returned by the callback\n\t * function.\n\t */\n\tfunction mapDomain(string, fn) {\n\t\tvar parts = string.split('@');\n\t\tvar result = '';\n\t\tif (parts.length > 1) {\n\t\t\t// In email addresses, only the domain name should be punycoded. Leave\n\t\t\t// the local part (i.e. everything up to `@`) intact.\n\t\t\tresult = parts[0] + '@';\n\t\t\tstring = parts[1];\n\t\t}\n\t\t// Avoid `split(regex)` for IE8 compatibility. See #17.\n\t\tstring = string.replace(regexSeparators, '\\x2E');\n\t\tvar labels = string.split('.');\n\t\tvar encoded = map(labels, fn).join('.');\n\t\treturn result + encoded;\n\t}\n\n\t/**\n\t * Creates an array containing the numeric code points of each Unicode\n\t * character in the string. While JavaScript uses UCS-2 internally,\n\t * this function will convert a pair of surrogate halves (each of which\n\t * UCS-2 exposes as separate characters) into a single code point,\n\t * matching UTF-16.\n\t * @see `punycode.ucs2.encode`\n\t * @see \n\t * @memberOf punycode.ucs2\n\t * @name decode\n\t * @param {String} string The Unicode input string (UCS-2).\n\t * @returns {Array} The new array of code points.\n\t */\n\tfunction ucs2decode(string) {\n\t\tvar output = [],\n\t\t counter = 0,\n\t\t length = string.length,\n\t\t value,\n\t\t extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t/**\n\t * Creates a string based on an array of numeric code points.\n\t * @see `punycode.ucs2.decode`\n\t * @memberOf punycode.ucs2\n\t * @name encode\n\t * @param {Array} codePoints The array of numeric code points.\n\t * @returns {String} The new Unicode string (UCS-2).\n\t */\n\tfunction ucs2encode(array) {\n\t\treturn map(array, function(value) {\n\t\t\tvar output = '';\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t\treturn output;\n\t\t}).join('');\n\t}\n\n\t/**\n\t * Converts a basic code point into a digit/integer.\n\t * @see `digitToBasic()`\n\t * @private\n\t * @param {Number} codePoint The basic numeric code point value.\n\t * @returns {Number} The numeric value of a basic code point (for use in\n\t * representing integers) in the range `0` to `base - 1`, or `base` if\n\t * the code point does not represent a value.\n\t */\n\tfunction basicToDigit(codePoint) {\n\t\tif (codePoint - 48 < 10) {\n\t\t\treturn codePoint - 22;\n\t\t}\n\t\tif (codePoint - 65 < 26) {\n\t\t\treturn codePoint - 65;\n\t\t}\n\t\tif (codePoint - 97 < 26) {\n\t\t\treturn codePoint - 97;\n\t\t}\n\t\treturn base;\n\t}\n\n\t/**\n\t * Converts a digit/integer into a basic code point.\n\t * @see `basicToDigit()`\n\t * @private\n\t * @param {Number} digit The numeric value of a basic code point.\n\t * @returns {Number} The basic code point whose value (when used for\n\t * representing integers) is `digit`, which needs to be in the range\n\t * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n\t * used; else, the lowercase form is used. The behavior is undefined\n\t * if `flag` is non-zero and `digit` has no uppercase form.\n\t */\n\tfunction digitToBasic(digit, flag) {\n\t\t// 0..25 map to ASCII a..z or A..Z\n\t\t// 26..35 map to ASCII 0..9\n\t\treturn digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n\t}\n\n\t/**\n\t * Bias adaptation function as per section 3.4 of RFC 3492.\n\t * https://tools.ietf.org/html/rfc3492#section-3.4\n\t * @private\n\t */\n\tfunction adapt(delta, numPoints, firstTime) {\n\t\tvar k = 0;\n\t\tdelta = firstTime ? floor(delta / damp) : delta >> 1;\n\t\tdelta += floor(delta / numPoints);\n\t\tfor (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {\n\t\t\tdelta = floor(delta / baseMinusTMin);\n\t\t}\n\t\treturn floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n\t}\n\n\t/**\n\t * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n\t * symbols.\n\t * @memberOf punycode\n\t * @param {String} input The Punycode string of ASCII-only symbols.\n\t * @returns {String} The resulting string of Unicode symbols.\n\t */\n\tfunction decode(input) {\n\t\t// Don't use UCS-2\n\t\tvar output = [],\n\t\t inputLength = input.length,\n\t\t out,\n\t\t i = 0,\n\t\t n = initialN,\n\t\t bias = initialBias,\n\t\t basic,\n\t\t j,\n\t\t index,\n\t\t oldi,\n\t\t w,\n\t\t k,\n\t\t digit,\n\t\t t,\n\t\t /** Cached calculation results */\n\t\t baseMinusT;\n\n\t\t// Handle the basic code points: let `basic` be the number of input code\n\t\t// points before the last delimiter, or `0` if there is none, then copy\n\t\t// the first basic code points to the output.\n\n\t\tbasic = input.lastIndexOf(delimiter);\n\t\tif (basic < 0) {\n\t\t\tbasic = 0;\n\t\t}\n\n\t\tfor (j = 0; j < basic; ++j) {\n\t\t\t// if it's not a basic code point\n\t\t\tif (input.charCodeAt(j) >= 0x80) {\n\t\t\t\terror('not-basic');\n\t\t\t}\n\t\t\toutput.push(input.charCodeAt(j));\n\t\t}\n\n\t\t// Main decoding loop: start just after the last delimiter if any basic code\n\t\t// points were copied; start at the beginning otherwise.\n\n\t\tfor (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {\n\n\t\t\t// `index` is the index of the next character to be consumed.\n\t\t\t// Decode a generalized variable-length integer into `delta`,\n\t\t\t// which gets added to `i`. The overflow checking is easier\n\t\t\t// if we increase `i` as we go, then subtract off its starting\n\t\t\t// value at the end to obtain `delta`.\n\t\t\tfor (oldi = i, w = 1, k = base; /* no condition */; k += base) {\n\n\t\t\t\tif (index >= inputLength) {\n\t\t\t\t\terror('invalid-input');\n\t\t\t\t}\n\n\t\t\t\tdigit = basicToDigit(input.charCodeAt(index++));\n\n\t\t\t\tif (digit >= base || digit > floor((maxInt - i) / w)) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\ti += digit * w;\n\t\t\t\tt = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\n\t\t\t\tif (digit < t) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tbaseMinusT = base - t;\n\t\t\t\tif (w > floor(maxInt / baseMinusT)) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\tw *= baseMinusT;\n\n\t\t\t}\n\n\t\t\tout = output.length + 1;\n\t\t\tbias = adapt(i - oldi, out, oldi == 0);\n\n\t\t\t// `i` was supposed to wrap around from `out` to `0`,\n\t\t\t// incrementing `n` each time, so we'll fix that now:\n\t\t\tif (floor(i / out) > maxInt - n) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tn += floor(i / out);\n\t\t\ti %= out;\n\n\t\t\t// Insert `n` at position `i` of the output\n\t\t\toutput.splice(i++, 0, n);\n\n\t\t}\n\n\t\treturn ucs2encode(output);\n\t}\n\n\t/**\n\t * Converts a string of Unicode symbols (e.g. a domain name label) to a\n\t * Punycode string of ASCII-only symbols.\n\t * @memberOf punycode\n\t * @param {String} input The string of Unicode symbols.\n\t * @returns {String} The resulting Punycode string of ASCII-only symbols.\n\t */\n\tfunction encode(input) {\n\t\tvar n,\n\t\t delta,\n\t\t handledCPCount,\n\t\t basicLength,\n\t\t bias,\n\t\t j,\n\t\t m,\n\t\t q,\n\t\t k,\n\t\t t,\n\t\t currentValue,\n\t\t output = [],\n\t\t /** `inputLength` will hold the number of code points in `input`. */\n\t\t inputLength,\n\t\t /** Cached calculation results */\n\t\t handledCPCountPlusOne,\n\t\t baseMinusT,\n\t\t qMinusT;\n\n\t\t// Convert the input in UCS-2 to Unicode\n\t\tinput = ucs2decode(input);\n\n\t\t// Cache the length\n\t\tinputLength = input.length;\n\n\t\t// Initialize the state\n\t\tn = initialN;\n\t\tdelta = 0;\n\t\tbias = initialBias;\n\n\t\t// Handle the basic code points\n\t\tfor (j = 0; j < inputLength; ++j) {\n\t\t\tcurrentValue = input[j];\n\t\t\tif (currentValue < 0x80) {\n\t\t\t\toutput.push(stringFromCharCode(currentValue));\n\t\t\t}\n\t\t}\n\n\t\thandledCPCount = basicLength = output.length;\n\n\t\t// `handledCPCount` is the number of code points that have been handled;\n\t\t// `basicLength` is the number of basic code points.\n\n\t\t// Finish the basic string - if it is not empty - with a delimiter\n\t\tif (basicLength) {\n\t\t\toutput.push(delimiter);\n\t\t}\n\n\t\t// Main encoding loop:\n\t\twhile (handledCPCount < inputLength) {\n\n\t\t\t// All non-basic code points < n have been handled already. Find the next\n\t\t\t// larger one:\n\t\t\tfor (m = maxInt, j = 0; j < inputLength; ++j) {\n\t\t\t\tcurrentValue = input[j];\n\t\t\t\tif (currentValue >= n && currentValue < m) {\n\t\t\t\t\tm = currentValue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Increase `delta` enough to advance the decoder's state to ,\n\t\t\t// but guard against overflow\n\t\t\thandledCPCountPlusOne = handledCPCount + 1;\n\t\t\tif (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tdelta += (m - n) * handledCPCountPlusOne;\n\t\t\tn = m;\n\n\t\t\tfor (j = 0; j < inputLength; ++j) {\n\t\t\t\tcurrentValue = input[j];\n\n\t\t\t\tif (currentValue < n && ++delta > maxInt) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\tif (currentValue == n) {\n\t\t\t\t\t// Represent delta as a generalized variable-length integer\n\t\t\t\t\tfor (q = delta, k = base; /* no condition */; k += base) {\n\t\t\t\t\t\tt = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\t\t\t\t\t\tif (q < t) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tqMinusT = q - t;\n\t\t\t\t\t\tbaseMinusT = base - t;\n\t\t\t\t\t\toutput.push(\n\t\t\t\t\t\t\tstringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))\n\t\t\t\t\t\t);\n\t\t\t\t\t\tq = floor(qMinusT / baseMinusT);\n\t\t\t\t\t}\n\n\t\t\t\t\toutput.push(stringFromCharCode(digitToBasic(q, 0)));\n\t\t\t\t\tbias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n\t\t\t\t\tdelta = 0;\n\t\t\t\t\t++handledCPCount;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t++delta;\n\t\t\t++n;\n\n\t\t}\n\t\treturn output.join('');\n\t}\n\n\t/**\n\t * Converts a Punycode string representing a domain name or an email address\n\t * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n\t * it doesn't matter if you call it on a string that has already been\n\t * converted to Unicode.\n\t * @memberOf punycode\n\t * @param {String} input The Punycoded domain name or email address to\n\t * convert to Unicode.\n\t * @returns {String} The Unicode representation of the given Punycode\n\t * string.\n\t */\n\tfunction toUnicode(input) {\n\t\treturn mapDomain(input, function(string) {\n\t\t\treturn regexPunycode.test(string)\n\t\t\t\t? decode(string.slice(4).toLowerCase())\n\t\t\t\t: string;\n\t\t});\n\t}\n\n\t/**\n\t * Converts a Unicode string representing a domain name or an email address to\n\t * Punycode. Only the non-ASCII parts of the domain name will be converted,\n\t * i.e. it doesn't matter if you call it with a domain that's already in\n\t * ASCII.\n\t * @memberOf punycode\n\t * @param {String} input The domain name or email address to convert, as a\n\t * Unicode string.\n\t * @returns {String} The Punycode representation of the given domain name or\n\t * email address.\n\t */\n\tfunction toASCII(input) {\n\t\treturn mapDomain(input, function(string) {\n\t\t\treturn regexNonASCII.test(string)\n\t\t\t\t? 'xn--' + encode(string)\n\t\t\t\t: string;\n\t\t});\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\t/** Define the public API */\n\tpunycode = {\n\t\t/**\n\t\t * A string representing the current Punycode.js version number.\n\t\t * @memberOf punycode\n\t\t * @type String\n\t\t */\n\t\t'version': '1.3.2',\n\t\t/**\n\t\t * An object of methods to convert from JavaScript's internal character\n\t\t * representation (UCS-2) to Unicode code points, and back.\n\t\t * @see \n\t\t * @memberOf punycode\n\t\t * @type Object\n\t\t */\n\t\t'ucs2': {\n\t\t\t'decode': ucs2decode,\n\t\t\t'encode': ucs2encode\n\t\t},\n\t\t'decode': decode,\n\t\t'encode': encode,\n\t\t'toASCII': toASCII,\n\t\t'toUnicode': toUnicode\n\t};\n\n\t/** Expose `punycode` */\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine('punycode', function() {\n\t\t\treturn punycode;\n\t\t});\n\t} else if (freeExports && freeModule) {\n\t\tif (module.exports == freeExports) {\n\t\t\t// in Node.js, io.js, or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = punycode;\n\t\t} else {\n\t\t\t// in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (key in punycode) {\n\t\t\t\tpunycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]);\n\t\t\t}\n\t\t}\n\t} else {\n\t\t// in Rhino or a web browser\n\t\troot.punycode = punycode;\n\t}\n\n}(this));\n","import {Chart, registerables} from '../dist/chart.js';\n\nChart.register(...registerables);\n\nexport * from '../dist/chart.js';\nexport default Chart;\n","/*!\n * @kurkle/color v0.3.2\n * https://github.com/kurkle/color#readme\n * (c) 2023 Jukka Kurkela\n * Released under the MIT License\n */\nfunction round(v) {\n return v + 0.5 | 0;\n}\nconst lim = (v, l, h) => Math.max(Math.min(v, h), l);\nfunction p2b(v) {\n return lim(round(v * 2.55), 0, 255);\n}\nfunction b2p(v) {\n return lim(round(v / 2.55), 0, 100);\n}\nfunction n2b(v) {\n return lim(round(v * 255), 0, 255);\n}\nfunction b2n(v) {\n return lim(round(v / 2.55) / 100, 0, 1);\n}\nfunction n2p(v) {\n return lim(round(v * 100), 0, 100);\n}\n\nconst map$1 = {0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9, A: 10, B: 11, C: 12, D: 13, E: 14, F: 15, a: 10, b: 11, c: 12, d: 13, e: 14, f: 15};\nconst hex = [...'0123456789ABCDEF'];\nconst h1 = b => hex[b & 0xF];\nconst h2 = b => hex[(b & 0xF0) >> 4] + hex[b & 0xF];\nconst eq = b => ((b & 0xF0) >> 4) === (b & 0xF);\nconst isShort = v => eq(v.r) && eq(v.g) && eq(v.b) && eq(v.a);\nfunction hexParse(str) {\n var len = str.length;\n var ret;\n if (str[0] === '#') {\n if (len === 4 || len === 5) {\n ret = {\n r: 255 & map$1[str[1]] * 17,\n g: 255 & map$1[str[2]] * 17,\n b: 255 & map$1[str[3]] * 17,\n a: len === 5 ? map$1[str[4]] * 17 : 255\n };\n } else if (len === 7 || len === 9) {\n ret = {\n r: map$1[str[1]] << 4 | map$1[str[2]],\n g: map$1[str[3]] << 4 | map$1[str[4]],\n b: map$1[str[5]] << 4 | map$1[str[6]],\n a: len === 9 ? (map$1[str[7]] << 4 | map$1[str[8]]) : 255\n };\n }\n }\n return ret;\n}\nconst alpha = (a, f) => a < 255 ? f(a) : '';\nfunction hexString(v) {\n var f = isShort(v) ? h1 : h2;\n return v\n ? '#' + f(v.r) + f(v.g) + f(v.b) + alpha(v.a, f)\n : undefined;\n}\n\nconst HUE_RE = /^(hsla?|hwb|hsv)\\(\\s*([-+.e\\d]+)(?:deg)?[\\s,]+([-+.e\\d]+)%[\\s,]+([-+.e\\d]+)%(?:[\\s,]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction hsl2rgbn(h, s, l) {\n const a = s * Math.min(l, 1 - l);\n const f = (n, k = (n + h / 30) % 12) => l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);\n return [f(0), f(8), f(4)];\n}\nfunction hsv2rgbn(h, s, v) {\n const f = (n, k = (n + h / 60) % 6) => v - v * s * Math.max(Math.min(k, 4 - k, 1), 0);\n return [f(5), f(3), f(1)];\n}\nfunction hwb2rgbn(h, w, b) {\n const rgb = hsl2rgbn(h, 1, 0.5);\n let i;\n if (w + b > 1) {\n i = 1 / (w + b);\n w *= i;\n b *= i;\n }\n for (i = 0; i < 3; i++) {\n rgb[i] *= 1 - w - b;\n rgb[i] += w;\n }\n return rgb;\n}\nfunction hueValue(r, g, b, d, max) {\n if (r === max) {\n return ((g - b) / d) + (g < b ? 6 : 0);\n }\n if (g === max) {\n return (b - r) / d + 2;\n }\n return (r - g) / d + 4;\n}\nfunction rgb2hsl(v) {\n const range = 255;\n const r = v.r / range;\n const g = v.g / range;\n const b = v.b / range;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const l = (max + min) / 2;\n let h, s, d;\n if (max !== min) {\n d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n h = hueValue(r, g, b, d, max);\n h = h * 60 + 0.5;\n }\n return [h | 0, s || 0, l];\n}\nfunction calln(f, a, b, c) {\n return (\n Array.isArray(a)\n ? f(a[0], a[1], a[2])\n : f(a, b, c)\n ).map(n2b);\n}\nfunction hsl2rgb(h, s, l) {\n return calln(hsl2rgbn, h, s, l);\n}\nfunction hwb2rgb(h, w, b) {\n return calln(hwb2rgbn, h, w, b);\n}\nfunction hsv2rgb(h, s, v) {\n return calln(hsv2rgbn, h, s, v);\n}\nfunction hue(h) {\n return (h % 360 + 360) % 360;\n}\nfunction hueParse(str) {\n const m = HUE_RE.exec(str);\n let a = 255;\n let v;\n if (!m) {\n return;\n }\n if (m[5] !== v) {\n a = m[6] ? p2b(+m[5]) : n2b(+m[5]);\n }\n const h = hue(+m[2]);\n const p1 = +m[3] / 100;\n const p2 = +m[4] / 100;\n if (m[1] === 'hwb') {\n v = hwb2rgb(h, p1, p2);\n } else if (m[1] === 'hsv') {\n v = hsv2rgb(h, p1, p2);\n } else {\n v = hsl2rgb(h, p1, p2);\n }\n return {\n r: v[0],\n g: v[1],\n b: v[2],\n a: a\n };\n}\nfunction rotate(v, deg) {\n var h = rgb2hsl(v);\n h[0] = hue(h[0] + deg);\n h = hsl2rgb(h);\n v.r = h[0];\n v.g = h[1];\n v.b = h[2];\n}\nfunction hslString(v) {\n if (!v) {\n return;\n }\n const a = rgb2hsl(v);\n const h = a[0];\n const s = n2p(a[1]);\n const l = n2p(a[2]);\n return v.a < 255\n ? `hsla(${h}, ${s}%, ${l}%, ${b2n(v.a)})`\n : `hsl(${h}, ${s}%, ${l}%)`;\n}\n\nconst map = {\n x: 'dark',\n Z: 'light',\n Y: 're',\n X: 'blu',\n W: 'gr',\n V: 'medium',\n U: 'slate',\n A: 'ee',\n T: 'ol',\n S: 'or',\n B: 'ra',\n C: 'lateg',\n D: 'ights',\n R: 'in',\n Q: 'turquois',\n E: 'hi',\n P: 'ro',\n O: 'al',\n N: 'le',\n M: 'de',\n L: 'yello',\n F: 'en',\n K: 'ch',\n G: 'arks',\n H: 'ea',\n I: 'ightg',\n J: 'wh'\n};\nconst names$1 = {\n OiceXe: 'f0f8ff',\n antiquewEte: 'faebd7',\n aqua: 'ffff',\n aquamarRe: '7fffd4',\n azuY: 'f0ffff',\n beige: 'f5f5dc',\n bisque: 'ffe4c4',\n black: '0',\n blanKedOmond: 'ffebcd',\n Xe: 'ff',\n XeviTet: '8a2be2',\n bPwn: 'a52a2a',\n burlywood: 'deb887',\n caMtXe: '5f9ea0',\n KartYuse: '7fff00',\n KocTate: 'd2691e',\n cSO: 'ff7f50',\n cSnflowerXe: '6495ed',\n cSnsilk: 'fff8dc',\n crimson: 'dc143c',\n cyan: 'ffff',\n xXe: '8b',\n xcyan: '8b8b',\n xgTMnPd: 'b8860b',\n xWay: 'a9a9a9',\n xgYF: '6400',\n xgYy: 'a9a9a9',\n xkhaki: 'bdb76b',\n xmagFta: '8b008b',\n xTivegYF: '556b2f',\n xSange: 'ff8c00',\n xScEd: '9932cc',\n xYd: '8b0000',\n xsOmon: 'e9967a',\n xsHgYF: '8fbc8f',\n xUXe: '483d8b',\n xUWay: '2f4f4f',\n xUgYy: '2f4f4f',\n xQe: 'ced1',\n xviTet: '9400d3',\n dAppRk: 'ff1493',\n dApskyXe: 'bfff',\n dimWay: '696969',\n dimgYy: '696969',\n dodgerXe: '1e90ff',\n fiYbrick: 'b22222',\n flSOwEte: 'fffaf0',\n foYstWAn: '228b22',\n fuKsia: 'ff00ff',\n gaRsbSo: 'dcdcdc',\n ghostwEte: 'f8f8ff',\n gTd: 'ffd700',\n gTMnPd: 'daa520',\n Way: '808080',\n gYF: '8000',\n gYFLw: 'adff2f',\n gYy: '808080',\n honeyMw: 'f0fff0',\n hotpRk: 'ff69b4',\n RdianYd: 'cd5c5c',\n Rdigo: '4b0082',\n ivSy: 'fffff0',\n khaki: 'f0e68c',\n lavFMr: 'e6e6fa',\n lavFMrXsh: 'fff0f5',\n lawngYF: '7cfc00',\n NmoncEffon: 'fffacd',\n ZXe: 'add8e6',\n ZcSO: 'f08080',\n Zcyan: 'e0ffff',\n ZgTMnPdLw: 'fafad2',\n ZWay: 'd3d3d3',\n ZgYF: '90ee90',\n ZgYy: 'd3d3d3',\n ZpRk: 'ffb6c1',\n ZsOmon: 'ffa07a',\n ZsHgYF: '20b2aa',\n ZskyXe: '87cefa',\n ZUWay: '778899',\n ZUgYy: '778899',\n ZstAlXe: 'b0c4de',\n ZLw: 'ffffe0',\n lime: 'ff00',\n limegYF: '32cd32',\n lRF: 'faf0e6',\n magFta: 'ff00ff',\n maPon: '800000',\n VaquamarRe: '66cdaa',\n VXe: 'cd',\n VScEd: 'ba55d3',\n VpurpN: '9370db',\n VsHgYF: '3cb371',\n VUXe: '7b68ee',\n VsprRggYF: 'fa9a',\n VQe: '48d1cc',\n VviTetYd: 'c71585',\n midnightXe: '191970',\n mRtcYam: 'f5fffa',\n mistyPse: 'ffe4e1',\n moccasR: 'ffe4b5',\n navajowEte: 'ffdead',\n navy: '80',\n Tdlace: 'fdf5e6',\n Tive: '808000',\n TivedBb: '6b8e23',\n Sange: 'ffa500',\n SangeYd: 'ff4500',\n ScEd: 'da70d6',\n pOegTMnPd: 'eee8aa',\n pOegYF: '98fb98',\n pOeQe: 'afeeee',\n pOeviTetYd: 'db7093',\n papayawEp: 'ffefd5',\n pHKpuff: 'ffdab9',\n peru: 'cd853f',\n pRk: 'ffc0cb',\n plum: 'dda0dd',\n powMrXe: 'b0e0e6',\n purpN: '800080',\n YbeccapurpN: '663399',\n Yd: 'ff0000',\n Psybrown: 'bc8f8f',\n PyOXe: '4169e1',\n saddNbPwn: '8b4513',\n sOmon: 'fa8072',\n sandybPwn: 'f4a460',\n sHgYF: '2e8b57',\n sHshell: 'fff5ee',\n siFna: 'a0522d',\n silver: 'c0c0c0',\n skyXe: '87ceeb',\n UXe: '6a5acd',\n UWay: '708090',\n UgYy: '708090',\n snow: 'fffafa',\n sprRggYF: 'ff7f',\n stAlXe: '4682b4',\n tan: 'd2b48c',\n teO: '8080',\n tEstN: 'd8bfd8',\n tomato: 'ff6347',\n Qe: '40e0d0',\n viTet: 'ee82ee',\n JHt: 'f5deb3',\n wEte: 'ffffff',\n wEtesmoke: 'f5f5f5',\n Lw: 'ffff00',\n LwgYF: '9acd32'\n};\nfunction unpack() {\n const unpacked = {};\n const keys = Object.keys(names$1);\n const tkeys = Object.keys(map);\n let i, j, k, ok, nk;\n for (i = 0; i < keys.length; i++) {\n ok = nk = keys[i];\n for (j = 0; j < tkeys.length; j++) {\n k = tkeys[j];\n nk = nk.replace(k, map[k]);\n }\n k = parseInt(names$1[ok], 16);\n unpacked[nk] = [k >> 16 & 0xFF, k >> 8 & 0xFF, k & 0xFF];\n }\n return unpacked;\n}\n\nlet names;\nfunction nameParse(str) {\n if (!names) {\n names = unpack();\n names.transparent = [0, 0, 0, 0];\n }\n const a = names[str.toLowerCase()];\n return a && {\n r: a[0],\n g: a[1],\n b: a[2],\n a: a.length === 4 ? a[3] : 255\n };\n}\n\nconst RGB_RE = /^rgba?\\(\\s*([-+.\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?(?:[\\s,/]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction rgbParse(str) {\n const m = RGB_RE.exec(str);\n let a = 255;\n let r, g, b;\n if (!m) {\n return;\n }\n if (m[7] !== r) {\n const v = +m[7];\n a = m[8] ? p2b(v) : lim(v * 255, 0, 255);\n }\n r = +m[1];\n g = +m[3];\n b = +m[5];\n r = 255 & (m[2] ? p2b(r) : lim(r, 0, 255));\n g = 255 & (m[4] ? p2b(g) : lim(g, 0, 255));\n b = 255 & (m[6] ? p2b(b) : lim(b, 0, 255));\n return {\n r: r,\n g: g,\n b: b,\n a: a\n };\n}\nfunction rgbString(v) {\n return v && (\n v.a < 255\n ? `rgba(${v.r}, ${v.g}, ${v.b}, ${b2n(v.a)})`\n : `rgb(${v.r}, ${v.g}, ${v.b})`\n );\n}\n\nconst to = v => v <= 0.0031308 ? v * 12.92 : Math.pow(v, 1.0 / 2.4) * 1.055 - 0.055;\nconst from = v => v <= 0.04045 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4);\nfunction interpolate(rgb1, rgb2, t) {\n const r = from(b2n(rgb1.r));\n const g = from(b2n(rgb1.g));\n const b = from(b2n(rgb1.b));\n return {\n r: n2b(to(r + t * (from(b2n(rgb2.r)) - r))),\n g: n2b(to(g + t * (from(b2n(rgb2.g)) - g))),\n b: n2b(to(b + t * (from(b2n(rgb2.b)) - b))),\n a: rgb1.a + t * (rgb2.a - rgb1.a)\n };\n}\n\nfunction modHSL(v, i, ratio) {\n if (v) {\n let tmp = rgb2hsl(v);\n tmp[i] = Math.max(0, Math.min(tmp[i] + tmp[i] * ratio, i === 0 ? 360 : 1));\n tmp = hsl2rgb(tmp);\n v.r = tmp[0];\n v.g = tmp[1];\n v.b = tmp[2];\n }\n}\nfunction clone(v, proto) {\n return v ? Object.assign(proto || {}, v) : v;\n}\nfunction fromObject(input) {\n var v = {r: 0, g: 0, b: 0, a: 255};\n if (Array.isArray(input)) {\n if (input.length >= 3) {\n v = {r: input[0], g: input[1], b: input[2], a: 255};\n if (input.length > 3) {\n v.a = n2b(input[3]);\n }\n }\n } else {\n v = clone(input, {r: 0, g: 0, b: 0, a: 1});\n v.a = n2b(v.a);\n }\n return v;\n}\nfunction functionParse(str) {\n if (str.charAt(0) === 'r') {\n return rgbParse(str);\n }\n return hueParse(str);\n}\nclass Color {\n constructor(input) {\n if (input instanceof Color) {\n return input;\n }\n const type = typeof input;\n let v;\n if (type === 'object') {\n v = fromObject(input);\n } else if (type === 'string') {\n v = hexParse(input) || nameParse(input) || functionParse(input);\n }\n this._rgb = v;\n this._valid = !!v;\n }\n get valid() {\n return this._valid;\n }\n get rgb() {\n var v = clone(this._rgb);\n if (v) {\n v.a = b2n(v.a);\n }\n return v;\n }\n set rgb(obj) {\n this._rgb = fromObject(obj);\n }\n rgbString() {\n return this._valid ? rgbString(this._rgb) : undefined;\n }\n hexString() {\n return this._valid ? hexString(this._rgb) : undefined;\n }\n hslString() {\n return this._valid ? hslString(this._rgb) : undefined;\n }\n mix(color, weight) {\n if (color) {\n const c1 = this.rgb;\n const c2 = color.rgb;\n let w2;\n const p = weight === w2 ? 0.5 : weight;\n const w = 2 * p - 1;\n const a = c1.a - c2.a;\n const w1 = ((w * a === -1 ? w : (w + a) / (1 + w * a)) + 1) / 2.0;\n w2 = 1 - w1;\n c1.r = 0xFF & w1 * c1.r + w2 * c2.r + 0.5;\n c1.g = 0xFF & w1 * c1.g + w2 * c2.g + 0.5;\n c1.b = 0xFF & w1 * c1.b + w2 * c2.b + 0.5;\n c1.a = p * c1.a + (1 - p) * c2.a;\n this.rgb = c1;\n }\n return this;\n }\n interpolate(color, t) {\n if (color) {\n this._rgb = interpolate(this._rgb, color._rgb, t);\n }\n return this;\n }\n clone() {\n return new Color(this.rgb);\n }\n alpha(a) {\n this._rgb.a = n2b(a);\n return this;\n }\n clearer(ratio) {\n const rgb = this._rgb;\n rgb.a *= 1 - ratio;\n return this;\n }\n greyscale() {\n const rgb = this._rgb;\n const val = round(rgb.r * 0.3 + rgb.g * 0.59 + rgb.b * 0.11);\n rgb.r = rgb.g = rgb.b = val;\n return this;\n }\n opaquer(ratio) {\n const rgb = this._rgb;\n rgb.a *= 1 + ratio;\n return this;\n }\n negate() {\n const v = this._rgb;\n v.r = 255 - v.r;\n v.g = 255 - v.g;\n v.b = 255 - v.b;\n return this;\n }\n lighten(ratio) {\n modHSL(this._rgb, 2, ratio);\n return this;\n }\n darken(ratio) {\n modHSL(this._rgb, 2, -ratio);\n return this;\n }\n saturate(ratio) {\n modHSL(this._rgb, 1, ratio);\n return this;\n }\n desaturate(ratio) {\n modHSL(this._rgb, 1, -ratio);\n return this;\n }\n rotate(deg) {\n rotate(this._rgb, deg);\n return this;\n }\n}\n\nfunction index_esm(input) {\n return new Color(input);\n}\n\nexport { Color, b2n, b2p, index_esm as default, hexParse, hexString, hsl2rgb, hslString, hsv2rgb, hueParse, hwb2rgb, lim, n2b, n2p, nameParse, p2b, rgb2hsl, rgbParse, rgbString, rotate, round };\n","/*!\n * Chart.js v4.4.1\n * https://www.chartjs.org\n * (c) 2023 Chart.js Contributors\n * Released under the MIT License\n */\nimport { Color } from '@kurkle/color';\n\n/**\n * @namespace Chart.helpers\n */ /**\n * An empty function that can be used, for example, for optional callback.\n */ function noop() {\n/* noop */ }\n/**\n * Returns a unique id, sequentially generated from a global variable.\n */ const uid = (()=>{\n let id = 0;\n return ()=>id++;\n})();\n/**\n * Returns true if `value` is neither null nor undefined, else returns false.\n * @param value - The value to test.\n * @since 2.7.0\n */ function isNullOrUndef(value) {\n return value === null || typeof value === 'undefined';\n}\n/**\n * Returns true if `value` is an array (including typed arrays), else returns false.\n * @param value - The value to test.\n * @function\n */ function isArray(value) {\n if (Array.isArray && Array.isArray(value)) {\n return true;\n }\n const type = Object.prototype.toString.call(value);\n if (type.slice(0, 7) === '[object' && type.slice(-6) === 'Array]') {\n return true;\n }\n return false;\n}\n/**\n * Returns true if `value` is an object (excluding null), else returns false.\n * @param value - The value to test.\n * @since 2.7.0\n */ function isObject(value) {\n return value !== null && Object.prototype.toString.call(value) === '[object Object]';\n}\n/**\n * Returns true if `value` is a finite number, else returns false\n * @param value - The value to test.\n */ function isNumberFinite(value) {\n return (typeof value === 'number' || value instanceof Number) && isFinite(+value);\n}\n/**\n * Returns `value` if finite, else returns `defaultValue`.\n * @param value - The value to return if defined.\n * @param defaultValue - The value to return if `value` is not finite.\n */ function finiteOrDefault(value, defaultValue) {\n return isNumberFinite(value) ? value : defaultValue;\n}\n/**\n * Returns `value` if defined, else returns `defaultValue`.\n * @param value - The value to return if defined.\n * @param defaultValue - The value to return if `value` is undefined.\n */ function valueOrDefault(value, defaultValue) {\n return typeof value === 'undefined' ? defaultValue : value;\n}\nconst toPercentage = (value, dimension)=>typeof value === 'string' && value.endsWith('%') ? parseFloat(value) / 100 : +value / dimension;\nconst toDimension = (value, dimension)=>typeof value === 'string' && value.endsWith('%') ? parseFloat(value) / 100 * dimension : +value;\n/**\n * Calls `fn` with the given `args` in the scope defined by `thisArg` and returns the\n * value returned by `fn`. If `fn` is not a function, this method returns undefined.\n * @param fn - The function to call.\n * @param args - The arguments with which `fn` should be called.\n * @param [thisArg] - The value of `this` provided for the call to `fn`.\n */ function callback(fn, args, thisArg) {\n if (fn && typeof fn.call === 'function') {\n return fn.apply(thisArg, args);\n }\n}\nfunction each(loopable, fn, thisArg, reverse) {\n let i, len, keys;\n if (isArray(loopable)) {\n len = loopable.length;\n if (reverse) {\n for(i = len - 1; i >= 0; i--){\n fn.call(thisArg, loopable[i], i);\n }\n } else {\n for(i = 0; i < len; i++){\n fn.call(thisArg, loopable[i], i);\n }\n }\n } else if (isObject(loopable)) {\n keys = Object.keys(loopable);\n len = keys.length;\n for(i = 0; i < len; i++){\n fn.call(thisArg, loopable[keys[i]], keys[i]);\n }\n }\n}\n/**\n * Returns true if the `a0` and `a1` arrays have the same content, else returns false.\n * @param a0 - The array to compare\n * @param a1 - The array to compare\n * @private\n */ function _elementsEqual(a0, a1) {\n let i, ilen, v0, v1;\n if (!a0 || !a1 || a0.length !== a1.length) {\n return false;\n }\n for(i = 0, ilen = a0.length; i < ilen; ++i){\n v0 = a0[i];\n v1 = a1[i];\n if (v0.datasetIndex !== v1.datasetIndex || v0.index !== v1.index) {\n return false;\n }\n }\n return true;\n}\n/**\n * Returns a deep copy of `source` without keeping references on objects and arrays.\n * @param source - The value to clone.\n */ function clone(source) {\n if (isArray(source)) {\n return source.map(clone);\n }\n if (isObject(source)) {\n const target = Object.create(null);\n const keys = Object.keys(source);\n const klen = keys.length;\n let k = 0;\n for(; k < klen; ++k){\n target[keys[k]] = clone(source[keys[k]]);\n }\n return target;\n }\n return source;\n}\nfunction isValidKey(key) {\n return [\n '__proto__',\n 'prototype',\n 'constructor'\n ].indexOf(key) === -1;\n}\n/**\n * The default merger when Chart.helpers.merge is called without merger option.\n * Note(SB): also used by mergeConfig and mergeScaleConfig as fallback.\n * @private\n */ function _merger(key, target, source, options) {\n if (!isValidKey(key)) {\n return;\n }\n const tval = target[key];\n const sval = source[key];\n if (isObject(tval) && isObject(sval)) {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n merge(tval, sval, options);\n } else {\n target[key] = clone(sval);\n }\n}\nfunction merge(target, source, options) {\n const sources = isArray(source) ? source : [\n source\n ];\n const ilen = sources.length;\n if (!isObject(target)) {\n return target;\n }\n options = options || {};\n const merger = options.merger || _merger;\n let current;\n for(let i = 0; i < ilen; ++i){\n current = sources[i];\n if (!isObject(current)) {\n continue;\n }\n const keys = Object.keys(current);\n for(let k = 0, klen = keys.length; k < klen; ++k){\n merger(keys[k], target, current, options);\n }\n }\n return target;\n}\nfunction mergeIf(target, source) {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n return merge(target, source, {\n merger: _mergerIf\n });\n}\n/**\n * Merges source[key] in target[key] only if target[key] is undefined.\n * @private\n */ function _mergerIf(key, target, source) {\n if (!isValidKey(key)) {\n return;\n }\n const tval = target[key];\n const sval = source[key];\n if (isObject(tval) && isObject(sval)) {\n mergeIf(tval, sval);\n } else if (!Object.prototype.hasOwnProperty.call(target, key)) {\n target[key] = clone(sval);\n }\n}\n/**\n * @private\n */ function _deprecated(scope, value, previous, current) {\n if (value !== undefined) {\n console.warn(scope + ': \"' + previous + '\" is deprecated. Please use \"' + current + '\" instead');\n }\n}\n// resolveObjectKey resolver cache\nconst keyResolvers = {\n // Chart.helpers.core resolveObjectKey should resolve empty key to root object\n '': (v)=>v,\n // default resolvers\n x: (o)=>o.x,\n y: (o)=>o.y\n};\n/**\n * @private\n */ function _splitKey(key) {\n const parts = key.split('.');\n const keys = [];\n let tmp = '';\n for (const part of parts){\n tmp += part;\n if (tmp.endsWith('\\\\')) {\n tmp = tmp.slice(0, -1) + '.';\n } else {\n keys.push(tmp);\n tmp = '';\n }\n }\n return keys;\n}\nfunction _getKeyResolver(key) {\n const keys = _splitKey(key);\n return (obj)=>{\n for (const k of keys){\n if (k === '') {\n break;\n }\n obj = obj && obj[k];\n }\n return obj;\n };\n}\nfunction resolveObjectKey(obj, key) {\n const resolver = keyResolvers[key] || (keyResolvers[key] = _getKeyResolver(key));\n return resolver(obj);\n}\n/**\n * @private\n */ function _capitalize(str) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\nconst defined = (value)=>typeof value !== 'undefined';\nconst isFunction = (value)=>typeof value === 'function';\n// Adapted from https://stackoverflow.com/questions/31128855/comparing-ecma6-sets-for-equality#31129384\nconst setsEqual = (a, b)=>{\n if (a.size !== b.size) {\n return false;\n }\n for (const item of a){\n if (!b.has(item)) {\n return false;\n }\n }\n return true;\n};\n/**\n * @param e - The event\n * @private\n */ function _isClickEvent(e) {\n return e.type === 'mouseup' || e.type === 'click' || e.type === 'contextmenu';\n}\n\n/**\n * @alias Chart.helpers.math\n * @namespace\n */ const PI = Math.PI;\nconst TAU = 2 * PI;\nconst PITAU = TAU + PI;\nconst INFINITY = Number.POSITIVE_INFINITY;\nconst RAD_PER_DEG = PI / 180;\nconst HALF_PI = PI / 2;\nconst QUARTER_PI = PI / 4;\nconst TWO_THIRDS_PI = PI * 2 / 3;\nconst log10 = Math.log10;\nconst sign = Math.sign;\nfunction almostEquals(x, y, epsilon) {\n return Math.abs(x - y) < epsilon;\n}\n/**\n * Implementation of the nice number algorithm used in determining where axis labels will go\n */ function niceNum(range) {\n const roundedRange = Math.round(range);\n range = almostEquals(range, roundedRange, range / 1000) ? roundedRange : range;\n const niceRange = Math.pow(10, Math.floor(log10(range)));\n const fraction = range / niceRange;\n const niceFraction = fraction <= 1 ? 1 : fraction <= 2 ? 2 : fraction <= 5 ? 5 : 10;\n return niceFraction * niceRange;\n}\n/**\n * Returns an array of factors sorted from 1 to sqrt(value)\n * @private\n */ function _factorize(value) {\n const result = [];\n const sqrt = Math.sqrt(value);\n let i;\n for(i = 1; i < sqrt; i++){\n if (value % i === 0) {\n result.push(i);\n result.push(value / i);\n }\n }\n if (sqrt === (sqrt | 0)) {\n result.push(sqrt);\n }\n result.sort((a, b)=>a - b).pop();\n return result;\n}\nfunction isNumber(n) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n}\nfunction almostWhole(x, epsilon) {\n const rounded = Math.round(x);\n return rounded - epsilon <= x && rounded + epsilon >= x;\n}\n/**\n * @private\n */ function _setMinAndMaxByKey(array, target, property) {\n let i, ilen, value;\n for(i = 0, ilen = array.length; i < ilen; i++){\n value = array[i][property];\n if (!isNaN(value)) {\n target.min = Math.min(target.min, value);\n target.max = Math.max(target.max, value);\n }\n }\n}\nfunction toRadians(degrees) {\n return degrees * (PI / 180);\n}\nfunction toDegrees(radians) {\n return radians * (180 / PI);\n}\n/**\n * Returns the number of decimal places\n * i.e. the number of digits after the decimal point, of the value of this Number.\n * @param x - A number.\n * @returns The number of decimal places.\n * @private\n */ function _decimalPlaces(x) {\n if (!isNumberFinite(x)) {\n return;\n }\n let e = 1;\n let p = 0;\n while(Math.round(x * e) / e !== x){\n e *= 10;\n p++;\n }\n return p;\n}\n// Gets the angle from vertical upright to the point about a centre.\nfunction getAngleFromPoint(centrePoint, anglePoint) {\n const distanceFromXCenter = anglePoint.x - centrePoint.x;\n const distanceFromYCenter = anglePoint.y - centrePoint.y;\n const radialDistanceFromCenter = Math.sqrt(distanceFromXCenter * distanceFromXCenter + distanceFromYCenter * distanceFromYCenter);\n let angle = Math.atan2(distanceFromYCenter, distanceFromXCenter);\n if (angle < -0.5 * PI) {\n angle += TAU; // make sure the returned angle is in the range of (-PI/2, 3PI/2]\n }\n return {\n angle,\n distance: radialDistanceFromCenter\n };\n}\nfunction distanceBetweenPoints(pt1, pt2) {\n return Math.sqrt(Math.pow(pt2.x - pt1.x, 2) + Math.pow(pt2.y - pt1.y, 2));\n}\n/**\n * Shortest distance between angles, in either direction.\n * @private\n */ function _angleDiff(a, b) {\n return (a - b + PITAU) % TAU - PI;\n}\n/**\n * Normalize angle to be between 0 and 2*PI\n * @private\n */ function _normalizeAngle(a) {\n return (a % TAU + TAU) % TAU;\n}\n/**\n * @private\n */ function _angleBetween(angle, start, end, sameAngleIsFullCircle) {\n const a = _normalizeAngle(angle);\n const s = _normalizeAngle(start);\n const e = _normalizeAngle(end);\n const angleToStart = _normalizeAngle(s - a);\n const angleToEnd = _normalizeAngle(e - a);\n const startToAngle = _normalizeAngle(a - s);\n const endToAngle = _normalizeAngle(a - e);\n return a === s || a === e || sameAngleIsFullCircle && s === e || angleToStart > angleToEnd && startToAngle < endToAngle;\n}\n/**\n * Limit `value` between `min` and `max`\n * @param value\n * @param min\n * @param max\n * @private\n */ function _limitValue(value, min, max) {\n return Math.max(min, Math.min(max, value));\n}\n/**\n * @param {number} value\n * @private\n */ function _int16Range(value) {\n return _limitValue(value, -32768, 32767);\n}\n/**\n * @param value\n * @param start\n * @param end\n * @param [epsilon]\n * @private\n */ function _isBetween(value, start, end, epsilon = 1e-6) {\n return value >= Math.min(start, end) - epsilon && value <= Math.max(start, end) + epsilon;\n}\n\nfunction _lookup(table, value, cmp) {\n cmp = cmp || ((index)=>table[index] < value);\n let hi = table.length - 1;\n let lo = 0;\n let mid;\n while(hi - lo > 1){\n mid = lo + hi >> 1;\n if (cmp(mid)) {\n lo = mid;\n } else {\n hi = mid;\n }\n }\n return {\n lo,\n hi\n };\n}\n/**\n * Binary search\n * @param table - the table search. must be sorted!\n * @param key - property name for the value in each entry\n * @param value - value to find\n * @param last - lookup last index\n * @private\n */ const _lookupByKey = (table, key, value, last)=>_lookup(table, value, last ? (index)=>{\n const ti = table[index][key];\n return ti < value || ti === value && table[index + 1][key] === value;\n } : (index)=>table[index][key] < value);\n/**\n * Reverse binary search\n * @param table - the table search. must be sorted!\n * @param key - property name for the value in each entry\n * @param value - value to find\n * @private\n */ const _rlookupByKey = (table, key, value)=>_lookup(table, value, (index)=>table[index][key] >= value);\n/**\n * Return subset of `values` between `min` and `max` inclusive.\n * Values are assumed to be in sorted order.\n * @param values - sorted array of values\n * @param min - min value\n * @param max - max value\n */ function _filterBetween(values, min, max) {\n let start = 0;\n let end = values.length;\n while(start < end && values[start] < min){\n start++;\n }\n while(end > start && values[end - 1] > max){\n end--;\n }\n return start > 0 || end < values.length ? values.slice(start, end) : values;\n}\nconst arrayEvents = [\n 'push',\n 'pop',\n 'shift',\n 'splice',\n 'unshift'\n];\nfunction listenArrayEvents(array, listener) {\n if (array._chartjs) {\n array._chartjs.listeners.push(listener);\n return;\n }\n Object.defineProperty(array, '_chartjs', {\n configurable: true,\n enumerable: false,\n value: {\n listeners: [\n listener\n ]\n }\n });\n arrayEvents.forEach((key)=>{\n const method = '_onData' + _capitalize(key);\n const base = array[key];\n Object.defineProperty(array, key, {\n configurable: true,\n enumerable: false,\n value (...args) {\n const res = base.apply(this, args);\n array._chartjs.listeners.forEach((object)=>{\n if (typeof object[method] === 'function') {\n object[method](...args);\n }\n });\n return res;\n }\n });\n });\n}\nfunction unlistenArrayEvents(array, listener) {\n const stub = array._chartjs;\n if (!stub) {\n return;\n }\n const listeners = stub.listeners;\n const index = listeners.indexOf(listener);\n if (index !== -1) {\n listeners.splice(index, 1);\n }\n if (listeners.length > 0) {\n return;\n }\n arrayEvents.forEach((key)=>{\n delete array[key];\n });\n delete array._chartjs;\n}\n/**\n * @param items\n */ function _arrayUnique(items) {\n const set = new Set(items);\n if (set.size === items.length) {\n return items;\n }\n return Array.from(set);\n}\n\nfunction fontString(pixelSize, fontStyle, fontFamily) {\n return fontStyle + ' ' + pixelSize + 'px ' + fontFamily;\n}\n/**\n* Request animation polyfill\n*/ const requestAnimFrame = function() {\n if (typeof window === 'undefined') {\n return function(callback) {\n return callback();\n };\n }\n return window.requestAnimationFrame;\n}();\n/**\n * Throttles calling `fn` once per animation frame\n * Latest arguments are used on the actual call\n */ function throttled(fn, thisArg) {\n let argsToUse = [];\n let ticking = false;\n return function(...args) {\n // Save the args for use later\n argsToUse = args;\n if (!ticking) {\n ticking = true;\n requestAnimFrame.call(window, ()=>{\n ticking = false;\n fn.apply(thisArg, argsToUse);\n });\n }\n };\n}\n/**\n * Debounces calling `fn` for `delay` ms\n */ function debounce(fn, delay) {\n let timeout;\n return function(...args) {\n if (delay) {\n clearTimeout(timeout);\n timeout = setTimeout(fn, delay, args);\n } else {\n fn.apply(this, args);\n }\n return delay;\n };\n}\n/**\n * Converts 'start' to 'left', 'end' to 'right' and others to 'center'\n * @private\n */ const _toLeftRightCenter = (align)=>align === 'start' ? 'left' : align === 'end' ? 'right' : 'center';\n/**\n * Returns `start`, `end` or `(start + end) / 2` depending on `align`. Defaults to `center`\n * @private\n */ const _alignStartEnd = (align, start, end)=>align === 'start' ? start : align === 'end' ? end : (start + end) / 2;\n/**\n * Returns `left`, `right` or `(left + right) / 2` depending on `align`. Defaults to `left`\n * @private\n */ const _textX = (align, left, right, rtl)=>{\n const check = rtl ? 'left' : 'right';\n return align === check ? right : align === 'center' ? (left + right) / 2 : left;\n};\n/**\n * Return start and count of visible points.\n * @private\n */ function _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled) {\n const pointCount = points.length;\n let start = 0;\n let count = pointCount;\n if (meta._sorted) {\n const { iScale , _parsed } = meta;\n const axis = iScale.axis;\n const { min , max , minDefined , maxDefined } = iScale.getUserBounds();\n if (minDefined) {\n start = _limitValue(Math.min(// @ts-expect-error Need to type _parsed\n _lookupByKey(_parsed, axis, min).lo, // @ts-expect-error Need to fix types on _lookupByKey\n animationsDisabled ? pointCount : _lookupByKey(points, axis, iScale.getPixelForValue(min)).lo), 0, pointCount - 1);\n }\n if (maxDefined) {\n count = _limitValue(Math.max(// @ts-expect-error Need to type _parsed\n _lookupByKey(_parsed, iScale.axis, max, true).hi + 1, // @ts-expect-error Need to fix types on _lookupByKey\n animationsDisabled ? 0 : _lookupByKey(points, axis, iScale.getPixelForValue(max), true).hi + 1), start, pointCount) - start;\n } else {\n count = pointCount - start;\n }\n }\n return {\n start,\n count\n };\n}\n/**\n * Checks if the scale ranges have changed.\n * @param {object} meta - dataset meta.\n * @returns {boolean}\n * @private\n */ function _scaleRangesChanged(meta) {\n const { xScale , yScale , _scaleRanges } = meta;\n const newRanges = {\n xmin: xScale.min,\n xmax: xScale.max,\n ymin: yScale.min,\n ymax: yScale.max\n };\n if (!_scaleRanges) {\n meta._scaleRanges = newRanges;\n return true;\n }\n const changed = _scaleRanges.xmin !== xScale.min || _scaleRanges.xmax !== xScale.max || _scaleRanges.ymin !== yScale.min || _scaleRanges.ymax !== yScale.max;\n Object.assign(_scaleRanges, newRanges);\n return changed;\n}\n\nconst atEdge = (t)=>t === 0 || t === 1;\nconst elasticIn = (t, s, p)=>-(Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * TAU / p));\nconst elasticOut = (t, s, p)=>Math.pow(2, -10 * t) * Math.sin((t - s) * TAU / p) + 1;\n/**\n * Easing functions adapted from Robert Penner's easing equations.\n * @namespace Chart.helpers.easing.effects\n * @see http://www.robertpenner.com/easing/\n */ const effects = {\n linear: (t)=>t,\n easeInQuad: (t)=>t * t,\n easeOutQuad: (t)=>-t * (t - 2),\n easeInOutQuad: (t)=>(t /= 0.5) < 1 ? 0.5 * t * t : -0.5 * (--t * (t - 2) - 1),\n easeInCubic: (t)=>t * t * t,\n easeOutCubic: (t)=>(t -= 1) * t * t + 1,\n easeInOutCubic: (t)=>(t /= 0.5) < 1 ? 0.5 * t * t * t : 0.5 * ((t -= 2) * t * t + 2),\n easeInQuart: (t)=>t * t * t * t,\n easeOutQuart: (t)=>-((t -= 1) * t * t * t - 1),\n easeInOutQuart: (t)=>(t /= 0.5) < 1 ? 0.5 * t * t * t * t : -0.5 * ((t -= 2) * t * t * t - 2),\n easeInQuint: (t)=>t * t * t * t * t,\n easeOutQuint: (t)=>(t -= 1) * t * t * t * t + 1,\n easeInOutQuint: (t)=>(t /= 0.5) < 1 ? 0.5 * t * t * t * t * t : 0.5 * ((t -= 2) * t * t * t * t + 2),\n easeInSine: (t)=>-Math.cos(t * HALF_PI) + 1,\n easeOutSine: (t)=>Math.sin(t * HALF_PI),\n easeInOutSine: (t)=>-0.5 * (Math.cos(PI * t) - 1),\n easeInExpo: (t)=>t === 0 ? 0 : Math.pow(2, 10 * (t - 1)),\n easeOutExpo: (t)=>t === 1 ? 1 : -Math.pow(2, -10 * t) + 1,\n easeInOutExpo: (t)=>atEdge(t) ? t : t < 0.5 ? 0.5 * Math.pow(2, 10 * (t * 2 - 1)) : 0.5 * (-Math.pow(2, -10 * (t * 2 - 1)) + 2),\n easeInCirc: (t)=>t >= 1 ? t : -(Math.sqrt(1 - t * t) - 1),\n easeOutCirc: (t)=>Math.sqrt(1 - (t -= 1) * t),\n easeInOutCirc: (t)=>(t /= 0.5) < 1 ? -0.5 * (Math.sqrt(1 - t * t) - 1) : 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1),\n easeInElastic: (t)=>atEdge(t) ? t : elasticIn(t, 0.075, 0.3),\n easeOutElastic: (t)=>atEdge(t) ? t : elasticOut(t, 0.075, 0.3),\n easeInOutElastic (t) {\n const s = 0.1125;\n const p = 0.45;\n return atEdge(t) ? t : t < 0.5 ? 0.5 * elasticIn(t * 2, s, p) : 0.5 + 0.5 * elasticOut(t * 2 - 1, s, p);\n },\n easeInBack (t) {\n const s = 1.70158;\n return t * t * ((s + 1) * t - s);\n },\n easeOutBack (t) {\n const s = 1.70158;\n return (t -= 1) * t * ((s + 1) * t + s) + 1;\n },\n easeInOutBack (t) {\n let s = 1.70158;\n if ((t /= 0.5) < 1) {\n return 0.5 * (t * t * (((s *= 1.525) + 1) * t - s));\n }\n return 0.5 * ((t -= 2) * t * (((s *= 1.525) + 1) * t + s) + 2);\n },\n easeInBounce: (t)=>1 - effects.easeOutBounce(1 - t),\n easeOutBounce (t) {\n const m = 7.5625;\n const d = 2.75;\n if (t < 1 / d) {\n return m * t * t;\n }\n if (t < 2 / d) {\n return m * (t -= 1.5 / d) * t + 0.75;\n }\n if (t < 2.5 / d) {\n return m * (t -= 2.25 / d) * t + 0.9375;\n }\n return m * (t -= 2.625 / d) * t + 0.984375;\n },\n easeInOutBounce: (t)=>t < 0.5 ? effects.easeInBounce(t * 2) * 0.5 : effects.easeOutBounce(t * 2 - 1) * 0.5 + 0.5\n};\n\nfunction isPatternOrGradient(value) {\n if (value && typeof value === 'object') {\n const type = value.toString();\n return type === '[object CanvasPattern]' || type === '[object CanvasGradient]';\n }\n return false;\n}\nfunction color(value) {\n return isPatternOrGradient(value) ? value : new Color(value);\n}\nfunction getHoverColor(value) {\n return isPatternOrGradient(value) ? value : new Color(value).saturate(0.5).darken(0.1).hexString();\n}\n\nconst numbers = [\n 'x',\n 'y',\n 'borderWidth',\n 'radius',\n 'tension'\n];\nconst colors = [\n 'color',\n 'borderColor',\n 'backgroundColor'\n];\nfunction applyAnimationsDefaults(defaults) {\n defaults.set('animation', {\n delay: undefined,\n duration: 1000,\n easing: 'easeOutQuart',\n fn: undefined,\n from: undefined,\n loop: undefined,\n to: undefined,\n type: undefined\n });\n defaults.describe('animation', {\n _fallback: false,\n _indexable: false,\n _scriptable: (name)=>name !== 'onProgress' && name !== 'onComplete' && name !== 'fn'\n });\n defaults.set('animations', {\n colors: {\n type: 'color',\n properties: colors\n },\n numbers: {\n type: 'number',\n properties: numbers\n }\n });\n defaults.describe('animations', {\n _fallback: 'animation'\n });\n defaults.set('transitions', {\n active: {\n animation: {\n duration: 400\n }\n },\n resize: {\n animation: {\n duration: 0\n }\n },\n show: {\n animations: {\n colors: {\n from: 'transparent'\n },\n visible: {\n type: 'boolean',\n duration: 0\n }\n }\n },\n hide: {\n animations: {\n colors: {\n to: 'transparent'\n },\n visible: {\n type: 'boolean',\n easing: 'linear',\n fn: (v)=>v | 0\n }\n }\n }\n });\n}\n\nfunction applyLayoutsDefaults(defaults) {\n defaults.set('layout', {\n autoPadding: true,\n padding: {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n }\n });\n}\n\nconst intlCache = new Map();\nfunction getNumberFormat(locale, options) {\n options = options || {};\n const cacheKey = locale + JSON.stringify(options);\n let formatter = intlCache.get(cacheKey);\n if (!formatter) {\n formatter = new Intl.NumberFormat(locale, options);\n intlCache.set(cacheKey, formatter);\n }\n return formatter;\n}\nfunction formatNumber(num, locale, options) {\n return getNumberFormat(locale, options).format(num);\n}\n\nconst formatters = {\n values (value) {\n return isArray(value) ? value : '' + value;\n },\n numeric (tickValue, index, ticks) {\n if (tickValue === 0) {\n return '0';\n }\n const locale = this.chart.options.locale;\n let notation;\n let delta = tickValue;\n if (ticks.length > 1) {\n const maxTick = Math.max(Math.abs(ticks[0].value), Math.abs(ticks[ticks.length - 1].value));\n if (maxTick < 1e-4 || maxTick > 1e+15) {\n notation = 'scientific';\n }\n delta = calculateDelta(tickValue, ticks);\n }\n const logDelta = log10(Math.abs(delta));\n const numDecimal = isNaN(logDelta) ? 1 : Math.max(Math.min(-1 * Math.floor(logDelta), 20), 0);\n const options = {\n notation,\n minimumFractionDigits: numDecimal,\n maximumFractionDigits: numDecimal\n };\n Object.assign(options, this.options.ticks.format);\n return formatNumber(tickValue, locale, options);\n },\n logarithmic (tickValue, index, ticks) {\n if (tickValue === 0) {\n return '0';\n }\n const remain = ticks[index].significand || tickValue / Math.pow(10, Math.floor(log10(tickValue)));\n if ([\n 1,\n 2,\n 3,\n 5,\n 10,\n 15\n ].includes(remain) || index > 0.8 * ticks.length) {\n return formatters.numeric.call(this, tickValue, index, ticks);\n }\n return '';\n }\n};\nfunction calculateDelta(tickValue, ticks) {\n let delta = ticks.length > 3 ? ticks[2].value - ticks[1].value : ticks[1].value - ticks[0].value;\n if (Math.abs(delta) >= 1 && tickValue !== Math.floor(tickValue)) {\n delta = tickValue - Math.floor(tickValue);\n }\n return delta;\n}\n var Ticks = {\n formatters\n};\n\nfunction applyScaleDefaults(defaults) {\n defaults.set('scale', {\n display: true,\n offset: false,\n reverse: false,\n beginAtZero: false,\n bounds: 'ticks',\n clip: true,\n grace: 0,\n grid: {\n display: true,\n lineWidth: 1,\n drawOnChartArea: true,\n drawTicks: true,\n tickLength: 8,\n tickWidth: (_ctx, options)=>options.lineWidth,\n tickColor: (_ctx, options)=>options.color,\n offset: false\n },\n border: {\n display: true,\n dash: [],\n dashOffset: 0.0,\n width: 1\n },\n title: {\n display: false,\n text: '',\n padding: {\n top: 4,\n bottom: 4\n }\n },\n ticks: {\n minRotation: 0,\n maxRotation: 50,\n mirror: false,\n textStrokeWidth: 0,\n textStrokeColor: '',\n padding: 3,\n display: true,\n autoSkip: true,\n autoSkipPadding: 3,\n labelOffset: 0,\n callback: Ticks.formatters.values,\n minor: {},\n major: {},\n align: 'center',\n crossAlign: 'near',\n showLabelBackdrop: false,\n backdropColor: 'rgba(255, 255, 255, 0.75)',\n backdropPadding: 2\n }\n });\n defaults.route('scale.ticks', 'color', '', 'color');\n defaults.route('scale.grid', 'color', '', 'borderColor');\n defaults.route('scale.border', 'color', '', 'borderColor');\n defaults.route('scale.title', 'color', '', 'color');\n defaults.describe('scale', {\n _fallback: false,\n _scriptable: (name)=>!name.startsWith('before') && !name.startsWith('after') && name !== 'callback' && name !== 'parser',\n _indexable: (name)=>name !== 'borderDash' && name !== 'tickBorderDash' && name !== 'dash'\n });\n defaults.describe('scales', {\n _fallback: 'scale'\n });\n defaults.describe('scale.ticks', {\n _scriptable: (name)=>name !== 'backdropPadding' && name !== 'callback',\n _indexable: (name)=>name !== 'backdropPadding'\n });\n}\n\nconst overrides = Object.create(null);\nconst descriptors = Object.create(null);\n function getScope$1(node, key) {\n if (!key) {\n return node;\n }\n const keys = key.split('.');\n for(let i = 0, n = keys.length; i < n; ++i){\n const k = keys[i];\n node = node[k] || (node[k] = Object.create(null));\n }\n return node;\n}\nfunction set(root, scope, values) {\n if (typeof scope === 'string') {\n return merge(getScope$1(root, scope), values);\n }\n return merge(getScope$1(root, ''), scope);\n}\n class Defaults {\n constructor(_descriptors, _appliers){\n this.animation = undefined;\n this.backgroundColor = 'rgba(0,0,0,0.1)';\n this.borderColor = 'rgba(0,0,0,0.1)';\n this.color = '#666';\n this.datasets = {};\n this.devicePixelRatio = (context)=>context.chart.platform.getDevicePixelRatio();\n this.elements = {};\n this.events = [\n 'mousemove',\n 'mouseout',\n 'click',\n 'touchstart',\n 'touchmove'\n ];\n this.font = {\n family: \"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif\",\n size: 12,\n style: 'normal',\n lineHeight: 1.2,\n weight: null\n };\n this.hover = {};\n this.hoverBackgroundColor = (ctx, options)=>getHoverColor(options.backgroundColor);\n this.hoverBorderColor = (ctx, options)=>getHoverColor(options.borderColor);\n this.hoverColor = (ctx, options)=>getHoverColor(options.color);\n this.indexAxis = 'x';\n this.interaction = {\n mode: 'nearest',\n intersect: true,\n includeInvisible: false\n };\n this.maintainAspectRatio = true;\n this.onHover = null;\n this.onClick = null;\n this.parsing = true;\n this.plugins = {};\n this.responsive = true;\n this.scale = undefined;\n this.scales = {};\n this.showLine = true;\n this.drawActiveElementsOnTop = true;\n this.describe(_descriptors);\n this.apply(_appliers);\n }\n set(scope, values) {\n return set(this, scope, values);\n }\n get(scope) {\n return getScope$1(this, scope);\n }\n describe(scope, values) {\n return set(descriptors, scope, values);\n }\n override(scope, values) {\n return set(overrides, scope, values);\n }\n route(scope, name, targetScope, targetName) {\n const scopeObject = getScope$1(this, scope);\n const targetScopeObject = getScope$1(this, targetScope);\n const privateName = '_' + name;\n Object.defineProperties(scopeObject, {\n [privateName]: {\n value: scopeObject[name],\n writable: true\n },\n [name]: {\n enumerable: true,\n get () {\n const local = this[privateName];\n const target = targetScopeObject[targetName];\n if (isObject(local)) {\n return Object.assign({}, target, local);\n }\n return valueOrDefault(local, target);\n },\n set (value) {\n this[privateName] = value;\n }\n }\n });\n }\n apply(appliers) {\n appliers.forEach((apply)=>apply(this));\n }\n}\nvar defaults = /* #__PURE__ */ new Defaults({\n _scriptable: (name)=>!name.startsWith('on'),\n _indexable: (name)=>name !== 'events',\n hover: {\n _fallback: 'interaction'\n },\n interaction: {\n _scriptable: false,\n _indexable: false\n }\n}, [\n applyAnimationsDefaults,\n applyLayoutsDefaults,\n applyScaleDefaults\n]);\n\n/**\n * Converts the given font object into a CSS font string.\n * @param font - A font object.\n * @return The CSS font string. See https://developer.mozilla.org/en-US/docs/Web/CSS/font\n * @private\n */ function toFontString(font) {\n if (!font || isNullOrUndef(font.size) || isNullOrUndef(font.family)) {\n return null;\n }\n return (font.style ? font.style + ' ' : '') + (font.weight ? font.weight + ' ' : '') + font.size + 'px ' + font.family;\n}\n/**\n * @private\n */ function _measureText(ctx, data, gc, longest, string) {\n let textWidth = data[string];\n if (!textWidth) {\n textWidth = data[string] = ctx.measureText(string).width;\n gc.push(string);\n }\n if (textWidth > longest) {\n longest = textWidth;\n }\n return longest;\n}\n/**\n * @private\n */ // eslint-disable-next-line complexity\nfunction _longestText(ctx, font, arrayOfThings, cache) {\n cache = cache || {};\n let data = cache.data = cache.data || {};\n let gc = cache.garbageCollect = cache.garbageCollect || [];\n if (cache.font !== font) {\n data = cache.data = {};\n gc = cache.garbageCollect = [];\n cache.font = font;\n }\n ctx.save();\n ctx.font = font;\n let longest = 0;\n const ilen = arrayOfThings.length;\n let i, j, jlen, thing, nestedThing;\n for(i = 0; i < ilen; i++){\n thing = arrayOfThings[i];\n // Undefined strings and arrays should not be measured\n if (thing !== undefined && thing !== null && !isArray(thing)) {\n longest = _measureText(ctx, data, gc, longest, thing);\n } else if (isArray(thing)) {\n // if it is an array lets measure each element\n // to do maybe simplify this function a bit so we can do this more recursively?\n for(j = 0, jlen = thing.length; j < jlen; j++){\n nestedThing = thing[j];\n // Undefined strings and arrays should not be measured\n if (nestedThing !== undefined && nestedThing !== null && !isArray(nestedThing)) {\n longest = _measureText(ctx, data, gc, longest, nestedThing);\n }\n }\n }\n }\n ctx.restore();\n const gcLen = gc.length / 2;\n if (gcLen > arrayOfThings.length) {\n for(i = 0; i < gcLen; i++){\n delete data[gc[i]];\n }\n gc.splice(0, gcLen);\n }\n return longest;\n}\n/**\n * Returns the aligned pixel value to avoid anti-aliasing blur\n * @param chart - The chart instance.\n * @param pixel - A pixel value.\n * @param width - The width of the element.\n * @returns The aligned pixel value.\n * @private\n */ function _alignPixel(chart, pixel, width) {\n const devicePixelRatio = chart.currentDevicePixelRatio;\n const halfWidth = width !== 0 ? Math.max(width / 2, 0.5) : 0;\n return Math.round((pixel - halfWidth) * devicePixelRatio) / devicePixelRatio + halfWidth;\n}\n/**\n * Clears the entire canvas.\n */ function clearCanvas(canvas, ctx) {\n ctx = ctx || canvas.getContext('2d');\n ctx.save();\n // canvas.width and canvas.height do not consider the canvas transform,\n // while clearRect does\n ctx.resetTransform();\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n ctx.restore();\n}\nfunction drawPoint(ctx, options, x, y) {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n drawPointLegend(ctx, options, x, y, null);\n}\n// eslint-disable-next-line complexity\nfunction drawPointLegend(ctx, options, x, y, w) {\n let type, xOffset, yOffset, size, cornerRadius, width, xOffsetW, yOffsetW;\n const style = options.pointStyle;\n const rotation = options.rotation;\n const radius = options.radius;\n let rad = (rotation || 0) * RAD_PER_DEG;\n if (style && typeof style === 'object') {\n type = style.toString();\n if (type === '[object HTMLImageElement]' || type === '[object HTMLCanvasElement]') {\n ctx.save();\n ctx.translate(x, y);\n ctx.rotate(rad);\n ctx.drawImage(style, -style.width / 2, -style.height / 2, style.width, style.height);\n ctx.restore();\n return;\n }\n }\n if (isNaN(radius) || radius <= 0) {\n return;\n }\n ctx.beginPath();\n switch(style){\n // Default includes circle\n default:\n if (w) {\n ctx.ellipse(x, y, w / 2, radius, 0, 0, TAU);\n } else {\n ctx.arc(x, y, radius, 0, TAU);\n }\n ctx.closePath();\n break;\n case 'triangle':\n width = w ? w / 2 : radius;\n ctx.moveTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n rad += TWO_THIRDS_PI;\n ctx.lineTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n rad += TWO_THIRDS_PI;\n ctx.lineTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n ctx.closePath();\n break;\n case 'rectRounded':\n // NOTE: the rounded rect implementation changed to use `arc` instead of\n // `quadraticCurveTo` since it generates better results when rect is\n // almost a circle. 0.516 (instead of 0.5) produces results with visually\n // closer proportion to the previous impl and it is inscribed in the\n // circle with `radius`. For more details, see the following PRs:\n // https://github.com/chartjs/Chart.js/issues/5597\n // https://github.com/chartjs/Chart.js/issues/5858\n cornerRadius = radius * 0.516;\n size = radius - cornerRadius;\n xOffset = Math.cos(rad + QUARTER_PI) * size;\n xOffsetW = Math.cos(rad + QUARTER_PI) * (w ? w / 2 - cornerRadius : size);\n yOffset = Math.sin(rad + QUARTER_PI) * size;\n yOffsetW = Math.sin(rad + QUARTER_PI) * (w ? w / 2 - cornerRadius : size);\n ctx.arc(x - xOffsetW, y - yOffset, cornerRadius, rad - PI, rad - HALF_PI);\n ctx.arc(x + yOffsetW, y - xOffset, cornerRadius, rad - HALF_PI, rad);\n ctx.arc(x + xOffsetW, y + yOffset, cornerRadius, rad, rad + HALF_PI);\n ctx.arc(x - yOffsetW, y + xOffset, cornerRadius, rad + HALF_PI, rad + PI);\n ctx.closePath();\n break;\n case 'rect':\n if (!rotation) {\n size = Math.SQRT1_2 * radius;\n width = w ? w / 2 : size;\n ctx.rect(x - width, y - size, 2 * width, 2 * size);\n break;\n }\n rad += QUARTER_PI;\n /* falls through */ case 'rectRot':\n xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n ctx.moveTo(x - xOffsetW, y - yOffset);\n ctx.lineTo(x + yOffsetW, y - xOffset);\n ctx.lineTo(x + xOffsetW, y + yOffset);\n ctx.lineTo(x - yOffsetW, y + xOffset);\n ctx.closePath();\n break;\n case 'crossRot':\n rad += QUARTER_PI;\n /* falls through */ case 'cross':\n xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n ctx.moveTo(x - xOffsetW, y - yOffset);\n ctx.lineTo(x + xOffsetW, y + yOffset);\n ctx.moveTo(x + yOffsetW, y - xOffset);\n ctx.lineTo(x - yOffsetW, y + xOffset);\n break;\n case 'star':\n xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n ctx.moveTo(x - xOffsetW, y - yOffset);\n ctx.lineTo(x + xOffsetW, y + yOffset);\n ctx.moveTo(x + yOffsetW, y - xOffset);\n ctx.lineTo(x - yOffsetW, y + xOffset);\n rad += QUARTER_PI;\n xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n ctx.moveTo(x - xOffsetW, y - yOffset);\n ctx.lineTo(x + xOffsetW, y + yOffset);\n ctx.moveTo(x + yOffsetW, y - xOffset);\n ctx.lineTo(x - yOffsetW, y + xOffset);\n break;\n case 'line':\n xOffset = w ? w / 2 : Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n ctx.moveTo(x - xOffset, y - yOffset);\n ctx.lineTo(x + xOffset, y + yOffset);\n break;\n case 'dash':\n ctx.moveTo(x, y);\n ctx.lineTo(x + Math.cos(rad) * (w ? w / 2 : radius), y + Math.sin(rad) * radius);\n break;\n case false:\n ctx.closePath();\n break;\n }\n ctx.fill();\n if (options.borderWidth > 0) {\n ctx.stroke();\n }\n}\n/**\n * Returns true if the point is inside the rectangle\n * @param point - The point to test\n * @param area - The rectangle\n * @param margin - allowed margin\n * @private\n */ function _isPointInArea(point, area, margin) {\n margin = margin || 0.5; // margin - default is to match rounded decimals\n return !area || point && point.x > area.left - margin && point.x < area.right + margin && point.y > area.top - margin && point.y < area.bottom + margin;\n}\nfunction clipArea(ctx, area) {\n ctx.save();\n ctx.beginPath();\n ctx.rect(area.left, area.top, area.right - area.left, area.bottom - area.top);\n ctx.clip();\n}\nfunction unclipArea(ctx) {\n ctx.restore();\n}\n/**\n * @private\n */ function _steppedLineTo(ctx, previous, target, flip, mode) {\n if (!previous) {\n return ctx.lineTo(target.x, target.y);\n }\n if (mode === 'middle') {\n const midpoint = (previous.x + target.x) / 2.0;\n ctx.lineTo(midpoint, previous.y);\n ctx.lineTo(midpoint, target.y);\n } else if (mode === 'after' !== !!flip) {\n ctx.lineTo(previous.x, target.y);\n } else {\n ctx.lineTo(target.x, previous.y);\n }\n ctx.lineTo(target.x, target.y);\n}\n/**\n * @private\n */ function _bezierCurveTo(ctx, previous, target, flip) {\n if (!previous) {\n return ctx.lineTo(target.x, target.y);\n }\n ctx.bezierCurveTo(flip ? previous.cp1x : previous.cp2x, flip ? previous.cp1y : previous.cp2y, flip ? target.cp2x : target.cp1x, flip ? target.cp2y : target.cp1y, target.x, target.y);\n}\nfunction setRenderOpts(ctx, opts) {\n if (opts.translation) {\n ctx.translate(opts.translation[0], opts.translation[1]);\n }\n if (!isNullOrUndef(opts.rotation)) {\n ctx.rotate(opts.rotation);\n }\n if (opts.color) {\n ctx.fillStyle = opts.color;\n }\n if (opts.textAlign) {\n ctx.textAlign = opts.textAlign;\n }\n if (opts.textBaseline) {\n ctx.textBaseline = opts.textBaseline;\n }\n}\nfunction decorateText(ctx, x, y, line, opts) {\n if (opts.strikethrough || opts.underline) {\n /**\n * Now that IE11 support has been dropped, we can use more\n * of the TextMetrics object. The actual bounding boxes\n * are unflagged in Chrome, Firefox, Edge, and Safari so they\n * can be safely used.\n * See https://developer.mozilla.org/en-US/docs/Web/API/TextMetrics#Browser_compatibility\n */ const metrics = ctx.measureText(line);\n const left = x - metrics.actualBoundingBoxLeft;\n const right = x + metrics.actualBoundingBoxRight;\n const top = y - metrics.actualBoundingBoxAscent;\n const bottom = y + metrics.actualBoundingBoxDescent;\n const yDecoration = opts.strikethrough ? (top + bottom) / 2 : bottom;\n ctx.strokeStyle = ctx.fillStyle;\n ctx.beginPath();\n ctx.lineWidth = opts.decorationWidth || 2;\n ctx.moveTo(left, yDecoration);\n ctx.lineTo(right, yDecoration);\n ctx.stroke();\n }\n}\nfunction drawBackdrop(ctx, opts) {\n const oldColor = ctx.fillStyle;\n ctx.fillStyle = opts.color;\n ctx.fillRect(opts.left, opts.top, opts.width, opts.height);\n ctx.fillStyle = oldColor;\n}\n/**\n * Render text onto the canvas\n */ function renderText(ctx, text, x, y, font, opts = {}) {\n const lines = isArray(text) ? text : [\n text\n ];\n const stroke = opts.strokeWidth > 0 && opts.strokeColor !== '';\n let i, line;\n ctx.save();\n ctx.font = font.string;\n setRenderOpts(ctx, opts);\n for(i = 0; i < lines.length; ++i){\n line = lines[i];\n if (opts.backdrop) {\n drawBackdrop(ctx, opts.backdrop);\n }\n if (stroke) {\n if (opts.strokeColor) {\n ctx.strokeStyle = opts.strokeColor;\n }\n if (!isNullOrUndef(opts.strokeWidth)) {\n ctx.lineWidth = opts.strokeWidth;\n }\n ctx.strokeText(line, x, y, opts.maxWidth);\n }\n ctx.fillText(line, x, y, opts.maxWidth);\n decorateText(ctx, x, y, line, opts);\n y += Number(font.lineHeight);\n }\n ctx.restore();\n}\n/**\n * Add a path of a rectangle with rounded corners to the current sub-path\n * @param ctx - Context\n * @param rect - Bounding rect\n */ function addRoundedRectPath(ctx, rect) {\n const { x , y , w , h , radius } = rect;\n // top left arc\n ctx.arc(x + radius.topLeft, y + radius.topLeft, radius.topLeft, 1.5 * PI, PI, true);\n // line from top left to bottom left\n ctx.lineTo(x, y + h - radius.bottomLeft);\n // bottom left arc\n ctx.arc(x + radius.bottomLeft, y + h - radius.bottomLeft, radius.bottomLeft, PI, HALF_PI, true);\n // line from bottom left to bottom right\n ctx.lineTo(x + w - radius.bottomRight, y + h);\n // bottom right arc\n ctx.arc(x + w - radius.bottomRight, y + h - radius.bottomRight, radius.bottomRight, HALF_PI, 0, true);\n // line from bottom right to top right\n ctx.lineTo(x + w, y + radius.topRight);\n // top right arc\n ctx.arc(x + w - radius.topRight, y + radius.topRight, radius.topRight, 0, -HALF_PI, true);\n // line from top right to top left\n ctx.lineTo(x + radius.topLeft, y);\n}\n\nconst LINE_HEIGHT = /^(normal|(\\d+(?:\\.\\d+)?)(px|em|%)?)$/;\nconst FONT_STYLE = /^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$/;\n/**\n * @alias Chart.helpers.options\n * @namespace\n */ /**\n * Converts the given line height `value` in pixels for a specific font `size`.\n * @param value - The lineHeight to parse (eg. 1.6, '14px', '75%', '1.6em').\n * @param size - The font size (in pixels) used to resolve relative `value`.\n * @returns The effective line height in pixels (size * 1.2 if value is invalid).\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/line-height\n * @since 2.7.0\n */ function toLineHeight(value, size) {\n const matches = ('' + value).match(LINE_HEIGHT);\n if (!matches || matches[1] === 'normal') {\n return size * 1.2;\n }\n value = +matches[2];\n switch(matches[3]){\n case 'px':\n return value;\n case '%':\n value /= 100;\n break;\n }\n return size * value;\n}\nconst numberOrZero = (v)=>+v || 0;\nfunction _readValueToProps(value, props) {\n const ret = {};\n const objProps = isObject(props);\n const keys = objProps ? Object.keys(props) : props;\n const read = isObject(value) ? objProps ? (prop)=>valueOrDefault(value[prop], value[props[prop]]) : (prop)=>value[prop] : ()=>value;\n for (const prop of keys){\n ret[prop] = numberOrZero(read(prop));\n }\n return ret;\n}\n/**\n * Converts the given value into a TRBL object.\n * @param value - If a number, set the value to all TRBL component,\n * else, if an object, use defined properties and sets undefined ones to 0.\n * x / y are shorthands for same value for left/right and top/bottom.\n * @returns The padding values (top, right, bottom, left)\n * @since 3.0.0\n */ function toTRBL(value) {\n return _readValueToProps(value, {\n top: 'y',\n right: 'x',\n bottom: 'y',\n left: 'x'\n });\n}\n/**\n * Converts the given value into a TRBL corners object (similar with css border-radius).\n * @param value - If a number, set the value to all TRBL corner components,\n * else, if an object, use defined properties and sets undefined ones to 0.\n * @returns The TRBL corner values (topLeft, topRight, bottomLeft, bottomRight)\n * @since 3.0.0\n */ function toTRBLCorners(value) {\n return _readValueToProps(value, [\n 'topLeft',\n 'topRight',\n 'bottomLeft',\n 'bottomRight'\n ]);\n}\n/**\n * Converts the given value into a padding object with pre-computed width/height.\n * @param value - If a number, set the value to all TRBL component,\n * else, if an object, use defined properties and sets undefined ones to 0.\n * x / y are shorthands for same value for left/right and top/bottom.\n * @returns The padding values (top, right, bottom, left, width, height)\n * @since 2.7.0\n */ function toPadding(value) {\n const obj = toTRBL(value);\n obj.width = obj.left + obj.right;\n obj.height = obj.top + obj.bottom;\n return obj;\n}\n/**\n * Parses font options and returns the font object.\n * @param options - A object that contains font options to be parsed.\n * @param fallback - A object that contains fallback font options.\n * @return The font object.\n * @private\n */ function toFont(options, fallback) {\n options = options || {};\n fallback = fallback || defaults.font;\n let size = valueOrDefault(options.size, fallback.size);\n if (typeof size === 'string') {\n size = parseInt(size, 10);\n }\n let style = valueOrDefault(options.style, fallback.style);\n if (style && !('' + style).match(FONT_STYLE)) {\n console.warn('Invalid font style specified: \"' + style + '\"');\n style = undefined;\n }\n const font = {\n family: valueOrDefault(options.family, fallback.family),\n lineHeight: toLineHeight(valueOrDefault(options.lineHeight, fallback.lineHeight), size),\n size,\n style,\n weight: valueOrDefault(options.weight, fallback.weight),\n string: ''\n };\n font.string = toFontString(font);\n return font;\n}\n/**\n * Evaluates the given `inputs` sequentially and returns the first defined value.\n * @param inputs - An array of values, falling back to the last value.\n * @param context - If defined and the current value is a function, the value\n * is called with `context` as first argument and the result becomes the new input.\n * @param index - If defined and the current value is an array, the value\n * at `index` become the new input.\n * @param info - object to return information about resolution in\n * @param info.cacheable - Will be set to `false` if option is not cacheable.\n * @since 2.7.0\n */ function resolve(inputs, context, index, info) {\n let cacheable = true;\n let i, ilen, value;\n for(i = 0, ilen = inputs.length; i < ilen; ++i){\n value = inputs[i];\n if (value === undefined) {\n continue;\n }\n if (context !== undefined && typeof value === 'function') {\n value = value(context);\n cacheable = false;\n }\n if (index !== undefined && isArray(value)) {\n value = value[index % value.length];\n cacheable = false;\n }\n if (value !== undefined) {\n if (info && !cacheable) {\n info.cacheable = false;\n }\n return value;\n }\n }\n}\n/**\n * @param minmax\n * @param grace\n * @param beginAtZero\n * @private\n */ function _addGrace(minmax, grace, beginAtZero) {\n const { min , max } = minmax;\n const change = toDimension(grace, (max - min) / 2);\n const keepZero = (value, add)=>beginAtZero && value === 0 ? 0 : value + add;\n return {\n min: keepZero(min, -Math.abs(change)),\n max: keepZero(max, change)\n };\n}\nfunction createContext(parentContext, context) {\n return Object.assign(Object.create(parentContext), context);\n}\n\n/**\n * Creates a Proxy for resolving raw values for options.\n * @param scopes - The option scopes to look for values, in resolution order\n * @param prefixes - The prefixes for values, in resolution order.\n * @param rootScopes - The root option scopes\n * @param fallback - Parent scopes fallback\n * @param getTarget - callback for getting the target for changed values\n * @returns Proxy\n * @private\n */ function _createResolver(scopes, prefixes = [\n ''\n], rootScopes, fallback, getTarget = ()=>scopes[0]) {\n const finalRootScopes = rootScopes || scopes;\n if (typeof fallback === 'undefined') {\n fallback = _resolve('_fallback', scopes);\n }\n const cache = {\n [Symbol.toStringTag]: 'Object',\n _cacheable: true,\n _scopes: scopes,\n _rootScopes: finalRootScopes,\n _fallback: fallback,\n _getTarget: getTarget,\n override: (scope)=>_createResolver([\n scope,\n ...scopes\n ], prefixes, finalRootScopes, fallback)\n };\n return new Proxy(cache, {\n /**\n * A trap for the delete operator.\n */ deleteProperty (target, prop) {\n delete target[prop]; // remove from cache\n delete target._keys; // remove cached keys\n delete scopes[0][prop]; // remove from top level scope\n return true;\n },\n /**\n * A trap for getting property values.\n */ get (target, prop) {\n return _cached(target, prop, ()=>_resolveWithPrefixes(prop, prefixes, scopes, target));\n },\n /**\n * A trap for Object.getOwnPropertyDescriptor.\n * Also used by Object.hasOwnProperty.\n */ getOwnPropertyDescriptor (target, prop) {\n return Reflect.getOwnPropertyDescriptor(target._scopes[0], prop);\n },\n /**\n * A trap for Object.getPrototypeOf.\n */ getPrototypeOf () {\n return Reflect.getPrototypeOf(scopes[0]);\n },\n /**\n * A trap for the in operator.\n */ has (target, prop) {\n return getKeysFromAllScopes(target).includes(prop);\n },\n /**\n * A trap for Object.getOwnPropertyNames and Object.getOwnPropertySymbols.\n */ ownKeys (target) {\n return getKeysFromAllScopes(target);\n },\n /**\n * A trap for setting property values.\n */ set (target, prop, value) {\n const storage = target._storage || (target._storage = getTarget());\n target[prop] = storage[prop] = value; // set to top level scope + cache\n delete target._keys; // remove cached keys\n return true;\n }\n });\n}\n/**\n * Returns an Proxy for resolving option values with context.\n * @param proxy - The Proxy returned by `_createResolver`\n * @param context - Context object for scriptable/indexable options\n * @param subProxy - The proxy provided for scriptable options\n * @param descriptorDefaults - Defaults for descriptors\n * @private\n */ function _attachContext(proxy, context, subProxy, descriptorDefaults) {\n const cache = {\n _cacheable: false,\n _proxy: proxy,\n _context: context,\n _subProxy: subProxy,\n _stack: new Set(),\n _descriptors: _descriptors(proxy, descriptorDefaults),\n setContext: (ctx)=>_attachContext(proxy, ctx, subProxy, descriptorDefaults),\n override: (scope)=>_attachContext(proxy.override(scope), context, subProxy, descriptorDefaults)\n };\n return new Proxy(cache, {\n /**\n * A trap for the delete operator.\n */ deleteProperty (target, prop) {\n delete target[prop]; // remove from cache\n delete proxy[prop]; // remove from proxy\n return true;\n },\n /**\n * A trap for getting property values.\n */ get (target, prop, receiver) {\n return _cached(target, prop, ()=>_resolveWithContext(target, prop, receiver));\n },\n /**\n * A trap for Object.getOwnPropertyDescriptor.\n * Also used by Object.hasOwnProperty.\n */ getOwnPropertyDescriptor (target, prop) {\n return target._descriptors.allKeys ? Reflect.has(proxy, prop) ? {\n enumerable: true,\n configurable: true\n } : undefined : Reflect.getOwnPropertyDescriptor(proxy, prop);\n },\n /**\n * A trap for Object.getPrototypeOf.\n */ getPrototypeOf () {\n return Reflect.getPrototypeOf(proxy);\n },\n /**\n * A trap for the in operator.\n */ has (target, prop) {\n return Reflect.has(proxy, prop);\n },\n /**\n * A trap for Object.getOwnPropertyNames and Object.getOwnPropertySymbols.\n */ ownKeys () {\n return Reflect.ownKeys(proxy);\n },\n /**\n * A trap for setting property values.\n */ set (target, prop, value) {\n proxy[prop] = value; // set to proxy\n delete target[prop]; // remove from cache\n return true;\n }\n });\n}\n/**\n * @private\n */ function _descriptors(proxy, defaults = {\n scriptable: true,\n indexable: true\n}) {\n const { _scriptable =defaults.scriptable , _indexable =defaults.indexable , _allKeys =defaults.allKeys } = proxy;\n return {\n allKeys: _allKeys,\n scriptable: _scriptable,\n indexable: _indexable,\n isScriptable: isFunction(_scriptable) ? _scriptable : ()=>_scriptable,\n isIndexable: isFunction(_indexable) ? _indexable : ()=>_indexable\n };\n}\nconst readKey = (prefix, name)=>prefix ? prefix + _capitalize(name) : name;\nconst needsSubResolver = (prop, value)=>isObject(value) && prop !== 'adapters' && (Object.getPrototypeOf(value) === null || value.constructor === Object);\nfunction _cached(target, prop, resolve) {\n if (Object.prototype.hasOwnProperty.call(target, prop)) {\n return target[prop];\n }\n const value = resolve();\n // cache the resolved value\n target[prop] = value;\n return value;\n}\nfunction _resolveWithContext(target, prop, receiver) {\n const { _proxy , _context , _subProxy , _descriptors: descriptors } = target;\n let value = _proxy[prop]; // resolve from proxy\n // resolve with context\n if (isFunction(value) && descriptors.isScriptable(prop)) {\n value = _resolveScriptable(prop, value, target, receiver);\n }\n if (isArray(value) && value.length) {\n value = _resolveArray(prop, value, target, descriptors.isIndexable);\n }\n if (needsSubResolver(prop, value)) {\n // if the resolved value is an object, create a sub resolver for it\n value = _attachContext(value, _context, _subProxy && _subProxy[prop], descriptors);\n }\n return value;\n}\nfunction _resolveScriptable(prop, getValue, target, receiver) {\n const { _proxy , _context , _subProxy , _stack } = target;\n if (_stack.has(prop)) {\n throw new Error('Recursion detected: ' + Array.from(_stack).join('->') + '->' + prop);\n }\n _stack.add(prop);\n let value = getValue(_context, _subProxy || receiver);\n _stack.delete(prop);\n if (needsSubResolver(prop, value)) {\n // When scriptable option returns an object, create a resolver on that.\n value = createSubResolver(_proxy._scopes, _proxy, prop, value);\n }\n return value;\n}\nfunction _resolveArray(prop, value, target, isIndexable) {\n const { _proxy , _context , _subProxy , _descriptors: descriptors } = target;\n if (typeof _context.index !== 'undefined' && isIndexable(prop)) {\n return value[_context.index % value.length];\n } else if (isObject(value[0])) {\n // Array of objects, return array or resolvers\n const arr = value;\n const scopes = _proxy._scopes.filter((s)=>s !== arr);\n value = [];\n for (const item of arr){\n const resolver = createSubResolver(scopes, _proxy, prop, item);\n value.push(_attachContext(resolver, _context, _subProxy && _subProxy[prop], descriptors));\n }\n }\n return value;\n}\nfunction resolveFallback(fallback, prop, value) {\n return isFunction(fallback) ? fallback(prop, value) : fallback;\n}\nconst getScope = (key, parent)=>key === true ? parent : typeof key === 'string' ? resolveObjectKey(parent, key) : undefined;\nfunction addScopes(set, parentScopes, key, parentFallback, value) {\n for (const parent of parentScopes){\n const scope = getScope(key, parent);\n if (scope) {\n set.add(scope);\n const fallback = resolveFallback(scope._fallback, key, value);\n if (typeof fallback !== 'undefined' && fallback !== key && fallback !== parentFallback) {\n // When we reach the descriptor that defines a new _fallback, return that.\n // The fallback will resume to that new scope.\n return fallback;\n }\n } else if (scope === false && typeof parentFallback !== 'undefined' && key !== parentFallback) {\n // Fallback to `false` results to `false`, when falling back to different key.\n // For example `interaction` from `hover` or `plugins.tooltip` and `animation` from `animations`\n return null;\n }\n }\n return false;\n}\nfunction createSubResolver(parentScopes, resolver, prop, value) {\n const rootScopes = resolver._rootScopes;\n const fallback = resolveFallback(resolver._fallback, prop, value);\n const allScopes = [\n ...parentScopes,\n ...rootScopes\n ];\n const set = new Set();\n set.add(value);\n let key = addScopesFromKey(set, allScopes, prop, fallback || prop, value);\n if (key === null) {\n return false;\n }\n if (typeof fallback !== 'undefined' && fallback !== prop) {\n key = addScopesFromKey(set, allScopes, fallback, key, value);\n if (key === null) {\n return false;\n }\n }\n return _createResolver(Array.from(set), [\n ''\n ], rootScopes, fallback, ()=>subGetTarget(resolver, prop, value));\n}\nfunction addScopesFromKey(set, allScopes, key, fallback, item) {\n while(key){\n key = addScopes(set, allScopes, key, fallback, item);\n }\n return key;\n}\nfunction subGetTarget(resolver, prop, value) {\n const parent = resolver._getTarget();\n if (!(prop in parent)) {\n parent[prop] = {};\n }\n const target = parent[prop];\n if (isArray(target) && isObject(value)) {\n // For array of objects, the object is used to store updated values\n return value;\n }\n return target || {};\n}\nfunction _resolveWithPrefixes(prop, prefixes, scopes, proxy) {\n let value;\n for (const prefix of prefixes){\n value = _resolve(readKey(prefix, prop), scopes);\n if (typeof value !== 'undefined') {\n return needsSubResolver(prop, value) ? createSubResolver(scopes, proxy, prop, value) : value;\n }\n }\n}\nfunction _resolve(key, scopes) {\n for (const scope of scopes){\n if (!scope) {\n continue;\n }\n const value = scope[key];\n if (typeof value !== 'undefined') {\n return value;\n }\n }\n}\nfunction getKeysFromAllScopes(target) {\n let keys = target._keys;\n if (!keys) {\n keys = target._keys = resolveKeysFromAllScopes(target._scopes);\n }\n return keys;\n}\nfunction resolveKeysFromAllScopes(scopes) {\n const set = new Set();\n for (const scope of scopes){\n for (const key of Object.keys(scope).filter((k)=>!k.startsWith('_'))){\n set.add(key);\n }\n }\n return Array.from(set);\n}\nfunction _parseObjectDataRadialScale(meta, data, start, count) {\n const { iScale } = meta;\n const { key ='r' } = this._parsing;\n const parsed = new Array(count);\n let i, ilen, index, item;\n for(i = 0, ilen = count; i < ilen; ++i){\n index = i + start;\n item = data[index];\n parsed[i] = {\n r: iScale.parse(resolveObjectKey(item, key), index)\n };\n }\n return parsed;\n}\n\nconst EPSILON = Number.EPSILON || 1e-14;\nconst getPoint = (points, i)=>i < points.length && !points[i].skip && points[i];\nconst getValueAxis = (indexAxis)=>indexAxis === 'x' ? 'y' : 'x';\nfunction splineCurve(firstPoint, middlePoint, afterPoint, t) {\n // Props to Rob Spencer at scaled innovation for his post on splining between points\n // http://scaledinnovation.com/analytics/splines/aboutSplines.html\n // This function must also respect \"skipped\" points\n const previous = firstPoint.skip ? middlePoint : firstPoint;\n const current = middlePoint;\n const next = afterPoint.skip ? middlePoint : afterPoint;\n const d01 = distanceBetweenPoints(current, previous);\n const d12 = distanceBetweenPoints(next, current);\n let s01 = d01 / (d01 + d12);\n let s12 = d12 / (d01 + d12);\n // If all points are the same, s01 & s02 will be inf\n s01 = isNaN(s01) ? 0 : s01;\n s12 = isNaN(s12) ? 0 : s12;\n const fa = t * s01; // scaling factor for triangle Ta\n const fb = t * s12;\n return {\n previous: {\n x: current.x - fa * (next.x - previous.x),\n y: current.y - fa * (next.y - previous.y)\n },\n next: {\n x: current.x + fb * (next.x - previous.x),\n y: current.y + fb * (next.y - previous.y)\n }\n };\n}\n/**\n * Adjust tangents to ensure monotonic properties\n */ function monotoneAdjust(points, deltaK, mK) {\n const pointsLen = points.length;\n let alphaK, betaK, tauK, squaredMagnitude, pointCurrent;\n let pointAfter = getPoint(points, 0);\n for(let i = 0; i < pointsLen - 1; ++i){\n pointCurrent = pointAfter;\n pointAfter = getPoint(points, i + 1);\n if (!pointCurrent || !pointAfter) {\n continue;\n }\n if (almostEquals(deltaK[i], 0, EPSILON)) {\n mK[i] = mK[i + 1] = 0;\n continue;\n }\n alphaK = mK[i] / deltaK[i];\n betaK = mK[i + 1] / deltaK[i];\n squaredMagnitude = Math.pow(alphaK, 2) + Math.pow(betaK, 2);\n if (squaredMagnitude <= 9) {\n continue;\n }\n tauK = 3 / Math.sqrt(squaredMagnitude);\n mK[i] = alphaK * tauK * deltaK[i];\n mK[i + 1] = betaK * tauK * deltaK[i];\n }\n}\nfunction monotoneCompute(points, mK, indexAxis = 'x') {\n const valueAxis = getValueAxis(indexAxis);\n const pointsLen = points.length;\n let delta, pointBefore, pointCurrent;\n let pointAfter = getPoint(points, 0);\n for(let i = 0; i < pointsLen; ++i){\n pointBefore = pointCurrent;\n pointCurrent = pointAfter;\n pointAfter = getPoint(points, i + 1);\n if (!pointCurrent) {\n continue;\n }\n const iPixel = pointCurrent[indexAxis];\n const vPixel = pointCurrent[valueAxis];\n if (pointBefore) {\n delta = (iPixel - pointBefore[indexAxis]) / 3;\n pointCurrent[`cp1${indexAxis}`] = iPixel - delta;\n pointCurrent[`cp1${valueAxis}`] = vPixel - delta * mK[i];\n }\n if (pointAfter) {\n delta = (pointAfter[indexAxis] - iPixel) / 3;\n pointCurrent[`cp2${indexAxis}`] = iPixel + delta;\n pointCurrent[`cp2${valueAxis}`] = vPixel + delta * mK[i];\n }\n }\n}\n/**\n * This function calculates Bézier control points in a similar way than |splineCurve|,\n * but preserves monotonicity of the provided data and ensures no local extremums are added\n * between the dataset discrete points due to the interpolation.\n * See : https://en.wikipedia.org/wiki/Monotone_cubic_interpolation\n */ function splineCurveMonotone(points, indexAxis = 'x') {\n const valueAxis = getValueAxis(indexAxis);\n const pointsLen = points.length;\n const deltaK = Array(pointsLen).fill(0);\n const mK = Array(pointsLen);\n // Calculate slopes (deltaK) and initialize tangents (mK)\n let i, pointBefore, pointCurrent;\n let pointAfter = getPoint(points, 0);\n for(i = 0; i < pointsLen; ++i){\n pointBefore = pointCurrent;\n pointCurrent = pointAfter;\n pointAfter = getPoint(points, i + 1);\n if (!pointCurrent) {\n continue;\n }\n if (pointAfter) {\n const slopeDelta = pointAfter[indexAxis] - pointCurrent[indexAxis];\n // In the case of two points that appear at the same x pixel, slopeDeltaX is 0\n deltaK[i] = slopeDelta !== 0 ? (pointAfter[valueAxis] - pointCurrent[valueAxis]) / slopeDelta : 0;\n }\n mK[i] = !pointBefore ? deltaK[i] : !pointAfter ? deltaK[i - 1] : sign(deltaK[i - 1]) !== sign(deltaK[i]) ? 0 : (deltaK[i - 1] + deltaK[i]) / 2;\n }\n monotoneAdjust(points, deltaK, mK);\n monotoneCompute(points, mK, indexAxis);\n}\nfunction capControlPoint(pt, min, max) {\n return Math.max(Math.min(pt, max), min);\n}\nfunction capBezierPoints(points, area) {\n let i, ilen, point, inArea, inAreaPrev;\n let inAreaNext = _isPointInArea(points[0], area);\n for(i = 0, ilen = points.length; i < ilen; ++i){\n inAreaPrev = inArea;\n inArea = inAreaNext;\n inAreaNext = i < ilen - 1 && _isPointInArea(points[i + 1], area);\n if (!inArea) {\n continue;\n }\n point = points[i];\n if (inAreaPrev) {\n point.cp1x = capControlPoint(point.cp1x, area.left, area.right);\n point.cp1y = capControlPoint(point.cp1y, area.top, area.bottom);\n }\n if (inAreaNext) {\n point.cp2x = capControlPoint(point.cp2x, area.left, area.right);\n point.cp2y = capControlPoint(point.cp2y, area.top, area.bottom);\n }\n }\n}\n/**\n * @private\n */ function _updateBezierControlPoints(points, options, area, loop, indexAxis) {\n let i, ilen, point, controlPoints;\n // Only consider points that are drawn in case the spanGaps option is used\n if (options.spanGaps) {\n points = points.filter((pt)=>!pt.skip);\n }\n if (options.cubicInterpolationMode === 'monotone') {\n splineCurveMonotone(points, indexAxis);\n } else {\n let prev = loop ? points[points.length - 1] : points[0];\n for(i = 0, ilen = points.length; i < ilen; ++i){\n point = points[i];\n controlPoints = splineCurve(prev, point, points[Math.min(i + 1, ilen - (loop ? 0 : 1)) % ilen], options.tension);\n point.cp1x = controlPoints.previous.x;\n point.cp1y = controlPoints.previous.y;\n point.cp2x = controlPoints.next.x;\n point.cp2y = controlPoints.next.y;\n prev = point;\n }\n }\n if (options.capBezierPoints) {\n capBezierPoints(points, area);\n }\n}\n\n/**\n * Note: typedefs are auto-exported, so use a made-up `dom` namespace where\n * necessary to avoid duplicates with `export * from './helpers`; see\n * https://github.com/microsoft/TypeScript/issues/46011\n * @typedef { import('../core/core.controller.js').default } dom.Chart\n * @typedef { import('../../types').ChartEvent } ChartEvent\n */ /**\n * @private\n */ function _isDomSupported() {\n return typeof window !== 'undefined' && typeof document !== 'undefined';\n}\n/**\n * @private\n */ function _getParentNode(domNode) {\n let parent = domNode.parentNode;\n if (parent && parent.toString() === '[object ShadowRoot]') {\n parent = parent.host;\n }\n return parent;\n}\n/**\n * convert max-width/max-height values that may be percentages into a number\n * @private\n */ function parseMaxStyle(styleValue, node, parentProperty) {\n let valueInPixels;\n if (typeof styleValue === 'string') {\n valueInPixels = parseInt(styleValue, 10);\n if (styleValue.indexOf('%') !== -1) {\n // percentage * size in dimension\n valueInPixels = valueInPixels / 100 * node.parentNode[parentProperty];\n }\n } else {\n valueInPixels = styleValue;\n }\n return valueInPixels;\n}\nconst getComputedStyle = (element)=>element.ownerDocument.defaultView.getComputedStyle(element, null);\nfunction getStyle(el, property) {\n return getComputedStyle(el).getPropertyValue(property);\n}\nconst positions = [\n 'top',\n 'right',\n 'bottom',\n 'left'\n];\nfunction getPositionedStyle(styles, style, suffix) {\n const result = {};\n suffix = suffix ? '-' + suffix : '';\n for(let i = 0; i < 4; i++){\n const pos = positions[i];\n result[pos] = parseFloat(styles[style + '-' + pos + suffix]) || 0;\n }\n result.width = result.left + result.right;\n result.height = result.top + result.bottom;\n return result;\n}\nconst useOffsetPos = (x, y, target)=>(x > 0 || y > 0) && (!target || !target.shadowRoot);\n/**\n * @param e\n * @param canvas\n * @returns Canvas position\n */ function getCanvasPosition(e, canvas) {\n const touches = e.touches;\n const source = touches && touches.length ? touches[0] : e;\n const { offsetX , offsetY } = source;\n let box = false;\n let x, y;\n if (useOffsetPos(offsetX, offsetY, e.target)) {\n x = offsetX;\n y = offsetY;\n } else {\n const rect = canvas.getBoundingClientRect();\n x = source.clientX - rect.left;\n y = source.clientY - rect.top;\n box = true;\n }\n return {\n x,\n y,\n box\n };\n}\n/**\n * Gets an event's x, y coordinates, relative to the chart area\n * @param event\n * @param chart\n * @returns x and y coordinates of the event\n */ function getRelativePosition(event, chart) {\n if ('native' in event) {\n return event;\n }\n const { canvas , currentDevicePixelRatio } = chart;\n const style = getComputedStyle(canvas);\n const borderBox = style.boxSizing === 'border-box';\n const paddings = getPositionedStyle(style, 'padding');\n const borders = getPositionedStyle(style, 'border', 'width');\n const { x , y , box } = getCanvasPosition(event, canvas);\n const xOffset = paddings.left + (box && borders.left);\n const yOffset = paddings.top + (box && borders.top);\n let { width , height } = chart;\n if (borderBox) {\n width -= paddings.width + borders.width;\n height -= paddings.height + borders.height;\n }\n return {\n x: Math.round((x - xOffset) / width * canvas.width / currentDevicePixelRatio),\n y: Math.round((y - yOffset) / height * canvas.height / currentDevicePixelRatio)\n };\n}\nfunction getContainerSize(canvas, width, height) {\n let maxWidth, maxHeight;\n if (width === undefined || height === undefined) {\n const container = _getParentNode(canvas);\n if (!container) {\n width = canvas.clientWidth;\n height = canvas.clientHeight;\n } else {\n const rect = container.getBoundingClientRect(); // this is the border box of the container\n const containerStyle = getComputedStyle(container);\n const containerBorder = getPositionedStyle(containerStyle, 'border', 'width');\n const containerPadding = getPositionedStyle(containerStyle, 'padding');\n width = rect.width - containerPadding.width - containerBorder.width;\n height = rect.height - containerPadding.height - containerBorder.height;\n maxWidth = parseMaxStyle(containerStyle.maxWidth, container, 'clientWidth');\n maxHeight = parseMaxStyle(containerStyle.maxHeight, container, 'clientHeight');\n }\n }\n return {\n width,\n height,\n maxWidth: maxWidth || INFINITY,\n maxHeight: maxHeight || INFINITY\n };\n}\nconst round1 = (v)=>Math.round(v * 10) / 10;\n// eslint-disable-next-line complexity\nfunction getMaximumSize(canvas, bbWidth, bbHeight, aspectRatio) {\n const style = getComputedStyle(canvas);\n const margins = getPositionedStyle(style, 'margin');\n const maxWidth = parseMaxStyle(style.maxWidth, canvas, 'clientWidth') || INFINITY;\n const maxHeight = parseMaxStyle(style.maxHeight, canvas, 'clientHeight') || INFINITY;\n const containerSize = getContainerSize(canvas, bbWidth, bbHeight);\n let { width , height } = containerSize;\n if (style.boxSizing === 'content-box') {\n const borders = getPositionedStyle(style, 'border', 'width');\n const paddings = getPositionedStyle(style, 'padding');\n width -= paddings.width + borders.width;\n height -= paddings.height + borders.height;\n }\n width = Math.max(0, width - margins.width);\n height = Math.max(0, aspectRatio ? width / aspectRatio : height - margins.height);\n width = round1(Math.min(width, maxWidth, containerSize.maxWidth));\n height = round1(Math.min(height, maxHeight, containerSize.maxHeight));\n if (width && !height) {\n // https://github.com/chartjs/Chart.js/issues/4659\n // If the canvas has width, but no height, default to aspectRatio of 2 (canvas default)\n height = round1(width / 2);\n }\n const maintainHeight = bbWidth !== undefined || bbHeight !== undefined;\n if (maintainHeight && aspectRatio && containerSize.height && height > containerSize.height) {\n height = containerSize.height;\n width = round1(Math.floor(height * aspectRatio));\n }\n return {\n width,\n height\n };\n}\n/**\n * @param chart\n * @param forceRatio\n * @param forceStyle\n * @returns True if the canvas context size or transformation has changed.\n */ function retinaScale(chart, forceRatio, forceStyle) {\n const pixelRatio = forceRatio || 1;\n const deviceHeight = Math.floor(chart.height * pixelRatio);\n const deviceWidth = Math.floor(chart.width * pixelRatio);\n chart.height = Math.floor(chart.height);\n chart.width = Math.floor(chart.width);\n const canvas = chart.canvas;\n // If no style has been set on the canvas, the render size is used as display size,\n // making the chart visually bigger, so let's enforce it to the \"correct\" values.\n // See https://github.com/chartjs/Chart.js/issues/3575\n if (canvas.style && (forceStyle || !canvas.style.height && !canvas.style.width)) {\n canvas.style.height = `${chart.height}px`;\n canvas.style.width = `${chart.width}px`;\n }\n if (chart.currentDevicePixelRatio !== pixelRatio || canvas.height !== deviceHeight || canvas.width !== deviceWidth) {\n chart.currentDevicePixelRatio = pixelRatio;\n canvas.height = deviceHeight;\n canvas.width = deviceWidth;\n chart.ctx.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0);\n return true;\n }\n return false;\n}\n/**\n * Detects support for options object argument in addEventListener.\n * https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#Safely_detecting_option_support\n * @private\n */ const supportsEventListenerOptions = function() {\n let passiveSupported = false;\n try {\n const options = {\n get passive () {\n passiveSupported = true;\n return false;\n }\n };\n if (_isDomSupported()) {\n window.addEventListener('test', null, options);\n window.removeEventListener('test', null, options);\n }\n } catch (e) {\n // continue regardless of error\n }\n return passiveSupported;\n}();\n/**\n * The \"used\" size is the final value of a dimension property after all calculations have\n * been performed. This method uses the computed style of `element` but returns undefined\n * if the computed style is not expressed in pixels. That can happen in some cases where\n * `element` has a size relative to its parent and this last one is not yet displayed,\n * for example because of `display: none` on a parent node.\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/used_value\n * @returns Size in pixels or undefined if unknown.\n */ function readUsedSize(element, property) {\n const value = getStyle(element, property);\n const matches = value && value.match(/^(\\d+)(\\.\\d+)?px$/);\n return matches ? +matches[1] : undefined;\n}\n\n/**\n * @private\n */ function _pointInLine(p1, p2, t, mode) {\n return {\n x: p1.x + t * (p2.x - p1.x),\n y: p1.y + t * (p2.y - p1.y)\n };\n}\n/**\n * @private\n */ function _steppedInterpolation(p1, p2, t, mode) {\n return {\n x: p1.x + t * (p2.x - p1.x),\n y: mode === 'middle' ? t < 0.5 ? p1.y : p2.y : mode === 'after' ? t < 1 ? p1.y : p2.y : t > 0 ? p2.y : p1.y\n };\n}\n/**\n * @private\n */ function _bezierInterpolation(p1, p2, t, mode) {\n const cp1 = {\n x: p1.cp2x,\n y: p1.cp2y\n };\n const cp2 = {\n x: p2.cp1x,\n y: p2.cp1y\n };\n const a = _pointInLine(p1, cp1, t);\n const b = _pointInLine(cp1, cp2, t);\n const c = _pointInLine(cp2, p2, t);\n const d = _pointInLine(a, b, t);\n const e = _pointInLine(b, c, t);\n return _pointInLine(d, e, t);\n}\n\nconst getRightToLeftAdapter = function(rectX, width) {\n return {\n x (x) {\n return rectX + rectX + width - x;\n },\n setWidth (w) {\n width = w;\n },\n textAlign (align) {\n if (align === 'center') {\n return align;\n }\n return align === 'right' ? 'left' : 'right';\n },\n xPlus (x, value) {\n return x - value;\n },\n leftForLtr (x, itemWidth) {\n return x - itemWidth;\n }\n };\n};\nconst getLeftToRightAdapter = function() {\n return {\n x (x) {\n return x;\n },\n setWidth (w) {},\n textAlign (align) {\n return align;\n },\n xPlus (x, value) {\n return x + value;\n },\n leftForLtr (x, _itemWidth) {\n return x;\n }\n };\n};\nfunction getRtlAdapter(rtl, rectX, width) {\n return rtl ? getRightToLeftAdapter(rectX, width) : getLeftToRightAdapter();\n}\nfunction overrideTextDirection(ctx, direction) {\n let style, original;\n if (direction === 'ltr' || direction === 'rtl') {\n style = ctx.canvas.style;\n original = [\n style.getPropertyValue('direction'),\n style.getPropertyPriority('direction')\n ];\n style.setProperty('direction', direction, 'important');\n ctx.prevTextDirection = original;\n }\n}\nfunction restoreTextDirection(ctx, original) {\n if (original !== undefined) {\n delete ctx.prevTextDirection;\n ctx.canvas.style.setProperty('direction', original[0], original[1]);\n }\n}\n\nfunction propertyFn(property) {\n if (property === 'angle') {\n return {\n between: _angleBetween,\n compare: _angleDiff,\n normalize: _normalizeAngle\n };\n }\n return {\n between: _isBetween,\n compare: (a, b)=>a - b,\n normalize: (x)=>x\n };\n}\nfunction normalizeSegment({ start , end , count , loop , style }) {\n return {\n start: start % count,\n end: end % count,\n loop: loop && (end - start + 1) % count === 0,\n style\n };\n}\nfunction getSegment(segment, points, bounds) {\n const { property , start: startBound , end: endBound } = bounds;\n const { between , normalize } = propertyFn(property);\n const count = points.length;\n let { start , end , loop } = segment;\n let i, ilen;\n if (loop) {\n start += count;\n end += count;\n for(i = 0, ilen = count; i < ilen; ++i){\n if (!between(normalize(points[start % count][property]), startBound, endBound)) {\n break;\n }\n start--;\n end--;\n }\n start %= count;\n end %= count;\n }\n if (end < start) {\n end += count;\n }\n return {\n start,\n end,\n loop,\n style: segment.style\n };\n}\n function _boundSegment(segment, points, bounds) {\n if (!bounds) {\n return [\n segment\n ];\n }\n const { property , start: startBound , end: endBound } = bounds;\n const count = points.length;\n const { compare , between , normalize } = propertyFn(property);\n const { start , end , loop , style } = getSegment(segment, points, bounds);\n const result = [];\n let inside = false;\n let subStart = null;\n let value, point, prevValue;\n const startIsBefore = ()=>between(startBound, prevValue, value) && compare(startBound, prevValue) !== 0;\n const endIsBefore = ()=>compare(endBound, value) === 0 || between(endBound, prevValue, value);\n const shouldStart = ()=>inside || startIsBefore();\n const shouldStop = ()=>!inside || endIsBefore();\n for(let i = start, prev = start; i <= end; ++i){\n point = points[i % count];\n if (point.skip) {\n continue;\n }\n value = normalize(point[property]);\n if (value === prevValue) {\n continue;\n }\n inside = between(value, startBound, endBound);\n if (subStart === null && shouldStart()) {\n subStart = compare(value, startBound) === 0 ? i : prev;\n }\n if (subStart !== null && shouldStop()) {\n result.push(normalizeSegment({\n start: subStart,\n end: i,\n loop,\n count,\n style\n }));\n subStart = null;\n }\n prev = i;\n prevValue = value;\n }\n if (subStart !== null) {\n result.push(normalizeSegment({\n start: subStart,\n end,\n loop,\n count,\n style\n }));\n }\n return result;\n}\n function _boundSegments(line, bounds) {\n const result = [];\n const segments = line.segments;\n for(let i = 0; i < segments.length; i++){\n const sub = _boundSegment(segments[i], line.points, bounds);\n if (sub.length) {\n result.push(...sub);\n }\n }\n return result;\n}\n function findStartAndEnd(points, count, loop, spanGaps) {\n let start = 0;\n let end = count - 1;\n if (loop && !spanGaps) {\n while(start < count && !points[start].skip){\n start++;\n }\n }\n while(start < count && points[start].skip){\n start++;\n }\n start %= count;\n if (loop) {\n end += start;\n }\n while(end > start && points[end % count].skip){\n end--;\n }\n end %= count;\n return {\n start,\n end\n };\n}\n function solidSegments(points, start, max, loop) {\n const count = points.length;\n const result = [];\n let last = start;\n let prev = points[start];\n let end;\n for(end = start + 1; end <= max; ++end){\n const cur = points[end % count];\n if (cur.skip || cur.stop) {\n if (!prev.skip) {\n loop = false;\n result.push({\n start: start % count,\n end: (end - 1) % count,\n loop\n });\n start = last = cur.stop ? end : null;\n }\n } else {\n last = end;\n if (prev.skip) {\n start = end;\n }\n }\n prev = cur;\n }\n if (last !== null) {\n result.push({\n start: start % count,\n end: last % count,\n loop\n });\n }\n return result;\n}\n function _computeSegments(line, segmentOptions) {\n const points = line.points;\n const spanGaps = line.options.spanGaps;\n const count = points.length;\n if (!count) {\n return [];\n }\n const loop = !!line._loop;\n const { start , end } = findStartAndEnd(points, count, loop, spanGaps);\n if (spanGaps === true) {\n return splitByStyles(line, [\n {\n start,\n end,\n loop\n }\n ], points, segmentOptions);\n }\n const max = end < start ? end + count : end;\n const completeLoop = !!line._fullLoop && start === 0 && end === count - 1;\n return splitByStyles(line, solidSegments(points, start, max, completeLoop), points, segmentOptions);\n}\n function splitByStyles(line, segments, points, segmentOptions) {\n if (!segmentOptions || !segmentOptions.setContext || !points) {\n return segments;\n }\n return doSplitByStyles(line, segments, points, segmentOptions);\n}\n function doSplitByStyles(line, segments, points, segmentOptions) {\n const chartContext = line._chart.getContext();\n const baseStyle = readStyle(line.options);\n const { _datasetIndex: datasetIndex , options: { spanGaps } } = line;\n const count = points.length;\n const result = [];\n let prevStyle = baseStyle;\n let start = segments[0].start;\n let i = start;\n function addStyle(s, e, l, st) {\n const dir = spanGaps ? -1 : 1;\n if (s === e) {\n return;\n }\n s += count;\n while(points[s % count].skip){\n s -= dir;\n }\n while(points[e % count].skip){\n e += dir;\n }\n if (s % count !== e % count) {\n result.push({\n start: s % count,\n end: e % count,\n loop: l,\n style: st\n });\n prevStyle = st;\n start = e % count;\n }\n }\n for (const segment of segments){\n start = spanGaps ? start : segment.start;\n let prev = points[start % count];\n let style;\n for(i = start + 1; i <= segment.end; i++){\n const pt = points[i % count];\n style = readStyle(segmentOptions.setContext(createContext(chartContext, {\n type: 'segment',\n p0: prev,\n p1: pt,\n p0DataIndex: (i - 1) % count,\n p1DataIndex: i % count,\n datasetIndex\n })));\n if (styleChanged(style, prevStyle)) {\n addStyle(start, i - 1, segment.loop, prevStyle);\n }\n prev = pt;\n prevStyle = style;\n }\n if (start < i - 1) {\n addStyle(start, i - 1, segment.loop, prevStyle);\n }\n }\n return result;\n}\nfunction readStyle(options) {\n return {\n backgroundColor: options.backgroundColor,\n borderCapStyle: options.borderCapStyle,\n borderDash: options.borderDash,\n borderDashOffset: options.borderDashOffset,\n borderJoinStyle: options.borderJoinStyle,\n borderWidth: options.borderWidth,\n borderColor: options.borderColor\n };\n}\nfunction styleChanged(style, prevStyle) {\n if (!prevStyle) {\n return false;\n }\n const cache = [];\n const replacer = function(key, value) {\n if (!isPatternOrGradient(value)) {\n return value;\n }\n if (!cache.includes(value)) {\n cache.push(value);\n }\n return cache.indexOf(value);\n };\n return JSON.stringify(style, replacer) !== JSON.stringify(prevStyle, replacer);\n}\n\nexport { unclipArea as $, _rlookupByKey as A, _lookupByKey as B, _isPointInArea as C, getAngleFromPoint as D, toPadding as E, each as F, getMaximumSize as G, HALF_PI as H, _getParentNode as I, readUsedSize as J, supportsEventListenerOptions as K, throttled as L, _isDomSupported as M, _factorize as N, finiteOrDefault as O, PI as P, callback as Q, _addGrace as R, _limitValue as S, TAU as T, toDegrees as U, _measureText as V, _int16Range as W, _alignPixel as X, clipArea as Y, renderText as Z, _arrayUnique as _, resolve as a, fontString as a$, toFont as a0, _toLeftRightCenter as a1, _alignStartEnd as a2, overrides as a3, merge as a4, _capitalize as a5, descriptors as a6, isFunction as a7, _attachContext as a8, _createResolver as a9, overrideTextDirection as aA, _textX as aB, restoreTextDirection as aC, drawPointLegend as aD, distanceBetweenPoints as aE, noop as aF, _setMinAndMaxByKey as aG, niceNum as aH, almostWhole as aI, almostEquals as aJ, _decimalPlaces as aK, Ticks as aL, log10 as aM, _longestText as aN, _filterBetween as aO, _lookup as aP, isPatternOrGradient as aQ, getHoverColor as aR, clone as aS, _merger as aT, _mergerIf as aU, _deprecated as aV, _splitKey as aW, toFontString as aX, splineCurve as aY, splineCurveMonotone as aZ, getStyle as a_, _descriptors as aa, mergeIf as ab, uid as ac, debounce as ad, retinaScale as ae, clearCanvas as af, setsEqual as ag, _elementsEqual as ah, _isClickEvent as ai, _isBetween as aj, _readValueToProps as ak, _updateBezierControlPoints as al, _computeSegments as am, _boundSegments as an, _steppedInterpolation as ao, _bezierInterpolation as ap, _pointInLine as aq, _steppedLineTo as ar, _bezierCurveTo as as, drawPoint as at, addRoundedRectPath as au, toTRBL as av, toTRBLCorners as aw, _boundSegment as ax, _normalizeAngle as ay, getRtlAdapter as az, isArray as b, toLineHeight as b0, PITAU as b1, INFINITY as b2, RAD_PER_DEG as b3, QUARTER_PI as b4, TWO_THIRDS_PI as b5, _angleDiff as b6, color as c, defaults as d, effects as e, resolveObjectKey as f, isNumberFinite as g, defined as h, isObject as i, createContext as j, isNullOrUndef as k, listenArrayEvents as l, toPercentage as m, toDimension as n, formatNumber as o, _angleBetween as p, _getStartAndCountOfVisiblePoints as q, requestAnimFrame as r, sign as s, toRadians as t, unlistenArrayEvents as u, valueOrDefault as v, _scaleRangesChanged as w, isNumber as x, _parseObjectDataRadialScale as y, getRelativePosition as z };\n//# sourceMappingURL=helpers.segment.js.map\n","/*!\n * Chart.js v4.4.1\n * https://www.chartjs.org\n * (c) 2023 Chart.js Contributors\n * Released under the MIT License\n */\nimport { r as requestAnimFrame, a as resolve, e as effects, c as color, i as isObject, d as defaults, b as isArray, v as valueOrDefault, u as unlistenArrayEvents, l as listenArrayEvents, f as resolveObjectKey, g as isNumberFinite, h as defined, s as sign, j as createContext, k as isNullOrUndef, _ as _arrayUnique, t as toRadians, m as toPercentage, n as toDimension, T as TAU, o as formatNumber, p as _angleBetween, H as HALF_PI, P as PI, q as _getStartAndCountOfVisiblePoints, w as _scaleRangesChanged, x as isNumber, y as _parseObjectDataRadialScale, z as getRelativePosition, A as _rlookupByKey, B as _lookupByKey, C as _isPointInArea, D as getAngleFromPoint, E as toPadding, F as each, G as getMaximumSize, I as _getParentNode, J as readUsedSize, K as supportsEventListenerOptions, L as throttled, M as _isDomSupported, N as _factorize, O as finiteOrDefault, Q as callback, R as _addGrace, S as _limitValue, U as toDegrees, V as _measureText, W as _int16Range, X as _alignPixel, Y as clipArea, Z as renderText, $ as unclipArea, a0 as toFont, a1 as _toLeftRightCenter, a2 as _alignStartEnd, a3 as overrides, a4 as merge, a5 as _capitalize, a6 as descriptors, a7 as isFunction, a8 as _attachContext, a9 as _createResolver, aa as _descriptors, ab as mergeIf, ac as uid, ad as debounce, ae as retinaScale, af as clearCanvas, ag as setsEqual, ah as _elementsEqual, ai as _isClickEvent, aj as _isBetween, ak as _readValueToProps, al as _updateBezierControlPoints, am as _computeSegments, an as _boundSegments, ao as _steppedInterpolation, ap as _bezierInterpolation, aq as _pointInLine, ar as _steppedLineTo, as as _bezierCurveTo, at as drawPoint, au as addRoundedRectPath, av as toTRBL, aw as toTRBLCorners, ax as _boundSegment, ay as _normalizeAngle, az as getRtlAdapter, aA as overrideTextDirection, aB as _textX, aC as restoreTextDirection, aD as drawPointLegend, aE as distanceBetweenPoints, aF as noop, aG as _setMinAndMaxByKey, aH as niceNum, aI as almostWhole, aJ as almostEquals, aK as _decimalPlaces, aL as Ticks, aM as log10, aN as _longestText, aO as _filterBetween, aP as _lookup } from './chunks/helpers.segment.js';\nimport '@kurkle/color';\n\nclass Animator {\n constructor(){\n this._request = null;\n this._charts = new Map();\n this._running = false;\n this._lastDate = undefined;\n }\n _notify(chart, anims, date, type) {\n const callbacks = anims.listeners[type];\n const numSteps = anims.duration;\n callbacks.forEach((fn)=>fn({\n chart,\n initial: anims.initial,\n numSteps,\n currentStep: Math.min(date - anims.start, numSteps)\n }));\n }\n _refresh() {\n if (this._request) {\n return;\n }\n this._running = true;\n this._request = requestAnimFrame.call(window, ()=>{\n this._update();\n this._request = null;\n if (this._running) {\n this._refresh();\n }\n });\n }\n _update(date = Date.now()) {\n let remaining = 0;\n this._charts.forEach((anims, chart)=>{\n if (!anims.running || !anims.items.length) {\n return;\n }\n const items = anims.items;\n let i = items.length - 1;\n let draw = false;\n let item;\n for(; i >= 0; --i){\n item = items[i];\n if (item._active) {\n if (item._total > anims.duration) {\n anims.duration = item._total;\n }\n item.tick(date);\n draw = true;\n } else {\n items[i] = items[items.length - 1];\n items.pop();\n }\n }\n if (draw) {\n chart.draw();\n this._notify(chart, anims, date, 'progress');\n }\n if (!items.length) {\n anims.running = false;\n this._notify(chart, anims, date, 'complete');\n anims.initial = false;\n }\n remaining += items.length;\n });\n this._lastDate = date;\n if (remaining === 0) {\n this._running = false;\n }\n }\n _getAnims(chart) {\n const charts = this._charts;\n let anims = charts.get(chart);\n if (!anims) {\n anims = {\n running: false,\n initial: true,\n items: [],\n listeners: {\n complete: [],\n progress: []\n }\n };\n charts.set(chart, anims);\n }\n return anims;\n }\n listen(chart, event, cb) {\n this._getAnims(chart).listeners[event].push(cb);\n }\n add(chart, items) {\n if (!items || !items.length) {\n return;\n }\n this._getAnims(chart).items.push(...items);\n }\n has(chart) {\n return this._getAnims(chart).items.length > 0;\n }\n start(chart) {\n const anims = this._charts.get(chart);\n if (!anims) {\n return;\n }\n anims.running = true;\n anims.start = Date.now();\n anims.duration = anims.items.reduce((acc, cur)=>Math.max(acc, cur._duration), 0);\n this._refresh();\n }\n running(chart) {\n if (!this._running) {\n return false;\n }\n const anims = this._charts.get(chart);\n if (!anims || !anims.running || !anims.items.length) {\n return false;\n }\n return true;\n }\n stop(chart) {\n const anims = this._charts.get(chart);\n if (!anims || !anims.items.length) {\n return;\n }\n const items = anims.items;\n let i = items.length - 1;\n for(; i >= 0; --i){\n items[i].cancel();\n }\n anims.items = [];\n this._notify(chart, anims, Date.now(), 'complete');\n }\n remove(chart) {\n return this._charts.delete(chart);\n }\n}\nvar animator = /* #__PURE__ */ new Animator();\n\nconst transparent = 'transparent';\nconst interpolators = {\n boolean (from, to, factor) {\n return factor > 0.5 ? to : from;\n },\n color (from, to, factor) {\n const c0 = color(from || transparent);\n const c1 = c0.valid && color(to || transparent);\n return c1 && c1.valid ? c1.mix(c0, factor).hexString() : to;\n },\n number (from, to, factor) {\n return from + (to - from) * factor;\n }\n};\nclass Animation {\n constructor(cfg, target, prop, to){\n const currentValue = target[prop];\n to = resolve([\n cfg.to,\n to,\n currentValue,\n cfg.from\n ]);\n const from = resolve([\n cfg.from,\n currentValue,\n to\n ]);\n this._active = true;\n this._fn = cfg.fn || interpolators[cfg.type || typeof from];\n this._easing = effects[cfg.easing] || effects.linear;\n this._start = Math.floor(Date.now() + (cfg.delay || 0));\n this._duration = this._total = Math.floor(cfg.duration);\n this._loop = !!cfg.loop;\n this._target = target;\n this._prop = prop;\n this._from = from;\n this._to = to;\n this._promises = undefined;\n }\n active() {\n return this._active;\n }\n update(cfg, to, date) {\n if (this._active) {\n this._notify(false);\n const currentValue = this._target[this._prop];\n const elapsed = date - this._start;\n const remain = this._duration - elapsed;\n this._start = date;\n this._duration = Math.floor(Math.max(remain, cfg.duration));\n this._total += elapsed;\n this._loop = !!cfg.loop;\n this._to = resolve([\n cfg.to,\n to,\n currentValue,\n cfg.from\n ]);\n this._from = resolve([\n cfg.from,\n currentValue,\n to\n ]);\n }\n }\n cancel() {\n if (this._active) {\n this.tick(Date.now());\n this._active = false;\n this._notify(false);\n }\n }\n tick(date) {\n const elapsed = date - this._start;\n const duration = this._duration;\n const prop = this._prop;\n const from = this._from;\n const loop = this._loop;\n const to = this._to;\n let factor;\n this._active = from !== to && (loop || elapsed < duration);\n if (!this._active) {\n this._target[prop] = to;\n this._notify(true);\n return;\n }\n if (elapsed < 0) {\n this._target[prop] = from;\n return;\n }\n factor = elapsed / duration % 2;\n factor = loop && factor > 1 ? 2 - factor : factor;\n factor = this._easing(Math.min(1, Math.max(0, factor)));\n this._target[prop] = this._fn(from, to, factor);\n }\n wait() {\n const promises = this._promises || (this._promises = []);\n return new Promise((res, rej)=>{\n promises.push({\n res,\n rej\n });\n });\n }\n _notify(resolved) {\n const method = resolved ? 'res' : 'rej';\n const promises = this._promises || [];\n for(let i = 0; i < promises.length; i++){\n promises[i][method]();\n }\n }\n}\n\nclass Animations {\n constructor(chart, config){\n this._chart = chart;\n this._properties = new Map();\n this.configure(config);\n }\n configure(config) {\n if (!isObject(config)) {\n return;\n }\n const animationOptions = Object.keys(defaults.animation);\n const animatedProps = this._properties;\n Object.getOwnPropertyNames(config).forEach((key)=>{\n const cfg = config[key];\n if (!isObject(cfg)) {\n return;\n }\n const resolved = {};\n for (const option of animationOptions){\n resolved[option] = cfg[option];\n }\n (isArray(cfg.properties) && cfg.properties || [\n key\n ]).forEach((prop)=>{\n if (prop === key || !animatedProps.has(prop)) {\n animatedProps.set(prop, resolved);\n }\n });\n });\n }\n _animateOptions(target, values) {\n const newOptions = values.options;\n const options = resolveTargetOptions(target, newOptions);\n if (!options) {\n return [];\n }\n const animations = this._createAnimations(options, newOptions);\n if (newOptions.$shared) {\n awaitAll(target.options.$animations, newOptions).then(()=>{\n target.options = newOptions;\n }, ()=>{\n });\n }\n return animations;\n }\n _createAnimations(target, values) {\n const animatedProps = this._properties;\n const animations = [];\n const running = target.$animations || (target.$animations = {});\n const props = Object.keys(values);\n const date = Date.now();\n let i;\n for(i = props.length - 1; i >= 0; --i){\n const prop = props[i];\n if (prop.charAt(0) === '$') {\n continue;\n }\n if (prop === 'options') {\n animations.push(...this._animateOptions(target, values));\n continue;\n }\n const value = values[prop];\n let animation = running[prop];\n const cfg = animatedProps.get(prop);\n if (animation) {\n if (cfg && animation.active()) {\n animation.update(cfg, value, date);\n continue;\n } else {\n animation.cancel();\n }\n }\n if (!cfg || !cfg.duration) {\n target[prop] = value;\n continue;\n }\n running[prop] = animation = new Animation(cfg, target, prop, value);\n animations.push(animation);\n }\n return animations;\n }\n update(target, values) {\n if (this._properties.size === 0) {\n Object.assign(target, values);\n return;\n }\n const animations = this._createAnimations(target, values);\n if (animations.length) {\n animator.add(this._chart, animations);\n return true;\n }\n }\n}\nfunction awaitAll(animations, properties) {\n const running = [];\n const keys = Object.keys(properties);\n for(let i = 0; i < keys.length; i++){\n const anim = animations[keys[i]];\n if (anim && anim.active()) {\n running.push(anim.wait());\n }\n }\n return Promise.all(running);\n}\nfunction resolveTargetOptions(target, newOptions) {\n if (!newOptions) {\n return;\n }\n let options = target.options;\n if (!options) {\n target.options = newOptions;\n return;\n }\n if (options.$shared) {\n target.options = options = Object.assign({}, options, {\n $shared: false,\n $animations: {}\n });\n }\n return options;\n}\n\nfunction scaleClip(scale, allowedOverflow) {\n const opts = scale && scale.options || {};\n const reverse = opts.reverse;\n const min = opts.min === undefined ? allowedOverflow : 0;\n const max = opts.max === undefined ? allowedOverflow : 0;\n return {\n start: reverse ? max : min,\n end: reverse ? min : max\n };\n}\nfunction defaultClip(xScale, yScale, allowedOverflow) {\n if (allowedOverflow === false) {\n return false;\n }\n const x = scaleClip(xScale, allowedOverflow);\n const y = scaleClip(yScale, allowedOverflow);\n return {\n top: y.end,\n right: x.end,\n bottom: y.start,\n left: x.start\n };\n}\nfunction toClip(value) {\n let t, r, b, l;\n if (isObject(value)) {\n t = value.top;\n r = value.right;\n b = value.bottom;\n l = value.left;\n } else {\n t = r = b = l = value;\n }\n return {\n top: t,\n right: r,\n bottom: b,\n left: l,\n disabled: value === false\n };\n}\nfunction getSortedDatasetIndices(chart, filterVisible) {\n const keys = [];\n const metasets = chart._getSortedDatasetMetas(filterVisible);\n let i, ilen;\n for(i = 0, ilen = metasets.length; i < ilen; ++i){\n keys.push(metasets[i].index);\n }\n return keys;\n}\nfunction applyStack(stack, value, dsIndex, options = {}) {\n const keys = stack.keys;\n const singleMode = options.mode === 'single';\n let i, ilen, datasetIndex, otherValue;\n if (value === null) {\n return;\n }\n for(i = 0, ilen = keys.length; i < ilen; ++i){\n datasetIndex = +keys[i];\n if (datasetIndex === dsIndex) {\n if (options.all) {\n continue;\n }\n break;\n }\n otherValue = stack.values[datasetIndex];\n if (isNumberFinite(otherValue) && (singleMode || value === 0 || sign(value) === sign(otherValue))) {\n value += otherValue;\n }\n }\n return value;\n}\nfunction convertObjectDataToArray(data) {\n const keys = Object.keys(data);\n const adata = new Array(keys.length);\n let i, ilen, key;\n for(i = 0, ilen = keys.length; i < ilen; ++i){\n key = keys[i];\n adata[i] = {\n x: key,\n y: data[key]\n };\n }\n return adata;\n}\nfunction isStacked(scale, meta) {\n const stacked = scale && scale.options.stacked;\n return stacked || stacked === undefined && meta.stack !== undefined;\n}\nfunction getStackKey(indexScale, valueScale, meta) {\n return `${indexScale.id}.${valueScale.id}.${meta.stack || meta.type}`;\n}\nfunction getUserBounds(scale) {\n const { min , max , minDefined , maxDefined } = scale.getUserBounds();\n return {\n min: minDefined ? min : Number.NEGATIVE_INFINITY,\n max: maxDefined ? max : Number.POSITIVE_INFINITY\n };\n}\nfunction getOrCreateStack(stacks, stackKey, indexValue) {\n const subStack = stacks[stackKey] || (stacks[stackKey] = {});\n return subStack[indexValue] || (subStack[indexValue] = {});\n}\nfunction getLastIndexInStack(stack, vScale, positive, type) {\n for (const meta of vScale.getMatchingVisibleMetas(type).reverse()){\n const value = stack[meta.index];\n if (positive && value > 0 || !positive && value < 0) {\n return meta.index;\n }\n }\n return null;\n}\nfunction updateStacks(controller, parsed) {\n const { chart , _cachedMeta: meta } = controller;\n const stacks = chart._stacks || (chart._stacks = {});\n const { iScale , vScale , index: datasetIndex } = meta;\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const key = getStackKey(iScale, vScale, meta);\n const ilen = parsed.length;\n let stack;\n for(let i = 0; i < ilen; ++i){\n const item = parsed[i];\n const { [iAxis]: index , [vAxis]: value } = item;\n const itemStacks = item._stacks || (item._stacks = {});\n stack = itemStacks[vAxis] = getOrCreateStack(stacks, key, index);\n stack[datasetIndex] = value;\n stack._top = getLastIndexInStack(stack, vScale, true, meta.type);\n stack._bottom = getLastIndexInStack(stack, vScale, false, meta.type);\n const visualValues = stack._visualValues || (stack._visualValues = {});\n visualValues[datasetIndex] = value;\n }\n}\nfunction getFirstScaleId(chart, axis) {\n const scales = chart.scales;\n return Object.keys(scales).filter((key)=>scales[key].axis === axis).shift();\n}\nfunction createDatasetContext(parent, index) {\n return createContext(parent, {\n active: false,\n dataset: undefined,\n datasetIndex: index,\n index,\n mode: 'default',\n type: 'dataset'\n });\n}\nfunction createDataContext(parent, index, element) {\n return createContext(parent, {\n active: false,\n dataIndex: index,\n parsed: undefined,\n raw: undefined,\n element,\n index,\n mode: 'default',\n type: 'data'\n });\n}\nfunction clearStacks(meta, items) {\n const datasetIndex = meta.controller.index;\n const axis = meta.vScale && meta.vScale.axis;\n if (!axis) {\n return;\n }\n items = items || meta._parsed;\n for (const parsed of items){\n const stacks = parsed._stacks;\n if (!stacks || stacks[axis] === undefined || stacks[axis][datasetIndex] === undefined) {\n return;\n }\n delete stacks[axis][datasetIndex];\n if (stacks[axis]._visualValues !== undefined && stacks[axis]._visualValues[datasetIndex] !== undefined) {\n delete stacks[axis]._visualValues[datasetIndex];\n }\n }\n}\nconst isDirectUpdateMode = (mode)=>mode === 'reset' || mode === 'none';\nconst cloneIfNotShared = (cached, shared)=>shared ? cached : Object.assign({}, cached);\nconst createStack = (canStack, meta, chart)=>canStack && !meta.hidden && meta._stacked && {\n keys: getSortedDatasetIndices(chart, true),\n values: null\n };\nclass DatasetController {\n static defaults = {};\n static datasetElementType = null;\n static dataElementType = null;\n constructor(chart, datasetIndex){\n this.chart = chart;\n this._ctx = chart.ctx;\n this.index = datasetIndex;\n this._cachedDataOpts = {};\n this._cachedMeta = this.getMeta();\n this._type = this._cachedMeta.type;\n this.options = undefined;\n this._parsing = false;\n this._data = undefined;\n this._objectData = undefined;\n this._sharedOptions = undefined;\n this._drawStart = undefined;\n this._drawCount = undefined;\n this.enableOptionSharing = false;\n this.supportsDecimation = false;\n this.$context = undefined;\n this._syncList = [];\n this.datasetElementType = new.target.datasetElementType;\n this.dataElementType = new.target.dataElementType;\n this.initialize();\n }\n initialize() {\n const meta = this._cachedMeta;\n this.configure();\n this.linkScales();\n meta._stacked = isStacked(meta.vScale, meta);\n this.addElements();\n if (this.options.fill && !this.chart.isPluginEnabled('filler')) {\n console.warn(\"Tried to use the 'fill' option without the 'Filler' plugin enabled. Please import and register the 'Filler' plugin and make sure it is not disabled in the options\");\n }\n }\n updateIndex(datasetIndex) {\n if (this.index !== datasetIndex) {\n clearStacks(this._cachedMeta);\n }\n this.index = datasetIndex;\n }\n linkScales() {\n const chart = this.chart;\n const meta = this._cachedMeta;\n const dataset = this.getDataset();\n const chooseId = (axis, x, y, r)=>axis === 'x' ? x : axis === 'r' ? r : y;\n const xid = meta.xAxisID = valueOrDefault(dataset.xAxisID, getFirstScaleId(chart, 'x'));\n const yid = meta.yAxisID = valueOrDefault(dataset.yAxisID, getFirstScaleId(chart, 'y'));\n const rid = meta.rAxisID = valueOrDefault(dataset.rAxisID, getFirstScaleId(chart, 'r'));\n const indexAxis = meta.indexAxis;\n const iid = meta.iAxisID = chooseId(indexAxis, xid, yid, rid);\n const vid = meta.vAxisID = chooseId(indexAxis, yid, xid, rid);\n meta.xScale = this.getScaleForId(xid);\n meta.yScale = this.getScaleForId(yid);\n meta.rScale = this.getScaleForId(rid);\n meta.iScale = this.getScaleForId(iid);\n meta.vScale = this.getScaleForId(vid);\n }\n getDataset() {\n return this.chart.data.datasets[this.index];\n }\n getMeta() {\n return this.chart.getDatasetMeta(this.index);\n }\n getScaleForId(scaleID) {\n return this.chart.scales[scaleID];\n }\n _getOtherScale(scale) {\n const meta = this._cachedMeta;\n return scale === meta.iScale ? meta.vScale : meta.iScale;\n }\n reset() {\n this._update('reset');\n }\n _destroy() {\n const meta = this._cachedMeta;\n if (this._data) {\n unlistenArrayEvents(this._data, this);\n }\n if (meta._stacked) {\n clearStacks(meta);\n }\n }\n _dataCheck() {\n const dataset = this.getDataset();\n const data = dataset.data || (dataset.data = []);\n const _data = this._data;\n if (isObject(data)) {\n this._data = convertObjectDataToArray(data);\n } else if (_data !== data) {\n if (_data) {\n unlistenArrayEvents(_data, this);\n const meta = this._cachedMeta;\n clearStacks(meta);\n meta._parsed = [];\n }\n if (data && Object.isExtensible(data)) {\n listenArrayEvents(data, this);\n }\n this._syncList = [];\n this._data = data;\n }\n }\n addElements() {\n const meta = this._cachedMeta;\n this._dataCheck();\n if (this.datasetElementType) {\n meta.dataset = new this.datasetElementType();\n }\n }\n buildOrUpdateElements(resetNewElements) {\n const meta = this._cachedMeta;\n const dataset = this.getDataset();\n let stackChanged = false;\n this._dataCheck();\n const oldStacked = meta._stacked;\n meta._stacked = isStacked(meta.vScale, meta);\n if (meta.stack !== dataset.stack) {\n stackChanged = true;\n clearStacks(meta);\n meta.stack = dataset.stack;\n }\n this._resyncElements(resetNewElements);\n if (stackChanged || oldStacked !== meta._stacked) {\n updateStacks(this, meta._parsed);\n }\n }\n configure() {\n const config = this.chart.config;\n const scopeKeys = config.datasetScopeKeys(this._type);\n const scopes = config.getOptionScopes(this.getDataset(), scopeKeys, true);\n this.options = config.createResolver(scopes, this.getContext());\n this._parsing = this.options.parsing;\n this._cachedDataOpts = {};\n }\n parse(start, count) {\n const { _cachedMeta: meta , _data: data } = this;\n const { iScale , _stacked } = meta;\n const iAxis = iScale.axis;\n let sorted = start === 0 && count === data.length ? true : meta._sorted;\n let prev = start > 0 && meta._parsed[start - 1];\n let i, cur, parsed;\n if (this._parsing === false) {\n meta._parsed = data;\n meta._sorted = true;\n parsed = data;\n } else {\n if (isArray(data[start])) {\n parsed = this.parseArrayData(meta, data, start, count);\n } else if (isObject(data[start])) {\n parsed = this.parseObjectData(meta, data, start, count);\n } else {\n parsed = this.parsePrimitiveData(meta, data, start, count);\n }\n const isNotInOrderComparedToPrev = ()=>cur[iAxis] === null || prev && cur[iAxis] < prev[iAxis];\n for(i = 0; i < count; ++i){\n meta._parsed[i + start] = cur = parsed[i];\n if (sorted) {\n if (isNotInOrderComparedToPrev()) {\n sorted = false;\n }\n prev = cur;\n }\n }\n meta._sorted = sorted;\n }\n if (_stacked) {\n updateStacks(this, parsed);\n }\n }\n parsePrimitiveData(meta, data, start, count) {\n const { iScale , vScale } = meta;\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const labels = iScale.getLabels();\n const singleScale = iScale === vScale;\n const parsed = new Array(count);\n let i, ilen, index;\n for(i = 0, ilen = count; i < ilen; ++i){\n index = i + start;\n parsed[i] = {\n [iAxis]: singleScale || iScale.parse(labels[index], index),\n [vAxis]: vScale.parse(data[index], index)\n };\n }\n return parsed;\n }\n parseArrayData(meta, data, start, count) {\n const { xScale , yScale } = meta;\n const parsed = new Array(count);\n let i, ilen, index, item;\n for(i = 0, ilen = count; i < ilen; ++i){\n index = i + start;\n item = data[index];\n parsed[i] = {\n x: xScale.parse(item[0], index),\n y: yScale.parse(item[1], index)\n };\n }\n return parsed;\n }\n parseObjectData(meta, data, start, count) {\n const { xScale , yScale } = meta;\n const { xAxisKey ='x' , yAxisKey ='y' } = this._parsing;\n const parsed = new Array(count);\n let i, ilen, index, item;\n for(i = 0, ilen = count; i < ilen; ++i){\n index = i + start;\n item = data[index];\n parsed[i] = {\n x: xScale.parse(resolveObjectKey(item, xAxisKey), index),\n y: yScale.parse(resolveObjectKey(item, yAxisKey), index)\n };\n }\n return parsed;\n }\n getParsed(index) {\n return this._cachedMeta._parsed[index];\n }\n getDataElement(index) {\n return this._cachedMeta.data[index];\n }\n applyStack(scale, parsed, mode) {\n const chart = this.chart;\n const meta = this._cachedMeta;\n const value = parsed[scale.axis];\n const stack = {\n keys: getSortedDatasetIndices(chart, true),\n values: parsed._stacks[scale.axis]._visualValues\n };\n return applyStack(stack, value, meta.index, {\n mode\n });\n }\n updateRangeFromParsed(range, scale, parsed, stack) {\n const parsedValue = parsed[scale.axis];\n let value = parsedValue === null ? NaN : parsedValue;\n const values = stack && parsed._stacks[scale.axis];\n if (stack && values) {\n stack.values = values;\n value = applyStack(stack, parsedValue, this._cachedMeta.index);\n }\n range.min = Math.min(range.min, value);\n range.max = Math.max(range.max, value);\n }\n getMinMax(scale, canStack) {\n const meta = this._cachedMeta;\n const _parsed = meta._parsed;\n const sorted = meta._sorted && scale === meta.iScale;\n const ilen = _parsed.length;\n const otherScale = this._getOtherScale(scale);\n const stack = createStack(canStack, meta, this.chart);\n const range = {\n min: Number.POSITIVE_INFINITY,\n max: Number.NEGATIVE_INFINITY\n };\n const { min: otherMin , max: otherMax } = getUserBounds(otherScale);\n let i, parsed;\n function _skip() {\n parsed = _parsed[i];\n const otherValue = parsed[otherScale.axis];\n return !isNumberFinite(parsed[scale.axis]) || otherMin > otherValue || otherMax < otherValue;\n }\n for(i = 0; i < ilen; ++i){\n if (_skip()) {\n continue;\n }\n this.updateRangeFromParsed(range, scale, parsed, stack);\n if (sorted) {\n break;\n }\n }\n if (sorted) {\n for(i = ilen - 1; i >= 0; --i){\n if (_skip()) {\n continue;\n }\n this.updateRangeFromParsed(range, scale, parsed, stack);\n break;\n }\n }\n return range;\n }\n getAllParsedValues(scale) {\n const parsed = this._cachedMeta._parsed;\n const values = [];\n let i, ilen, value;\n for(i = 0, ilen = parsed.length; i < ilen; ++i){\n value = parsed[i][scale.axis];\n if (isNumberFinite(value)) {\n values.push(value);\n }\n }\n return values;\n }\n getMaxOverflow() {\n return false;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const iScale = meta.iScale;\n const vScale = meta.vScale;\n const parsed = this.getParsed(index);\n return {\n label: iScale ? '' + iScale.getLabelForValue(parsed[iScale.axis]) : '',\n value: vScale ? '' + vScale.getLabelForValue(parsed[vScale.axis]) : ''\n };\n }\n _update(mode) {\n const meta = this._cachedMeta;\n this.update(mode || 'default');\n meta._clip = toClip(valueOrDefault(this.options.clip, defaultClip(meta.xScale, meta.yScale, this.getMaxOverflow())));\n }\n update(mode) {}\n draw() {\n const ctx = this._ctx;\n const chart = this.chart;\n const meta = this._cachedMeta;\n const elements = meta.data || [];\n const area = chart.chartArea;\n const active = [];\n const start = this._drawStart || 0;\n const count = this._drawCount || elements.length - start;\n const drawActiveElementsOnTop = this.options.drawActiveElementsOnTop;\n let i;\n if (meta.dataset) {\n meta.dataset.draw(ctx, area, start, count);\n }\n for(i = start; i < start + count; ++i){\n const element = elements[i];\n if (element.hidden) {\n continue;\n }\n if (element.active && drawActiveElementsOnTop) {\n active.push(element);\n } else {\n element.draw(ctx, area);\n }\n }\n for(i = 0; i < active.length; ++i){\n active[i].draw(ctx, area);\n }\n }\n getStyle(index, active) {\n const mode = active ? 'active' : 'default';\n return index === undefined && this._cachedMeta.dataset ? this.resolveDatasetElementOptions(mode) : this.resolveDataElementOptions(index || 0, mode);\n }\n getContext(index, active, mode) {\n const dataset = this.getDataset();\n let context;\n if (index >= 0 && index < this._cachedMeta.data.length) {\n const element = this._cachedMeta.data[index];\n context = element.$context || (element.$context = createDataContext(this.getContext(), index, element));\n context.parsed = this.getParsed(index);\n context.raw = dataset.data[index];\n context.index = context.dataIndex = index;\n } else {\n context = this.$context || (this.$context = createDatasetContext(this.chart.getContext(), this.index));\n context.dataset = dataset;\n context.index = context.datasetIndex = this.index;\n }\n context.active = !!active;\n context.mode = mode;\n return context;\n }\n resolveDatasetElementOptions(mode) {\n return this._resolveElementOptions(this.datasetElementType.id, mode);\n }\n resolveDataElementOptions(index, mode) {\n return this._resolveElementOptions(this.dataElementType.id, mode, index);\n }\n _resolveElementOptions(elementType, mode = 'default', index) {\n const active = mode === 'active';\n const cache = this._cachedDataOpts;\n const cacheKey = elementType + '-' + mode;\n const cached = cache[cacheKey];\n const sharing = this.enableOptionSharing && defined(index);\n if (cached) {\n return cloneIfNotShared(cached, sharing);\n }\n const config = this.chart.config;\n const scopeKeys = config.datasetElementScopeKeys(this._type, elementType);\n const prefixes = active ? [\n `${elementType}Hover`,\n 'hover',\n elementType,\n ''\n ] : [\n elementType,\n ''\n ];\n const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n const names = Object.keys(defaults.elements[elementType]);\n const context = ()=>this.getContext(index, active, mode);\n const values = config.resolveNamedOptions(scopes, names, context, prefixes);\n if (values.$shared) {\n values.$shared = sharing;\n cache[cacheKey] = Object.freeze(cloneIfNotShared(values, sharing));\n }\n return values;\n }\n _resolveAnimations(index, transition, active) {\n const chart = this.chart;\n const cache = this._cachedDataOpts;\n const cacheKey = `animation-${transition}`;\n const cached = cache[cacheKey];\n if (cached) {\n return cached;\n }\n let options;\n if (chart.options.animation !== false) {\n const config = this.chart.config;\n const scopeKeys = config.datasetAnimationScopeKeys(this._type, transition);\n const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n options = config.createResolver(scopes, this.getContext(index, active, transition));\n }\n const animations = new Animations(chart, options && options.animations);\n if (options && options._cacheable) {\n cache[cacheKey] = Object.freeze(animations);\n }\n return animations;\n }\n getSharedOptions(options) {\n if (!options.$shared) {\n return;\n }\n return this._sharedOptions || (this._sharedOptions = Object.assign({}, options));\n }\n includeOptions(mode, sharedOptions) {\n return !sharedOptions || isDirectUpdateMode(mode) || this.chart._animationsDisabled;\n }\n _getSharedOptions(start, mode) {\n const firstOpts = this.resolveDataElementOptions(start, mode);\n const previouslySharedOptions = this._sharedOptions;\n const sharedOptions = this.getSharedOptions(firstOpts);\n const includeOptions = this.includeOptions(mode, sharedOptions) || sharedOptions !== previouslySharedOptions;\n this.updateSharedOptions(sharedOptions, mode, firstOpts);\n return {\n sharedOptions,\n includeOptions\n };\n }\n updateElement(element, index, properties, mode) {\n if (isDirectUpdateMode(mode)) {\n Object.assign(element, properties);\n } else {\n this._resolveAnimations(index, mode).update(element, properties);\n }\n }\n updateSharedOptions(sharedOptions, mode, newOptions) {\n if (sharedOptions && !isDirectUpdateMode(mode)) {\n this._resolveAnimations(undefined, mode).update(sharedOptions, newOptions);\n }\n }\n _setStyle(element, index, mode, active) {\n element.active = active;\n const options = this.getStyle(index, active);\n this._resolveAnimations(index, mode, active).update(element, {\n options: !active && this.getSharedOptions(options) || options\n });\n }\n removeHoverStyle(element, datasetIndex, index) {\n this._setStyle(element, index, 'active', false);\n }\n setHoverStyle(element, datasetIndex, index) {\n this._setStyle(element, index, 'active', true);\n }\n _removeDatasetHoverStyle() {\n const element = this._cachedMeta.dataset;\n if (element) {\n this._setStyle(element, undefined, 'active', false);\n }\n }\n _setDatasetHoverStyle() {\n const element = this._cachedMeta.dataset;\n if (element) {\n this._setStyle(element, undefined, 'active', true);\n }\n }\n _resyncElements(resetNewElements) {\n const data = this._data;\n const elements = this._cachedMeta.data;\n for (const [method, arg1, arg2] of this._syncList){\n this[method](arg1, arg2);\n }\n this._syncList = [];\n const numMeta = elements.length;\n const numData = data.length;\n const count = Math.min(numData, numMeta);\n if (count) {\n this.parse(0, count);\n }\n if (numData > numMeta) {\n this._insertElements(numMeta, numData - numMeta, resetNewElements);\n } else if (numData < numMeta) {\n this._removeElements(numData, numMeta - numData);\n }\n }\n _insertElements(start, count, resetNewElements = true) {\n const meta = this._cachedMeta;\n const data = meta.data;\n const end = start + count;\n let i;\n const move = (arr)=>{\n arr.length += count;\n for(i = arr.length - 1; i >= end; i--){\n arr[i] = arr[i - count];\n }\n };\n move(data);\n for(i = start; i < end; ++i){\n data[i] = new this.dataElementType();\n }\n if (this._parsing) {\n move(meta._parsed);\n }\n this.parse(start, count);\n if (resetNewElements) {\n this.updateElements(data, start, count, 'reset');\n }\n }\n updateElements(element, start, count, mode) {}\n _removeElements(start, count) {\n const meta = this._cachedMeta;\n if (this._parsing) {\n const removed = meta._parsed.splice(start, count);\n if (meta._stacked) {\n clearStacks(meta, removed);\n }\n }\n meta.data.splice(start, count);\n }\n _sync(args) {\n if (this._parsing) {\n this._syncList.push(args);\n } else {\n const [method, arg1, arg2] = args;\n this[method](arg1, arg2);\n }\n this.chart._dataChanges.push([\n this.index,\n ...args\n ]);\n }\n _onDataPush() {\n const count = arguments.length;\n this._sync([\n '_insertElements',\n this.getDataset().data.length - count,\n count\n ]);\n }\n _onDataPop() {\n this._sync([\n '_removeElements',\n this._cachedMeta.data.length - 1,\n 1\n ]);\n }\n _onDataShift() {\n this._sync([\n '_removeElements',\n 0,\n 1\n ]);\n }\n _onDataSplice(start, count) {\n if (count) {\n this._sync([\n '_removeElements',\n start,\n count\n ]);\n }\n const newCount = arguments.length - 2;\n if (newCount) {\n this._sync([\n '_insertElements',\n start,\n newCount\n ]);\n }\n }\n _onDataUnshift() {\n this._sync([\n '_insertElements',\n 0,\n arguments.length\n ]);\n }\n}\n\nfunction getAllScaleValues(scale, type) {\n if (!scale._cache.$bar) {\n const visibleMetas = scale.getMatchingVisibleMetas(type);\n let values = [];\n for(let i = 0, ilen = visibleMetas.length; i < ilen; i++){\n values = values.concat(visibleMetas[i].controller.getAllParsedValues(scale));\n }\n scale._cache.$bar = _arrayUnique(values.sort((a, b)=>a - b));\n }\n return scale._cache.$bar;\n}\n function computeMinSampleSize(meta) {\n const scale = meta.iScale;\n const values = getAllScaleValues(scale, meta.type);\n let min = scale._length;\n let i, ilen, curr, prev;\n const updateMinAndPrev = ()=>{\n if (curr === 32767 || curr === -32768) {\n return;\n }\n if (defined(prev)) {\n min = Math.min(min, Math.abs(curr - prev) || min);\n }\n prev = curr;\n };\n for(i = 0, ilen = values.length; i < ilen; ++i){\n curr = scale.getPixelForValue(values[i]);\n updateMinAndPrev();\n }\n prev = undefined;\n for(i = 0, ilen = scale.ticks.length; i < ilen; ++i){\n curr = scale.getPixelForTick(i);\n updateMinAndPrev();\n }\n return min;\n}\n function computeFitCategoryTraits(index, ruler, options, stackCount) {\n const thickness = options.barThickness;\n let size, ratio;\n if (isNullOrUndef(thickness)) {\n size = ruler.min * options.categoryPercentage;\n ratio = options.barPercentage;\n } else {\n size = thickness * stackCount;\n ratio = 1;\n }\n return {\n chunk: size / stackCount,\n ratio,\n start: ruler.pixels[index] - size / 2\n };\n}\n function computeFlexCategoryTraits(index, ruler, options, stackCount) {\n const pixels = ruler.pixels;\n const curr = pixels[index];\n let prev = index > 0 ? pixels[index - 1] : null;\n let next = index < pixels.length - 1 ? pixels[index + 1] : null;\n const percent = options.categoryPercentage;\n if (prev === null) {\n prev = curr - (next === null ? ruler.end - ruler.start : next - curr);\n }\n if (next === null) {\n next = curr + curr - prev;\n }\n const start = curr - (curr - Math.min(prev, next)) / 2 * percent;\n const size = Math.abs(next - prev) / 2 * percent;\n return {\n chunk: size / stackCount,\n ratio: options.barPercentage,\n start\n };\n}\nfunction parseFloatBar(entry, item, vScale, i) {\n const startValue = vScale.parse(entry[0], i);\n const endValue = vScale.parse(entry[1], i);\n const min = Math.min(startValue, endValue);\n const max = Math.max(startValue, endValue);\n let barStart = min;\n let barEnd = max;\n if (Math.abs(min) > Math.abs(max)) {\n barStart = max;\n barEnd = min;\n }\n item[vScale.axis] = barEnd;\n item._custom = {\n barStart,\n barEnd,\n start: startValue,\n end: endValue,\n min,\n max\n };\n}\nfunction parseValue(entry, item, vScale, i) {\n if (isArray(entry)) {\n parseFloatBar(entry, item, vScale, i);\n } else {\n item[vScale.axis] = vScale.parse(entry, i);\n }\n return item;\n}\nfunction parseArrayOrPrimitive(meta, data, start, count) {\n const iScale = meta.iScale;\n const vScale = meta.vScale;\n const labels = iScale.getLabels();\n const singleScale = iScale === vScale;\n const parsed = [];\n let i, ilen, item, entry;\n for(i = start, ilen = start + count; i < ilen; ++i){\n entry = data[i];\n item = {};\n item[iScale.axis] = singleScale || iScale.parse(labels[i], i);\n parsed.push(parseValue(entry, item, vScale, i));\n }\n return parsed;\n}\nfunction isFloatBar(custom) {\n return custom && custom.barStart !== undefined && custom.barEnd !== undefined;\n}\nfunction barSign(size, vScale, actualBase) {\n if (size !== 0) {\n return sign(size);\n }\n return (vScale.isHorizontal() ? 1 : -1) * (vScale.min >= actualBase ? 1 : -1);\n}\nfunction borderProps(properties) {\n let reverse, start, end, top, bottom;\n if (properties.horizontal) {\n reverse = properties.base > properties.x;\n start = 'left';\n end = 'right';\n } else {\n reverse = properties.base < properties.y;\n start = 'bottom';\n end = 'top';\n }\n if (reverse) {\n top = 'end';\n bottom = 'start';\n } else {\n top = 'start';\n bottom = 'end';\n }\n return {\n start,\n end,\n reverse,\n top,\n bottom\n };\n}\nfunction setBorderSkipped(properties, options, stack, index) {\n let edge = options.borderSkipped;\n const res = {};\n if (!edge) {\n properties.borderSkipped = res;\n return;\n }\n if (edge === true) {\n properties.borderSkipped = {\n top: true,\n right: true,\n bottom: true,\n left: true\n };\n return;\n }\n const { start , end , reverse , top , bottom } = borderProps(properties);\n if (edge === 'middle' && stack) {\n properties.enableBorderRadius = true;\n if ((stack._top || 0) === index) {\n edge = top;\n } else if ((stack._bottom || 0) === index) {\n edge = bottom;\n } else {\n res[parseEdge(bottom, start, end, reverse)] = true;\n edge = top;\n }\n }\n res[parseEdge(edge, start, end, reverse)] = true;\n properties.borderSkipped = res;\n}\nfunction parseEdge(edge, a, b, reverse) {\n if (reverse) {\n edge = swap(edge, a, b);\n edge = startEnd(edge, b, a);\n } else {\n edge = startEnd(edge, a, b);\n }\n return edge;\n}\nfunction swap(orig, v1, v2) {\n return orig === v1 ? v2 : orig === v2 ? v1 : orig;\n}\nfunction startEnd(v, start, end) {\n return v === 'start' ? start : v === 'end' ? end : v;\n}\nfunction setInflateAmount(properties, { inflateAmount }, ratio) {\n properties.inflateAmount = inflateAmount === 'auto' ? ratio === 1 ? 0.33 : 0 : inflateAmount;\n}\nclass BarController extends DatasetController {\n static id = 'bar';\n static defaults = {\n datasetElementType: false,\n dataElementType: 'bar',\n categoryPercentage: 0.8,\n barPercentage: 0.9,\n grouped: true,\n animations: {\n numbers: {\n type: 'number',\n properties: [\n 'x',\n 'y',\n 'base',\n 'width',\n 'height'\n ]\n }\n }\n };\n static overrides = {\n scales: {\n _index_: {\n type: 'category',\n offset: true,\n grid: {\n offset: true\n }\n },\n _value_: {\n type: 'linear',\n beginAtZero: true\n }\n }\n };\n parsePrimitiveData(meta, data, start, count) {\n return parseArrayOrPrimitive(meta, data, start, count);\n }\n parseArrayData(meta, data, start, count) {\n return parseArrayOrPrimitive(meta, data, start, count);\n }\n parseObjectData(meta, data, start, count) {\n const { iScale , vScale } = meta;\n const { xAxisKey ='x' , yAxisKey ='y' } = this._parsing;\n const iAxisKey = iScale.axis === 'x' ? xAxisKey : yAxisKey;\n const vAxisKey = vScale.axis === 'x' ? xAxisKey : yAxisKey;\n const parsed = [];\n let i, ilen, item, obj;\n for(i = start, ilen = start + count; i < ilen; ++i){\n obj = data[i];\n item = {};\n item[iScale.axis] = iScale.parse(resolveObjectKey(obj, iAxisKey), i);\n parsed.push(parseValue(resolveObjectKey(obj, vAxisKey), item, vScale, i));\n }\n return parsed;\n }\n updateRangeFromParsed(range, scale, parsed, stack) {\n super.updateRangeFromParsed(range, scale, parsed, stack);\n const custom = parsed._custom;\n if (custom && scale === this._cachedMeta.vScale) {\n range.min = Math.min(range.min, custom.min);\n range.max = Math.max(range.max, custom.max);\n }\n }\n getMaxOverflow() {\n return 0;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const { iScale , vScale } = meta;\n const parsed = this.getParsed(index);\n const custom = parsed._custom;\n const value = isFloatBar(custom) ? '[' + custom.start + ', ' + custom.end + ']' : '' + vScale.getLabelForValue(parsed[vScale.axis]);\n return {\n label: '' + iScale.getLabelForValue(parsed[iScale.axis]),\n value\n };\n }\n initialize() {\n this.enableOptionSharing = true;\n super.initialize();\n const meta = this._cachedMeta;\n meta.stack = this.getDataset().stack;\n }\n update(mode) {\n const meta = this._cachedMeta;\n this.updateElements(meta.data, 0, meta.data.length, mode);\n }\n updateElements(bars, start, count, mode) {\n const reset = mode === 'reset';\n const { index , _cachedMeta: { vScale } } = this;\n const base = vScale.getBasePixel();\n const horizontal = vScale.isHorizontal();\n const ruler = this._getRuler();\n const { sharedOptions , includeOptions } = this._getSharedOptions(start, mode);\n for(let i = start; i < start + count; i++){\n const parsed = this.getParsed(i);\n const vpixels = reset || isNullOrUndef(parsed[vScale.axis]) ? {\n base,\n head: base\n } : this._calculateBarValuePixels(i);\n const ipixels = this._calculateBarIndexPixels(i, ruler);\n const stack = (parsed._stacks || {})[vScale.axis];\n const properties = {\n horizontal,\n base: vpixels.base,\n enableBorderRadius: !stack || isFloatBar(parsed._custom) || index === stack._top || index === stack._bottom,\n x: horizontal ? vpixels.head : ipixels.center,\n y: horizontal ? ipixels.center : vpixels.head,\n height: horizontal ? ipixels.size : Math.abs(vpixels.size),\n width: horizontal ? Math.abs(vpixels.size) : ipixels.size\n };\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, bars[i].active ? 'active' : mode);\n }\n const options = properties.options || bars[i].options;\n setBorderSkipped(properties, options, stack, index);\n setInflateAmount(properties, options, ruler.ratio);\n this.updateElement(bars[i], i, properties, mode);\n }\n }\n _getStacks(last, dataIndex) {\n const { iScale } = this._cachedMeta;\n const metasets = iScale.getMatchingVisibleMetas(this._type).filter((meta)=>meta.controller.options.grouped);\n const stacked = iScale.options.stacked;\n const stacks = [];\n const skipNull = (meta)=>{\n const parsed = meta.controller.getParsed(dataIndex);\n const val = parsed && parsed[meta.vScale.axis];\n if (isNullOrUndef(val) || isNaN(val)) {\n return true;\n }\n };\n for (const meta of metasets){\n if (dataIndex !== undefined && skipNull(meta)) {\n continue;\n }\n if (stacked === false || stacks.indexOf(meta.stack) === -1 || stacked === undefined && meta.stack === undefined) {\n stacks.push(meta.stack);\n }\n if (meta.index === last) {\n break;\n }\n }\n if (!stacks.length) {\n stacks.push(undefined);\n }\n return stacks;\n }\n _getStackCount(index) {\n return this._getStacks(undefined, index).length;\n }\n _getStackIndex(datasetIndex, name, dataIndex) {\n const stacks = this._getStacks(datasetIndex, dataIndex);\n const index = name !== undefined ? stacks.indexOf(name) : -1;\n return index === -1 ? stacks.length - 1 : index;\n }\n _getRuler() {\n const opts = this.options;\n const meta = this._cachedMeta;\n const iScale = meta.iScale;\n const pixels = [];\n let i, ilen;\n for(i = 0, ilen = meta.data.length; i < ilen; ++i){\n pixels.push(iScale.getPixelForValue(this.getParsed(i)[iScale.axis], i));\n }\n const barThickness = opts.barThickness;\n const min = barThickness || computeMinSampleSize(meta);\n return {\n min,\n pixels,\n start: iScale._startPixel,\n end: iScale._endPixel,\n stackCount: this._getStackCount(),\n scale: iScale,\n grouped: opts.grouped,\n ratio: barThickness ? 1 : opts.categoryPercentage * opts.barPercentage\n };\n }\n _calculateBarValuePixels(index) {\n const { _cachedMeta: { vScale , _stacked , index: datasetIndex } , options: { base: baseValue , minBarLength } } = this;\n const actualBase = baseValue || 0;\n const parsed = this.getParsed(index);\n const custom = parsed._custom;\n const floating = isFloatBar(custom);\n let value = parsed[vScale.axis];\n let start = 0;\n let length = _stacked ? this.applyStack(vScale, parsed, _stacked) : value;\n let head, size;\n if (length !== value) {\n start = length - value;\n length = value;\n }\n if (floating) {\n value = custom.barStart;\n length = custom.barEnd - custom.barStart;\n if (value !== 0 && sign(value) !== sign(custom.barEnd)) {\n start = 0;\n }\n start += value;\n }\n const startValue = !isNullOrUndef(baseValue) && !floating ? baseValue : start;\n let base = vScale.getPixelForValue(startValue);\n if (this.chart.getDataVisibility(index)) {\n head = vScale.getPixelForValue(start + length);\n } else {\n head = base;\n }\n size = head - base;\n if (Math.abs(size) < minBarLength) {\n size = barSign(size, vScale, actualBase) * minBarLength;\n if (value === actualBase) {\n base -= size / 2;\n }\n const startPixel = vScale.getPixelForDecimal(0);\n const endPixel = vScale.getPixelForDecimal(1);\n const min = Math.min(startPixel, endPixel);\n const max = Math.max(startPixel, endPixel);\n base = Math.max(Math.min(base, max), min);\n head = base + size;\n if (_stacked && !floating) {\n parsed._stacks[vScale.axis]._visualValues[datasetIndex] = vScale.getValueForPixel(head) - vScale.getValueForPixel(base);\n }\n }\n if (base === vScale.getPixelForValue(actualBase)) {\n const halfGrid = sign(size) * vScale.getLineWidthForValue(actualBase) / 2;\n base += halfGrid;\n size -= halfGrid;\n }\n return {\n size,\n base,\n head,\n center: head + size / 2\n };\n }\n _calculateBarIndexPixels(index, ruler) {\n const scale = ruler.scale;\n const options = this.options;\n const skipNull = options.skipNull;\n const maxBarThickness = valueOrDefault(options.maxBarThickness, Infinity);\n let center, size;\n if (ruler.grouped) {\n const stackCount = skipNull ? this._getStackCount(index) : ruler.stackCount;\n const range = options.barThickness === 'flex' ? computeFlexCategoryTraits(index, ruler, options, stackCount) : computeFitCategoryTraits(index, ruler, options, stackCount);\n const stackIndex = this._getStackIndex(this.index, this._cachedMeta.stack, skipNull ? index : undefined);\n center = range.start + range.chunk * stackIndex + range.chunk / 2;\n size = Math.min(maxBarThickness, range.chunk * range.ratio);\n } else {\n center = scale.getPixelForValue(this.getParsed(index)[scale.axis], index);\n size = Math.min(maxBarThickness, ruler.min * ruler.ratio);\n }\n return {\n base: center - size / 2,\n head: center + size / 2,\n center,\n size\n };\n }\n draw() {\n const meta = this._cachedMeta;\n const vScale = meta.vScale;\n const rects = meta.data;\n const ilen = rects.length;\n let i = 0;\n for(; i < ilen; ++i){\n if (this.getParsed(i)[vScale.axis] !== null) {\n rects[i].draw(this._ctx);\n }\n }\n }\n}\n\nclass BubbleController extends DatasetController {\n static id = 'bubble';\n static defaults = {\n datasetElementType: false,\n dataElementType: 'point',\n animations: {\n numbers: {\n type: 'number',\n properties: [\n 'x',\n 'y',\n 'borderWidth',\n 'radius'\n ]\n }\n }\n };\n static overrides = {\n scales: {\n x: {\n type: 'linear'\n },\n y: {\n type: 'linear'\n }\n }\n };\n initialize() {\n this.enableOptionSharing = true;\n super.initialize();\n }\n parsePrimitiveData(meta, data, start, count) {\n const parsed = super.parsePrimitiveData(meta, data, start, count);\n for(let i = 0; i < parsed.length; i++){\n parsed[i]._custom = this.resolveDataElementOptions(i + start).radius;\n }\n return parsed;\n }\n parseArrayData(meta, data, start, count) {\n const parsed = super.parseArrayData(meta, data, start, count);\n for(let i = 0; i < parsed.length; i++){\n const item = data[start + i];\n parsed[i]._custom = valueOrDefault(item[2], this.resolveDataElementOptions(i + start).radius);\n }\n return parsed;\n }\n parseObjectData(meta, data, start, count) {\n const parsed = super.parseObjectData(meta, data, start, count);\n for(let i = 0; i < parsed.length; i++){\n const item = data[start + i];\n parsed[i]._custom = valueOrDefault(item && item.r && +item.r, this.resolveDataElementOptions(i + start).radius);\n }\n return parsed;\n }\n getMaxOverflow() {\n const data = this._cachedMeta.data;\n let max = 0;\n for(let i = data.length - 1; i >= 0; --i){\n max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);\n }\n return max > 0 && max;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const labels = this.chart.data.labels || [];\n const { xScale , yScale } = meta;\n const parsed = this.getParsed(index);\n const x = xScale.getLabelForValue(parsed.x);\n const y = yScale.getLabelForValue(parsed.y);\n const r = parsed._custom;\n return {\n label: labels[index] || '',\n value: '(' + x + ', ' + y + (r ? ', ' + r : '') + ')'\n };\n }\n update(mode) {\n const points = this._cachedMeta.data;\n this.updateElements(points, 0, points.length, mode);\n }\n updateElements(points, start, count, mode) {\n const reset = mode === 'reset';\n const { iScale , vScale } = this._cachedMeta;\n const { sharedOptions , includeOptions } = this._getSharedOptions(start, mode);\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n for(let i = start; i < start + count; i++){\n const point = points[i];\n const parsed = !reset && this.getParsed(i);\n const properties = {};\n const iPixel = properties[iAxis] = reset ? iScale.getPixelForDecimal(0.5) : iScale.getPixelForValue(parsed[iAxis]);\n const vPixel = properties[vAxis] = reset ? vScale.getBasePixel() : vScale.getPixelForValue(parsed[vAxis]);\n properties.skip = isNaN(iPixel) || isNaN(vPixel);\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n if (reset) {\n properties.options.radius = 0;\n }\n }\n this.updateElement(point, i, properties, mode);\n }\n }\n resolveDataElementOptions(index, mode) {\n const parsed = this.getParsed(index);\n let values = super.resolveDataElementOptions(index, mode);\n if (values.$shared) {\n values = Object.assign({}, values, {\n $shared: false\n });\n }\n const radius = values.radius;\n if (mode !== 'active') {\n values.radius = 0;\n }\n values.radius += valueOrDefault(parsed && parsed._custom, radius);\n return values;\n }\n}\n\nfunction getRatioAndOffset(rotation, circumference, cutout) {\n let ratioX = 1;\n let ratioY = 1;\n let offsetX = 0;\n let offsetY = 0;\n if (circumference < TAU) {\n const startAngle = rotation;\n const endAngle = startAngle + circumference;\n const startX = Math.cos(startAngle);\n const startY = Math.sin(startAngle);\n const endX = Math.cos(endAngle);\n const endY = Math.sin(endAngle);\n const calcMax = (angle, a, b)=>_angleBetween(angle, startAngle, endAngle, true) ? 1 : Math.max(a, a * cutout, b, b * cutout);\n const calcMin = (angle, a, b)=>_angleBetween(angle, startAngle, endAngle, true) ? -1 : Math.min(a, a * cutout, b, b * cutout);\n const maxX = calcMax(0, startX, endX);\n const maxY = calcMax(HALF_PI, startY, endY);\n const minX = calcMin(PI, startX, endX);\n const minY = calcMin(PI + HALF_PI, startY, endY);\n ratioX = (maxX - minX) / 2;\n ratioY = (maxY - minY) / 2;\n offsetX = -(maxX + minX) / 2;\n offsetY = -(maxY + minY) / 2;\n }\n return {\n ratioX,\n ratioY,\n offsetX,\n offsetY\n };\n}\nclass DoughnutController extends DatasetController {\n static id = 'doughnut';\n static defaults = {\n datasetElementType: false,\n dataElementType: 'arc',\n animation: {\n animateRotate: true,\n animateScale: false\n },\n animations: {\n numbers: {\n type: 'number',\n properties: [\n 'circumference',\n 'endAngle',\n 'innerRadius',\n 'outerRadius',\n 'startAngle',\n 'x',\n 'y',\n 'offset',\n 'borderWidth',\n 'spacing'\n ]\n }\n },\n cutout: '50%',\n rotation: 0,\n circumference: 360,\n radius: '100%',\n spacing: 0,\n indexAxis: 'r'\n };\n static descriptors = {\n _scriptable: (name)=>name !== 'spacing',\n _indexable: (name)=>name !== 'spacing' && !name.startsWith('borderDash') && !name.startsWith('hoverBorderDash')\n };\n static overrides = {\n aspectRatio: 1,\n plugins: {\n legend: {\n labels: {\n generateLabels (chart) {\n const data = chart.data;\n if (data.labels.length && data.datasets.length) {\n const { labels: { pointStyle , color } } = chart.legend.options;\n return data.labels.map((label, i)=>{\n const meta = chart.getDatasetMeta(0);\n const style = meta.controller.getStyle(i);\n return {\n text: label,\n fillStyle: style.backgroundColor,\n strokeStyle: style.borderColor,\n fontColor: color,\n lineWidth: style.borderWidth,\n pointStyle: pointStyle,\n hidden: !chart.getDataVisibility(i),\n index: i\n };\n });\n }\n return [];\n }\n },\n onClick (e, legendItem, legend) {\n legend.chart.toggleDataVisibility(legendItem.index);\n legend.chart.update();\n }\n }\n }\n };\n constructor(chart, datasetIndex){\n super(chart, datasetIndex);\n this.enableOptionSharing = true;\n this.innerRadius = undefined;\n this.outerRadius = undefined;\n this.offsetX = undefined;\n this.offsetY = undefined;\n }\n linkScales() {}\n parse(start, count) {\n const data = this.getDataset().data;\n const meta = this._cachedMeta;\n if (this._parsing === false) {\n meta._parsed = data;\n } else {\n let getter = (i)=>+data[i];\n if (isObject(data[start])) {\n const { key ='value' } = this._parsing;\n getter = (i)=>+resolveObjectKey(data[i], key);\n }\n let i, ilen;\n for(i = start, ilen = start + count; i < ilen; ++i){\n meta._parsed[i] = getter(i);\n }\n }\n }\n _getRotation() {\n return toRadians(this.options.rotation - 90);\n }\n _getCircumference() {\n return toRadians(this.options.circumference);\n }\n _getRotationExtents() {\n let min = TAU;\n let max = -TAU;\n for(let i = 0; i < this.chart.data.datasets.length; ++i){\n if (this.chart.isDatasetVisible(i) && this.chart.getDatasetMeta(i).type === this._type) {\n const controller = this.chart.getDatasetMeta(i).controller;\n const rotation = controller._getRotation();\n const circumference = controller._getCircumference();\n min = Math.min(min, rotation);\n max = Math.max(max, rotation + circumference);\n }\n }\n return {\n rotation: min,\n circumference: max - min\n };\n }\n update(mode) {\n const chart = this.chart;\n const { chartArea } = chart;\n const meta = this._cachedMeta;\n const arcs = meta.data;\n const spacing = this.getMaxBorderWidth() + this.getMaxOffset(arcs) + this.options.spacing;\n const maxSize = Math.max((Math.min(chartArea.width, chartArea.height) - spacing) / 2, 0);\n const cutout = Math.min(toPercentage(this.options.cutout, maxSize), 1);\n const chartWeight = this._getRingWeight(this.index);\n const { circumference , rotation } = this._getRotationExtents();\n const { ratioX , ratioY , offsetX , offsetY } = getRatioAndOffset(rotation, circumference, cutout);\n const maxWidth = (chartArea.width - spacing) / ratioX;\n const maxHeight = (chartArea.height - spacing) / ratioY;\n const maxRadius = Math.max(Math.min(maxWidth, maxHeight) / 2, 0);\n const outerRadius = toDimension(this.options.radius, maxRadius);\n const innerRadius = Math.max(outerRadius * cutout, 0);\n const radiusLength = (outerRadius - innerRadius) / this._getVisibleDatasetWeightTotal();\n this.offsetX = offsetX * outerRadius;\n this.offsetY = offsetY * outerRadius;\n meta.total = this.calculateTotal();\n this.outerRadius = outerRadius - radiusLength * this._getRingWeightOffset(this.index);\n this.innerRadius = Math.max(this.outerRadius - radiusLength * chartWeight, 0);\n this.updateElements(arcs, 0, arcs.length, mode);\n }\n _circumference(i, reset) {\n const opts = this.options;\n const meta = this._cachedMeta;\n const circumference = this._getCircumference();\n if (reset && opts.animation.animateRotate || !this.chart.getDataVisibility(i) || meta._parsed[i] === null || meta.data[i].hidden) {\n return 0;\n }\n return this.calculateCircumference(meta._parsed[i] * circumference / TAU);\n }\n updateElements(arcs, start, count, mode) {\n const reset = mode === 'reset';\n const chart = this.chart;\n const chartArea = chart.chartArea;\n const opts = chart.options;\n const animationOpts = opts.animation;\n const centerX = (chartArea.left + chartArea.right) / 2;\n const centerY = (chartArea.top + chartArea.bottom) / 2;\n const animateScale = reset && animationOpts.animateScale;\n const innerRadius = animateScale ? 0 : this.innerRadius;\n const outerRadius = animateScale ? 0 : this.outerRadius;\n const { sharedOptions , includeOptions } = this._getSharedOptions(start, mode);\n let startAngle = this._getRotation();\n let i;\n for(i = 0; i < start; ++i){\n startAngle += this._circumference(i, reset);\n }\n for(i = start; i < start + count; ++i){\n const circumference = this._circumference(i, reset);\n const arc = arcs[i];\n const properties = {\n x: centerX + this.offsetX,\n y: centerY + this.offsetY,\n startAngle,\n endAngle: startAngle + circumference,\n circumference,\n outerRadius,\n innerRadius\n };\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, arc.active ? 'active' : mode);\n }\n startAngle += circumference;\n this.updateElement(arc, i, properties, mode);\n }\n }\n calculateTotal() {\n const meta = this._cachedMeta;\n const metaData = meta.data;\n let total = 0;\n let i;\n for(i = 0; i < metaData.length; i++){\n const value = meta._parsed[i];\n if (value !== null && !isNaN(value) && this.chart.getDataVisibility(i) && !metaData[i].hidden) {\n total += Math.abs(value);\n }\n }\n return total;\n }\n calculateCircumference(value) {\n const total = this._cachedMeta.total;\n if (total > 0 && !isNaN(value)) {\n return TAU * (Math.abs(value) / total);\n }\n return 0;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const chart = this.chart;\n const labels = chart.data.labels || [];\n const value = formatNumber(meta._parsed[index], chart.options.locale);\n return {\n label: labels[index] || '',\n value\n };\n }\n getMaxBorderWidth(arcs) {\n let max = 0;\n const chart = this.chart;\n let i, ilen, meta, controller, options;\n if (!arcs) {\n for(i = 0, ilen = chart.data.datasets.length; i < ilen; ++i){\n if (chart.isDatasetVisible(i)) {\n meta = chart.getDatasetMeta(i);\n arcs = meta.data;\n controller = meta.controller;\n break;\n }\n }\n }\n if (!arcs) {\n return 0;\n }\n for(i = 0, ilen = arcs.length; i < ilen; ++i){\n options = controller.resolveDataElementOptions(i);\n if (options.borderAlign !== 'inner') {\n max = Math.max(max, options.borderWidth || 0, options.hoverBorderWidth || 0);\n }\n }\n return max;\n }\n getMaxOffset(arcs) {\n let max = 0;\n for(let i = 0, ilen = arcs.length; i < ilen; ++i){\n const options = this.resolveDataElementOptions(i);\n max = Math.max(max, options.offset || 0, options.hoverOffset || 0);\n }\n return max;\n }\n _getRingWeightOffset(datasetIndex) {\n let ringWeightOffset = 0;\n for(let i = 0; i < datasetIndex; ++i){\n if (this.chart.isDatasetVisible(i)) {\n ringWeightOffset += this._getRingWeight(i);\n }\n }\n return ringWeightOffset;\n }\n _getRingWeight(datasetIndex) {\n return Math.max(valueOrDefault(this.chart.data.datasets[datasetIndex].weight, 1), 0);\n }\n _getVisibleDatasetWeightTotal() {\n return this._getRingWeightOffset(this.chart.data.datasets.length) || 1;\n }\n}\n\nclass LineController extends DatasetController {\n static id = 'line';\n static defaults = {\n datasetElementType: 'line',\n dataElementType: 'point',\n showLine: true,\n spanGaps: false\n };\n static overrides = {\n scales: {\n _index_: {\n type: 'category'\n },\n _value_: {\n type: 'linear'\n }\n }\n };\n initialize() {\n this.enableOptionSharing = true;\n this.supportsDecimation = true;\n super.initialize();\n }\n update(mode) {\n const meta = this._cachedMeta;\n const { dataset: line , data: points = [] , _dataset } = meta;\n const animationsDisabled = this.chart._animationsDisabled;\n let { start , count } = _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);\n this._drawStart = start;\n this._drawCount = count;\n if (_scaleRangesChanged(meta)) {\n start = 0;\n count = points.length;\n }\n line._chart = this.chart;\n line._datasetIndex = this.index;\n line._decimated = !!_dataset._decimated;\n line.points = points;\n const options = this.resolveDatasetElementOptions(mode);\n if (!this.options.showLine) {\n options.borderWidth = 0;\n }\n options.segment = this.options.segment;\n this.updateElement(line, undefined, {\n animated: !animationsDisabled,\n options\n }, mode);\n this.updateElements(points, start, count, mode);\n }\n updateElements(points, start, count, mode) {\n const reset = mode === 'reset';\n const { iScale , vScale , _stacked , _dataset } = this._cachedMeta;\n const { sharedOptions , includeOptions } = this._getSharedOptions(start, mode);\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const { spanGaps , segment } = this.options;\n const maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n const directUpdate = this.chart._animationsDisabled || reset || mode === 'none';\n const end = start + count;\n const pointsCount = points.length;\n let prevParsed = start > 0 && this.getParsed(start - 1);\n for(let i = 0; i < pointsCount; ++i){\n const point = points[i];\n const properties = directUpdate ? point : {};\n if (i < start || i >= end) {\n properties.skip = true;\n continue;\n }\n const parsed = this.getParsed(i);\n const nullData = isNullOrUndef(parsed[vAxis]);\n const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n properties.stop = i > 0 && Math.abs(parsed[iAxis] - prevParsed[iAxis]) > maxGapLength;\n if (segment) {\n properties.parsed = parsed;\n properties.raw = _dataset.data[i];\n }\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n }\n if (!directUpdate) {\n this.updateElement(point, i, properties, mode);\n }\n prevParsed = parsed;\n }\n }\n getMaxOverflow() {\n const meta = this._cachedMeta;\n const dataset = meta.dataset;\n const border = dataset.options && dataset.options.borderWidth || 0;\n const data = meta.data || [];\n if (!data.length) {\n return border;\n }\n const firstPoint = data[0].size(this.resolveDataElementOptions(0));\n const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));\n return Math.max(border, firstPoint, lastPoint) / 2;\n }\n draw() {\n const meta = this._cachedMeta;\n meta.dataset.updateControlPoints(this.chart.chartArea, meta.iScale.axis);\n super.draw();\n }\n}\n\nclass PolarAreaController extends DatasetController {\n static id = 'polarArea';\n static defaults = {\n dataElementType: 'arc',\n animation: {\n animateRotate: true,\n animateScale: true\n },\n animations: {\n numbers: {\n type: 'number',\n properties: [\n 'x',\n 'y',\n 'startAngle',\n 'endAngle',\n 'innerRadius',\n 'outerRadius'\n ]\n }\n },\n indexAxis: 'r',\n startAngle: 0\n };\n static overrides = {\n aspectRatio: 1,\n plugins: {\n legend: {\n labels: {\n generateLabels (chart) {\n const data = chart.data;\n if (data.labels.length && data.datasets.length) {\n const { labels: { pointStyle , color } } = chart.legend.options;\n return data.labels.map((label, i)=>{\n const meta = chart.getDatasetMeta(0);\n const style = meta.controller.getStyle(i);\n return {\n text: label,\n fillStyle: style.backgroundColor,\n strokeStyle: style.borderColor,\n fontColor: color,\n lineWidth: style.borderWidth,\n pointStyle: pointStyle,\n hidden: !chart.getDataVisibility(i),\n index: i\n };\n });\n }\n return [];\n }\n },\n onClick (e, legendItem, legend) {\n legend.chart.toggleDataVisibility(legendItem.index);\n legend.chart.update();\n }\n }\n },\n scales: {\n r: {\n type: 'radialLinear',\n angleLines: {\n display: false\n },\n beginAtZero: true,\n grid: {\n circular: true\n },\n pointLabels: {\n display: false\n },\n startAngle: 0\n }\n }\n };\n constructor(chart, datasetIndex){\n super(chart, datasetIndex);\n this.innerRadius = undefined;\n this.outerRadius = undefined;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const chart = this.chart;\n const labels = chart.data.labels || [];\n const value = formatNumber(meta._parsed[index].r, chart.options.locale);\n return {\n label: labels[index] || '',\n value\n };\n }\n parseObjectData(meta, data, start, count) {\n return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n }\n update(mode) {\n const arcs = this._cachedMeta.data;\n this._updateRadius();\n this.updateElements(arcs, 0, arcs.length, mode);\n }\n getMinMax() {\n const meta = this._cachedMeta;\n const range = {\n min: Number.POSITIVE_INFINITY,\n max: Number.NEGATIVE_INFINITY\n };\n meta.data.forEach((element, index)=>{\n const parsed = this.getParsed(index).r;\n if (!isNaN(parsed) && this.chart.getDataVisibility(index)) {\n if (parsed < range.min) {\n range.min = parsed;\n }\n if (parsed > range.max) {\n range.max = parsed;\n }\n }\n });\n return range;\n }\n _updateRadius() {\n const chart = this.chart;\n const chartArea = chart.chartArea;\n const opts = chart.options;\n const minSize = Math.min(chartArea.right - chartArea.left, chartArea.bottom - chartArea.top);\n const outerRadius = Math.max(minSize / 2, 0);\n const innerRadius = Math.max(opts.cutoutPercentage ? outerRadius / 100 * opts.cutoutPercentage : 1, 0);\n const radiusLength = (outerRadius - innerRadius) / chart.getVisibleDatasetCount();\n this.outerRadius = outerRadius - radiusLength * this.index;\n this.innerRadius = this.outerRadius - radiusLength;\n }\n updateElements(arcs, start, count, mode) {\n const reset = mode === 'reset';\n const chart = this.chart;\n const opts = chart.options;\n const animationOpts = opts.animation;\n const scale = this._cachedMeta.rScale;\n const centerX = scale.xCenter;\n const centerY = scale.yCenter;\n const datasetStartAngle = scale.getIndexAngle(0) - 0.5 * PI;\n let angle = datasetStartAngle;\n let i;\n const defaultAngle = 360 / this.countVisibleElements();\n for(i = 0; i < start; ++i){\n angle += this._computeAngle(i, mode, defaultAngle);\n }\n for(i = start; i < start + count; i++){\n const arc = arcs[i];\n let startAngle = angle;\n let endAngle = angle + this._computeAngle(i, mode, defaultAngle);\n let outerRadius = chart.getDataVisibility(i) ? scale.getDistanceFromCenterForValue(this.getParsed(i).r) : 0;\n angle = endAngle;\n if (reset) {\n if (animationOpts.animateScale) {\n outerRadius = 0;\n }\n if (animationOpts.animateRotate) {\n startAngle = endAngle = datasetStartAngle;\n }\n }\n const properties = {\n x: centerX,\n y: centerY,\n innerRadius: 0,\n outerRadius,\n startAngle,\n endAngle,\n options: this.resolveDataElementOptions(i, arc.active ? 'active' : mode)\n };\n this.updateElement(arc, i, properties, mode);\n }\n }\n countVisibleElements() {\n const meta = this._cachedMeta;\n let count = 0;\n meta.data.forEach((element, index)=>{\n if (!isNaN(this.getParsed(index).r) && this.chart.getDataVisibility(index)) {\n count++;\n }\n });\n return count;\n }\n _computeAngle(index, mode, defaultAngle) {\n return this.chart.getDataVisibility(index) ? toRadians(this.resolveDataElementOptions(index, mode).angle || defaultAngle) : 0;\n }\n}\n\nclass PieController extends DoughnutController {\n static id = 'pie';\n static defaults = {\n cutout: 0,\n rotation: 0,\n circumference: 360,\n radius: '100%'\n };\n}\n\nclass RadarController extends DatasetController {\n static id = 'radar';\n static defaults = {\n datasetElementType: 'line',\n dataElementType: 'point',\n indexAxis: 'r',\n showLine: true,\n elements: {\n line: {\n fill: 'start'\n }\n }\n };\n static overrides = {\n aspectRatio: 1,\n scales: {\n r: {\n type: 'radialLinear'\n }\n }\n };\n getLabelAndValue(index) {\n const vScale = this._cachedMeta.vScale;\n const parsed = this.getParsed(index);\n return {\n label: vScale.getLabels()[index],\n value: '' + vScale.getLabelForValue(parsed[vScale.axis])\n };\n }\n parseObjectData(meta, data, start, count) {\n return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n }\n update(mode) {\n const meta = this._cachedMeta;\n const line = meta.dataset;\n const points = meta.data || [];\n const labels = meta.iScale.getLabels();\n line.points = points;\n if (mode !== 'resize') {\n const options = this.resolveDatasetElementOptions(mode);\n if (!this.options.showLine) {\n options.borderWidth = 0;\n }\n const properties = {\n _loop: true,\n _fullLoop: labels.length === points.length,\n options\n };\n this.updateElement(line, undefined, properties, mode);\n }\n this.updateElements(points, 0, points.length, mode);\n }\n updateElements(points, start, count, mode) {\n const scale = this._cachedMeta.rScale;\n const reset = mode === 'reset';\n for(let i = start; i < start + count; i++){\n const point = points[i];\n const options = this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n const pointPosition = scale.getPointPositionForValue(i, this.getParsed(i).r);\n const x = reset ? scale.xCenter : pointPosition.x;\n const y = reset ? scale.yCenter : pointPosition.y;\n const properties = {\n x,\n y,\n angle: pointPosition.angle,\n skip: isNaN(x) || isNaN(y),\n options\n };\n this.updateElement(point, i, properties, mode);\n }\n }\n}\n\nclass ScatterController extends DatasetController {\n static id = 'scatter';\n static defaults = {\n datasetElementType: false,\n dataElementType: 'point',\n showLine: false,\n fill: false\n };\n static overrides = {\n interaction: {\n mode: 'point'\n },\n scales: {\n x: {\n type: 'linear'\n },\n y: {\n type: 'linear'\n }\n }\n };\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const labels = this.chart.data.labels || [];\n const { xScale , yScale } = meta;\n const parsed = this.getParsed(index);\n const x = xScale.getLabelForValue(parsed.x);\n const y = yScale.getLabelForValue(parsed.y);\n return {\n label: labels[index] || '',\n value: '(' + x + ', ' + y + ')'\n };\n }\n update(mode) {\n const meta = this._cachedMeta;\n const { data: points = [] } = meta;\n const animationsDisabled = this.chart._animationsDisabled;\n let { start , count } = _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);\n this._drawStart = start;\n this._drawCount = count;\n if (_scaleRangesChanged(meta)) {\n start = 0;\n count = points.length;\n }\n if (this.options.showLine) {\n if (!this.datasetElementType) {\n this.addElements();\n }\n const { dataset: line , _dataset } = meta;\n line._chart = this.chart;\n line._datasetIndex = this.index;\n line._decimated = !!_dataset._decimated;\n line.points = points;\n const options = this.resolveDatasetElementOptions(mode);\n options.segment = this.options.segment;\n this.updateElement(line, undefined, {\n animated: !animationsDisabled,\n options\n }, mode);\n } else if (this.datasetElementType) {\n delete meta.dataset;\n this.datasetElementType = false;\n }\n this.updateElements(points, start, count, mode);\n }\n addElements() {\n const { showLine } = this.options;\n if (!this.datasetElementType && showLine) {\n this.datasetElementType = this.chart.registry.getElement('line');\n }\n super.addElements();\n }\n updateElements(points, start, count, mode) {\n const reset = mode === 'reset';\n const { iScale , vScale , _stacked , _dataset } = this._cachedMeta;\n const firstOpts = this.resolveDataElementOptions(start, mode);\n const sharedOptions = this.getSharedOptions(firstOpts);\n const includeOptions = this.includeOptions(mode, sharedOptions);\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const { spanGaps , segment } = this.options;\n const maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n const directUpdate = this.chart._animationsDisabled || reset || mode === 'none';\n let prevParsed = start > 0 && this.getParsed(start - 1);\n for(let i = start; i < start + count; ++i){\n const point = points[i];\n const parsed = this.getParsed(i);\n const properties = directUpdate ? point : {};\n const nullData = isNullOrUndef(parsed[vAxis]);\n const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n properties.stop = i > 0 && Math.abs(parsed[iAxis] - prevParsed[iAxis]) > maxGapLength;\n if (segment) {\n properties.parsed = parsed;\n properties.raw = _dataset.data[i];\n }\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n }\n if (!directUpdate) {\n this.updateElement(point, i, properties, mode);\n }\n prevParsed = parsed;\n }\n this.updateSharedOptions(sharedOptions, mode, firstOpts);\n }\n getMaxOverflow() {\n const meta = this._cachedMeta;\n const data = meta.data || [];\n if (!this.options.showLine) {\n let max = 0;\n for(let i = data.length - 1; i >= 0; --i){\n max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);\n }\n return max > 0 && max;\n }\n const dataset = meta.dataset;\n const border = dataset.options && dataset.options.borderWidth || 0;\n if (!data.length) {\n return border;\n }\n const firstPoint = data[0].size(this.resolveDataElementOptions(0));\n const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));\n return Math.max(border, firstPoint, lastPoint) / 2;\n }\n}\n\nvar controllers = /*#__PURE__*/Object.freeze({\n__proto__: null,\nBarController: BarController,\nBubbleController: BubbleController,\nDoughnutController: DoughnutController,\nLineController: LineController,\nPieController: PieController,\nPolarAreaController: PolarAreaController,\nRadarController: RadarController,\nScatterController: ScatterController\n});\n\n/**\n * @namespace Chart._adapters\n * @since 2.8.0\n * @private\n */ function abstract() {\n throw new Error('This method is not implemented: Check that a complete date adapter is provided.');\n}\n/**\n * Date adapter (current used by the time scale)\n * @namespace Chart._adapters._date\n * @memberof Chart._adapters\n * @private\n */ class DateAdapterBase {\n /**\n * Override default date adapter methods.\n * Accepts type parameter to define options type.\n * @example\n * Chart._adapters._date.override<{myAdapterOption: string}>({\n * init() {\n * console.log(this.options.myAdapterOption);\n * }\n * })\n */ static override(members) {\n Object.assign(DateAdapterBase.prototype, members);\n }\n options;\n constructor(options){\n this.options = options || {};\n }\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n init() {}\n formats() {\n return abstract();\n }\n parse() {\n return abstract();\n }\n format() {\n return abstract();\n }\n add() {\n return abstract();\n }\n diff() {\n return abstract();\n }\n startOf() {\n return abstract();\n }\n endOf() {\n return abstract();\n }\n}\nvar adapters = {\n _date: DateAdapterBase\n};\n\nfunction binarySearch(metaset, axis, value, intersect) {\n const { controller , data , _sorted } = metaset;\n const iScale = controller._cachedMeta.iScale;\n if (iScale && axis === iScale.axis && axis !== 'r' && _sorted && data.length) {\n const lookupMethod = iScale._reversePixels ? _rlookupByKey : _lookupByKey;\n if (!intersect) {\n return lookupMethod(data, axis, value);\n } else if (controller._sharedOptions) {\n const el = data[0];\n const range = typeof el.getRange === 'function' && el.getRange(axis);\n if (range) {\n const start = lookupMethod(data, axis, value - range);\n const end = lookupMethod(data, axis, value + range);\n return {\n lo: start.lo,\n hi: end.hi\n };\n }\n }\n }\n return {\n lo: 0,\n hi: data.length - 1\n };\n}\n function evaluateInteractionItems(chart, axis, position, handler, intersect) {\n const metasets = chart.getSortedVisibleDatasetMetas();\n const value = position[axis];\n for(let i = 0, ilen = metasets.length; i < ilen; ++i){\n const { index , data } = metasets[i];\n const { lo , hi } = binarySearch(metasets[i], axis, value, intersect);\n for(let j = lo; j <= hi; ++j){\n const element = data[j];\n if (!element.skip) {\n handler(element, index, j);\n }\n }\n }\n}\n function getDistanceMetricForAxis(axis) {\n const useX = axis.indexOf('x') !== -1;\n const useY = axis.indexOf('y') !== -1;\n return function(pt1, pt2) {\n const deltaX = useX ? Math.abs(pt1.x - pt2.x) : 0;\n const deltaY = useY ? Math.abs(pt1.y - pt2.y) : 0;\n return Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2));\n };\n}\n function getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) {\n const items = [];\n if (!includeInvisible && !chart.isPointInArea(position)) {\n return items;\n }\n const evaluationFunc = function(element, datasetIndex, index) {\n if (!includeInvisible && !_isPointInArea(element, chart.chartArea, 0)) {\n return;\n }\n if (element.inRange(position.x, position.y, useFinalPosition)) {\n items.push({\n element,\n datasetIndex,\n index\n });\n }\n };\n evaluateInteractionItems(chart, axis, position, evaluationFunc, true);\n return items;\n}\n function getNearestRadialItems(chart, position, axis, useFinalPosition) {\n let items = [];\n function evaluationFunc(element, datasetIndex, index) {\n const { startAngle , endAngle } = element.getProps([\n 'startAngle',\n 'endAngle'\n ], useFinalPosition);\n const { angle } = getAngleFromPoint(element, {\n x: position.x,\n y: position.y\n });\n if (_angleBetween(angle, startAngle, endAngle)) {\n items.push({\n element,\n datasetIndex,\n index\n });\n }\n }\n evaluateInteractionItems(chart, axis, position, evaluationFunc);\n return items;\n}\n function getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n let items = [];\n const distanceMetric = getDistanceMetricForAxis(axis);\n let minDistance = Number.POSITIVE_INFINITY;\n function evaluationFunc(element, datasetIndex, index) {\n const inRange = element.inRange(position.x, position.y, useFinalPosition);\n if (intersect && !inRange) {\n return;\n }\n const center = element.getCenterPoint(useFinalPosition);\n const pointInArea = !!includeInvisible || chart.isPointInArea(center);\n if (!pointInArea && !inRange) {\n return;\n }\n const distance = distanceMetric(position, center);\n if (distance < minDistance) {\n items = [\n {\n element,\n datasetIndex,\n index\n }\n ];\n minDistance = distance;\n } else if (distance === minDistance) {\n items.push({\n element,\n datasetIndex,\n index\n });\n }\n }\n evaluateInteractionItems(chart, axis, position, evaluationFunc);\n return items;\n}\n function getNearestItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n if (!includeInvisible && !chart.isPointInArea(position)) {\n return [];\n }\n return axis === 'r' && !intersect ? getNearestRadialItems(chart, position, axis, useFinalPosition) : getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible);\n}\n function getAxisItems(chart, position, axis, intersect, useFinalPosition) {\n const items = [];\n const rangeMethod = axis === 'x' ? 'inXRange' : 'inYRange';\n let intersectsItem = false;\n evaluateInteractionItems(chart, axis, position, (element, datasetIndex, index)=>{\n if (element[rangeMethod](position[axis], useFinalPosition)) {\n items.push({\n element,\n datasetIndex,\n index\n });\n intersectsItem = intersectsItem || element.inRange(position.x, position.y, useFinalPosition);\n }\n });\n if (intersect && !intersectsItem) {\n return [];\n }\n return items;\n}\n var Interaction = {\n evaluateInteractionItems,\n modes: {\n index (chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'x';\n const includeInvisible = options.includeInvisible || false;\n const items = options.intersect ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) : getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n const elements = [];\n if (!items.length) {\n return [];\n }\n chart.getSortedVisibleDatasetMetas().forEach((meta)=>{\n const index = items[0].index;\n const element = meta.data[index];\n if (element && !element.skip) {\n elements.push({\n element,\n datasetIndex: meta.index,\n index\n });\n }\n });\n return elements;\n },\n dataset (chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'xy';\n const includeInvisible = options.includeInvisible || false;\n let items = options.intersect ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) : getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n if (items.length > 0) {\n const datasetIndex = items[0].datasetIndex;\n const data = chart.getDatasetMeta(datasetIndex).data;\n items = [];\n for(let i = 0; i < data.length; ++i){\n items.push({\n element: data[i],\n datasetIndex,\n index: i\n });\n }\n }\n return items;\n },\n point (chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'xy';\n const includeInvisible = options.includeInvisible || false;\n return getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible);\n },\n nearest (chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'xy';\n const includeInvisible = options.includeInvisible || false;\n return getNearestItems(chart, position, axis, options.intersect, useFinalPosition, includeInvisible);\n },\n x (chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n return getAxisItems(chart, position, 'x', options.intersect, useFinalPosition);\n },\n y (chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n return getAxisItems(chart, position, 'y', options.intersect, useFinalPosition);\n }\n }\n};\n\nconst STATIC_POSITIONS = [\n 'left',\n 'top',\n 'right',\n 'bottom'\n];\nfunction filterByPosition(array, position) {\n return array.filter((v)=>v.pos === position);\n}\nfunction filterDynamicPositionByAxis(array, axis) {\n return array.filter((v)=>STATIC_POSITIONS.indexOf(v.pos) === -1 && v.box.axis === axis);\n}\nfunction sortByWeight(array, reverse) {\n return array.sort((a, b)=>{\n const v0 = reverse ? b : a;\n const v1 = reverse ? a : b;\n return v0.weight === v1.weight ? v0.index - v1.index : v0.weight - v1.weight;\n });\n}\nfunction wrapBoxes(boxes) {\n const layoutBoxes = [];\n let i, ilen, box, pos, stack, stackWeight;\n for(i = 0, ilen = (boxes || []).length; i < ilen; ++i){\n box = boxes[i];\n ({ position: pos , options: { stack , stackWeight =1 } } = box);\n layoutBoxes.push({\n index: i,\n box,\n pos,\n horizontal: box.isHorizontal(),\n weight: box.weight,\n stack: stack && pos + stack,\n stackWeight\n });\n }\n return layoutBoxes;\n}\nfunction buildStacks(layouts) {\n const stacks = {};\n for (const wrap of layouts){\n const { stack , pos , stackWeight } = wrap;\n if (!stack || !STATIC_POSITIONS.includes(pos)) {\n continue;\n }\n const _stack = stacks[stack] || (stacks[stack] = {\n count: 0,\n placed: 0,\n weight: 0,\n size: 0\n });\n _stack.count++;\n _stack.weight += stackWeight;\n }\n return stacks;\n}\n function setLayoutDims(layouts, params) {\n const stacks = buildStacks(layouts);\n const { vBoxMaxWidth , hBoxMaxHeight } = params;\n let i, ilen, layout;\n for(i = 0, ilen = layouts.length; i < ilen; ++i){\n layout = layouts[i];\n const { fullSize } = layout.box;\n const stack = stacks[layout.stack];\n const factor = stack && layout.stackWeight / stack.weight;\n if (layout.horizontal) {\n layout.width = factor ? factor * vBoxMaxWidth : fullSize && params.availableWidth;\n layout.height = hBoxMaxHeight;\n } else {\n layout.width = vBoxMaxWidth;\n layout.height = factor ? factor * hBoxMaxHeight : fullSize && params.availableHeight;\n }\n }\n return stacks;\n}\nfunction buildLayoutBoxes(boxes) {\n const layoutBoxes = wrapBoxes(boxes);\n const fullSize = sortByWeight(layoutBoxes.filter((wrap)=>wrap.box.fullSize), true);\n const left = sortByWeight(filterByPosition(layoutBoxes, 'left'), true);\n const right = sortByWeight(filterByPosition(layoutBoxes, 'right'));\n const top = sortByWeight(filterByPosition(layoutBoxes, 'top'), true);\n const bottom = sortByWeight(filterByPosition(layoutBoxes, 'bottom'));\n const centerHorizontal = filterDynamicPositionByAxis(layoutBoxes, 'x');\n const centerVertical = filterDynamicPositionByAxis(layoutBoxes, 'y');\n return {\n fullSize,\n leftAndTop: left.concat(top),\n rightAndBottom: right.concat(centerVertical).concat(bottom).concat(centerHorizontal),\n chartArea: filterByPosition(layoutBoxes, 'chartArea'),\n vertical: left.concat(right).concat(centerVertical),\n horizontal: top.concat(bottom).concat(centerHorizontal)\n };\n}\nfunction getCombinedMax(maxPadding, chartArea, a, b) {\n return Math.max(maxPadding[a], chartArea[a]) + Math.max(maxPadding[b], chartArea[b]);\n}\nfunction updateMaxPadding(maxPadding, boxPadding) {\n maxPadding.top = Math.max(maxPadding.top, boxPadding.top);\n maxPadding.left = Math.max(maxPadding.left, boxPadding.left);\n maxPadding.bottom = Math.max(maxPadding.bottom, boxPadding.bottom);\n maxPadding.right = Math.max(maxPadding.right, boxPadding.right);\n}\nfunction updateDims(chartArea, params, layout, stacks) {\n const { pos , box } = layout;\n const maxPadding = chartArea.maxPadding;\n if (!isObject(pos)) {\n if (layout.size) {\n chartArea[pos] -= layout.size;\n }\n const stack = stacks[layout.stack] || {\n size: 0,\n count: 1\n };\n stack.size = Math.max(stack.size, layout.horizontal ? box.height : box.width);\n layout.size = stack.size / stack.count;\n chartArea[pos] += layout.size;\n }\n if (box.getPadding) {\n updateMaxPadding(maxPadding, box.getPadding());\n }\n const newWidth = Math.max(0, params.outerWidth - getCombinedMax(maxPadding, chartArea, 'left', 'right'));\n const newHeight = Math.max(0, params.outerHeight - getCombinedMax(maxPadding, chartArea, 'top', 'bottom'));\n const widthChanged = newWidth !== chartArea.w;\n const heightChanged = newHeight !== chartArea.h;\n chartArea.w = newWidth;\n chartArea.h = newHeight;\n return layout.horizontal ? {\n same: widthChanged,\n other: heightChanged\n } : {\n same: heightChanged,\n other: widthChanged\n };\n}\nfunction handleMaxPadding(chartArea) {\n const maxPadding = chartArea.maxPadding;\n function updatePos(pos) {\n const change = Math.max(maxPadding[pos] - chartArea[pos], 0);\n chartArea[pos] += change;\n return change;\n }\n chartArea.y += updatePos('top');\n chartArea.x += updatePos('left');\n updatePos('right');\n updatePos('bottom');\n}\nfunction getMargins(horizontal, chartArea) {\n const maxPadding = chartArea.maxPadding;\n function marginForPositions(positions) {\n const margin = {\n left: 0,\n top: 0,\n right: 0,\n bottom: 0\n };\n positions.forEach((pos)=>{\n margin[pos] = Math.max(chartArea[pos], maxPadding[pos]);\n });\n return margin;\n }\n return horizontal ? marginForPositions([\n 'left',\n 'right'\n ]) : marginForPositions([\n 'top',\n 'bottom'\n ]);\n}\nfunction fitBoxes(boxes, chartArea, params, stacks) {\n const refitBoxes = [];\n let i, ilen, layout, box, refit, changed;\n for(i = 0, ilen = boxes.length, refit = 0; i < ilen; ++i){\n layout = boxes[i];\n box = layout.box;\n box.update(layout.width || chartArea.w, layout.height || chartArea.h, getMargins(layout.horizontal, chartArea));\n const { same , other } = updateDims(chartArea, params, layout, stacks);\n refit |= same && refitBoxes.length;\n changed = changed || other;\n if (!box.fullSize) {\n refitBoxes.push(layout);\n }\n }\n return refit && fitBoxes(refitBoxes, chartArea, params, stacks) || changed;\n}\nfunction setBoxDims(box, left, top, width, height) {\n box.top = top;\n box.left = left;\n box.right = left + width;\n box.bottom = top + height;\n box.width = width;\n box.height = height;\n}\nfunction placeBoxes(boxes, chartArea, params, stacks) {\n const userPadding = params.padding;\n let { x , y } = chartArea;\n for (const layout of boxes){\n const box = layout.box;\n const stack = stacks[layout.stack] || {\n count: 1,\n placed: 0,\n weight: 1\n };\n const weight = layout.stackWeight / stack.weight || 1;\n if (layout.horizontal) {\n const width = chartArea.w * weight;\n const height = stack.size || box.height;\n if (defined(stack.start)) {\n y = stack.start;\n }\n if (box.fullSize) {\n setBoxDims(box, userPadding.left, y, params.outerWidth - userPadding.right - userPadding.left, height);\n } else {\n setBoxDims(box, chartArea.left + stack.placed, y, width, height);\n }\n stack.start = y;\n stack.placed += width;\n y = box.bottom;\n } else {\n const height = chartArea.h * weight;\n const width = stack.size || box.width;\n if (defined(stack.start)) {\n x = stack.start;\n }\n if (box.fullSize) {\n setBoxDims(box, x, userPadding.top, width, params.outerHeight - userPadding.bottom - userPadding.top);\n } else {\n setBoxDims(box, x, chartArea.top + stack.placed, width, height);\n }\n stack.start = x;\n stack.placed += height;\n x = box.right;\n }\n }\n chartArea.x = x;\n chartArea.y = y;\n}\nvar layouts = {\n addBox (chart, item) {\n if (!chart.boxes) {\n chart.boxes = [];\n }\n item.fullSize = item.fullSize || false;\n item.position = item.position || 'top';\n item.weight = item.weight || 0;\n item._layers = item._layers || function() {\n return [\n {\n z: 0,\n draw (chartArea) {\n item.draw(chartArea);\n }\n }\n ];\n };\n chart.boxes.push(item);\n },\n removeBox (chart, layoutItem) {\n const index = chart.boxes ? chart.boxes.indexOf(layoutItem) : -1;\n if (index !== -1) {\n chart.boxes.splice(index, 1);\n }\n },\n configure (chart, item, options) {\n item.fullSize = options.fullSize;\n item.position = options.position;\n item.weight = options.weight;\n },\n update (chart, width, height, minPadding) {\n if (!chart) {\n return;\n }\n const padding = toPadding(chart.options.layout.padding);\n const availableWidth = Math.max(width - padding.width, 0);\n const availableHeight = Math.max(height - padding.height, 0);\n const boxes = buildLayoutBoxes(chart.boxes);\n const verticalBoxes = boxes.vertical;\n const horizontalBoxes = boxes.horizontal;\n each(chart.boxes, (box)=>{\n if (typeof box.beforeLayout === 'function') {\n box.beforeLayout();\n }\n });\n const visibleVerticalBoxCount = verticalBoxes.reduce((total, wrap)=>wrap.box.options && wrap.box.options.display === false ? total : total + 1, 0) || 1;\n const params = Object.freeze({\n outerWidth: width,\n outerHeight: height,\n padding,\n availableWidth,\n availableHeight,\n vBoxMaxWidth: availableWidth / 2 / visibleVerticalBoxCount,\n hBoxMaxHeight: availableHeight / 2\n });\n const maxPadding = Object.assign({}, padding);\n updateMaxPadding(maxPadding, toPadding(minPadding));\n const chartArea = Object.assign({\n maxPadding,\n w: availableWidth,\n h: availableHeight,\n x: padding.left,\n y: padding.top\n }, padding);\n const stacks = setLayoutDims(verticalBoxes.concat(horizontalBoxes), params);\n fitBoxes(boxes.fullSize, chartArea, params, stacks);\n fitBoxes(verticalBoxes, chartArea, params, stacks);\n if (fitBoxes(horizontalBoxes, chartArea, params, stacks)) {\n fitBoxes(verticalBoxes, chartArea, params, stacks);\n }\n handleMaxPadding(chartArea);\n placeBoxes(boxes.leftAndTop, chartArea, params, stacks);\n chartArea.x += chartArea.w;\n chartArea.y += chartArea.h;\n placeBoxes(boxes.rightAndBottom, chartArea, params, stacks);\n chart.chartArea = {\n left: chartArea.left,\n top: chartArea.top,\n right: chartArea.left + chartArea.w,\n bottom: chartArea.top + chartArea.h,\n height: chartArea.h,\n width: chartArea.w\n };\n each(boxes.chartArea, (layout)=>{\n const box = layout.box;\n Object.assign(box, chart.chartArea);\n box.update(chartArea.w, chartArea.h, {\n left: 0,\n top: 0,\n right: 0,\n bottom: 0\n });\n });\n }\n};\n\nclass BasePlatform {\n acquireContext(canvas, aspectRatio) {}\n releaseContext(context) {\n return false;\n }\n addEventListener(chart, type, listener) {}\n removeEventListener(chart, type, listener) {}\n getDevicePixelRatio() {\n return 1;\n }\n getMaximumSize(element, width, height, aspectRatio) {\n width = Math.max(0, width || element.width);\n height = height || element.height;\n return {\n width,\n height: Math.max(0, aspectRatio ? Math.floor(width / aspectRatio) : height)\n };\n }\n isAttached(canvas) {\n return true;\n }\n updateConfig(config) {\n }\n}\n\nclass BasicPlatform extends BasePlatform {\n acquireContext(item) {\n return item && item.getContext && item.getContext('2d') || null;\n }\n updateConfig(config) {\n config.options.animation = false;\n }\n}\n\nconst EXPANDO_KEY = '$chartjs';\n const EVENT_TYPES = {\n touchstart: 'mousedown',\n touchmove: 'mousemove',\n touchend: 'mouseup',\n pointerenter: 'mouseenter',\n pointerdown: 'mousedown',\n pointermove: 'mousemove',\n pointerup: 'mouseup',\n pointerleave: 'mouseout',\n pointerout: 'mouseout'\n};\nconst isNullOrEmpty = (value)=>value === null || value === '';\n function initCanvas(canvas, aspectRatio) {\n const style = canvas.style;\n const renderHeight = canvas.getAttribute('height');\n const renderWidth = canvas.getAttribute('width');\n canvas[EXPANDO_KEY] = {\n initial: {\n height: renderHeight,\n width: renderWidth,\n style: {\n display: style.display,\n height: style.height,\n width: style.width\n }\n }\n };\n style.display = style.display || 'block';\n style.boxSizing = style.boxSizing || 'border-box';\n if (isNullOrEmpty(renderWidth)) {\n const displayWidth = readUsedSize(canvas, 'width');\n if (displayWidth !== undefined) {\n canvas.width = displayWidth;\n }\n }\n if (isNullOrEmpty(renderHeight)) {\n if (canvas.style.height === '') {\n canvas.height = canvas.width / (aspectRatio || 2);\n } else {\n const displayHeight = readUsedSize(canvas, 'height');\n if (displayHeight !== undefined) {\n canvas.height = displayHeight;\n }\n }\n }\n return canvas;\n}\nconst eventListenerOptions = supportsEventListenerOptions ? {\n passive: true\n} : false;\nfunction addListener(node, type, listener) {\n node.addEventListener(type, listener, eventListenerOptions);\n}\nfunction removeListener(chart, type, listener) {\n chart.canvas.removeEventListener(type, listener, eventListenerOptions);\n}\nfunction fromNativeEvent(event, chart) {\n const type = EVENT_TYPES[event.type] || event.type;\n const { x , y } = getRelativePosition(event, chart);\n return {\n type,\n chart,\n native: event,\n x: x !== undefined ? x : null,\n y: y !== undefined ? y : null\n };\n}\nfunction nodeListContains(nodeList, canvas) {\n for (const node of nodeList){\n if (node === canvas || node.contains(canvas)) {\n return true;\n }\n }\n}\nfunction createAttachObserver(chart, type, listener) {\n const canvas = chart.canvas;\n const observer = new MutationObserver((entries)=>{\n let trigger = false;\n for (const entry of entries){\n trigger = trigger || nodeListContains(entry.addedNodes, canvas);\n trigger = trigger && !nodeListContains(entry.removedNodes, canvas);\n }\n if (trigger) {\n listener();\n }\n });\n observer.observe(document, {\n childList: true,\n subtree: true\n });\n return observer;\n}\nfunction createDetachObserver(chart, type, listener) {\n const canvas = chart.canvas;\n const observer = new MutationObserver((entries)=>{\n let trigger = false;\n for (const entry of entries){\n trigger = trigger || nodeListContains(entry.removedNodes, canvas);\n trigger = trigger && !nodeListContains(entry.addedNodes, canvas);\n }\n if (trigger) {\n listener();\n }\n });\n observer.observe(document, {\n childList: true,\n subtree: true\n });\n return observer;\n}\nconst drpListeningCharts = new Map();\nlet oldDevicePixelRatio = 0;\nfunction onWindowResize() {\n const dpr = window.devicePixelRatio;\n if (dpr === oldDevicePixelRatio) {\n return;\n }\n oldDevicePixelRatio = dpr;\n drpListeningCharts.forEach((resize, chart)=>{\n if (chart.currentDevicePixelRatio !== dpr) {\n resize();\n }\n });\n}\nfunction listenDevicePixelRatioChanges(chart, resize) {\n if (!drpListeningCharts.size) {\n window.addEventListener('resize', onWindowResize);\n }\n drpListeningCharts.set(chart, resize);\n}\nfunction unlistenDevicePixelRatioChanges(chart) {\n drpListeningCharts.delete(chart);\n if (!drpListeningCharts.size) {\n window.removeEventListener('resize', onWindowResize);\n }\n}\nfunction createResizeObserver(chart, type, listener) {\n const canvas = chart.canvas;\n const container = canvas && _getParentNode(canvas);\n if (!container) {\n return;\n }\n const resize = throttled((width, height)=>{\n const w = container.clientWidth;\n listener(width, height);\n if (w < container.clientWidth) {\n listener();\n }\n }, window);\n const observer = new ResizeObserver((entries)=>{\n const entry = entries[0];\n const width = entry.contentRect.width;\n const height = entry.contentRect.height;\n if (width === 0 && height === 0) {\n return;\n }\n resize(width, height);\n });\n observer.observe(container);\n listenDevicePixelRatioChanges(chart, resize);\n return observer;\n}\nfunction releaseObserver(chart, type, observer) {\n if (observer) {\n observer.disconnect();\n }\n if (type === 'resize') {\n unlistenDevicePixelRatioChanges(chart);\n }\n}\nfunction createProxyAndListen(chart, type, listener) {\n const canvas = chart.canvas;\n const proxy = throttled((event)=>{\n if (chart.ctx !== null) {\n listener(fromNativeEvent(event, chart));\n }\n }, chart);\n addListener(canvas, type, proxy);\n return proxy;\n}\n class DomPlatform extends BasePlatform {\n acquireContext(canvas, aspectRatio) {\n const context = canvas && canvas.getContext && canvas.getContext('2d');\n if (context && context.canvas === canvas) {\n initCanvas(canvas, aspectRatio);\n return context;\n }\n return null;\n }\n releaseContext(context) {\n const canvas = context.canvas;\n if (!canvas[EXPANDO_KEY]) {\n return false;\n }\n const initial = canvas[EXPANDO_KEY].initial;\n [\n 'height',\n 'width'\n ].forEach((prop)=>{\n const value = initial[prop];\n if (isNullOrUndef(value)) {\n canvas.removeAttribute(prop);\n } else {\n canvas.setAttribute(prop, value);\n }\n });\n const style = initial.style || {};\n Object.keys(style).forEach((key)=>{\n canvas.style[key] = style[key];\n });\n canvas.width = canvas.width;\n delete canvas[EXPANDO_KEY];\n return true;\n }\n addEventListener(chart, type, listener) {\n this.removeEventListener(chart, type);\n const proxies = chart.$proxies || (chart.$proxies = {});\n const handlers = {\n attach: createAttachObserver,\n detach: createDetachObserver,\n resize: createResizeObserver\n };\n const handler = handlers[type] || createProxyAndListen;\n proxies[type] = handler(chart, type, listener);\n }\n removeEventListener(chart, type) {\n const proxies = chart.$proxies || (chart.$proxies = {});\n const proxy = proxies[type];\n if (!proxy) {\n return;\n }\n const handlers = {\n attach: releaseObserver,\n detach: releaseObserver,\n resize: releaseObserver\n };\n const handler = handlers[type] || removeListener;\n handler(chart, type, proxy);\n proxies[type] = undefined;\n }\n getDevicePixelRatio() {\n return window.devicePixelRatio;\n }\n getMaximumSize(canvas, width, height, aspectRatio) {\n return getMaximumSize(canvas, width, height, aspectRatio);\n }\n isAttached(canvas) {\n const container = _getParentNode(canvas);\n return !!(container && container.isConnected);\n }\n}\n\nfunction _detectPlatform(canvas) {\n if (!_isDomSupported() || typeof OffscreenCanvas !== 'undefined' && canvas instanceof OffscreenCanvas) {\n return BasicPlatform;\n }\n return DomPlatform;\n}\n\nclass Element {\n static defaults = {};\n static defaultRoutes = undefined;\n x;\n y;\n active = false;\n options;\n $animations;\n tooltipPosition(useFinalPosition) {\n const { x , y } = this.getProps([\n 'x',\n 'y'\n ], useFinalPosition);\n return {\n x,\n y\n };\n }\n hasValue() {\n return isNumber(this.x) && isNumber(this.y);\n }\n getProps(props, final) {\n const anims = this.$animations;\n if (!final || !anims) {\n // let's not create an object, if not needed\n return this;\n }\n const ret = {};\n props.forEach((prop)=>{\n ret[prop] = anims[prop] && anims[prop].active() ? anims[prop]._to : this[prop];\n });\n return ret;\n }\n}\n\nfunction autoSkip(scale, ticks) {\n const tickOpts = scale.options.ticks;\n const determinedMaxTicks = determineMaxTicks(scale);\n const ticksLimit = Math.min(tickOpts.maxTicksLimit || determinedMaxTicks, determinedMaxTicks);\n const majorIndices = tickOpts.major.enabled ? getMajorIndices(ticks) : [];\n const numMajorIndices = majorIndices.length;\n const first = majorIndices[0];\n const last = majorIndices[numMajorIndices - 1];\n const newTicks = [];\n if (numMajorIndices > ticksLimit) {\n skipMajors(ticks, newTicks, majorIndices, numMajorIndices / ticksLimit);\n return newTicks;\n }\n const spacing = calculateSpacing(majorIndices, ticks, ticksLimit);\n if (numMajorIndices > 0) {\n let i, ilen;\n const avgMajorSpacing = numMajorIndices > 1 ? Math.round((last - first) / (numMajorIndices - 1)) : null;\n skip(ticks, newTicks, spacing, isNullOrUndef(avgMajorSpacing) ? 0 : first - avgMajorSpacing, first);\n for(i = 0, ilen = numMajorIndices - 1; i < ilen; i++){\n skip(ticks, newTicks, spacing, majorIndices[i], majorIndices[i + 1]);\n }\n skip(ticks, newTicks, spacing, last, isNullOrUndef(avgMajorSpacing) ? ticks.length : last + avgMajorSpacing);\n return newTicks;\n }\n skip(ticks, newTicks, spacing);\n return newTicks;\n}\nfunction determineMaxTicks(scale) {\n const offset = scale.options.offset;\n const tickLength = scale._tickSize();\n const maxScale = scale._length / tickLength + (offset ? 0 : 1);\n const maxChart = scale._maxLength / tickLength;\n return Math.floor(Math.min(maxScale, maxChart));\n}\n function calculateSpacing(majorIndices, ticks, ticksLimit) {\n const evenMajorSpacing = getEvenSpacing(majorIndices);\n const spacing = ticks.length / ticksLimit;\n if (!evenMajorSpacing) {\n return Math.max(spacing, 1);\n }\n const factors = _factorize(evenMajorSpacing);\n for(let i = 0, ilen = factors.length - 1; i < ilen; i++){\n const factor = factors[i];\n if (factor > spacing) {\n return factor;\n }\n }\n return Math.max(spacing, 1);\n}\n function getMajorIndices(ticks) {\n const result = [];\n let i, ilen;\n for(i = 0, ilen = ticks.length; i < ilen; i++){\n if (ticks[i].major) {\n result.push(i);\n }\n }\n return result;\n}\n function skipMajors(ticks, newTicks, majorIndices, spacing) {\n let count = 0;\n let next = majorIndices[0];\n let i;\n spacing = Math.ceil(spacing);\n for(i = 0; i < ticks.length; i++){\n if (i === next) {\n newTicks.push(ticks[i]);\n count++;\n next = majorIndices[count * spacing];\n }\n }\n}\n function skip(ticks, newTicks, spacing, majorStart, majorEnd) {\n const start = valueOrDefault(majorStart, 0);\n const end = Math.min(valueOrDefault(majorEnd, ticks.length), ticks.length);\n let count = 0;\n let length, i, next;\n spacing = Math.ceil(spacing);\n if (majorEnd) {\n length = majorEnd - majorStart;\n spacing = length / Math.floor(length / spacing);\n }\n next = start;\n while(next < 0){\n count++;\n next = Math.round(start + count * spacing);\n }\n for(i = Math.max(start, 0); i < end; i++){\n if (i === next) {\n newTicks.push(ticks[i]);\n count++;\n next = Math.round(start + count * spacing);\n }\n }\n}\n function getEvenSpacing(arr) {\n const len = arr.length;\n let i, diff;\n if (len < 2) {\n return false;\n }\n for(diff = arr[0], i = 1; i < len; ++i){\n if (arr[i] - arr[i - 1] !== diff) {\n return false;\n }\n }\n return diff;\n}\n\nconst reverseAlign = (align)=>align === 'left' ? 'right' : align === 'right' ? 'left' : align;\nconst offsetFromEdge = (scale, edge, offset)=>edge === 'top' || edge === 'left' ? scale[edge] + offset : scale[edge] - offset;\nconst getTicksLimit = (ticksLength, maxTicksLimit)=>Math.min(maxTicksLimit || ticksLength, ticksLength);\n function sample(arr, numItems) {\n const result = [];\n const increment = arr.length / numItems;\n const len = arr.length;\n let i = 0;\n for(; i < len; i += increment){\n result.push(arr[Math.floor(i)]);\n }\n return result;\n}\n function getPixelForGridLine(scale, index, offsetGridLines) {\n const length = scale.ticks.length;\n const validIndex = Math.min(index, length - 1);\n const start = scale._startPixel;\n const end = scale._endPixel;\n const epsilon = 1e-6;\n let lineValue = scale.getPixelForTick(validIndex);\n let offset;\n if (offsetGridLines) {\n if (length === 1) {\n offset = Math.max(lineValue - start, end - lineValue);\n } else if (index === 0) {\n offset = (scale.getPixelForTick(1) - lineValue) / 2;\n } else {\n offset = (lineValue - scale.getPixelForTick(validIndex - 1)) / 2;\n }\n lineValue += validIndex < index ? offset : -offset;\n if (lineValue < start - epsilon || lineValue > end + epsilon) {\n return;\n }\n }\n return lineValue;\n}\n function garbageCollect(caches, length) {\n each(caches, (cache)=>{\n const gc = cache.gc;\n const gcLen = gc.length / 2;\n let i;\n if (gcLen > length) {\n for(i = 0; i < gcLen; ++i){\n delete cache.data[gc[i]];\n }\n gc.splice(0, gcLen);\n }\n });\n}\n function getTickMarkLength(options) {\n return options.drawTicks ? options.tickLength : 0;\n}\n function getTitleHeight(options, fallback) {\n if (!options.display) {\n return 0;\n }\n const font = toFont(options.font, fallback);\n const padding = toPadding(options.padding);\n const lines = isArray(options.text) ? options.text.length : 1;\n return lines * font.lineHeight + padding.height;\n}\nfunction createScaleContext(parent, scale) {\n return createContext(parent, {\n scale,\n type: 'scale'\n });\n}\nfunction createTickContext(parent, index, tick) {\n return createContext(parent, {\n tick,\n index,\n type: 'tick'\n });\n}\nfunction titleAlign(align, position, reverse) {\n let ret = _toLeftRightCenter(align);\n if (reverse && position !== 'right' || !reverse && position === 'right') {\n ret = reverseAlign(ret);\n }\n return ret;\n}\nfunction titleArgs(scale, offset, position, align) {\n const { top , left , bottom , right , chart } = scale;\n const { chartArea , scales } = chart;\n let rotation = 0;\n let maxWidth, titleX, titleY;\n const height = bottom - top;\n const width = right - left;\n if (scale.isHorizontal()) {\n titleX = _alignStartEnd(align, left, right);\n if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n titleY = scales[positionAxisID].getPixelForValue(value) + height - offset;\n } else if (position === 'center') {\n titleY = (chartArea.bottom + chartArea.top) / 2 + height - offset;\n } else {\n titleY = offsetFromEdge(scale, position, offset);\n }\n maxWidth = right - left;\n } else {\n if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n titleX = scales[positionAxisID].getPixelForValue(value) - width + offset;\n } else if (position === 'center') {\n titleX = (chartArea.left + chartArea.right) / 2 - width + offset;\n } else {\n titleX = offsetFromEdge(scale, position, offset);\n }\n titleY = _alignStartEnd(align, bottom, top);\n rotation = position === 'left' ? -HALF_PI : HALF_PI;\n }\n return {\n titleX,\n titleY,\n maxWidth,\n rotation\n };\n}\nclass Scale extends Element {\n constructor(cfg){\n super();\n this.id = cfg.id;\n this.type = cfg.type;\n this.options = undefined;\n this.ctx = cfg.ctx;\n this.chart = cfg.chart;\n this.top = undefined;\n this.bottom = undefined;\n this.left = undefined;\n this.right = undefined;\n this.width = undefined;\n this.height = undefined;\n this._margins = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n };\n this.maxWidth = undefined;\n this.maxHeight = undefined;\n this.paddingTop = undefined;\n this.paddingBottom = undefined;\n this.paddingLeft = undefined;\n this.paddingRight = undefined;\n this.axis = undefined;\n this.labelRotation = undefined;\n this.min = undefined;\n this.max = undefined;\n this._range = undefined;\n this.ticks = [];\n this._gridLineItems = null;\n this._labelItems = null;\n this._labelSizes = null;\n this._length = 0;\n this._maxLength = 0;\n this._longestTextCache = {};\n this._startPixel = undefined;\n this._endPixel = undefined;\n this._reversePixels = false;\n this._userMax = undefined;\n this._userMin = undefined;\n this._suggestedMax = undefined;\n this._suggestedMin = undefined;\n this._ticksLength = 0;\n this._borderValue = 0;\n this._cache = {};\n this._dataLimitsCached = false;\n this.$context = undefined;\n }\n init(options) {\n this.options = options.setContext(this.getContext());\n this.axis = options.axis;\n this._userMin = this.parse(options.min);\n this._userMax = this.parse(options.max);\n this._suggestedMin = this.parse(options.suggestedMin);\n this._suggestedMax = this.parse(options.suggestedMax);\n }\n parse(raw, index) {\n return raw;\n }\n getUserBounds() {\n let { _userMin , _userMax , _suggestedMin , _suggestedMax } = this;\n _userMin = finiteOrDefault(_userMin, Number.POSITIVE_INFINITY);\n _userMax = finiteOrDefault(_userMax, Number.NEGATIVE_INFINITY);\n _suggestedMin = finiteOrDefault(_suggestedMin, Number.POSITIVE_INFINITY);\n _suggestedMax = finiteOrDefault(_suggestedMax, Number.NEGATIVE_INFINITY);\n return {\n min: finiteOrDefault(_userMin, _suggestedMin),\n max: finiteOrDefault(_userMax, _suggestedMax),\n minDefined: isNumberFinite(_userMin),\n maxDefined: isNumberFinite(_userMax)\n };\n }\n getMinMax(canStack) {\n let { min , max , minDefined , maxDefined } = this.getUserBounds();\n let range;\n if (minDefined && maxDefined) {\n return {\n min,\n max\n };\n }\n const metas = this.getMatchingVisibleMetas();\n for(let i = 0, ilen = metas.length; i < ilen; ++i){\n range = metas[i].controller.getMinMax(this, canStack);\n if (!minDefined) {\n min = Math.min(min, range.min);\n }\n if (!maxDefined) {\n max = Math.max(max, range.max);\n }\n }\n min = maxDefined && min > max ? max : min;\n max = minDefined && min > max ? min : max;\n return {\n min: finiteOrDefault(min, finiteOrDefault(max, min)),\n max: finiteOrDefault(max, finiteOrDefault(min, max))\n };\n }\n getPadding() {\n return {\n left: this.paddingLeft || 0,\n top: this.paddingTop || 0,\n right: this.paddingRight || 0,\n bottom: this.paddingBottom || 0\n };\n }\n getTicks() {\n return this.ticks;\n }\n getLabels() {\n const data = this.chart.data;\n return this.options.labels || (this.isHorizontal() ? data.xLabels : data.yLabels) || data.labels || [];\n }\n getLabelItems(chartArea = this.chart.chartArea) {\n const items = this._labelItems || (this._labelItems = this._computeLabelItems(chartArea));\n return items;\n }\n beforeLayout() {\n this._cache = {};\n this._dataLimitsCached = false;\n }\n beforeUpdate() {\n callback(this.options.beforeUpdate, [\n this\n ]);\n }\n update(maxWidth, maxHeight, margins) {\n const { beginAtZero , grace , ticks: tickOpts } = this.options;\n const sampleSize = tickOpts.sampleSize;\n this.beforeUpdate();\n this.maxWidth = maxWidth;\n this.maxHeight = maxHeight;\n this._margins = margins = Object.assign({\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n }, margins);\n this.ticks = null;\n this._labelSizes = null;\n this._gridLineItems = null;\n this._labelItems = null;\n this.beforeSetDimensions();\n this.setDimensions();\n this.afterSetDimensions();\n this._maxLength = this.isHorizontal() ? this.width + margins.left + margins.right : this.height + margins.top + margins.bottom;\n if (!this._dataLimitsCached) {\n this.beforeDataLimits();\n this.determineDataLimits();\n this.afterDataLimits();\n this._range = _addGrace(this, grace, beginAtZero);\n this._dataLimitsCached = true;\n }\n this.beforeBuildTicks();\n this.ticks = this.buildTicks() || [];\n this.afterBuildTicks();\n const samplingEnabled = sampleSize < this.ticks.length;\n this._convertTicksToLabels(samplingEnabled ? sample(this.ticks, sampleSize) : this.ticks);\n this.configure();\n this.beforeCalculateLabelRotation();\n this.calculateLabelRotation();\n this.afterCalculateLabelRotation();\n if (tickOpts.display && (tickOpts.autoSkip || tickOpts.source === 'auto')) {\n this.ticks = autoSkip(this, this.ticks);\n this._labelSizes = null;\n this.afterAutoSkip();\n }\n if (samplingEnabled) {\n this._convertTicksToLabels(this.ticks);\n }\n this.beforeFit();\n this.fit();\n this.afterFit();\n this.afterUpdate();\n }\n configure() {\n let reversePixels = this.options.reverse;\n let startPixel, endPixel;\n if (this.isHorizontal()) {\n startPixel = this.left;\n endPixel = this.right;\n } else {\n startPixel = this.top;\n endPixel = this.bottom;\n reversePixels = !reversePixels;\n }\n this._startPixel = startPixel;\n this._endPixel = endPixel;\n this._reversePixels = reversePixels;\n this._length = endPixel - startPixel;\n this._alignToPixels = this.options.alignToPixels;\n }\n afterUpdate() {\n callback(this.options.afterUpdate, [\n this\n ]);\n }\n beforeSetDimensions() {\n callback(this.options.beforeSetDimensions, [\n this\n ]);\n }\n setDimensions() {\n if (this.isHorizontal()) {\n this.width = this.maxWidth;\n this.left = 0;\n this.right = this.width;\n } else {\n this.height = this.maxHeight;\n this.top = 0;\n this.bottom = this.height;\n }\n this.paddingLeft = 0;\n this.paddingTop = 0;\n this.paddingRight = 0;\n this.paddingBottom = 0;\n }\n afterSetDimensions() {\n callback(this.options.afterSetDimensions, [\n this\n ]);\n }\n _callHooks(name) {\n this.chart.notifyPlugins(name, this.getContext());\n callback(this.options[name], [\n this\n ]);\n }\n beforeDataLimits() {\n this._callHooks('beforeDataLimits');\n }\n determineDataLimits() {}\n afterDataLimits() {\n this._callHooks('afterDataLimits');\n }\n beforeBuildTicks() {\n this._callHooks('beforeBuildTicks');\n }\n buildTicks() {\n return [];\n }\n afterBuildTicks() {\n this._callHooks('afterBuildTicks');\n }\n beforeTickToLabelConversion() {\n callback(this.options.beforeTickToLabelConversion, [\n this\n ]);\n }\n generateTickLabels(ticks) {\n const tickOpts = this.options.ticks;\n let i, ilen, tick;\n for(i = 0, ilen = ticks.length; i < ilen; i++){\n tick = ticks[i];\n tick.label = callback(tickOpts.callback, [\n tick.value,\n i,\n ticks\n ], this);\n }\n }\n afterTickToLabelConversion() {\n callback(this.options.afterTickToLabelConversion, [\n this\n ]);\n }\n beforeCalculateLabelRotation() {\n callback(this.options.beforeCalculateLabelRotation, [\n this\n ]);\n }\n calculateLabelRotation() {\n const options = this.options;\n const tickOpts = options.ticks;\n const numTicks = getTicksLimit(this.ticks.length, options.ticks.maxTicksLimit);\n const minRotation = tickOpts.minRotation || 0;\n const maxRotation = tickOpts.maxRotation;\n let labelRotation = minRotation;\n let tickWidth, maxHeight, maxLabelDiagonal;\n if (!this._isVisible() || !tickOpts.display || minRotation >= maxRotation || numTicks <= 1 || !this.isHorizontal()) {\n this.labelRotation = minRotation;\n return;\n }\n const labelSizes = this._getLabelSizes();\n const maxLabelWidth = labelSizes.widest.width;\n const maxLabelHeight = labelSizes.highest.height;\n const maxWidth = _limitValue(this.chart.width - maxLabelWidth, 0, this.maxWidth);\n tickWidth = options.offset ? this.maxWidth / numTicks : maxWidth / (numTicks - 1);\n if (maxLabelWidth + 6 > tickWidth) {\n tickWidth = maxWidth / (numTicks - (options.offset ? 0.5 : 1));\n maxHeight = this.maxHeight - getTickMarkLength(options.grid) - tickOpts.padding - getTitleHeight(options.title, this.chart.options.font);\n maxLabelDiagonal = Math.sqrt(maxLabelWidth * maxLabelWidth + maxLabelHeight * maxLabelHeight);\n labelRotation = toDegrees(Math.min(Math.asin(_limitValue((labelSizes.highest.height + 6) / tickWidth, -1, 1)), Math.asin(_limitValue(maxHeight / maxLabelDiagonal, -1, 1)) - Math.asin(_limitValue(maxLabelHeight / maxLabelDiagonal, -1, 1))));\n labelRotation = Math.max(minRotation, Math.min(maxRotation, labelRotation));\n }\n this.labelRotation = labelRotation;\n }\n afterCalculateLabelRotation() {\n callback(this.options.afterCalculateLabelRotation, [\n this\n ]);\n }\n afterAutoSkip() {}\n beforeFit() {\n callback(this.options.beforeFit, [\n this\n ]);\n }\n fit() {\n const minSize = {\n width: 0,\n height: 0\n };\n const { chart , options: { ticks: tickOpts , title: titleOpts , grid: gridOpts } } = this;\n const display = this._isVisible();\n const isHorizontal = this.isHorizontal();\n if (display) {\n const titleHeight = getTitleHeight(titleOpts, chart.options.font);\n if (isHorizontal) {\n minSize.width = this.maxWidth;\n minSize.height = getTickMarkLength(gridOpts) + titleHeight;\n } else {\n minSize.height = this.maxHeight;\n minSize.width = getTickMarkLength(gridOpts) + titleHeight;\n }\n if (tickOpts.display && this.ticks.length) {\n const { first , last , widest , highest } = this._getLabelSizes();\n const tickPadding = tickOpts.padding * 2;\n const angleRadians = toRadians(this.labelRotation);\n const cos = Math.cos(angleRadians);\n const sin = Math.sin(angleRadians);\n if (isHorizontal) {\n const labelHeight = tickOpts.mirror ? 0 : sin * widest.width + cos * highest.height;\n minSize.height = Math.min(this.maxHeight, minSize.height + labelHeight + tickPadding);\n } else {\n const labelWidth = tickOpts.mirror ? 0 : cos * widest.width + sin * highest.height;\n minSize.width = Math.min(this.maxWidth, minSize.width + labelWidth + tickPadding);\n }\n this._calculatePadding(first, last, sin, cos);\n }\n }\n this._handleMargins();\n if (isHorizontal) {\n this.width = this._length = chart.width - this._margins.left - this._margins.right;\n this.height = minSize.height;\n } else {\n this.width = minSize.width;\n this.height = this._length = chart.height - this._margins.top - this._margins.bottom;\n }\n }\n _calculatePadding(first, last, sin, cos) {\n const { ticks: { align , padding } , position } = this.options;\n const isRotated = this.labelRotation !== 0;\n const labelsBelowTicks = position !== 'top' && this.axis === 'x';\n if (this.isHorizontal()) {\n const offsetLeft = this.getPixelForTick(0) - this.left;\n const offsetRight = this.right - this.getPixelForTick(this.ticks.length - 1);\n let paddingLeft = 0;\n let paddingRight = 0;\n if (isRotated) {\n if (labelsBelowTicks) {\n paddingLeft = cos * first.width;\n paddingRight = sin * last.height;\n } else {\n paddingLeft = sin * first.height;\n paddingRight = cos * last.width;\n }\n } else if (align === 'start') {\n paddingRight = last.width;\n } else if (align === 'end') {\n paddingLeft = first.width;\n } else if (align !== 'inner') {\n paddingLeft = first.width / 2;\n paddingRight = last.width / 2;\n }\n this.paddingLeft = Math.max((paddingLeft - offsetLeft + padding) * this.width / (this.width - offsetLeft), 0);\n this.paddingRight = Math.max((paddingRight - offsetRight + padding) * this.width / (this.width - offsetRight), 0);\n } else {\n let paddingTop = last.height / 2;\n let paddingBottom = first.height / 2;\n if (align === 'start') {\n paddingTop = 0;\n paddingBottom = first.height;\n } else if (align === 'end') {\n paddingTop = last.height;\n paddingBottom = 0;\n }\n this.paddingTop = paddingTop + padding;\n this.paddingBottom = paddingBottom + padding;\n }\n }\n _handleMargins() {\n if (this._margins) {\n this._margins.left = Math.max(this.paddingLeft, this._margins.left);\n this._margins.top = Math.max(this.paddingTop, this._margins.top);\n this._margins.right = Math.max(this.paddingRight, this._margins.right);\n this._margins.bottom = Math.max(this.paddingBottom, this._margins.bottom);\n }\n }\n afterFit() {\n callback(this.options.afterFit, [\n this\n ]);\n }\n isHorizontal() {\n const { axis , position } = this.options;\n return position === 'top' || position === 'bottom' || axis === 'x';\n }\n isFullSize() {\n return this.options.fullSize;\n }\n _convertTicksToLabels(ticks) {\n this.beforeTickToLabelConversion();\n this.generateTickLabels(ticks);\n let i, ilen;\n for(i = 0, ilen = ticks.length; i < ilen; i++){\n if (isNullOrUndef(ticks[i].label)) {\n ticks.splice(i, 1);\n ilen--;\n i--;\n }\n }\n this.afterTickToLabelConversion();\n }\n _getLabelSizes() {\n let labelSizes = this._labelSizes;\n if (!labelSizes) {\n const sampleSize = this.options.ticks.sampleSize;\n let ticks = this.ticks;\n if (sampleSize < ticks.length) {\n ticks = sample(ticks, sampleSize);\n }\n this._labelSizes = labelSizes = this._computeLabelSizes(ticks, ticks.length, this.options.ticks.maxTicksLimit);\n }\n return labelSizes;\n }\n _computeLabelSizes(ticks, length, maxTicksLimit) {\n const { ctx , _longestTextCache: caches } = this;\n const widths = [];\n const heights = [];\n const increment = Math.floor(length / getTicksLimit(length, maxTicksLimit));\n let widestLabelSize = 0;\n let highestLabelSize = 0;\n let i, j, jlen, label, tickFont, fontString, cache, lineHeight, width, height, nestedLabel;\n for(i = 0; i < length; i += increment){\n label = ticks[i].label;\n tickFont = this._resolveTickFontOptions(i);\n ctx.font = fontString = tickFont.string;\n cache = caches[fontString] = caches[fontString] || {\n data: {},\n gc: []\n };\n lineHeight = tickFont.lineHeight;\n width = height = 0;\n if (!isNullOrUndef(label) && !isArray(label)) {\n width = _measureText(ctx, cache.data, cache.gc, width, label);\n height = lineHeight;\n } else if (isArray(label)) {\n for(j = 0, jlen = label.length; j < jlen; ++j){\n nestedLabel = label[j];\n if (!isNullOrUndef(nestedLabel) && !isArray(nestedLabel)) {\n width = _measureText(ctx, cache.data, cache.gc, width, nestedLabel);\n height += lineHeight;\n }\n }\n }\n widths.push(width);\n heights.push(height);\n widestLabelSize = Math.max(width, widestLabelSize);\n highestLabelSize = Math.max(height, highestLabelSize);\n }\n garbageCollect(caches, length);\n const widest = widths.indexOf(widestLabelSize);\n const highest = heights.indexOf(highestLabelSize);\n const valueAt = (idx)=>({\n width: widths[idx] || 0,\n height: heights[idx] || 0\n });\n return {\n first: valueAt(0),\n last: valueAt(length - 1),\n widest: valueAt(widest),\n highest: valueAt(highest),\n widths,\n heights\n };\n }\n getLabelForValue(value) {\n return value;\n }\n getPixelForValue(value, index) {\n return NaN;\n }\n getValueForPixel(pixel) {}\n getPixelForTick(index) {\n const ticks = this.ticks;\n if (index < 0 || index > ticks.length - 1) {\n return null;\n }\n return this.getPixelForValue(ticks[index].value);\n }\n getPixelForDecimal(decimal) {\n if (this._reversePixels) {\n decimal = 1 - decimal;\n }\n const pixel = this._startPixel + decimal * this._length;\n return _int16Range(this._alignToPixels ? _alignPixel(this.chart, pixel, 0) : pixel);\n }\n getDecimalForPixel(pixel) {\n const decimal = (pixel - this._startPixel) / this._length;\n return this._reversePixels ? 1 - decimal : decimal;\n }\n getBasePixel() {\n return this.getPixelForValue(this.getBaseValue());\n }\n getBaseValue() {\n const { min , max } = this;\n return min < 0 && max < 0 ? max : min > 0 && max > 0 ? min : 0;\n }\n getContext(index) {\n const ticks = this.ticks || [];\n if (index >= 0 && index < ticks.length) {\n const tick = ticks[index];\n return tick.$context || (tick.$context = createTickContext(this.getContext(), index, tick));\n }\n return this.$context || (this.$context = createScaleContext(this.chart.getContext(), this));\n }\n _tickSize() {\n const optionTicks = this.options.ticks;\n const rot = toRadians(this.labelRotation);\n const cos = Math.abs(Math.cos(rot));\n const sin = Math.abs(Math.sin(rot));\n const labelSizes = this._getLabelSizes();\n const padding = optionTicks.autoSkipPadding || 0;\n const w = labelSizes ? labelSizes.widest.width + padding : 0;\n const h = labelSizes ? labelSizes.highest.height + padding : 0;\n return this.isHorizontal() ? h * cos > w * sin ? w / cos : h / sin : h * sin < w * cos ? h / cos : w / sin;\n }\n _isVisible() {\n const display = this.options.display;\n if (display !== 'auto') {\n return !!display;\n }\n return this.getMatchingVisibleMetas().length > 0;\n }\n _computeGridLineItems(chartArea) {\n const axis = this.axis;\n const chart = this.chart;\n const options = this.options;\n const { grid , position , border } = options;\n const offset = grid.offset;\n const isHorizontal = this.isHorizontal();\n const ticks = this.ticks;\n const ticksLength = ticks.length + (offset ? 1 : 0);\n const tl = getTickMarkLength(grid);\n const items = [];\n const borderOpts = border.setContext(this.getContext());\n const axisWidth = borderOpts.display ? borderOpts.width : 0;\n const axisHalfWidth = axisWidth / 2;\n const alignBorderValue = function(pixel) {\n return _alignPixel(chart, pixel, axisWidth);\n };\n let borderValue, i, lineValue, alignedLineValue;\n let tx1, ty1, tx2, ty2, x1, y1, x2, y2;\n if (position === 'top') {\n borderValue = alignBorderValue(this.bottom);\n ty1 = this.bottom - tl;\n ty2 = borderValue - axisHalfWidth;\n y1 = alignBorderValue(chartArea.top) + axisHalfWidth;\n y2 = chartArea.bottom;\n } else if (position === 'bottom') {\n borderValue = alignBorderValue(this.top);\n y1 = chartArea.top;\n y2 = alignBorderValue(chartArea.bottom) - axisHalfWidth;\n ty1 = borderValue + axisHalfWidth;\n ty2 = this.top + tl;\n } else if (position === 'left') {\n borderValue = alignBorderValue(this.right);\n tx1 = this.right - tl;\n tx2 = borderValue - axisHalfWidth;\n x1 = alignBorderValue(chartArea.left) + axisHalfWidth;\n x2 = chartArea.right;\n } else if (position === 'right') {\n borderValue = alignBorderValue(this.left);\n x1 = chartArea.left;\n x2 = alignBorderValue(chartArea.right) - axisHalfWidth;\n tx1 = borderValue + axisHalfWidth;\n tx2 = this.left + tl;\n } else if (axis === 'x') {\n if (position === 'center') {\n borderValue = alignBorderValue((chartArea.top + chartArea.bottom) / 2 + 0.5);\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\n }\n y1 = chartArea.top;\n y2 = chartArea.bottom;\n ty1 = borderValue + axisHalfWidth;\n ty2 = ty1 + tl;\n } else if (axis === 'y') {\n if (position === 'center') {\n borderValue = alignBorderValue((chartArea.left + chartArea.right) / 2);\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\n }\n tx1 = borderValue - axisHalfWidth;\n tx2 = tx1 - tl;\n x1 = chartArea.left;\n x2 = chartArea.right;\n }\n const limit = valueOrDefault(options.ticks.maxTicksLimit, ticksLength);\n const step = Math.max(1, Math.ceil(ticksLength / limit));\n for(i = 0; i < ticksLength; i += step){\n const context = this.getContext(i);\n const optsAtIndex = grid.setContext(context);\n const optsAtIndexBorder = border.setContext(context);\n const lineWidth = optsAtIndex.lineWidth;\n const lineColor = optsAtIndex.color;\n const borderDash = optsAtIndexBorder.dash || [];\n const borderDashOffset = optsAtIndexBorder.dashOffset;\n const tickWidth = optsAtIndex.tickWidth;\n const tickColor = optsAtIndex.tickColor;\n const tickBorderDash = optsAtIndex.tickBorderDash || [];\n const tickBorderDashOffset = optsAtIndex.tickBorderDashOffset;\n lineValue = getPixelForGridLine(this, i, offset);\n if (lineValue === undefined) {\n continue;\n }\n alignedLineValue = _alignPixel(chart, lineValue, lineWidth);\n if (isHorizontal) {\n tx1 = tx2 = x1 = x2 = alignedLineValue;\n } else {\n ty1 = ty2 = y1 = y2 = alignedLineValue;\n }\n items.push({\n tx1,\n ty1,\n tx2,\n ty2,\n x1,\n y1,\n x2,\n y2,\n width: lineWidth,\n color: lineColor,\n borderDash,\n borderDashOffset,\n tickWidth,\n tickColor,\n tickBorderDash,\n tickBorderDashOffset\n });\n }\n this._ticksLength = ticksLength;\n this._borderValue = borderValue;\n return items;\n }\n _computeLabelItems(chartArea) {\n const axis = this.axis;\n const options = this.options;\n const { position , ticks: optionTicks } = options;\n const isHorizontal = this.isHorizontal();\n const ticks = this.ticks;\n const { align , crossAlign , padding , mirror } = optionTicks;\n const tl = getTickMarkLength(options.grid);\n const tickAndPadding = tl + padding;\n const hTickAndPadding = mirror ? -padding : tickAndPadding;\n const rotation = -toRadians(this.labelRotation);\n const items = [];\n let i, ilen, tick, label, x, y, textAlign, pixel, font, lineHeight, lineCount, textOffset;\n let textBaseline = 'middle';\n if (position === 'top') {\n y = this.bottom - hTickAndPadding;\n textAlign = this._getXAxisLabelAlignment();\n } else if (position === 'bottom') {\n y = this.top + hTickAndPadding;\n textAlign = this._getXAxisLabelAlignment();\n } else if (position === 'left') {\n const ret = this._getYAxisLabelAlignment(tl);\n textAlign = ret.textAlign;\n x = ret.x;\n } else if (position === 'right') {\n const ret = this._getYAxisLabelAlignment(tl);\n textAlign = ret.textAlign;\n x = ret.x;\n } else if (axis === 'x') {\n if (position === 'center') {\n y = (chartArea.top + chartArea.bottom) / 2 + tickAndPadding;\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n y = this.chart.scales[positionAxisID].getPixelForValue(value) + tickAndPadding;\n }\n textAlign = this._getXAxisLabelAlignment();\n } else if (axis === 'y') {\n if (position === 'center') {\n x = (chartArea.left + chartArea.right) / 2 - tickAndPadding;\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n x = this.chart.scales[positionAxisID].getPixelForValue(value);\n }\n textAlign = this._getYAxisLabelAlignment(tl).textAlign;\n }\n if (axis === 'y') {\n if (align === 'start') {\n textBaseline = 'top';\n } else if (align === 'end') {\n textBaseline = 'bottom';\n }\n }\n const labelSizes = this._getLabelSizes();\n for(i = 0, ilen = ticks.length; i < ilen; ++i){\n tick = ticks[i];\n label = tick.label;\n const optsAtIndex = optionTicks.setContext(this.getContext(i));\n pixel = this.getPixelForTick(i) + optionTicks.labelOffset;\n font = this._resolveTickFontOptions(i);\n lineHeight = font.lineHeight;\n lineCount = isArray(label) ? label.length : 1;\n const halfCount = lineCount / 2;\n const color = optsAtIndex.color;\n const strokeColor = optsAtIndex.textStrokeColor;\n const strokeWidth = optsAtIndex.textStrokeWidth;\n let tickTextAlign = textAlign;\n if (isHorizontal) {\n x = pixel;\n if (textAlign === 'inner') {\n if (i === ilen - 1) {\n tickTextAlign = !this.options.reverse ? 'right' : 'left';\n } else if (i === 0) {\n tickTextAlign = !this.options.reverse ? 'left' : 'right';\n } else {\n tickTextAlign = 'center';\n }\n }\n if (position === 'top') {\n if (crossAlign === 'near' || rotation !== 0) {\n textOffset = -lineCount * lineHeight + lineHeight / 2;\n } else if (crossAlign === 'center') {\n textOffset = -labelSizes.highest.height / 2 - halfCount * lineHeight + lineHeight;\n } else {\n textOffset = -labelSizes.highest.height + lineHeight / 2;\n }\n } else {\n if (crossAlign === 'near' || rotation !== 0) {\n textOffset = lineHeight / 2;\n } else if (crossAlign === 'center') {\n textOffset = labelSizes.highest.height / 2 - halfCount * lineHeight;\n } else {\n textOffset = labelSizes.highest.height - lineCount * lineHeight;\n }\n }\n if (mirror) {\n textOffset *= -1;\n }\n if (rotation !== 0 && !optsAtIndex.showLabelBackdrop) {\n x += lineHeight / 2 * Math.sin(rotation);\n }\n } else {\n y = pixel;\n textOffset = (1 - lineCount) * lineHeight / 2;\n }\n let backdrop;\n if (optsAtIndex.showLabelBackdrop) {\n const labelPadding = toPadding(optsAtIndex.backdropPadding);\n const height = labelSizes.heights[i];\n const width = labelSizes.widths[i];\n let top = textOffset - labelPadding.top;\n let left = 0 - labelPadding.left;\n switch(textBaseline){\n case 'middle':\n top -= height / 2;\n break;\n case 'bottom':\n top -= height;\n break;\n }\n switch(textAlign){\n case 'center':\n left -= width / 2;\n break;\n case 'right':\n left -= width;\n break;\n case 'inner':\n if (i === ilen - 1) {\n left -= width;\n } else if (i > 0) {\n left -= width / 2;\n }\n break;\n }\n backdrop = {\n left,\n top,\n width: width + labelPadding.width,\n height: height + labelPadding.height,\n color: optsAtIndex.backdropColor\n };\n }\n items.push({\n label,\n font,\n textOffset,\n options: {\n rotation,\n color,\n strokeColor,\n strokeWidth,\n textAlign: tickTextAlign,\n textBaseline,\n translation: [\n x,\n y\n ],\n backdrop\n }\n });\n }\n return items;\n }\n _getXAxisLabelAlignment() {\n const { position , ticks } = this.options;\n const rotation = -toRadians(this.labelRotation);\n if (rotation) {\n return position === 'top' ? 'left' : 'right';\n }\n let align = 'center';\n if (ticks.align === 'start') {\n align = 'left';\n } else if (ticks.align === 'end') {\n align = 'right';\n } else if (ticks.align === 'inner') {\n align = 'inner';\n }\n return align;\n }\n _getYAxisLabelAlignment(tl) {\n const { position , ticks: { crossAlign , mirror , padding } } = this.options;\n const labelSizes = this._getLabelSizes();\n const tickAndPadding = tl + padding;\n const widest = labelSizes.widest.width;\n let textAlign;\n let x;\n if (position === 'left') {\n if (mirror) {\n x = this.right + padding;\n if (crossAlign === 'near') {\n textAlign = 'left';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x += widest / 2;\n } else {\n textAlign = 'right';\n x += widest;\n }\n } else {\n x = this.right - tickAndPadding;\n if (crossAlign === 'near') {\n textAlign = 'right';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x -= widest / 2;\n } else {\n textAlign = 'left';\n x = this.left;\n }\n }\n } else if (position === 'right') {\n if (mirror) {\n x = this.left + padding;\n if (crossAlign === 'near') {\n textAlign = 'right';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x -= widest / 2;\n } else {\n textAlign = 'left';\n x -= widest;\n }\n } else {\n x = this.left + tickAndPadding;\n if (crossAlign === 'near') {\n textAlign = 'left';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x += widest / 2;\n } else {\n textAlign = 'right';\n x = this.right;\n }\n }\n } else {\n textAlign = 'right';\n }\n return {\n textAlign,\n x\n };\n }\n _computeLabelArea() {\n if (this.options.ticks.mirror) {\n return;\n }\n const chart = this.chart;\n const position = this.options.position;\n if (position === 'left' || position === 'right') {\n return {\n top: 0,\n left: this.left,\n bottom: chart.height,\n right: this.right\n };\n }\n if (position === 'top' || position === 'bottom') {\n return {\n top: this.top,\n left: 0,\n bottom: this.bottom,\n right: chart.width\n };\n }\n }\n drawBackground() {\n const { ctx , options: { backgroundColor } , left , top , width , height } = this;\n if (backgroundColor) {\n ctx.save();\n ctx.fillStyle = backgroundColor;\n ctx.fillRect(left, top, width, height);\n ctx.restore();\n }\n }\n getLineWidthForValue(value) {\n const grid = this.options.grid;\n if (!this._isVisible() || !grid.display) {\n return 0;\n }\n const ticks = this.ticks;\n const index = ticks.findIndex((t)=>t.value === value);\n if (index >= 0) {\n const opts = grid.setContext(this.getContext(index));\n return opts.lineWidth;\n }\n return 0;\n }\n drawGrid(chartArea) {\n const grid = this.options.grid;\n const ctx = this.ctx;\n const items = this._gridLineItems || (this._gridLineItems = this._computeGridLineItems(chartArea));\n let i, ilen;\n const drawLine = (p1, p2, style)=>{\n if (!style.width || !style.color) {\n return;\n }\n ctx.save();\n ctx.lineWidth = style.width;\n ctx.strokeStyle = style.color;\n ctx.setLineDash(style.borderDash || []);\n ctx.lineDashOffset = style.borderDashOffset;\n ctx.beginPath();\n ctx.moveTo(p1.x, p1.y);\n ctx.lineTo(p2.x, p2.y);\n ctx.stroke();\n ctx.restore();\n };\n if (grid.display) {\n for(i = 0, ilen = items.length; i < ilen; ++i){\n const item = items[i];\n if (grid.drawOnChartArea) {\n drawLine({\n x: item.x1,\n y: item.y1\n }, {\n x: item.x2,\n y: item.y2\n }, item);\n }\n if (grid.drawTicks) {\n drawLine({\n x: item.tx1,\n y: item.ty1\n }, {\n x: item.tx2,\n y: item.ty2\n }, {\n color: item.tickColor,\n width: item.tickWidth,\n borderDash: item.tickBorderDash,\n borderDashOffset: item.tickBorderDashOffset\n });\n }\n }\n }\n }\n drawBorder() {\n const { chart , ctx , options: { border , grid } } = this;\n const borderOpts = border.setContext(this.getContext());\n const axisWidth = border.display ? borderOpts.width : 0;\n if (!axisWidth) {\n return;\n }\n const lastLineWidth = grid.setContext(this.getContext(0)).lineWidth;\n const borderValue = this._borderValue;\n let x1, x2, y1, y2;\n if (this.isHorizontal()) {\n x1 = _alignPixel(chart, this.left, axisWidth) - axisWidth / 2;\n x2 = _alignPixel(chart, this.right, lastLineWidth) + lastLineWidth / 2;\n y1 = y2 = borderValue;\n } else {\n y1 = _alignPixel(chart, this.top, axisWidth) - axisWidth / 2;\n y2 = _alignPixel(chart, this.bottom, lastLineWidth) + lastLineWidth / 2;\n x1 = x2 = borderValue;\n }\n ctx.save();\n ctx.lineWidth = borderOpts.width;\n ctx.strokeStyle = borderOpts.color;\n ctx.beginPath();\n ctx.moveTo(x1, y1);\n ctx.lineTo(x2, y2);\n ctx.stroke();\n ctx.restore();\n }\n drawLabels(chartArea) {\n const optionTicks = this.options.ticks;\n if (!optionTicks.display) {\n return;\n }\n const ctx = this.ctx;\n const area = this._computeLabelArea();\n if (area) {\n clipArea(ctx, area);\n }\n const items = this.getLabelItems(chartArea);\n for (const item of items){\n const renderTextOptions = item.options;\n const tickFont = item.font;\n const label = item.label;\n const y = item.textOffset;\n renderText(ctx, label, 0, y, tickFont, renderTextOptions);\n }\n if (area) {\n unclipArea(ctx);\n }\n }\n drawTitle() {\n const { ctx , options: { position , title , reverse } } = this;\n if (!title.display) {\n return;\n }\n const font = toFont(title.font);\n const padding = toPadding(title.padding);\n const align = title.align;\n let offset = font.lineHeight / 2;\n if (position === 'bottom' || position === 'center' || isObject(position)) {\n offset += padding.bottom;\n if (isArray(title.text)) {\n offset += font.lineHeight * (title.text.length - 1);\n }\n } else {\n offset += padding.top;\n }\n const { titleX , titleY , maxWidth , rotation } = titleArgs(this, offset, position, align);\n renderText(ctx, title.text, 0, 0, font, {\n color: title.color,\n maxWidth,\n rotation,\n textAlign: titleAlign(align, position, reverse),\n textBaseline: 'middle',\n translation: [\n titleX,\n titleY\n ]\n });\n }\n draw(chartArea) {\n if (!this._isVisible()) {\n return;\n }\n this.drawBackground();\n this.drawGrid(chartArea);\n this.drawBorder();\n this.drawTitle();\n this.drawLabels(chartArea);\n }\n _layers() {\n const opts = this.options;\n const tz = opts.ticks && opts.ticks.z || 0;\n const gz = valueOrDefault(opts.grid && opts.grid.z, -1);\n const bz = valueOrDefault(opts.border && opts.border.z, 0);\n if (!this._isVisible() || this.draw !== Scale.prototype.draw) {\n return [\n {\n z: tz,\n draw: (chartArea)=>{\n this.draw(chartArea);\n }\n }\n ];\n }\n return [\n {\n z: gz,\n draw: (chartArea)=>{\n this.drawBackground();\n this.drawGrid(chartArea);\n this.drawTitle();\n }\n },\n {\n z: bz,\n draw: ()=>{\n this.drawBorder();\n }\n },\n {\n z: tz,\n draw: (chartArea)=>{\n this.drawLabels(chartArea);\n }\n }\n ];\n }\n getMatchingVisibleMetas(type) {\n const metas = this.chart.getSortedVisibleDatasetMetas();\n const axisID = this.axis + 'AxisID';\n const result = [];\n let i, ilen;\n for(i = 0, ilen = metas.length; i < ilen; ++i){\n const meta = metas[i];\n if (meta[axisID] === this.id && (!type || meta.type === type)) {\n result.push(meta);\n }\n }\n return result;\n }\n _resolveTickFontOptions(index) {\n const opts = this.options.ticks.setContext(this.getContext(index));\n return toFont(opts.font);\n }\n _maxDigits() {\n const fontSize = this._resolveTickFontOptions(0).lineHeight;\n return (this.isHorizontal() ? this.width : this.height) / fontSize;\n }\n}\n\nclass TypedRegistry {\n constructor(type, scope, override){\n this.type = type;\n this.scope = scope;\n this.override = override;\n this.items = Object.create(null);\n }\n isForType(type) {\n return Object.prototype.isPrototypeOf.call(this.type.prototype, type.prototype);\n }\n register(item) {\n const proto = Object.getPrototypeOf(item);\n let parentScope;\n if (isIChartComponent(proto)) {\n parentScope = this.register(proto);\n }\n const items = this.items;\n const id = item.id;\n const scope = this.scope + '.' + id;\n if (!id) {\n throw new Error('class does not have id: ' + item);\n }\n if (id in items) {\n return scope;\n }\n items[id] = item;\n registerDefaults(item, scope, parentScope);\n if (this.override) {\n defaults.override(item.id, item.overrides);\n }\n return scope;\n }\n get(id) {\n return this.items[id];\n }\n unregister(item) {\n const items = this.items;\n const id = item.id;\n const scope = this.scope;\n if (id in items) {\n delete items[id];\n }\n if (scope && id in defaults[scope]) {\n delete defaults[scope][id];\n if (this.override) {\n delete overrides[id];\n }\n }\n }\n}\nfunction registerDefaults(item, scope, parentScope) {\n const itemDefaults = merge(Object.create(null), [\n parentScope ? defaults.get(parentScope) : {},\n defaults.get(scope),\n item.defaults\n ]);\n defaults.set(scope, itemDefaults);\n if (item.defaultRoutes) {\n routeDefaults(scope, item.defaultRoutes);\n }\n if (item.descriptors) {\n defaults.describe(scope, item.descriptors);\n }\n}\nfunction routeDefaults(scope, routes) {\n Object.keys(routes).forEach((property)=>{\n const propertyParts = property.split('.');\n const sourceName = propertyParts.pop();\n const sourceScope = [\n scope\n ].concat(propertyParts).join('.');\n const parts = routes[property].split('.');\n const targetName = parts.pop();\n const targetScope = parts.join('.');\n defaults.route(sourceScope, sourceName, targetScope, targetName);\n });\n}\nfunction isIChartComponent(proto) {\n return 'id' in proto && 'defaults' in proto;\n}\n\nclass Registry {\n constructor(){\n this.controllers = new TypedRegistry(DatasetController, 'datasets', true);\n this.elements = new TypedRegistry(Element, 'elements');\n this.plugins = new TypedRegistry(Object, 'plugins');\n this.scales = new TypedRegistry(Scale, 'scales');\n this._typedRegistries = [\n this.controllers,\n this.scales,\n this.elements\n ];\n }\n add(...args) {\n this._each('register', args);\n }\n remove(...args) {\n this._each('unregister', args);\n }\n addControllers(...args) {\n this._each('register', args, this.controllers);\n }\n addElements(...args) {\n this._each('register', args, this.elements);\n }\n addPlugins(...args) {\n this._each('register', args, this.plugins);\n }\n addScales(...args) {\n this._each('register', args, this.scales);\n }\n getController(id) {\n return this._get(id, this.controllers, 'controller');\n }\n getElement(id) {\n return this._get(id, this.elements, 'element');\n }\n getPlugin(id) {\n return this._get(id, this.plugins, 'plugin');\n }\n getScale(id) {\n return this._get(id, this.scales, 'scale');\n }\n removeControllers(...args) {\n this._each('unregister', args, this.controllers);\n }\n removeElements(...args) {\n this._each('unregister', args, this.elements);\n }\n removePlugins(...args) {\n this._each('unregister', args, this.plugins);\n }\n removeScales(...args) {\n this._each('unregister', args, this.scales);\n }\n _each(method, args, typedRegistry) {\n [\n ...args\n ].forEach((arg)=>{\n const reg = typedRegistry || this._getRegistryForType(arg);\n if (typedRegistry || reg.isForType(arg) || reg === this.plugins && arg.id) {\n this._exec(method, reg, arg);\n } else {\n each(arg, (item)=>{\n const itemReg = typedRegistry || this._getRegistryForType(item);\n this._exec(method, itemReg, item);\n });\n }\n });\n }\n _exec(method, registry, component) {\n const camelMethod = _capitalize(method);\n callback(component['before' + camelMethod], [], component);\n registry[method](component);\n callback(component['after' + camelMethod], [], component);\n }\n _getRegistryForType(type) {\n for(let i = 0; i < this._typedRegistries.length; i++){\n const reg = this._typedRegistries[i];\n if (reg.isForType(type)) {\n return reg;\n }\n }\n return this.plugins;\n }\n _get(id, typedRegistry, type) {\n const item = typedRegistry.get(id);\n if (item === undefined) {\n throw new Error('\"' + id + '\" is not a registered ' + type + '.');\n }\n return item;\n }\n}\nvar registry = /* #__PURE__ */ new Registry();\n\nclass PluginService {\n constructor(){\n this._init = [];\n }\n notify(chart, hook, args, filter) {\n if (hook === 'beforeInit') {\n this._init = this._createDescriptors(chart, true);\n this._notify(this._init, chart, 'install');\n }\n const descriptors = filter ? this._descriptors(chart).filter(filter) : this._descriptors(chart);\n const result = this._notify(descriptors, chart, hook, args);\n if (hook === 'afterDestroy') {\n this._notify(descriptors, chart, 'stop');\n this._notify(this._init, chart, 'uninstall');\n }\n return result;\n }\n _notify(descriptors, chart, hook, args) {\n args = args || {};\n for (const descriptor of descriptors){\n const plugin = descriptor.plugin;\n const method = plugin[hook];\n const params = [\n chart,\n args,\n descriptor.options\n ];\n if (callback(method, params, plugin) === false && args.cancelable) {\n return false;\n }\n }\n return true;\n }\n invalidate() {\n if (!isNullOrUndef(this._cache)) {\n this._oldCache = this._cache;\n this._cache = undefined;\n }\n }\n _descriptors(chart) {\n if (this._cache) {\n return this._cache;\n }\n const descriptors = this._cache = this._createDescriptors(chart);\n this._notifyStateChanges(chart);\n return descriptors;\n }\n _createDescriptors(chart, all) {\n const config = chart && chart.config;\n const options = valueOrDefault(config.options && config.options.plugins, {});\n const plugins = allPlugins(config);\n return options === false && !all ? [] : createDescriptors(chart, plugins, options, all);\n }\n _notifyStateChanges(chart) {\n const previousDescriptors = this._oldCache || [];\n const descriptors = this._cache;\n const diff = (a, b)=>a.filter((x)=>!b.some((y)=>x.plugin.id === y.plugin.id));\n this._notify(diff(previousDescriptors, descriptors), chart, 'stop');\n this._notify(diff(descriptors, previousDescriptors), chart, 'start');\n }\n}\n function allPlugins(config) {\n const localIds = {};\n const plugins = [];\n const keys = Object.keys(registry.plugins.items);\n for(let i = 0; i < keys.length; i++){\n plugins.push(registry.getPlugin(keys[i]));\n }\n const local = config.plugins || [];\n for(let i = 0; i < local.length; i++){\n const plugin = local[i];\n if (plugins.indexOf(plugin) === -1) {\n plugins.push(plugin);\n localIds[plugin.id] = true;\n }\n }\n return {\n plugins,\n localIds\n };\n}\nfunction getOpts(options, all) {\n if (!all && options === false) {\n return null;\n }\n if (options === true) {\n return {};\n }\n return options;\n}\nfunction createDescriptors(chart, { plugins , localIds }, options, all) {\n const result = [];\n const context = chart.getContext();\n for (const plugin of plugins){\n const id = plugin.id;\n const opts = getOpts(options[id], all);\n if (opts === null) {\n continue;\n }\n result.push({\n plugin,\n options: pluginOpts(chart.config, {\n plugin,\n local: localIds[id]\n }, opts, context)\n });\n }\n return result;\n}\nfunction pluginOpts(config, { plugin , local }, opts, context) {\n const keys = config.pluginScopeKeys(plugin);\n const scopes = config.getOptionScopes(opts, keys);\n if (local && plugin.defaults) {\n scopes.push(plugin.defaults);\n }\n return config.createResolver(scopes, context, [\n ''\n ], {\n scriptable: false,\n indexable: false,\n allKeys: true\n });\n}\n\nfunction getIndexAxis(type, options) {\n const datasetDefaults = defaults.datasets[type] || {};\n const datasetOptions = (options.datasets || {})[type] || {};\n return datasetOptions.indexAxis || options.indexAxis || datasetDefaults.indexAxis || 'x';\n}\nfunction getAxisFromDefaultScaleID(id, indexAxis) {\n let axis = id;\n if (id === '_index_') {\n axis = indexAxis;\n } else if (id === '_value_') {\n axis = indexAxis === 'x' ? 'y' : 'x';\n }\n return axis;\n}\nfunction getDefaultScaleIDFromAxis(axis, indexAxis) {\n return axis === indexAxis ? '_index_' : '_value_';\n}\nfunction idMatchesAxis(id) {\n if (id === 'x' || id === 'y' || id === 'r') {\n return id;\n }\n}\nfunction axisFromPosition(position) {\n if (position === 'top' || position === 'bottom') {\n return 'x';\n }\n if (position === 'left' || position === 'right') {\n return 'y';\n }\n}\nfunction determineAxis(id, ...scaleOptions) {\n if (idMatchesAxis(id)) {\n return id;\n }\n for (const opts of scaleOptions){\n const axis = opts.axis || axisFromPosition(opts.position) || id.length > 1 && idMatchesAxis(id[0].toLowerCase());\n if (axis) {\n return axis;\n }\n }\n throw new Error(`Cannot determine type of '${id}' axis. Please provide 'axis' or 'position' option.`);\n}\nfunction getAxisFromDataset(id, axis, dataset) {\n if (dataset[axis + 'AxisID'] === id) {\n return {\n axis\n };\n }\n}\nfunction retrieveAxisFromDatasets(id, config) {\n if (config.data && config.data.datasets) {\n const boundDs = config.data.datasets.filter((d)=>d.xAxisID === id || d.yAxisID === id);\n if (boundDs.length) {\n return getAxisFromDataset(id, 'x', boundDs[0]) || getAxisFromDataset(id, 'y', boundDs[0]);\n }\n }\n return {};\n}\nfunction mergeScaleConfig(config, options) {\n const chartDefaults = overrides[config.type] || {\n scales: {}\n };\n const configScales = options.scales || {};\n const chartIndexAxis = getIndexAxis(config.type, options);\n const scales = Object.create(null);\n Object.keys(configScales).forEach((id)=>{\n const scaleConf = configScales[id];\n if (!isObject(scaleConf)) {\n return console.error(`Invalid scale configuration for scale: ${id}`);\n }\n if (scaleConf._proxy) {\n return console.warn(`Ignoring resolver passed as options for scale: ${id}`);\n }\n const axis = determineAxis(id, scaleConf, retrieveAxisFromDatasets(id, config), defaults.scales[scaleConf.type]);\n const defaultId = getDefaultScaleIDFromAxis(axis, chartIndexAxis);\n const defaultScaleOptions = chartDefaults.scales || {};\n scales[id] = mergeIf(Object.create(null), [\n {\n axis\n },\n scaleConf,\n defaultScaleOptions[axis],\n defaultScaleOptions[defaultId]\n ]);\n });\n config.data.datasets.forEach((dataset)=>{\n const type = dataset.type || config.type;\n const indexAxis = dataset.indexAxis || getIndexAxis(type, options);\n const datasetDefaults = overrides[type] || {};\n const defaultScaleOptions = datasetDefaults.scales || {};\n Object.keys(defaultScaleOptions).forEach((defaultID)=>{\n const axis = getAxisFromDefaultScaleID(defaultID, indexAxis);\n const id = dataset[axis + 'AxisID'] || axis;\n scales[id] = scales[id] || Object.create(null);\n mergeIf(scales[id], [\n {\n axis\n },\n configScales[id],\n defaultScaleOptions[defaultID]\n ]);\n });\n });\n Object.keys(scales).forEach((key)=>{\n const scale = scales[key];\n mergeIf(scale, [\n defaults.scales[scale.type],\n defaults.scale\n ]);\n });\n return scales;\n}\nfunction initOptions(config) {\n const options = config.options || (config.options = {});\n options.plugins = valueOrDefault(options.plugins, {});\n options.scales = mergeScaleConfig(config, options);\n}\nfunction initData(data) {\n data = data || {};\n data.datasets = data.datasets || [];\n data.labels = data.labels || [];\n return data;\n}\nfunction initConfig(config) {\n config = config || {};\n config.data = initData(config.data);\n initOptions(config);\n return config;\n}\nconst keyCache = new Map();\nconst keysCached = new Set();\nfunction cachedKeys(cacheKey, generate) {\n let keys = keyCache.get(cacheKey);\n if (!keys) {\n keys = generate();\n keyCache.set(cacheKey, keys);\n keysCached.add(keys);\n }\n return keys;\n}\nconst addIfFound = (set, obj, key)=>{\n const opts = resolveObjectKey(obj, key);\n if (opts !== undefined) {\n set.add(opts);\n }\n};\nclass Config {\n constructor(config){\n this._config = initConfig(config);\n this._scopeCache = new Map();\n this._resolverCache = new Map();\n }\n get platform() {\n return this._config.platform;\n }\n get type() {\n return this._config.type;\n }\n set type(type) {\n this._config.type = type;\n }\n get data() {\n return this._config.data;\n }\n set data(data) {\n this._config.data = initData(data);\n }\n get options() {\n return this._config.options;\n }\n set options(options) {\n this._config.options = options;\n }\n get plugins() {\n return this._config.plugins;\n }\n update() {\n const config = this._config;\n this.clearCache();\n initOptions(config);\n }\n clearCache() {\n this._scopeCache.clear();\n this._resolverCache.clear();\n }\n datasetScopeKeys(datasetType) {\n return cachedKeys(datasetType, ()=>[\n [\n `datasets.${datasetType}`,\n ''\n ]\n ]);\n }\n datasetAnimationScopeKeys(datasetType, transition) {\n return cachedKeys(`${datasetType}.transition.${transition}`, ()=>[\n [\n `datasets.${datasetType}.transitions.${transition}`,\n `transitions.${transition}`\n ],\n [\n `datasets.${datasetType}`,\n ''\n ]\n ]);\n }\n datasetElementScopeKeys(datasetType, elementType) {\n return cachedKeys(`${datasetType}-${elementType}`, ()=>[\n [\n `datasets.${datasetType}.elements.${elementType}`,\n `datasets.${datasetType}`,\n `elements.${elementType}`,\n ''\n ]\n ]);\n }\n pluginScopeKeys(plugin) {\n const id = plugin.id;\n const type = this.type;\n return cachedKeys(`${type}-plugin-${id}`, ()=>[\n [\n `plugins.${id}`,\n ...plugin.additionalOptionScopes || []\n ]\n ]);\n }\n _cachedScopes(mainScope, resetCache) {\n const _scopeCache = this._scopeCache;\n let cache = _scopeCache.get(mainScope);\n if (!cache || resetCache) {\n cache = new Map();\n _scopeCache.set(mainScope, cache);\n }\n return cache;\n }\n getOptionScopes(mainScope, keyLists, resetCache) {\n const { options , type } = this;\n const cache = this._cachedScopes(mainScope, resetCache);\n const cached = cache.get(keyLists);\n if (cached) {\n return cached;\n }\n const scopes = new Set();\n keyLists.forEach((keys)=>{\n if (mainScope) {\n scopes.add(mainScope);\n keys.forEach((key)=>addIfFound(scopes, mainScope, key));\n }\n keys.forEach((key)=>addIfFound(scopes, options, key));\n keys.forEach((key)=>addIfFound(scopes, overrides[type] || {}, key));\n keys.forEach((key)=>addIfFound(scopes, defaults, key));\n keys.forEach((key)=>addIfFound(scopes, descriptors, key));\n });\n const array = Array.from(scopes);\n if (array.length === 0) {\n array.push(Object.create(null));\n }\n if (keysCached.has(keyLists)) {\n cache.set(keyLists, array);\n }\n return array;\n }\n chartOptionScopes() {\n const { options , type } = this;\n return [\n options,\n overrides[type] || {},\n defaults.datasets[type] || {},\n {\n type\n },\n defaults,\n descriptors\n ];\n }\n resolveNamedOptions(scopes, names, context, prefixes = [\n ''\n ]) {\n const result = {\n $shared: true\n };\n const { resolver , subPrefixes } = getResolver(this._resolverCache, scopes, prefixes);\n let options = resolver;\n if (needContext(resolver, names)) {\n result.$shared = false;\n context = isFunction(context) ? context() : context;\n const subResolver = this.createResolver(scopes, context, subPrefixes);\n options = _attachContext(resolver, context, subResolver);\n }\n for (const prop of names){\n result[prop] = options[prop];\n }\n return result;\n }\n createResolver(scopes, context, prefixes = [\n ''\n ], descriptorDefaults) {\n const { resolver } = getResolver(this._resolverCache, scopes, prefixes);\n return isObject(context) ? _attachContext(resolver, context, undefined, descriptorDefaults) : resolver;\n }\n}\nfunction getResolver(resolverCache, scopes, prefixes) {\n let cache = resolverCache.get(scopes);\n if (!cache) {\n cache = new Map();\n resolverCache.set(scopes, cache);\n }\n const cacheKey = prefixes.join();\n let cached = cache.get(cacheKey);\n if (!cached) {\n const resolver = _createResolver(scopes, prefixes);\n cached = {\n resolver,\n subPrefixes: prefixes.filter((p)=>!p.toLowerCase().includes('hover'))\n };\n cache.set(cacheKey, cached);\n }\n return cached;\n}\nconst hasFunction = (value)=>isObject(value) && Object.getOwnPropertyNames(value).some((key)=>isFunction(value[key]));\nfunction needContext(proxy, names) {\n const { isScriptable , isIndexable } = _descriptors(proxy);\n for (const prop of names){\n const scriptable = isScriptable(prop);\n const indexable = isIndexable(prop);\n const value = (indexable || scriptable) && proxy[prop];\n if (scriptable && (isFunction(value) || hasFunction(value)) || indexable && isArray(value)) {\n return true;\n }\n }\n return false;\n}\n\nvar version = \"4.4.1\";\n\nconst KNOWN_POSITIONS = [\n 'top',\n 'bottom',\n 'left',\n 'right',\n 'chartArea'\n];\nfunction positionIsHorizontal(position, axis) {\n return position === 'top' || position === 'bottom' || KNOWN_POSITIONS.indexOf(position) === -1 && axis === 'x';\n}\nfunction compare2Level(l1, l2) {\n return function(a, b) {\n return a[l1] === b[l1] ? a[l2] - b[l2] : a[l1] - b[l1];\n };\n}\nfunction onAnimationsComplete(context) {\n const chart = context.chart;\n const animationOptions = chart.options.animation;\n chart.notifyPlugins('afterRender');\n callback(animationOptions && animationOptions.onComplete, [\n context\n ], chart);\n}\nfunction onAnimationProgress(context) {\n const chart = context.chart;\n const animationOptions = chart.options.animation;\n callback(animationOptions && animationOptions.onProgress, [\n context\n ], chart);\n}\n function getCanvas(item) {\n if (_isDomSupported() && typeof item === 'string') {\n item = document.getElementById(item);\n } else if (item && item.length) {\n item = item[0];\n }\n if (item && item.canvas) {\n item = item.canvas;\n }\n return item;\n}\nconst instances = {};\nconst getChart = (key)=>{\n const canvas = getCanvas(key);\n return Object.values(instances).filter((c)=>c.canvas === canvas).pop();\n};\nfunction moveNumericKeys(obj, start, move) {\n const keys = Object.keys(obj);\n for (const key of keys){\n const intKey = +key;\n if (intKey >= start) {\n const value = obj[key];\n delete obj[key];\n if (move > 0 || intKey > start) {\n obj[intKey + move] = value;\n }\n }\n }\n}\n function determineLastEvent(e, lastEvent, inChartArea, isClick) {\n if (!inChartArea || e.type === 'mouseout') {\n return null;\n }\n if (isClick) {\n return lastEvent;\n }\n return e;\n}\nfunction getSizeForArea(scale, chartArea, field) {\n return scale.options.clip ? scale[field] : chartArea[field];\n}\nfunction getDatasetArea(meta, chartArea) {\n const { xScale , yScale } = meta;\n if (xScale && yScale) {\n return {\n left: getSizeForArea(xScale, chartArea, 'left'),\n right: getSizeForArea(xScale, chartArea, 'right'),\n top: getSizeForArea(yScale, chartArea, 'top'),\n bottom: getSizeForArea(yScale, chartArea, 'bottom')\n };\n }\n return chartArea;\n}\nclass Chart {\n static defaults = defaults;\n static instances = instances;\n static overrides = overrides;\n static registry = registry;\n static version = version;\n static getChart = getChart;\n static register(...items) {\n registry.add(...items);\n invalidatePlugins();\n }\n static unregister(...items) {\n registry.remove(...items);\n invalidatePlugins();\n }\n constructor(item, userConfig){\n const config = this.config = new Config(userConfig);\n const initialCanvas = getCanvas(item);\n const existingChart = getChart(initialCanvas);\n if (existingChart) {\n throw new Error('Canvas is already in use. Chart with ID \\'' + existingChart.id + '\\'' + ' must be destroyed before the canvas with ID \\'' + existingChart.canvas.id + '\\' can be reused.');\n }\n const options = config.createResolver(config.chartOptionScopes(), this.getContext());\n this.platform = new (config.platform || _detectPlatform(initialCanvas))();\n this.platform.updateConfig(config);\n const context = this.platform.acquireContext(initialCanvas, options.aspectRatio);\n const canvas = context && context.canvas;\n const height = canvas && canvas.height;\n const width = canvas && canvas.width;\n this.id = uid();\n this.ctx = context;\n this.canvas = canvas;\n this.width = width;\n this.height = height;\n this._options = options;\n this._aspectRatio = this.aspectRatio;\n this._layers = [];\n this._metasets = [];\n this._stacks = undefined;\n this.boxes = [];\n this.currentDevicePixelRatio = undefined;\n this.chartArea = undefined;\n this._active = [];\n this._lastEvent = undefined;\n this._listeners = {};\n this._responsiveListeners = undefined;\n this._sortedMetasets = [];\n this.scales = {};\n this._plugins = new PluginService();\n this.$proxies = {};\n this._hiddenIndices = {};\n this.attached = false;\n this._animationsDisabled = undefined;\n this.$context = undefined;\n this._doResize = debounce((mode)=>this.update(mode), options.resizeDelay || 0);\n this._dataChanges = [];\n instances[this.id] = this;\n if (!context || !canvas) {\n console.error(\"Failed to create chart: can't acquire context from the given item\");\n return;\n }\n animator.listen(this, 'complete', onAnimationsComplete);\n animator.listen(this, 'progress', onAnimationProgress);\n this._initialize();\n if (this.attached) {\n this.update();\n }\n }\n get aspectRatio() {\n const { options: { aspectRatio , maintainAspectRatio } , width , height , _aspectRatio } = this;\n if (!isNullOrUndef(aspectRatio)) {\n return aspectRatio;\n }\n if (maintainAspectRatio && _aspectRatio) {\n return _aspectRatio;\n }\n return height ? width / height : null;\n }\n get data() {\n return this.config.data;\n }\n set data(data) {\n this.config.data = data;\n }\n get options() {\n return this._options;\n }\n set options(options) {\n this.config.options = options;\n }\n get registry() {\n return registry;\n }\n _initialize() {\n this.notifyPlugins('beforeInit');\n if (this.options.responsive) {\n this.resize();\n } else {\n retinaScale(this, this.options.devicePixelRatio);\n }\n this.bindEvents();\n this.notifyPlugins('afterInit');\n return this;\n }\n clear() {\n clearCanvas(this.canvas, this.ctx);\n return this;\n }\n stop() {\n animator.stop(this);\n return this;\n }\n resize(width, height) {\n if (!animator.running(this)) {\n this._resize(width, height);\n } else {\n this._resizeBeforeDraw = {\n width,\n height\n };\n }\n }\n _resize(width, height) {\n const options = this.options;\n const canvas = this.canvas;\n const aspectRatio = options.maintainAspectRatio && this.aspectRatio;\n const newSize = this.platform.getMaximumSize(canvas, width, height, aspectRatio);\n const newRatio = options.devicePixelRatio || this.platform.getDevicePixelRatio();\n const mode = this.width ? 'resize' : 'attach';\n this.width = newSize.width;\n this.height = newSize.height;\n this._aspectRatio = this.aspectRatio;\n if (!retinaScale(this, newRatio, true)) {\n return;\n }\n this.notifyPlugins('resize', {\n size: newSize\n });\n callback(options.onResize, [\n this,\n newSize\n ], this);\n if (this.attached) {\n if (this._doResize(mode)) {\n this.render();\n }\n }\n }\n ensureScalesHaveIDs() {\n const options = this.options;\n const scalesOptions = options.scales || {};\n each(scalesOptions, (axisOptions, axisID)=>{\n axisOptions.id = axisID;\n });\n }\n buildOrUpdateScales() {\n const options = this.options;\n const scaleOpts = options.scales;\n const scales = this.scales;\n const updated = Object.keys(scales).reduce((obj, id)=>{\n obj[id] = false;\n return obj;\n }, {});\n let items = [];\n if (scaleOpts) {\n items = items.concat(Object.keys(scaleOpts).map((id)=>{\n const scaleOptions = scaleOpts[id];\n const axis = determineAxis(id, scaleOptions);\n const isRadial = axis === 'r';\n const isHorizontal = axis === 'x';\n return {\n options: scaleOptions,\n dposition: isRadial ? 'chartArea' : isHorizontal ? 'bottom' : 'left',\n dtype: isRadial ? 'radialLinear' : isHorizontal ? 'category' : 'linear'\n };\n }));\n }\n each(items, (item)=>{\n const scaleOptions = item.options;\n const id = scaleOptions.id;\n const axis = determineAxis(id, scaleOptions);\n const scaleType = valueOrDefault(scaleOptions.type, item.dtype);\n if (scaleOptions.position === undefined || positionIsHorizontal(scaleOptions.position, axis) !== positionIsHorizontal(item.dposition)) {\n scaleOptions.position = item.dposition;\n }\n updated[id] = true;\n let scale = null;\n if (id in scales && scales[id].type === scaleType) {\n scale = scales[id];\n } else {\n const scaleClass = registry.getScale(scaleType);\n scale = new scaleClass({\n id,\n type: scaleType,\n ctx: this.ctx,\n chart: this\n });\n scales[scale.id] = scale;\n }\n scale.init(scaleOptions, options);\n });\n each(updated, (hasUpdated, id)=>{\n if (!hasUpdated) {\n delete scales[id];\n }\n });\n each(scales, (scale)=>{\n layouts.configure(this, scale, scale.options);\n layouts.addBox(this, scale);\n });\n }\n _updateMetasets() {\n const metasets = this._metasets;\n const numData = this.data.datasets.length;\n const numMeta = metasets.length;\n metasets.sort((a, b)=>a.index - b.index);\n if (numMeta > numData) {\n for(let i = numData; i < numMeta; ++i){\n this._destroyDatasetMeta(i);\n }\n metasets.splice(numData, numMeta - numData);\n }\n this._sortedMetasets = metasets.slice(0).sort(compare2Level('order', 'index'));\n }\n _removeUnreferencedMetasets() {\n const { _metasets: metasets , data: { datasets } } = this;\n if (metasets.length > datasets.length) {\n delete this._stacks;\n }\n metasets.forEach((meta, index)=>{\n if (datasets.filter((x)=>x === meta._dataset).length === 0) {\n this._destroyDatasetMeta(index);\n }\n });\n }\n buildOrUpdateControllers() {\n const newControllers = [];\n const datasets = this.data.datasets;\n let i, ilen;\n this._removeUnreferencedMetasets();\n for(i = 0, ilen = datasets.length; i < ilen; i++){\n const dataset = datasets[i];\n let meta = this.getDatasetMeta(i);\n const type = dataset.type || this.config.type;\n if (meta.type && meta.type !== type) {\n this._destroyDatasetMeta(i);\n meta = this.getDatasetMeta(i);\n }\n meta.type = type;\n meta.indexAxis = dataset.indexAxis || getIndexAxis(type, this.options);\n meta.order = dataset.order || 0;\n meta.index = i;\n meta.label = '' + dataset.label;\n meta.visible = this.isDatasetVisible(i);\n if (meta.controller) {\n meta.controller.updateIndex(i);\n meta.controller.linkScales();\n } else {\n const ControllerClass = registry.getController(type);\n const { datasetElementType , dataElementType } = defaults.datasets[type];\n Object.assign(ControllerClass, {\n dataElementType: registry.getElement(dataElementType),\n datasetElementType: datasetElementType && registry.getElement(datasetElementType)\n });\n meta.controller = new ControllerClass(this, i);\n newControllers.push(meta.controller);\n }\n }\n this._updateMetasets();\n return newControllers;\n }\n _resetElements() {\n each(this.data.datasets, (dataset, datasetIndex)=>{\n this.getDatasetMeta(datasetIndex).controller.reset();\n }, this);\n }\n reset() {\n this._resetElements();\n this.notifyPlugins('reset');\n }\n update(mode) {\n const config = this.config;\n config.update();\n const options = this._options = config.createResolver(config.chartOptionScopes(), this.getContext());\n const animsDisabled = this._animationsDisabled = !options.animation;\n this._updateScales();\n this._checkEventBindings();\n this._updateHiddenIndices();\n this._plugins.invalidate();\n if (this.notifyPlugins('beforeUpdate', {\n mode,\n cancelable: true\n }) === false) {\n return;\n }\n const newControllers = this.buildOrUpdateControllers();\n this.notifyPlugins('beforeElementsUpdate');\n let minPadding = 0;\n for(let i = 0, ilen = this.data.datasets.length; i < ilen; i++){\n const { controller } = this.getDatasetMeta(i);\n const reset = !animsDisabled && newControllers.indexOf(controller) === -1;\n controller.buildOrUpdateElements(reset);\n minPadding = Math.max(+controller.getMaxOverflow(), minPadding);\n }\n minPadding = this._minPadding = options.layout.autoPadding ? minPadding : 0;\n this._updateLayout(minPadding);\n if (!animsDisabled) {\n each(newControllers, (controller)=>{\n controller.reset();\n });\n }\n this._updateDatasets(mode);\n this.notifyPlugins('afterUpdate', {\n mode\n });\n this._layers.sort(compare2Level('z', '_idx'));\n const { _active , _lastEvent } = this;\n if (_lastEvent) {\n this._eventHandler(_lastEvent, true);\n } else if (_active.length) {\n this._updateHoverStyles(_active, _active, true);\n }\n this.render();\n }\n _updateScales() {\n each(this.scales, (scale)=>{\n layouts.removeBox(this, scale);\n });\n this.ensureScalesHaveIDs();\n this.buildOrUpdateScales();\n }\n _checkEventBindings() {\n const options = this.options;\n const existingEvents = new Set(Object.keys(this._listeners));\n const newEvents = new Set(options.events);\n if (!setsEqual(existingEvents, newEvents) || !!this._responsiveListeners !== options.responsive) {\n this.unbindEvents();\n this.bindEvents();\n }\n }\n _updateHiddenIndices() {\n const { _hiddenIndices } = this;\n const changes = this._getUniformDataChanges() || [];\n for (const { method , start , count } of changes){\n const move = method === '_removeElements' ? -count : count;\n moveNumericKeys(_hiddenIndices, start, move);\n }\n }\n _getUniformDataChanges() {\n const _dataChanges = this._dataChanges;\n if (!_dataChanges || !_dataChanges.length) {\n return;\n }\n this._dataChanges = [];\n const datasetCount = this.data.datasets.length;\n const makeSet = (idx)=>new Set(_dataChanges.filter((c)=>c[0] === idx).map((c, i)=>i + ',' + c.splice(1).join(',')));\n const changeSet = makeSet(0);\n for(let i = 1; i < datasetCount; i++){\n if (!setsEqual(changeSet, makeSet(i))) {\n return;\n }\n }\n return Array.from(changeSet).map((c)=>c.split(',')).map((a)=>({\n method: a[1],\n start: +a[2],\n count: +a[3]\n }));\n }\n _updateLayout(minPadding) {\n if (this.notifyPlugins('beforeLayout', {\n cancelable: true\n }) === false) {\n return;\n }\n layouts.update(this, this.width, this.height, minPadding);\n const area = this.chartArea;\n const noArea = area.width <= 0 || area.height <= 0;\n this._layers = [];\n each(this.boxes, (box)=>{\n if (noArea && box.position === 'chartArea') {\n return;\n }\n if (box.configure) {\n box.configure();\n }\n this._layers.push(...box._layers());\n }, this);\n this._layers.forEach((item, index)=>{\n item._idx = index;\n });\n this.notifyPlugins('afterLayout');\n }\n _updateDatasets(mode) {\n if (this.notifyPlugins('beforeDatasetsUpdate', {\n mode,\n cancelable: true\n }) === false) {\n return;\n }\n for(let i = 0, ilen = this.data.datasets.length; i < ilen; ++i){\n this.getDatasetMeta(i).controller.configure();\n }\n for(let i = 0, ilen = this.data.datasets.length; i < ilen; ++i){\n this._updateDataset(i, isFunction(mode) ? mode({\n datasetIndex: i\n }) : mode);\n }\n this.notifyPlugins('afterDatasetsUpdate', {\n mode\n });\n }\n _updateDataset(index, mode) {\n const meta = this.getDatasetMeta(index);\n const args = {\n meta,\n index,\n mode,\n cancelable: true\n };\n if (this.notifyPlugins('beforeDatasetUpdate', args) === false) {\n return;\n }\n meta.controller._update(mode);\n args.cancelable = false;\n this.notifyPlugins('afterDatasetUpdate', args);\n }\n render() {\n if (this.notifyPlugins('beforeRender', {\n cancelable: true\n }) === false) {\n return;\n }\n if (animator.has(this)) {\n if (this.attached && !animator.running(this)) {\n animator.start(this);\n }\n } else {\n this.draw();\n onAnimationsComplete({\n chart: this\n });\n }\n }\n draw() {\n let i;\n if (this._resizeBeforeDraw) {\n const { width , height } = this._resizeBeforeDraw;\n this._resize(width, height);\n this._resizeBeforeDraw = null;\n }\n this.clear();\n if (this.width <= 0 || this.height <= 0) {\n return;\n }\n if (this.notifyPlugins('beforeDraw', {\n cancelable: true\n }) === false) {\n return;\n }\n const layers = this._layers;\n for(i = 0; i < layers.length && layers[i].z <= 0; ++i){\n layers[i].draw(this.chartArea);\n }\n this._drawDatasets();\n for(; i < layers.length; ++i){\n layers[i].draw(this.chartArea);\n }\n this.notifyPlugins('afterDraw');\n }\n _getSortedDatasetMetas(filterVisible) {\n const metasets = this._sortedMetasets;\n const result = [];\n let i, ilen;\n for(i = 0, ilen = metasets.length; i < ilen; ++i){\n const meta = metasets[i];\n if (!filterVisible || meta.visible) {\n result.push(meta);\n }\n }\n return result;\n }\n getSortedVisibleDatasetMetas() {\n return this._getSortedDatasetMetas(true);\n }\n _drawDatasets() {\n if (this.notifyPlugins('beforeDatasetsDraw', {\n cancelable: true\n }) === false) {\n return;\n }\n const metasets = this.getSortedVisibleDatasetMetas();\n for(let i = metasets.length - 1; i >= 0; --i){\n this._drawDataset(metasets[i]);\n }\n this.notifyPlugins('afterDatasetsDraw');\n }\n _drawDataset(meta) {\n const ctx = this.ctx;\n const clip = meta._clip;\n const useClip = !clip.disabled;\n const area = getDatasetArea(meta, this.chartArea);\n const args = {\n meta,\n index: meta.index,\n cancelable: true\n };\n if (this.notifyPlugins('beforeDatasetDraw', args) === false) {\n return;\n }\n if (useClip) {\n clipArea(ctx, {\n left: clip.left === false ? 0 : area.left - clip.left,\n right: clip.right === false ? this.width : area.right + clip.right,\n top: clip.top === false ? 0 : area.top - clip.top,\n bottom: clip.bottom === false ? this.height : area.bottom + clip.bottom\n });\n }\n meta.controller.draw();\n if (useClip) {\n unclipArea(ctx);\n }\n args.cancelable = false;\n this.notifyPlugins('afterDatasetDraw', args);\n }\n isPointInArea(point) {\n return _isPointInArea(point, this.chartArea, this._minPadding);\n }\n getElementsAtEventForMode(e, mode, options, useFinalPosition) {\n const method = Interaction.modes[mode];\n if (typeof method === 'function') {\n return method(this, e, options, useFinalPosition);\n }\n return [];\n }\n getDatasetMeta(datasetIndex) {\n const dataset = this.data.datasets[datasetIndex];\n const metasets = this._metasets;\n let meta = metasets.filter((x)=>x && x._dataset === dataset).pop();\n if (!meta) {\n meta = {\n type: null,\n data: [],\n dataset: null,\n controller: null,\n hidden: null,\n xAxisID: null,\n yAxisID: null,\n order: dataset && dataset.order || 0,\n index: datasetIndex,\n _dataset: dataset,\n _parsed: [],\n _sorted: false\n };\n metasets.push(meta);\n }\n return meta;\n }\n getContext() {\n return this.$context || (this.$context = createContext(null, {\n chart: this,\n type: 'chart'\n }));\n }\n getVisibleDatasetCount() {\n return this.getSortedVisibleDatasetMetas().length;\n }\n isDatasetVisible(datasetIndex) {\n const dataset = this.data.datasets[datasetIndex];\n if (!dataset) {\n return false;\n }\n const meta = this.getDatasetMeta(datasetIndex);\n return typeof meta.hidden === 'boolean' ? !meta.hidden : !dataset.hidden;\n }\n setDatasetVisibility(datasetIndex, visible) {\n const meta = this.getDatasetMeta(datasetIndex);\n meta.hidden = !visible;\n }\n toggleDataVisibility(index) {\n this._hiddenIndices[index] = !this._hiddenIndices[index];\n }\n getDataVisibility(index) {\n return !this._hiddenIndices[index];\n }\n _updateVisibility(datasetIndex, dataIndex, visible) {\n const mode = visible ? 'show' : 'hide';\n const meta = this.getDatasetMeta(datasetIndex);\n const anims = meta.controller._resolveAnimations(undefined, mode);\n if (defined(dataIndex)) {\n meta.data[dataIndex].hidden = !visible;\n this.update();\n } else {\n this.setDatasetVisibility(datasetIndex, visible);\n anims.update(meta, {\n visible\n });\n this.update((ctx)=>ctx.datasetIndex === datasetIndex ? mode : undefined);\n }\n }\n hide(datasetIndex, dataIndex) {\n this._updateVisibility(datasetIndex, dataIndex, false);\n }\n show(datasetIndex, dataIndex) {\n this._updateVisibility(datasetIndex, dataIndex, true);\n }\n _destroyDatasetMeta(datasetIndex) {\n const meta = this._metasets[datasetIndex];\n if (meta && meta.controller) {\n meta.controller._destroy();\n }\n delete this._metasets[datasetIndex];\n }\n _stop() {\n let i, ilen;\n this.stop();\n animator.remove(this);\n for(i = 0, ilen = this.data.datasets.length; i < ilen; ++i){\n this._destroyDatasetMeta(i);\n }\n }\n destroy() {\n this.notifyPlugins('beforeDestroy');\n const { canvas , ctx } = this;\n this._stop();\n this.config.clearCache();\n if (canvas) {\n this.unbindEvents();\n clearCanvas(canvas, ctx);\n this.platform.releaseContext(ctx);\n this.canvas = null;\n this.ctx = null;\n }\n delete instances[this.id];\n this.notifyPlugins('afterDestroy');\n }\n toBase64Image(...args) {\n return this.canvas.toDataURL(...args);\n }\n bindEvents() {\n this.bindUserEvents();\n if (this.options.responsive) {\n this.bindResponsiveEvents();\n } else {\n this.attached = true;\n }\n }\n bindUserEvents() {\n const listeners = this._listeners;\n const platform = this.platform;\n const _add = (type, listener)=>{\n platform.addEventListener(this, type, listener);\n listeners[type] = listener;\n };\n const listener = (e, x, y)=>{\n e.offsetX = x;\n e.offsetY = y;\n this._eventHandler(e);\n };\n each(this.options.events, (type)=>_add(type, listener));\n }\n bindResponsiveEvents() {\n if (!this._responsiveListeners) {\n this._responsiveListeners = {};\n }\n const listeners = this._responsiveListeners;\n const platform = this.platform;\n const _add = (type, listener)=>{\n platform.addEventListener(this, type, listener);\n listeners[type] = listener;\n };\n const _remove = (type, listener)=>{\n if (listeners[type]) {\n platform.removeEventListener(this, type, listener);\n delete listeners[type];\n }\n };\n const listener = (width, height)=>{\n if (this.canvas) {\n this.resize(width, height);\n }\n };\n let detached;\n const attached = ()=>{\n _remove('attach', attached);\n this.attached = true;\n this.resize();\n _add('resize', listener);\n _add('detach', detached);\n };\n detached = ()=>{\n this.attached = false;\n _remove('resize', listener);\n this._stop();\n this._resize(0, 0);\n _add('attach', attached);\n };\n if (platform.isAttached(this.canvas)) {\n attached();\n } else {\n detached();\n }\n }\n unbindEvents() {\n each(this._listeners, (listener, type)=>{\n this.platform.removeEventListener(this, type, listener);\n });\n this._listeners = {};\n each(this._responsiveListeners, (listener, type)=>{\n this.platform.removeEventListener(this, type, listener);\n });\n this._responsiveListeners = undefined;\n }\n updateHoverStyle(items, mode, enabled) {\n const prefix = enabled ? 'set' : 'remove';\n let meta, item, i, ilen;\n if (mode === 'dataset') {\n meta = this.getDatasetMeta(items[0].datasetIndex);\n meta.controller['_' + prefix + 'DatasetHoverStyle']();\n }\n for(i = 0, ilen = items.length; i < ilen; ++i){\n item = items[i];\n const controller = item && this.getDatasetMeta(item.datasetIndex).controller;\n if (controller) {\n controller[prefix + 'HoverStyle'](item.element, item.datasetIndex, item.index);\n }\n }\n }\n getActiveElements() {\n return this._active || [];\n }\n setActiveElements(activeElements) {\n const lastActive = this._active || [];\n const active = activeElements.map(({ datasetIndex , index })=>{\n const meta = this.getDatasetMeta(datasetIndex);\n if (!meta) {\n throw new Error('No dataset found at index ' + datasetIndex);\n }\n return {\n datasetIndex,\n element: meta.data[index],\n index\n };\n });\n const changed = !_elementsEqual(active, lastActive);\n if (changed) {\n this._active = active;\n this._lastEvent = null;\n this._updateHoverStyles(active, lastActive);\n }\n }\n notifyPlugins(hook, args, filter) {\n return this._plugins.notify(this, hook, args, filter);\n }\n isPluginEnabled(pluginId) {\n return this._plugins._cache.filter((p)=>p.plugin.id === pluginId).length === 1;\n }\n _updateHoverStyles(active, lastActive, replay) {\n const hoverOptions = this.options.hover;\n const diff = (a, b)=>a.filter((x)=>!b.some((y)=>x.datasetIndex === y.datasetIndex && x.index === y.index));\n const deactivated = diff(lastActive, active);\n const activated = replay ? active : diff(active, lastActive);\n if (deactivated.length) {\n this.updateHoverStyle(deactivated, hoverOptions.mode, false);\n }\n if (activated.length && hoverOptions.mode) {\n this.updateHoverStyle(activated, hoverOptions.mode, true);\n }\n }\n _eventHandler(e, replay) {\n const args = {\n event: e,\n replay,\n cancelable: true,\n inChartArea: this.isPointInArea(e)\n };\n const eventFilter = (plugin)=>(plugin.options.events || this.options.events).includes(e.native.type);\n if (this.notifyPlugins('beforeEvent', args, eventFilter) === false) {\n return;\n }\n const changed = this._handleEvent(e, replay, args.inChartArea);\n args.cancelable = false;\n this.notifyPlugins('afterEvent', args, eventFilter);\n if (changed || args.changed) {\n this.render();\n }\n return this;\n }\n _handleEvent(e, replay, inChartArea) {\n const { _active: lastActive = [] , options } = this;\n const useFinalPosition = replay;\n const active = this._getActiveElements(e, lastActive, inChartArea, useFinalPosition);\n const isClick = _isClickEvent(e);\n const lastEvent = determineLastEvent(e, this._lastEvent, inChartArea, isClick);\n if (inChartArea) {\n this._lastEvent = null;\n callback(options.onHover, [\n e,\n active,\n this\n ], this);\n if (isClick) {\n callback(options.onClick, [\n e,\n active,\n this\n ], this);\n }\n }\n const changed = !_elementsEqual(active, lastActive);\n if (changed || replay) {\n this._active = active;\n this._updateHoverStyles(active, lastActive, replay);\n }\n this._lastEvent = lastEvent;\n return changed;\n }\n _getActiveElements(e, lastActive, inChartArea, useFinalPosition) {\n if (e.type === 'mouseout') {\n return [];\n }\n if (!inChartArea) {\n return lastActive;\n }\n const hoverOptions = this.options.hover;\n return this.getElementsAtEventForMode(e, hoverOptions.mode, hoverOptions, useFinalPosition);\n }\n}\nfunction invalidatePlugins() {\n return each(Chart.instances, (chart)=>chart._plugins.invalidate());\n}\n\nfunction clipArc(ctx, element, endAngle) {\n const { startAngle , pixelMargin , x , y , outerRadius , innerRadius } = element;\n let angleMargin = pixelMargin / outerRadius;\n // Draw an inner border by clipping the arc and drawing a double-width border\n // Enlarge the clipping arc by 0.33 pixels to eliminate glitches between borders\n ctx.beginPath();\n ctx.arc(x, y, outerRadius, startAngle - angleMargin, endAngle + angleMargin);\n if (innerRadius > pixelMargin) {\n angleMargin = pixelMargin / innerRadius;\n ctx.arc(x, y, innerRadius, endAngle + angleMargin, startAngle - angleMargin, true);\n } else {\n ctx.arc(x, y, pixelMargin, endAngle + HALF_PI, startAngle - HALF_PI);\n }\n ctx.closePath();\n ctx.clip();\n}\nfunction toRadiusCorners(value) {\n return _readValueToProps(value, [\n 'outerStart',\n 'outerEnd',\n 'innerStart',\n 'innerEnd'\n ]);\n}\n/**\n * Parse border radius from the provided options\n */ function parseBorderRadius$1(arc, innerRadius, outerRadius, angleDelta) {\n const o = toRadiusCorners(arc.options.borderRadius);\n const halfThickness = (outerRadius - innerRadius) / 2;\n const innerLimit = Math.min(halfThickness, angleDelta * innerRadius / 2);\n // Outer limits are complicated. We want to compute the available angular distance at\n // a radius of outerRadius - borderRadius because for small angular distances, this term limits.\n // We compute at r = outerRadius - borderRadius because this circle defines the center of the border corners.\n //\n // If the borderRadius is large, that value can become negative.\n // This causes the outer borders to lose their radius entirely, which is rather unexpected. To solve that, if borderRadius > outerRadius\n // we know that the thickness term will dominate and compute the limits at that point\n const computeOuterLimit = (val)=>{\n const outerArcLimit = (outerRadius - Math.min(halfThickness, val)) * angleDelta / 2;\n return _limitValue(val, 0, Math.min(halfThickness, outerArcLimit));\n };\n return {\n outerStart: computeOuterLimit(o.outerStart),\n outerEnd: computeOuterLimit(o.outerEnd),\n innerStart: _limitValue(o.innerStart, 0, innerLimit),\n innerEnd: _limitValue(o.innerEnd, 0, innerLimit)\n };\n}\n/**\n * Convert (r, 𝜃) to (x, y)\n */ function rThetaToXY(r, theta, x, y) {\n return {\n x: x + r * Math.cos(theta),\n y: y + r * Math.sin(theta)\n };\n}\n/**\n * Path the arc, respecting border radius by separating into left and right halves.\n *\n * Start End\n *\n * 1--->a--->2 Outer\n * / \\\n * 8 3\n * | |\n * | |\n * 7 4\n * \\ /\n * 6<---b<---5 Inner\n */ function pathArc(ctx, element, offset, spacing, end, circular) {\n const { x , y , startAngle: start , pixelMargin , innerRadius: innerR } = element;\n const outerRadius = Math.max(element.outerRadius + spacing + offset - pixelMargin, 0);\n const innerRadius = innerR > 0 ? innerR + spacing + offset + pixelMargin : 0;\n let spacingOffset = 0;\n const alpha = end - start;\n if (spacing) {\n // When spacing is present, it is the same for all items\n // So we adjust the start and end angle of the arc such that\n // the distance is the same as it would be without the spacing\n const noSpacingInnerRadius = innerR > 0 ? innerR - spacing : 0;\n const noSpacingOuterRadius = outerRadius > 0 ? outerRadius - spacing : 0;\n const avNogSpacingRadius = (noSpacingInnerRadius + noSpacingOuterRadius) / 2;\n const adjustedAngle = avNogSpacingRadius !== 0 ? alpha * avNogSpacingRadius / (avNogSpacingRadius + spacing) : alpha;\n spacingOffset = (alpha - adjustedAngle) / 2;\n }\n const beta = Math.max(0.001, alpha * outerRadius - offset / PI) / outerRadius;\n const angleOffset = (alpha - beta) / 2;\n const startAngle = start + angleOffset + spacingOffset;\n const endAngle = end - angleOffset - spacingOffset;\n const { outerStart , outerEnd , innerStart , innerEnd } = parseBorderRadius$1(element, innerRadius, outerRadius, endAngle - startAngle);\n const outerStartAdjustedRadius = outerRadius - outerStart;\n const outerEndAdjustedRadius = outerRadius - outerEnd;\n const outerStartAdjustedAngle = startAngle + outerStart / outerStartAdjustedRadius;\n const outerEndAdjustedAngle = endAngle - outerEnd / outerEndAdjustedRadius;\n const innerStartAdjustedRadius = innerRadius + innerStart;\n const innerEndAdjustedRadius = innerRadius + innerEnd;\n const innerStartAdjustedAngle = startAngle + innerStart / innerStartAdjustedRadius;\n const innerEndAdjustedAngle = endAngle - innerEnd / innerEndAdjustedRadius;\n ctx.beginPath();\n if (circular) {\n // The first arc segments from point 1 to point a to point 2\n const outerMidAdjustedAngle = (outerStartAdjustedAngle + outerEndAdjustedAngle) / 2;\n ctx.arc(x, y, outerRadius, outerStartAdjustedAngle, outerMidAdjustedAngle);\n ctx.arc(x, y, outerRadius, outerMidAdjustedAngle, outerEndAdjustedAngle);\n // The corner segment from point 2 to point 3\n if (outerEnd > 0) {\n const pCenter = rThetaToXY(outerEndAdjustedRadius, outerEndAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, outerEnd, outerEndAdjustedAngle, endAngle + HALF_PI);\n }\n // The line from point 3 to point 4\n const p4 = rThetaToXY(innerEndAdjustedRadius, endAngle, x, y);\n ctx.lineTo(p4.x, p4.y);\n // The corner segment from point 4 to point 5\n if (innerEnd > 0) {\n const pCenter = rThetaToXY(innerEndAdjustedRadius, innerEndAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, innerEnd, endAngle + HALF_PI, innerEndAdjustedAngle + Math.PI);\n }\n // The inner arc from point 5 to point b to point 6\n const innerMidAdjustedAngle = (endAngle - innerEnd / innerRadius + (startAngle + innerStart / innerRadius)) / 2;\n ctx.arc(x, y, innerRadius, endAngle - innerEnd / innerRadius, innerMidAdjustedAngle, true);\n ctx.arc(x, y, innerRadius, innerMidAdjustedAngle, startAngle + innerStart / innerRadius, true);\n // The corner segment from point 6 to point 7\n if (innerStart > 0) {\n const pCenter = rThetaToXY(innerStartAdjustedRadius, innerStartAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, innerStart, innerStartAdjustedAngle + Math.PI, startAngle - HALF_PI);\n }\n // The line from point 7 to point 8\n const p8 = rThetaToXY(outerStartAdjustedRadius, startAngle, x, y);\n ctx.lineTo(p8.x, p8.y);\n // The corner segment from point 8 to point 1\n if (outerStart > 0) {\n const pCenter = rThetaToXY(outerStartAdjustedRadius, outerStartAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, outerStart, startAngle - HALF_PI, outerStartAdjustedAngle);\n }\n } else {\n ctx.moveTo(x, y);\n const outerStartX = Math.cos(outerStartAdjustedAngle) * outerRadius + x;\n const outerStartY = Math.sin(outerStartAdjustedAngle) * outerRadius + y;\n ctx.lineTo(outerStartX, outerStartY);\n const outerEndX = Math.cos(outerEndAdjustedAngle) * outerRadius + x;\n const outerEndY = Math.sin(outerEndAdjustedAngle) * outerRadius + y;\n ctx.lineTo(outerEndX, outerEndY);\n }\n ctx.closePath();\n}\nfunction drawArc(ctx, element, offset, spacing, circular) {\n const { fullCircles , startAngle , circumference } = element;\n let endAngle = element.endAngle;\n if (fullCircles) {\n pathArc(ctx, element, offset, spacing, endAngle, circular);\n for(let i = 0; i < fullCircles; ++i){\n ctx.fill();\n }\n if (!isNaN(circumference)) {\n endAngle = startAngle + (circumference % TAU || TAU);\n }\n }\n pathArc(ctx, element, offset, spacing, endAngle, circular);\n ctx.fill();\n return endAngle;\n}\nfunction drawBorder(ctx, element, offset, spacing, circular) {\n const { fullCircles , startAngle , circumference , options } = element;\n const { borderWidth , borderJoinStyle , borderDash , borderDashOffset } = options;\n const inner = options.borderAlign === 'inner';\n if (!borderWidth) {\n return;\n }\n ctx.setLineDash(borderDash || []);\n ctx.lineDashOffset = borderDashOffset;\n if (inner) {\n ctx.lineWidth = borderWidth * 2;\n ctx.lineJoin = borderJoinStyle || 'round';\n } else {\n ctx.lineWidth = borderWidth;\n ctx.lineJoin = borderJoinStyle || 'bevel';\n }\n let endAngle = element.endAngle;\n if (fullCircles) {\n pathArc(ctx, element, offset, spacing, endAngle, circular);\n for(let i = 0; i < fullCircles; ++i){\n ctx.stroke();\n }\n if (!isNaN(circumference)) {\n endAngle = startAngle + (circumference % TAU || TAU);\n }\n }\n if (inner) {\n clipArc(ctx, element, endAngle);\n }\n if (!fullCircles) {\n pathArc(ctx, element, offset, spacing, endAngle, circular);\n ctx.stroke();\n }\n}\nclass ArcElement extends Element {\n static id = 'arc';\n static defaults = {\n borderAlign: 'center',\n borderColor: '#fff',\n borderDash: [],\n borderDashOffset: 0,\n borderJoinStyle: undefined,\n borderRadius: 0,\n borderWidth: 2,\n offset: 0,\n spacing: 0,\n angle: undefined,\n circular: true\n };\n static defaultRoutes = {\n backgroundColor: 'backgroundColor'\n };\n static descriptors = {\n _scriptable: true,\n _indexable: (name)=>name !== 'borderDash'\n };\n circumference;\n endAngle;\n fullCircles;\n innerRadius;\n outerRadius;\n pixelMargin;\n startAngle;\n constructor(cfg){\n super();\n this.options = undefined;\n this.circumference = undefined;\n this.startAngle = undefined;\n this.endAngle = undefined;\n this.innerRadius = undefined;\n this.outerRadius = undefined;\n this.pixelMargin = 0;\n this.fullCircles = 0;\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n inRange(chartX, chartY, useFinalPosition) {\n const point = this.getProps([\n 'x',\n 'y'\n ], useFinalPosition);\n const { angle , distance } = getAngleFromPoint(point, {\n x: chartX,\n y: chartY\n });\n const { startAngle , endAngle , innerRadius , outerRadius , circumference } = this.getProps([\n 'startAngle',\n 'endAngle',\n 'innerRadius',\n 'outerRadius',\n 'circumference'\n ], useFinalPosition);\n const rAdjust = (this.options.spacing + this.options.borderWidth) / 2;\n const _circumference = valueOrDefault(circumference, endAngle - startAngle);\n const betweenAngles = _circumference >= TAU || _angleBetween(angle, startAngle, endAngle);\n const withinRadius = _isBetween(distance, innerRadius + rAdjust, outerRadius + rAdjust);\n return betweenAngles && withinRadius;\n }\n getCenterPoint(useFinalPosition) {\n const { x , y , startAngle , endAngle , innerRadius , outerRadius } = this.getProps([\n 'x',\n 'y',\n 'startAngle',\n 'endAngle',\n 'innerRadius',\n 'outerRadius'\n ], useFinalPosition);\n const { offset , spacing } = this.options;\n const halfAngle = (startAngle + endAngle) / 2;\n const halfRadius = (innerRadius + outerRadius + spacing + offset) / 2;\n return {\n x: x + Math.cos(halfAngle) * halfRadius,\n y: y + Math.sin(halfAngle) * halfRadius\n };\n }\n tooltipPosition(useFinalPosition) {\n return this.getCenterPoint(useFinalPosition);\n }\n draw(ctx) {\n const { options , circumference } = this;\n const offset = (options.offset || 0) / 4;\n const spacing = (options.spacing || 0) / 2;\n const circular = options.circular;\n this.pixelMargin = options.borderAlign === 'inner' ? 0.33 : 0;\n this.fullCircles = circumference > TAU ? Math.floor(circumference / TAU) : 0;\n if (circumference === 0 || this.innerRadius < 0 || this.outerRadius < 0) {\n return;\n }\n ctx.save();\n const halfAngle = (this.startAngle + this.endAngle) / 2;\n ctx.translate(Math.cos(halfAngle) * offset, Math.sin(halfAngle) * offset);\n const fix = 1 - Math.sin(Math.min(PI, circumference || 0));\n const radiusOffset = offset * fix;\n ctx.fillStyle = options.backgroundColor;\n ctx.strokeStyle = options.borderColor;\n drawArc(ctx, this, radiusOffset, spacing, circular);\n drawBorder(ctx, this, radiusOffset, spacing, circular);\n ctx.restore();\n }\n}\n\nfunction setStyle(ctx, options, style = options) {\n ctx.lineCap = valueOrDefault(style.borderCapStyle, options.borderCapStyle);\n ctx.setLineDash(valueOrDefault(style.borderDash, options.borderDash));\n ctx.lineDashOffset = valueOrDefault(style.borderDashOffset, options.borderDashOffset);\n ctx.lineJoin = valueOrDefault(style.borderJoinStyle, options.borderJoinStyle);\n ctx.lineWidth = valueOrDefault(style.borderWidth, options.borderWidth);\n ctx.strokeStyle = valueOrDefault(style.borderColor, options.borderColor);\n}\nfunction lineTo(ctx, previous, target) {\n ctx.lineTo(target.x, target.y);\n}\n function getLineMethod(options) {\n if (options.stepped) {\n return _steppedLineTo;\n }\n if (options.tension || options.cubicInterpolationMode === 'monotone') {\n return _bezierCurveTo;\n }\n return lineTo;\n}\nfunction pathVars(points, segment, params = {}) {\n const count = points.length;\n const { start: paramsStart = 0 , end: paramsEnd = count - 1 } = params;\n const { start: segmentStart , end: segmentEnd } = segment;\n const start = Math.max(paramsStart, segmentStart);\n const end = Math.min(paramsEnd, segmentEnd);\n const outside = paramsStart < segmentStart && paramsEnd < segmentStart || paramsStart > segmentEnd && paramsEnd > segmentEnd;\n return {\n count,\n start,\n loop: segment.loop,\n ilen: end < start && !outside ? count + end - start : end - start\n };\n}\n function pathSegment(ctx, line, segment, params) {\n const { points , options } = line;\n const { count , start , loop , ilen } = pathVars(points, segment, params);\n const lineMethod = getLineMethod(options);\n let { move =true , reverse } = params || {};\n let i, point, prev;\n for(i = 0; i <= ilen; ++i){\n point = points[(start + (reverse ? ilen - i : i)) % count];\n if (point.skip) {\n continue;\n } else if (move) {\n ctx.moveTo(point.x, point.y);\n move = false;\n } else {\n lineMethod(ctx, prev, point, reverse, options.stepped);\n }\n prev = point;\n }\n if (loop) {\n point = points[(start + (reverse ? ilen : 0)) % count];\n lineMethod(ctx, prev, point, reverse, options.stepped);\n }\n return !!loop;\n}\n function fastPathSegment(ctx, line, segment, params) {\n const points = line.points;\n const { count , start , ilen } = pathVars(points, segment, params);\n const { move =true , reverse } = params || {};\n let avgX = 0;\n let countX = 0;\n let i, point, prevX, minY, maxY, lastY;\n const pointIndex = (index)=>(start + (reverse ? ilen - index : index)) % count;\n const drawX = ()=>{\n if (minY !== maxY) {\n ctx.lineTo(avgX, maxY);\n ctx.lineTo(avgX, minY);\n ctx.lineTo(avgX, lastY);\n }\n };\n if (move) {\n point = points[pointIndex(0)];\n ctx.moveTo(point.x, point.y);\n }\n for(i = 0; i <= ilen; ++i){\n point = points[pointIndex(i)];\n if (point.skip) {\n continue;\n }\n const x = point.x;\n const y = point.y;\n const truncX = x | 0;\n if (truncX === prevX) {\n if (y < minY) {\n minY = y;\n } else if (y > maxY) {\n maxY = y;\n }\n avgX = (countX * avgX + x) / ++countX;\n } else {\n drawX();\n ctx.lineTo(x, y);\n prevX = truncX;\n countX = 0;\n minY = maxY = y;\n }\n lastY = y;\n }\n drawX();\n}\n function _getSegmentMethod(line) {\n const opts = line.options;\n const borderDash = opts.borderDash && opts.borderDash.length;\n const useFastPath = !line._decimated && !line._loop && !opts.tension && opts.cubicInterpolationMode !== 'monotone' && !opts.stepped && !borderDash;\n return useFastPath ? fastPathSegment : pathSegment;\n}\n function _getInterpolationMethod(options) {\n if (options.stepped) {\n return _steppedInterpolation;\n }\n if (options.tension || options.cubicInterpolationMode === 'monotone') {\n return _bezierInterpolation;\n }\n return _pointInLine;\n}\nfunction strokePathWithCache(ctx, line, start, count) {\n let path = line._path;\n if (!path) {\n path = line._path = new Path2D();\n if (line.path(path, start, count)) {\n path.closePath();\n }\n }\n setStyle(ctx, line.options);\n ctx.stroke(path);\n}\nfunction strokePathDirect(ctx, line, start, count) {\n const { segments , options } = line;\n const segmentMethod = _getSegmentMethod(line);\n for (const segment of segments){\n setStyle(ctx, options, segment.style);\n ctx.beginPath();\n if (segmentMethod(ctx, line, segment, {\n start,\n end: start + count - 1\n })) {\n ctx.closePath();\n }\n ctx.stroke();\n }\n}\nconst usePath2D = typeof Path2D === 'function';\nfunction draw(ctx, line, start, count) {\n if (usePath2D && !line.options.segment) {\n strokePathWithCache(ctx, line, start, count);\n } else {\n strokePathDirect(ctx, line, start, count);\n }\n}\nclass LineElement extends Element {\n static id = 'line';\n static defaults = {\n borderCapStyle: 'butt',\n borderDash: [],\n borderDashOffset: 0,\n borderJoinStyle: 'miter',\n borderWidth: 3,\n capBezierPoints: true,\n cubicInterpolationMode: 'default',\n fill: false,\n spanGaps: false,\n stepped: false,\n tension: 0\n };\n static defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n };\n static descriptors = {\n _scriptable: true,\n _indexable: (name)=>name !== 'borderDash' && name !== 'fill'\n };\n constructor(cfg){\n super();\n this.animated = true;\n this.options = undefined;\n this._chart = undefined;\n this._loop = undefined;\n this._fullLoop = undefined;\n this._path = undefined;\n this._points = undefined;\n this._segments = undefined;\n this._decimated = false;\n this._pointsUpdated = false;\n this._datasetIndex = undefined;\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n updateControlPoints(chartArea, indexAxis) {\n const options = this.options;\n if ((options.tension || options.cubicInterpolationMode === 'monotone') && !options.stepped && !this._pointsUpdated) {\n const loop = options.spanGaps ? this._loop : this._fullLoop;\n _updateBezierControlPoints(this._points, options, chartArea, loop, indexAxis);\n this._pointsUpdated = true;\n }\n }\n set points(points) {\n this._points = points;\n delete this._segments;\n delete this._path;\n this._pointsUpdated = false;\n }\n get points() {\n return this._points;\n }\n get segments() {\n return this._segments || (this._segments = _computeSegments(this, this.options.segment));\n }\n first() {\n const segments = this.segments;\n const points = this.points;\n return segments.length && points[segments[0].start];\n }\n last() {\n const segments = this.segments;\n const points = this.points;\n const count = segments.length;\n return count && points[segments[count - 1].end];\n }\n interpolate(point, property) {\n const options = this.options;\n const value = point[property];\n const points = this.points;\n const segments = _boundSegments(this, {\n property,\n start: value,\n end: value\n });\n if (!segments.length) {\n return;\n }\n const result = [];\n const _interpolate = _getInterpolationMethod(options);\n let i, ilen;\n for(i = 0, ilen = segments.length; i < ilen; ++i){\n const { start , end } = segments[i];\n const p1 = points[start];\n const p2 = points[end];\n if (p1 === p2) {\n result.push(p1);\n continue;\n }\n const t = Math.abs((value - p1[property]) / (p2[property] - p1[property]));\n const interpolated = _interpolate(p1, p2, t, options.stepped);\n interpolated[property] = point[property];\n result.push(interpolated);\n }\n return result.length === 1 ? result[0] : result;\n }\n pathSegment(ctx, segment, params) {\n const segmentMethod = _getSegmentMethod(this);\n return segmentMethod(ctx, this, segment, params);\n }\n path(ctx, start, count) {\n const segments = this.segments;\n const segmentMethod = _getSegmentMethod(this);\n let loop = this._loop;\n start = start || 0;\n count = count || this.points.length - start;\n for (const segment of segments){\n loop &= segmentMethod(ctx, this, segment, {\n start,\n end: start + count - 1\n });\n }\n return !!loop;\n }\n draw(ctx, chartArea, start, count) {\n const options = this.options || {};\n const points = this.points || [];\n if (points.length && options.borderWidth) {\n ctx.save();\n draw(ctx, this, start, count);\n ctx.restore();\n }\n if (this.animated) {\n this._pointsUpdated = false;\n this._path = undefined;\n }\n }\n}\n\nfunction inRange$1(el, pos, axis, useFinalPosition) {\n const options = el.options;\n const { [axis]: value } = el.getProps([\n axis\n ], useFinalPosition);\n return Math.abs(pos - value) < options.radius + options.hitRadius;\n}\nclass PointElement extends Element {\n static id = 'point';\n parsed;\n skip;\n stop;\n /**\n * @type {any}\n */ static defaults = {\n borderWidth: 1,\n hitRadius: 1,\n hoverBorderWidth: 1,\n hoverRadius: 4,\n pointStyle: 'circle',\n radius: 3,\n rotation: 0\n };\n /**\n * @type {any}\n */ static defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n };\n constructor(cfg){\n super();\n this.options = undefined;\n this.parsed = undefined;\n this.skip = undefined;\n this.stop = undefined;\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n inRange(mouseX, mouseY, useFinalPosition) {\n const options = this.options;\n const { x , y } = this.getProps([\n 'x',\n 'y'\n ], useFinalPosition);\n return Math.pow(mouseX - x, 2) + Math.pow(mouseY - y, 2) < Math.pow(options.hitRadius + options.radius, 2);\n }\n inXRange(mouseX, useFinalPosition) {\n return inRange$1(this, mouseX, 'x', useFinalPosition);\n }\n inYRange(mouseY, useFinalPosition) {\n return inRange$1(this, mouseY, 'y', useFinalPosition);\n }\n getCenterPoint(useFinalPosition) {\n const { x , y } = this.getProps([\n 'x',\n 'y'\n ], useFinalPosition);\n return {\n x,\n y\n };\n }\n size(options) {\n options = options || this.options || {};\n let radius = options.radius || 0;\n radius = Math.max(radius, radius && options.hoverRadius || 0);\n const borderWidth = radius && options.borderWidth || 0;\n return (radius + borderWidth) * 2;\n }\n draw(ctx, area) {\n const options = this.options;\n if (this.skip || options.radius < 0.1 || !_isPointInArea(this, area, this.size(options) / 2)) {\n return;\n }\n ctx.strokeStyle = options.borderColor;\n ctx.lineWidth = options.borderWidth;\n ctx.fillStyle = options.backgroundColor;\n drawPoint(ctx, options, this.x, this.y);\n }\n getRange() {\n const options = this.options || {};\n // @ts-expect-error Fallbacks should never be hit in practice\n return options.radius + options.hitRadius;\n }\n}\n\nfunction getBarBounds(bar, useFinalPosition) {\n const { x , y , base , width , height } = bar.getProps([\n 'x',\n 'y',\n 'base',\n 'width',\n 'height'\n ], useFinalPosition);\n let left, right, top, bottom, half;\n if (bar.horizontal) {\n half = height / 2;\n left = Math.min(x, base);\n right = Math.max(x, base);\n top = y - half;\n bottom = y + half;\n } else {\n half = width / 2;\n left = x - half;\n right = x + half;\n top = Math.min(y, base);\n bottom = Math.max(y, base);\n }\n return {\n left,\n top,\n right,\n bottom\n };\n}\nfunction skipOrLimit(skip, value, min, max) {\n return skip ? 0 : _limitValue(value, min, max);\n}\nfunction parseBorderWidth(bar, maxW, maxH) {\n const value = bar.options.borderWidth;\n const skip = bar.borderSkipped;\n const o = toTRBL(value);\n return {\n t: skipOrLimit(skip.top, o.top, 0, maxH),\n r: skipOrLimit(skip.right, o.right, 0, maxW),\n b: skipOrLimit(skip.bottom, o.bottom, 0, maxH),\n l: skipOrLimit(skip.left, o.left, 0, maxW)\n };\n}\nfunction parseBorderRadius(bar, maxW, maxH) {\n const { enableBorderRadius } = bar.getProps([\n 'enableBorderRadius'\n ]);\n const value = bar.options.borderRadius;\n const o = toTRBLCorners(value);\n const maxR = Math.min(maxW, maxH);\n const skip = bar.borderSkipped;\n const enableBorder = enableBorderRadius || isObject(value);\n return {\n topLeft: skipOrLimit(!enableBorder || skip.top || skip.left, o.topLeft, 0, maxR),\n topRight: skipOrLimit(!enableBorder || skip.top || skip.right, o.topRight, 0, maxR),\n bottomLeft: skipOrLimit(!enableBorder || skip.bottom || skip.left, o.bottomLeft, 0, maxR),\n bottomRight: skipOrLimit(!enableBorder || skip.bottom || skip.right, o.bottomRight, 0, maxR)\n };\n}\nfunction boundingRects(bar) {\n const bounds = getBarBounds(bar);\n const width = bounds.right - bounds.left;\n const height = bounds.bottom - bounds.top;\n const border = parseBorderWidth(bar, width / 2, height / 2);\n const radius = parseBorderRadius(bar, width / 2, height / 2);\n return {\n outer: {\n x: bounds.left,\n y: bounds.top,\n w: width,\n h: height,\n radius\n },\n inner: {\n x: bounds.left + border.l,\n y: bounds.top + border.t,\n w: width - border.l - border.r,\n h: height - border.t - border.b,\n radius: {\n topLeft: Math.max(0, radius.topLeft - Math.max(border.t, border.l)),\n topRight: Math.max(0, radius.topRight - Math.max(border.t, border.r)),\n bottomLeft: Math.max(0, radius.bottomLeft - Math.max(border.b, border.l)),\n bottomRight: Math.max(0, radius.bottomRight - Math.max(border.b, border.r))\n }\n }\n };\n}\nfunction inRange(bar, x, y, useFinalPosition) {\n const skipX = x === null;\n const skipY = y === null;\n const skipBoth = skipX && skipY;\n const bounds = bar && !skipBoth && getBarBounds(bar, useFinalPosition);\n return bounds && (skipX || _isBetween(x, bounds.left, bounds.right)) && (skipY || _isBetween(y, bounds.top, bounds.bottom));\n}\nfunction hasRadius(radius) {\n return radius.topLeft || radius.topRight || radius.bottomLeft || radius.bottomRight;\n}\n function addNormalRectPath(ctx, rect) {\n ctx.rect(rect.x, rect.y, rect.w, rect.h);\n}\nfunction inflateRect(rect, amount, refRect = {}) {\n const x = rect.x !== refRect.x ? -amount : 0;\n const y = rect.y !== refRect.y ? -amount : 0;\n const w = (rect.x + rect.w !== refRect.x + refRect.w ? amount : 0) - x;\n const h = (rect.y + rect.h !== refRect.y + refRect.h ? amount : 0) - y;\n return {\n x: rect.x + x,\n y: rect.y + y,\n w: rect.w + w,\n h: rect.h + h,\n radius: rect.radius\n };\n}\nclass BarElement extends Element {\n static id = 'bar';\n static defaults = {\n borderSkipped: 'start',\n borderWidth: 0,\n borderRadius: 0,\n inflateAmount: 'auto',\n pointStyle: undefined\n };\n static defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n };\n constructor(cfg){\n super();\n this.options = undefined;\n this.horizontal = undefined;\n this.base = undefined;\n this.width = undefined;\n this.height = undefined;\n this.inflateAmount = undefined;\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n draw(ctx) {\n const { inflateAmount , options: { borderColor , backgroundColor } } = this;\n const { inner , outer } = boundingRects(this);\n const addRectPath = hasRadius(outer.radius) ? addRoundedRectPath : addNormalRectPath;\n ctx.save();\n if (outer.w !== inner.w || outer.h !== inner.h) {\n ctx.beginPath();\n addRectPath(ctx, inflateRect(outer, inflateAmount, inner));\n ctx.clip();\n addRectPath(ctx, inflateRect(inner, -inflateAmount, outer));\n ctx.fillStyle = borderColor;\n ctx.fill('evenodd');\n }\n ctx.beginPath();\n addRectPath(ctx, inflateRect(inner, inflateAmount));\n ctx.fillStyle = backgroundColor;\n ctx.fill();\n ctx.restore();\n }\n inRange(mouseX, mouseY, useFinalPosition) {\n return inRange(this, mouseX, mouseY, useFinalPosition);\n }\n inXRange(mouseX, useFinalPosition) {\n return inRange(this, mouseX, null, useFinalPosition);\n }\n inYRange(mouseY, useFinalPosition) {\n return inRange(this, null, mouseY, useFinalPosition);\n }\n getCenterPoint(useFinalPosition) {\n const { x , y , base , horizontal } = this.getProps([\n 'x',\n 'y',\n 'base',\n 'horizontal'\n ], useFinalPosition);\n return {\n x: horizontal ? (x + base) / 2 : x,\n y: horizontal ? y : (y + base) / 2\n };\n }\n getRange(axis) {\n return axis === 'x' ? this.width / 2 : this.height / 2;\n }\n}\n\nvar elements = /*#__PURE__*/Object.freeze({\n__proto__: null,\nArcElement: ArcElement,\nBarElement: BarElement,\nLineElement: LineElement,\nPointElement: PointElement\n});\n\nconst BORDER_COLORS = [\n 'rgb(54, 162, 235)',\n 'rgb(255, 99, 132)',\n 'rgb(255, 159, 64)',\n 'rgb(255, 205, 86)',\n 'rgb(75, 192, 192)',\n 'rgb(153, 102, 255)',\n 'rgb(201, 203, 207)' // grey\n];\n// Border colors with 50% transparency\nconst BACKGROUND_COLORS = /* #__PURE__ */ BORDER_COLORS.map((color)=>color.replace('rgb(', 'rgba(').replace(')', ', 0.5)'));\nfunction getBorderColor(i) {\n return BORDER_COLORS[i % BORDER_COLORS.length];\n}\nfunction getBackgroundColor(i) {\n return BACKGROUND_COLORS[i % BACKGROUND_COLORS.length];\n}\nfunction colorizeDefaultDataset(dataset, i) {\n dataset.borderColor = getBorderColor(i);\n dataset.backgroundColor = getBackgroundColor(i);\n return ++i;\n}\nfunction colorizeDoughnutDataset(dataset, i) {\n dataset.backgroundColor = dataset.data.map(()=>getBorderColor(i++));\n return i;\n}\nfunction colorizePolarAreaDataset(dataset, i) {\n dataset.backgroundColor = dataset.data.map(()=>getBackgroundColor(i++));\n return i;\n}\nfunction getColorizer(chart) {\n let i = 0;\n return (dataset, datasetIndex)=>{\n const controller = chart.getDatasetMeta(datasetIndex).controller;\n if (controller instanceof DoughnutController) {\n i = colorizeDoughnutDataset(dataset, i);\n } else if (controller instanceof PolarAreaController) {\n i = colorizePolarAreaDataset(dataset, i);\n } else if (controller) {\n i = colorizeDefaultDataset(dataset, i);\n }\n };\n}\nfunction containsColorsDefinitions(descriptors) {\n let k;\n for(k in descriptors){\n if (descriptors[k].borderColor || descriptors[k].backgroundColor) {\n return true;\n }\n }\n return false;\n}\nfunction containsColorsDefinition(descriptor) {\n return descriptor && (descriptor.borderColor || descriptor.backgroundColor);\n}\nvar plugin_colors = {\n id: 'colors',\n defaults: {\n enabled: true,\n forceOverride: false\n },\n beforeLayout (chart, _args, options) {\n if (!options.enabled) {\n return;\n }\n const { data: { datasets } , options: chartOptions } = chart.config;\n const { elements } = chartOptions;\n if (!options.forceOverride && (containsColorsDefinitions(datasets) || containsColorsDefinition(chartOptions) || elements && containsColorsDefinitions(elements))) {\n return;\n }\n const colorizer = getColorizer(chart);\n datasets.forEach(colorizer);\n }\n};\n\nfunction lttbDecimation(data, start, count, availableWidth, options) {\n const samples = options.samples || availableWidth;\n if (samples >= count) {\n return data.slice(start, start + count);\n }\n const decimated = [];\n const bucketWidth = (count - 2) / (samples - 2);\n let sampledIndex = 0;\n const endIndex = start + count - 1;\n let a = start;\n let i, maxAreaPoint, maxArea, area, nextA;\n decimated[sampledIndex++] = data[a];\n for(i = 0; i < samples - 2; i++){\n let avgX = 0;\n let avgY = 0;\n let j;\n const avgRangeStart = Math.floor((i + 1) * bucketWidth) + 1 + start;\n const avgRangeEnd = Math.min(Math.floor((i + 2) * bucketWidth) + 1, count) + start;\n const avgRangeLength = avgRangeEnd - avgRangeStart;\n for(j = avgRangeStart; j < avgRangeEnd; j++){\n avgX += data[j].x;\n avgY += data[j].y;\n }\n avgX /= avgRangeLength;\n avgY /= avgRangeLength;\n const rangeOffs = Math.floor(i * bucketWidth) + 1 + start;\n const rangeTo = Math.min(Math.floor((i + 1) * bucketWidth) + 1, count) + start;\n const { x: pointAx , y: pointAy } = data[a];\n maxArea = area = -1;\n for(j = rangeOffs; j < rangeTo; j++){\n area = 0.5 * Math.abs((pointAx - avgX) * (data[j].y - pointAy) - (pointAx - data[j].x) * (avgY - pointAy));\n if (area > maxArea) {\n maxArea = area;\n maxAreaPoint = data[j];\n nextA = j;\n }\n }\n decimated[sampledIndex++] = maxAreaPoint;\n a = nextA;\n }\n decimated[sampledIndex++] = data[endIndex];\n return decimated;\n}\nfunction minMaxDecimation(data, start, count, availableWidth) {\n let avgX = 0;\n let countX = 0;\n let i, point, x, y, prevX, minIndex, maxIndex, startIndex, minY, maxY;\n const decimated = [];\n const endIndex = start + count - 1;\n const xMin = data[start].x;\n const xMax = data[endIndex].x;\n const dx = xMax - xMin;\n for(i = start; i < start + count; ++i){\n point = data[i];\n x = (point.x - xMin) / dx * availableWidth;\n y = point.y;\n const truncX = x | 0;\n if (truncX === prevX) {\n if (y < minY) {\n minY = y;\n minIndex = i;\n } else if (y > maxY) {\n maxY = y;\n maxIndex = i;\n }\n avgX = (countX * avgX + point.x) / ++countX;\n } else {\n const lastIndex = i - 1;\n if (!isNullOrUndef(minIndex) && !isNullOrUndef(maxIndex)) {\n const intermediateIndex1 = Math.min(minIndex, maxIndex);\n const intermediateIndex2 = Math.max(minIndex, maxIndex);\n if (intermediateIndex1 !== startIndex && intermediateIndex1 !== lastIndex) {\n decimated.push({\n ...data[intermediateIndex1],\n x: avgX\n });\n }\n if (intermediateIndex2 !== startIndex && intermediateIndex2 !== lastIndex) {\n decimated.push({\n ...data[intermediateIndex2],\n x: avgX\n });\n }\n }\n if (i > 0 && lastIndex !== startIndex) {\n decimated.push(data[lastIndex]);\n }\n decimated.push(point);\n prevX = truncX;\n countX = 0;\n minY = maxY = y;\n minIndex = maxIndex = startIndex = i;\n }\n }\n return decimated;\n}\nfunction cleanDecimatedDataset(dataset) {\n if (dataset._decimated) {\n const data = dataset._data;\n delete dataset._decimated;\n delete dataset._data;\n Object.defineProperty(dataset, 'data', {\n configurable: true,\n enumerable: true,\n writable: true,\n value: data\n });\n }\n}\nfunction cleanDecimatedData(chart) {\n chart.data.datasets.forEach((dataset)=>{\n cleanDecimatedDataset(dataset);\n });\n}\nfunction getStartAndCountOfVisiblePointsSimplified(meta, points) {\n const pointCount = points.length;\n let start = 0;\n let count;\n const { iScale } = meta;\n const { min , max , minDefined , maxDefined } = iScale.getUserBounds();\n if (minDefined) {\n start = _limitValue(_lookupByKey(points, iScale.axis, min).lo, 0, pointCount - 1);\n }\n if (maxDefined) {\n count = _limitValue(_lookupByKey(points, iScale.axis, max).hi + 1, start, pointCount) - start;\n } else {\n count = pointCount - start;\n }\n return {\n start,\n count\n };\n}\nvar plugin_decimation = {\n id: 'decimation',\n defaults: {\n algorithm: 'min-max',\n enabled: false\n },\n beforeElementsUpdate: (chart, args, options)=>{\n if (!options.enabled) {\n cleanDecimatedData(chart);\n return;\n }\n const availableWidth = chart.width;\n chart.data.datasets.forEach((dataset, datasetIndex)=>{\n const { _data , indexAxis } = dataset;\n const meta = chart.getDatasetMeta(datasetIndex);\n const data = _data || dataset.data;\n if (resolve([\n indexAxis,\n chart.options.indexAxis\n ]) === 'y') {\n return;\n }\n if (!meta.controller.supportsDecimation) {\n return;\n }\n const xAxis = chart.scales[meta.xAxisID];\n if (xAxis.type !== 'linear' && xAxis.type !== 'time') {\n return;\n }\n if (chart.options.parsing) {\n return;\n }\n let { start , count } = getStartAndCountOfVisiblePointsSimplified(meta, data);\n const threshold = options.threshold || 4 * availableWidth;\n if (count <= threshold) {\n cleanDecimatedDataset(dataset);\n return;\n }\n if (isNullOrUndef(_data)) {\n dataset._data = data;\n delete dataset.data;\n Object.defineProperty(dataset, 'data', {\n configurable: true,\n enumerable: true,\n get: function() {\n return this._decimated;\n },\n set: function(d) {\n this._data = d;\n }\n });\n }\n let decimated;\n switch(options.algorithm){\n case 'lttb':\n decimated = lttbDecimation(data, start, count, availableWidth, options);\n break;\n case 'min-max':\n decimated = minMaxDecimation(data, start, count, availableWidth);\n break;\n default:\n throw new Error(`Unsupported decimation algorithm '${options.algorithm}'`);\n }\n dataset._decimated = decimated;\n });\n },\n destroy (chart) {\n cleanDecimatedData(chart);\n }\n};\n\nfunction _segments(line, target, property) {\n const segments = line.segments;\n const points = line.points;\n const tpoints = target.points;\n const parts = [];\n for (const segment of segments){\n let { start , end } = segment;\n end = _findSegmentEnd(start, end, points);\n const bounds = _getBounds(property, points[start], points[end], segment.loop);\n if (!target.segments) {\n parts.push({\n source: segment,\n target: bounds,\n start: points[start],\n end: points[end]\n });\n continue;\n }\n const targetSegments = _boundSegments(target, bounds);\n for (const tgt of targetSegments){\n const subBounds = _getBounds(property, tpoints[tgt.start], tpoints[tgt.end], tgt.loop);\n const fillSources = _boundSegment(segment, points, subBounds);\n for (const fillSource of fillSources){\n parts.push({\n source: fillSource,\n target: tgt,\n start: {\n [property]: _getEdge(bounds, subBounds, 'start', Math.max)\n },\n end: {\n [property]: _getEdge(bounds, subBounds, 'end', Math.min)\n }\n });\n }\n }\n }\n return parts;\n}\nfunction _getBounds(property, first, last, loop) {\n if (loop) {\n return;\n }\n let start = first[property];\n let end = last[property];\n if (property === 'angle') {\n start = _normalizeAngle(start);\n end = _normalizeAngle(end);\n }\n return {\n property,\n start,\n end\n };\n}\nfunction _pointsFromSegments(boundary, line) {\n const { x =null , y =null } = boundary || {};\n const linePoints = line.points;\n const points = [];\n line.segments.forEach(({ start , end })=>{\n end = _findSegmentEnd(start, end, linePoints);\n const first = linePoints[start];\n const last = linePoints[end];\n if (y !== null) {\n points.push({\n x: first.x,\n y\n });\n points.push({\n x: last.x,\n y\n });\n } else if (x !== null) {\n points.push({\n x,\n y: first.y\n });\n points.push({\n x,\n y: last.y\n });\n }\n });\n return points;\n}\nfunction _findSegmentEnd(start, end, points) {\n for(; end > start; end--){\n const point = points[end];\n if (!isNaN(point.x) && !isNaN(point.y)) {\n break;\n }\n }\n return end;\n}\nfunction _getEdge(a, b, prop, fn) {\n if (a && b) {\n return fn(a[prop], b[prop]);\n }\n return a ? a[prop] : b ? b[prop] : 0;\n}\n\nfunction _createBoundaryLine(boundary, line) {\n let points = [];\n let _loop = false;\n if (isArray(boundary)) {\n _loop = true;\n points = boundary;\n } else {\n points = _pointsFromSegments(boundary, line);\n }\n return points.length ? new LineElement({\n points,\n options: {\n tension: 0\n },\n _loop,\n _fullLoop: _loop\n }) : null;\n}\nfunction _shouldApplyFill(source) {\n return source && source.fill !== false;\n}\n\nfunction _resolveTarget(sources, index, propagate) {\n const source = sources[index];\n let fill = source.fill;\n const visited = [\n index\n ];\n let target;\n if (!propagate) {\n return fill;\n }\n while(fill !== false && visited.indexOf(fill) === -1){\n if (!isNumberFinite(fill)) {\n return fill;\n }\n target = sources[fill];\n if (!target) {\n return false;\n }\n if (target.visible) {\n return fill;\n }\n visited.push(fill);\n fill = target.fill;\n }\n return false;\n}\n function _decodeFill(line, index, count) {\n const fill = parseFillOption(line);\n if (isObject(fill)) {\n return isNaN(fill.value) ? false : fill;\n }\n let target = parseFloat(fill);\n if (isNumberFinite(target) && Math.floor(target) === target) {\n return decodeTargetIndex(fill[0], index, target, count);\n }\n return [\n 'origin',\n 'start',\n 'end',\n 'stack',\n 'shape'\n ].indexOf(fill) >= 0 && fill;\n}\nfunction decodeTargetIndex(firstCh, index, target, count) {\n if (firstCh === '-' || firstCh === '+') {\n target = index + target;\n }\n if (target === index || target < 0 || target >= count) {\n return false;\n }\n return target;\n}\n function _getTargetPixel(fill, scale) {\n let pixel = null;\n if (fill === 'start') {\n pixel = scale.bottom;\n } else if (fill === 'end') {\n pixel = scale.top;\n } else if (isObject(fill)) {\n pixel = scale.getPixelForValue(fill.value);\n } else if (scale.getBasePixel) {\n pixel = scale.getBasePixel();\n }\n return pixel;\n}\n function _getTargetValue(fill, scale, startValue) {\n let value;\n if (fill === 'start') {\n value = startValue;\n } else if (fill === 'end') {\n value = scale.options.reverse ? scale.min : scale.max;\n } else if (isObject(fill)) {\n value = fill.value;\n } else {\n value = scale.getBaseValue();\n }\n return value;\n}\n function parseFillOption(line) {\n const options = line.options;\n const fillOption = options.fill;\n let fill = valueOrDefault(fillOption && fillOption.target, fillOption);\n if (fill === undefined) {\n fill = !!options.backgroundColor;\n }\n if (fill === false || fill === null) {\n return false;\n }\n if (fill === true) {\n return 'origin';\n }\n return fill;\n}\n\nfunction _buildStackLine(source) {\n const { scale , index , line } = source;\n const points = [];\n const segments = line.segments;\n const sourcePoints = line.points;\n const linesBelow = getLinesBelow(scale, index);\n linesBelow.push(_createBoundaryLine({\n x: null,\n y: scale.bottom\n }, line));\n for(let i = 0; i < segments.length; i++){\n const segment = segments[i];\n for(let j = segment.start; j <= segment.end; j++){\n addPointsBelow(points, sourcePoints[j], linesBelow);\n }\n }\n return new LineElement({\n points,\n options: {}\n });\n}\n function getLinesBelow(scale, index) {\n const below = [];\n const metas = scale.getMatchingVisibleMetas('line');\n for(let i = 0; i < metas.length; i++){\n const meta = metas[i];\n if (meta.index === index) {\n break;\n }\n if (!meta.hidden) {\n below.unshift(meta.dataset);\n }\n }\n return below;\n}\n function addPointsBelow(points, sourcePoint, linesBelow) {\n const postponed = [];\n for(let j = 0; j < linesBelow.length; j++){\n const line = linesBelow[j];\n const { first , last , point } = findPoint(line, sourcePoint, 'x');\n if (!point || first && last) {\n continue;\n }\n if (first) {\n postponed.unshift(point);\n } else {\n points.push(point);\n if (!last) {\n break;\n }\n }\n }\n points.push(...postponed);\n}\n function findPoint(line, sourcePoint, property) {\n const point = line.interpolate(sourcePoint, property);\n if (!point) {\n return {};\n }\n const pointValue = point[property];\n const segments = line.segments;\n const linePoints = line.points;\n let first = false;\n let last = false;\n for(let i = 0; i < segments.length; i++){\n const segment = segments[i];\n const firstValue = linePoints[segment.start][property];\n const lastValue = linePoints[segment.end][property];\n if (_isBetween(pointValue, firstValue, lastValue)) {\n first = pointValue === firstValue;\n last = pointValue === lastValue;\n break;\n }\n }\n return {\n first,\n last,\n point\n };\n}\n\nclass simpleArc {\n constructor(opts){\n this.x = opts.x;\n this.y = opts.y;\n this.radius = opts.radius;\n }\n pathSegment(ctx, bounds, opts) {\n const { x , y , radius } = this;\n bounds = bounds || {\n start: 0,\n end: TAU\n };\n ctx.arc(x, y, radius, bounds.end, bounds.start, true);\n return !opts.bounds;\n }\n interpolate(point) {\n const { x , y , radius } = this;\n const angle = point.angle;\n return {\n x: x + Math.cos(angle) * radius,\n y: y + Math.sin(angle) * radius,\n angle\n };\n }\n}\n\nfunction _getTarget(source) {\n const { chart , fill , line } = source;\n if (isNumberFinite(fill)) {\n return getLineByIndex(chart, fill);\n }\n if (fill === 'stack') {\n return _buildStackLine(source);\n }\n if (fill === 'shape') {\n return true;\n }\n const boundary = computeBoundary(source);\n if (boundary instanceof simpleArc) {\n return boundary;\n }\n return _createBoundaryLine(boundary, line);\n}\n function getLineByIndex(chart, index) {\n const meta = chart.getDatasetMeta(index);\n const visible = meta && chart.isDatasetVisible(index);\n return visible ? meta.dataset : null;\n}\nfunction computeBoundary(source) {\n const scale = source.scale || {};\n if (scale.getPointPositionForValue) {\n return computeCircularBoundary(source);\n }\n return computeLinearBoundary(source);\n}\nfunction computeLinearBoundary(source) {\n const { scale ={} , fill } = source;\n const pixel = _getTargetPixel(fill, scale);\n if (isNumberFinite(pixel)) {\n const horizontal = scale.isHorizontal();\n return {\n x: horizontal ? pixel : null,\n y: horizontal ? null : pixel\n };\n }\n return null;\n}\nfunction computeCircularBoundary(source) {\n const { scale , fill } = source;\n const options = scale.options;\n const length = scale.getLabels().length;\n const start = options.reverse ? scale.max : scale.min;\n const value = _getTargetValue(fill, scale, start);\n const target = [];\n if (options.grid.circular) {\n const center = scale.getPointPositionForValue(0, start);\n return new simpleArc({\n x: center.x,\n y: center.y,\n radius: scale.getDistanceFromCenterForValue(value)\n });\n }\n for(let i = 0; i < length; ++i){\n target.push(scale.getPointPositionForValue(i, value));\n }\n return target;\n}\n\nfunction _drawfill(ctx, source, area) {\n const target = _getTarget(source);\n const { line , scale , axis } = source;\n const lineOpts = line.options;\n const fillOption = lineOpts.fill;\n const color = lineOpts.backgroundColor;\n const { above =color , below =color } = fillOption || {};\n if (target && line.points.length) {\n clipArea(ctx, area);\n doFill(ctx, {\n line,\n target,\n above,\n below,\n area,\n scale,\n axis\n });\n unclipArea(ctx);\n }\n}\nfunction doFill(ctx, cfg) {\n const { line , target , above , below , area , scale } = cfg;\n const property = line._loop ? 'angle' : cfg.axis;\n ctx.save();\n if (property === 'x' && below !== above) {\n clipVertical(ctx, target, area.top);\n fill(ctx, {\n line,\n target,\n color: above,\n scale,\n property\n });\n ctx.restore();\n ctx.save();\n clipVertical(ctx, target, area.bottom);\n }\n fill(ctx, {\n line,\n target,\n color: below,\n scale,\n property\n });\n ctx.restore();\n}\nfunction clipVertical(ctx, target, clipY) {\n const { segments , points } = target;\n let first = true;\n let lineLoop = false;\n ctx.beginPath();\n for (const segment of segments){\n const { start , end } = segment;\n const firstPoint = points[start];\n const lastPoint = points[_findSegmentEnd(start, end, points)];\n if (first) {\n ctx.moveTo(firstPoint.x, firstPoint.y);\n first = false;\n } else {\n ctx.lineTo(firstPoint.x, clipY);\n ctx.lineTo(firstPoint.x, firstPoint.y);\n }\n lineLoop = !!target.pathSegment(ctx, segment, {\n move: lineLoop\n });\n if (lineLoop) {\n ctx.closePath();\n } else {\n ctx.lineTo(lastPoint.x, clipY);\n }\n }\n ctx.lineTo(target.first().x, clipY);\n ctx.closePath();\n ctx.clip();\n}\nfunction fill(ctx, cfg) {\n const { line , target , property , color , scale } = cfg;\n const segments = _segments(line, target, property);\n for (const { source: src , target: tgt , start , end } of segments){\n const { style: { backgroundColor =color } = {} } = src;\n const notShape = target !== true;\n ctx.save();\n ctx.fillStyle = backgroundColor;\n clipBounds(ctx, scale, notShape && _getBounds(property, start, end));\n ctx.beginPath();\n const lineLoop = !!line.pathSegment(ctx, src);\n let loop;\n if (notShape) {\n if (lineLoop) {\n ctx.closePath();\n } else {\n interpolatedLineTo(ctx, target, end, property);\n }\n const targetLoop = !!target.pathSegment(ctx, tgt, {\n move: lineLoop,\n reverse: true\n });\n loop = lineLoop && targetLoop;\n if (!loop) {\n interpolatedLineTo(ctx, target, start, property);\n }\n }\n ctx.closePath();\n ctx.fill(loop ? 'evenodd' : 'nonzero');\n ctx.restore();\n }\n}\nfunction clipBounds(ctx, scale, bounds) {\n const { top , bottom } = scale.chart.chartArea;\n const { property , start , end } = bounds || {};\n if (property === 'x') {\n ctx.beginPath();\n ctx.rect(start, top, end - start, bottom - top);\n ctx.clip();\n }\n}\nfunction interpolatedLineTo(ctx, target, point, property) {\n const interpolatedPoint = target.interpolate(point, property);\n if (interpolatedPoint) {\n ctx.lineTo(interpolatedPoint.x, interpolatedPoint.y);\n }\n}\n\nvar index = {\n id: 'filler',\n afterDatasetsUpdate (chart, _args, options) {\n const count = (chart.data.datasets || []).length;\n const sources = [];\n let meta, i, line, source;\n for(i = 0; i < count; ++i){\n meta = chart.getDatasetMeta(i);\n line = meta.dataset;\n source = null;\n if (line && line.options && line instanceof LineElement) {\n source = {\n visible: chart.isDatasetVisible(i),\n index: i,\n fill: _decodeFill(line, i, count),\n chart,\n axis: meta.controller.options.indexAxis,\n scale: meta.vScale,\n line\n };\n }\n meta.$filler = source;\n sources.push(source);\n }\n for(i = 0; i < count; ++i){\n source = sources[i];\n if (!source || source.fill === false) {\n continue;\n }\n source.fill = _resolveTarget(sources, i, options.propagate);\n }\n },\n beforeDraw (chart, _args, options) {\n const draw = options.drawTime === 'beforeDraw';\n const metasets = chart.getSortedVisibleDatasetMetas();\n const area = chart.chartArea;\n for(let i = metasets.length - 1; i >= 0; --i){\n const source = metasets[i].$filler;\n if (!source) {\n continue;\n }\n source.line.updateControlPoints(area, source.axis);\n if (draw && source.fill) {\n _drawfill(chart.ctx, source, area);\n }\n }\n },\n beforeDatasetsDraw (chart, _args, options) {\n if (options.drawTime !== 'beforeDatasetsDraw') {\n return;\n }\n const metasets = chart.getSortedVisibleDatasetMetas();\n for(let i = metasets.length - 1; i >= 0; --i){\n const source = metasets[i].$filler;\n if (_shouldApplyFill(source)) {\n _drawfill(chart.ctx, source, chart.chartArea);\n }\n }\n },\n beforeDatasetDraw (chart, args, options) {\n const source = args.meta.$filler;\n if (!_shouldApplyFill(source) || options.drawTime !== 'beforeDatasetDraw') {\n return;\n }\n _drawfill(chart.ctx, source, chart.chartArea);\n },\n defaults: {\n propagate: true,\n drawTime: 'beforeDatasetDraw'\n }\n};\n\nconst getBoxSize = (labelOpts, fontSize)=>{\n let { boxHeight =fontSize , boxWidth =fontSize } = labelOpts;\n if (labelOpts.usePointStyle) {\n boxHeight = Math.min(boxHeight, fontSize);\n boxWidth = labelOpts.pointStyleWidth || Math.min(boxWidth, fontSize);\n }\n return {\n boxWidth,\n boxHeight,\n itemHeight: Math.max(fontSize, boxHeight)\n };\n};\nconst itemsEqual = (a, b)=>a !== null && b !== null && a.datasetIndex === b.datasetIndex && a.index === b.index;\nclass Legend extends Element {\n constructor(config){\n super();\n this._added = false;\n this.legendHitBoxes = [];\n this._hoveredItem = null;\n this.doughnutMode = false;\n this.chart = config.chart;\n this.options = config.options;\n this.ctx = config.ctx;\n this.legendItems = undefined;\n this.columnSizes = undefined;\n this.lineWidths = undefined;\n this.maxHeight = undefined;\n this.maxWidth = undefined;\n this.top = undefined;\n this.bottom = undefined;\n this.left = undefined;\n this.right = undefined;\n this.height = undefined;\n this.width = undefined;\n this._margins = undefined;\n this.position = undefined;\n this.weight = undefined;\n this.fullSize = undefined;\n }\n update(maxWidth, maxHeight, margins) {\n this.maxWidth = maxWidth;\n this.maxHeight = maxHeight;\n this._margins = margins;\n this.setDimensions();\n this.buildLabels();\n this.fit();\n }\n setDimensions() {\n if (this.isHorizontal()) {\n this.width = this.maxWidth;\n this.left = this._margins.left;\n this.right = this.width;\n } else {\n this.height = this.maxHeight;\n this.top = this._margins.top;\n this.bottom = this.height;\n }\n }\n buildLabels() {\n const labelOpts = this.options.labels || {};\n let legendItems = callback(labelOpts.generateLabels, [\n this.chart\n ], this) || [];\n if (labelOpts.filter) {\n legendItems = legendItems.filter((item)=>labelOpts.filter(item, this.chart.data));\n }\n if (labelOpts.sort) {\n legendItems = legendItems.sort((a, b)=>labelOpts.sort(a, b, this.chart.data));\n }\n if (this.options.reverse) {\n legendItems.reverse();\n }\n this.legendItems = legendItems;\n }\n fit() {\n const { options , ctx } = this;\n if (!options.display) {\n this.width = this.height = 0;\n return;\n }\n const labelOpts = options.labels;\n const labelFont = toFont(labelOpts.font);\n const fontSize = labelFont.size;\n const titleHeight = this._computeTitleHeight();\n const { boxWidth , itemHeight } = getBoxSize(labelOpts, fontSize);\n let width, height;\n ctx.font = labelFont.string;\n if (this.isHorizontal()) {\n width = this.maxWidth;\n height = this._fitRows(titleHeight, fontSize, boxWidth, itemHeight) + 10;\n } else {\n height = this.maxHeight;\n width = this._fitCols(titleHeight, labelFont, boxWidth, itemHeight) + 10;\n }\n this.width = Math.min(width, options.maxWidth || this.maxWidth);\n this.height = Math.min(height, options.maxHeight || this.maxHeight);\n }\n _fitRows(titleHeight, fontSize, boxWidth, itemHeight) {\n const { ctx , maxWidth , options: { labels: { padding } } } = this;\n const hitboxes = this.legendHitBoxes = [];\n const lineWidths = this.lineWidths = [\n 0\n ];\n const lineHeight = itemHeight + padding;\n let totalHeight = titleHeight;\n ctx.textAlign = 'left';\n ctx.textBaseline = 'middle';\n let row = -1;\n let top = -lineHeight;\n this.legendItems.forEach((legendItem, i)=>{\n const itemWidth = boxWidth + fontSize / 2 + ctx.measureText(legendItem.text).width;\n if (i === 0 || lineWidths[lineWidths.length - 1] + itemWidth + 2 * padding > maxWidth) {\n totalHeight += lineHeight;\n lineWidths[lineWidths.length - (i > 0 ? 0 : 1)] = 0;\n top += lineHeight;\n row++;\n }\n hitboxes[i] = {\n left: 0,\n top,\n row,\n width: itemWidth,\n height: itemHeight\n };\n lineWidths[lineWidths.length - 1] += itemWidth + padding;\n });\n return totalHeight;\n }\n _fitCols(titleHeight, labelFont, boxWidth, _itemHeight) {\n const { ctx , maxHeight , options: { labels: { padding } } } = this;\n const hitboxes = this.legendHitBoxes = [];\n const columnSizes = this.columnSizes = [];\n const heightLimit = maxHeight - titleHeight;\n let totalWidth = padding;\n let currentColWidth = 0;\n let currentColHeight = 0;\n let left = 0;\n let col = 0;\n this.legendItems.forEach((legendItem, i)=>{\n const { itemWidth , itemHeight } = calculateItemSize(boxWidth, labelFont, ctx, legendItem, _itemHeight);\n if (i > 0 && currentColHeight + itemHeight + 2 * padding > heightLimit) {\n totalWidth += currentColWidth + padding;\n columnSizes.push({\n width: currentColWidth,\n height: currentColHeight\n });\n left += currentColWidth + padding;\n col++;\n currentColWidth = currentColHeight = 0;\n }\n hitboxes[i] = {\n left,\n top: currentColHeight,\n col,\n width: itemWidth,\n height: itemHeight\n };\n currentColWidth = Math.max(currentColWidth, itemWidth);\n currentColHeight += itemHeight + padding;\n });\n totalWidth += currentColWidth;\n columnSizes.push({\n width: currentColWidth,\n height: currentColHeight\n });\n return totalWidth;\n }\n adjustHitBoxes() {\n if (!this.options.display) {\n return;\n }\n const titleHeight = this._computeTitleHeight();\n const { legendHitBoxes: hitboxes , options: { align , labels: { padding } , rtl } } = this;\n const rtlHelper = getRtlAdapter(rtl, this.left, this.width);\n if (this.isHorizontal()) {\n let row = 0;\n let left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n for (const hitbox of hitboxes){\n if (row !== hitbox.row) {\n row = hitbox.row;\n left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n }\n hitbox.top += this.top + titleHeight + padding;\n hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(left), hitbox.width);\n left += hitbox.width + padding;\n }\n } else {\n let col = 0;\n let top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n for (const hitbox of hitboxes){\n if (hitbox.col !== col) {\n col = hitbox.col;\n top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n }\n hitbox.top = top;\n hitbox.left += this.left + padding;\n hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(hitbox.left), hitbox.width);\n top += hitbox.height + padding;\n }\n }\n }\n isHorizontal() {\n return this.options.position === 'top' || this.options.position === 'bottom';\n }\n draw() {\n if (this.options.display) {\n const ctx = this.ctx;\n clipArea(ctx, this);\n this._draw();\n unclipArea(ctx);\n }\n }\n _draw() {\n const { options: opts , columnSizes , lineWidths , ctx } = this;\n const { align , labels: labelOpts } = opts;\n const defaultColor = defaults.color;\n const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n const labelFont = toFont(labelOpts.font);\n const { padding } = labelOpts;\n const fontSize = labelFont.size;\n const halfFontSize = fontSize / 2;\n let cursor;\n this.drawTitle();\n ctx.textAlign = rtlHelper.textAlign('left');\n ctx.textBaseline = 'middle';\n ctx.lineWidth = 0.5;\n ctx.font = labelFont.string;\n const { boxWidth , boxHeight , itemHeight } = getBoxSize(labelOpts, fontSize);\n const drawLegendBox = function(x, y, legendItem) {\n if (isNaN(boxWidth) || boxWidth <= 0 || isNaN(boxHeight) || boxHeight < 0) {\n return;\n }\n ctx.save();\n const lineWidth = valueOrDefault(legendItem.lineWidth, 1);\n ctx.fillStyle = valueOrDefault(legendItem.fillStyle, defaultColor);\n ctx.lineCap = valueOrDefault(legendItem.lineCap, 'butt');\n ctx.lineDashOffset = valueOrDefault(legendItem.lineDashOffset, 0);\n ctx.lineJoin = valueOrDefault(legendItem.lineJoin, 'miter');\n ctx.lineWidth = lineWidth;\n ctx.strokeStyle = valueOrDefault(legendItem.strokeStyle, defaultColor);\n ctx.setLineDash(valueOrDefault(legendItem.lineDash, []));\n if (labelOpts.usePointStyle) {\n const drawOptions = {\n radius: boxHeight * Math.SQRT2 / 2,\n pointStyle: legendItem.pointStyle,\n rotation: legendItem.rotation,\n borderWidth: lineWidth\n };\n const centerX = rtlHelper.xPlus(x, boxWidth / 2);\n const centerY = y + halfFontSize;\n drawPointLegend(ctx, drawOptions, centerX, centerY, labelOpts.pointStyleWidth && boxWidth);\n } else {\n const yBoxTop = y + Math.max((fontSize - boxHeight) / 2, 0);\n const xBoxLeft = rtlHelper.leftForLtr(x, boxWidth);\n const borderRadius = toTRBLCorners(legendItem.borderRadius);\n ctx.beginPath();\n if (Object.values(borderRadius).some((v)=>v !== 0)) {\n addRoundedRectPath(ctx, {\n x: xBoxLeft,\n y: yBoxTop,\n w: boxWidth,\n h: boxHeight,\n radius: borderRadius\n });\n } else {\n ctx.rect(xBoxLeft, yBoxTop, boxWidth, boxHeight);\n }\n ctx.fill();\n if (lineWidth !== 0) {\n ctx.stroke();\n }\n }\n ctx.restore();\n };\n const fillText = function(x, y, legendItem) {\n renderText(ctx, legendItem.text, x, y + itemHeight / 2, labelFont, {\n strikethrough: legendItem.hidden,\n textAlign: rtlHelper.textAlign(legendItem.textAlign)\n });\n };\n const isHorizontal = this.isHorizontal();\n const titleHeight = this._computeTitleHeight();\n if (isHorizontal) {\n cursor = {\n x: _alignStartEnd(align, this.left + padding, this.right - lineWidths[0]),\n y: this.top + padding + titleHeight,\n line: 0\n };\n } else {\n cursor = {\n x: this.left + padding,\n y: _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[0].height),\n line: 0\n };\n }\n overrideTextDirection(this.ctx, opts.textDirection);\n const lineHeight = itemHeight + padding;\n this.legendItems.forEach((legendItem, i)=>{\n ctx.strokeStyle = legendItem.fontColor;\n ctx.fillStyle = legendItem.fontColor;\n const textWidth = ctx.measureText(legendItem.text).width;\n const textAlign = rtlHelper.textAlign(legendItem.textAlign || (legendItem.textAlign = labelOpts.textAlign));\n const width = boxWidth + halfFontSize + textWidth;\n let x = cursor.x;\n let y = cursor.y;\n rtlHelper.setWidth(this.width);\n if (isHorizontal) {\n if (i > 0 && x + width + padding > this.right) {\n y = cursor.y += lineHeight;\n cursor.line++;\n x = cursor.x = _alignStartEnd(align, this.left + padding, this.right - lineWidths[cursor.line]);\n }\n } else if (i > 0 && y + lineHeight > this.bottom) {\n x = cursor.x = x + columnSizes[cursor.line].width + padding;\n cursor.line++;\n y = cursor.y = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[cursor.line].height);\n }\n const realX = rtlHelper.x(x);\n drawLegendBox(realX, y, legendItem);\n x = _textX(textAlign, x + boxWidth + halfFontSize, isHorizontal ? x + width : this.right, opts.rtl);\n fillText(rtlHelper.x(x), y, legendItem);\n if (isHorizontal) {\n cursor.x += width + padding;\n } else if (typeof legendItem.text !== 'string') {\n const fontLineHeight = labelFont.lineHeight;\n cursor.y += calculateLegendItemHeight(legendItem, fontLineHeight) + padding;\n } else {\n cursor.y += lineHeight;\n }\n });\n restoreTextDirection(this.ctx, opts.textDirection);\n }\n drawTitle() {\n const opts = this.options;\n const titleOpts = opts.title;\n const titleFont = toFont(titleOpts.font);\n const titlePadding = toPadding(titleOpts.padding);\n if (!titleOpts.display) {\n return;\n }\n const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n const ctx = this.ctx;\n const position = titleOpts.position;\n const halfFontSize = titleFont.size / 2;\n const topPaddingPlusHalfFontSize = titlePadding.top + halfFontSize;\n let y;\n let left = this.left;\n let maxWidth = this.width;\n if (this.isHorizontal()) {\n maxWidth = Math.max(...this.lineWidths);\n y = this.top + topPaddingPlusHalfFontSize;\n left = _alignStartEnd(opts.align, left, this.right - maxWidth);\n } else {\n const maxHeight = this.columnSizes.reduce((acc, size)=>Math.max(acc, size.height), 0);\n y = topPaddingPlusHalfFontSize + _alignStartEnd(opts.align, this.top, this.bottom - maxHeight - opts.labels.padding - this._computeTitleHeight());\n }\n const x = _alignStartEnd(position, left, left + maxWidth);\n ctx.textAlign = rtlHelper.textAlign(_toLeftRightCenter(position));\n ctx.textBaseline = 'middle';\n ctx.strokeStyle = titleOpts.color;\n ctx.fillStyle = titleOpts.color;\n ctx.font = titleFont.string;\n renderText(ctx, titleOpts.text, x, y, titleFont);\n }\n _computeTitleHeight() {\n const titleOpts = this.options.title;\n const titleFont = toFont(titleOpts.font);\n const titlePadding = toPadding(titleOpts.padding);\n return titleOpts.display ? titleFont.lineHeight + titlePadding.height : 0;\n }\n _getLegendItemAt(x, y) {\n let i, hitBox, lh;\n if (_isBetween(x, this.left, this.right) && _isBetween(y, this.top, this.bottom)) {\n lh = this.legendHitBoxes;\n for(i = 0; i < lh.length; ++i){\n hitBox = lh[i];\n if (_isBetween(x, hitBox.left, hitBox.left + hitBox.width) && _isBetween(y, hitBox.top, hitBox.top + hitBox.height)) {\n return this.legendItems[i];\n }\n }\n }\n return null;\n }\n handleEvent(e) {\n const opts = this.options;\n if (!isListened(e.type, opts)) {\n return;\n }\n const hoveredItem = this._getLegendItemAt(e.x, e.y);\n if (e.type === 'mousemove' || e.type === 'mouseout') {\n const previous = this._hoveredItem;\n const sameItem = itemsEqual(previous, hoveredItem);\n if (previous && !sameItem) {\n callback(opts.onLeave, [\n e,\n previous,\n this\n ], this);\n }\n this._hoveredItem = hoveredItem;\n if (hoveredItem && !sameItem) {\n callback(opts.onHover, [\n e,\n hoveredItem,\n this\n ], this);\n }\n } else if (hoveredItem) {\n callback(opts.onClick, [\n e,\n hoveredItem,\n this\n ], this);\n }\n }\n}\nfunction calculateItemSize(boxWidth, labelFont, ctx, legendItem, _itemHeight) {\n const itemWidth = calculateItemWidth(legendItem, boxWidth, labelFont, ctx);\n const itemHeight = calculateItemHeight(_itemHeight, legendItem, labelFont.lineHeight);\n return {\n itemWidth,\n itemHeight\n };\n}\nfunction calculateItemWidth(legendItem, boxWidth, labelFont, ctx) {\n let legendItemText = legendItem.text;\n if (legendItemText && typeof legendItemText !== 'string') {\n legendItemText = legendItemText.reduce((a, b)=>a.length > b.length ? a : b);\n }\n return boxWidth + labelFont.size / 2 + ctx.measureText(legendItemText).width;\n}\nfunction calculateItemHeight(_itemHeight, legendItem, fontLineHeight) {\n let itemHeight = _itemHeight;\n if (typeof legendItem.text !== 'string') {\n itemHeight = calculateLegendItemHeight(legendItem, fontLineHeight);\n }\n return itemHeight;\n}\nfunction calculateLegendItemHeight(legendItem, fontLineHeight) {\n const labelHeight = legendItem.text ? legendItem.text.length : 0;\n return fontLineHeight * labelHeight;\n}\nfunction isListened(type, opts) {\n if ((type === 'mousemove' || type === 'mouseout') && (opts.onHover || opts.onLeave)) {\n return true;\n }\n if (opts.onClick && (type === 'click' || type === 'mouseup')) {\n return true;\n }\n return false;\n}\nvar plugin_legend = {\n id: 'legend',\n _element: Legend,\n start (chart, _args, options) {\n const legend = chart.legend = new Legend({\n ctx: chart.ctx,\n options,\n chart\n });\n layouts.configure(chart, legend, options);\n layouts.addBox(chart, legend);\n },\n stop (chart) {\n layouts.removeBox(chart, chart.legend);\n delete chart.legend;\n },\n beforeUpdate (chart, _args, options) {\n const legend = chart.legend;\n layouts.configure(chart, legend, options);\n legend.options = options;\n },\n afterUpdate (chart) {\n const legend = chart.legend;\n legend.buildLabels();\n legend.adjustHitBoxes();\n },\n afterEvent (chart, args) {\n if (!args.replay) {\n chart.legend.handleEvent(args.event);\n }\n },\n defaults: {\n display: true,\n position: 'top',\n align: 'center',\n fullSize: true,\n reverse: false,\n weight: 1000,\n onClick (e, legendItem, legend) {\n const index = legendItem.datasetIndex;\n const ci = legend.chart;\n if (ci.isDatasetVisible(index)) {\n ci.hide(index);\n legendItem.hidden = true;\n } else {\n ci.show(index);\n legendItem.hidden = false;\n }\n },\n onHover: null,\n onLeave: null,\n labels: {\n color: (ctx)=>ctx.chart.options.color,\n boxWidth: 40,\n padding: 10,\n generateLabels (chart) {\n const datasets = chart.data.datasets;\n const { labels: { usePointStyle , pointStyle , textAlign , color , useBorderRadius , borderRadius } } = chart.legend.options;\n return chart._getSortedDatasetMetas().map((meta)=>{\n const style = meta.controller.getStyle(usePointStyle ? 0 : undefined);\n const borderWidth = toPadding(style.borderWidth);\n return {\n text: datasets[meta.index].label,\n fillStyle: style.backgroundColor,\n fontColor: color,\n hidden: !meta.visible,\n lineCap: style.borderCapStyle,\n lineDash: style.borderDash,\n lineDashOffset: style.borderDashOffset,\n lineJoin: style.borderJoinStyle,\n lineWidth: (borderWidth.width + borderWidth.height) / 4,\n strokeStyle: style.borderColor,\n pointStyle: pointStyle || style.pointStyle,\n rotation: style.rotation,\n textAlign: textAlign || style.textAlign,\n borderRadius: useBorderRadius && (borderRadius || style.borderRadius),\n datasetIndex: meta.index\n };\n }, this);\n }\n },\n title: {\n color: (ctx)=>ctx.chart.options.color,\n display: false,\n position: 'center',\n text: ''\n }\n },\n descriptors: {\n _scriptable: (name)=>!name.startsWith('on'),\n labels: {\n _scriptable: (name)=>![\n 'generateLabels',\n 'filter',\n 'sort'\n ].includes(name)\n }\n }\n};\n\nclass Title extends Element {\n constructor(config){\n super();\n this.chart = config.chart;\n this.options = config.options;\n this.ctx = config.ctx;\n this._padding = undefined;\n this.top = undefined;\n this.bottom = undefined;\n this.left = undefined;\n this.right = undefined;\n this.width = undefined;\n this.height = undefined;\n this.position = undefined;\n this.weight = undefined;\n this.fullSize = undefined;\n }\n update(maxWidth, maxHeight) {\n const opts = this.options;\n this.left = 0;\n this.top = 0;\n if (!opts.display) {\n this.width = this.height = this.right = this.bottom = 0;\n return;\n }\n this.width = this.right = maxWidth;\n this.height = this.bottom = maxHeight;\n const lineCount = isArray(opts.text) ? opts.text.length : 1;\n this._padding = toPadding(opts.padding);\n const textSize = lineCount * toFont(opts.font).lineHeight + this._padding.height;\n if (this.isHorizontal()) {\n this.height = textSize;\n } else {\n this.width = textSize;\n }\n }\n isHorizontal() {\n const pos = this.options.position;\n return pos === 'top' || pos === 'bottom';\n }\n _drawArgs(offset) {\n const { top , left , bottom , right , options } = this;\n const align = options.align;\n let rotation = 0;\n let maxWidth, titleX, titleY;\n if (this.isHorizontal()) {\n titleX = _alignStartEnd(align, left, right);\n titleY = top + offset;\n maxWidth = right - left;\n } else {\n if (options.position === 'left') {\n titleX = left + offset;\n titleY = _alignStartEnd(align, bottom, top);\n rotation = PI * -0.5;\n } else {\n titleX = right - offset;\n titleY = _alignStartEnd(align, top, bottom);\n rotation = PI * 0.5;\n }\n maxWidth = bottom - top;\n }\n return {\n titleX,\n titleY,\n maxWidth,\n rotation\n };\n }\n draw() {\n const ctx = this.ctx;\n const opts = this.options;\n if (!opts.display) {\n return;\n }\n const fontOpts = toFont(opts.font);\n const lineHeight = fontOpts.lineHeight;\n const offset = lineHeight / 2 + this._padding.top;\n const { titleX , titleY , maxWidth , rotation } = this._drawArgs(offset);\n renderText(ctx, opts.text, 0, 0, fontOpts, {\n color: opts.color,\n maxWidth,\n rotation,\n textAlign: _toLeftRightCenter(opts.align),\n textBaseline: 'middle',\n translation: [\n titleX,\n titleY\n ]\n });\n }\n}\nfunction createTitle(chart, titleOpts) {\n const title = new Title({\n ctx: chart.ctx,\n options: titleOpts,\n chart\n });\n layouts.configure(chart, title, titleOpts);\n layouts.addBox(chart, title);\n chart.titleBlock = title;\n}\nvar plugin_title = {\n id: 'title',\n _element: Title,\n start (chart, _args, options) {\n createTitle(chart, options);\n },\n stop (chart) {\n const titleBlock = chart.titleBlock;\n layouts.removeBox(chart, titleBlock);\n delete chart.titleBlock;\n },\n beforeUpdate (chart, _args, options) {\n const title = chart.titleBlock;\n layouts.configure(chart, title, options);\n title.options = options;\n },\n defaults: {\n align: 'center',\n display: false,\n font: {\n weight: 'bold'\n },\n fullSize: true,\n padding: 10,\n position: 'top',\n text: '',\n weight: 2000\n },\n defaultRoutes: {\n color: 'color'\n },\n descriptors: {\n _scriptable: true,\n _indexable: false\n }\n};\n\nconst map = new WeakMap();\nvar plugin_subtitle = {\n id: 'subtitle',\n start (chart, _args, options) {\n const title = new Title({\n ctx: chart.ctx,\n options,\n chart\n });\n layouts.configure(chart, title, options);\n layouts.addBox(chart, title);\n map.set(chart, title);\n },\n stop (chart) {\n layouts.removeBox(chart, map.get(chart));\n map.delete(chart);\n },\n beforeUpdate (chart, _args, options) {\n const title = map.get(chart);\n layouts.configure(chart, title, options);\n title.options = options;\n },\n defaults: {\n align: 'center',\n display: false,\n font: {\n weight: 'normal'\n },\n fullSize: true,\n padding: 0,\n position: 'top',\n text: '',\n weight: 1500\n },\n defaultRoutes: {\n color: 'color'\n },\n descriptors: {\n _scriptable: true,\n _indexable: false\n }\n};\n\nconst positioners = {\n average (items) {\n if (!items.length) {\n return false;\n }\n let i, len;\n let x = 0;\n let y = 0;\n let count = 0;\n for(i = 0, len = items.length; i < len; ++i){\n const el = items[i].element;\n if (el && el.hasValue()) {\n const pos = el.tooltipPosition();\n x += pos.x;\n y += pos.y;\n ++count;\n }\n }\n return {\n x: x / count,\n y: y / count\n };\n },\n nearest (items, eventPosition) {\n if (!items.length) {\n return false;\n }\n let x = eventPosition.x;\n let y = eventPosition.y;\n let minDistance = Number.POSITIVE_INFINITY;\n let i, len, nearestElement;\n for(i = 0, len = items.length; i < len; ++i){\n const el = items[i].element;\n if (el && el.hasValue()) {\n const center = el.getCenterPoint();\n const d = distanceBetweenPoints(eventPosition, center);\n if (d < minDistance) {\n minDistance = d;\n nearestElement = el;\n }\n }\n }\n if (nearestElement) {\n const tp = nearestElement.tooltipPosition();\n x = tp.x;\n y = tp.y;\n }\n return {\n x,\n y\n };\n }\n};\nfunction pushOrConcat(base, toPush) {\n if (toPush) {\n if (isArray(toPush)) {\n Array.prototype.push.apply(base, toPush);\n } else {\n base.push(toPush);\n }\n }\n return base;\n}\n function splitNewlines(str) {\n if ((typeof str === 'string' || str instanceof String) && str.indexOf('\\n') > -1) {\n return str.split('\\n');\n }\n return str;\n}\n function createTooltipItem(chart, item) {\n const { element , datasetIndex , index } = item;\n const controller = chart.getDatasetMeta(datasetIndex).controller;\n const { label , value } = controller.getLabelAndValue(index);\n return {\n chart,\n label,\n parsed: controller.getParsed(index),\n raw: chart.data.datasets[datasetIndex].data[index],\n formattedValue: value,\n dataset: controller.getDataset(),\n dataIndex: index,\n datasetIndex,\n element\n };\n}\n function getTooltipSize(tooltip, options) {\n const ctx = tooltip.chart.ctx;\n const { body , footer , title } = tooltip;\n const { boxWidth , boxHeight } = options;\n const bodyFont = toFont(options.bodyFont);\n const titleFont = toFont(options.titleFont);\n const footerFont = toFont(options.footerFont);\n const titleLineCount = title.length;\n const footerLineCount = footer.length;\n const bodyLineItemCount = body.length;\n const padding = toPadding(options.padding);\n let height = padding.height;\n let width = 0;\n let combinedBodyLength = body.reduce((count, bodyItem)=>count + bodyItem.before.length + bodyItem.lines.length + bodyItem.after.length, 0);\n combinedBodyLength += tooltip.beforeBody.length + tooltip.afterBody.length;\n if (titleLineCount) {\n height += titleLineCount * titleFont.lineHeight + (titleLineCount - 1) * options.titleSpacing + options.titleMarginBottom;\n }\n if (combinedBodyLength) {\n const bodyLineHeight = options.displayColors ? Math.max(boxHeight, bodyFont.lineHeight) : bodyFont.lineHeight;\n height += bodyLineItemCount * bodyLineHeight + (combinedBodyLength - bodyLineItemCount) * bodyFont.lineHeight + (combinedBodyLength - 1) * options.bodySpacing;\n }\n if (footerLineCount) {\n height += options.footerMarginTop + footerLineCount * footerFont.lineHeight + (footerLineCount - 1) * options.footerSpacing;\n }\n let widthPadding = 0;\n const maxLineWidth = function(line) {\n width = Math.max(width, ctx.measureText(line).width + widthPadding);\n };\n ctx.save();\n ctx.font = titleFont.string;\n each(tooltip.title, maxLineWidth);\n ctx.font = bodyFont.string;\n each(tooltip.beforeBody.concat(tooltip.afterBody), maxLineWidth);\n widthPadding = options.displayColors ? boxWidth + 2 + options.boxPadding : 0;\n each(body, (bodyItem)=>{\n each(bodyItem.before, maxLineWidth);\n each(bodyItem.lines, maxLineWidth);\n each(bodyItem.after, maxLineWidth);\n });\n widthPadding = 0;\n ctx.font = footerFont.string;\n each(tooltip.footer, maxLineWidth);\n ctx.restore();\n width += padding.width;\n return {\n width,\n height\n };\n}\nfunction determineYAlign(chart, size) {\n const { y , height } = size;\n if (y < height / 2) {\n return 'top';\n } else if (y > chart.height - height / 2) {\n return 'bottom';\n }\n return 'center';\n}\nfunction doesNotFitWithAlign(xAlign, chart, options, size) {\n const { x , width } = size;\n const caret = options.caretSize + options.caretPadding;\n if (xAlign === 'left' && x + width + caret > chart.width) {\n return true;\n }\n if (xAlign === 'right' && x - width - caret < 0) {\n return true;\n }\n}\nfunction determineXAlign(chart, options, size, yAlign) {\n const { x , width } = size;\n const { width: chartWidth , chartArea: { left , right } } = chart;\n let xAlign = 'center';\n if (yAlign === 'center') {\n xAlign = x <= (left + right) / 2 ? 'left' : 'right';\n } else if (x <= width / 2) {\n xAlign = 'left';\n } else if (x >= chartWidth - width / 2) {\n xAlign = 'right';\n }\n if (doesNotFitWithAlign(xAlign, chart, options, size)) {\n xAlign = 'center';\n }\n return xAlign;\n}\n function determineAlignment(chart, options, size) {\n const yAlign = size.yAlign || options.yAlign || determineYAlign(chart, size);\n return {\n xAlign: size.xAlign || options.xAlign || determineXAlign(chart, options, size, yAlign),\n yAlign\n };\n}\nfunction alignX(size, xAlign) {\n let { x , width } = size;\n if (xAlign === 'right') {\n x -= width;\n } else if (xAlign === 'center') {\n x -= width / 2;\n }\n return x;\n}\nfunction alignY(size, yAlign, paddingAndSize) {\n let { y , height } = size;\n if (yAlign === 'top') {\n y += paddingAndSize;\n } else if (yAlign === 'bottom') {\n y -= height + paddingAndSize;\n } else {\n y -= height / 2;\n }\n return y;\n}\n function getBackgroundPoint(options, size, alignment, chart) {\n const { caretSize , caretPadding , cornerRadius } = options;\n const { xAlign , yAlign } = alignment;\n const paddingAndSize = caretSize + caretPadding;\n const { topLeft , topRight , bottomLeft , bottomRight } = toTRBLCorners(cornerRadius);\n let x = alignX(size, xAlign);\n const y = alignY(size, yAlign, paddingAndSize);\n if (yAlign === 'center') {\n if (xAlign === 'left') {\n x += paddingAndSize;\n } else if (xAlign === 'right') {\n x -= paddingAndSize;\n }\n } else if (xAlign === 'left') {\n x -= Math.max(topLeft, bottomLeft) + caretSize;\n } else if (xAlign === 'right') {\n x += Math.max(topRight, bottomRight) + caretSize;\n }\n return {\n x: _limitValue(x, 0, chart.width - size.width),\n y: _limitValue(y, 0, chart.height - size.height)\n };\n}\nfunction getAlignedX(tooltip, align, options) {\n const padding = toPadding(options.padding);\n return align === 'center' ? tooltip.x + tooltip.width / 2 : align === 'right' ? tooltip.x + tooltip.width - padding.right : tooltip.x + padding.left;\n}\n function getBeforeAfterBodyLines(callback) {\n return pushOrConcat([], splitNewlines(callback));\n}\nfunction createTooltipContext(parent, tooltip, tooltipItems) {\n return createContext(parent, {\n tooltip,\n tooltipItems,\n type: 'tooltip'\n });\n}\nfunction overrideCallbacks(callbacks, context) {\n const override = context && context.dataset && context.dataset.tooltip && context.dataset.tooltip.callbacks;\n return override ? callbacks.override(override) : callbacks;\n}\nconst defaultCallbacks = {\n beforeTitle: noop,\n title (tooltipItems) {\n if (tooltipItems.length > 0) {\n const item = tooltipItems[0];\n const labels = item.chart.data.labels;\n const labelCount = labels ? labels.length : 0;\n if (this && this.options && this.options.mode === 'dataset') {\n return item.dataset.label || '';\n } else if (item.label) {\n return item.label;\n } else if (labelCount > 0 && item.dataIndex < labelCount) {\n return labels[item.dataIndex];\n }\n }\n return '';\n },\n afterTitle: noop,\n beforeBody: noop,\n beforeLabel: noop,\n label (tooltipItem) {\n if (this && this.options && this.options.mode === 'dataset') {\n return tooltipItem.label + ': ' + tooltipItem.formattedValue || tooltipItem.formattedValue;\n }\n let label = tooltipItem.dataset.label || '';\n if (label) {\n label += ': ';\n }\n const value = tooltipItem.formattedValue;\n if (!isNullOrUndef(value)) {\n label += value;\n }\n return label;\n },\n labelColor (tooltipItem) {\n const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n const options = meta.controller.getStyle(tooltipItem.dataIndex);\n return {\n borderColor: options.borderColor,\n backgroundColor: options.backgroundColor,\n borderWidth: options.borderWidth,\n borderDash: options.borderDash,\n borderDashOffset: options.borderDashOffset,\n borderRadius: 0\n };\n },\n labelTextColor () {\n return this.options.bodyColor;\n },\n labelPointStyle (tooltipItem) {\n const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n const options = meta.controller.getStyle(tooltipItem.dataIndex);\n return {\n pointStyle: options.pointStyle,\n rotation: options.rotation\n };\n },\n afterLabel: noop,\n afterBody: noop,\n beforeFooter: noop,\n footer: noop,\n afterFooter: noop\n};\n function invokeCallbackWithFallback(callbacks, name, ctx, arg) {\n const result = callbacks[name].call(ctx, arg);\n if (typeof result === 'undefined') {\n return defaultCallbacks[name].call(ctx, arg);\n }\n return result;\n}\nclass Tooltip extends Element {\n static positioners = positioners;\n constructor(config){\n super();\n this.opacity = 0;\n this._active = [];\n this._eventPosition = undefined;\n this._size = undefined;\n this._cachedAnimations = undefined;\n this._tooltipItems = [];\n this.$animations = undefined;\n this.$context = undefined;\n this.chart = config.chart;\n this.options = config.options;\n this.dataPoints = undefined;\n this.title = undefined;\n this.beforeBody = undefined;\n this.body = undefined;\n this.afterBody = undefined;\n this.footer = undefined;\n this.xAlign = undefined;\n this.yAlign = undefined;\n this.x = undefined;\n this.y = undefined;\n this.height = undefined;\n this.width = undefined;\n this.caretX = undefined;\n this.caretY = undefined;\n this.labelColors = undefined;\n this.labelPointStyles = undefined;\n this.labelTextColors = undefined;\n }\n initialize(options) {\n this.options = options;\n this._cachedAnimations = undefined;\n this.$context = undefined;\n }\n _resolveAnimations() {\n const cached = this._cachedAnimations;\n if (cached) {\n return cached;\n }\n const chart = this.chart;\n const options = this.options.setContext(this.getContext());\n const opts = options.enabled && chart.options.animation && options.animations;\n const animations = new Animations(this.chart, opts);\n if (opts._cacheable) {\n this._cachedAnimations = Object.freeze(animations);\n }\n return animations;\n }\n getContext() {\n return this.$context || (this.$context = createTooltipContext(this.chart.getContext(), this, this._tooltipItems));\n }\n getTitle(context, options) {\n const { callbacks } = options;\n const beforeTitle = invokeCallbackWithFallback(callbacks, 'beforeTitle', this, context);\n const title = invokeCallbackWithFallback(callbacks, 'title', this, context);\n const afterTitle = invokeCallbackWithFallback(callbacks, 'afterTitle', this, context);\n let lines = [];\n lines = pushOrConcat(lines, splitNewlines(beforeTitle));\n lines = pushOrConcat(lines, splitNewlines(title));\n lines = pushOrConcat(lines, splitNewlines(afterTitle));\n return lines;\n }\n getBeforeBody(tooltipItems, options) {\n return getBeforeAfterBodyLines(invokeCallbackWithFallback(options.callbacks, 'beforeBody', this, tooltipItems));\n }\n getBody(tooltipItems, options) {\n const { callbacks } = options;\n const bodyItems = [];\n each(tooltipItems, (context)=>{\n const bodyItem = {\n before: [],\n lines: [],\n after: []\n };\n const scoped = overrideCallbacks(callbacks, context);\n pushOrConcat(bodyItem.before, splitNewlines(invokeCallbackWithFallback(scoped, 'beforeLabel', this, context)));\n pushOrConcat(bodyItem.lines, invokeCallbackWithFallback(scoped, 'label', this, context));\n pushOrConcat(bodyItem.after, splitNewlines(invokeCallbackWithFallback(scoped, 'afterLabel', this, context)));\n bodyItems.push(bodyItem);\n });\n return bodyItems;\n }\n getAfterBody(tooltipItems, options) {\n return getBeforeAfterBodyLines(invokeCallbackWithFallback(options.callbacks, 'afterBody', this, tooltipItems));\n }\n getFooter(tooltipItems, options) {\n const { callbacks } = options;\n const beforeFooter = invokeCallbackWithFallback(callbacks, 'beforeFooter', this, tooltipItems);\n const footer = invokeCallbackWithFallback(callbacks, 'footer', this, tooltipItems);\n const afterFooter = invokeCallbackWithFallback(callbacks, 'afterFooter', this, tooltipItems);\n let lines = [];\n lines = pushOrConcat(lines, splitNewlines(beforeFooter));\n lines = pushOrConcat(lines, splitNewlines(footer));\n lines = pushOrConcat(lines, splitNewlines(afterFooter));\n return lines;\n }\n _createItems(options) {\n const active = this._active;\n const data = this.chart.data;\n const labelColors = [];\n const labelPointStyles = [];\n const labelTextColors = [];\n let tooltipItems = [];\n let i, len;\n for(i = 0, len = active.length; i < len; ++i){\n tooltipItems.push(createTooltipItem(this.chart, active[i]));\n }\n if (options.filter) {\n tooltipItems = tooltipItems.filter((element, index, array)=>options.filter(element, index, array, data));\n }\n if (options.itemSort) {\n tooltipItems = tooltipItems.sort((a, b)=>options.itemSort(a, b, data));\n }\n each(tooltipItems, (context)=>{\n const scoped = overrideCallbacks(options.callbacks, context);\n labelColors.push(invokeCallbackWithFallback(scoped, 'labelColor', this, context));\n labelPointStyles.push(invokeCallbackWithFallback(scoped, 'labelPointStyle', this, context));\n labelTextColors.push(invokeCallbackWithFallback(scoped, 'labelTextColor', this, context));\n });\n this.labelColors = labelColors;\n this.labelPointStyles = labelPointStyles;\n this.labelTextColors = labelTextColors;\n this.dataPoints = tooltipItems;\n return tooltipItems;\n }\n update(changed, replay) {\n const options = this.options.setContext(this.getContext());\n const active = this._active;\n let properties;\n let tooltipItems = [];\n if (!active.length) {\n if (this.opacity !== 0) {\n properties = {\n opacity: 0\n };\n }\n } else {\n const position = positioners[options.position].call(this, active, this._eventPosition);\n tooltipItems = this._createItems(options);\n this.title = this.getTitle(tooltipItems, options);\n this.beforeBody = this.getBeforeBody(tooltipItems, options);\n this.body = this.getBody(tooltipItems, options);\n this.afterBody = this.getAfterBody(tooltipItems, options);\n this.footer = this.getFooter(tooltipItems, options);\n const size = this._size = getTooltipSize(this, options);\n const positionAndSize = Object.assign({}, position, size);\n const alignment = determineAlignment(this.chart, options, positionAndSize);\n const backgroundPoint = getBackgroundPoint(options, positionAndSize, alignment, this.chart);\n this.xAlign = alignment.xAlign;\n this.yAlign = alignment.yAlign;\n properties = {\n opacity: 1,\n x: backgroundPoint.x,\n y: backgroundPoint.y,\n width: size.width,\n height: size.height,\n caretX: position.x,\n caretY: position.y\n };\n }\n this._tooltipItems = tooltipItems;\n this.$context = undefined;\n if (properties) {\n this._resolveAnimations().update(this, properties);\n }\n if (changed && options.external) {\n options.external.call(this, {\n chart: this.chart,\n tooltip: this,\n replay\n });\n }\n }\n drawCaret(tooltipPoint, ctx, size, options) {\n const caretPosition = this.getCaretPosition(tooltipPoint, size, options);\n ctx.lineTo(caretPosition.x1, caretPosition.y1);\n ctx.lineTo(caretPosition.x2, caretPosition.y2);\n ctx.lineTo(caretPosition.x3, caretPosition.y3);\n }\n getCaretPosition(tooltipPoint, size, options) {\n const { xAlign , yAlign } = this;\n const { caretSize , cornerRadius } = options;\n const { topLeft , topRight , bottomLeft , bottomRight } = toTRBLCorners(cornerRadius);\n const { x: ptX , y: ptY } = tooltipPoint;\n const { width , height } = size;\n let x1, x2, x3, y1, y2, y3;\n if (yAlign === 'center') {\n y2 = ptY + height / 2;\n if (xAlign === 'left') {\n x1 = ptX;\n x2 = x1 - caretSize;\n y1 = y2 + caretSize;\n y3 = y2 - caretSize;\n } else {\n x1 = ptX + width;\n x2 = x1 + caretSize;\n y1 = y2 - caretSize;\n y3 = y2 + caretSize;\n }\n x3 = x1;\n } else {\n if (xAlign === 'left') {\n x2 = ptX + Math.max(topLeft, bottomLeft) + caretSize;\n } else if (xAlign === 'right') {\n x2 = ptX + width - Math.max(topRight, bottomRight) - caretSize;\n } else {\n x2 = this.caretX;\n }\n if (yAlign === 'top') {\n y1 = ptY;\n y2 = y1 - caretSize;\n x1 = x2 - caretSize;\n x3 = x2 + caretSize;\n } else {\n y1 = ptY + height;\n y2 = y1 + caretSize;\n x1 = x2 + caretSize;\n x3 = x2 - caretSize;\n }\n y3 = y1;\n }\n return {\n x1,\n x2,\n x3,\n y1,\n y2,\n y3\n };\n }\n drawTitle(pt, ctx, options) {\n const title = this.title;\n const length = title.length;\n let titleFont, titleSpacing, i;\n if (length) {\n const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n pt.x = getAlignedX(this, options.titleAlign, options);\n ctx.textAlign = rtlHelper.textAlign(options.titleAlign);\n ctx.textBaseline = 'middle';\n titleFont = toFont(options.titleFont);\n titleSpacing = options.titleSpacing;\n ctx.fillStyle = options.titleColor;\n ctx.font = titleFont.string;\n for(i = 0; i < length; ++i){\n ctx.fillText(title[i], rtlHelper.x(pt.x), pt.y + titleFont.lineHeight / 2);\n pt.y += titleFont.lineHeight + titleSpacing;\n if (i + 1 === length) {\n pt.y += options.titleMarginBottom - titleSpacing;\n }\n }\n }\n }\n _drawColorBox(ctx, pt, i, rtlHelper, options) {\n const labelColor = this.labelColors[i];\n const labelPointStyle = this.labelPointStyles[i];\n const { boxHeight , boxWidth } = options;\n const bodyFont = toFont(options.bodyFont);\n const colorX = getAlignedX(this, 'left', options);\n const rtlColorX = rtlHelper.x(colorX);\n const yOffSet = boxHeight < bodyFont.lineHeight ? (bodyFont.lineHeight - boxHeight) / 2 : 0;\n const colorY = pt.y + yOffSet;\n if (options.usePointStyle) {\n const drawOptions = {\n radius: Math.min(boxWidth, boxHeight) / 2,\n pointStyle: labelPointStyle.pointStyle,\n rotation: labelPointStyle.rotation,\n borderWidth: 1\n };\n const centerX = rtlHelper.leftForLtr(rtlColorX, boxWidth) + boxWidth / 2;\n const centerY = colorY + boxHeight / 2;\n ctx.strokeStyle = options.multiKeyBackground;\n ctx.fillStyle = options.multiKeyBackground;\n drawPoint(ctx, drawOptions, centerX, centerY);\n ctx.strokeStyle = labelColor.borderColor;\n ctx.fillStyle = labelColor.backgroundColor;\n drawPoint(ctx, drawOptions, centerX, centerY);\n } else {\n ctx.lineWidth = isObject(labelColor.borderWidth) ? Math.max(...Object.values(labelColor.borderWidth)) : labelColor.borderWidth || 1;\n ctx.strokeStyle = labelColor.borderColor;\n ctx.setLineDash(labelColor.borderDash || []);\n ctx.lineDashOffset = labelColor.borderDashOffset || 0;\n const outerX = rtlHelper.leftForLtr(rtlColorX, boxWidth);\n const innerX = rtlHelper.leftForLtr(rtlHelper.xPlus(rtlColorX, 1), boxWidth - 2);\n const borderRadius = toTRBLCorners(labelColor.borderRadius);\n if (Object.values(borderRadius).some((v)=>v !== 0)) {\n ctx.beginPath();\n ctx.fillStyle = options.multiKeyBackground;\n addRoundedRectPath(ctx, {\n x: outerX,\n y: colorY,\n w: boxWidth,\n h: boxHeight,\n radius: borderRadius\n });\n ctx.fill();\n ctx.stroke();\n ctx.fillStyle = labelColor.backgroundColor;\n ctx.beginPath();\n addRoundedRectPath(ctx, {\n x: innerX,\n y: colorY + 1,\n w: boxWidth - 2,\n h: boxHeight - 2,\n radius: borderRadius\n });\n ctx.fill();\n } else {\n ctx.fillStyle = options.multiKeyBackground;\n ctx.fillRect(outerX, colorY, boxWidth, boxHeight);\n ctx.strokeRect(outerX, colorY, boxWidth, boxHeight);\n ctx.fillStyle = labelColor.backgroundColor;\n ctx.fillRect(innerX, colorY + 1, boxWidth - 2, boxHeight - 2);\n }\n }\n ctx.fillStyle = this.labelTextColors[i];\n }\n drawBody(pt, ctx, options) {\n const { body } = this;\n const { bodySpacing , bodyAlign , displayColors , boxHeight , boxWidth , boxPadding } = options;\n const bodyFont = toFont(options.bodyFont);\n let bodyLineHeight = bodyFont.lineHeight;\n let xLinePadding = 0;\n const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n const fillLineOfText = function(line) {\n ctx.fillText(line, rtlHelper.x(pt.x + xLinePadding), pt.y + bodyLineHeight / 2);\n pt.y += bodyLineHeight + bodySpacing;\n };\n const bodyAlignForCalculation = rtlHelper.textAlign(bodyAlign);\n let bodyItem, textColor, lines, i, j, ilen, jlen;\n ctx.textAlign = bodyAlign;\n ctx.textBaseline = 'middle';\n ctx.font = bodyFont.string;\n pt.x = getAlignedX(this, bodyAlignForCalculation, options);\n ctx.fillStyle = options.bodyColor;\n each(this.beforeBody, fillLineOfText);\n xLinePadding = displayColors && bodyAlignForCalculation !== 'right' ? bodyAlign === 'center' ? boxWidth / 2 + boxPadding : boxWidth + 2 + boxPadding : 0;\n for(i = 0, ilen = body.length; i < ilen; ++i){\n bodyItem = body[i];\n textColor = this.labelTextColors[i];\n ctx.fillStyle = textColor;\n each(bodyItem.before, fillLineOfText);\n lines = bodyItem.lines;\n if (displayColors && lines.length) {\n this._drawColorBox(ctx, pt, i, rtlHelper, options);\n bodyLineHeight = Math.max(bodyFont.lineHeight, boxHeight);\n }\n for(j = 0, jlen = lines.length; j < jlen; ++j){\n fillLineOfText(lines[j]);\n bodyLineHeight = bodyFont.lineHeight;\n }\n each(bodyItem.after, fillLineOfText);\n }\n xLinePadding = 0;\n bodyLineHeight = bodyFont.lineHeight;\n each(this.afterBody, fillLineOfText);\n pt.y -= bodySpacing;\n }\n drawFooter(pt, ctx, options) {\n const footer = this.footer;\n const length = footer.length;\n let footerFont, i;\n if (length) {\n const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n pt.x = getAlignedX(this, options.footerAlign, options);\n pt.y += options.footerMarginTop;\n ctx.textAlign = rtlHelper.textAlign(options.footerAlign);\n ctx.textBaseline = 'middle';\n footerFont = toFont(options.footerFont);\n ctx.fillStyle = options.footerColor;\n ctx.font = footerFont.string;\n for(i = 0; i < length; ++i){\n ctx.fillText(footer[i], rtlHelper.x(pt.x), pt.y + footerFont.lineHeight / 2);\n pt.y += footerFont.lineHeight + options.footerSpacing;\n }\n }\n }\n drawBackground(pt, ctx, tooltipSize, options) {\n const { xAlign , yAlign } = this;\n const { x , y } = pt;\n const { width , height } = tooltipSize;\n const { topLeft , topRight , bottomLeft , bottomRight } = toTRBLCorners(options.cornerRadius);\n ctx.fillStyle = options.backgroundColor;\n ctx.strokeStyle = options.borderColor;\n ctx.lineWidth = options.borderWidth;\n ctx.beginPath();\n ctx.moveTo(x + topLeft, y);\n if (yAlign === 'top') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x + width - topRight, y);\n ctx.quadraticCurveTo(x + width, y, x + width, y + topRight);\n if (yAlign === 'center' && xAlign === 'right') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x + width, y + height - bottomRight);\n ctx.quadraticCurveTo(x + width, y + height, x + width - bottomRight, y + height);\n if (yAlign === 'bottom') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x + bottomLeft, y + height);\n ctx.quadraticCurveTo(x, y + height, x, y + height - bottomLeft);\n if (yAlign === 'center' && xAlign === 'left') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x, y + topLeft);\n ctx.quadraticCurveTo(x, y, x + topLeft, y);\n ctx.closePath();\n ctx.fill();\n if (options.borderWidth > 0) {\n ctx.stroke();\n }\n }\n _updateAnimationTarget(options) {\n const chart = this.chart;\n const anims = this.$animations;\n const animX = anims && anims.x;\n const animY = anims && anims.y;\n if (animX || animY) {\n const position = positioners[options.position].call(this, this._active, this._eventPosition);\n if (!position) {\n return;\n }\n const size = this._size = getTooltipSize(this, options);\n const positionAndSize = Object.assign({}, position, this._size);\n const alignment = determineAlignment(chart, options, positionAndSize);\n const point = getBackgroundPoint(options, positionAndSize, alignment, chart);\n if (animX._to !== point.x || animY._to !== point.y) {\n this.xAlign = alignment.xAlign;\n this.yAlign = alignment.yAlign;\n this.width = size.width;\n this.height = size.height;\n this.caretX = position.x;\n this.caretY = position.y;\n this._resolveAnimations().update(this, point);\n }\n }\n }\n _willRender() {\n return !!this.opacity;\n }\n draw(ctx) {\n const options = this.options.setContext(this.getContext());\n let opacity = this.opacity;\n if (!opacity) {\n return;\n }\n this._updateAnimationTarget(options);\n const tooltipSize = {\n width: this.width,\n height: this.height\n };\n const pt = {\n x: this.x,\n y: this.y\n };\n opacity = Math.abs(opacity) < 1e-3 ? 0 : opacity;\n const padding = toPadding(options.padding);\n const hasTooltipContent = this.title.length || this.beforeBody.length || this.body.length || this.afterBody.length || this.footer.length;\n if (options.enabled && hasTooltipContent) {\n ctx.save();\n ctx.globalAlpha = opacity;\n this.drawBackground(pt, ctx, tooltipSize, options);\n overrideTextDirection(ctx, options.textDirection);\n pt.y += padding.top;\n this.drawTitle(pt, ctx, options);\n this.drawBody(pt, ctx, options);\n this.drawFooter(pt, ctx, options);\n restoreTextDirection(ctx, options.textDirection);\n ctx.restore();\n }\n }\n getActiveElements() {\n return this._active || [];\n }\n setActiveElements(activeElements, eventPosition) {\n const lastActive = this._active;\n const active = activeElements.map(({ datasetIndex , index })=>{\n const meta = this.chart.getDatasetMeta(datasetIndex);\n if (!meta) {\n throw new Error('Cannot find a dataset at index ' + datasetIndex);\n }\n return {\n datasetIndex,\n element: meta.data[index],\n index\n };\n });\n const changed = !_elementsEqual(lastActive, active);\n const positionChanged = this._positionChanged(active, eventPosition);\n if (changed || positionChanged) {\n this._active = active;\n this._eventPosition = eventPosition;\n this._ignoreReplayEvents = true;\n this.update(true);\n }\n }\n handleEvent(e, replay, inChartArea = true) {\n if (replay && this._ignoreReplayEvents) {\n return false;\n }\n this._ignoreReplayEvents = false;\n const options = this.options;\n const lastActive = this._active || [];\n const active = this._getActiveElements(e, lastActive, replay, inChartArea);\n const positionChanged = this._positionChanged(active, e);\n const changed = replay || !_elementsEqual(active, lastActive) || positionChanged;\n if (changed) {\n this._active = active;\n if (options.enabled || options.external) {\n this._eventPosition = {\n x: e.x,\n y: e.y\n };\n this.update(true, replay);\n }\n }\n return changed;\n }\n _getActiveElements(e, lastActive, replay, inChartArea) {\n const options = this.options;\n if (e.type === 'mouseout') {\n return [];\n }\n if (!inChartArea) {\n return lastActive.filter((i)=>this.chart.data.datasets[i.datasetIndex] && this.chart.getDatasetMeta(i.datasetIndex).controller.getParsed(i.index) !== undefined);\n }\n const active = this.chart.getElementsAtEventForMode(e, options.mode, options, replay);\n if (options.reverse) {\n active.reverse();\n }\n return active;\n }\n _positionChanged(active, e) {\n const { caretX , caretY , options } = this;\n const position = positioners[options.position].call(this, active, e);\n return position !== false && (caretX !== position.x || caretY !== position.y);\n }\n}\nvar plugin_tooltip = {\n id: 'tooltip',\n _element: Tooltip,\n positioners,\n afterInit (chart, _args, options) {\n if (options) {\n chart.tooltip = new Tooltip({\n chart,\n options\n });\n }\n },\n beforeUpdate (chart, _args, options) {\n if (chart.tooltip) {\n chart.tooltip.initialize(options);\n }\n },\n reset (chart, _args, options) {\n if (chart.tooltip) {\n chart.tooltip.initialize(options);\n }\n },\n afterDraw (chart) {\n const tooltip = chart.tooltip;\n if (tooltip && tooltip._willRender()) {\n const args = {\n tooltip\n };\n if (chart.notifyPlugins('beforeTooltipDraw', {\n ...args,\n cancelable: true\n }) === false) {\n return;\n }\n tooltip.draw(chart.ctx);\n chart.notifyPlugins('afterTooltipDraw', args);\n }\n },\n afterEvent (chart, args) {\n if (chart.tooltip) {\n const useFinalPosition = args.replay;\n if (chart.tooltip.handleEvent(args.event, useFinalPosition, args.inChartArea)) {\n args.changed = true;\n }\n }\n },\n defaults: {\n enabled: true,\n external: null,\n position: 'average',\n backgroundColor: 'rgba(0,0,0,0.8)',\n titleColor: '#fff',\n titleFont: {\n weight: 'bold'\n },\n titleSpacing: 2,\n titleMarginBottom: 6,\n titleAlign: 'left',\n bodyColor: '#fff',\n bodySpacing: 2,\n bodyFont: {},\n bodyAlign: 'left',\n footerColor: '#fff',\n footerSpacing: 2,\n footerMarginTop: 6,\n footerFont: {\n weight: 'bold'\n },\n footerAlign: 'left',\n padding: 6,\n caretPadding: 2,\n caretSize: 5,\n cornerRadius: 6,\n boxHeight: (ctx, opts)=>opts.bodyFont.size,\n boxWidth: (ctx, opts)=>opts.bodyFont.size,\n multiKeyBackground: '#fff',\n displayColors: true,\n boxPadding: 0,\n borderColor: 'rgba(0,0,0,0)',\n borderWidth: 0,\n animation: {\n duration: 400,\n easing: 'easeOutQuart'\n },\n animations: {\n numbers: {\n type: 'number',\n properties: [\n 'x',\n 'y',\n 'width',\n 'height',\n 'caretX',\n 'caretY'\n ]\n },\n opacity: {\n easing: 'linear',\n duration: 200\n }\n },\n callbacks: defaultCallbacks\n },\n defaultRoutes: {\n bodyFont: 'font',\n footerFont: 'font',\n titleFont: 'font'\n },\n descriptors: {\n _scriptable: (name)=>name !== 'filter' && name !== 'itemSort' && name !== 'external',\n _indexable: false,\n callbacks: {\n _scriptable: false,\n _indexable: false\n },\n animation: {\n _fallback: false\n },\n animations: {\n _fallback: 'animation'\n }\n },\n additionalOptionScopes: [\n 'interaction'\n ]\n};\n\nvar plugins = /*#__PURE__*/Object.freeze({\n__proto__: null,\nColors: plugin_colors,\nDecimation: plugin_decimation,\nFiller: index,\nLegend: plugin_legend,\nSubTitle: plugin_subtitle,\nTitle: plugin_title,\nTooltip: plugin_tooltip\n});\n\nconst addIfString = (labels, raw, index, addedLabels)=>{\n if (typeof raw === 'string') {\n index = labels.push(raw) - 1;\n addedLabels.unshift({\n index,\n label: raw\n });\n } else if (isNaN(raw)) {\n index = null;\n }\n return index;\n};\nfunction findOrAddLabel(labels, raw, index, addedLabels) {\n const first = labels.indexOf(raw);\n if (first === -1) {\n return addIfString(labels, raw, index, addedLabels);\n }\n const last = labels.lastIndexOf(raw);\n return first !== last ? index : first;\n}\nconst validIndex = (index, max)=>index === null ? null : _limitValue(Math.round(index), 0, max);\nfunction _getLabelForValue(value) {\n const labels = this.getLabels();\n if (value >= 0 && value < labels.length) {\n return labels[value];\n }\n return value;\n}\nclass CategoryScale extends Scale {\n static id = 'category';\n static defaults = {\n ticks: {\n callback: _getLabelForValue\n }\n };\n constructor(cfg){\n super(cfg);\n this._startValue = undefined;\n this._valueRange = 0;\n this._addedLabels = [];\n }\n init(scaleOptions) {\n const added = this._addedLabels;\n if (added.length) {\n const labels = this.getLabels();\n for (const { index , label } of added){\n if (labels[index] === label) {\n labels.splice(index, 1);\n }\n }\n this._addedLabels = [];\n }\n super.init(scaleOptions);\n }\n parse(raw, index) {\n if (isNullOrUndef(raw)) {\n return null;\n }\n const labels = this.getLabels();\n index = isFinite(index) && labels[index] === raw ? index : findOrAddLabel(labels, raw, valueOrDefault(index, raw), this._addedLabels);\n return validIndex(index, labels.length - 1);\n }\n determineDataLimits() {\n const { minDefined , maxDefined } = this.getUserBounds();\n let { min , max } = this.getMinMax(true);\n if (this.options.bounds === 'ticks') {\n if (!minDefined) {\n min = 0;\n }\n if (!maxDefined) {\n max = this.getLabels().length - 1;\n }\n }\n this.min = min;\n this.max = max;\n }\n buildTicks() {\n const min = this.min;\n const max = this.max;\n const offset = this.options.offset;\n const ticks = [];\n let labels = this.getLabels();\n labels = min === 0 && max === labels.length - 1 ? labels : labels.slice(min, max + 1);\n this._valueRange = Math.max(labels.length - (offset ? 0 : 1), 1);\n this._startValue = this.min - (offset ? 0.5 : 0);\n for(let value = min; value <= max; value++){\n ticks.push({\n value\n });\n }\n return ticks;\n }\n getLabelForValue(value) {\n return _getLabelForValue.call(this, value);\n }\n configure() {\n super.configure();\n if (!this.isHorizontal()) {\n this._reversePixels = !this._reversePixels;\n }\n }\n getPixelForValue(value) {\n if (typeof value !== 'number') {\n value = this.parse(value);\n }\n return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n }\n getPixelForTick(index) {\n const ticks = this.ticks;\n if (index < 0 || index > ticks.length - 1) {\n return null;\n }\n return this.getPixelForValue(ticks[index].value);\n }\n getValueForPixel(pixel) {\n return Math.round(this._startValue + this.getDecimalForPixel(pixel) * this._valueRange);\n }\n getBasePixel() {\n return this.bottom;\n }\n}\n\nfunction generateTicks$1(generationOptions, dataRange) {\n const ticks = [];\n const MIN_SPACING = 1e-14;\n const { bounds , step , min , max , precision , count , maxTicks , maxDigits , includeBounds } = generationOptions;\n const unit = step || 1;\n const maxSpaces = maxTicks - 1;\n const { min: rmin , max: rmax } = dataRange;\n const minDefined = !isNullOrUndef(min);\n const maxDefined = !isNullOrUndef(max);\n const countDefined = !isNullOrUndef(count);\n const minSpacing = (rmax - rmin) / (maxDigits + 1);\n let spacing = niceNum((rmax - rmin) / maxSpaces / unit) * unit;\n let factor, niceMin, niceMax, numSpaces;\n if (spacing < MIN_SPACING && !minDefined && !maxDefined) {\n return [\n {\n value: rmin\n },\n {\n value: rmax\n }\n ];\n }\n numSpaces = Math.ceil(rmax / spacing) - Math.floor(rmin / spacing);\n if (numSpaces > maxSpaces) {\n spacing = niceNum(numSpaces * spacing / maxSpaces / unit) * unit;\n }\n if (!isNullOrUndef(precision)) {\n factor = Math.pow(10, precision);\n spacing = Math.ceil(spacing * factor) / factor;\n }\n if (bounds === 'ticks') {\n niceMin = Math.floor(rmin / spacing) * spacing;\n niceMax = Math.ceil(rmax / spacing) * spacing;\n } else {\n niceMin = rmin;\n niceMax = rmax;\n }\n if (minDefined && maxDefined && step && almostWhole((max - min) / step, spacing / 1000)) {\n numSpaces = Math.round(Math.min((max - min) / spacing, maxTicks));\n spacing = (max - min) / numSpaces;\n niceMin = min;\n niceMax = max;\n } else if (countDefined) {\n niceMin = minDefined ? min : niceMin;\n niceMax = maxDefined ? max : niceMax;\n numSpaces = count - 1;\n spacing = (niceMax - niceMin) / numSpaces;\n } else {\n numSpaces = (niceMax - niceMin) / spacing;\n if (almostEquals(numSpaces, Math.round(numSpaces), spacing / 1000)) {\n numSpaces = Math.round(numSpaces);\n } else {\n numSpaces = Math.ceil(numSpaces);\n }\n }\n const decimalPlaces = Math.max(_decimalPlaces(spacing), _decimalPlaces(niceMin));\n factor = Math.pow(10, isNullOrUndef(precision) ? decimalPlaces : precision);\n niceMin = Math.round(niceMin * factor) / factor;\n niceMax = Math.round(niceMax * factor) / factor;\n let j = 0;\n if (minDefined) {\n if (includeBounds && niceMin !== min) {\n ticks.push({\n value: min\n });\n if (niceMin < min) {\n j++;\n }\n if (almostEquals(Math.round((niceMin + j * spacing) * factor) / factor, min, relativeLabelSize(min, minSpacing, generationOptions))) {\n j++;\n }\n } else if (niceMin < min) {\n j++;\n }\n }\n for(; j < numSpaces; ++j){\n const tickValue = Math.round((niceMin + j * spacing) * factor) / factor;\n if (maxDefined && tickValue > max) {\n break;\n }\n ticks.push({\n value: tickValue\n });\n }\n if (maxDefined && includeBounds && niceMax !== max) {\n if (ticks.length && almostEquals(ticks[ticks.length - 1].value, max, relativeLabelSize(max, minSpacing, generationOptions))) {\n ticks[ticks.length - 1].value = max;\n } else {\n ticks.push({\n value: max\n });\n }\n } else if (!maxDefined || niceMax === max) {\n ticks.push({\n value: niceMax\n });\n }\n return ticks;\n}\nfunction relativeLabelSize(value, minSpacing, { horizontal , minRotation }) {\n const rad = toRadians(minRotation);\n const ratio = (horizontal ? Math.sin(rad) : Math.cos(rad)) || 0.001;\n const length = 0.75 * minSpacing * ('' + value).length;\n return Math.min(minSpacing / ratio, length);\n}\nclass LinearScaleBase extends Scale {\n constructor(cfg){\n super(cfg);\n this.start = undefined;\n this.end = undefined;\n this._startValue = undefined;\n this._endValue = undefined;\n this._valueRange = 0;\n }\n parse(raw, index) {\n if (isNullOrUndef(raw)) {\n return null;\n }\n if ((typeof raw === 'number' || raw instanceof Number) && !isFinite(+raw)) {\n return null;\n }\n return +raw;\n }\n handleTickRangeOptions() {\n const { beginAtZero } = this.options;\n const { minDefined , maxDefined } = this.getUserBounds();\n let { min , max } = this;\n const setMin = (v)=>min = minDefined ? min : v;\n const setMax = (v)=>max = maxDefined ? max : v;\n if (beginAtZero) {\n const minSign = sign(min);\n const maxSign = sign(max);\n if (minSign < 0 && maxSign < 0) {\n setMax(0);\n } else if (minSign > 0 && maxSign > 0) {\n setMin(0);\n }\n }\n if (min === max) {\n let offset = max === 0 ? 1 : Math.abs(max * 0.05);\n setMax(max + offset);\n if (!beginAtZero) {\n setMin(min - offset);\n }\n }\n this.min = min;\n this.max = max;\n }\n getTickLimit() {\n const tickOpts = this.options.ticks;\n let { maxTicksLimit , stepSize } = tickOpts;\n let maxTicks;\n if (stepSize) {\n maxTicks = Math.ceil(this.max / stepSize) - Math.floor(this.min / stepSize) + 1;\n if (maxTicks > 1000) {\n console.warn(`scales.${this.id}.ticks.stepSize: ${stepSize} would result generating up to ${maxTicks} ticks. Limiting to 1000.`);\n maxTicks = 1000;\n }\n } else {\n maxTicks = this.computeTickLimit();\n maxTicksLimit = maxTicksLimit || 11;\n }\n if (maxTicksLimit) {\n maxTicks = Math.min(maxTicksLimit, maxTicks);\n }\n return maxTicks;\n }\n computeTickLimit() {\n return Number.POSITIVE_INFINITY;\n }\n buildTicks() {\n const opts = this.options;\n const tickOpts = opts.ticks;\n let maxTicks = this.getTickLimit();\n maxTicks = Math.max(2, maxTicks);\n const numericGeneratorOptions = {\n maxTicks,\n bounds: opts.bounds,\n min: opts.min,\n max: opts.max,\n precision: tickOpts.precision,\n step: tickOpts.stepSize,\n count: tickOpts.count,\n maxDigits: this._maxDigits(),\n horizontal: this.isHorizontal(),\n minRotation: tickOpts.minRotation || 0,\n includeBounds: tickOpts.includeBounds !== false\n };\n const dataRange = this._range || this;\n const ticks = generateTicks$1(numericGeneratorOptions, dataRange);\n if (opts.bounds === 'ticks') {\n _setMinAndMaxByKey(ticks, this, 'value');\n }\n if (opts.reverse) {\n ticks.reverse();\n this.start = this.max;\n this.end = this.min;\n } else {\n this.start = this.min;\n this.end = this.max;\n }\n return ticks;\n }\n configure() {\n const ticks = this.ticks;\n let start = this.min;\n let end = this.max;\n super.configure();\n if (this.options.offset && ticks.length) {\n const offset = (end - start) / Math.max(ticks.length - 1, 1) / 2;\n start -= offset;\n end += offset;\n }\n this._startValue = start;\n this._endValue = end;\n this._valueRange = end - start;\n }\n getLabelForValue(value) {\n return formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n }\n}\n\nclass LinearScale extends LinearScaleBase {\n static id = 'linear';\n static defaults = {\n ticks: {\n callback: Ticks.formatters.numeric\n }\n };\n determineDataLimits() {\n const { min , max } = this.getMinMax(true);\n this.min = isNumberFinite(min) ? min : 0;\n this.max = isNumberFinite(max) ? max : 1;\n this.handleTickRangeOptions();\n }\n computeTickLimit() {\n const horizontal = this.isHorizontal();\n const length = horizontal ? this.width : this.height;\n const minRotation = toRadians(this.options.ticks.minRotation);\n const ratio = (horizontal ? Math.sin(minRotation) : Math.cos(minRotation)) || 0.001;\n const tickFont = this._resolveTickFontOptions(0);\n return Math.ceil(length / Math.min(40, tickFont.lineHeight / ratio));\n }\n getPixelForValue(value) {\n return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n }\n getValueForPixel(pixel) {\n return this._startValue + this.getDecimalForPixel(pixel) * this._valueRange;\n }\n}\n\nconst log10Floor = (v)=>Math.floor(log10(v));\nconst changeExponent = (v, m)=>Math.pow(10, log10Floor(v) + m);\nfunction isMajor(tickVal) {\n const remain = tickVal / Math.pow(10, log10Floor(tickVal));\n return remain === 1;\n}\nfunction steps(min, max, rangeExp) {\n const rangeStep = Math.pow(10, rangeExp);\n const start = Math.floor(min / rangeStep);\n const end = Math.ceil(max / rangeStep);\n return end - start;\n}\nfunction startExp(min, max) {\n const range = max - min;\n let rangeExp = log10Floor(range);\n while(steps(min, max, rangeExp) > 10){\n rangeExp++;\n }\n while(steps(min, max, rangeExp) < 10){\n rangeExp--;\n }\n return Math.min(rangeExp, log10Floor(min));\n}\n function generateTicks(generationOptions, { min , max }) {\n min = finiteOrDefault(generationOptions.min, min);\n const ticks = [];\n const minExp = log10Floor(min);\n let exp = startExp(min, max);\n let precision = exp < 0 ? Math.pow(10, Math.abs(exp)) : 1;\n const stepSize = Math.pow(10, exp);\n const base = minExp > exp ? Math.pow(10, minExp) : 0;\n const start = Math.round((min - base) * precision) / precision;\n const offset = Math.floor((min - base) / stepSize / 10) * stepSize * 10;\n let significand = Math.floor((start - offset) / Math.pow(10, exp));\n let value = finiteOrDefault(generationOptions.min, Math.round((base + offset + significand * Math.pow(10, exp)) * precision) / precision);\n while(value < max){\n ticks.push({\n value,\n major: isMajor(value),\n significand\n });\n if (significand >= 10) {\n significand = significand < 15 ? 15 : 20;\n } else {\n significand++;\n }\n if (significand >= 20) {\n exp++;\n significand = 2;\n precision = exp >= 0 ? 1 : precision;\n }\n value = Math.round((base + offset + significand * Math.pow(10, exp)) * precision) / precision;\n }\n const lastTick = finiteOrDefault(generationOptions.max, value);\n ticks.push({\n value: lastTick,\n major: isMajor(lastTick),\n significand\n });\n return ticks;\n}\nclass LogarithmicScale extends Scale {\n static id = 'logarithmic';\n static defaults = {\n ticks: {\n callback: Ticks.formatters.logarithmic,\n major: {\n enabled: true\n }\n }\n };\n constructor(cfg){\n super(cfg);\n this.start = undefined;\n this.end = undefined;\n this._startValue = undefined;\n this._valueRange = 0;\n }\n parse(raw, index) {\n const value = LinearScaleBase.prototype.parse.apply(this, [\n raw,\n index\n ]);\n if (value === 0) {\n this._zero = true;\n return undefined;\n }\n return isNumberFinite(value) && value > 0 ? value : null;\n }\n determineDataLimits() {\n const { min , max } = this.getMinMax(true);\n this.min = isNumberFinite(min) ? Math.max(0, min) : null;\n this.max = isNumberFinite(max) ? Math.max(0, max) : null;\n if (this.options.beginAtZero) {\n this._zero = true;\n }\n if (this._zero && this.min !== this._suggestedMin && !isNumberFinite(this._userMin)) {\n this.min = min === changeExponent(this.min, 0) ? changeExponent(this.min, -1) : changeExponent(this.min, 0);\n }\n this.handleTickRangeOptions();\n }\n handleTickRangeOptions() {\n const { minDefined , maxDefined } = this.getUserBounds();\n let min = this.min;\n let max = this.max;\n const setMin = (v)=>min = minDefined ? min : v;\n const setMax = (v)=>max = maxDefined ? max : v;\n if (min === max) {\n if (min <= 0) {\n setMin(1);\n setMax(10);\n } else {\n setMin(changeExponent(min, -1));\n setMax(changeExponent(max, +1));\n }\n }\n if (min <= 0) {\n setMin(changeExponent(max, -1));\n }\n if (max <= 0) {\n setMax(changeExponent(min, +1));\n }\n this.min = min;\n this.max = max;\n }\n buildTicks() {\n const opts = this.options;\n const generationOptions = {\n min: this._userMin,\n max: this._userMax\n };\n const ticks = generateTicks(generationOptions, this);\n if (opts.bounds === 'ticks') {\n _setMinAndMaxByKey(ticks, this, 'value');\n }\n if (opts.reverse) {\n ticks.reverse();\n this.start = this.max;\n this.end = this.min;\n } else {\n this.start = this.min;\n this.end = this.max;\n }\n return ticks;\n }\n getLabelForValue(value) {\n return value === undefined ? '0' : formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n }\n configure() {\n const start = this.min;\n super.configure();\n this._startValue = log10(start);\n this._valueRange = log10(this.max) - log10(start);\n }\n getPixelForValue(value) {\n if (value === undefined || value === 0) {\n value = this.min;\n }\n if (value === null || isNaN(value)) {\n return NaN;\n }\n return this.getPixelForDecimal(value === this.min ? 0 : (log10(value) - this._startValue) / this._valueRange);\n }\n getValueForPixel(pixel) {\n const decimal = this.getDecimalForPixel(pixel);\n return Math.pow(10, this._startValue + decimal * this._valueRange);\n }\n}\n\nfunction getTickBackdropHeight(opts) {\n const tickOpts = opts.ticks;\n if (tickOpts.display && opts.display) {\n const padding = toPadding(tickOpts.backdropPadding);\n return valueOrDefault(tickOpts.font && tickOpts.font.size, defaults.font.size) + padding.height;\n }\n return 0;\n}\nfunction measureLabelSize(ctx, font, label) {\n label = isArray(label) ? label : [\n label\n ];\n return {\n w: _longestText(ctx, font.string, label),\n h: label.length * font.lineHeight\n };\n}\nfunction determineLimits(angle, pos, size, min, max) {\n if (angle === min || angle === max) {\n return {\n start: pos - size / 2,\n end: pos + size / 2\n };\n } else if (angle < min || angle > max) {\n return {\n start: pos - size,\n end: pos\n };\n }\n return {\n start: pos,\n end: pos + size\n };\n}\n function fitWithPointLabels(scale) {\n const orig = {\n l: scale.left + scale._padding.left,\n r: scale.right - scale._padding.right,\n t: scale.top + scale._padding.top,\n b: scale.bottom - scale._padding.bottom\n };\n const limits = Object.assign({}, orig);\n const labelSizes = [];\n const padding = [];\n const valueCount = scale._pointLabels.length;\n const pointLabelOpts = scale.options.pointLabels;\n const additionalAngle = pointLabelOpts.centerPointLabels ? PI / valueCount : 0;\n for(let i = 0; i < valueCount; i++){\n const opts = pointLabelOpts.setContext(scale.getPointLabelContext(i));\n padding[i] = opts.padding;\n const pointPosition = scale.getPointPosition(i, scale.drawingArea + padding[i], additionalAngle);\n const plFont = toFont(opts.font);\n const textSize = measureLabelSize(scale.ctx, plFont, scale._pointLabels[i]);\n labelSizes[i] = textSize;\n const angleRadians = _normalizeAngle(scale.getIndexAngle(i) + additionalAngle);\n const angle = Math.round(toDegrees(angleRadians));\n const hLimits = determineLimits(angle, pointPosition.x, textSize.w, 0, 180);\n const vLimits = determineLimits(angle, pointPosition.y, textSize.h, 90, 270);\n updateLimits(limits, orig, angleRadians, hLimits, vLimits);\n }\n scale.setCenterPoint(orig.l - limits.l, limits.r - orig.r, orig.t - limits.t, limits.b - orig.b);\n scale._pointLabelItems = buildPointLabelItems(scale, labelSizes, padding);\n}\nfunction updateLimits(limits, orig, angle, hLimits, vLimits) {\n const sin = Math.abs(Math.sin(angle));\n const cos = Math.abs(Math.cos(angle));\n let x = 0;\n let y = 0;\n if (hLimits.start < orig.l) {\n x = (orig.l - hLimits.start) / sin;\n limits.l = Math.min(limits.l, orig.l - x);\n } else if (hLimits.end > orig.r) {\n x = (hLimits.end - orig.r) / sin;\n limits.r = Math.max(limits.r, orig.r + x);\n }\n if (vLimits.start < orig.t) {\n y = (orig.t - vLimits.start) / cos;\n limits.t = Math.min(limits.t, orig.t - y);\n } else if (vLimits.end > orig.b) {\n y = (vLimits.end - orig.b) / cos;\n limits.b = Math.max(limits.b, orig.b + y);\n }\n}\nfunction createPointLabelItem(scale, index, itemOpts) {\n const outerDistance = scale.drawingArea;\n const { extra , additionalAngle , padding , size } = itemOpts;\n const pointLabelPosition = scale.getPointPosition(index, outerDistance + extra + padding, additionalAngle);\n const angle = Math.round(toDegrees(_normalizeAngle(pointLabelPosition.angle + HALF_PI)));\n const y = yForAngle(pointLabelPosition.y, size.h, angle);\n const textAlign = getTextAlignForAngle(angle);\n const left = leftForTextAlign(pointLabelPosition.x, size.w, textAlign);\n return {\n visible: true,\n x: pointLabelPosition.x,\n y,\n textAlign,\n left,\n top: y,\n right: left + size.w,\n bottom: y + size.h\n };\n}\nfunction isNotOverlapped(item, area) {\n if (!area) {\n return true;\n }\n const { left , top , right , bottom } = item;\n const apexesInArea = _isPointInArea({\n x: left,\n y: top\n }, area) || _isPointInArea({\n x: left,\n y: bottom\n }, area) || _isPointInArea({\n x: right,\n y: top\n }, area) || _isPointInArea({\n x: right,\n y: bottom\n }, area);\n return !apexesInArea;\n}\nfunction buildPointLabelItems(scale, labelSizes, padding) {\n const items = [];\n const valueCount = scale._pointLabels.length;\n const opts = scale.options;\n const { centerPointLabels , display } = opts.pointLabels;\n const itemOpts = {\n extra: getTickBackdropHeight(opts) / 2,\n additionalAngle: centerPointLabels ? PI / valueCount : 0\n };\n let area;\n for(let i = 0; i < valueCount; i++){\n itemOpts.padding = padding[i];\n itemOpts.size = labelSizes[i];\n const item = createPointLabelItem(scale, i, itemOpts);\n items.push(item);\n if (display === 'auto') {\n item.visible = isNotOverlapped(item, area);\n if (item.visible) {\n area = item;\n }\n }\n }\n return items;\n}\nfunction getTextAlignForAngle(angle) {\n if (angle === 0 || angle === 180) {\n return 'center';\n } else if (angle < 180) {\n return 'left';\n }\n return 'right';\n}\nfunction leftForTextAlign(x, w, align) {\n if (align === 'right') {\n x -= w;\n } else if (align === 'center') {\n x -= w / 2;\n }\n return x;\n}\nfunction yForAngle(y, h, angle) {\n if (angle === 90 || angle === 270) {\n y -= h / 2;\n } else if (angle > 270 || angle < 90) {\n y -= h;\n }\n return y;\n}\nfunction drawPointLabelBox(ctx, opts, item) {\n const { left , top , right , bottom } = item;\n const { backdropColor } = opts;\n if (!isNullOrUndef(backdropColor)) {\n const borderRadius = toTRBLCorners(opts.borderRadius);\n const padding = toPadding(opts.backdropPadding);\n ctx.fillStyle = backdropColor;\n const backdropLeft = left - padding.left;\n const backdropTop = top - padding.top;\n const backdropWidth = right - left + padding.width;\n const backdropHeight = bottom - top + padding.height;\n if (Object.values(borderRadius).some((v)=>v !== 0)) {\n ctx.beginPath();\n addRoundedRectPath(ctx, {\n x: backdropLeft,\n y: backdropTop,\n w: backdropWidth,\n h: backdropHeight,\n radius: borderRadius\n });\n ctx.fill();\n } else {\n ctx.fillRect(backdropLeft, backdropTop, backdropWidth, backdropHeight);\n }\n }\n}\nfunction drawPointLabels(scale, labelCount) {\n const { ctx , options: { pointLabels } } = scale;\n for(let i = labelCount - 1; i >= 0; i--){\n const item = scale._pointLabelItems[i];\n if (!item.visible) {\n continue;\n }\n const optsAtIndex = pointLabels.setContext(scale.getPointLabelContext(i));\n drawPointLabelBox(ctx, optsAtIndex, item);\n const plFont = toFont(optsAtIndex.font);\n const { x , y , textAlign } = item;\n renderText(ctx, scale._pointLabels[i], x, y + plFont.lineHeight / 2, plFont, {\n color: optsAtIndex.color,\n textAlign: textAlign,\n textBaseline: 'middle'\n });\n }\n}\nfunction pathRadiusLine(scale, radius, circular, labelCount) {\n const { ctx } = scale;\n if (circular) {\n ctx.arc(scale.xCenter, scale.yCenter, radius, 0, TAU);\n } else {\n let pointPosition = scale.getPointPosition(0, radius);\n ctx.moveTo(pointPosition.x, pointPosition.y);\n for(let i = 1; i < labelCount; i++){\n pointPosition = scale.getPointPosition(i, radius);\n ctx.lineTo(pointPosition.x, pointPosition.y);\n }\n }\n}\nfunction drawRadiusLine(scale, gridLineOpts, radius, labelCount, borderOpts) {\n const ctx = scale.ctx;\n const circular = gridLineOpts.circular;\n const { color , lineWidth } = gridLineOpts;\n if (!circular && !labelCount || !color || !lineWidth || radius < 0) {\n return;\n }\n ctx.save();\n ctx.strokeStyle = color;\n ctx.lineWidth = lineWidth;\n ctx.setLineDash(borderOpts.dash);\n ctx.lineDashOffset = borderOpts.dashOffset;\n ctx.beginPath();\n pathRadiusLine(scale, radius, circular, labelCount);\n ctx.closePath();\n ctx.stroke();\n ctx.restore();\n}\nfunction createPointLabelContext(parent, index, label) {\n return createContext(parent, {\n label,\n index,\n type: 'pointLabel'\n });\n}\nclass RadialLinearScale extends LinearScaleBase {\n static id = 'radialLinear';\n static defaults = {\n display: true,\n animate: true,\n position: 'chartArea',\n angleLines: {\n display: true,\n lineWidth: 1,\n borderDash: [],\n borderDashOffset: 0.0\n },\n grid: {\n circular: false\n },\n startAngle: 0,\n ticks: {\n showLabelBackdrop: true,\n callback: Ticks.formatters.numeric\n },\n pointLabels: {\n backdropColor: undefined,\n backdropPadding: 2,\n display: true,\n font: {\n size: 10\n },\n callback (label) {\n return label;\n },\n padding: 5,\n centerPointLabels: false\n }\n };\n static defaultRoutes = {\n 'angleLines.color': 'borderColor',\n 'pointLabels.color': 'color',\n 'ticks.color': 'color'\n };\n static descriptors = {\n angleLines: {\n _fallback: 'grid'\n }\n };\n constructor(cfg){\n super(cfg);\n this.xCenter = undefined;\n this.yCenter = undefined;\n this.drawingArea = undefined;\n this._pointLabels = [];\n this._pointLabelItems = [];\n }\n setDimensions() {\n const padding = this._padding = toPadding(getTickBackdropHeight(this.options) / 2);\n const w = this.width = this.maxWidth - padding.width;\n const h = this.height = this.maxHeight - padding.height;\n this.xCenter = Math.floor(this.left + w / 2 + padding.left);\n this.yCenter = Math.floor(this.top + h / 2 + padding.top);\n this.drawingArea = Math.floor(Math.min(w, h) / 2);\n }\n determineDataLimits() {\n const { min , max } = this.getMinMax(false);\n this.min = isNumberFinite(min) && !isNaN(min) ? min : 0;\n this.max = isNumberFinite(max) && !isNaN(max) ? max : 0;\n this.handleTickRangeOptions();\n }\n computeTickLimit() {\n return Math.ceil(this.drawingArea / getTickBackdropHeight(this.options));\n }\n generateTickLabels(ticks) {\n LinearScaleBase.prototype.generateTickLabels.call(this, ticks);\n this._pointLabels = this.getLabels().map((value, index)=>{\n const label = callback(this.options.pointLabels.callback, [\n value,\n index\n ], this);\n return label || label === 0 ? label : '';\n }).filter((v, i)=>this.chart.getDataVisibility(i));\n }\n fit() {\n const opts = this.options;\n if (opts.display && opts.pointLabels.display) {\n fitWithPointLabels(this);\n } else {\n this.setCenterPoint(0, 0, 0, 0);\n }\n }\n setCenterPoint(leftMovement, rightMovement, topMovement, bottomMovement) {\n this.xCenter += Math.floor((leftMovement - rightMovement) / 2);\n this.yCenter += Math.floor((topMovement - bottomMovement) / 2);\n this.drawingArea -= Math.min(this.drawingArea / 2, Math.max(leftMovement, rightMovement, topMovement, bottomMovement));\n }\n getIndexAngle(index) {\n const angleMultiplier = TAU / (this._pointLabels.length || 1);\n const startAngle = this.options.startAngle || 0;\n return _normalizeAngle(index * angleMultiplier + toRadians(startAngle));\n }\n getDistanceFromCenterForValue(value) {\n if (isNullOrUndef(value)) {\n return NaN;\n }\n const scalingFactor = this.drawingArea / (this.max - this.min);\n if (this.options.reverse) {\n return (this.max - value) * scalingFactor;\n }\n return (value - this.min) * scalingFactor;\n }\n getValueForDistanceFromCenter(distance) {\n if (isNullOrUndef(distance)) {\n return NaN;\n }\n const scaledDistance = distance / (this.drawingArea / (this.max - this.min));\n return this.options.reverse ? this.max - scaledDistance : this.min + scaledDistance;\n }\n getPointLabelContext(index) {\n const pointLabels = this._pointLabels || [];\n if (index >= 0 && index < pointLabels.length) {\n const pointLabel = pointLabels[index];\n return createPointLabelContext(this.getContext(), index, pointLabel);\n }\n }\n getPointPosition(index, distanceFromCenter, additionalAngle = 0) {\n const angle = this.getIndexAngle(index) - HALF_PI + additionalAngle;\n return {\n x: Math.cos(angle) * distanceFromCenter + this.xCenter,\n y: Math.sin(angle) * distanceFromCenter + this.yCenter,\n angle\n };\n }\n getPointPositionForValue(index, value) {\n return this.getPointPosition(index, this.getDistanceFromCenterForValue(value));\n }\n getBasePosition(index) {\n return this.getPointPositionForValue(index || 0, this.getBaseValue());\n }\n getPointLabelPosition(index) {\n const { left , top , right , bottom } = this._pointLabelItems[index];\n return {\n left,\n top,\n right,\n bottom\n };\n }\n drawBackground() {\n const { backgroundColor , grid: { circular } } = this.options;\n if (backgroundColor) {\n const ctx = this.ctx;\n ctx.save();\n ctx.beginPath();\n pathRadiusLine(this, this.getDistanceFromCenterForValue(this._endValue), circular, this._pointLabels.length);\n ctx.closePath();\n ctx.fillStyle = backgroundColor;\n ctx.fill();\n ctx.restore();\n }\n }\n drawGrid() {\n const ctx = this.ctx;\n const opts = this.options;\n const { angleLines , grid , border } = opts;\n const labelCount = this._pointLabels.length;\n let i, offset, position;\n if (opts.pointLabels.display) {\n drawPointLabels(this, labelCount);\n }\n if (grid.display) {\n this.ticks.forEach((tick, index)=>{\n if (index !== 0) {\n offset = this.getDistanceFromCenterForValue(tick.value);\n const context = this.getContext(index);\n const optsAtIndex = grid.setContext(context);\n const optsAtIndexBorder = border.setContext(context);\n drawRadiusLine(this, optsAtIndex, offset, labelCount, optsAtIndexBorder);\n }\n });\n }\n if (angleLines.display) {\n ctx.save();\n for(i = labelCount - 1; i >= 0; i--){\n const optsAtIndex = angleLines.setContext(this.getPointLabelContext(i));\n const { color , lineWidth } = optsAtIndex;\n if (!lineWidth || !color) {\n continue;\n }\n ctx.lineWidth = lineWidth;\n ctx.strokeStyle = color;\n ctx.setLineDash(optsAtIndex.borderDash);\n ctx.lineDashOffset = optsAtIndex.borderDashOffset;\n offset = this.getDistanceFromCenterForValue(opts.ticks.reverse ? this.min : this.max);\n position = this.getPointPosition(i, offset);\n ctx.beginPath();\n ctx.moveTo(this.xCenter, this.yCenter);\n ctx.lineTo(position.x, position.y);\n ctx.stroke();\n }\n ctx.restore();\n }\n }\n drawBorder() {}\n drawLabels() {\n const ctx = this.ctx;\n const opts = this.options;\n const tickOpts = opts.ticks;\n if (!tickOpts.display) {\n return;\n }\n const startAngle = this.getIndexAngle(0);\n let offset, width;\n ctx.save();\n ctx.translate(this.xCenter, this.yCenter);\n ctx.rotate(startAngle);\n ctx.textAlign = 'center';\n ctx.textBaseline = 'middle';\n this.ticks.forEach((tick, index)=>{\n if (index === 0 && !opts.reverse) {\n return;\n }\n const optsAtIndex = tickOpts.setContext(this.getContext(index));\n const tickFont = toFont(optsAtIndex.font);\n offset = this.getDistanceFromCenterForValue(this.ticks[index].value);\n if (optsAtIndex.showLabelBackdrop) {\n ctx.font = tickFont.string;\n width = ctx.measureText(tick.label).width;\n ctx.fillStyle = optsAtIndex.backdropColor;\n const padding = toPadding(optsAtIndex.backdropPadding);\n ctx.fillRect(-width / 2 - padding.left, -offset - tickFont.size / 2 - padding.top, width + padding.width, tickFont.size + padding.height);\n }\n renderText(ctx, tick.label, 0, -offset, tickFont, {\n color: optsAtIndex.color,\n strokeColor: optsAtIndex.textStrokeColor,\n strokeWidth: optsAtIndex.textStrokeWidth\n });\n });\n ctx.restore();\n }\n drawTitle() {}\n}\n\nconst INTERVALS = {\n millisecond: {\n common: true,\n size: 1,\n steps: 1000\n },\n second: {\n common: true,\n size: 1000,\n steps: 60\n },\n minute: {\n common: true,\n size: 60000,\n steps: 60\n },\n hour: {\n common: true,\n size: 3600000,\n steps: 24\n },\n day: {\n common: true,\n size: 86400000,\n steps: 30\n },\n week: {\n common: false,\n size: 604800000,\n steps: 4\n },\n month: {\n common: true,\n size: 2.628e9,\n steps: 12\n },\n quarter: {\n common: false,\n size: 7.884e9,\n steps: 4\n },\n year: {\n common: true,\n size: 3.154e10\n }\n};\n const UNITS = /* #__PURE__ */ Object.keys(INTERVALS);\n function sorter(a, b) {\n return a - b;\n}\n function parse(scale, input) {\n if (isNullOrUndef(input)) {\n return null;\n }\n const adapter = scale._adapter;\n const { parser , round , isoWeekday } = scale._parseOpts;\n let value = input;\n if (typeof parser === 'function') {\n value = parser(value);\n }\n if (!isNumberFinite(value)) {\n value = typeof parser === 'string' ? adapter.parse(value, parser) : adapter.parse(value);\n }\n if (value === null) {\n return null;\n }\n if (round) {\n value = round === 'week' && (isNumber(isoWeekday) || isoWeekday === true) ? adapter.startOf(value, 'isoWeek', isoWeekday) : adapter.startOf(value, round);\n }\n return +value;\n}\n function determineUnitForAutoTicks(minUnit, min, max, capacity) {\n const ilen = UNITS.length;\n for(let i = UNITS.indexOf(minUnit); i < ilen - 1; ++i){\n const interval = INTERVALS[UNITS[i]];\n const factor = interval.steps ? interval.steps : Number.MAX_SAFE_INTEGER;\n if (interval.common && Math.ceil((max - min) / (factor * interval.size)) <= capacity) {\n return UNITS[i];\n }\n }\n return UNITS[ilen - 1];\n}\n function determineUnitForFormatting(scale, numTicks, minUnit, min, max) {\n for(let i = UNITS.length - 1; i >= UNITS.indexOf(minUnit); i--){\n const unit = UNITS[i];\n if (INTERVALS[unit].common && scale._adapter.diff(max, min, unit) >= numTicks - 1) {\n return unit;\n }\n }\n return UNITS[minUnit ? UNITS.indexOf(minUnit) : 0];\n}\n function determineMajorUnit(unit) {\n for(let i = UNITS.indexOf(unit) + 1, ilen = UNITS.length; i < ilen; ++i){\n if (INTERVALS[UNITS[i]].common) {\n return UNITS[i];\n }\n }\n}\n function addTick(ticks, time, timestamps) {\n if (!timestamps) {\n ticks[time] = true;\n } else if (timestamps.length) {\n const { lo , hi } = _lookup(timestamps, time);\n const timestamp = timestamps[lo] >= time ? timestamps[lo] : timestamps[hi];\n ticks[timestamp] = true;\n }\n}\n function setMajorTicks(scale, ticks, map, majorUnit) {\n const adapter = scale._adapter;\n const first = +adapter.startOf(ticks[0].value, majorUnit);\n const last = ticks[ticks.length - 1].value;\n let major, index;\n for(major = first; major <= last; major = +adapter.add(major, 1, majorUnit)){\n index = map[major];\n if (index >= 0) {\n ticks[index].major = true;\n }\n }\n return ticks;\n}\n function ticksFromTimestamps(scale, values, majorUnit) {\n const ticks = [];\n const map = {};\n const ilen = values.length;\n let i, value;\n for(i = 0; i < ilen; ++i){\n value = values[i];\n map[value] = i;\n ticks.push({\n value,\n major: false\n });\n }\n return ilen === 0 || !majorUnit ? ticks : setMajorTicks(scale, ticks, map, majorUnit);\n}\nclass TimeScale extends Scale {\n static id = 'time';\n static defaults = {\n bounds: 'data',\n adapters: {},\n time: {\n parser: false,\n unit: false,\n round: false,\n isoWeekday: false,\n minUnit: 'millisecond',\n displayFormats: {}\n },\n ticks: {\n source: 'auto',\n callback: false,\n major: {\n enabled: false\n }\n }\n };\n constructor(props){\n super(props);\n this._cache = {\n data: [],\n labels: [],\n all: []\n };\n this._unit = 'day';\n this._majorUnit = undefined;\n this._offsets = {};\n this._normalized = false;\n this._parseOpts = undefined;\n }\n init(scaleOpts, opts = {}) {\n const time = scaleOpts.time || (scaleOpts.time = {});\n const adapter = this._adapter = new adapters._date(scaleOpts.adapters.date);\n adapter.init(opts);\n mergeIf(time.displayFormats, adapter.formats());\n this._parseOpts = {\n parser: time.parser,\n round: time.round,\n isoWeekday: time.isoWeekday\n };\n super.init(scaleOpts);\n this._normalized = opts.normalized;\n }\n parse(raw, index) {\n if (raw === undefined) {\n return null;\n }\n return parse(this, raw);\n }\n beforeLayout() {\n super.beforeLayout();\n this._cache = {\n data: [],\n labels: [],\n all: []\n };\n }\n determineDataLimits() {\n const options = this.options;\n const adapter = this._adapter;\n const unit = options.time.unit || 'day';\n let { min , max , minDefined , maxDefined } = this.getUserBounds();\n function _applyBounds(bounds) {\n if (!minDefined && !isNaN(bounds.min)) {\n min = Math.min(min, bounds.min);\n }\n if (!maxDefined && !isNaN(bounds.max)) {\n max = Math.max(max, bounds.max);\n }\n }\n if (!minDefined || !maxDefined) {\n _applyBounds(this._getLabelBounds());\n if (options.bounds !== 'ticks' || options.ticks.source !== 'labels') {\n _applyBounds(this.getMinMax(false));\n }\n }\n min = isNumberFinite(min) && !isNaN(min) ? min : +adapter.startOf(Date.now(), unit);\n max = isNumberFinite(max) && !isNaN(max) ? max : +adapter.endOf(Date.now(), unit) + 1;\n this.min = Math.min(min, max - 1);\n this.max = Math.max(min + 1, max);\n }\n _getLabelBounds() {\n const arr = this.getLabelTimestamps();\n let min = Number.POSITIVE_INFINITY;\n let max = Number.NEGATIVE_INFINITY;\n if (arr.length) {\n min = arr[0];\n max = arr[arr.length - 1];\n }\n return {\n min,\n max\n };\n }\n buildTicks() {\n const options = this.options;\n const timeOpts = options.time;\n const tickOpts = options.ticks;\n const timestamps = tickOpts.source === 'labels' ? this.getLabelTimestamps() : this._generate();\n if (options.bounds === 'ticks' && timestamps.length) {\n this.min = this._userMin || timestamps[0];\n this.max = this._userMax || timestamps[timestamps.length - 1];\n }\n const min = this.min;\n const max = this.max;\n const ticks = _filterBetween(timestamps, min, max);\n this._unit = timeOpts.unit || (tickOpts.autoSkip ? determineUnitForAutoTicks(timeOpts.minUnit, this.min, this.max, this._getLabelCapacity(min)) : determineUnitForFormatting(this, ticks.length, timeOpts.minUnit, this.min, this.max));\n this._majorUnit = !tickOpts.major.enabled || this._unit === 'year' ? undefined : determineMajorUnit(this._unit);\n this.initOffsets(timestamps);\n if (options.reverse) {\n ticks.reverse();\n }\n return ticksFromTimestamps(this, ticks, this._majorUnit);\n }\n afterAutoSkip() {\n if (this.options.offsetAfterAutoskip) {\n this.initOffsets(this.ticks.map((tick)=>+tick.value));\n }\n }\n initOffsets(timestamps = []) {\n let start = 0;\n let end = 0;\n let first, last;\n if (this.options.offset && timestamps.length) {\n first = this.getDecimalForValue(timestamps[0]);\n if (timestamps.length === 1) {\n start = 1 - first;\n } else {\n start = (this.getDecimalForValue(timestamps[1]) - first) / 2;\n }\n last = this.getDecimalForValue(timestamps[timestamps.length - 1]);\n if (timestamps.length === 1) {\n end = last;\n } else {\n end = (last - this.getDecimalForValue(timestamps[timestamps.length - 2])) / 2;\n }\n }\n const limit = timestamps.length < 3 ? 0.5 : 0.25;\n start = _limitValue(start, 0, limit);\n end = _limitValue(end, 0, limit);\n this._offsets = {\n start,\n end,\n factor: 1 / (start + 1 + end)\n };\n }\n _generate() {\n const adapter = this._adapter;\n const min = this.min;\n const max = this.max;\n const options = this.options;\n const timeOpts = options.time;\n const minor = timeOpts.unit || determineUnitForAutoTicks(timeOpts.minUnit, min, max, this._getLabelCapacity(min));\n const stepSize = valueOrDefault(options.ticks.stepSize, 1);\n const weekday = minor === 'week' ? timeOpts.isoWeekday : false;\n const hasWeekday = isNumber(weekday) || weekday === true;\n const ticks = {};\n let first = min;\n let time, count;\n if (hasWeekday) {\n first = +adapter.startOf(first, 'isoWeek', weekday);\n }\n first = +adapter.startOf(first, hasWeekday ? 'day' : minor);\n if (adapter.diff(max, min, minor) > 100000 * stepSize) {\n throw new Error(min + ' and ' + max + ' are too far apart with stepSize of ' + stepSize + ' ' + minor);\n }\n const timestamps = options.ticks.source === 'data' && this.getDataTimestamps();\n for(time = first, count = 0; time < max; time = +adapter.add(time, stepSize, minor), count++){\n addTick(ticks, time, timestamps);\n }\n if (time === max || options.bounds === 'ticks' || count === 1) {\n addTick(ticks, time, timestamps);\n }\n return Object.keys(ticks).sort(sorter).map((x)=>+x);\n }\n getLabelForValue(value) {\n const adapter = this._adapter;\n const timeOpts = this.options.time;\n if (timeOpts.tooltipFormat) {\n return adapter.format(value, timeOpts.tooltipFormat);\n }\n return adapter.format(value, timeOpts.displayFormats.datetime);\n }\n format(value, format) {\n const options = this.options;\n const formats = options.time.displayFormats;\n const unit = this._unit;\n const fmt = format || formats[unit];\n return this._adapter.format(value, fmt);\n }\n _tickFormatFunction(time, index, ticks, format) {\n const options = this.options;\n const formatter = options.ticks.callback;\n if (formatter) {\n return callback(formatter, [\n time,\n index,\n ticks\n ], this);\n }\n const formats = options.time.displayFormats;\n const unit = this._unit;\n const majorUnit = this._majorUnit;\n const minorFormat = unit && formats[unit];\n const majorFormat = majorUnit && formats[majorUnit];\n const tick = ticks[index];\n const major = majorUnit && majorFormat && tick && tick.major;\n return this._adapter.format(time, format || (major ? majorFormat : minorFormat));\n }\n generateTickLabels(ticks) {\n let i, ilen, tick;\n for(i = 0, ilen = ticks.length; i < ilen; ++i){\n tick = ticks[i];\n tick.label = this._tickFormatFunction(tick.value, i, ticks);\n }\n }\n getDecimalForValue(value) {\n return value === null ? NaN : (value - this.min) / (this.max - this.min);\n }\n getPixelForValue(value) {\n const offsets = this._offsets;\n const pos = this.getDecimalForValue(value);\n return this.getPixelForDecimal((offsets.start + pos) * offsets.factor);\n }\n getValueForPixel(pixel) {\n const offsets = this._offsets;\n const pos = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n return this.min + pos * (this.max - this.min);\n }\n _getLabelSize(label) {\n const ticksOpts = this.options.ticks;\n const tickLabelWidth = this.ctx.measureText(label).width;\n const angle = toRadians(this.isHorizontal() ? ticksOpts.maxRotation : ticksOpts.minRotation);\n const cosRotation = Math.cos(angle);\n const sinRotation = Math.sin(angle);\n const tickFontSize = this._resolveTickFontOptions(0).size;\n return {\n w: tickLabelWidth * cosRotation + tickFontSize * sinRotation,\n h: tickLabelWidth * sinRotation + tickFontSize * cosRotation\n };\n }\n _getLabelCapacity(exampleTime) {\n const timeOpts = this.options.time;\n const displayFormats = timeOpts.displayFormats;\n const format = displayFormats[timeOpts.unit] || displayFormats.millisecond;\n const exampleLabel = this._tickFormatFunction(exampleTime, 0, ticksFromTimestamps(this, [\n exampleTime\n ], this._majorUnit), format);\n const size = this._getLabelSize(exampleLabel);\n const capacity = Math.floor(this.isHorizontal() ? this.width / size.w : this.height / size.h) - 1;\n return capacity > 0 ? capacity : 1;\n }\n getDataTimestamps() {\n let timestamps = this._cache.data || [];\n let i, ilen;\n if (timestamps.length) {\n return timestamps;\n }\n const metas = this.getMatchingVisibleMetas();\n if (this._normalized && metas.length) {\n return this._cache.data = metas[0].controller.getAllParsedValues(this);\n }\n for(i = 0, ilen = metas.length; i < ilen; ++i){\n timestamps = timestamps.concat(metas[i].controller.getAllParsedValues(this));\n }\n return this._cache.data = this.normalize(timestamps);\n }\n getLabelTimestamps() {\n const timestamps = this._cache.labels || [];\n let i, ilen;\n if (timestamps.length) {\n return timestamps;\n }\n const labels = this.getLabels();\n for(i = 0, ilen = labels.length; i < ilen; ++i){\n timestamps.push(parse(this, labels[i]));\n }\n return this._cache.labels = this._normalized ? timestamps : this.normalize(timestamps);\n }\n normalize(values) {\n return _arrayUnique(values.sort(sorter));\n }\n}\n\nfunction interpolate(table, val, reverse) {\n let lo = 0;\n let hi = table.length - 1;\n let prevSource, nextSource, prevTarget, nextTarget;\n if (reverse) {\n if (val >= table[lo].pos && val <= table[hi].pos) {\n ({ lo , hi } = _lookupByKey(table, 'pos', val));\n }\n ({ pos: prevSource , time: prevTarget } = table[lo]);\n ({ pos: nextSource , time: nextTarget } = table[hi]);\n } else {\n if (val >= table[lo].time && val <= table[hi].time) {\n ({ lo , hi } = _lookupByKey(table, 'time', val));\n }\n ({ time: prevSource , pos: prevTarget } = table[lo]);\n ({ time: nextSource , pos: nextTarget } = table[hi]);\n }\n const span = nextSource - prevSource;\n return span ? prevTarget + (nextTarget - prevTarget) * (val - prevSource) / span : prevTarget;\n}\nclass TimeSeriesScale extends TimeScale {\n static id = 'timeseries';\n static defaults = TimeScale.defaults;\n constructor(props){\n super(props);\n this._table = [];\n this._minPos = undefined;\n this._tableRange = undefined;\n }\n initOffsets() {\n const timestamps = this._getTimestampsForTable();\n const table = this._table = this.buildLookupTable(timestamps);\n this._minPos = interpolate(table, this.min);\n this._tableRange = interpolate(table, this.max) - this._minPos;\n super.initOffsets(timestamps);\n }\n buildLookupTable(timestamps) {\n const { min , max } = this;\n const items = [];\n const table = [];\n let i, ilen, prev, curr, next;\n for(i = 0, ilen = timestamps.length; i < ilen; ++i){\n curr = timestamps[i];\n if (curr >= min && curr <= max) {\n items.push(curr);\n }\n }\n if (items.length < 2) {\n return [\n {\n time: min,\n pos: 0\n },\n {\n time: max,\n pos: 1\n }\n ];\n }\n for(i = 0, ilen = items.length; i < ilen; ++i){\n next = items[i + 1];\n prev = items[i - 1];\n curr = items[i];\n if (Math.round((next + prev) / 2) !== curr) {\n table.push({\n time: curr,\n pos: i / (ilen - 1)\n });\n }\n }\n return table;\n }\n _generate() {\n const min = this.min;\n const max = this.max;\n let timestamps = super.getDataTimestamps();\n if (!timestamps.includes(min) || !timestamps.length) {\n timestamps.splice(0, 0, min);\n }\n if (!timestamps.includes(max) || timestamps.length === 1) {\n timestamps.push(max);\n }\n return timestamps.sort((a, b)=>a - b);\n }\n _getTimestampsForTable() {\n let timestamps = this._cache.all || [];\n if (timestamps.length) {\n return timestamps;\n }\n const data = this.getDataTimestamps();\n const label = this.getLabelTimestamps();\n if (data.length && label.length) {\n timestamps = this.normalize(data.concat(label));\n } else {\n timestamps = data.length ? data : label;\n }\n timestamps = this._cache.all = timestamps;\n return timestamps;\n }\n getDecimalForValue(value) {\n return (interpolate(this._table, value) - this._minPos) / this._tableRange;\n }\n getValueForPixel(pixel) {\n const offsets = this._offsets;\n const decimal = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n return interpolate(this._table, decimal * this._tableRange + this._minPos, true);\n }\n}\n\nvar scales = /*#__PURE__*/Object.freeze({\n__proto__: null,\nCategoryScale: CategoryScale,\nLinearScale: LinearScale,\nLogarithmicScale: LogarithmicScale,\nRadialLinearScale: RadialLinearScale,\nTimeScale: TimeScale,\nTimeSeriesScale: TimeSeriesScale\n});\n\nconst registerables = [\n controllers,\n elements,\n plugins,\n scales\n];\n\nexport { Animation, Animations, ArcElement, BarController, BarElement, BasePlatform, BasicPlatform, BubbleController, CategoryScale, Chart, plugin_colors as Colors, DatasetController, plugin_decimation as Decimation, DomPlatform, DoughnutController, Element, index as Filler, Interaction, plugin_legend as Legend, LineController, LineElement, LinearScale, LogarithmicScale, PieController, PointElement, PolarAreaController, RadarController, RadialLinearScale, Scale, ScatterController, plugin_subtitle as SubTitle, Ticks, TimeScale, TimeSeriesScale, plugin_title as Title, plugin_tooltip as Tooltip, adapters as _adapters, _detectPlatform, animator, controllers, defaults, elements, layouts, plugins, registerables, registry, scales };\n//# sourceMappingURL=chart.js.map\n"],"names":["module","exports","define","_$breadcrumbTypes_8","_$reduce_17","arr","fn","accum","val","i","len","length","_$filter_12","item","concat","_$includes_13","x","_$isArray_14","obj","Object","prototype","toString","call","_hasDontEnumBug","propertyIsEnumerable","_dontEnums","_$keys_15","prop","result","hasOwnProperty","push","_$intRange_24","min","max","Infinity","value","parseInt","_$listOfFunctions_25","f","_$stringWithLength_26","_$config_5","defaultErrorTypes","unhandledExceptions","unhandledRejections","schema","apiKey","defaultValue","message","validate","appVersion","undefined","appType","autoDetectErrors","enabledErrorTypes","allowPartialObject","providedKeys","defaultKeys","k","onError","onSession","onBreadcrumb","endpoints","notify","sessions","autoTrackSessions","enabledReleaseStages","releaseStage","maxBreadcrumbs","enabledBreadcrumbTypes","join","maybeType","context","user","key","metadata","logger","method","redactedKeys","s","test","plugins","p","load","featureFlags","feature","name","_$assign_11","target","arguments","source","_$map_16","_extends","assign","apply","this","_$config_1","window","location","host","console","debug","getPrefixedConsole","consoleLog","log","consoleMethod","bind","_$Breadcrumb_3","Breadcrumb","type","timestamp","Date","toJSON","metaData","_$stackframe_34","root","factory","amd","StackFrame","_isNumber","n","isNaN","parseFloat","isFinite","_capitalize","str","charAt","toUpperCase","substring","_getter","booleanProps","numericProps","stringProps","arrayProps","props","getArgs","args","setArgs","v","TypeError","getEvalOrigin","evalOrigin","setEvalOrigin","getFunctionName","getFileName","getLineNumber","getColumnNumber","Boolean","j","Number","String","_$errorStackParser_31","ErrorStackParser","FIREFOX_SAFARI_STACK_REGEXP","CHROME_IE_STACK_REGEXP","SAFARI_NATIVE_CODE_REGEXP","parse","error","stacktrace","parseOpera","stack","match","parseV8OrIE","parseFFOrSafari","Error","extractLocation","urlLike","indexOf","parts","exec","replace","split","filter","line","map","sanitizedLine","tokens","slice","locationParts","pop","functionName","fileName","lineNumber","columnNumber","functionNameRegex","matches","e","parseOpera9","parseOpera11","parseOpera10","lineRE","lines","argsRaw","functionCall","shift","_$errorStackParser_10","_$safeJsonStringify_30","data","replacer","space","opts","redactedPaths","JSON","stringify","prepareObjForSerialization","MAX_DEPTH","MAX_EDGES","MIN_PRESERVED_DEPTH","REPLACEMENT_NODE","isError","o","throwsMessage","err","find","haystack","needle","isDescendent","paths","path","shouldRedact","patterns","toLowerCase","__isArray_30","safelyGetProp","seen","edges","visit","edgesExceeded","fResult","eResult","aResult","add","existingFeatures","existingFeatureKeys","variant","existingIndex","merge","newFeatures","toEventApi","_ref","flag","featureFlag","clear","features","featuresIndex","_$featureFlagDelegate_18","_$hasStack_19","__isError_32","_$iserror_20","__add_22","state","section","keyOrObj","maybeVal","_updates","updates","__clear_22","_$metadataDelegate_22","get","_$stackGenerator_33","StackGenerator","backtrace","maxStackSize","curr","callee","Array","RegExp","$1","caller","Event","errorClass","errorMessage","handledState","originalError","defaultHandledState","groupingHash","_handledState","severity","unhandled","app","device","request","breadcrumbs","threads","_metadata","_features","_featuresIndex","_user","_session","errors","createBugsnagError","__type","_proto","addMetadata","getMetadata","clearMetadata","addFeatureFlag","addFeatureFlags","getFeatureFlags","clearFeatureFlag","clearFeatureFlags","getUser","setUser","id","email","payloadVersion","exceptions","er","severityReason","session","formatStackframe","frame","file","normaliseFunctionName","code","inProject","ensureString","getCauseStack","cause","getStacktrace","errorFramesToSkip","backtraceFramesToSkip","create","maybeError","tolerateNonErrors","component","event","_normaliseError","normaliseError","internalFrames","makeSerialisable","_event$errors","causes","normalisedCauses","createAndLogInputError","reason","verb","warn","hasNecessaryFields","_$Event_6","_$asyncEvery_7","cb","index","next","_$callbackRunner_9","callbacks","onCallbackError","runMaybeAsyncCallback","ret","then","setTimeout","_$syncCallbackRunner_23","callbackArg","callbackType","ignore","cbs","_$pad_29","num","size","substr","env","self","globalCount","mimeTypesLength","navigator","mimeTypes","clientId","userAgent","_$fingerprint_28","c","blockSize","base","discreteValues","Math","pow","randomBlock","random","safeCounter","cuid","getTime","fingerprint","_$cuid_27","_$Session_35","Session","startedAt","_handled","_unhandled","events","handled","_track","__add_4","__clear_4","__merge_4","noop","Client","configuration","internalPlugins","notifier","_this","_notifier","_config","_schema","_delivery","sendSession","sendEvent","_logger","info","_plugins","_breadcrumbs","_context","_cbs","sp","b","_configure","pl","_loadPlugin","_depth","getContext","setContext","plugin","configSchema","_reduce","config","generateConfigErrorMessage","getPlugin","_setDelivery","d","startSession","version","_sessionDelegate","addOnError","front","removeOnError","_addOnSessionPayload","addOnSession","removeOnSession","addOnBreadcrumb","removeOnBreadcrumb","pauseSession","resumeSession","leaveBreadcrumb","crumb","_isBreadcrumbTypeEnabled","types","postReportCallback","_notify","_this2","originalSeverity","shouldSend","unhandledOverridden","rawInput","_$Client_4","_$jsonPayload_21","EVENT_REDACTION_PATHS","payload","_$delivery_36","client","win","url","getApiUrl","body","req","XDomainRequest","onload","onerror","toFixed","open","send","endpoint","isoDate","matchPageProtocol","protocol","encodeURIComponent","_matchPageProtocol","pageProtocol","_$delivery_37","XMLHttpRequest","onreadystatechange","readyState","DONE","status","setRequestHeader","toISOString","appStart","reset","_$app_38","now","duration","_$context_39","pathname","_$pad_43","__env_42","__globalCount_42","__prop_42","__mimeTypesLength_42","__clientId_42","_$fingerprint_42","__c_41","__blockSize_41","__base_41","__discreteValues_41","__randomBlock_41","__safeCounter_41","__cuid_41","_$cuid_41","BUGSNAG_ANONYMOUS_ID_KEY","getDeviceId","storage","localStorage","getItem","setItem","_$device_40","nav","locale","browserLanguage","systemLanguage","userLanguage","language","screen","orientation","document","documentElement","clientWidth","clientHeight","generateAnonymousId","collectUserIp","setDefaultUserId","time","eventOrSession","_$request_44","href","_$session_45","sessionDelegate","sessionClient","_pausedSession","_$clientIp_46","clientIp","_$consoleBreadcrumbs_47","CONSOLE_LOG_METHODS","original","_len","_key","arg","stringified","_restore","MAX_LINE_LENGTH","MAX_SCRIPT_LENGTH","_$inlineScriptContent_48","doc","trackInlineScripts","originalLocation","html","DOMContentLoaded","attachEvent","getHtml","outerHTML","prev","_lastScript","updateLastScript","script","getCurrentScript","currentScript","scripts","getElementsByTagName","addSurroundingCode","htmlLines","zeroBasedLine","start","end","cleanUrl","content","innerHTML","_setTimeout","__proxy","__traceOriginalScript","eventTargetCallbackAccessor","callbackAccessor","alsoCallOriginal","cba","__trace__","replacement","isEventHandlerObj","handleEvent","_$interactionBreadcrumbs_49","addEventListener","targetText","targetSelector","getNodeText","getNodeSelector","trimStart","trimEnd","el","text","textContent","innerText","tagName","className","querySelectorAll","parentNode","childNodes","_$navigationBreadcrumbs_50","drop","oldURL","from","relativeLocation","to","newURL","getCurrentState","history","replaceState","wrapHistoryFn","pushState","a","createElement","search","hash","stateChangeToMetadata","title","currentPath","prevState","orig","resetEventCount","BREADCRUMB_TYPE","_$networkBreadcrumbs_51","_ignoredUrls","ignoredUrls","monkeyPatchXMLHttpRequest","monkeyPatchFetch","handleFetchSuccess","response","handleFetchError","nativeOpen","requestSetupKey","handleXHRError","handleXHRLoad","removeEventListener","fetch","polyfill","oldFetch","_arguments","urlOrRequest","options","Promise","resolve","reject","_$throttle_52","maxEvents","_$stripQueryString_53","strip","allFrames","_strip","_$onerror_54","prevOnError","messageOrEvent","lineNo","charNo","decorateStack","detail","extraParameters","culprit","isActualNumber","errorCharacter","_$unhandledRejection_55","listener","evt","isBluebird","fixBluebirdStacktrace","_event$addMetadata","onunhandledrejection","promise","_$notifier_2","__schema_2","Bugsnag","_client","createClient","bugsnag","isStarted","m","g","global","_","$","Backbone","previousBackbone","VERSION","noConflict","emulateHTTP","emulateJSON","_listening","Events","eventSplitter","eventsApi","iteratee","callback","names","keys","on","_events","onApi","ctx","listening","_listeners","interop","listenTo","_listenId","uniqueId","listeningTo","_listeningTo","Listening","tryCatchOn","handlers","count","off","offApi","listeners","stopListening","ids","isEmpty","remaining","handler","_callback","cleanup","once","onceMap","listenToOnce","offer","trigger","triggerApi","objEvents","allEvents","all","triggerEvents","ev","l","a1","a2","a3","unbind","extend","Model","attributes","attrs","preinitialize","cid","cidPrefix","collection","defaults","set","changed","initialize","validationError","idAttribute","clone","sync","attr","escape","has","_validate","unset","silent","changes","changing","_changing","_previousAttributes","current","isEqual","prevId","_pending","hasChanged","changedAttributes","diff","old","previous","previousAttributes","model","success","resp","serverAttrs","wrapError","save","wait","isNew","patch","xhr","destroy","defer","urlError","constructor","isValid","Collection","models","comparator","_reset","setOptions","remove","addOptions","splice","array","insert","at","tail","singular","isArray","removed","_removeModels","added","merged","_isModel","toAdd","toMerge","toRemove","modelMap","sort","sortable","sortAttr","isString","existing","_prepareModel","_addReference","orderChanged","some","_removeReference","previousModels","unshift","_byId","modelId","where","first","findWhere","isFunction","sortBy","pluck","callbackOpts","_forwardPristineError","values","CollectionIterator","ITERATOR_VALUES","ITERATOR_KEYS","entries","ITERATOR_KEYSVALUES","_onModelEvent","$$iterator","Symbol","iterator","kind","_collection","_kind","_index","done","View","pick","viewOptions","_ensureElement","delegateEventSplitter","selector","$el","render","_removeElement","setElement","element","undelegateEvents","_setElement","delegateEvents","delegate","eventName","undelegate","_createElement","_setAttributes","addMethod","attribute","defaultVal","addUnderscoreMethods","Class","methods","each","instance","isObject","modelMatcher","matcher","collectionMethods","forEach","collect","reduce","foldl","inject","reduceRight","foldr","detect","select","every","any","include","includes","contains","invoke","toArray","head","take","initial","rest","last","without","difference","shuffle","lastIndexOf","chain","sample","partition","groupBy","countBy","indexBy","findIndex","findLastIndex","modelMethods","pairs","invert","omit","Base","mixin","mappings","functions","memo","methodMap","params","dataType","contentType","_method","beforeSend","processData","textStatus","errorThrown","ajax","Router","routes","_bindRoutes","optionalParam","namedParam","splatParam","escapeRegExp","route","isRegExp","_routeToRegExp","router","fragment","_extractParameters","execute","navigate","optional","param","decodeURIComponent","History","checkUrl","routeStripper","rootStripper","pathStripper","started","interval","atRoot","getSearch","matchRoot","decodeFragment","decodeURI","getHash","getPath","getFragment","_usePushState","_wantsHashChange","_trailingSlash","trailingSlash","hashChange","_hasHashChange","documentMode","_useHashChange","_wantsPushState","_hasPushState","rootPath","iframe","src","style","display","tabIndex","iWindow","insertBefore","firstChild","contentWindow","close","_checkUrlInterval","setInterval","loadUrl","stop","detachEvent","removeChild","clearInterval","decodedFragment","_updateHash","protoProps","staticProps","child","parent","__super__","bootbox","_locale","_animate","_backdrop","_defaultHref","_classes","_btnClasses","_icons","setLocale","_locales","addLocale","translations","setIcons","icons","setBtnClasses","btnClasses","alert","label","_translate","dialog","OK","confirm","labelCancel","labelOk","cancelCallback","CANCEL","CONFIRM","prompt","header","form","append","div","focus","preventDefault","click","modal","buttons","_class","icon","propCount","property","closeButton","animate","addClass","optionalClasses","classes","onCancel","hideModal","onEscape","which","backdrop","keyboard","show","defaultOptions","hideAll","FORMATS","datetime","millisecond","second","minute","hour","day","week","month","quarter","year","_date","override","_id","formats","format","valueOf","amount","unit","startOf","weekday","trunc","isoWeekday","endOf","jQuery","colors","stepHooks","class2type","rplusequals","stringParsers","re","execResult","color","Color","green","blue","alpha","spaces","rgba","red","idx","hsla","hue","saturation","lightness","propTypes","floor","mod","support","supportElem","getType","clamp","allowEmpty","def","stringParse","string","inst","_rgba","_i","parser","parsed","spaceName","cache","transparent","hue2rgb","q","h","cssText","backgroundColor","jquery","nodeType","css","_default","_spaceName","inArray","is","compare","same","localCache","isCache","_space","used","transition","other","distance","startColor","startValue","endValue","blend","opaque","rgb","toRgbaString","prefix","toHslaString","round","toHexString","includeAlpha","r","local","cur","vtype","_hsla","empty","hook","hooks","cssHooks","elem","curElem","fx","step","colorInit","pos","borderColor","expand","expanded","part","aqua","black","fuchsia","gray","lime","maroon","navy","olive","purple","silver","teal","white","yellow","deparam","coerce","coerce_types","keys_last","compareVersions","v1","v2","rVersionParts","v1p","v2p","jQueryVersionSince","migrateVersion","disabledPatches","migrateDisablePatches","migrateEnablePatches","migrateIsPatchEnabled","patchCode","migrateWarnings","migrateMute","warnedAbout","migrateDeduplicateWarnings","migrateTrace","migrateWarn","msg","trace","migrateWarnProp","defineProperty","configurable","enumerable","newValue","migrateWarnFuncInternal","newFunc","origFunc","migratePatchAndWarnFunc","migratePatchFunc","migrateReset","compatMode","findProp","oldInit","init","oldFind","rattrHashTest","rattrHashGlob","rtrim","arg1","querySelector","err1","op","err2","holdReady","uniqueSort","expr","pseudos","nodeName","oldAjax","rjsonp","jQXHR","fail","always","ajaxPrefilter","jsonp","oldRemoveAttr","removeAttr","oldToggleClass","toggleClass","rmatchNonSpace","camelCase","letter","patchNeeded","bool","getAttribute","setAttribute","origFnCss","internalCssNumber","internalSwapCall","ralphaStart","rautoPx","swap","oldHook","Proxy","cssProps","Reflect","animationIterationCount","columnCount","fillOpacity","flexGrow","flexShrink","fontWeight","gridArea","gridColumn","gridColumnEnd","gridColumnStart","gridRow","gridRowEnd","gridRowStart","lineHeight","opacity","order","orphans","widows","zIndex","zoom","cssNumber","isAutoPx","camelName","origThis","origData","curData","sameKeys","hasData","intervalValue","intervalMsg","oldTweenRun","Tween","run","linearEasing","pct","easing","requestAnimationFrame","hidden","oldLoad","oldEventAdd","originalFix","fix","fixHooks","originalEvent","fixHook","addProp","_migrated_","triggerHandler","special","ready","setup","fnOver","fnOut","rxhtmlTag","makeMarkup","implementation","createHTMLDocument","warnIfChanged","UNSAFE_restoreLegacyHtmlPrefilter","origOffset","offset","getBoundingClientRect","origParam","traditional","ajaxTraditional","ajaxSettings","addBack","Deferred","oldDeferred","tuples","Callbacks","func","deferred","newDeferredPipe","fns","newDefer","tuple","returned","progress","exceptionHook","jqueryUjsInit","rails","$document","linkClickSelector","buttonClickSelector","inputChangeSelector","formSubmitSelector","formInputClickSelector","disableSelector","enableSelector","requiredInputSelector","fileInputSelector","linkDisableSelector","buttonDisableSelector","csrfToken","csrfParam","CSRFProtection","token","refreshCSRFTokens","fire","isRemote","handleRemote","withCredentials","serializeArray","button","serialize","settings","accepts","complete","crossDomain","isCrossDomain","xhrFields","originAnchor","urlAnchor","handleMethod","link","metadataInput","hide","appendTo","submit","formElements","elements","disableFormElements","disableFormElement","enableFormElements","enableFormElement","removeData","allowAction","answer","blankInputs","specifiedSelector","nonBlank","input","radiosForNameWithNoneSelected","radioName","foundInputs","requiredInputs","checkedRadioButtonNames","nonBlankInputs","stopEverything","stopImmediatePropagation","disableElement","enableElement","originalOptions","metaClick","metaKey","ctrlKey","blankRequiredInputs","nonBlankFileInputs","remote","aborted","closest","_createClass","defineProperties","descriptor","writable","Constructor","_classCallCheck","Animation","Growl","ref","transitions","mouseEnter","mouseLeave","cycle","waitAndDismiss","present","dismiss","$growls","$growl","container","fixed","delayOnHover","namespace","stopPropagation","queue","delay","$element","direction","position","one","$_growls","$_growl","growl","notice","warning","tz","moment","default","cachedGuess","zones","links","countries","guesses","logError","momentVersion","major","minor","charCodeToInt","charCode","unpackBase60","whole","fractional","multiplier","out","sign","charCodeAt","arrayToInt","mapIndices","indices","unpack","offsets","untils","intToUntil","abbrs","population","Zone","packedString","_set","Country","country_name","zone_names","OffsetAt","timeString","toTimeString","abbr","getTimezoneOffset","ZoneScore","zone","offsetScore","abbrScore","findChange","low","high","mid","sortZoneScores","localeCompare","addToGuesses","guessesForUserOffsets","guessesOffset","offsetsLength","filteredGuesses","checkedOffsets","rebuildGuess","intlName","Intl","DateTimeFormat","resolvedOptions","timeZone","normalizeName","zoneScore","change","nextOffset","startYear","getFullYear","lastOffset","userOffsets","zoneScores","getZone","scoreOffsetAt","addZone","packed","normalized","addLink","aliases","alias","normal0","normal1","needsOffset","isUnixTimestamp","_f","_a","_tzm","utc","isMoment","unpacked","lo","hi","zone_name","country_code","offsetNext","offsetPrev","moveAmbiguousForward","moveInvalidForward","mom","utcOffset","offsetAt","abs","dataVersion","_zones","_links","_names","_countries","country_zones","addCountries","zoneExists","didShowError","guess","ignoreCache","zonesForCountry","country","with_offset","abbrWrap","_z","resetZoneWrap","defaultZone","updateOffset","keepTime","_isUTC","_d","z","zoneName","zoneAbbr","setDefault","momentProperties","NProgress","Settings","minimum","positionUsing","speed","trickle","trickleRate","trickleSpeed","showSpinner","barSelector","spinnerSelector","template","toBarPerc","barPositionCSS","ease","barCSS","transform","configure","bar","offsetWidth","getPositioningCSS","work","force","inc","$promise","fromStart","isRendered","getElementById","spinner","perc","removeElement","appendChild","removeClass","bodyStyle","vendorPrefix","pending","cssPrefixes","getVendorProp","vendorName","capName","getStyleProp","applyCss","properties","hasClass","classList","oldList","newList","ownKeys","object","enumerableOnly","getOwnPropertySymbols","symbols","sym","getOwnPropertyDescriptor","_objectSpread2","_defineProperty","getOwnPropertyDescriptors","_typeof","_objectWithoutProperties","excluded","sourceKeys","_objectWithoutPropertiesLoose","sourceSymbolKeys","pattern","IE11OrLess","Edge","FireFox","Safari","IOS","ChromeForAndroid","captureMode","capture","passive","msMatchesSelector","webkitMatchesSelector","getParentOrHost","includeCTX","_throttleTimeout","R_SPACE","defaultView","getComputedStyle","currentStyle","matrix","selfOnly","appliedTransforms","matrixFn","DOMMatrix","WebKitCSSMatrix","CSSMatrix","MSCSSMatrix","list","getWindowScrollingElement","scrollingElement","getRect","relativeToContainingBlock","relativeToNonStaticParent","undoScale","elRect","top","left","bottom","right","height","width","innerHeight","innerWidth","containerRect","elMatrix","scaleX","scaleY","getContentRect","rect","paddingLeft","paddingTop","paddingRight","paddingBottom","isScrolledPast","elSide","parentSide","getParentAutoScrollElement","elSideVal","parentSideVal","getChild","childNum","includeDragEl","currentChild","children","Sortable","ghost","dragged","draggable","lastChild","lastElementChild","previousElementSibling","getRelativeScrollOffset","offsetLeft","offsetTop","winScroller","scrollLeft","scrollTop","includeSelf","gotSelf","scrollWidth","scrollHeight","elemCSS","overflowX","overflowY","isRectEqual","rect1","rect2","throttle","ms","scrollBy","y","Polymer","Zepto","dom","cloneNode","expando","AnimationStateManager","animationCallbackId","animationStates","captureAnimationState","animation","fromRect","thisAnimationDuration","childMatrix","addAnimationState","removeAnimationState","indexOfObject","animateAll","clearTimeout","animating","animationTime","toRect","prevFromRect","prevToRect","animatingRect","targetMatrix","sqrt","calculateRealTime","animationResetTimer","currentRect","translateX","translateY","animatingX","animatingY","forRepaintDummy","repaint","animated","initializeByDefault","PluginManager","mount","option","pluginName","pluginEvent","eventCanceled","cancel","eventNameGlobal","initializePlugins","initialized","modified","modifyOption","getEventProperties","eventProperties","modifiedValue","optionListeners","dispatchEvent","rootEl","targetEl","cloneEl","toEl","fromEl","oldIndex","newIndex","oldDraggableIndex","newDraggableIndex","putSortable","extraEventProperties","onName","CustomEvent","createEvent","initEvent","bubbles","cancelable","pullMode","lastPutMode","allEventProperties","_excluded","dragEl","parentEl","ghostEl","nextEl","lastDownEl","cloneHidden","dragStarted","moved","activeSortable","active","hideGhostForTarget","_hideGhostForTarget","unhideGhostForTarget","_unhideGhostForTarget","cloneNowHidden","cloneNowShown","dispatchSortableEvent","_dispatchEvent","activeGroup","tapEvt","touchEvt","lastDx","lastDy","tapDistanceLeft","tapDistanceTop","lastTarget","lastDirection","targetMoveDistance","ghostRelativeParent","awaitingDragStarted","ignoreNextClick","sortables","pastFirstInvertThresh","isCircumstantialInvert","ghostRelativeParentInitialScroll","_silent","savedInputChecked","documentExists","PositionGhostAbsolutely","CSSFloatProperty","supportDraggable","supportCssPointerEvents","pointerEvents","_detectDirection","elCSS","elWidth","borderLeftWidth","borderRightWidth","child1","child2","firstChildCSS","secondChildCSS","firstChildWidth","marginLeft","marginRight","secondChildWidth","flexDirection","gridTemplateColumns","touchingSideChild2","_prepareGroup","toFn","pull","sameGroup","group","otherGroup","originalGroup","checkPull","checkPut","put","revertClone","nearestEmptyInsertDetectEvent","touches","nearest","clientX","clientY","threshold","emptyInsertThreshold","insideHorizontally","insideVertically","_onDragOver","_checkOutsideTargetEl","_isOutsideThisEl","disabled","store","handle","swapThreshold","invertSwap","invertedSwapThreshold","removeCloneOnHide","ghostClass","chosenClass","dragClass","preventOnFilter","setData","dataTransfer","dropBubble","dragoverBubble","dataIdAttr","delayOnTouchOnly","touchStartThreshold","devicePixelRatio","forceFallback","fallbackClass","fallbackOnBody","fallbackTolerance","fallbackOffset","supportPointer","nativeDraggable","_onTapStart","_onMove","dragRect","targetRect","willInsertAfter","retVal","onMoveFn","onMove","draggedRect","related","relatedRect","_disableDraggable","_unsilent","_generateId","sum","_nextTick","_cancelNextTick","_getDirection","touch","pointerType","originalTarget","shadowRoot","composedPath","inputs","checked","_saveInputCheckedState","isContentEditable","criteria","trim","_prepareDragStart","dragStartFn","ownerDocument","nextSibling","_lastX","_lastY","_onDrop","_disableDelayedDragEvents","_triggerDragStart","_disableDelayedDrag","_delayedDragTouchMoveHandler","_dragStartTimer","_onTouchMove","_onDragStart","selection","getSelection","removeAllRanges","_dragStarted","fallback","_appendGhost","_nulling","_emulateDragOver","elementFromPoint","ghostMatrix","relativeScrollOffset","dx","dy","cssMatrix","removeAttribute","_hideClone","cloneId","_loopId","effectAllowed","_dragStartId","revert","vertical","isOwner","canSort","fromSortable","completedFired","dragOverEvent","_ignoreWhileAnimating","completed","elLastChild","lastElRect","sortableContentRect","spacer","_ghostIsLast","firstElRect","_ghostIsFirst","targetBeforeFirstSwap","sibling","differentLevel","differentRowCol","dragElS1Opp","dragElS2Opp","dragElOppLength","targetS1Opp","targetS2Opp","targetOppLength","_dragElInRowColumn","side1","scrolledPastTop","scrollBefore","isLastTarget","mouseOnAxis","targetLength","targetS1","targetS2","_getInsertDirection","_getSwapDirection","dragIndex","nextElementSibling","after","moveVector","extra","axis","insertion","_showClone","_offMoveEvents","_offUpEvents","dropEffect","_globalDragOver","useAnimation","items","utils","dst","nextTick","cancelNextTick","detectDirection","scrollEl","scrollRootEl","lastAutoScrollX","lastAutoScrollY","touchEvt$1","pointerElemChangedInterval","autoScrolls","scrolling","clearAutoScrolls","autoScroll","pid","clearPointerElemChangedInterval","isFallback","scroll","scrollCustomFn","sens","scrollSensitivity","scrollSpeed","scrollThisInstance","scrollFn","layersOut","currentParent","canScrollX","canScrollY","scrollPosX","scrollPosY","vx","vy","layer","scrollOffsetY","scrollOffsetX","bubbleScroll","toSortable","changedTouches","onSpill","Revert","Remove","startIndex","dragStart","_ref2","_ref3","_ref4","parentSortable","AutoScroll","forceAutoScrollFallback","_handleAutoScroll","_handleFallbackAutoScroll","dragOverCompleted","dragOverBubble","nulling","ogElemScroller","newElem","TimeMe","startStopTimes","idleTimeoutMs","currentIdleTimeMs","checkIdleStateRateMs","isUserCurrentlyOnPage","isUserCurrentlyIdle","currentPageName","timeElapsedCallbacks","userLeftCallbacks","userReturnCallbacks","trackTimeOnElement","elementId","startTimer","stopTimer","getTimeOnElementInSeconds","getTimeOnPageInSeconds","pageName","startTime","arrayOfTimes","latestStartStopEntry","stopTime","stopAllTimers","pageNames","getTimeOnCurrentPageInSeconds","timeInMs","getTimeOnPageInMilliseconds","getTimeOnCurrentPageInMilliseconds","totalTimeOnPage","timeSpentOnPageInSeconds","getTimeOnAllPagesInSeconds","allTimes","timeOnPage","setIdleDurationInSeconds","durationFloat","setCurrentPageName","resetRecordedPageTime","resetAllRecordedPageTimes","userActivityDetected","triggerUserHasReturned","resetIdleCountdown","callWhenUserLeaves","numberOfTimesToInvoke","callWhenUserReturns","userReturnedCallback","numberTimes","triggerUserHasLeftPageOrGoneIdle","userHasLeftCallback","callAfterTimeElapsedInSeconds","timeInSeconds","checkIdleState","visibilityChangeEventName","hiddenPropName","listenForVisibilityEvents","trackWhenUserLeavesPage","trackWhenUserGoesIdle","listenForUserLeavesOrReturnsEvents","listForIdleEvents","mozHidden","msHidden","webkitHidden","websocket","websocketHost","setUpWebsocket","websocketOptions","WebSocket","onbeforeunload","sendCurrentTime","appId","onopen","sendInitWsRequest","onmessage","websocketSend","timeOnPageMs","initialStartTime","idleTimeoutInSeconds","_IPv6","IPv6","best","address","_segments","segments","total","_best","_current","inzeroes","_SecondLevelDomains","SecondLevelDomains","SLD","domain","tldOffset","sldOffset","sldList","punycode","_URI","URI","_urlSupplied","absoluteTo","hasOwn","escapeRegEx","filterArrayValues","lookup","arrayContains","_type","arraysEqual","two","trimSlashes","escapeForDumbFirefox36","strictEncodeURIComponent","_parts","username","password","hostname","urn","port","query","preventInvalidHostname","duplicateQueryParameters","escapeQuerySpace","protocol_expression","idn_expression","punycode_expression","ip4_expression","ip6_expression","find_uri_expression","findUri","parens","leading_whitespace_expression","ascii_tab_whitespace","defaultPorts","http","https","ftp","gopher","ws","wss","hostProtocols","invalid_hostname_characters","domAttributes","getDomAttribute","node","encode","decode","iso8859","unescape","unicode","characters","expression","reserved","urnpath","encodeQuery","escaped","decodeQuery","_part","generateAccessor","_group","generateSegmentedPathFunction","_sep","_codingFuncName","_innerCodingFuncName","actualCodingFunc","generateSimpleAccessor","build","generatePrefixAccessor","decodePath","decodeUrnPath","recodePath","recodeUrnPath","encodeReserved","parseAuthority","parseHost","bracketPos","t","firstColon","firstSlash","nextColon","ensureValidHostname","ensureValidPort","parseUserinfo","_string","parseQuery","splits","requireAbsolutePath","buildAuthority","buildHost","buildUserinfo","buildQuery","unique","buildQueryParameter","addQuery","setQuery","removeQuery","hasQuery","withinArray","joinPaths","nonEmptySegments","segment","uri","normalize","commonPath","withinString","_start","_end","_trim","_parens","_attributeOpen","lastIndex","ignoreHtml","attributeOpen","parensEnd","parensMatch","parensMatchEnd","hasHostname","rejectEmptyHostname","toASCII","removeAll","unconflicted","URITemplate","deferBuild","_deferred_build","res","_object","what","ip","ip4","ip6","sld","idn","relative","_protocol","_port","_hostname","scheme","origin","authority","userinfo","resource","subdomain","sub","tld","ReferenceError","directory","filename","decodePathSegment","mutatedDirectory","normalizePath","suffix","separator","absolute","segmentCoded","setSearch","addSearch","removeSearch","hasSearch","normalizeProtocol","normalizeQuery","normalizeFragment","normalizeHostname","normalizePort","_was_relative","_path","_parent","_pos","_leadingParents","normalizePathname","normalizeSearch","normalizeHash","readable","toUnicode","qp","kv","basedir","resolved","relativeTo","relativeParts","baseParts","common","relativePath","basePath","parents","equals","one_map","two_map","one_query","two_query","freeGlobal","maxInt","tMin","tMax","skew","damp","initialBias","initialN","delimiter","regexPunycode","regexNonASCII","regexSeparators","baseMinusTMin","stringFromCharCode","fromCharCode","RangeError","mapDomain","ucs2decode","output","counter","ucs2encode","digitToBasic","digit","adapt","delta","numPoints","firstTime","basic","oldi","w","baseMinusT","codePoint","inputLength","bias","handledCPCount","basicLength","currentValue","handledCPCountPlusOne","qMinusT","register","lim","p2b","n2b","b2n","n2p","map$1","A","B","C","D","E","F","hex","h1","h2","eq","hexString","isShort","HUE_RE","hsl2rgbn","hsv2rgbn","hwb2rgbn","rgb2hsl","hueValue","calln","hsl2rgb","hueParse","p1","p2","hwb2rgb","hsv2rgb","Z","Y","X","W","V","U","T","S","R","Q","P","O","N","M","L","K","G","H","I","J","names$1","OiceXe","antiquewEte","aquamarRe","azuY","beige","bisque","blanKedOmond","Xe","XeviTet","bPwn","burlywood","caMtXe","KartYuse","KocTate","cSO","cSnflowerXe","cSnsilk","crimson","cyan","xXe","xcyan","xgTMnPd","xWay","xgYF","xgYy","xkhaki","xmagFta","xTivegYF","xSange","xScEd","xYd","xsOmon","xsHgYF","xUXe","xUWay","xUgYy","xQe","xviTet","dAppRk","dApskyXe","dimWay","dimgYy","dodgerXe","fiYbrick","flSOwEte","foYstWAn","fuKsia","gaRsbSo","ghostwEte","gTd","gTMnPd","Way","gYF","gYFLw","gYy","honeyMw","hotpRk","RdianYd","Rdigo","ivSy","khaki","lavFMr","lavFMrXsh","lawngYF","NmoncEffon","ZXe","ZcSO","Zcyan","ZgTMnPdLw","ZWay","ZgYF","ZgYy","ZpRk","ZsOmon","ZsHgYF","ZskyXe","ZUWay","ZUgYy","ZstAlXe","ZLw","limegYF","lRF","magFta","maPon","VaquamarRe","VXe","VScEd","VpurpN","VsHgYF","VUXe","VsprRggYF","VQe","VviTetYd","midnightXe","mRtcYam","mistyPse","moccasR","navajowEte","Tdlace","Tive","TivedBb","Sange","SangeYd","ScEd","pOegTMnPd","pOegYF","pOeQe","pOeviTetYd","papayawEp","pHKpuff","peru","pRk","plum","powMrXe","purpN","YbeccapurpN","Yd","Psybrown","PyOXe","saddNbPwn","sOmon","sandybPwn","sHgYF","sHshell","siFna","skyXe","UXe","UWay","UgYy","snow","sprRggYF","stAlXe","tan","teO","tEstN","tomato","Qe","viTet","JHt","wEte","wEtesmoke","Lw","LwgYF","nameParse","tkeys","ok","nk","RGB_RE","modHSL","ratio","tmp","proto","fromObject","functionParse","rgbParse","_rgb","_valid","valid","rgbString","hslString","mix","weight","c1","c2","w2","w1","interpolate","rgb1","rgb2","clearer","greyscale","opaquer","negate","lighten","darken","saturate","desaturate","rotate","deg","uid","isNullOrUndef","isNumberFinite","finiteOrDefault","valueOrDefault","toDimension","dimension","endsWith","thisArg","loopable","reverse","_elementsEqual","a0","ilen","v0","datasetIndex","klen","isValidKey","_merger","tval","sval","sources","merger","mergeIf","_mergerIf","keyResolvers","resolveObjectKey","resolver","_splitKey","_getKeyResolver","defined","setsEqual","PI","TAU","PITAU","INFINITY","POSITIVE_INFINITY","RAD_PER_DEG","HALF_PI","QUARTER_PI","TWO_THIRDS_PI","log10","almostEquals","epsilon","niceNum","range","roundedRange","niceRange","fraction","isNumber","_setMinAndMaxByKey","toRadians","degrees","toDegrees","radians","_decimalPlaces","getAngleFromPoint","centrePoint","anglePoint","distanceFromXCenter","distanceFromYCenter","radialDistanceFromCenter","angle","atan2","distanceBetweenPoints","pt1","pt2","_angleDiff","_normalizeAngle","_angleBetween","sameAngleIsFullCircle","angleToStart","angleToEnd","startToAngle","endToAngle","_limitValue","_isBetween","_lookup","table","cmp","_lookupByKey","ti","_rlookupByKey","arrayEvents","unlistenArrayEvents","stub","_chartjs","_arrayUnique","Set","requestAnimFrame","throttled","argsToUse","ticking","_toLeftRightCenter","align","_alignStartEnd","_getStartAndCountOfVisiblePoints","meta","points","animationsDisabled","pointCount","_sorted","iScale","_parsed","minDefined","maxDefined","getUserBounds","getPixelForValue","_scaleRangesChanged","xScale","yScale","_scaleRanges","newRanges","xmin","xmax","ymin","ymax","atEdge","elasticIn","sin","elasticOut","effects","linear","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","easeInSine","cos","easeOutSine","easeInOutSine","easeInExpo","easeOutExpo","easeInOutExpo","easeInCirc","easeOutCirc","easeInOutCirc","easeInElastic","easeOutElastic","easeInOutElastic","easeInBack","easeOutBack","easeInOutBack","easeInBounce","easeOutBounce","easeInOutBounce","isPatternOrGradient","getHoverColor","numbers","intlCache","Map","formatNumber","cacheKey","formatter","NumberFormat","getNumberFormat","formatters","numeric","tickValue","ticks","chart","notation","maxTick","calculateDelta","logDelta","numDecimal","minimumFractionDigits","maximumFractionDigits","logarithmic","remain","significand","Ticks","overrides","descriptors","getScope$1","scope","Defaults","_descriptors","_appliers","datasets","platform","getDevicePixelRatio","font","family","hover","hoverBackgroundColor","hoverBorderColor","hoverColor","indexAxis","interaction","mode","intersect","includeInvisible","maintainAspectRatio","onHover","onClick","parsing","responsive","scale","scales","showLine","drawActiveElementsOnTop","describe","targetScope","targetName","scopeObject","targetScopeObject","privateName","appliers","_scriptable","startsWith","_indexable","_fallback","loop","resize","animations","visible","autoPadding","padding","beginAtZero","bounds","clip","grace","grid","lineWidth","drawOnChartArea","drawTicks","tickLength","tickWidth","_ctx","tickColor","border","dash","dashOffset","minRotation","maxRotation","mirror","textStrokeWidth","textStrokeColor","autoSkip","autoSkipPadding","labelOffset","crossAlign","showLabelBackdrop","backdropColor","backdropPadding","_measureText","gc","longest","textWidth","measureText","_longestText","arrayOfThings","garbageCollect","jlen","thing","nestedThing","restore","gcLen","_alignPixel","pixel","currentDevicePixelRatio","halfWidth","clearCanvas","canvas","resetTransform","clearRect","drawPoint","drawPointLegend","xOffset","yOffset","cornerRadius","xOffsetW","yOffsetW","pointStyle","rotation","radius","rad","translate","drawImage","beginPath","ellipse","arc","closePath","moveTo","lineTo","SQRT1_2","fill","borderWidth","stroke","_isPointInArea","point","area","margin","clipArea","unclipArea","_steppedLineTo","flip","midpoint","_bezierCurveTo","bezierCurveTo","cp1x","cp2x","cp1y","cp2y","decorateText","strikethrough","underline","metrics","actualBoundingBoxLeft","actualBoundingBoxRight","actualBoundingBoxAscent","actualBoundingBoxDescent","yDecoration","strokeStyle","fillStyle","decorationWidth","drawBackdrop","oldColor","fillRect","renderText","strokeWidth","strokeColor","translation","textAlign","textBaseline","setRenderOpts","strokeText","maxWidth","fillText","addRoundedRectPath","topLeft","bottomLeft","bottomRight","topRight","LINE_HEIGHT","FONT_STYLE","toLineHeight","numberOrZero","_readValueToProps","objProps","read","toTRBL","toTRBLCorners","toPadding","toFont","toFontString","cacheable","createContext","parentContext","_createResolver","scopes","prefixes","rootScopes","getTarget","finalRootScopes","_resolve","toStringTag","_cacheable","_scopes","_rootScopes","_getTarget","deleteProperty","_keys","_cached","proxy","readKey","needsSubResolver","createSubResolver","_resolveWithPrefixes","getPrototypeOf","getKeysFromAllScopes","_storage","_attachContext","subProxy","descriptorDefaults","_proxy","_subProxy","_stack","receiver","isScriptable","getValue","delete","_resolveScriptable","isIndexable","_resolveArray","_resolveWithContext","allKeys","scriptable","indexable","_allKeys","resolveFallback","getScope","addScopes","parentScopes","parentFallback","allScopes","addScopesFromKey","subGetTarget","resolveKeysFromAllScopes","_parseObjectDataRadialScale","_parsing","EPSILON","getPoint","skip","getValueAxis","splineCurve","firstPoint","middlePoint","afterPoint","d01","d12","s01","s12","fa","fb","splineCurveMonotone","valueAxis","pointsLen","deltaK","mK","pointBefore","pointCurrent","pointAfter","slopeDelta","alphaK","betaK","tauK","squaredMagnitude","monotoneAdjust","iPixel","vPixel","monotoneCompute","capControlPoint","pt","_updateBezierControlPoints","controlPoints","spanGaps","cubicInterpolationMode","tension","capBezierPoints","inArea","inAreaPrev","inAreaNext","_isDomSupported","_getParentNode","domNode","parseMaxStyle","styleValue","parentProperty","valueInPixels","positions","getPositionedStyle","styles","useOffsetPos","getRelativePosition","borderBox","boxSizing","paddings","borders","box","offsetX","offsetY","getCanvasPosition","round1","getMaximumSize","bbWidth","bbHeight","aspectRatio","margins","maxHeight","containerSize","containerStyle","containerBorder","containerPadding","getContainerSize","retinaScale","forceRatio","forceStyle","pixelRatio","deviceHeight","deviceWidth","setTransform","supportsEventListenerOptions","passiveSupported","readUsedSize","getPropertyValue","getStyle","_pointInLine","_steppedInterpolation","_bezierInterpolation","cp1","cp2","getRtlAdapter","rtl","rectX","setWidth","xPlus","leftForLtr","itemWidth","getRightToLeftAdapter","_itemWidth","overrideTextDirection","getPropertyPriority","setProperty","prevTextDirection","restoreTextDirection","propertyFn","between","normalizeSegment","_boundSegment","startBound","endBound","getSegment","prevValue","inside","subStart","shouldStart","shouldStop","_boundSegments","splitByStyles","segmentOptions","chartContext","_chart","baseStyle","readStyle","_datasetIndex","prevStyle","addStyle","st","dir","p0","p0DataIndex","p1DataIndex","styleChanged","doSplitByStyles","borderCapStyle","borderDash","borderDashOffset","borderJoinStyle","Animator","_request","_charts","_running","_lastDate","anims","date","numSteps","currentStep","_refresh","_update","running","draw","_active","_total","tick","_getAnims","charts","listen","acc","_duration","animator","interpolators","boolean","factor","c0","number","cfg","_fn","_easing","_loop","_target","_prop","_from","_to","_promises","update","elapsed","promises","rej","Animations","_properties","animationOptions","animatedProps","getOwnPropertyNames","_animateOptions","newOptions","$shared","$animations","resolveTargetOptions","_createAnimations","anim","awaitAll","scaleClip","allowedOverflow","getSortedDatasetIndices","filterVisible","metasets","_getSortedDatasetMetas","applyStack","dsIndex","singleMode","otherValue","isStacked","stacked","getOrCreateStack","stacks","stackKey","indexValue","subStack","getLastIndexInStack","vScale","positive","getMatchingVisibleMetas","updateStacks","controller","_cachedMeta","_stacks","iAxis","vAxis","indexScale","valueScale","getStackKey","_top","_bottom","_visualValues","getFirstScaleId","clearStacks","isDirectUpdateMode","cloneIfNotShared","cached","shared","DatasetController","static","_cachedDataOpts","getMeta","_data","_objectData","_sharedOptions","_drawStart","_drawCount","enableOptionSharing","supportsDecimation","$context","_syncList","datasetElementType","dataElementType","linkScales","_stacked","addElements","isPluginEnabled","updateIndex","dataset","getDataset","chooseId","xid","xAxisID","yid","yAxisID","rid","rAxisID","iid","iAxisID","vid","vAxisID","getScaleForId","rScale","getDatasetMeta","scaleID","_getOtherScale","_destroy","_dataCheck","adata","convertObjectDataToArray","isExtensible","buildOrUpdateElements","resetNewElements","stackChanged","oldStacked","_resyncElements","scopeKeys","datasetScopeKeys","getOptionScopes","createResolver","sorted","parseArrayData","parseObjectData","parsePrimitiveData","isNotInOrderComparedToPrev","labels","getLabels","singleScale","xAxisKey","yAxisKey","getParsed","getDataElement","updateRangeFromParsed","parsedValue","NaN","getMinMax","canStack","otherScale","createStack","NEGATIVE_INFINITY","otherMin","otherMax","_skip","getAllParsedValues","getMaxOverflow","getLabelAndValue","getLabelForValue","_clip","toClip","defaultClip","chartArea","resolveDatasetElementOptions","resolveDataElementOptions","dataIndex","raw","createDataContext","createDatasetContext","_resolveElementOptions","elementType","sharing","datasetElementScopeKeys","resolveNamedOptions","freeze","_resolveAnimations","datasetAnimationScopeKeys","getSharedOptions","includeOptions","sharedOptions","_animationsDisabled","_getSharedOptions","firstOpts","previouslySharedOptions","updateSharedOptions","updateElement","_setStyle","removeHoverStyle","setHoverStyle","_removeDatasetHoverStyle","_setDatasetHoverStyle","arg2","numMeta","numData","_insertElements","_removeElements","move","updateElements","_sync","_dataChanges","_onDataPush","_onDataPop","_onDataShift","_onDataSplice","newCount","_onDataUnshift","computeMinSampleSize","_cache","$bar","visibleMetas","getAllScaleValues","_length","updateMinAndPrev","getPixelForTick","parseValue","entry","barStart","barEnd","_custom","parseFloatBar","parseArrayOrPrimitive","isFloatBar","custom","setBorderSkipped","edge","borderSkipped","horizontal","borderProps","enableBorderRadius","parseEdge","startEnd","setInflateAmount","inflateAmount","DoughnutController","animateRotate","animateScale","cutout","circumference","spacing","legend","generateLabels","fontColor","getDataVisibility","legendItem","toggleDataVisibility","super","innerRadius","outerRadius","getter","_getRotation","_getCircumference","_getRotationExtents","isDatasetVisible","arcs","getMaxBorderWidth","getMaxOffset","maxSize","chartWeight","_getRingWeight","ratioX","ratioY","startAngle","endAngle","startX","startY","endX","endY","calcMax","calcMin","maxX","maxY","minX","minY","getRatioAndOffset","maxRadius","radiusLength","_getVisibleDatasetWeightTotal","calculateTotal","_getRingWeightOffset","_circumference","calculateCircumference","animationOpts","centerX","centerY","borderAlign","hoverBorderWidth","hoverOffset","ringWeightOffset","PolarAreaController","angleLines","circular","pointLabels","_updateRadius","minSize","cutoutPercentage","getVisibleDatasetCount","xCenter","yCenter","datasetStartAngle","getIndexAngle","defaultAngle","countVisibleElements","_computeAngle","getDistanceFromCenterForValue","controllers","__proto__","BarController","categoryPercentage","barPercentage","grouped","_index_","_value_","iAxisKey","vAxisKey","bars","getBasePixel","isHorizontal","ruler","_getRuler","vpixels","_calculateBarValuePixels","ipixels","_calculateBarIndexPixels","center","_getStacks","skipNull","_getStackCount","_getStackIndex","pixels","barThickness","_startPixel","_endPixel","stackCount","baseValue","minBarLength","actualBase","floating","barSign","startPixel","getPixelForDecimal","endPixel","getValueForPixel","halfGrid","getLineWidthForValue","maxBarThickness","percent","chunk","computeFlexCategoryTraits","thickness","computeFitCategoryTraits","stackIndex","rects","BubbleController","LineController","_dataset","_decimated","maxGapLength","directUpdate","pointsCount","prevParsed","nullData","lastPoint","updateControlPoints","PieController","RadarController","_fullLoop","pointPosition","getPointPositionForValue","ScatterController","registry","getElement","DateAdapterBase","members","adapters","binarySearch","metaset","lookupMethod","_reversePixels","getRange","evaluateInteractionItems","getSortedVisibleDatasetMetas","getIntersectItems","useFinalPosition","isPointInArea","inRange","getNearestCartesianItems","distanceMetric","useX","useY","deltaX","deltaY","getDistanceMetricForAxis","minDistance","getCenterPoint","getNearestItems","getProps","getNearestRadialItems","getAxisItems","rangeMethod","intersectsItem","Interaction","modes","STATIC_POSITIONS","filterByPosition","filterDynamicPositionByAxis","sortByWeight","setLayoutDims","layouts","wrap","stackWeight","placed","buildStacks","vBoxMaxWidth","hBoxMaxHeight","layout","fullSize","availableWidth","availableHeight","getCombinedMax","maxPadding","updateMaxPadding","boxPadding","updateDims","getPadding","newWidth","outerWidth","newHeight","outerHeight","widthChanged","heightChanged","getMargins","marginForPositions","fitBoxes","boxes","refitBoxes","refit","setBoxDims","placeBoxes","userPadding","addBox","_layers","removeBox","layoutItem","minPadding","layoutBoxes","wrapBoxes","centerHorizontal","centerVertical","leftAndTop","rightAndBottom","buildLayoutBoxes","verticalBoxes","horizontalBoxes","beforeLayout","visibleVerticalBoxCount","updatePos","handleMaxPadding","BasePlatform","acquireContext","releaseContext","isAttached","updateConfig","BasicPlatform","EXPANDO_KEY","EVENT_TYPES","touchstart","touchmove","touchend","pointerenter","pointerdown","pointermove","pointerup","pointerleave","pointerout","isNullOrEmpty","eventListenerOptions","removeListener","nodeListContains","nodeList","createAttachObserver","observer","MutationObserver","addedNodes","removedNodes","observe","childList","subtree","createDetachObserver","drpListeningCharts","oldDevicePixelRatio","onWindowResize","dpr","createResizeObserver","ResizeObserver","contentRect","listenDevicePixelRatioChanges","releaseObserver","disconnect","unlistenDevicePixelRatioChanges","createProxyAndListen","native","fromNativeEvent","addListener","DomPlatform","renderHeight","renderWidth","displayWidth","displayHeight","initCanvas","proxies","$proxies","attach","detach","isConnected","Element","tooltipPosition","hasValue","final","tickOpts","determinedMaxTicks","_tickSize","maxScale","maxChart","_maxLength","determineMaxTicks","ticksLimit","maxTicksLimit","majorIndices","enabled","getMajorIndices","numMajorIndices","newTicks","ceil","skipMajors","evenMajorSpacing","getEvenSpacing","factors","_factorize","calculateSpacing","avgMajorSpacing","majorStart","majorEnd","offsetFromEdge","getTicksLimit","ticksLength","numItems","increment","getPixelForGridLine","offsetGridLines","validIndex","lineValue","getTickMarkLength","getTitleHeight","titleAlign","reverseAlign","Scale","_margins","labelRotation","_range","_gridLineItems","_labelItems","_labelSizes","_longestTextCache","_userMax","_userMin","_suggestedMax","_suggestedMin","_ticksLength","_borderValue","_dataLimitsCached","suggestedMin","suggestedMax","metas","getTicks","xLabels","yLabels","getLabelItems","_computeLabelItems","beforeUpdate","sampleSize","beforeSetDimensions","setDimensions","afterSetDimensions","beforeDataLimits","determineDataLimits","afterDataLimits","minmax","keepZero","_addGrace","beforeBuildTicks","buildTicks","afterBuildTicks","samplingEnabled","_convertTicksToLabels","beforeCalculateLabelRotation","calculateLabelRotation","afterCalculateLabelRotation","afterAutoSkip","beforeFit","fit","afterFit","afterUpdate","reversePixels","_alignToPixels","alignToPixels","_callHooks","notifyPlugins","beforeTickToLabelConversion","generateTickLabels","afterTickToLabelConversion","numTicks","maxLabelDiagonal","_isVisible","labelSizes","_getLabelSizes","maxLabelWidth","widest","maxLabelHeight","highest","asin","titleOpts","gridOpts","titleHeight","tickPadding","angleRadians","labelHeight","labelWidth","_calculatePadding","_handleMargins","isRotated","labelsBelowTicks","offsetRight","isFullSize","_computeLabelSizes","caches","widths","heights","tickFont","fontString","nestedLabel","widestLabelSize","highestLabelSize","_resolveTickFontOptions","valueAt","decimal","getDecimalForPixel","getBaseValue","createTickContext","optionTicks","rot","_computeGridLineItems","tl","borderOpts","axisWidth","axisHalfWidth","alignBorderValue","borderValue","alignedLineValue","tx1","ty1","tx2","ty2","x1","y1","x2","y2","positionAxisID","limit","optsAtIndex","optsAtIndexBorder","lineColor","tickBorderDash","tickBorderDashOffset","tickAndPadding","hTickAndPadding","lineCount","textOffset","_getXAxisLabelAlignment","_getYAxisLabelAlignment","halfCount","tickTextAlign","labelPadding","_computeLabelArea","drawBackground","drawGrid","drawLine","setLineDash","lineDashOffset","drawBorder","lastLineWidth","drawLabels","renderTextOptions","drawTitle","titleX","titleY","titleArgs","gz","bz","axisID","_maxDigits","fontSize","TypedRegistry","isForType","isPrototypeOf","parentScope","isIChartComponent","itemDefaults","defaultRoutes","propertyParts","sourceName","sourceScope","routeDefaults","registerDefaults","unregister","Registry","_typedRegistries","_each","addControllers","addPlugins","addScales","getController","_get","getScale","removeControllers","removeElements","removePlugins","removeScales","typedRegistry","reg","_getRegistryForType","_exec","itemReg","camelMethod","PluginService","_init","_createDescriptors","invalidate","_oldCache","_notifyStateChanges","localIds","allPlugins","getOpts","pluginOpts","createDescriptors","previousDescriptors","pluginScopeKeys","getIndexAxis","datasetDefaults","idMatchesAxis","determineAxis","scaleOptions","getAxisFromDataset","mergeScaleConfig","chartDefaults","configScales","chartIndexAxis","scaleConf","boundDs","retrieveAxisFromDatasets","defaultId","getDefaultScaleIDFromAxis","defaultScaleOptions","defaultID","getAxisFromDefaultScaleID","initOptions","initData","keyCache","keysCached","cachedKeys","generate","addIfFound","Config","initConfig","_scopeCache","_resolverCache","clearCache","datasetType","additionalOptionScopes","_cachedScopes","mainScope","resetCache","keyLists","chartOptionScopes","subPrefixes","getResolver","hasFunction","needContext","resolverCache","KNOWN_POSITIONS","positionIsHorizontal","compare2Level","l1","l2","onAnimationsComplete","onComplete","onAnimationProgress","onProgress","getCanvas","instances","getChart","moveNumericKeys","intKey","getSizeForArea","field","Chart","invalidatePlugins","userConfig","initialCanvas","existingChart","OffscreenCanvas","_detectPlatform","_options","_aspectRatio","_metasets","_lastEvent","_responsiveListeners","_sortedMetasets","_hiddenIndices","attached","_doResize","timeout","debounce","resizeDelay","_initialize","bindEvents","_resizeBeforeDraw","_resize","newSize","newRatio","onResize","ensureScalesHaveIDs","axisOptions","buildOrUpdateScales","scaleOpts","updated","isRadial","dposition","dtype","scaleType","hasUpdated","_updateMetasets","_destroyDatasetMeta","_removeUnreferencedMetasets","buildOrUpdateControllers","newControllers","ControllerClass","_resetElements","animsDisabled","_updateScales","_checkEventBindings","_updateHiddenIndices","_minPadding","_updateLayout","_updateDatasets","_eventHandler","_updateHoverStyles","existingEvents","newEvents","unbindEvents","_getUniformDataChanges","datasetCount","makeSet","changeSet","noArea","_idx","_updateDataset","layers","_drawDatasets","_drawDataset","useClip","getDatasetArea","getElementsAtEventForMode","setDatasetVisibility","_updateVisibility","_stop","toBase64Image","toDataURL","bindUserEvents","bindResponsiveEvents","_add","_remove","detached","updateHoverStyle","getActiveElements","setActiveElements","activeElements","lastActive","pluginId","replay","hoverOptions","deactivated","activated","inChartArea","eventFilter","_handleEvent","_getActiveElements","isClick","_isClickEvent","lastEvent","determineLastEvent","parseBorderRadius$1","angleDelta","borderRadius","halfThickness","innerLimit","computeOuterLimit","outerArcLimit","outerStart","outerEnd","innerStart","innerEnd","rThetaToXY","theta","pathArc","pixelMargin","innerR","spacingOffset","avNogSpacingRadius","angleOffset","outerStartAdjustedRadius","outerEndAdjustedRadius","outerStartAdjustedAngle","outerEndAdjustedAngle","innerStartAdjustedRadius","innerEndAdjustedRadius","innerStartAdjustedAngle","innerEndAdjustedAngle","outerMidAdjustedAngle","pCenter","p4","innerMidAdjustedAngle","p8","outerStartX","outerStartY","outerEndX","outerEndY","fullCircles","inner","lineJoin","angleMargin","clipArc","setStyle","lineCap","pathVars","paramsStart","paramsEnd","segmentStart","segmentEnd","outside","pathSegment","lineMethod","stepped","getLineMethod","fastPathSegment","prevX","lastY","avgX","countX","pointIndex","drawX","truncX","_getSegmentMethod","usePath2D","Path2D","strokePathWithCache","segmentMethod","strokePathDirect","LineElement","_points","_pointsUpdated","findStartAndEnd","solidSegments","_computeSegments","_interpolate","_getInterpolationMethod","interpolated","inRange$1","hitRadius","getBarBounds","half","skipOrLimit","boundingRects","maxW","maxH","parseBorderWidth","maxR","enableBorder","parseBorderRadius","outer","skipX","skipY","addNormalRectPath","inflateRect","refRect","ArcElement","chartX","chartY","rAdjust","betweenAngles","withinRadius","halfAngle","halfRadius","radiusOffset","drawArc","BarElement","addRectPath","mouseX","mouseY","inXRange","inYRange","PointElement","hoverRadius","BORDER_COLORS","BACKGROUND_COLORS","getBorderColor","getBackgroundColor","getColorizer","colorizeDoughnutDataset","colorizePolarAreaDataset","colorizeDefaultDataset","containsColorsDefinitions","plugin_colors","forceOverride","_args","chartOptions","colorizer","cleanDecimatedDataset","cleanDecimatedData","plugin_decimation","algorithm","beforeElementsUpdate","xAxis","getStartAndCountOfVisiblePointsSimplified","decimated","samples","bucketWidth","sampledIndex","endIndex","maxAreaPoint","maxArea","nextA","avgY","avgRangeStart","avgRangeEnd","avgRangeLength","rangeOffs","rangeTo","pointAx","pointAy","lttbDecimation","minIndex","maxIndex","xMin","intermediateIndex1","intermediateIndex2","minMaxDecimation","_getBounds","_findSegmentEnd","_getEdge","_createBoundaryLine","boundary","linePoints","_pointsFromSegments","_shouldApplyFill","_resolveTarget","propagate","visited","_decodeFill","fillOption","parseFillOption","firstCh","decodeTargetIndex","addPointsBelow","sourcePoint","linesBelow","postponed","findPoint","pointValue","firstValue","lastValue","simpleArc","getLineByIndex","sourcePoints","below","getLinesBelow","_buildStackLine","_getTargetValue","computeCircularBoundary","_getTargetPixel","computeLinearBoundary","computeBoundary","_drawfill","lineOpts","above","clipVertical","doFill","clipY","lineLoop","tpoints","targetSegments","tgt","subBounds","fillSources","fillSource","notShape","clipBounds","interpolatedLineTo","targetLoop","interpolatedPoint","afterDatasetsUpdate","$filler","beforeDraw","drawTime","beforeDatasetsDraw","beforeDatasetDraw","getBoxSize","labelOpts","boxHeight","boxWidth","usePointStyle","pointStyleWidth","itemHeight","Legend","_added","legendHitBoxes","_hoveredItem","doughnutMode","legendItems","columnSizes","lineWidths","buildLabels","labelFont","_computeTitleHeight","_fitRows","_fitCols","hitboxes","totalHeight","row","_itemHeight","heightLimit","totalWidth","currentColWidth","currentColHeight","col","legendItemText","calculateItemWidth","fontLineHeight","calculateLegendItemHeight","calculateItemHeight","calculateItemSize","adjustHitBoxes","rtlHelper","hitbox","_draw","defaultColor","halfFontSize","cursor","textDirection","lineDash","drawOptions","SQRT2","yBoxTop","xBoxLeft","drawLegendBox","_textX","titleFont","titlePadding","topPaddingPlusHalfFontSize","_getLegendItemAt","hitBox","lh","onLeave","isListened","hoveredItem","sameItem","plugin_legend","_element","afterEvent","ci","useBorderRadius","Title","_padding","textSize","_drawArgs","fontOpts","plugin_title","titleBlock","createTitle","WeakMap","plugin_subtitle","positioners","average","eventPosition","nearestElement","tp","pushOrConcat","toPush","splitNewlines","createTooltipItem","formattedValue","getTooltipSize","tooltip","footer","bodyFont","footerFont","titleLineCount","footerLineCount","bodyLineItemCount","combinedBodyLength","bodyItem","before","beforeBody","afterBody","titleSpacing","titleMarginBottom","displayColors","bodySpacing","footerMarginTop","footerSpacing","widthPadding","maxLineWidth","determineXAlign","yAlign","chartWidth","xAlign","caret","caretSize","caretPadding","doesNotFitWithAlign","determineAlignment","determineYAlign","getBackgroundPoint","alignment","paddingAndSize","alignX","alignY","getAlignedX","getBeforeAfterBodyLines","overrideCallbacks","defaultCallbacks","beforeTitle","tooltipItems","labelCount","afterTitle","beforeLabel","tooltipItem","labelColor","labelTextColor","bodyColor","labelPointStyle","afterLabel","beforeFooter","afterFooter","invokeCallbackWithFallback","Tooltip","_eventPosition","_size","_cachedAnimations","_tooltipItems","dataPoints","caretX","caretY","labelColors","labelPointStyles","labelTextColors","getTitle","getBeforeBody","getBody","bodyItems","scoped","getAfterBody","getFooter","_createItems","itemSort","positionAndSize","backgroundPoint","external","drawCaret","tooltipPoint","caretPosition","getCaretPosition","x3","y3","ptX","ptY","titleColor","_drawColorBox","colorX","rtlColorX","yOffSet","colorY","multiKeyBackground","outerX","innerX","strokeRect","drawBody","bodyAlign","bodyLineHeight","xLinePadding","fillLineOfText","bodyAlignForCalculation","textColor","drawFooter","footerAlign","footerColor","tooltipSize","quadraticCurveTo","_updateAnimationTarget","animX","animY","_willRender","hasTooltipContent","globalAlpha","positionChanged","_positionChanged","_ignoreReplayEvents","plugin_tooltip","afterInit","afterDraw","Colors","Decimation","Filler","SubTitle","findOrAddLabel","addedLabels","addIfString","_getLabelForValue","generateTicks$1","generationOptions","dataRange","precision","maxTicks","maxDigits","includeBounds","maxSpaces","rmin","rmax","countDefined","minSpacing","niceMin","niceMax","numSpaces","rounded","almostWhole","decimalPlaces","relativeLabelSize","LinearScaleBase","_startValue","_endValue","_valueRange","handleTickRangeOptions","setMin","setMax","minSign","maxSign","getTickLimit","stepSize","computeTickLimit","LinearScale","log10Floor","changeExponent","isMajor","tickVal","steps","rangeExp","rangeStep","generateTicks","minExp","exp","startExp","lastTick","LogarithmicScale","_zero","getTickBackdropHeight","determineLimits","fitWithPointLabels","limits","valueCount","_pointLabels","pointLabelOpts","additionalAngle","centerPointLabels","getPointLabelContext","getPointPosition","drawingArea","plFont","updateLimits","setCenterPoint","_pointLabelItems","itemOpts","createPointLabelItem","isNotOverlapped","buildPointLabelItems","hLimits","vLimits","outerDistance","pointLabelPosition","yForAngle","getTextAlignForAngle","leftForTextAlign","drawPointLabelBox","backdropLeft","backdropTop","backdropWidth","backdropHeight","pathRadiusLine","RadialLinearScale","leftMovement","rightMovement","topMovement","bottomMovement","scalingFactor","getValueForDistanceFromCenter","scaledDistance","pointLabel","createPointLabelContext","distanceFromCenter","getBasePosition","getPointLabelPosition","drawPointLabels","gridLineOpts","drawRadiusLine","INTERVALS","UNITS","sorter","adapter","_adapter","_parseOpts","determineUnitForAutoTicks","minUnit","capacity","MAX_SAFE_INTEGER","addTick","timestamps","ticksFromTimestamps","majorUnit","setMajorTicks","TimeScale","displayFormats","_unit","_majorUnit","_offsets","_normalized","_applyBounds","_getLabelBounds","getLabelTimestamps","timeOpts","_generate","_filterBetween","_getLabelCapacity","determineUnitForFormatting","determineMajorUnit","initOffsets","offsetAfterAutoskip","getDecimalForValue","hasWeekday","getDataTimestamps","tooltipFormat","fmt","_tickFormatFunction","minorFormat","majorFormat","_getLabelSize","ticksOpts","tickLabelWidth","cosRotation","sinRotation","tickFontSize","exampleTime","exampleLabel","prevSource","nextSource","prevTarget","nextTarget","span","CategoryScale","_addedLabels","TimeSeriesScale","_table","_minPos","_tableRange","_getTimestampsForTable","buildLookupTable","registerables"],"sourceRoot":""}