{"version":3,"file":"default/js/chunk-time-handling.js","mappings":";4GAAaA,EAAOC,QAAU,EAAjB,OACNC,GAAGC,KAAK,EAAQ,6BCDvB,WAMC,SAAUC,EAAMC,GAChB,aAGkCL,EAAOC,QACxCD,EAAOC,QAAUI,EAAQ,EAAQ,QAEjC,EAAO,CAAC,cAAkB,0BAAP,EAAF,GAAS,+BAI5B,CAXA,CAWEC,GAAM,SAAUC,GACjB,kBAGuBC,IAAnBD,EAAOE,SAAyBF,EAAOG,UAC1CH,EAASA,EAAOG,SASjB,IAMCC,EALAC,EAAQ,CAAC,EACTC,EAAQ,CAAC,EACTC,EAAY,CAAC,EACbC,EAAQ,CAAC,EACTC,EAAU,CAAC,EAGPT,GAAoC,iBAAnBA,EAAOE,SAC5BQ,EAAS,gGAGV,IAAIC,EAAgBX,EAAOE,QAAQU,MAAM,KACxCC,GAASF,EAAc,GACvBG,GAASH,EAAc,GAWxB,SAASI,EAAcC,GACtB,OAAIA,EAAW,GACPA,EAAW,GACRA,EAAW,GACdA,EAAW,GAEZA,EAAW,EACnB,CAEA,SAASC,EAAaC,GACrB,IAAIC,EAAI,EACPC,EAAQF,EAAON,MAAM,KACrBS,EAAQD,EAAM,GACdE,EAAaF,EAAM,IAAM,GACzBG,EAAa,EAEbC,EAAM,EACNC,EAAO,EASR,IAN6B,KAAzBP,EAAOQ,WAAW,KACrBP,EAAI,EACJM,GAAQ,GAIDN,EAAIE,EAAMM,OAAQR,IAEzBK,EAAM,GAAKA,EADLT,EAAcM,EAAMK,WAAWP,IAKtC,IAAKA,EAAI,EAAGA,EAAIG,EAAWK,OAAQR,IAClCI,GAA0B,GAE1BC,GADMT,EAAcO,EAAWI,WAAWP,IAC7BI,EAGd,OAAOC,EAAMC,CACd,CAEA,SAASG,EAAYC,GACpB,IAAK,IAAIV,EAAI,EAAGA,EAAIU,EAAMF,OAAQR,IACjCU,EAAMV,GAAKF,EAAaY,EAAMV,GAEhC,CAUA,SAASW,EAAYC,EAAQC,GAC5B,IAAcb,EAAVK,EAAM,GAEV,IAAKL,EAAI,EAAGA,EAAIa,EAAQL,OAAQR,IAC/BK,EAAIL,GAAKY,EAAOC,EAAQb,IAGzB,OAAOK,CACR,CAEA,SAASS,EAAQf,GAChB,IAAIgB,EAAOhB,EAAON,MAAM,KACvBuB,EAAUD,EAAK,GAAGtB,MAAM,KACxBoB,EAAUE,EAAK,GAAGtB,MAAM,IACxBwB,EAAUF,EAAK,GAAGtB,MAAM,KAQzB,OANAgB,EAAWO,GACXP,EAAWI,GACXJ,EAAWQ,GA1BZ,SAAqBP,EAAOF,GAC3B,IAAK,IAAIR,EAAI,EAAGA,EAAIQ,EAAQR,IAC3BU,EAAMV,GAAKkB,KAAKC,OAAOT,EAAMV,EAAI,IAAM,GAAiB,IAAXU,EAAMV,IAGpDU,EAAMF,EAAS,GAAKY,GACrB,CAsBCC,CAAWJ,EAAQJ,EAAQL,QAEpB,CACNc,KAAaP,EAAK,GAClBQ,MAAaZ,EAAWI,EAAK,GAAGtB,MAAM,KAAMoB,GAC5CG,QAAaL,EAAWK,EAASH,GACjCI,OAAaA,EACbO,WAAuB,EAAVT,EAAK,GAEpB,CAMA,SAASU,EAAMC,GACVA,GACH9C,KAAK+C,KAAKb,EAAOY,GAEnB,CAiGA,SAASE,EAASC,EAAcC,GAC/BlD,KAAK0C,KAAOO,EACZjD,KAAKM,MAAQ4C,CACd,CAMA,SAASC,EAASC,GACjB,IAAIC,EAAaD,EAAGE,eAChBC,EAAOF,EAAWG,MAAM,gBAaf,SARZD,EAJGA,GAAQA,EAAK,IAGhBA,EAAOA,EAAK,GAAGC,MAAM,WACPD,EAAKE,KAAK,SAAMvD,GAI9BqD,EAAOF,EAAWG,MAAM,gBACVD,EAAK,QAAKrD,KAIxBqD,OAAOrD,GAGRF,KAAKoD,IAAMA,EACXpD,KAAKuD,KAAOA,EACZvD,KAAK0D,OAASN,EAAGO,mBAClB,CAEA,SAASC,EAAUC,GAClB7D,KAAK6D,KAAOA,EACZ7D,KAAK8D,YAAc,EACnB9D,KAAK+D,UAAY,CAClB,CASA,SAASC,EAAWC,EAAKC,GAGxB,IAFA,IAAIC,EAAKC,EAEDA,EAAyC,MAAhCF,EAAKd,GAAKa,EAAIb,IAAM,KAAO,KAC3Ce,EAAM,IAAIhB,EAAS,IAAIkB,KAAKJ,EAAIb,GAAKgB,KAC7BV,SAAWO,EAAIP,OACtBO,EAAME,EAEND,EAAOC,EAIT,OAAOF,CACR,CA8BA,SAASK,EAAgBC,EAAGC,GAC3B,OAAID,EAAET,cAAgBU,EAAEV,YAChBS,EAAET,YAAcU,EAAEV,YAEtBS,EAAER,YAAcS,EAAET,UACdQ,EAAER,UAAYS,EAAET,UAEpBQ,EAAEV,KAAKjB,aAAe4B,EAAEX,KAAKjB,WACzB4B,EAAEX,KAAKjB,WAAa2B,EAAEV,KAAKjB,WAE5B4B,EAAEX,KAAKnB,KAAK+B,cAAcF,EAAEV,KAAKnB,KACzC,CAEA,SAASgC,EAAchC,EAAMN,GAC5B,IAAIhB,EAAGsC,EAEP,IADA7B,EAAWO,GACNhB,EAAI,EAAGA,EAAIgB,EAAQR,OAAQR,IAC/BsC,EAAStB,EAAQhB,GACjBV,EAAQgD,GAAUhD,EAAQgD,IAAW,CAAC,EACtChD,EAAQgD,GAAQhB,IAAQ,CAE1B,CAEA,SAASiC,EAAuBvC,GAC/B,IAIChB,EAAGwD,EAAGlB,EAAQmB,EAJXC,EAAgB1C,EAAQR,OAC3BmD,EAAkB,CAAC,EACnBtD,EAAM,GACNuD,EAAiB,CAAC,EAGnB,IAAK5D,EAAI,EAAGA,EAAI0D,EAAe1D,IAE9B,GADAsC,EAAStB,EAAQhB,GAAGsC,QAChBsB,EAAeC,eAAevB,GAAlC,CAIA,IAAKkB,KADLC,EAAgBnE,EAAQgD,IAAW,CAAC,EAE/BmB,EAAcI,eAAeL,KAChCG,EAAgBH,IAAK,GAGvBI,EAAetB,IAAU,CAPzB,CAUD,IAAKtC,KAAK2D,EACLA,EAAgBE,eAAe7D,IAClCK,EAAIyD,KAAKzE,EAAMW,IAIjB,OAAOK,CACR,CAEA,SAAS0D,IAGR,IACC,IAAIC,EAAWC,KAAKC,iBAAiBC,kBAAkBC,SACvD,GAAIJ,GAAYA,EAASxD,OAAS,EAAG,CACpC,IAAIc,EAAOjC,EAAMgF,EAAcL,IAC/B,GAAI1C,EACH,OAAOA,EAER/B,EAAS,yBAA2ByE,EAAW,yDAChD,CACD,CAAE,MAAOM,GAET,CAEA,IAICC,EAAWvE,EAAGwD,EAJXxC,EAjGL,WACC,IAICwD,EAAQC,EAAMC,EAAY1E,EAJvB2E,GAAY,IAAI1B,MAAO2B,cAAgB,EAC1CC,EAAO,IAAI9C,EAAS,IAAIkB,KAAK0B,EAAW,EAAG,IAC3CG,EAAaD,EAAKvC,OAClBtB,EAAU,CAAC6D,GAGZ,IAAK7E,EAAI,EAAGA,EAAI,GAAIA,KACnB0E,EAAa,IAAIzB,KAAK0B,EAAW3E,EAAG,GAAGuC,uBACpBuC,IAGlBN,EAAS5B,EAAWiC,EADpBJ,EAAO,IAAI1C,EAAS,IAAIkB,KAAK0B,EAAW3E,EAAG,KAE3CgB,EAAQ8C,KAAKU,GACbxD,EAAQ8C,KAAK,IAAI/B,EAAS,IAAIkB,KAAKuB,EAAOxC,GAAK,OAC/C6C,EAAOJ,EACPK,EAAaJ,GAIf,IAAK1E,EAAI,EAAGA,EAAI,EAAGA,IAClBgB,EAAQ8C,KAAK,IAAI/B,EAAS,IAAIkB,KAAK0B,EAAY3E,EAAG,EAAG,KACrDgB,EAAQ8C,KAAK,IAAI/B,EAAS,IAAIkB,KAAK0B,EAAY3E,EAAG,EAAG,KAGtD,OAAOgB,CACR,CAuEe+D,GACbrB,EAAgB1C,EAAQR,OACxBlB,EAAUiE,EAAsBvC,GAChCgE,EAAa,GAGd,IAAKhF,EAAI,EAAGA,EAAIV,EAAQkB,OAAQR,IAAK,CAEpC,IADAuE,EAAY,IAAI/B,EAAUyC,EAAQ3F,EAAQU,IAAK0D,GAC1CF,EAAI,EAAGA,EAAIE,EAAeF,IAC9Be,EAAUW,cAAclE,EAAQwC,IAEjCwB,EAAWlB,KAAKS,EACjB,CAIA,OAFAS,EAAWG,KAAKjC,GAET8B,EAAWxE,OAAS,EAAIwE,EAAW,GAAGvC,KAAKnB,UAAOxC,CAC1D,CAaA,SAASuF,EAAe/C,GACvB,OAAQA,GAAQ,IAAI8D,cAAcC,QAAQ,MAAO,IAClD,CAEA,SAASC,EAASC,GACjB,IAAIvF,EAAGsB,EAAM7B,EAAO+F,EAMpB,IAJsB,iBAAXD,IACVA,EAAS,CAACA,IAGNvF,EAAI,EAAGA,EAAIuF,EAAO/E,OAAQR,IAG9BwF,EAAanB,EADb/C,GADA7B,EAAQ8F,EAAOvF,GAAGP,MAAM,MACX,IAEbP,EAAMsG,GAAcD,EAAOvF,GAC3BX,EAAMmG,GAAclE,EACpBgC,EAAakC,EAAY/F,EAAM,GAAGA,MAAM,KAE1C,CAEA,SAASwF,EAAS3D,EAAMmE,GAEvBnE,EAAO+C,EAAc/C,GAErB,IACIoE,EADAjD,EAAOvD,EAAMoC,GAGjB,OAAImB,aAAgBhB,EACZgB,EAGY,iBAATA,GACVA,EAAO,IAAIhB,EAAKgB,GAChBvD,EAAMoC,GAAQmB,EACPA,GAIJtD,EAAMmC,IAASmE,IAAWR,IAAYS,EAAOT,EAAQ9F,EAAMmC,GAAO2D,MACrExC,EAAOvD,EAAMoC,GAAQ,IAAIG,GACpBE,KAAK+D,GACVjD,EAAKnB,KAAOjC,EAAMiC,GACXmB,GAGD,IACR,CAkBA,SAASkD,EAASC,GACjB,IAAI5F,EAAG6F,EAAOC,EAASC,EAMvB,IAJuB,iBAAZH,IACVA,EAAU,CAACA,IAGP5F,EAAI,EAAGA,EAAI4F,EAAQpF,OAAQR,IAG/B8F,EAAUzB,GAFVwB,EAAQD,EAAQ5F,GAAGP,MAAM,MAEK,IAC9BsG,EAAU1B,EAAcwB,EAAM,IAE9B1G,EAAM2G,GAAWC,EACjB1G,EAAMyG,GAAWD,EAAM,GAEvB1G,EAAM4G,GAAWD,EACjBzG,EAAM0G,GAAWF,EAAM,EAEzB,CAwDA,SAASG,EAAaC,GACrB,IAAIC,EAA4B,MAATD,EAAEE,IAAuB,MAATF,EAAEE,GACzC,SAAUF,EAAEG,SAAkBtH,IAAXmH,EAAEI,MAAwBH,EAC9C,CAEA,SAAS3G,EAAU+G,GACK,oBAAZC,SAAoD,mBAAlBA,QAAQC,OACpDD,QAAQC,MAAMF,EAEhB,CAMA,SAAS9H,EAAIiI,GACZ,IAGChE,EAHGiE,EAAOC,MAAMC,UAAUC,MAAMC,KAAKC,UAAW,GAAI,GACpDzF,EAAOyF,UAAUA,UAAUvG,OAAS,GACpCH,EAAOxB,EAAOmI,IAAIC,MAAM,KAAMP,GAS/B,OANK7H,EAAOqI,SAAST,IAAUT,EAAY3F,KAASoC,EAAOwC,EAAQ3D,KAClEjB,EAAI8G,IAAI1E,EAAK2E,MAAM/G,GAAM,WAG1BA,EAAI7B,GAAG8C,GAEAjB,CACR,EA3iBIX,EAAQ,GAAgB,IAAVA,GAAeC,EAAQ,IACxCJ,EAAS,wEAA0EV,EAAOE,QAAU,sBA+HrG0C,EAAKmF,UAAY,CAChBjF,KAAO,SAAU0F,GAChBzI,KAAK0C,KAAa+F,EAAS/F,KAC3B1C,KAAK2C,MAAa8F,EAAS9F,MAC3B3C,KAAKqC,OAAaoG,EAASpG,OAC3BrC,KAAKoC,QAAaqG,EAASrG,QAC3BpC,KAAK4C,WAAa6F,EAAS7F,UAC5B,EAEA8F,OAAS,SAAUC,GAClB,IAECvH,EAGD,IADAA,EAtCF,SAAkBwH,EAAKC,GACtB,IASI1E,EATA2E,EAAMD,EAAIjH,OACd,GAAIgH,EAAMC,EAAI,GACb,OAAO,EACD,GAAIC,EAAM,GAAKD,EAAIC,EAAM,KAAOtG,KAAYoG,GAAOC,EAAIC,EAAM,GACnE,OAAOA,EAAM,EACP,GAAIF,GAAOC,EAAIC,EAAM,GAC3B,OAAQ,EAMT,IAFA,IAAIC,EAAK,EACLC,EAAKF,EAAM,EACRE,EAAKD,EAAK,GAEZF,EADJ1E,EAAM7B,KAAK2G,OAAOF,EAAKC,GAAM,KACbJ,EACfG,EAAK5E,EAEL6E,EAAK7E,EAGP,OAAO6E,CACR,CAgBME,EAJUP,EACJ3I,KAAKqC,UAIN,EACR,OAAOjB,CAET,EAEAZ,UAAY,WACX,IAAI2I,EAAYnJ,KAAK0C,KACrB,OAAO0G,OAAOC,KAAK7I,GAAW8I,QAAO,SAAUC,GAC9C,OAA6D,IAAtD/I,EAAU+I,GAAcjJ,MAAMkJ,QAAQL,EAC9C,GACD,EAEAX,MAAQ,SAAUG,GACjB,IAICjF,EAAQ+F,EAAYC,EAAYtI,EAJ7BuI,GAAWhB,EACdvG,EAAUpC,KAAKoC,QACfC,EAAUrC,KAAKqC,OACfuH,EAAUvH,EAAOT,OAAS,EAG3B,IAAKR,EAAI,EAAGA,EAAIwI,EAAKxI,IAWpB,GAVAsC,EAAatB,EAAQhB,GACrBqI,EAAarH,EAAQhB,EAAI,GACzBsI,EAAatH,EAAQhB,EAAIA,EAAI,EAAIA,GAE7BsC,EAAS+F,GAAc7J,EAAGiK,qBAC7BnG,EAAS+F,EACC/F,EAASgG,GAAc9J,EAAGkK,qBACpCpG,EAASgG,GAGNC,EAAStH,EAAOjB,GAAe,IAATsC,EACzB,OAAOtB,EAAQhB,GAIjB,OAAOgB,EAAQwH,EAChB,EAEArG,KAAO,SAAUwG,GAChB,OAAO/J,KAAK2C,MAAM3C,KAAK0I,OAAOqB,GAC/B,EAEArG,OAAS,SAAUqG,GAElB,OADApJ,EAAS,8DACFX,KAAKoC,QAAQpC,KAAK0I,OAAOqB,GACjC,EAEAC,UAAY,SAAUD,GACrB,OAAO/J,KAAKoC,QAAQpC,KAAK0I,OAAOqB,GACjC,GA8CDnG,EAAUoE,UAAU1B,cAAgB,SAAU2D,GAC7CjK,KAAK8D,aAAexB,KAAK4H,IAAIlK,KAAK6D,KAAKmG,UAAUC,EAAS7G,IAAM6G,EAASvG,QACrE1D,KAAK6D,KAAKN,KAAK0G,EAAS7G,IAAIqD,QAAQ,UAAW,MAAQwD,EAAS1G,MACnEvD,KAAK+D,WAEP,EA0TAnE,EAAGO,QA9jBW,SA+jBdP,EAAGuK,YAAe,GAClBvK,EAAGwK,OAAe9J,EAClBV,EAAGyK,OAAe9J,EAClBX,EAAG0K,OAAe7J,EAClBb,EAAG2K,WAAa/J,EAChBZ,EAAG2I,IAAe7B,EAClB9G,EAAGkH,KAAeC,EAClBnH,EAAGC,KArDH,SAAmBsC,GAClBuE,EAAQvE,EAAK7B,OACbyG,EAAQ5E,EAAK5B,OAzCd,SAAuB4B,GACtB,IAAIf,EAAGmI,EAAciB,EAAe3J,EACpC,GAAKsB,GAASA,EAAKP,OACnB,IAAKR,EAAI,EAAGA,EAAIe,EAAKP,OAAQR,IAE5BmI,GADA1I,EAAQsB,EAAKf,GAAGP,MAAM,MACD,GAAG4J,cACxBD,EAAgB3J,EAAM,GAAGA,MAAM,KAC/BL,EAAU+I,GAAgB,IAAIvG,EAC7BuG,EACAiB,EAGH,CA8BCE,CAAavI,EAAK3B,WAClBZ,EAAGuK,YAAchI,EAAKhC,OACvB,EAiDAP,EAAGiE,KAAewC,EAClBzG,EAAG+K,WAhDH,SAASA,EAAYjI,GAKpB,OAJKiI,EAAWC,eACfD,EAAWC,cAAe,EACzBjK,EAAS,yBAA2B+B,EAAO,uDAAyDA,EAAO,SAEpG2D,EAAQ3D,EAClB,EA2CA9C,EAAGiL,MAhMH,SAAgBC,GAIf,OAHKzK,IAAeyK,IACnBzK,EAAc8E,KAER9E,CACR,EA4LAT,EAAGa,MArIH,WACC,IAAIW,EAAGK,EAAM,GAEb,IAAKL,KAAKX,EACLA,EAAMwE,eAAe7D,KAAOd,EAAMc,IAAMd,EAAMC,EAAMa,MAAQX,EAAMW,IACrEK,EAAIyD,KAAKzE,EAAMW,IAIjB,OAAOK,EAAI8E,MACZ,EA4HA3G,EAAGiD,KAAeA,EAClBjD,EAAGsC,OAAeA,EAClBtC,EAAGsB,aAAeA,EAClBtB,EAAGwH,YAAeA,EAClBxH,EAAGkK,oBAAuB,EAC1BlK,EAAGiK,sBAAuB,EAC1BjK,EAAGY,UAhIH,WACC,OAAO4I,OAAOC,KAAK7I,EACpB,EA+HAZ,EAAGmL,gBArFH,SAAyBC,EAASC,GALlC,IAAqBvI,EAQpB,GAPAA,GADoBA,EAMCsI,GALTP,gBAKZO,EAJOxK,EAAUkC,IAAS,MAMZ,OAAO,KAErB,IAAIpC,EAAQ0K,EAAQ1K,MAAMiG,OAE1B,OAAI0E,EACI3K,EAAM4K,KAAI,SAAU/B,GAE1B,MAAO,CACNzG,KAAMyG,EACNzF,OAHU2C,EAAQ8C,GAGLa,UAAU,IAAI3F,MAE7B,IAGM/D,CACR,EAyEA,IA8DyB6K,EA9DrBC,EAAKnL,EAAOmL,GAgDhB,SAASC,EAAUF,GAClB,OAAO,WACN,OAAInL,KAAKsL,GAAatL,KAAKsL,GAAG/H,KAAKvD,MAC5BmL,EAAIjD,KAAKlI,KACjB,CACD,CAEA,SAASuL,EAAeJ,GACvB,OAAO,WAEN,OADAnL,KAAKsL,GAAK,KACHH,EAAI9C,MAAMrI,KAAMmI,UACxB,CACD,CA1DAlI,EAAOL,GAAKA,EAEZK,EAAOuL,YAAc,KAErBvL,EAAOwL,aAAe,SAAU1B,EAAK2B,GACpC,IACChI,EADGG,EAAO5D,EAAOuL,YAUlB,QAPetL,IAAX6J,EAAIuB,KACHzH,GAAQuD,EAAY2C,KAASA,EAAI4B,QAAU5B,EAAI6B,YAClD7B,EAAI8B,GAAK5L,EAAOmI,IAAI2B,EAAIvC,IAAIqE,GAC5B9B,EAAI3B,MAAMG,IAAI1E,EAAK2E,MAAMuB,GAAM,YAEhCA,EAAIuB,GAAKzH,GAENkG,EAAIuB,GAKP,GAJA5H,EAASqG,EAAIuB,GAAGtB,UAAUD,GACtBzH,KAAK4H,IAAIxG,GAAU,KACtBA,GAAkB,SAEGxD,IAAlB6J,EAAIC,UAAyB,CAChC,IAAI8B,EAAI/B,EAAIuB,GACZvB,EAAIC,WAAWtG,EAAQgI,GACvB3B,EAAIuB,GAAKQ,CACV,MACC/B,EAAIlG,KAAKH,EAAQgI,EAGpB,EAEAN,EAAGxL,GAAK,SAAU8C,EAAMgJ,GACvB,GAAIhJ,EAAM,CACT,GAAoB,iBAATA,EACV,MAAM,IAAIqJ,MAAM,wCAA0CrJ,EAAO,YAAcA,EAAO,KAQvF,OANA1C,KAAKsL,GAAKjF,EAAQ3D,GACd1C,KAAKsL,GACRrL,EAAOwL,aAAazL,KAAM0L,GAE1B/K,EAAS,mCAAqC+B,EAAO,4DAE/C1C,IACR,CACA,GAAIA,KAAKsL,GAAM,OAAOtL,KAAKsL,GAAG5I,IAC/B,EAuBA0I,EAAGY,SAAYX,EAASD,EAAGY,UAC3BZ,EAAGa,SAAYZ,EAASD,EAAGa,UAC3Bb,EAAGhD,IAAYmD,EAAcH,EAAGhD,KAChCgD,EAAGc,MAAYX,EAAcH,EAAGc,OAChCd,EAAGpB,WAXsBmB,EAWKC,EAAGpB,UAVzB,WAEN,OADI7B,UAAUvG,OAAS,IAAG5B,KAAKsL,GAAK,MAC7BH,EAAI9C,MAAMrI,KAAMmI,UACxB,GASDlI,EAAOL,GAAGuM,WAAa,SAASzJ,GAK/B,OAJI5B,EAAQ,GAAgB,IAAVA,GAAeC,EAAQ,IACxCJ,EAAS,qFAAuFV,EAAOE,QAAU,KAElHF,EAAOuL,YAAc9I,EAAO2D,EAAQ3D,GAAQ,KACrCzC,CACR,EAGA,IAAImM,EAAmBnM,EAAOmM,iBAY9B,MAXyD,mBAArDhD,OAAOpB,UAAUqE,SAASnE,KAAKkE,IAElCA,EAAiBlH,KAAK,MACtBkH,EAAiBlH,KAAK,OACZkH,IAEVA,EAAiBd,GAAK,MAKhBrL,CACR,2BC9sBQ,SAAWA,GAAU,aAIzB,IAAIqM,EACI,6DAA6DzL,MAAM,KACvE0L,EACI,kDAAkD1L,MAAM,KAC5D2L,EAAc,CACV,QACA,QACA,oBACA,QACA,SACA,cACA,cACA,QACA,QACA,QACA,QACA,SAEJC,EACI,qKAECxM,EAAOyM,aAAa,KAAM,CAC/BC,OAAQ,0FAA0F9L,MAC9F,KAEJ+L,YAAa,SAAUvF,EAAGwF,GACtB,OAAKxF,EAEM,QAAQyF,KAAKD,GACbN,EAAuBlF,EAAE0F,SAEzBT,EAAoBjF,EAAE0F,SAJtBT,CAMf,EAEAG,YAAaA,EACbO,iBAAkBP,EAClBQ,kBACI,4FACJC,uBACI,mFAEJV,YAAaA,EACbW,gBAAiBX,EACjBY,iBAAkBZ,EAElBa,SACI,6DAA6DxM,MAAM,KACvEyM,cAAe,8BAA8BzM,MAAM,KACnD0M,YAAa,uBAAuB1M,MAAM,KAC1C2M,oBAAoB,EACpBC,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,0BAEVC,SAAU,CACNC,QAAS,kBACTC,QAAS,iBACTC,SAAU,eACVC,QAAS,mBACTC,SAAU,2BACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,UACRC,KAAM,aACNC,EAAG,oBACHC,GAAI,cACJtH,EAAG,aACHuH,GAAI,aACJC,EAAG,UACHC,GAAI,SACJC,EAAG,UACHC,GAAI,WACJC,EAAG,WACHC,GAAI,WACJC,EAAG,YACHC,GAAI,aACJC,EAAG,WACHC,GAAI,WAERC,uBAAwB,kBACxBC,QAAS,SAAUC,GACf,OACIA,GACY,IAAXA,GAA2B,IAAXA,GAAgBA,GAAU,GAAK,MAAQ,KAEhE,EACAC,KAAM,CACFC,IAAK,EACLC,IAAK,IAMhB,CA3GyC7P,CAAQ,EAAQ,0CCAgBJ,QAGlE,WAAe,aAEnB,IAAIkQ,EA6HAC,EA3HJ,SAASC,IACL,OAAOF,EAAaxH,MAAM,KAAMF,UACpC,CAIA,SAAS6H,EAAgBC,GACrBJ,EAAeI,CACnB,CAEA,SAASC,EAAQrI,GACb,OACIA,aAAiBE,OACyB,mBAA1CqB,OAAOpB,UAAUqE,SAASnE,KAAKL,EAEvC,CAEA,SAASsI,EAAStI,GAGd,OACa,MAATA,GAC0C,oBAA1CuB,OAAOpB,UAAUqE,SAASnE,KAAKL,EAEvC,CAEA,SAASuI,EAAW7L,EAAGC,GACnB,OAAO4E,OAAOpB,UAAU/C,eAAeiD,KAAK3D,EAAGC,EACnD,CAEA,SAAS6L,EAAcC,GACnB,GAAIlH,OAAOmH,oBACP,OAAkD,IAA3CnH,OAAOmH,oBAAoBD,GAAK1O,OAEvC,IAAI4O,EACJ,IAAKA,KAAKF,EACN,GAAIF,EAAWE,EAAKE,GAChB,OAAO,EAGf,OAAO,CAEf,CAEA,SAASC,EAAY5I,GACjB,YAAiB,IAAVA,CACX,CAEA,SAAS6I,EAAS7I,GACd,MACqB,iBAAVA,GACmC,oBAA1CuB,OAAOpB,UAAUqE,SAASnE,KAAKL,EAEvC,CAEA,SAAS8I,EAAO9I,GACZ,OACIA,aAAiBxD,MACyB,kBAA1C+E,OAAOpB,UAAUqE,SAASnE,KAAKL,EAEvC,CAEA,SAASqD,EAAIrC,EAAKuC,GACd,IACIhK,EADAwP,EAAM,GAENC,EAAShI,EAAIjH,OACjB,IAAKR,EAAI,EAAGA,EAAIyP,IAAUzP,EACtBwP,EAAI1L,KAAKkG,EAAGvC,EAAIzH,GAAIA,IAExB,OAAOwP,CACX,CAEA,SAASE,EAAOvM,EAAGC,GACf,IAAK,IAAIpD,KAAKoD,EACN4L,EAAW5L,EAAGpD,KACdmD,EAAEnD,GAAKoD,EAAEpD,IAYjB,OARIgP,EAAW5L,EAAG,cACdD,EAAE8H,SAAW7H,EAAE6H,UAGf+D,EAAW5L,EAAG,aACdD,EAAEwM,QAAUvM,EAAEuM,SAGXxM,CACX,CAEA,SAASyM,EAAUnJ,EAAOgF,EAAQoE,EAAQC,GACtC,OAAOC,GAAiBtJ,EAAOgF,EAAQoE,EAAQC,GAAQ,GAAM9I,KACjE,CAEA,SAASgJ,IAEL,MAAO,CACHC,OAAO,EACPC,aAAc,GACdC,YAAa,GACbC,UAAW,EACXC,cAAe,EACfC,WAAW,EACXC,WAAY,KACZC,aAAc,KACdC,eAAe,EACfC,iBAAiB,EACjBC,KAAK,EACLC,gBAAiB,GACjBC,IAAK,KACLC,SAAU,KACVC,SAAS,EACTC,iBAAiB,EAEzB,CAEA,SAASC,EAAgBhL,GAIrB,OAHa,MAATA,EAAEiL,MACFjL,EAAEiL,IAAMlB,KAEL/J,EAAEiL,GACb,CAqBA,SAAS1G,EAAQvE,GACb,IAAIkL,EAAQ,KACRC,GAAc,EACdC,EAAapL,EAAEwE,KAAO6G,MAAMrL,EAAEwE,GAAG8G,WAyBrC,OAxBIF,IACAF,EAAQF,EAAgBhL,GACxBmL,EAAc1C,EAAK5H,KAAKqK,EAAMP,iBAAiB,SAAU5Q,GACrD,OAAY,MAALA,CACX,IACAqR,EACIF,EAAMf,SAAW,IAChBe,EAAMlB,QACNkB,EAAMZ,aACNY,EAAMX,eACNW,EAAMK,iBACNL,EAAMH,kBACNG,EAAMb,YACNa,EAAMV,gBACNU,EAAMT,mBACLS,EAAML,UAAaK,EAAML,UAAYM,GACvCnL,EAAEwL,UACFJ,EACIA,GACwB,IAAxBF,EAAMd,eACwB,IAA9Bc,EAAMjB,aAAa1P,aACD1B,IAAlBqS,EAAMO,UAGK,MAAnB1J,OAAO2J,UAAqB3J,OAAO2J,SAAS1L,GAGrCoL,GAFPpL,EAAE2L,SAAWP,EAIVpL,EAAE2L,SACb,CAEA,SAASC,EAAcV,GACnB,IAAIlL,EAAI2J,EAAUkC,KAOlB,OANa,MAATX,EACAzB,EAAOuB,EAAgBhL,GAAIkL,GAE3BF,EAAgBhL,GAAGyK,iBAAkB,EAGlCzK,CACX,CA9DIyI,EADA/H,MAAMC,UAAU8H,KACT/H,MAAMC,UAAU8H,KAEhB,SAAUqD,GACb,IAEI/R,EAFAgS,EAAIhK,OAAOpJ,MACX8I,EAAMsK,EAAExR,SAAW,EAGvB,IAAKR,EAAI,EAAGA,EAAI0H,EAAK1H,IACjB,GAAIA,KAAKgS,GAAKD,EAAIjL,KAAKlI,KAAMoT,EAAEhS,GAAIA,EAAGgS,GAClC,OAAO,EAIf,OAAO,CACX,EAoDJ,IAAIhH,EAAoB2D,EAAM3D,iBAAmB,GAC7CiH,GAAmB,EAEvB,SAASC,EAAWC,EAAIC,GACpB,IAAIpS,EACAqS,EACAC,EACAC,EAAsBvH,EAAiBxK,OAiC3C,GA/BK6O,EAAY+C,EAAKI,oBAClBL,EAAGK,iBAAmBJ,EAAKI,kBAE1BnD,EAAY+C,EAAKK,MAClBN,EAAGM,GAAKL,EAAKK,IAEZpD,EAAY+C,EAAKjM,MAClBgM,EAAGhM,GAAKiM,EAAKjM,IAEZkJ,EAAY+C,EAAKM,MAClBP,EAAGO,GAAKN,EAAKM,IAEZrD,EAAY+C,EAAKX,WAClBU,EAAGV,QAAUW,EAAKX,SAEjBpC,EAAY+C,EAAK/L,QAClB8L,EAAG9L,KAAO+L,EAAK/L,MAEdgJ,EAAY+C,EAAK7H,UAClB4H,EAAG5H,OAAS6H,EAAK7H,QAEhB8E,EAAY+C,EAAKO,WAClBR,EAAGQ,QAAUP,EAAKO,SAEjBtD,EAAY+C,EAAKlB,OAClBiB,EAAGjB,IAAMD,EAAgBmB,IAExB/C,EAAY+C,EAAKQ,WAClBT,EAAGS,QAAUR,EAAKQ,SAGlBL,EAAsB,EACtB,IAAKvS,EAAI,EAAGA,EAAIuS,EAAqBvS,IAG5BqP,EADLiD,EAAMF,EADNC,EAAOrH,EAAiBhL,OAGpBmS,EAAGE,GAAQC,GAKvB,OAAOH,CACX,CAGA,SAASU,EAAOC,GACZZ,EAAWtT,KAAMkU,GACjBlU,KAAK6L,GAAK,IAAIxH,KAAkB,MAAb6P,EAAOrI,GAAaqI,EAAOrI,GAAG8G,UAAYO,KACxDlT,KAAK4L,YACN5L,KAAK6L,GAAK,IAAIxH,KAAK6O,OAIE,IAArBG,IACAA,GAAmB,EACnBtD,EAAMtE,aAAazL,MACnBqT,GAAmB,EAE3B,CAEA,SAAS/K,EAASgI,GACd,OACIA,aAAe2D,GAAkB,MAAP3D,GAAuC,MAAxBA,EAAIsD,gBAErD,CAEA,SAASO,EAAKC,IAEgC,IAAtCrE,EAAMsE,6BACa,oBAAZ1M,SACPA,QAAQwM,MAERxM,QAAQwM,KAAK,wBAA0BC,EAE/C,CAEA,SAASE,EAAUF,EAAKhJ,GACpB,IAAImJ,GAAY,EAEhB,OAAOzD,GAAO,WAIV,GAHgC,MAA5Bf,EAAMyE,oBACNzE,EAAMyE,mBAAmB,KAAMJ,GAE/BG,EAAW,CACX,IACIE,EACArT,EACAsT,EAHA5M,EAAO,GAIP6M,EAASxM,UAAUvG,OACvB,IAAKR,EAAI,EAAGA,EAAIuT,EAAQvT,IAAK,CAEzB,GADAqT,EAAM,GACsB,iBAAjBtM,UAAU/G,GAAiB,CAElC,IAAKsT,KADLD,GAAO,MAAQrT,EAAI,KACP+G,UAAU,GACdiI,EAAWjI,UAAU,GAAIuM,KACzBD,GAAOC,EAAM,KAAOvM,UAAU,GAAGuM,GAAO,MAGhDD,EAAMA,EAAIxM,MAAM,GAAI,EACxB,MACIwM,EAAMtM,UAAU/G,GAEpB0G,EAAK5C,KAAKuP,EACd,CACAN,EACIC,EACI,gBACArM,MAAMC,UAAUC,MAAMC,KAAKJ,GAAMrE,KAAK,IACtC,MACA,IAAIsI,OAAQ6I,OAEpBL,GAAY,CAChB,CACA,OAAOnJ,EAAG/C,MAAMrI,KAAMmI,UAC1B,GAAGiD,EACP,CAEA,IAgFI/B,EAhFAwL,EAAe,CAAC,EAEpB,SAASC,EAAgBpS,EAAM0R,GACK,MAA5BrE,EAAMyE,oBACNzE,EAAMyE,mBAAmB9R,EAAM0R,GAE9BS,EAAanS,KACdyR,EAAKC,GACLS,EAAanS,IAAQ,EAE7B,CAKA,SAASqS,EAAWlN,GAChB,MACyB,oBAAbmN,UAA4BnN,aAAiBmN,UACX,sBAA1C5L,OAAOpB,UAAUqE,SAASnE,KAAKL,EAEvC,CAEA,SAASoN,EAAIf,GACT,IAAIT,EAAMrS,EACV,IAAKA,KAAK8S,EACF9D,EAAW8D,EAAQ9S,KAEf2T,EADJtB,EAAOS,EAAO9S,IAEVpB,KAAKoB,GAAKqS,EAEVzT,KAAK,IAAMoB,GAAKqS,GAI5BzT,KAAKkV,QAAUhB,EAIflU,KAAKmV,+BAAiC,IAAIC,QACrCpV,KAAKqV,wBAAwBrT,QAAUhC,KAAKsV,cAActT,QACvD,IACA,UAAUA,OAEtB,CAEA,SAASuT,EAAaC,EAAcC,GAChC,IACIhC,EADA7C,EAAME,EAAO,CAAC,EAAG0E,GAErB,IAAK/B,KAAQgC,EACLrF,EAAWqF,EAAahC,KACpBtD,EAASqF,EAAa/B,KAAUtD,EAASsF,EAAYhC,KACrD7C,EAAI6C,GAAQ,CAAC,EACb3C,EAAOF,EAAI6C,GAAO+B,EAAa/B,IAC/B3C,EAAOF,EAAI6C,GAAOgC,EAAYhC,KACF,MAArBgC,EAAYhC,GACnB7C,EAAI6C,GAAQgC,EAAYhC,UAEjB7C,EAAI6C,IAIvB,IAAKA,KAAQ+B,EAELpF,EAAWoF,EAAc/B,KACxBrD,EAAWqF,EAAahC,IACzBtD,EAASqF,EAAa/B,MAGtB7C,EAAI6C,GAAQ3C,EAAO,CAAC,EAAGF,EAAI6C,KAGnC,OAAO7C,CACX,CAEA,SAAS8E,EAAOxB,GACE,MAAVA,GACAlU,KAAKiV,IAAIf,EAEjB,CAlEAnE,EAAMsE,6BAA8B,EACpCtE,EAAMyE,mBAAqB,KAsEvBnL,EADAD,OAAOC,KACAD,OAAOC,KAEP,SAAUiH,GACb,IAAIlP,EACAwP,EAAM,GACV,IAAKxP,KAAKkP,EACFF,EAAWE,EAAKlP,IAChBwP,EAAI1L,KAAK9D,GAGjB,OAAOwP,CACX,EAGJ,IAAI+E,EAAkB,CAClB1H,QAAS,gBACTC,QAAS,mBACTC,SAAU,eACVC,QAAS,oBACTC,SAAU,sBACVC,SAAU,KAGd,SAASN,EAAS0G,EAAK3K,EAAK6L,GACxB,IAAIC,EAAS7V,KAAK8V,UAAUpB,IAAQ1U,KAAK8V,UAAoB,SAC7D,OAAOf,EAAWc,GAAUA,EAAO3N,KAAK6B,EAAK6L,GAAOC,CACxD,CAEA,SAASE,EAAStG,EAAQuG,EAAcC,GACpC,IAAIC,EAAY,GAAK5T,KAAK4H,IAAIuF,GAC1B0G,EAAcH,EAAeE,EAAUtU,OAE3C,OADW6N,GAAU,EAERwG,EAAY,IAAM,GAAM,KACjC3T,KAAK8T,IAAI,GAAI9T,KAAKsH,IAAI,EAAGuM,IAAc9J,WAAWgK,OAAO,GACzDH,CAER,CAEA,IAAII,EACI,yMACJC,EAAwB,6CACxBC,EAAkB,CAAC,EACnBC,EAAuB,CAAC,EAM5B,SAASC,EAAeC,EAAOC,EAAQpH,EAASS,GAC5C,IAAI4G,EAAO5G,EACa,iBAAbA,IACP4G,EAAO,WACH,OAAO7W,KAAKiQ,IAChB,GAEA0G,IACAF,EAAqBE,GAASE,GAE9BD,IACAH,EAAqBG,EAAO,IAAM,WAC9B,OAAOb,EAASc,EAAKxO,MAAMrI,KAAMmI,WAAYyO,EAAO,GAAIA,EAAO,GACnE,GAEApH,IACAiH,EAAqBjH,GAAW,WAC5B,OAAOxP,KAAK8W,aAAatH,QACrBqH,EAAKxO,MAAMrI,KAAMmI,WACjBwO,EAER,EAER,CAEA,SAASI,EAAuBlP,GAC5B,OAAIA,EAAMrE,MAAM,YACLqE,EAAMpB,QAAQ,WAAY,IAE9BoB,EAAMpB,QAAQ,MAAO,GAChC,CAEA,SAASuQ,EAAmBnK,GACxB,IACIzL,EACAQ,EAFAE,EAAQ+K,EAAOrJ,MAAM8S,GAIzB,IAAKlV,EAAI,EAAGQ,EAASE,EAAMF,OAAQR,EAAIQ,EAAQR,IACvCqV,EAAqB3U,EAAMV,IAC3BU,EAAMV,GAAKqV,EAAqB3U,EAAMV,IAEtCU,EAAMV,GAAK2V,EAAuBjV,EAAMV,IAIhD,OAAO,SAAU2I,GACb,IACI3I,EADAyU,EAAS,GAEb,IAAKzU,EAAI,EAAGA,EAAIQ,EAAQR,IACpByU,GAAUd,EAAWjT,EAAMV,IACrBU,EAAMV,GAAG8G,KAAK6B,EAAK8C,GACnB/K,EAAMV,GAEhB,OAAOyU,CACX,CACJ,CAGA,SAASoB,EAAa5P,EAAGwF,GACrB,OAAKxF,EAAEuE,WAIPiB,EAASqK,EAAarK,EAAQxF,EAAEyP,cAChCN,EAAgB3J,GACZ2J,EAAgB3J,IAAWmK,EAAmBnK,GAE3C2J,EAAgB3J,GAAQxF,IAPpBA,EAAEyP,aAAaK,aAQ9B,CAEA,SAASD,EAAarK,EAAQoE,GAC1B,IAAI7P,EAAI,EAER,SAASgW,EAA4BvP,GACjC,OAAOoJ,EAAOxD,eAAe5F,IAAUA,CAC3C,CAGA,IADA0O,EAAsBc,UAAY,EAC3BjW,GAAK,GAAKmV,EAAsBzJ,KAAKD,IACxCA,EAASA,EAAOpG,QACZ8P,EACAa,GAEJb,EAAsBc,UAAY,EAClCjW,GAAK,EAGT,OAAOyL,CACX,CAEA,IAAIyK,EAAwB,CACxB3J,IAAK,YACLD,GAAI,SACJE,EAAG,aACHC,GAAI,eACJC,IAAK,sBACLC,KAAM,6BAGV,SAASN,EAAeiH,GACpB,IAAI7H,EAAS7M,KAAKuX,gBAAgB7C,GAC9B8C,EAAcxX,KAAKuX,gBAAgB7C,EAAIjK,eAE3C,OAAIoC,IAAW2K,EACJ3K,GAGX7M,KAAKuX,gBAAgB7C,GAAO8C,EACvBhU,MAAM8S,GACNpL,KAAI,SAAUuM,GACX,MACY,SAARA,GACQ,OAARA,GACQ,OAARA,GACQ,SAARA,EAEOA,EAAIxP,MAAM,GAEdwP,CACX,IACChU,KAAK,IAEHzD,KAAKuX,gBAAgB7C,GAChC,CAEA,IAAIgD,EAAqB,eAEzB,SAASP,IACL,OAAOnX,KAAK2X,YAChB,CAEA,IAAIC,EAAiB,KACjBC,EAAgC,UAEpC,SAASrI,EAAQC,GACb,OAAOzP,KAAK8X,SAASrR,QAAQ,KAAMgJ,EACvC,CAEA,IAAIsI,EAAsB,CACtBvJ,OAAQ,QACRC,KAAM,SACNC,EAAG,gBACHC,GAAI,aACJtH,EAAG,WACHuH,GAAI,aACJC,EAAG,UACHC,GAAI,WACJC,EAAG,QACHC,GAAI,UACJC,EAAG,SACHC,GAAI,WACJC,EAAG,UACHC,GAAI,YACJC,EAAG,SACHC,GAAI,YAGR,SAASf,GAAakB,EAAQuI,EAAe7W,EAAQ8W,GACjD,IAAIpC,EAAS7V,KAAKkY,cAAc/W,GAChC,OAAO4T,EAAWc,GACZA,EAAOpG,EAAQuI,EAAe7W,EAAQ8W,GACtCpC,EAAOpP,QAAQ,MAAOgJ,EAChC,CAEA,SAAS0I,GAAW/T,EAAMyR,GACtB,IAAIhJ,EAAS7M,KAAKkY,cAAc9T,EAAO,EAAI,SAAW,QACtD,OAAO2Q,EAAWlI,GAAUA,EAAOgJ,GAAUhJ,EAAOpG,QAAQ,MAAOoP,EACvE,CAEA,IAAI7O,GAAU,CACVoR,EAAG,OACHC,MAAO,OACPC,KAAM,OACNvJ,EAAG,MACHwJ,KAAM,MACNC,IAAK,MACL9S,EAAG,UACH2H,SAAU,UACVoL,QAAS,UACTC,EAAG,aACHC,YAAa,aACbC,WAAY,aACZC,IAAK,YACLC,WAAY,YACZC,UAAW,YACXlK,EAAG,OACHmK,MAAO,OACPC,KAAM,OACNC,GAAI,cACJC,aAAc,cACdC,YAAa,cACb/R,EAAG,SACHgS,QAAS,SACTC,OAAQ,SACRnK,EAAG,QACHxC,OAAQ,QACRI,MAAO,QACPwM,EAAG,UACHC,SAAU,UACVC,QAAS,UACT/K,EAAG,SACHgL,QAAS,SACTC,OAAQ,SACRC,GAAI,WACJC,UAAW,WACXC,SAAU,WACVC,GAAI,cACJC,aAAc,cACdC,YAAa,cACbhL,EAAG,OACHiL,MAAO,OACPxK,KAAM,OACNyK,EAAG,UACHC,SAAU,UACVC,QAAS,UACThL,EAAG,OACHiL,MAAO,OACPC,KAAM,QAGV,SAASC,GAAeC,GACpB,MAAwB,iBAAVA,EACRzT,GAAQyT,IAAUzT,GAAQyT,EAAMjU,oBAChCtG,CACV,CAEA,SAASwa,GAAqBC,GAC1B,IACIC,EACAnH,EAFAoH,EAAkB,CAAC,EAIvB,IAAKpH,KAAQkH,EACLvK,EAAWuK,EAAalH,KACxBmH,EAAiBJ,GAAe/G,MAE5BoH,EAAgBD,GAAkBD,EAAYlH,IAK1D,OAAOoH,CACX,CAEA,IAAIC,GAAa,CACbxC,KAAM,EACNE,IAAK,GACLC,QAAS,GACTsC,WAAY,GACZC,UAAW,EACX/B,KAAM,GACNG,YAAa,GACbE,OAAQ,GACRvM,MAAO,EACP0M,QAAS,EACTE,OAAQ,GACRsB,SAAU,EACVC,YAAa,EACbxL,KAAM,EACNyL,QAAS,EACTZ,KAAM,GAGV,SAASa,GAAoBC,GACzB,IACIC,EADAb,EAAQ,GAEZ,IAAKa,KAAKD,EACFjL,EAAWiL,EAAUC,IACrBb,EAAMvV,KAAK,CAAEqW,KAAMD,EAAGE,SAAUV,GAAWQ,KAMnD,OAHAb,EAAMlU,MAAK,SAAUhC,EAAGC,GACpB,OAAOD,EAAEiX,SAAWhX,EAAEgX,QAC1B,IACOf,CACX,CAEA,IAsBIgB,GAtBAC,GAAS,KACTC,GAAS,OACTC,GAAS,QACTC,GAAS,QACTC,GAAS,aACTC,GAAY,QACZC,GAAY,YACZC,GAAY,gBACZC,GAAY,UACZC,GAAY,UACZC,GAAY,eACZC,GAAgB,MAChBC,GAAc,WACdC,GAAc,qBACdC,GAAmB,0BACnBC,GAAiB,uBAGjBC,GACI,wJACJC,GAAyB,YACzBC,GAAmB,gBAKvB,SAASC,GAAclG,EAAOmG,EAAOC,GACjCtB,GAAQ9E,GAAS5B,EAAW+H,GACtBA,EACA,SAAUE,EAAUlG,GAChB,OAAOkG,GAAYD,EAAcA,EAAcD,CACnD,CACV,CAEA,SAASG,GAAsBtG,EAAOzC,GAClC,OAAK9D,EAAWqL,GAAS9E,GAIlB8E,GAAQ9E,GAAOzC,EAAOrB,QAASqB,EAAOF,SAHlC,IAAIoB,OAAO8H,GAAevG,GAIzC,CAGA,SAASuG,GAAexO,GACpB,OAAOyO,GACHzO,EACKjI,QAAQ,KAAM,IACdA,QACG,uCACA,SAAU2W,EAASC,EAAIC,EAAIC,EAAIC,GAC3B,OAAOH,GAAMC,GAAMC,GAAMC,CAC7B,IAGhB,CAEA,SAASL,GAAYzO,GACjB,OAAOA,EAAEjI,QAAQ,yBAA0B,OAC/C,CAEA,SAASgX,GAAShO,GACd,OAAIA,EAAS,EAEFnN,KAAKob,KAAKjO,IAAW,EAErBnN,KAAK2G,MAAMwG,EAE1B,CAEA,SAASkO,GAAMC,GACX,IAAIC,GAAiBD,EACjBE,EAAQ,EAMZ,OAJsB,IAAlBD,GAAuBE,SAASF,KAChCC,EAAQL,GAASI,IAGdC,CACX,CAtDArC,GAAU,CAAC,EAwDX,IAAIuC,GAAS,CAAC,EAEd,SAASC,GAActH,EAAO1G,GAC1B,IAAI7O,EAEA8c,EADArH,EAAO5G,EAWX,IATqB,iBAAV0G,IACPA,EAAQ,CAACA,IAETjG,EAAST,KACT4G,EAAO,SAAUhP,EAAO/F,GACpBA,EAAMmO,GAAY0N,GAAM9V,EAC5B,GAEJqW,EAAWvH,EAAM/U,OACZR,EAAI,EAAGA,EAAI8c,EAAU9c,IACtB4c,GAAOrH,EAAMvV,IAAMyV,CAE3B,CAEA,SAASsH,GAAkBxH,EAAO1G,GAC9BgO,GAActH,GAAO,SAAU9O,EAAO/F,EAAOoS,EAAQyC,GACjDzC,EAAOkK,GAAKlK,EAAOkK,IAAM,CAAC,EAC1BnO,EAASpI,EAAOqM,EAAOkK,GAAIlK,EAAQyC,EACvC,GACJ,CAEA,SAAS0H,GAAwB1H,EAAO9O,EAAOqM,GAC9B,MAATrM,GAAiBuI,EAAW4N,GAAQrH,IACpCqH,GAAOrH,GAAO9O,EAAOqM,EAAO1M,GAAI0M,EAAQyC,EAEhD,CAEA,SAAS2H,GAAW/D,GAChB,OAAQA,EAAO,GAAM,GAAKA,EAAO,KAAQ,GAAMA,EAAO,KAAQ,CAClE,CAEA,IAAIgE,GAAO,EACPC,GAAQ,EACRC,GAAO,EACPC,GAAO,EACPC,GAAS,EACTC,GAAS,EACTC,GAAc,EACdC,GAAO,EACPC,GAAU,EAuCd,SAASC,GAAWzE,GAChB,OAAO+D,GAAW/D,GAAQ,IAAM,GACpC,CArCA7D,EAAe,IAAK,EAAG,GAAG,WACtB,IAAIrH,EAAIrP,KAAKua,OACb,OAAOlL,GAAK,KAAO0G,EAAS1G,EAAG,GAAK,IAAMA,CAC9C,IAEAqH,EAAe,EAAG,CAAC,KAAM,GAAI,GAAG,WAC5B,OAAO1W,KAAKua,OAAS,GACzB,IAEA7D,EAAe,EAAG,CAAC,OAAQ,GAAI,EAAG,QAClCA,EAAe,EAAG,CAAC,QAAS,GAAI,EAAG,QACnCA,EAAe,EAAG,CAAC,SAAU,GAAG,GAAO,EAAG,QAI1CmG,GAAc,IAAKP,IACnBO,GAAc,KAAMd,GAAWJ,IAC/BkB,GAAc,OAAQV,GAAWN,IACjCgB,GAAc,QAAST,GAAWN,IAClCe,GAAc,SAAUT,GAAWN,IAEnCmC,GAAc,CAAC,QAAS,UAAWM,IACnCN,GAAc,QAAQ,SAAUpW,EAAO/F,GACnCA,EAAMyc,IACe,IAAjB1W,EAAMjG,OAAemO,EAAMkP,kBAAkBpX,GAAS8V,GAAM9V,EACpE,IACAoW,GAAc,MAAM,SAAUpW,EAAO/F,GACjCA,EAAMyc,IAAQxO,EAAMkP,kBAAkBpX,EAC1C,IACAoW,GAAc,KAAK,SAAUpW,EAAO/F,GAChCA,EAAMyc,IAAQW,SAASrX,EAAO,GAClC,IAUAkI,EAAMkP,kBAAoB,SAAUpX,GAChC,OAAO8V,GAAM9V,IAAU8V,GAAM9V,GAAS,GAAK,KAAO,IACtD,EAIA,IA0HI2B,GA1HA2V,GAAaC,GAAW,YAAY,GAExC,SAASC,KACL,OAAOf,GAAWte,KAAKua,OAC3B,CAEA,SAAS6E,GAAW7D,EAAM7P,GACtB,OAAO,SAAUoS,GACb,OAAa,MAATA,GACAwB,GAAMtf,KAAMub,EAAMuC,GAClB/N,EAAMtE,aAAazL,KAAM0L,GAClB1L,MAEAuf,GAAIvf,KAAMub,EAEzB,CACJ,CAEA,SAASgE,GAAIxV,EAAKwR,GACd,IAAKxR,EAAI6B,UACL,OAAOsH,IAGX,IAAInE,EAAIhF,EAAI8B,GACR2T,EAAQzV,EAAI4B,OAEhB,OAAQ4P,GACJ,IAAK,eACD,OAAOiE,EAAQzQ,EAAE0Q,qBAAuB1Q,EAAE2Q,kBAC9C,IAAK,UACD,OAAOF,EAAQzQ,EAAE4Q,gBAAkB5Q,EAAE6Q,aACzC,IAAK,UACD,OAAOJ,EAAQzQ,EAAE8Q,gBAAkB9Q,EAAE+Q,aACzC,IAAK,QACD,OAAON,EAAQzQ,EAAEgR,cAAgBhR,EAAEiR,WACvC,IAAK,OACD,OAAOR,EAAQzQ,EAAEkR,aAAelR,EAAEmR,UACtC,IAAK,MACD,OAAOV,EAAQzQ,EAAEoR,YAAcpR,EAAEqR,SACrC,IAAK,QACD,OAAOZ,EAAQzQ,EAAEsR,cAAgBtR,EAAEuR,WACvC,IAAK,WACD,OAAOd,EAAQzQ,EAAEwR,iBAAmBxR,EAAE/I,cAC1C,QACI,OAAOkN,IAEnB,CAEA,SAASoM,GAAMvV,EAAKwR,EAAMuC,GACtB,IAAI/O,EAAGyQ,EAAOjF,EAAMxN,EAAOuL,EAE3B,GAAKvO,EAAI6B,YAAa8G,MAAMoL,GAA5B,CAOA,OAHA/O,EAAIhF,EAAI8B,GACR2T,EAAQzV,EAAI4B,OAEJ4P,GACJ,IAAK,eACD,YAAaiE,EACPzQ,EAAEyR,mBAAmB1C,GACrB/O,EAAE0R,gBAAgB3C,IAC5B,IAAK,UACD,YAAa0B,EAAQzQ,EAAE2R,cAAc5C,GAAS/O,EAAE4R,WAAW7C,IAC/D,IAAK,UACD,YAAa0B,EAAQzQ,EAAE6R,cAAc9C,GAAS/O,EAAE8R,WAAW/C,IAC/D,IAAK,QACD,YAAa0B,EAAQzQ,EAAE+R,YAAYhD,GAAS/O,EAAEgS,SAASjD,IAC3D,IAAK,OACD,YAAa0B,EAAQzQ,EAAEiS,WAAWlD,GAAS/O,EAAEkS,QAAQnD,IAKzD,IAAK,WACD,MACJ,QACI,OAGRvD,EAAOuD,EACP/Q,EAAQhD,EAAIgD,QAEZuL,EAAgB,MADhBA,EAAOvO,EAAIuO,SACqB,IAAVvL,GAAgBuR,GAAW/D,GAAajC,EAAL,GACnDkH,EACAzQ,EAAEmS,eAAe3G,EAAMxN,EAAOuL,GAC9BvJ,EAAEoS,YAAY5G,EAAMxN,EAAOuL,EAlCjC,CAmCJ,CAIA,SAAS8I,GAAU3G,GAEf,OAAI1F,EAAW/U,KADfya,EAAQD,GAAeC,KAEZza,KAAKya,KAETza,IACX,CAEA,SAASqhB,GAAU5G,EAAOqD,GACtB,GAAqB,iBAAVrD,EAAoB,CAE3B,IACIrZ,EADAkgB,EAAclG,GADlBX,EAAQC,GAAqBD,IAGzB8G,EAAiBD,EAAY1f,OACjC,IAAKR,EAAI,EAAGA,EAAImgB,EAAgBngB,IAC5BpB,KAAKshB,EAAYlgB,GAAGma,MAAMd,EAAM6G,EAAYlgB,GAAGma,MAEvD,MAEI,GAAIxG,EAAW/U,KADfya,EAAQD,GAAeC,KAEnB,OAAOza,KAAKya,GAAOqD,GAG3B,OAAO9d,IACX,CAEA,SAASwhB,GAAIC,EAAGC,GACZ,OAASD,EAAIC,EAAKA,GAAKA,CAC3B,CAmBA,SAASC,GAAYpH,EAAMxN,GACvB,GAAI2F,MAAM6H,IAAS7H,MAAM3F,GACrB,OAAOmG,IAEX,IAAI0O,EAAWJ,GAAIzU,EAAO,IAE1B,OADAwN,IAASxN,EAAQ6U,GAAY,GACT,IAAbA,EACDtD,GAAW/D,GACP,GACA,GACJ,GAAOqH,EAAW,EAAK,CACjC,CAzBIpY,GADAzB,MAAMC,UAAUwB,QACNzB,MAAMC,UAAUwB,QAEhB,SAAUqY,GAEhB,IAAIzgB,EACJ,IAAKA,EAAI,EAAGA,EAAIpB,KAAK4B,SAAUR,EAC3B,GAAIpB,KAAKoB,KAAOygB,EACZ,OAAOzgB,EAGf,OAAQ,CACZ,EAkBJsV,EAAe,IAAK,CAAC,KAAM,GAAI,MAAM,WACjC,OAAO1W,KAAK+M,QAAU,CAC1B,IAEA2J,EAAe,MAAO,EAAG,GAAG,SAAU7J,GAClC,OAAO7M,KAAK8W,aAAalK,YAAY5M,KAAM6M,EAC/C,IAEA6J,EAAe,OAAQ,EAAG,GAAG,SAAU7J,GACnC,OAAO7M,KAAK8W,aAAanK,OAAO3M,KAAM6M,EAC1C,IAIAgQ,GAAc,IAAKd,GAAWY,IAC9BE,GAAc,KAAMd,GAAWJ,IAC/BkB,GAAc,OAAO,SAAUG,EAAU/L,GACrC,OAAOA,EAAOjE,iBAAiBgQ,EACnC,IACAH,GAAc,QAAQ,SAAUG,EAAU/L,GACtC,OAAOA,EAAOxE,YAAYuQ,EAC9B,IAEAiB,GAAc,CAAC,IAAK,OAAO,SAAUpW,EAAO/F,GACxCA,EAAM0c,IAASb,GAAM9V,GAAS,CAClC,IAEAoW,GAAc,CAAC,MAAO,SAAS,SAAUpW,EAAO/F,EAAOoS,EAAQyC,GAC3D,IAAI5J,EAAQmH,EAAOF,QAAQxH,YAAY3E,EAAO8O,EAAOzC,EAAOrB,SAE/C,MAAT9F,EACAjL,EAAM0c,IAASzR,EAEfsF,EAAgB6B,GAAQtC,aAAe/J,CAE/C,IAIA,IAAIia,GACI,wFAAwFjhB,MACpF,KAERkhB,GACI,kDAAkDlhB,MAAM,KAC5DmhB,GAAmB,gCACnBC,GAA0BvF,GAC1BwF,GAAqBxF,GAEzB,SAASyF,GAAa9a,EAAGwF,GACrB,OAAKxF,EAKE6I,EAAQlQ,KAAKoiB,SACdpiB,KAAKoiB,QAAQ/a,EAAE0F,SACf/M,KAAKoiB,SACApiB,KAAKoiB,QAAQC,UAAYL,IAAkBlV,KAAKD,GAC3C,SACA,cACRxF,EAAE0F,SAVCmD,EAAQlQ,KAAKoiB,SACdpiB,KAAKoiB,QACLpiB,KAAKoiB,QAAoB,UASvC,CAEA,SAASE,GAAkBjb,EAAGwF,GAC1B,OAAKxF,EAKE6I,EAAQlQ,KAAKuiB,cACdviB,KAAKuiB,aAAalb,EAAE0F,SACpB/M,KAAKuiB,aACDP,GAAiBlV,KAAKD,GAAU,SAAW,cAC7CxF,EAAE0F,SARCmD,EAAQlQ,KAAKuiB,cACdviB,KAAKuiB,aACLviB,KAAKuiB,aAAyB,UAO5C,CAEA,SAASC,GAAkBC,EAAW5V,EAAQqE,GAC1C,IAAI9P,EACAshB,EACA3Y,EACA4Y,EAAMF,EAAUG,oBACpB,IAAK5iB,KAAK6iB,aAKN,IAHA7iB,KAAK6iB,aAAe,GACpB7iB,KAAK8iB,iBAAmB,GACxB9iB,KAAK+iB,kBAAoB,GACpB3hB,EAAI,EAAGA,EAAI,KAAMA,EAClB2I,EAAMiH,EAAU,CAAC,IAAM5P,IACvBpB,KAAK+iB,kBAAkB3hB,GAAKpB,KAAK4M,YAC7B7C,EACA,IACF6Y,oBACF5iB,KAAK8iB,iBAAiB1hB,GAAKpB,KAAK2M,OAAO5C,EAAK,IAAI6Y,oBAIxD,OAAI1R,EACe,QAAXrE,GAEe,KADf6V,EAAKlZ,GAAQtB,KAAKlI,KAAK+iB,kBAAmBJ,IACvBD,EAAK,MAGT,KADfA,EAAKlZ,GAAQtB,KAAKlI,KAAK8iB,iBAAkBH,IACtBD,EAAK,KAGb,QAAX7V,GAEY,KADZ6V,EAAKlZ,GAAQtB,KAAKlI,KAAK+iB,kBAAmBJ,MAK3B,KADfD,EAAKlZ,GAAQtB,KAAKlI,KAAK8iB,iBAAkBH,IAF9BD,EAGa,MAGZ,KADZA,EAAKlZ,GAAQtB,KAAKlI,KAAK8iB,iBAAkBH,MAK1B,KADfD,EAAKlZ,GAAQtB,KAAKlI,KAAK+iB,kBAAmBJ,IAF/BD,EAGa,IAGpC,CAEA,SAASM,GAAkBP,EAAW5V,EAAQqE,GAC1C,IAAI9P,EAAG2I,EAAK+S,EAEZ,GAAI9c,KAAKijB,kBACL,OAAOT,GAAkBta,KAAKlI,KAAMyiB,EAAW5V,EAAQqE,GAY3D,IATKlR,KAAK6iB,eACN7iB,KAAK6iB,aAAe,GACpB7iB,KAAK8iB,iBAAmB,GACxB9iB,KAAK+iB,kBAAoB,IAMxB3hB,EAAI,EAAGA,EAAI,GAAIA,IAAK,CAmBrB,GAjBA2I,EAAMiH,EAAU,CAAC,IAAM5P,IACnB8P,IAAWlR,KAAK8iB,iBAAiB1hB,KACjCpB,KAAK8iB,iBAAiB1hB,GAAK,IAAIgU,OAC3B,IAAMpV,KAAK2M,OAAO5C,EAAK,IAAItD,QAAQ,IAAK,IAAM,IAC9C,KAEJzG,KAAK+iB,kBAAkB3hB,GAAK,IAAIgU,OAC5B,IAAMpV,KAAK4M,YAAY7C,EAAK,IAAItD,QAAQ,IAAK,IAAM,IACnD,MAGHyK,GAAWlR,KAAK6iB,aAAazhB,KAC9B0b,EACI,IAAM9c,KAAK2M,OAAO5C,EAAK,IAAM,KAAO/J,KAAK4M,YAAY7C,EAAK,IAC9D/J,KAAK6iB,aAAazhB,GAAK,IAAIgU,OAAO0H,EAAMrW,QAAQ,IAAK,IAAK,MAI1DyK,GACW,SAAXrE,GACA7M,KAAK8iB,iBAAiB1hB,GAAG0L,KAAK2V,GAE9B,OAAOrhB,EACJ,GACH8P,GACW,QAAXrE,GACA7M,KAAK+iB,kBAAkB3hB,GAAG0L,KAAK2V,GAE/B,OAAOrhB,EACJ,IAAK8P,GAAUlR,KAAK6iB,aAAazhB,GAAG0L,KAAK2V,GAC5C,OAAOrhB,CAEf,CACJ,CAIA,SAAS8hB,GAASnZ,EAAK+T,GACnB,IAAK/T,EAAI6B,UAEL,OAAO7B,EAGX,GAAqB,iBAAV+T,EACP,GAAI,QAAQhR,KAAKgR,GACbA,EAAQH,GAAMG,QAId,IAAKpN,EAFLoN,EAAQ/T,EAAI+M,aAAatK,YAAYsR,IAGjC,OAAO/T,EAKnB,IAAIgD,EAAQ+Q,EACRxF,EAAOvO,EAAIuO,OAMf,OAJAA,EAAOA,EAAO,GAAKA,EAAOhW,KAAK6gB,IAAI7K,EAAMqJ,GAAY5X,EAAIwQ,OAAQxN,IAC3DhD,EAAI4B,OACJ5B,EAAI8B,GAAGuX,YAAYrW,EAAOuL,GAC1BvO,EAAI8B,GAAGqX,SAASnW,EAAOuL,GACtBvO,CACX,CAEA,SAASsZ,GAAYvF,GACjB,OAAa,MAATA,GACAoF,GAASljB,KAAM8d,GACf/N,EAAMtE,aAAazL,MAAM,GAClBA,MAEAuf,GAAIvf,KAAM,QAEzB,CAEA,SAASsjB,KACL,OAAO3B,GAAY3hB,KAAKua,OAAQva,KAAK+M,QACzC,CAEA,SAASC,GAAiBgQ,GACtB,OAAIhd,KAAKijB,mBACA7S,EAAWpQ,KAAM,iBAClBujB,GAAmBrb,KAAKlI,MAExBgd,EACOhd,KAAKwjB,wBAELxjB,KAAKyjB,oBAGXrT,EAAWpQ,KAAM,uBAClBA,KAAKyjB,kBAAoBxB,IAEtBjiB,KAAKwjB,yBAA2BxG,EACjChd,KAAKwjB,wBACLxjB,KAAKyjB,kBAEnB,CAEA,SAAShX,GAAYuQ,GACjB,OAAIhd,KAAKijB,mBACA7S,EAAWpQ,KAAM,iBAClBujB,GAAmBrb,KAAKlI,MAExBgd,EACOhd,KAAK0jB,mBAEL1jB,KAAK2jB,eAGXvT,EAAWpQ,KAAM,kBAClBA,KAAK2jB,aAAezB,IAEjBliB,KAAK0jB,oBAAsB1G,EAC5Bhd,KAAK0jB,mBACL1jB,KAAK2jB,aAEnB,CAEA,SAASJ,KACL,SAASK,EAAUrf,EAAGC,GAClB,OAAOA,EAAE5C,OAAS2C,EAAE3C,MACxB,CAEA,IAGIR,EACA2I,EACA8Z,EACAC,EANAC,EAAc,GACdC,EAAa,GACbC,EAAc,GAKlB,IAAK7iB,EAAI,EAAGA,EAAI,GAAIA,IAEhB2I,EAAMiH,EAAU,CAAC,IAAM5P,IACvByiB,EAAS1G,GAAYnd,KAAK4M,YAAY7C,EAAK,KAC3C+Z,EAAQ3G,GAAYnd,KAAK2M,OAAO5C,EAAK,KACrCga,EAAY7e,KAAK2e,GACjBG,EAAW9e,KAAK4e,GAChBG,EAAY/e,KAAK4e,GACjBG,EAAY/e,KAAK2e,GAIrBE,EAAYxd,KAAKqd,GACjBI,EAAWzd,KAAKqd,GAChBK,EAAY1d,KAAKqd,GAEjB5jB,KAAK2jB,aAAe,IAAIvO,OAAO,KAAO6O,EAAYxgB,KAAK,KAAO,IAAK,KACnEzD,KAAKyjB,kBAAoBzjB,KAAK2jB,aAC9B3jB,KAAK0jB,mBAAqB,IAAItO,OAC1B,KAAO4O,EAAWvgB,KAAK,KAAO,IAC9B,KAEJzD,KAAKwjB,wBAA0B,IAAIpO,OAC/B,KAAO2O,EAAYtgB,KAAK,KAAO,IAC/B,IAER,CAEA,SAASygB,GAAW7U,EAAGhI,EAAG0H,EAAGF,EAAGM,EAAGT,EAAGwK,GAGlC,IAAIZ,EAYJ,OAVIjJ,EAAI,KAAOA,GAAK,GAEhBiJ,EAAO,IAAIjU,KAAKgL,EAAI,IAAKhI,EAAG0H,EAAGF,EAAGM,EAAGT,EAAGwK,GACpC6E,SAASzF,EAAKtS,gBACdsS,EAAK6I,YAAY9R,IAGrBiJ,EAAO,IAAIjU,KAAKgL,EAAGhI,EAAG0H,EAAGF,EAAGM,EAAGT,EAAGwK,GAG/BZ,CACX,CAEA,SAAS6L,GAAc9U,GACnB,IAAIiJ,EAAMxQ,EAcV,OAZIuH,EAAI,KAAOA,GAAK,IAChBvH,EAAOC,MAAMC,UAAUC,MAAMC,KAAKC,YAE7B,GAAKkH,EAAI,IACdiJ,EAAO,IAAIjU,KAAKA,KAAK+f,IAAI/b,MAAM,KAAMP,IACjCiW,SAASzF,EAAKiI,mBACdjI,EAAK4I,eAAe7R,IAGxBiJ,EAAO,IAAIjU,KAAKA,KAAK+f,IAAI/b,MAAM,KAAMF,YAGlCmQ,CACX,CAGA,SAAS+L,GAAgB9J,EAAM5K,EAAKC,GAChC,IACI0U,EAAM,EAAI3U,EAAMC,EAIpB,QAFa,EAAIuU,GAAc5J,EAAM,EAAG+J,GAAKnE,YAAcxQ,GAAO,EAElD2U,EAAM,CAC1B,CAGA,SAASC,GAAmBhK,EAAM7K,EAAM+I,EAAS9I,EAAKC,GAClD,IAGI4U,EACAC,EAFAzJ,EAAY,EAAI,GAAKtL,EAAO,IAFZ,EAAI+I,EAAU9I,GAAO,EACxB0U,GAAgB9J,EAAM5K,EAAKC,GAgB5C,OAXIoL,GAAa,EAEbyJ,EAAezF,GADfwF,EAAUjK,EAAO,GACoBS,EAC9BA,EAAYgE,GAAWzE,IAC9BiK,EAAUjK,EAAO,EACjBkK,EAAezJ,EAAYgE,GAAWzE,KAEtCiK,EAAUjK,EACVkK,EAAezJ,GAGZ,CACHT,KAAMiK,EACNxJ,UAAWyJ,EAEnB,CAEA,SAASC,GAAW3a,EAAK4F,EAAKC,GAC1B,IAEI+U,EACAH,EAHAI,EAAaP,GAAgBta,EAAIwQ,OAAQ5K,EAAKC,GAC9CF,EAAOpN,KAAK2G,OAAOc,EAAIiR,YAAc4J,EAAa,GAAK,GAAK,EAehE,OAXIlV,EAAO,EAEPiV,EAAUjV,EAAOmV,GADjBL,EAAUza,EAAIwQ,OAAS,EACe5K,EAAKC,GACpCF,EAAOmV,GAAY9a,EAAIwQ,OAAQ5K,EAAKC,IAC3C+U,EAAUjV,EAAOmV,GAAY9a,EAAIwQ,OAAQ5K,EAAKC,GAC9C4U,EAAUza,EAAIwQ,OAAS,IAEvBiK,EAAUza,EAAIwQ,OACdoK,EAAUjV,GAGP,CACHA,KAAMiV,EACNpK,KAAMiK,EAEd,CAEA,SAASK,GAAYtK,EAAM5K,EAAKC,GAC5B,IAAIgV,EAAaP,GAAgB9J,EAAM5K,EAAKC,GACxCkV,EAAiBT,GAAgB9J,EAAO,EAAG5K,EAAKC,GACpD,OAAQoP,GAAWzE,GAAQqK,EAAaE,GAAkB,CAC9D,CAyBA,SAASC,GAAWhb,GAChB,OAAO2a,GAAW3a,EAAK/J,KAAKglB,MAAMrV,IAAK3P,KAAKglB,MAAMpV,KAAKF,IAC3D,CAvBAgH,EAAe,IAAK,CAAC,KAAM,GAAI,KAAM,QACrCA,EAAe,IAAK,CAAC,KAAM,GAAI,KAAM,WAIrCmG,GAAc,IAAKd,GAAWY,IAC9BE,GAAc,KAAMd,GAAWJ,IAC/BkB,GAAc,IAAKd,GAAWY,IAC9BE,GAAc,KAAMd,GAAWJ,IAE/BwC,GACI,CAAC,IAAK,KAAM,IAAK,OACjB,SAAUtW,EAAO6H,EAAMwE,EAAQyC,GAC3BjH,EAAKiH,EAAMN,OAAO,EAAG,IAAMsH,GAAM9V,EACrC,IAWJ,IAAIod,GAAoB,CACpBtV,IAAK,EACLC,IAAK,GAGT,SAASsV,KACL,OAAOllB,KAAKglB,MAAMrV,GACtB,CAEA,SAASwV,KACL,OAAOnlB,KAAKglB,MAAMpV,GACtB,CAIA,SAASwV,GAAWvd,GAChB,IAAI6H,EAAO1P,KAAK8W,aAAapH,KAAK1P,MAClC,OAAgB,MAAT6H,EAAgB6H,EAAO1P,KAAKuI,IAAqB,GAAhBV,EAAQ6H,GAAW,IAC/D,CAEA,SAAS2V,GAAcxd,GACnB,IAAI6H,EAAOgV,GAAW1kB,KAAM,EAAG,GAAG0P,KAClC,OAAgB,MAAT7H,EAAgB6H,EAAO1P,KAAKuI,IAAqB,GAAhBV,EAAQ6H,GAAW,IAC/D,CAoDA,SAAS4V,GAAazd,EAAOoJ,GACzB,MAAqB,iBAAVpJ,EACAA,EAGN6K,MAAM7K,GAKU,iBADrBA,EAAQoJ,EAAOsU,cAAc1d,IAElBA,EAGJ,KARIqX,SAASrX,EAAO,GAS/B,CAEA,SAAS2d,GAAgB3d,EAAOoJ,GAC5B,MAAqB,iBAAVpJ,EACAoJ,EAAOsU,cAAc1d,GAAS,GAAK,EAEvC6K,MAAM7K,GAAS,KAAOA,CACjC,CAGA,SAAS4d,GAAcC,EAAIjE,GACvB,OAAOiE,EAAGzd,MAAMwZ,EAAG,GAAGkE,OAAOD,EAAGzd,MAAM,EAAGwZ,GAC7C,CA3EA/K,EAAe,IAAK,EAAG,KAAM,OAE7BA,EAAe,KAAM,EAAG,GAAG,SAAU7J,GACjC,OAAO7M,KAAK8W,aAAavJ,YAAYvN,KAAM6M,EAC/C,IAEA6J,EAAe,MAAO,EAAG,GAAG,SAAU7J,GAClC,OAAO7M,KAAK8W,aAAaxJ,cAActN,KAAM6M,EACjD,IAEA6J,EAAe,OAAQ,EAAG,GAAG,SAAU7J,GACnC,OAAO7M,KAAK8W,aAAazJ,SAASrN,KAAM6M,EAC5C,IAEA6J,EAAe,IAAK,EAAG,EAAG,WAC1BA,EAAe,IAAK,EAAG,EAAG,cAI1BmG,GAAc,IAAKd,IACnBc,GAAc,IAAKd,IACnBc,GAAc,IAAKd,IACnBc,GAAc,MAAM,SAAUG,EAAU/L,GACpC,OAAOA,EAAO2U,iBAAiB5I,EACnC,IACAH,GAAc,OAAO,SAAUG,EAAU/L,GACrC,OAAOA,EAAO4U,mBAAmB7I,EACrC,IACAH,GAAc,QAAQ,SAAUG,EAAU/L,GACtC,OAAOA,EAAO6U,cAAc9I,EAChC,IAEAmB,GAAkB,CAAC,KAAM,MAAO,SAAS,SAAUtW,EAAO6H,EAAMwE,EAAQyC,GACpE,IAAI8B,EAAUvE,EAAOF,QAAQuR,cAAc1d,EAAO8O,EAAOzC,EAAOrB,SAEjD,MAAX4F,EACA/I,EAAKX,EAAI0J,EAETpG,EAAgB6B,GAAQtB,eAAiB/K,CAEjD,IAEAsW,GAAkB,CAAC,IAAK,IAAK,MAAM,SAAUtW,EAAO6H,EAAMwE,EAAQyC,GAC9DjH,EAAKiH,GAASgH,GAAM9V,EACxB,IAiCA,IAAIke,GACI,2DAA2DllB,MAAM,KACrEmlB,GAA6B,8BAA8BnlB,MAAM,KACjEolB,GAA2B,uBAAuBplB,MAAM,KACxDqlB,GAAuBxJ,GACvByJ,GAA4BzJ,GAC5B0J,GAA0B1J,GAE9B,SAAS2J,GAAehf,EAAGwF,GACvB,IAAIQ,EAAW6C,EAAQlQ,KAAKsmB,WACtBtmB,KAAKsmB,UACLtmB,KAAKsmB,UACDjf,IAAW,IAANA,GAAcrH,KAAKsmB,UAAUjE,SAASvV,KAAKD,GAC1C,SACA,cAEhB,OAAa,IAANxF,EACDoe,GAAcpY,EAAUrN,KAAKglB,MAAMrV,KACnCtI,EACEgG,EAAShG,EAAEmR,OACXnL,CACZ,CAEA,SAASkZ,GAAoBlf,GACzB,OAAa,IAANA,EACDoe,GAAczlB,KAAKwmB,eAAgBxmB,KAAKglB,MAAMrV,KAC9CtI,EACErH,KAAKwmB,eAAenf,EAAEmR,OACtBxY,KAAKwmB,cACjB,CAEA,SAASC,GAAkBpf,GACvB,OAAa,IAANA,EACDoe,GAAczlB,KAAK0mB,aAAc1mB,KAAKglB,MAAMrV,KAC5CtI,EACErH,KAAK0mB,aAAarf,EAAEmR,OACpBxY,KAAK0mB,YACjB,CAEA,SAASC,GAAoBC,EAAa/Z,EAAQqE,GAC9C,IAAI9P,EACAshB,EACA3Y,EACA4Y,EAAMiE,EAAYhE,oBACtB,IAAK5iB,KAAK6mB,eAKN,IAJA7mB,KAAK6mB,eAAiB,GACtB7mB,KAAK8mB,oBAAsB,GAC3B9mB,KAAK+mB,kBAAoB,GAEpB3lB,EAAI,EAAGA,EAAI,IAAKA,EACjB2I,EAAMiH,EAAU,CAAC,IAAM,IAAIwH,IAAIpX,GAC/BpB,KAAK+mB,kBAAkB3lB,GAAKpB,KAAKuN,YAC7BxD,EACA,IACF6Y,oBACF5iB,KAAK8mB,oBAAoB1lB,GAAKpB,KAAKsN,cAC/BvD,EACA,IACF6Y,oBACF5iB,KAAK6mB,eAAezlB,GAAKpB,KAAKqN,SAAStD,EAAK,IAAI6Y,oBAIxD,OAAI1R,EACe,SAAXrE,GAEe,KADf6V,EAAKlZ,GAAQtB,KAAKlI,KAAK6mB,eAAgBlE,IACpBD,EAAK,KACN,QAAX7V,GAEQ,KADf6V,EAAKlZ,GAAQtB,KAAKlI,KAAK8mB,oBAAqBnE,IACzBD,EAAK,MAGT,KADfA,EAAKlZ,GAAQtB,KAAKlI,KAAK+mB,kBAAmBpE,IACvBD,EAAK,KAGb,SAAX7V,GAEY,KADZ6V,EAAKlZ,GAAQtB,KAAKlI,KAAK6mB,eAAgBlE,MAK3B,KADZD,EAAKlZ,GAAQtB,KAAKlI,KAAK8mB,oBAAqBnE,MAK7B,KADfD,EAAKlZ,GAAQtB,KAAKlI,KAAK+mB,kBAAmBpE,IAN/BD,EAOa,KACN,QAAX7V,GAEK,KADZ6V,EAAKlZ,GAAQtB,KAAKlI,KAAK8mB,oBAAqBnE,MAKhC,KADZD,EAAKlZ,GAAQtB,KAAKlI,KAAK6mB,eAAgBlE,MAKxB,KADfD,EAAKlZ,GAAQtB,KAAKlI,KAAK+mB,kBAAmBpE,IAN/BD,EAOa,MAGZ,KADZA,EAAKlZ,GAAQtB,KAAKlI,KAAK+mB,kBAAmBpE,MAK9B,KADZD,EAAKlZ,GAAQtB,KAAKlI,KAAK6mB,eAAgBlE,MAKxB,KADfD,EAAKlZ,GAAQtB,KAAKlI,KAAK8mB,oBAAqBnE,IANjCD,EAOa,IAGpC,CAEA,SAASsE,GAAoBJ,EAAa/Z,EAAQqE,GAC9C,IAAI9P,EAAG2I,EAAK+S,EAEZ,GAAI9c,KAAKinB,oBACL,OAAON,GAAoBze,KAAKlI,KAAM4mB,EAAa/Z,EAAQqE,GAU/D,IAPKlR,KAAK6mB,iBACN7mB,KAAK6mB,eAAiB,GACtB7mB,KAAK+mB,kBAAoB,GACzB/mB,KAAK8mB,oBAAsB,GAC3B9mB,KAAKknB,mBAAqB,IAGzB9lB,EAAI,EAAGA,EAAI,EAAGA,IAAK,CA6BpB,GA1BA2I,EAAMiH,EAAU,CAAC,IAAM,IAAIwH,IAAIpX,GAC3B8P,IAAWlR,KAAKknB,mBAAmB9lB,KACnCpB,KAAKknB,mBAAmB9lB,GAAK,IAAIgU,OAC7B,IAAMpV,KAAKqN,SAAStD,EAAK,IAAItD,QAAQ,IAAK,QAAU,IACpD,KAEJzG,KAAK8mB,oBAAoB1lB,GAAK,IAAIgU,OAC9B,IAAMpV,KAAKsN,cAAcvD,EAAK,IAAItD,QAAQ,IAAK,QAAU,IACzD,KAEJzG,KAAK+mB,kBAAkB3lB,GAAK,IAAIgU,OAC5B,IAAMpV,KAAKuN,YAAYxD,EAAK,IAAItD,QAAQ,IAAK,QAAU,IACvD,MAGHzG,KAAK6mB,eAAezlB,KACrB0b,EACI,IACA9c,KAAKqN,SAAStD,EAAK,IACnB,KACA/J,KAAKsN,cAAcvD,EAAK,IACxB,KACA/J,KAAKuN,YAAYxD,EAAK,IAC1B/J,KAAK6mB,eAAezlB,GAAK,IAAIgU,OAAO0H,EAAMrW,QAAQ,IAAK,IAAK,MAI5DyK,GACW,SAAXrE,GACA7M,KAAKknB,mBAAmB9lB,GAAG0L,KAAK8Z,GAEhC,OAAOxlB,EACJ,GACH8P,GACW,QAAXrE,GACA7M,KAAK8mB,oBAAoB1lB,GAAG0L,KAAK8Z,GAEjC,OAAOxlB,EACJ,GACH8P,GACW,OAAXrE,GACA7M,KAAK+mB,kBAAkB3lB,GAAG0L,KAAK8Z,GAE/B,OAAOxlB,EACJ,IAAK8P,GAAUlR,KAAK6mB,eAAezlB,GAAG0L,KAAK8Z,GAC9C,OAAOxlB,CAEf,CACJ,CAIA,SAAS+lB,GAAgBtf,GACrB,IAAK7H,KAAK4L,UACN,OAAgB,MAAT/D,EAAgB7H,KAAOkT,IAGlC,IAAIsF,EAAM+G,GAAIvf,KAAM,OACpB,OAAa,MAAT6H,GACAA,EAAQyd,GAAazd,EAAO7H,KAAK8W,cAC1B9W,KAAKuI,IAAIV,EAAQ2Q,EAAK,MAEtBA,CAEf,CAEA,SAAS4O,GAAsBvf,GAC3B,IAAK7H,KAAK4L,UACN,OAAgB,MAAT/D,EAAgB7H,KAAOkT,IAElC,IAAIuF,GAAWzY,KAAKwY,MAAQ,EAAIxY,KAAK8W,aAAakO,MAAMrV,KAAO,EAC/D,OAAgB,MAAT9H,EAAgB4Q,EAAUzY,KAAKuI,IAAIV,EAAQ4Q,EAAS,IAC/D,CAEA,SAAS4O,GAAmBxf,GACxB,IAAK7H,KAAK4L,UACN,OAAgB,MAAT/D,EAAgB7H,KAAOkT,IAOlC,GAAa,MAATrL,EAAe,CACf,IAAI4Q,EAAU+M,GAAgB3d,EAAO7H,KAAK8W,cAC1C,OAAO9W,KAAKwY,IAAIxY,KAAKwY,MAAQ,EAAIC,EAAUA,EAAU,EACzD,CACI,OAAOzY,KAAKwY,OAAS,CAE7B,CAEA,SAASsN,GAAc9I,GACnB,OAAIhd,KAAKinB,qBACA7W,EAAWpQ,KAAM,mBAClBsnB,GAAqBpf,KAAKlI,MAE1Bgd,EACOhd,KAAKunB,qBAELvnB,KAAKwnB,iBAGXpX,EAAWpQ,KAAM,oBAClBA,KAAKwnB,eAAiBtB,IAEnBlmB,KAAKunB,sBAAwBvK,EAC9Bhd,KAAKunB,qBACLvnB,KAAKwnB,eAEnB,CAEA,SAAS3B,GAAmB7I,GACxB,OAAIhd,KAAKinB,qBACA7W,EAAWpQ,KAAM,mBAClBsnB,GAAqBpf,KAAKlI,MAE1Bgd,EACOhd,KAAKynB,0BAELznB,KAAK0nB,sBAGXtX,EAAWpQ,KAAM,yBAClBA,KAAK0nB,oBAAsBvB,IAExBnmB,KAAKynB,2BAA6BzK,EACnChd,KAAKynB,0BACLznB,KAAK0nB,oBAEnB,CAEA,SAAS9B,GAAiB5I,GACtB,OAAIhd,KAAKinB,qBACA7W,EAAWpQ,KAAM,mBAClBsnB,GAAqBpf,KAAKlI,MAE1Bgd,EACOhd,KAAK2nB,wBAEL3nB,KAAK4nB,oBAGXxX,EAAWpQ,KAAM,uBAClBA,KAAK4nB,kBAAoBxB,IAEtBpmB,KAAK2nB,yBAA2B3K,EACjChd,KAAK2nB,wBACL3nB,KAAK4nB,kBAEnB,CAEA,SAASN,KACL,SAAS1D,EAAUrf,EAAGC,GAClB,OAAOA,EAAE5C,OAAS2C,EAAE3C,MACxB,CAEA,IAIIR,EACA2I,EACA8d,EACAC,EACAC,EARAC,EAAY,GACZjE,EAAc,GACdC,EAAa,GACbC,EAAc,GAMlB,IAAK7iB,EAAI,EAAGA,EAAI,EAAGA,IAEf2I,EAAMiH,EAAU,CAAC,IAAM,IAAIwH,IAAIpX,GAC/BymB,EAAO1K,GAAYnd,KAAKuN,YAAYxD,EAAK,KACzC+d,EAAS3K,GAAYnd,KAAKsN,cAAcvD,EAAK,KAC7Cge,EAAQ5K,GAAYnd,KAAKqN,SAAStD,EAAK,KACvCie,EAAU9iB,KAAK2iB,GACf9D,EAAY7e,KAAK4iB,GACjB9D,EAAW9e,KAAK6iB,GAChB9D,EAAY/e,KAAK2iB,GACjB5D,EAAY/e,KAAK4iB,GACjB7D,EAAY/e,KAAK6iB,GAIrBC,EAAUzhB,KAAKqd,GACfG,EAAYxd,KAAKqd,GACjBI,EAAWzd,KAAKqd,GAChBK,EAAY1d,KAAKqd,GAEjB5jB,KAAKwnB,eAAiB,IAAIpS,OAAO,KAAO6O,EAAYxgB,KAAK,KAAO,IAAK,KACrEzD,KAAK0nB,oBAAsB1nB,KAAKwnB,eAChCxnB,KAAK4nB,kBAAoB5nB,KAAKwnB,eAE9BxnB,KAAKunB,qBAAuB,IAAInS,OAC5B,KAAO4O,EAAWvgB,KAAK,KAAO,IAC9B,KAEJzD,KAAKynB,0BAA4B,IAAIrS,OACjC,KAAO2O,EAAYtgB,KAAK,KAAO,IAC/B,KAEJzD,KAAK2nB,wBAA0B,IAAIvS,OAC/B,KAAO4S,EAAUvkB,KAAK,KAAO,IAC7B,IAER,CAIA,SAASwkB,KACL,OAAOjoB,KAAKgZ,QAAU,IAAM,EAChC,CAEA,SAASkP,KACL,OAAOloB,KAAKgZ,SAAW,EAC3B,CAgCA,SAAS9G,GAASyE,EAAOwR,GACrBzR,EAAeC,EAAO,EAAG,GAAG,WACxB,OAAO3W,KAAK8W,aAAa5E,SACrBlS,KAAKgZ,QACLhZ,KAAKqZ,UACL8O,EAER,GACJ,CAOA,SAASC,GAAcpL,EAAU/L,GAC7B,OAAOA,EAAOoX,cAClB,CA0DA,SAASC,GAAWzgB,GAGhB,MAAgD,OAAxCA,EAAQ,IAAIrB,cAAc+hB,OAAO,EAC7C,CA7GA7R,EAAe,IAAK,CAAC,KAAM,GAAI,EAAG,QAClCA,EAAe,IAAK,CAAC,KAAM,GAAI,EAAGuR,IAClCvR,EAAe,IAAK,CAAC,KAAM,GAAI,EAAGwR,IAElCxR,EAAe,MAAO,EAAG,GAAG,WACxB,MAAO,GAAKuR,GAAQ5f,MAAMrI,MAAQ+V,EAAS/V,KAAKqZ,UAAW,EAC/D,IAEA3C,EAAe,QAAS,EAAG,GAAG,WAC1B,MACI,GACAuR,GAAQ5f,MAAMrI,MACd+V,EAAS/V,KAAKqZ,UAAW,GACzBtD,EAAS/V,KAAK0Z,UAAW,EAEjC,IAEAhD,EAAe,MAAO,EAAG,GAAG,WACxB,MAAO,GAAK1W,KAAKgZ,QAAUjD,EAAS/V,KAAKqZ,UAAW,EACxD,IAEA3C,EAAe,QAAS,EAAG,GAAG,WAC1B,MACI,GACA1W,KAAKgZ,QACLjD,EAAS/V,KAAKqZ,UAAW,GACzBtD,EAAS/V,KAAK0Z,UAAW,EAEjC,IAYAxH,GAAS,KAAK,GACdA,GAAS,KAAK,GAQd2K,GAAc,IAAKuL,IACnBvL,GAAc,IAAKuL,IACnBvL,GAAc,IAAKd,GAAWa,IAC9BC,GAAc,IAAKd,GAAWY,IAC9BE,GAAc,IAAKd,GAAWY,IAC9BE,GAAc,KAAMd,GAAWJ,IAC/BkB,GAAc,KAAMd,GAAWJ,IAC/BkB,GAAc,KAAMd,GAAWJ,IAE/BkB,GAAc,MAAOb,IACrBa,GAAc,QAASZ,IACvBY,GAAc,MAAOb,IACrBa,GAAc,QAASZ,IAEvBgC,GAAc,CAAC,IAAK,MAAOS,IAC3BT,GAAc,CAAC,IAAK,OAAO,SAAUpW,EAAO/F,EAAOoS,GAC/C,IAAIsU,EAAS7K,GAAM9V,GACnB/F,EAAM4c,IAAmB,KAAX8J,EAAgB,EAAIA,CACtC,IACAvK,GAAc,CAAC,IAAK,MAAM,SAAUpW,EAAO/F,EAAOoS,GAC9CA,EAAOuU,MAAQvU,EAAOF,QAAQ0U,KAAK7gB,GACnCqM,EAAOyU,UAAY9gB,CACvB,IACAoW,GAAc,CAAC,IAAK,OAAO,SAAUpW,EAAO/F,EAAOoS,GAC/CpS,EAAM4c,IAAQf,GAAM9V,GACpBwK,EAAgB6B,GAAQpB,SAAU,CACtC,IACAmL,GAAc,OAAO,SAAUpW,EAAO/F,EAAOoS,GACzC,IAAI0U,EAAM/gB,EAAMjG,OAAS,EACzBE,EAAM4c,IAAQf,GAAM9V,EAAMwO,OAAO,EAAGuS,IACpC9mB,EAAM6c,IAAUhB,GAAM9V,EAAMwO,OAAOuS,IACnCvW,EAAgB6B,GAAQpB,SAAU,CACtC,IACAmL,GAAc,SAAS,SAAUpW,EAAO/F,EAAOoS,GAC3C,IAAI2U,EAAOhhB,EAAMjG,OAAS,EACtBknB,EAAOjhB,EAAMjG,OAAS,EAC1BE,EAAM4c,IAAQf,GAAM9V,EAAMwO,OAAO,EAAGwS,IACpC/mB,EAAM6c,IAAUhB,GAAM9V,EAAMwO,OAAOwS,EAAM,IACzC/mB,EAAM8c,IAAUjB,GAAM9V,EAAMwO,OAAOyS,IACnCzW,EAAgB6B,GAAQpB,SAAU,CACtC,IACAmL,GAAc,OAAO,SAAUpW,EAAO/F,EAAOoS,GACzC,IAAI0U,EAAM/gB,EAAMjG,OAAS,EACzBE,EAAM4c,IAAQf,GAAM9V,EAAMwO,OAAO,EAAGuS,IACpC9mB,EAAM6c,IAAUhB,GAAM9V,EAAMwO,OAAOuS,GACvC,IACA3K,GAAc,SAAS,SAAUpW,EAAO/F,EAAOoS,GAC3C,IAAI2U,EAAOhhB,EAAMjG,OAAS,EACtBknB,EAAOjhB,EAAMjG,OAAS,EAC1BE,EAAM4c,IAAQf,GAAM9V,EAAMwO,OAAO,EAAGwS,IACpC/mB,EAAM6c,IAAUhB,GAAM9V,EAAMwO,OAAOwS,EAAM,IACzC/mB,EAAM8c,IAAUjB,GAAM9V,EAAMwO,OAAOyS,GACvC,IAUA,IAAIC,GAA6B,gBAK7BC,GAAa5J,GAAW,SAAS,GAErC,SAAS6J,GAAejQ,EAAOK,EAAS6P,GACpC,OAAIlQ,EAAQ,GACDkQ,EAAU,KAAO,KAEjBA,EAAU,KAAO,IAEhC,CAEA,IAuBIC,GAvBAC,GAAa,CACbpb,SAAU2H,EACVlI,eAAgB6J,EAChBH,YAAaO,EACblI,QAASoI,EACTrI,uBAAwBsI,EACxBtJ,aAAcwJ,EAEdpL,OAAQmV,GACRlV,YAAamV,GAEbrS,KAAMuV,GAEN5X,SAAU0Y,GACVxY,YAAa0Y,GACb3Y,cAAe0Y,GAEfqD,cAAeN,IAIfO,GAAU,CAAC,EACXC,GAAiB,CAAC,EAGtB,SAASC,GAAaC,EAAMC,GACxB,IAAItoB,EACAuoB,EAAOrnB,KAAK6gB,IAAIsG,EAAK7nB,OAAQ8nB,EAAK9nB,QACtC,IAAKR,EAAI,EAAGA,EAAIuoB,EAAMvoB,GAAK,EACvB,GAAIqoB,EAAKroB,KAAOsoB,EAAKtoB,GACjB,OAAOA,EAGf,OAAOuoB,CACX,CAEA,SAASC,GAAgBlV,GACrB,OAAOA,EAAMA,EAAIlO,cAAcC,QAAQ,IAAK,KAAOiO,CACvD,CAKA,SAASmV,GAAappB,GAOlB,IANA,IACImE,EACAiB,EACAoL,EACApQ,EAJAO,EAAI,EAMDA,EAAIX,EAAMmB,QAAQ,CAKrB,IAHAgD,GADA/D,EAAQ+oB,GAAgBnpB,EAAMW,IAAIP,MAAM,MAC9Be,OAEViE,GADAA,EAAO+jB,GAAgBnpB,EAAMW,EAAI,KACnByE,EAAKhF,MAAM,KAAO,KACzB+D,EAAI,GAAG,CAEV,GADAqM,EAAS6Y,GAAWjpB,EAAMoH,MAAM,EAAGrD,GAAGnB,KAAK,MAEvC,OAAOwN,EAEX,GACIpL,GACAA,EAAKjE,QAAUgD,GACf4kB,GAAa3oB,EAAOgF,IAASjB,EAAI,EAGjC,MAEJA,GACJ,CACAxD,GACJ,CACA,OAAO+nB,EACX,CAEA,SAASY,GAAiBrnB,GAGtB,SAAUA,IAAQA,EAAKc,MAAM,eACjC,CAEA,SAASsmB,GAAWpnB,GAChB,IAAIsnB,EAAY,KAGhB,QACsB9pB,IAAlBopB,GAAQ5mB,IAERhD,GACAA,EAAOC,SACPoqB,GAAiBrnB,GAEjB,IACIsnB,EAAYb,GAAac,MAEzB,QAAe,KAAcvnB,GAC7BwnB,GAAmBF,EACvB,CAAE,MAAOtkB,GAGL4jB,GAAQ5mB,GAAQ,IACpB,CAEJ,OAAO4mB,GAAQ5mB,EACnB,CAKA,SAASwnB,GAAmBxV,EAAKyV,GAC7B,IAAIhoB,EAqBJ,OApBIuS,KAEIvS,EADAsO,EAAY0Z,GACLC,GAAU1V,GAEVhI,GAAagI,EAAKyV,IAKzBhB,GAAehnB,EAEQ,oBAAZwF,SAA2BA,QAAQwM,MAE1CxM,QAAQwM,KACJ,UAAYO,EAAM,2CAM3ByU,GAAac,KACxB,CAEA,SAASvd,GAAahK,EAAMwR,GACxB,GAAe,OAAXA,EAAiB,CACjB,IAAIjD,EACAuE,EAAe4T,GAEnB,GADAlV,EAAO3Q,KAAOb,EACO,MAAjB4mB,GAAQ5mB,GACRoS,EACI,uBACA,2OAKJU,EAAe8T,GAAQ5mB,GAAMwS,aAC1B,GAA2B,MAAvBhB,EAAOmW,aACd,GAAoC,MAAhCf,GAAQpV,EAAOmW,cACf7U,EAAe8T,GAAQpV,EAAOmW,cAAcnV,YACzC,CAEH,GAAc,OADdjE,EAAS6Y,GAAW5V,EAAOmW,eAWvB,OAPKd,GAAerV,EAAOmW,gBACvBd,GAAerV,EAAOmW,cAAgB,IAE1Cd,GAAerV,EAAOmW,cAAcnlB,KAAK,CACrCxC,KAAMA,EACNwR,OAAQA,IAEL,KATPsB,EAAevE,EAAOiE,OAW9B,CAeJ,OAbAoU,GAAQ5mB,GAAQ,IAAIgT,EAAOH,EAAaC,EAActB,IAElDqV,GAAe7mB,IACf6mB,GAAe7mB,GAAM4nB,SAAQ,SAAU5I,GACnChV,GAAagV,EAAEhf,KAAMgf,EAAExN,OAC3B,IAMJgW,GAAmBxnB,GAEZ4mB,GAAQ5mB,EACnB,CAGI,cADO4mB,GAAQ5mB,GACR,IAEf,CAEA,SAAS6nB,GAAa7nB,EAAMwR,GACxB,GAAc,MAAVA,EAAgB,CAChB,IAAIjD,EACAuZ,EACAhV,EAAe4T,GAEE,MAAjBE,GAAQ5mB,IAA+C,MAA9B4mB,GAAQ5mB,GAAM2nB,aAEvCf,GAAQ5mB,GAAMuS,IAAIM,EAAa+T,GAAQ5mB,GAAMwS,QAAShB,KAIrC,OADjBsW,EAAYV,GAAWpnB,MAEnB8S,EAAegV,EAAUtV,SAE7BhB,EAASqB,EAAaC,EAActB,GACnB,MAAbsW,IAIAtW,EAAO3Q,KAAOb,IAElBuO,EAAS,IAAIyE,EAAOxB,IACbmW,aAAef,GAAQ5mB,GAC9B4mB,GAAQ5mB,GAAQuO,GAIpBiZ,GAAmBxnB,EACvB,MAEyB,MAAjB4mB,GAAQ5mB,KAC0B,MAA9B4mB,GAAQ5mB,GAAM2nB,cACdf,GAAQ5mB,GAAQ4mB,GAAQ5mB,GAAM2nB,aAC1B3nB,IAASwnB,MACTA,GAAmBxnB,IAEC,MAAjB4mB,GAAQ5mB,WACR4mB,GAAQ5mB,IAI3B,OAAO4mB,GAAQ5mB,EACnB,CAGA,SAAS0nB,GAAU1V,GACf,IAAIzD,EAMJ,GAJIyD,GAAOA,EAAIV,SAAWU,EAAIV,QAAQiW,QAClCvV,EAAMA,EAAIV,QAAQiW,QAGjBvV,EACD,OAAOyU,GAGX,IAAKjZ,EAAQwE,GAAM,CAGf,GADAzD,EAAS6Y,GAAWpV,GAEhB,OAAOzD,EAEXyD,EAAM,CAACA,EACX,CAEA,OAAOmV,GAAanV,EACxB,CAEA,SAAS+V,KACL,OAAOphB,EAAKigB,GAChB,CAEA,SAASoB,GAAcrjB,GACnB,IAAImK,EACAjN,EAAI8C,EAAEG,GAuCV,OArCIjD,IAAsC,IAAjC8N,EAAgBhL,GAAGmK,WACxBA,EACIjN,EAAEia,IAAS,GAAKja,EAAEia,IAAS,GACrBA,GACAja,EAAEka,IAAQ,GAAKla,EAAEka,IAAQkD,GAAYpd,EAAEga,IAAOha,EAAEia,KAC9CC,GACAla,EAAEma,IAAQ,GACRna,EAAEma,IAAQ,IACG,KAAZna,EAAEma,MACgB,IAAdna,EAAEoa,KACe,IAAdpa,EAAEqa,KACiB,IAAnBra,EAAEsa,KACVH,GACAna,EAAEoa,IAAU,GAAKpa,EAAEoa,IAAU,GAC3BA,GACApa,EAAEqa,IAAU,GAAKra,EAAEqa,IAAU,GAC3BA,GACAra,EAAEsa,IAAe,GAAKta,EAAEsa,IAAe,IACrCA,IACC,EAGjBxM,EAAgBhL,GAAGsjB,qBAClBnZ,EAAW+M,IAAQ/M,EAAWiN,MAE/BjN,EAAWiN,IAEXpM,EAAgBhL,GAAGujB,iBAAgC,IAAdpZ,IACrCA,EAAWsN,IAEXzM,EAAgBhL,GAAGwjB,mBAAkC,IAAdrZ,IACvCA,EAAWuN,IAGf1M,EAAgBhL,GAAGmK,SAAWA,GAG3BnK,CACX,CAIA,IAAIyjB,GACI,iJACJC,GACI,6IACJC,GAAU,wBACVC,GAAW,CACP,CAAC,eAAgB,uBACjB,CAAC,aAAc,mBACf,CAAC,eAAgB,kBACjB,CAAC,aAAc,eAAe,GAC9B,CAAC,WAAY,eACb,CAAC,UAAW,cAAc,GAC1B,CAAC,aAAc,cACf,CAAC,WAAY,SACb,CAAC,aAAc,eACf,CAAC,YAAa,eAAe,GAC7B,CAAC,UAAW,SACZ,CAAC,SAAU,SAAS,GACpB,CAAC,OAAQ,SAAS,IAGtBC,GAAW,CACP,CAAC,gBAAiB,uBAClB,CAAC,gBAAiB,sBAClB,CAAC,WAAY,kBACb,CAAC,QAAS,aACV,CAAC,cAAe,qBAChB,CAAC,cAAe,oBAChB,CAAC,SAAU,gBACX,CAAC,OAAQ,YACT,CAAC,KAAM,SAEXC,GAAkB,qBAElBhZ,GACI,0LACJiZ,GAAa,CACTC,GAAI,EACJC,IAAK,EACLC,KAAK,IACLC,KAAK,IACLC,KAAK,IACLC,KAAK,IACLC,KAAK,IACLC,KAAK,IACLC,KAAK,IACLC,KAAK,KAIb,SAASC,GAAc7X,GACnB,IAAI9S,EACA4qB,EAGAC,EACAC,EACAC,EACAC,EALAjrB,EAAS+S,EAAOL,GAChBrQ,EAAQsnB,GAAiBuB,KAAKlrB,IAAW4pB,GAAcsB,KAAKlrB,GAK5DmrB,EAAcrB,GAASrpB,OACvB2qB,EAAcrB,GAAStpB,OAE3B,GAAI4B,EAAO,CAEP,IADA6O,EAAgB6B,GAAQnC,KAAM,EACzB3Q,EAAI,EAAG4qB,EAAIM,EAAalrB,EAAI4qB,EAAG5qB,IAChC,GAAI6pB,GAAS7pB,GAAG,GAAGirB,KAAK7oB,EAAM,IAAK,CAC/B0oB,EAAajB,GAAS7pB,GAAG,GACzB6qB,GAA+B,IAAnBhB,GAAS7pB,GAAG,GACxB,KACJ,CAEJ,GAAkB,MAAd8qB,EAEA,YADAhY,EAAOlB,UAAW,GAGtB,GAAIxP,EAAM,GAAI,CACV,IAAKpC,EAAI,EAAG4qB,EAAIO,EAAanrB,EAAI4qB,EAAG5qB,IAChC,GAAI8pB,GAAS9pB,GAAG,GAAGirB,KAAK7oB,EAAM,IAAK,CAE/B2oB,GAAc3oB,EAAM,IAAM,KAAO0nB,GAAS9pB,GAAG,GAC7C,KACJ,CAEJ,GAAkB,MAAd+qB,EAEA,YADAjY,EAAOlB,UAAW,EAG1B,CACA,IAAKiZ,GAA2B,MAAdE,EAEd,YADAjY,EAAOlB,UAAW,GAGtB,GAAIxP,EAAM,GAAI,CACV,IAAIwnB,GAAQqB,KAAK7oB,EAAM,IAInB,YADA0Q,EAAOlB,UAAW,GAFlBoZ,EAAW,GAKnB,CACAlY,EAAO3M,GAAK2kB,GAAcC,GAAc,KAAOC,GAAY,IAC3DI,GAA0BtY,EAC9B,MACIA,EAAOlB,UAAW,CAE1B,CAEA,SAASyZ,GACLC,EACAC,EACAC,EACAC,EACAC,EACAC,GAEA,IAAIC,EAAS,CACTC,GAAeP,GACf3K,GAAyBvY,QAAQmjB,GACjCzN,SAAS0N,EAAQ,IACjB1N,SAAS2N,EAAS,IAClB3N,SAAS4N,EAAW,KAOxB,OAJIC,GACAC,EAAO9nB,KAAKga,SAAS6N,EAAW,KAG7BC,CACX,CAEA,SAASC,GAAeP,GACpB,IAAInS,EAAO2E,SAASwN,EAAS,IAC7B,OAAInS,GAAQ,GACD,IAAOA,EACPA,GAAQ,IACR,KAAOA,EAEXA,CACX,CAEA,SAAS2S,GAAkBxe,GAEvB,OAAOA,EACFjI,QAAQ,qBAAsB,KAC9BA,QAAQ,WAAY,KACpBA,QAAQ,SAAU,IAClBA,QAAQ,SAAU,GAC3B,CAEA,SAAS0mB,GAAaC,EAAYC,EAAanZ,GAC3C,OAAIkZ,GAEsBpH,GAA2Bxc,QAAQ4jB,KACrC,IAAI/oB,KAChBgpB,EAAY,GACZA,EAAY,GACZA,EAAY,IACdjN,WAEF/N,EAAgB6B,GAAQ9B,iBAAkB,EAC1C8B,EAAOlB,UAAW,GACX,EAInB,CAEA,SAASsa,GAAgBC,EAAWC,EAAgBC,GAChD,GAAIF,EACA,OAAOnC,GAAWmC,GACf,GAAIC,EAEP,OAAO,EAEP,IAAIE,EAAKxO,SAASuO,EAAW,IACzBpmB,EAAIqmB,EAAK,IAEb,OADSA,EAAKrmB,GAAK,IACR,GAAKA,CAExB,CAGA,SAASsmB,GAAkBzZ,GACvB,IACI0Z,EADApqB,EAAQ2O,GAAQka,KAAKa,GAAkBhZ,EAAOL,KAElD,GAAIrQ,EAAO,CASP,GARAoqB,EAAcnB,GACVjpB,EAAM,GACNA,EAAM,GACNA,EAAM,GACNA,EAAM,GACNA,EAAM,GACNA,EAAM,KAEL2pB,GAAa3pB,EAAM,GAAIoqB,EAAa1Z,GACrC,OAGJA,EAAO1M,GAAKomB,EACZ1Z,EAAOzM,KAAO6lB,GAAgB9pB,EAAM,GAAIA,EAAM,GAAIA,EAAM,KAExD0Q,EAAOrI,GAAKsY,GAAc9b,MAAM,KAAM6L,EAAO1M,IAC7C0M,EAAOrI,GAAG+U,cAAc1M,EAAOrI,GAAGgU,gBAAkB3L,EAAOzM,MAE3D4K,EAAgB6B,GAAQ/B,SAAU,CACtC,MACI+B,EAAOlB,UAAW,CAE1B,CAGA,SAAS6a,GAAiB3Z,GACtB,IAAIkJ,EAAU+N,GAAgBkB,KAAKnY,EAAOL,IAC1B,OAAZuJ,GAKJ2O,GAAc7X,IACU,IAApBA,EAAOlB,kBACAkB,EAAOlB,SAKlB2a,GAAkBzZ,IACM,IAApBA,EAAOlB,kBACAkB,EAAOlB,SAKdkB,EAAOrB,QACPqB,EAAOlB,UAAW,EAGlBjD,EAAM+d,wBAAwB5Z,MAtB9BA,EAAOrI,GAAK,IAAIxH,MAAM+Y,EAAQ,GAwBtC,CAYA,SAAS2Q,GAASxpB,EAAGC,EAAGwpB,GACpB,OAAS,MAALzpB,EACOA,EAEF,MAALC,EACOA,EAEJwpB,CACX,CAEA,SAASC,GAAiB/Z,GAEtB,IAAIga,EAAW,IAAI7pB,KAAK0L,EAAM6F,OAC9B,OAAI1B,EAAOia,QACA,CACHD,EAAS3N,iBACT2N,EAAS7N,cACT6N,EAASjO,cAGV,CAACiO,EAASloB,cAAekoB,EAAS5N,WAAY4N,EAAShO,UAClE,CAMA,SAASkO,GAAgBla,GACrB,IAAI9S,EACAkX,EAEA+V,EACAC,EACAC,EAHA1mB,EAAQ,GAKZ,IAAIqM,EAAOrI,GAAX,CAgCA,IA5BAwiB,EAAcJ,GAAiB/Z,GAG3BA,EAAOkK,IAAyB,MAAnBlK,EAAO1M,GAAGiX,KAAqC,MAApBvK,EAAO1M,GAAGgX,KAClDgQ,GAAsBta,GAID,MAArBA,EAAOua,aACPF,EAAYR,GAAS7Z,EAAO1M,GAAG+W,IAAO8P,EAAY9P,MAG9CrK,EAAOua,WAAazP,GAAWuP,IACT,IAAtBra,EAAOua,cAEPpc,EAAgB6B,GAAQyW,oBAAqB,GAGjDrS,EAAO6L,GAAcoK,EAAW,EAAGra,EAAOua,YAC1Cva,EAAO1M,GAAGgX,IAASlG,EAAK+H,cACxBnM,EAAO1M,GAAGiX,IAAQnG,EAAK2H,cAQtB7e,EAAI,EAAGA,EAAI,GAAqB,MAAhB8S,EAAO1M,GAAGpG,KAAcA,EACzC8S,EAAO1M,GAAGpG,GAAKyG,EAAMzG,GAAKitB,EAAYjtB,GAI1C,KAAOA,EAAI,EAAGA,IACV8S,EAAO1M,GAAGpG,GAAKyG,EAAMzG,GACD,MAAhB8S,EAAO1M,GAAGpG,GAAoB,IAANA,EAAU,EAAI,EAAK8S,EAAO1M,GAAGpG,GAKrC,KAApB8S,EAAO1M,GAAGkX,KACY,IAAtBxK,EAAO1M,GAAGmX,KACY,IAAtBzK,EAAO1M,GAAGoX,KACiB,IAA3B1K,EAAO1M,GAAGqX,MAEV3K,EAAOwa,UAAW,EAClBxa,EAAO1M,GAAGkX,IAAQ,GAGtBxK,EAAOrI,IAAMqI,EAAOia,QAAUhK,GAAgBD,IAAY7b,MACtD,KACAR,GAEJymB,EAAkBpa,EAAOia,QACnBja,EAAOrI,GAAGsU,YACVjM,EAAOrI,GAAGuU,SAIG,MAAflM,EAAOzM,MACPyM,EAAOrI,GAAG+U,cAAc1M,EAAOrI,GAAGgU,gBAAkB3L,EAAOzM,MAG3DyM,EAAOwa,WACPxa,EAAO1M,GAAGkX,IAAQ,IAKlBxK,EAAOkK,SACgB,IAAhBlK,EAAOkK,GAAGrP,GACjBmF,EAAOkK,GAAGrP,IAAMuf,IAEhBjc,EAAgB6B,GAAQ9B,iBAAkB,EA3E9C,CA6EJ,CAEA,SAASoc,GAAsBta,GAC3B,IAAIjF,EAAGgM,EAAUvL,EAAM+I,EAAS9I,EAAKC,EAAK+e,EAAMC,EAAiBC,EAGrD,OADZ5f,EAAIiF,EAAOkK,IACLrE,IAAqB,MAAP9K,EAAEkL,GAAoB,MAAPlL,EAAEyJ,GACjC/I,EAAM,EACNC,EAAM,EAMNqL,EAAW8S,GACP9e,EAAE8K,GACF7F,EAAO1M,GAAG+W,IACVmG,GAAWoK,KAAe,EAAG,GAAGvU,MAEpC7K,EAAOqe,GAAS9e,EAAEkL,EAAG,KACrB1B,EAAUsV,GAAS9e,EAAEyJ,EAAG,IACV,GAAKD,EAAU,KACzBmW,GAAkB,KAGtBjf,EAAMuE,EAAOF,QAAQgR,MAAMrV,IAC3BC,EAAMsE,EAAOF,QAAQgR,MAAMpV,IAE3Bif,EAAUnK,GAAWoK,KAAenf,EAAKC,GAEzCqL,EAAW8S,GAAS9e,EAAE2K,GAAI1F,EAAO1M,GAAG+W,IAAOsQ,EAAQtU,MAGnD7K,EAAOqe,GAAS9e,EAAEA,EAAG4f,EAAQnf,MAElB,MAAPT,EAAEF,IAEF0J,EAAUxJ,EAAEF,GACE,GAAK0J,EAAU,KACzBmW,GAAkB,GAER,MAAP3f,EAAEvJ,GAET+S,EAAUxJ,EAAEvJ,EAAIiK,GACZV,EAAEvJ,EAAI,GAAKuJ,EAAEvJ,EAAI,KACjBkpB,GAAkB,IAItBnW,EAAU9I,GAGdD,EAAO,GAAKA,EAAOmV,GAAY5J,EAAUtL,EAAKC,GAC9CyC,EAAgB6B,GAAQ0W,gBAAiB,EACf,MAAnBgE,EACPvc,EAAgB6B,GAAQ2W,kBAAmB,GAE3C8D,EAAOpK,GAAmBtJ,EAAUvL,EAAM+I,EAAS9I,EAAKC,GACxDsE,EAAO1M,GAAG+W,IAAQoQ,EAAKpU,KACvBrG,EAAOua,WAAaE,EAAK3T,UAEjC,CASA,SAASwR,GAA0BtY,GAE/B,GAAIA,EAAO3M,KAAOwI,EAAMgf,SAIxB,GAAI7a,EAAO3M,KAAOwI,EAAMif,SAAxB,CAIA9a,EAAO1M,GAAK,GACZ6K,EAAgB6B,GAAQ7C,OAAQ,EAGhC,IACIjQ,EACAisB,EACArP,EACArH,EACAsY,EAGAhd,EACAiM,EATA/c,EAAS,GAAK+S,EAAOL,GAMrBqb,EAAe/tB,EAAOS,OACtButB,EAAyB,EAO7B,IADAjR,GAFAF,EACI9G,EAAahD,EAAO3M,GAAI2M,EAAOF,SAASxQ,MAAM8S,IAAqB,IACrD1U,OACbR,EAAI,EAAGA,EAAI8c,EAAU9c,IACtBuV,EAAQqH,EAAO5c,IACfisB,GAAelsB,EAAOqC,MAAMyZ,GAAsBtG,EAAOzC,KACrD,IAAI,OAEJ+a,EAAU9tB,EAAOkV,OAAO,EAAGlV,EAAOqI,QAAQ6jB,KAC9BzrB,OAAS,GACjByQ,EAAgB6B,GAAQ3C,YAAYrM,KAAK+pB,GAE7C9tB,EAASA,EAAO8G,MACZ9G,EAAOqI,QAAQ6jB,GAAeA,EAAYzrB,QAE9CutB,GAA0B9B,EAAYzrB,QAGtC6U,EAAqBE,IACjB0W,EACAhb,EAAgB6B,GAAQ7C,OAAQ,EAEhCgB,EAAgB6B,GAAQ5C,aAAapM,KAAKyR,GAE9C0H,GAAwB1H,EAAO0W,EAAanZ,IACrCA,EAAOrB,UAAYwa,GAC1Bhb,EAAgB6B,GAAQ5C,aAAapM,KAAKyR,GAKlDtE,EAAgB6B,GAAQzC,cACpByd,EAAeC,EACfhuB,EAAOS,OAAS,GAChByQ,EAAgB6B,GAAQ3C,YAAYrM,KAAK/D,GAKzC+S,EAAO1M,GAAGkX,KAAS,KACiB,IAApCrM,EAAgB6B,GAAQpB,SACxBoB,EAAO1M,GAAGkX,IAAQ,IAElBrM,EAAgB6B,GAAQpB,aAAU5S,GAGtCmS,EAAgB6B,GAAQlC,gBAAkBkC,EAAO1M,GAAGS,MAAM,GAC1DoK,EAAgB6B,GAAQhC,SAAWgC,EAAOyU,UAE1CzU,EAAO1M,GAAGkX,IAAQ0Q,GACdlb,EAAOF,QACPE,EAAO1M,GAAGkX,IACVxK,EAAOyU,WAKC,QADZ1W,EAAMI,EAAgB6B,GAAQjC,OAE1BiC,EAAO1M,GAAG+W,IAAQrK,EAAOF,QAAQqb,gBAAgBpd,EAAKiC,EAAO1M,GAAG+W,MAGpE6P,GAAgBla,GAChBwW,GAAcxW,EA9Ed,MAFIyZ,GAAkBzZ,QAJlB6X,GAAc7X,EAqFtB,CAEA,SAASkb,GAAgBne,EAAQgI,EAAM/G,GACnC,IAAIod,EAEJ,OAAgB,MAAZpd,EAEO+G,EAEgB,MAAvBhI,EAAOse,aACAte,EAAOse,aAAatW,EAAM/G,GACX,MAAfjB,EAAOyX,OAEd4G,EAAOre,EAAOyX,KAAKxW,KACP+G,EAAO,KACfA,GAAQ,IAEPqW,GAAiB,KAATrW,IACTA,EAAO,GAEJA,GAGAA,CAEf,CAGA,SAASuW,GAAyBtb,GAC9B,IAAIub,EACAC,EACAC,EACAvuB,EACAwuB,EACAC,EACAC,GAAoB,EACpBC,EAAa7b,EAAO3M,GAAG3F,OAE3B,GAAmB,IAAfmuB,EAGA,OAFA1d,EAAgB6B,GAAQrC,eAAgB,OACxCqC,EAAOrI,GAAK,IAAIxH,KAAK6O,MAIzB,IAAK9R,EAAI,EAAGA,EAAI2uB,EAAY3uB,IACxBwuB,EAAe,EACfC,GAAmB,EACnBJ,EAAanc,EAAW,CAAC,EAAGY,GACN,MAAlBA,EAAOia,UACPsB,EAAWtB,QAAUja,EAAOia,SAEhCsB,EAAWloB,GAAK2M,EAAO3M,GAAGnG,GAC1BorB,GAA0BiD,GAEtB7jB,EAAQ6jB,KACRI,GAAmB,GAIvBD,GAAgBvd,EAAgBod,GAAYhe,cAG5Cme,GAAkE,GAAlDvd,EAAgBod,GAAYne,aAAa1P,OAEzDyQ,EAAgBod,GAAYO,MAAQJ,EAE/BE,EAaGF,EAAeD,IACfA,EAAcC,EACdF,EAAaD,IAbE,MAAfE,GACAC,EAAeD,GACfE,KAEAF,EAAcC,EACdF,EAAaD,EACTI,IACAC,GAAoB,IAWpChf,EAAOoD,EAAQwb,GAAcD,EACjC,CAEA,SAASQ,GAAiB/b,GACtB,IAAIA,EAAOrI,GAAX,CAIA,IAAIzK,EAAIsZ,GAAqBxG,EAAOL,IAChCqc,OAAsBhwB,IAAVkB,EAAEoX,IAAoBpX,EAAEkX,KAAOlX,EAAEoX,IACjDtE,EAAO1M,GAAK0D,EACR,CAAC9J,EAAEmZ,KAAMnZ,EAAE2L,MAAOmjB,EAAW9uB,EAAE6X,KAAM7X,EAAEkY,OAAQlY,EAAEuY,OAAQvY,EAAEgY,cAC3D,SAAU9I,GACN,OAAOA,GAAO4O,SAAS5O,EAAK,GAChC,IAGJ8d,GAAgBla,EAXhB,CAYJ,CAEA,SAASic,GAAiBjc,GACtB,IAAItD,EAAM,IAAIqD,EAAOyW,GAAc0F,GAAclc,KAOjD,OANItD,EAAI8d,WAEJ9d,EAAIrI,IAAI,EAAG,KACXqI,EAAI8d,cAAWxuB,GAGZ0Q,CACX,CAEA,SAASwf,GAAclc,GACnB,IAAIrM,EAAQqM,EAAOL,GACfhH,EAASqH,EAAO3M,GAIpB,OAFA2M,EAAOF,QAAUE,EAAOF,SAAWoW,GAAUlW,EAAOJ,IAEtC,OAAVjM,QAA8B3H,IAAX2M,GAAkC,KAAVhF,EACpCoL,EAAc,CAAEvB,WAAW,KAGjB,iBAAV7J,IACPqM,EAAOL,GAAKhM,EAAQqM,EAAOF,QAAQqc,SAASxoB,IAG5CS,EAAST,GACF,IAAIoM,EAAOyW,GAAc7iB,KACzB8I,EAAO9I,GACdqM,EAAOrI,GAAKhE,EACLqI,EAAQrD,GACf2iB,GAAyBtb,GAClBrH,EACP2f,GAA0BtY,GAE1Boc,GAAgBpc,GAGftI,EAAQsI,KACTA,EAAOrI,GAAK,MAGTqI,GACX,CAEA,SAASoc,GAAgBpc,GACrB,IAAIrM,EAAQqM,EAAOL,GACfpD,EAAY5I,GACZqM,EAAOrI,GAAK,IAAIxH,KAAK0L,EAAM6F,OACpBjF,EAAO9I,GACdqM,EAAOrI,GAAK,IAAIxH,KAAKwD,EAAMkJ,WACH,iBAAVlJ,EACdgmB,GAAiB3Z,GACVhE,EAAQrI,IACfqM,EAAO1M,GAAK0D,EAAIrD,EAAMI,MAAM,IAAI,SAAUqI,GACtC,OAAO4O,SAAS5O,EAAK,GACzB,IACA8d,GAAgBla,IACT/D,EAAStI,GAChBooB,GAAiB/b,GACVxD,EAAS7I,GAEhBqM,EAAOrI,GAAK,IAAIxH,KAAKwD,GAErBkI,EAAM+d,wBAAwB5Z,EAEtC,CAEA,SAAS/C,GAAiBtJ,EAAOgF,EAAQoE,EAAQC,EAAQsO,GACrD,IAAIwO,EAAI,CAAC,EA2BT,OAzBe,IAAXnhB,IAA8B,IAAXA,IACnBqE,EAASrE,EACTA,OAAS3M,IAGE,IAAX+Q,IAA8B,IAAXA,IACnBC,EAASD,EACTA,OAAS/Q,IAIRiQ,EAAStI,IAAUwI,EAAcxI,IACjCqI,EAAQrI,IAA2B,IAAjBA,EAAMjG,UAEzBiG,OAAQ3H,GAIZ8tB,EAAEpa,kBAAmB,EACrBoa,EAAEG,QAAUH,EAAEriB,OAAS6T,EACvBwO,EAAEla,GAAK7C,EACP+c,EAAEna,GAAKhM,EACPmmB,EAAEzmB,GAAKsF,EACPmhB,EAAEnb,QAAU3B,EAELif,GAAiBnC,EAC5B,CAEA,SAASc,GAAYjnB,EAAOgF,EAAQoE,EAAQC,GACxC,OAAOC,GAAiBtJ,EAAOgF,EAAQoE,EAAQC,GAAQ,EAC3D,CAxeAnB,EAAM+d,wBAA0BxZ,EAC5B,iSAGA,SAAUJ,GACNA,EAAOrI,GAAK,IAAIxH,KAAK6P,EAAOL,IAAMK,EAAOia,QAAU,OAAS,IAChE,IAsLJpe,EAAMgf,SAAW,WAAa,EAG9Bhf,EAAMif,SAAW,WAAa,EA2S9B,IAAIuB,GAAejc,EACX,sGACA,WACI,IAAIkc,EAAQ1B,GAAYzmB,MAAM,KAAMF,WACpC,OAAInI,KAAK4L,WAAa4kB,EAAM5kB,UACjB4kB,EAAQxwB,KAAOA,KAAOwwB,EAEtBvd,GAEf,IAEJwd,GAAenc,EACX,sGACA,WACI,IAAIkc,EAAQ1B,GAAYzmB,MAAM,KAAMF,WACpC,OAAInI,KAAK4L,WAAa4kB,EAAM5kB,UACjB4kB,EAAQxwB,KAAOA,KAAOwwB,EAEtBvd,GAEf,IAQR,SAASyd,GAAOtlB,EAAIulB,GAChB,IAAI/f,EAAKxP,EAIT,GAHuB,IAAnBuvB,EAAQ/uB,QAAgBsO,EAAQygB,EAAQ,MACxCA,EAAUA,EAAQ,KAEjBA,EAAQ/uB,OACT,OAAOktB,KAGX,IADAle,EAAM+f,EAAQ,GACTvvB,EAAI,EAAGA,EAAIuvB,EAAQ/uB,SAAUR,EACzBuvB,EAAQvvB,GAAGwK,YAAa+kB,EAAQvvB,GAAGgK,GAAIwF,KACxCA,EAAM+f,EAAQvvB,IAGtB,OAAOwP,CACX,CAGA,SAASuS,KAGL,OAAOuN,GAAO,WAFH,GAAGzoB,MAAMC,KAAKC,UAAW,GAGxC,CAEA,SAASyB,KAGL,OAAO8mB,GAAO,UAFH,GAAGzoB,MAAMC,KAAKC,UAAW,GAGxC,CAEA,IAAIyN,GAAM,WACN,OAAOvR,KAAKuR,IAAMvR,KAAKuR,OAAS,IAAIvR,IACxC,EAEIusB,GAAW,CACX,OACA,UACA,QACA,OACA,MACA,OACA,SACA,SACA,eAGJ,SAASC,GAAgBxpB,GACrB,IAAIqN,EAEAtT,EADA0vB,GAAiB,EAEjBC,EAAWH,GAAShvB,OACxB,IAAK8S,KAAOrN,EACR,GACI+I,EAAW/I,EAAGqN,MAEuB,IAAjClL,GAAQtB,KAAK0oB,GAAUlc,IACZ,MAAVrN,EAAEqN,IAAiBhC,MAAMrL,EAAEqN,KAGhC,OAAO,EAIf,IAAKtT,EAAI,EAAGA,EAAI2vB,IAAY3vB,EACxB,GAAIiG,EAAEupB,GAASxvB,IAAK,CAChB,GAAI0vB,EACA,OAAO,EAEPE,WAAW3pB,EAAEupB,GAASxvB,OAASuc,GAAMtW,EAAEupB,GAASxvB,OAChD0vB,GAAiB,EAEzB,CAGJ,OAAO,CACX,CAEA,SAASG,KACL,OAAOjxB,KAAKgT,QAChB,CAEA,SAASke,KACL,OAAOC,GAAeje,IAC1B,CAEA,SAASke,GAASC,GACd,IAAIxW,EAAkBH,GAAqB2W,GACvC/W,EAAQO,EAAgBN,MAAQ,EAChCf,EAAWqB,EAAgBpB,SAAW,EACtC9M,EAASkO,EAAgB9N,OAAS,EAClCmN,EAAQW,EAAgBnL,MAAQmL,EAAgBM,SAAW,EAC3D5C,EAAOsC,EAAgBrC,KAAO,EAC9BQ,EAAQ6B,EAAgB5B,MAAQ,EAChCI,EAAUwB,EAAgBvB,QAAU,EACpCI,EAAUmB,EAAgBlB,QAAU,EACpCR,EAAe0B,EAAgBzB,aAAe,EAElDpZ,KAAKgT,SAAW6d,GAAgBhW,GAGhC7a,KAAKsxB,eACAnY,EACS,IAAVO,EACU,IAAVL,EACQ,IAARL,EAAe,GAAK,GAGxBhZ,KAAKuxB,OAAShZ,EAAe,EAAR2B,EAIrBla,KAAKoiB,SAAWzV,EAAoB,EAAX6M,EAAuB,GAARc,EAExCta,KAAKwxB,MAAQ,CAAC,EAEdxxB,KAAKgU,QAAUoW,KAEfpqB,KAAKyxB,SACT,CAEA,SAASC,GAAWphB,GAChB,OAAOA,aAAe8gB,EAC1B,CAEA,SAASO,GAASliB,GACd,OAAIA,EAAS,GACyB,EAA3BnN,KAAKC,OAAO,EAAIkN,GAEhBnN,KAAKC,MAAMkN,EAE1B,CAGA,SAASmiB,GAAcC,EAAQC,EAAQC,GACnC,IAGI3wB,EAHA0H,EAAMxG,KAAK6gB,IAAI0O,EAAOjwB,OAAQkwB,EAAOlwB,QACrCowB,EAAa1vB,KAAK4H,IAAI2nB,EAAOjwB,OAASkwB,EAAOlwB,QAC7CqwB,EAAQ,EAEZ,IAAK7wB,EAAI,EAAGA,EAAI0H,EAAK1H,KAEZ2wB,GAAeF,EAAOzwB,KAAO0wB,EAAO1wB,KACnC2wB,GAAepU,GAAMkU,EAAOzwB,MAAQuc,GAAMmU,EAAO1wB,MAEnD6wB,IAGR,OAAOA,EAAQD,CACnB,CAIA,SAAStuB,GAAOiT,EAAOub,GACnBxb,EAAeC,EAAO,EAAG,GAAG,WACxB,IAAIjT,EAAS1D,KAAKgK,YACdtI,EAAO,IAKX,OAJIgC,EAAS,IACTA,GAAUA,EACVhC,EAAO,KAGPA,EACAqU,KAAYrS,EAAS,IAAK,GAC1BwuB,EACAnc,IAAWrS,EAAS,GAAI,EAEhC,GACJ,CAEAA,GAAO,IAAK,KACZA,GAAO,KAAM,IAIbmZ,GAAc,IAAKL,IACnBK,GAAc,KAAML,IACpByB,GAAc,CAAC,IAAK,OAAO,SAAUpW,EAAO/F,EAAOoS,GAC/CA,EAAOia,SAAU,EACjBja,EAAOzM,KAAO0qB,GAAiB3V,GAAkB3U,EACrD,IAOA,IAAIuqB,GAAc,kBAElB,SAASD,GAAiBE,EAASlxB,GAC/B,IAEIE,EACAgY,EAHAiZ,GAAWnxB,GAAU,IAAIqC,MAAM6uB,GAKnC,OAAgB,OAAZC,EACO,KAOQ,KAFnBjZ,EAAuB,IADvBhY,IADQixB,EAAQA,EAAQ1wB,OAAS,IAAM,IACtB,IAAI4B,MAAM4uB,KAAgB,CAAC,IAAK,EAAG,IAClC,GAAWzU,GAAMtc,EAAM,KAElB,EAAiB,MAAbA,EAAM,GAAagY,GAAWA,CAC7D,CAGA,SAASkZ,GAAgB1qB,EAAO2qB,GAC5B,IAAI5hB,EAAKxM,EACT,OAAIouB,EAAM7mB,QACNiF,EAAM4hB,EAAMC,QACZruB,GACKkE,EAAST,IAAU8I,EAAO9I,GACrBA,EAAMkJ,UACN+d,GAAYjnB,GAAOkJ,WAAaH,EAAIG,UAE9CH,EAAI/E,GAAG6mB,QAAQ9hB,EAAI/E,GAAGkF,UAAY3M,GAClC2L,EAAMtE,aAAamF,GAAK,GACjBA,GAEAke,GAAYjnB,GAAOqE,OAElC,CAEA,SAASymB,GAActrB,GAGnB,OAAQ/E,KAAKC,MAAM8E,EAAEwE,GAAGlI,oBAC5B,CAoBA,SAASivB,GAAa/qB,EAAOgrB,EAAeC,GACxC,IACIC,EADArvB,EAAS1D,KAAK+T,SAAW,EAE7B,IAAK/T,KAAK4L,UACN,OAAgB,MAAT/D,EAAgB7H,KAAOkT,IAElC,GAAa,MAATrL,EAAe,CACf,GAAqB,iBAAVA,GAEP,GAAc,QADdA,EAAQsqB,GAAiB3V,GAAkB3U,IAEvC,OAAO7H,UAEJsC,KAAK4H,IAAIrC,GAAS,KAAOirB,IAChCjrB,GAAgB,IAwBpB,OAtBK7H,KAAK2L,QAAUknB,IAChBE,EAAcJ,GAAc3yB,OAEhCA,KAAK+T,QAAUlM,EACf7H,KAAK2L,QAAS,EACK,MAAfonB,GACA/yB,KAAKuI,IAAIwqB,EAAa,KAEtBrvB,IAAWmE,KACNgrB,GAAiB7yB,KAAKgzB,kBACvBC,GACIjzB,KACAmxB,GAAetpB,EAAQnE,EAAQ,KAC/B,GACA,GAEI1D,KAAKgzB,oBACbhzB,KAAKgzB,mBAAoB,EACzBjjB,EAAMtE,aAAazL,MAAM,GACzBA,KAAKgzB,kBAAoB,OAG1BhzB,IACX,CACI,OAAOA,KAAK2L,OAASjI,EAASivB,GAAc3yB,KAEpD,CAEA,SAASkzB,GAAWrrB,EAAOgrB,GACvB,OAAa,MAAThrB,GACqB,iBAAVA,IACPA,GAASA,GAGb7H,KAAKgK,UAAUnC,EAAOgrB,GAEf7yB,OAECA,KAAKgK,WAErB,CAEA,SAASmpB,GAAeN,GACpB,OAAO7yB,KAAKgK,UAAU,EAAG6oB,EAC7B,CAEA,SAASO,GAAiBP,GAStB,OARI7yB,KAAK2L,SACL3L,KAAKgK,UAAU,EAAG6oB,GAClB7yB,KAAK2L,QAAS,EAEVknB,GACA7yB,KAAKqzB,SAASV,GAAc3yB,MAAO,MAGpCA,IACX,CAEA,SAASszB,KACL,GAAiB,MAAbtzB,KAAKyH,KACLzH,KAAKgK,UAAUhK,KAAKyH,MAAM,GAAO,QAC9B,GAAuB,iBAAZzH,KAAK6T,GAAiB,CACpC,IAAI0f,EAAQpB,GAAiB5V,GAAavc,KAAK6T,IAClC,MAAT0f,EACAvzB,KAAKgK,UAAUupB,GAEfvzB,KAAKgK,UAAU,GAAG,EAE1B,CACA,OAAOhK,IACX,CAEA,SAASwzB,GAAqB3rB,GAC1B,QAAK7H,KAAK4L,YAGV/D,EAAQA,EAAQinB,GAAYjnB,GAAOmC,YAAc,GAEzChK,KAAKgK,YAAcnC,GAAS,IAAO,EAC/C,CAEA,SAAS4rB,KACL,OACIzzB,KAAKgK,YAAchK,KAAKyyB,QAAQ1lB,MAAM,GAAG/C,aACzChK,KAAKgK,YAAchK,KAAKyyB,QAAQ1lB,MAAM,GAAG/C,WAEjD,CAEA,SAAS0pB,KACL,IAAKjjB,EAAYzQ,KAAK2zB,eAClB,OAAO3zB,KAAK2zB,cAGhB,IACInD,EADAxC,EAAI,CAAC,EAcT,OAXA1a,EAAW0a,EAAGhuB,OACdguB,EAAIoC,GAAcpC,IAEZxmB,IACFgpB,EAAQxC,EAAEriB,OAASqF,EAAUgd,EAAExmB,IAAMsnB,GAAYd,EAAExmB,IACnDxH,KAAK2zB,cACD3zB,KAAK4L,WAAagmB,GAAc5D,EAAExmB,GAAIgpB,EAAMoD,WAAa,GAE7D5zB,KAAK2zB,eAAgB,EAGlB3zB,KAAK2zB,aAChB,CAEA,SAASE,KACL,QAAO7zB,KAAK4L,YAAa5L,KAAK2L,MAClC,CAEA,SAASmoB,KACL,QAAO9zB,KAAK4L,WAAY5L,KAAK2L,MACjC,CAEA,SAASooB,KACL,QAAO/zB,KAAK4L,WAAY5L,KAAK2L,QAA2B,IAAjB3L,KAAK+T,OAChD,CArJAhE,EAAMtE,aAAe,WAAa,EAwJlC,IAAIuoB,GAAc,wDAIdC,GACI,sKAER,SAAS9C,GAAetpB,EAAO6M,GAC3B,IAGIhT,EACAwyB,EACAC,EALA9C,EAAWxpB,EAEXrE,EAAQ,KAkEZ,OA7DIkuB,GAAW7pB,GACXwpB,EAAW,CACPnY,GAAIrR,EAAMypB,cACVviB,EAAGlH,EAAM0pB,MACTpiB,EAAGtH,EAAMua,SAEN1R,EAAS7I,KAAW6K,OAAO7K,IAClCwpB,EAAW,CAAC,EACR3c,EACA2c,EAAS3c,IAAQ7M,EAEjBwpB,EAASlY,cAAgBtR,IAErBrE,EAAQwwB,GAAY3H,KAAKxkB,KACjCnG,EAAoB,MAAb8B,EAAM,IAAc,EAAI,EAC/B6tB,EAAW,CACPhiB,EAAG,EACHN,EAAG4O,GAAMna,EAAMib,KAAS/c,EACxBmN,EAAG8O,GAAMna,EAAMkb,KAAShd,EACxB2F,EAAGsW,GAAMna,EAAMmb,KAAWjd,EAC1BgN,EAAGiP,GAAMna,EAAMob,KAAWld,EAC1BwX,GAAIyE,GAAMgU,GAA8B,IAArBnuB,EAAMqb,MAAwBnd,KAE7C8B,EAAQywB,GAAS5H,KAAKxkB,KAC9BnG,EAAoB,MAAb8B,EAAM,IAAc,EAAI,EAC/B6tB,EAAW,CACPhiB,EAAG+kB,GAAS5wB,EAAM,GAAI9B,GACtByN,EAAGilB,GAAS5wB,EAAM,GAAI9B,GACtBuN,EAAGmlB,GAAS5wB,EAAM,GAAI9B,GACtBqN,EAAGqlB,GAAS5wB,EAAM,GAAI9B,GACtBmN,EAAGulB,GAAS5wB,EAAM,GAAI9B,GACtB2F,EAAG+sB,GAAS5wB,EAAM,GAAI9B,GACtBgN,EAAG0lB,GAAS5wB,EAAM,GAAI9B,KAEP,MAAZ2vB,EAEPA,EAAW,CAAC,EAEQ,iBAAbA,IACN,SAAUA,GAAY,OAAQA,KAE/B8C,EAAUE,GACNvF,GAAYuC,EAAS7d,MACrBsb,GAAYuC,EAAS9d,MAGzB8d,EAAW,CAAC,GACHnY,GAAKib,EAAQhb,aACtBkY,EAASliB,EAAIglB,EAAQxnB,QAGzBunB,EAAM,IAAI9C,GAASC,GAEfK,GAAW7pB,IAAUuI,EAAWvI,EAAO,aACvCqsB,EAAIlgB,QAAUnM,EAAMmM,SAGpB0d,GAAW7pB,IAAUuI,EAAWvI,EAAO,cACvCqsB,EAAIlhB,SAAWnL,EAAMmL,UAGlBkhB,CACX,CAKA,SAASE,GAASE,EAAK5yB,GAInB,IAAIkP,EAAM0jB,GAAOtD,WAAWsD,EAAI7tB,QAAQ,IAAK,MAE7C,OAAQiM,MAAM9B,GAAO,EAAIA,GAAOlP,CACpC,CAEA,SAAS6yB,GAA0BC,EAAMhE,GACrC,IAAI5f,EAAM,CAAC,EAUX,OARAA,EAAIjE,OACA6jB,EAAMzjB,QAAUynB,EAAKznB,QAAyC,IAA9ByjB,EAAMjW,OAASia,EAAKja,QACpDia,EAAK/B,QAAQlqB,IAAIqI,EAAIjE,OAAQ,KAAK8nB,QAAQjE,MACxC5f,EAAIjE,OAGViE,EAAIuI,cAAgBqX,GAASgE,EAAK/B,QAAQlqB,IAAIqI,EAAIjE,OAAQ,KAEnDiE,CACX,CAEA,SAASyjB,GAAkBG,EAAMhE,GAC7B,IAAI5f,EACJ,OAAM4jB,EAAK5oB,WAAa4kB,EAAM5kB,WAI9B4kB,EAAQ+B,GAAgB/B,EAAOgE,GAC3BA,EAAKE,SAASlE,GACd5f,EAAM2jB,GAA0BC,EAAMhE,KAEtC5f,EAAM2jB,GAA0B/D,EAAOgE,IACnCrb,cAAgBvI,EAAIuI,aACxBvI,EAAIjE,QAAUiE,EAAIjE,QAGfiE,GAZI,CAAEuI,aAAc,EAAGxM,OAAQ,EAa1C,CAGA,SAASgoB,GAAYC,EAAWlyB,GAC5B,OAAO,SAAUgR,EAAKmhB,GAClB,IAASC,EAmBT,OAjBe,OAAXD,GAAoBniB,OAAOmiB,KAC3B/f,EACIpS,EACA,YACIA,EACA,uDACAA,EAHJ,kGAOJoyB,EAAMphB,EACNA,EAAMmhB,EACNA,EAASC,GAIb7B,GAAYjzB,KADNmxB,GAAezd,EAAKmhB,GACHD,GAChB50B,IACX,CACJ,CAEA,SAASizB,GAAYlpB,EAAKsnB,EAAU0D,EAAUtpB,GAC1C,IAAI0N,EAAekY,EAASC,cACxB/Y,EAAOoZ,GAASN,EAASE,OACzB5kB,EAASglB,GAASN,EAASjP,SAE1BrY,EAAI6B,YAKTH,EAA+B,MAAhBA,GAA8BA,EAEzCkB,GACAuW,GAASnZ,EAAKwV,GAAIxV,EAAK,SAAW4C,EAASooB,GAE3Cxc,GACA+G,GAAMvV,EAAK,OAAQwV,GAAIxV,EAAK,QAAUwO,EAAOwc,GAE7C5b,GACApP,EAAI8B,GAAG6mB,QAAQ3oB,EAAI8B,GAAGkF,UAAYoI,EAAe4b,GAEjDtpB,GACAsE,EAAMtE,aAAa1B,EAAKwO,GAAQ5L,GAExC,CA9FAwkB,GAAe/lB,GAAKgmB,GAASppB,UAC7BmpB,GAAe6D,QAAU9D,GA+FzB,IAAI3oB,GAAMosB,GAAY,EAAG,OACrBtB,GAAWsB,IAAa,EAAG,YAE/B,SAASM,GAASptB,GACd,MAAwB,iBAAVA,GAAsBA,aAAiBqtB,MACzD,CAGA,SAASC,GAActtB,GACnB,OACIS,EAAST,IACT8I,EAAO9I,IACPotB,GAASptB,IACT6I,EAAS7I,IACTutB,GAAsBvtB,IACtBwtB,GAAoBxtB,IANjB,MAOHA,CAGR,CAEA,SAASwtB,GAAoBxtB,GACzB,IA4BIzG,EACAk0B,EA7BAC,EAAaplB,EAAStI,KAAWwI,EAAcxI,GAC/C2tB,GAAe,EACfC,EAAa,CACT,QACA,OACA,IACA,SACA,QACA,IACA,OACA,MACA,IACA,QACA,OACA,IACA,QACA,OACA,IACA,UACA,SACA,IACA,UACA,SACA,IACA,eACA,cACA,MAIJC,EAAcD,EAAW7zB,OAE7B,IAAKR,EAAI,EAAGA,EAAIs0B,EAAat0B,GAAK,EAC9Bk0B,EAAWG,EAAWr0B,GACtBo0B,EAAeA,GAAgBplB,EAAWvI,EAAOytB,GAGrD,OAAOC,GAAcC,CACzB,CAEA,SAASJ,GAAsBvtB,GAC3B,IAAI8tB,EAAYzlB,EAAQrI,GACpB+tB,GAAe,EAOnB,OANID,IACAC,EAGkB,IAFd/tB,EAAMyB,QAAO,SAAUusB,GACnB,OAAQnlB,EAASmlB,IAASZ,GAASptB,EACvC,IAAGjG,QAEJ+zB,GAAaC,CACxB,CAEA,SAASE,GAAejuB,GACpB,IAUIzG,EACAk0B,EAXAC,EAAaplB,EAAStI,KAAWwI,EAAcxI,GAC/C2tB,GAAe,EACfC,EAAa,CACT,UACA,UACA,UACA,WACA,WACA,YAKR,IAAKr0B,EAAI,EAAGA,EAAIq0B,EAAW7zB,OAAQR,GAAK,EACpCk0B,EAAWG,EAAWr0B,GACtBo0B,EAAeA,GAAgBplB,EAAWvI,EAAOytB,GAGrD,OAAOC,GAAcC,CACzB,CAEA,SAASO,GAAkBC,EAAUpgB,GACjC,IAAIxR,EAAO4xB,EAAS5xB,KAAKwR,EAAK,QAAQ,GACtC,OAAOxR,GAAQ,EACT,WACAA,GAAQ,EACN,WACAA,EAAO,EACL,UACAA,EAAO,EACL,UACAA,EAAO,EACL,UACAA,EAAO,EACL,WACA,UACpB,CAEA,SAAS6xB,GAAWC,EAAMC,GAEG,IAArBhuB,UAAUvG,SACLuG,UAAU,GAGJgtB,GAAchtB,UAAU,KAC/B+tB,EAAO/tB,UAAU,GACjBguB,OAAUj2B,GACH41B,GAAe3tB,UAAU,MAChCguB,EAAUhuB,UAAU,GACpB+tB,OAAOh2B,IAPPg2B,OAAOh2B,EACPi2B,OAAUj2B,IAWlB,IAAI0V,EAAMsgB,GAAQpH,KACdsH,EAAM7D,GAAgB3c,EAAK5V,MAAMq2B,QAAQ,OACzCxpB,EAASkD,EAAMumB,eAAet2B,KAAMo2B,IAAQ,WAC5CvgB,EACIsgB,IACCphB,EAAWohB,EAAQtpB,IACdspB,EAAQtpB,GAAQ3E,KAAKlI,KAAM4V,GAC3BugB,EAAQtpB,IAEtB,OAAO7M,KAAK6M,OACRgJ,GAAU7V,KAAK8W,aAAa9I,SAASnB,EAAQ7M,KAAM8uB,GAAYlZ,IAEvE,CAEA,SAAS6c,KACL,OAAO,IAAIxe,EAAOjU,KACtB,CAEA,SAASy0B,GAAQ5sB,EAAO4S,GACpB,IAAI8b,EAAajuB,EAAST,GAASA,EAAQinB,GAAYjnB,GACvD,SAAM7H,KAAK4L,YAAa2qB,EAAW3qB,aAIrB,iBADd6O,EAAQD,GAAeC,IAAU,eAEtBza,KAAK+Q,UAAYwlB,EAAWxlB,UAE5BwlB,EAAWxlB,UAAY/Q,KAAKyyB,QAAQ4D,QAAQ5b,GAAO1J,UAElE,CAEA,SAAS2jB,GAAS7sB,EAAO4S,GACrB,IAAI8b,EAAajuB,EAAST,GAASA,EAAQinB,GAAYjnB,GACvD,SAAM7H,KAAK4L,YAAa2qB,EAAW3qB,aAIrB,iBADd6O,EAAQD,GAAeC,IAAU,eAEtBza,KAAK+Q,UAAYwlB,EAAWxlB,UAE5B/Q,KAAKyyB,QAAQ+D,MAAM/b,GAAO1J,UAAYwlB,EAAWxlB,UAEhE,CAEA,SAAS0lB,GAAUjjB,EAAMD,EAAIkH,EAAOic,GAChC,IAAIC,EAAYruB,EAASkL,GAAQA,EAAOsb,GAAYtb,GAChDojB,EAAUtuB,EAASiL,GAAMA,EAAKub,GAAYvb,GAC9C,SAAMvT,KAAK4L,WAAa+qB,EAAU/qB,WAAagrB,EAAQhrB,aAK/B,OAFxB8qB,EAAcA,GAAe,MAEZ,GACP12B,KAAKy0B,QAAQkC,EAAWlc,IACvBza,KAAK00B,SAASiC,EAAWlc,MACZ,MAAnBic,EAAY,GACP12B,KAAK00B,SAASkC,EAASnc,IACtBza,KAAKy0B,QAAQmC,EAASnc,GAErC,CAEA,SAASoc,GAAOhvB,EAAO4S,GACnB,IACIqc,EADAP,EAAajuB,EAAST,GAASA,EAAQinB,GAAYjnB,GAEvD,SAAM7H,KAAK4L,YAAa2qB,EAAW3qB,aAIrB,iBADd6O,EAAQD,GAAeC,IAAU,eAEtBza,KAAK+Q,YAAcwlB,EAAWxlB,WAErC+lB,EAAUP,EAAWxlB,UAEjB/Q,KAAKyyB,QAAQ4D,QAAQ5b,GAAO1J,WAAa+lB,GACzCA,GAAW92B,KAAKyyB,QAAQ+D,MAAM/b,GAAO1J,WAGjD,CAEA,SAASgmB,GAAclvB,EAAO4S,GAC1B,OAAOza,KAAK62B,OAAOhvB,EAAO4S,IAAUza,KAAKy0B,QAAQ5sB,EAAO4S,EAC5D,CAEA,SAASuc,GAAenvB,EAAO4S,GAC3B,OAAOza,KAAK62B,OAAOhvB,EAAO4S,IAAUza,KAAK00B,SAAS7sB,EAAO4S,EAC7D,CAEA,SAASrW,GAAKyD,EAAO4S,EAAOwc,GACxB,IAAIC,EAAMC,EAAWthB,EAErB,IAAK7V,KAAK4L,UACN,OAAOsH,IAKX,KAFAgkB,EAAO3E,GAAgB1qB,EAAO7H,OAEpB4L,UACN,OAAOsH,IAOX,OAJAikB,EAAoD,KAAvCD,EAAKltB,YAAchK,KAAKgK,aAErCyQ,EAAQD,GAAeC,IAGnB,IAAK,OACD5E,EAASuhB,GAAUp3B,KAAMk3B,GAAQ,GACjC,MACJ,IAAK,QACDrhB,EAASuhB,GAAUp3B,KAAMk3B,GACzB,MACJ,IAAK,UACDrhB,EAASuhB,GAAUp3B,KAAMk3B,GAAQ,EACjC,MACJ,IAAK,SACDrhB,GAAU7V,KAAOk3B,GAAQ,IACzB,MACJ,IAAK,SACDrhB,GAAU7V,KAAOk3B,GAAQ,IACzB,MACJ,IAAK,OACDrhB,GAAU7V,KAAOk3B,GAAQ,KACzB,MACJ,IAAK,MACDrhB,GAAU7V,KAAOk3B,EAAOC,GAAa,MACrC,MACJ,IAAK,OACDthB,GAAU7V,KAAOk3B,EAAOC,GAAa,OACrC,MACJ,QACIthB,EAAS7V,KAAOk3B,EAGxB,OAAOD,EAAUphB,EAAS4H,GAAS5H,EACvC,CAEA,SAASuhB,GAAU7yB,EAAGC,GAClB,GAAID,EAAE+T,OAAS9T,EAAE8T,OAGb,OAAQ8e,GAAU5yB,EAAGD,GAGzB,IAAI8yB,EAAyC,IAAvB7yB,EAAE+V,OAAShW,EAAEgW,SAAgB/V,EAAEuI,QAAUxI,EAAEwI,SAE7DuqB,EAAS/yB,EAAEkuB,QAAQlqB,IAAI8uB,EAAgB,UAe3C,QAASA,GAXL7yB,EAAI8yB,EAAS,GAGH9yB,EAAI8yB,IAAWA,EAFf/yB,EAAEkuB,QAAQlqB,IAAI8uB,EAAiB,EAAG,YAMlC7yB,EAAI8yB,IAFJ/yB,EAAEkuB,QAAQlqB,IAAI8uB,EAAiB,EAAG,UAETC,MAIF,CACzC,CAKA,SAASjrB,KACL,OAAOrM,KAAKyyB,QAAQxhB,OAAO,MAAMpE,OAAO,mCAC5C,CAEA,SAAS0qB,GAAYC,GACjB,IAAKx3B,KAAK4L,UACN,OAAO,KAEX,IAAIxD,GAAqB,IAAfovB,EACNnwB,EAAIe,EAAMpI,KAAKyyB,QAAQrqB,MAAQpI,KACnC,OAAIqH,EAAEkT,OAAS,GAAKlT,EAAEkT,OAAS,KACpBtD,EACH5P,EACAe,EACM,iCACA,gCAGV2M,EAAW1Q,KAAK2D,UAAUuvB,aAEtBnvB,EACOpI,KAAKy3B,SAASF,cAEd,IAAIlzB,KAAKrE,KAAK+Q,UAA+B,GAAnB/Q,KAAKgK,YAAmB,KACpDutB,cACA9wB,QAAQ,IAAKwQ,EAAa5P,EAAG,MAGnC4P,EACH5P,EACAe,EAAM,+BAAiC,6BAE/C,CAQA,SAASsvB,KACL,IAAK13B,KAAK4L,UACN,MAAO,qBAAuB5L,KAAK6T,GAAK,OAE5C,IAEI8jB,EACApd,EACAqd,EACAC,EALAhhB,EAAO,SACPhT,EAAO,GAcX,OATK7D,KAAK6zB,YACNhd,EAA4B,IAArB7W,KAAKgK,YAAoB,aAAe,mBAC/CnG,EAAO,KAEX8zB,EAAS,IAAM9gB,EAAO,MACtB0D,EAAO,GAAKva,KAAKua,QAAUva,KAAKua,QAAU,KAAO,OAAS,SAC1Dqd,EAAW,wBACXC,EAASh0B,EAAO,OAET7D,KAAK6M,OAAO8qB,EAASpd,EAAOqd,EAAWC,EAClD,CAEA,SAAShrB,GAAOirB,GACPA,IACDA,EAAc93B,KAAK+zB,QACbhkB,EAAMgoB,iBACNhoB,EAAMioB,eAEhB,IAAIniB,EAASoB,EAAajX,KAAM83B,GAChC,OAAO93B,KAAK8W,aAAamhB,WAAWpiB,EACxC,CAEA,SAASrC,GAAK0iB,EAAMle,GAChB,OACIhY,KAAK4L,YACHtD,EAAS4tB,IAASA,EAAKtqB,WAAckjB,GAAYoH,GAAMtqB,WAElDulB,GAAe,CAAE5d,GAAIvT,KAAMwT,KAAM0iB,IACnCjlB,OAAOjR,KAAKiR,UACZinB,UAAUlgB,GAERhY,KAAK8W,aAAaK,aAEjC,CAEA,SAASghB,GAAQngB,GACb,OAAOhY,KAAKwT,KAAKsb,KAAe9W,EACpC,CAEA,SAASzE,GAAG2iB,EAAMle,GACd,OACIhY,KAAK4L,YACHtD,EAAS4tB,IAASA,EAAKtqB,WAAckjB,GAAYoH,GAAMtqB,WAElDulB,GAAe,CAAE3d,KAAMxT,KAAMuT,GAAI2iB,IACnCjlB,OAAOjR,KAAKiR,UACZinB,UAAUlgB,GAERhY,KAAK8W,aAAaK,aAEjC,CAEA,SAASihB,GAAMpgB,GACX,OAAOhY,KAAKuT,GAAGub,KAAe9W,EAClC,CAKA,SAAS/G,GAAOyD,GACZ,IAAI2jB,EAEJ,YAAYn4B,IAARwU,EACO1U,KAAKgU,QAAQiW,OAGC,OADrBoO,EAAgBjO,GAAU1V,MAEtB1U,KAAKgU,QAAUqkB,GAEZr4B,KAEf,CA5HA+P,EAAMioB,cAAgB,uBACtBjoB,EAAMgoB,iBAAmB,yBA6HzB,IAAIO,GAAOhkB,EACP,mJACA,SAAUI,GACN,YAAYxU,IAARwU,EACO1U,KAAK8W,aAEL9W,KAAKiR,OAAOyD,EAE3B,IAGJ,SAASoC,KACL,OAAO9W,KAAKgU,OAChB,CAEA,IAAIukB,GAAgB,IAChBC,GAAgB,GAAKD,GACrBE,GAAc,GAAKD,GACnBE,GAAmB,QAAwBD,GAG/C,SAASE,GAAMC,EAAUC,GACrB,OAASD,EAAWC,EAAWA,GAAWA,CAC9C,CAEA,SAASC,GAAiBzpB,EAAGhI,EAAG0H,GAE5B,OAAIM,EAAI,KAAOA,GAAK,EAET,IAAIhL,KAAKgL,EAAI,IAAKhI,EAAG0H,GAAK2pB,GAE1B,IAAIr0B,KAAKgL,EAAGhI,EAAG0H,GAAGgC,SAEjC,CAEA,SAASgoB,GAAe1pB,EAAGhI,EAAG0H,GAE1B,OAAIM,EAAI,KAAOA,GAAK,EAEThL,KAAK+f,IAAI/U,EAAI,IAAKhI,EAAG0H,GAAK2pB,GAE1Br0B,KAAK+f,IAAI/U,EAAGhI,EAAG0H,EAE9B,CAEA,SAASsnB,GAAQ5b,GACb,IAAIyb,EAAM8C,EAEV,QAAc94B,KADdua,EAAQD,GAAeC,KACc,gBAAVA,IAA4Bza,KAAK4L,UACxD,OAAO5L,KAKX,OAFAg5B,EAAch5B,KAAK2L,OAASotB,GAAiBD,GAErCre,GACJ,IAAK,OACDyb,EAAO8C,EAAYh5B,KAAKua,OAAQ,EAAG,GACnC,MACJ,IAAK,UACD2b,EAAO8C,EACHh5B,KAAKua,OACLva,KAAK+M,QAAW/M,KAAK+M,QAAU,EAC/B,GAEJ,MACJ,IAAK,QACDmpB,EAAO8C,EAAYh5B,KAAKua,OAAQva,KAAK+M,QAAS,GAC9C,MACJ,IAAK,OACDmpB,EAAO8C,EACHh5B,KAAKua,OACLva,KAAK+M,QACL/M,KAAKsY,OAAStY,KAAKyY,WAEvB,MACJ,IAAK,UACDyd,EAAO8C,EACHh5B,KAAKua,OACLva,KAAK+M,QACL/M,KAAKsY,QAAUtY,KAAK+a,aAAe,IAEvC,MACJ,IAAK,MACL,IAAK,OACDmb,EAAO8C,EAAYh5B,KAAKua,OAAQva,KAAK+M,QAAS/M,KAAKsY,QACnD,MACJ,IAAK,OACD4d,EAAOl2B,KAAK6L,GAAGkF,UACfmlB,GAAQyC,GACJzC,GAAQl2B,KAAK2L,OAAS,EAAI3L,KAAKgK,YAAcwuB,IAC7CC,IAEJ,MACJ,IAAK,SACDvC,EAAOl2B,KAAK6L,GAAGkF,UACfmlB,GAAQyC,GAAMzC,EAAMsC,IACpB,MACJ,IAAK,SACDtC,EAAOl2B,KAAK6L,GAAGkF,UACfmlB,GAAQyC,GAAMzC,EAAMqC,IAM5B,OAFAv4B,KAAK6L,GAAG6mB,QAAQwD,GAChBnmB,EAAMtE,aAAazL,MAAM,GAClBA,IACX,CAEA,SAASw2B,GAAM/b,GACX,IAAIyb,EAAM8C,EAEV,QAAc94B,KADdua,EAAQD,GAAeC,KACc,gBAAVA,IAA4Bza,KAAK4L,UACxD,OAAO5L,KAKX,OAFAg5B,EAAch5B,KAAK2L,OAASotB,GAAiBD,GAErCre,GACJ,IAAK,OACDyb,EAAO8C,EAAYh5B,KAAKua,OAAS,EAAG,EAAG,GAAK,EAC5C,MACJ,IAAK,UACD2b,EACI8C,EACIh5B,KAAKua,OACLva,KAAK+M,QAAW/M,KAAK+M,QAAU,EAAK,EACpC,GACA,EACR,MACJ,IAAK,QACDmpB,EAAO8C,EAAYh5B,KAAKua,OAAQva,KAAK+M,QAAU,EAAG,GAAK,EACvD,MACJ,IAAK,OACDmpB,EACI8C,EACIh5B,KAAKua,OACLva,KAAK+M,QACL/M,KAAKsY,OAAStY,KAAKyY,UAAY,GAC/B,EACR,MACJ,IAAK,UACDyd,EACI8C,EACIh5B,KAAKua,OACLva,KAAK+M,QACL/M,KAAKsY,QAAUtY,KAAK+a,aAAe,GAAK,GACxC,EACR,MACJ,IAAK,MACL,IAAK,OACDmb,EAAO8C,EAAYh5B,KAAKua,OAAQva,KAAK+M,QAAS/M,KAAKsY,OAAS,GAAK,EACjE,MACJ,IAAK,OACD4d,EAAOl2B,KAAK6L,GAAGkF,UACfmlB,GACIuC,GACAE,GACIzC,GAAQl2B,KAAK2L,OAAS,EAAI3L,KAAKgK,YAAcwuB,IAC7CC,IAEJ,EACJ,MACJ,IAAK,SACDvC,EAAOl2B,KAAK6L,GAAGkF,UACfmlB,GAAQsC,GAAgBG,GAAMzC,EAAMsC,IAAiB,EACrD,MACJ,IAAK,SACDtC,EAAOl2B,KAAK6L,GAAGkF,UACfmlB,GAAQqC,GAAgBI,GAAMzC,EAAMqC,IAAiB,EAM7D,OAFAv4B,KAAK6L,GAAG6mB,QAAQwD,GAChBnmB,EAAMtE,aAAazL,MAAM,GAClBA,IACX,CAEA,SAAS+Q,KACL,OAAO/Q,KAAK6L,GAAGkF,UAAkC,KAArB/Q,KAAK+T,SAAW,EAChD,CAEA,SAASklB,KACL,OAAO32B,KAAK2G,MAAMjJ,KAAK+Q,UAAY,IACvC,CAEA,SAAS0mB,KACL,OAAO,IAAIpzB,KAAKrE,KAAK+Q,UACzB,CAEA,SAAS6iB,KACL,IAAIvsB,EAAIrH,KACR,MAAO,CACHqH,EAAEkT,OACFlT,EAAE0F,QACF1F,EAAEiR,OACFjR,EAAE4R,OACF5R,EAAEiS,SACFjS,EAAEsS,SACFtS,EAAE+R,cAEV,CAEA,SAAS8f,KACL,IAAI7xB,EAAIrH,KACR,MAAO,CACHsa,MAAOjT,EAAEkT,OACT5N,OAAQtF,EAAE0F,QACVuL,KAAMjR,EAAEiR,OACRU,MAAO3R,EAAE2R,QACTK,QAAShS,EAAEgS,UACXK,QAASrS,EAAEqS,UACXP,aAAc9R,EAAE8R,eAExB,CAEA,SAASggB,KAEL,OAAOn5B,KAAK4L,UAAY5L,KAAKu3B,cAAgB,IACjD,CAEA,SAAS6B,KACL,OAAOxtB,EAAQ5L,KACnB,CAEA,SAASq5B,KACL,OAAOvoB,EAAO,CAAC,EAAGuB,EAAgBrS,MACtC,CAEA,SAASs5B,KACL,OAAOjnB,EAAgBrS,MAAMwR,QACjC,CAEA,SAAS+nB,KACL,MAAO,CACH1xB,MAAO7H,KAAK6T,GACZhH,OAAQ7M,KAAKuH,GACb0J,OAAQjR,KAAKgU,QACbwL,MAAOxf,KAAK2L,OACZuF,OAAQlR,KAAK6S,QAErB,CAmDA,SAAS2mB,GAAWnyB,EAAGwF,GACnB,IAAIzL,EACA4qB,EACA1T,EACAmhB,EAAOz5B,KAAK05B,OAAStP,GAAU,MAAMsP,MACzC,IAAKt4B,EAAI,EAAG4qB,EAAIyN,EAAK73B,OAAQR,EAAI4qB,IAAK5qB,EASlC,OAPS,iBADMq4B,EAAKr4B,GAAGu4B,QAGfrhB,EAAOvI,EAAM0pB,EAAKr4B,GAAGu4B,OAAOtD,QAAQ,OACpCoD,EAAKr4B,GAAGu4B,MAAQrhB,EAAKvH,kBAId0oB,EAAKr4B,GAAGw4B,OACnB,IAAK,YACDH,EAAKr4B,GAAGw4B,MAAQ,IAChB,MACJ,IAAK,SAEDthB,EAAOvI,EAAM0pB,EAAKr4B,GAAGw4B,OAAOvD,QAAQ,OAAOtlB,UAC3C0oB,EAAKr4B,GAAGw4B,MAAQthB,EAAKvH,UAIjC,OAAO0oB,CACX,CAEA,SAASI,GAAgBC,EAASjtB,EAAQqE,GACtC,IAAI9P,EACA4qB,EAEAtpB,EACAa,EACAw2B,EAHAN,EAAOz5B,KAAKy5B,OAMhB,IAFAK,EAAUA,EAAQrvB,cAEbrJ,EAAI,EAAG4qB,EAAIyN,EAAK73B,OAAQR,EAAI4qB,IAAK5qB,EAKlC,GAJAsB,EAAO+2B,EAAKr4B,GAAGsB,KAAK+H,cACpBlH,EAAOk2B,EAAKr4B,GAAGmC,KAAKkH,cACpBsvB,EAASN,EAAKr4B,GAAG24B,OAAOtvB,cAEpByG,EACA,OAAQrE,GACJ,IAAK,IACL,IAAK,KACL,IAAK,MACD,GAAItJ,IAASu2B,EACT,OAAOL,EAAKr4B,GAEhB,MAEJ,IAAK,OACD,GAAIsB,IAASo3B,EACT,OAAOL,EAAKr4B,GAEhB,MAEJ,IAAK,QACD,GAAI24B,IAAWD,EACX,OAAOL,EAAKr4B,QAIrB,GAAI,CAACsB,EAAMa,EAAMw2B,GAAQvwB,QAAQswB,IAAY,EAChD,OAAOL,EAAKr4B,EAGxB,CAEA,SAAS44B,GAAsB/nB,EAAKsI,GAChC,IAAI0f,EAAMhoB,EAAI0nB,OAAS1nB,EAAI2nB,MAAQ,GAAM,EACzC,YAAa15B,IAATqa,EACOxK,EAAMkC,EAAI0nB,OAAOpf,OAEjBxK,EAAMkC,EAAI0nB,OAAOpf,QAAUA,EAAOtI,EAAIvO,QAAUu2B,CAE/D,CAEA,SAASC,KACL,IAAI94B,EACA4qB,EACAtY,EACA+lB,EAAOz5B,KAAK8W,aAAa2iB,OAC7B,IAAKr4B,EAAI,EAAG4qB,EAAIyN,EAAK73B,OAAQR,EAAI4qB,IAAK5qB,EAAG,CAIrC,GAFAsS,EAAM1T,KAAKyyB,QAAQ4D,QAAQ,OAAOtlB,UAE9B0oB,EAAKr4B,GAAGu4B,OAASjmB,GAAOA,GAAO+lB,EAAKr4B,GAAGw4B,MACvC,OAAOH,EAAKr4B,GAAGsB,KAEnB,GAAI+2B,EAAKr4B,GAAGw4B,OAASlmB,GAAOA,GAAO+lB,EAAKr4B,GAAGu4B,MACvC,OAAOF,EAAKr4B,GAAGsB,IAEvB,CAEA,MAAO,EACX,CAEA,SAASy3B,KACL,IAAI/4B,EACA4qB,EACAtY,EACA+lB,EAAOz5B,KAAK8W,aAAa2iB,OAC7B,IAAKr4B,EAAI,EAAG4qB,EAAIyN,EAAK73B,OAAQR,EAAI4qB,IAAK5qB,EAAG,CAIrC,GAFAsS,EAAM1T,KAAKyyB,QAAQ4D,QAAQ,OAAOtlB,UAE9B0oB,EAAKr4B,GAAGu4B,OAASjmB,GAAOA,GAAO+lB,EAAKr4B,GAAGw4B,MACvC,OAAOH,EAAKr4B,GAAG24B,OAEnB,GAAIN,EAAKr4B,GAAGw4B,OAASlmB,GAAOA,GAAO+lB,EAAKr4B,GAAGu4B,MACvC,OAAOF,EAAKr4B,GAAG24B,MAEvB,CAEA,MAAO,EACX,CAEA,SAASK,KACL,IAAIh5B,EACA4qB,EACAtY,EACA+lB,EAAOz5B,KAAK8W,aAAa2iB,OAC7B,IAAKr4B,EAAI,EAAG4qB,EAAIyN,EAAK73B,OAAQR,EAAI4qB,IAAK5qB,EAAG,CAIrC,GAFAsS,EAAM1T,KAAKyyB,QAAQ4D,QAAQ,OAAOtlB,UAE9B0oB,EAAKr4B,GAAGu4B,OAASjmB,GAAOA,GAAO+lB,EAAKr4B,GAAGw4B,MACvC,OAAOH,EAAKr4B,GAAGmC,KAEnB,GAAIk2B,EAAKr4B,GAAGw4B,OAASlmB,GAAOA,GAAO+lB,EAAKr4B,GAAGu4B,MACvC,OAAOF,EAAKr4B,GAAGmC,IAEvB,CAEA,MAAO,EACX,CAEA,SAAS82B,KACL,IAAIj5B,EACA4qB,EACAiO,EACAvmB,EACA+lB,EAAOz5B,KAAK8W,aAAa2iB,OAC7B,IAAKr4B,EAAI,EAAG4qB,EAAIyN,EAAK73B,OAAQR,EAAI4qB,IAAK5qB,EAMlC,GALA64B,EAAMR,EAAKr4B,GAAGu4B,OAASF,EAAKr4B,GAAGw4B,MAAQ,GAAM,EAG7ClmB,EAAM1T,KAAKyyB,QAAQ4D,QAAQ,OAAOtlB,UAG7B0oB,EAAKr4B,GAAGu4B,OAASjmB,GAAOA,GAAO+lB,EAAKr4B,GAAGw4B,OACvCH,EAAKr4B,GAAGw4B,OAASlmB,GAAOA,GAAO+lB,EAAKr4B,GAAGu4B,MAExC,OACK35B,KAAKua,OAASxK,EAAM0pB,EAAKr4B,GAAGu4B,OAAOpf,QAAU0f,EAC9CR,EAAKr4B,GAAGsC,OAKpB,OAAO1D,KAAKua,MAChB,CAEA,SAAS+f,GAActd,GAInB,OAHK5M,EAAWpQ,KAAM,mBAClBu6B,GAAiBryB,KAAKlI,MAEnBgd,EAAWhd,KAAKw6B,eAAiBx6B,KAAKy6B,UACjD,CAEA,SAASC,GAAc1d,GAInB,OAHK5M,EAAWpQ,KAAM,mBAClBu6B,GAAiBryB,KAAKlI,MAEnBgd,EAAWhd,KAAK26B,eAAiB36B,KAAKy6B,UACjD,CAEA,SAASG,GAAgB5d,GAIrB,OAHK5M,EAAWpQ,KAAM,qBAClBu6B,GAAiBryB,KAAKlI,MAEnBgd,EAAWhd,KAAK66B,iBAAmB76B,KAAKy6B,UACnD,CAEA,SAASK,GAAa9d,EAAU/L,GAC5B,OAAOA,EAAOypB,cAAc1d,EAChC,CAEA,SAAS+d,GAAa/d,EAAU/L,GAC5B,OAAOA,EAAOqpB,cAActd,EAChC,CAEA,SAASge,GAAehe,EAAU/L,GAC9B,OAAOA,EAAO2pB,gBAAgB5d,EAClC,CAEA,SAASie,GAAoBje,EAAU/L,GACnC,OAAOA,EAAOiqB,sBAAwB7e,EAC1C,CAEA,SAASke,KACL,IAIIn5B,EACA4qB,EACAmP,EACAC,EACAC,EARAC,EAAa,GACbC,EAAa,GACbC,EAAe,GACfvX,EAAc,GAMdwV,EAAOz5B,KAAKy5B,OAEhB,IAAKr4B,EAAI,EAAG4qB,EAAIyN,EAAK73B,OAAQR,EAAI4qB,IAAK5qB,EAClC+5B,EAAWhe,GAAYsc,EAAKr4B,GAAGsB,MAC/B04B,EAAWje,GAAYsc,EAAKr4B,GAAGmC,MAC/B83B,EAAale,GAAYsc,EAAKr4B,GAAG24B,QAEjCwB,EAAWr2B,KAAKi2B,GAChBG,EAAWp2B,KAAKk2B,GAChBI,EAAat2B,KAAKm2B,GAClBpX,EAAY/e,KAAKi2B,GACjBlX,EAAY/e,KAAKk2B,GACjBnX,EAAY/e,KAAKm2B,GAGrBr7B,KAAKy6B,WAAa,IAAIrlB,OAAO,KAAO6O,EAAYxgB,KAAK,KAAO,IAAK,KACjEzD,KAAKw6B,eAAiB,IAAIplB,OAAO,KAAOmmB,EAAW93B,KAAK,KAAO,IAAK,KACpEzD,KAAK26B,eAAiB,IAAIvlB,OAAO,KAAOkmB,EAAW73B,KAAK,KAAO,IAAK,KACpEzD,KAAK66B,iBAAmB,IAAIzlB,OACxB,KAAOomB,EAAa/3B,KAAK,KAAO,IAChC,IAER,CAYA,SAASg4B,GAAuB9kB,EAAO+kB,GACnChlB,EAAe,EAAG,CAACC,EAAOA,EAAM/U,QAAS,EAAG85B,EAChD,CAiCA,SAASC,GAAe9zB,GACpB,OAAO+zB,GAAqB1zB,KACxBlI,KACA6H,EACA7H,KAAK0P,OACL1P,KAAKyY,UAAYzY,KAAK8W,aAAakO,MAAMrV,IACzC3P,KAAK8W,aAAakO,MAAMrV,IACxB3P,KAAK8W,aAAakO,MAAMpV,IAEhC,CAEA,SAASisB,GAAkBh0B,GACvB,OAAO+zB,GAAqB1zB,KACxBlI,KACA6H,EACA7H,KAAKmb,UACLnb,KAAK+a,aACL,EACA,EAER,CAEA,SAAS+gB,KACL,OAAOjX,GAAY7kB,KAAKua,OAAQ,EAAG,EACvC,CAEA,SAASwhB,KACL,OAAOlX,GAAY7kB,KAAKkb,cAAe,EAAG,EAC9C,CAEA,SAAS8gB,KACL,IAAIC,EAAWj8B,KAAK8W,aAAakO,MACjC,OAAOH,GAAY7kB,KAAKua,OAAQ0hB,EAAStsB,IAAKssB,EAASrsB,IAC3D,CAEA,SAASssB,KACL,IAAID,EAAWj8B,KAAK8W,aAAakO,MACjC,OAAOH,GAAY7kB,KAAKib,WAAYghB,EAAStsB,IAAKssB,EAASrsB,IAC/D,CAEA,SAASgsB,GAAqB/zB,EAAO6H,EAAM+I,EAAS9I,EAAKC,GACrD,IAAIusB,EACJ,OAAa,MAATt0B,EACO6c,GAAW1kB,KAAM2P,EAAKC,GAAK2K,MAG9B7K,GADJysB,EAActX,GAAYhd,EAAO8H,EAAKC,MAElCF,EAAOysB,GAEJC,GAAWl0B,KAAKlI,KAAM6H,EAAO6H,EAAM+I,EAAS9I,EAAKC,GAEhE,CAEA,SAASwsB,GAAWnhB,EAAUvL,EAAM+I,EAAS9I,EAAKC,GAC9C,IAAIysB,EAAgB9X,GAAmBtJ,EAAUvL,EAAM+I,EAAS9I,EAAKC,GACjE0I,EAAO6L,GAAckY,EAAc9hB,KAAM,EAAG8hB,EAAcrhB,WAK9D,OAHAhb,KAAKua,KAAKjC,EAAKiI,kBACfvgB,KAAK+M,MAAMuL,EAAK+H,eAChBrgB,KAAKsY,KAAKA,EAAK2H,cACRjgB,IACX,CAeA,SAASs8B,GAAcz0B,GACnB,OAAgB,MAATA,EACDvF,KAAKob,MAAM1d,KAAK+M,QAAU,GAAK,GAC/B/M,KAAK+M,MAAoB,GAAblF,EAAQ,GAAU7H,KAAK+M,QAAU,EACvD,CA1ZA2J,EAAe,IAAK,EAAG,EAAG,WAC1BA,EAAe,KAAM,EAAG,EAAG,WAC3BA,EAAe,MAAO,EAAG,EAAG,WAC5BA,EAAe,OAAQ,EAAG,EAAG,WAC7BA,EAAe,QAAS,EAAG,EAAG,aAE9BA,EAAe,IAAK,CAAC,IAAK,GAAI,KAAM,WACpCA,EAAe,IAAK,CAAC,KAAM,GAAI,EAAG,WAClCA,EAAe,IAAK,CAAC,MAAO,GAAI,EAAG,WACnCA,EAAe,IAAK,CAAC,OAAQ,GAAI,EAAG,WAEpCmG,GAAc,IAAKie,IACnBje,GAAc,KAAMie,IACpBje,GAAc,MAAOie,IACrBje,GAAc,OAAQke,IACtBle,GAAc,QAASme,IAEvB/c,GACI,CAAC,IAAK,KAAM,MAAO,OAAQ,UAC3B,SAAUpW,EAAO/F,EAAOoS,EAAQyC,GAC5B,IAAI1E,EAAMiC,EAAOF,QAAQuoB,UAAU10B,EAAO8O,EAAOzC,EAAOrB,SACpDZ,EACAI,EAAgB6B,GAAQjC,IAAMA,EAE9BI,EAAgB6B,GAAQvC,WAAa9J,CAE7C,IAGJgV,GAAc,IAAKR,IACnBQ,GAAc,KAAMR,IACpBQ,GAAc,MAAOR,IACrBQ,GAAc,OAAQR,IACtBQ,GAAc,KAAMoe,IAEpBhd,GAAc,CAAC,IAAK,KAAM,MAAO,QAASM,IAC1CN,GAAc,CAAC,OAAO,SAAUpW,EAAO/F,EAAOoS,EAAQyC,GAClD,IAAInT,EACA0Q,EAAOF,QAAQknB,uBACf13B,EAAQqE,EAAMrE,MAAM0Q,EAAOF,QAAQknB,uBAGnChnB,EAAOF,QAAQwoB,oBACf16B,EAAMyc,IAAQrK,EAAOF,QAAQwoB,oBAAoB30B,EAAOrE,GAExD1B,EAAMyc,IAAQW,SAASrX,EAAO,GAEtC,IAgPA6O,EAAe,EAAG,CAAC,KAAM,GAAI,GAAG,WAC5B,OAAO1W,KAAKib,WAAa,GAC7B,IAEAvE,EAAe,EAAG,CAAC,KAAM,GAAI,GAAG,WAC5B,OAAO1W,KAAKkb,cAAgB,GAChC,IAMAugB,GAAuB,OAAQ,YAC/BA,GAAuB,QAAS,YAChCA,GAAuB,OAAQ,eAC/BA,GAAuB,QAAS,eAMhC5e,GAAc,IAAKP,IACnBO,GAAc,IAAKP,IACnBO,GAAc,KAAMd,GAAWJ,IAC/BkB,GAAc,KAAMd,GAAWJ,IAC/BkB,GAAc,OAAQV,GAAWN,IACjCgB,GAAc,OAAQV,GAAWN,IACjCgB,GAAc,QAAST,GAAWN,IAClCe,GAAc,QAAST,GAAWN,IAElCqC,GACI,CAAC,OAAQ,QAAS,OAAQ,UAC1B,SAAUtW,EAAO6H,EAAMwE,EAAQyC,GAC3BjH,EAAKiH,EAAMN,OAAO,EAAG,IAAMsH,GAAM9V,EACrC,IAGJsW,GAAkB,CAAC,KAAM,OAAO,SAAUtW,EAAO6H,EAAMwE,EAAQyC,GAC3DjH,EAAKiH,GAAS5G,EAAMkP,kBAAkBpX,EAC1C,IAqEA6O,EAAe,IAAK,EAAG,KAAM,WAI7BmG,GAAc,IAAKnB,IACnBuC,GAAc,KAAK,SAAUpW,EAAO/F,GAChCA,EAAM0c,IAA8B,GAApBb,GAAM9V,GAAS,EACnC,IAYA6O,EAAe,IAAK,CAAC,KAAM,GAAI,KAAM,QAIrCmG,GAAc,IAAKd,GAAWY,IAC9BE,GAAc,KAAMd,GAAWJ,IAC/BkB,GAAc,MAAM,SAAUG,EAAU/L,GAEpC,OAAO+L,EACD/L,EAAOoE,yBAA2BpE,EAAOqE,cACzCrE,EAAOkE,8BACjB,IAEA8I,GAAc,CAAC,IAAK,MAAOQ,IAC3BR,GAAc,MAAM,SAAUpW,EAAO/F,GACjCA,EAAM2c,IAAQd,GAAM9V,EAAMrE,MAAMuY,IAAW,GAC/C,IAIA,IAAI0gB,GAAmBrd,GAAW,QAAQ,GAkB1C,SAASsd,GAAgB70B,GACrB,IAAImT,EACA1Y,KAAKC,OACAvC,KAAKyyB,QAAQ4D,QAAQ,OAASr2B,KAAKyyB,QAAQ4D,QAAQ,SAAW,OAC/D,EACR,OAAgB,MAATxuB,EAAgBmT,EAAYhb,KAAKuI,IAAIV,EAAQmT,EAAW,IACnE,CApBAtE,EAAe,MAAO,CAAC,OAAQ,GAAI,OAAQ,aAI3CmG,GAAc,MAAOX,IACrBW,GAAc,OAAQjB,IACtBqC,GAAc,CAAC,MAAO,SAAS,SAAUpW,EAAO/F,EAAOoS,GACnDA,EAAOua,WAAa9Q,GAAM9V,EAC9B,IAgBA6O,EAAe,IAAK,CAAC,KAAM,GAAI,EAAG,UAIlCmG,GAAc,IAAKd,GAAWa,IAC9BC,GAAc,KAAMd,GAAWJ,IAC/BsC,GAAc,CAAC,IAAK,MAAOU,IAI3B,IAAIge,GAAevd,GAAW,WAAW,GAIzC1I,EAAe,IAAK,CAAC,KAAM,GAAI,EAAG,UAIlCmG,GAAc,IAAKd,GAAWa,IAC9BC,GAAc,KAAMd,GAAWJ,IAC/BsC,GAAc,CAAC,IAAK,MAAOW,IAI3B,IAsCIjI,GAAOimB,GAtCPC,GAAezd,GAAW,WAAW,GAuCzC,IAnCA1I,EAAe,IAAK,EAAG,GAAG,WACtB,SAAU1W,KAAKoZ,cAAgB,IACnC,IAEA1C,EAAe,EAAG,CAAC,KAAM,GAAI,GAAG,WAC5B,SAAU1W,KAAKoZ,cAAgB,GACnC,IAEA1C,EAAe,EAAG,CAAC,MAAO,GAAI,EAAG,eACjCA,EAAe,EAAG,CAAC,OAAQ,GAAI,GAAG,WAC9B,OAA4B,GAArB1W,KAAKoZ,aAChB,IACA1C,EAAe,EAAG,CAAC,QAAS,GAAI,GAAG,WAC/B,OAA4B,IAArB1W,KAAKoZ,aAChB,IACA1C,EAAe,EAAG,CAAC,SAAU,GAAI,GAAG,WAChC,OAA4B,IAArB1W,KAAKoZ,aAChB,IACA1C,EAAe,EAAG,CAAC,UAAW,GAAI,GAAG,WACjC,OAA4B,IAArB1W,KAAKoZ,aAChB,IACA1C,EAAe,EAAG,CAAC,WAAY,GAAI,GAAG,WAClC,OAA4B,IAArB1W,KAAKoZ,aAChB,IACA1C,EAAe,EAAG,CAAC,YAAa,GAAI,GAAG,WACnC,OAA4B,IAArB1W,KAAKoZ,aAChB,IAIAyD,GAAc,IAAKX,GAAWR,IAC9BmB,GAAc,KAAMX,GAAWP,IAC/BkB,GAAc,MAAOX,GAAWN,IAG3BjF,GAAQ,OAAQA,GAAM/U,QAAU,EAAG+U,IAAS,IAC7CkG,GAAclG,GAAO0F,IAGzB,SAASygB,GAAQj1B,EAAO/F,GACpBA,EAAM+c,IAAelB,GAAuB,KAAhB,KAAO9V,GACvC,CAEA,IAAK8O,GAAQ,IAAKA,GAAM/U,QAAU,EAAG+U,IAAS,IAC1CsH,GAActH,GAAOmmB,IAYzB,SAASC,KACL,OAAO/8B,KAAK2L,OAAS,MAAQ,EACjC,CAEA,SAASqxB,KACL,OAAOh9B,KAAK2L,OAAS,6BAA+B,EACxD,CAfAixB,GAAoBxd,GAAW,gBAAgB,GAI/C1I,EAAe,IAAK,EAAG,EAAG,YAC1BA,EAAe,KAAM,EAAG,EAAG,YAY3B,IAAIumB,GAAQhpB,EAAOjM,UAwGnB,SAASk1B,GAAWr1B,GAChB,OAAOinB,GAAoB,IAARjnB,EACvB,CAEA,SAASs1B,KACL,OAAOrO,GAAYzmB,MAAM,KAAMF,WAAWi1B,WAC9C,CAEA,SAASC,GAAmBl8B,GACxB,OAAOA,CACX,CAhHA87B,GAAM10B,IAAMA,GACZ00B,GAAMjvB,SAAWioB,GACjBgH,GAAMxK,MAAQA,GACdwK,GAAM74B,KAAOA,GACb64B,GAAMzG,MAAQA,GACdyG,GAAMpwB,OAASA,GACfowB,GAAMzpB,KAAOA,GACbypB,GAAM9E,QAAUA,GAChB8E,GAAM1pB,GAAKA,GACX0pB,GAAM7E,MAAQA,GACd6E,GAAM1d,IAAM6B,GACZ6b,GAAM3D,UAAYA,GAClB2D,GAAMxI,QAAUA,GAChBwI,GAAMvI,SAAWA,GACjBuI,GAAMxG,UAAYA,GAClBwG,GAAMpG,OAASA,GACfoG,GAAMlG,cAAgBA,GACtBkG,GAAMjG,eAAiBA,GACvBiG,GAAMrxB,QAAUwtB,GAChB6D,GAAM3E,KAAOA,GACb2E,GAAMhsB,OAASA,GACfgsB,GAAMnmB,WAAaA,GACnBmmB,GAAMrzB,IAAM6mB,GACZwM,GAAM9Z,IAAMoN,GACZ0M,GAAM5D,aAAeA,GACrB4D,GAAMhoB,IAAMoM,GACZ4b,GAAM5G,QAAUA,GAChB4G,GAAM5J,SAAWA,GACjB4J,GAAMrJ,QAAUA,GAChBqJ,GAAM/D,SAAWA,GACjB+D,GAAMxF,OAASA,GACfwF,GAAM1F,YAAcA,GACpB0F,GAAMvF,QAAUA,GACM,oBAAX4F,QAAwC,MAAdA,OAAOC,MACxCN,GAAMK,OAAOC,IAAI,+BAAiC,WAC9C,MAAO,UAAYv9B,KAAK6M,SAAW,GACvC,GAEJowB,GAAM9D,OAASA,GACf8D,GAAM5wB,SAAWA,GACjB4wB,GAAMhE,KAAOA,GACbgE,GAAMlsB,QAAUA,GAChBksB,GAAM1D,aAAeA,GACrB0D,GAAMnD,QAAUI,GAChB+C,GAAMO,UAAYrD,GAClB8C,GAAMQ,QAAUrD,GAChB6C,GAAMS,QAAUrD,GAChB4C,GAAM1iB,KAAO4E,GACb8d,GAAM3e,WAAae,GACnB4d,GAAMhiB,SAAW0gB,GACjBsB,GAAM/hB,YAAc2gB,GACpBoB,GAAMxjB,QAAUwjB,GAAMzjB,SAAW8iB,GACjCW,GAAMlwB,MAAQsW,GACd4Z,GAAMtb,YAAc2B,GACpB2Z,GAAMvtB,KAAOutB,GAAM/iB,MAAQkL,GAC3B6X,GAAM9hB,QAAU8hB,GAAMU,SAAWtY,GACjC4X,GAAMpY,YAAcmX,GACpBiB,GAAMW,gBAAkB1B,GACxBe,GAAMY,eAAiB/B,GACvBmB,GAAMa,sBAAwB/B,GAC9BkB,GAAM3kB,KAAOmkB,GACbQ,GAAMzkB,IAAMykB,GAAM1kB,KAAO4O,GACzB8V,GAAMxkB,QAAU2O,GAChB6V,GAAMliB,WAAasM,GACnB4V,GAAMjiB,UAAY0hB,GAClBO,GAAMhkB,KAAOgkB,GAAMjkB,MAAQgQ,GAC3BiU,GAAM3jB,OAAS2jB,GAAM5jB,QAAUsjB,GAC/BM,GAAMtjB,OAASsjB,GAAMvjB,QAAUmjB,GAC/BI,GAAM7jB,YAAc6jB,GAAM9jB,aAAeyjB,GACzCK,GAAMjzB,UAAY4oB,GAClBqK,GAAM70B,IAAM+qB,GACZ8J,GAAM/wB,MAAQknB,GACd6J,GAAMG,UAAY9J,GAClB2J,GAAMzJ,qBAAuBA,GAC7ByJ,GAAMc,MAAQtK,GACdwJ,GAAMpJ,QAAUA,GAChBoJ,GAAMnJ,YAAcA,GACpBmJ,GAAMlJ,MAAQA,GACdkJ,GAAMzd,MAAQuU,GACdkJ,GAAMhxB,SAAW8wB,GACjBE,GAAMjxB,SAAWgxB,GACjBC,GAAM5kB,MAAQ/D,EACV,kDACAmoB,IAEJQ,GAAMtwB,OAAS2H,EACX,mDACA+O,IAEJ4Z,GAAM3iB,MAAQhG,EACV,iDACA6K,IAEJ8d,GAAMp5B,KAAOyQ,EACT,2GACA4e,IAEJ+J,GAAMe,aAAe1pB,EACjB,0GACAof,IAeJ,IAAIuK,GAAUvoB,EAAO1N,UAuCrB,SAASk2B,GAAMrxB,EAAQsxB,EAAOC,EAAOC,GACjC,IAAIptB,EAASmZ,KACThiB,EAAM4I,IAAYiE,IAAIopB,EAAQF,GAClC,OAAOltB,EAAOmtB,GAAOh2B,EAAKyE,EAC9B,CAEA,SAASyxB,GAAezxB,EAAQsxB,EAAOC,GAQnC,GAPI1tB,EAAS7D,KACTsxB,EAAQtxB,EACRA,OAAS3M,GAGb2M,EAASA,GAAU,GAEN,MAATsxB,EACA,OAAOD,GAAMrxB,EAAQsxB,EAAOC,EAAO,SAGvC,IAAIh9B,EACAK,EAAM,GACV,IAAKL,EAAI,EAAGA,EAAI,GAAIA,IAChBK,EAAIL,GAAK88B,GAAMrxB,EAAQzL,EAAGg9B,EAAO,SAErC,OAAO38B,CACX,CAUA,SAAS88B,GAAiBC,EAAc3xB,EAAQsxB,EAAOC,GACvB,kBAAjBI,GACH9tB,EAAS7D,KACTsxB,EAAQtxB,EACRA,OAAS3M,GAGb2M,EAASA,GAAU,KAGnBsxB,EADAtxB,EAAS2xB,EAETA,GAAe,EAEX9tB,EAAS7D,KACTsxB,EAAQtxB,EACRA,OAAS3M,GAGb2M,EAASA,GAAU,IAGvB,IAEIzL,EAFA6P,EAASmZ,KACTqU,EAAQD,EAAevtB,EAAO+T,MAAMrV,IAAM,EAE1ClO,EAAM,GAEV,GAAa,MAAT08B,EACA,OAAOD,GAAMrxB,GAASsxB,EAAQM,GAAS,EAAGL,EAAO,OAGrD,IAAKh9B,EAAI,EAAGA,EAAI,EAAGA,IACfK,EAAIL,GAAK88B,GAAMrxB,GAASzL,EAAIq9B,GAAS,EAAGL,EAAO,OAEnD,OAAO38B,CACX,CAEA,SAASi9B,GAAW7xB,EAAQsxB,GACxB,OAAOG,GAAezxB,EAAQsxB,EAAO,SACzC,CAEA,SAASQ,GAAgB9xB,EAAQsxB,GAC7B,OAAOG,GAAezxB,EAAQsxB,EAAO,cACzC,CAEA,SAASS,GAAaJ,EAAc3xB,EAAQsxB,GACxC,OAAOI,GAAiBC,EAAc3xB,EAAQsxB,EAAO,WACzD,CAEA,SAASU,GAAkBL,EAAc3xB,EAAQsxB,GAC7C,OAAOI,GAAiBC,EAAc3xB,EAAQsxB,EAAO,gBACzD,CAEA,SAASW,GAAgBN,EAAc3xB,EAAQsxB,GAC3C,OAAOI,GAAiBC,EAAc3xB,EAAQsxB,EAAO,cACzD,CA7HAF,GAAQjwB,SAAWA,EACnBiwB,GAAQxwB,eAAiBA,EACzBwwB,GAAQ9mB,YAAcA,EACtB8mB,GAAQzuB,QAAUA,EAClByuB,GAAQ5N,SAAWgN,GACnBY,GAAQhG,WAAaoF,GACrBY,GAAQ1vB,aAAeA,GACvB0vB,GAAQ9lB,WAAaA,GACrB8lB,GAAQhpB,IAAMA,EACdgpB,GAAQxE,KAAOD,GACfyE,GAAQ1B,UAAY1C,GACpBoE,GAAQ5O,gBAAkB2K,GAC1BiE,GAAQvD,cAAgBA,GACxBuD,GAAQ3D,cAAgBA,GACxB2D,GAAQrD,gBAAkBA,GAE1BqD,GAAQtxB,OAASwV,GACjB8b,GAAQrxB,YAAc0V,GACtB2b,GAAQzxB,YAAcwW,GACtBib,GAAQxxB,YAAcA,GACtBwxB,GAAQjxB,iBAAmBA,GAC3BixB,GAAQvuB,KAAOqV,GACfkZ,GAAQc,eAAiB5Z,GACzB8Y,GAAQe,eAAiB9Z,GAEzB+Y,GAAQ5wB,SAAWgZ,GACnB4X,GAAQ1wB,YAAckZ,GACtBwX,GAAQ3wB,cAAgBiZ,GACxB0X,GAAQ1Y,cAAgByB,GAExBiX,GAAQnY,cAAgBA,GACxBmY,GAAQpY,mBAAqBA,GAC7BoY,GAAQrY,iBAAmBA,GAE3BqY,GAAQvV,KAAOJ,GACf2V,GAAQ/rB,SAAW+W,GA4FnBiB,GAAmB,KAAM,CACrBuP,KAAM,CACF,CACIE,MAAO,aACPC,MAAO,IACPl2B,OAAQ,EACRhB,KAAM,cACNq3B,OAAQ,KACRx2B,KAAM,MAEV,CACIo2B,MAAO,aACPC,OAAO,IACPl2B,OAAQ,EACRhB,KAAM,gBACNq3B,OAAQ,KACRx2B,KAAM,OAGdgM,uBAAwB,uBACxBC,QAAS,SAAUC,GACf,IAAIjL,EAAIiL,EAAS,GAWjB,OAAOA,GATgC,IAA/BkO,GAAOlO,EAAS,IAAO,IACjB,KACM,IAANjL,EACE,KACM,IAANA,EACE,KACM,IAANA,EACE,KACA,KAExB,IAKJuL,EAAMuoB,KAAOhkB,EACT,wDACA4V,IAEJna,EAAMkvB,SAAW3qB,EACb,gEACA8V,IAGJ,IAAI8U,GAAU58B,KAAK4H,IAEnB,SAASA,KACL,IAAI/H,EAAOnC,KAAKwxB,MAahB,OAXAxxB,KAAKsxB,cAAgB4N,GAAQl/B,KAAKsxB,eAClCtxB,KAAKuxB,MAAQ2N,GAAQl/B,KAAKuxB,OAC1BvxB,KAAKoiB,QAAU8c,GAAQl/B,KAAKoiB,SAE5BjgB,EAAKgX,aAAe+lB,GAAQ/8B,EAAKgX,cACjChX,EAAKuX,QAAUwlB,GAAQ/8B,EAAKuX,SAC5BvX,EAAKkX,QAAU6lB,GAAQ/8B,EAAKkX,SAC5BlX,EAAK6W,MAAQkmB,GAAQ/8B,EAAK6W,OAC1B7W,EAAKwK,OAASuyB,GAAQ/8B,EAAKwK,QAC3BxK,EAAKmY,MAAQ4kB,GAAQ/8B,EAAKmY,OAEnBta,IACX,CAEA,SAASm/B,GAAc9N,EAAUxpB,EAAOiW,EAAO8W,GAC3C,IAAIpE,EAAQW,GAAetpB,EAAOiW,GAMlC,OAJAuT,EAASC,eAAiBsD,EAAYpE,EAAMc,cAC5CD,EAASE,OAASqD,EAAYpE,EAAMe,MACpCF,EAASjP,SAAWwS,EAAYpE,EAAMpO,QAE/BiP,EAASI,SACpB,CAGA,SAAS2N,GAAMv3B,EAAOiW,GAClB,OAAOqhB,GAAcn/B,KAAM6H,EAAOiW,EAAO,EAC7C,CAGA,SAASuhB,GAAWx3B,EAAOiW,GACvB,OAAOqhB,GAAcn/B,KAAM6H,EAAOiW,GAAQ,EAC9C,CAEA,SAASwhB,GAAQ7vB,GACb,OAAIA,EAAS,EACFnN,KAAK2G,MAAMwG,GAEXnN,KAAKob,KAAKjO,EAEzB,CAEA,SAAS8vB,KACL,IAII7lB,EACAL,EACAL,EACAsB,EACAklB,EARArmB,EAAenZ,KAAKsxB,cACpB/Y,EAAOvY,KAAKuxB,MACZ5kB,EAAS3M,KAAKoiB,QACdjgB,EAAOnC,KAAKwxB,MAgDhB,OArCSrY,GAAgB,GAAKZ,GAAQ,GAAK5L,GAAU,GAC5CwM,GAAgB,GAAKZ,GAAQ,GAAK5L,GAAU,IAGjDwM,GAAuD,MAAvCmmB,GAAQG,GAAa9yB,GAAU4L,GAC/CA,EAAO,EACP5L,EAAS,GAKbxK,EAAKgX,aAAeA,EAAe,IAEnCO,EAAU+D,GAAStE,EAAe,KAClChX,EAAKuX,QAAUA,EAAU,GAEzBL,EAAUoE,GAAS/D,EAAU,IAC7BvX,EAAKkX,QAAUA,EAAU,GAEzBL,EAAQyE,GAASpE,EAAU,IAC3BlX,EAAK6W,MAAQA,EAAQ,GAErBT,GAAQkF,GAASzE,EAAQ,IAIzBrM,GADA6yB,EAAiB/hB,GAASiiB,GAAannB,IAEvCA,GAAQ+mB,GAAQG,GAAaD,IAG7BllB,EAAQmD,GAAS9Q,EAAS,IAC1BA,GAAU,GAEVxK,EAAKoW,KAAOA,EACZpW,EAAKwK,OAASA,EACdxK,EAAKmY,MAAQA,EAENta,IACX,CAEA,SAAS0/B,GAAannB,GAGlB,OAAe,KAAPA,EAAe,MAC3B,CAEA,SAASknB,GAAa9yB,GAElB,OAAiB,OAATA,EAAmB,IAC/B,CAEA,SAASgzB,GAAGllB,GACR,IAAKza,KAAK4L,UACN,OAAOsH,IAEX,IAAIqF,EACA5L,EACAwM,EAAenZ,KAAKsxB,cAIxB,GAAc,WAFd7W,EAAQD,GAAeC,KAEY,YAAVA,GAAiC,SAAVA,EAG5C,OAFAlC,EAAOvY,KAAKuxB,MAAQpY,EAAe,MACnCxM,EAAS3M,KAAKoiB,QAAUsd,GAAannB,GAC7BkC,GACJ,IAAK,QACD,OAAO9N,EACX,IAAK,UACD,OAAOA,EAAS,EACpB,IAAK,OACD,OAAOA,EAAS,QAKxB,OADA4L,EAAOvY,KAAKuxB,MAAQjvB,KAAKC,MAAMk9B,GAAaz/B,KAAKoiB,UACzC3H,GACJ,IAAK,OACD,OAAOlC,EAAO,EAAIY,EAAe,OACrC,IAAK,MACD,OAAOZ,EAAOY,EAAe,MACjC,IAAK,OACD,OAAc,GAAPZ,EAAYY,EAAe,KACtC,IAAK,SACD,OAAc,KAAPZ,EAAcY,EAAe,IACxC,IAAK,SACD,OAAc,MAAPZ,EAAeY,EAAe,IAEzC,IAAK,cACD,OAAO7W,KAAK2G,MAAa,MAAPsP,GAAgBY,EACtC,QACI,MAAM,IAAIpN,MAAM,gBAAkB0O,GAGlD,CAEA,SAASmlB,GAAO34B,GACZ,OAAO,WACH,OAAOjH,KAAK2/B,GAAG14B,EACnB,CACJ,CAEA,IAAI44B,GAAiBD,GAAO,MACxBE,GAAYF,GAAO,KACnBG,GAAYH,GAAO,KACnBI,GAAUJ,GAAO,KACjBK,GAASL,GAAO,KAChBM,GAAUN,GAAO,KACjBO,GAAWP,GAAO,KAClBQ,GAAaR,GAAO,KACpBS,GAAUT,GAAO,KACjBU,GAAYT,GAEhB,SAASU,KACL,OAAOpP,GAAenxB,KAC1B,CAEA,SAASwgC,GAAM/lB,GAEX,OADAA,EAAQD,GAAeC,GAChBza,KAAK4L,UAAY5L,KAAKya,EAAQ,OAASvH,GAClD,CAEA,SAASutB,GAAW/9B,GAChB,OAAO,WACH,OAAO1C,KAAK4L,UAAY5L,KAAKwxB,MAAM9uB,GAAQwQ,GAC/C,CACJ,CAEA,IAAIiG,GAAesnB,GAAW,gBAC1B/mB,GAAU+mB,GAAW,WACrBpnB,GAAUonB,GAAW,WACrBznB,GAAQynB,GAAW,SACnBloB,GAAOkoB,GAAW,QAClB9zB,GAAS8zB,GAAW,UACpBnmB,GAAQmmB,GAAW,SAEvB,SAASvmB,KACL,OAAOuD,GAASzd,KAAKuY,OAAS,EAClC,CAEA,IAAIhW,GAAQD,KAAKC,MACbm+B,GAAa,CACT/xB,GAAI,GACJD,EAAG,GACHrH,EAAG,GACHwH,EAAG,GACHE,EAAG,GACHE,EAAG,KACHE,EAAG,IAIX,SAASwxB,GAAkBx/B,EAAQsO,EAAQuI,EAAeC,EAAUhH,GAChE,OAAOA,EAAO1C,aAAakB,GAAU,IAAKuI,EAAe7W,EAAQ8W,EACrE,CAEA,SAAS2oB,GAAeC,EAAgB7oB,EAAe0oB,EAAYzvB,GAC/D,IAAIogB,EAAWF,GAAe0P,GAAgB32B,MAC1CwP,EAAUnX,GAAM8uB,EAASsO,GAAG,MAC5BtmB,EAAU9W,GAAM8uB,EAASsO,GAAG,MAC5B3mB,EAAQzW,GAAM8uB,EAASsO,GAAG,MAC1BpnB,EAAOhW,GAAM8uB,EAASsO,GAAG,MACzBhzB,EAASpK,GAAM8uB,EAASsO,GAAG,MAC3BzlB,EAAQ3X,GAAM8uB,EAASsO,GAAG,MAC1BrlB,EAAQ/X,GAAM8uB,EAASsO,GAAG,MAC1Bp7B,EACKmV,GAAWgnB,EAAW/xB,IAAM,CAAC,IAAK+K,IAClCA,EAAUgnB,EAAWhyB,GAAK,CAAC,KAAMgL,IACjCL,GAAW,GAAK,CAAC,MACjBA,EAAUqnB,EAAWr5B,GAAK,CAAC,KAAMgS,IACjCL,GAAS,GAAK,CAAC,MACfA,EAAQ0nB,EAAW7xB,GAAK,CAAC,KAAMmK,IAC/BT,GAAQ,GAAK,CAAC,MACdA,EAAOmoB,EAAW3xB,GAAK,CAAC,KAAMwJ,GAgBvC,OAdoB,MAAhBmoB,EAAWzxB,IACX1K,EACIA,GACC2V,GAAS,GAAK,CAAC,MACfA,EAAQwmB,EAAWzxB,GAAK,CAAC,KAAMiL,KAExC3V,EAAIA,GACCoI,GAAU,GAAK,CAAC,MAChBA,EAAS+zB,EAAWvxB,GAAK,CAAC,KAAMxC,IAChC2N,GAAS,GAAK,CAAC,MAAS,CAAC,KAAMA,IAElC,GAAKtC,EACPzT,EAAE,IAAMs8B,EAAiB,EACzBt8B,EAAE,GAAK0M,EACA0vB,GAAkBt4B,MAAM,KAAM9D,EACzC,CAGA,SAASu8B,GAA2BC,GAChC,YAAyB7gC,IAArB6gC,EACOx+B,GAEqB,mBAArBw+B,IACPx+B,GAAQw+B,GACD,EAGf,CAGA,SAASC,GAA4BC,EAAWC,GAC5C,YAA8BhhC,IAA1BwgC,GAAWO,UAGD/gC,IAAVghC,EACOR,GAAWO,IAEtBP,GAAWO,GAAaC,EACN,MAAdD,IACAP,GAAW/xB,GAAKuyB,EAAQ,IAErB,GACX,CAEA,SAAShJ,GAASiJ,EAAeC,GAC7B,IAAKphC,KAAK4L,UACN,OAAO5L,KAAK8W,aAAaK,cAG7B,IAEIlG,EACA4E,EAHAwrB,GAAa,EACbC,EAAKZ,GAyBT,MArB6B,iBAAlBS,IACPC,EAAgBD,EAChBA,GAAgB,GAES,kBAAlBA,IACPE,EAAaF,GAEY,iBAAlBC,IACPE,EAAKl4B,OAAOm4B,OAAO,CAAC,EAAGb,GAAYU,GACZ,MAAnBA,EAAc1yB,GAAiC,MAApB0yB,EAAczyB,KACzC2yB,EAAG3yB,GAAKyyB,EAAc1yB,EAAI,IAKlCmH,EAAS+qB,GAAe5gC,MAAOqhC,EAAYC,EAD3CrwB,EAASjR,KAAK8W,cAGVuqB,IACAxrB,EAAS5E,EAAOkH,YAAYnY,KAAM6V,IAG/B5E,EAAOgnB,WAAWpiB,EAC7B,CAEA,IAAI2rB,GAAQl/B,KAAK4H,IAEjB,SAASxI,GAAKggB,GACV,OAAQA,EAAI,IAAMA,EAAI,KAAOA,CACjC,CAEA,SAAS+f,KAQL,IAAKzhC,KAAK4L,UACN,OAAO5L,KAAK8W,aAAaK,cAG7B,IAGIkC,EACAL,EACAsB,EACA5L,EAEAgzB,EACAC,EACAC,EACAC,EAXAnoB,EAAU8nB,GAAMxhC,KAAKsxB,eAAiB,IACtC/Y,EAAOipB,GAAMxhC,KAAKuxB,OAClB5kB,EAAS60B,GAAMxhC,KAAKoiB,SAKpB0f,EAAQ9hC,KAAK8/B,YAMjB,OAAKgC,GAOLzoB,EAAUoE,GAAS/D,EAAU,IAC7BV,EAAQyE,GAASpE,EAAU,IAC3BK,GAAW,GACXL,GAAW,GAGXiB,EAAQmD,GAAS9Q,EAAS,IAC1BA,GAAU,GAGV+B,EAAIgL,EAAUA,EAAQqoB,QAAQ,GAAGt7B,QAAQ,SAAU,IAAM,GAEzDi7B,EAAYI,EAAQ,EAAI,IAAM,GAC9BH,EAASjgC,GAAK1B,KAAKoiB,WAAa1gB,GAAKogC,GAAS,IAAM,GACpDF,EAAWlgC,GAAK1B,KAAKuxB,SAAW7vB,GAAKogC,GAAS,IAAM,GACpDD,EAAUngC,GAAK1B,KAAKsxB,iBAAmB5vB,GAAKogC,GAAS,IAAM,GAGvDJ,EACA,KACCpnB,EAAQqnB,EAASrnB,EAAQ,IAAM,KAC/B3N,EAASg1B,EAASh1B,EAAS,IAAM,KACjC4L,EAAOqpB,EAAWrpB,EAAO,IAAM,KAC/BS,GAASK,GAAWK,EAAU,IAAM,KACpCV,EAAQ6oB,EAAU7oB,EAAQ,IAAM,KAChCK,EAAUwoB,EAAUxoB,EAAU,IAAM,KACpCK,EAAUmoB,EAAUnzB,EAAI,IAAM,KA9BxB,KAgCf,CAEA,IAAIszB,GAAU5Q,GAASppB,UAwGvB,OAtGAg6B,GAAQp2B,QAAUqlB,GAClB+Q,GAAQ93B,IAAMA,GACd83B,GAAQz5B,IAAM62B,GACd4C,GAAQ3O,SAAWgM,GACnB2C,GAAQrC,GAAKA,GACbqC,GAAQnC,eAAiBA,GACzBmC,GAAQlC,UAAYA,GACpBkC,GAAQjC,UAAYA,GACpBiC,GAAQhC,QAAUA,GAClBgC,GAAQ/B,OAASA,GACjB+B,GAAQ9B,QAAUA,GAClB8B,GAAQ7B,SAAWA,GACnB6B,GAAQ5B,WAAaA,GACrB4B,GAAQ3B,QAAUA,GAClB2B,GAAQjxB,QAAUuvB,GAClB0B,GAAQvQ,QAAU8N,GAClByC,GAAQvP,MAAQ8N,GAChByB,GAAQziB,IAAMihB,GACdwB,GAAQ7oB,aAAeA,GACvB6oB,GAAQtoB,QAAUA,GAClBsoB,GAAQ3oB,QAAUA,GAClB2oB,GAAQhpB,MAAQA,GAChBgpB,GAAQzpB,KAAOA,GACfypB,GAAQ9nB,MAAQA,GAChB8nB,GAAQr1B,OAASA,GACjBq1B,GAAQ1nB,MAAQA,GAChB0nB,GAAQ9J,SAAWA,GACnB8J,GAAQzK,YAAckK,GACtBO,GAAQ31B,SAAWo1B,GACnBO,GAAQ7I,OAASsI,GACjBO,GAAQ/wB,OAASA,GACjB+wB,GAAQlrB,WAAaA,GAErBkrB,GAAQC,YAAc3tB,EAClB,sFACAmtB,IAEJO,GAAQ1J,KAAOA,GAIf5hB,EAAe,IAAK,EAAG,EAAG,QAC1BA,EAAe,IAAK,EAAG,EAAG,WAI1BmG,GAAc,IAAKP,IACnBO,GAAc,IAAKJ,IACnBwB,GAAc,KAAK,SAAUpW,EAAO/F,EAAOoS,GACvCA,EAAOrI,GAAK,IAAIxH,KAAyB,IAApB2sB,WAAWnpB,GACpC,IACAoW,GAAc,KAAK,SAAUpW,EAAO/F,EAAOoS,GACvCA,EAAOrI,GAAK,IAAIxH,KAAKsZ,GAAM9V,GAC/B,IAIAkI,EAAM5P,QAAU,SAEhB6P,EAAgB8e,IAEhB/e,EAAM3E,GAAK6xB,GACXltB,EAAMoT,IAAMA,GACZpT,EAAMnG,IAAMA,GACZmG,EAAM6F,IAAMA,GACZ7F,EAAM3H,IAAM4I,EACZjB,EAAMkpB,KAAOiE,GACbntB,EAAMpD,OAAS+xB,GACf3uB,EAAMY,OAASA,EACfZ,EAAMkB,OAASiZ,GACfna,EAAMilB,QAAU/hB,EAChBlD,EAAMshB,SAAWF,GACjBphB,EAAMzH,SAAWA,EACjByH,EAAM1C,SAAWuxB,GACjB7uB,EAAMqtB,UAAYD,GAClBptB,EAAM+G,WAAasT,GACnBra,EAAM2hB,WAAaA,GACnB3hB,EAAMnD,YAAc+xB,GACpB5uB,EAAMxC,YAAcuxB,GACpB/uB,EAAMrD,aAAeA,GACrBqD,EAAMwa,aAAeA,GACrBxa,EAAMuZ,QAAUmB,GAChB1a,EAAMzC,cAAgBuxB,GACtB9uB,EAAMyK,eAAiBA,GACvBzK,EAAMmyB,qBAAuBpB,GAC7B/wB,EAAMoyB,sBAAwBnB,GAC9BjxB,EAAMumB,eAAiBP,GACvBhmB,EAAM/H,UAAYi1B,GAGlBltB,EAAMqyB,UAAY,CACdC,eAAgB,mBAChBC,uBAAwB,sBACxBC,kBAAmB,0BACnB9jB,KAAM,aACN+jB,KAAM,QACNC,aAAc,WACdC,QAAS,eACT5jB,KAAM,aACNN,MAAO,WAGJzO,CAEV,CAhjLmFhQ,iDCHpF,SACE4iC,GAAI,CACFpqB,KAAM,CAAC,SAAU,UAAW,UAAW,WAAY,YAAa,UAAW,YAC3EqqB,UAAW,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,MAChDC,QAAS,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,MAC9Cl2B,OAAQ,CAAC,UAAW,WAAY,QAAS,QAAS,MAAO,OAAQ,OAAQ,WAAY,YAAa,UAAW,WAAY,YACzHC,YAAa,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OAC3Fk2B,MAAO,UACPC,YAAa,UACbC,MAAO,SACPC,UAAW,EACXp2B,OAAQ,4CCfL,SAASq2B,EAAUC,GACxB,OAAO,IAAI9+B,KAAK8+B,GAAWpiB,SAAS,EAAG,EAAG,EAAG,EAC/C,CAEO,SAAS+hB,IACd,OAAO,IAAIz+B,MAAO0c,SAAS,EAAG,EAAG,EAAG,EACtC,CAGO,SAASqiB,KAAat7B,GAC3B,OAAQA,EAAKlG,QACX,KAAK,EACH,OAAOkhC,IACT,KAAK,EACH,OAAOI,EAAUp7B,EAAK,IAI1B,MAAMu7B,EAAU,IAAIh/B,KAAK,GAEzB,OADAg/B,EAAQliB,eAAerZ,GAChBu7B,EAAQtiB,SAAS,EAAG,EAAG,EAAG,EACnC,CAEO,SAASuiB,EAAQhrB,EAAMirB,GAC5B,MAAMF,EAAU,IAAIh/B,KAAKiU,GACzB,OAAO+qB,EAAQpiB,QAAQoiB,EAAQnjB,UAAYqjB,EAC7C,CAEO,SAASC,EAASlrB,EAAMirB,GAC7B,OAAOD,EAAQhrB,EAAe,EAATirB,EACvB,CAEO,SAASE,EAAUnrB,EAAMirB,GAG9B,MAAMF,EAAU,IAAIh/B,KAAKiU,GACnBorB,EAAcL,EAAQ/iB,WAAaijB,EACzC,IAAII,EAAgBD,EAAc,GAC9BC,EAAgB,IAClBA,GAAiB,IAGnB,MAAMzN,EAAOmN,EAAQngB,SAASwgB,GAC9B,OAAOL,EAAQ/iB,aAAeqjB,EAAgBN,EAAQpiB,QAAQ,GAAKiV,CACrE,CAEO,SAAS0N,EAAStrB,EAAMirB,GAG7B,MAAMF,EAAU,IAAIh/B,KAAKiU,GACnBqrB,EAAgBN,EAAQ/iB,WACxB4V,EAAOmN,EAAQliB,YAAYkiB,EAAQr9B,cAAgBu9B,GACzD,OAAyB,IAAlBI,GAA8C,IAAvBN,EAAQ/iB,WAAmB+iB,EAAQpiB,QAAQ,GAAKiV,CAChF,CAGA,SAAS2N,EAAQrrB,EAAKhF,GACpB,OAAQgF,EAAMhF,EAAO,GAAK,CAC5B,CAGO,SAASswB,EAAeC,EAAUC,EAAWf,EAAY,GAC9D,MAAMgB,EAAU,IAAI5/B,KAAK0/B,GAAU3jB,SACnC,OAAOkjB,EAAQS,EAAUF,EAAQG,EAAWf,GAAaY,EAAQI,EAAShB,GAC5E,CAEA,SAASiB,EAAYC,EAAcC,GACjC,OAAO9hC,KAAKC,OAAO4hC,EAAeC,GAAsB,QAAa,CACvE,CAGO,SAASC,EAAW/rB,GAIzB,MAAMgsB,EAAeR,EAAexrB,EAAM,EAAG,GAO7C,OAAO4rB,EAAYI,EAFFR,EAAe,IAAIz/B,KAAKigC,GAAcphB,SAAS,EAAG,GAAI,EAAG,GAG5E,CAIA,SAASqhB,EAA0BjsB,EAAM2qB,GAGvC,MAAMuB,EAAmBV,EAAe,IAAIz/B,KAAKiU,GAAM4K,SAAS,EAAG,GAAI+f,EAAWA,GAC5EwB,EAAiBX,EAAexrB,EAAM2qB,EAAWA,GACjDyB,EAAUR,EAAYO,EAAgBD,GAC5C,GAAIE,EAAU,GACZ,OAAOA,EAIT,OAAOD,IADmBX,EAAe,IAAIz/B,KAAKiU,GAAM2I,QAAQ,IAAKgiB,EAAWA,GAClC,EAAIyB,CACpD,CAGO,SAASC,EAAmBrsB,GAEjC,OAAOisB,EAA0BjsB,EAAM,EACzC,CAGO,SAASssB,EAAkBtsB,GAEhC,OAAOisB,EAA0BjsB,EAAM,EACzC,CAIO,SAASusB,EAAkBvsB,EAAMgC,GAEtC,MAAMC,EAAO,IAAIlW,KAAKiU,GAAMtS,cAC5B,OAAO1D,KAAK2G,MAAMsR,EAAOD,GAASA,CACpC,CAGO,SAASwqB,EAAexsB,EAAMysB,EAAUC,GAC7C,GAAiB,IAAbD,GAA+B,IAAbA,EACpB,OAAOzsB,EAET,MAAM+qB,EAAU,IAAIh/B,KAAKiU,GAUzB,OATiB,IAAbysB,EACFC,EACI3B,EAAQngB,SAASmgB,EAAQ/iB,WAAa,EAAG,GACzC+iB,EAAQpiB,QAAQ,GAEpB+jB,EACI3B,EAAQliB,YAAYkiB,EAAQr9B,cAAgB,EAAG,EAAG,GAClDq9B,EAAQngB,SAAS,EAAG,GAEnBmgB,EAAQtiB,SAAS,EAAG,EAAG,EAAG,EACnC,4JCzIO,SAASkkB,EAAWp8B,GACzB,OAAOA,EAAIA,EAAIjH,OAAS,EAC1B,CAGO,SAASsjC,EAAWr8B,KAAQs8B,GAOjC,OANAA,EAAM7a,SAASuL,IACThtB,EAAIu8B,SAASvP,IAGjBhtB,EAAI3D,KAAK2wB,EAAK,IAEThtB,CACT,CAEO,SAASw8B,EAAcC,EAAKpT,GAEjC,OAAOoT,EAAMA,EAAIzkC,MAAMqxB,GAAa,EACtC,CAEO,SAASqT,EAAUC,EAASriB,EAAKvZ,GAGtC,YAFsB1J,IAARijB,GAAqBqiB,GAAWriB,UACxBjjB,IAAR0J,GAAqB47B,GAAW57B,EAEhD,CAEO,SAAS67B,EAAa/xB,EAAKyP,EAAKvZ,GACrC,OAAI8J,EAAMyP,EACDA,EAELzP,EAAM9J,EACDA,EAEF8J,CACT,CAEO,SAASgyB,EAAgBC,EAASC,EAAQC,EAAa,CAAC,EAAG1H,EAAQ,EAAG2H,EAAO,IAQlFA,GAAQ,IAPW18B,OAAOC,KAAKw8B,GAAYE,QAAO,CAACC,EAAKC,KACtD,IAAIvyB,EAAMmyB,EAAWI,GAIrB,MAHmB,mBAARvyB,IACTA,EAAMA,EAAIyqB,IAEL,GAAG6H,KAAOC,MAASvyB,IAAM,GAC/BiyB,QACyBA,KAE5B,MAAM9/B,EAAOs4B,EAAQ,EACrB,OAAOt4B,EAAO+/B,EACVF,EAAgBC,EAASC,EAAQC,EAAYhgC,EAAMigC,GACnDA,CACN,CAIO,SAASI,EAAqBJ,GACnC,OAAOA,EAAKr/B,QAAQ,QAAS,KAAKA,QAAQ,OAAQ,IACpD,gJCpDO,MAAM0/B,EAAiB,6BAEjBC,EAAiB,uBAE9B,IAAIC,EAAe,CAAC,EAEpB,MAAMC,EAAW,CACfj3B,EAAC,CAACiJ,EAAMiC,IACC,IAAIlW,KAAKiU,GAAM6I,YAAYjC,SAAS3E,EAAM,KAEnD,CAAAlT,CAAEiR,EAAMvL,EAAOkE,GACb,MAAMoyB,EAAU,IAAIh/B,KAAKiU,GACzB,IAAIiuB,EAAarnB,SAASnS,EAAO,IAAM,EAEvC,GAAI2F,MAAM6zB,GAAa,CACrB,IAAKx5B,EACH,OAAOmG,IAGT,MAAMuP,EAAY1V,EAAMvG,cAClBggC,EAAe9jC,GAAQA,EAAK8D,cAAcigC,WAAWhkB,GAO3D,GAJA8jB,EAAat1B,EAAOrE,YAAY85B,UAAUF,GACtCD,EAAa,IACfA,EAAat1B,EAAOtE,OAAO+5B,UAAUF,IAEnCD,EAAa,EACf,OAAOrzB,GAEX,CAGA,OADAmwB,EAAQngB,SAASqjB,GACVlD,EAAQ/iB,aAAeqmB,EAAeJ,GACzClD,EAAQpiB,QAAQ,GAChBoiB,EAAQ1wB,SACd,EACA5D,EAAC,CAACuJ,EAAME,IACC,IAAInU,KAAKiU,GAAM2I,QAAQ/B,SAAS1G,EAAK,MAI1CouB,EAAY,CAChB73B,EAAEuJ,GACOA,EAAK4H,UAEdlR,GAAGsJ,GACMuuB,EAAQvuB,EAAK4H,UAAW,GAEjC9H,EAAC,CAACE,EAAMrH,IACCA,EAAO2xB,UAAUtqB,EAAK8H,UAE/B0mB,GAAE,CAACxuB,EAAMrH,IACAA,EAAOsH,KAAKD,EAAK8H,UAE1B/Y,EAAEiR,GACOA,EAAKgI,WAAa,EAE3B1R,GAAG0J,GACMuuB,EAAQvuB,EAAKgI,WAAa,EAAG,GAEtCnR,EAAC,CAACmJ,EAAMrH,IACCA,EAAOrE,YAAY0L,EAAKgI,YAEjClR,GAAE,CAACkJ,EAAMrH,IACAA,EAAOtE,OAAO2L,EAAKgI,YAE5BjR,EAAEiJ,GACOA,EAAKtS,cAEdsJ,GAAGgJ,GACMuuB,EAAQvuB,EAAKtS,cAAe,GAAGiC,OAAO,GAE/C8+B,KAAKzuB,GACIuuB,EAAQvuB,EAAKtS,cAAe,IAKvC,SAAS2gC,EAAeJ,GACtB,OAAOA,GAAc,EAAIA,EAAa,GAAKI,EAAeJ,EAAa,GACzE,CAEA,SAASM,EAAQj+B,EAAKhH,GACpB,OAAOgH,EAAIyD,WAAW26B,SAASplC,EAAQ,IACzC,CAEA,SAASqlC,EAAkBp6B,GACzB,GAAsB,iBAAXA,EACT,MAAM,IAAId,MAAM,wBAElB,GAAIc,KAAUw5B,EACZ,OAAOA,EAAax5B,GAItB,MAAMq6B,EAAar6B,EAAOhM,MAAMslC,GAC1B9kC,EAAQwL,EAAOrJ,MAAM,IAAI4R,OAAO+wB,EAAgB,MACtD,GAA0B,IAAtBe,EAAWtlC,SAAiBP,EAC9B,MAAM,IAAI0K,MAAM,wBAIlB,MAAMo7B,EAAiB9lC,EAAM6J,KAAIyL,GAASiwB,EAAUjwB,KAI9CywB,EAAiBh+B,OAAOC,KAAKi9B,GAAUP,QAAO,CAAC18B,EAAMqL,KAC3CrT,EAAMgmC,MAAKC,GAAoB,MAAZA,EAAK,IAAcA,EAAK,GAAG9gC,gBAAkBkO,KAE5ErL,EAAKnE,KAAKwP,GAELrL,IACN,IAEH,OAAOg9B,EAAax5B,GAAU,CAC5B,MAAA06B,CAAOC,EAASv2B,GACd,MAAMw2B,EAAYD,EAAQ3mC,MAAMulC,GAAgBL,QAAO,CAAC2B,EAASJ,EAAMnJ,KACrE,GAAImJ,EAAK1lC,OAAS,GAAKP,EAAM88B,GAAQ,CACnC,MAAMxnB,EAAQtV,EAAM88B,GAAO,GACb,MAAVxnB,EACF+wB,EAAQrgC,EAAIigC,EACO,MAAV3wB,IACT+wB,EAAQ/wB,GAAS2wB,EAErB,CACA,OAAOI,CAAO,GACb,CAAC,GAKJ,OAAON,EAAerB,QAAO,CAAC4B,EAAUjzB,KACtC,MAAM2uB,EAAUiD,EAAS5xB,GAAKizB,EAAUF,EAAU/yB,GAAMzD,GAExD,OAAOyB,MAAM2wB,GAAWsE,EAAWtE,CAAO,IACzC,UACL,EACAuE,UAAS,CAACtvB,EAAMrH,IACAk2B,EAAepB,QAAO,CAACT,EAAKl6B,EAAI+yB,IACrCmH,EAAO,GAAG4B,EAAW/I,KAAS/yB,EAAGkN,EAAMrH,MAC7C,KAEe,QAAWi2B,GAGnC,CAEO,SAASW,EAAUL,EAAS36B,EAAQoE,GACzC,GAAIu2B,aAAmBnjC,MAA2B,iBAAZmjC,EAAsB,CAC1D,MAAMlvB,GAAO,QAAUkvB,GACvB,OAAO90B,MAAM4F,QAAQpY,EAAYoY,CACnC,CACA,GAAKkvB,EAAL,CAGA,GAAgB,UAAZA,EACF,OAAO,UAGT,GAAI36B,GAAUA,EAAOi7B,QAAS,CAC5B,MAAMxvB,EAAOzL,EAAOi7B,QAAQN,EAAS36B,EAAQoE,GAC7C,OAAOyB,MAAM4F,QAAQpY,GAAY,QAAUoY,EAC7C,CAEA,OAAO2uB,EAAkBp6B,GAAQ06B,OAAOC,EAASv2B,EAVjD,CAWF,CAEO,SAAS,EAAWqH,EAAMzL,EAAQoE,GACvC,GAAIyB,MAAM4F,KAAWA,GAAiB,IAATA,EAC3B,MAAO,GAGT,MAAMyvB,EAA0B,iBAATzvB,EAAoB,IAAIjU,KAAKiU,GAAQA,EAE5D,OAAIzL,EAAOm7B,UACFn7B,EAAOm7B,UAAUD,EAASl7B,EAAQoE,GAGpCg2B,EAAkBp6B,GAAQ+6B,UAAUG,EAAS92B,EACtD,CCxLA,MAAMg3B,EAAQC,SAASC,cAEhB,SAASC,EAAUtC,GACxB,OAAOmC,EAAMI,yBAAyBvC,EACxC,CAEO,SAASwC,EAAUC,GACxB,OAAOA,EAAGC,gBACJD,EAAGE,sBAAsBC,WAAaH,EAAGE,WAAWE,UAAOzoC,EACnE,CAEO,SAAS0oC,EAAgBL,GAC9B,OAAOA,EAAGM,cAAcC,gBAAkBP,CAC5C,CAOO,SAASQ,EAAYR,GACD,SAArBA,EAAGS,MAAMC,UAITV,EAAGS,MAAMC,UACXV,EAAGW,QAAQC,aAAeZ,EAAGS,MAAMC,SAErCV,EAAGS,MAAMC,QAAU,OACrB,CAEO,SAASG,EAAYb,GACD,SAArBA,EAAGS,MAAMC,UAGTV,EAAGW,QAAQC,cAEbZ,EAAGS,MAAMC,QAAUV,EAAGW,QAAQC,oBACvBZ,EAAGW,QAAQC,cAElBZ,EAAGS,MAAMC,QAAU,GAEvB,CAEO,SAASI,EAAgBd,GAC1BA,EAAGe,aACLf,EAAGgB,YAAYhB,EAAGe,YAClBD,EAAgBd,GAEpB,CCjDA,MAAMiB,EAAmB,IAAIC,SACvB,iBAACC,EAAgB,oBAAEC,GAAuBC,YAAY5hC,UAMrD,SAAS,EAAkB6hC,EAAQC,GACxC,IAAIC,EAAaP,EAAiBjqB,IAAIsqB,GACjCE,IACHA,EAAa,GACbP,EAAiBv0B,IAAI40B,EAAQE,IAE/BD,EAAUxf,SAAS0f,IACjBN,EAAiBxhC,QAAQ8hC,GACzBD,EAAW7kC,KAAK8kC,EAAS,GAE7B,CAeA,IAAKC,MAAMjiC,UAAUkiC,aAAc,CACjC,MAAMC,EAAkB,CAACC,EAAMC,EAAO,MAGpC,IAAIC,EAQJ,OAVAD,EAAKnlC,KAAKklC,GAGNA,EAAK3B,WACP6B,EAASF,EAAK3B,WACL2B,EAAKzB,KACd2B,EAASF,EAAKzB,KACLyB,EAAKG,cACdD,EAASF,EAAKG,aAETD,EAASH,EAAgBG,EAAQD,GAAQA,CAAI,EAGtDJ,MAAMjiC,UAAUkiC,aAAe,WAC7B,OAAOC,EAAgBnqC,KAAK2J,OAC9B,CACF,CAEA,SAAS6gC,EAAaH,EAAMI,EAAUC,GACpC,MAAON,KAASO,GAAQN,EACxB,OAAII,EAASL,GACJA,EAELA,IAASM,GAAkC,SAAjBN,EAAKzE,SAAsC,IAAhBgF,EAAK/oC,OAIvD4oC,EAAaG,EAAMF,EAAUC,QAJpC,CAKF,CAGO,SAASE,EAAuBC,EAAIC,GACzC,MAAML,EAA+B,mBAAbK,EACpBA,EACAvC,GAAMA,aAAcwC,SAAWxC,EAAGjW,QAAQwY,GAC9C,OAAON,EAAaK,EAAGX,eAAgBO,EAAUI,EAAGH,cACtD,CCrEA,SACEM,GAAI,CACFzyB,KAAM,CAAC,SAAU,SAAU,UAAW,YAAa,WAAY,SAAU,YACzEqqB,UAAW,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OACtDC,QAAS,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,MAC9Cl2B,OAAQ,CAAC,UAAW,WAAY,QAAS,QAAS,MAAO,OAAQ,OAAQ,SAAU,YAAa,UAAW,WAAY,YACvHC,YAAa,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OAC3Fk2B,MAAO,QACPE,MAAO,QACPiI,YAAa,SCTjB,GACEC,UAAU,EACVC,cAAe,KACfC,iBAAkB,KAClBC,gBAAiB,KACjBC,eAAgB,KAChBC,aAAa,EACbC,cAAe,IACfC,cAAe,GACfC,mBAAoB,GACpBC,sBAAuB,GACvBC,qBAAiB1rC,EACjB2rC,sBAAsB,EACtBC,kBAAkB,EAClBj/B,OAAQ,aACRk/B,SAAU,KACVC,QAAS,KACTC,iBAAkB,EAClBC,QAAS,EACTC,QAAS,KACTC,UAAW,IACXC,YAAa,OACbC,UAAW,EACXC,UAAW,IACXC,gBAAgB,EAChBC,aAAa,EACbC,aAAa,EACbC,UAAW,EACXC,MAAO,GACPC,aAAa,EACbC,gBAAiB,EACjBC,gBAAgB,EAChBC,cAAc,EACdC,YAAa,EACbhK,UAAW,ICtBX8I,SAAUmB,EACVrgC,OAAQmrB,EACRiL,UAAWkK,GACTC,EAGJ,SAASC,EAAY19B,EAAK6I,GACxB,OAAO7I,EAAI/N,OAAS,GAAK4W,GAAO,GAAKA,EAAM,GACvC,QAAW7I,EAAK6I,GAChB7I,CACN,CAEA,SAAS29B,EAAuBC,EAAetK,GAI7C,OAHmC,IAAlBsK,EACE,IAAdtK,EAAkB,GAAKA,EAAY,EACpCsK,GAEF,KAAK,EACH,OAAO,KACT,KAAK,EACH,OAAO,KACT,KAAK,EACH,OAAO,KAEb,CAEA,SAASC,EAAgBC,EAAUv5B,EAAQ+4B,GAMzC,OALA/4B,EAAO+uB,UAAYwK,EACnBv5B,EAAOw5B,SAAWD,EAAW,GAAK,EACd,IAAhBR,IACF/4B,EAAOy5B,cAAgBL,EAAuB,EAAGG,IAE5CA,CACT,CAGA,SAASG,EAAa9vB,EAAOjR,EAAQoE,EAAQ48B,GAC3C,MAAMv1B,EAAOuvB,EAAU/pB,EAAOjR,EAAQoE,GACtC,YAAgB/Q,IAAToY,EAAqBA,EAAOu1B,CACrC,CAGA,SAASC,EAAehwB,EAAO+vB,EAAWjkC,EAAM,GAC9C,MAAMmkC,EAAS7uB,SAASpB,EAAO,IAC/B,OAAOiwB,GAAU,GAAKA,GAAUnkC,EAAMmkC,EAASF,CACjD,CAEA,SAASG,EAAeC,EAASz6B,EAAMD,EAAI26B,OAAUhuC,GAC/CsT,KAAQy6B,IACJ16B,KAAM06B,IACVA,EAAQ16B,GAAM26B,EAAUA,EAAQD,EAAQz6B,IAASy6B,EAAQz6B,WAEpDy6B,EAAQz6B,GAEnB,CAGe,SAAS26B,EAAeF,EAASG,GAC9C,MAAMC,EAASjlC,OAAOm4B,OAAO,CAAC,EAAG0M,GAC3B/5B,EAAS,CAAC,EACVoV,EAAU8kB,EAAWE,YAAYhlB,QACjCilB,IAAaH,EAAWI,eAC9B,IAAI,cACF/C,EAAa,OACb5+B,EAAM,SACNk/B,EAAQ,OACR96B,EAAM,QACN+6B,EAAO,QACPE,EAAO,QACPC,EAAO,UACPG,EAAS,UACTK,EAAS,YACTM,EAAW,UACXhK,GACEmL,EAAWl6B,QAAU,CAAC,EAQ1B,GALA85B,EAAeK,EAAQ,gBAAiB,eAAe36B,GAAOA,EAAM,EAAI,IACxEs6B,EAAeK,EAAQ,WAAY,eACnCL,EAAeK,EAAQ,WAAY,eACnCL,EAAeK,EAAQ,eAAgB,mBAEnCA,EAAOtC,SAAU,CACnB,IAAIzT,EAcJ,GAbI+V,EAAOtC,WAAaA,IAClBziB,EAAQ+kB,EAAOtC,UACjBzT,EAAO+V,EAAOtC,UAIdzT,EAAO+V,EAAOtC,SAASlrC,MAAM,KAAK,GAC7ByoB,EAAQgP,KACXA,GAAO,YAIN+V,EAAOtC,SACVzT,EAAM,CACRyT,EAAW73B,EAAO63B,SAAWzT,EAG7B,MAAMmW,EAAax9B,GAAUqY,EAAQ4jB,GAErCj8B,EAAS7H,OAAOm4B,OAAO,CACrB10B,OAAQmrB,EACRiL,UAAWkK,GACV7jB,EAAQ4jB,IACPnB,IAAamB,GACf9jC,OAAOm4B,OAAOtwB,EAAQqY,EAAQyiB,IAEhC73B,EAAOjD,OAASA,EAGZpE,IAAW4hC,EAAW5hC,SACxBA,EAASqH,EAAOrH,OAASoE,EAAOpE,QAE9Bo2B,IAAcwL,EAAWxL,YAC3BA,EAAYuK,EAAgBv8B,EAAOgyB,UAAW/uB,EAAQ+4B,GAE1D,CACF,CAEA,GAAIoB,EAAOxhC,OAAQ,CACjB,MAAM6hC,EAAkD,mBAA5BL,EAAOxhC,OAAOm7B,UACpC2G,EAA8C,mBAA1BN,EAAOxhC,OAAOi7B,QAClC8G,EAAoBzI,EAAer5B,KAAKuhC,EAAOxhC,SAChD6hC,GAAgBC,GAAeC,KAClC/hC,EAASqH,EAAOrH,OAASwhC,EAAOxhC,eAE3BwhC,EAAOxhC,MAChB,CAGA,IAAIgiC,EAAevC,EACf,cAAe+B,IACjBQ,EAAef,EAAeO,EAAO/B,UAAWA,EAAW,UACpD+B,EAAO/B,WAEZuC,IAAiBvC,IACfuC,EAAevC,IAGX,YAAa+B,IACjBA,EAAOlC,QAAUA,GAEb,YAAakC,IACjBA,EAAOrC,QAAUA,IAIjBP,IAAkB4C,EAAO5C,gBAC3B4C,EAAO5C,cAAgB,IAEzBa,EAAYp4B,EAAOo4B,UAAYuC,GAOjC,IAAIC,EAAQ3C,EACR4C,EAAQ/C,EACZ,GAAI,YAAaqC,EAAQ,CACvB,MAAMW,GAAe,QAAU,EAAG,EAAG,GACrCF,EAA2B,OAAnBT,EAAOlC,QACX6C,EACApB,EAAaS,EAAOlC,QAASt/B,EAAQoE,EAAQ69B,GAC7CA,IAAUE,IACZF,GAAQ,QAAeA,EAAOxC,GAAW,WAEpC+B,EAAOlC,OAChB,CAsBA,GArBI,YAAakC,IACfU,EAA2B,OAAnBV,EAAOrC,aACX9rC,EACA0tC,EAAaS,EAAOrC,QAASn/B,EAAQoE,EAAQ89B,QACnC7uC,IAAV6uC,IACFA,GAAQ,QAAeA,EAAOzC,GAAW,WAEpC+B,EAAOrC,SAEZ+C,EAAQD,GACV3C,EAAUj4B,EAAOi4B,QAAU4C,EAC3B/C,EAAU93B,EAAO83B,QAAU8C,IAEvB3C,IAAY2C,IACd3C,EAAUj4B,EAAOi4B,QAAU2C,GAEzB9C,IAAY+C,IACd/C,EAAU93B,EAAO83B,QAAU+C,IAI3BV,EAAO5C,cAAe,CACxB,MAAMwD,EAAcZ,EAAO5C,cAC3B,GAA2B,mBAAhBwD,EACT/6B,EAAOu3B,cAAgB,KACvBv3B,EAAOg7B,cAAgB,CAAC/L,EAAW4K,IAAWkB,EAC5C,IAAI5qC,KAAK8+B,GACT4K,EACAQ,OAEG,CACL,MAAMY,EAAWj7B,EAAOu3B,cAAgBwD,EAAYlJ,QAAO,CAAC1tB,EAAO+2B,KACjE,MAAM92B,EAAOuvB,EAAUuH,EAAIviC,EAAQoE,GACnC,YAAgB/Q,IAAToY,GACH,QAAWD,GAAO,QAAeC,EAAMg0B,EAAWiC,IAClDl2B,CAAK,GACR,IACHnE,EAAOg7B,cAAgB/L,GAAagM,EAAS/J,SAASjC,EACxD,QACOkL,EAAO5C,aAChB,CACA,GAAI,oBAAqB4C,EAAQ,CAC/B,MAAMgB,EAAWxH,EAAUwG,EAAOzC,gBAAiB/+B,EAAQoE,QAC1C/Q,IAAbmvC,IACFn7B,EAAO03B,gBAAkByD,UAEpBhB,EAAOzC,eAChB,CAGA,GAAI,cAAeyC,EAAQ,CACzB,MAAMiB,EAAUC,OAAOlB,EAAOpL,WAAa,EACtCvwB,MAAM48B,KACTrM,EAAYuK,EAAgB8B,EAASp7B,EAAQ+4B,WAExCoB,EAAOpL,SAChB,CAWA,GAVIoL,EAAO3C,qBACTx3B,EAAOw3B,mBAAqB2C,EAAO3C,mBAAmB3F,OAAOsH,EAAa,WACnEgB,EAAO3C,oBAEZ2C,EAAO1C,wBACTz3B,EAAOy3B,sBAAwB0C,EAAO1C,sBAAsB5F,OAAOsH,EAAa,WACzEgB,EAAO1C,uBAIZ,gBAAiB0C,EAAQ,CAC3B,IAAImB,EAASnB,EAAOpB,YACpB,GAAIuC,EAAQ,CACV,MAAM7B,EAAkC,mBAAX6B,EACzB,CAACrM,EAAWsM,IAAgBD,EAAO,IAAInrC,KAAK8+B,GAAYsM,GACxDnC,EAAwBkC,EAAStwB,SAASswB,EAAQ,IAAMvM,GACxD0K,IACFV,EAAc/4B,EAAO+4B,YAAcuC,EACnCt7B,EAAOy5B,cAAgBA,EAE3B,MACEV,EAAc/4B,EAAO+4B,YAAc,EACnC/4B,EAAOy5B,cAAgB,YAElBU,EAAOpB,WAChB,CAGA,GAAI,qBAAsBoB,EAAQ,CAChC,MAAMpC,EAAmB/sB,SAASmvB,EAAOpC,iBAAkB,IACvDA,GAAoB,IACtB/3B,EAAO+3B,iBAAmBA,EAC1B/3B,EAAOw7B,UAAiC,IAArBzD,UAEdoC,EAAOpC,gBAChB,CACIoC,EAAO7C,gBACTt3B,EAAOs3B,cAAgBtW,OAAOmZ,EAAO7C,sBAC9B6C,EAAO7C,eAIhB,IAAImE,EAAazD,EACb,YAAamC,IACfsB,EAAa7B,EAAeO,EAAOnC,QAASA,UACrCmC,EAAOnC,SAGhByD,EAAarD,EAAYqD,EAAarD,EAAYqD,EAC9CA,IAAezD,IACjBA,EAAUh4B,EAAOg4B,QAAUyD,GAG7B,IAAIC,EAAejD,EAgBnB,GAfI,cAAe0B,IACjBuB,EAAe9B,EAAeO,EAAO1B,UAAWiD,UACzCvB,EAAO1B,WAGZiD,EAAetD,EACjBsD,EAAetD,EACNsD,EAAe1D,IACxB0D,EAAe1D,GAEb0D,IAAiBjD,IACnBz4B,EAAOy4B,UAAYiD,GAIjBvB,EAAO9B,UAAW,CACpB,MAAMA,EAAYnE,EAAUiG,EAAO9B,WAC/BA,EAAUsD,WAAWjuC,OAAS,IAChCsS,EAAOq4B,UAAYA,EAAUsD,mBAExBxB,EAAO9B,SAChB,CACA,GAAI8B,EAAOjC,UAAW,CACpB,MAAMA,EAAYhE,EAAUiG,EAAOjC,WAC/BA,EAAUyD,WAAWjuC,OAAS,IAChCsS,EAAOk4B,UAAYA,EAAUyD,mBAExBxB,EAAOjC,SAChB,CAOA,GAJI,yBAA0BiC,IAC5Bn6B,EAAO23B,qBAAuB,iBAAkB3D,YAAcmG,EAAOxC,4BAC9DwC,EAAOxC,sBAEZwC,EAAOhC,YAAa,CACtB,MAAMA,EAAcgC,EAAOhC,YAAY7lC,cAAc3F,MAAM,QAC3DqT,EAAOm4B,YAAc,CACnB3qB,EAAG2qB,EAAYhF,MAAK3lB,GAAY,SAANA,GAAsB,UAANA,KAAmB,OAC7DrS,EAAGg9B,EAAYhF,MAAKh4B,GAAY,QAANA,GAAqB,WAANA,KAAoB,eAExDg/B,EAAOhC,WAChB,CACA,GAAI,oBAAqBgC,EAAQ,CAC/B,OAAOA,EAAOvB,iBACZ,KAAK,EACL,KAAK,EACH54B,EAAO44B,gBAAkBuB,EAAOvB,uBAE7BuB,EAAOvB,eAChB,CASA,OANA1jC,OAAO0mC,QAAQzB,GAAQ/jB,SAAQ,EAAE5V,EAAKoJ,WACtB5d,IAAV4d,GAAuBpJ,KAAO04B,IAChCl5B,EAAOQ,GAAOoJ,EAChB,IAGK5J,CACT,CCpWA,MAAM67B,EAAsB,CAC1BC,KAAM,CAACt7B,IAAK,aACZu7B,KAAM,KACNC,OAAQ,CAACx7B,IAAK,UACdy7B,WAAY,CAACz7B,IAAK,YAAa07B,eAAe,GAC9CC,WAAY,CAAC37B,IAAK,aAAc07B,eAAe,GAC/CE,WAAY,CAAC57B,IAAK,UAAW07B,eAAe,GAC5C7E,YAAa,CAAC72B,IAAK,YAAa07B,eAAe,GAC/CvD,YAAa,CAACn4B,IAAK,IAAK07B,eAAe,GACvCG,aAAc,CAAC77B,IAAK,YAAa07B,eAAe,ICPlD,MAAMI,EAAaC,GAAcA,EAC9BvlC,KAAIwlC,GAAW,8CAA8CA,+BAC7DjtC,KAAK,IAER,GAAe,QAAqB,kMAK1B+sC,EAAW,CACX,uBACA,cACA,sLAOAA,EAAW,CACX,yBACA,0ECrBV,GAAe,QAAqB,oDACN,QAAgB,OAAQ,EAAG,CAACG,MAAO,kDAChC,QAAgB,OAAQ,qBCFzD,GAAe,QAAqB,iIAEb,QAAgB,OAAQ,EAAG,CAACA,MAAO,0BCA3C,MAAMC,EACnB,WAAAtC,CAAYuC,EAAQ38B,GAClB9K,OAAOm4B,OAAOvhC,KAAMkU,EAAQ,CAC1B28B,SACAC,QAAS1I,EAAU,uCAAuCkB,WAC1DyH,SAAU,GACVC,aAAcH,EAAOzC,WAAWI,iBAElCxuC,KAAKixC,KAAKjxC,KAAK6wC,OAAOzC,WAAWl6B,OACnC,CAEA,IAAA+8B,CAAKhD,GACC,cAAeA,IACjBjuC,KAAKkxC,UAAYlxC,KAAKmxC,KAAOlD,EAAQ3B,WAEvCtsC,KAAKoxC,WAAWnD,GAChBjuC,KAAKqxC,cACLrxC,KAAKsxC,iBACP,CAEA,gBAAAC,CAAiBC,EAAaC,EAAoBC,GAGhD1xC,KAAKmvC,SAAW,GAEhB,MAAM0B,EAAS7wC,KAAK6wC,OACpBA,EAAOc,mBAAmBH,GAC1BX,EAAOe,sBAAsBH,GAC7BZ,EAAOgB,sBAAsBH,EAC/B,CAEA,WAAAI,CAAYx5B,EAAMy5B,GAChBA,EAAUxpC,IAAI,aACd,QAAWvI,KAAKmvC,SAAU72B,EAC5B,CAIA,iBAAA05B,CAAkBzJ,EAAIpF,GACpB,IAAInW,EAAShtB,KAAKiyC,WAAW,IAAI5tC,KAAK8+B,IACtC,cAAenW,GACb,IAAK,UACHA,EAAS,CAACklB,QAASllB,GACnB,MACF,IAAK,SACHA,EAAS,CAAC0jB,QAAS1jB,GAGvB,GAAIA,EAAQ,CACV,MAAM+kB,EAAYxJ,EAAGwJ,UAIrB,IAHuB,IAAnB/kB,EAAOklB,SACTlyC,KAAK8xC,YAAY3O,EAAW4O,GAE1B/kB,EAAO0jB,QAAS,CAClB,MAAMyB,EAAenlB,EAAO0jB,QAAQ7vC,MAAM,OAC1CkxC,EAAUxpC,OAAO4pC,GACbA,EAAa/M,SAAS,aACxBplC,KAAK8xC,YAAY3O,EAAW4O,EAEhC,CACI/kB,EAAOolB,STbV,SAA2B7J,EAAI8J,GACpChJ,EAAgBd,GACZ8J,aAAyBC,iBAC3B/J,EAAGgK,YAAYF,GACmB,iBAAlBA,EAChB9J,EAAGgK,YAAYnK,EAAUiK,IACiB,mBAA1BA,EAAc/nB,SAC9B+nB,EAAc/nB,SAAS8f,IACrB7B,EAAGgK,YAAYnI,EAAK,GAG1B,CSGQoI,CAAkBjK,EAAIvb,EAAOolB,QAEjC,CACF,CAEA,UAAAK,CAAWlK,EAAI6J,EAASM,EAASp6B,GAAM,SAACy4B,EAAQ,MAAE9I,GAAQ0K,EAAYR,EAAe,IACnF5J,EAAGqK,YAAcR,EACbpyC,KAAKkxC,YACP3I,EAAGW,QAAQ5wB,KAAOA,GAGpB,MAAMy5B,EAAYxJ,EAAGwJ,UAWrB,GAVAxJ,EAAGsK,UAAY,mBAAmB7yC,KAAK8yC,YACnCJ,EAAU1yC,KAAK+yC,MACjBhB,EAAUxpC,IAAI,QACLmqC,EAAU1yC,KAAKiG,MACxB8rC,EAAUxpC,IAAI,QAEhBwpC,EAAUxpC,OAAO4pC,IACbQ,GAAc3yC,KAAKkvC,cAAc52B,EAAMtY,KAAKmxC,MAC9CnxC,KAAK8xC,YAAYx5B,EAAMy5B,GAErB9J,EAAO,CACT,MAAO+K,EAAYzE,GAAYtG,EAC3ByK,EAAUM,GAAcN,EAAUnE,GACpCwD,EAAUxpC,IAAI,SAEZmqC,IAAYM,GACdjB,EAAUxpC,IAAI,eAEZmqC,IAAYnE,GACdwD,EAAUxpC,IAAI,YAElB,CACIwoC,EAAS3L,SAASsN,IACpBX,EAAUxpC,IAAI,YAEZmqC,IAAY1yC,KAAKizC,SACnBlB,EAAUxpC,IAAI,WAGZvI,KAAKiyC,YACPjyC,KAAKgyC,kBAAkBzJ,EAAIjwB,EAE/B,CAEA,WAAA46B,CAAY3K,EAAImK,EAAS3B,GAAWiC,EAAYzE,IAC9C,MAAMwD,EAAYxJ,EAAGwJ,UACrBA,EAAUoB,OAAO,QAAS,cAAe,YAAa,WAAY,WAC9DT,EAAUM,GAAcN,EAAUnE,GACpCwD,EAAUxpC,IAAI,SAEZmqC,IAAYM,GACdjB,EAAUxpC,IAAI,eAEZmqC,IAAYnE,GACdwD,EAAUxpC,IAAI,aAEZwoC,EAAS3L,SAASsN,IACpBX,EAAUxpC,IAAI,YAEZmqC,IAAY1yC,KAAKizC,SACnBlB,EAAUxpC,IAAI,UAElB,CAEA,iBAAA6qC,CAAkBC,GAChBrzC,KAAKszC,KAAKC,iBAAiB,YAAYjpB,SAASie,IAC9CA,EAAGwJ,UAAUoB,OAAO,UAAU,IAEhCnzC,KAAKszC,KAAKE,SAASH,GAAWtB,UAAUxpC,IAAI,UAC9C,ECjIa,MAAMkrC,UAAiB7C,EACpC,WAAAtC,CAAYuC,GACV6C,MAAM7C,EAAQ,CACZM,GAAI,EACJzuC,KAAM,OACNowC,UAAW,OAEf,CAEA,IAAA7B,CAAKhD,EAAS0F,GAAiB,GAC7B,GAAIA,EAAgB,CAClB,MAAMC,EAAQxL,EAAUyL,GAAcvK,WACtCtpC,KAAK2P,IAAMikC,EAAMtK,WACjBtpC,KAAKszC,KAAOM,EAAME,UAClB9zC,KAAK8wC,QAAQyB,YAAYqB,EAC3B,CACAF,MAAMzC,KAAKhD,EACb,CAEA,UAAAmD,CAAWnD,GACT,IAAI8F,EA0BJ,GAxBI,YAAa9F,IACfjuC,KAAKmsC,QAAU8B,EAAQ9B,SAErB,YAAa8B,IACfjuC,KAAKgsC,QAAUiC,EAAQjC,SAErBiC,EAAQiB,gBACVlvC,KAAKkvC,cAAgBjB,EAAQiB,eAE3BjB,EAAQvC,qBACV1rC,KAAK0rC,mBAAqBuC,EAAQvC,mBAClCqI,GAAY,GAEV9F,EAAQtC,wBACV3rC,KAAK2rC,sBAAwBsC,EAAQtC,uBAEnC,mBAAoBsC,IACtBjuC,KAAK+sC,eAAiBkB,EAAQlB,gBAE5B,cAAekB,IACjBjuC,KAAKijC,UAAYgL,EAAQhL,UACzBjjC,KAAK0tC,QAAUO,EAAQP,QACvBqG,GAAY,GAEV9F,EAAQh9B,OAAQ,CAClB,MAAMA,EAASjR,KAAKiR,OAASg9B,EAAQh9B,OACrCjR,KAAKg0C,SAAW/iC,EAAO4xB,QACvB7iC,KAAKi0C,kBAAoBhjC,EAAOg6B,YAChC8I,GAAY,CACd,CAOA,GANI,kBAAmB9F,IACrBjuC,KAAKiyC,WAA8C,mBAA1BhE,EAAQ9C,cAC7B8C,EAAQ9C,mBACRjrC,GAGF,gBAAiB+tC,EACnB,GAAIA,EAAQhB,cAAgBjtC,KAAKitC,YAAa,CAC5C,MAAMiH,EAAY9L,EAAU+L,GAAqB7K,WACjDtpC,KAAKitC,YAAc,CACjB6D,QAASoD,EACTvkC,IAAKukC,EAAU5K,WACfpvB,MAAOg6B,EAAUJ,WAEnB9zC,KAAK8wC,QAAQsD,aAAaF,EAAWl0C,KAAK8wC,QAAQxH,WACpD,MAAWtpC,KAAKitC,cAAgBgB,EAAQhB,cACtCjtC,KAAK8wC,QAAQvH,YAAYvpC,KAAKitC,YAAY6D,SAC1C9wC,KAAKitC,YAAc,MAInB,kBAAmBgB,IACrBjuC,KAAK2tC,cAAgBM,EAAQN,eAG3B,mBAAoBM,IAClBA,EAAQzB,gBACVpD,EAAYppC,KAAK2P,KACb3P,KAAKitC,aACP7D,EAAYppC,KAAKitC,YAAYt9B,OAG/Bo5B,EAAY/oC,KAAK2P,KACb3P,KAAKitC,aACPlE,EAAY/oC,KAAKitC,YAAYt9B,OAM/BokC,GACFhsC,MAAMyL,KAAKxT,KAAK2P,IAAI6jC,UAAUlpB,SAAQ,CAACie,EAAIpK,KACzC,MAAMxuB,GAAO3P,KAAKijC,UAAY9E,GAAS,EACvCoK,EAAGqK,YAAc5yC,KAAKg0C,SAASrkC,GAC/B44B,EAAGsK,UAAY7yC,KAAK0rC,mBAAmBtG,SAASz1B,GAAO,eAAiB,KAAK,GAGnF,CAGA,WAAA0hC,GACE,MAAMhC,EAAW,IAAIhrC,KAAKrE,KAAK6wC,OAAOxB,UAChCgF,EAAWhF,EAASrpC,cACpBsuC,EAAYjF,EAAS/uB,WACrBi0B,GAAe,QAAUF,EAAUC,EAAW,GAC9CE,GAAQ,QAAeD,EAAcv0C,KAAKijC,UAAWjjC,KAAKijC,WAEhEjjC,KAAK+yC,MAAQwB,EACbv0C,KAAKiG,MAAO,QAAUouC,EAAUC,EAAY,EAAG,GAC/Ct0C,KAAKw0C,MAAQA,EACbx0C,KAAKizC,QAAUjzC,KAAK6wC,OAAOxB,QAC7B,CAGA,eAAAiC,GACE,MAAM,MAACj5B,EAAK,YAAEo8B,GAAez0C,KAAK6wC,OAAOzC,WACzCpuC,KAAK+wC,SAAW14B,EACZo8B,IACFz0C,KAAKioC,MAAQwM,EAAYp8B,MAE7B,CAGA,MAAAq8B,GAUE,GARA10C,KAAK8iC,MAAQ9iC,KAAK+sC,gBAAiB,eAAU7sC,EAE7CF,KAAKuxC,iBACH,EAAWvxC,KAAKizC,QAASjzC,KAAKi0C,kBAAmBj0C,KAAKiR,QACtDjR,KAAK+yC,OAAS/yC,KAAKmsC,QACnBnsC,KAAKiG,MAAQjG,KAAKgsC,SAGhBhsC,KAAKitC,YAAa,CACpB,MAAMhK,EAAYjjC,KAAKijC,UACjBwM,GAAc,QAAezvC,KAAK+yC,MAAO9P,EAAWA,GAC1Dl7B,MAAMyL,KAAKxT,KAAKitC,YAAY/yB,MAAMs5B,UAAUlpB,SAAQ,CAACie,EAAIpK,KACvD,MAAMwW,GAAkB,QAASlF,EAAatR,GAC9CoK,EAAGqK,YAAc5yC,KAAK2tC,cAAcgH,EAAiB1R,GACjD9E,EAAQ,GACVoK,EAAGwJ,UAAU4C,EAAkB30C,KAAKiG,KAAO,MAAQ,UAAU,OAC/D,GAEJ,CACA8B,MAAMyL,KAAKxT,KAAKszC,KAAKE,UAAUlpB,SAAQ,CAACie,EAAIpK,KAC1C,MAAMyW,GAAU,QAAQ50C,KAAKw0C,MAAOrW,GAC9B4J,EAAU,IAAI1jC,KAAKuwC,GACnBp8B,EAAMuvB,EAAQ3nB,SACd+xB,EAAe,GAEjBnyC,KAAK8iC,QAAU8R,GACjBzC,EAAajtC,KAAK,SAEhBlF,KAAK2rC,sBAAsBvG,SAAS5sB,IACtC25B,EAAajtC,KAAK,eAGpBlF,KAAKyyC,WACHlK,EACAR,EAAQ7nB,UACR00B,EACAA,EACA50C,KACA40C,EAAU50C,KAAKmsC,SACVyI,EAAU50C,KAAKgsC,SACfhsC,KAAK0rC,mBAAmBtG,SAAS5sB,GACtC25B,EACD,GAEL,CAGA,OAAA0C,GACE,MAAM5M,EAAQjoC,KAAKioC,OAAS,GAC5BlgC,MAAMyL,KAAKxT,KAAKszC,KAAKE,UAAUlpB,SAASie,IACtCvoC,KAAKkzC,YAAY3K,EAAIgH,OAAOhH,EAAGW,QAAQ5wB,MAAOtY,KAAK+wC,SAAU9I,EAAM,GAEvE,CAGA,YAAA6M,GACE90C,KAAKozC,kBAAkB9wC,KAAKC,OAAOvC,KAAKizC,QAAUjzC,KAAKw0C,OAAS,OAClE,EC1LF,SAASO,EAAkB9M,EAAO+M,GAChC,IAAK/M,IAAUA,EAAM,KAAOA,EAAM,GAChC,OAGF,OAAQgN,EAAQC,IAAUC,EAAMC,IAASnN,EACzC,OAAIgN,EAASD,GAAYG,EAAOH,OAAhC,EAGO,CACLC,IAAWD,EAAWE,GAAU,EAChCC,IAASH,EAAWI,EAAO,GAE/B,CAEe,MAAMC,UAAmBzE,EACtC,WAAAtC,CAAYuC,GACV6C,MAAM7C,EAAQ,CACZM,GAAI,EACJzuC,KAAM,SACNowC,UAAW,SAEf,CAEA,IAAA7B,CAAKhD,EAAS0F,GAAiB,GACzBA,IACF3zC,KAAKszC,KAAOtzC,KAAK8wC,QACjB9wC,KAAK8wC,QAAQiB,UAAUxpC,IAAI,SAAU,mBACrCvI,KAAKszC,KAAKf,YAAYnK,GAAU,QAAgB,OAAQ,GAAI,CAAC,aAAckN,GAAMA,MACjFt1C,KAAK+yC,MAAQ,EACb/yC,KAAKiG,KAAO,IAEdytC,MAAMzC,KAAKhD,EACb,CAEA,UAAAmD,CAAWnD,GAIT,GAHIA,EAAQh9B,SACVjR,KAAKu1C,WAAatH,EAAQh9B,OAAOrE,aAE/B,YAAaqhC,EACf,QAAwB/tC,IAApB+tC,EAAQ9B,QACVnsC,KAAKw1C,QAAUx1C,KAAKy1C,SAAWz1C,KAAKmsC,aAAUjsC,MACzC,CACL,MAAMw1C,EAAa,IAAIrxC,KAAK4pC,EAAQ9B,SACpCnsC,KAAKw1C,QAAUE,EAAW1vC,cAC1BhG,KAAKy1C,SAAWC,EAAWp1B,WAC3BtgB,KAAKmsC,QAAUuJ,EAAWz0B,QAAQ,EACpC,CAEF,GAAI,YAAagtB,EACf,QAAwB/tC,IAApB+tC,EAAQjC,QACVhsC,KAAK21C,QAAU31C,KAAK41C,SAAW51C,KAAKgsC,aAAU9rC,MACzC,CACL,MAAM21C,EAAa,IAAIxxC,KAAK4pC,EAAQjC,SACpChsC,KAAK21C,QAAUE,EAAW7vC,cAC1BhG,KAAK41C,SAAWC,EAAWv1B,WAC3BtgB,KAAKgsC,SAAU,QAAUhsC,KAAK21C,QAAS31C,KAAK41C,SAAW,EAAG,EAC5D,CAEE3H,EAAQiB,gBACVlvC,KAAKkvC,cAAgBlvC,KAAKkxC,WAAuC,OAA1BjD,EAAQxC,cAC3CwC,EAAQiB,cACR,KAAM,GAER,oBAAqBjB,IACvBjuC,KAAKiyC,WAAgD,mBAA5BhE,EAAQ5C,gBAC7B4C,EAAQ5C,qBACRnrC,EAER,CAGA,WAAAmxC,GACE,MAAMhC,EAAW,IAAIhrC,KAAKrE,KAAK6wC,OAAOxB,UACtCrvC,KAAKua,KAAO80B,EAASrpC,cACrBhG,KAAKizC,QAAU5D,EAAS/uB,UAC1B,CAGA,eAAAgxB,GACE,MAAM,MAACj5B,EAAK,YAAEo8B,GAAez0C,KAAK6wC,OAAOzC,WACzCpuC,KAAK+wC,SAAW14B,EAAM0tB,QAAO,CAACgL,EAAU5N,KACtC,MAAM7qB,EAAO,IAAIjU,KAAK8+B,GAChB5oB,EAAOjC,EAAKtS,cACZ+G,EAAQuL,EAAKgI,WAMnB,YALuBpgB,IAAnB6wC,EAASx2B,GACXw2B,EAASx2B,GAAQ,CAACxN,IAElB,QAAWgkC,EAASx2B,GAAOxN,GAEtBgkC,CAAQ,GACd,CAAC,GACA0D,GAAeA,EAAYp8B,QAC7BrY,KAAKioC,MAAQwM,EAAYp8B,MAAMnN,KAAIi4B,IACjC,MAAM7qB,EAAO,IAAIjU,KAAK8+B,GACtB,OAAOzwB,MAAM4F,QAAQpY,EAAY,CAACoY,EAAKtS,cAAesS,EAAKgI,WAAW,IAG5E,CAGA,MAAAo0B,GACE10C,KAAKuxC,iBACHvxC,KAAKua,KACLva,KAAKua,MAAQva,KAAKw1C,QAClBx1C,KAAKua,MAAQva,KAAK21C,SAGpB,MAAM5E,EAAW/wC,KAAK+wC,SAAS/wC,KAAKua,OAAS,GACvCu7B,EAAe91C,KAAKua,KAAOva,KAAKw1C,SAAWx1C,KAAKua,KAAOva,KAAK21C,QAC5DI,EAAY/1C,KAAKua,OAASva,KAAKw1C,QAC/BQ,EAAYh2C,KAAKua,OAASva,KAAK21C,QAC/B1N,EAAQ8M,EAAkB/0C,KAAKioC,MAAOjoC,KAAKua,MAEjDxS,MAAMyL,KAAKxT,KAAKszC,KAAKE,UAAUlpB,SAAQ,CAACie,EAAIpK,KAC1C,MAAM7lB,GAAO,QAAe,IAAIjU,KAAKrE,KAAKua,KAAM4jB,EAAO,GAAI,EAAGn+B,KAAKgxC,YAEnEhxC,KAAKyyC,WACHlK,EACAvoC,KAAKu1C,WAAWpX,GAChBA,EACA7lB,EACA,CAACy4B,WAAU9I,SACX6N,GACKC,GAAa5X,EAAQn+B,KAAKy1C,UAC1BO,GAAa7X,EAAQn+B,KAAK41C,SAChC,GAEL,CAGA,OAAAf,GACE,MAAM9D,EAAW/wC,KAAK+wC,SAAS/wC,KAAKua,OAAS,GACvC0tB,EAAQ8M,EAAkB/0C,KAAKioC,MAAOjoC,KAAKua,OAAS,GAC1DxS,MAAMyL,KAAKxT,KAAKszC,KAAKE,UAAUlpB,SAAQ,CAACie,EAAIpK,KAC1Cn+B,KAAKkzC,YAAY3K,EAAIpK,EAAO4S,EAAU9I,EAAM,GAEhD,CAGA,YAAA6M,GACE90C,KAAKozC,kBAAkBpzC,KAAKizC,QAC9B,ECzIa,MAAMgD,UAAkBrF,EACrC,WAAAtC,CAAYuC,EAAQ38B,GAClBw/B,MAAM7C,EAAQ38B,EAChB,CAEA,IAAA+8B,CAAKhD,EAAS0F,GAAiB,GAVjC,IAAqBuC,EAWbvC,IACF3zC,KAAKm2C,QAAsB,GAAZn2C,KAAKo2C,KACpBp2C,KAAKq2C,iBAAmB,aAbTH,EAakCl2C,KAAK8yC,UAZnD,IAAIoD,GAAMnQ,QAAO,CAACT,EAAKgR,EAAIhB,IAAOhQ,GAAOgQ,EAAKgB,EAAKA,EAAG7rC,gBAAe,MAaxEzK,KAAKszC,KAAOtzC,KAAK8wC,QACjB9wC,KAAK8wC,QAAQiB,UAAUxpC,IAAIvI,KAAK0C,KAAM,mBACtC1C,KAAKszC,KAAKf,YAAYnK,GAAU,QAAgB,OAAQ,OAE1DsL,MAAMzC,KAAKhD,EACb,CAEA,UAAAmD,CAAWnD,GAsBT,GArBI,YAAaA,SACS/tC,IAApB+tC,EAAQ9B,QACVnsC,KAAKw1C,QAAUx1C,KAAKmsC,aAAUjsC,GAE9BF,KAAKw1C,SAAU,QAAkBvH,EAAQ9B,QAASnsC,KAAKo2C,MACvDp2C,KAAKmsC,SAAU,QAAUnsC,KAAKw1C,QAAS,EAAG,KAG1C,YAAavH,SACS/tC,IAApB+tC,EAAQjC,QACVhsC,KAAK21C,QAAU31C,KAAKgsC,aAAU9rC,GAE9BF,KAAK21C,SAAU,QAAkB1H,EAAQjC,QAAShsC,KAAKo2C,MACvDp2C,KAAKgsC,SAAU,QAAUhsC,KAAK21C,QAAS,GAAI,MAG3C1H,EAAQiB,gBACVlvC,KAAKkvC,cAAgBlvC,KAAKkxC,WAAuC,OAA1BjD,EAAQxC,cAC3CwC,EAAQiB,cACR,KAAM,GAERlvC,KAAKq2C,oBAAoBpI,EAAS,CACpC,MAAMgE,EAAahE,EAAQjuC,KAAKq2C,kBAChCr2C,KAAKiyC,WAAmC,mBAAfA,EAA4BA,OAAa/xC,CACpE,CACF,CAGA,WAAAmxC,GACE,MAAMhC,EAAW,IAAIhrC,KAAKrE,KAAK6wC,OAAOxB,UAChC0D,GAAQ,QAAkB1D,EAAUrvC,KAAKm2C,SACzClwC,EAAO8sC,EAAQ,EAAI/yC,KAAKo2C,KAE9Bp2C,KAAK+yC,MAAQA,EACb/yC,KAAKiG,KAAOA,EACZjG,KAAKw0C,MAAQzB,EAAQ/yC,KAAKo2C,KAC1Bp2C,KAAKizC,SAAU,QAAkB5D,EAAUrvC,KAAKo2C,KAClD,CAGA,eAAA9E,GACE,MAAM,MAACj5B,EAAK,YAAEo8B,GAAez0C,KAAK6wC,OAAOzC,WACzCpuC,KAAK+wC,SAAW14B,EAAM0tB,QAAO,CAACzrB,EAAO6oB,KAC5B,QAAW7oB,GAAO,QAAkB6oB,EAAWnjC,KAAKo2C,QAC1D,IACC3B,GAAeA,EAAYp8B,QAC7BrY,KAAKioC,MAAQwM,EAAYp8B,MAAMnN,KAAIi4B,IACjC,QAAkBjjC,IAAdijC,EACF,OAAO,QAAkBA,EAAWnjC,KAAKo2C,KAC3C,IAGN,CAGA,MAAA1B,GACE10C,KAAKuxC,iBACH,GAAGvxC,KAAK+yC,SAAS/yC,KAAKiG,OACtBjG,KAAK+yC,OAAS/yC,KAAKw1C,QACnBx1C,KAAKiG,MAAQjG,KAAK21C,SAGpB5tC,MAAMyL,KAAKxT,KAAKszC,KAAKE,UAAUlpB,SAAQ,CAACie,EAAIpK,KAC1C,MAAMyW,EAAU50C,KAAKw0C,MAASrW,EAAQn+B,KAAKo2C,KACrC99B,GAAO,QAAe,IAAIjU,KAAKuwC,EAAS,EAAG,GAAI,EAAG50C,KAAKgxC,YAE7DzI,EAAGW,QAAQ3uB,KAAOq6B,EAClB50C,KAAKyyC,WACHlK,EACAqM,EACAA,EACAt8B,EACAtY,KACA40C,EAAU50C,KAAKw1C,SAAWZ,EAAU50C,KAAK21C,QAC1C,GAEL,CAGA,OAAAd,GACE,MAAM5M,EAAQjoC,KAAKioC,OAAS,GAC5BlgC,MAAMyL,KAAKxT,KAAKszC,KAAKE,UAAUlpB,SAASie,IACtCvoC,KAAKkzC,YAAY3K,EAAIgH,OAAOhH,EAAGqK,aAAc5yC,KAAK+wC,SAAU9I,EAAM,GAEtE,CAGA,YAAA6M,GACE90C,KAAKozC,kBAAkB9wC,KAAKC,OAAOvC,KAAKizC,QAAUjzC,KAAKw0C,OAASx0C,KAAKo2C,MACvE,EChHK,SAASG,EAAuBnI,EAAYoI,GACjD,MAAMvI,EAAU,CACdwI,SAAS,EACTC,YAAY,EACZC,OAAQ,CACNr+B,KAAM81B,EAAWluB,UACjBmvB,SAAU,IAAIhrC,KAAK+pC,EAAWyC,OAAOxB,UACrCtB,OAAQK,EAAWyC,OAAO+F,YAAYzF,GACtC/C,eAGJA,EAAW0C,QAAQ+F,cAAc,IAAIC,YAAYN,EAAMvI,GACzD,CAGO,SAAS8I,EAAe3I,EAAYxZ,GACzC,MAAM,OAAC1gB,EAAM,OAAE28B,GAAUzC,GACnB,YAACwI,EAAW,SAAEvH,GAAYwB,EAChC,IAAImG,EACJ,OAAQJ,EAAYzF,IAClB,KAAK,EACH6F,GAAc,QAAU3H,EAAUza,GAClC,MACF,KAAK,EACHoiB,GAAc,QAAS3H,EAAUza,GACjC,MACF,QACEoiB,GAAc,QAAS3H,EAAUza,EAAYgiB,EAAYT,SAE7Da,GAAc,QAAaA,EAAa9iC,EAAOi4B,QAASj4B,EAAO83B,SAC/D6E,EAAOoG,YAAYD,GAAatC,QAClC,CAEO,SAASwC,EAAW9I,GACzB,MAAML,EAASK,EAAWyC,OAAO+F,YAAYzF,GACzCpD,IAAWK,EAAWl6B,OAAOg4B,SAGjCkC,EAAWyC,OAAOsG,WAAWpJ,EAAS,GAAG2G,QAC3C,CAEO,SAAS0C,EAAehJ,GAC7BA,EAAWntB,QAAQ,CAAC+hB,OAAO,GAC7B,CAEO,SAASqU,GAAkBjJ,GAChC,MAAM/f,GAAc,UACsB,IAAtC+f,EAAWl6B,OAAO44B,gBACpBsB,EAAWntB,QAAQoN,EAAa,CAACipB,cAAc,EAAMjI,SAAUhhB,IAE/D+f,EAAWmJ,eAAelpB,GAAa,EAE3C,CAEO,SAASmpB,GAAQpJ,GACtB,MAAMqJ,EAAS,KACTrJ,EAAWl6B,OAAO84B,aACpBoB,EAAWsJ,OAAO,CAACC,QAAQ,IAE3BvJ,EAAWyG,QAAQ,SAErBzG,EAAW6B,MAAM,EAEba,EAAU1C,EAAW0C,QAEvBlI,EAAgBkI,GAClBA,EAAQpH,iBAAiB,OAAQ+N,EAAQ,CAACG,MAAM,IAEhDH,GAEJ,CCtEA,SAASI,GAAwBzJ,EAAY0J,GAC3C,MAAMjH,EAASzC,EAAWyC,OACpBxB,EAAW,IAAIhrC,KAAKwsC,EAAOxB,UAC3BtB,EAAS8C,EAAO+F,YAAYzF,GAC5B9N,EAAqB,IAAX0K,GACZ,QAAUsB,EAAUyI,EAAYzI,EAAS/uB,aACzC,QAAS+uB,EAAUyI,EAAYzI,EAASrpC,eAE5C6qC,EAAOoG,YAAY5T,GAAS8T,WAAWpJ,EAAS,GAAG2G,QACrD,CAEO,SAASqD,GAAkB3J,GAChC8I,EAAW9I,EACb,CAEO,SAAS4J,GAAkB5J,GAChC2I,EAAe3I,GAAa,EAC9B,CAEO,SAAS6J,GAAkB7J,GAChC2I,EAAe3I,EAAY,EAC7B,CAGO,SAAS8J,GAAY9J,EAAYvD,GACtC,MAAMlhC,EAASihC,EAAuBC,EAAI,oBAC1C,IAAKlhC,GAAUA,EAAOooC,UAAUoG,SAAS,YACvC,OAGF,MAAM,GAAChH,EAAE,UAAED,GAAa9C,EAAWyC,OAAO+F,YACpCz0C,EAAOwH,EAAOu/B,QAChBgI,EACF9C,EAAWntB,QAAQsuB,OAAOptC,EAAKmW,OAE/Bu/B,GAAwBzJ,EAAYmB,OADpB,IAAP4B,EACkChvC,EAAK4K,MAEL5K,EAAKoY,MAEpD,CAEO,SAAS69B,GAAkBvN,GAChCA,EAAGwN,gBACL,CCpBA,MAAMC,GAAgB,CAAC,OAAQ,MAAO,QAAS,UAAUvS,QAAO,CAACz1B,EAAKoE,KACpEpE,EAAIoE,GAAO,qBAAqBA,IACzBpE,IACN,CAAC,GACEioC,GAAO3vC,GAAOA,EAAM,GAAGA,MAAUA,EAEvC,SAAS4vC,GAAqB3H,EAAQ5C,GAUpC,GATI,UAAWA,IACTA,EAAQrB,OACViE,EAAO4H,SAAS7L,MAAMgG,YAAc3E,EAAQrB,MAC5CxD,EAAYyH,EAAO4H,SAAS7L,SAE5BiE,EAAO4H,SAAS7L,MAAMgG,YAAc,GACpC7J,EAAY8H,EAAO4H,SAAS7L,SAG5BqB,EAAQ1B,UAAW,CACrB,MAAM4D,EAAaU,EAAO4H,SAAStI,WACnC9G,EAAgB8G,GAChBlC,EAAQ1B,UAAUjiB,SAAS8f,IACzB+F,EAAWoC,YAAYnI,EAAKsO,WAAU,GAAM,GAEhD,CACA,GAAIzK,EAAQ7B,UAAW,CACrB,MAAMiE,EAAaQ,EAAO4H,SAASpI,WACnChH,EAAgBgH,GAChBpC,EAAQ7B,UAAU9hB,SAAS8f,IACzBiG,EAAWkC,YAAYnI,EAAKsO,WAAU,GAAM,GAEhD,CAYA,GAXIzK,EAAQh9B,SACV4/B,EAAO4H,SAAS5L,YAAY+F,YAAc3E,EAAQh9B,OAAO6xB,MACzD+N,EAAO4H,SAASlN,YAAYqH,YAAc3E,EAAQh9B,OAAO+xB,OAEvD,gBAAiBiL,IACfA,EAAQpB,YACVzD,EAAYyH,EAAO4H,SAAS5L,aAE5B9D,EAAY8H,EAAO4H,SAAS5L,cAG5B,YAAaoB,GAAW,YAAaA,EAAS,CAChD,MAAM,QAAC9B,EAAO,QAAEH,GAAW6E,EAAOzC,WAAWl6B,OAC7C28B,EAAO4H,SAAS5L,YAAYsC,WAAY,SAAU,UAAShD,EAASH,EACtE,CACI,gBAAiBiC,IACfA,EAAQ1C,YACVnC,EAAYyH,EAAO4H,SAASlN,aAE5BxC,EAAY8H,EAAO4H,SAASlN,aAGlC,CAKA,SAASoN,GAAqBvK,GAC5B,MAAM,MAAC/1B,EAAK,OAAEnE,EAAM,eAAEs6B,GAAkBJ,EAClCiB,EAAWh3B,EAAMzW,OAAS,GAC5B,QAAWyW,IACX,QAAenE,EAAO03B,gBAAiB13B,EAAOo4B,UAAWkC,GAC7D,OAAO,QAAaa,EAAUn7B,EAAOi4B,QAASj4B,EAAO83B,QACvD,CAGA,SAAS4M,GAAY/H,EAAQxN,GACrB,iBAAkBwN,GAAWxN,IAAYwN,EAAOxB,WACpDwB,EAAOgI,aAAehI,EAAOxB,UAE/BwB,EAAOxB,SAAWhM,EAKlB,MAAM,GAAC8N,EAAE,KAAE52B,EAAI,MAAEw4B,EAAK,KAAE9sC,GAAQ4qC,EAAO+F,YACjCvC,EAAW,IAAIhwC,KAAKg/B,GAASr9B,cACnC,OAAQmrC,GACN,KAAK,EACH,OAAO9N,EAAU0P,GAAS1P,EAAUp9B,EACtC,KAAK,EACH,OAAOouC,IAAa95B,EACtB,QACE,OAAO85B,EAAWtB,GAASsB,EAAWpuC,EAE5C,CAEA,SAAS6yC,GAAiBvQ,GACxB,OAAOwQ,OAAOC,iBAAiBzQ,GAAI3T,SACrC,CAGA,SAASqkB,GAAkB1Q,GACzB,MAAM+B,EAAShC,EAAUC,GACzB,GAAI+B,IAAWpC,SAASgR,MAAS5O,EASjC,MAAoD,YAA7CyO,OAAOC,iBAAiB1O,GAAQ94B,SACnC84B,EACA2O,GAAkB3O,EACxB,CAGe,MAAM6O,GACnB,WAAA7K,CAAYF,GACV,MAAM,OAACl6B,EAAM,WAAEklC,GAAcp5C,KAAKouC,WAAaA,EAEzCiL,EAAWC,EAAe7yC,QAAQ,iBAAkByN,EAAOqlC,aAC3DzI,EAAU9wC,KAAK8wC,QAAU1I,EAAUiR,GAAU/P,YAC5CkQ,EAAQC,EAAMC,GAAU5I,EAAQxH,WAAWkK,SAC5C5G,EAAQ4M,EAAOG,mBACdxJ,EAAYG,EAAYD,GAAcmJ,EAAOI,iBAAiBpG,UAC9D3G,EAAatB,GAAemO,EAAOpQ,WAAWkK,SAC/CiF,EAAW,CACf7L,QACAuD,aACAG,aACAD,aACAxD,cACAtB,eAEFvrC,KAAKy5C,KAAOA,EACZz5C,KAAKy4C,SAAWA,EAEhB,MAAMoB,EAAeT,EAAa,WAAa,SAC/CtI,EAAQiB,UAAUxpC,IAAI,cAAcsxC,KAEpCrB,GAAqBx4C,KAAMkU,GAC3BlU,KAAKqvC,SAAWsJ,GAAqBvK,GAGrC,EAAkBA,EAAY,CAC5B,CAAC0C,EAAS,YAAasH,IACvB,CAACqB,EAAM,QAASvB,GAAY4B,KAAK,KAAM1L,IACvC,CAACqK,EAASnI,WAAY,QAASyH,GAAkB+B,KAAK,KAAM1L,IAC5D,CAACqK,EAAStI,WAAY,QAAS6H,GAAkB8B,KAAK,KAAM1L,IAC5D,CAACqK,EAASpI,WAAY,QAAS4H,GAAkB6B,KAAK,KAAM1L,IAC5D,CAACqK,EAAS5L,YAAa,QAASwK,GAAkByC,KAAK,KAAM1L,IAC7D,CAACqK,EAASlN,YAAa,QAAS6L,EAAe0C,KAAK,KAAM1L,MAI5DpuC,KAAK+5C,MAAQ,CACX,IAAItG,EAASzzC,MACb,IAAIq1C,EAAWr1C,MACf,IAAIi2C,EAAUj2C,KAAM,CAACmxC,GAAI,EAAGzuC,KAAM,QAASowC,UAAW,OAAQsD,KAAM,IACpE,IAAIH,EAAUj2C,KAAM,CAACmxC,GAAI,EAAGzuC,KAAM,UAAWowC,UAAW,SAAUsD,KAAM,MAE1Ep2C,KAAK42C,YAAc52C,KAAK+5C,MAAM7lC,EAAOy4B,WAErC3sC,KAAK42C,YAAYlC,SACjB10C,KAAKy5C,KAAKlH,YAAYvyC,KAAK42C,YAAY9F,SACnC58B,EAAO8lC,UACT9lC,EAAO8lC,UAAUzH,YAAYvyC,KAAK8wC,SAElCsI,EAAWa,MAAMj6C,KAAK8wC,QAE1B,CAEA,UAAAM,CAAWnD,GACTuK,GAAqBx4C,KAAMiuC,GAC3BjuC,KAAK+5C,MAAMzvB,SAAS4vB,IAClBA,EAAKjJ,KAAKhD,GAAS,EAAM,IAE3BjuC,KAAK42C,YAAYlC,QACnB,CAEA,MAAAyF,GACEn6C,KAAK8wC,QAAQqC,QACf,CAEA,IAAAnD,GACE,GAAIhwC,KAAKo6C,OACP,OAGF,MAAM,WAAChM,EAAU,QAAE0C,GAAW9wC,KACxBo5C,EAAahL,EAAWgL,WAC9B,GAAIA,EAAY,CAEd,MAAMiB,EAAiBvB,GAAiBM,GACpCiB,IAAmBvB,GAAiBxQ,EAAUwI,IAChDA,EAAQ7W,IAAMogB,EACLvJ,EAAQ7W,KACjB6W,EAAQwJ,gBAAgB,OAO1Bt6C,KAAKu6C,QACLzJ,EAAQiB,UAAUxpC,IAAI,UAElB6lC,EAAWl6B,OAAO23B,sBACpBuN,EAAWoB,MAEf,MACE1J,EAAQiB,UAAUxpC,IAAI,UAExBvI,KAAKo6C,QAAS,EACd7D,EAAuBnI,EAAY,OACrC,CAEA,IAAA6B,GACOjwC,KAAKo6C,SAGVp6C,KAAKouC,WAAWmC,eAChBvwC,KAAK8wC,QAAQiB,UAAUoB,OAAO,UAC9BnzC,KAAKo6C,QAAS,EACd7D,EAAuBv2C,KAAKouC,WAAY,QAC1C,CAEA,KAAAmM,GACE,MAAM,UAACxI,EAAS,MAAE/I,GAAShpC,KAAK8wC,QAEhC9H,EAAMC,QAAU,QAEhB,MACEwR,MAAOC,EACPC,OAAQC,GACN56C,KAAK8wC,QAAQ+J,wBACXC,EAAe96C,KAAK8wC,QAAQgK,aAGlC9R,EAAMC,QAAU,GAEhB,MAAM,OAAC/0B,EAAM,WAAEklC,GAAcp5C,KAAKouC,YAEhC2M,KAAMC,EACNC,IAAKC,EACLC,MAAOC,EACPC,OAAQC,EACRb,MAAOc,EACPZ,OAAQa,GACNpC,EAAWyB,wBACf,IAAKn5B,EAAG+5B,EAASpsC,EAAGqsC,GAAWxnC,EAAOm4B,YAClC0O,EAAOC,EACPC,EAAMC,EAGV,GAAIJ,IAAiB5S,SAASgR,MAAS4B,EAGhC,CACL,MAAMa,EAAmBb,EAAaD,wBACtCE,GAAQY,EAAiBZ,KAAOD,EAAac,WAC7CX,GAAOU,EAAiBV,IAAMH,EAAae,SAC7C,MANEd,GAAQhC,OAAO+C,QACfb,GAAOlC,OAAOgD,QAQhB,MAAMC,EAAe/C,GAAkBG,GACvC,IAAI6C,EAAiB,EACjBC,EAAgB,GAElBC,YAAaC,EACbC,aAAcC,GACZpU,SAASqU,gBAEb,GAAIP,EAAc,CAChB,MAAMQ,EAAmBR,EAAanB,wBAClC2B,EAAiBvB,IAAM,IACzBiB,EAAgBM,EAAiBvB,KAE/BuB,EAAiBzB,KAAO,IAC1BkB,EAAiBO,EAAiBzB,MAEhCyB,EAAiBrB,MAAQiB,IAC3BA,EAAkBI,EAAiBrB,OAEjCqB,EAAiBnB,OAASiB,IAC5BA,EAAmBE,EAAiBnB,OAExC,CAGA,IAAIoB,EAAa,EACD,SAAZhB,IACET,EAAYiB,GACdR,EAAU,OACVgB,EAAaR,EAAiBjB,GACrBA,EAAYN,EAAgB0B,GACrCX,EAAU,QACNW,EAAkBhB,IACpBqB,EAAaL,EAAkBhB,IAGjCK,EAD0C,QAAjC3C,GAAiBM,GAChBgC,EAAaV,EAAgBuB,EAAiB,OAAS,QAEvD,QAGE,UAAZR,IACFV,GAAQQ,EAAab,GAEvBK,GAAQ0B,EAGQ,SAAZf,IAEAA,EADER,EAAWN,EAAiBsB,GACpBZ,EAAcV,EAAiB0B,EAAmB,MAElD,UAGE,QAAZZ,EACFT,GAAOL,EAEPK,GAAOO,EAGTzJ,EAAUoB,UAAU/pC,OAAO+gB,OAAOmuB,KAClCvG,EAAUxpC,IAAI+vC,GAAcmD,GAAUnD,GAAcoD,IAEpD1S,EAAM+R,KAAOxC,GAAKwC,GAClB/R,EAAMiS,IAAM1C,GAAK0C,EACnB,CAEA,kBAAAtJ,CAAmB+K,GACjB18C,KAAKy4C,SAASnI,WAAWsC,YAAc8J,CACzC,CAEA,qBAAA9K,CAAsBzC,GACpBnvC,KAAKy4C,SAAStI,WAAWhB,SAAWA,CACtC,CAEA,qBAAA0C,CAAsB1C,GACpBnvC,KAAKy4C,SAASpI,WAAWlB,SAAWA,CACtC,CAEA,UAAAgI,CAAWpJ,GACT,MAAM6I,EAAc52C,KAAK42C,YAQzB,OAPI7I,IAAW6I,EAAYzF,KACpBnxC,KAAK28C,WACR38C,KAAK28C,SAAW/F,GAElB52C,KAAK42C,YAAc52C,KAAK+5C,MAAMhM,GAC9B/tC,KAAK48C,cAAgB,UAEhB58C,IACT,CAGA,WAAAi3C,CAAYD,GAKV,OAJAh3C,KAAK48C,cAAgBhE,GAAY54C,KAAMg3C,GAAe,SAAW,eACjEh3C,KAAK+5C,MAAMzvB,SAAS4vB,IAClBA,EAAK7I,aAAa,IAEbrxC,IACT,CAGA,MAAA03C,CAAOrI,OAAWnvC,GAChB,MAAM82C,OAA2B92C,IAAbmvC,EAChBsJ,GAAqB34C,KAAKouC,YAC1BiB,EAMJ,OALArvC,KAAK48C,cAAgBhE,GAAY54C,KAAMg3C,GAAe,SAAW,UACjEh3C,KAAK+5C,MAAMzvB,SAAS4vB,IAClBA,EAAK7I,cACL6I,EAAK5I,iBAAiB,IAEjBtxC,IACT,CAGA,MAAA00C,CAAOmI,GAAc,GACnB,MAAM,YAACjG,EAAW,WAAExI,EAAYuO,SAAUG,GAAW98C,KAC/C+8C,EAAc,IAAI14C,KAAKrE,KAAK64C,cAC5BmE,EAAgBH,GAAe78C,KAAK48C,eAAkB,SAU5D,UATO58C,KAAK28C,gBACL38C,KAAK64C,oBACL74C,KAAK48C,cAEZhG,EAAYoG,KACRF,IACF98C,KAAKy5C,KAAKwD,aAAarG,EAAY9F,QAASgM,EAAQhM,SACpDyF,EAAuBnI,EAAY,gBAEhC17B,MAAMqqC,GAAc,CACvB,MAAM/F,EAAc,IAAI3yC,KAAKrE,KAAKqvC,UAC9B2H,EAAYhxC,gBAAkB+2C,EAAY/2C,eAC5CuwC,EAAuBnI,EAAY,cAEjC4I,EAAY12B,aAAey8B,EAAYz8B,YACzCi2B,EAAuBnI,EAAY,cAEvC,CACF,ECnZF,SAAS8O,GAAqB5kC,EAAM6kC,EAAOC,EAAUC,EAAQl6B,EAAKvZ,GAChE,IAAK,QAAU0O,EAAM6K,EAAKvZ,GAA1B,CAGA,GAAIyzC,EAAO/kC,GAAO,CAEhB,OAAO4kC,GADSC,EAAM7kC,EAAM8kC,GACSD,EAAOC,EAAUC,EAAQl6B,EAAKvZ,EACrE,CACA,OAAO0O,CALP,CAMF,CAIA,SAASglC,GAAelP,EAAYxZ,EAAW2oB,GAC7C,MAAM1M,EAASzC,EAAWyC,OACpB+F,EAAc/F,EAAO+F,YACrBR,EAAOQ,EAAYR,MAAQ,EACjC,IACI+G,EADA9N,EAAWwB,EAAOxB,SAEtB,OAAQuH,EAAYzF,IAClB,KAAK,EACH9B,GAAW,QAAQA,EAAUkO,EAAuB,EAAZ3oB,EAAgBA,GACxDuoB,EAAQ,KACR,MACF,KAAK,EACH9N,GAAW,QAAUA,EAAUkO,EAAuB,EAAZ3oB,EAAgBA,GAC1DuoB,EAAQ,KACR,MACF,QACE9N,GAAW,QAASA,EAAUza,GAAa2oB,EAAW,EAAI,GAAKnH,GAC/D+G,EAAQ,KAEZ9N,EAAW6N,GACT7N,EACA8N,EACAvoB,EAAY,GAAKwhB,EAAOA,GACvB99B,GAASs+B,EAAYzH,SAAS/J,SAAS9sB,IACxCs+B,EAAYzK,QACZyK,EAAY5K,cAEG9rC,IAAbmvC,GACFwB,EAAOoG,YAAY5H,GAAUqF,QAEjC,CAEO,SAAS8I,GAAUpP,EAAYvD,GACpC,MAAM,OAAC32B,EAAM,OAAE28B,EAAM,SAAE4M,GAAYrP,EAC7BgM,EAASvJ,EAAOuJ,QAChB,IAAC1lC,EAAG,OAAEgpC,EAAM,SAAEC,GAAY9S,EAC1BuF,EAAgBvF,EAAG+S,SAAW/S,EAAGgT,QACjCC,EAAc,KAClBjT,EAAGwN,iBACHxN,EAAGkT,iBAAiB,EAItB,GAAY,QAARrpC,EAEF,YADA8iC,GAAQpJ,GAGV,GAAY,UAAR15B,EAAiB,CACnB,GAAK0lC,EAEE,GAAIqD,EACTrP,EAAWmC,aAAa,CAACmH,QAAQ,EAAMxM,SAAUh3B,EAAOg3B,eACnD,CACL,MAAM0L,EAAc/F,EAAO+F,YACvBA,EAAY1F,UACd9C,EAAWntB,QAAQ4vB,EAAOxB,WAE1BwB,EAAOsG,WAAWP,EAAYzF,GAAK,GAAGuD,SACtCoJ,IAEJ,MAXE1P,EAAWsJ,SAYb,MACF,CAEA,MAAMsG,EAAe9pC,EAAO8pC,aACtBC,EAAU,CAACvpC,MAAK07B,gBAAesN,SAAQC,YACvCO,EAAW90C,OAAOC,KAAK20C,GAAc3W,MAAMxR,IAC/C,MAAMsoB,EAASH,EAAanoB,GAC5B,OAAQzsB,OAAOC,KAAK80C,GAAQ9W,MAAK5zB,GAAQ0qC,EAAO1qC,KAAUwqC,EAAQxqC,IAAM,IAE1E,GAAIyqC,EAAU,CACZ,IAAIE,EAwBJ,GAvBiB,WAAbF,EACFE,EAASF,EACAT,EACQ,iBAAbS,IACFE,EAASF,GAEF9D,EACQ,SAAb8D,EACFE,EAASF,EACa,eAAbA,EACTE,EAAS,CAACrH,EAAgB,CAAC3I,GAAa,IAClB,eAAb8P,EACTE,EAAS,CAACrH,EAAgB,CAAC3I,EAAY,IACjB,eAAb8P,EACTE,EAAS,CAAClH,EAAY,CAAC9I,IACdl6B,EAAOq3B,aAA4B,gBAAb2S,EAC/BE,EAAS,CAAChH,EAAgB,CAAChJ,IAClBl6B,EAAO24B,aAA4B,gBAAbqR,IAC/BE,EAAS,CAAC/G,GAAmB,CAACjJ,KAEV,SAAb8P,IACTE,EAASF,GAEPE,EAOF,OANIr2C,MAAMmI,QAAQkuC,GAChBA,EAAO,GAAG/1C,MAAM,KAAM+1C,EAAO,IAE7BhQ,EAAWgQ,UAEbN,GAGJ,CAGA,IAAK1D,GAAUqD,EACb,OAGF,MAAMY,EAAsB,CAACzpB,EAAW2oB,KAClCI,GAAYvN,GAAiBsN,EAC/BtP,EAAWkQ,iBAEXhB,GAAelP,EAAYxZ,EAAW2oB,GACtC1S,EAAGwN,iBACL,EAGU,cAAR3jC,EACF2pC,GAAqB,GAAG,GACP,eAAR3pC,EACT2pC,EAAoB,GAAG,GACN,YAAR3pC,EACT2pC,GAAqB,GAAG,GACP,cAAR3pC,EACT2pC,EAAoB,GAAG,IAEf,cAAR3pC,GACW,WAARA,GAMCA,GAAsB,IAAfA,EAAI9S,SAAiBwuC,IAEhChC,EAAWkQ,eAEf,CAEO,SAASC,GAAQnQ,GAClBA,EAAWl6B,OAAOw4B,cAAgB0B,EAAWoQ,UAC/CpQ,EAAW4B,MAEf,CAGO,SAASyO,GAAYrQ,EAAYvD,GACtC,MAAMtC,EAAKsC,EAAGlhC,QACVykC,EAAWyC,OAAOuJ,QAAUhM,EAAWl6B,OAAOu4B,eAChDlE,EAAGmW,QAAU9V,EAAgBL,GAC7BA,EAAGoW,UAAYC,YAAW,YACjBrW,EAAGmW,eACHnW,EAAGoW,SAAS,GAClB,KAEP,CAEO,SAASE,GAAazQ,EAAYvD,GACvC,MAAMtC,EAAKsC,EAAGlhC,OACT4+B,EAAGoW,YAGRG,aAAavW,EAAGoW,kBACTpW,EAAGoW,UAENpW,EAAGmW,SACLtQ,EAAWkQ,uBAEN/V,EAAGmW,QAENtQ,EAAWl6B,OAAOu4B,aACpB2B,EAAW4B,OAEf,CAEO,SAAS+O,GAAQ3Q,EAAYvD,GAC9BA,EAAGmU,cAAcC,MAAM7Z,SAAS,eAClCgJ,EAAWkQ,eAEf,CChNO,SAASY,GAAe9Q,EAAYvD,GACzC,MAAM,QAACiG,EAAO,OAAED,GAAUzC,EAK1B,IAAKyC,EAAOuJ,SAAWxR,EAAgBkI,GACrC,OAEF,MAAMqO,EAAatO,EAAOC,QACtBlG,EAAuBC,GAAItC,GAAMA,IAAOuI,GAAWvI,IAAO4W,KAG9D3H,GAAQpJ,EACV,CCCA,SAASgR,GAAe/mC,EAAOnE,GAC7B,OAAOmE,EACJnN,KAAIkkC,GAAM,EAAWA,EAAIl7B,EAAOrH,OAAQqH,EAAOjD,UAC/CxN,KAAKyQ,EAAOs3B,cACjB,CAMA,SAAS6T,GAAkBjR,EAAYkR,EAAYtc,GAAQ,GACzD,GAA0B,IAAtBsc,EAAW19C,OAEb,OAAOohC,EAAQ,QAAK9iC,EAGtB,MAAM,OAACgU,EAAQmE,MAAOknC,EAAS,eAAE/Q,GAAkBJ,GAC7C,UAAC9B,EAAS,iBAAEL,GAAoB/3B,EACtC,IAAIsrC,EAAWF,EAAWvZ,QAAO,CAAC1tB,EAAO+2B,KACvC,IAAI92B,EAAOuvB,EAAUuH,EAAIl7B,EAAOrH,OAAQqH,EAAOjD,QAC/C,YAAa/Q,IAAToY,IAMJA,GAAO,QAAeA,EAAMg0B,EAAWkC,KAErC,QAAUl2B,EAAMpE,EAAOi4B,QAASj4B,EAAO83B,UACnC3zB,EAAM+sB,SAAS9sB,IACfpE,EAAOg7B,cAAc52B,EAAMg0B,MAC3BA,EAAY,IAAMp4B,EAAOw3B,mBAAmBtG,SAAS,IAAI/gC,KAAKiU,GAAM8H,WAExE/H,EAAMnT,KAAKoT,IAZJD,CAcG,GACX,IACH,OAAwB,IAApBmnC,EAAS59C,QAGTsS,EAAOw7B,YAAc1M,IAEvBwc,EAAWA,EAASzZ,QAAO,CAAC1tB,EAAOC,KAC5BinC,EAAUna,SAAS9sB,IACtBD,EAAMnT,KAAKoT,GAEND,IACNknC,EAAUj2C,QAAOgP,IAASknC,EAASpa,SAAS9sB,OAG1C2zB,GAAoBuT,EAAS59C,OAASqqC,EACzCuT,EAASv3C,OAA0B,EAApBgkC,GACfuT,QAfJ,CAgBF,CAIA,SAASC,GAAUrR,EAAYsR,EAAO,EAAG7C,GAAc,EAAMxN,OAAWnvC,GACtE,MAAM,OAACgU,EAAM,OAAE28B,EAAM,WAAEuI,GAAchL,EACrC,GAAW,EAAPsR,EAAU,CACZ,MAAMC,EAAU9O,EAAOuJ,OAASlmC,EAAOo4B,UAAYp4B,EAAOy4B,UAC1DkE,EAAO6G,OAAOrI,GAAU8H,WAAWwI,GAASjL,OAAOmI,EACrD,CACW,EAAP6C,GAAYtG,IACdA,EAAWt7B,MAAQshC,GAAehR,EAAW/1B,MAAOnE,GAExD,CAEA,SAAS+M,GAAQmtB,EAAYkR,EAAYrR,GACvC,MAAM/5B,EAASk6B,EAAWl6B,OAC1B,IAAI,MAAC8uB,EAAK,OAAE0R,EAAM,SAAExJ,EAAQ,OAAEyM,EAAM,aAAEL,EAAY,SAAEjI,GAAYpB,OACjD/tC,IAAXw0C,IACFA,GAAS,GAENA,OAEmBx0C,IAAbgrC,IACTA,EAAWh3B,EAAOg3B,UAFlBA,EAAWoM,GAAe,EAI5BjI,EAAWxH,EAAUwH,EAAUn7B,EAAOrH,OAAQqH,EAAOjD,QAErD,MAAMuuC,EAAWH,GAAkBjR,EAAYkR,EAAYtc,IACtDwc,GAAa7H,KAGd6H,GAAYA,EAASnzC,aAAe+hC,EAAW/1B,MAAMhM,YACvD+hC,EAAW/1B,MAAQmnC,EACnBC,GAAUrR,EAAYsG,EAAS,EAAI,GAAG,EAAMrF,GAC5CkH,EAAuBnI,EAAY,eAEnCqR,GAAUrR,EAAYkJ,EAAe,EAAI,GAAG,EAAMjI,GAGhDnE,GACFkD,EAAW6B,OAEf,CAEA,SAAS2P,GAAmBxR,EAAYvhC,GACtC,OAAOA,EACHyL,GAAQ,EAAWA,EAAMzL,EAAQuhC,EAAWl6B,OAAOjD,QACnDqH,GAAQ,IAAIjU,KAAKiU,EACvB,CAKe,MAAM,GASnB,WAAAg2B,CAAYwC,EAAS7C,EAAU,CAAC,EAAGwG,OAAcv0C,GAC/C4wC,EAAQ1C,WAAapuC,KACrBA,KAAK8wC,QAAUA,EACf9wC,KAAKqY,MAAQ,GAGb,MAAMnE,EAASlU,KAAKkU,OAAS9K,OAAOm4B,OAAO,CACzCgY,YAActL,EAAQsL,aAAerkB,OAAO+Y,EAAQsL,cAAiB,SACrES,UAAW,KACXpO,iBAAiB,UACjBI,aAAS9rC,EACTisC,aAASjsC,GACRiuC,EAAef,EAAgBptC,OAGlC,IAAIo5C,EAcJ,GAbwB,UAApBtI,EAAQnL,SACVyT,EAAap5C,KAAKo5C,WAAatI,EAC/BsI,EAAWrH,UAAUxpC,IAAI,oBACrB0lC,EAAQ+L,YAGV9lC,EAAO8lC,UAAY/L,EAAQ+L,qBAAqB6F,YAC5C5R,EAAQ+L,UACR9R,SAAS4X,cAAc7R,EAAQ+L,aAGrC9lC,EAAO8lC,UAAYlJ,EAEjB2D,EAAa,CAEf,MAAMtW,EAAQsW,EAAYsL,OAAOv2C,QAAQ4vC,GACnC4G,EAAcvL,EAAYuL,YAChC,GAAI7hB,EAAQ,GAAKA,EAAQ,IAAMp2B,MAAMmI,QAAQ8vC,GAC3C,MAAMj0C,MAAM,+BAKdi0C,EAAY7hB,GAASn+B,KACrBA,KAAKy0C,YAAcA,EACnBz0C,KAAKwuC,eAAiBrQ,CACxB,CAGAn+B,KAAKigD,SAAWhS,EAChB7kC,OAAOm4B,OAAOrtB,EAAQi6B,EAAeF,EAASjuC,OAC9CkU,EAAO8pC,ab3KI,SAAiC/P,GAC9C,OAAO7kC,OAAOC,KAAK0mC,GAAqBhK,QAAO,CAACma,EAAShC,KACvD,MAAMC,OAA+Bj+C,IAAtB+tC,EAAQiQ,GACnBnO,EAAoBmO,GACpBjQ,EAAQiQ,GACNxpC,EAAMypC,GAAUA,EAAOzpC,IAC7B,IAAKA,GAAsB,iBAARA,EACjB,OAAOwrC,EAGT,MAAMC,EAAgB,CACpBzrC,MACA07B,iBAAkB+N,EAAO/N,eAAiB+N,EAAOP,SAAWO,EAAON,UAOrE,OALInpC,EAAI9S,OAAS,IACfu+C,EAAczC,SAAWS,EAAOT,OAChCyC,EAAcxC,WAAaQ,EAAOR,UAEpCuC,EAAQhC,GAAYiC,EACbD,CAAO,GACb,CAAC,EACN,CasJ0BE,CAAwBnS,EAAQ+P,cAAgB,CAAC,GAGvE,MAAMqC,GAAe,QACnBvP,EAAQhzB,OAASgzB,EAAQ5H,QAAQ5wB,KACjCpE,EAAOs3B,sBAEFsF,EAAQ5H,QAAQ5wB,KACvB,MAAMgoC,EAAkBjB,GAAkBr/C,KAAMqgD,GAC5CC,GAAmBA,EAAgB1+C,OAAS,IAC9C5B,KAAKqY,MAAQioC,GAEXlH,IACFA,EAAWt7B,MAAQshC,GAAep/C,KAAKqY,MAAOnE,IAIhD,MAAM28B,EAAS7wC,KAAK6wC,OAAS,IAAIsI,GAAOn5C,MAElCugD,EAAkB,CAACzP,EAAS,UAAW0M,GAAU1D,KAAK,KAAM95C,OAC9Do5C,EACF,EAAkBp5C,KAAM,CACtBugD,EACA,CAACnH,EAAY,QAASmF,GAAQzE,KAAK,KAAM95C,OACzC,CAACo5C,EAAY,YAAaqF,GAAY3E,KAAK,KAAM95C,OACjD,CAACo5C,EAAY,QAASyF,GAAa/E,KAAK,KAAM95C,OAC9C,CAACo5C,EAAY,QAAS2F,GAAQjF,KAAK,KAAM95C,OAOzC,CAACkoC,SAAU,YAAagX,GAAepF,KAAK,KAAM95C,OAClD,CAAC+4C,OAAQ,SAAUlI,EAAO0J,MAAMT,KAAKjJ,OAGvC,EAAkB7wC,KAAM,CAACugD,IACzBvgD,KAAKgwC,OAET,CAgBA,iBAAOwQ,CAAWloC,EAAMzL,EAAQyrB,GAC9B,OAAO,EAAWhgB,EAAMzL,EAAQyrB,GAAQ,EAAQA,IAAS,EAAQ0S,GACnE,CAiBA,gBAAOnD,CAAUL,EAAS36B,EAAQyrB,GAChC,OAAOuP,EAAUL,EAAS36B,EAAQyrB,GAAQ,EAAQA,IAAS,EAAQ0S,GACrE,CAMA,kBAAW1hB,GACT,OAAO,CACT,CAKA,UAAI8wB,GACF,SAAUp6C,KAAK6wC,SAAU7wC,KAAK6wC,OAAOuJ,OACvC,CAKA,iBAAIqG,GACF,OAAOzgD,KAAK6wC,OAAS7wC,KAAK6wC,OAAOC,aAAU5wC,CAC7C,CAMA,UAAAkxC,CAAWnD,GACT,MAAMyS,EAAavS,EAAeF,EAASjuC,MAC3CoJ,OAAOm4B,OAAOvhC,KAAKigD,SAAUhS,GAC7B7kC,OAAOm4B,OAAOvhC,KAAKkU,OAAQwsC,GAC3B1gD,KAAK6wC,OAAOO,WAAWsP,GAEvBjB,GAAUz/C,KAAM,EAClB,CAKA,IAAAgwC,GACE,GAAIhwC,KAAKo5C,WAAY,CACnB,MAAM,OAACllC,EAAM,WAAEklC,GAAcp5C,KAC7B,GAAIo5C,EAAWjK,UAAaiK,EAAWuH,WAAazsC,EAAO43B,iBACzD,OAEGlD,EAAgBwQ,IAAgBllC,EAAO23B,uBAC1C7rC,KAAKw+C,UAAW,EAChBpF,EAAWwH,eACJ5gD,KAAKw+C,SAEhB,CACAx+C,KAAK6wC,OAAOb,MACd,CAMA,IAAAC,GACOjwC,KAAKo5C,aAGVp5C,KAAK6wC,OAAOZ,OACZjwC,KAAK6wC,OAAO6G,SAASP,WAAWn3C,KAAKkU,OAAOy4B,WAAW+H,SACzD,CAQA,MAAAxE,GACOlwC,KAAK6wC,OAAOuJ,OAENp6C,KAAKo5C,YACdp5C,KAAK6wC,OAAOZ,OAFZjwC,KAAKgwC,MAIT,CAMA,OAAA6Q,GACE7gD,KAAKiwC,OjBvUF,SAA6BpG,GAClC,IAAIC,EAAYN,EAAiBjqB,IAAIsqB,GAChCC,IAGLA,EAAUxf,SAAS0f,IACjBL,EAAoBzhC,QAAQ8hC,EAAS,IAEvCR,EAAiBsX,OAAOjX,GAC1B,CiB+TI,CAAoB7pC,MACpBA,KAAK6wC,OAAOsJ,SACZ,MAAMrJ,EAAU9wC,KAAK8wC,QAGrB,OAFAA,EAAQiB,UAAUoB,OAAO,2BAClBrC,EAAQ1C,WACRpuC,IACT,CAaA,OAAAkgB,CAAQrT,OAAS3M,GACf,MAAM+P,EAAW2vC,GAAmB5/C,KAAM6M,GAE1C,OAAI7M,KAAKkU,OAAOw7B,UACP1vC,KAAKqY,MAAMnN,IAAI+E,GAEpBjQ,KAAKqY,MAAMzW,OAAS,EACfqO,EAASjQ,KAAKqY,MAAM,SAD7B,CAGF,CAyDA,OAAA4I,IAAWnZ,GACT,MAAMuQ,EAAQ,IAAIvQ,GACZi5C,EAAO,CAAC,EACRC,GAAU,QAAWl5C,IAEzBk5C,GACsB,iBAAZA,GACNj5C,MAAMmI,QAAQ8wC,IACbA,aAAmB38C,MAExB+E,OAAOm4B,OAAOwf,EAAM1oC,EAAM4oC,OAI5BhgC,GAAQjhB,KADW+H,MAAMmI,QAAQmI,EAAM,IAAMA,EAAM,GAAKA,EAC9B0oC,EAC5B,CA4BA,MAAArJ,CAAOzJ,OAAU/tC,GACf,IAAKF,KAAKo5C,WACR,OAGF,MAAM2H,EAAO33C,OAAOm4B,OAAO0M,GAAW,CAAC,EAAG,CAACjL,OAAO,EAAM0R,QAAQ,EAAMrF,cAAUnvC,IAEhF+gB,GAAQjhB,MADW,QAAcA,KAAKo5C,WAAWt7B,MAAO9d,KAAKkU,OAAOs3B,eAC1CuV,EAC5B,CAWA,cAAAG,CAAer0C,OAAS3M,GACtB,OAAO0/C,GAAmB5/C,KAAM6M,EAAzB+yC,CAAiC5/C,KAAK6wC,OAAOxB,SACtD,CAgBA,cAAAkI,CAAelI,EAAU8R,GAAY,GACnC,MAAM,OAACjtC,EAAM,OAAE28B,EAAM,OAAEuJ,EAAM,eAAE5L,GAAkBxuC,KAC3CssC,EAAYp4B,EAAOo4B,UACnB0K,EAAcnP,EAAUwH,EAAUn7B,EAAOrH,OAAQqH,EAAOjD,aAC1C/Q,IAAhB82C,IAIJnG,EAAOoG,aAAY,QAAeD,EAAa1K,EAAWkC,IACtD4L,GAAU+G,GACZtQ,EAAOsG,WAAW7K,GAEpBuE,EAAO6D,SACT,CASA,OAAAG,CAAQlrC,OAASzJ,EAAWkhD,GAAc,GAMxC,IAAI1B,EALA/1C,GAA4B,iBAAXA,IACnBy3C,EAAcz3C,EACdA,OAASzJ,GAKTw/C,EADa,WAAX/1C,EACK,EACa,UAAXA,EACF,EAEA,EAET81C,GAAUz/C,KAAM0/C,GAAO0B,EACzB,CAMA,aAAA9C,GACE,MAAMlF,EAAap5C,KAAKo5C,WACnBA,IAAcA,EAAWuH,UAAa3gD,KAAK6wC,OAAOuJ,SAAUp6C,KAAKy9C,WAGtEz9C,KAAKy9C,UAAW,EAChBrE,EAAWrH,UAAUxpC,IAAI,WAC3B,CAUA,YAAAgoC,CAAatC,OAAU/tC,GACrB,IAAKF,KAAKo5C,aAAep5C,KAAKy9C,SAC5B,OAEF,MAAMsD,EAAO33C,OAAOm4B,OAAO,CAACmW,QAAQ,GAAQzJ,UACrCjuC,KAAKy9C,SACZz9C,KAAKo5C,WAAWrH,UAAUoB,OAAO,WAC7B4N,EAAKrJ,QACP13C,KAAK03C,OAAOqJ,EAEhB","sources":["webpack://vodafoneziggo/./node_modules/moment-timezone/index.js","webpack://vodafoneziggo/./node_modules/moment-timezone/moment-timezone.js","webpack://vodafoneziggo/./node_modules/moment/locale/nl.js","webpack://vodafoneziggo/./node_modules/moment/moment.js","webpack://vodafoneziggo/./node_modules/vanillajs-datepicker/js/i18n/locales/nl.js","webpack://vodafoneziggo/./node_modules/vanillajs-datepicker/js/lib/date.js","webpack://vodafoneziggo/./node_modules/vanillajs-datepicker/js/lib/utils.js","webpack://vodafoneziggo/./node_modules/vanillajs-datepicker/js/lib/date-format.js","webpack://vodafoneziggo/./node_modules/vanillajs-datepicker/js/lib/dom.js","webpack://vodafoneziggo/./node_modules/vanillajs-datepicker/js/lib/event.js","webpack://vodafoneziggo/./node_modules/vanillajs-datepicker/js/i18n/base-locales.js","webpack://vodafoneziggo/./node_modules/vanillajs-datepicker/js/options/defaultOptions.js","webpack://vodafoneziggo/./node_modules/vanillajs-datepicker/js/options/processOptions.js","webpack://vodafoneziggo/./node_modules/vanillajs-datepicker/js/options/shortcutKeys.js","webpack://vodafoneziggo/./node_modules/vanillajs-datepicker/js/picker/templates/pickerTemplate.js","webpack://vodafoneziggo/./node_modules/vanillajs-datepicker/js/picker/templates/daysTemplate.js","webpack://vodafoneziggo/./node_modules/vanillajs-datepicker/js/picker/templates/weekNumbersTemplate.js","webpack://vodafoneziggo/./node_modules/vanillajs-datepicker/js/picker/views/View.js","webpack://vodafoneziggo/./node_modules/vanillajs-datepicker/js/picker/views/DaysView.js","webpack://vodafoneziggo/./node_modules/vanillajs-datepicker/js/picker/views/MonthsView.js","webpack://vodafoneziggo/./node_modules/vanillajs-datepicker/js/picker/views/YearsView.js","webpack://vodafoneziggo/./node_modules/vanillajs-datepicker/js/events/functions.js","webpack://vodafoneziggo/./node_modules/vanillajs-datepicker/js/events/pickerListeners.js","webpack://vodafoneziggo/./node_modules/vanillajs-datepicker/js/picker/Picker.js","webpack://vodafoneziggo/./node_modules/vanillajs-datepicker/js/events/elementListeners.js","webpack://vodafoneziggo/./node_modules/vanillajs-datepicker/js/events/otherListeners.js","webpack://vodafoneziggo/./node_modules/vanillajs-datepicker/js/Datepicker.js"],"sourcesContent":["var moment = module.exports = require(\"./moment-timezone\");\nmoment.tz.load(require('./data/packed/latest.json'));\n","//! moment-timezone.js\n//! version : 0.5.45\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.45\",\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\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\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","//! moment.js locale configuration\n//! locale : Dutch [nl]\n//! author : Joris Röling : https://github.com/jorisroling\n//! author : Jacob Middag : https://github.com/middagj\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var monthsShortWithDots =\n 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split('_'),\n monthsShortWithoutDots =\n 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split('_'),\n monthsParse = [\n /^jan/i,\n /^feb/i,\n /^(maart|mrt\\.?)$/i,\n /^apr/i,\n /^mei$/i,\n /^jun[i.]?$/i,\n /^jul[i.]?$/i,\n /^aug/i,\n /^sep/i,\n /^okt/i,\n /^nov/i,\n /^dec/i,\n ],\n monthsRegex =\n /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\\.?|feb\\.?|mrt\\.?|apr\\.?|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i;\n\n var nl = moment.defineLocale('nl', {\n months: 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split(\n '_'\n ),\n monthsShort: function (m, format) {\n if (!m) {\n return monthsShortWithDots;\n } else if (/-MMM-/.test(format)) {\n return monthsShortWithoutDots[m.month()];\n } else {\n return monthsShortWithDots[m.month()];\n }\n },\n\n monthsRegex: monthsRegex,\n monthsShortRegex: monthsRegex,\n monthsStrictRegex:\n /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,\n monthsShortStrictRegex:\n /^(jan\\.?|feb\\.?|mrt\\.?|apr\\.?|mei|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i,\n\n monthsParse: monthsParse,\n longMonthsParse: monthsParse,\n shortMonthsParse: monthsParse,\n\n weekdays:\n 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'),\n weekdaysShort: 'zo._ma._di._wo._do._vr._za.'.split('_'),\n weekdaysMin: 'zo_ma_di_wo_do_vr_za'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD-MM-YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[vandaag om] LT',\n nextDay: '[morgen om] LT',\n nextWeek: 'dddd [om] LT',\n lastDay: '[gisteren om] LT',\n lastWeek: '[afgelopen] dddd [om] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'over %s',\n past: '%s geleden',\n s: 'een paar seconden',\n ss: '%d seconden',\n m: 'één minuut',\n mm: '%d minuten',\n h: 'één uur',\n hh: '%d uur',\n d: 'één dag',\n dd: '%d dagen',\n w: 'één week',\n ww: '%d weken',\n M: 'één maand',\n MM: '%d maanden',\n y: 'één jaar',\n yy: '%d jaar',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n ordinal: function (number) {\n return (\n number +\n (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de')\n );\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return nl;\n\n})));\n","//! moment.js\n//! version : 2.30.1\n//! authors : Tim Wood, Iskren Chernev, Moment.js contributors\n//! license : MIT\n//! momentjs.com\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n global.moment = factory()\n}(this, (function () { 'use strict';\n\n var hookCallback;\n\n function hooks() {\n return hookCallback.apply(null, arguments);\n }\n\n // This is done to register the method called with moment()\n // without creating circular dependencies.\n function setHookCallback(callback) {\n hookCallback = callback;\n }\n\n function isArray(input) {\n return (\n input instanceof Array ||\n Object.prototype.toString.call(input) === '[object Array]'\n );\n }\n\n function isObject(input) {\n // IE8 will treat undefined and null as object if it wasn't for\n // input != null\n return (\n input != null &&\n Object.prototype.toString.call(input) === '[object Object]'\n );\n }\n\n function hasOwnProp(a, b) {\n return Object.prototype.hasOwnProperty.call(a, b);\n }\n\n function isObjectEmpty(obj) {\n if (Object.getOwnPropertyNames) {\n return Object.getOwnPropertyNames(obj).length === 0;\n } else {\n var k;\n for (k in obj) {\n if (hasOwnProp(obj, k)) {\n return false;\n }\n }\n return true;\n }\n }\n\n function isUndefined(input) {\n return input === void 0;\n }\n\n function isNumber(input) {\n return (\n typeof input === 'number' ||\n Object.prototype.toString.call(input) === '[object Number]'\n );\n }\n\n function isDate(input) {\n return (\n input instanceof Date ||\n Object.prototype.toString.call(input) === '[object Date]'\n );\n }\n\n function map(arr, fn) {\n var res = [],\n i,\n arrLen = arr.length;\n for (i = 0; i < arrLen; ++i) {\n res.push(fn(arr[i], i));\n }\n return res;\n }\n\n function extend(a, b) {\n for (var i in b) {\n if (hasOwnProp(b, i)) {\n a[i] = b[i];\n }\n }\n\n if (hasOwnProp(b, 'toString')) {\n a.toString = b.toString;\n }\n\n if (hasOwnProp(b, 'valueOf')) {\n a.valueOf = b.valueOf;\n }\n\n return a;\n }\n\n function createUTC(input, format, locale, strict) {\n return createLocalOrUTC(input, format, locale, strict, true).utc();\n }\n\n function defaultParsingFlags() {\n // We need to deep clone this object.\n return {\n empty: false,\n unusedTokens: [],\n unusedInput: [],\n overflow: -2,\n charsLeftOver: 0,\n nullInput: false,\n invalidEra: null,\n invalidMonth: null,\n invalidFormat: false,\n userInvalidated: false,\n iso: false,\n parsedDateParts: [],\n era: null,\n meridiem: null,\n rfc2822: false,\n weekdayMismatch: false,\n };\n }\n\n function getParsingFlags(m) {\n if (m._pf == null) {\n m._pf = defaultParsingFlags();\n }\n return m._pf;\n }\n\n var some;\n if (Array.prototype.some) {\n some = Array.prototype.some;\n } else {\n some = function (fun) {\n var t = Object(this),\n len = t.length >>> 0,\n i;\n\n for (i = 0; i < len; i++) {\n if (i in t && fun.call(this, t[i], i, t)) {\n return true;\n }\n }\n\n return false;\n };\n }\n\n function isValid(m) {\n var flags = null,\n parsedParts = false,\n isNowValid = m._d && !isNaN(m._d.getTime());\n if (isNowValid) {\n flags = getParsingFlags(m);\n parsedParts = some.call(flags.parsedDateParts, function (i) {\n return i != null;\n });\n isNowValid =\n flags.overflow < 0 &&\n !flags.empty &&\n !flags.invalidEra &&\n !flags.invalidMonth &&\n !flags.invalidWeekday &&\n !flags.weekdayMismatch &&\n !flags.nullInput &&\n !flags.invalidFormat &&\n !flags.userInvalidated &&\n (!flags.meridiem || (flags.meridiem && parsedParts));\n if (m._strict) {\n isNowValid =\n isNowValid &&\n flags.charsLeftOver === 0 &&\n flags.unusedTokens.length === 0 &&\n flags.bigHour === undefined;\n }\n }\n if (Object.isFrozen == null || !Object.isFrozen(m)) {\n m._isValid = isNowValid;\n } else {\n return isNowValid;\n }\n return m._isValid;\n }\n\n function createInvalid(flags) {\n var m = createUTC(NaN);\n if (flags != null) {\n extend(getParsingFlags(m), flags);\n } else {\n getParsingFlags(m).userInvalidated = true;\n }\n\n return m;\n }\n\n // Plugins that add properties should also add the key here (null value),\n // so we can properly clone ourselves.\n var momentProperties = (hooks.momentProperties = []),\n updateInProgress = false;\n\n function copyConfig(to, from) {\n var i,\n prop,\n val,\n momentPropertiesLen = momentProperties.length;\n\n if (!isUndefined(from._isAMomentObject)) {\n to._isAMomentObject = from._isAMomentObject;\n }\n if (!isUndefined(from._i)) {\n to._i = from._i;\n }\n if (!isUndefined(from._f)) {\n to._f = from._f;\n }\n if (!isUndefined(from._l)) {\n to._l = from._l;\n }\n if (!isUndefined(from._strict)) {\n to._strict = from._strict;\n }\n if (!isUndefined(from._tzm)) {\n to._tzm = from._tzm;\n }\n if (!isUndefined(from._isUTC)) {\n to._isUTC = from._isUTC;\n }\n if (!isUndefined(from._offset)) {\n to._offset = from._offset;\n }\n if (!isUndefined(from._pf)) {\n to._pf = getParsingFlags(from);\n }\n if (!isUndefined(from._locale)) {\n to._locale = from._locale;\n }\n\n if (momentPropertiesLen > 0) {\n for (i = 0; i < momentPropertiesLen; i++) {\n prop = momentProperties[i];\n val = from[prop];\n if (!isUndefined(val)) {\n to[prop] = val;\n }\n }\n }\n\n return to;\n }\n\n // Moment prototype object\n function Moment(config) {\n copyConfig(this, config);\n this._d = new Date(config._d != null ? config._d.getTime() : NaN);\n if (!this.isValid()) {\n this._d = new Date(NaN);\n }\n // Prevent infinite loop in case updateOffset creates new moment\n // objects.\n if (updateInProgress === false) {\n updateInProgress = true;\n hooks.updateOffset(this);\n updateInProgress = false;\n }\n }\n\n function isMoment(obj) {\n return (\n obj instanceof Moment || (obj != null && obj._isAMomentObject != null)\n );\n }\n\n function warn(msg) {\n if (\n hooks.suppressDeprecationWarnings === false &&\n typeof console !== 'undefined' &&\n console.warn\n ) {\n console.warn('Deprecation warning: ' + msg);\n }\n }\n\n function deprecate(msg, fn) {\n var firstTime = true;\n\n return extend(function () {\n if (hooks.deprecationHandler != null) {\n hooks.deprecationHandler(null, msg);\n }\n if (firstTime) {\n var args = [],\n arg,\n i,\n key,\n argLen = arguments.length;\n for (i = 0; i < argLen; i++) {\n arg = '';\n if (typeof arguments[i] === 'object') {\n arg += '\\n[' + i + '] ';\n for (key in arguments[0]) {\n if (hasOwnProp(arguments[0], key)) {\n arg += key + ': ' + arguments[0][key] + ', ';\n }\n }\n arg = arg.slice(0, -2); // Remove trailing comma and space\n } else {\n arg = arguments[i];\n }\n args.push(arg);\n }\n warn(\n msg +\n '\\nArguments: ' +\n Array.prototype.slice.call(args).join('') +\n '\\n' +\n new Error().stack\n );\n firstTime = false;\n }\n return fn.apply(this, arguments);\n }, fn);\n }\n\n var deprecations = {};\n\n function deprecateSimple(name, msg) {\n if (hooks.deprecationHandler != null) {\n hooks.deprecationHandler(name, msg);\n }\n if (!deprecations[name]) {\n warn(msg);\n deprecations[name] = true;\n }\n }\n\n hooks.suppressDeprecationWarnings = false;\n hooks.deprecationHandler = null;\n\n function isFunction(input) {\n return (\n (typeof Function !== 'undefined' && input instanceof Function) ||\n Object.prototype.toString.call(input) === '[object Function]'\n );\n }\n\n function set(config) {\n var prop, i;\n for (i in config) {\n if (hasOwnProp(config, i)) {\n prop = config[i];\n if (isFunction(prop)) {\n this[i] = prop;\n } else {\n this['_' + i] = prop;\n }\n }\n }\n this._config = config;\n // Lenient ordinal parsing accepts just a number in addition to\n // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.\n // TODO: Remove \"ordinalParse\" fallback in next major release.\n this._dayOfMonthOrdinalParseLenient = new RegExp(\n (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) +\n '|' +\n /\\d{1,2}/.source\n );\n }\n\n function mergeConfigs(parentConfig, childConfig) {\n var res = extend({}, parentConfig),\n prop;\n for (prop in childConfig) {\n if (hasOwnProp(childConfig, prop)) {\n if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {\n res[prop] = {};\n extend(res[prop], parentConfig[prop]);\n extend(res[prop], childConfig[prop]);\n } else if (childConfig[prop] != null) {\n res[prop] = childConfig[prop];\n } else {\n delete res[prop];\n }\n }\n }\n for (prop in parentConfig) {\n if (\n hasOwnProp(parentConfig, prop) &&\n !hasOwnProp(childConfig, prop) &&\n isObject(parentConfig[prop])\n ) {\n // make sure changes to properties don't modify parent config\n res[prop] = extend({}, res[prop]);\n }\n }\n return res;\n }\n\n function Locale(config) {\n if (config != null) {\n this.set(config);\n }\n }\n\n var keys;\n\n if (Object.keys) {\n keys = Object.keys;\n } else {\n keys = function (obj) {\n var i,\n res = [];\n for (i in obj) {\n if (hasOwnProp(obj, i)) {\n res.push(i);\n }\n }\n return res;\n };\n }\n\n var defaultCalendar = {\n sameDay: '[Today at] LT',\n nextDay: '[Tomorrow at] LT',\n nextWeek: 'dddd [at] LT',\n lastDay: '[Yesterday at] LT',\n lastWeek: '[Last] dddd [at] LT',\n sameElse: 'L',\n };\n\n function calendar(key, mom, now) {\n var output = this._calendar[key] || this._calendar['sameElse'];\n return isFunction(output) ? output.call(mom, now) : output;\n }\n\n function zeroFill(number, targetLength, forceSign) {\n var absNumber = '' + Math.abs(number),\n zerosToFill = targetLength - absNumber.length,\n sign = number >= 0;\n return (\n (sign ? (forceSign ? '+' : '') : '-') +\n Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) +\n absNumber\n );\n }\n\n var formattingTokens =\n /(\\[[^\\[]*\\])|(\\\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,\n localFormattingTokens = /(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g,\n formatFunctions = {},\n formatTokenFunctions = {};\n\n // token: 'M'\n // padded: ['MM', 2]\n // ordinal: 'Mo'\n // callback: function () { this.month() + 1 }\n function addFormatToken(token, padded, ordinal, callback) {\n var func = callback;\n if (typeof callback === 'string') {\n func = function () {\n return this[callback]();\n };\n }\n if (token) {\n formatTokenFunctions[token] = func;\n }\n if (padded) {\n formatTokenFunctions[padded[0]] = function () {\n return zeroFill(func.apply(this, arguments), padded[1], padded[2]);\n };\n }\n if (ordinal) {\n formatTokenFunctions[ordinal] = function () {\n return this.localeData().ordinal(\n func.apply(this, arguments),\n token\n );\n };\n }\n }\n\n function removeFormattingTokens(input) {\n if (input.match(/\\[[\\s\\S]/)) {\n return input.replace(/^\\[|\\]$/g, '');\n }\n return input.replace(/\\\\/g, '');\n }\n\n function makeFormatFunction(format) {\n var array = format.match(formattingTokens),\n i,\n length;\n\n for (i = 0, length = array.length; i < length; i++) {\n if (formatTokenFunctions[array[i]]) {\n array[i] = formatTokenFunctions[array[i]];\n } else {\n array[i] = removeFormattingTokens(array[i]);\n }\n }\n\n return function (mom) {\n var output = '',\n i;\n for (i = 0; i < length; i++) {\n output += isFunction(array[i])\n ? array[i].call(mom, format)\n : array[i];\n }\n return output;\n };\n }\n\n // format date using native date object\n function formatMoment(m, format) {\n if (!m.isValid()) {\n return m.localeData().invalidDate();\n }\n\n format = expandFormat(format, m.localeData());\n formatFunctions[format] =\n formatFunctions[format] || makeFormatFunction(format);\n\n return formatFunctions[format](m);\n }\n\n function expandFormat(format, locale) {\n var i = 5;\n\n function replaceLongDateFormatTokens(input) {\n return locale.longDateFormat(input) || input;\n }\n\n localFormattingTokens.lastIndex = 0;\n while (i >= 0 && localFormattingTokens.test(format)) {\n format = format.replace(\n localFormattingTokens,\n replaceLongDateFormatTokens\n );\n localFormattingTokens.lastIndex = 0;\n i -= 1;\n }\n\n return format;\n }\n\n var defaultLongDateFormat = {\n LTS: 'h:mm:ss A',\n LT: 'h:mm A',\n L: 'MM/DD/YYYY',\n LL: 'MMMM D, YYYY',\n LLL: 'MMMM D, YYYY h:mm A',\n LLLL: 'dddd, MMMM D, YYYY h:mm A',\n };\n\n function longDateFormat(key) {\n var format = this._longDateFormat[key],\n formatUpper = this._longDateFormat[key.toUpperCase()];\n\n if (format || !formatUpper) {\n return format;\n }\n\n this._longDateFormat[key] = formatUpper\n .match(formattingTokens)\n .map(function (tok) {\n if (\n tok === 'MMMM' ||\n tok === 'MM' ||\n tok === 'DD' ||\n tok === 'dddd'\n ) {\n return tok.slice(1);\n }\n return tok;\n })\n .join('');\n\n return this._longDateFormat[key];\n }\n\n var defaultInvalidDate = 'Invalid date';\n\n function invalidDate() {\n return this._invalidDate;\n }\n\n var defaultOrdinal = '%d',\n defaultDayOfMonthOrdinalParse = /\\d{1,2}/;\n\n function ordinal(number) {\n return this._ordinal.replace('%d', number);\n }\n\n var defaultRelativeTime = {\n future: 'in %s',\n past: '%s ago',\n s: 'a few seconds',\n ss: '%d seconds',\n m: 'a minute',\n mm: '%d minutes',\n h: 'an hour',\n hh: '%d hours',\n d: 'a day',\n dd: '%d days',\n w: 'a week',\n ww: '%d weeks',\n M: 'a month',\n MM: '%d months',\n y: 'a year',\n yy: '%d years',\n };\n\n function relativeTime(number, withoutSuffix, string, isFuture) {\n var output = this._relativeTime[string];\n return isFunction(output)\n ? output(number, withoutSuffix, string, isFuture)\n : output.replace(/%d/i, number);\n }\n\n function pastFuture(diff, output) {\n var format = this._relativeTime[diff > 0 ? 'future' : 'past'];\n return isFunction(format) ? format(output) : format.replace(/%s/i, output);\n }\n\n var aliases = {\n D: 'date',\n dates: 'date',\n date: 'date',\n d: 'day',\n days: 'day',\n day: 'day',\n e: 'weekday',\n weekdays: 'weekday',\n weekday: 'weekday',\n E: 'isoWeekday',\n isoweekdays: 'isoWeekday',\n isoweekday: 'isoWeekday',\n DDD: 'dayOfYear',\n dayofyears: 'dayOfYear',\n dayofyear: 'dayOfYear',\n h: 'hour',\n hours: 'hour',\n hour: 'hour',\n ms: 'millisecond',\n milliseconds: 'millisecond',\n millisecond: 'millisecond',\n m: 'minute',\n minutes: 'minute',\n minute: 'minute',\n M: 'month',\n months: 'month',\n month: 'month',\n Q: 'quarter',\n quarters: 'quarter',\n quarter: 'quarter',\n s: 'second',\n seconds: 'second',\n second: 'second',\n gg: 'weekYear',\n weekyears: 'weekYear',\n weekyear: 'weekYear',\n GG: 'isoWeekYear',\n isoweekyears: 'isoWeekYear',\n isoweekyear: 'isoWeekYear',\n w: 'week',\n weeks: 'week',\n week: 'week',\n W: 'isoWeek',\n isoweeks: 'isoWeek',\n isoweek: 'isoWeek',\n y: 'year',\n years: 'year',\n year: 'year',\n };\n\n function normalizeUnits(units) {\n return typeof units === 'string'\n ? aliases[units] || aliases[units.toLowerCase()]\n : undefined;\n }\n\n function normalizeObjectUnits(inputObject) {\n var normalizedInput = {},\n normalizedProp,\n prop;\n\n for (prop in inputObject) {\n if (hasOwnProp(inputObject, prop)) {\n normalizedProp = normalizeUnits(prop);\n if (normalizedProp) {\n normalizedInput[normalizedProp] = inputObject[prop];\n }\n }\n }\n\n return normalizedInput;\n }\n\n var priorities = {\n date: 9,\n day: 11,\n weekday: 11,\n isoWeekday: 11,\n dayOfYear: 4,\n hour: 13,\n millisecond: 16,\n minute: 14,\n month: 8,\n quarter: 7,\n second: 15,\n weekYear: 1,\n isoWeekYear: 1,\n week: 5,\n isoWeek: 5,\n year: 1,\n };\n\n function getPrioritizedUnits(unitsObj) {\n var units = [],\n u;\n for (u in unitsObj) {\n if (hasOwnProp(unitsObj, u)) {\n units.push({ unit: u, priority: priorities[u] });\n }\n }\n units.sort(function (a, b) {\n return a.priority - b.priority;\n });\n return units;\n }\n\n var match1 = /\\d/, // 0 - 9\n match2 = /\\d\\d/, // 00 - 99\n match3 = /\\d{3}/, // 000 - 999\n match4 = /\\d{4}/, // 0000 - 9999\n match6 = /[+-]?\\d{6}/, // -999999 - 999999\n match1to2 = /\\d\\d?/, // 0 - 99\n match3to4 = /\\d\\d\\d\\d?/, // 999 - 9999\n match5to6 = /\\d\\d\\d\\d\\d\\d?/, // 99999 - 999999\n match1to3 = /\\d{1,3}/, // 0 - 999\n match1to4 = /\\d{1,4}/, // 0 - 9999\n match1to6 = /[+-]?\\d{1,6}/, // -999999 - 999999\n matchUnsigned = /\\d+/, // 0 - inf\n matchSigned = /[+-]?\\d+/, // -inf - inf\n matchOffset = /Z|[+-]\\d\\d:?\\d\\d/gi, // +00:00 -00:00 +0000 -0000 or Z\n matchShortOffset = /Z|[+-]\\d\\d(?::?\\d\\d)?/gi, // +00 -00 +00:00 -00:00 +0000 -0000 or Z\n matchTimestamp = /[+-]?\\d+(\\.\\d{1,3})?/, // 123456789 123456789.123\n // any word (or two) characters or numbers including two/three word month in arabic.\n // includes scottish gaelic two word and hyphenated months\n matchWord =\n /[0-9]{0,256}['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFF07\\uFF10-\\uFFEF]{1,256}|[\\u0600-\\u06FF\\/]{1,256}(\\s*?[\\u0600-\\u06FF]{1,256}){1,2}/i,\n match1to2NoLeadingZero = /^[1-9]\\d?/, // 1-99\n match1to2HasZero = /^([1-9]\\d|\\d)/, // 0-99\n regexes;\n\n regexes = {};\n\n function addRegexToken(token, regex, strictRegex) {\n regexes[token] = isFunction(regex)\n ? regex\n : function (isStrict, localeData) {\n return isStrict && strictRegex ? strictRegex : regex;\n };\n }\n\n function getParseRegexForToken(token, config) {\n if (!hasOwnProp(regexes, token)) {\n return new RegExp(unescapeFormat(token));\n }\n\n return regexes[token](config._strict, config._locale);\n }\n\n // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript\n function unescapeFormat(s) {\n return regexEscape(\n s\n .replace('\\\\', '')\n .replace(\n /\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g,\n function (matched, p1, p2, p3, p4) {\n return p1 || p2 || p3 || p4;\n }\n )\n );\n }\n\n function regexEscape(s) {\n return s.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n }\n\n function absFloor(number) {\n if (number < 0) {\n // -0 -> 0\n return Math.ceil(number) || 0;\n } else {\n return Math.floor(number);\n }\n }\n\n function toInt(argumentForCoercion) {\n var coercedNumber = +argumentForCoercion,\n value = 0;\n\n if (coercedNumber !== 0 && isFinite(coercedNumber)) {\n value = absFloor(coercedNumber);\n }\n\n return value;\n }\n\n var tokens = {};\n\n function addParseToken(token, callback) {\n var i,\n func = callback,\n tokenLen;\n if (typeof token === 'string') {\n token = [token];\n }\n if (isNumber(callback)) {\n func = function (input, array) {\n array[callback] = toInt(input);\n };\n }\n tokenLen = token.length;\n for (i = 0; i < tokenLen; i++) {\n tokens[token[i]] = func;\n }\n }\n\n function addWeekParseToken(token, callback) {\n addParseToken(token, function (input, array, config, token) {\n config._w = config._w || {};\n callback(input, config._w, config, token);\n });\n }\n\n function addTimeToArrayFromToken(token, input, config) {\n if (input != null && hasOwnProp(tokens, token)) {\n tokens[token](input, config._a, config, token);\n }\n }\n\n function isLeapYear(year) {\n return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n }\n\n var YEAR = 0,\n MONTH = 1,\n DATE = 2,\n HOUR = 3,\n MINUTE = 4,\n SECOND = 5,\n MILLISECOND = 6,\n WEEK = 7,\n WEEKDAY = 8;\n\n // FORMATTING\n\n addFormatToken('Y', 0, 0, function () {\n var y = this.year();\n return y <= 9999 ? zeroFill(y, 4) : '+' + y;\n });\n\n addFormatToken(0, ['YY', 2], 0, function () {\n return this.year() % 100;\n });\n\n addFormatToken(0, ['YYYY', 4], 0, 'year');\n addFormatToken(0, ['YYYYY', 5], 0, 'year');\n addFormatToken(0, ['YYYYYY', 6, true], 0, 'year');\n\n // PARSING\n\n addRegexToken('Y', matchSigned);\n addRegexToken('YY', match1to2, match2);\n addRegexToken('YYYY', match1to4, match4);\n addRegexToken('YYYYY', match1to6, match6);\n addRegexToken('YYYYYY', match1to6, match6);\n\n addParseToken(['YYYYY', 'YYYYYY'], YEAR);\n addParseToken('YYYY', function (input, array) {\n array[YEAR] =\n input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);\n });\n addParseToken('YY', function (input, array) {\n array[YEAR] = hooks.parseTwoDigitYear(input);\n });\n addParseToken('Y', function (input, array) {\n array[YEAR] = parseInt(input, 10);\n });\n\n // HELPERS\n\n function daysInYear(year) {\n return isLeapYear(year) ? 366 : 365;\n }\n\n // HOOKS\n\n hooks.parseTwoDigitYear = function (input) {\n return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);\n };\n\n // MOMENTS\n\n var getSetYear = makeGetSet('FullYear', true);\n\n function getIsLeapYear() {\n return isLeapYear(this.year());\n }\n\n function makeGetSet(unit, keepTime) {\n return function (value) {\n if (value != null) {\n set$1(this, unit, value);\n hooks.updateOffset(this, keepTime);\n return this;\n } else {\n return get(this, unit);\n }\n };\n }\n\n function get(mom, unit) {\n if (!mom.isValid()) {\n return NaN;\n }\n\n var d = mom._d,\n isUTC = mom._isUTC;\n\n switch (unit) {\n case 'Milliseconds':\n return isUTC ? d.getUTCMilliseconds() : d.getMilliseconds();\n case 'Seconds':\n return isUTC ? d.getUTCSeconds() : d.getSeconds();\n case 'Minutes':\n return isUTC ? d.getUTCMinutes() : d.getMinutes();\n case 'Hours':\n return isUTC ? d.getUTCHours() : d.getHours();\n case 'Date':\n return isUTC ? d.getUTCDate() : d.getDate();\n case 'Day':\n return isUTC ? d.getUTCDay() : d.getDay();\n case 'Month':\n return isUTC ? d.getUTCMonth() : d.getMonth();\n case 'FullYear':\n return isUTC ? d.getUTCFullYear() : d.getFullYear();\n default:\n return NaN; // Just in case\n }\n }\n\n function set$1(mom, unit, value) {\n var d, isUTC, year, month, date;\n\n if (!mom.isValid() || isNaN(value)) {\n return;\n }\n\n d = mom._d;\n isUTC = mom._isUTC;\n\n switch (unit) {\n case 'Milliseconds':\n return void (isUTC\n ? d.setUTCMilliseconds(value)\n : d.setMilliseconds(value));\n case 'Seconds':\n return void (isUTC ? d.setUTCSeconds(value) : d.setSeconds(value));\n case 'Minutes':\n return void (isUTC ? d.setUTCMinutes(value) : d.setMinutes(value));\n case 'Hours':\n return void (isUTC ? d.setUTCHours(value) : d.setHours(value));\n case 'Date':\n return void (isUTC ? d.setUTCDate(value) : d.setDate(value));\n // case 'Day': // Not real\n // return void (isUTC ? d.setUTCDay(value) : d.setDay(value));\n // case 'Month': // Not used because we need to pass two variables\n // return void (isUTC ? d.setUTCMonth(value) : d.setMonth(value));\n case 'FullYear':\n break; // See below ...\n default:\n return; // Just in case\n }\n\n year = value;\n month = mom.month();\n date = mom.date();\n date = date === 29 && month === 1 && !isLeapYear(year) ? 28 : date;\n void (isUTC\n ? d.setUTCFullYear(year, month, date)\n : d.setFullYear(year, month, date));\n }\n\n // MOMENTS\n\n function stringGet(units) {\n units = normalizeUnits(units);\n if (isFunction(this[units])) {\n return this[units]();\n }\n return this;\n }\n\n function stringSet(units, value) {\n if (typeof units === 'object') {\n units = normalizeObjectUnits(units);\n var prioritized = getPrioritizedUnits(units),\n i,\n prioritizedLen = prioritized.length;\n for (i = 0; i < prioritizedLen; i++) {\n this[prioritized[i].unit](units[prioritized[i].unit]);\n }\n } else {\n units = normalizeUnits(units);\n if (isFunction(this[units])) {\n return this[units](value);\n }\n }\n return this;\n }\n\n function mod(n, x) {\n return ((n % x) + x) % x;\n }\n\n var indexOf;\n\n if (Array.prototype.indexOf) {\n indexOf = Array.prototype.indexOf;\n } else {\n indexOf = function (o) {\n // I know\n var i;\n for (i = 0; i < this.length; ++i) {\n if (this[i] === o) {\n return i;\n }\n }\n return -1;\n };\n }\n\n function daysInMonth(year, month) {\n if (isNaN(year) || isNaN(month)) {\n return NaN;\n }\n var modMonth = mod(month, 12);\n year += (month - modMonth) / 12;\n return modMonth === 1\n ? isLeapYear(year)\n ? 29\n : 28\n : 31 - ((modMonth % 7) % 2);\n }\n\n // FORMATTING\n\n addFormatToken('M', ['MM', 2], 'Mo', function () {\n return this.month() + 1;\n });\n\n addFormatToken('MMM', 0, 0, function (format) {\n return this.localeData().monthsShort(this, format);\n });\n\n addFormatToken('MMMM', 0, 0, function (format) {\n return this.localeData().months(this, format);\n });\n\n // PARSING\n\n addRegexToken('M', match1to2, match1to2NoLeadingZero);\n addRegexToken('MM', match1to2, match2);\n addRegexToken('MMM', function (isStrict, locale) {\n return locale.monthsShortRegex(isStrict);\n });\n addRegexToken('MMMM', function (isStrict, locale) {\n return locale.monthsRegex(isStrict);\n });\n\n addParseToken(['M', 'MM'], function (input, array) {\n array[MONTH] = toInt(input) - 1;\n });\n\n addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {\n var month = config._locale.monthsParse(input, token, config._strict);\n // if we didn't find a month name, mark the date as invalid.\n if (month != null) {\n array[MONTH] = month;\n } else {\n getParsingFlags(config).invalidMonth = input;\n }\n });\n\n // LOCALES\n\n var defaultLocaleMonths =\n 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n '_'\n ),\n defaultLocaleMonthsShort =\n 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n MONTHS_IN_FORMAT = /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?/,\n defaultMonthsShortRegex = matchWord,\n defaultMonthsRegex = matchWord;\n\n function localeMonths(m, format) {\n if (!m) {\n return isArray(this._months)\n ? this._months\n : this._months['standalone'];\n }\n return isArray(this._months)\n ? this._months[m.month()]\n : this._months[\n (this._months.isFormat || MONTHS_IN_FORMAT).test(format)\n ? 'format'\n : 'standalone'\n ][m.month()];\n }\n\n function localeMonthsShort(m, format) {\n if (!m) {\n return isArray(this._monthsShort)\n ? this._monthsShort\n : this._monthsShort['standalone'];\n }\n return isArray(this._monthsShort)\n ? this._monthsShort[m.month()]\n : this._monthsShort[\n MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'\n ][m.month()];\n }\n\n function handleStrictParse(monthName, format, strict) {\n var i,\n ii,\n mom,\n llc = monthName.toLocaleLowerCase();\n if (!this._monthsParse) {\n // this is not used\n this._monthsParse = [];\n this._longMonthsParse = [];\n this._shortMonthsParse = [];\n for (i = 0; i < 12; ++i) {\n mom = createUTC([2000, i]);\n this._shortMonthsParse[i] = this.monthsShort(\n mom,\n ''\n ).toLocaleLowerCase();\n this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();\n }\n }\n\n if (strict) {\n if (format === 'MMM') {\n ii = indexOf.call(this._shortMonthsParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._longMonthsParse, llc);\n return ii !== -1 ? ii : null;\n }\n } else {\n if (format === 'MMM') {\n ii = indexOf.call(this._shortMonthsParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._longMonthsParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._longMonthsParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortMonthsParse, llc);\n return ii !== -1 ? ii : null;\n }\n }\n }\n\n function localeMonthsParse(monthName, format, strict) {\n var i, mom, regex;\n\n if (this._monthsParseExact) {\n return handleStrictParse.call(this, monthName, format, strict);\n }\n\n if (!this._monthsParse) {\n this._monthsParse = [];\n this._longMonthsParse = [];\n this._shortMonthsParse = [];\n }\n\n // TODO: add sorting\n // Sorting makes sure if one month (or abbr) is a prefix of another\n // see sorting in computeMonthsParse\n for (i = 0; i < 12; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, i]);\n if (strict && !this._longMonthsParse[i]) {\n this._longMonthsParse[i] = new RegExp(\n '^' + this.months(mom, '').replace('.', '') + '$',\n 'i'\n );\n this._shortMonthsParse[i] = new RegExp(\n '^' + this.monthsShort(mom, '').replace('.', '') + '$',\n 'i'\n );\n }\n if (!strict && !this._monthsParse[i]) {\n regex =\n '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');\n this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');\n }\n // test the regex\n if (\n strict &&\n format === 'MMMM' &&\n this._longMonthsParse[i].test(monthName)\n ) {\n return i;\n } else if (\n strict &&\n format === 'MMM' &&\n this._shortMonthsParse[i].test(monthName)\n ) {\n return i;\n } else if (!strict && this._monthsParse[i].test(monthName)) {\n return i;\n }\n }\n }\n\n // MOMENTS\n\n function setMonth(mom, value) {\n if (!mom.isValid()) {\n // No op\n return mom;\n }\n\n if (typeof value === 'string') {\n if (/^\\d+$/.test(value)) {\n value = toInt(value);\n } else {\n value = mom.localeData().monthsParse(value);\n // TODO: Another silent failure?\n if (!isNumber(value)) {\n return mom;\n }\n }\n }\n\n var month = value,\n date = mom.date();\n\n date = date < 29 ? date : Math.min(date, daysInMonth(mom.year(), month));\n void (mom._isUTC\n ? mom._d.setUTCMonth(month, date)\n : mom._d.setMonth(month, date));\n return mom;\n }\n\n function getSetMonth(value) {\n if (value != null) {\n setMonth(this, value);\n hooks.updateOffset(this, true);\n return this;\n } else {\n return get(this, 'Month');\n }\n }\n\n function getDaysInMonth() {\n return daysInMonth(this.year(), this.month());\n }\n\n function monthsShortRegex(isStrict) {\n if (this._monthsParseExact) {\n if (!hasOwnProp(this, '_monthsRegex')) {\n computeMonthsParse.call(this);\n }\n if (isStrict) {\n return this._monthsShortStrictRegex;\n } else {\n return this._monthsShortRegex;\n }\n } else {\n if (!hasOwnProp(this, '_monthsShortRegex')) {\n this._monthsShortRegex = defaultMonthsShortRegex;\n }\n return this._monthsShortStrictRegex && isStrict\n ? this._monthsShortStrictRegex\n : this._monthsShortRegex;\n }\n }\n\n function monthsRegex(isStrict) {\n if (this._monthsParseExact) {\n if (!hasOwnProp(this, '_monthsRegex')) {\n computeMonthsParse.call(this);\n }\n if (isStrict) {\n return this._monthsStrictRegex;\n } else {\n return this._monthsRegex;\n }\n } else {\n if (!hasOwnProp(this, '_monthsRegex')) {\n this._monthsRegex = defaultMonthsRegex;\n }\n return this._monthsStrictRegex && isStrict\n ? this._monthsStrictRegex\n : this._monthsRegex;\n }\n }\n\n function computeMonthsParse() {\n function cmpLenRev(a, b) {\n return b.length - a.length;\n }\n\n var shortPieces = [],\n longPieces = [],\n mixedPieces = [],\n i,\n mom,\n shortP,\n longP;\n for (i = 0; i < 12; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, i]);\n shortP = regexEscape(this.monthsShort(mom, ''));\n longP = regexEscape(this.months(mom, ''));\n shortPieces.push(shortP);\n longPieces.push(longP);\n mixedPieces.push(longP);\n mixedPieces.push(shortP);\n }\n // Sorting makes sure if one month (or abbr) is a prefix of another it\n // will match the longer piece.\n shortPieces.sort(cmpLenRev);\n longPieces.sort(cmpLenRev);\n mixedPieces.sort(cmpLenRev);\n\n this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._monthsShortRegex = this._monthsRegex;\n this._monthsStrictRegex = new RegExp(\n '^(' + longPieces.join('|') + ')',\n 'i'\n );\n this._monthsShortStrictRegex = new RegExp(\n '^(' + shortPieces.join('|') + ')',\n 'i'\n );\n }\n\n function createDate(y, m, d, h, M, s, ms) {\n // can't just apply() to create a date:\n // https://stackoverflow.com/q/181348\n var date;\n // the date constructor remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n date = new Date(y + 400, m, d, h, M, s, ms);\n if (isFinite(date.getFullYear())) {\n date.setFullYear(y);\n }\n } else {\n date = new Date(y, m, d, h, M, s, ms);\n }\n\n return date;\n }\n\n function createUTCDate(y) {\n var date, args;\n // the Date.UTC function remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n args = Array.prototype.slice.call(arguments);\n // preserve leap years using a full 400 year cycle, then reset\n args[0] = y + 400;\n date = new Date(Date.UTC.apply(null, args));\n if (isFinite(date.getUTCFullYear())) {\n date.setUTCFullYear(y);\n }\n } else {\n date = new Date(Date.UTC.apply(null, arguments));\n }\n\n return date;\n }\n\n // start-of-first-week - start-of-year\n function firstWeekOffset(year, dow, doy) {\n var // first-week day -- which january is always in the first week (4 for iso, 1 for other)\n fwd = 7 + dow - doy,\n // first-week day local weekday -- which local weekday is fwd\n fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;\n\n return -fwdlw + fwd - 1;\n }\n\n // https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday\n function dayOfYearFromWeeks(year, week, weekday, dow, doy) {\n var localWeekday = (7 + weekday - dow) % 7,\n weekOffset = firstWeekOffset(year, dow, doy),\n dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,\n resYear,\n resDayOfYear;\n\n if (dayOfYear <= 0) {\n resYear = year - 1;\n resDayOfYear = daysInYear(resYear) + dayOfYear;\n } else if (dayOfYear > daysInYear(year)) {\n resYear = year + 1;\n resDayOfYear = dayOfYear - daysInYear(year);\n } else {\n resYear = year;\n resDayOfYear = dayOfYear;\n }\n\n return {\n year: resYear,\n dayOfYear: resDayOfYear,\n };\n }\n\n function weekOfYear(mom, dow, doy) {\n var weekOffset = firstWeekOffset(mom.year(), dow, doy),\n week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,\n resWeek,\n resYear;\n\n if (week < 1) {\n resYear = mom.year() - 1;\n resWeek = week + weeksInYear(resYear, dow, doy);\n } else if (week > weeksInYear(mom.year(), dow, doy)) {\n resWeek = week - weeksInYear(mom.year(), dow, doy);\n resYear = mom.year() + 1;\n } else {\n resYear = mom.year();\n resWeek = week;\n }\n\n return {\n week: resWeek,\n year: resYear,\n };\n }\n\n function weeksInYear(year, dow, doy) {\n var weekOffset = firstWeekOffset(year, dow, doy),\n weekOffsetNext = firstWeekOffset(year + 1, dow, doy);\n return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;\n }\n\n // FORMATTING\n\n addFormatToken('w', ['ww', 2], 'wo', 'week');\n addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');\n\n // PARSING\n\n addRegexToken('w', match1to2, match1to2NoLeadingZero);\n addRegexToken('ww', match1to2, match2);\n addRegexToken('W', match1to2, match1to2NoLeadingZero);\n addRegexToken('WW', match1to2, match2);\n\n addWeekParseToken(\n ['w', 'ww', 'W', 'WW'],\n function (input, week, config, token) {\n week[token.substr(0, 1)] = toInt(input);\n }\n );\n\n // HELPERS\n\n // LOCALES\n\n function localeWeek(mom) {\n return weekOfYear(mom, this._week.dow, this._week.doy).week;\n }\n\n var defaultLocaleWeek = {\n dow: 0, // Sunday is the first day of the week.\n doy: 6, // The week that contains Jan 6th is the first week of the year.\n };\n\n function localeFirstDayOfWeek() {\n return this._week.dow;\n }\n\n function localeFirstDayOfYear() {\n return this._week.doy;\n }\n\n // MOMENTS\n\n function getSetWeek(input) {\n var week = this.localeData().week(this);\n return input == null ? week : this.add((input - week) * 7, 'd');\n }\n\n function getSetISOWeek(input) {\n var week = weekOfYear(this, 1, 4).week;\n return input == null ? week : this.add((input - week) * 7, 'd');\n }\n\n // FORMATTING\n\n addFormatToken('d', 0, 'do', 'day');\n\n addFormatToken('dd', 0, 0, function (format) {\n return this.localeData().weekdaysMin(this, format);\n });\n\n addFormatToken('ddd', 0, 0, function (format) {\n return this.localeData().weekdaysShort(this, format);\n });\n\n addFormatToken('dddd', 0, 0, function (format) {\n return this.localeData().weekdays(this, format);\n });\n\n addFormatToken('e', 0, 0, 'weekday');\n addFormatToken('E', 0, 0, 'isoWeekday');\n\n // PARSING\n\n addRegexToken('d', match1to2);\n addRegexToken('e', match1to2);\n addRegexToken('E', match1to2);\n addRegexToken('dd', function (isStrict, locale) {\n return locale.weekdaysMinRegex(isStrict);\n });\n addRegexToken('ddd', function (isStrict, locale) {\n return locale.weekdaysShortRegex(isStrict);\n });\n addRegexToken('dddd', function (isStrict, locale) {\n return locale.weekdaysRegex(isStrict);\n });\n\n addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {\n var weekday = config._locale.weekdaysParse(input, token, config._strict);\n // if we didn't get a weekday name, mark the date as invalid\n if (weekday != null) {\n week.d = weekday;\n } else {\n getParsingFlags(config).invalidWeekday = input;\n }\n });\n\n addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {\n week[token] = toInt(input);\n });\n\n // HELPERS\n\n function parseWeekday(input, locale) {\n if (typeof input !== 'string') {\n return input;\n }\n\n if (!isNaN(input)) {\n return parseInt(input, 10);\n }\n\n input = locale.weekdaysParse(input);\n if (typeof input === 'number') {\n return input;\n }\n\n return null;\n }\n\n function parseIsoWeekday(input, locale) {\n if (typeof input === 'string') {\n return locale.weekdaysParse(input) % 7 || 7;\n }\n return isNaN(input) ? null : input;\n }\n\n // LOCALES\n function shiftWeekdays(ws, n) {\n return ws.slice(n, 7).concat(ws.slice(0, n));\n }\n\n var defaultLocaleWeekdays =\n 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n defaultWeekdaysRegex = matchWord,\n defaultWeekdaysShortRegex = matchWord,\n defaultWeekdaysMinRegex = matchWord;\n\n function localeWeekdays(m, format) {\n var weekdays = isArray(this._weekdays)\n ? this._weekdays\n : this._weekdays[\n m && m !== true && this._weekdays.isFormat.test(format)\n ? 'format'\n : 'standalone'\n ];\n return m === true\n ? shiftWeekdays(weekdays, this._week.dow)\n : m\n ? weekdays[m.day()]\n : weekdays;\n }\n\n function localeWeekdaysShort(m) {\n return m === true\n ? shiftWeekdays(this._weekdaysShort, this._week.dow)\n : m\n ? this._weekdaysShort[m.day()]\n : this._weekdaysShort;\n }\n\n function localeWeekdaysMin(m) {\n return m === true\n ? shiftWeekdays(this._weekdaysMin, this._week.dow)\n : m\n ? this._weekdaysMin[m.day()]\n : this._weekdaysMin;\n }\n\n function handleStrictParse$1(weekdayName, format, strict) {\n var i,\n ii,\n mom,\n llc = weekdayName.toLocaleLowerCase();\n if (!this._weekdaysParse) {\n this._weekdaysParse = [];\n this._shortWeekdaysParse = [];\n this._minWeekdaysParse = [];\n\n for (i = 0; i < 7; ++i) {\n mom = createUTC([2000, 1]).day(i);\n this._minWeekdaysParse[i] = this.weekdaysMin(\n mom,\n ''\n ).toLocaleLowerCase();\n this._shortWeekdaysParse[i] = this.weekdaysShort(\n mom,\n ''\n ).toLocaleLowerCase();\n this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();\n }\n }\n\n if (strict) {\n if (format === 'dddd') {\n ii = indexOf.call(this._weekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else if (format === 'ddd') {\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n }\n } else {\n if (format === 'dddd') {\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else if (format === 'ddd') {\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._minWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n }\n }\n }\n\n function localeWeekdaysParse(weekdayName, format, strict) {\n var i, mom, regex;\n\n if (this._weekdaysParseExact) {\n return handleStrictParse$1.call(this, weekdayName, format, strict);\n }\n\n if (!this._weekdaysParse) {\n this._weekdaysParse = [];\n this._minWeekdaysParse = [];\n this._shortWeekdaysParse = [];\n this._fullWeekdaysParse = [];\n }\n\n for (i = 0; i < 7; i++) {\n // make the regex if we don't have it already\n\n mom = createUTC([2000, 1]).day(i);\n if (strict && !this._fullWeekdaysParse[i]) {\n this._fullWeekdaysParse[i] = new RegExp(\n '^' + this.weekdays(mom, '').replace('.', '\\\\.?') + '$',\n 'i'\n );\n this._shortWeekdaysParse[i] = new RegExp(\n '^' + this.weekdaysShort(mom, '').replace('.', '\\\\.?') + '$',\n 'i'\n );\n this._minWeekdaysParse[i] = new RegExp(\n '^' + this.weekdaysMin(mom, '').replace('.', '\\\\.?') + '$',\n 'i'\n );\n }\n if (!this._weekdaysParse[i]) {\n regex =\n '^' +\n this.weekdays(mom, '') +\n '|^' +\n this.weekdaysShort(mom, '') +\n '|^' +\n this.weekdaysMin(mom, '');\n this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');\n }\n // test the regex\n if (\n strict &&\n format === 'dddd' &&\n this._fullWeekdaysParse[i].test(weekdayName)\n ) {\n return i;\n } else if (\n strict &&\n format === 'ddd' &&\n this._shortWeekdaysParse[i].test(weekdayName)\n ) {\n return i;\n } else if (\n strict &&\n format === 'dd' &&\n this._minWeekdaysParse[i].test(weekdayName)\n ) {\n return i;\n } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {\n return i;\n }\n }\n }\n\n // MOMENTS\n\n function getSetDayOfWeek(input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n\n var day = get(this, 'Day');\n if (input != null) {\n input = parseWeekday(input, this.localeData());\n return this.add(input - day, 'd');\n } else {\n return day;\n }\n }\n\n function getSetLocaleDayOfWeek(input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;\n return input == null ? weekday : this.add(input - weekday, 'd');\n }\n\n function getSetISODayOfWeek(input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n\n // behaves the same as moment#day except\n // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)\n // as a setter, sunday should belong to the previous week.\n\n if (input != null) {\n var weekday = parseIsoWeekday(input, this.localeData());\n return this.day(this.day() % 7 ? weekday : weekday - 7);\n } else {\n return this.day() || 7;\n }\n }\n\n function weekdaysRegex(isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysStrictRegex;\n } else {\n return this._weekdaysRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n this._weekdaysRegex = defaultWeekdaysRegex;\n }\n return this._weekdaysStrictRegex && isStrict\n ? this._weekdaysStrictRegex\n : this._weekdaysRegex;\n }\n }\n\n function weekdaysShortRegex(isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysShortStrictRegex;\n } else {\n return this._weekdaysShortRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysShortRegex')) {\n this._weekdaysShortRegex = defaultWeekdaysShortRegex;\n }\n return this._weekdaysShortStrictRegex && isStrict\n ? this._weekdaysShortStrictRegex\n : this._weekdaysShortRegex;\n }\n }\n\n function weekdaysMinRegex(isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysMinStrictRegex;\n } else {\n return this._weekdaysMinRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysMinRegex')) {\n this._weekdaysMinRegex = defaultWeekdaysMinRegex;\n }\n return this._weekdaysMinStrictRegex && isStrict\n ? this._weekdaysMinStrictRegex\n : this._weekdaysMinRegex;\n }\n }\n\n function computeWeekdaysParse() {\n function cmpLenRev(a, b) {\n return b.length - a.length;\n }\n\n var minPieces = [],\n shortPieces = [],\n longPieces = [],\n mixedPieces = [],\n i,\n mom,\n minp,\n shortp,\n longp;\n for (i = 0; i < 7; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, 1]).day(i);\n minp = regexEscape(this.weekdaysMin(mom, ''));\n shortp = regexEscape(this.weekdaysShort(mom, ''));\n longp = regexEscape(this.weekdays(mom, ''));\n minPieces.push(minp);\n shortPieces.push(shortp);\n longPieces.push(longp);\n mixedPieces.push(minp);\n mixedPieces.push(shortp);\n mixedPieces.push(longp);\n }\n // Sorting makes sure if one weekday (or abbr) is a prefix of another it\n // will match the longer piece.\n minPieces.sort(cmpLenRev);\n shortPieces.sort(cmpLenRev);\n longPieces.sort(cmpLenRev);\n mixedPieces.sort(cmpLenRev);\n\n this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._weekdaysShortRegex = this._weekdaysRegex;\n this._weekdaysMinRegex = this._weekdaysRegex;\n\n this._weekdaysStrictRegex = new RegExp(\n '^(' + longPieces.join('|') + ')',\n 'i'\n );\n this._weekdaysShortStrictRegex = new RegExp(\n '^(' + shortPieces.join('|') + ')',\n 'i'\n );\n this._weekdaysMinStrictRegex = new RegExp(\n '^(' + minPieces.join('|') + ')',\n 'i'\n );\n }\n\n // FORMATTING\n\n function hFormat() {\n return this.hours() % 12 || 12;\n }\n\n function kFormat() {\n return this.hours() || 24;\n }\n\n addFormatToken('H', ['HH', 2], 0, 'hour');\n addFormatToken('h', ['hh', 2], 0, hFormat);\n addFormatToken('k', ['kk', 2], 0, kFormat);\n\n addFormatToken('hmm', 0, 0, function () {\n return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);\n });\n\n addFormatToken('hmmss', 0, 0, function () {\n return (\n '' +\n hFormat.apply(this) +\n zeroFill(this.minutes(), 2) +\n zeroFill(this.seconds(), 2)\n );\n });\n\n addFormatToken('Hmm', 0, 0, function () {\n return '' + this.hours() + zeroFill(this.minutes(), 2);\n });\n\n addFormatToken('Hmmss', 0, 0, function () {\n return (\n '' +\n this.hours() +\n zeroFill(this.minutes(), 2) +\n zeroFill(this.seconds(), 2)\n );\n });\n\n function meridiem(token, lowercase) {\n addFormatToken(token, 0, 0, function () {\n return this.localeData().meridiem(\n this.hours(),\n this.minutes(),\n lowercase\n );\n });\n }\n\n meridiem('a', true);\n meridiem('A', false);\n\n // PARSING\n\n function matchMeridiem(isStrict, locale) {\n return locale._meridiemParse;\n }\n\n addRegexToken('a', matchMeridiem);\n addRegexToken('A', matchMeridiem);\n addRegexToken('H', match1to2, match1to2HasZero);\n addRegexToken('h', match1to2, match1to2NoLeadingZero);\n addRegexToken('k', match1to2, match1to2NoLeadingZero);\n addRegexToken('HH', match1to2, match2);\n addRegexToken('hh', match1to2, match2);\n addRegexToken('kk', match1to2, match2);\n\n addRegexToken('hmm', match3to4);\n addRegexToken('hmmss', match5to6);\n addRegexToken('Hmm', match3to4);\n addRegexToken('Hmmss', match5to6);\n\n addParseToken(['H', 'HH'], HOUR);\n addParseToken(['k', 'kk'], function (input, array, config) {\n var kInput = toInt(input);\n array[HOUR] = kInput === 24 ? 0 : kInput;\n });\n addParseToken(['a', 'A'], function (input, array, config) {\n config._isPm = config._locale.isPM(input);\n config._meridiem = input;\n });\n addParseToken(['h', 'hh'], function (input, array, config) {\n array[HOUR] = toInt(input);\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('hmm', function (input, array, config) {\n var pos = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos));\n array[MINUTE] = toInt(input.substr(pos));\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('hmmss', function (input, array, config) {\n var pos1 = input.length - 4,\n pos2 = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos1));\n array[MINUTE] = toInt(input.substr(pos1, 2));\n array[SECOND] = toInt(input.substr(pos2));\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('Hmm', function (input, array, config) {\n var pos = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos));\n array[MINUTE] = toInt(input.substr(pos));\n });\n addParseToken('Hmmss', function (input, array, config) {\n var pos1 = input.length - 4,\n pos2 = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos1));\n array[MINUTE] = toInt(input.substr(pos1, 2));\n array[SECOND] = toInt(input.substr(pos2));\n });\n\n // LOCALES\n\n function localeIsPM(input) {\n // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays\n // Using charAt should be more compatible.\n return (input + '').toLowerCase().charAt(0) === 'p';\n }\n\n var defaultLocaleMeridiemParse = /[ap]\\.?m?\\.?/i,\n // Setting the hour should keep the time, because the user explicitly\n // specified which hour they want. So trying to maintain the same hour (in\n // a new timezone) makes sense. Adding/subtracting hours does not follow\n // this rule.\n getSetHour = makeGetSet('Hours', true);\n\n function localeMeridiem(hours, minutes, isLower) {\n if (hours > 11) {\n return isLower ? 'pm' : 'PM';\n } else {\n return isLower ? 'am' : 'AM';\n }\n }\n\n var baseConfig = {\n calendar: defaultCalendar,\n longDateFormat: defaultLongDateFormat,\n invalidDate: defaultInvalidDate,\n ordinal: defaultOrdinal,\n dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,\n relativeTime: defaultRelativeTime,\n\n months: defaultLocaleMonths,\n monthsShort: defaultLocaleMonthsShort,\n\n week: defaultLocaleWeek,\n\n weekdays: defaultLocaleWeekdays,\n weekdaysMin: defaultLocaleWeekdaysMin,\n weekdaysShort: defaultLocaleWeekdaysShort,\n\n meridiemParse: defaultLocaleMeridiemParse,\n };\n\n // internal storage for locale config files\n var locales = {},\n localeFamilies = {},\n globalLocale;\n\n function commonPrefix(arr1, arr2) {\n var i,\n minl = Math.min(arr1.length, arr2.length);\n for (i = 0; i < minl; i += 1) {\n if (arr1[i] !== arr2[i]) {\n return i;\n }\n }\n return minl;\n }\n\n function normalizeLocale(key) {\n return key ? key.toLowerCase().replace('_', '-') : key;\n }\n\n // pick the locale from the array\n // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each\n // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root\n function chooseLocale(names) {\n var i = 0,\n j,\n next,\n locale,\n split;\n\n while (i < names.length) {\n split = normalizeLocale(names[i]).split('-');\n j = split.length;\n next = normalizeLocale(names[i + 1]);\n next = next ? next.split('-') : null;\n while (j > 0) {\n locale = loadLocale(split.slice(0, j).join('-'));\n if (locale) {\n return locale;\n }\n if (\n next &&\n next.length >= j &&\n commonPrefix(split, next) >= j - 1\n ) {\n //the next array item is better than a shallower substring of this one\n break;\n }\n j--;\n }\n i++;\n }\n return globalLocale;\n }\n\n function isLocaleNameSane(name) {\n // Prevent names that look like filesystem paths, i.e contain '/' or '\\'\n // Ensure name is available and function returns boolean\n return !!(name && name.match('^[^/\\\\\\\\]*$'));\n }\n\n function loadLocale(name) {\n var oldLocale = null,\n aliasedRequire;\n // TODO: Find a better way to register and load all the locales in Node\n if (\n locales[name] === undefined &&\n typeof module !== 'undefined' &&\n module &&\n module.exports &&\n isLocaleNameSane(name)\n ) {\n try {\n oldLocale = globalLocale._abbr;\n aliasedRequire = require;\n aliasedRequire('./locale/' + name);\n getSetGlobalLocale(oldLocale);\n } catch (e) {\n // mark as not found to avoid repeating expensive file require call causing high CPU\n // when trying to find en-US, en_US, en-us for every format call\n locales[name] = null; // null means not found\n }\n }\n return locales[name];\n }\n\n // This function will load locale and then set the global locale. If\n // no arguments are passed in, it will simply return the current global\n // locale key.\n function getSetGlobalLocale(key, values) {\n var data;\n if (key) {\n if (isUndefined(values)) {\n data = getLocale(key);\n } else {\n data = defineLocale(key, values);\n }\n\n if (data) {\n // moment.duration._locale = moment._locale = data;\n globalLocale = data;\n } else {\n if (typeof console !== 'undefined' && console.warn) {\n //warn user if arguments are passed but the locale could not be set\n console.warn(\n 'Locale ' + key + ' not found. Did you forget to load it?'\n );\n }\n }\n }\n\n return globalLocale._abbr;\n }\n\n function defineLocale(name, config) {\n if (config !== null) {\n var locale,\n parentConfig = baseConfig;\n config.abbr = name;\n if (locales[name] != null) {\n deprecateSimple(\n 'defineLocaleOverride',\n 'use moment.updateLocale(localeName, config) to change ' +\n 'an existing locale. moment.defineLocale(localeName, ' +\n 'config) should only be used for creating a new locale ' +\n 'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.'\n );\n parentConfig = locales[name]._config;\n } else if (config.parentLocale != null) {\n if (locales[config.parentLocale] != null) {\n parentConfig = locales[config.parentLocale]._config;\n } else {\n locale = loadLocale(config.parentLocale);\n if (locale != null) {\n parentConfig = locale._config;\n } else {\n if (!localeFamilies[config.parentLocale]) {\n localeFamilies[config.parentLocale] = [];\n }\n localeFamilies[config.parentLocale].push({\n name: name,\n config: config,\n });\n return null;\n }\n }\n }\n locales[name] = new Locale(mergeConfigs(parentConfig, config));\n\n if (localeFamilies[name]) {\n localeFamilies[name].forEach(function (x) {\n defineLocale(x.name, x.config);\n });\n }\n\n // backwards compat for now: also set the locale\n // make sure we set the locale AFTER all child locales have been\n // created, so we won't end up with the child locale set.\n getSetGlobalLocale(name);\n\n return locales[name];\n } else {\n // useful for testing\n delete locales[name];\n return null;\n }\n }\n\n function updateLocale(name, config) {\n if (config != null) {\n var locale,\n tmpLocale,\n parentConfig = baseConfig;\n\n if (locales[name] != null && locales[name].parentLocale != null) {\n // Update existing child locale in-place to avoid memory-leaks\n locales[name].set(mergeConfigs(locales[name]._config, config));\n } else {\n // MERGE\n tmpLocale = loadLocale(name);\n if (tmpLocale != null) {\n parentConfig = tmpLocale._config;\n }\n config = mergeConfigs(parentConfig, config);\n if (tmpLocale == null) {\n // updateLocale is called for creating a new locale\n // Set abbr so it will have a name (getters return\n // undefined otherwise).\n config.abbr = name;\n }\n locale = new Locale(config);\n locale.parentLocale = locales[name];\n locales[name] = locale;\n }\n\n // backwards compat for now: also set the locale\n getSetGlobalLocale(name);\n } else {\n // pass null for config to unupdate, useful for tests\n if (locales[name] != null) {\n if (locales[name].parentLocale != null) {\n locales[name] = locales[name].parentLocale;\n if (name === getSetGlobalLocale()) {\n getSetGlobalLocale(name);\n }\n } else if (locales[name] != null) {\n delete locales[name];\n }\n }\n }\n return locales[name];\n }\n\n // returns locale data\n function getLocale(key) {\n var locale;\n\n if (key && key._locale && key._locale._abbr) {\n key = key._locale._abbr;\n }\n\n if (!key) {\n return globalLocale;\n }\n\n if (!isArray(key)) {\n //short-circuit everything else\n locale = loadLocale(key);\n if (locale) {\n return locale;\n }\n key = [key];\n }\n\n return chooseLocale(key);\n }\n\n function listLocales() {\n return keys(locales);\n }\n\n function checkOverflow(m) {\n var overflow,\n a = m._a;\n\n if (a && getParsingFlags(m).overflow === -2) {\n overflow =\n a[MONTH] < 0 || a[MONTH] > 11\n ? MONTH\n : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH])\n ? DATE\n : a[HOUR] < 0 ||\n a[HOUR] > 24 ||\n (a[HOUR] === 24 &&\n (a[MINUTE] !== 0 ||\n a[SECOND] !== 0 ||\n a[MILLISECOND] !== 0))\n ? HOUR\n : a[MINUTE] < 0 || a[MINUTE] > 59\n ? MINUTE\n : a[SECOND] < 0 || a[SECOND] > 59\n ? SECOND\n : a[MILLISECOND] < 0 || a[MILLISECOND] > 999\n ? MILLISECOND\n : -1;\n\n if (\n getParsingFlags(m)._overflowDayOfYear &&\n (overflow < YEAR || overflow > DATE)\n ) {\n overflow = DATE;\n }\n if (getParsingFlags(m)._overflowWeeks && overflow === -1) {\n overflow = WEEK;\n }\n if (getParsingFlags(m)._overflowWeekday && overflow === -1) {\n overflow = WEEKDAY;\n }\n\n getParsingFlags(m).overflow = overflow;\n }\n\n return m;\n }\n\n // iso 8601 regex\n // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)\n var extendedIsoRegex =\n /^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,\n basicIsoRegex =\n /^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d|))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,\n tzRegex = /Z|[+-]\\d\\d(?::?\\d\\d)?/,\n isoDates = [\n ['YYYYYY-MM-DD', /[+-]\\d{6}-\\d\\d-\\d\\d/],\n ['YYYY-MM-DD', /\\d{4}-\\d\\d-\\d\\d/],\n ['GGGG-[W]WW-E', /\\d{4}-W\\d\\d-\\d/],\n ['GGGG-[W]WW', /\\d{4}-W\\d\\d/, false],\n ['YYYY-DDD', /\\d{4}-\\d{3}/],\n ['YYYY-MM', /\\d{4}-\\d\\d/, false],\n ['YYYYYYMMDD', /[+-]\\d{10}/],\n ['YYYYMMDD', /\\d{8}/],\n ['GGGG[W]WWE', /\\d{4}W\\d{3}/],\n ['GGGG[W]WW', /\\d{4}W\\d{2}/, false],\n ['YYYYDDD', /\\d{7}/],\n ['YYYYMM', /\\d{6}/, false],\n ['YYYY', /\\d{4}/, false],\n ],\n // iso time formats and regexes\n isoTimes = [\n ['HH:mm:ss.SSSS', /\\d\\d:\\d\\d:\\d\\d\\.\\d+/],\n ['HH:mm:ss,SSSS', /\\d\\d:\\d\\d:\\d\\d,\\d+/],\n ['HH:mm:ss', /\\d\\d:\\d\\d:\\d\\d/],\n ['HH:mm', /\\d\\d:\\d\\d/],\n ['HHmmss.SSSS', /\\d\\d\\d\\d\\d\\d\\.\\d+/],\n ['HHmmss,SSSS', /\\d\\d\\d\\d\\d\\d,\\d+/],\n ['HHmmss', /\\d\\d\\d\\d\\d\\d/],\n ['HHmm', /\\d\\d\\d\\d/],\n ['HH', /\\d\\d/],\n ],\n aspNetJsonRegex = /^\\/?Date\\((-?\\d+)/i,\n // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3\n rfc2822 =\n /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\\d{4}))$/,\n obsOffsets = {\n UT: 0,\n GMT: 0,\n EDT: -4 * 60,\n EST: -5 * 60,\n CDT: -5 * 60,\n CST: -6 * 60,\n MDT: -6 * 60,\n MST: -7 * 60,\n PDT: -7 * 60,\n PST: -8 * 60,\n };\n\n // date from iso format\n function configFromISO(config) {\n var i,\n l,\n string = config._i,\n match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),\n allowTime,\n dateFormat,\n timeFormat,\n tzFormat,\n isoDatesLen = isoDates.length,\n isoTimesLen = isoTimes.length;\n\n if (match) {\n getParsingFlags(config).iso = true;\n for (i = 0, l = isoDatesLen; i < l; i++) {\n if (isoDates[i][1].exec(match[1])) {\n dateFormat = isoDates[i][0];\n allowTime = isoDates[i][2] !== false;\n break;\n }\n }\n if (dateFormat == null) {\n config._isValid = false;\n return;\n }\n if (match[3]) {\n for (i = 0, l = isoTimesLen; i < l; i++) {\n if (isoTimes[i][1].exec(match[3])) {\n // match[2] should be 'T' or space\n timeFormat = (match[2] || ' ') + isoTimes[i][0];\n break;\n }\n }\n if (timeFormat == null) {\n config._isValid = false;\n return;\n }\n }\n if (!allowTime && timeFormat != null) {\n config._isValid = false;\n return;\n }\n if (match[4]) {\n if (tzRegex.exec(match[4])) {\n tzFormat = 'Z';\n } else {\n config._isValid = false;\n return;\n }\n }\n config._f = dateFormat + (timeFormat || '') + (tzFormat || '');\n configFromStringAndFormat(config);\n } else {\n config._isValid = false;\n }\n }\n\n function extractFromRFC2822Strings(\n yearStr,\n monthStr,\n dayStr,\n hourStr,\n minuteStr,\n secondStr\n ) {\n var result = [\n untruncateYear(yearStr),\n defaultLocaleMonthsShort.indexOf(monthStr),\n parseInt(dayStr, 10),\n parseInt(hourStr, 10),\n parseInt(minuteStr, 10),\n ];\n\n if (secondStr) {\n result.push(parseInt(secondStr, 10));\n }\n\n return result;\n }\n\n function untruncateYear(yearStr) {\n var year = parseInt(yearStr, 10);\n if (year <= 49) {\n return 2000 + year;\n } else if (year <= 999) {\n return 1900 + year;\n }\n return year;\n }\n\n function preprocessRFC2822(s) {\n // Remove comments and folding whitespace and replace multiple-spaces with a single space\n return s\n .replace(/\\([^()]*\\)|[\\n\\t]/g, ' ')\n .replace(/(\\s\\s+)/g, ' ')\n .replace(/^\\s\\s*/, '')\n .replace(/\\s\\s*$/, '');\n }\n\n function checkWeekday(weekdayStr, parsedInput, config) {\n if (weekdayStr) {\n // TODO: Replace the vanilla JS Date object with an independent day-of-week check.\n var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),\n weekdayActual = new Date(\n parsedInput[0],\n parsedInput[1],\n parsedInput[2]\n ).getDay();\n if (weekdayProvided !== weekdayActual) {\n getParsingFlags(config).weekdayMismatch = true;\n config._isValid = false;\n return false;\n }\n }\n return true;\n }\n\n function calculateOffset(obsOffset, militaryOffset, numOffset) {\n if (obsOffset) {\n return obsOffsets[obsOffset];\n } else if (militaryOffset) {\n // the only allowed military tz is Z\n return 0;\n } else {\n var hm = parseInt(numOffset, 10),\n m = hm % 100,\n h = (hm - m) / 100;\n return h * 60 + m;\n }\n }\n\n // date and time from ref 2822 format\n function configFromRFC2822(config) {\n var match = rfc2822.exec(preprocessRFC2822(config._i)),\n parsedArray;\n if (match) {\n parsedArray = extractFromRFC2822Strings(\n match[4],\n match[3],\n match[2],\n match[5],\n match[6],\n match[7]\n );\n if (!checkWeekday(match[1], parsedArray, config)) {\n return;\n }\n\n config._a = parsedArray;\n config._tzm = calculateOffset(match[8], match[9], match[10]);\n\n config._d = createUTCDate.apply(null, config._a);\n config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n\n getParsingFlags(config).rfc2822 = true;\n } else {\n config._isValid = false;\n }\n }\n\n // date from 1) ASP.NET, 2) ISO, 3) RFC 2822 formats, or 4) optional fallback if parsing isn't strict\n function configFromString(config) {\n var matched = aspNetJsonRegex.exec(config._i);\n if (matched !== null) {\n config._d = new Date(+matched[1]);\n return;\n }\n\n configFromISO(config);\n if (config._isValid === false) {\n delete config._isValid;\n } else {\n return;\n }\n\n configFromRFC2822(config);\n if (config._isValid === false) {\n delete config._isValid;\n } else {\n return;\n }\n\n if (config._strict) {\n config._isValid = false;\n } else {\n // Final attempt, use Input Fallback\n hooks.createFromInputFallback(config);\n }\n }\n\n hooks.createFromInputFallback = deprecate(\n 'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' +\n 'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' +\n 'discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.',\n function (config) {\n config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));\n }\n );\n\n // Pick the first defined of two or three arguments.\n function defaults(a, b, c) {\n if (a != null) {\n return a;\n }\n if (b != null) {\n return b;\n }\n return c;\n }\n\n function currentDateArray(config) {\n // hooks is actually the exported moment object\n var nowValue = new Date(hooks.now());\n if (config._useUTC) {\n return [\n nowValue.getUTCFullYear(),\n nowValue.getUTCMonth(),\n nowValue.getUTCDate(),\n ];\n }\n return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];\n }\n\n // convert an array to a date.\n // the array should mirror the parameters below\n // note: all values past the year are optional and will default to the lowest possible value.\n // [year, month, day , hour, minute, second, millisecond]\n function configFromArray(config) {\n var i,\n date,\n input = [],\n currentDate,\n expectedWeekday,\n yearToUse;\n\n if (config._d) {\n return;\n }\n\n currentDate = currentDateArray(config);\n\n //compute day of the year from weeks and weekdays\n if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {\n dayOfYearFromWeekInfo(config);\n }\n\n //if the day of the year is set, figure out what it is\n if (config._dayOfYear != null) {\n yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);\n\n if (\n config._dayOfYear > daysInYear(yearToUse) ||\n config._dayOfYear === 0\n ) {\n getParsingFlags(config)._overflowDayOfYear = true;\n }\n\n date = createUTCDate(yearToUse, 0, config._dayOfYear);\n config._a[MONTH] = date.getUTCMonth();\n config._a[DATE] = date.getUTCDate();\n }\n\n // Default to current date.\n // * if no year, month, day of month are given, default to today\n // * if day of month is given, default month and year\n // * if month is given, default only year\n // * if year is given, don't default anything\n for (i = 0; i < 3 && config._a[i] == null; ++i) {\n config._a[i] = input[i] = currentDate[i];\n }\n\n // Zero out whatever was not defaulted, including time\n for (; i < 7; i++) {\n config._a[i] = input[i] =\n config._a[i] == null ? (i === 2 ? 1 : 0) : config._a[i];\n }\n\n // Check for 24:00:00.000\n if (\n config._a[HOUR] === 24 &&\n config._a[MINUTE] === 0 &&\n config._a[SECOND] === 0 &&\n config._a[MILLISECOND] === 0\n ) {\n config._nextDay = true;\n config._a[HOUR] = 0;\n }\n\n config._d = (config._useUTC ? createUTCDate : createDate).apply(\n null,\n input\n );\n expectedWeekday = config._useUTC\n ? config._d.getUTCDay()\n : config._d.getDay();\n\n // Apply timezone offset from input. The actual utcOffset can be changed\n // with parseZone.\n if (config._tzm != null) {\n config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n }\n\n if (config._nextDay) {\n config._a[HOUR] = 24;\n }\n\n // check for mismatching day of week\n if (\n config._w &&\n typeof config._w.d !== 'undefined' &&\n config._w.d !== expectedWeekday\n ) {\n getParsingFlags(config).weekdayMismatch = true;\n }\n }\n\n function dayOfYearFromWeekInfo(config) {\n var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow, curWeek;\n\n w = config._w;\n if (w.GG != null || w.W != null || w.E != null) {\n dow = 1;\n doy = 4;\n\n // TODO: We need to take the current isoWeekYear, but that depends on\n // how we interpret now (local, utc, fixed offset). So create\n // a now version of current config (take local/utc/offset flags, and\n // create now).\n weekYear = defaults(\n w.GG,\n config._a[YEAR],\n weekOfYear(createLocal(), 1, 4).year\n );\n week = defaults(w.W, 1);\n weekday = defaults(w.E, 1);\n if (weekday < 1 || weekday > 7) {\n weekdayOverflow = true;\n }\n } else {\n dow = config._locale._week.dow;\n doy = config._locale._week.doy;\n\n curWeek = weekOfYear(createLocal(), dow, doy);\n\n weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);\n\n // Default to current week.\n week = defaults(w.w, curWeek.week);\n\n if (w.d != null) {\n // weekday -- low day numbers are considered next week\n weekday = w.d;\n if (weekday < 0 || weekday > 6) {\n weekdayOverflow = true;\n }\n } else if (w.e != null) {\n // local weekday -- counting starts from beginning of week\n weekday = w.e + dow;\n if (w.e < 0 || w.e > 6) {\n weekdayOverflow = true;\n }\n } else {\n // default to beginning of week\n weekday = dow;\n }\n }\n if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {\n getParsingFlags(config)._overflowWeeks = true;\n } else if (weekdayOverflow != null) {\n getParsingFlags(config)._overflowWeekday = true;\n } else {\n temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);\n config._a[YEAR] = temp.year;\n config._dayOfYear = temp.dayOfYear;\n }\n }\n\n // constant that refers to the ISO standard\n hooks.ISO_8601 = function () {};\n\n // constant that refers to the RFC 2822 form\n hooks.RFC_2822 = function () {};\n\n // date from string and format string\n function configFromStringAndFormat(config) {\n // TODO: Move this to another part of the creation flow to prevent circular deps\n if (config._f === hooks.ISO_8601) {\n configFromISO(config);\n return;\n }\n if (config._f === hooks.RFC_2822) {\n configFromRFC2822(config);\n return;\n }\n config._a = [];\n getParsingFlags(config).empty = true;\n\n // This array is used to make a Date, either with `new Date` or `Date.UTC`\n var string = '' + config._i,\n i,\n parsedInput,\n tokens,\n token,\n skipped,\n stringLength = string.length,\n totalParsedInputLength = 0,\n era,\n tokenLen;\n\n tokens =\n expandFormat(config._f, config._locale).match(formattingTokens) || [];\n tokenLen = tokens.length;\n for (i = 0; i < tokenLen; i++) {\n token = tokens[i];\n parsedInput = (string.match(getParseRegexForToken(token, config)) ||\n [])[0];\n if (parsedInput) {\n skipped = string.substr(0, string.indexOf(parsedInput));\n if (skipped.length > 0) {\n getParsingFlags(config).unusedInput.push(skipped);\n }\n string = string.slice(\n string.indexOf(parsedInput) + parsedInput.length\n );\n totalParsedInputLength += parsedInput.length;\n }\n // don't parse if it's not a known token\n if (formatTokenFunctions[token]) {\n if (parsedInput) {\n getParsingFlags(config).empty = false;\n } else {\n getParsingFlags(config).unusedTokens.push(token);\n }\n addTimeToArrayFromToken(token, parsedInput, config);\n } else if (config._strict && !parsedInput) {\n getParsingFlags(config).unusedTokens.push(token);\n }\n }\n\n // add remaining unparsed input length to the string\n getParsingFlags(config).charsLeftOver =\n stringLength - totalParsedInputLength;\n if (string.length > 0) {\n getParsingFlags(config).unusedInput.push(string);\n }\n\n // clear _12h flag if hour is <= 12\n if (\n config._a[HOUR] <= 12 &&\n getParsingFlags(config).bigHour === true &&\n config._a[HOUR] > 0\n ) {\n getParsingFlags(config).bigHour = undefined;\n }\n\n getParsingFlags(config).parsedDateParts = config._a.slice(0);\n getParsingFlags(config).meridiem = config._meridiem;\n // handle meridiem\n config._a[HOUR] = meridiemFixWrap(\n config._locale,\n config._a[HOUR],\n config._meridiem\n );\n\n // handle era\n era = getParsingFlags(config).era;\n if (era !== null) {\n config._a[YEAR] = config._locale.erasConvertYear(era, config._a[YEAR]);\n }\n\n configFromArray(config);\n checkOverflow(config);\n }\n\n function meridiemFixWrap(locale, hour, meridiem) {\n var isPm;\n\n if (meridiem == null) {\n // nothing to do\n return hour;\n }\n if (locale.meridiemHour != null) {\n return locale.meridiemHour(hour, meridiem);\n } else if (locale.isPM != null) {\n // Fallback\n isPm = locale.isPM(meridiem);\n if (isPm && hour < 12) {\n hour += 12;\n }\n if (!isPm && hour === 12) {\n hour = 0;\n }\n return hour;\n } else {\n // this is not supposed to happen\n return hour;\n }\n }\n\n // date from string and array of format strings\n function configFromStringAndArray(config) {\n var tempConfig,\n bestMoment,\n scoreToBeat,\n i,\n currentScore,\n validFormatFound,\n bestFormatIsValid = false,\n configfLen = config._f.length;\n\n if (configfLen === 0) {\n getParsingFlags(config).invalidFormat = true;\n config._d = new Date(NaN);\n return;\n }\n\n for (i = 0; i < configfLen; i++) {\n currentScore = 0;\n validFormatFound = false;\n tempConfig = copyConfig({}, config);\n if (config._useUTC != null) {\n tempConfig._useUTC = config._useUTC;\n }\n tempConfig._f = config._f[i];\n configFromStringAndFormat(tempConfig);\n\n if (isValid(tempConfig)) {\n validFormatFound = true;\n }\n\n // if there is any input that was not parsed add a penalty for that format\n currentScore += getParsingFlags(tempConfig).charsLeftOver;\n\n //or tokens\n currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;\n\n getParsingFlags(tempConfig).score = currentScore;\n\n if (!bestFormatIsValid) {\n if (\n scoreToBeat == null ||\n currentScore < scoreToBeat ||\n validFormatFound\n ) {\n scoreToBeat = currentScore;\n bestMoment = tempConfig;\n if (validFormatFound) {\n bestFormatIsValid = true;\n }\n }\n } else {\n if (currentScore < scoreToBeat) {\n scoreToBeat = currentScore;\n bestMoment = tempConfig;\n }\n }\n }\n\n extend(config, bestMoment || tempConfig);\n }\n\n function configFromObject(config) {\n if (config._d) {\n return;\n }\n\n var i = normalizeObjectUnits(config._i),\n dayOrDate = i.day === undefined ? i.date : i.day;\n config._a = map(\n [i.year, i.month, dayOrDate, i.hour, i.minute, i.second, i.millisecond],\n function (obj) {\n return obj && parseInt(obj, 10);\n }\n );\n\n configFromArray(config);\n }\n\n function createFromConfig(config) {\n var res = new Moment(checkOverflow(prepareConfig(config)));\n if (res._nextDay) {\n // Adding is smart enough around DST\n res.add(1, 'd');\n res._nextDay = undefined;\n }\n\n return res;\n }\n\n function prepareConfig(config) {\n var input = config._i,\n format = config._f;\n\n config._locale = config._locale || getLocale(config._l);\n\n if (input === null || (format === undefined && input === '')) {\n return createInvalid({ nullInput: true });\n }\n\n if (typeof input === 'string') {\n config._i = input = config._locale.preparse(input);\n }\n\n if (isMoment(input)) {\n return new Moment(checkOverflow(input));\n } else if (isDate(input)) {\n config._d = input;\n } else if (isArray(format)) {\n configFromStringAndArray(config);\n } else if (format) {\n configFromStringAndFormat(config);\n } else {\n configFromInput(config);\n }\n\n if (!isValid(config)) {\n config._d = null;\n }\n\n return config;\n }\n\n function configFromInput(config) {\n var input = config._i;\n if (isUndefined(input)) {\n config._d = new Date(hooks.now());\n } else if (isDate(input)) {\n config._d = new Date(input.valueOf());\n } else if (typeof input === 'string') {\n configFromString(config);\n } else if (isArray(input)) {\n config._a = map(input.slice(0), function (obj) {\n return parseInt(obj, 10);\n });\n configFromArray(config);\n } else if (isObject(input)) {\n configFromObject(config);\n } else if (isNumber(input)) {\n // from milliseconds\n config._d = new Date(input);\n } else {\n hooks.createFromInputFallback(config);\n }\n }\n\n function createLocalOrUTC(input, format, locale, strict, isUTC) {\n var c = {};\n\n if (format === true || format === false) {\n strict = format;\n format = undefined;\n }\n\n if (locale === true || locale === false) {\n strict = locale;\n locale = undefined;\n }\n\n if (\n (isObject(input) && isObjectEmpty(input)) ||\n (isArray(input) && input.length === 0)\n ) {\n input = undefined;\n }\n // object construction must be done this way.\n // https://github.com/moment/moment/issues/1423\n c._isAMomentObject = true;\n c._useUTC = c._isUTC = isUTC;\n c._l = locale;\n c._i = input;\n c._f = format;\n c._strict = strict;\n\n return createFromConfig(c);\n }\n\n function createLocal(input, format, locale, strict) {\n return createLocalOrUTC(input, format, locale, strict, false);\n }\n\n var prototypeMin = deprecate(\n 'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',\n function () {\n var other = createLocal.apply(null, arguments);\n if (this.isValid() && other.isValid()) {\n return other < this ? this : other;\n } else {\n return createInvalid();\n }\n }\n ),\n prototypeMax = deprecate(\n 'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',\n function () {\n var other = createLocal.apply(null, arguments);\n if (this.isValid() && other.isValid()) {\n return other > this ? this : other;\n } else {\n return createInvalid();\n }\n }\n );\n\n // Pick a moment m from moments so that m[fn](other) is true for all\n // other. This relies on the function fn to be transitive.\n //\n // moments should either be an array of moment objects or an array, whose\n // first element is an array of moment objects.\n function pickBy(fn, moments) {\n var res, i;\n if (moments.length === 1 && isArray(moments[0])) {\n moments = moments[0];\n }\n if (!moments.length) {\n return createLocal();\n }\n res = moments[0];\n for (i = 1; i < moments.length; ++i) {\n if (!moments[i].isValid() || moments[i][fn](res)) {\n res = moments[i];\n }\n }\n return res;\n }\n\n // TODO: Use [].sort instead?\n function min() {\n var args = [].slice.call(arguments, 0);\n\n return pickBy('isBefore', args);\n }\n\n function max() {\n var args = [].slice.call(arguments, 0);\n\n return pickBy('isAfter', args);\n }\n\n var now = function () {\n return Date.now ? Date.now() : +new Date();\n };\n\n var ordering = [\n 'year',\n 'quarter',\n 'month',\n 'week',\n 'day',\n 'hour',\n 'minute',\n 'second',\n 'millisecond',\n ];\n\n function isDurationValid(m) {\n var key,\n unitHasDecimal = false,\n i,\n orderLen = ordering.length;\n for (key in m) {\n if (\n hasOwnProp(m, key) &&\n !(\n indexOf.call(ordering, key) !== -1 &&\n (m[key] == null || !isNaN(m[key]))\n )\n ) {\n return false;\n }\n }\n\n for (i = 0; i < orderLen; ++i) {\n if (m[ordering[i]]) {\n if (unitHasDecimal) {\n return false; // only allow non-integers for smallest unit\n }\n if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {\n unitHasDecimal = true;\n }\n }\n }\n\n return true;\n }\n\n function isValid$1() {\n return this._isValid;\n }\n\n function createInvalid$1() {\n return createDuration(NaN);\n }\n\n function Duration(duration) {\n var normalizedInput = normalizeObjectUnits(duration),\n years = normalizedInput.year || 0,\n quarters = normalizedInput.quarter || 0,\n months = normalizedInput.month || 0,\n weeks = normalizedInput.week || normalizedInput.isoWeek || 0,\n days = normalizedInput.day || 0,\n hours = normalizedInput.hour || 0,\n minutes = normalizedInput.minute || 0,\n seconds = normalizedInput.second || 0,\n milliseconds = normalizedInput.millisecond || 0;\n\n this._isValid = isDurationValid(normalizedInput);\n\n // representation for dateAddRemove\n this._milliseconds =\n +milliseconds +\n seconds * 1e3 + // 1000\n minutes * 6e4 + // 1000 * 60\n hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978\n // Because of dateAddRemove treats 24 hours as different from a\n // day when working around DST, we need to store them separately\n this._days = +days + weeks * 7;\n // It is impossible to translate months into days without knowing\n // which months you are are talking about, so we have to store\n // it separately.\n this._months = +months + quarters * 3 + years * 12;\n\n this._data = {};\n\n this._locale = getLocale();\n\n this._bubble();\n }\n\n function isDuration(obj) {\n return obj instanceof Duration;\n }\n\n function absRound(number) {\n if (number < 0) {\n return Math.round(-1 * number) * -1;\n } else {\n return Math.round(number);\n }\n }\n\n // compare two arrays, return the number of differences\n function compareArrays(array1, array2, dontConvert) {\n var len = Math.min(array1.length, array2.length),\n lengthDiff = Math.abs(array1.length - array2.length),\n diffs = 0,\n i;\n for (i = 0; i < len; i++) {\n if (\n (dontConvert && array1[i] !== array2[i]) ||\n (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))\n ) {\n diffs++;\n }\n }\n return diffs + lengthDiff;\n }\n\n // FORMATTING\n\n function offset(token, separator) {\n addFormatToken(token, 0, 0, function () {\n var offset = this.utcOffset(),\n sign = '+';\n if (offset < 0) {\n offset = -offset;\n sign = '-';\n }\n return (\n sign +\n zeroFill(~~(offset / 60), 2) +\n separator +\n zeroFill(~~offset % 60, 2)\n );\n });\n }\n\n offset('Z', ':');\n offset('ZZ', '');\n\n // PARSING\n\n addRegexToken('Z', matchShortOffset);\n addRegexToken('ZZ', matchShortOffset);\n addParseToken(['Z', 'ZZ'], function (input, array, config) {\n config._useUTC = true;\n config._tzm = offsetFromString(matchShortOffset, input);\n });\n\n // HELPERS\n\n // timezone chunker\n // '+10:00' > ['10', '00']\n // '-1530' > ['-15', '30']\n var chunkOffset = /([\\+\\-]|\\d\\d)/gi;\n\n function offsetFromString(matcher, string) {\n var matches = (string || '').match(matcher),\n chunk,\n parts,\n minutes;\n\n if (matches === null) {\n return null;\n }\n\n chunk = matches[matches.length - 1] || [];\n parts = (chunk + '').match(chunkOffset) || ['-', 0, 0];\n minutes = +(parts[1] * 60) + toInt(parts[2]);\n\n return minutes === 0 ? 0 : parts[0] === '+' ? minutes : -minutes;\n }\n\n // Return a moment from input, that is local/utc/zone equivalent to model.\n function cloneWithOffset(input, model) {\n var res, diff;\n if (model._isUTC) {\n res = model.clone();\n diff =\n (isMoment(input) || isDate(input)\n ? input.valueOf()\n : createLocal(input).valueOf()) - res.valueOf();\n // Use low-level api, because this fn is low-level api.\n res._d.setTime(res._d.valueOf() + diff);\n hooks.updateOffset(res, false);\n return res;\n } else {\n return createLocal(input).local();\n }\n }\n\n function getDateOffset(m) {\n // On Firefox.24 Date#getTimezoneOffset returns a floating point.\n // https://github.com/moment/moment/pull/1871\n return -Math.round(m._d.getTimezoneOffset());\n }\n\n // HOOKS\n\n // This function will be called whenever a moment is mutated.\n // It is intended to keep the offset in sync with the timezone.\n hooks.updateOffset = function () {};\n\n // MOMENTS\n\n // keepLocalTime = true means only change the timezone, without\n // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->\n // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset\n // +0200, so we adjust the time as needed, to be valid.\n //\n // Keeping the time actually adds/subtracts (one hour)\n // from the actual represented time. That is why we call updateOffset\n // a second time. In case it wants us to change the offset again\n // _changeInProgress == true case, then we have to adjust, because\n // there is no such time in the given timezone.\n function getSetOffset(input, keepLocalTime, keepMinutes) {\n var offset = this._offset || 0,\n localAdjust;\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n if (input != null) {\n if (typeof input === 'string') {\n input = offsetFromString(matchShortOffset, input);\n if (input === null) {\n return this;\n }\n } else if (Math.abs(input) < 16 && !keepMinutes) {\n input = input * 60;\n }\n if (!this._isUTC && keepLocalTime) {\n localAdjust = getDateOffset(this);\n }\n this._offset = input;\n this._isUTC = true;\n if (localAdjust != null) {\n this.add(localAdjust, 'm');\n }\n if (offset !== input) {\n if (!keepLocalTime || this._changeInProgress) {\n addSubtract(\n this,\n createDuration(input - offset, 'm'),\n 1,\n false\n );\n } else if (!this._changeInProgress) {\n this._changeInProgress = true;\n hooks.updateOffset(this, true);\n this._changeInProgress = null;\n }\n }\n return this;\n } else {\n return this._isUTC ? offset : getDateOffset(this);\n }\n }\n\n function getSetZone(input, keepLocalTime) {\n if (input != null) {\n if (typeof input !== 'string') {\n input = -input;\n }\n\n this.utcOffset(input, keepLocalTime);\n\n return this;\n } else {\n return -this.utcOffset();\n }\n }\n\n function setOffsetToUTC(keepLocalTime) {\n return this.utcOffset(0, keepLocalTime);\n }\n\n function setOffsetToLocal(keepLocalTime) {\n if (this._isUTC) {\n this.utcOffset(0, keepLocalTime);\n this._isUTC = false;\n\n if (keepLocalTime) {\n this.subtract(getDateOffset(this), 'm');\n }\n }\n return this;\n }\n\n function setOffsetToParsedOffset() {\n if (this._tzm != null) {\n this.utcOffset(this._tzm, false, true);\n } else if (typeof this._i === 'string') {\n var tZone = offsetFromString(matchOffset, this._i);\n if (tZone != null) {\n this.utcOffset(tZone);\n } else {\n this.utcOffset(0, true);\n }\n }\n return this;\n }\n\n function hasAlignedHourOffset(input) {\n if (!this.isValid()) {\n return false;\n }\n input = input ? createLocal(input).utcOffset() : 0;\n\n return (this.utcOffset() - input) % 60 === 0;\n }\n\n function isDaylightSavingTime() {\n return (\n this.utcOffset() > this.clone().month(0).utcOffset() ||\n this.utcOffset() > this.clone().month(5).utcOffset()\n );\n }\n\n function isDaylightSavingTimeShifted() {\n if (!isUndefined(this._isDSTShifted)) {\n return this._isDSTShifted;\n }\n\n var c = {},\n other;\n\n copyConfig(c, this);\n c = prepareConfig(c);\n\n if (c._a) {\n other = c._isUTC ? createUTC(c._a) : createLocal(c._a);\n this._isDSTShifted =\n this.isValid() && compareArrays(c._a, other.toArray()) > 0;\n } else {\n this._isDSTShifted = false;\n }\n\n return this._isDSTShifted;\n }\n\n function isLocal() {\n return this.isValid() ? !this._isUTC : false;\n }\n\n function isUtcOffset() {\n return this.isValid() ? this._isUTC : false;\n }\n\n function isUtc() {\n return this.isValid() ? this._isUTC && this._offset === 0 : false;\n }\n\n // ASP.NET json date format regex\n var aspNetRegex = /^(-|\\+)?(?:(\\d*)[. ])?(\\d+):(\\d+)(?::(\\d+)(\\.\\d*)?)?$/,\n // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html\n // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere\n // and further modified to allow for strings containing both week and day\n isoRegex =\n /^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;\n\n function createDuration(input, key) {\n var duration = input,\n // matching against regexp is expensive, do it on demand\n match = null,\n sign,\n ret,\n diffRes;\n\n if (isDuration(input)) {\n duration = {\n ms: input._milliseconds,\n d: input._days,\n M: input._months,\n };\n } else if (isNumber(input) || !isNaN(+input)) {\n duration = {};\n if (key) {\n duration[key] = +input;\n } else {\n duration.milliseconds = +input;\n }\n } else if ((match = aspNetRegex.exec(input))) {\n sign = match[1] === '-' ? -1 : 1;\n duration = {\n y: 0,\n d: toInt(match[DATE]) * sign,\n h: toInt(match[HOUR]) * sign,\n m: toInt(match[MINUTE]) * sign,\n s: toInt(match[SECOND]) * sign,\n ms: toInt(absRound(match[MILLISECOND] * 1000)) * sign, // the millisecond decimal point is included in the match\n };\n } else if ((match = isoRegex.exec(input))) {\n sign = match[1] === '-' ? -1 : 1;\n duration = {\n y: parseIso(match[2], sign),\n M: parseIso(match[3], sign),\n w: parseIso(match[4], sign),\n d: parseIso(match[5], sign),\n h: parseIso(match[6], sign),\n m: parseIso(match[7], sign),\n s: parseIso(match[8], sign),\n };\n } else if (duration == null) {\n // checks for null or undefined\n duration = {};\n } else if (\n typeof duration === 'object' &&\n ('from' in duration || 'to' in duration)\n ) {\n diffRes = momentsDifference(\n createLocal(duration.from),\n createLocal(duration.to)\n );\n\n duration = {};\n duration.ms = diffRes.milliseconds;\n duration.M = diffRes.months;\n }\n\n ret = new Duration(duration);\n\n if (isDuration(input) && hasOwnProp(input, '_locale')) {\n ret._locale = input._locale;\n }\n\n if (isDuration(input) && hasOwnProp(input, '_isValid')) {\n ret._isValid = input._isValid;\n }\n\n return ret;\n }\n\n createDuration.fn = Duration.prototype;\n createDuration.invalid = createInvalid$1;\n\n function parseIso(inp, sign) {\n // We'd normally use ~~inp for this, but unfortunately it also\n // converts floats to ints.\n // inp may be undefined, so careful calling replace on it.\n var res = inp && parseFloat(inp.replace(',', '.'));\n // apply sign while we're at it\n return (isNaN(res) ? 0 : res) * sign;\n }\n\n function positiveMomentsDifference(base, other) {\n var res = {};\n\n res.months =\n other.month() - base.month() + (other.year() - base.year()) * 12;\n if (base.clone().add(res.months, 'M').isAfter(other)) {\n --res.months;\n }\n\n res.milliseconds = +other - +base.clone().add(res.months, 'M');\n\n return res;\n }\n\n function momentsDifference(base, other) {\n var res;\n if (!(base.isValid() && other.isValid())) {\n return { milliseconds: 0, months: 0 };\n }\n\n other = cloneWithOffset(other, base);\n if (base.isBefore(other)) {\n res = positiveMomentsDifference(base, other);\n } else {\n res = positiveMomentsDifference(other, base);\n res.milliseconds = -res.milliseconds;\n res.months = -res.months;\n }\n\n return res;\n }\n\n // TODO: remove 'name' arg after deprecation is removed\n function createAdder(direction, name) {\n return function (val, period) {\n var dur, tmp;\n //invert the arguments, but complain about it\n if (period !== null && !isNaN(+period)) {\n deprecateSimple(\n name,\n 'moment().' +\n name +\n '(period, number) is deprecated. Please use moment().' +\n name +\n '(number, period). ' +\n 'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.'\n );\n tmp = val;\n val = period;\n period = tmp;\n }\n\n dur = createDuration(val, period);\n addSubtract(this, dur, direction);\n return this;\n };\n }\n\n function addSubtract(mom, duration, isAdding, updateOffset) {\n var milliseconds = duration._milliseconds,\n days = absRound(duration._days),\n months = absRound(duration._months);\n\n if (!mom.isValid()) {\n // No op\n return;\n }\n\n updateOffset = updateOffset == null ? true : updateOffset;\n\n if (months) {\n setMonth(mom, get(mom, 'Month') + months * isAdding);\n }\n if (days) {\n set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);\n }\n if (milliseconds) {\n mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);\n }\n if (updateOffset) {\n hooks.updateOffset(mom, days || months);\n }\n }\n\n var add = createAdder(1, 'add'),\n subtract = createAdder(-1, 'subtract');\n\n function isString(input) {\n return typeof input === 'string' || input instanceof String;\n }\n\n // type MomentInput = Moment | Date | string | number | (number | string)[] | MomentInputObject | void; // null | undefined\n function isMomentInput(input) {\n return (\n isMoment(input) ||\n isDate(input) ||\n isString(input) ||\n isNumber(input) ||\n isNumberOrStringArray(input) ||\n isMomentInputObject(input) ||\n input === null ||\n input === undefined\n );\n }\n\n function isMomentInputObject(input) {\n var objectTest = isObject(input) && !isObjectEmpty(input),\n propertyTest = false,\n properties = [\n 'years',\n 'year',\n 'y',\n 'months',\n 'month',\n 'M',\n 'days',\n 'day',\n 'd',\n 'dates',\n 'date',\n 'D',\n 'hours',\n 'hour',\n 'h',\n 'minutes',\n 'minute',\n 'm',\n 'seconds',\n 'second',\n 's',\n 'milliseconds',\n 'millisecond',\n 'ms',\n ],\n i,\n property,\n propertyLen = properties.length;\n\n for (i = 0; i < propertyLen; i += 1) {\n property = properties[i];\n propertyTest = propertyTest || hasOwnProp(input, property);\n }\n\n return objectTest && propertyTest;\n }\n\n function isNumberOrStringArray(input) {\n var arrayTest = isArray(input),\n dataTypeTest = false;\n if (arrayTest) {\n dataTypeTest =\n input.filter(function (item) {\n return !isNumber(item) && isString(input);\n }).length === 0;\n }\n return arrayTest && dataTypeTest;\n }\n\n function isCalendarSpec(input) {\n var objectTest = isObject(input) && !isObjectEmpty(input),\n propertyTest = false,\n properties = [\n 'sameDay',\n 'nextDay',\n 'lastDay',\n 'nextWeek',\n 'lastWeek',\n 'sameElse',\n ],\n i,\n property;\n\n for (i = 0; i < properties.length; i += 1) {\n property = properties[i];\n propertyTest = propertyTest || hasOwnProp(input, property);\n }\n\n return objectTest && propertyTest;\n }\n\n function getCalendarFormat(myMoment, now) {\n var diff = myMoment.diff(now, 'days', true);\n return diff < -6\n ? 'sameElse'\n : diff < -1\n ? 'lastWeek'\n : diff < 0\n ? 'lastDay'\n : diff < 1\n ? 'sameDay'\n : diff < 2\n ? 'nextDay'\n : diff < 7\n ? 'nextWeek'\n : 'sameElse';\n }\n\n function calendar$1(time, formats) {\n // Support for single parameter, formats only overload to the calendar function\n if (arguments.length === 1) {\n if (!arguments[0]) {\n time = undefined;\n formats = undefined;\n } else if (isMomentInput(arguments[0])) {\n time = arguments[0];\n formats = undefined;\n } else if (isCalendarSpec(arguments[0])) {\n formats = arguments[0];\n time = undefined;\n }\n }\n // We want to compare the start of today, vs this.\n // Getting start-of-today depends on whether we're local/utc/offset or not.\n var now = time || createLocal(),\n sod = cloneWithOffset(now, this).startOf('day'),\n format = hooks.calendarFormat(this, sod) || 'sameElse',\n output =\n formats &&\n (isFunction(formats[format])\n ? formats[format].call(this, now)\n : formats[format]);\n\n return this.format(\n output || this.localeData().calendar(format, this, createLocal(now))\n );\n }\n\n function clone() {\n return new Moment(this);\n }\n\n function isAfter(input, units) {\n var localInput = isMoment(input) ? input : createLocal(input);\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() > localInput.valueOf();\n } else {\n return localInput.valueOf() < this.clone().startOf(units).valueOf();\n }\n }\n\n function isBefore(input, units) {\n var localInput = isMoment(input) ? input : createLocal(input);\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() < localInput.valueOf();\n } else {\n return this.clone().endOf(units).valueOf() < localInput.valueOf();\n }\n }\n\n function isBetween(from, to, units, inclusivity) {\n var localFrom = isMoment(from) ? from : createLocal(from),\n localTo = isMoment(to) ? to : createLocal(to);\n if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) {\n return false;\n }\n inclusivity = inclusivity || '()';\n return (\n (inclusivity[0] === '('\n ? this.isAfter(localFrom, units)\n : !this.isBefore(localFrom, units)) &&\n (inclusivity[1] === ')'\n ? this.isBefore(localTo, units)\n : !this.isAfter(localTo, units))\n );\n }\n\n function isSame(input, units) {\n var localInput = isMoment(input) ? input : createLocal(input),\n inputMs;\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() === localInput.valueOf();\n } else {\n inputMs = localInput.valueOf();\n return (\n this.clone().startOf(units).valueOf() <= inputMs &&\n inputMs <= this.clone().endOf(units).valueOf()\n );\n }\n }\n\n function isSameOrAfter(input, units) {\n return this.isSame(input, units) || this.isAfter(input, units);\n }\n\n function isSameOrBefore(input, units) {\n return this.isSame(input, units) || this.isBefore(input, units);\n }\n\n function diff(input, units, asFloat) {\n var that, zoneDelta, output;\n\n if (!this.isValid()) {\n return NaN;\n }\n\n that = cloneWithOffset(input, this);\n\n if (!that.isValid()) {\n return NaN;\n }\n\n zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;\n\n units = normalizeUnits(units);\n\n switch (units) {\n case 'year':\n output = monthDiff(this, that) / 12;\n break;\n case 'month':\n output = monthDiff(this, that);\n break;\n case 'quarter':\n output = monthDiff(this, that) / 3;\n break;\n case 'second':\n output = (this - that) / 1e3;\n break; // 1000\n case 'minute':\n output = (this - that) / 6e4;\n break; // 1000 * 60\n case 'hour':\n output = (this - that) / 36e5;\n break; // 1000 * 60 * 60\n case 'day':\n output = (this - that - zoneDelta) / 864e5;\n break; // 1000 * 60 * 60 * 24, negate dst\n case 'week':\n output = (this - that - zoneDelta) / 6048e5;\n break; // 1000 * 60 * 60 * 24 * 7, negate dst\n default:\n output = this - that;\n }\n\n return asFloat ? output : absFloor(output);\n }\n\n function monthDiff(a, b) {\n if (a.date() < b.date()) {\n // end-of-month calculations work correct when the start month has more\n // days than the end month.\n return -monthDiff(b, a);\n }\n // difference in months\n var wholeMonthDiff = (b.year() - a.year()) * 12 + (b.month() - a.month()),\n // b is in (anchor - 1 month, anchor + 1 month)\n anchor = a.clone().add(wholeMonthDiff, 'months'),\n anchor2,\n adjust;\n\n if (b - anchor < 0) {\n anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');\n // linear across the month\n adjust = (b - anchor) / (anchor - anchor2);\n } else {\n anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');\n // linear across the month\n adjust = (b - anchor) / (anchor2 - anchor);\n }\n\n //check for negative zero, return zero if negative zero\n return -(wholeMonthDiff + adjust) || 0;\n }\n\n hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';\n hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';\n\n function toString() {\n return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');\n }\n\n function toISOString(keepOffset) {\n if (!this.isValid()) {\n return null;\n }\n var utc = keepOffset !== true,\n m = utc ? this.clone().utc() : this;\n if (m.year() < 0 || m.year() > 9999) {\n return formatMoment(\n m,\n utc\n ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]'\n : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ'\n );\n }\n if (isFunction(Date.prototype.toISOString)) {\n // native implementation is ~50x faster, use it when we can\n if (utc) {\n return this.toDate().toISOString();\n } else {\n return new Date(this.valueOf() + this.utcOffset() * 60 * 1000)\n .toISOString()\n .replace('Z', formatMoment(m, 'Z'));\n }\n }\n return formatMoment(\n m,\n utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ'\n );\n }\n\n /**\n * Return a human readable representation of a moment that can\n * also be evaluated to get a new moment which is the same\n *\n * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects\n */\n function inspect() {\n if (!this.isValid()) {\n return 'moment.invalid(/* ' + this._i + ' */)';\n }\n var func = 'moment',\n zone = '',\n prefix,\n year,\n datetime,\n suffix;\n if (!this.isLocal()) {\n func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';\n zone = 'Z';\n }\n prefix = '[' + func + '(\"]';\n year = 0 <= this.year() && this.year() <= 9999 ? 'YYYY' : 'YYYYYY';\n datetime = '-MM-DD[T]HH:mm:ss.SSS';\n suffix = zone + '[\")]';\n\n return this.format(prefix + year + datetime + suffix);\n }\n\n function format(inputString) {\n if (!inputString) {\n inputString = this.isUtc()\n ? hooks.defaultFormatUtc\n : hooks.defaultFormat;\n }\n var output = formatMoment(this, inputString);\n return this.localeData().postformat(output);\n }\n\n function from(time, withoutSuffix) {\n if (\n this.isValid() &&\n ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n ) {\n return createDuration({ to: this, from: time })\n .locale(this.locale())\n .humanize(!withoutSuffix);\n } else {\n return this.localeData().invalidDate();\n }\n }\n\n function fromNow(withoutSuffix) {\n return this.from(createLocal(), withoutSuffix);\n }\n\n function to(time, withoutSuffix) {\n if (\n this.isValid() &&\n ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n ) {\n return createDuration({ from: this, to: time })\n .locale(this.locale())\n .humanize(!withoutSuffix);\n } else {\n return this.localeData().invalidDate();\n }\n }\n\n function toNow(withoutSuffix) {\n return this.to(createLocal(), withoutSuffix);\n }\n\n // If passed a locale key, it will set the locale for this\n // instance. Otherwise, it will return the locale configuration\n // variables for this instance.\n function locale(key) {\n var newLocaleData;\n\n if (key === undefined) {\n return this._locale._abbr;\n } else {\n newLocaleData = getLocale(key);\n if (newLocaleData != null) {\n this._locale = newLocaleData;\n }\n return this;\n }\n }\n\n var lang = deprecate(\n 'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',\n function (key) {\n if (key === undefined) {\n return this.localeData();\n } else {\n return this.locale(key);\n }\n }\n );\n\n function localeData() {\n return this._locale;\n }\n\n var MS_PER_SECOND = 1000,\n MS_PER_MINUTE = 60 * MS_PER_SECOND,\n MS_PER_HOUR = 60 * MS_PER_MINUTE,\n MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR;\n\n // actual modulo - handles negative numbers (for dates before 1970):\n function mod$1(dividend, divisor) {\n return ((dividend % divisor) + divisor) % divisor;\n }\n\n function localStartOfDate(y, m, d) {\n // the date constructor remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n return new Date(y + 400, m, d) - MS_PER_400_YEARS;\n } else {\n return new Date(y, m, d).valueOf();\n }\n }\n\n function utcStartOfDate(y, m, d) {\n // Date.UTC remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS;\n } else {\n return Date.UTC(y, m, d);\n }\n }\n\n function startOf(units) {\n var time, startOfDate;\n units = normalizeUnits(units);\n if (units === undefined || units === 'millisecond' || !this.isValid()) {\n return this;\n }\n\n startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n switch (units) {\n case 'year':\n time = startOfDate(this.year(), 0, 1);\n break;\n case 'quarter':\n time = startOfDate(\n this.year(),\n this.month() - (this.month() % 3),\n 1\n );\n break;\n case 'month':\n time = startOfDate(this.year(), this.month(), 1);\n break;\n case 'week':\n time = startOfDate(\n this.year(),\n this.month(),\n this.date() - this.weekday()\n );\n break;\n case 'isoWeek':\n time = startOfDate(\n this.year(),\n this.month(),\n this.date() - (this.isoWeekday() - 1)\n );\n break;\n case 'day':\n case 'date':\n time = startOfDate(this.year(), this.month(), this.date());\n break;\n case 'hour':\n time = this._d.valueOf();\n time -= mod$1(\n time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n MS_PER_HOUR\n );\n break;\n case 'minute':\n time = this._d.valueOf();\n time -= mod$1(time, MS_PER_MINUTE);\n break;\n case 'second':\n time = this._d.valueOf();\n time -= mod$1(time, MS_PER_SECOND);\n break;\n }\n\n this._d.setTime(time);\n hooks.updateOffset(this, true);\n return this;\n }\n\n function endOf(units) {\n var time, startOfDate;\n units = normalizeUnits(units);\n if (units === undefined || units === 'millisecond' || !this.isValid()) {\n return this;\n }\n\n startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n switch (units) {\n case 'year':\n time = startOfDate(this.year() + 1, 0, 1) - 1;\n break;\n case 'quarter':\n time =\n startOfDate(\n this.year(),\n this.month() - (this.month() % 3) + 3,\n 1\n ) - 1;\n break;\n case 'month':\n time = startOfDate(this.year(), this.month() + 1, 1) - 1;\n break;\n case 'week':\n time =\n startOfDate(\n this.year(),\n this.month(),\n this.date() - this.weekday() + 7\n ) - 1;\n break;\n case 'isoWeek':\n time =\n startOfDate(\n this.year(),\n this.month(),\n this.date() - (this.isoWeekday() - 1) + 7\n ) - 1;\n break;\n case 'day':\n case 'date':\n time = startOfDate(this.year(), this.month(), this.date() + 1) - 1;\n break;\n case 'hour':\n time = this._d.valueOf();\n time +=\n MS_PER_HOUR -\n mod$1(\n time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n MS_PER_HOUR\n ) -\n 1;\n break;\n case 'minute':\n time = this._d.valueOf();\n time += MS_PER_MINUTE - mod$1(time, MS_PER_MINUTE) - 1;\n break;\n case 'second':\n time = this._d.valueOf();\n time += MS_PER_SECOND - mod$1(time, MS_PER_SECOND) - 1;\n break;\n }\n\n this._d.setTime(time);\n hooks.updateOffset(this, true);\n return this;\n }\n\n function valueOf() {\n return this._d.valueOf() - (this._offset || 0) * 60000;\n }\n\n function unix() {\n return Math.floor(this.valueOf() / 1000);\n }\n\n function toDate() {\n return new Date(this.valueOf());\n }\n\n function toArray() {\n var m = this;\n return [\n m.year(),\n m.month(),\n m.date(),\n m.hour(),\n m.minute(),\n m.second(),\n m.millisecond(),\n ];\n }\n\n function toObject() {\n var m = this;\n return {\n years: m.year(),\n months: m.month(),\n date: m.date(),\n hours: m.hours(),\n minutes: m.minutes(),\n seconds: m.seconds(),\n milliseconds: m.milliseconds(),\n };\n }\n\n function toJSON() {\n // new Date(NaN).toJSON() === null\n return this.isValid() ? this.toISOString() : null;\n }\n\n function isValid$2() {\n return isValid(this);\n }\n\n function parsingFlags() {\n return extend({}, getParsingFlags(this));\n }\n\n function invalidAt() {\n return getParsingFlags(this).overflow;\n }\n\n function creationData() {\n return {\n input: this._i,\n format: this._f,\n locale: this._locale,\n isUTC: this._isUTC,\n strict: this._strict,\n };\n }\n\n addFormatToken('N', 0, 0, 'eraAbbr');\n addFormatToken('NN', 0, 0, 'eraAbbr');\n addFormatToken('NNN', 0, 0, 'eraAbbr');\n addFormatToken('NNNN', 0, 0, 'eraName');\n addFormatToken('NNNNN', 0, 0, 'eraNarrow');\n\n addFormatToken('y', ['y', 1], 'yo', 'eraYear');\n addFormatToken('y', ['yy', 2], 0, 'eraYear');\n addFormatToken('y', ['yyy', 3], 0, 'eraYear');\n addFormatToken('y', ['yyyy', 4], 0, 'eraYear');\n\n addRegexToken('N', matchEraAbbr);\n addRegexToken('NN', matchEraAbbr);\n addRegexToken('NNN', matchEraAbbr);\n addRegexToken('NNNN', matchEraName);\n addRegexToken('NNNNN', matchEraNarrow);\n\n addParseToken(\n ['N', 'NN', 'NNN', 'NNNN', 'NNNNN'],\n function (input, array, config, token) {\n var era = config._locale.erasParse(input, token, config._strict);\n if (era) {\n getParsingFlags(config).era = era;\n } else {\n getParsingFlags(config).invalidEra = input;\n }\n }\n );\n\n addRegexToken('y', matchUnsigned);\n addRegexToken('yy', matchUnsigned);\n addRegexToken('yyy', matchUnsigned);\n addRegexToken('yyyy', matchUnsigned);\n addRegexToken('yo', matchEraYearOrdinal);\n\n addParseToken(['y', 'yy', 'yyy', 'yyyy'], YEAR);\n addParseToken(['yo'], function (input, array, config, token) {\n var match;\n if (config._locale._eraYearOrdinalRegex) {\n match = input.match(config._locale._eraYearOrdinalRegex);\n }\n\n if (config._locale.eraYearOrdinalParse) {\n array[YEAR] = config._locale.eraYearOrdinalParse(input, match);\n } else {\n array[YEAR] = parseInt(input, 10);\n }\n });\n\n function localeEras(m, format) {\n var i,\n l,\n date,\n eras = this._eras || getLocale('en')._eras;\n for (i = 0, l = eras.length; i < l; ++i) {\n switch (typeof eras[i].since) {\n case 'string':\n // truncate time\n date = hooks(eras[i].since).startOf('day');\n eras[i].since = date.valueOf();\n break;\n }\n\n switch (typeof eras[i].until) {\n case 'undefined':\n eras[i].until = +Infinity;\n break;\n case 'string':\n // truncate time\n date = hooks(eras[i].until).startOf('day').valueOf();\n eras[i].until = date.valueOf();\n break;\n }\n }\n return eras;\n }\n\n function localeErasParse(eraName, format, strict) {\n var i,\n l,\n eras = this.eras(),\n name,\n abbr,\n narrow;\n eraName = eraName.toUpperCase();\n\n for (i = 0, l = eras.length; i < l; ++i) {\n name = eras[i].name.toUpperCase();\n abbr = eras[i].abbr.toUpperCase();\n narrow = eras[i].narrow.toUpperCase();\n\n if (strict) {\n switch (format) {\n case 'N':\n case 'NN':\n case 'NNN':\n if (abbr === eraName) {\n return eras[i];\n }\n break;\n\n case 'NNNN':\n if (name === eraName) {\n return eras[i];\n }\n break;\n\n case 'NNNNN':\n if (narrow === eraName) {\n return eras[i];\n }\n break;\n }\n } else if ([name, abbr, narrow].indexOf(eraName) >= 0) {\n return eras[i];\n }\n }\n }\n\n function localeErasConvertYear(era, year) {\n var dir = era.since <= era.until ? +1 : -1;\n if (year === undefined) {\n return hooks(era.since).year();\n } else {\n return hooks(era.since).year() + (year - era.offset) * dir;\n }\n }\n\n function getEraName() {\n var i,\n l,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (eras[i].since <= val && val <= eras[i].until) {\n return eras[i].name;\n }\n if (eras[i].until <= val && val <= eras[i].since) {\n return eras[i].name;\n }\n }\n\n return '';\n }\n\n function getEraNarrow() {\n var i,\n l,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (eras[i].since <= val && val <= eras[i].until) {\n return eras[i].narrow;\n }\n if (eras[i].until <= val && val <= eras[i].since) {\n return eras[i].narrow;\n }\n }\n\n return '';\n }\n\n function getEraAbbr() {\n var i,\n l,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (eras[i].since <= val && val <= eras[i].until) {\n return eras[i].abbr;\n }\n if (eras[i].until <= val && val <= eras[i].since) {\n return eras[i].abbr;\n }\n }\n\n return '';\n }\n\n function getEraYear() {\n var i,\n l,\n dir,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n dir = eras[i].since <= eras[i].until ? +1 : -1;\n\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (\n (eras[i].since <= val && val <= eras[i].until) ||\n (eras[i].until <= val && val <= eras[i].since)\n ) {\n return (\n (this.year() - hooks(eras[i].since).year()) * dir +\n eras[i].offset\n );\n }\n }\n\n return this.year();\n }\n\n function erasNameRegex(isStrict) {\n if (!hasOwnProp(this, '_erasNameRegex')) {\n computeErasParse.call(this);\n }\n return isStrict ? this._erasNameRegex : this._erasRegex;\n }\n\n function erasAbbrRegex(isStrict) {\n if (!hasOwnProp(this, '_erasAbbrRegex')) {\n computeErasParse.call(this);\n }\n return isStrict ? this._erasAbbrRegex : this._erasRegex;\n }\n\n function erasNarrowRegex(isStrict) {\n if (!hasOwnProp(this, '_erasNarrowRegex')) {\n computeErasParse.call(this);\n }\n return isStrict ? this._erasNarrowRegex : this._erasRegex;\n }\n\n function matchEraAbbr(isStrict, locale) {\n return locale.erasAbbrRegex(isStrict);\n }\n\n function matchEraName(isStrict, locale) {\n return locale.erasNameRegex(isStrict);\n }\n\n function matchEraNarrow(isStrict, locale) {\n return locale.erasNarrowRegex(isStrict);\n }\n\n function matchEraYearOrdinal(isStrict, locale) {\n return locale._eraYearOrdinalRegex || matchUnsigned;\n }\n\n function computeErasParse() {\n var abbrPieces = [],\n namePieces = [],\n narrowPieces = [],\n mixedPieces = [],\n i,\n l,\n erasName,\n erasAbbr,\n erasNarrow,\n eras = this.eras();\n\n for (i = 0, l = eras.length; i < l; ++i) {\n erasName = regexEscape(eras[i].name);\n erasAbbr = regexEscape(eras[i].abbr);\n erasNarrow = regexEscape(eras[i].narrow);\n\n namePieces.push(erasName);\n abbrPieces.push(erasAbbr);\n narrowPieces.push(erasNarrow);\n mixedPieces.push(erasName);\n mixedPieces.push(erasAbbr);\n mixedPieces.push(erasNarrow);\n }\n\n this._erasRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._erasNameRegex = new RegExp('^(' + namePieces.join('|') + ')', 'i');\n this._erasAbbrRegex = new RegExp('^(' + abbrPieces.join('|') + ')', 'i');\n this._erasNarrowRegex = new RegExp(\n '^(' + narrowPieces.join('|') + ')',\n 'i'\n );\n }\n\n // FORMATTING\n\n addFormatToken(0, ['gg', 2], 0, function () {\n return this.weekYear() % 100;\n });\n\n addFormatToken(0, ['GG', 2], 0, function () {\n return this.isoWeekYear() % 100;\n });\n\n function addWeekYearFormatToken(token, getter) {\n addFormatToken(0, [token, token.length], 0, getter);\n }\n\n addWeekYearFormatToken('gggg', 'weekYear');\n addWeekYearFormatToken('ggggg', 'weekYear');\n addWeekYearFormatToken('GGGG', 'isoWeekYear');\n addWeekYearFormatToken('GGGGG', 'isoWeekYear');\n\n // ALIASES\n\n // PARSING\n\n addRegexToken('G', matchSigned);\n addRegexToken('g', matchSigned);\n addRegexToken('GG', match1to2, match2);\n addRegexToken('gg', match1to2, match2);\n addRegexToken('GGGG', match1to4, match4);\n addRegexToken('gggg', match1to4, match4);\n addRegexToken('GGGGG', match1to6, match6);\n addRegexToken('ggggg', match1to6, match6);\n\n addWeekParseToken(\n ['gggg', 'ggggg', 'GGGG', 'GGGGG'],\n function (input, week, config, token) {\n week[token.substr(0, 2)] = toInt(input);\n }\n );\n\n addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {\n week[token] = hooks.parseTwoDigitYear(input);\n });\n\n // MOMENTS\n\n function getSetWeekYear(input) {\n return getSetWeekYearHelper.call(\n this,\n input,\n this.week(),\n this.weekday() + this.localeData()._week.dow,\n this.localeData()._week.dow,\n this.localeData()._week.doy\n );\n }\n\n function getSetISOWeekYear(input) {\n return getSetWeekYearHelper.call(\n this,\n input,\n this.isoWeek(),\n this.isoWeekday(),\n 1,\n 4\n );\n }\n\n function getISOWeeksInYear() {\n return weeksInYear(this.year(), 1, 4);\n }\n\n function getISOWeeksInISOWeekYear() {\n return weeksInYear(this.isoWeekYear(), 1, 4);\n }\n\n function getWeeksInYear() {\n var weekInfo = this.localeData()._week;\n return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);\n }\n\n function getWeeksInWeekYear() {\n var weekInfo = this.localeData()._week;\n return weeksInYear(this.weekYear(), weekInfo.dow, weekInfo.doy);\n }\n\n function getSetWeekYearHelper(input, week, weekday, dow, doy) {\n var weeksTarget;\n if (input == null) {\n return weekOfYear(this, dow, doy).year;\n } else {\n weeksTarget = weeksInYear(input, dow, doy);\n if (week > weeksTarget) {\n week = weeksTarget;\n }\n return setWeekAll.call(this, input, week, weekday, dow, doy);\n }\n }\n\n function setWeekAll(weekYear, week, weekday, dow, doy) {\n var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),\n date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);\n\n this.year(date.getUTCFullYear());\n this.month(date.getUTCMonth());\n this.date(date.getUTCDate());\n return this;\n }\n\n // FORMATTING\n\n addFormatToken('Q', 0, 'Qo', 'quarter');\n\n // PARSING\n\n addRegexToken('Q', match1);\n addParseToken('Q', function (input, array) {\n array[MONTH] = (toInt(input) - 1) * 3;\n });\n\n // MOMENTS\n\n function getSetQuarter(input) {\n return input == null\n ? Math.ceil((this.month() + 1) / 3)\n : this.month((input - 1) * 3 + (this.month() % 3));\n }\n\n // FORMATTING\n\n addFormatToken('D', ['DD', 2], 'Do', 'date');\n\n // PARSING\n\n addRegexToken('D', match1to2, match1to2NoLeadingZero);\n addRegexToken('DD', match1to2, match2);\n addRegexToken('Do', function (isStrict, locale) {\n // TODO: Remove \"ordinalParse\" fallback in next major release.\n return isStrict\n ? locale._dayOfMonthOrdinalParse || locale._ordinalParse\n : locale._dayOfMonthOrdinalParseLenient;\n });\n\n addParseToken(['D', 'DD'], DATE);\n addParseToken('Do', function (input, array) {\n array[DATE] = toInt(input.match(match1to2)[0]);\n });\n\n // MOMENTS\n\n var getSetDayOfMonth = makeGetSet('Date', true);\n\n // FORMATTING\n\n addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');\n\n // PARSING\n\n addRegexToken('DDD', match1to3);\n addRegexToken('DDDD', match3);\n addParseToken(['DDD', 'DDDD'], function (input, array, config) {\n config._dayOfYear = toInt(input);\n });\n\n // HELPERS\n\n // MOMENTS\n\n function getSetDayOfYear(input) {\n var dayOfYear =\n Math.round(\n (this.clone().startOf('day') - this.clone().startOf('year')) / 864e5\n ) + 1;\n return input == null ? dayOfYear : this.add(input - dayOfYear, 'd');\n }\n\n // FORMATTING\n\n addFormatToken('m', ['mm', 2], 0, 'minute');\n\n // PARSING\n\n addRegexToken('m', match1to2, match1to2HasZero);\n addRegexToken('mm', match1to2, match2);\n addParseToken(['m', 'mm'], MINUTE);\n\n // MOMENTS\n\n var getSetMinute = makeGetSet('Minutes', false);\n\n // FORMATTING\n\n addFormatToken('s', ['ss', 2], 0, 'second');\n\n // PARSING\n\n addRegexToken('s', match1to2, match1to2HasZero);\n addRegexToken('ss', match1to2, match2);\n addParseToken(['s', 'ss'], SECOND);\n\n // MOMENTS\n\n var getSetSecond = makeGetSet('Seconds', false);\n\n // FORMATTING\n\n addFormatToken('S', 0, 0, function () {\n return ~~(this.millisecond() / 100);\n });\n\n addFormatToken(0, ['SS', 2], 0, function () {\n return ~~(this.millisecond() / 10);\n });\n\n addFormatToken(0, ['SSS', 3], 0, 'millisecond');\n addFormatToken(0, ['SSSS', 4], 0, function () {\n return this.millisecond() * 10;\n });\n addFormatToken(0, ['SSSSS', 5], 0, function () {\n return this.millisecond() * 100;\n });\n addFormatToken(0, ['SSSSSS', 6], 0, function () {\n return this.millisecond() * 1000;\n });\n addFormatToken(0, ['SSSSSSS', 7], 0, function () {\n return this.millisecond() * 10000;\n });\n addFormatToken(0, ['SSSSSSSS', 8], 0, function () {\n return this.millisecond() * 100000;\n });\n addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {\n return this.millisecond() * 1000000;\n });\n\n // PARSING\n\n addRegexToken('S', match1to3, match1);\n addRegexToken('SS', match1to3, match2);\n addRegexToken('SSS', match1to3, match3);\n\n var token, getSetMillisecond;\n for (token = 'SSSS'; token.length <= 9; token += 'S') {\n addRegexToken(token, matchUnsigned);\n }\n\n function parseMs(input, array) {\n array[MILLISECOND] = toInt(('0.' + input) * 1000);\n }\n\n for (token = 'S'; token.length <= 9; token += 'S') {\n addParseToken(token, parseMs);\n }\n\n getSetMillisecond = makeGetSet('Milliseconds', false);\n\n // FORMATTING\n\n addFormatToken('z', 0, 0, 'zoneAbbr');\n addFormatToken('zz', 0, 0, 'zoneName');\n\n // MOMENTS\n\n function getZoneAbbr() {\n return this._isUTC ? 'UTC' : '';\n }\n\n function getZoneName() {\n return this._isUTC ? 'Coordinated Universal Time' : '';\n }\n\n var proto = Moment.prototype;\n\n proto.add = add;\n proto.calendar = calendar$1;\n proto.clone = clone;\n proto.diff = diff;\n proto.endOf = endOf;\n proto.format = format;\n proto.from = from;\n proto.fromNow = fromNow;\n proto.to = to;\n proto.toNow = toNow;\n proto.get = stringGet;\n proto.invalidAt = invalidAt;\n proto.isAfter = isAfter;\n proto.isBefore = isBefore;\n proto.isBetween = isBetween;\n proto.isSame = isSame;\n proto.isSameOrAfter = isSameOrAfter;\n proto.isSameOrBefore = isSameOrBefore;\n proto.isValid = isValid$2;\n proto.lang = lang;\n proto.locale = locale;\n proto.localeData = localeData;\n proto.max = prototypeMax;\n proto.min = prototypeMin;\n proto.parsingFlags = parsingFlags;\n proto.set = stringSet;\n proto.startOf = startOf;\n proto.subtract = subtract;\n proto.toArray = toArray;\n proto.toObject = toObject;\n proto.toDate = toDate;\n proto.toISOString = toISOString;\n proto.inspect = inspect;\n if (typeof Symbol !== 'undefined' && Symbol.for != null) {\n proto[Symbol.for('nodejs.util.inspect.custom')] = function () {\n return 'Moment<' + this.format() + '>';\n };\n }\n proto.toJSON = toJSON;\n proto.toString = toString;\n proto.unix = unix;\n proto.valueOf = valueOf;\n proto.creationData = creationData;\n proto.eraName = getEraName;\n proto.eraNarrow = getEraNarrow;\n proto.eraAbbr = getEraAbbr;\n proto.eraYear = getEraYear;\n proto.year = getSetYear;\n proto.isLeapYear = getIsLeapYear;\n proto.weekYear = getSetWeekYear;\n proto.isoWeekYear = getSetISOWeekYear;\n proto.quarter = proto.quarters = getSetQuarter;\n proto.month = getSetMonth;\n proto.daysInMonth = getDaysInMonth;\n proto.week = proto.weeks = getSetWeek;\n proto.isoWeek = proto.isoWeeks = getSetISOWeek;\n proto.weeksInYear = getWeeksInYear;\n proto.weeksInWeekYear = getWeeksInWeekYear;\n proto.isoWeeksInYear = getISOWeeksInYear;\n proto.isoWeeksInISOWeekYear = getISOWeeksInISOWeekYear;\n proto.date = getSetDayOfMonth;\n proto.day = proto.days = getSetDayOfWeek;\n proto.weekday = getSetLocaleDayOfWeek;\n proto.isoWeekday = getSetISODayOfWeek;\n proto.dayOfYear = getSetDayOfYear;\n proto.hour = proto.hours = getSetHour;\n proto.minute = proto.minutes = getSetMinute;\n proto.second = proto.seconds = getSetSecond;\n proto.millisecond = proto.milliseconds = getSetMillisecond;\n proto.utcOffset = getSetOffset;\n proto.utc = setOffsetToUTC;\n proto.local = setOffsetToLocal;\n proto.parseZone = setOffsetToParsedOffset;\n proto.hasAlignedHourOffset = hasAlignedHourOffset;\n proto.isDST = isDaylightSavingTime;\n proto.isLocal = isLocal;\n proto.isUtcOffset = isUtcOffset;\n proto.isUtc = isUtc;\n proto.isUTC = isUtc;\n proto.zoneAbbr = getZoneAbbr;\n proto.zoneName = getZoneName;\n proto.dates = deprecate(\n 'dates accessor is deprecated. Use date instead.',\n getSetDayOfMonth\n );\n proto.months = deprecate(\n 'months accessor is deprecated. Use month instead',\n getSetMonth\n );\n proto.years = deprecate(\n 'years accessor is deprecated. Use year instead',\n getSetYear\n );\n proto.zone = deprecate(\n 'moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/',\n getSetZone\n );\n proto.isDSTShifted = deprecate(\n 'isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information',\n isDaylightSavingTimeShifted\n );\n\n function createUnix(input) {\n return createLocal(input * 1000);\n }\n\n function createInZone() {\n return createLocal.apply(null, arguments).parseZone();\n }\n\n function preParsePostFormat(string) {\n return string;\n }\n\n var proto$1 = Locale.prototype;\n\n proto$1.calendar = calendar;\n proto$1.longDateFormat = longDateFormat;\n proto$1.invalidDate = invalidDate;\n proto$1.ordinal = ordinal;\n proto$1.preparse = preParsePostFormat;\n proto$1.postformat = preParsePostFormat;\n proto$1.relativeTime = relativeTime;\n proto$1.pastFuture = pastFuture;\n proto$1.set = set;\n proto$1.eras = localeEras;\n proto$1.erasParse = localeErasParse;\n proto$1.erasConvertYear = localeErasConvertYear;\n proto$1.erasAbbrRegex = erasAbbrRegex;\n proto$1.erasNameRegex = erasNameRegex;\n proto$1.erasNarrowRegex = erasNarrowRegex;\n\n proto$1.months = localeMonths;\n proto$1.monthsShort = localeMonthsShort;\n proto$1.monthsParse = localeMonthsParse;\n proto$1.monthsRegex = monthsRegex;\n proto$1.monthsShortRegex = monthsShortRegex;\n proto$1.week = localeWeek;\n proto$1.firstDayOfYear = localeFirstDayOfYear;\n proto$1.firstDayOfWeek = localeFirstDayOfWeek;\n\n proto$1.weekdays = localeWeekdays;\n proto$1.weekdaysMin = localeWeekdaysMin;\n proto$1.weekdaysShort = localeWeekdaysShort;\n proto$1.weekdaysParse = localeWeekdaysParse;\n\n proto$1.weekdaysRegex = weekdaysRegex;\n proto$1.weekdaysShortRegex = weekdaysShortRegex;\n proto$1.weekdaysMinRegex = weekdaysMinRegex;\n\n proto$1.isPM = localeIsPM;\n proto$1.meridiem = localeMeridiem;\n\n function get$1(format, index, field, setter) {\n var locale = getLocale(),\n utc = createUTC().set(setter, index);\n return locale[field](utc, format);\n }\n\n function listMonthsImpl(format, index, field) {\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n\n if (index != null) {\n return get$1(format, index, field, 'month');\n }\n\n var i,\n out = [];\n for (i = 0; i < 12; i++) {\n out[i] = get$1(format, i, field, 'month');\n }\n return out;\n }\n\n // ()\n // (5)\n // (fmt, 5)\n // (fmt)\n // (true)\n // (true, 5)\n // (true, fmt, 5)\n // (true, fmt)\n function listWeekdaysImpl(localeSorted, format, index, field) {\n if (typeof localeSorted === 'boolean') {\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n } else {\n format = localeSorted;\n index = format;\n localeSorted = false;\n\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n }\n\n var locale = getLocale(),\n shift = localeSorted ? locale._week.dow : 0,\n i,\n out = [];\n\n if (index != null) {\n return get$1(format, (index + shift) % 7, field, 'day');\n }\n\n for (i = 0; i < 7; i++) {\n out[i] = get$1(format, (i + shift) % 7, field, 'day');\n }\n return out;\n }\n\n function listMonths(format, index) {\n return listMonthsImpl(format, index, 'months');\n }\n\n function listMonthsShort(format, index) {\n return listMonthsImpl(format, index, 'monthsShort');\n }\n\n function listWeekdays(localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdays');\n }\n\n function listWeekdaysShort(localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');\n }\n\n function listWeekdaysMin(localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');\n }\n\n getSetGlobalLocale('en', {\n eras: [\n {\n since: '0001-01-01',\n until: +Infinity,\n offset: 1,\n name: 'Anno Domini',\n narrow: 'AD',\n abbr: 'AD',\n },\n {\n since: '0000-12-31',\n until: -Infinity,\n offset: 1,\n name: 'Before Christ',\n narrow: 'BC',\n abbr: 'BC',\n },\n ],\n dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n ordinal: function (number) {\n var b = number % 10,\n output =\n toInt((number % 100) / 10) === 1\n ? 'th'\n : b === 1\n ? 'st'\n : b === 2\n ? 'nd'\n : b === 3\n ? 'rd'\n : 'th';\n return number + output;\n },\n });\n\n // Side effect imports\n\n hooks.lang = deprecate(\n 'moment.lang is deprecated. Use moment.locale instead.',\n getSetGlobalLocale\n );\n hooks.langData = deprecate(\n 'moment.langData is deprecated. Use moment.localeData instead.',\n getLocale\n );\n\n var mathAbs = Math.abs;\n\n function abs() {\n var data = this._data;\n\n this._milliseconds = mathAbs(this._milliseconds);\n this._days = mathAbs(this._days);\n this._months = mathAbs(this._months);\n\n data.milliseconds = mathAbs(data.milliseconds);\n data.seconds = mathAbs(data.seconds);\n data.minutes = mathAbs(data.minutes);\n data.hours = mathAbs(data.hours);\n data.months = mathAbs(data.months);\n data.years = mathAbs(data.years);\n\n return this;\n }\n\n function addSubtract$1(duration, input, value, direction) {\n var other = createDuration(input, value);\n\n duration._milliseconds += direction * other._milliseconds;\n duration._days += direction * other._days;\n duration._months += direction * other._months;\n\n return duration._bubble();\n }\n\n // supports only 2.0-style add(1, 's') or add(duration)\n function add$1(input, value) {\n return addSubtract$1(this, input, value, 1);\n }\n\n // supports only 2.0-style subtract(1, 's') or subtract(duration)\n function subtract$1(input, value) {\n return addSubtract$1(this, input, value, -1);\n }\n\n function absCeil(number) {\n if (number < 0) {\n return Math.floor(number);\n } else {\n return Math.ceil(number);\n }\n }\n\n function bubble() {\n var milliseconds = this._milliseconds,\n days = this._days,\n months = this._months,\n data = this._data,\n seconds,\n minutes,\n hours,\n years,\n monthsFromDays;\n\n // if we have a mix of positive and negative values, bubble down first\n // check: https://github.com/moment/moment/issues/2166\n if (\n !(\n (milliseconds >= 0 && days >= 0 && months >= 0) ||\n (milliseconds <= 0 && days <= 0 && months <= 0)\n )\n ) {\n milliseconds += absCeil(monthsToDays(months) + days) * 864e5;\n days = 0;\n months = 0;\n }\n\n // The following code bubbles up values, see the tests for\n // examples of what that means.\n data.milliseconds = milliseconds % 1000;\n\n seconds = absFloor(milliseconds / 1000);\n data.seconds = seconds % 60;\n\n minutes = absFloor(seconds / 60);\n data.minutes = minutes % 60;\n\n hours = absFloor(minutes / 60);\n data.hours = hours % 24;\n\n days += absFloor(hours / 24);\n\n // convert days to months\n monthsFromDays = absFloor(daysToMonths(days));\n months += monthsFromDays;\n days -= absCeil(monthsToDays(monthsFromDays));\n\n // 12 months -> 1 year\n years = absFloor(months / 12);\n months %= 12;\n\n data.days = days;\n data.months = months;\n data.years = years;\n\n return this;\n }\n\n function daysToMonths(days) {\n // 400 years have 146097 days (taking into account leap year rules)\n // 400 years have 12 months === 4800\n return (days * 4800) / 146097;\n }\n\n function monthsToDays(months) {\n // the reverse of daysToMonths\n return (months * 146097) / 4800;\n }\n\n function as(units) {\n if (!this.isValid()) {\n return NaN;\n }\n var days,\n months,\n milliseconds = this._milliseconds;\n\n units = normalizeUnits(units);\n\n if (units === 'month' || units === 'quarter' || units === 'year') {\n days = this._days + milliseconds / 864e5;\n months = this._months + daysToMonths(days);\n switch (units) {\n case 'month':\n return months;\n case 'quarter':\n return months / 3;\n case 'year':\n return months / 12;\n }\n } else {\n // handle milliseconds separately because of floating point math errors (issue #1867)\n days = this._days + Math.round(monthsToDays(this._months));\n switch (units) {\n case 'week':\n return days / 7 + milliseconds / 6048e5;\n case 'day':\n return days + milliseconds / 864e5;\n case 'hour':\n return days * 24 + milliseconds / 36e5;\n case 'minute':\n return days * 1440 + milliseconds / 6e4;\n case 'second':\n return days * 86400 + milliseconds / 1000;\n // Math.floor prevents floating point math errors here\n case 'millisecond':\n return Math.floor(days * 864e5) + milliseconds;\n default:\n throw new Error('Unknown unit ' + units);\n }\n }\n }\n\n function makeAs(alias) {\n return function () {\n return this.as(alias);\n };\n }\n\n var asMilliseconds = makeAs('ms'),\n asSeconds = makeAs('s'),\n asMinutes = makeAs('m'),\n asHours = makeAs('h'),\n asDays = makeAs('d'),\n asWeeks = makeAs('w'),\n asMonths = makeAs('M'),\n asQuarters = makeAs('Q'),\n asYears = makeAs('y'),\n valueOf$1 = asMilliseconds;\n\n function clone$1() {\n return createDuration(this);\n }\n\n function get$2(units) {\n units = normalizeUnits(units);\n return this.isValid() ? this[units + 's']() : NaN;\n }\n\n function makeGetter(name) {\n return function () {\n return this.isValid() ? this._data[name] : NaN;\n };\n }\n\n var milliseconds = makeGetter('milliseconds'),\n seconds = makeGetter('seconds'),\n minutes = makeGetter('minutes'),\n hours = makeGetter('hours'),\n days = makeGetter('days'),\n months = makeGetter('months'),\n years = makeGetter('years');\n\n function weeks() {\n return absFloor(this.days() / 7);\n }\n\n var round = Math.round,\n thresholds = {\n ss: 44, // a few seconds to seconds\n s: 45, // seconds to minute\n m: 45, // minutes to hour\n h: 22, // hours to day\n d: 26, // days to month/week\n w: null, // weeks to month\n M: 11, // months to year\n };\n\n // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize\n function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {\n return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);\n }\n\n function relativeTime$1(posNegDuration, withoutSuffix, thresholds, locale) {\n var duration = createDuration(posNegDuration).abs(),\n seconds = round(duration.as('s')),\n minutes = round(duration.as('m')),\n hours = round(duration.as('h')),\n days = round(duration.as('d')),\n months = round(duration.as('M')),\n weeks = round(duration.as('w')),\n years = round(duration.as('y')),\n a =\n (seconds <= thresholds.ss && ['s', seconds]) ||\n (seconds < thresholds.s && ['ss', seconds]) ||\n (minutes <= 1 && ['m']) ||\n (minutes < thresholds.m && ['mm', minutes]) ||\n (hours <= 1 && ['h']) ||\n (hours < thresholds.h && ['hh', hours]) ||\n (days <= 1 && ['d']) ||\n (days < thresholds.d && ['dd', days]);\n\n if (thresholds.w != null) {\n a =\n a ||\n (weeks <= 1 && ['w']) ||\n (weeks < thresholds.w && ['ww', weeks]);\n }\n a = a ||\n (months <= 1 && ['M']) ||\n (months < thresholds.M && ['MM', months]) ||\n (years <= 1 && ['y']) || ['yy', years];\n\n a[2] = withoutSuffix;\n a[3] = +posNegDuration > 0;\n a[4] = locale;\n return substituteTimeAgo.apply(null, a);\n }\n\n // This function allows you to set the rounding function for relative time strings\n function getSetRelativeTimeRounding(roundingFunction) {\n if (roundingFunction === undefined) {\n return round;\n }\n if (typeof roundingFunction === 'function') {\n round = roundingFunction;\n return true;\n }\n return false;\n }\n\n // This function allows you to set a threshold for relative time strings\n function getSetRelativeTimeThreshold(threshold, limit) {\n if (thresholds[threshold] === undefined) {\n return false;\n }\n if (limit === undefined) {\n return thresholds[threshold];\n }\n thresholds[threshold] = limit;\n if (threshold === 's') {\n thresholds.ss = limit - 1;\n }\n return true;\n }\n\n function humanize(argWithSuffix, argThresholds) {\n if (!this.isValid()) {\n return this.localeData().invalidDate();\n }\n\n var withSuffix = false,\n th = thresholds,\n locale,\n output;\n\n if (typeof argWithSuffix === 'object') {\n argThresholds = argWithSuffix;\n argWithSuffix = false;\n }\n if (typeof argWithSuffix === 'boolean') {\n withSuffix = argWithSuffix;\n }\n if (typeof argThresholds === 'object') {\n th = Object.assign({}, thresholds, argThresholds);\n if (argThresholds.s != null && argThresholds.ss == null) {\n th.ss = argThresholds.s - 1;\n }\n }\n\n locale = this.localeData();\n output = relativeTime$1(this, !withSuffix, th, locale);\n\n if (withSuffix) {\n output = locale.pastFuture(+this, output);\n }\n\n return locale.postformat(output);\n }\n\n var abs$1 = Math.abs;\n\n function sign(x) {\n return (x > 0) - (x < 0) || +x;\n }\n\n function toISOString$1() {\n // for ISO strings we do not use the normal bubbling rules:\n // * milliseconds bubble up until they become hours\n // * days do not bubble at all\n // * months bubble up until they become years\n // This is because there is no context-free conversion between hours and days\n // (think of clock changes)\n // and also not between days and months (28-31 days per month)\n if (!this.isValid()) {\n return this.localeData().invalidDate();\n }\n\n var seconds = abs$1(this._milliseconds) / 1000,\n days = abs$1(this._days),\n months = abs$1(this._months),\n minutes,\n hours,\n years,\n s,\n total = this.asSeconds(),\n totalSign,\n ymSign,\n daysSign,\n hmsSign;\n\n if (!total) {\n // this is the same as C#'s (Noda) and python (isodate)...\n // but not other JS (goog.date)\n return 'P0D';\n }\n\n // 3600 seconds -> 60 minutes -> 1 hour\n minutes = absFloor(seconds / 60);\n hours = absFloor(minutes / 60);\n seconds %= 60;\n minutes %= 60;\n\n // 12 months -> 1 year\n years = absFloor(months / 12);\n months %= 12;\n\n // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js\n s = seconds ? seconds.toFixed(3).replace(/\\.?0+$/, '') : '';\n\n totalSign = total < 0 ? '-' : '';\n ymSign = sign(this._months) !== sign(total) ? '-' : '';\n daysSign = sign(this._days) !== sign(total) ? '-' : '';\n hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : '';\n\n return (\n totalSign +\n 'P' +\n (years ? ymSign + years + 'Y' : '') +\n (months ? ymSign + months + 'M' : '') +\n (days ? daysSign + days + 'D' : '') +\n (hours || minutes || seconds ? 'T' : '') +\n (hours ? hmsSign + hours + 'H' : '') +\n (minutes ? hmsSign + minutes + 'M' : '') +\n (seconds ? hmsSign + s + 'S' : '')\n );\n }\n\n var proto$2 = Duration.prototype;\n\n proto$2.isValid = isValid$1;\n proto$2.abs = abs;\n proto$2.add = add$1;\n proto$2.subtract = subtract$1;\n proto$2.as = as;\n proto$2.asMilliseconds = asMilliseconds;\n proto$2.asSeconds = asSeconds;\n proto$2.asMinutes = asMinutes;\n proto$2.asHours = asHours;\n proto$2.asDays = asDays;\n proto$2.asWeeks = asWeeks;\n proto$2.asMonths = asMonths;\n proto$2.asQuarters = asQuarters;\n proto$2.asYears = asYears;\n proto$2.valueOf = valueOf$1;\n proto$2._bubble = bubble;\n proto$2.clone = clone$1;\n proto$2.get = get$2;\n proto$2.milliseconds = milliseconds;\n proto$2.seconds = seconds;\n proto$2.minutes = minutes;\n proto$2.hours = hours;\n proto$2.days = days;\n proto$2.weeks = weeks;\n proto$2.months = months;\n proto$2.years = years;\n proto$2.humanize = humanize;\n proto$2.toISOString = toISOString$1;\n proto$2.toString = toISOString$1;\n proto$2.toJSON = toISOString$1;\n proto$2.locale = locale;\n proto$2.localeData = localeData;\n\n proto$2.toIsoString = deprecate(\n 'toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)',\n toISOString$1\n );\n proto$2.lang = lang;\n\n // FORMATTING\n\n addFormatToken('X', 0, 0, 'unix');\n addFormatToken('x', 0, 0, 'valueOf');\n\n // PARSING\n\n addRegexToken('x', matchSigned);\n addRegexToken('X', matchTimestamp);\n addParseToken('X', function (input, array, config) {\n config._d = new Date(parseFloat(input) * 1000);\n });\n addParseToken('x', function (input, array, config) {\n config._d = new Date(toInt(input));\n });\n\n //! moment.js\n\n hooks.version = '2.30.1';\n\n setHookCallback(createLocal);\n\n hooks.fn = proto;\n hooks.min = min;\n hooks.max = max;\n hooks.now = now;\n hooks.utc = createUTC;\n hooks.unix = createUnix;\n hooks.months = listMonths;\n hooks.isDate = isDate;\n hooks.locale = getSetGlobalLocale;\n hooks.invalid = createInvalid;\n hooks.duration = createDuration;\n hooks.isMoment = isMoment;\n hooks.weekdays = listWeekdays;\n hooks.parseZone = createInZone;\n hooks.localeData = getLocale;\n hooks.isDuration = isDuration;\n hooks.monthsShort = listMonthsShort;\n hooks.weekdaysMin = listWeekdaysMin;\n hooks.defineLocale = defineLocale;\n hooks.updateLocale = updateLocale;\n hooks.locales = listLocales;\n hooks.weekdaysShort = listWeekdaysShort;\n hooks.normalizeUnits = normalizeUnits;\n hooks.relativeTimeRounding = getSetRelativeTimeRounding;\n hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;\n hooks.calendarFormat = getCalendarFormat;\n hooks.prototype = proto;\n\n // currently HTML5 input type only supports 24-hour formats\n hooks.HTML5_FMT = {\n DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm', // \n DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss', // \n DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS', // \n DATE: 'YYYY-MM-DD', // \n TIME: 'HH:mm', // \n TIME_SECONDS: 'HH:mm:ss', // \n TIME_MS: 'HH:mm:ss.SSS', // \n WEEK: 'GGGG-[W]WW', // \n MONTH: 'YYYY-MM', // \n };\n\n return hooks;\n\n})));\n","/**\n * Dutch translation for bootstrap-datepicker\n * Reinier Goltstein \n */\nexport default {\n nl: {\n days: [\"zondag\", \"maandag\", \"dinsdag\", \"woensdag\", \"donderdag\", \"vrijdag\", \"zaterdag\"],\n daysShort: [\"zo\", \"ma\", \"di\", \"wo\", \"do\", \"vr\", \"za\"],\n daysMin: [\"zo\", \"ma\", \"di\", \"wo\", \"do\", \"vr\", \"za\"],\n months: [\"januari\", \"februari\", \"maart\", \"april\", \"mei\", \"juni\", \"juli\", \"augustus\", \"september\", \"oktober\", \"november\", \"december\"],\n monthsShort: [\"jan\", \"feb\", \"mrt\", \"apr\", \"mei\", \"jun\", \"jul\", \"aug\", \"sep\", \"okt\", \"nov\", \"dec\"],\n today: \"Vandaag\",\n monthsTitle: \"Maanden\",\n clear: \"Wissen\",\n weekStart: 1,\n format: \"dd-mm-yyyy\"\n }\n};\n","export function stripTime(timeValue) {\n return new Date(timeValue).setHours(0, 0, 0, 0);\n}\n\nexport function today() {\n return new Date().setHours(0, 0, 0, 0);\n}\n\n// Get the time value of the start of given date or year, month and day\nexport function dateValue(...args) {\n switch (args.length) {\n case 0:\n return today();\n case 1:\n return stripTime(args[0]);\n }\n\n // use setFullYear() to keep 2-digit year from being mapped to 1900-1999\n const newDate = new Date(0);\n newDate.setFullYear(...args);\n return newDate.setHours(0, 0, 0, 0);\n}\n\nexport function addDays(date, amount) {\n const newDate = new Date(date);\n return newDate.setDate(newDate.getDate() + amount);\n}\n\nexport function addWeeks(date, amount) {\n return addDays(date, amount * 7);\n}\n\nexport function addMonths(date, amount) {\n // If the day of the date is not in the new month, the last day of the new\n // month will be returned. e.g. Jan 31 + 1 month → Feb 28 (not Mar 03)\n const newDate = new Date(date);\n const monthsToSet = newDate.getMonth() + amount;\n let expectedMonth = monthsToSet % 12;\n if (expectedMonth < 0) {\n expectedMonth += 12;\n }\n\n const time = newDate.setMonth(monthsToSet);\n return newDate.getMonth() !== expectedMonth ? newDate.setDate(0) : time;\n}\n\nexport function addYears(date, amount) {\n // If the date is Feb 29 and the new year is not a leap year, Feb 28 of the\n // new year will be returned.\n const newDate = new Date(date);\n const expectedMonth = newDate.getMonth();\n const time = newDate.setFullYear(newDate.getFullYear() + amount);\n return expectedMonth === 1 && newDate.getMonth() === 2 ? newDate.setDate(0) : time;\n}\n\n// Calculate the distance bettwen 2 days of the week\nfunction dayDiff(day, from) {\n return (day - from + 7) % 7;\n}\n\n// Get the date of the specified day of the week of given base date\nexport function dayOfTheWeekOf(baseDate, dayOfWeek, weekStart = 0) {\n const baseDay = new Date(baseDate).getDay();\n return addDays(baseDate, dayDiff(dayOfWeek, weekStart) - dayDiff(baseDay, weekStart));\n}\n\nfunction calcWeekNum(dayOfTheWeek, sameDayOfFirstWeek) {\n return Math.round((dayOfTheWeek - sameDayOfFirstWeek) / 604800000) + 1;\n}\n\n// Get the ISO week number of a date\nexport function getIsoWeek(date) {\n // - Start of ISO week is Monday\n // - Use Thursday for culculation because the first Thursday of ISO week is\n // always in January\n const thuOfTheWeek = dayOfTheWeekOf(date, 4, 1);\n // - Week 1 in ISO week is the week including Jan 04\n // - Use the Thu of given date's week (instead of given date itself) to\n // calculate week 1 of the year so that Jan 01 - 03 won't be miscalculated\n // as week 0 when Jan 04 is Mon - Wed\n const firstThu = dayOfTheWeekOf(new Date(thuOfTheWeek).setMonth(0, 4), 4, 1);\n // return Math.round((thuOfTheWeek - firstThu) / 604800000) + 1;\n return calcWeekNum(thuOfTheWeek, firstThu);\n}\n\n// Calculate week number in traditional week number system\n// @see https://en.wikipedia.org/wiki/Week#Other_week_numbering_systems\nfunction calcTraditionalWeekNumber(date, weekStart) {\n // - Week 1 of traditional week is the week including the Jan 01\n // - Use Jan 01 of given date's year to calculate the start of week 1\n const startOfFirstWeek = dayOfTheWeekOf(new Date(date).setMonth(0, 1), weekStart, weekStart);\n const startOfTheWeek = dayOfTheWeekOf(date, weekStart, weekStart);\n const weekNum = calcWeekNum(startOfTheWeek, startOfFirstWeek);\n if (weekNum < 53) {\n return weekNum;\n }\n // If the 53rd week includes Jan 01, it's actually next year's week 1\n const weekOneOfNextYear = dayOfTheWeekOf(new Date(date).setDate(32), weekStart, weekStart);\n return startOfTheWeek === weekOneOfNextYear ? 1 : weekNum;\n}\n\n// Get the Western traditional week number of a date\nexport function getWesternTradWeek(date) {\n // Start of Western traditionl week is Sunday\n return calcTraditionalWeekNumber(date, 0);\n}\n\n// Get the Middle Eastern week number of a date\nexport function getMidEasternWeek(date) {\n // Start of Middle Eastern week is Saturday\n return calcTraditionalWeekNumber(date, 6);\n}\n\n// Get the start year of the period of years that includes given date\n// years: length of the year period\nexport function startOfYearPeriod(date, years) {\n /* @see https://en.wikipedia.org/wiki/Year_zero#ISO_8601 */\n const year = new Date(date).getFullYear();\n return Math.floor(year / years) * years;\n}\n\n// Convert date to the first/last date of the month/year of the date\nexport function regularizeDate(date, timeSpan, useLastDate) {\n if (timeSpan !== 1 && timeSpan !== 2) {\n return date;\n }\n const newDate = new Date(date);\n if (timeSpan === 1) {\n useLastDate\n ? newDate.setMonth(newDate.getMonth() + 1, 0)\n : newDate.setDate(1);\n } else {\n useLastDate\n ? newDate.setFullYear(newDate.getFullYear() + 1, 0, 0)\n : newDate.setMonth(0, 1);\n }\n return newDate.setHours(0, 0, 0, 0);\n}\n","export function lastItemOf(arr) {\n return arr[arr.length - 1];\n}\n\n// push only the items not included in the array\nexport function pushUnique(arr, ...items) {\n items.forEach((item) => {\n if (arr.includes(item)) {\n return;\n }\n arr.push(item);\n });\n return arr;\n}\n\nexport function stringToArray(str, separator) {\n // convert empty string to an empty array\n return str ? str.split(separator) : [];\n}\n\nexport function isInRange(testVal, min, max) {\n const minOK = min === undefined || testVal >= min;\n const maxOK = max === undefined || testVal <= max;\n return minOK && maxOK;\n}\n\nexport function limitToRange(val, min, max) {\n if (val < min) {\n return min;\n }\n if (val > max) {\n return max;\n }\n return val;\n}\n\nexport function createTagRepeat(tagName, repeat, attributes = {}, index = 0, html = '') {\n const openTagSrc = Object.keys(attributes).reduce((src, attr) => {\n let val = attributes[attr];\n if (typeof val === 'function') {\n val = val(index);\n }\n return `${src} ${attr}=\"${val}\"`;\n }, tagName);\n html += `<${openTagSrc}>${tagName}>`;\n\n const next = index + 1;\n return next < repeat\n ? createTagRepeat(tagName, repeat, attributes, next, html)\n : html;\n}\n\n// Remove the spacing surrounding tags for HTML parser not to create text nodes\n// before/after elements\nexport function optimizeTemplateHTML(html) {\n return html.replace(/>\\s+/g, '>').replace(/\\s+, '<');\n}\n","import {stripTime, today} from './date.js';\nimport {lastItemOf} from './utils.js';\n\n// pattern for format parts\nexport const reFormatTokens = /dd?|DD?|mm?|MM?|yy?(?:yy)?/;\n// pattern for non date parts\nexport const reNonDateParts = /[\\s!-/:-@[-`{-~年月日]+/;\n// cache for persed formats\nlet knownFormats = {};\n// parse funtions for date parts\nconst parseFns = {\n y(date, year) {\n return new Date(date).setFullYear(parseInt(year, 10));\n },\n m(date, month, locale) {\n const newDate = new Date(date);\n let monthIndex = parseInt(month, 10) - 1;\n\n if (isNaN(monthIndex)) {\n if (!month) {\n return NaN;\n }\n\n const monthName = month.toLowerCase();\n const compareNames = name => name.toLowerCase().startsWith(monthName);\n // compare with both short and full names because some locales have periods\n // in the short names (not equal to the first X letters of the full names)\n monthIndex = locale.monthsShort.findIndex(compareNames);\n if (monthIndex < 0) {\n monthIndex = locale.months.findIndex(compareNames);\n }\n if (monthIndex < 0) {\n return NaN;\n }\n }\n\n newDate.setMonth(monthIndex);\n return newDate.getMonth() !== normalizeMonth(monthIndex)\n ? newDate.setDate(0)\n : newDate.getTime();\n },\n d(date, day) {\n return new Date(date).setDate(parseInt(day, 10));\n },\n};\n// format functions for date parts\nconst formatFns = {\n d(date) {\n return date.getDate();\n },\n dd(date) {\n return padZero(date.getDate(), 2);\n },\n D(date, locale) {\n return locale.daysShort[date.getDay()];\n },\n DD(date, locale) {\n return locale.days[date.getDay()];\n },\n m(date) {\n return date.getMonth() + 1;\n },\n mm(date) {\n return padZero(date.getMonth() + 1, 2);\n },\n M(date, locale) {\n return locale.monthsShort[date.getMonth()];\n },\n MM(date, locale) {\n return locale.months[date.getMonth()];\n },\n y(date) {\n return date.getFullYear();\n },\n yy(date) {\n return padZero(date.getFullYear(), 2).slice(-2);\n },\n yyyy(date) {\n return padZero(date.getFullYear(), 4);\n },\n};\n\n// get month index in normal range (0 - 11) from any number\nfunction normalizeMonth(monthIndex) {\n return monthIndex > -1 ? monthIndex % 12 : normalizeMonth(monthIndex + 12);\n}\n\nfunction padZero(num, length) {\n return num.toString().padStart(length, '0');\n}\n\nfunction parseFormatString(format) {\n if (typeof format !== 'string') {\n throw new Error(\"Invalid date format.\");\n }\n if (format in knownFormats) {\n return knownFormats[format];\n }\n\n // sprit the format string into parts and seprators\n const separators = format.split(reFormatTokens);\n const parts = format.match(new RegExp(reFormatTokens, 'g'));\n if (separators.length === 0 || !parts) {\n throw new Error(\"Invalid date format.\");\n }\n\n // collect format functions used in the format\n const partFormatters = parts.map(token => formatFns[token]);\n\n // collect parse function keys used in the format\n // iterate over parseFns' keys in order to keep the order of the keys.\n const partParserKeys = Object.keys(parseFns).reduce((keys, key) => {\n const token = parts.find(part => part[0] !== 'D' && part[0].toLowerCase() === key);\n if (token) {\n keys.push(key);\n }\n return keys;\n }, []);\n\n return knownFormats[format] = {\n parser(dateStr, locale) {\n const dateParts = dateStr.split(reNonDateParts).reduce((dtParts, part, index) => {\n if (part.length > 0 && parts[index]) {\n const token = parts[index][0];\n if (token === 'M') {\n dtParts.m = part;\n } else if (token !== 'D') {\n dtParts[token] = part;\n }\n }\n return dtParts;\n }, {});\n\n // iterate over partParserkeys so that the parsing is made in the oder\n // of year, month and day to prevent the day parser from correcting last\n // day of month wrongly\n return partParserKeys.reduce((origDate, key) => {\n const newDate = parseFns[key](origDate, dateParts[key], locale);\n // ingnore the part failed to parse\n return isNaN(newDate) ? origDate : newDate;\n }, today());\n },\n formatter(date, locale) {\n let dateStr = partFormatters.reduce((str, fn, index) => {\n return str += `${separators[index]}${fn(date, locale)}`;\n }, '');\n // separators' length is always parts' length + 1,\n return dateStr += lastItemOf(separators);\n },\n };\n}\n\nexport function parseDate(dateStr, format, locale) {\n if (dateStr instanceof Date || typeof dateStr === 'number') {\n const date = stripTime(dateStr);\n return isNaN(date) ? undefined : date;\n }\n if (!dateStr) {\n return undefined;\n }\n if (dateStr === 'today') {\n return today();\n }\n\n if (format && format.toValue) {\n const date = format.toValue(dateStr, format, locale);\n return isNaN(date) ? undefined : stripTime(date);\n }\n\n return parseFormatString(format).parser(dateStr, locale);\n}\n\nexport function formatDate(date, format, locale) {\n if (isNaN(date) || (!date && date !== 0)) {\n return '';\n }\n\n const dateObj = typeof date === 'number' ? new Date(date) : date;\n\n if (format.toDisplay) {\n return format.toDisplay(dateObj, format, locale);\n }\n\n return parseFormatString(format).formatter(dateObj, locale);\n}\n","const range = document.createRange();\n\nexport function parseHTML(html) {\n return range.createContextualFragment(html);\n}\n\nexport function getParent(el) {\n return el.parentElement\n || (el.parentNode instanceof ShadowRoot ? el.parentNode.host : undefined);\n}\n\nexport function isActiveElement(el) {\n return el.getRootNode().activeElement === el;\n}\n\n// equivalent to jQuery's :visble\nexport function isVisible(el) {\n return !!(el.offsetWidth || el.offsetHeight || el.getClientRects().length);\n}\n\nexport function hideElement(el) {\n if (el.style.display === 'none') {\n return;\n }\n // back up the existing display setting in data-style-display\n if (el.style.display) {\n el.dataset.styleDisplay = el.style.display;\n }\n el.style.display = 'none';\n}\n\nexport function showElement(el) {\n if (el.style.display !== 'none') {\n return;\n }\n if (el.dataset.styleDisplay) {\n // restore backed-up dispay property\n el.style.display = el.dataset.styleDisplay;\n delete el.dataset.styleDisplay;\n } else {\n el.style.display = '';\n }\n}\n\nexport function emptyChildNodes(el) {\n if (el.firstChild) {\n el.removeChild(el.firstChild);\n emptyChildNodes(el);\n }\n}\n\nexport function replaceChildNodes(el, newChildNodes) {\n emptyChildNodes(el);\n if (newChildNodes instanceof DocumentFragment) {\n el.appendChild(newChildNodes);\n } else if (typeof newChildNodes === 'string') {\n el.appendChild(parseHTML(newChildNodes));\n } else if (typeof newChildNodes.forEach === 'function') {\n newChildNodes.forEach((node) => {\n el.appendChild(node);\n });\n }\n}\n","const listenerRegistry = new WeakMap();\nconst {addEventListener, removeEventListener} = EventTarget.prototype;\n\n// Register event listeners to a key object\n// listeners: array of listener definitions;\n// - each definition must be a flat array of event target and the arguments\n// used to call addEventListener() on the target\nexport function registerListeners(keyObj, listeners) {\n let registered = listenerRegistry.get(keyObj);\n if (!registered) {\n registered = [];\n listenerRegistry.set(keyObj, registered);\n }\n listeners.forEach((listener) => {\n addEventListener.call(...listener);\n registered.push(listener);\n });\n}\n\nexport function unregisterListeners(keyObj) {\n let listeners = listenerRegistry.get(keyObj);\n if (!listeners) {\n return;\n }\n listeners.forEach((listener) => {\n removeEventListener.call(...listener);\n });\n listenerRegistry.delete(keyObj);\n}\n\n// Event.composedPath() polyfill for Edge\n// based on https://gist.github.com/kleinfreund/e9787d73776c0e3750dcfcdc89f100ec\nif (!Event.prototype.composedPath) {\n const getComposedPath = (node, path = []) => {\n path.push(node);\n\n let parent;\n if (node.parentNode) {\n parent = node.parentNode;\n } else if (node.host) { // ShadowRoot\n parent = node.host;\n } else if (node.defaultView) { // Document\n parent = node.defaultView;\n }\n return parent ? getComposedPath(parent, path) : path;\n };\n\n Event.prototype.composedPath = function () {\n return getComposedPath(this.target);\n };\n}\n\nfunction findFromPath(path, criteria, currentTarget) {\n const [node, ...rest] = path;\n if (criteria(node)) {\n return node;\n }\n if (node === currentTarget || node.tagName === 'HTML' || rest.length === 0) {\n // stop when reaching currentTarget or \n return;\n }\n return findFromPath(rest, criteria, currentTarget);\n}\n\n// Search for the actual target of a delegated event\nexport function findElementInEventPath(ev, selector) {\n const criteria = typeof selector === 'function'\n ? selector\n : el => el instanceof Element && el.matches(selector);\n return findFromPath(ev.composedPath(), criteria, ev.currentTarget);\n}\n","// default locales\nexport default {\n en: {\n days: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n daysShort: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n daysMin: [\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"],\n months: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n monthsShort: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"],\n today: \"Today\",\n clear: \"Clear\",\n titleFormat: \"MM y\"\n }\n};\n","// config options updatable by setOptions() and their default values\nexport default {\n autohide: false,\n beforeShowDay: null,\n beforeShowDecade: null,\n beforeShowMonth: null,\n beforeShowYear: null,\n clearButton: false,\n dateDelimiter: ',',\n datesDisabled: [],\n daysOfWeekDisabled: [],\n daysOfWeekHighlighted: [],\n defaultViewDate: undefined, // placeholder, defaults to today() by the program\n disableTouchKeyboard: false,\n enableOnReadonly: true,\n format: 'mm/dd/yyyy',\n language: 'en',\n maxDate: null,\n maxNumberOfDates: 1,\n maxView: 3,\n minDate: null,\n nextArrow: '»',\n orientation: 'auto',\n pickLevel: 0,\n prevArrow: '«',\n showDaysOfWeek: true,\n showOnClick: true,\n showOnFocus: true,\n startView: 0,\n title: '',\n todayButton: false,\n todayButtonMode: 0,\n todayHighlight: false,\n updateOnBlur: true,\n weekNumbers: 0,\n weekStart: 0,\n};\n","import {pushUnique} from '../lib/utils.js';\nimport {\n dateValue,\n regularizeDate,\n getIsoWeek,\n getWesternTradWeek,\n getMidEasternWeek,\n} from '../lib/date.js';\nimport {reFormatTokens, parseDate} from '../lib/date-format.js';\nimport {parseHTML} from '../lib/dom.js';\nimport defaultOptions from './defaultOptions.js';\n\nconst {\n language: defaultLang,\n format: defaultFormat,\n weekStart: defaultWeekStart,\n} = defaultOptions;\n\n// Reducer function to filter out invalid day-of-week from the input\nfunction sanitizeDOW(dow, day) {\n return dow.length < 6 && day >= 0 && day < 7\n ? pushUnique(dow, day)\n : dow;\n}\n\nfunction determineGetWeekMethod(numberingMode, weekStart) {\n const methodId = numberingMode === 4\n ? (weekStart === 6 ? 3 : !weekStart + 1)\n : numberingMode;\n switch (methodId) {\n case 1:\n return getIsoWeek;\n case 2:\n return getWesternTradWeek;\n case 3:\n return getMidEasternWeek;\n }\n}\n\nfunction updateWeekStart(newValue, config, weekNumbers) {\n config.weekStart = newValue;\n config.weekEnd = (newValue + 6) % 7;\n if (weekNumbers === 4) {\n config.getWeekNumber = determineGetWeekMethod(4, newValue);\n }\n return newValue;\n}\n\n// validate input date. if invalid, fallback to the original value\nfunction validateDate(value, format, locale, origValue) {\n const date = parseDate(value, format, locale);\n return date !== undefined ? date : origValue;\n}\n\n// Validate viewId. if invalid, fallback to the original value\nfunction validateViewId(value, origValue, max = 3) {\n const viewId = parseInt(value, 10);\n return viewId >= 0 && viewId <= max ? viewId : origValue;\n}\n\nfunction replaceOptions(options, from, to, convert = undefined) {\n if (from in options) {\n if (!(to in options)) {\n options[to] = convert ? convert(options[from]) : options[from];\n }\n delete options[from];\n }\n}\n\n// Create Datepicker configuration to set\nexport default function processOptions(options, datepicker) {\n const inOpts = Object.assign({}, options);\n const config = {};\n const locales = datepicker.constructor.locales;\n const rangeEnd = !!datepicker.rangeSideIndex;\n let {\n datesDisabled,\n format,\n language,\n locale,\n maxDate,\n maxView,\n minDate,\n pickLevel,\n startView,\n weekNumbers,\n weekStart,\n } = datepicker.config || {};\n\n // for backword compatibility\n replaceOptions(inOpts, 'calendarWeeks', 'weekNumbers', val => val ? 1 : 0);\n replaceOptions(inOpts, 'clearBtn', 'clearButton');\n replaceOptions(inOpts, 'todayBtn', 'todayButton');\n replaceOptions(inOpts, 'todayBtnMode', 'todayButtonMode');\n\n if (inOpts.language) {\n let lang;\n if (inOpts.language !== language) {\n if (locales[inOpts.language]) {\n lang = inOpts.language;\n } else {\n // Check if langauge + region tag can fallback to the one without\n // region (e.g. fr-CA → fr)\n lang = inOpts.language.split('-')[0];\n if (!locales[lang]) {\n lang = false;\n }\n }\n }\n delete inOpts.language;\n if (lang) {\n language = config.language = lang;\n\n // update locale as well when updating language\n const origLocale = locale || locales[defaultLang];\n // use default language's properties for the fallback\n locale = Object.assign({\n format: defaultFormat,\n weekStart: defaultWeekStart\n }, locales[defaultLang]);\n if (language !== defaultLang) {\n Object.assign(locale, locales[language]);\n }\n config.locale = locale;\n // if format and/or weekStart are the same as old locale's defaults,\n // update them to new locale's defaults\n if (format === origLocale.format) {\n format = config.format = locale.format;\n }\n if (weekStart === origLocale.weekStart) {\n weekStart = updateWeekStart(locale.weekStart, config, weekNumbers);\n }\n }\n }\n\n if (inOpts.format) {\n const hasToDisplay = typeof inOpts.format.toDisplay === 'function';\n const hasToValue = typeof inOpts.format.toValue === 'function';\n const validFormatString = reFormatTokens.test(inOpts.format);\n if ((hasToDisplay && hasToValue) || validFormatString) {\n format = config.format = inOpts.format;\n }\n delete inOpts.format;\n }\n\n //*** pick level ***//\n let newPickLevel = pickLevel;\n if ('pickLevel' in inOpts) {\n newPickLevel = validateViewId(inOpts.pickLevel, pickLevel, 2);\n delete inOpts.pickLevel;\n }\n if (newPickLevel !== pickLevel) {\n if (newPickLevel > pickLevel) {\n // complement current minDate/madDate so that the existing range will be\n // expanded to fit the new level later\n if (!('minDate' in inOpts)) {\n inOpts.minDate = minDate;\n }\n if (!('maxDate' in inOpts)) {\n inOpts.maxDate = maxDate;\n }\n }\n // complement datesDisabled so that it will be reset later\n if (datesDisabled && !inOpts.datesDisabled) {\n inOpts.datesDisabled = [];\n }\n pickLevel = config.pickLevel = newPickLevel;\n }\n\n //*** dates ***//\n // while min and maxDate for \"no limit\" in the options are better to be null\n // (especially when updating), the ones in the config have to be undefined\n // because null is treated as 0 (= unix epoch) when comparing with time value\n let minDt = minDate;\n let maxDt = maxDate;\n if ('minDate' in inOpts) {\n const defaultMinDt = dateValue(0, 0, 1);\n minDt = inOpts.minDate === null\n ? defaultMinDt // set 0000-01-01 to prevent negative values for year\n : validateDate(inOpts.minDate, format, locale, minDt);\n if (minDt !== defaultMinDt) {\n minDt = regularizeDate(minDt, pickLevel, false);\n }\n delete inOpts.minDate;\n }\n if ('maxDate' in inOpts) {\n maxDt = inOpts.maxDate === null\n ? undefined\n : validateDate(inOpts.maxDate, format, locale, maxDt);\n if (maxDt !== undefined) {\n maxDt = regularizeDate(maxDt, pickLevel, true);\n }\n delete inOpts.maxDate;\n }\n if (maxDt < minDt) {\n minDate = config.minDate = maxDt;\n maxDate = config.maxDate = minDt;\n } else {\n if (minDate !== minDt) {\n minDate = config.minDate = minDt;\n }\n if (maxDate !== maxDt) {\n maxDate = config.maxDate = maxDt;\n }\n }\n\n if (inOpts.datesDisabled) {\n const dtsDisabled = inOpts.datesDisabled;\n if (typeof dtsDisabled === 'function') {\n config.datesDisabled = null;\n config.checkDisabled = (timeValue, viewId) => dtsDisabled(\n new Date(timeValue),\n viewId,\n rangeEnd\n );\n } else {\n const disabled = config.datesDisabled = dtsDisabled.reduce((dates, dt) => {\n const date = parseDate(dt, format, locale);\n return date !== undefined\n ? pushUnique(dates, regularizeDate(date, pickLevel, rangeEnd))\n : dates;\n }, []);\n config.checkDisabled = timeValue => disabled.includes(timeValue);\n }\n delete inOpts.datesDisabled;\n }\n if ('defaultViewDate' in inOpts) {\n const viewDate = parseDate(inOpts.defaultViewDate, format, locale);\n if (viewDate !== undefined) {\n config.defaultViewDate = viewDate;\n }\n delete inOpts.defaultViewDate;\n }\n\n //*** days of week ***//\n if ('weekStart' in inOpts) {\n const wkStart = Number(inOpts.weekStart) % 7;\n if (!isNaN(wkStart)) {\n weekStart = updateWeekStart(wkStart, config, weekNumbers);\n }\n delete inOpts.weekStart;\n }\n if (inOpts.daysOfWeekDisabled) {\n config.daysOfWeekDisabled = inOpts.daysOfWeekDisabled.reduce(sanitizeDOW, []);\n delete inOpts.daysOfWeekDisabled;\n }\n if (inOpts.daysOfWeekHighlighted) {\n config.daysOfWeekHighlighted = inOpts.daysOfWeekHighlighted.reduce(sanitizeDOW, []);\n delete inOpts.daysOfWeekHighlighted;\n }\n\n //*** week numbers ***//\n if ('weekNumbers' in inOpts) {\n let method = inOpts.weekNumbers;\n if (method) {\n const getWeekNumber = typeof method === 'function'\n ? (timeValue, startOfWeek) => method(new Date(timeValue), startOfWeek)\n : determineGetWeekMethod((method = parseInt(method, 10)), weekStart);\n if (getWeekNumber) {\n weekNumbers = config.weekNumbers = method;\n config.getWeekNumber = getWeekNumber;\n }\n } else {\n weekNumbers = config.weekNumbers = 0;\n config.getWeekNumber = null;\n }\n delete inOpts.weekNumbers;\n }\n\n //*** multi date ***//\n if ('maxNumberOfDates' in inOpts) {\n const maxNumberOfDates = parseInt(inOpts.maxNumberOfDates, 10);\n if (maxNumberOfDates >= 0) {\n config.maxNumberOfDates = maxNumberOfDates;\n config.multidate = maxNumberOfDates !== 1;\n }\n delete inOpts.maxNumberOfDates;\n }\n if (inOpts.dateDelimiter) {\n config.dateDelimiter = String(inOpts.dateDelimiter);\n delete inOpts.dateDelimiter;\n }\n\n //*** view ***//\n let newMaxView = maxView;\n if ('maxView' in inOpts) {\n newMaxView = validateViewId(inOpts.maxView, maxView);\n delete inOpts.maxView;\n }\n // ensure max view >= pick level\n newMaxView = pickLevel > newMaxView ? pickLevel : newMaxView;\n if (newMaxView !== maxView) {\n maxView = config.maxView = newMaxView;\n }\n\n let newStartView = startView;\n if ('startView' in inOpts) {\n newStartView = validateViewId(inOpts.startView, newStartView);\n delete inOpts.startView;\n }\n // ensure pick level <= start view <= max view\n if (newStartView < pickLevel) {\n newStartView = pickLevel;\n } else if (newStartView > maxView) {\n newStartView = maxView;\n }\n if (newStartView !== startView) {\n config.startView = newStartView;\n }\n\n //*** template ***//\n if (inOpts.prevArrow) {\n const prevArrow = parseHTML(inOpts.prevArrow);\n if (prevArrow.childNodes.length > 0) {\n config.prevArrow = prevArrow.childNodes;\n }\n delete inOpts.prevArrow;\n }\n if (inOpts.nextArrow) {\n const nextArrow = parseHTML(inOpts.nextArrow);\n if (nextArrow.childNodes.length > 0) {\n config.nextArrow = nextArrow.childNodes;\n }\n delete inOpts.nextArrow;\n }\n\n //*** misc ***//\n if ('disableTouchKeyboard' in inOpts) {\n config.disableTouchKeyboard = 'ontouchstart' in document && !!inOpts.disableTouchKeyboard;\n delete inOpts.disableTouchKeyboard;\n }\n if (inOpts.orientation) {\n const orientation = inOpts.orientation.toLowerCase().split(/\\s+/g);\n config.orientation = {\n x: orientation.find(x => (x === 'left' || x === 'right')) || 'auto',\n y: orientation.find(y => (y === 'top' || y === 'bottom')) || 'auto',\n };\n delete inOpts.orientation;\n }\n if ('todayButtonMode' in inOpts) {\n switch(inOpts.todayButtonMode) {\n case 0:\n case 1:\n config.todayButtonMode = inOpts.todayButtonMode;\n }\n delete inOpts.todayButtonMode;\n }\n\n //*** copy the rest ***//\n Object.entries(inOpts).forEach(([key, value]) => {\n if (value !== undefined && key in defaultOptions) {\n config[key] = value;\n }\n });\n\n return config;\n}\n","const defaultShortcutKeys = {\n show: {key: 'ArrowDown'},\n hide: null,\n toggle: {key: 'Escape'},\n prevButton: {key: 'ArrowLeft', ctrlOrMetaKey: true},\n nextButton: {key: 'ArrowRight', ctrlOrMetaKey: true},\n viewSwitch: {key: 'ArrowUp', ctrlOrMetaKey: true},\n clearButton: {key: 'Backspace', ctrlOrMetaKey: true},\n todayButton: {key: '.', ctrlOrMetaKey: true},\n exitEditMode: {key: 'ArrowDown', ctrlOrMetaKey: true},\n};\n\nexport default function createShortcutKeyConfig(options) {\n return Object.keys(defaultShortcutKeys).reduce((keyDefs, shortcut) => {\n const keyDef = options[shortcut] === undefined\n ? defaultShortcutKeys[shortcut]\n : options[shortcut];\n const key = keyDef && keyDef.key;\n if (!key || typeof key !== 'string') {\n return keyDefs;\n }\n\n const normalizedDef = {\n key,\n ctrlOrMetaKey: !!(keyDef.ctrlOrMetaKey || keyDef.ctrlKey || keyDef.metaKey),\n };\n if (key.length > 1) {\n normalizedDef.altKey = !!keyDef.altKey;\n normalizedDef.shiftKey = !!keyDef.shiftKey;\n }\n keyDefs[shortcut] = normalizedDef;\n return keyDefs;\n }, {});\n}\n","import {optimizeTemplateHTML} from '../../lib/utils.js';\n\nconst getButtons = buttonList => buttonList\n .map(classes => ``)\n .join('');\n\nexport default optimizeTemplateHTML(`\n \n \n \n \n ${getButtons([\n 'prev-button prev-btn',\n 'view-switch',\n 'next-button next-btn',\n ])}\n \n \n \n \n \n`);\n","import {createTagRepeat, optimizeTemplateHTML} from '../../lib/utils.js';\n\nexport default optimizeTemplateHTML(`\n ${createTagRepeat('span', 7, {class: 'dow'})}\n ${createTagRepeat('span', 42)}\n`);\n","import {createTagRepeat, optimizeTemplateHTML} from '../../lib/utils.js';\n\nexport default optimizeTemplateHTML(`\n \n ${createTagRepeat('span', 6, {class: 'week'})}\n`);\n\n","import {pushUnique} from '../../lib/utils.js';\nimport {parseHTML, replaceChildNodes} from '../../lib/dom.js';\n\n// Base class of the view classes\nexport default class View {\n constructor(picker, config) {\n Object.assign(this, config, {\n picker,\n element: parseHTML(``).firstChild,\n selected: [],\n isRangeEnd: !!picker.datepicker.rangeSideIndex,\n });\n this.init(this.picker.datepicker.config);\n }\n\n init(options) {\n if ('pickLevel' in options) {\n this.isMinView = this.id === options.pickLevel;\n }\n this.setOptions(options);\n this.updateFocus();\n this.updateSelection();\n }\n\n prepareForRender(switchLabel, prevButtonDisabled, nextButtonDisabled) {\n // refresh disabled years on every render in order to clear the ones added\n // by beforeShow hook at previous render\n this.disabled = [];\n\n const picker = this.picker;\n picker.setViewSwitchLabel(switchLabel);\n picker.setPrevButtonDisabled(prevButtonDisabled);\n picker.setNextButtonDisabled(nextButtonDisabled);\n }\n\n setDisabled(date, classList) {\n classList.add('disabled');\n pushUnique(this.disabled, date);\n }\n\n // Execute beforeShow() callback and apply the result to the element\n // args:\n performBeforeHook(el, timeValue) {\n let result = this.beforeShow(new Date(timeValue));\n switch (typeof result) {\n case 'boolean':\n result = {enabled: result};\n break;\n case 'string':\n result = {classes: result};\n }\n\n if (result) {\n const classList = el.classList;\n if (result.enabled === false) {\n this.setDisabled(timeValue, classList);\n }\n if (result.classes) {\n const extraClasses = result.classes.split(/\\s+/);\n classList.add(...extraClasses);\n if (extraClasses.includes('disabled')) {\n this.setDisabled(timeValue, classList);\n }\n }\n if (result.content) {\n replaceChildNodes(el, result.content);\n }\n }\n }\n\n renderCell(el, content, cellVal, date, {selected, range}, outOfScope, extraClasses = []) {\n el.textContent = content;\n if (this.isMinView) {\n el.dataset.date = date;\n }\n\n const classList = el.classList;\n el.className = `datepicker-cell ${this.cellClass}`;\n if (cellVal < this.first) {\n classList.add('prev');\n } else if (cellVal > this.last) {\n classList.add('next');\n }\n classList.add(...extraClasses);\n if (outOfScope || this.checkDisabled(date, this.id)) {\n this.setDisabled(date, classList);\n }\n if (range) {\n const [rangeStart, rangeEnd] = range;\n if (cellVal > rangeStart && cellVal < rangeEnd) {\n classList.add('range');\n }\n if (cellVal === rangeStart) {\n classList.add('range-start');\n }\n if (cellVal === rangeEnd) {\n classList.add('range-end');\n }\n }\n if (selected.includes(cellVal)) {\n classList.add('selected');\n }\n if (cellVal === this.focused) {\n classList.add('focused');\n }\n\n if (this.beforeShow) {\n this.performBeforeHook(el, date);\n }\n }\n\n refreshCell(el, cellVal, selected, [rangeStart, rangeEnd]) {\n const classList = el.classList;\n classList.remove('range', 'range-start', 'range-end', 'selected', 'focused');\n if (cellVal > rangeStart && cellVal < rangeEnd) {\n classList.add('range');\n }\n if (cellVal === rangeStart) {\n classList.add('range-start');\n }\n if (cellVal === rangeEnd) {\n classList.add('range-end');\n }\n if (selected.includes(cellVal)) {\n classList.add('selected');\n }\n if (cellVal === this.focused) {\n classList.add('focused');\n }\n }\n\n changeFocusedCell(cellIndex) {\n this.grid.querySelectorAll('.focused').forEach((el) => {\n el.classList.remove('focused');\n });\n this.grid.children[cellIndex].classList.add('focused');\n }\n}\n","import {today, dateValue, addDays, addWeeks, dayOfTheWeekOf} from '../../lib/date.js';\nimport {formatDate} from '../../lib/date-format.js';\nimport {parseHTML, showElement, hideElement} from '../../lib/dom.js';\nimport daysTemplate from '../templates/daysTemplate.js';\nimport weekNumbersTemplate from '../templates/weekNumbersTemplate.js';\nimport View from './View.js';\n\nexport default class DaysView extends View {\n constructor(picker) {\n super(picker, {\n id: 0,\n name: 'days',\n cellClass: 'day',\n });\n }\n\n init(options, onConstruction = true) {\n if (onConstruction) {\n const inner = parseHTML(daysTemplate).firstChild;\n this.dow = inner.firstChild;\n this.grid = inner.lastChild;\n this.element.appendChild(inner);\n }\n super.init(options);\n }\n\n setOptions(options) {\n let updateDOW;\n\n if ('minDate' in options) {\n this.minDate = options.minDate;\n }\n if ('maxDate' in options) {\n this.maxDate = options.maxDate;\n }\n if (options.checkDisabled) {\n this.checkDisabled = options.checkDisabled;\n }\n if (options.daysOfWeekDisabled) {\n this.daysOfWeekDisabled = options.daysOfWeekDisabled;\n updateDOW = true;\n }\n if (options.daysOfWeekHighlighted) {\n this.daysOfWeekHighlighted = options.daysOfWeekHighlighted;\n }\n if ('todayHighlight' in options) {\n this.todayHighlight = options.todayHighlight;\n }\n if ('weekStart' in options) {\n this.weekStart = options.weekStart;\n this.weekEnd = options.weekEnd;\n updateDOW = true;\n }\n if (options.locale) {\n const locale = this.locale = options.locale;\n this.dayNames = locale.daysMin;\n this.switchLabelFormat = locale.titleFormat;\n updateDOW = true;\n }\n if ('beforeShowDay' in options) {\n this.beforeShow = typeof options.beforeShowDay === 'function'\n ? options.beforeShowDay\n : undefined;\n }\n\n if ('weekNumbers' in options) {\n if (options.weekNumbers && !this.weekNumbers) {\n const weeksElem = parseHTML(weekNumbersTemplate).firstChild;\n this.weekNumbers = {\n element: weeksElem,\n dow: weeksElem.firstChild,\n weeks: weeksElem.lastChild,\n };\n this.element.insertBefore(weeksElem, this.element.firstChild);\n } else if (this.weekNumbers && !options.weekNumbers) {\n this.element.removeChild(this.weekNumbers.element);\n this.weekNumbers = null;\n }\n }\n\n if ('getWeekNumber' in options) {\n this.getWeekNumber = options.getWeekNumber;\n }\n\n if ('showDaysOfWeek' in options) {\n if (options.showDaysOfWeek) {\n showElement(this.dow);\n if (this.weekNumbers) {\n showElement(this.weekNumbers.dow);\n }\n } else {\n hideElement(this.dow);\n if (this.weekNumbers) {\n hideElement(this.weekNumbers.dow);\n }\n }\n }\n\n // update days-of-week when locale, daysOfweekDisabled or weekStart is changed\n if (updateDOW) {\n Array.from(this.dow.children).forEach((el, index) => {\n const dow = (this.weekStart + index) % 7;\n el.textContent = this.dayNames[dow];\n el.className = this.daysOfWeekDisabled.includes(dow) ? 'dow disabled' : 'dow';\n });\n }\n }\n\n // Apply update on the focused date to view's settings\n updateFocus() {\n const viewDate = new Date(this.picker.viewDate);\n const viewYear = viewDate.getFullYear();\n const viewMonth = viewDate.getMonth();\n const firstOfMonth = dateValue(viewYear, viewMonth, 1);\n const start = dayOfTheWeekOf(firstOfMonth, this.weekStart, this.weekStart);\n\n this.first = firstOfMonth;\n this.last = dateValue(viewYear, viewMonth + 1, 0);\n this.start = start;\n this.focused = this.picker.viewDate;\n }\n\n // Apply update on the selected dates to view's settings\n updateSelection() {\n const {dates, rangepicker} = this.picker.datepicker;\n this.selected = dates;\n if (rangepicker) {\n this.range = rangepicker.dates;\n }\n }\n\n // Update the entire view UI\n render() {\n // update today marker on ever render\n this.today = this.todayHighlight ? today() : undefined;\n\n this.prepareForRender(\n formatDate(this.focused, this.switchLabelFormat, this.locale),\n this.first <= this.minDate,\n this.last >= this.maxDate\n );\n\n if (this.weekNumbers) {\n const weekStart = this.weekStart;\n const startOfWeek = dayOfTheWeekOf(this.first, weekStart, weekStart);\n Array.from(this.weekNumbers.weeks.children).forEach((el, index) => {\n const dateOfWeekStart = addWeeks(startOfWeek, index);\n el.textContent = this.getWeekNumber(dateOfWeekStart, weekStart);\n if (index > 3) {\n el.classList[dateOfWeekStart > this.last ? 'add' : 'remove']('next');\n }\n });\n }\n Array.from(this.grid.children).forEach((el, index) => {\n const current = addDays(this.start, index);\n const dateObj = new Date(current);\n const day = dateObj.getDay();\n const extraClasses = [];\n\n if (this.today === current) {\n extraClasses.push('today');\n }\n if (this.daysOfWeekHighlighted.includes(day)) {\n extraClasses.push('highlighted');\n }\n\n this.renderCell(\n el,\n dateObj.getDate(),\n current,\n current,\n this,\n current < this.minDate\n || current > this.maxDate\n || this.daysOfWeekDisabled.includes(day),\n extraClasses\n );\n });\n }\n\n // Update the view UI by applying the changes of selected and focused items\n refresh() {\n const range = this.range || [];\n Array.from(this.grid.children).forEach((el) => {\n this.refreshCell(el, Number(el.dataset.date), this.selected, range);\n });\n }\n\n // Update the view UI by applying the change of focused item\n refreshFocus() {\n this.changeFocusedCell(Math.round((this.focused - this.start) / 86400000));\n }\n}\n","import {pushUnique, createTagRepeat} from '../../lib/utils.js';\nimport {dateValue, regularizeDate} from '../../lib/date.js';\nimport {parseHTML} from '../../lib/dom.js';\nimport View from './View.js';\n\nfunction computeMonthRange(range, thisYear) {\n if (!range || !range[0] || !range[1]) {\n return;\n }\n\n const [[startY, startM], [endY, endM]] = range;\n if (startY > thisYear || endY < thisYear) {\n return;\n }\n return [\n startY === thisYear ? startM : -1,\n endY === thisYear ? endM : 12,\n ];\n}\n\nexport default class MonthsView extends View {\n constructor(picker) {\n super(picker, {\n id: 1,\n name: 'months',\n cellClass: 'month',\n });\n }\n\n init(options, onConstruction = true) {\n if (onConstruction) {\n this.grid = this.element;\n this.element.classList.add('months', 'datepicker-grid');\n this.grid.appendChild(parseHTML(createTagRepeat('span', 12, {'data-month': ix => ix})));\n this.first = 0;\n this.last = 11;\n }\n super.init(options);\n }\n\n setOptions(options) {\n if (options.locale) {\n this.monthNames = options.locale.monthsShort;\n }\n if ('minDate' in options) {\n if (options.minDate === undefined) {\n this.minYear = this.minMonth = this.minDate = undefined;\n } else {\n const minDateObj = new Date(options.minDate);\n this.minYear = minDateObj.getFullYear();\n this.minMonth = minDateObj.getMonth();\n this.minDate = minDateObj.setDate(1);\n }\n }\n if ('maxDate' in options) {\n if (options.maxDate === undefined) {\n this.maxYear = this.maxMonth = this.maxDate = undefined;\n } else {\n const maxDateObj = new Date(options.maxDate);\n this.maxYear = maxDateObj.getFullYear();\n this.maxMonth = maxDateObj.getMonth();\n this.maxDate = dateValue(this.maxYear, this.maxMonth + 1, 0);\n }\n }\n if (options.checkDisabled) {\n this.checkDisabled = this.isMinView || options.datesDisabled === null\n ? options.checkDisabled\n : () => false;\n }\n if ('beforeShowMonth' in options) {\n this.beforeShow = typeof options.beforeShowMonth === 'function'\n ? options.beforeShowMonth\n : undefined;\n }\n }\n\n // Update view's settings to reflect the viewDate set on the picker\n updateFocus() {\n const viewDate = new Date(this.picker.viewDate);\n this.year = viewDate.getFullYear();\n this.focused = viewDate.getMonth();\n }\n\n // Update view's settings to reflect the selected dates\n updateSelection() {\n const {dates, rangepicker} = this.picker.datepicker;\n this.selected = dates.reduce((selected, timeValue) => {\n const date = new Date(timeValue);\n const year = date.getFullYear();\n const month = date.getMonth();\n if (selected[year] === undefined) {\n selected[year] = [month];\n } else {\n pushUnique(selected[year], month);\n }\n return selected;\n }, {});\n if (rangepicker && rangepicker.dates) {\n this.range = rangepicker.dates.map(timeValue => {\n const date = new Date(timeValue);\n return isNaN(date) ? undefined : [date.getFullYear(), date.getMonth()];\n });\n }\n }\n\n // Update the entire view UI\n render() {\n this.prepareForRender(\n this.year,\n this.year <= this.minYear,\n this.year >= this.maxYear\n );\n\n const selected = this.selected[this.year] || [];\n const yrOutOfRange = this.year < this.minYear || this.year > this.maxYear;\n const isMinYear = this.year === this.minYear;\n const isMaxYear = this.year === this.maxYear;\n const range = computeMonthRange(this.range, this.year);\n\n Array.from(this.grid.children).forEach((el, index) => {\n const date = regularizeDate(new Date(this.year, index, 1), 1, this.isRangeEnd);\n\n this.renderCell(\n el,\n this.monthNames[index],\n index,\n date,\n {selected, range},\n yrOutOfRange\n || isMinYear && index < this.minMonth\n || isMaxYear && index > this.maxMonth\n );\n });\n }\n\n // Update the view UI by applying the changes of selected and focused items\n refresh() {\n const selected = this.selected[this.year] || [];\n const range = computeMonthRange(this.range, this.year) || [];\n Array.from(this.grid.children).forEach((el, index) => {\n this.refreshCell(el, index, selected, range);\n });\n }\n\n // Update the view UI by applying the change of focused item\n refreshFocus() {\n this.changeFocusedCell(this.focused);\n }\n}","import {pushUnique, createTagRepeat} from '../../lib/utils.js';\nimport {dateValue, regularizeDate, startOfYearPeriod} from '../../lib/date.js';\nimport {parseHTML} from '../../lib/dom.js';\nimport View from './View.js';\n\nfunction toTitleCase(word) {\n return [...word].reduce((str, ch, ix) => str += ix ? ch : ch.toUpperCase(), '');\n}\n\n// Class representing the years and decades view elements\nexport default class YearsView extends View {\n constructor(picker, config) {\n super(picker, config);\n }\n\n init(options, onConstruction = true) {\n if (onConstruction) {\n this.navStep = this.step * 10;\n this.beforeShowOption = `beforeShow${toTitleCase(this.cellClass)}`;\n this.grid = this.element;\n this.element.classList.add(this.name, 'datepicker-grid');\n this.grid.appendChild(parseHTML(createTagRepeat('span', 12)));\n }\n super.init(options);\n }\n\n setOptions(options) {\n if ('minDate' in options) {\n if (options.minDate === undefined) {\n this.minYear = this.minDate = undefined;\n } else {\n this.minYear = startOfYearPeriod(options.minDate, this.step);\n this.minDate = dateValue(this.minYear, 0, 1);\n }\n }\n if ('maxDate' in options) {\n if (options.maxDate === undefined) {\n this.maxYear = this.maxDate = undefined;\n } else {\n this.maxYear = startOfYearPeriod(options.maxDate, this.step);\n this.maxDate = dateValue(this.maxYear, 11, 31);\n }\n }\n if (options.checkDisabled) {\n this.checkDisabled = this.isMinView || options.datesDisabled === null\n ? options.checkDisabled\n : () => false;\n }\n if (this.beforeShowOption in options) {\n const beforeShow = options[this.beforeShowOption];\n this.beforeShow = typeof beforeShow === 'function' ? beforeShow : undefined;\n }\n }\n\n // Update view's settings to reflect the viewDate set on the picker\n updateFocus() {\n const viewDate = new Date(this.picker.viewDate);\n const first = startOfYearPeriod(viewDate, this.navStep);\n const last = first + 9 * this.step;\n\n this.first = first;\n this.last = last;\n this.start = first - this.step;\n this.focused = startOfYearPeriod(viewDate, this.step);\n }\n\n // Update view's settings to reflect the selected dates\n updateSelection() {\n const {dates, rangepicker} = this.picker.datepicker;\n this.selected = dates.reduce((years, timeValue) => {\n return pushUnique(years, startOfYearPeriod(timeValue, this.step));\n }, []);\n if (rangepicker && rangepicker.dates) {\n this.range = rangepicker.dates.map(timeValue => {\n if (timeValue !== undefined) {\n return startOfYearPeriod(timeValue, this.step);\n }\n });\n }\n }\n\n // Update the entire view UI\n render() {\n this.prepareForRender(\n `${this.first}-${this.last}`,\n this.first <= this.minYear,\n this.last >= this.maxYear\n );\n\n Array.from(this.grid.children).forEach((el, index) => {\n const current = this.start + (index * this.step);\n const date = regularizeDate(new Date(current, 0, 1), 2, this.isRangeEnd);\n\n el.dataset.year = current;\n this.renderCell(\n el,\n current,\n current,\n date,\n this,\n current < this.minYear || current > this.maxYear\n );\n });\n }\n\n // Update the view UI by applying the changes of selected and focused items\n refresh() {\n const range = this.range || [];\n Array.from(this.grid.children).forEach((el) => {\n this.refreshCell(el, Number(el.textContent), this.selected, range);\n });\n }\n\n // Update the view UI by applying the change of focused item\n refreshFocus() {\n this.changeFocusedCell(Math.round((this.focused - this.start) / this.step));\n }\n}\n","import {limitToRange} from '../lib/utils.js';\nimport {today, addMonths, addYears} from '../lib/date.js';\nimport {isActiveElement} from '../lib/dom.js';\n\nexport function triggerDatepickerEvent(datepicker, type) {\n const options = {\n bubbles: true,\n cancelable: true,\n detail: {\n date: datepicker.getDate(),\n viewDate: new Date(datepicker.picker.viewDate),\n viewId: datepicker.picker.currentView.id,\n datepicker,\n },\n };\n datepicker.element.dispatchEvent(new CustomEvent(type, options));\n}\n\n// direction: -1 (to previous), 1 (to next)\nexport function goToPrevOrNext(datepicker, direction) {\n const {config, picker} = datepicker;\n const {currentView, viewDate} = picker;\n let newViewDate;\n switch (currentView.id) {\n case 0:\n newViewDate = addMonths(viewDate, direction);\n break;\n case 1:\n newViewDate = addYears(viewDate, direction);\n break;\n default:\n newViewDate = addYears(viewDate, direction * currentView.navStep);\n }\n newViewDate = limitToRange(newViewDate, config.minDate, config.maxDate);\n picker.changeFocus(newViewDate).render();\n}\n\nexport function switchView(datepicker) {\n const viewId = datepicker.picker.currentView.id;\n if (viewId === datepicker.config.maxView) {\n return;\n }\n datepicker.picker.changeView(viewId + 1).render();\n}\n\nexport function clearSelection(datepicker) {\n datepicker.setDate({clear: true});\n}\n\nexport function goToOrSelectToday(datepicker) {\n const currentDate = today();\n if (datepicker.config.todayButtonMode === 1) {\n datepicker.setDate(currentDate, {forceRefresh: true, viewDate: currentDate});\n } else {\n datepicker.setFocusedDate(currentDate, true);\n }\n}\n\nexport function unfocus(datepicker) {\n const onBlur = () => {\n if (datepicker.config.updateOnBlur) {\n datepicker.update({revert: true});\n } else {\n datepicker.refresh('input');\n }\n datepicker.hide();\n };\n const element = datepicker.element;\n\n if (isActiveElement(element)) {\n element.addEventListener('blur', onBlur, {once: true});\n } else {\n onBlur();\n }\n}\n","import {addMonths, addYears} from '../lib/date.js';\nimport {findElementInEventPath} from '../lib/event.js';\nimport {goToPrevOrNext, switchView} from './functions.js';\n\nfunction goToSelectedMonthOrYear(datepicker, selection) {\n const picker = datepicker.picker;\n const viewDate = new Date(picker.viewDate);\n const viewId = picker.currentView.id;\n const newDate = viewId === 1\n ? addMonths(viewDate, selection - viewDate.getMonth())\n : addYears(viewDate, selection - viewDate.getFullYear());\n\n picker.changeFocus(newDate).changeView(viewId - 1).render();\n}\n\nexport function onClickViewSwitch(datepicker) {\n switchView(datepicker);\n}\n\nexport function onClickPrevButton(datepicker) {\n goToPrevOrNext(datepicker, -1);\n}\n\nexport function onClickNextButton(datepicker) {\n goToPrevOrNext(datepicker, 1);\n}\n\n// For the picker's main block to delegete the events from `datepicker-cell`s\nexport function onClickView(datepicker, ev) {\n const target = findElementInEventPath(ev, '.datepicker-cell');\n if (!target || target.classList.contains('disabled')) {\n return;\n }\n\n const {id, isMinView} = datepicker.picker.currentView;\n const data = target.dataset;\n if (isMinView) {\n datepicker.setDate(Number(data.date));\n } else if (id === 1) {\n goToSelectedMonthOrYear(datepicker, Number(data.month));\n } else {\n goToSelectedMonthOrYear(datepicker, Number(data.year));\n }\n}\n\nexport function onMousedownPicker(ev) {\n ev.preventDefault();\n}\n","import {lastItemOf, isInRange, limitToRange} from '../lib/utils.js';\nimport {today, regularizeDate} from '../lib/date.js';\nimport {\n parseHTML,\n getParent,\n showElement,\n hideElement,\n emptyChildNodes,\n} from '../lib/dom.js';\nimport {registerListeners} from '../lib/event.js';\nimport pickerTemplate from './templates/pickerTemplate.js';\nimport DaysView from './views/DaysView.js';\nimport MonthsView from './views/MonthsView.js';\nimport YearsView from './views/YearsView.js';\nimport {\n triggerDatepickerEvent,\n clearSelection,\n goToOrSelectToday,\n} from '../events/functions.js';\nimport {\n onClickViewSwitch,\n onClickPrevButton,\n onClickNextButton,\n onClickView,\n onMousedownPicker,\n} from '../events/pickerListeners.js';\n\nconst orientClasses = ['left', 'top', 'right', 'bottom'].reduce((obj, key) => {\n obj[key] = `datepicker-orient-${key}`;\n return obj;\n}, {});\nconst toPx = num => num ? `${num}px` : num;\n\nfunction processPickerOptions(picker, options) {\n if ('title' in options) {\n if (options.title) {\n picker.controls.title.textContent = options.title;\n showElement(picker.controls.title);\n } else {\n picker.controls.title.textContent = '';\n hideElement(picker.controls.title);\n }\n }\n if (options.prevArrow) {\n const prevButton = picker.controls.prevButton;\n emptyChildNodes(prevButton);\n options.prevArrow.forEach((node) => {\n prevButton.appendChild(node.cloneNode(true));\n });\n }\n if (options.nextArrow) {\n const nextButton = picker.controls.nextButton;\n emptyChildNodes(nextButton);\n options.nextArrow.forEach((node) => {\n nextButton.appendChild(node.cloneNode(true));\n });\n }\n if (options.locale) {\n picker.controls.todayButton.textContent = options.locale.today;\n picker.controls.clearButton.textContent = options.locale.clear;\n }\n if ('todayButton' in options) {\n if (options.todayButton) {\n showElement(picker.controls.todayButton);\n } else {\n hideElement(picker.controls.todayButton);\n }\n }\n if ('minDate' in options || 'maxDate' in options) {\n const {minDate, maxDate} = picker.datepicker.config;\n picker.controls.todayButton.disabled = !isInRange(today(), minDate, maxDate);\n }\n if ('clearButton' in options) {\n if (options.clearButton) {\n showElement(picker.controls.clearButton);\n } else {\n hideElement(picker.controls.clearButton);\n }\n }\n}\n\n// Compute view date to reset, which will be...\n// - the last item of the selected dates or defaultViewDate if no selection\n// - limitted to minDate or maxDate if it exceeds the range\nfunction computeResetViewDate(datepicker) {\n const {dates, config, rangeSideIndex} = datepicker;\n const viewDate = dates.length > 0\n ? lastItemOf(dates)\n : regularizeDate(config.defaultViewDate, config.pickLevel, rangeSideIndex);\n return limitToRange(viewDate, config.minDate, config.maxDate);\n}\n\n// Change current view's view date\nfunction setViewDate(picker, newDate) {\n if (!('_oldViewDate' in picker) && newDate !== picker.viewDate) {\n picker._oldViewDate = picker.viewDate;\n }\n picker.viewDate = newDate;\n\n // return whether the new date is in different period on time from the one\n // displayed in the current view\n // when true, the view needs to be re-rendered on the next UI refresh.\n const {id, year, first, last} = picker.currentView;\n const viewYear = new Date(newDate).getFullYear();\n switch (id) {\n case 0:\n return newDate < first || newDate > last;\n case 1:\n return viewYear !== year;\n default:\n return viewYear < first || viewYear > last;\n }\n}\n\nfunction getTextDirection(el) {\n return window.getComputedStyle(el).direction;\n}\n\n// find the closet scrollable ancestor elemnt under the body\nfunction findScrollParents(el) {\n const parent = getParent(el);\n if (parent === document.body || !parent) {\n return;\n }\n\n // checking overflow only is enough because computed overflow cannot be\n // visible or a combination of visible and other when either axis is set\n // to other than visible.\n // (Setting one axis to other than 'visible' while the other is 'visible'\n // results in the other axis turning to 'auto')\n return window.getComputedStyle(parent).overflow !== 'visible'\n ? parent\n : findScrollParents(parent);\n}\n\n// Class representing the picker UI\nexport default class Picker {\n constructor(datepicker) {\n const {config, inputField} = this.datepicker = datepicker;\n\n const template = pickerTemplate.replace(/%buttonClass%/g, config.buttonClass);\n const element = this.element = parseHTML(template).firstChild;\n const [header, main, footer] = element.firstChild.children;\n const title = header.firstElementChild;\n const [prevButton, viewSwitch, nextButton] = header.lastElementChild.children;\n const [todayButton, clearButton] = footer.firstChild.children;\n const controls = {\n title,\n prevButton,\n viewSwitch,\n nextButton,\n todayButton,\n clearButton,\n };\n this.main = main;\n this.controls = controls;\n\n const elementClass = inputField ? 'dropdown' : 'inline';\n element.classList.add(`datepicker-${elementClass}`);\n\n processPickerOptions(this, config);\n this.viewDate = computeResetViewDate(datepicker);\n\n // set up event listeners\n registerListeners(datepicker, [\n [element, 'mousedown', onMousedownPicker],\n [main, 'click', onClickView.bind(null, datepicker)],\n [controls.viewSwitch, 'click', onClickViewSwitch.bind(null, datepicker)],\n [controls.prevButton, 'click', onClickPrevButton.bind(null, datepicker)],\n [controls.nextButton, 'click', onClickNextButton.bind(null, datepicker)],\n [controls.todayButton, 'click', goToOrSelectToday.bind(null, datepicker)],\n [controls.clearButton, 'click', clearSelection.bind(null, datepicker)],\n ]);\n\n // set up views\n this.views = [\n new DaysView(this),\n new MonthsView(this),\n new YearsView(this, {id: 2, name: 'years', cellClass: 'year', step: 1}),\n new YearsView(this, {id: 3, name: 'decades', cellClass: 'decade', step: 10}),\n ];\n this.currentView = this.views[config.startView];\n\n this.currentView.render();\n this.main.appendChild(this.currentView.element);\n if (config.container) {\n config.container.appendChild(this.element);\n } else {\n inputField.after(this.element);\n }\n }\n\n setOptions(options) {\n processPickerOptions(this, options);\n this.views.forEach((view) => {\n view.init(options, false);\n });\n this.currentView.render();\n }\n\n detach() {\n this.element.remove();\n }\n\n show() {\n if (this.active) {\n return;\n }\n\n const {datepicker, element} = this;\n const inputField = datepicker.inputField;\n if (inputField) {\n // ensure picker's direction matches input's\n const inputDirection = getTextDirection(inputField);\n if (inputDirection !== getTextDirection(getParent(element))) {\n element.dir = inputDirection;\n } else if (element.dir) {\n element.removeAttribute('dir');\n }\n\n // Determine the picker's position first to prevent `orientation: 'auto'`\n // from being miscalculated to 'bottom' after the picker temporarily\n // shown below the input field expands the document height if the field\n // is at the bottom edge of the document\n this.place();\n element.classList.add('active');\n\n if (datepicker.config.disableTouchKeyboard) {\n inputField.blur();\n }\n } else {\n element.classList.add('active');\n }\n this.active = true;\n triggerDatepickerEvent(datepicker, 'show');\n }\n\n hide() {\n if (!this.active) {\n return;\n }\n this.datepicker.exitEditMode();\n this.element.classList.remove('active');\n this.active = false;\n triggerDatepickerEvent(this.datepicker, 'hide');\n }\n\n place() {\n const {classList, style} = this.element;\n // temporarily display the picker to get its size and offset parent\n style.display = 'block';\n\n const {\n width: calendarWidth,\n height: calendarHeight,\n } = this.element.getBoundingClientRect();\n const offsetParent = this.element.offsetParent;\n // turn the picker back to hidden so that the position is determined with\n // the state before it is shown.\n style.display = '';\n\n const {config, inputField} = this.datepicker;\n const {\n left: inputLeft,\n top: inputTop,\n right: inputRight,\n bottom: inputBottom,\n width: inputWidth,\n height: inputHeight\n } = inputField.getBoundingClientRect();\n let {x: orientX, y: orientY} = config.orientation;\n let left = inputLeft;\n let top = inputTop;\n\n // caliculate offsetLeft/Top of inputField\n if (offsetParent === document.body || !offsetParent) {\n left += window.scrollX;\n top += window.scrollY;\n } else {\n const offsetParentRect = offsetParent.getBoundingClientRect();\n left -= offsetParentRect.left - offsetParent.scrollLeft;\n top -= offsetParentRect.top - offsetParent.scrollTop;\n }\n\n // caliculate the boundaries of the visible area that contains inputField\n const scrollParent = findScrollParents(inputField);\n let scrollAreaLeft = 0;\n let scrollAreaTop = 0;\n let {\n clientWidth: scrollAreaRight,\n clientHeight: scrollAreaBottom,\n } = document.documentElement;\n\n if (scrollParent) {\n const scrollParentRect = scrollParent.getBoundingClientRect();\n if (scrollParentRect.top > 0) {\n scrollAreaTop = scrollParentRect.top;\n }\n if (scrollParentRect.left > 0) {\n scrollAreaLeft = scrollParentRect.left;\n }\n if (scrollParentRect.right < scrollAreaRight) {\n scrollAreaRight = scrollParentRect.right;\n }\n if (scrollParentRect.bottom < scrollAreaBottom) {\n scrollAreaBottom = scrollParentRect.bottom;\n }\n }\n\n // determine the horizontal orientation and left position\n let adjustment = 0;\n if (orientX === 'auto') {\n if (inputLeft < scrollAreaLeft) {\n orientX = 'left';\n adjustment = scrollAreaLeft - inputLeft;\n } else if (inputLeft + calendarWidth > scrollAreaRight) {\n orientX = 'right';\n if (scrollAreaRight < inputRight) {\n adjustment = scrollAreaRight - inputRight;\n }\n } else if (getTextDirection(inputField) === 'rtl') {\n orientX = inputRight - calendarWidth < scrollAreaLeft ? 'left' : 'right';\n } else {\n orientX = 'left';\n }\n }\n if (orientX === 'right') {\n left += inputWidth - calendarWidth;\n }\n left += adjustment;\n\n // determine the vertical orientation and top position\n if (orientY === 'auto') {\n if (inputTop - calendarHeight > scrollAreaTop) {\n orientY = inputBottom + calendarHeight > scrollAreaBottom ? 'top' : 'bottom';\n } else {\n orientY = 'bottom';\n }\n }\n if (orientY === 'top') {\n top -= calendarHeight;\n } else {\n top += inputHeight;\n }\n\n classList.remove(...Object.values(orientClasses));\n classList.add(orientClasses[orientX], orientClasses[orientY]);\n\n style.left = toPx(left);\n style.top = toPx(top);\n }\n\n setViewSwitchLabel(labelText) {\n this.controls.viewSwitch.textContent = labelText;\n }\n\n setPrevButtonDisabled(disabled) {\n this.controls.prevButton.disabled = disabled;\n }\n\n setNextButtonDisabled(disabled) {\n this.controls.nextButton.disabled = disabled;\n }\n\n changeView(viewId) {\n const currentView = this.currentView;\n if (viewId !== currentView.id) {\n if (!this._oldView) {\n this._oldView = currentView;\n }\n this.currentView = this.views[viewId];\n this._renderMethod = 'render';\n }\n return this;\n }\n\n // Change the focused date (view date)\n changeFocus(newViewDate) {\n this._renderMethod = setViewDate(this, newViewDate) ? 'render' : 'refreshFocus';\n this.views.forEach((view) => {\n view.updateFocus();\n });\n return this;\n }\n\n // Apply the change of the selected dates\n update(viewDate = undefined) {\n const newViewDate = viewDate === undefined\n ? computeResetViewDate(this.datepicker)\n : viewDate;\n this._renderMethod = setViewDate(this, newViewDate) ? 'render' : 'refresh';\n this.views.forEach((view) => {\n view.updateFocus();\n view.updateSelection();\n });\n return this;\n }\n\n // Refresh the picker UI\n render(quickRender = true) {\n const {currentView, datepicker, _oldView: oldView} = this;\n const oldViewDate = new Date(this._oldViewDate);\n const renderMethod = (quickRender && this._renderMethod) || 'render';\n delete this._oldView;\n delete this._oldViewDate;\n delete this._renderMethod;\n\n currentView[renderMethod]();\n if (oldView) {\n this.main.replaceChild(currentView.element, oldView.element);\n triggerDatepickerEvent(datepicker, 'changeView');\n }\n if (!isNaN(oldViewDate)) {\n const newViewDate = new Date(this.viewDate);\n if (newViewDate.getFullYear() !== oldViewDate.getFullYear()) {\n triggerDatepickerEvent(datepicker, 'changeYear');\n }\n if (newViewDate.getMonth() !== oldViewDate.getMonth()) {\n triggerDatepickerEvent(datepicker, 'changeMonth');\n }\n }\n }\n}\n","import {isInRange} from '../lib/utils.js';\nimport {isActiveElement} from '../lib/dom.js';\nimport {addDays, addMonths, addYears} from '../lib/date.js';\nimport {\n goToPrevOrNext,\n switchView,\n clearSelection,\n goToOrSelectToday,\n unfocus,\n} from './functions.js';\n\n// Find the closest date that doesn't meet the condition for unavailable date\n// Returns undefined if no available date is found\n// addFn: function to calculate the next date\n// - args: time value, amount\n// increase: amount to pass to addFn\n// testFn: function to test the unavailability of the date\n// - args: time value; return: true if unavailable\nfunction findNextAvailableOne(date, addFn, increase, testFn, min, max) {\n if (!isInRange(date, min, max)) {\n return;\n }\n if (testFn(date)) {\n const newDate = addFn(date, increase);\n return findNextAvailableOne(newDate, addFn, increase, testFn, min, max);\n }\n return date;\n}\n\n// direction: -1 (left/up), 1 (right/down)\n// vertical: true for up/down, false for left/right\nfunction moveByArrowKey(datepicker, direction, vertical) {\n const picker = datepicker.picker;\n const currentView = picker.currentView;\n const step = currentView.step || 1;\n let viewDate = picker.viewDate;\n let addFn;\n switch (currentView.id) {\n case 0:\n viewDate = addDays(viewDate, vertical ? direction * 7 : direction);\n addFn = addDays;\n break;\n case 1:\n viewDate = addMonths(viewDate, vertical ? direction * 4 : direction);\n addFn = addMonths;\n break;\n default:\n viewDate = addYears(viewDate, direction * (vertical ? 4 : 1) * step);\n addFn = addYears;\n }\n viewDate = findNextAvailableOne(\n viewDate,\n addFn,\n direction < 0 ? -step : step,\n (date) => currentView.disabled.includes(date),\n currentView.minDate,\n currentView.maxDate\n );\n if (viewDate !== undefined) {\n picker.changeFocus(viewDate).render();\n }\n}\n\nexport function onKeydown(datepicker, ev) {\n const {config, picker, editMode} = datepicker;\n const active = picker.active;\n const {key, altKey, shiftKey} = ev;\n const ctrlOrMetaKey = ev.ctrlKey || ev.metaKey;\n const cancelEvent = () => {\n ev.preventDefault();\n ev.stopPropagation();\n };\n\n // tab/enter keys should not be taken by shortcut keys\n if (key === 'Tab') {\n unfocus(datepicker);\n return;\n }\n if (key === 'Enter') {\n if (!active) {\n datepicker.update();\n } else if (editMode) {\n datepicker.exitEditMode({update: true, autohide: config.autohide});\n } else {\n const currentView = picker.currentView;\n if (currentView.isMinView) {\n datepicker.setDate(picker.viewDate);\n } else {\n picker.changeView(currentView.id - 1).render();\n cancelEvent();\n }\n }\n return;\n }\n\n const shortcutKeys = config.shortcutKeys;\n const keyInfo = {key, ctrlOrMetaKey, altKey, shiftKey};\n const shortcut = Object.keys(shortcutKeys).find((item) => {\n const keyDef = shortcutKeys[item];\n return !Object.keys(keyDef).find(prop => keyDef[prop] !== keyInfo[prop]);\n });\n if (shortcut) {\n let action;\n if (shortcut === 'toggle') {\n action = shortcut;\n } else if (editMode) {\n if (shortcut === 'exitEditMode') {\n action = shortcut;\n }\n } else if (active) {\n if (shortcut === 'hide') {\n action = shortcut;\n } else if (shortcut === 'prevButton') {\n action = [goToPrevOrNext, [datepicker, -1]];\n } else if (shortcut === 'nextButton') {\n action = [goToPrevOrNext, [datepicker, 1]];\n } else if (shortcut === 'viewSwitch') {\n action = [switchView, [datepicker]];\n } else if (config.clearButton && shortcut === 'clearButton') {\n action = [clearSelection, [datepicker]];\n } else if (config.todayButton && shortcut === 'todayButton') {\n action = [goToOrSelectToday, [datepicker]];\n }\n } else if (shortcut === 'show') {\n action = shortcut;\n }\n if (action) {\n if (Array.isArray(action)) {\n action[0].apply(null, action[1]);\n } else {\n datepicker[action]();\n }\n cancelEvent();\n return;\n }\n }\n\n // perform as a regular when picker in hidden or in edit mode\n if (!active || editMode) {\n return;\n }\n\n const handleArrowKeyPress = (direction, vertical) => {\n if (shiftKey || ctrlOrMetaKey || altKey) {\n datepicker.enterEditMode();\n } else {\n moveByArrowKey(datepicker, direction, vertical);\n ev.preventDefault();\n }\n };\n\n if (key === 'ArrowLeft') {\n handleArrowKeyPress(-1, false);\n } else if (key === 'ArrowRight') {\n handleArrowKeyPress(1, false);\n } else if (key === 'ArrowUp') {\n handleArrowKeyPress(-1, true);\n } else if (key === 'ArrowDown') {\n handleArrowKeyPress(1, true);\n } else if (\n key === 'Backspace'\n || key === 'Delete'\n // When autofill is performed, Chromium-based browsers trigger fake\n // keydown/keyup events that don't have the `key` property (on Edge,\n // keyup only) in addition to the input event. Therefore, we need to\n // check the existence of `key`'s value before checking the length.\n // (issue #144)\n || (key && key.length === 1 && !ctrlOrMetaKey)\n ) {\n datepicker.enterEditMode();\n }\n}\n\nexport function onFocus(datepicker) {\n if (datepicker.config.showOnFocus && !datepicker._showing) {\n datepicker.show();\n }\n}\n\n// for the prevention for entering edit mode while getting focus on click\nexport function onMousedown(datepicker, ev) {\n const el = ev.target;\n if (datepicker.picker.active || datepicker.config.showOnClick) {\n el._active = isActiveElement(el);\n el._clicking = setTimeout(() => {\n delete el._active;\n delete el._clicking;\n }, 2000);\n }\n}\n\nexport function onClickInput(datepicker, ev) {\n const el = ev.target;\n if (!el._clicking) {\n return;\n }\n clearTimeout(el._clicking);\n delete el._clicking;\n\n if (el._active) {\n datepicker.enterEditMode();\n }\n delete el._active;\n\n if (datepicker.config.showOnClick) {\n datepicker.show();\n }\n}\n\nexport function onPaste(datepicker, ev) {\n if (ev.clipboardData.types.includes('text/plain')) {\n datepicker.enterEditMode();\n }\n}\n","import {isActiveElement} from '../lib/dom.js';\nimport {findElementInEventPath} from '../lib/event.js';\nimport {unfocus} from './functions.js';\n\n// for the `document` to delegate the events from outside the picker/input field\nexport function onClickOutside(datepicker, ev) {\n const {element, picker} = datepicker;\n // check both picker's and input's activeness to make updateOnBlur work in\n // the cases where...\n // - picker is hidden by ESC key press → input stays focused\n // - input is unfocused by closing mobile keyboard → piker is kept shown\n if (!picker.active && !isActiveElement(element)) {\n return;\n }\n const pickerElem = picker.element;\n if (findElementInEventPath(ev, el => el === element || el === pickerElem)) {\n return;\n }\n unfocus(datepicker);\n}\n","import {lastItemOf, stringToArray, isInRange} from './lib/utils.js';\nimport {today, regularizeDate} from './lib/date.js';\nimport {parseDate, formatDate} from './lib/date-format.js';\nimport {isActiveElement} from './lib/dom.js';\nimport {registerListeners, unregisterListeners} from './lib/event.js';\nimport locales from './i18n/base-locales.js';\nimport defaultOptions from './options/defaultOptions.js';\nimport processOptions from './options/processOptions.js';\nimport createShortcutKeyConfig from './options/shortcutKeys.js';\nimport Picker from './picker/Picker.js';\nimport {triggerDatepickerEvent} from './events/functions.js';\nimport {\n onKeydown,\n onFocus,\n onMousedown,\n onClickInput,\n onPaste,\n} from './events/elementListeners.js';\nimport {onClickOutside} from './events/otherListeners.js';\n\nfunction stringifyDates(dates, config) {\n return dates\n .map(dt => formatDate(dt, config.format, config.locale))\n .join(config.dateDelimiter);\n}\n\n// parse input dates and create an array of time values for selection\n// returns undefined if there are no valid dates in inputDates\n// when origDates (current selection) is passed, the function works to mix\n// the input dates into the current selection\nfunction processInputDates(datepicker, inputDates, clear = false) {\n if (inputDates.length === 0) {\n // empty input is considered valid unless origiDates is passed\n return clear ? [] : undefined;\n }\n\n const {config, dates: origDates, rangeSideIndex} = datepicker;\n const {pickLevel, maxNumberOfDates} = config;\n let newDates = inputDates.reduce((dates, dt) => {\n let date = parseDate(dt, config.format, config.locale);\n if (date === undefined) {\n return dates;\n }\n // adjust to 1st of the month/Jan 1st of the year\n // or to the last day of the monh/Dec 31st of the year if the datepicker\n // is the range-end picker of a rangepicker\n date = regularizeDate(date, pickLevel, rangeSideIndex);\n if (\n isInRange(date, config.minDate, config.maxDate)\n && !dates.includes(date)\n && !config.checkDisabled(date, pickLevel)\n && (pickLevel > 0 || !config.daysOfWeekDisabled.includes(new Date(date).getDay()))\n ) {\n dates.push(date);\n }\n return dates;\n }, []);\n if (newDates.length === 0) {\n return;\n }\n if (config.multidate && !clear) {\n // get the synmetric difference between origDates and newDates\n newDates = newDates.reduce((dates, date) => {\n if (!origDates.includes(date)) {\n dates.push(date);\n }\n return dates;\n }, origDates.filter(date => !newDates.includes(date)));\n }\n // do length check always because user can input multiple dates regardless of the mode\n return maxNumberOfDates && newDates.length > maxNumberOfDates\n ? newDates.slice(maxNumberOfDates * -1)\n : newDates;\n}\n\n// refresh the UI elements\n// modes: 1: input only, 2, picker only, 3 both\nfunction refreshUI(datepicker, mode = 3, quickRender = true, viewDate = undefined) {\n const {config, picker, inputField} = datepicker;\n if (mode & 2) {\n const newView = picker.active ? config.pickLevel : config.startView;\n picker.update(viewDate).changeView(newView).render(quickRender);\n }\n if (mode & 1 && inputField) {\n inputField.value = stringifyDates(datepicker.dates, config);\n }\n}\n\nfunction setDate(datepicker, inputDates, options) {\n const config = datepicker.config;\n let {clear, render, autohide, revert, forceRefresh, viewDate} = options;\n if (render === undefined) {\n render = true;\n }\n if (!render) {\n autohide = forceRefresh = false;\n } else if (autohide === undefined) {\n autohide = config.autohide;\n }\n viewDate = parseDate(viewDate, config.format, config.locale);\n\n const newDates = processInputDates(datepicker, inputDates, clear);\n if (!newDates && !revert) {\n return;\n }\n if (newDates && newDates.toString() !== datepicker.dates.toString()) {\n datepicker.dates = newDates;\n refreshUI(datepicker, render ? 3 : 1, true, viewDate);\n triggerDatepickerEvent(datepicker, 'changeDate');\n } else {\n refreshUI(datepicker, forceRefresh ? 3 : 1, true, viewDate);\n }\n\n if (autohide) {\n datepicker.hide();\n }\n}\n\nfunction getOutputConverter(datepicker, format) {\n return format\n ? date => formatDate(date, format, datepicker.config.locale)\n : date => new Date(date);\n}\n\n/**\n * Class representing a date picker\n */\nexport default class Datepicker {\n /**\n * Create a date picker\n * @param {Element} element - element to bind a date picker\n * @param {Object} [options] - config options\n * @param {DateRangePicker} [rangepicker] - DateRangePicker instance the\n * date picker belongs to. Use this only when creating date picker as a part\n * of date range picker\n */\n constructor(element, options = {}, rangepicker = undefined) {\n element.datepicker = this;\n this.element = element;\n this.dates = [];\n\n // initialize config\n const config = this.config = Object.assign({\n buttonClass: (options.buttonClass && String(options.buttonClass)) || 'button',\n container: null,\n defaultViewDate: today(),\n maxDate: undefined,\n minDate: undefined,\n }, processOptions(defaultOptions, this));\n\n // configure by type\n let inputField;\n if (element.tagName === 'INPUT') {\n inputField = this.inputField = element;\n inputField.classList.add('datepicker-input');\n if (options.container) {\n // omit string type check because it doesn't guarantee to avoid errors\n // (invalid selector string causes abend with sytax error)\n config.container = options.container instanceof HTMLElement\n ? options.container\n : document.querySelector(options.container);\n }\n } else {\n config.container = element;\n }\n if (rangepicker) {\n // check validiry\n const index = rangepicker.inputs.indexOf(inputField);\n const datepickers = rangepicker.datepickers;\n if (index < 0 || index > 1 || !Array.isArray(datepickers)) {\n throw Error('Invalid rangepicker object.');\n }\n // attach itaelf to the rangepicker here so that processInputDates() can\n // determine if this is the range-end picker of the rangepicker while\n // setting inital values when pickLevel > 0\n datepickers[index] = this;\n this.rangepicker = rangepicker;\n this.rangeSideIndex = index;\n }\n\n // set up config\n this._options = options;\n Object.assign(config, processOptions(options, this));\n config.shortcutKeys = createShortcutKeyConfig(options.shortcutKeys || {});\n\n // process initial value\n const initialDates = stringToArray(\n element.value || element.dataset.date,\n config.dateDelimiter\n );\n delete element.dataset.date;\n const inputDateValues = processInputDates(this, initialDates);\n if (inputDateValues && inputDateValues.length > 0) {\n this.dates = inputDateValues;\n }\n if (inputField) {\n inputField.value = stringifyDates(this.dates, config);\n }\n\n // set up picekr element\n const picker = this.picker = new Picker(this);\n\n const keydownListener = [element, 'keydown', onKeydown.bind(null, this)];\n if (inputField) {\n registerListeners(this, [\n keydownListener,\n [inputField, 'focus', onFocus.bind(null, this)],\n [inputField, 'mousedown', onMousedown.bind(null, this)],\n [inputField, 'click', onClickInput.bind(null, this)],\n [inputField, 'paste', onPaste.bind(null, this)],\n // To detect a click on outside, just listening to mousedown is enough,\n // no need to listen to touchstart.\n // Actually, listening to touchstart can be a problem because, while\n // mousedown is fired only on tapping but not on swiping/pinching,\n // touchstart is fired on swiping/pinching as well.\n // (issue #95)\n [document, 'mousedown', onClickOutside.bind(null, this)],\n [window, 'resize', picker.place.bind(picker)]\n ]);\n } else {\n registerListeners(this, [keydownListener]);\n this.show();\n }\n }\n\n /**\n * Format Date object or time value in given format and language\n * @param {Date|Number} date - date or time value to format\n * @param {String|Object} format - format string or object that contains\n * toDisplay() custom formatter, whose signature is\n * - args:\n * - date: {Date} - Date instance of the date passed to the method\n * - format: {Object} - the format object passed to the method\n * - locale: {Object} - locale for the language specified by `lang`\n * - return:\n * {String} formatted date\n * @param {String} [lang=en] - language code for the locale to use\n * @return {String} formatted date\n */\n static formatDate(date, format, lang) {\n return formatDate(date, format, lang && locales[lang] || locales.en);\n }\n\n /**\n * Parse date string\n * @param {String|Date|Number} dateStr - date string, Date object or time\n * value to parse\n * @param {String|Object} format - format string or object that contains\n * toValue() custom parser, whose signature is\n * - args:\n * - dateStr: {String|Date|Number} - the dateStr passed to the method\n * - format: {Object} - the format object passed to the method\n * - locale: {Object} - locale for the language specified by `lang`\n * - return:\n * {Date|Number} parsed date or its time value\n * @param {String} [lang=en] - language code for the locale to use\n * @return {Number} time value of parsed date\n */\n static parseDate(dateStr, format, lang) {\n return parseDate(dateStr, format, lang && locales[lang] || locales.en);\n }\n\n /**\n * @type {Object} - Installed locales in `[languageCode]: localeObject` format\n * en`:_English (US)_ is pre-installed.\n */\n static get locales() {\n return locales;\n }\n\n /**\n * @type {Boolean} - Whether the picker element is shown. `true` whne shown\n */\n get active() {\n return !!(this.picker && this.picker.active);\n }\n\n /**\n * @type {HTMLDivElement} - DOM object of picker element\n */\n get pickerElement() {\n return this.picker ? this.picker.element : undefined;\n }\n\n /**\n * Set new values to the config options\n * @param {Object} options - config options to update\n */\n setOptions(options) {\n const newOptions = processOptions(options, this);\n Object.assign(this._options, options);\n Object.assign(this.config, newOptions);\n this.picker.setOptions(newOptions);\n\n refreshUI(this, 3);\n }\n\n /**\n * Show the picker element\n */\n show() {\n if (this.inputField) {\n const {config, inputField} = this;\n if (inputField.disabled || (inputField.readOnly && !config.enableOnReadonly)) {\n return;\n }\n if (!isActiveElement(inputField) && !config.disableTouchKeyboard) {\n this._showing = true;\n inputField.focus();\n delete this._showing;\n }\n }\n this.picker.show();\n }\n\n /**\n * Hide the picker element\n * Not available on inline picker\n */\n hide() {\n if (!this.inputField) {\n return;\n }\n this.picker.hide();\n this.picker.update().changeView(this.config.startView).render();\n }\n\n /**\n * Toggle the display of the picker element\n * Not available on inline picker\n *\n * Unlike hide(), the picker does not return to the start view when hiding.\n */\n toggle() {\n if (!this.picker.active) {\n this.show();\n } else if (this.inputField) {\n this.picker.hide();\n }\n }\n\n /**\n * Destroy the Datepicker instance\n * @return {Detepicker} - the instance destroyed\n */\n destroy() {\n this.hide();\n unregisterListeners(this);\n this.picker.detach();\n const element = this.element;\n element.classList.remove('datepicker-input');\n delete element.datepicker;\n return this;\n }\n\n /**\n * Get the selected date(s)\n *\n * The method returns a Date object of selected date by default, and returns\n * an array of selected dates in multidate mode. If format string is passed,\n * it returns date string(s) formatted in given format.\n *\n * @param {String} [format] - format string to stringify the date(s)\n * @return {Date|String|Date[]|String[]} - selected date(s), or if none is\n * selected, empty array in multidate mode and undefined in sigledate mode\n */\n getDate(format = undefined) {\n const callback = getOutputConverter(this, format);\n\n if (this.config.multidate) {\n return this.dates.map(callback);\n }\n if (this.dates.length > 0) {\n return callback(this.dates[0]);\n }\n }\n\n /**\n * Set selected date(s)\n *\n * In multidate mode, you can pass multiple dates as a series of arguments\n * or an array. (Since each date is parsed individually, the type of the\n * dates doesn't have to be the same.)\n * The given dates are used to toggle the select status of each date. The\n * number of selected dates is kept from exceeding the length set to\n * maxNumberOfDates.\n *\n * With clear: true option, the method can be used to clear the selection\n * and to replace the selection instead of toggling in multidate mode.\n * If the option is passed with no date arguments or an empty dates array,\n * it works as \"clear\" (clear the selection then set nothing), and if the\n * option is passed with new dates to select, it works as \"replace\" (clear\n * the selection then set the given dates)\n *\n * When render: false option is used, the method omits re-rendering the\n * picker element. In this case, you need to call refresh() method later in\n * order for the picker element to reflect the changes. The input field is\n * refreshed always regardless of this option.\n *\n * When invalid (unparsable, repeated, disabled or out-of-range) dates are\n * passed, the method ignores them and applies only valid ones. In the case\n * that all the given dates are invalid, which is distinguished from passing\n * no dates, the method considers it as an error and leaves the selection\n * untouched. (The input field also remains untouched unless revert: true\n * option is used.)\n * Replacing the selection with the same date(s) also causes a similar\n * situation. In both cases, the method does not refresh the picker element\n * unless forceRefresh: true option is used.\n *\n * If viewDate option is used, the method changes the focused date to the\n * specified date instead of the last item of the selection.\n *\n * @param {...(Date|Number|String)|Array} [dates] - Date strings, Date\n * objects, time values or mix of those for new selection\n * @param {Object} [options] - function options\n * - clear: {boolean} - Whether to clear the existing selection\n * defualt: false\n * - render: {boolean} - Whether to re-render the picker element\n * default: true\n * - autohide: {boolean} - Whether to hide the picker element after re-render\n * Ignored when used with render: false\n * default: config.autohide\n * - revert: {boolean} - Whether to refresh the input field when all the\n * passed dates are invalid\n * default: false\n * - forceRefresh: {boolean} - Whether to refresh the picker element when\n * passed dates don't change the existing selection\n * default: false\n * - viewDate: {Date|Number|String} - Date to be focused after setiing date(s)\n * default: The last item of the resulting selection, or defaultViewDate\n * config option if none is selected\n */\n setDate(...args) {\n const dates = [...args];\n const opts = {};\n const lastArg = lastItemOf(args);\n if (\n lastArg\n && typeof lastArg === 'object'\n && !Array.isArray(lastArg)\n && !(lastArg instanceof Date)\n ) {\n Object.assign(opts, dates.pop());\n }\n\n const inputDates = Array.isArray(dates[0]) ? dates[0] : dates;\n setDate(this, inputDates, opts);\n }\n\n /**\n * Update the selected date(s) with input field's value\n * Not available on inline picker\n *\n * The input field will be refreshed with properly formatted date string.\n *\n * In the case that all the entered dates are invalid (unparsable, repeated,\n * disabled or out-of-range), which is distinguished from empty input field,\n * the method leaves the input field untouched as well as the selection by\n * default. If revert: true option is used in this case, the input field is\n * refreshed with the existing selection.\n * The method also doesn't refresh the picker element in this case and when\n * the entered dates are the same as the existing selection. If\n * forceRefresh: true option is used, the picker element is refreshed in\n * these cases too.\n *\n * @param {Object} [options] - function options\n * - autohide: {boolean} - whether to hide the picker element after refresh\n * default: false\n * - revert: {boolean} - Whether to refresh the input field when all the\n * passed dates are invalid\n * default: false\n * - forceRefresh: {boolean} - Whether to refresh the picer element when\n * input field's value doesn't change the existing selection\n * default: false\n */\n update(options = undefined) {\n if (!this.inputField) {\n return;\n }\n\n const opts = Object.assign(options || {}, {clear: true, render: true, viewDate: undefined});\n const inputDates = stringToArray(this.inputField.value, this.config.dateDelimiter);\n setDate(this, inputDates, opts);\n }\n\n /**\n * Get the focused date\n *\n * The method returns a Date object of focused date by default. If format\n * string is passed, it returns date string formatted in given format.\n *\n * @param {String} [format] - format string to stringify the date\n * @return {Date|String} - focused date (viewDate)\n */\n getFocusedDate(format = undefined) {\n return getOutputConverter(this, format)(this.picker.viewDate);\n }\n\n /**\n * Set focused date\n *\n * By default, the method updates the focus on the view shown at the time,\n * or the one set to the startView config option if the picker is hidden.\n * When resetView: true is passed, the view displayed is changed to the\n * pickLevel config option's if the picker is shown.\n *\n * @param {Date|Number|String} viewDate - date string, Date object, time\n * values of the date to focus\n * @param {Boolean} [resetView] - whether to change the view to pickLevel\n * config option's when the picker is shown. Ignored when the picker is\n * hidden\n */\n setFocusedDate(viewDate, resetView = false) {\n const {config, picker, active, rangeSideIndex} = this;\n const pickLevel = config.pickLevel;\n const newViewDate = parseDate(viewDate, config.format, config.locale);\n if (newViewDate === undefined) {\n return;\n }\n\n picker.changeFocus(regularizeDate(newViewDate, pickLevel, rangeSideIndex));\n if (active && resetView) {\n picker.changeView(pickLevel);\n }\n picker.render();\n }\n\n /**\n * Refresh the picker element and the associated input field\n * @param {String} [target] - target item when refreshing one item only\n * 'picker' or 'input'\n * @param {Boolean} [forceRender] - whether to re-render the picker element\n * regardless of its state instead of optimized refresh\n */\n refresh(target = undefined, forceRender = false) {\n if (target && typeof target !== 'string') {\n forceRender = target;\n target = undefined;\n }\n\n let mode;\n if (target === 'picker') {\n mode = 2;\n } else if (target === 'input') {\n mode = 1;\n } else {\n mode = 3;\n }\n refreshUI(this, mode, !forceRender);\n }\n\n /**\n * Enter edit mode\n * Not available on inline picker or when the picker element is hidden\n */\n enterEditMode() {\n const inputField = this.inputField;\n if (!inputField || inputField.readOnly || !this.picker.active || this.editMode) {\n return;\n }\n this.editMode = true;\n inputField.classList.add('in-edit');\n }\n\n /**\n * Exit from edit mode\n * Not available on inline picker\n * @param {Object} [options] - function options\n * - update: {boolean} - whether to call update() after exiting\n * If false, input field is revert to the existing selection\n * default: false\n */\n exitEditMode(options = undefined) {\n if (!this.inputField || !this.editMode) {\n return;\n }\n const opts = Object.assign({update: false}, options);\n delete this.editMode;\n this.inputField.classList.remove('in-edit');\n if (opts.update) {\n this.update(opts);\n }\n }\n}\n"],"names":["module","exports","tz","load","root","factory","this","moment","undefined","version","default","cachedGuess","zones","links","countries","names","guesses","logError","momentVersion","split","major","minor","charCodeToInt","charCode","unpackBase60","string","i","parts","whole","fractional","multiplier","out","sign","charCodeAt","length","arrayToInt","array","mapIndices","source","indices","unpack","data","offsets","untils","Math","round","Infinity","intToUntil","name","abbrs","population","Zone","packedString","_set","Country","country_name","zone_names","OffsetAt","at","timeString","toTimeString","abbr","match","join","offset","getTimezoneOffset","ZoneScore","zone","offsetScore","abbrScore","findChange","low","high","mid","diff","Date","sortZoneScores","a","b","localeCompare","addToGuesses","guessesForUserOffsets","j","guessesOffset","offsetsLength","filteredGuesses","checkedOffsets","hasOwnProperty","push","rebuildGuess","intlName","Intl","DateTimeFormat","resolvedOptions","timeZone","normalizeName","e","zoneScore","change","next","nextOffset","startYear","getFullYear","last","lastOffset","userOffsets","zoneScores","getZone","scoreOffsetAt","sort","toLowerCase","replace","addZone","packed","normalized","caller","link","addLink","aliases","alias","normal0","normal1","needsOffset","m","isUnixTimestamp","_f","_a","_tzm","message","console","error","input","args","Array","prototype","slice","call","arguments","utc","apply","isMoment","add","parse","unpacked","_index","timestamp","num","arr","len","lo","hi","floor","closest","zone_name","Object","keys","filter","country_code","indexOf","offsetNext","offsetPrev","target","max","moveAmbiguousForward","moveInvalidForward","mom","utcOffset","offsetAt","abs","dataVersion","_zones","_links","_names","_countries","country_zones","toUpperCase","addCountries","zoneExists","didShowError","guess","ignoreCache","zonesForCountry","country","with_offset","map","old","fn","abbrWrap","_z","resetZoneWrap","defaultZone","updateOffset","keepTime","_isUTC","isValid","_d","z","Error","zoneName","zoneAbbr","local","setDefault","momentProperties","toString","monthsShortWithDots","monthsShortWithoutDots","monthsParse","monthsRegex","defineLocale","months","monthsShort","format","test","month","monthsShortRegex","monthsStrictRegex","monthsShortStrictRegex","longMonthsParse","shortMonthsParse","weekdays","weekdaysShort","weekdaysMin","weekdaysParseExact","longDateFormat","LT","LTS","L","LL","LLL","LLLL","calendar","sameDay","nextDay","nextWeek","lastDay","lastWeek","sameElse","relativeTime","future","past","s","ss","mm","h","hh","d","dd","w","ww","M","MM","y","yy","dayOfMonthOrdinalParse","ordinal","number","week","dow","doy","hookCallback","some","hooks","setHookCallback","callback","isArray","isObject","hasOwnProp","isObjectEmpty","obj","getOwnPropertyNames","k","isUndefined","isNumber","isDate","res","arrLen","extend","valueOf","createUTC","locale","strict","createLocalOrUTC","defaultParsingFlags","empty","unusedTokens","unusedInput","overflow","charsLeftOver","nullInput","invalidEra","invalidMonth","invalidFormat","userInvalidated","iso","parsedDateParts","era","meridiem","rfc2822","weekdayMismatch","getParsingFlags","_pf","flags","parsedParts","isNowValid","isNaN","getTime","invalidWeekday","_strict","bigHour","isFrozen","_isValid","createInvalid","NaN","fun","t","updateInProgress","copyConfig","to","from","prop","val","momentPropertiesLen","_isAMomentObject","_i","_l","_offset","_locale","Moment","config","warn","msg","suppressDeprecationWarnings","deprecate","firstTime","deprecationHandler","arg","key","argLen","stack","deprecations","deprecateSimple","isFunction","Function","set","_config","_dayOfMonthOrdinalParseLenient","RegExp","_dayOfMonthOrdinalParse","_ordinalParse","mergeConfigs","parentConfig","childConfig","Locale","defaultCalendar","now","output","_calendar","zeroFill","targetLength","forceSign","absNumber","zerosToFill","pow","substr","formattingTokens","localFormattingTokens","formatFunctions","formatTokenFunctions","addFormatToken","token","padded","func","localeData","removeFormattingTokens","makeFormatFunction","formatMoment","expandFormat","invalidDate","replaceLongDateFormatTokens","lastIndex","defaultLongDateFormat","_longDateFormat","formatUpper","tok","defaultInvalidDate","_invalidDate","defaultOrdinal","defaultDayOfMonthOrdinalParse","_ordinal","defaultRelativeTime","withoutSuffix","isFuture","_relativeTime","pastFuture","D","dates","date","days","day","weekday","E","isoweekdays","isoweekday","DDD","dayofyears","dayofyear","hours","hour","ms","milliseconds","millisecond","minutes","minute","Q","quarters","quarter","seconds","second","gg","weekyears","weekyear","GG","isoweekyears","isoweekyear","weeks","W","isoweeks","isoweek","years","year","normalizeUnits","units","normalizeObjectUnits","inputObject","normalizedProp","normalizedInput","priorities","isoWeekday","dayOfYear","weekYear","isoWeekYear","isoWeek","getPrioritizedUnits","unitsObj","u","unit","priority","regexes","match1","match2","match3","match4","match6","match1to2","match3to4","match5to6","match1to3","match1to4","match1to6","matchUnsigned","matchSigned","matchOffset","matchShortOffset","matchTimestamp","matchWord","match1to2NoLeadingZero","match1to2HasZero","addRegexToken","regex","strictRegex","isStrict","getParseRegexForToken","unescapeFormat","regexEscape","matched","p1","p2","p3","p4","absFloor","ceil","toInt","argumentForCoercion","coercedNumber","value","isFinite","tokens","addParseToken","tokenLen","addWeekParseToken","_w","addTimeToArrayFromToken","isLeapYear","YEAR","MONTH","DATE","HOUR","MINUTE","SECOND","MILLISECOND","WEEK","WEEKDAY","daysInYear","parseTwoDigitYear","parseInt","getSetYear","makeGetSet","getIsLeapYear","set$1","get","isUTC","getUTCMilliseconds","getMilliseconds","getUTCSeconds","getSeconds","getUTCMinutes","getMinutes","getUTCHours","getHours","getUTCDate","getDate","getUTCDay","getDay","getUTCMonth","getMonth","getUTCFullYear","setUTCMilliseconds","setMilliseconds","setUTCSeconds","setSeconds","setUTCMinutes","setMinutes","setUTCHours","setHours","setUTCDate","setDate","setUTCFullYear","setFullYear","stringGet","stringSet","prioritized","prioritizedLen","mod","n","x","daysInMonth","modMonth","o","defaultLocaleMonths","defaultLocaleMonthsShort","MONTHS_IN_FORMAT","defaultMonthsShortRegex","defaultMonthsRegex","localeMonths","_months","isFormat","localeMonthsShort","_monthsShort","handleStrictParse","monthName","ii","llc","toLocaleLowerCase","_monthsParse","_longMonthsParse","_shortMonthsParse","localeMonthsParse","_monthsParseExact","setMonth","min","setUTCMonth","getSetMonth","getDaysInMonth","computeMonthsParse","_monthsShortStrictRegex","_monthsShortRegex","_monthsStrictRegex","_monthsRegex","cmpLenRev","shortP","longP","shortPieces","longPieces","mixedPieces","createDate","createUTCDate","UTC","firstWeekOffset","fwd","dayOfYearFromWeeks","resYear","resDayOfYear","weekOfYear","resWeek","weekOffset","weeksInYear","weekOffsetNext","localeWeek","_week","defaultLocaleWeek","localeFirstDayOfWeek","localeFirstDayOfYear","getSetWeek","getSetISOWeek","parseWeekday","weekdaysParse","parseIsoWeekday","shiftWeekdays","ws","concat","weekdaysMinRegex","weekdaysShortRegex","weekdaysRegex","defaultLocaleWeekdays","defaultLocaleWeekdaysShort","defaultLocaleWeekdaysMin","defaultWeekdaysRegex","defaultWeekdaysShortRegex","defaultWeekdaysMinRegex","localeWeekdays","_weekdays","localeWeekdaysShort","_weekdaysShort","localeWeekdaysMin","_weekdaysMin","handleStrictParse$1","weekdayName","_weekdaysParse","_shortWeekdaysParse","_minWeekdaysParse","localeWeekdaysParse","_weekdaysParseExact","_fullWeekdaysParse","getSetDayOfWeek","getSetLocaleDayOfWeek","getSetISODayOfWeek","computeWeekdaysParse","_weekdaysStrictRegex","_weekdaysRegex","_weekdaysShortStrictRegex","_weekdaysShortRegex","_weekdaysMinStrictRegex","_weekdaysMinRegex","minp","shortp","longp","minPieces","hFormat","kFormat","lowercase","matchMeridiem","_meridiemParse","localeIsPM","charAt","kInput","_isPm","isPM","_meridiem","pos","pos1","pos2","defaultLocaleMeridiemParse","getSetHour","localeMeridiem","isLower","globalLocale","baseConfig","meridiemParse","locales","localeFamilies","commonPrefix","arr1","arr2","minl","normalizeLocale","chooseLocale","loadLocale","isLocaleNameSane","oldLocale","_abbr","getSetGlobalLocale","values","getLocale","parentLocale","forEach","updateLocale","tmpLocale","listLocales","checkOverflow","_overflowDayOfYear","_overflowWeeks","_overflowWeekday","extendedIsoRegex","basicIsoRegex","tzRegex","isoDates","isoTimes","aspNetJsonRegex","obsOffsets","UT","GMT","EDT","EST","CDT","CST","MDT","MST","PDT","PST","configFromISO","l","allowTime","dateFormat","timeFormat","tzFormat","exec","isoDatesLen","isoTimesLen","configFromStringAndFormat","extractFromRFC2822Strings","yearStr","monthStr","dayStr","hourStr","minuteStr","secondStr","result","untruncateYear","preprocessRFC2822","checkWeekday","weekdayStr","parsedInput","calculateOffset","obsOffset","militaryOffset","numOffset","hm","configFromRFC2822","parsedArray","configFromString","createFromInputFallback","defaults","c","currentDateArray","nowValue","_useUTC","configFromArray","currentDate","expectedWeekday","yearToUse","dayOfYearFromWeekInfo","_dayOfYear","_nextDay","temp","weekdayOverflow","curWeek","createLocal","ISO_8601","RFC_2822","skipped","stringLength","totalParsedInputLength","meridiemFixWrap","erasConvertYear","isPm","meridiemHour","configFromStringAndArray","tempConfig","bestMoment","scoreToBeat","currentScore","validFormatFound","bestFormatIsValid","configfLen","score","configFromObject","dayOrDate","createFromConfig","prepareConfig","preparse","configFromInput","prototypeMin","other","prototypeMax","pickBy","moments","ordering","isDurationValid","unitHasDecimal","orderLen","parseFloat","isValid$1","createInvalid$1","createDuration","Duration","duration","_milliseconds","_days","_data","_bubble","isDuration","absRound","compareArrays","array1","array2","dontConvert","lengthDiff","diffs","separator","offsetFromString","chunkOffset","matcher","matches","cloneWithOffset","model","clone","setTime","getDateOffset","getSetOffset","keepLocalTime","keepMinutes","localAdjust","_changeInProgress","addSubtract","getSetZone","setOffsetToUTC","setOffsetToLocal","subtract","setOffsetToParsedOffset","tZone","hasAlignedHourOffset","isDaylightSavingTime","isDaylightSavingTimeShifted","_isDSTShifted","toArray","isLocal","isUtcOffset","isUtc","aspNetRegex","isoRegex","ret","diffRes","parseIso","momentsDifference","inp","positiveMomentsDifference","base","isAfter","isBefore","createAdder","direction","period","tmp","isAdding","invalid","isString","String","isMomentInput","isNumberOrStringArray","isMomentInputObject","property","objectTest","propertyTest","properties","propertyLen","arrayTest","dataTypeTest","item","isCalendarSpec","getCalendarFormat","myMoment","calendar$1","time","formats","sod","startOf","calendarFormat","localInput","endOf","isBetween","inclusivity","localFrom","localTo","isSame","inputMs","isSameOrAfter","isSameOrBefore","asFloat","that","zoneDelta","monthDiff","wholeMonthDiff","anchor","toISOString","keepOffset","toDate","inspect","prefix","datetime","suffix","inputString","defaultFormatUtc","defaultFormat","postformat","humanize","fromNow","toNow","newLocaleData","lang","MS_PER_SECOND","MS_PER_MINUTE","MS_PER_HOUR","MS_PER_400_YEARS","mod$1","dividend","divisor","localStartOfDate","utcStartOfDate","startOfDate","unix","toObject","toJSON","isValid$2","parsingFlags","invalidAt","creationData","localeEras","eras","_eras","since","until","localeErasParse","eraName","narrow","localeErasConvertYear","dir","getEraName","getEraNarrow","getEraAbbr","getEraYear","erasNameRegex","computeErasParse","_erasNameRegex","_erasRegex","erasAbbrRegex","_erasAbbrRegex","erasNarrowRegex","_erasNarrowRegex","matchEraAbbr","matchEraName","matchEraNarrow","matchEraYearOrdinal","_eraYearOrdinalRegex","erasName","erasAbbr","erasNarrow","abbrPieces","namePieces","narrowPieces","addWeekYearFormatToken","getter","getSetWeekYear","getSetWeekYearHelper","getSetISOWeekYear","getISOWeeksInYear","getISOWeeksInISOWeekYear","getWeeksInYear","weekInfo","getWeeksInWeekYear","weeksTarget","setWeekAll","dayOfYearData","getSetQuarter","erasParse","eraYearOrdinalParse","getSetDayOfMonth","getSetDayOfYear","getSetMinute","getSetMillisecond","getSetSecond","parseMs","getZoneAbbr","getZoneName","proto","createUnix","createInZone","parseZone","preParsePostFormat","Symbol","for","eraNarrow","eraAbbr","eraYear","isoWeeks","weeksInWeekYear","isoWeeksInYear","isoWeeksInISOWeekYear","isDST","isDSTShifted","proto$1","get$1","index","field","setter","listMonthsImpl","listWeekdaysImpl","localeSorted","shift","listMonths","listMonthsShort","listWeekdays","listWeekdaysShort","listWeekdaysMin","firstDayOfYear","firstDayOfWeek","langData","mathAbs","addSubtract$1","add$1","subtract$1","absCeil","bubble","monthsFromDays","monthsToDays","daysToMonths","as","makeAs","asMilliseconds","asSeconds","asMinutes","asHours","asDays","asWeeks","asMonths","asQuarters","asYears","valueOf$1","clone$1","get$2","makeGetter","thresholds","substituteTimeAgo","relativeTime$1","posNegDuration","getSetRelativeTimeRounding","roundingFunction","getSetRelativeTimeThreshold","threshold","limit","argWithSuffix","argThresholds","withSuffix","th","assign","abs$1","toISOString$1","totalSign","ymSign","daysSign","hmsSign","total","toFixed","proto$2","toIsoString","relativeTimeRounding","relativeTimeThreshold","HTML5_FMT","DATETIME_LOCAL","DATETIME_LOCAL_SECONDS","DATETIME_LOCAL_MS","TIME","TIME_SECONDS","TIME_MS","nl","daysShort","daysMin","today","monthsTitle","clear","weekStart","stripTime","timeValue","dateValue","newDate","addDays","amount","addWeeks","addMonths","monthsToSet","expectedMonth","addYears","dayDiff","dayOfTheWeekOf","baseDate","dayOfWeek","baseDay","calcWeekNum","dayOfTheWeek","sameDayOfFirstWeek","getIsoWeek","thuOfTheWeek","calcTraditionalWeekNumber","startOfFirstWeek","startOfTheWeek","weekNum","getWesternTradWeek","getMidEasternWeek","startOfYearPeriod","regularizeDate","timeSpan","useLastDate","lastItemOf","pushUnique","items","includes","stringToArray","str","isInRange","testVal","limitToRange","createTagRepeat","tagName","repeat","attributes","html","reduce","src","attr","optimizeTemplateHTML","reFormatTokens","reNonDateParts","knownFormats","parseFns","monthIndex","compareNames","startsWith","findIndex","normalizeMonth","formatFns","padZero","DD","yyyy","padStart","parseFormatString","separators","partFormatters","partParserKeys","find","part","parser","dateStr","dateParts","dtParts","origDate","formatter","parseDate","toValue","dateObj","toDisplay","range","document","createRange","parseHTML","createContextualFragment","getParent","el","parentElement","parentNode","ShadowRoot","host","isActiveElement","getRootNode","activeElement","hideElement","style","display","dataset","styleDisplay","showElement","emptyChildNodes","firstChild","removeChild","listenerRegistry","WeakMap","addEventListener","removeEventListener","EventTarget","keyObj","listeners","registered","listener","Event","composedPath","getComposedPath","node","path","parent","defaultView","findFromPath","criteria","currentTarget","rest","findElementInEventPath","ev","selector","Element","en","titleFormat","autohide","beforeShowDay","beforeShowDecade","beforeShowMonth","beforeShowYear","clearButton","dateDelimiter","datesDisabled","daysOfWeekDisabled","daysOfWeekHighlighted","defaultViewDate","disableTouchKeyboard","enableOnReadonly","language","maxDate","maxNumberOfDates","maxView","minDate","nextArrow","orientation","pickLevel","prevArrow","showDaysOfWeek","showOnClick","showOnFocus","startView","title","todayButton","todayButtonMode","todayHighlight","updateOnBlur","weekNumbers","defaultLang","defaultWeekStart","defaultOptions","sanitizeDOW","determineGetWeekMethod","numberingMode","updateWeekStart","newValue","weekEnd","getWeekNumber","validateDate","origValue","validateViewId","viewId","replaceOptions","options","convert","processOptions","datepicker","inOpts","constructor","rangeEnd","rangeSideIndex","origLocale","hasToDisplay","hasToValue","validFormatString","newPickLevel","minDt","maxDt","defaultMinDt","dtsDisabled","checkDisabled","disabled","dt","viewDate","wkStart","Number","method","startOfWeek","multidate","newMaxView","newStartView","childNodes","entries","defaultShortcutKeys","show","hide","toggle","prevButton","ctrlOrMetaKey","nextButton","viewSwitch","exitEditMode","getButtons","buttonList","classes","class","View","picker","element","selected","isRangeEnd","init","isMinView","id","setOptions","updateFocus","updateSelection","prepareForRender","switchLabel","prevButtonDisabled","nextButtonDisabled","setViewSwitchLabel","setPrevButtonDisabled","setNextButtonDisabled","setDisabled","classList","performBeforeHook","beforeShow","enabled","extraClasses","content","newChildNodes","DocumentFragment","appendChild","replaceChildNodes","renderCell","cellVal","outOfScope","textContent","className","cellClass","first","rangeStart","focused","refreshCell","remove","changeFocusedCell","cellIndex","grid","querySelectorAll","children","DaysView","super","onConstruction","inner","daysTemplate","lastChild","updateDOW","dayNames","switchLabelFormat","weeksElem","weekNumbersTemplate","insertBefore","viewYear","viewMonth","firstOfMonth","start","rangepicker","render","dateOfWeekStart","current","refresh","refreshFocus","computeMonthRange","thisYear","startY","startM","endY","endM","MonthsView","ix","monthNames","minYear","minMonth","minDateObj","maxYear","maxMonth","maxDateObj","yrOutOfRange","isMinYear","isMaxYear","YearsView","word","navStep","step","beforeShowOption","ch","triggerDatepickerEvent","type","bubbles","cancelable","detail","currentView","dispatchEvent","CustomEvent","goToPrevOrNext","newViewDate","changeFocus","switchView","changeView","clearSelection","goToOrSelectToday","forceRefresh","setFocusedDate","unfocus","onBlur","update","revert","once","goToSelectedMonthOrYear","selection","onClickViewSwitch","onClickPrevButton","onClickNextButton","onClickView","contains","onMousedownPicker","preventDefault","orientClasses","toPx","processPickerOptions","controls","cloneNode","computeResetViewDate","setViewDate","_oldViewDate","getTextDirection","window","getComputedStyle","findScrollParents","body","Picker","inputField","template","pickerTemplate","buttonClass","header","main","footer","firstElementChild","lastElementChild","elementClass","bind","views","container","after","view","detach","active","inputDirection","removeAttribute","place","blur","width","calendarWidth","height","calendarHeight","getBoundingClientRect","offsetParent","left","inputLeft","top","inputTop","right","inputRight","bottom","inputBottom","inputWidth","inputHeight","orientX","orientY","offsetParentRect","scrollLeft","scrollTop","scrollX","scrollY","scrollParent","scrollAreaLeft","scrollAreaTop","clientWidth","scrollAreaRight","clientHeight","scrollAreaBottom","documentElement","scrollParentRect","adjustment","labelText","_oldView","_renderMethod","quickRender","oldView","oldViewDate","renderMethod","replaceChild","findNextAvailableOne","addFn","increase","testFn","moveByArrowKey","vertical","onKeydown","editMode","altKey","shiftKey","ctrlKey","metaKey","cancelEvent","stopPropagation","shortcutKeys","keyInfo","shortcut","keyDef","action","handleArrowKeyPress","enterEditMode","onFocus","_showing","onMousedown","_active","_clicking","setTimeout","onClickInput","clearTimeout","onPaste","clipboardData","types","onClickOutside","pickerElem","stringifyDates","processInputDates","inputDates","origDates","newDates","refreshUI","mode","newView","getOutputConverter","HTMLElement","querySelector","inputs","datepickers","_options","keyDefs","normalizedDef","createShortcutKeyConfig","initialDates","inputDateValues","keydownListener","formatDate","pickerElement","newOptions","readOnly","focus","destroy","delete","opts","lastArg","pop","getFocusedDate","resetView","forceRender"],"sourceRoot":""}