{"version":3,"file":"686.80c5035a73663556.bundle.js","mappings":";iIAAe,SAASA,EAAUC,GAChC,GAAY,MAARA,EACF,OAAOC,OAGT,GAAwB,oBAApBD,EAAKE,WAAkC,CACzC,IAAIC,EAAgBH,EAAKG,cACzB,OAAOA,GAAgBA,EAAcC,aAAwBH,MAC/D,CAEA,OAAOD,CACT,CCTA,SAASK,EAAUL,GAEjB,OAAOA,aADUD,EAAUC,GAAMM,SACIN,aAAgBM,OACvD,CAEA,SAASC,EAAcP,GAErB,OAAOA,aADUD,EAAUC,GAAMQ,aACIR,aAAgBQ,WACvD,CAEA,SAASC,EAAaT,GAEpB,MAA0B,oBAAfU,aAKJV,aADUD,EAAUC,GAAMU,YACIV,aAAgBU,WACvD,oBCpBO,IAAI,EAAMC,KAAKC,IACX,EAAMD,KAAKE,IACXC,EAAQH,KAAKG,MCFT,SAASC,IACtB,IAAIC,EAASC,UAAUC,cAEvB,OAAc,MAAVF,GAAkBA,EAAOG,OACpBH,EAAOG,OAAOC,KAAI,SAAUC,GACjC,OAAOA,EAAKC,MAAQ,IAAMD,EAAKE,OACjC,IAAGC,KAAK,KAGHP,UAAUQ,SACnB,CCTe,SAASC,IACtB,OAAQ,iCAAiCC,KAAKZ,IAChD,CCCe,SAASa,EAAsBC,EAASC,EAAcC,QAC9C,IAAjBD,IACFA,GAAe,QAGO,IAApBC,IACFA,GAAkB,GAGpB,IAAIC,EAAaH,EAAQD,wBACrBK,EAAS,EACTC,EAAS,EAETJ,GAAgBvB,EAAcsB,KAChCI,EAASJ,EAAQM,YAAc,GAAIrB,EAAMkB,EAAWI,OAASP,EAAQM,aAAmB,EACxFD,EAASL,EAAQQ,aAAe,GAAIvB,EAAMkB,EAAWM,QAAUT,EAAQQ,cAAoB,GAG7F,IACIE,GADOlC,EAAUwB,GAAW9B,EAAU8B,GAAW5B,QAC3BsC,eAEtBC,GAAoBd,KAAsBK,EAC1CU,GAAKT,EAAWU,MAAQF,GAAoBD,EAAiBA,EAAeI,WAAa,IAAMV,EAC/FW,GAAKZ,EAAWa,KAAOL,GAAoBD,EAAiBA,EAAeO,UAAY,IAAMZ,EAC7FE,EAAQJ,EAAWI,MAAQH,EAC3BK,EAASN,EAAWM,OAASJ,EACjC,MAAO,CACLE,MAAOA,EACPE,OAAQA,EACRO,IAAKD,EACLG,MAAON,EAAIL,EACXY,OAAQJ,EAAIN,EACZI,KAAMD,EACNA,EAAGA,EACHG,EAAGA,EAEP,CCvCe,SAASK,EAAgBjD,GACtC,IAAIkD,EAAMnD,EAAUC,GAGpB,MAAO,CACLmD,WAHeD,EAAIE,YAInBC,UAHcH,EAAII,YAKtB,CCTe,SAASC,EAAY1B,GAClC,OAAOA,GAAWA,EAAQ2B,UAAY,IAAIC,cAAgB,IAC5D,CCDe,SAASC,EAAmB7B,GAEzC,QAASxB,EAAUwB,GAAWA,EAAQ1B,cACtC0B,EAAQ8B,WAAa1D,OAAO0D,UAAUC,eACxC,CCFe,SAASC,EAAoBhC,GAQ1C,OAAOD,EAAsB8B,EAAmB7B,IAAUa,KAAOO,EAAgBpB,GAASsB,UAC5F,CCXe,SAASW,EAAiBjC,GACvC,OAAO9B,EAAU8B,GAASiC,iBAAiBjC,EAC7C,CCFe,SAASkC,EAAelC,GAErC,IAAImC,EAAoBF,EAAiBjC,GACrCoC,EAAWD,EAAkBC,SAC7BC,EAAYF,EAAkBE,UAC9BC,EAAYH,EAAkBG,UAElC,MAAO,6BAA6BxC,KAAKsC,EAAWE,EAAYD,EAClE,CCSe,SAASE,EAAiBC,EAAyBC,EAAcC,QAC9D,IAAZA,IACFA,GAAU,GAGZ,ICnBoCvE,ECJO6B,EFuBvC2C,EAA0BjE,EAAc+D,GACxCG,EAAuBlE,EAAc+D,IAf3C,SAAyBzC,GACvB,IAAI6C,EAAO7C,EAAQD,wBACfK,EAASnB,EAAM4D,EAAKtC,OAASP,EAAQM,aAAe,EACpDD,EAASpB,EAAM4D,EAAKpC,QAAUT,EAAQQ,cAAgB,EAC1D,OAAkB,IAAXJ,GAA2B,IAAXC,CACzB,CAU4DyC,CAAgBL,GACtEV,EAAkBF,EAAmBY,GACrCI,EAAO9C,EAAsByC,EAAyBI,EAAsBF,GAC5EK,EAAS,CACXzB,WAAY,EACZE,UAAW,GAETwB,EAAU,CACZpC,EAAG,EACHG,EAAG,GAkBL,OAfI4B,IAA4BA,IAA4BD,MACxB,SAA9BhB,EAAYe,IAChBP,EAAeH,MACbgB,GCnCgC5E,EDmCTsE,KClCdvE,EAAUC,IAAUO,EAAcP,GCJxC,CACLmD,YAFyCtB,EDQb7B,GCNRmD,WACpBE,UAAWxB,EAAQwB,WDGZJ,EAAgBjD,IDoCnBO,EAAc+D,KAChBO,EAAUjD,EAAsB0C,GAAc,IACtC7B,GAAK6B,EAAaQ,WAC1BD,EAAQjC,GAAK0B,EAAaS,WACjBnB,IACTiB,EAAQpC,EAAIoB,EAAoBD,KAI7B,CACLnB,EAAGiC,EAAKhC,KAAOkC,EAAOzB,WAAa0B,EAAQpC,EAC3CG,EAAG8B,EAAK7B,IAAM+B,EAAOvB,UAAYwB,EAAQjC,EACzCR,MAAOsC,EAAKtC,MACZE,OAAQoC,EAAKpC,OAEjB,CGtDe,SAAS0C,EAAcnD,GACpC,IAAIG,EAAaJ,EAAsBC,GAGnCO,EAAQP,EAAQM,YAChBG,EAAST,EAAQQ,aAUrB,OARI1B,KAAKsE,IAAIjD,EAAWI,MAAQA,IAAU,IACxCA,EAAQJ,EAAWI,OAGjBzB,KAAKsE,IAAIjD,EAAWM,OAASA,IAAW,IAC1CA,EAASN,EAAWM,QAGf,CACLG,EAAGZ,EAAQc,WACXC,EAAGf,EAAQiB,UACXV,MAAOA,EACPE,OAAQA,EAEZ,CCrBe,SAAS4C,EAAcrD,GACpC,MAA6B,SAAzB0B,EAAY1B,GACPA,EAMPA,EAAQsD,cACRtD,EAAQuD,aACR3E,EAAaoB,GAAWA,EAAQwD,KAAO,OAEvC3B,EAAmB7B,EAGvB,CCde,SAASyD,EAAgBtF,GACtC,MAAI,CAAC,OAAQ,OAAQ,aAAauF,QAAQhC,EAAYvD,KAAU,EAEvDA,EAAKG,cAAcqF,KAGxBjF,EAAcP,IAAS+D,EAAe/D,GACjCA,EAGFsF,EAAgBJ,EAAclF,GACvC,CCJe,SAASyF,EAAkB5D,EAAS6D,GACjD,IAAIC,OAES,IAATD,IACFA,EAAO,IAGT,IAAIE,EAAeN,EAAgBzD,GAC/BgE,EAASD,KAAqE,OAAlDD,EAAwB9D,EAAQ1B,oBAAyB,EAASwF,EAAsBH,MACpHtC,EAAMnD,EAAU6F,GAChBE,EAASD,EAAS,CAAC3C,GAAK6C,OAAO7C,EAAIX,gBAAkB,GAAIwB,EAAe6B,GAAgBA,EAAe,IAAMA,EAC7GI,EAAcN,EAAKK,OAAOD,GAC9B,OAAOD,EAASG,EAChBA,EAAYD,OAAON,EAAkBP,EAAcY,IACrD,CCxBe,SAASG,EAAepE,GACrC,MAAO,CAAC,QAAS,KAAM,MAAM0D,QAAQhC,EAAY1B,KAAa,CAChE,CCKA,SAASqE,EAAoBrE,GAC3B,OAAKtB,EAAcsB,IACoB,UAAvCiC,EAAiBjC,GAASsE,SAInBtE,EAAQyC,aAHN,IAIX,CAwCe,SAAS8B,EAAgBvE,GAItC,IAHA,IAAI5B,EAASF,EAAU8B,GACnByC,EAAe4B,EAAoBrE,GAEhCyC,GAAgB2B,EAAe3B,IAA6D,WAA5CR,EAAiBQ,GAAc6B,UACpF7B,EAAe4B,EAAoB5B,GAGrC,OAAIA,IAA+C,SAA9Bf,EAAYe,IAA0D,SAA9Bf,EAAYe,IAAwE,WAA5CR,EAAiBQ,GAAc6B,UAC3HlG,EAGFqE,GAhDT,SAA4BzC,GAC1B,IAAIwE,EAAY,WAAW1E,KAAKZ,KAGhC,GAFW,WAAWY,KAAKZ,MAEfR,EAAcsB,IAII,UAFXiC,EAAiBjC,GAEnBsE,SACb,OAAO,KAIX,IAAIG,EAAcpB,EAAcrD,GAMhC,IAJIpB,EAAa6F,KACfA,EAAcA,EAAYjB,MAGrB9E,EAAc+F,IAAgB,CAAC,OAAQ,QAAQf,QAAQhC,EAAY+C,IAAgB,GAAG,CAC3F,IAAIC,EAAMzC,EAAiBwC,GAI3B,GAAsB,SAAlBC,EAAIC,WAA4C,SAApBD,EAAIE,aAA0C,UAAhBF,EAAIG,UAAiF,IAA1D,CAAC,YAAa,eAAenB,QAAQgB,EAAII,aAAsBN,GAAgC,WAAnBE,EAAII,YAA2BN,GAAaE,EAAIK,QAAyB,SAAfL,EAAIK,OACjO,OAAON,EAEPA,EAAcA,EAAYlB,UAE9B,CAEA,OAAO,IACT,CAgByByB,CAAmBhF,IAAY5B,CACxD,CCpEO,IAAI,EAAM,MACN+C,EAAS,SACTD,EAAQ,QACRL,EAAO,OACPoE,EAAO,OACPC,EAAiB,CAAC,EAAK/D,EAAQD,EAAOL,GACtCsE,EAAQ,QACRC,EAAM,MACNC,EAAkB,kBAClBC,EAAW,WACXC,EAAS,SACTC,EAAY,YACZC,EAAmCP,EAAeQ,QAAO,SAAUC,EAAKC,GACjF,OAAOD,EAAIzB,OAAO,CAAC0B,EAAY,IAAMT,EAAOS,EAAY,IAAMR,GAChE,GAAG,IACQ,EAA0B,GAAGlB,OAAOgB,EAAgB,CAACD,IAAOS,QAAO,SAAUC,EAAKC,GAC3F,OAAOD,EAAIzB,OAAO,CAAC0B,EAAWA,EAAY,IAAMT,EAAOS,EAAY,IAAMR,GAC3E,GAAG,IAaQS,EAAiB,CAXJ,aACN,OACK,YAEC,aACN,OACK,YAEE,cACN,QACK,cC3BxB,SAASC,EAAMC,GACb,IAAIxG,EAAM,IAAIyG,IACVC,EAAU,IAAIC,IACdC,EAAS,GAKb,SAASC,EAAKC,GACZJ,EAAQK,IAAID,EAASE,MACN,GAAGrC,OAAOmC,EAASG,UAAY,GAAIH,EAASI,kBAAoB,IACtEC,SAAQ,SAAUC,GACzB,IAAKV,EAAQW,IAAID,GAAM,CACrB,IAAIE,EAActH,EAAIuH,IAAIH,GAEtBE,GACFT,EAAKS,EAET,CACF,IACAV,EAAOY,KAAKV,EACd,CAQA,OAzBAN,EAAUW,SAAQ,SAAUL,GAC1B9G,EAAIyH,IAAIX,EAASE,KAAMF,EACzB,IAiBAN,EAAUW,SAAQ,SAAUL,GACrBJ,EAAQW,IAAIP,EAASE,OAExBH,EAAKC,EAET,IACOF,CACT,yBChBIc,EAAkB,CACpBrB,UAAW,SACXG,UAAW,GACXmB,SAAU,YAGZ,SAASC,IACP,IAAK,IAAIC,EAAOC,UAAUC,OAAQC,EAAO,IAAIC,MAAMJ,GAAOK,EAAO,EAAGA,EAAOL,EAAMK,IAC/EF,EAAKE,GAAQJ,UAAUI,GAGzB,OAAQF,EAAKG,MAAK,SAAU1H,GAC1B,QAASA,GAAoD,mBAAlCA,EAAQD,sBACrC,GACF,CAEO,SAAS4H,EAAgBC,QACL,IAArBA,IACFA,EAAmB,CAAC,GAGtB,IAAIC,EAAoBD,EACpBE,EAAwBD,EAAkBE,iBAC1CA,OAA6C,IAA1BD,EAAmC,GAAKA,EAC3DE,EAAyBH,EAAkBI,eAC3CA,OAA4C,IAA3BD,EAAoCf,EAAkBe,EAC3E,OAAO,SAAsBxC,EAAWD,EAAQ2C,QAC9B,IAAZA,IACFA,EAAUD,GAGZ,IC/C6BE,EAC3BC,ED8CEC,EAAQ,CACVzC,UAAW,SACX0C,iBAAkB,GAClBJ,QAASK,OAAOC,OAAO,CAAC,EAAGvB,EAAiBgB,GAC5CQ,cAAe,CAAC,EAChBC,SAAU,CACRlD,UAAWA,EACXD,OAAQA,GAEVoD,WAAY,CAAC,EACbC,OAAQ,CAAC,GAEPC,EAAmB,GACnBC,GAAc,EACdC,EAAW,CACbV,MAAOA,EACPW,WAAY,SAAoBC,GAC9B,IAAIf,EAAsC,mBAArBe,EAAkCA,EAAiBZ,EAAMH,SAAWe,EACzFC,IACAb,EAAMH,QAAUK,OAAOC,OAAO,CAAC,EAAGP,EAAgBI,EAAMH,QAASA,GACjEG,EAAMc,cAAgB,CACpB3D,UAAWhH,EAAUgH,GAAa5B,EAAkB4B,GAAaA,EAAU4D,eAAiBxF,EAAkB4B,EAAU4D,gBAAkB,GAC1I7D,OAAQ3B,EAAkB2B,IAI5B,IEzE4BQ,EAC9BsD,EFwEMf,EDvCG,SAAwBvC,GAErC,IAAIuC,EAAmBxC,EAAMC,GAE7B,OAAOF,EAAeH,QAAO,SAAUC,EAAK2D,GAC1C,OAAO3D,EAAIzB,OAAOoE,EAAiBvD,QAAO,SAAUsB,GAClD,OAAOA,EAASiD,QAAUA,CAC5B,IACF,GAAG,GACL,CC8B+BC,EEzEKxD,EFyEsB,GAAG7B,OAAO6D,EAAkBM,EAAMH,QAAQnC,WExE9FsD,EAAStD,EAAUL,QAAO,SAAU2D,EAAQG,GAC9C,IAAIC,EAAWJ,EAAOG,EAAQjD,MAK9B,OAJA8C,EAAOG,EAAQjD,MAAQkD,EAAWlB,OAAOC,OAAO,CAAC,EAAGiB,EAAUD,EAAS,CACrEtB,QAASK,OAAOC,OAAO,CAAC,EAAGiB,EAASvB,QAASsB,EAAQtB,SACrDwB,KAAMnB,OAAOC,OAAO,CAAC,EAAGiB,EAASC,KAAMF,EAAQE,QAC5CF,EACEH,CACT,GAAG,CAAC,GAEGd,OAAOoB,KAAKN,GAAQ9J,KAAI,SAAUqK,GACvC,OAAOP,EAAOO,EAChB,MFsGM,OAvCAvB,EAAMC,iBAAmBA,EAAiBvD,QAAO,SAAU8E,GACzD,OAAOA,EAAEC,OACX,IAoJFzB,EAAMC,iBAAiB5B,SAAQ,SAAUqD,GACvC,IAAIxD,EAAOwD,EAAMxD,KACbyD,EAAgBD,EAAM7B,QACtBA,OAA4B,IAAlB8B,EAA2B,CAAC,EAAIA,EAC1CC,EAASF,EAAME,OAEnB,GAAsB,mBAAXA,EAAuB,CAChC,IAAIC,EAAYD,EAAO,CACrB5B,MAAOA,EACP9B,KAAMA,EACNwC,SAAUA,EACVb,QAASA,IAKXW,EAAiB9B,KAAKmD,GAFT,WAAmB,EAGlC,CACF,IAjISnB,EAASoB,QAClB,EAMAC,YAAa,WACX,IAAItB,EAAJ,CAIA,IAAIuB,EAAkBhC,EAAMK,SACxBlD,EAAY6E,EAAgB7E,UAC5BD,EAAS8E,EAAgB9E,OAG7B,GAAK4B,EAAiB3B,EAAWD,GAAjC,CASA8C,EAAMiC,MAAQ,CACZ9E,UAAWjD,EAAiBiD,EAAWjB,EAAgBgB,GAAoC,UAA3B8C,EAAMH,QAAQhB,UAC9E3B,OAAQpC,EAAcoC,IAOxB8C,EAAMkC,OAAQ,EACdlC,EAAMzC,UAAYyC,EAAMH,QAAQtC,UAKhCyC,EAAMC,iBAAiB5B,SAAQ,SAAUL,GACvC,OAAOgC,EAAMI,cAAcpC,EAASE,MAAQgC,OAAOC,OAAO,CAAC,EAAGnC,EAASqD,KACzE,IAGA,IAFA,IAESc,EAAQ,EAAGA,EAAQnC,EAAMC,iBAAiBhB,OAAQkD,IAUzD,IAAoB,IAAhBnC,EAAMkC,MAAV,CAMA,IAAIE,EAAwBpC,EAAMC,iBAAiBkC,GAC/CrC,EAAKsC,EAAsBtC,GAC3BuC,EAAyBD,EAAsBvC,QAC/CyC,OAAsC,IAA3BD,EAAoC,CAAC,EAAIA,EACpDnE,EAAOkE,EAAsBlE,KAEf,mBAAP4B,IACTE,EAAQF,EAAG,CACTE,MAAOA,EACPH,QAASyC,EACTpE,KAAMA,EACNwC,SAAUA,KACNV,EAdR,MAHEA,EAAMkC,OAAQ,EACdC,GAAS,CAnCb,CAbA,CAmEF,EAGAL,QClM2BhC,EDkMV,WACf,OAAO,IAAI,GAAQ,SAAUyC,GAC3B7B,EAASqB,cACTQ,EAAQvC,EACV,GACF,ECrMG,WAUL,OATKD,IACHA,EAAU,IAAIyC,GAAQ,SAAUD,GAC9BC,EAAQD,UAAUE,MAAK,WACrB1C,OAAU2C,EACVH,EAAQzC,IACV,GACF,KAGKC,CACT,GD2LI4C,QAAS,WACP9B,IACAJ,GAAc,CAChB,GAGF,IAAK3B,EAAiB3B,EAAWD,GAK/B,OAAOwD,EAmCT,SAASG,IACPL,EAAiBnC,SAAQ,SAAUyB,GACjC,OAAOA,GACT,IACAU,EAAmB,EACrB,CAEA,OAvCAE,EAASC,WAAWd,GAAS4C,MAAK,SAAUzC,IACrCS,GAAeZ,EAAQ+C,eAC1B/C,EAAQ+C,cAAc5C,EAE1B,IAmCOU,CACT,CACF,CACO,IG9PHmC,EAAU,CACZA,SAAS,GCFI,SAASC,EAAiBvF,GACvC,OAAOA,EAAUwF,MAAM,KAAK,EAC9B,CCHe,SAASC,EAAazF,GACnC,OAAOA,EAAUwF,MAAM,KAAK,EAC9B,CCFe,SAASE,EAAyB1F,GAC/C,MAAO,CAAC,MAAO,UAAUlC,QAAQkC,IAAc,EAAI,IAAM,GAC3D,CCEe,SAAS2F,EAAeC,GACrC,IAOIxI,EAPAwC,EAAYgG,EAAKhG,UACjBxF,EAAUwL,EAAKxL,QACf4F,EAAY4F,EAAK5F,UACjB6F,EAAgB7F,EAAYuF,EAAiBvF,GAAa,KAC1D8F,EAAY9F,EAAYyF,EAAazF,GAAa,KAClD+F,EAAUnG,EAAU5E,EAAI4E,EAAUjF,MAAQ,EAAIP,EAAQO,MAAQ,EAC9DqL,EAAUpG,EAAUzE,EAAIyE,EAAU/E,OAAS,EAAIT,EAAQS,OAAS,EAGpE,OAAQgL,GACN,KAAK,EACHzI,EAAU,CACRpC,EAAG+K,EACH5K,EAAGyE,EAAUzE,EAAIf,EAAQS,QAE3B,MAEF,KAAKU,EACH6B,EAAU,CACRpC,EAAG+K,EACH5K,EAAGyE,EAAUzE,EAAIyE,EAAU/E,QAE7B,MAEF,KAAKS,EACH8B,EAAU,CACRpC,EAAG4E,EAAU5E,EAAI4E,EAAUjF,MAC3BQ,EAAG6K,GAEL,MAEF,KAAK/K,EACHmC,EAAU,CACRpC,EAAG4E,EAAU5E,EAAIZ,EAAQO,MACzBQ,EAAG6K,GAEL,MAEF,QACE5I,EAAU,CACRpC,EAAG4E,EAAU5E,EACbG,EAAGyE,EAAUzE,GAInB,IAAI8K,EAAWJ,EAAgBH,EAAyBG,GAAiB,KAEzE,GAAgB,MAAZI,EAAkB,CACpB,IAAIC,EAAmB,MAAbD,EAAmB,SAAW,QAExC,OAAQH,GACN,KAAKvG,EACHnC,EAAQ6I,GAAY7I,EAAQ6I,IAAarG,EAAUsG,GAAO,EAAI9L,EAAQ8L,GAAO,GAC7E,MAEF,KAAK1G,EACHpC,EAAQ6I,GAAY7I,EAAQ6I,IAAarG,EAAUsG,GAAO,EAAI9L,EAAQ8L,GAAO,GAKnF,CAEA,OAAO9I,CACT,CC5DA,IAAI+I,EAAa,CACf/K,IAAK,OACLE,MAAO,OACPC,OAAQ,OACRN,KAAM,QAgBD,SAASmL,GAAYC,GAC1B,IAAIC,EAEA3G,EAAS0G,EAAM1G,OACf4G,EAAaF,EAAME,WACnBvG,EAAYqG,EAAMrG,UAClB8F,EAAYO,EAAMP,UAClB1I,EAAUiJ,EAAMjJ,QAChBsB,EAAW2H,EAAM3H,SACjB8H,EAAkBH,EAAMG,gBACxBC,EAAWJ,EAAMI,SACjBC,EAAeL,EAAMK,aACrB5J,EAAUuJ,EAAMvJ,QAChB6J,EAAavJ,EAAQpC,EACrBA,OAAmB,IAAf2L,EAAwB,EAAIA,EAChCC,EAAaxJ,EAAQjC,EACrBA,OAAmB,IAAfyL,EAAwB,EAAIA,EAEhCzC,EAAgC,mBAAjBuC,EAA8BA,EAAa,CAC5D1L,EAAGA,EACHG,EAAGA,IACA,CACHH,EAAGA,EACHG,EAAGA,GAGLH,EAAImJ,EAAMnJ,EACVG,EAAIgJ,EAAMhJ,EACV,IAAI0L,EAAOzJ,EAAQ0J,eAAe,KAC9BC,EAAO3J,EAAQ0J,eAAe,KAC9BE,EAAQ/L,EACRgM,EAAQ,EACRxL,EAAMjD,OAEV,GAAIiO,EAAU,CACZ,IAAI5J,EAAe8B,EAAgBgB,GAC/BuH,EAAa,eACbC,EAAY,cAEZtK,IAAiBvE,EAAUqH,IAGmB,WAA5CtD,EAFJQ,EAAeZ,EAAmB0D,IAECjB,UAAsC,aAAbA,IAC1DwI,EAAa,eACbC,EAAY,gBAOZnH,IAAc,IAAQA,IAAc/E,GAAQ+E,IAAc1E,IAAUwK,IAActG,KACpFyH,EAAQ1L,EAGRJ,IAFc2B,GAAWD,IAAiBpB,GAAOA,EAAIX,eAAiBW,EAAIX,eAAeD,OACzFgC,EAAaqK,IACEX,EAAW1L,OAC1BM,GAAKqL,EAAkB,GAAK,GAG1BxG,IAAc/E,IAAS+E,IAAc,GAAOA,IAAczE,GAAWuK,IAActG,KACrFwH,EAAQ1L,EAGRN,IAFc8B,GAAWD,IAAiBpB,GAAOA,EAAIX,eAAiBW,EAAIX,eAAeH,MACzFkC,EAAasK,IACEZ,EAAW5L,MAC1BK,GAAKwL,EAAkB,GAAK,EAEhC,CAEA,IAgBMY,EAhBFC,EAAe1E,OAAOC,OAAO,CAC/BlE,SAAUA,GACT+H,GAAYN,GAEXmB,GAAyB,IAAjBZ,EAnFd,SAA2Bd,GACzB,IAAI5K,EAAI4K,EAAK5K,EACTG,EAAIyK,EAAKzK,EAEToM,EADM/O,OACIgP,kBAAoB,EAClC,MAAO,CACLxM,EAAG3B,EAAM2B,EAAIuM,GAAOA,GAAO,EAC3BpM,EAAG9B,EAAM8B,EAAIoM,GAAOA,GAAO,EAE/B,CA0EsCE,CAAkB,CACpDzM,EAAGA,EACHG,EAAGA,IACA,CACHH,EAAGA,EACHG,EAAGA,GAML,OAHAH,EAAIsM,EAAMtM,EACVG,EAAImM,EAAMnM,EAENqL,EAGK7D,OAAOC,OAAO,CAAC,EAAGyE,IAAeD,EAAiB,CAAC,GAAkBH,GAASF,EAAO,IAAM,GAAIK,EAAeJ,GAASH,EAAO,IAAM,GAAIO,EAAerI,WAAatD,EAAI+L,kBAAoB,IAAM,EAAI,aAAexM,EAAI,OAASG,EAAI,MAAQ,eAAiBH,EAAI,OAASG,EAAI,SAAUiM,IAG5RzE,OAAOC,OAAO,CAAC,EAAGyE,IAAef,EAAkB,CAAC,GAAmBW,GAASF,EAAO5L,EAAI,KAAO,GAAImL,EAAgBU,GAASH,EAAO7L,EAAI,KAAO,GAAIsL,EAAgBvH,UAAY,GAAIuH,GAC9L,CCvHA,IAAIoB,GAAO,CACTzM,KAAM,QACNK,MAAO,OACPC,OAAQ,MACRH,IAAK,UAEQ,SAASuM,GAAqB3H,GAC3C,OAAOA,EAAU4H,QAAQ,0BAA0B,SAAUC,GAC3D,OAAOH,GAAKG,EACd,GACF,CCVA,IAAI,GAAO,CACTtI,MAAO,MACPC,IAAK,SAEQ,SAASsI,GAA8B9H,GACpD,OAAOA,EAAU4H,QAAQ,cAAc,SAAUC,GAC/C,OAAO,GAAKA,EACd,GACF,CCPe,SAASE,GAASC,EAAQC,GACvC,IAAIC,EAAWD,EAAME,aAAeF,EAAME,cAE1C,GAAIH,EAAOD,SAASE,GAClB,OAAO,EAEJ,GAAIC,GAAYlP,EAAakP,GAAW,CACzC,IAAIE,EAAOH,EAEX,EAAG,CACD,GAAIG,GAAQJ,EAAOK,WAAWD,GAC5B,OAAO,EAITA,EAAOA,EAAKzK,YAAcyK,EAAKxK,IACjC,OAASwK,EACX,CAGF,OAAO,CACT,CCtBe,SAASE,GAAiBrL,GACvC,OAAO0F,OAAOC,OAAO,CAAC,EAAG3F,EAAM,CAC7BhC,KAAMgC,EAAKjC,EACXI,IAAK6B,EAAK9B,EACVG,MAAO2B,EAAKjC,EAAIiC,EAAKtC,MACrBY,OAAQ0B,EAAK9B,EAAI8B,EAAKpC,QAE1B,CCqBA,SAAS0N,GAA2BnO,EAASoO,EAAgBlH,GAC3D,OAAOkH,IAAmB9I,EAAW4I,GCzBxB,SAAyBlO,EAASkH,GAC/C,IAAI7F,EAAMnD,EAAU8B,GAChBqO,EAAOxM,EAAmB7B,GAC1BU,EAAiBW,EAAIX,eACrBH,EAAQ8N,EAAKC,YACb7N,EAAS4N,EAAKE,aACd3N,EAAI,EACJG,EAAI,EAER,GAAIL,EAAgB,CAClBH,EAAQG,EAAeH,MACvBE,EAASC,EAAeD,OACxB,IAAI+N,EAAiB3O,KAEjB2O,IAAmBA,GAA+B,UAAbtH,KACvCtG,EAAIF,EAAeI,WACnBC,EAAIL,EAAeO,UAEvB,CAEA,MAAO,CACLV,MAAOA,EACPE,OAAQA,EACRG,EAAGA,EAAIoB,EAAoBhC,GAC3Be,EAAGA,EAEP,CDDwD0N,CAAgBzO,EAASkH,IAAa1I,EAAU4P,GAdxG,SAAoCpO,EAASkH,GAC3C,IAAIrE,EAAO9C,EAAsBC,GAAS,EAAoB,UAAbkH,GASjD,OARArE,EAAK7B,IAAM6B,EAAK7B,IAAMhB,EAAQkD,UAC9BL,EAAKhC,KAAOgC,EAAKhC,KAAOb,EAAQiD,WAChCJ,EAAK1B,OAAS0B,EAAK7B,IAAMhB,EAAQuO,aACjC1L,EAAK3B,MAAQ2B,EAAKhC,KAAOb,EAAQsO,YACjCzL,EAAKtC,MAAQP,EAAQsO,YACrBzL,EAAKpC,OAAST,EAAQuO,aACtB1L,EAAKjC,EAAIiC,EAAKhC,KACdgC,EAAK9B,EAAI8B,EAAK7B,IACP6B,CACT,CAG0H6L,CAA2BN,EAAgBlH,GAAYgH,GEtBlK,SAAyBlO,GACtC,IAAI8D,EAEAuK,EAAOxM,EAAmB7B,GAC1B2O,EAAYvN,EAAgBpB,GAC5B2D,EAA0D,OAAlDG,EAAwB9D,EAAQ1B,oBAAyB,EAASwF,EAAsBH,KAChGpD,EAAQ,EAAI8N,EAAKO,YAAaP,EAAKC,YAAa3K,EAAOA,EAAKiL,YAAc,EAAGjL,EAAOA,EAAK2K,YAAc,GACvG7N,EAAS,EAAI4N,EAAKQ,aAAcR,EAAKE,aAAc5K,EAAOA,EAAKkL,aAAe,EAAGlL,EAAOA,EAAK4K,aAAe,GAC5G3N,GAAK+N,EAAUrN,WAAaU,EAAoBhC,GAChDe,GAAK4N,EAAUnN,UAMnB,MAJiD,QAA7CS,EAAiB0B,GAAQ0K,GAAMS,YACjClO,GAAK,EAAIyN,EAAKC,YAAa3K,EAAOA,EAAK2K,YAAc,GAAK/N,GAGrD,CACLA,MAAOA,EACPE,OAAQA,EACRG,EAAGA,EACHG,EAAGA,EAEP,CFCkMgO,CAAgBlN,EAAmB7B,IACrO,CG7Be,SAASgP,GAAmBC,GACzC,OAAO1G,OAAOC,OAAO,CAAC,ECDf,CACLxH,IAAK,EACLE,MAAO,EACPC,OAAQ,EACRN,KAAM,GDHuCoO,EACjD,CEHe,SAASC,GAAgBC,EAAOxF,GAC7C,OAAOA,EAAKjE,QAAO,SAAU0J,EAASxF,GAEpC,OADAwF,EAAQxF,GAAOuF,EACRC,CACT,GAAG,CAAC,EACN,CCKe,SAASC,GAAehH,EAAOH,QAC5B,IAAZA,IACFA,EAAU,CAAC,GAGb,IAAIyC,EAAWzC,EACXoH,EAAqB3E,EAAS/E,UAC9BA,OAAmC,IAAvB0J,EAAgCjH,EAAMzC,UAAY0J,EAC9DC,EAAoB5E,EAASzD,SAC7BA,OAAiC,IAAtBqI,EAA+BlH,EAAMnB,SAAWqI,EAC3DC,EAAoB7E,EAAS8E,SAC7BA,OAAiC,IAAtBD,EAA+BnK,EAAkBmK,EAC5DE,EAAwB/E,EAASgF,aACjCA,OAAyC,IAA1BD,EAAmCpK,EAAWoK,EAC7DE,EAAwBjF,EAASkF,eACjCA,OAA2C,IAA1BD,EAAmCrK,EAASqK,EAC7DE,EAAuBnF,EAASoF,YAChCA,OAAuC,IAAzBD,GAA0CA,EACxDE,EAAmBrF,EAASsF,QAC5BA,OAA+B,IAArBD,EAA8B,EAAIA,EAC5Cf,EAAgBD,GAAsC,iBAAZiB,EAAuBA,EAAUf,GAAgBe,EAAS/K,IACpGgL,EAAaL,IAAmBtK,EAASC,EAAYD,EACrD4G,EAAa9D,EAAMiC,MAAM/E,OACzBvF,EAAUqI,EAAMK,SAASqH,EAAcG,EAAaL,GACpDM,ENkBS,SAAyBnQ,EAASyP,EAAUE,EAAczI,GACvE,IAAIkJ,EAAmC,oBAAbX,EAlB5B,SAA4BzP,GAC1B,IAAIqF,EAAkBzB,EAAkBP,EAAcrD,IAElDqQ,EADoB,CAAC,WAAY,SAAS3M,QAAQzB,EAAiBjC,GAASsE,WAAa,GACnD5F,EAAcsB,GAAWuE,EAAgBvE,GAAWA,EAE9F,OAAKxB,EAAU6R,GAKRhL,EAAgBN,QAAO,SAAUqJ,GACtC,OAAO5P,EAAU4P,IAAmBT,GAASS,EAAgBiC,IAAmD,SAAhC3O,EAAY0M,EAC9F,IANS,EAOX,CAK6DkC,CAAmBtQ,GAAW,GAAGkE,OAAOuL,GAC/FpK,EAAkB,GAAGnB,OAAOkM,EAAqB,CAACT,IAClDY,EAAsBlL,EAAgB,GACtCmL,EAAenL,EAAgBK,QAAO,SAAU+K,EAASrC,GAC3D,IAAIvL,EAAOsL,GAA2BnO,EAASoO,EAAgBlH,GAK/D,OAJAuJ,EAAQzP,IAAM,EAAI6B,EAAK7B,IAAKyP,EAAQzP,KACpCyP,EAAQvP,MAAQ,EAAI2B,EAAK3B,MAAOuP,EAAQvP,OACxCuP,EAAQtP,OAAS,EAAI0B,EAAK1B,OAAQsP,EAAQtP,QAC1CsP,EAAQ5P,KAAO,EAAIgC,EAAKhC,KAAM4P,EAAQ5P,MAC/B4P,CACT,GAAGtC,GAA2BnO,EAASuQ,EAAqBrJ,IAK5D,OAJAsJ,EAAajQ,MAAQiQ,EAAatP,MAAQsP,EAAa3P,KACvD2P,EAAa/P,OAAS+P,EAAarP,OAASqP,EAAaxP,IACzDwP,EAAa5P,EAAI4P,EAAa3P,KAC9B2P,EAAazP,EAAIyP,EAAaxP,IACvBwP,CACT,CMnC2BE,CAAgBlS,EAAUwB,GAAWA,EAAUA,EAAQoJ,gBAAkBvH,EAAmBwG,EAAMK,SAASnD,QAASkK,EAAUE,EAAczI,GACjKyJ,EAAsB5Q,EAAsBsI,EAAMK,SAASlD,WAC3DoL,EAAgBrF,EAAe,CACjC/F,UAAWmL,EACX3Q,QAASmM,EACTjF,SAAU,WACVtB,UAAWA,IAETiL,EAAmB3C,GAAiB3F,OAAOC,OAAO,CAAC,EAAG2D,EAAYyE,IAClEE,EAAoBjB,IAAmBtK,EAASsL,EAAmBF,EAGnEI,EAAkB,CACpB/P,IAAKmP,EAAmBnP,IAAM8P,EAAkB9P,IAAMiO,EAAcjO,IACpEG,OAAQ2P,EAAkB3P,OAASgP,EAAmBhP,OAAS8N,EAAc9N,OAC7EN,KAAMsP,EAAmBtP,KAAOiQ,EAAkBjQ,KAAOoO,EAAcpO,KACvEK,MAAO4P,EAAkB5P,MAAQiP,EAAmBjP,MAAQ+N,EAAc/N,OAExE8P,EAAa3I,EAAMI,cAAcwI,OAErC,GAAIpB,IAAmBtK,GAAUyL,EAAY,CAC3C,IAAIC,EAASD,EAAWpL,GACxB2C,OAAOoB,KAAKoH,GAAiBrK,SAAQ,SAAUkD,GAC7C,IAAIsH,EAAW,CAAChQ,EAAOC,GAAQuC,QAAQkG,IAAQ,EAAI,GAAK,EACpDuH,EAAO,CAAC,EAAKhQ,GAAQuC,QAAQkG,IAAQ,EAAI,IAAM,IACnDmH,EAAgBnH,IAAQqH,EAAOE,GAAQD,CACzC,GACF,CAEA,OAAOH,CACT,CC/DO,SAASK,GAAOpS,EAAKmQ,EAAOpQ,GACjC,OAAO,EAAQC,EAAK,EAAQmQ,EAAOpQ,GACrC,CCAA,SAASsS,GAAejP,EAAUS,EAAMyO,GAQtC,YAPyB,IAArBA,IACFA,EAAmB,CACjB1Q,EAAG,EACHG,EAAG,IAIA,CACLC,IAAKoB,EAASpB,IAAM6B,EAAKpC,OAAS6Q,EAAiBvQ,EACnDG,MAAOkB,EAASlB,MAAQ2B,EAAKtC,MAAQ+Q,EAAiB1Q,EACtDO,OAAQiB,EAASjB,OAAS0B,EAAKpC,OAAS6Q,EAAiBvQ,EACzDF,KAAMuB,EAASvB,KAAOgC,EAAKtC,MAAQ+Q,EAAiB1Q,EAExD,CAEA,SAAS2Q,GAAsBnP,GAC7B,MAAO,CAAC,EAAKlB,EAAOC,EAAQN,GAAM6G,MAAK,SAAU8J,GAC/C,OAAOpP,EAASoP,IAAS,CAC3B,GACF,CCbA,IACI,GAA4B7J,EAAgB,CAC9CI,iBAFqB,CnB+BvB,CACExB,KAAM,iBACNuD,SAAS,EACTR,MAAO,QACPnB,GAAI,WAAe,EACnB8B,OAxCF,SAAgBuB,GACd,IAAInD,EAAQmD,EAAKnD,MACbU,EAAWyC,EAAKzC,SAChBb,EAAUsD,EAAKtD,QACfuJ,EAAkBvJ,EAAQnF,OAC1BA,OAA6B,IAApB0O,GAAoCA,EAC7CC,EAAkBxJ,EAAQyJ,OAC1BA,OAA6B,IAApBD,GAAoCA,EAC7CtT,EAASF,EAAUmK,EAAMK,SAASnD,QAClC4D,EAAgB,GAAGjF,OAAOmE,EAAMc,cAAc3D,UAAW6C,EAAMc,cAAc5D,QAYjF,OAVIxC,GACFoG,EAAczC,SAAQ,SAAU3C,GAC9BA,EAAa6N,iBAAiB,SAAU7I,EAASoB,OAAQe,EAC3D,IAGEyG,GACFvT,EAAOwT,iBAAiB,SAAU7I,EAASoB,OAAQe,GAG9C,WACDnI,GACFoG,EAAczC,SAAQ,SAAU3C,GAC9BA,EAAa8N,oBAAoB,SAAU9I,EAASoB,OAAQe,EAC9D,IAGEyG,GACFvT,EAAOyT,oBAAoB,SAAU9I,EAASoB,OAAQe,EAE1D,CACF,EASExB,KAAM,CAAC,GoB7BT,CACEnD,KAAM,gBACNuD,SAAS,EACTR,MAAO,OACPnB,GApBF,SAAuBqD,GACrB,IAAInD,EAAQmD,EAAKnD,MACb9B,EAAOiF,EAAKjF,KAKhB8B,EAAMI,cAAclC,GAAQgF,EAAe,CACzC/F,UAAW6C,EAAMiC,MAAM9E,UACvBxF,QAASqI,EAAMiC,MAAM/E,OACrB2B,SAAU,WACVtB,UAAWyC,EAAMzC,WAErB,EAQE8D,KAAM,CAAC,GfuJT,CACEnD,KAAM,gBACNuD,SAAS,EACTR,MAAO,cACPnB,GAzDF,SAAuB2J,GACrB,IAAIzJ,EAAQyJ,EAAMzJ,MACdH,EAAU4J,EAAM5J,QAChB6J,EAAwB7J,EAAQkE,gBAChCA,OAA4C,IAA1B2F,GAA0CA,EAC5DC,EAAoB9J,EAAQmE,SAC5BA,OAAiC,IAAtB2F,GAAsCA,EACjDC,EAAwB/J,EAAQoE,aAChCA,OAAyC,IAA1B2F,GAA0CA,EAYzDhF,EAAe,CACjBrH,UAAWuF,EAAiB9C,EAAMzC,WAClC8F,UAAWL,EAAahD,EAAMzC,WAC9BL,OAAQ8C,EAAMK,SAASnD,OACvB4G,WAAY9D,EAAMiC,MAAM/E,OACxB6G,gBAAiBA,EACjB1J,QAAoC,UAA3B2F,EAAMH,QAAQhB,UAGgB,MAArCmB,EAAMI,cAAcmI,gBACtBvI,EAAMO,OAAOrD,OAASgD,OAAOC,OAAO,CAAC,EAAGH,EAAMO,OAAOrD,OAAQyG,GAAYzD,OAAOC,OAAO,CAAC,EAAGyE,EAAc,CACvGjK,QAASqF,EAAMI,cAAcmI,cAC7BtM,SAAU+D,EAAMH,QAAQhB,SACxBmF,SAAUA,EACVC,aAAcA,OAIe,MAA7BjE,EAAMI,cAAcyJ,QACtB7J,EAAMO,OAAOsJ,MAAQ3J,OAAOC,OAAO,CAAC,EAAGH,EAAMO,OAAOsJ,MAAOlG,GAAYzD,OAAOC,OAAO,CAAC,EAAGyE,EAAc,CACrGjK,QAASqF,EAAMI,cAAcyJ,MAC7B5N,SAAU,WACV+H,UAAU,EACVC,aAAcA,OAIlBjE,EAAMM,WAAWpD,OAASgD,OAAOC,OAAO,CAAC,EAAGH,EAAMM,WAAWpD,OAAQ,CACnE,wBAAyB8C,EAAMzC,WAEnC,EAQE8D,KAAM,CAAC,GgBvGT,CACEnD,KAAM,cACNuD,SAAS,EACTR,MAAO,QACPnB,GA5EF,SAAqBqD,GACnB,IAAInD,EAAQmD,EAAKnD,MACjBE,OAAOoB,KAAKtB,EAAMK,UAAUhC,SAAQ,SAAUH,GAC5C,IAAI4L,EAAQ9J,EAAMO,OAAOrC,IAAS,CAAC,EAC/BoC,EAAaN,EAAMM,WAAWpC,IAAS,CAAC,EACxCvG,EAAUqI,EAAMK,SAASnC,GAExB7H,EAAcsB,IAAa0B,EAAY1B,KAO5CuI,OAAOC,OAAOxI,EAAQmS,MAAOA,GAC7B5J,OAAOoB,KAAKhB,GAAYjC,SAAQ,SAAUH,GACxC,IAAI4I,EAAQxG,EAAWpC,IAET,IAAV4I,EACFnP,EAAQoS,gBAAgB7L,GAExBvG,EAAQqS,aAAa9L,GAAgB,IAAV4I,EAAiB,GAAKA,EAErD,IACF,GACF,EAoDElF,OAlDF,SAAgBgC,GACd,IAAI5D,EAAQ4D,EAAM5D,MACdiK,EAAgB,CAClB/M,OAAQ,CACNjB,SAAU+D,EAAMH,QAAQhB,SACxBrG,KAAM,IACNG,IAAK,IACLuR,OAAQ,KAEVL,MAAO,CACL5N,SAAU,YAEZkB,UAAW,CAAC,GASd,OAPA+C,OAAOC,OAAOH,EAAMK,SAASnD,OAAO4M,MAAOG,EAAc/M,QACzD8C,EAAMO,OAAS0J,EAEXjK,EAAMK,SAASwJ,OACjB3J,OAAOC,OAAOH,EAAMK,SAASwJ,MAAMC,MAAOG,EAAcJ,OAGnD,WACL3J,OAAOoB,KAAKtB,EAAMK,UAAUhC,SAAQ,SAAUH,GAC5C,IAAIvG,EAAUqI,EAAMK,SAASnC,GACzBoC,EAAaN,EAAMM,WAAWpC,IAAS,CAAC,EAGxC4L,EAFkB5J,OAAOoB,KAAKtB,EAAMO,OAAO8D,eAAenG,GAAQ8B,EAAMO,OAAOrC,GAAQ+L,EAAc/L,IAE7Eb,QAAO,SAAUyM,EAAOK,GAElD,OADAL,EAAMK,GAAY,GACXL,CACT,GAAG,CAAC,GAECzT,EAAcsB,IAAa0B,EAAY1B,KAI5CuI,OAAOC,OAAOxI,EAAQmS,MAAOA,GAC7B5J,OAAOoB,KAAKhB,GAAYjC,SAAQ,SAAU+L,GACxCzS,EAAQoS,gBAAgBK,EAC1B,IACF,GACF,CACF,EASEjM,SAAU,CAAC,kBCnCb,CACED,KAAM,SACNuD,SAAS,EACTR,MAAO,OACP9C,SAAU,CAAC,iBACX2B,GA5BF,SAAgB8D,GACd,IAAI5D,EAAQ4D,EAAM5D,MACdH,EAAU+D,EAAM/D,QAChB3B,EAAO0F,EAAM1F,KACbmM,EAAkBxK,EAAQ+I,OAC1BA,OAA6B,IAApByB,EAA6B,CAAC,EAAG,GAAKA,EAC/ChJ,EAAO,UAAkB,SAAU/D,EAAKC,GAE1C,OADAD,EAAIC,GA5BD,SAAiCA,EAAW0E,EAAO2G,GACxD,IAAIxF,EAAgBN,EAAiBvF,GACjC+M,EAAiB,CAAC9R,EAAM,GAAK6C,QAAQ+H,IAAkB,GAAK,EAAI,EAEhED,EAAyB,mBAAXyF,EAAwBA,EAAO1I,OAAOC,OAAO,CAAC,EAAG8B,EAAO,CACxE1E,UAAWA,KACPqL,EACF2B,EAAWpH,EAAK,GAChBqH,EAAWrH,EAAK,GAIpB,OAFAoH,EAAWA,GAAY,EACvBC,GAAYA,GAAY,GAAKF,EACtB,CAAC9R,EAAMK,GAAOwC,QAAQ+H,IAAkB,EAAI,CACjD7K,EAAGiS,EACH9R,EAAG6R,GACD,CACFhS,EAAGgS,EACH7R,EAAG8R,EAEP,CASqBC,CAAwBlN,EAAWyC,EAAMiC,MAAO2G,GAC1DtL,CACT,GAAG,CAAC,GACAoN,EAAwBrJ,EAAKrB,EAAMzC,WACnChF,EAAImS,EAAsBnS,EAC1BG,EAAIgS,EAAsBhS,EAEW,MAArCsH,EAAMI,cAAcmI,gBACtBvI,EAAMI,cAAcmI,cAAchQ,GAAKA,EACvCyH,EAAMI,cAAcmI,cAAc7P,GAAKA,GAGzCsH,EAAMI,cAAclC,GAAQmD,CAC9B,GC6FA,CACEnD,KAAM,OACNuD,SAAS,EACTR,MAAO,OACPnB,GA5HF,SAAcqD,GACZ,IAAInD,EAAQmD,EAAKnD,MACbH,EAAUsD,EAAKtD,QACf3B,EAAOiF,EAAKjF,KAEhB,IAAI8B,EAAMI,cAAclC,GAAMyM,MAA9B,CAoCA,IAhCA,IAAIC,EAAoB/K,EAAQ2D,SAC5BqH,OAAsC,IAAtBD,GAAsCA,EACtDE,EAAmBjL,EAAQkL,QAC3BC,OAAoC,IAArBF,GAAqCA,EACpDG,EAA8BpL,EAAQqL,mBACtCtD,EAAU/H,EAAQ+H,QAClBR,EAAWvH,EAAQuH,SACnBE,EAAezH,EAAQyH,aACvBI,EAAc7H,EAAQ6H,YACtByD,EAAwBtL,EAAQuL,eAChCA,OAA2C,IAA1BD,GAA0CA,EAC3DE,EAAwBxL,EAAQwL,sBAChCC,EAAqBtL,EAAMH,QAAQtC,UACnC6F,EAAgBN,EAAiBwI,GAEjCJ,EAAqBD,IADH7H,IAAkBkI,GACqCF,EAjC/E,SAAuC7N,GACrC,GAAIuF,EAAiBvF,KAAeX,EAClC,MAAO,GAGT,IAAI2O,EAAoBrG,GAAqB3H,GAC7C,MAAO,CAAC8H,GAA8B9H,GAAYgO,EAAmBlG,GAA8BkG,GACrG,CA0B6IC,CAA8BF,GAA3E,CAACpG,GAAqBoG,KAChHG,EAAa,CAACH,GAAoBzP,OAAOqP,GAAoB7N,QAAO,SAAUC,EAAKC,GACrF,OAAOD,EAAIzB,OAAOiH,EAAiBvF,KAAeX,ECvCvC,SAA8BoD,EAAOH,QAClC,IAAZA,IACFA,EAAU,CAAC,GAGb,IAAIyC,EAAWzC,EACXtC,EAAY+E,EAAS/E,UACrB6J,EAAW9E,EAAS8E,SACpBE,EAAehF,EAASgF,aACxBM,EAAUtF,EAASsF,QACnBwD,EAAiB9I,EAAS8I,eAC1BM,EAAwBpJ,EAAS+I,sBACjCA,OAAkD,IAA1BK,EAAmC,EAAgBA,EAC3ErI,EAAYL,EAAazF,GACzBkO,EAAapI,EAAY+H,EAAiBhO,EAAsBA,EAAoBV,QAAO,SAAUa,GACvG,OAAOyF,EAAazF,KAAe8F,CACrC,IAAKxG,EACD8O,EAAoBF,EAAW/O,QAAO,SAAUa,GAClD,OAAO8N,EAAsBhQ,QAAQkC,IAAc,CACrD,IAEiC,IAA7BoO,EAAkB1M,SACpB0M,EAAoBF,GAQtB,IAAIG,EAAYD,EAAkBtO,QAAO,SAAUC,EAAKC,GAOtD,OANAD,EAAIC,GAAayJ,GAAehH,EAAO,CACrCzC,UAAWA,EACX6J,SAAUA,EACVE,aAAcA,EACdM,QAASA,IACR9E,EAAiBvF,IACbD,CACT,GAAG,CAAC,GACJ,OAAO4C,OAAOoB,KAAKsK,GAAW7N,MAAK,SAAU8N,EAAGC,GAC9C,OAAOF,EAAUC,GAAKD,EAAUE,EAClC,GACF,CDH6DC,CAAqB/L,EAAO,CACnFzC,UAAWA,EACX6J,SAAUA,EACVE,aAAcA,EACdM,QAASA,EACTwD,eAAgBA,EAChBC,sBAAuBA,IACpB9N,EACP,GAAG,IACCyO,EAAgBhM,EAAMiC,MAAM9E,UAC5B2G,EAAa9D,EAAMiC,MAAM/E,OACzB+O,EAAY,IAAItO,IAChBuO,GAAqB,EACrBC,EAAwBV,EAAW,GAE9BW,EAAI,EAAGA,EAAIX,EAAWxM,OAAQmN,IAAK,CAC1C,IAAI7O,EAAYkO,EAAWW,GAEvBC,EAAiBvJ,EAAiBvF,GAElC+O,EAAmBtJ,EAAazF,KAAeT,EAC/CyP,EAAa,CAAC,EAAKzT,GAAQuC,QAAQgR,IAAmB,EACtD5I,EAAM8I,EAAa,QAAU,SAC7BxS,EAAWiN,GAAehH,EAAO,CACnCzC,UAAWA,EACX6J,SAAUA,EACVE,aAAcA,EACdI,YAAaA,EACbE,QAASA,IAEP4E,EAAoBD,EAAaD,EAAmBzT,EAAQL,EAAO8T,EAAmBxT,EAAS,EAE/FkT,EAAcvI,GAAOK,EAAWL,KAClC+I,EAAoBtH,GAAqBsH,IAG3C,IAAIC,EAAmBvH,GAAqBsH,GACxCE,EAAS,GAUb,GARI7B,GACF6B,EAAOhO,KAAK3E,EAASsS,IAAmB,GAGtCrB,GACF0B,EAAOhO,KAAK3E,EAASyS,IAAsB,EAAGzS,EAAS0S,IAAqB,GAG1EC,EAAOC,OAAM,SAAUC,GACzB,OAAOA,CACT,IAAI,CACFT,EAAwB5O,EACxB2O,GAAqB,EACrB,KACF,CAEAD,EAAUtN,IAAIpB,EAAWmP,EAC3B,CAEA,GAAIR,EAqBF,IAnBA,IAEIW,EAAQ,SAAeC,GACzB,IAAIC,EAAmBtB,EAAWuB,MAAK,SAAUzP,GAC/C,IAAImP,EAAST,EAAUxN,IAAIlB,GAE3B,GAAImP,EACF,OAAOA,EAAOO,MAAM,EAAGH,GAAIH,OAAM,SAAUC,GACzC,OAAOA,CACT,GAEJ,IAEA,GAAIG,EAEF,OADAZ,EAAwBY,EACjB,OAEX,EAESD,EAnBY1B,EAAiB,EAAI,EAmBZ0B,EAAK,GAGpB,UAFFD,EAAMC,GADmBA,KAOpC9M,EAAMzC,YAAc4O,IACtBnM,EAAMI,cAAclC,GAAMyM,OAAQ,EAClC3K,EAAMzC,UAAY4O,EAClBnM,EAAMkC,OAAQ,EA5GhB,CA8GF,EAQE9D,iBAAkB,CAAC,UACnBiD,KAAM,CACJsJ,OAAO,IETX,CACEzM,KAAM,kBACNuD,SAAS,EACTR,MAAO,OACPnB,GA/HF,SAAyBqD,GACvB,IAAInD,EAAQmD,EAAKnD,MACbH,EAAUsD,EAAKtD,QACf3B,EAAOiF,EAAKjF,KACZ0M,EAAoB/K,EAAQ2D,SAC5BqH,OAAsC,IAAtBD,GAAsCA,EACtDE,EAAmBjL,EAAQkL,QAC3BC,OAAoC,IAArBF,GAAsCA,EACrD1D,EAAWvH,EAAQuH,SACnBE,EAAezH,EAAQyH,aACvBI,EAAc7H,EAAQ6H,YACtBE,EAAU/H,EAAQ+H,QAClBsF,EAAkBrN,EAAQsN,OAC1BA,OAA6B,IAApBD,GAAoCA,EAC7CE,EAAwBvN,EAAQwN,aAChCA,OAAyC,IAA1BD,EAAmC,EAAIA,EACtDrT,EAAWiN,GAAehH,EAAO,CACnCoH,SAAUA,EACVE,aAAcA,EACdM,QAASA,EACTF,YAAaA,IAEXtE,EAAgBN,EAAiB9C,EAAMzC,WACvC8F,EAAYL,EAAahD,EAAMzC,WAC/B+P,GAAmBjK,EACnBG,EAAWP,EAAyBG,GACpC2H,ECrCY,MDqCSvH,ECrCH,IAAM,IDsCxB+E,EAAgBvI,EAAMI,cAAcmI,cACpCyD,EAAgBhM,EAAMiC,MAAM9E,UAC5B2G,EAAa9D,EAAMiC,MAAM/E,OACzBqQ,EAA4C,mBAAjBF,EAA8BA,EAAanN,OAAOC,OAAO,CAAC,EAAGH,EAAMiC,MAAO,CACvG1E,UAAWyC,EAAMzC,aACb8P,EACFG,EAA2D,iBAAtBD,EAAiC,CACxE/J,SAAU+J,EACVxC,QAASwC,GACPrN,OAAOC,OAAO,CAChBqD,SAAU,EACVuH,QAAS,GACRwC,GACCE,EAAsBzN,EAAMI,cAAcwI,OAAS5I,EAAMI,cAAcwI,OAAO5I,EAAMzC,WAAa,KACjG8D,EAAO,CACT9I,EAAG,EACHG,EAAG,GAGL,GAAK6P,EAAL,CAIA,GAAIsC,EAAe,CACjB,IAAI6C,EAEAC,EAAwB,MAAbnK,EAAmB,EAAMhL,EACpCoV,EAAuB,MAAbpK,EAAmB1K,EAASD,EACtC4K,EAAmB,MAAbD,EAAmB,SAAW,QACpCoF,EAASL,EAAc/E,GACvB7M,EAAMiS,EAAS7O,EAAS4T,GACxBjX,EAAMkS,EAAS7O,EAAS6T,GACxBC,EAAWV,GAAUrJ,EAAWL,GAAO,EAAI,EAC3CqK,EAASzK,IAAcvG,EAAQkP,EAAcvI,GAAOK,EAAWL,GAC/DsK,EAAS1K,IAAcvG,GAASgH,EAAWL,IAAQuI,EAAcvI,GAGjEuK,EAAehO,EAAMK,SAASwJ,MAC9BoE,EAAYd,GAAUa,EAAelT,EAAckT,GAAgB,CACrE9V,MAAO,EACPE,OAAQ,GAEN8V,EAAqBlO,EAAMI,cAAc,oBAAsBJ,EAAMI,cAAc,oBAAoBwH,QXhFtG,CACLjP,IAAK,EACLE,MAAO,EACPC,OAAQ,EACRN,KAAM,GW6EF2V,GAAkBD,EAAmBP,GACrCS,GAAkBF,EAAmBN,GAMrCS,GAAWtF,GAAO,EAAGiD,EAAcvI,GAAMwK,EAAUxK,IACnD6K,GAAYhB,EAAkBtB,EAAcvI,GAAO,EAAIoK,EAAWQ,GAAWF,GAAkBX,EAA4BhK,SAAWsK,EAASO,GAAWF,GAAkBX,EAA4BhK,SACxM+K,GAAYjB,GAAmBtB,EAAcvI,GAAO,EAAIoK,EAAWQ,GAAWD,GAAkBZ,EAA4BhK,SAAWuK,EAASM,GAAWD,GAAkBZ,EAA4BhK,SACzMgL,GAAoBxO,EAAMK,SAASwJ,OAAS3N,EAAgB8D,EAAMK,SAASwJ,OAC3E4E,GAAeD,GAAiC,MAAbhL,EAAmBgL,GAAkB3T,WAAa,EAAI2T,GAAkB5T,YAAc,EAAI,EAC7H8T,GAAwH,OAAjGhB,EAA+C,MAAvBD,OAA8B,EAASA,EAAoBjK,IAAqBkK,EAAwB,EAEvJiB,GAAY/F,EAAS2F,GAAYG,GACjCE,GAAkB7F,GAAOoE,EAAS,EAAQxW,EAF9BiS,EAAS0F,GAAYI,GAAsBD,IAEK9X,EAAKiS,EAAQuE,EAAS,EAAQzW,EAAKiY,IAAajY,GAChH6R,EAAc/E,GAAYoL,GAC1BvN,EAAKmC,GAAYoL,GAAkBhG,CACrC,CAEA,GAAIoC,EAAc,CAChB,IAAI6D,GAEAC,GAAyB,MAAbtL,EAAmB,EAAMhL,EAErCuW,GAAwB,MAAbvL,EAAmB1K,EAASD,EAEvCmW,GAAUzG,EAAcwC,GAExBhM,GAAmB,MAAZgM,EAAkB,SAAW,QAEpCkE,GAAOD,GAAUjV,EAAS+U,IAE1BI,GAAOF,GAAUjV,EAASgV,IAE1BI,IAAuD,IAAxC,CAAC,EAAK3W,GAAM6C,QAAQ+H,GAEnCgM,GAAyH,OAAjGP,GAAgD,MAAvBpB,OAA8B,EAASA,EAAoB1C,IAAoB8D,GAAyB,EAEzJQ,GAAaF,GAAeF,GAAOD,GAAUhD,EAAcjN,IAAQ+E,EAAW/E,IAAQqQ,GAAuB5B,EAA4BzC,QAEzIuE,GAAaH,GAAeH,GAAUhD,EAAcjN,IAAQ+E,EAAW/E,IAAQqQ,GAAuB5B,EAA4BzC,QAAUmE,GAE5IK,GAAmBpC,GAAUgC,GRzH9B,SAAwBxY,EAAKmQ,EAAOpQ,GACzC,IAAI8Y,EAAIzG,GAAOpS,EAAKmQ,EAAOpQ,GAC3B,OAAO8Y,EAAI9Y,EAAMA,EAAM8Y,CACzB,CQsHoDC,CAAeJ,GAAYL,GAASM,IAAcvG,GAAOoE,EAASkC,GAAaJ,GAAMD,GAAS7B,EAASmC,GAAaJ,IAEpK3G,EAAcwC,GAAWwE,GACzBlO,EAAK0J,GAAWwE,GAAmBP,EACrC,CAEAhP,EAAMI,cAAclC,GAAQmD,CAvE5B,CAwEF,EAQEjD,iBAAkB,CAAC,WEhDrB,CACEF,KAAM,QACNuD,SAAS,EACTR,MAAO,OACPnB,GA9EF,SAAeqD,GACb,IAAIuM,EAEA1P,EAAQmD,EAAKnD,MACb9B,EAAOiF,EAAKjF,KACZ2B,EAAUsD,EAAKtD,QACfmO,EAAehO,EAAMK,SAASwJ,MAC9BtB,EAAgBvI,EAAMI,cAAcmI,cACpCnF,EAAgBN,EAAiB9C,EAAMzC,WACvCuL,EAAO7F,EAAyBG,GAEhCK,EADa,CAACjL,EAAMK,GAAOwC,QAAQ+H,IAAkB,EAClC,SAAW,QAElC,GAAK4K,GAAiBzF,EAAtB,CAIA,IAAI3B,EAxBgB,SAAyBgB,EAAS5H,GAItD,OAAO2G,GAAsC,iBAH7CiB,EAA6B,mBAAZA,EAAyBA,EAAQ1H,OAAOC,OAAO,CAAC,EAAGH,EAAMiC,MAAO,CAC/E1E,UAAWyC,EAAMzC,aACbqK,GACkDA,EAAUf,GAAgBe,EAAS/K,GAC7F,CAmBsB8S,CAAgB9P,EAAQ+H,QAAS5H,GACjDiO,EAAYnT,EAAckT,GAC1B4B,EAAmB,MAAT9G,EAAe,EAAMtQ,EAC/BqX,EAAmB,MAAT/G,EAAehQ,EAASD,EAClCiX,EAAU9P,EAAMiC,MAAM9E,UAAUsG,GAAOzD,EAAMiC,MAAM9E,UAAU2L,GAAQP,EAAcO,GAAQ9I,EAAMiC,MAAM/E,OAAOuG,GAC9GsM,EAAYxH,EAAcO,GAAQ9I,EAAMiC,MAAM9E,UAAU2L,GACxD0F,EAAoBtS,EAAgB8R,GACpCgC,EAAaxB,EAA6B,MAAT1F,EAAe0F,EAAkBtI,cAAgB,EAAIsI,EAAkBvI,aAAe,EAAI,EAC3HgK,EAAoBH,EAAU,EAAIC,EAAY,EAG9CpZ,EAAMiQ,EAAcgJ,GACpBlZ,EAAMsZ,EAAa/B,EAAUxK,GAAOmD,EAAciJ,GAClDK,EAASF,EAAa,EAAI/B,EAAUxK,GAAO,EAAIwM,EAC/CrH,EAASG,GAAOpS,EAAKuZ,EAAQxZ,GAE7ByZ,EAAWrH,EACf9I,EAAMI,cAAclC,KAASwR,EAAwB,CAAC,GAAyBS,GAAYvH,EAAQ8G,EAAsBU,aAAexH,EAASsH,EAAQR,EAnBzJ,CAoBF,EA4CE9N,OA1CF,SAAgBgC,GACd,IAAI5D,EAAQ4D,EAAM5D,MAEdqQ,EADUzM,EAAM/D,QACWlI,QAC3BqW,OAAoC,IAArBqC,EAA8B,sBAAwBA,EAErD,MAAhBrC,IAKwB,iBAAjBA,IACTA,EAAehO,EAAMK,SAASnD,OAAOoT,cAActC,MAahD1I,GAAStF,EAAMK,SAASnD,OAAQ8Q,KAQrChO,EAAMK,SAASwJ,MAAQmE,EACzB,EASE7P,SAAU,CAAC,iBACXC,iBAAkB,CAAC,oBT7CrB,CACEF,KAAM,OACNuD,SAAS,EACTR,MAAO,OACP7C,iBAAkB,CAAC,mBACnB0B,GAlCF,SAAcqD,GACZ,IAAInD,EAAQmD,EAAKnD,MACb9B,EAAOiF,EAAKjF,KACZ8N,EAAgBhM,EAAMiC,MAAM9E,UAC5B2G,EAAa9D,EAAMiC,MAAM/E,OACzB+L,EAAmBjJ,EAAMI,cAAcmQ,gBACvCC,EAAoBxJ,GAAehH,EAAO,CAC5CwH,eAAgB,cAEdiJ,EAAoBzJ,GAAehH,EAAO,CAC5C0H,aAAa,IAEXgJ,EAA2B1H,GAAewH,EAAmBxE,GAC7D2E,EAAsB3H,GAAeyH,EAAmB3M,EAAYmF,GACpE2H,EAAoB1H,GAAsBwH,GAC1CG,EAAmB3H,GAAsByH,GAC7C3Q,EAAMI,cAAclC,GAAQ,CAC1BwS,yBAA0BA,EAC1BC,oBAAqBA,EACrBC,kBAAmBA,EACnBC,iBAAkBA,GAEpB7Q,EAAMM,WAAWpD,OAASgD,OAAOC,OAAO,CAAC,EAAGH,EAAMM,WAAWpD,OAAQ,CACnE,+BAAgC0T,EAChC,sBAAuBC,GAE3B,qaU3CiBC,EAAeC,EAAgBC,EAAgBC,EAAgBC,EAAgBC,EAAgBC,EAAgBC,EAAUC,EAAUC,EAAeC,EAAUC,EAAUC,0CAJnLC,EAAe,WAAc,SAASC,EAAiBhW,EAAQiW,GAAS,IAAK,IAAIzF,EAAI,EAAGA,EAAIyF,EAAM5S,OAAQmN,IAAK,CAAE,IAAI0F,EAAaD,EAAMzF,GAAI0F,EAAWC,WAAaD,EAAWC,aAAc,EAAOD,EAAWE,cAAe,EAAU,UAAWF,IAAYA,EAAWG,UAAW,GAAM/R,OAAOgS,eAAetW,EAAQkW,EAAWvQ,IAAKuQ,EAAa,CAAE,CAAE,OAAO,SAAUK,EAAaC,EAAYC,GAAiJ,OAA9HD,GAAYR,EAAiBO,EAAYG,UAAWF,GAAiBC,GAAaT,EAAiBO,EAAaE,GAAqBF,CAAa,CAAG,CAA7hB,GAEfI,EAA4B,mBAAXC,QAAoD,iBAApBA,OAAOC,SAAwB,SAAUC,GAAO,cAAcA,CAAK,EAAI,SAAUA,GAAO,OAAOA,GAAyB,mBAAXF,QAAyBE,EAAIC,cAAgBH,QAAUE,IAAQF,OAAOF,UAAY,gBAAkBI,CAAK,EAI3Q,SAASE,EAA2BC,EAAMC,GAAQ,IAAKD,EAAQ,MAAM,IAAIE,eAAe,6DAAgE,OAAOD,GAAyB,iBAATA,GAAqC,mBAATA,EAA8BD,EAAPC,CAAa,CAE/O,SAASE,EAAUC,EAAUC,GAAc,GAA0B,mBAAfA,GAA4C,OAAfA,EAAuB,MAAM,IAAIC,UAAU,kEAAoED,GAAeD,EAASX,UAAYpS,OAAOkT,OAAOF,GAAcA,EAAWZ,UAAW,CAAEK,YAAa,CAAE7L,MAAOmM,EAAUlB,YAAY,EAAOE,UAAU,EAAMD,cAAc,KAAekB,IAAYhT,OAAOmT,eAAiBnT,OAAOmT,eAAeJ,EAAUC,GAAcD,EAASK,UAAYJ,EAAY,CASte,IAAIK,EAAgB,iBAChBC,EAAgB,iBAEvBtc,EAAMgJ,OAAOkT,OAAO,MAEjB,SAASK,EAAUvV,GACxB,GAAIA,KAAQhH,EACV,OAAOA,EAAIgH,GAEb,IAAIJ,EAASI,EAAKwV,OAAO,GAAGna,cAAgB2E,EAAK+O,MAAM,GAAG9H,QAAQ,gBAAgB,SAAUwO,EAAGpb,GAC7F,OAAOA,EAAEqb,aACX,IAEA,OADA1c,EAAIgH,GAAQJ,EACLA,CACT,CAEO,SAAS+V,EAAsBC,EAAgBC,GACpD,MAAO,CACLD,eAAgBA,EAChBC,sBAAuBA,GAAyB,KAEpD,CAEO,SAASC,EAAc9V,EAAM+V,EAAOC,GACzC,IAAIC,EAAKF,EAAMG,gBAEf,GAAIF,EAAU,CACZ,KAAOA,GAAYC,GACjBD,IACAC,EAAKA,EAAGJ,sBAEV,GAAIG,IAAaC,EACf,OAEF,OAAOjW,KAAQiW,EAAKA,EAAKA,EAAGL,cAC9B,CAEA,KAAOK,KAAQjW,KAAQiW,MAASA,EAAGL,kBAAkB5V,KAAQiW,EAAGL,kBAC9DK,EAAKA,EAAGJ,sBAEV,OAAII,EACKjW,KAAQiW,EAAKA,EAAKA,EAAGL,eAGvBG,EAAMH,gBAAkBG,EAAMG,eACvC,CAeA,IAAIC,EAAY,GACZC,EAAmB,GACnBC,GAAY,EAChB,SAASC,EAAsBC,GAC7B,GAAIA,IAAgBF,EAAU,CAC5BA,GAAY,EAEZ,IADA,IAAIG,EAAKL,EAAUpV,OAASqV,EAAiBrV,OAASsV,EAAW,EACxDnI,EAAIqI,EAAc,EAAGrI,EAAIsI,IAAMtI,EACtCiI,EAAUjI,GAAK,YAAcA,EAC7BkI,EAAiBlI,GAAK,mBAAqBA,CAE/C,CACF,CAGA,SAASuI,EAAYC,GAGnB,IAFA,IAAIC,OAAwCnS,IAAxBoS,KAAKC,eAA+B,EAAID,KAAKC,eAC7D3I,EAAIyI,EACDzI,KAAO0I,KAAKT,EAAUjI,MAAQwI,IAErC,IAAW,IAAPxI,EAAU,CAEZ,IADAA,EAAI,EACG0I,KAAKT,EAAUjI,KACpBA,IAEF0I,KAAKT,EAAUjI,IAAMwI,EACrBA,EAASI,UAAUxB,EAAesB,MAE9B1I,IAAMyI,IACRC,KAAKC,eAAiB3I,EAAI,EAE9B,MAEsB1J,IAAlBoS,KAAKG,WACPH,KAAKG,SAAW,GAElBH,KAAKR,EAAiBlI,IAAM0I,KAAKG,SACjCT,EAAsBpI,EACxB,CAEA,SAAS8I,EAAgBxC,EAAKyC,GAC5B,IAAIP,EAAWE,KAAKM,gBAAgBC,YAAY3C,EAAKyC,GACrDR,EAAY7B,KAAKgC,KAAMF,EACzB,CAEA,SAASU,EAAaC,GACpB,IAAIX,EAAWE,KAAKM,gBAAgBI,iBAAiBD,GACrDZ,EAAY7B,KAAKgC,KAAMF,EACzB,CAEA,SAASa,EAAUC,GAEjB,IADA,IAAItJ,EAAI0I,KAAKC,eACN3I,KACL,GAAIsJ,GAAOZ,KAAKR,EAAiBlI,MAAQ0I,KAAKG,SAAU,CACtD,IAAIL,EAAWE,KAAKT,EAAUjI,IAC9B0I,KAAKT,EAAUjI,IAAM,KACjBwI,GACFA,EAASe,YAAYnC,EAAesB,KAExC,CAEJ,CAEO,SAASc,IACd,OAAO,SAAUha,GACfA,EAAO0W,UAAU4C,gBAAkBA,EACnCtZ,EAAO0W,UAAUgD,aAAeA,EAChC1Z,EAAO0W,UAAUmD,UAAYA,EAC7B7Z,EAAO0W,UAAUqC,YAAcA,CACjC,CACF,CAzDAH,GAAuB,GA2DvB,IAAIqB,EAAQ,GACRC,EAAS,CAAC,EACVC,EAAS,EACTC,EAAmB,IACnBC,EAAc,GAEdC,GAAmB,EACnBC,EAAY,EAEhB,SAASC,EAAMC,GAGb,IAFA,IAAIpX,EAAS4W,EAAM5W,OACfmN,EAAI,EACDA,EAAInN,GAAQ,CACjB,IAAIqX,EAAUT,EAAMzJ,GAKpB,GAJA0J,EAAOQ,EAAQC,mBAAoB,EACnCD,EAAQE,SAAQ,KAChBpK,EAEQ,KAAQ,GAAK,uBAA6BiK,EAAsBJ,EACtE,KAEJ,CACAJ,EAAMY,OAAO,EAAGrK,GAEZyJ,EAAM5W,OACR,2BAA+BmX,IAE/BF,GAAmB,EACnBC,EAAY,EAEhB,CAEO,SAASO,EAAsBJ,GACpC,GAAIH,EAAYH,EACdG,IACAG,EAAQE,SAAQ,OACX,CACL,IAAIG,EAAKL,EAAQC,sBACN7T,IAAPiU,IACFA,EAAKZ,EACLA,IACAO,EAAQC,iBAAmBI,GAGxBb,EAAOa,KACVd,EAAMnX,KAAK4X,GACXR,EAAOa,IAAM,EAEjB,CACKT,IACHA,GAAmB,EACnB,2BAA+BE,GAEnC,CAkBA,SAASQ,EAAcC,EAASC,GAC9B,QAAIhC,KAAKiC,cAAcF,EAASC,KAG3BhC,KAAKkC,UAKLlC,KAAKmC,UAKLnC,KAAKoC,UAKLpC,KAAKqC,eAKVrC,KAAKqC,cAAczY,KAAKmY,GACxB/B,KAAKsC,eAAe1Y,KAAKoY,GAClB,IANLhC,KAAKqC,cAAgB,CAACN,GACtB/B,KAAKsC,eAAiB,CAACN,GAChB,IAPPhC,KAAKoC,UAAYL,EACjB/B,KAAKuC,WAAaP,EACX,IAPPhC,KAAKmC,UAAYJ,EACjB/B,KAAKwC,WAAaR,EACX,IAPPhC,KAAKkC,UAAYH,EACjB/B,KAAKyC,WAAaT,EACX,IAoBX,CAEA,SAASU,EAAiBX,EAASC,GACjC,GAAIhC,KAAKkC,YAAcH,GAAW/B,KAAKyC,aAAeT,EAGpD,OAFAhC,KAAKkC,UAAY,KACjBlC,KAAKyC,WAAa,MACX,EAET,GAAIzC,KAAKmC,YAAcJ,GAAW/B,KAAKwC,aAAeR,EAGpD,OAFAhC,KAAKmC,UAAY,KACjBnC,KAAKwC,WAAa,MACX,EAET,GAAIxC,KAAKoC,YAAcL,GAAW/B,KAAKuC,aAAeP,EAGpD,OAFAhC,KAAKoC,UAAY,KACjBpC,KAAKuC,WAAa,MACX,EAET,IAAII,EAAY3C,KAAKsC,eACrB,QAAkB1U,IAAd+U,GAAgD,IAArBA,EAAUxY,OACvC,OAAO,EAIT,IAFA,IAAIyY,EAAW5C,KAAKqC,cAChB/K,EAAI,GACCqL,EAAUrL,KAAO0K,GAAYY,EAAStL,KAAOyK,IAAYY,EAAUxY,OAASmN,GACnFA,IAEF,QAAIA,GAAKqL,EAAUxY,SAGnByY,EAASjB,OAAOrK,EAAG,GACnBqL,EAAUhB,OAAOrK,EAAG,GACb,GACT,CAEA,IAAIuL,EAAa,GACbC,EAAa,GACbC,EAAkB,GAEtB,SAASC,EAAgBC,EAAUC,GACjC,IAAIC,EAAWnD,KAAKkC,UAChBkB,EAAYpD,KAAKyC,WACjBY,EAAWrD,KAAKmC,UAChBmB,EAAYtD,KAAKwC,WACjBe,EAAWvD,KAAKoC,UAChBoB,EAAYxD,KAAKuC,WACjBpY,EAAS6V,KAAKqC,cAAgBrC,KAAKqC,cAAclY,OAAS,EAC1DsZ,OAAe,EACfC,OAAgB,EAChBC,OAAY,EACZrM,OAAI,EACR,GAAInN,EAAQ,CAEV,IADAwZ,EAAYZ,EAAgB5Y,OACrBwZ,KAAeZ,EAAgBY,KAetC,IAdIA,EAAY,GACdA,EAAYZ,EAAgB5Y,OAC5BsZ,EAAe,GACfC,EAAgB,GAChBX,EAAgBnZ,MAAK,GACrBiZ,EAAWjZ,KAAK6Z,GAChBX,EAAWlZ,KAAK8Z,KAEhBX,EAAgBY,IAAa,EAC7BF,EAAeZ,EAAWc,GAC1BD,EAAgBZ,EAAWa,IAG7BrM,EAAInN,EACGmN,KACLmM,EAAanM,GAAK0I,KAAKqC,cAAc/K,GACrCoM,EAAcpM,GAAK0I,KAAKsC,eAAehL,EAE3C,CAuBA,GArBI6L,IACEC,EACFA,EAAUpF,KAAKmF,EAAUF,EAAUC,GAEnCC,EAASF,EAAUC,IAGnBG,IACEC,EACFA,EAAUtF,KAAKqF,EAAUJ,EAAUC,GAEnCG,EAASJ,EAAUC,IAGnBK,IACEC,EACFA,EAAUxF,KAAKuF,EAAUN,EAAUC,GAEnCK,EAASN,EAAUC,IAGnB/Y,EAAQ,CACV,IAAKmN,EAAI,EAAGA,EAAInN,EAAQmN,IAAK,CAC3B,IAAI0K,EAAW0B,EAAcpM,GACzByK,EAAU0B,EAAanM,GACvB0K,EACFA,EAAShE,KAAK+D,EAASkB,EAAUC,GAEjCnB,EAAQkB,EAAUC,GAEpBO,EAAanM,GAAK,KAClBoM,EAAcpM,GAAK,IACrB,CACAyL,EAAgBY,IAAa,CAC/B,CACF,CAEA,SAASC,KACP,SAAU5D,KAAKkC,WAAalC,KAAKmC,WAAanC,KAAKoC,WAAapC,KAAKqC,eAAiBrC,KAAKqC,cAAclY,OAC3G,CAEA,SAAS8X,GAAcF,EAASC,GAE9B,GADUhC,KAAKkC,YAAcH,GAAW/B,KAAKyC,aAAeT,GAAYhC,KAAKmC,YAAcJ,GAAW/B,KAAKwC,aAAeR,GAAYhC,KAAKoC,YAAcL,GAAW/B,KAAKuC,aAAeP,EAEtL,OAAO,EAET,IAAI3U,OAAQ,EACRuV,EAAW5C,KAAKqC,cACpB,IAAKO,GAA0C,KAA7BvV,EAAQuV,EAASzY,QACjC,OAAO,EAGT,IADA,IAAIwY,EAAY3C,KAAKsC,eACdjV,KACL,GAAIuV,EAASvV,KAAW0U,GAAWY,EAAUtV,KAAW2U,EACtD,OAAO,EAGX,OAAO,CACT,CAEO,SAAS6B,KACd,OAAO,SAAU/c,GACfA,EAAO0W,UAAUsE,cAAgBA,EACjChb,EAAO0W,UAAUkF,iBAAmBA,EACpC5b,EAAO0W,UAAUwF,gBAAkBA,EACnClc,EAAO0W,UAAUoG,eAAiBA,GAClC9c,EAAO0W,UAAUyE,cAAgBA,EACnC,CACF,CAEO,IAAI6B,GAA6BhD,GAA+CiD,CAAK/H,EAA7B6H,IAAsCG,CAAMhI,EAAS,WAClH,SAAS8H,EAAmB3E,EAAO8E,EAAY3D,EAAiB4D,GAG9DlE,KAAKb,MAAQA,EACba,KAAKiE,WAAaA,EAClBjE,KAAKM,gBAAkBA,EACvBN,KAAKkE,gBAAkBA,CACzB,CA8CA,OA5CAJ,EAAmBtG,UAAU2G,SAAW,WACtC,OAAOnE,KAAKiE,WAAWG,SAASpE,KAAKb,MAAOa,KAAKkE,gBACnD,EAEAJ,EAAmBtG,UAAU6G,SAAW,SAAkBpB,GACxDjD,KAAKiE,WAAW5Y,OAAO2U,KAAKb,MAAO8D,EACrC,EAEAa,EAAmBtG,UAAU0C,UAAY,SAAmB6B,EAASC,GACnE,IAAIsC,EAAQtE,KAOZ,GALKA,KAAK4D,mBACR5D,KAAKkD,SAAWlD,KAAKiE,WAAWG,SAASpE,KAAKb,MAAOa,KAAKkE,iBAC1DlE,KAAKiE,WAAWvC,QAAQ1B,KAAMA,KAAKb,QAErCa,KAAK8B,cAAcC,EAASC,GACH,IAArB9X,UAAUC,QAAgB4X,aAAmBwC,SAC/C,MAAO,CACLC,QAAS,WACPF,EAAMzD,YAAYkB,EAASC,EAC7B,EAGN,EAEA8B,EAAmBtG,UAAUqD,YAAc,SAAqBkB,EAASC,GACnEhC,KAAK0C,iBAAiBX,EAASC,KAAchC,KAAK4D,mBACpD5D,KAAKW,WAAU,GACfX,KAAKkD,cAAWtV,EAEpB,EAEAkW,EAAmBtG,UAAUQ,KAAO,WAClC,IAAIiF,EAAWjD,KAAKiE,WAAWG,SAASpE,KAAKb,MAAOa,KAAKkE,iBACrDhB,EAAWlD,KAAKkD,SAChBD,IAAaC,IACflD,KAAKkD,SAAWD,EAChBjD,KAAKgD,gBAAgBC,EAAUC,IAEjClD,KAAKG,WACLH,KAAKiE,WAAWvC,QAAQ1B,KAAMA,KAAKb,OACnCa,KAAKW,WAAU,EACjB,EAEOmD,CACT,CAvDoH,KAuD5G9H,IAAWA,EAMnB,SAASyI,GAASC,GAChB,OAAQA,CACV,CAEA,SAASC,GAAUtX,EAAOuX,EAASC,GACjC,MAAO,CACLxX,MAAOA,EACPuX,QAASA,EACTC,WAAYA,EAEhB,CAOA,SAASC,KAAe,CAExBA,GAAYtH,UAAY,CACtBuH,kBAAmB,SAA2B1Y,EAAS2Y,EAAcC,EAAYC,EAAKC,EAAUC,GAO9F,IANA,IAAIC,EAAWD,EAASD,EAAW,EAC/BG,EAAcL,EAAaD,EAAe,EAC1CO,EAAY,IAAIlb,MAAMgb,GACtBG,OAAQ,EACRC,OAAO,EAEFnO,EAAI,EAAGA,EAAI+N,IAAY/N,EAC9BiO,EAAUjO,GAAK,IAAIjN,MAAMib,GACzBC,EAAUjO,GAAG,GAAKA,EAGpB,IAAK,IAAIoO,EAAI,EAAGA,EAAIJ,IAAeI,EACjCH,EAAU,GAAGG,GAAKA,EAGpB,IAAK,IAAI1N,EAAK,EAAGA,EAAKqN,IAAYrN,EAChC,IAAK,IAAI2N,EAAK,EAAGA,EAAKL,IAAeK,EAC/B3F,KAAK4F,OAAOvZ,EAAQ2Y,EAAeW,EAAK,GAAIT,EAAIC,EAAWnN,EAAK,IAClEuN,EAAUvN,GAAI2N,GAAMJ,EAAUvN,EAAK,GAAG2N,EAAK,IAE3CH,EAAQD,EAAUvN,EAAK,GAAG2N,GAAM,EAChCF,EAAOF,EAAUvN,GAAI2N,EAAK,GAAK,EAC/BJ,EAAUvN,GAAI2N,GAAMH,EAAQC,EAAOD,EAAQC,GAKjD,OAAOF,CACT,EAEAM,kCAAmC,SAA2CN,GAK5E,IAJA,IAAIjO,EAAIiO,EAAUpb,OAAS,EACvBub,EAAIH,EAAU,GAAGpb,OAAS,EAC1BkC,EAAUkZ,EAAUjO,GAAGoO,GACvBI,EAAQ,GACLxO,EAAI,GAAKoO,EAAI,GAClB,GAAU,IAANpO,EAKJ,GAAU,IAANoO,EAAJ,CAKA,IAII7jB,EAJAkkB,EAAYR,EAAUjO,EAAI,GAAGoO,EAAI,GACjCD,EAAOF,EAAUjO,EAAI,GAAGoO,GACxBF,EAAQD,EAAUjO,GAAGoO,EAAI,IAI3B7jB,EADE4jB,EAAOD,EACHC,EAAOM,EAAYN,EAAOM,EAE1BP,EAAQO,EAAYP,EAAQO,KAGxBA,GACNA,IAAc1Z,EAChByZ,EAAMlc,KApEC,IAsEPkc,EAAMlc,KArEE,GAsERyC,EAAU0Z,GAEZzO,IACAoO,KACS7jB,IAAQ4jB,GACjBK,EAAMlc,KAzEI,GA0EV0N,IACAjL,EAAUoZ,IAEVK,EAAMlc,KA9EC,GA+EP8b,IACArZ,EAAUmZ,EA5BZ,MAHEM,EAAMlc,KAhDI,GAiDV0N,SANAwO,EAAMlc,KA5CC,GA6CP8b,IAwCJ,OADAI,EAAME,UACCF,CACT,EAEAG,YAAa,SAAqB5Z,EAAS2Y,EAAcC,EAAYC,EAAKC,EAAUC,GAClF,IAAIc,EAAc,EACdC,EAAc,EAEdC,EAAYzkB,KAAKE,IAAIojB,EAAaD,EAAcI,EAASD,GAc7D,GAbqB,IAAjBH,GAAmC,IAAbG,IACxBe,EAAclG,KAAKqG,aAAaha,EAAS6Y,EAAKkB,IAG5CnB,IAAe5Y,EAAQlC,QAAUib,IAAWF,EAAI/a,SAClDgc,EAAcnG,KAAKsG,aAAaja,EAAS6Y,EAAKkB,EAAYF,IAI5Df,GAAYe,EAEZd,GAAUe,GADVlB,GAAckB,IAFdnB,GAAgBkB,IAKkB,GAAKd,EAASD,GAAa,EAC3D,MAAO,GAGT,GAAIH,IAAiBC,EAAY,CAE/B,IADA,IAAIsB,EAAU5B,GAAUK,EAAc,GAAI,GACnCG,EAAWC,GAChBmB,EAAQ3B,QAAQhb,KAAKsb,EAAIC,MAG3B,MAAO,CAACoB,EACV,CAAO,GAAIpB,IAAaC,EACtB,MAAO,CAACT,GAAUK,EAAc,GAAIC,EAAaD,IASnD,IANA,IAAIwB,EAAMxG,KAAK6F,kCAAkC7F,KAAK+E,kBAAkB1Y,EAAS2Y,EAAcC,EAAYC,EAAKC,EAAUC,IAEtHzD,OAAS/T,EACT6Y,EAAU,GACVpZ,EAAQ2X,EACR0B,EAAWvB,EACN7N,EAAI,EAAGA,EAAIkP,EAAIrc,SAAUmN,EAChC,OAAQkP,EAAIlP,IACV,KAnIS,EAoIHqK,IACF8E,EAAQ7c,KAAK+X,GACbA,OAAS/T,GAGXP,IACAqZ,IACA,MACF,KA3IU,EA4IH/E,IACHA,EAASgD,GAAUtX,EAAO,GAAI,IAGhCsU,EAAOkD,aACPxX,IAEAsU,EAAOiD,QAAQhb,KAAKsb,EAAIwB,IACxBA,IACA,MACF,KArJO,EAsJA/E,IACHA,EAASgD,GAAUtX,EAAO,GAAI,IAGhCsU,EAAOkD,aACPxX,IACA,MACF,KA5JU,EA6JHsU,IACHA,EAASgD,GAAUtX,EAAO,GAAI,IAGhCsU,EAAOiD,QAAQhb,KAAKsb,EAAIwB,IACxBA,IAQN,OAHI/E,GACF8E,EAAQ7c,KAAK+X,GAER8E,CACT,EAEAJ,aAAc,SAAsBha,EAAS6Y,EAAKyB,GAChD,IAAK,IAAIrP,EAAI,EAAGA,EAAIqP,IAAgBrP,EAClC,IAAK0I,KAAK4F,OAAOvZ,EAAQiL,GAAI4N,EAAI5N,IAC/B,OAAOA,EAIX,OAAOqP,CACT,EAEAL,aAAc,SAAsBja,EAAS6Y,EAAKyB,GAIhD,IAHA,IAAIC,EAASva,EAAQlC,OACjB0c,EAAS3B,EAAI/a,OACb2c,EAAQ,EACLA,EAAQH,GAAgB3G,KAAK4F,OAAOvZ,IAAUua,GAAS1B,IAAM2B,KAClEC,IAGF,OAAOA,CACT,EAEAC,iBAAkB,SAA0B1a,EAAS2a,GACnD,OAAOhH,KAAKiG,YAAY5Z,EAAS,EAAGA,EAAQlC,OAAQ6c,EAAU,EAAGA,EAAS7c,OAC5E,EAEAyb,OAAQ,SAAgBqB,EAAcC,GACpC,OAAOD,IAAiBC,CAC1B,GAGF,IAAIC,GAAc,IAAIrC,GAEf,SAASmB,GAAY5Z,EAAS2Y,EAAcC,EAAYC,EAAKC,EAAUC,GAC5E,OAAO+B,GAAYlB,YAAY5Z,EAAS2Y,EAAcC,EAAYC,EAAKC,EAAUC,EACnF,CA0BO,SAASgC,GAAYX,EAASpZ,EAAOuX,EAASC,GAMnD,IALA,IAzBiBwC,EAAQC,EAAMC,EAAQC,EAyBnC7F,EAASgD,GAAUtX,EAAOuX,EAASC,GAEnC4C,GAAW,EACXC,EAAkB,EAEbpQ,EAAI,EAAGA,EAAImP,EAAQtc,OAAQmN,IAAK,CACvC,IAAIjL,EAAUoa,EAAQnP,GAGtB,GAFAjL,EAAQgB,OAASqa,GAEbD,EAAJ,CAIA,IAAIE,GAtCWN,EAsCgB1F,EAAOtU,MAtCfia,EAsCsB3F,EAAOtU,MAAQsU,EAAOiD,QAAQza,OAtC9Cod,EAsCsDlb,EAAQgB,MAtCtDma,EAsC6Dnb,EAAQgB,MAAQhB,EAAQwY,WArCxHyC,EAAOC,GAAUC,EAAOH,GAClB,EAGNC,IAASC,GAAUC,IAASH,EACvB,EAGLA,EAASE,EACPD,EAAOE,EACFF,EAAOC,EAGTC,EAAOD,EAGZC,EAAOF,EACFE,EAAOH,EAGTC,EAAOD,GAmBZ,GAAIM,GAAkB,EAAG,CAEvBlB,EAAQ9E,OAAOrK,EAAG,GAClBA,IAEAoQ,GAAmBrb,EAAQwY,WAAaxY,EAAQuY,QAAQza,OAExDwX,EAAOkD,YAAcxY,EAAQwY,WAAa8C,EAC1C,IAAIC,EAAcjG,EAAOiD,QAAQza,OAASkC,EAAQuY,QAAQza,OAASwd,EAEnE,GAAKhG,EAAOkD,YAAe+C,EAEpB,CACL,IAAIC,EAAiBxb,EAAQuY,QAE7B,GAAIjD,EAAOtU,MAAQhB,EAAQgB,MAAO,CAChC,IAAIya,EAAUnG,EAAOiD,QAAQzM,MAAM,EAAG9L,EAAQgB,MAAQsU,EAAOtU,OAC7DhD,MAAMmT,UAAU5T,KAAKme,MAAMD,EAASD,GACpCA,EAAiBC,CACnB,CAEA,GAAInG,EAAOtU,MAAQsU,EAAOiD,QAAQza,OAASkC,EAAQgB,MAAQhB,EAAQwY,WAAY,CAC7E,IAAImD,EAASrG,EAAOiD,QAAQzM,MAAM9L,EAAQgB,MAAQhB,EAAQwY,WAAalD,EAAOtU,OAC9EhD,MAAMmT,UAAU5T,KAAKme,MAAMF,EAAgBG,EAC7C,CAEArG,EAAOiD,QAAUiD,EACbxb,EAAQgB,MAAQsU,EAAOtU,QACzBsU,EAAOtU,MAAQhB,EAAQgB,MAE3B,MAnBEoa,GAAW,CAoBf,MAAO,GAAI9F,EAAOtU,MAAQhB,EAAQgB,MAAO,CAEvCoa,GAAW,EAEXhB,EAAQ9E,OAAOrK,EAAG,EAAGqK,GACrBrK,IAEA,IAAIxD,EAAS6N,EAAOkD,WAAalD,EAAOiD,QAAQza,OAChDkC,EAAQgB,OAASyG,EACjB4T,GAAmB5T,CACrB,CA7CA,CA8CF,CAEK2T,GACHhB,EAAQ7c,KAAK+X,EAEjB,CA+EO,IAAIsG,GAAoCpE,IAAwBqE,CAAMjM,EAAU,WACrF,SAASgM,EAAyBE,EAAWC,GAG3CpI,KAAKmI,UAAYA,EACjBnI,KAAKgB,QAAS,EACdhB,KAAKqI,cAAgB,KACrBrI,KAAKsI,cAAgB,KACrBtI,KAAKoI,WAAaA,EAClBpI,KAAKuI,mBAAqBH,aAAsBvf,KAAOuf,aAAsBrf,IAAM,OAAS,QAC9F,CA4FA,OA1FAkf,EAAyBzK,UAAU0C,UAAY,SAAmB6B,EAASC,GACzEhC,KAAK8B,cAAcC,EAASC,EAC9B,EAEAiG,EAAyBzK,UAAUqD,YAAc,SAAqBkB,EAASC,GAC7EhC,KAAK0C,iBAAiBX,EAASC,EACjC,EAEAiG,EAAyBzK,UAAUgL,gBAAkB,SAAyBC,GAC5E,GAAKzI,KAAK4D,kBAAqB5D,KAAK0I,eAApC,CAIA,GAA0B,WAAtBD,EAAaE,KAAmB,CAClC,IAAItb,EAAQob,EAAapb,MACrBub,EAAcH,EAAaI,OAAO1e,OAClCkD,EAAQub,EACVvb,EAAQub,EAAcH,EAAa5D,WAC1BxX,EAAQ,IACjBA,EAAQub,EAAcH,EAAa7D,QAAQza,OAASkD,EAAQob,EAAa5D,YAEvExX,EAAQ,IACVA,EAAQ,GAEVob,EAAapb,MAAQA,CACvB,CAE2B,OAAvB2S,KAAKqI,cACPrI,KAAKqI,cAAgB,CAACI,GAEtBzI,KAAKqI,cAAcze,KAAK6e,GAGrBzI,KAAKgB,SACRhB,KAAKgB,QAAS,EACdhB,KAAKmI,UAAUW,eAAe9I,MAxBhC,CA0BF,EAEAiI,EAAyBzK,UAAUuL,mBAAqB,YAClD/I,KAAKqI,eAAiBrI,KAAKqI,cAAcle,QAAU6V,KAAKsI,gBAC1DtI,KAAKhC,MAET,EAEAiK,EAAyBzK,UAAUpQ,MAAQ,SAAekb,GACxDtI,KAAKsI,cAAgBA,EAEjBtI,KAAK4D,mBAAqB5D,KAAKgB,SACjChB,KAAKgB,QAAS,EACdhB,KAAKmI,UAAUW,eAAe9I,MAElC,EAEAiI,EAAyBzK,UAAUwL,kBAAoB,WACrD,OAAOhJ,KAAK0I,iBAAmB1I,KAAK0I,eAAiB,IAAIO,GAAyBjJ,KAAKoI,YACzF,EAEAH,EAAyBzK,UAAUQ,KAAO,WACxC,IAAIqK,EAAgBrI,KAAKqI,cACrBC,EAAgBtI,KAAKsI,cACrBY,OAAU,EAEdlJ,KAAKgB,QAAS,EACdhB,KAAKqI,cAAgB,GACrBrI,KAAKsI,cAAgB,KAEjBtI,KAAK4D,mBAGHsF,EAFAZ,EACEtI,KAAKoI,sBAAsBvf,KAAOmX,KAAKoI,sBAAsBrf,IAnGlE,SAA0B3G,GAM/B,IALA,IAAI+mB,EAAU,IAAI9e,MAAMjI,EAAIgnB,MACxB5c,EAAOpK,EAAIoK,OACX8K,EAAI,EACJjV,OAAO,GAEJA,EAAOmK,EAAKqE,UACbxO,EAAKgnB,MAITF,EAAQ7R,IAAe,QAnBlB,CACLqR,KAkBuB,QAjBvBE,OAiBgCzmB,EAhBhCqK,IAgBqCpK,EAAK2P,MAf1CkR,cAeaoG,IACbhS,IAGF,OAAO6R,CACT,CAoFoBI,CAAiBjB,GAEjBrC,GAAYjG,KAAKoI,WAAY,EAAGpI,KAAKoI,WAAWje,OAAQme,EAAe,EAAGA,EAAcne,QAGhG6V,KAAKoI,sBAAsBvf,KAAOmX,KAAKoI,sBAAsBrf,IACrDsf,EArIb,SAA6B5H,EAAO4H,GACzC,IAAI5B,EAAU,GAcd,OA/CF,SAA8BhG,EAAO4H,GAGnC,IAFA,IA9Te3D,EA8TX+B,EAAU,GAELnP,EAAI,EAAGA,EAAI+Q,EAAcle,OAAQmN,IAAK,CAC7C,IAAIkS,EAASnB,EAAc/Q,GAC3B,OAAQkS,EAAOb,MACb,IAAK,SACHvB,GAAYX,EAAS+C,EAAOnc,MAAOmc,EAAO5E,QAAQzM,QAASqR,EAAO3E,YAClE,MACF,IAAK,MACL,IAAK,SACL,IAAK,SACH,KAzUSH,EAyUI8E,EAAOpgB,OAxUZsb,IAAM,EAyUZ,SAGF,IAAIrX,EAAQoX,GAAS+E,EAAOpgB,MAC5B,GAAIiE,EAAQ,EACV,SAGF+Z,GAAYX,EAASpZ,EAAO,CAACmc,EAAOtG,UAA2B,WAAhBsG,EAAOb,KAAoB,EAAI,GAC9E,MACF,QACEc,QAAQC,MAAM,2BAA6BC,KAAKC,UAAUJ,IAGhE,CAEA,OAAO/C,CACT,CAKEoD,CAAqBpJ,EAAO4H,GAAe9e,SAAQ,SAAUoY,GACjC,IAAtBA,EAAOkD,YAA8C,IAA1BlD,EAAOiD,QAAQza,OAQ9Csc,EAAUA,EAAQ1f,OAAOkf,GAAYxF,EAAOkB,EAAOtU,MAAOsU,EAAOtU,MAAQsU,EAAOkD,WAAYlD,EAAOiD,QAAS,EAAGjD,EAAOiD,QAAQza,SAPxHwX,EAAOiD,QAAQ,KAAOnE,EAAMkB,EAAOtU,QACrCoZ,EAAQ7c,KAAK+X,EAOnB,IAEO8E,CACT,CAuHoBqD,CAAoB9J,KAAKoI,WAAYC,GAInDrI,KAAKgD,gBAAgBkG,IAGnBlJ,KAAK0I,gBACP1I,KAAK0I,eAAe1K,KAAKgC,KAAKoI,WAAWpI,KAAKuI,oBAElD,EAEON,CACT,CAvGuF,KAuG/EhM,EAEGgN,GAAoCpF,IAAwBkG,CAAM7N,EAAU,WACrF,SAAS+M,EAAyBb,GAGhCpI,KAAKoI,WAAaA,EAClBpI,KAAKuI,mBAAqBH,aAAsBvf,KAAOuf,aAAsBrf,IAAM,OAAS,SAC5FiX,KAAKiH,aAAemB,EAAWpI,KAAKuI,mBACtC,CAwBA,OAtBAU,EAAyBzL,UAAU2G,SAAW,WAC5C,OAAOnE,KAAKoI,WAAWpI,KAAKuI,mBAC9B,EAEAU,EAAyBzL,UAAU6G,SAAW,SAAkBpB,GAC9DjD,KAAKoI,WAAWpI,KAAKuI,oBAAsBtF,CAC7C,EAEAgG,EAAyBzL,UAAU0C,UAAY,SAAmB6B,EAASC,GACzEhC,KAAK8B,cAAcC,EAASC,EAC9B,EAEAiH,EAAyBzL,UAAUqD,YAAc,SAAqBkB,EAASC,GAC7EhC,KAAK0C,iBAAiBX,EAASC,EACjC,EAEAiH,EAAyBzL,UAAUQ,KAAO,SAAciF,GACtD,IAAIC,EAAWlD,KAAKiH,aACpBjH,KAAKgD,gBAAgBC,EAAUC,GAC/BlD,KAAKiH,aAAehE,CACtB,EAEOgG,CACT,CAhCuF,KAgC/E/M,EAEJ8N,GAAa3f,MAAMmT,UACnByM,GAAMD,GAAWC,IACjBrgB,GAAOogB,GAAWpgB,KAClBoc,GAAUgE,GAAWhE,QACrBkE,GAAQF,GAAWE,MACnBjhB,GAAO+gB,GAAW/gB,KAClB0Y,GAASqI,GAAWrI,OACpBwI,GAAUH,GAAWG,QAErBH,GAAWI,eACb,YAAqB,qBAAqBC,KAAK,0OAE/CC,QAAQlN,eAAe4M,GAAY,iBAAkB,CAAEhY,MAAO,IAC9DgY,GAAWC,IAAM,WACf,IAAIM,EAAWvK,KAAK7V,OAAS,EACzBqgB,EAAmBP,GAAIlC,MAAM/H,KAAM9V,WASvC,OARIqgB,QAAwC3c,IAA5BoS,KAAKyK,oBACnBzK,KAAKyK,mBAAmBjC,gBAAgB,CACtCG,KAAM,SACNE,OAAQ7I,KACR5W,KAAM4W,KAAK7V,OACX+Y,SAAUsH,IAGPA,CACT,EAEAR,GAAWpgB,KAAO,WAChB,IAAI4gB,EAAmB5gB,GAAKme,MAAM/H,KAAM9V,WAUxC,YATgC0D,IAA5BoS,KAAKyK,oBACPzK,KAAKyK,mBAAmBjC,gBAAgB,CACtCG,KAAM,SACNE,OAAQ7I,KACR3S,MAAO2S,KAAK7V,OAASD,UAAUC,OAC/Bya,QAAS,GACTC,WAAY3a,UAAUC,SAGnBqgB,CACT,EAEAR,GAAWhE,QAAU,WACnB,IAAI0E,OAAW,OACiB9c,IAA5BoS,KAAKyK,qBACPzK,KAAKyK,mBAAmB1B,qBACxB2B,EAAW1K,KAAK7H,SAElB,IAAIqS,EAAmBxE,GAAQ+B,MAAM/H,KAAM9V,WAI3C,YAHgC0D,IAA5BoS,KAAKyK,oBACPzK,KAAKyK,mBAAmBrd,MAAMsd,GAEzBF,CACT,EAEAR,GAAWE,MAAQ,WACjB,IAAIK,EAAWvK,KAAK7V,OAAS,EACzBqgB,EAAmBN,GAAMnC,MAAM/H,KAAM9V,WASzC,OARIqgB,QAAwC3c,IAA5BoS,KAAKyK,oBACnBzK,KAAKyK,mBAAmBjC,gBAAgB,CACtCG,KAAM,SACNE,OAAQ7I,KACR5W,KAAM,EACN8Z,SAAUsH,IAGPA,CACT,EAEAR,GAAW/gB,KAAO,WAChB,IAAIyhB,OAAW,OACiB9c,IAA5BoS,KAAKyK,qBACPzK,KAAKyK,mBAAmB1B,qBACxB2B,EAAW1K,KAAK7H,SAElB,IAAIqS,EAAmBvhB,GAAK8e,MAAM/H,KAAM9V,WAIxC,YAHgC0D,IAA5BoS,KAAKyK,oBACPzK,KAAKyK,mBAAmBrd,MAAMsd,GAEzBF,CACT,EAEAR,GAAWrI,OAAS,WAClB,IAAI6I,EAAmB7I,GAAOoG,MAAM/H,KAAM9V,WAU1C,YATgC0D,IAA5BoS,KAAKyK,oBACPzK,KAAKyK,mBAAmBjC,gBAAgB,CACtCG,KAAM,SACNE,OAAQ7I,KACR3S,OAAQnD,UAAU,GAClB0a,QAAS4F,EACT3F,WAAY3a,UAAUC,OAAS,EAAID,UAAUC,OAAS,EAAI,IAGvDqgB,CACT,EAEAR,GAAWG,QAAU,WACnB,IAAIK,EAAmBL,GAAQpC,MAAM/H,KAAM9V,WAU3C,YATgC0D,IAA5BoS,KAAKyK,oBACPzK,KAAKyK,mBAAmBjC,gBAAgB,CACtCG,KAAM,SACNE,OAAQ7I,KACR3S,MAAO,EACPuX,QAAS,GACTC,WAAY3a,UAAUC,SAGnBqgB,CACT,GAOF,IAAIG,GAAsB,SAAUC,GAGlC,SAASD,EAAoBxC,EAAW1H,GAGtC,OAAO3C,EAA2BkC,KAAM4K,EAAsB5M,KAAKgC,KAAMmI,EAAW1H,GACtF,CAgBA,OAtBAvC,EAAUyM,EAAqBC,GAQ/BD,EAAoBE,IAAM,SAAc1C,EAAW1H,GAOjD,MANM,uBAAwBA,GAC5B6J,QAAQlN,eAAeqD,EAAO,qBAAsB,CAClDzO,MAAO2Y,EAAoBrM,OAAO6J,EAAW1H,GAC7CxD,YAAY,EAAOC,cAAc,IAG9BuD,EAAMgK,kBACf,EAEAE,EAAoBrM,OAAS,SAAgB6J,EAAW1H,GACtD,OAAO,IAAIkK,EAAoBxC,EAAW1H,EAC5C,EAEOkK,CACT,CAxB0B,CAwBxB1C,IAES6C,GAAa,WACtB,SAASA,IAGP9K,KAAK+K,cAAe,CACtB,CAcA,OAZAD,EAAWtN,UAAU4G,SAAW,SAAkBjF,EAAO+E,EAAiB9Z,GACxE,MAAM,IAAI4gB,MAAM,uBAAyBhL,KAAO,yBAClD,EAEA8K,EAAWtN,UAAUnS,OAAS,SAAgB8T,EAAOnN,EAAOkS,GAC1D,MAAM,IAAI8G,MAAM,uBAAyBhL,KAAO,2BAClD,EAEA8K,EAAWtN,UAAUtc,SAAW,WAC9B,MAAsC,oBAAxB+pB,oBAAsCC,GAAUC,QAAQnL,MAAQuE,SAAS/G,UAAUtc,SAAS8c,KAAKgC,KACjH,EAEO8K,CACT,CApBwB,GAsBbM,GAAkB,SAAUC,GAGrC,SAASD,EAAgBnH,EAAY7a,EAAMgB,GAGzC,IAAIkhB,EAASxN,EAA2BkC,KAAMqL,EAAYrN,KAAKgC,OAK/D,OAHAsL,EAAOrH,WAAaA,EACpBqH,EAAOliB,KAAOA,EACdkiB,EAAOlhB,KAAOA,EACPkhB,CACT,CA2CA,OAtDApN,EAAUkN,EAAiBC,GAa3BD,EAAgB5N,UAAU4G,SAAW,SAAkBjF,EAAO+E,GAC5D,OAAOlE,KAAKiE,WAAWG,SAASjF,EAAO+E,EACzC,EAEAkH,EAAgB5N,UAAUnS,OAAS,SAAgB8T,EAAOnN,EAAOkS,GAC/D,OAAOlE,KAAKiE,WAAW5Y,OAAO8T,EAAOnN,EAAOkS,EAC9C,EAEAkH,EAAgB5N,UAAU+N,OAAS,SAAgBC,GACjD,OAAOA,EAAQC,qBAAqBzL,KACtC,EAEAoL,EAAgB5N,UAAUkE,QAAU,SAAiBF,EAASrC,GAC5Da,KAAKiE,WAAWvC,QAAQF,EAASrC,EACnC,EAEAiM,EAAgB5N,UAAUkO,KAAO,SAAclK,EAASrC,EAAO+E,GACzDlE,KAAKiE,WAAWA,YAAcjE,KAAKiE,WAAWyH,MAChD1L,KAAKiE,WAAWyH,KAAKlK,EAASrC,EAAO+E,GAEvC,IAAIyH,EAAWzH,EAAgB0H,iBAAiB5L,KAAK5W,MACrD,IAAKuiB,EACH,MAAM,IAAIX,MAAM,6BAA+BhL,KAAK5W,KAAO,gBAE7D,IAAIyiB,EAAc,YAAc7L,KAAK5W,KACrC,GAAIoY,EAAQqK,GACV,MAAM,IAAIb,MAAM,6BAA+BhL,KAAK5W,KAAO,kCAAoC4W,KAAKiE,WAAa,KAEnHzC,EAAQqK,GAAeF,EACvBA,EAASD,KAAK3D,MAAM4D,EAAU,CAACnK,EAASrC,GAAOpY,OAAO+kB,GAAS3M,EAAOa,KAAK5V,KAAMoX,EAAQ0C,kBAC3F,EAEAkH,EAAgB5N,UAAUuO,OAAS,SAAgBvK,EAASrC,GAC1D,IAAI0M,EAAc,YAAc7L,KAAK5W,KACrCoY,EAAQqK,GAAaE,OAAOvK,EAASrC,GACrCqC,EAAQqK,GAAe,KACnB7L,KAAKiE,WAAWA,YAAcjE,KAAKiE,WAAW8H,QAChD/L,KAAKiE,WAAW8H,OAAOvK,EAASrC,EAEpC,EAEOiM,CACT,CAxD6B,CAwD3BN,IAESkB,GAAiB,SAAUC,GAGpC,SAASD,EAAe/H,EAAY7a,EAAMgB,GAGxC,IAAI8hB,EAASpO,EAA2BkC,KAAMiM,EAAajO,KAAKgC,OAMhE,OAJAkM,EAAOjI,WAAaA,EACpBiI,EAAO9iB,KAAOA,EACd8iB,EAAO9hB,KAAOA,EACd8hB,EAAOC,QAAU,CAAClI,GAAYld,OAAOqD,GAC9B8hB,CACT,CAoDA,OAhEAhO,EAAU8N,EAAgBC,GAc1BD,EAAexO,UAAU4G,SAAW,SAAkBjF,EAAO+E,GAC3D,IAAIkI,EAAYlI,EAAgBmI,gBAAgBrM,KAAK5W,MACrD,IAAKgjB,EACH,MAAM,IAAIpB,MAAM,4BAA8BhL,KAAK5W,KAAO,gBAG5D,MAAI,WAAYgjB,EACPA,EAAUE,OAAOvE,MAAMqE,EAAWN,GAAS3M,EAAOa,KAAKmM,QAASjI,IAGlElE,KAAKmM,QAAQ,GAAG/H,SAASjF,EAAO+E,EACzC,EAEA8H,EAAexO,UAAUnS,OAAS,SAAgB8T,EAAOnN,EAAOkS,GAC9D,IAAIkI,EAAYlI,EAAgBmI,gBAAgBrM,KAAK5W,MACrD,IAAKgjB,EACH,MAAM,IAAIpB,MAAM,4BAA8BhL,KAAK5W,KAAO,gBAO5D,MAJI,aAAcgjB,IAChBpa,EAAQoa,EAAUG,SAASxE,MAAMqE,EAAW,CAACpa,GAAOjL,OAAO+kB,GAAS3M,EAAOa,KAAK5V,KAAM8Z,MAGjFlE,KAAKmM,QAAQ,GAAG9gB,OAAO8T,EAAOnN,EAAOkS,EAC9C,EAEA8H,EAAexO,UAAU+N,OAAS,SAAgBC,GAChD,OAAOA,EAAQgB,oBAAoBxM,KACrC,EAEAgM,EAAexO,UAAUkE,QAAU,SAAiBF,EAASrC,GAG3D,IAFA,IAAIsN,EAAczM,KAAKmM,QACnB7U,EAAImV,EAAYtiB,OACbmN,KACLmV,EAAYnV,GAAGoK,QAAQF,EAASrC,GAElC,IAAIiN,EAAY5K,EAAQ0C,gBAAgBmI,gBAAgBrM,KAAK5W,MAC7D,IAAKgjB,EACH,MAAM,IAAIpB,MAAM,4BAA8BhL,KAAK5W,KAAO,gBAE5D,IAAIsjB,EAAUN,EAAUM,QACxB,QAAgB9e,IAAZ8e,EAIJ,IADApV,EAAIoV,EAAQviB,OACLmN,KACLqV,GAAuBnL,EAASkL,EAAQpV,GAE5C,EAEO0U,CACT,CAlE4B,CAkE1BlB,IAES8B,GAAS,SAAUC,GAG5B,SAASD,EAAO9lB,EAAQkL,GAGtB,IAAI8a,EAAShP,EAA2BkC,KAAM6M,EAAa7O,KAAKgC,OAKhE,OAHA8M,EAAOhmB,OAASA,EAChBgmB,EAAO9a,MAAQA,EACf8a,EAAO/B,cAAe,EACf+B,CACT,CAiBA,OA5BA5O,EAAU0O,EAAQC,GAalBD,EAAOpP,UAAU4G,SAAW,SAAkBjF,EAAO+E,GACnD,OAAOlE,KAAKlZ,OAAOuE,OAAO8T,EAAOa,KAAKhO,MAAMoS,SAASjF,EAAO+E,GAC9D,EAEA0I,EAAOpP,UAAU+N,OAAS,SAAgBwB,GACxCA,EAAOC,YAAYhN,KACrB,EAEA4M,EAAOpP,UAAUkE,QAAU,SAAiBF,EAASrC,GAAQ,EAE7DyN,EAAOpP,UAAUnS,OAAS,SAAgB8T,EAAOnN,GAC/CgO,KAAKhO,MAAM3G,OAAO8T,EAAOnN,GACzBgO,KAAKlZ,OAAOuE,OAAO8T,EAAOnN,EAC5B,EAEO4a,CACT,CA9BoB,CA8BlB9B,IAESmC,GAAc,SAAUC,GAGjC,SAASD,EAAYE,EAAWC,EAAKC,GAGnC,IAAIC,EAASxP,EAA2BkC,KAAMkN,EAAalP,KAAKgC,OAKhE,OAHAsN,EAAOH,UAAYA,EACnBG,EAAOF,IAAMA,EACbE,EAAOD,GAAKA,EACLC,CACT,CAmBA,OA9BApP,EAAU+O,EAAaC,GAavBD,EAAYzP,UAAU4G,SAAW,SAAkBjF,EAAO+E,GACxD,OAASlE,KAAKmN,UAAU/I,SAASjF,EAAO+E,GAAmBlE,KAAKoN,IAAIhJ,SAASjF,EAAO+E,GAAmBlE,KAAKqN,GAAGjJ,SAASjF,EAAO+E,EACjI,EAEA+I,EAAYzP,UAAU+N,OAAS,SAAgBC,GAC7C,OAAOA,EAAQ+B,iBAAiBvN,KAClC,EAEAiN,EAAYzP,UAAUkE,QAAU,SAAiBF,EAASrC,GACxDa,KAAKmN,UAAUzL,QAAQF,EAASrC,GAC5Ba,KAAKmN,UAAU/I,SAASjF,GAC1Ba,KAAKoN,IAAI1L,QAAQF,EAASrC,GAE1Ba,KAAKqN,GAAG3L,QAAQF,EAASrC,EAE7B,EAEO8N,CACT,CAhCyB,CAgCvBnC,IAES0C,GAAa,SAAUC,GAGhC,SAASD,EAAWpO,GAGlB,IAAIsO,EAAS5P,EAA2BkC,KAAMyN,EAAazP,KAAKgC,OAGhE,OADA0N,EAAOtO,SAAWA,EACXsO,CACT,CAiBA,OA1BAxP,EAAUsP,EAAYC,GAWtBD,EAAWhQ,UAAU4G,SAAW,SAAkBjF,EAAO+E,GAGvD,IAFA,IAAI7E,EAAKF,EAAMG,gBACXhI,EAAI0I,KAAKZ,SACN9H,KAAO+H,GACZA,EAAKA,EAAGJ,sBAEV,OAAO3H,EAAI,GAAK+H,EAAKA,EAAGL,oBAAiBpR,CAC3C,EAEA4f,EAAWhQ,UAAU+N,OAAS,SAAgBC,GAC5C,OAAOA,EAAQmC,gBAAgB3N,KACjC,EAEAwN,EAAWhQ,UAAUkE,QAAU,SAAiBF,EAASrC,GAAQ,EAE1DqO,CACT,CA5BwB,CA4BtB1C,IAES8C,GAAc,SAAUC,GAGjC,SAASD,EAAYxkB,EAAMgW,GAGzB,IAAI0O,EAAShQ,EAA2BkC,KAAM6N,EAAa7P,KAAKgC,OAKhE,OAHA8N,EAAO1kB,KAAOA,EACd0kB,EAAO1O,SAAWA,EAClB0O,EAAO/C,cAAe,EACf+C,CACT,CAqBA,OAhCA5P,EAAU0P,EAAaC,GAavBD,EAAYpQ,UAAU4G,SAAW,SAAkBjF,EAAO+E,GAExD,OADchF,EAAcc,KAAK5W,KAAM+V,EAAOa,KAAKZ,UACpCY,KAAK5W,KACtB,EAEAwkB,EAAYpQ,UAAUnS,OAAS,SAAgB8T,EAAOnN,GACpD,IAAI+P,EAAU7C,EAAcc,KAAK5W,KAAM+V,EAAOa,KAAKZ,UACnD,OAAO2C,EAAUA,EAAQ/B,KAAK5W,MAAQ4I,OAAQpE,CAChD,EAEAggB,EAAYpQ,UAAU+N,OAAS,SAAgBC,GAC7C,OAAOA,EAAQuC,iBAAiB/N,KAClC,EAEA4N,EAAYpQ,UAAUkE,QAAU,SAAiBF,EAASrC,GACxD,IAAI4C,EAAU7C,EAAcc,KAAK5W,KAAM+V,EAAOa,KAAKZ,UACnDoC,EAAQpB,gBAAgB2B,EAAS/B,KAAK5W,KACxC,EAEOwkB,CACT,CAlCyB,CAkCvB9C,IAESkD,GAAe,SAAUC,GAGlC,SAASD,EAAanF,EAAQzf,GAG5B,IAAI8kB,EAASpQ,EAA2BkC,KAAMiO,EAAajQ,KAAKgC,OAKhE,OAHAkO,EAAOrF,OAASA,EAChBqF,EAAO9kB,KAAOA,EACd8kB,EAAOnD,cAAe,EACfmD,CACT,CA+BA,OA1CAhQ,EAAU8P,EAAcC,GAaxBD,EAAaxQ,UAAU4G,SAAW,SAAkBjF,EAAO+E,GACzD,IAAItY,EAAWoU,KAAK6I,OAAOzE,SAASjF,EAAO+E,GAC3C,OAAOtY,QAA8CA,EAAWA,EAASoU,KAAK5W,KAChF,EAEA4kB,EAAaxQ,UAAUnS,OAAS,SAAgB8T,EAAOnN,GACrD,IAAIpG,EAAWoU,KAAK6I,OAAOzE,SAASjF,GAQpC,OANIvT,UACFA,EAAW,CAAC,EACZoU,KAAK6I,OAAOxd,OAAO8T,EAAOvT,IAG5BA,EAASoU,KAAK5W,MAAQ4I,EACfA,CACT,EAEAgc,EAAaxQ,UAAU+N,OAAS,SAAgBC,GAC9C,OAAOA,EAAQ2C,kBAAkBnO,KACnC,EAEAgO,EAAaxQ,UAAUkE,QAAU,SAAiBF,EAASrC,GACzDa,KAAK6I,OAAOnH,QAAQF,EAASrC,GAC7B,IAAIvB,EAAMoC,KAAK6I,OAAOzE,SAASjF,GAC3BvB,GACF4D,EAAQpB,gBAAgBxC,EAAKoC,KAAK5W,KAEtC,EAEO4kB,CACT,CA5C0B,CA4CxBlD,IAESsD,GAAc,SAAUC,GAGjC,SAASD,EAAYvF,EAAQpc,GAG3B,IAAI6hB,EAAUxQ,EAA2BkC,KAAMqO,EAAarQ,KAAKgC,OAKjE,OAHAsO,EAAQzF,OAASA,EACjByF,EAAQ7hB,IAAMA,EACd6hB,EAAQvD,cAAe,EAChBuD,CACT,CA+BA,OA1CApQ,EAAUkQ,EAAaC,GAavBD,EAAY5Q,UAAU4G,SAAW,SAAkBjF,EAAO+E,GAGxD,OAohBctG,EAthBCoC,KAAK6I,OAAOzE,SAASjF,EAAO+E,GAshBxBzX,EArhBNuT,KAAKvT,IAAI2X,SAASjF,EAAO+E,GAshBpC7Z,MAAMkkB,QAAQ3Q,GACTA,EAAI4Q,SAAS/hB,EAAK,KAChBmR,GAEAA,QADFA,EAAInR,QACN,EALT,IAAkBmR,EAAKnR,CAnhBrB,EAEA2hB,EAAY5Q,UAAUnS,OAAS,SAAgB8T,EAAOnN,GAGpD,OA0hBJ,SAAkB4L,EAAKnR,EAAKuF,GAC1B,GAAI3H,MAAMkkB,QAAQ3Q,GAAM,CACtB,IAAIvQ,EAAQmhB,SAAS/hB,EAAK,IAEtBmR,EAAIzT,QAAUkD,IAChBuQ,EAAIzT,OAASkD,EAAQ,GAGvBuQ,EAAIvQ,GAAS2E,CACf,MACE4L,EAAInR,GAAOuF,EAGb,OAAOA,CACT,CAxiBWyc,CAFQzO,KAAK6I,OAAOzE,SAASjF,GACvBa,KAAKvT,IAAI2X,SAASjF,GACGnN,EACpC,EAEAoc,EAAY5Q,UAAU+N,OAAS,SAAgBC,GAC7C,OAAOA,EAAQkD,iBAAiB1O,KAClC,EAEAoO,EAAY5Q,UAAUkE,QAAU,SAAiBF,EAASrC,GACxDa,KAAK6I,OAAOnH,QAAQF,EAASrC,GAC7B,IAAIvB,EAAMoC,KAAK6I,OAAOzE,SAASjF,GAC/B,GAAIvB,aAAexS,OAAQ,CACzB4U,KAAKvT,IAAIiV,QAAQF,EAASrC,GAC1B,IAAI1S,EAAMuT,KAAKvT,IAAI2X,SAASjF,GAExB1S,SAAuCpC,MAAMkkB,QAAQ3Q,IAAuB,iBAARnR,GACtE+U,EAAQpB,gBAAgBxC,EAAKnR,EAEjC,CACF,EAEO2hB,CACT,CA5CyB,CA4CvBtD,IAES6D,GAAY,SAAUC,GAG/B,SAASD,EAAUvlB,EAAMgB,EAAMgV,GAG7B,IAAIyP,EAAU/Q,EAA2BkC,KAAM4O,EAAa5Q,KAAKgC,OAKjE,OAHA6O,EAAQzlB,KAAOA,EACfylB,EAAQzkB,KAAOA,EACfykB,EAAQzP,SAAWA,EACZyP,CACT,CAwBA,OAnCA3Q,EAAUyQ,EAAWC,GAarBD,EAAUnR,UAAU4G,SAAW,SAAkBjF,EAAO+E,EAAiB4K,GACvE,IAAI1kB,EAAO0hB,GAAS3M,EAAOa,KAAK5V,KAAM8Z,GAClCnC,EAAU7C,EAAcc,KAAK5W,KAAM+V,EAAOa,KAAKZ,UAC/C2P,EAAOC,GAAYjN,EAAS/B,KAAK5W,KAAM0lB,GAC3C,GAAIC,EACF,OAAOA,EAAKhH,MAAMhG,EAAS3X,EAG/B,EAEAukB,EAAUnR,UAAU+N,OAAS,SAAgBC,GAC3C,OAAOA,EAAQyD,eAAejP,KAChC,EAEA2O,EAAUnR,UAAUkE,QAAU,SAAiBF,EAASrC,GAGtD,IAFA,IAAI/U,EAAO4V,KAAK5V,KACZkN,EAAIlN,EAAKD,OACNmN,KACLlN,EAAKkN,GAAGoK,QAAQF,EAASrC,EAE7B,EAEOwP,CACT,CArCuB,CAqCrB7D,IAESoE,GAAa,SAAUC,GAGhC,SAASD,EAAWrG,EAAQzf,EAAMgB,GAGhC,IAAIglB,EAAUtR,EAA2BkC,KAAMmP,EAAcnR,KAAKgC,OAKlE,OAHAoP,EAAQvG,OAASA,EACjBuG,EAAQhmB,KAAOA,EACfgmB,EAAQhlB,KAAOA,EACRglB,CACT,CA4BA,OAvCAlR,EAAUgR,EAAYC,GAatBD,EAAW1R,UAAU4G,SAAW,SAAkBjF,EAAO+E,EAAiB4K,GACxE,IAAIljB,EAAWoU,KAAK6I,OAAOzE,SAASjF,EAAO+E,GACvC9Z,EAAO0hB,GAAS3M,EAAOa,KAAK5V,KAAM8Z,GAClC6K,EAAOC,GAAYpjB,EAAUoU,KAAK5W,KAAM0lB,GAC5C,GAAIC,EACF,OAAOA,EAAKhH,MAAMnc,EAAUxB,EAGhC,EAEA8kB,EAAW1R,UAAU+N,OAAS,SAAgBC,GAC5C,OAAOA,EAAQ6D,gBAAgBrP,KACjC,EAEAkP,EAAW1R,UAAUkE,QAAU,SAAiBF,EAASrC,GAGvD,GAFAa,KAAK6I,OAAOnH,QAAQF,EAASrC,GAEzB6P,GADMhP,KAAK6I,OAAOzE,SAASjF,GACVa,KAAK5W,MAAM,GAG9B,IAFA,IAAIgB,EAAO4V,KAAK5V,KACZkN,EAAIlN,EAAKD,OACNmN,KACLlN,EAAKkN,GAAGoK,QAAQF,EAASrC,EAG/B,EAEO+P,CACT,CAzCwB,CAyCtBpE,IAESwE,GAAe,SAAUC,GAGlC,SAASD,EAAaP,EAAM3kB,GAG1B,IAAIolB,EAAU1R,EAA2BkC,KAAMuP,EAAcvR,KAAKgC,OAIlE,OAFAwP,EAAQT,KAAOA,EACfS,EAAQplB,KAAOA,EACRolB,CACT,CA6BA,OAvCAtR,EAAUoR,EAAcC,GAYxBD,EAAa9R,UAAU4G,SAAW,SAAkBjF,EAAO+E,EAAiB4K,GAC1E,IAAIC,EAAO/O,KAAK+O,KAAK3K,SAASjF,EAAO+E,GACrC,GAAoB,mBAAT6K,EACT,OAAOA,EAAKhH,MAAM,KAAM+D,GAAS3M,EAAOa,KAAK5V,KAAM8Z,IAErD,GAAK4K,GAAgB,MAACC,EAGtB,MAAM,IAAI/D,MAAMhL,KAAK+O,KAAO,qBAC9B,EAEAO,EAAa9R,UAAU+N,OAAS,SAAgBC,GAC9C,OAAOA,EAAQiE,kBAAkBzP,KACnC,EAEAsP,EAAa9R,UAAUkE,QAAU,SAAiBF,EAASrC,GAGzD,GAFAa,KAAK+O,KAAKrN,QAAQF,EAASrC,GAEP,mBADTa,KAAK+O,KAAK3K,SAASjF,GAI5B,IAFA,IAAI/U,EAAO4V,KAAK5V,KACZkN,EAAIlN,EAAKD,OACNmN,KACLlN,EAAKkN,GAAGoK,QAAQF,EAASrC,EAG/B,EAEOmQ,CACT,CAzC0B,CAyCxBxE,IAES4E,GAAS,SAAUC,GAG5B,SAASD,EAAOE,EAAWlsB,EAAMK,GAG/B,IAAI8rB,EAAU/R,EAA2BkC,KAAM2P,EAAc3R,KAAKgC,OAKlE,OAHA6P,EAAQD,UAAYA,EACpBC,EAAQnsB,KAAOA,EACfmsB,EAAQ9rB,MAAQA,EACT8rB,CACT,CAmFA,OA9FA3R,EAAUwR,EAAQC,GAalBD,EAAOlS,UAAU4G,SAAW,SAAkBjF,EAAO+E,GACnD,IAAIxgB,EAAOsc,KAAKtc,KAAK0gB,SAASjF,EAAO+E,GAErC,OAAQlE,KAAK4P,WACX,IAAK,KACH,OAAOlsB,GAAQsc,KAAKjc,MAAMqgB,SAASjF,EAAO+E,GAC5C,IAAK,KACH,OAAOxgB,GAAQsc,KAAKjc,MAAMqgB,SAASjF,EAAO+E,GAG9C,IA+ToBnN,EAAGC,EA/TnBjT,EAAQic,KAAKjc,MAAMqgB,SAASjF,EAAO+E,GAEvC,OAAQlE,KAAK4P,WACX,IAAK,KACH,OAAOlsB,GAAQK,EACjB,IAAK,MACH,OAAOL,IAASK,EAClB,IAAK,KACH,OAAOL,GAAQK,EACjB,IAAK,MACH,OAAOL,IAASK,EAClB,IAAK,aACH,MAAwB,mBAAVA,GAAwBL,aAAgBK,EACxD,IAAK,KACH,MAAyE,iBAAhD,IAAVA,EAAwB,YAAc0Z,EAAQ1Z,KAAkC,OAAVA,GAAkBL,KAAQK,EAGnH,GAAa,OAATL,GAA2B,OAAVK,QAA2B6J,IAATlK,QAAgCkK,IAAV7J,EAAqB,CAChF,OAAQic,KAAK4P,WACX,IAAK,IACH,OAAIlsB,QAA4CA,EAC5CK,QAA8CA,EAC3C,EACT,IAAK,IACH,OAAIL,QAA4CA,EAC5CK,QAA8C,EAAIA,EAC/C,EAGX,OAAO,IACT,CAEA,OAAQic,KAAK4P,WACX,IAAK,IACH,OA6RmB5Y,EA7RSjT,EA8RxB,QADYgT,EA7RMrT,IA8RJ,OAANsT,EACC,iBAAND,GAA+B,iBAANC,EAC3BD,EAAIC,EAAE9V,WAGE,iBAAN6V,GAA+B,iBAANC,EAC3BD,EAAE7V,WAAa8V,EAGjBD,EAAIC,EAGH,OAAND,EACKA,EAGC,OAANC,EACKA,EAGF,EAjTH,IAAK,IACH,OAAOtT,EAAOK,EAChB,IAAK,IACH,OAAOL,EAAOK,EAChB,IAAK,IACH,OAAOL,EAAOK,EAChB,IAAK,IACH,OAAOL,EAAOK,EAChB,IAAK,IACH,OAAOL,EAAOK,EAChB,IAAK,IACH,OAAOL,EAAOK,EAChB,IAAK,KACH,OAAOL,GAAQK,EACjB,IAAK,KACH,OAAOL,GAAQK,EACjB,IAAK,IACH,OAAOL,EAAOK,EAGlB,MAAM,IAAIinB,MAAM,mBAAqBhL,KAAK4P,UAAY,gBACxD,EAEAF,EAAOlS,UAAU+N,OAAS,SAAgBC,GACxC,OAAOA,EAAQsE,YAAY9P,KAC7B,EAEA0P,EAAOlS,UAAUkE,QAAU,SAAiBF,EAASrC,GACnDa,KAAKtc,KAAKge,QAAQF,EAASrC,GAC3B,IAAIzb,EAAOsc,KAAKtc,KAAK0gB,SAASjF,GACP,OAAnBa,KAAK4P,YAAuBlsB,GAA2B,OAAnBsc,KAAK4P,WAAsBlsB,GAGnEsc,KAAKjc,MAAM2d,QAAQF,EAASrC,EAC9B,EAEOuQ,CACT,CAhGoB,CAgGlB5E,IAESiF,GAAQ,SAAUC,GAG3B,SAASD,EAAMH,EAAW3L,GAGxB,IAAIgM,EAAUnS,EAA2BkC,KAAMgQ,EAAchS,KAAKgC,OAIlE,OAFAiQ,EAAQL,UAAYA,EACpBK,EAAQhM,WAAaA,EACdgM,CACT,CAuBA,OAjCA/R,EAAU6R,EAAOC,GAYjBD,EAAMvS,UAAU4G,SAAW,SAAkBjF,EAAO+E,GAClD,OAAQlE,KAAK4P,WACX,IAAK,IACH,OAAQ5P,KAAKiE,WAAWG,SAASjF,EAAO+E,GAC1C,IAAK,SACH,OAAOzG,EAAQuC,KAAKiE,WAAWG,SAASjF,EAAO+E,IACjD,IAAK,OACH,YAAYlE,KAAKiE,WAAWG,SAASjF,EAAO+E,GAGhD,MAAM,IAAI8G,MAAM,mBAAqBhL,KAAK4P,UAAY,gBACxD,EAEAG,EAAMvS,UAAU+N,OAAS,SAAgBC,GACvC,OAAOA,EAAQ0E,YAAYlQ,KAC7B,EAEA+P,EAAMvS,UAAUkE,QAAU,SAAiBF,EAASrC,GAClDa,KAAKiE,WAAWvC,QAAQF,EAASrC,EACnC,EAEO4Q,CACT,CAnCmB,CAmCjBjF,IAESqF,GAAmB,SAAUC,GAGtC,SAASD,EAAiBne,GAGxB,IAAIqe,EAAUvS,EAA2BkC,KAAMoQ,EAAcpS,KAAKgC,OAGlE,OADAqQ,EAAQre,MAAQA,EACTqe,CACT,CAYA,OArBAnS,EAAUiS,EAAkBC,GAW5BD,EAAiB3S,UAAU4G,SAAW,SAAkBjF,EAAO+E,GAC7D,OAAOlE,KAAKhO,KACd,EAEAme,EAAiB3S,UAAU+N,OAAS,SAAgBC,GAClD,OAAOA,EAAQ8E,sBAAsBtQ,KACvC,EAEAmQ,EAAiB3S,UAAUkE,QAAU,SAAiBF,EAASrC,GAAQ,EAEhEgR,CACT,CAvB8B,CAuB5BrF,IAESyF,GAAgB,SAAUC,GAGnC,SAASD,EAAcve,GAGrB,IAAIye,EAAU3S,EAA2BkC,KAAMwQ,EAAcxS,KAAKgC,OAGlE,OADAyQ,EAAQze,MAAQA,EACTye,CACT,CAYA,OArBAvS,EAAUqS,EAAeC,GAWzBD,EAAc/S,UAAU4G,SAAW,SAAkBjF,EAAO+E,GAC1D,OAAOlE,KAAKhO,KACd,EAEAue,EAAc/S,UAAU+N,OAAS,SAAgBC,GAC/C,OAAOA,EAAQkF,mBAAmB1Q,KACpC,EAEAuQ,EAAc/S,UAAUkE,QAAU,SAAiBF,EAASrC,GAAQ,EAE7DoR,CACT,CAvB2B,CAuBzBzF,IAES6F,GAAkB,SAAUC,GAGrC,SAASD,EAAgBE,EAAQpE,EAAaqE,EAAKC,GAGjD,IAAIC,EAAUlT,EAA2BkC,KAAM4Q,EAAc5S,KAAKgC,OAMlE,GAJAgR,EAAQH,OAASA,EACjBG,EAAQvE,YAAcA,GAAe,GACrCuE,EAAQ7mB,OAAS6mB,EAAQvE,YAAYtiB,OACrC6mB,EAAQC,YAAiBrjB,IAARmjB,EACbC,EAAQC,OAGV,GAFAD,EAAQH,OAAOC,IAAMA,EACrBE,EAAQD,IAAMA,EACVA,aAAenD,GACjBoD,EAAQE,YAAc,YACjB,MAAIH,aAAe/C,IAAgB+C,aAAe3C,IAGvD,MAAM,IAAIpD,MAAMgG,EAAQD,IAAM,gCAF9BC,EAAQE,YAAc,QAGxB,CAEF,OAAOF,CACT,CA8CA,OArEA9S,EAAUyS,EAAiBC,GAyB3BD,EAAgBnT,UAAU2T,gBAAkB,SAAyBhS,EAAO+E,GAC1E,OAAOhF,EAAcc,KAAK+Q,IAAI3nB,KAAM+V,EAAOa,KAAK+Q,IAAI3R,SACtD,EAEAuR,EAAgBnT,UAAU4T,iBAAmB,SAA0BjS,EAAO+E,GAC5E,OAAOlE,KAAK+Q,IAAIlI,OAAOzE,SAASjF,EAAO+E,EACzC,EAEAyM,EAAgBnT,UAAU4G,SAAW,SAAkBjF,EAAO+E,EAAiB4K,GAE7E,IADA,IAAIuC,EAAU,IAAIhnB,MAAM2V,KAAK7V,QACpBmN,EAAI,EAAGA,EAAI0I,KAAK7V,OAAQmN,IAC/B+Z,EAAQ/Z,GAAK0I,KAAKyM,YAAYnV,GAAG8M,SAASjF,EAAO+E,GAEnD,GAAIlE,KAAKiR,OAAQ,CACf,IAAIlC,EAAO/O,KAAK+Q,IAAI3M,SAASjF,EAAO+E,GACpC,GAAoB,mBAAT6K,EAAqB,CAC9B,IAAIhN,EAAU/B,KAAK,MAAQA,KAAKkR,YAAc,WAAW/R,EAAO+E,GAChE,OAAO6K,EAAK/Q,KAAK+J,MAAMgH,EAAM,CAAChN,EAAS/B,KAAK6Q,QAAQ9pB,OAAOsqB,GAC7D,CACA,IAAKvC,EACH,OAAO,KAET,MAAM,IAAI9D,MAAMhL,KAAK+Q,IAAM,qBAC7B,CAEA,IADA,IAAI/nB,EAASgX,KAAK6Q,OAAO,GAChBS,EAAM,EAAGA,EAAMtR,KAAK7V,OAAQmnB,IACnCtoB,EAASuoB,OAAO/T,UAAUzW,OAAOiC,EAAQqoB,EAAQC,GAAMtR,KAAK6Q,OAAOS,EAAM,IAE3E,OAAOtoB,CACT,EAEA2nB,EAAgBnT,UAAU+N,OAAS,SAAgBC,GACjD,OAAOA,EAAQgG,qBAAqBxR,KACtC,EAEA2Q,EAAgBnT,UAAUkE,QAAU,SAAiBF,EAASrC,GAC5D,IAAK,IAAI7H,EAAI,EAAGA,EAAI0I,KAAK7V,OAAQmN,IAC/B0I,KAAKyM,YAAYnV,GAAGoK,QAAQF,EAASrC,GAEnCa,KAAKiR,QACPjR,KAAK+Q,IAAIrP,QAAQF,EAASrC,EAE9B,EAEOwR,CACT,CAvE6B,CAuE3B7F,IAES2G,GAAe,SAAUC,GAGlC,SAASD,EAAalmB,GAGpB,IAAIomB,EAAU7T,EAA2BkC,KAAM0R,EAAc1T,KAAKgC,OAGlE,OADA2R,EAAQpmB,SAAWA,EACZomB,CACT,CAwBA,OAjCAzT,EAAUuT,EAAcC,GAWxBD,EAAajU,UAAU4G,SAAW,SAAkBjF,EAAO+E,GAIzD,IAHA,IAAI3Y,EAAWyU,KAAKzU,SAChBvC,EAAS,GAEJsO,EAAI,EAAGnN,EAASoB,EAASpB,OAAQmN,EAAInN,IAAUmN,EACtDtO,EAAOsO,GAAK/L,EAAS+L,GAAG8M,SAASjF,EAAO+E,GAG1C,OAAOlb,CACT,EAEAyoB,EAAajU,UAAU+N,OAAS,SAAgBC,GAC9C,OAAOA,EAAQoG,kBAAkB5R,KACnC,EAEAyR,EAAajU,UAAUkE,QAAU,SAAiBF,EAASrC,GAEzD,IADA,IAAIhV,EAAS6V,KAAKzU,SAASpB,OAClBmN,EAAI,EAAGA,EAAInN,EAAQmN,IAC1B0I,KAAKzU,SAAS+L,GAAGoK,QAAQF,EAASrC,EAEtC,EAEOsS,CACT,CAnC0B,CAmCxB3G,IAES+G,GAAgB,SAAUC,GAGnC,SAASD,EAAcrlB,EAAMulB,GAG3B,IAAIC,EAAUlU,EAA2BkC,KAAM8R,EAAc9T,KAAKgC,OAIlE,OAFAgS,EAAQxlB,KAAOA,EACfwlB,EAAQD,OAASA,EACVC,CACT,CAyBA,OAnCA9T,EAAU2T,EAAeC,GAYzBD,EAAcrU,UAAU4G,SAAW,SAAkBjF,EAAO+E,GAK1D,IAJA,IAAItY,EAAW,CAAC,EACZY,EAAOwT,KAAKxT,KACZulB,EAAS/R,KAAK+R,OAETza,EAAI,EAAGnN,EAASqC,EAAKrC,OAAQmN,EAAInN,IAAUmN,EAClD1L,EAASY,EAAK8K,IAAMya,EAAOza,GAAG8M,SAASjF,EAAO+E,GAGhD,OAAOtY,CACT,EAEAimB,EAAcrU,UAAU+N,OAAS,SAAgBC,GAC/C,OAAOA,EAAQyG,mBAAmBjS,KACpC,EAEA6R,EAAcrU,UAAUkE,QAAU,SAAiBF,EAASrC,GAE1D,IADA,IAAIhV,EAAS6V,KAAKxT,KAAKrC,OACdmN,EAAI,EAAGA,EAAInN,EAAQmN,IAC1B0I,KAAK+R,OAAOza,GAAGoK,QAAQF,EAASrC,EAEpC,EAEO0S,CACT,CArC2B,CAqCzB/G,IAEF,SAASgB,GAAS3M,EAAOzY,EAAMwd,GAG7B,IAFA,IAAI/Z,EAASzD,EAAKyD,OACdnB,EAAS,GACJsO,EAAI,EAAGA,EAAInN,EAAQmN,IAC1BtO,EAAOsO,GAAK5Q,EAAK4Q,GAAG8M,SAASjF,EAAO+E,GAEtC,OAAOlb,CACT,CA0BA,SAASgmB,GAAYpR,EAAKxU,EAAM8oB,GAC9B,IAAInD,EAAOnR,QAAoC,KAAOA,EAAIxU,GAC1D,GAAoB,mBAAT2lB,EACT,OAAOA,EAET,IAAKmD,GAAa,MAACnD,EACjB,OAAO,KAET,MAAM,IAAI/D,MAAM5hB,EAAO,qBACzB,CA8BA,IAAI8hB,GAAY,KAGmB,oBAAxBD,sBACTC,GAAY,WACV,SAASiH,EAASC,GAGhBpS,KAAKoS,OAASA,CAChB,CAmMA,OAjMAD,EAAShH,QAAU,SAAiBlH,GAClC,IAAImO,EAAS,GACT5G,EAAU,IAAIN,GAAUkH,GAI5B,OAFAnO,EAAWsH,OAAOC,GAEX4G,EAAO5vB,KAAK,GACrB,EAEA2vB,EAAS3U,UAAU6U,MAAQ,SAAeC,GACxCtS,KAAKoS,OAAOxoB,KAAK0oB,EACnB,EAEAH,EAAS3U,UAAU+U,UAAY,SAAmBnoB,GAChD4V,KAAKqS,MAAM,KAEX,IAAK,IAAI/a,EAAI,EAAGnN,EAASC,EAAKD,OAAQmN,EAAInN,IAAUmN,EACxC,IAANA,GACF0I,KAAKqS,MAAM,KAGbjoB,EAAKkN,GAAGiU,OAAOvL,MAGjBA,KAAKqS,MAAM,IACb,EAEAF,EAAS3U,UAAUiO,qBAAuB,SAA8BE,GACtE,IAAIvhB,EAAOuhB,EAASvhB,KAEpBuhB,EAAS1H,WAAWsH,OAAOvL,MAC3BA,KAAKqS,MAAM,IAAM1G,EAASviB,MAE1B,IAAK,IAAIkO,EAAI,EAAGnN,EAASC,EAAKD,OAAQmN,EAAInN,IAAUmN,EAClD0I,KAAKqS,MAAM,KACXjoB,EAAKkN,GAAGiU,OAAOvL,KAEnB,EAEAmS,EAAS3U,UAAUgP,oBAAsB,SAA6BJ,GACpE,IAAIhiB,EAAOgiB,EAAUhiB,KAErBgiB,EAAUnI,WAAWsH,OAAOvL,MAC5BA,KAAKqS,MAAM,IAAMjG,EAAUhjB,MAE3B,IAAK,IAAIkO,EAAI,EAAGnN,EAASC,EAAKD,OAAQmN,EAAInN,IAAUmN,EAClD0I,KAAKqS,MAAM,KACXjoB,EAAKkN,GAAGiU,OAAOvL,KAEnB,EAEAmS,EAAS3U,UAAUwP,YAAc,SAAqB3hB,GACpDA,EAAOvE,OAAOykB,OAAOvL,MACrBA,KAAKqS,MAAM,KACXhnB,EAAO2G,MAAMuZ,OAAOvL,KACtB,EAEAmS,EAAS3U,UAAU+P,iBAAmB,SAA0BiF,GAC9DA,EAAYrF,UAAU5B,OAAOvL,MAC7BA,KAAKqS,MAAM,KACXG,EAAYpF,IAAI7B,OAAOvL,MACvBA,KAAKqS,MAAM,KACXG,EAAYnF,GAAG9B,OAAOvL,KACxB,EAEAmS,EAAS3U,UAAUmQ,gBAAkB,SAAyB8E,GAC5D,GAAwB,IAApBA,EAAOrT,SAAX,CAIAY,KAAKqS,MAAM,WAEX,IADA,IAAI/a,EAAImb,EAAOrT,SAAW,EACnB9H,KACL0I,KAAKqS,MAAM,WAJb,MAFErS,KAAKqS,MAAM,QAQf,EAEAF,EAAS3U,UAAUuQ,iBAAmB,SAA0B0E,GAE9D,IADA,IAAInb,EAAImb,EAAOrT,SACR9H,KACL0I,KAAKqS,MAAM,YAEbrS,KAAKqS,MAAMI,EAAOrpB,KACpB,EAEA+oB,EAAS3U,UAAU2Q,kBAAoB,SAA2BsE,GAChEA,EAAO5J,OAAO0C,OAAOvL,MACrBA,KAAKqS,MAAM,IAAMI,EAAOrpB,KAC1B,EAEA+oB,EAAS3U,UAAUkR,iBAAmB,SAA0B+D,GAC9DA,EAAO5J,OAAO0C,OAAOvL,MACrBA,KAAKqS,MAAM,KACXI,EAAOhmB,IAAI8e,OAAOvL,MAClBA,KAAKqS,MAAM,IACb,EAEAF,EAAS3U,UAAUyR,eAAiB,SAAwBjR,GAE1D,IADA,IAAI1G,EAAI0G,EAAKoB,SACN9H,KACL0I,KAAKqS,MAAM,YAEbrS,KAAKqS,MAAMrU,EAAK5U,MAChB4W,KAAKuS,UAAUvU,EAAK5T,KACtB,EAEA+nB,EAAS3U,UAAUiS,kBAAoB,SAA2BzR,GAChEA,EAAK+Q,KAAKxD,OAAOvL,MACjBA,KAAKuS,UAAUvU,EAAK5T,KACtB,EAEA+nB,EAAS3U,UAAU6R,gBAAkB,SAAyBrR,GAC5DA,EAAK6K,OAAO0C,OAAOvL,MACnBA,KAAKqS,MAAM,IAAMrU,EAAK5U,MACtB4W,KAAKuS,UAAUvU,EAAK5T,KACtB,EAEA+nB,EAAS3U,UAAU0S,YAAc,SAAqBwC,GACpD1S,KAAKqS,MAAM,IAAMK,EAAO9C,WACpB8C,EAAO9C,UAAU+C,WAAW,IAAM,IACpC3S,KAAKqS,MAAM,KAEbK,EAAOzO,WAAWsH,OAAOvL,MACzBA,KAAKqS,MAAM,IACb,EAEAF,EAAS3U,UAAUsS,YAAc,SAAqB8C,GACpDA,EAAOlvB,KAAK6nB,OAAOvL,MACoB,MAAnC4S,EAAOhD,UAAU+C,WAAW,GAC9B3S,KAAKqS,MAAM,IAAMO,EAAOhD,UAAY,KAEpC5P,KAAKqS,MAAMO,EAAOhD,WAEpBgD,EAAO7uB,MAAMwnB,OAAOvL,KACtB,EAEAmS,EAAS3U,UAAU8S,sBAAwB,SAA+BuC,GACxE7S,KAAKqS,MAAM,GAAKQ,EAAQ7gB,MAC1B,EAEAmgB,EAAS3U,UAAUoU,kBAAoB,SAA2BiB,GAChE,IAAItnB,EAAWsnB,EAAQtnB,SAEvByU,KAAKqS,MAAM,KAEX,IAAK,IAAI/a,EAAI,EAAGnN,EAASoB,EAASpB,OAAQmN,EAAInN,IAAUmN,EAC5C,IAANA,GACF0I,KAAKqS,MAAM,KAGb9mB,EAAS+L,GAAGiU,OAAOvL,MAGrBA,KAAKqS,MAAM,IACb,EAEAF,EAAS3U,UAAUyU,mBAAqB,SAA4BY,GAClE,IAAIrmB,EAAOqmB,EAAQrmB,KACfulB,EAASc,EAAQd,OAErB/R,KAAKqS,MAAM,KAEX,IAAK,IAAI/a,EAAI,EAAGnN,EAASqC,EAAKrC,OAAQmN,EAAInN,IAAUmN,EACxC,IAANA,GACF0I,KAAKqS,MAAM,KAGbrS,KAAKqS,MAAM,IAAO7lB,EAAK8K,GAAK,MAC5Bya,EAAOza,GAAGiU,OAAOvL,MAGnBA,KAAKqS,MAAM,IACb,EAEAF,EAAS3U,UAAUkT,mBAAqB,SAA4BmC,GAClE,IAAIC,EAAUD,EAAQ7gB,MAAM3B,QAAQ,KAAM,KAC1C2P,KAAKqS,MAAM,IAAOS,EAAU,IAC9B,EAEAX,EAAS3U,UAAUgU,qBAAuB,SAA8BqB,GACtE,IAAIhC,EAASgC,EAAQhC,OACjBpE,EAAcoG,EAAQpG,YAEtBtiB,EAASsiB,EAAYtiB,OACzB6V,KAAKqS,MAAM,KACXrS,KAAKqS,MAAMxB,EAAO,IAClB,IAAK,IAAIvZ,EAAI,EAAGA,EAAInN,EAAQmN,IAC1BmV,EAAYnV,GAAGiU,OAAOvL,MACtBA,KAAKqS,MAAMxB,EAAOvZ,EAAI,IAExB0I,KAAKqS,MAAM,IACb,EAEOF,CACT,CAzMY,IA4MgB,WAC5B,SAASY,IAET,CAEAA,EAAiBvV,UAAUwV,qBAAuB,SAA8BvS,GAG9E,IAFA,IAAIwS,EAAc,GACd3b,EAAImJ,EAAMtW,OACPmN,KACL2b,EAAY3b,GAAKmJ,EAAMnJ,GAAGiU,OAAOvL,MAEnC,OAAOiT,CACT,EAEAF,EAAiBvV,UAAUiO,qBAAuB,SAA8BE,GAC9E,OAAO,IAAIP,GAAgBO,EAAS1H,WAAWsH,OAAOvL,MAAO2L,EAASviB,KAAM4W,KAAKgT,qBAAqBrH,EAASvhB,MACjH,EAEA2oB,EAAiBvV,UAAUgP,oBAAsB,SAA6BJ,GAC5E,OAAO,IAAIJ,GAAeI,EAAUnI,WAAWsH,OAAOvL,MAAOoM,EAAUhjB,KAAM4W,KAAKgT,qBAAqB5G,EAAUhiB,MACnH,EAEA2oB,EAAiBvV,UAAUwP,YAAc,SAAqB3hB,GAC5D,OAAO,IAAIuhB,GAAOvhB,EAAOvE,OAAOykB,OAAOvL,MAAO3U,EAAO2G,MAAMuZ,OAAOvL,MACpE,EAEA+S,EAAiBvV,UAAU+P,iBAAmB,SAA0BiF,GACtE,OAAO,IAAIvF,GAAYuF,EAAYrF,UAAU5B,OAAOvL,MAAOwS,EAAYpF,IAAI7B,OAAOvL,MAAOwS,EAAYnF,GAAG9B,OAAOvL,MACjH,EAEA+S,EAAiBvV,UAAUmQ,gBAAkB,SAAyB8E,GACpE,OAAO,IAAIjF,GAAWiF,EAAOrT,SAC/B,EAEA2T,EAAiBvV,UAAUuQ,iBAAmB,SAA0B0E,GACtE,OAAO,IAAI7E,GAAY6E,EAAOrpB,KAAMqpB,EAAOrT,SAC7C,EAEA2T,EAAiBvV,UAAU2Q,kBAAoB,SAA2BsE,GACxE,OAAO,IAAIzE,GAAayE,EAAO5J,OAAO0C,OAAOvL,MAAOyS,EAAOrpB,KAC7D,EAEA2pB,EAAiBvV,UAAUkR,iBAAmB,SAA0B+D,GACtE,OAAO,IAAIrE,GAAYqE,EAAO5J,OAAO0C,OAAOvL,MAAOyS,EAAOhmB,IAAI8e,OAAOvL,MACvE,EAEA+S,EAAiBvV,UAAUyR,eAAiB,SAAwBjR,GAClE,OAAO,IAAI2Q,GAAU3Q,EAAK5U,KAAM4W,KAAKgT,qBAAqBhV,EAAK5T,MAAO4T,EAAKoB,SAC7E,EAEA2T,EAAiBvV,UAAUiS,kBAAoB,SAA2BzR,GACxE,OAAO,IAAIsR,GAAatR,EAAK+Q,KAAKxD,OAAOvL,MAAOA,KAAKgT,qBAAqBhV,EAAK5T,MACjF,EAEA2oB,EAAiBvV,UAAU6R,gBAAkB,SAAyBrR,GACpE,OAAO,IAAIkR,GAAWlR,EAAK6K,OAAO0C,OAAOvL,MAAOhC,EAAK5U,KAAM4W,KAAKgT,qBAAqBhV,EAAK5T,MAC5F,EAEA2oB,EAAiBvV,UAAU0V,WAAa,SAAoBC,GAC1D,OAAO,IAAIpD,GAAM2C,OAAO9C,UAAW8C,OAAOzO,WAAWsH,OAAOvL,MAC9D,EAEA+S,EAAiBvV,UAAUsS,YAAc,SAAqB8C,GAC5D,OAAO,IAAIlD,GAAOkD,EAAOhD,UAAWgD,EAAOlvB,KAAK6nB,OAAOvL,MAAO4S,EAAO7uB,MAAMwnB,OAAOvL,MACpF,EAEA+S,EAAiBvV,UAAU8S,sBAAwB,SAA+BuC,GAChF,OAAO,IAAI1C,GAAiB0C,EAC9B,EAEAE,EAAiBvV,UAAUoU,kBAAoB,SAA2BiB,GACxE,OAAO,IAAIpB,GAAazR,KAAKgT,qBAAqBH,EAAQtnB,UAC5D,EAEAwnB,EAAiBvV,UAAUyU,mBAAqB,SAA4BY,GAC1E,OAAO,IAAIhB,GAAcgB,EAAQrmB,KAAMwT,KAAKgT,qBAAqBH,EAAQd,QAC3E,EAEAgB,EAAiBvV,UAAUkT,mBAAqB,SAA4BmC,GAC1E,OAAO,IAAItC,GAAcsC,EAAQ7gB,MACnC,EAEA+gB,EAAiBvV,UAAUgU,qBAAuB,SAA8BqB,GAC9E,OAAO,IAAIlC,GAAgBkC,EAAQhC,OAAQ7Q,KAAKgT,qBAAqBH,EAAQpG,aAAcoG,EAAQ/B,IAAK+B,EAAQ9B,KAAO8B,EAAQ9B,IAAIxF,OAAOvL,MAC5I,CAGF,CAvF8B,GA8FvB,IAAIoT,GAAc,CACvBC,QAAS,EACT/G,OAAQ,EACRgH,OAAQ,EACRC,OAAQ,EACRhH,SAAU,GAGDiH,GAAS,WAClB,SAASA,IAGPxT,KAAKyT,MAAQroB,OAAOkT,OAAO,KAC7B,CAQA,OANAkV,EAAOhW,UAAUkW,MAAQ,SAAeC,GAGtC,OAFAA,EAAMA,GAAO,GAEN3T,KAAKyT,MAAME,KAAS3T,KAAKyT,MAAME,GAAO,IAAIC,GAAqBD,GAAKE,uBAC7E,EAEOL,CACT,CAdoB,GAgBhBM,GAAevC,OAAOuC,aAEfF,GAAuB,WAQhC,SAASA,EAAqBD,GAG5B3T,KAAK+T,IAAM,EAEX/T,KAAKhY,MAAQ,EAEbgY,KAAK2T,IAAMA,EACX3T,KAAKrR,IAAMglB,EAAIxpB,OAEf6V,KAAKgU,IAAMC,GAEXjU,KAAKkU,SAAMtmB,EAEXoS,KAAKmU,GAAKR,EAAIhB,WAAW,EAC3B,CAifA,OAvgBA9V,EAAa+W,EAAsB,CAAC,CAClCnnB,IAAK,MACL9C,IAAK,WACH,OAAOqW,KAAK2T,IAAIxb,MAAM6H,KAAKhY,MAAOgY,KAAK+T,IACzC,KAoBFH,EAAqBpW,UAAUqW,qBAAuB,WACpD7T,KAAKoU,YACDpU,KAAKgU,IAAMK,IACbrU,KAAKsU,IAAI,+BAGX,IADA,IAAItrB,EAASgX,KAAKuU,sBACXvU,KAAKwU,IAAIC,KACdzrB,EAAS,IAAIoiB,GAAgBpiB,EAAQgX,KAAKkU,IAAKlU,KAAK0U,qBAKtD,OAHI1U,KAAKgU,MAAQC,IACfjU,KAAKsU,IAAI,oBAAsBtU,KAAK8Q,KAE/B9nB,CACT,EAEA4qB,EAAqBpW,UAAU+W,oBAAsB,WAEnD,IADA,IAAIvrB,EAASgX,KAAK2U,kBACX3U,KAAKwU,IAAII,KACd5rB,EAAS,IAAIgjB,GAAehjB,EAAQgX,KAAKkU,IAAKlU,KAAK0U,qBAErD,OAAO1rB,CACT,EAEA4qB,EAAqBpW,UAAUkX,kBAAoB,WACjD1U,KAAKoU,YAEL,IADA,IAAIprB,EAAS,GACNgX,KAAKwU,IAAIK,KACd7rB,EAAOY,KAAKoW,KAAK2U,mBAEnB,OAAO3rB,CACT,EAEA4qB,EAAqBpW,UAAUmX,gBAAkB,WAI/C,IAHA,IAAIG,EAAY9U,KAAK+T,IACjB/qB,EAASgX,KAAK+U,mBAEX/U,KAAKgU,MAAQgB,IACbhsB,EAAO+hB,cACV/K,KAAKsU,IAAI,cAAgBtU,KAAK2T,IAAIxb,MAAM2c,EAAW9U,KAAKhY,OAAS,sBAEnEgY,KAAKoU,YACLU,EAAY9U,KAAK+T,IACjB/qB,EAAS,IAAI4jB,GAAO5jB,EAAQgX,KAAK+U,oBAEnC,OAAO/rB,CACT,EAEA4qB,EAAqBpW,UAAUuX,iBAAmB,WAChD,IAAI/rB,EAASgX,KAAKiV,YAAY,GAE9B,GAAIjV,KAAKwU,IAAIU,IAAa,CACxB,IAAI9H,EAAMpN,KAAK2U,kBACf3U,KAAKmV,OAAON,IACZ7rB,EAAS,IAAIikB,GAAYjkB,EAAQokB,EAAKpN,KAAK2U,kBAC7C,CACA,OAAO3rB,CACT,EAEA4qB,EAAqBpW,UAAUyX,YAAc,SAAqBG,GAGhE,IAFA,IAAI1xB,EAAOsc,KAAKqV,kBAAkB,GAE3BrV,KAAKgU,IAAMsB,IAAY,CAC5B,IAAIC,EAAUvV,KAAKgU,IACnB,IAAKuB,EAAUC,KAAiBJ,EAC9B,MAEFpV,KAAKoU,YACL1wB,EAAO,IAAIgsB,GAAO+F,GAAYF,EAAUG,IAAchyB,EAAMsc,KAAKiV,YAAYM,EAAUC,IACzF,CACA,OAAO9xB,CACT,EAEAkwB,EAAqBpW,UAAU6X,kBAAoB,SAA2BtT,GAC5E,IAAI/Y,OAAS,EAEb2sB,EAAS,OAAQ3V,KAAKgU,KACpB,KAAK4B,GAEH,OADA5V,KAAKoU,YACEpU,KAAKqV,kBAAkB,GAChC,KAAKQ,GAEH,OADA7V,KAAKoU,YACE,IAAI1E,GAAO,IAAK,IAAIS,GAAiB,GAAInQ,KAAKqV,kBAAkB,IACzE,KAAKS,GACL,KAAKC,GACL,KAAKC,GACH,IAAIC,EAAKR,GAAYzV,KAAKgU,IAAM0B,IAEhC,OADA1V,KAAKoU,YACE,IAAIrE,GAAMkG,EAAIjW,KAAKqV,kBAAkB,IAC9C,KAAKa,GAED,GAGE,GAFAlW,KAAKoU,YACLrS,IACI/B,KAAKwU,IAAI2B,IACPnW,KAAKgU,MAAQmC,IACfnW,KAAKsU,UAFT,CAKO,GAAItU,KAAKgU,IAAMoC,GAAuB,CAC3CptB,EAAS,IAAIwkB,GAAWzL,EAAUsU,IAElCtU,EAAUA,EAAUuU,GAAkBC,GACtC,MAAMZ,CACR,CACE3V,KAAKsU,KACP,QACOtU,KAAKgU,MAAQkC,IAG1B,KAAKM,GAEDxtB,EAAS,IAAI4kB,GAAY5N,KAAKkU,IAAKnS,EAAUsU,IAC7CrW,KAAKoU,YACLrS,EAAUA,EAAUuU,GAAkBG,GACtC,MAEJ,KAAKC,GACH1W,KAAKoU,YACLprB,EAAS,IAAIwkB,GAAW,GACxBzL,EAAUA,EAAUuU,GAAkBC,GACtC,MACF,KAAKI,GACH3W,KAAKoU,YACLprB,EAASgX,KAAK2U,kBACd3U,KAAKmV,OAAOyB,IACZ7U,EAAU8U,GACV,MACF,KAAKC,GAED9W,KAAKoU,YACL,IAAI2C,EAAY,GAChB,GAAI/W,KAAKgU,MAAQgD,GACf,GACED,EAAUntB,KAAKoW,KAAK2U,yBACb3U,KAAKwU,IAAIyC,KAEpBjX,KAAKmV,OAAO6B,IACZhuB,EAAS,IAAIyoB,GAAasF,GAC1BhV,EAAU8U,GACV,MAEJ,KAAKK,GAED,IAAI1qB,EAAO,GACPulB,EAAS,GAEb,IADA/R,KAAKoU,YACEpU,KAAKgU,MAAQmD,IAAU,CAC5B,GAAInX,KAAKgU,IAAMoD,GAAuB,CACpC,IAAIjD,EAAKnU,KAAKmU,GACVH,EAAMhU,KAAKgU,IACXD,EAAM/T,KAAK+T,IAEfvnB,EAAK5C,KAAKoW,KAAKkU,KACflU,KAAKoU,YACDpU,KAAKwU,IAAIK,IACX9C,EAAOnoB,KAAKoW,KAAK2U,oBAEjB3U,KAAKmU,GAAKA,EACVnU,KAAKgU,IAAMA,EACXhU,KAAK+T,IAAMA,EACXhC,EAAOnoB,KAAKoW,KAAKqV,kBAAkBiB,KAEvC,MAAWtW,KAAKgU,IAAMqD,IACpB7qB,EAAK5C,KAAKoW,KAAKkU,KACflU,KAAKoU,YACLpU,KAAKmV,OAAON,IACZ9C,EAAOnoB,KAAKoW,KAAK2U,oBAEjB3U,KAAKsU,MAEHtU,KAAKgU,MAAQmD,IACfnX,KAAKmV,OAAO8B,GAEhB,CACAjX,KAAKmV,OAAOgC,IACZnuB,EAAS,IAAI6oB,GAAcrlB,EAAMulB,GACjChQ,EAAU8U,GACV,MAEJ,KAAKS,GACHtuB,EAAS,IAAIunB,GAAcvQ,KAAKkU,KAChClU,KAAKoU,YACLrS,EAAU8U,GACV,MACF,KAAKU,GACHvuB,EAAS,IAAI2nB,GAAgB,CAAC3Q,KAAKkU,MACnClU,KAAKoU,YACLrS,EAAU8U,GACV,MACF,KAAKW,GACHxuB,EAASgX,KAAKyX,cAAc,GAC5B1V,EAAU8U,GACV,MACF,KAAKa,GAED1uB,EAAS,IAAImnB,GAAiBnQ,KAAKkU,KACnClU,KAAKoU,YAEL,MAEJ,KAAKuD,GACL,KAAKC,GACL,KAAKC,GACL,KAAKC,GACH9uB,EAAS,IAAImnB,GAAiBsF,GAAYzV,KAAKgU,IAAM0B,KACrD1V,KAAKoU,YACLrS,EAAU8U,GACV,MACF,QACM7W,KAAK+T,KAAO/T,KAAKrR,IACnBqR,KAAKsU,IAAI,gCAETtU,KAAKsU,MAIX,GAAIvS,EAAUuU,GACZ,OAAOttB,EAIT,IADA,IAAII,EAAO4W,KAAKkU,IACTlU,KAAKgU,IAAM+D,IAChB,OAAQ/X,KAAKgU,KACX,KAAKmC,GASH,GARAnW,KAAKoU,YACCpU,KAAKgU,IAAMoD,IACfpX,KAAKsU,MAEPlrB,EAAO4W,KAAKkU,IACZlU,KAAKoU,YAELrS,EAAUA,EAAU8U,IAAa9U,GAAWwU,GAASE,MAAa,EAAI1U,EAAUiW,IAAYjW,EAAUkW,KAAY,GAAKlW,EAAUmW,KAAW,EACxIlY,KAAKgU,MAAQ2C,GACf,SAGA3tB,EADE+Y,EAAU0U,GACH,IAAI7I,GAAYxkB,EAAMJ,EAAOoW,UAE7B,IAAI4O,GAAahlB,EAAQI,GAEpC,SACF,KAAK0tB,GACH9W,KAAKoU,YACLrS,EAAUkW,GACVjvB,EAAS,IAAIolB,GAAYplB,EAAQgX,KAAK2U,mBACtC3U,KAAKmV,OAAO6B,IACZ,MACF,KAAKL,GACH3W,KAAKoU,YAEL,IADA,IAAIhqB,EAAO,GACJ4V,KAAKgU,MAAQ4C,KAClBxsB,EAAKR,KAAKoW,KAAK2U,mBACV3U,KAAKwU,IAAIyC,OAIhBjX,KAAKmV,OAAOyB,IAEV5tB,EADE+Y,EAAU0U,GACH,IAAI9H,GAAUvlB,EAAMgB,EAAMpB,EAAOoW,UACjC2C,GAAWiW,GAAWnB,IACtB,IAAI3H,GAAWlmB,EAAQI,EAAMgB,GAE7B,IAAIklB,GAAatmB,EAAQoB,GAEpC2X,EAAUmW,GACV,MACF,KAAKX,GACHvuB,EAAS,IAAI2nB,GAAgB,CAAC3Q,KAAKkU,KAAM,GAAI,CAAClU,KAAK8Q,KAAM9nB,GACzDgX,KAAKoU,YACL,MACF,KAAKoD,GACHxuB,EAASgX,KAAKyX,cAAc1V,EAAUoW,GAAUnvB,GAItD,OAAOA,CACT,EAEA4qB,EAAqBpW,UAAUia,cAAgB,SAAuB1V,EAASgN,GAC7E,IAAI8B,EAAS,CAAC7Q,KAAKkU,KACfpD,EAAM/O,EAAUoW,GAAW,CAACnY,KAAK8Q,UAAOljB,EAC5CoS,KAAKmV,OAAOqC,IAGZ,IAFA,IAAI/K,EAAc,CAACzM,KAAK2U,oBAEhB3U,KAAKgU,IAAMhU,KAAKoY,sBAAwBb,IAC9C1G,EAAOjnB,KAAKoW,KAAKkU,KACbnS,EAAUoW,IACZrH,EAAIlnB,KAAKoW,KAAK8Q,KAEhB9Q,KAAKmV,OAAOqC,IACZ/K,EAAY7iB,KAAKoW,KAAK2U,mBAQxB,OALA9D,EAAOjnB,KAAKoW,KAAKkU,KACbnS,EAAUoW,IACZrH,EAAIlnB,KAAKoW,KAAK8Q,KAEhB9Q,KAAKoU,YACE,IAAIzD,GAAgBE,EAAQpE,EAAaqE,EAAK/B,EACvD,EAEA6E,EAAqBpW,UAAU4W,UAAY,WACzC,KAAOpU,KAAK+T,IAAM/T,KAAKrR,KACrB,GAAIqR,KAAKmU,IAAM,GACbnU,KAAKnP,WADP,CAKA,GADAmP,KAAKhY,MAAQgY,KAAK+T,IACF,KAAZ/T,KAAKmU,IAAenU,KAAKmU,IAAM,IAAQnU,KAAKmU,IAAM,IAEpD,YADAnU,KAAKgU,IAAMhU,KAAKqY,kBAIlB,GAAiD,QAA5CrY,KAAKgU,IAAMsE,GAAatY,KAAKmU,IAAInU,OACpC,MARF,CAWFA,KAAKgU,IAAMC,EACb,EAEAL,EAAqBpW,UAAU3M,KAAO,WACpC,OAAOmP,KAAKmU,GAAKnU,KAAK2T,IAAIhB,aAAa3S,KAAK+T,IAC9C,EAEAH,EAAqBpW,UAAU6a,eAAiB,WAC9C,KAAOE,GAAa9uB,IAAIuW,KAAKnP,SAAWmP,KAAKmU,GAAK,KAAQqE,GAAQxY,KAAKmU,MAEvE,OAAOsE,GAAczY,KAAKkU,IAAMlU,KAAK8Q,MAAQ0F,EAC/C,EAEA5C,EAAqBpW,UAAUkb,WAAa,SAAoBC,GAC9D,GAAIA,EACF3Y,KAAKkU,IAAM,OAGX,IADAlU,KAAKkU,IAAMlU,KAAKmU,GAAK,GACdnU,KAAKnP,QAAU,IAAQmP,KAAKmU,IAAM,IACvCnU,KAAKkU,IAAiB,GAAXlU,KAAKkU,IAAWlU,KAAKmU,GAAK,GAIzC,GAAIwE,GAAuB,KAAZ3Y,KAAKmU,GAAa,CAC1BwE,GACH3Y,KAAKnP,OAIP,IAFA,IAAI7I,EAAQgY,KAAK+T,IACb/hB,EAAQgO,KAAKmU,GAAK,GACfnU,KAAKnP,QAAU,IAAQmP,KAAKmU,IAAM,IACvCniB,EAAgB,GAARA,EAAagO,KAAKmU,GAAK,GAEjCnU,KAAKkU,IAAMlU,KAAKkU,IAAMliB,EAAQrQ,KAAKi3B,IAAI,GAAI5Y,KAAK+T,IAAM/rB,EACxD,CAEA,GAAgB,MAAZgY,KAAKmU,IAA2B,KAAZnU,KAAKmU,GAAa,CACxC,IAAI0E,EAAS7Y,KAAK+T,IAWlB,IATA/T,KAAKnP,OACW,KAAZmP,KAAKmU,IAA2B,KAAZnU,KAAKmU,IAC3BnU,KAAKnP,OAGDmP,KAAKmU,IAAM,IAAQnU,KAAKmU,IAAM,KAClCnU,KAAK+T,IAAM8E,EACX7Y,KAAKsU,IAAI,qBAEJtU,KAAKnP,QAAU,IAAQmP,KAAKmU,IAAM,KACzCnU,KAAKkU,IAAM4E,WAAW9Y,KAAK2T,IAAIxb,MAAM6H,KAAKhY,MAAOgY,KAAK+T,KACxD,CAEA,OAAO2D,EACT,EAEA9D,EAAqBpW,UAAUub,WAAa,WAC1C,IAAIC,EAAQhZ,KAAKmU,GACjBnU,KAAKnP,OAKL,IAHA,IAAIuhB,OAAS,EACT6G,EAASjZ,KAAK+T,IAEX/T,KAAKmU,KAAO6E,GACjB,GAAgB,KAAZhZ,KAAKmU,GAAa,CACf/B,IACHA,EAAS,IAGXA,EAAOxoB,KAAKoW,KAAK2T,IAAIxb,MAAM8gB,EAAQjZ,KAAK+T,MAExC/T,KAAKnP,OAEL,IAAIqoB,OAAa,EAEjB,GAAgB,MAAZlZ,KAAKmU,GAGP,GAFAnU,KAAKnP,OAEDmP,KAAK+T,IAAM,EAAI/T,KAAKrR,IAAK,CAC3B,IAAIwqB,EAAMnZ,KAAK2T,IAAIxb,MAAM6H,KAAK+T,IAAK/T,KAAK+T,IAAM,GAEzC,eAAepxB,KAAKw2B,IACvBnZ,KAAKsU,IAAI,8BAAgC6E,EAAM,KAGjDD,EAAa1K,SAAS2K,EAAK,IAC3BnZ,KAAK+T,KAAO,EACZ/T,KAAKmU,GAAKnU,KAAK2T,IAAIhB,WAAW3S,KAAK+T,IACrC,MACE/T,KAAKsU,WAGP4E,EAAaE,GAASpZ,KAAKmU,IAC3BnU,KAAKnP,OAGPuhB,EAAOxoB,KAAKkqB,GAAaoF,IACzBD,EAASjZ,KAAK+T,GAChB,MAAuB,IAAZ/T,KAAKmU,IAAYnU,KAAK+T,KAAO/T,KAAKrR,IAC3CqR,KAAKsU,IAAI,sBAETtU,KAAKnP,OAIT,IAAIwoB,EAAOrZ,KAAK2T,IAAIxb,MAAM8gB,EAAQjZ,KAAK+T,KACvC/T,KAAKnP,OACL,IAAIyoB,EAAYD,EAQhB,OANIjH,UACFA,EAAOxoB,KAAKyvB,GACZC,EAAYlH,EAAO5vB,KAAK,KAG1Bwd,KAAKkU,IAAMoF,EACJhC,EACT,EAEA1D,EAAqBpW,UAAU+b,aAAe,WAI5C,IAHA,IAAIC,GAAO,EACPxwB,EAAS,GAEU,KAAhBgX,KAAKnP,QACV,GAAgB,KAAZmP,KAAKmU,GAAa,CACpB,GAAInU,KAAK+T,IAAM,EAAI/T,KAAKrR,KAA6C,MAAtCqR,KAAK2T,IAAIhB,WAAW3S,KAAK+T,IAAM,GAAa,CACzE/T,KAAK+T,MACLyF,GAAO,EACP,KACF,CACExwB,GAAU,GAEd,MAAuB,KAAZgX,KAAKmU,GACdnrB,GAAU8qB,GAAasF,GAASpZ,KAAKnP,SAChB,IAAZmP,KAAKmU,IAAYnU,KAAK+T,KAAO/T,KAAKrR,IAC3CqR,KAAKsU,IAAI,iCAETtrB,GAAU8qB,GAAa9T,KAAKmU,IAMhC,OAFAnU,KAAKnP,OACLmP,KAAKkU,IAAMlrB,EACPwwB,EACKjC,GAEFC,EACT,EAEA5D,EAAqBpW,UAAU4a,iBAAmB,WAKhD,OAJIpY,KAAK+T,KAAO/T,KAAKrR,KACnBqR,KAAKsU,IAAI,yBAEXtU,KAAK+T,MACE/T,KAAKuZ,cACd,EAEA3F,EAAqBpW,UAAU8W,IAAM,WACnC,IAAImF,EAAUvvB,UAAUC,OAAS,QAAsByD,IAAjB1D,UAAU,GAAmBA,UAAU,GAAK,oBAAsB8V,KAAK8Q,IACzG4I,EAASxvB,UAAUC,OAAS,QAAsByD,IAAjB1D,UAAU,GAAmBA,UAAU,GAAK8V,KAAKhY,MAEtF,MAAM,IAAIgjB,MAAM,iBAAmByO,EAAU,cAAgBC,EAAS,mBAAqB1Z,KAAK2T,IAAM,IACxG,EAEAC,EAAqBpW,UAAUgX,IAAM,SAAamF,GAChD,OAAI3Z,KAAKgU,MAAQ2F,IACf3Z,KAAKoU,aACE,EAIX,EAEAR,EAAqBpW,UAAU2X,OAAS,SAAgBwE,GAClD3Z,KAAKgU,MAAQ2F,EACf3Z,KAAKoU,YAELpU,KAAKsU,IAAI,0BAA4BmB,GAAYkE,EAAQjE,IAAc1V,KAAK+T,IAEhF,EAEOH,CACT,CAzgBkC,GA2gBlC,SAASwF,GAASQ,GAChB,OAAQA,GACN,KAAK,IACH,OAAO,GACT,KAAK,IACH,OAAO,GACT,KAAK,IACH,OAAO,GACT,KAAK,IACH,OAAO,EACT,KAAK,IACH,OAAO,GACT,QACE,OAAOA,EAEb,CAEA,IAAIrD,GAAS,KACTE,GAAU,KACVuB,GAAW,KACXC,GAAU,KACVC,GAAS,MACTrB,GAAY,MACZP,GAAkB,MAClB6B,GAAW,GAAK,GAEhB9B,GAAa,IAEbX,GAAc,GAIdF,GAAe,IAEfnB,GAAuB,KAMvB+B,GAAwB,MACxByD,GAAY,MACZ5F,GAAQ,MAAUmC,GAAwB/B,GAC1CmC,GAAe,GAAK,GACpBY,GAAwBZ,GAAeqD,GACvCxC,GAAY,GAAK,GACjBK,GAAmB,GAAK,GAAKL,GAC7BC,GAAkB,GAAK,GAAKD,GAC5B/B,GAAa,GAAK,GAElBwE,GAAY,GAAK,GAIjB/B,GAA2B,GAAK,GAChCR,GAAiB,GAAK,GAAKQ,GAC3BP,GAAyB,GAAK,GAAKO,GAEnCD,GAAiB,MAAgBT,GACjCQ,GAAgB,MAAgBR,GAChCM,GAAgB,MAAgBN,GAChCO,GAAqB,MAAgBP,GACrCX,GAAc,EAAIU,GAClBlB,GAAgB,EAAIkB,GAEpBT,GAAW,KAAqBP,GAAwB2B,GACxDb,GAAW,KACXf,GAAW,QAAyB4B,GACpCZ,GAAW,KAAIf,GAAyC/B,GACxDuC,GAAW,KAAKR,GAAyC/B,GACzD4C,GAAU,GAAKb,GACfU,GAAa,KAAsBV,GAnBd,GAAK,GAmBsD2B,GAChFf,GAAa,KAAsB3C,GACnCQ,GAAU,GAAKuB,GACflB,GAAa,GAEbT,GAAc,GAAK2B,GACnBxB,GAAQ,GAAKwB,GACb2D,GAAW,GAAwBzE,GACnC0E,GAAuB,IAAwB1E,GAC/C2E,GAAU,IAAwB3E,GAClC4E,GAAS,IAAwB5E,GACjC6E,GAAW,IAAwB7E,GACnC8E,GAAW,IAAwB9E,GACnC+E,GAAa,IAAwB/E,GACrCgF,GAAO,IAAwBhF,GAC/BiF,GAAO,IAAwBjF,GAC/BkF,GAAS,IAAwBlF,GACjCmF,GAAS,IAAwBnF,GACjCoF,GAAc,IAAwBpF,GAAauE,GACnDc,GAAsB,IAAwBrF,GAAauE,GAC3DjE,GAAS,IAAwBN,GAAawE,GAC9CjE,GAAU,IAAwBP,GAAawE,GAC/C/D,GAAkB,QAClBC,GAAgB,QAChB4E,GAAS,IAAwBtF,GACjCuF,GAAY,IAAwBvF,GACpCwF,GAAU,IAAwBxF,GAClCN,GAAO,GACPc,GAAS,QAET2C,GAAgBrtB,OAAOkT,OAAO,MAClCma,GAAcsC,KAAOlD,GACrBY,GAAcuC,KAAOrD,GACrBc,GAAcwC,MAAQnD,GACtBW,GAAc7qB,UAAYgqB,GAC1Ba,GAAcyC,MAAQxE,GACtB+B,GAAc0C,QAAUjF,GACxBuC,GAAc2C,GAAKV,GACnBjC,GAAc4C,WAAaV,GAC3BlC,GAAc6C,OAASvF,GACvB0C,GAAc8C,KAAOvF,GAErB,IAAIP,GAAc,EAAC,GAAO,EAAM,UAAM7nB,EAAW,QAAS,UAAW,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAM,IAAK,IAAK,IAAK,KAAM,KAAM,IAAK,KAAM,KAAM,MAAO,MAAO,IAAK,IAAK,KAAM,KAAM,KAAM,aAAc,IAAK,IAAK,SAAU,OAAQ,IAAK,IAAK,IAAK,IAAK,KAE7Q4tB,GAEO,CAAC,GAAM,EAAG,GAAM,GAAM,GAAM,EAAG,GAAM,IAAM,IAAM,EAAG,IAAM,EAAG,IAAM,IAAM,IAAM,IAAM,IAAM,IAAO,IAAO,IAAO,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,EAAG,KAAQ,EAAG,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,EAAG,KAAQ,EAAG,KAAQ,KAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,OAF3cA,GAGK,CAAC,GAAM,IAIhB,SAASC,GAAWC,EAAQ7xB,EAAK8xB,EAAY3pB,GAE3C,IADA,IAAI4pB,EAAaD,EAAWxxB,OACnBmN,EAAI,EAAGA,EAAIskB,EAAYtkB,GAAK,EAAG,CACtC,IAAItP,EAAQ2zB,EAAWrkB,GACnBrP,EAAM0zB,EAAWrkB,EAAI,GAEzB,GADArP,EAAMA,EAAM,EAAIA,EAAMD,EAAQ,EAC1B0zB,EAEF,IADA,IAAIhW,EAAI1d,EACD0d,EAAIzd,GACTyzB,EAAOhW,GAAK1T,EACZ0T,IAGJ,GAAI7b,EACF,IAAK,IAAIsqB,EAAKnsB,EAAOmsB,EAAKlsB,EAAKksB,IAC7BtqB,EAAIV,IAAIgrB,EAGd,CACF,CAEA,SAAS0H,GAAYlC,GACnB,OAAO,SAAUmC,GAEf,OADAA,EAAEjrB,OACK8oB,CACT,CACF,CACA,SAASoC,GAAoBD,GAE3B,OADAA,EAAExH,IAAI,yBAA2BR,GAAagI,EAAE3H,IAAM,KAC/C,IACT,CAEA,IAAIoE,GAAe,IAAIxvB,IACvB0yB,GAAW,KAAMlD,GAvCF,CAAC,GAAM,EAAG,GAAM,GAAM,GAAM,GAAM,GAAM,EAAG,GAAM,MAuCd,GAElD,IAAIC,GAAU,IAAIwD,WAAW,OAC7BP,GAAWjD,GAAS,KAAMgD,GAAe,GACzCC,GAAWjD,GAAS,KAAMgD,GAAa,GAIvC,IAFA,IAAIlD,GAAe,IAAIjuB,MAAM,OACzB4xB,GAAK,EACFA,GAAK,OACV3D,GAAa2D,IAAMF,GACnBE,KAGFR,GAAWnD,GAAc,KAjDjB,CAAC,EAAG,GAAM,IAAM,MAiDmB,SAAUwD,GAEnD,OADAA,EAAEjrB,OACK,IACT,IACA4qB,GAAWnD,GAAc,KAAMkD,IAAe,SAAUM,GACtD,OAAOA,EAAEzD,gBACX,IACAoD,GAAWnD,GAAc,KAAMkD,IAAa,SAAUM,GACpD,OAAOA,EAAEpD,YAAW,EACtB,IAEAJ,GAAa,IAAQA,GAAa,IAAQ,SAAUwD,GAClD,OAAOA,EAAE/C,YACX,EACAT,GAAa,IAAQ,SAAUwD,GAC7B,OAAOA,EAAEvC,cACX,EAEAjB,GAAa,IAAQ,SAAUwD,GAC7B,OAAiB,KAAbA,EAAEjrB,OACGilB,GAEQ,KAAbgG,EAAEjrB,OACGspB,IAET2B,EAAEjrB,OACKwpB,GACT,EAEA/B,GAAa,IAAQ,SAAUwD,GAC7B,OAAiB,KAAbA,EAAEjrB,OACGmkB,GAEQ,KAAb8G,EAAEjrB,OACGqpB,IAET4B,EAAEjrB,OACKupB,GACT,EAEA9B,GAAa,IAAQ,SAAUwD,GAC7B,OAAiB,KAAbA,EAAEjrB,OACG4jB,IAETqH,EAAEjrB,OACKmpB,GACT,EAEA1B,GAAa,KAAQ,SAAUwD,GAC7B,OAAiB,MAAbA,EAAEjrB,OACG+jB,IAETkH,EAAEjrB,OACKkpB,GACT,EAEAzB,GAAa,IAAQ,SAAUwD,GAC7B,OAAIA,EAAEjrB,QAAU,IAAQirB,EAAE3H,IAAM,GACvB2H,EAAEpD,YAAW,GAEfvC,EACT,EAEAmC,GAAa,IAAQ,SAAUwD,GAC7B,OAAiB,KAAbA,EAAEjrB,OACGypB,IAETwB,EAAEjrB,OACK2pB,GACT,EAEAlC,GAAa,IAAQ,SAAUwD,GAC7B,OAAiB,KAAbA,EAAEjrB,OACG0pB,IAETuB,EAAEjrB,OACK4pB,GACT,EAEAnC,GAAa,IAAQuD,GAAYhB,IACjCvC,GAAa,IAAQuD,GAAYlF,IACjC2B,GAAa,IAAQuD,GAAYjF,IACjC0B,GAAa,IAAQuD,GAAYjB,IACjCtC,GAAa,IAAQuD,GAAYjG,IACjC0C,GAAa,IAAQuD,GAAY5E,IACjCqB,GAAa,IAAQuD,GAAYhG,IACjCyC,GAAa,IAAQuD,GAAYf,IACjCxC,GAAa,IAAQuD,GAAYhH,IACjCyD,GAAa,IAAQuD,GAAY3G,IACjCoD,GAAa,IAAQuD,GAAY/E,IACjCwB,GAAa,IAAQuD,GAAY7E,IACjCsB,GAAa,IAAQuD,GAAY5B,IACjC3B,GAAa,KAAQuD,GAAY3E,IACjCoB,GAAa,KAAQuD,GAAY1E,IAEjC,IAAI+E,GAAWrzB,IAAI2U,UAMf2e,GAAoB,SAAUC,GAGhC,SAASD,EAAkBhU,EAAW/lB,GAGpC,OAAO0b,EAA2BkC,KAAMoc,EAAuBpe,KAAKgC,KAAMmI,EAAW/lB,GACvF,CAmEA,OAzEA8b,EAAUie,EAAmBC,GAQ7BD,EAAkBtR,IAAM,SAAc1C,EAAW/lB,GAO/C,MANM,qBAAsBA,GAC1BkoB,QAAQlN,eAAehb,EAAK,mBAAoB,CAC9C4P,MAAOmqB,EAAkB7d,OAAO6J,EAAW/lB,GAC3C6a,YAAY,EAAOC,cAAc,IAG9B9a,EAAIi6B,gBACb,EAEAF,EAAkB7d,OAAS,SAAgB6J,EAAW/lB,GACpD,IAAI0d,EAAW,IAAIqc,EAAkBhU,EAAW/lB,GAE5Ck6B,EAAQJ,GAiDZ,OAhDII,EAAMzyB,MAAQzH,EAAIyH,KAAOyyB,EAAMC,SAAWn6B,EAAIm6B,QAAUD,EAAME,QAAUp6B,EAAIo6B,QAC9EF,EAAQ,CACNzyB,IAAKzH,EAAIyH,IACT0yB,OAAQn6B,EAAIm6B,OACZC,MAAOp6B,EAAIo6B,QAIfp6B,EAAIyH,IAAM,WACR,IAAI4yB,EAAWr6B,EAAIqH,IAAIS,UAAU,IAC7Bye,EAAO8T,EAAW,SAAW,MAC7BvZ,EAAW9gB,EAAIuH,IAAIO,UAAU,IAC7BsgB,EAAmB8R,EAAMzyB,IAAIke,MAAM3lB,EAAK8H,WAS5C,OARKuyB,GAAYvZ,IAAa9gB,EAAIuH,IAAIO,UAAU,KAC9C4V,EAAS0I,gBAAgB,CACvBG,KAAMA,EACNE,OAAQzmB,EACRqK,IAAKvC,UAAU,GACfgZ,SAAUA,IAGPsH,CACT,EAEApoB,EAAIm6B,OAAS,WACX,IAAIE,EAAWr6B,EAAIqH,IAAIS,UAAU,IAC7BgZ,EAAW9gB,EAAIuH,IAAIO,UAAU,IAC7BsgB,EAAmB8R,EAAMC,OAAOxU,MAAM3lB,EAAK8H,WAS/C,OARIuyB,GACF3c,EAAS0I,gBAAgB,CACvBG,KAAM,SACNE,OAAQzmB,EACRqK,IAAKvC,UAAU,GACfgZ,SAAUA,IAGPsH,CACT,EAEApoB,EAAIo6B,MAAQ,WACV,IAAIhS,EAAmB8R,EAAME,MAAMzU,MAAM3lB,EAAK8H,WAK9C,OAJA4V,EAAS0I,gBAAgB,CACvBG,KAAM,QACNE,OAAQzmB,IAEHooB,CACT,EAEO1K,CACT,EAEOqc,CACT,CA3EwB,CA2EtBlU,IAEEyU,GAAW,YAAqB,iBAEpC,SAASC,GAAwBC,GAC/B,OAAOA,EAAMC,cAAgBD,EAAMC,eAAe,IAAMD,EAAME,UAAYF,EAAME,WAAW,IAAMF,EAAMG,MAAQH,EAAMG,KAAK,IAAMH,EAAM91B,MACxI,CAEA,SAASk2B,KACPhd,KAAKid,0BACLjd,KAAKkd,oBAAqB,CAC5B,CAEA,SAASC,GAAoBP,GAC3BA,EAAMM,oBAAqB,EAK3B,IAJA,IAAIp2B,EAAS61B,GAAwBC,GAEjCQ,EAAmB,GAEhBt2B,GAAQ,CACb,GAAIA,EAAOu2B,kBAAmB,CAC5B,IAAIC,EAAWx2B,EAAOu2B,kBAAkBT,EAAMjU,MAC1C2U,IACEV,EAAMI,kBAAoBA,KAC5BJ,EAAMK,wBAA0BL,EAAMI,gBACtCJ,EAAMI,gBAAkBA,IAE1BI,EAAiBxzB,KAAK0zB,GAE1B,CACAx2B,EAASA,EAAOV,UAClB,CACA,IAAK,IAAIkR,EAAI8lB,EAAiBjzB,OAAS,EAAGmN,GAAK,IAAMslB,EAAMM,mBAAoB5lB,IAAK,CAClF,IAAIimB,EAAkBH,EAAiB9lB,GACnC,gBAAiBimB,EACnBA,EAAgBC,YAAYZ,GAE5BW,EAAgBX,EAEpB,CACF,CAEA,IAAIa,GAAuB,WACzB,SAASA,EAAqBC,GAG5B1d,KAAK0d,UAAYA,EACjB1d,KAAK8G,MAAQ,CACf,CAkBA,OAhBA2W,EAAqBjgB,UAAUmgB,UAAY,WACzC3d,KAAK8G,QAEc,IAAf9G,KAAK8G,OACP,sBAAqB9G,KAAK0d,UAAWP,IAAqB,EAE9D,EAEAM,EAAqBjgB,UAAUogB,UAAY,WACtB,IAAf5d,KAAK8G,MACP4V,GAASrS,KAAK,uDACY,KAAfrK,KAAK8G,OAChB,yBAAwB9G,KAAK0d,UAAWP,IAAqB,EAEjE,EAEOM,CACT,CAzB2B,GA2BvBI,GAAuB,WACzB,SAASA,EAAqBH,EAAWI,GAGvC9d,KAAK0d,UAAYA,EACjB1d,KAAK8G,MAAQ,EACb9G,KAAK8d,aAAeA,CACtB,CA6CA,OA3CAD,EAAqBrgB,UAAUggB,YAAc,SAAqBZ,GAChEA,EAAMM,oBAAqB,EAG3B,IAFA,IAAIp2B,EAAS61B,GAAwBC,GAE9B91B,IAAW81B,EAAMM,oBAAoB,CAC1C,GAAIp2B,EAAOi3B,mBAAoB,CAC7B,IAAIT,EAAWx2B,EAAOi3B,mBAAmBnB,EAAMjU,MAC3C2U,IACEV,EAAMI,kBAAoBA,KAC5BJ,EAAMK,wBAA0BL,EAAMI,gBACtCJ,EAAMI,gBAAkBA,IAEtB,gBAAiBM,EACnBA,EAASE,YAAYZ,GAErBU,EAASV,GAGf,CAEA,IAAInsB,EAAS3J,EAAOV,WAGpBU,EAF6BkZ,KAAK8d,aAAaE,kBAAoBvtB,aAAkB/O,WAEnD+O,EAAOpK,KAAOoK,CAClD,CACF,EAEAotB,EAAqBrgB,UAAUmgB,UAAY,WACzC3d,KAAK8G,QAEc,IAAf9G,KAAK8G,OACP,sBAAqB9G,KAAK0d,UAAW1d,MAAM,EAE/C,EAEA6d,EAAqBrgB,UAAUogB,UAAY,WACtB,IAAf5d,KAAK8G,MACP4V,GAASrS,KAAK,uDACY,KAAfrK,KAAK8G,OAChB,yBAAwB9G,KAAK0d,UAAW1d,MAAM,EAElD,EAEO6d,CACT,CArD2B,GAuDvBI,GAAyB,WAC3B,SAASA,EAAuBC,EAAOxC,EAAQyC,GAG7Cne,KAAKke,MAAQA,EACble,KAAK0b,OAASA,EACd1b,KAAKme,YAAcA,CACrB,CAWA,OATAF,EAAuBzgB,UAAUgH,QAAU,WACrCxE,KAAK0b,OAAO1b,KAAKme,cACnBne,KAAKke,MAAMN,YACX5d,KAAK0b,OAAO1b,KAAKme,aAAe,MAEhCzB,GAASrS,KAAK,uDAElB,EAEO4T,CACT,CAnB6B,GAqBzBG,GAAe,WACjB,SAASA,EAAat3B,EAAQq3B,EAAab,GAGzCtd,KAAKlZ,OAASA,EACdkZ,KAAKme,YAAcA,EACnBne,KAAKsd,SAAWA,CAClB,CAMA,OAJAc,EAAa5gB,UAAUgH,QAAU,WAC/BxE,KAAKlZ,OAAO4N,oBAAoBsL,KAAKme,YAAane,KAAKsd,SACzD,EAEOc,CACT,CAdmB,GAgBfC,GAAuB,WACzB,SAASA,EAAqBP,GAG5B9d,KAAKse,kBAAoB,CAAC,EAC1Bte,KAAKue,iBAAmB,CAAC,EAEzBve,KAAK8d,aAAeA,CACtB,CA2DA,OAzDAO,EAAqB7gB,UAAU0C,UAAY,SAAmBpZ,EAAQq3B,EAAab,EAAUvzB,EAAUy0B,GACrG,IAAIF,OAAoB,EACpBC,OAAmB,EACnBE,OAAe,EAEnB,GAAI10B,IAAa20B,GAAmBC,SAAU,CAC5CL,EAAoBte,KAAKse,kBACzBG,EAAeH,EAAkBH,KAAiBG,EAAkBH,GAAe,IAAIN,GAAqBM,EAAane,KAAK8d,eAC9H,IAAIC,EAAqBj3B,EAAOi3B,qBAAuBj3B,EAAOi3B,mBAAqB,CAAC,GAQpF,OAPKA,EAAmBI,GAGtBzB,GAASrS,KAAK,kDAAmD,CAAEuS,MAAOuB,EAAab,SAAUA,EAAUsB,iBAAkBb,EAAmBI,KAFhJM,EAAad,YAIfI,EAAmBI,GAAeb,GAEf,IAAfkB,EACK,IAAIP,GAAuBQ,EAAcV,EAAoBI,GAG/D,WACLM,EAAab,YACbG,EAAmBI,GAAe,IACpC,CACF,CACA,GAAIp0B,IAAa20B,GAAmBG,UAAW,CAC7CN,EAAmBve,KAAKue,iBACxBE,EAAeF,EAAiBJ,KAAiBI,EAAiBJ,GAAe,IAAIV,GAAqBU,IAC1G,IAAId,EAAoBv2B,EAAOu2B,oBAAsBv2B,EAAOu2B,kBAAoB,CAAC,GAQjF,OAPKA,EAAkBc,GAGrBzB,GAAShT,MAAM,oCAAqC,CAAEkT,MAAOuB,EAAab,SAAUA,IAFpFmB,EAAad,YAIfN,EAAkBc,GAAeb,GAEd,IAAfkB,EACK,IAAIP,GAAuBQ,EAAcpB,EAAmBc,GAG9D,WACLM,EAAab,YACbP,EAAkBc,GAAe,IACnC,CACF,CAIA,OAFAr3B,EAAO2N,iBAAiB0pB,EAAab,IAElB,IAAfkB,EACK,IAAIJ,GAAat3B,EAAQq3B,EAAab,GAGxC,WACLx2B,EAAO4N,oBAAoBypB,EAAab,EAC1C,CACF,EAEOe,CACT,CApE2B,GAsEhBK,GAAqB,CAC9BI,KAAM,EACND,UAAW,EACXF,SAAU,GAGDI,GAAe,WACxB,SAASA,IACP,IAAIf,EAAmB9zB,UAAUC,OAAS,QAAsByD,IAAjB1D,UAAU,IAAmBA,UAAU,GAItF8V,KAAKgf,qBAAuB,CAAC,EAC7Bhf,KAAKif,oBAAsB,CAAC,EAC5Bjf,KAAKge,iBAAmBA,EAExBhe,KAAKkf,sBAAsB,CACzBC,QAAS,QACTC,WAAY,CACVptB,MAAO,CAAC,SAAU,SAClBqtB,QAAS,CAAC,SAAU,SACpBC,MAAO,CAAC,SAAU,YAItBtf,KAAKkf,sBAAsB,CACzBC,QAAS,WACTC,WAAY,CACVptB,MAAO,CAAC,SAAU,YAItBgO,KAAKkf,sBAAsB,CACzBC,QAAS,SACTC,WAAY,CACVptB,MAAO,CAAC,aAIZgO,KAAKkf,sBAAsB,CACzBC,QAAS,mBACTC,WAAY,CACVptB,MAAO,CAAC,SAAU,QAAS,OAAQ,QAAS,YAIhDgO,KAAKkf,sBAAsB,CACzBC,QAAS,qBACTC,WAAY,CACV/6B,UAAW,CAAC,UACZF,WAAY,CAAC,aAIjB6b,KAAKuf,qBAAuB,IAAIlB,GAAqBre,KACvD,CA+CA,OA7CA+e,EAAavhB,UAAU0hB,sBAAwB,SAA+BM,GAC5E,IAAIL,EAAUK,EAAOL,QAAQ16B,cACzB26B,EAAaI,EAAOJ,WACpB/e,OAAe,EAEfqb,EAAS1b,KAAKgf,qBAAqBG,GAAW,CAAC,EAEnD,IAAK9e,KAAgB+e,EACfA,EAAW7vB,eAAe8Q,KAC5Bqb,EAAOrb,GAAgB+e,EAAW/e,GAGxC,EAEA0e,EAAavhB,UAAUiiB,sBAAwB,SAA+B/B,EAAW3zB,GACvFiW,KAAKif,oBAAoBvB,GAAa3zB,CACxC,EAEAg1B,EAAavhB,UAAUkiB,kBAAoB,SAA2B54B,EAAQuZ,GAC5E,IAAI8e,OAAU,EACVzD,EAAS1b,KAAKgf,qBAElB,GAAIl4B,EAAOq4B,QAAS,CAGlB,GAAIzD,EAFJyD,EAAUr4B,EAAOq4B,QAAQ16B,gBAEFi3B,EAAOyD,GAAS9e,GACrC,OAAO,IAAIsf,GAAgBjE,EAAOyD,GAAS9e,IAG7C,GAAqB,gBAAjBA,GAAmD,cAAjBA,EACpC,OAAO,IAAIsf,GAAgBjE,EAAO,oBAAoB1pB,OAGxD,GAAqB,cAAjBqO,GAAiD,eAAjBA,EAClC,OAAO,IAAIsf,GAAgBjE,EAAO,sBAAsBrb,GAE5D,CAEA,OAAO,IACT,EAEA0e,EAAavhB,UAAU/I,iBAAmB,SAA0B3N,EAAQq3B,EAAayB,EAAoBC,EAAUrB,GACrH,OAAQxe,KAAKif,oBAAoBd,IAAgBne,KAAKuf,sBAAsBrf,UAAUpZ,EAAQq3B,EAAayB,EAAoBC,EAAUrB,EAC3I,EAEOO,CACT,CAjG0B,GAmGfY,GAAkB,WAC3B,SAASA,EAAgBG,GAGvB9f,KAAK8f,OAASA,EACd9f,KAAKnd,QAAU,KACfmd,KAAK+f,QAAU,IACjB,CAyBA,OAvBAJ,EAAgBniB,UAAU0C,UAAY,SAAmBrd,EAAS+8B,GAChE5f,KAAKnd,QAAUA,EACfmd,KAAK+f,QAAUH,EAGf,IADA,IAAIE,EAAS9f,KAAK8f,OACTxoB,EAAI,EAAGsI,EAAKkgB,EAAO31B,OAAQyV,EAAKtI,IAAKA,EAC5CzU,EAAQ4R,iBAAiBqrB,EAAOxoB,GAAIsoB,EAExC,EAEAD,EAAgBniB,UAAUgH,QAAU,WAClC,GAAqB,OAAjBxE,KAAKnd,QAAT,CAMA,IAHA,IAAIA,EAAUmd,KAAKnd,QACf+8B,EAAqB5f,KAAK+f,QAC1BD,EAAS9f,KAAK8f,OACTxoB,EAAI,EAAGsI,EAAKkgB,EAAO31B,OAAQyV,EAAKtI,IAAKA,EAC5CzU,EAAQ6R,oBAAoBorB,EAAOxoB,GAAIsoB,GAEzC5f,KAAKnd,QAAUmd,KAAK+f,QAAU,IAP9B,CAQF,EAEOJ,CACT,CAjC6B,GAmClBK,GAAe,WACxB,SAASA,IAGPhgB,KAAKigB,QAAU,GACfjgB,KAAKkgB,WAAa,GACpB,CA0CA,OAxCAF,EAAaxiB,UAAU2iB,YAAc,SAAqB9qB,GACxD,IAAI4qB,EAAUjgB,KAAKigB,QAEnBA,EAAQr2B,KAAKyL,GAEU,IAAnB4qB,EAAQ91B,QACV6V,KAAKogB,oBAET,EAEAJ,EAAaxiB,UAAU6iB,eAAiB,SAAwBhrB,GAC9D,IAAI4qB,EAAUjgB,KAAKigB,QACnBA,EAAQte,OAAOse,EAAQ15B,QAAQ8O,GAAW,EAC5C,EAEA2qB,EAAaxiB,UAAU4iB,mBAAqB,WAC1C,IAAIE,EAAUtgB,KAEdugB,YAAW,WACT,OAAOD,EAAQxoB,OACjB,GAAGkI,KAAKkgB,WACV,EAEAF,EAAaxiB,UAAU1F,MAAQ,WAI7B,IAHA,IAAImoB,EAAUjgB,KAAKigB,QACf3oB,EAAI2oB,EAAQ91B,OAETmN,KAAK,CACV,IAAIjL,EAAU4zB,EAAQ3oB,GAElBjL,EAAQm0B,WACVn0B,EAAQ2R,MAEZ,CAEIiiB,EAAQ91B,QACV6V,KAAKogB,oBAET,EAEOJ,CACT,CAjD0B,GAmDfS,GAA8B5c,IAAwB6c,CAAMvkB,EAAU,WAC/E,SAASskB,EAAmBE,EAAc/iB,EAAKyC,GAG7CL,KAAK2gB,aAAeA,EACpB3gB,KAAKpC,IAAMA,EACXoC,KAAKK,aAAeA,CACtB,CAqCA,OAnCAogB,EAAmBjjB,UAAU2G,SAAW,WACtC,OAAOnE,KAAKpC,IAAIoC,KAAKK,aACvB,EAEAogB,EAAmBjjB,UAAU6G,SAAW,SAAkBpB,GACxDjD,KAAKpC,IAAIoC,KAAKK,cAAgB4C,CAChC,EAEAwd,EAAmBjjB,UAAUQ,KAAO,WAClC,IAAIkF,EAAWlD,KAAKkD,SAChBD,EAAWjD,KAAKmE,WAEpBnE,KAAKgD,gBAAgBC,EAAUC,GAE/BlD,KAAKkD,SAAWD,CAClB,EAEAwd,EAAmBjjB,UAAUgjB,QAAU,WACrC,OAAOxgB,KAAKkD,WAAalD,KAAKpC,IAAIoC,KAAKK,aACzC,EAEAogB,EAAmBjjB,UAAU0C,UAAY,SAAmB6B,EAASC,GAC9DhC,KAAK4D,mBACR5D,KAAKkD,SAAWlD,KAAKmE,WACrBnE,KAAK2gB,aAAaR,YAAYngB,OAEhCA,KAAK8B,cAAcC,EAASC,EAC9B,EAEAye,EAAmBjjB,UAAUqD,YAAc,SAAqBkB,EAASC,GACnEhC,KAAK0C,iBAAiBX,EAASC,KAAchC,KAAK4D,kBACpD5D,KAAK2gB,aAAaN,eAAergB,KAErC,EAEOygB,CACT,CA7CiF,KA6CzEtkB,EAEJykB,GAAS,YAAqB,wBAEvBC,GAAmB,CAC5B1c,SAAU,SAAkBvG,EAAKyC,GAC/B,OAAOzC,EAAIyC,EACb,EACAgE,SAAU,SAAkBrS,EAAO4L,EAAKyC,GACtCzC,EAAIyC,GAAgBrO,CACtB,GAGS8uB,GAAoB,WAC7B,SAASA,EAAkBC,EAAW1gB,GAGpCL,KAAKghB,YAAa,EAElBhhB,KAAK+gB,UAAYA,EACjB/gB,KAAKK,aAAeA,CACtB,CAeA,OAbAygB,EAAkBtjB,UAAU2G,SAAW,WACrC,OAAOnE,KAAK+gB,UAAU/gB,KAAKK,aAC7B,EAEAygB,EAAkBtjB,UAAU6G,SAAW,WACrC,IAAIsE,EAAOlL,EAAQuC,KAAK+gB,WACxB,MAAM,IAAI/V,MAAM,OAAShL,KAAKK,aAAe,kBAAoBsI,EAAO,KAAO3I,KAAK+gB,UAAY,wBAClG,EAEAD,EAAkBtjB,UAAU0C,UAAY,WAAsB,EAE9D4gB,EAAkBtjB,UAAUqD,YAAc,WAAwB,EAE3DigB,CACT,CAxB+B,GA0BpBG,GAA0Bpd,IAAwBqd,CAAM9kB,EAAU,WAC3E,SAAS6kB,EAAe9Y,EAAWvK,EAAKyC,GAGtCL,KAAKmI,UAAYA,EACjBnI,KAAKpC,IAAMA,EACXoC,KAAKK,aAAeA,EACpBL,KAAKgB,QAAS,EACdhB,KAAKmhB,WAAY,CACnB,CAgEA,OA9DAF,EAAezjB,UAAU2G,SAAW,WAClC,OAAOnE,KAAKpC,IAAIoC,KAAKK,aACvB,EAEA4gB,EAAezjB,UAAU6G,SAAW,SAAkBpB,GACpDjD,KAAKpC,IAAIoC,KAAKK,cAAgB4C,CAChC,EAEAge,EAAezjB,UAAU4jB,YAAc,WACrC,OAAOphB,KAAKiH,YACd,EAEAga,EAAezjB,UAAU6jB,YAAc,SAAqBpe,GAC1D,IAAIC,EAAWlD,KAAKiH,aAEhB/D,IAAaD,IACVjD,KAAKgB,SACRhB,KAAKkD,SAAWA,EAChBlD,KAAKgB,QAAS,EACdhB,KAAKmI,UAAUW,eAAe9I,OAGhCA,KAAKiH,aAAehE,EAExB,EAEAge,EAAezjB,UAAUQ,KAAO,WAC9B,IAAIkF,EAAWlD,KAAKkD,SAChBD,EAAWjD,KAAKkD,SAAWlD,KAAKiH,aAEpCjH,KAAKgB,QAAS,EAEdhB,KAAKgD,gBAAgBC,EAAUC,EACjC,EAEA+d,EAAezjB,UAAU0C,UAAY,SAAmB6B,EAASC,GAC1DhC,KAAKmhB,WACRnhB,KAAKshB,kBAEPthB,KAAK8B,cAAcC,EAASC,EAC9B,EAEAif,EAAezjB,UAAUqD,YAAc,SAAqBkB,EAASC,GACnEhC,KAAK0C,iBAAiBX,EAASC,EACjC,EAEAif,EAAezjB,UAAU8jB,gBAAkB,WACzCthB,KAAKmhB,WAAY,EACjBnhB,KAAKiH,aAAejH,KAAKpC,IAAIoC,KAAKK,cAClCL,KAAKqE,SAAWrE,KAAKqhB,YACrBrhB,KAAKmE,SAAWnE,KAAKohB,YAEhB9W,QAAQlN,eAAe4C,KAAKpC,IAAKoC,KAAKK,aAAc,CACvDnD,cAAc,EACdD,aAAY+C,KAAKK,gBAAgBL,KAAKpC,MAAMoC,KAAKpC,IAAI2jB,qBAAqBvhB,KAAKK,cAC/E1W,IAAKqW,KAAKmE,SAASuH,KAAK1L,MACxBnW,IAAKmW,KAAKqE,SAASqH,KAAK1L,SAExB4gB,GAAOvW,KAAK,4BAA+BrK,KAAKK,aAAe,cAAgBL,KAAKpC,IAExF,EAEOqjB,CACT,CA1E6E,KA0ErE7kB,EAEGolB,GAAyB,WAClC,SAASA,EAAuB3+B,EAASwd,EAAcohB,GAGrDzhB,KAAKnd,QAAUA,EACfmd,KAAKK,aAAeA,EACpBL,KAAKyhB,cAAgBA,CACvB,CAcA,OAZAD,EAAuBhkB,UAAU2G,SAAW,WAC1C,OAAOnE,KAAKnd,QAAQ6+B,eAAe,+BAAgC1hB,KAAKyhB,cAC1E,EAEAD,EAAuBhkB,UAAU6G,SAAW,SAAkBpB,GAC5D,OAAOjD,KAAKnd,QAAQ8+B,eAAe,+BAAgC3hB,KAAKyhB,cAAexe,EACzF,EAEAue,EAAuBhkB,UAAU0C,UAAY,WAC3C,MAAM,IAAI8K,MAAM,qBAAuBhL,KAAKnd,QAAQ2B,SAAW,iBAAmBwb,KAAKK,aAAe,+BACxG,EAEOmhB,CACT,CAtBoC,GAwBzBI,GAAwB,CACjCzd,SAAU,SAAkBvG,EAAKyC,GAC/B,OAAOzC,EAAIikB,aAAaxhB,EAC1B,EACAgE,SAAU,SAAkBrS,EAAO4L,EAAKyC,GAClCrO,QACF4L,EAAI3I,gBAAgBoL,GAEpBzC,EAAI1I,aAAamL,EAAcrO,EAEnC,GAGS8vB,GAAwB,WACjC,SAASA,EAAsBj/B,EAASwd,GAGtCL,KAAKnd,QAAUA,EACfmd,KAAKK,aAAeA,CACtB,CAiBA,OAfAyhB,EAAsBtkB,UAAU2G,SAAW,WACzC,OAAOnE,KAAKnd,QAAQg/B,aAAa7hB,KAAKK,aACxC,EAEAyhB,EAAsBtkB,UAAU6G,SAAW,SAAkBpB,GAC3D,OAAIA,QACKjD,KAAKnd,QAAQoS,gBAAgB+K,KAAKK,cAEpCL,KAAKnd,QAAQqS,aAAa8K,KAAKK,aAAc4C,EACtD,EAEA6e,EAAsBtkB,UAAU0C,UAAY,WAC1C,MAAM,IAAI8K,MAAM,qBAAuBhL,KAAKnd,QAAQ2B,SAAW,iBAAmBwb,KAAKK,aAAe,+BACxG,EAEOyhB,CACT,CAxBmC,GA0BxBC,GAAgB,WACzB,SAASA,EAAcl/B,EAASwd,GAG9BL,KAAKnd,QAAUA,EACfmd,KAAKK,aAAeA,EAEpBL,KAAKvU,OAAS,KACduU,KAAKzd,QAAU,CACjB,CAsEA,OApEAw/B,EAAcvkB,UAAU2G,SAAW,WACjC,OAAOnE,KAAKnd,QAAQmS,MAAMgtB,OAC5B,EAEAD,EAAcvkB,UAAUykB,aAAe,SAAsBjtB,EAAOhD,GAClE,IAAIkwB,EAAW,GAEXlwB,SAAkE,mBAAlBA,EAAMzL,UAA2D,IAAjCyL,EAAMzL,QAAQ,gBAChG27B,EAAW,YACXlwB,EAAQA,EAAM3B,QAAQ,aAAc,KAEtC2P,KAAKnd,QAAQmS,MAAMmtB,YAAYntB,EAAOhD,EAAOkwB,EAC/C,EAEAH,EAAcvkB,UAAU6G,SAAW,SAAkBpB,GACnD,IAAIxX,EAASuU,KAAKvU,QAAU,CAAC,EACzBuJ,OAAQ,EACRzS,EAAUyd,KAAKzd,QAEnB,GAAI0gB,QACF,GAAIA,aAAoB7X,OAAQ,CAC9B,IAAI4G,OAAQ,EACZ,IAAKgD,KAASiO,EACRA,EAAS1T,eAAeyF,KAC1BhD,EAAQiR,EAASjO,GAIjBvJ,EAHAuJ,EAAQA,EAAM3E,QAAQ,YAAY,SAAU3D,GAC1C,MAAO,IAAMA,EAAEjI,aACjB,KACgBlC,EAChByd,KAAKiiB,aAAajtB,EAAOhD,GAG/B,MAAO,GAAIiR,EAAS9Y,OAGlB,IAFA,IAAIi4B,EAAK,qMACLC,OAAO,EAC2B,QAA9BA,EAAOD,EAAGE,KAAKrf,MACrBjO,EAAQqtB,EAAK,MAKb52B,EAAOuJ,GAASzS,EAChByd,KAAKiiB,aAAajtB,EAAOqtB,EAAK,KAQpC,GAHAriB,KAAKvU,OAASA,EACduU,KAAKzd,SAAW,EAEA,IAAZA,EAKJ,IAAKyS,KADLzS,GAAW,EACGkJ,EACPA,EAAO8D,eAAeyF,IAAUvJ,EAAOuJ,KAAWzS,GAIvDyd,KAAKnd,QAAQmS,MAAMqrB,eAAerrB,EAEtC,EAEA+sB,EAAcvkB,UAAU0C,UAAY,WAClC,MAAM,IAAI8K,MAAM,qBAAuBhL,KAAKnd,QAAQ2B,SAAW,iBAAmBwb,KAAKK,aAAe,+BACxG,EAEO0hB,CACT,CAhF2B,GAkFhBQ,GAAkC1e,IAAwB2e,CAAMnmB,EAAU,WACnF,SAASkmB,EAAuB1/B,EAASwd,EAAc0f,GAGrD/f,KAAKnd,QAAUA,EACfmd,KAAKK,aAAeA,EACpBL,KAAK+f,QAAUA,EACM,UAAjB1f,IACFL,KAAKqE,SAAW,WAAa,EAEjC,CA0CA,OAxCAke,EAAuB/kB,UAAU2G,SAAW,WAC1C,OAAOnE,KAAKnd,QAAQmd,KAAKK,aAC3B,EAEAkiB,EAAuB/kB,UAAU6G,SAAW,SAAkBpB,GAC5DA,EAAWA,QAA8C,GAAKA,EAC1DjD,KAAKnd,QAAQmd,KAAKK,gBAAkB4C,IACtCjD,KAAKnd,QAAQmd,KAAKK,cAAgB4C,EAClCjD,KAAKyiB,SAET,EAEAF,EAAuB/kB,UAAUilB,OAAS,WACxC,IAAIvf,EAAWlD,KAAKkD,SAChBD,EAAWjD,KAAKmE,WAEpBnE,KAAKgD,gBAAgBC,EAAUC,GAE/BlD,KAAKkD,SAAWD,CAClB,EAEAsf,EAAuB/kB,UAAUggB,YAAc,WAC7Cxd,KAAKyiB,QACP,EAEAF,EAAuB/kB,UAAU0C,UAAY,SAAmB6B,EAASC,GAClEhC,KAAK4D,mBACR5D,KAAKkD,SAAWlD,KAAKmE,WACrBnE,KAAK+f,QAAQ7f,UAAUF,KAAKnd,QAASmd,OAGvCA,KAAK8B,cAAcC,EAASC,EAC9B,EAEAugB,EAAuB/kB,UAAUqD,YAAc,SAAqBkB,EAASC,GACvEhC,KAAK0C,iBAAiBX,EAASC,KAAchC,KAAK4D,kBACpD5D,KAAK+f,QAAQvb,SAEjB,EAEO+d,CACT,CArDqF,KAqD7ElmB,EAEJqmB,GAAsB,wBACtBC,GAAsB,wBAEfC,GAA2B/e,IAAwBgf,CAAMvmB,EAAU,WAC5E,SAASsmB,EAAgB//B,EAASk9B,EAASzf,GAGzCN,KAAKnd,QAAUA,EACfmd,KAAK+f,QAAUA,EACf/f,KAAKM,gBAAkBA,CACzB,CAkIA,OAhIAsiB,EAAgBplB,UAAU2G,SAAW,WACnC,OAAOnE,KAAKhO,KACd,EAEA4wB,EAAgBplB,UAAU6G,SAAW,SAAkBpB,GACjDjD,KAAK8iB,aAAe9iB,KAAKhO,QAAUiR,IAInCjD,KAAK+iB,gBACP/iB,KAAK+iB,cAAcliB,YAAY6hB,GAAqB1iB,MACpDA,KAAK+iB,cAAgB,MAGG,aAAtB/iB,KAAKnd,QAAQ8lB,MAAuBte,MAAMkkB,QAAQtL,KACpDjD,KAAK+iB,cAAgB/iB,KAAKM,gBAAgBI,iBAAiBuC,GAC3DjD,KAAK+iB,cAAc7iB,UAAUwiB,GAAqB1iB,OAGpDA,KAAKkD,SAAWlD,KAAKhO,MACrBgO,KAAKhO,MAAQiR,EACbjD,KAAKgjB,qBACLhjB,KAAKyiB,SAEAziB,KAAK8iB,cACR9iB,KAAK8iB,aAAc,EACnB9iB,KAAKM,gBAAgB6H,UAAUW,eAAe9I,OAElD,EAEA4iB,EAAgBplB,UAAUQ,KAAO,SAAc+D,EAAS0E,GACtDzG,KAAKgjB,qBAEAhjB,KAAKijB,gBACRjjB,KAAKijB,cAAgBjjB,KAAKnd,QAAQqgC,cAAcC,OAASnjB,KAAKnd,QAAQqgC,cAAclxB,MAChFgO,KAAKijB,eACPjjB,KAAKijB,cAAc/iB,UAAUyiB,GAAqB3iB,MAGxD,EAEA4iB,EAAgBplB,UAAUwlB,mBAAqB,WAC7C,IAAIhxB,EAAQgO,KAAKhO,MACbnP,EAAUmd,KAAKnd,QACfugC,EAAevgC,EAAQ0M,eAAe,SAAW1M,EAAQsgC,MAAQtgC,EAAQmP,MACzEqxB,EAA2B,UAAjBxgC,EAAQ8lB,KAClB2a,EAAUzgC,EAAQygC,SAAW,SAAUvsB,EAAGC,GAC5C,OAAOD,IAAMC,CACf,EAEAnU,EAAQw8B,QAAUgE,KAAaC,EAAQtxB,EAAOoxB,KAAkBC,IAAqB,IAAVrxB,IAAmBqxB,GAAWh5B,MAAMkkB,QAAQvc,KAE/G,IAFyHA,EAAMuxB,WAAU,SAAUlhC,GACzJ,QAASihC,EAAQjhC,EAAM+gC,EACzB,GACF,EAEAR,EAAgBplB,UAAUgmB,iBAAmB,WAC3C,IAAIxxB,EAAQgO,KAAKhO,MACbnP,EAAUmd,KAAKnd,QACfugC,EAAevgC,EAAQ0M,eAAe,SAAW1M,EAAQsgC,MAAQtgC,EAAQmP,MACzE3E,OAAQ,EACRi2B,EAAUzgC,EAAQygC,SAAW,SAAUvsB,EAAGC,GAC5C,OAAOD,IAAMC,CACf,EAEA,GAAqB,aAAjBnU,EAAQ8lB,KAAqB,CAC/B,GAAIte,MAAMkkB,QAAQvc,GAUhB,OATA3E,EAAQ2E,EAAMuxB,WAAU,SAAUlhC,GAChC,QAASihC,EAAQjhC,EAAM+gC,EACzB,SACIvgC,EAAQw8B,UAAsB,IAAXhyB,EACrB2E,EAAMpI,KAAKw5B,GACDvgC,EAAQw8B,UAAsB,IAAXhyB,GAC7B2E,EAAM2P,OAAOtU,EAAO,IAMxB2E,EAAQnP,EAAQw8B,OAClB,KAAO,KAAIx8B,EAAQw8B,QAGjB,OAFArtB,EAAQoxB,CAGV,CAEApjB,KAAKkD,SAAWlD,KAAKhO,MACrBgO,KAAKhO,MAAQA,EACbgO,KAAKyiB,QACP,EAEAG,EAAgBplB,UAAUilB,OAAS,WACjC,IAAIvf,EAAWlD,KAAKkD,SAChBD,EAAWjD,KAAKhO,MAEhBiR,IAAaC,GAIjBlD,KAAKgD,gBAAgBC,EAAUC,EACjC,EAEA0f,EAAgBplB,UAAUggB,YAAc,WACtCxd,KAAKwjB,kBACP,EAEAZ,EAAgBplB,UAAU0C,UAAY,SAAmB6B,EAASC,GAC3DhC,KAAK4D,kBACR5D,KAAK+f,QAAQ7f,UAAUF,KAAKnd,QAASmd,MAEvCA,KAAK8B,cAAcC,EAASC,EAC9B,EAEA4gB,EAAgBplB,UAAUqD,YAAc,SAAqBkB,EAASC,GAChEhC,KAAK0C,iBAAiBX,EAASC,KAAchC,KAAK4D,kBACpD5D,KAAK+f,QAAQvb,SAEjB,EAEAoe,EAAgBplB,UAAUuO,OAAS,WAC7B/L,KAAK+iB,gBACP/iB,KAAK+iB,cAAcliB,YAAY6hB,GAAqB1iB,MACpDA,KAAK+iB,cAAgB,MAEnB/iB,KAAKijB,eACPjjB,KAAKijB,cAAcpiB,YAAY8hB,GAAqB3iB,KAExD,EAEO4iB,CACT,CA1I8E,KA0ItEtmB,EAEJmnB,GAAqB,4BAEdC,GAA+B7f,IAAwB8f,CAAMpnB,EAAW,WACjF,SAASmnB,EAAoB7gC,EAASk9B,EAASzf,GAG7CN,KAAKnd,QAAUA,EACfmd,KAAK+f,QAAUA,EACf/f,KAAKM,gBAAkBA,CACzB,CAiMA,OA/LAojB,EAAoBlmB,UAAU2G,SAAW,WACvC,OAAOnE,KAAKhO,KACd,EAEA0xB,EAAoBlmB,UAAU6G,SAAW,SAAkBpB,GACzD,GAAIA,SAA+CjD,KAAKnd,QAAQ+gC,WAAav5B,MAAMkkB,QAAQtL,GACzF,MAAM,IAAI+H,MAAM,gEAEdhL,KAAKhO,QAAUiR,IAIfjD,KAAK+iB,gBACP/iB,KAAK+iB,cAAcliB,YAAY4iB,GAAoBzjB,MACnDA,KAAK+iB,cAAgB,MAGnB14B,MAAMkkB,QAAQtL,KAChBjD,KAAK+iB,cAAgB/iB,KAAKM,gBAAgBI,iBAAiBuC,GAC3DjD,KAAK+iB,cAAc7iB,UAAUujB,GAAoBzjB,OAGnDA,KAAKkD,SAAWlD,KAAKhO,MACrBgO,KAAKhO,MAAQiR,EACbjD,KAAK6jB,qBACL7jB,KAAKyiB,SAEAziB,KAAK8iB,cACR9iB,KAAK8iB,aAAc,EACnB9iB,KAAKM,gBAAgB6H,UAAUW,eAAe9I,OAElD,EAEA0jB,EAAoBlmB,UAAUQ,KAAO,SAAc+D,EAAS0E,GAC1DzG,KAAK6jB,oBACP,EAEAH,EAAoBlmB,UAAUqmB,mBAAqB,WACjD,IAAI7xB,EAAQgO,KAAKhO,MACbuc,OAAU,EAEVlkB,MAAMkkB,QAAQvc,KAChBuc,GAAU,GAqBZ,IAlBA,IAAIxjB,EAAUiV,KAAKnd,QAAQkI,QACvBuM,EAAIvM,EAAQZ,OACZm5B,EAAUtjB,KAAKnd,QAAQygC,SAAW,SAAUvsB,EAAGC,GACjD,OAAOD,IAAMC,CACf,EAEIe,EAAQ,WACV,IAAI+rB,EAAS/4B,EAAQ1I,KAAKiV,GACtBysB,EAAcD,EAAOv0B,eAAe,SAAWu0B,EAAOX,MAAQW,EAAO9xB,MACzE,GAAIuc,EAIF,OAHAuV,EAAOE,UAEC,IAFUhyB,EAAMuxB,WAAU,SAAUlhC,GAC1C,QAASihC,EAAQS,EAAa1hC,EAChC,IACO,WAETyhC,EAAOE,WAAaV,EAAQS,EAAa/xB,EAC3C,EAEOsF,KACMS,GAIf,EAEA2rB,EAAoBlmB,UAAUgmB,iBAAmB,WAO/C,IANA,IAAIS,EAAUjkB,KAEVjV,EAAUiV,KAAKnd,QAAQkI,QACvB+b,EAAQ,EACR9U,EAAQ,GAEHsF,EAAI,EAAGsI,EAAK7U,EAAQZ,OAAQmN,EAAIsI,EAAItI,IAAK,CAChD,IAAI4sB,EAAUn5B,EAAQ1I,KAAKiV,GACtB4sB,EAAQF,WAGbhyB,EAAMpI,KAAKs6B,EAAQ30B,eAAe,SAAW20B,EAAQf,MAAQe,EAAQlyB,OACrE8U,IACF,CAEA,GAAI9G,KAAKnd,QAAQ+gC,UACf,GAAIv5B,MAAMkkB,QAAQvO,KAAKhO,OAAQ,CAC7B,IAAImyB,EAAQ,WAkBV,IAjBA,IAAIb,EAAUW,EAAQphC,QAAQygC,SAAW,SAAUvsB,EAAGC,GACpD,OAAOD,IAAMC,CACf,EAEIM,EAAI,EAEJ8sB,EAAS,WACX,IAAIrtB,EAAIktB,EAAQjyB,MAAMsF,IAGd,IAFJtF,EAAMuxB,WAAU,SAAUvsB,GAC5B,OAAOssB,EAAQvsB,EAAGC,EACpB,IACEitB,EAAQjyB,MAAM2P,OAAOrK,EAAG,GAExBA,GAEJ,EAEOA,EAAI2sB,EAAQjyB,MAAM7H,QACvBi6B,IAGF9sB,EAAI,EAYJ,IAVA,IAAI+sB,EAAS,WACX,IAAIttB,EAAI/E,EAAMsF,IAGN,IAFJ2sB,EAAQjyB,MAAMuxB,WAAU,SAAUvsB,GACpC,OAAOssB,EAAQvsB,EAAGC,EACpB,KACEitB,EAAQjyB,MAAMpI,KAAKmN,GAErBO,GACF,EAEOA,EAAItF,EAAM7H,QACfk6B,IAEF,MAAO,CACL3pB,OAAG,EAEP,CAxCY,GA0CZ,GAAsE,iBAAhD,IAAVypB,EAAwB,YAAc1mB,EAAQ0mB,IAAsB,OAAOA,EAAMzpB,CAC/F,OAGE1I,EADY,IAAV8U,EACM,KAEA9U,EAAM,GAIdA,IAAUgO,KAAKhO,QACjBgO,KAAKkD,SAAWlD,KAAKhO,MACrBgO,KAAKhO,MAAQA,EACbgO,KAAKyiB,SAET,EAEAiB,EAAoBlmB,UAAUilB,OAAS,WACrC,IAAIvf,EAAWlD,KAAKkD,SAChBD,EAAWjD,KAAKhO,MAEpBgO,KAAKgD,gBAAgBC,EAAUC,EACjC,EAEAwgB,EAAoBlmB,UAAUggB,YAAc,WAC1Cxd,KAAKwjB,kBACP,EAEAE,EAAoBlmB,UAAU0C,UAAY,SAAmB6B,EAASC,GAC/DhC,KAAK4D,kBACR5D,KAAK+f,QAAQ7f,UAAUF,KAAKnd,QAASmd,MAEvCA,KAAK8B,cAAcC,EAASC,EAC9B,EAEA0hB,EAAoBlmB,UAAUqD,YAAc,SAAqBkB,EAASC,GACpEhC,KAAK0C,iBAAiBX,EAASC,KAAchC,KAAK4D,kBACpD5D,KAAK+f,QAAQvb,SAEjB,EAEAkf,EAAoBlmB,UAAUkO,KAAO,WACnC,IAAI4Y,EAAUtkB,KAEdA,KAAKukB,YAAc,6BAA2B,WAC5CD,EAAQT,qBACRS,EAAQd,kBACV,IACAxjB,KAAKukB,YAAYC,QAAQxkB,KAAKnd,QAAS,CAAE4hC,WAAW,EAAMC,SAAS,EAAMC,eAAe,GAC1F,EAEAjB,EAAoBlmB,UAAUuO,OAAS,WACrC/L,KAAKukB,YAAYK,aACjB5kB,KAAKukB,YAAc,KAEfvkB,KAAK+iB,gBACP/iB,KAAK+iB,cAAcliB,YAAY4iB,GAAoBzjB,MACnDA,KAAK+iB,cAAgB,KAEzB,EAEOW,CACT,CAzMmF,KAyM3EnnB,EAEGsoB,GAAgB,WACzB,SAASA,EAAchiC,GAGrBmd,KAAKnd,QAAUA,EACfmd,KAAKghB,YAAa,EAClBhhB,KAAKhO,MAAQ,GACbgO,KAAKzd,QAAU,CACjB,CA6CA,OA3CAsiC,EAAcrnB,UAAU2G,SAAW,WACjC,OAAOnE,KAAKhO,KACd,EAEA6yB,EAAcrnB,UAAU6G,SAAW,SAAkBpB,GACnD,IAAI6hB,EAAY9kB,KAAK8kB,WAAa,CAAC,EAC/BviC,EAAUyd,KAAKzd,QACfwiC,OAAQ,EACR37B,OAAO,EAEX,GAAI6Z,SAA+CA,EAAS9Y,OAE1D,IAAK,IAAImN,EAAI,EAAGnN,GADhB46B,EAAQ9hB,EAAShV,MAAM,QACQ9D,OAAQmN,EAAInN,EAAQmN,IAEpC,MADblO,EAAO27B,EAAMztB,MAIbwtB,EAAU17B,GAAQ7G,EAClByd,KAAKnd,QAAQmiC,UAAU77B,IAAIC,IAQ/B,GAJA4W,KAAKhO,MAAQiR,EACbjD,KAAK8kB,UAAYA,EACjB9kB,KAAKzd,SAAW,EAEA,IAAZA,EAKJ,IAAK6G,KADL7G,GAAW,EACEuiC,EACNA,EAAUv1B,eAAenG,IAAS07B,EAAU17B,KAAU7G,GAG3Dyd,KAAKnd,QAAQmiC,UAAUC,OAAO77B,EAElC,EAEAy7B,EAAcrnB,UAAU0C,UAAY,WAClC,MAAM,IAAI8K,MAAM,qBAAuBhL,KAAKnd,QAAQ2B,SAAW,kDACjE,EAEOqgC,CACT,CAtD2B,GAiEpB,SAASK,KACd,IAAK,IAAIj7B,EAAOC,UAAUC,OAAQg7B,EAAO96B,MAAMJ,GAAOK,EAAO,EAAGA,EAAOL,EAAMK,IAC3E66B,EAAK76B,GAAQJ,UAAUI,GAGzB,OAAO,SAAUxD,EAAQ2F,EAAKuQ,GAE5B,OADAA,EAAWrT,IAAIy7B,aAAeD,EACvBnoB,CACT,CACF,CAEO,IAAIqoB,GAAqB,SAAUC,GAGxC,SAASD,EAAmBj8B,EAAMg8B,GAGhC,IAAIG,EAAUznB,EAA2BkC,KAAMslB,EAActnB,KAAKgC,OAKlE,OAHAulB,EAAQn8B,KAAOA,EACfm8B,EAAQH,aAAeA,EACvBG,EAAQxa,cAAe,EAChBwa,CACT,CAsBA,OAjCArnB,EAAUmnB,EAAoBC,GAa9BD,EAAmB7nB,UAAU4G,SAAW,SAAkBjF,EAAO+E,GAC/D,OAAO/E,EAAMH,eAAegB,KAAK5W,KACnC,EAEAi8B,EAAmB7nB,UAAUnS,OAAS,SAAgB8T,EAAOnN,GAC3DmN,EAAMH,eAAegB,KAAK5W,MAAQ4I,CACpC,EAEAqzB,EAAmB7nB,UAAU+N,OAAS,SAAgBC,GACpD,MAAM,IAAIR,MAAM,kBAClB,EAEAqa,EAAmB7nB,UAAUkE,QAAU,SAAiBF,EAASrC,GAG/D,IAFA,IAAIimB,EAAeplB,KAAKolB,aACpB9tB,EAAI8tB,EAAaj7B,OACdmN,KACL8tB,EAAa9tB,GAAGoK,QAAQF,EAASrC,EAErC,EAEOkmB,CACT,CAnCgC,CAmC9Bva,IAgBE0a,QAAc,EACdC,QAA0B,EAC1BC,QAA4B,EAC5BC,QAAc,EAEY,oBAAnBC,iBACTJ,GAAc,CACZzuB,EAAG,CAAC,QAAS,4BAA6B,KAAM,aAAc,UAAW,YAAa,aAAc,SAAU,cAAe,cAAe,aAAc,cAAe,YAAa,qBAAsB,mBAAoB,QAAS,iBAAkB,SAAU,YAAa,gBAAiB,gBAAiB,aAAc,aAAc,aAAc,cAAe,aAAc,WAAY,WAAY,aACnZ8uB,SAAU,CAAC,QAAS,KAAM,KAAM,4BAA6B,SAAU,WAAY,KAAM,aAAc,UAAW,YAAa,aAAc,SAAU,cAAe,cAAe,aAAc,cAAe,YAAa,qBAAsB,mBAAoB,SAAU,QAAS,iBAAkB,IAAK,gBAAiB,gBAAiB,aAAc,aAAc,aAAc,cAAe,aAAc,WAAY,WAAY,YAAa,KACjcC,YAAa,CAAC,KAAM,WAAY,WAAY,aAC5CC,aAAc,CAAC,KAAM,WAAY,WAAY,aAC7CC,QAAS,CAAC,aAAc,WAAY,gBAAiB,gBAAiB,QAAS,KAAM,WAAY,MAAO,MAAO,4BAA6B,OAAQ,OAAQ,KAAM,aAAc,WAAY,MAAO,MAAO,UAAW,QAAS,SAAU,WAAY,cAAe,YAAa,qBAAsB,mBAAoB,UAAW,iBAAkB,KAAM,SAAU,gBAAiB,gBAAiB,aAAc,aAAc,aAAc,cAAe,aAAc,WAAY,WAAY,aACxeC,aAAc,CAAC,aAAc,WAAY,gBAAiB,gBAAiB,QAAS,KAAM,WAAY,MAAO,MAAO,4BAA6B,OAAQ,OAAQ,KAAM,aAAc,WAAY,MAAO,MAAO,UAAW,QAAS,SAAU,WAAY,cAAe,YAAa,qBAAsB,mBAAoB,UAAW,iBAAkB,KAAM,SAAU,gBAAiB,gBAAiB,aAAc,aAAc,aAAc,cAAe,aAAc,WAAY,WAAY,aAC7eC,cAAe,CAAC,aAAc,WAAY,QAAS,KAAM,WAAY,MAAO,MAAO,4BAA6B,OAAQ,OAAQ,KAAM,YAAa,aAAc,WAAY,MAAO,MAAO,UAAW,QAAS,SAAU,WAAY,SAAU,OAAQ,cAAe,YAAa,qBAAsB,mBAAoB,UAAW,SAAU,iBAAkB,KAAM,SAAU,gBAAiB,gBAAiB,aAAc,aAAc,aAAc,cAAe,aAAc,WAAY,WAAY,aACrfC,iBAAkB,CAAC,aAAc,WAAY,gBAAiB,gBAAiB,QAAS,KAAM,WAAY,MAAO,MAAO,4BAA6B,OAAQ,OAAQ,KAAM,aAAc,WAAY,MAAO,MAAO,UAAW,QAAS,SAAU,WAAY,cAAe,YAAa,qBAAsB,mBAAoB,UAAW,iBAAkB,KAAM,OAAQ,SAAU,gBAAiB,gBAAiB,aAAc,aAAc,aAAc,cAAe,aAAc,WAAY,WAAY,aACzfC,OAAQ,CAAC,QAAS,KAAM,KAAM,4BAA6B,KAAM,aAAc,UAAW,YAAa,aAAc,SAAU,cAAe,cAAe,aAAc,cAAe,YAAa,IAAK,qBAAsB,mBAAoB,QAAS,iBAAkB,YAAa,WAAY,WAAY,aACtTC,SAAU,CAAC,QAAS,gBAAiB,4BAA6B,KAAM,qBAAsB,mBAAoB,QAAS,iBAAkB,YAAa,WAAY,WAAY,aAClL,gBAAiB,CAAC,KAAM,QAAS,OAAQ,mBAAoB,gBAAiB,gBAAiB,aAAc,aAAc,aAAc,cAAe,aAAc,WAAY,WAAY,aAC9LC,OAAQ,CAAC,4BAA6B,KAAM,qBAAsB,mBAAoB,iBAAkB,IAAK,gBAAiB,gBAAiB,aAAc,aAAc,aAAc,cAAe,aAAc,WAAY,WAAY,YAAa,KAC3PC,KAAM,CAAC,QAAS,4BAA6B,KAAM,aAAc,UAAW,YAAa,aAAc,SAAU,cAAe,cAAe,aAAc,cAAe,YAAa,qBAAsB,mBAAoB,QAAS,iBAAkB,YAAa,WAAY,WAAY,aACnSC,KAAM,CAAC,QAAS,KAAM,QAAS,WAAY,WAAY,aACvDC,QAAS,CAAC,QAAS,KAAM,KAAM,4BAA6B,KAAM,aAAc,UAAW,YAAa,aAAc,SAAU,cAAe,cAAe,aAAc,cAAe,YAAa,qBAAsB,mBAAoB,KAAM,KAAM,QAAS,iBAAkB,YAAa,WAAY,WAAY,aAC9TC,QAAS,CAAC,QAAS,SAAU,KAAM,KAAM,MAAO,OAAQ,SAAU,QAAS,QAAS,IAAK,WAAY,WAAY,YAAa,KAC9HC,cAAe,CAAC,QAAS,SAAU,KAAM,KAAM,SAAU,QAAS,OAAQ,SAAU,QAAS,IAAK,WAAY,WAAY,YAAa,KACvIC,oBAAqB,CAAC,QAAS,SAAU,KAAM,KAAM,SAAU,QAAS,QAAS,IAAK,WAAY,WAAY,YAAa,KAC3HC,YAAa,CAAC,QAAS,SAAU,KAAM,KAAM,MAAO,KAAM,KAAM,KAAM,KAAM,WAAY,SAAU,QAAS,QAAS,IAAK,WAAY,WAAY,YAAa,KAC9JC,iBAAkB,CAAC,OAAQ,QAAS,UAAW,WAAY,SAAU,KAAM,KAAM,eAAgB,mBAAoB,QAAS,gBAAiB,SAAU,QAAS,UAAW,UAAW,QAAS,IAAK,WAAY,WAAY,YAAa,KAC3OC,kBAAmB,CAAC,QAAS,kBAAmB,SAAU,KAAM,KAAM,mBAAoB,SAAU,QAAS,eAAgB,QAAS,IAAK,WAAY,WAAY,YAAa,KAChLC,kBAAmB,CAAC,QAAS,SAAU,KAAM,KAAM,MAAO,SAAU,QAAS,QAAS,QAAS,IAAK,mBAAoB,WAAY,WAAY,YAAa,IAAK,oBAClKC,eAAgB,CAAC,UAAW,YAAa,KAAM,WAAY,WAAY,aACvEC,QAAS,CAAC,QAAS,SAAU,KAAM,SAAU,QAAS,QAAS,IAAK,WAAY,WAAY,YAAa,KACzGC,QAAS,CAAC,YAAa,WAAY,KAAM,YAAa,SAAU,QAAS,cAAe,OAAQ,WAAY,WAAY,aACxHC,QAAS,CAAC,YAAa,WAAY,KAAM,YAAa,SAAU,QAAS,cAAe,OAAQ,WAAY,WAAY,aACxHC,QAAS,CAAC,YAAa,WAAY,KAAM,YAAa,SAAU,QAAS,cAAe,OAAQ,WAAY,WAAY,aACxHC,QAAS,CAAC,YAAa,WAAY,KAAM,YAAa,SAAU,QAAS,cAAe,OAAQ,WAAY,WAAY,aACxHC,eAAgB,CAAC,QAAS,SAAU,KAAM,KAAM,SAAU,eAAgB,QAAS,QAAS,IAAK,WAAY,WAAY,YAAa,KACtIC,QAAS,CAAC,QAAS,4BAA6B,SAAU,KAAM,sBAAuB,SAAU,QAAS,QAAS,IAAK,gBAAiB,gBAAiB,aAAc,aAAc,aAAc,cAAe,aAAc,WAAY,WAAY,YAAa,KACtQC,QAAS,CAAC,QAAS,SAAU,KAAM,SAAU,QAAS,QAAS,IAAK,WAAY,WAAY,YAAa,KACzGC,YAAa,CAAC,KAAM,WAAY,WAAY,aAC5CC,aAAc,CAAC,QAAS,SAAU,KAAM,KAAM,WAAY,SAAU,SAAU,QAAS,QAAS,IAAK,WAAY,WAAY,YAAa,KAC1IC,SAAU,CAAC,QAAS,KAAM,KAAM,SAAU,KAAM,KAAM,SAAU,QAAS,QAAS,IAAK,WAAY,WAAY,YAAa,KAC5HC,aAAc,CAAC,KAAM,IAAK,WAAY,WAAY,YAAa,IAAK,KACpEC,mBAAoB,CAAC,QAAS,SAAU,KAAM,KAAM,mBAAoB,SAAU,mBAAoB,mBAAoB,QAAS,eAAgB,QAAS,IAAK,WAAY,WAAY,YAAa,KACtMC,YAAa,CAAC,KAAM,oBAAqB,YAAa,YAAa,YAAa,mBAAoB,IAAK,WAAY,WAAY,YAAa,IAAK,KACnJC,OAAQ,CAAC,QAAS,SAAU,KAAM,KAAM,SAAU,QAAS,QAAS,IAAK,WAAY,WAAY,YAAa,KAC9GC,aAAc,CAAC,gBAAiB,QAAS,SAAU,KAAM,aAAc,SAAU,OAAQ,cAAe,QAAS,OAAQ,QAAS,IAAK,WAAY,WAAY,YAAa,KAC5KrgC,OAAQ,CAAC,QAAS,4BAA6B,YAAa,cAAe,SAAU,KAAM,iBAAkB,QAAS,QAAS,IAAK,gBAAiB,gBAAiB,aAAc,aAAc,aAAc,cAAe,aAAc,WAAY,WAAY,YAAa,KAClRsgC,KAAM,CAAC,QAAS,4BAA6B,cAAe,iBAAkB,iBAAkB,KAAM,QAAS,aAAc,gBAAiB,gBAAiB,WAAY,WAAY,aACvL,YAAa,CAAC,gBAAiB,aAAc,SAAU,OAAQ,aAAc,UAAW,cAAe,YAAa,eAAgB,aAAc,eAAgB,cAAe,UAAW,KAAM,cAAe,eAAgB,oBAAqB,qBAAsB,WAAY,QAAS,QAAS,QAAS,yBAA0B,0BAA2B,qBAAsB,sBAAuB,gBAAiB,eAAgB,eAAgB,YAAa,gBAAiB,iBAAkB,SAAU,WAAY,WAAY,WAAY,aACpiB,mBAAoB,CAAC,KAAM,SAAU,WAAY,WAAY,aAC7D,iBAAkB,CAAC,KAAM,OAAQ,WAAY,WAAY,aACzD,gBAAiB,CAAC,KAAM,WAAY,WAAY,aAChD,gBAAiB,CAAC,KAAM,gBAAiB,gBAAiB,aAAc,aAAc,aAAc,cAAe,aAAc,WAAY,WAAY,aACzJC,cAAe,CAAC,QAAS,4BAA6B,SAAU,KAAM,aAAc,UAAW,YAAa,aAAc,SAAU,cAAe,cAAe,aAAc,cAAe,YAAa,qBAAsB,mBAAoB,QAAS,iBAAkB,YAAa,QAAS,IAAK,WAAY,WAAY,YAAa,KACjVC,EAAG,CAAC,QAAS,4BAA6B,KAAM,aAAc,UAAW,YAAa,aAAc,SAAU,cAAe,cAAe,aAAc,cAAe,YAAa,qBAAsB,mBAAoB,QAAS,iBAAkB,YAAa,WAAY,WAAY,aAChSC,MAAO,CAAC,cAAe,QAAS,IAAK,aAAc,cAAe,KAAM,OAAQ,cAAe,QAAS,UAAW,aAAc,gBAAiB,gBAAiB,WAAY,WAAY,aAC3LC,SAAU,CAAC,QAAS,KAAM,KAAM,SAAU,WAAY,KAAM,QAAS,IAAK,gBAAiB,gBAAiB,aAAc,aAAc,aAAc,cAAe,aAAc,WAAY,WAAY,YAAa,KACxNC,MAAO,CAAC,KAAM,KAAM,KAAM,IAAK,KAAM,KAAM,WAAY,WAAY,aACnEC,MAAO,CAAC,QAAS,4BAA6B,SAAU,KAAM,aAAc,UAAW,YAAa,aAAc,SAAU,cAAe,cAAe,aAAc,cAAe,YAAa,sBAAuB,qBAAsB,mBAAoB,QAAS,iBAAkB,YAAa,QAAS,IAAK,gBAAiB,gBAAiB,aAAc,aAAc,aAAc,cAAe,aAAc,WAAY,WAAY,YAAa,KACzcC,KAAM,CAAC,QAAS,4BAA6B,KAAM,aAAc,UAAW,YAAa,aAAc,SAAU,cAAe,cAAe,aAAc,cAAe,YAAa,qBAAsB,mBAAoB,QAAS,iBAAkB,YAAa,KAAM,KAAM,WAAY,WAAY,YAAa,KAAM,MAClUC,eAAgB,CAAC,QAAS,4BAA6B,oBAAqB,gBAAiB,KAAM,eAAgB,QAAS,KAAM,KAAM,gBAAiB,aAAc,aAAc,cAAe,aAAc,WAAY,WAAY,YAAa,KAAM,MAC7PzP,OAAQ,CAAC,QAAS,4BAA6B,KAAM,eAAgB,cAAe,cAAe,SAAU,sBAAuB,OAAQ,OAAQ,QAAS,UAAW,WAAY,WAAY,aAChM0P,KAAM,CAAC,QAAS,4BAA6B,SAAU,KAAM,mBAAoB,YAAa,qBAAsB,mBAAoB,QAAS,iBAAkB,QAAS,IAAK,WAAY,WAAY,YAAa,KACtNC,SAAU,CAAC,KAAM,WAAY,WAAY,aACzC,gBAAiB,CAAC,QAAS,IAAK,cAAe,KAAM,QAAS,aAAc,gBAAiB,gBAAiB,WAAY,WAAY,aACtIC,MAAO,CAAC,4BAA6B,KAAM,gBAAiB,gBAAiB,aAAc,aAAc,aAAc,cAAe,aAAc,WAAY,WAAY,aAC5K9L,KAAM,CAAC,QAAS,IAAK,4BAA6B,KAAM,aAAc,UAAW,YAAa,aAAc,SAAU,cAAe,cAAe,aAAc,cAAe,YAAa,aAAc,qBAAsB,mBAAoB,QAAS,iBAAkB,YAAa,WAAY,WAAY,aACtT+L,QAAS,CAAC,QAAS,4BAA6B,SAAU,KAAM,sBAAuB,mBAAoB,eAAgB,sBAAuB,qBAAsB,mBAAoB,QAAS,iBAAkB,UAAW,QAAS,IAAK,gBAAiB,gBAAiB,aAAc,aAAc,aAAc,cAAe,aAAc,WAAY,WAAY,YAAa,KAC9XC,QAAS,CAAC,QAAS,4BAA6B,KAAM,aAAc,UAAW,YAAa,aAAc,SAAU,cAAe,cAAe,aAAc,cAAe,YAAa,SAAU,qBAAsB,mBAAoB,QAAS,iBAAkB,YAAa,WAAY,WAAY,aAChTC,SAAU,CAAC,QAAS,4BAA6B,KAAM,aAAc,UAAW,YAAa,aAAc,SAAU,cAAe,cAAe,aAAc,cAAe,YAAa,SAAU,qBAAsB,mBAAoB,QAAS,iBAAkB,YAAa,WAAY,WAAY,aACjTC,eAAgB,CAAC,QAAS,KAAM,KAAM,4BAA6B,KAAM,KAAM,oBAAqB,gBAAiB,KAAM,IAAK,eAAgB,QAAS,gBAAiB,aAAc,aAAc,cAAe,aAAc,WAAY,WAAY,aAC3PvjC,KAAM,CAAC,QAAS,4BAA6B,SAAU,KAAM,aAAc,UAAW,YAAa,aAAc,SAAU,cAAe,cAAe,aAAc,cAAe,YAAa,qBAAsB,mBAAoB,KAAM,KAAM,QAAS,iBAAkB,YAAa,QAAS,IAAK,WAAY,WAAY,YAAa,KACpVwjC,OAAQ,CAAC,4BAA6B,KAAM,OAAQ,gBAAiB,gBAAiB,aAAc,aAAc,aAAc,cAAe,aAAc,WAAY,WAAY,aACrLr/B,IAAK,CAAC,gBAAiB,gBAAiB,QAAS,MAAO,MAAO,4BAA6B,OAAQ,KAAM,MAAO,MAAO,UAAW,QAAS,SAAU,WAAY,cAAe,YAAa,qBAAsB,mBAAoB,UAAW,iBAAkB,KAAM,gBAAiB,gBAAiB,aAAc,aAAc,aAAc,cAAe,aAAc,WAAY,WAAY,aAC5Ys/B,KAAM,CAAC,QAAS,KAAM,SAAU,QAAS,WAAY,WAAY,aACjEn0B,MAAO,CAAC,KAAM,QAAS,QAAS,OAAQ,WAAY,WAAY,aAChEo0B,IAAK,CAAC,cAAe,QAAS,oBAAqB,mBAAoB,4BAA6B,SAAU,KAAM,UAAW,aAAc,UAAW,UAAW,YAAa,aAAc,SAAU,cAAe,cAAe,aAAc,cAAe,YAAa,WAAY,WAAY,WAAY,SAAU,sBAAuB,qBAAsB,mBAAoB,QAAS,iBAAkB,UAAW,UAAW,QAAS,IAAK,WAAY,WAAY,YAAa,IAAK,cACxeC,OAAQ,CAAC,QAAS,4BAA6B,KAAM,aAAc,UAAW,YAAa,aAAc,SAAU,cAAe,cAAe,aAAc,cAAe,YAAa,qBAAsB,mBAAoB,QAAS,iBAAkB,YAAa,WAAY,WAAY,aACrSC,OAAQ,CAAC,QAAS,4BAA6B,KAAM,aAAc,UAAW,YAAa,aAAc,SAAU,cAAe,cAAe,aAAc,cAAe,YAAa,sBAAuB,QAAS,UAAW,WAAY,WAAY,aAC9PhX,KAAM,CAAC,QAAS,KAAM,KAAM,4BAA6B,KAAM,eAAgB,aAAc,UAAW,YAAa,aAAc,SAAU,cAAe,cAAe,aAAc,cAAe,YAAa,qBAAsB,mBAAoB,SAAU,QAAS,iBAAkB,aAAc,YAAa,IAAK,WAAY,WAAY,YAAa,KACzWiX,SAAU,CAAC,QAAS,4BAA6B,KAAM,eAAgB,SAAU,aAAc,UAAW,YAAa,aAAc,SAAU,cAAe,cAAe,aAAc,cAAe,YAAa,qBAAsB,mBAAoB,UAAW,cAAe,QAAS,iBAAkB,aAAc,gBAAiB,aAAc,aAAc,cAAe,aAAc,WAAY,WAAY,aACtaC,MAAO,CAAC,QAAS,KAAM,QAAS,WAAY,WAAY,aACxDC,KAAM,CAAC,QAAS,KAAM,KAAM,4BAA6B,KAAM,eAAgB,aAAc,UAAW,YAAa,aAAc,SAAU,cAAe,cAAe,aAAc,cAAe,YAAa,qBAAsB,mBAAoB,SAAU,QAAS,iBAAkB,aAAc,IAAK,gBAAiB,aAAc,aAAc,cAAe,aAAc,WAAY,WAAY,YAAa,KACtaC,MAAO,CAAC,QAAS,KAAM,KAAM,4BAA6B,KAAM,eAAgB,aAAc,UAAW,YAAa,aAAc,SAAU,cAAe,cAAe,aAAc,cAAe,YAAa,qBAAsB,mBAAoB,SAAU,QAAS,iBAAkB,aAAc,IAAK,WAAY,WAAY,YAAa,KAC7VC,IAAK,CAAC,QAAS,4BAA6B,SAAU,KAAM,aAAc,UAAW,YAAa,aAAc,SAAU,cAAe,cAAe,aAAc,cAAe,YAAa,qBAAsB,mBAAoB,QAAS,iBAAkB,YAAa,QAAS,IAAK,gBAAiB,gBAAiB,aAAc,aAAc,aAAc,cAAe,aAAc,WAAY,WAAY,YAAa,KAChbC,KAAM,CAAC,4BAA6B,KAAM,sBAAuB,UAAW,aAAc,WAAY,WAAY,YAAa,cAC/HC,MAAO,CAAC,KAAM,KAAM,KAAM,IAAK,KAAM,KAAM,WAAY,WAAY,cAIrEpE,GAA0B,CACxB,GAAK,EACL,UAAY,EACZ,SAAW,EACX,cAAgB,EAChB,QAAU,EACV,UAAY,EACZ,MAAQ,EACR,SAAW,EACX,SAAW,EACX,eAAiB,EACjB,qBAAuB,EACvB,aAAe,EACf,kBAAoB,EACpB,mBAAqB,EACrB,mBAAqB,EACrB,SAAW,EACX,gBAAkB,EAClB,SAAW,EACX,SAAW,EACX,cAAgB,EAChB,UAAY,EACZ,oBAAsB,EACtB,QAAU,EACV,cAAgB,EAChB,QAAU,EACV,MAAQ,EACR,eAAiB,EACjB,GAAK,EACL,OAAS,EACT,UAAY,EACZ,OAAS,EACT,MAAQ,EACR,gBAAkB,EAClB,QAAU,EACV,MAAQ,EACR,iBAAiB,EACjB,MAAQ,EACR,SAAW,EACX,SAAW,EACX,UAAY,EACZ,gBAAkB,EAClB,MAAQ,EACR,MAAQ,EACR,KAAO,EACP,QAAU,EACV,QAAU,EACV,MAAQ,EACR,UAAY,EACZ,MAAQ,EACR,OAAS,EACT,KAAO,GAGTC,GAA4B,CAC1B,sBAAsB,EACtB,kBAAkB,EAClB,aAAa,EACb,aAAa,EACb,MAAQ,EACR,+BAA+B,EAC/B,uBAAuB,EACvB,iBAAiB,EACjB,mBAAmB,EACnB,OAAS,EACT,QAAU,EACV,WAAa,EACb,SAAW,EACX,qBAAqB,EACrB,qBAAqB,EACrB,gBAAgB,EAChB,aAAa,EACb,MAAQ,EACR,QAAU,EACV,eAAe,EACf,iBAAiB,EACjB,eAAe,EACf,oBAAoB,EACpB,aAAa,EACb,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,eAAe,EACf,gCAAgC,EAChC,8BAA8B,EAC9B,mBAAmB,EACnB,SAAW,EACX,kBAAkB,EAClB,kBAAkB,EAClB,cAAc,EACd,cAAc,EACd,gBAAgB,EAChB,MAAQ,EACR,SAAW,EACX,UAAY,EACZ,kBAAkB,EAClB,mBAAmB,EACnB,cAAc,EACd,gBAAgB,EAChB,oBAAoB,EACpB,qBAAqB,EACrB,kBAAkB,EAClB,mBAAmB,EACnB,qBAAqB,EACrB,kBAAkB,EAClB,gBAAgB,EAChB,QAAU,EACV,eAAe,EACf,mBAAmB,EACnB,kBAAkB,EAClB,gBAAgB,EAChB,YAAc,EACd,gBAAgB,EAChB,gBAAgB,GASlBC,GAAc,WACZ,SAASmE,IAPS,IACdC,EAS0E,cAA1D,0BAThBA,EAAM,mBAAkB,OAC5BA,EAAIC,UAQgB,0BAPbD,EAAIE,YAOoCC,kBAAkB1lC,UAA2B+G,GAASs6B,WACjGt6B,GAAS4+B,SAAW5+B,GAASs6B,gBACtBt6B,GAASs6B,SAChBt6B,GAAS6+B,YAAc7+B,GAASu6B,mBACzBv6B,GAASu6B,YAChBv6B,GAAS8+B,aAAe9+B,GAASw6B,oBAC1Bx6B,GAASw6B,aAChBx6B,GAAS++B,SAAW/+B,GAAS+8B,gBACtB/8B,GAAS+8B,SAEpB,CAMA,OAJAwB,EAAYtsB,UAAU+sB,uBAAyB,SAAgC/lC,EAAUi9B,GACvF,OAAO+I,GAAqBhmC,IAAaimC,GAAuBhJ,IAAkBl2B,GAAS/G,KAA4D,IAA/C+G,GAAS/G,GAAU+B,QAAQk7B,EACrI,EAEOqI,CACT,CArBc,IAwBT,IAAIv+B,GAAWi6B,GACXgF,GAAuB/E,GACvBgF,GAAyB/E,GACzBoE,GAAcnE,IAAe,WACtC,SAAS+E,IAET,CAMA,OAJAA,EAASltB,UAAU+sB,uBAAyB,WAC1C,OAAO,CACT,EAEOG,CACT,CAVwC,GAY7BC,IAAmBluB,EAAQD,EAAW,WAC/C,SAASmuB,EAAgBxiB,EAAW2V,EAAc6C,EAAcgF,EAAaiF,GAG3E5qB,KAAKmI,UAAYA,EACjBnI,KAAK8d,aAAeA,EACpB9d,KAAK2gB,aAAeA,EACpB3gB,KAAK2lB,YAAcA,EACnB3lB,KAAK4qB,OAASA,EAEd5qB,KAAK6qB,SAAW,GAChB7qB,KAAK4gB,OAAS,YAAqB,mBACrC,CAgKA,OA9JA+J,EAAgBntB,UAAU+C,YAAc,SAAqB3C,EAAKyC,GAChE,IACIP,EADAgrB,EAAkBltB,EAAIslB,cAG1B,OAAI4H,GAAmBzqB,KAAgByqB,EAC9BA,EAAgBzqB,KAGzBP,EAAWE,KAAK+qB,uBAAuBntB,EAAKyC,IAE9B2gB,kBACYpzB,IAApBk9B,IACFA,EAAkB9qB,KAAKgrB,2BAA2BptB,IAGpDktB,EAAgBzqB,GAAgBP,GAG3BA,EACT,EAEA6qB,EAAgBntB,UAAUwtB,2BAA6B,SAAoCptB,GACzF,OAAOA,EAAIslB,eAAiBljB,KAAKirB,sBAAsBrtB,EACzD,EAEA+sB,EAAgBntB,UAAUytB,sBAAwB,SAA+BrtB,GAC/E,IAAI5L,EAAQ,CAAC,EAWb,OATKsY,QAAQlN,eAAeQ,EAAK,gBAAiB,CAChDX,YAAY,EACZC,cAAc,EACdC,UAAU,EACVnL,MAAOA,KAEPgO,KAAK4gB,OAAOvW,KAAK,iCAAkCzM,GAG9C5L,CACT,EAEA24B,EAAgBntB,UAAU0tB,WAAa,SAAoBC,GACzDnrB,KAAK6qB,SAASjhC,KAAKuhC,EACrB,EAEAR,EAAgBntB,UAAU4tB,mBAAqB,SAA4BxtB,EAAKyC,EAAcrD,GAC5F,IAAK,IAAI1F,EAAI,EAAGsI,EAAKI,KAAK6qB,SAAS1gC,OAAQmN,EAAIsI,EAAItI,IAAK,CACtD,IACIwI,EADUE,KAAK6qB,SAASvzB,GACLiJ,YAAY3C,EAAKyC,EAAcrD,GACtD,GAAI8C,EACF,OAAOA,CAEX,CACA,OAAO,IACT,EAEA6qB,EAAgBntB,UAAUutB,uBAAyB,SAAgCntB,EAAKyC,GACtF,IAAIrD,EACA+iB,OAAU,EACVsL,OAAc,EAElB,KAAMztB,aAAexS,QACnB,OAAO,IAAI01B,GAAkBljB,EAAKyC,GAGpC,GAAIzC,aAAe,aAAa,CAC9B,GAAqB,UAAjByC,EACF,OAAO,IAAIwkB,GAAcjnB,GAE3B,GAAqB,UAAjByC,GAA6C,QAAjBA,EAC9B,OAAO,IAAI0hB,GAAcnkB,EAAKyC,GAGhC,GADA0f,EAAU/f,KAAK8d,aAAa4B,kBAAkB9hB,EAAKyC,GAC9B,UAAjBA,GAA0D,WAA9BzC,EAAIuhB,QAAQ16B,cAC1C,OAAO,IAAIi/B,GAAoB9lB,EAAKmiB,EAAS/f,MAE/C,GAAqB,YAAjBK,GAA4D,UAA9BzC,EAAIuhB,QAAQ16B,cAC5C,OAAO,IAAIm+B,GAAgBhlB,EAAKmiB,EAAS/f,MAE3C,GAAI+f,EACF,OAAO,IAAIwC,GAAuB3kB,EAAKyC,EAAc0f,GAGvD,GADAsL,EAAc,eAAe/I,KAAKjiB,GAEhC,OAAO,IAAImhB,GAAuB5jB,EAAKyC,EAAcgrB,EAAY,IAEnE,GAAqB,SAAjBhrB,IAA4BzC,aAAe,cAAeA,aAAe,kBAAmB,sBAAsBjb,KAAK0d,IAAiBzC,aAAe,iBAAkBoC,KAAK2lB,YAAY4E,uBAAuB3sB,EAAIpZ,SAAU6b,GACjO,OAAO,IAAIyhB,GAAsBlkB,EAAKyC,EAE1C,CAIA,GA5aG,SAAiCrD,GACtC,SAAUA,GAAcA,EAAWrT,KAAOqT,EAAWrT,IAAIy7B,aAC3D,CA0aQkG,CAFJtuB,EAAa5R,OAAOmgC,sBAAsB3tB,EAAKyC,IAG7C,OApXC,SAAgCzC,EAAKyC,EAAcrD,EAAYsD,GACpE,IAAI8kB,EAAepoB,EAAWrT,IAAIy7B,aAClC,KAAMA,aAAwBC,IAAqB,CAEjD,IADA,IAAI/tB,EAAI8tB,EAAaj7B,OACdmN,KACL8tB,EAAa9tB,GAAKgJ,EAAgBsqB,OAAOlX,MAAM0R,EAAa9tB,IAE9D8tB,EAAepoB,EAAWrT,IAAIy7B,aAAe,IAAIC,GAAmBhlB,EAAc+kB,EACpF,CAEA,IAAIjmB,EAAQ,CAAEH,eAAgBpB,EAAK0B,gBAAiBP,EAAsBnB,IAC1E,OAAO,IAAIkG,GAAmB3E,EAAOimB,EAAc9kB,EACrD,CAwWakrB,CAAuB5tB,EAAKyC,EAAcrD,EAAYgD,MAG/D,GAAIhD,EAAY,CACd,IAAIyuB,EAAyBzuB,EAAWrT,KAAOqT,EAAWnT,IAC1D,GAAI4hC,EACF,OAAIA,EAAuBlrB,YAClBkrB,EAAuBlrB,YAAY3C,GAGtBoC,KAAKorB,mBAAmBxtB,EAAKyC,EAAcrD,IAI1D,IAAIyjB,GAAmBzgB,KAAK2gB,aAAc/iB,EAAKyC,EAE1D,CAEA,OAAIzC,aAAevT,MACI,WAAjBgW,EACKL,KAAKU,iBAAiB9C,GAAKoL,oBAG7B,IAAIyX,GAAmBzgB,KAAK2gB,aAAc/iB,EAAKyC,GAC7CzC,aAAe/U,IACH,SAAjBwX,EACKL,KAAK0rB,eAAe9tB,GAAKoL,oBAG3B,IAAIyX,GAAmBzgB,KAAK2gB,aAAc/iB,EAAKyC,GAC7CzC,aAAe7U,IACH,SAAjBsX,EACKL,KAAK2rB,eAAe/tB,GAAKoL,oBAG3B,IAAIyX,GAAmBzgB,KAAK2gB,aAAc/iB,EAAKyC,GAGjD,IAAI4gB,GAAejhB,KAAKmI,UAAWvK,EAAKyC,EACjD,EAEAsqB,EAAgBntB,UAAUouB,YAAc,SAAqBhuB,EAAKyC,GAChE,GAAIzC,aAAe,aAAa,CAC9B,GAAqB,UAAjByC,GAA6C,UAAjBA,GAA6C,QAAjBA,GAA2C,UAAjBA,IAA2D,UAA9BzC,EAAIuhB,QAAQ16B,eAA2D,WAA9BmZ,EAAIuhB,QAAQ16B,gBAAgD,YAAjB4b,GAA4D,UAA9BzC,EAAIuhB,QAAQ16B,eAA8C,UAAjB4b,GAA0D,UAA9BzC,EAAIuhB,QAAQ16B,eAA6B,aAAa69B,KAAKjiB,GACnW,OAAOL,KAAKO,YAAY3C,EAAKyC,GAE/B,GAAI,sBAAsB1d,KAAK0d,IAAiBzC,aAAe,iBAAkBoC,KAAK2lB,YAAY4E,uBAAuB3sB,EAAIpZ,SAAU6b,IAA+C,QAA9BzC,EAAIuhB,QAAQ16B,eAA4C,QAAjB4b,GAAwD,MAA9BzC,EAAIuhB,QAAQ16B,eAA0C,SAAjB4b,EAC5P,OAAOuhB,EAEX,CACA,OAAOf,EACT,EAEA8J,EAAgBntB,UAAUkD,iBAAmB,SAA0BD,GACrE,OArtHJ,SAA2B0H,EAAW1H,GACpC,OAAOkK,GAAoBE,IAAI1C,EAAW1H,EAC5C,CAmtHWorB,CAAkB7rB,KAAKmI,UAAW1H,EAC3C,EAEAkqB,EAAgBntB,UAAUkuB,eAAiB,SAAwBtpC,GACjE,OAxtDJ,SAAyB+lB,EAAW/lB,GAClC,OAAO+5B,GAAkBtR,IAAI1C,EAAW/lB,EAC1C,CAstDW0pC,CAAgB9rB,KAAKmI,UAAW/lB,EACzC,EAEAuoC,EAAgBntB,UAAUmuB,eAAiB,SAAwB9hC,GACjE,OA4iBJ,SAAyBse,EAAWte,GAClC,OAAOkiC,GAAkBlhB,IAAI1C,EAAWte,EAC1C,CA9iBWmiC,CAAgBhsB,KAAKmI,UAAWte,EACzC,EAEO8gC,CACT,CA7KiD,GA6K5CnuB,EAASyvB,OAAS,CAAC,IAAWlN,GAAciB,GAAc8J,GAAatW,IAAS/W,GAc1EyvB,GAAoB,WAC7B,SAASA,EAAkB5rB,EAAiB6rB,EAAgBC,EAAkBC,EAAMnoB,EAAiB5O,GAGnG0K,KAAKM,gBAAkBA,EACvBN,KAAKmsB,eAAiBA,EACtBnsB,KAAKosB,iBAAmBA,EACxBpsB,KAAKqsB,KAAOA,EACZrsB,KAAKkE,gBAAkBA,EACvBlE,KAAK1K,UAAYA,EACjB0K,KAAKssB,UAAW,CAClB,CAMA,OAJAJ,EAAkB1uB,UAAU+uB,cAAgB,SAAuBzlC,GACjE,OAAO,IAAI0lC,GAAQxsB,KAAKM,gBAAiBN,KAAKosB,iBAAkBtlC,EAAQkZ,KAAKmsB,eAAgBnsB,KAAKqsB,KAAMrsB,KAAKkE,gBAC/G,EAEOgoB,CACT,CAlB+B,GAoBpBM,GAAoB1rB,GAAe2rB,CAAO/vB,EAAW,WAC9D,SAAS8vB,EAAQlsB,EAAiB8rB,EAAkBtlC,EAAQqlC,EAAgBE,EAAMnoB,GAGhFlE,KAAKM,gBAAkBA,EACvBN,KAAKosB,iBAAmBA,EACxBpsB,KAAKlZ,OAASA,EACdkZ,KAAKmsB,eAAiBA,EACtBnsB,KAAKqsB,KAAOA,EACZrsB,KAAKkE,gBAAkBA,CACzB,CAyGA,OAvGAsoB,EAAQhvB,UAAUkvB,aAAe,SAAsB16B,GACrDgO,KAAK2sB,eAAetoB,SAASrS,EAAOgO,KAAKlZ,OAAQkZ,KAAKmsB,eACxD,EAEAK,EAAQhvB,UAAUovB,aAAe,SAAsB56B,GACrDgO,KAAKosB,iBAAiB/gC,OAAO2U,KAAK6sB,OAAQ76B,EAAOgO,KAAKkE,gBACxD,EAEAsoB,EAAQhvB,UAAUQ,KAAO,SAAc+D,EAASkB,EAAUC,GACxD,GAAKlD,KAAK8sB,QAAV,CAGA,GAAI/qB,IAAYrD,EAWd,OAVAwE,EAAWlD,KAAK2sB,eAAexoB,SAASnE,KAAKlZ,OAAQkZ,KAAKmsB,iBAC1DlpB,EAAWjD,KAAKosB,iBAAiBhoB,SAASpE,KAAK6sB,OAAQ7sB,KAAKkE,oBAC3ChB,GACflD,KAAK0sB,aAAazpB,QAEhBjD,KAAKqsB,OAASjZ,GAAYC,UAC5BrT,KAAKG,WACLH,KAAKosB,iBAAiB1qB,QAAQ1B,KAAMA,KAAK6sB,QACzC7sB,KAAKW,WAAU,KAInB,GAAIoB,IAAYtD,EAMhB,MAAM,IAAIuM,MAAM,2BAA6BjJ,GALvCkB,IAAajD,KAAKosB,iBAAiBhoB,SAASpE,KAAK6sB,OAAQ7sB,KAAKkE,kBAChElE,KAAK4sB,aAAa3pB,EAhBtB,CAqBF,EAEAupB,EAAQhvB,UAAUkO,KAAO,SAAcmhB,GACrC,GAAI7sB,KAAK8sB,QAAS,CAChB,GAAI9sB,KAAK6sB,SAAWA,EAClB,OAEF7sB,KAAK+L,QACP,CACA/L,KAAK8sB,SAAU,EACf9sB,KAAK6sB,OAASA,EAEV7sB,KAAKosB,iBAAiB1gB,MACxB1L,KAAKosB,iBAAiB1gB,KAAK1L,KAAM6sB,EAAQ7sB,KAAKkE,iBAGhD,IAAImoB,EAAOrsB,KAAKqsB,KAChB,IAAKrsB,KAAK2sB,eAAgB,CACxB,IAAII,EAASV,IAASjZ,GAAYG,QAAU8Y,IAASjZ,GAAY7G,SAAW,cAAgB,cAC5FvM,KAAK2sB,eAAiB3sB,KAAKM,gBAAgBysB,GAAQ/sB,KAAKlZ,OAAQkZ,KAAKmsB,eACvE,CAKA,GAHI,SAAUnsB,KAAK2sB,gBACjB3sB,KAAK2sB,eAAejhB,OAElB1L,KAAKqsB,OAASjZ,GAAY7G,SAAU,CACtC,IAAIva,EAAQgO,KAAKosB,iBAAiBhoB,SAASyoB,EAAQ7sB,KAAKkE,iBACxDlE,KAAK0sB,aAAa16B,EACpB,CAEIq6B,IAASjZ,GAAYC,UAEdgZ,IAASjZ,GAAY9G,OAC9B1K,EAAsB5B,MACbqsB,IAASjZ,GAAYG,QAC9BvT,KAAKosB,iBAAiB1qB,QAAQ1B,KAAM6sB,GACpC7sB,KAAK2sB,eAAezsB,UAAUzB,EAAeuB,OACpCqsB,IAASjZ,GAAY7G,UAC9BvM,KAAK2sB,eAAezsB,UAAUzB,EAAeuB,MAEjD,EAEAwsB,EAAQhvB,UAAUuO,OAAS,WACpB/L,KAAK8sB,UAGV9sB,KAAK8sB,SAAU,EACX9sB,KAAKosB,iBAAiBrgB,QACxB/L,KAAKosB,iBAAiBrgB,OAAO/L,KAAMA,KAAK6sB,QAE1C7sB,KAAK6sB,OAAS,KACV,WAAY7sB,KAAK2sB,gBACnB3sB,KAAK2sB,eAAe5gB,SAElB/L,KAAK2sB,eAAe9rB,aACtBb,KAAK2sB,eAAe9rB,YAAYpC,EAAeuB,MAEjDA,KAAKW,WAAU,GACjB,EAEA6rB,EAAQhvB,UAAUkE,QAAU,SAAiB0C,GAC3C,GAAKpE,KAAK8sB,QAAV,CAGA,GAAI1oB,EAAU,CACZ,IAAIpS,EAAQgO,KAAKosB,iBAAiBhoB,SAASpE,KAAK6sB,OAAQ7sB,KAAKkE,iBAC7DlE,KAAK0sB,aAAa16B,EACpB,CACAgO,KAAKosB,iBAAiB1qB,QAAQ1B,KAAMA,KAAK6sB,OALzC,CAMF,EAEOL,CACT,CApHgE,KAoHxD9vB,EAEGswB,GAAiB,WAC1B,SAASA,EAAe1sB,EAAiB6rB,EAAgBC,EAAkBloB,GAGzElE,KAAKM,gBAAkBA,EACvBN,KAAKmsB,eAAiBA,EACtBnsB,KAAKosB,iBAAmBA,EACxBpsB,KAAKkE,gBAAkBA,CACzB,CAMA,OAJA8oB,EAAexvB,UAAU+uB,cAAgB,SAAuBzlC,GAC9D,OAAO,IAAImmC,GAAKjtB,KAAKM,gBAAiBN,KAAKosB,iBAAkBtlC,EAAQkZ,KAAKmsB,eAAgBnsB,KAAKkE,gBACjG,EAEO8oB,CACT,CAf4B,GAiBjBC,GAAO,WAChB,SAASA,EAAK3sB,EAAiB8rB,EAAkBtlC,EAAQqlC,EAAgBjoB,GAGvElE,KAAKosB,iBAAmBA,EACxBpsB,KAAKlZ,OAASA,EACdkZ,KAAKmsB,eAAiB7rB,EAAgBC,YAAYzZ,EAAQqlC,GAC1DnsB,KAAKkE,gBAAkBA,CACzB,CA+CA,OA7CA+oB,EAAKzvB,UAAU0vB,WAAa,SAAoBC,GAC9C,IAAI7tB,EAAkBU,KAAK6sB,OAAOvtB,gBAClClU,OAAOC,OAAOiU,EAAiB6tB,GAC/B7tB,EAAgB6tB,OAASA,EACzB,IACInkC,EAASgX,KAAKosB,iBAAiBhoB,SAASpE,KAAK6sB,OAAQ7sB,KAAKkE,iBAD3C,GAGnB,IAAK,IAAIkpB,YADF9tB,EAAgB6tB,OACNA,SACR7tB,EAAgB8tB,GAEzB,OAAOpkC,CACT,EAEAikC,EAAKzvB,UAAUkO,KAAO,SAAcmhB,GAClC,IAAIQ,EAAUrtB,KAEd,GAAIA,KAAK8sB,QAAS,CAChB,GAAI9sB,KAAK6sB,SAAWA,EAClB,OAEF7sB,KAAK+L,QACP,CACA/L,KAAK8sB,SAAU,EACf9sB,KAAK6sB,OAASA,EAEV7sB,KAAKosB,iBAAiB1gB,MACxB1L,KAAKosB,iBAAiB1gB,KAAK1L,KAAM6sB,EAAQ7sB,KAAKkE,iBAEhDlE,KAAKmsB,eAAe9nB,UAAS,SAAU8oB,GACrC,OAAOE,EAAQH,WAAWC,EAC5B,GACF,EAEAF,EAAKzvB,UAAUuO,OAAS,WACjB/L,KAAK8sB,UAGV9sB,KAAK8sB,SAAU,EACX9sB,KAAKosB,iBAAiBrgB,QACxB/L,KAAKosB,iBAAiBrgB,OAAO/L,KAAMA,KAAK6sB,QAE1C7sB,KAAK6sB,OAAS,KACd7sB,KAAKmsB,eAAe9nB,SAAS,MAC/B,EAEO4oB,CACT,CAxDkB,GA0DPK,GAAyB,WAClC,SAASA,EAAuBlkC,GAG9B4W,KAAK5W,KAAOA,CACd,CAkBA,OAhBAkkC,EAAuBC,WAAa,SAAoBnkC,GACtD,GAAIA,EAAKokC,SAAS,kBAChB,OAAO,IAAIF,EAAuB3uB,EAAUvV,EAAKqkC,UAAU,EAAGrkC,EAAKe,OAAS,KAEhF,EAEAmjC,EAAuB9vB,UAAUkwB,WAAa,SAAoBC,EAAW7mC,GAC3EkZ,KAAKpU,SAAW+hC,EAAUhkC,IAAI7C,EAChC,EAEAwmC,EAAuB9vB,UAAUowB,SAAW,SAAkBC,EAAUzkC,GACtEykC,EAASC,uBAAuB1kC,GAAQ4W,KAAK5W,KAAM4W,KAAKpU,SAC1D,EAEA0hC,EAAuB9vB,UAAUuwB,KAAO,SAAcJ,EAAW7mC,GAAS,EAEnEwmC,CACT,CAxBoC,GA0B7B,SAASU,GAAeC,GAC7B,QAAqBrgC,IAAjBqgC,GAAsD,iBAAjBA,EACvC,OAAO,SAAUnnC,GACf,YAAgB,cAAmB,IAAIwmC,GAAuBW,GAAennC,EAC/E,EAGF,YAAgB,cAAmB,IAAIwmC,GAA0BW,EACnE,CAEO,IAAIC,GAA0B,WACnC,SAASA,EAAwB9kC,GAG/B4W,KAAK5W,KAAOA,CACd,CAkBA,OAhBA8kC,EAAwBX,WAAa,SAAoBnkC,GACvD,GAAIA,EAAKokC,SAAS,mBAChB,OAAO,IAAIU,EAAwBvvB,EAAUvV,EAAKqkC,UAAU,EAAGrkC,EAAKe,OAAS,KAEjF,EAEA+jC,EAAwB1wB,UAAUkwB,WAAa,SAAoBC,EAAW7mC,GAC5EkZ,KAAKpU,SAAW+hC,EAAUhkC,IAAI7C,EAChC,EAEAonC,EAAwB1wB,UAAUowB,SAAW,SAAkBC,EAAUzkC,GACvEykC,EAASM,wBAAwB/kC,GAAQ4W,KAAK5W,KAAM4W,KAAKpU,SAC3D,EAEAsiC,EAAwB1wB,UAAUuwB,KAAO,SAAcJ,EAAW7mC,GAAS,EAEpEonC,CACT,CAxBqC,GA0B9B,SAASE,GAAgBH,GAC9B,QAAqBrgC,IAAjBqgC,GAAsD,iBAAjBA,EACvC,OAAO,SAAUnnC,GACf,YAAgB,cAAmB,IAAIonC,GAAwBD,GAAennC,EAChF,EAGF,YAAgB,cAAmB,IAAIonC,GAA2BD,EACpE,CAEO,IAAII,GAAqB,WAC9B,SAASA,EAAmBvQ,EAAcK,EAAaiO,EAAkB1N,EAAoB4P,EAAgBpqB,GAG3GlE,KAAK8d,aAAeA,EACpB9d,KAAKme,YAAcA,EACnBne,KAAKosB,iBAAmBA,EACxBpsB,KAAK0e,mBAAqBA,EAC1B1e,KAAKssB,UAAW,EAChBtsB,KAAKsuB,eAAiBA,EACtBtuB,KAAKkE,gBAAkBA,CACzB,CAMA,OAJAmqB,EAAmB7wB,UAAU+uB,cAAgB,SAAuBzlC,GAClE,OAAO,IAAIynC,GAASvuB,KAAK8d,aAAc9d,KAAKme,YAAane,KAAK0e,mBAAoB1e,KAAKosB,iBAAkBtlC,EAAQkZ,KAAKsuB,eAAgBtuB,KAAKkE,gBAC7I,EAEOmqB,CACT,CAlBgC,GAoBrBE,GAAW,WACpB,SAASA,EAASzQ,EAAcK,EAAaO,EAAoB0N,EAAkBtlC,EAAQwnC,EAAgBpqB,GAGzGlE,KAAK8d,aAAeA,EACpB9d,KAAKme,YAAcA,EACnBne,KAAK0e,mBAAqBA,EAC1B1e,KAAKosB,iBAAmBA,EACxBpsB,KAAKlZ,OAASA,EACdkZ,KAAKsuB,eAAiBA,EACtBtuB,KAAKkE,gBAAkBA,CACzB,CA+CA,OA7CAqqB,EAAS/wB,UAAU0vB,WAAa,SAAoBtQ,GAClD,IAAItd,EAAkBU,KAAK6sB,OAAOvtB,gBAClCA,EAAgB6tB,OAASvQ,EACzB,IACI5zB,EAASgX,KAAKosB,iBAAiBhoB,SAASpE,KAAK6sB,OAAQ7sB,KAAKkE,iBAD3C,GAMnB,cAJO5E,EAAgB6tB,QACR,IAAXnkC,GAAmBgX,KAAKsuB,gBAC1B1R,EAAM0R,iBAEDtlC,CACT,EAEAulC,EAAS/wB,UAAUggB,YAAc,SAAqBZ,GACpD5c,KAAKktB,WAAWtQ,EAClB,EAEA2R,EAAS/wB,UAAUkO,KAAO,SAAcmhB,GACtC,GAAI7sB,KAAK8sB,QAAS,CAChB,GAAI9sB,KAAK6sB,SAAWA,EAClB,OAEF7sB,KAAK+L,QACP,CACA/L,KAAK8sB,SAAU,EACf9sB,KAAK6sB,OAASA,EAEV7sB,KAAKosB,iBAAiB1gB,MACxB1L,KAAKosB,iBAAiB1gB,KAAK1L,KAAM6sB,EAAQ7sB,KAAKkE,iBAEhDlE,KAAKwuB,SAAWxuB,KAAK8d,aAAarpB,iBAAiBuL,KAAKlZ,OAAQkZ,KAAKme,YAAane,KAAMA,KAAK0e,oBAAoB,EACnH,EAEA6P,EAAS/wB,UAAUuO,OAAS,WACrB/L,KAAK8sB,UAGV9sB,KAAK8sB,SAAU,EACX9sB,KAAKosB,iBAAiBrgB,QACxB/L,KAAKosB,iBAAiBrgB,OAAO/L,KAAMA,KAAK6sB,QAE1C7sB,KAAK6sB,OAAS,KACd7sB,KAAKwuB,SAAShqB,UACdxE,KAAKwuB,SAAW,KAClB,EAEOD,CACT,CA3DsB,GA6DtB,SAASE,GAAM5rC,GACb,IAAI6rC,EAAK7rC,EAAQ6rC,GAEjB,QAAW9gC,IAAP8gC,EACF,MAAM,IAAI1jB,MAAM,iDAAmDnoB,EAAQs8B,QAAU,MAGvF,OAAOuP,CACT,CAEO,IAAIC,GAAiB,WAC1B,SAASA,EAAevC,EAAkBwC,EAAS1qB,GAGjDlE,KAAKosB,iBAAmBA,EACxBpsB,KAAK4uB,QAAUA,EACf5uB,KAAKkE,gBAAkBA,EACvBlE,KAAKssB,UAAW,CAClB,CA2BA,OAzBAqC,EAAenxB,UAAU+uB,cAAgB,SAAuBzlC,GAC9D,OAAO,IAAI+nC,GAAW7uB,KAAKosB,iBAAkBuC,EAAeG,UAAUhoC,EAAQkZ,KAAK4uB,SAAU5uB,KAAKkE,gBACpG,EAEAyqB,EAAeG,UAAY,SAAmBjsC,EAAS+rC,GACrD,OAAQA,GACN,IAAK,UACH,OAAO/rC,EACT,IAAK,aACH,OAAO4rC,GAAM5rC,GAASksC,WACxB,IAAK,aACH,OAAON,GAAM5rC,GAASksC,WAAWC,UACnC,IAAK,OACH,OAAOP,GAAM5rC,GAASksC,WAAWnF,KACnC,QACE,IAAI9iC,EAAS2nC,GAAM5rC,GAAS+rC,GAE5B,QAAehhC,IAAX9G,EACF,MAAM,IAAIkkB,MAAM,2BAA6B4jB,EAAU,sDAGzD,OAAO9nC,EAAOkoC,UAEpB,EAEOL,CACT,CApC4B,GAsCxBE,GAAa,WACf,SAASA,EAAWzC,EAAkBtlC,EAAQod,GAG5ClE,KAAKosB,iBAAmBA,EACxBpsB,KAAKlZ,OAASA,EACdkZ,KAAKkE,gBAAkBA,CACzB,CA+BA,OA7BA2qB,EAAWrxB,UAAUkO,KAAO,SAAcmhB,GACxC,GAAI7sB,KAAK8sB,QAAS,CAChB,GAAI9sB,KAAK6sB,SAAWA,EAClB,OAEF7sB,KAAK+L,QACP,CACA/L,KAAK8sB,SAAU,EACf9sB,KAAK6sB,OAASA,EACV7sB,KAAKosB,iBAAiB1gB,MACxB1L,KAAKosB,iBAAiB1gB,KAAK1L,KAAM6sB,EAAQ7sB,KAAKkE,iBAEhDlE,KAAKosB,iBAAiB/gC,OAAO2U,KAAK6sB,OAAQ7sB,KAAKlZ,OAAQkZ,KAAKkE,gBAC9D,EAEA2qB,EAAWrxB,UAAUuO,OAAS,WACvB/L,KAAK8sB,UAGV9sB,KAAK8sB,SAAU,EACX9sB,KAAKosB,iBAAiBhoB,SAASpE,KAAK6sB,OAAQ7sB,KAAKkE,mBAAqBlE,KAAKlZ,QAC7EkZ,KAAKosB,iBAAiB/gC,OAAO2U,KAAK6sB,OAAQ,KAAM7sB,KAAKkE,iBAEnDlE,KAAKosB,iBAAiBrgB,QACxB/L,KAAKosB,iBAAiBrgB,OAAO/L,KAAMA,KAAK6sB,QAE1C7sB,KAAK6sB,OAAS,KAChB,EAEOgC,CACT,CAvCiB,GAyCbI,GAAkB,CACpBrjB,iBAAkB,SAA0BxiB,GAC1C,OAAO,IACT,EACAijB,gBAAiB,SAAyBjjB,GACxC,OAAO,IACT,GAGS8lC,IAAiBtyB,EAASD,EAAW,WAC9C,SAASuyB,EAAc5uB,EAAiBsqB,GAGtC5qB,KAAKM,gBAAkBA,EACvBN,KAAK4qB,OAASA,CAChB,CA+DA,OA7DAsE,EAAc1xB,UAAU2xB,wBAA0B,SAAiChD,EAAgBC,GACjG,IAAIC,EAAOniC,UAAUC,OAAS,QAAsByD,IAAjB1D,UAAU,GAAmBA,UAAU,GAAKkpB,GAAY9G,OACvFpI,EAAkBha,UAAUC,OAAS,QAAsByD,IAAjB1D,UAAU,GAAmBA,UAAU,GAAK+kC,GAE1F,OAAO,IAAI/C,GAAkBlsB,KAAKM,gBAAiB6rB,EAAgBnsB,KAAK4qB,OAAOlX,MAAM0Y,GAAmBC,EAAMnoB,EAChH,EAEAgrB,EAAc1xB,UAAU4xB,iBAAmB,SAA0BxxB,EAAKyC,GACxE,IAAIgvB,EAAUrvB,KAEd,MAAO,CACLE,UAAW,SAAmBod,GAC5B,IAAIxd,EAAWuvB,EAAQ/uB,gBAAgBC,YAAY3C,EAAKyC,GAExD,OADAP,EAASI,UAAUod,GACZ,CACL9Y,QAAS,WACP,OAAO1E,EAASe,YAAYyc,EAC9B,EAEJ,EAEJ,EAEA4R,EAAc1xB,UAAU8xB,mBAAqB,SAA4BlnB,GACvE,IAAImnB,EAAUvvB,KAEd,MAAO,CACLE,UAAW,SAAmBod,GAC5B,IAAIxd,OAAW,EACf,GAAIsI,aAAsB/d,MACxByV,EAAWyvB,EAAQjvB,gBAAgBI,iBAAiB0H,QAC/C,GAAIA,aAAsBvf,IAC/BiX,EAAWyvB,EAAQjvB,gBAAgBorB,eAAetjB,OAC7C,MAAIA,aAAsBrf,KAG/B,MAAM,IAAIiiB,MAAM,wDAFhBlL,EAAWyvB,EAAQjvB,gBAAgBqrB,eAAevjB,EAGpD,CAEA,OADAtI,EAASI,UAAUod,GACZ,CACL9Y,QAAS,WACP,OAAO1E,EAASe,YAAYyc,EAC9B,EAEJ,EAEJ,EAEA4R,EAAc1xB,UAAUgyB,mBAAqB,SAA4BxwB,EAAgBiF,GACvF,IAAI9E,EAAQ,CAAEH,eAAgBA,EAAgBM,gBAAiBP,EAAsBC,IACrF,OAAO,IAAI8E,GAAmB3E,EAAOa,KAAK4qB,OAAOlX,MAAMzP,GAAajE,KAAKM,gBAAiB2uB,GAC5F,EAEAC,EAAc1xB,UAAUmX,gBAAkB,SAAyB1Q,GACjE,OAAOjE,KAAK4qB,OAAOlX,MAAMzP,EAC3B,EAEAirB,EAAc1xB,UAAUiyB,gBAAkB,SAAyBtE,GACjEnrB,KAAKM,gBAAgB4qB,WAAWC,EAClC,EAEO+D,CACT,CAtEgD,GAsE3CvyB,EAASsvB,OAAS,CAACtB,GAAiBnX,IAAS5W,GAE9C8yB,GAAW3mC,IAAIyU,UAMfuuB,GAAoB,SAAU4D,GAGhC,SAAS5D,EAAkB5jB,EAAWte,GAGpC,OAAOiU,EAA2BkC,KAAM2vB,EAAuB3xB,KAAKgC,KAAMmI,EAAWte,GACvF,CAgEA,OAtEAqU,EAAU6tB,EAAmB4D,GAQ7B5D,EAAkBlhB,IAAM,SAAc1C,EAAWte,GAO/C,MANM,qBAAsBA,GAC1BygB,QAAQlN,eAAevT,EAAK,mBAAoB,CAC9CmI,MAAO+5B,EAAkBztB,OAAO6J,EAAWte,GAC3CoT,YAAY,EAAOC,cAAc,IAG9BrT,EAAI+lC,gBACb,EAEA7D,EAAkBztB,OAAS,SAAgB6J,EAAWte,GACpD,IAAIiW,EAAW,IAAIisB,EAAkB5jB,EAAWte,GAE5CyyB,EAAQoT,GA8CZ,OA7CIpT,EAAMnzB,MAAQU,EAAIV,KAAOmzB,EAAMC,SAAW1yB,EAAI0yB,QAAUD,EAAME,QAAU3yB,EAAI2yB,QAC9EF,EAAQ,CACNnzB,IAAKU,EAAIV,IACTozB,OAAQ1yB,EAAI0yB,OACZC,MAAO3yB,EAAI2yB,QAIf3yB,EAAIV,IAAM,WACR,IACI0mC,EAAUhmC,EAAIuf,KACdoB,EAAmB8R,EAAMnzB,IAAI4e,MAAMle,EAAKK,WAS5C,OAReL,EAAIuf,OAASymB,GAE1B/vB,EAAS0I,gBAAgB,CACvBG,KANO,MAOPE,OAAQhf,EACRmI,MAAO3H,MAAMylC,KAAKjmC,GAAKogB,QAGpBO,CACT,EAEA3gB,EAAI0yB,OAAS,WACX,IAAIE,EAAW5yB,EAAIJ,IAAIS,UAAU,IAC7BsgB,EAAmB8R,EAAMC,OAAOxU,MAAMle,EAAKK,WAQ/C,OAPIuyB,GACF3c,EAAS0I,gBAAgB,CACvBG,KAAM,SACNE,OAAQhf,EACRmI,MAAO9H,UAAU,KAGdsgB,CACT,EAEA3gB,EAAI2yB,MAAQ,WACV,IAAIhS,EAAmB8R,EAAME,MAAMzU,MAAMle,EAAKK,WAK9C,OAJA4V,EAAS0I,gBAAgB,CACvBG,KAAM,QACNE,OAAQhf,IAEH2gB,CACT,EAEO1K,CACT,EAEOisB,CACT,CAxEwB,CAwEtB9jB,IAEK,SAAS8nB,GAAWC,EAAgBvjC,EAAKuQ,GAC9C,SAASizB,EAAKnpC,EAAQ2F,EAAKuQ,EAAYwiB,GACrC,IAAI0Q,OAA2BtiC,IAARnB,EACnByjC,IACFppC,EAASA,EAAO0W,UAChB/Q,EAAwB,iBAAX+yB,EAAsBA,EAASA,EAAOp2B,MAGrD,IAAI+mC,EAAoB,IAAM1jC,EAC1B2jC,EAA0B,CAC5BlzB,cAAc,EACdD,YAAY,EACZE,UAAU,GAGRkzB,EAAe7Q,GAAUA,EAAO8Q,eAAiB7jC,EAAM,UAuC3D,GArCIuQ,EACoC,mBAA3BA,EAAWuzB,cACpBH,EAAwBp+B,MAAQgL,EAAWuzB,eAG7CvzB,EAAa,CAAC,EAGV,eAAgBA,IACpBA,EAAWC,YAAa,UAGnBD,EAAWhL,aACXgL,EAAWG,gBACXH,EAAWuzB,YAElBjmB,QAAQlN,eAAetW,EAAQqpC,EAAmBC,GAElDpzB,EAAWrT,IAAM,WACf,OAAOqW,KAAKmwB,EACd,EACAnzB,EAAWnT,IAAM,SAAUoZ,GACzB,IAAIC,EAAWlD,KAAKmwB,GAChBltB,IAAaC,IAIjBlD,KAAKmwB,GAAqBltB,EAC1BqH,QAAQlN,eAAe4C,KAAMmwB,EAAmB,CAAElzB,YAAY,IAE1D+C,KAAKqwB,IACPrwB,KAAKqwB,GAAcptB,EAAUC,EAAUzW,GAE3C,EAEAuQ,EAAWrT,IAAIy7B,aAAe,CAAC+K,IAE3BD,EAGF,OAAOlzB,EAFPsN,QAAQlN,eAAetW,EAAQ2F,EAAKuQ,EAIxC,CAEA,YAAYpP,IAARnB,EACK,SAAU+jC,EAAGC,EAAGC,GACrB,OAAOT,EAAKO,EAAGC,EAAGC,EAAGV,EACvB,EAEKC,EAAKD,EAAgBvjC,EAAKuQ,EACnC,CAEA,IAAI0P,GAAU,CAAC,EAER,SAASC,GAAuBnL,EAASpY,GACzCsjB,GAAQnd,eAAenG,KAC1BsjB,GAAQtjB,GAAQ,GAElBoY,EAAQpB,gBAAgBsM,GAAStjB,EACnC,mCCzxKaunC,EAKL3zB,EAJA4zB,EACAC,EACA3vC,EACA4vC,EA2GEC,EAGAC,YAnUNvzB,EAA4B,mBAAXC,QAAoD,iBAApBA,OAAOC,SAAwB,SAAUC,GAAO,cAAcA,CAAK,EAAI,SAAUA,GAAO,OAAOA,GAAyB,mBAAXF,QAAyBE,EAAIC,cAAgBH,QAAUE,IAAQF,OAAOF,UAAY,gBAAkBI,CAAK,EA8vB3Q,GA1vBiC,oBAAtBqzB,oBAET,SAAW7lC,EAAQ8lC,GAGjB,KAAIA,KAAQ9lC,GAAZ,CAEA,IAAI+lC,EACAC,EAAI,YACJvvB,EAAK,EACLwvB,EAAS,GAAK1vC,KAAK0vC,SACnB3e,EAAS,aACT4e,EAAe5e,EAAOvoB,OACtBonC,EAAiB,cAAmBF,EACpCG,EAAK,iBACLC,EAAQ,mBACRC,EAAO,sBACPC,EAAO,2BACPC,EAAM,uBACNC,EAAOzmC,EAAOsmC,GACdI,EAAO1mC,EAAOumC,GACdrzB,EAASlT,EAAOkT,OAChB9R,EAAOpB,EAAOoB,KACd4Q,EAAiBhS,EAAOomC,GACxBO,EAAoB3mC,EAAOqmC,GAC3Bz0B,EAAa80B,EAAK1mC,EAAQsmC,GAC1Bb,EAAczlC,EAAOoS,UACrBw0B,EAAMnB,EAAYthC,eAClB0iC,EAAMpB,EAAYe,GAClB1wC,EAAW2vC,EAAY3vC,SAKvBgxC,GAJU7nC,MAAMmT,UAAUjX,QAIJ,SAA6B4rC,EAAGC,EAAKn1B,GACxD+0B,EAAIh0B,KAAKm0B,EAAGZ,IACfn0B,EAAe+0B,EAAGZ,EAAgB,CAChCt0B,YAAY,EACZC,cAAc,EACdC,UAAU,EACVnL,MAAO,CAAC,IAGZmgC,EAAEZ,GAAgB,KAAOa,GAAOn1B,CAClC,GAiBItT,EAAM,WAAgB,EACtB0oC,EAAiB,SAAwBjpC,GAC3C,OAAOA,GAAQmoC,IAAmBS,EAAIh0B,KAAK6uB,EAAQzjC,EACrD,EACIkpC,EAAc,SAAqBlpC,GACrC,OAAOA,GAAQmoC,GAAkBS,EAAIh0B,KAAK6uB,EAAQzjC,EACpD,EACIm4B,EAAuB,SAA8B90B,GACvD,IAAI2lC,EAAM,GAAK3lC,EACf,OAAO6lC,EAAYF,GAAOJ,EAAIh0B,KAAKgC,KAAMoyB,IAAQpyB,KAAKuxB,IAAmBvxB,KAAKuxB,GAAgB,KAAOa,GAAOH,EAAIj0B,KAAKgC,KAAMvT,EAC7H,EACI8lC,EAAkB,SAAyBH,GAgB7C,OADAh1B,EAAeyzB,EAAauB,EAdX,CACfn1B,YAAY,EACZC,cAAc,EACdvT,IAAKA,EACLE,IAAK,SAAamI,GAChBm/B,EAAcnxB,KAAMoyB,EAAK,CACvBn1B,YAAY,EACZC,cAAc,EACdC,UAAU,EACVnL,MAAOA,IAETkgC,EAAoBlyB,KAAMoyB,GAAK,EACjC,IAGKvF,EAAOuF,GAAOh1B,EAAehS,EAAOgnC,GAAM,cAAeI,EAClE,EACIC,EAAU,SAAkBC,GAC9B,GAAI1yB,MAAQA,OAASoxB,EACnB,MAAM,IAAI/yB,UAAU,+BAEtB,OAAOk0B,EAAgB7f,EAAO3rB,OAAO2rC,GAAe,GAAIrB,IAAUxvB,GACpE,EACIgrB,EAASvuB,EAAO,MAChBk0B,EAAoB,CAAExgC,MAAOygC,GAC7BE,EAAY,SAAmBP,GACjC,OAAOvF,EAAOuF,EAChB,EACIQ,EAAkB,SAAoBT,EAAG1lC,EAAKuQ,GAChD,IAAIo1B,EAAM,GAAK3lC,EAOf,OANI6lC,EAAYF,IACdjB,EAAcgB,EAAGC,EAAKp1B,EAAWC,WAhDX,SAA6BD,GACrD,IAAI61B,EAAgBv0B,EAAOtB,GAE3B,OADA61B,EAAc51B,YAAa,EACpB41B,CACT,CA4CkDC,CAAoB91B,GAAcA,GAChFk1B,EAAoBC,EAAGC,IAAOp1B,EAAWC,aAEzCG,EAAe+0B,EAAG1lC,EAAKuQ,GAElBm1B,CACT,EACIY,EAAyB,SAA+BZ,GAG1D,OADAA,EAAY,oBADFjxC,EAAS8c,KAAKm0B,GACQA,EAAElkC,MAAM,IAAM7C,EAAO+mC,GAC9CN,EAAKM,GAAGvqC,OAAO0qC,GAAalwC,IAAIuwC,EACzC,EAEA31B,EAAWhL,MAAQ4gC,EACnBx1B,EAAehS,EAAQomC,EAAIx0B,GAE3BA,EAAWhL,MAAQ+gC,EACnB31B,EAAehS,EAAQ8lC,EAAMl0B,GAE7B,IAAIg2B,EAAwF,YAAjD,oBAAX/xC,OAAyB,YAAcwc,EAAQxc,SAAwBmK,EAAO6nC,oBAAoBhyC,QAAU,GACxIiyC,EAAoC9nC,EAAO6nC,oBAC/Cj2B,EAAWhL,MAAQ,SAA6BmgC,GAC9C,GAAyB,oBAArBjxC,EAAS8c,KAAKm0B,GAChB,IACE,OAAOe,EAAkCf,EAC3C,CAAE,MAAOgB,GACP,MAAO,GAAGpsC,OAAO,GAAIisC,EACvB,CAEF,OAAOnB,EAAKM,GAAGvqC,OAAOyqC,EACxB,EACAj1B,EAAehS,EAAQsmC,EAAM10B,GAE7BA,EAAWhL,MAAQ,SAA0BmgC,EAAGiB,GAC9C,IAAIC,EAAUN,EAAuBK,GAUrC,OATIC,EAAQlpC,OACVqC,EAAK4mC,GAAarsC,OAAOssC,GAAS9pC,SAAQ,SAAU6oC,GAC9C7Q,EAAqBvjB,KAAKo1B,EAAahB,IACzCQ,EAAgBT,EAAGC,EAAKgB,EAAYhB,GAExC,IAEAL,EAAkBI,EAAGiB,GAEhBjB,CACT,EACA/0B,EAAehS,EAAQqmC,EAAOz0B,GAE9BA,EAAWhL,MAAQuvB,EACnBnkB,EAAeyzB,EAAae,EAAK50B,GAEjCA,EAAWhL,MAAQygC,EACnBr1B,EAAeg0B,EAAG,SAAUp0B,GAE5BA,EAAWhL,MAAQ,SAAUvF,GAC3B,IAAI2lC,EAAM1f,EAAO3rB,OAAO2rB,EAAQjmB,EAAK4kC,GACrC,OAAOe,KAAOvB,EAAchE,EAAOuF,GAAOG,EAAgBH,EAC5D,EACAh1B,EAAeq1B,EAAS,MAAOz1B,GAE/BA,EAAWhL,MAAQ,SAAUs3B,GAC3B,OAAO0I,EAAIh0B,KAAK6uB,EAAQvD,GAAUA,EAAOnxB,MAAqB,EAAfm5B,GAAmBD,EAAOlnC,aAAU,CACrF,EACAiT,EAAeq1B,EAAS,SAAUz1B,GAElCA,EAAWhL,MAAQ,SAAkCmgC,EAAG1lC,GACtD,IAAIuQ,EAAa80B,EAAKK,EAAG1lC,GAIzB,OAHIuQ,GAAcs1B,EAAY7lC,KAC5BuQ,EAAWC,WAAaskB,EAAqBvjB,KAAKm0B,EAAG1lC,IAEhDuQ,CACT,EACAI,EAAehS,EAAQumC,EAAM30B,GAE7BA,EAAWhL,MAAQ,SAAUsqB,EAAO8W,GAClC,OAA4B,IAArBlpC,UAAUC,OAAemU,EAAOge,GAtIjB,SAA2BA,EAAO8W,GACxD,IAAIr1B,EAAOO,EAAOge,GAQlB,OAPoB,OAAhB8W,GAAsG,iBAAtD,IAAhBA,EAA8B,YAAc31B,EAAQ21B,KACtFvB,EAAKuB,GAAa7pC,SAAQ,SAAUkD,GAC9B80B,EAAqBvjB,KAAKo1B,EAAa3mC,IACzCmmC,EAAgB70B,EAAMtR,EAAK2mC,EAAY3mC,GAE3C,IAEKsR,CACT,CA4HkDu1B,CAAkBhX,EAAO8W,EAC3E,EACAh2B,EAAehS,EAAQ,SAAU4R,GAEjCA,EAAWhL,MAAQ,WACjB,IAAIuhC,EAAMryC,EAAS8c,KAAKgC,MACxB,MAAe,oBAARuzB,GAA6BjB,EAAYtyB,MAAQ,kBAAoBuzB,CAC9E,EACAn2B,EAAeyzB,EAAa,WAAY7zB,GAExC,IACEm0B,EAAgB7yB,EAAOlB,EAAe,CAAC,EAAGsV,EAAQ,CAChD/oB,IAAK,WACH,OAAOyT,EAAe4C,KAAM0S,EAAQ,CAAE1gB,OAAO,IAAS0gB,EACxD,KACEA,IAAWtV,CACjB,CAAE,MAAOo2B,GACPrC,EAAgB,SAAuBgB,EAAG1lC,EAAKuQ,GAC7C,IAAIy2B,EAAkB3B,EAAKjB,EAAapkC,UACjCokC,EAAYpkC,GACnB2Q,EAAe+0B,EAAG1lC,EAAKuQ,GACvBI,EAAeyzB,EAAapkC,EAAKgnC,EACnC,CACF,CArM0B,CAsM3B,CAzMD,CAyMGroC,OAAQ,yBAEAulC,EAsBRvlC,OAAQsS,OArBLkzB,EAAKD,EAAEvzB,eACPyzB,EAAcF,EAAEnzB,UAChBtc,EAAW2vC,EAAY3vC,SAG3B,CAAC,WAAY,QAAS,UAAW,SAAU,QAAS,cAAe,qBAAsB,cAAe,UAAW,cAF/G4vC,EAAc,eAE6HvnC,SAAQ,SAAUH,GACzJA,KAAQsU,SACZkzB,EAAGlzB,OAAQtU,EAAM,CAAE4I,MAAO0L,OAAOtU,KACzBA,IACD0nC,MACH9zB,EAAa2zB,EAAE+C,yBAAyB7C,EAAa,aAC1C7+B,MAAQ,WACjB,IAAIuhC,EAAMryC,EAAS8c,KAAKgC,MACpB2zB,EAAM,MAAO3zB,UAAwCpS,EAAYoS,KAAKtC,OAAOozB,aACjF,YAAsB,IAAR6C,EAAsBJ,EAAM,WAAaI,EAAM,GAC/D,EACA/C,EAAGC,EAAa,WAAY7zB,GAIpC,IAGF,SAAW42B,EAAIC,EAAIC,GAEjB,SAASC,IACP,OAAO/zB,IACT,CAEK6zB,EAAGD,KAAKC,EAAGD,GAAM,WACpB,IAAIt8B,EAAI,EACJyG,EAAOiC,KACPrC,EAAW,CACb9M,KAAM,WACJ,IAAIwY,EAAOtL,EAAK5T,QAAUmN,EAC1B,OAAO+R,EAAO,CAAEA,KAAMA,GAAS,CAAEA,KAAMA,EAAMrX,MAAO+L,EAAKzG,KAC3D,GAGF,OADAqG,EAASi2B,GAAMG,EACRp2B,CACT,GAEKm2B,EAAGF,KAAKE,EAAGF,GAAM,WACpB,IAAII,EAAgBziB,OAAOyiB,cACvBj2B,EAAOiC,KACP1I,EAAI,EACJnN,EAAS4T,EAAK5T,OACdwT,EAAW,CACb9M,KAAM,WACJ,IAAIwY,EAAOlf,GAAUmN,EACjB28B,EAAI5qB,EAAO,GAAK2qB,EAAcj2B,EAAKm2B,YAAY58B,IAEnD,OADAA,GAAK28B,EAAE9pC,OACAkf,EAAO,CAAEA,KAAMA,GAAS,CAAEA,KAAMA,EAAMrX,MAAOiiC,EACtD,GAGF,OADAt2B,EAASi2B,GAAMG,EACRp2B,CACT,EACD,CAnCD,CAmCGD,OAAOC,SAAUtT,MAAMmT,UAAW+T,OAAO/T,YAGb,oBAAtByzB,oBAETkD,OAAOC,MAAQD,OAAOC,OAAS,SAAUpiC,GACvC,OAAOA,GAAUA,CACnB,EAEAmiC,OAAOE,SAAWF,OAAOE,UAAY,SAAUriC,GAC7C,MAAwB,iBAAVA,GAAsBqiC,SAASriC,EAC/C,GAGGuf,OAAO/T,UAAUgwB,WAAY,WAChC,IACE,OAAQ,KAAKA,SAAS,IAAK,EAC7B,CAAE,MAAO2F,GACP,OAAO,CACT,CACF,CANkC,KAOhC5hB,OAAO/T,UAAUgwB,SAAW,SAAU8G,EAAcntC,GAClD,IAAIotC,EAAgBv0B,KAAK9e,YACD,iBAAbiG,IAA0BktC,SAASltC,IAAaxF,KAAK6yC,MAAMrtC,KAAcA,GAAYA,EAAWotC,EAAcpqC,UACvHhD,EAAWotC,EAAcpqC,QAE3BhD,GAAYmtC,EAAanqC,OACzB,IAAIsqC,EAAYF,EAAchuC,QAAQ+tC,EAAcntC,GACpD,OAAsB,IAAfstC,GAAoBA,IAActtC,CAC3C,GAGGoqB,OAAO/T,UAAUk3B,aAAc,WAClC,IACE,OAAQ,KAAKA,WAAW,IAAK,EAC/B,CAAE,MAAOvB,GACP,OAAO,CACT,CACF,CANoC,KAOlC5hB,OAAO/T,UAAUk3B,WAAa,SAAUJ,EAAcntC,GAEpD,OADAA,EAAWA,GAAY,EAChB6Y,KAAK20B,OAAOxtC,EAAUmtC,EAAanqC,UAAYmqC,CACxD,GAG+B,oBAAtBrD,oBAEJ5mC,MAAMylC,OACTzlC,MAAMylC,MAIAiB,EAAW,SAAkB6D,GAC/B,OAAOA,EAAK,EAAIjzC,KAAKE,IAJP,SAAmB+yC,GACjC,OAAOR,MAAMQ,GAAMA,GAAM,GAAKA,EAAK,EAAIjzC,KAAK6yC,MAAQ7yC,KAAKkzC,MAAMD,EACjE,CAE2BE,CAAUF,GAAK,kBAAoB,CAC9D,EACI5D,EAAW,SAAkB+D,EAAM/pC,EAAIkpB,EAAK7mB,GAC9C,IACE,OAAOrC,EAAGkpB,EAAK7mB,EACjB,CAAE,MAAO2nC,GAEP,KAD0B,mBAAfD,EAAKE,QAAsBF,EAAKE,SACrCD,CACR,CACF,EAEO,SAAcE,GACnB,IAOI/qC,EACAnB,EACAmsC,EACAx3B,EAVAgzB,EAAIvlC,OAAO8pC,GACXE,EAAmB,mBAARp1B,KAAqBA,KAAO3V,MACvCgrC,EAAOnrC,UAAUC,OACjBmrC,EAAQD,EAAO,EAAInrC,UAAU,QAAK0D,EAClC2nC,OAAoB3nC,IAAV0nC,EACVjoC,EAAQ,EACRmoC,EAAS7E,EAAEjzB,OAAOC,UAMtB,GADI43B,IAASD,EAAQA,EAAM5pB,KAAK2pB,EAAO,EAAInrC,UAAU,QAAK0D,IAC5CA,MAAV4nC,GAAwBnrC,MAAMkkB,QAAQ2mB,GAMxC,IAAKlsC,EAAS,IAAIosC,EADlBjrC,EAAS4mC,EAASJ,EAAExmC,SACSA,EAASkD,EAAOA,IAC3CrE,EAAOqE,GAASkoC,EAAUD,EAAM3E,EAAEtjC,GAAQA,GAASsjC,EAAEtjC,QANvD,IAAKsQ,EAAW63B,EAAOx3B,KAAK2yB,GAAI3nC,EAAS,IAAIosC,IAAOD,EAAOx3B,EAAS9M,QAAQwY,KAAMhc,IAChFrE,EAAOqE,GAASkoC,EAAUvE,EAASrzB,EAAU23B,EAAOH,EAAKnjC,MAAO3E,GAAS8nC,EAAKnjC,MASlF,OADAhJ,EAAOmB,OAASkD,EACTrE,CACT,IAICqB,MAAMmT,UAAUtF,MACnB9M,OAAOgS,eAAe/S,MAAMmT,UAAW,OAAQ,CAC7CN,cAAc,EACdC,UAAU,EACVF,YAAY,EACZjL,MAAO,SAAeyjC,GACpB,GAAa,OAATz1B,KACF,MAAM,IAAI3B,UAAU,oDAEtB,GAAyB,mBAAdo3B,EACT,MAAM,IAAIp3B,UAAU,gCAOtB,IALA,IAGIrM,EAHAtL,EAAO0E,OAAO4U,MACd7V,EAASzD,EAAKyD,SAAW,EACzBurC,EAAUxrC,UAAU,GAGfoN,EAAI,EAAGA,EAAInN,EAAQmN,IAE1B,GADAtF,EAAQtL,EAAK4Q,GACTm+B,EAAUz3B,KAAK03B,EAAS1jC,EAAOsF,EAAG5Q,GACpC,OAAOsL,CAIb,IAIC3H,MAAMmT,UAAU+lB,WACnBn4B,OAAOgS,eAAe/S,MAAMmT,UAAW,YAAa,CAClDN,cAAc,EACdC,UAAU,EACVF,YAAY,EACZjL,MAAO,SAAeyjC,GACpB,GAAa,OAATz1B,KACF,MAAM,IAAI3B,UAAU,yDAEtB,GAAyB,mBAAdo3B,EACT,MAAM,IAAIp3B,UAAU,gCAOtB,IALA,IAGIrM,EAHAtL,EAAO0E,OAAO4U,MACd7V,EAASzD,EAAKyD,SAAW,EACzBurC,EAAUxrC,UAAU,GAGfoN,EAAI,EAAGA,EAAInN,EAAQmN,IAE1B,GADAtF,EAAQtL,EAAK4Q,GACTm+B,EAAUz3B,KAAK03B,EAAS1jC,EAAOsF,EAAG5Q,GACpC,OAAO4Q,EAGX,OAAQ,CACV,KAK2B,oBAAtBq+B,mBAAsCtrC,MAAMmT,UAAUo4B,UAC/DxqC,OAAOgS,eAAe/S,MAAMmT,UAAW,WAAY,CACjDN,cAAc,EACdC,UAAU,EACVF,YAAY,EACZjL,MAAO,SAAe6jC,GACpB,IAAIlF,EAAIvlC,OAAO4U,MACXrR,EAAM6f,SAASmiB,EAAExmC,SAAW,EAChC,GAAY,IAARwE,EACF,OAAO,EAET,IACI8hC,EASAqF,EAVAC,EAAIvnB,SAAStkB,UAAU,KAAO,EAWlC,IATI6rC,GAAK,EACPtF,EAAIsF,GAEJtF,EAAI9hC,EAAMonC,GACF,IACNtF,EAAI,GAIDA,EAAI9hC,GAAK,CAEd,GAAIknC,KADJC,EAAiBnF,EAAEF,KACqBoF,GAAkBA,GAAiBC,GAAmBA,EAC5F,OAAO,EAETrF,GACF,CACA,OAAO,CACT,IAI6B,oBAAtBQ,oBAET,WACE,IAWQ1hC,EACAymC,EACAC,EACAC,EAdJC,GAAW,EAEf,IACE,IAAIzxB,EAAItZ,OAAOoB,KAAK,KACpB2pC,EAAwB,IAAbzxB,EAAEva,QAAyB,MAATua,EAAE,EACjC,CAAE,MAAOyuB,GACPgD,GAAW,CACb,CAEIA,IACF/qC,OAAOoB,MACD+C,EAAiBnE,OAAOoS,UAAUjO,eAClCymC,GAAkB,CAAE90C,SAAU,MAAOqgC,qBAAqB,YAE1D2U,GADAD,EAAY,CAAC,WAAY,iBAAkB,UAAW,iBAAkB,gBAAiB,uBAAwB,gBACrF9rC,OAEzB,SAAUyT,GACf,GAAIA,QACF,MAAMS,UAAU,8CAGlBT,EAAMxS,OAAOwS,GAEb,IACIwvB,EACA91B,EAFAtO,EAAS,GAIb,IAAKokC,KAAQxvB,EACPrO,EAAeyO,KAAKJ,EAAKwvB,IAC3BpkC,EAAOY,KAAKwjC,GAIhB,GAAI4I,EACF,IAAK1+B,EAAI,EAAGA,EAAI4+B,EAAiB5+B,IAC3B/H,EAAeyO,KAAKJ,EAAKq4B,EAAU3+B,KACrCtO,EAAOY,KAAKqsC,EAAU3+B,IAK5B,OAAOtO,CACT,GAGL,CA9CD,GAgDA,SAAW2nC,GAQA,IACDyF,EACAnE,EACAoE,EAVJ,WAAY1F,GAIhBA,EAAEvzB,eAAeuzB,EAAG,SAAU,CAC5BzzB,cAAc,EACdC,UAAU,EACVnL,OACMokC,EAAOzF,EAAE2F,sBACTrE,EAAMtB,EAAEpP,qBACR8U,EAAWD,EAAO,SAAUr4B,GAC9B,OAAOq4B,EAAKr4B,GAAMnW,OAAOqqC,EAAKl0B,EAChC,EAAI,WACF,OAAO1T,MAAMmT,SACf,EAEO,SAAgB+4B,GAKrB,SAAS1sC,EAAI2sC,GACXD,EAAMC,GAAeC,EAAID,EAC3B,EANIJ,GAAUG,aAAiB5F,GAC7BlnB,QAAQY,KAAK,sBAAuBksB,GAOtC,IAAK,IAAIj/B,EAAI,EAAGsI,EAAK1V,UAAUC,OAAQmN,EAAIsI,IAAMtI,EAAG,CAClD,IAAIm/B,EAAMvsC,UAAUoN,GAEhBm/B,SAIJ9F,EAAEnkC,KAAKiqC,GAAK1vC,OAAOsvC,EAASI,IAAMltC,QAAQM,EAC5C,CAEA,OAAO0sC,CACT,IAGL,CAxCD,CAwCGnrC,QAEEA,OAAOsrC,KACVtrC,OAAOsrC,GAAK,SAAUjzC,EAAGG,GACvB,OAAIH,IAAMG,EACK,IAANH,GAAW,EAAIA,GAAM,EAAIG,EAEzBH,GAAMA,GAAKG,GAAMA,CAE5B,IAI6B,oBAAtBqtC,mBAET,SAAW0F,GACT,IAAIr/B,EAsBEs/B,EAwBAC,EA5CFz5B,EAAiBhS,OAAOgS,eACxBs5B,EAAK,SAAY3/B,EAAGC,GACtB,OAAOD,IAAMC,GAAKD,GAAMA,GAAKC,GAAMA,CACrC,EAyEA,SAAS8/B,EAAiBxa,EAAOya,GAC/B,SAASC,EAAWjgC,GAClB,IAAKiJ,MAAQA,KAAKnC,cAAgBm5B,EAAY,OAAO,IAAIA,EAAWjgC,GACpEiJ,KAAKi3B,MAAQ,GACbj3B,KAAKk3B,QAAU,GACfl3B,KAAKm3B,KAAO,GACZn3B,KAAK+2B,WAAaA,EAEdhgC,GAAGqgC,EAAKp5B,KAAKgC,KAAMjJ,EACzB,CAWA,OATKggC,GACH35B,EAAekf,EAAO,OAAQ,CAC5B3yB,IAAK0tC,IAIT/a,EAAMze,YAAcm5B,EACpBA,EAAWx5B,UAAY8e,EAEhB0a,CACT,CAEA,SAASI,EAAKrgC,GAGRiJ,KAAK7W,IAAK4N,EAAExN,QAAQyW,KAAK7W,IAAK6W,MAAWjJ,EAAExN,SAAQ,SAAUwN,GAC7DiJ,KAAKnW,IAAIkN,EAAE,GAAIA,EAAE,GACnB,GAAGiJ,KACP,CAEA,SAASs3B,EAAa7qC,GAUpB,OATIuT,KAAKvW,IAAIgD,KACXuT,KAAKi3B,MAAMt1B,OAAOrK,EAAG,GACrB0I,KAAKk3B,QAAQv1B,OAAOrK,EAAG,GAEvB0I,KAAKm3B,KAAK5tC,SAAQ,SAAUuyB,GACtBxkB,EAAIwkB,EAAE,IAAIA,EAAE,IAClB,MAGM,EAAIxkB,CACd,CAEA,SAASigC,EAAU9qC,GACjB,OAAOuT,KAAKvW,IAAIgD,GAAOuT,KAAKk3B,QAAQ5/B,QAAK1J,CAC3C,CAEA,SAASnE,EAAI/C,EAAM+F,GACjB,GAAIuT,KAAK+2B,YAActqC,IAAQrB,OAAOqB,GAAM,MAAM,IAAI4R,UAAU,6CAEhE,GAAI5R,GAAOA,GAAe,IAARA,EAAW,IAAK6K,EAAI5Q,EAAKyD,OAAQmN,MAAQo/B,EAAGhwC,EAAK4Q,GAAI7K,UAAe6K,EAAI5Q,EAAKH,QAAQkG,GACvG,OAAQ,EAAI6K,CACd,CAEA,SAASkgC,EAAOxlC,GACd,OAAOvI,EAAIuU,KAAKgC,KAAMA,KAAKk3B,QAASllC,EACtC,CAEA,SAASylC,EAAOzlC,GACd,OAAOvI,EAAIuU,KAAKgC,KAAMA,KAAKi3B,MAAOjlC,EACpC,CAEA,SAAS0lC,EAAUjrC,EAAKuF,GAEtB,OADAgO,KAAKvW,IAAIgD,GAAOuT,KAAKk3B,QAAQ5/B,GAAKtF,EAAQgO,KAAKk3B,QAAQl3B,KAAKi3B,MAAMrtC,KAAK6C,GAAO,GAAKuF,EAC5EgO,IACT,CAEA,SAAS23B,EAAU3lC,GAEjB,OADKgO,KAAKvW,IAAIuI,IAAQgO,KAAKk3B,QAAQttC,KAAKoI,GACjCgO,IACT,CAEA,SAAS43B,KACN53B,KAAKi3B,OAAS,GAAG9sC,OAAS6V,KAAKk3B,QAAQ/sC,OAAS,CACnD,CAMA,SAAS0tC,IACP,OAAOC,EAAe93B,KAAKm3B,KAAMn3B,KAAKk3B,QACxC,CAEA,SAASa,IACP,OAAOD,EAAe93B,KAAKm3B,KAAMn3B,KAAKi3B,MAAOj3B,KAAKk3B,QACpD,CAMA,SAASY,EAAeE,EAAKv3B,EAAOw3B,GAClC,IAAI5pC,EAEAytB,EAAI,CAAC,GACLzS,GAAO,EAEX,OADA2uB,EAAIpuC,KAAKkyB,IACFztB,EAAO,CAAC,GAAQqP,OAAOC,UAAY,WACxC,OAAOqC,IACT,EAAG3R,EAAKwC,KAAO,WACb,IAAI6J,EACA+1B,EAAI3U,EAAE,GAQV,OAPKzS,GAAQonB,EAAIhwB,EAAMtW,QACrBuQ,EAAIu9B,EAAS,CAACx3B,EAAMgwB,GAAIwH,EAAOxH,IAAMhwB,EAAMgwB,GAC3C3U,EAAE,OAEFzS,GAAO,EACP2uB,EAAIr2B,OAAOq2B,EAAIzxC,QAAQu1B,GAAI,IAEtB,CAAEzS,KAAMA,EAAMrX,MAAO0I,EAC9B,EAAGrM,CACL,CAEA,SAASgpC,IACP,OAAOr3B,KAAKk3B,QAAQ/sC,MACtB,CAEA,SAAS+tC,EAAc5a,EAAUvb,GAE/B,IADA,IAAI6yB,EAAK50B,KAAKmJ,YACL,CACP,IAAIgvB,EAAIvD,EAAG/jC,OACX,GAAIsnC,EAAE9uB,KAAM,MACZiU,EAAStf,KAAK+D,EAASo2B,EAAEnmC,MAAM,GAAImmC,EAAEnmC,MAAM,GAAIgO,KACjD,CACF,CArMsB,oBAAXo4B,UACTzB,EAAOyB,QAAUtB,EAAiB,CAChC,OAAUQ,EAEV9a,MAAOob,EAEPjuC,IAAK4tC,EAEL9tC,IAAKguC,EAEL5tC,IAAK6tC,IACJ,IAGa,oBAAP7uC,KAAkD,mBAArB,IAAIA,KAAMkpB,SAA0B,IAAIlpB,KAAMkpB,SAASlhB,OAG7F8lC,EAAO9tC,IAAMiuC,IAAkBF,EAAoB,CACjD,OAAUU,EAEV7tC,IAAKguC,EAEL9tC,IAAK4tC,EAEL1tC,IAAK6tC,EAELlrC,KA0HJ,WACE,OAAOsrC,EAAe93B,KAAKm3B,KAAMn3B,KAAKi3B,MACxC,EA1HIllB,OAAQ8lB,EAER1uB,QAAS4uB,EAETxuC,QAAS2uC,EAET1b,MAAOob,IACYl6B,OAAOC,UAAYo6B,EAAYnB,KAGpC,oBAAP7tC,KAAkD,mBAArB,IAAIA,KAAMgpB,SAA0B,IAAIhpB,KAAMgpB,SAASlhB,OAG7F8lC,EAAO5tC,IAAM+tC,IAAkBD,EAAqB,CAClDptC,IAAK+tC,EAELruC,IAAKwuC,EAEL,OAAUL,EAEV9a,MAAOob,EAEPprC,KAAMqrC,EACN9lB,OAAQ8lB,EAER1uB,QA2GJ,WACE,OAAO2uB,EAAe93B,KAAKm3B,KAAMn3B,KAAKk3B,QAASl3B,KAAKk3B,QACtD,EA3GI3tC,QAAS2uC,IACWx6B,OAAOC,UAAYk6B,EAAchB,KAGnC,oBAAXwB,UACT1B,EAAO0B,QAAUvB,EAAiB,CAChC,OAAUQ,EAEVnuC,IAAKwuC,EAELnb,MAAOob,EAEPnuC,IAAK+tC,IACJ,GAkIN,CA9MD,CA8MG,aAG4B,oBAAtBvG,kBAAmC,CAE5C,IAAIvlB,EAAOnH,SAAS/G,UAAUkO,UAES,IAA5B,sBACT,oBAA0B,CAAC,GAGS,mBAA3BpB,QAAQlN,iBACjBkN,QAAQlN,eAAiB,SAAUtW,EAAQwxC,EAAat7B,GACtD,GAAwE,iBAAjD,IAAXlW,EAAyB,YAAc2W,EAAQ3W,IAAmC,OAAXA,EAAoC,mBAAXA,EAC1G,MAAM,IAAIuX,UAAU,+CAEtB,IAEE,OADAjT,OAAOgS,eAAetW,EAAQwxC,EAAat7B,IACpC,CACT,CAAE,MAAOm2B,GACP,OAAO,CACT,CACF,GAG+B,mBAAtB7oB,QAAQiuB,YACjBjuB,QAAQiuB,UAAY,SAAUC,EAAQpuC,GACpC,GAAIA,EACF,OAAQA,EAAKD,QACX,KAAK,EACH,OAAO,IAAIquC,EACb,KAAK,EACH,OAAO,IAAIA,EAAOpuC,EAAK,IACzB,KAAK,EACH,OAAO,IAAIouC,EAAOpuC,EAAK,GAAIA,EAAK,IAClC,KAAK,EACH,OAAO,IAAIouC,EAAOpuC,EAAK,GAAIA,EAAK,GAAIA,EAAK,IAC3C,KAAK,EACH,OAAO,IAAIouC,EAAOpuC,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,IAIxD,IAAI2M,EAAI,CAAC,MAET,OADAA,EAAEnN,KAAKme,MAAMhR,EAAG3M,GACT,IAAKshB,EAAK3D,MAAMywB,EAAQzhC,GACjC,GAG6B,mBAApBuT,QAAQmuB,UACjBnuB,QAAQmuB,QAAU,SAAUtG,GAC1B,OAAO/mC,OAAO6nC,oBAAoBd,GAAGprC,OAAOqE,OAAOkrC,sBAAsBnE,GAC3E,EAEJ,CAEA,GAAiC,oBAAtBuG,kBAAmC,CAE5C,IAAIC,EAAgBvtC,OAAOwtC,OAAO,CAAC,GAC/BC,EAAuB,eAEW,mBAA3BvuB,QAAQwuB,iBACjBxuB,QAAQwuB,eAAiB,SAAUC,EAAajyC,EAAQkyC,GACtD,GAAIlyC,EAAOyI,eAAespC,GACxB,OAAQ/xC,EAAO+xC,GAAsBG,IAAcL,GAAeI,EAEtE,GAGoC,mBAA3BzuB,QAAQ2uB,iBACjB3uB,QAAQ2uB,eAAiB,SAAUF,EAAaG,EAAepyC,EAAQkyC,GACrE,IAAIG,EAAoBryC,EAAOyI,eAAespC,GAAwB/xC,EAAO+xC,GAAwB/xC,EAAO+xC,GAAwB,CAAC,GAC/GM,EAAkBH,KAAeG,EAAkBH,GAAa,CAAC,IACvED,GAAeG,CACjC,GAG8B,mBAArB5uB,QAAQse,WACjBte,QAAQse,SAAW,SAAUmQ,EAAaG,GACxC,OAAO,SAAUpyC,EAAQkyC,GACvB1uB,QAAQ2uB,eAAeF,EAAaG,EAAepyC,EAAQkyC,EAC7D,CACF,EAEJ,KC10BII,sBADAC,EAAoB,GAEpBC,EAAe,IAAI5rC,GAAQ,SAAUD,GAAW,OAAO2rC,EAAe3rC,CAAS,IAC/EpH,EAAO,YACPkzC,OAAgC,IAAZC,IAA4BA,EAAQC,QAsF5D,SAASja,EAAOka,EAASC,EAAgBC,GAGrC,OAFAA,EAAQvzC,KAAOqzC,EACfE,EAAQD,eAAiBA,GAAkB,KACvCA,EACOC,EAAQC,OACVC,WAAWH,GACXhsC,MAAK,SAAUosC,GAChB,IAAKA,EAAaC,UACd,MAAM,IAAIhvB,MAAM,6BAA6BjkB,OAAO4yC,EAAgB,oCAExE,OAAOI,EAAaC,UAAUJ,EAClC,KAEJA,EAAQjQ,IACHsQ,wBACAC,qBACEN,EAAQ5xC,QAAQ2F,MAAK,WAAc,OAAOisC,EAAQO,SAAW,IACxE,CAkBA,SAASC,EAAUJ,GACf,IAAIle,EAAIwd,EAAa3rC,MAAK,SAAU0sC,GAAW,OAAOL,EAAUK,IAAY,IAG5E,OAFIhB,GACAA,EAAkBzvC,KAAKkyB,GACpBA,CACX,EA5HSz1B,EAAK1B,UAAyC,aAA7B0B,EAAK1B,SAAS21C,WAG7B,IAAI5sC,GAAQ,SAAUD,GAGzB,SAAS8sC,IACLl0C,EAAK1B,SAAS+P,oBAAoB,mBAAoB6lC,GACtDl0C,EAAKqO,oBAAoB,OAAQ6lC,GACjC9sC,GACJ,CANApH,EAAK1B,SAAS8P,iBAAiB,mBAAoB8lC,GACnDl0C,EAAKoO,iBAAiB,OAAQ8lC,EAMlC,IAVW7sC,EAAQD,WAuGdE,MA3FT,WACI,OAAI,YACOD,EAAQD,QAAQ,IAAI,aAsBxBC,EAAQ8sC,OAAO,oIAC1B,IAmES7sC,MA9CT,SAAyBksC,GACrB,IAAIz3C,EAAM,SAAUq4C,EAAUC,GAC1B,OAAOb,EAAOc,UAAUF,EAAUC,GAC7B/sC,MAAK,SAAUitC,GAEhB,OADAf,EAAOz3C,IAAIq4C,EAAUG,GACdA,CACX,GACJ,EACA,OA5BJ,SAAuBf,GACnB,GAAI,KACA,OAAOnsC,EAAQD,UACnB,IAAIkb,EACAkyB,EAAatB,IAAgC,aAAjBC,EAAQ7wB,MAAuB6wB,EAAQsB,SAAS,gBAChF,GAAIvB,IAAesB,EACflyB,EAAO,cAEN,GAAsB,oBAAX1nB,OACZ0nB,EAAO,cAEN,IAAoB,oBAAT5K,KAIZ,MAAM,IAAIiN,MAAM,wDAHhBrC,EAAO,QAIX,CACA,OAAOkxB,EAAOC,WAAW,eAAiBnxB,GACrChb,MAAK,SAAUotC,GAAa,MAAgB,WAATpyB,IAAsB,MAAiBoyB,EAAUC,aAAeD,EAAUrN,YAAc,GACpI,CASWuN,CAAcpB,GAChBlsC,MAAK,WAAc,OAAOksC,EAAOc,UAAU,uBAAyB,IACpEhtC,MAAK,SAAUutC,GAChB,IAAIC,EAAmB/4C,EAAI,oBAAoE84C,GAC/F,OAAOxtC,EAAQkT,IAAI,CACfu6B,EACAA,EAAiBxtC,MAAK,SAAUytC,GAAiB,OAAOh5C,EAAI,+BAAgCg5C,EAAgB,IAC5Gh5C,EAAI,iBAAkB84C,GACtB94C,EAAI,0BAA2B84C,IAEvC,IACKvtC,MAAK,SAAU0tC,GAChB,IAAID,EAAgBC,EAAG,GACvB,OAAOxB,EAAOC,WAAWsB,EAC7B,IACKztC,MAAK,SAAU2tC,GAAM,OAAOlC,GAAa,WAAc,OAAO,IAAIkC,EAAGC,QAAQ1B,EAAS,GAAI,GACnG,IAuBSlsC,MAAK,WAEN,IADA,IAAI6tC,EAAWn1C,EAAK1B,SAAS82C,iBAAiB,oCACrCnkC,EAAI,EAAGsI,EAAK47B,EAASrxC,OAAQmN,EAAIsI,IAAMtI,EAAG,CAC/C,IAAIoiC,EAAU8B,EAASlkC,GACnBokC,EAAehC,EAAQ7X,aAAa,gBAAkB6X,EAAQ7X,aAAa,oBAC/EuY,EAAU5a,EAAO9T,KAAK,KAAMguB,EAASgC,GACzC,CACA,IAAIC,EAAYlyB,QAAQC,MAAMgC,KAAKjC,SAC/BmyB,EAAavC,EAAkBj3C,KAAI,SAAU05B,GAAK,OAAOA,EAAE+f,MAAMF,EAAY,IAEjF,OADAtC,EAAoB,KACb3rC,EAAQkT,IAAIg7B,EACvB,0IC5GJ,SAASE,EAAWC,EAAYj1C,EAAQ2F,EAAK+5B,GACzC,IAA2HkK,EAAvHuD,EAAI/pC,UAAUC,OAAQguC,EAAIlE,EAAI,EAAIntC,EAAkB,OAAT0/B,EAAgBA,EAAOp7B,OAAOsoC,yBAAyB5sC,EAAQ2F,GAAO+5B,EACrH,GAAuB,iBAAZlc,SAAoD,mBAArBA,QAAQ0xB,SAAyB7D,EAAI7tB,QAAQ0xB,SAASD,EAAYj1C,EAAQ2F,EAAK+5B,QACpH,IAAK,IAAIlvB,EAAIykC,EAAW5xC,OAAS,EAAGmN,GAAK,EAAGA,KAASo5B,EAAIqL,EAAWzkC,MAAI6gC,GAAKlE,EAAI,EAAIvD,EAAEyH,GAAKlE,EAAI,EAAIvD,EAAE5pC,EAAQ2F,EAAK0rC,GAAKzH,EAAE5pC,EAAQ2F,KAAS0rC,GAChJ,OAAOlE,EAAI,GAAKkE,GAAK/sC,OAAOgS,eAAetW,EAAQ2F,EAAK0rC,GAAIA,CAChE,CAEA,SAAS8D,EAAWlD,EAAaG,GAC7B,GAAuB,iBAAZ5uB,SAAoD,mBAArBA,QAAQse,SAAyB,OAAOte,QAAQse,SAASmQ,EAAaG,EACpH,CAKA,SAASgD,EAAWC,GAChB,IAAIlM,EAAO,SAAUnpC,GACZA,EAAOyI,eAAe,YACvBzI,EAAOmlC,QAAU,YAAgB,gBAAqBnlC,IAClDs1C,GAAkBjkC,QAClBrR,EAAOmlC,QAAUnlC,EAAOmlC,OAAO9hC,OAAS,GACpCrD,EAAOmlC,OAAOnlC,EAAOmlC,OAAO9hC,OAAS,KAAOiB,QAC5CtE,EAAOmlC,OAAOtqB,QAAQ,EAAG,GAIzC,EACA,OAfJ,SAAsBw6B,GAClB,QAASA,CACb,CAaQE,CAAaF,GACNlM,EAAKkM,GAETlM,CACX,CACA,SAAShE,IAEL,IADA,IAAI9G,EAAO,GACFntB,EAAK,EAAGA,EAAK9N,UAAUC,OAAQ6N,IACpCmtB,EAAKntB,GAAM9N,UAAU8N,GAEzB,OAAO,SAAUlR,EAAQwD,EAAM0S,GAC3B,GAA0B,iBAAfA,EAKP,OAJAk/B,EAAWp1C,QACS,IAAhBq+B,EAAKh7B,SACLrD,EAAOmlC,OAAOjvB,GAAcmoB,EAAK,KAIrCnoB,EACSA,EAAWhL,MACjBi6B,OAAS9G,EAGZr+B,EAAOmlC,OAAS9G,CAExB,CACJ,CAEA,IAMImX,EANAC,EAAW,YAAgB,oBAAoB,SAAUz1C,GACzD,MAA4B,mBAAfA,EAAO6C,KACT,oEAGf,IAUA,SAAS6yC,EAAWC,EAAQC,EAAUxxC,GAClC,OAAOuxC,IAAWC,CACtB,EAVA,SAAWJ,GACPA,EAASA,EAAmB,SAAI,GAAK,WACrCA,EAASA,EAAoB,UAAI,GAAK,YACtCA,EAASA,EAAoB,UAAI,GAAK,YACtCA,EAASA,EAAmB,SAAI,GAAK,WACrCA,EAASA,EAAgB,MAAI,GAAK,QAClCA,EAASA,EAAgB,MAAI,GAAK,OACrC,CAPD,CAOGA,IAAaA,EAAW,CAAC,IAI5B,IAAIK,EAAoB,WACpB,SAASA,EAAiB5yC,EAAUmB,GAChC8U,KAAKjW,SAAWA,EAChBiW,KAAK9U,MAAQA,CACjB,CA6BA,OA5BAyxC,EAAiBn/B,UAAU7T,IAAM,SAAUgkC,EAAWlhC,GAClD,GAAI+vC,EAAWx8B,KAAKjW,SAAUuyC,EAAS1wC,SAAUoU,KAAK9U,OAClD,OAAO8U,KAAK9U,MAEhB,GAAIsxC,EAAWx8B,KAAKjW,SAAUuyC,EAASM,UAAW58B,KAAK9U,OAAQ,CAC3D,IAAI0xC,EAAYjP,EAAUkP,OAAO78B,KAAK9U,OAGtC,OAFA8U,KAAK9U,MAAQ0xC,EACb58B,KAAKjW,SAAW,EACT6yC,CACX,CACA,GAAIJ,EAAWx8B,KAAKjW,SAAUuyC,EAASQ,UAAW98B,KAAK9U,OACnD,OAAOyiC,EAAUkP,OAAO78B,KAAK9U,OAEjC,GAAIsxC,EAAWx8B,KAAKjW,SAAUuyC,EAASS,SAAU/8B,KAAK9U,OAClD,OAAO8U,KAAK9U,MAAMyiC,EAAWlhC,EAAKuT,MAEtC,GAAIw8B,EAAWx8B,KAAKjW,SAAUuyC,EAAS77B,MAAOT,KAAK9U,OAC/C,OAAO8U,KAAK9U,MAAM,GAAGvB,IAAIgkC,EAAWlhC,GAExC,GAAI+vC,EAAWx8B,KAAKjW,SAAUuyC,EAASU,MAAOh9B,KAAK9U,OAC/C,OAAOyiC,EAAUhkC,IAAIqW,KAAK9U,OAE9B,MAAM,IAAI8f,MAAM,qBAAuBhL,KAAKjW,SAChD,EACmB+xC,EAAW,CAC1BS,IACAN,EAAW,oBAAqB,CAAC9H,OAAQ/oC,UAC1CuxC,EAEP,CAlCuB,GAmCnBM,EAAQ,WACR,SAASA,EAAKxwC,GACVuT,KAAK1V,KAAOmC,CAChB,CASA,IAAIywC,EAKJ,OAbAA,EAASD,EACTA,EAAKz/B,UAAU7T,IAAM,SAAUgkC,GAC3B,IAAIrpB,EAAQtE,KACZ,OAAO,WAAc,OAAO2tB,EAAUhkC,IAAI2a,EAAMha,KAAO,CAC3D,EACA2yC,EAAKE,GAAK,SAAU1wC,GAChB,OAAO,IAAIywC,EAAOzwC,EACtB,EAEOywC,EAASpB,EAAW,CACvBS,IACAN,EAAW,oBAAqB,CAAC7wC,UAClC6xC,EAEP,CAlBW,GAqCPG,GAlBO,WACP,SAASC,EAAI5wC,GACTuT,KAAK1V,KAAOmC,CAChB,CAQA,IAAI6wC,EAPJA,EAAQD,EACRA,EAAI7/B,UAAU7T,IAAM,SAAUgkC,GAC1B,OAAOA,EAAU4P,OAAOv9B,KAAK1V,KACjC,EACA+yC,EAAIF,GAAK,SAAU1wC,GACf,OAAO,IAAI6wC,EAAM7wC,EACrB,EAEA4wC,EAAMC,EAAQxB,EAAW,CACrBS,IACAN,EAAW,oBAAqB,CAAC7wC,UAClCiyC,EAEP,CAjBU,GAkBM,WACZ,SAASD,EAAS3wC,EAAK+wC,QACC,IAAhBA,IAA0BA,GAAc,GAC5Cx9B,KAAK1V,KAAOmC,EACZuT,KAAKy9B,aAAeD,CACxB,CAYA,IAAIE,EAKJ,OAhBAA,EAAaN,EACbA,EAAS5/B,UAAU7T,IAAM,SAAUgkC,GAC/B,OAAIA,EAAUgQ,YAAY39B,KAAK1V,KAAM0V,KAAKy9B,cAC/B9P,EAAUhkC,IAAIqW,KAAK1V,MAEvB,IACX,EACA8yC,EAASD,GAAK,SAAU1wC,EAAK+wC,GAEzB,YADoB,IAAhBA,IAA0BA,GAAc,GACrC,IAAIE,EAAWjxC,EAAK+wC,EAC/B,EAEWE,EAAa5B,EAAW,CAC/BS,IACAN,EAAW,oBAAqB,CAAC7wC,OAAQwyC,WAC1CR,EAEP,CAvBe,IAgLf,SAASS,EAAYpxC,GACjB,GAAIA,QACA,MAAM,IAAIue,MAAM,iHAExB,EA5Jc,WACV,SAAS8yB,EAAOrxC,GACZuT,KAAK1V,KAAOmC,CAChB,CAQA,IAAIsxC,EAPJA,EAAWD,EACXA,EAAOtgC,UAAU7T,IAAM,SAAUgkC,GAC7B,OAAOA,EAAUl9B,OAASk9B,EAAUl9B,OAAO9G,IAAIqW,KAAK1V,MAAQ,IAChE,EACAwzC,EAAOX,GAAK,SAAU1wC,GAClB,OAAO,IAAIsxC,EAAStxC,EACxB,EAEAqxC,EAASC,EAAWjC,EAAW,CAC3BS,IACAN,EAAW,oBAAqB,CAAC7wC,UAClC0yC,EAEP,EAjBa,GAkBE,WACX,SAASE,EAAQvxC,GACbuT,KAAK1V,KAAOmC,CAChB,CAmBA,IAAIwxC,EAlBJA,EAAYD,EACZA,EAAQxgC,UAAU7T,IAAM,SAAUgkC,GAC9B,IAAI3iC,EAAKgV,KAAK1V,KACViyC,EAAW5O,EAAUuQ,YAAYlzC,GAIrC,OAHIuxC,GAAYA,EAASxyC,WAAauyC,EAASS,WAC3C/xC,EAAKuxC,EAASrxC,OAEX,WAEH,IADA,IAAIi6B,EAAO,GACFntB,EAAK,EAAGA,EAAK9N,UAAUC,OAAQ6N,IACpCmtB,EAAKntB,GAAM9N,UAAU8N,GAEzB,OAAO21B,EAAUkP,OAAO7xC,EAAIm6B,EAChC,CACJ,EACA6Y,EAAQb,GAAK,SAAU1wC,GACnB,OAAO,IAAIwxC,EAAUxxC,EACzB,EAEAuxC,EAAUC,EAAYnC,EAAW,CAC7BS,IACAN,EAAW,oBAAqB,CAAC7wC,UAClC4yC,EAEP,CA5Bc,GA6BK,WACf,SAASG,EAAY1xC,GAEjB,IADA,IAAI2xC,EAAsB,GACjBpmC,EAAK,EAAGA,EAAK9N,UAAUC,OAAQ6N,IACpComC,EAAoBpmC,EAAK,GAAK9N,UAAU8N,GAE5CgI,KAAKvT,IAAMA,EACXuT,KAAKq+B,MAAQ5xC,EACbuT,KAAKo+B,oBAAsBA,CAC/B,CA8BA,IAAIE,EA7BJA,EAAgBH,EAChBA,EAAY3gC,UAAU7T,IAAM,SAAUgkC,GAClC,IAAIyQ,EAAsBp+B,KAAKo+B,oBAAoBj0C,OAAS,EACtD6V,KAAKo+B,oBAAoBh8C,KAAI,SAAUm8C,GACrC,OAAOA,EAAW,6BACZA,EAAW50C,IAAIgkC,GACfA,EAAUhkC,IAAI40C,EACxB,SACE3wC,EACF5C,EAAKgV,KAAKvT,IACV8vC,EAAW5O,EAAUuQ,YAAYlzC,GACjCuxC,GAAkC,IAAtBA,EAASxyC,WACrBiB,EAAKuxC,EAASrxC,OAElB,IAAIU,EAAW+hC,EAAUkP,OAAO7xC,EAAIozC,GAEpC,OADAzQ,EAAU6Q,iBAAiBx+B,KAAKq+B,MAAOzyC,GAChCA,CACX,EACAuyC,EAAY3gC,UAAUihC,GAAK,SAAUhyC,GAEjC,OADAuT,KAAKq+B,MAAQ5xC,EACNuT,IACX,EACAm+B,EAAYhB,GAAK,SAAU1wC,GAEvB,IADA,IAAI2xC,EAAsB,GACjBpmC,EAAK,EAAGA,EAAK9N,UAAUC,OAAQ6N,IACpComC,EAAoBpmC,EAAK,GAAK9N,UAAU8N,GAE5C,OAAO,IAAKsmC,EAAc5yB,KAAK3D,MAAMu2B,EAAe,MAAC,EAAQ7xC,GAAK1F,OAAOq3C,IAC7E,EAEAD,EAAcG,EAAgBxC,EAAW,CACrCS,IACAN,EAAW,oBAAqB,CAAC7wC,OAAQA,UAC1C+yC,EAEP,CA7CkB,GA8GlB,IAAI/B,EAAmBhxC,OAAOwtC,OAAO,IACrC,kBAAwB,uBACxB,aAAmB,kBACnB,IAAI8F,EAAoBnC,EAASoC,UAC7BC,EAAqB,WACrB,SAASA,EAAkB5zC,EAAI6zC,EAASzZ,GACpCplB,KAAKhV,GAAKA,EACVgV,KAAK6+B,QAAUA,EACf7+B,KAAKolB,aAAeA,CACxB,CAMA,OALAwZ,EAAkBphC,UAAUq/B,OAAS,SAAUlP,EAAWyQ,GACtD,YAA+BxwC,IAAxBwwC,EACDp+B,KAAK6+B,QAAQC,8BAA8BnR,EAAW3tB,KAAKhV,GAAIgV,KAAKolB,aAAcgZ,GAClFp+B,KAAK6+B,QAAQhC,OAAOlP,EAAW3tB,KAAKhV,GAAIgV,KAAKolB,aACvD,EACOwZ,CACX,CAZwB,GAiCpBG,EAAe,CACflC,OAAQ,SAAUlP,EAAWqR,EAAMC,GAC/B,IAAIC,EAAYD,EAAK78C,KAAI,SAAUoH,GAAO,OAAOmkC,EAAUhkC,IAAIH,EAAM,IACrE,OAAO8gB,QAAQiuB,UAAUyG,EAAME,EACnC,EACAJ,8BAzBJ,SAAuCnR,EAAW3iC,EAAIm0C,EAAoBf,GAItE,IAHA,IAEI1iB,EAFApkB,EAAI6nC,EAAmBh1C,OACvBC,EAAO,IAAIC,MAAMiN,GAEdA,KAAK,CAER,GAAIokB,OADJA,EAASyjB,EAAmB7nC,IAExB,MAAM,IAAI0T,MAAM,oCACZ1T,EACA,yGAGJlN,EAAKkN,GAAKq2B,EAAUhkC,IAAI+xB,EAEhC,CAIA,YAH4B9tB,IAAxBwwC,IACAh0C,EAAOA,EAAKrD,OAAOq3C,IAEhB9zB,QAAQiuB,UAAUvtC,EAAIZ,EACjC,GAiBIg1C,EAAa,WACb,SAASA,EAAUC,QACOzxC,IAAlByxC,IACAA,EAAgB,CAAC,GAErBr/B,KAAKs/B,eAAiBD,EACtBr/B,KAAKu/B,kBAAoBF,EAAcG,iBACvCx/B,KAAKy/B,UACDJ,EAAcK,WAAaL,EAAcK,SAAW,IAAI72C,KAC5DmX,KAAK2/B,WAAa,IAAI92C,IACtBmX,KAAK4/B,KAAO5/B,KACZA,KAAKvP,OAAS,IAClB,CAgKA,OA/JA2uC,EAAU5hC,UAAUqiC,WAAa,WAE7B,OADAT,EAAUxzC,SAAWoU,KACdA,IACX,EACAo/B,EAAU5hC,UAAUsiC,0BAA4B,SAAUN,GACtDx/B,KAAKu/B,kBAAoBC,EACzBx/B,KAAKs/B,eAAeE,iBAAmBA,CAC3C,EACAJ,EAAU5hC,UAAUghC,iBAAmB,SAAU/xC,EAAKb,GAClD,OAAOoU,KAAK+/B,iBAAiBtzC,EAAK,IAAIkwC,EAAiB,OAAgB/uC,IAAbhC,EAAyBa,EAAMb,GAC7F,EACAwzC,EAAU5hC,UAAUwiC,kBAAoB,SAAUvzC,EAAKzB,GACnD,OAAOgV,KAAK+/B,iBAAiBtzC,EAAK,IAAIkwC,EAAiB,OAAU/uC,IAAP5C,EAAmByB,EAAMzB,GACvF,EACAo0C,EAAU5hC,UAAUyiC,kBAAoB,SAAUxzC,EAAKzB,GACnD,OAAOgV,KAAK+/B,iBAAiBtzC,EAAK,IAAIkwC,EAAiB,OAAU/uC,IAAP5C,EAAmByB,EAAMzB,GACvF,EACAo0C,EAAU5hC,UAAU0iC,gBAAkB,SAAUzzC,EAAKszB,GACjD,OAAO/f,KAAK+/B,iBAAiBtzC,EAAK,IAAIkwC,EAAiB,EAAG5c,GAC9D,EACAqf,EAAU5hC,UAAU2iC,cAAgB,SAAUC,EAAaC,GACvD,OAAOrgC,KAAK+/B,iBAAiBM,EAAU,IAAI1D,EAAiB,EAAGyD,GACnE,EACAhB,EAAU5hC,UAAUuiC,iBAAmB,SAAUtzC,EAAK6zC,GAClDzC,EAAYpxC,GACZ,IAAI8zC,EAAevgC,KAAK2/B,WACpB32C,EAASu3C,EAAa52C,IAAI8C,GAU9B,YATemB,IAAX5E,EACAu3C,EAAa12C,IAAI4C,EAAK6zC,GAEG,IAApBt3C,EAAOe,SACZf,EAAOkC,MAAMtB,KAAK02C,GAGlBC,EAAa12C,IAAI4C,EAAK,IAAIkwC,EAAiB,EAAG,CAAC3zC,EAAQs3C,KAEpDA,CACX,EACAlB,EAAU5hC,UAAUgjC,aAAe,SAAU/zC,EAAKzB,GAE9C,GAAkB,mBADlBA,OAAY4C,IAAP5C,EAAmByB,EAAMzB,GACA,CAC1B,IAAIy1C,EAAe,SAAa,kBAAuBz1C,GACvD,YAAqB4C,IAAjB6yC,EACOzgC,KAAK+/B,iBAAiBtzC,EAAK,IAAIkwC,EAAiB,EAAG3xC,IAEvDy1C,EAAaV,iBAAiB//B,KAAMvT,EAAKzB,EACpD,CACA,OAAOgV,KAAK+/B,iBAAiBtzC,EAAK,IAAIkwC,EAAiB,EAAG3xC,GAC9D,EACAo0C,EAAU5hC,UAAUkjC,gBAAkB,SAAUC,GAE5C,IADA,IAAIrpC,EAAIqpC,EAAIx2C,OACLmN,KACH0I,KAAKwgC,aAAaG,EAAIrpC,GAE9B,EACA8nC,EAAU5hC,UAAUojC,WAAa,SAAUn0C,GACvCuT,KAAK2/B,WAAWpjB,OAAO9vB,EAC3B,EACA2yC,EAAU5hC,UAAUmgC,YAAc,SAAUlxC,EAAK+wC,GAG7C,YAFoB,IAAhBA,IAA0BA,GAAc,GAC5CK,EAAYpxC,GACJuT,KAAK2/B,WAAWl2C,IAAIgD,IACvB+wC,GACmB,OAAhBx9B,KAAKvP,QACLuP,KAAKvP,OAAOktC,YAAYlxC,EAAK+wC,EACzC,EACA4B,EAAU5hC,UAAU0gC,YAAc,SAAUzxC,GACxC,OAAOuT,KAAK2/B,WAAWh2C,IAAI8C,EAC/B,EACA2yC,EAAU5hC,UAAU7T,IAAM,SAAU8C,GAEhC,GADAoxC,EAAYpxC,GACRA,IAAQ2yC,EACR,OAAOp/B,KAEX,GAAI0+B,EAAkBjyC,GAClB,OAAOA,EAAI9C,IAAIqW,KAAMvT,GAEzB,IAAI6zC,EAActgC,KAAK2/B,WAAWh2C,IAAI8C,GACtC,QAAoBmB,IAAhB0yC,EAA2B,CAC3B,GAAoB,OAAhBtgC,KAAKvP,OACL,OAAOuP,KAAKwgC,aAAa/zC,GAAK9C,IAAIqW,KAAMvT,GAE5C,IAAIg0C,EAAe,SAAa,kBAAuBh0C,GACvD,YAAqBmB,IAAjB6yC,EACOzgC,KAAKvP,OAAOowC,KAAKp0C,GAErBg0C,EAAaV,iBAAiB//B,KAAMvT,EAAKA,GAAK9C,IAAIqW,KAAMvT,EACnE,CACA,OAAO6zC,EAAY32C,IAAIqW,KAAMvT,EACjC,EACA2yC,EAAU5hC,UAAUqjC,KAAO,SAAUp0C,GACjC,IAAI6zC,EAActgC,KAAK2/B,WAAWh2C,IAAI8C,GACtC,YAAoBmB,IAAhB0yC,EACoB,OAAhBtgC,KAAKvP,OACEuP,KAAKwgC,aAAa/zC,GAAK9C,IAAIqW,KAAMvT,GAErCuT,KAAKvP,OAAOowC,KAAKp0C,GAErB6zC,EAAY32C,IAAIqW,KAAMvT,EACjC,EACA2yC,EAAU5hC,UAAU+/B,OAAS,SAAU9wC,GACnCoxC,EAAYpxC,GACZ,IAAI6zC,EAActgC,KAAK2/B,WAAWh2C,IAAI8C,GACtC,QAAoBmB,IAAhB0yC,EACA,OAAoB,OAAhBtgC,KAAKvP,OACE2rC,EAEJp8B,KAAKvP,OAAO8sC,OAAO9wC,GAE9B,GAA6B,IAAzB6zC,EAAYv2C,SAAgB,CAI5B,IAHA,IAAImB,EAAQo1C,EAAYp1C,MACpBoM,EAAIpM,EAAMf,OACVknB,EAAU,IAAIhnB,MAAMiN,GACjBA,KACH+Z,EAAQ/Z,GAAKpM,EAAMoM,GAAG3N,IAAIqW,KAAMvT,GAEpC,OAAO4kB,CACX,CACA,MAAO,CAACivB,EAAY32C,IAAIqW,KAAMvT,GAClC,EACA2yC,EAAU5hC,UAAUsjC,YAAc,WAC9B,IAAIpwC,EAAQ,IAAI0uC,EAAUp/B,KAAKs/B,gBAG/B,OAFA5uC,EAAMkvC,KAAO5/B,KAAK4/B,KAClBlvC,EAAMD,OAASuP,KACRtP,CACX,EACA0uC,EAAU5hC,UAAUq/B,OAAS,SAAU7xC,EAAIozC,GACvC,IACI,IAAIre,EAAU/f,KAAKy/B,UAAU91C,IAAIqB,GAKjC,YAJgB4C,IAAZmyB,IACAA,EAAU/f,KAAK+gC,yBAAyB/1C,GACxCgV,KAAKy/B,UAAU51C,IAAImB,EAAI+0B,IAEpBA,EAAQ8c,OAAO78B,KAAMo+B,EAChC,CACA,MAAOjL,GACH,MAAM,IAAI,KAAe,kBAAoBnoC,EAAG5B,KAAO,uCAAwC+pC,GAAG,EACtG,CACJ,EACAiM,EAAU5hC,UAAUujC,yBAA2B,SAAU/1C,GACrD,IAAIo6B,EAlKa4b,EAmKjB,QAAkBpzC,IAAd5C,EAAGihC,OACH7G,EACI,YAAgB,gBAAqBp6B,IAAOoxC,MAE/C,CACDhX,EAAe,GAEf,IADA,IAAI6b,EAAOj2C,EACY,mBAATi2C,GACV7b,EAAax7B,KAAKme,MAAMqd,GA3Kf4b,EA2K6CC,GA1K3D1xC,eAAe,UAGE,mBAAbyxC,EAAE/U,OACF+U,EAAE/U,SAEN+U,EAAE/U,OALE,IA0KCgV,EAAO71C,OAAO81C,eAAeD,EAErC,CACA,IAAIpC,EAAU,YAAgB,aAAkB7zC,IAAO+zC,EACnDhf,EAAU,IAAI6e,EAAkB5zC,EAAI6zC,EAASzZ,GACjD,YAAkCx3B,IAA3BoS,KAAKu/B,kBACNv/B,KAAKu/B,kBAAkBxf,GACvBA,CACV,EACOqf,CACX,CA7KgB,GA0LZ+B,EAAkB,WAClB,SAASA,IACT,CAoBA,OAnBAA,EAAe3jC,UAAUq/B,OAAS,SAAUlP,EAAW3iC,EAAIo6B,GAGvD,IAFA,IAAI9tB,EAAI8tB,EAAaj7B,OACjBC,EAAO,IAAIC,MAAMiN,GACdA,KACHlN,EAAKkN,GAAKq2B,EAAUhkC,IAAIy7B,EAAa9tB,IAEzC,OAAOtM,EAAG+c,WAAMna,EAAWxD,EAC/B,EACA+2C,EAAe3jC,UAAUshC,8BAAgC,SAAUnR,EAAW3iC,EAAIm0C,EAAoBf,GAGlG,IAFA,IAAI9mC,EAAI6nC,EAAmBh1C,OACvBC,EAAO,IAAIC,MAAMiN,GACdA,KACHlN,EAAKkN,GAAKq2B,EAAUhkC,IAAIw1C,EAAmB7nC,IAK/C,YAH4B1J,IAAxBwwC,IACAh0C,EAAOA,EAAKrD,OAAOq3C,IAEhBpzC,EAAG+c,WAAMna,EAAWxD,EAC/B,EACO+2C,CACX,CAvBqB,GA0BrB,SAASV,EAAazuC,GAClB,OAAO,SAAUlL,GACb,YAAgB,kBAAuBkL,EAAOlL,EAClD,CACJ,CACA,SAASg2C,EAAUrwC,GACf,OAAOg0C,EAAa,IAAIW,EAAsB30C,GAClD,CACA,SAASmwC,EAAUyE,EAAsBC,GAErC,YADwB,IAApBA,IAA8BA,GAAkB,GAC7Cb,EAAa,IAAIc,EAAsBF,EAAsBC,GACxE,CAbAH,EAAev1C,SAAW,IAAIu1C,EAc9B,IAAIC,EAAyB,WACzB,SAASA,EAAsB30C,GAC3BuT,KAAK1V,KAAOmC,CAChB,CAOA,OANA20C,EAAsB5jC,UAAUuiC,iBAAmB,SAAUpS,EAAWlhC,EAAKzB,GACzE,IAAIw2C,EAAmB7T,EAAUuQ,YAAYl+B,KAAK1V,MAAQmC,GAC1D,YAA4BmB,IAArB4zC,EACD7T,EAAUsS,kBAAmBjgC,KAAK1V,MAAQmC,EAAMzB,GAChDw2C,CACV,EACOJ,CACX,CAX4B,GAYxBG,EAAyB,WACzB,SAASA,EAAsBF,EAAsBC,QACzB,IAApBA,IAA8BA,GAAkB,GAChB,kBAAzBD,EACPrhC,KAAKyhC,iBAAmBJ,GAGxBrhC,KAAK1V,KAAO+2C,EACZrhC,KAAKyhC,iBAAmBH,EAEhC,CAQA,OAPAC,EAAsB/jC,UAAUuiC,iBAAmB,SAAUpS,EAAWlhC,EAAKzB,GACzE,IAAI02C,EAAkB1hC,KAAKyhC,iBAAmB9T,EAAYA,EAAUiS,KAChE4B,EAAmBE,EAAgBxD,YAAYl+B,KAAK1V,MAAQmC,GAChE,YAA4BmB,IAArB4zC,EACDE,EAAgB1B,kBAAkBhgC,KAAK1V,MAAQmC,EAAKzB,GACpDw2C,CACV,EACOD,CACX,CAnB4B,qTClnBxBI,EACA,WACI3hC,KAAK4hC,MAAO,EACZ5hC,KAAK6hC,eAAiB,IACtB7hC,KAAK8hC,sBAAuB,EAC5B9hC,KAAK+hC,gBAAiB,EACtB/hC,KAAKgiC,mBAAoB,EACzBhiC,KAAKiiC,aAAe,SAAUC,GAAqB,OAAOA,EAAkBC,OAAS,CACzF,EAIAC,EAAa,CACbC,GAAI,WAAc,OAAO,8BAAkC10C,MAAK,SAAUjB,GAAK,OAAOA,EAAE41C,cAAgB,GAAI,EAC5GC,OAAQ,WAAc,OAAO,8BAAsC50C,MAAK,SAAUjB,GAAK,OAAOA,EAAE81C,oBAAsB,GAAI,GAE1HC,EAAoB,CACpB,YAAa,WAAc,OAAO,6BAAyB90C,MAAK,SAAUjB,GAAK,OAAOA,EAAEg2C,QAAU,GAAI,EACtG,mBAAoB,WAAc,OAAO,8BAAgC/0C,MAAK,SAAUjB,GAAK,OAAOA,EAAEi2C,cAAgB,GAAI,EAC1H,iBAAkB,WAAc,OAAO,6BAA8Bh1C,MAAK,SAAUjB,GAAK,OAAOA,EAAEk2C,YAAc,GAAI,EACpH,mBAAoB,WAAc,OAAO,4BAAgCj1C,MAAK,SAAUjB,GAAK,OAAOA,EAAEm2C,cAAgB,GAAI,EAC1H,eAAgB,WAAc,OAAO,8BAA4Bl1C,MAAK,SAAUjB,GAAK,OAAOA,EAAEo2C,WAAa,GAAI,GAE/GC,EAAmB,WAAc,OAAO,6BAA8Bp1C,MAAK,SAAUq1C,GAAQ,OAAOA,EAAc,OAAG,GAAI,EACzHC,EAAuB,WACvB,SAASA,EAAoBC,EAAwBC,GACjD,IAAI7+B,EAAQtE,KACZA,KAAKojC,SAAW,KAChBpjC,KAAKgiB,QAAU+gB,EACf/iC,KAAKqjC,UAAY,GACjBrjC,KAAKsjC,SAAWJ,EAChBljC,KAAKujC,SAAWL,EAAuBvV,UAAUhkC,IAAIg4C,GACrDwB,GAAY,WAAc,OAAO7+B,EAAMk/B,QAAU,GACrD,CAqDA,OApDAP,EAAoBzlC,UAAUgmC,OAAS,WACnC,IAAIl/B,EAAQtE,KACRojC,EAAWpjC,KAAKojC,SAChBphB,EAAUhiB,KAAKgiB,QACnB,OAAOt0B,EACFkT,IAAI,CACe,iBAAbwiC,EAAwBhB,EAAWgB,KAAcA,EACxDphB,EACyB,iBAAZA,EACHA,EACAA,IACJ,KAELr0B,MAAK,SAAU0tC,GAChB,IAAIoI,EAAepI,EAAG,GAAIqI,EAAWrI,EAAG,GACpCiI,EAAWh/B,EAAMg/B,SAKrB,OAJAA,EAASxG,UAAU,IAAU2G,GACzBC,GACA,kBAAiBA,GAEdh2C,EACFkT,IAAI0D,EAAM++B,UAAUjhD,KAAI,SAAUgH,GAAQ,OAAOq5C,EAAkBr5C,IAAS,KAC5EuE,MAAK,SAAUg2C,GAChBL,EAASM,gBAAgBD,EAC7B,GACJ,GACJ,EACAV,EAAoBzlC,UAAUqmC,YAAc,WACxC,OAAO7jC,KACF8jC,YAAY,MACZC,OAAOhB,GACPiB,sBACT,EACAf,EAAoBzlC,UAAUwmC,qBAAuB,WAEjD,OADA54C,OAAOoB,KAAKi2C,GAAmBl5C,QAAQyW,KAAKikC,YAAajkC,MAClDA,IACX,EACAijC,EAAoBzlC,UAAUymC,YAAc,SAAUC,GAElD,OADAlkC,KAAKqjC,UAAUz5C,KAAKs6C,GACblkC,IACX,EACAijC,EAAoBzlC,UAAUsmC,YAAc,SAAUV,EAAUG,GAK5D,OAJAvjC,KAAKojC,SAAWA,EACZG,GACAn4C,OAAOC,OAAO2U,KAAKujC,SAAUA,GAE1BvjC,IACX,EACAijC,EAAoBzlC,UAAUumC,OAAS,SAAU/hB,GAE7C,OADAhiB,KAAKgiB,QAAUA,EACRhiB,IACX,EACOijC,CACX,CA/D0B,GAiE1B,SAASkB,EAAWC,EAAaC,GAC7B,OAAOrkC,KAAKrS,MAAK,SAAUwqC,GAAK,OAAOA,EAAEmM,aAAenM,EAAIA,EAAEoM,WAAa,IAAG52C,KAAKy2C,EAAaC,EACpG,CAKA,IAAIG,EAAiB,WACjB,SAASA,EAAc7W,EAAW8W,EAAmBC,GACjD1kC,KAAK2kC,YAAc,GACnB3kC,KAAK4kC,eAAgB,EACrB5kC,KAAK6kC,iBAAkB,EACvB7kC,KAAK2tB,UAAYA,EACjB3tB,KAAKykC,kBAAoBA,EACzBzkC,KAAK0kC,gBAAkBA,CAC3B,CAyHA,OAxHAF,EAAchnC,UAAUsnC,iBAAmB,SAAUvB,GACjD,IAAKA,EAASvU,YAAcuU,EAAS3Z,KACjC,MAAM,IAAI5e,MAAM,yEAExB,EACAw5B,EAAchnC,UAAUunC,yBAA2B,SAAUC,EAAgB3+C,EAAMk9C,GAC/E,MAAO,CACH5V,UAAWqX,EAAev0C,OAC1Bu0C,eAAgBA,EAChBhmC,eAAgB,KAChBimC,cAAe,KACf9hB,MAAOogB,EAASpgB,MAChByG,KAAM2Z,EAAS3Z,KACfoF,UAAWuU,EAASvU,UACpBkW,SAAU,IAAI,KAAS7+C,GAAM,GAC7BA,KAAMA,EAEd,EACAm+C,EAAchnC,UAAU2nC,gBAAkB,SAAUC,GAChD,MAA4C,iBAAjCA,EAAmBpW,UACnBthC,EAAQD,QAAQ23C,GAEpBplC,KAAKykC,kBAAkBU,gBAAgBC,EAClD,EACAZ,EAAchnC,UAAU6nC,iBAAmB,SAAUtD,GACjD,IAAKA,EACD,MAAO,CAAEuC,cAAc,GAE3B,MAAM,QACV,EACAE,EAAchnC,UAAU8nC,qBAAuB,SAAUF,EAAoBG,GACzE,IAAIjhC,EAAQtE,KAIZ,OAHKolC,EAAmBpW,YACpBoW,EAAmBpmC,eAAiB,CAAE+vB,WAAYwW,IAE/CvlC,KAAKykC,kBACPe,QAAQJ,GACRz3C,MAAK,SAAUohC,GAEhB,OADAwW,EAAiBxW,WAAaA,EACvBwW,EAAiBnC,SACnBqC,WAAWF,GACX53C,MAAK,WACN2W,EAAMqgC,YAAY/6C,KAAK27C,GACvBjhC,EAAMugC,gBAAkBvgC,EAAMsgC,gBAAkBtgC,EAAMqgC,YAAYx6C,MACtE,IAAG,SAAUu7C,GAIT,OAHI3W,EAAWC,YACX,OAAgBD,EAAWC,UAAW,cAEnCthC,EAAQ8sC,OAAOkL,EAC1B,GACJ,GACJ,EACAlB,EAAchnC,UAAUmoC,eAAiB,SAAUpC,GAc/C,MAZiC,kBADjCA,EAAWn4C,OAAOC,OAAO,CAAC,EAAG2U,KAAK0kC,gBAAiBnB,IAC/BqC,UAA2BrC,EAASqC,WACpDrC,EAASqC,UAAYrC,EAAS3B,MAEK,kBAA5B2B,EAASsC,iBAChBtC,EAASsC,gBAAkBtC,EAAS3B,MAExCx2C,OAAOgS,eAAemmC,EAAU,iBAAkB,CAC9CpmC,UAAU,EACVD,cAAc,EACdD,YAAY,IAEhB+C,KAAK8kC,iBAAiBvB,GACfA,CACX,EACAiB,EAAchnC,UAAUsoC,KAAO,SAAUvC,GACrC,IAAIj/B,EAAQtE,UACK,IAAbujC,IAAuBA,EAAW,CAAC,GAEvC,IACIwC,EACAC,EAFAhB,GADJzB,EAAWvjC,KAAK2lC,eAAepC,IACDyB,gBAAkBhlC,KAAK2tB,UAAUmT,cAG3DyD,EAAc,IAAI72C,GAAQ,SAAUD,EAAS+sC,GAC7CuL,EAAqBt4C,EACrBu4C,EAAoBxL,CACxB,IACI+K,EAAmBP,EAAenI,OAAO,IAAkB,CAAC0G,EAAUwC,EAAoBC,IAC9FhB,EAAexG,iBAAiB,IAAkB+G,GAClDhB,EAAY52C,MAAK,WACbs4C,EAAiB3hC,EAAOihC,EAC5B,IAAG,WACCU,EAAiB3hC,EAAOihC,EAC5B,IACA,IAnGqBW,EAmGjBd,EAAqBplC,KAAK+kC,yBAAyBC,EAAgBO,EAAiBnC,SAAS+C,qBAAsBZ,EAAiBhC,UAaxI,OAhHqB2C,EAoGJlmC,KAAKmlC,gBAAgBC,GAAoBz3C,MAAK,SAAUy3C,GACrE,OAAKA,EAAmBpW,YAGjB,OAAgBoW,EAAmBpW,UAAW,cAAeuW,EAAiBhC,SAASpgB,MAClG,IAAGx1B,MAAK,SAAUy4C,GACd,OAAKA,EAGE9hC,EAAMghC,qBAAqBF,EAAoBG,GACjD53C,MAAK,WAAc,MAAO,CAAGohC,WAAYwW,EAAkBhB,YAAaA,EAAaD,cAAc,EAAU,IAHvGhgC,EAAM+gC,iBAAiBE,EAAiBhC,SAASxB,eAIhE,KA9GIoC,WAAaA,EACd+B,CA+GP,EACA1B,EAAchnC,UAAU6oC,SAAW,WAC/B,OAAO34C,EAAQkT,IAAIZ,KAAK2kC,YAAYxsC,MAAM,GAAG/V,KAAI,SAAU2sC,GACvD,OAAKA,EAAWwU,SAASxB,eAQlBhT,EAAWuX,SAAS34C,MAAK,WAAc,OAAO,IAAM,IAAGkuC,OAAM,SAAU6J,GAC1E,GAAIA,EAAOpB,aACP,OAAOvV,EAEX,MAAM2W,CACV,IAZW3W,EAAWuX,SAAS34C,MAAK,SAAU3E,GACtC,OAAIA,EAAOs7C,aACAvV,EAEJ,IACX,GAQR,KAAIphC,MAAK,SAAU44C,GAAuB,OAAOA,EAAoB3+C,QAAO,SAAU4+C,GAAY,QAASA,CAAU,GAAI,GAC7H,EACAhC,EAAcvY,OAAS,CAAC,KAAW,KAAmB0V,GAC/C6C,CACX,CAlIoB,GAmIpB,SAASyB,EAAiBQ,EAASlB,GAC/B,IAAIjuC,EAAImvC,EAAQ9B,YAAYp+C,QAAQg/C,IACzB,IAAPjuC,IACAmvC,EAAQ9B,YAAYhjC,OAAOrK,EAAG,GAC9BmvC,EAAQ5B,gBAAkB4B,EAAQ7B,gBAAkB6B,EAAQ9B,YAAYx6C,OAEhF,CAEA,SAAS6vC,EAAU0M,EAAiBppB,GAChC,IAAIqpB,EAAc,KACdnnB,EAAS,IAAIyjB,EAAoByD,GAAiB,SAAU3+B,GAAS4+B,EAAc5+B,CAAO,IAO9F,MANwB,mBAAbuV,EACPA,EAASkC,GAGTA,EAAOqkB,cAEJ8C,GACX,8FC3PIC,EAAY,WACZ,SAASA,IACT,CAUA,OATAA,EAASppC,UAAU2oC,mBAAqB,WACpC,MAAM,IAAIn7B,MAAM,sDACpB,EACA47B,EAASppC,UAAUioC,WAAa,SAAUF,GACtC,MAAM,IAAIv6B,MAAM,8CACpB,EACA47B,EAASppC,UAAUqpC,WAAa,SAAUtB,GACtC,MAAM,IAAIv6B,MAAM,8CACpB,EACO47B,CACX,CAbe,GAef,SAASE,EAAwBC,GAC7B,IAAIr9B,EAAQ,IAAIsB,MAAM,wBAGtB,OAFAtB,EAAM46B,cAAe,EACrB56B,EAAMq9B,OAASA,EACRr9B,CACX,CAEA,SAASs9B,EAAuBD,GAC5B,IAAIr9B,EAAQ,IAAIsB,MAGhB,OAFAtB,EAAM46B,cAAe,EACrB56B,EAAMq9B,OAASA,EACRr9B,CACX,CAEA,SAASu9B,EAAgBr7C,EAAUxC,EAAM+5B,GACrC,MAA8B,mBAAnBv3B,EAASxC,GACT,IAAIsE,GAAQ,SAAUD,GACzBA,EAAQ7B,EAASxC,GAAM+5B,GAC3B,IAAGx1B,MAAK,SAAU3E,GACd,OAAIA,SACOA,CAGf,IAEG0E,EAAQD,SAAQ,EAC3B,CAEA,IAAIy5C,EAAoB,WACpB,SAASA,EAAiB9D,EAAUG,EAAU91C,EAAS+sC,GACnDx6B,KAAKvS,QAAUA,EACfuS,KAAKw6B,OAASA,EACdx6B,KAAKujC,SAAWA,EAChBvjC,KAAKojC,SAAWA,CACpB,CAwDA,OAvDA8D,EAAiB1pC,UAAU2pC,iBAAmB,SAAUn+C,GACpD,IAAIsb,EAAQtE,KACZ,OAAOinC,EAAgBjnC,KAAK+uB,WAAWC,WAAa,CAAC,EAAG,aAAchmC,GACjE2E,MAAK,WAAc,OAAO2W,EAAM8+B,SAASyD,WAAWviC,EAAQ,IAC5D3W,MAAK,WACN2W,EAAMyqB,WAAWhjB,QACrB,GACJ,EACAm7B,EAAiB1pC,UAAU4pC,gBAAkB,WACzC,IAAKpnC,KAAKujC,SAASxB,eACf,MAAO,CAAEuC,cAAc,GAE3B,MAAMwC,GACV,EACAI,EAAiB1pC,UAAU6pC,GAAK,SAAUN,GACtC,OAAO/mC,KAAKsnC,OAAM,EAAMP,EAC5B,EACAG,EAAiB1pC,UAAU8oC,OAAS,SAAUS,GAC1C,OAAO/mC,KAAKsnC,OAAM,EAAOP,EAC7B,EACAG,EAAiB1pC,UAAUkM,MAAQ,SAAUq9B,GACzC,IAAIziC,EAAQtE,KACRunC,EAAaP,EAAuBD,GACxC,OAAO/mC,KAAKmnC,iBAAiBI,GAAY55C,MAAK,WAAc2W,EAAMk2B,OAAO+M,EAAa,GAC1F,EACAL,EAAiB1pC,UAAU8pC,MAAQ,SAAUD,EAAIN,GAC7C,IAAIziC,EAAQtE,KACZ,GAAIA,KAAKwnC,aACL,OAAOxnC,KAAKwnC,aAEhB,IAAIC,EAAe,CAAEnD,cAAe+C,EAAIN,OAAQA,GAChD,OAAO/mC,KAAKwnC,aAAeP,EAAgBjnC,KAAK+uB,WAAWC,WAAa,CAAC,EAAG,gBAAiByY,GACxF5L,OAAM,SAAU6J,GAEjB,OADAphC,EAAMkjC,kBAAe55C,EACdF,EAAQ8sC,OAAOkL,EAC1B,IAAG/3C,MAAK,SAAU+5C,GACd,OAAKA,EAIEpjC,EAAM6iC,iBAAiBM,GAAc95C,MAAK,WAO7C,OANK2W,EAAMi/B,SAASxB,gBAAkBsF,EAClC/iC,EAAM7W,QAAQg6C,GAGdnjC,EAAMk2B,OAAOsM,EAAwBC,IAElC,CAAEzC,cAAc,EAC3B,IAAGzI,OAAM,SAAU6J,GAEf,OADAphC,EAAMkjC,kBAAe55C,EACdF,EAAQ8sC,OAAOkL,EAC1B,KAdIphC,EAAMkjC,kBAAe55C,EACd0W,EAAM8iC,kBAcrB,GACJ,EACAF,EAAiBjb,OAAS,CAAC2a,GACpBM,CACX,CA/DuB,2FCvCnBtmB,UAAS,UAAqB,oBAE9B+mB,EAAU,WACZ,SAASA,EAAQC,EAAatqB,GAG5Btd,KAAK4nC,YAAcA,EACnB5nC,KAAKsd,SAAWA,CAClB,CAQA,OANAqqB,EAAQnqC,UAAUqqC,OAAS,SAAgBpuB,GACrCA,aAAmBzZ,KAAK4nC,aAC1B5nC,KAAKsd,SAAStf,KAAK,KAAMyb,EAE7B,EAEOkuB,CACT,CAfc,GAiBd,SAASG,EAAexqB,EAAU/wB,EAAMqwB,GACtC,IACEU,EAAS/wB,EAAMqwB,EACjB,CAAE,MAAOuW,GACPvS,EAAOlX,MAAMypB,EACf,CACF,CAEA,SAAS4U,EAAchoB,EAASxzB,GAC9B,IACEwzB,EAAQ8nB,OAAOt7C,EACjB,CAAE,MAAO4mC,GACPvS,EAAOlX,MAAMypB,EACf,CACF,CAEO,IAAI6U,EAAkB,WAC3B,SAASA,IAGPhoC,KAAKioC,YAAc,CAAC,EACpBjoC,KAAKkoC,gBAAkB,EACzB,CAmEA,OAjEAF,EAAgBxqC,UAAU2qC,QAAU,SAAiBvrB,EAAOrwB,GAC1D,IAAI67C,OAAc,EACd9wC,OAAI,EAER,IAAKslB,EACH,MAAM,IAAI5R,MAAM,sBAGlB,GAAqB,iBAAV4R,GAET,GADAwrB,EAAcpoC,KAAKioC,YAAYrrB,GAK7B,IAFAtlB,GADA8wC,EAAcA,EAAYjwC,SACVhO,OAETmN,KACLwwC,EAAeM,EAAY9wC,GAAI/K,EAAMqwB,QAOzC,IAFAtlB,GADA8wC,EAAcpoC,KAAKkoC,gBAAgB/vC,SACnBhO,OAETmN,KACLywC,EAAcK,EAAY9wC,GAAIslB,EAGpC,EAEAorB,EAAgBxqC,UAAU0C,UAAY,SAAmB0c,EAAOU,GAC9D,IAAIyC,OAAU,EACVqoB,OAAc,EAElB,IAAKxrB,EACH,MAAM,IAAI5R,MAAM,mCAalB,MAVqB,iBAAV4R,GACTmD,EAAUzC,EACV8qB,EAAcpoC,KAAKioC,YAAYrrB,KAAW5c,KAAKioC,YAAYrrB,GAAS,MAEpEmD,EAAU,IAAI4nB,EAAQ/qB,EAAOU,GAC7B8qB,EAAcpoC,KAAKkoC,iBAGrBE,EAAYx+C,KAAKm2B,GAEV,CACLvb,QAAS,WACP,IAAIuP,EAAMq0B,EAAY7hD,QAAQw5B,IACjB,IAAThM,GACFq0B,EAAYzmC,OAAOoS,EAAK,EAE5B,EAEJ,EAEAi0B,EAAgBxqC,UAAU6qC,cAAgB,SAAuBzrB,EAAOU,GACtE,IAAIgrB,EAAMtoC,KAAKE,UAAU0c,GAAO,SAAU7lB,EAAGC,GAE3C,OADAsxC,EAAI9jC,UACG8Y,EAASvmB,EAAGC,EACrB,IAEA,OAAOsxC,CACT,EAEON,CACT,CA1E6B,GA8FtB,SAAShO,EAAUxa,GAlBnB,IAAyB5hB,EAC1B2qC,EAkBJ/oB,EAAO5zB,SAASo8C,GAnBcpqC,EAmBmB4hB,EAAOoa,QAlBpD2O,EAAK,IAAIP,EAEbpqC,EAAIyqC,cAAgB,SAAUzrB,EAAOU,GACnC,OAAOirB,EAAGF,cAAczrB,EAAOU,EACjC,EAEA1f,EAAIsC,UAAY,SAAU0c,EAAOU,GAC/B,OAAOirB,EAAGroC,UAAU0c,EAAOU,EAC7B,EAEA1f,EAAIuqC,QAAU,SAAUvrB,EAAOrwB,GAC7Bg8C,EAAGJ,QAAQvrB,EAAOrwB,EACpB,EAEOg8C,GAKT,mgBCvHI3nB,EAAS,YAAwB,WACjC4nB,EAAa,YACjB,SAASC,EAASjpB,EAAQkpB,GACtB,IAAIr8C,EACAwE,EAAO,WAEP,OADAxE,EAAUq8C,EAAMx+B,SAELxc,EAAQD,QAAQpB,EAAQmzB,IAAS7xB,KAAKkD,GAE1CnD,EAAQD,SACnB,EACA,OAAOoD,GACX,CAmFA,SAAS83C,EAAOv/C,GACZ,IAAIw/C,EAAQx/C,EAAKw/C,MAAMJ,GACvB,GAAII,GAASA,EAAMz+C,OAAS,EACxB,OAAQy+C,EAAM,GAAG36C,MAAM,KAAM,EAErC,CAMA,SAAS46C,EAAgBC,GACrB,GAAIA,EAAQC,UACR,MAAM,IAAI/9B,MAAM,yIAExB,CACA,SAASg+B,EAAiBC,EAAKtgC,GAC3B,MAAO,WAAW5hB,OAAO4hB,EAAM,MAAM5hB,OAAOkiD,EAAK,OAAOliD,OAAO4hB,EAAM,0DACzE,CACA,IAAIugC,EAA0B,WAC1B,SAASA,EAAuBtP,GAC5B,IAAIt1B,EAAQtE,KACZA,KAAK45B,QAAUA,EACf55B,KAAK2tB,UAAYiM,EAAQjM,UACzB3tB,KAAKmpC,KAAO,GACZnpC,KAAK+oC,WAAY,EACjB/oC,KAAKopC,SAAW,GAChBppC,KAAKqpC,UAAY,GACjBrpC,KAAKspC,gBAAkB,GACvBtpC,KAAKupC,kBAAoB,GACzBvpC,KAAKwpC,gBAAkB,CAAC,EACxBxpC,KAAKypC,SAAQ,WAAc,OAAO7P,EAAQC,OAAOc,UAAU,4BAAwB/sC,GAC9ED,MAAK,SAAUvE,GAAQ,OAAOkb,EAAM42B,iBAAmB9xC,CAAM,GAAI,IACtE4W,KAAK0pC,UAAS,WAAc,OA/EpC,SAAuB9P,EAAS4P,EAAiBG,GAC7C,GAA4C,IAAxCv+C,OAAOoB,KAAKg9C,GAAiBr/C,OAC7B,OAAOuD,EAAQD,UAEnB,IAAIm8C,EAAahQ,EAAQjM,UAAUhkC,IAAI,MACvC,OAAO+D,EAAQkT,IAAIxV,OAAOoB,KAAKg9C,GAAiBpnD,KAAI,SAAU2zC,GAAK,OAW3D0E,GADY1M,EAViEyb,EAAgBzT,IAW7E0E,SAChBoP,EAAMlB,EAAOlO,GACbqP,EAAgBrP,KAChBA,EAAWsP,EAAUtP,IAElBb,EAAQC,OAAOc,UAAUF,EAAU1M,EAAK2M,YAC1C/sC,MAAK,SAAUitC,GAChB,MAAO,CACHxxC,KAAM2kC,EAAK0M,SACXuP,SAAUF,EAAgB/b,EAAK0M,UAAYwP,EAAerP,EAAYiP,GAAOjP,EAErF,IAZJ,IAAoB7M,EACZ0M,EACAoP,CAZkG,KACrGl8C,MAAK,SAAUu8C,GAChB,IAAInlB,EAAQ,GACRolB,EAAY,GAKhB,OAJAD,EAAM3gD,SAAQ,SAAU6gD,GACpBrlB,EAAMn7B,UAAKgE,GACXu8C,EAAUvgD,KAAKwgD,EAAEJ,SACrB,IACOJ,EAAWS,oBAAoBF,EAAWplB,EAAO4kB,EAC5D,IAeA,SAASG,EAAgB1gD,GACrB,IAAIygD,EAAMlB,EAAOv/C,GACjB,QAAKygD,GAEO,KAARA,GAEQ,QAARA,GAAyB,QAARA,CAGzB,CACA,SAASE,EAAU3gD,GACf,OAAOA,EAAKiH,QAAQm4C,EAAY,GACpC,CACA,SAASyB,EAAerP,EAAYiP,GAChC,OAAOE,EAAUnP,GAAc,IAAMiP,CACzC,CACJ,CAkC2CS,CAAc1Q,EAASt1B,EAAMklC,gBAAiB5P,EAAQyJ,UAAY,GACzG,CAmKA,OAlKA6F,EAAuB1rC,UAAU5R,SAAW,SAAU+c,EAAM/c,GAExD,OADAoU,KAAK2tB,UAAU6Q,iBAAiB71B,EAAM/c,GAC/BoU,IACX,EACAkpC,EAAuB1rC,UAAUo/B,UAAY,SAAUj0B,EAAM4hC,GAEzD,OADAvqC,KAAK2tB,UAAUqS,kBAAkBr3B,EAAM4hC,GAChCvqC,IACX,EACAkpC,EAAuB1rC,UAAUs/B,UAAY,SAAUn0B,EAAM4hC,GAEzD,OADAvqC,KAAK2tB,UAAUsS,kBAAkBt3B,EAAM4hC,GAChCvqC,IACX,EACAkpC,EAAuB1rC,UAAUisC,QAAU,SAAUe,GAGjD,OAFA3B,EAAgB7oC,MAChBA,KAAKopC,SAASx/C,KAAK4gD,GACZxqC,IACX,EACAkpC,EAAuB1rC,UAAUksC,SAAW,SAAUc,GAGlD,OAFA3B,EAAgB7oC,MAChBA,KAAKqpC,UAAUz/C,KAAK4gD,GACbxqC,IACX,EACAkpC,EAAuB1rC,UAAUitC,QAAU,SAAUC,EAAQlrB,GAEzD,YADe,IAAXA,IAAqBA,EAAS,CAAC,UACpBkrB,GACX,IAAK,SACD,IAAIC,EAAW,YAAYhoD,KAAK+nD,GAC5BjQ,EAAWkQ,GAAYhC,EAAO+B,GAAUA,EAASA,EAAS,SAC1D9K,EAAO+K,EAAWD,EAAOvyC,MAAM,GAAI,GAAKuyC,EAC5C1qC,KAAKmpC,KAAKv/C,KAAK,CAAE6wC,SAAUA,EAAUmQ,oBAAqB,CAAChL,EAAM,IAAKpgB,OAAQA,IAC9E,MACJ,IAAK,WACDxf,KAAKmpC,KAAKv/C,KAAK,CAAEowC,UAAW0Q,EAAQlrB,OAAQA,GAAU,CAAC,IACvD,MACJ,QACI,MAAM,IAAIxU,MAAMg+B,EAAiB0B,EAAQ,YAEjD,OAAO1qC,IACX,EACAkpC,EAAuB1rC,UAAUomC,gBAAkB,SAAUP,GACzD,IAAI/+B,EAAQtE,KACZ6oC,EAAgB7oC,MAIhB,IAHA,IACI6qC,EADAC,EAAQzgD,MAAMkkB,QAAQ80B,GAAaA,EAAYn5C,UAE/C0gD,EAAsB5qC,KAAK4qC,qBAAuB,CAAC,GAAI,IAClDtzC,EAAI,EAAGsI,EAAKkrC,EAAM3gD,OAAQmN,EAAIsI,IAAMtI,EAEzC,cADAuzC,EAAWC,EAAMxzC,KAEb,IAAK,SACD,IAAIyzC,EAAWH,EAAoB,GAC/BI,EAAcJ,EAAoB,GAClCK,EAASJ,GACRA,EAASnW,WAAW,OAASmW,EAASnW,WAAW,SAAwB,KAAbqW,IAC7DE,GAAS,QAAKF,EAAUF,IAE5B7qC,KAAKwpC,gBAAgByB,GAAU,CAAExQ,SAAUwQ,EAAQvQ,WAAYsQ,GAC/D,MACJ,IAAK,WACD,IAAIE,EAAOlrC,KAAK45B,QAAQyJ,UAAU7C,aAAaxgC,KAAK2tB,UAAWkd,GAC3DK,aAAgB,MAA6C,OAArBA,EAAKC,aACL,IAApCnrC,KAAKspC,gBAAgB1/C,KAAKshD,IAC1BlrC,KAAK0pC,UAAS,WAAc,OA1FjClqB,EA0FsDlb,EAzFlE5W,EAAQkT,IAAI4e,EAAO8pB,gBAAgBlnD,KAAI,SAAUsK,GAAK,OAAOA,EAAEqhC,KAAKvO,EAAOmO,UAAWjhC,EAAE5F,OAAS,KAAI6G,MAAK,WAC7G6xB,EAAO8pB,gBAAkB,IAC7B,IAHJ,IAAuB9pB,CA0F8D,IAGjE,MACJ,QACI,MAAM,IAAIxU,MAAMg+B,EAAiB6B,EAAU,aAGvD,OAAO7qC,IACX,EACAkpC,EAAuB1rC,UAAU4tC,WAAa,SAAUC,EAAcC,GAGlE,OAFAzC,EAAgB7oC,MAChBA,KAAKwpC,gBAAgB6B,GAAgB,CAAE5Q,SAAU6Q,EAAS5Q,WAAY,IAC/D16B,IACX,EACAkpC,EAAuB1rC,UAAUktC,OAAS,SAAUA,EAAQa,GAExD,IAAIpC,EACJ,OAFAN,EAAgB7oC,aAED0qC,GACX,IAAK,SACDvB,EAAO,CAAE1O,SAAUiQ,EAAQE,oBAAqB,CAACF,EAAQ,IAAKlrB,OAAQ+rB,GAAgB,CAAC,GACvF,MACJ,IAAK,WACDpC,EAAO,CAAEnP,UAAW0Q,EAAQlrB,OAAQ+rB,GAAgB,CAAC,GACrD,MACJ,QACI,MAAM,IAAIvgC,MAAMg+B,EAAiB0B,EAAQ,WAGjD,OADA1qC,KAAKmpC,KAAKv/C,KAAKu/C,GACRnpC,IACX,EACAkpC,EAAuB1rC,UAAUguC,qBAAuB,SAAUpiD,EAAMo2B,GACpE,IAAIlb,EAAQtE,KACR0qC,EAAS,CAAEjQ,SAAUrxC,EAAMwhD,oBAAqB,CAACxhD,EAAM,IAAKo2B,OAAQA,GAAU,CAAC,GAQnF,OAPAxf,KAAKmpC,KAAKv/C,KAAK8gD,GACf1qC,KAAKypC,SAAQ,WACT,IAAI/O,EAAa,CAACtxC,EAAMkb,EAAM42B,kBAG9B,OAFAwP,EAAOjQ,SAAWrxC,EAClBshD,EAAOE,oBAAsBlQ,EACtBhtC,EAAQD,SACnB,IACOuS,IACX,EACAkpC,EAAuB1rC,UAAUiuC,uBAAyB,WACtD,OAAOzrC,KAAKwrC,qBAAqB,6BACrC,EACAtC,EAAuB1rC,UAAUkuC,OAAS,WACtC,OAAO1rC,KAAKwrC,qBAAqB,4BACrC,EACAtC,EAAuB1rC,UAAUmuC,QAAU,WACvC,OAAO3rC,KAAKwrC,qBAAqB,0BACrC,EACAtC,EAAuB1rC,UAAUouC,iBAAmB,WAChD,OAAO5rC,KAAKwrC,qBAAqB,+BACrC,EACAtC,EAAuB1rC,UAAUquC,gBAAkB,WAC/C,OAAO7rC,KAAKwrC,qBAAqB,2BACrC,EACAtC,EAAuB1rC,UAAUsuC,mBAAqB,WAClD,OAAO9rC,KAAKyrC,yBAAyBG,mBAAmBC,iBAC5D,EACA3C,EAAuB1rC,UAAUy8B,sBAAwB,WACrD,OAAOj6B,KAAK8rC,qBAAqBH,UAAUD,QAC/C,EACAxC,EAAuB1rC,UAAU08B,mBAAqB,SAAU6R,GAC5D,IAAIznC,EAAQtE,KACRgsC,EAAWD,EAAQ,WAAuBA,QAASn+C,EAYvD,YAXiBA,IAAbo+C,IACAA,EAAW,kBAEfhsC,KAAKypC,SAAQ,WACT,OAAOnlC,EAAMs1B,QAAQC,OAAOc,UAAU,0BAA2Br2B,EAAM42B,kBAAkBvtC,MAAK,SAAUvE,GACpG,OAAOkb,EAAMs1B,QAAQC,OAAOC,WAAW1wC,GAAMuE,MAAK,SAAUjB,GACxD,cAA0B,IAAIA,EAAEu/C,iBAChC,WAAuBD,EAC3B,GACJ,GACJ,IACOhsC,IACX,EACAkpC,EAAuB1rC,UAAUuK,MAAQ,WACrC,IAAIzD,EAAQtE,KACZ,OAAIA,KAAK+oC,UACEr7C,EAAQD,UAEZg7C,EAASzoC,KAAMA,KAAKopC,UAAUz7C,MAAK,WACtC,IAEItB,EAFAwtC,EAASv1B,EAAMs1B,QAAQC,OACvBsP,EAAO7kC,EAAM6kC,KAEbt4C,EAAO,WAEP,OADAxE,EAAU88C,EAAKj/B,SA5Q/B,SAAoBo5B,EAAUzJ,EAAQsP,GAElC,GADAvoB,EAAOsrB,MAAM,kBAAkBnlD,OAAOoiD,EAAK1O,SAAU,MACxB,iBAAlB0O,EAAK1O,SAAuB,CACnC6I,EAASsH,oBAAsBzB,EAAKyB,oBACpC,IAAI/oC,EAAKsnC,EAAK1O,SACd,OAAI0O,EAAKyB,oBAAoBzgD,OAAS,EAC3B0vC,EAAOc,UAAUwO,EAAK1O,SAAU0O,EAAKyB,oBAAoB,IAC3Dj9C,MAAK,SAAUw+C,GAAgB,OAAOC,EAAYD,EAAe,IAEnEC,EAAYvqC,EACvB,CACK,GAA8B,mBAAnBsnC,EAAKnP,UACjB,OAA4D,IAAxDsJ,EAASiG,kBAAkBhjD,QAAQ4iD,EAAKnP,WACjCtsC,EAAQD,WAEnB61C,EAASiG,kBAAkB3/C,KAAKu/C,EAAKnP,WAC9BtsC,EAAQD,QAAQ07C,EAAKnP,UAAUh8B,KAAK,KAAMslC,EAAU6F,EAAK3pB,QAAU,CAAC,KAE/E,MAAM,IAAIxU,MAAMg+B,EAAiBG,EAAK1O,UAAY0O,EAAKnP,UAAW,WAClE,SAASoS,EAAY3R,GACjB,OAAOZ,EAAOC,WAAWW,GAAU9sC,MAAK,SAAUjB,GAC9C,GAAI,cAAeA,EACf,OAAyD,IAArD42C,EAASiG,kBAAkBhjD,QAAQmG,EAAEstC,WAC9BtsC,EAAQD,UAEZC,EAAQD,QAAQf,EAAEstC,UAAUsJ,EAAU6F,EAAK3pB,QAAU,CAAC,IAAI7xB,MAAK,WAClE21C,EAASiG,kBAAkB3/C,KAAK8C,EAAEstC,WAClCsJ,EAASsH,oBAAsB,KAC/BhqB,EAAOsrB,MAAM,qBAAqBnlD,OAAOoiD,EAAK1O,SAAU,KAC5D,IAEJ6I,EAASsH,oBAAsB,KAC/BhqB,EAAOsrB,MAAM,iBAAiBnlD,OAAOoiD,EAAK1O,SAAU,KACxD,GACJ,CACJ,CA2O2B4R,CAAW/nC,EAAOu1B,EAAQxtC,GAASsB,KAAKkD,IAEnDyT,EAAMykC,WAAY,EAClBzkC,EAAMilC,kBAAoB,KACnB77C,EAAQD,UACnB,EACA,OAAOoD,IAAOlD,MAAK,WAAc,OAAO86C,EAASnkC,EAAOA,EAAM+kC,UAAY,GAC9E,GACJ,EACOH,CACX,CAnL6B,GA8LzB3N,EAAW,WACX,SAASA,EAAQ1B,EAAQlM,EAAW0V,GAChCrjC,KAAK65B,OAASA,GAAU,IAAI,YAC5B75B,KAAK2tB,UAAYA,IAAa,IAAK,MAAakS,aAChD7/B,KAAKqjC,UAAYA,GAAa,IAAI,KAClCrjC,KAAK2pB,IAAM,IAAIuf,EAAuBlpC,MACtCA,KAAK4gB,OAAS,YAAwB,WACtC5gB,KAAKssC,gBAAiB,EACtBtsC,KAAK3Z,KAAO,KACZ2Z,KAAK2pB,IAAI/9B,SAAS2vC,EAASv7B,MAC3BA,KAAK2pB,IAAI/9B,SAAS,KAAQoU,KAAK65B,QAC/B75B,KAAK2pB,IAAI/9B,SAAS,KAAeoU,KAAKqjC,UAC1C,CAyFA,OAxFA9H,EAAQ/9B,UAAUxV,MAAQ,WACtB,IAAIsc,EAAQtE,KACZ,OAAIA,KAAKusC,SACEvsC,KAAKusC,UAEhBvsC,KAAK4gB,OAAOuoB,KAAK,oBACVnpC,KAAKusC,SAAWvsC,KAAK2pB,IAAI5hB,QAAQpa,MAAK,WAEzC,GA7BR,sBAAqB,UAAU,SAAU6+C,GACrC,IAAI1lD,EAAS0lD,EAAI1lD,OACb2lD,EAAS3lD,EAAO2lD,OACiB,SAAjC3lD,EAAOq4B,QAAQ16B,eAA6BgoD,GAC5CD,EAAIle,gBAEZ,IAAG,IAuBUhqB,EAAMqpB,UAAUgQ,YAAY,MAAkB,CAC/C,IAAIlkB,EAAU,oEAEd,MADAnV,EAAMsc,OAAOlX,MAAM+P,GACb,IAAIzO,MAAMyO,EACpB,CACAnV,EAAMsc,OAAOuoB,KAAK,mBAClB,IAAIqD,EAAM,uBAAsB,kBAAmB,CAAEE,SAAS,EAAMC,YAAY,IAEhF,OADA,mBAAkBH,GACXloC,CACX,IACJ,EACAi3B,EAAQ/9B,UAAUovC,QAAU,SAAU5tC,EAAgB6tC,GAClD,IAAIvoC,EAAQtE,KAIZ,YAHuB,IAAnBhB,IAA6BA,EAAiB,CAAC,QAC3B,IAApB6tC,IAA8BA,EAAkB,MACpD7sC,KAAK8sC,eAAeD,GAAmB,sBAAqB,QAAQ,IAC7D,IAAIn/C,GAAQ,SAAUD,GACzB,IAAIs/C,EAASzoC,EAAMqpB,UAAUhkC,IAAI,MACjC2a,EAAMs7B,KAAOmN,EAAOH,QAAQ,CAAEjf,UAAWrpB,EAAMqpB,UAAW9qC,QAASyhB,EAAMje,KAAMg9C,UAAW/+B,EAAM++B,UAAWrkC,eAAgBA,IAC3HsF,EAAMs7B,KAAKoN,WACX1oC,EAAM2oC,qBACNx/C,EAAQ6W,EACZ,GACJ,EACAi3B,EAAQ/9B,UAAU28B,QAAU,SAAUyF,EAAMiN,GACxC,IAAIvoC,EAAQtE,UACC,IAAT4/B,IAAmBA,EAAO,WACN,IAApBiN,IAA8BA,EAAkB,MACpD,IAAIK,EAAc,CAAC,EACfltC,KAAK4/B,MAAQ5/B,KAAK4/B,KAAK5Q,WAAahvB,KAAK4/B,KAAK5Q,UAAU0c,SACxD1rC,KAAK4/B,KAAK5Q,UAAU0c,OAAOyB,aAC3BntC,KAAK4/B,KAAK5Q,UAAU0c,OAAOt+C,SAE/B4S,KAAK8sC,eAAeD,GACpB,IAAIE,EAAS/sC,KAAK2tB,UAAUhkC,IAAI,MAehC,cAdkBqW,KAAK2tB,UAAUhkC,IAAI,MAClByjD,mBACdxN,IAEGA,EADA5/B,KAAK25B,gBACE,QAAe,QAAS35B,KAAK25B,gBAG7B,OAGfuT,EAAYle,UAAY4Q,EACxBsN,EAAYvf,UAAYuf,EAAYlI,eAAiBhlC,KAAK2tB,UAC1Duf,EAAYhI,SAAWllC,KAAKqtC,SAC5BH,EAAY7mD,KAAO2Z,KAAK3Z,KACjB0mD,EAAOvH,QAAQ0H,GAAav/C,MAAK,SAAUwqC,GAI9C,OAHA7zB,EAAMs7B,KAAOzH,EACb+U,EAAYhI,SAAS8H,WACrB1oC,EAAM2oC,qBACC3oC,CACX,GACJ,EACAi3B,EAAQ/9B,UAAUsvC,eAAiB,SAAUD,GACzC,IAAI7sC,KAAKssC,eAAT,CAUA,GAPAO,EAAkBA,GAAmB7sC,KAAK3Z,KAKtC2Z,KAAK3Z,KAJJwmD,GAA8C,iBAApBA,EAIfA,EAHA,oBAAmBA,GAAmB,oBAKjD7sC,KAAK3Z,KACN,MAAM,IAAI2kB,MAAM,qCAEpBhL,KAAKssC,gBAAiB,EACtBtsC,KAAK3Z,KAAKuzC,QAAU55B,KACpBA,KAAKqtC,SAAW,IAAI,KAASrtC,KAAK3Z,MAAM,GACxC2Z,KAAKqtC,SAASC,8BACdttC,KAAK2tB,UAAU6Q,iBAAiB,cAAcx+B,KAAK3Z,KAfnD,CAgBJ,EACAk1C,EAAQ/9B,UAAUyvC,mBAAqB,WACnC,IAAIT,EAAM,uBAAsB,mBAAoB,CAAEE,SAAS,EAAMC,YAAY,IACjFpsB,YAAW,WAAc,OAAO,mBAAkBisB,EAAM,GAAG,EAC/D,EACOjR,CACX,CAtGc,+CChUd,IAAIgS,EAAa,WACb,SAASA,IACLvtC,KAAKwtC,QAAU,CACXC,UAAW,0CACXC,OAAQ,GACRC,OAAQ,GACRC,aAAc,GACdC,OAAQ,GACRC,SAAU,GACV/iD,QAAS,CAAC,EACVgjD,cAAe,CACXC,QAAQ,EACRr6B,IAAK,uGACLs6B,UAAW,oGACXC,eAAgB,OAG5B,CAaA,OAZAX,EAAU/vC,UAAUzS,QAAU,SAAU6S,GACpCxS,OAAOC,OAAO2U,KAAKwtC,QAAS5vC,EAAK,CAC7BmwC,cAAe3iD,OAAOC,OAAO,CAAC,EAAG2U,KAAKwtC,QAAQO,cAAenwC,EAAImwC,gBAEzE,EACAR,EAAU/vC,UAAU7T,IAAM,SAAU8C,GAChC,OAAOuT,KAAKwtC,QAAQ/gD,EACxB,EACA8gD,EAAU/vC,UAAU3T,IAAM,SAAU4C,EAAKynB,GAErC,OADAlU,KAAKwtC,QAAQ/gD,GAAOynB,EACblU,KAAKwtC,QAAQ/gD,EACxB,EACO8gD,CACX,CA/BgB,iFCMZtR,EAA0C,SAAUxL,EAAG/1B,GACvD,GAAuB,iBAAZ4P,SAAoD,mBAArBA,QAAQse,SAAyB,OAAOte,QAAQse,SAAS6H,EAAG/1B,EAC1G,EAGIyzC,EAAiB,WACjB,SAASA,EAAc3uB,GACnBxf,KAAKouC,eAAiB,KACtBpuC,KAAKwf,OAASA,CAClB,CAwCA,OAvCA2uB,EAAc3wC,UAAU6wC,gBAAkB,WACtC,GAA4B,OAAxBruC,KAAKouC,eACL,OAAOpuC,KAAKouC,eAEhB,QAAsBxgD,IAAlB3M,OAAOqtD,aAA+C1gD,IAAvB3M,OAAOqtD,OAAOC,KAAoB,CACjE,IAAIC,EAAW7pD,SAAS8pD,cAAc,UAClCC,EAAS,CACT1uC,KAAKwf,OAAO71B,IAAI,UAAY,OAASqW,KAAKwf,OAAO71B,IAAI,UAAY,IAAM,GACvEqW,KAAKwf,OAAO71B,IAAI,UAAY,UAAYqW,KAAKwf,OAAO71B,IAAI,UAAY,GACpEqW,KAAKwf,OAAO71B,IAAI,gBAAkB,aAAeqW,KAAKwf,OAAO71B,IAAI,gBAAkB,GACnFqW,KAAKwf,OAAO71B,IAAI,YAAc,YAAcqW,KAAKwf,OAAO71B,IAAI,YAAc,GAC1EqW,KAAKwf,OAAO71B,IAAI,UAAY,UAAYqW,KAAKwf,OAAO71B,IAAI,UAAY,GACpE,sCAeJ,OAbA6kD,EAAS7lC,KAAO,kBAChB6lC,EAASG,OAAQ,EACjBH,EAASI,OAAQ,EACjBJ,EAAS76B,IAAM3T,KAAKwf,OAAO71B,IAAI,aAAe,IAAM+kD,EAAOlsD,KAAK,KAChEmC,SAAS6B,KAAKqoD,YAAYL,GAC1BxuC,KAAKouC,eAAiB,IAAI1gD,GAAQ,SAAUD,EAAS+sC,GACjDv5C,OAAO6tD,0BAA4B,WAC/BrhD,GACJ,EACA+gD,EAASO,QAAU,SAAUrlC,GACzB8wB,EAAO9wB,EACX,CACJ,IACO1J,KAAKouC,cAChB,CACA,SAAIntD,OAAOqtD,SAAUrtD,OAAOqtD,OAAOC,QAC/BvuC,KAAKouC,eAAiB,IAAI1gD,GAAQ,SAAUD,GAAWA,GAAW,IAC3DuS,KAAKouC,eAGpB,EAlD0C,SAAUrS,EAAYj1C,EAAQ2F,EAAK+5B,GAC7E,IAA2HkK,EAAvHuD,EAAI/pC,UAAUC,OAAQguC,EAAIlE,EAAI,EAAIntC,EAAkB,OAAT0/B,EAAgBA,EAAOp7B,OAAOsoC,yBAAyB5sC,EAAQ2F,GAAO+5B,EACrH,GAAuB,iBAAZlc,SAAoD,mBAArBA,QAAQ0xB,SAAyB7D,EAAI7tB,QAAQ0xB,SAASD,EAAYj1C,EAAQ2F,EAAK+5B,QACpH,IAAK,IAAIlvB,EAAIykC,EAAW5xC,OAAS,EAAGmN,GAAK,EAAGA,KAASo5B,EAAIqL,EAAWzkC,MAAI6gC,GAAKlE,EAAI,EAAIvD,EAAEyH,GAAKlE,EAAI,EAAIvD,EAAE5pC,EAAQ2F,EAAK0rC,GAAKzH,EAAE5pC,EAAQ2F,KAAS0rC,GAChJ,OAAOlE,EAAI,GAAKkE,GAAK/sC,OAAOgS,eAAetW,EAAQ2F,EAAK0rC,GAAIA,CAChE,CA8CoB2D,CAAW,EACvB,QAAO,KACPG,EAAW,oBAAqB,CAAC7wC,UAClC+iD,EAEP,CA7CoB,sKCLhBlS,EAA0C,SAAUxL,EAAG/1B,GACvD,GAAuB,iBAAZ4P,SAAoD,mBAArBA,QAAQse,SAAyB,OAAOte,QAAQse,SAAS6H,EAAG/1B,EAC1G,EAGIs0C,EAAoB,WACpB,SAASA,EAAiBxvB,GACtBxf,KAAKwf,OAASA,CAClB,CA4BA,OA3BAwvB,EAAiBxxC,UAAUyxC,UAAY,WACnC,OAAOjvC,KAAKwf,OAAO71B,IAAI,kBAAoBqW,KAAKwf,OAAO71B,IAAI,iBAAiBqkD,MAChF,EACAgB,EAAiBxxC,UAAU0xC,aAAe,WAClClvC,KAAKmvC,iBACLnvC,KAAKmvC,gBAAgBD,cAE7B,EACAF,EAAiBxxC,UAAU4xC,WAAa,WACpC,GAAKpvC,KAAKivC,YAAV,CAGA,IAAI/lB,EAASvkC,SAAS8pD,cAAc,UACpCvlB,EAAOvgB,KAAO,kBACdugB,EAAOvV,IAAM3T,KAAKwf,OAAO71B,IAAI,iBAAiBgqB,IAC9ChvB,SAAS6B,KAAKqoD,YAAY3lB,EAJ1B,CAKJ,EACA8lB,EAAiBxxC,UAAU6xC,eAAiB,SAAUjtD,EAAKktD,GAClDtvC,KAAKivC,cAGVjvC,KAAKmvC,gBAAkB,IAAIluD,OAAOsuD,gBAAgBntD,EAAKktD,EAAStvC,KAAKwf,OAAO71B,IAAI,kBACpF,EArC0C,SAAUoyC,EAAYj1C,EAAQ2F,EAAK+5B,GAC7E,IAA2HkK,EAAvHuD,EAAI/pC,UAAUC,OAAQguC,EAAIlE,EAAI,EAAIntC,EAAkB,OAAT0/B,EAAgBA,EAAOp7B,OAAOsoC,yBAAyB5sC,EAAQ2F,GAAO+5B,EACrH,GAAuB,iBAAZlc,SAAoD,mBAArBA,QAAQ0xB,SAAyB7D,EAAI7tB,QAAQ0xB,SAASD,EAAYj1C,EAAQ2F,EAAK+5B,QACpH,IAAK,IAAIlvB,EAAIykC,EAAW5xC,OAAS,EAAGmN,GAAK,EAAGA,KAASo5B,EAAIqL,EAAWzkC,MAAI6gC,GAAKlE,EAAI,EAAIvD,EAAEyH,GAAKlE,EAAI,EAAIvD,EAAE5pC,EAAQ2F,EAAK0rC,GAAKzH,EAAE5pC,EAAQ2F,KAAS0rC,GAChJ,OAAOlE,EAAI,GAAKkE,GAAK/sC,OAAOgS,eAAetW,EAAQ2F,EAAK0rC,GAAIA,CAChE,CAiCuB2D,CAAW,EAC1B,QAAO,KACPG,EAAW,oBAAqB,CAAC7wC,UAClC4jD,EAEP,CAhCuB,GCXnBQ,EAAU,WACV,SAASA,IACT,CAgBA,OAfAA,EAAOC,cAAgB,gBACvBD,EAAOE,SAAW,YAClBF,EAAOG,mBAAqB,uBAC5BH,EAAOI,eAAiB,gBACxBJ,EAAOK,YAAc,eACrBL,EAAOM,gBAAkB,oBACzBN,EAAOO,eAAiB,mBACxBP,EAAOQ,aAAe,gBACtBR,EAAOS,gBAAkB,iBACzBT,EAAOU,eAAiB,mBACxBV,EAAOW,gBAAkB,oBACzBX,EAAOY,uBAAyB,yBAChCZ,EAAOa,sBAAwB,wBAC/Bb,EAAOc,cAAgB,gBACvBd,EAAOe,cAAgB,gBAChBf,CACX,CAnBa,aCATgB,EAAsC,WAStC,OARAA,EAAWplD,OAAOC,QAAU,SAASmlC,GACjC,IAAK,IAAI9rB,EAAGpN,EAAI,EAAGy+B,EAAI7rC,UAAUC,OAAQmN,EAAIy+B,EAAGz+B,IAE5C,IAAK,IAAIwkB,KADTpX,EAAIxa,UAAUoN,GACOlM,OAAOoS,UAAUjO,eAAeyO,KAAK0G,EAAGoX,KACzD0U,EAAE1U,GAAKpX,EAAEoX,IAEjB,OAAO0U,CACX,EACOggB,EAASzoC,MAAM/H,KAAM9V,UAChC,EACI,EAA0C,SAAU6xC,EAAYj1C,EAAQ2F,EAAK+5B,GAC7E,IAA2HkK,EAAvHuD,EAAI/pC,UAAUC,OAAQguC,EAAIlE,EAAI,EAAIntC,EAAkB,OAAT0/B,EAAgBA,EAAOp7B,OAAOsoC,yBAAyB5sC,EAAQ2F,GAAO+5B,EACrH,GAAuB,iBAAZlc,SAAoD,mBAArBA,QAAQ0xB,SAAyB7D,EAAI7tB,QAAQ0xB,SAASD,EAAYj1C,EAAQ2F,EAAK+5B,QACpH,IAAK,IAAIlvB,EAAIykC,EAAW5xC,OAAS,EAAGmN,GAAK,EAAGA,KAASo5B,EAAIqL,EAAWzkC,MAAI6gC,GAAKlE,EAAI,EAAIvD,EAAEyH,GAAKlE,EAAI,EAAIvD,EAAE5pC,EAAQ2F,EAAK0rC,GAAKzH,EAAE5pC,EAAQ2F,KAAS0rC,GAChJ,OAAOlE,EAAI,GAAKkE,GAAK/sC,OAAOgS,eAAetW,EAAQ2F,EAAK0rC,GAAIA,CAChE,EACI,EAA0C,SAAU1H,EAAG/1B,GACvD,GAAuB,iBAAZ4P,SAAoD,mBAArBA,QAAQse,SAAyB,OAAOte,QAAQse,SAAS6H,EAAG/1B,EAC1G,EAUIkmB,GAAS,IAAA6vB,WAAU,uBACnBC,EAAc,WACd,SAASA,EAAW7tD,EAASslB,EAAWqX,EAAQmxB,EAAeC,EAAeC,GAC1E,IAAIC,EAAU9wC,KACdA,KAAK+wC,mBAAqB,KAC1B/wC,KAAKgxC,aAAe,GACpBhxC,KAAKixC,aAAe,GACpBjxC,KAAKkxC,UAAY,EACjBlxC,KAAKmxC,SAAW,EAChBnxC,KAAKoxC,aAAe,EACpBpxC,KAAKqxC,KAAO,EACZrxC,KAAKsxC,kBAAmB,EACxBtxC,KAAKsvC,QAAU,GACftvC,KAAKuxC,kBAAmB,EACxBvxC,KAAKwxC,gBAAiB,EACtBxxC,KAAKyxC,QAAU,UACfzxC,KAAKjV,QAAU,CAAC,EAChBiV,KAAK0xC,aAAc,EACnB1xC,KAAK2xC,SAAW,SAChB3xC,KAAK4xC,SAAW,GAChB5xC,KAAK6xC,mBAAoB,EACzB7xC,KAAK5d,IAAM,KACX4d,KAAK8xC,iBAAmB,GACxB9xC,KAAK+xC,qBAAuB,KAC5B/xC,KAAKouC,eAAiB,KACtBpuC,KAAKgyC,YAAc,KACnBhyC,KAAKiyC,YAAc,KACnBjyC,KAAKkyC,eAAiB,KACtBlyC,KAAKmyC,kBAAoB,GACzBnyC,KAAKoyC,sBAAwB,KAC7BpyC,KAAKnd,QAAUA,EACfmd,KAAKmI,UAAYA,EACjBnI,KAAKwf,OAASA,EACdxf,KAAK2wC,cAAgBA,EACrB3wC,KAAK4wC,cAAgBA,EACrB5wC,KAAK6wC,iBAAmBA,EACnBrxB,EAAO71B,IAAI,cACZi3B,EAAOlX,MAAM,6BAEX8V,EAAO71B,IAAI,YAAsC,IAAzB61B,EAAO71B,IAAI,WAA0B61B,EAAO71B,IAAI,YAAsC,IAAzB61B,EAAO71B,IAAI,WAClGi3B,EAAOlX,MAAM,+CAEjB1J,KAAK6wC,iBAAiBzB,aACtBpvC,KAAKouC,eAAiBpuC,KAAK4wC,cAAcvC,kBACzC,IAAItwC,EAAOiC,KACXA,KAAKgyC,YAAchyC,KAAKouC,eAAezgD,MAAK,WACxC,OAAO,IAAID,GAAQ,SAAUD,GACzBsQ,EAAKk0C,YAAcxkD,CACvB,GACJ,IACAuS,KAAKnd,QAAQ4R,iBAAiB+6C,EAAOY,wBAAwB,SAAU7jD,GACnE,IAAI0sB,EAASlb,EAAK+zC,iBAAiBvlD,EAAK8lD,OAAOhlD,OAC/C4rB,EAAOq5B,QAAQr5B,EAAOs5B,OAAOC,SAC7Bv5B,EAAOw5B,UAAUxxD,OAAOqtD,OAAOC,KAAKmE,OAAOC,WAAa,EAC5D,IACA3yC,KAAKnd,QAAQ4R,iBAAiB+6C,EAAOa,uBAAuB,SAAU9jD,GAClE,IAAI0sB,EAASlb,EAAK+zC,iBAAiBvlD,EAAK8lD,OAAOhlD,OAC/C4rB,EAAOq5B,QAAQr5B,EAAOs5B,OAAOK,YACjC,IACA5yC,KAAKnd,QAAQ4R,iBAAiB+6C,EAAOc,eAAe,SAAU/jD,GAC1DwR,EAAK3b,IAAIywD,MAAM90C,EAAK+zC,iBAAiBvlD,EAAK8lD,OAAOhlD,OAAOlG,UACxD4W,EAAK3b,IAAI0wD,QAAQ,GACrB,IACA9yC,KAAKnd,QAAQ4R,iBAAiB+6C,EAAOe,eAAe,WAChDO,EAAQ5B,cACZ,GACJ,CA2lBA,OA1lBAwB,EAAWlzC,UAAU0xC,aAAe,WAC3BlvC,KAAK8xC,mBAGV9xC,KAAK8xC,iBAAiBvoD,SAAQ,SAAU0vB,GACpCA,EAAO85B,OAAO,KAClB,IACA/yC,KAAK8xC,iBAAmB,GACpB9xC,KAAK6wC,kBACL7wC,KAAK6wC,iBAAiB3B,eAE9B,EACAwB,EAAWlzC,UAAUwvC,SAAW,WAC5B,IAAI8D,EAAU9wC,KACdA,KAAKnd,QAAQ4R,iBAAiB,aAAa,SAAU+3C,GACjDA,EAAIle,gBACR,IACAtuB,KAAKnd,QAAQ4R,iBAAiB,kBAAkB,WAC5Cq8C,EAAQkC,oBAAmB,EAC/B,IACAhzC,KAAKouC,eAAezgD,MAAK,WACrB,IAAIslD,EAAS,IAAIhyD,OAAOqtD,OAAOC,KAAK2E,OAAOp6B,WAAWg4B,EAAQK,UAAWr4B,WAAWg4B,EAAQI,YACxFiC,EAAYrC,EAAQsC,eACpBroD,EAAUK,OAAOC,OAAO,CAAC,EAAGylD,EAAQ/lD,QAAS+lD,EAAQtxB,OAAO71B,IAAI,WAAY,CAC5EyR,OAAQ63C,EACR5B,KAAM7iC,SAASsiC,EAAQO,KAAM,IAC7BgC,iBAAkBvC,EAAQQ,iBAC1B6B,UAAWA,IAEfrC,EAAQ1uD,IAAM,IAAInB,OAAOqtD,OAAOC,KAAK1lD,IAAIioD,EAAQjuD,QAASkI,GACtD+lD,EAAQwC,WACRxC,EAAQwC,UAAUxC,EAAQ1uD,KAE9B0uD,EAAQmB,cACRnB,EAAQ1uD,IAAImxD,YAAY,SAAS,SAAUpgB,GACvCqgB,EAAchE,EAAOE,SAAUvc,EAAG2d,EAAQjuD,SACrCiuD,EAAQU,gBAETV,EAAQC,qBACRD,EAAQC,mBAAmBzJ,QAC3BkM,EAAchE,EAAOW,gBAAiB,CAAEsD,WAAY3C,EAAQC,oBAAsBD,EAAQjuD,SAElG,IACAiuD,EAAQ1uD,IAAImxD,YAAY,WAAW,WAC/BzC,EAAQ4C,iBACZ,IACA5C,EAAQ1uD,IAAImxD,YAAY,gBAAgB,WACpCzC,EAAQ4C,iBACZ,GACJ,GACJ,EACAhD,EAAWlzC,UAAUk2C,gBAAkB,WACnC,IAAIC,EAAS3zC,KAAK5d,IAAIwxD,YACjBD,GAELH,EAAchE,EAAOC,cAAe,CAAEkE,OAAQA,GAAU3zC,KAAKnd,QACjE,EACA6tD,EAAWlzC,UAAUq2C,aAAe,SAAU56B,GAC1C,IAAI63B,EAAU9wC,KACd,OAAOA,KAAKgyC,YAAYrkD,MAAK,WACzB,IAAImmD,EAAe,IAAI7yD,OAAOqtD,OAAOC,KAAK2E,OAAOp6B,WAAWG,EAAOk4B,UAAWr4B,WAAWG,EAAOi4B,YAChGJ,EAAQiD,aAAa,CACjB3xD,IAAK0uD,EAAQ1uD,IACb+E,SAAU2sD,IACXnmD,MAAK,SAAUqmD,GACdA,EAAcT,YAAY,SAAS,WAC/BC,EAAchE,EAAOK,YAAa,CAAE52B,OAAQA,EAAQ+6B,cAAeA,GAAiBlD,EAAQjuD,SACvFiuD,EAAQU,iBAETV,EAAQC,oBACRD,EAAQC,mBAAmBzJ,QAE1B0M,EAAcP,YAInB3C,EAAQC,mBAAqBiD,EAAcP,WAC3CO,EAAcP,WAAW3N,KAAKgL,EAAQ1uD,IAAK4xD,IAJvClD,EAAQC,mBAAqB,KAKrC,IACAiD,EAAcT,YAAY,aAAa,WACnCC,EAAchE,EAAOM,gBAAiB,CAAE72B,OAAQ+6B,GAAiBlD,EAAQjuD,SACzEmxD,EAAcvB,UAAUxxD,OAAOqtD,OAAOC,KAAKmE,OAAOC,WAAa,EACnE,IACAqB,EAAcT,YAAY,YAAY,WAClCC,EAAchE,EAAOO,eAAgB,CAAE92B,OAAQ+6B,GAAiBlD,EAAQjuD,QAC5E,IACAmxD,EAAcT,YAAY,YAAY,WAClCzC,EAAQ1uD,IAAI0wD,QAAQ,IACpBhC,EAAQ1uD,IAAIywD,MAAMmB,EAAc7sD,SACpC,IACI8xB,EAAOg7B,MACPD,EAAc1B,QAAQr5B,EAAOg7B,MAE7Bh7B,EAAOi7B,OACPF,EAAcG,SAASl7B,EAAOi7B,OAE9Bj7B,EAAOuQ,OACPwqB,EAAcI,SAASn7B,EAAOuQ,OAE9BvQ,EAAOo7B,WACPL,EAAcM,aAAar7B,EAAOo7B,WAElCp7B,EAAOw6B,aACPO,EAAcP,WAAa,IAAIxyD,OAAOqtD,OAAOC,KAAKgG,WAAW,CACzDC,QAASv7B,EAAOw6B,WAAWe,QAC3BC,YAAax7B,EAAOw6B,WAAWgB,YAC/BttD,SAAU8xB,EAAOw6B,WAAWtsD,SAC5ButD,SAAUz7B,EAAOw6B,WAAWiB,SAC5BC,aAAcnE,EAAS,CAAC,EAAGv3B,KAE/B+6B,EAAcP,WAAWF,YAAY,YAAY,WAC7CC,EAAchE,EAAOU,eAAgB,CAAEuD,WAAYO,EAAcP,YAAc3C,EAAQjuD,QAC3F,IACAmxD,EAAcP,WAAWF,YAAY,cAAc,WAC/CC,EAAchE,EAAOW,gBAAiB,CAAEsD,WAAYO,EAAcP,YAAc3C,EAAQjuD,QAC5F,KAEAo2B,EAAOs5B,SACPyB,EAAczB,OAASt5B,EAAOs5B,QAElCzB,EAAQgB,iBAAiBloD,KAAKoqD,GAC9BR,EAAchE,EAAOI,eAAgB,CAAEoE,cAAeA,EAAe/6B,OAAQA,GAAU63B,EAAQjuD,QACnG,GACJ,GACJ,EACA6tD,EAAWlzC,UAAU3R,WAAa,SAAUd,GACnCiV,KAAK5d,KAGV4d,KAAK5d,IAAIyJ,WAAWd,EACxB,EACA2lD,EAAWlzC,UAAUu2C,aAAe,SAAUhpD,GAC1C,OAAOiV,KAAKouC,eAAezgD,MAAK,WAC5B,OAAOD,EAAQD,QAAQ,IAAIxM,OAAOqtD,OAAOC,KAAKmE,OAAO3nD,GACzD,GACJ,EACA2lD,EAAWlzC,UAAUo3C,UAAY,WAC7B,IAAI9D,EAAU9wC,KACdA,KAAKgyC,YAAYrkD,MAAK,WAClB,OAAOD,EAAQD,QAAQqjD,EAAQ1uD,IAAIwyD,YACvC,GACJ,EACAlE,EAAWlzC,UAAUq3C,UAAY,SAAUC,GACvC,IAAIhE,EAAU9wC,KACdA,KAAKgyC,YAAYrkD,MAAK,WAClBmjD,EAAQ1uD,IAAIyyD,UAAUC,GACtBhE,EAAQ4C,iBACZ,GACJ,EACAhD,EAAWlzC,UAAUu3C,aAAe,WAChC,IAAIjE,EAAU9wC,KACdA,KAAKgyC,YAAYrkD,MAAK,WAClB,IAAIqnD,EAAMl8B,WAAWg4B,EAAQK,UACzB8D,EAAMn8B,WAAWg4B,EAAQI,WAC7B,GAAI8D,GAAOC,EAAK,CACZ,IAAIhC,EAAS,IAAIhyD,OAAOqtD,OAAOC,KAAK2E,OAAO8B,EAAKC,GAChDnE,EAAQ+D,UAAU5B,EACtB,CACJ,GACJ,EACAvC,EAAWlzC,UAAU03C,gBAAkB,WACnC,IAAIpE,EAAU9wC,KACdA,KAAKgyC,YAAYrkD,MAAK,WAClBmjD,EAAQ3oC,UAAUW,gBAAe,WAC7BgoC,EAAQiE,cACZ,GACJ,GACJ,EACArE,EAAWlzC,UAAU23C,iBAAmB,WACpC,IAAIrE,EAAU9wC,KACdA,KAAKgyC,YAAYrkD,MAAK,WAClBmjD,EAAQ3oC,UAAUW,gBAAe,WAC7BgoC,EAAQiE,cACZ,GACJ,GACJ,EACArE,EAAWlzC,UAAU43C,YAAc,SAAUnyC,GACzC,IAAI6tC,EAAU9wC,KACdA,KAAKgyC,YAAYrkD,MAAK,WAClBmjD,EAAQ3oC,UAAUW,gBAAe,WAC7B,IAAIusC,EAAY7mC,SAASvL,EAAU,IACnC6tC,EAAQ1uD,IAAI0wD,QAAQuC,EACxB,GACJ,GACJ,EACA3E,EAAWlzC,UAAU83C,oBAAsB,WACnCt1C,KAAK6xC,mBACL7xC,KAAKu1C,mBAEb,EACA7E,EAAWlzC,UAAUg4C,eAAiB,SAAUvyC,GAC5C,IAAI6tC,EAAU9wC,KACd,GAAkC,OAA9BA,KAAK+xC,qBAA+B,CACpC/xC,KAAK+xC,qBAAqBvtC,UAC1B,IAAK,IAAIxM,EAAK,EAAGqjC,EAAKr7B,KAAK8xC,iBAAkB95C,EAAKqjC,EAAGlxC,OAAQ6N,IAC5CqjC,EAAGrjC,GACT+6C,OAAO,MAElB/yC,KAAK8xC,iBAAmB,EAC5B,CAIA,GAHA9xC,KAAK+xC,qBAAuB/xC,KAAK2wC,cAC5BrhB,mBAAmBtvB,KAAKsvC,SACxBpvC,WAAU,SAAUuG,GAAWqqC,EAAQ2E,uBAAuBhvC,EAAU,IACxExD,EAAS9Y,OAAd,CAGA6V,KAAKgyC,YAAYrkD,MAAK,WAIlB,OAHiBsV,EAAS7gB,KAAI,SAAU62B,GACpC,OAAO63B,EAAQ+C,aAAa56B,EAChC,GAEJ,IAAGtrB,MAAK,SAAUmuB,GACdpuB,EAAQkT,IAAIkb,GAAGnuB,MAAK,WAChBmjD,EAAQ3oC,UAAUutC,WAAU,WACxB5E,EAAQD,iBAAiBxB,eAAeyB,EAAQ1uD,IAAK0uD,EAAQgB,kBAC7DhB,EAAQkC,oBACZ,IACAlC,EAAQ3oC,UAAUutC,WAAU,WACxB,GAAI5E,EAAQe,oBACRf,EAAQ6E,oBACR7E,EAAQyE,oBACJzE,EAAQM,cACR,IAAK,IAAIp5C,EAAK,EAAG49C,EAAa3yC,EAAUjL,EAAK49C,EAAWzrD,OAAQ6N,IAAM,CAClE,IAAI69C,EAAYD,EAAW59C,GACvBouB,EAAS,IAAInlC,OAAOqtD,OAAOC,KAAKuH,OAAO,CACvC1zD,IAAK0uD,EAAQ1uD,IACbgZ,OAAQ,CAAE45C,IAAKl8B,WAAW+8B,EAAU1E,SAASjwD,YAAa+zD,IAAKn8B,WAAW+8B,EAAU3E,UAAUhwD,aAC9F60D,OAAQj9B,WAAWg4B,EAAQM,aAAalwD,cAE5C4vD,EAAQG,aAAarnD,KAAKw8B,EAC9B,CAGZ,GACJ,GACJ,GA/BU,CAgCd,EACAsqB,EAAWlzC,UAAUi4C,uBAAyB,SAAUhvC,GACpD,IAAIqqC,EAAU9wC,KACd,GAAKyG,EAAQtc,OAAb,CAIA,IADA,IAAI6rD,EAAiB,GACZh+C,EAAK,EAAGi+C,EAAYxvC,EAASzO,EAAKi+C,EAAU9rD,OAAQ6N,IAAM,CAC/D,IAAI2J,EAASs0C,EAAUj+C,GACvB,GAAI2J,EAAOiD,QAAQza,OACf,IAAK,IAAIkxC,EAAK,EAAG6a,EAAKv0C,EAAOiD,QAASy2B,EAAK6a,EAAG/rD,OAAQkxC,IAAM,CACxD,IAAI8a,EAAaD,EAAG7a,GACpB,IAAK,IAAI+a,KAAep2C,KAAK8xC,iBACzB,GAAK9xC,KAAK8xC,iBAAiBviD,eAAe6mD,GAA1C,CAGA,IAAIC,EAAiBr2C,KAAK8xC,iBAAiBsE,GAC3C,GAAIC,EAAelvD,SAAS6tD,MAAMsB,QAAQ,MAAQH,EAAWhF,SAASmF,QAAQ,KAC1ED,EAAelvD,SAAS8tD,MAAMqB,QAAQ,MAAQH,EAAWjF,UAAUoF,QAAQ,IAD/E,CAIAD,EAAetD,OAAO,MACtB/yC,KAAK8xC,iBAAiBnwC,OAAOy0C,EAAa,GAC1C,KAHA,CALA,CAUR,CAEJ,GAAIz0C,EAAOkD,WAEP,IADA,IACS0xC,EAAK,EAAGC,EADEx2C,KAAKsvC,QAAQn3C,MAAMwJ,EAAOtU,MAAOsU,EAAOtU,MAAQsU,EAAOkD,YAC1B0xC,EAAKC,EAAersD,OAAQosD,IAAM,CAC9E,IAAIE,EAAcD,EAAeD,GACjCP,EAAepsD,KAAKoW,KAAK6zC,aAAa4C,GAC1C,CAER,CACA/oD,EAAQkT,IAAIo1C,GAAgBroD,MAAK,WAC7BmjD,EAAQD,iBAAiBxB,eAAeyB,EAAQ1uD,IAAK0uD,EAAQgB,kBAC7DhB,EAAQ3oC,UAAUutC,WAAU,WACxB5E,EAAQkC,oBACZ,GACJ,GAnCA,CAoCJ,EACAtC,EAAWlzC,UAAUw1C,mBAAqB,SAAU0D,GAChD,IAAI5F,EAAU9wC,UACA,IAAV02C,IAAoBA,GAAQ,QACX,IAAVA,IACPA,GAAQ,IAEPA,GAAW12C,KAAK8xC,kBAAqB9xC,KAAKuxC,mBAG/CvxC,KAAKgyC,YAAYrkD,MAAK,WAElB,IADA,IAAIgmD,EAAS,IAAI1yD,OAAOqtD,OAAOC,KAAKoI,aAC3B3+C,EAAK,EAAGqjC,EAAKyV,EAAQgB,iBAAkB95C,EAAKqjC,EAAGlxC,OAAQ6N,IAAM,CAClE,IAAIihB,EAASoiB,EAAGrjC,GACZg9C,EAAMl8B,WAAWG,EAAO9xB,SAAS6tD,OACjCC,EAAMn8B,WAAWG,EAAO9xB,SAAS8tD,OACrC,GAAI7gB,MAAM4gB,IAAQ5gB,MAAM6gB,GAEpB,YADAxrC,QAAQY,KAAK,kCAAmC,CAAE4O,OAAQA,EAAQ+7B,IAAKA,EAAKC,IAAKA,IAGrF,IAAInB,EAAe,IAAI7yD,OAAOqtD,OAAOC,KAAK2E,OAAOp6B,WAAWG,EAAO9xB,SAAS6tD,OAAQl8B,WAAWG,EAAO9xB,SAAS8tD,QAC/GtB,EAAOiD,OAAO9C,EAClB,CACA,IAAK,IAAIoC,EAAK,EAAGK,EAAKzF,EAAQqB,kBAAmB+D,EAAKK,EAAGpsD,OAAQ+rD,IAC/CK,EAAGL,GACTW,UAAUttD,SAAQ,SAAU1G,GAChC8wD,EAAOiD,OAAO/zD,EAClB,IAEJiuD,EAAQ1uD,IAAI00D,UAAUnD,EAC1B,GACJ,EACAjD,EAAWlzC,UAAU41C,aAAe,WAChC,MAAmC,WAA/BpzC,KAAKyxC,QAAQ3yC,cACN7d,OAAOqtD,OAAOC,KAAKwI,UAAUC,OAEA,cAA/Bh3C,KAAKyxC,QAAQ3yC,cACX7d,OAAOqtD,OAAOC,KAAKwI,UAAUE,UAEA,YAA/Bj3C,KAAKyxC,QAAQ3yC,cACX7d,OAAOqtD,OAAOC,KAAKwI,UAAUG,QAEjCj2D,OAAOqtD,OAAOC,KAAKwI,UAAUI,OACxC,EACAzG,EAAWlzC,UAAU45C,mBAAqB,SAAUrsD,GAChD,IAAI+lD,EAAU9wC,KAEd,YADgB,IAAZjV,IAAsBA,EAAU,CAAC,GAC9BiV,KAAKgyC,YAAYrkD,MAAK,WACzB,GAAImjD,EAAQoB,eACR,OAAOxkD,EAAQD,UACnB,IAAI+xB,EAASp0B,OAAOC,OAAO,CAAC,EAAG,CAC3BgsD,YAAavG,EAAQwG,eAAexG,EAAQa,UAC5C4F,eAAgBzG,EAAQyG,eACxBC,sBAAuB1G,EAAQ0G,uBAChCzsD,GAWH,GAVA+lD,EAAQoB,eAAiB,IAAIjxD,OAAOqtD,OAAOC,KAAKkJ,QAAQC,eAAel4B,GACvEsxB,EAAQoB,eAAeqB,YAAY,mBAAmB,SAAU/G,GAC9B,WAA1BA,EAAI7jC,KAAK7J,eAAwD,YAA1B0tC,EAAI7jC,KAAK7J,eAChD1T,OAAOC,OAAOmhD,EAAK,CACfzvB,KAAMyvB,EAAImL,QAAQd,UAAUe,WAAWx1D,KAAI,SAAUqB,GAAK,MAAO,CAAE0tD,SAAU1tD,EAAEuxD,MAAO9D,UAAWztD,EAAEwxD,MAAS,IAC5G4C,OAAQ/G,EAAQgH,WAAWtL,EAAImL,QAAQd,aAG/CrD,EAAchE,EAAOG,mBAAoBnD,EAAKsE,EAAQjuD,QAC1D,IACIiuD,EAAQe,kBAAmB,CAC3B,IAAIvtC,EAAQwsC,EACZA,EAAQoB,eAAeqB,YAAY,kBAAkB,SAAUt6B,GAC3D3U,EAAM0sC,aAAapnD,KAAKqvB,EAC5B,IACA63B,EAAQoB,eAAeqB,YAAY,kBAAkB,SAAUntB,GAC3D9hB,EAAM2sC,aAAarnD,KAAKw8B,EAC5B,GACJ,CACA,OAAO14B,EAAQD,SACnB,GACJ,EACAijD,EAAWlzC,UAAUu6C,sBAAwB,WACpC/3C,KAAKkyC,iBAEVlyC,KAAKkyC,eAAea,OAAO,MAC3B/yC,KAAKkyC,eAAiB,KAC1B,EACAxB,EAAWlzC,UAAU85C,eAAiB,SAAU3uC,GAE5C,YADa,IAATA,IAAmBA,EAAO,IACtBA,EAAK7J,eACT,IAAK,UACD,OAAO7d,OAAOqtD,OAAOC,KAAKkJ,QAAQO,YAAYC,QAClD,IAAK,WACD,OAAOh3D,OAAOqtD,OAAOC,KAAKkJ,QAAQO,YAAYE,SAClD,IAAK,YACD,OAAOj3D,OAAOqtD,OAAOC,KAAKkJ,QAAQO,YAAYG,UAClD,IAAK,SACD,OAAOl3D,OAAOqtD,OAAOC,KAAKkJ,QAAQO,YAAYI,OAClD,IAAK,SACD,OAAOn3D,OAAOqtD,OAAOC,KAAKkJ,QAAQO,YAAYK,OAClD,QACI,OAAO,KAEnB,EACA3H,EAAWlzC,UAAU86C,mBAAqB,SAAUC,EAAQC,GACxD,IAAI1H,EAAU9wC,KACdA,KAAKo3C,qBACAzpD,MAAK,WACF4qD,IAAWC,EACX1H,EAAQoB,eAAea,OAAOjC,EAAQ1uD,KAEjCo2D,IAAWD,GAChBzH,EAAQiH,uBAEhB,GACJ,EACArH,EAAWlzC,UAAUi7C,gBAAkB,SAAUF,GAC7C,IAAIzH,EAAU9wC,UACC,IAAXu4C,IAAqBA,EAAS,IAClCv4C,KAAKo3C,qBACAzpD,MAAK,WACNmjD,EAAQoB,eAAermD,WAAW,CAC9BwrD,YAAavG,EAAQwG,eAAeiB,IAE5C,GACJ,EACA7H,EAAWlzC,UAAUs6C,WAAa,SAAU/6B,GAExC,YADa,IAATA,IAAmBA,EAAO,IACvB97B,OAAOqtD,OAAOC,KAAKmK,SAASC,SAASb,WAAW/6B,EAC3D,EACA2zB,EAAWlzC,UAAUo7C,WAAa,SAAU5vB,GACxC,OAAO/nC,OAAOqtD,OAAOC,KAAKmK,SAASC,SAASC,WAAW5vB,EAC3D,EACA0nB,EAAWlzC,UAAUq7C,cAAgB,SAAUC,GAC3C,IAAIhI,EAAU9wC,UACQ,IAAlB84C,IAA4BA,EAAgB,IAChD,IAAIC,EAAQD,EAAcC,MAC1B,GAAKA,EAAL,CAEI1uD,MAAMkkB,QAAQwqC,KACdA,EAAQA,EAAM32D,KAAI,SAAUqB,GACxB,OAAO,IAAIxC,OAAOqtD,OAAOC,KAAK2E,OAAOzvD,EAAE0tD,SAAU1tD,EAAEytD,UACvD,KAEJ,IAAInoB,EAAU,IAAI9nC,OAAOqtD,OAAOC,KAAKyK,QAAQ5tD,OAAOC,OAAO,CAAC,EAAGytD,EAAe,CAAEC,MAAOA,KACvFhwB,EAAQwqB,YAAY,SAAS,WACzBC,EAAchE,EAAOQ,aAAc,CAAEjnB,QAASA,GAAW+nB,EAAQjuD,QACrE,IACAkmC,EAAQgqB,OAAO/yC,KAAK5d,KAChB02D,EAAcrF,aACd1qB,EAAQ0qB,WAAa,IAAIxyD,OAAOqtD,OAAOC,KAAKgG,WAAW,CACnDC,QAASsE,EAAcrF,WAAWe,QAClCC,YAAaqE,EAAcrF,WAAWgB,YACtCttD,SAAU2xD,EAAcrF,WAAWtsD,SACnCutD,SAAUoE,EAAcrF,WAAWiB,SACnCuE,cAAezI,EAAS,CAAC,EAAGsI,MAGpCtF,EAAchE,EAAOS,gBAAiB,CAAElnB,QAASA,EAAS+vB,cAAeA,GAAiB94C,KAAKnd,SAC/Fmd,KAAKmyC,kBAAkBvoD,KAAKm/B,EArBlB,CAsBd,EACA2nB,EAAWlzC,UAAU07C,gBAAkB,SAAUj2C,GAC7C,IAAI6tC,EAAU9wC,KACd,GAAmC,OAA/BA,KAAKoyC,sBAAgC,CACrCpyC,KAAKoyC,sBAAsB5tC,UAC3B,IAAK,IAAIxM,EAAK,EAAGqjC,EAAKr7B,KAAKmyC,kBAAmBn6C,EAAKqjC,EAAGlxC,OAAQ6N,IAC5CqjC,EAAGrjC,GACT+6C,OAAO,MAEnB/yC,KAAKmyC,kBAAoB,EAC7B,CACAnyC,KAAKoyC,sBAAwBpyC,KAAK2wC,cAC7BrhB,mBAAmBtvB,KAAK4xC,UACxB1xC,WAAU,SAAUuG,GAAWqqC,EAAQqI,wBAAwB1yC,EAAU,IACzExD,EAAS9Y,QAEd6V,KAAKgyC,YAAYrkD,MAAK,WAClBD,EAAQkT,IAAIqC,EAAS7gB,KAAI,SAAU2mC,GAC/B,MAAuB,iBAAZA,EACA+nB,EAAQ8H,WAAW7vB,GAEvBA,CACX,KAAIp7B,MAAK,SAAUikD,GACf,OAAOlkD,EAAQkT,IAAIgxC,EAASxvD,IAAI0uD,EAAQ+H,cAAcntC,KAAKolC,IAC/D,IAAGnjD,MAAK,WACJmjD,EAAQ3oC,UAAUutC,WAAU,WACxB5E,EAAQkC,oBACZ,GACJ,GACJ,GACJ,EACAtC,EAAWlzC,UAAU27C,wBAA0B,SAAU1yC,GACrD,IAAIqqC,EAAU9wC,KACTyG,EAAQtc,QAGb6V,KAAKgyC,YAAYrkD,MAAK,WAClB,IAAK,IAAIqK,EAAK,EAAGohD,EAAY3yC,EAASzO,EAAKohD,EAAUjvD,OAAQ6N,IAAM,CAC/D,IAAI2J,EAASy3C,EAAUphD,GACvB,GAAI2J,EAAOiD,QAAQza,OACf,IAAK,IAAIkxC,EAAK,EAAG6a,EAAKv0C,EAAOiD,QAASy2B,EAAK6a,EAAG/rD,OAAQkxC,IAAM,CACxD,IAAI8a,EAAaD,EAAG7a,GACpB,IAAK,IAAIge,KAAgBvI,EAAQqB,kBAC7B,GAAKrB,EAAQqB,kBAAkB5iD,eAAe8pD,GAA9C,CAGA,IACIC,EADAC,EAAkBzI,EAAQqB,kBAAkBkH,GAEhDC,EAAcxI,EAAQgH,WAAWyB,EAAgB1C,WACjD,IAAI2C,EAAerD,EAAW4C,MAAM32D,KAAI,SAAUqB,GAC9C,OAAO,IAAIxC,OAAOqtD,OAAOC,KAAK2E,OAAOzvD,EAAE0tD,SAAU1tD,EAAEytD,UACvD,IAEA,GAAIoI,IADSxI,EAAQgH,WAAW0B,GAChC,CAGAD,EAAgBxG,OAAO,MACvBjC,EAAQqB,kBAAkBxwC,OAAO03C,EAAc,GAC/C,KAHA,CAVA,CAeR,CAEJ,GAAI13C,EAAOkD,WAEP,IADA,IACS0xC,EAAK,EAAGkD,EADG3I,EAAQc,SAASz5C,MAAMwJ,EAAOtU,MAAOsU,EAAOtU,MAAQsU,EAAOkD,YAC7B0xC,EAAKkD,EAAgBtvD,OAAQosD,IAAM,CACjF,IAAImD,EAAeD,EAAgBlD,GACnCzF,EAAQ+H,cAAca,EAC1B,CAER,CACJ,IAAG/rD,MAAK,WACJmjD,EAAQ3oC,UAAUutC,WAAU,WACxB5E,EAAQkC,oBACZ,GACJ,GACJ,EACAtC,EAAWlzC,UAAU+3C,kBAAoB,WACrC,IAAK,IAAIv9C,EAAK,EAAGqjC,EAAKr7B,KAAKixC,aAAcj5C,EAAKqjC,EAAGlxC,OAAQ6N,IACxCqjC,EAAGrjC,GACT+6C,OAAO,MAElB/yC,KAAKixC,aAAe,EACxB,EACAP,EAAWlzC,UAAUm4C,kBAAoB,WACrC,IAAK,IAAI39C,EAAK,EAAGqjC,EAAKr7B,KAAKgxC,aAAch5C,EAAKqjC,EAAGlxC,OAAQ6N,IACxCqjC,EAAGrjC,GACT+6C,OAAO,MAElB/yC,KAAKgxC,aAAe,EACxB,EACA,EAAW,CACP,KACA,EAAW,cAAe7c,SAC3Buc,EAAWlzC,UAAW,iBAAa,GACtC,EAAW,CACP,KACA,EAAW,cAAe22B,SAC3Buc,EAAWlzC,UAAW,gBAAY,GACrC,EAAW,CACP,KACA,EAAW,cAAe22B,SAC3Buc,EAAWlzC,UAAW,oBAAgB,GACzC,EAAW,CACP,KACA,EAAW,cAAe22B,SAC3Buc,EAAWlzC,UAAW,YAAQ,GACjC,EAAW,CACP,KACA,EAAW,cAAeogC,UAC3B8S,EAAWlzC,UAAW,wBAAoB,GAC7C,EAAW,CACP,KACA,EAAW,cAAepS,SAC3BslD,EAAWlzC,UAAW,eAAW,GACpC,EAAW,CACP,KACA,EAAW,cAAeogC,UAC3B8S,EAAWlzC,UAAW,wBAAoB,GAC7C,EAAW,CACP,KACA,EAAW,cAAeogC,UAC3B8S,EAAWlzC,UAAW,sBAAkB,GAC3C,EAAW,CACP,KACA,EAAW,cAAepS,SAC3BslD,EAAWlzC,UAAW,eAAW,GACpC,EAAW,CACP,KACA,EAAW,cAAepS,SAC3BslD,EAAWlzC,UAAW,eAAW,GACpC,EAAW,CACP,KACA,EAAW,cAAepS,SAC3BslD,EAAWlzC,UAAW,iBAAa,GACtC,EAAW,CACP,KACA,EAAW,cAAeogC,UAC3B8S,EAAWlzC,UAAW,mBAAe,GACxC,EAAW,CACP,KACA,EAAW,cAAepS,SAC3BslD,EAAWlzC,UAAW,gBAAY,GACrC,EAAW,CACP,KACA,EAAW,cAAepS,SAC3BslD,EAAWlzC,UAAW,gBAAY,GACrC,EAAW,CACP,KACA,EAAW,cAAeogC,UAC3B8S,EAAWlzC,UAAW,sBAAkB,GAC3C,EAAW,CACP,KACA,EAAW,cAAepS,SAC3BslD,EAAWlzC,UAAW,6BAAyB,GAClD,EAAW,CACP,KACA,EAAW,cAAeogC,UAC3B8S,EAAWlzC,UAAW,yBAAqB,GACjC,EAAW,EACpB,UACA,QAAc,eACd,QAAOlc,QAAS,IAAW,IAAW,KAAe,IAAe0tD,GACpE,EAAW,oBAAqB,CAAC1tD,QAC7B,IACA,IACA,KACA,IACA0tD,KACL0B,EAEP,CA7pBiB,GA+pBjB,SAAS8C,EAAcpqD,EAAMipD,EAAQvrD,EAAQ4lD,GAEzC,IAAIiN,OADY,IAAZjN,IAAsBA,GAAU,GAEhCzrD,OAAO24D,YACPD,EAAc,IAAIC,YAAYxwD,EAAM,CAAEipD,OAAQA,EAAQ3F,QAASA,KAG/DiN,EAAch1D,SAASk1D,YAAY,gBACvBC,gBAAgB1wD,EAAMsjD,GAAS,EAAM,CAAEngD,KAAM8lD,IAE7DvrD,EAAO0sD,cAAcmG,EACzB,2NCpsBO,SAAS3f,EAAUJ,EAASmgB,GAC/B,IAAInuD,EAAWguC,EAAQjM,UAAUhkC,IAAI,KACrC,kBAAiB,sDACMiE,IAAnBmsD,GAA4D,mBAArB,GACvCA,EAAenuD,GAEnBguC,EAAQgK,gBAAgB,CACpB,iBAER,qGCMIoW,EAAgB,SAAStpB,EAAG15B,GAI5B,OAHAgjD,EAAgB5uD,OAAOmT,gBAClB,CAAEC,UAAW,cAAgBnU,OAAS,SAAUqmC,EAAG15B,GAAK05B,EAAElyB,UAAYxH,CAAG,GAC1E,SAAU05B,EAAG15B,GAAK,IAAK,IAAI8kB,KAAK9kB,EAAOA,EAAEzH,eAAeusB,KAAI4U,EAAE5U,GAAK9kB,EAAE8kB,GAAI,EACtEk+B,EAActpB,EAAG15B,EAC5B,EAEA,SAASijD,EAAUvpB,EAAG15B,GAElB,SAASkjD,IAAOl6C,KAAKnC,YAAc6yB,CAAG,CADtCspB,EAActpB,EAAG15B,GAEjB05B,EAAElzB,UAAkB,OAANxG,EAAa5L,OAAOkT,OAAOtH,IAAMkjD,EAAG18C,UAAYxG,EAAEwG,UAAW,IAAI08C,EACnF,CAEA,IAAIC,EAAe,WACf,SAASA,IACT,CAGA,OAFAA,EAAY38C,UAAU48C,SAAW,SAAUzO,GAAW,EACtDwO,EAAY38C,UAAU2vC,WAAa,WAAc,EAC1CgN,CACX,CANkB,GAOdE,EAAsB,SAAUC,GAEhC,SAASD,IACL,IAAI/1C,EAAQg2C,EAAOt8C,KAAKgC,OAASA,KAQjC,OAPAsE,EAAMyb,QAAU,SAAUoT,GACtB,IAAIkI,EAAKgf,EAAmBE,aAAapnB,GAAIqnB,EAAoBnf,EAAGmf,kBAAmBC,EAAOpf,EAAGof,KAC7FD,IACArnB,EAAE7E,iBACFhqB,EAAMqnC,QAAQ+O,SAASD,GAE/B,EACOn2C,CACX,CAoDA,OA/DA21C,EAAUI,EAAoBC,GAY9BD,EAAmB78C,UAAU48C,SAAW,SAAUzO,GAC1CA,EAAQgP,gBACR36C,KAAK2rC,QAAUA,EACf,sBAAqB,QAAS3rC,KAAK+f,SAAS,GAEpD,EACAs6B,EAAmB78C,UAAU2vC,WAAa,WACtC,yBAAwB,QAASntC,KAAK+f,SAAS,EACnD,EACAs6B,EAAmBE,aAAe,SAAU39B,GACxC,IAAIuQ,EAASvQ,EACTusB,EAAO,CACPqR,mBAAmB,EACnBC,KAAM,KACNG,OAAQ,MAER9zD,EAASuzD,EAAmBQ,kBAAkB1tB,EAAOrmC,QACzD,IAAKA,IAAWuzD,EAAmBS,mBAAmBh0D,GAClD,OAAOqiD,EAEX,GAAI4R,EAAaj0D,EAAQ,aAClBi0D,EAAaj0D,EAAQ,kBACrBi0D,EAAaj0D,EAAQ,sBACxB,OAAOqiD,EAEX,GAAIhc,EAAO6tB,QAAU7tB,EAAO8tB,SAAW9tB,EAAO+tB,SAAW/tB,EAAOguB,SAC5D,OAAOhS,EAEX,IAAIsR,EAAO3zD,EAAO+6B,aAAa,QAC/BsnB,EAAKyR,OAAS9zD,EACdqiD,EAAKsR,KAAOA,EACZ,IAAIW,EAAqC,IAAjBjuB,EAAOkuB,MAC3BC,EAAab,KAA6B,MAAnBA,EAAK77C,OAAO,IAAc,YAAcjc,KAAK83D,IAExE,OADAtR,EAAKqR,kBAAoBY,GAAqBE,EACvCnS,CACX,EACAkR,EAAmBQ,kBAAoB,SAAUU,GAC7C,KAAOA,GAAI,CACP,GAAmB,MAAfA,EAAGp8B,QACH,OAAOo8B,EAEXA,EAAKA,EAAGn1D,UACZ,CACJ,EACAi0D,EAAmBS,mBAAqB,SAAUh0D,GAC9C,IAAI00D,EAAe10D,EAAO+6B,aAAa,UACnC39B,EAAM,YACV,OAAQs3D,GACJA,IAAiBt3D,EAAIkF,MACJ,UAAjBoyD,CACR,EACOnB,CACX,CAjEyB,CAiEvBF,GACEY,EAAe,SAAUQ,EAAIE,GAAQ,OAAOF,EAAGR,aAAaU,EAAO,EAEnEC,EAAkB,SAAUpB,GAE5B,SAASoB,EAAeC,GACpB,IAAIr3C,EAAQg2C,EAAOt8C,KAAKgC,OAASA,KAMjC,OALAsE,EAAMs3C,WAAY,EAClBt3C,EAAMu3C,kBAAoBv3C,EAAMw3C,UAAUpwC,KAAKpH,GAC/CA,EAAMy3C,SAAW,cACjBz3C,EAAMqnC,QAAU,aAChBrnC,EAAMq3C,YAAcA,EACbr3C,CACX,CAoJA,OA7JA21C,EAAUyB,EAAgBpB,GAU1BoB,EAAel+C,UAAU48C,SAAW,SAAUrvD,GAC1C,GAAIiV,KAAK47C,UACL,MAAM,IAAI5wC,MAAM,uCAEpB,IAAIgxC,EAAWh8C,KAAK2rC,QAChBsQ,IAAmBlxD,EAAQmxD,UAC/Bl8C,KAAK47C,WAAY,EACjB,IAIIl+B,EAJAy+B,EAAoBn8C,KAAKjV,QAAUK,OAAOC,OAAO,CAAC,EAAG,CAAEu0C,KAAM,KAAO5/B,KAAKjV,QAASA,GAClFqxD,EAAUp8C,KAAK4/B,MAAQ,IAAMuc,EAAkBvc,KAAO,KAAKvvC,QAAQgsD,EAAc,KACjFC,EAAkBt8C,KAAKu8C,kBAAoD,IAAjCJ,EAAkBK,WAC5DC,EAAez8C,KAAK26C,iBAAmBwB,EAAkBD,WAAaF,GAAYA,EAASE,WAS/F,GAPIO,EACA/+B,EAAY,WAEP4+B,IACL5+B,EAAY,cAEhB,sBAA0BA,EAAW1d,KAAK67C,mBACtCS,GAAmBL,EAAgB,CACnC,IAAIS,EAAY18C,KAAK+7C,SACjBY,EAASD,EAAUE,SAASvsD,QAAQ,SAAU,SAAW+rD,EAC7D,IAAKK,IAAiBE,EAAQ,CAC1B,IAAIE,EAAW78C,KAAK68C,SAAW78C,KAAK88C,aAAa,MAAM,GAEvD,OADAJ,EAAUrsD,QAAQ+rD,EAAUM,EAAUK,OAAS,IAAMF,IAC9C,CACX,CACSJ,GAAgBE,GAAUD,EAAUvsD,OACrC0sD,EAAW78C,KAAK68C,SAAW78C,KAAKg9C,WAAW3sD,QAAQ4sD,EAAe,IACtEjB,EAASkB,aAAa,CAAC,EAAG,WAAWd,EAAUS,EAAWH,EAAUK,QAE5E,CAKA,GAJK/8C,KAAK68C,WACN78C,KAAK68C,SAAW78C,KAAK88C,aAAa,KAEtC98C,KAAK27C,YAAYvB,SAASp6C,OACrBm8C,EAAkBgB,OACnB,OAAOn9C,KAAKo9C,SAAS,GAE7B,EACA1B,EAAel+C,UAAU2vC,WAAa,WAClC,IAAIptB,EAAU/f,KAAK67C,kBACnB,yBAA6B,WAAY97B,GACzC,yBAA6B,aAAcA,GAC3C/f,KAAK47C,WAAY,EACjB57C,KAAK27C,YAAYxO,YACrB,EACAuO,EAAel+C,UAAU6/C,gBAAkB,WACvC,IAkHkCC,EAlH9BZ,EAAY18C,KAAK+7C,SAErB,OAD0BW,EAAUa,SAkHtB,KAlHgCb,EAAUc,WAiHtBF,EAjHgCZ,EAAUY,MAkHpC,IAAMA,EAAO,IAjHhCt9C,KAAK4/B,IAC9B,EACA8b,EAAel+C,UAAUk9C,SAAW,SAAUmC,EAAUxhB,GACpD,IAAI6a,OAAY,IAAP7a,EAAgB,CAAC,EAAIA,EAAIkb,EAAKL,EAAGuH,QAASA,OAAiB,IAAPlH,GAAuBA,EAAImH,EAAKxH,EAAG7lD,QAASA,OAAiB,IAAPqtD,GAAwBA,EACvI3B,EAAW/7C,KAAK+7C,SACpB,GAAIc,GAAYc,EAAYh7D,KAAKk6D,GAE7B,OADAd,EAAStB,KAAOoC,GACT,EAEX,IAAK78C,KAAK47C,UACN,OAAO,EAGX,GADAiB,EAAW78C,KAAK88C,aAAaD,GAAY,IACrC78C,KAAK68C,WAAaA,IAAaxsD,EAC/B,OAAO,EAEX2P,KAAK68C,SAAWA,EAChB,IAAIe,EAAM59C,KAAK4/B,KAAOid,EActB,MAbiB,KAAbA,GAA2B,MAARe,IACnBA,EAAMA,EAAIzlD,MAAM,GAAI,IAEpB6H,KAAK26C,eACLiD,EAAMA,EAAIvtD,QAAQ,KAAM,KACxB2P,KAAK2rC,QAAQt7C,EAAU,eAAiB,aAAa,CAAC,EAAG,WAAWutD,IAE/D59C,KAAKu8C,iBA8EtB,SAAoBG,EAAWG,EAAUxsD,GACrC,GAAIA,EAAS,CACT,IAAIoqD,EAAOiC,EAAUjC,KAAKpqD,QAAQ,qBAAsB,IACxDqsD,EAAUrsD,QAAQoqD,EAAO,IAAMoC,EACnC,MAEIH,EAAUvsD,KAAO,IAAM0sD,CAE/B,CArFYgB,CAAW9B,EAAUc,EAAUxsD,GAG/B0rD,EAAS1wD,OAAOuyD,IAEhBH,GACOz9C,KAAKo9C,SAASP,EAG7B,EACAnB,EAAel+C,UAAUsgD,aAAe,WACpC99C,KAAK2rC,QAAQoS,MACjB,EACArC,EAAel+C,UAAU42C,SAAW,SAAU5qB,GAC1C,WAAYA,CAChB,EACAkyB,EAAel+C,UAAUwgD,SAAW,SAAUvxD,EAAKuF,GAC/C,IAAIgqD,EAAWh8C,KAAK2rC,QAChBzgD,EAAQE,OAAOC,OAAO,CAAC,EAAG2wD,EAAS9wD,OACnCmwC,EAAKr7B,KAAK+7C,SAAUa,EAAWvhB,EAAGuhB,SAAUG,EAAS1hB,EAAG0hB,OAAQ5sD,EAAOkrC,EAAGlrC,KAC9EjF,EAAMuB,GAAOuF,EACbgqD,EAASkB,aAAahyD,EAAO,KAAM,GAAK0xD,EAAWG,EAAS5sD,EAChE,EACAurD,EAAel+C,UAAUygD,SAAW,SAAUxxD,GAE1C,OADYrB,OAAOC,OAAO,CAAC,EAAG2U,KAAK2rC,QAAQzgD,OAC9BuB,EACjB,EACAivD,EAAel+C,UAAU0gD,gBAAkB,WACvC,IAAIC,EAAen+C,KAAKi+C,SAAS,gBAKjC,YAJqBrwD,IAAjBuwD,IACAA,EAAen+C,KAAK2rC,QAAQxhD,OAAS,EACrC6V,KAAKg+C,SAAS,eAAgBG,IAE3BA,CACX,EACAzC,EAAel+C,UAAU4gD,GAAK,SAAUC,GACpCr+C,KAAK2rC,QAAQyS,GAAGC,EACpB,EACA3C,EAAel+C,UAAUw/C,SAAW,WAChC,OAAOh9C,KAAK+7C,SAAS5rD,KAAKwkC,OAAO,EACrC,EACA+mB,EAAel+C,UAAUs/C,aAAe,SAAUD,EAAUyB,GACxD,IAAIlC,EACJ,IAAKS,EACD,GAAI78C,KAAK26C,gBAAkB36C,KAAKu8C,kBAAoB+B,EAAgB,CAChE,IAAIC,EAAav+C,KAAK+7C,SACtBc,EAAW0B,EAAW3B,SAAW2B,EAAWxB,OAC5CX,EAAUp8C,KAAK4/B,KAAKvvC,QAAQmuD,EAAe,IACtC3B,EAASt2D,QAAQ61D,KAClBS,EAAWA,EAASloB,OAAOynB,EAAQjyD,QAE3C,MAEI0yD,EAAW78C,KAAKg9C,WAGxB,MAAO,IAAMH,EAASxsD,QAAQ4sD,EAAe,GACjD,EACAvB,EAAel+C,UAAUs+C,UAAY,WACnB97C,KAAK88C,aAAa,MAChB98C,KAAK68C,UACjB78C,KAAKo9C,SAAS,GAEtB,EACA1B,EAAel+C,UAAU4/C,SAAW,SAAUqB,GAC1C,IAAI5B,EAAW78C,KAAK68C,SAAW78C,KAAK88C,aAAa2B,GACjD,QAAOz+C,KAAKjV,QAAQ2zD,cAChB1+C,KAAKjV,QAAQ2zD,aAAa7B,EAElC,EACAnB,EAAezvB,OAAS,CAACkuB,GAClBuB,CACX,CA/JqB,CA+JnB,KACEuB,EAAgB,eAChBZ,EAAe,aACfmC,EAAgB,MAChBb,EAAc,+BAclB,SAAS3jB,EAAUxa,GACf,IAAIm/B,EAAUn/B,EACdm/B,EAAQ/hB,UAAU,IAAS8e,GAC3BiD,EAAQ7hB,UAAUqd,EAAaE,EACnC,+BC9RA,SAASuE,EAAGx1D,GACV,MAAM,IAAI4hB,MAAM,0BAA4B5hB,EAAO,MACrD,kBAEO,IAAIy1D,EAAU,WACnB,SAASA,IAET,CA0CA,OAxCAA,EAAQrhD,UAAU48C,SAAW,SAAkBrvD,GAC7C6zD,EAAG,WACL,EAEAC,EAAQrhD,UAAU2vC,WAAa,WAC7ByR,EAAG,aACL,EAEAC,EAAQrhD,UAAU6/C,gBAAkB,WAClCuB,EAAG,kBACL,EAEAC,EAAQrhD,UAAUk9C,SAAW,SAAkBmC,EAAU9xD,GACvD6zD,EAAG,WACL,EAEAC,EAAQrhD,UAAUsgD,aAAe,WAC/Bc,EAAG,eACL,EAEAC,EAAQrhD,UAAU42C,SAAW,SAAkB5qB,GAC7Co1B,EAAG,WACL,EAEAC,EAAQrhD,UAAUwgD,SAAW,SAAkBvxD,EAAKuF,GAClD4sD,EAAG,WACL,EAEAC,EAAQrhD,UAAUygD,SAAW,SAAkBxxD,GAC7CmyD,EAAG,WACL,EAEAC,EAAQrhD,UAAU0gD,gBAAkB,WAClCU,EAAG,kBACL,EAEAC,EAAQrhD,UAAU4gD,GAAK,SAAYC,GACjCO,EAAG,KACL,EAEOC,CACT,CA9CqB,4GCcjB7E,EAAgB,SAAStpB,EAAG15B,GAI5B,OAHAgjD,EAAgB5uD,OAAOmT,gBAClB,CAAEC,UAAW,cAAgBnU,OAAS,SAAUqmC,EAAG15B,GAAK05B,EAAElyB,UAAYxH,CAAG,GAC1E,SAAU05B,EAAG15B,GAAK,IAAK,IAAI8kB,KAAK9kB,EAAO5L,OAAOoS,UAAUjO,eAAeyO,KAAKhH,EAAG8kB,KAAI4U,EAAE5U,GAAK9kB,EAAE8kB,GAAI,EAC7Fk+B,EAActpB,EAAG15B,EAC5B,EAUA,SAAS8nD,EAAUppB,EAASqpB,EAAYC,EAAGC,GAEvC,OAAO,IAAKD,IAAMA,EAAItxD,KAAU,SAAUD,EAAS+sC,GAC/C,SAAS0kB,EAAUltD,GAAS,IAAMmjC,EAAK8pB,EAAUpuD,KAAKmB,GAAS,CAAE,MAAOmhC,GAAKqH,EAAOrH,EAAI,CAAE,CAC1F,SAASgsB,EAASntD,GAAS,IAAMmjC,EAAK8pB,EAAiB,MAAEjtD,GAAS,CAAE,MAAOmhC,GAAKqH,EAAOrH,EAAI,CAAE,CAC7F,SAASgC,EAAKnsC,GAJlB,IAAegJ,EAIahJ,EAAOqgB,KAAO5b,EAAQzE,EAAOgJ,QAJ1CA,EAIyDhJ,EAAOgJ,MAJhDA,aAAiBgtD,EAAIhtD,EAAQ,IAAIgtD,GAAE,SAAUvxD,GAAWA,EAAQuE,EAAQ,KAIjBrE,KAAKuxD,EAAWC,EAAW,CAC7GhqB,GAAM8pB,EAAYA,EAAUl3C,MAAM2tB,EAASqpB,GAAc,KAAKluD,OAClE,GACJ,CAEA,SAASuuD,EAAY1pB,EAASlvC,GAC1B,IAAsGw6C,EAAGp9C,EAAG4sC,EAAGpI,EAA3GvpB,EAAI,CAAEq1C,MAAO,EAAGmL,KAAM,WAAa,GAAW,EAAP7uB,EAAE,GAAQ,MAAMA,EAAE,GAAI,OAAOA,EAAE,EAAI,EAAG8uB,KAAM,GAAI94C,IAAK,IAChG,OAAO4hB,EAAI,CAAEv3B,KAAM0uD,EAAK,GAAI,MAASA,EAAK,GAAI,OAAUA,EAAK,IAAwB,mBAAX7hD,SAA0B0qB,EAAE1qB,OAAOC,UAAY,WAAa,OAAOqC,IAAM,GAAIooB,EACvJ,SAASm3B,EAAKxpB,GAAK,OAAO,SAAUr7B,GAAK,OACzC,SAAcub,GACV,GAAI+qB,EAAG,MAAM,IAAI3iC,UAAU,mCAC3B,KAAOQ,OACH,GAAImiC,EAAI,EAAGp9C,IAAM4sC,EAAY,EAARva,EAAG,GAASryB,EAAU,OAAIqyB,EAAG,GAAKryB,EAAS,SAAO4sC,EAAI5sC,EAAU,SAAM4sC,EAAExyB,KAAKpa,GAAI,GAAKA,EAAEiN,SAAW2/B,EAAIA,EAAExyB,KAAKpa,EAAGqyB,EAAG,KAAK5M,KAAM,OAAOmnB,EAE3J,OADI5sC,EAAI,EAAG4sC,IAAGva,EAAK,CAAS,EAARA,EAAG,GAAQua,EAAEx+B,QACzBikB,EAAG,IACP,KAAK,EAAG,KAAK,EAAGua,EAAIva,EAAI,MACxB,KAAK,EAAc,OAAXpX,EAAEq1C,QAAgB,CAAEliD,MAAOikB,EAAG,GAAI5M,MAAM,GAChD,KAAK,EAAGxK,EAAEq1C,QAAStwD,EAAIqyB,EAAG,GAAIA,EAAK,CAAC,GAAI,SACxC,KAAK,EAAGA,EAAKpX,EAAE2H,IAAIyD,MAAOpL,EAAEygD,KAAKr1C,MAAO,SACxC,QACI,MAAkBumB,GAAZA,EAAI3xB,EAAEygD,MAAYn1D,OAAS,GAAKqmC,EAAEA,EAAErmC,OAAS,KAAkB,IAAV8rB,EAAG,IAAsB,IAAVA,EAAG,IAAW,CAAEpX,EAAI,EAAG,QAAU,CAC3G,GAAc,IAAVoX,EAAG,MAAcua,GAAMva,EAAG,GAAKua,EAAE,IAAMva,EAAG,GAAKua,EAAE,IAAM,CAAE3xB,EAAEq1C,MAAQj+B,EAAG,GAAI,KAAO,CACrF,GAAc,IAAVA,EAAG,IAAYpX,EAAEq1C,MAAQ1jB,EAAE,GAAI,CAAE3xB,EAAEq1C,MAAQ1jB,EAAE,GAAIA,EAAIva,EAAI,KAAO,CACpE,GAAIua,GAAK3xB,EAAEq1C,MAAQ1jB,EAAE,GAAI,CAAE3xB,EAAEq1C,MAAQ1jB,EAAE,GAAI3xB,EAAE2H,IAAI5c,KAAKqsB,GAAK,KAAO,CAC9Dua,EAAE,IAAI3xB,EAAE2H,IAAIyD,MAChBpL,EAAEygD,KAAKr1C,MAAO,SAEtBgM,EAAKzvB,EAAKwX,KAAK03B,EAAS72B,EAC5B,CAAE,MAAOs0B,GAAKld,EAAK,CAAC,EAAGkd,GAAIvvC,EAAI,CAAG,CAAE,QAAUo9C,EAAIxQ,EAAI,CAAG,CACzD,GAAY,EAARva,EAAG,GAAQ,MAAMA,EAAG,GAAI,MAAO,CAAEjkB,MAAOikB,EAAG,GAAKA,EAAG,QAAK,EAAQ5M,MAAM,EAC9E,CAtBgD8rB,CAAK,CAACY,EAAGr7B,GAAK,CAAG,CAuBrE,CAKA,IAAI8kD,EAAoC,WACpC,SAASA,IACT,CAqBA,OAdAA,EAAmBhiD,UAAUiiD,aAAe,SAAU5lB,EAAQ3b,GAC1D,OAAO4gC,EAAU9+C,UAAM,OAAQ,GAAQ,WACnC,IAAIsS,EACJ,OAAO8sC,EAAYp/C,MAAM,SAAUq7B,GAC/B,OAAQA,EAAG6Y,OACP,KAAK,EAAG,MAAO,CAAC,EAAara,EAAO6lB,SAASxhC,EAAMyhC,UACnD,KAAK,EAGD,OAFArtC,EAAO+oB,EAAGgkB,OACVnhC,EAAM0hC,SAAW,8BAA6BttC,GACvC,CAAC,GAEpB,GACJ,GACJ,EACOktC,CACX,CAxBuC,GA8CnCK,EAA+B,SAAUvF,GAEzC,SAASuF,IACL,IAAIv7C,EAAQg2C,EAAOt8C,KAAKgC,OAASA,KAwDjC,OAvDAsE,EAAMw7C,eAAiB10D,OAAOkT,OAAO,MACrCgG,EAAMy7C,cAAgB30D,OAAOkT,OAAO,MACpCgG,EAAM07C,mBAAqB,IAAIn3D,IAC/Byb,EAAM27C,kBAAkB,IAAIT,GAC5Bl7C,EAAM47C,UAAU,0BAA2B,CACvCC,MAAO,SAAU1lB,GAAY,OAAOqkB,EAAUx6C,OAAO,OAAQ,GAAQ,WACjE,IAAgB4Z,EAEhB,OAAOkhC,EAAYp/C,MAAM,SAAUq7B,GAC/B,OAAQA,EAAG6Y,OACP,KAAK,EAmBD,OADAh2B,EAAQle,KAAKogD,iCAAiC3lB,IAClC4lB,iBAAyB,CAAC,EAAa,GAC5C,CAAC,EAAargD,KAAKsgD,eAAeb,aAAaz/C,KAAMke,IAChE,KAAK,EACDmd,EAAGgkB,OACHhkB,EAAG6Y,MAAQ,EACf,KAAK,EAAG,MAAO,CAAC,EAAch2B,GAEtC,GACJ,GAAI,IAER,gBAAsB,SAAUZ,GAC5B,IAAIuQ,EAAW0yB,EAAoBtsB,EACb7oC,OAAO6nC,oBAAoBpF,GAM5CtjC,MAAK,SAAUkwC,GAChB,IAAI+lB,EAAgB3yB,EAAS4M,GAAUgmB,QACvC,MAA6B,iBAAlBD,GACAljC,EAASmd,EAAU+lB,EAGlC,GACJ,EACOl8C,CACX,CAyLA,OApVJ,SAAmBosB,EAAG15B,GAClB,GAAiB,mBAANA,GAA0B,OAANA,EAC3B,MAAM,IAAIqH,UAAU,uBAAyBkT,OAAOva,GAAK,iCAE7D,SAASkjD,IAAOl6C,KAAKnC,YAAc6yB,CAAG,CADtCspB,EAActpB,EAAG15B,GAEjB05B,EAAElzB,UAAkB,OAANxG,EAAa5L,OAAOkT,OAAOtH,IAAMkjD,EAAG18C,UAAYxG,EAAEwG,UAAW,IAAI08C,EACnF,CA0FID,CAAU4F,EAAevF,GA4DzBuF,EAAcriD,UAAUkjD,QAAU,SAAUf,EAASgB,GAEjD,YADmB,IAAfA,IAAyBA,GAAa,GACnC7B,EAAU9+C,UAAM,OAAQ,GAAQ,WACnC,IAAI4gD,EAAcnmB,EAAUomB,EAAcC,EAAUC,EAAezjC,EAEnE,OAAO8hC,EAAYp/C,MAAM,SAAUq7B,GAC/B,OAAQA,EAAG6Y,OACP,KAAK,EAID,GAHA0M,EAAejB,EAAQ1xD,MAAM,KAC7BwsC,EAAWmmB,EAAaj/C,OAAOi/C,EAAaz2D,OAAS,EAAG,GAAG,KAC3D02D,EAAuC,IAAxBD,EAAaz2D,OAAey2D,EAAa,GAAK,MAC1C,MAAO,CAAC,EAAa,GAExC,KADAE,EAAW9gD,KAAK+/C,cAAcc,IAE1B,MAAM,IAAI71C,MAAM,UAAY61C,EAAe,qCAK/C,MAAO,CAAC,EAAaC,EAASX,MAAM1lB,IACxC,KAAK,EAgBL,KAAK,EAAG,MAAO,CAAC,EAAcY,EAAGgkB,QAfjC,KAAK,EACD,OAAIkB,EAAoB7zD,EAAE+tC,IAClBkmB,GAAcK,EAAOC,IAGlB,CAAC,EAAcV,EAAoB9lB,MAE9CsmB,EAAgB,SAAWtmB,EACtB8lB,EAAoB7zD,EAAEq0D,IACvBJ,GAAcK,EAAOC,IAIzB3jC,EAAWijC,EAAoBQ,GACxB,CAAC,EAAa,IAAIrzD,EAAQ4vB,KANiB,CAAC,EAAa,IAQpE,KAAK,EAAG,MAAM,IAAItS,MAAM,kCAAoCyvB,GAEpE,GACJ,GACJ,EAMAolB,EAAcriD,UAAUpb,IAAM,SAAUyf,EAAIgrB,GAAU,EAOtDgzB,EAAcriD,UAAU0jD,cAAgB,SAAUzmB,EAAUC,GACxD,OAAOD,CACX,EAOAolB,EAAcriD,UAAUm9B,UAAY,SAAUF,EAAUC,GACpD,OAAOhtC,EAAQD,QAAQgtC,EAC3B,EAKAolB,EAAcriD,UAAUyiD,kBAAoB,SAAUK,GAClDtgD,KAAKsgD,eAAiBA,CAC1B,EAMAT,EAAcriD,UAAU2jD,eAAiB,SAAUC,GAC/C,IAAI98C,EAAQtE,KACZ,OAAOtS,EAAQkT,IAAIwgD,EAAIh/D,KAAI,SAAUyf,GAAM,OAAOyC,EAAMw1B,WAAWj4B,EAAK,IAC5E,EAMAg+C,EAAcriD,UAAUs8B,WAAa,SAAUW,EAAUkmB,GAErD,YADmB,IAAfA,IAAyBA,GAAa,GACnC7B,EAAU9+C,UAAM,OAAQ,GAAQ,WACnC,IAAI1T,EAAU+0D,EAAab,EAC3B,OAAOpB,EAAYp/C,MAAM,SAAUq7B,GAC/B,OAAQA,EAAG6Y,OACP,KAAK,EAED,OADA5nD,EAAW0T,KAAK8/C,eAAerlB,IAEpB,CAAC,EAAcnuC,IAE1B+0D,EAAcrhD,KAAKggD,mBAAmBr2D,IAAI8wC,IAE/B,CAAC,EAAc4mB,IAE1BA,EAAcrhD,KAAK0gD,QAAQjmB,EAAUkmB,GACrC3gD,KAAKggD,mBAAmBn2D,IAAI4wC,EAAU4mB,GAC/B,CAAC,EAAaA,IACzB,KAAK,EAID,OAHAb,EAAgBnlB,EAAGgkB,OACnBr/C,KAAK8/C,eAAerlB,GA7L5C,SAA+B+lB,EAAe/lB,GAC1C,IACIhuC,EACA60D,EAFAx6D,EAAS05D,EAOb,GAJI15D,EAAOy6D,eACPz6D,EAASA,EAAO06D,SAEpB,SAAW16D,EAAQ,IAAI,KAAO2zC,EAAU,YAClB,iBAAX3zC,EACP,IAAK2F,KAAO3F,EAEqB,mBAD7Bw6D,EAAgBx6D,EAAO2F,KAEnB,SAAW60D,EAAe,IAAI,KAAO7mB,EAAUhuC,IAI3D,OAAO+zD,CACX,CA4KwDiB,CAAsBjB,EAAe/lB,GACrEz6B,KAAKggD,mBAAmBzjC,OAAOke,GACxB,CAAC,EAAc+lB,GAElC,GACJ,GACJ,EAMAX,EAAcriD,UAAUiiD,aAAe,SAAU7B,GAC7C,OAAO59C,KAAK85B,WAAW95B,KAAK0hD,iBAAiB9D,EAAK,4BAA4B,EAClF,EAMAiC,EAAcriD,UAAUkiD,SAAW,SAAU9B,GACzC,OAAOkB,EAAU9+C,UAAM,OAAQ,GAAQ,WACnC,IAAIhX,EAAQ24D,EACZ,OAAOvC,EAAYp/C,MAAM,SAAUq7B,GAC/B,OAAQA,EAAG6Y,OACP,KAAK,EAAG,MAAO,CAAC,EAAal0C,KAAK85B,WAAW8jB,GAAK,IAClD,KAAK,EAGD,OAFA50D,EAASqyC,EAAGgkB,OACZsC,EAAgB34D,GAAUA,EAAO44D,WAAa54D,EAAOw4D,QAAUx4D,EAC3DgX,KAAK6hD,kBAAkBF,GAEhB,CAAC,EAAc3hD,KAAK8hD,WAAWH,IAEnC,CAAC,EAAgC,iBAAX34D,EAAsBA,EAAS24D,GAExE,GACJ,GACJ,EAMA9B,EAAcriD,UAAUqkD,kBAAoB,SAAU1vB,GAClD,OAAOA,aAAa9nC,OAAS8nC,EAAE,aAAc9nC,OAAS8nC,EAAE5iC,eAAe,WAC3E,EAMAswD,EAAcriD,UAAUskD,WAAa,SAAUC,GAC3C,IAAI/4D,EAAS+4D,EAAgB7gE,WAM7B,OAHI6gE,EAAgBx3D,MAAK,SAAUmC,GAAK,OAAOA,EAAE,EAAI,MACjD1D,EAASA,EAAOqH,QAAQ,kCAAmC,KAExDrH,CACX,EAOA62D,EAAcriD,UAAUkkD,iBAAmB,SAAU9D,EAAKoE,GACtD,OAAOA,EAAa,IAAMpE,CAC9B,EAMAiC,EAAcriD,UAAU0iD,UAAY,SAAU8B,EAAYzX,GACtDvqC,KAAK+/C,cAAciC,GAAczX,CACrC,EACOsV,CACX,CAtPkC,CAsPhC,MACF,YAAkBA,iFCjXdhjD,EAAe,WAAc,SAASC,EAAiBhW,EAAQiW,GAAS,IAAK,IAAIzF,EAAI,EAAGA,EAAIyF,EAAM5S,OAAQmN,IAAK,CAAE,IAAI0F,EAAaD,EAAMzF,GAAI0F,EAAWC,WAAaD,EAAWC,aAAc,EAAOD,EAAWE,cAAe,EAAU,UAAWF,IAAYA,EAAWG,UAAW,GAAM/R,OAAOgS,eAAetW,EAAQkW,EAAWvQ,IAAKuQ,EAAa,CAAE,CAAE,OAAO,SAAUK,EAAaC,EAAYC,GAAiJ,OAA9HD,GAAYR,EAAiBO,EAAYG,UAAWF,GAAiBC,GAAaT,EAAiBO,EAAaE,GAAqBF,CAAa,CAAG,CAA7hB,GAOR4kD,EAAqB,SAA4BtuC,EAAKvqB,GAG/D4W,KAAK2T,IAAMA,EACX3T,KAAK5W,KAAOA,CACd,EAEW84D,EAAwB,WACjC,SAASA,EAAsBvC,GAG7B3/C,KAAKqgD,kBAAmB,EACxBrgD,KAAKmiD,gBAAiB,EACtBniD,KAAKqjC,UAAY,KACjBrjC,KAAKolB,aAAe,KAEpBplB,KAAK2/C,QAAUA,EACf3/C,KAAKoiD,QAAU,KACfpiD,KAAKqiD,UAAY,KACjBriD,KAAKsiD,SAAW,IAClB,CAoDA,OAlDAJ,EAAsB1kD,UAAU+kD,cAAgB,SAAuB5uC,EAAKvqB,GAC1E,IAAIo5D,EAA0B,iBAAR7uC,GAAmB,QAAeA,EAAK3T,KAAK2/C,SAAW,SAAWhsC,GAAK8mB,SAE7Fz6B,KAAKolB,aAAax7B,KAAK,IAAIq4D,EAAmBO,EAAUp5D,GAC1D,EAEAyT,EAAaqlD,EAAuB,CAAC,CACnCz1D,IAAK,WACL9C,IAAK,WACH,OAAOqW,KAAKqiD,SACd,EACAx4D,IAAK,SAAamI,GAChB,IACI3I,EADAs2D,EAAU3/C,KAAK2/C,QAEftzD,OAAU,EACVsnB,OAAM,EACNyR,OAAe,EAEnBplB,KAAKqiD,UAAYrwD,EACjBgO,KAAKqgD,kBAAmB,EAExBh3D,EAAW2I,EAAMwiD,QAAQ/Y,iBAAiB,WAC1CrW,EAAeplB,KAAKolB,aAAe,IAAI/6B,MAAMhB,EAASc,QAEtD,IAAK,IAAImN,EAAI,EAAGsI,EAAKvW,EAASc,OAAQmN,EAAIsI,IAAMtI,EAAG,CAIjD,KAFAqc,GADAtnB,EAAUhD,EAASiO,IACLuqB,aAAa,SAGzB,MAAM,IAAI7W,MAAM,wBAA0B20C,EAAU,6BAGtDv6B,EAAa9tB,GAAK,IAAI2qD,GAAmB,QAAetuC,EAAKgsC,GAAUtzD,EAAQw1B,aAAa,OAExFx1B,EAAQjG,YACViG,EAAQjG,WAAWq8D,YAAYp2D,EAEnC,CACF,GACC,CACDI,IAAK,UACL9C,IAAK,WACH,OAAOqW,KAAKsiD,QACd,EACAz4D,IAAK,SAAamI,GAChBgO,KAAKsiD,SAAWtwD,EAChBgO,KAAKmiD,gBAAiB,CACxB,KAGKD,CACT,CAlEmC,GAoExBQ,EAAS,WAClB,SAASA,IAGP1iD,KAAK2iD,iBAAmB,CAAC,CAC3B,CA0CA,OAxCAD,EAAOllD,UAAUpb,IAAM,SAAayf,EAAIgrB,GACtC,MAAM,IAAI7hB,MAAM,0CAClB,EAEA03C,EAAOllD,UAAU0jD,cAAgB,SAAuBzmB,EAAUC,GAChE,MAAM,IAAI1vB,MAAM,8DAClB,EAEA03C,EAAOllD,UAAUm9B,UAAY,SAAmBF,EAAUC,GACxD,MAAM,IAAI1vB,MAAM,2FAClB,EAEA03C,EAAOllD,UAAUs8B,WAAa,SAAoBj4B,GAChD,MAAM,IAAImJ,MAAM,yCAClB,EAEA03C,EAAOllD,UAAU2jD,eAAiB,SAAwBC,GACxD,MAAM,IAAIp2C,MAAM,6CAClB,EAEA03C,EAAOllD,UAAUiiD,aAAe,SAAsB7B,GACpD,MAAM,IAAI5yC,MAAM,2CAClB,EAEA03C,EAAOllD,UAAUkiD,SAAW,SAAkB9B,GAC5C,MAAM,IAAI5yC,MAAM,uCAClB,EAEA03C,EAAOllD,UAAUkkD,iBAAmB,SAA0B9D,EAAKoE,GACjE,MAAM,IAAIh3C,MAAM,2DAClB,EAEA03C,EAAOllD,UAAU0iD,UAAY,SAAmB8B,EAAYzX,GAC1D,MAAM,IAAIv/B,MAAM,+DAClB,EAEA03C,EAAOllD,UAAU4iD,iCAAmC,SAA0CT,GAC5F,OAAO3/C,KAAK2iD,iBAAiBhD,KAAa3/C,KAAK2iD,iBAAiBhD,GAAW,IAAIuC,EAAsBvC,GACvG,EAEO+C,CACT,CAhDoB,oFChFb,IAAIzW,EAAkB,WAC3B,SAASA,IAET,CA0CA,OAxCAA,EAAgBzuC,UAAU0uC,MAAQ,SAAetrB,GAG/C,IAFA,IAAIgiC,EAEK34D,EAAOC,UAAUC,OAAQg7B,EAAO96B,MAAMJ,EAAO,EAAIA,EAAO,EAAI,GAAIK,EAAO,EAAGA,EAAOL,EAAMK,IAC9F66B,EAAK76B,EAAO,GAAKJ,UAAUI,IAG5Bs4D,EAAWn5C,SAASyiC,MAAMnkC,MAAM66C,EAAU,CAAC,UAAYhiC,EAAO/e,GAAK,KAAK9a,OAAOo+B,GAClF,EAEA8mB,EAAgBzuC,UAAU2rC,KAAO,SAAcvoB,GAG7C,IAFA,IAAIiiC,EAEKC,EAAQ54D,UAAUC,OAAQg7B,EAAO96B,MAAMy4D,EAAQ,EAAIA,EAAQ,EAAI,GAAIC,EAAQ,EAAGA,EAAQD,EAAOC,IACpG59B,EAAK49B,EAAQ,GAAK74D,UAAU64D,IAG7BF,EAAYp5C,SAAS0/B,KAAKphC,MAAM86C,EAAW,CAAC,SAAWjiC,EAAO/e,GAAK,KAAK9a,OAAOo+B,GAClF,EAEA8mB,EAAgBzuC,UAAU6M,KAAO,SAAcuW,GAG7C,IAFA,IAAIoiC,EAEKC,EAAQ/4D,UAAUC,OAAQg7B,EAAO96B,MAAM44D,EAAQ,EAAIA,EAAQ,EAAI,GAAIC,EAAQ,EAAGA,EAAQD,EAAOC,IACpG/9B,EAAK+9B,EAAQ,GAAKh5D,UAAUg5D,IAG7BF,EAAYv5C,SAASY,KAAKtC,MAAMi7C,EAAW,CAAC,SAAWpiC,EAAO/e,GAAK,KAAK9a,OAAOo+B,GAClF,EAEA8mB,EAAgBzuC,UAAUkM,MAAQ,SAAekX,GAG/C,IAFA,IAAIuiC,EAEKC,EAAQl5D,UAAUC,OAAQg7B,EAAO96B,MAAM+4D,EAAQ,EAAIA,EAAQ,EAAI,GAAIC,EAAQ,EAAGA,EAAQD,EAAOC,IACpGl+B,EAAKk+B,EAAQ,GAAKn5D,UAAUm5D,IAG7BF,EAAY15C,SAASC,MAAM3B,MAAMo7C,EAAW,CAAC,UAAYviC,EAAO/e,GAAK,KAAK9a,OAAOo+B,GACpF,EAEO8mB,CACT,CA9C6B,sPCAtB,IAAID,EAAW,CACpBltB,KAAM,EACNpV,MAAO,GACPW,KAAM,GACN8+B,KAAM,GACN+C,MAAO,IAGLoX,EAAU,CAAC,EACXC,EAAY,GACZC,EAAqBxX,EAASltB,KAE9B2kC,EAAiB,CAAC,OAAQ,QAAS,OAAQ,OAAQ,SACvD,SAASC,EAAgB3X,GACvB,OAAO0X,EAAe77D,QAAO,SAAUwiD,GACrC,OAAOA,IAAM2B,CACf,IAAG5hD,OAAS,CACd,CAEA,SAASw5D,IACP,MAAO,CAAC3jD,MAAMjZ,OAAOsD,MAAMmT,UAAUrF,MAAM6F,KAAK9T,WAClD,CAEA,SAAS05D,EAAW7X,GAClB,IAAI8X,EAAY7X,EAASD,GACzB,OAAO,WACL,KAAI/rC,KAAK+rC,MAAQ8X,GAMjB,IAFA,IAAIz5D,EAAOu5D,EAAW57C,MAAM/H,KAAM9V,WAC9BoN,EAAIisD,EAAUp5D,OACXmN,KAAK,CACV,IAAIwsD,GAEHA,EAAeP,EAAUjsD,IAAIy0C,GAAOhkC,MAAM+7C,EAAc15D,EAC3D,CACF,CACF,CAEA,SAAS25D,EAAiBhY,GACxB,IAAI8X,EAAY7X,EAASD,GACzB,OAAO,WACL,KAAI/rC,KAAK+rC,MAAQ8X,GAMjB,IAFA,IAAIz5D,EAAOu5D,EAAW57C,MAAM/H,KAAM9V,WAC9BoN,EAAIisD,EAAUp5D,OACXmN,KAAK,CACV,IAAI0sD,EAAWT,EAAUjsD,QACD1J,IAApBo2D,EAASjY,IACXiY,EAASjY,GAAOhkC,MAAMi8C,EAAU55D,EAEpC,CACF,CACF,CAEA,SAAS65D,IACP,IAAI3nC,EAAQ4nC,EAAO1mD,UACnB,IAAK,IAAI2mD,KAAUnY,EACb0X,EAAgBS,GACH,SAAXA,IACF7nC,EAAM6nC,GAAUP,EAAWO,IAG7B7nC,EAAM6nC,GAAUJ,EAAiBI,EAGvC,CAWO,SAAS1T,EAAU5uC,GACxB,OAAOyhD,EAAQzhD,IAAO,IAAIqiD,EAAOriD,EACnC,CAEO,SAASuiD,EAAYJ,GACO,IAA7BT,EAAU35D,KAAKo6D,IACjBC,GAEJ,CAEO,SAASI,EAAeL,GAC7BT,EAAYA,EAAU37D,QAAO,SAAUmP,GACrC,OAAOA,IAAMitD,CACf,GACF,CAEO,SAASM,IACd,MAAO,GAAGv9D,OAAOw8D,EACnB,CAEO,SAASgB,IACdhB,EAAY,GA9Bd,WACE,IAAIjnC,EAAQ4nC,EAAO1mD,UACnB,IAAK,IAAIgnD,KAAWxY,EACF,SAAZwY,IACFloC,EAAMkoC,GAAW,WAAa,EAGpC,CAwBEC,EACF,CAEO,SAASC,EAAet7D,EAAM4I,GACnC,QAAuBpE,IAAnBo+C,EAAS5iD,GACX,MAAM4hB,MAAM,cAAgB5hB,EAAO,qBAGrC,GAAIgrC,MAAMpiC,GACR,MAAMgZ,MAAM,2BAGdghC,EAAS5iD,GAAQ4I,EAEbuxD,EAAUp5D,OAAS,EACrB85D,IAEAC,EAAO1mD,UAAUpU,GAAQ,WAAa,CAE1C,CAEO,SAASu7D,EAAkBv7D,GAChC,QAAuBwE,IAAnBo+C,EAAS5iD,GAAb,CAIA,GAAIs6D,EAAgBt6D,GAClB,MAAM4hB,MAAM,uBAAyB5hB,EAAO,+BAGvC4iD,EAAS5iD,UACT86D,EAAO1mD,UAAUpU,EAPxB,CAQF,CAEO,SAASw7D,EAAS7Y,GAEvB,IAAK,IAAIt/C,KADT+2D,EAAqBzX,EACLuX,EACdA,EAAQ72D,GAAKm4D,SAAS7Y,EAE1B,CAEO,SAAS8Y,IACd,OAAOrB,CACT,CAEO,IAAIU,EAAS,WAClB,SAASA,EAAOriD,GAGd,IAAIijD,EAASxB,EAAQzhD,GACrB,GAAIijD,EACF,OAAOA,EAGTxB,EAAQzhD,GAAM7B,KACdA,KAAK6B,GAAKA,EACV7B,KAAK+rC,MAAQyX,CACf,CAkBA,OAhBAU,EAAO1mD,UAAU0uC,MAAQ,SAAezyB,GAAU,EAElDyqC,EAAO1mD,UAAU2rC,KAAO,SAAc1vB,GAAU,EAEhDyqC,EAAO1mD,UAAU6M,KAAO,SAAcoP,GAAU,EAEhDyqC,EAAO1mD,UAAUkM,MAAQ,SAAe+P,GAAU,EAElDyqC,EAAO1mD,UAAUonD,SAAW,SAAkB7Y,GAC5C/rC,KAAK+rC,MAAQA,CACf,EAEAmY,EAAO1mD,UAAUunD,eAAiB,WAChC,OAAO/kD,KAAK+rC,QAAUC,EAASE,KACjC,EAEOgY,CACT,CA/BoB,2FCnJhBzmD,GAFWrS,OAAOC,OAEU,mBAAXqS,QAAoD,iBAApBA,OAAOC,SAAwB,SAAUC,GAAO,cAAcA,CAAK,EAAI,SAAUA,GAAO,OAAOA,GAAyB,mBAAXF,QAAyBE,EAAIC,cAAgBH,QAAUE,IAAQF,OAAOF,UAAY,gBAAkBI,CAAK,GAM3Q,SAASonD,EAAS9wC,GAChB,OAAOA,IAAuB,mBAARA,GAAoF,iBAA9C,IAARA,EAAsB,YAAczW,EAAQyW,IAClG,CAEO,IAAI0U,EAAW,CACpBiiB,SAAU,mBACVoa,WAAY,oBACZC,aAAc,cACd9lC,WAAY,oBACZz1B,IAAK,SAAaovC,EAAajyC,EAAQkyC,GACrC,GAAKgsB,EAASl+D,GAAd,CAGA,IAAIkC,EAAS4/B,EAASu8B,OAAOpsB,EAAajyC,EAAQkyC,GAClD,YAAkBprC,IAAX5E,EAAuB4/B,EAASj/B,IAAIovC,EAAa3tC,OAAO81C,eAAep6C,GAASkyC,GAAahwC,CAFpG,CAGF,EACAm8D,OAAQ,SAAgBpsB,EAAajyC,EAAQkyC,GAC3C,GAAKgsB,EAASl+D,GAGd,OAAOwjB,QAAQwuB,eAAeC,EAAajyC,EAAQkyC,EACrD,EACAosB,OAAQ,SAAgBrsB,EAAaG,EAAepyC,EAAQkyC,GAC1D1uB,QAAQ2uB,eAAeF,EAAaG,EAAepyC,EAAQkyC,EAC7D,EACAqsB,eAAgB,SAAwBtsB,EAAaiG,EAAMl4C,EAAQkyC,GACjE,IAAIhwC,EAAS4/B,EAASu8B,OAAOpsB,EAAajyC,EAAQkyC,GAOlD,YALeprC,IAAX5E,IACFA,EAAS,IAAIg2C,EACb10B,QAAQ2uB,eAAeF,EAAa/vC,EAAQlC,EAAQkyC,IAG/ChwC,CACT,GAGEs8D,EAAgB,IAAIz8D,IACpB08D,EAAgBn6D,OAAOwtC,OAAO,CAAE6B,cAAU7sC,EAAW43D,kBAAc53D,IAE5D63D,EAAS,WAClB,SAASA,EAAOhrB,EAAU+qB,GAGxBxlD,KAAKy6B,SAAWA,EAChBz6B,KAAKwlD,aAAeA,CACtB,CAmCA,OAjCAC,EAAO97D,IAAM,SAAaqB,GACxB,IAAI06D,EAASJ,EAAc37D,IAAIqB,GAyB/B,YAvBe4C,IAAX83D,GACF,iBAAoB,SAAUj5D,EAAKuF,GACjC,GAAsE,iBAAhD,IAAVA,EAAwB,YAAcyL,EAAQzL,IACxD,IAAK,IAAI5I,KAAQ4I,EACf,IAEE,GADUA,EAAM5I,KACJ4B,EAEV,OADAs6D,EAAcz7D,IAAImB,EAAI06D,EAAS,IAAID,EAAOh5D,EAAKrD,KACxC,CAEX,CAAE,MAAO+pC,GAAI,CAIjB,OAAInhC,IAAUhH,IACZs6D,EAAcz7D,IAAImB,EAAI06D,EAAS,IAAID,EAAOh5D,EAAK,aACxC,EAIX,IAGKi5D,GAAUH,CACnB,EAEAE,EAAO57D,IAAM,SAAamB,EAAI06D,GAC5BJ,EAAcz7D,IAAImB,EAAI06D,EACxB,EAEOD,CACT,CA1CoB,GA4Gb,SAASE,EAAMh6C,GACpB,IAAIi6C,EAAex6D,OAAOoB,KAAKmf,GAmB/B,OAjBA,SAAgBk6C,GACd,IAAIC,EAAY,SAAmBh/D,GAIjC,IAHA,IAAIi/D,EAAmC,mBAAXj/D,EAAwBA,EAAO0W,UAAY1W,EAEnEwQ,EAAIsuD,EAAaz7D,OACdmN,KAAK,CACV,IAAIjC,EAAWuwD,EAAatuD,GAC5BlM,OAAOgS,eAAe2oD,EAAgB1wD,EAAU,CAC9CrD,MAAO2Z,EAAStW,GAChB8H,UAAU,GAEd,CACF,EAEA,OAAO0oD,EAAWC,EAAUD,GAAYC,CAC1C,CAGF,CAEA,SAASE,IACP,OAAO,CACT,CACA,SAASC,IAAa,CAEtB,SAASC,EAAsBn7D,GAiB7B,YAhBgB6C,IAAZ7C,EACFA,EAAU,CAAC,EACiB,mBAAZA,IAChBA,EAAU,CACRo7D,SAAUp7D,IAITA,EAAQo7D,WACXp7D,EAAQo7D,SAAWH,GAGhBj7D,EAAQy6C,UACXz6C,EAAQy6C,QAAUygB,GAGbl7D,CACT,CAEA,SAASq7D,EAAwBD,GAC/B,OAAO,SAAUr/D,GAEf,OAAkB,IADLq/D,EAASr/D,EAExB,CACF,CAEA,SAASu/D,EAAuBj9D,EAAM+8D,GACpC,OAAO,SAAUr/D,GACf,IAAIkC,EAASm9D,EAASr/D,GACtB,IAAe,IAAXkC,EACF,MAAM,IAAIgiB,MAAMhiB,GAAUI,EAAO,kCAErC,CACF,CAEO,SAASm0D,EAASn0D,EAAM2B,GAC7BA,EAAUm7D,EAAsBn7D,GAEhC,IAAI/B,EAAS,SAASA,EAAOlC,GAC3B,IAAIi/D,EAAmC,mBAAXj/D,EAAwBA,EAAO0W,UAAY1W,EAEvEiE,EAAQy6C,QAAQugB,GAChB/8D,EAAOs9D,OAAOP,GAEd36D,OAAOgS,eAAe2oD,EAAgB,YAAc38D,EAAM,CACxD6T,YAAY,EACZC,cAAc,EACdC,UAAU,EACVnL,OAAO,GAEX,EAKA,OAHAhJ,EAAOm9D,SAAWC,EAAwBr7D,EAAQo7D,UAClDn9D,EAAOs9D,OAASD,EAAuBj9D,EAAM2B,EAAQo7D,UAE9Cn9D,CACT,CAEAu0D,EAASj/C,OAAS,SAAUlV,EAAM2B,GAChCA,EAAUm7D,EAAsBn7D,GAChC,IAAIw7D,EAAS,YAAcn9D,EACvBJ,EAAS,SAAgBlC,GAC3B,IAAIg/D,EAAYvI,EAASn0D,EAAM2B,GAC/B,OAAOjE,EAASg/D,EAAUh/D,GAAUg/D,CACtC,EAQA,OANA98D,EAAO21C,UAAY,SAAU/gC,GAC3B,OAAuB,IAAhBA,EAAI2oD,EACb,EACAv9D,EAAOm9D,SAAWC,EAAwBr7D,EAAQo7D,UAClDn9D,EAAOs9D,OAASD,EAAuBj9D,EAAM2B,EAAQo7D,UAE9Cn9D,CACT,wFClQIyU,EAA4B,mBAAXC,QAAoD,iBAApBA,OAAOC,SAAwB,SAAUC,GAAO,cAAcA,CAAK,EAAI,SAAUA,GAAO,OAAOA,GAAyB,mBAAXF,QAAyBE,EAAIC,cAAgBH,QAAUE,IAAQF,OAAOF,UAAY,gBAAkBI,CAAK,EAIhQ4oD,EAAY,CACrBzK,SAAU96D,OAAO86D,SACjBpQ,QAAS1qD,OAAO0qD,QAChBl3C,iBAAkB,SAA0BipB,EAAWJ,EAAUmpC,GAC/DzmD,KAAK22B,OAAOliC,iBAAiBipB,EAAWJ,EAAUmpC,EACpD,EACA/xD,oBAAqB,SAA6BgpB,EAAWJ,EAAUmpC,GACrEzmD,KAAK22B,OAAOjiC,oBAAoBgpB,EAAWJ,EAAUmpC,EACvD,EAEAC,YAAazlE,OAAOylE,YACpBC,sBAAuB,SAA+BrpC,GACpD,OAAOtd,KAAK22B,OAAOgwB,sBAAsBrpC,EAC3C,GAkBF,GAf6B,oBAAlBspC,oBAGSh5D,IAFP,WAAiB,EAEnBxE,MACPgC,OAAOgS,eAAemH,SAAS/G,UAAW,OAAQ,CAChD7T,IAAK,WACH,IAAIP,EAAO4W,KAAK9e,WAAW0nD,MAAM,6BAA6B,GAG9D,OADAx9C,OAAOgS,eAAe4C,KAAM,OAAQ,CAAEhO,MAAO5I,IACtCA,CACT,IAKuB,oBAAlBw9D,cACT,KAAM,cAAejiE,SAAS8pD,cAAc,OAAS9pD,SAASkiE,mBAAqB,cAAeliE,SAASkiE,gBAAgB,6BAA8B,MAAO,CAC9J,IAAIC,EAAY,YACZC,EAAUx1C,OAAO/T,UAAUwpD,KAC3BC,EAAa58D,MAAMmT,UAAUjX,QAC7B2gE,EAAa,GAEbC,EAAQ,SAAex+C,EAAM8Q,GAC/BzZ,KAAK5W,KAAOuf,EACZ3I,KAAK4Z,KAAOwtC,aAAaz+C,GACzB3I,KAAKyZ,QAAUA,CACjB,EAEI4tC,EAAwB,SAA+BriC,EAAWrL,GACpE,GAAc,KAAVA,EACF,MAAM,IAAIwtC,EAAM,aAAc,8CAGhC,GAAI,KAAKxkE,KAAKg3B,GACZ,MAAM,IAAIwtC,EAAM,wBAAyB,wCAG3C,OAAOF,EAAWjpD,KAAKgnB,EAAWrL,EACpC,EAEI2tC,EAAY,SAAmBC,GAIjC,IAHA,IAAIC,EAAiBT,EAAQ/oD,KAAKupD,EAAK1lC,aAAa,UAAY,IAC5D4lC,EAAUD,EAAiBA,EAAev5D,MAAM,OAASi5D,EAEpD5vD,EAAI,EAAGsI,EAAK6nD,EAAQt9D,OAAQmN,EAAIsI,IAAMtI,EAC7C0I,KAAKpW,KAAK69D,EAAQnwD,IAGpB0I,KAAK0nD,iBAAmB,WACtBH,EAAKryD,aAAa,QAAS8K,KAAK9e,WAClC,CACF,EAEIymE,EAAiBL,EAAUR,GAAa,GAE5CK,EAAML,GAAa97C,MAAM87C,GAEzBa,EAAetlE,KAAO,SAAUiV,GAC9B,OAAO0I,KAAK1I,IAAM,IACpB,EAEAqwD,EAAen3D,SAAW,SAAUmpB,GAElC,OAA+C,IAAxC0tC,EAAsBrnD,KAD7B2Z,GAAS,GAEX,EAEAguC,EAAex+D,IAAM,WACnB,IAAIy+D,EAAS19D,UACToN,EAAI,EACJsI,EAAKgoD,EAAOz9D,OACZwvB,OAAQ,EACRkuC,GAAU,EAEd,IAE8C,IAAxCR,EAAsBrnD,KAD1B2Z,EAAQiuC,EAAOtwD,GAAK,MAElB0I,KAAKpW,KAAK+vB,GACVkuC,GAAU,WAEHvwD,EAAIsI,GAEXioD,GACF7nD,KAAK0nD,kBAET,EAEAC,EAAe1iC,OAAS,WACtB,IAAI2iC,EAAS19D,UACToN,EAAI,EACJsI,EAAKgoD,EAAOz9D,OACZwvB,OAAQ,EACRkuC,GAAU,EACVx6D,OAAQ,EAEZ,GAGE,IADAA,EAAQg6D,EAAsBrnD,KAD9B2Z,EAAQiuC,EAAOtwD,GAAK,KAEF,IAAXjK,GACL2S,KAAK2B,OAAOtU,EAAO,GACnBw6D,GAAU,EACVx6D,EAAQg6D,EAAsBrnD,KAAM2Z,WAE7BriB,EAAIsI,GAEXioD,GACF7nD,KAAK0nD,kBAET,EAEAC,EAAeG,OAAS,SAAUnuC,EAAO+8B,GACvC/8B,GAAS,GAET,IAAI3wB,EAASgX,KAAKxP,SAASmpB,GACvBoT,EAAS/jC,GAAmB,IAAV0tD,GAAkB,UAAqB,IAAVA,GAAmB,MAMtE,OAJI3pB,GACF/sB,KAAK+sB,GAAQpT,IAGD,IAAV+8B,IAA4B,IAAVA,EACbA,GAGD1tD,CACV,EAEA2+D,EAAezmE,SAAW,WACxB,OAAO8e,KAAKxd,KAAK,IACnB,EAEA4I,OAAOgS,eAAe9b,QAAQkc,UAAW,YAAa,CACpD7T,IAAK,WACH,OAAO,IAAI29D,EAAUtnD,KACvB,EACA/C,YAAY,EACZC,cAAc,GAElB,KAAO,CACL,IAAI6qD,EAAcpjE,SAAS8pD,cAAc,KAGzC,GAFAsZ,EAAY/iC,UAAU77B,IAAI,KAAM,OAE3B4+D,EAAY/iC,UAAUx0B,SAAS,MAAO,CACzC,IAAIw3D,EAAe,SAAsBj7B,GACvC,IAAIk7B,EAAWC,aAAa1qD,UAAUuvB,GAEtCm7B,aAAa1qD,UAAUuvB,GAAU,SAAUpT,GACzC,IAAK,IAAIriB,EAAI,EAAGsI,EAAK1V,UAAUC,OAAQmN,EAAIsI,IAAMtI,EAC/CqiB,EAAQzvB,UAAUoN,GAClB2wD,EAASjqD,KAAKgC,KAAM2Z,EAExB,CACF,EAEAquC,EAAa,OACbA,EAAa,SACf,CAIA,GAFAD,EAAY/iC,UAAU8iC,OAAO,MAAM,GAE/BC,EAAY/iC,UAAUx0B,SAAS,MAAO,CACxC,IAAI23D,EAAUD,aAAa1qD,UAAUsqD,OAErCI,aAAa1qD,UAAUsqD,OAAS,SAAUnuC,EAAO+8B,GAC/C,OAAI,KAAKxsD,YAAc8V,KAAKxP,SAASmpB,KAAY+8B,EACxCA,EAGFyR,EAAQnqD,KAAKgC,KAAM2Z,EAC5B,CACF,CAEAouC,EAAc,IAChB,CAGF,GAA6B,oBAAlBnB,cAA+B,CACxC,IAAIwB,EAAiB,SAAwB37D,EAAKuF,GAIhD,IAHA,IAAIsF,EAAI,EACJy+B,EAAIsyB,EAASl+D,OACbnB,EAAS,GACNsO,EAAIy+B,EAAGz+B,IACR+wD,EAAS/wD,GAAG7K,IAAQuF,GACtBhJ,EAAOY,KAAKy+D,EAAS/wD,IAGzB,OAAOtO,CACT,EAEIs/D,EAAgB,SAAuB3/C,EAAMvf,GAG/C,IAFA,IACI80B,EADA5mB,EAAI+wD,EAASl+D,OAEVmN,MACL4mB,EAAQmqC,EAAS/wD,IACPixD,WAAa5/C,QAAkB,IAATvf,GAAmB80B,EAAM90B,MAAQA,GAC/Di/D,EAAS1mD,OAAOrK,EAAG,EAGzB,EAOA,GAJI,gBAAiBrW,QAAW,IAC9BA,OAAOylE,YAAc,CAAC,GAGpB,QAASzlE,OAAOylE,aAAgB,EAAO,CACzC,IAAI8B,EAAYC,KAAKC,MAEjBhC,YAAYiC,QAAUjC,YAAYiC,OAAOC,kBAC3CJ,EAAY9B,YAAYiC,OAAOC,iBAGjC3nE,OAAOylE,YAAYgC,IAAM,WACvB,OAAOD,KAAKC,MAAQF,CACtB,CACF,CAEkBC,KAAKC,IAAMD,KAAKC,MAAS,IAAID,KAA/C,IACIJ,EAAW,GACXQ,EAAc,CAAC,EAId5nE,OAAOylE,YAAYoC,OACtB7nE,OAAOylE,YAAYoC,KAAO7nE,OAAOylE,YAAYqC,YAAc,SAAU3/D,GACnE,IAAI0/D,EAAO,CACT1/D,KAAMA,EACNm/D,UAAW,OACXS,UAAW/nE,OAAOylE,YAAYgC,MAC9BO,SAAU,GAGZZ,EAASz+D,KAAKk/D,GACdD,EAAYz/D,GAAQ0/D,CACtB,GAGG7nE,OAAOylE,YAAYwC,UACtBjoE,OAAOylE,YAAYwC,QAAUjoE,OAAOylE,YAAYyC,eAAiB,SAAU//D,EAAMggE,EAAWC,GAC1FD,EAAYP,EAAYO,GAAWJ,UACnCK,EAAUR,EAAYQ,GAASL,UAE/BX,EAASz+D,KAAK,CACZR,KAAMA,EACNm/D,UAAW,UACXS,UAAWI,EACXH,SAAUI,EAAUD,GAExB,GAGGnoE,OAAOylE,YAAY4C,mBACtBroE,OAAOylE,YAAY4C,iBAAmBroE,OAAOylE,YAAY6C,wBAA0B,SAAU5gD,GAC3F,OAAOy/C,EAAe,YAAaz/C,EACrC,GAGG1nB,OAAOylE,YAAY8C,mBACtBvoE,OAAOylE,YAAY8C,iBAAmBvoE,OAAOylE,YAAY+C,wBAA0B,SAAUrgE,GAC3F,OAAOg/D,EAAe,OAAQh/D,EAChC,GAGGnI,OAAOylE,YAAYgD,aACtBzoE,OAAOylE,YAAYgD,WAAazoE,OAAOylE,YAAYiD,kBAAoB,SAAUvgE,GAC/Ek/D,EAAc,OAAQl/D,EACxB,GAGGnI,OAAOylE,YAAYkD,gBACtB3oE,OAAOylE,YAAYkD,cAAgB3oE,OAAOylE,YAAYmD,qBAAuB,SAAUzgE,GACrFk/D,EAAc,UAAWl/D,EAC3B,GAGFo9D,EAAUE,YAAczlE,OAAOylE,WACjC,CAEA,GAA6B,oBAAlBE,cAA+B,CACxC,IAAIkD,EAAM7oE,OAAOwoB,QAAUxoB,OAAOwoB,SAAW,CAAC,EAC1CsgD,EAAM,WAAgB,EAErBD,EAAIE,SAAQF,EAAIE,OAAS,CAAC,GAC/B,wMAAoN/7D,MAAM,KAAK1E,SAAQ,SAAUmD,GAC1Oo9D,EAAIp9D,KAAIo9D,EAAIp9D,GAAKq9D,EACxB,IAEyB,WAArBtsD,EAAQqsD,EAAIG,MACd,0DAA0Dh8D,MAAM,KAAK1E,SAAQ,SAAUwjC,GACrFtjB,QAAQsjB,GAAU/sB,KAAK0L,KAAKjC,QAAQsjB,GAAStjB,QAC/C,GAAGlF,SAAS/G,UAAUQ,KAE1B,CAEA,GAA6B,oBAAlB4oD,iBACJ3lE,OAAO24D,aAA6C,mBAAvB34D,OAAO24D,aAA4B,CACnE,IAAIsQ,EAAe,SAAsBttC,EAAO8xB,GAC9CA,EAASA,GAAU,CACjBhC,SAAS,EACTC,YAAY,EACZ0F,YAAQzkD,GAGV,IAAI4+C,EAAM7nD,SAASk1D,YAAY,eAE/B,OADArN,EAAIsN,gBAAgBl9B,EAAO8xB,EAAOhC,QAASgC,EAAO/B,WAAY+B,EAAO2D,QAC9D7F,CACT,EAEA0d,EAAa1sD,UAAYvc,OAAOkpE,MAAM3sD,UACtCvc,OAAO24D,YAAcsQ,CACvB,CAGF,GAAI5oE,UAAYA,QAAQkc,UAAU4sD,QAAS,CACzC,IAAI9tC,EAAQh7B,QAAQkc,UACpB8e,EAAM8tC,QAAU9tC,EAAM+tC,iBAAmB/tC,EAAMguC,oBAAsBhuC,EAAMiuC,mBAAqBjuC,EAAMkuC,kBAAoBluC,EAAMmuC,qBAClI,CAEO,IAIC/5B,EAJGg6B,EAAW,CACpBC,YAAanpE,YAAYgc,UAAUotD,aACnCC,UAAW,WAAYlmE,SAAS8pD,cAAc,SAC9Cqc,qBACMp6B,EAAI/rC,SAAS8pD,cAAc,OAC/B/d,EAAE1G,UAAY,wBACP,YAAa0G,EAAEq6B,SAAS,IAEjCC,oBAAqB/pE,OAAOgqE,mBAAoBhqE,OAAOiqE,wBACvDC,0BAA2B,SAAmC36B,GAC5D,OAAOA,CACT,GAGF,GAA6B,oBAAlBo2B,cAA+B,CACxC,IAIIwE,EAAwB,SAA+B7P,GACzD,IAAIqE,EAAWrE,EAAGp6D,cAAcstD,cAAc,YAC1C4c,EAAQ9P,EAAG/vD,WACXrB,EAASkhE,EAAMlhE,OACfsxD,OAAO,EAIX,IAFAF,EAAGn1D,WAAWklE,aAAa1L,EAAUrE,GAE9BpxD,KAAW,GAChBsxD,EAAO4P,EAAMlhE,GACby1D,EAAS1qD,aAAaumD,EAAKryD,KAAMqyD,EAAKzpD,OACtCupD,EAAGtmD,gBAAgBwmD,EAAKryD,MAK1B,OAFAmyD,EAAGn1D,WAAWq8D,YAAYlH,GAEnBgQ,EAAuB3L,EAChC,EAEI2L,EAAyB,SAAgC3L,GAI3D,IAHA,IAAIpL,EAAUoL,EAASpL,QAAU7vD,SAAS6mE,yBACtC96D,OAAQ,EAELA,EAAQkvD,EAAS31B,YACtBuqB,EAAQ3F,YAAYn+C,GAGtB,OAAOkvD,CACT,EAmBK8K,EAASI,sBACZJ,EAASS,0BAlBsB,SAAoCvL,GAInE,IAHA,IAnCyCrE,EAoCrCkQ,EADUF,EAAuB3L,GAAUpL,QAClB/Y,iBAAiB,YAErCnkC,EAAI,EAAGsI,EAAK6rD,EAAethE,OAAQmN,EAAIsI,IAAMtI,EAAG,CACvD,IAAI5G,EAAQ+6D,EAAen0D,GAtCP,cADmBikD,EAyCrB7qD,GAxCVyuB,SAA8C,+BAApBo8B,EAAGmQ,aAyCnCN,EAAsB16D,GAEtB66D,EAAuB76D,EAE3B,CAEA,OAAOkvD,CACT,EAKF,CAEA,IAAI+L,EAAa1qE,OAAO2qE,mBAAqB,KAElCC,EAAO,CAChBvqE,QACAwqE,SACAC,WACAz5D,SAAU,uBACVmC,iBAAkB,SAA0BipB,EAAWJ,EAAUmpC,GAC/D9hE,SAAS8P,iBAAiBipB,EAAWJ,EAAUmpC,EACjD,EACA/xD,oBAAqB,SAA6BgpB,EAAWJ,EAAUmpC,GACrE9hE,SAAS+P,oBAAoBgpB,EAAWJ,EAAUmpC,EACpD,EACAuF,UAAW,SAAmBhrE,GAC5B,OAAO2D,SAASqnE,UAAUhrE,EAC5B,EACAirE,gBAAiB,SAAyB7iE,GACxC,OAAOzE,SAASsnE,gBAAgB7iE,EAClC,EACAqlD,cAAe,SAAuBtvB,GACpC,OAAOx6B,SAAS8pD,cAActvB,EAChC,EACA+sC,eAAgB,SAAwB55C,GACtC,OAAO3tB,SAASunE,eAAe55C,EACjC,EACA65C,cAAe,SAAuB75C,GACpC,OAAO3tB,SAASwnE,cAAc75C,EAChC,EACAk5C,uBAAwB,WACtB,OAAO7mE,SAAS6mE,wBAClB,EACAY,sBAAuB,WACrB,IAAIxM,EAAWj7D,SAAS8pD,cAAc,YACtC,OAAOic,EAASS,0BAA0BvL,EAC5C,EACAyM,uBAAwB,SAAgC/uC,GACtD,OAAO,IAAKr8B,OAAOgqE,kBAAoBhqE,OAAOiqE,wBAAwB5tC,EACxE,EACAgvC,kBAAmB,SAA2BC,EAAWxhE,GACvD,OAAO,IAAI9J,OAAO24D,YAAY2S,EAAWxhE,EAC3C,EACAyoD,cAAe,SAAuBhH,GACpC7nD,SAAS6uD,cAAchH,EACzB,EACA1nD,iBAAkB,SAA0BjC,GAC1C,OAAO5B,OAAO6D,iBAAiBjC,EACjC,EACA2pE,eAAgB,SAAwB3qD,GACtC,OAAOld,SAAS6nE,eAAe3qD,EACjC,EACArG,cAAe,SAAuBixD,GACpC,OAAO9nE,SAAS6W,cAAcixD,EAChC,EACAhxB,iBAAkB,SAA0BgxB,GAC1C,OAAO9nE,SAAS82C,iBAAiBgxB,EACnC,EACAC,mBAAoB,SAA4B7pE,GAC9C,GAAIA,EAAQ6pE,mBACV,OAAO7pE,EAAQ6pE,mBAEjB,GACE7pE,EAAUA,EAAQ8pE,kBACX9pE,GAAgC,IAArBA,EAAQ+pE,UAC5B,OAAO/pE,CACT,EACAgqE,yBAA0B,SAAkCC,GAC1D,IAAIliC,EAASjmC,SAAS8pD,cAAc,OACpC7jB,EAAOZ,UAAY8iC,EAEnB,IAAIC,EAAOniC,EAAOV,kBAClB,IAAK6iC,GAA0B,aAAlBA,EAAKvoE,SAChB,MAAM,IAAIwmB,MAAM,kHAGlB,OAAO0/C,EAASS,0BAA0B4B,EAC5C,EACAC,WAAY,SAAoBC,EAAS7mE,IACtCA,GAAczB,SAAS6B,MAAMqoD,YAAYoe,EAC5C,EACAC,YAAa,SAAqBD,EAASjsE,EAAMoF,GAC3CpF,EAAKoF,WACPpF,EAAKoF,WAAW+mE,aAAaF,EAASjsE,GACd,OAAf2qE,EACTA,EAAWyB,OAAOhnE,GAAY+mE,aAAaxB,EAAWyB,OAAOH,GAAUtB,EAAWyB,OAAOpsE,IAEzFoF,EAAW+mE,aAAaF,EAASjsE,EAErC,EACAqsE,WAAY,SAAoBrsE,EAAMoF,GAChCpF,EAAKoF,WACPpF,EAAKoF,WAAWq8D,YAAYzhE,GACnBoF,IACU,OAAfulE,EACFA,EAAWyB,OAAOhnE,GAAYq8D,YAAYkJ,EAAWyB,OAAOpsE,IAE5DoF,EAAWq8D,YAAYzhE,GAG7B,EACAssE,aAAc,SAAsB7hE,EAAQ8hE,EAAazlD,EAASjG,GAChE,GAAIA,EAAI,CACN,IAAI2rD,EAAW7oE,SAAS6nE,eAAe3qD,GACvC,GAAI2rD,EAAU,CAGZ,GAFoD,UAAnCA,EAASruC,QAAQ16B,cAIhC,YADA+oE,EAASxjC,UAAYv+B,GAIvB,MAAM,IAAIuf,MAAM,iDAClB,CACF,CAEA,IAAIhqB,EAAO2D,SAAS8pD,cAAc,SAgBlC,OAfAztD,EAAKgpC,UAAYv+B,EACjBzK,EAAK2nB,KAAO,WAER9G,IACF7gB,EAAK6gB,GAAKA,GAGZ0rD,EAAcA,GAAe5oE,SAAS8oE,KAElC3lD,GAAWylD,EAAYG,WAAWvjE,OAAS,EAC7CojE,EAAYjC,aAAatqE,EAAMusE,EAAYG,WAAW,IAEtDH,EAAY1e,YAAY7tD,GAGnBA,CACT,GAGK,SAAS0sC,IACV,OAIJ,SAAc,SAAUigC,EAAUljB,EAASmjB,GACzCxiE,OAAOC,OAAOsiE,EAAUnH,GACxBp7D,OAAOC,OAAOo/C,EAASigB,GACvBt/D,OAAOC,OAAOuiE,EAAK/B,GAEnBzgE,OAAOgS,eAAewwD,EAAK,QAAS,CAClCjkE,IAAK,WACH,OAAOhF,SAAS6kC,KAClB,EACA3/B,IAAK,SAAamI,GAChBrN,SAAS6kC,MAAQx3B,CACnB,IAGF5G,OAAOgS,eAAewwD,EAAK,gBAAiB,CAC1CjkE,IAAK,WACH,OAAOhF,SAASkpE,aAClB,IAGFziE,OAAOgS,eAAeuwD,EAAU,iBAAkB,CAChDhkE,IAAK,WACH,OAAOgkE,EAASh3B,OAAOm3B,cACzB,GAEJ,GACF,+BC5jBO,SAASC,EAAet0C,EAASu0C,EAAYC,GAClD,GAAID,EAAY,CACd,GAAIA,EAAWA,YAAcC,EAC3B,OAAOD,EAGT,IAAIE,EAAY,uDAEhBz0C,GAAWy0C,EAAY,iBAEG,iBAAfF,EACTv0C,GAAW,YAAcu0C,GAErBA,EAAWv0C,QACbA,GAAW,YAAcu0C,EAAWv0C,QAEpCA,GAAW,+DAAiE9P,KAAKC,UAAUokD,EAAY,KAAM,MAG3GA,EAAWG,QACb10C,GAAW,yBAA2Bu0C,EAAWG,MACjD10C,GAAW,4BAIfA,GAAWy0C,CACb,CAEA,IAAI/6B,EAAI,IAAInoB,MAAMyO,GAKlB,OAJIu0C,IACF76B,EAAE66B,WAAaA,GAGV76B,CACT,gEAEO,IAAIi7B,EAAU,CAAC,EAEXC,EAAW,CACpBC,KAAM,WAAiB,EACvBC,WAAY,WAAuB,EACnCC,WAAY,SAAUC,GACpB,SAASD,EAAWE,GAClB,OAAOD,EAAY1mD,MAAM/H,KAAM9V,UACjC,CAMA,OAJAskE,EAAWttE,SAAW,WACpB,OAAOutE,EAAYvtE,UACrB,EAEOstE,CACT,CAVY,EAUV,SAAUA,GACV,OAAOA,CACT,KAGFH,EAAS13B,OACa,oBAAT54B,KACFA,UAGa,IAAX,EAAAqqB,EACF,EAAAA,EAGF,IAAI7jB,SAAS,cAAb,GAGF,IAAIoqD,EAAM,CAAC,EACPC,GAAgB,EAEpB,SAASC,EAAcvxC,GACxBsxC,IAGJA,GAAgB,EAC4B,mBAAjCxjE,OAAOmgC,wBAChBngC,OAAOmgC,sBAAwB,SAAUujC,EAAS1lE,GAGhD,IAFA,IAAI2lE,EAAK3jE,OAAOsoC,yBAAyBo7B,EAAS1lE,GAC9CkzB,EAAQlxB,OAAO81C,eAAe4tB,QACb,IAAPC,GAAgC,OAAVzyC,GAClCyyC,EAAK3jE,OAAOsoC,yBAAyBpX,EAAOlzB,GAC5CkzB,EAAQlxB,OAAO81C,eAAe5kB,GAEhC,OAAOyyC,CACT,GAGFzxC,EAAS+wC,EAAUD,EAASO,GAC9B,+BCxEA,SAASK,EAAe5lE,EAAM6lE,GAC1B,IAAIC,EAAYD,GAAQA,EAAKhhE,MAAM,KAC/BkhE,EAAY/lE,EAAK49D,OAAO/4D,MAAM,KAClC,GAA+B,MAA3BkhE,EAAU,GAAGvwD,OAAO,IAAcswD,EAAW,CAC7C,IAAIE,EAAsBF,EAAU/2D,MAAM,EAAG+2D,EAAU/kE,OAAS,GAChEglE,EAAUhlD,QAAQpC,MAAMonD,EAAWC,EACvC,CAEA,OA1BJ,SAAkBC,GACd,IAAK,IAAI/3D,EAAI,EAAGA,EAAI+3D,EAAIllE,SAAUmN,EAAG,CACjC,IAAIg4D,EAAOD,EAAI/3D,GACf,GAAa,MAATg4D,EACAD,EAAI1tD,OAAOrK,EAAG,GACdA,GAAK,OAEJ,GAAa,OAATg4D,EAAe,CACpB,GAAU,IAANh4D,GAAkB,IAANA,GAAsB,OAAX+3D,EAAI,IAA+B,OAAfA,EAAI/3D,EAAI,GACnD,SAEKA,EAAI,IACT+3D,EAAI1tD,OAAOrK,EAAI,EAAG,GAClBA,GAAK,EAEb,CACJ,CACJ,CAQIi4D,CAASJ,GACFA,EAAU3sE,KAAK,IAC1B,CACA,SAASA,EAAKgtE,EAAOC,GACjB,IAAKD,EACD,OAAOC,EAEX,IAAKA,EACD,OAAOD,EAEX,IAGIE,EAHAC,EAAcH,EAAM5mB,MAAM,gBAC1BgnB,EAAUD,GAAeA,EAAYxlE,OAAS,EAAKwlE,EAAY,GAAK,GAIpED,EADyB,KAF7BF,EAAQA,EAAM76B,OAAOi7B,EAAOzlE,SAElB5D,QAAQ,QAA2B,UAAXqpE,EAClB,MAEiB,IAAxBJ,EAAMjpE,QAAQ,MACP,KAEgB,IAAvBipE,EAAMjpE,QAAQ,KACP,IAGA,GAMhB,IAJA,IAAIi4D,EAAoC,MAApBiR,EAAMt3D,OAAO,GAAa,IAAM,GAChD03D,EAAOL,EAAMvhE,MAAM,KACnB6hE,EAAOL,EAAMxhE,MAAM,KACnB8hE,EAAO,GACFz4D,EAAI,EAAGsI,EAAKiwD,EAAK1lE,OAAQmN,EAAIsI,IAAMtI,EACxC,GAAgB,OAAZu4D,EAAKv4D,GACDy4D,EAAK5lE,QAAoC,OAA1B4lE,EAAKA,EAAK5lE,OAAS,GAClC4lE,EAAK9lD,MAGL8lD,EAAKnmE,KAAKimE,EAAKv4D,QAGlB,IAAgB,MAAZu4D,EAAKv4D,IAA0B,KAAZu4D,EAAKv4D,GAC7B,SAGAy4D,EAAKnmE,KAAKimE,EAAKv4D,GACnB,CAEJ,IAASA,EAAI,EAAGsI,EAAKkwD,EAAK3lE,OAAQmN,EAAIsI,IAAMtI,EACxC,GAAgB,OAAZw4D,EAAKx4D,GACDy4D,EAAK5lE,QAAoC,OAA1B4lE,EAAKA,EAAK5lE,OAAS,GAClC4lE,EAAK9lD,MAGL8lD,EAAKnmE,KAAKkmE,EAAKx4D,QAGlB,IAAgB,MAAZw4D,EAAKx4D,IAA0B,KAAZw4D,EAAKx4D,GAC7B,SAGAy4D,EAAKnmE,KAAKkmE,EAAKx4D,GACnB,CAEJ,OAAOs4D,EAASF,EAAYK,EAAKvtE,KAAK,KAAOg8D,CACjD,8CACA,IAAI3G,EAASmY,mBACTC,EAAY,SAAUx/B,GAAK,OAAOonB,EAAOpnB,GAAGpgC,QAAQ,MAAO,IAAM,EACrE,SAAS6/D,EAAWzjE,EAAKuF,EAAOm+D,GAC5B,IAAInnE,EAAS,GACb,GAAIgJ,QACA,OAAOhJ,EAEX,GAAIqB,MAAMkkB,QAAQvc,GACd,IAAK,IAAIsF,EAAI,EAAG8yC,EAAIp4C,EAAM7H,OAAQmN,EAAI8yC,EAAG9yC,IACrC,GAAI64D,EACAnnE,EAAOY,KAAKqmE,EAAUxjE,GAAO,IAAMorD,EAAO7lD,EAAMsF,SAE/C,CACD,IAAI84D,EAAW3jE,EAAM,KAA2B,iBAAbuF,EAAMsF,IAAgC,OAAbtF,EAAMsF,GAAcA,EAAI,IAAM,IAC1FtO,EAASA,EAAOjC,OAAOmpE,EAAWE,EAAUp+D,EAAMsF,IACtD,MAGH,GAAuB,iBAAZ,GAAyB64D,EAMrCnnE,EAAOY,KAAKqmE,EAAUxjE,GAAO,IAAMorD,EAAO7lD,SAL1C,IAAK,IAAIqO,KAAgBrO,EACrBhJ,EAASA,EAAOjC,OAAOmpE,EAAWzjE,EAAM,IAAM4T,EAAe,IAAKrO,EAAMqO,KAMhF,OAAOrX,CACX,CACA,SAASqnE,EAAiB3hB,EAAQyhB,GAG9B,IAFA,IAAIG,EAAQ,GACR9jE,EAAOpB,OAAOoB,KAAKkiD,GAAU,CAAC,GAAGzlD,OAC5BqO,EAAI,EAAG3I,EAAMnC,EAAKrC,OAAQmN,EAAI3I,EAAK2I,IAAK,CAC7C,IAAI7K,EAAMD,EAAK8K,GACfg5D,EAAQA,EAAMvpE,OAAOmpE,EAAWzjE,EAAKiiD,EAAOjiD,GAAM0jE,GACtD,CACA,OAAqB,IAAjBG,EAAMnmE,OACC,GAEJmmE,EAAM9tE,KAAK,IACtB,CACA,SAAS+tE,EAAmBC,EAAcx+D,GACtC,OAAI3H,MAAMkkB,QAAQiiD,IACdA,EAAa5mE,KAAKoI,GACXw+D,QAEU5iE,IAAjB4iE,EACO,CAACA,EAAcx+D,GAEnBA,CACX,CACA,SAASy+D,EAAkBC,EAAalkE,EAAMwF,GAG1C,IAFA,IAAI2+D,EAAgBD,EAChBE,EAAgBpkE,EAAKrC,OAAS,EACzBub,EAAI,EAAGA,GAAKkrD,EAAelrD,IAAK,CACrC,IAAIjZ,EAAkB,KAAZD,EAAKkZ,GAAYirD,EAAcxmE,OAASqC,EAAKkZ,GAEvD,GADAmrD,EAAiBpkE,GACbiZ,EAAIkrD,EAAe,CACnB,IAAIE,EAAaH,EAAclkE,IAAsC,iBAAvBkkE,EAAclkE,GAAyC,CAACkkE,EAAclkE,IAApCkkE,EAAclkE,GAC9FkkE,EAAgBA,EAAclkE,GAAOqkE,IAAc18B,MAAM5nC,EAAKkZ,EAAI,IAAM,CAAC,EAAI,GACjF,MAEIirD,EAAgBA,EAAclkE,GAAOuF,CAE7C,CACJ,CACA,SAAS++D,EAAiBC,GACtB,IAAIN,EAAc,CAAC,EACnB,IAAKM,GAAsC,iBAAhBA,EACvB,OAAON,EAEX,IAAIjE,EAAQuE,EACY,MAApBvE,EAAM7tD,OAAO,KACb6tD,EAAQA,EAAM93B,OAAO,IAGzB,IADA,IAAI27B,EAAQ7D,EAAMp8D,QAAQ,MAAO,KAAKpC,MAAM,KACnCqJ,EAAI,EAAGA,EAAIg5D,EAAMnmE,OAAQmN,IAAK,CACnC,IAAI+qB,EAAOiuC,EAAMh5D,GAAGrJ,MAAM,KACtBxB,EAAMwkE,mBAAmB5uC,EAAK,IAClC,GAAK51B,EAAL,CAGA,IAAID,EAAOC,EAAIwB,MAAM,MACjB2iE,EAAgBpkE,EAAKrC,OAAS,EASlC,GARI,KAAKxH,KAAK6J,EAAK,KAAO,MAAM7J,KAAK6J,EAAKokE,KACtCpkE,EAAKokE,GAAiBpkE,EAAKokE,GAAevgE,QAAQ,MAAO,IAEzDugE,GADApkE,EAAOA,EAAK0d,QAAQjc,MAAM,KAAKlH,OAAOyF,IACjBrC,OAAS,GAG9BymE,EAAgB,EAEhBvuC,EAAKl4B,QAAU,EAAG,CAClB,IAAI6H,EAAQqwB,EAAK,GAAK4uC,mBAAmB5uC,EAAK,IAAM,GAChDuuC,EACAH,EAAkBC,EAAalkE,EAAMwF,IAGrC6+D,EAAiBpkE,GACjBikE,EAAYjkE,GAAO8jE,EAAmBG,EAAYjkE,GAAMuF,GAEhE,MAEI0+D,EAAYjkE,IAAO,CAtBvB,CAwBJ,CACA,OAAOikE,CACX,CACA,SAASG,EAAiBpkE,GACtB,GAAY,cAARA,EACA,MAAM,IAAIue,MAAM,gCAExB,gHCpMWkmD,EAAQ,WACjB,SAASA,EAAMC,GAGbnxD,KAAKmxD,SAAWA,EAChBnxD,KAAKoxD,WAAa,EACpB,CAmEA,OAjEAF,EAAM1zD,UAAU7T,IAAM,SAAawnE,GAC5B,IAAIE,EAAYrxD,KAAKoxD,WAAYE,EAAWjnE,MAAMkkB,QAAQ8iD,GAAYr5D,EAAK,EAAhF,IAAmFq5D,EAAYC,EAAWD,EAAYA,EAAU3zD,OAAOC,cAAe,CACpJ,IAAItP,EAEJ,GAAIijE,EAAU,CACZ,GAAIt5D,GAAMq5D,EAAUlnE,OAAQ,MAC5BkE,EAAOgjE,EAAUr5D,IACnB,KAAO,CAEL,IADAA,EAAKq5D,EAAUxgE,QACRwY,KAAM,MACbhb,EAAO2J,EAAGhG,KACZ,CAEA,IAAItB,EAAQrC,EAIZ,GAFcqC,EAAMygE,SAASI,aAAeJ,EAASI,YAAc7gE,EAAMygE,SAASK,eAAiBL,EAASK,aAG1G,OAAO9gE,CAEX,CAGF,EAEAwgE,EAAM1zD,UAAUi0D,IAAM,SAAaN,GACjC,IAAIjmE,EAAQ8U,KAAKrW,IAAIwnE,GAErB,OAAIjmE,IAIJA,EAAQ,IAAIgmE,EAAMC,GAElBnxD,KAAKoxD,WAAWxnE,KAAKsB,GAEjBimE,EAASO,QACXxmE,EAAMkmE,WAAWxnE,KAAKsB,GAGjBA,EACT,EAEAgmE,EAAM1zD,UAAUorC,MAAQ,SAAez0B,GAIrC,IAHA,IAAIi9C,EAAapxD,KAAKoxD,WAClB//C,EAAU,GAEL/Z,EAAI,EAAG8yC,EAAIgnB,EAAWjnE,OAAQmN,EAAI8yC,EAAG9yC,IAAK,CACjD,IAAI5G,EAAQ0gE,EAAW95D,GACnB65D,EAAWzgE,EAAMygE,cAEOvjE,IAAxBujE,EAASI,YAC8B,IAArCJ,EAASI,WAAWhrE,QAAQ4tB,IAC9B9C,EAAQznB,KAAK8G,QAEoB9C,IAA1BujE,EAASK,eACyB,IAAvCL,EAASK,aAAajrE,QAAQ4tB,IAChC9C,EAAQznB,KAAK8G,EAGnB,CAEA,OAAO2gB,CACT,EAEO6/C,CACT,CA1EmB,GA8EfS,EAAc,IAAIC,OAAO,MAFd,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAE9BpvE,KAAK,OAAS,IAAK,KAEtDqvE,EAAgB,WACzB,SAASA,EAAcC,EAAQC,GAG7B/xD,KAAK8xD,OAASA,EACd9xD,KAAK+xD,cAAgBA,CACvB,CAkBA,OAhBAF,EAAcr0D,UAAUw0D,SAAW,SAAkB10C,GAEnD,IADA,IAAI5Y,EAAI1E,KAAK8xD,OACJx6D,EAAI,EAAGsI,EAAK8E,EAAEva,OAAQmN,EAAIsI,IAAMtI,EAAG,CAC1C,IAAI6c,EAAKzP,EAAEpN,GACXgmB,EAAS,CAAEi0C,WAAYvxD,KAAK+xD,cAAgB59C,EAAKA,EAAGrV,cAAgBqV,EAAG1vB,eACzE,CACF,EAEAotE,EAAcr0D,UAAUy0D,MAAQ,WAC9B,OAAOjyD,KAAK8xD,OAAOzhE,QAAQshE,EAAa,OAC1C,EAEAE,EAAcr0D,UAAU00D,SAAW,WACjC,OAAOlyD,KAAK8xD,MACd,EAEOD,CACT,CAzB2B,GA2BhBM,EAAiB,WAC1B,SAASA,EAAe/oE,EAAMgpE,GAG5BpyD,KAAK5W,KAAOA,EACZ4W,KAAKoyD,SAAWA,CAClB,CAeA,OAbAD,EAAe30D,UAAUw0D,SAAW,SAAkB10C,GACpDA,EAAS,CAAEk0C,aAAc,IAAKE,QAAQ,GACxC,EAEAS,EAAe30D,UAAUy0D,MAAQ,WAC/B,MAAO,SACT,EAEAE,EAAe30D,UAAU00D,SAAW,SAAkBxjB,EAAQ2jB,GAE5D,OADAA,EAASryD,KAAK5W,OAAQ,EACfslD,EAAO1uC,KAAK5W,KACrB,EAEO+oE,CACT,CAtB4B,GAwBjBG,EAAc,WACvB,SAASA,EAAYlpE,GAGnB4W,KAAK5W,KAAOA,CACd,CAeA,OAbAkpE,EAAY90D,UAAUw0D,SAAW,SAAkB10C,GACjDA,EAAS,CAAEk0C,aAAc,GAAIE,QAAQ,GACvC,EAEAY,EAAY90D,UAAUy0D,MAAQ,WAC5B,MAAO,MACT,EAEAK,EAAY90D,UAAU00D,SAAW,SAAkBxjB,EAAQ2jB,GAEzD,OADAA,EAASryD,KAAK5W,OAAQ,EACfslD,EAAO1uC,KAAK5W,KACrB,EAEOkpE,CACT,CArByB,GAuBdC,EAAiB,WAC1B,SAASA,IAET,CAYA,OAVAA,EAAe/0D,UAAUw0D,SAAW,WAAqB,EAEzDO,EAAe/0D,UAAUy0D,MAAQ,WAC/B,MAAO,EACT,EAEAM,EAAe/0D,UAAU00D,SAAW,WAClC,MAAO,EACT,EAEOK,CACT,CAhB4B,GAkBjBC,EAAkB,WAC3B,SAASA,IAGPxyD,KAAKyyD,UAAY,IAAIvB,EACrBlxD,KAAK+kB,MAAQ,CAAC,EACd/kB,KAAK0yD,OAAS,IAAI7pE,GACpB,CAiMA,OA/LA2pE,EAAgBh1D,UAAUrU,IAAM,SAAawpE,GAC3C,IAAIruD,EAAQtE,KAEZ,IAAI3V,MAAMkkB,QAAQokD,GAAlB,CAgBA,IATA,IAAIC,EAAe5yD,KAAKyyD,UACpBI,EAAkB,GAClBZ,EAAQ,IACRa,EAAQ,CAAEC,QAAS,EAAGC,SAAU,EAAGC,MAAO,GAC1CluC,EAAQ,GACRmuC,EAAYP,EAAM5yC,QAAQ32B,KAC1B+pE,GAAU,EACVC,EA2LR,SAAeT,EAAO5tC,EAAO+tC,EAAOf,GAClC,IAAIsB,EAAkBV,EACE,MAApBA,EAAM/zD,OAAO,KACfy0D,EAAkBV,EAAMh+B,OAAO,IAMjC,IAHA,IAAItjB,EAAU,GAEViiD,EAAaD,EAAgBplE,MAAM,KAC9BqJ,EAAI,EAAGsI,EAAK0zD,EAAWnpE,OAAQmN,EAAIsI,IAAMtI,EAAG,CACnD,IAAIi8D,EAAUD,EAAWh8D,GAErBsxC,EAAQ2qB,EAAQ3qB,MAAM,mBAC1B,GAAIA,EAAJ,CACE,IAAI4qB,EAAS5qB,EACT6qB,EAAQD,EAAO,GACfpB,EAAWoB,EAAO,GAEtB,IAA4B,IAAxBC,EAAMltE,QAAQ,KAChB,MAAM,IAAIykB,MAAM,aAAeyoD,EAAQ,aAAed,EAAQ,iDAEhEthD,EAAQznB,KAAK,IAAIuoE,EAAesB,IAASrB,IACzCrtC,EAAMn7B,KAAK6pE,GACXX,EAAME,UAER,MAEApqB,EAAQ2qB,EAAQ3qB,MAAM,cAEpBv3B,EAAQznB,KAAK,IAAI0oE,EAAY1pB,EAAM,KACnC7jB,EAAMn7B,KAAKg/C,EAAM,IACjBkqB,EAAMG,SACe,KAAZM,EACTliD,EAAQznB,KAAK,IAAI2oE,IAEjBlhD,EAAQznB,KAAK,IAAIioE,EAAc0B,EAASxB,IACxCe,EAAMC,UAEV,CAEA,OAAO1hD,CACT,CApOmBqC,CAAMi/C,EAAM51C,KAAMgI,EAAO+tC,EAAOH,EAAMZ,eAE5Cz6D,EAAI,EAAGsI,EAAKwzD,EAASjpE,OAAQmN,EAAIsI,EAAItI,IAAK,CACjD,IAAIi8D,EAAUH,EAAS97D,GACvB,KAAIi8D,aAAmBhB,GAAvB,CAQA,IAJA,IAAImB,EAAcC,EAAWf,EAAcW,GACvCK,EAAaF,EAAY,GACzBG,EAAYH,EAAY,GAEnBhuD,EAAI,EAAGouD,EAAKjB,EAAgB1oE,OAAQub,EAAIouD,EAAIpuD,IACnDmtD,EAAgBntD,GAAG0rD,WAAWxnE,KAAKgqE,GAGjCL,EAAQnB,UACVS,EAAgBjpE,KAAKiqE,GACrB5B,GAAS,OAASsB,EAAQtB,QAAU,OAEpCW,EAAeiB,EACf5B,GAAS,IAAMsB,EAAQtB,QACvBY,EAAgB1oE,OAAS,EACzBgpE,GAAU,EAjBZ,CAmBF,CAEIA,IACFP,EAAeA,EAAanB,IAAI,CAAEF,WAAY,MAC9CU,GAAS,MAGX,IAAIvyB,EAAW,CAAC,CAAE3f,QAAS4yC,EAAM5yC,QAASgF,MAAOA,IAGjD,GADA/kB,KAAK0yD,OAAO7oE,IAAI8oE,EAAM5yC,QAAS,CAAEqzC,SAAUA,EAAU1zB,SAAUA,IAC3DwzB,EAEF,IADA,IAAIa,EAAa1pE,MAAMkkB,QAAQ2kD,GAAaA,EAAY,CAACA,GAChD5hD,EAAM,EAAGA,EAAMyiD,EAAW5pE,OAAQmnB,IACnCyiD,EAAWziD,KAAQtR,KAAK+kB,QAC5B/kB,KAAK+kB,MAAMgvC,EAAWziD,IAAQ,CAAE8hD,SAAUA,EAAU1zB,SAAUA,IAKpE,IAAK,IAAIs0B,EAAM,EAAGA,EAAMnB,EAAgB1oE,OAAQ6pE,IAAO,CACrD,IAAI9oE,EAAQ2nE,EAAgBmB,GAC5B9oE,EAAMw0C,SAAWA,EACjBx0C,EAAM+mE,MAAQ,IAAIL,OAAOK,EAAQ,IAAKU,EAAMZ,cAAgB,GAAK,KACjE7mE,EAAM4nE,MAAQA,CAChB,CAMA,OAJAF,EAAalzB,SAAWA,EACxBkzB,EAAaX,MAAQ,IAAIL,OAAOK,EAAQ,IAAKU,EAAMZ,cAAgB,GAAK,KACxEa,EAAaE,MAAQA,EAEdF,CAhEP,CAJED,EAAMppE,SAAQ,SAAU4uC,GACtB,OAAO7zB,EAAMnb,IAAIgvC,EACnB,GAmEJ,EAEAq6B,EAAgBh1D,UAAUy2D,SAAW,SAAkBC,GACrD,MAA8B,iBAAhBA,EAA2Bl0D,KAAK+kB,MAAMmvC,GAAel0D,KAAK0yD,OAAO/oE,IAAIuqE,EACrF,EAEA1B,EAAgBh1D,UAAU22D,YAAc,SAAqBD,GAC3D,IAAIvB,EAAQ3yD,KAAKi0D,SAASC,GAC1B,IAAKvB,EACH,MAAM,IAAI3nD,MAAM,2BAA6BkpD,GAG/C,MAAO,GAAGntE,OAAO4rE,EAAMjzB,SACzB,EAEA8yB,EAAgBh1D,UAAU42D,SAAW,SAAkBF,GACrD,QAASl0D,KAAKi0D,SAASC,EACzB,EAEA1B,EAAgBh1D,UAAU00D,SAAW,SAAkBgC,EAAaxlB,GAClE,IAAIikB,EAAQ3yD,KAAKi0D,SAASC,GAC1B,IAAKvB,EACH,MAAM,IAAI3nD,MAAM,2BAA6BkpD,GAG/C,IAAIn0C,EAAU4yC,EAAMjzB,SAAS,GAAG3f,QAChC,GAAIA,EAAQs0C,mBACV,OAAOt0C,EAAQ06B,KAQjB,IALA,IAAI6Z,EAAclpE,OAAOC,OAAO,CAAC,EAAGqjD,GAChC0kB,EAAWT,EAAMS,SACjBf,EAAW,CAAC,EACZtrB,EAAS,GAEJzvC,EAAI,EAAG8yC,EAAIgpB,EAASjpE,OAAQmN,EAAI8yC,EAAG9yC,IAAK,CAC/C,IAAIi8D,EAAUH,EAAS97D,GAEvB,KAAIi8D,aAAmBhB,GAAvB,CAIA,IAAIgC,EAAehB,EAAQrB,SAASoC,EAAajC,GACjD,GAAIkC,SACF,IAAKhB,EAAQnB,SACX,MAAM,IAAIpnD,MAAM,4CAA+CuoD,EAAQnqE,KAAO,eAAmB8qE,EAAc,WAGjHntB,GAAU,IACVA,GAAUwtB,CATZ,CAWF,CAMA,IAAK,IAAIC,IAJgB,MAArBztB,EAAOnoC,OAAO,KAChBmoC,EAAS,IAAMA,GAGCsrB,SACTiC,EAAYE,GAGrB,IAAIxD,GAAc,QAAiBsD,GAGnC,OAFAvtB,GAAUiqB,EAAc,IAAMA,EAAc,GAG9C,EAEAwB,EAAgBh1D,UAAUi3D,UAAY,SAAmB13C,GACvD,IAAI23C,EAAS,CAAC10D,KAAKyyD,WACf/B,EAAc,CAAC,EACfiE,GAAiB,EACjBC,EAAiB73C,EAEjB83C,EAAaD,EAAeruE,QAAQ,KACxC,IAAoB,IAAhBsuE,EAAmB,CACrB,IAAI7D,EAAc4D,EAAejgC,OAAOkgC,EAAa,EAAGD,EAAezqE,QACvEyqE,EAAiBA,EAAejgC,OAAO,EAAGkgC,GAC1CnE,GAAc,QAAiBM,EACjC,CAIiC,OAFjC4D,EAAiBE,UAAUF,IAERh2D,OAAO,KACxBg2D,EAAiB,IAAMA,GAGzB,IAAIG,EAAUH,EAAezqE,OACzB4qE,EAAU,GAA4C,MAAvCH,EAAeh2D,OAAOm2D,EAAU,KACjDH,EAAiBA,EAAejgC,OAAO,EAAGogC,EAAU,GACpDJ,GAAiB,GAGnB,IAAK,IAAIr9D,EAAI,EAAG8yC,EAAIwqB,EAAezqE,OAAQmN,EAAI8yC,IAC7CsqB,EAASM,EAAcN,EAAQE,EAAeh2D,OAAOtH,KACzCnN,OAFoCmN,KAQlD,IADA,IAAI29D,EAAY,GACPC,EAAM,EAAGC,EAAKT,EAAOvqE,OAAQ+qE,EAAMC,EAAID,IAC1CR,EAAOQ,GAAKx1B,UACdu1B,EAAUrrE,KAAK8qE,EAAOQ,IAI1BR,EAoEJ,SAAuBA,GACrB,OAAOA,EAAOzrE,MAAK,SAAU8N,EAAGC,GAC9B,GAAID,EAAE+7D,MAAMG,QAAUj8D,EAAE87D,MAAMG,MAC5B,OAAOl8D,EAAE+7D,MAAMG,MAAQj8D,EAAE87D,MAAMG,MAGjC,GAAIl8D,EAAE+7D,MAAMG,MAAO,CACjB,GAAIl8D,EAAE+7D,MAAMC,UAAY/7D,EAAE87D,MAAMC,QAC9B,OAAO/7D,EAAE87D,MAAMC,QAAUh8D,EAAE+7D,MAAMC,QAEnC,GAAIh8D,EAAE+7D,MAAME,WAAah8D,EAAE87D,MAAME,SAC/B,OAAOh8D,EAAE87D,MAAME,SAAWj8D,EAAE+7D,MAAME,QAEtC,CAEA,OAAIj8D,EAAE+7D,MAAME,WAAah8D,EAAE87D,MAAME,SACxBj8D,EAAE+7D,MAAME,SAAWh8D,EAAE87D,MAAME,SAGhCj8D,EAAE+7D,MAAMC,UAAY/7D,EAAE87D,MAAMC,QACvB/7D,EAAE87D,MAAMC,QAAUh8D,EAAE+7D,MAAMC,QAG5B,CACT,GACF,CA7FaqC,CAAcH,GAEvB,IAAI/pE,EAAQ+pE,EAAU,GACtB,GAAI/pE,GAASA,EAAMw0C,SAKjB,OAJIi1B,GAAmD,UAAjCzpE,EAAM+mE,MAAMplC,OAAO10B,OAAO,KAC9Cy8D,GAAkC,KAqG1C,SAAqB1pE,EAAO6xB,EAAM2zC,GAOhC,IANA,IAAIhxB,EAAWx0C,EAAMw0C,SACjBuyB,EAAQ/mE,EAAM+mE,MACdoD,EAAWt4C,EAAK6rB,MAAMqpB,GACtBqD,EAAiB,EACjBtsE,EAAS,IAAIusE,EAAiB7E,GAEzBp5D,EAAI,EAAG8yC,EAAI1K,EAASv1C,OAAQmN,EAAI8yC,EAAG9yC,IAAK,CAK/C,IAJA,IAAIk3B,EAAWkR,EAASpoC,GACpBk+D,EAAShnC,EAASzJ,MAClB0wC,EAAU,CAAC,EAEN/vD,EAAI,EAAGhZ,EAAI8oE,EAAOrrE,OAAQub,EAAIhZ,EAAGgZ,IACxC+vD,EAAQD,EAAO9vD,IAAM2vD,EAASC,KAGhCtsE,EAAOY,KAAK,CAAEm2B,QAASyO,EAASzO,QAAS2uB,OAAQ+mB,EAASC,YAAaF,EAAOrrE,QAChF,CAEA,OAAOnB,CACT,CAtHa2sE,CAAYzqE,EAAO0pE,EAAgBlE,EAE9C,EAEO8B,CACT,CAzM6B,GA2MzB+C,EAAmB,SAA0B7E,GAG/C1wD,KAAK2B,OAAStX,MAAMmT,UAAUmE,OAC9B3B,KAAK7H,MAAQ9N,MAAMmT,UAAUrF,MAC7B6H,KAAKpW,KAAOS,MAAMmT,UAAU5T,KAC5BoW,KAAK7V,OAAS,EACd6V,KAAK0wD,YAAcA,GAAe,CAAC,CACrC,EAwEA,SAASsE,EAAcN,EAAQvgD,GAG7B,IAFA,IAAIi9C,EAAa,GAER95D,EAAI,EAAG8yC,EAAIsqB,EAAOvqE,OAAQmN,EAAI8yC,EAAG9yC,IAAK,CAC7C,IAAIpM,EAAQwpE,EAAOp9D,GACnB85D,EAAWxnE,KAAKme,MAAMqpD,EAAYlmE,EAAM09C,MAAMz0B,GAChD,CAEA,OAAOi9C,CACT,CAwBA,SAASuC,EAAWf,EAAcW,GAChC,IAAIK,EAAahB,EAAanB,IAAI,CAAEF,WAAY,MAC5CsC,EAAYD,EAKhB,OAJAL,EAAQvB,UAAS,SAAU79C,GACzB0/C,EAAYA,EAAUpC,IAAIt9C,EAC5B,IAEO,CAACy/C,EAAYC,EACtB,+CC9dI7Z,EAAgB,SAAStpB,EAAG15B,GAI5B,OAHAgjD,EAAgB5uD,OAAOmT,gBAClB,CAAEC,UAAW,cAAgBnU,OAAS,SAAUqmC,EAAG15B,GAAK05B,EAAElyB,UAAYxH,CAAG,GAC1E,SAAU05B,EAAG15B,GAAK,IAAK,IAAI8kB,KAAK9kB,EAAOA,EAAEzH,eAAeusB,KAAI4U,EAAE5U,GAAK9kB,EAAE8kB,GAAI,EACtEk+B,EAActpB,EAAG15B,EAC5B,EAWI4+D,EAAuC,WACvC,SAASA,EAAsBx+B,GAI3Bp3B,KAAK61D,KAAO,KACZ71D,KAAKjV,QAAU,CAAC,EAChBK,OAAOC,OAAO2U,KAAMo3B,GACpBp3B,KAAK0uC,OAAS1uC,KAAK0uC,QAAU,CAAC,EAC9B1uC,KAAK81D,qBAAuB,CAAC,EAC7B,IAAIC,EAAiB,GACjB1pE,EAAU2T,KACd,EAAG,CACC,IAAI2wD,EAAgBvlE,OAAOC,OAAO,CAAC,EAAGgB,EAAQqiD,QAC1CriD,EAAQmzB,QAAUnzB,EAAQmzB,OAAOw2C,uBAE1BrF,EAActkE,EAAQ4pE,mBAEjCF,EAAe5rD,QAAQwmD,GACvBtkE,EAAUA,EAAQ6pE,iBACtB,OAAS7pE,GACT,IAAI8pE,EAAY/qE,OAAOC,OAAO0c,MAAM3c,OAAQ,CAAC,CAAC,EAAG4U,KAAK0wD,aAAa3pE,OAAOgvE,IAC1E/1D,KAAKo2D,cAAgB,CAACD,EAAWn2D,KAAKwf,OAAQxf,KAClD,CA8LA,OA1LA41D,EAAsBp4D,UAAU64D,mBAAqB,WACjD,IAAIC,EAAe,CAACt2D,MAChB81D,EAAuB91D,KAAK81D,qBAChC,IAAK,IAAIrpE,KAAOqpE,EAAsB,CAClC,IAAIS,EAAmBT,EAAqBrpE,GAAK+pE,2BAC7CD,GACAD,EAAa1sE,KAAKme,MAAMuuD,EAAcC,EAAiBF,qBAE/D,CACA,OAAOC,CACX,EAKAV,EAAsBp4D,UAAUi5D,2BAA6B,WACzD,OAAOz2D,KAAKq2D,qBAAqBj0E,KAAI,SAAU6xC,GAAK,OAAOA,EAAEyiC,mBAAqB,IAAG9uE,QAAO,SAAUqsC,GAAK,OAAOA,CAAG,GACzH,EACA2hC,EAAsBp4D,UAAUm5D,uBAAyB,SAAUC,EAAmB7sE,EAAU0wC,EAAUo8B,GACtG,IAAIC,EACAC,EAA4C,iBAAtBH,EAAiCA,EAAoBA,EAAkBxtE,KAC7FgtE,EAAgBp2D,KAAKo2D,cACrB52C,EAASp0B,OAAOC,OAAO,CAAC,EAAG+qE,EAAc,GAAI,CAAEY,gBAAiBD,IAqBpE,OAnBID,EAD6B,iBAAtBF,EACe,CAClBxtE,KAAMwtE,EACN7sE,SAAUA,EACV0wC,SAAUA,EACVo8B,UAAWA,EACXI,YAAaJ,EAAUI,YACvBb,cAAe,CAACA,EAAc,GAAI52C,EAAQ42C,EAAc,KAItC,CAClBhtE,KAAM2tE,EACNhtE,SAAU6sE,EAAkB7sE,SAC5B8sE,UAAWD,EAAkBC,UAC7Bp8B,SAAUm8B,EAAkBn8B,SAC5Bw8B,YAAaL,EAAkBC,UAAUI,YACzCb,cAAe,CAACA,EAAc,GAAI52C,EAAQ42C,EAAc,KAGzDp2D,KAAK81D,qBAAqBiB,GAAgBD,CACrD,EAIAlB,EAAsBp4D,UAAUy4D,gBAAkB,WAE9C,IAAIiB,EAAcl3D,KAAKwf,OAAOmzC,MAC1BwE,EAAgBD,EAAYE,YAAY,KAC5C,OAAOF,EAAYviC,OAAOwiC,EAAgB,EAC9C,EAKAvB,EAAsBp4D,UAAU65D,gBAAkB,WAC9C,IAAIC,EAAet3D,KAAKi2D,kBACpBl5C,EAAO/c,KAAK0uC,OAAO4oB,IAAiB,GACpCtG,EAAchxD,KAAKgxD,YAIvB,OAHIA,IACAj0C,GAAQ,IAAMi0C,GAEXj0C,CACX,EAIA64C,EAAsBp4D,UAAU+5D,WAAa,WACzC,IAAIjzD,EAAQtE,KACRw3D,EAAaC,UACb5a,EAAWiY,UAAU90D,KAAK68C,UAC9B,GAAiB,KAAbA,EAAiB,CACjB,IAAI6a,EAAgB13D,KAAK0rC,OAAOgnB,OAAOx6D,MAAK,SAAUy6D,GAClD,OAAOA,EAAMvpE,OAASkb,EAAMkb,OAAOp2B,MACf,KAAhBupE,EAAMA,KACd,IACI+E,IACA7a,EAAW6a,EAAc/E,MAEjC,CACA,IAAK3yD,KAAK0uC,OACN,OAAO8oB,EAAW3a,GAEtB,IAAIya,EAAet3D,KAAKi2D,kBACpBl5C,EAAO/c,KAAK0uC,OAAO4oB,IAAiB,GACxC,OAGOE,EAHFz6C,EAGa8/B,EAASloB,OAAO,EAAGkoB,EAASua,YAAYr6C,IAFpC8/B,EAG1B,EAKA+Y,EAAsBp4D,UAAUm6D,eAAiB,SAAUC,GACvD,IAAItzD,EAAQtE,KACR0rC,EAAS1rC,KAAK0rC,OAClBA,EAAOmsB,mBAAqB73D,KAC5B,IAAI02D,EAAsB12D,KAAK02D,oBAC3BA,IACAA,EAAoBl3C,OAAOs4C,SAASC,UAAW,GAEnD/3D,KAAKwf,OAAOs4C,SAASC,UAAW,EAChCrsB,EAAOssB,oBACP,IAAI9tB,EAAQ,GACR+tB,EAAa,GACbnC,EAAuB91D,KAAK81D,qBAC5BoC,EAAU,SAAUnB,GACpB,IAAID,EAAsBhB,EAAqBiB,GAC3CoB,EAAWzsB,EAAO0sB,UAAUrB,GAChC,IAAKoB,EACD,MAAM,IAAIntD,MAAM,kDAAoD8rD,EAAoBr8B,SAAW,KAEvG,IAAI49B,EAAsBvB,EAAoBN,2BACT,YAAjCM,EAAoB/sE,SAChBsuE,GAAuBA,EAAoBC,mBAC3CpuB,EAAMtgD,KAAKyuE,EAAoBV,eAAeC,KAG1CA,GACAK,EAAWruE,KAAK,CAAEuuE,SAAUA,EAAUrB,oBAAqBA,IAE/D5sB,EAAMtgD,KAAKuuE,EACN3+B,QAAQs9B,EAAqBc,GAC7BjqE,MAAK,WAAc,OAAO0qE,EACzBA,EAAoBV,eAAeC,GACnClqE,EAAQD,SAAW,MAIzB4qE,GACAnuB,EAAMtgD,KAAKyuE,EAAoBV,eAAeC,GAG1D,EACA,IAAK,IAAIb,KAAgBjB,EACrBoC,EAAQnB,GAEZ,OAAOrpE,EACFkT,IAAIspC,GACJv8C,MAAK,WAEN,OADAsqE,EAAW1uE,SAAQ,SAAU9F,GAAK,OAAOA,EAAE00E,SAASI,KAAK90E,EAAEqzE,oBAAsB,IAC1E,IACX,IACKnpE,MAAK,WAAc,OAAO6qE,EAAMl0D,EAAQ,GACjD,EAEAsxD,EAAsBp4D,UAAUi7D,aAAe,WAC3C,IAAI/sB,EAAS1rC,KAAK0rC,OACdliB,EAAQxpB,KAAK04D,YAAYhtB,EAAOitB,gBAChCnvC,GACAkiB,EAAOC,QAAQyI,SAAS5qB,EAEhC,EAEAosC,EAAsBp4D,UAAUk7D,YAAc,SAAUxK,QAClC,IAAdA,IAAwBA,EAAY,OACxC,IAAI1kC,EAAQ,GACRovC,EAAc,GACdC,EAAgB74D,KAAKwf,OAAOs4C,SAAStuC,MACrCsvC,EAAoB94D,KAAK0rC,OACzBoqB,EAAuB91D,KAAK81D,qBAIhC,IAAK,IAAIiB,KAHL8B,IACArvC,EAAQsvC,EAAkBC,eAAeF,IAEpB/C,EAAsB,CAC3C,IACIkD,EADsBlD,EAAqBiB,GACCP,2BAChD,GAAIwC,EAAuB,CACvB,IAAIC,EAAaD,EAAsBN,YAAYxK,GAC/C+K,GACAL,EAAYhvE,KAAKqvE,EAEzB,CACJ,CAOA,OANIL,EAAYzuE,SACZq/B,EAAQovC,EAAYp2E,KAAK0rE,IAAc1kC,EAAQ0kC,EAAY,IAAM1kC,GAEjEsvC,EAAkBtvC,QAClBA,IAAUA,EAAQ0kC,EAAY,IAAM4K,EAAkBC,eAAeD,EAAkBtvC,QAEpFA,CACX,EACOosC,CACX,CAtN0C,GAuNtC4C,EAAQ,SAAUtrB,GAClBA,EAAYwpB,oBAAsB,KAClCxpB,EAAY2oB,KAAO,IACvB,EAKIqD,EAA0B,WAC1B,SAASA,EAASxtB,EAAQytB,GAItBn5D,KAAK+3D,UAAW,EAIhB/3D,KAAKwpB,MAAQ,KAIbxpB,KAAKy6C,KAAO,KAIZz6C,KAAKm5D,aAAe,KAIpBn5D,KAAKujC,SAAW,CAAC,EAIjBvjC,KAAKwf,OAAS,KACdxf,KAAK0rC,OAASA,EACd1rC,KAAKm5D,aAAeA,CACxB,CAcA,OANAD,EAAS17D,UAAU42C,SAAW,SAAU5qB,GACpCxpB,KAAKwpB,MAAQA,EACTxpB,KAAK+3D,UACL/3D,KAAK0rC,OAAO0tB,aAEpB,EACOF,CACX,CA3C6B,GA6C7B,SAASG,EAAuBt8C,EAAM0/B,EAAc6c,GAQhD,YAPiB,IAAbA,IAAuBA,GAAW,GACjC7c,GAA4B,MAAZ1/B,EAAK,KACtBA,EAAO,IAAMA,GAEb0/B,GAAgB6c,IAChBv8C,EAAOA,EAAK0Q,UAAU,EAAG1Q,EAAK5yB,SAE3B4yB,CACX,CACA,SAASw8C,EAAkB1c,EAAU2c,EAAS/c,EAAc6c,GACxD,GAAIG,EAAc92E,KAAKk6D,GACnB,OAAOA,EAEX,IAAI9/B,EAAO,GAWX,OAVIy8C,EAAQrvE,QAAyB,MAAfqvE,EAAQ,KAC1Bz8C,GAAQ,MAEZA,GAAQy8C,GACGrvE,QAAoC,MAA1B4yB,EAAKA,EAAK5yB,OAAS,IAA+B,MAAhB0yD,EAAS,KAC5D9/B,GAAQ,KAERA,EAAK5yB,QAAoC,MAA1B4yB,EAAKA,EAAK5yB,OAAS,IAA8B,MAAhB0yD,EAAS,KACzD9/B,EAAOA,EAAK0Q,UAAU,EAAG1Q,EAAK5yB,OAAS,IAEpCkvE,EAAuBt8C,EAAO8/B,EAAUJ,EAAc6c,EACjE,CAOA,SAASI,EAAqCl6C,GAC1C,IAAIm6C,EAAe,GACnB,GAAItvE,MAAMkkB,QAAQiR,EAAOmzC,OACrB,IAAK,IAAIr7D,EAAI,EAAGsI,EAAK4f,EAAOmzC,MAAMxoE,OAAQmN,EAAIsI,IAAMtI,EAAG,CACnD,IAAIjL,EAAUjB,OAAOC,OAAO,CAAC,EAAGm0B,GAChCnzB,EAAQsmE,MAAQnzC,EAAOmzC,MAAMr7D,GAC7BqiE,EAAa/vE,KAAKyC,EACtB,MAGAstE,EAAa/vE,KAAKwB,OAAOC,OAAO,CAAC,EAAGm0B,IAExC,OAAOm6C,CACX,CACA,IAAIC,EAAe,QACfH,EAAgB,+BAOhBI,EAAqC,WACrC,SAASA,IACL75D,KAAKs2D,aAAe,GACpBt2D,KAAKjV,QAAU,CAAC,EAChBiV,KAAK85D,cAAgB,EACzB,CA8JA,OAtJAD,EAAoBr8D,UAAUu8D,gBAAkB,SAAU3wE,EAAM+rC,GAC5D,GAAIA,QACA,MAAM,IAAInqB,MAAM,8CAGpB,OADAhL,KAAK85D,cAAclwE,KAAK,CAAER,KAAMA,EAAM+rC,KAAMA,IACrCn1B,IACX,EAOA65D,EAAoBr8D,UAAUw8D,iBAAmB,SAAU7kC,GACvD,OAAOn1B,KAAK+5D,gBAAgB,YAA6B5kC,EAC7D,EAOA0kC,EAAoBr8D,UAAUy8D,mBAAqB,SAAU9kC,GACzD,OAAOn1B,KAAK+5D,gBAAgB,cAAiC5kC,EACjE,EAOA0kC,EAAoBr8D,UAAU08D,iBAAmB,SAAU/kC,GACvD,OAAOn1B,KAAK+5D,gBAAgB,YAA6B5kC,EAC7D,EAOA0kC,EAAoBr8D,UAAU28D,kBAAoB,SAAUhlC,GACxD,OAAOn1B,KAAK+5D,gBAAgB,aAA+B5kC,EAC/D,EAOA0kC,EAAoBr8D,UAAU48D,cAAgB,SAAUvd,GAEpD,OADA78C,KAAKq6D,eAAiBxd,EACf78C,IACX,EAOA65D,EAAoBr8D,UAAUpb,IAAM,SAAUuwE,GAC1C,IAAIruD,EAAQtE,KACZ,OAAI3V,MAAMkkB,QAAQokD,IACdA,EAAMppE,SAAQ,SAAU4uC,GAAK,OAAO7zB,EAAMliB,IAAI+1C,EAAI,IAC3Cn4B,MAEJA,KAAKs6D,SAAS3H,EACzB,EAQAkH,EAAoBr8D,UAAU+8D,oBAAsB,SAAUC,GAE1D,OADAx6D,KAAKy6D,iBAAmBD,EACjBx6D,IACX,EAOA65D,EAAoBr8D,UAAU88D,SAAW,SAAU96C,GAa/C,OAZAxf,KAAKs2D,aAAa1sE,MAAK,SAAU8hD,GAG7B,IAFA,IACIosB,EADA6B,EAAeD,EAAqCl6C,GAE/CloB,EAAI,EAAGsI,EAAK+5D,EAAaxvE,OAAQmN,EAAIsI,IAAMtI,EAAG,CACnD,IAAIojE,EAAcf,EAAariE,GAC/BojE,EAAYn3B,SAAWm3B,EAAYn3B,UAAY,CAAC,EAC3Cu0B,IACDA,EAAWpsB,EAAOivB,eAAeD,IAErChvB,EAAOkvB,SAASF,EAAa5C,EACjC,CACJ,IACO93D,IACX,EAQA65D,EAAoBr8D,UAAUq9D,iBAAmB,SAAUr7C,GAEvD,OADAxf,KAAK86D,mBAAqBt7C,EACnBxf,IACX,EAMA65D,EAAoBr8D,UAAUu9D,eAAiB,SAAUrvB,GAErD,IADA,IAAI4qB,EAAet2D,KAAKs2D,aACfh/D,EAAI,EAAGsI,EAAK02D,EAAansE,OAAQmN,EAAIsI,IAAMtI,EAChDg/D,EAAah/D,GAAGo0C,GAEpB,IAAIrQ,EAAKr7B,KAAMwpB,EAAQ6R,EAAG7R,MAAOmvC,EAAiBt9B,EAAGs9B,eAAgBmC,EAAqBz/B,EAAGy/B,mBAAoBT,EAAiBh/B,EAAGg/B,eAAgBI,EAAmBp/B,EAAGo/B,iBACvKjxC,IACAkiB,EAAOliB,MAAQA,GAEfmvC,IACAjtB,EAAOitB,eAAiBA,GAExBmC,GACApvB,EAAOsvB,oBAAoBF,GAE3BT,IACA3uB,EAAO0uB,cAAgBC,GAEvBI,GACA/uB,EAAO6uB,oBAAoBE,GAE/BrvE,OAAOC,OAAOqgD,EAAO3gD,QAASiV,KAAKjV,SACnC,IAAI+uE,EAAgB95D,KAAK85D,cACrBmB,EAAoBnB,EAAc3vE,OACtC,GAAI8wE,EAAmB,CACnB,IAAKvvB,EAAOwvB,OACR,MAAM,IAAIlwD,MAAM,uDAEpB,IAAImwD,EAAmBzvB,EAAOyvB,iBAC9B,IAAS7jE,EAAI,EAAGsI,EAAKq7D,EAAmB3jE,EAAIsI,IAAMtI,EAAG,CACjD,IAAI4+C,EAAK4jB,EAAcxiE,GAAI2zC,EAASiL,EAAG9sD,KAAM+rC,EAAO+gB,EAAG/gB,KACvDgmC,EAAiBC,QAAQnwB,EAAQ9V,EACrC,CACJ,CACJ,EACO0kC,CACX,CApKwC,GAyKpCwB,EAAwB,WAKxB,SAASA,EAAO1tC,EAAWge,GACvB,IAAIrnC,EAAQtE,KAIZA,KAAKvP,OAAS,KACduP,KAAKjV,QAAU,CAAC,EAIhBiV,KAAKy6D,iBAAmB,CAAC,EAMzBz6D,KAAK+4D,eAAiB,SAAUvvC,GAC5B,OAAIllB,EAAM7T,OACC6T,EAAM7T,OAAOsoE,eAAevvC,GAEhCA,CACX,EACAxpB,KAAK2tB,UAAYA,EACjB3tB,KAAK2rC,QAAUA,EACf3rC,KAAK5S,OACT,CAgcA,OA3bAiuE,EAAO79D,UAAUpQ,MAAQ,WACrB,IAAIkX,EAAQtE,KACZA,KAAKo4D,UAAY,CAAC,EAClBp4D,KAAK0yD,OAAS,GACd1yD,KAAKw5D,QAAU,GACfx5D,KAAKs7D,cAAe,EACpBt7D,KAAKu7D,cAAe,EACpBv7D,KAAKw7D,sBAAuB,EAC5Bx7D,KAAKy7D,0BAA2B,EAChCz7D,KAAK07D,mBAAoB,EACzB17D,KAAK27D,iBAAkB,EACvB37D,KAAK47D,qBAAsB,EAC3B57D,KAAK67D,qBAAsB,EAC3B77D,KAAK87D,kBAAmB,EACxB97D,KAAK+7D,iBAAkB,EACvB/7D,KAAKg8D,WAAa,GAClBh8D,KAAK63D,mBAAqB,KAC1B73D,KAAKy6D,iBAAmB,CAAC,EACzBz6D,KAAKi8D,eAAiB,IACtBj8D,KAAKk8D,YAAc,IAAI1J,EACvBxyD,KAAKm8D,iBAAmB,IAAI3J,EAC5BxyD,KAAKo8D,mBAAqB,IAAI1uE,GAAQ,SAAUD,GAC5C6W,EAAM+3D,0BAA4B5uE,CACtC,GACJ,EACArC,OAAOgS,eAAei+D,EAAO79D,UAAW,SAAU,CAI9C7T,IAAK,WACD,OAAQqW,KAAKvP,MACjB,EACAwM,YAAY,EACZC,cAAc,IAQlBm+D,EAAO79D,UAAU8+D,iBAAmB,SAAUnE,EAAU/uE,GACpDA,EAAOA,GAAQ,UACf4W,KAAKo4D,UAAUhvE,GAAQ+uE,CAC3B,EAIAkD,EAAO79D,UAAU++D,iBAAmB,WAChC,OAAOv8D,KAAKo8D,kBAChB,EAMAf,EAAO79D,UAAUw8B,UAAY,SAAUwiC,GACnC,IAAIl4D,EAAQtE,KACZA,KAAKs7D,cAAe,EACpB,IACI97C,EADAx2B,EAASwzE,EAMb,MAJgC,mBAArBA,IAEPxzE,EAASwzE,EADTh9C,EAAS,IAAIq6C,IAGVnsE,EACFD,QAAQzE,GACR2E,MAAK,SAAUsmC,GACZA,GAAKA,EAAE8mC,iBACPv7C,EAASyU,GAEbzU,EAAOu7C,eAAez2D,GACtBA,EAAMg3D,cAAe,EACrBh3D,EAAM+3D,2BACV,GACJ,EAOAhB,EAAO79D,UAAUk9C,SAAW,SAAUmC,EAAU9xD,GAC5C,OAAKiV,KAAKs7D,cAAgBt7D,KAAKvP,OACpBuP,KAAKvP,OAAOiqD,SAASmC,EAAU9xD,IAE1CiV,KAAKw7D,sBAAuB,EACrBx7D,KAAK2rC,QAAQ+O,SA/T5B,SAAqBmC,EAAU2c,EAAS/c,GACpC,OAAImd,EAAaj3E,KAAKk6D,GACXwc,EAAuBxc,EAAUJ,GAErC8c,EAAkB1c,EAAU2c,EAAS/c,EAChD,CA0TqCggB,CAAY5f,EAAU78C,KAAKw5D,QAASx5D,KAAK2rC,QAAQgP,eAAgB5vD,GAClG,EASAswE,EAAO79D,UAAUk/D,gBAAkB,SAAU/J,EAAOjkB,EAAQ3jD,GACxD,IAAIgyB,EAAO/c,KAAKkyD,SAASS,EAAOjkB,GAChC,OAAO1uC,KAAK06C,SAAS39B,EAAMhyB,EAC/B,EAIAswE,EAAO79D,UAAUsgD,aAAe,WAC5B99C,KAAKy7D,0BAA2B,EAChCz7D,KAAK2rC,QAAQmS,cACjB,EAOAud,EAAO79D,UAAUsjC,YAAc,SAAUnT,GACrC,IAAIspC,EAAc,IAAIoE,EAAO1tC,GAAa3tB,KAAK2tB,UAAUmT,cAAe9gC,KAAK2rC,SAE7E,OADAsrB,EAAYxmE,OAASuP,KACdi3D,CACX,EASAoE,EAAO79D,UAAU00D,SAAW,SAAUgC,EAAaxlB,EAAQ3jD,QACxC,IAAX2jD,IAAqBA,EAAS,CAAC,QACnB,IAAZ3jD,IAAsBA,EAAU,CAAC,GAIrC,IAAI4xE,EAAa,eAAgBjuB,EAAS1uC,KAAKm8D,iBAAmBn8D,KAAKk8D,YAEvE,IADeS,EAAWvI,SAASF,GACpB,CACX,GAAIl0D,KAAKvP,OACL,OAAOuP,KAAKvP,OAAOyhE,SAASgC,EAAaxlB,EAAQ3jD,GAErD,MAAM,IAAIigB,MAAM,sBAAwBkpD,EAAc,4CAA8CA,EAAc,0CACtH,CACA,IACI0I,EAAarD,EADNoD,EAAWzK,SAASgC,EAAaxlB,GACH1uC,KAAKw5D,QAASx5D,KAAK2rC,QAAQgP,cAAe5vD,EAAQuuE,UAC3F,OAAOvuE,EAAQuuE,SAAW,GAAKt5D,KAAK2rC,QAAQ0R,kBAAoBuf,EAAaA,CACjF,EAMAvB,EAAO79D,UAAUm9D,eAAiB,SAAUn7C,GACxC,IAAIs4C,EAAW,IAAIoB,EAASl5D,KAAM,SAAUwf,EACtCA,EAAOi7B,KAEPj7B,EAAOmzC,OAMb,OALAmF,EAAStuC,MAAQhK,EAAOgK,MACxBsuC,EAASnvE,MAAQ62B,EAAOq9C,IACxB/E,EAASrd,KAAOj7B,EAAOi7B,KACvBqd,EAASv0B,SAAW/jB,EAAO+jB,SAC3Bu0B,EAASt4C,OAASA,EACXs4C,CACX,EAOAuD,EAAO79D,UAAUo9D,SAAW,SAAUp7C,EAAQs4C,GAC1C,GAAIztE,MAAMkkB,QAAQiR,EAAOmzC,OACF+G,EAAqCl6C,GAE3Cj2B,QAAQyW,KAAK46D,SAASlvD,KAAK1L,WAH5C,CAMA88D,EAAoBt9C,GACd,cAAeA,GAAYA,EAAOu9C,qBACpCv9C,EAAO44C,UAAY,CACf,QAAW,CACP39B,SAAUjb,EAAOib,SACjB7Q,KAAMpK,EAAOoK,QAIpBkuC,IACDA,EAAW93D,KAAK26D,eAAen7C,IAEnCxf,KAAK0yD,OAAO9oE,KAAK41B,GACjB,IAAIzC,EAAOyC,EAAOmzC,MACK,MAAnB51C,EAAKne,OAAO,KACZme,EAAOA,EAAK4X,OAAO,IAEvB,IAAIo9B,GAAyC,IAAzBvyC,EAAOuyC,cACvB7mE,EAAQ8U,KAAKk8D,YAAY/yE,IAAI,CAC7B4zB,KAAMA,EACNgD,QAASP,EACTuyC,cAAeA,IAEnB,GAAIh1C,EAAM,CACN,IAAIwmB,EAAW/jB,EAAO+jB,gBACf/jB,EAAO+jB,SACd,IAAIy5B,EAAYrzD,KAAK+J,MAAM/J,KAAKC,UAAU4V,IAC1CA,EAAO+jB,SAAWA,EAClBy5B,EAAUrK,MAAQ51C,EAAO,eACzBigD,EAAUhH,gBAAiB,EAC3Bh2D,KAAKm8D,iBAAiBhzE,IAAI,CACtB4zB,KAAMigD,EAAUrK,MAChB5yC,QAASi9C,EACTjL,cAAeA,IAEnBiL,EAAUlF,SAAWA,EACrBkF,EAAUz5B,SAAW/jB,EAAO+jB,SAC5By5B,EAAUD,mBAAqBv9C,EAAOu9C,kBAC1C,CACAv9C,EAAOs4C,SAAWA,EAClB,IAAIkE,EAAah8D,KAAKg8D,WACtB,IAAKlE,EAASnvE,OAA4B,IAAnBmvE,EAASnvE,SAAkD,IAAlCqzE,EAAWz1E,QAAQuxE,GAAkB,CACjF,IAAMA,EAASrd,MAA0B,KAAlBqd,EAASrd,OAAiBvvD,EAAM4nE,MAAME,UAAY9nE,EAAM4nE,MAAMG,OACjF,MAAM,IAAIjoD,MAAM,6BAA+BwU,EAAOmzC,MAAQ,sFAEpC,iBAAnBmF,EAASnvE,QAChBmvE,EAASnvE,QAAUqX,KAAKi8D,gBAE5BD,EAAWpyE,KAAKkuE,GAQhBkE,EAAW/yE,MAAK,SAAU8N,EAAGC,GAAK,OAAOD,EAAEpO,MAAQqO,EAAErO,KAAO,GAChE,CA1DA,CA2DJ,EAMA0yE,EAAO79D,UAAU42D,SAAW,SAAUhrE,GAClC,SAAU4W,KAAKk8D,YAAY9H,SAAShrE,IAAS4W,KAAKvP,QAAUuP,KAAKvP,OAAO2jE,SAAShrE,GACrF,EAMAiyE,EAAO79D,UAAUy/D,YAAc,SAAU7zE,GACrC,OAAO4W,KAAKk8D,YAAY9H,SAAShrE,EACrC,EAMAiyE,EAAO79D,UAAUw9D,oBAAsB,SAAUx7C,GAC7C,IAAIlb,EAAQtE,KACZ,IAAKwf,EACD,MAAM,IAAIxU,MAAM,iCAEpBhL,KAAKk9D,gBAAkB,SAAUhwB,GAC7B,OAAO5oC,EACF64D,mBAAmB39C,EAAQ0tB,GAC3Bv/C,MAAK,SAAUsmC,GAEhB,OADAiZ,EAAY1tB,OAASyU,EACdiZ,CACX,GACJ,CACJ,EAIAmuB,EAAO79D,UAAU47D,YAAc,WAC3B,IAAIgE,EAAep9D,KAAKvP,OACxB,GAAI2sE,EACA,OAAOA,EAAahE,cAExB,IAAIvB,EAAqB73D,KAAK63D,mBAC1BA,GACAA,EAAmBY,cAG3B,EAKA4C,EAAO79D,UAAUw6D,kBAAoB,WAEjC,IADA,IAAI6E,EAAM78D,KAAKg8D,WACN1kE,EAAI,EAAG+lE,EAAWR,EAAI1yE,OAAQmN,EAAI+lE,EAAU/lE,IAAK,CACtD,IAAIjL,EAAUwwE,EAAIvlE,GACbjL,EAAQmzB,OAAOi7B,KAIhBpuD,EAAQouD,KAAO4e,EAAuBhtE,EAAQmzB,OAAOi7B,KAAMz6C,KAAK2rC,QAAQgP,eAHxEtuD,EAAQouD,KAAO8e,EAAkBltE,EAAQ8sE,aAAcn5D,KAAKw5D,QAASx5D,KAAK2rC,QAAQgP,cAK1F,CACJ,EAMA0gB,EAAO79D,UAAU+8D,oBAAsB,SAAU+C,GAE7C,IAAI7C,EAAmB6C,EACvB,IAAK,IAAIvG,KAAgB0D,EAAkB,CACvC,IAAID,EAAiBC,EAAiB1D,GACtC/2D,KAAKy6D,iBAAiB1D,GAAgB,CAClCt8B,SAAU+/B,EAAe//B,SAEjC,CACJ,EAEA4gC,EAAO79D,UAAU+/D,gBAAkB,WAC/B,IAAIH,EAAep9D,KAAKvP,OACpB2sE,IACAp9D,KAAKw5D,QAAUgE,EAAgBJ,EAAcA,EAAavF,oBAElE,EAEAwD,EAAO79D,UAAUigE,6BAA+B,SAAU7f,EAAKsY,QAC/C,IAARtY,IAAkBA,EAAM,SACF,IAAtBsY,IAAgCA,EAAoB,MACxD,IAAIrZ,EAAWe,EACXoT,EAAc,GACd0M,EAAa9f,EAAIr3D,QAAQ,MACT,IAAhBm3E,IACA7gB,EAAWe,EAAIjpB,OAAO,EAAG+oC,GACzB1M,EAAcpT,EAAIjpB,OAAO+oC,EAAa,IAE1C,IAAIC,EAA0B39D,KAAKk8D,YAAYzH,UAAU7W,GACpD+f,GAA4BA,EAAwBxzE,SACrDwzE,EAA0B39D,KAAKm8D,iBAAiB1H,UAAU7W,IAE9D,IAWI50D,EAXA40E,EAAkB,CAClB/gB,SAAUA,EACVmU,YAAaA,EACbxxC,OAAQ,KACR02C,kBAAmBA,EACnBQ,oBAAqB12D,KAAK63D,mBAC1BnsB,OAAQ1rC,KACRjV,QAAS,CACL8yE,mBAAoB79D,KAAKjV,QAAQ8yE,qBAIzC,GAAIF,GAA2BA,EAAwBxzE,OAAQ,CAC3D,IAAI2zE,EAAQH,EAAwB,GAChCzwB,EAAc,IAAI0oB,EAAsBxqE,OAAOC,OAAO,CAAC,EAAGuyE,EAAiB,CAC3ElvB,OAAQovB,EAAMpvB,OACdgiB,YAAaoN,EAAMpN,aAAeiN,EAAwBjN,YAC1DlxC,OAAQs+C,EAAMt+C,QAAUs+C,EAAM/9C,WAG9B/2B,EADyB,mBAAlB80E,EAAM/9C,QACJg+C,EAA2B7wB,EAAa4wB,EAAM/9C,QAAS+9C,GAE3DA,EAAM/9C,SAAuD,mBAArC+9C,EAAM/9C,QAAQg9C,mBAClCgB,EAA2B7wB,EAAa4wB,EAAM/9C,QAAQg9C,mBAAoBe,EAAM/9C,SAGhFryB,EAAQD,QAAQy/C,EAEjC,MACK,GAAIltC,KAAKk9D,gBACNhwB,EAAc,IAAI0oB,EAAsBxqE,OAAOC,OAAO,CAAC,EAAGuyE,EAAiB,CAC3ElvB,OAAQ,CAAE3xB,KAAM8/B,GAChB6T,YAAaiN,EAA0BA,EAAwBjN,YAAc,CAAC,EAC9ElxC,OAAQ,QAEZx2B,EAAS+0E,EAA2B7wB,EAAaltC,KAAKk9D,sBAErD,GAAIl9D,KAAKvP,OAAQ,CAClB,IAAIi7C,EAAS1rC,KAAKg+D,uBAAuBh+D,KAAKvP,QAC9C,GAAIi7C,EAAQ,CACR,IAAIuyB,EAAuBj+D,KAAKk+D,iCAAiCxyB,EAAQwqB,GACrEhpB,EAAc,IAAI0oB,EAAsBxqE,OAAOC,OAAO,CAAC,EAAGuyE,EAAiB,CAC3ElvB,OAAQ,CAAE3xB,KAAM8/B,GAChB6T,YAAaiN,EAA0BA,EAAwBjN,YAAc,CAAC,EAC9EhlB,OAAQA,EACRwqB,kBAAmB+H,EACnB3F,oBAAoB,EACpB94C,OAAQ,QAEZx2B,EAAS+0E,EAA2B7wB,EAAaxB,EAAOwxB,gBAC5D,CACJ,CAIA,OAHIl0E,GAAUktE,IACVl2D,KAAKw5D,QAAUgE,EAAgBx9D,KAAKvP,OAAQylE,IAEzCltE,GAAU0E,EAAQ8sC,OAAO,IAAIxvB,MAAM,oBAAsB4yC,GACpE,EAEAyd,EAAO79D,UAAU0gE,iCAAmC,SAAUxyB,EAAQwB,GAClE,OAAIA,EAAYxB,SAAWA,GACvBwB,EAAY2P,SAAWnR,EAAO8tB,QACvBtsB,GAEFA,EAAYgpB,kBACVl2D,KAAKk+D,iCAAiCxyB,EAAQwB,EAAYgpB,wBADhE,CAIT,EAEAmF,EAAO79D,UAAUwgE,uBAAyB,SAAUtyB,GAChD,OAAIA,EAAOwxB,gBACAxxB,IAEFA,EAAOj7C,QACLuP,KAAKg+D,uBAAuBtyB,EAAOj7C,OAGlD,EAIA4qE,EAAO79D,UAAU2/D,mBAAqB,SAAU39C,EAAQ0tB,GACpD,IAAI5oC,EAAQtE,KACZ,OAAOtS,EACFD,QAAQ+xB,GACR7xB,MAAK,SAAUsmC,GAChB,MAAiB,iBAANA,EACA,CAAEwG,SAAUxG,GAED,mBAANA,EACLA,EAAEiZ,GAENjZ,CACX,IAIKtmC,MAAK,SAAUsmC,GAAK,MAAoB,iBAANA,EAAiB,CAAEwG,SAAUxG,GAAMA,CAAG,IACxEtmC,MAAK,SAAUsmC,GAMhB,OALAA,EAAE0+B,MAAQzlB,EAAYwB,OAAO3xB,KAC7B+/C,EAAoB7oC,GACfA,EAAE6jC,WACH7jC,EAAE6jC,SAAWxzD,EAAMq2D,eAAe1mC,IAE/BA,CACX,GACJ,EACOonC,CACX,CA/d2B,GAievBmC,EAAkB,SAAU9xB,EAAQwB,GACpC,MAAO,IAAMxB,EAAO8tB,SAAW,KAAOtsB,EAAYqqB,cAAgB,GACtE,EAEIuF,EAAsB,SAAUt9C,GAChC,GAAsB,iBAAXA,EACP,MAAM,IAAIxU,MAAM,wBAEpB,GAA4B,iBAAjBwU,EAAOmzC,MAAoB,CAClC,IAAI1nB,EAASzrB,EAAOp2B,MAAQ,YAC5B,MAAM,IAAI4hB,MAAM,6BAA+BigC,EAAS,0CAC5D,CACA,KAAM,aAAczrB,GAAUA,EAAOib,UAAYjb,EAAOu9C,oBAAsBv9C,EAAO44C,WACjF,MAAM,IAAIptD,MAAM,6BAA+BwU,EAAOmzC,MAAQ,0FAEtE,EAEIoL,EAA6B,SAAU7wB,EAAaixB,EAAWp8D,GAC/D,OAAOrU,EACFD,QAAQ0wE,EAAUngE,KAAK+D,EAASmrC,IAChCv/C,MAAK,WAQN,MAPM,cAAeu/C,EAAY1tB,SAC7B0tB,EAAY1tB,OAAO44C,UAAY,CAC3B,QAAW,CACP39B,SAAUyS,EAAY1tB,OAAOib,YAIlCyS,CACX,GACJ,EA0BIkxB,EAA0B,SAAUvtE,EAAMwtE,GAC1C,OAAO,SAAUt3B,GAAU,OAAOr5C,EAC7BD,QAAQ,CACT4wE,OAAQA,EACRt3B,OAAQA,EACRxM,UAAsB,cAAX8jC,GACX,CACR,EAKIC,EAA0B,WAC1B,SAASA,IAKLt+D,KAAKu+D,MAAQ,EACjB,CAmCA,OA7BAD,EAAS9gE,UAAU49D,QAAU,SAAUjmC,GACnC,IAAIqpC,EACJ,GAAoB,mBAATrpC,EACPqpC,EAAMrpC,MAEL,IAA6B,mBAAlBA,EAAKspC,SAAyB,CAI1C,IADA,IAAIF,EAAQppC,EAAKspC,WACRnnE,EAAI,EAAG8yC,EAAIm0B,EAAMp0E,OAAQmN,EAAI8yC,EAAG9yC,IACrC0I,KAAKo7D,QAAQmD,EAAMjnE,IAEvB,OAAO0I,IACX,CAEIw+D,EAAMrpC,EAAKqpC,IAAI9yD,KAAKypB,EACxB,CAEA,OADAn1B,KAAKu+D,MAAM30E,KAAK40E,GACTx+D,IACX,EAMAs+D,EAAS9gE,UAAUghE,IAAM,SAAUtxB,GAC/B,IAAIwxB,EA1EO,SAAUxxB,EAAaqxB,GACtC,IAAIlxE,GAAS,EACTwD,EAAO,WAEP,OADAxD,EACYkxE,EAAMp0E,QAUd,OAAO0G,EAAK8tE,WATZ,IAAIC,EAAcL,EAAMlxE,GACxB,IACI,OAAOuxE,EAAY1xB,EAAar8C,EACpC,CACA,MAAOsiC,GACH,OAAOtiC,EAAK2pC,OAAOrH,EACvB,CAKR,EAIA,OAHAtiC,EAAK8tE,SAAWP,EAAwBvtE,EAAM,aAC9CA,EAAKy1C,OAAS83B,EAAwBvtE,EAAM,YAC5CA,EAAK2pC,OAAS4jC,EAAwBvtE,EAAM,YACrCA,CACX,CAqDqBguE,CAAa3xB,EAAaltC,KAAKu+D,OAC5C,OAAOG,GACX,EACOJ,CACX,CA3C6B,GAmD7B,SAASQ,EAAoBlhE,GACzB,OAAOA,GAA+B,mBAAjBA,EAAI88C,QAC7B,CAIA,IAAIqkB,EAA0B,WAK1B,SAASA,EAASnhB,EAAK7yD,QACH,IAAZA,IAAsBA,EAAU,CAAC,GACrCiV,KAAK49C,IAAMA,EACX59C,KAAKjV,QAAUK,OAAOC,OAAO,CAAEoyD,SAAS,EAAMptD,SAAS,GAAQtF,GAC/DiV,KAAKg/D,0BAA2B,CACpC,CAkBA,OAZAD,EAASvhE,UAAUyhE,UAAY,SAAUvzB,GACrC1rC,KAAK0rC,OAASA,CAClB,EAMAqzB,EAASvhE,UAAUk9C,SAAW,SAAUwkB,IACbl/D,KAAKjV,QAAQo0E,aAAeD,EAAal/D,KAAK0rC,QAAUwzB,GAC9DxkB,SAAS16C,KAAK49C,IAAK59C,KAAKjV,QAC7C,EACOg0E,CACX,CA7B6B,GAsE7B,SAASK,EAAqBlyB,EAAamyB,GACvC,IAAI7/C,EAAS0tB,EAAY1tB,OACzB,GAAI,aAAcA,EACd,OAAO8/C,EAAkBpyB,GAE7B,IAAIqyB,EAAkBryB,EAAYwpB,oBAC9B8I,EAAyBtyB,EAAYxB,OAAO+uB,iBAChD,GAAI8E,EACA,OAAOE,EAAqBvyB,EAAaqyB,EAAiBC,EAAwBH,GAGtF,IAAIK,EAAgB,CAAC,EACjBC,EAAkBngD,EAAO44C,UAC7B,IAAK,IAAIrB,KAAgB4I,EAAiB,CACtC,IAAInF,EAAiBmF,EAAgB5I,GACL,OAA5ByD,EAAe//B,UAAqBs8B,KAAgByI,IACpDhF,EAAiBgF,EAAuBzI,IAE5C2I,EAAc3I,GAAgB,CAC1B3tE,KAAM2tE,EACNhtE,SAAU,UACVy1B,OAAQg7C,EAEhB,CACA,OAAO9sE,EAAQD,QAAQiyE,EAC3B,EA9DqC,WAMjC,SAASE,EAAgBjN,EAAOjkB,EAAQ3jD,QACrB,IAAX2jD,IAAqBA,EAAS,CAAC,QACnB,IAAZ3jD,IAAsBA,EAAU,CAAC,GACrCiV,KAAK2yD,MAAQA,EACb3yD,KAAK0uC,OAASA,EACd1uC,KAAKjV,QAAUK,OAAOC,OAAO,CAAEoyD,SAAS,EAAMptD,SAAS,GAAQtF,GAC/DiV,KAAKg/D,0BAA2B,CACpC,CAMAY,EAAgBpiE,UAAUyhE,UAAY,SAAUvzB,GAC5C1rC,KAAK0rC,OAASA,CAClB,EAMAk0B,EAAgBpiE,UAAUk9C,SAAW,SAAUwkB,IACpBl/D,KAAKjV,QAAQo0E,aAAeD,EAAal/D,KAAK0rC,QAAUwzB,GAC9DxC,gBAAgB18D,KAAK2yD,MAAO3yD,KAAK0uC,OAAQ1uC,KAAKjV,QACnE,CAEJ,CAhCoC,GAmEpC,IA0VI80E,EA1VAP,EAAoB,SAAUpyB,GAC9B,IAAI1tB,EAAS0tB,EAAY1tB,OACrBksB,EAASwB,EAAYxB,OACzB,OAAOA,EACF+xB,6BAA6Bj+C,EAAOsgD,UACpCnyE,MAAK,SAAUoyE,GAChB,IAAIrxB,EAAS,CAAC,EACVsxB,EAA4B9yB,EAAYwB,OACxCuxB,EAA4BF,EAAoBrxB,OACpD,IAAK,IAAIjiD,KAAOwzE,EAA2B,CAEvC,IAAI/rD,EAAM+rD,EAA0BxzE,GACjB,iBAARynB,GAA+B,MAAXA,EAAI,IAC/BA,EAAMA,EAAI/b,MAAM,MAEL6nE,IACPtxB,EAAOjiD,GAAOuzE,EAA0B9rD,IAI5Cw6B,EAAOjiD,GAAOwzE,EAA0BxzE,EAEhD,CACA,IAAIyzE,EAAmBx0B,EAAOwmB,SAAS6N,EAAoBvgD,OAAQkvB,EAAQxB,EAAYniD,SAEvF,IAAK,IAAI0B,KAAOuzE,EACZE,EAAmBA,EAAiB7vE,QAAQ,IAAM5D,EAAKuzE,EAA0BvzE,IAErF,IAAIukE,EAAc9jB,EAAY8jB,YAI9B,OAHIA,IACAkP,GAAoB,IAAMlP,GAEvBtjE,EAAQD,QAAQ,IAAIsxE,EAASmB,GACxC,GACJ,EAKIT,EAAuB,SAAU5H,EAAoBnB,EAAqB8I,EAAwBH,GAClG,IAAIK,EAAgB,CAAC,EACjBS,EAAuBtI,EAAmBr4C,OAC1C4gD,EAAeC,EAA4B3J,EAAqBmB,GAChE5sE,EAAU,GACVq1E,EAA+B5J,EAAoBZ,qBACnDoC,EAAU,SAAUnB,GACpB,IAAIwJ,EAA0BD,EAA6BvJ,GACvDyJ,EAAwBD,EAAwB1J,UAChD4J,EAAgCN,EAAqB/H,UAGrDsI,EAAqB3J,KAAgB0J,EACnCA,EAA8B1J,GAC9BwJ,EAC8B,OAAhCG,EAAmBjmC,UAAqBs8B,KAAgByI,IACxDkB,EAAqBlB,EAAuBzI,IAEhD,IAAI4J,EAA6BC,EAA4B/I,EAAoB0I,EAAyBG,EAAoBN,EAAcf,GACxIwB,EAAenB,EAAc3I,GAAgB,CAC7C3tE,KAAM2tE,EAENv3C,OAAQkhD,EACRI,cAAeN,EACfO,aAAcR,EAAwB9lC,SACtC1wC,SAAU42E,GAKd,GAAmC,YAA/BA,GAA0DJ,EAAwBtJ,YAAa,CAC/F,IAAIl6C,EAAO86C,EAAmBR,kBAC1B7sB,EAAO+1B,EACNtJ,YACAwG,6BAA6B1gD,EAAM86C,GACnClqE,MAAK,SAAU4oE,GAEhB,OADAsK,EAAarK,2BAA6BD,EACnC6I,EAAqB7I,EAIF,qBAA1BsK,EAAa92E,UACR4D,MAAK,SAAUqzE,GAChB,OAAIA,aAAqBjC,EACdrxE,EAAQ8sC,OAAOwmC,IAE1BzK,EAAiBV,KAAOmL,EAEjB,KACX,GACJ,IACA/1E,EAAQrB,KAAK4gD,EACjB,CACJ,EACA,IAAK,IAAIusB,KAAgBuJ,EACrBpI,EAAQnB,GAEZ,OAAOrpE,EAAQkT,IAAI3V,GAAS0C,MAAK,WAAc,OAAO+xE,CAAe,GACzE,EAKIkB,EAA8B,SAAUK,EAAuBV,EAAyBW,EAE5Fd,EAAcf,GACV,IAAIc,EAAuBc,EAAsBzhD,OAC7C2hD,EAAwBZ,EAAwB1J,UAAU7nC,UAiB9D,OAfIuxC,EAAwB9lC,WAAaymC,EAAkBzmC,SAChC,UAElB,gCAAiC0mC,EACfA,EAAsBP,4BAA4B74D,MAAMo5D,EAAuBF,EAAsB7K,eAEvH+J,EAAqBiB,mBACHjB,EAAqBiB,mBAEvChB,GAAgBf,EACE,mBAGA,WAG/B,EAEIgB,EAA8B,SAAUgB,EAAMxwE,GAC9C,IAAIywE,EAAaD,EAAK3yB,OAClB6yB,EAAa1wE,EAAK69C,OAClB8yB,EAAmB3wE,EAAK2uB,OAAOw2C,eAAiBnlE,EAAKolE,kBAAoB,KAC7E,IAAK,IAAIxpE,KAAO80E,EACZ,GAAI90E,IAAQ+0E,GAGRF,EAAW70E,KAAS80E,EAAW90E,GAC/B,OAAO,EAGf,IAAK,IAAIA,KAAO60E,EACZ,GAAI70E,IAAQ+0E,GAGRF,EAAW70E,KAAS80E,EAAW90E,GAC/B,OAAO,EAGf,IAAKoE,EAAK9F,QAAQ8yE,mBACd,OAAO,EAEX,IAAI4D,EAAkBJ,EAAK3Q,YACvBgR,EAAkB7wE,EAAK6/D,YAC3B,IAAK,IAAIjkE,KAAOi1E,EACZ,GAAID,EAAgBh1E,KAASi1E,EAAgBj1E,GACzC,OAAO,EAGf,IAAK,IAAIA,KAAOg1E,EACZ,GAAIA,EAAgBh1E,KAASi1E,EAAgBj1E,GACzC,OAAO,EAGf,OAAO,CACX,EAMIk1E,EAAyC,WACzC,SAASA,IACT,CAYA,OAXAA,EAAwBnkE,UAAUghE,IAAM,SAAUoD,EAAuB/wE,GACrE,OAAOuuE,EAAqBwC,GACvBj0E,MAAK,SAAUkoE,GAChB,OAAIA,aAAgBkJ,EACTluE,EAAKy1C,OAAOuvB,IAEvB+L,EAAsB/L,KAAOA,EACtBhlE,IACX,IACKgrC,MAAMhrC,EAAKy1C,OACpB,EACOq7B,CACX,CAf4C,GAoBxCE,EAAe,SAAUC,EAAaF,GACtC,IACIG,EADeC,EAAsBJ,GACTx/E,KAAI,SAAU6/E,GAAe,OAAOC,EAAUJ,EAAaG,EAAYL,sBAAuBK,EAAYpB,aAAe,IACzJ,OAAOnzE,EAAQkT,IAAImhE,EACvB,EAIIC,EAAwB,SAAUJ,EAAuBO,QACpC,IAAjBA,IAA2BA,EAAe,IAC9C,IAAIzC,EAAgBkC,EAAsB/L,KAC1C,IAAK,IAAIkB,KAAgB2I,EAAe,CACpC,IAAImB,EAAenB,EAAc3I,GAC7BsB,EAAsBwI,EAAarK,2BACvC,GAA8B,YAA1BqK,EAAa92E,SACbo4E,EAAav4E,KAAK,CAAEi3E,aAAcA,EAAce,sBAAuBA,IACnEvJ,GACA2J,EAAsB3J,EAAqB8J,OAG9C,CACD,IAAIrL,EAAsB8K,EAAsBjL,uBAAuB,CACnEvtE,KAAM2tE,EACNhtE,SAAU82E,EAAa92E,SACvB0wC,SAAUomC,EAAaE,aACvBlK,UAAWgK,EAAaC,gBAExBzI,IACAvB,EAAoBN,2BAA6B6B,EACjD2J,EAAsB3J,EAAqB8J,GAEnD,CACJ,CACA,OAAOA,CACX,EAIID,EAAY,SAAUJ,EAAaF,EAAuBf,GAC1D,IAAIuB,EAAavB,EAAarhD,OAC1Bib,EAAW2nC,EAAaA,EAAW3nC,SAAW,KAClD,OAAO4nC,EAAcP,EAAaF,EAAuBQ,GACpDz0E,MAAK,SAAUkpE,GAChB,IAAIC,EAAsB8K,EAAsBjL,uBAAuB,CACnEvtE,KAAMy3E,EAAaz3E,KACnBW,SAAU82E,EAAa92E,SACvB0wC,SAAUA,EACVo8B,UAAWA,IAEXI,EAAcJ,EAAUI,YAC5B,GAAIA,EAAa,CACb,IAAIl6C,EAAO6kD,EAAsBvK,kBACjC,OAAOJ,EACFwG,6BAA6B1gD,EAAM6kD,GACnCj0E,MAAK,SAAU4oE,GAEhB,OADAsK,EAAarK,2BAA6BD,EACnC6I,EAAqB7I,GACvB5oE,MAAK,SAAUqzE,GAChB,OAAIA,aAAqBjC,EACdrxE,EAAQ8sC,OAAOwmC,IAE1BzK,EAAiBV,KAAOmL,EACxBlK,EAAoBN,2BAA6BD,EAC1CsL,EAAaC,EAAavL,GACrC,GACJ,GACJ,CAGJ,GACJ,EAKI8L,EAAgB,SAAUP,EAAaF,EAAuBpiD,GAC9D,IAAIksB,EAASk2B,EAAsBl2B,OAC/B0qB,EAAgBwL,EAAsBxL,cAC1C,OAAO1oE,EAAQD,UACVE,MAAK,WAAc,OAAOm0E,EAAYI,UAAUx2B,EAAQlsB,EAAQoiD,EAAwB,IACxFj0E,MAKL,SAAUkpE,GACN,IAAI7nC,EAAY6nC,EAAU7nC,UAAWgW,EAAiB6xB,EAAU7xB,eAGhE,GAFA6xB,EAAUnrB,OAASA,EACnBmrB,EAAUr3C,OAASA,EACf,oBAAqBwP,EAAW,CAChC,IAAIszC,EAAgBt9B,EAAeu9B,iBAEnC,OADA1L,EAAUI,YAAcqL,EACjBA,EACFtoC,WAAU,SAAU/F,GAAK,OAAOjF,EAAUwzC,gBAAgBvuC,EAAGquC,EAAelM,EAAc,GAAIA,EAAc,GAAIA,EAAc,GAAK,IACnIzoE,MAAK,WAAc,OAAOkpE,CAAW,GAC9C,CACA,OAAOA,CACX,GACJ,EAMI4L,EAA6B,WAC7B,SAASA,IACT,CASA,OAHAA,EAAYjlE,UAAU0kE,UAAY,SAAUx2B,EAAQlsB,EAAQoiD,GACxD,MAAM,IAAI52D,MAAM,mFACpB,EACOy3D,CACX,CAZgC,GAiB5BC,EAA+B,WAC/B,SAASA,EAAcZ,GACnB9hE,KAAK8hE,YAAcA,CACvB,CAUA,OARAY,EAAcz2C,OAAS,WAAc,MAAO,CAACw2C,EAAc,EAI3DC,EAAcllE,UAAUghE,IAAM,SAAUoD,EAAuB/wE,GAC3D,OAAOgxE,EAAa7hE,KAAK8hE,YAAaF,GACjCj0E,KAAKkD,EAAMA,EAAKy1C,OACzB,EACOo8B,CACX,CAdkC,GAmB9BC,EAAmC,WACnC,SAASA,IACT,CASA,OARAA,EAAkBnlE,UAAUghE,IAAM,SAAUoD,EAAuB/wE,GAC/D,OAAO+wE,EACFjK,gBAAiC,GACjChqE,MAAK,WAEN,OADAi0E,EAAsBnJ,eACf5nE,GACX,GACJ,EACO8xE,CACX,CAZsC,IAmBtC,SAAW9C,GAIPA,EAAqC,SAAI,YAIzCA,EAA4C,gBAAI,mBAIhDA,EAAoC,QAAI,SAC3C,CAbD,CAaGA,IAA+BA,EAA6B,CAAC,IAKhE,IAspBI+C,EAaAC,EAcAC,EAjrBA1B,GAEiB,mBAFjBA,GAGS,UAQT2B,GAAuB,SAAUnB,EAAuBvxC,EAAcx/B,EAAMmyE,GAC5E,IAAInN,EAAO+L,EAAsB/L,KAC7BoN,EAAQC,GAAkBrN,EAAMxlC,GAChC/4B,EAAI2rE,EAAM94E,OACd,SAASg5E,EAAQjvD,GACb,OAAI8uD,GAAgBI,GAAelvD,GACxBmvD,IAEJxyE,EAAKy1C,OAAOpyB,EACvB,CACA,SAASmvD,IACL,GAAI/rE,IACA,IACI,IACItO,EADYi6E,EAAM3rE,GACC+4B,GAAcuxC,GACrC,OAAO0B,GAAiBt6E,EAAQm6E,EAAStyE,EAAKy1C,OAClD,CACA,MAAO58B,GACH,OAAO7Y,EAAKy1C,OAAO58B,EACvB,CAGJ,OADAk4D,EAAsBl2B,OAAOqwB,iBAAkB,EACxClrE,GACX,CACA,OAAOwyE,GACX,EAKIH,GAAoB,SAAUrN,EAAMxlC,EAAc3pC,GAElD,IAAK,IAAIqwE,UADI,IAATrwE,IAAmBA,EAAO,IACLmvE,EAAM,CAC3B,IAAIgL,EAAehL,EAAKkB,GACpB+J,EAAgBD,EAAaC,cACjC,IAAKD,EAAa92E,WAAaq3E,IAAsCP,EAAa92E,WAAaq3E,KACxFN,EAAe,CAClB,IAAI9xC,EAAY8xC,EAAc9xC,UAC1BqB,KAAgBrB,GAChBtoC,EAAKkD,KAAKolC,EAElB,CACI6xC,EAAa92E,WAAaq3E,IAA8BN,EACxDyC,GAAyBzC,EAAezwC,EAAc3pC,GAEjDm6E,EAAarK,4BAClB0M,GAAkBrC,EAAarK,2BAA2BX,KAAMxlC,EAAc3pC,EAEtF,CACA,OAAOA,CACX,EAII68E,GAA2B,SAAU1M,EAAWxmC,EAAc3pC,GAC9D,IAAIuwE,EAAcJ,EAAUI,YAC5B,GAAIA,GAAeA,EAAYY,mBAAoB,CAC/C,IAAI/B,EAAuBmB,EAAYY,mBAAmB/B,qBAC1D,IAAK,IAAIiB,KAAgBjB,EAAsB,CAC3C,IACIgL,EADsBhL,EAAqBiB,GACPF,UACpC2M,EAAgB1C,EAAc9xC,UAC9BqB,KAAgBmzC,GAChB98E,EAAKkD,KAAK45E,GAEdD,GAAyBzC,EAAezwC,EAAc3pC,EAC1D,CACJ,CACJ,EAII+8E,GAAqB,SAAU7B,EAAuBvxC,EAAcx/B,EAAMmyE,GAC1E,IAAIC,EAAQS,GAAgB9B,EAAuBvxC,GAC/ClmC,EAAS84E,EAAM94E,OACfmN,GAAK,EAsBT,OAfA,SAAS+rE,IACL,IAAIhoC,EAEJ,KADA/jC,EACQnN,EACJ,IACI,IAAIw5E,EAAYV,EAAM3rE,GAClBtO,GAAUqyC,EAAKsoC,EAAU30C,WAAWqB,GAActoB,MAAMszB,EAAIsoC,EAAUvN,eAC1E,OAAOkN,GAAiBt6E,GAAQ,SAAUkrB,GAAO,OAb7D,SAAiBA,EAAKw3B,GAClB,OAAIs3B,GAAgBI,GAAelvD,EAAKw3B,GAC7B23B,IAEJxyE,EAAKy1C,OAAOpyB,EACvB,CAQoEivD,CAAQjvD,EAAKyvD,EAAUj4B,OAAS,GAAG76C,EAAKy1C,OACpG,CACA,MAAO58B,GACH,OAAO7Y,EAAKy1C,OAAO58B,EACvB,CAEJ,OAAO7Y,GACX,CACOwyE,EACX,EAKIK,GAAkB,SAAU9B,EAAuBvxC,EAAc3pC,EAAMglD,QAC1D,IAAThlD,IAAmBA,EAAO,IAC9B,IAAImvE,EAAO+L,EAAsB/L,KAsBjC,OArBAzqE,OACKoB,KAAKqpE,GACLtsE,SAAQ,SAAUwtE,GACnB,IAAI8J,EAAehL,EAAKkB,GACpBD,EAAsB8K,EAAsB9L,qBAAqBiB,GACjE6M,EAAoB9M,EAAoBD,UACxC7nC,EAAY40C,EAAkB50C,UAC7B6xC,EAAa92E,WAAaq3E,IACxBP,EAAa92E,WAAaq3E,MAC1B/wC,KAAgBrB,IACnBtoC,EAAKkD,KAAK,CACNolC,UAAWA,EACXonC,cAAeU,EAAoBV,cACnC1qB,OAAQA,IAGhB,IAAI2sB,EAAsBwI,EAAarK,2BACnC6B,GACAqL,GAAgBrL,EAAqBhoC,EAAc3pC,EAAMk9E,EAAkB3M,aAAevrB,EAElG,IACOhlD,CACX,EACI08E,GAAiB,SAAUr8B,EAAQ2E,GACnC,QAAI3E,aAAkB/7B,SAGlB8zD,EAAoB/3B,IACY,mBAArBA,EAAOk4B,WACdl4B,EAAOk4B,UAAUvzB,KAEZ3E,EAAOi4B,+BAELpxE,IAAXm5C,GAGGA,EACX,EAKI88B,GAAkC,WAClC,SAASA,EAAiBC,GACtB9jE,KAAK+jE,aAAc,EACnB/jE,KAAKgkE,cAAgBF,EAAiB9jE,MACjCA,KAAK+jE,aACN/jE,KAAKa,aAEb,CAcA,OAbAzV,OAAOgS,eAAeymE,EAAiBrmE,UAAW,aAAc,CAC5D7T,IAAK,WACD,OAAOqW,KAAK+jE,WAChB,EACA9mE,YAAY,EACZC,cAAc,IAElB2mE,EAAiBrmE,UAAUqD,YAAc,WACjCb,KAAK+jE,aAAe/jE,KAAKgkE,eACzBhkE,KAAKgkE,cAAcnjE,cAEvBb,KAAK+jE,aAAc,CACvB,EACOF,CACX,CAtBqC,GA6BjCP,GAAmB,SAAU1lE,EAAKnQ,EAAS+sC,GAE3C,GAAI58B,GAA2B,mBAAbA,EAAIjQ,KAClB,OAAOD,EAAQD,QAAQmQ,GAAKjQ,KAAKF,GAASouC,MAAMrB,GAGpD,GAAI58B,GAAgC,mBAAlBA,EAAIsC,UAA0B,CAC5C,IAAI+jE,EAAQrmE,EACZ,OAAO,IAAIimE,IAAiB,SAAUv7B,GAAO,OAAO27B,EAAM/jE,UAAU,CAChErP,KAAM,WACEy3C,EAAI47B,aACJ57B,EAAIznC,cACJpT,EAAQmQ,GAEhB,EACA8L,MAAO,SAAUA,GACT4+B,EAAI47B,aACJ57B,EAAIznC,cACJ25B,EAAO9wB,GAEf,EACAi1D,SAAU,WACFr2B,EAAI47B,aACJ57B,EAAIznC,cACJpT,EAAQmQ,GAEhB,GACA,GACR,CAEA,IACI,OAAOnQ,EAAQmQ,EACnB,CACA,MAAO8L,GACH,OAAO8wB,EAAO9wB,EAClB,CACJ,EAKIy6D,GAA2C,WAC3C,SAASA,IACT,CAIA,OAHAA,EAA0B3mE,UAAUghE,IAAM,SAAUoD,EAAuB/wE,GACvE,OAAOkyE,GAAqBnB,EAAuB,gBAAiB/wE,EACxE,EACOszE,CACX,CAP8C,GAW1CC,GAAqC,WACrC,SAASA,IACT,CAIA,OAHAA,EAAoB5mE,UAAUghE,IAAM,SAAUoD,EAAuB/wE,GACjE,OAAO4yE,GAAmB7B,EAAuB,cAAe/wE,EACpE,EACOuzE,CACX,CAPwC,GAWpCC,GAAwC,WACxC,SAASA,IACT,CAIA,OAHAA,EAAuB7mE,UAAUghE,IAAM,SAAUoD,EAAuB/wE,GACpE,OAAOkyE,GAAqBnB,EAAuB,aAAc/wE,GAAM,EAC3E,EACOwzE,CACX,CAP2C,GAWvCC,GAAkC,WAClC,SAASA,IACT,CAIA,OAHAA,EAAiB9mE,UAAUghE,IAAM,SAAUoD,EAAuB/wE,GAC9D,OAAO4yE,GAAmB7B,EAAuB,WAAY/wE,GAAM,EACvE,EACOyzE,CACX,CAPqC,GAYjCC,GAA8B,WAC9B,SAASA,EAAa52C,EAAWvkC,EAAM4zC,GACnCh9B,KAAKu+D,MAAQ,GACbv+D,KAAK2tB,UAAYA,EACjB3tB,KAAKwkE,SAAWp7E,EAChB4W,KAAKykE,UAAYznC,CACrB,CAKA,OAJAunC,EAAa/mE,UAAUihE,SAAW,WAC9B,IAAIn6D,EAAQtE,KACZ,OAAOA,KAAKu+D,MAAMn8E,KAAI,SAAUqB,GAAK,OAAO6gB,EAAMqpB,UAAUhkC,IAAIlG,EAAI,GACxE,EACO8gF,CACX,CAZiC,GAgB7BG,GAAkC,WAClC,SAASA,EAAiB/2C,GACtB3tB,KAAK2tB,UAAYA,EACjB3tB,KAAKu+D,MAAQ,CACToD,EACAwC,GACAzB,EACAiC,GAAmBh3C,EAAW,aAC9By2C,GACAO,GAAmBh3C,EAAW,cAAiC,aAE/D02C,GACAC,GACAK,GAAmBh3C,EAAW,YAA6B,aAC3Dg1C,EACAgC,GAAmBh3C,EAAW,aAA+B,gBAErE,CAoEA,OAlEA+2C,EAAiBz4C,OAAS,WAAc,MAAO,CAAC,KAAY,EAI5Dy4C,EAAiBlnE,UAAUonE,eAAiB,SAAUC,GAClD,IAAIvgE,EAAQtE,UACiB,IAAzB6kE,IAAmCA,GAAuB,GAC9D,IAAIC,EAAW,IAAIxG,EAMnB,OALAt+D,KAAKu+D,MAAMh1E,SAAQ,SAAU4rC,IACrB0vC,GAAwB1vC,IAASgvC,KACjCW,EAAS1J,QAAQ92D,EAAMqpB,UAAUhkC,IAAIwrC,GAE7C,IACO2vC,CACX,EAEAJ,EAAiBlnE,UAAUunE,UAAY,SAAU37E,GAE7C,OAAO4W,KAAKu+D,MAAMrmE,MAAK,SAAUzU,GAAK,OAAOA,EAAE+gF,WAAap7E,GAAQ3F,EAAEghF,YAAcr7E,CAAM,GAC9F,EAIAs7E,EAAiBlnE,UAAU49D,QAAU,SAAUhyE,EAAM+rC,GACjD,IAAI6vC,EAAQhlE,KAAK+kE,UAAU37E,GAC3B,IAAI47E,EAQA,MAAM,IAAIh6D,MAAM,+BAAiC5hB,EAAO,KAPxD,IAAI67E,EAAYD,EAAMzG,MAEjB0G,EAAUrvC,SAAST,IACpB8vC,EAAUr7E,KAAKurC,EAM3B,EAIAuvC,EAAiBlnE,UAAU0nE,WAAa,SAAU97E,EAAM+rC,GACpD,IAAIgwC,EAAOnlE,KAAK+kE,UAAU37E,GAC1B,GAAI+7E,EAAM,CACN,IAAIF,EAAYE,EAAK5G,MACrB0G,EAAUtjE,OAAOsjE,EAAU1+E,QAAQ4uC,GAAO,EAC9C,CACJ,EAKAuvC,EAAiBlnE,UAAU4nE,YAAc,SAAUh8E,QAClC,IAATA,IAAmBA,EAAO,IAC9B,IAAI+7E,EAAOnlE,KAAK+kE,UAAU37E,GACtB+7E,IACAA,EAAK5G,MAAQ,GAErB,EAIAmG,EAAiBlnE,UAAUpQ,MAAQ,WAC/B4S,KAAKolE,YAAY,aACjBplE,KAAKolE,YAAY,eACjBplE,KAAKolE,YAAY,aACjBplE,KAAKolE,YAAY,aACrB,EACOV,CACX,CAtFqC,GAwFjCC,GAAqB,SAAUh3C,EAAWvkC,EAAM4zC,GAChD,OAAO,IAAIunC,GAAa52C,EAAWvkC,EAAM4zC,EAC7C,EAEIpc,IAAS,IAAA6vB,WAAU,cAInB40B,GAA2B,SAAU/qB,GAErC,SAAS+qB,EAAU13C,EAAWge,EAASwvB,EAAkBr7C,GACrD,IAAIxb,EAAQg2C,EAAOt8C,KAAKgC,KAAM2tB,EAAWge,IAAY3rC,KAGrD,OAFAsE,EAAM62D,iBAAmBA,EACzB72D,EAAMwb,OAASA,EACRxb,CACX,CAkMA,OA/mEJ,SAAmBosB,EAAG15B,GAElB,SAASkjD,IAAOl6C,KAAKnC,YAAc6yB,CAAG,CADtCspB,EAActpB,EAAG15B,GAEjB05B,EAAElzB,UAAkB,OAANxG,EAAa5L,OAAOkT,OAAOtH,IAAMkjD,EAAG18C,UAAYxG,EAAEwG,UAAW,IAAI08C,EACnF,CAm6DID,CAAUorB,EAAW/qB,GAQrB+qB,EAAUp5C,OAAS,WAAc,MAAO,CAAC,KAAW,IAASy4C,GAAkB,IAAkB,EAKjGW,EAAU7nE,UAAUpQ,MAAQ,WACxBktD,EAAO98C,UAAUpQ,MAAM4Q,KAAKgC,MAC5BA,KAAKslE,oBAAsB,GACtBtlE,KAAKulE,OAINvlE,KAAKulE,OAAOp7E,OAAS,EAHrB6V,KAAKulE,OAAS,EAKtB,EAMAF,EAAU7nE,UAAUgoE,QAAU,SAAU5nB,GACpC,IAAIt5C,EAAQtE,KACZ,OAAOA,KACFy9D,6BAA6B7f,GAC7BjwD,MAAK,SAAUu/C,GAAe,OAAO5oC,EAAMmhE,kBAAkBv4B,EAAc,IAC3ErR,OAAM,SAAUnyB,GACjBkX,GAAOlX,MAAMA,GACbg8D,GAAwBphE,EAC5B,GACJ,EAOA+gE,EAAU7nE,UAAU8+D,iBAAmB,SAAUnE,EAAU/uE,GACvD,IAAIkb,EAAQtE,KAER2lE,EAAYxN,EAMhB,GALA7d,EAAO98C,UAAU8+D,iBAAiBt+D,KAAKgC,KAAM2lE,EAAWv8E,GAKnD4W,KAAK+3D,SAgCN/3D,KAAK4lE,0BAhCW,CAChB,IAAIC,EAAc7lE,KAAK8lE,eAAeH,GACtC,GAAI,oBAAqBE,GAIrB,IAAK7lE,KAAKs7D,aAAc,CAGpB,IAAIyK,EAA6B/lE,KAAKq8D,0BAEtC,OADAr8D,KAAKq8D,0BAA4B,WAAc,EACxCr8D,KACFg6B,WAAU,SAAUxa,GACrB,OAAO9xB,EACFD,QAAQo4E,EAAYrD,gBAAgBhjD,EAAQlb,IAG5C3W,MAAK,WAAc,OAAO6xB,CAAQ,GAC3C,IACK7xB,MAAK,WACN2W,EAAM81C,WACN2rB,GACJ,GACJ,OAGA/lE,KAAKo6C,UAEb,CAMA,OAAO1sD,EAAQD,SACnB,EAMA43E,EAAU7nE,UAAU48C,SAAW,SAAUrvD,GACjCiV,KAAK+3D,WAGT/3D,KAAK+3D,UAAW,EAGhB/3D,KAAKjV,QAAUK,OAAOC,OAAO,CAAEqzD,aAAc1+C,KAAKwlE,QAAQ95D,KAAK1L,OAASA,KAAKjV,QAASA,GACtFiV,KAAK2rC,QAAQyO,SAASp6C,KAAKjV,SAC3BiV,KAAK4lE,sBACT,EAIAP,EAAU7nE,UAAU2vC,WAAa,WAC7BntC,KAAK+3D,UAAW,EAChB/3D,KAAK2rC,QAAQwB,YACjB,EAEAk4B,EAAU7nE,UAAUioE,kBAAoB,SAAUv4B,GAC9C,IAAI5oC,EAAQtE,KACZ,OAAO,IAAItS,GAAQ,SAAUD,GACzBy/C,EAAYz/C,QAAUA,EACtB6W,EAAMihE,OAAOp7D,QAAQ+iC,GACrB5oC,EAAMshE,qBACV,GACJ,EAEAP,EAAU7nE,UAAUooE,oBAAsB,SAAUI,GAChD,IAAI1hE,EAAQtE,KAEZ,YADyB,IAArBgmE,IAA+BA,EAAmB,GAC/Ct4E,EAAQD,UAAUE,MAAK,WAC1B,IAAI2W,EAAMi3D,cAAiByK,EAA3B,CAIA,IAAI94B,EAAc5oC,EAAMihE,OAAOr7D,QAE/B,GADA5F,EAAMihE,OAAOp7E,OAAS,EACjB+iD,EAAL,CAIA5oC,EAAMi3D,cAAe,EACrB,IAAI0K,EAAa3hE,EAAMqnC,QAAQsS,SAAS,qBACpCioB,EAAoB5hE,EAAM6hE,yBACzBF,GAAeC,EAIVD,EAGAC,EAGDA,EAAoBD,EACzB3hE,EAAMu3D,qBAAsB,EAEvBqK,EAAoBD,IACzB3hE,EAAMw3D,kBAAmB,GANzBx3D,EAAMs3D,qBAAsB,EAH5Bt3D,EAAMq3D,iBAAkB,GAJxBr3D,EAAMo3D,mBAAoB,EAC1Bp3D,EAAMq3D,iBAAkB,GAcvBsK,IACDA,EAAaxd,KAAKC,MAClBpkD,EAAMqnC,QAAQqS,SAAS,oBAAqBioB,IAEhD3hE,EAAM6hE,yBAA2BF,EACjC/4B,EAAYwpB,oBAAsBpyD,EAAMuzD,mBACxC,IAAIyN,EAAsBhhE,EAAMghE,oBAChC,GAAKU,EAGA,IAAIA,IAAqBV,EAAsB,EAGhD,OAFA1kD,GAAOlX,MAAMs8D,EAAmB,EAAI,qGACpCN,GAAwBphE,GACjBA,EAAMshE,oBAAoBI,EAAmB,GAEnD,GAAIA,EAAmBV,EACxB,MAAM,IAAIt6D,MAAM,mDACpB,MATI1G,EAAMwb,OAAOqoB,QAAQ,+BAAiD,CAAE+E,YAAaA,IAWzF,OADe5oC,EAAM62D,iBAAiByJ,gBAAgBtgE,EAAMy3D,iBAEvDyC,IAAItxB,GACJv/C,MAAK,SAAU3E,GAAU,OAAOo9E,GAAcl5B,EAAalkD,EAAQg9E,EAAkB1hE,EAAQ,IAC7Fu3B,OAAM,SAAUnyB,GACjB,MAAO,CAAEq9B,OAAQr9B,aAAiBsB,MAAQtB,EAAQ,IAAIsB,MAAMtB,GAChE,IACK/b,MAAK,SAAU3E,GAAU,OAAOq9E,GAAmBn5B,EAAalkD,IAAUg9E,EAAkB1hE,EAAQ,GA7CzG,CANA,CAoDJ,GACJ,EAEA+gE,EAAU7nE,UAAUsoE,eAAiB,SAAU3N,GAC3C,GAAIn4D,KAAK2tB,UAAUqB,UACf,OAAOhvB,KAAK2tB,UAAUqB,UAE1B,GAAImpC,EAASxqC,UAET,IADA,IAAIA,EAAYwqC,EAASxqC,UAClBA,GAAW,CACd,GAAIA,EAAUqB,UAEV,OADAhvB,KAAK2tB,UAAUqB,UAAYrB,EAAUqB,UAC9BrB,EAAUqB,UAErBrB,EAAYA,EAAUl9B,MAC1B,CAGR,EACO40E,CACX,CA1M8B,CA0M5BhK,GACE+K,GAAgB,SAAUl5B,EAAalkD,EAAQg9E,EAAkBt6B,GAC3D1iD,GAAU,cAAeA,GAAU,WAAYA,KACjDA,EAASA,GAAU,CAAC,GACb+9C,OAAS,IAAI/7B,MAAM,oEAAsErB,KAAKC,UAAU5gB,GAAU,eAE7H,IAAIs9E,EAAc,KACdC,EAA0B,KAa9B,OAZIzH,EAAoB91E,EAAO+9C,QAC3Bw/B,EAA0Bv9E,EAAO+9C,OAAO2T,SAAShP,IAGjD46B,EAAct9E,EACTA,EAAOuxC,YACJvxC,EAAO+9C,kBAAkB/7B,OACzB4V,GAAOlX,MAAM1gB,EAAO+9C,OAAO7lD,YAE/BwkF,GAAwBh6B,KAGzBh+C,EAAQD,QAAQ84E,GAClB54E,MAAK,SAAUkR,GAAK,OAAO6sC,EAAOk6B,oBAAoBI,EAAmB,EAAI,IAC7Er4E,MAAK,SAAU64E,GAAe,OAAOF,GAAeE,GAAex9E,CAAQ,GACpF,EACIq9E,GAAqB,SAAUn5B,EAAalkD,EAAQy9E,EAAoB/6B,GACxEwB,EAAYz/C,QAAQzE,GACpB,IAAI6iD,EAAkBH,EAAO5rB,OACzB4mD,EAAY,CAAEx5B,YAAaA,EAAalkD,OAAQA,GACpD,GAAKy9E,EA0BD56B,EAAgB1D,QAAQ,mCAAwDu+B,OA1B3D,CACrBh7B,EAAO6vB,cAAe,EACtB7vB,EAAO8vB,sBAAuB,EAC9B9vB,EAAO+vB,0BAA2B,EAClC/vB,EAAOgwB,mBAAoB,EAC3BhwB,EAAOiwB,iBAAkB,EACzBjwB,EAAOkwB,qBAAsB,EAC7BlwB,EAAOmwB,qBAAsB,EAC7BnwB,EAAOowB,kBAAmB,EAC1BpwB,EAAOqwB,iBAAkB,EACzB,IAAIr+C,OAAY,EAChB,GAAI10B,EAAO+9C,kBAAkB/7B,MACzB0S,EAAY,+BAEX,GAAK10B,EAAOuxC,UAGZ,CACD,IAAIy2B,EAAc9jB,EAAY8jB,YAAe,IAAM9jB,EAAY8jB,YAAe,GAC9EtlB,EAAOC,QAAQg7B,iBAAmBz5B,EAAY2P,SAAWmU,EACzDtzC,EAAY,2BAChB,MANIA,EAAY,6BAOhBmuB,EAAgB1D,QAAQzqB,EAAWgpD,GACnC76B,EAAgB1D,QAAQ,6BAA6Cu+B,EACzE,CAIA,OAAO19E,CACX,EACI08E,GAA0B,SAAUh6B,GACpC,IAAIi7B,EAAmBj7B,EAAOC,QAAQg7B,iBAClCA,EACAj7B,EAAOgP,SAASisB,EAAkB,CAAElpB,SAAS,EAAOptD,SAAS,IAExDq7C,EAAO0uB,cACZ1uB,EAAOgP,SAAShP,EAAO0uB,cAAe,CAAE3c,SAAS,EAAMptD,SAAS,IAGhEuwB,GAAOlX,MAAM,yFAErB,GAMA,SAAWk5D,GACPA,EAA0B,UAAI,YAC9BA,EAAyB,SAAI,WAC7BA,EAAyB,SAAI,WAC7BA,EAAwB,QAAI,SAC/B,CALD,CAKGA,IAAmBA,EAAiB,CAAC,IAQxC,SAAWC,GACPA,EAAwB,WAAI,+BAC5BA,EAAmB,MAAI,0BACvBA,EAAsB,SAAI,6BAC1BA,EAAsB,SAAI,6BAC1BA,EAAqB,QAAI,4BACzBA,EAA2B,cAAI,kCAClC,CAPD,CAOGA,IAAgBA,EAAc,CAAC,IAOlC,SAAWC,GAKPA,EAA4B,UAAI,YAShCA,EAA8B,YAAI,cAOlCA,EAA4B,UAAI,YAIhCA,EAA6B,WAAI,YACpC,CA1BD,CA0BGA,IAAqBA,EAAmB,CAAC,gEC7wExCrlE,EAA4B,mBAAXC,QAAoD,iBAApBA,OAAOC,SAAwB,SAAUC,GAAO,cAAcA,CAAK,EAAI,SAAUA,GAAO,OAAOA,GAAyB,mBAAXF,QAAyBE,EAAIC,cAAgBH,QAAUE,IAAQF,OAAOF,UAAY,gBAAkBI,CAAK,EAsB3Q,SAASgpE,EAA0BtlE,GACjC,OAAO,WACL,IAAIulE,EAAgBtmD,WAAWumD,EAAkB,GAE7CC,EAAiBC,YAAYF,EAAkB,IACnD,SAASA,IACPG,aAAaJ,GACbK,cAAcH,GACdzlE,GACF,CACF,CACF,CAgBO,IAAI6lE,EAAY,WACrB,SAASA,IACP,IA1C0C7lE,EACxCxB,EACAoU,EACAlzB,EACA+wB,EAsCEzN,EAAQtE,KAIZA,KAAKonE,UAAW,EAChBpnE,KAAKqnE,YAAa,EAElBrnE,KAAKsnE,eAAiB,GACtBtnE,KAAKunE,uBAAyB,KAC9BvnE,KAAKmI,UAAY,GAEb,sBACFnI,KAAKwnE,4BAtDmClmE,EAsD+B,WACrE,OAAOgD,EAAMmjE,qBACf,EAvDA3nE,EAAW,4BAA2BwB,GACtC4S,EAAM,IACNlzB,EAAO,oBAAmB,MAC1B+wB,EAAS3mB,OAAOkT,OAAO,OACpBvH,EAAI,IACXgb,EAAO/a,EAAI,IACX8I,EAAS0kB,QAAQxjC,EAAM,CAAE2jC,eAAe,IACjC,WACL3jC,EAAKuL,KAAO2nB,EAAMnC,EAAOmC,EAC3B,GAgDIlU,KAAKwnE,2BAA6BZ,GAA0B,WAC1D,OAAOtiE,EAAMmjE,qBACf,IAGFznE,KAAK0nE,sBAAwBd,GAA0B,WACrD,OAAOtiE,EAAMqjE,gBACf,GACF,CA8EA,OA5EAR,EAAU3pE,UAAUoqE,YAAc,SAAqB7mE,EAAO8mE,GAC5D,IAAIx6E,EAAQ,EACRm9C,OAAO,EAEX,IAEE,IADAxqC,KAAKonE,UAAW,EACT/5E,EAAQ0T,EAAM5W,QAQnB,GAPAqgD,EAAOzpC,EAAM1T,GACT2S,KAAKqnE,aACPrnE,KAAKmuD,MAA8B,iBAAf3jB,EAAK2jB,MAAqB3jB,EAAK2jB,WAAQvgE,GAE7D48C,EAAKxsC,SACL3Q,EAEYw6E,EAAU,CACpB,IAAK,IAAIC,EAAO,EAAGC,EAAYhnE,EAAM5W,OAASkD,EAAOy6E,EAAOC,EAAWD,IACrE/mE,EAAM+mE,GAAQ/mE,EAAM+mE,EAAOz6E,GAG7B0T,EAAM5W,QAAUkD,EAChBA,EAAQ,CACV,CAEJ,CAAE,MAAOqc,IAjEb,SAAiBA,EAAO8gC,EAAM68B,GACxBA,GAAc78B,EAAK2jB,OAA2E,iBAAhD,IAAVzkD,EAAwB,YAAcjM,EAAQiM,KAAkC,OAAVA,IAC5GA,EAAMykD,MAAQ6Z,EAAiBt+D,EAAMykD,OAAS3jB,EAAK2jB,OAGjD,YAAa3jB,EACfA,EAAKy9B,QAAQv+D,GAEb6W,YAAW,WACT,MAAM7W,CACR,GAAG,EAEP,CAsDMu+D,CAAQv+D,EAAO8gC,EAAMxqC,KAAKqnE,WAC5B,CAAE,QACArnE,KAAKonE,UAAW,CAClB,CACF,EAEAD,EAAU3pE,UAAUsL,eAAiB,SAAwB0hC,GACvDxqC,KAAKsnE,eAAen9E,OAAS,GAC/B6V,KAAKwnE,6BAGHxnE,KAAKqnE,aACP78B,EAAK2jB,MAAQnuD,KAAKkoE,kBA1GE,uCA6GtBloE,KAAKsnE,eAAe19E,KAAK4gD,EAC3B,EAEA28B,EAAU3pE,UAAUk4C,UAAY,SAAmBlL,GAC7CxqC,KAAKmI,UAAUhe,OAAS,GAC1B6V,KAAK0nE,wBAGH1nE,KAAKqnE,aACP78B,EAAK2jB,MAAQnuD,KAAKkoE,kBAvHH,kCA0HjBloE,KAAKmI,UAAUve,KAAK4gD,EACtB,EAEA28B,EAAU3pE,UAAUmqE,eAAiB,WACnC,IAAI5mE,EAAQf,KAAKmI,UACjBnI,KAAKmI,UAAY,GACjBnI,KAAK4nE,YAAY7mE,EAAOozB,OAAOg0C,UACjC,EAEAhB,EAAU3pE,UAAUiqE,oBAAsB,WACxC,IAAI1mE,EAAQf,KAAKsnE,eACjBtnE,KAAK4nE,YAAY7mE,EAAOf,KAAKunE,wBAC7BxmE,EAAM5W,OAAS,CACjB,EAEAg9E,EAAU3pE,UAAU0qE,kBAAoB,SAA2Bha,GACjE,IAAIC,EAAQD,EA0BhB,SAA0BC,GACxB,OAAOA,EAAM99D,QAAQ,yCAA0C,GACjE,CA5B4B+3E,CAY5B,WACE,IAAI1+D,EAAQ,IAAIsB,MAEhB,GAAItB,EAAMykD,MACR,OAAOzkD,EAAMykD,MAGf,IACE,MAAMzkD,CACR,CAAE,MAAOypB,GACP,OAAOA,EAAEg7B,KACX,CACF,CAxB6Cka,IAMzC,MAJ0B,iBAAfroE,KAAKmuD,QACdA,EAAQ6Z,EAAiB7Z,GAASnuD,KAAKmuD,OAGlCA,CACT,EAEOgZ,CACT,CAzGuB,GA6HvB,SAASa,EAAiB7Z,GACxB,IAAI9gE,EAAQ8gE,EAAMiJ,YAAY,uBAE9B,OAAI/pE,EAAQ,IACVA,EAAQ8gE,EAAMiJ,YAAY,mBACd,IAKd/pE,EAAQ8gE,EAAMiJ,YAAY,KAAM/pE,IAEjB,EANJ8gE,EAMgBA,EAAMx5B,OAAO,EAAGtnC,EAC7C,kHCvKI2sD,EAAgB,SAAStpB,EAAG15B,GAI5B,OAHAgjD,EAAgB5uD,OAAOmT,gBAClB,CAAEC,UAAW,cAAgBnU,OAAS,SAAUqmC,EAAG15B,GAAK05B,EAAElyB,UAAYxH,CAAG,GAC1E,SAAU05B,EAAG15B,GAAK,IAAK,IAAI8kB,KAAK9kB,EAAOA,EAAEzH,eAAeusB,KAAI4U,EAAE5U,GAAK9kB,EAAE8kB,GAAI,EACtEk+B,EAActpB,EAAG15B,EAC5B,EAQA,SAAS8kC,EAAWC,EAAYj1C,EAAQ2F,EAAK+5B,GACzC,IAA2HkK,EAAvHuD,EAAI/pC,UAAUC,OAAQguC,EAAIlE,EAAI,EAAIntC,EAAkB,OAAT0/B,EAAgBA,EAAOp7B,OAAOsoC,yBAAyB5sC,EAAQ2F,GAAO+5B,EACrH,GAAuB,iBAAZlc,SAAoD,mBAArBA,QAAQ0xB,SAAyB7D,EAAI7tB,QAAQ0xB,SAASD,EAAYj1C,EAAQ2F,EAAK+5B,QACpH,IAAK,IAAIlvB,EAAIykC,EAAW5xC,OAAS,EAAGmN,GAAK,EAAGA,KAASo5B,EAAIqL,EAAWzkC,MAAI6gC,GAAKlE,EAAI,EAAIvD,EAAEyH,GAAKlE,EAAI,EAAIvD,EAAE5pC,EAAQ2F,EAAK0rC,GAAKzH,EAAE5pC,EAAQ2F,KAAS0rC,GAChJ,OAAOlE,EAAI,GAAKkE,GAAK/sC,OAAOgS,eAAetW,EAAQ2F,EAAK0rC,GAAIA,CAChE,CAEA,IAAImwC,EAAgB,WAChB,SAASA,EAAal/C,GAClBppB,KAAKzU,SAAWH,OAAOkT,OAAO,MAC9B0B,KAAKuoE,YAAcn9E,OAAOkT,OAAO,MACjC0B,KAAKopB,IAAMA,EACXppB,KAAKwoE,kBAAkB,YAAa,aACpCxoE,KAAKwoE,kBAAkB,kBAAmB,mBAC1CxoE,KAAKwoE,kBAAkB,WAAY,YACnCxoE,KAAKwoE,kBAAkB,cAAe,eACtCxoE,KAAKwoE,kBAAkB,YAAa,aACpCxoE,KAAKwoE,kBAAkB,YAAa,aACpCxoE,KAAKwoE,kBAAkB,aAAc,cACrCxoE,KAAKwoE,kBAAkB,WAAY,YACnCxoE,KAAK4tB,SAAS,QAAS,MAAO,WAC9B5tB,KAAK4tB,SAAS,MAAO,SAAU,UAC/B5tB,KAAK4tB,SAAS,QAAS,YAAa,aACpC5tB,KAAK4tB,SAAS,QAAS,YAAa,aACpC5tB,KAAK4tB,SAAS,QAAS,aAAc,cACrC5tB,KAAK4tB,SAAS,QAAS,cAAe,eACtC5tB,KAAK4tB,SAAS,QAAS,aAAc,cACrC5tB,KAAK4tB,SAAS,QAAS,iBAAkB,kBACzC5tB,KAAK4tB,SAAS,QAAS,aAAc,cACrC5tB,KAAK4tB,SAAS,WAAY,YAAa,aACvC5tB,KAAK4tB,SAAS,KAAM,UAAW,WAC/B5tB,KAAK4tB,SAAS,KAAM,UAAW,WAC/B5tB,KAAK4tB,SAAS,KAAM,UAAW,WAC/B5tB,KAAK4tB,SAAS,KAAM,UAAW,UACnC,CA8BA,OA7BA06C,EAAa9qE,UAAUowB,SAAW,SAAUud,EAAa1pB,EAAephB,GACpE8qC,EAAcA,EAAY1mD,cAC1Bg9B,EAAgBA,EAAch9B,eAChBub,KAAKzU,SAAS4/C,GAAgBnrC,KAAKzU,SAAS4/C,IAAgB//C,OAAOkT,OAAO,OAChFmjB,GAAiBphB,CAC7B,EACAioE,EAAa9qE,UAAUgrE,kBAAoB,SAAU/mD,EAAephB,GAChEohB,EAAgBA,EAAch9B,cAC9Bub,KAAKuoE,YAAY9mD,GAAiBphB,CACtC,EACAioE,EAAa9qE,UAAUpb,IAAM,SAAU+oD,EAAa1pB,GAChD,GAAIzhB,KAAKopB,IAAImB,uBAAuB4gB,EAAa1pB,GAC7C,OAAOA,EAEX0pB,EAAcA,EAAY1mD,cAC1Bg9B,EAAgBA,EAAch9B,cAC9B,IAAI5B,EAAUmd,KAAKzU,SAAS4/C,GAC5B,YAAgBv9C,IAAZ/K,GAAyB4+B,KAAiB5+B,EACnCA,EAAQ4+B,GAEfA,KAAiBzhB,KAAKuoE,YACfvoE,KAAKuoE,YAAY9mD,GAExB,0BAA0B9+B,KAAK8+B,GACxBA,GAEJ,QAAUA,EACrB,EACA6mD,EAAar8C,OAAS,CAAC,MAChBq8C,CACX,CA1DmB,GA4DfG,EAAkC,WAClC,SAASA,EAA+BnoE,EAAiB6rB,EAAgBu8C,EAAOr8C,EAAMnoB,EAAiB5O,GACnG0K,KAAKM,gBAAkBA,EACvBN,KAAKmsB,eAAiBA,EACtBnsB,KAAK0oE,MAAQA,EACb1oE,KAAKqsB,KAAOA,EACZrsB,KAAKkE,gBAAkBA,EACvBlE,KAAK1K,UAAY0K,KAAK2oE,aAAerzE,EACrC0K,KAAKssB,UAAW,CACpB,CAOA,OANAm8C,EAA+BjrE,UAAU+uB,cAAgB,SAAUzlC,GAC/D,OAA0B,IAAtBkZ,KAAK0oE,MAAMv+E,OACJ,IAAIy+E,EAA0B9hF,EAAQkZ,KAAKM,gBAAiBN,KAAK0oE,MAAM,GAAI1oE,KAAKqsB,KAAMrsB,KAAKkE,gBAAiBlE,KAAKmsB,eAAgBnsB,KAAK0oE,MAAM,GAAI1oE,KAAK0oE,MAAM,IAE/J,IAAIG,EAAqB7oE,KAAKM,gBAAiBN,KAAK0oE,MAAO5hF,EAAQkZ,KAAKmsB,eAAgBnsB,KAAKqsB,KAAMrsB,KAAKkE,gBACnH,EACOukE,CACX,CAjBqC,GAkBrC,SAASK,EAAehiF,EAAQuZ,GAC5B,GAAqB,UAAjBA,EACA,YAAqB,sBAChB8oC,KAAK,kIAET,GAAIriD,EAAOiiF,eAAmD,aAAlCjiF,EAAOiiF,cAAcvkF,UAA4C,gBAAjB6b,EAC7E,MAAM,IAAI2K,MAAM,yIAExB,CACA,IAAI69D,EAAwB,WACxB,SAASA,EAAqBvoE,EAAiBooE,EAAO5hF,EAAQqlC,EAAgBE,EAAMnoB,GAChF4kE,EAAehiF,EAAQqlC,GACvBnsB,KAAKM,gBAAkBA,EACvBN,KAAK0oE,MAAQA,EACb1oE,KAAKlZ,OAASA,EACdkZ,KAAKmsB,eAAiBA,EACtBnsB,KAAKgpE,eAAiB1oE,EAAgBsrB,YAAY9kC,EAAQqlC,GAC1DnsB,KAAKqsB,KAAOA,EACZrsB,KAAKkE,gBAAkBA,CAC3B,CAgDA,OA/CA2kE,EAAqBrrE,UAAUyrE,YAAc,WACzC,GAAIjpE,KAAK8sB,QAAS,CAGd,IAFA,IAAI96B,EAAQ,GACR02E,EAAQ1oE,KAAK0oE,MACRpxE,EAAI,EAAGsI,EAAK8oE,EAAMv+E,OAAQmN,EAAIsI,EAAItI,IACvCtF,GAAUsF,EAAI,GAAM,EAAIoxE,EAAMpxE,GAAK0I,KAAK,eAAejZ,OAAOuQ,IAAItF,MAEtEgO,KAAKgpE,eAAe3kE,SAASrS,EAAOgO,KAAKlZ,OAAQkZ,KAAKmsB,eAC1D,CACJ,EACA08C,EAAqBrrE,UAAU0rE,sBAAwB,WACnD,IAAK,IAAI5xE,EAAI,EAAGsI,EAAKI,KAAK0oE,MAAMv+E,OAAQmN,EAAIsI,EAAItI,GAAK,EAAG,CACpD,IAAI5G,EAAQsP,KAAK,eAAejZ,OAAOuQ,IACnC5G,EAAM27B,OAAS,cACf37B,EAAMsN,MAEd,CACJ,EACA6qE,EAAqBrrE,UAAUkO,KAAO,SAAUmhB,GAC5C,GAAI7sB,KAAK8sB,QAAS,CACd,GAAI9sB,KAAK6sB,SAAWA,EAChB,OAEJ7sB,KAAK+L,QACT,CACA/L,KAAK6sB,OAASA,EAEd,IADA,IAAI67C,EAAQ1oE,KAAK0oE,MACRpxE,EAAI,EAAGsI,EAAK8oE,EAAMv+E,OAAQmN,EAAIsI,EAAItI,GAAK,EAAG,CAC/C,IAAIkK,EAAU,IAAIonE,EAA0B5oE,KAAMA,KAAKM,gBAAiBooE,EAAMpxE,GAAI0I,KAAKqsB,KAAMrsB,KAAKkE,iBAClG1C,EAAQkK,KAAKmhB,GACb7sB,KAAK,eAAejZ,OAAOuQ,IAAMkK,CACrC,CACAxB,KAAK8sB,SAAU,EACf9sB,KAAKipE,aACT,EACAJ,EAAqBrrE,UAAUuO,OAAS,WACpC,GAAK/L,KAAK8sB,QAAV,CAGA9sB,KAAK8sB,SAAU,EACf9sB,KAAK6sB,OAAS,KAEd,IADA,IACSv1B,EAAI,EAAGsI,EADJI,KAAK0oE,MACUv+E,OAAQmN,EAAIsI,EAAItI,GAAK,EAE5C0I,KADa,eAAejZ,OAAOuQ,IACtByU,QANjB,CAQJ,EACO88D,CACX,CA3D2B,GA4DvBD,EAA6B,WAC7B,SAASA,EAA0B9hF,EAAQwZ,EAAiB8rB,EAAkBC,EAAMnoB,EAAiBioB,EAAgBzoC,EAAMK,GACnH+C,aAAkB+hF,EAClB7oE,KAAKvP,OAAS3J,GAGdgiF,EAAehiF,EAAQqlC,GACvBnsB,KAAKlZ,OAASA,EACdkZ,KAAKmsB,eAAiBA,EACtBnsB,KAAKgpE,eAAiB1oE,EAAgBsrB,YAAY9kC,EAAQqlC,IAE9DnsB,KAAKM,gBAAkBA,EACvBN,KAAKosB,iBAAmBA,EACxBpsB,KAAKqsB,KAAOA,EACZrsB,KAAKkE,gBAAkBA,EACvBlE,KAAKtc,KAAOA,EACZsc,KAAKjc,MAAQA,CACjB,CA6EA,OA5EA6kF,EAA0BprE,UAAUkvB,aAAe,SAAU16B,IACzDA,EAAQA,QAAwC,GAAKA,EAAM9Q,cAC7C8e,KAAKhO,QACfgO,KAAKhO,MAAQA,EACTgO,KAAKvP,OACLuP,KAAKvP,OAAOw4E,cAGZjpE,KAAKgpE,eAAe3kE,SAASrE,KAAKtc,KAAOsO,EAAQgO,KAAKjc,MAAOic,KAAKlZ,OAAQkZ,KAAKmsB,gBAG3F,EACAy8C,EAA0BprE,UAAUQ,KAAO,WAClCgC,KAAK8sB,UAGV9sB,KAAKmpE,SAAWnpE,KAAKosB,iBAAiBhoB,SAASpE,KAAK6sB,OAAQ7sB,KAAKkE,iBACjElE,KAAK0sB,aAAa1sB,KAAKmpE,UACnBnpE,KAAKqsB,OAAS,eACdrsB,KAAKG,WACLH,KAAKosB,iBAAiB1qB,QAAQ1B,KAAMA,KAAK6sB,QACrC7sB,KAAKmpE,oBAAoB9+E,OACzB2V,KAAKQ,aAAaR,KAAKmpE,UAE3BnpE,KAAKW,WAAU,IAEvB,EACAioE,EAA0BprE,UAAUkO,KAAO,SAAUmhB,GACjD,GAAI7sB,KAAK8sB,QAAS,CACd,GAAI9sB,KAAK6sB,SAAWA,EAChB,OAEJ7sB,KAAK+L,QACT,CACA/L,KAAK8sB,SAAU,EACf9sB,KAAK6sB,OAASA,EACd,IAAIT,EAAmBpsB,KAAKosB,iBACxBA,EAAiB1gB,MACjB0gB,EAAiB1gB,KAAK1L,KAAM6sB,EAAQ7sB,KAAKkE,iBAE7ClE,KAAKmpE,SAAW/8C,EAAiBhoB,SAASyoB,EAAQ7sB,KAAKkE,iBACvDlE,KAAK0sB,aAAa1sB,KAAKmpE,UACnBnpE,KAAKqsB,OAAS,cACd,QAAsBrsB,KAE9B,EACA4oE,EAA0BprE,UAAUuO,OAAS,WACzC,GAAK/L,KAAK8sB,QAAV,CAGA9sB,KAAK8sB,SAAU,EACf,IAAIV,EAAmBpsB,KAAKosB,iBACxBA,EAAiBrgB,QACjBqgB,EAAiBrgB,OAAO/L,KAAMA,KAAK6sB,QAEvC7sB,KAAK6sB,OAAS,KACd7sB,KAAKhO,MAAQ,KACbgO,KAAKmpE,SAAW,KAChBnpE,KAAKW,WAAU,EATf,CAUJ,EACAioE,EAA0BprE,UAAUkE,QAAU,SAAU0C,GAC/CpE,KAAK8sB,UAGN1oB,IACApE,KAAKmpE,SAAWnpE,KAAKosB,iBAAiBhoB,SAASpE,KAAK6sB,OAAQ7sB,KAAKkE,iBACjElE,KAAK0sB,aAAa1sB,KAAKmpE,WAE3BnpE,KAAKosB,iBAAiB1qB,QAAQ1B,KAAMA,KAAK6sB,QACrC7sB,KAAKmpE,oBAAoB9+E,OACzB2V,KAAKQ,aAAaR,KAAKmpE,UAE/B,EAC4BrtC,EAAW,EACnC,WACD8sC,EAEP,CA/FgC,GAiG5BQ,EAAiB,WACjB,SAASA,EAAc9oE,EAAiB6rB,EAAgBC,EAAkBloB,EAAiBmlE,GACvFrpE,KAAKM,gBAAkBA,EACvBN,KAAKosB,iBAAmBA,EACxBpsB,KAAKmsB,eAAiBA,EACtBnsB,KAAKkE,gBAAkBA,EACvBlE,KAAKqpE,iBAAmBA,CAC5B,CAIA,OAHAD,EAAc5rE,UAAU+uB,cAAgB,WACpC,OAAO,IAAI+8C,EAAWtpE,KAAKM,gBAAiBN,KAAKosB,iBAAkBpsB,KAAKmsB,eAAgBnsB,KAAKkE,gBAAiBlE,KAAKqpE,iBACvH,EACOD,CACX,CAZoB,GAahBE,EAAc,WACd,SAASA,EAAWhpE,EAAiB8rB,EAAkBD,EAAgBjoB,EAAiBmlE,GACpFrpE,KAAKM,gBAAkBA,EACvBN,KAAKosB,iBAAmBA,EACxBpsB,KAAKmsB,eAAiBA,EACtBnsB,KAAKkE,gBAAkBA,EACvBlE,KAAK6sB,OAAS,KACd7sB,KAAKlZ,OAAS,KACdkZ,KAAKqpE,iBAAmBA,CAC5B,CAuDA,OAtDAC,EAAW9rE,UAAUkvB,aAAe,WAChC,IAAI16B,EAAQgO,KAAKosB,iBAAiBhoB,SAASpE,KAAK6sB,OAAQ7sB,KAAKkE,iBAC7DlE,KAAKlZ,OAAOkZ,KAAKmsB,gBAAkBn6B,CACvC,EACAs3E,EAAW9rE,UAAUQ,KAAO,SAAU+D,GAClC,GAAK/B,KAAK8sB,QAAV,CAGA,GAAI/qB,IAAY,KAIhB,MAAM,IAAIiJ,MAAM,2BAA2BjkB,OAAOgb,IAH9C/B,KAAK0sB,cAFT,CAMJ,EACA48C,EAAW9rE,UAAUkO,KAAO,SAAUmhB,GAClC,GAAI7sB,KAAK8sB,QAAS,CACd,GAAI9sB,KAAK6sB,SAAWA,EAChB,OAEJ7sB,KAAK+L,QACT,CACA/L,KAAK8sB,SAAU,EACf9sB,KAAK6sB,OAASA,EACd7sB,KAAKlZ,OAASkZ,KAAKqpE,iBAAmBx8C,EAAO7tB,eAAiB6tB,EAAOvtB,gBACjEU,KAAKosB,iBAAiB1gB,MACtB1L,KAAKosB,iBAAiB1gB,KAAK1L,KAAM6sB,EAAQ7sB,KAAKkE,kBAElD,QAAsBlE,KAC1B,EACAspE,EAAW9rE,UAAUuO,OAAS,WACrB/L,KAAK8sB,UAGV9sB,KAAK8sB,SAAU,EACX9sB,KAAKosB,iBAAiBrgB,QACtB/L,KAAKosB,iBAAiBrgB,OAAO/L,KAAMA,KAAK6sB,QAE5C7sB,KAAK6sB,OAAS,KACd7sB,KAAKlZ,OAAS,KACdkZ,KAAKW,WAAU,GACnB,EACA2oE,EAAW9rE,UAAUmD,UAAY,SAAU4oE,GACvC,MAAM,IAAIv+D,MAAM,0BACpB,EACAs+D,EAAW9rE,UAAUkE,QAAU,WACtB1B,KAAK8sB,UAGV9sB,KAAK0sB,eACL1sB,KAAKosB,iBAAiB1qB,QAAQ1B,KAAMA,KAAK6sB,QAC7C,EACaiP,EAAW,EACpB,WACDwtC,EAEP,CAjEiB,GAmEbE,EAAqC,WACrC,SAASA,EAAkClpE,EAAiB6rB,EAAgBu8C,EAAOxkE,EAAiBmlE,GAChGrpE,KAAKM,gBAAkBA,EACvBN,KAAKmsB,eAAiBA,EACtBnsB,KAAK0oE,MAAQA,EACb1oE,KAAKkE,gBAAkBA,EACvBlE,KAAKqpE,iBAAmBA,CAC5B,CAIA,OAHAG,EAAkChsE,UAAU+uB,cAAgB,WACxD,OAAO,IAAIk9C,EAAwBzpE,KAAKM,gBAAiBN,KAAKmsB,eAAgBnsB,KAAK0oE,MAAO1oE,KAAKkE,gBAAiBlE,KAAKqpE,iBACzH,EACOG,CACX,CAZwC,GAapCC,EAA2B,WAC3B,SAASA,EAAwBnpE,EAAiB6rB,EAAgBu8C,EAAOxkE,EAAiBmlE,GACtFrpE,KAAKM,gBAAkBA,EACvBN,KAAK0oE,MAAQA,EACb1oE,KAAKmsB,eAAiBA,EACtBnsB,KAAKkE,gBAAkBA,EACvBlE,KAAKqpE,iBAAmBA,EACxBrpE,KAAKlZ,OAAS,IAClB,CA8BA,OA7BA2iF,EAAwBjsE,UAAUkO,KAAO,SAAUmhB,GAC/C,GAAI7sB,KAAK8sB,QAAS,CACd,GAAI9sB,KAAK6sB,SAAWA,EAChB,OAEJ7sB,KAAK+L,QACT,CACA/L,KAAK8sB,SAAU,EACf9sB,KAAK6sB,OAASA,EACd7sB,KAAKlZ,OAASkZ,KAAKqpE,iBAAmBx8C,EAAO7tB,eAAiB6tB,EAAOvtB,gBACrEU,KAAK0pE,qBAAuB1pE,KAAK2pE,6BACjC3pE,KAAK0pE,qBAAqBh+D,KAAKmhB,EACnC,EACA48C,EAAwBjsE,UAAUuO,OAAS,WAClC/L,KAAK8sB,UAGV9sB,KAAK8sB,SAAU,EACf9sB,KAAK6sB,OAAS,KACd7sB,KAAKlZ,OAAS,KACdkZ,KAAK0pE,qBAAqB39D,SAC1B/L,KAAK0pE,qBAAuB,KAChC,EACAD,EAAwBjsE,UAAUmsE,2BAA6B,WAC3D,OAA0B,IAAtB3pE,KAAK0oE,MAAMv+E,OACJ,IAAIy+E,EAA0B5oE,KAAKlZ,OAAQkZ,KAAKM,gBAAiBN,KAAK0oE,MAAM,GAAI,YAAoB1oE,KAAKkE,gBAAiBlE,KAAKmsB,eAAgBnsB,KAAK0oE,MAAM,GAAI1oE,KAAK0oE,MAAM,IAE7K,IAAIG,EAAqB7oE,KAAKM,gBAAiBN,KAAK0oE,MAAO1oE,KAAKlZ,OAAQkZ,KAAKmsB,eAAgB,YAAoBnsB,KAAKkE,gBACjI,EACOulE,CACX,CAvC8B,GAyC1BG,EAAqB,WACrB,SAASA,EAAkBh/C,EAAQtqB,EAAiBwd,EAAc+rD,GAC9D7pE,KAAK4qB,OAASA,EACd5qB,KAAKM,gBAAkBA,EACvBN,KAAK8d,aAAeA,EACpB9d,KAAK6pE,aAAeA,CACxB,CA8JA,OA7JAD,EAAkBpsE,UAAUssE,UAAY,SAAUzmC,EAAWxgD,EAASsmD,EAAM4gC,EAAqBhoE,GAC7F,OAAIonC,EAAK6gC,WAAWhqE,KACTA,KAAKmpC,EAAK6gC,SAAS3mC,EAAWxgD,EAASsmD,EAAM4gC,EAAqBhoE,GAEtE/B,KAAKiqE,qBAAqB5mC,EAAWxgD,EAASsmD,EAAM4gC,EAAqBhoE,EACpF,EACA6nE,EAAkBpsE,UAAUysE,qBAAuB,SAAU5mC,EAAWxgD,EAASsmD,EAAM4gC,EAAqBhoE,GAExG,OADA,YAAqB,sBAAsBsI,KAAK,2BAA4B8+B,GACrE4gC,CACX,EACAH,EAAkBpsE,UAAU0sE,4BAA8B,SAAUrnF,EAASsnF,EAAUpoE,GACnF,IAAIod,EAAUt8B,EAAQs8B,QAAQ16B,cAC9B,MAAgB,UAAZ06B,IAAqC,UAAbgrD,GAAqC,UAAbA,IAA0C,aAAjBtnF,EAAQ8lB,MAAwC,UAAjB9lB,EAAQ8lB,MACjG,UAAZwW,GAAoC,YAAbgrD,IAA4C,aAAjBtnF,EAAQ8lB,MAAwC,UAAjB9lB,EAAQ8lB,QAC5E,aAAZwW,GAAsC,WAAZA,IAAsC,UAAbgrD,IACtC,gBAAbA,GAA2C,cAAbA,IAAyD,SAA5BtnF,EAAQunF,iBACvD,cAAbD,GACa,eAAbA,EACI,YAEPpoE,GACGooE,KAAYpoE,EAAQvW,YACpBuW,EAAQvW,WAAW2+E,IACnBpoE,EAAQvW,WAAW2+E,GAAUE,oBAAsB,aAC/CtoE,EAAQvW,WAAW2+E,GAAUE,mBAEjC,WACX,EACAT,EAAkBpsE,UAAUkO,KAAO,SAAU23B,EAAWxgD,EAASsmD,EAAM4gC,EAAqBhoE,GACxF,IAAImrC,EAAc68B,GAAuB,eAA8B5gC,EAAKghC,UAI5E,OAHAj9B,EAAY1hD,WAAW29C,EAAKghC,UAAY,IAAI,KAAkBnqE,KAAKM,gBAAiBN,KAAK6pE,aAAaznF,IAAIS,EAAQs8B,QAASgqB,EAAKghC,UAAWnqE,KAAK4qB,OAAOlX,MAAMy1B,EAAKmhC,gBAAwC18E,IAA5Bu7C,EAAKkhC,oBAAgE,OAA5BlhC,EAAKkhC,mBACtNrqE,KAAKkqE,4BAA4BrnF,EAASsmD,EAAKghC,SAAUpoE,GACzDonC,EAAKkhC,mBAAoBhnC,EAAUn/B,iBAClCgpC,CACX,EACA08B,EAAkBpsE,UAAUigD,QAAU,SAAUpa,EAAWxgD,EAASsmD,GAChE,OAAO,IAAI,KAAmBnpC,KAAK8d,aAAcqrB,EAAKghC,SAAUnqE,KAAK4qB,OAAOlX,MAAMy1B,EAAKmhC,WAAY,WAAyB,EAAMjnC,EAAUn/B,gBAChJ,EACA0lE,EAAkBpsE,UAAUipD,QAAU,SAAUpjB,EAAWxgD,EAASsmD,GAChE,OAAO,IAAI,KAAmBnpC,KAAK8d,aAAcqrB,EAAKghC,SAAUnqE,KAAK4qB,OAAOlX,MAAMy1B,EAAKmhC,WAAY,gBAA8B,EAAMjnC,EAAUn/B,gBACrJ,EACA0lE,EAAkBpsE,UAAUqiB,SAAW,SAAUwjB,EAAWxgD,EAASsmD,GACjE,OAAO,IAAI,KAAmBnpC,KAAK8d,aAAcqrB,EAAKghC,SAAUnqE,KAAK4qB,OAAOlX,MAAMy1B,EAAKmhC,WAAY,eAA6B,EAAMjnC,EAAUn/B,gBACpJ,EACA0lE,EAAkBpsE,UAAUQ,KAAO,SAAUqlC,EAAWxgD,EAASsmD,EAAM4gC,GACnE,IAAI78B,EAAc68B,GAAuB,eAA8B5gC,EAAKghC,UAE5E,OADAj9B,EAAY1hD,WAAW29C,EAAKghC,UAAY,IAAI,KAAenqE,KAAKM,gBAAiB6oC,EAAKghC,SAAUnqE,KAAK4qB,OAAOlX,MAAMy1B,EAAKmhC,WAAYjnC,EAAUn/B,iBACtIgpC,CACX,EACA08B,EAAkBpsE,UAAUzS,QAAU,SAAUs4C,EAAWxgD,EAASsmD,EAAM4gC,EAAqBhoE,GAC3F,IAKI1V,EACAiL,EACAsI,EAPAstC,EAAc68B,GAAuB,eAA8B5gC,EAAKghC,UACxEG,EAAYnhC,EAAKmhC,UACjBx8B,EAAW9tC,KAAK8tC,SAChB1kD,EAAO,KACPtC,EAAS,GAITyjF,GAAW,EACXC,GAAW,EACXC,GAAY,EAChB,IAAKnzE,EAAI,EAAGsI,EAAK0qE,EAAUngF,OAAQmN,EAAIsI,IAAMtI,EAAG,CAE5C,GAAgB,OADhBjL,EAAUi+E,EAAUhzE,KACIizE,EAYnB,GAAgB,MAAZl+E,GAA4B,OAATjD,EACxBqhF,GAAY,EACZrhF,EAAOtC,EAAOkgE,OACdlgE,EAAS,OAER,IAAgB,OAAZuF,EAAkB,CACvBvF,GAAUuF,EACVm+E,GAAW,EACX,QACJ,CAEI1jF,GAAUuF,EACG,OAATjD,IAA8B,IAAbohF,GAAkC,MAAZn+E,IACvCk+E,GAAYA,EAEpB,MA1BSE,IACDrhF,EAAO4W,KAAK0qE,wBAAwBrnC,EAAWthC,IAEnDonC,EAAO2E,EAAS68B,iBAAiBtnC,EAAW,IAAKj6C,EAAMtC,EAAOkgE,QAC9DlZ,EAAS88B,2BAA2BvnC,EAAWxgD,EAASsmD,EAAM+D,EAAanrC,GACtEmrC,EAAY1hD,WAAW29C,EAAKghC,YAC7Bj9B,EAAY1hD,WAAW29C,EAAKghC,UAAYhhC,EAAKmhC,WAEjDxjF,EAAS,GACTsC,EAAO,KAkBXohF,GAAW,CACf,CAWA,OAVKC,IACDrhF,EAAO4W,KAAK0qE,wBAAwBrnC,EAAWthC,IAEtC,OAAT3Y,IACA+/C,EAAO2E,EAAS68B,iBAAiBtnC,EAAW,IAAKj6C,EAAMtC,EAAOkgE,QAC9DlZ,EAAS88B,2BAA2BvnC,EAAWxgD,EAASsmD,EAAM+D,EAAanrC,GACtEmrC,EAAY1hD,WAAW29C,EAAKghC,YAC7Bj9B,EAAY1hD,WAAW29C,EAAKghC,UAAYhhC,EAAKmhC,YAG9Cp9B,CACX,EACA08B,EAAkBpsE,UAAUktE,wBAA0B,SAAUrnC,EAAWthC,GACvE,IAAI4G,EAAO06B,EAAUxhB,aAAa9f,EAAQ0f,eAC1C,OAAI9Y,GAAQA,EAAKkiE,gBACNliE,EAAKkiE,gBAAgBv1E,UAEzB,IACX,EACAs0E,EAAkBpsE,UAAe,IAAI,SAAU6lC,EAAWxgD,EAASsmD,EAAM4gC,GACrE,IAAIrB,EACAoC,EACA59B,EACAo9B,EACAS,EAIJ,GAAqB,KADrBrC,GADAqC,GADAT,EAAYnhC,EAAKmhC,WACW1hC,MAAM,iBACR0hC,EAAUr8E,MAAM,OAASq8E,EAAUr8E,MAAM,SACzD9D,OACN,MAAM,IAAI6gB,MAAM,8FAYpB,OAVAkiC,EAAc68B,GAAuB,eAA8B5gC,EAAKghC,UACpEY,GACAD,EAAWpC,EAAM,GAAGr4E,QAAQ,SAAU,IAAIA,QAAQ,KAAM,KAAKA,QAAQ,OAAQ,KAAK22D,OAAO/4D,MAAM,KAC/Fi/C,EAAY1hD,WAAWiB,IAAMq+E,EAAS,GACtC59B,EAAY1hD,WAAWwG,MAAQ84E,EAAS,IAGxC59B,EAAY1hD,WAAWw/E,MAAQtC,EAAM,GAEzCx7B,EAAY1hD,WAAWy/E,MAAQ,IAAI,KAAkBjrE,KAAKM,gBAAiB,QAASN,KAAK4qB,OAAOlX,MAAMg1D,EAAM,IAAK,YAAoBrlC,EAAUn/B,iBACxIgpC,CACX,EACA08B,EAAkBpsE,UAAU,WAAa,SAAU6lC,EAAWxgD,EAASsmD,EAAM4gC,GACzE,IAAI78B,EAAc68B,GAAuB,eAA8B5gC,EAAKghC,UAE5E,OADAj9B,EAAY1hD,WAAW29C,EAAKghC,UAAY,IAAI,KAAkBnqE,KAAKM,gBAAiBN,KAAK6pE,aAAaznF,IAAIS,EAAQs8B,QAASgqB,EAAKghC,UAAWnqE,KAAK4qB,OAAOlX,MAAMy1B,EAAKmhC,WAAY,YAAoBjnC,EAAUn/B,iBACrMgpC,CACX,EACA08B,EAAkBpsE,UAAU,WAAa,SAAU6lC,EAAWxgD,EAASsmD,EAAM4gC,GACzE,IAAI78B,EAAc68B,GAAuB,eAA8B5gC,EAAKghC,UAE5E,OADAj9B,EAAY1hD,WAAW29C,EAAKghC,UAAY,IAAI,KAAkBnqE,KAAKM,gBAAiBN,KAAK6pE,aAAaznF,IAAIS,EAAQs8B,QAASgqB,EAAKghC,UAAWnqE,KAAK4qB,OAAOlX,MAAMy1B,EAAKmhC,WAAY,YAAoBjnC,EAAUn/B,iBACrMgpC,CACX,EACA08B,EAAkBpsE,UAAU,aAAe,SAAU6lC,EAAWxgD,EAASsmD,EAAM4gC,GAC3E,IAAI78B,EAAc68B,GAAuB,eAA8B5gC,EAAKghC,UAE5E,OADAj9B,EAAY1hD,WAAW29C,EAAKghC,UAAY,IAAI,KAAkBnqE,KAAKM,gBAAiBN,KAAK6pE,aAAaznF,IAAIS,EAAQs8B,QAASgqB,EAAKghC,UAAWnqE,KAAK4qB,OAAOlX,MAAMy1B,EAAKmhC,WAAY,cAAsBjnC,EAAUn/B,iBACvMgpC,CACX,EACA08B,EAAkBpsE,UAAU,YAAc,SAAU6lC,EAAWxgD,EAASsmD,EAAM4gC,GAC1E,IAAI78B,EAAc68B,GAAuB,eAA8B5gC,EAAKghC,UAE5E,OADAj9B,EAAY1hD,WAAW29C,EAAKghC,UAAY,IAAI,KAAkBnqE,KAAKM,gBAAiBN,KAAK6pE,aAAaznF,IAAIS,EAAQs8B,QAASgqB,EAAKghC,UAAWnqE,KAAK4qB,OAAOlX,MAAMy1B,EAAKmhC,WAAY,aAAqBjnC,EAAUn/B,iBACtMgpC,CACX,EACA08B,EAAkB39C,OAAS,CAAC,KAAQ,KAAiB,KAAcq8C,GAC5DsB,CACX,CArKwB,GAsKxBx+E,OAAOgS,eAAewsE,EAAkBpsE,UAAW,UAAWpS,OAAOsoC,yBAAyBk2C,EAAkBpsE,UAAW,YAE3H,IAAI2rC,EAAO,CAAC,EACR+hC,EAA6B,SAAU5wB,GAEvC,SAAS4wB,EAA0BtgD,EAAQtqB,EAAiB6qE,EAAmBtB,GAC3E,IAAIvlE,EAAQg2C,EAAOt8C,KAAKgC,OAASA,KAQjC,OAPAsE,EAAMsmB,OAASA,EACftmB,EAAMhE,gBAAkBA,EACxBgE,EAAM6mE,kBAAoBA,EAC1B7mE,EAAM8mE,sBAAwB9mE,EAAMsmB,OAAOlX,MAAM,MACjDy3D,EAAkBr9B,SAAWxpC,EAC7BA,EAAMulE,aAAeA,EACrBvlE,EAAM+mE,qBAAuB,qBACtB/mE,CACX,CA0KA,OAtuBJ,SAAmBosB,EAAG15B,GAElB,SAASkjD,IAAOl6C,KAAKnC,YAAc6yB,CAAG,CADtCspB,EAActpB,EAAG15B,GAEjB05B,EAAElzB,UAAkB,OAANxG,EAAa5L,OAAOkT,OAAOtH,IAAMkjD,EAAG18C,UAAYxG,EAAEwG,UAAW,IAAI08C,EACnF,CA6iBID,CAAUixB,EAA2B5wB,GAYrC4wB,EAA0B1tE,UAAUmtE,iBAAmB,SAAUtnC,EAAW8H,EAAag/B,EAAUG,GAC/F,IAAI5B,EAAQyB,EAASl8E,MAAM,KAE3B,GADAk7C,EAAKkhC,mBAAqB,KACL,IAAjB3B,EAAMv+E,OACNg/C,EAAKghC,SAAWzB,EAAM,GAAG1hB,OACzB7d,EAAKmhC,UAAYA,EACjBnhC,EAAK6gC,QAAUtB,EAAM,GAAG1hB,OACH,QAAjB7d,EAAK6gC,SACL7gC,EAAKllC,WAAa,IAAI,KAAejE,KAAK4qB,OAAOlX,MAAM42D,GAAYnhC,EAAKghC,SAAU9mC,EAAUn/B,iBAC5FilC,EAAK6gC,QAAU,KACf7gC,EAAKghC,SAAW,OAGhBhhC,EAAKllC,WAAa,UAGrB,GAAiB,QAAbkmE,EACLhhC,EAAKghC,SAAWA,EAChBhhC,EAAKmhC,UAAYA,EACjBnhC,EAAK6gC,QAAU,KACf7gC,EAAKllC,WAAa,IAAI,KAAejE,KAAK4qB,OAAOlX,MAAM42D,GAAY,UAAWjnC,EAAUn/B,qBAEvF,CACDilC,EAAKghC,SAAWA,EAChBhhC,EAAKmhC,UAAYA,EACjBnhC,EAAK6gC,QAAU,KACf,IAAIsB,EAAqBtrE,KAAKurE,mBAAmBloC,EAAWinC,GAExDnhC,EAAKllC,WADkB,OAAvBqnE,EACkB,KAGA,IAAI7C,EAA+BzoE,KAAKM,gBAAiBN,KAAK6pE,aAAaznF,IAAI+oD,EAAag/B,GAAWmB,EAAoB,YAAoBjoC,EAAUn/B,gBAAiBimE,EAEpM,CACA,OAAOhhC,CACX,EACA+hC,EAA0B1tE,UAAUotE,2BAA6B,SAAUvnC,EAAWxgD,EAAS2oF,EAASzB,EAAqBhoE,GACzH,IAAImrC,EACJ,GAAIs+B,EAAQvnE,WAAY,CACpB,GAAyB,QAArBunE,EAAQrB,SACR,OAAOqB,EAAQvnE,YAEnBipC,EAAc68B,GAAuB,eAA8ByB,EAAQrB,WAC/D3+E,WAAWggF,EAAQrB,UAAYqB,EAAQvnE,UACvD,MACSunE,EAAQxB,UACb98B,EAAcltC,KAAKmrE,kBAAkBrB,UAAUzmC,EAAWxgD,EAAS2oF,EAASzB,EAAqBhoE,IAErG,OAAOmrC,CACX,EACAg+B,EAA0B1tE,UAAUiuE,qBAAuB,SAAUpoC,EAAWqoC,GAU5E,IATA,IAEIjwB,EACAitB,EACAyB,EACAG,EALA79D,EAAc,GACdjhB,EAAakgF,EAAWlgF,WAMxB6/E,EAAuBrrE,KAAKqrE,qBAC5BhC,EAAmBqC,EAAW3wB,aAAaswB,GACtC/zE,EAAI,EAAGsI,EAAKpU,EAAWrB,OAAQyV,EAAKtI,IAAKA,EAK9C,GAHA6yE,GADA1uB,EAAOjwD,EAAW8L,IACFlO,KAChBkhF,EAAY7uB,EAAKkwB,UACjBjD,EAAQyB,EAASl8E,MAAM,KACnBk8E,IAAakB,EAGjB,GAAqB,IAAjB3C,EAAMv+E,OAAc,CAEpB,GAAgB,SADNu+E,EAAM,GACQ,CACpB,YAAqB,+BAChBr+D,KAAK,2CAA4CtjB,OAAO2hF,EAAM,GAAI,mBAAqB3hF,OAAOojF,EAAU,MAC7G,QACJ,CACA19D,EAAY7iB,KAAK,IAAIw/E,EAAcppE,KAAKM,iBAAiB,QAAUooE,EAAM,IAAK1oE,KAAK4qB,OAAOlX,MAAM42D,GAAYjnC,EAAUn/B,gBAAiBmlE,GAC3I,MAEIc,GAAW,QAAUA,GAEP,QADdzB,EAAQ1oE,KAAKurE,mBAAmBloC,EAAWinC,KAEvC,YAAqB,+BAChBjgE,KAAK,0DAA2DtjB,OAAOojF,EAAU,UAAUpjF,OAAOujF,EAAW,UAAYvjF,OAAOojF,EAAU,OAAOpjF,OAAOujF,EAAW,SAExK5B,EACAj8D,EAAY7iB,KAAK,IAAI4/E,EAAkCxpE,KAAKM,gBAAiB6pE,EAAUzB,EAAOrlC,EAAUn/B,gBAAiBmlE,IAGzH58D,EAAY7iB,KAAK,IAAIw/E,EAAcppE,KAAKM,gBAAiB6pE,EAAU,IAAI,KAAcG,GAAYjnC,EAAUn/B,gBAAiBmlE,IAIxI,OAAO58D,CACX,EACAy+D,EAA0B1tE,UAAUouE,mBAAqB,SAAUvoC,EAAWrxC,GAC1E,IAAI02E,EAAQ1oE,KAAKurE,mBAAmBloC,EAAWrxC,GAC/C,OAAc,OAAV02E,EACO,KAEJ,IAAID,EAA+BzoE,KAAKM,gBAAiB,cAAeooE,EAAO,YAAoBrlC,EAAUn/B,gBAAiB,cACzI,EACAgnE,EAA0B1tE,UAAU+tE,mBAAqB,SAAUloC,EAAWrxC,GAU1E,IATA,IAEI65E,EAIAC,EACApD,EAPApxE,EAAItF,EAAMzL,QAAQ,KAAM,GACxBqZ,EAAK5N,EAAM7H,OAEX4hF,EAAM,EACNjmC,EAAO,EACP9sB,EAAQ,KAGRgzD,EAAY,EACT10E,GAAK,GAAKA,EAAIsI,EAAK,GAAG,CACzBkmC,EAAO,EACPgmC,EAAqBx0E,EACrBA,GAAK,EACL,GACIu0E,EAAO75E,EAAMsF,GACbA,IACa,MAATu0E,GAAyB,MAATA,EASP,OAATA,EAIU,OAAV7yD,IAGS,MAAT6yD,EACA/lC,IAEc,MAAT+lC,GACL/lC,KAVAxuC,IATc,OAAV0hB,EACAA,EAAQ6yD,EAEH7yD,IAAU6yD,IACf7yD,EAAQ,YAiBX8sB,EAAO,GAAKxuC,EAAIsI,GACzB,GAAa,IAATkmC,EAkBA,MAjBA4iC,EAAQA,GAAS,GACqB,OAAlC12E,EAAM85E,EAAqB,IAAiD,OAAlC95E,EAAM85E,EAAqB,IACrEpD,EAAMsD,GAAah6E,EAAMy7B,UAAUs+C,EAAKD,EAAqB,GAAK95E,EAAMy7B,UAAUq+C,EAAoBx0E,GAEtGoxE,IADAsD,GACmBhsE,KAAKorE,sBACxBY,MAGAtD,EAAMsD,GAAah6E,EAAMy7B,UAAUs+C,EAAKD,GAExCpD,IADAsD,GACmBhsE,KAAK4qB,OAAOlX,MAAM1hB,EAAMy7B,UAAUq+C,EAAqB,EAAGx0E,EAAI,IACjF00E,KAEJD,EAAMz0E,EACNA,EAAItF,EAAMzL,QAAQ,KAAM+Q,EAKhC,CACA,OAAkB,IAAd00E,EACO,MAEXtD,EAAMsD,GAAah6E,EAAM2iC,OAAOo3C,GACzBrD,EACX,EACAwC,EAA0Bj/C,OAAS,CAAC,KAAQ,KAAiB29C,EAAmBtB,GACzE4C,CACX,CAvLgC,CAuL9B,MAEF,SAASlxC,EAAUxa,GACfA,EAAOmO,UAAUqS,kBAAkB,KAAiBkrC,GACpD1rD,EAAOmO,UAAUwS,cAAc,KAAiB+qC,EACpD,+MCvtBIe,qGAtBAjyB,EAAgB,SAAStpB,EAAG15B,GAI5B,OAHAgjD,EAAgB5uD,OAAOmT,gBAClB,CAAEC,UAAW,cAAgBnU,OAAS,SAAUqmC,EAAG15B,GAAK05B,EAAElyB,UAAYxH,CAAG,GAC1E,SAAU05B,EAAG15B,GAAK,IAAK,IAAI8kB,KAAK9kB,EAAO5L,OAAOoS,UAAUjO,eAAeyO,KAAKhH,EAAG8kB,KAAI4U,EAAE5U,GAAK9kB,EAAE8kB,GAAI,EAC7Fk+B,EAActpB,EAAG15B,EAC5B,EAEA,SAASijD,EAAUvpB,EAAG15B,GAClB,GAAiB,mBAANA,GAA0B,OAANA,EAC3B,MAAM,IAAIqH,UAAU,uBAAyBkT,OAAOva,GAAK,iCAE7D,SAASkjD,IAAOl6C,KAAKnC,YAAc6yB,CAAG,CADtCspB,EAActpB,EAAG15B,GAEjB05B,EAAElzB,UAAkB,OAANxG,EAAa5L,OAAOkT,OAAOtH,IAAMkjD,EAAG18C,UAAYxG,EAAEwG,UAAW,IAAI08C,EACnF,CAEA,SAASpe,EAAWC,EAAYj1C,EAAQ2F,EAAK+5B,GACzC,IAA2HkK,EAAvHuD,EAAI/pC,UAAUC,OAAQguC,EAAIlE,EAAI,EAAIntC,EAAkB,OAAT0/B,EAAgBA,EAAOp7B,OAAOsoC,yBAAyB5sC,EAAQ2F,GAAO+5B,EACrH,GAAuB,iBAAZlc,SAAoD,mBAArBA,QAAQ0xB,SAAyB7D,EAAI7tB,QAAQ0xB,SAASD,EAAYj1C,EAAQ2F,EAAK+5B,QACpH,IAAK,IAAIlvB,EAAIykC,EAAW5xC,OAAS,EAAGmN,GAAK,EAAGA,KAASo5B,EAAIqL,EAAWzkC,MAAI6gC,GAAKlE,EAAI,EAAIvD,EAAEyH,GAAKlE,EAAI,EAAIvD,EAAE5pC,EAAQ2F,EAAK0rC,GAAKzH,EAAE5pC,EAAQ2F,KAAS0rC,GAChJ,OAAOlE,EAAI,GAAKkE,GAAK/sC,OAAOgS,eAAetW,EAAQ2F,EAAK0rC,GAAIA,CAChE,EAGA,SAAW8zC,GACPA,EAAoC,gBAAI,mBACxCA,EAA4B,QAAI,SACnC,CAHD,CAGGA,IAAuBA,EAAqB,CAAC,IAChD,IAAIC,EAAW,WACX,SAASA,EAAQrpF,EAAS8qC,EAAW8W,EAAmBS,EAAUD,EAAe98B,GAC7EnI,KAAKohE,mBAAqB6K,EAAmBE,gBAC7CnsE,KAAKnd,QAAUA,EACfmd,KAAK2tB,UAAYA,EACjB3tB,KAAKykC,kBAAoBA,EACzBzkC,KAAKklC,SAAWA,EAChBllC,KAAKilC,cAAgBA,EACrBjlC,KAAKmI,UAAYA,EACjBnI,KAAKosE,kBAAoB,KACzBpsE,KAAKqsE,iBAAmB,KACxBrsE,KAAKssE,QAAUlhF,OAAOkT,OAAO,KACjC,CAyDA,OAxDA4tE,EAAQjgD,OAAS,WACb,MAAO,CAAC,aAAa,KAAW,KAAmB,KAAU,KAAe,IAChF,EACAigD,EAAQ1uE,UAAU+uE,QAAU,SAAUC,GAClCxsE,KAAKwsE,WAAaA,CACtB,EACAN,EAAQ1uE,UAAUkO,KAAO,SAAU1M,EAAgBM,GAC/CU,KAAKhB,eAAiBA,EACtBgB,KAAKV,gBAAkBA,EACvB,IAAIgtE,EAAUtsE,KAAKssE,QACnBA,EAAQ1iD,KAAO5pB,KAAK4pB,KACpB0iD,EAAQt9C,UAAYhvB,KAAKgvB,UACzBs9C,EAAQnpD,MAAQnjB,KAAKmjB,MAChBnjB,KAAKysE,aACNC,EAAe1sE,KAEvB,EACAksE,EAAQ1uE,UAAUuO,OAAS,WACvB/L,KAAKssE,QAAUlhF,OAAOkT,OAAO,MAC7B0B,KAAKhB,eAAiB,KACtBgB,KAAKV,gBAAkB,KAGvBU,KAAKklC,SAASynC,WAFM,GACA,EAExB,EACAT,EAAQ1uE,UAAUovE,aAAe,SAAU3pE,EAAUC,GACjDlD,KAAKssE,QAAQnpD,MAAQlgB,EACrB4pE,EAAc7sE,KAClB,EACAksE,EAAQ1uE,UAAUsvE,YAAc,SAAU7pE,EAAUC,GAChDlD,KAAKssE,QAAQ1iD,KAAO3mB,EACpB4pE,EAAc7sE,KAClB,EACAksE,EAAQ1uE,UAAUuvE,iBAAmB,SAAU9pE,EAAUC,GACrDlD,KAAKssE,QAAQt9C,UAAY/rB,EACzB4pE,EAAc7sE,KAClB,EACA87B,EAAW,CACP,MACDowC,EAAQ1uE,UAAW,aAAS,GAC/Bs+B,EAAW,CACP,MACDowC,EAAQ1uE,UAAW,YAAQ,GAC9Bs+B,EAAW,CACP,MACDowC,EAAQ1uE,UAAW,iBAAa,GACnCs+B,EAAW,CACP,MACDowC,EAAQ1uE,UAAW,0BAAsB,GAC5Cs+B,EAAW,CACP,MACDowC,EAAQ1uE,UAAW,iBAAa,GACzBs+B,EAAW,CACjB,KACA,QAAc,YACfowC,EAEP,CAtEc,GA+Fd,SAASQ,EAAeM,GACpB,IAAIV,EAAUU,EAASV,QAEvB,GADAU,EAASV,QAAUlhF,OAAOkT,OAAO,MA4CrC,SAA+B0uE,EAAUV,GACrC,IAAIlL,EAAqB4L,EAAS5L,mBAC9B6L,EAAKD,EAASX,iBAIlB,OAHIY,GAAgD,mBAAnCA,EAAGrM,8BAChBQ,EAAqB6L,EAAGrM,+BAErB,SAAU0L,GACV,cAAeA,GACflL,IAAuB6K,EAAmBiB,OACrD,CApDQC,CAAsBH,EAAUV,GAAU,CAC1C,IAAIp/B,EAAc,CACdtjB,KAAMojD,EAASpjD,KACfoF,UAAWg+C,EAASX,kBAAoBW,EAASh+C,UACjD7L,MAAO6pD,EAAS7pD,OAEpB+pB,EAAc9hD,OAAOC,OAAO6hD,EAAao/B,GACzCp/B,EAvBR,SAA2B8/B,EAAU9/B,GACjC,OAAO9hD,OAAOC,OAAO6hD,EAAa,CAC9BluC,eAAgBguE,EAAShuE,eACzBM,gBAAiB0tE,EAAS1tE,gBAC1BktE,WAAYQ,EAASR,WACrB7+C,UAAWq/C,EAASr/C,UACpBuX,SAAU8nC,EAAS9nC,SACnBD,cAAe+nC,EAAS/nC,cACxBmnC,kBAAmBY,EAASZ,kBAC5B/lF,KAAM2mF,EAASnqF,QACfuqF,UAAWJ,EAASI,WAE5B,CAWsBC,CAAkBL,EAAU9/B,GAC1C8/B,EAASP,YAAcO,EAASvoC,kBAAkBe,QAAQ0H,GAAav/C,MAAK,SAAUohC,GAClFi+C,EAASZ,kBAAoBr9C,EAC7Bi+C,EAASX,iBAAmBt9C,EAAaA,EAAWC,UAAY,IACpE,GACJ,MAGI,GADAg+C,EAASP,YAnCjB,SAA8BQ,EAAI9pD,GAC9B,GAAI8pD,GAA6B,mBAAhBA,EAAG7yB,SAChB,OAAO1sD,EAAQD,QAAQw/E,EAAG7yB,SAASj3B,GAE3C,CA+B+BmqD,CAAqBN,EAASX,iBAAkBC,EAAQnpD,QAC1E6pD,EAASP,YACV,OAGRO,EAASP,YAAcO,EAASP,YAC3B9+E,MAAK,WACN4/E,EAAwBP,EAC5B,IAAG,SAAUtnC,GAET,MADA6nC,EAAwBP,GAClBtnC,CACV,GACJ,CACA,SAAS6nC,EAAwBP,GAC7BA,EAASP,YAAc,KAvD3B,SAAiB7uE,GACb,IAAK,IAAIiB,KAAKjB,EACV,OAAO,EAEX,OAAO,CACX,CAmDSu1D,CAAQ6Z,EAASV,UAClBI,EAAeM,EAEvB,CACA,SAASH,EAAcG,GACfA,EAASP,aAAeO,EAASQ,kBAGrCR,EAASQ,iBAAkB,EAC3BR,EAAS7kE,UAAUW,gBAAe,WAC9BkkE,EAASQ,iBAAkB,EAC3Bd,EAAeM,EACnB,IACJ,CAYA,IAAIS,EAAU,WACV,SAASA,EAAOC,EAAaxoC,GACzBllC,KAAK0tE,YAAcA,EACnB1tE,KAAKklC,SAAWA,EAChBllC,KAAK4pB,KAAO,KACZ5pB,KAAKhB,eAAiB,KACtBgB,KAAKV,gBAAkB,KACvBU,KAAK2tE,SAAU,EACf3tE,KAAKyT,OAAQ,CACjB,CA2DA,OA1DAg6D,EAAOjwE,UAAUkO,KAAO,SAAU1M,EAAgBM,GAC9CU,KAAKhB,eAAiBA,EACtBgB,KAAKV,gBAAkBA,CAC3B,EACAmuE,EAAOjwE,UAAUuO,OAAS,WACJ,OAAd/L,KAAK4pB,OAGT5pB,KAAK4pB,KAAK7d,SACL/L,KAAK0tE,YAAYE,YAGlB5tE,KAAK2tE,SACL3tE,KAAK2tE,SAAU,EACf3tE,KAAKklC,SAASjgB,OAAOjlB,KAAK4pB,MAAM,GAAM,IAGtC5pB,KAAK4pB,KAAKikD,gBAEd7tE,KAAK4pB,KAAO,MAChB,EACA6jD,EAAOjwE,UAAUswE,MAAQ,WACrB,IAAI9tE,KAAK2tE,QAaT,OAPkB,OAAd3tE,KAAK4pB,OACL5pB,KAAK4pB,KAAO5pB,KAAK0tE,YAAYpvE,UAE5B0B,KAAK4pB,KAAKkD,SACX9sB,KAAK4pB,KAAKle,KAAK1L,KAAKhB,eAAgBgB,KAAKV,iBAE7CU,KAAK2tE,SAAU,EACR3tE,KAAKklC,SAAS/7C,IAAI6W,KAAK4pB,MAZrB5pB,KAAK4pB,KAAKkD,SACX9sB,KAAK4pB,KAAKle,KAAK1L,KAAKhB,eAAgBgB,KAAKV,gBAYrD,EACAmuE,EAAOjwE,UAAUuwE,MAAQ,WACrB,IAAIzpE,EAAQtE,KACZ,GAAKA,KAAK2tE,QAAV,CAGA3tE,KAAK2tE,SAAU,EACf,IAAI/oE,EAAU5E,KAAKklC,SAASjgB,OAAOjlB,KAAK4pB,MACxC,GAAIhlB,aAAmBlX,EACnB,OAAOkX,EAAQjX,MAAK,WAChB2W,EAAM0pE,aACV,IAEJhuE,KAAKguE,aARL,CASJ,EACAP,EAAOjwE,UAAUwwE,YAAc,WAC3B,IAAIv6D,EAAuB,UAAfzT,KAAKyT,SAA8BzT,KAAKyT,MACpDzT,KAAK4pB,KAAK7d,SACL0H,IACDzT,KAAK4pB,KAAO,KAEpB,EACO6jD,CACX,CArEa,GAuETQ,EAAM,SAAU3zB,GAEhB,SAAS2zB,IACL,IAAI3pE,EAAmB,OAAXg2C,GAAmBA,EAAOvyC,MAAM/H,KAAM9V,YAAc8V,KAEhE,OADAsE,EAAMmP,OAAQ,EACPnP,CACX,CA4DA,OAjEA21C,EAAUg0B,EAAI3zB,GAMd2zB,EAAGzwE,UAAUkO,KAAO,SAAU1M,EAAgBM,GAC1Cg7C,EAAO98C,UAAUkO,KAAK1N,KAAKgC,KAAMhB,EAAgBM,GAC7CU,KAAKmN,UACLnN,KAAK8tE,QAGL9tE,KAAK+tE,OAEb,EACAE,EAAGzwE,UAAU0wE,iBAAmB,SAAUjrE,GACtCjD,KAAKmuE,QAAQlrE,EACjB,EACAgrE,EAAGzwE,UAAU2wE,QAAU,SAAUC,GAC7B,IAIIloC,EAJA5hC,EAAQtE,KACRA,KAAKquE,YAKLnoC,EADAlmC,KAAKsuE,OACKF,EAAOpuE,KAAKuuE,MAAMvuE,KAAKsuE,OAAQtuE,MAAQA,KAAKuuE,MAAMvuE,KAAMA,KAAKsuE,QAG7DF,EAAOpuE,KAAK8tE,QAAU9tE,KAAK+tE,WAGrC/tE,KAAKquE,WAAY,EACjBnoC,EAAQv4C,MAAK,WACT2W,EAAM+pE,WAAY,EACd/pE,EAAM6I,YAAc7I,EAAMqpE,SAC1BrpE,EAAM6pE,QAAQ7pE,EAAM6I,UAE5B,IAER,EACA8gE,EAAGzwE,UAAU+wE,MAAQ,SAAUtpD,EAAQ97B,GACnC,OAAQ6W,KAAKotE,WACT,IAAK,SACD,OAAO1/E,EAAQD,QAAQtE,EAAI2kF,SAASngF,MAAK,WAAc,OAAOs3B,EAAO8oD,OAAS,IAClF,IAAK,OACD,OAAOrgF,EAAQkT,IAAI,CAACqkB,EAAO8oD,QAAS5kF,EAAI2kF,UAC5C,QACI,IAAI5nC,EAAUjhB,EAAO8oD,QACrB,OAAO7nC,EAAUA,EAAQv4C,MAAK,WAAc,OAAOxE,EAAI2kF,OAAS,IAAK3kF,EAAI2kF,QAErF,EACAhyC,EAAW,EACP,QAAS,CAAE+uC,iBAAiB,KAC7BoD,EAAGzwE,UAAW,iBAAa,GAC9Bs+B,EAAW,CACP,MACDmyC,EAAGzwE,UAAW,iBAAa,GAC9Bs+B,EAAW,CACP,MACDmyC,EAAGzwE,UAAW,aAAS,GACrBs+B,EAAW,EACZ,QAAgB,MAChB,MACA,QAAO,KAAkB,OAC1BmyC,EAEP,CAnES,CAmEPR,GAEEe,EAAQ,SAAUl0B,GAElB,SAASk0B,EAAKd,EAAaxoC,GACvB,IAAI5gC,EAAQg2C,EAAOt8C,KAAKgC,KAAM0tE,EAAaxoC,IAAallC,KAExD,OADAsE,EAAMmqE,gBACCnqE,CACX,CA0BA,OA/BA21C,EAAUu0B,EAAMl0B,GAMhBk0B,EAAKhxE,UAAUkO,KAAO,SAAU1M,EAAgBM,GAC5Cg7C,EAAO98C,UAAUkO,KAAK1N,KAAKgC,KAAMhB,EAAgBM,GAC7CU,KAAK0uE,KAAKvhE,UACVnN,KAAK+tE,QAGL/tE,KAAK8tE,OAEb,EACAU,EAAKhxE,UAAUixE,cAAgB,WAE3B,IADA,IAAIznE,EAAWhH,KAAKklC,SAAS0V,OAAO+zB,gBAC7B3nE,IAAaA,EAAS0nB,IACzB1nB,EAAWA,EAAS2nE,gBAExB,IAAK3nE,IAAaA,EAAS0nB,GAAGkgD,GAC1B,MAAM,IAAI5jE,MAAM,qDAEpBhL,KAAK0uE,KAAO1nE,EAAS0nB,GAAGkgD,GAAG5/C,UAC3BhvB,KAAK0uE,KAAKJ,OAAStuE,IACvB,EACO87B,EAAW,EACd,QAAgB,QAChB,MACA,QAAO,KAAkB,OAC1B0yC,EAEP,CAjCW,CAiCTf,GAEEoB,EAAQ,WACR,SAASA,EAAKnB,EAAaxoC,GACvBllC,KAAK0tE,YAAcA,EACnB1tE,KAAKklC,SAAWA,EAChBllC,KAAKf,sBAAwB,KAC7Be,KAAK4pB,KAAO,IAChB,CA6BA,OA5BAilD,EAAKrxE,UAAUkO,KAAO,SAAU1M,EAAgBM,GAC5CU,KAAKf,sBAAwBK,EAC7BU,KAAK8uE,aAAa9uE,KAAKhO,MAC3B,EACA68E,EAAKrxE,UAAUsxE,aAAe,SAAU7rE,GACpC,IAAI3D,GAAkB,QAAsB2D,EAAUjD,KAAKf,uBACvD2qB,EAAO5pB,KAAK4pB,KACXA,EAMDA,EAAKle,KAAKzI,EAAU3D,KALpBsqB,EAAO5pB,KAAK4pB,KAAO5pB,KAAK0tE,YAAYpvE,UAC/BoN,KAAKzI,EAAU3D,GACpBU,KAAKklC,SAAS/7C,IAAIygC,GAK1B,EACAilD,EAAKrxE,UAAUuO,OAAS,WACpB,IAAI6d,EAAO5pB,KAAK4pB,KAChB5pB,KAAKf,sBAAwB,KACzB2qB,GACAA,EAAK7d,QAEb,EACO+vB,EAAW,EACd,QAAgB,QAChB,MACA,QAAO,KAAkB,OAC1B+yC,EAEP,CApCW,GAsCPx7D,EAAU,aACd,SAAS07D,EAAuBC,EAAOC,GACnC,IAAI9kF,EAAS6kF,EAAM7kF,OAInB,IAHI8kF,EAAa,IACbA,GAA0B,GAEvBA,EAAa9kF,IAAU8kF,EAC1BC,EAAsBF,EAAMC,GAAY3vE,gBAAiB2vE,EAAY9kF,EAE7E,CACA,SAASglF,EAA0Bzd,EAAQnlE,EAAMc,EAAOlD,EAAQsC,GAC5D,IAAIuS,EAAiB,CAAC,EAClBM,GAAkB,QAAsBN,EAAgB0yD,EAAOvyD,MAAMG,iBASzE,YARmB,IAAR7S,GACPuS,EAAe0yD,EAAOjlE,KAAOA,EAC7BuS,EAAe0yD,EAAO1/D,OAASzF,GAG/ByS,EAAe0yD,EAAOsZ,OAASz+E,EAEnC2iF,EAAsB5vE,EAAiBjS,EAAOlD,GACvCmV,CACX,CACA,SAAS4vE,EAAsB5vE,EAAiBjS,EAAOlD,GACnD,IAAI2zE,EAAmB,IAAVzwE,EACTgsB,EAAQhsB,IAAUlD,EAAS,EAC3BilF,EAAO/hF,EAAQ,GAAM,EACzBiS,EAAgB+vE,OAAShiF,EACzBiS,EAAgBgwE,OAASxR,EACzBx+D,EAAgBiwE,MAAQl2D,EACxB/Z,EAAgBkwE,UAAY1R,GAASzkD,GACrC/Z,EAAgBmwE,MAAQL,EACxB9vE,EAAgBowE,MAAQN,CAC5B,CACA,SAASO,EAAyBziC,EAAai9B,GAC3C,OAAOj9B,EAAY0iC,qBACdhoF,QAAO,SAAUioF,GAAM,OAAOA,EAAGC,mBAAqB3F,CAAU,IAAG,GACnE3+E,WACAy/E,MACA7+C,gBACT,CACA,SAAS2jD,EAAiB9rE,GAEtB,IADA,IAAI+rE,GAAY,EACT/rE,aAAsB,MACzBA,EAAaA,EAAWA,WAE5B,KAAOA,aAAsB,MACzBA,EAAaA,EAAWA,WACxB+rE,GAAY,EAEhB,OAAOA,EAAY/rE,EAAa,IACpC,CACA,SAASgsE,EAAUhsE,GACf,KAAOA,aAAsB,MAAiB,CAC1C,GAAwB,YAApBA,EAAW7a,KACX,OAAO,EAEX6a,EAAaA,EAAWA,UAC5B,CACA,OAAO,CACX,CACA,SAASisE,EAAqB1uE,GACtBA,EAAQxD,MAAQwD,EAAQ6qB,OAAShZ,EACjC7R,EAAQxD,KAAK,MAERwD,EAAQ0nE,uBACb1nE,EAAQ0nE,uBAEhB,CACA,SAAS3iF,EAAQka,EAAOpe,EAAMihC,EAAS2rD,GACnC,IAAK3rD,EACD,OAAO7iB,EAAMla,QAAQlE,GAGzB,IADA,IAAI8H,EAASsW,EAAMtW,OACVkD,EAAQ4hF,GAAc,EAAG5hF,EAAQlD,EAAQkD,IAC9C,GAAIi2B,EAAQ7iB,EAAMpT,GAAQhL,GACtB,OAAOgL,EAGf,OAAQ,CACZ,CAEA,IAAI8iF,EAAuB,WACvB,SAASA,IACT,CAwLA,OAvLAA,EAAoB3yE,UAAU4yE,sBAAwB,SAAU9vE,EAAiB2qE,GAC7E,OAAO3qE,EAAgBI,iBAAiBuqE,EAC5C,EACAkF,EAAoB3yE,UAAU6yE,gBAAkB,SAAU3e,EAAQuZ,GAC9D,IAAI3mE,EAAQtE,KACRswE,EAAU5e,EACV6e,EAActF,EAAM9gF,OACxB,GAAK8gF,GAAyB,IAAhBsF,EAAd,CAIA,IAAIxlB,EAAWulB,EAAQtB,QACnBwB,EAAczlB,EAAS5gE,OAC3B,GAAoB,IAAhBqmF,EAIJ,GAAIF,EAAQG,sBAAuB,CAM/B,IALA,IAAIC,EAAmB3lB,EAAS5yD,MAAM,GAClCw4E,EAA2BL,EAAQtF,MACnC4F,EAAYN,EAAQhtD,UACpButD,EAA2B,GAC3BC,EAAgB,GACXzjF,EAAQ,EAAGA,EAAQmjF,EAAanjF,IAAS,CAC9C,IAAIu8B,EAAO8mD,EAAiBrjF,GACxB0jF,EAAUnnD,EAAK5qB,eAAe2xE,IACU,IAAxCpqF,EAAQ0kF,EAAO8F,EAASH,GACxBE,EAAclnF,KAAKggC,GAGnBinD,EAAyBjnF,KAAKmnF,EAEtC,CACA,IAAIC,OAAc,EACdC,OAAgB,EAChBJ,EAAyB1mF,OAAS,GAClC8mF,EAAgBX,EAAQY,YAAYJ,GAAe,GAAOR,EAAQG,uBAClEO,EAAc,WACV,IAAK,IAAI3jF,EAAQ,EAAGA,EAAQkjF,EAAaljF,IAAS,CAC9C,IAAIhL,EAAO4oF,EAAM59E,GACb8jF,EAAc5qF,EAAQsqF,EAA0BxuF,EAAMuuF,EAAWvjF,GACjEu8B,OAAO,EACX,IAAqB,IAAjBunD,EAAoB,CACpB,IAAI7xE,EAAkB6vE,EAA0BmB,EAASrF,EAAM59E,GAAQA,EAAOkjF,GAC9ED,EAAQc,WAAW/jF,EAAOiS,EAAgBN,eAAgBM,GAC1DuxE,EAAyBlvE,OAAOtU,EAAO,OAAGO,EAC9C,MACSujF,IAAgB9jF,GACrBu8B,EAAOmhC,EAASomB,GAChBN,EAAyBM,QAAevjF,IAGxCg8B,EAAOmhC,EAASomB,GAChBb,EAAQe,SAASF,EAAa9jF,GAC9BwjF,EAAyBlvE,OAAOwvE,EAAa,GAC7CN,EAAyBlvE,OAAOtU,EAAO,OAAGO,IAE1Cg8B,GACAslD,EAAsBtlD,EAAKtqB,gBAAiBjS,EAAOkjF,EAE3D,CACAjsE,EAAMgtE,qBAAqBhB,EAASrF,EACxC,IAGAgG,EAAgBX,EAAQiB,gBAAe,GAAOjB,EAAQG,uBACtDO,EAAc,WAAc,OAAO1sE,EAAMktE,gCAAgClB,EAASrF,EAAQ,GAE1FgG,aAAyBvjF,EACzBujF,EAActjF,KAAKqjF,GAGnBA,GAER,MAEIhxE,KAAKsxE,qBAAqBhB,EAASrF,QA9DnCjrE,KAAKwxE,gCAAgClB,EAASrF,EAJlD,MAFIqF,EAAQiB,gBAAe,GAAOjB,EAAQG,sBAsE9C,EACAN,EAAoB3yE,UAAUg0E,gCAAkC,SAAU9f,EAAQuZ,GAC9E,IAAK,IAAI3zE,EAAI,EAAGsI,EAAKqrE,EAAM9gF,OAAQmN,EAAIsI,EAAItI,IAAK,CAC5C,IAAIgI,EAAkB6vE,EAA0Bzd,EAAQuZ,EAAM3zE,GAAIA,EAAGsI,GACrE8xD,EAAO+f,QAAQnyE,EAAgBN,eAAgBM,EACnD,CACJ,EACA6wE,EAAoB3yE,UAAU8zE,qBAAuB,SAAU5f,EAAQuZ,GAGnE,IAFA,IAAIsF,EAActF,EAAM9gF,OACpBqmF,EAAc9e,EAAOggB,YAClBlB,EAAcD,GACjBC,IACA9e,EAAOigB,WAAWnB,GAAa,GAAO9e,EAAO+e,uBAGjD,IADA,IAAIzF,EAAQtZ,EAAOsZ,MACV1zE,EAAI,EAAGA,EAAIk5E,EAAal5E,IAAK,CAClC,IAAIsyB,EAAO8nC,EAAO9nC,KAAKtyB,GACnB+hB,EAAO/hB,IAAMi5E,EAAc,EAC3BqB,EAAe,IAANt6E,IAAY+hB,EACrBra,EAAiB4qB,EAAK5qB,eACtBM,EAAkBsqB,EAAKtqB,gBACvBN,EAAegsE,KAAWC,EAAM3zE,IAC7BgI,EAAgBkwE,UAAYoC,GAC5BtyE,EAAgBiwE,QAAUl2D,IAGjCra,EAAegsE,GAASC,EAAM3zE,GAC9BgI,EAAgBkwE,QAAUoC,EAC1BtyE,EAAgBiwE,MAAQl2D,EACxBq4C,EAAOmgB,eAAejoD,GAC1B,CACA,IAAStyB,EAAIk5E,EAAal5E,EAAIi5E,EAAaj5E,IACnCgI,EAAkB6vE,EAA0Bzd,EAAQuZ,EAAM3zE,GAAIA,EAAGi5E,GACrE7e,EAAO+f,QAAQnyE,EAAgBN,eAAgBM,EAEvD,EACA6wE,EAAoB3yE,UAAUs0E,gBAAkB,SAAUpgB,EAAQjxD,EAAOgG,GACrE,IAAInC,EAAQtE,KACZ,GAAI0xD,EAAOqgB,gBAAX,CACI,IAAK,IAAIz6E,EAAI,EAAGsI,EAAK6G,EAAQtc,OAAQmN,EAAIsI,IAAMtI,EAAG,CAC9C,IAAI+jC,EAAK50B,EAAQnP,GAAIjK,EAAQguC,EAAGhuC,MAAOuX,EAAUy2B,EAAGz2B,QAASC,EAAaw2B,EAAGx2B,YAC7E,QAAY6sD,EAAOqgB,gBAAiB1kF,EAAOuX,EAASC,EACxD,CACA6sD,EAAOsgB,QAAUvxE,EAAMtI,MAAM,EAEjC,KAPA,CAQA,IAAI85E,EAAejyE,KAAKkyE,YAAYxgB,EAAQjxD,EAAMtI,MAAM,GAAIsO,GAC5D,GAAIwrE,aAAwBvkF,EAAS,CACjC,IAAIykF,EAAkBzgB,EAAOqgB,gBAAkB,GAC3CK,EAAqB,WACrB,IAAKD,EAAgBhoF,OAGjB,OAFAunE,EAAOqgB,qBAAkBnkF,OACzB8jE,EAAOsgB,aAAUpkF,GAGrB,IAAIykF,EAAc/tE,EAAM4tE,YAAYxgB,EAAQA,EAAOsgB,QAASG,IAAoBzkF,EAAQD,UACxF0kF,EAAkBzgB,EAAOqgB,gBAAkB,GAC3CM,EAAY1kF,KAAKykF,EACrB,EACAH,EAAatkF,KAAKykF,EACtB,CAfA,CAgBJ,EACAjC,EAAoB3yE,UAAU00E,YAAc,SAAUxgB,EAAQjxD,EAAOgG,GAIjE,IAHA,IAAInC,EAAQtE,KACRsyE,EAAc,EACdC,EAAa,GACRj7E,EAAI,EAAGsI,EAAK6G,EAAQtc,OAAQmN,EAAIsI,IAAMtI,EAAG,CAG9C,IAFA,IAAIqK,EAAS8E,EAAQnP,GAEZoO,EAAI,EAAGouD,EADFnyD,EAAOiD,QACQza,OAAQub,EAAIouD,IAAMpuD,EAAG,CAC9C,IAAI8sE,EAAgB9gB,EAAOigB,WAAWhwE,EAAOtU,MAAQilF,EAAcC,EAAWpoF,QAAQ,GAClFqoF,aAAyB9kF,GACzB6kF,EAAW3oF,KAAK4oF,EAExB,CACAF,GAAe3wE,EAAOkD,UAC1B,CACA,GAAI0tE,EAAWpoF,OAAS,EACpB,OAAOuD,EAAQkT,IAAI2xE,GAAY5kF,MAAK,WAChC,IAAI8kF,EAAiBnuE,EAAMouE,oBAAoBhhB,EAAQjxD,EAAOgG,GAC9DsoE,EAAuBrd,EAAOsd,QAASyD,EAC3C,IAEJ,IAAIA,EAAiBzyE,KAAK0yE,oBAAoBhhB,EAAQjxD,EAAOgG,GAC7DsoE,EAAuBrd,EAAOsd,QAASyD,EAE3C,EACAtC,EAAoB3yE,UAAUk1E,oBAAsB,SAAUhhB,EAAQjxD,EAAOgG,GAIzE,IAHA,IAAIksE,EACAF,EACA7pE,EAAcnI,EAAMtW,OACfmN,EAAI,EAAGsI,EAAK6G,EAAQtc,OAAQmN,EAAIsI,IAAMtI,EAAG,CAC9C,IAAIqK,EAAS8E,EAAQnP,GACjBs7E,EAAWD,EAAchxE,EAAOtU,MAChCpF,EAAM0Z,EAAOtU,MAAQsU,EAAOkD,WAIhC,KAHI,MAAO4tE,GAA6DA,EAAiB9wE,EAAOtU,SAC5FolF,EAAiBE,GAEdC,EAAW3qF,IAAO2qF,EAAU,CAC/B,IAAItzE,EAAkB6vE,EAA0Bzd,EAAQjxD,EAAMmyE,GAAWA,EAAUhqE,GACnF8oD,EAAO0f,WAAWwB,EAAUtzE,EAAgBN,eAAgBM,EAChE,CACJ,CACA,OAAOmzE,CACX,EACOtC,CACX,CA3L0B,GA6LtB0C,EAAqB,WACrB,SAASA,IACT,CAwFA,OAvFAA,EAAkBr1E,UAAU4yE,sBAAwB,SAAU9vE,EAAiB2qE,GAC3E,OAAO3qE,EAAgBorB,eAAeu/C,EAC1C,EACA4H,EAAkBr1E,UAAU6yE,gBAAkB,SAAU3e,EAAQuZ,GAC5D,IAAI3mE,EAAQtE,KACRixE,EAAgBvf,EAAO6f,gBAAe,GAAO7f,EAAO+e,uBACpDQ,aAAyBvjF,EACzBujF,EAActjF,MAAK,WAAc,OAAO2W,EAAMwuE,sBAAsBphB,EAAQuZ,EAAQ,IAGxFjrE,KAAK8yE,sBAAsBphB,EAAQuZ,EACvC,EACA4H,EAAkBr1E,UAAUs1E,sBAAwB,SAAUphB,EAAQuZ,GAClE,IACI3rE,EADAjS,EAAQ,EAEZ49E,EAAM1hF,SAAQ,SAAUyI,EAAOvF,GAC3B6S,EAAkB6vE,EAA0Bzd,EAAQ1/D,EAAO3E,EAAO49E,EAAM7hE,KAAM3c,GAC9EilE,EAAO+f,QAAQnyE,EAAgBN,eAAgBM,KAC7CjS,CACN,GACJ,EACAwlF,EAAkBr1E,UAAUs0E,gBAAkB,SAAUpgB,EAAQtvE,EAAK8mB,GACjE,IAAIzc,EACA6K,EACAsI,EACAN,EACAyzE,EACAH,EACAppE,EAEAgpE,EADAD,EAAa,GAEjB,IAAKj7E,EAAI,EAAGsI,EAAKsJ,EAAQ/e,OAAQmN,EAAIsI,IAAMtI,EAGvC,OADA7K,GADA+c,EAASN,EAAQ5R,IACJ7K,IACL+c,EAAOb,MACX,IAAK,SACDoqE,EAAc/yE,KAAKgzE,mBAAmBthB,EAAQjlE,IAC9C+lF,EAAgB9gB,EAAOigB,WAAWoB,GAAa,GAAOrhB,EAAO+e,kCAChC/iF,GACzB6kF,EAAW3oF,KAAK4oF,GAEpBlzE,EAAkB6vE,EAA0Bzd,EAAQtvE,EAAIuH,IAAI8C,GAAMsmF,EAAa3wF,EAAIgnB,KAAM3c,GACzFilE,EAAO0f,WAAW2B,EAAazzE,EAAgBN,eAAgBM,GAC/D,MACJ,IAAK,MACDszE,EAAWlhB,EAAOggB,aAAetvF,EAAIgnB,KAAO,EAAIsoD,EAAOggB,YAActvF,EAAIgnB,KAAO,EAChF9J,EAAkB6vE,EAA0Bzd,EAAQtvE,EAAIuH,IAAI8C,GAAMmmF,EAAUxwF,EAAIgnB,KAAM3c,GACtFilE,EAAO0f,WAAWhvF,EAAIgnB,KAAO,EAAG9J,EAAgBN,eAAgBM,GAChE,MACJ,IAAK,SACD,QAAwB1R,IAApB4b,EAAOtG,SACP,OAEJ6vE,EAAc/yE,KAAKgzE,mBAAmBthB,EAAQjlE,IAC9C+lF,EAAgB9gB,EAAOigB,WAAWoB,GAAa,GAAOrhB,EAAO+e,kCAChC/iF,GACzB6kF,EAAW3oF,KAAK4oF,GAEpB,MACJ,IAAK,QACD9gB,EAAO6f,gBAAe,GAAO7f,EAAO+e,uBACpC,MACJ,QACI,SAGR8B,EAAWpoF,OAAS,EACpBuD,EAAQkT,IAAI2xE,GAAY5kF,MAAK,WACzBohF,EAAuBrd,EAAOsd,QAAS,EAC3C,IAGAD,EAAuBrd,EAAOsd,QAAS,EAE/C,EACA6D,EAAkBr1E,UAAUw1E,mBAAqB,SAAUthB,EAAQjlE,GAC/D,IAAI6K,EACAsI,EAEJ,IAAKtI,EAAI,EAAGsI,EAAK8xD,EAAOggB,YAAap6E,EAAIsI,IAAMtI,EAE3C,GADQo6D,EAAO9nC,KAAKtyB,GACV0H,eAAe0yD,EAAOjlE,OAASA,EACrC,OAAO6K,CAInB,EACOu7E,CACX,CA3FwB,GA6FpBI,EAAsB,WACtB,SAASA,IACT,CAMA,OALAA,EAAmBz1E,UAAU6yE,gBAAkB,SAAU3e,EAAQuZ,GAC7DvZ,EAAO6f,gBAAe,EAC1B,EACA0B,EAAmBz1E,UAAU4yE,sBAAwB,SAAU9vE,EAAiB2qE,GAChF,EACOgI,CACX,CATyB,GAWrBC,EAAwB,WACxB,SAASA,IACT,CAoCA,OAnCAA,EAAqB11E,UAAU4yE,sBAAwB,WACnD,OAAO,IACX,EACA8C,EAAqB11E,UAAU6yE,gBAAkB,SAAU3e,EAAQ1/D,GAC/D,IAAIsS,EAAQtE,KACRixE,EAAgBvf,EAAO6f,gBAAe,GAAO7f,EAAO+e,uBACpDQ,aAAyBvjF,EACzBujF,EAActjF,MAAK,WAAc,OAAO2W,EAAMwuE,sBAAsBphB,EAAQ1/D,EAAQ,IAGxFgO,KAAK8yE,sBAAsBphB,EAAQ1/D,EACvC,EACAkhF,EAAqB11E,UAAUs1E,sBAAwB,SAAUphB,EAAQ1/D,GACrE,IACIsF,EACAsI,EACAN,EACAwxE,EAJAqC,EAAiBzhB,EAAOggB,YAO5B,IADAZ,EAAgBqC,GADhBnhF,EAAQrQ,KAAK6yC,MAAMxiC,KAEC,EAIhB,IAHI8+E,EAAgBqC,IAChBrC,EAAgBqC,GAEf77E,EAAI,EAAGsI,EAAKkxE,EAAex5E,EAAIsI,IAAMtI,EACtCo6D,EAAOigB,WAAWwB,GAAkB77E,EAAI,IAAI,GAAOo6D,EAAO+e,2BALlE,CASA,IAAKn5E,EAAI67E,EAAgBvzE,EAAK5N,EAAOsF,EAAIsI,IAAMtI,EAC3CgI,EAAkB6vE,EAA0Bzd,EAAQp6D,EAAGA,EAAGsI,GAC1D8xD,EAAO+f,QAAQnyE,EAAgBN,eAAgBM,GAEnDyvE,EAAuBrd,EAAOsd,QAAS,EALvC,CAMJ,EACOkE,CACX,CAvC2B,GAyCvBE,EAAqB,WACrB,SAASA,IACT,CA2EA,OA1EAA,EAAkB51E,UAAU4yE,sBAAwB,SAAU9vE,EAAiB2qE,GAC3E,OAAO3qE,EAAgBqrB,eAAes/C,EAC1C,EACAmI,EAAkB51E,UAAU6yE,gBAAkB,SAAU3e,EAAQuZ,GAC5D,IAAI3mE,EAAQtE,KACRixE,EAAgBvf,EAAO6f,gBAAe,GAAO7f,EAAO+e,uBACpDQ,aAAyBvjF,EACzBujF,EAActjF,MAAK,WAAc,OAAO2W,EAAMwuE,sBAAsBphB,EAAQuZ,EAAQ,IAGxFjrE,KAAK8yE,sBAAsBphB,EAAQuZ,EACvC,EACAmI,EAAkB51E,UAAUs1E,sBAAwB,SAAUphB,EAAQuZ,GAClE,IACI3rE,EADAjS,EAAQ,EAEZ49E,EAAM1hF,SAAQ,SAAUyI,GACpBsN,EAAkB6vE,EAA0Bzd,EAAQ1/D,EAAO3E,EAAO49E,EAAM7hE,MACxEsoD,EAAO+f,QAAQnyE,EAAgBN,eAAgBM,KAC7CjS,CACN,GACJ,EACA+lF,EAAkB51E,UAAUs0E,gBAAkB,SAAUpgB,EAAQ7nE,EAAKqf,GACjE,IAAIlX,EACAsF,EACAsI,EACAN,EACAyzE,EACAvpE,EAEAgpE,EADAD,EAAa,GAEjB,IAAKj7E,EAAI,EAAGsI,EAAKsJ,EAAQ/e,OAAQmN,EAAIsI,IAAMtI,EAGvC,OADAtF,GADAwX,EAASN,EAAQ5R,IACFtF,MACPwX,EAAOb,MACX,IAAK,MACD,IAAIS,EAAOznB,KAAKC,IAAIiI,EAAIuf,KAAO,EAAG,GAClC9J,EAAkB6vE,EAA0Bzd,EAAQ1/D,EAAOoX,EAAMvf,EAAIuf,MACrEsoD,EAAO0f,WAAWhoE,EAAM9J,EAAgBN,eAAgBM,GACxD,MACJ,IAAK,SACDyzE,EAAc/yE,KAAKqzE,qBAAqB3hB,EAAQ1/D,IAChDwgF,EAAgB9gB,EAAOigB,WAAWoB,GAAa,GAAOrhB,EAAO+e,kCAChC/iF,GACzB6kF,EAAW3oF,KAAK4oF,GAEpB,MACJ,IAAK,QACD9gB,EAAO6f,gBAAe,GAAO7f,EAAO+e,uBACpC,MACJ,QACI,SAGR8B,EAAWpoF,OAAS,EACpBuD,EAAQkT,IAAI2xE,GAAY5kF,MAAK,WACzBohF,EAAuBrd,EAAOsd,QAAS,EAC3C,IAGAD,EAAuBrd,EAAOsd,QAAS,EAE/C,EACAoE,EAAkB51E,UAAU61E,qBAAuB,SAAU3hB,EAAQ1/D,GACjE,IAAIsF,EACAsI,EAEJ,IAAKtI,EAAI,EAAGsI,EAAK8xD,EAAOggB,YAAap6E,EAAIsI,IAAMtI,EAE3C,GADQo6D,EAAO9nC,KAAKtyB,GACV0H,eAAe0yD,EAAOsZ,SAAWh5E,EACvC,OAAOsF,CAInB,EACO87E,CACX,CA9EwB,GAgFpBE,EAAyB,WACzB,SAASA,IACLtzE,KAAKuzE,SAAW,GAChBvzE,KAAKwzE,WAAa,GAClBxzE,KAAKyzE,aAAY,SAAUxI,GAAS,OAAOA,OAAuC,GAAG,IAAIgI,GACzFjzE,KAAKyzE,aAAY,SAAUxI,GAAS,OAAOA,aAAiB5gF,KAAO,GAAG,IAAI8lF,GAC1EnwE,KAAKyzE,aAAY,SAAUxI,GAAS,OAAOA,aAAiBpiF,GAAK,GAAG,IAAIgqF,GACxE7yE,KAAKyzE,aAAY,SAAUxI,GAAS,OAAOA,aAAiBliF,GAAK,GAAG,IAAIqqF,GACxEpzE,KAAKyzE,aAAY,SAAUxI,GAAS,MAAwB,iBAAVA,CAAoB,GAAG,IAAIiI,EACjF,CAcA,OAbAI,EAAsB91E,UAAUi2E,YAAc,SAAUnwD,EAASv5B,GAC7DiW,KAAKuzE,SAAS3pF,KAAK05B,GACnBtjB,KAAKwzE,WAAW5pF,KAAKG,EACzB,EACAupF,EAAsB91E,UAAUk2E,YAAc,SAAUzI,GAEpD,IADA,IAAIsI,EAAWvzE,KAAKuzE,SACXj8E,EAAI,EAAGsI,EAAK2zE,EAASppF,OAAQmN,EAAIsI,IAAMtI,EAC5C,GAAIi8E,EAASj8E,GAAG2zE,GACZ,OAAOjrE,KAAKwzE,WAAWl8E,GAG/B,OAAO,IACX,EACOg8E,CACX,CAxB4B,GA0BxBK,EAA6B,CAAC,QAAS,KAAM,OAAQ,SAAU,OAAQ,OAAQ,QACnF,SAASC,EAA0B1mC,GAC/B,IAAI1c,EAAI0c,EAAYvkC,KAChBvf,EAAyB,OAAlBonC,EAAE2a,YAAuB3a,EAAE2a,YAAc3a,EAAE/O,cACtD,OAAqD,IAA9CkyD,EAA2BptF,QAAQ6C,KAAiBonC,EAAEqjD,iBAAmBrjD,EAAEsjD,aAAetjD,EAAEujD,gBAAkBvjD,EAAEwjD,iBAAmBxjD,EAAEyjD,gBACrIzjD,EAAEk9C,aAAe+C,EAAsBjgD,EAAEk9C,cACzCxgC,EAAYwgC,aAAe+C,EAAsBvjC,EAAYwgC,YACxE,CACA,SAASwG,EAAwBhnC,GAC7B,IAAIinC,EAAYjnC,EAAY0iC,qBAC5B,GAAIuE,EAEA,IADA,IAAI78E,EAAI68E,EAAUhqF,OACXmN,KACH,GAAIs8E,EAA0BO,EAAU78E,IACpC,OAAO,EAInB,OAAO41C,EAAYwgC,aAAe+C,EAAsBvjC,EAAYwgC,YACxE,CACA,SAAS+C,EAAsB/C,GAC3B,GAAI,2BAA4BA,EAC5B,OAAOA,EAAY0G,uBAGvB,GADA1G,EAAY0G,wBAAyB,EACjC1G,EAAYA,YAEZ,OADAA,EAAY0G,uBAAyB3D,EAAsB/C,EAAYA,aAChEA,EAAY0G,uBAEvB,GAAI1G,EAAY9tB,SAASpkD,cAAc,eAEnC,OADAkyE,EAAY0G,wBAAyB,GAC9B,EAEX,IAAK,IAAIvyE,KAAM6rE,EAAYpX,aACvB,GAAI4d,EAAwBxG,EAAYpX,aAAaz0D,IAEjD,OADA6rE,EAAY0G,wBAAyB,GAC9B,EAIf,OADA1G,EAAY0G,wBAAyB,GAC9B,CACX,CAEA,IAAIC,EAAoB,WACpB,SAASA,EAAiBtpF,GACtBK,OAAOC,OAAO2U,KAAM,CAChBgrE,MAAO,QACPyF,uBAAuB,GACxB1lF,EACP,CAkCA,OAjCAspF,EAAiB72E,UAAUk0E,UAAY,WACnC,MAAM,IAAI1mE,MAAM,sCACpB,EACAqpE,EAAiB72E,UAAUwxE,MAAQ,WAC/B,MAAM,IAAIhkE,MAAM,kCACpB,EACAqpE,EAAiB72E,UAAUosB,KAAO,SAAUv8B,GACxC,MAAM,IAAI2d,MAAM,iCACpB,EACAqpE,EAAiB72E,UAAU8lB,QAAU,WACjC,MAAM,IAAItY,MAAM,oCACpB,EACAqpE,EAAiB72E,UAAUi0E,QAAU,SAAUzyE,EAAgBM,GAC3D,MAAM,IAAI0L,MAAM,oCACpB,EACAqpE,EAAiB72E,UAAU4zE,WAAa,SAAU/jF,EAAO2R,EAAgBM,GACrE,MAAM,IAAI0L,MAAM,uCACpB,EACAqpE,EAAiB72E,UAAU6zE,SAAW,SAAUiD,EAAaC,GACzD,MAAM,IAAIvpE,MAAM,qCACpB,EACAqpE,EAAiB72E,UAAU+zE,eAAiB,SAAU1D,EAAe2G,GACjE,MAAM,IAAIxpE,MAAM,2CACpB,EACAqpE,EAAiB72E,UAAU0zE,YAAc,SAAUJ,EAAejD,EAAe2G,GAC7E,MAAM,IAAIxpE,MAAM,uCACpB,EACAqpE,EAAiB72E,UAAUm0E,WAAa,SAAUtkF,EAAOwgF,EAAe2G,GACpE,MAAM,IAAIxpE,MAAM,uCACpB,EACAqpE,EAAiB72E,UAAUq0E,eAAiB,SAAUjoD,GAClD,MAAM,IAAI5e,MAAM,2CACpB,EACOqpE,CACX,CAzCuB,GA2CnBI,EAA0B,uBAC1BC,EAAU,SAAUp6B,GAEpB,SAASo6B,EAAOhH,EAAaxgC,EAAahI,EAAUD,EAAe3kC,EAAiBq0E,GAChF,IAAIrwE,EAAQg2C,EAAOt8C,KAAKgC,KAAM,CAC1BgrE,MAAO,OACPyF,sBAAuBA,EAAsB/C,MAC3C1tE,KAaN,OAZAsE,EAAMopE,YAAcA,EACpBppE,EAAM4oC,YAAcA,EACpB5oC,EAAM4gC,SAAWA,EACjB5gC,EAAMJ,gBAAkB+gC,EAAc/gC,gBACtCI,EAAMhE,gBAAkBA,EACxBgE,EAAM7X,IAAM,MACZ6X,EAAMtS,MAAQ,QACdsS,EAAMqwE,gBAAkBA,EACxBrwE,EAAMswE,gBAAiB,EACvBtwE,EAAM8nB,iBAAmBujD,EAAyBrrE,EAAM4oC,YAAa,cACrE5oC,EAAM2rE,UAAYA,EAAU3rE,EAAM8nB,kBAClC9nB,EAAMmsE,sBAAwBA,EAAsB/C,GAC7CppE,CACX,CA0KA,IAAIuwE,EAmBJ,OAhNA56B,EAAUy6B,EAAQp6B,GAoBlBu6B,EAAWH,EACXA,EAAOl3E,UAAUQ,KAAO,SAAU+D,EAASuqE,GACvCtsE,KAAK+B,GAAS/B,KAAKirE,MAAOqB,EAC9B,EACAoI,EAAOl3E,UAAUkO,KAAO,SAAU1M,EAAgBM,GAC9CU,KAAKb,MAAQ,CAAEH,eAAgBA,EAAgBM,gBAAiBA,GAChE,IAAI4tC,EAAcltC,KAAKktC,YACjBunC,KAA2BvnC,IAC7BA,EAAYunC,GAA2Bz0E,KAAK80E,mCAEhD90E,KAAK+0E,eAAiB7nC,EAAYunC,GAClCz0E,KAAKg1E,cACT,EACAN,EAAOl3E,UAAUuO,OAAS,WACtB/L,KAAKb,MAAQ,KACba,KAAKirE,MAAQ,KACbjrE,KAAK+0E,eAAiB,KACtB/0E,KAAKklC,SAASynC,WAAU,GAAM,GAC9B3sE,KAAKi1E,wBACT,EACAP,EAAOl3E,UAAUy3E,uBAAyB,WAClCj1E,KAAKsvB,qBACLtvB,KAAKsvB,mBAAmBzuB,YAAYb,KAAKk1E,YAAal1E,MACtDA,KAAKsvB,mBAAqB,KAC1BtvB,KAAKk1E,YAAc,KAE3B,EACAR,EAAOl3E,UAAUw3E,aAAe,WAC5B,IAAI1wE,EAAQtE,KAEZ,GADAA,KAAKi1E,yBACAj1E,KAAKb,MAAV,CAGA,IAAI8rE,EAAQjrE,KAAKirE,MAEjB,GADAjrE,KAAKjW,SAAWiW,KAAK20E,gBAAgBjB,YAAYzI,IAC5CjrE,KAAKjW,SACN,MAAM,IAAIihB,MAAM,cAAcjkB,OAAOiZ,KAAKosB,iBAAkB,wBAE3DpsB,KAAKiwE,WAAcjwE,KAAKm1E,2BACzBn1E,KAAKo1E,qBAETp1E,KAAK40E,gBAAiB,EACtB50E,KAAKjW,SAASsmF,gBAAgBrwE,KAAMirE,GACpCjrE,KAAKM,gBAAgB6H,UAAUW,gBAAe,WAC1CxE,EAAMswE,gBAAiB,CAC3B,GAbA,CAcJ,EACAF,EAAOl3E,UAAU63E,oBAAsB,WACnC,IAAIpxE,EAAa8rE,EAAiB/vE,KAAKosB,kBACvC,OAAKnoB,EAGEA,EAAWG,SAASpE,KAAKb,MAAO,MAF5B,IAGf,EACAu1E,EAAOl3E,UAAU83E,wBAA0B,SAAUltE,EAAYkkE,GACxDtsE,KAAKsvB,qBAGNtvB,KAAK40E,gBAGT50E,KAAKjW,SAAS+nF,gBAAgB9xE,KAAMoI,EAAYkkE,GACpD,EACAoI,EAAOl3E,UAAU+3E,6BAA+B,SAAUntE,EAAYkkE,GAClE,IAAIhoE,EAAQtE,KACZ,GAAKA,KAAKsvB,qBAGNtvB,KAAK40E,eAAT,CAGA50E,KAAK40E,gBAAiB,EACtB,IAAIY,EAAWx1E,KAAKosB,iBAAiBhoB,SAASpE,KAAKb,MAAOa,KAAKkE,iBAC/DlE,KAAKM,gBAAgB6H,UAAUW,gBAAe,WAAc,OAAOxE,EAAMswE,gBAAiB,CAAO,IAC7FY,IAAax1E,KAAKirE,MAClBjrE,KAAKg1E,eAGLh1E,KAAKirE,MAAQuK,CARjB,CAUJ,EACAd,EAAOl3E,UAAU23E,wBAA0B,WACvC,IAAIlK,EAAQjrE,KAAKq1E,sBACbtrF,EAAWiW,KAAK20E,gBAAgBjB,YAAYzI,GAChD,QAAKlhF,IAGLiW,KAAKsvB,mBAAqBvlC,EAASqmF,sBAAsBpwE,KAAKM,gBAAiB2qE,KAC1EjrE,KAAKsvB,qBAGVtvB,KAAKk1E,YAAc,+BACnBl1E,KAAKsvB,mBAAmBpvB,UAAUF,KAAKk1E,YAAal1E,OAC7C,GACX,EACA00E,EAAOl3E,UAAU43E,mBAAqB,WAClC,IAAInK,EAAQjrE,KAAKirE,MACjBjrE,KAAKsvB,mBAAqBtvB,KAAKjW,SAASqmF,sBAAsBpwE,KAAKM,gBAAiB2qE,GAChFjrE,KAAKsvB,qBACLtvB,KAAKk1E,YAAc,0BACnBl1E,KAAKsvB,mBAAmBpvB,UAAUF,KAAKk1E,YAAal1E,MAE5D,EACA00E,EAAOl3E,UAAUs3E,gCAAkC,WAC/C,IAAIpH,EAAc1tE,KAAK0tE,YAAYA,YACnC,GAAIA,EAAa,CACb,IAAI9tB,EAAW8tB,EAAY9tB,SACvB0W,EAAeoX,EAAYpX,aAC/B,GAAIue,EAASY,gBACT,OAAOC,EAAgCpf,GAE3C,GAAIqf,EAAiB/1B,GAAY,EAC7B,OAEJ,IAAIg2B,EAAkBC,EAAqBj2B,GAC3C,IAAKg2B,EAAgB76B,aAAa,gBAC9B,OAEJ,IAAI+6B,EAA0BF,EAAgB/zD,aAAa,gBAC3D,OAAO6zD,EAAgCpf,EAAcwf,EACzD,CAEJ,EACApB,EAAOl3E,UAAUk0E,UAAY,WAAc,OAAO1xE,KAAKklC,SAAS6lB,SAAS5gE,MAAQ,EACjFuqF,EAAOl3E,UAAUwxE,MAAQ,WAAc,OAAOhvE,KAAKklC,SAAS6lB,QAAU,EACtE2pB,EAAOl3E,UAAUosB,KAAO,SAAUv8B,GAAS,OAAO2S,KAAKklC,SAAS6lB,SAAS19D,EAAQ,EACjFqnF,EAAOl3E,UAAU8lB,QAAU,WACvB,IAAIyxD,EAAiB/0E,KAAK+0E,eAC1B,OAAOA,EACDA,EAAe3oD,iBAAiBhoB,SAASpE,KAAKb,MAAO41E,EAAe7wE,iBACpE,IACV,EACAwwE,EAAOl3E,UAAUi0E,QAAU,SAAUzyE,EAAgBM,GACjD,IAAIsqB,EAAO5pB,KAAK0tE,YAAYpvE,SAC5BsrB,EAAKle,KAAK1M,EAAgBM,GAC1BU,KAAKklC,SAAS/7C,IAAIygC,EACtB,EACA8qD,EAAOl3E,UAAU4zE,WAAa,SAAU/jF,EAAO2R,EAAgBM,GAC3D,IAAIsqB,EAAO5pB,KAAK0tE,YAAYpvE,SAC5BsrB,EAAKle,KAAK1M,EAAgBM,GAC1BU,KAAKklC,SAAS6wC,OAAO1oF,EAAOu8B,EAChC,EACA8qD,EAAOl3E,UAAU6zE,SAAW,SAAUiD,EAAaC,GAC/Cv0E,KAAKklC,SAAS8wC,KAAK1B,EAAaC,EACpC,EACAG,EAAOl3E,UAAU+zE,eAAiB,SAAU1D,EAAe2G,GACvD,OAAOx0E,KAAKklC,SAASynC,UAAUkB,EAAe2G,EAClD,EACAE,EAAOl3E,UAAU0zE,YAAc,SAAUJ,EAAejD,EAAe2G,GACnE,OAAOx0E,KAAKklC,SAAS+wC,WAAWnF,EAAejD,EAAe2G,EAClE,EACAE,EAAOl3E,UAAUm0E,WAAa,SAAUtkF,EAAOwgF,EAAe2G,GAC1D,OAAOx0E,KAAKklC,SAASgxC,SAAS7oF,EAAOwgF,EAAe2G,EACxD,EACAE,EAAOl3E,UAAUq0E,eAAiB,SAAUjoD,GAGxC,IAFA,IAAIusD,EAAQvsD,EACRlkB,EAAIywE,EAAMC,SAASjsF,OAChBub,KACHwqE,EAAqBiG,EAAMC,SAAS1wE,IAGxC,IADAA,EAAIywE,EAAMxxC,YAAYx6C,OACfub,KAEH,IADA,IAAI+qB,EAAI0lD,EAAMxxC,YAAYj/B,GAAG2wE,gBAAgBlsF,OACtCsmC,KAEHy/C,EADciG,EAAMxxC,YAAYj/B,GAAG2wE,gBAAgB5lD,GAAGjvB,QAIlE,EAEAkzE,EAAOe,iBAAkB,EACzB35C,EAAW,CACP,MACD44C,EAAOl3E,UAAW,aAAS,GAC9Bs+B,EAAW,CACP,MACD44C,EAAOl3E,UAAW,aAAS,GAC9Bs+B,EAAW,CACP,MACD44C,EAAOl3E,UAAW,WAAO,GAC5Bs+B,EAAW,CACP,MACD44C,EAAOl3E,UAAW,aAAS,GACrBq3E,EAAW/4C,EAAW,EAC3B,QAAgB,UAChB,MACA,QAAO,KAAkB,KAAmB,KAAU,KAAe,KAAiBw3C,IACvFoB,EAEP,CAlNa,CAkNXL,GACEqB,EAAkC,SAAUpf,EAAcggB,GAE1D,IADA,IAAIC,EAAiBnrF,OAAOoB,KAAK8pE,GACxBh/D,EAAI,EAAGA,EAAIi/E,EAAepsF,OAAQmN,IAAK,CAC5C,IAAIk/E,EAAgBD,EAAej/E,GACnC,QAA0B1J,IAAtB0oF,GAAmCE,IAAkBF,EAAzD,CAGA,IAAI7pE,EAAc6pD,EAAakgB,GAAe/pE,YAC9C,GAAIA,EACA,IAAK,IAAI7M,EAAK,EAAGA,EAAK6M,EAAYtiB,OAAQyV,IACtC,GAAuC,YAAnC6M,EAAY7M,GAAIusB,eAA8B,CAC9C,IAAIsqD,EAA2BhqE,EAAY7M,GAE3C,OADA6M,EAAY9K,OAAO/B,EAAI,GAChB62E,CACX,CARR,CAWJ,CACJ,EACId,EAAmB,SAAUp6B,GAG7B,IAFA,IAAImS,EAAanS,EAAGmS,WAChB5mD,EAAQ,EACHxP,EAAI,EAAGsI,EAAK8tD,EAAWvjE,OAAQyV,EAAKtI,IAAKA,EACf,IAA3Bo2D,EAAWp2D,GAAGs1D,YACZ9lD,EAGV,OAAOA,CACX,EACI+uE,EAAuB,SAAUt6B,GAEjC,IADA,IAAItxB,EAAasxB,EAAGtxB,WACE,OAAfA,GAAqB,CACxB,GAA4B,IAAxBA,EAAW2iC,SACX,OAAO3iC,EAEXA,EAAaA,EAAW0iC,WAC5B,CACA,OAAO,IACX,EAEI+pB,EAAuB,eACvBC,EAAmB,IAAI5vF,OAAO2vF,EAAsB,iCAIxD,SAASE,EAAiCC,GAClC,gBAAqBA,IAAgBA,EAAYC,sBACjDD,EAAYC,qBAAsB,EAClC,kBAAiBH,EAAkBE,GAE3C,CAEA,IAAIE,EAAQ,WACR,SAASA,EAAKl0F,EAASm0F,EAAUH,GAC7B72E,KAAKnd,QAAUA,EACfmd,KAAKg3E,SAAWA,EAChBh3E,KAAK62E,YAAcA,CACvB,CAuBA,OAtBAE,EAAK9qD,OAAS,WACV,MAAO,CAAC,aAAa,KAAU,QAAY,eAAc,GAC7D,EACA8qD,EAAKv5E,UAAU+uE,QAAU,WACrBqK,EAAiC52E,KAAK62E,YAC1C,EACAE,EAAKv5E,UAAUsxE,aAAe,SAAU7rE,GACpC,IAAIpgB,EAAUmd,KAAKnd,QACfm0F,EAAWh3E,KAAKg3E,SAChB/zE,EACA+zE,EAASC,YAAYp0F,EAAS6zF,GAG9BM,EAASE,SAASr0F,EAAS6zF,EAEnC,EACAK,EAAKv5E,UAAUkO,KAAO,SAAU1M,GAC5BgB,KAAK8uE,aAAa9uE,KAAKhO,MAC3B,EACO8pC,EAAW,EACd,QAAgB,SACjBi7C,EAEP,CA7BW,GA+BPI,GAAQ,WACR,SAASA,EAAKt0F,EAASm0F,EAAUH,GAC7B72E,KAAKnd,QAAUA,EACfmd,KAAKg3E,SAAWA,EAChBh3E,KAAK62E,YAAcA,CACvB,CAwBA,OAvBAM,EAAKlrD,OAAS,WACV,MAAO,CAAC,aAAa,KAAU,QAAY,eAAc,GAC7D,EACAkrD,EAAK35E,UAAU+uE,QAAU,WACrBqK,EAAiC52E,KAAK62E,YAC1C,EACAM,EAAK35E,UAAUsxE,aAAe,SAAU7rE,GAChCA,EACAjD,KAAKg3E,SAASE,SAASl3E,KAAKnd,QAAS6zF,GAGrC12E,KAAKg3E,SAASC,YAAYj3E,KAAKnd,QAAS6zF,EAEhD,EACAS,EAAK35E,UAAUkO,KAAO,SAAU1M,GAC5BgB,KAAK8uE,aAAa9uE,KAAKhO,MAC3B,EACAmlF,EAAK35E,UAAUxL,MAAQ,SAAUA,GAC7B,MAAM,IAAIgZ,MAAM,0BACpB,EACO8wB,EAAW,EACd,QAAgB,SACjBq7C,EAEP,CA9BW,GAgCPC,GAAiB,WACjB,SAASA,IACT,CAIA,OAHAA,EAAc55E,UAAU65E,SAAW,SAAUC,GACzC,MAAM,IAAItsE,MAAM,uOACpB,EACOosE,CACX,CAPoB,GAShBG,GAA8B,WAC9B,SAASA,EAA2BC,GAChCx3E,KAAKw3E,UAAYA,CACrB,CAWA,OAVAD,EAA2B/5E,UAAU8O,OAAS,SAAUmrE,GACpD,OAAIA,QACO,KAEJz3E,KAAKw3E,UAAUH,SAASI,EACnC,EAC6B37C,EAAW,EACpC,QAAe,iBACf,QAAOs7C,KACRG,EAEP,CAfiC,GAiB7BG,GAAe,WACf,SAASA,EAAYhK,EAAaxoC,GAC9BllC,KAAK0tE,YAAcA,EACnB1tE,KAAKklC,SAAWA,EAChBllC,KAAK4pB,KAAO,IAChB,CAgBA,OAfA8tD,EAAYl6E,UAAUkO,KAAO,SAAU1M,EAAgBM,GACjC,OAAdU,KAAK4pB,OACL5pB,KAAK4pB,KAAO5pB,KAAK0tE,YAAYpvE,SAC7B0B,KAAKklC,SAAS/7C,IAAI6W,KAAK4pB,OAE3B5pB,KAAK4pB,KAAKle,KAAK1M,EAAgBM,EACnC,EACAo4E,EAAYl6E,UAAUuO,OAAS,WAC3B/L,KAAK4pB,KAAK7d,QACd,EACc+vB,EAAW,EACrB,QAAgB,eAChB,MACA,QAAO,KAAkB,OAC1B47C,EAEP,CAtBkB,GAwBdC,GAAS,WACT,SAASA,EAAM90F,EAASslB,GACpBnI,KAAKnd,QAAUA,EACfmd,KAAKmI,UAAYA,EACjBnI,KAAK43E,YAAa,EAClB53E,KAAK63E,YAAa,CACtB,CAkDA,OAjDAF,EAAM1rD,OAAS,WACX,MAAO,CAAC,aAAa,IACzB,EACA0rD,EAAMn6E,UAAUsxE,aAAe,WACvB9uE,KAAK43E,WACL53E,KAAKwjC,SAGLxjC,KAAK63E,YAAa,CAE1B,EACAF,EAAMn6E,UAAUgmC,OAAS,WACrB,IAAIl/B,EAAQtE,KACRA,KAAKhO,MACLgO,KAAKmI,UAAUW,gBAAe,WACtBxE,EAAMtS,OACNsS,EAAMzhB,QAAQs/C,OAEtB,IAGAniC,KAAKnd,QAAQi1F,MAErB,EACAH,EAAMn6E,UAAUwvC,SAAW,WACvBhtC,KAAK43E,YAAa,EACd53E,KAAK63E,aACL73E,KAAK63E,YAAa,EAClB73E,KAAKwjC,UAETxjC,KAAKnd,QAAQ4R,iBAAiB,QAASuL,MACvCA,KAAKnd,QAAQ4R,iBAAiB,OAAQuL,KAC1C,EACA23E,EAAMn6E,UAAUu6E,SAAW,WACvB/3E,KAAK43E,YAAa,EAClB53E,KAAKnd,QAAQ6R,oBAAoB,QAASsL,MAC1CA,KAAKnd,QAAQ6R,oBAAoB,OAAQsL,KAC7C,EACA23E,EAAMn6E,UAAUggB,YAAc,SAAU2V,GACrB,UAAXA,EAAExqB,KACF3I,KAAKhO,OAAQ,EAER,qBAAsBgO,KAAKnd,UAChCmd,KAAKhO,OAAQ,EAErB,EACQ8pC,EAAW,EACf,QAAgB,QAAS,cAC1B67C,EAEP,CAzDY,GA2DRK,GAAgB,+BAahBC,GAAe,WACf,SAASA,EAAYt4B,GACjB3/C,KAAK2/C,QAAUA,EACf3/C,KAAKk4E,QAAU,KACfl4E,KAAKm4E,SAAU,EACfn4E,KAAKo4E,0BAA2B,CACpC,CA2BA,OA1BAH,EAAYz6E,UAAUkwB,WAAa,SAAUC,EAAW6K,GACpDx4B,KAAKk4E,QAAU,IAAI1/C,EAAOx4B,KAC9B,EACAi4E,EAAYz6E,UAAUowB,SAAW,SAAUC,EAAUzkC,GACpC,WAATA,EACAykC,EAASwqD,wBAAwBr4E,KAAKk4E,SAGtCl4E,KAAKm4E,SAAU,CAEvB,EACAF,EAAYz6E,UAAUuwB,KAAO,SAAUJ,GACnC,IAAIrpB,EAAQtE,KACZ,OAAO2tB,EAAUhkC,IAAI,MAChB+1D,SAAS1/C,KAAK2/C,SACd9jB,OAAM,WAAc,OAAO,IAAM,IACjCluC,MAAK,SAAU2kB,GAOhB,OANAA,EApCZ,SAAsBqtC,EAASp4D,GAC3B,GAAmB,iBAARA,EACP,MAAM,IAAIyjB,MAAM,qCAAqCjkB,OAAO44D,IAEhE,OAAOp4D,EAAI8I,QAAQ2nF,IAAe,SAAUpvC,EAAO0vC,GAC/C,IAAIt/D,EAAQs/D,EAAG15E,OAAO,GAItB,MAHc,MAAVoa,GAA4B,MAAVA,IAClBs/D,EAAKA,EAAG3jD,OAAO,EAAG2jD,EAAGnuF,OAAS,IAE3B,SAAW,QAAemuF,EAAI34B,GAAW,IACpD,GACJ,CAyBmB44B,CAAaj0E,EAAMq7C,QAASrtC,GACnChO,EAAM4zE,QAAQ3wF,IAAM+qB,EAChBhO,EAAM6zE,UACN7zE,EAAM8zE,0BAA2B,EACjC,kBAAiB9lE,IAEdhO,CACX,GACJ,EACO2zE,CACX,CAlCkB,GAmCdO,GAAsB,WACtB,SAASA,EAAmBC,GACxBz4E,KAAKy4E,MAAQA,EACbz4E,KAAKzY,IAAM,IACf,CAcA,OAbAixF,EAAmBh7E,UAAUk7E,cAAgB,SAAUlkC,EAASnR,EAAW6J,GACnEA,EAAYyrC,gBACZ,kBAAiB34E,KAAKzY,IAAKitD,GAAS,GAE/B,eACW,kBAAiBx0C,KAAKzY,IAAKitD,GAAS,GAC1Ct/C,aAAa,SAAU,UAE5B8K,KAAKm4E,UAAYn4E,KAAKy4E,MAAML,2BACjC,kBAAiBp4E,KAAKzY,KACtByY,KAAKy4E,MAAML,0BAA2B,EAE9C,EACOI,CACX,CAnByB,GAkCrBI,GAAuB,WACvB,SAASA,IACT,CASA,OARAA,EAAoBp7E,UAAUkO,KAAO,SAAUlK,EAASqrB,GACpDrrB,EAAQmrB,eAAiB,IAAI,KAAsBnrB,EAAQ1a,OAAQ0a,EAAQ2qB,eAC/E,EACAysD,EAAoBp7E,UAAUuO,OAAS,SAAUvK,EAASqrB,GAC1D,EACsBiP,EAAW,EAC7B,QAAgB,SACjB88C,EAEP,CAZ0B,GActBC,GAAsB,CACtBntE,KAAM,SAAUlK,EAASqrB,EAAQ3oB,GAC7B1C,EAAQs3E,aAAet3E,EAAQ6qB,KAC/B7qB,EAAQ6qB,KAAOrsB,KAAKqsB,IACxB,EACAtgB,OAAQ,SAAUvK,EAASqrB,GACvBrrB,EAAQ6qB,KAAO7qB,EAAQs3E,aACvBt3E,EAAQs3E,aAAe,IAC3B,GAEAC,GAA0B,WAC1B,SAASA,IACL/4E,KAAKqsB,KAAO,YAChB,CAKA,OAJyByP,EAAW,EAChC,QAAM+8C,KACN,QAAgB,YACjBE,EAEP,CAT6B,GAUzBC,GAAyB,WACzB,SAASA,IACLh5E,KAAKqsB,KAAO,WAChB,CAKA,OAJwByP,EAAW,EAC/B,QAAM+8C,KACN,QAAgB,WACjBG,EAEP,CAT4B,GAUxBC,GAAyB,WACzB,SAASA,IACLj5E,KAAKqsB,KAAO,WAChB,CAKA,OAJwByP,EAAW,EAC/B,QAAM+8C,KACN,QAAgB,WACjBI,EAEP,CAT4B,GAUxBC,GAA2B,WAC3B,SAASA,IACLl5E,KAAKqsB,KAAO,aAChB,CAKA,OAJ0ByP,EAAW,EACjC,QAAM+8C,KACN,QAAgB,aACjBK,EAEP,CAT8B,GAU1BC,GAAyB,WACzB,SAASA,IACLn5E,KAAKqsB,KAAO,WAChB,CAKA,OAJwByP,EAAW,EAC/B,QAAM+8C,KACN,QAAgB,WACjBM,EAEP,CAT4B,GAW5B,SAASC,GAASn2E,GACd,IAAIqB,EAAQtE,KACR9U,EAAQ8U,KAAKq5E,cACbC,GAAW,IAAI7wB,KAASv9D,EAAMmuB,KAClC,GAAIigE,GAAWpuF,EAAMquF,MAKjB,OAJAtS,aAAa/7E,EAAMsuF,WACnBtuF,EAAMsuF,UAAY,KAClBtuF,EAAMmuB,MAAQ,IAAIovC,UAClBzoD,KAAKy5E,gBAAgBx2E,GAGzB/X,EAAM+X,SAAWA,EACO,OAApB/X,EAAMsuF,YACNtuF,EAAMsuF,UAAYj5D,YAAW,WACzBr1B,EAAMsuF,UAAY,KAClBtuF,EAAMmuB,MAAQ,IAAIovC,KAClBnkD,EAAMm1E,gBAAgBvuF,EAAM+X,SAChC,GAAG/X,EAAMquF,MAAQD,GAEzB,CACA,IAAII,GAA2B,WAC3B,SAASA,IACT,CA6BA,OA5BAA,EAAwBl8E,UAAUkO,KAAO,SAAUlK,EAASqrB,EAAQ0sD,QAClD,IAAVA,IAAoBA,EAAQ,KAChC,IAAII,EAAmB,eACnBn4E,EAAQ0rB,WACRysD,EAAmB,aAEdn4E,EAAQorB,cAAgBprB,EAAQ6qB,OAAS,cAC9CstD,EAAmB,gBAEvBn4E,EAAQi4E,gBAAkBj4E,EAAQm4E,GAClCn4E,EAAQi4E,gBAAgBG,aAAeD,EACvCn4E,EAAQm4E,GAAoBP,GAC5B53E,EAAQ63E,cAAgB,CACpBE,MAAOA,EACPlgE,KAAM,EACNmgE,UAAW,KAEnB,EACAE,EAAwBl8E,UAAUuO,OAAS,SAAUvK,EAASqrB,GAE1DrrB,EADsBA,EAAQi4E,gBAAgBG,cACnBp4E,EAAQi4E,gBACnCj4E,EAAQi4E,gBAAkB,KAC1BxS,aAAazlE,EAAQ63E,cAAcG,WACnCh4E,EAAQ63E,cAAgB,IAC5B,EAC0Bv9C,EAAW,EACjC,QAAgB,aACjB49C,EAEP,CAhC8B,GAkC1BG,GAAQ,CAAC,EACb,SAASC,GAAmBl9D,GACxB,IAAItY,EAAQtE,KACR9U,EAAQ8U,KAAK+5E,cACjB9S,aAAa/7E,EAAMsuF,WACnBtuF,EAAMsuF,UAAYj5D,YAAW,WAAc,OAAOjc,EAAM01E,gBAAgBp9D,EAAQ,GAAG1xB,EAAMquF,MAC7F,CACA,SAASU,GAAal4E,EAASkB,EAAUC,GACrC,IAAIoB,EAAQtE,KACR9U,EAAQ8U,KAAK+5E,cAEjB,GADA9S,aAAa/7E,EAAMsuF,WACfz3E,IAAY7W,EAAMgvF,sBAGlB,OAFAhvF,EAAMgY,SAAW22E,QACjB75E,KAAKg6E,gBAAgBj4E,EAASkB,EAAUC,GAGxChY,EAAMgY,WAAa22E,KACnB3uF,EAAMgY,SAAWA,GAErBhY,EAAMsuF,UAAYj5D,YAAW,WACzB,IAAI45D,EAAYjvF,EAAMgY,SACtBhY,EAAMgY,SAAW22E,GACjBv1E,EAAM01E,gBAAgBj4E,EAASkB,EAAUk3E,EAC7C,GAAGjvF,EAAMquF,MACb,CACA,IAAIa,GAA2B,WAC3B,SAASA,IACT,CA4BA,OA3BAA,EAAwB58E,UAAUkO,KAAO,SAAUlK,EAASqrB,EAAQ0sD,QAClD,IAAVA,IAAoBA,EAAQ,KAChC,IAAIc,OAAsCzsF,IAAvB4T,EAAQ0rB,WACvBotD,EAAmBD,EAAe,aAAe,OACjDE,EAAYF,EAAeP,GAAqBG,GAChD5tD,EAAO7qB,EAAQ6qB,KACf6tD,EAAwB7tD,IAAS,aAAsBA,IAAS,cAAuB,KAAgB,KAC3G7qB,EAAQw4E,gBAAkBx4E,EAAQ84E,GAClC94E,EAAQw4E,gBAAgBJ,aAAeU,EACvC94E,EAAQ84E,GAAoBC,EAC5B/4E,EAAQu4E,cAAgB,CACpBG,sBAAuBA,EACvBX,MAAOA,EACPC,UAAW,EACXt2E,SAAU22E,GAElB,EACAO,EAAwB58E,UAAUuO,OAAS,SAAUvK,EAASqrB,GAE1DrrB,EADsBA,EAAQw4E,gBAAgBJ,cACnBp4E,EAAQw4E,gBACnCx4E,EAAQw4E,gBAAkB,KAC1B/S,aAAazlE,EAAQu4E,cAAcP,WACnCh4E,EAAQu4E,cAAgB,IAC5B,EAC0Bj+C,EAAW,EACjC,QAAgB,aACjBs+C,EAEP,CA/B8B,GAoC9B,SAASI,GAAgB59D,GACrB,IAAI91B,EAJR,SAAiC81B,GAC7B,OAAQA,EAAMG,MAAQH,EAAMG,KAAK,IAAQH,EAAME,UAAYF,EAAME,SAAS,IAAOF,EAAM91B,MAC3F,CAEiB61B,CAAwBC,GACjC5c,KAAKlZ,SAAWA,GAGpBkZ,KAAKy6E,oBAAoB79D,EAC7B,CACA,IAAI89D,GAAuB,WACvB,SAASA,IACT,CAeA,OAdAA,EAAoBl9E,UAAUkO,KAAO,SAAUlK,EAASqrB,GACpD,IAAKrrB,EAAQ0rB,aAAe1rB,EAAQ2c,YAChC,MAAM,IAAInT,MAAM,8CAEpBxJ,EAAQi5E,oBAAsBj5E,EAAQ0rB,WACtC1rB,EAAQ0rB,WAAastD,EACzB,EACAE,EAAoBl9E,UAAUuO,OAAS,SAAUvK,EAASqrB,GACtDrrB,EAAQ0rB,WAAa1rB,EAAQi5E,oBAC7Bj5E,EAAQi5E,oBAAsB,IAClC,EACsB3+C,EAAW,EAC7B,QAAgB,SACjB4+C,EAEP,CAlB0B,GAoBtBC,GAAmB,WACnB,SAASA,IACL36E,KAAK0M,QAAU,CAAC,CACpB,CAWA,OAVAiuE,EAAgBn9E,UAAUo9E,OAAS,SAAUxxF,GACzC,IAAIgtF,EAAWp2E,KAAK0M,QAAQtjB,GAC5B,GAAKgtF,EAIL,IADA,IAAI9+E,EAAI8+E,EAASjsF,OACVmN,KACH8+E,EAAS9+E,GAAG0G,KAAK,KAEzB,EACO28E,CACX,CAfsB,GAiBlBE,GAAyB,WACzB,SAASA,EAAsBC,GAC3B96E,KAAK0M,QAAUouE,EAAgBpuE,OACnC,CAmDA,OAlDAmuE,EAAsB5uD,OAAS,WAAc,MAAO,CAAC0uD,GAAkB,EACvEE,EAAsBr9E,UAAUkO,KAAO,SAAUlK,EAASqrB,GAEtD,IADA,IAAI9H,EAAQ,GACH/sB,EAAK,EAAGA,EAAK9N,UAAUC,OAAQ6N,IACpC+sB,EAAM/sB,EAAK,GAAK9N,UAAU8N,GAE9B,IAAKwJ,EAAQkrB,aACT,MAAM,IAAI1hB,MAAM,sIAEpB,IAAI0B,EAAU1M,KAAK0M,QACnB,GAAqB,IAAjBqY,EAAM56B,OAAc,CACpB,IAAI8gD,EAASlmB,EAAM,IACJrY,EAAQu+B,KAAYv+B,EAAQu+B,GAAU,KAC5CrhD,KAAK4X,GACdA,EAAQu5E,WAAa9vC,CACzB,KACK,MAAIlmB,EAAM56B,OAAS,GAUpB,MAAM,IAAI6gB,MAAM,4BARhB,IADA,IAAI1T,EAAIytB,EAAM56B,OACPmN,KAAK,CACR,IAAI0jF,EAASj2D,EAAMztB,IACJoV,EAAQsuE,KAAYtuE,EAAQsuE,GAAU,KAC5CpxF,KAAK4X,EAClB,CACAA,EAAQu5E,WAAah2D,CAIzB,CACJ,EACA81D,EAAsBr9E,UAAUuO,OAAS,SAAUvK,EAASqrB,GACxD,IAAIngB,EAAU1M,KAAK0M,QACftjB,EAAOoY,EAAQu5E,WAEnB,GADAv5E,EAAQu5E,WAAa,KACjB1wF,MAAMkkB,QAAQnlB,GAGd,IAFA,IAAI27B,EAAQ37B,EACRkO,EAAIytB,EAAM56B,OACPmN,KAAK,CACR,IACI8+E,KAAW1pE,EADPqY,EAAMztB,KAELqK,OAAOy0E,EAAS7vF,QAAQib,GAAU,EAC/C,MAGI40E,EAAW1pE,EAAQtjB,IACduY,OAAOy0E,EAAS7vF,QAAQib,GAAU,EAEnD,EACwBs6B,EAAW,EAC/B,QAAgB,WACjB++C,EAEP,CAvD4B,GA0DxBI,GAAuB,kHACvBC,GAAgC,WAChC,SAASA,IACT,CA8BA,OA7BAA,EAA6B19E,UAAUkO,KAAO,SAAUlK,EAASqrB,GAE7D,IADA,IAAI/M,EAAS,GACJ9nB,EAAK,EAAGA,EAAK9N,UAAUC,OAAQ6N,IACpC8nB,EAAO9nB,EAAK,GAAK9N,UAAU8N,GAE/B,GAAsB,IAAlB8nB,EAAO31B,OACP,MAAM,IAAI6gB,MAXG,4IAajB,GAAIxJ,EAAQ6qB,OAAS,aAAsB7qB,EAAQ6qB,OAAS,cACxD,MAAM,IAAIrhB,MAAMiwE,IAEpB,IAAItuD,EAAiBnrB,EAAQlB,gBAAgBC,YAAYiB,EAAQ1a,OAAQ0a,EAAQ2qB,gBACjF,IAAKQ,EAAe5M,QAChB,MAAM,IAAI/U,MAAMiwE,IAEpBz5E,EAAQmrB,eAAiBA,EACzBA,EAAewuD,gBAAkB35E,EAAQmrB,eAAe5M,QACxD,IAAIA,EAAU,IAAI,KAAgBD,GAClC6M,EAAe5M,QAAUA,CAC7B,EACAm7D,EAA6B19E,UAAUuO,OAAS,SAAUvK,EAASqrB,GAC/D,IAAIF,EAAiBnrB,EAAQmrB,eAC7BA,EAAe5M,QAAQvb,UACvBmoB,EAAe5M,QAAU4M,EAAewuD,gBACxCxuD,EAAewuD,gBAAkB,IACrC,EAC+Br/C,EAAW,EACtC,QAAgB,kBACjBo/C,EAEP,CAjCmC,GAkGnC,SAASlhD,GAAUxa,GA9oBf,kBAAiBm3D,GAgpBjBn3D,EAAOokB,gBAAgBsoC,EAAS+B,EAAIO,EAAMK,EAAM6F,EAAQqC,EAAMI,GAAMO,GAAaC,GAAOJ,GAA4BwB,GAAwBC,GAAuBC,GAAuBC,GAAyBC,GAAuBO,GAAyBU,GAAyBM,GAAqBG,GAAuBK,GAA8BtC,IAzB1W,SAAqBp5D,GACjB,IAAIoqB,EAAapqB,EAAOmO,UAAUhkC,IAAI,MAClCkwC,EAASra,EAAOoa,QAAQC,OAC5B+P,EAAWwxC,kBAAkB,QAAS,CAClC,MAAS,SAAUC,GACf,OAAOxhD,EAAO4lB,aAAa47B,GAAS1tF,MAAK,SAAU2tF,GAC/C,IAAIjgD,EACAkgD,EAAgBD,EAAc17B,SAAS/9B,aAAa,YACpD25D,EAAmBF,EAAc17B,SAAS/9B,aAAa,kBACvDz4B,EAXT,qBAAqBk5B,KAWU+4D,GAXI,GAAG52F,cAmBjC,OAPI82F,GACAA,EAAgBA,EAActtF,MAAM,KAAK7L,KAAI,SAAUqB,GAAK,OAAOA,EAAEujE,MAAQ,IAC7Es0B,EAAc17B,SAAS3qD,gBAAgB,aAGvCsmF,EAAgB,IAEblgD,EAAK,CAAC,GAAMjyC,GAzDnC,SAA+BiyC,GAc3B,IAbA,IAAIjyC,EAAOiyC,EAAGjyC,KAAMiyF,EAAUhgD,EAAGggD,QAASE,EAAgBlgD,EAAGkgD,cAAeC,EAAmBngD,EAAGmgD,iBAC9FC,EAAkB,WAClB,SAASA,IACT,CAQA,OAPAA,EAAej+E,UAAUkO,KAAO,SAAU1M,GACtCgB,KAAKmb,QAAUnc,CACnB,EACiB88B,EAAW,EACxB,QAAc1yC,IACd,QAAQiyF,IACTI,EAEP,CAXqB,GAYZnkF,EAAI,EAAGsI,EAAK27E,EAAcpxF,OAAQmN,EAAIsI,IAAMtI,GACjD,QAASikF,EAAcjkF,GAAvB,CAA2BmkF,GAE/B,OAAQD,GACJ,IAAK,QACD,QAAa,CAAEnvD,KAAM,QAArB,CAA+BovD,GAC/B,MACJ,IAAK,UACD,QAAa,CAAEpvD,KAAM,UAArB,CAAiCovD,GACjC,MACJ,IAAK,IACD,QAAaA,GACb,MACJ,KAAK,KACD,MACJ,SACI,IAAAhrC,WAAU,6BACLpmC,KAAK,2EAA+EtjB,OAAOy0F,IAGxG,OAAOC,CACX,CAsB2CC,CAAsB,CAAEtyF,KAAMA,EAAMiyF,QAASA,EAASE,cAAeA,EAAeC,iBAAkBA,IAAqBngD,CAC1J,GACJ,GAER,CAKIsgD,CAAYn8D,GACZ,IAAIoqB,EAAapqB,EAAOmO,UAAUhkC,IAAI,MAClCiyF,EAAsB,CACtBz7B,MAAO,SAAUR,GACb,IAAItkB,EACJ,OAAOA,EAAK,CAAC,GAAMskB,GA7Z/B,SAA4BA,GACxB,IAAIk8B,EAAW,SAAUvhC,GAErB,SAASuhC,IACL,OAAkB,OAAXvhC,GAAmBA,EAAOvyC,MAAM/H,KAAM9V,YAAc8V,IAC/D,CAIA,OAPAi6C,EAAU4hC,EAASvhC,GAITxe,EAAW,EACjB,QAAS,IAAIm8C,GAAYt4B,KAC1Bk8B,EAEP,CATc,CASZrD,IACF,OAAOqD,CACX,CAiZ0CC,CAAmBn8B,GAAUtkB,CAC/D,GAEJ,CAAC,OAAQ,QAAS,QAAS,QAAS,SAAS9xC,SAAQ,SAAUsgD,GAAO,OAAOD,EAAWwxC,kBAAkBvxC,EAAK+xC,EAAsB,GACzI,6KCl4DI5hC,EAAgB,SAAStpB,EAAG15B,GAI5B,OAHAgjD,EAAgB5uD,OAAOmT,gBAClB,CAAEC,UAAW,cAAgBnU,OAAS,SAAUqmC,EAAG15B,GAAK05B,EAAElyB,UAAYxH,CAAG,GAC1E,SAAU05B,EAAG15B,GAAK,IAAK,IAAI8kB,KAAK9kB,EAAO5L,OAAOoS,UAAUjO,eAAeyO,KAAKhH,EAAG8kB,KAAI4U,EAAE5U,GAAK9kB,EAAE8kB,GAAI,EAC7Fk+B,EAActpB,EAAG15B,EAC5B,EAUI+kF,EACA,WACA,EAGAC,EAAc,WACd,SAASA,EAAWn5F,EAAS8qC,EAAWuX,EAAUwG,EAAQuwC,EAAaC,EAAwBz3C,GAC3FzkC,KAAKnd,QAAUA,EACfmd,KAAK2tB,UAAYA,EACjB3tB,KAAKklC,SAAWA,EAChBllC,KAAK0rC,OAASA,EACd1rC,KAAKi8E,YAAcA,EACnBj8E,KAAKk8E,uBAAyBA,EAC9Bl8E,KAAKykC,kBAAoBA,EACzBzkC,KAAK0rC,OAAO4wB,iBAAiBt8D,KAAMA,KAAKnd,QAAQg/B,aAAa,SACvD,uBAAwBq6D,IAC1BA,EAAuB9uC,oBAAqB,EAC5CptC,KAAKm8E,+BAAiCD,EAAuBE,SAErE,CA8GA,OA7GAJ,EAAW/vD,OAAS,WAChB,MAAO,CAAC,aAAa,KAAW,KAAU,KAAQ,KAAa,KAAwB,KAC3F,EACA+vD,EAAWx+E,UAAU+uE,QAAU,SAAUC,GACrCxsE,KAAKwsE,WAAaA,CACtB,EACAwP,EAAWx+E,UAAUkO,KAAO,SAAU1M,EAAgBM,GAClDU,KAAK2tB,UAAUqB,UAAYhwB,EAC3BgB,KAAKV,gBAAkBA,CAC3B,EACA08E,EAAWx+E,UAAUg8B,QAAU,SAAU6iD,EAAsBzkB,GAC3D,IAAItzD,EAAQtE,KACR82D,EAAsBulB,EACtBxlB,EAAYC,EAAoBD,UAChC7xB,EAAiB6xB,EAAU7xB,eAC3BhW,EAAY6nC,EAAU7nC,UACtBstD,EAAoBzlB,EAAUylB,kBAC9B1zD,EAAW0zD,EAAkB1zD,SAC7BpJ,EAASq3C,EAAUnrB,OAAOmsB,mBAAmBr4C,OAC7Cg7C,EAAiBh7C,EAAO44C,WAAa54C,EAAO44C,UAAUtB,EAAoB1tE,OAAe,CAAC,EAC9F47C,EAAer7C,IAAI4yF,GAAmBC,QAAQx8E,MAC9C,IAAIy8E,EAAoB,CACpBztD,UAAWwrC,EAAekiB,iBAAmBl9D,EAAOk9D,iBAAmB18E,KAAK08E,gBAC5E9yD,KAAM4wC,EAAemiB,YAAcn9D,EAAOm9D,YAAc38E,KAAK28E,WAC7Dx5D,MAAOq3C,EAAeoiB,aAAep9D,EAAOo9D,aAAe58E,KAAK48E,YAChElxC,OAAQorB,EAAoBD,UAAUnrB,OACtC1G,eAAgBA,EAChBE,SAAUllC,KAAKklC,UAEf23C,EAAe78E,KAAKi8E,YAAYa,gBAAgBjmB,EAAUjtC,MAAQoF,GAItE,OAHI6tD,GAAgBhmB,EAAUjtC,MAC1BizD,EAAaE,eAAe,SAAWlmB,EAAUnrB,OAAO/d,UAAUqB,UAAUnxB,aAAa48B,UAEtF7R,EACFmF,KAAKiX,EAAgBs3C,EAAkBtqF,MAAO,KAAM6qF,GAAc,GAClElvF,MAAK,SAAU+/E,GACXppE,EAAM63E,iCACP73E,EAAM04E,qCAAuC14E,EAAM43E,uBAAuBe,eAE1ER,EAAkBztD,WAAaytD,EAAkB7yD,QACjDktC,EAAoB2lB,kBAAoBA,GAE5C,IAAIS,EAAuC,aAA4B54E,EAAMzhB,QAASmsC,EAAW0+C,GAEjG,GADA5W,EAAoB/nC,WAAanG,EAAStqB,OAAO0mC,EAAgBk4C,GAC7DtlB,EACA,OAAO,KAEXtzD,EAAMi0D,KAAKzB,EACf,GACJ,EACAklB,EAAWx+E,UAAU+6D,KAAO,SAAU8jB,GAClC,IAAI/3E,EAAQtE,KACR82D,EAAsBulB,EACtBc,EAAqBrmB,EAAoB/nC,WACzC0tD,EAAoB3lB,EAAoB2lB,kBACxCW,EAAep9E,KAAK4pB,KACpByzD,EAAO,WACP,IAAIC,EAAe,KAAeh5E,EAAM8oE,YAAc,WAClDloC,EAAW5gC,EAAM4gC,SACrBo4C,EAAap4C,EAAUk4C,GAAc,WAAc,OAAO1vF,EAAQD,QAAQy3C,EAAS/7C,IAAImb,EAAMslB,MAAQ,IAAGj8B,MAAK,WACzG2W,EAAMk4E,SACV,GACJ,EACIe,EAAQ,SAAUC,GAClBL,EAAmBM,SAASn5E,EAAMhF,gBAAiBk+E,GACnD,IAAIE,EAA4Bp5E,EAAM04E,qCACtC,OAAIU,EACOA,EACFC,6BACAhwF,MAAK,WAEN,OADA2W,EAAM04E,qCAAuC,KACtCK,GACX,IAEGA,GACX,EACA,OAAIZ,GACKA,EAAkBztD,YACnBytD,EAAkBztD,UAAY,IAAI+sD,GAE/B/7E,KAAKykC,kBACPm5C,iBAAiBnB,GACjB9uF,MAAK,SAAUkwF,GAChB,IAAIlB,EAAakB,EAAiBj0D,KAIlC,OAHA,oBAAyBuzD,EAAmBvzD,KAAMi0D,EAAiBC,OAASnB,EAAWmB,OACvFD,EAAiBJ,UAAS,QAAsBhB,EAAkBztD,WAAY1qB,EAAMkoE,YACpFmQ,EAAW5xB,SAASnhE,KAAKuzF,EAAmBvzD,MACrC+yD,GAAckB,CACzB,IACKlwF,MAAK,SAAUowF,GAEhB,OADAz5E,EAAMslB,KAAOm0D,EACNR,EAAMQ,EACjB,MAEJ/9E,KAAK4pB,KAAOuzD,EAAmBvzD,KACxB2zD,EAAMv9E,KAAKwsE,YACtB,EACAwP,EAAWx+E,UAAUg/E,QAAU,WAC3B,IAAIwB,EAAWh+E,KAAKm8E,+BAChB6B,IACAA,EAAS30E,OACTrJ,KAAKm8E,+BAAiC,KAE9C,EACAH,EAAW7F,MAAQ,KACnB6F,EAAWiC,UAAY,CACnB70F,KAAM,cACN80F,UAAW,CAAC,YAAa,aAAc,kBAAmB,cAAe,4BAEtElC,CACX,CA7HiB,GA8HbO,EAAqB,WACrB,SAASA,IACL,IAAIj4E,EAAQtE,KACZA,KAAKkmC,QAAU,IAAIx4C,GAAQ,SAAUD,GAAW,OAAO6W,EAAM7W,QAAUA,CAAS,GACpF,CAOA,OANA8uF,EAAkB/+E,UAAU2gF,YAAc,WACtC,OAAOn+E,KAAKkmC,OAChB,EACAq2C,EAAkB/+E,UAAUg/E,QAAU,SAAU4B,GAC5Cp+E,KAAKvS,QAAQ2wF,EACjB,EACO7B,CACX,CAZwB,GAcpB8B,EACA,WACA,GAGJ,QAAW,wBAAX,CAAoCA,GACpC,IAAIC,EAAyB,SAAUhkC,GAEnC,SAASgkC,EAAsB75C,GAC3B,IAAIngC,EAAQg2C,EAAOt8C,KAAKgC,OAASA,KAEjC,OADAsE,EAAMmgC,kBAAoBA,EACnBngC,CACX,CA6CA,OAlNJ,SAAmBosB,EAAG15B,GAClB,GAAiB,mBAANA,GAA0B,OAANA,EAC3B,MAAM,IAAIqH,UAAU,uBAAyBkT,OAAOva,GAAK,iCAE7D,SAASkjD,IAAOl6C,KAAKnC,YAAc6yB,CAAG,CADtCspB,EAActpB,EAAG15B,GAEjB05B,EAAElzB,UAAkB,OAANxG,EAAa5L,OAAOkT,OAAOtH,IAAMkjD,EAAG18C,UAAYxG,EAAEwG,UAAW,IAAI08C,EACnF,CA0JID,CAAUqkC,EAAuBhkC,GAMjCgkC,EAAsB9gF,UAAU+gF,iBAAmB,SAAU7yC,EAAQlsB,GACjE,OAAO,IAAI9xB,GAAQ,SAAUD,EAAS+sC,GAClC,IAAIxL,EACJ,GAAI,aAAcxP,EAAQ,CACtB,IAAIib,EAAWjb,EAAOib,SAatB,OAZiB,OAAbA,EACAzL,EAAYqvD,GAGZ5jD,GAAW,QAAeA,EAAU,SAAWiR,EAAO/d,UAAUqB,UAAUnxB,aAAa48B,UAEnFzL,EADA,UAAUrsC,KAAK83C,GAoCvC,SAA4BA,GACxB,IAAIrxC,EAAO,qBAAqBk5B,KAAKmY,GAAU,GAC3C+jD,EAAgB,WAChB,SAASA,IACT,CAIA,OAHAA,EAAahhF,UAAUkO,KAAO,SAAU1M,GACpCgB,KAAKmb,QAAUnc,CACnB,EACOw/E,CACX,CAPmB,GAUnB,OAFA,QAAcp1F,EAAd,CAAoBo1F,IACpB,QAAQ/jD,EAAR,CAAkB+jD,GACXA,CACX,CAhDoCC,CAAmBhkD,GAGnBA,GAGbhtC,EAAQuhC,EACnB,CACAwL,EAAO,IAAIxvB,MAAM,8CACrB,GACJ,EACAszE,EAAsB9gF,UAAUkhF,qBAAuB,SAAUhzC,GAC7D,IAAI1G,EAAiB0G,EAAO/d,UAAUmT,cAOtC,OANAkE,EAAehF,kBAAkBu8C,GACjCv3C,EAAeu9B,eAAiB,WAC5B,IAAItL,EAEJ,OADAjyB,EAAe9E,gBAAgB,MAAQ,WAAc,OAAO+2B,IAAgBA,EAAcvrB,EAAO5K,YAAYkE,GAAkB,IACxHA,EAAer7C,IAAI,KAC9B,EACOq7C,CACX,EACAs5C,EAAsB9gF,UAAU0kE,UAAY,SAAUx2B,EAAQlsB,EAAQm/D,GAClE,IAAIr6E,EAAQtE,KACZ,OAAOA,KACFu+E,iBAAiB7yC,EAAQlsB,GACzB7xB,MAAK,SAAUqhC,GAAa,OAAO1qB,EAAMmgC,kBAAkBU,gBAAgB,CAC5EnW,UAAWA,EACXgW,eAAgB1gC,EAAMo6E,qBAAqBhzC,GAC3C9hB,KAAMpK,EAAOoK,MAAQpK,EAAOq9D,aAC5BnxC,OAAQA,GACR,GACR,EACA4yC,EAAsBryD,OAAS,CAAC,MACzBqyD,CACX,CApD4B,CAoD1B,MAgBE19D,EAAS,YAAqB,cAC9Bg+D,EAAa,WACb,SAASA,EAAUlzC,EAAQ7oD,GACvBmd,KAAK0rC,OAASA,EACd1rC,KAAKnd,QAAUA,EACfmd,KAAK1K,UAAY,MACrB,CAgDA,OA/CAspF,EAAU3yD,OAAS,WACf,MAAO,CAAC,KAAQ,aACpB,EACA2yD,EAAUphF,UAAUkO,KAAO,WACvB1L,KAAK+3D,UAAW,EAChB/3D,KAAK6+E,eACT,EACAD,EAAUphF,UAAUuO,OAAS,WACzB/L,KAAK+3D,UAAW,CACpB,EACA6mB,EAAUphF,UAAUshF,iBAAmB,SAAU9sF,EAAOgV,GAIpD,OAHIA,GACAhH,KAAKnd,QAAQoS,gBAAgB+R,GAE1BhH,KAAK6+E,eAChB,EACAD,EAAUphF,UAAUqhF,cAAgB,WAChC,IAAIv6E,EAAQtE,KACZ,OAAOA,KAAK0rC,OACP6wB,mBACA5uE,MAAK,WACN,IAAK2W,EAAMyzD,SACP,OAAO,KAEX,IAAIl1E,EAAUyhB,EAAMzhB,QAChB43D,EAAOn2C,EAAMonC,OAAOwmB,SAAS5tD,EAAMquD,MAAOruD,EAAMoqC,QAOpD,OANI7rD,EAAQ6rC,GAAGK,WACXlsC,EAAQ6rC,GAAGK,WAAWC,UAAU1qB,EAAMhP,WAAamlD,EAGnD53D,EAAQqS,aAAaoP,EAAMhP,UAAWmlD,GAEnC,IACX,IACK5e,OAAM,SAAU6J,GACjB9kB,EAAOlX,MAAMg8B,EACjB,GACJ,EACAk5C,EAAUX,UAAY,CAClBt1E,KAAM,YACNvf,KAAM,aACN80F,UAAW,CACP,CAAE90F,KAAM,QAASknC,cAAe,gBAAiBu6C,iBAAiB,GAClE,CAAEzhF,KAAM,SAAUknC,cAAe,iBACjC,cAGDsuD,CACX,CAtDgB,GAwDhB,SAAS5kD,EAAUxa,GACfA,EACKod,UAAU,KAAa0hD,GACvB1hD,UAAU,KAAQ,MAClBgH,gBAAgBo4C,EAAY4C,GACjCp/D,EAAOmO,UAAUwS,cAAc,KAAQ,KAC3C,8XCzTI4+C,EAAiB,WACjB,SAASA,EAAcl8F,GACnBmd,KAAKnd,QAAUA,EACfmd,KAAKg/E,cAAgB,CAAC,CAC1B,CAiEA,OAhEAD,EAAcvhF,UAAUyhF,gBAAkB,SAAUl/D,GAChD/f,KAAKg/E,cAAcj/D,EAAQrC,WAAa1d,KAAKg/E,cAAcj/D,EAAQrC,YAAc,GACjF1d,KAAKg/E,cAAcj/D,EAAQrC,WAAW9zB,KAAKm2B,EAC/C,EACAg/D,EAAcvhF,UAAU0hF,gBAAkB,SAAUn/D,GAChD,IAAI1yB,EACA2xF,EAAgBh/E,KAAKg/E,cAAcj/D,EAAQrC,WAO/C,OANIshE,IACA3xF,EAAQ2xF,EAAcz4F,QAAQw5B,KACjB,GACTi/D,EAAcr9E,OAAOtU,EAAO,GAG7B0yB,CACX,EACAg/D,EAAcvhF,UAAU2qC,QAAU,SAAUzqB,EAAW20B,EAAQ3F,EAASC,QACrD,IAAX0F,IAAqBA,EAAS,CAAC,QACnB,IAAZ3F,IAAsBA,GAAU,QACjB,IAAfC,IAAyBA,GAAa,GAC1C,IAAI/vB,EAAQ,uBAAsBc,EAAW,CAAEivB,WAAYA,EAAYD,QAASA,EAAS2F,OAAQA,IACjGryC,KAAKnd,QAAQ2wD,cAAc52B,EAC/B,EACAmiE,EAAcvhF,UAAU0C,UAAY,SAAUwd,EAAWqC,EAASo/D,GAC9D,GAAuB,mBAAZp/D,EAKP,YAJyBnyB,IAArBuxF,IACAA,EAAmBJ,EAAcK,wBAElB,IAAIC,EAAiBr/E,KAAM0d,EAAWqC,EAASo/D,GAAkB,EAI5F,EACAJ,EAAcvhF,UAAU6qC,cAAgB,SAAU3qB,EAAWqC,EAASo/D,GAClE,GAAuB,mBAAZp/D,EAKP,YAJyBnyB,IAArBuxF,IACAA,EAAmBJ,EAAcK,wBAElB,IAAIC,EAAiBr/E,KAAM0d,EAAWqC,EAASo/D,GAAkB,EAI5F,EACAJ,EAAcvhF,UAAUgH,QAAU,SAAUkZ,GACxC,GAAIA,GAAkC,iBAAdA,EAAwB,CAC5C,IAAIshE,EAAgBh/E,KAAKg/E,cAActhE,GACvC,GAAIshE,EACA,KAAOA,EAAc70F,QAAQ,CACzB,IAAIm1F,EAAeN,EAAc/0E,MAC7Bq1E,GACAA,EAAa96E,SAErB,CAER,MAEIxE,KAAKu/E,YAEb,EACAR,EAAcvhF,UAAU+hF,WAAa,WACjC,IAAK,IAAI9yF,KAAOuT,KAAKg/E,cACjBh/E,KAAKwE,QAAQ/X,EAErB,EACAsyF,EAAcK,wBAAyB,EAChCL,CACX,CAtEoB,GAuEhBM,EAAoB,WACpB,SAASA,EAAiB5G,EAAO/6D,EAAWqC,EAASo/D,EAAkBK,GACnEx/E,KAAKy4E,MAAQA,EACbz4E,KAAK0d,UAAYA,EACjB1d,KAAK+f,QAAUA,EACf/f,KAAKymD,QAAsC,kBAArB04B,EAAiCA,EAAmBA,EAAiB14B,QAC3FzmD,KAAK0sC,SAAW1sC,KAAKymD,QACrBzmD,KAAKm/E,iBAAmBA,EACxBn/E,KAAKw/E,KAAOA,EACZ/G,EAAM51F,QAAQ4R,iBAAiBipB,EAAW1d,KAAMm/E,GAChD1G,EAAMwG,gBAAgBj/E,KAC1B,CAaA,OAZAq/E,EAAiB7hF,UAAUggB,YAAc,SAAU2V,IAE/CnoC,EADSgV,KAAK+f,SACXoT,GACCnzB,KAAKw/E,MACLx/E,KAAKwE,SAEb,EACA66E,EAAiB7hF,UAAUgH,QAAU,WACjCxE,KAAKy4E,MAAM51F,QAAQ6R,oBAAoBsL,KAAK0d,UAAW1d,KAAMA,KAAKm/E,kBAClEn/E,KAAKy4E,MAAMyG,gBAAgBl/E,MAC3BA,KAAKy4E,MAAQz4E,KAAK+f,QAAU,IAChC,EACOs/D,CACX,CAzBuB,GA2BnBI,EAAuB,WACvB,SAASA,IACLz/E,KAAKolB,aAAe,CAAC,CACzB,CAOA,OANAq6D,EAAoBjiF,UAAU+kD,cAAgB,SAAU3E,GACpD59C,KAAKolB,aAAaw4B,IAAO,CAC7B,EACA6hC,EAAoBjiF,UAAUkiF,cAAgB,SAAU9hC,GACpD,OAAOA,KAAO59C,KAAKolB,YACvB,EACOq6D,CACX,CAX0B,GAYtBE,EAA0B,WAC1B,SAASA,EAAuBhH,EAAiBiH,QACrB,IAApBjH,IAA8BA,GAAkB,QAC3B,IAArBiH,IAA+BA,GAAmB,GACtD5/E,KAAK24E,gBAAkBA,EACvB34E,KAAK4/E,iBAAmBA,EACxB5/E,KAAK6/E,mBAAqB,IAC9B,CAEA,OADAF,EAAuBG,OAAS,IAAIH,EAC7BA,CACX,CAV6B,GAWzBI,EAAuB,WACvB,SAASA,IACT,CAoCA,OAnCAA,EAAoBnzC,QAAU,WAC1B,IAAIM,EAAc,IAAI6yC,EAEtB,OADA7yC,EAAYN,SAAU,EACfM,CACX,EACA6yC,EAAoBC,SAAW,SAAUr3E,EAAMnd,GAC3C,IAAI0hD,EAAc,IAAI6yC,EAGtB,OAFA7yC,EAAYvkC,KAAOA,EACnBukC,EAAY1hD,WAAaA,GAAc,CAAC,EACjC0hD,CACX,EACA6yC,EAAoBl9F,QAAU,SAAU7B,EAAM2nB,GAC1C,IAAIukC,EAAc,IAAI6yC,EAKtB,OAJA7yC,EAAYvkC,KAAOA,EACnBukC,EAAY1hD,WAAa,CAAC,EAC1B0hD,EAAY+yC,oBAAsBj/F,EAAK+5D,aAAa,kBAAoBpyC,EAAKu3E,eAC7EhzC,EAAYizC,qBAAsB,EAC3BjzC,CACX,EACA6yC,EAAoBzqF,UAAY,SAAU60E,EAAUxhE,GAChD,IAAIukC,EAAc,IAAI6yC,EAItB,OAHA7yC,EAAYi9B,SAAWA,EACvBj9B,EAAYvkC,KAAOA,GAAQ,KAC3BukC,EAAY1hD,WAAa,CAAC,EACnB0hD,CACX,EACA6yC,EAAoBK,QAAU,SAAU/5F,EAAM2oC,EAAW0+C,GACrD,IAAIxgC,EAAc,IAAI6yC,EAKtB,OAJA7yC,EAAY7mD,KAAOA,EACnB6mD,EAAYle,UAAYA,EACxBke,EAAYwgC,YAAcA,EAC1BxgC,EAAYmzC,uBAAwB,EAC7BnzC,CACX,EACA6yC,EAAoBD,OAAS,IAAIC,EAC1BA,CACX,CAvC0B,GAwCtBO,EAAUP,EAAoBviF,UAClC8iF,EAAQH,qBAAsB,EAC9BG,EAAQ1zC,SAAU,EAClB0zC,EAAQC,iBAAmB,KAC3BD,EAAQ5S,YAAc,KACtB4S,EAAQxQ,iBAAmB,KAC3BwQ,EAAQE,uBAAwB,EAChCF,EAAQG,eAAiB,KACzBH,EAAQtxD,UAAY,KACpBsxD,EAAQL,mBAAoB,EAC5BK,EAAQj6F,KAAO,KACfi6F,EAAQ90F,WAAa,KACrB80F,EAAQ33E,KAAO,KACf23E,EAAQnW,SAAW,KACnBmW,EAAQD,uBAAwB,EAChC,IAAIK,EAAqB,WACrB,SAASA,IACT,CAgDA,OA/CAA,EAAkBC,WAAa,SAAUC,GACrC,IAAI1zC,EAAc,IAAIwzC,EAGtB,OAFAxzC,EAAY0zC,iBAAmBA,EAC/B1zC,EAAYyzC,YAAa,EAClBzzC,CACX,EACAwzC,EAAkBG,kBAAoB,SAAU58E,GAC5C,IAAIipC,EAAc,IAAIwzC,EAEtB,OADAxzC,EAAY2zC,kBAAoB58E,EACzBipC,CACX,EACAwzC,EAAkBhV,WAAa,SAAUj/D,GACrC,IAAIygC,EAAc,IAAIwzC,EAGtB,OAFAxzC,EAAYzgC,YAAcA,EAC1BygC,EAAYw+B,YAAa,EAClBx+B,CACX,EACAwzC,EAAkBI,QAAU,SAAUF,EAAkBG,GACpD,IAAI7zC,EAAc,IAAIwzC,EAOtB,OANAxzC,EAAY0zC,iBAAmBA,EAC/B1zC,EAAYzgC,YAAci0E,EAAkBM,cAC5C9zC,EAAY0iC,qBAAuB,CAACmR,GACpC7zC,EAAYwgC,YAAcqT,EAAmBrT,YAC7CxgC,EAAY+zC,UAAY,CAACF,EAAmBp4E,KAAK7hB,QACjDomD,EAAY4zC,SAAU,EACf5zC,CACX,EACAwzC,EAAkBZ,OAAS,SAAUoB,EAAYN,EAAkBK,EAAWrR,EAAsBnjE,EAAa00E,GAC7G,IAAIj0C,EAAc,IAAIwzC,EAQtB,OAPAxzC,EAAYg0C,WAAaA,EACzBh0C,EAAY0zC,iBAAmBA,EAC/B1zC,EAAY+zC,UAAYA,EACxB/zC,EAAY0iC,qBAAuBA,EACnC1iC,EAAYzgC,YAAcA,EAC1BygC,EAAY+yC,mBAAoBkB,GAAqBA,EAAmBlB,kBACxE/yC,EAAYi0C,mBAAqBA,EAC1Bj0C,CACX,EACAwzC,EAAkBU,UAAY,SAAUH,EAAWrR,EAAsBnjE,EAAasF,GAClF,IAAIm7B,EAAc,IAAIwzC,EAKtB,OAJAxzC,EAAYzgC,YAAcA,EAC1BygC,EAAY0iC,qBAAuBA,EACnC1iC,EAAY+zC,UAAYA,EACxB/zC,EAAYn7B,OAASA,EACdm7B,CACX,EACAwzC,EAAkBM,cAAgB51F,OAAOwtC,OAAO,IACzC8nD,CACX,CAnDwB,GAoDpBW,EAAUX,EAAkBljF,UAgChC,SAASs+B,EAAWC,EAAYj1C,EAAQ2F,EAAK+5B,GACzC,IAA2HkK,EAAvHuD,EAAI/pC,UAAUC,OAAQguC,EAAIlE,EAAI,EAAIntC,EAAkB,OAAT0/B,EAAgBA,EAAOp7B,OAAOsoC,yBAAyB5sC,EAAQ2F,GAAO+5B,EACrH,GAAuB,iBAAZlc,SAAoD,mBAArBA,QAAQ0xB,SAAyB7D,EAAI7tB,QAAQ0xB,SAASD,EAAYj1C,EAAQ2F,EAAK+5B,QACpH,IAAK,IAAIlvB,EAAIykC,EAAW5xC,OAAS,EAAGmN,GAAK,EAAGA,KAASo5B,EAAIqL,EAAWzkC,MAAI6gC,GAAKlE,EAAI,EAAIvD,EAAEyH,GAAKlE,EAAI,EAAIvD,EAAE5pC,EAAQ2F,EAAK0rC,GAAKzH,EAAE5pC,EAAQ2F,KAAS0rC,GAChJ,OAAOlE,EAAI,GAAKkE,GAAK/sC,OAAOgS,eAAetW,EAAQ2F,EAAK0rC,GAAIA,CAChE,CApCAkpD,EAAQH,WAAa,KACrBG,EAAQT,iBAAmB,KAC3BS,EAAQV,YAAa,EACrBU,EAAQ7c,SAAW,KACnB6c,EAAQC,oBAAsB,KAC9BD,EAAQR,kBAAoB,KAC5BQ,EAAQ3V,YAAa,EACrB2V,EAAQ50E,YAAc,KACtB40E,EAAQ50E,YAAc,KACtB40E,EAAQJ,UAAY,KACpBI,EAAQ3T,YAAc,KACtB2T,EAAQpB,mBAAoB,EAC5BoB,EAAQF,mBAAqB,KAC7BE,EAAQP,SAAU,EAClBO,EAAQtvE,OAAS,KAwBjB,IAAIwvE,EAAiB,WACrB,SAASC,EAAkB3V,GACvB,MAAO,IAAMA,EAAKpnF,aACtB,CACA,SAASg9F,EAAWr4F,GAChB,OAAQA,EAAKwV,OAAO,GAAGna,cAAgB2E,EAAK+O,MAAM,IAAI9H,QAAQkxF,EAAgBC,EAClF,CACA,SAASE,EAAiB1gG,GACtB,QAASA,EAAK2gG,uBAA0B,aAAah/F,KAAK3B,EAAK4gG,aACnE,CAEA,IAAIC,EAA4B,WAC5B,SAASA,EAAyB15E,EAAWvK,EAAKyC,EAAcyhF,EAAgBC,GAC5E/hF,KAAKmI,UAAYA,EACjBnI,KAAKpC,IAAMA,EACXoC,KAAKK,aAAeA,EACpBL,KAAKgiF,WAAY,EACjBhiF,KAAKiiF,YAAa,EAClBjiF,KAAK8hF,eAAiBA,EACtB9hF,KAAKiH,aAAejH,KAAKkD,SAAW6+E,CACxC,CAmDA,OAlDAF,EAAyBrkF,UAAU2G,SAAW,WAC1C,OAAOnE,KAAKiH,YAChB,EACA46E,EAAyBrkF,UAAU6G,SAAW,SAAUpB,GACpD,IAAIC,EAAWlD,KAAKiH,aACf7b,OAAOsrC,GAAGzzB,EAAUC,KACrBlD,KAAKkD,SAAWA,EAChBlD,KAAKiH,aAAehE,EAChBjD,KAAKiiF,YAAcjiF,KAAKgiF,YACpBhiF,KAAKmI,UAAUi/D,SACfpnE,KAAKhC,QAGLgC,KAAKgiF,WAAY,EACjBhiF,KAAKmI,UAAUW,eAAe9I,QAI9C,EACA6hF,EAAyBrkF,UAAUQ,KAAO,WACtC,IAAIkF,EAAWlD,KAAKkD,SAChBD,EAAWjD,KAAKiH,aACpBjH,KAAKgiF,WAAY,EACb52F,OAAOsrC,GAAGzzB,EAAUC,KAGpBlD,KAAK8hF,gBACL9hF,KAAK8hF,eAAe7+E,EAAUC,GAElClD,KAAKgD,gBAAgBC,EAAUC,GAC/BlD,KAAKkD,SAAWD,EACpB,EACA4+E,EAAyBrkF,UAAUwF,gBAAkB,SAAUC,EAAUC,GACrE,MAAM,IAAI8H,MAAM,0BACpB,EACA62E,EAAyBrkF,UAAU0C,UAAY,SAAU6B,EAASC,GAC9DhC,KAAK8B,cAAcC,EAASC,EAChC,EACA6/E,EAAyBrkF,UAAUsE,cAAgB,SAAUC,EAASC,GAClE,MAAM,IAAIgJ,MAAM,0BACpB,EACA62E,EAAyBrkF,UAAUqD,YAAc,SAAUkB,EAASC,GAChEhC,KAAK0C,iBAAiBX,EAASC,EACnC,EACA6/E,EAAyBrkF,UAAUkF,iBAAmB,SAAUX,EAASC,GACrE,MAAM,IAAIgJ,MAAM,0BACpB,EAC2B8wB,EAAW,EAClC,WACD+lD,EAEP,CA7D+B,GA+D/B,SAASthF,EAAY3U,EAAUxC,GAC3B,IAAIsyB,EAAS9vB,EAASs3B,cACtB,QAAet1B,IAAX8tB,EAAsB,CACtB,IAAIulB,EAAO71C,OAAO81C,eAAet1C,GAAUiS,YACvC8N,EAAW,SAAa,cAAmBs1B,GAC1Ct1B,EAASijD,eACVjjD,EAAS+hB,WAAW,eAAsB,IAAI,KAAa9hC,EAASiS,aAExE6d,EAAS/P,EAASrL,gBAAgB0qB,2BAA2Bp/B,GAC7D+f,EAASu2E,yBAAyBt2F,EAAU8vB,EAChD,CACA,OAAOA,EAAOtyB,EAClB,CACA,IAAI+4F,EAAoB,WACpB,SAASA,EAAiBC,GACM,iBAAjBA,EACPpiF,KAAK5W,KAAOg5F,EAGZh3F,OAAOC,OAAO2U,KAAMoiF,GAExBpiF,KAAK1K,UAAY0K,KAAK1K,WAAamsF,EAAWzhF,KAAK5W,MACnD,IAAIihF,EAAqBrqE,KAAKqqE,mBAC1BA,QACArqE,KAAKqqE,mBAAqB,YAES,iBAAvBA,IACZrqE,KAAKqqE,mBAAqB,KAAYA,IAAuB,aAEjErqE,KAAKswB,cAAgBtwB,KAAKswB,eAAiB,KAC3CtwB,KAAKy4E,MAAQ,KACbz4E,KAAKhD,WAAa,IACtB,CAyJA,OAxJAmlF,EAAiB3kF,UAAU6kF,aAAe,SAAUv7F,EAAQ6kB,EAAU3O,GAIlE,GAHA2O,EAASyT,WAAWx1B,KAAKoW,MACzB2L,EAASngB,WAAWwU,KAAK1K,WAAa0K,KACtCA,KAAKy4E,MAAQ9sE,EACT3O,EAEA,OADAgD,KAAKhD,WAAaA,EACXgD,KAAKsiF,qBAAqBtlF,EAGzC,EACAmlF,EAAiB3kF,UAAU8kF,qBAAuB,SAAUtlF,GACxD,IAAI5T,EAAO4W,KAAK5W,KAsBhB,OArBA4T,EAAWE,cAAe,EAC1BF,EAAWC,YAAa,EACpB,gBAAiBD,IACjBgD,KAAKuiF,aAAevlF,EAAWuzB,mBACxBvzB,EAAWuzB,mBACXvzB,EAAWG,UAElB,UAAWH,IACXgD,KAAKuiF,aAAevlF,EAAWhL,aACxBgL,EAAWhL,aACXgL,EAAWG,UAEtBH,EAAWrT,IAAM,WACb,OAAO4W,EAAYP,KAAM5W,GAAM+a,UACnC,EACAnH,EAAWnT,IAAM,SAAUmI,GACvBuO,EAAYP,KAAM5W,GAAMib,SAASrS,EACrC,EACAgL,EAAWrT,IAAI4W,YAAc,SAAU3C,GACnC,OAAO2C,EAAY3C,EAAKxU,EAC5B,EACO4T,CACX,EACAmlF,EAAiB3kF,UAAUglF,SAAW,SAAU17F,EAAQ6kB,GACpD,IACI82E,EADAr5F,EAAO4W,KAAK5W,KAEW,OAAvB4W,KAAKswB,gBACLmyD,EAAcr5F,EAAO,aACFtC,EAAO0W,YACtBwC,KAAKswB,cAAgBmyD,GAGL,OAApBziF,KAAKhD,YACL5R,OAAOgS,eAAetW,EAAO0W,UAAWpU,EAAM4W,KAAKsiF,qBAAqB,CAAC,GAEjF,EACAH,EAAiB3kF,UAAUklF,eAAiB,SAAU1zD,GAClD,IAII+yD,EAJAD,EAAiB,KACjBS,EAAeviF,KAAKuiF,aACpBI,EAAoB3iF,KAAKswB,cACzBlnC,EAAO4W,KAAK5W,KAEhB,IAAI4W,KAAK4iF,WAAT,CAGA,GAAID,KAAqB3zD,EAEjB8yD,EADA,oBAAqB9yD,EACJ,SAAU/rB,EAAUC,GACjC8rB,EAAU2zD,GAAmB1/E,EAAUC,GACvC8rB,EAAU6zD,gBAAgBz5F,EAAM6Z,EAAUC,EAC9C,EAGiB,SAAUD,EAAUC,GAAY,OAAO8rB,EAAU2zD,GAAmB1/E,EAAUC,EAAW,OAG7G,GAAI,oBAAqB8rB,EAC1B8yD,EAAiB,SAAU7+E,EAAUC,GAAY,OAAO8rB,EAAU6zD,gBAAgBz5F,EAAM6Z,EAAUC,EAAW,OAE5G,GAA0B,OAAtBy/E,EACL,MAAM,IAAI33E,MAAM,kBAAkBjkB,OAAO47F,EAAmB,kDAKhE,YAHqB/0F,IAAjB20F,IACAR,EAAuC,mBAAjBQ,EAA8BA,EAAavkF,KAAKgxB,GAAauzD,GAEhF,IAAIV,EAAyB7hF,KAAKy4E,MAAMtwE,UAAW6mB,EAAWhvB,KAAK5W,KAAM04F,EAAgBC,EArBhG,CAsBJ,EACAI,EAAiB3kF,UAAUslF,YAAc,SAAU9zD,EAAW+zD,EAAgBv3F,EAAYw3F,EAAqB3M,GAC3G,IAAIyL,EACAhiF,EACAxK,EACAitF,EAAeviF,KAAKuiF,aACxB,GAAIviF,KAAK01D,UACL,IAAK,IAAIjpE,KAAOjB,EACZwU,KAAKijF,uBAAuBj0D,EAAW+zD,EAAgBC,EAAqBv2F,EAAKjB,EAAWiB,GAAM4pF,QAGhGr2E,KAAK4iF,aACX9iF,EAAWijF,EAAe/iF,KAAK5W,MACZ,OAAfoC,IACAs2F,EAAiBhiF,EAASgiF,eAC1BxsF,EAAY9J,EAAWwU,KAAK1K,WACxB0tF,IACAljF,EAASgiF,eAAiB,MAEL,iBAAdxsF,GACP05B,EAAUhvB,KAAK5W,MAAQkM,EACvBwK,EAAS9B,QAEJ1I,EACL+gF,EAAgBzsF,KAAK,CAAEkW,SAAUA,EAAU0B,QAASlM,EAAUi3B,cAAcyC,UAEtDphC,IAAjB20F,GACLziF,EAAS9B,OAEb8B,EAASgiF,eAAiBA,GAE9BhiF,EAASmiF,YAAa,EAE9B,EACAE,EAAiB3kF,UAAUylF,uBAAyB,SAAUj0D,EAAW+zD,EAAgBC,EAAqB55F,EAAMkM,EAAW+gF,GAC3H,IAEIv2E,EACAqpC,EAHAw5C,EAAoBv5F,EAAO,UAC3B04F,EAAiB,KAGjBa,KAAqB3zD,EAEjB8yD,EADA,oBAAqB9yD,EACJ,SAAU/rB,EAAUC,GACjC8rB,EAAU2zD,GAAmB1/E,EAAUC,GACvC8rB,EAAU6zD,gBAAgBz5F,EAAM6Z,EAAUC,EAC9C,EAGiB,SAAUD,EAAUC,GAAY,OAAO8rB,EAAU2zD,GAAmB1/E,EAAUC,EAAW,EAGzG,oBAAqB8rB,IAC1B8yD,EAAiB,SAAU7+E,EAAUC,GAAY,OAAO8rB,EAAU6zD,gBAAgBz5F,EAAM6Z,EAAUC,EAAW,GAEjHpD,EAAWijF,EAAe35F,GAAQ,IAAIy4F,EAAyB7hF,KAAKy4E,MAAMtwE,UAAW6mB,EAAW5lC,EAAM04F,GACtG12F,OAAOgS,eAAe4xB,EAAW5lC,EAAM,CACnC8T,cAAc,EACdD,YAAY,EACZtT,IAAKmW,EAASqE,SAASuH,KAAK5L,GAC5BjW,IAAKiW,EAASuE,SAASqH,KAAK5L,KAE5BkjF,IACAljF,EAASgiF,eAAiB,MAEL,iBAAdxsF,GACP05B,EAAU5lC,GAAQkM,EAClBwK,EAAS9B,QAEJ1I,IACL6zC,EAAO,CAAErpC,SAAUA,EAAU0B,QAASlM,EAAUi3B,cAAcyC,IAC9DqnD,EAAgBzsF,KAAKu/C,IAEzBrpC,EAASmiF,YAAa,EACtBniF,EAASgiF,eAAiBA,CAC9B,EACOK,CACX,CA7KuB,GA+KnBe,EAAe,WACf,SAASA,IACT,CA6DA,OA5DAA,EAAY1lF,UAAUs/E,gBAAkB,SAAU9qF,GAC9C,IAAKA,EACD,OAAO,KAEX,GAAqB,iBAAVA,GAAsB,oBAAqBA,EAAO,CACzD,IAAImxF,EAAW,SAAWnxF,EAAM6L,aAShC,MAPqB,iBADrB7L,EAAQA,EAAM8qF,qBAEV9qF,EAAQ,IAAIoxF,GAAqBpxF,IAErC6qF,GAAav2B,OAAOt0D,GAChBmxF,EAAS1oD,UACTzoC,EAAM+qF,eAAeoG,EAAS1oD,UAE3BzoC,CACX,CAIA,GAHqB,iBAAVA,IACPA,EAAQ,IAAIoxF,GAAqBpxF,IAEjC6qF,GAAa12B,SAASn0D,GACtB,OAAOA,EAKX,GAHqB,mBAAVA,IACPA,EAAQA,EAAM6L,aAEd,UAAW7L,EAAO,CAClB,IACI43B,EADAqK,EAAIjiC,EAAMmkF,MAUd,OANIvsD,EADM,QADVqK,EAAiB,mBAANA,EAAmBA,EAAEj2B,KAAKhM,GAASiiC,GAEnC,IAAIovD,GAGJpvD,aAAaqvD,GAAqBrvD,EAAI,IAAIqvD,GAAmBrvD,GAExE,YAAgBivD,EAAYK,wBAAyB35D,EAAM53B,GACpD43B,CACX,CACA,IAAI87B,EAAS,SAAW1zD,GACpBjI,EAAW,SAAam5F,EAAYK,wBAAyBvxF,GACjE,GAAKjI,EAMI27D,EAAOjrB,WACZ1wC,EAAS0wC,SAAWirB,EAAOjrB,cAPhB,CACX,IAAKirB,EAAOjrB,SACR,MAAM,IAAIzvB,MAAM,uDAAyDhZ,GAE7EjI,EAAWiW,KAAKwjF,2BAA2B99B,EAC/C,CAIA,OAAO37D,CACX,EACAm5F,EAAY1lF,UAAUgmF,2BAA6B,SAAU99B,GACzD,OAAO,IAAI+9B,GAAyBzjF,KAAM0lD,EAC9C,EACAw9B,EAAY1lF,UAAUkmF,uBAAyB,SAAUh+B,GACrD,IAAIjrB,EAAWirB,EAAOjrB,SAEtB,OADUA,EAASjN,SAAS,QAAUiN,EAASjN,SAAS,OAAUiN,EAAShN,UAAU,EAAGgN,EAAStwC,OAAS,GAAKswC,GACnG,OAChB,EACAyoD,EAAYK,wBAA0B,wBAC/BL,CACX,CAhEkB,GAkElB,SAAStkC,EAAGx1D,GACR,MAAM,IAAI4hB,MAAM,kCAAkCjkB,OAAOqC,EAAM,OACnE,CACA,IAAIu6F,EAAmB,WACnB,SAASA,IACT,CAaA,OAZAA,EAAgBnmF,UAAUmtE,iBAAmB,SAAUtnC,EAAW8H,EAAag/B,EAAUG,GACrF1rB,EAAG,mBACP,EACA+kC,EAAgBnmF,UAAUotE,2BAA6B,SAAUvnC,EAAWxgD,EAASsmD,EAAM4gC,EAAqBhoE,GAC5G68C,EAAG,6BACP,EACA+kC,EAAgBnmF,UAAUiuE,qBAAuB,SAAUpoC,EAAWxgD,GAClE+7D,EAAG,uBACP,EACA+kC,EAAgBnmF,UAAUouE,mBAAqB,SAAUvoC,EAAWrxC,GAChE4sD,EAAG,qBACP,EACO+kC,CACX,CAhBsB,GAkBlBC,EAAUx4F,OAAOwtC,OAAO,IACxBirD,EAAuB,WACvB,SAASA,EAAoBhhG,GACzBmd,KAAKnd,QAAUA,EACfmd,KAAKnd,QAAQihG,gBAAkB9jF,IACnC,CAKA,OAJA6jF,EAAoB53D,OAAS,WACzB,MAAO,CAAC,aACZ,EACA43D,EAAoBrmF,UAAUsxE,aAAe,SAAU7rE,EAAUC,GAAY,EACtE2gF,CACX,CAV0B,GAWtBE,EAAmB,WACnB,SAASA,EAAgBnpC,EAAQxxD,EAAM46F,EAAiBC,GACpDjkF,KAAK46C,OAASA,EACd56C,KAAK46C,OAAO1V,SAAWllC,KACvBA,KAAK5W,KAAOA,EACZ4W,KAAKgkF,gBAAkBA,EACvBhkF,KAAKikF,gBAAkBA,EACvBjkF,KAAKkkF,gBAAkB,KACvBlkF,KAAKmkF,YAAc,EACnBnkF,KAAKokF,YAAc,KACR,IAAIP,EAAoB7jF,KAAK46C,QACnC5oD,MAAQgO,KAAKgkF,eACtB,CA0EA,OAzEA54F,OAAOgS,eAAe2mF,EAAgBvmF,UAAW,yBAA0B,CACvE7T,IAAK,WACD,OAAOqW,KAAKikF,iBAAwC,IAArBjkF,KAAKmkF,WACxC,EACAlnF,YAAY,EACZC,cAAc,IAElB6mF,EAAgBvmF,UAAU6mF,sBAAwB,SAAUz6D,EAAM06D,EAAOC,EAAkBl3F,GACvF,GAAyB,OAArB2S,KAAKokF,YAAsB,CAC3BpkF,KAAKokF,YAAcpkF,KAAKikF,gBAAgB3lF,OAAO0B,KAAKwkF,UAAU72D,WAC9D3tB,KAAKokF,YAAY14E,KAAK1L,KAAKwkF,UAAUxlF,eAAgBgB,KAAKwkF,UAAUllF,iBACpE,IAAIw+E,EAAQ1yF,OAAOkT,OAAO,MAC1Bw/E,EAAM99E,KAAKkkF,gBAAgB96F,MAAQ4W,KAAKkkF,gBACxCO,EAAUC,eAAe1kF,KAAKokF,YAAatG,EAAOyG,EAAkBl3F,EAAO2S,KAAKkkF,gBAAgB96F,KACpG,CACJ,EACA26F,EAAgBvmF,UAAUmnF,cAAgB,SAAUT,GAChDlkF,KAAKkkF,gBAAkBA,CAC3B,EACAH,EAAgBvmF,UAAUonF,QAAU,SAAUh7D,EAAM5oC,EAAMujG,EAAkBl3F,GAC/C,OAArB2S,KAAKokF,cACLpkF,KAAKokF,YAAYS,cACjB7kF,KAAKokF,YAAYrM,WACjB/3E,KAAKokF,YAAYr4E,SACjB/L,KAAKokF,YAAc,MAEnBpjG,EAAKkkD,oBAAoB6+C,EACzB/iG,EAAKkkD,SAASy/C,cAAc3kF,OAGhCA,KAAKmkF,cACLnkF,KAAKkkF,gBAAgBU,QAAQh7D,EAAM5oC,EAAMujG,EAAkBl3F,GAC/D,EACA02F,EAAgBvmF,UAAUm0E,WAAa,SAAU/nD,EAAM26D,GACnDvkF,KAAKmkF,cACLnkF,KAAKkkF,gBAAgBvS,WAAW/nD,EAAM26D,GAClCvkF,KAAK8kF,wBACL9kF,KAAKqkF,sBAAsB,KAAMT,EAASW,EAElD,EACAR,EAAgBvmF,UAAUmvE,UAAY,SAAU4X,GAC5CvkF,KAAKmkF,YAAc,EACnBnkF,KAAKkkF,gBAAgBvX,UAAU4X,GAC3BvkF,KAAK8kF,wBACL9kF,KAAKqkF,sBAAsB,KAAMT,EAASW,EAElD,EACAR,EAAgBvmF,UAAUunF,YAAc,SAAUn7D,EAAM26D,GACpDvkF,KAAKkkF,gBAAgBa,YAAYn7D,EAAM26D,EAC3C,EACAR,EAAgBvmF,UAAU+uE,QAAU,SAAUiY,GAC1CxkF,KAAKwkF,UAAYA,CACrB,EACAT,EAAgBvmF,UAAUkO,KAAO,SAAUke,GACnC5pB,KAAKokF,aACLpkF,KAAKokF,YAAY14E,KAAKke,EAAK5qB,eAAgB4qB,EAAKtqB,gBAExD,EACAykF,EAAgBvmF,UAAUwvC,SAAW,WAC7BhtC,KAAKokF,aACLpkF,KAAKokF,YAAYp3C,UAEzB,EACA+2C,EAAgBvmF,UAAUu6E,SAAW,WAC7B/3E,KAAKokF,aACLpkF,KAAKokF,YAAYrM,UAEzB,EACAgM,EAAgBvmF,UAAUuO,OAAS,WAC3B/L,KAAKokF,aACLpkF,KAAKokF,YAAYr4E,QAEzB,EACOg4E,CACX,CAvFsB,GAwFlBiB,EAAc,WACd,SAASA,EAAWpqC,EAAQxxD,EAAM66F,GAC9BjkF,KAAK46C,OAASA,EACd56C,KAAK46C,OAAOqqC,2BAA4B,EACxCjlF,KAAK46C,OAAO1V,SAAWllC,KACvBA,KAAK5W,KAAOA,EACZ4W,KAAKikF,gBAAkBA,EACvBjkF,KAAKokF,YAAc,KACnBpkF,KAAKmkF,YAAc,EACnBnkF,KAAK+qD,SAAW,GAChB/qD,KAAKklF,mBAAqB,KAC1BllF,KAAKmlF,iBAAmB,IAC5B,CAqLA,OApLA/5F,OAAOgS,eAAe4nF,EAAWxnF,UAAW,yBAA0B,CAClE7T,IAAK,WACD,OAAOqW,KAAKikF,iBAAwC,IAArBjkF,KAAKmkF,WACxC,EACAlnF,YAAY,EACZC,cAAc,IAElB8nF,EAAWxnF,UAAUonF,QAAU,SAAUh7D,EAAM5oC,EAAMujG,EAAkBl3F,EAAOkgE,GAC1E,IAAI63B,EAAQpkG,EAOZ,GANyB,OAArBgf,KAAKokF,cACLpkF,KAAKokF,YAAYS,cACjB7kF,KAAKokF,YAAYrM,WACjB/3E,KAAKokF,YAAYr4E,SACjB/L,KAAKokF,YAAc,MAEnBgB,EAAMlgD,oBAAoB6+C,EAC1BqB,EAAMlgD,SAASy/C,cAAc3kF,WAGjC,GAA8B,OAA1BA,KAAKmlF,iBACLV,EAAUY,gBAAgBz7D,EAAM,CAACw7D,GAAQplF,KAAKmlF,iBAAkBnlF,KAAM3S,OAErE,CACD+3F,EAAME,YAAc17D,EACpBw7D,EAAMG,mBAAqBhB,EAC3Ba,EAAMI,eAAiBxlF,KACvB,IAAI46C,EAAS56C,KAAKylF,YAAY77D,EAAMw7D,EAAOb,EAAkBl3F,GAC9CutD,EAAOx0D,WACbklE,aAAa85B,EAAOxqC,GAC7B56C,KAAK+qD,SAASnhE,KAAKw7F,GACnBplF,KAAKmkF,aACT,CACJ,EACAa,EAAWxnF,UAAUm0E,WAAa,SAAU/nD,EAAM26D,GAC9C,GAA8B,OAA1BvkF,KAAKmlF,iBACLV,EAAUiB,iBAAiB97D,EAAM5pB,KAAKmlF,iBAAkBnlF,WAEvD,GAAIA,KAAKokF,aAAepkF,KAAKokF,YAAYuB,SAC1ClB,EAAUiB,iBAAiB97D,EAAM5pB,KAAKokF,YAAYtG,MAAOyG,OAExD,CACD,IAAIvf,EAAQhlE,KAAK+qD,SAAS7yD,MAAK,SAAUzU,GAAK,OAAOA,EAAEmiG,oBAAsBrB,CAAkB,IAC/F,GAAIvf,EAAO,CAGP,IAFA,IAAIja,EAAWia,EAAM6gB,qBACjBC,EAAc9lF,KAAK+qD,SACdzzD,EAAI,EAAGsI,EAAKmrD,EAAS5gE,OAAQmN,EAAIsI,IAAMtI,EAAG,CAC/C,IAAI5G,EAAQq6D,EAASzzD,GACrB,GAAI5G,EAAM40F,cAAgB17D,EAAM,CAC5BmhC,EAASppD,OAAOrK,EAAG,GACnBsyB,EAAKizB,SAAShO,YAAYn+C,GAC1B4G,IACAsI,IACAI,KAAKmkF,cACL,IAAIpwE,EAAM+xE,EAAYv/F,QAAQmK,GAC1BqjB,GAAO,GACP+xE,EAAYnkF,OAAOoS,EAAK,EAEhC,CACJ,CACI/T,KAAK8kF,wBACL9kF,KAAKqkF,sBAAsBz6D,EAAMg6D,EAASW,EAElD,CACJ,CACJ,EACAS,EAAWxnF,UAAUmvE,UAAY,SAAU4X,GACvC,GAA8B,OAA1BvkF,KAAKmlF,iBACLV,EAAUsB,gBAAgB/lF,KAAKmlF,iBAAkBnlF,WAEhD,GAAIA,KAAKokF,aAAepkF,KAAKokF,YAAYuB,SAC1ClB,EAAUsB,gBAAgB/lF,KAAKokF,YAAYtG,MAAOyG,OAEjD,CACD,IAAIvf,EAAQhlE,KAAK+qD,SAAS7yD,MAAK,SAAUzU,GAAK,OAAOA,EAAEmiG,oBAAsBrB,CAAkB,IAC/F,GAAIvf,EAAO,CAGP,IAFA,IAAIja,EAAWia,EAAM6gB,qBACjBC,EAAc9lF,KAAK+qD,SACdzzD,EAAI,EAAGsI,EAAKmrD,EAAS5gE,OAAQmN,EAAIsI,IAAMtI,EAAG,CAC/C,IAAI5G,EAAQq6D,EAASzzD,GACrB5G,EAAM40F,YAAYzoC,SAAShO,YAAYn+C,GACvCsP,KAAKmkF,cACL,IAAIpwE,EAAM+xE,EAAYv/F,QAAQmK,GAC1BqjB,GAAO,GACP+xE,EAAYnkF,OAAOoS,EAAK,EAEhC,CACAixD,EAAM6gB,qBAAuB,GACzB7lF,KAAK8kF,wBACL9kF,KAAKqkF,sBAAsB,KAAMT,EAASW,EAElD,CACJ,CACJ,EACAS,EAAWxnF,UAAUioF,YAAc,SAAU77D,EAAM5oC,EAAMujG,EAAkBl3F,GACvE,GAAIk3F,EAAkB,CAClB,IAAIvf,EAAQhlE,KAAK+qD,SAAS7yD,MAAK,SAAUzU,GAAK,OAAOA,EAAEmiG,oBAAsBrB,CAAkB,IAC/F,GAAIvf,EAAO,CACP,QAAcp3E,IAAVP,EAIA,IAHA,IAAI09D,EAAWia,EAAM6gB,qBACjBG,GAAa,EACbC,OAAW,EACN3uF,EAAI,EAAGsI,EAAKmrD,EAAS5gE,OAAQmN,EAAIsI,IAAMtI,EAAG,CAC/C,IAAIjL,EAAU0+D,EAASzzD,GACvB,GAAIjL,EAAQi5F,cAAgBW,IACxBD,IACAC,EAAW55F,EAAQi5F,YACfU,GAAa34F,GAAS44F,IAAar8D,GAEnC,OADAmhC,EAASppD,OAAOrK,EAAG,EAAGtW,GACfqL,CAGnB,CAGJ,OADA24E,EAAM6gB,qBAAqBj8F,KAAK5I,GACzBgkF,CACX,CACJ,CACA,OAAOhlE,KAAK46C,MAChB,EACAoqC,EAAWxnF,UAAU0oF,UAAY,SAAUpI,GACvC99E,KAAKmlF,iBAAmBrH,CAC5B,EACAkH,EAAWxnF,UAAUunF,YAAc,SAAUn7D,EAAM26D,GAC/C,IAAI3pC,EAAS,mBAAkB,UAC3BnqD,EAASuP,KAAK46C,OAAOx0D,WACzBw0D,EAAOgrC,kBAAoBrB,EAC3B3pC,EAAO0qC,YAAc17D,EACrBgxB,EAAOirC,qBAAuB,GAC9Bp1F,EAAO66D,aAAa1Q,EAAQ56C,KAAK46C,QACjC56C,KAAK+qD,SAASnhE,KAAKgxD,GACa,OAA5B56C,KAAKklF,qBACLllF,KAAKklF,mBAAqB,IAE9BllF,KAAKklF,mBAAmBt7F,KAAKgxD,EACjC,EACAoqC,EAAWxnF,UAAU6mF,sBAAwB,SAAUz6D,EAAM06D,EAAOC,EAAkBl3F,GAMlF,GALyB,OAArB2S,KAAKokF,cACLpkF,KAAKokF,YAAcpkF,KAAKikF,gBAAgB3lF,OAAO0B,KAAKwkF,UAAU72D,WAC9D3tB,KAAKokF,YAAY14E,KAAK1L,KAAKwkF,UAAUxlF,eAAgBgB,KAAKwkF,UAAUllF,iBACpEU,KAAKokF,YAAY+B,kBAAkBnmF,KAAK46C,SAExC56C,KAAKokF,YAAYuB,SAAU,CAC3B,IAAI7H,EAAQ99E,KAAKokF,YAAYtG,MACzBoH,EAAqBllF,KAAKklF,mBAC9B,GAA2B,OAAvBA,EACA,IAAK,IAAI1gB,KAAYsZ,EAEjB,IADA,IAAI3Y,EAAO2Y,EAAMtZ,GACRltE,EAAI,EAAGsI,EAAKslF,EAAmB/6F,OAAQmN,EAAIsI,IAAMtI,EAAG,CACzD,IAAIsjD,EAASsqC,EAAmB5tF,GAChC6tE,EAAK4f,YAAYnqC,EAAO0qC,YAAa1qC,EAAOgrC,kBAChD,CAGR5lF,KAAKomF,cAAgBtI,EACrB2G,EAAUY,gBAAgBz7D,EAAM06D,EAAOxG,EAAOyG,EAAkBl3F,EACpE,CACJ,EACA23F,EAAWxnF,UAAU+uE,QAAU,SAAUiY,GACrCxkF,KAAKwkF,UAAYA,CACrB,EACAQ,EAAWxnF,UAAUkO,KAAO,SAAUke,GAC9B5pB,KAAKokF,aACLpkF,KAAKokF,YAAY14E,KAAKke,EAAK5qB,eAAgB4qB,EAAKtqB,gBAExD,EACA0lF,EAAWxnF,UAAUwvC,SAAW,WACxBhtC,KAAKokF,aACLpkF,KAAKokF,YAAYp3C,UAEzB,EACAg4C,EAAWxnF,UAAUu6E,SAAW,WACxB/3E,KAAKokF,aACLpkF,KAAKokF,YAAYrM,UAEzB,EACAiN,EAAWxnF,UAAUuO,OAAS,WACtB/L,KAAKokF,aACLpkF,KAAKokF,YAAYr4E,QAEzB,EACOi5E,CACX,CAlMiB,GAmMbP,EAAa,WACb,SAASA,IACT,CA2EA,OA1EAA,EAAU4B,YAAc,SAAUrlG,GAC9B,YAA6B4M,IAAzB5M,EAAK8iG,gBACEW,EAAU6B,eAEdtlG,EAAK8iG,gBAAgB9xF,KAChC,EACAyyF,EAAUC,eAAiB,SAAU96D,EAAMk0D,EAAOyG,EAAkBl3F,EAAOk5F,GACvE,IAAIjC,EACJ,GAAa,OAAT16D,EACA06D,EAAQV,MAEP,CACD,IAAIl2B,EAAa9jC,EAAKizB,SAAS6Q,WAC3B9tD,EAAK8tD,EAAWvjE,OACpBm6F,EAAQ,IAAIj6F,MAAMuV,GAClB,IAAK,IAAItI,EAAI,EAAGA,EAAIsI,IAAMtI,EACtBgtF,EAAMhtF,GAAKo2D,EAAWp2D,EAE9B,CACAmtF,EAAUY,gBAAgBz7D,EAAM06D,EAAOxG,EAAOyG,EAAkBl3F,EAAOk5F,EAC3E,EACA9B,EAAUiB,iBAAmB,SAAU97D,EAAMk0D,EAAOyG,GAChD,IAAK,IAAI/f,KAAYsZ,EACjBA,EAAMtZ,GAAUmN,WAAW/nD,EAAM26D,EAEzC,EACAE,EAAUsB,gBAAkB,SAAUjI,EAAOyG,GACzC,IAAK,IAAI/f,KAAYsZ,EACjBA,EAAMtZ,GAAUmI,UAAU4X,EAElC,EACAE,EAAUY,gBAAkB,SAAUz7D,EAAM06D,EAAOxG,EAAOyG,EAAkBl3F,EAAOk5F,GAC/E,IAAK,IAAIjvF,EAAI,EAAGsI,EAAK0kF,EAAMn6F,OAAQmN,EAAIsI,IAAMtI,EAAG,CAC5C,IAAIhQ,EAAcg9F,EAAMhtF,GACpBs1D,EAAWtlE,EAAYslE,SAC3B,GAAItlE,EAAY29F,0BAA2B,CAEvC,IAAK,IAAIzgB,KADTl9E,EAAY49C,SAASghD,UAAUpI,GACVA,EACjBA,EAAMtZ,GAAUugB,YAAYn7D,EAAMtiC,EAAY49C,UAElDo/C,EAAM3iF,OAAOrK,EAAG,GAChBsI,IACAtI,GACJ,MACK,GAAiB,IAAbs1D,GAA+B,IAAbA,GAAkBtlE,EAAY49C,oBAAoB6+C,EACzE,GAAiB,IAAbn3B,GAAkB80B,EAAiBp6F,GACnCg9F,EAAM3iF,OAAOrK,EAAG,GAChBsI,IACAtI,QAEC,CACD,IAAI0tE,EAAQ8Y,EAAMyI,GAAuB9B,EAAU4B,YAAY/+F,IAC3D09E,IACAA,EAAM4f,QAAQh7D,EAAMtiC,EAAai9F,EAAkBl3F,GACnDi3F,EAAM3iF,OAAOrK,EAAG,GAChBsI,IACAtI,IAER,MAGAgtF,EAAM3iF,OAAOrK,EAAG,GAChBsI,IACAtI,GAER,CACA,IAAK,IAAIktE,KAAYsZ,EAAO,CACxB,IAAI3Y,EAAO2Y,EAAMtZ,GACbW,EAAK2f,wBACL3f,EAAKkf,sBAAsBz6D,EAAM06D,EAAOC,EAAkBl3F,EAElE,CACJ,EACAo3F,EAAU6B,eAAiB,0BACpB7B,CACX,CA9EgB,GAgFZ+B,EAAkC,WAClC,SAASA,EAA+B/N,GACpCz4E,KAAKy4E,MAAQA,EACbz4E,KAAKy4E,MAAMgO,mBACf,CAKA,OAJAD,EAA+BhpF,UAAU6L,KAAO,WAC5CrJ,KAAKy4E,MAAMgO,oBACXzmF,KAAKy4E,MAAMiO,yBACf,EACOF,CACX,CAVqC,GAWjCG,EAAwC,WACxC,SAASA,EAAqClO,GAC1Cz4E,KAAKy4E,MAAQA,EACbz4E,KAAKy4E,MAAMmO,gBAAkB5mF,KAC7BA,KAAK6mF,SAAW7mF,KAAK8mF,iBACzB,CAiBA,OAhBAH,EAAqCnpF,UAAUmgF,2BAA6B,WAExE,OADA39E,KAAKy4E,MAAMiO,0BACJ1mF,KAAK6mF,QAChB,EACAF,EAAqCnpF,UAAU/P,QAAU,WACrDuS,KAAK+mF,kBACT,EACAJ,EAAqCnpF,UAAUupF,iBAAmB,WAC9D,MAAM,IAAI/7E,MAAM,0BACpB,EACA27E,EAAqCnpF,UAAUspF,gBAAkB,WAC7D,IAAIxiF,EAAQtE,KACZ,OAAO,IAAItS,GAAQ,SAAUD,GACzB6W,EAAMyiF,iBAAmBt5F,CAC7B,GACJ,EACOk5F,CACX,CAvB2C,GAwBvCK,EAA0B,WAC1B,SAASA,IACLhnF,KAAK4mF,gBAAkB,KACvB5mF,KAAKymF,kBAAoB,CAC7B,CAmBA,OAlBAO,EAAuBxpF,UAAUy/E,WAAa,WAC1C,OAAgC,OAAzBj9E,KAAK4mF,gBACN,IAAID,EAAqC3mF,MACzC,IACV,EACAgnF,EAAuBxpF,UAAU4+E,OAAS,WACtC,OAAO,IAAIoK,EAA+BxmF,KAC9C,EACAgnF,EAAuBxpF,UAAUkpF,wBAA0B,WACvD,GAAI1mF,KAAKymF,mBAAqB,IAC1BzmF,KAAKymF,kBAAoB,EACI,OAAzBzmF,KAAK4mF,iBAA0B,CAC/B,IAAIjtE,EAAQ3Z,KAAK4mF,gBACjB5mF,KAAK4mF,gBAAkB,KACvBjtE,EAAMlsB,SACV,CAER,EACOu5F,CACX,CAxB6B,GA0BzBC,EAAQ,WACR,SAASA,EAAKt5D,EAAW+/C,EAAa7wB,EAAUlY,EAAayxC,EAAUrrB,EAAU+yB,GAsB7E,IAAK,IAAIj/E,KArBTmB,KAAK2tB,UAAYA,EACjB3tB,KAAK0tE,YAAcA,EACnB1tE,KAAKqjC,UAAYqqC,EAAYrqC,UAC7BrjC,KAAK68C,SAAWA,EAChB78C,KAAKiqB,WAAa4yB,EAAS5yB,WAC3BjqB,KAAKknF,UAAYrqC,EAASqqC,UAC1BlnF,KAAK2kC,YAAcA,EACnB3kC,KAAKo2E,SAAWA,EAChBp2E,KAAK+qD,SAAWA,EAChB/qD,KAAK89E,MAAQA,EACb99E,KAAK2lF,UAAW,EAChB3lF,KAAKmnF,WAAY,EACjBnnF,KAAK8sB,SAAU,EACf9sB,KAAK43E,YAAa,EAClB53E,KAAKhB,eAAiB,KACtBgB,KAAKV,gBAAkB,KACvBU,KAAK+uB,WAAa,KAClB/uB,KAAKonF,eAAiB,KACtBpnF,KAAKqnF,uBAAoBz5F,EACzBoS,KAAKsnF,mBAAoB,EACzBtnF,KAAKokF,YAAc,KACLtG,EAAO,CACjB99E,KAAK2lF,UAAW,EAChB,KACJ,CACJ,CAkJA,OAjJAsB,EAAKzpF,UAAUqwE,cAAgB,WAC3B7tE,KAAK0tE,YAAY6Z,kBAAkBvnF,KACvC,EACAinF,EAAKzpF,UAAU+uE,QAAU,WACrB,IAAIj1E,EACAsI,EACA+kC,EAAc3kC,KAAK2kC,YACvB,IAAKrtC,EAAI,EAAGsI,EAAK+kC,EAAYx6C,OAAQmN,EAAIsI,IAAMtI,EAC3CqtC,EAAYrtC,GAAGi1E,QAAQvsE,KAE/B,EACAinF,EAAKzpF,UAAUkO,KAAO,SAAU1M,EAAgBM,EAAiBkoF,GAC7D,IAAI7iD,EACAyxC,EACArrB,EACAzzD,EACAsI,EACJ,IAAI4nF,IAAiBxnF,KAAKsnF,kBAA1B,CAGA,GAAItnF,KAAK8sB,QAAS,CACd,GAAI9sB,KAAKhB,iBAAmBA,EACxB,OAEJgB,KAAK+L,QACT,CAMA,IALA/L,KAAK8sB,SAAU,EACf9sB,KAAKhB,eAAiBA,EACtBgB,KAAKV,gBAAkBA,IAAmB,QAAsBN,GAChEgB,KAAKqjC,UAAUokD,YAAY,aAAcznF,MAEpC1I,EAAI,EAAGsI,GADZw2E,EAAWp2E,KAAKo2E,UACUjsF,OAAQmN,EAAIsI,IAAMtI,EACxC8+E,EAAS9+E,GAAGoU,KAAK1L,MAOrB,IAL4B,OAAxBA,KAAKonF,iBACLpoF,EAAe0M,KAAK1L,KAAKonF,eAAepoF,eAAgBgB,KAAKonF,eAAe9nF,iBAC5EU,KAAKonF,eAAiB,MAGrB9vF,EAAI,EAAGsI,GADZ+kC,EAAc3kC,KAAK2kC,aACUx6C,OAAQmN,EAAIsI,IAAMtI,EAC3CqtC,EAAYrtC,GAAGoU,KAAK1L,MAGxB,IAAK1I,EAAI,EAAGsI,GADZmrD,EAAW/qD,KAAK+qD,UACU5gE,OAAQmN,EAAIsI,IAAMtI,EACxCyzD,EAASzzD,GAAGoU,KAAK1M,EAAgBM,GAAiB,GAElDU,KAAK2lF,UACLlB,EAAUC,eAAe1kF,KAAKokF,YAAapkF,KAAK89E,MA5BpD,CA8BJ,EACAmJ,EAAKzpF,UAAUkqF,WAAa,SAAUlmF,GAClCxB,KAAKo2E,SAASxsF,KAAK4X,GACfxB,KAAK8sB,SACLtrB,EAAQkK,KAAK1L,KAErB,EACAinF,EAAKzpF,UAAUuO,OAAS,WACpB,IAAI44B,EACAyxC,EACArrB,EACAzzD,EACAsI,EACJ,GAAII,KAAK8sB,QAAS,CAOd,IANA9sB,KAAK8sB,SAAU,EACf9sB,KAAKqjC,UAAUokD,YAAY,eAAgBznF,MACnB,OAApBA,KAAK+uB,YACL/uB,KAAK+uB,WAAWhjB,SAGfzU,EAAI,EAAGsI,GADZw2E,EAAWp2E,KAAKo2E,UACUjsF,OAAQmN,EAAIsI,IAAMtI,EACxC8+E,EAAS9+E,GAAGyU,SAGhB,IAAKzU,EAAI,EAAGsI,GADZ+kC,EAAc3kC,KAAK2kC,aACUx6C,OAAQmN,EAAIsI,IAAMtI,EAC3CqtC,EAAYrtC,GAAGyU,SAGnB,IAAKzU,EAAI,EAAGsI,GADZmrD,EAAW/qD,KAAK+qD,UACU5gE,OAAQmN,EAAIsI,IAAMtI,EACxCyzD,EAASzzD,GAAGyU,SAEhB/L,KAAKhB,eAAiB,KACtBgB,KAAKV,gBAAkB,IAC3B,CACJ,EACA2nF,EAAKzpF,UAAU2oF,kBAAoB,SAAUwB,GACzCA,EAAQvhG,WAAWklE,aAAatrD,KAAK68C,SAAU8qC,EACnD,EACAV,EAAKzpF,UAAUoqF,cAAgB,SAAUn3F,GACrCA,EAAOo+C,YAAY7uC,KAAK68C,SAC5B,EACAoqC,EAAKzpF,UAAUqnF,YAAc,WAKzB,IAJA,IAGIh0F,EAHAgsD,EAAW78C,KAAK68C,SAChBxwD,EAAU2T,KAAKiqB,WACfhiC,EAAM+X,KAAKknF,UAER76F,IACHwE,EAAOxE,EAAQsgE,YACf9P,EAAShO,YAAYxiD,GACjBA,IAAYpE,IAGhBoE,EAAUwE,CAElB,EACAo2F,EAAKzpF,UAAUwvC,SAAW,WACtB,IAAIrI,EACAomB,EACAzzD,EACAsI,EACJ,IAAII,KAAK43E,WAAT,CAQA,IALA53E,KAAK43E,YAAa,EACM,OAApB53E,KAAK+uB,YACL/uB,KAAK+uB,WAAWie,WAGf11C,EAAI,EAAGsI,GADZ+kC,EAAc3kC,KAAK2kC,aACUx6C,OAAQmN,EAAIsI,IAAMtI,EAC3CqtC,EAAYrtC,GAAG01C,WAGnB,IAAK11C,EAAI,EAAGsI,GADZmrD,EAAW/qD,KAAK+qD,UACU5gE,OAAQmN,EAAIsI,IAAMtI,EACxCyzD,EAASzzD,GAAG01C,UAXhB,CAaJ,EACAi6C,EAAKzpF,UAAUu6E,SAAW,WACtB,IAAIpzC,EACAomB,EACAzzD,EACAsI,EACJ,GAAII,KAAK43E,WAAY,CAMjB,IALA53E,KAAK43E,YAAa,EACM,OAApB53E,KAAK+uB,YACL/uB,KAAK+uB,WAAWgpD,WAGfzgF,EAAI,EAAGsI,GADZ+kC,EAAc3kC,KAAK2kC,aACUx6C,OAAQmN,EAAIsI,IAAMtI,EAC3CqtC,EAAYrtC,GAAGygF,WAGnB,IAAKzgF,EAAI,EAAGsI,GADZmrD,EAAW/qD,KAAK+qD,UACU5gE,OAAQmN,EAAIsI,IAAMtI,EACxCyzD,EAASzzD,GAAGygF,UAEpB,CACJ,EACOkP,CACX,CA9KW,GAgLPY,EAAY,WACZ,SAASA,IACT,CAuBA,OAtBAA,EAASrqF,UAAUsqF,MAAQ,SAAUjlG,GACjC,OAAO6K,EAAQD,SAAQ,EAC3B,EACAo6F,EAASrqF,UAAUuqF,MAAQ,SAAUllG,GACjC,OAAO6K,EAAQD,SAAQ,EAC3B,EACAo6F,EAASrqF,UAAUy5E,YAAc,SAAUp0F,EAASmlG,GAEhD,OADAnlG,EAAQmiC,UAAUC,OAAO+iE,GAClBt6F,EAAQD,SAAQ,EAC3B,EACAo6F,EAASrqF,UAAU05E,SAAW,SAAUr0F,EAASmlG,GAE7C,OADAnlG,EAAQmiC,UAAU77B,IAAI6+F,GACft6F,EAAQD,SAAQ,EAC3B,EACAo6F,EAASrqF,UAAUwoB,QAAU,SAAUnjC,EAASmlG,GAC5C,OAAOt6F,EAAQD,SAAQ,EAC3B,EACAo6F,EAASrqF,UAAUyqF,YAAc,SAAUC,GACvC,OAAOx6F,EAAQD,SAAQ,EAC3B,EACAo6F,EAASrqF,UAAU2qF,eAAiB,SAAUC,EAAYhpE,GAAc,EACxEyoE,EAASrqF,UAAU6qF,iBAAmB,SAAUD,GAAc,EACvDP,CACX,CA1Be,GAyCXS,EAAY,WACZ,SAASA,EAAS1tC,EAAQqlC,EAAmBjJ,QACxB,IAAbA,IAAuBA,EAAW6Q,EAASj8F,UAC/CoU,KAAK46C,OAASA,EACd56C,KAAKigF,kBAAoBA,EACzBjgF,KAAKhB,eAAiB,KACtBgB,KAAKV,gBAAkB,KACvBU,KAAKg3E,SAAWA,EAChBh3E,KAAK+qD,SAAW,GAChB/qD,KAAK8sB,SAAU,EACf9sB,KAAK43E,YAAa,EAClB53E,KAAKuoF,iBAAmB,KACxB3tC,EAAO1V,SAAWllC,KAClB46C,EAAOqqC,2BAA4B,CACvC,CAgUA,OA/TAqD,EAAS9qF,UAAUgrF,YAAc,SAAU5+D,EAAMj4B,QAC3B,IAAdA,IAAwBA,EAAY,SACxC,IAAI01F,EA9BZ,SAA8Bz9D,GAC1B,QAA+Bh8B,IAA3Bg8B,EAAKy9D,kBACL,OAAOz9D,EAAKy9D,kBAGhB,IADA,IAAIh7F,EAAUu9B,EAAKK,WACZ59B,GAAgC,IAArBA,EAAQugE,UACtBvgE,EAAUA,EAAQsgE,YAEtB,OAAItgE,GAAgC,IAArBA,EAAQugE,SACXhjC,EAAKy9D,kBAAoBh7F,EAAQ24B,UAAUx0B,SAAS,cAAgBnE,EAAU,KAElFu9B,EAAKy9D,kBAAoB,IACrC,CAkBgCoB,CAAqB7+D,GAC7C,GAA0B,OAAtBy9D,EACA,OAAQ11F,GACJ,IAAK,QACD,OAAOqO,KAAKg3E,SAAS8Q,MAAMT,GAC/B,IAAK,QACD,OAAOrnF,KAAKg3E,SAAS+Q,MAAMV,GAC/B,QACI,MAAM,IAAIr8E,MAAM,gCAAkCrZ,GAGlE,EACA22F,EAAS9qF,UAAU8vC,4BAA8B,WAC7C,IAAI78C,EAASuP,KAAK46C,OAClB56C,KAAK+qD,SAASnhE,KAAK,CACfizD,SAAUpsD,EACVw5B,WAAYx5B,EAAOw5B,WACnBi9D,UAAWz2F,EAAOy2F,UAClBrZ,cAAe,WAAc,EAC7BgX,YAAa,WAET,IADA,IAAIxrE,EACGA,EAAO5oB,EAAOy2F,WACjBz2F,EAAOgyD,YAAYppC,EAE3B,EACAkzD,QAAS,WAAc,EACvB7gE,KAAM,WAAc,EACpBK,OAAQ,WAAc,EACtBihC,SAAU,WAAc,EACxB+qC,SAAU,WAAc,GAEhC,EACAuQ,EAAS9qF,UAAUkO,KAAO,SAAU1M,EAAgBM,GAChD,IAAIhI,EACAsI,EACAmrD,EACJ,GAAI/qD,KAAK8sB,QAAS,CACd,GAAI9sB,KAAKhB,iBAAmBA,EACxB,OAEJgB,KAAK+L,QACT,CAKA,IAJA/L,KAAK8sB,SAAU,EACf9sB,KAAKhB,eAAiBA,EAAiBA,GAAkBgB,KAAKhB,eAC9DgB,KAAKV,gBAAkBA,EAAkBA,GAAmBU,KAAKV,gBAE5DhI,EAAI,EAAGsI,GADZmrD,EAAW/qD,KAAK+qD,UACU5gE,OAAQmN,EAAIsI,IAAMtI,EACxCyzD,EAASzzD,GAAGoU,KAAK1M,EAAgBM,GAAiB,EAE1D,EACAgpF,EAAS9qF,UAAUuO,OAAS,WACxB,GAAI/L,KAAK8sB,QAAS,CACd,IACIltB,EADAtI,OAAI,EAEJyzD,EAAW/qD,KAAK+qD,SAIpB,IAHA/qD,KAAK8sB,SAAU,EACf9sB,KAAKhB,eAAiB,KACtBgB,KAAKV,gBAAkB,KAClBhI,EAAI,EAAGsI,EAAKmrD,EAAS5gE,OAAQmN,EAAIsI,IAAMtI,EACxCyzD,EAASzzD,GAAGyU,QAEpB,CACJ,EACAu8E,EAAS9qF,UAAUrU,IAAM,SAAUygC,GAQ/B,GAPI5pB,KAAKigF,kBACLr2D,EAAKg+D,cAAc5nF,KAAK46C,QAGxBhxB,EAAKu8D,kBAAkBnmF,KAAK46C,QAEhC56C,KAAK+qD,SAASnhE,KAAKggC,GACf5pB,KAAK43E,WAEL,OADAhuD,EAAKojB,WACEhtC,KAAKwoF,YAAY5+D,EAAM,QAEtC,EACA0+D,EAAS9qF,UAAUu4E,OAAS,SAAU1oF,EAAOu8B,GACzC,IAAImhC,EAAW/qD,KAAK+qD,SAChB5gE,EAAS4gE,EAAS5gE,OACtB,OAAe,IAAVkD,GAA0B,IAAXlD,GAAiBkD,GAASlD,EACnC6V,KAAK7W,IAAIygC,IAEpBA,EAAKu8D,kBAAkBp7B,EAAS19D,GAAO48B,YACvC8gC,EAASppD,OAAOtU,EAAO,EAAGu8B,GACtB5pB,KAAK43E,YACLhuD,EAAKojB,WACEhtC,KAAKwoF,YAAY5+D,EAAM,eAFlC,EAIJ,EACA0+D,EAAS9qF,UAAUw4E,KAAO,SAAU1B,EAAaC,GAC7C,GAAID,IAAgBC,EAApB,CAGA,IAAIxpB,EAAW/qD,KAAK+qD,SAChBnhC,EAAOmhC,EAASupB,GACpB1qD,EAAKi7D,cACLj7D,EAAKu8D,kBAAkBp7B,EAASwpB,GAAatqD,YAC7C8gC,EAASppD,OAAO2yE,EAAa,GAC7BvpB,EAASppD,OAAO4yE,EAAa,EAAG3qD,EANhC,CAOJ,EACA0+D,EAAS9qF,UAAUynB,OAAS,SAAU2E,EAAMikD,EAAe2G,GACvD,OAAOx0E,KAAKk2E,SAASl2E,KAAK+qD,SAASxkE,QAAQqjC,GAAOikD,EAAe2G,EACrE,EACA8T,EAAS9qF,UAAUy4E,WAAa,SAAUnF,EAAejD,EAAe2G,GACpE,IAGIl9E,EAHAgN,EAAQtE,KACR+qD,EAAW/qD,KAAK+qD,SAChBnrD,EAAKkxE,EAAc3mF,OAEnBooF,EAAa,GACjBzB,EAAcvnF,SAAQ,SAAUmH,GAC5B,GAAI8jF,EACA9jF,EAAMm0F,kBADV,CAIA,IAAI6D,EAAYpkF,EAAMkkF,YAAY93F,EAAO,SACrCg4F,EACAnW,EAAW3oF,KAAK8+F,EAAU/6F,MAAK,WAAc,OAAO+C,EAAMm0F,aAAe,KAGzEn0F,EAAMm0F,aANV,CAQJ,IACA,IAAI8D,EAAe,WACf,GAAIrkF,EAAMszE,WACN,IAAKtgF,EAAI,EAAGA,EAAIsI,IAAMtI,EAClBw5E,EAAcx5E,GAAGygF,WAGzB,GAAIlK,EACA,IAAKv2E,EAAI,EAAGA,EAAIsI,IAAMtI,EAClBw5E,EAAcx5E,GAAGu2E,gBAGzB,IAAKv2E,EAAI,EAAGA,EAAIsI,IAAMtI,EAAG,CACrB,IAAIjK,EAAQ09D,EAASxkE,QAAQuqF,EAAcx5E,IACvCjK,GAAS,GACT09D,EAASppD,OAAOtU,EAAO,EAE/B,CACJ,EACA,OAAIklF,EAAWpoF,OAAS,EACbuD,EAAQkT,IAAI2xE,GAAY5kF,MAAK,WAAc,OAAOg7F,GAAgB,IAEtEA,GACX,EACAL,EAAS9qF,UAAU04E,SAAW,SAAU7oF,EAAOwgF,EAAe2G,GAC1D,IAAIlwE,EAAQtE,KACR4pB,EAAO5pB,KAAK+qD,SAAS19D,GACrBs7F,EAAe,WAUf,OATAt7F,EAAQiX,EAAMymD,SAASxkE,QAAQqjC,GAC/BA,EAAKi7D,cACLvgF,EAAMymD,SAASppD,OAAOtU,EAAO,GACzBiX,EAAMszE,YACNhuD,EAAKmuD,WAELlK,GACAjkD,EAAKikD,gBAEFjkD,CACX,EACA,IAAK4qD,EAAe,CAChB,IAAIkU,EAAY1oF,KAAKwoF,YAAY5+D,EAAM,SACvC,GAAI8+D,EACA,OAAOA,EAAU/6F,MAAK,WAAc,OAAOg7F,GAAgB,GAEnE,CACA,OAAOA,GACX,EACAL,EAAS9qF,UAAUmvE,UAAY,SAAUkB,EAAe2G,GACpD,IAGIl9E,EAHAgN,EAAQtE,KACR+qD,EAAW/qD,KAAK+qD,SAChBnrD,EAAKmrD,EAAS5gE,OAEdooF,EAAa,GACjBxnB,EAASxhE,SAAQ,SAAUmH,GACvB,GAAI8jF,EACA9jF,EAAMm0F,kBADV,CAIA,IAAI6D,EAAYpkF,EAAMkkF,YAAY93F,EAAO,SACrCg4F,EACAnW,EAAW3oF,KAAK8+F,EAAU/6F,MAAK,WAAc,OAAO+C,EAAMm0F,aAAe,KAGzEn0F,EAAMm0F,aANV,CAQJ,IACA,IAAI8D,EAAe,WACf,GAAIrkF,EAAMszE,WACN,IAAKtgF,EAAI,EAAGA,EAAIsI,IAAMtI,EAClByzD,EAASzzD,GAAGygF,WAGpB,GAAIlK,EACA,IAAKv2E,EAAI,EAAGA,EAAIsI,IAAMtI,EAAG,CACrB,IAAI5G,EAAQq6D,EAASzzD,GACjB5G,GACAA,EAAMm9E,eAEd,CAEJvpE,EAAMymD,SAAW,EACrB,EACA,OAAIwnB,EAAWpoF,OAAS,EACbuD,EAAQkT,IAAI2xE,GAAY5kF,MAAK,WAAc,OAAOg7F,GAAgB,IAEtEA,GACX,EACAL,EAAS9qF,UAAUwvC,SAAW,WAC1B,IAAI11C,EACAsI,EACAmrD,EACAr6D,EACJ,IAAIsP,KAAK43E,WAKT,IAFA53E,KAAK43E,YAAa,EAEbtgF,EAAI,EAAGsI,GADZmrD,EAAW/qD,KAAK+qD,UACU5gE,OAAQmN,EAAIsI,IAAMtI,GACxC5G,EAAQq6D,EAASzzD,IACX01C,WACNhtC,KAAKwoF,YAAY93F,EAAO,QAEhC,EACA43F,EAAS9qF,UAAUu6E,SAAW,WAC1B,IAAIzgF,EACAsI,EACAmrD,EACJ,GAAI/qD,KAAK43E,WAGL,IAFA53E,KAAK43E,YAAa,EAEbtgF,EAAI,EAAGsI,GADZmrD,EAAW/qD,KAAK+qD,UACU5gE,OAAQmN,EAAIsI,IAAMtI,EACxCyzD,EAASzzD,GAAGygF,UAGxB,EACAuQ,EAAS9qF,UAAU0oF,UAAY,SAAUpI,GACrC,IAAIx5E,EAAQtE,KACZA,KAAK4oF,eAAiB9K,EACtB99E,KAAK7W,IAAM6W,KAAK6oF,eAChB7oF,KAAK+1E,OAAS/1E,KAAK8oF,kBACnB9oF,KAAKg2E,KAAOh2E,KAAK+oF,gBACjB/oF,KAAKilB,OAASjlB,KAAKgpF,kBACnBhpF,KAAKk2E,SAAWl2E,KAAKipF,oBACrBjpF,KAAKi2E,WAAaj2E,KAAKkpF,sBACvBlpF,KAAK2sE,UAAY3sE,KAAKmpF,qBACtBnpF,KAAK+qD,SAASxhE,SAAQ,SAAUqgC,GAAQ,OAAO66D,EAAUC,eAAe96D,EAAMk0D,EAAOx5E,EAAQ,GACjG,EACAgkF,EAAS9qF,UAAUqrF,eAAiB,SAAUj/D,GAC1C66D,EAAUC,eAAe96D,EAAM5pB,KAAK4oF,eAAgB5oF,MACpDA,KAAK+qD,SAASnhE,KAAKggC,GACf5pB,KAAK43E,YACLhuD,EAAKojB,UAEb,EACAs7C,EAAS9qF,UAAUsrF,kBAAoB,SAAUz7F,EAAOu8B,GACrC,IAAVv8B,IAAgB2S,KAAK+qD,SAAS5gE,QAAWkD,GAAS2S,KAAK+qD,SAAS5gE,OACjE6V,KAAK7W,IAAIygC,IAGT66D,EAAUC,eAAe96D,EAAM5pB,KAAK4oF,eAAgB5oF,KAAM3S,GAC1D2S,KAAK+qD,SAASppD,OAAOtU,EAAO,EAAGu8B,GAC3B5pB,KAAK43E,YACLhuD,EAAKojB,WAGjB,EACAs7C,EAAS9qF,UAAUurF,gBAAkB,SAAUzU,EAAaC,GACxD,GAAID,IAAgBC,EAApB,CAGA,IAAIxpB,EAAW/qD,KAAK+qD,SAChBnhC,EAAOmhC,EAASupB,GACpBmQ,EAAUiB,iBAAiB97D,EAAM5pB,KAAK4oF,eAAgB5oF,MACtDykF,EAAUC,eAAe96D,EAAM5pB,KAAK4oF,eAAgB5oF,KAAMu0E,GAC1DxpB,EAASppD,OAAO2yE,EAAa,GAC7BvpB,EAASppD,OAAO4yE,EAAa,EAAG3qD,EANhC,CAOJ,EACA0+D,EAAS9qF,UAAUwrF,kBAAoB,SAAUp/D,EAAMikD,GACnD4W,EAAUiB,iBAAiB97D,EAAM5pB,KAAK4oF,eAAgB5oF,MACtDA,KAAK+qD,SAASppD,OAAO3B,KAAK+qD,SAASxkE,QAAQqjC,GAAO,GAC9C5pB,KAAK43E,YACLhuD,EAAKmuD,WAELlK,GACAjkD,EAAKikD,eAEb,EACAya,EAAS9qF,UAAUyrF,oBAAsB,SAAU57F,EAAOwgF,GACtD,IAAIjkD,EAAO5pB,KAAK+qD,SAAS19D,GACzBo3F,EAAUiB,iBAAiB97D,EAAM5pB,KAAK4oF,eAAgB5oF,MACtDA,KAAK+qD,SAASppD,OAAOtU,EAAO,GACxB2S,KAAK43E,YACLhuD,EAAKmuD,WAELlK,GACAjkD,EAAKikD,eAEb,EACAya,EAAS9qF,UAAU0rF,sBAAwB,SAAUpY,EAAejD,GAChE,IAAIvpE,EAAQtE,KACZ8wE,EAAcvnF,SAAQ,SAAUqgC,GAAQ,OAAOtlB,EAAM2gB,OAAO2E,EAAMikD,EAAgB,GACtF,EACAya,EAAS9qF,UAAU2rF,qBAAuB,SAAUtb,GAChD4W,EAAUsB,gBAAgB/lF,KAAK4oF,eAAgB5oF,MAG/C,IAFA,IAAI+qD,EAAW/qD,KAAK+qD,SAChBnrD,EAAKmrD,EAAS5gE,OACTmN,EAAI,EAAGA,EAAIsI,IAAMtI,EAClBu2E,EACA9iB,EAASzzD,GAAGu2E,gBAEP7tE,KAAK43E,YACV7sB,EAASzzD,GAAGygF,WAGpB/3E,KAAK+qD,SAAW,EACpB,EACOu9B,CACX,CA/Ue,GAiVXc,EAAY,KAaZC,EAA2B,IAZP,WACpB,SAASC,IACT,CAQA,OAPAA,EAAiB9rF,UAAU7T,IAAM,SAAUgkC,EAAWlhC,GAClD,IAAIoV,EAAKpV,EAAI88F,eACb,OAAO1nF,KAAM8rB,EAAYA,EAAU9rB,GAAO8rB,EAAU9rB,GAAM8rB,EAAUkP,OAAOpwC,EAC/E,EACmBqvC,EAAW,CAC1BstD,GACDE,EAEP,CAXuB,IAavB,SAASE,EAAoB/8F,GACzB,GAAIA,IAAQ,aACR,OAAOuT,KAAKnd,QAEhB,GAAI4J,IAAQg9F,EAAkB,CAC1B,GAAIzpF,KAAK0pF,iBACL,OAAO1pF,KAAK0pF,iBAEhB,IAAIrvD,EAAUr6B,KAAKktC,YAAYwgC,YAC3B6S,EAAmBvgF,KAAKugF,iBAK5B,OAJIA,IACAlmD,EAAUkmD,EAAiBlmD,EAAQi1B,OAASj1B,GAEhDr6B,KAAK0pF,iBAAmB,IAAID,EAAiBzpF,KAAMq6B,EAASkmD,GACrDvgF,KAAK0pF,gBAChB,CACA,OAAIj9F,IAAQ67F,QACc16F,IAAlBoS,KAAKklC,WACLllC,KAAKklC,SAAW,IAAIojD,EAAStoF,KAAKnd,QAASmd,KAAKktC,YAAY+yC,mBAC5DjgF,KAAKnd,QAAQoiG,0BAA4BjlF,KAAKktC,YAAY4zC,QAC1D9gF,KAAK+qD,SAASnhE,KAAKoW,KAAKklC,WAErBllC,KAAKklC,UAEZz4C,IAAQsyF,EACD/+E,KAAK2pF,gBAAkB3pF,KAAK2pF,cAAgB,IAAI5K,EAAc/+E,KAAKnd,UAE1E4J,IAAQu6F,EACDhnF,KAAKk8E,yBAA2Bl8E,KAAKk8E,uBAAyBl8E,KAAKvP,OAAO9G,IAAI8C,IAErFA,IAAQm9F,GACD5pF,KAAKilC,cAEZx4C,IAAQi0F,EACD1gF,KAAKktC,YAETltC,KAAK6pF,SAASp9F,EACzB,CAmBA,SAASsuD,EAAa3xD,GAClB,OAAO4W,KAAK8pF,SAAS/uC,aAAa3xD,EACtC,CACA,SAASy4B,EAAaz4B,GAClB,OAAO4W,KAAK8pF,SAASjoE,aAAaz4B,EACtC,CACA,SAAS8L,EAAa9L,EAAM4I,GACxBgO,KAAK8pF,SAAS50F,aAAa9L,EAAM4I,EACrC,CAgBA,SAAS+3F,EAAkBC,EAAYnnG,EAASqqD,EAAavI,EAAayxC,EAAUrrB,EAAUk/B,EAAa1J,EAAkBl9C,GACzH,IAEI6mD,EACA5yF,EACAsI,EACAvT,EACAT,EANAgkF,EAAuB1iC,EAAY0iC,qBACnCnjE,EAAcygC,EAAYzgC,YAM9B,GAAIygC,EAAY2zC,kBAIZ,OAHAzK,EAASxsF,KAAKsjD,EAAY2zC,kBAAkBt0D,cAAc1pC,EAAQ8pE,cAClE9pE,EAAQ8pE,YAAYg1B,uBAAwB,OAC5C9+F,EAAQuD,WAAWq8D,YAAY5/D,GAGnC,GAAIqqD,EAAYyzC,WAAY,CACxB,IACIxb,EADAglB,EAAgB,mBAAkB,QAWtC,OARIhlB,EADAj4B,EAAYk9C,gBACL,IAAIrG,EAAgBoG,EAAej9C,EAAYs3B,SAAUt3B,EAAYk9C,gBAAiBl9C,EAAYo0C,qBAGlG,IAAI0D,EAAWmF,EAAej9C,EAAYs3B,SAAUt3B,EAAYo0C,qBAE3E,iBAAgB6I,EAAetnG,GAC/BonG,EAAY/8C,EAAYs3B,UAAYW,OACpCxgC,EAAY/6C,KAAKu7E,EAErB,CACA,GAAIj4B,EAAYw+B,WAAhB,CACI,IAAKp0E,EAAI,EAAGsI,EAAK6M,EAAYtiB,OAAQmN,EAAIsI,IAAMtI,EAC3C8+E,EAASxsF,KAAK6iB,EAAYnV,GAAGi1B,iBAEjC1pC,EAAQuD,WAAWq8D,YAAY5/D,EAEnC,KANA,CAOA,GAAI+sF,EAAqBzlF,OAMrB,IALK+iD,EAAY+yC,oBACbp9F,EApDZ,SAA+BA,EAASs+F,GACpC,IAAIvmC,EAAS,mBAAkB,UAC/B,GAAIumC,EAAoB,CACpB,IAAIl3D,EAAapnC,EAAQonC,WACrBA,GAAqC,eAAvBA,EAAW9K,UACzBy7B,EAAOyvC,eAAiBpgE,GAE5B2wB,EAAOkvC,SAAWjnG,EAClB+3D,EAAOG,aAAeA,EACtBH,EAAO/4B,aAAeA,EACtB+4B,EAAO1lD,aAAeA,CAC1B,CAEA,OADA,iBAAgB0lD,EAAQ/3D,GACjB+3D,CACX,CAsCsB0vC,CAAsBznG,EAASqqD,EAAYi0C,qBAEzD6I,EAAW98C,EAAYg0C,YAAcgJ,EAjF7C,SAAgCz5F,EAAQ5N,EAASqqD,EAAa6d,EAAUw1B,EAAkBl9C,GACtF,IACI49C,EACA3pF,EAFAq2B,EAAYl9B,EAAOqwC,cAUvB,IAPAnT,EAAU9qC,QAAUA,EACpB8qC,EAAUuf,YAAcA,EACxBvf,EAAUo9B,SAAWA,EACrBp9B,EAAUsX,cAAgB5B,EAC1B1V,EAAU4yD,iBAAmBA,EAE7BjpF,GADA2pF,EAAY/zC,EAAY+zC,WACV92F,OACPmN,KACHq2B,EAAUgS,WAAW91C,IAAIo3F,EAAU3pF,GAAI+xF,GAI3C,OAFA17D,EAAUk8D,SAAWl8D,EAAUhkC,IAC/BgkC,EAAUhkC,IAAM6/F,EACT77D,CACX,CAiEY48D,CAAuBP,EAAW98C,EAAY0zC,kBAAmB/9F,EAASqqD,EAAa6d,EAAUw1B,EAAkBl9C,GAClH/rC,EAAI,EAAGsI,EAAKgwE,EAAqBzlF,OAAQmN,EAAIsI,IAAMtI,EAEpD1L,GADAS,EAAUujF,EAAqBt4E,IACZqR,KAAKrK,OAAO4rF,EAAkB79F,EAASxJ,EAASuzF,GACnEzxC,EAAY/6C,KAAKgC,GAGzB,IAAK0L,EAAI,EAAGsI,EAAK6M,EAAYtiB,OAAQmN,EAAIsI,IAAMtI,EAC3C8+E,EAASxsF,KAAK6iB,EAAYnV,GAAGi1B,cAAc1pC,GAd/C,CAgBJ,CACA,SAAS2nG,EAAoBx1F,EAAOlO,GAChC,IACI2jG,EACAnzF,EACAjL,EACAI,EACAuF,EALAxG,EAAawJ,EAAM/G,MAAM,KAO7B,IADAnH,EAASA,GAAU,CAAC,EACfwQ,EAAI,EAAGA,EAAI9L,EAAWrB,OAAQmN,IAE/BmzF,GADAp+F,EAAUb,EAAW8L,IACO/Q,QAAQ,KACpCkG,EAAMJ,EAAQohC,UAAU,EAAGg9D,GAAmBzjC,OAC9Ch1D,EAAQ3F,EAAQohC,UAAUg9D,EAAoB,GAAGzjC,OACjDlgE,EAAO2F,GAAOuF,EAElB,OAAOlL,CACX,CACA,SAAS4jG,EAAoB9sF,GACzB,IAAI5U,EAAS,GACb,IAAK,IAAIyD,KAAOmR,EACZ5U,GAAUyD,EAAM,IAAMmR,EAAInR,GAAO,IAErC,OAAOzD,CACX,CA6CA,IAAIygG,EAAoB,WACpB,SAASA,EAAiBkB,EAAiBjd,EAAa6S,GACpDvgF,KAAK2qF,gBAAkBA,EACvB3qF,KAAK0tE,YAAcA,EACnB1tE,KAAK4qF,yBAA2B,CAAErK,iBAAkBA,EACxD,CAsBA,OArBAkJ,EAAiBjsF,UAAUc,OAAS,WAChC,IAAIsrB,EAAO5pB,KAAK0tE,YAAYpvE,OAAO0B,KAAK2qF,gBAAgB7pD,cAAe9gC,KAAK4qF,0BAE5E,OADAhhE,EAAK09D,mBAAoB,EAClB19D,CACX,EACAx+B,OAAOgS,eAAeqsF,EAAiBjsF,UAAW,YAAa,CAC3D7T,IAAK,WACD,OAAOqW,KAAK0tE,YAAYE,SAC5B,EACA3wE,YAAY,EACZC,cAAc,IAElBusF,EAAiBjsF,UAAUqtF,aAAe,SAAUzhF,EAAM0hF,GACtD9qF,KAAK0tE,YAAYmd,aAAazhF,EAAM0hF,EACxC,EACArB,EAAiBjsF,UAAUutF,cAAgB,WACvC,OAAO/qF,KAAK0tE,YAAYqd,eAC5B,EACAtB,EAAiBjsF,UAAU+pF,kBAAoB,SAAU39D,GACrD5pB,KAAK0tE,YAAY6Z,kBAAkB39D,EACvC,EACO6/D,CACX,CA5BuB,GA6BnBuB,EAAe,WACf,SAASA,EAAYprC,EAAU0W,EAAcjzB,GACzCrjC,KAAK4tE,WAAY,EACjB5tE,KAAK4/C,SAAWA,EAChB5/C,KAAKs2D,aAAeA,EACpBt2D,KAAKqjC,UAAYA,EACjBrjC,KAAKirF,WAAa,EAClBjrF,KAAKyT,MAAQ,IACjB,CA8EA,OA7EAu3E,EAAYxtF,UAAUqtF,aAAe,SAAUzhF,EAAM0hF,GAC7C1hF,IACa,MAATA,EACAA,EAAO+qB,OAAOg0C,UAEO,iBAAT/+D,IACZA,EAAOoF,SAASpF,EAAM,OAGN,IAApBpJ,KAAKirF,WAAqBH,IAC1B9qF,KAAKirF,UAAY92D,OAAO/qB,IAExBpJ,KAAKirF,UAAY,EACjBjrF,KAAKyT,MAAQ,GAGbzT,KAAKyT,MAAQ,KAEjBzT,KAAK4tE,UAAY5tE,KAAKirF,UAAY,CACtC,EACAD,EAAYxtF,UAAUutF,cAAgB,WAClC,OAAsB,OAAf/qF,KAAKyT,OAAkBzT,KAAKyT,MAAMxJ,OAAiB,IAC9D,EACA+gF,EAAYxtF,UAAU+pF,kBAAoB,SAAU39D,GAC5CA,EAAKguD,YACLhuD,EAAKmuD,WAELnuD,EAAKkD,SACLlD,EAAK7d,SAEU,OAAf/L,KAAKyT,OAAkBzT,KAAKyT,MAAMtpB,OAAS6V,KAAKirF,YAChDrhE,EAAKu9D,WAAY,EACjBnnF,KAAKyT,MAAM7pB,KAAKggC,GAExB,EACAohE,EAAYxtF,UAAUc,OAAS,SAAUqvB,EAAW0/C,EAAmBxqF,GACnEwqF,EAAoBA,GAAqB0S,EAAoBD,OAC7D,IAAIoL,EAAalrF,KAAK+qF,gBACtB,GAAmB,OAAfG,EACA,OAAOA,EAEX,IAUI5zF,EACAsI,EACAgqB,EACAuhE,EACAj+C,EAdA2P,EAAWwwB,EAAkBzgC,QAAU5sC,KAAK4/C,SAAW5/C,KAAK4/C,SAASwrC,WAAU,GAC/EC,EAAgBxuC,EAASphB,iBAAiB,cAC1C66B,EAAet2D,KAAKs2D,aACpBjzB,EAAYrjC,KAAKqjC,UACjBsB,EAAc,GACdyxC,EAAW,GACXrrB,EAAW,GACXk/B,EAAc7+F,OAAOkT,OAAO,MAC5B0rF,EAAa,CAAEpqD,KAAMjS,GACrB4yD,EAAmBlT,EAAkBkT,iBAezC,IATAvgF,KAAKqjC,UAAUokD,YAAY,eAAgBznF,KAAM2tB,EAAWkvB,EAAUwwB,GAClExqF,GAAyC,OAA9Bmd,KAAKsrF,sBA3I5B,SAAmC39D,EAAW9qC,EAASqqD,EAAavI,EAAayxC,EAAUrrB,GACvF,IAIIzzD,EACAsI,EACAvT,EACAT,EACA2/F,EARA3b,EAAuB1iC,EAAY0iC,qBACnCnjE,EAAcygC,EAAYzgC,YAC1Bw0E,EAAY/zC,EAAY+zC,UACxBlvE,EAASm7B,EAAYn7B,OAOzB,IADAza,EAAI2pF,EAAU92F,OACPmN,KACHq2B,EAAUgS,WAAW91C,IAAIo3F,EAAU3pF,GAAI+xF,GAE3C,IAAK,IAAI58F,KAAOslB,EAEZ,GADAw5E,EAAwB1oG,EAAQg/B,aAAap1B,IAEzC,GAAY,UAARA,EACA5J,EAAQqS,aAAa,QAASq2F,EAAwB,IAAMx5E,EAAOtlB,SAElE,GAAY,UAARA,EAAiB,CACtB,IAAI++F,EAAchB,EAAoBz4E,EAAOtlB,IAC7C+9F,EAAoBe,EAAuBC,GAC3C3oG,EAAQqS,aAAa,QAASw1F,EAAoBc,GACtD,OAGA3oG,EAAQqS,aAAazI,EAAKslB,EAAOtlB,IAGzC,GAAImjF,EAAqBzlF,OACrB,IAAKmN,EAAI,EAAGsI,EAAKgwE,EAAqBzlF,OAAQmN,EAAIsI,IAAMtI,GAEpD1L,GADAS,EAAUujF,EAAqBt4E,IACZqR,KAAKrK,OAAOqvB,EAAWthC,EAASxJ,EAASuzF,IAC/CgO,aACTr5B,EAASnhE,KAAKgC,EAASw4F,aAE3Bz/C,EAAY/6C,KAAKgC,GAGzB,IAAK0L,EAAI,EAAGsI,EAAK6M,EAAYtiB,OAAQmN,EAAIsI,IAAMtI,EAC3C8+E,EAASxsF,KAAK6iB,EAAYnV,GAAGi1B,cAAc1pC,GAEnD,CAiGY4oG,CAA0B99D,EAAW9qC,EAASmd,KAAKsrF,qBAAsB3mD,EAAayxC,EAAUrrB,GAEhGsiB,EAAkBzgC,SAAWiQ,EAAS9B,aAAa,kBAEnD7N,EAAcopB,GADd60B,EAAetuC,GACyBh7B,aAAa,iBACrDkoE,EAAkBC,EAAYmB,EAAcj+C,EAAavI,EAAayxC,EAAUrrB,EAAUk/B,EAAa1J,EAAkBl9C,IAExH/rC,EAAI,EAAGsI,EAAKyrF,EAAclhG,OAAQmN,EAAIsI,IAAMtI,EAE7C41C,EAAcopB,GADd60B,EAAeE,EAAc/zF,IACWuqB,aAAa,iBACrDkoE,EAAkBC,EAAYmB,EAAcj+C,EAAavI,EAAayxC,EAAUrrB,EAAUk/B,EAAa1J,EAAkBl9C,GAO7H,OALAzZ,EAAO,IAAIq9D,EAAKt5D,EAAW3tB,KAAM68C,EAAUlY,EAAayxC,EAAUrrB,EAAUk/B,GACvE5c,EAAkB8S,qBACnBv2D,EAAK2iD,UAETvsE,KAAKqjC,UAAUokD,YAAY,cAAe79D,GACnCA,CACX,EACOohE,CACX,CAvFkB,GAyFdU,EAAiB,EAIjBC,GAAiB,EAIrB,SAASC,GAA0B/oG,GAC/B,IAAImP,EAAQnP,EAAQg/B,aAAa,SAC7BgqE,KAJMF,IAAgBzqG,WAO1B,OAFA2B,EAAQqS,aAAa,QAAUlD,EAAQA,EAAQ,aAAe,aAC9DnP,EAAQqS,aAAa,eAAgB22F,GAC9BA,CACX,CAmBA,IAAIC,GAAoBnI,EAAgBnmF,UAAUiuE,qBAC9CsgB,GAAgB,WAChB,SAASA,EAAaC,EAAiB3oD,GACnCrjC,KAAKgsF,gBAAkBA,EACvBhsF,KAAKqjC,UAAYA,CACrB,CAkXA,OAjXA0oD,EAAa9/D,OAAS,WAClB,MAAO,CAAC03D,EAAiBiG,GAC7B,EACAmC,EAAavuF,UAAUyuF,QAAU,SAAUp/D,EAAQwW,EAAW6oD,GAI1D,IAAI13C,EACA8a,EACA27B,EALJ5nD,EAAYA,GAAarjC,KAAKqjC,UAC9B6oD,EAAqBA,GAAsBvM,EAAuBG,QAClEjzD,EAA2B,iBAAXA,EAAsB,8BAA6BA,GAAUA,GAIlE2nB,SACP8a,EAAOziC,EAAOhL,aAAa,QAC3BopE,EAAYp+D,EAAOhL,aAAa,cAChC2yB,EAAU,eAAc3nB,EAAO2nB,UAG/BA,EAAU3nB,EAEdq/D,EAAmBvT,gBAAkBuT,EAAmBvT,iBAAmB,eAC3Et1C,EAAUokD,YAAY,gBAAiBjzC,EAASnR,EAAW6oD,GAC3D,IAAI51B,EAAe,CAAC,EACpBt2D,KAAKmsF,aAAa33C,EAASnR,EAAWizB,EAAczpC,EAAQ,QAASq/D,EAAmBvT,iBACxF,IAAI1uD,EAAauqB,EAAQvqB,WACzB,GAAIA,GAAsC,IAAxBA,EAAW2iC,SAAgB,CACzC,IAAIw/B,EAAWniE,EAAWpI,aAAa,gBACvC,GAAIuqE,EAAU,CACV,IAAIC,EAAM/1B,EAAa81B,IACnBC,EAAI1L,YAAc0L,EAAIvL,SAAYuL,EAAIlL,qBAAuBkL,EAAIlL,mBAAmBlB,oBACpFzrC,EAAQ8W,aAAa,mBAAkB,QAASrhC,EAExD,CACJ,CACA,IAAIoQ,EAAU,IAAI2wD,EAAYx2C,EAAS8hB,EAAcjzB,GAOrD,OANAhJ,EAAQixD,qBAAuBY,EAAmBtM,iBAAmB5/E,KAAKssF,kBAAkBz/D,EAAQwW,GAAa,KACjHhJ,EAAQi1B,KAAOA,EACX27B,GACA5wD,EAAQwwD,aAAaI,GAEzB5nD,EAAUokD,YAAY,eAAgBptD,GAC/BA,CACX,EACA0xD,EAAavuF,UAAU2uF,aAAe,SAAUnrG,EAAMqiD,EAAWizB,EAAclwE,EAAYw6F,EAAkB2L,GACzG,OAAQvrG,EAAK4rE,UACT,KAAK,EACD,OAAO5sD,KAAKwsF,gBAAgBxrG,EAAMqiD,EAAWizB,EAAclwE,EAAYw6F,EAAkB2L,GAC7F,KAAK,EACD,IAAItoF,EAAao/B,EAAUopD,mBAAmBzsF,KAAKgsF,iBAAiBpgB,mBAAmBvoC,EAAWriD,EAAK0rG,WACvG,GAAIzoF,EAAY,CACZ,IAAIgV,EAAS,mBAAkB,aAC3B4yE,EAAaD,GAA0B3yE,GAI3C,KAHCj4B,EAAKoF,YAAcA,GAAYklE,aAAaryC,EAAQj4B,GACrDA,EAAK4gG,YAAc,IACnBtrB,EAAau1B,GAAcnL,EAAkBG,kBAAkB58E,GACxDjjB,EAAK2rE,aAA6C,IAA9B3rE,EAAK2rE,YAAYC,WACvC5rE,EAAKoF,YAAcA,GAAYq8D,YAAYzhE,EAAK2rE,YAEzD,MAEI,KAAO3rE,EAAK2rE,aAA6C,IAA9B3rE,EAAK2rE,YAAYC,UACxC5rE,EAAOA,EAAK2rE,YAGpB,OAAO3rE,EAAK2rE,YAChB,KAAK,GAED,IADA,IAAIggC,EAAe3rG,EAAKipC,WACjB0iE,GACHA,EAAe3sF,KAAKmsF,aAAaQ,EAActpD,EAAWizB,EAAct1E,EAAM4/F,EAAkB2L,GAI5G,OAAOvrG,EAAK2rE,WAChB,EACAo/B,EAAavuF,UAAU8uF,kBAAoB,SAAUtrG,EAAMqiD,GACvD,IAGIupD,EACAv3F,EACA63C,EACA51C,EACAsI,EACA67C,EACA0uB,EACAG,EACAnhC,EACAxgC,EAEA1E,EAdAkb,EAAUn+B,EAAKm+B,QAAQ16B,cACvB+G,EAAaxK,EAAKwK,WAClBwgG,EAAkB3oD,EAAUopD,mBAAmBzsF,KAAKgsF,iBAWpDv/E,EAAc,GAEdmjE,EAAuB,GACvB79D,EAAS,CAAC,EACV86E,GAAY,EACZ5L,EAAY,GAChB,IAAK3pF,EAAI,EAAGsI,EAAKpU,EAAWrB,OAAQmN,EAAIsI,IAAMtI,EAAG,CAM7C,GAJA6yE,GADA1uB,EAAOjwD,EAAW8L,IACFlO,KAChBkhF,EAAY7uB,EAAKzpD,MACjBm3C,EAAO6iD,EAAgBrhB,iBAAiBtnC,EAAWlkB,EAASgrD,EAAUG,IACtE3hE,EAAO06B,EAAUxhB,aAAasnB,EAAKghC,aAE/ByiB,EAAiBvpD,EAAUypD,aAAa3jD,EAAKghC,aAEzC90E,EAAWsT,EAAKnd,WAAWohG,MAEvBzjD,EAAKkhC,mBAAqBh1E,EAASg1E,mBAC9BlhC,EAAK6gC,SAAY7gC,EAAKllC,aACvBklC,EAAK6gC,QAAU30E,EAASutF,WAAa,UAAY,MAEjDz5C,EAAK6gC,SAA6B,YAAjB7gC,EAAK6gC,SAA0BrhE,EAAKkiE,iBAAiB,CACtE,IAAIA,EAAkBliE,EAAKkiE,gBAC3BV,EAAWhhC,EAAKghC,SAAWU,EAAgBv1E,UAC3C6zC,EAAKkhC,mBAAqBQ,EAAgBR,kBAC9C,CAKZ,GADAn9B,EAAc8+C,EAAgBphB,2BAA2BvnC,EAAWriD,EAAMmoD,OAAMv7C,EAAW+a,GAKvF,GAHIukC,EAAY6/C,cACZpkF,EAAO06B,EAAUxhB,aAAaqrB,EAAYi9B,WAE1Cj9B,EAAY5gB,SACZ7f,EAAY7iB,KAAKsjD,QAGjB,GAAIvkC,EAAM,CAGN,GAFAukC,EAAYvkC,KAAOA,EACnB3I,KAAKgtF,qBAAqB9/C,EAAa7J,GACnC16B,EAAKskF,aACL,MAAM,IAAIjiF,MAAM,kEAGhB4kE,EAAqBhmF,KAAKsjD,EAElC,MAEIzgC,EAAY7iB,KAAKsjD,EAAY1hD,WAAW0hD,EAAYi9B,gBAK5D,GAAIxhE,EAAM,CAGN,IAFAukC,EAAc6yC,EAAoBzqF,UAAU60E,EAAUxhE,IAC1Cnd,WAAW63C,EAAUypD,aAAa3iB,IAAaG,EACvD3hE,EAAKskF,aACL,MAAM,IAAIjiF,MAAM,kEAGhB4kE,EAAqBhmF,KAAKsjD,EAElC,KACsB,OAAbi9B,GAAkC,SAAbA,GAAoC,iBAAbA,IACjD0iB,GAAY,EACZ96E,EAAOo4D,GAAYG,EAG/B,CACA,GAAI79D,EAAYtiB,QAAUylF,EAAqBzlF,QAAU0iG,EAAW,CAChE,IAAKv1F,EAAI,EAAGsI,EAAKgwE,EAAqBzlF,OAAQmN,EAAIsI,IAAMtI,GACpD41C,EAAc0iC,EAAqBt4E,IACvBqR,KAAKsjF,QAAQjsF,KAAMqjC,EAAWriD,EAAMksD,GAChD+zC,EAAUr3F,KAAKsjD,EAAYvkC,KAAK7hB,QAEpC,IAAKwQ,EAAI,EAAGsI,EAAK6M,EAAYtiB,OAAQmN,EAAIsI,IAAMtI,OAEX1J,KADhCqW,EAAawI,EAAYnV,IACVqxE,cACX3nF,EAAKiU,gBAAgBgP,EAAW0kE,cAGxC,OAAO+X,EAAkBU,UAAUH,EAAWrR,EAAsBnjE,EAAasF,EACrF,CACA,OAAO,IACX,EACAg6E,EAAavuF,UAAUgvF,gBAAkB,SAAUxrG,EAAMqiD,EAAWizB,EAAclwE,EAAYw6F,EAAkB2L,GAC5G,IAGItoF,EAIA88E,EACArT,EACA/kE,EACAw4E,EACA+L,EACA51F,EACAsI,EACA67C,EACA0uB,EACAG,EACAwF,EACA5iC,EACA/D,EACA9zC,EACAu3F,EAEA1L,EAvBA/hE,EAAUn+B,EAAKm+B,QAAQ16B,cACvB+G,EAAaxK,EAAKwK,WAClBihB,EAAc,GAEdmjE,EAAuB,GACvBqR,EAAY,GACZ+K,EAAkB3oD,EAAUopD,mBAAmBzsF,KAAKgsF,iBAkBxD,GAAgB,SAAZ7sE,EAIA,OAHIotE,IACAvrG,EA/NhB,SAAwBmsG,EAAU9pD,EAAWriD,EAAMs1E,EAAcsqB,GAC7D,IAAIwM,EAAe,mBAAkB,kBACrC,iBAAgBA,EAAcpsG,GAC9B,IAAI6qG,EAAaD,GAA0BwB,GACvClgD,EAAcwzC,EAAkBC,WAAWC,GAG/C,GAFA1zC,EAAYs3B,SAAWxjF,EAAK6gC,aAAa,SAAW4iE,EAAU6B,eAC9Dp5C,EAAYk9C,gBAAkBppG,EAAK6gC,aAAa,QAC5C7gC,EAAKgpC,UAAUg9B,OAAQ,CAGvB,IAFA,IAAInK,EAAW,8BACXnsD,OAAQ,EACLA,EAAQ1P,EAAKipC,YAChB4yB,EAAShO,YAAYn+C,GAEzBw8C,EAAYo0C,oBAAsB6L,EAASlB,QAAQpvC,EAAUxZ,EACjE,CAEA,OADAizB,EAAau1B,GAAc3+C,EACpBkgD,CACX,CA8MuBC,CAAertF,KAAMqjC,EAAWriD,EAAMs1E,EAAcsqB,IAExD5/F,EAAK2rE,YAEX,GAAgB,aAAZxtC,EAAwB,CAC7B,KAAM,YAAan+B,GACf,MAAM,IAAIgqB,MAAM,8CAAgDhqB,EAAK0qE,aAAe,eAExFgiB,EAAc1tE,KAAKisF,QAAQjrG,EAAMqiD,IACrBisB,KAAOtuE,EAAK6gC,aAAa,OACzC,KACK,CAED,GADAlZ,EAAO06B,EAAUiqD,WAAWtsG,EAAK6gC,aAAa,eAAiB1C,GAC/C,QAAZA,IAAsBxW,GAAQqjF,EAAgBvgB,uBAAyBqgB,GAIvE,OAHAr/E,EAAcu/E,EAAgBvgB,qBAAqBpoC,EAAWriD,GAE9Ds1E,EADas1B,GAA0B5qG,IACZ0/F,EAAkBhV,WAAWj/D,GACjDzrB,EAAK2rE,YAEZhkD,IACAw4E,EAAqBpB,EAAoBl9F,QAAQ7B,EAAM2nB,GACvDA,EAAK4kF,kBAAkBvtF,KAAMqjC,EAAWriD,EAAMwK,EAAY21F,GAC1DvR,EAAqBhmF,KAAKu3F,GAElC,CACA,IAAK7pF,EAAI,EAAGsI,EAAKpU,EAAWrB,OAAQmN,EAAIsI,IAAMtI,EAAG,CAU7C,GARAw4E,EAAmB3F,GADnB1uB,EAAOjwD,EAAW8L,IACiBlO,KACnCkhF,EAAY7uB,EAAKzpD,MACjBm3C,EAAO6iD,EAAgBrhB,iBAAiBtnC,EAAWlkB,EAASgrD,EAAUG,GAClEiiB,GAAoC,SAAlBpjD,EAAKghC,WACvBhhC,EAAKghC,SAAWA,EAAW,WAG/B+iB,EAAkB,KADlBvkF,EAAO06B,EAAUxhB,aAAasnB,EAAKghC,WAI/B,IADAyiB,EAAiBvpD,EAAUypD,aAAa3jD,EAAKghC,aAEzC90E,EAAWsT,EAAKnd,WAAWohG,MAEvBzjD,EAAKkhC,mBAAqBh1E,EAASg1E,mBAC9BlhC,EAAK6gC,SAAY7gC,EAAKllC,aACvBklC,EAAK6gC,QAAU30E,EAASutF,WAAa,UAAY,MAEjDz5C,EAAK6gC,SAA6B,YAAjB7gC,EAAK6gC,SAA0BrhE,EAAKkiE,iBAAiB,CACtE,IAAIA,EAAkBliE,EAAKkiE,gBAC3BV,EAAWhhC,EAAKghC,SAAWU,EAAgBv1E,UAC3C6zC,EAAKkhC,mBAAqBQ,EAAgBR,kBAC9C,OAIH8W,IACL+L,EAAkB/L,EAAmBx4E,KAAKnd,WAAW29C,EAAKghC,aAEtDhhC,EAAKkhC,mBAAqB6iB,EAAgB7iB,oBASlD,GALIn9B,EADAggD,EACclB,EAAgBphB,2BAA2BvnC,EAAWriD,EAAMmoD,EAAMg4C,GAGlE6K,EAAgBphB,2BAA2BvnC,EAAWriD,EAAMmoD,OAAMv7C,EAAW+a,GAM3F,GAHIukC,EAAY6/C,cACZpkF,EAAO06B,EAAUxhB,aAAaqrB,EAAYi9B,WAE1Cj9B,EAAY5gB,SACZ7f,EAAY7iB,KAAKsjD,QAGjB,GAAIvkC,EAAM,CAGN,GAFAukC,EAAYvkC,KAAOA,EACnB3I,KAAKgtF,qBAAqB9/C,EAAa7J,GACnC16B,EAAKskF,aAAc,CACnB//C,EAAY4iC,iBAAmBA,EAC/BiR,EAAqB7zC,EACrB,KACJ,CAEI0iC,EAAqBhmF,KAAKsjD,EAElC,MACSggD,EACL/L,EAAmB31F,WAAW29C,EAAKghC,UAAUh+C,eAAiB+gE,EAAgB9jG,KAG9EqjB,EAAY7iB,KAAKsjD,EAAY1hD,WAAW0hD,EAAYi9B,gBAK5D,GAAIxhE,EAAM,CAGN,IAFAukC,EAAc6yC,EAAoBzqF,UAAU60E,EAAUxhE,IAC1Cnd,WAAW63C,EAAUypD,aAAa3iB,IAAaG,EACvD3hE,EAAKskF,aAAc,CACnB//C,EAAY4iC,iBAAmBA,EAC/BiR,EAAqB7zC,EACrB,KACJ,CAEI0iC,EAAqBhmF,KAAKsjD,EAElC,MACSggD,IACL/L,EAAmB31F,WAAW2+E,GAAYG,EAGtD,CACA,GAAIyW,EACAA,EAAmBrT,YAAcA,EAGjCpX,EADas1B,GADb5qG,EAAO+/F,EAAmBp4E,KAAKsjF,QAAQjsF,KAAMqjC,EAAWriD,EAAM+/F,EAAoB36F,KAEvDs6F,EAAkBI,QAAQF,EAAkBG,OAEtE,CACD,IAAIP,GAAwB,EAC5B,GAAI/zE,EAAYtiB,QAAUylF,EAAqBzlF,OAAQ,CAEnD,IADA+2F,IAAatR,EAAqBzlF,UAnWrCuhG,EAoWQp0F,EAAI,EAAGsI,EAAKgwE,EAAqBzlF,OAAQmN,EAAIsI,IAAMtI,GACpD41C,EAAc0iC,EAAqBt4E,IACvBqR,KAAKsjF,QAAQjsF,KAAMqjC,EAAWriD,EAAMksD,EAAa9mD,GAC7D66F,EAAUr3F,KAAKsjD,EAAYvkC,KAAK7hB,QAChC05F,EAAwBA,GAAyBtzC,EAAYszC,sBAEjE,IAAKlpF,EAAI,EAAGsI,EAAK6M,EAAYtiB,OAAQmN,EAAIsI,IAAMtI,OAEX1J,KADhCqW,EAAawI,EAAYnV,IACVqxE,cACX3nF,EAAKiU,gBAAgBgP,EAAW0kE,cAIxCrS,EADas1B,GAA0B5qG,IACZ0/F,EAAkBZ,OAAOoB,EAAYN,EAAkBK,EAAWrR,EAAsBnjE,EAAa00E,EACpI,CACA,GAAIX,EACA,OAAOx/F,EAAK2rE,YAGhB,IADA,IAAIggC,EAAe3rG,EAAKipC,WACjB0iE,GACHA,EAAe3sF,KAAKmsF,aAAaQ,EAActpD,EAAWizB,EAAct1E,EAAMkgG,GAAcN,EAAkB2L,EAEtH,CACA,OAAOvrG,EAAK2rE,WAChB,EACAo/B,EAAavuF,UAAUwvF,qBAAuB,SAAU9/C,EAAa7J,GACjE,IAGIhuC,EACA5I,EACAuF,EALA2W,EAAOukC,EAAYvkC,KACnBwhE,EAAWj9B,EAAYi9B,SACvB3+E,EAAa0hD,EAAY1hD,WAIzBohG,EAAiBvpD,EAAUypD,aAAa3iB,GAK5C,IAAK19E,KAJDmgG,GAAkBziB,KAAY3+E,GAAcohG,IAAmBziB,IAC/D3+E,EAAWohG,GAAkBphG,EAAW2+E,UACjC3+E,EAAW2+E,IAEV3+E,EAEM,QADdwG,EAAQxG,EAAWiB,KACoB,iBAAVuF,IACzBqD,EAAWsT,EAAKnd,WAAWiB,GAEvBuF,EAAMm6B,oBADOv+B,IAAbyH,EACuBA,EAASjM,KAGTqD,EAIvC,EACOs/F,CACX,CAvXmB,GAyXfyB,GAA2B,WAC3B,SAASA,IACT,CAaA,OAZAA,EAAwBhwF,UAAUkwB,WAAa,SAAUC,EAAW7mC,GAChEkZ,KAAKpU,SAAW+hC,EAAUhkC,IAAI7C,EAClC,EACA0mG,EAAwBhwF,UAAUowB,SAAW,SAAUC,EAAUzkC,GAC7DykC,EAASwqD,wBAAwBr4E,KAAKpU,SAC1C,EACA4hG,EAAwBhwF,UAAUuwB,KAAO,SAAUJ,EAAW7mC,GAAU,EACxE0mG,EAAwBjgE,WAAa,SAAUnkC,GAC3C,GAAIA,EAAKokC,SAAS,mBACd,OAAO,IAAIggE,CAEnB,EACOA,CACX,CAhB8B,GAwB1BC,GAAkB,WAClB,SAASA,EAAehzD,GACpBz6B,KAAK6B,GAAK44B,EACVz6B,KAAK0tF,eAAiB,KACtB1tF,KAAK2tF,aAAe,KACpB3tF,KAAKqjC,UAAY,KACjBrjC,KAAK68E,aAAe,KACpB78E,KAAK4uD,eAAgB,EACrB5uD,KAAK4tF,SAAW,KAChB5tF,KAAK6tF,YAAc,IACvB,CAuDA,OAtDAJ,EAAejwF,UAAUkwB,WAAa,SAAUC,GAC5C,IAAIthC,EAAU2T,KAAK2tF,aACftqD,EAAYrjC,KAAKqjC,UACjByqD,EAAK9tF,KAAK68E,aACd,IAAI78E,KAAK4uD,cAAT,CAGA5uD,KAAK4uD,eAAgB,OACLhhE,IAAZvB,IACAA,EAAQu8B,SAASi0D,aAAeiR,EAChCzhG,EAAQqhC,WAAWC,IAEvB,IAAK,IAAIr2B,EAAI,EAAGsI,EAAKyjC,EAAUl5C,OAAQmN,EAAIsI,IAAMtI,GAC7CjL,EAAUg3C,EAAU/rC,IACZsxB,SAASi0D,aAAeiR,EAChCzhG,EAAQqhC,WAAWC,EATvB,CAWJ,EACA8/D,EAAejwF,UAAUowB,SAAW,SAAUC,EAAUzkC,GACpD,IAAI2kG,EAAO/tF,KAAK2tF,aACZtqD,EAAYrjC,KAAKqjC,eACRz1C,IAATmgG,IACAA,EAAKngE,SAASC,EAAUzkC,GACxBA,EAAO,MAEX,IAAK,IAAIkO,EAAI,EAAGsI,EAAKyjC,EAAUl5C,OAAQmN,EAAIsI,IAAMtI,EAC7C+rC,EAAU/rC,GAAGs2B,SAASC,EAAUzkC,GAChCA,EAAO,IAEf,EACAqkG,EAAejwF,UAAUuwB,KAAO,SAAUJ,EAAWkgE,GACjD,GAAsB,OAAlB7tF,KAAK4tF,SACL,OAAO5tF,KAAK6tF,cAAgBA,EAAcngG,EAAQD,UAAYuS,KAAK4tF,SAEvE,IAEI1jD,EAFA6jD,EAAO/tF,KAAK2tF,aACZtqD,EAAYrjC,KAAKqjC,UAErB,QAAaz1C,IAATmgG,EAAoB,EACpB7jD,EAAQ,IAAI7/C,MAAMg5C,EAAUl5C,OAAS,IAC/B,GAAK4jG,EAAKhgE,KAAKJ,EAAWkgE,GAChC,IAAK,IAAIv2F,EAAI,EAAGsI,EAAKyjC,EAAUl5C,OAAQmN,EAAIsI,IAAMtI,EAC7C4yC,EAAM5yC,EAAI,GAAK+rC,EAAU/rC,GAAGy2B,KAAKJ,EAAWkgE,EAEpD,MAGI,IADA3jD,EAAQ,IAAI7/C,MAAMg5C,EAAUl5C,QACnBmN,EAAI,EAAGsI,EAAKyjC,EAAUl5C,OAAQmN,EAAIsI,IAAMtI,EAC7C4yC,EAAM5yC,GAAK+rC,EAAU/rC,GAAGy2B,KAAKJ,EAAWkgE,GAKhD,OAFA7tF,KAAK6tF,YAAcA,EACnB7tF,KAAK4tF,SAAWlgG,EAAQkT,IAAIspC,GACrBlqC,KAAK4tF,QAChB,EACOH,CACX,CAlEqB,GAmEjBO,GAAuB,WACvB,SAASA,EAAoBvhG,EAAK60D,EAAe2sC,GACxCA,IACDA,EAAmB,SAAa,cAAmB3sC,OAE/C2sC,EAAmB,IAAIC,IACN/iD,YAAcs2C,EAAWh1F,GAC1C,YAAgB,cAAmBwhG,EAAkB3sC,IAGzD2sC,aAA4BC,QACStgG,IAAjCqgG,EAAiB9iD,YACjB8iD,EAAiB9iD,YAAcs2C,EAAWh1F,QAEFmB,IAAnCqgG,EAAiBxsE,cACtBwsE,EAAiBxsE,cAAgBggE,EAAWh1F,GAEJ,OAAnCwhG,EAAiBxsE,eAA2D,OAAjCwsE,EAAiB9iD,aACjE+iD,GAAqB3gE,WAAW9gC,EAAKwhG,GAGnCA,EAAiB7kG,OACvB6kG,EAAiB7kG,KAAOq4F,EAAWh1F,IAEvCuT,KAAK4oB,SAAWqlE,EAChBjuF,KAAKhO,MAAQsvD,CACjB,CAUA,OATA0sC,EAAoBxwF,UAAUkwB,WAAa,SAAUC,GACjD3tB,KAAK4oB,SAAS8E,WAAWC,EAAW3tB,KAAKhO,MAC7C,EACAg8F,EAAoBxwF,UAAUowB,SAAW,SAAUC,EAAUzkC,GACzD4W,KAAK4oB,SAASgF,SAASC,EAAUzkC,EACrC,EACA4kG,EAAoBxwF,UAAUuwB,KAAO,SAAUJ,EAAWkgE,GACtD,OAAO7tF,KAAK4oB,SAASmF,KAAKJ,EAAW3tB,KAAKhO,MAAO67F,EACrD,EACOG,CACX,CArC0B,GAsCtBG,GAAkB,WAClB,SAASA,IACLnuF,KAAKyT,MAAQroB,OAAOkT,OAAO,KAC/B,CAgGA,OA/FA6vF,EAAe3wF,UAAU4wF,YAAc,SAAU3zD,GAC7C,OAAOz6B,KAAKyT,MAAMgnB,EACtB,EACA0zD,EAAe3wF,UAAU6wF,QAAU,SAAU5zD,EAAUizD,EAAgBY,GACnE,IAAIX,EACAY,EACAC,EACAP,EACAxhG,EACA60D,EAEAmtC,EACAX,EACAY,EAHArrD,EAAY,GAKhB,GADAqrD,EAAiB1uF,KAAKyT,MAAMgnB,GAExB,OAAOi0D,EAUX,IAAKjiG,KARLiiG,EAAiB,IAAIjB,GAAehzD,GACpCz6B,KAAKyT,MAAMgnB,GAAYi0D,EACO,mBAAnBhB,IACPA,EAAiB,CAAE,QAAWA,IAE9BY,IACAX,EAAe,IAAIK,GAAoBM,EAAiBZ,EAAeY,KAE/DZ,EACRpsC,EAAgBosC,EAAejhG,GAC3BA,IAAQ6hG,GAA4C,mBAAlBhtC,KAGtC2sC,EAAmB,SAAa,cAAmB3sC,KAE3C2sC,aAA4BC,KAC5BtE,GAAcr8D,WAAW+zB,EAAe2sC,GACD,OAAnCA,EAAiBxsE,eAA2D,OAAjCwsE,EAAiB9iD,aAC5D+iD,GAAqB3gE,WAAW9gC,EAAKwhG,GAEF,OAAnCA,EAAiBxsE,eAA2D,OAAjCwsE,EAAiB9iD,cAC5D8iD,EAAiB9iD,YAAcs2C,EAAWh1F,MAG7CkhG,GAAgBM,aAA4BC,IAAyD,OAAjCD,EAAiB9iD,YACtFwiD,EAAe,IAAIK,GAAoBvhG,EAAK60D,EAAe2sC,GAG3D5qD,EAAUz5C,KAAK,IAAIokG,GAAoBvhG,EAAK60D,EAAe2sC,KAG1DpR,GAAal+C,UAAU2iB,GAC5BwsC,EAAKxsC,EAEAA,aAAyB,KAC9BwsC,EAAK,IAAIa,GAA6Bl0D,EAAU6mB,IAG5CmtC,EAAe7E,GAAcr8D,WAAW+zB,MASnCmtC,EAAeP,GAAqB3gE,WAAW9gC,KARnB,OAA7BgiG,EAAatjD,aAAyBwiD,EAItCtqD,EAAUz5C,KAAK,IAAIokG,GAAoBvhG,EAAK60D,EAAemtC,IAH3Dd,EAAe,IAAIK,GAAoBvhG,EAAK60D,EAAemtC,GAK/D,YAAgB,cAAmBA,EAAcntC,KAW5CmtC,EAAe,gBAAkChiG,IACnD,gBAAmCA,IACnC+gG,GAAwBjgE,WAAW9gC,KACtC42C,EAAUz5C,KAAK,IAAIokG,GAAoBvhG,EAAK60D,EAAemtC,IAC3D,YAAgB,cAAmBA,EAAcntC,IAE3CitC,IACNA,EAAgBjtC,EAChBktC,EAAc/hG,IAW1B,OAPKkhG,GAAgBY,IACjBZ,EAAe,IAAIK,GAAoBQ,EAAaD,IAExDG,EAAehB,eAAiBA,EAChCgB,EAAef,aAAeA,EAC9Be,EAAerrD,UAAYA,EAC3BqrD,EAAe7R,aAAeiR,EACvBY,CACX,EACOP,CACX,CApGqB,GAsGjBvtE,GAAS,YAAqB,cAO9BguE,GAAoB,WACpB,SAASA,EAAiB1oD,GACtB,IAAI5hC,EAAQtE,KACZkmC,EAAQv4C,MAAK,SAAUlK,GAAK,OAAO6gB,EAAMopE,YAAcjqF,CAAG,GAC9D,CAoBA,OAnBAmrG,EAAiBpxF,UAAUc,OAAS,SAAUqvB,EAAW3uB,EAAgBquE,EAAmBxqF,GACxF,OAAOmd,KAAK0tE,YAAYpvE,OAAOqvB,EAAW3uB,EAAgBquE,EAAmBxqF,EACjF,EACAuI,OAAOgS,eAAewxF,EAAiBpxF,UAAW,YAAa,CAC3D7T,IAAK,WACD,OAAOqW,KAAK0tE,YAAYE,SAC5B,EACA3wE,YAAY,EACZC,cAAc,IAElB0xF,EAAiBpxF,UAAUqtF,aAAe,SAAUzhF,EAAM0hF,GACtD9qF,KAAK0tE,YAAYmd,aAAazhF,EAAM0hF,EACxC,EACA8D,EAAiBpxF,UAAUutF,cAAgB,WACvC,OAAO/qF,KAAK0tE,YAAYqd,eAC5B,EACA6D,EAAiBpxF,UAAU+pF,kBAAoB,SAAU39D,GACrD5pB,KAAK0tE,YAAY6Z,kBAAkB39D,EACvC,EACOglE,CACX,CAzBuB,GA0BnBC,GAAiB,KACjBC,GAAc,WACd,SAASA,EAAWj1D,EAAQlM,EAAWohE,EAAcC,EAAgBrlD,GACjE3pC,KAAK65B,OAASA,EACd75B,KAAK2tB,UAAYA,EACjB3tB,KAAK+uF,aAAeA,EACpB/uF,KAAKgvF,eAAiBA,EACtBhvF,KAAK2pC,aAAeA,EACpB3pC,KAAKivF,WAAa,CAAC,EACI,OAAnBJ,MACAA,GAAiB,IAAIX,IACNzsE,cAAgB,UAC/B,YAAgB,cAAmBotE,GAAgBhL,IAEvDgL,GAAenhE,WAAWC,EAAWk2D,GACrCgL,GAAejhE,SAAS+b,EAC5B,CA+HA,OA9HAmlD,EAAW7iE,OAAS,WAChB,MAAO,CAAC,KAAQ,KAAW8/D,GAAcoC,GAAgBvE,GAC7D,EACAkF,EAAWtxF,UAAU49E,kBAAoB,SAAU8T,EAAW3kD,GAC1D,IAAInhD,EAAO8lG,EAAU7+F,QAAQ,IAAK,IAAM,mBACxC2P,KAAKivF,WAAWC,GAAa9lG,EAC7B4W,KAAK65B,OAAOqmB,UAAU92D,EAAMmhD,EAChC,EACAukD,EAAWtxF,UAAU2xF,gBAAkB,SAAUC,EAAoBlD,EAAoB2B,EAAa/mG,GAClG,IAAIwd,EAAQtE,KAEZ,OADA6tF,EAAcA,GAAe,IAAIpO,EA3DzC,SAA6B5lD,EAAQu1D,GACjC,OAAIA,aAA8B,KACvB1hG,EAAQD,QAAQ2hG,GAEpBv1D,EAAO4lB,aAAa2vC,EAC/B,CAuDeC,CAAoBrvF,KAAK65B,OAAQu1D,GAAoBzhG,MAAK,SAAU2tF,GACvE,IAAI19B,EAAM09B,EAAc37B,QACxB,OAAI27B,EAAcl5B,QACTyrC,EAAYnO,cAAc9hC,GAIA,OAA3B09B,EAAc17B,SACP07B,EAAcl5B,QAElB10D,EAAQD,QAAQ,IAAImhG,GAAiBtT,EAAcl5B,WANtDyrC,EAAYtrC,cAAc3E,GACnB09B,EAAcl5B,UAO7ByrC,EAAYtrC,cAAc3E,GAC1B09B,EAAcl5B,QAAU99C,EAAMgrF,sBAAsBhU,EAAe4Q,EAAoB2B,EAAa/mG,GAAQ6G,MAAK,SAAU01C,GAEvH,GADAi4C,EAAcj4C,UAAYA,EACK,OAA3Bi4C,EAAc17B,SACd,OAAO07B,EAAcjhD,QAAU,KAEnC,IAAIqzC,EAAcppE,EAAMyqF,aAAa9C,QAAQ3Q,EAAc17B,SAAUvc,EAAW6oD,GAChF,OAAO5Q,EAAcjhD,QAAUqzC,CACnC,IACO4N,EAAcl5B,QACzB,GACJ,EACA0sC,EAAWtxF,UAAU8xF,sBAAwB,SAAUhU,EAAe4Q,EAAoB2B,EAAa/mG,GACnG,IAEIqjD,EACAplB,EAHAse,EAAY,IAAIumD,GAAc5pF,KAAK2pC,aAAc2xC,EAAc37B,SAC/Dv6B,EAAek2D,EAAcl2D,aAIjC,GADA8mE,EAAqBA,GAAsBvM,EAAuBG,OACtC,IAAxB16D,EAAaj7B,SAAiB+hG,EAAmBrM,mBACjD,OAAOnyF,EAAQD,QAAQ41C,GAK3B,GAHA8G,EAAY/kB,EAAahjC,KAAI,SAAUqB,GAAK,OAAOA,EAAEkwB,GAAK,IAC1DoR,EAAQK,EAAahjC,KAAI,SAAUqB,GAAK,OAAOA,EAAE2F,IAAM,IACvDw3B,GAAOsrB,MAAM,2BAA2BnlD,OAAOu0F,EAAc37B,SAAUxV,GACnErjD,EAAQ,CACR,IAAIyoG,EAAoB,SAAaT,EAAWU,4BAA6B1oG,GAC7E,GAAIyoG,EAAmB,CAEnB,IADA,IAAIE,EAAsBtlD,EAAUhgD,OAC3BmN,EAAI,EAAGsI,EAAK2vF,EAAkBplG,OAAQmN,EAAIsI,IAAMtI,EAAG,CACxD,IAAIo4F,EAAMH,EAAkBj4F,GACxB0yC,EAA0B,mBAAR0lD,EAChB,SAAWA,GAAKj1D,UAChB,QAAei1D,EAAI/7E,KAAO+7E,EAAKpU,EAAc37B,UACd,IAAjCxV,EAAU5jD,QAAQyjD,KAClBG,EAAUvgD,KAAKogD,GACfjlB,EAAMn7B,KAAK8lG,EAAIjxD,IAEvB,CACA7d,GAAOsrB,MAAM,qCAAqCnlD,OAAOmlG,EAAmBrM,oBAAqB11C,EAAUhyC,MAAMs3F,GACrH,CACJ,CACA,OAAOzvF,KAAKqqC,oBAAoBF,EAAWplB,EAAOse,EAAW6oD,EAAoB2B,EACrF,EACAiB,EAAWtxF,UAAUmyF,wBAA0B,SAAUC,EAAcpqC,GACnE,IAAIlhD,EAAQtE,KACZ,OAAOA,KAAK65B,OAAOC,WAAW81D,GAAcjiG,MAAK,SAAUkiG,GACvD,IAAI1jD,EAAe,SAAW0jD,GAAiBp1D,SAC3Ci0D,EAAiBpqF,EAAM0qF,eAAeX,QAAQliD,EAAc0jD,EAAiBrqC,GACjF,IAAKkpC,EAAef,aAChB,MAAM,IAAI3iF,MAAM,kCAAmCjkB,OAAO6oG,EAAc,OAG5E,OADAlB,EAAehhE,WAAWppB,EAAMqpB,WACzB+gE,EAAef,YAC1B,GACJ,EACAmB,EAAWtxF,UAAU6sC,oBAAsB,SAAUylD,EAAW/qE,EAAOse,EAAW6oD,EAAoB2B,GAClG,IAAIvpF,EAAQtE,KAIZ,OAHA6tF,EAAcA,GAAe,IAAIpO,EACjCyM,EAAqBA,GAAsBvM,EAAuBG,OAClEgQ,EAAYA,EAAU1tG,KAAI,SAAUqB,GAAK,OAAO6gB,EAAMyrF,mBAAmBtsG,EAAI,IACtEuc,KAAK65B,OAAOsnB,eAAe2uC,GAAWniG,MAAK,SAAUqiG,GACxD,IAAI14F,EACAsI,EACAqwF,EACA9jD,EACA9/C,EACA6jG,EACAviE,EAAYrpB,EAAMqpB,UAClBqhE,EAAiB1qF,EAAM0qF,eACvBmB,EAAc,IAAI9lG,MAAM2lG,EAAQ7lG,QACpC,IAAKmN,EAAI,EAAGsI,EAAKowF,EAAQ7lG,OAAQmN,EAAIsI,IAAMtI,EACvCjL,EAAU2jG,EAAQ14F,GAClB60C,EAAe,SAAW9/C,GAASouC,UACnCw1D,EAAWjB,EAAeX,QAAQliD,EAAc9/C,IACvCqhC,WAAWC,GACpBsiE,EAASriE,SAASyV,EAAWte,EAAMztB,IACnC64F,EAAY74F,GAAK24F,EAQrB,IANI/D,EAAmBrM,qBACnBqQ,EAAmBlB,EAAeZ,YAAYlC,EAAmBrM,sBAE7DqQ,EAAiBtiE,SAASyV,GAG7B/rC,EAAI,EAAGsI,EAAKuwF,EAAYhmG,OAAQmN,EAAIsI,IAAMtI,EAC3C64F,EAAY74F,GAAK64F,EAAY74F,GAAGy2B,KAAKJ,EAAWkgE,GAEpD,OAAOngG,EAAQkT,IAAIuvF,GAAaxiG,MAAK,WAAc,OAAO01C,CAAW,GACzE,GACJ,EACAyrD,EAAWtxF,UAAUuyF,mBAAqB,SAAUluF,GAChD,IAAIxU,EAAQwU,EAAGu1D,YAAY,KAC3B,IAAe,IAAX/pE,EAAc,CACd,IAAIw8C,EAAMhoC,EAAG4rB,UAAUpgC,GACnB20D,EAAahiD,KAAKivF,WAAWplD,GACjC,YAAmBj8C,IAAfo0D,EACOngD,EAEJ7B,KAAK65B,OAAO6nB,iBAAiB7/C,EAAImgD,EAC5C,CACA,OAAOngD,CACX,EACAitF,EAAWU,4BAA8B,6BAClCV,CACX,CA/IiB,GAiJbsB,GAAc,WACd,SAASA,EAAWzkF,EAAUuhC,EAAale,EAAWrB,GAClD3tB,KAAK2L,SAAWA,EAChB3L,KAAKktC,YAAcA,EACnBltC,KAAKgvB,UAAYA,EACjBhvB,KAAK43E,YAAa,EAClB53E,KAAK4pB,KAAO,KACZ5pB,KAAK8sB,SAAU,EACf9sB,KAAKb,MAAQ,KACba,KAAK2tB,UAAYA,EACjB3tB,KAAK2pF,cAAgBh8D,EAAUg8D,eAAiB,KAChD,IAKIryF,EACAsI,EANAmjF,EAAiBp3E,EAASrL,gBAAgB0qB,2BAA2BgE,GACrE8kD,EAAcnoE,EAASmoE,YACvBtoF,EAAa0hD,EAAY1hD,WACzB6qF,EAAkBr2E,KAAKq2E,gBAAkB,GACzCj3D,EAAazT,EAASyT,WAI1B,IADAzT,EAASu2E,yBAAyBlzD,EAAW+zD,GACxCzrF,EAAI,EAAGsI,EAAKwf,EAAWj1B,OAAQmN,EAAIsI,IAAMtI,EAC1C8nB,EAAW9nB,GAAGwrF,YAAY9zD,EAAW+zD,EAAgBv3F,EAAYsoF,EAAauC,EAEtF,CAmHA,OAlHA+Z,EAAW5yF,UAAU+uE,QAAU,SAAUC,GACjCxsE,KAAK2L,SAASooE,gBACd/zE,KAAKgvB,UAAUu9C,QAAQC,EAAYxsE,KAAK4pB,KAEhD,EACAwmE,EAAW5yF,UAAUigF,SAAW,SAAUn+E,EAAiBktE,GACvDxsE,KAAK4pB,KAAK5qB,eAAiBgB,KAAKgvB,UAChChvB,KAAK4pB,KAAKtqB,gBAAkBA,IAAmB,QAAsBU,KAAKgvB,WAC1EhvB,KAAK4pB,KAAK09D,mBAAoB,EAC1BtnF,KAAK2L,SAASooE,gBACd/zE,KAAKgvB,UAAUu9C,QAAQC,GAAc,KAAMxsE,KAAK4pB,MAEpD5pB,KAAK0L,KAAK1L,KAAK4pB,KACnB,EACAwmE,EAAW5yF,UAAUkO,KAAO,SAAUvM,GAClC,IAEI7H,EACAsI,EACAnc,EACAqc,EACAgiF,EAsBAxiF,EA5BA+wF,EAAqBrwF,KAAK2L,SAASmoE,YACnCuC,EAAkBr2E,KAAKq2E,gBAM3B,GAAIr2E,KAAK8sB,QAAS,CACd,GAAI9sB,KAAKb,QAAUA,EACf,OAEJa,KAAK+L,QACT,CAGA,IAFA/L,KAAK8sB,SAAU,EACf9sB,KAAKb,MAAQA,EACR7H,EAAI,EAAGsI,EAAKy2E,EAAgBlsF,OAAQmN,EAAIsI,IAAMtI,EAG/CwqF,GADAhiF,GADArc,EAAI4yF,EAAgB/+E,IACPwI,UACagiF,eAC1BhiF,EAASmiF,YAAa,EAClBoO,IACAvwF,EAASgiF,eAAiB,MAE9Br+F,EAAE+d,QAAQkK,KAAKvM,GACfW,EAAS9B,OACT8B,EAASmiF,YAAa,EACtBniF,EAASgiF,eAAiBA,EAGZ,OAAd9hF,KAAK4pB,MACDymE,IACArwF,KAAK4pB,KAAKw9D,eAAiBjoF,GAE3Ba,KAAKgvB,YAAc7vB,EAAMG,gBAAgBN,eACzCM,EAAkBH,EAAMG,gBAEnBU,KAAKktC,YAAYmzC,sBACtB/gF,GAAkB,QAAsBU,KAAKgvB,UAAW7vB,EAAMG,kBAG9DA,GAAkB,QAAsBU,KAAKgvB,YAC7BshE,wBAA0BnxF,EAAMG,gBAEpDU,KAAK4pB,KAAKle,KAAK1L,KAAKgvB,UAAW1vB,IAE1B+wF,IACL/wF,EAAkBH,EAAMG,qBAC8B1R,IAAlDuR,EAAMG,gBAAgBgxF,yBACnBtwF,KAAKgvB,UAAU0+C,aAAe1tE,KAAKgvB,UAAU0+C,YAAYkd,yBAAyBrK,oBACrFjhF,EAAkBlU,OAAOC,OAAO,CAAC,EAAG8T,EAAMG,kBAC1BL,sBAAwBE,EAAMG,gBAAgBgxF,yBAElEtwF,KAAKgvB,UAAUtjB,KAAKvM,EAAMH,eAAgBM,GAElD,EACA8wF,EAAW5yF,UAAUuO,OAAS,WAC1B,GAAI/L,KAAK8sB,QAAS,CACd,IAEIltB,EAFAy2E,EAAkBr2E,KAAKq2E,gBACvB/+E,OAAI,EAaR,IAXA0I,KAAK8sB,SAAU,EACf9sB,KAAKb,MAAQ,KACK,OAAda,KAAK4pB,MACL5pB,KAAK4pB,KAAK7d,SAEV/L,KAAK2L,SAASsoE,eACdj0E,KAAKgvB,UAAUjjB,SAEQ,OAAvB/L,KAAK2pF,eACL3pF,KAAK2pF,cAAcpK,aAElBjoF,EAAI,EAAGsI,EAAKy2E,EAAgBlsF,OAAQmN,EAAIsI,IAAMtI,EAC/C++E,EAAgB/+E,GAAGkK,QAAQuK,QAEnC,CACJ,EACAqkF,EAAW5yF,UAAUwvC,SAAW,WACxBhtC,KAAK43E,aAGT53E,KAAK43E,YAAa,EACd53E,KAAK2L,SAASkoE,iBACd7zE,KAAKgvB,UAAUge,WAED,OAAdhtC,KAAK4pB,MACL5pB,KAAK4pB,KAAKojB,WAElB,EACAojD,EAAW5yF,UAAUu6E,SAAW,WACxB/3E,KAAK43E,aACL53E,KAAK43E,YAAa,EACA,OAAd53E,KAAK4pB,MACL5pB,KAAK4pB,KAAKmuD,WAEV/3E,KAAK2L,SAASqoE,iBACdh0E,KAAKgvB,UAAU+oD,WAG3B,EACOqY,CACX,CA1IiB,GA4IbG,GAAiB,EAIrB,SAASC,KAAqB,OAAO,CAAM,CAC3C,SAASC,KAAwB,CACjC,IAAIvC,GAAwB,WACxB,SAASA,IACLluF,KAAKmrC,YAAc,KACnBnrC,KAAKyhB,cAAgB,KACrBzhB,KAAK0wF,iCAA8B9iG,EACnCoS,KAAKitF,cAAe,EACpBjtF,KAAK24E,iBAAkB,EACvB34E,KAAK2wF,iBAAmB,KACxB3wF,KAAKutF,kBAAoBkD,GACzBzwF,KAAK4wF,eAAiBJ,GACtBxwF,KAAK6wF,eAAgB,EACrB7wF,KAAK8wF,cAAgB,KACrB9wF,KAAK+wF,mBAAoB,EACzB/wF,KAAKkgF,eAAgB,EACrBlgF,KAAKof,WAAa,GAClBpf,KAAKxU,WAAa,CAAC,EACnBwU,KAAK4uD,eAAgB,EACrB5uD,KAAK6qE,gBAAkB,IAC3B,CAwTA,OAvTAqjB,EAAqB3gE,WAAa,SAAUnkC,EAAMkD,GAC9C,IAAIqf,EASJ,OARIviB,EAAKokC,SAAS,sBACd7hB,EAAWrf,GAAY,IAAI4hG,GAClBzsE,cAAgBggE,EAAWr4F,EAAKqkC,UAAU,EAAGrkC,EAAKe,OAAS,MAEpEf,EAAKokC,SAAS,oBACd7hB,EAAWrf,GAAY,IAAI4hG,GAClB/iD,YAAcs2C,EAAWr4F,EAAKqkC,UAAU,EAAGrkC,EAAKe,OAAS,MAE/DwhB,CACX,EACAuiF,EAAqB1wF,UAAUwzF,gBAAkB,SAAUrlF,GAC5B,OAAvB3L,KAAK8wF,gBACL9wF,KAAK8wF,cAAgB,IAEzB9wF,KAAK8wF,cAAclnG,KAAK+hB,EAC5B,EACAuiF,EAAqB1wF,UAAUkwB,WAAa,SAAUC,EAAW7mC,GAC7D,IAIIwQ,EACAsI,EACAvT,EANAiwB,EAAQx1B,EAAO0W,UACf4hB,EAAapf,KAAKof,WAClBqC,EAAgBzhB,KAAKyhB,cACrBivE,EAA8B1wF,KAAK0wF,4BAIvC,IAAI1wF,KAAK4uD,cAeT,GAZA5uD,KAAK4uD,eAAgB,EACrB9nE,EAAOyiG,iBArDFgH,GAsDLvwF,KAAKM,gBAAkBqtB,EAAUhkC,IAAI,MACrCqW,KAAKmI,UAAYwlB,EAAUhkC,IAAI,KAC/BqW,KAAKlZ,OAASA,EACdkZ,KAAK6wF,cAAgB7wF,KAAK24E,iBAAmB,eAC7C34E,KAAK+zE,eAAkB,YAAaz3D,EACpCtc,KAAK8zE,YAAe,SAAUx3D,EAC9Btc,KAAKi0E,cAAiB,WAAY33D,EAClCtc,KAAK6zE,gBAAmB,aAAcv3D,EACtCtc,KAAKg0E,gBAAmB,aAAc13D,EACtCtc,KAAKixF,SAAWjxF,KAAKmrC,aAAenrC,KAAKyhB,cACnB,OAAlBA,EAUA,GAT0B,IAAtBrC,EAAWj1B,QACX,IAAIg4F,EAAiB,CACjB/4F,KAAM,QACNknC,cAAe,iBAAkBhU,EAAQ,eAAiB,KAC1DhnB,UAAWmsB,EACX4oD,mBAAoBqmB,IACrBrO,aAAav7F,EAAQkZ,MAE5B3T,EAAU+yB,EAAW,GACK,IAAtBA,EAAWj1B,QAAiC,UAAjBkC,EAAQjD,KACnCiD,EAAQqpE,UAAYrpE,EAAQu2F,WAAa5iF,KAAK+wF,kBAC9C1kG,EAAQm2F,SAAS17F,EAAQkZ,UAExB,CACD,IAAK1I,EAAI,EAAGsI,EAAKwf,EAAWj1B,OAAQmN,EAAIsI,IAAMtI,EAE1C,GADA8nB,EAAW9nB,GAAGkrF,SAAS17F,EAAQkZ,MAC3Bof,EAAW9nB,GAAGuzE,gBAAiB,CAC/B,GAAI7qE,KAAK6qE,gBACL,MAAM,IAAI7/D,MAAM,gFAEpBhL,KAAK6qE,gBAAkBzrD,EAAW9nB,EACtC,EAEJjL,EAAU,IAAI81F,EAAiB,CAC3B/4F,KAAM,QACNknC,cAAe,iBAAkBhU,EAAQ,eAAiB,KAC1DhnB,UAAWmsB,EACX4oD,mBAAoBqmB,KAEhB9N,YAAa,EACrBv2F,EAAQg2F,aAAav7F,EAAQkZ,KACjC,KAEC,CACD,IAAK1I,EAAI,EAAGsI,EAAKwf,EAAWj1B,OAAQmN,EAAIsI,IAAMtI,EAC1C8nB,EAAW9nB,GAAGkrF,SAAS17F,EAAQkZ,MAEnCA,KAAKkxF,yBAAyBvjE,EAAW7mC,EAC7C,CACJ,EACAonG,EAAqB1wF,UAAUowB,SAAW,SAAUC,EAAUzkC,GAC1D,IAAIkb,EAAQtE,KACe,OAAvBA,KAAKyhB,gBACLoM,EAASsjE,kBAAkB/nG,GAAQ4W,KAAKyhB,cAAezhB,KAAMA,KAAKyhB,eAC9Dp3B,MAAMkkB,QAAQvO,KAAKoxF,UACnBpxF,KAAKoxF,QACA7nG,SAAQ,SAAUyzC,GACnBnP,EAASsjE,kBAAkBn0D,EAAO14B,EAAOA,EAAMmd,cACnD,KAGiB,OAArBzhB,KAAKmrC,aACLtd,EAASwjE,gBAAgBjoG,GAAQ4W,KAAKmrC,YAAanrC,KAE3D,EACAkuF,EAAqB1wF,UAAU4zF,QAAU,SAAUA,GAC/C,MAAM,IAAIpmF,MAAM,0BACpB,EACAkjF,EAAqB1wF,UAAUuwB,KAAO,SAAUJ,EAAW7mC,EAAQ+mG,EAAahR,EAAcyU,GAC1F,IACIvmG,EADAuZ,EAAQtE,KAEZ,OAAyB,OAArBA,KAAKmrC,aACL0xC,EAAelvD,EAAUhkC,IAAIu5F,GAAapG,gBAAgBD,GAAgB78E,KAAK68E,cAAgB/1F,GAC/FiE,EAAU,IAAI40F,EAAuB3/E,KAAK24E,iBAAiB,GACtDkE,EAAapiD,WACdoiD,EAAapiD,SAAW,SAAW3zC,GAAQ2zC,UAExCoiD,EACFsS,gBAAgBxhE,EAAUhkC,IAAImlG,IAAa/jG,EAAS8iG,EAAa/mG,GACjE6G,MAAK,SAAU+/E,GAIhB,OAHK4jB,GAAkBhtF,EAAMopE,cACzBppE,EAAMopE,YAAcA,GAEjBA,CACX,KAEGhgF,EAAQD,QAAQuS,KAC3B,EACAkuF,EAAqB1wF,UAAUyuF,QAAU,SAAUkB,EAAU9pD,EAAWriD,EAAMksD,EAAa9mD,GACvF,GAAI4Z,KAAKitF,cACL,IAAK//C,EAAYwgC,YAAa,CAC1B,IAAI9tB,EAAW,mBAAkB,YAC7B/C,EAAW,8BACXouC,EAAYjqG,EAAK6gC,aAAa,cAC9BytC,EAAOtuE,EAAK6gC,aAAa,QAC7B7gC,EAAKiU,gBAAgBi4C,EAAY4iC,kBACjC,iBAAgBlwB,EAAU5+D,EAAMoF,GAChCy2D,EAAShO,YAAY7tD,GACrBksD,EAAYwgC,YAAcyf,EAASlB,QAAQpvC,EAAUxZ,GACjDisB,IACApiB,EAAYwgC,YAAYpe,KAAOA,EAC/BtuE,EAAKiU,gBAAgB,SAErBg2F,IACA/9C,EAAYwgC,YAAYmd,aAAaI,GACrCjqG,EAAKiU,gBAAgB,eAEzBjU,EAAO4+D,CACX,OAEC,GAAyB,OAArB5/C,KAAKmrC,YAAsB,CAChC,IAAIo1C,EAAmB,CAAC,EACxB,GAAIvgF,KAAK4wF,eAAezD,EAAU9pD,EAAWriD,EAAMksD,IAAgBlsD,EAAKuwG,gBAAiB,CAKrF,IAJA,IAAI5E,EAAe3rG,EAAKipC,WACpBogE,EAAiBrqF,KAAK6wF,cAAgB,KAAO,mBAAkB,cAC/DlkC,OAAc,EACd6kC,OAAY,EACT7E,GACHhgC,EAAcggC,EAAahgC,YACE,aAAzBggC,EAAaxtE,UAA2BqyE,EAAY7E,EAAa9qE,aAAa,kBAC9E0+D,EAAiBiR,GAAarE,EAASlB,QAAQU,EAActpD,GAC7D,gBAAespD,EAAcvmG,GAC7B8mD,EAAYqzC,iBAAmBA,GAEP,OAAnB8J,IACyB,IAA1BsC,EAAa//B,UAAkB80B,EAAiBiL,GAChD,gBAAeA,EAAcvmG,GAG7BikG,EAAex7C,YAAY89C,IAGnCA,EAAehgC,EAEI,OAAnB09B,GAA2BA,EAAekH,iBAC1CvwG,EAAK6tD,YAAYw7C,GAErBn9C,EAAYszC,uBAAwB,CACxC,MAEItzC,EAAYszC,uBAAwB,CAE5C,MACUxgF,KAAK4wF,eAAezD,EAAU9pD,EAAWriD,EAAMksD,KACrDA,EAAYszC,uBAAwB,GAExC,OAAOx/F,CACX,EACAktG,EAAqB1wF,UAAUc,OAAS,SAAUqvB,EAAWuf,EAAarqD,EAASuzF,GAC/E,IAAIqb,EACA/iE,EAAK,KACTwe,EAAcA,GAAe6yC,EAAoBD,OACjDj9F,EAAUA,GAAW,KACrBuzF,EAAWA,GAAY,KACE,OAArBp2E,KAAKmrC,aAAwBtoD,IACzBmd,KAAK6wF,eACLY,EAAW5uG,EAAQ+nE,aAAa5qD,KAAK2wF,kBACrChjE,EAAU6Q,iBAAiB,cAAcizD,KAGzCA,EAAW5uG,EACPmd,KAAK24E,iBACLhrD,EAAU6Q,iBAAiB,cAAcizD,KAIrC,OAAZ5uG,IACAA,EAAQ6rC,GAAKA,EAAK7rC,EAAQ6rC,IAAM,CAAC,GAErC,IAGIg/C,EAHA1+C,EAAYke,EAAYle,WAAarB,EAAUhkC,IAAIqW,KAAKlZ,QACxDioC,EAAa,IAAIqhE,GAAWpwF,KAAMktC,EAAale,EAAWrB,GAC1DmjE,EAAgB9wF,KAAK8wF,cAEzB,GAAI9wF,KAAKitF,aACLv+D,EAAGK,WAAaA,OAEf,GAAyB,OAArB/uB,KAAKmrC,aAMV,GALAuiC,EAAcxgC,EAAYwgC,aAAe1tE,KAAK0tE,YAC9C//C,EAAUqB,UAAYA,EAClB0+C,IACA3+C,EAAWnF,KAAO8jD,EAAYpvE,OAAOqvB,EAAWuf,EAAarqD,IAEjD,OAAZA,GAEA,GADA6rC,EAAGK,WAAaA,EACZA,EAAWnF,KAAM,CACjB,IAAK5pB,KAAK6wF,gBAAgD,IAA9BhuG,EAAQ6qE,WAAWvjE,QAAgBtH,EAAQwnG,gBAAiB,CACpF,IAAIA,EAAiBxnG,EAAQ6qE,WAAW,IAAM7qE,EAAQwnG,eACtDt7D,EAAWnF,KAAKw6D,YAAc,CAAEvnC,SAAUwtC,GAC1CA,EAAejkG,YAAc,gBAAeikG,EAChD,CACA,GAAIn9C,EAAY+yC,kBAAmB,CAC/B,GAAsB,OAAlB6Q,EACA,IAAK,IAAIx5F,EAAI,EAAGsI,EAAKkxF,EAAc3mG,OAAQmN,EAAIsI,IAAMtI,EACjDy3B,EAAWnF,KAAK89D,WAAWoJ,EAAcx5F,GAAGgH,OAAOzb,EAASmsC,EAAWD,IAG/EA,EAAWnF,KAAKg+D,cAAc6J,EAClC,MAEI1iE,EAAWnF,KAAKu8D,kBAAkBsL,EAE1C,MACK,GAAsB,OAAlBX,EACL,IAASx5F,EAAI,EAAGsI,EAAKkxF,EAAc3mG,OAAQmN,EAAIsI,IAAMtI,EACjD8+E,EAASxsF,KAAKknG,EAAcx5F,GAAGgH,OAAOzb,EAASmsC,EAAWD,SAIjE,GAAIA,EAAWnF,MAEhB,GADAmF,EAAWnF,KAAKmF,WAAaA,EACP,OAAlB+hE,EACA,IAASx5F,EAAI,EAAGsI,EAAKkxF,EAAc3mG,OAAQmN,EAAIsI,IAAMtI,EACjDy3B,EAAWnF,KAAK89D,WAAWoJ,EAAcx5F,GAAGgH,OAAO4uC,EAAY7mD,KAAM2oC,EAAWD,SAIvF,GAAsB,OAAlB+hE,EACL,IAASx5F,EAAI,EAAGsI,EAAKkxF,EAAc3mG,OAAQmN,EAAIsI,IAAMtI,EACjD8+E,EAASxsF,KAAKknG,EAAcx5F,GAAGgH,OAAO4uC,EAAY7mD,KAAM2oC,EAAWD,SAI1E,GAAsB,OAAlB+hE,EACL,IAASx5F,EAAI,EAAGsI,EAAKkxF,EAAc3mG,OAAQmN,EAAIsI,IAAMtI,EACjD8+E,EAASxsF,KAAKknG,EAAcx5F,GAAGgH,OAAOzb,EAASmsC,EAAWD,IASlE,OANW,OAAPL,IACAA,EAAG1uB,KAAKixF,UAAYliE,GAEpBme,EAAYizC,qBAAuBzS,GACnC3+C,EAAWnF,KAAK2iD,UAEbx9C,CACX,EACAm/D,EAAqB1wF,UAAU0kF,yBAA2B,SAAUt2F,EAAU8vB,GAC1E,IAAI0D,EACA9nB,EACAsI,EACAE,EACJ,KAAI,0BAA2B4b,GAK/B,IAFAA,EAAOg2E,uBAAwB,EAE1Bp6F,EAAI,EAAGsI,GADZwf,EAAapf,KAAKof,YACUj1B,OAAQmN,EAAIsI,IAAMtI,OAEzB1J,KADjBkS,EAAWsf,EAAW9nB,GAAGorF,eAAe92F,MAEpC8vB,EAAO5b,EAASO,cAAgBP,EAG5C,EACAouF,EAAqB1wF,UAAU0zF,yBAA2B,SAAUvjE,EAAW7mC,GAG3E,IAFA,IAAI6kB,EACAgmF,EAAU7qG,IACD,CACT,IAAIw1B,EAAQlxB,OAAO81C,eAAep6C,EAAO0W,WAEzC,KADA1W,EAASw1B,GAASA,EAAMze,aAEpB,OAGJ,GADA8N,EAAW,YAAgB,cAAmB7kB,GAE1C,KAER,CACA6kB,EAAS+hB,WAAWC,EAAW7mC,GAS/B,IARA,IAAIoxE,EAAU,SAAU5gE,EAAGsI,GACvB,IAAIwtB,EAAOzhB,EAASyT,WAAW9nB,GAC/B,GAAIs6F,EAAOxyE,WAAW70B,MAAK,SAAUuxB,GAAK,OAAOA,EAAE1yB,OAASgkC,EAAKhkC,IAAM,IACnE,MAAO,WAEX,IAAI+4F,EAAiB/0D,GAAMi1D,aAAasP,EAASC,EACrD,EACIA,EAAS5xF,KACJ1I,EAAI,EAAGsI,EAAK+L,EAASyT,WAAWj1B,OAAQmN,EAAIsI,IAAMtI,EACvD4gE,EAAQ5gE,EAEhB,EACO42F,CACX,CA3U2B,GA6U3B,SAAStgE,GAASlS,EAAQtyB,EAAMyhD,EAAUliC,GACtC,GAAKvf,EAAL,CAGA,IAAIkD,EAAWovB,EAAOtyB,GACtB,GAAIkD,GACA,GAAIA,IAAau+C,EACb,MAAM,IAAI7/B,MAAM,yBAAyBjkB,OAAO4hB,EAAM,uDAAuD5hB,OAAOqC,EAAM,WAIlIsyB,EAAOtyB,GAAQyhD,CARf,CASJ,CACA,SAASgnD,GAAqBzoG,EAAMuf,GAChC,GAAI,QAAQhmB,KAAKyG,GAAO,CACpB,IAAIkiD,EAAUm2C,EAAWr4F,GAIzB,OAHA,YACe,cACVihB,KAAK,IAAItjB,OAAOqC,EAAM,qBAAqBrC,OAAO4hB,EAAM,qCAAqC5hB,OAAOukD,EAAS,iFAC3GA,CACX,CACA,OAAOliD,CACX,CACA,IAAI0oG,GAAiB,kBACjBlI,GAAiB,WACjB,SAASA,EAAcn5F,EAAQ4qF,GAC3Br7E,KAAKgsF,gBAAkB,KACvBhsF,KAAKvP,OAASA,GAAU,KACxBuP,KAAK+xF,UAA4B,OAAhB/xF,KAAKvP,OACtBuP,KAAKq7E,QAAUA,GAAW,GAC1Br7E,KAAKkE,gBAAkB,CACnBmI,gBAAiBrM,KAAKgyF,kBAAkBtmF,KAAK1L,MAC7C4L,iBAAkB5L,KAAKiyF,mBAAmBvmF,KAAK1L,OAEnDA,KAAKxU,WAAaJ,OAAOkT,OAAO,MAChC0B,KAAKzU,SAAWH,OAAOkT,OAAO,MAC9B0B,KAAKqM,gBAAkBjhB,OAAOkT,OAAO,MACrC0B,KAAK4L,iBAAmBxgB,OAAOkT,OAAO,MACtC0B,KAAK6pE,aAAez+E,OAAOkT,OAAO,MAClC0B,KAAK+R,OAAS3mB,OAAOkT,OAAO,MAC5B0B,KAAK04E,cAAgB14E,KAAKkyF,aAAelyF,KAAKmyF,aAAenyF,KAAKoyF,YAAcpyF,KAAKqyF,WAAaryF,KAAKsyF,cAAe,CAC1H,CAoNA,OAnNA1I,EAAcr8D,WAAa,SAAUzmC,EAAQwF,GACzC,IAAIu+C,EACJ,GAAIv+C,GAAYwlG,MAAkBxlG,EAC9B,OAAOA,EAEX,GAAI,cAAexF,EAAQ,CACvB,IAAI04B,EAAS14B,EAAOm3F,UACpB,GAAsB,iBAAXz+D,GACPqrB,EAAWv+C,GAAY,IAAI4hG,IAClB4D,KAAkB,EACtBjnD,EAASM,cACVN,EAASM,YAAc0mD,GAAqBryE,EAAQ,uBAGvD,CACqB,mBAAXA,IACPA,EAASA,EAAOxhB,KAAKlX,IAEH,iBAAX04B,IACPA,EAAS,CAAEp2B,KAAMo2B,IAGrB,IAAI+yE,GADJ/yE,EAASp0B,OAAOC,OAAO,CAAC,EAAGm0B,IACD7W,MAAQ,UAC9BsiC,EAASzrB,EAAOp2B,KACpB,OAAQmpG,GACJ,IAAK,UACL,IAAK,aACD1nD,EAAWv+C,GAAY,IAAI4hG,IAClB4D,KAAkB,EACN,YAAjBS,EACK1nD,EAASM,cACVN,EAASM,YAAcF,EACjB4mD,GAAqB5mD,EAAQ,kBAC7Bw2C,EAAW36F,EAAOsC,OAIvByhD,EAASppB,gBACVopB,EAASppB,cAAgBwpB,EACnB4mD,GAAqB5mD,EAAQ,oBAC7Bw2C,EAAW36F,EAAOsC,OAG5B,uBAAwBo2B,IACxBA,EAAOytE,aAAeztE,EAAOgzE,0BACtBhzE,EAAOgzE,oBAEd,uBAAwBhzE,QAAmD5xB,IAAzCi9C,EAAS6lD,8BAC3ClxE,EAAOkxE,4BAA8BlxE,EAAO6qD,0BACrC7qD,EAAO6qD,2BAEX7qD,EAAOp2B,KACdgC,OAAOC,OAAOw/C,EAAUrrB,GACxB,MACJ,IAAK,iBACDqrB,EAAW,IAAI,MAAuB,QAAUI,GAAUnkD,EAAOsC,OACjE,MACJ,IAAK,kBACDyhD,EAAW,IAAI,MAAwB,QAAUI,GAAUnkD,EAAOsC,OAClE,MACJ,IAAK,kBACDyhD,EAAW,IAAI2iD,GAG3B,CACA,GAAI3iD,aAAoBqjD,GAAsB,CAC1C,IAAIhQ,EAA8B,iBAAX1+D,OAAsB5xB,EAAY4xB,EAAO0+D,UAC5DuU,EAAe5nD,EAASzrB,WAC5B,GAAI/0B,MAAMkkB,QAAQ2vE,GACd,IAAK,IAAI5mF,EAAI,EAAGsI,EAAKs+E,EAAU/zF,OAAQyV,EAAKtI,IAAKA,EAAG,CAChD,IAAI81B,EAAO8wD,EAAU5mF,GACrB,IAAK81B,GAAyB,iBAATA,IAAsBA,EAAKhkC,KAC5C,MAAM,IAAI4hB,MAAM,iCAAkCjkB,OAAOuQ,EAAG,iBAAmBvQ,OAAOD,EAAOsC,KAAM,mEAIvG,IAFA,IAAIspG,EAAU,IAAIvQ,EAAiB/0D,GAC/BulE,GAAU,EACLjtF,EAAI,EAAGouD,EAAK2+B,EAAatoG,OAAQ2pE,EAAKpuD,IAAKA,EAChD,GAAI+sF,EAAa/sF,GAAGtc,OAASspG,EAAQtpG,KAAM,CACvCupG,GAAU,EACV,KACJ,CAEAA,GAGJD,EAAQrQ,aAAav7F,EAAQ+jD,EACjC,CAER,CACJ,CACA,OAAOA,CACX,EACA++C,EAAcpsF,UAAUo1F,YAAc,SAAUh1F,EAAKxU,GACjD,GAAyB,mBAAdwU,EAAIxU,GAAsB,CAIjC,IAHA,IAAI2lB,EAAOnR,EAAIxU,GAAMsiB,KAAK9N,GACtBi1F,EAAU,EACVxiE,OAAe,OACuCziC,IAAnDoS,KAAKqwB,EAAejnC,EAAOypG,EAAQ3xG,aACtC2xG,IAEJ7yF,KAAK5W,IAAQ,EACb4W,KAAKqwB,GAAgBthB,CACzB,CACJ,EACA66E,EAAcpsF,UAAUiqF,YAAc,SAAUr+F,EAAM0pG,EAAKC,EAAKC,EAAOC,GAInE,GAHIjzF,KAAK+xF,WACL/xF,KAAKvP,OAAOg3F,YAAYr+F,EAAM0pG,EAAKC,EAAKC,EAAOC,GAE/CjzF,KAAK5W,GAAO,CACZ4W,KAAK5W,EAAO,KAAK0pG,EAAKC,EAAKC,EAAOC,GAClC,IAAI5iE,EAAejnC,EAAO,IAC1B,GAAI4W,KAAKqwB,KACLrwB,KAAKqwB,GAAcyiE,EAAKC,EAAKC,EAAOC,GAEhCjzF,KADJqwB,EAAejnC,EAAO,MACE,CACpB4W,KAAKqwB,GAAcyiE,EAAKC,EAAKC,EAAOC,GAEpC,IADA,IAAIJ,EAAU,OAC4CjlG,IAAnDoS,KAAKqwB,EAAejnC,EAAOypG,EAAQ3xG,aACtC8e,KAAKqwB,GAAcyiE,EAAKC,EAAKC,EAAOC,GACpCJ,GAER,CAER,CACJ,EACAjJ,EAAcpsF,UAAU66E,wBAA0B,SAAU6a,GACxDlzF,KAAK4yF,YAAYM,EAAO,iBACxBlzF,KAAK4yF,YAAYM,EAAO,gBACxBlzF,KAAK4yF,YAAYM,EAAO,gBACxBlzF,KAAK4yF,YAAYM,EAAO,eACxBlzF,KAAK4yF,YAAYM,EAAO,cACxBlzF,KAAK4yF,YAAYM,EAAO,eAC5B,EACAtJ,EAAcpsF,UAAUivF,mBAAqB,SAAU0G,GACnD,OAAOnzF,KAAKgsF,kBAAoBhsF,KAAKgsF,gBAAkBmH,EAC3D,EACAvJ,EAAcpsF,UAAU41F,cAAgB,SAAUC,GAC9C,IAAIC,EAAiBtzF,KAAKvP,OAC1BuP,KAAKvP,OAAS4iG,GAAa,KAC3BrzF,KAAK+xF,UAA4B,OAAhB/xF,KAAKvP,OACG,OAArB4iG,EAAU5iG,SACV4iG,EAAU5iG,OAAS6iG,EACnBD,EAAUtB,UAA+B,OAAnBuB,EAE9B,EACA1J,EAAcpsF,UAAU+1F,eAAiB,SAAUx2E,GAC/C,OAAO,QAAeA,EAAM/c,KAAKq7E,QACrC,EACAuO,EAAcpsF,UAAU6zF,gBAAkB,SAAUlyE,EAASxT,GACzDiiB,GAAS5tB,KAAKzU,SAAU4zB,EAASxT,EAAU,aAC/C,EACAi+E,EAAcpsF,UAAU8vF,WAAa,SAAUnuE,GAC3C,OAAOnf,KAAKzU,SAAS4zB,KAAanf,KAAK+xF,UAAY/xF,KAAKvP,OAAO68F,WAAWnuE,GAAW,KACzF,EACAyqE,EAAcpsF,UAAUsvF,aAAe,SAAUx3F,GAC7C,OAAO0K,KAAK6pE,aAAav0E,KAAe0K,KAAK+xF,UAAY/xF,KAAKvP,OAAOq8F,aAAax3F,GAAa,KACnG,EACAs0F,EAAcpsF,UAAU2zF,kBAAoB,SAAU77F,EAAWqW,EAAUihF,GACvE5sF,KAAK6pE,aAAav0E,GAAas3F,EAC/Bh/D,GAAS5tB,KAAKxU,WAAY8J,EAAWqW,EAAU,eACnD,EACAi+E,EAAcpsF,UAAUqkB,aAAe,SAAUvsB,GAC7C,OAAO0K,KAAKxU,WAAW8J,KAAe0K,KAAK+xF,UAAY/xF,KAAKvP,OAAOoxB,aAAavsB,GAAa,KACjG,EACAs0F,EAAcpsF,UAAUswB,uBAAyB,SAAU1kC,EAAM4kC,GAC7DJ,GAAS5tB,KAAKqM,gBAAiBjjB,EAAM4kC,EAAgB,mBACzD,EACA47D,EAAcpsF,UAAUw0F,kBAAoB,SAAU5oG,GAClD,OAAO4W,KAAKqM,gBAAgBjjB,KAAU4W,KAAK+xF,UAAY/xF,KAAKvP,OAAOuhG,kBAAkB5oG,GAAQ,KACjG,EACAwgG,EAAcpsF,UAAU2wB,wBAA0B,SAAU/kC,EAAMglC,GAC9DR,GAAS5tB,KAAK4L,iBAAkBxiB,EAAMglC,EAAiB,oBAC3D,EACAw7D,EAAcpsF,UAAUy0F,mBAAqB,SAAU7oG,GACnD,OAAO4W,KAAK4L,iBAAiBxiB,KAAU4W,KAAK+xF,UAAY/xF,KAAKvP,OAAOwhG,mBAAmB7oG,GAAQ,KACnG,EACAwgG,EAAcpsF,UAAUg2F,cAAgB,SAAUpqG,EAAM4I,GACpD47B,GAAS5tB,KAAK+R,OAAQ3oB,EAAM4I,EAAO,UACvC,EACA43F,EAAcpsF,UAAU2G,SAAW,SAAU/a,GACzC,OAAO4W,KAAK+R,OAAO3oB,KAAU4W,KAAK+xF,UAAY/xF,KAAKvP,OAAO0T,SAAS/a,GAAQ,KAC/E,EACAwgG,EAAcpsF,UAAUgjC,aAAe,SAAU7S,EAAW8lE,GACxD,IAAIxF,EAAmB,YAAgB,cAAmBwF,GA0B1D,OAzBIxF,EACIA,aAA4BC,KAC5BtE,EAAcr8D,WAAWkmE,EAAMxF,GACQ,OAAnCA,EAAiBxsE,eAA2D,OAAjCwsE,EAAiB9iD,aAC5D+iD,GAAqB3gE,WAAWkmE,EAAKrqG,KAAM6kG,GAER,OAAnCA,EAAiBxsE,eAA2D,OAAjCwsE,EAAiB9iD,cAC5D8iD,EAAiB9iD,YAAcs2C,EAAWgS,EAAKrqG,UAKvD6kG,EAAmBrE,EAAcr8D,WAAWkmE,IACrCvF,GAAqB3gE,WAAWkmE,EAAKrqG,OACrC,gBAAkCqqG,EAAKrqG,OACvC,gBAAmCqqG,EAAKrqG,OACxCokG,GAAwBjgE,WAAWkmE,EAAKrqG,UAE3C6kG,EAAmB,IAAIC,IACN/iD,YAAcs2C,EAAWgS,EAAKrqG,OAEnD,YAAgB,cAAmB6kG,EAAkBwF,IAEzDxF,EAAiBvgE,WAAWC,EAAW8lE,GACvCxF,EAAiBrgE,SAAS5tB,UAAMpS,GACzBqgG,CACX,EACOrE,CACX,CAtOoB,GAwOhB/M,GAAe,YAAgB,wBAAyB,CACxD12B,SAAU,SAAUr/D,GAChB,MAAwC,mBAA3BA,EAAOqoG,iBACT,8KAGf,EACA3pD,QAAS,SAAU1+C,GACwB,mBAA1BA,EAAOi2F,iBAChBj2F,EAAOi2F,eAAiB,UAEhC,IAEAqG,GAAwB,WACxB,SAASA,EAAqBrmE,GAC1B/c,KAAK+c,KAAOA,EACZ/c,KAAK0zF,aAAe,IACxB,CAgBA,OAfAtQ,EAAqB5lF,UAAU2xF,gBAAkB,SAAUvlD,EAAYsiD,EAAoB2B,EAAa/mG,GAKpG,OAJ0B,OAAtBkZ,KAAK0zF,cAAyB1zF,KAAKy6B,WACnCz6B,KAAK0zF,cAAe,QAAe1zF,KAAK+c,KAAM/c,KAAKy6B,WAEvDyxD,EAAmBrM,mBAAqB7/E,KAAKy6B,SACtCmP,EAAWulD,gBAAgBnvF,KAAK0zF,cAAgB1zF,KAAK+c,KAAMmvE,EAAoB2B,EAAa/mG,EACvG,EACAs8F,EAAqB5lF,UAAUu/E,eAAiB,SAAU9tB,GAC5B,OAAtBjvD,KAAK0zF,eACL1zF,KAAK0zF,cAAe,QAAe1zF,KAAK+c,KAAMkyC,GAEtD,EACuBnzB,EAAW,CAC9B+gD,MACDuG,EAEP,CArB2B,GAsBvBK,GAA4B,WAC5B,SAASA,EAAyBxH,EAAav2B,GAC3C1lD,KAAKy6B,SAAWirB,EAAOjrB,SACvBz6B,KAAKq7E,QAAUY,EAAYyH,uBAAuBh+B,EACtD,CAQA,OAPA+9B,EAAyBjmF,UAAU2xF,gBAAkB,SAAUvlD,EAAYsiD,EAAoB2B,EAAa/mG,GAExG,OADAolG,EAAmBrM,mBAAqB7/E,KAAKy6B,SACtCmP,EAAWulD,gBAAgBnvF,KAAKq7E,QAAS6Q,EAAoB2B,EAAa/mG,EACrF,EAC2Bg1C,EAAW,CAClC+gD,MACD4G,EAEP,CAb+B,GAc3BJ,GAAkB,WAClB,SAASA,EAAej+D,EAAcuuE,GAClC3zF,KAAKolB,aAAeA,GAAgB,KACpCplB,KAAK2zF,kBAAoBA,GAAqB,EAClD,CA2BA,OA1BAtQ,EAAe7lF,UAAU2xF,gBAAkB,SAAUvlD,EAAYsiD,EAAoB2B,EAAa/mG,GAC9F,IAAIo3B,EAAQle,KAAKke,MACbkH,EAAeplB,KAAKolB,aACxB,GAAIlH,GAASA,EAAMikC,eACf,OAAOz0D,EAAQD,QAAQ,MAK3B,GAHAuS,KAAKke,MAAQA,EAAQ,IAAI,KAAsBle,KAAKy6B,UAAYz6B,KAAK2zF,mBACrEz1E,EAAMkH,aAAe,GACrBlH,EAAMmiC,kBAAmB,EACJ,OAAjBj7B,EACA,IAAK,IAAI9tB,EAAI,EAAGsI,EAAKwlB,EAAaj7B,OAAQmN,EAAIsI,IAAMtI,EAAG,CACnD,IAAIjL,EAAU+4B,EAAa9tB,GACJ,iBAAZjL,GAA2C,mBAAZA,EACtC6xB,EAAMqkC,cAAcl2D,GAGpB6xB,EAAMqkC,cAAcl2D,EAAQyjC,KAAMzjC,EAAQoyC,GAElD,CAGJ,OADAytD,EAAmBrM,mBAAqB7/E,KAAKy6B,SACtCmP,EAAWulD,gBAAgBjxE,EAAOguE,EAAoB2B,EAAa/mG,EAC9E,EACiBg1C,EAAW,CACxB+gD,MACDwG,EAEP,CAhCqB,GAiCjBsL,GAAgC,WAChC,SAASA,EAA6Bl0D,EAAUvc,GAC5Cle,KAAKy6B,SAAWA,EAChBz6B,KAAKke,MAAQA,CACjB,CAYA,OAXAywE,EAA6BnxF,UAAU2xF,gBAAkB,SAAUvlD,EAAYsiD,EAAoB2B,EAAa/mG,GAC5G,IAAIo3B,EAAQle,KAAKke,MACjB,OAAIA,EAAMikC,eACCz0D,EAAQD,QAAQywB,EAAMmc,UAEjC6xD,EAAmBrM,mBAAqB7/E,KAAKy6B,SACtCmP,EAAWulD,gBAAgBjxE,EAAOguE,EAAoB2B,EAAa/mG,GAC9E,EAC+Bg1C,EAAW,CACtC+gD,MACD8R,EAEP,CAjBmC,GAkB/BiF,GAAsB,WACtB,SAASA,EAAmB9mC,EAAQ1nC,EAAcuuE,GAC9C3zF,KAAK8sD,OAASA,EACd9sD,KAAKolB,aAAeA,GAAgB,KACpCplB,KAAK2zF,kBAAoBA,GAAqB,EAClD,CA0BA,OAzBAC,EAAmBp2F,UAAU2xF,gBAAkB,SAAUvlD,EAAYsiD,EAAoB2B,EAAa/mG,GAClG,IAAIo3B,EAAQle,KAAKke,MACbkH,EAAeplB,KAAKolB,aACxB,GAAIlH,GAASA,EAAMikC,eACf,OAAOz0D,EAAQD,QAAQywB,EAAMmc,SAIjC,GAFAr6B,KAAKke,MAAQA,EAAQ,IAAI,KAAsBle,KAAKy6B,UAAYz6B,KAAK2zF,mBACrEz1E,EAAM0hC,SAAW,8BAA6B5/C,KAAK8sD,QAC9B,OAAjB1nC,EACA,IAAK,IAAI9tB,EAAI,EAAGsI,EAAKwlB,EAAaj7B,OAAQmN,EAAIsI,IAAMtI,EAAG,CACnD,IAAIjL,EAAU+4B,EAAa9tB,GACJ,iBAAZjL,GAA2C,mBAAZA,EACtC6xB,EAAMqkC,cAAcl2D,GAGpB6xB,EAAMqkC,cAAcl2D,EAAQyjC,KAAMzjC,EAAQoyC,GAElD,CAGJ,OADAytD,EAAmBrM,mBAAqB7/E,KAAKy6B,SACtCmP,EAAWulD,gBAAgBjxE,EAAOguE,EAAoB2B,EAAa/mG,EAC9E,EACqBg1C,EAAW,CAC5B+gD,MACD+W,EAEP,CAhCyB,GAiCrBtQ,GAAsB,WACtB,SAASA,EAAmB9jE,IACF,iBAAXA,GAAwBA,aAAkB,cAAkC,aAAnBA,EAAOL,WACvEK,EAAS,CACLogC,SAAUpgC,IAGlBxf,KAAK4/C,SAAWpgC,EAAOogC,SACvB5/C,KAAKolB,aAAe5F,EAAO4F,cAAgB,GAC3CplB,KAAKmiD,gBAAiB,EACtBniD,KAAKoiD,QAAU,KACfpiD,KAAKy6B,SAAW,WACpB,CAwDA,OAvDA6oD,EAAmB9lF,UAAU2xF,gBAAkB,SAAUvlD,EAAYsiD,EAAoB2B,EAAa/mG,GAClG,IAAIwd,EAAQtE,KACZ,GAAIA,KAAKmiD,eACL,OAAOz0D,EAAQD,QAAQuS,KAAKq6B,SAEhC,IAAIw5D,EAAQ7zF,KAAKolB,aACb6Z,EAAwB,mBAAV40D,EAAuBA,IAAUA,EAGnD,OAFA50D,EAAOA,GAAc,GACrBA,EAAO50C,MAAMkkB,QAAQ0wB,GAAQA,EAAO,CAACA,GAC9BvxC,EAAQkT,IAAIq+B,GAAMtxC,MAAK,SAAUy3B,GACpC,IAIIylB,EAJAld,EAAYic,EAAWjc,UACvBgc,EAAeC,EAAWD,aAC1BolD,EAAenlD,EAAWmlD,aAC1B9pD,EAAgB,IAAI2kD,GAAcjgD,GAElCmqD,EAAS,GACThtG,GACAm+C,EAAczE,aAAa7S,EAAW7mC,GAE1C,IAAK,IAAIkR,EAAK,EAAG+7F,EAAiB3uE,EAAcptB,EAAK+7F,EAAe5pG,OAAQ6N,IAAM,CAC9E,IAAIxO,EAAMuqG,EAAe/7F,GACzB,GAAmB,mBAARxO,EAEsB,QAD7BqhD,EAAW5F,EAAczE,aAAa7S,EAAWnkC,IACpC2hD,aACT2oD,EAAOlqG,KAAKihD,OAGf,KAAIrhD,GAAsB,iBAARA,EAYnB,MAAM,IAAIwhB,MAAM,sDAAuDjkB,cAAcyC,EAAK,MAX1F,IAAK,IAAIiD,KAAOjD,EAAK,CACjB,IAAIwqG,EAAWxqG,EAAIiD,GACK,mBAAbunG,GAEsB,QAD7BnpD,EAAW5F,EAAczE,aAAa7S,EAAWqmE,IACpC7oD,aACT2oD,EAAOlqG,KAAKihD,EAGxB,CAIJ,CACJ,CACA,OAAOn9C,EAAQkT,IAAIkzF,EAAO1xG,KAAI,SAAUm5D,GAAM,OAAOA,EAAGxtB,KAAKJ,EAAW4tB,EAAGz0D,OAAS,KAAI6G,MAAK,WACzF,IAAI0sC,EAA6B,OAAnB/1B,EAAMs7C,SACdmvC,EAAa9C,QAAQ3nF,EAAMs7C,SAAU3a,EAAeinD,GACpD,KAGN,OAFA5nF,EAAM69C,gBAAiB,EACvB79C,EAAM+1B,QAAUA,EACTA,CACX,GACJ,GACJ,EACqByB,EAAW,CAC5B+gD,MACDyG,EAEP,CArEyB,GAuEzB,SAASr+D,GAAOigB,EAAUl+B,GACtB,OAAO3c,MAAMkkB,QAAQvH,GACfk+B,EAAS+wC,WAAWjvE,GAAU,GAC9Bk+B,EAASjgB,OAAOje,GAAU,EACpC,CACA,IAAIitF,GAAiB,CACjBC,OAAQ,SAAUhvD,EAAUl+B,EAAUsW,GAClC,YAAqB1vB,IAAboZ,EACFsW,IACAA,IAAW3vB,MAAK,WAAc,OAAOs3B,GAAOigB,EAAUl+B,EAAW,GAC3E,EACAmtF,KAAM,SAAUjvD,EAAUl+B,EAAUsW,GAChC,YAAqB1vB,IAAboZ,EACFsW,IACA5vB,EAAQkT,IAAI,CAACqkB,GAAOigB,EAAUl+B,GAAWsW,KACnD,EACA82E,MAAO,SAAUlvD,EAAUl+B,EAAUsW,GACjC,OAAO5vB,EAAQD,QAAQy3C,EAASynC,WAAU,IAAOh/E,KAAK2vB,EAC1D,GAGJ,SAASgwD,GAAqBvrE,GAC1B,OAAIA,EAAQsyF,gBAAwD,mBAA/BtyF,EAAQitB,UAAUorB,SAC5C1sD,EAAQD,UAEZsU,EAAQitB,UAAUorB,SAASr4C,EAAQohB,QAAUz1B,EAAQD,SAChE,CACA,IAAI6mG,GAAqB,WACrB,SAASA,EAAkB1qD,EAAYqyC,GACnCj8E,KAAK4pC,WAAaA,EAClB5pC,KAAKi8E,YAAcA,CACvB,CA+HA,OA9HAqY,EAAkB92F,UAAU+wE,MAAQ,SAAUxsE,EAAS6nB,GACnD,IAAI0zD,EAAe2W,GAAelyF,EAAQqrE,YAAc6mB,GAAeG,MACnEG,EAAgBxyF,EAAQmjC,SAAS6lB,SAAS5yD,QAC9C,OAAOmlF,EAAav7E,EAAQmjC,SAAUqvD,GAAe,WACjD,OAAO7mG,EAAQD,QAAQsU,EAAQmjC,SAAS/7C,IAAIygC,IAAOj8B,MAAK,WAChDoU,EAAQqqE,mBACRrqE,EAAQqqE,kBAAkBrgE,QAElC,GACJ,IAAGpe,MAAK,WACAoU,EAAQo6E,gCACRp6E,EAAQo6E,+BAA+B9yE,MAE/C,GACJ,EACAirF,EAAkB92F,UAAUg3F,yBAA2B,SAAUzyF,GAC7D,IAAIuC,EAAQtE,KACZ,OAAOA,KAAK49E,iBAAiB77E,GAASpU,MAAK,SAAUohC,GACjD,OAAIhtB,EAAQi7E,qCACDj7E,EAAQi7E,qCACVW,6BACAhwF,MAAK,WAEN,OADAohC,EAAW0uD,SAAS17E,EAAQzC,gBAAiByC,EAAQyqE,YAC9CloE,EAAMiqE,MAAMxsE,EAASgtB,EAAWnF,KAC3C,IACKj8B,MAAK,WAAc,OAAOohC,CAAY,KAE/CA,EAAW0uD,SAAS17E,EAAQzC,gBAAiByC,EAAQyqE,YAC9CloE,EAAMiqE,MAAMxsE,EAASgtB,EAAWnF,MAAMj8B,MAAK,WAAc,OAAOohC,CAAY,IACvF,GACJ,EACAulE,EAAkB92F,UAAUogF,iBAAmB,SAAU77E,GACrD,IACIijC,EACAhW,EACAstD,EACA5vF,EAJA4X,EAAQtE,KAKZ,OAAOA,KACFmlC,gBAAgBpjC,GAChBpU,KAAK2/E,IACL3/E,MAAK,WACNq3C,EAAiBjjC,EAAQijC,eACzBhW,EAAYjtB,EAAQitB,UACpBstD,EAAoBv6E,EAAQu6E,kBAC5B5vF,EAAI4vF,EAAkB1zD,SACtB,IAAIi0D,EAAev4E,EAAM23E,YAAYa,gBAAgB/6E,EAAQ6nB,MAAQoF,GAIrE,OAHIjtB,EAAQkjC,eACR43C,EAAaE,eAAeh7E,EAAQkjC,cAAco2C,SAE/C3uF,EAAEqhC,KAAKiX,EAAgBs3C,EAAkBtqF,MAAO,KAAM6qF,GAAc,EAC/E,IAAGlvF,MAAK,SAAU+/E,GAAe,OAAOhhF,EAAE4R,OAAO0mC,EAAgB+6C,EAAoBK,QAAQr+E,EAAQ1b,KAAM2oC,EAAW0+C,GAAe,GACzI,EACA4mB,EAAkB92F,UAAU2nC,gBAAkB,SAAUpjC,GACpD,IAAIijC,EAAiBjjC,EAAQijC,eAAkBjjC,EAAQijC,gBAAkBjjC,EAAQ4rB,UAAUmT,cAC3F,GAAiC,iBAAtB/+B,EAAQitB,UAIf,OAHAjtB,EAAQitB,UAAYjtB,EAAQkjC,cACtBljC,EAAQkjC,cAAcsuD,eAAexxF,EAAQitB,WAC7CjtB,EAAQitB,UACPhvB,KAAK4pC,WAAW+lD,wBAAwB5tF,EAAQitB,WAAWrhC,MAAK,SAAU2uF,GAO7E,OANAt3C,EAAexE,aAAa87C,EAAkBtqF,OAC1C+P,EAAQ1b,MACR2+C,EAAexG,iBAAiB,aAAaz8B,EAAQ1b,MAEzD0b,EAAQitB,UAAYgW,EAAehW,UAAYgW,EAAer7C,IAAI2yF,EAAkBtqF,OACpF+P,EAAQu6E,kBAAoBA,EACrBv6E,CACX,IAEJ,IAAIk/B,EAAOl/B,EAAQitB,UAAUnxB,YACzB42F,EAAuC,mBAAtB1yF,EAAQitB,UACzBylE,IACAxzD,EAAOl/B,EAAQitB,UACfgW,EAAexE,aAAaS,IAEhC,IAAIv0C,EAAI,oBAAwB,cAAmBwhG,GAAsBjtD,GAQzE,OAPAv0C,EAAEy+C,YAAcz+C,EAAEy+C,aAAe,kBACjCz+C,EAAEghC,WAAW+mE,EAAUzvD,EAAkBjjC,EAAQ4rB,WAAaqX,EAAiB/D,GAC/El/B,EAAQu6E,kBAAoB,CAAE1zD,SAAUl8B,EAAGsF,MAAOivC,GAC9Cl/B,EAAQ1b,MACR2+C,EAAexG,iBAAiB,aAAaz8B,EAAQ1b,MAEzD2+C,EAAehW,UAAYjtB,EAAQitB,UAAYylE,EAAUzvD,EAAer7C,IAAIs3C,GAAQl/B,EAAQitB,UACrFthC,EAAQD,QAAQsU,EAC3B,EACAuyF,EAAkB92F,UAAUgoC,QAAU,SAAUzjC,GAC5C,IAAIuC,EAAQtE,KACZ+B,EAAQijC,eAAiBjjC,EAAQijC,gBAAkBjjC,EAAQ4rB,UAAUmT,cACrE/+B,EAAQ6nB,KAAO5pB,KAAKi8E,YAAYa,gBAAgB/6E,EAAQ6nB,MACxD,IAAI8qE,EAAc3yF,EAAQijC,eAAer7C,IAAIq9F,GACzChK,EAAuC0X,EAAYzX,aAOvD,OANID,EACAj7E,EAAQi7E,qCAAuCA,EAG/Cj7E,EAAQo6E,+BAAiCuY,EAAYtY,SAErDr6E,EAAQitB,UACDhvB,KAAKw0F,yBAAyBzyF,GAEhCA,EAAQ6nB,MACT7nB,EAAQkjC,eACRljC,EAAQ6nB,KAAKmzD,eAAeh7E,EAAQkjC,cAAco2C,SAE/Ct5E,EAAQ6nB,KAAKulE,gBAAgBnvF,KAAK4pC,WAAY,IAAI+1C,GAA0BhyF,MAAK,SAAU+/E,GAC9F,IAAI1kF,EAAS0kF,EAAYpvE,OAAOyD,EAAQijC,gBAExC,OADAh8C,EAAO0iB,KAAK3J,EAAQ/C,eAAgB+C,EAAQzC,iBACxCyC,EAAQi7E,qCACDj7E,EAAQi7E,qCAAqCW,6BAC/ChwF,MAAK,WAAc,OAAO2W,EAAMiqE,MAAMxsE,EAAS/Y,EAAS,IACxD2E,MAAK,WAAc,OAAO3E,CAAQ,IAEpCsb,EAAMiqE,MAAMxsE,EAAS/Y,GAAQ2E,MAAK,WAAc,OAAO3E,CAAQ,GAC1E,KAEK+Y,EAAQmjC,UACbnjC,EAAQmjC,SAASynC,YACb5qE,EAAQo6E,gCACRp6E,EAAQo6E,+BAA+B9yE,OAEpC3b,EAAQD,QAAQ,OAEpBC,EAAQD,QAAQ,KAC3B,EACoBquC,EAAW,EAC3B,QAAOgzD,GAAY5L,IACpBoR,EAEP,CApIwB,GAoMpBK,GAAc,GAClB,SAASC,GAAcC,EAAkBC,EAAQtrF,GAC7C,IAAIurF,EAAYF,EAAiBlrG,IAAImrG,GAChCC,IACDA,EAAY,GACZF,EAAiBhrG,IAAIirG,EAAQC,IAEjCA,EAAUnrG,KAAK4f,EACnB,CACA,SAASwrF,GAAcD,EAAWj1F,GAI9B,IAHA,IAAIm1F,EAAUn1F,EAASm1F,QACnBC,EAAgBD,EAAQ9qG,OACxB0qG,EAAmB,IAAIhsG,IAClByO,EAAI,EAAGsI,EAAKm1F,EAAU5qG,OAAQmN,EAAIsI,IAAMtI,EAAG,CAIhD,IAHA,IAAIkS,EAASurF,EAAUz9F,GACnB69F,EAAQ3rF,EAAO4rF,WACfxwF,EAAU4E,EAAO6rF,aACZ3vF,EAAI,EAAGouD,EAAKlvD,EAAQza,OAAQub,EAAIouD,IAAMpuD,EAE3C,GAAsB,KADlB1kB,EAAO4jB,EAAQc,IACVknD,SACL,IAAK,IAAIn8B,EAAI,EAAGA,EAAIykE,IAAiBzkE,GAC7BqkE,EAASG,EAAQxkE,IACV6kE,SAASt0G,IAChB4zG,GAAcC,EAAkBC,EAAQtrF,GAKxD,IAAS9D,EAAI,EAAGouD,EAAKqhC,EAAMhrG,OAAQub,EAAIouD,IAAMpuD,EAAG,CAC5C,IAAI1kB,EACJ,GAAsB,KADlBA,EAAOm0G,EAAMzvF,IACRknD,SACL,IAASn8B,EAAI,EAAGA,EAAIykE,IAAiBzkE,EAAG,CACpC,IAAIqkE,KAASG,EAAQxkE,IACV8kE,MAAMv0G,IACb4zG,GAAcC,EAAkBC,EAAQtrF,EAEhD,CAER,CACJ,CACAqrF,EAAiBtrG,SAAQ,SAAUisG,EAAiBV,GAC5CA,EAAOhoE,SAAoC,OAAzBgoE,EAAOxkE,eACzBwkE,EAAO9lE,UAAU8lE,EAAOxkE,eAAeklE,EAE/C,GACJ,EAC2B,WACvB,SAASC,EAAoBC,EAAUjE,EAAUp8F,EAAU25B,EAAWD,EAAYuB,EAAe1vB,GAC7FZ,KAAK01F,SAAWA,EAChB11F,KAAKyxF,SAAWA,EAChBzxF,KAAK3K,SAAWA,EAChB2K,KAAKgvB,UAAYA,EACjBhvB,KAAK+uB,WAAaA,EAClB/uB,KAAKswB,cAAgBA,KAAiBtB,EAAYsB,EAAgB,KAClEtwB,KAAK6wF,cAAgB9hE,EAAWpjB,SAASklF,cACzC7wF,KAAKY,IAAMA,GACNZ,KAAK6wF,eAAiB9hE,EAAWnF,MAAQmF,EAAWnF,KAAKw6D,YAC1DpkF,KAAKokF,YAAcr1D,EAAWnF,KAAKw6D,YAGnCpkF,KAAKokF,YAAc,KAEvBpkF,KAAK6sB,OAAS,KACd7sB,KAAK8sB,SAAU,CACnB,CACA2oE,EAAoBj4F,UAAU4sD,QAAU,SAAUvnE,GAC9C,GAAIA,EAAQunE,QAAQpqD,KAAK01F,UAAW,CAChC,GAAyB,OAArB11F,KAAKokF,YACL,OAAO,EAEX,IAAIA,EAAcpkF,KAAKokF,YACnBj+F,EAAetD,EAAQ2iG,eAC3B,GAAIr/F,GAAgBA,EAAa++F,mBAAoB,CAEjD,IADA,IAAIyQ,EAAUxvG,EAAa++F,mBAClB5tF,EAAI,EAAGsI,EAAK+1F,EAAQxrG,OAAQmN,EAAIsI,IAAMtI,EAC3C,GAAIq+F,EAAQr+F,GAAGguF,cAAgBlB,EAC3B,OAAO,EAGf,OAAO,CACX,CACA,OAAOvhG,EAAQyiG,cAAgBlB,CACnC,CACA,OAAO,CACX,EACAqR,EAAoBj4F,UAAUkO,KAAO,SAAUmhB,GAC3C,GAAI7sB,KAAK8sB,QAAS,CACd,GAAI9sB,KAAK6sB,SAAWA,EAChB,OAEJ7sB,KAAK6sB,OAASA,CAClB,CACA7sB,KAAK8sB,SAAU,EACf,IAAI2kE,EAAWzxF,KAAKyxF,SAChBziE,EAAYhvB,KAAKgvB,UACjBlvB,EAAW2xF,EAASmE,kBACxB,IAAK91F,EAAU,CACXA,EAAW2xF,EAASmE,kBAAoB,4BAA2BZ,IACnE,IAAIjqG,EAAU,CACV05B,WAAW,EACXC,SAAU1kB,KAAK6wF,eAEnB/wF,EAAS0kB,QAAQitE,EAAU1mG,GAC3B+U,EAASm1F,QAAU,EACvB,CAEA,GADAn1F,EAASm1F,QAAQrrG,KAAKoW,MAClBA,KAAK6wF,cAAe,CACpB,IAAIxkG,EAAUolG,EAASvnE,kBACvB,GAAIlqB,KAAKY,IAAK,CACV,IAAIqqE,EAAQj8C,EAAUhvB,KAAK3K,UAO3B,IANK41E,EAIDA,EAAMtpE,OAAO,GAHbspE,EAAQj8C,EAAUhvB,KAAK3K,UAAY,GAKhChJ,GACC2T,KAAKoqD,QAAQ/9D,IACb4+E,EAAMrhF,KAAKyC,EAAQqiC,IAAMriC,EAAQqiC,GAAGK,WAAa1iC,EAAQqiC,GAAGK,WAAWC,UAAY3iC,GAEvFA,EAAUA,EAAQqgE,mBAEK,OAAvB1sD,KAAKswB,eACLtwB,KAAKgvB,UAAUhvB,KAAKswB,eAAeqkE,GAE3C,MAEI,KAAOtoG,GAAS,CACZ,GAAI2T,KAAKoqD,QAAQ/9D,GAAU,CACvB,IAAI2F,EAAQ3F,EAAQqiC,IAAMriC,EAAQqiC,GAAGK,WAAa1iC,EAAQqiC,GAAGK,WAAWC,UAAY3iC,EACpF2T,KAAKgvB,UAAUhvB,KAAK3K,UAAYrD,EACL,OAAvBgO,KAAKswB,eACLtwB,KAAKgvB,UAAUhvB,KAAKswB,eAAet+B,GAEvC,KACJ,CACA3F,EAAUA,EAAQqgE,kBACtB,CAER,CACJ,EACA+oC,EAAoBj4F,UAAU83F,SAAW,SAAUzyG,GAC/C,GAAImd,KAAKoqD,QAAQvnE,GAAU,CACvB,IAAImP,EAAQnP,EAAQ6rC,IAAM7rC,EAAQ6rC,GAAGK,WAAalsC,EAAQ6rC,GAAGK,WAAWC,UAAYnsC,EACpF,GAAImd,KAAKY,IAAK,CACV,IAAIqqE,EAASjrE,KAAKgvB,UAAUhvB,KAAK3K,YAAc2K,KAAKgvB,UAAUhvB,KAAK3K,UAAY,IAC3EhI,EAAQ49E,EAAM1kF,QAAQyL,GAI1B,OAHe,IAAX3E,GACA49E,EAAMtpE,OAAOtU,EAAO,IAEjB,CACX,CACmB2S,KAAKgvB,UAAUhvB,KAAK3K,YAClBrD,IACjBgO,KAAKgvB,UAAUhvB,KAAK3K,UAAY,KAC5B2K,KAAK8sB,SAAkC,OAAvB9sB,KAAKswB,eACrBtwB,KAAKgvB,UAAUhvB,KAAKswB,eAAet+B,GAG/C,CACA,OAAO,CACX,EACAyjG,EAAoBj4F,UAAU+3F,MAAQ,SAAU1yG,GAC5C,GAAImd,KAAKoqD,QAAQvnE,GAAU,CACvB,IAAImP,EAAQnP,EAAQ6rC,IAAM7rC,EAAQ6rC,GAAGK,WAAalsC,EAAQ6rC,GAAGK,WAAWC,UAAYnsC,EACpF,GAAImd,KAAKY,IAAK,CACV,IAAIqqE,EAASjrE,KAAKgvB,UAAUhvB,KAAK3K,YAAc2K,KAAKgvB,UAAUhvB,KAAK3K,UAAY,IAC/E,GAAsB,MAAlB2K,KAAK01F,SAEL,OADAzqB,EAAMrhF,KAAKoI,IACJ,EAIX,IAFA,IAAI3E,EAAQ,EACRg0E,EAAOx+E,EAAQgzG,uBACZx0B,GACCrhE,KAAKoqD,QAAQiX,IACbh0E,IAEJg0E,EAAOA,EAAKw0B,uBAGhB,OADA5qB,EAAMtpE,OAAOtU,EAAO,EAAG2E,IAChB,CACX,CACAgO,KAAKgvB,UAAUhvB,KAAK3K,UAAYrD,EAC5BgO,KAAK8sB,SAAkC,OAAvB9sB,KAAKswB,eACrBtwB,KAAKgvB,UAAUhvB,KAAKswB,eAAet+B,EAE3C,CACA,OAAO,CACX,EACAyjG,EAAoBj4F,UAAUuO,OAAS,WACnC,GAAK/L,KAAK8sB,QAAV,CAGA9sB,KAAK8sB,SAAU,EACf9sB,KAAK6sB,OAAS,KACd,IAAIipE,EAAgB91F,KAAKyxF,SAASmE,kBAClC,GAAIE,EAAe,CACf,IAAIb,EAAUa,EAAcb,QAC5B,GAAIA,GAAWA,EAAQ9qG,OAAQ,CAC3B,IAAI4pB,EAAMkhF,EAAQ1uG,QAAQyZ,OACb,IAAT+T,GACAkhF,EAAQtzF,OAAOoS,EAAK,GAED,IAAnBkhF,EAAQ9qG,SACR2rG,EAAclxE,aACd5kB,KAAKyxF,SAASmE,kBAAoB,KAE1C,CACI51F,KAAK6wF,gBACL7wF,KAAKgvB,UAAUhvB,KAAK3K,UAAY,KAExC,CAnBA,CAoBJ,CAEJ,CAxK0B,GAuL1B,SAASw1C,GAASkrD,GACd,OAAO,SAAUjvG,GAC8B,iBAArBivG,GAAiC3qG,OAAO81C,eAAe60D,KAAsB3qG,OAAOoS,UAEtG1W,EAAOm3F,UAAY8X,EAGnB,YAAgB,cAAmBA,EAAkBjvG,EAE7D,CACJ,CAYA,SAASkvG,GAAc5sG,GACnB,OAAO,SAAUtC,GACL,oBAAwB,cAAmBonG,GAAsBpnG,GACvEqkD,YAAc0mD,GAAqBzoG,EAAM,iBAC/C,CACJ,CACA,SAAS6sG,GAAgB7sG,EAAMihF,EAAoB+mB,GAC/C,OAAO,SAAUtqG,GACb,IAAIqxC,EAAI,oBAAwB,cAAmB+1D,GAAsBpnG,GACzEqxC,EAAE1W,cAAgBowE,GAAqBzoG,EAAM,oBAC7C+uC,EAAEu4D,4BAA8BrmB,EAChClyC,EAAEi5D,QAAUA,CAChB,CACJ,CACA,SAASoB,GAAmB1rG,GACxB,IAAImpC,EAAO,SAAUO,GACT,oBAAwB,cAAmB09D,GAAsB19D,GACvEy8D,cAAe,CACrB,EACA,OAAOnmG,EAASmpC,EAAKnpC,GAAUmpC,CACnC,CACA,SAASimE,GAASC,EAAsB1pG,EAAKuQ,GACzC,IAAIizB,EAAO,SAAUnpC,EAAQsvG,EAAMC,GAC/B,IAAIC,EAAeF,EAAOtvG,EAAO+W,YAAc/W,EAC3CqxC,EAAI,oBAAwB,cAAmB+1D,GAAsBoI,GAOzE,OALIF,KACAD,EAAuBA,GAAwB,CAAC,GAC3B/sG,KAAOgtG,GAEzB,IAAIjU,EAAiBgU,GAChB9T,aAAaiU,EAAcn+D,EAAGk+D,EAC9C,EACA,IAAKF,EACD,OAAOlmE,EAEX,GAAIxjC,EAAK,CACL,IAAI3F,EAASqvG,EAEb,OADAA,EAAuB,KAChBlmE,EAAKnpC,EAAQ2F,EAAKuQ,EAC7B,CACA,OAAOizB,CACX,EA7E6B,WACzB,SAASsmE,IACT,CACAA,EAAsB/4F,UAAUkwB,WAAa,SAAUC,EAAW7mC,GAAU,EAC5EyvG,EAAsB/4F,UAAUowB,SAAW,SAAUC,EAAUzkC,GAAQ,EACvEmtG,EAAsB/4F,UAAUuwB,KAAO,SAAUJ,EAAW7mC,GACxD,IAAI04B,EAAS,IAAI14B,EACE6mC,EAAUhkC,IAAI,MACpBu1B,sBAAsBM,EACvC,CAEJ,CAX4B,GAqF5B,IAAIg3E,GAA0B,CAAEnqE,KAAM,QACtC,SAASoqE,GAAaC,GAClB,IAAI3rG,EAAqC,mBAApB2rG,GAAmCA,EAElDA,EADAF,GAEFvmE,EAAO,SAAUO,GACjB,IAAI2H,EAAI,oBAAwB,cAAmB+1D,GAAsB19D,GACzE2H,EAAEwgD,iBAAkB,EACpBxgD,EAAEw4D,iBAAmB5lG,CACzB,EACA,MAAkC,mBAApB2rG,EAAiCzmE,EAAKymE,GAAmBzmE,CAC3E,CA6BA,SAASiwD,GAAcp5F,GACnB,IAAImpC,EAAO,SAAUO,GACT,oBAAwB,cAAmB09D,GAAsB19D,GACvE0vD,eAAgB,CACtB,EACA,OAAOp5F,EAASmpC,EAAKnpC,GAAUmpC,CACnC,CACA,SAAS0mE,GAAgB5sG,GACrB,OAAO,SAAUjD,GACb,YAAgBo8F,EAAYK,wBAAyBx5F,EAAUjD,EACnE,CACJ,CACA,SAAS8vG,GAAQ75E,GACb,OAAO45E,GAAgB,IAAIvT,GAAqBrmE,GACpD,CACA,SAAS85E,GAAW/pC,EAAQ1nC,EAAcuuE,GACtC,OAAOgD,GAAgB,IAAI/C,GAAmB9mC,EAAQ1nC,EAAcuuE,GACxE,CACA,SAASmD,GAAOC,EAAsBpD,GAClC,IAAI7sG,EACAs+B,EACgC,mBAAzB2xE,EACPjwG,EAASiwG,GAGT3xE,EAAe2xE,EACfjwG,OAAS8G,GAEb,IAAIqiC,EAAO,SAAUO,GACjB,YAAgB0yD,EAAYK,wBAAyB,IAAIF,GAAej+D,EAAcuuE,GAAoBnjE,EAC9G,EACA,OAAO1pC,EAASmpC,EAAKnpC,GAAUmpC,CACnC,CAsBA,IAAI+mE,GAAoB,WACpB,SAASA,EAAiBrpE,EAAWqhE,EAAgBD,EAActqD,GAC/DzkC,KAAKi3F,WAAatpE,EAClB3tB,KAAKk3F,gBAAkBlI,EACvBhvF,KAAKm3F,cAAgBpI,EACrB/uF,KAAKo3F,mBAAqB3yD,EAC1B9W,EAAU6Q,iBAAiBqpD,EAAUA,EAASj8F,SAAW,IAAIi8F,EACjE,CAyBA,OAxBAmP,EAAiBx5F,UAAU65F,kBAAoB,SAAUrgB,GACrDh3E,KAAKi3F,WAAWr2D,WAAWinD,GAC3B7nF,KAAKi3F,WAAWz4D,iBAAiBqpD,EAAUA,EAASj8F,SAAWorF,EACnE,EACAggB,EAAiBx5F,UAAUgoC,QAAU,SAAUzjC,GAC3C,OAAO/B,KAAKo3F,mBAAmB5xD,QAAQzjC,EAC3C,EACAi1F,EAAiBx5F,UAAUovC,QAAU,SAAUM,GACvCA,aAAuB,eACvBA,EAAc,CAAErqD,QAASqqD,IAE7B,IAAIoqD,EAAuB,CAAEC,eAAgB,IACzCl0D,EAAY6J,EAAY7J,WAAarjC,KAAKi3F,WAAWttG,IAAIigG,IAC7D5pF,KAAKm3F,cAAchL,aAAaj/C,EAAYrqD,QAASwgD,EAAWi0D,EAAsBpqD,EAAYrqD,QAAQuD,WAAY,QAAQ,GAC9H,IAAIi0C,EAAU,IAAI2wD,EAAY99C,EAAYrqD,QAASy0G,EAAsBj0D,GACrE1V,EAAYuf,EAAYvf,WAAa3tB,KAAKi3F,WAAWn2D,cACrDlX,EAAOyQ,EAAQ/7B,OAAOqvB,EAAWoyD,EAAoBnzC,WAKzD,OAJAhjB,EAAKle,KAAKwhC,EAAYluC,gBAAkB,CAAC,EAAGkuC,EAAY5tC,iBACxDsqB,EAAKK,WAAaL,EAAKs9D,UAAYt9D,EAAKizB,SACxCjzB,EAAKizB,SAAW,8BAChBjzB,EAAKojB,WACEpjB,CACX,EACAotE,EAAiB/qE,OAAS,CAAC,KAAWkiE,GAAgBpC,GAAcuI,IAC7D0C,CACX,CAjCuB,yPC9sInBh9C,EAAgB,SAAStpB,EAAG15B,GAI5B,OAHAgjD,EAAgB5uD,OAAOmT,gBAClB,CAAEC,UAAW,cAAgBnU,OAAS,SAAUqmC,EAAG15B,GAAK05B,EAAElyB,UAAYxH,CAAG,GAC1E,SAAU05B,EAAG15B,GAAK,IAAK,IAAI8kB,KAAK9kB,EAAO5L,OAAOoS,UAAUjO,eAAeyO,KAAKhH,EAAG8kB,KAAI4U,EAAE5U,GAAK9kB,EAAE8kB,GAAI,EAC7Fk+B,EAActpB,EAAG15B,EAC5B,EAEA,SAASijD,EAAUvpB,EAAG15B,GAClB,GAAiB,mBAANA,GAA0B,OAANA,EAC3B,MAAM,IAAIqH,UAAU,uBAAyBkT,OAAOva,GAAK,iCAE7D,SAASkjD,IAAOl6C,KAAKnC,YAAc6yB,CAAG,CADtCspB,EAActpB,EAAG15B,GAEjB05B,EAAElzB,UAAkB,OAANxG,EAAa5L,OAAOkT,OAAOtH,IAAMkjD,EAAG18C,UAAYxG,EAAEwG,UAAW,IAAI08C,EACnF,CAEA,IAAIs9C,EAAa,SAAU9lC,EAAQ9nC,EAAM6tE,EAAiBrvF,GACtDwhB,EAAK5qB,eAAe0yD,EAAOsZ,OAAS5iE,EAAWqvF,IAC/C,QAAsB7tE,EAAKtqB,gBAAiBm4F,EAAiBrvF,EAAWje,OAC5E,EACIutG,EAAoB,SAAUhmC,EAAQ9nC,EAAMv8B,EAAOsqG,GACnD,IAAI1sB,EAAQvZ,EAAOuZ,MACf/lC,EAAWwsB,EAAOxsB,UACtB,QAAsBtb,EAAKtqB,gBAAiBjS,EAAO49E,EAAM9gF,QACzDy/B,EAAK5qB,eAAe0yD,EAAOsZ,OAASC,EAAM59E,GACtCsqG,GACAzyD,EAAS6lB,SAASnhE,KAAKs7C,EAAS6lB,SAAS7gD,SACzCwnD,EAAOkmC,iBAAiBC,aAAajuE,EAAM8nC,EAAOomC,kBAGlD5yD,EAAS6lB,SAAS5gD,QAAQ+6B,EAAS6lB,SAASppD,QAAQ,EAAG,GAAG,IAC1D+vD,EAAOkmC,iBAAiBG,cAAcnuE,EAAM8nC,EAAOsmC,aAE3D,EACIC,EAAuB,SAAUC,EAAgBC,GACjD,OAAOC,EAAWF,EAAiBC,GAAc,CACrD,EACIE,EAAW12G,KAAKsE,IAChBqyG,EAAW32G,KAAKC,IAChB22G,EAAW52G,KAAKE,IAChB22G,EAAa72G,KAAKG,MAClBs2G,EAAaz2G,KAAK6yC,MAClBikE,EAASrkE,MAETskE,EAAM/zG,SACNg0G,EAAcD,EAAI9zG,gBAClBg0G,EAAOjyC,sBAAsBj7C,KAAKzqB,QAElC43G,EAAqB,SAAUh2G,GAE/B,IADA,IAAIwJ,EAAUxJ,EAAQuD,WACH,OAAZiG,GAAoBA,IAAYssG,GAAa,CAChD,GAAIG,EAAkBzsG,GAClB,OAAOA,EAEXA,EAAUA,EAAQjG,UACtB,CACA,OAAOsyG,EAAIK,kBAAoBJ,CACnC,EACIK,EAAoC,SAAUn2G,GAC9C,IAAIo2G,EAAMp2G,EAAQD,wBACdyB,EAAYpD,OAAOqD,YACnByB,EAAY4yG,EAAY5yG,UACxBlC,EAAMo1G,EAAIp1G,IAAMQ,EAAY0B,EAChC,OAAOyyG,EAAW30G,EACtB,EACIi1G,EAAoB,SAAUj2G,GAC9B,IAAImS,EAAQ/T,OAAO6D,iBAAiBjC,GACpC,OAAOmS,IAA8B,WAApBA,EAAM7P,WAA6C,WAAnB6P,EAAM/P,UAA6C,SAApB+P,EAAM7P,WAA2C,SAAnB6P,EAAM/P,SACxH,EACIi0G,EAAiB,SAAUr2G,GAE3B,IADA,IAAI4I,EAAS,GACJuM,EAAK,EAAGA,EAAK9N,UAAUC,OAAQ6N,IACpCvM,EAAOuM,EAAK,GAAK9N,UAAU8N,GAK/B,IAHA,IAAImhG,EAAel4G,OAAO6D,iBAAiBjC,GACvCmP,EAAQ,EACRonG,EAAa,EACR9hG,EAAI,EAAGsI,EAAKnU,EAAOtB,OAAQyV,EAAKtI,IAAKA,EAC1C8hG,EAAatgF,WAAWqgF,EAAa1tG,EAAO6L,KAC5CtF,GAASymG,EAAOW,GAAc,EAAIA,EAEtC,OAAOpnG,CACX,EACIqnG,EAAkB,SAAUx2G,GAG5B,OAFaA,EAAQD,wBAAwBU,OACnC41G,EAAer2G,EAAS,YAAa,eAEnD,EAMIy2G,EAAmB,SAAU1vE,EAAM2vE,GACnCA,EAAanzG,WAAWklE,aAAa1hC,EAAKs9D,UAAWqS,EACzD,EACIC,EAAsB,SAAU9oG,EAAOD,GACvC,IAAInL,EAAeoL,EAAMpL,aACrBm0G,EAAiB/oG,EAAM5M,UAC3B,OAAqB,OAAjBwB,GAAyBA,IAAiBmL,EACnCgpG,EAGHn0G,EAAakL,SAASC,GACfgpG,EAAiBhpG,EAAO3M,UAGxB21G,EAAiBD,EAAoBl0G,EAAcmL,EAGtE,EAEIipG,EAA8B,SAAUp/C,GAExC,SAASo/C,IACL,OAAkB,OAAXp/C,GAAmBA,EAAOvyC,MAAM/H,KAAM9V,YAAc8V,IAC/D,CAkVA,OArVAi6C,EAAUy/C,EAA4Bp/C,GAItCo/C,EAA2Bl8F,UAAUm8F,eAAiB,SAAUjoC,GAC5D,IAAIpyD,GAAkB,QAA0BoyD,EAAQA,EAAOuZ,MAAM,GAAI,EAAG,GAC5E,OAAOvZ,EAAO+f,QAAQnyE,EAAgBN,eAAgBM,EAC1D,EACAo6F,EAA2Bl8F,UAAUsJ,MAAQ,SAAUmkE,GACnD,OAAOA,EAAM9gF,MACjB,EACAuvG,EAA2Bl8F,UAAUo8F,gBAAkB,SAAUloC,EAAQuZ,GACrE,IAAI4uB,EAAY5uB,EAAM9gF,OACtB,KAAM0vG,EAAY,GACd,OAAO,EAEX,IAAIC,EAAepoC,EAAOqoC,kBACtBC,EAAoBtoC,EAAOggB,YAC3BmoB,EAAY,GAA2B,IAAtBG,GACjBh6F,KAAK25F,eAAejoC,GAExB,IAAIuoC,EAAYvoC,EAAOuoC,YACnB9B,EAAakB,EAAgBY,EAAUhwE,YAC3C,GAAmB,IAAfkuE,EACA,OAAO,EAEXzmC,EAAOymC,WAAaA,EACpB,IAAI+B,EAAmBJ,EAAax2G,OAEpC,OADAouE,EAAOyoC,iBAAmBlC,EAAqBiC,EAAkB/B,GAC1D,CACX,EACAuB,EAA2Bl8F,UAAU48F,WAAa,SAAU1oC,GACpDA,EAAOuZ,MAAM9gF,OAASunE,EAAOyoC,kBAC7BzoC,EAAO2oC,QAAQ,GAAG,EAAMr6F,KAAKs6F,aAAa5oC,EAAQA,EAAO6oC,kBAAkB,EAEnF,EACAb,EAA2Bl8F,UAAUg9F,aAAe,SAAU9oC,EAAQooC,GAClE,IAAI9B,EAActmC,EAAOsmC,YACrByC,EAAa/oC,EAAO+oC,WACpBtC,EAAazmC,EAAOymC,WACpBuC,EAAgB,EAEpB,GAD6BZ,EAAaa,WAAahC,EAC3B,CACxB,IAAIiC,EAAoBpB,EAAoBxB,EAAayC,GACrDI,EAAoBf,EAAaz1G,UACrCq2G,EAAgBpC,EAAS,EAAGuC,EAAoBxC,EAASuC,GAC7D,MAEIF,EAAgBp2G,YAAcotE,EAAOopC,cAEzC,IAAIC,EAA0C,EAA1BrpC,EAAOyoC,iBACvBa,EAAoB1C,EAAS,EAAGH,EAAa,EAAIC,EAAWsC,EAAgBvC,GAAc,GAC1F8C,EAAmB1C,EAAS7mC,EAAOuZ,MAAM9gF,OAAS,EAAG6wG,GAAqBD,EAAgB,IAE9F,MAAO,CADPC,EAAoB1C,EAAS,EAAGC,EAASyC,EAAmBC,GAAoBF,EAAgB,KACrEE,EAC/B,EACAvB,EAA2Bl8F,UAAU09F,cAAgB,SAAUxpC,EAAQypC,GACnE,IAAIhD,EAAazmC,EAAOymC,WACpB0B,EAAYnoC,EAAOuZ,MAAM9gF,OAC7BunE,EAAO0pC,gBAAkBD,EAAahD,EACtCzmC,EAAO2pC,oBAAsBxB,EAAYsB,EAAazpC,EAAOggB,aAAeymB,EAC5EzmC,EAAO4pC,sBAAqB,EAChC,EACA5B,EAA2Bl8F,UAAU+9F,UAAY,SAAU7pC,EAAQypC,GAE/D,OADgBzpC,EAAOuZ,MAAM9gF,OACV,GACbgxG,EAAazpC,EAAO8pC,YAE9B,EACA9B,EAA2Bl8F,UAAU88F,aAAe,SAAU5oC,EAAQj9B,GAClE,IAAIolE,EAAYnoC,EAAOuZ,MAAM9gF,OAC7B,OAAsB,IAAfsqC,GAEDolE,EAAY,GACRplE,EAAaolE,EAAY,EAAInoC,EAAO8pC,YAElD,EACA9B,EAA2Bl8F,UAAU6yE,gBAAkB,SAAU3e,EAAQuZ,EAAOnN,GACxE99D,KAAKsxE,qBAAqB5f,EAAQuZ,EAAOnN,IACzC99D,KAAKy7F,WAAW/pC,EAAQA,EAAOymC,WAAsC,EAA1BzmC,EAAOyoC,iBAAsBlvB,EAAM9gF,OAAQunE,EAAO4d,OAErG,EACAoqB,EAA2Bl8F,UAAUs0E,gBAAkB,SAAUpgB,EAAQjxD,EAAOgG,GAC5EzG,KAAK07F,gCAAgChqC,EAAQjxD,EAAOgG,EACxD,EACAizF,EAA2Bl8F,UAAU8zE,qBAAuB,SAAUhB,EAASrF,EAAOkwB,GAClF,IAAIzpC,EAAS4e,EACTqrB,EAAgB1wB,EAAM9gF,OAC1B,GAAsB,IAAlBwxG,EAIA,OAHAjqC,EAAO6f,gBAAe,GAAM,GAC5B7f,EAAOkqC,mBACPlqC,EAAOqgB,gBAAkBrgB,EAAOsgB,aAAUpkF,GACnC,EAIX,IAFA,IAAIiuG,EAA4C,EAA1BnqC,EAAOyoC,iBACzB2B,EAAiBpqC,EAAOggB,YACrBoqB,EAAiBH,GACpBG,IACApqC,EAAOigB,WAAWmqB,GAAgB,GAAM,GAE5C,KAAOA,EAAiBD,GACpBC,IACApqC,EAAOigB,WAAWmqB,GAAgB,GAAM,GAE5CA,EAAiBvD,EAASuD,EAAgBD,GAC1C,IAAI7wB,EAAQtZ,EAAOsZ,MAEfmwB,EAAaW,EADDH,EAAgB,IAE5BR,EAAa7C,EAAS,EAAGqD,EAAgBG,IAE7CpqC,EAAO4d,OAAS6rB,EAChB,IAAK,IAAI7jG,EAAI,EAAGA,EAAIwkG,EAAgBxkG,IAAK,CACrC,IAAIykG,EAAYzkG,EAAI6jG,EAChBvxE,EAAO8nC,EAAO9nC,KAAKtyB,GACnB+hB,EAAO0iF,IAAcJ,EAAgB,EACrC/pB,EAAuB,IAAdmqB,IAAoB1iF,EAC7Bra,EAAiB4qB,EAAK5qB,eACtBM,EAAkBsqB,EAAKtqB,gBAC3B,GAAIN,EAAegsE,KAAWC,EAAM8wB,IAC7Bz8F,EAAgB+vE,SAAW0sB,GAC3Bz8F,EAAgBkwE,UAAYoC,GAC5BtyE,EAAgBiwE,QAAUl2D,EAHjC,CAMAra,EAAegsE,GAASC,EAAM8wB,GAC9Bz8F,EAAgBgwE,OAAuB,IAAdysB,EACzBz8F,EAAgBkwE,QAAUoC,EAC1BtyE,EAAgBiwE,MAAQl2D,EACxB/Z,EAAgB+vE,OAAS0sB,EACzB,IAAIC,EAAMD,EAAY,GAAM,EAC5Bz8F,EAAgBmwE,KAAOusB,EACvB18F,EAAgBowE,OAASssB,EACzBtqC,EAAOmgB,eAAejoD,EATtB,CAUJ,CACA,IAAIxjB,EAAYmyF,EAASsD,EAAiBF,GAC1C,IAASrkG,EAAIwkG,EAAgBxkG,EAAI8O,EAAW9O,IACpCgI,GAAkB,QAA0BoyD,EAAQuZ,EAAM3zE,GAAIA,EAAGqkG,GACrEjqC,EAAO+f,QAAQnyE,EAAgBN,eAAgBM,GAEnD,OAAO,CACX,EACAo6F,EAA2Bl8F,UAAUk+F,gCAAkC,SAAUprB,EAAS7vE,EAAOgG,GAC7F,IAAInC,EAAQtE,KACR0xD,EAAS4e,EACb,GAAI5e,EAAOqgB,gBAAX,CACI,IAAK,IAAIz6E,EAAI,EAAGsI,EAAK6G,EAAQtc,OAAQmN,EAAIsI,IAAMtI,EAAG,CAC9C,IAAI+jC,EAAK50B,EAAQnP,GAAIjK,EAAQguC,EAAGhuC,MAAOuX,EAAUy2B,EAAGz2B,QAASC,EAAaw2B,EAAGx2B,YAC7E,QAAY6sD,EAAOqgB,gBAAiB1kF,EAAOuX,EAASC,EACxD,CACA6sD,EAAOsgB,QAAUvxE,EAAMtI,MAAM,EAEjC,KAPA,CAQA,GAAqB,IAAjBsI,EAAMtW,OAIN,OAHAunE,EAAO6f,gBAAe,GAAM,GAC5B7f,EAAOkqC,wBACPlqC,EAAOqgB,gBAAkBrgB,EAAOsgB,aAAUpkF,GAG9C,IAAIqkF,EAAejyE,KAAKkyE,YAAYxgB,EAAQjxD,EAAMtI,MAAM,GAAIsO,GAC5D,GAAIwrE,aAAwBvkF,EAAS,CACjC,IAAIykF,EAAkBzgB,EAAOqgB,gBAAkB,GAC3CK,EAAqB,WAChBD,EAAgBhoF,QAIHma,EAAM4tE,YAAYxgB,EAAQA,EAAOsgB,QAASG,IAAoBzkF,EAAQD,WAC5EE,KAAKykF,GAJb1gB,EAAOqgB,gBAAkBrgB,EAAOsgB,aAAUpkF,CAKlD,EACAqkF,EAAatkF,KAAKykF,EACtB,CAnBA,CAoBJ,EACAsnB,EAA2Bl8F,UAAU00E,YAAc,SAAUxgB,EAAQuqC,EAAUx1F,GAC3E,IAGI9E,EAHAw5F,EAAazpC,EAAO4d,OACpB4sB,EAAoB,EACpBC,EAAkB,EAElB7kG,EAAI,EACJ8kG,EAAc31F,EAAQtc,OACtBkyG,EAAeJ,EAAS9xG,OACxBmyG,GAAuB,EAC3B,IAAKhlG,EAAI,EAAG8kG,EAAc9kG,EAAGA,IAIzB4kG,GAFIK,GADJ56F,EAAS8E,EAAQnP,IACSsN,QAAQza,OAGlCgyG,GAFIt3F,EAAalD,EAAOkD,WAGpB03F,IAAiB13F,IACjBy3F,GAAuB,GAG/B,GAAIA,EAAJ,CACI,IAAI7nE,EAAYi9B,EAAO6oC,gBACvB,IAAKjjG,EAAI,EAAG8kG,EAAc9kG,EAAGA,IAEzB,IAAK,IAAImgG,GADT91F,EAAS8E,EAAQnP,IACiBjK,MAAOoqG,EAAkB91F,EAAOtU,MAAQsU,EAAOkD,WAAY4yF,IACzF,GAAIA,GAAmB0D,GAAc1D,GAAmBhjE,EAAW,CAC/D,IAAIuxD,EAAYyR,EAAkB0D,EAC9B77F,GAAkB,QAA0BoyD,EAAQuqC,EAASxE,GAAkBA,EAAiB4E,GACpG3qC,EAAOigB,WAAWqU,GAAW,GAAM,GACnCt0B,EAAO0f,WAAW4U,EAAW1mF,EAAgBN,eAAgBM,EACjE,CAIZ,KAdA,CAeA,IAAIk9F,EAA0BrB,EAC1BhD,EAAazmC,EAAOymC,WACpBsE,EAAeJ,EAAeH,EAAoBC,EAClDO,EAAgBhrC,EAAOggB,YACvBirB,EAAeD,EACnB,GAAqB,IAAjBD,GAAqC,IAAftE,EAGtB,OAFAzmC,EAAOkqC,wBACPlqC,EAAOsjB,eAGX,IAAI4nB,EAAsE,IAAtBV,GAC7CC,EAAkB,GAClB11F,EAAQ5O,OAAM,SAAU8J,GAAU,OAAOA,EAAOtU,OAAS8tG,CAAY,IAC5E,GAAIyB,EAA+C,CAC/ClrC,EAAO4d,OAAS6rB,EAAagB,EAAkB,EAC/CzqC,EAAO0pC,iBAAmBe,EAAkBhE,EAC5CzmC,EAAOmrC,eACP,IACIC,GADAhD,EAAepoC,EAAOqoC,mBACa11G,UACnC04G,EAAsBvD,EAAoB9nC,EAAOsmC,YAAa8B,EAAaa,UAC3EqC,EAAkB1E,EAAS,EAA2B,IAAxBwE,EAC5B,EACCA,EAAsBC,GACzBE,EAA0D,IAApBD,EACpC,EACA5E,EAAW4E,EAAkB7E,GACnC,GAAI2E,EAAsBC,GACnBE,IAAwC9B,EAI3C,OAHAzpC,EAAO4pC,sBAAqB,GAC5B5pC,EAAO+oC,WAAWp2G,UAAY24G,EAAkBb,EAAkBhE,OAClEn4F,KAAKy7F,WAAW/pC,EAAQymC,EAAYwE,EAAcN,EAAclB,EAGxE,CACA,IAAIZ,EAAgB7oC,EAAO6oC,gBAG3B,GAFsCmC,EAAgBhrC,EAAOyoC,kBACtD1zF,EAAQ5O,OAAM,SAAU6M,GAAK,OAAOA,EAAErX,MAAQktG,CAAe,IAEhE7oC,EAAO2pC,mBAAqB/C,EAAS,EAAG+D,EAAelB,EAAauB,GAAiBvE,EACrFzmC,EAAO4pC,sBAAqB,OAE3B,CACD,IAAI4B,EAA+C,EAA1BxrC,EAAOyoC,iBAChC,GAA2B,IAAvB+C,EAA0B,CAC1B,IAAIpD,EAAepoC,EAAOqoC,kBACtBI,EAAmBlC,EAAqB6B,EAAax2G,OAAQ60G,GACjEzmC,EAAOyoC,iBAAmBA,EAC1B+C,EAAwC,EAAnB/C,CACzB,CACA,IAAK7iG,EAAI,EAAG8kG,EAAc9kG,IAAKA,EAAG,CAC9B,IAAI+jC,EAAK50B,EAAQnP,GAAIuN,EAAaw2B,EAAGx2B,WAAY03F,EAAelhE,EAAGz2B,QAAQza,OAEvEqyG,EAF6FnhE,EAAGhuC,QAGhGmvG,EAA0BlE,EAAS,EAAGkE,GAFxBD,EAAe13F,IAIrC,CACA83F,EAAe,EACXN,GAAgB3qC,EAAOyoC,kBACvBqC,EAA0B,EAC1BG,EAAeN,GAGXA,GAAgBa,GAChBP,EAAeN,EACfG,EAA0B,GAG1BG,EAAeO,EAGvB,IAAIC,EAAwBd,GAAgBG,EACtCA,EACA,EACFY,EAAiBT,EAAeD,EACpC,GAAIU,EAAiB,EACjB,IAAK9lG,EAAI,EAAG8lG,EAAiB9lG,IAAKA,EAC1BmgG,EAAkB+E,EAA0BE,EAAgBplG,EAC5DgI,GAAkB,QAA0BoyD,EAAQuqC,EAASxE,GAAkBA,EAAiBwE,EAAS9xG,QAC7GunE,EAAO+f,QAAQnyE,EAAgBN,eAAgBM,OAGlD,CACD,IAAIM,EAAKy4F,EAAS+E,GAClB,IAAK9lG,EAAI,EAAGsI,EAAKtI,IAAKA,EAClBo6D,EAAOigB,WAAWgrB,GAAc,GAAM,EAE9C,CACA,IAAIU,EAAwB/E,EAAS,EAAG+D,EAAec,EAAwBR,GAC/EjrC,EAAO4d,OAASktB,EAChB9qC,EAAO0pC,gBAAkB+B,EAAwBhF,EACjDzmC,EAAO2pC,mBAAqBgC,EAAwBlF,EACpDzmC,EAAO4pC,sBAAqB,EAChC,CACAt7F,KAAKy7F,WAAW/pC,EAAQymC,EAAYwE,EAAcN,EAAcG,EA9FhE,CA+FJ,EACA9C,EAA2Bl8F,UAAU8/F,eAAiB,SAAU5rC,EAAQud,GAOpE,IANA,IAKIrlD,EAJA2zE,EADQ7rC,EAAOxsB,SAAS6lB,SACL5gE,OACnBie,EAAaspD,EAAOuZ,MACpBuyB,EAAQpF,EAAW1mC,EAAO0pC,gBAAkB1pC,EAAOymC,YACnDV,EAAkB,EAEf8F,EAAatuB,IAAcA,EAC9BwoB,EAAkBxoB,EAAauuB,EAC/B5zE,EAAO8nC,EAAO9nC,KAAKqlD,GACnBuoB,EAAW9lC,EAAQ9nC,EAAM6tE,EAAiBrvF,GAC1CspD,EAAOmgB,eAAejoD,EAE9B,EACA8vE,EAA2Bl8F,UAAUigG,UAAY,SAAU/rC,GACvD1xD,KAAKy7F,WAAW/pC,EAAQA,EAAOymC,WAAYzmC,EAAOggB,YAAahgB,EAAOuZ,MAAM9gF,OAAQunE,EAAOgsC,iBAC/F,EACAhE,EAA2Bl8F,UAAUi+F,WAAa,SAAU/pC,EAAQymC,EAAYwE,EAAcN,EAAclB,GACxG,IAAIrB,EAAepoC,EAAOqoC,kBACtB+C,EAAsBhD,EAAaz1G,UACnC04G,EAAsBvD,EAAoB9nC,EAAOsmC,YAAa8B,EAAaa,UAC3EqC,EAAkB1E,EAAS,EAA2B,IAAxBwE,EAC5B,EACCA,EAAsBC,GACzBE,EAA0D,IAApBD,EACpC,EACA5E,EAAW4E,EAAkB7E,GAC/B8E,EAAsCN,GAAgBN,IACtDY,EAAsC3E,EAAS,EAAG+D,EAAeM,IAErE,IAAIgB,EAAgDV,EAChDW,EAAgDtF,EAAS,EAAG+D,EAAesB,EAAgDhB,GAC/HjrC,EAAO4d,OAAS2tB,EAChBvrC,EAAO0pC,gBAAkBuC,EAAgDxF,EACzEzmC,EAAO2pC,mBAAqBuC,EAAgDzF,EAC5EzmC,EAAOmsC,oBAAqB,EAC5BnsC,EAAOosC,yBACPpsC,EAAO4pC,uBACPt7F,KAAKs9F,eAAe5rC,EAAQ,EAChC,EACOgoC,CACX,CAvViC,CAuV/B,MAEEqE,EAA6B,SAAUzjD,GAEvC,SAASyjD,IACL,OAAkB,OAAXzjD,GAAmBA,EAAOvyC,MAAM/H,KAAM9V,YAAc8V,IAC/D,CAiCA,OApCAi6C,EAAU8jD,EAA2BzjD,GAIrCyjD,EAA0BvgG,UAAUm8F,eAAiB,WACjD,OAAO,IACX,EACAoE,EAA0BvgG,UAAUsJ,MAAQ,SAAUmkE,GAClD,OAAO,CACX,EACA8yB,EAA0BvgG,UAAUg9F,aAAe,SAAU9oC,EAAQooC,GACjE,MAAO,CAAC,EAAG,EACf,EACAiE,EAA0BvgG,UAAU09F,cAAgB,SAAUxpC,EAAQypC,GAAc,EACpF4C,EAA0BvgG,UAAU48F,WAAa,WAAc,EAC/D2D,EAA0BvgG,UAAU+9F,UAAY,WAC5C,OAAO,CACX,EACAwC,EAA0BvgG,UAAU88F,aAAe,WAC/C,OAAO,CACX,EACAyD,EAA0BvgG,UAAUo8F,gBAAkB,SAAUloC,EAAQuZ,GAIpE,OAHAvZ,EAAOymC,WACDzmC,EAAOyoC,iBACH,EACH,CACX,EACA4D,EAA0BvgG,UAAUs0E,gBAAkB,WAAc,EACpEisB,EAA0BvgG,UAAU6yE,gBAAkB,SAAU3e,GAC5DA,EAAO6f,gBAAe,GAAM,GAC5B7f,EAAOkqC,kBACX,EACAmC,EAA0BvgG,UAAUigG,UAAY,SAAU/rC,GAAU,EACpEqsC,EAA0BvgG,UAAU8/F,eAAiB,WAAc,EACnES,EAA0BvgG,UAAU4yE,sBAAwB,SAAU9vE,EAAiB2qE,GACvF,EACO8yB,CACX,CAtCgC,CAsC9B,MAEEC,EAAgC,WAChC,SAASA,IACLh+F,KAAKuzE,SAAW,GAChBvzE,KAAKwzE,WAAa,GAClBxzE,KAAKyzE,aAAY,SAAUxI,GAAS,OAAOA,OAAuC,GAAG,IAAI8yB,GACzF/9F,KAAKyzE,aAAY,SAAUxI,GAAS,OAAOA,aAAiB5gF,KAAO,GAAG,IAAIqvG,EAC9E,CAcA,OAbAsE,EAA6BxgG,UAAUi2E,YAAc,SAAUnwD,EAASv5B,GACpEiW,KAAKuzE,SAAS3pF,KAAK05B,GACnBtjB,KAAKwzE,WAAW5pF,KAAKG,EACzB,EACAi0G,EAA6BxgG,UAAUk2E,YAAc,SAAUzI,GAE3D,IADA,IAAIsI,EAAWvzE,KAAKuzE,SACXj8E,EAAI,EAAGsI,EAAK2zE,EAASppF,OAAQmN,EAAIsI,IAAMtI,EAC5C,GAAIi8E,EAASj8E,GAAG2zE,GACZ,OAAOjrE,KAAKwzE,WAAWl8E,GAG/B,OAAO,IACX,EACO0mG,CACX,CArBmC,GAuB/BC,EAA2B,WAC3B,SAASA,IACT,CAgCA,OA/BAA,EAAwBzgG,UAAU0gG,mBAAqB,SAAUr7G,GAC7D,OAAOg2G,EAAmBh2G,EAC9B,EACAo7G,EAAwBzgG,UAAUu6F,cAAgB,SAAUnuE,EAAMu0E,GAC9D7E,EAAiB1vE,EAAM,wBAAuBu0E,GAClD,EACAF,EAAwBzgG,UAAUq6F,aAAe,SAAUjuE,EAAM2vE,GAC7D,IAAI5qB,EAAkB4qB,EAAa5qB,gBAC/ByvB,EAA6C,IAA7BzvB,EAAgB/hB,UAA2C,WAAzB+hB,EAAgBpiF,KAAoBoiF,EAAkB4qB,EAC5GD,EAAiB1vE,EAAMw0E,EAC3B,EACAH,EAAwBzgG,UAAU6gG,cAAgB,SAAUx7G,GACxD,IAAI4N,EAAS5N,EAAQuD,WACrB,MAAO,CACHqK,EAAO66D,aAAa,mBAAkB,OAAQzoE,GAC9C4N,EAAO66D,aAAa,mBAAkB,OAAQzoE,EAAQ8pE,aAE9D,EACAsxC,EAAwBzgG,UAAU8gG,cAAgB,SAAU/iD,EAAI4iD,EAAW5E,GACvE,IAAI9oG,EAAS8qD,EAAGn1D,WAChBqK,EAAOgyD,YAAY07C,GACnB1tG,EAAOgyD,YAAY82C,EACvB,EACA0E,EAAwBzgG,UAAU+gG,gBAAkB,SAAUJ,EAAW5E,GACrE,IAAIiF,EAAUL,EAAUzxC,mBACxB,OAAO8xC,IAAYjF,EAAe,KAAOiF,CAC7C,EACAP,EAAwBzgG,UAAUihG,eAAiB,SAAUN,EAAW5E,GACpE,IAAImF,EAASnF,EAAa1D,uBAC1B,OAAO6I,IAAWP,EAAY,KAAOO,CACzC,EACOT,CACX,CAnC8B,GAqC1BU,EAA6B,SAAUrkD,GAEvC,SAASqkD,IACL,OAAkB,OAAXrkD,GAAmBA,EAAOvyC,MAAM/H,KAAM9V,YAAc8V,IAC/D,CAWA,OAdAi6C,EAAU0kD,EAA2BrkD,GAIrCqkD,EAA0BnhG,UAAU0gG,mBAAqB,SAAUr7G,GAC/D,OAAOg2G,EAAmB74F,KAAK4+F,SAAS/7G,GAC5C,EACA87G,EAA0BnhG,UAAU6gG,cAAgB,SAAUx7G,GAC1D,IAAI4N,EAAS5N,EAAQuD,WACrB,MAAO,CACHqK,EAAO66D,aAAa,mBAAkB,MAAOzoE,GAC7C4N,EAAO66D,aAAa,mBAAkB,MAAOzoE,EAAQ8pE,aAE7D,EACOgyC,CACX,CAhBgC,CAgB9BV,GACEY,EAAqB,SAAUvkD,GAE/B,SAASukD,IACL,OAAkB,OAAXvkD,GAAmBA,EAAOvyC,MAAM/H,KAAM9V,YAAc8V,IAC/D,CAIA,OAPAi6C,EAAU4kD,EAAmBvkD,GAI7BukD,EAAkBrhG,UAAUohG,SAAW,SAAU/7G,GAC7C,OAAOA,EAAQuD,UACnB,EACOy4G,CACX,CATwB,CAStBF,GACEG,EAAoB,SAAUxkD,GAE9B,SAASwkD,IACL,OAAkB,OAAXxkD,GAAmBA,EAAOvyC,MAAM/H,KAAM9V,YAAc8V,IAC/D,CAIA,OAPAi6C,EAAU6kD,EAAkBxkD,GAI5BwkD,EAAiBthG,UAAUohG,SAAW,SAAU/7G,GAC5C,OAAOA,EAAQuD,WAAWA,UAC9B,EACO04G,CACX,CATuB,CASrBH,GAEEI,EAAwB,SAAUzkD,GAElC,SAASykD,IACL,OAAkB,OAAXzkD,GAAmBA,EAAOvyC,MAAM/H,KAAM9V,YAAc8V,IAC/D,CAQA,OAXAi6C,EAAU8kD,EAAsBzkD,GAIhCykD,EAAqBvhG,UAAU6gG,cAAgB,SAAUx7G,GACrD,IAAI4N,EAAS5N,EAAQuD,WACrB,MAAO,CACHqK,EAAO66D,aAAa,mBAAkB,MAAOzoE,GAC7C4N,EAAO66D,aAAa,mBAAkB,MAAOzoE,EAAQ8pE,aAE7D,EACOoyC,CACX,CAb2B,CAazBd,GAEEe,EAA2B,WAC3B,SAASA,EAAwBrxE,GAC7B3tB,KAAK2tB,UAAYA,CACrB,CAoBA,OAnBAqxE,EAAwBxhG,UAAUk2E,YAAc,SAAU7wF,GACtD,IAAI4N,EAAS5N,EAAQuD,WACjBunC,EAAY3tB,KAAK2tB,UACrB,GAAe,OAAXl9B,EACA,OAAOk9B,EAAUhkC,IAAIs0G,GAEzB,IAAIgB,EAAgBxuG,EAAO0uB,QAC3B,MAAsB,UAAlB8/E,GAA+C,UAAlBA,GAA+C,UAAlBA,EACnDtxE,EAAUhkC,IAAIm1G,GAEH,UAAlBG,EACOtxE,EAAUhkC,IAAIk1G,GAEH,OAAlBI,GAA4C,OAAlBA,EACnBtxE,EAAUhkC,IAAIo1G,GAElBpxE,EAAUhkC,IAAIs0G,EACzB,EACAe,EAAwB/yE,OAAS,CAAC,MAC3B+yE,CACX,CAxB8B,GA0B1BE,EAAuB9zG,OAAOC,OAAOD,OAAOkT,OAAO,MAAO,CAC1D6gG,mBAAoB,uCACpBC,eAAgB,qCAKhBC,EAAiB,SAAU/kD,GAE3B,SAAS+kD,EAAcx8G,EAAS6qF,EAAaxgC,EAAahI,EAAUD,EAAe3kC,EAAiBg/F,EAA2BC,GAC3H,IAAIj7F,EAAQg2C,EAAOt8C,KAAKgC,KAAM,CAC1BgrE,MAAO,OACPyF,uBAAuB,QAAsB/C,MAC3C1tE,KA6BN,OA5BAsE,EAAMgrE,OAAS,EACfhrE,EAAMk7F,aAAc,EACpBl7F,EAAMm7F,UAAW,EACjBn7F,EAAMo7F,gBAAiB,EACvBp7F,EAAMq7F,uBAAwB,EAC9Br7F,EAAMu5F,oBAAqB,EAC3Bv5F,EAAMs7F,aAAe,EACrBt7F,EAAMzhB,QAAUA,EAChByhB,EAAMopE,YAAcA,EACpBppE,EAAM4oC,YAAcA,EACpB5oC,EAAM4gC,SAAWA,EACjB5gC,EAAMJ,gBAAkB+gC,EAA+B,gBACvD3gC,EAAMhE,gBAAkBA,EACxBgE,EAAM6D,UAAY7H,EAAgB6H,UAClC7D,EAAMqwE,gBAAkB2qB,EACxBh7F,EAAMi7F,wBAA0BA,EAChCj7F,EAAMk3F,aAAe,EACrBl3F,EAAM8nB,kBAAmB,QAAyB9nB,EAAM4oC,YAAa,sBACrE5oC,EAAM2rE,WAAY,QAAU3rE,EAAM8nB,kBAClC9nB,EAAM82F,gBACA92F,EAAM+2F,mBACF/2F,EAAM6zF,WACF7zF,EAAMw2F,cACF,EAClBx2F,EAAMw5F,uBAAyB,WAC3Bx5F,EAAMm7F,UAAW,CACrB,EACAn7F,EAAMu7F,UAAYv7F,EAAMu7F,UAAUn0F,KAAKpH,GAChCA,CACX,CA2hBA,OA9jBA21C,EAAUolD,EAAe/kD,GAoCzB+kD,EAAcpzE,OAAS,WACnB,MAAO,CACH,aACA,KACA,KACA,KACA,KACA,KACA+xE,EACAgB,EAER,EACAK,EAAcphB,UAAY,WACtB,MAAO,CACHt1E,KAAM,YACNvf,KAAM,iBACNopG,oBAAoB,EACpBtU,UAAW,CAAC,QAAS,SAE7B,EACAmhB,EAAc7hG,UAAUkO,KAAO,SAAU1M,EAAgBM,GACrDU,KAAKb,MAAQ,CAAEH,eAAgBA,EAAgBM,gBAAiBA,EACpE,EACA+/F,EAAc7hG,UAAUwvC,SAAW,WAC/B,IAAI1oC,EAAQtE,KACZA,KAAKw/F,aAAc,EACnB,IAAI38G,EAAUmd,KAAKnd,QACf+0G,EAAmB53F,KAAK43F,iBAAmB53F,KAAKu/F,wBAAwB7rB,YAAY7wF,GACpF43G,EAAaz6F,KAAKy6F,WAAa7C,EAAiBsG,mBAAmBr7G,GACnEw4C,EAAKu8D,EAAiByG,cAAcx7G,GAAUm1G,EAAc38D,EAAG,GAAIy8D,EAAiBz8D,EAAG,GACvFykE,EAAyBrF,IAAe9B,EACxCoH,EAAiB//F,KAAK6/F,UAK1B,GAJA7/F,KAAKg4F,YAAcA,EACnBh4F,KAAK83F,eAAiBA,EACtB93F,KAAKg1E,eACLh1E,KAAKggG,kBAAoBhgG,KAAK+5F,kBAC1B+F,EACArF,EAAWhmG,iBAAiB,SAAUsrG,OAErC,CACD,IAAIE,EAAerI,EAAiB2G,gBAAgBvG,EAAaF,GACjE93F,KAAK86F,cAAiC,OAAjBmF,EAAwB,EAAIjH,EAAkChB,GACnF,sBAAqB,SAAU+H,GAAgB,GAC/C//F,KAAKkgG,2BAA6B,yBAA4B,WAC1D,IAAIC,EAAoB77F,EAAMw2F,cAC1BsF,EAAoBpH,EAAkChB,GAE1D,GADA1zF,EAAMw2F,cAAgBsF,EAClBD,IAAsBC,EAAmB,CACzC,IAAIC,EAAsB/7F,EAAMy1F,kBAC5BuG,EAAmBh8F,EAAM07F,kBAC7B17F,EAAM07F,kBAAoBK,EAC1B/7F,EAAMi8F,cAAcF,EAAqBC,EAC7C,CACJ,GAAG,IACP,CACAtgG,KAAKjW,SAASqwG,WAAWp6F,KAC7B,EACAq/F,EAAc7hG,UAAUQ,KAAO,SAAU+D,EAASuqE,GAC9CtsE,KAAK+B,GAAS/B,KAAKirE,MAAOqB,EAC9B,EACA+yB,EAAc7hG,UAAUu6E,SAAW,WAC/B,IAAIyoB,EAAWxgG,KAAKy6F,WAChBsF,EAAiB//F,KAAK6/F,UACtB/G,EAAkB0H,GAClBA,EAAS9rG,oBAAoB,SAAUqrG,GAGvC,yBAAwB,SAAUA,GAAgB,GAEtD//F,KAAKygG,oBACLzgG,KAAK0gG,8BAA2B9yG,EAChCoS,KAAKw/F,aACC,EACNx/F,KAAKi1E,yBACLj1E,KAAK47F,mBACL57F,KAAK43F,iBAAiB0G,cAAct+F,KAAKnd,QAASmd,KAAKg4F,YAAah4F,KAAK83F,gBACzE93F,KAAKg4F,YAAch4F,KAAK83F,eAAiB93F,KAAKy6F,WAAa,KAC3Dz6F,KAAKuxE,gBAAe,GAAM,GAC1B,IAAIovB,EAAiB,0BACrBA,EAAe3gG,KAAKkgG,4BACpBS,EAAe3gG,KAAK4gG,eACpB5gG,KAAK86F,cACC96F,KAAK4gG,cACD5gG,KAAKkgG,2BAA6B,CAChD,EACAb,EAAc7hG,UAAUuO,OAAS,WAC7B/L,KAAKb,MAAQ,KACba,KAAKirE,MAAQ,IACjB,EACAo0B,EAAc7hG,UAAUw3E,aAAe,WACnC,IAAI1wE,EAAQtE,KAEZ,GADAA,KAAKi1E,yBACAj1E,KAAKb,OAAUa,KAAKw/F,YAAzB,CAGA,IAAIv0B,EAAQjrE,KAAKirE,MACblhF,EAAWiW,KAAKjW,SAAWiW,KAAK20E,gBAAgBjB,YAAYzI,GAChE,GAAiB,OAAblhF,EACA,MAAM,IAAIihB,MAAM,gDAEfhL,KAAKiwE,WAAcjwE,KAAKm1E,2BACzBn1E,KAAKo1E,qBAET,IAAIyrB,EAAqB92G,EAAS6vG,gBAAgB55F,KAAMirE,GAKxD,GAJAlhF,EAASsmF,gBAAgBrwE,KAAMirE,EAAOjrE,KAAKsvE,QAClB,EAArBuxB,GACA7gG,KAAK47F,mBAEwB,IAAP,EAArBiF,GAA+B,CAChC,IAAIxlE,EAAK,YAAiBylE,EAAezlE,EAAG2rC,YAAa+5B,EAAmB1lE,EAAG6rC,cAC/E65B,EAAiB/gG,KAAK4gG,eACtB5gG,KAAK4gG,cAAgBE,GAAa,WAC9B,GAAIx8F,EAAM2mE,MAAO,CACb,IAAIgvB,EAAY31F,EAAM21F,aAAe31F,EAAMva,SAAS4vG,eAAer1F,GACjD+0F,EAAgBY,EAAUhwE,YAC1B,IACd82E,EAAiBz8F,EAAMs8F,eACvBt8F,EAAM0wE,eAEd,MAEI+rB,EAAiBz8F,EAAMs8F,cAE/B,GAAG,IACP,CACyB,EAArBC,GACA7gG,KAAKghG,gBAAgBhhG,KAAKy6F,WAhC9B,CAkCJ,EACA4E,EAAc7hG,UAAU83E,wBAA0B,SAAUltE,EAAYkkE,GAChEtsE,KAAKihG,kBAGTjhG,KAAK69F,oBAAqB,EAC1B79F,KAAKjW,SAAS+nF,gBAAgB9xE,KAAMoI,EAAYkkE,GACpD,EACA+yB,EAAc7hG,UAAU+3E,6BAA+B,SAAUntE,EAAYkkE,GACzE,IAAIhoE,EAAQtE,KACZ,IAAIA,KAAKihG,gBAAT,CAGAjhG,KAAKihG,iBAAkB,EACvB,IAAIzrB,EAAWx1E,KAAKosB,iBAAiBhoB,SAASpE,KAAKb,MAAOa,KAAKkE,iBAC/DlE,KAAKmI,UAAUW,gBAAe,WAAc,OAAOxE,EAAM28F,iBAAkB,CAAO,IAC9EzrB,IAAax1E,KAAKirE,MAClBjrE,KAAKg1E,eAGLh1E,KAAKirE,MAAQuK,CARjB,CAUJ,EACA6pB,EAAc7hG,UAAUq/F,aAAe,WACnC78F,KAAKy/F,UAAW,EAChBz/F,KAAK69F,oBAAqB,EAC1B79F,KAAK2/F,uBAAwB,CACjC,EACAN,EAAc7hG,UAAU0jG,YAAc,WAClC,OAAOlhG,KAAKy6F,UAChB,EACA4E,EAAc7hG,UAAUu8F,gBAAkB,WACtC,IAhvByBl3G,EACzBS,EA+uBIq3G,EAAW36F,KAAKy6F,WACpB,MAAO,CACHE,SAAUA,EACVt2G,UAAWs2G,EAASt2G,UACpBf,OAAQq3G,IAAahC,EACfwI,aArvBet+G,EAsvBE83G,EArvB3Br3G,EAAST,EAAQD,wBAAwBU,OAC7CA,GAAU41G,EAAer2G,EAAS,iBAAkB,sBAsvBpD,EACAw8G,EAAc7hG,UAAUo+F,iBAAmB,WACvC57F,KAAKsvE,OACCtvE,KAAKo7F,gBACDp7F,KAAKq7F,mBACDr7F,KAAKm4F,WACDn4F,KAAKm6F,iBAAmB,EAC1Cn6F,KAAKihG,gBACCjhG,KAAK69F,mBACD79F,KAAKy/F,UAAW,EAC1Bz/F,KAAKs7F,sBAAqB,EAC9B,EACA+D,EAAc7hG,UAAUqiG,UAAY,WAChC,IAAIv7F,EAAQtE,KACRohG,EAAsBphG,KAAK69F,mBAC/B,IAAK79F,KAAKy/F,WAAa2B,EAAqB,CACxC,IAAIC,EAAqBrhG,KAAKggG,kBAC1BsB,EAAwBthG,KAAK+5F,kBACjC/5F,KAAKggG,kBAAoBsB,EACzBthG,KAAKmI,UAAUW,gBAAe,WAC1BxE,EAAMm7F,UAAW,EACjBn7F,EAAMi8F,cAAce,EAAuBD,EAC/C,IACArhG,KAAKy/F,UAAW,CACpB,CACI2B,IACAphG,KAAK69F,oBAAqB,EAElC,EACAwB,EAAc7hG,UAAU+iG,cAAgB,SAAUgB,EAAuBC,GACrE,GAAKxhG,KAAKw/F,YAGV,GAAIx/F,KAAK2/F,sBACL3/F,KAAK2/F,uBAAwB,OAIjC,GADY3/F,KAAKirE,MACjB,CAGA,IAAIlhF,EAAWiW,KAAKjW,SAChB03G,EAAwBzhG,KAAKsvE,OAC7BoyB,EAAsB1hG,KAAKu6F,gBAC3Bl/D,EAAKtxC,EAASywG,aAAax6F,KAAMuhG,GAAwBI,EAAwBtmE,EAAG,GAAIumE,EAAsBvmE,EAAG,GACjHwmE,EAAkBF,EAAwBF,EACxC,EACAE,EAAwBF,EACpB,EACA,EACNK,EAAgB,EACpB,GAAIH,GAAyBF,GAAyBC,IAAwBE,GACvEA,IAAwBF,GAAuBA,GAAuBE,EACrED,GAAyBF,GAAyBC,IAAwBE,EACtE73G,EAASuwG,aAAat6F,KAAM4hG,KAC5BC,GAAmB,GAGlB93G,EAASwxG,UAAUv7F,KAAM2hG,KAC9BE,GAAmB,QAIvB,GAAIF,EAAwBF,GACrBC,GAAuBC,GACvBC,GAAuBF,EAAqB,CAC/C,IAAIK,EAAsBJ,EAAwBF,EAClDzhG,KAAKgiG,WAAWD,EAAqB,GACrCD,EAAgB,EACZ/3G,EAASuwG,aAAat6F,KAAM4hG,KAC5BC,GAAmB,EAE3B,MACSJ,EAAwBE,GAC1BF,GAAyBG,GACzBF,GAAuBE,GACtBG,EAAsBL,EAAsBE,EAChD5hG,KAAKgiG,WAAWD,GAAsB,GACtCD,EAAgB,EACZ/3G,EAASwxG,UAAUv7F,KAAM2hG,KACzBE,GAAmB,IAGlBH,EAAsBC,GAAyBF,EAAwBG,GAC5E73G,EAAS0zG,UAAUz9F,MACf0hG,EAAsBC,EAClB53G,EAASuwG,aAAat6F,KAAM4hG,KAC5BC,GAAmB,GAGlB93G,EAASwxG,UAAUv7F,KAAM2hG,KAC9BE,GAAmB,IAInBJ,IAA0BE,GAAyBD,IAAwBE,GAC3En4F,QAAQwgD,IAAI,sDACN,QAAQljE,OAAO46G,EAAuB,MAAM56G,OAAO66G,EAAqB,aAAa76G,OAAO06G,EAAuB,MAAM16G,OAAO26G,EAAqB,MAC3J33G,EAAS0zG,UAAUz9F,OAGnByJ,QAAQwgD,IAAI,8CAQxB,GAJsB,IAAlB63C,IACA9hG,KAAKsvE,OAASqyB,EACd53G,EAASmxG,cAAcl7F,KAAM2hG,IAEH,IAAP,EAAlBE,IAC4B,IAAP,EAAlBA,GACJ7hG,KAAKq6F,QAAQsH,GAA0C,EAAlBE,GAAuB,GAAsB,EAAlBA,GAAuB,OAEtF,CACD,IAAII,EAAmBV,EAAsBl9G,UAAYm9G,EAAmBn9G,UAC5Ew9G,EAAkBI,EAAmB,EAC/B,EACAA,EAAmB,EACf,EACA,EACNl4G,EAASwxG,UAAUv7F,KAAM2hG,KACzBE,GAAmB,GAEnB93G,EAASuwG,aAAat6F,KAAM4hG,KAC5BC,GAAmB,GAEO,IAAP,EAAlBA,IAC4B,IAAP,EAAlBA,IACJ7hG,KAAKq6F,QAAQsH,GAA0C,EAAlBE,GAAuB,GAAsB,EAAlBA,GAAuB,EAE/F,CA1FA,CA2FJ,EACAxC,EAAc7hG,UAAUwkG,WAAa,SAAUE,EAAYvwG,GACvD,IAAI+/D,EAAS1xD,KACb,IAAmB,IAAfrO,EAEA,IADA,IAAIs9E,EAAavd,EAAOgsC,iBACjBwE,KAAc,CACjB,IAAIt4E,EAAO8nC,EAAOu0B,WAClByR,EAAkBhmC,EAAQ9nC,IAAQqlD,GAAY,EAClD,MAIA,IADA,IAAIx6C,EAAYi9B,EAAO6oC,gBAChB2H,KACCt4E,EAAO8nC,EAAO9nC,KAAK,GACvB8tE,EAAkBhmC,EAAQ9nC,IAAQ6K,GAAW,EAGzD,EACA4qE,EAAc7hG,UAAU68F,QAAU,SAAU8H,EAAU5G,EAAWjB,EAAc5jD,GAC3E,IAAIpyC,EAAQtE,MACRu7F,GAAajB,GAAgB5jD,KACxB12C,KAAK0/F,gBA4DN9G,GA3DqB,SAAUwJ,GAC3B,KAAIA,EAAO99F,EAAMs7F,aAAe,IAAhC,CAGAt7F,EAAMs7F,aAAewC,EACrB99F,EAAMo7F,gBAAiB,EACvB,IAAI2C,EAAsB,WACtB/9F,EAAMo7F,gBAAiB,CAC3B,EACIzF,EAAY31F,EAAM21F,YACtB,GAAkB,OAAdA,EAAJ,CAIA,IAAIqI,EAAmBrI,EAAUhwE,WAC7Bs4E,EAAqB,uBACrBxzF,EAAOuzF,GACJA,EAAiB5zE,IACjB4zE,EAAiB5zE,GAAG6zE,GACrBD,EAAiB5zE,GAAG6zE,GAAoBr1D,YAAY1hD,WAAW+2G,QAC/D30G,EACN,QAAaA,IAATmhB,EACAszF,QAEC,CACD,IAAIG,EAAgB,CAChBL,SAAUA,EACVM,WAAYnI,EACZoI,QAASnH,GAETj8F,EAAkBgF,EAAMnF,MAAMG,gBAElC,GADAA,EAAgBqjG,eAAiBH,EACb,iBAATzzF,EAkBN,IAAIA,EAAKqd,iBAEV,OADAi2E,IACOtzF,EAAKqd,iBAAiBhoB,SAASE,EAAMnF,OAG5C,MAAM,IAAI6L,MAAM,IAAIjkB,OAAOw7G,EAAoB,2CACnD,CAvBI,IAAIvjG,EAAiBM,EAAgBN,eAEjC4jG,EAAW5jG,EADOi7F,EAAUhwE,WAAWpI,aAAa0gF,IAExD,GAAwB,mBAAbK,EAWP,MAAM,IAAI53F,MAAM,IAAIjkB,OAAOw7G,EAAoB,4CAV/CF,IACA,IAAIr5G,EAAS45G,EAAS5kG,KAAKgB,EAAgBmjG,EAAU7H,EAAciB,GACnE,GAAIvyG,aAAkB0E,EAElB,OADA4W,EAAMo7F,gBAAiB,EAChB12G,EAAO2E,MAAK,WACf00G,GACJ,GAchB,CA5CA,MAFIA,GARJ,CAuDJ,GAIZ,EACAhD,EAAc7hG,UAAU89F,qBAAuB,SAAUuH,GACrD7iG,KAAKg4F,YAAYhjG,MAAM1R,OAAS,GAAGyD,OAAOiZ,KAAKo7F,gBAAiB,MAChEp7F,KAAK83F,eAAe9iG,MAAM1R,OAAS,GAAGyD,OAAOiZ,KAAKq7F,mBAAoB,MAClEwH,IACA7iG,KAAKy/F,UAAW,EAChB7G,EAAK54F,KAAK89F,wBAElB,EACAuB,EAAc7hG,UAAUy3E,uBAAyB,WAC7C,IAAI3lD,EAAqBtvB,KAAKsvB,mBAC1BA,IACAA,EAAmBzuB,YAAYb,KAAKk1E,YAAal1E,MACjDA,KAAKsvB,mBAAqBtvB,KAAKk1E,YAAc,KAErD,EACAmqB,EAAc7hG,UAAUy8F,UAAY,WAChC,OAAOj6F,KAAK4pB,KAAK,EACrB,EACAy1E,EAAc7hG,UAAUyoF,SAAW,WAC/B,OAAOjmF,KAAK4pB,KAAK5pB,KAAK0xE,YAAc,EACxC,EACA2tB,EAAc7hG,UAAUkgG,eAAiB,WACrC,IAAIzD,EAAYj6F,KAAKi6F,YACrB,OAAqB,OAAdA,GAAsB,EAAIA,EAAU36F,gBAAgB+vE,MAC/D,EACAgwB,EAAc7hG,UAAU+8F,cAAgB,WACpC,IAAItU,EAAWjmF,KAAKimF,WACpB,OAAoB,OAAbA,GAAqB,EAAIA,EAAS3mF,gBAAgB+vE,MAC7D,EACAgwB,EAAc7hG,UAAUwjG,gBAAkB,SAAUvG,GAChD,IAAIn2F,EAAQtE,KAQR8iG,EA7csC,2BA8c1C,GAAyC,mBAA9BA,EAA0C,CACjD,IAAIhjG,EAAWE,KAAK+iG,wBAChBjjG,GACAA,EAAS8kB,cAEb9kB,EAAWE,KAAK+iG,wBAA0B,IAAID,GAA0B,SAAU35F,GAC9E,IAAI65F,EAAU1+F,EAAMo8F,yBAChBuC,EAAU95F,EAAQ,GAAG+5F,YACzB5+F,EAAMo8F,yBAA2BuC,OACjBr1G,IAAZo1G,GAAyBC,EAAQ3/G,SAAW0/G,EAAQ1/G,QAAU2/G,EAAQ7/G,QAAU4/G,EAAQ5/G,OAjB5E,SAAU6/G,GAC9BrK,GAAK,WACGqK,IAAY3+F,EAAMo8F,0BAClBp8F,EAAM0wE,cAEd,GACJ,CAYYmuB,CAAkBF,EAE1B,KACSz+E,QAAQi2E,EACrB,CACA,IAAI2I,EAAWpjG,KAAKqjG,gBAChBD,GACAA,EAAS7jB,aAEb,IAAI+jB,EAA0B,WAC1B1K,GAAK,WACDt0F,EAAM0wE,cACV,GACJ,GACAouB,EAAWpjG,KAAKqjG,gBAAkB,IAAI,KAAc5I,IAC3Cv6F,UAAUg/F,EAAqBC,mBAAoBmE,GAAyB,GACrFF,EAASljG,UAAUg/F,EAAqBE,eAAgBkE,GAAyB,EACrF,EACAjE,EAAc7hG,UAAUijG,kBAAoB,WACxC,IAAI3gG,EAAWE,KAAK+iG,wBAChBjjG,GACAA,EAAS8kB,aAEb,IAAI2+E,EAAiBvjG,KAAKqjG,gBACtBE,GACAA,EAAehkB,aAEnBv/E,KAAK+iG,wBACC/iG,KAAKqjG,qBAAkBz1G,CACjC,EACAyxG,EAAc7hG,UAAU23E,wBAA0B,WAC9C,IAAIlK,EAAQjrE,KAAKq1E,sBACbtrF,EAAWiW,KAAK20E,gBAAgBjB,YAAYzI,GAChD,IAAKlhF,EACD,OAAO,EAEX,IAAIulC,EAAqBvlC,EAASqmF,sBAAsBpwE,KAAKM,gBAAiB2qE,GAC9E,IAAK37C,EACD,OAAO,EAEX,IAAIvtB,EAAU,+BAId,OAHA/B,KAAKsvB,mBAAqBA,EAC1BtvB,KAAKk1E,YAAcnzE,EACnButB,EAAmBpvB,UAAU6B,EAAS/B,OAC/B,CACX,EACAq/F,EAAc7hG,UAAU63E,oBAAsB,WAC1C,IAAIpxE,GAAa,QAAiBjE,KAAKosB,kBACvC,OAAKnoB,EAGEA,EAAWG,SAASpE,KAAKb,MAAO,MAF5B,IAGf,EACAkgG,EAAc7hG,UAAU43E,mBAAqB,WACzC,IAAI9lD,EAAqBtvB,KAAKjW,SAASqmF,sBAAsBpwE,KAAKM,gBAAiBN,KAAKirE,OACpF37C,IACAtvB,KAAKk1E,YAAc,0BACnBl1E,KAAKsvB,mBAAqBA,EAC1BA,EAAmBpvB,UAAUF,KAAKk1E,YAAal1E,MAEvD,EACAq/F,EAAc7hG,UAAUk0E,UAAY,WAChC,OAAO1xE,KAAKklC,SAAS6lB,SAAS5gE,MAClC,EACAk1G,EAAc7hG,UAAUwxE,MAAQ,WAC5B,OAAOhvE,KAAKklC,SAAS6lB,QACzB,EACAs0C,EAAc7hG,UAAUosB,KAAO,SAAUv8B,GACrC,IAAI63C,EAAWllC,KAAKklC,SACpB,OAAO73C,EAAQ,GAAKA,EAAQ63C,EAAS6lB,SAAS5gE,OAAS,EAAI,KAAO+6C,EAAS6lB,SAAS19D,EACxF,EACAgyG,EAAc7hG,UAAUi0E,QAAU,SAAUzyE,EAAgBM,GACxD,IAAIsqB,EAAO5pB,KAAK0tE,YAAYpvE,SAG5B,OAFAsrB,EAAKle,KAAK1M,EAAgBM,GAC1BU,KAAKklC,SAAS/7C,IAAIygC,GACXA,CACX,EACAy1E,EAAc7hG,UAAU4zE,WAAa,SAAU/jF,EAAO2R,EAAgBM,GAClE,IAAIsqB,EAAO5pB,KAAK0tE,YAAYpvE,SAC5BsrB,EAAKle,KAAK1M,EAAgBM,GAC1BU,KAAKklC,SAAS6wC,OAAO1oF,EAAOu8B,EAChC,EACAy1E,EAAc7hG,UAAU+zE,eAAiB,SAAU1D,EAAe2G,GAC9D,OAAOx0E,KAAKklC,SAASynC,UAAUkB,EAAe2G,EAClD,EACA6qB,EAAc7hG,UAAUm0E,WAAa,SAAUtkF,EAAOwgF,EAAe2G,GACjE,OAAOx0E,KAAKklC,SAASgxC,SAAS7oF,EAAOwgF,EAAe2G,EACxD,EACA6qB,EAAc7hG,UAAUq0E,eAAiB,SAAUjoD,GAG/C,IAFA,IAAIwsD,EAAWxsD,EAAKwsD,SAChB1wE,EAAI0wE,EAASjsF,OACVub,MACH,QAAqB0wE,EAAS1wE,IAElC,IAAIi/B,EAAc/a,EAAK+a,YAEvB,IADAj/B,EAAIi/B,EAAYx6C,OACTub,KAGH,IAFA,IAAI2wE,EAAkB1xC,EAAYj/B,GAAG2wE,gBACjC5lD,EAAI4lD,EAAgBlsF,OACjBsmC,KAAK,CACR,IAAIjvB,EAAU60E,EAAgB5lD,GAAGjvB,SACjC,QAAqBA,EACzB,CAER,EACO69F,CACX,CAhkBoB,CAgkBlB,MAEEmE,EAAsB,WACtB,SAASA,IACT,CAOA,OANAA,EAAmBvlB,UAAY,WAC3B,MAAO,CACHt1E,KAAM,YACNvf,KAAM,uBAEd,EACOo6G,CACX,CAVyB,GAYzB,SAASxpE,EAAUxa,GACfA,EAAOokB,gBAAgBy7D,EAAemE,EAC1C,46BC9tCIC,EACA,WACA,EAoBAzpD,EAAgB,SAAStpB,EAAG15B,GAI5B,OAHAgjD,EAAgB5uD,OAAOmT,gBAClB,CAAEC,UAAW,cAAgBnU,OAAS,SAAUqmC,EAAG15B,GAAK05B,EAAElyB,UAAYxH,CAAG,GAC1E,SAAU05B,EAAG15B,GAAK,IAAK,IAAI8kB,KAAK9kB,EAAOA,EAAEzH,eAAeusB,KAAI4U,EAAE5U,GAAK9kB,EAAE8kB,GAAI,EACtEk+B,EAActpB,EAAG15B,EAC5B,EAEA,SAASijD,EAAUvpB,EAAG15B,GAElB,SAASkjD,IAAOl6C,KAAKnC,YAAc6yB,CAAG,CADtCspB,EAActpB,EAAG15B,GAEjB05B,EAAElzB,UAAkB,OAANxG,EAAa5L,OAAOkT,OAAOtH,IAAMkjD,EAAG18C,UAAYxG,EAAEwG,UAAW,IAAI08C,EACnF,CAEA,SAASpe,EAAWC,EAAYj1C,EAAQ2F,EAAK+5B,GACzC,IAA2HkK,EAAvHuD,EAAI/pC,UAAUC,OAAQguC,EAAIlE,EAAI,EAAIntC,EAAkB,OAAT0/B,EAAgBA,EAAOp7B,OAAOsoC,yBAAyB5sC,EAAQ2F,GAAO+5B,EACrH,GAAuB,iBAAZlc,SAAoD,mBAArBA,QAAQ0xB,SAAyB7D,EAAI7tB,QAAQ0xB,SAASD,EAAYj1C,EAAQ2F,EAAK+5B,QACpH,IAAK,IAAIlvB,EAAIykC,EAAW5xC,OAAS,EAAGmN,GAAK,EAAGA,KAASo5B,EAAIqL,EAAWzkC,MAAI6gC,GAAKlE,EAAI,EAAIvD,EAAEyH,GAAKlE,EAAI,EAAIvD,EAAE5pC,EAAQ2F,EAAK0rC,GAAKzH,EAAE5pC,EAAQ2F,KAAS0rC,GAChJ,OAAOlE,EAAI,GAAKkE,GAAK/sC,OAAOgS,eAAetW,EAAQ2F,EAAK0rC,GAAIA,CAChE,CAEA,SAASurE,IACL,IAAK,IAAIh/F,EAAI,EAAGpN,EAAI,EAAGqsG,EAAKz5G,UAAUC,OAAQmN,EAAIqsG,EAAIrsG,IAAKoN,GAAKxa,UAAUoN,GAAGnN,OACxE,IAAIguC,EAAI9tC,MAAMqa,GAAI+rB,EAAI,EAA3B,IAA8Bn5B,EAAI,EAAGA,EAAIqsG,EAAIrsG,IACzC,IAAK,IAAIP,EAAI7M,UAAUoN,GAAIoO,EAAI,EAAGk+F,EAAK7sG,EAAE5M,OAAQub,EAAIk+F,EAAIl+F,IAAK+qB,IAC1D0H,EAAE1H,GAAK15B,EAAE2O,GACjB,OAAOyyB,CACX,CAKA,IA2XI0rE,EA3XAC,EAAgC,WAOhC,SAASA,EAAeC,EAAMl7F,EAAQxI,EAAc2jG,EAAOvqF,QACvC,IAAZA,IAAsBA,EAAU,MACpCzZ,KAAK+jG,KAAOA,EACZ/jG,KAAK6I,OAASA,EACd7I,KAAKK,aAAeA,EACpBL,KAAKgkG,MAAQA,EACbhkG,KAAKyZ,QAAUA,EACfzZ,KAAK6B,GAAKiiG,EAAe7iG,QAC7B,CAKA,OAJA6iG,EAAetmG,UAAUtc,SAAW,WAChC,OAAO8e,KAAKgkG,MAAQ,SAAWhkG,KAAKyZ,OACxC,EACAqqF,EAAe7iG,OAAS,EACjB6iG,CACX,CArBmC,GA0B/BG,EAAuB,WACvB,SAASA,IACT,CA6BA,OAzBAA,EAAMp6G,IAAM,SAAU/C,EAAQo9G,GACtBp9G,aAAkByd,WAClBzd,EAASA,EAAO0W,WAEpBpS,OAAOgS,eAAetW,EAAQm9G,EAAMx3G,IAAK,CAAEwQ,YAAY,EAAOC,cAAc,EAAOC,UAAU,EAAMnL,MAAOkyG,GAC9G,EAIAD,EAAMpqB,MAAQ,SAAU/yF,GAChBA,aAAkByd,WAClBzd,EAASA,EAAO0W,WAEpB1W,EAAOm9G,EAAMx3G,KAAO,IACxB,EAIAw3G,EAAMt6G,IAAM,SAAU7C,GAClB,OAAOA,EAAOm9G,EAAMx3G,MAAQ,IAChC,EAIAw3G,EAAMx3G,IAAM,YACLw3G,CACX,CAhC0B,GAmCtBE,EAAmC,WACnC,SAASA,IACT,CAqEA,OApEAA,EAAkB3mG,UAAU4mG,WAAa,SAAUC,GAC/CrkG,KAAKskG,UAAUD,EAAM53F,YACzB,EACA03F,EAAkB3mG,UAAUiO,qBAAuB,SAAUE,GACzDA,EAAS1H,WAAWsH,OAAOvL,MAC3BA,KAAKskG,UAAU34F,EAASvhB,KAC5B,EACA+5G,EAAkB3mG,UAAUgP,oBAAsB,SAAUJ,GACxDA,EAAUnI,WAAWsH,OAAOvL,MAC5BA,KAAKskG,UAAUl4F,EAAUhiB,KAC7B,EACA+5G,EAAkB3mG,UAAUwP,YAAc,SAAU3hB,GAChDA,EAAOvE,OAAOykB,OAAOvL,MACrB3U,EAAO2G,MAAMuZ,OAAOvL,KACxB,EACAmkG,EAAkB3mG,UAAU+P,iBAAmB,SAAUiF,GACrDA,EAAYrF,UAAU5B,OAAOvL,MAC7BwS,EAAYpF,IAAI7B,OAAOvL,MACvBwS,EAAYnF,GAAG9B,OAAOvL,KAC1B,EACAmkG,EAAkB3mG,UAAUmQ,gBAAkB,SAAU8E,GACpDA,EAAOrT,SAAWqT,EAAOrT,QAC7B,EACA+kG,EAAkB3mG,UAAUuQ,iBAAmB,SAAU0E,GACrDA,EAAOrpB,KAAOqpB,EAAOrpB,IACzB,EACA+6G,EAAkB3mG,UAAU2Q,kBAAoB,SAAUsE,GACtDA,EAAO5J,OAAO0C,OAAOvL,KACzB,EACAmkG,EAAkB3mG,UAAUkR,iBAAmB,SAAU+D,GACrDA,EAAO5J,OAAO0C,OAAOvL,MACrByS,EAAOhmB,IAAI8e,OAAOvL,KACtB,EACAmkG,EAAkB3mG,UAAUyR,eAAiB,SAAUjR,GACnDgC,KAAKskG,UAAUtmG,EAAK5T,KACxB,EACA+5G,EAAkB3mG,UAAUiS,kBAAoB,SAAUzR,GACtDA,EAAK+Q,KAAKxD,OAAOvL,MACjBA,KAAKskG,UAAUtmG,EAAK5T,KACxB,EACA+5G,EAAkB3mG,UAAU6R,gBAAkB,SAAUrR,GACpDA,EAAK6K,OAAO0C,OAAOvL,MACnBA,KAAKskG,UAAUtmG,EAAK5T,KACxB,EACA+5G,EAAkB3mG,UAAU0S,YAAc,SAAUwC,GAChDA,EAAOzO,WAAWsH,OAAOvL,KAC7B,EACAmkG,EAAkB3mG,UAAUsS,YAAc,SAAU8C,GAChDA,EAAOlvB,KAAK6nB,OAAOvL,MACnB4S,EAAO7uB,MAAMwnB,OAAOvL,KACxB,EACAmkG,EAAkB3mG,UAAU8S,sBAAwB,SAAUuC,GAC1DA,EAAQ7gB,MAAQ6gB,EAAQ7gB,KAC5B,EACAmyG,EAAkB3mG,UAAUoU,kBAAoB,SAAUiB,GACtD7S,KAAKskG,UAAUzxF,EAAQtnB,SAC3B,EACA44G,EAAkB3mG,UAAUyU,mBAAqB,SAAUY,GACvD7S,KAAKskG,UAAUzxF,EAAQd,OAC3B,EACAoyF,EAAkB3mG,UAAUkT,mBAAqB,SAAUmC,GACvDA,EAAQ7gB,MAAQ6gB,EAAQ7gB,KAC5B,EACAmyG,EAAkB3mG,UAAU8mG,UAAY,SAAUl6G,GAC9C,IAAK,IAAIkN,EAAI,EAAGA,EAAIlN,EAAKD,OAAQmN,IAC7BlN,EAAKkN,GAAGiU,OAAOvL,KAEvB,EACOmkG,CACX,CAxEsC,GA0ElCI,EAAyC,WACzC,SAASA,EAAwBC,GAC7BxkG,KAAKwkG,gBAAkBA,EACvBxkG,KAAKorE,sBAAwB,IAAI,KAAc,IAC/CprE,KAAKykG,eAAiB,IAAI,KAAiB,MAC3CzkG,KAAK0kG,oBAAsB,IAAI,UAAiB92G,GAChDoS,KAAKyT,MAAQ,CAAC,CAClB,CAsBA,OArBA8wF,EAAwB/mG,UAAUkW,MAAQ,SAAU+F,GAChD,QAA4B7rB,IAAxBoS,KAAKyT,MAAMgG,GACX,OAAOzZ,KAAKyT,MAAMgG,GAEtB,IAAIivD,EAAQ1oE,KAAKwkG,gBAAgBj5B,mBAAmB,KAAM9xD,GAC1D,GAAc,OAAVivD,EACA,OAAO,IAAI,KAAcjvD,GAG7B,IADA,IAAIxV,EAAa,IAAI,KAAcykE,EAAM,IAChCpxE,EAAI,EAAGA,EAAIoxE,EAAMv+E,OAAQmN,GAAK,EACnC2M,EAAa,IAAI,KAAO,IAAKA,EAAY,IAAI,KAAO,IAAKjE,KAAK2kG,SAASj8B,EAAMpxE,IAAK,IAAI,KAAcoxE,EAAMpxE,EAAI,MAIlH,OAFAstG,EAA2Bz+C,SAASliD,EAAYwV,GAChDzZ,KAAKyT,MAAMgG,GAAWxV,EACfA,CACX,EACAsgG,EAAwB/mG,UAAUmnG,SAAW,SAAUr1C,GAEnD,OAAO,IAAI,KAAY,IAAI,KAAO,KAAM,IAAI,KAAO,MAAOA,EAAMtvD,KAAKykG,gBAAiB,IAAI,KAAO,MAAOn1C,EAAMtvD,KAAK0kG,sBAAuB1kG,KAAKorE,sBAAuB,IAAI,KAAW9b,EAAM,WAAY,IAC3M,EACAi1C,EAAwBt4E,OAAS,CAAC,MAC3Bs4E,CACX,CA9B4C,GA+BxCK,EAA4C,SAAUtqD,GAEtD,SAASsqD,EAA2BC,GAChC,IAAIvgG,EAAQg2C,EAAOt8C,KAAKgC,OAASA,KAEjC,OADAsE,EAAMugG,gBAAkBA,EACjBvgG,CACX,CAeA,OApBA21C,EAAU2qD,EAA4BtqD,GAMtCsqD,EAA2Bz+C,SAAW,SAAUliD,EAAY4gG,GACxD,IAAIr5F,EAAU,IAAIo5F,EAA2BC,GAC7C5gG,EAAWsH,OAAOC,EACtB,EACAo5F,EAA2BpnG,UAAUuQ,iBAAmB,SAAU0E,GAC9D,GAAwB,IAApBA,EAAOrT,SACP,MAAM,IAAI4L,MAAM,gEAEyF,IAAzG,CAAC,cAAe,eAAgB,QAAS,SAAU,SAAU,kBAAkBzkB,QAAQksB,EAAOrpB,QAC9F,IAAAqnD,WAAU,sBAELpmC,KAAK,yBAA4BoI,EAAOrpB,KAAO,iBAAqBqpB,EAAOrpB,KAAO,2CAA+C4W,KAAK6kG,gBAAkB,KAErK,EACOD,CACX,CAtB+C,CAsB7CT,GAKEW,EAAqB,CAIrBtjD,QAAS,8BACTujD,SAAU,+BACV36C,QAAS,8CACT46C,MAAO,wCACP5+F,UAAW,kGACX6+F,UAAW,uGACXC,SAAU,gGACVC,SAAU,mGACVtjH,IAAK,0DACLD,IAAK,yDACLwjH,MAAO,iFACPC,QAAS,sFACTz/F,OAAQ,qDAKR0/F,EAA2C,WAC3C,SAASA,EAA0B16E,GAC/B5qB,KAAK4qB,OAASA,CAClB,CA+BA,OA1BA06E,EAA0B9nG,UAAU+nG,WAAa,SAAU94G,GACvD,IAAIgtB,EAOJ,OALIA,EADAhtB,KAAOq4G,EACGA,EAAmBr4G,GAGnBq4G,EAA4B,QAEnC9kG,KAAK4qB,OAAOlX,MAAM+F,EAC7B,EAOA6rF,EAA0B9nG,UAAUgoG,eAAiB,SAAUnlG,EAAcolG,GACzE,GAAIA,QACA,OAAQA,aAAuBlhG,SAAYkhG,IAAgBA,EAG/D,IAAIC,EAAQrlG,EAAanf,WAAW+M,MAAM,aAAazL,KAAK,KAE5D,OAAOkjH,EAAM9mG,OAAO,GAAGE,cAAgB4mG,EAAMvtG,MAAM,EACvD,EACAmtG,EAA0Br5E,OAAS,CAACs4E,GAC7Be,CACX,CAnC8C,GAyC1CK,EAAmC,SAAUrrD,GAE7C,SAASqrD,EAAkBC,EAAiBviE,GACxC,IAAI/+B,EAAQg2C,EAAOt8C,KAAKgC,OAASA,KAIjC,OAHAsE,EAAMshG,gBAAkBA,EACxBthG,EAAMJ,gBAAkBm/B,EAAUn/B,gBAClCI,EAAMkhG,eAAiBI,EAAgBJ,eAAe95F,KAAKk6F,GACpDthG,CACX,CA8GA,OArHA21C,EAAU0rD,EAAmBrrD,GAe7BqrD,EAAkBnoG,UAAUqoG,iBAAmB,SAAUh9F,EAAQxI,EAAc6jG,GAC3E,OAAOlkG,KAAKmmD,SAASt9C,EAAQxI,EAAc6jG,GAAS,KACxD,EAOAyB,EAAkBnoG,UAAUsoG,eAAiB,SAAUj9F,EAAQq7F,GAC3D,OAAOlkG,KAAKmmD,SAASt9C,EAAQ,KAAMq7F,GAAS,KAChD,EAMAyB,EAAkBnoG,UAAUuoG,WAAa,SAAU7B,EAAOH,GAEtD,IADA,IAAIzsG,EAAI4sG,EAAM/5G,OACPmN,KACH,IAAgC,IAA5B4sG,EAAM5sG,GAAG/Q,QAAQw9G,GACjB,OAAO,EAGf,OAAO,CACX,EACA4B,EAAkBnoG,UAAU+nG,WAAa,SAAUxB,EAAMl7F,EAAQ7W,GAC7D,IAAIiS,EAAa8/F,EAAKtqF,SAAWzZ,KAAK4lG,gBAAgBL,WAAWxB,EAAKiC,YAElE3qE,EAAK0oE,EAAK1uG,SAAUgL,EAAeg7B,EAAGjyC,KAAMq8G,EAAcpqE,EAAGoqE,YAC5C,OAAjBplG,IACAolG,EAAczlG,KAAK4lG,gBAAgBJ,eAAenlG,EAAcolG,IAEpE,IAAInmG,EAAkB,CAClB2mG,aAAcR,EACdS,cAAe7lG,EACf8lG,OAAQn0G,EACRo0G,QAASv9F,EACT81C,QAASolD,EAAKvkF,OAGd6mF,gBAAiBrmG,KAAKwlG,gBAE1B,OAAOvhG,EAAWG,SAAS,CAAEpF,eAAgB6J,EAAQvJ,gBAAiBA,GAAmBU,KAAKkE,gBAClG,EACAyhG,EAAkBnoG,UAAU8oG,qBAAuB,SAAUz9F,EAAQxI,EAAckmG,EAAcC,EAAUn1F,GAgCvG,IA/BA,IAAI/M,EAAQtE,KAERymG,EAAwBpmG,QACxB6jG,EAAQqC,EAAaC,GACrBE,GAAW,EAEXC,EAAW,GACXzuC,EAAU,SAAU5gE,GACpB,IAAIysG,EAAOG,EAAM5sG,GAGjB,IAAKmvG,GAAyB1C,EAAK1uG,SAASjM,MAAQiX,EAChD,MAAO,WAGX,GAAI0jG,EAAK6C,OAAS7C,EAAK6C,KAAK/9F,GACxB,MAAO,WAGX,IAAI7W,EAA+B,OAAvB+xG,EAAK1uG,SAASjM,KAAgByf,EAASA,EAAOk7F,EAAK1uG,SAASjM,MACpEy9G,EAAmB9C,EAAK52F,UAAUnb,EAAO6W,GACvCg+F,aAA4Bn5G,IAC9Bm5G,EAAmBn5G,EAAQD,QAAQo5G,IAEvCF,EAAS/8G,KAAKi9G,EAAiBl5G,MAAK,SAAUq2G,GAC1C,IAAIvqF,EAAUuqF,EAAQ,KAAO1/F,EAAMihG,WAAWxB,EAAMl7F,EAAQ7W,GAG5D,OAFAqf,EAAQznB,KAAK,IAAIk6G,EAAeC,EAAMl7F,EAAQk7F,EAAK1uG,SAASjM,KAAM46G,EAAOvqF,IACzEitF,EAAWA,GAAY1C,EAChBA,CACX,IACJ,EACS1sG,EAAI,EAAGA,EAAI4sG,EAAM/5G,OAAQmN,IAC9B4gE,EAAQ5gE,GAEZ,OAAO5J,EAAQkT,IAAI+lG,GACdh5G,MAAK,WAEN,OADA64G,IACIE,GAAYF,EAAWD,EAAap8G,OAC7Bma,EAAMgiG,qBAAqBz9F,EAAQxI,EAAckmG,EAAcC,EAAUn1F,GAE7EA,CACX,GACJ,EACAs0F,EAAkBnoG,UAAU2oD,SAAW,SAAUt9C,EAAQxI,EAAc6jG,GAOnE,OALKA,IAEDA,EAAQD,EAAMt6G,IAAIkf,IAGjBq7F,GAA0B,IAAjBA,EAAM/5G,OAGb6V,KAAKsmG,qBAAqBz9F,EAAQxI,EAAc6jG,EAAO,EAAG,IAFtDx2G,EAAQD,QAAQ,GAG/B,EACAk4G,EAAkB15E,OAAS,CAACq5E,EAA2B,MAChDK,CACX,CAvHsC,CAuHpClC,IAMF,SAAWI,GAKPA,EAAgBA,EAAwB,OAAI,GAAK,SAIjDA,EAAgBA,EAAsB,KAAI,GAAK,OAI/CA,EAAgBA,EAAwB,OAAI,GAAK,SAKjDA,EAAgBA,EAA8B,aAAI,GAAK,cAC1D,CAnBD,CAmBGA,IAAoBA,EAAkB,CAAC,IAK1C,IAAIiD,EAA+C,WAC/C,SAASA,IACL9mG,KAAK+mG,cAAgBpB,EACrB3lG,KAAKgnG,kBAAoBF,EAA8BG,0BAC3D,CAwBA,OApBAH,EAA8BtpG,UAAU0pG,gBAAkB,SAAUv+F,GAEhE,OADA3I,KAAK+mG,cAAgBp+F,EACd3I,IACX,EACA8mG,EAA8BtpG,UAAU2pG,yBAA2B,SAAU1pD,GAEzE,OADAz9C,KAAKgnG,kBAAoBvpD,EAClBz9C,IACX,EACA8mG,EAA8BtpG,UAAU4pG,4BAA8B,WAClE,OAAOpnG,KAAKgnG,iBAChB,EAIAF,EAA8BtpG,UAAUuK,MAAQ,SAAU4lB,GACtD,IAAI05E,EAAY15E,EAAUhkC,IAAIqW,KAAK+mG,eACnCp5E,EAAU6Q,iBAAiBilE,EAAW4D,GACtC15E,EAAU6Q,iBAAiBsoE,EAA+B9mG,KAC9D,EACA8mG,EAA8BG,2BAA6BpD,EAAgB/rB,KACpEgvB,CACX,CA7BkD,GAqClD,SAASQ,EAAoB9lG,EAASooB,GAClC,IAAI9iC,EAAS0a,EAAQ1a,OAErB,GAAIA,aAAkBxF,QAClB,OAAOwF,EAIX,IAAK,IAAIwQ,EAAI,EAAGsI,EAAKgqB,EAAK+a,YAAYx6C,OAAQmN,EAAIsI,EAAItI,IAAK,CACvD,IAAIy3B,EAAanF,EAAK+a,YAAYrtC,GAClC,GAAIy3B,EAAWC,YAAcloC,EAAQ,CACjC,IAAIjE,EAAUksC,EAAWpB,UAAUhkC,IAAI,cACvC,GAAI9G,EACA,OAAOA,EAEX,MAAM,IAAImoB,MAAM,wCAA2CxJ,EAAQ4qB,iBAAmB,KAC1F,CACJ,CACA,MAAM,IAAIphB,MAAM,wCAA2CxJ,EAAQ4qB,iBAAmB,KAC1F,CAEA,SAASm7E,EAAUtjG,EAAYujG,EAAkB36E,GAC7C,IAAI76B,EAAQw1G,EAAiBpjG,SAASyoB,EAAQ,MAC9C,GAAI76B,SAAyCA,aAAiB5G,OAC1D,OAAO4G,EAGX,MAAM,IAAIgZ,MAAM,QAAUw8F,EAAmB,cAAgBvjG,EAAa,kBAAoBjS,EAAQ,4CAC1G,CAMA,SAASy1G,EAAgBxjG,EAAY4oB,GAEjC,IADA,IAIIhkB,EACAxI,EALAqnG,EAAqBzjG,EAClBA,aAAsB,MAAmBA,aAAsB,MAClEA,EAAaA,EAAWA,WAI5B,GAAIA,aAAsB,KACtB4E,GAAS,QAAc5E,EAAW7a,KAAMyjC,EAAQ5oB,EAAW7E,UAC3DiB,EAAe4D,EAAW7a,UAEzB,GAAI6a,aAAsB,KAC3B4E,EAAS0+F,EAAUG,EAAoBzjG,EAAW4E,OAAQgkB,GAC1DxsB,EAAe4D,EAAW7a,SAEzB,MAAI6a,aAAsB,MAK3B,MAAM,IAAI+G,MAAM,eAAiB08F,EAAqB,2DAJtD7+F,EAAS0+F,EAAUG,EAAoBzjG,EAAW4E,OAAQgkB,GAC1DxsB,EAAe4D,EAAWxX,IAAI2X,SAASyoB,EAI3C,CACA,OAAIhkB,QACO,KAEJ,CAAEA,OAAQA,EAAQxI,aAAcA,EAC3C,CAEA,SAASsnG,EAAS31G,GACd,MAAiD,oBAA1C5G,OAAOoS,UAAUtc,SAAS8c,KAAKhM,EAC1C,CAKA,IAAI41G,EAAwC,WACxC,SAASA,EAAuBh9E,GAC5B5qB,KAAK4qB,OAASA,CAClB,CAcA,OAbAg9E,EAAuBpqG,UAAUkW,MAAQ,SAAUre,GAC/C,GAAIsyG,EAAStyG,KATHrD,EASyBqD,EARU,oBAA1CjK,OAAOoS,UAAUtc,SAAS8c,KAAKhM,IAS9B,OAAOqD,EAVnB,IAAkBrD,EAYN61G,EAAeC,EAAsBzyG,EAASnU,YAC9C6mH,EAAW/nG,KAAK4qB,OAAOlX,MAAMm0F,GACjC,GAAIE,aAAoB,MACjBA,aAAoB,MAAgBA,EAASl/F,kBAAkB,KAClE,OAAOk/F,EAAS3+G,KAEpB,MAAM,IAAI4hB,MAAM,iCAAoC+8F,EAAW,IACnE,EACAH,EAAuB37E,OAAS,CAAC,MAC1B27E,CACX,CAlB2C,GAmB3C,SAASE,EAAsB98G,GAE3B,IAGI49C,EAHU,4HAGMtmB,KAAKt3B,IADb,kDAC0Bs3B,KAAKt3B,GAC3C,GAAc,OAAV49C,EACA,MAAM,IAAI59B,MAAM,uCAAyChgB,GAE7D,OAAO49C,EAAM,EACjB,CAEA,IAAIo/D,EACA,SAIAr/F,EAKAs/F,EAMA52F,EAKA67B,EAQAg7D,GACIloG,KAAK2I,KAAOA,EACZ3I,KAAKioG,OAASA,EACdjoG,KAAKqR,QAAUA,EACfrR,KAAKktC,YAAcA,EACnBltC,KAAKkoG,yBAA2BA,CACpC,EASAC,EAAsC,WACtC,SAASA,EAAqBd,EAAWe,EAAgB5oF,GACrDxf,KAAKqnG,UAAYA,EACjBrnG,KAAKooG,eAAiBA,EAEtBpoG,KAAKo2E,SAAW,IAAIvtF,IAEpBmX,KAAKqoG,UAAY,GAIjBroG,KAAKqR,QAAU,GAIfrR,KAAKioG,OAAS,GAIdjoG,KAAKsoG,YAAa,EAElBtoG,KAAKzU,SAAW,IAAI1C,IAEpBmX,KAAKuoG,QAAU,IAAI1/G,IAEnBmX,KAAKwoG,iBAAmB96G,EAAQD,UAChCuS,KAAKyoG,eAAiB,GACtBzoG,KAAK6jG,gBAAkBrkF,aAAkBsnF,EACnCtnF,EAAO4nF,8BACPN,EAA8BG,0BACxC,CAgXA,OA1WAkB,EAAqB3qG,UAAU0C,UAAY,SAAUod,GACjD,IAAIhZ,EAAQtE,KAEZ,OADAA,KAAKyoG,eAAe7+G,KAAK0zB,GAClB,CACH9Y,QAAS,WACL,IAAInX,EAAQiX,EAAMmkG,eAAeliH,QAAQ+2B,IAC1B,IAAXjwB,GAGJiX,EAAMmkG,eAAe9mG,OAAOtU,EAAO,EACvC,EAER,EAMA86G,EAAqB3qG,UAAUkrG,UAAY,SAAU7/F,EAAQq7F,GACzDlkG,KAAKuoG,QAAQ1+G,IAAIgf,EAAQq7F,EAC7B,EAKAiE,EAAqB3qG,UAAUmrG,aAAe,SAAU9/F,GACpD7I,KAAKuoG,QAAQhsF,OAAO1T,GACpB7I,KAAK4oG,mBAAmB,QAAS5oG,KAAKqR,QAAQzpB,QAAO,SAAUoB,GAAU,OAAOA,EAAO6f,SAAWA,CAAQ,IAAI,GAClH,EAIAs/F,EAAqB3qG,UAAUqrG,SAAW,SAAUpvF,EAAS5Q,EAAQxI,GAEjE,IAAIyoG,OADiB,IAAjBzoG,IAA2BA,EAAe,MAG1CyoG,EADiB,OAAjBzoG,EACuBA,EAGAL,KAAKooG,eAAe10F,MAAMrT,GAErD,IAAIrX,EAAS,IAAI86G,EAAe,CAAEiF,mBAAmB,GAAQlgG,EAAQigG,GAAsB,EAAOrvF,GAElG,OADAzZ,KAAK4oG,mBAAmB,WAAY,GAAI,CAAC5/G,IAClCA,CACX,EAIAm/G,EAAqB3qG,UAAUwrG,YAAc,SAAUhgH,IACb,IAAlCgX,KAAKqR,QAAQ9qB,QAAQyC,IACrBgX,KAAK4oG,mBAAmB,QAAS,CAAC5/G,GAAS,GAEnD,EAKAm/G,EAAqB3qG,UAAUyrG,YAAc,SAAU7lE,GACnD,IAAI9+B,EAAQtE,KACZA,KAAKqoG,UAAUz+G,KAAKw5C,GACpBA,EAAS8lE,OAAO,CACZC,KAAM,WACND,OAAQlpG,KAAKqR,QAAQjvB,KAAI,SAAU4G,GAAU,MAAO,CAAGA,OAAQA,EAAQuC,SAAU+Y,EAAM/Y,SAAS5B,IAAIX,GAAY,IAChHogH,SAAU,IAElB,EAKAjB,EAAqB3qG,UAAU6rG,eAAiB,SAAUjmE,GACtD,IAAI9+B,EAAQtE,KACZA,KAAKqoG,UAAU1mG,OAAO3B,KAAKqoG,UAAU9hH,QAAQ68C,GAAW,GACxDA,EAAS8lE,OAAO,CACZC,KAAM,QACND,OAAQ,GACRE,SAAUppG,KAAKqR,QAAQjvB,KAAI,SAAU4G,GAAU,MAAO,CAAGA,OAAQA,EAAQuC,SAAU+Y,EAAM/Y,SAAS5B,IAAIX,GAAY,KAE1H,EAOAm/G,EAAqB3qG,UAAU8rG,gBAAkB,SAAU9nG,EAAS1a,EAAQo9G,GACxElkG,KAAKo2E,SAASvsF,IAAI2X,EAAS,CAAE1a,OAAQA,EAAQo9G,MAAOA,EAAOqF,aAAc,MAC7E,EAKApB,EAAqB3qG,UAAUgsG,kBAAoB,SAAUhoG,GACzDxB,KAAKypG,aAAajoG,GAClBxB,KAAKo2E,SAAS75D,OAAO/a,EACzB,EAKA2mG,EAAqB3qG,UAAUksG,wBAA0B,SAAUx8D,GAC/D,IAAI5oC,EAAQtE,KACZ,GAAIktC,EAAa,CACb,IACIy8D,EADAC,EAAW18D,EAAYrkC,OAAQghG,EAAiB38D,EAAY7sC,aAAcypG,EAAU58D,EAAYg3D,MAQpG,OALIyF,EADAz8D,EAAY7sC,aACE,SAAU5c,GAAK,OAAOA,EAAEolB,SAAW+gG,GAAYnmH,EAAE4c,eAAiBwpG,CAAgB,EAGlF,SAAUpmH,GAAK,OAAOA,EAAEolB,SAAW+gG,CAAU,EAE3DE,EACO,SAAUrmH,GAAK,OAAOkmH,EAAYlmH,IAAM6gB,EAAM+iG,UAAUtB,WAAW+D,EAASrmH,EAAEsgH,KAAO,EAEzF4F,CACX,CAEI,OAAO,WAAc,OAAO,CAAM,CAE1C,EAMAxB,EAAqB3qG,UAAU2oD,SAAW,SAAUjZ,GAChD,IAEI68D,EAFAzlG,EAAQtE,KAGZ,GAAIktC,EAAa,CAEb,IAAI88D,EAAW98D,EAAYrkC,OAAQohG,EAAiB/8D,EAAY7sC,aAAc6pG,EAAUh9D,EAAYg3D,MAEpGgG,EAAUA,GAAWlqG,KAAKuoG,QAAQ5+G,IAAIqgH,GAIlCD,OAF6Bn8G,IAA7Bs/C,EAAY7sC,aAEF,WAAc,OAAOiE,EAAM+iG,UAAUvB,eAAekE,EAAUE,EAAU,EAIxE,WAAc,OAAO5lG,EAAM+iG,UAAUxB,iBAAiBmE,EAAUC,EAAgBC,EAAU,CAE5G,MAGIH,EAAU,WAEN,IADA,IAAIpD,EAAW,GACN3uG,EAAK,EAAGqjC,EAAKhxC,MAAMylC,KAAKxrB,EAAMikG,SAAUvwG,EAAKqjC,EAAGlxC,OAAQ6N,IAAM,CACnE,IAAIk+C,EAAK7a,EAAGrjC,GAAK6Q,EAASqtC,EAAG,GAAIguD,EAAQhuD,EAAG,GAC5CywD,EAAS/8G,KAAK0a,EAAM+iG,UAAUvB,eAAej9F,EAAQq7F,GACzD,CACA,IAAK,IAAI3tD,EAAK,EAAGmH,EAAKrzD,MAAMylC,KAAKxrB,EAAM8xE,UAAW7/B,EAAKmH,EAAGvzD,OAAQosD,IAAM,CACpE,IAAI4zD,EAAKzsD,EAAGnH,GAAK/0C,EAAU2oG,EAAG,GAC1BZ,GAD8BrF,EAAQiG,EAAG,GAAGjG,MAC7BuD,EAAgBjmG,EAAQ4qB,iBAAkB5qB,EAAQqrB,SAChE08E,IAAgBjlG,EAAMikG,QAAQ9+G,IAAI8/G,EAAa1gG,SAGpD89F,EAAS/8G,KAAK0a,EAAM+iG,UAAUxB,iBAAiB0D,EAAa1gG,OAAQ0gG,EAAalpG,aAAc6jG,GACnG,CACA,OAAOx2G,EAAQkT,IAAI+lG,GAAUh5G,MAAK,SAAUy8G,GAAc,OAAOA,EAAW7hH,QAAO,SAAUwO,EAAGC,GAAK,OAAOD,EAAEhQ,OAAOiQ,EAAI,GAAG,GAAK,GACrI,EAGJgJ,KAAKsoG,YAAa,EAClB,IAAI+B,EAAgBrqG,KAAKwoG,iBACpB76G,KAAKo8G,GACLp8G,MAAK,SAAU28G,GAChB,IAAI70E,EAAYnxB,EAAMolG,wBAAwBx8D,GAC1Cq9D,EAAajmG,EAAM+M,QAAQzpB,OAAO6tC,GACtCnxB,EAAMskG,mBAAmB,WAAY2B,EAAYD,GAC7CD,IAAkB/lG,EAAMkkG,mBACxBlkG,EAAMgkG,YAAa,GAEvB,IAAIt/G,EAAS,CACTkkD,YAAaA,EACb82D,WAA8Dp2G,IAAvD08G,EAAWpyG,MAAK,SAAUzU,GAAK,OAAQA,EAAEugH,KAAO,IACvD3yF,QAASi5F,GAGb,OADAhmG,EAAMkmG,gBAAgBt9D,EAAalkD,GAC5BA,CACX,IACK6yC,OAAM,SAAU4uE,GAIjB,OAFAnmG,EAAMgkG,YAAa,EACnBhkG,EAAMkkG,iBAAmB96G,EAAQD,UAC1BC,EAAQ8sC,OAAOiwE,EAC1B,IAEA,OADAzqG,KAAKwoG,iBAAmB6B,EACjBA,CACX,EAMAlC,EAAqB3qG,UAAUpQ,MAAQ,SAAU8/C,GAC7C,IAAIzX,EAAYz1B,KAAK0pG,wBAAwBx8D,GACzCq9D,EAAavqG,KAAKqR,QAAQzpB,OAAO6tC,GACrCz1B,KAAK4oG,mBAAmB,QAAS2B,EAAY,IAC7CvqG,KAAKwqG,gBAAgBt9D,EAAa,KACtC,EAIAi7D,EAAqB3qG,UAAUktG,sBAAwB,SAAUrvE,GAG7D,IAFA,IAAIxyB,EAASwyB,EAAGxyB,OAAQxI,EAAeg7B,EAAGh7B,aACtC9U,EAAW,GACNyM,EAAK,EAAGk+C,EAAK7rD,MAAMylC,KAAK9vB,KAAKo2E,UAAWp+E,EAAKk+C,EAAG/rD,OAAQ6N,IAAM,CACnE,IAAIu+C,EAAKL,EAAGl+C,GAAKwJ,EAAU+0C,EAAG,GAAIzvD,EAASyvD,EAAG,GAAGzvD,OAC7CyiH,EAAe9B,EAAgBjmG,EAAQ4qB,iBAAkB5qB,EAAQqrB,QACjE08E,GAAgBA,EAAa1gG,SAAWA,GAAU0gG,EAAalpG,eAAiBA,GAChF9U,EAAS3B,KAAK9C,EAEtB,CACA,OAAOyE,CACX,EACA48G,EAAqB3qG,UAAUorG,mBAAqB,SAAUO,EAAMoB,EAAYD,GAE5E,IAAIp9D,EAAc,CACdi8D,KAAMA,EACND,OAAQ,GACRE,SAAU,IAGdkB,EAAaA,EAAWnyG,MAAM,GAyC9B,IAxCA,IAAI+/D,EAAU,SAAUyyC,GAEpB,IAAIp/G,EAAWqmG,EAAOrmG,SAAS5B,IAAIghH,GAEnC/Y,EAAOrmG,SAASgxB,OAAOouF,GAEvBz9D,EAAYk8D,SAASx/G,KAAK,CAAEZ,OAAQ2hH,EAAWp/G,SAAUA,IAEzD,IAAIq/G,EAAiBN,EAAW/mF,WAAU,SAAU9/B,GAAK,OAAOA,EAAEsgH,OAAS4G,EAAU5G,MAAQtgH,EAAEolB,SAAW8hG,EAAU9hG,QAAUplB,EAAE4c,eAAiBsqG,EAAUtqG,YAAc,IACzK,IAAwB,IAApBuqG,EAEAhZ,EAAOvgF,QAAQ1P,OAAOiwF,EAAOvgF,QAAQ9qB,QAAQokH,GAAY,GACpDA,EAAU3G,OACXpS,EAAOqW,OAAOtmG,OAAOiwF,EAAOqW,OAAO1hH,QAAQokH,GAAY,OAG1D,CAED,IAAIE,EAAYP,EAAW3oG,OAAOipG,EAAgB,GAAG,GAEjDE,EAAalZ,EAAO8Y,sBAAsBG,GAC9CjZ,EAAOrmG,SAAS1B,IAAIghH,EAAWC,GAE/B59D,EAAYg8D,OAAOt/G,KAAK,CAAEZ,OAAQ6hH,EAAWt/G,SAAUu/G,IAGvDlZ,EAAOvgF,QAAQ1P,OAAOiwF,EAAOvgF,QAAQ9qB,QAAQokH,GAAY,EAAGE,IACvDF,EAAU3G,OAAS6G,EAAU7G,MAC9BpS,EAAOqW,OAAOtmG,OAAOiwF,EAAOqW,OAAO1hH,QAAQokH,GAAY,GAEjDA,EAAU3G,OAAU6G,EAAU7G,MAG9B6G,EAAU7G,OAChBpS,EAAOqW,OAAOr+G,KAAKihH,GAHnBjZ,EAAOqW,OAAOtmG,OAAOiwF,EAAOqW,OAAO1hH,QAAQokH,GAAY,EAAGE,EAKlE,CACJ,EACIjZ,EAAS5xF,KAEJhI,EAAK,EAAG+yG,EAAeR,EAAYvyG,EAAK+yG,EAAa5gH,OAAQ6N,IAElEkgE,EADgB6yC,EAAa/yG,IAIjC,IAAK,IAAIqjC,EAAK,EAAG2vE,EAAeV,EAAYjvE,EAAK2vE,EAAa7gH,OAAQkxC,IAAM,CACxE,IAAIryC,EAASgiH,EAAa3vE,GACtB9vC,EAAWyU,KAAK0qG,sBAAsB1hH,GAC1CkkD,EAAYg8D,OAAOt/G,KAAK,CAAEZ,OAAQA,EAAQuC,SAAUA,IACpDyU,KAAKzU,SAAS1B,IAAIb,EAAQuC,GAC1ByU,KAAKqR,QAAQznB,KAAKZ,GACbA,EAAOg7G,OACRhkG,KAAKioG,OAAOr+G,KAAKZ,EAEzB,CAEA,IAAK,IAAIktD,EAAK,EAAGK,EAAKv2C,KAAKqoG,UAAWnyD,EAAKK,EAAGpsD,OAAQ+rD,IACnCK,EAAGL,GACTgzD,OAAOh8D,EAExB,EAIAi7D,EAAqB3qG,UAAUytG,gBAAkB,SAAUzpG,GACvD,GAAKA,EAAQsrB,QAAb,CAGA,IACIo3E,EADAqF,EAAe9B,EAAgBjmG,EAAQ4qB,iBAAkB5qB,EAAQqrB,QAEjEq+E,EAAoBlrG,KAAKo2E,SAASzsF,IAAI6X,GAK1C,GAJI0pG,IACAhH,EAAQgH,EAAkBhH,MAC1BgH,EAAkB3B,aAAeA,GAEhCA,EAAL,CAGA,IAAI1gG,EAAS0gG,EAAa1gG,OAAQxI,EAAekpG,EAAalpG,aAC9DL,KAAKmmD,SAAS,CAAEt9C,OAAQA,EAAQxI,aAAcA,EAAc6jG,MAAOA,GAFnE,CAVA,CAaJ,EAIAiE,EAAqB3qG,UAAUisG,aAAe,SAAUjoG,GACpD,IAAI0pG,EAAoBlrG,KAAKo2E,SAASzsF,IAAI6X,GACtC+nG,EAAe9B,EAAgBjmG,EAAQ4qB,iBAAkB5qB,EAAQqrB,QAOrE,IANK08E,GAAgB2B,IACjB3B,EAAe2B,EAAkB3B,cAEjC2B,IACAA,EAAkB3B,aAAe,MAEhCA,EAAL,CAGA,IAAI1gG,EAAS0gG,EAAa1gG,OAAQxI,EAAekpG,EAAalpG,aAC9DL,KAAK5S,MAAM,CAAEyb,OAAQA,EAAQxI,aAAcA,GAF3C,CAGJ,EAKA8nG,EAAqB3qG,UAAU2tG,cAAgB,SAAUC,GACrDprG,KAAK6jG,gBAAkBuH,EAEvB,IADA,IACSpzG,EAAK,EAAGqzG,EADFhhH,MAAMylC,KAAK9vB,KAAKo2E,SAAS5pF,QACAwL,EAAKqzG,EAAWlhH,OAAQ6N,IAAM,CAClE,IAAIwJ,EAAU6pG,EAAWrzG,GACrB60B,EAASrrB,EAAQqrB,OACrBrrB,EAAQuK,SACRvK,EAAQkK,KAAKmhB,EACjB,CACJ,EAIAs7E,EAAqB3qG,UAAU8tG,iBAAmB,WAC9C,IAAK,IAAItzG,EAAK,EAAGqjC,EAAKr7B,KAAKioG,OAAQjwG,EAAKqjC,EAAGlxC,OAAQ6N,IAAM,CACrD,IAAIk+C,EAAK7a,EAAGrjC,GAAK6Q,EAASqtC,EAAGrtC,OAAQxI,EAAe61C,EAAG71C,aAAc0jG,EAAO7tD,EAAG6tD,KAC/E,IAAIA,EAAKgF,kBAAT,CAGA,IAAI7E,EAAQ,CAAC,CAACH,IACd/jG,KAAKmmD,SAAS,CAAEt9C,OAAQA,EAAQxI,aAAcA,EAAc6jG,MAAOA,GAFnE,CAGJ,CACJ,EACAiE,EAAqB3qG,UAAUgtG,gBAAkB,SAAUt9D,EAAalkD,GACpE,GAAmC,IAA/BgX,KAAKyoG,eAAet+G,OAIxB,IADA,IAAIyyB,EAAQ,IAAIorF,EAAch/G,EAAS,WAAa,QAASgX,KAAKioG,OAAQjoG,KAAKqR,QAAS67B,GAAe,KAAMlkD,GACpGsO,EAAI,EAAGA,EAAI0I,KAAKyoG,eAAet+G,OAAQmN,IAC5C0I,KAAKyoG,eAAenxG,GAAGslB,EAE/B,EACAurF,EAAqBl8E,OAAS,CAACw3E,EAAWmE,EAAwBd,GAC3DqB,CACX,CA/YyC,GAoZrCoD,EAA6C,WAC7C,SAASA,EAA4BpjG,GACjCnI,KAAKmI,UAAYA,CACrB,CAkEA,OAjEAojG,EAA4B/tG,UAAUkO,KAAO,SAAUlK,EAASqrB,EAAQ2+E,EAAmBtH,GACvF,IAIIn1E,EAJAzqB,EAAQtE,KAERlZ,EAASwgH,EAAoB9lG,EAASqrB,GAU1C,GAPI2+E,aAA6BrD,EAC7Bp5E,EAAay8E,GAGbz8E,EAAalC,EAAOc,UAAUhkC,IAAI,QAAYw+G,IAC9CjE,EAAQsH,GAEO,OAAfz8E,EACA,MAAM,IAAI/jB,MAAM,mDAEpB+jB,EAAWu6E,gBAAgB9nG,EAAS1a,EAAQo9G,GAC5C1iG,EAAQiqG,qBAAuB18E,EAC/B,IAAI0uB,EAAUz9C,KAAK0rG,mBAAmB38E,GAElC0uB,EAAUomD,EAAgB8H,SAC1BnqG,EAAQoqG,gBAAkBpqG,EAAQorB,aAGlCprB,EAAQorB,aAAe,SAAU56B,GAC7BgO,KAAK4rG,gBAAgB55G,GACrBgO,KAAKyrG,qBAAqBR,gBAAgBjrG,KAC9C,GAGAy9C,EAAUomD,EAAgB/rB,OAC1Bt2E,EAAQqqG,oBAAsB,WAC1BvnG,EAAM6D,UAAUW,gBAAe,WAAc,OAAOimB,EAAWk8E,gBAAgBzpG,EAAU,GAC7F,EACAA,EAAQsnE,eAAiBhiF,EACzBA,EAAO2N,iBAAiB,OAAQ+M,EAAQqqG,sBAExCpuD,IAAYomD,EAAgBiI,SAC5BtqG,EAAQuqG,qBAAuBvqG,EAAQkrB,aAGvClrB,EAAQkrB,aAAe,SAAU16B,GAC7BgO,KAAK+rG,qBAAqB/5G,GAC1BgO,KAAKyrG,qBAAqBhC,aAAazpG,KAC3C,EAER,EACAurG,EAA4B/tG,UAAUuO,OAAS,SAAUvK,GAEjDA,EAAQoqG,kBACRpqG,EAAQorB,aAAeprB,EAAQoqG,gBAC/BpqG,EAAQoqG,gBAAkB,MAE1BpqG,EAAQuqG,uBACRvqG,EAAQkrB,aAAelrB,EAAQuqG,qBAC/BvqG,EAAQuqG,qBAAuB,MAE/BvqG,EAAQqqG,sBACRrqG,EAAQsnE,eAAep0E,oBAAoB,OAAQ8M,EAAQqqG,qBAC3DrqG,EAAQqqG,oBAAsB,KAC9BrqG,EAAQsnE,eAAiB,MAE7BtnE,EAAQiqG,qBAAqBjC,kBAAkBhoG,GAC/CA,EAAQiqG,qBAAuB,IACnC,EACOF,CACX,CAtEgD,GA6E5CS,EAAyC,SAAU1xD,GAEnD,SAAS0xD,IACL,OAAkB,OAAX1xD,GAAmBA,EAAOvyC,MAAM/H,KAAM9V,YAAc8V,IAC/D,CAQA,OAXAi6C,EAAU+xD,EAAyB1xD,GAInC0xD,EAAwBxuG,UAAUkuG,mBAAqB,SAAU38E,GAC7D,OAAOA,EAAW80E,eACtB,EACAmI,EAAwB//E,OAAS,CAAC,KACR6P,EAAW,EACjC,QAAgB,aACjBkwE,EAEP,CAb4C,CAa1CT,GAMEU,EAAiD,SAAU3xD,GAE3D,SAAS2xD,IACL,OAAkB,OAAX3xD,GAAmBA,EAAOvyC,MAAM/H,KAAM9V,YAAc8V,IAC/D,CAQA,OAXAi6C,EAAUgyD,EAAiC3xD,GAI3C2xD,EAAgCzuG,UAAUkuG,mBAAqB,WAC3D,OAAO7H,EAAgBiI,MAC3B,EACAG,EAAgChgF,OAAS,CAAC,KACR6P,EAAW,EACzC,QAAgB,qBACjBmwE,EAEP,CAboD,CAalDV,GAKEW,EAA+C,SAAU5xD,GAEzD,SAAS4xD,IACL,OAAkB,OAAX5xD,GAAmBA,EAAOvyC,MAAM/H,KAAM9V,YAAc8V,IAC/D,CAQA,OAXAi6C,EAAUiyD,EAA+B5xD,GAIzC4xD,EAA8B1uG,UAAUkuG,mBAAqB,WACzD,OAAO7H,EAAgB/rB,IAC3B,EACAo0B,EAA8BjgF,OAAS,CAAC,KACR6P,EAAW,EACvC,QAAgB,mBACjBowE,EAEP,CAbkD,CAahDX,GAMEY,EAAiD,SAAU7xD,GAE3D,SAAS6xD,IACL,OAAkB,OAAX7xD,GAAmBA,EAAOvyC,MAAM/H,KAAM9V,YAAc8V,IAC/D,CAQA,OAXAi6C,EAAUkyD,EAAiC7xD,GAI3C6xD,EAAgC3uG,UAAUkuG,mBAAqB,WAC3D,OAAO7H,EAAgB8H,MAC3B,EACAQ,EAAgClgF,OAAS,CAAC,KACR6P,EAAW,EACzC,QAAgB,qBACjBqwE,EAEP,CAboD,CAalDZ,GAMEa,EAAuD,SAAU9xD,GAEjE,SAAS8xD,IACL,OAAkB,OAAX9xD,GAAmBA,EAAOvyC,MAAM/H,KAAM9V,YAAc8V,IAC/D,CAQA,OAXAi6C,EAAUmyD,EAAuC9xD,GAIjD8xD,EAAsC5uG,UAAUkuG,mBAAqB,WACjE,OAAO7H,EAAgBwI,YAC3B,EACAD,EAAsCngF,OAAS,CAAC,KACR6P,EAAW,EAC/C,QAAgB,2BACjBswE,EAEP,CAb0D,CAaxDb,GAKEe,EAA6C,WAC7C,SAASA,EAA4B3+E,GACjC3tB,KAAK2tB,UAAYA,CACrB,CAwBA,OAvBA2+E,EAA4B3iH,IAAM,SAAUgkC,GACxC,OAAO,IAAI2+E,EAA4B3+E,EAC3C,EAIA2+E,EAA4B9uG,UAAUc,OAAS,SAAU+oG,GAChDA,IACDA,EAAYrnG,KAAK2tB,UAAUhkC,IAAI85G,IAEnC,IAAI2E,EAAiBpoG,KAAK2tB,UAAUhkC,IAAIi+G,GACpCpoF,EAASxf,KAAK2tB,UAAUhkC,IAAIm9G,GAChC,OAAO,IAAIqB,EAAqBd,EAAWe,EAAgB5oF,EAC/D,EAKA8sF,EAA4B9uG,UAAU+uG,sBAAwB,SAAUlF,GACpE,IAAIt4E,EAAa/uB,KAAK1B,OAAO+oG,GAE7B,OADArnG,KAAK2tB,UAAU6Q,iBAAiB2pE,EAAsBp5E,GAC/CA,CACX,EACOu9E,CACX,CA5BgD,GA6BhDA,EAA4B,8BAA+B,EAE3D,IAAIE,EAAiD,WACjD,SAASA,EAAgCC,EAAiBC,GACtD1sG,KAAKysG,gBAAkBA,EACvBzsG,KAAK0sG,mBAAqBA,EAC1B1sG,KAAK+uB,WAAa,KAClB/uB,KAAKioG,OAAS,GACdjoG,KAAK2sG,eAAiB,EAC1B,CA+DA,OA9DAH,EAAgCvgF,OAAS,WACrC,MAAO,CAAC,aAAa,QAAQk8E,GACjC,EACAqE,EAAgChvG,UAAUvU,KAAO,WAC7C+W,KAAK2sG,eAAe1jH,MAAK,SAAU8N,EAAGC,GAClC,OAAID,EAAE61G,QAAQ,KAAO51G,EAAE41G,QAAQ,GACpB,EAGiD,EAArD71G,EAAE61G,QAAQ,GAAGC,wBAAwB71G,EAAE41G,QAAQ,IAAU,GAAK,CACzE,GACJ,EACAJ,EAAgChvG,UAAUsvG,oBAAsB,SAAUvhH,GACtE,IAAI+Y,EAAQtE,KACZ,OAAOzU,EAAS3D,QAAO,SAAUurC,GAAK,OAAO7uB,EAAMmoG,gBAAgBj8G,SAAS2iC,EAAI,GACpF,EACAq5E,EAAgChvG,UAAU0rG,OAAS,SAAUh8D,GAQzD,IAPA,IAAIgrB,EAAU,SAAUlvE,GACpB,IAAIqE,EAAQukG,EAAO+a,eAAeppF,WAAU,SAAU9/B,GAAK,OAAOA,EAAEimB,QAAU1gB,CAAQ,KACvE,IAAXqE,GACAukG,EAAO+a,eAAehrG,OAAOtU,EAAO,EAE5C,EACIukG,EAAS5xF,KACJhI,EAAK,EAAGqjC,EAAK6R,EAAYk8D,SAAUpxG,EAAKqjC,EAAGlxC,OAAQ6N,IAExDkgE,EADIlvE,EAASqyC,EAAGrjC,GAAIhP,QAGxB,IAAK,IAAIktD,EAAK,EAAGK,EAAKrJ,EAAYg8D,OAAQhzD,EAAKK,EAAGpsD,OAAQ+rD,IAAM,CAC5D,IAAIwH,EAAKnH,EAAGL,GAAKltD,EAAS00D,EAAG10D,OAAQuC,EAAWmyD,EAAGnyD,SACnD,IAAIvC,EAAOg7G,MAAX,CAGA,IAAI4I,EAAU5sG,KAAK8sG,oBAAoBvhH,GACnCqhH,EAAQziH,QACR6V,KAAK2sG,eAAe/iH,KAAK,CAAE8f,MAAO1gB,EAAQ4jH,QAASA,GAHvD,CAKJ,CACA5sG,KAAK/W,OACL+W,KAAKioG,OAASjoG,KAAK2sG,cACvB,EACAH,EAAgChvG,UAAUkO,KAAO,WACxC1L,KAAK+uB,aACN/uB,KAAK+uB,WAAa/uB,KAAK0sG,sBAG3B1sG,KAAK+uB,WAAWk6E,YAAYjpG,KAChC,EACAwsG,EAAgChvG,UAAUuO,OAAS,WAC3C/L,KAAK+uB,YACL/uB,KAAK+uB,WAAWs6E,eAAerpG,KAEvC,EACA87B,EAAW,EACP,QAAS,CAAEuuC,mBAAoB,eAChCmiC,EAAgChvG,UAAW,kBAAc,GAC5Ds+B,EAAW,EACP,QAAS,CAAE+uC,iBAAiB,EAAMR,mBAAoB,eACvDmiC,EAAgChvG,UAAW,cAAU,GACtBs+B,EAAW,EACzC,QAAgB,sBACjB0wE,EAEP,CAvEoD,GAyEhDO,EAAmD,WACnD,SAASA,IACT,CAiBA,OAhBAA,EAAkCvvG,UAAU+uE,QAAU,SAAU3iD,GAC5D5pB,KAAK2tB,UAAY/D,EAAK+D,SAC1B,EACAo/E,EAAkCvvG,UAAUkO,KAAO,WAC/C1L,KAAK+uB,WAAa/uB,KAAK2tB,UAAUhkC,IAAIw+G,GACrCnoG,KAAKojC,SAAWpjC,KAAK2tB,UAAUhkC,IAAIqW,KAAKhO,OACxCgO,KAAK+uB,WAAWk6E,YAAYjpG,KAAKojC,SACrC,EACA2pE,EAAkCvvG,UAAUuO,OAAS,WACjD/L,KAAK+uB,WAAWs6E,eAAerpG,KAAKojC,UACpCpjC,KAAK+uB,WAAa,KAClB/uB,KAAKojC,SAAW,IACpB,EACoCtH,EAAW,EAC3C,QAAgB,wBACjBixE,EAEP,CApBsD,GAyBlDC,EAAsC,WACtC,SAASA,EAAqB33G,EAAU8X,EAAWqS,EAAQytF,EAAcC,EAAaC,QACnE,IAAX3tF,IAAqBA,EAAS,CAAC,GACnCxf,KAAKitG,aAAeA,EACpBjtG,KAAKktG,YAAcA,EACnBltG,KAAKmtG,QAAUA,EACfntG,KAAK+jG,KAAO,CACR1uG,SAAUA,EACV8X,UAAWA,EACXqS,OAAQA,EACRonF,KAAM,KACNZ,WAAY,UACZvsF,QAAS,KACT+sF,SAAU0G,EAAY1G,UAE1BxmG,KAAKitG,aAAaG,SAASptG,KAAK+jG,KACpC,CA0LA,OApLAiJ,EAAqBxvG,UAAU7P,KAAO,WAElC,OADAqS,KAAKktG,YAAY1G,WACVxmG,IACX,EAIAgtG,EAAqBxvG,UAAU6vG,eAAiB,SAAU5gH,GAGtD,OAFAuT,KAAK+jG,KAAKiC,WAAav5G,EACvBuT,KAAK+jG,KAAKtqF,QAAU,KACbzZ,IACX,EAIAgtG,EAAqBxvG,UAAU8vG,YAAc,SAAU7zF,GAGnD,OAFAzZ,KAAK+jG,KAAKiC,WAAa,SACvBhmG,KAAK+jG,KAAKtqF,QAAUzZ,KAAKmtG,QAAQ1zF,QAAQ/F,MAAM+F,GACxCzZ,IACX,EAMAgtG,EAAqBxvG,UAAUopG,KAAO,SAAUz5F,GAE5C,OADAnN,KAAK+jG,KAAK6C,KAAOz5F,EACVnN,IACX,EAKAgtG,EAAqBxvG,UAAUuT,IAAM,SAAUA,GAE3C,OADA/Q,KAAK+jG,KAAKhzF,IAAMA,EACT/Q,IACX,EAMAgtG,EAAqBxvG,UAAU+vG,OAAS,SAAUz+C,GAC9C,OAAO9uD,KAAKitG,aAAaM,OAAOz+C,EACpC,EAIAk+C,EAAqBxvG,UAAUgwG,aAAe,WAC1C,OAAOxtG,KAAKitG,aAAaO,cAC7B,EACApiH,OAAOgS,eAAe4vG,EAAqBxvG,UAAW,QAAS,CAI3D7T,IAAK,WACD,OAAOqW,KAAKitG,aAAa/I,KAC7B,EACAjnG,YAAY,EACZC,cAAc,IAMlB8vG,EAAqBxvG,UAAUiwG,GAAK,SAAU3mH,GAC1C,OAAOkZ,KAAKitG,aAAaQ,GAAG3mH,EAChC,EAQAkmH,EAAqBxvG,UAAUkwG,UAAY,SAAUvgG,EAAWqS,GAC5D,OAAOxf,KAAKktG,YAAYQ,UAAUvgG,EAAWqS,EACjD,EAMAwtF,EAAqBxvG,UAAUmwG,cAAgB,SAAUvkH,GAGrD,IAFA,IAAIiyC,EACAjxC,EAAO,GACF4N,EAAK,EAAGA,EAAK9N,UAAUC,OAAQ6N,IACpC5N,EAAK4N,EAAK,GAAK9N,UAAU8N,GAE7B,OAAQqjC,EAAKr7B,KAAKktG,aAAaS,cAAc5lG,MAAMszB,EAAIqoE,EAAe,CAACt6G,GAAOgB,GAClF,EAKA4iH,EAAqBxvG,UAAUunG,SAAW,WACtC,OAAO/kG,KAAKktG,YAAYnI,UAC5B,EAMAiI,EAAqBxvG,UAAU4sD,QAAU,SAAU6H,GAC/C,OAAOjyD,KAAKktG,YAAY9iD,QAAQ6H,EACpC,EAKA+6C,EAAqBxvG,UAAUwnG,MAAQ,WACnC,OAAOhlG,KAAKktG,YAAYlI,OAC5B,EAKAgI,EAAqBxvG,UAAU4I,UAAY,SAAUjc,GACjD,OAAO6V,KAAKktG,YAAY9mG,UAAUjc,EACtC,EAKA6iH,EAAqBxvG,UAAUynG,UAAY,SAAU96G,GACjD,OAAO6V,KAAKktG,YAAYjI,UAAU96G,EACtC,EAKA6iH,EAAqBxvG,UAAU0nG,SAAW,SAAUp+F,GAChD,OAAO9G,KAAKktG,YAAYhI,SAASp+F,EACrC,EAKAkmG,EAAqBxvG,UAAU2nG,SAAW,SAAUr+F,GAChD,OAAO9G,KAAKktG,YAAY/H,SAASr+F,EACrC,EAMAkmG,EAAqBxvG,UAAU3b,IAAM,SAAUmQ,GAC3C,OAAOgO,KAAKktG,YAAYrrH,IAAImQ,EAChC,EAMAg7G,EAAqBxvG,UAAU5b,IAAM,SAAUoQ,GAC3C,OAAOgO,KAAKktG,YAAYtrH,IAAIoQ,EAChC,EAMAg7G,EAAqBxvG,UAAU4nG,MAAQ,SAAUvjH,EAAKD,GAClD,OAAOoe,KAAKktG,YAAY9H,MAAMvjH,EAAKD,EACvC,EAMAorH,EAAqBxvG,UAAU6nG,QAAU,SAAUxjH,EAAKD,GACpD,OAAOoe,KAAKktG,YAAY7H,QAAQxjH,EAAKD,EACzC,EAKAorH,EAAqBxvG,UAAUoI,OAAS,SAAUgoG,GAC9C,OAAO5tG,KAAKktG,YAAYtnG,OAAOgoG,EACnC,EACOZ,CACX,CA3MyC,GA+MrCa,EAA6B,WAC7B,SAASA,EAAYZ,EAAcE,EAAS93G,GACxC2K,KAAKitG,aAAeA,EACpBjtG,KAAKmtG,QAAUA,EACfntG,KAAK3K,SAAWA,EAMhB2K,KAAKwmG,SAAW,CACpB,CAwJA,OApJAqH,EAAYrwG,UAAUioG,YAAc,SAAUr8G,GAE1C,OADA4W,KAAK3K,SAASowG,YAAcr8G,EACrB4W,IACX,EAOA6tG,EAAYrwG,UAAUkwG,UAAY,SAAUvgG,EAAWqS,GACnD,OAAO,IAAIwtF,EAAqBhtG,KAAK3K,SAAU8X,EAAWqS,EAAQxf,KAAKitG,aAAcjtG,KAAMA,KAAKmtG,QACpG,EAMAU,EAAYrwG,UAAUmwG,cAAgB,SAAUvkH,GAG5C,IAFA,IAAIkb,EAAQtE,KACR5V,EAAO,GACF4N,EAAK,EAAGA,EAAK9N,UAAUC,OAAQ6N,IACpC5N,EAAK4N,EAAK,GAAK9N,UAAU8N,GAE7B,IAAI+rG,EAAO8J,EAAYC,YAAY1kH,GACnC,IAAK26G,EAAM,CAGP,IADAA,EAAO/jG,KAAK5W,cACQmb,SAChB,OAAOw/F,EAAK/lG,KAAK+J,MAAMg8F,EAAML,EAAe,CAAC1jG,MAAO5V,IAExD,MAAM,IAAI4gB,MAAM,mBAAsB5hB,EAAO,oBACjD,CACA,IAAIo2B,EAASukF,EAAKgK,aAAehK,EAAKgK,aAAahmG,MAAMg8F,EAAM35G,QAAQwD,EACvE,OAAOoS,KAAK0tG,WAAU,SAAU17G,EAAO4L,GACnC,IAAIy9B,EACJ,OAAQA,EAAK0oE,EAAK52F,WAAWnP,KAAK+J,MAAMszB,EAAIqoE,EAAe,CAACp/F,EAAOtS,EAAO4L,GAAMxT,GACpF,GAAGo1B,GACE6tF,eAAejkH,EACxB,EAKAykH,EAAYrwG,UAAUunG,SAAW,WAC7B,OAAO/kG,KAAK0tG,WAAU,SAAU17G,GAC5B,OAAOA,WAEE21G,EAAS31G,KAAW,KAAKrP,KAAKqP,GAC3C,IAAGq7G,eAAe,WACtB,EAMAQ,EAAYrwG,UAAU4sD,QAAU,SAAU6H,GACtC,OAAOjyD,KAAK0tG,WAAU,SAAU17G,GAAS,OAAOA,SAA0D,IAAjBA,EAAM7H,QAAgB8nE,EAAMtvE,KAAKqP,EAAQ,IAC7Hq7G,eAAe,UACxB,EAKAQ,EAAYrwG,UAAUwnG,MAAQ,WAG1B,OAAOhlG,KAAKoqD,QAAQ,yIAEfijD,eAAe,QACxB,EAKAQ,EAAYrwG,UAAU4I,UAAY,SAAUjc,GACxC,OAAO6V,KAAK0tG,WAAU,SAAU17G,GAAS,OAAOA,SAA0D,IAAjBA,EAAM7H,QAAgB6H,EAAM7H,QAAUA,CAAQ,GAAG,CAAEA,OAAQA,IAC/IkjH,eAAe,YACxB,EAKAQ,EAAYrwG,UAAUynG,UAAY,SAAU96G,GACxC,OAAO6V,KAAK0tG,WAAU,SAAU17G,GAAS,OAAOA,SAA0D,IAAjBA,EAAM7H,QAAgB6H,EAAM7H,QAAUA,CAAQ,GAAG,CAAEA,OAAQA,IAC/IkjH,eAAe,YACxB,EAKAQ,EAAYrwG,UAAU0nG,SAAW,SAAUp+F,GACvC,OAAO9G,KAAK0tG,WAAU,SAAU17G,GAAS,OAAOA,SAAyCA,EAAM7H,QAAU2c,CAAO,GAAG,CAAEA,MAAOA,IACvHumG,eAAe,WACxB,EAKAQ,EAAYrwG,UAAU2nG,SAAW,SAAUr+F,GACvC,OAAO9G,KAAK0tG,WAAU,SAAU17G,GAAS,OAAOA,SAAyCA,EAAM7H,QAAU2c,CAAO,GAAG,CAAEA,MAAOA,IACvHumG,eAAe,WACxB,EAMAQ,EAAYrwG,UAAU3b,IAAM,SAAUmsH,GAClC,OAAOhuG,KAAK0tG,WAAU,SAAU17G,GAAS,OAAOA,SAAyCA,GAASg8G,CAAY,GAAG,CAAEA,WAAYA,IAC1HX,eAAe,MACxB,EAMAQ,EAAYrwG,UAAU5b,IAAM,SAAUosH,GAClC,OAAOhuG,KAAK0tG,WAAU,SAAU17G,GAAS,OAAOA,SAAyCA,GAASg8G,CAAY,GAAG,CAAEA,WAAYA,IAC1HX,eAAe,MACxB,EAMAQ,EAAYrwG,UAAU4nG,MAAQ,SAAUvjH,EAAKD,GACzC,OAAOoe,KAAK0tG,WAAU,SAAU17G,GAAS,OAAOA,SAA0CA,GAASnQ,GAAOmQ,GAASpQ,CAAM,GAAG,CAAEC,IAAKA,EAAKD,IAAKA,IACxIyrH,eAAe,QACxB,EAMAQ,EAAYrwG,UAAU6nG,QAAU,SAAUxjH,EAAKD,GAC3C,OAAOoe,KAAK0tG,WAAU,SAAU17G,GAAS,OAAOA,SAA0CA,EAAQnQ,GAAOmQ,EAAQpQ,CAAM,GAAG,CAAEC,IAAKA,EAAKD,IAAKA,IACtIyrH,eAAe,UACxB,EAKAQ,EAAYrwG,UAAUoI,OAAS,SAAUgoG,GACrC,OAAO5tG,KAAK0tG,WAAU,SAAU17G,GAAS,OAAOA,SAAmD,KAAVA,GAAgBA,IAAU47G,CAAe,GAAG,CAAEA,cAAeA,IACjJP,eAAe,SACxB,EACAQ,EAAYC,YAAc,CAAC,EACpBD,CACX,CApKgC,GAwK5BI,EAA8B,WAC9B,SAASA,EAAad,GAClBntG,KAAKmtG,QAAUA,EAIfntG,KAAKkkG,MAAQ,EACjB,CAwDA,OAlDA+J,EAAazwG,UAAU+vG,OAAS,SAAUl4G,GACtC2K,KAAKkuG,oBACL,IAAI9kH,EAAO4W,KAAKmtG,QAAQ93G,SAASqe,MAAMre,GACnC63G,EAAc,IAAIW,EAAY7tG,KAAMA,KAAKmtG,QAAS,CAAE/jH,KAAMA,EAAMq8G,YAAa,OACjF,OAAOzlG,KAAKmuG,WAAWjB,EAAa9jH,EACxC,EAIA6kH,EAAazwG,UAAUgwG,aAAe,WAClCxtG,KAAKkuG,oBACL,IAAIhB,EAAc,IAAIW,EAAY7tG,KAAMA,KAAKmtG,QAAS,CAAE/jH,KAAM,KAAMq8G,YAAa,OACjF,OAAOzlG,KAAKmuG,WAAWjB,EAAa,KACxC,EAKAe,EAAazwG,UAAUiwG,GAAK,SAAU3mH,GAElC,OADAm9G,EAAMp6G,IAAI/C,EAAQkZ,KAAKkkG,OAChBlkG,IACX,EAKAiuG,EAAazwG,UAAU4vG,SAAW,SAAUrJ,GACxC,KAAO/jG,KAAKkkG,MAAM/5G,OAAS45G,EAAKyC,SAAW,GACvCxmG,KAAKkkG,MAAMt6G,KAAK,IAEpBoW,KAAKkkG,MAAMH,EAAKyC,UAAU58G,KAAKm6G,EACnC,EACAkK,EAAazwG,UAAU0wG,kBAAoB,WACvC,IAAIluG,KAAKmtG,QAGT,MAAM,IAAIniG,MAAM,2EACpB,EACAijG,EAAazwG,UAAU2wG,WAAa,SAAUjB,EAAa7sG,GAEvD,IAAI+tG,EAAgBpuG,KAAKkkG,MAAMhsG,MAAK,SAAUigC,GAAK,OAAOA,EAAEhuC,OAAS,GAAKguC,EAAE,GAAG9iC,SAASjM,MAAQiX,CAAc,IAC9G,GAAI+tG,EAAe,CACf,IAAIrK,EAAOqK,EAAcA,EAAcjkH,OAAS,GAChD+iH,EAAY1G,SAAWzC,EAAKyC,SACM,OAA9BzC,EAAK1uG,SAASowG,cACdyH,EAAcA,EAAYzH,YAAY1B,EAAK1uG,SAASowG,aAE5D,CACA,OAAOyH,CACX,EACOe,CACX,CAhEiC,GAoE7BI,EAAiC,WACjC,SAASA,IACT,CAsDA,OArDAA,EAAgB3gF,WAAa,SAAU4gF,EAAelG,GAClDpoG,KAAKmtG,QAAU,CACX1zF,QAAS60F,EACTj5G,SAAU+yG,EAElB,EAKAiG,EAAgBd,OAAS,SAAUl4G,GAC/B,OAAO,IAAI44G,EAAaI,EAAgBlB,SAASI,OAAOl4G,EAC5D,EAIAg5G,EAAgBb,aAAe,WAC3B,OAAO,IAAIS,EAAaI,EAAgBlB,SAASK,cACrD,EASAa,EAAgBE,WAAa,SAAUnlH,EAAM+jB,EAAWsM,EAASs0F,GAC7DjJ,EAAmB17G,GAAQqwB,EAC3Bo0F,EAAYC,YAAY1kH,GAAQ,CAAE+jB,UAAWA,EAAW4gG,aAAcA,EAC1E,EAMAM,EAAgBG,YAAc,SAAUtK,EAAOnzF,GAC3C,OAAOmzF,EAAM9hH,KAAI,SAAUqB,GAAK,OAAOA,EAAEmE,QAAO,SAAUuwC,GAAK,OAAOA,EAAEpnB,MAAQA,CAAK,GAAI,GAC7F,EAKAs9F,EAAgBI,cAAgB,SAAUvK,GACtC,OAAOA,EAAM9hH,KAAI,SAAUqB,GAAK,OAAOA,EAAEmE,QAAO,SAAUuwC,GAAK,YAAiBvqC,IAAVuqC,EAAEpnB,GAAmB,GAAI,GACnG,EAKAs9F,EAAgBK,IAAM,SAAU5nH,GAC5Bm9G,EAAMpqB,MAAM/yF,EAChB,EACOunH,CACX,CAzDoC,GA+DpC,SAASr0E,EAET0M,EAAiBppB,GAGb,IAAIgxF,EAAgB5nE,EAAgB/Y,UAAUhkC,IAAI46G,GAC9C6D,EAAiB1hE,EAAgB/Y,UAAUhkC,IAAIi+G,GACnDyG,EAAgB3gF,WAAW4gF,EAAelG,GAE1C,IAAI5oF,EAAS,IAAIsnF,EACbxpF,aAAoB/Y,UACpB+Y,EAASkC,GAEbA,EAAOzX,MAAM2+B,EAAgB/Y,WAEzB+Y,EAAgB9C,iBAChB8C,EAAgB9C,gBAAgBooE,EAAyBC,EAAiCC,EAA+BC,EAAiCC,EAAuCI,EAAiCO,EAE1O,+CC7zDIrqD,YAEJt3D,OAAOgS,eAAe,KAAU,SAAU,CACxCzT,IAAK,WACH,OAAO+4D,IAAWA,EAAS,WAC7B,EACA74D,IAAK,SAASmI,GACZ0wD,EAAS1wD,CACX,wBCFQmhC,sBAAAA,EAA+Q,WAAqC,OAAO,SAAUA,EAAE3C,EAAEuF,EAAEoC,GAAG,SAASzzB,EAAEytB,EAAEw8E,GAAG,IAAI54E,EAAE5D,GAAG,CAAC,IAAI3B,EAAE2B,GAAG,CAAC,IAAIp7B,EAAkB,mBAAT63G,SAAqBA,QAAQ,IAAID,GAAG53G,EAAE,OAAOA,EAAEo7B,GAAE,GAAI,GAAG76B,EAAE,OAAOA,EAAE66B,GAAE,GAAI,IAAI6O,EAAE,IAAIh2B,MAAM,uBAAuBmnB,EAAE,KAAK,MAAM6O,EAAEpnB,KAAK,mBAAmBonB,CAAC,CAAC,IAAIoJ,EAAErU,EAAE5D,GAAG,CAACsuB,QAAQ,CAAC,GAAGjwB,EAAE2B,GAAG,GAAGn0B,KAAKosC,EAAEqW,SAAQ,SAASttB,GAAoB,OAAOzuB,EAAlB8rB,EAAE2B,GAAG,GAAGgB,IAAgBA,EAAE,GAAEiX,EAAEA,EAAEqW,QAAQttB,EAAE3C,EAAEuF,EAAEoC,EAAE,CAAC,OAAOpC,EAAE5D,GAAGsuB,OAAO,CAA2C,IAA1C,IAAInpD,EAAkB,mBAATs3G,SAAqBA,QAAgBz8E,EAAE,EAAEA,EAAEgG,EAAEhuC,OAAOgoC,IAAIztB,EAAEyzB,EAAEhG,IAAI,OAAOztB,CAAE,CAAzb,CAA2b,CAAC,EAAE,CAAC,SAASkqG,EAAQ5tD,EAAOP,GAC5xB,aACAO,EAAOP,QAAU,SAAS/yD,GAC1B,IAAImhH,EAAmBnhH,EAAQohH,kBAC/B,SAASC,EAAIpI,GACT,IAAIqI,EAAM,IAAIH,EAAiBlI,GAC3BzgE,EAAU8oE,EAAI9oE,UAIlB,OAHA8oE,EAAIC,WAAW,GACfD,EAAIE,YACJF,EAAI53E,OACG8O,CACX,CAEAx4C,EAAQqhH,IAAM,SAAUpI,GACpB,OAAOoI,EAAIpI,EACf,EAEAj5G,EAAQ8P,UAAUuxG,IAAM,WACpB,OAAOA,EAAI/uG,KACf,CAEA,CAEA,EAAE,CAAC,GAAG,EAAE,CAAC,SAAS4uG,EAAQ5tD,EAAOP,GACjC,aACA,IAAI0uD,EACJ,IAAK,MAAM,IAAInkG,KAAS,CAAE,MAAOmoB,GAAIg8E,EAAiBh8E,CAAE,CACxD,IAAIi8E,EAAWR,EAAQ,cACnBS,EAAQT,EAAQ,WAEpB,SAASU,IACLtvG,KAAKuvG,kBAAmB,EACxBvvG,KAAKwvG,aAAc,EACnBxvG,KAAKyvG,WAAa,IAAIJ,EAAM,IAC5BrvG,KAAK0vG,aAAe,IAAIL,EAAM,IAC9BrvG,KAAK2vG,oBAAqB,EAC1B,IAAI5xG,EAAOiC,KACXA,KAAK4vG,YAAc,WACf7xG,EAAK8xG,cACT,EACA7vG,KAAK8vG,UAAYV,CACrB,CAkEA,SAASW,EAAYhvG,GACjB,KAAOA,EAAM5W,SAAW,GACpB6lH,EAAgBjvG,EAExB,CAEA,SAASivG,EAAgBjvG,GACrB,IAAI/V,EAAK+V,EAAMmJ,QACf,GAAkB,mBAAPlf,EACPA,EAAGilH,sBACA,CACH,IAAIC,EAAWnvG,EAAMmJ,QACjBusB,EAAM11B,EAAMmJ,QAChBlf,EAAGgT,KAAKkyG,EAAUz5E,EACtB,CACJ,CA/EA64E,EAAM9xG,UAAU2yG,aAAe,SAASnlH,GACpC,IAAIq2E,EAAOrhE,KAAK8vG,UAGhB,OAFA9vG,KAAK8vG,UAAY9kH,EACjBgV,KAAKuvG,kBAAmB,EACjBluC,CACX,EAEAiuC,EAAM9xG,UAAU4yG,mBAAqB,WACjC,OAAOpwG,KAAKuvG,gBAChB,EAEAD,EAAM9xG,UAAU6yG,gBAAkB,WAC9B,OAAOrwG,KAAKwvG,aAAexvG,KAAK2vG,kBACpC,EAGAL,EAAM9xG,UAAU8yG,WAAa,SAASn9E,EAAGo9E,GACjCA,GACA/2E,EAAQg3E,OAAOn+F,MAAM,UAAY8gB,aAAanoB,MAAQmoB,EAAEg7B,MAAQh7B,GAC5D,MACJqG,EAAQi3E,KAAK,IAEbzwG,KAAK0wG,WAAWv9E,EAExB,EAEAm8E,EAAM9xG,UAAUkzG,WAAa,SAAS1lH,EAAIyrC,GAKtC,GAJyB,IAArBvsC,UAAUC,SACVssC,EAAMzrC,EACNA,EAAK,WAAc,MAAMyrC,CAAK,GAER,oBAAflW,WACPA,YAAW,WACPv1B,EAAGyrC,EACP,GAAG,QACA,IACHz2B,KAAK8vG,WAAU,WACX9kH,EAAGyrC,EACP,GACJ,CAAE,MAAOtD,GACL,MAAM,IAAInoB,MAAM,iEACpB,CACJ,EAiBAskG,EAAM9xG,UAAUmzG,YAfhB,SAA0B3lH,EAAIklH,EAAUz5E,GACpCz2B,KAAKyvG,WAAW7lH,KAAKoB,EAAIklH,EAAUz5E,GACnCz2B,KAAK4wG,YACT,EAaAtB,EAAM9xG,UAAUq/B,OAXhB,SAAqB7xC,EAAIklH,EAAUz5E,GAC/Bz2B,KAAK0vG,aAAa9lH,KAAKoB,EAAIklH,EAAUz5E,GACrCz2B,KAAK4wG,YACT,EASAtB,EAAM9xG,UAAUqzG,eAPhB,SAA6B3qE,GACzBlmC,KAAK0vG,aAAaoB,SAAS5qE,GAC3BlmC,KAAK4wG,YACT,EAwBAtB,EAAM9xG,UAAUqyG,aAAe,WAC3BE,EAAY/vG,KAAK0vG,cACjB1vG,KAAK+wG,SACL/wG,KAAK2vG,oBAAqB,EAC1BI,EAAY/vG,KAAKyvG,WACrB,EAEAH,EAAM9xG,UAAUozG,WAAa,WACpB5wG,KAAKwvG,cACNxvG,KAAKwvG,aAAc,EACnBxvG,KAAK8vG,UAAU9vG,KAAK4vG,aAE5B,EAEAN,EAAM9xG,UAAUuzG,OAAS,WACrB/wG,KAAKwvG,aAAc,CACvB,EAEAxuD,EAAOP,QAAU6uD,EACjBtuD,EAAOP,QAAQ0uD,eAAiBA,CAEhC,EAAE,CAAC,UAAU,GAAG,aAAa,KAAK,EAAE,CAAC,SAASP,EAAQ5tD,EAAOP,GAC7D,aACAO,EAAOP,QAAU,SAAS/yD,EAASsjH,EAAUC,EAAqB/kE,GAClE,IAAIglE,GAAa,EACbC,EAAa,SAAStyG,EAAGs0B,GACzBnzB,KAAKoxG,QAAQj+E,EACjB,EAEIk+E,EAAiB,SAASl+E,EAAGpxB,GAC7BA,EAAQuvG,wBAAyB,EACjCvvG,EAAQwvG,eAAeC,MAAML,EAAYA,EAAY,KAAMnxG,KAAMmzB,EACrE,EAEIs+E,EAAkB,SAAS/7E,EAAS3zB,GACC,IAAd,SAAjB/B,KAAK0xG,YACP1xG,KAAK+mF,iBAAiBhlF,EAAQjb,OAEtC,EAEI6qH,EAAkB,SAASx+E,EAAGpxB,GACzBA,EAAQuvG,wBAAwBtxG,KAAKoxG,QAAQj+E,EACtD,EAEAzlC,EAAQ8P,UAAUkO,KAAO,SAAUgqB,GAC1Bw7E,IACDA,GAAa,EACbxjH,EAAQ8P,UAAUo0G,eAAiB1lE,EAAM2lE,wBACzCnkH,EAAQ8P,UAAUs0G,YAAc5lE,EAAM6lE,sBAE1C,IAAI9/B,EAAeg/B,EAAoBv7E,GACnCs5E,EAAM,IAAIthH,EAAQsjH,GACtBhC,EAAI4C,eAAe5xG,KAAM,GACzB,IAAIlZ,EAASkZ,KAAKgyG,UAElB,GADAhD,EAAIiD,YAAYhgC,GACZA,aAAwBvkF,EAAS,CACjC,IAAIqU,EAAU,CACVuvG,wBAAwB,EACxBprE,QAAS8oE,EACTloH,OAAQA,EACRyqH,eAAgBt/B,GAEpBnrF,EAAO0qH,MAAMR,EAAUK,OAAgBzjH,EAAWohH,EAAKjtG,GACvDkwE,EAAau/B,MACTC,EAAiBE,OAAiB/jH,EAAWohH,EAAKjtG,GACtDitG,EAAIkD,aAAajgC,EACrB,MACI+8B,EAAIjoB,iBAAiBjgG,GAEzB,OAAOkoH,CACX,EAEAthH,EAAQ8P,UAAUy0G,YAAc,SAAUr0G,QAC1BhQ,IAARgQ,GACAoC,KAAK0xG,UAA6B,QAAjB1xG,KAAK0xG,UACtB1xG,KAAKmyG,SAAWv0G,GAEhBoC,KAAK0xG,WAA6B,QAAjB1xG,KAAK0xG,SAE9B,EAEAhkH,EAAQ8P,UAAU40G,SAAW,WACzB,OAAsC,UAAb,QAAjBpyG,KAAK0xG,UACjB,EAEAhkH,EAAQge,KAAO,SAAUgqB,EAAS1jC,GAC9B,OAAOtE,EAAQD,QAAQuE,GAAO0Z,KAAKgqB,EACvC,CACA,CAEA,EAAE,CAAC,GAAG,EAAE,CAAC,SAASk5E,EAAQ5tD,EAAOP,GACjC,aACA,IAAIv7C,OACmB,IAAZxX,IAAyBwX,EAAMxX,GAM1C,IAAI2kH,EAAWzD,EAAQ,YAARA,GACfyD,EAASC,WANT,WACI,IAAU5kH,IAAY2kH,IAAU3kH,EAAUwX,EAAK,CAC/C,MAAOiuB,GAAI,CACX,OAAOk/E,CACX,EAGArxD,EAAOP,QAAU4xD,CAEjB,EAAE,CAAC,YAAY,KAAK,EAAE,CAAC,SAASzD,EAAQ5tD,EAAOP,GAC/C,aACA,IAAI8xD,EAAKnnH,OAAOkT,OAChB,GAAIi0G,EAAI,CACJ,IAAIC,EAAcD,EAAG,MACjBE,EAAcF,EAAG,MACrBC,EAAY,SAAWC,EAAY,SAAW,CAClD,CAEAzxD,EAAOP,QAAU,SAAS/yD,GAC1B,IAAIglH,EAAO9D,EAAQ,UACf+D,EAAcD,EAAKC,YAqEvB,SAASC,EAAOh1G,GACZ,IACI5S,EAbR,SAAsB4S,EAAKi1G,GACvB,IAAI7nH,EAEJ,GADW,MAAP4S,IAAa5S,EAAK4S,EAAIi1G,IACR,mBAAP7nH,EAAmB,CAC1B,IAAIyuB,EAAU,UAAYi5F,EAAKI,YAAYl1G,GAAO,mBAC9C80G,EAAKxxH,SAAS2xH,GAAc,IAChC,MAAM,IAAInlH,EAAQ2Q,UAAUob,EAChC,CACA,OAAOzuB,CACX,CAIa+nH,CAAan1G,EADLoC,KAAKiK,OAEtB,OAAOjf,EAAG+c,MAAMnK,EAAKoC,KACzB,CAgBA,SAASgzG,EAAYp1G,GACjB,OAAOA,EAAIoC,KACf,CACA,SAASizG,EAAcr1G,GACnB,IAAIvQ,GAAS2S,KAEb,OADI3S,EAAQ,IAAGA,EAAQ1L,KAAKC,IAAI,EAAGyL,EAAQuQ,EAAIzT,SACxCyT,EAAIvQ,EACf,CA/FmBqlH,EAAKQ,aAyExBxlH,EAAQ8P,UAAUQ,KAAO,SAAU60G,GAC/B,IAAIzoH,EAAO,GAAG+N,MAAM6F,KAAK9T,UAAW,GAWpC,OADAE,EAAKR,KAAKipH,GACH7yG,KAAKwxG,MAAMoB,OAAQhlH,OAAWA,EAAWxD,OAAMwD,EAC1D,EAUAF,EAAQ8P,UAAU7T,IAAM,SAAU0W,GAC9B,IACI8yG,EACJ,GAFuC,iBAAjB9yG,EAUlB8yG,EAASF,OAPT,GAAIN,EAAa,CACb,IAAIS,QAlGZC,GAkGoChzG,GAC5B8yG,EAAyB,OAAhBC,EAAuBA,EAAcJ,CAClD,MACIG,EAASH,EAKjB,OAAOhzG,KAAKwxG,MAAM2B,OAAQvlH,OAAWA,EAAWyS,OAAczS,EAClE,CACA,CAEA,EAAE,CAAC,SAAS,KAAK,EAAE,CAAC,SAASghH,EAAQ5tD,EAAOP,GAC5C,aACAO,EAAOP,QAAU,SAAS/yD,EAAS4lH,EAAcC,EAAcrnE,GAC/D,IAAIwmE,EAAO9D,EAAQ,UACf4E,EAAWd,EAAKc,SAChBC,EAAWf,EAAKe,SAChB9kE,EAAQjhD,EAAQgmH,OAEpBhmH,EAAQ8P,UAAiB,MAAI9P,EAAQ8P,UAAU8oC,OAAS,WACpD,IAAK4F,EAAMynE,eAAgB,OAAO3zG,KAAK4zG,MAAM,4BAI7C,IAFA,IAAI1tE,EAAUlmC,KACVtP,EAAQw1C,EACLA,EAAQ2tE,kBAAkB,CAC7B,IAAK3tE,EAAQ4tE,UAAUpjH,GAAQ,CACvBA,EAAMqjH,eACNrjH,EAAMsjH,YAAY1tE,SAElB51C,EAAMujH,kBAEV,KACJ,CAEA,IAAIxjH,EAASy1C,EAAQguE,oBACrB,GAAc,MAAVzjH,IAAmBA,EAAOojH,iBAAkB,CACxC3tE,EAAQ6tE,eACR7tE,EAAQ8tE,YAAY1tE,SAEpBJ,EAAQ+tE,kBAEZ,KACJ,CACQ/tE,EAAQ6tE,gBAAgB7tE,EAAQ8tE,YAAY1tE,SAChDJ,EAAQiuE,sBACRzjH,EAAQw1C,EACRA,EAAUz1C,CAElB,CACJ,EAEA/C,EAAQ8P,UAAU42G,oBAAsB,WACpCp0G,KAAKq0G,4BACT,EAEA3mH,EAAQ8P,UAAU82G,6BAA+B,WAC7C,YAA2C1mH,IAApCoS,KAAKq0G,4BACLr0G,KAAKq0G,4BAA8B,CAC9C,EAEA3mH,EAAQ8P,UAAUs2G,UAAY,SAASS,GACnC,OAAIA,IAAcv0G,MACdA,KAAKq0G,2BAA6B,EAClCr0G,KAAKw0G,mBACE,IAEPx0G,KAAKo0G,wBACDp0G,KAAKs0G,iCACLt0G,KAAKw0G,mBACE,GAInB,EAEA9mH,EAAQ8P,UAAUy2G,gBAAkB,WAC5Bj0G,KAAKs0G,gCACLt0G,KAAKy0G,SAEb,EAEA/mH,EAAQ8P,UAAUi3G,QAAU,WACnBz0G,KAAK6zG,mBACV7zG,KAAK00G,gBACL/lE,EAAM9R,OAAO78B,KAAK20G,gBAAiB30G,UAAMpS,GAC7C,EAEAF,EAAQ8P,UAAUm3G,gBAAkB,WAC5B30G,KAAK40G,UAAY,GAAG50G,KAAKiwG,iBACjC,EAEAviH,EAAQ8P,UAAUq3G,eAAiB,WAC/B70G,KAAK80G,oBAAiBlnH,CAC1B,EAEAF,EAAQ8P,UAAUq2G,eAAiB,WAC/B,OAAO7zG,KAAK+0G,cAAgB/0G,KAAKg1G,cACrC,EAEAtnH,EAAQ8P,UAAUy3G,cAAgB,WAC9B,OAAOj1G,KAAK+0G,cAAgB/0G,KAAKk1G,aACrC,EAEAxnH,EAAQ8P,UAAU23G,kBAAoB,SAASC,EAAkBC,GAC7D,GAAI3C,EAAKnkG,QAAQ6mG,GACb,IAAK,IAAI99G,EAAI,EAAGA,EAAI89G,EAAiBjrH,SAAUmN,EAC3C0I,KAAKm1G,kBAAkBC,EAAiB99G,GAAI+9G,QAE7C,QAAyBznH,IAArBwnH,EACP,GAAgC,mBAArBA,GACP,IAAKC,EAAc,CACf,IAAIliF,EAAIqgF,EAAS4B,GAAkBp3G,KAAKgC,KAAK8xG,eACzC3+E,IAAMsgF,IACNzzG,KAAKs1G,kBAAkBniF,EAAEA,GACzBwb,EAAM+hE,WAAWv9E,EAAEA,GAE3B,OAEAiiF,EAAiBG,iBAAiBv1G,KAG9C,EAEAtS,EAAQ8P,UAAUg3G,gBAAkB,WAChC,IAAIY,EAAmBp1G,KAAKw1G,YAC5Bx1G,KAAK60G,iBACLlmE,EAAM9R,OAAO78B,KAAKm1G,kBAAmBn1G,KAAMo1G,EAC/C,EAEA1nH,EAAQ8P,UAAUi4G,wBAA0B,WACpCz1G,KAAK6zG,mBACL7zG,KAAKm1G,kBAAkBn1G,KAAKw1G,aAAa,GACzCx1G,KAAK60G,iBAEb,EAEAnnH,EAAQ8P,UAAU+3G,iBAAmB,WACjCv1G,KAAKsmC,QACT,CAEA,CAEA,EAAE,CAAC,SAAS,KAAK,EAAE,CAAC,SAASsoE,EAAQ5tD,EAAOP,GAC5C,aACAO,EAAOP,QAAU,SAASi1D,GAC1B,IAAIhD,EAAO9D,EAAQ,UACf+G,EAAU/G,EAAQ,SAASpiH,KAC3BgnH,EAAWd,EAAKc,SAChBC,EAAWf,EAAKe,SAmCpB,OAjCA,SAAqBv0E,EAAW02E,EAAI1vE,GAChC,OAAO,SAAS/S,GACZ,IAAI0iF,EAAU3vE,EAAQ4rE,cACtBgE,EAAe,IAAK,IAAIx+G,EAAI,EAAGA,EAAI4nC,EAAU/0C,SAAUmN,EAAG,CACtD,IAAIjV,EAAO68C,EAAU5nC,GAErB,GAAIjV,IAAS2oB,OACA,MAAR3oB,GAAgBA,EAAKmb,qBAAqBwN,OAC3C,GAAImoB,aAAa9wC,EACb,OAAOmxH,EAASoC,GAAI53G,KAAK63G,EAAS1iF,QAEnC,GAAoB,mBAAT9wC,EAAqB,CACnC,IAAI0zH,EAAmBvC,EAASnxH,GAAM2b,KAAK63G,EAAS1iF,GACpD,GAAI4iF,IAAqBtC,EACrB,OAAOsC,EACJ,GAAIA,EACP,OAAOvC,EAASoC,GAAI53G,KAAK63G,EAAS1iF,EAE1C,MAAO,GAAIu/E,EAAK1tD,SAAS7xB,GAAI,CAEzB,IADA,IAAI3mC,EAAOmpH,EAAQtzH,GACVqjB,EAAI,EAAGA,EAAIlZ,EAAKrC,SAAUub,EAAG,CAClC,IAAIjZ,EAAMD,EAAKkZ,GACf,GAAIrjB,EAAKoK,IAAQ0mC,EAAE1mC,GACf,SAASqpH,CAEjB,CACA,OAAOtC,EAASoC,GAAI53G,KAAK63G,EAAS1iF,EACtC,CACJ,CACA,OAAOuiF,CACX,CACJ,CAGA,CAEA,EAAE,CAAC,QAAQ,GAAG,SAAS,KAAK,EAAE,CAAC,SAAS9G,EAAQ5tD,EAAOP,GACvD,aACAO,EAAOP,QAAU,SAAS/yD,GAC1B,IAAIsoH,GAAkB,EAClBC,EAAe,GAOnB,SAASC,IACLl2G,KAAKm2G,OAAS,IAAID,EAAQE,cAAcC,IAC5C,CAsBA,SAASA,IACL,IAAI5hF,EAAYwhF,EAAa9rH,OAAS,EACtC,GAAIsqC,GAAa,EACb,OAAOwhF,EAAaxhF,EAG5B,CA2BA,OA9DA/mC,EAAQ8P,UAAU84G,gBAAkB,WAAY,EAChD5oH,EAAQ8P,UAAU+4G,aAAe,WAAY,EAC7C7oH,EAAQ8P,UAAUg5G,YAAc,WAAY,OAAO,IAAK,EACxD9oH,EAAQ+oH,aAAe/oH,EAAQ8P,UAAUi5G,aAAe,WAAY,EAKpEP,EAAQ14G,UAAU+4G,aAAe,gBACT3oH,IAAhBoS,KAAKm2G,SACLn2G,KAAKm2G,OAAOG,gBAAkB,KAC9BL,EAAarsH,KAAKoW,KAAKm2G,QAE/B,EAEAD,EAAQ14G,UAAUg5G,YAAc,WAC5B,QAAoB5oH,IAAhBoS,KAAKm2G,OAAsB,CAC3B,IAAIO,EAAQT,EAAahsG,MACrB+kG,EAAM0H,EAAMJ,gBAEhB,OADAI,EAAMJ,gBAAkB,KACjBtH,CACX,CACA,OAAO,IACX,EAaAkH,EAAQE,cAAgB,KACxBF,EAAQ53G,OAZR,WACI,GAAI03G,EAAiB,OAAO,IAAIE,CACpC,EAWAA,EAAQS,0BAA4B,WAAY,EAChDT,EAAQU,wBAA0B,WAC9B,IAAIC,EAAsBnpH,EAAQ8P,UAAU+4G,aACxCO,EAAqBppH,EAAQ8P,UAAUg5G,YACvCO,EAAsBrpH,EAAQ+oH,aAC9BO,EAAsBtpH,EAAQ8P,UAAUi5G,aACxCQ,EAAyBvpH,EAAQ8P,UAAU84G,gBAC/CJ,EAAQS,0BAA4B,WAChCjpH,EAAQ8P,UAAU+4G,aAAeM,EACjCnpH,EAAQ8P,UAAUg5G,YAAcM,EAChCppH,EAAQ+oH,aAAeM,EACvBrpH,EAAQ8P,UAAUi5G,aAAeO,EACjCtpH,EAAQ8P,UAAU84G,gBAAkBW,EACpCjB,GAAkB,CACtB,EACAA,GAAkB,EAClBtoH,EAAQ8P,UAAU+4G,aAAeL,EAAQ14G,UAAU+4G,aACnD7oH,EAAQ8P,UAAUg5G,YAAcN,EAAQ14G,UAAUg5G,YAClD9oH,EAAQ+oH,aAAe/oH,EAAQ8P,UAAUi5G,aAAeJ,EACxD3oH,EAAQ8P,UAAU84G,gBAAkB,WAChC,IAAIY,EAAMl3G,KAAKy2G,eACXS,GAA8B,MAAvBA,EAAIZ,kBAAyBY,EAAIZ,gBAAkBt2G,KAClE,CACJ,EACOk2G,CACP,CAEA,EAAE,CAAC,GAAG,EAAE,CAAC,SAAStH,EAAQ5tD,EAAOP,GACjC,aACAO,EAAOP,QAAU,SAAS/yD,EAASwoH,EAC/BiB,EAAkBC,GACtB,IAKIC,EACAC,EAQAC,EAeAC,EA7BA7oE,EAAQjhD,EAAQgmH,OAChB+D,EAAU7I,EAAQ,YAAY6I,QAC9B/E,EAAO9D,EAAQ,UACf8I,EAAM9I,EAAQ,SACd+I,EAAiBjF,EAAKiF,eAGtBC,EACA,2DACAC,EAAmB,6BACnBC,EAAmB,kCACnBC,EAAoB,KACpBC,EAAc,KACdC,GAAoB,EAEpBC,IAA6C,GAA9BxF,EAAKyF,IAAI,mBAKxBC,IAA+C,GAAjC1F,EAAKyF,IAAI,uBACtBD,IAAaxF,EAAKyF,IAAI,sBAEvBnC,IAA+D,GAA1CtD,EAAKyF,IAAI,gCAC7BD,IAAaxF,EAAKyF,IAAI,+BAEvBE,EAA8D,GAA3C3F,EAAKyF,IAAI,iCAC3BC,KAAc1F,EAAKyF,IAAI,iCAG5B,WACI,IAAIxR,EAAW,GAEf,SAAS2R,IACL,IAAK,IAAIhhH,EAAI,EAAGA,EAAIqvG,EAASx8G,SAAUmN,EACnCqvG,EAASrvG,GAAGihH,4BAEhBC,GACJ,CAEA,SAASA,IACL7R,EAASx8G,OAAS,CACtB,CAEAqtH,EAA+B,SAAStxE,GACpCygE,EAAS/8G,KAAKs8C,GACd3lB,WAAW+3F,EAAyB,EACxC,EAEAZ,EAAIt6G,eAAe1P,EAAS,2BAA4B,CACpDsE,MAAOsmH,IAEXZ,EAAIt6G,eAAe1P,EAAS,2BAA4B,CACpDsE,MAAOwmH,GAEd,CAzBD,GA2BA9qH,EAAQ8P,UAAUi7G,4BAA8B,WAC5C,IAAI3xH,EAASkZ,KAAKgyG,UAClBlrH,EAAO4qH,WAAiC,QAAnB5qH,EAAO4qH,UACV,MACtB,EAEAhkH,EAAQ8P,UAAUk7G,gCAAkC,WACd,IAAZ,OAAjB14G,KAAK0xG,aACV1xG,KAAK24G,2BACLnB,EAA6Bx3G,MACjC,EAEAtS,EAAQ8P,UAAUo7G,mCAAqC,WACnDC,EAAmB,mBACWxB,OAA2BzpH,EAAWoS,KACxE,EAEAtS,EAAQ8P,UAAUs7G,yBAA2B,WACzC94G,KAAK0xG,UAA6B,UAAjB1xG,KAAK0xG,SAC1B,EAEAhkH,EAAQ8P,UAAUu7G,sBAAwB,WACtC,OAAwC,IAAf,UAAjB/4G,KAAK0xG,UACjB,EAEAhkH,EAAQ8P,UAAU+6G,0BAA4B,WAC1C,GAAIv4G,KAAKg5G,wBAAyB,CAC9B,IAAItzE,EAAS1lC,KAAKi5G,gBAClBj5G,KAAKk5G,mCACLL,EAAmB,qBACWvB,EAA4B5xE,EAAQ1lC,KACtE,CACJ,EAEAtS,EAAQ8P,UAAU07G,iCAAmC,WACjDl5G,KAAK0xG,UAA6B,OAAjB1xG,KAAK0xG,SAC1B,EAEAhkH,EAAQ8P,UAAU27G,mCAAqC,WACnDn5G,KAAK0xG,WAA6B,OAAjB1xG,KAAK0xG,SAC1B,EAEAhkH,EAAQ8P,UAAU47G,8BAAgC,WAC9C,OAAyB,OAAjBp5G,KAAK0xG,WAAsB,CACvC,EAEAhkH,EAAQ8P,UAAUm7G,yBAA2B,WACzC34G,KAAK0xG,UAA6B,QAAjB1xG,KAAK0xG,SAC1B,EAEAhkH,EAAQ8P,UAAU67G,2BAA6B,WAC3Cr5G,KAAK0xG,WAA6B,QAAjB1xG,KAAK0xG,UAClB1xG,KAAKo5G,kCACLp5G,KAAKm5G,qCACLn5G,KAAK44G,qCAEb,EAEAlrH,EAAQ8P,UAAUw7G,sBAAwB,WACtC,OAAyB,QAAjBh5G,KAAK0xG,WAAuB,CACxC,EAEAhkH,EAAQ8P,UAAUo2G,MAAQ,SAASn6F,EAAS6/F,EAAmBpzE,GAC3D,OAAO77B,EAAKoP,EAAS6/F,EAAmBpzE,GAAWlmC,KACvD,EAEAtS,EAAQ6rH,6BAA+B,SAAUvuH,GAC7C,IAAI+W,EAAUrU,EAAQ8rH,cACtBlC,EAA6B5E,EAAK+G,YAAY13G,EAAS/W,EAC3D,EAEA0C,EAAQgsH,4BAA8B,SAAU1uH,GAC5C,IAAI+W,EAAUrU,EAAQ8rH,cACtBnC,EAA4B3E,EAAK+G,YAAY13G,EAAS/W,EAC1D,EAEA,IAAI2uH,EAAyB,WAAY,EACzCjsH,EAAQsoH,gBAAkB,WACtB,GAAIrnE,EAAM0hE,oBAAsB7wF,GAAOw2F,gBACnC,MAAM,IAAIhrG,MAAM,sGAEpB,IAAKwU,GAAOw2F,iBAAmB4D,IAA8B,CACzD,IAAIC,EAA4BnsH,EAAQ8P,UAAUs8G,mBAC9CC,EAA2BrsH,EAAQ8P,UAAU83G,kBAC7C0E,EAA2BtsH,EAAQ8P,UAAUy8G,kBACjDz6F,GAAOw2F,iBAAkB,EACzB2D,EAAyB,WACrB,GAAIhrE,EAAM0hE,oBAAsB7wF,GAAOw2F,gBACnC,MAAM,IAAIhrG,MAAM,sGAEpBtd,EAAQ8P,UAAUs8G,mBAAqBD,EACvCnsH,EAAQ8P,UAAU83G,kBAAoByE,EACtCrsH,EAAQ8P,UAAUy8G,kBAAoBD,EACtC9D,EAAQS,4BACRn3F,GAAOw2F,iBAAkB,CAC7B,EACAtoH,EAAQ8P,UAAUs8G,mBAAqBI,EACvCxsH,EAAQ8P,UAAU83G,kBAAoB6E,EACtCzsH,EAAQ8P,UAAUy8G,kBAAoBG,EACtClE,EAAQU,yBACZ,CACJ,EAEAlpH,EAAQ2sH,mBAAqB,WACzB,OAAO76F,GAAOw2F,iBAAmB4D,GACrC,EAGA,IAAIU,EAAiB,CACjBC,mBAAoB,CAChBrmB,OAAQ,WACJ,IAAI8a,EAAM0D,EAAK/7E,OAAO6jF,qBAEtB,OADA9H,EAAK/7E,OAAO6jF,qBAAuB,KAC5BxL,CACX,EACA5a,MAAO,SAASppG,GACZ0nH,EAAK/7E,OAAO6jF,qBAAuBxvH,CACvC,GAEJyvH,iBAAkB,CACdvmB,OAAQ,WACJ,IAAI8a,EAAM0D,EAAK/7E,OAAO+jF,mBAEtB,OADAhI,EAAK/7E,OAAO+jF,mBAAqB,KAC1B1L,CACX,EACA5a,MAAO,SAASppG,GACZ0nH,EAAK/7E,OAAO+jF,mBAAqB1vH,CACrC,IAIJ2vH,EAAe,WACf,IAAIC,EAAW,SAASC,EAAQ1nF,GAC5B,IAAI0nF,EASA,OAAQnI,EAAK/7E,OAAO6c,cAAcrgB,GARlC,IAAInoC,EACJ,IAEI,OADAA,EAAK6vH,EAAO3mB,UACJwe,EAAK/7E,OAAO6c,cAAcrgB,EACtC,CAAE,QACE0nF,EAAOzmB,MAAMppG,EACjB,CAIR,EACA,IACI,GAA2B,mBAAhB4uD,YAA4B,CACnC,IAAIh9B,EAAQ,IAAIg9B,YAAY,eAE5B,OADA84D,EAAK/7E,OAAO6c,cAAc52B,GACnB,SAASxzB,EAAMwzB,GAClBxzB,EAAOA,EAAK3E,cACZ,IAIIq2H,EAAW,IAAIlhE,YAAYxwD,EAJf,CACZipD,OAAQz1B,EACR+vB,YAAY,IAQhB,OALA+qE,EAAIt6G,eACA09G,EAAU,UAAW,CAAC9oH,MAAO4qB,EAAMspB,UACvCwxE,EAAIt6G,eACA09G,EAAU,SAAU,CAAC9oH,MAAO4qB,EAAM8oB,SAE/Bk1E,EAASN,EAAelxH,GAAO0xH,EAC1C,CACJ,CAAO,MAAqB,mBAAV3wD,OACVvtC,EAAQ,IAAIutC,MAAM,eACtBuoD,EAAK/7E,OAAO6c,cAAc52B,GACnB,SAASxzB,EAAMwzB,GAClBxzB,EAAOA,EAAK3E,cACZ,IAAIq2H,EAAW,IAAI3wD,MAAM/gE,EAAM,CAC3BujD,YAAY,IAKhB,OAHAmuE,EAASzoE,OAASz1B,EAClB86F,EAAIt6G,eAAe09G,EAAU,UAAW,CAAC9oH,MAAO4qB,EAAMspB,UACtDwxE,EAAIt6G,eAAe09G,EAAU,SAAU,CAAC9oH,MAAO4qB,EAAM8oB,SAC9Ck1E,EAASN,EAAelxH,GAAO0xH,EAC1C,KAEIl+F,EAAQj4B,SAASk1D,YAAY,gBAC3BC,gBAAgB,mBAAmB,GAAO,EAAM,CAAC,GACvD44D,EAAK/7E,OAAO6c,cAAc52B,GACnB,SAASxzB,EAAMwzB,GAClBxzB,EAAOA,EAAK3E,cACZ,IAAIq2H,EAAWn2H,SAASk1D,YAAY,eAGpC,OAFAihE,EAAShhE,gBAAgB1wD,GAAM,GAAO,EAClCwzB,GACGg+F,EAASN,EAAelxH,GAAO0xH,EAC1C,EAER,CAAE,MAAO3nF,GAAI,CACb,OAAO,WACH,OAAO,CACX,CACH,CA7DkB,GA+Df4nF,EACIrI,EAAKnC,OACE,WACH,OAAO/2E,EAAQwhF,KAAKjzG,MAAMyxB,EAAStvC,UACvC,EAEKwoH,EAAK/7E,OAKH,SAASvtC,GACZ,IAAIypH,EAAa,KAAOzpH,EAAK3E,cACzBsoC,EAAS2lF,EAAK/7E,OAAOk8E,GACzB,QAAK9lF,IACLA,EAAOhlB,MAAM2qG,EAAK/7E,OAAQ,GAAGx+B,MAAM6F,KAAK9T,UAAW,KAC5C,EACX,EAVW,WACH,OAAO,CACX,EAYZ,SAAS+wH,EAAoC7xH,EAAM88C,GAC/C,MAAO,CAACA,QAASA,EACrB,CAEA,IAAIg1E,EAAyB,CACzBC,eAAgBF,EAChBG,iBAAkBH,EAClBI,gBAAiBJ,EACjBK,gBAAiBL,EACjBM,iBAAkBN,EAClBO,eAAgB,SAASpyH,EAAM88C,EAASx1C,GACpC,MAAO,CAACw1C,QAASA,EAASx1C,MAAOA,EACrC,EACA+qH,QAAS,SAASryH,EAAMqyH,GACpB,MAAO,CAACA,QAASA,EACrB,EACAC,mBAAoB,SAAUtyH,EAAMs8C,EAAQQ,GACxC,MAAO,CAACR,OAAQA,EAAQQ,QAASA,EACrC,EACAy1E,iBAAkBV,GAGlBW,EAAkB,SAAUxyH,GAC5B,IAAIyyH,GAAmB,EACvB,IACIA,EAAmBd,EAAgBhzG,MAAM,KAAM7d,UACnD,CAAE,MAAOipC,GACLwb,EAAM+hE,WAAWv9E,GACjB0oF,GAAmB,CACvB,CAEA,IAAIC,GAAgB,EACpB,IACIA,EAAgBnB,EAAavxH,EACjB8xH,EAAuB9xH,GAAM2e,MAAM,KAAM7d,WACzD,CAAE,MAAOipC,GACLwb,EAAM+hE,WAAWv9E,GACjB2oF,GAAgB,CACpB,CAEA,OAAOA,GAAiBD,CAC5B,EA8DA,SAASE,IAAqB,OAAO,CAAO,CAwB5C,SAASC,EAAoBC,EAAUxuH,EAAS+sC,GAC5C,IAAI0L,EAAUlmC,KACd,IACIi8G,EAASxuH,EAAS+sC,GAAQ,SAAS0hF,GAC/B,GAAwB,mBAAbA,EACP,MAAM,IAAI79G,UAAU,qCACAq0G,EAAKxxH,SAASg7H,IAEtCh2E,EAAQi2E,4BAA4BD,EACxC,GACJ,CAAE,MAAO/oF,GACL,OAAOA,CACX,CACJ,CAEA,SAASipF,EAAuCF,GAC5C,IAAKl8G,KAAK6zG,iBAAkB,OAAO7zG,KAEnC,IAAIq8G,EAAmBr8G,KAAKw1G,iBACH5nH,IAArByuH,EACI3J,EAAKnkG,QAAQ8tG,GACbA,EAAiBzyH,KAAKsyH,GAEtBl8G,KAAKkyG,aAAa,CAACmK,EAAkBH,IAGzCl8G,KAAKkyG,aAAagK,EAE1B,CAEA,SAASI,IACL,OAAOt8G,KAAK80G,cAChB,CAEA,SAASyH,EAAwBL,GAC7Bl8G,KAAK80G,eAAiBoH,CAC1B,CAEA,SAASM,IACLx8G,KAAKk0G,yBAAsBtmH,EAC3BoS,KAAK80G,oBAAiBlnH,CAC1B,CAEA,SAAS6uH,EAA0BhsH,EAAQisH,GACvC,GAAoB,IAAP,EAARA,GAAkB,CACnB18G,KAAKk0G,oBAAsBzjH,EAC3B,IAAIksH,EAA4BlsH,EAAO4jH,gCACLzmH,IAA9B+uH,IACAA,EAA4B,GAEhClsH,EAAO4jH,2BAA6BsI,EAA4B,CACpE,CACoB,IAAP,EAARD,IAAoBjsH,EAAO2hH,YAC5BpyG,KAAKiyG,YAAYxhH,EAAO0hH,SAEhC,CA3IAzkH,EAAQ8xB,OAAS,SAASo9F,GAStB,GAPI,oBADJA,EAAOxxH,OAAOwxH,MAENA,EAAK5G,gBACLtoH,EAAQsoH,mBACA4G,EAAK5G,iBAAmBtoH,EAAQ2sH,sBACxCV,KAGJ,aAAciD,EAAM,CACpB,IAAIC,EAAiBD,EAAKxE,SAC1B54F,GAAO44F,WAAayE,EACpBxE,EAAmB74F,GAAO44F,SAEtB1F,EAAK1tD,SAAS63D,IACV,qBAAsBA,IACtBxE,IAAqBwE,EAAexE,iBAGhD,CACA,GAAI,iBAAkBuE,GAAQA,EAAKjJ,eAAiBn0F,GAAOm0F,aAAc,CACrE,GAAIhlE,EAAM0hE,kBACN,MAAM,IAAIrlG,MACN,wDAERtd,EAAQ8P,UAAUs/G,uBACdN,EACJ9uH,EAAQ8P,UAAUo0G,eAAiB6K,EACnC/uH,EAAQ8P,UAAUg4G,UAAY8G,EAC9B5uH,EAAQ8P,UAAU00G,aAAeqK,EACjC7uH,EAAQ8P,UAAU2+G,4BACdC,EACJ1uH,EAAQ8P,UAAUu/G,SAAWf,EAC7BnK,EAAwB4K,EACxBj9F,GAAOm0F,cAAe,CAC1B,CAUA,GATI,eAAgBiJ,IACZA,EAAKI,aAAex9F,GAAOw9F,YAC3Bx9F,GAAOw9F,YAAa,EACpBtvH,EAAQ8P,UAAUy/G,WAAarB,IACvBgB,EAAKI,YAAcx9F,GAAOw9F,aAClCx9F,GAAOw9F,YAAa,EACpBtvH,EAAQ8P,UAAUy/G,WAAalB,IAGnC,eAAgBa,GAAQlK,EAAKwK,0BAA2B,CACxD,IAAI77C,EAAO7hD,GAAO29F,WACdC,IAAQR,EAAKO,WACb97C,IAAS+7C,IACT59F,GAAO29F,WAAaC,EAChBA,EACAjG,IAEAC,IAGZ,CACA,OAAO1pH,CACX,EAIAA,EAAQ8P,UAAUy/G,WAAalB,EAC/BruH,EAAQ8P,UAAUu/G,SAAW,SAASd,EAAUxuH,EAAS+sC,GACrD,IACIyhF,EAASxuH,EAAS+sC,EACtB,CAAE,MAAOrH,GACL,OAAOA,CACX,CACJ,EACAzlC,EAAQ8P,UAAUg4G,UAAY,WAAa,EAC3C9nH,EAAQ8P,UAAU00G,aAAe,SAAUnyF,GAAa,EACxDryB,EAAQ8P,UAAU2+G,4BAA8B,SAASD,GAEzD,EACAxuH,EAAQ8P,UAAUs8G,mBAAqB,WAAa,EACpDpsH,EAAQ8P,UAAU83G,kBAAoB,WAAa,EACnD5nH,EAAQ8P,UAAUy8G,kBAAoB,WAAa,EACnDvsH,EAAQ8P,UAAUs/G,uBAAyB,WAAY,EACvDpvH,EAAQ8P,UAAUo0G,eAAiB,SAAUnhH,EAAQisH,GAGrD,EAgEA,IAAI7K,EALJ,SAA8BphH,EAAQisH,GACd,IAAP,EAARA,IAAoBjsH,EAAO2hH,YAC5BpyG,KAAKiyG,YAAYxhH,EAAO0hH,SAEhC,EAGA,SAASJ,IACL,IAAI/C,EAAMhvG,KAAKmyG,SACf,YAAYvkH,IAARohH,GACIA,aAAethH,EACXshH,EAAIqO,cACGrO,EAAIh9G,aAEX,EAILg9G,CACX,CAEA,SAASkL,IACLl6G,KAAKm2G,OAAS,IAAIC,GAAcp2G,KAAKy2G,eACzC,CAEA,SAAS0D,EAAgCzwG,EAAO4zG,GAC5C,GAAI3F,EAAejuG,GAAQ,CACvB,IAAIgtG,EAAQ12G,KAAKm2G,OAIjB,QAHcvoH,IAAV8oH,GACI4G,IAAY5G,EAAQA,EAAM6G,cAEpB3vH,IAAV8oH,EACAA,EAAM8G,iBAAiB9zG,QACpB,IAAKA,EAAM+zG,iBAAkB,CAChC,IAAIC,EAASC,EAAqBj0G,GAClCgpG,EAAKkL,kBAAkBl0G,EAAO,QAC1Bg0G,EAAOjkG,QAAU,KAAOikG,EAAOvvD,MAAM3rE,KAAK,OAC9CkwH,EAAKkL,kBAAkBl0G,EAAO,oBAAoB,EACtD,CACJ,CACJ,CAEA,SAAS0wG,IACLp6G,KAAKm2G,YAASvoH,CAClB,CAwDA,SAASyc,EAAKoP,EAAS6/F,EAAmBpzE,GACtC,GAAK1mB,GAAO44F,SAAZ,CACA,IACIlB,EADAuE,EAAU,IAAIhE,EAAQh+F,GAE1B,GAAI6/F,EACApzE,EAAQovE,kBAAkBmG,QACvB,GAAIj8F,GAAOw2F,kBAAoBkB,EAAMxpH,EAAQ+oH,gBAChDS,EAAIsG,iBAAiB/B,OAClB,CACH,IAAIiC,EAASC,EAAqBlC,GAClCA,EAAQttD,MAAQuvD,EAAOjkG,QAAU,KAAOikG,EAAOvvD,MAAM3rE,KAAK,KAC9D,CAEKo5H,EAAgB,UAAWH,IAC5BoC,EAAkBpC,EAAS,IAAI,EAbP,CAehC,CAmDA,SAASqC,EAAW3vD,GAEhB,IADA,IAAI6gD,EAAM,GACD13G,EAAI,EAAGA,EAAI62D,EAAMhkE,SAAUmN,EAAG,CACnC,IAAImxB,EAAO0lC,EAAM72D,GACbymH,EAAc,yBAA2Bt1F,GACzCsvF,EAAkBp1H,KAAK8lC,GACvBu1F,EAAkBD,GAAeE,EAAax1F,GAC9Cs1F,IAAgBC,IACZ/F,GAAwC,MAAnBxvF,EAAK7pB,OAAO,KACjC6pB,EAAO,OAASA,GAEpBumF,EAAIplH,KAAK6+B,GAEjB,CACA,OAAOumF,CACX,CAgBA,SAAS2O,EAAqBj0G,GAC1B,IAAIykD,EAAQzkD,EAAMykD,MACd10C,EAAU/P,EAAMxoB,WAGpB,OAFAitE,EAAyB,iBAAVA,GAAsBA,EAAMhkE,OAAS,EAjBxD,SAA4Buf,GAExB,IADA,IAAIykD,EAAQzkD,EAAMykD,MAAM99D,QAAQ,QAAS,IAAIpC,MAAM,MAC1CqJ,EAAI,EAAGA,EAAI62D,EAAMhkE,SAAUmN,EAAG,CACnC,IAAImxB,EAAO0lC,EAAM72D,GACjB,GAAI,yBAA2BmxB,GAAQsvF,EAAkBp1H,KAAK8lC,GAC1D,KAER,CAIA,OAHInxB,EAAI,GAAmB,eAAdoS,EAAMtgB,OACf+kE,EAAQA,EAAMh2D,MAAMb,IAEjB62D,CACX,CAMkB+vD,CAAmBx0G,GAAS,CAAC,wBACpC,CACH+P,QAASA,EACT00C,MAAqB,eAAdzkD,EAAMtgB,KAAwB+kE,EAAQ2vD,EAAW3vD,GAEhE,CAEA,SAAS0vD,EAAkBn0G,EAAO8f,EAAO20F,GACrC,GAAuB,oBAAZ10G,QAAyB,CAChC,IAAIgQ,EACJ,GAAIi5F,EAAK1tD,SAASt7C,GAAQ,CACtB,IAAIykD,EAAQzkD,EAAMykD,MAClB10C,EAAU+P,EAAQwuF,EAAY7pD,EAAOzkD,EACzC,MACI+P,EAAU+P,EAAQjY,OAAO7H,GAED,mBAAjB6tG,EACPA,EAAa99F,EAAS0kG,GACQ,mBAAhB10G,QAAQwgD,KACC,iBAAhBxgD,QAAQwgD,KACfxgD,QAAQwgD,IAAIxwC,EAEpB,CACJ,CAEA,SAASo/F,EAAmBzvH,EAAMg1H,EAAc14E,EAAQQ,GACpD,IAAIm4E,GAAkB,EACtB,IACgC,mBAAjBD,IACPC,GAAkB,EACL,qBAATj1H,EACAg1H,EAAal4E,GAEbk4E,EAAa14E,EAAQQ,GAGjC,CAAE,MAAO/S,GACLwb,EAAM+hE,WAAWv9E,EACrB,CAEa,uBAAT/pC,EACKwyH,EAAgBxyH,EAAMs8C,EAAQQ,IAAam4E,GAC5CR,EAAkBn4E,EAAQ,wBAG9Bk2E,EAAgBxyH,EAAM88C,EAE9B,CAEA,SAASo4E,EAAe1gH,GACpB,IAAI21B,EACJ,GAAmB,mBAAR31B,EACP21B,EAAM,cACD31B,EAAIxU,MAAQ,aACb,QACD,CAIH,GAHAmqC,EAAM31B,GAA+B,mBAAjBA,EAAI1c,SAClB0c,EAAI1c,WAAawxH,EAAKxxH,SAAS0c,GACd,4BACFjb,KAAK4wC,GACtB,IAEIA,EADa5pB,KAAKC,UAAUhM,EAEhC,CACA,MAAMu1B,GAEN,CAEe,IAAfI,EAAIppC,SACJopC,EAAM,gBAEd,CACA,MAAQ,KAGZ,SAAcA,GAEV,OAAIA,EAAIppC,OADO,GAEJopC,EAEJA,EAAIoB,OAAO,EAAG4pF,IAAgB,KACzC,CATmBC,CAAKjrF,GAAO,oBAC/B,CAUA,SAASqmF,IACL,MAAoC,mBAAtB6E,EAClB,CAEA,IAAIR,EAAe,WAAa,OAAO,CAAO,EAC1CS,EAAqB,wCACzB,SAASC,EAAcl2F,GACnB,IAAI2hC,EAAU3hC,EAAKmgB,MAAM81E,GACzB,GAAIt0D,EACA,MAAO,CACHw0D,SAAUx0D,EAAQ,GAClB3hC,KAAMja,SAAS47C,EAAQ,GAAI,IAGvC,CA4CA,SAASgsD,GAAc3lH,GACnBuP,KAAKu9G,QAAU9sH,EACfuP,KAAK6+G,iBAAmB,EACxB,IAAI10H,EAAS6V,KAAK40G,QAAU,QAAgBhnH,IAAX6C,EAAuB,EAAIA,EAAOmkH,SACnE6J,GAAkBz+G,KAAMo2G,IACpBjsH,EAAS,IAAI6V,KAAK8+G,SAC1B,CACApM,EAAKqM,SAAS3I,GAAeprG,OAC7BkrG,EAAQE,cAAgBA,GAExBA,GAAc54G,UAAUshH,QAAU,WAC9B,IAAI30H,EAAS6V,KAAK40G,QAClB,KAAIzqH,EAAS,GAAb,CAIA,IAHA,IAAIm6F,EAAQ,GACR06B,EAAe,CAAC,EAEX1nH,EAAI,EAAGtW,EAAOgf,UAAepS,IAAT5M,IAAsBsW,EAC/CgtF,EAAM16F,KAAK5I,GACXA,EAAOA,EAAKu8H,QAGhB,IAASjmH,GADTnN,EAAS6V,KAAK40G,QAAUt9G,GACF,EAAGA,GAAK,IAAKA,EAAG,CAClC,IAAI62D,EAAQm2B,EAAMhtF,GAAG62D,WACOvgE,IAAxBoxH,EAAa7wD,KACb6wD,EAAa7wD,GAAS72D,EAE9B,CACA,IAASA,EAAI,EAAGA,EAAInN,IAAUmN,EAAG,CAC7B,IACIjK,EAAQ2xH,EADO16B,EAAMhtF,GAAG62D,OAE5B,QAAcvgE,IAAVP,GAAuBA,IAAUiK,EAAG,CAChCjK,EAAQ,IACRi3F,EAAMj3F,EAAQ,GAAGkwH,aAAU3vH,EAC3B02F,EAAMj3F,EAAQ,GAAGunH,QAAU,GAE/BtwB,EAAMhtF,GAAGimH,aAAU3vH,EACnB02F,EAAMhtF,GAAGs9G,QAAU,EACnB,IAAIqK,EAAgB3nH,EAAI,EAAIgtF,EAAMhtF,EAAI,GAAK0I,KAEvC3S,EAAQlD,EAAS,GACjB80H,EAAc1B,QAAUj5B,EAAMj3F,EAAQ,GACtC4xH,EAAc1B,QAAQuB,UACtBG,EAAcrK,QACVqK,EAAc1B,QAAQ3I,QAAU,IAEpCqK,EAAc1B,aAAU3vH,EACxBqxH,EAAcrK,QAAU,GAG5B,IADA,IAAIsK,EAAqBD,EAAcrK,QAAU,EACxClvG,EAAIpO,EAAI,EAAGoO,GAAK,IAAKA,EAC1B4+E,EAAM5+E,GAAGkvG,QAAUsK,EACnBA,IAEJ,MACJ,CACJ,CA3CsB,CA4C1B,EAEA9I,GAAc54G,UAAUggH,iBAAmB,SAAS9zG,GAChD,IAAIA,EAAM+zG,iBAAV,CACAz9G,KAAK8+G,UAML,IALA,IAAIpB,EAASC,EAAqBj0G,GAC9B+P,EAAUikG,EAAOjkG,QACjB0lG,EAAS,CAACzB,EAAOvvD,OAEjBuoD,EAAQ12G,UACKpS,IAAV8oH,GACHyI,EAAOv1H,KAAKk0H,EAAWpH,EAAMvoD,MAAMlgE,MAAM,QACzCyoH,EAAQA,EAAM6G,SAhRtB,SAA2B4B,GAEvB,IADA,IAAI9yH,EAAU8yH,EAAO,GACZ7nH,EAAI,EAAGA,EAAI6nH,EAAOh1H,SAAUmN,EAAG,CAMpC,IALA,IAAI+pE,EAAO89C,EAAO7nH,GACd8nH,EAAmB/yH,EAAQlC,OAAS,EACpCk1H,EAAkBhzH,EAAQ+yH,GAC1BE,GAAuB,EAElB55G,EAAI27D,EAAKl3E,OAAS,EAAGub,GAAK,IAAKA,EACpC,GAAI27D,EAAK37D,KAAO25G,EAAiB,CAC7BC,EAAsB55G,EACtB,KACJ,CAGJ,IAASA,EAAI45G,EAAqB55G,GAAK,IAAKA,EAAG,CAC3C,IAAI+iB,EAAO44C,EAAK37D,GAChB,GAAIrZ,EAAQ+yH,KAAsB32F,EAI9B,MAHAp8B,EAAQ4d,MACRm1G,GAIR,CACA/yH,EAAUg1E,CACd,CACJ,CAwPIk+C,CAAkBJ,GA5RtB,SAAqCA,GACjC,IAAK,IAAI7nH,EAAI,EAAGA,EAAI6nH,EAAOh1H,SAAUmN,GACR,IAArB6nH,EAAO7nH,GAAGnN,QACRmN,EAAI,EAAI6nH,EAAOh1H,QAAWg1H,EAAO7nH,GAAG,KAAO6nH,EAAO7nH,EAAE,GAAG,MACzD6nH,EAAOx9G,OAAOrK,EAAG,GACjBA,IAGZ,CAqRIkoH,CAA4BL,GAC5BzM,EAAKkL,kBAAkBl0G,EAAO,QAzSlC,SAA0B+P,EAAS0lG,GAC/B,IAAK,IAAI7nH,EAAI,EAAGA,EAAI6nH,EAAOh1H,OAAS,IAAKmN,EACrC6nH,EAAO7nH,GAAG1N,KAAK,wBACfu1H,EAAO7nH,GAAK6nH,EAAO7nH,GAAG9U,KAAK,MAK/B,OAHI8U,EAAI6nH,EAAOh1H,SACXg1H,EAAO7nH,GAAK6nH,EAAO7nH,GAAG9U,KAAK,OAExBi3B,EAAU,KAAO0lG,EAAO38H,KAAK,KACxC,CAgS2Ci9H,CAAiBhmG,EAAS0lG,IACjEzM,EAAKkL,kBAAkBl0G,EAAO,oBAAoB,EAdhB,CAetC,EAEA,IAAI+0G,GAAoB,WACpB,IAAIiB,EAAsB,YACtBC,EAAmB,SAASxxD,EAAOzkD,GACnC,MAAqB,iBAAVykD,EAA2BA,OAEnBvgE,IAAf8b,EAAMtgB,WACYwE,IAAlB8b,EAAM+P,QACC/P,EAAMxoB,WAEVo9H,EAAe50G,EAC1B,EAEA,GAAqC,iBAA1BsB,MAAM40G,iBACsB,mBAA5B50G,MAAMyzG,kBAAkC,CAC/CzzG,MAAM40G,iBAAmB,EACzB7H,EAAoB2H,EACpB1H,EAAc2H,EACd,IAAIlB,EAAoBzzG,MAAMyzG,kBAK9B,OAHAR,EAAe,SAASx1F,GACpB,OAAOmvF,EAAqBj1H,KAAK8lC,EACrC,EACO,SAASynF,EAAU2P,GACtB70G,MAAM40G,iBAAmB,EACzBnB,EAAkBvO,EAAU2P,GAC5B70G,MAAM40G,iBAAmB,CAC7B,CACJ,CACA,IAYIE,EAZAxrG,EAAM,IAAItJ,MAEd,GAAyB,iBAAdsJ,EAAI65C,OACX75C,EAAI65C,MAAMlgE,MAAM,MAAM,GAAG1H,QAAQ,oBAAsB,EAIvD,OAHAwxH,EAAoB,IACpBC,EAAc2H,EACd1H,GAAoB,EACb,SAA2B9lF,GAC9BA,EAAEg8B,OAAQ,IAAInjD,OAAQmjD,KAC1B,EAIJ,IAAM,MAAM,IAAInjD,KAAS,CACzB,MAAMmoB,GACF2sF,EAAsB,UAAW3sF,CACrC,CACA,QAAM,UAAW7e,IAAQwrG,GACY,iBAA1B90G,MAAM40G,iBACb7H,EAAoB2H,EACpB1H,EAAc2H,EACP,SAA2BxtF,GAC9BnnB,MAAM40G,iBAAmB,EACzB,IAAM,MAAM,IAAI50G,KAAS,CACzB,MAAMmoB,GAAKhB,EAAEg8B,MAAQh7B,EAAEg7B,KAAO,CAC9BnjD,MAAM40G,iBAAmB,CAC7B,IAGJ5H,EAAc,SAAS7pD,EAAOzkD,GAC1B,MAAqB,iBAAVykD,EAA2BA,EAEhB,iBAAVzkD,GACS,mBAAVA,QACQ9b,IAAf8b,EAAMtgB,WACYwE,IAAlB8b,EAAM+P,QAGH6kG,EAAe50G,GAFXA,EAAMxoB,UAGrB,EAEO,KAEV,CAvEuB,GAyED,oBAAZuoB,cAAmD,IAAjBA,QAAQY,OACjDktG,EAAe,SAAU99F,GACrBhQ,QAAQY,KAAKoP,EACjB,EACIi5F,EAAKnC,QAAU/2E,EAAQg3E,OAAOuP,MAC9BxI,EAAe,SAAS99F,EAAS0kG,GAC7B,IAAI6B,EAAQ7B,EAAS,QAAe,QACpC10G,QAAQY,KAAK21G,EAAQvmG,EAAU,SACnC,EACQi5F,EAAKnC,QAAyC,iBAAvB,IAAIvlG,OAAa,QAChDusG,EAAe,SAAS99F,EAAS0kG,GAC7B10G,QAAQY,KAAK,KAAOoP,EACR0kG,EAAS,oBAAsB,aAC/C,IAIR,IAAI3+F,GAAS,CACT44F,SAAUA,EACVpC,iBAAiB,EACjBrC,cAAc,EACdqJ,YAAY,EACZG,YAAY,GAKhB,OAFInH,GAAiBtoH,EAAQsoH,kBAEtB,CACHmH,WAAY,WACR,OAAO39F,GAAO29F,UAClB,EACAnH,gBAAiB,WACb,OAAOx2F,GAAOw2F,eAClB,EACAoC,SAAU,WACN,OAAO54F,GAAO44F,QAClB,EACAzE,aAAc,WACV,OAAOn0F,GAAOm0F,YAClB,EACAqJ,WAAY,WACR,OAAOx9F,GAAOw9F,UAClB,EACAnL,sBAAuB,WACnB,OAAOA,CACX,EACAE,mBAAoB,WAChB,OAAOA,CACX,EACAkO,sBA/eJ,SAA+BC,EAAa/E,EAAgB/xH,EAAM88C,EACnCz1C,GAC3B,QAAoB7C,IAAhBsyH,GAAgD,OAAnB/E,GAC7B9C,EAAkB,CAClB,QAAezqH,IAAX6C,GAAwBA,EAAOsoH,wBAAyB,OAC5D,GAAoC,IAAX,MAApB7yE,EAAQwrE,WAA0B,OAEnCtoH,IAAMA,GAAc,KACxB,IAAI+2H,EAAc,GACdC,EAAc,GAClB,GAAIjF,EAAehF,OAAQ,CAGvB,IAFA,IAAIkK,EAAalF,EAAehF,OAAOhoD,MAAMlgE,MAAM,MAC/CkgE,EAAQ2vD,EAAWuC,GACd/oH,EAAI62D,EAAMhkE,OAAS,EAAGmN,GAAK,IAAKA,EAAG,CACxC,IAAImxB,EAAO0lC,EAAM72D,GACjB,IAAKugH,EAAiBl1H,KAAK8lC,GAAO,CAC9B,IAAI63F,EAAc73F,EAAKmgB,MAAMkvE,GACzBwI,IACAH,EAAe,MAAQG,EAAY,GAC/B,IAAMA,EAAY,GAAK,IAAMA,EAAY,GAAK,KAEtD,KACJ,CACJ,CAEA,GAAInyD,EAAMhkE,OAAS,EACf,KAAIo2H,EAAgBpyD,EAAM,GAC1B,IAAS72D,EAAI,EAAGA,EAAI+oH,EAAWl2H,SAAUmN,EAErC,GAAI+oH,EAAW/oH,KAAOipH,EAAe,CAC7BjpH,EAAI,IACJ8oH,EAAc,KAAOC,EAAW/oH,EAAI,IAExC,KACJ,CARwB,CAYpC,CACA,IAAIkpH,EAAM,8BAAgCp3H,EACtC,WAAa+2H,EADP,yDAGNC,EACJl6E,EAAQ0tE,MAAM4M,GAAK,EAAMrF,EAC7B,CACJ,EAmcIsF,UAjPJ,SAAmBtR,EAAgBuR,GAC/B,GAAK9G,IAAL,CAOA,IANA,IAII+G,EACAC,EALAC,GAAmB1R,EAAehhD,OAAS,IAAIlgE,MAAM,MACrD6yH,GAAkBJ,EAAcvyD,OAAS,IAAIlgE,MAAM,MACnDktG,GAAc,EACd1mE,GAAa,EAGRn9B,EAAI,EAAGA,EAAIupH,EAAgB12H,SAAUmN,EAE1C,GADItO,EAAS21H,EAAckC,EAAgBvpH,IAC/B,CACRqpH,EAAgB33H,EAAO41H,SACvBzjB,EAAanyG,EAAOy/B,KACpB,KACJ,CAEJ,IAASnxB,EAAI,EAAGA,EAAIwpH,EAAe32H,SAAUmN,EAAG,CAC5C,IAAItO,EACJ,GADIA,EAAS21H,EAAcmC,EAAexpH,IAC9B,CACRspH,EAAe53H,EAAO41H,SACtBnqF,EAAYzrC,EAAOy/B,KACnB,KACJ,CACJ,CACI0yE,EAAa,GAAK1mE,EAAY,IAAMksF,IAAkBC,GACtDD,IAAkBC,GAAgBzlB,GAAc1mE,IAIpDwpF,EAAe,SAASx1F,GACpB,GAAImvF,EAAqBj1H,KAAK8lC,GAAO,OAAO,EAC5C,IAAI0gB,EAAOw1E,EAAcl2F,GACzB,SAAI0gB,GACIA,EAAKy1E,WAAa+B,GACjBxlB,GAAchyD,EAAK1gB,MAAQ0gB,EAAK1gB,MAAQgM,EAKrD,EAtCyC,CAuC7C,EA0MIpqB,KAAMA,EACN02G,WAncJ,SAAoB33H,EAAM43H,GACtB,IAAIvnG,EAAUrwB,EACV,0DAEJ,OADI43H,IAAavnG,GAAW,QAAUunG,EAAc,aAC7C32G,EAAKoP,EAChB,EA+bI28F,cAAeA,GACfuE,aAAcA,EACdI,gBAAiBA,EAErB,CAEA,EAAE,CAAC,WAAW,GAAG,QAAQ,GAAG,SAAS,KAAK,GAAG,CAAC,SAASnM,EAAQ5tD,EAAOP,GACtE,aACAO,EAAOP,QAAU,SAAS/yD,GAC1B,SAASuzH,IACL,OAAOjhH,KAAKhO,KAChB,CACA,SAASkvH,IACL,MAAMlhH,KAAK0lC,MACf,CAEAh4C,EAAQ8P,UAAkB,OAC1B9P,EAAQ8P,UAAU2jH,WAAa,SAAUnvH,GAErC,OADIA,aAAiBtE,GAASsE,EAAMymH,8BAC7Bz4G,KAAKwxG,MACRyP,OAAUrzH,OAAWA,EAAW,CAACoE,MAAOA,QAAQpE,EACxD,EAEAF,EAAQ8P,UAAiB,MACzB9P,EAAQ8P,UAAU4jH,UAAY,SAAU17E,GACpC,OAAO1lC,KAAKwxG,MACR0P,OAAStzH,OAAWA,EAAW,CAAC83C,OAAQA,QAAS93C,EACzD,EAEAF,EAAQ8P,UAAU6jH,WAAa,SAAU37E,GACrC,GAAIx7C,UAAUC,QAAU,EACpB,OAAO6V,KAAKwxG,WACR5jH,EAAWszH,OAAStzH,EAAW,CAAC83C,OAAQA,QAAS93C,GAErD,IAAI0zH,EAAUp3H,UAAU,GAExB,OAAO8V,KAAKuhH,OAAO77E,GADL,WAAY,MAAM47E,CAAQ,GAGhD,EAEA5zH,EAAQ8P,UAAUgkH,YAAc,SAAUxvH,GACtC,GAAI9H,UAAUC,QAAU,EAEpB,OADI6H,aAAiBtE,GAASsE,EAAMymH,8BAC7Bz4G,KAAKwxG,WACR5jH,EAAWqzH,OAAUrzH,EAAW,CAACoE,MAAOA,QAAQpE,GAEpD,IAAI6zH,EAASv3H,UAAU,GAGvB,OAFIu3H,aAAkB/zH,GAAS+zH,EAAOhJ,8BAE/Bz4G,KAAKuhH,OAAOvvH,GADL,WAAY,OAAOyvH,CAAO,GAGhD,CACA,CAEA,EAAE,CAAC,GAAG,GAAG,CAAC,SAAS7S,EAAQ5tD,EAAOP,GAClC,aACAO,EAAOP,QAAU,SAAS/yD,EAASsjH,GACnC,IAAI0Q,EAAgBh0H,EAAQnF,OACxBo5H,EAAaj0H,EAAQkT,IAEzB,SAASghH,IACL,OAAOD,EAAW3hH,KACtB,CAMAtS,EAAQ8P,UAAUqkH,KAAO,SAAU72H,GAC/B,OAAO02H,EAAc1hH,KAAMhV,EAAIgmH,EAAU,GAC9BQ,MAAMoQ,OAAgBh0H,OAAWA,EAAWoS,UAAMpS,EACjE,EAEAF,EAAQ8P,UAAUskH,UAAY,SAAU92H,GACpC,OAAO02H,EAAc1hH,KAAMhV,EAAIgmH,EAAUA,EAC7C,EAEAtjH,EAAQm0H,KAAO,SAAUlb,EAAU37G,GAC/B,OAAO02H,EAAc/a,EAAU37G,EAAIgmH,EAAU,GAClCQ,MAAMoQ,OAAgBh0H,OAAWA,EAAW+4G,OAAU/4G,EACrE,EAEAF,EAAQo0H,UAlBR,SAA0Bnb,EAAU37G,GAChC,OAAO02H,EAAc/a,EAAU37G,EAAIgmH,EAAUA,EACjD,CAiBA,CAGA,EAAE,CAAC,GAAG,GAAG,CAAC,SAASpC,EAAQ5tD,EAAOP,GAClC,aACA,IAsBIshE,EAAYC,EAtBZtK,EAAM9I,EAAQ,SACdqT,EAAevK,EAAI9+E,OACnB85E,EAAO9D,EAAQ,UACfmQ,EAAWrM,EAAKqM,SAChBnB,EAAoBlL,EAAKkL,kBAE7B,SAASsE,EAASC,EAAcC,GAC5B,SAASC,EAAS5oG,GACd,KAAMzZ,gBAAgBqiH,GAAW,OAAO,IAAIA,EAAS5oG,GACrDmkG,EAAkB59G,KAAM,UACD,iBAAZyZ,EAAuBA,EAAU2oG,GAC5CxE,EAAkB59G,KAAM,OAAQmiH,GAC5Bn3G,MAAMyzG,kBACNzzG,MAAMyzG,kBAAkBz+G,KAAMA,KAAKnC,aAEnCmN,MAAMhN,KAAKgC,KAEnB,CAEA,OADA++G,EAASsD,EAAUr3G,OACZq3G,CACX,CAGA,IAAI5K,EAAUyK,EAAS,UAAW,WAC9BI,EAAoBJ,EAAS,oBAAqB,sBAClDK,EAAeL,EAAS,eAAgB,iBACxCn0D,EAAiBm0D,EAAS,iBAAkB,mBAChD,IACIH,EAAa1jH,UACb2jH,EAAcQ,UAClB,CAAE,MAAMrvF,GACJ4uF,EAAaG,EAAS,YAAa,cACnCF,EAAcE,EAAS,aAAc,cACzC,CAKA,IAHA,IAAIO,EAAU,sHACuDx0H,MAAM,KAElEqJ,EAAI,EAAGA,EAAImrH,EAAQt4H,SAAUmN,EACS,mBAAhCjN,MAAMmT,UAAUilH,EAAQnrH,MAC/By2D,EAAevwD,UAAUilH,EAAQnrH,IAAMjN,MAAMmT,UAAUilH,EAAQnrH,KAIvEogH,EAAIt6G,eAAe2wD,EAAevwD,UAAW,SAAU,CACnDxL,MAAO,EACPkL,cAAc,EACdC,UAAU,EACVF,YAAY,IAEhB8wD,EAAevwD,UAAyB,eAAI,EAC5C,IAAIuuC,EAAQ,EAmBZ,SAAS22E,EAAiBjpG,GACtB,KAAMzZ,gBAAgB0iH,GAClB,OAAO,IAAIA,EAAiBjpG,GAChCmkG,EAAkB59G,KAAM,OAAQ,oBAChC49G,EAAkB59G,KAAM,UAAWyZ,GACnCzZ,KAAK2iH,MAAQlpG,EACbzZ,KAAoB,eAAI,EAEpByZ,aAAmBzO,OACnB4yG,EAAkB59G,KAAM,UAAWyZ,EAAQA,SAC3CmkG,EAAkB59G,KAAM,QAASyZ,EAAQ00C,QAClCnjD,MAAMyzG,mBACbzzG,MAAMyzG,kBAAkBz+G,KAAMA,KAAKnC,YAG3C,CAjCAkwD,EAAevwD,UAAUtc,SAAW,WAChC,IAAI0hI,EAASv4H,MAAc,EAAR0hD,EAAY,GAAGvpD,KAAK,KACnCwsH,EAAM,KAAO4T,EAAP,uBACV72E,IACA62E,EAASv4H,MAAc,EAAR0hD,EAAY,GAAGvpD,KAAK,KACnC,IAAK,IAAI8U,EAAI,EAAGA,EAAI0I,KAAK7V,SAAUmN,EAAG,CAGlC,IAFA,IAAIi8B,EAAMvzB,KAAK1I,KAAO0I,KAAO,4BAA8BA,KAAK1I,GAAK,GACjEurH,EAAQtvF,EAAItlC,MAAM,MACbyX,EAAI,EAAGA,EAAIm9G,EAAM14H,SAAUub,EAChCm9G,EAAMn9G,GAAKk9G,EAASC,EAAMn9G,GAG9BspG,IADAz7E,EAAMsvF,EAAMrgI,KAAK,OACJ,IACjB,CAEA,OADAupD,IACOijE,CACX,EAkBA+P,EAAS2D,EAAkB13G,OAE3B,IAAI83G,EAAa93G,MAA8B,uBAC1C83G,IACDA,EAAab,EAAa,CACtBK,kBAAmBA,EACnBC,aAAcA,EACdG,iBAAkBA,EAClBK,eAAgBL,EAChB30D,eAAgBA,IAEpB2pD,EAAIt6G,eAAe4N,MAAO,yBAA0B,CAChDhZ,MAAO8wH,EACP3lH,UAAU,EACVF,YAAY,EACZC,cAAc,KAItB8jD,EAAOP,QAAU,CACbz1C,MACA3M,UAAW0jH,EACXS,WAAYR,EACZM,kBAAmBQ,EAAWR,kBAC9BI,iBAAkBI,EAAWJ,iBAC7BH,aAAcO,EAAWP,aACzBx0D,eAAgB+0D,EAAW/0D,eAC3B0pD,QAASA,EAGb,EAAE,CAAC,QAAQ,GAAG,SAAS,KAAK,GAAG,CAAC,SAAS7I,EAAQ5tD,EAAOP,GACxD,IAAIuiE,EAAQ,WACR,aACA,YAAgBp1H,IAAToS,IACV,CAHW,GAKZ,GAAIgjH,EACAhiE,EAAOP,QAAU,CACb7nB,OAAQxtC,OAAOwtC,OACfx7B,eAAgBhS,OAAOgS,eACvB6lH,cAAe73H,OAAOsoC,yBACtBlnC,KAAMpB,OAAOoB,KACbu4B,MAAO35B,OAAO6nC,oBACdiO,eAAgB91C,OAAO81C,eACvB3yB,QAASlkB,MAAMkkB,QACfy0G,MAAOA,EACPE,mBAAoB,SAAStlH,EAAKwvB,GAC9B,IAAIpwB,EAAa5R,OAAOsoC,yBAAyB91B,EAAKwvB,GACtD,QAAWpwB,IAAcA,EAAWG,WAAYH,EAAWnT,IAC/D,OAED,CACH,IAAIJ,EAAM,CAAC,EAAE8F,eACTgkC,EAAM,CAAC,EAAEryC,SACTo7B,EAAQ,CAAC,EAAEze,YAAYL,UAEvB2lH,EAAa,SAAUhxF,GACvB,IAAI68E,EAAM,GACV,IAAK,IAAIviH,KAAO0lC,EACR1oC,EAAIuU,KAAKm0B,EAAG1lC,IACZuiH,EAAIplH,KAAK6C,GAGjB,OAAOuiH,CACX,EAiCAhuD,EAAOP,QAAU,CACblyC,QAVe,SAAU3Q,GACzB,IACI,MAAyB,mBAAlB21B,EAAIv1B,KAAKJ,EACpB,CACA,MAAMu1B,GACF,OAAO,CACX,CACJ,EAII3mC,KAAM22H,EACNp+F,MAAOo+F,EACP/lH,eA/BuB,SAAU+0B,EAAG1lC,EAAK+5B,GAEzC,OADA2L,EAAE1lC,GAAO+5B,EAAKx0B,MACPmgC,CACX,EA6BI8wF,cApCsB,SAAS9wF,EAAG1lC,GAClC,MAAO,CAACuF,MAAOmgC,EAAE1lC,GACrB,EAmCImsC,OA5Be,SAAUh7B,GACzB,OAAOA,CACX,EA2BIsjC,eAzBuB,SAAUtjC,GACjC,IACI,OAAOxS,OAAOwS,GAAKC,YAAYL,SACnC,CACA,MAAO21B,GACH,OAAO7W,CACX,CACJ,EAmBI0mG,MAAOA,EACPE,mBAAoB,WAChB,OAAO,CACX,EAER,CAEA,EAAE,CAAC,GAAG,GAAG,CAAC,SAAStU,EAAQ5tD,EAAOP,GAClC,aACAO,EAAOP,QAAU,SAAS/yD,EAASsjH,GACnC,IAAIoS,EAAa11H,EAAQtL,IAEzBsL,EAAQ8P,UAAU5V,OAAS,SAAUoD,EAAID,GACrC,OAAOq4H,EAAWpjH,KAAMhV,EAAID,EAASimH,EACzC,EAEAtjH,EAAQ9F,OAAS,SAAU++G,EAAU37G,EAAID,GACrC,OAAOq4H,EAAWzc,EAAU37G,EAAID,EAASimH,EAC7C,CACA,CAEA,EAAE,CAAC,GAAG,GAAG,CAAC,SAASpC,EAAQ5tD,EAAOP,GAClC,aACAO,EAAOP,QAAU,SAAS/yD,EAASujH,EAAqByE,GACxD,IAAIhD,EAAO9D,EAAQ,UACf0T,EAAoB50H,EAAQ40H,kBAC5B7O,EAAWf,EAAKe,SAChB4P,EAAczU,EAAQ,iBAARA,CAA0B8G,GAE5C,SAAS4N,EAA0Bp9E,EAASv9B,EAAMoX,GAC9C/f,KAAKkmC,QAAUA,EACflmC,KAAK2I,KAAOA,EACZ3I,KAAK+f,QAAUA,EACf/f,KAAKujH,QAAS,EACdvjH,KAAKwjH,cAAgB,IACzB,CAMA,SAASC,EAA6BC,GAClC1jH,KAAK0jH,eAAiBA,CAC1B,CAMA,SAASC,EAAYzM,EAAKxxE,GACtB,OAAyB,MAArBwxE,EAAIsM,gBACAt5H,UAAUC,OAAS,EACnB+sH,EAAIsM,cAAcpS,QAAQ1rE,GAE1BwxE,EAAIsM,cAAc/O,UAEtByC,EAAIsM,cAAgB,MACb,EAGf,CAEA,SAASI,IACL,OAAOF,EAAe1lH,KAAKgC,KAAMA,KAAKkmC,QAAQ8rE,UAAUiH,gBAC5D,CACA,SAAS4K,EAAKn+E,GACV,IAAIi+E,EAAY3jH,KAAM0lC,GAEtB,OADA+tE,EAAStgF,EAAIuS,EACN+tE,CACX,CACA,SAASiQ,EAAeI,GACpB,IAAI59E,EAAUlmC,KAAKkmC,QACfnmB,EAAU/f,KAAK+f,QAEnB,IAAK/f,KAAKujH,OAAQ,CACdvjH,KAAKujH,QAAS,EACd,IAAIvU,EAAMhvG,KAAK+jH,mBACThkG,EAAQ/hB,KAAKkoC,EAAQ4rE,eACrB/xF,EAAQ/hB,KAAKkoC,EAAQ4rE,cAAegS,GAC1C,GAAI9U,IAAQ0G,EACR,OAAO1G,EACJ,QAAYphH,IAARohH,EAAmB,CAC1B9oE,EAAQ4yE,2BACR,IAAI7mC,EAAeg/B,EAAoBjC,EAAK9oE,GAC5C,GAAI+rC,aAAwBvkF,EAAS,CACjC,GAA0B,MAAtBsS,KAAKwjH,cAAuB,CAC5B,GAAIvxC,EAAa+iC,eAAgB,CAC7B,IAAItvE,EACA,IAAI48E,EAAkB,8BAG1B,OAFAp8E,EAAQovE,kBAAkB5vE,GAC1B+tE,EAAStgF,EAAIuS,EACN+tE,CACX,CAAWxhC,EAAa8iC,aACpB9iC,EAAakqC,4BACT,IAAIsH,EAA6BzjH,MAE7C,CACA,OAAOiyE,EAAau/B,MAChBoS,EAASC,OAAMj2H,EAAWoS,UAAMpS,EACxC,CACJ,CACJ,CAEA,OAAIs4C,EAAQ89E,cACRL,EAAY3jH,MACZyzG,EAAStgF,EAAI2wF,EACNrQ,IAEPkQ,EAAY3jH,MACL8jH,EAEf,CAuDA,OAjIAR,EAA0B9lH,UAAUumH,iBAAmB,WACnD,OAAqB,IAAd/jH,KAAK2I,IAChB,EAMA86G,EAA6BjmH,UAAU+3G,iBAAmB,WACtDoO,EAAY3jH,KAAK0jH,eACrB,EAkEAh2H,EAAQ8P,UAAUymH,aAAe,SAASlkG,EAASpX,EAAMu7G,EAASL,GAC9D,MAAuB,mBAAZ9jG,EAA+B/f,KAAKrS,OACxCqS,KAAKwxG,MAAM0S,EACAL,OACAj2H,EACA,IAAI01H,EAA0BtjH,KAAM2I,EAAMoX,QAC1CnyB,EACtB,EAEAF,EAAQ8P,UAAU2mH,OAClBz2H,EAAQ8P,UAAmB,QAAI,SAAUuiB,GACrC,OAAO/f,KAAKikH,aAAalkG,EACA,EACA2jG,EACAA,EAC7B,EAGAh2H,EAAQ8P,UAAU4mH,IAAM,SAAUrkG,GAC9B,OAAO/f,KAAKikH,aAAalkG,EAAS,EAAG2jG,EACzC,EAEAh2H,EAAQ8P,UAAU6mH,SAAW,SAAUC,GACnC,IAAI31H,EAAMzE,UAAUC,OACpB,GAAW,IAARwE,EACC,OAAOqR,KAAKikH,aAAaK,EACA,OACA12H,EACA81H,GAExB,IACUpsH,EADNitH,EAAiB,IAAIl6H,MAAMsE,EAAM,GAClC+W,EAAI,EACR,IAAKpO,EAAI,EAAGA,EAAI3I,EAAM,IAAK2I,EAAG,CAC1B,IAAIjV,EAAO6H,UAAUoN,GACrB,IAAIo7G,EAAK1tD,SAAS3iE,GAGd,OAAOqL,EAAQ8sC,OAAO,IAAIn8B,UACtB,6DACmCq0G,EAAKI,YAAYzwH,KAJxDkiI,EAAe7+G,KAAOrjB,CAO9B,CACAkiI,EAAep6H,OAASub,EACxB,IAAIqa,EAAU71B,UAAUoN,GACxB,OAAO0I,KAAKikH,aAAaZ,EAAYkB,EAAgBxkG,EAAS/f,MACrC,OACApS,EACA81H,EAGjC,EAEOJ,CACP,CAEA,EAAE,CAAC,iBAAiB,EAAE,SAAS,KAAK,GAAG,CAAC,SAAS1U,EAAQ5tD,EAAOP,GAChE,aACAO,EAAOP,QAAU,SAAS/yD,EACA6lH,EACAvC,EACAC,EACAuT,EACAt4E,GAC1B,IACI7tC,EADSuwG,EAAQ,YACEvwG,UACnBq0G,EAAO9D,EAAQ,UACf6E,EAAWf,EAAKe,SAChBD,EAAWd,EAAKc,SAChBiR,EAAgB,GAmBpB,SAASC,EAAaC,EAAmBzU,EAAU0U,EAAcz2D,GAC7D,GAAIjiB,EAAMynE,eAAgB,CACtB,IAAIkR,EAAW,IAAIn3H,EAAQsjH,GACvB8T,EAAkB9kH,KAAK8kH,gBAAkB,IAAIp3H,EAAQsjH,GACzDhxG,KAAK+kH,SAAWF,EAASV,QAAO,WAC5B,OAAOW,CACX,IACAD,EAAS/K,qBACT+K,EAAS3S,aAAalyG,KAC1B,MACkBA,KAAK+kH,SAAW,IAAIr3H,EAAQsjH,IAClC8I,qBAEZ95G,KAAKglH,OAAS72D,EACdnuD,KAAKilH,mBAAqBN,EAC1B3kH,KAAKklH,UAAYhV,EACjBlwG,KAAKmlH,gBAAav3H,EAClBoS,KAAKolH,eAAyC,mBAAjBR,EACvB,CAACA,GAAc79H,OAAO09H,GACtBA,EACNzkH,KAAKqlH,gBAAkB,KACvBrlH,KAAKslH,oBAAqB,CAC9B,CACA5S,EAAKqM,SAAS2F,EAAcF,GAE5BE,EAAalnH,UAAU+nH,YAAc,WACjC,OAAyB,OAAlBvlH,KAAK+kH,QAChB,EAEAL,EAAalnH,UAAUgoH,SAAW,WAC9BxlH,KAAK+kH,SAAW/kH,KAAKmlH,WAAa,KAC9Bj5E,EAAMynE,gBAA2C,OAAzB3zG,KAAK8kH,kBAC7B9kH,KAAK8kH,gBAAgBW,WACrBzlH,KAAK8kH,gBAAkB,KAE/B,EAEAJ,EAAalnH,UAAUkoH,kBAAoB,WACvC,IAAI1lH,KAAKulH,cAAT,CACA,IAEIv8H,EACJ,QAH4D,IAA9BgX,KAAKmlH,WAAmB,OAalDnlH,KAAK+kH,SAASxO,eACdvtH,EAASwqH,EAASxzG,KAAKmlH,WAAmB,QAAGnnH,KAAKgC,KAAKmlH,gBACLv3H,GAClDoS,KAAK+kH,SAASvO,kBAbK,CACnB,IAAI9wE,EAAS,IAAIh4C,EAAQ40H,kBACrB,gCACJ50H,EAAQi4H,UAAUC,eAAiBlgF,EACnC1lC,KAAK+kH,SAASzP,kBAAkB5vE,GAChC1lC,KAAK+kH,SAASxO,eACdvtH,EAASwqH,EAASxzG,KAAKmlH,WAAkB,OAAGnnH,KAAKgC,KAAKmlH,WACLz/E,GACjD1lC,KAAK+kH,SAASvO,aAClB,CAMAx2G,KAAKslH,oBAAqB,EAC1BtlH,KAAKqlH,gBAAkB,KACvBrlH,KAAK6lH,UAAU78H,EArBe,CAsBlC,EAEA07H,EAAalnH,UAAUsoH,kBAAoB,SAAS9zH,GAChDgO,KAAKqlH,gBAAkB,KACvBrlH,KAAK+kH,SAASxO,eACd,IAAIvtH,EAASwqH,EAASxzG,KAAKmlH,WAAWt0H,MAAMmN,KAAKgC,KAAKmlH,WAAYnzH,GAClEgO,KAAK+kH,SAASvO,cACdx2G,KAAK6lH,UAAU78H,EACnB,EAEA07H,EAAalnH,UAAUuoH,iBAAmB,SAASrgF,GAC/C1lC,KAAKqlH,gBAAkB,KACvBrlH,KAAK+kH,SAASzP,kBAAkB5vE,GAChC1lC,KAAK+kH,SAASxO,eACd,IAAIvtH,EAASwqH,EAASxzG,KAAKmlH,WAAkB,OACxCnnH,KAAKgC,KAAKmlH,WAAYz/E,GAC3B1lC,KAAK+kH,SAASvO,cACdx2G,KAAK6lH,UAAU78H,EACnB,EAEA07H,EAAalnH,UAAU+3G,iBAAmB,WACtC,GAAIv1G,KAAKqlH,2BAA2B33H,EAAS,CACzC,IAAIw4C,EAAUlmC,KAAKqlH,gBACnBrlH,KAAKqlH,gBAAkB,KACvBn/E,EAAQI,QACZ,CACJ,EAEAo+E,EAAalnH,UAAU0oC,QAAU,WAC7B,OAAOlmC,KAAK+kH,QAChB,EAEAL,EAAalnH,UAAUwoH,KAAO,WAC1BhmH,KAAKmlH,WAAanlH,KAAKilH,mBAAmBjnH,KAAKgC,KAAKklH,WACpDllH,KAAKklH,UACDllH,KAAKilH,wBAAqBr3H,EAC9BoS,KAAK8lH,uBAAkBl4H,EAC3B,EAEA82H,EAAalnH,UAAUqoH,UAAY,SAAU78H,GACzC,IAAIk9C,EAAUlmC,KAAK+kH,SACnB,GAAI/7H,IAAWyqH,EAEX,OADAzzG,KAAKwlH,WACDxlH,KAAKslH,mBACEp/E,EAAQI,SAERJ,EAAQ+/E,gBAAgBj9H,EAAOmqC,GAAG,GAIjD,IAAInhC,EAAQhJ,EAAOgJ,MACnB,IAAoB,IAAhBhJ,EAAOqgB,KAEP,OADArJ,KAAKwlH,WACDxlH,KAAKslH,mBACEp/E,EAAQI,SAERJ,EAAQ6gD,iBAAiB/0F,GAGpC,IAAIigF,EAAeg/B,EAAoBj/G,EAAOgO,KAAK+kH,UACnD,GAAM9yC,aAAwBvkF,IAC1BukF,EA1IZ,SAAiCjgF,EAAOyyH,EAAeyB,GACnD,IAAK,IAAI5uH,EAAI,EAAGA,EAAImtH,EAAct6H,SAAUmN,EAAG,CAC3C4uH,EAAY3P,eACZ,IAAIvtH,EAASwqH,EAASiR,EAAcntH,GAAvBk8G,CAA2BxhH,GAExC,GADAk0H,EAAY1P,cACRxtH,IAAWyqH,EAAU,CACrByS,EAAY3P,eACZ,IAAIvH,EAAMthH,EAAQ8sC,OAAOi5E,EAAStgF,GAElC,OADA+yF,EAAY1P,cACLxH,CACX,CACA,IAAI/8B,EAAeg/B,EAAoBjoH,EAAQk9H,GAC/C,GAAIj0C,aAAwBvkF,EAAS,OAAOukF,CAChD,CACA,OAAO,IACX,CA4HgBk0C,CAAwBl0C,EACAjyE,KAAKolH,eACLplH,KAAK+kH,UACZ,OAAjB9yC,GALR,CAiBA,IAAIm0C,GADJn0C,EAAeA,EAAa+/B,WACAN,UAEG,IAAd,SAAX0U,IACFpmH,KAAKqlH,gBAAkBpzC,EACvBA,EAAao0C,OAAOrmH,KAAM,OACQ,IAAd,SAAXomH,GACT14H,EAAQgmH,OAAO72E,OACX78B,KAAK8lH,kBAAmB9lH,KAAMiyE,EAAawvC,UAEb,IAAd,SAAX2E,GACT14H,EAAQgmH,OAAO72E,OACX78B,KAAK+lH,iBAAkB/lH,KAAMiyE,EAAaqvC,WAG9CthH,KAAK0lH,mBAhBT,MATQ1lH,KAAK+lH,iBACD,IAAI1nH,EACA,oGAAoHhO,QAAQ,KAAMkhB,OAAOvf,IACzI,oBACAgO,KAAKglH,OAAO/2H,MAAM,MAAMkK,MAAM,GAAI,GAAG3V,KAAK,OAwBlE,EAEAkL,EAAQi4H,UAAY,SAAUhB,EAAmB55H,GAC7C,GAAiC,mBAAtB45H,EACP,MAAM,IAAItmH,EAAU,0EAExB,IAAIumH,EAAex5H,OAAOL,GAAS65H,aAC/B0B,EAAgB5B,EAChBv2D,GAAQ,IAAInjD,OAAQmjD,MACxB,OAAO,WACH,IAAIlP,EAAY0lE,EAAkB58G,MAAM/H,KAAM9V,WAC1Cq8H,EAAQ,IAAID,OAAc14H,OAAWA,EAAWg3H,EACtBz2D,GAC1B6gD,EAAMuX,EAAMrgF,UAGhB,OAFAqgF,EAAMpB,WAAalmE,EACnBsnE,EAAMT,uBAAkBl4H,GACjBohH,CACX,CACJ,EAEAthH,EAAQi4H,UAAUa,gBAAkB,SAASx7H,GACzC,GAAkB,mBAAPA,EACP,MAAM,IAAIqT,EAAU,gCAAkCq0G,EAAKI,YAAY9nH,IAE3Ey5H,EAAc76H,KAAKoB,EACvB,EAEA0C,EAAQ64H,MAAQ,SAAU5B,GAEtB,GADAz4E,EAAM60E,WAAW,kBAAmB,uBACH,mBAAtB4D,EACP,OAAOpR,EAAa,0EAExB,IAAIgT,EAAQ,IAAI7B,EAAaC,EAAmB3kH,MAC5CgvG,EAAMuX,EAAMrgF,UAEhB,OADAqgF,EAAMP,KAAKt4H,EAAQ64H,OACZvX,CACX,CACA,CAEA,EAAE,CAAC,WAAW,GAAG,SAAS,KAAK,GAAG,CAAC,SAASJ,EAAQ5tD,EAAOP,GAC3D,aACAO,EAAOP,QACP,SAAS/yD,EAAS4lH,EAAcrC,EAAqBD,EAAUriE,GAC/D,IAAI+jE,EAAO9D,EAAQ,UACD8D,EAAKC,YACRD,EAAKc,SACLd,EAAKe,SAuGpB/lH,EAAQlL,KAAO,WACX,IACIwI,EADAquB,EAAOnvB,UAAUC,OAAS,EAE1BkvB,EAAO,GAAgC,mBAApBnvB,UAAUmvB,KAC7BruB,EAAKd,UAAUmvB,IA6CnB,IAAIjvB,EAAO,GAAG+N,MAAM6F,KAAK9T,WACrBc,GAAIZ,EAAK6f,MACb,IAAI+kG,EAAM,IAAIsE,EAAalpH,GAAM87C,UACjC,YAAct4C,IAAP5C,EAAmBgkH,EAAIyX,OAAOz7H,GAAMgkH,CAC/C,CAEA,CAEA,EAAE,CAAC,SAAS,KAAK,GAAG,CAAC,SAASJ,EAAQ5tD,EAAOP,GAC7C,aACAO,EAAOP,QAAU,SAAS/yD,EACA4lH,EACAC,EACAtC,EACAD,EACA9kE,GAC1B,IAAIwmE,EAAO9D,EAAQ,UACf4E,EAAWd,EAAKc,SAChBC,EAAWf,EAAKe,SAChB9kE,EAAQjhD,EAAQgmH,OAEpB,SAASgT,EAAoB/f,EAAU37G,EAAI27H,EAAOC,GAC9C5mH,KAAK6mH,aAAalgB,GAClB3mG,KAAK+kH,SAASjL,qBACd,IAAI/3G,EAAUrU,EAAQ8rH,cAStB,GARAx5G,KAAK8mH,UAAYpU,EAAK+G,YAAY13G,EAAS/W,GAC3CgV,KAAK+mH,iBAAmBH,IAAY5V,EAC9B,IAAI3mH,MAAM2V,KAAK7V,UACf,KACN6V,KAAKgnH,OAASL,EACd3mH,KAAKinH,UAAY,EACjBjnH,KAAKulE,OAAS,GACd52B,EAAM9R,OAAO78B,KAAKknH,WAAYlnH,UAAMpS,GAChC8kH,EAAKnkG,QAAQo4F,GACb,IAAK,IAAIrvG,EAAI,EAAGA,EAAIqvG,EAASx8G,SAAUmN,EAAG,CACtC,IAAI26E,EAAe00B,EAASrvG,GACxB26E,aAAwBvkF,GACxBukF,EAAawmC,6BAErB,CAER,CA4GA,SAASr2H,EAAIukH,EAAU37G,EAAID,EAAS67H,GAChC,GAAkB,mBAAP57H,EACP,OAAOuoH,EAAa,gCAAkCb,EAAKI,YAAY9nH,IAG3E,IAAI27H,EAAQ,EACZ,QAAgB/4H,IAAZ7C,EAAuB,CACvB,GAAuB,iBAAZA,GAAoC,OAAZA,EAQ/B,OAAO2C,EAAQ8sC,OAAO,IAAIn8B,UACV,gDACCq0G,EAAKI,YAAY/nH,KATlC,GAAmC,iBAAxBA,EAAQo8H,YACf,OAAOz5H,EAAQ8sC,OACX,IAAIn8B,UAAU,4CACEq0G,EAAKI,YAAY/nH,EAAQo8H,eAEjDR,EAAQ57H,EAAQo8H,WAMxB,CAGA,OAAO,IAAIT,EAAoB/f,EAAU37G,EAFzC27H,EAAyB,iBAAVA,GACXtyF,SAASsyF,IAAUA,GAAS,EAAIA,EAAQ,EACQC,GAAS1gF,SACjE,CAlIAwsE,EAAKqM,SAAS2H,EAAqBpT,GAEnCoT,EAAoBlpH,UAAU0pH,WAAa,WACvClnH,KAAKonH,YAAOx5H,GAAY,EAC5B,EAEA84H,EAAoBlpH,UAAU6pH,MAAQ,WAAa,EAEnDX,EAAoBlpH,UAAUsoH,kBAAoB,SAAU9zH,EAAO3E,GAC/D,IAAI0kB,EAAS/R,KAAKk3B,QACd/sC,EAAS6V,KAAK7V,SACdm9H,EAAkBtnH,KAAK+mH,iBACvBJ,EAAQ3mH,KAAKgnH,OAEjB,GAAI35H,EAAQ,GAGR,GADA0kB,EADA1kB,GAAkB,EAATA,EAAc,GACP2E,EACZ20H,GAAS,IACT3mH,KAAKinH,YACLjnH,KAAK+vG,cACD/vG,KAAKulH,eAAe,OAAO,MAEhC,CACH,GAAIoB,GAAS,GAAK3mH,KAAKinH,WAAaN,EAGhC,OAFA50G,EAAO1kB,GAAS2E,EAChBgO,KAAKulE,OAAO37E,KAAKyD,IACV,EAEa,OAApBi6H,IAA0BA,EAAgBj6H,GAAS2E,GAEvD,IAAIk0C,EAAUlmC,KAAK+kH,SACfznG,EAAWtd,KAAK8mH,UAChB5W,EAAWhqE,EAAQ4rE,cACvB5rE,EAAQqwE,eACR,IAAIvH,EAAMwE,EAASl2F,GAAUtf,KAAKkyG,EAAUl+G,EAAO3E,EAAOlD,GACtDgxH,EAAiBj1E,EAAQswE,cAO7B,GANAtqE,EAAM+zE,sBACFjR,EACAmM,EACoB,OAApBmM,EAA2B,iBAAmB,cAC9CphF,GAEA8oE,IAAQyE,EAER,OADAzzG,KAAKoxG,QAAQpC,EAAI77E,IACV,EAGX,IAAI8+C,EAAeg/B,EAAoBjC,EAAKhvG,KAAK+kH,UACjD,GAAI9yC,aAAwBvkF,EAAS,CAEjC,IAAI04H,GADJn0C,EAAeA,EAAa+/B,WACAN,UAE5B,GAA+B,IAAd,SAAX0U,GAIF,OAHIO,GAAS,GAAG3mH,KAAKinH,YACrBl1G,EAAO1kB,GAAS4kF,EAChBA,EAAao0C,OAAOrmH,MAAqB,GAAd3S,EAAQ,KAC5B,EACJ,GAA+B,IAAd,SAAX+4H,GAEN,OAA+B,IAAd,SAAXA,IACTpmH,KAAKoxG,QAAQn/B,EAAaqvC,YACnB,IAEPthH,KAAKy0G,WACE,GANPzF,EAAM/8B,EAAawvC,QAQ3B,CACA1vG,EAAO1kB,GAAS2hH,CACpB,CAEA,QADsBhvG,KAAKunH,gBACNp9H,IACO,OAApBm9H,EACAtnH,KAAK4mH,QAAQ70G,EAAQu1G,GAErBtnH,KAAKwnH,SAASz1G,IAEX,EAGf,EAEA20G,EAAoBlpH,UAAUuyG,YAAc,WAIxC,IAHA,IAAIhvG,EAAQf,KAAKulE,OACbohD,EAAQ3mH,KAAKgnH,OACbj1G,EAAS/R,KAAKk3B,QACXn2B,EAAM5W,OAAS,GAAK6V,KAAKinH,UAAYN,GAAO,CAC/C,GAAI3mH,KAAKulH,cAAe,OACxB,IAAIl4H,EAAQ0T,EAAMkJ,MAClBjK,KAAK8lH,kBAAkB/zG,EAAO1kB,GAAQA,EAC1C,CACJ,EAEAq5H,EAAoBlpH,UAAUopH,QAAU,SAAUa,EAAU11G,GAIxD,IAHA,IAAIpjB,EAAMojB,EAAO5nB,OACb6kH,EAAM,IAAI3kH,MAAMsE,GAChB+W,EAAI,EACCpO,EAAI,EAAGA,EAAI3I,IAAO2I,EACnBmwH,EAASnwH,KAAI03G,EAAItpG,KAAOqM,EAAOza,IAEvC03G,EAAI7kH,OAASub,EACb1F,KAAKwnH,SAASxY,EAClB,EAEA0X,EAAoBlpH,UAAU8pH,gBAAkB,WAC5C,OAAOtnH,KAAK+mH,gBAChB,EA2BAr5H,EAAQ8P,UAAUpb,IAAM,SAAU4I,EAAID,GAClC,OAAO3I,EAAI4d,KAAMhV,EAAID,EAAS,KAClC,EAEA2C,EAAQtL,IAAM,SAAUukH,EAAU37G,EAAID,EAAS67H,GAC3C,OAAOxkI,EAAIukH,EAAU37G,EAAID,EAAS67H,EACtC,CAGA,CAEA,EAAE,CAAC,SAAS,KAAK,GAAG,CAAC,SAAShY,EAAQ5tD,EAAOP,GAC7C,aACAO,EAAOP,QACP,SAAS/yD,EAASsjH,EAAUC,EAAqBsC,EAAcrnE,GAC/D,IAAIwmE,EAAO9D,EAAQ,UACf4E,EAAWd,EAAKc,SAEpB9lH,EAAQq/B,OAAS,SAAU/hC,GACvB,GAAkB,mBAAPA,EACP,MAAM,IAAI0C,EAAQ2Q,UAAU,gCAAkCq0G,EAAKI,YAAY9nH,IAEnF,OAAO,WACH,IAAIgkH,EAAM,IAAIthH,EAAQsjH,GACtBhC,EAAI8K,qBACJ9K,EAAIuH,eACJ,IAAIvkH,EAAQwhH,EAASxoH,GAAI+c,MAAM/H,KAAM9V,WACjCixH,EAAiBnM,EAAIwH,cAIzB,OAHAtqE,EAAM+zE,sBACFjuH,EAAOmpH,EAAgB,iBAAkBnM,GAC7CA,EAAI0Y,sBAAsB11H,GACnBg9G,CACX,CACJ,EAEAthH,EAAQi6H,QAAUj6H,EAAa,IAAI,SAAU1C,GACzC,GAAkB,mBAAPA,EACP,OAAOuoH,EAAa,gCAAkCb,EAAKI,YAAY9nH,IAE3E,IAGIgH,EAHAg9G,EAAM,IAAIthH,EAAQsjH,GAItB,GAHAhC,EAAI8K,qBACJ9K,EAAIuH,eAEArsH,UAAUC,OAAS,EAAG,CACtB+hD,EAAM60E,WAAW,iDACjB,IAAItqF,EAAMvsC,UAAU,GAChBgtH,EAAMhtH,UAAU,GACpB8H,EAAQ0gH,EAAKnkG,QAAQkoB,GAAO+8E,EAASxoH,GAAI+c,MAAMmvG,EAAKzgF,GACxB+8E,EAASxoH,GAAIgT,KAAKk5G,EAAKzgF,EACvD,MACIzkC,EAAQwhH,EAASxoH,EAATwoH,GAEZ,IAAI2H,EAAiBnM,EAAIwH,cAIzB,OAHAtqE,EAAM+zE,sBACFjuH,EAAOmpH,EAAgB,cAAenM,GAC1CA,EAAI0Y,sBAAsB11H,GACnBg9G,CACX,EAEAthH,EAAQ8P,UAAUkqH,sBAAwB,SAAU11H,GAC5CA,IAAU0gH,EAAKe,SACfzzG,KAAKimH,gBAAgBj0H,EAAMmhC,GAAG,GAE9BnzB,KAAK+mF,iBAAiB/0F,GAAO,EAErC,CACA,CAEA,EAAE,CAAC,SAAS,KAAK,GAAG,CAAC,SAAS48G,EAAQ5tD,EAAOP,GAC7C,aACA,IAAIiyD,EAAO9D,EAAQ,UACfgZ,EAAmBlV,EAAKkV,iBAExBlF,EADS9T,EAAQ,YACS8T,iBAC1BhL,EAAM9I,EAAQ,SAOdiZ,EAAY,iCAsChB7mE,EAAOP,QAjBP,SAA4Bva,EAAS4hF,GACjC,OAAO,SAASxzG,EAAKtiB,GACjB,GAAgB,OAAZk0C,EAAJ,CACA,GAAI5xB,EAAK,CACL,IAAIyzG,EAxBhB,SAAgCnqH,GAC5B,IAAIoxG,EACJ,GARJ,SAAwBpxG,GACpB,OAAOA,aAAeoN,OAClB0sG,EAAIx2E,eAAetjC,KAASoN,MAAMxN,SAC1C,CAKQwqH,CAAepqH,GAAM,EACrBoxG,EAAM,IAAI0T,EAAiB9kH,IACvBxU,KAAOwU,EAAIxU,KACf4lH,EAAIv1F,QAAU7b,EAAI6b,QAClBu1F,EAAI7gD,MAAQvwD,EAAIuwD,MAEhB,IADA,IAAI3hE,EAAOkrH,EAAIlrH,KAAKoR,GACXtG,EAAI,EAAGA,EAAI9K,EAAKrC,SAAUmN,EAAG,CAClC,IAAI7K,EAAMD,EAAK8K,GACVuwH,EAAUllI,KAAK8J,KAChBuiH,EAAIviH,GAAOmR,EAAInR,GAEvB,CACA,OAAOuiH,CACX,CAEA,OADA0D,EAAKuV,+BAA+BrqH,GAC7BA,CACX,CAM0BsqH,CAAuBN,EAAiBtzG,IACtD4xB,EAAQovE,kBAAkByS,GAC1B7hF,EAAQkrE,QAAQ2W,EACpB,MAAO,GAAKD,EAEL,CACH,IAAI19H,EAAO,GAAG+N,MAAM6F,KAAK9T,UAAW,GACpCg8C,EAAQu/E,SAASr7H,EACrB,MAJI87C,EAAQu/E,SAASzzH,GAKrBk0C,EAAU,IAXkB,CAYhC,CACJ,CAIA,EAAE,CAAC,WAAW,GAAG,QAAQ,GAAG,SAAS,KAAK,GAAG,CAAC,SAAS0oE,EAAQ5tD,EAAOP,GACtE,aACAO,EAAOP,QAAU,SAAS/yD,GAC1B,IAAIglH,EAAO9D,EAAQ,UACfjgE,EAAQjhD,EAAQgmH,OAChBF,EAAWd,EAAKc,SAChBC,EAAWf,EAAKe,SAEpB,SAAS0U,EAAcj0G,EAAKk0G,GAExB,IAAK1V,EAAKnkG,QAAQ2F,GAAM,OAAOm0G,EAAerqH,KADhCgC,KAC8CkU,EAAKk0G,GACjE,IAAIpZ,EACAwE,EAAS4U,GAAUrgH,MAHT/H,KAGuB8xG,cAAe,CAAC,MAAM/qH,OAAOmtB,IAC9D86F,IAAQyE,GACR9kE,EAAM+hE,WAAW1B,EAAI77E,EAE7B,CAEA,SAASk1F,EAAen0G,EAAKk0G,GACzB,IACIlY,EADUlwG,KACS8xG,cACnB9C,OAAcphH,IAARsmB,EACJs/F,EAAS4U,GAAUpqH,KAAKkyG,EAAU,MAClCsD,EAAS4U,GAAUpqH,KAAKkyG,EAAU,KAAMh8F,GAC1C86F,IAAQyE,GACR9kE,EAAM+hE,WAAW1B,EAAI77E,EAE7B,CACA,SAASm1F,EAAa5iF,EAAQ0iF,GAE1B,IAAK1iF,EAAQ,CACT,IAAI6iF,EAAY,IAAIv9G,MAAM06B,EAAS,IACnC6iF,EAAU5F,MAAQj9E,EAClBA,EAAS6iF,CACb,CACA,IAAIvZ,EAAMwE,EAAS4U,GAAUpqH,KANfgC,KAM4B8xG,cAAepsE,GACrDspE,IAAQyE,GACR9kE,EAAM+hE,WAAW1B,EAAI77E,EAE7B,CAEAzlC,EAAQ8P,UAAUgrH,WAAa96H,EAAQ8P,UAAUirH,QAAU,SAAUL,EACAr9H,GACjE,GAAuB,mBAAZq9H,EAAwB,CAC/B,IAAIj9F,EAAUk9F,OACEz6H,IAAZ7C,GAAyBK,OAAOL,GAAS07H,SACzCt7F,EAAUg9F,GAEdnoH,KAAKwxG,MACDrmF,EACAm9F,OACA16H,EACAoS,KACAooH,EAER,CACA,OAAOpoH,IACX,CACA,CAEA,EAAE,CAAC,SAAS,KAAK,GAAG,CAAC,SAAS4uG,EAAQ5tD,EAAOP,GAC7C,aACAO,EAAOP,QAAU,WACjB,IAAIioE,EAA0B,WAC1B,OAAO,IAAIrqH,EAAU,sEACzB,EACIsqH,EAAiB,WACjB,OAAO,IAAIj7H,EAAQk7H,kBAAkB5oH,KAAKgyG,UAC9C,EACIuB,EAAe,SAASiN,GACxB,OAAO9yH,EAAQ8sC,OAAO,IAAIn8B,EAAUmiH,GACxC,EACA,SAASgE,IAAa,CACtB,IAAIqE,EAAoB,CAAC,EACrBnW,EAAO9D,EAAQ,UACnB8D,EAAKoW,kBAAkBH,GAEvB,IAAII,EAAY,WACZ,IAAIC,EAASxvF,EAAQwvF,OACrB,YAAep7H,IAAXo7H,EACO,KAEJA,CACX,EAIIC,EAAmB,WACnB,MAAO,CACHD,OAAQD,IACRp6E,MAAO,KAEf,EACIu6E,EAAgBxW,EAAKnC,QAAUmC,EAAKwK,0BACpCtO,EAAQ,eAAesa,cAAgB,KACvCC,EAAuB,WACvB,MAAO,CACHH,OAAQD,IACRp6E,MAAO,IAAIu6E,EAAc,qBAEjC,EACIE,EAAa1W,EAAKnC,OAAS0Y,EAjBP,WACpB,OAAO,IACX,EAgBAvW,EAAKkL,kBAAkBlwH,EAAS,cAAe07H,GAC/C,IASI1R,EAAM9I,EAAQ,SACdU,EAAQV,EAAQ,WAChBjgE,EAAQ,IAAI2gE,EAChBoI,EAAIt6G,eAAe1P,EAAS,SAAU,CAACsE,MAAO28C,IAC9C,IAAIs5D,EAAS2G,EAAQ,YACjBvwG,EAAY3Q,EAAQ2Q,UAAY4pG,EAAO5pG,UAC3C3Q,EAAQ80H,WAAava,EAAOua,WAC5B,IAAIF,EAAoB50H,EAAQ40H,kBAAoBra,EAAOqa,kBAC3D50H,EAAQ60H,aAAeta,EAAOsa,aAC9B70H,EAAQg1H,iBAAmBza,EAAOya,iBAClCh1H,EAAQq1H,eAAiB9a,EAAOya,iBAChCh1H,EAAQqgE,eAAiBk6C,EAAOl6C,eAChC,IAAIijD,EAAW,WAAW,EACtBqY,EAAQ,CAAC,EACT3T,EAAc,CAAC,EACfzE,EAAsBrC,EAAQ,cAARA,CAAuBlhH,EAASsjH,GACtDsC,EACA1E,EAAQ,kBAARA,CAA2BlhH,EAASsjH,EACTC,EAAqBsC,EAAciR,GAC9DtO,EAAUtH,EAAQ,YAARA,CAAqBlhH,GAE/B47H,EAAgBpT,EAAQ53G,OAExB4tC,EAAQ0iE,EAAQ,kBAARA,CAA2BlhH,EAASwoH,GAhCzB,WACnBkT,EAAaD,EACbzW,EAAKkL,kBAAkBlwH,EAAS,cAAey7H,EACnD,IACwB,WACpBC,EAAaH,EACbvW,EAAKkL,kBAAkBlwH,EAAS,cAAeu7H,EACnD,IA4BI3F,GADgBp3E,EAAMkqE,cAEtBxH,EAAQ,YAARA,CAAqBlhH,EAASujH,EAAqByE,IACnD2N,EAAczU,EAAQ,iBAARA,CAA0B8G,GACxC6T,EAAqB3a,EAAQ,cAC7B6E,EAAWf,EAAKe,SAChBD,EAAWd,EAAKc,SAWpB,SAAS9lH,EAAQuuH,GACTA,IAAajL,GAXrB,SAAejzG,EAAMk+G,GACjB,GAAY,MAARl+G,GAAgBA,EAAKF,cAAgBnQ,EACrC,MAAM,IAAI2Q,EAAU,wFAExB,GAAwB,mBAAb49G,EACP,MAAM,IAAI59G,EAAU,gCAAkCq0G,EAAKI,YAAYmJ,GAG/E,CAIQnkH,CAAMkI,KAAMi8G,GAEhBj8G,KAAK0xG,UAAY,EACjB1xG,KAAKwpH,0BAAuB57H,EAC5BoS,KAAKypH,wBAAqB77H,EAC1BoS,KAAK0pH,eAAY97H,EACjBoS,KAAK2pH,gBAAa/7H,EAClBoS,KAAK4pH,qBAAqB3N,GAC1Bj8G,KAAKs2G,kBACLt2G,KAAKi9G,WAAW,iBAAkBj9G,KACtC,CAwoBA,SAAS6pH,EAAanvH,GAAIsF,KAAKkmC,QAAQ6gD,iBAAiBrsF,EAAG,CAC3D,SAASovH,EAAYpvH,GAAIsF,KAAKkmC,QAAQ+/E,gBAAgBvrH,GAAG,EAAO,CA4C5D,SAASqvH,EAAU/3H,GACf,IAAI8pB,EAAI,IAAIpuB,EAAQsjH,GACpBl1F,EAAE0tG,qBAAuBx3H,EACzB8pB,EAAE2tG,mBAAqBz3H,EACvB8pB,EAAE4tG,UAAY13H,EACd8pB,EAAE6tG,WAAa33H,CACnB,CAYA,OArsBJtE,EAAQ8P,UAAUtc,SAAW,WACzB,MAAO,kBACX,EAEAwM,EAAQ8P,UAAU+jH,OAAS7zH,EAAQ8P,UAAiB,MAAI,SAAUxS,GAC9D,IAAI2D,EAAMzE,UAAUC,OACpB,GAAIwE,EAAM,EAAG,CACT,IACW2I,EADPitH,EAAiB,IAAIl6H,MAAMsE,EAAM,GACjC+W,EAAI,EACR,IAAKpO,EAAI,EAAGA,EAAI3I,EAAM,IAAK2I,EAAG,CAC1B,IAAIjV,EAAO6H,UAAUoN,GACrB,IAAIo7G,EAAK1tD,SAAS3iE,GAGd,OAAOkxH,EAAa,0DACiBb,EAAKI,YAAYzwH,IAHtDkiI,EAAe7+G,KAAOrjB,CAK9B,CAIA,GAHAkiI,EAAep6H,OAASub,EAGN,mBAFlB1a,EAAKd,UAAUoN,IAGX,MAAM,IAAI+G,EAAU,yDACaq0G,EAAKxxH,SAAS8J,IAEnD,OAAOgV,KAAKrS,UAAKC,EAAWy1H,EAAYkB,EAAgBv5H,EAAIgV,MAChE,CACA,OAAOA,KAAKrS,UAAKC,EAAW5C,EAChC,EAEA0C,EAAQ8P,UAAUwsH,QAAU,WACxB,OAAOhqH,KAAKwxG,MAAMmX,EACdA,OAAgB/6H,EAAWoS,UAAMpS,EACzC,EAEAF,EAAQ8P,UAAU7P,KAAO,SAAUs8H,EAAYC,GAC3C,GAAIh+E,EAAMksE,YAAcluH,UAAUC,OAAS,GACjB,mBAAf8/H,GACc,mBAAdC,EAA0B,CACjC,IAAI1J,EAAM,kDACF9N,EAAKI,YAAYmX,GACrB//H,UAAUC,OAAS,IACnBq2H,GAAO,KAAO9N,EAAKI,YAAYoX,IAEnClqH,KAAK4zG,MAAM4M,EACf,CACA,OAAOxgH,KAAKwxG,MAAMyY,EAAYC,OAAWt8H,OAAWA,OAAWA,EACnE,EAEAF,EAAQ8P,UAAU6L,KAAO,SAAU4gH,EAAYC,GAEvClqH,KAAKwxG,MAAMyY,EAAYC,OAAWt8H,OAAWA,OAAWA,GACpDu8H,aACZ,EAEAz8H,EAAQ8P,UAAUipH,OAAS,SAAUz7H,GACjC,MAAkB,mBAAPA,EACAuoH,EAAa,gCAAkCb,EAAKI,YAAY9nH,IAEpEgV,KAAKY,MAAM4wG,MAAMxmH,OAAI4C,OAAWA,EAAWy7H,OAAOz7H,EAC7D,EAEAF,EAAQ8P,UAAU4sH,OAAS,WACvB,IAAIpb,EAAM,CACNqO,aAAa,EACb2G,YAAY,EACZqG,sBAAkBz8H,EAClB08H,qBAAiB18H,GASrB,OAPIoS,KAAKq9G,eACLrO,EAAIqb,iBAAmBrqH,KAAKhO,QAC5Bg9G,EAAIqO,aAAc,GACXr9G,KAAKgkH,eACZhV,EAAIsb,gBAAkBtqH,KAAK0lC,SAC3BspE,EAAIgV,YAAa,GAEdhV,CACX,EAEAthH,EAAQ8P,UAAUoD,IAAM,WAIpB,OAHI1W,UAAUC,OAAS,GACnB6V,KAAK4zG,MAAM,wDAER,IAAIN,EAAatzG,MAAMkmC,SAClC,EAEAx4C,EAAQ8P,UAAUkM,MAAQ,SAAU1e,GAChC,OAAOgV,KAAKuhH,OAAO7O,EAAK6X,wBAAyBv/H,EACrD,EAEA0C,EAAQ88H,kBAAoBxpE,EAAOP,QAEnC/yD,EAAQgpC,GAAK,SAAUxiB,GACnB,OAAOA,aAAexmB,CAC1B,EAEAA,EAAQ+8H,SAAW/8H,EAAQg9H,aAAe,SAAS1/H,GAC/C,IAAIgkH,EAAM,IAAIthH,EAAQsjH,GACtBhC,EAAI8K,qBACJ,IAAIgO,EAAY59H,UAAUC,OAAS,KAAMiB,OAAOlB,UAAU,IAAI49H,UAE1D9+H,EAASwqH,EAASxoH,EAATwoH,CAAa+V,EAAmBva,EAAK8Y,IAKlD,OAJI9+H,IAAWyqH,GACXzE,EAAIiX,gBAAgBj9H,EAAOmqC,GAAG,GAE7B67E,EAAI2b,iBAAiB3b,EAAI4b,sBACvB5b,CACX,EAEAthH,EAAQkT,IAAM,SAAU+lG,GACpB,OAAO,IAAI2M,EAAa3M,GAAUzgE,SACtC,EAEAx4C,EAAQm9H,KAAO,SAAUjtH,GACrB,IAAIoxG,EAAMiC,EAAoBrzG,GAO9B,OANMoxG,aAAethH,KACjBshH,EAAM,IAAIthH,EAAQsjH,IACd8I,qBACJ9K,EAAI8b,gBACJ9b,EAAIya,mBAAqB7rH,GAEtBoxG,CACX,EAEAthH,EAAQD,QAAUC,EAAQwxD,UAAYxxD,EAAQm9H,KAE9Cn9H,EAAQ8sC,OAAS9sC,EAAQyxD,SAAW,SAAUzZ,GAC1C,IAAIspE,EAAM,IAAIthH,EAAQsjH,GAGtB,OAFAhC,EAAI8K,qBACJ9K,EAAIiX,gBAAgBvgF,GAAQ,GACrBspE,CACX,EAEAthH,EAAQyiH,aAAe,SAASnlH,GAC5B,GAAkB,mBAAPA,EACP,MAAM,IAAIqT,EAAU,gCAAkCq0G,EAAKI,YAAY9nH,IAE3E,OAAO2jD,EAAMwhE,aAAanlH,EAC9B,EAEA0C,EAAQ8P,UAAUg0G,MAAQ,SACtByY,EACAC,EACArrH,EAAMqxG,EACN6a,GAEA,IAAIC,OAAoCp9H,IAAjBm9H,EACnB7kF,EAAU8kF,EAAmBD,EAAe,IAAIr9H,EAAQsjH,GACxDlqH,EAASkZ,KAAKgyG,UACdoU,EAAWt/H,EAAO4qH,UAEjBsZ,IACD9kF,EAAQ0rE,eAAe5xG,KAAM,GAC7BkmC,EAAQ4zE,0BACSlsH,IAAbsiH,GACgC,IAAb,QAAjBlwG,KAAK0xG,aAEHxB,EAD4B,IAAd,SAAXkW,GACQpmH,KAAK8xG,cAELhrH,IAAWkZ,UAAOpS,EAAYoS,KAAKmyG,UAGtDnyG,KAAKi9G,WAAW,iBAAkBj9G,KAAMkmC,IAG5C,IAAInkC,EAAUqnH,IACd,GAAgC,IAAd,SAAXhD,GAA6B,CAChC,IAAIrmG,EAAS/tB,EAAOi5H,EAAUnkI,EAAOokI,kBACN,IAAd,SAAX9E,IACFp0H,EAAQlL,EAAO2iI,mBACf1pG,EAAUkqG,GACwB,IAAd,SAAX7D,IACTp0H,EAAQlL,EAAO0iI,qBACfzpG,EAAUmqG,EACVpjI,EAAOuyH,+BAEP4R,EAAUnkI,EAAOqkI,uCACjBn5H,EAAQ,IAAIswH,EAAkB,8BAC9Bx7H,EAAOwuH,kBAAkBtjH,GACzB+tB,EAAUmqG,GAGdv7E,EAAM9R,OAAOouF,EAASnkI,EAAQ,CAC1Bi5B,QAAS2yF,EAAK+G,YAAY13G,EAASge,GACnCmmB,QAASA,EACTgqE,SAAUA,EACVl+G,MAAOA,GAEf,MACIlL,EAAOskI,cAAcnB,EAAYC,EAAWhkF,EACpCgqE,EAAUnuG,GAGtB,OAAOmkC,CACX,EAEAx4C,EAAQ8P,UAAUo3G,QAAU,WACxB,OAAwB,MAAjB50G,KAAK0xG,SAChB,EAEAhkH,EAAQ8P,UAAUmtH,cAAgB,WAC9B,OAAwC,IAAf,UAAjB3qH,KAAK0xG,UACjB,EAEAhkH,EAAQ8P,UAAUu2G,aAAe,WAC7B,OAAuC,WAAd,SAAjB/zG,KAAK0xG,UACjB,EAEAhkH,EAAQ8P,UAAU6tH,WAAa,SAAU18H,GACrCqR,KAAK0xG,WAA+B,MAAlB1xG,KAAK0xG,UACZ,MAAN/iH,CACT,EAEAjB,EAAQ8P,UAAUstH,cAAgB,WAC9B9qH,KAAK0xG,UAA6B,SAAjB1xG,KAAK0xG,UACtB1xG,KAAKi9G,WAAW,mBAAoBj9G,KACxC,EAEAtS,EAAQ8P,UAAU8tH,aAAe,WAC7BtrH,KAAK0xG,UAA6B,SAAjB1xG,KAAK0xG,UACtB1xG,KAAKi9G,WAAW,kBAAmBj9G,KACvC,EAEAtS,EAAQ8P,UAAU+tH,cAAgB,WAC9BvrH,KAAK0xG,UAA6B,SAAjB1xG,KAAK0xG,UACtB1xG,KAAKi9G,WAAW,kBAAmBj9G,KACvC,EAEAtS,EAAQ8P,UAAU2sH,YAAc,WAC5BnqH,KAAK0xG,UAA6B,QAAjB1xG,KAAK0xG,SAC1B,EAEAhkH,EAAQ8P,UAAUguH,SAAW,WACzB,OAAyB,QAAjBxrH,KAAK0xG,WAAuB,CACxC,EAEAhkH,EAAQ8P,UAAUiuH,gBAAkB,WAChCzrH,KAAK0xG,WAA6B,MAAjB1xG,KAAK0xG,SAC1B,EAEAhkH,EAAQ8P,UAAUk3G,cAAgB,WAC9B10G,KAAK0xG,UAA6B,MAAjB1xG,KAAK0xG,UACtB1xG,KAAKi9G,WAAW,mBAAoBj9G,KACxC,EAEAtS,EAAQ8P,UAAU22G,oBAAsB,WACpCn0G,KAAK0xG,UAA6B,QAAjB1xG,KAAK0xG,SAC1B,EAEAhkH,EAAQ8P,UAAUotH,oBAAsB,WACpC,IAAIj8E,EAAMyhE,qBAAV,CACA,IAAIgW,EAAWpmH,KAAK0xG,UACpB1xG,KAAK0xG,UAAY0U,GACC,UAAXA,IAAyB,EAC5B,SAJkC,CAK1C,EAEA14H,EAAQ8P,UAAUkuH,qBAAuB,WACrC1rH,KAAK0xG,WACD,WAD+B,UAAjB1xG,KAAK0xG,UAE3B,EAEAhkH,EAAQ8P,UAAUmuH,YAAc,SAAUt+H,GACtC,IAAI2hH,EAAgB,IAAV3hH,EAAc2S,KAAK2pH,WAAa3pH,KAC1B,EAAR3S,EAAY,EAAI,GACxB,GAAI2hH,IAAQ6Z,EAEL,YAAYj7H,IAARohH,GAAqBhvG,KAAKoyG,WAC1BpyG,KAAK8xG,cAET9C,CACX,EAEAthH,EAAQ8P,UAAUouH,WAAa,SAAUv+H,GACrC,OAAO2S,KACS,EAAR3S,EAAY,EAAI,EAC5B,EAEAK,EAAQ8P,UAAUquH,sBAAwB,SAAUx+H,GAChD,OAAO2S,KACS,EAAR3S,EAAY,EAAI,EAC5B,EAEAK,EAAQ8P,UAAUsuH,oBAAsB,SAAUz+H,GAC9C,OAAO2S,KACS,EAAR3S,EAAY,EAAI,EAC5B,EAEAK,EAAQ8P,UAAUs0G,YAAc,WAAY,EAE5CpkH,EAAQ8P,UAAUuuH,kBAAoB,SAAUC,GAC7BA,EAASta,UAAxB,IACIua,EAAUD,EAASxC,qBACnBhvF,EAASwxF,EAASvC,mBAClBvjF,EAAU8lF,EAAStC,UACnBxZ,EAAW8b,EAASL,YAAY,QACnB/9H,IAAbsiH,IAAwBA,EAAW2Y,GACvC7oH,KAAKorH,cAAca,EAASzxF,EAAQ0L,EAASgqE,EAAU,KAC3D,EAEAxiH,EAAQ8P,UAAU0uH,mBAAqB,SAAUF,EAAU3+H,GACvD,IAAI4+H,EAAUD,EAASH,sBAAsBx+H,GACzCmtC,EAASwxF,EAASF,oBAAoBz+H,GACtC64C,EAAU8lF,EAASJ,WAAWv+H,GAC9B6iH,EAAW8b,EAASL,YAAYt+H,QACnBO,IAAbsiH,IAAwBA,EAAW2Y,GACvC7oH,KAAKorH,cAAca,EAASzxF,EAAQ0L,EAASgqE,EAAU,KAC3D,EAEAxiH,EAAQ8P,UAAU4tH,cAAgB,SAC9Ba,EACAzxF,EACA0L,EACAgqE,EACAnuG,GAEA,IAAI1U,EAAQ2S,KAAK40G,UAOjB,GALIvnH,GAAS,QACTA,EAAQ,EACR2S,KAAKqrH,WAAW,IAGN,IAAVh+H,EACA2S,KAAK0pH,UAAYxjF,EACjBlmC,KAAK2pH,WAAazZ,EACK,mBAAZ+b,IACPjsH,KAAKwpH,qBAAuB9W,EAAK+G,YAAY13G,EAASkqH,IAEpC,mBAAXzxF,IACPx6B,KAAKypH,mBAAqB/W,EAAK+G,YAAY13G,EAASy4B,QAErD,CACH,IAAI2xF,EAAe,EAAR9+H,EAAY,EACvB2S,KAAKmsH,EAAO,GAAKjmF,EACjBlmC,KAAKmsH,EAAO,GAAKjc,EACM,mBAAZ+b,IACPjsH,KAAKmsH,EAAO,GACRzZ,EAAK+G,YAAY13G,EAASkqH,IAEZ,mBAAXzxF,IACPx6B,KAAKmsH,EAAO,GACRzZ,EAAK+G,YAAY13G,EAASy4B,GAEtC,CAEA,OADAx6B,KAAKqrH,WAAWh+H,EAAQ,GACjBA,CACX,EAEAK,EAAQ8P,UAAU6oH,OAAS,SAAU+F,EAAW31F,GAC5Cz2B,KAAKorH,mBAAcx9H,OAAWA,EAAW6oC,EAAK21F,EAAW,KAC7D,EAEA1+H,EAAQ8P,UAAUupF,iBAAmB,SAAS/0F,EAAOq6H,GACjD,GAAsC,IAAf,UAAjBrsH,KAAK0xG,WAAX,CACA,GAAI1/G,IAAUgO,KACV,OAAOA,KAAKimH,gBAAgByC,KAA2B,GAC3D,IAAIz2C,EAAeg/B,EAAoBj/G,EAAOgO,MAC9C,KAAMiyE,aAAwBvkF,GAAU,OAAOsS,KAAKylH,SAASzzH,GAEzDq6H,GAAYrsH,KAAK4xG,eAAe3/B,EAAc,GAGlD,IAAI/rC,EAAU+rC,EAAa+/B,UAE3B,GAAI9rE,IAAYlmC,KAAhB,CAKA,IAAIomH,EAAWlgF,EAAQwrE,UACvB,GAA+B,IAAd,SAAX0U,GAA6B,CAC/B,IAAIz3H,EAAMqR,KAAK40G,UACXjmH,EAAM,GAAGu3C,EAAQ6lF,kBAAkB/rH,MACvC,IAAK,IAAI1I,EAAI,EAAGA,EAAI3I,IAAO2I,EACvB4uC,EAAQgmF,mBAAmBlsH,KAAM1I,GAErC0I,KAAKurH,gBACLvrH,KAAKqrH,WAAW,GAChBrrH,KAAKssH,aAAar6C,EACtB,MAAO,GAA+B,IAAd,SAAXm0C,GACTpmH,KAAKylH,SAASv/E,EAAQu7E,eACnB,GAA+B,IAAd,SAAX2E,GACTpmH,KAAKoxG,QAAQlrE,EAAQo7E,eAClB,CACH,IAAI57E,EAAS,IAAI48E,EAAkB,8BACnCp8E,EAAQovE,kBAAkB5vE,GAC1B1lC,KAAKoxG,QAAQ1rE,EACjB,CApBA,MAFI1lC,KAAKoxG,QAAQsX,IAZ+B,CAmCpD,EAEAh7H,EAAQ8P,UAAUyoH,gBAClB,SAASvgF,EAAQ6mF,EAAaC,GAC1B,IAAI9V,EAAQhE,EAAK+Z,kBAAkB/mF,GAC/BgnF,EAAWhW,IAAUhxE,EACzB,IAAKgnF,IAAaF,GAA0BtgF,EAAMksE,WAAY,CAC1D,IAAI3+F,EAAU,4CACVi5F,EAAKI,YAAYptE,GACrB1lC,KAAK4zG,MAAMn6F,GAAS,EACxB,CACAzZ,KAAKs1G,kBAAkBoB,IAAO6V,GAAcG,GAC5C1sH,KAAKoxG,QAAQ1rE,EACjB,EAEAh4C,EAAQ8P,UAAUosH,qBAAuB,SAAU3N,GAC/C,GAAIA,IAAajL,EAAjB,CACA,IAAI9qE,EAAUlmC,KACdA,KAAK85G,qBACL95G,KAAKu2G,eACL,IAAIgW,GAAc,EACdp0F,EAAIn4B,KAAK+8G,SAASd,GAAU,SAASjqH,GACrCk0C,EAAQ6gD,iBAAiB/0F,EAC7B,IAAG,SAAU0zC,GACTQ,EAAQ+/E,gBAAgBvgF,EAAQ6mF,EACpC,IACAA,GAAc,EACdvsH,KAAKw2G,mBAEK5oH,IAANuqC,GACA+N,EAAQ+/E,gBAAgB9tF,GAAG,EAdE,CAgBrC,EAEAzqC,EAAQ8P,UAAUmvH,0BAA4B,SAC1C5sG,EAASmwF,EAAUl+G,EAAOk0C,GAE1B,IAAIkgF,EAAWlgF,EAAQwrE,UACvB,GAA4B,IAAX,MAAX0U,GAAN,CAEA,IAAI3iI,EADJyiD,EAAQqwE,eAEJrG,IAAamZ,EACRr3H,GAAiC,iBAAjBA,EAAM7H,OAKvB1G,EAAI+vH,EAASzzF,GAAShY,MAAM/H,KAAK8xG,cAAe9/G,IAJhDvO,EAAIgwH,GACFtgF,EAAI,IAAI90B,EAAU,iCACIq0G,EAAKI,YAAY9gH,IAK7CvO,EAAI+vH,EAASzzF,GAAS/hB,KAAKkyG,EAAUl+G,GAEzC,IAAImpH,EAAiBj1E,EAAQswE,cAED,IAAX,OADjB4P,EAAWlgF,EAAQwrE,cAGfjuH,IAAMiyH,EACNxvE,EAAQkrE,QAAQp/G,GACTvO,IAAMgwH,EACbvtE,EAAQ+/E,gBAAgBxiI,EAAE0vC,GAAG,IAE7B+Y,EAAM+zE,sBAAsBx8H,EAAG03H,EAAgB,GAAKj1E,EAASlmC,MAC7DkmC,EAAQ6gD,iBAAiBtjG,IAxBS,CA0B1C,EAEAiK,EAAQ8P,UAAUw0G,QAAU,WAExB,IADA,IAAIhD,EAAMhvG,KACHgvG,EAAI+E,gBAAgB/E,EAAMA,EAAIgF,YACrC,OAAOhF,CACX,EAEAthH,EAAQ8P,UAAUw2G,UAAY,WAC1B,OAAOh0G,KAAKypH,kBAChB,EAEA/7H,EAAQ8P,UAAU8uH,aAAe,SAASpmF,GACtClmC,KAAKypH,mBAAqBvjF,CAC9B,EAEAx4C,EAAQ8P,UAAUovH,eAAiB,SAAS1mF,EAASnmB,EAASmwF,EAAUl+G,GACpE,IAAI66H,EAAY3mF,aAAmBx4C,EAC/B04H,EAAWpmH,KAAK0xG,UAChBob,EAA8C,IAAf,UAAX1G,GACI,IAAX,MAAXA,IACEyG,GAAW3mF,EAAQuvE,0BAEnBvF,aAAoBoT,GACpBpT,EAAS6T,oBACT7T,EAASsT,cAAgBt9E,EACrBstE,EAASzzF,GAAS/hB,KAAKkyG,EAAUl+G,KAAWyhH,GAC5CvtE,EAAQkrE,QAAQqC,EAAStgF,IAEtBpT,IAAY4oG,EACnBziF,EAAQu/E,SAASkD,EAAe3qH,KAAKkyG,IAC9BA,aAAoBsU,EAC3BtU,EAASwV,kBAAkBx/E,GACpB2mF,GAAa3mF,aAAmBotE,EACvCptE,EAAQuuE,UAERvE,EAAS5pE,UAEa,mBAAZvmB,EACT8sG,GAGGC,GAAiB5mF,EAAQ0kF,sBAC7B5qH,KAAK2sH,0BAA0B5sG,EAASmwF,EAAUl+G,EAAOk0C,IAHzDnmB,EAAQ/hB,KAAKkyG,EAAUl+G,EAAOk0C,GAK3BgqE,aAAoBsU,EACtBtU,EAASqV,gBACqB,IAAd,SAAXa,GACFlW,EAAS4V,kBAAkB9zH,EAAOk0C,GAElCgqE,EAAS6V,iBAAiB/zH,EAAOk0C,IAGlC2mF,IACHC,GAAiB5mF,EAAQ0kF,sBACE,IAAd,SAAXxE,GACFlgF,EAAQu/E,SAASzzH,GAEjBk0C,EAAQkrE,QAAQp/G,GAG5B,EAEAtE,EAAQ8P,UAAU2tH,uCAAyC,SAASjU,GAChE,IAAIn3F,EAAUm3F,EAAIn3F,QACdmmB,EAAUgxE,EAAIhxE,QACdgqE,EAAWgH,EAAIhH,SACfl+G,EAAQklH,EAAIllH,MACO,mBAAZ+tB,EACDmmB,aAAmBx4C,EAGrBsS,KAAK2sH,0BAA0B5sG,EAASmwF,EAAUl+G,EAAOk0C,GAFzDnmB,EAAQ/hB,KAAKkyG,EAAUl+G,EAAOk0C,GAI3BA,aAAmBx4C,GAC1Bw4C,EAAQkrE,QAAQp/G,EAExB,EAEAtE,EAAQ8P,UAAU0tH,kBAAoB,SAAShU,GAC3Cl3G,KAAK4sH,eAAe1V,EAAIhxE,QAASgxE,EAAIn3F,QAASm3F,EAAIhH,SAAUgH,EAAIllH,MACpE,EAEAtE,EAAQ8P,UAAUuvH,gBAAkB,SAAShtG,EAAS/tB,EAAOo0H,GACzD,IAAIlgF,EAAUlmC,KAAK0pH,UACfxZ,EAAWlwG,KAAK2rH,YAAY,GAChC3rH,KAAK0pH,eAAY97H,EACjBoS,KAAK2pH,gBAAa/7H,EAClBoS,KAAK4sH,eAAe1mF,EAASnmB,EAASmwF,EAAUl+G,EACpD,EAEAtE,EAAQ8P,UAAUwvH,0BAA4B,SAAS3/H,GACnD,IAAI8+H,EAAe,EAAR9+H,EAAY,EACvB2S,KAAKmsH,EAAO,GACZnsH,KAAKmsH,EAAO,GACZnsH,KAAKmsH,EAAO,GACZnsH,KAAKmsH,EAAO,QAAKv+H,CACrB,EAEAF,EAAQ8P,UAAUioH,SAAW,SAAUzzH,GACnC,IAAIo0H,EAAWpmH,KAAK0xG,UACpB,MAAiB,UAAX0U,KAA0B,IAAhC,CACA,GAAIp0H,IAAUgO,KAAM,CAChB,IAAIsU,EAAMo0G,IAEV,OADA1oH,KAAKs1G,kBAAkBhhG,GAChBtU,KAAKoxG,QAAQ98F,EACxB,CACAtU,KAAK8qH,gBACL9qH,KAAKypH,mBAAqBz3H,GAEV,MAAXo0H,GAAoB,IACW,IAAf,UAAXA,GACFpmH,KAAKiwG,kBAELthE,EAAMkiE,eAAe7wG,MAEzBA,KAAKi6G,oBAfkC,CAiB/C,EAEAvsH,EAAQ8P,UAAU4zG,QAAU,SAAU1rE,GAClC,IAAI0gF,EAAWpmH,KAAK0xG,UACpB,MAAiB,UAAX0U,KAA0B,IAAhC,CAIA,GAHApmH,KAAKsrH,eACLtrH,KAAKwpH,qBAAuB9jF,EAExB1lC,KAAKwrH,WACL,OAAO78E,EAAM2hE,WAAW5qE,EAAQgtE,EAAKnC,SAGzB,MAAX6V,GAAoB,EACrBz3E,EAAMkiE,eAAe7wG,MAErBA,KAAK04G,iCAXkC,CAa/C,EAEAhrH,EAAQ8P,UAAUyvH,iBAAmB,SAAUt+H,EAAKqD,GAChD,IAAK,IAAIsF,EAAI,EAAGA,EAAI3I,EAAK2I,IAAK,CAC1B,IAAIyoB,EAAU/f,KAAK6rH,sBAAsBv0H,GACrC4uC,EAAUlmC,KAAK4rH,WAAWt0H,GAC1B44G,EAAWlwG,KAAK2rH,YAAYr0H,GAChC0I,KAAKgtH,0BAA0B11H,GAC/B0I,KAAK4sH,eAAe1mF,EAASnmB,EAASmwF,EAAUl+G,EACpD,CACJ,EAEAtE,EAAQ8P,UAAU0vH,gBAAkB,SAAUv+H,EAAK+2C,GAC/C,IAAK,IAAIpuC,EAAI,EAAGA,EAAI3I,EAAK2I,IAAK,CAC1B,IAAIyoB,EAAU/f,KAAK8rH,oBAAoBx0H,GACnC4uC,EAAUlmC,KAAK4rH,WAAWt0H,GAC1B44G,EAAWlwG,KAAK2rH,YAAYr0H,GAChC0I,KAAKgtH,0BAA0B11H,GAC/B0I,KAAK4sH,eAAe1mF,EAASnmB,EAASmwF,EAAUxqE,EACpD,CACJ,EAEAh4C,EAAQ8P,UAAUyyG,gBAAkB,WAChC,IAAImW,EAAWpmH,KAAK0xG,UAChB/iH,EAAkB,MAAXy3H,EAEX,GAAIz3H,EAAM,EAAG,CACT,GAA+B,IAAd,SAAXy3H,GAA6B,CAC/B,IAAI1gF,EAAS1lC,KAAKwpH,qBAClBxpH,KAAK+sH,gBAAgB/sH,KAAKypH,mBAAoB/jF,EAAQ0gF,GACtDpmH,KAAKktH,gBAAgBv+H,EAAK+2C,EAC9B,KAAO,CACH,IAAI1zC,EAAQgO,KAAKypH,mBACjBzpH,KAAK+sH,gBAAgB/sH,KAAKwpH,qBAAsBx3H,EAAOo0H,GACvDpmH,KAAKitH,iBAAiBt+H,EAAKqD,EAC/B,CACAgO,KAAKqrH,WAAW,EACpB,CACArrH,KAAK88G,wBACT,EAEApvH,EAAQ8P,UAAUy7G,cAAgB,WAC9B,IAAImN,EAAWpmH,KAAK0xG,UACpB,OAA+B,IAAd,SAAX0U,GACKpmH,KAAKypH,mBACsB,IAAd,SAAXrD,GACFpmH,KAAKwpH,0BADT,CAGX,EAEsB,oBAAX9rH,QAA0BA,OAAOozB,aACxC4mF,EAAIt6G,eAAe1P,EAAQ8P,UAAWE,OAAOozB,YAAa,CACtDnnC,IAAK,WACD,MAAO,QACX,IAOR+D,EAAQkhD,MAAQlhD,EAAQzC,QAAU,WAG9B,OAFAihD,EAAM60E,WAAW,gBAAiB,eAE3B,CACH76E,QAFU,IAAIx4C,EAAQsjH,GAGtBvjH,QAASo8H,EACTrvF,OAAQsvF,EAEhB,EAEApX,EAAKkL,kBAAkBlwH,EACA,2BACAg7H,GAEvB9Z,EAAQ,WAARA,CAAoBlhH,EAASsjH,EAAUC,EAAqBsC,EACxDrnE,GACJ0iE,EAAQ,SAARA,CAAkBlhH,EAASsjH,EAAUC,EAAqB/kE,GAC1D0iE,EAAQ,WAARA,CAAoBlhH,EAAS4lH,EAAcC,EAAcrnE,GACzD0iE,EAAQ,mBAARA,CAA4BlhH,GAC5BkhH,EAAQ,2BAARA,CAAoClhH,GACpCkhH,EAAQ,SAARA,CACIlhH,EAAS4lH,EAAcrC,EAAqBD,EAAUriE,GAC1DjhD,EAAQA,QAAUA,EAClBA,EAAQnL,QAAU,QAClBqsH,EAAQ,gBAARA,CAAyBlhH,GACzBkhH,EAAQ,kBAARA,CAA2BlhH,EAAS6lH,EAAcvC,EAAUC,EAAqBuT,EAAWt4E,GAC5F0iE,EAAQ,WAARA,CAAoBlhH,EAAS4lH,EAAcC,EAActC,EAAqBD,EAAU9kE,GACxF0iE,EAAQ,eAARA,CAAwBlhH,GACxBkhH,EAAQ,iBAARA,CAA0BlhH,EAASsjH,GACnCpC,EAAQ,aAARA,CAAsBlhH,EAAS4lH,EAAcrC,EAAqBsC,GAClE3E,EAAQ,YAARA,CAAqBlhH,EAASsjH,EAAUC,EAAqBsC,GAC7D3E,EAAQ,cAARA,CAAuBlhH,EAAS4lH,EAAcC,EAActC,EAAqBD,EAAU9kE,GAC3F0iE,EAAQ,cAARA,CAAuBlhH,EAAS4lH,EAAcpnE,GAC9C0iE,EAAQ,YAARA,CAAqBlhH,EAAS4lH,EAAcC,GAC5C3E,EAAQ,cAARA,CAAuBlhH,EAASsjH,EAAU9kE,GAC1C0iE,EAAQ,aAARA,CAAsBlhH,EAAS6lH,EAActC,EAAqBqY,EAAetY,EAAU9kE,GAC3F0iE,EAAQ,WAARA,CAAoBlhH,GACpBkhH,EAAQ,YAARA,CAAqBlhH,EAASsjH,GAC9BpC,EAAQ,cAARA,CAAuBlhH,EAASsjH,GAE5B0B,EAAKya,iBAAiBz/H,GACtBglH,EAAKya,iBAAiBz/H,EAAQ8P,WAU9BusH,EAAU,CAAChzH,EAAG,IACdgzH,EAAU,CAAC/yH,EAAG,IACd+yH,EAAU,CAAC91F,EAAG,IACd81F,EAAU,GACVA,GAAU,WAAW,IACrBA,OAAUn8H,GACVm8H,GAAU,GACVA,EAAU,IAAIr8H,EAAQsjH,IACtB9kE,EAAMu0E,UAAUnR,EAAMH,eAAgBuD,EAAKgO,eACpChzH,CAEX,CAEA,EAAE,CAAC,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,gBAAgB,EAAE,WAAW,EAAE,iBAAiB,EAAE,YAAY,EAAE,kBAAkB,EAAE,mBAAmB,GAAG,YAAY,GAAG,WAAW,GAAG,QAAQ,GAAG,cAAc,GAAG,YAAY,GAAG,kBAAkB,GAAG,SAAS,GAAG,WAAW,GAAG,WAAW,GAAG,aAAa,GAAG,eAAe,GAAG,kBAAkB,GAAG,iBAAiB,GAAG,aAAa,GAAG,YAAY,GAAG,cAAc,GAAG,cAAc,GAAG,YAAY,GAAG,2BAA2B,GAAG,cAAc,GAAG,cAAc,GAAG,aAAa,GAAG,SAAS,GAAG,iBAAcE,IAAY,GAAG,CAAC,SAASghH,EAAQ5tD,EAAOP,GACnkB,aACAO,EAAOP,QAAU,SAAS/yD,EAASsjH,EAAUC,EACzCsC,EAAciR,GAClB,IAAI9R,EAAO9D,EAAQ,UAWnB,SAAS0E,EAAavhG,GAClB,IAAIm0B,EAAUlmC,KAAK+kH,SAAW,IAAIr3H,EAAQsjH,GACtCj/F,aAAkBrkB,IAClBw4C,EAAQ0rE,eAAe7/F,EAAQ,GAC/BA,EAAO0mG,+BAEXvyE,EAAQgsE,aAAalyG,MACrBA,KAAKk3B,QAAUnlB,EACf/R,KAAK40G,QAAU,EACf50G,KAAKunH,eAAiB,EACtBvnH,KAAKqnH,WAAMz5H,GAAY,EAC3B,CA+JA,OApLc8kH,EAAKnkG,QAsBnBmkG,EAAKqM,SAASzL,EAAckR,GAE5BlR,EAAa91G,UAAUrT,OAAS,WAC5B,OAAO6V,KAAK40G,OAChB,EAEAtB,EAAa91G,UAAU0oC,QAAU,WAC7B,OAAOlmC,KAAK+kH,QAChB,EAEAzR,EAAa91G,UAAU6pH,MAAQ,SAASjwF,EAAKv4B,EAAGuuH,GAC5C,IAAIr7G,EAASk/F,EAAoBjxG,KAAKk3B,QAASl3B,KAAK+kH,UACpD,GAAIhzG,aAAkBrkB,EAAS,CAE3B,IAAI04H,GADJr0G,EAASA,EAAOigG,WACMN,UAItB,GAFA1xG,KAAKk3B,QAAUnlB,EAEgB,IAAd,SAAXq0G,GAEF,OADApmH,KAAK+kH,SAAS6F,sBACP74G,EAAOy/F,MACVp6E,EACAp3B,KAAKoxG,aACLxjH,EACAoS,KACAotH,GAED,GAA+B,IAAd,SAAXhH,GAEN,OAA+B,IAAd,SAAXA,GACFpmH,KAAKoxG,QAAQr/F,EAAOuvG,WAEpBthH,KAAKy0G,UAJZ1iG,EAASA,EAAO0vG,QAMxB,CAEA,GAAe,QADf1vG,EAAS2gG,EAAK2a,QAAQt7G,IAQA,IAAlBA,EAAO5nB,OASX6V,KAAKstH,SAASv7G,IARmB,IAAzBq7G,EACAptH,KAAKutH,qBAGLvtH,KAAKwnH,SApEjB,SAA2BtzG,GACvB,OAAOA,GACP,KAAM,EAAG,MAAO,GAChB,KAAM,EAAG,MAAO,CAAC,EACjB,KAAM,EAAG,OAAO,IAAIrrB,IAExB,CA8D0B2kI,CAAkBJ,QAZxC,CACI,IAAI94G,EAAMi/F,EACN,oDAAsDb,EAAKI,YAAY/gG,IAAS2zB,SACpF1lC,KAAK+kH,SAASkB,gBAAgB3xG,GAAK,EAEvC,CAYJ,EAEAg/F,EAAa91G,UAAU8vH,SAAW,SAASv7G,GACvC,IAAIpjB,EAAMqR,KAAKytH,gBAAgB17G,EAAO5nB,QACtC6V,KAAK40G,QAAUjmH,EACfqR,KAAKk3B,QAAUl3B,KAAK0tH,mBAAqB,IAAIrjI,MAAMsE,GAAOqR,KAAKk3B,QAI/D,IAHA,IAAIluC,EAASgX,KAAK+kH,SACd4I,GAAa,EACbvH,EAAW,KACN9uH,EAAI,EAAGA,EAAI3I,IAAO2I,EAAG,CAC1B,IAAI26E,EAAeg/B,EAAoBl/F,EAAOza,GAAItO,GAI9Co9H,EAFAn0C,aAAwBvkF,GACxBukF,EAAeA,EAAa+/B,WACJN,UAEb,KAGXic,EACiB,OAAbvH,GACAn0C,EAAawmC,8BAEG,OAAb2N,EACwB,IAAd,SAAXA,IACFn0C,EAAao0C,OAAOrmH,KAAM1I,GAC1B0I,KAAKk3B,QAAQ5/B,GAAK26E,GAElB07C,EADkC,IAAd,SAAXvH,GACIpmH,KAAK8lH,kBAAkB7zC,EAAawvC,SAAUnqH,GACzB,IAAd,SAAX8uH,GACIpmH,KAAK+lH,iBAAiB9zC,EAAaqvC,UAAWhqH,GAE9C0I,KAAK0lH,kBAAkBpuH,GAGxCq2H,EAAa3tH,KAAK8lH,kBAAkB7zC,EAAc36E,EAE1D,CACKq2H,GAAY3kI,EAAO4hI,qBAC5B,EAEAtX,EAAa91G,UAAU+nH,YAAc,WACjC,OAAwB,OAAjBvlH,KAAKk3B,OAChB,EAEAo8E,EAAa91G,UAAUgqH,SAAW,SAAUx1H,GACxCgO,KAAKk3B,QAAU,KACfl3B,KAAK+kH,SAASU,SAASzzH,EAC3B,EAEAshH,EAAa91G,UAAUi3G,QAAU,YACzBz0G,KAAKulH,eAAkBvlH,KAAK+kH,SAASlR,mBACzC7zG,KAAKk3B,QAAU,KACfl3B,KAAK+kH,SAAStQ,UAClB,EAEAnB,EAAa91G,UAAU4zG,QAAU,SAAU1rE,GACvC1lC,KAAKk3B,QAAU,KACfl3B,KAAK+kH,SAASkB,gBAAgBvgF,GAAQ,EAC1C,EAEA4tE,EAAa91G,UAAUsoH,kBAAoB,SAAU9zH,EAAO3E,GAGxD,OAFA2S,KAAKk3B,QAAQ7pC,GAAS2E,IACAgO,KAAKunH,gBACNvnH,KAAK40G,UACtB50G,KAAKwnH,SAASxnH,KAAKk3B,UACZ,EAGf,EAEAo8E,EAAa91G,UAAUkoH,kBAAoB,WAEvC,OADA1lH,KAAKy0G,WACE,CACX,EAEAnB,EAAa91G,UAAUuoH,iBAAmB,SAAUrgF,GAGhD,OAFA1lC,KAAKunH,iBACLvnH,KAAKoxG,QAAQ1rE,IACN,CACX,EAEA4tE,EAAa91G,UAAU+3G,iBAAmB,WACtC,IAAIv1G,KAAKulH,cAAT,CACA,IAAIxzG,EAAS/R,KAAKk3B,QAElB,GADAl3B,KAAKy0G,UACD1iG,aAAkBrkB,EAClBqkB,EAAOu0B,cAEP,IAAK,IAAIhvC,EAAI,EAAGA,EAAIya,EAAO5nB,SAAUmN,EAC7Bya,EAAOza,aAAc5J,GACrBqkB,EAAOza,GAAGgvC,QARQ,CAYlC,EAEAgtE,EAAa91G,UAAUkwH,iBAAmB,WACtC,OAAO,CACX,EAEApa,EAAa91G,UAAUiwH,gBAAkB,SAAU9+H,GAC/C,OAAOA,CACX,EAEO2kH,CACP,CAEA,EAAE,CAAC,SAAS,KAAK,GAAG,CAAC,SAAS1E,EAAQ5tD,EAAOP,GAC7C,aACAO,EAAOP,QAAU,SAAS/yD,EAASsjH,GACnC,IAAI4c,EAAO,CAAC,EACRlb,EAAO9D,EAAQ,UACf2a,EAAqB3a,EAAQ,cAC7Bif,EAAenb,EAAKmb,aACpBjG,EAAmBlV,EAAKkV,iBACxBjV,EAAcD,EAAKC,YACnBt0G,EAAYuwG,EAAQ,YAAYvwG,UAEhCyvH,EAAqB,CAACC,mBAAmB,GAUzCC,EAAqB,IAAIp8D,OAAO,OATlB,CACd,QAAY,SACZ,OACA,YACA,SACA,SACA,YACA,qBAEqDpvE,KAAK,KAAO,MAEjEyrI,EAAgB,SAAS7kI,GACzB,OAAOspH,EAAKQ,aAAa9pH,IACF,MAAnBA,EAAKwV,OAAO,IACH,gBAATxV,CACR,EAEA,SAAS8kI,EAAYzhI,GACjB,OAAQuhI,EAAmBrrI,KAAK8J,EACpC,CAEA,SAAS0hI,EAAcnjI,GACnB,IACI,OAAgC,IAAzBA,EAAG+iI,iBACd,CACA,MAAO56F,GACH,OAAO,CACX,CACJ,CAEA,SAASi7F,EAAexwH,EAAKnR,EAAK4hI,GAC9B,IAAIn6G,EAAMw+F,EAAK4b,yBAAyB1wH,EAAKnR,EAAM4hI,EACXP,GACxC,QAAO55G,GAAMi6G,EAAcj6G,EAC/B,CAmCA,IAAIq6G,EAAmB,SAASh7F,GAC5B,OAAOA,EAAIljC,QAAQ,QAAS,MAChC,EAuJIm+H,EAAsB7b,OArJtB8b,EA2HJ,SAAoCnxG,EAAU4yF,EAAUrxG,EAAG7T,EAAIkvD,EAAI4tE,GAC/D,IAAI4G,EAAc,WAAa,OAAO1uH,IAAM,CAA1B,GACd+sB,EAASzP,EAIb,SAASqxG,IACL,IAAIzJ,EAAYhV,EACZA,IAAa0d,IAAM1I,EAAYllH,MACnC,IAAIkmC,EAAU,IAAIx4C,EAAQsjH,GAC1B9qE,EAAQ4zE,qBACR,IAAIlE,EAAuB,iBAAX7oF,GAAuB/sB,OAAS0uH,EAC1C1uH,KAAK+sB,GAAUzP,EACjBtyB,EAAKu+H,EAAmBrjF,EAAS4hF,GACrC,IACIlS,EAAG7tG,MAAMm9G,EAAW2I,EAAa3jI,UAAWc,GAChD,CAAE,MAAMmoC,GACJ+S,EAAQ+/E,gBAAgB2B,EAAiBz0F,IAAI,GAAM,EACvD,CAEA,OADK+S,EAAQykF,iBAAiBzkF,EAAQ0kF,sBAC/B1kF,CACX,CAEA,MApBsB,iBAAXnZ,IACPzP,EAAWtyB,GAkBf0nH,EAAKkL,kBAAkB+Q,EAAa,qBAAqB,GAClDA,CACX,EAMA,SAASC,EAAahxH,EAAKywH,EAAQzmI,EAAQinI,EAAa/G,GAKpD,IAJA,IAAIgH,EAAe,IAAIl9D,OAAO28D,EAAiBF,GAAU,KACrD5L,EAlLR,SAA8B7kH,EAAKywH,EAAQS,EAAclnI,GAGrD,IAFA,IAAI4E,EAAOkmH,EAAKqc,kBAAkBnxH,GAC9BoxG,EAAM,GACD13G,EAAI,EAAGA,EAAI9K,EAAKrC,SAAUmN,EAAG,CAClC,IAAI7K,EAAMD,EAAK8K,GACXtF,EAAQ4L,EAAInR,GACZuiI,EAAsBpnI,IAAWqmI,GACxBA,EAAcxhI,EAAKuF,EAAO4L,GAClB,mBAAV5L,GACNm8H,EAAcn8H,IACdo8H,EAAexwH,EAAKnR,EAAK4hI,KAC1BzmI,EAAO6E,EAAKuF,EAAO4L,EAAKoxH,IACxBhgB,EAAIplH,KAAK6C,EAAKuF,EAEtB,CAEA,OA/BJ,SAAoBg9G,EAAKqf,EAAQS,GAC7B,IAAK,IAAIx3H,EAAI,EAAGA,EAAI03G,EAAI7kH,OAAQmN,GAAK,EAAG,CACpC,IAAI7K,EAAMuiH,EAAI13G,GACd,GAAIw3H,EAAansI,KAAK8J,GAElB,IADA,IAAIwiI,EAAwBxiI,EAAI4D,QAAQy+H,EAAc,IAC7CppH,EAAI,EAAGA,EAAIspG,EAAI7kH,OAAQub,GAAK,EACjC,GAAIspG,EAAItpG,KAAOupH,EACX,MAAM,IAAI5wH,EAAU,qGACfhO,QAAQ,KAAMg+H,GAInC,CACJ,CAiBIa,CAAWlgB,EAAKqf,EAAQS,GACjB9f,CACX,CAkKQmgB,CAAqBvxH,EAAKywH,EAAQS,EAAclnI,GAE3C0P,EAAI,EAAG3I,EAAM8zH,EAAQt4H,OAAQmN,EAAI3I,EAAK2I,GAAI,EAAG,CAClD,IAAI7K,EAAMg2H,EAAQnrH,GACdtM,EAAKy3H,EAAQnrH,EAAE,GACf83H,EAAiB3iI,EAAM4hI,EAC3B,GAAIQ,IAAgBL,EAChB5wH,EAAIwxH,GACAZ,EAAoB/hI,EAAKmhI,EAAMnhI,EAAKzB,EAAIqjI,EAAQvG,OACjD,CACH,IAAI6G,EAAcE,EAAY7jI,GAAI,WAC9B,OAAOwjI,EAAoB/hI,EAAKmhI,EAAMnhI,EACXzB,EAAIqjI,EAAQvG,EAC3C,IACApV,EAAKkL,kBAAkB+Q,EAAa,qBAAqB,GACzD/wH,EAAIwxH,GAAkBT,CAC1B,CACJ,CAEA,OADAjc,EAAKya,iBAAiBvvH,GACfA,CACX,CAOAlQ,EAAQ2hI,UAAY,SAAUrkI,EAAID,GAC9B,GAAkB,mBAAPC,EACP,MAAM,IAAIqT,EAAU,gCAAkCq0G,EAAKI,YAAY9nH,IAE3E,GAAImjI,EAAcnjI,GACd,OAAOA,EAGX,IAbesyB,EAAU4yF,EAAU4X,EAe/B9Y,GAfW1xF,EAeKtyB,EAfKklH,OAaUtiH,KADnC7C,EAAUK,OAAOL,IACMgX,QAAwB6rH,EAAO7iI,EAAQgX,QAb3B+lH,IAcjB/8H,EAAQ+8H,UAbnB0G,EAAoBlxG,EAAU4yF,OAAUtiH,EACnB0vB,EAAU,KAAMwqG,IAe5C,OADApV,EAAK4c,gBAAgBtkI,EAAIgkH,EAAKkf,GACvBlf,CACX,EAEAthH,EAAQkhI,aAAe,SAAU9nI,EAAQiE,GACrC,GAAsB,mBAAXjE,GAA2C,iBAAXA,EACvC,MAAM,IAAIuX,EAAU,gGAGxB,IAAIypH,KADJ/8H,EAAUK,OAAOL,IACS+8H,UACtBuG,EAAStjI,EAAQsjI,OACC,iBAAXA,IAAqBA,EAxRhB,SAyRhB,IAAIzmI,EAASmD,EAAQnD,OACC,mBAAXA,IAAuBA,EAASqmI,GAC3C,IAAIY,EAAc9jI,EAAQ8jI,YAG1B,GAF2B,mBAAhBA,IAA4BA,EAAcL,IAEhD9b,EAAKQ,aAAamb,GACnB,MAAM,IAAI7L,WAAW,uEAIzB,IADA,IAAIh2H,EAAOkmH,EAAKqc,kBAAkBjoI,GACzBwQ,EAAI,EAAGA,EAAI9K,EAAKrC,SAAUmN,EAAG,CAClC,IAAItF,EAAQlL,EAAO0F,EAAK8K,IACR,gBAAZ9K,EAAK8K,IACLo7G,EAAKje,QAAQziG,KACb48H,EAAa58H,EAAMwL,UAAW6wH,EAAQzmI,EAAQinI,EAC1C/G,GACJ8G,EAAa58H,EAAOq8H,EAAQzmI,EAAQinI,EAAa/G,GAEzD,CAEA,OAAO8G,EAAa9nI,EAAQunI,EAAQzmI,EAAQinI,EAAa/G,EAC7D,CACA,CAGA,EAAE,CAAC,WAAW,GAAG,aAAa,GAAG,SAAS,KAAK,GAAG,CAAC,SAASlZ,EAAQ5tD,EAAOP,GAC3E,aACAO,EAAOP,QAAU,SACb/yD,EAAS4lH,EAAcrC,EAAqBsC,GAChD,IAGIgc,EAHA7c,EAAO9D,EAAQ,UACf5pD,EAAW0tD,EAAK1tD,SAChB0yD,EAAM9I,EAAQ,SAEC,mBAAR/lH,MAAoB0mI,EAAS1mI,KAExC,IAAI2mI,EAAe,WACf,IAAIniI,EAAQ,EACR+b,EAAO,EAEX,SAASqmH,EAAaz9H,EAAOvF,GACzBuT,KAAK3S,GAAS2E,EACdgO,KAAK3S,EAAQ+b,GAAQ3c,EACrBY,GACJ,CAEA,OAAO,SAAsBjL,GACzBgnB,EAAOhnB,EAAIgnB,KACX/b,EAAQ,EACR,IAAI2hH,EAAM,IAAI3kH,MAAiB,EAAXjI,EAAIgnB,MAExB,OADAhnB,EAAImH,QAAQkmI,EAAczgB,GACnBA,CACX,CACH,CAjBkB,GA8BnB,SAAS0gB,EAAuB9xH,GAC5B,IACIuL,EADAwmH,GAAQ,EAEZ,QAAe/hI,IAAX2hI,GAAwB3xH,aAAe2xH,EACvCpmH,EAAUqmH,EAAa5xH,GACvB+xH,GAAQ,MACL,CACH,IAAInjI,EAAOkrH,EAAIlrH,KAAKoR,GAChBjP,EAAMnC,EAAKrC,OACfgf,EAAU,IAAI9e,MAAY,EAANsE,GACpB,IAAK,IAAI2I,EAAI,EAAGA,EAAI3I,IAAO2I,EAAG,CAC1B,IAAI7K,EAAMD,EAAK8K,GACf6R,EAAQ7R,GAAKsG,EAAInR,GACjB0c,EAAQ7R,EAAI3I,GAAOlC,CACvB,CACJ,CACAuT,KAAK6mH,aAAa19G,GAClBnJ,KAAK4vH,OAASD,EACd3vH,KAAKonH,YAAOx5H,EAAW+hI,GAAS,GAAK,EACzC,CAiCA,SAAS5yH,EAAM4pG,GACX,IAAIqI,EACA6gB,EAAY5e,EAAoBtK,GAEpC,OAAK3hD,EAAS6qE,IAGV7gB,EADO6gB,aAAqBniI,EACtBmiI,EAAUre,MACZ9jH,EAAQqP,WAAOnP,OAAWA,OAAWA,OAAWA,GAE9C,IAAI8hI,EAAuBG,GAAW3pF,UAG5C2pF,aAAqBniI,GACrBshH,EAAI4C,eAAeie,EAAW,GAE3B7gB,GAXIuE,EAAa,4EAY5B,CAjDAb,EAAKqM,SAAS2Q,EAAwBpc,GAEtCoc,EAAuBlyH,UAAU6pH,MAAQ,WAAa,EAEtDqI,EAAuBlyH,UAAUsoH,kBAAoB,SAAU9zH,EAAO3E,GAGlE,GAFA2S,KAAKk3B,QAAQ7pC,GAAS2E,IACAgO,KAAKunH,gBACNvnH,KAAK40G,QAAS,CAC/B,IAAI1gG,EACJ,GAAIlU,KAAK4vH,OACL17G,EAzCO,SAAS/K,GAGxB,IAFA,IAAI6lG,EAAM,IAAIugB,EACVplI,EAASgf,EAAQhf,OAAS,EAAI,EACzBmN,EAAI,EAAGA,EAAInN,IAAUmN,EAAG,CAC7B,IAAI7K,EAAM0c,EAAQhf,EAASmN,GACvBtF,EAAQmX,EAAQ7R,GACpB03G,EAAInlH,IAAI4C,EAAKuF,EACjB,CACA,OAAOg9G,CACX,CAgCkB8gB,CAAa9vH,KAAKk3B,aACrB,CACHhjB,EAAM,CAAC,EAEP,IADA,IAAI67G,EAAY/vH,KAAK7V,SACZmN,EAAI,EAAG3I,EAAMqR,KAAK7V,SAAUmN,EAAI3I,IAAO2I,EAC5C4c,EAAIlU,KAAKk3B,QAAQ5/B,EAAIy4H,IAAc/vH,KAAKk3B,QAAQ5/B,EAExD,CAEA,OADA0I,KAAKwnH,SAAStzG,IACP,CACX,CACA,OAAO,CACX,EAEAw7G,EAAuBlyH,UAAUkwH,iBAAmB,WAChD,OAAO,CACX,EAEAgC,EAAuBlyH,UAAUiwH,gBAAkB,SAAU9+H,GACzD,OAAOA,GAAO,CAClB,EAqBAjB,EAAQ8P,UAAUT,MAAQ,WACtB,OAAOA,EAAMiD,KACjB,EAEAtS,EAAQqP,MAAQ,SAAU4pG,GACtB,OAAO5pG,EAAM4pG,EACjB,CACA,CAEA,EAAE,CAAC,QAAQ,GAAG,SAAS,KAAK,GAAG,CAAC,SAASiI,EAAQ5tD,EAAOP,GACxD,aAQA,SAAS4uD,EAAMxnC,GACX7nE,KAAKgwH,UAAYnoD,EACjB7nE,KAAK40G,QAAU,EACf50G,KAAKiwH,OAAS,CAClB,CAEA5gB,EAAM7xG,UAAU0yH,oBAAsB,SAAU9mH,GAC5C,OAAOpJ,KAAKgwH,UAAY5mH,CAC5B,EAEAimG,EAAM7xG,UAAUszG,SAAW,SAAUr6E,GACjC,IAAItsC,EAAS6V,KAAK7V,SAClB6V,KAAKmwH,eAAehmI,EAAS,GAE7B6V,KADSA,KAAKiwH,OAAS9lI,EAAW6V,KAAKgwH,UAAY,GACzCv5F,EACVz2B,KAAK40G,QAAUzqH,EAAS,CAC5B,EAEAklH,EAAM7xG,UAAU5T,KAAO,SAAUoB,EAAIklH,EAAUz5E,GAC3C,IAAItsC,EAAS6V,KAAK7V,SAAW,EAC7B,GAAI6V,KAAKkwH,oBAAoB/lI,GAIzB,OAHA6V,KAAK8wG,SAAS9lH,GACdgV,KAAK8wG,SAASZ,QACdlwG,KAAK8wG,SAASr6E,GAGlB,IAAI/wB,EAAI1F,KAAKiwH,OAAS9lI,EAAS,EAC/B6V,KAAKmwH,eAAehmI,GACpB,IAAIimI,EAAWpwH,KAAKgwH,UAAY,EAChChwH,KAAM0F,EAAI,EAAK0qH,GAAYplI,EAC3BgV,KAAM0F,EAAI,EAAK0qH,GAAYlgB,EAC3BlwG,KAAM0F,EAAI,EAAK0qH,GAAY35F,EAC3Bz2B,KAAK40G,QAAUzqH,CACnB,EAEAklH,EAAM7xG,UAAU0M,MAAQ,WACpB,IAAImmH,EAAQrwH,KAAKiwH,OACbjhB,EAAMhvG,KAAKqwH,GAKf,OAHArwH,KAAKqwH,QAASziI,EACdoS,KAAKiwH,OAAUI,EAAQ,EAAMrwH,KAAKgwH,UAAY,EAC9ChwH,KAAK40G,UACE5F,CACX,EAEAK,EAAM7xG,UAAUrT,OAAS,WACrB,OAAO6V,KAAK40G,OAChB,EAEAvF,EAAM7xG,UAAU2yH,eAAiB,SAAU/mH,GACnCpJ,KAAKgwH,UAAY5mH,GACjBpJ,KAAKswH,UAAUtwH,KAAKgwH,WAAa,EAEzC,EAEA3gB,EAAM7xG,UAAU8yH,UAAY,SAAUzoD,GAClC,IAAI0oD,EAAcvwH,KAAKgwH,UACvBhwH,KAAKgwH,UAAYnoD,EAhErB,SAAmBl0D,EAAK68G,EAAUC,EAAKC,EAAU/hI,GAC7C,IAAK,IAAI+W,EAAI,EAAGA,EAAI/W,IAAO+W,EACvB+qH,EAAI/qH,EAAIgrH,GAAY/8G,EAAIjO,EAkEZ,GAjEZiO,EAAIjO,EAiEQ,QAjEQ,CAE5B,CA+DIirH,CAAU3wH,KAAM,EAAGA,KAAMuwH,EAHbvwH,KAAKiwH,OACJjwH,KAAK40G,QACuB2b,EAAc,EAE3D,EAEAvvE,EAAOP,QAAU4uD,CAEjB,EAAE,CAAC,GAAG,GAAG,CAAC,SAAST,EAAQ5tD,EAAOP,GAClC,aACAO,EAAOP,QAAU,SACb/yD,EAASsjH,EAAUC,EAAqBsC,GAC5C,IAAIb,EAAO9D,EAAQ,UAEfgiB,EAAY,SAAU1qF,GACtB,OAAOA,EAAQv4C,MAAK,SAAS8S,GACzB,OAAOowH,EAAKpwH,EAAOylC,EACvB,GACJ,EAEA,SAAS2qF,EAAKlqB,EAAUl2G,GACpB,IAAIwhF,EAAeg/B,EAAoBtK,GAEvC,GAAI10B,aAAwBvkF,EACxB,OAAOkjI,EAAU3+C,GAGjB,GAAiB,QADjB00B,EAAW+L,EAAK2a,QAAQ1mB,IAEpB,OAAO4M,EAAa,oDAAsDb,EAAKI,YAAYnM,IAGnG,IAAIqI,EAAM,IAAIthH,EAAQsjH,QACPpjH,IAAX6C,GACAu+G,EAAI4C,eAAenhH,EAAQ,GAI/B,IAFA,IAAIw7H,EAAUjd,EAAIyW,SACdjrF,EAASw0E,EAAIoC,QACR95G,EAAI,EAAG3I,EAAMg4G,EAASx8G,OAAQmN,EAAI3I,IAAO2I,EAAG,CACjD,IAAI4c,EAAMyyF,EAASrvG,SAEP1J,IAARsmB,GAAuB5c,KAAKqvG,IAIhCj5G,EAAQm9H,KAAK32G,GAAKs9F,MAAMya,EAASzxF,OAAQ5sC,EAAWohH,EAAK,KAC7D,CACA,OAAOA,CACX,CAEAthH,EAAQmjI,KAAO,SAAUlqB,GACrB,OAAOkqB,EAAKlqB,OAAU/4G,EAC1B,EAEAF,EAAQ8P,UAAUqzH,KAAO,WACrB,OAAOA,EAAK7wH,UAAMpS,EACtB,CAEA,CAEA,EAAE,CAAC,SAAS,KAAK,GAAG,CAAC,SAASghH,EAAQ5tD,EAAOP,GAC7C,aACAO,EAAOP,QAAU,SAAS/yD,EACA4lH,EACAC,EACAtC,EACAD,EACA9kE,GAC1B,IAAIwmE,EAAO9D,EAAQ,UACf4E,EAAWd,EAAKc,SAEpB,SAASsd,EAAsBnqB,EAAU37G,EAAI+2F,EAAcgvC,GACvD/wH,KAAK6mH,aAAalgB,GAClB,IAAI5kG,EAAUrU,EAAQ8rH,cACtBx5G,KAAKgxH,IAAMte,EAAK+G,YAAY13G,EAAS/W,QAChB4C,IAAjBm0F,IACAA,EAAer0F,EAAQD,QAAQs0F,IAClBo6B,4BAA4Bn8G,MAE7CA,KAAKixH,cAAgBlvC,EACrB/hF,KAAKkxH,oBAAsB,KAEvBlxH,KAAKmxH,YADNJ,IAAU/f,EACU3mH,MAAM2V,KAAK40G,SACb,IAAVmc,EACY,UAEAnjI,EAEvBoS,KAAK+kH,SAASjL,qBACd95G,KAAKonH,YAAOx5H,GAAY,EAC5B,CAqGA,SAAS2sC,EAAU62F,EAAe3wH,GAC1BT,KAAKq9G,cACL58G,EAAM+mH,SAAS4J,GAEf3wH,EAAM2wG,QAAQggB,EAEtB,CAEA,SAAS7oI,EAAOo+G,EAAU37G,EAAI+2F,EAAcgvC,GACxC,MAAkB,mBAAP/lI,EACAuoH,EAAa,gCAAkCb,EAAKI,YAAY9nH,IAE/D,IAAI8lI,EAAsBnqB,EAAU37G,EAAI+2F,EAAcgvC,GACrD7qF,SACjB,CAEA,SAASmrF,EAASC,GACdtxH,KAAKsxH,MAAQA,EACbtxH,KAAKS,MAAM8wH,UAAUD,GACrB,IAAIt/H,EAAQi/G,EAAoBjxG,KAAKhO,MAAOgO,KAAKS,MAAMskH,UACvD,OAAI/yH,aAAiBtE,GACjBsS,KAAKS,MAAMywH,oBAAsBl/H,EAC1BA,EAAMw/G,MAAMggB,OAAU5jI,OAAWA,EAAWoS,UAAMpS,IAElD4jI,EAASxzH,KAAKgC,KAAMhO,EAEnC,CAEA,SAASw/H,EAASx/H,GACd,IAIIg9G,EAJAvuG,EAAQT,KAAKS,MACbylC,EAAUzlC,EAAMskH,SAChB/5H,EAAKwoH,EAAS/yG,EAAMuwH,KACxB9qF,EAAQqwE,gBAGJvH,OADsBphH,IAAtB6S,EAAM0wH,YACAnmI,EAAGgT,KAAKkoC,EAAQ4rE,cAAe9/G,EAAOgO,KAAK3S,MAAO2S,KAAK7V,QAEvDa,EAAGgT,KAAKkoC,EAAQ4rE,cACA9xG,KAAKsxH,MAAOt/H,EAAOgO,KAAK3S,MAAO2S,KAAK7V,mBAE3CuD,IACf+S,EAAMywH,oBAAsBliB,GAEhC,IAAImM,EAAiBj1E,EAAQswE,cAO7B,OANAtqE,EAAM+zE,sBACFjR,EACAmM,OACsBvtH,IAAtB6S,EAAM0wH,YAA4B,eAAiB,iBACnDjrF,GAEG8oE,CACX,CAvJA0D,EAAKqM,SAAS+R,EAAuBxd,GAErCwd,EAAsBtzH,UAAU+zH,UAAY,SAASD,QACxB1jI,IAArBoS,KAAKmxH,aACgB,OAArBnxH,KAAKmxH,aACLG,IAAUtgB,GACVhxG,KAAKmxH,YAAYvnI,KAAK0nI,EAE9B,EAEAR,EAAsBtzH,UAAUi0H,cAAgB,SAASz/H,GAIrD,OAHyB,OAArBgO,KAAKmxH,aACLnxH,KAAKmxH,YAAYvnI,KAAKoI,GAEnBgO,KAAKmxH,WAChB,EAEAL,EAAsBtzH,UAAU6pH,MAAQ,WAAY,EAEpDyJ,EAAsBtzH,UAAU+vH,mBAAqB,WACjDvtH,KAAKwnH,cAA8B55H,IAArBoS,KAAKmxH,YAA4BnxH,KAAKmxH,YACLnxH,KAAKixH,cACxD,EAEAH,EAAsBtzH,UAAUkwH,iBAAmB,WAC/C,OAAO,CACX,EAEAoD,EAAsBtzH,UAAUgqH,SAAW,SAASx1H,GAChDgO,KAAK+kH,SAASh+B,iBAAiB/0F,GAC/BgO,KAAKk3B,QAAU,IACnB,EAEA45F,EAAsBtzH,UAAU+3G,iBAAmB,SAASmc,GACxD,GAAIA,IAAW1xH,KAAKixH,cAAe,OAAOjxH,KAAKy0G,UAC3Cz0G,KAAKulH,gBACTvlH,KAAK2xH,oBACD3xH,KAAKkxH,+BAA+BxjI,GACpCsS,KAAKkxH,oBAAoB5qF,SAEzBtmC,KAAKixH,yBAAyBvjI,GAC9BsS,KAAKixH,cAAc3qF,SAE3B,EAEAwqF,EAAsBtzH,UAAU8vH,SAAW,SAAUv7G,GAEjD,IAAI/f,EACAsF,EAFJ0I,KAAKk3B,QAAUnlB,EAGf,IAAI5nB,EAAS4nB,EAAO5nB,YACOyD,IAAvBoS,KAAKixH,eACLj/H,EAAQgO,KAAKixH,cACb35H,EAAI,IAEJtF,EAAQtE,EAAQD,QAAQskB,EAAO,IAC/Bza,EAAI,GAGR0I,KAAKkxH,oBAAsBl/H,EAE3B,IAAK,IAAI0T,EAAIpO,EAAGoO,EAAIvb,IAAUub,EAAG,CAC7B,IAAIusE,EAAelgE,EAAOrM,GACtBusE,aAAwBvkF,GACxBukF,EAAawmC,6BAErB,CAEA,IAAKzmH,EAAMgyH,aACP,KAAO1sH,EAAInN,IAAUmN,EAAG,CACpB,IAAI4/G,EAAM,CACNoa,MAAO,KACPt/H,MAAO+f,EAAOza,GACdjK,MAAOiK,EACPnN,OAAQA,EACRsW,MAAOT,MAGXhO,EAAQA,EAAMw/G,MAAM6f,OAAUzjI,OAAWA,EAAWspH,OAAKtpH,GAEvC,IAAT,IAAJ0J,IACDtF,EAAM05H,sBAEd,MAGqB99H,IAArBoS,KAAKmxH,cACLn/H,EAAQA,EACHw/G,MAAMxxG,KAAKyxH,mBAAe7jI,OAAWA,EAAWoS,UAAMpS,IAE/DoE,EAAMw/G,MAAMj3E,EAAWA,OAAW3sC,EAAWoE,EAAOgO,KACxD,EAEAtS,EAAQ8P,UAAUjV,OAAS,SAAUyC,EAAI+2F,GACrC,OAAOx5F,EAAOyX,KAAMhV,EAAI+2F,EAAc,KAC1C,EAEAr0F,EAAQnF,OAAS,SAAUo+G,EAAU37G,EAAI+2F,EAAcgvC,GACnD,OAAOxoI,EAAOo+G,EAAU37G,EAAI+2F,EAAcgvC,EAC9C,CAsDA,CAEA,EAAE,CAAC,SAAS,KAAK,GAAG,CAAC,SAASniB,EAAQ5tD,EAAOP,GAC7C,aACA,IACI2uD,EAuBQrlF,EACA6yF,EACAgV,EACAC,EA3BRnf,EAAO9D,EAAQ,UAKfkjB,EAAgBpf,EAAKqf,mBACzB,GAAIrf,EAAKnC,QAAsC,oBAArBtlD,iBAAkC,CACxD,IAAI+mE,EAAqB,EAAA5pG,EAAO6pG,aAC5BC,EAAkB14F,EAAQ24F,SAC9B/iB,EAAWsD,EAAK0f,aACF,SAASpnI,GAAMgnI,EAAmBh0H,KAAK,EAAAoqB,EAAQp9B,EAAK,EACpD,SAASA,GAAMknI,EAAgBl0H,KAAKw7B,EAASxuC,EAAK,CACpE,MAAO,GAA6B,mBAAlB8mI,GAC0B,mBAA1BA,EAAcrkI,QAAwB,CACpD,IAAI4kI,EAAgBP,EAAcrkI,UAClC2hH,EAAW,SAASpkH,GAChBqnI,EAAc1kI,KAAK3C,EACvB,CACJ,MAgCIokH,EAhCoC,oBAArBnkD,kBACW,oBAAXhqE,QACPA,OAAOgB,YACNhB,OAAOgB,UAAUqwI,YAAcrxI,OAAOsxI,YACxC,cAAe5tI,SAASC,iBA2BA,oBAAjBqtI,aACH,SAAUjnI,GACjBinI,aAAajnI,EACjB,EAC6B,oBAAfu1B,WACH,SAAUv1B,GACjBu1B,WAAWv1B,EAAI,EACnB,EAtDmB,WACnB,MAAM,IAAIggB,MAAM,iEACpB,GAoBY+e,EAAMplC,SAAS8pD,cAAc,OAC7BmuE,EAAO,CAACpxH,YAAY,GACpBomI,GAAkB,EAClBC,EAAOltI,SAAS8pD,cAAc,OACzB,IAAIwc,kBAAiB,WAC1BlhC,EAAI/E,UAAU8iC,OAAO,OACrB8pE,GAAkB,CACtB,IACGptG,QAAQqtG,EAAMjV,GAQV,SAAkB5xH,GACrB,IAAImnC,EAAI,IAAI84B,kBAAiB,WACzB94B,EAAEvN,aACF55B,GACJ,IACAmnC,EAAE3N,QAAQuF,EAAK6yF,GAVXgV,IACJA,GAAkB,EAClBC,EAAK7sG,UAAU8iC,OAAO,OAU1B,GAaR9G,EAAOP,QAAU2uD,CAEjB,EAAE,CAAC,SAAS,KAAK,GAAG,CAAC,SAASR,EAAQ5tD,EAAOP,GAC7C,aACAO,EAAOP,QACH,SAAS/yD,EAAS4lH,EAAcpnE,GACpC,IAAI08E,EAAoBl7H,EAAQk7H,kBAGhC,SAAS4J,EAAoBzgH,GACzB/R,KAAK6mH,aAAa90G,EACtB,CAJW68F,EAAQ,UAKdmQ,SAASyT,EAAqBlf,GAEnCkf,EAAoBh1H,UAAUi1H,iBAAmB,SAAUplI,EAAOqlI,GAG9D,OAFA1yH,KAAKk3B,QAAQ7pC,GAASqlI,IACA1yH,KAAKunH,gBACNvnH,KAAK40G,UACtB50G,KAAKwnH,SAASxnH,KAAKk3B,UACZ,EAGf,EAEAs7F,EAAoBh1H,UAAUsoH,kBAAoB,SAAU9zH,EAAO3E,GAC/D,IAAI2hH,EAAM,IAAI4Z,EAGd,OAFA5Z,EAAI0C,UAAY,SAChB1C,EAAI2jB,mBAAqB3gI,EAClBgO,KAAKyyH,iBAAiBplI,EAAO2hH,EACxC,EACAwjB,EAAoBh1H,UAAUuoH,iBAAmB,SAAUrgF,EAAQr4C,GAC/D,IAAI2hH,EAAM,IAAI4Z,EAGd,OAFA5Z,EAAI0C,UAAY,SAChB1C,EAAI2jB,mBAAqBjtF,EAClB1lC,KAAKyyH,iBAAiBplI,EAAO2hH,EACxC,EAEAthH,EAAQklI,OAAS,SAAUjsB,GAEvB,OADAz6D,EAAM60E,WAAW,YAAa,cACvB,IAAIyR,EAAoB7rB,GAAUzgE,SAC7C,EAEAx4C,EAAQmlI,WAAa,SAAUlsB,GAC3B,OAAO,IAAI6rB,EAAoB7rB,GAAUzgE,SAC7C,EAEAx4C,EAAQ8P,UAAUo1H,OAAS,WACvB,OAAOllI,EAAQklI,OAAO5yH,KAC1B,CACA,CAEA,EAAE,CAAC,SAAS,KAAK,GAAG,CAAC,SAAS4uG,EAAQ5tD,EAAOP,GAC7C,aACAO,EAAOP,QACP,SAAS/yD,EAAS4lH,EAAcC,GAChC,IAAIb,EAAO9D,EAAQ,UACf4T,EAAa5T,EAAQ,YAAY4T,WACjCz0D,EAAiB6gD,EAAQ,YAAY7gD,eACrCx/C,EAAUmkG,EAAKnkG,QACfukH,EAAe,CAAC,EAGpB,SAASjkB,EAAiB98F,GACtB/R,KAAK6mH,aAAa90G,GAClB/R,KAAK+yH,SAAW,EAChB/yH,KAAKgzH,SAAU,EACfhzH,KAAKizH,cAAe,CACxB,CAgHA,SAAS1oI,EAAKo8G,EAAUusB,GACpB,IAAe,EAAVA,KAAiBA,GAAWA,EAAU,EACvC,OAAO3f,EAAa,kEAExB,IAAIvE,EAAM,IAAIH,EAAiBlI,GAC3BzgE,EAAU8oE,EAAI9oE,UAGlB,OAFA8oE,EAAIC,WAAWikB,GACflkB,EAAI53E,OACG8O,CACX,CAxHAwsE,EAAKqM,SAASlQ,EAAkByE,GAEhCzE,EAAiBrxG,UAAU6pH,MAAQ,WAC/B,GAAKrnH,KAAKizH,aAGV,GAAsB,IAAlBjzH,KAAK+yH,SAAT,CAIA/yH,KAAKonH,YAAOx5H,GAAY,GACxB,IAAIulI,EAAkB5kH,EAAQvO,KAAKk3B,UAC9Bl3B,KAAKulH,eACN4N,GACAnzH,KAAK+yH,SAAW/yH,KAAKozH,uBACrBpzH,KAAKoxG,QAAQpxG,KAAKqzH,eAAerzH,KAAK7V,UAN1C,MAFI6V,KAAKwnH,SAAS,GAUtB,EAEA3Y,EAAiBrxG,UAAU45B,KAAO,WAC9Bp3B,KAAKizH,cAAe,EACpBjzH,KAAKqnH,OACT,EAEAxY,EAAiBrxG,UAAU0xG,UAAY,WACnClvG,KAAKgzH,SAAU,CACnB,EAEAnkB,EAAiBrxG,UAAU01H,QAAU,WACjC,OAAOlzH,KAAK+yH,QAChB,EAEAlkB,EAAiBrxG,UAAUyxG,WAAa,SAAUnoG,GAC9C9G,KAAK+yH,SAAWjsH,CACpB,EAEA+nG,EAAiBrxG,UAAUsoH,kBAAoB,SAAU9zH,GAErD,OADAgO,KAAKszH,cAActhI,GACfgO,KAAKuzH,eAAiBvzH,KAAKkzH,YAC3BlzH,KAAKk3B,QAAQ/sC,OAAS6V,KAAKkzH,UACJ,IAAnBlzH,KAAKkzH,WAAmBlzH,KAAKgzH,QAC7BhzH,KAAKwnH,SAASxnH,KAAKk3B,QAAQ,IAE3Bl3B,KAAKwnH,SAASxnH,KAAKk3B,UAEhB,EAIf,EACA23E,EAAiBrxG,UAAUuoH,iBAAmB,SAAUrgF,GAEpD,OADA1lC,KAAKwzH,aAAa9tF,GACX1lC,KAAKyzH,eAChB,EAEA5kB,EAAiBrxG,UAAUkoH,kBAAoB,WAC3C,OAAI1lH,KAAKk3B,mBAAmBxpC,GAA2B,MAAhBsS,KAAKk3B,QACjCl3B,KAAKy0G,WAEhBz0G,KAAKwzH,aAAaV,GACX9yH,KAAKyzH,gBAChB,EAEA5kB,EAAiBrxG,UAAUi2H,cAAgB,WACvC,GAAIzzH,KAAKkzH,UAAYlzH,KAAKozH,sBAAuB,CAE7C,IADA,IAAIjgG,EAAI,IAAI46B,EACHz2D,EAAI0I,KAAK7V,SAAUmN,EAAI0I,KAAKk3B,QAAQ/sC,SAAUmN,EAC/C0I,KAAKk3B,QAAQ5/B,KAAOw7H,GACpB3/F,EAAEvpC,KAAKoW,KAAKk3B,QAAQ5/B,IAQ5B,OALI67B,EAAEhpC,OAAS,EACX6V,KAAKoxG,QAAQj+E,GAEbnzB,KAAKy0G,WAEF,CACX,CACA,OAAO,CACX,EAEA5F,EAAiBrxG,UAAU+1H,WAAa,WACpC,OAAOvzH,KAAKunH,cAChB,EAEA1Y,EAAiBrxG,UAAUk2H,UAAY,WACnC,OAAO1zH,KAAKk3B,QAAQ/sC,OAAS6V,KAAK7V,QACtC,EAEA0kH,EAAiBrxG,UAAUg2H,aAAe,SAAU9tF,GAChD1lC,KAAKk3B,QAAQttC,KAAK87C,EACtB,EAEAmpE,EAAiBrxG,UAAU81H,cAAgB,SAAUthI,GACjDgO,KAAKk3B,QAAQl3B,KAAKunH,kBAAoBv1H,CAC1C,EAEA68G,EAAiBrxG,UAAU41H,oBAAsB,WAC7C,OAAOpzH,KAAK7V,SAAW6V,KAAK0zH,WAChC,EAEA7kB,EAAiBrxG,UAAU61H,eAAiB,SAAUvsH,GAClD,IAAI2S,EAAU,qCACNzZ,KAAK+yH,SAAW,4BAA8BjsH,EAAQ,SAC9D,OAAO,IAAI07G,EAAW/oG,EAC1B,EAEAo1F,EAAiBrxG,UAAU+vH,mBAAqB,WAC5CvtH,KAAKoxG,QAAQpxG,KAAKqzH,eAAe,GACrC,EAaA3lI,EAAQnD,KAAO,SAAUo8G,EAAUusB,GAC/B,OAAO3oI,EAAKo8G,EAAUusB,EAC1B,EAEAxlI,EAAQ8P,UAAUjT,KAAO,SAAU2oI,GAC/B,OAAO3oI,EAAKyV,KAAMkzH,EACtB,EAEAxlI,EAAQohH,kBAAoBD,CAC5B,CAEA,EAAE,CAAC,WAAW,GAAG,SAAS,KAAK,GAAG,CAAC,SAASD,EAAQ5tD,EAAOP,GAC3D,aACAO,EAAOP,QAAU,SAAS/yD,GAC1B,SAASk7H,EAAkB1iF,QACPt4C,IAAZs4C,GACAA,EAAUA,EAAQ8rE,UAClBhyG,KAAK0xG,UAAYxrE,EAAQwrE,UACzB1xG,KAAK2yH,mBAAqBzsF,EAAQykF,gBAC5BzkF,EAAQ+yE,qBAAkBrrH,IAGhCoS,KAAK0xG,UAAY,EACjB1xG,KAAK2yH,wBAAqB/kI,EAElC,CAEAg7H,EAAkBprH,UAAUy7G,cAAgB,WACxC,OAAOj5G,KAAK2yH,kBAChB,EAEA,IAAI3gI,EAAQ42H,EAAkBprH,UAAUxL,MAAQ,WAC5C,IAAKgO,KAAKq9G,cACN,MAAM,IAAIh/G,UAAU,6FAExB,OAAO2B,KAAKi5G,eAChB,EAEIvzE,EAASkjF,EAAkBprH,UAAUkM,MACzCk/G,EAAkBprH,UAAUkoC,OAAS,WACjC,IAAK1lC,KAAKgkH,aACN,MAAM,IAAI3lH,UAAU,2FAExB,OAAO2B,KAAKi5G,eAChB,EAEIoE,EAAcuL,EAAkBprH,UAAU6/G,YAAc,WACxD,OAAuC,IAAd,SAAjBr9G,KAAK0xG,UACjB,EAEIsS,EAAa4E,EAAkBprH,UAAUwmH,WAAa,WACtD,OAAuC,IAAd,SAAjBhkH,KAAK0xG,UACjB,EAEIqD,EAAY6T,EAAkBprH,UAAUu3G,UAAY,WACpD,OAAuC,IAAd,SAAjB/0G,KAAK0xG,UACjB,EAEIic,EAAa/E,EAAkBprH,UAAUmwH,WAAa,WACtD,OAAuC,IAAd,SAAjB3tH,KAAK0xG,UACjB,EAEAkX,EAAkBprH,UAAU03G,YAAc,WACtC,OAAsC,IAAb,QAAjBl1G,KAAK0xG,UACjB,EAEAhkH,EAAQ8P,UAAUm2H,cAAgB,WAC9B,OAAoC,QAAX,MAAjB3zH,KAAK0xG,UACjB,EAEAhkH,EAAQ8P,UAAUw3G,aAAe,WAC7B,OAAOh1G,KAAKgyG,UAAU2hB,eAC1B,EAEAjmI,EAAQ8P,UAAU03G,YAAc,WAC5B,OAAgD,IAAb,QAA3Bl1G,KAAKgyG,UAAUN,UAC3B,EAEAhkH,EAAQ8P,UAAUu3G,UAAY,WAC1B,OAAOA,EAAU/2G,KAAKgC,KAAKgyG,UAC/B,EAEAtkH,EAAQ8P,UAAUwmH,WAAa,WAC3B,OAAOA,EAAWhmH,KAAKgC,KAAKgyG,UAChC,EAEAtkH,EAAQ8P,UAAU6/G,YAAc,WAC5B,OAAOA,EAAYr/G,KAAKgC,KAAKgyG,UACjC,EAEAtkH,EAAQ8P,UAAUmwH,WAAa,WAC3B,OAAOA,EAAW3vH,KAAKgC,KAAKgyG,UAChC,EAEAtkH,EAAQ8P,UAAUxL,MAAQ,WACtB,OAAOA,EAAMgM,KAAKgC,KAAKgyG,UAC3B,EAEAtkH,EAAQ8P,UAAUkoC,OAAS,WACvB,IAAI5+C,EAASkZ,KAAKgyG,UAElB,OADAlrH,EAAOuyH,6BACA3zE,EAAO1nC,KAAKlX,EACvB,EAEA4G,EAAQ8P,UAAUikH,OAAS,WACvB,OAAOzhH,KAAKi5G,eAChB,EAEAvrH,EAAQ8P,UAAU8jH,QAAU,WAExB,OADAthH,KAAKq5G,6BACEr5G,KAAKi5G,eAChB,EAEAvrH,EAAQk7H,kBAAoBA,CAC5B,CAEA,EAAE,CAAC,GAAG,GAAG,CAAC,SAASha,EAAQ5tD,EAAOP,GAClC,aACAO,EAAOP,QAAU,SAAS/yD,EAASsjH,GACnC,IAAI0B,EAAO9D,EAAQ,UACf6E,EAAWf,EAAKe,SAChBzuD,EAAW0tD,EAAK1tD,SA0ChB4uE,EAAU,CAAC,EAAErkI,eAsCjB,OA9EA,SAA6BqO,EAAKmE,GAC9B,GAAIijD,EAASpnD,GAAM,CACf,GAAIA,aAAelQ,EAAS,OAAOkQ,EACnC,IAAIjQ,EA4BZ,SAAiBiQ,GACb,IACI,OANR,SAAmBA,GACf,OAAOA,EAAIjQ,IACf,CAIekmI,CAAUj2H,EACrB,CAAE,MAAOu1B,GAEL,OADAsgF,EAAStgF,EAAIA,EACNsgF,CACX,CACJ,CAnCmBqgB,CAAQl2H,GACnB,GAAIjQ,IAAS8lH,EAAU,CACf1xG,GAASA,EAAQw0G,eACrB,IAAIvH,EAAMthH,EAAQ8sC,OAAO7sC,EAAKwlC,GAE9B,OADIpxB,GAASA,EAAQy0G,cACdxH,CACX,CAAO,GAAoB,mBAATrhH,EACd,OA+BZ,SAA8BiQ,GAC1B,IACI,OAAOg2H,EAAQ51H,KAAKJ,EAAK,YAC7B,CAAE,MAAOu1B,GACL,OAAO,CACX,CACJ,CArCgB4gG,CAAqBn2H,IACjBoxG,EAAM,IAAIthH,EAAQsjH,GACtBpzG,EAAI4zG,MACAxC,EAAIyW,SACJzW,EAAIoC,aACJxjH,EACAohH,EACA,MAEGA,GA8BvB,SAAoBvrH,EAAGkK,EAAMoU,GACzB,IAAImkC,EAAU,IAAIx4C,EAAQsjH,GACtBhC,EAAM9oE,EACNnkC,GAASA,EAAQw0G,eACrBrwE,EAAQ4zE,qBACJ/3G,GAASA,EAAQy0G,cACrB,IAAI+V,GAAc,EACdvjI,EAAS0pH,EAAKc,SAAS7lH,GAAMqQ,KAAKva,GAQtC,SAAiBuO,GACRk0C,IACLA,EAAQ6gD,iBAAiB/0F,GACzBk0C,EAAU,KACd,IAEA,SAAgBR,GACPQ,IACLA,EAAQ+/E,gBAAgBvgF,EAAQ6mF,GAAa,GAC7CrmF,EAAU,KACd,IACA,OAlBAqmF,GAAc,EAEVrmF,GAAWl9C,IAAWyqH,IACtBvtE,EAAQ+/E,gBAAgBj9H,EAAOmqC,GAAG,GAAM,GACxC+S,EAAU,MAcP8oE,CACX,CAvDmBglB,CAAWp2H,EAAKjQ,EAAMoU,EAErC,CACA,OAAOnE,CACX,CAsDA,CAEA,EAAE,CAAC,SAAS,KAAK,GAAG,CAAC,SAASgxG,EAAQ5tD,EAAOP,GAC7C,aACAO,EAAOP,QAAU,SAAS/yD,EAASsjH,EAAU9kE,GAC7C,IAAIwmE,EAAO9D,EAAQ,UACf2T,EAAe70H,EAAQ60H,aAE3B,SAAS0R,EAAcpsF,GACnB7nC,KAAK6nC,OAASA,CAClB,CAEAosF,EAAcz2H,UAAU+3G,iBAAmB,WACvCtuC,aAAajnE,KAAK6nC,OACtB,EAEA,IAAIqsF,EAAa,SAASliI,GAAS,OAAOunF,GAAOv5E,MAAMmhH,WAAWnvH,EAAQ,EACtEunF,EAAQ7rF,EAAQ6rF,MAAQ,SAAU46C,EAAIniI,GACtC,IAAIg9G,EACAnnE,EAgBJ,YAfcj6C,IAAVoE,GACAg9G,EAAMthH,EAAQD,QAAQuE,GACbw/G,MAAM0iB,EAAY,KAAM,KAAMC,OAAIvmI,GACvCs+C,EAAMynE,gBAAkB3hH,aAAiBtE,GACzCshH,EAAIkD,aAAalgH,KAGrBg9G,EAAM,IAAIthH,EAAQsjH,GAClBnpE,EAAStnB,YAAW,WAAayuF,EAAIyW,UAAY,IAAI0O,GACjDjoF,EAAMynE,gBACN3E,EAAIkD,aAAa,IAAI+hB,EAAcpsF,IAEvCmnE,EAAI8K,sBAER9K,EAAI4b,sBACG5b,CACX,EA0BA,SAASolB,EAAapiI,GAElB,OADAi1E,aAAajnE,KAAK6nC,QACX71C,CACX,CAEA,SAASqiI,EAAa3uF,GAElB,MADAuhC,aAAajnE,KAAK6nC,QACZnC,CACV,CAhCAh4C,EAAQ8P,UAAU+7E,MAAQ,SAAU46C,GAChC,OAAO56C,EAAM46C,EAAIn0H,KACrB,EAgCAtS,EAAQ8P,UAAU82H,QAAU,SAAUH,EAAI16G,GAEtC,IAAIu1F,EAAKv+G,EADT0jI,GAAMA,EAGN,IAAII,EAAgB,IAAIN,EAAc1zG,YAAW,WACzCyuF,EAAI+F,aAnCG,SAAU7uE,EAASzsB,EAAShpB,GAC3C,IAAI6jB,EAGIA,EAFe,iBAAZmF,EACHA,aAAmBzO,MACbyO,EAEA,IAAI8oG,EAAa,uBAGrB,IAAIA,EAAa9oG,GAE3Bi5F,EAAKuV,+BAA+B3zG,GACpC4xB,EAAQovE,kBAAkBhhG,GAC1B4xB,EAAQkrE,QAAQ98F,GAEF,MAAV7jB,GACAA,EAAO61C,QAEf,CAkBYkuF,CAAaxlB,EAAKv1F,EAAShpB,EAEnC,GAAG0jI,IAYH,OAVIjoF,EAAMynE,gBACNljH,EAASuP,KAAKrS,QACdqhH,EAAMv+G,EAAO+gH,MAAM4iB,EAAcC,OACbzmI,EAAW2mI,OAAe3mI,IAC1CskH,aAAaqiB,IAEjBvlB,EAAMhvG,KAAKwxG,MAAM4iB,EAAcC,OACXzmI,EAAW2mI,OAAe3mI,GAG3CohH,CACX,CAEA,CAEA,EAAE,CAAC,SAAS,KAAK,GAAG,CAAC,SAASJ,EAAQ5tD,EAAOP,GAC7C,aACAO,EAAOP,QAAU,SAAU/yD,EAAS6lH,EAActC,EAC9CqY,EAAetY,EAAU9kE,GACzB,IAAIwmE,EAAO9D,EAAQ,UACfvwG,EAAYuwG,EAAQ,YAAYvwG,UAChC0gH,EAAWnQ,EAAQ,UAAUmQ,SAC7BtL,EAAWf,EAAKe,SAChBD,EAAWd,EAAKc,SAChBihB,EAAO,CAAC,EAEZ,SAASvT,EAAQ/tF,GACb5S,YAAW,WAAW,MAAM4S,CAAE,GAAG,EACrC,CAuCA,SAASuhG,EAASnoI,EAAM25C,EAASnkC,GAC7B/B,KAAK20H,MAAQpoI,EACbyT,KAAK+kH,SAAW7+E,EAChBlmC,KAAK40H,SAAW7yH,CACpB,CAmCA,SAAS8yH,EAAiB7pI,EAAIk7C,EAASnkC,GACnC/B,KAAK6mH,aAAa77H,EAAIk7C,EAASnkC,EACnC,CAQA,SAAS+yH,EAAoB9iI,GACzB,OAAI0iI,EAASK,WAAW/iI,IACpBgO,KAAKqjC,UAAUrjC,KAAK3S,OAAO2nI,eAAehjI,GACnCA,EAAMk0C,WAEVl0C,CACX,CAEA,SAASijI,EAAa9qI,GAClB6V,KAAK7V,OAASA,EACd6V,KAAKkmC,QAAU,KACflmC,KAAK7V,EAAO,GAAK,IACrB,CAvDAuqI,EAASl3H,UAAUjR,KAAO,WACtB,OAAOyT,KAAK20H,KAChB,EAEAD,EAASl3H,UAAU0oC,QAAU,WACzB,OAAOlmC,KAAK+kH,QAChB,EAEA2P,EAASl3H,UAAUqtC,SAAW,WAC1B,OAAI7qC,KAAKkmC,UAAUm3E,cACRr9G,KAAKkmC,UAAUl0C,QAEnByiI,CACX,EAEAC,EAASl3H,UAAU03H,WAAa,SAASxC,GACrC,IAAI7nF,EAAW7qC,KAAK6qC,WAChB9oC,EAAU/B,KAAK40H,cACHhnI,IAAZmU,GAAuBA,EAAQw0G,eACnC,IAAIvH,EAAMnkE,IAAa4pF,EACjBz0H,KAAKm1H,UAAUtqF,EAAU6nF,GAAc,KAI7C,YAHgB9kI,IAAZmU,GAAuBA,EAAQy0G,cACnCx2G,KAAK+kH,SAASqQ,mBACdp1H,KAAK20H,MAAQ,KACN3lB,CACX,EAEA0lB,EAASK,WAAa,SAAUrkG,GAC5B,OAAa,MAALA,GACsB,mBAAfA,EAAEma,UACe,mBAAjBna,EAAEwkG,UACrB,EAKAnW,EAAS8V,EAAkBH,GAE3BG,EAAiBr3H,UAAU23H,UAAY,SAAUtqF,EAAU6nF,GAEvD,OADS1yH,KAAKzT,OACJyR,KAAK6sC,EAAUA,EAAU6nF,EACvC,EAgBAuC,EAAaz3H,UAAU+3G,iBAAmB,WAEtC,IADA,IAAI5mH,EAAMqR,KAAK7V,OACNmN,EAAI,EAAGA,EAAI3I,IAAO2I,EAAG,CAC1B,IAAIjV,EAAO2d,KAAK1I,GACZjV,aAAgBqL,GAChBrL,EAAKikD,QAEb,CACJ,EAEA54C,EAAQ2nI,MAAQ,WACZ,IAAI1mI,EAAMzE,UAAUC,OACpB,GAAIwE,EAAM,EAAG,OAAO4kH,EACJ,uDAChB,IAIIj8B,EAJAtsF,EAAKd,UAAUyE,EAAM,GACzB,GAAkB,mBAAP3D,EACP,OAAOuoH,EAAa,gCAAkCb,EAAKI,YAAY9nH,IAG3E,IAAIsqI,GAAa,EACL,IAAR3mI,GAAatE,MAAMkkB,QAAQrkB,UAAU,KAErCyE,GADA2oF,EAAQptF,UAAU,IACNC,OACZmrI,GAAa,IAEbh+C,EAAQptF,UACRyE,KAGJ,IADA,IAAI00C,EAAY,IAAI4xF,EAAatmI,GACxB2I,EAAI,EAAGA,EAAI3I,IAAO2I,EAAG,CAC1B,IAAIuzC,EAAWysC,EAAMhgF,GACrB,GAAIo9H,EAASK,WAAWlqF,GAAW,CAC/B,IAAI0qF,EAAW1qF,GACfA,EAAWA,EAAS3E,WACX8uF,eAAeO,EAC5B,KAAO,CACH,IAAItjD,EAAeg/B,EAAoBpmE,GACnConC,aAAwBvkF,IACxBm9C,EACIonC,EAAau/B,MAAMsjB,EAAqB,KAAM,KAAM,CAChDzxF,UAAWA,EACXh2C,MAAOiK,QACZ1J,GAEX,CACAy1C,EAAU/rC,GAAKuzC,CACnB,CAEA,IAAI2qF,EAAqB,IAAInrI,MAAMg5C,EAAUl5C,QAC7C,IAASmN,EAAI,EAAGA,EAAIk+H,EAAmBrrI,SAAUmN,EAC7Ck+H,EAAmBl+H,GAAK5J,EAAQD,QAAQ41C,EAAU/rC,IAAI0yH,UAG1D,IAAIyL,EAAgB/nI,EAAQkT,IAAI40H,GAC3B7nI,MAAK,SAAS+nI,GACX,IAAK,IAAIp+H,EAAI,EAAGA,EAAIo+H,EAAYvrI,SAAUmN,EAAG,CACzC,IAAIo7H,EAAagD,EAAYp+H,GAC7B,GAAIo7H,EAAW1O,aAEX,OADAvQ,EAAStgF,EAAIu/F,EAAWhpH,QACjB+pG,EACJ,IAAKif,EAAWrV,cAEnB,YADAoY,EAAcnvF,SAGlBovF,EAAYp+H,GAAKo7H,EAAW1gI,OAChC,CACAk0C,EAAQqwE,eAERvrH,EAAKwoH,EAASxoH,GACd,IAAIgkH,EAAMsmB,EACJtqI,EAAG+c,WAAMna,EAAW8nI,GAAe1qI,EAAG0qI,GACxCva,EAAiBj1E,EAAQswE,cAG7B,OAFAtqE,EAAM+zE,sBACFjR,EAAKmM,EAAgB,gBAAiBj1E,GACnC8oE,CACX,IAEA9oE,EAAUuvF,EAActR,QAAO,WAC/B,IAAIuO,EAAa,IAAIhlI,EAAQk7H,kBAAkB6M,GAC/C,OAzKR,SAAiBpyF,EAAWqvF,GACxB,IAAIp7H,EAAI,EACJ3I,EAAM00C,EAAUl5C,OAChB6kH,EAAM,IAAIthH,EAAQsjH,GAqBtB,OApBA,SAASrzG,IACL,GAAIrG,GAAK3I,EAAK,OAAOqgH,EAAIyW,WACzB,IAAIxzC,EAhBZ,SAAkC4U,GAC9B,IAAI5U,EAAeg/B,EAAoBpqB,GAOvC,OANI5U,IAAiB4U,GACiB,mBAA3BA,EAAS8uC,eACiB,mBAA1B9uC,EAAS+uC,cAChB/uC,EAAS8uC,iBACT1jD,EAAa+iD,eAAenuC,EAAS+uC,gBAElC3jD,CACX,CAO2B4jD,CAAyBxyF,EAAU/rC,MACtD,GAAI26E,aAAwBvkF,GACxBukF,EAAa0jD,gBAAiB,CAC9B,IACI1jD,EAAeg/B,EACXh/B,EAAa2jD,eAAeV,WAAWxC,GACvCrvF,EAAU6C,QAClB,CAAE,MAAO/S,GACL,OAAO+tF,EAAQ/tF,EACnB,CACA,GAAI8+C,aAAwBvkF,EACxB,OAAOukF,EAAau/B,MAAM7zG,EAAUujH,EACV,KAAM,KAAM,KAE9C,CACAvjH,GACJ,CACAA,GACOqxG,CACX,CAgJexqG,CAAQ6+B,EAAWqvF,EAC9B,IAGA,OAFArvF,EAAU6C,QAAUA,EACpBA,EAAQgsE,aAAa7uE,GACd6C,CACX,EAEAx4C,EAAQ8P,UAAUw3H,eAAiB,SAAUO,GACzCv1H,KAAK0xG,UAA6B,OAAjB1xG,KAAK0xG,UACtB1xG,KAAK81H,UAAYP,CACrB,EAEA7nI,EAAQ8P,UAAUm4H,cAAgB,WAC9B,OAAyB,OAAjB31H,KAAK0xG,WAAsB,CACvC,EAEAhkH,EAAQ8P,UAAUo4H,aAAe,WAC7B,OAAO51H,KAAK81H,SAChB,EAEApoI,EAAQ8P,UAAU43H,iBAAmB,WACjCp1H,KAAK0xG,WAA6B,OAAjB1xG,KAAK0xG,UACtB1xG,KAAK81H,eAAYloI,CACrB,EAEAF,EAAQ8P,UAAU+3H,SAAW,SAAUvqI,GACnC,GAAkB,mBAAPA,EACP,OAAO,IAAI6pI,EAAiB7pI,EAAIgV,KAAMspH,KAE1C,MAAM,IAAIjrH,CACd,CAEJ,CAEA,EAAE,CAAC,WAAW,GAAG,SAAS,KAAK,GAAG,CAAC,SAASuwG,EAAQ5tD,EAAOP,GAC3D,aACA,IAIIs1E,EAJAre,EAAM9I,EAAQ,SACd+D,EAAkC,oBAAb1wH,UAErBwxH,EAAW,CAACtgF,EAAG,CAAC,GAEhB6iG,EAA+B,oBAATj4H,KAAuBA,KAC3B,oBAAX9c,OAAyBA,YACd,IAAX,EAAAmnC,EAAyB,EAAAA,OACvBx6B,IAAToS,KAAqBA,KAAO,KAEhC,SAASi2H,IACL,IACI,IAAInvI,EAASivI,EAEb,OADAA,EAAiB,KACVjvI,EAAOihB,MAAM/H,KAAM9V,UAC9B,CAAE,MAAOipC,GAEL,OADAsgF,EAAStgF,EAAIA,EACNsgF,CACX,CACJ,CA0BA,SAASyiB,EAAYhiH,GACjB,OAAc,MAAPA,IAAuB,IAARA,IAAwB,IAARA,GACnB,iBAARA,GAAmC,iBAARA,CAE1C,CAsCA,SAAS0pG,EAAkBhgH,EAAKxU,EAAM4I,GAClC,GAAIkkI,EAAYt4H,GAAM,OAAOA,EAC7B,IAAIZ,EAAa,CACbhL,MAAOA,EACPkL,cAAc,EACdD,YAAY,EACZE,UAAU,GAGd,OADAu6G,EAAIt6G,eAAeQ,EAAKxU,EAAM4T,GACvBY,CACX,CAMA,IAAImxH,EAAoB,WACpB,IAAIoH,EAAqB,CACrB9rI,MAAMmT,UACNpS,OAAOoS,UACP+G,SAAS/G,WAGT44H,EAAkB,SAASliH,GAC3B,IAAK,IAAI5c,EAAI,EAAGA,EAAI6+H,EAAmBhsI,SAAUmN,EAC7C,GAAI6+H,EAAmB7+H,KAAO4c,EAC1B,OAAO,EAGf,OAAO,CACX,EAEA,GAAIwjG,EAAIsL,MAAO,CACX,IAAIrN,EAAUvqH,OAAO6nC,oBACrB,OAAO,SAASr1B,GAGZ,IAFA,IAAIoxG,EAAM,GACNqnB,EAAcjrI,OAAOkT,OAAO,MAClB,MAAPV,IAAgBw4H,EAAgBx4H,IAAM,CACzC,IAAIpR,EACJ,IACIA,EAAOmpH,EAAQ/3G,EACnB,CAAE,MAAOu1B,GACL,OAAO67E,CACX,CACA,IAAK,IAAI13G,EAAI,EAAGA,EAAI9K,EAAKrC,SAAUmN,EAAG,CAClC,IAAI7K,EAAMD,EAAK8K,GACf,IAAI++H,EAAY5pI,GAAhB,CACA4pI,EAAY5pI,IAAO,EACnB,IAAI+5B,EAAOp7B,OAAOsoC,yBAAyB91B,EAAKnR,GACpC,MAAR+5B,GAA4B,MAAZA,EAAK78B,KAA2B,MAAZ68B,EAAK38B,KACzCmlH,EAAIplH,KAAK6C,EAJiB,CAMlC,CACAmR,EAAM85G,EAAIx2E,eAAetjC,EAC7B,CACA,OAAOoxG,CACX,CACJ,CACI,IAAI4kB,EAAU,CAAC,EAAErkI,eACjB,OAAO,SAASqO,GACZ,GAAIw4H,EAAgBx4H,GAAM,MAAO,GACjC,IAAIoxG,EAAM,GAGVsnB,EAAa,IAAK,IAAI7pI,KAAOmR,EACzB,GAAIg2H,EAAQ51H,KAAKJ,EAAKnR,GAClBuiH,EAAIplH,KAAK6C,OACN,CACH,IAAK,IAAI6K,EAAI,EAAGA,EAAI6+H,EAAmBhsI,SAAUmN,EAC7C,GAAIs8H,EAAQ51H,KAAKm4H,EAAmB7+H,GAAI7K,GACpC,SAAS6pI,EAGjBtnB,EAAIplH,KAAK6C,EACb,CAEJ,OAAOuiH,CACX,CAGP,CAhEuB,GAkEpBunB,EAAwB,sBAqC5B,IAAIC,EAAS,wBAab,SAASC,EAAa74H,GAClB,IACI,OAAOA,EAAM,EACjB,CAAE,MAAOu1B,GACL,MAAO,4BACX,CACJ,CAEA,SAASujG,EAAQ94H,GACb,OAAOA,aAAeoN,OACT,OAARpN,GACiB,iBAARA,GACgB,iBAAhBA,EAAI6b,SACS,iBAAb7b,EAAIxU,IACtB,CAeA,SAASuuH,EAAe/5G,GACpB,OAAO84H,EAAQ94H,IAAQ85G,EAAIwL,mBAAmBtlH,EAAK,QACvD,CAEA,IAAI6uH,EACM,UAAW,IAAIzhH,MAOV,SAAShZ,GACZ,OAAI2lH,EAAe3lH,GAAeA,EAC3B,IAAIgZ,MAAMyrH,EAAazkI,GAClC,EATO,SAASA,GACZ,GAAI2lH,EAAe3lH,GAAQ,OAAOA,EAClC,IAAK,MAAM,IAAIgZ,MAAMyrH,EAAazkI,GAAQ,CAC1C,MAAMsiB,GAAM,OAAOA,CAAI,CAC3B,EASR,SAASw+F,EAAYl1G,GACjB,MAAO,CAAC,EAAE1c,SAAS8c,KAAKJ,EAC5B,CAcA,IAAIyvH,EAAU,SAAS3yH,GACnB,OAAIg9G,EAAInpG,QAAQ7T,GACLA,EAEJ,IACX,EAEA,GAAsB,oBAAXgD,QAA0BA,OAAOC,SAAU,CAClD,IAAIg5H,EAAkC,mBAAftsI,MAAMylC,KAAsB,SAASp1B,GACxD,OAAOrQ,MAAMylC,KAAKp1B,EACtB,EAAI,SAASA,GAIT,IAHA,IAEIk8H,EAFA5nB,EAAM,GACNp6E,EAAKl6B,EAAEgD,OAAOC,cAERi5H,EAAWhiG,EAAG/jC,QAAY,MAChCm+G,EAAIplH,KAAKgtI,EAAS5kI,OAEtB,OAAOg9G,CACX,EAEAqe,EAAU,SAAS3yH,GACf,OAAIg9G,EAAInpG,QAAQ7T,GACLA,EACK,MAALA,GAA2C,mBAAvBA,EAAEgD,OAAOC,UAC7Bg5H,EAAUj8H,GAEd,IACX,CACJ,CAEA,IAqBIiuH,EArBApY,OAA4B,IAAZ/2E,GAC2B,qBAAvCs5E,EAAYt5E,GAAS/0C,cAEzBoyI,OAAqC,IAAZr9F,QACF,IAAhBA,EAAQ2+E,IA0CnB,IAsCQ51H,EAtCJysH,EAAM,CACN8Z,kBAAmB,SAAS99H,GACxB29H,EAAiB39H,CACrB,EACAypG,QAjMJ,SAAiBzpG,GACb,IACI,GAAkB,mBAAPA,EAAmB,CAC1B,IAAIwB,EAAOkrH,EAAI3yF,MAAM/5B,EAAGwS,WAEpBs5H,EAAapf,EAAIsL,OAASx2H,EAAKrC,OAAS,EACxC4sI,EAAiCvqI,EAAKrC,OAAS,KAC7B,IAAhBqC,EAAKrC,QAA4B,gBAAZqC,EAAK,IAC5BwqI,EACAT,EAAsB5zI,KAAKqI,EAAK,KAAO0sH,EAAI3yF,MAAM/5B,GAAIb,OAAS,EAElE,GAAI2sI,GAAcC,GACdC,EACA,OAAO,CAEf,CACA,OAAO,CACX,CAAE,MAAO7jG,GACL,OAAO,CACX,CACJ,EA8KI+/E,aA7JJ,SAAsB3/E,GAClB,OAAOijG,EAAO7zI,KAAK4wC,EACvB,EA4JIw7F,kBAAmBA,EACnBT,yBArSJ,SAAkC1wH,EAAKnR,EAAK81F,GACxC,IAAIm1B,EAAIsL,MASJ,MAAO,CAAC,EAAEzzH,eAAeyO,KAAKJ,EAAKnR,GAAOmR,EAAInR,QAAOmB,EARrD,IAAI44B,EAAOp7B,OAAOsoC,yBAAyB91B,EAAKnR,GAEhD,OAAY,MAAR+5B,EACmB,MAAZA,EAAK78B,KAA2B,MAAZ68B,EAAK38B,IACtB28B,EAAKx0B,MACLuwF,OAHd,CAQR,EA0RI2+B,QA5QJ,SAAiB/oF,GACb,MAAMA,CACV,EA2QI5pB,QAASmpG,EAAInpG,QACb8+G,QAASA,EACTzP,kBAAmBA,EACnBsY,YAAaA,EACblxE,SAjUJ,SAAkBhzD,GACd,MAAwB,mBAAVA,GACU,iBAAVA,GAAgC,OAAVA,CACxC,EA+TI0kI,QAASA,EACT/jB,YAAaA,EACbc,SAAUA,EACVD,SApWJ,SAAkBxoH,GAEd,OADA+qI,EAAiB/qI,EACVirI,CACX,EAkWIlX,SAhWW,SAASkY,EAAOn5F,GAC3B,IAAI81F,EAAU,CAAC,EAAErkI,eAEjB,SAAS2nI,IAGL,IAAK,IAAI72H,KAFTL,KAAKnC,YAAco5H,EACnBj3H,KAAK6mH,aAAe/oF,EACKA,EAAOtgC,UACxBo2H,EAAQ51H,KAAK8/B,EAAOtgC,UAAW6C,IACgB,MAA/CA,EAAazB,OAAOyB,EAAalW,OAAO,KAExC6V,KAAKK,EAAe,KAAOy9B,EAAOtgC,UAAU6C,GAGxD,CAGA,OAFA62H,EAAE15H,UAAYsgC,EAAOtgC,UACrBy5H,EAAMz5H,UAAY,IAAI05H,EACfD,EAAMz5H,SACjB,EAgVIqwH,aA5TJ,SAAsB/mI,EAAQqwI,GAC1B,IAEI7/H,EAFA3I,EAAM7H,EAAOqD,OACb6kH,EAAM,IAAI3kH,MAAMsE,EAAM,GAE1B,IAAK2I,EAAI,EAAGA,EAAI3I,IAAO2I,EACnB03G,EAAI13G,GAAKxQ,EAAOwQ,GAGpB,OADA03G,EAAI13G,GAAK6/H,EACFnoB,CACX,EAoTI4Y,iBAnUJ,SAA0BwP,GACtB,OAAKlB,EAAYkB,GAEV,IAAIpsH,MAAMyrH,EAAaW,IAFOA,CAGzC,EAgUIjK,iBA5LJ,SAA0BvvH,GAEtB,SAASy5H,IAAmB,CAC5BA,EAAgB75H,UAAYI,EAC5B,IAAIsyG,EAAW,IAAImnB,EACnB,SAASC,IACL,cAAcpnB,EAASqnB,GAC3B,CAGA,OAFAD,IACAA,IACO15H,CAEX,EAiLI45H,YA1KJ,SAAqB1wH,EAAO4L,EAAQ27G,GAEhC,IADA,IAAIrf,EAAM,IAAI3kH,MAAMyc,GACZxP,EAAI,EAAGA,EAAIwP,IAASxP,EACxB03G,EAAI13G,GAAKob,EAASpb,EAAI+2H,EAE1B,OAAOrf,CACX,EAqKI9tH,SAAUu1I,EACV9e,eAAgBA,EAChB8U,kBAAmBA,EACnBlC,wBA/IJ,SAAiCp3F,GAC7B,OAAS,MAALA,IACKA,aAAanoB,MAA8B,uBAAE03G,mBAC3B,IAAvBvvF,EAAiB,cACzB,EA4II80F,+BAvJJ,SAAwC90F,GACpC,IACIyqF,EAAkBzqF,EAAG,iBAAiB,EAC1C,CACA,MAAMskG,GAAS,CACnB,EAmJI3kB,YAAaA,EACbwc,gBArHJ,SAAyBx/F,EAAM4nG,EAAI9vI,GAE/B,IADA,IAAI4E,EAAOkrH,EAAI3yF,MAAM+K,GACZx4B,EAAI,EAAGA,EAAI9K,EAAKrC,SAAUmN,EAAG,CAClC,IAAI7K,EAAMD,EAAK8K,GACf,GAAI1P,EAAO6E,GACP,IACIirH,EAAIt6G,eAAes6H,EAAIjrI,EAAKirH,EAAIuL,cAAcnzF,EAAMrjC,GACxD,CAAE,MAAOgrI,GAAS,CAE1B,CACJ,EA4GIlnB,OAAQA,EACRsmB,gBAAiBA,EACjB1e,IAxEJ,SAAa1rH,GACT,OAAOoqI,EAAkBr9F,EAAQ2+E,IAAI1rH,QAAOmB,CAChD,EAuEI+oC,OAAQq/F,EACRjE,iBAtEJ,WACI,GAAuB,mBAAZrkI,EACP,IAEI,GAA6B,qBAAzBolH,EADU,IAAIplH,GAAQ,WAAW,KAEjC,OAAOA,CAEf,CAAE,MAAOylC,GAAI,CAErB,EA8DIsmF,YA3DJ,SAAqBvC,EAAKtB,GACtB,GAAY,OAARsB,GACc,mBAAPtB,GACPA,IAAO+S,EACP,OAAO/S,EAGQ,OAAfsB,EAAI8R,SACJpT,EAAKsB,EAAI8R,OAAOt9G,KAAKkqG,IAGzB,IAAIjnE,EAAQuoE,EAAIvoE,MAChB,GAAc,OAAVA,EAAgB,CAChB,IAAIzpC,EAAM0wG,EACVA,EAAK,WACD,IAAIxrH,EAAO,IAAKC,MAAM,GAAItD,OAAO,GAAGoR,MAAM6F,KAAK9T,YAG/C,OAFAE,EAAK,GAAK8a,EACV9a,EAAK,GAAK4V,KACH2uC,EAAMgpF,gBAAgB5vH,MAAM4mC,EAAOvkD,EAC9C,CACJ,CACA,OAAOwrH,CACX,GAuCA5G,EAAIojB,aAAepjB,EAAIuB,SAEf/2E,EAAQsB,UAAYtB,EAAQsB,SAAS95C,KACrCuB,EAAUi3C,EAAQsB,SAAS95C,KAAKiN,MAAM,KAAK7L,IAAI+xC,QACxCqF,EAAQj3C,UACfA,EAAUi3C,EAAQj3C,QAAQ0L,MAAM,KAAK7L,IAAI+xC,SAEtB,IAAf5xC,EAAQ,IAAYA,EAAQ,GAAK,IAAQA,EAAQ,GAAK,GAElEysH,EAAIkO,0BAA4BlO,EAAIuB,QAAU,WAC1C,IAAIqnB,GAAgB,EACpB,IAEIA,EAAyD,mBAD/ChpB,EAAQ,eAAesa,cACN1rH,UAAUm6H,eACzC,CAAE,MAAOxkG,GACLykG,GAAgB,CACpB,CACA,OAAOA,CACV,CAT6C,GAW1C5oB,EAAIuB,QAAQvB,EAAIme,iBAAiB3zF,GAErC,IAAK,MAAM,IAAIxuB,KAAS,CAAE,MAAOmoB,GAAI67E,EAAI0R,cAAgBvtF,CAAE,CAC3D6tB,EAAOP,QAAUuuD,CAEjB,EAAE,CAAC,QAAQ,GAAG,iBAAcphH,KAAa,CAAC,EAAE,CAAC,GApnLwR,CAonLpR,EACjD,EArnLqEozD,EAAOP,QAAQttB,IAqnLtC,oBAAXlyC,QAAqC,OAAXA,OAAiDA,OAAO+9D,EAAI/9D,OAAOyM,QAAwF,oBAATqQ,MAAiC,OAATA,OAA6CA,KAAKihD,EAAIjhD,KAAKrQ,yBCjpLlS,UAQQ,EAAO,CAAC,cAAkB,0BAAP,EAMzB,SAASmqI,EAAGjqI,GACb,SAASkqI,IACR,OAAO,IAAIrvE,KAAKA,KAAKsvE,IAAIhwH,MAAM0gD,KAAMv+D,WACtC,CACA,SAAS8tI,IACR,IAAIC,EAAQ,IAAIxvE,KAChB,OAAOqvE,EAAQG,EAAMC,cAAeD,EAAME,WAAYF,EAAMG,UAC7D,CACA,SAASC,EAAYC,EAAOC,GAC3B,OACCD,EAAME,mBAAqBD,EAAMC,kBACjCF,EAAMG,gBAAkBF,EAAME,eAC9BH,EAAMI,eAAiBH,EAAMG,YAE/B,CACA,SAAS17F,EAAMjQ,EAAQ4rG,GACtB,OAAO,WAKN,OAJIA,IAAmB/qI,GACtBiqI,EAAE7sI,GAAG4tI,WAAW7X,WAAW4X,GAGrB34H,KAAK+sB,GAAQhlB,MAAM/H,KAAM9V,UACjC,CACD,CAKA,IACK2uI,EADDC,GACCD,EAAS,CACZlvI,IAAK,SAAS2N,GACb,OAAO0I,KAAK7H,MAAMb,GAAG,EACtB,EACA9G,SAAU,SAASkgC,GAIlB,IADA,IAAIxc,EAAMwc,GAAKA,EAAEqoG,UACRzhI,EAAE,EAAG8yC,EAAEpqC,KAAK7V,OAAQmN,EAAI8yC,EAAG9yC,IAE9B,GAAI,GAAK0I,KAAK1I,GAAGyhI,UAAY7kH,GAAOlU,KAAK1I,GAAGyhI,UAAY7kH,EAAM,MAClE,OAAO5c,EACT,OAAQ,CACT,EACA2tB,OAAQ,SAAS3tB,GAChB0I,KAAK2B,OAAOrK,EAAE,EACf,EACAjH,QAAS,SAAS2oI,GACZA,IAEAnB,EAAEtpH,QAAQyqH,KACdA,EAAY,CAACA,IACdh5H,KAAKwc,QACLxc,KAAKpW,KAAKme,MAAM/H,KAAMg5H,GACvB,EACAx8G,MAAO,WACNxc,KAAK7V,OAAS,CACf,EACA8uI,KAAM,WACL,IAAIliI,EAAI,IAAI+hI,EAEZ,OADA/hI,EAAE1G,QAAQ2P,MACHjJ,CACR,GAGM,WACN,IAAIA,EAAI,GAGR,OAFAA,EAAEnN,KAAKme,MAAMhR,EAAG7M,WAChB2tI,EAAEjhF,OAAO7/C,EAAG8hI,GACL9hI,CACR,GAMGmiI,EAAa,SAASr2I,EAASkI,GAClC8sI,EAAEtrI,KAAK1J,EAAS,aAAcmd,MAE9BA,KAAKm5H,QAAU,GACfn5H,KAAKo5H,iBAAmB,GAExBp5H,KAAKq5H,iBAAiBtuI,GAEtBiV,KAAKs5H,MAAQ,IAAIR,EACjB94H,KAAKu5H,SAAWv5H,KAAKmyB,EAAEqnG,gBACvBx5H,KAAKy5H,UAAY,KAEjBz5H,KAAKnd,QAAUg1I,EAAEh1I,GACjBmd,KAAK05H,QAAU15H,KAAKnd,QAAQ6zC,GAAG,SAC/B12B,KAAK25H,WAAa35H,KAAK05H,QAAU15H,KAAKnd,QAAUmd,KAAKnd,QAAQqV,KAAK,SAClE8H,KAAK62D,YAAY72D,KAAKnd,QAAQ+2I,SAAS,SAAU55H,KAAKnd,QAAQqV,KAAK,gFAC/D8H,KAAK62D,WAAuC,IAA1B72D,KAAK62D,UAAU1sE,SACpC6V,KAAK62D,WAAY,GAClB72D,KAAK65H,UAAY75H,KAAK62D,WAAa72D,KAAKnd,QAAQ6zC,GAAG,OAEnD12B,KAAK85H,OAASjC,EAAEkC,EAASn6E,UAGrB5/C,KAAKg6H,gBAAgBh6H,KAAKmyB,EAAE8nG,UAAUC,YACzCl6H,KAAK85H,OAAO5hI,KAAK,SAAShH,KAAK8O,KAAKmyB,EAAE8nG,UAAUC,WAG7Cl6H,KAAKg6H,gBAAgBh6H,KAAKmyB,EAAE8nG,UAAUE,aACzCn6H,KAAK85H,OAAO5hI,KAAK,SAAShH,KAAK8O,KAAKmyB,EAAE8nG,UAAUE,YAGjDn6H,KAAKo6H,eACLp6H,KAAKq6H,gBAEDr6H,KAAK65H,SACR75H,KAAK85H,OAAO5iD,SAAS,qBAAqBojD,SAASt6H,KAAKnd,SAGxDmd,KAAK85H,OAAO5iD,SAAS,qCAGlBl3E,KAAKmyB,EAAEooG,KACVv6H,KAAK85H,OAAO5iD,SAAS,kBAGlBl3E,KAAKmyB,EAAEqoG,eACVx6H,KAAK85H,OAAO5hI,KAAK,4FACfujD,KAAK,WAAW,SAASnkD,EAAG4c,GAC5B,OAAOigB,OAAOjgB,GAAO,CACtB,IAGFlU,KAAKq5H,iBAAiB,CACrBoB,UAAWz6H,KAAK06H,GAAGD,UACnBE,QAAS36H,KAAK06H,GAAGC,QACjBC,mBAAoB56H,KAAKmyB,EAAEyoG,mBAC3BC,sBAAuB76H,KAAKmyB,EAAE0oG,sBAC9BC,cAAe96H,KAAKmyB,EAAE2oG,gBAGvB96H,KAAK+6H,eAAgB,EACrB/6H,KAAKg7H,YAAYh7H,KAAKmyB,EAAE8oG,WACxBj7H,KAAK+6H,eAAgB,EAErB/6H,KAAKk7H,UACLl7H,KAAKm7H,aAELn7H,KAAKhT,SAEDgT,KAAK65H,UACR75H,KAAKouE,MAEP,EAEA8qD,EAAW17H,UAAY,CACtBK,YAAaq7H,EAEbkC,iBAAkB,SAASxxG,GAQ1B,OAPAiuG,EAAEhW,KAAKkY,EAASsB,WAAW,SAAS/jI,EAAGgkI,GACtC,GAAI1xG,IAAStyB,IAA0C,IAArCugI,EAAE0D,QAAQ3xG,EAAM0xG,EAASv2G,OAE1C,OADA6E,EAAOtyB,GACA,CAET,IAEOsyB,CACR,EAEA4xG,mBAAoB,SAASC,GAG5B,OAFK5D,EAAEtpH,QAAQktH,KACdA,EAAaA,EAAWxtI,MAAM,WACxB4pI,EAAEz1I,IAAIq5I,EAAYtnG,OAC1B,EAEA6lG,gBAAiB,SAAS0B,GACzB,IAEC,OAAIA,IAAQ9tI,GAAqB,KAAR8tI,KAIpBA,EAAI9yF,MAAM,UAAY,IAAIz+C,QAAU,GAI9B0tI,EAAE6D,GACDvxI,OAAS,EACtB,CACA,MAAOwxI,GACN,OAAO,CACR,CACD,EAEAtC,iBAAkB,SAASzc,GAE1B58G,KAAK06H,GAAK7C,EAAEjhF,OAAO,CAAC,EAAG52C,KAAK06H,GAAI9d,GAEhC,IAAIzqF,EAAInyB,KAAKmyB,EAAI0lG,EAAEjhF,OAAO,CAAC,EAAG52C,KAAK06H,IAI/BkB,EAAOzpG,EAAE2b,SACRwrF,EAAMsC,KACVA,EAAOA,EAAK3tI,MAAM,KAAK,GAClBqrI,EAAMsC,KACVA,EAAOC,EAAS/tF,WAElB3b,EAAE2b,SAAW8tF,EAGbzpG,EAAE8oG,UAAYj7H,KAAKo7H,iBAAiBjpG,EAAE8oG,WACtC9oG,EAAE2pG,YAAc97H,KAAKo7H,iBAAiBjpG,EAAE2pG,aACxC3pG,EAAE4pG,YAAc/7H,KAAKo7H,iBAAiBjpG,EAAE4pG,aAGxC5pG,EAAE8oG,UAAYt5I,KAAKC,IAAIoe,KAAKmyB,EAAE2pG,YAAan6I,KAAKE,IAAIme,KAAKmyB,EAAE4pG,YAAa5pG,EAAE8oG,aAGtD,IAAhB9oG,EAAE6pG,YACL7pG,EAAE6pG,UAAY7nG,OAAOhC,EAAE6pG,aAAc,GACjB,IAAhB7pG,EAAE6pG,YACL7pG,EAAE6pG,UAAYr6I,KAAKC,IAAI,EAAGuwC,EAAE6pG,aAE9B7pG,EAAE8pG,mBAAqB1qH,OAAO4gB,EAAE8pG,oBAEhC9pG,EAAE+pG,WAAa,EACf/pG,EAAEgqG,SAAWhqG,EAAE+pG,UAAY,GAAK,EAEhC,IAAIE,EAASrC,EAASsC,YAAYlqG,EAAEiqG,QAChCjqG,EAAEsoG,aAAc,MACbtoG,EAAEsoG,UACHtoG,EAAEsoG,qBAAqBhyE,KAC1Bt2B,EAAEsoG,UAAYz6H,KAAKs8H,cAAct8H,KAAKu8H,WAAWpqG,EAAEsoG,YAEnDtoG,EAAEsoG,UAAYV,EAASyC,UAAUrqG,EAAEsoG,UAAW2B,EAAQjqG,EAAE2b,SAAU3b,EAAEsqG,kBAGrEtqG,EAAEsoG,WAAY,KAGZtoG,EAAEwoG,UAAY+B,MACXvqG,EAAEwoG,QACHxoG,EAAEwoG,mBAAmBlyE,KACxBt2B,EAAEwoG,QAAU36H,KAAKs8H,cAAct8H,KAAKu8H,WAAWpqG,EAAEwoG,UAEjDxoG,EAAEwoG,QAAUZ,EAASyC,UAAUrqG,EAAEwoG,QAASyB,EAAQjqG,EAAE2b,SAAU3b,EAAEsqG,kBAGjEtqG,EAAEwoG,QAAU+B,KAIdvqG,EAAEyoG,mBAAqB56H,KAAKw7H,mBAAmBrpG,EAAEyoG,oBAAoB,IACrEzoG,EAAE0oG,sBAAwB76H,KAAKw7H,mBAAmBrpG,EAAE0oG,uBAAuB,IAE3E1oG,EAAE2oG,cAAgB3oG,EAAE2oG,eAAe,GAC9BjD,EAAEtpH,QAAQ4jB,EAAE2oG,iBAChB3oG,EAAE2oG,cAAgB3oG,EAAE2oG,cAAc7sI,MAAM,MAEzCkkC,EAAE2oG,cAAgBjD,EAAEz1I,IAAI+vC,EAAE2oG,eAAe,SAASpqG,GACjD,OAAOqpG,EAASyC,UAAU9rG,EAAG0rG,EAAQjqG,EAAE2b,SAAU3b,EAAEsqG,iBACpD,IAEA,IAAIE,EAAMprH,OAAO4gB,EAAEyqG,aAAan4I,cAAcwJ,MAAM,QACnD4uI,EAAO1qG,EAAEyqG,YAAYn4I,cAKtB,GAJAk4I,EAAM9E,EAAEiF,KAAKH,GAAK,SAASI,GAC1B,MAAO,+BAA+Bp6I,KAAKo6I,EAC5C,IACA5qG,EAAEyqG,YAAc,CAACn5I,EAAG,OAAQG,EAAG,QAC1Bi5I,GAAiB,SAATA,EAER,GAAmB,IAAfF,EAAIxyI,OACZ,OAAQwyI,EAAI,IACX,IAAK,MACL,IAAK,SACJxqG,EAAEyqG,YAAYh5I,EAAI+4I,EAAI,GACtB,MACD,IAAK,OACL,IAAK,QACJxqG,EAAEyqG,YAAYn5I,EAAIk5I,EAAI,QAKxBE,EAAOhF,EAAEiF,KAAKH,GAAK,SAASI,GAC3B,MAAO,eAAep6I,KAAKo6I,EAC5B,IACA5qG,EAAEyqG,YAAYn5I,EAAIo5I,EAAK,IAAM,OAE7BA,EAAOhF,EAAEiF,KAAKH,GAAK,SAASI,GAC3B,MAAO,eAAep6I,KAAKo6I,EAC5B,IACA5qG,EAAEyqG,YAAYh5I,EAAIi5I,EAAK,IAAM,OAE9B,GAAI1qG,EAAEqnG,2BAA2B/wE,MAAqC,iBAAtBt2B,EAAEqnG,gBACjDrnG,EAAEqnG,gBAAkBO,EAASyC,UAAUrqG,EAAEqnG,gBAAiB4C,EAAQjqG,EAAE2b,SAAU3b,EAAEsqG,uBAC1E,GAAItqG,EAAEqnG,gBAAiB,CAC7B,IAAIwD,EAAO7qG,EAAEqnG,gBAAgBwD,OAAQ,IAAIv0E,MAAOyvE,cAC5C+E,EAAQ9qG,EAAEqnG,gBAAgByD,OAAS,EACnCC,EAAM/qG,EAAEqnG,gBAAgB0D,KAAO,EACnC/qG,EAAEqnG,gBAAkB1B,EAAQkF,EAAMC,EAAOC,EAC1C,MACC/qG,EAAEqnG,gBAAkBxB,GAEtB,EACAmF,aAAc,SAASC,GACtB,IAAK,IAAS7hF,EAAIpnC,EAAIkpH,EAAb/lI,EAAE,EAAeA,EAAI8lI,EAAIjzI,OAAQmN,IACzCikD,EAAK6hF,EAAI9lI,GAAG,GACU,IAAlB8lI,EAAI9lI,GAAGnN,QACVgqB,EAAKvmB,EACLyvI,EAAKD,EAAI9lI,GAAG,IACgB,IAAlB8lI,EAAI9lI,GAAGnN,SACjBgqB,EAAKipH,EAAI9lI,GAAG,GACZ+lI,EAAKD,EAAI9lI,GAAG,IAEbikD,EAAGkyD,GAAG4vB,EAAIlpH,EAEZ,EACAmpH,eAAgB,SAASF,GACxB,IAAK,IAAS7hF,EAAI8hF,EAAIlpH,EAAb7c,EAAE,EAAeA,EAAI8lI,EAAIjzI,OAAQmN,IACzCikD,EAAK6hF,EAAI9lI,GAAG,GACU,IAAlB8lI,EAAI9lI,GAAGnN,QACVgqB,EAAKvmB,EACLyvI,EAAKD,EAAI9lI,GAAG,IACgB,IAAlB8lI,EAAI9lI,GAAGnN,SACjBgqB,EAAKipH,EAAI9lI,GAAG,GACZ+lI,EAAKD,EAAI9lI,GAAG,IAEbikD,EAAGmzD,IAAI2uB,EAAIlpH,EAEb,EACAimH,aAAc,WACJ,IAAIt6G,EAAS,CACTy9G,MAAO1F,EAAE2F,OAAM,SAASrqG,IAC2C,IAA3D0kG,EAAE0D,QAAQpoG,EAAEsqG,QAAS,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,KAClDz9H,KAAKhT,QACb,GAAGgT,MACH09H,QAAS7F,EAAE2F,MAAMx9H,KAAK09H,QAAS19H,MAC/B29H,MAAO9F,EAAE2F,MAAMx9H,KAAK29H,MAAO39H,QAGJ,IAAvBA,KAAKmyB,EAAEyrG,cACP99G,EAAOqiB,MAAQ01F,EAAE2F,MAAMx9H,KAAKouE,KAAMpuE,OAGlCA,KAAK05H,QACL15H,KAAKm5H,QAAU,CACX,CAACn5H,KAAKnd,QAASi9B,IAId9f,KAAK62D,WAAa72D,KAAK25H,WAAWxvI,OACvC6V,KAAKm5H,QAAU,CAEX,CAACn5H,KAAK25H,WAAY75G,GAClB,CAAC9f,KAAK62D,UAAW,CACbgnE,MAAOhG,EAAE2F,MAAMx9H,KAAKouE,KAAMpuE,SAK9CA,KAAKm5H,QAAU,CACd,CAACn5H,KAAKnd,QAAS,CACdg7I,MAAOhG,EAAE2F,MAAMx9H,KAAKouE,KAAMpuE,MAC1B09H,QAAS7F,EAAE2F,MAAMx9H,KAAK09H,QAAS19H,SAIlCA,KAAKm5H,QAAQvvI,KAEZ,CAACoW,KAAKnd,QAAS,IAAK,CACnBi1F,KAAM+/C,EAAE2F,OAAM,SAASrqG,GACtBnzB,KAAK89H,cAAgB3qG,EAAErsC,MACxB,GAAGkZ,QAGJ,CAACA,KAAKnd,QAAS,CACdi1F,KAAM+/C,EAAE2F,OAAM,SAASrqG,GACtBnzB,KAAK89H,cAAgB3qG,EAAErsC,MACxB,GAAGkZ,SAIDA,KAAKmyB,EAAE4rG,kBAEV/9H,KAAKm5H,QAAQvvI,KAAK,CAACoW,KAAKnd,QAAS,CAChC,yBAA0Bg1I,EAAE2F,OAAM,SAASrqG,GAC1CnzB,KAAKhT,OAAOmmC,EAAE6qG,KACf,GAAGh+H,SAILA,KAAKo5H,iBAAmB,CACvB,CAACp5H,KAAK85H,OAAQ,CACb+D,MAAOhG,EAAE2F,MAAMx9H,KAAK69H,MAAO79H,QAE5B,CAACA,KAAK85H,OAAQ,eAAgB,CAC7B+D,MAAOhG,EAAE2F,MAAMx9H,KAAKi+H,eAAgBj+H,QAErC,CAACA,KAAK85H,OAAQ,sBAAuB,CACpC+D,MAAOhG,EAAE2F,MAAMx9H,KAAKk+H,aAAcl+H,QAEnC,CAAC63H,EAAE52I,QAAS,CACXuT,OAAQqjI,EAAE2F,MAAMx9H,KAAKm+H,MAAOn+H,QAE7B,CAAC63H,EAAElzI,UAAW,CACb,uBAAwBkzI,EAAE2F,OAAM,SAASrqG,GAGvCnzB,KAAKnd,QAAQ6zC,GAAGvD,EAAErsC,SAClBkZ,KAAKnd,QAAQqV,KAAKi7B,EAAErsC,QAAQqD,QAC5B6V,KAAK85H,OAAOpjG,GAAGvD,EAAErsC,SACjBkZ,KAAK85H,OAAO5hI,KAAKi7B,EAAErsC,QAAQqD,QAC3B6V,KAAK65H,UAEL75H,KAAKo+H,MAEP,GAAGp+H,QAGN,EACAq6H,cAAe,WACdr6H,KAAKq+H,gBACLr+H,KAAKm9H,aAAan9H,KAAKm5H,QACxB,EACAkF,cAAe,WACdr+H,KAAKs9H,eAAet9H,KAAKm5H,QAC1B,EACAmF,uBAAwB,WACvBt+H,KAAKu+H,yBACLv+H,KAAKm9H,aAAan9H,KAAKo5H,iBACxB,EACAmF,uBAAwB,WACvBv+H,KAAKs9H,eAAet9H,KAAKo5H,iBAC1B,EACAoF,SAAU,SAAS5hH,EAAO6hH,GACzB,IAAIT,EAAOS,GAAWz+H,KAAKs5H,MAAM3vI,KAAK,GACrC+0I,EAAa1+H,KAAK2+H,cAAcX,GAEjCh+H,KAAKnd,QAAQ46D,QAAQ,CACpB90C,KAAMiU,EACNohH,KAAMU,EACNpD,SAAUt7H,KAAKs7H,SACfhC,MAAOzB,EAAEz1I,IAAI4d,KAAKs5H,MAAOt5H,KAAK2+H,eAC9BvC,OAAQvE,EAAE2F,OAAM,SAASoB,EAAIxC,GACH,IAArBlyI,UAAUC,QACby0I,EAAK5+H,KAAKs5H,MAAMnvI,OAAS,EACzBiyI,EAASp8H,KAAKmyB,EAAEiqG,QACQ,iBAAPwC,IACjBxC,EAASwC,EACTA,EAAK5+H,KAAKs5H,MAAMnvI,OAAS,GAE1BiyI,EAASA,GAAUp8H,KAAKmyB,EAAEiqG,OAC1B,IAAI4B,EAAOh+H,KAAKs5H,MAAM3vI,IAAIi1I,GAC1B,OAAO7E,EAAS8E,WAAWb,EAAM5B,EAAQp8H,KAAKmyB,EAAE2b,SACjD,GAAG9tC,OAEL,EAEAouE,KAAM,WACL,KAAIpuE,KAAK25H,WAAWjjG,GAAG,cAAiB12B,KAAK25H,WAAWvsG,KAAK,cAA2C,IAA5BptB,KAAKmyB,EAAE2sG,kBAWnF,OATK9+H,KAAK65H,UACT75H,KAAK85H,OAAOQ,SAASt6H,KAAKmyB,EAAExE,WAC7B3tB,KAAKm+H,QACLn+H,KAAK85H,OAAO1rD,OACZpuE,KAAKs+H,yBACLt+H,KAAKw+H,SAAS,SACTv9I,OAAOgB,UAAU88I,kBAAoB,iBAAkBp6I,WAAaqb,KAAKmyB,EAAE6sG,sBAC/EnH,EAAE73H,KAAKnd,SAASi1F,OAEV93E,IACR,EAEAo+H,KAAM,WACL,OAAIp+H,KAAK65H,WAAa75H,KAAK85H,OAAOpjG,GAAG,cAErC12B,KAAKy5H,UAAY,KACjBz5H,KAAK85H,OAAOsE,OAAOa,SACnBj/H,KAAKu+H,yBACLv+H,KAAKg7H,YAAYh7H,KAAKmyB,EAAE8oG,WAEpBj7H,KAAKmyB,EAAE+sG,YAAcl/H,KAAK25H,WAAWzlH,OACxClU,KAAKqE,WACNrE,KAAKw+H,SAAS,SARNx+H,IAUT,EAEAnS,QAAS,WASR,OARAmS,KAAKo+H,OACLp+H,KAAKq+H,gBACLr+H,KAAKu+H,yBACLv+H,KAAK85H,OAAO70G,gBACLjlB,KAAKnd,QAAQ0J,OAAOqsI,WACtB54H,KAAK05H,gBACF15H,KAAKnd,QAAQ0J,OAAOyxI,KAErBh+H,IACR,EAEA29H,MAAO,SAASxqG,GACf,IAAIgsG,EACJ,GAAIhsG,EAAEisG,cAAcC,eAAiBlsG,EAAEisG,cAAcC,cAAcvsE,QACG,IAAlE+kE,EAAE0D,QAAQ,aAAcpoG,EAAEisG,cAAcC,cAAcvsE,OACzDqsE,EAAahsG,EAAEisG,cAAcC,cAAcC,QAAQ,kBAC7C,KAAIr+I,OAAOo+I,cAGjB,OAFAF,EAAal+I,OAAOo+I,cAAcC,QAAQ,OAG3C,CACAt/H,KAAKu/H,QAAQJ,GACbn/H,KAAKhT,SACLmmC,EAAE7E,gBACH,EAEAqwG,cAAe,SAASa,GACvB,IAAKA,EACJ,OAAOA,EAGR,IAAIx0D,EAAQ,IAAIviB,KAAK+2E,EAAIC,UAAuC,IAA1BD,EAAIE,qBAM1C,OAJI10D,EAAM00D,sBAAwBF,EAAIE,sBACrC10D,EAAQ,IAAIviB,KAAK+2E,EAAIC,UAAyC,IAA5Bz0D,EAAM00D,sBAGlC10D,CACR,EACAsxD,cAAe,SAAStxD,GACvB,OAAOA,GAAS,IAAIviB,KAAKuiB,EAAMy0D,UAAuC,IAA1Bz0D,EAAM00D,oBACnD,EACAnD,WAAY,SAASvxD,GACpB,OAAOA,GAAS,IAAIviB,KAAKuiB,EAAMktD,cAAeltD,EAAMmtD,WAAYntD,EAAMotD,UACvE,EACAuH,eAAgB,SAASH,GACxB,OAAOA,GAAO1H,EAAQ0H,EAAIhH,iBAAkBgH,EAAI/G,cAAe+G,EAAI9G,aACpE,EAEAkH,SAAU,WACT,OAAO/H,EAAEz1I,IAAI4d,KAAKs5H,MAAOt5H,KAAK2+H,cAC/B,EAEAkB,YAAa,WACZ,OAAOhI,EAAEz1I,IAAI4d,KAAKs5H,OAAO,SAAS5oG,GACjC,OAAO,IAAI+3B,KAAK/3B,EACjB,GACD,EAEA0nG,QAAS,WACR,OAAOp4H,KAAK2+H,cAAc3+H,KAAK04H,aAChC,EAEAA,WAAY,WACX,IAAIoH,EAAgB9/H,KAAKs5H,MAAM3vI,KAAK,GACpC,OAAIm2I,IAAkBlyI,EACd,IAAI66D,KAAKq3E,GAET,IAET,EAEAC,WAAY,WACX//H,KAAK25H,WAAWzlH,IAAI,IACpBlU,KAAKhT,SACLgT,KAAKw+H,SAAS,cAEVx+H,KAAKmyB,EAAE6tG,WACVhgI,KAAKo+H,MAEP,EAEA6B,SAAU,WACT,IAAI71I,EAAOytI,EAAEtpH,QAAQrkB,UAAU,IAAMA,UAAU,GAAKA,UAIpD,OAHA8V,KAAKhT,OAAO+a,MAAM/H,KAAM5V,GACxB4V,KAAKw+H,SAAS,cACdx+H,KAAKqE,WACErE,IACR,EAEAkgI,YAAa,WACZ,IAAI91I,EAAOytI,EAAEtpH,QAAQrkB,UAAU,IAAMA,UAAU,GAAKA,UAEpD,OADA8V,KAAKigI,SAASl4H,MAAM/H,KAAM63H,EAAEz1I,IAAIgI,EAAM4V,KAAK2+H,gBACpC3+H,IACR,EAEAu/H,QAASviG,EAAM,YACfmjG,WAAYnjG,EAAM,eAClB/X,OAAQ+X,EAAM,UAAW,2FAEzB34B,SAAU,WACT,IAAI+7H,EAAYpgI,KAAKqgI,mBAErB,OADArgI,KAAK25H,WAAWzlH,IAAIksH,GACbpgI,IACR,EAEAqgI,iBAAkB,SAASjE,GACtBA,IAAWxuI,IACdwuI,EAASp8H,KAAKmyB,EAAEiqG,QAEjB,IAAIR,EAAO57H,KAAKmyB,EAAE2b,SAClB,OAAO+pF,EAAEz1I,IAAI4d,KAAKs5H,OAAO,SAAS5oG,GACjC,OAAOqpG,EAAS8E,WAAWnuG,EAAG0rG,EAAQR,EACvC,IAAGp5I,KAAKwd,KAAKmyB,EAAE8pG,mBAChB,EAEAqE,aAAc,WACb,OAAOtgI,KAAKmyB,EAAEsoG,SACf,EAEA8F,aAAc,SAAS9F,GAItB,OAHAz6H,KAAKq5H,iBAAiB,CAACoB,UAAWA,IAClCz6H,KAAKhT,SACLgT,KAAKwgI,kBACExgI,IACR,EAEAygI,WAAY,WACX,OAAOzgI,KAAKmyB,EAAEwoG,OACf,EAEA+F,WAAY,SAAS/F,GAIpB,OAHA36H,KAAKq5H,iBAAiB,CAACsB,QAASA,IAChC36H,KAAKhT,SACLgT,KAAKwgI,kBACExgI,IACR,EAEA2gI,sBAAuB,SAAS/F,GAG/B,OAFA56H,KAAKq5H,iBAAiB,CAACuB,mBAAoBA,IAC3C56H,KAAKhT,SACEgT,IACR,EAEA4gI,yBAA0B,SAAS/F,GAGlC,OAFA76H,KAAKq5H,iBAAiB,CAACwB,sBAAuBA,IAC9C76H,KAAKhT,SACEgT,IACR,EAEA6gI,iBAAkB,SAAS/F,GAG1B,OAFA96H,KAAKq5H,iBAAiB,CAACyB,cAAeA,IACtC96H,KAAKhT,SACEgT,IACR,EAEAm+H,MAAO,WACN,GAAIn+H,KAAK65H,SACR,OAAO75H,KACR,IAAI8gI,EAAgB9gI,KAAK85H,OAAOiH,aAC/BC,EAAiBhhI,KAAK85H,OAAOmH,cAE7BtzG,EAAYkqG,EAAE73H,KAAKmyB,EAAExE,WACrBuzG,EAAcvzG,EAAUvqC,QACxBiB,EAAiC,SAArB2b,KAAKmyB,EAAExE,UAAuBkqG,EAAElzI,UAAUN,YAAcspC,EAAUtpC,YAC9E88I,EAAexzG,EAAU75B,SAEtBstI,EAAgB,CAAC,GACrBphI,KAAKnd,QAAQw+I,UAAUxf,MAAK,WAC3B,IAAIyf,EAAazJ,EAAE73H,MAAMzY,IAAI,WACV,SAAf+5I,GAAgD,IAAvBntG,OAAOmtG,IAAmBF,EAAcx3I,KAAKuqC,OAAOmtG,GAClF,IACA,IAAIC,EAAS5/I,KAAKC,IAAImmB,MAAMpmB,KAAMy/I,GAAiBphI,KAAKmyB,EAAEqvG,aACtD1tI,EAASkM,KAAK62D,UAAY72D,KAAK62D,UAAUpmE,SAASqD,SAAWkM,KAAKnd,QAAQiR,SAC1ExQ,EAAS0c,KAAK62D,UAAY72D,KAAK62D,UAAUoqE,aAAY,GAAQjhI,KAAKnd,QAAQo+I,aAAY,GACtF79I,EAAQ4c,KAAK62D,UAAY72D,KAAK62D,UAAUkqE,YAAW,GAAQ/gI,KAAKnd,QAAQk+I,YAAW,GACnFr9I,EAAOoQ,EAAOpQ,KAAOy9I,EAAaz9I,KAClCG,EAAMiQ,EAAOjQ,IAAMs9I,EAAat9I,IAEX,SAArBmc,KAAKmyB,EAAExE,YACV9pC,GAAOQ,GAGR2b,KAAK85H,OAAO7iD,YACX,iGAI4B,SAAzBj3E,KAAKmyB,EAAEyqG,YAAYn5I,GACtBuc,KAAK85H,OAAO5iD,SAAS,qBAAuBl3E,KAAKmyB,EAAEyqG,YAAYn5I,GAClC,UAAzBuc,KAAKmyB,EAAEyqG,YAAYn5I,IACtBC,GAAQo9I,EAAgB19I,IAKrB0Q,EAAOpQ,KAAO,GAEjBsc,KAAK85H,OAAO5iD,SAAS,0BACrBxzF,GAAQoQ,EAAOpQ,KAtCA,IAuCLA,EAAOo9I,EAAgBI,GAEjClhI,KAAK85H,OAAO5iD,SAAS,2BACrBxzF,GAAQN,EAAQ09I,GAEZ9gI,KAAKmyB,EAAEooG,IAEVv6H,KAAK85H,OAAO5iD,SAAS,2BAGrBl3E,KAAK85H,OAAO5iD,SAAS,0BAOxB,IAAIuqD,EAAUzhI,KAAKmyB,EAAEyqG,YAAYh5I,EAajC,GAXgB,SAAZ69I,IAEHA,GADgBp9I,EAAYR,EAAMm9I,EACT,EAAI,SAAW,OAGzChhI,KAAK85H,OAAO5iD,SAAS,qBAAuBuqD,GAC5B,QAAZA,EACH59I,GAAOm9I,EAAiBxyH,SAASxO,KAAK85H,OAAOvyI,IAAI,gBAEjD1D,GAAOP,EAEJ0c,KAAKmyB,EAAEooG,IAAK,CACf,IAAIx2I,EAAQm9I,GAAex9I,EAAON,GAClC4c,KAAK85H,OAAOvyI,IAAI,CACf1D,IAAKA,EACLE,MAAOA,EACPw9I,OAAQA,GAEV,MACCvhI,KAAK85H,OAAOvyI,IAAI,CACf1D,IAAKA,EACLH,KAAMA,EACN69I,OAAQA,IAGV,OAAOvhI,IACR,EAEA+6H,eAAe,EACf/tI,OAAQ,WACP,IAAKgT,KAAK+6H,cACT,OAAO/6H,KAER,IAAI0hI,EAAW1hI,KAAKs5H,MAAML,OACzBK,EAAQ,GACRqI,GAAW,EA2DZ,OA1DIz3I,UAAUC,QACb0tI,EAAEhW,KAAK33H,UAAW2tI,EAAE2F,OAAM,SAASlmI,EAAG0mI,GACjCA,aAAgBv1E,OACnBu1E,EAAOh+H,KAAKs8H,cAAc0B,IAC3B1E,EAAM1vI,KAAKo0I,EACZ,GAAGh+H,OACH2hI,GAAW,IAMVrI,GAJDA,EAAQt5H,KAAK05H,QACT15H,KAAKnd,QAAQqxB,MACblU,KAAKnd,QAAQ0J,KAAK,SAAWyT,KAAK25H,WAAWzlH,QACpClU,KAAKmyB,EAAE6pG,UACX1C,EAAMrrI,MAAM+R,KAAKmyB,EAAE8pG,oBAEnB,CAAC3C,UACHt5H,KAAKnd,QAAQ0J,OAAOyxI,MAG5B1E,EAAQzB,EAAEz1I,IAAIk3I,EAAOzB,EAAE2F,OAAM,SAASQ,GACrC,OAAOjE,EAASyC,UAAUwB,EAAMh+H,KAAKmyB,EAAEiqG,OAAQp8H,KAAKmyB,EAAE2b,SAAU9tC,KAAKmyB,EAAEsqG,iBACxE,GAAGz8H,OACHs5H,EAAQzB,EAAEiF,KAAKxD,EAAOzB,EAAE2F,OAAM,SAASQ,GACtC,OACEh+H,KAAK4hI,gBAAgB5D,KACrBA,CAEH,GAAGh+H,OAAO,GACVA,KAAKs5H,MAAMjpI,QAAQipI,GAEft5H,KAAKmyB,EAAE0vG,iBACN7hI,KAAKs5H,MAAMnvI,OACd6V,KAAKu5H,SAAW,IAAI9wE,KAAKzoD,KAAKs5H,MAAM3vI,KAAK,IACjCqW,KAAKu5H,SAAWv5H,KAAKmyB,EAAEsoG,UAC/Bz6H,KAAKu5H,SAAW,IAAI9wE,KAAKzoD,KAAKmyB,EAAEsoG,WACxBz6H,KAAKu5H,SAAWv5H,KAAKmyB,EAAEwoG,QAC/B36H,KAAKu5H,SAAW,IAAI9wE,KAAKzoD,KAAKmyB,EAAEwoG,SAEhC36H,KAAKu5H,SAAWv5H,KAAKmyB,EAAEqnG,iBAGrBmI,GAEH3hI,KAAKqE,WACLrE,KAAKnd,QAAQ8oH,UAEL3rG,KAAKs5H,MAAMnvI,QAEfonB,OAAOmwH,KAAcnwH,OAAOvR,KAAKs5H,QAAUqI,IAC9C3hI,KAAKw+H,SAAS,cACdx+H,KAAKnd,QAAQ8oH,WAGV3rG,KAAKs5H,MAAMnvI,QAAUu3I,EAASv3I,SAClC6V,KAAKw+H,SAAS,aACdx+H,KAAKnd,QAAQ8oH,UAGd3rG,KAAK8hI,OACE9hI,IACR,EAEAk7H,QAAS,WACL,GAAIl7H,KAAKmyB,EAAE4vG,aAAc,CAC5B,IAAIC,EAAShiI,KAAKmyB,EAAE+pG,UACnBhrI,EAAO,OAIR,IAHI8O,KAAKmyB,EAAEqoG,gBACVtpI,GAAQ,8BAEF8wI,EAAShiI,KAAKmyB,EAAE+pG,UAAY,GAClChrI,GAAQ,kBACkD,IAAlD2mI,EAAE0D,QAAQyG,EAAQhiI,KAAKmyB,EAAEyoG,sBAC3B1pI,GAAQ,aACVA,GAAQ,KAAKooI,EAAMt5H,KAAKmyB,EAAE2b,UAAUm0F,QAASD,IAAU,GAAG,QAE/D9wI,GAAQ,QACR8O,KAAK85H,OAAO5hI,KAAK,0BAA0B8P,OAAO9W,EAC/C,CACJ,EAEAiqI,WAAY,WAIX,IAHG,IAAI+G,EAAYliI,KAAK2+H,cAAc3+H,KAAKu5H,UACvCroI,EAAO,GAEFoG,EAAI,EAAGA,EAAI,GAAIA,IAEvBpG,GAAQ,sBADEgxI,GAAaA,EAAU/J,aAAe7gI,EAAI,WAAa,IACxB,KAAOgiI,EAAMt5H,KAAKmyB,EAAE2b,UAAUq0F,YAAY7qI,GAAK,UAEzF0I,KAAK85H,OAAO5hI,KAAK,yBAAyBhH,KAAKA,EAChD,EAEAkxI,SAAU,SAASh9B,GACbA,GAAUA,EAAMj7G,OAGpB6V,KAAKolG,MAAQyyB,EAAEz1I,IAAIgjH,GAAO,SAAS10E,GAClC,OAAOA,EAAEqoG,SACV,WAJO/4H,KAAKolG,MAKbplG,KAAK8hI,MACN,EAEAO,cAAe,SAASrE,GACvB,IAAIsE,EAAM,GACTtF,EAAOh9H,KAAKu5H,SAASf,iBACrByE,EAAQj9H,KAAKu5H,SAASd,cACtBR,EAAQD,IAsCT,OArCIgG,EAAKxF,iBAAmBwE,GAASgB,EAAKxF,mBAAqBwE,GAAQgB,EAAKvF,cAAgBwE,EAC3FqF,EAAI14I,KAAK,QACCo0I,EAAKxF,iBAAmBwE,GAASgB,EAAKxF,mBAAqBwE,GAAQgB,EAAKvF,cAAgBwE,IAClGqF,EAAI14I,KAAK,OAENoW,KAAKy5H,WAAauE,EAAKjF,YAAc/4H,KAAKy5H,UAAUV,WACvDuJ,EAAI14I,KAAK,WAENoW,KAAKmyB,EAAEowG,gBAAkBlK,EAAY2F,EAAM/F,IAC9CqK,EAAI14I,KAAK,UAEyB,IAA/BoW,KAAKs5H,MAAM9oI,SAASwtI,IACvBsE,EAAI14I,KAAK,UACLoW,KAAK4hI,gBAAgB5D,IACzBsE,EAAI14I,KAAK,YAENoW,KAAKwiI,eAAexE,IACvBsE,EAAI14I,KAAK,WAAY,kBAE6C,IAA/DiuI,EAAE0D,QAAQyC,EAAKyE,YAAaziI,KAAKmyB,EAAE0oG,wBACtCyH,EAAI14I,KAAK,eAGNoW,KAAKolG,QACJ44B,EAAOh+H,KAAKolG,MAAM,IAAM44B,EAAOh+H,KAAKolG,MAAMplG,KAAKolG,MAAMj7G,OAAO,IAC/Dm4I,EAAI14I,KAAK,UAEqC,IAA3CiuI,EAAE0D,QAAQyC,EAAKjF,UAAW/4H,KAAKolG,QAClCk9B,EAAI14I,KAAK,YAENo0I,EAAKjF,YAAc/4H,KAAKolG,MAAM,IAC5Bk9B,EAAI14I,KAAK,eAEPo0I,EAAKjF,YAAc/4H,KAAKolG,MAAMplG,KAAKolG,MAAMj7G,OAAO,IAClDm4I,EAAI14I,KAAK,cAGT04I,CACR,EAEAI,gBAAiB,SAAShtC,EAAUitC,EAAUC,EAAQ5F,EAAM6F,EAAWC,EAASC,GAY/E,IAXA,IAUIt7E,EAASu7E,EAAS9uC,EAVlBhjG,EAAO,GACPikC,EAAOytG,EAAS,GAChBh5G,EAAO5pB,KAAK85H,OAAO5hI,KAAKw9F,GACxButC,EAAWthJ,KAAK6yC,MAAMwoG,EAAO4F,GAAUA,EACvCM,EAASD,EAAkB,EAAP9tG,EACpBguG,EAAaxhJ,KAAK6yC,MAAMx0B,KAAKu5H,SAASrB,cAAgB/iG,GAAQA,EAC9DnR,EAAW6zG,EAAEz1I,IAAI4d,KAAKs5H,OAAO,SAAS5oG,GACzC,OAAO/uC,KAAK6yC,MAAM9D,EAAE8nG,iBAAmBrjG,GAAQA,CAChD,IAGSiuG,EAAUH,EAAW9tG,EAAMiuG,GAAWF,EAAS/tG,EAAMiuG,GAAWjuG,EACxEsyB,EAAU,CAACk7E,GACXK,EAAU,KAENI,IAAYH,EAAW9tG,EAC1BsyB,EAAQ79D,KAAK,OACHw5I,IAAYF,EAAS/tG,GAC/BsyB,EAAQ79D,KAAK,QAEwB,IAAlCiuI,EAAE0D,QAAQ6H,EAASp/G,IACtByjC,EAAQ79D,KAAK,WAEVw5I,EAAUP,GAAaO,EAAUN,IACpCr7E,EAAQ79D,KAAK,YAEVw5I,IAAYD,GACd17E,EAAQ79D,KAAK,WAGXm5I,IAAalL,EAAEvpE,QAClB4lC,EAAS6uC,EAAS,IAAIt6E,KAAK26E,EAAS,EAAG,OACxBx1I,EACdsmG,EAAS,CAAC,EACkB,kBAAXA,EACjBA,EAAS,CAACvnG,QAASunG,GACS,iBAAXA,IACjBA,EAAS,CAACzsC,QAASysC,KAEG,IAAnBA,EAAOvnG,SACV86D,EAAQ79D,KAAK,YAEVsqG,EAAOzsC,UACVA,EAAUA,EAAQ1gE,OAAOmtG,EAAOzsC,QAAQx5D,MAAM,SAE3CimG,EAAO8uC,UACVA,EAAU9uC,EAAO8uC,UAInB9xI,GAAQ,gBAAkBu2D,EAAQjlE,KAAK,KAAO,KAAOwgJ,EAAU,WAAaA,EAAU,IAAM,IAAM,IAAMI,EAAU,UAGnHx5G,EAAK1xB,KAAK,sBAAsBoa,KAAK2wH,EAAW,IAAMC,GACtDt5G,EAAK1xB,KAAK,MAAMhH,KAAKA,EACtB,EAEA4wI,KAAM,WACL,IAYCkB,EACA9uC,EAbGxjE,EAAI,IAAI+3B,KAAKzoD,KAAKu5H,UACrByD,EAAOtsG,EAAE8nG,iBACTyE,EAAQvsG,EAAE+nG,cACVoK,EAAY7iI,KAAKmyB,EAAEsoG,aAAc,IAAYz6H,KAAKmyB,EAAEsoG,UAAUjC,kBAAmB,IACjF6K,EAAarjI,KAAKmyB,EAAEsoG,aAAc,IAAYz6H,KAAKmyB,EAAEsoG,UAAUhC,eAAgB,IAC/EqK,EAAU9iI,KAAKmyB,EAAEwoG,UAAY+B,IAAW18H,KAAKmyB,EAAEwoG,QAAQnC,iBAAmBkE,IAC1E4G,EAAWtjI,KAAKmyB,EAAEwoG,UAAY+B,IAAW18H,KAAKmyB,EAAEwoG,QAAQlC,cAAgBiE,IACxE6G,EAAWjK,EAAMt5H,KAAKmyB,EAAE2b,UAAUmqF,OAASqB,EAAU,GAAErB,OAAS,GAChEuL,EAAWlK,EAAMt5H,KAAKmyB,EAAE2b,UAAUtxB,OAAS88G,EAAU,GAAE98G,OAAS,GAC5DinH,EAAcnK,EAAMt5H,KAAKmyB,EAAE2b,UAAU21F,aAAenK,EAAU,GAAEmK,YAChEC,EAAY1L,IACZ2L,IAAuC,IAApB3jI,KAAKmyB,EAAEyxG,UAAyC,WAApB5jI,KAAKmyB,EAAEyxG,WAA0BF,GAAa1jI,KAAKmyB,EAAEsoG,WAAaiJ,GAAa1jI,KAAKmyB,EAAEwoG,UAAY36H,KAAK6jI,qBAAqBH,GAGhL,IAAItvG,MAAM4oG,KAAS5oG,MAAM6oG,GAAzB,CAEAj9H,KAAK85H,OAAO5hI,KAAK,uCACboa,KAAKynH,EAAS8E,WAAWnuG,EAAG+yG,EAAazjI,KAAKmyB,EAAE2b,WACpD9tC,KAAK85H,OAAO5hI,KAAK,gBACboa,KAAKixH,GACCh8I,IAAI,UAAWo8I,EAAkB,aAAe,QAC1D3jI,KAAK85H,OAAO5hI,KAAK,gBACboa,KAAKkxH,GACLj8I,IAAI,WAA+B,IAApByY,KAAKmyB,EAAE2xG,SAAoB,aAAe,QAC7D9jI,KAAK85H,OAAO5hI,KAAK,2BACboa,KAAKtS,KAAKmyB,EAAE3I,OACZjiC,IAAI,UAAmC,iBAAjByY,KAAKmyB,EAAE3I,OAAuC,KAAjBxpB,KAAKmyB,EAAE3I,MAAe,aAAe,QAC5FxpB,KAAKwgI,kBACLxgI,KAAKm7H,aACL,IAAI4I,EAAYjM,EAAQkF,EAAMC,EAAO,GACpCC,EAAM6G,EAAUrL,aACjBqL,EAAU5D,WAAWjD,GAAO6G,EAAUtB,YAAcziI,KAAKmyB,EAAE+pG,UAAY,GAAG,GAC1E,IAAI8H,EAAY,IAAIv7E,KAAKs7E,GACrBA,EAAUvL,iBAAmB,KAC5BwL,EAAUC,eAAeF,EAAUvL,kBAExCwL,EAAU7D,WAAW6D,EAAUtL,aAAe,IAC9CsL,EAAYA,EAAUjL,UAGtB,IAFA,IACImL,EAASC,EADTjzI,EAAO,GAEJ6yI,EAAUhL,UAAYiL,GAAU,CAEtC,IADAE,EAAUH,EAAUtB,eACJziI,KAAKmyB,EAAE+pG,YACtBhrI,EAAKtH,KAAK,QACNoW,KAAKmyB,EAAEqoG,eAAc,CAGxB,IAEC4J,EAAK,IAAI37E,MAAMs7E,GAAa/jI,KAAKmyB,EAAE+pG,UAAYgI,EAAU,GAAK,EAAI,OAElEG,EAAK,IAAI57E,KAAKt0B,OAAOiwG,IAAO,GAAQA,EAAG3B,aAAe,EAAI,OAE1D6B,EAAM,IAAI77E,KAAKt0B,OAAOmwG,EAAMxM,EAAQuM,EAAG7L,iBAAkB,EAAG,KAAO,GAAQ8L,EAAI7B,aAAe,EAAI,OAElG8B,GAAWF,EAAKC,GAAO,MAAQ,EAAI,EACpCpzI,EAAKtH,KAAK,kBAAmB26I,EAAS,QACvC,EAEDJ,EAAUnkI,KAAKqiI,cAAc0B,IACrBn6I,KAAK,OAEb,IAAI4qD,EAAUuvF,EAAUrL,aAEpB14H,KAAKmyB,EAAEqyG,gBAAkB3M,EAAEvpE,QAC9B4lC,EAASl0F,KAAKmyB,EAAEqyG,cAAcxkI,KAAK2+H,cAAcoF,OAClCn2I,EACdsmG,EAAS,CAAC,EACgB,kBAAXA,EACfA,EAAS,CAACvnG,QAASunG,GACO,iBAAXA,IACfA,EAAS,CAACzsC,QAASysC,KACG,IAAnBA,EAAOvnG,SACVw3I,EAAQv6I,KAAK,YACVsqG,EAAOzsC,UACV08E,EAAUA,EAAQp9I,OAAOmtG,EAAOzsC,QAAQx5D,MAAM,SAC3CimG,EAAO8uC,UACVA,EAAU9uC,EAAO8uC,SACd9uC,EAAO1/C,UACVA,EAAU0/C,EAAO1/C,UAMlB2vF,EADGtM,EAAE4M,WAAW5M,EAAE6M,YACR7M,EAAE6M,WAAWP,GAEbtM,EAAE8M,OAAOR,GAGpBjzI,EAAKtH,KAAK,cAAcu6I,EAAQ3hJ,KAAK,KAAK,KAAOwgJ,EAAU,WAAWA,EAAQ,IAAM,IAAM,eAAiBe,EAAUtE,UAAUv+I,WAAa,KAAOszD,EAAU,SAC7JwuF,EAAU,KACNkB,IAAYlkI,KAAKmyB,EAAEgqG,SACtBjrI,EAAKtH,KAAK,SAEXm6I,EAAU5D,WAAW4D,EAAUrL,aAAe,EAC/C,CACA14H,KAAK85H,OAAO5hI,KAAK,0BAA0BhH,KAAKA,EAAK1O,KAAK,KAE1D,IAAIoiJ,EAActL,EAAMt5H,KAAKmyB,EAAE2b,UAAU82F,aAAetL,EAAU,GAAEsL,aAAe,SAC/EC,EAAS7kI,KAAK85H,OAAO5hI,KAAK,sBAC1BA,KAAK,sBACJoa,KAAKtS,KAAKmyB,EAAE4pG,YAAc,EAAI6I,EAAc5H,GAC5C/0I,MACDiQ,KAAK,cAAc++E,YAAY,UAiBnC,GAfA4gD,EAAEhW,KAAK7hH,KAAKs5H,OAAO,SAAShiI,EAAGo5B,GAC1BA,EAAE8nG,mBAAqBwE,GAC1B6H,EAAOC,GAAGp0G,EAAE+nG,eAAevhD,SAAS,SACtC,KAEI8lD,EAAO6F,GAAa7F,EAAO8F,IAC9B+B,EAAO3tD,SAAS,YAEb8lD,IAAS6F,GACZgC,EAAO1sI,MAAM,EAAGkrI,GAAYnsD,SAAS,YAElC8lD,IAAS8F,GACZ+B,EAAO1sI,MAAMmrI,EAAS,GAAGpsD,SAAS,YAG/Bl3E,KAAKmyB,EAAE4yG,kBAAoBlN,EAAEvpE,KAAK,CACrC,IAAI02E,EAAOhlI,KACX63H,EAAEhW,KAAKgjB,GAAQ,SAASvtI,EAAG2lI,GACrB,IAAIgI,EAAS,IAAIx8E,KAAKu0E,EAAM1lI,EAAG,GAC3B48F,EAAS8wC,EAAK7yG,EAAE4yG,gBAAgBE,GACrC/wC,IAAWtmG,EACdsmG,EAAS,CAAC,EACgB,kBAAXA,EACfA,EAAS,CAACvnG,QAASunG,GACO,iBAAXA,IACfA,EAAS,CAACzsC,QAASysC,KACG,IAAnBA,EAAOvnG,SAAsBkrI,EAAEoF,GAAOrD,SAAS,aAC/C/B,EAAEoF,GAAO/lD,SAAS,YAClBgd,EAAOzsC,SACPowE,EAAEoF,GAAO/lD,SAASgd,EAAOzsC,SACzBysC,EAAO8uC,SACPnL,EAAEoF,GAAO7vG,KAAK,QAAS8mE,EAAO8uC,QACnC,GACD,CAGAhjI,KAAK0iI,gBACJ,oBACA,OACA,GACA1F,EACA6F,EACAC,EACA9iI,KAAKmyB,EAAE+yG,gBAIRllI,KAAK0iI,gBACJ,sBACA,SACA,IACA1F,EACA6F,EACAC,EACA9iI,KAAKmyB,EAAEgzG,kBAIRnlI,KAAK0iI,gBACJ,wBACA,UACA,IACA1F,EACA6F,EACAC,EACA9iI,KAAKmyB,EAAEizG,kBA5JD,CA8JR,EAEA5E,gBAAiB,WAChB,GAAKxgI,KAAK+6H,cAAV,CAGA,IAOCsK,EACAC,EARG50G,EAAI,IAAI+3B,KAAKzoD,KAAKu5H,UACrByD,EAAOtsG,EAAE8nG,iBACTyE,EAAQvsG,EAAE+nG,cACVoK,EAAY7iI,KAAKmyB,EAAEsoG,aAAc,IAAYz6H,KAAKmyB,EAAEsoG,UAAUjC,kBAAmB,IACjF6K,EAAarjI,KAAKmyB,EAAEsoG,aAAc,IAAYz6H,KAAKmyB,EAAEsoG,UAAUhC,eAAgB,IAC/EqK,EAAU9iI,KAAKmyB,EAAEwoG,UAAY+B,IAAW18H,KAAKmyB,EAAEwoG,QAAQnC,iBAAmBkE,IAC1E4G,EAAWtjI,KAAKmyB,EAAEwoG,UAAY+B,IAAW18H,KAAKmyB,EAAEwoG,QAAQlC,cAAgBiE,IAGxEkG,EAAS,EACV,OAAQ5iI,KAAKs7H,UACZ,KAAK,EACJsH,GAAU,GAEX,KAAK,EACJA,GAAU,GAEX,KAAK,EACJA,GAAU,GAEX,KAAK,EACJyC,EAAiB1jJ,KAAK6yC,MAAMwoG,EAAO4F,GAAUA,GAAUC,EACvDyC,EAAiB3jJ,KAAK6yC,MAAMwoG,EAAO4F,GAAUA,EAASA,EAASE,EAC/D,MACD,KAAK,EACJuC,EAAiBrI,GAAQ6F,GAAa5F,GAASoG,EAC/CiC,EAAiBtI,GAAQ8F,GAAW7F,GAASqG,EAI/CtjI,KAAK85H,OAAO5hI,KAAK,SAASqtI,YAAY,WAAYF,GAClDrlI,KAAK85H,OAAO5hI,KAAK,SAASqtI,YAAY,WAAYD,EAjC3C,CAkCR,EAEAzH,MAAO,SAAS1qG,GAIf,IAAIrsC,EAAkBk2I,EAAMC,EAH5B9pG,EAAE7E,iBACF6E,EAAEnW,mBAGFl2B,EAAS+wI,EAAE1kG,EAAErsC,SAGF8yI,SAAS,sBAAwB55H,KAAKs7H,WAAat7H,KAAKmyB,EAAE4pG,aACpE/7H,KAAKg7H,YAAYh7H,KAAKs7H,SAAW,GAI9Bx0I,EAAO8yI,SAAS,WAAa9yI,EAAO8yI,SAAS,SAChD55H,KAAKg7H,YAAY,GACjBh7H,KAAKwlI,SAASxN,IAAgC,WAApBh4H,KAAKmyB,EAAEyxG,SAAwB,KAAO,SAI7D98I,EAAO8yI,SAAS,UACnB55H,KAAK+/H,aAGDj5I,EAAO8yI,SAAS,cAEhB9yI,EAAO8yI,SAAS,UACf9yI,EAAO8yI,SAAS,SAChB9yI,EAAO8yI,SAAS,WAChB9yI,EAAO8yI,SAAS,cACpB55H,KAAKu5H,SAAS4G,WAAW,GAEnB,EACgB,IAAlBngI,KAAKs7H,UACR2B,EAAQn2I,EAAO2J,SAASyH,KAAK,QAAQ7K,MAAMvG,GAC3Ck2I,EAAOh9H,KAAKu5H,SAASf,iBACrBx4H,KAAKu5H,SAASkM,YAAYxI,KAE1BA,EAAQ,EACRD,EAAO7oG,OAAOrtC,EAAOwrB,QACrBtS,KAAKu5H,SAAS0K,eAAejH,IAG9Bh9H,KAAKw+H,SAASzE,EAASsB,UAAUr7H,KAAKs7H,SAAW,GAAGnoG,EAAGnzB,KAAKu5H,UAExDv5H,KAAKs7H,WAAat7H,KAAKmyB,EAAE2pG,YAC5B97H,KAAKwlI,SAAS1N,EAAQkF,EAAMC,EAdvB,KAgBLj9H,KAAKg7H,YAAYh7H,KAAKs7H,SAAW,GACjCt7H,KAAK8hI,SAKJ9hI,KAAK85H,OAAOpjG,GAAG,aAAe12B,KAAK89H,eACtC99H,KAAK89H,cAAc37F,eAEbniC,KAAK89H,aACb,EAEAI,aAAc,SAAS/qG,GACtB,IACIuyG,EADU7N,EAAE1kG,EAAEwyG,eACMp5I,KAAK,QACzByxI,EAAO,IAAIv1E,KAAKi9E,GAEhB1lI,KAAKmyB,EAAE0vG,iBACN7D,EAAKxF,mBAAqBx4H,KAAKu5H,SAASf,kBAC3Cx4H,KAAKw+H,SAAS,aAAcx+H,KAAKu5H,UAG9ByE,EAAKvF,gBAAkBz4H,KAAKu5H,SAASd,eACxCz4H,KAAKw+H,SAAS,cAAex+H,KAAKu5H,WAGpCv5H,KAAKwlI,SAASxH,EACf,EAGAC,eAAgB,SAAS9qG,GACxB,IACIyyG,EADU/N,EAAE1kG,EAAEwyG,eACA/L,SAAS,SAAW,EAAI,EACpB,IAAlB55H,KAAKs7H,WACRsK,GAAmD,GAA5C7L,EAASsB,UAAUr7H,KAAKs7H,UAAUuK,SAE1C7lI,KAAKu5H,SAAWv5H,KAAK8lI,UAAU9lI,KAAKu5H,SAAUqM,GAC9C5lI,KAAKw+H,SAASzE,EAASsB,UAAUr7H,KAAKs7H,UAAUnoG,EAAGnzB,KAAKu5H,UACxDv5H,KAAK8hI,MACN,EAEAiE,kBAAmB,SAAS/H,GAC3B,IAAIY,EAAK5+H,KAAKs5H,MAAM9oI,SAASwtI,GAiB7B,GAhBKA,GACJh+H,KAAKs5H,MAAM98G,SAGA,IAARoiH,IACsB,IAArB5+H,KAAKmyB,EAAE6pG,WAAsBh8H,KAAKmyB,EAAE6pG,UAAY,GAAKh8H,KAAKmyB,EAAE6zG,eAC/DhmI,KAAKs5H,MAAMr0G,OAAO25G,IAEY,IAArB5+H,KAAKmyB,EAAE6pG,WACjBh8H,KAAKs5H,MAAM98G,QACXxc,KAAKs5H,MAAM1vI,KAAKo0I,IAGhBh+H,KAAKs5H,MAAM1vI,KAAKo0I,GAGe,iBAArBh+H,KAAKmyB,EAAE6pG,UACjB,KAAOh8H,KAAKs5H,MAAMnvI,OAAS6V,KAAKmyB,EAAE6pG,WACjCh8H,KAAKs5H,MAAMr0G,OAAO,EACrB,EAEAugH,SAAU,SAASxH,EAAM3iF,GACnBA,GAAmB,SAAVA,GACbr7C,KAAK+lI,kBAAkB/H,GAAQ,IAAIv1E,KAAKu1E,MACnC3iF,GAASr7C,KAAKmyB,EAAE0vG,gBAA6B,SAAVxmF,KACxCr7C,KAAKu5H,SAAWyE,GAAQ,IAAIv1E,KAAKu1E,IAElCh+H,KAAK8hI,OACL9hI,KAAKqE,WACAg3C,GAAmB,SAAVA,GACbr7C,KAAKw+H,SAAS,cAEfx+H,KAAK25H,WAAWl8E,QAAQ,WACpBz9C,KAAKmyB,EAAE6tG,WAAe3kF,GAAmB,SAAVA,GAClCr7C,KAAKo+H,MAEP,EAEA6H,QAAS,SAASjI,EAAM4H,GACvB,IAAIM,EAAU,IAAIz9E,KAAKu1E,GAGvB,OAFAkI,EAAQ/F,WAAWnC,EAAKtF,aAAekN,GAEhCM,CACR,EAEAC,SAAU,SAASnI,EAAM4H,GACxB,OAAO5lI,KAAKimI,QAAQjI,EAAY,EAAN4H,EAC3B,EAEAE,UAAW,SAAS9H,EAAM4H,GACzB,KAxvCmBl1G,EAwvCFstG,IAvvCL5pG,MAAM1D,EAAE+uG,WAwvCnB,OAAOz/H,KAAKmyB,EAAEqnG,gBAzvCjB,IAAqB9oG,EA0vCnB,IAAKk1G,EACJ,OAAO5H,EACR,IAICoI,EAAWzjJ,EAJR0jJ,EAAW,IAAI59E,KAAKu1E,EAAKjF,WAC5BmE,EAAMmJ,EAAS3N,aACfuE,EAAQoJ,EAAS5N,cACjB6N,EAAM3kJ,KAAKsE,IAAI2/I,GAGhB,GADAA,EAAMA,EAAM,EAAI,GAAK,EACT,IAARU,EACH3jJ,GAAgB,IAATijJ,EAGJ,WACD,OAAOS,EAAS5N,gBAAkBwE,CACnC,EAGE,WACD,OAAOoJ,EAAS5N,gBAAkB2N,CACnC,EACDA,EAAYnJ,EAAQ2I,EACpBS,EAASZ,YAAYW,GAErBA,GAAaA,EAAY,IAAM,OAE3B,CAEJ,IAAK,IAAI9uI,EAAE,EAAGA,EAAIgvI,EAAKhvI,IAEtB+uI,EAAWrmI,KAAK8lI,UAAUO,EAAUT,GAErCQ,EAAYC,EAAS5N,cACrB4N,EAASlG,WAAWjD,GACpBv6I,EAAO,WACN,OAAOyjJ,IAAcC,EAAS5N,aAC/B,CACD,CAGA,KAAO91I,KACN0jJ,EAASlG,aAAajD,GACtBmJ,EAASZ,YAAYW,GAEtB,OAAOC,CACR,EAEAE,SAAU,SAASvI,EAAM4H,GACxB,OAAO5lI,KAAK8lI,UAAU9H,EAAU,GAAJ4H,EAC7B,EAEAY,kBAAmB,SAASxI,EAAM4H,EAAK56I,GACtC,EAAG,CAGF,GAFAgzI,EAAOh+H,KAAKhV,GAAIgzI,EAAM4H,IAEjB5lI,KAAK4hI,gBAAgB5D,GACzB,OAAO,EAERhzI,EAAK,SACN,OACOgV,KAAKwiI,eAAexE,IAE3B,OAAOA,CACR,EAEA6F,qBAAsB,SAAS7F,GAC9B,OAAmE,IAA5DnG,EAAE0D,QAAQyC,EAAKyE,YAAaziI,KAAKmyB,EAAEyoG,mBAC3C,EAEA4H,eAAgB,SAASxE,GACxB,OACCh+H,KAAK6jI,qBAAqB7F,IAC1BnG,EAAEiF,KAAK98H,KAAKmyB,EAAE2oG,eAAe,SAASpqG,GACrC,OAAO2nG,EAAY2F,EAAMttG,EAC1B,IAAGvmC,OAAS,CAEd,EAEAy3I,gBAAiB,SAAS5D,GACzB,OAAOA,GAAQh+H,KAAKmyB,EAAEsoG,WAAauD,GAAQh+H,KAAKmyB,EAAEwoG,OACnD,EAEA+C,QAAS,SAASvqG,GACjB,GAAKnzB,KAAK85H,OAAOpjG,GAAG,YAApB,CAOA,IACCkvG,EAAKa,EADFC,GAAc,EAEjBjN,EAAYz5H,KAAKy5H,WAAaz5H,KAAKu5H,SACpC,OAAQpmG,EAAEsqG,SACT,KAAK,GACAz9H,KAAKy5H,WACRz5H,KAAKy5H,UAAY,KACjBz5H,KAAKu5H,SAAWv5H,KAAKs5H,MAAM3vI,KAAK,IAAMqW,KAAKu5H,SAC3Cv5H,KAAK8hI,QAGL9hI,KAAKo+H,OACNjrG,EAAE7E,iBACF6E,EAAEnW,kBACF,MACD,KAAK,GACL,KAAK,GACL,KAAK,GACL,KAAK,GACJ,IAAKhd,KAAKmyB,EAAEw0G,oBAA2D,IAArC3mI,KAAKmyB,EAAEyoG,mBAAmBzwI,OAC3D,MACDy7I,EAAoB,KAAdzyG,EAAEsqG,SAAgC,KAAdtqG,EAAEsqG,SAAkB,EAAI,EACvB,IAAlBz9H,KAAKs7H,SACRnoG,EAAE8nB,SACLwrF,EAAczmI,KAAKwmI,kBAAkB/M,EAAWmM,EAAK,cAGpD5lI,KAAKw+H,SAAS,aAAcx+H,KAAKu5H,UACxBpmG,EAAEgoB,UACZsrF,EAAczmI,KAAKwmI,kBAAkB/M,EAAWmM,EAAK,eAGpD5lI,KAAKw+H,SAAS,cAAex+H,KAAKu5H,UACX,KAAdpmG,EAAEsqG,SAAgC,KAAdtqG,EAAEsqG,QAChCgJ,EAAczmI,KAAKwmI,kBAAkB/M,EAAWmM,EAAK,WAC1C5lI,KAAK6jI,qBAAqBpK,KACrCgN,EAAczmI,KAAKwmI,kBAAkB/M,EAAWmM,EAAK,aAEtB,IAAlB5lI,KAAKs7H,UACI,KAAdnoG,EAAEsqG,SAAgC,KAAdtqG,EAAEsqG,UACxBmI,GAAY,GAEda,EAAczmI,KAAKwmI,kBAAkB/M,EAAWmM,EAAK,cAC1B,IAAlB5lI,KAAKs7H,WACI,KAAdnoG,EAAEsqG,SAAgC,KAAdtqG,EAAEsqG,UACxBmI,GAAY,GAEda,EAAczmI,KAAKwmI,kBAAkB/M,EAAWmM,EAAK,aAExDa,IACHzmI,KAAKy5H,UAAYz5H,KAAKu5H,SAAWkN,EACjCzmI,KAAKqE,WACLrE,KAAK8hI,OACL3uG,EAAE7E,kBAEH,MACD,KAAK,GACJ,IAAKtuB,KAAKmyB,EAAE+sG,WACX,MACDzF,EAAYz5H,KAAKy5H,WAAaz5H,KAAKs5H,MAAM3vI,KAAK,IAAMqW,KAAKu5H,SACrDv5H,KAAKmyB,EAAEw0G,qBACV3mI,KAAK+lI,kBAAkBtM,GACvBiN,GAAc,GAEf1mI,KAAKy5H,UAAY,KACjBz5H,KAAKu5H,SAAWv5H,KAAKs5H,MAAM3vI,KAAK,IAAMqW,KAAKu5H,SAC3Cv5H,KAAKqE,WACLrE,KAAK8hI,OACD9hI,KAAK85H,OAAOpjG,GAAG,cAClBvD,EAAE7E,iBACF6E,EAAEnW,kBACEhd,KAAKmyB,EAAE6tG,WACVhgI,KAAKo+H,QAEP,MACD,KAAK,EACJp+H,KAAKy5H,UAAY,KACjBz5H,KAAKu5H,SAAWv5H,KAAKs5H,MAAM3vI,KAAK,IAAMqW,KAAKu5H,SAC3Cv5H,KAAK8hI,OACL9hI,KAAKo+H,OAGHsI,IACC1mI,KAAKs5H,MAAMnvI,OACd6V,KAAKw+H,SAAS,cAEdx+H,KAAKw+H,SAAS,aACfx+H,KAAK25H,WAAWl8E,QAAQ,UAxFzB,MALmB,KAAdtqB,EAAEsqG,SAAgC,KAAdtqG,EAAEsqG,UACzBz9H,KAAKouE,OACLj7C,EAAEnW,kBA6FL,EAEAg+G,YAAa,SAASM,GACrBt7H,KAAKs7H,SAAWA,EAChBt7H,KAAK85H,OACH/uE,SAAS,OACTqzE,OACAx2I,OAAO,eAAiBmyI,EAASsB,UAAUr7H,KAAKs7H,UAAU6I,SACzD/1D,OACHpuE,KAAKwgI,kBACFxgI,KAAKw+H,SAAS,iBAAkB,IAAI/1E,KAAKzoD,KAAKu5H,UAClD,GAGD,IAAIqN,EAAkB,SAAS/jJ,EAASkI,GACvC8sI,EAAEtrI,KAAK1J,EAAS,aAAcmd,MAC9BA,KAAKnd,QAAUg1I,EAAEh1I,GACjBmd,KAAK6mI,OAAShP,EAAEz1I,IAAI2I,EAAQ87I,QAAQ,SAASvvI,GAC5C,OAAOA,EAAEwvI,OAASxvI,EAAE,GAAKA,CAC1B,WACOvM,EAAQ87I,OAEf7mI,KAAK+mI,gBAAkBh8I,EAAQg8I,uBACxBh8I,EAAQg8I,gBAEfC,EAAiBhpI,KAAK65H,EAAE73H,KAAK6mI,QAAS97I,GACpC0iH,GAAG,aAAcoqB,EAAE2F,MAAMx9H,KAAKinI,YAAajnI,OAE7CA,KAAKknI,QAAUrP,EAAEz1I,IAAI4d,KAAK6mI,QAAQ,SAASvvI,GAC1C,OAAOugI,EAAEtrI,KAAK+K,EAAG,aAClB,IACA0I,KAAKmnI,aACN,EACAP,EAAgBppI,UAAY,CAC3B2pI,YAAa,WACZnnI,KAAKs5H,MAAQzB,EAAEz1I,IAAI4d,KAAKknI,SAAS,SAAS5vI,GACzC,OAAOA,EAAEohI,YACV,IACA14H,KAAKonI,cACN,EACAA,aAAc,WACb,IAAIhiC,EAAQyyB,EAAEz1I,IAAI4d,KAAKs5H,OAAO,SAAS5oG,GACtC,OAAOA,EAAEqoG,SACV,IACAlB,EAAEhW,KAAK7hH,KAAKknI,SAAS,SAAS5vI,EAAGwkB,GAChCA,EAAEsmH,SAASh9B,EACZ,GACD,EACA26B,WAAY,WACXlI,EAAEhW,KAAK7hH,KAAKknI,SAAS,SAAS5vI,EAAGwkB,GAChCA,EAAEikH,YACH,GACD,EACAkH,YAAa,SAAS9zG,GAIrB,IAAInzB,KAAKqnI,SAAT,CAEArnI,KAAKqnI,UAAW,EAEhB,IAAIC,EAAKzP,EAAEtrI,KAAK4mC,EAAErsC,OAAQ,cAE1B,GAAIwgJ,IAAO15I,EAAX,CAIA,IAAIy4I,EAAWiB,EAAG5O,aACjB6O,EAAoBvnI,KAAK+mI,gBACzBzvI,EAAIugI,EAAE0D,QAAQpoG,EAAErsC,OAAQkZ,KAAK6mI,QAC7BnhI,EAAIpO,EAAI,EACRm5B,EAAIn5B,EAAI,EACR8yC,EAAIpqC,KAAK6mI,OAAO18I,OACjB,IAAW,IAAPmN,EAAJ,CAQA,GALAugI,EAAEhW,KAAK7hH,KAAKknI,SAAS,SAAS5vI,EAAGwkB,GAC3BA,EAAE48G,cAAiB58G,IAAMwrH,GAAOC,GACpCzrH,EAAEqkH,WAAWkG,EACf,IAEIA,EAAWrmI,KAAKs5H,MAAM5zH,GAEzB,KAAOA,GAAK,GAAK2gI,EAAWrmI,KAAKs5H,MAAM5zH,IACtC1F,KAAKknI,QAAQxhI,KAAKy6H,WAAWkG,QAExB,GAAIA,EAAWrmI,KAAKs5H,MAAM7oG,GAEhC,KAAOA,EAAI2Z,GAAKi8F,EAAWrmI,KAAKs5H,MAAM7oG,IACrCzwB,KAAKknI,QAAQz2G,KAAK0vG,WAAWkG,GAG/BrmI,KAAKmnI,qBAEEnnI,KAAKqnI,QApBL,CATP,CAPO,CAqCR,EACAx5I,QAAS,WACRgqI,EAAEz1I,IAAI4d,KAAKknI,SAAS,SAASprH,GAAIA,EAAEjuB,SAAW,IAC9CgqI,EAAE73H,KAAK6mI,QAAQn4B,IAAI,aAAc1uG,KAAKinI,oBAC/BjnI,KAAKnd,QAAQ0J,OAAOqsI,UAC5B,EACA3zG,OAAQ+X,EAAM,UAAW,4FAsC1B,IAAI93B,EAAM2yH,EAAE7sI,GAAG4tI,WACXoO,EAAmB,SAASljH,GAC/B,IAEI0jH,EAFAp9I,EAAOC,MAAM0d,MAAM,KAAM7d,WA8B7B,GA7BAE,EAAK8f,QAELlK,KAAK6hH,MAAK,WACT,IAAI3mG,EAAQ28G,EAAE73H,MACbzT,EAAO2uB,EAAM3uB,KAAK,cAClBxB,EAA4B,iBAAX+4B,GAAuBA,EACzC,IAAKv3B,EAAK,CACT,IAAIk7I,EA7CP,SAAsBlsF,EAAI7oC,GAEzB,IAAInmB,EAAOsrI,EAAEt8E,GAAIhvD,OAChBm7I,EAAM,CAAC,EACPr3I,EAAU,IAAIuhE,OAAO,IAAMl/C,EAAOjuB,cAAgB,WAEnD,SAASkjJ,EAAS9oI,EAAE9H,GACnB,OAAOA,EAAEtS,aACV,CACA,IAAK,IAAIgI,KAJTimB,EAAS,IAAIk/C,OAAO,IAAMl/C,EAAOjuB,eAIjB8H,EACXmmB,EAAO/vB,KAAK8J,KAEfi7I,EADQj7I,EAAI4D,QAAQA,EAASs3I,IAChBp7I,EAAKE,IAEpB,OAAOi7I,CACR,CA8BgBE,CAAa5nI,KAAM,QAG/B6nI,EA/BJ,SAA0BjM,GAEzB,IAAI8L,EAAM,CAAC,EAGX,GAAKpO,EAAMsC,KACVA,EAAOA,EAAK3tI,MAAM,KAAK,GAClBqrI,EAAMsC,IAFZ,CAKA,IAAIlrG,EAAI4oG,EAAMsC,GAKd,OAJA/D,EAAEhW,KAAKimB,GAAa,SAASxwI,EAAEm5B,GAC1BA,KAAKC,IACRg3G,EAAIj3G,GAAKC,EAAED,GACb,IACOi3G,CANP,CAOD,CAecK,CADFlQ,EAAEjhF,OAAO,CAAC,EAAGilF,EAAU4L,EAAQ18I,GACN+iD,UAEjC8uE,EAAOib,EAAEjhF,OAAO,CAAC,EAAGilF,EAAUgM,EAASJ,EAAQ18I,GAC5CmwB,EAAM0+G,SAAS,oBAAsBhd,EAAKiqB,QAC7ChP,EAAEjhF,OAAOgmE,EAAM,CACdiqB,OAAQjqB,EAAKiqB,QAAU3rH,EAAMhjB,KAAK,SAAS8vI,YAE5Cz7I,EAAO,IAAIq6I,EAAgB5mI,KAAM48G,IAGjCrwH,EAAO,IAAI2sI,EAAWl5H,KAAM48G,GAE7B1hG,EAAM3uB,KAAK,aAAcA,EAC1B,CACsB,iBAAXu3B,GAA+C,mBAAjBv3B,EAAKu3B,KAC7C0jH,EAAkBj7I,EAAKu3B,GAAQ/b,MAAMxb,EAAMnC,GAE7C,IAGCo9I,IAAoB55I,GACpB45I,aAA2BtO,GAC3BsO,aAA2BZ,EAE3B,OAAO5mI,KAER,GAAIA,KAAK7V,OAAS,EACjB,MAAM,IAAI6gB,MAAM,8DAAgE8Y,EAAS,cAEzF,OAAO0jH,CACT,EACA3P,EAAE7sI,GAAG4tI,WAAaoO,EAElB,IAAInL,EAAWhE,EAAE7sI,GAAG4tI,WAAWiD,SAAW,CACzCY,kBAAkB,EAClBuD,WAAW,EACXwE,cAAe3M,EAAEvpE,KACjBy2E,gBAAiBlN,EAAEvpE,KACnB42E,eAAgBrN,EAAEvpE,KAClB62E,iBAAkBtN,EAAEvpE,KACpB82E,kBAAmBvN,EAAEvpE,KACrBksE,eAAe,EACfsJ,UAAU,EACVkC,cAAc,EACdpL,mBAAoB,GACpBC,sBAAuB,GACvBC,cAAe,GACfH,QAAS+B,IACTwC,YAAY,EACZ9C,OAAQ,aACR2K,iBAAiB,EACjBJ,oBAAoB,EACpB74F,SAAU,KACVguF,YAAa,EACbC,YAAa,EACbC,WAAW,EACXC,mBAAoB,IACpBW,YAAa,OACbrC,KAAK,EACLE,WAAW,IACXQ,UAAW,EACX2I,UAAU,EACVrB,gBAAgB,EAChBV,gBAAgB,EAChB3F,UAAW,EACX8C,sBAAsB,EACtBF,kBAAkB,EAClBlB,aAAa,EACb4D,aAAc,GACd7zG,UAAW,OACXowG,kBAAkB,EAClBv0G,MAAO,GACPywG,UAAW,CACVC,UAAW,WACXC,WAAY,YAEX4H,cAAc,GAEb+F,EAAcjQ,EAAE7sI,GAAG4tI,WAAWkP,YAAc,CAC/C,SACA,MACA,aAEDjQ,EAAE7sI,GAAG4tI,WAAWv7H,YAAc67H,EAC9B,IAAII,EAAQzB,EAAE7sI,GAAG4tI,WAAWU,MAAQ,CACnC2O,GAAI,CACHC,KAAM,CAAC,SAAU,SAAU,UAAW,YAAa,WAAY,SAAU,YACzEC,UAAW,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OACtDlG,QAAS,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,MAC9C4C,OAAQ,CAAC,UAAW,WAAY,QAAS,QAAS,MAAO,OAAQ,OAAQ,SAAU,YAAa,UAAW,WAAY,YACvH1C,YAAa,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OAC3FlK,MAAO,QACPz7G,MAAO,QACPinH,YAAa,YAIX1J,EAAW,CACdsB,UAAW,CACV,CACCt2G,MAAO,CAAC,OAAQ,SAChBo/G,QAAS,OACThxG,EAAG,eAEJ,CACCpO,MAAO,CAAC,SAAU,QAClBo/G,QAAS,SACThxG,EAAG,aACH0yG,QAAS,GAEV,CACC9gH,MAAO,CAAC,QAAS,UACjBo/G,QAAS,QACThxG,EAAG,eACH0yG,QAAS,IAEV,CACC9gH,MAAO,CAAC,UAAW,WACnBo/G,QAAS,UACThxG,EAAG,gBACH0yG,QAAS,KAEV,CACC9gH,MAAO,CAAC,YAAa,cACrBo/G,QAAS,YACThxG,EAAG,mBACH0yG,QAAS,MAGXuC,WAAY,6BACZC,eAAgB,8CAChBhM,YAAa,SAASD,GACrB,GAA8B,mBAAnBA,EAAOkM,SAAsD,mBAArBlM,EAAOmM,UAC7C,OAAOnM,EAGpB,IAAIoM,EAAapM,EAAO/rI,QAAQ2P,KAAKooI,WAAY,MAAMn6I,MAAM,MAC5Dy6E,EAAQ0zD,EAAOxzF,MAAM5oC,KAAKooI,YAC3B,IAAKI,IAAeA,EAAWr+I,SAAWu+E,GAA0B,IAAjBA,EAAMv+E,OACxD,MAAM,IAAI6gB,MAAM,wBAEjB,MAAO,CAACw9H,WAAYA,EAAY9/D,MAAOA,EACxC,EACA8zD,UAAW,SAASwB,EAAM5B,EAAQtuF,EAAU26F,GAC3C,IAAKzK,EACJ,OAAOpwI,EACR,GAAIowI,aAAgBv1E,KACnB,OAAOu1E,EAGR,GAFsB,iBAAX5B,IACVA,EAASrC,EAASsC,YAAYD,IAC3BA,EAAOkM,QACV,OAAOlM,EAAOkM,QAAQtK,EAAM5B,EAAQtuF,GACrC,IAWC46B,EAAOpZ,EAAMs2E,EAAKtuI,EAAGtM,EAXlB09I,EAAS,CACXh4G,EAAG,UACHhkC,EAAG,YACHi8I,EAAG,WACH/kJ,EAAG,YAEJglJ,EAAc,CACbC,UAAW,MACX5Q,MAAO,MACP6Q,SAAU,OAMZ,GAHI9K,KAAQ4K,IACX5K,EAAO4K,EAAY5K,IAEhB,2CAA2Cr7I,KAAKq7I,GAAM,CAGzD,IAFAt1D,EAAQs1D,EAAKp1F,MAAM,wBACnBo1F,EAAO,IAAIv1E,KACNnxD,EAAE,EAAGA,EAAIoxE,EAAMv+E,OAAQmN,IAC3Bg4D,EAAOoZ,EAAMpxE,GAAGsxC,MAAM,uBACtBg9F,EAAMzxG,OAAOm7B,EAAK,IAClBtkE,EAAK09I,EAAOp5E,EAAK,GAAG7qE,eACpBu5I,EAAO9E,EAAW17H,UAAUxS,GAAIgzI,EAAM4H,GAEvC,OAAO1M,EAAW17H,UAAUmiI,eAAe3B,EAC5C,CAEAt1D,EAAQs1D,GAAQA,EAAKp1F,MAAM5oC,KAAKqoI,iBAAmB,GAkBnD,IAqBCn0H,EAAK60H,EArBFrrB,EAAS,CAAC,EACbsrB,EAAgB,CAAC,OAAQ,KAAM,IAAK,KAAM,IAAK,KAAM,IAAK,MAC1DC,EAAc,CACbC,KAAM,SAASx4G,EAAEh2B,GAChB,OAAOg2B,EAAEuzG,eAAewE,IAnBR,KADY5kF,EAoB8B4kF,KAlB3D5kF,EAAY,KAFWm5E,EAoBiCtiI,GAf9C,MACVsiI,GAAQ,MAEI,IAAKv0E,MAAQyvE,cAAcr0E,IACtCm5E,GAAQ,KAIHA,GAOqEtiI,GApB7E,IAAyBsiI,EAAMn5E,CAqB7B,EACAn3D,EAAG,SAASgkC,EAAEh2B,GACb,GAAI05B,MAAM1D,GACT,OAAOA,EAER,IADAh2B,GAAK,EACEA,EAAI,GAAGA,GAAK,GAGnB,IAFAA,GAAK,GACLg2B,EAAE+0G,YAAY/qI,GACPg2B,EAAE+nG,gBAAkB/9H,GAC1Bg2B,EAAEyvG,WAAWzvG,EAAEgoG,aAAa,GAC7B,OAAOhoG,CACR,EACAA,EAAG,SAASA,EAAEh2B,GACb,OAAOg2B,EAAEyvG,WAAWzlI,EACrB,GAGFuuI,EAAgB,GAAIA,EAAkB,KACtCA,EAAe,EAAIA,EAAgB,GAAIA,EAAgB,GAAIA,EAAe,EAC1EA,EAAgB,GAAIA,EAAe,EACnCjL,EAAOhG,IACP,IAAImR,EAAS/M,EAAO1zD,MAAMvwE,QAQ1B,SAASixI,IACR,IAAI18I,EAAIsT,KAAK7H,MAAM,EAAGuwE,EAAMpxE,GAAGnN,QAC9B2xB,EAAI4sD,EAAMpxE,GAAGa,MAAM,EAAGzL,EAAEvC,QACzB,OAAOuC,EAAEjI,gBAAkBq3B,EAAEr3B,aAC9B,CACA,GAXIikF,EAAMv+E,SAAWg/I,EAAOh/I,SAC3Bg/I,EAAStR,EAAEsR,GAAQvhJ,QAAO,SAAS0P,EAAEwkB,GACpC,OAAwC,IAAjC+7G,EAAE0D,QAAQz/G,EAAGktH,EACrB,IAAGhB,WAQAt/D,EAAMv+E,SAAWg/I,EAAOh/I,OAAO,CAClC,IAAIk/I,EAkBAC,EAAO5kI,EAjBX,IAAKpN,EAAE,EAAG+xI,EAAMF,EAAOh/I,OAAQmN,EAAI+xI,EAAK/xI,IAAI,CAG3C,GAFA4c,EAAM1F,SAASk6D,EAAMpxE,GAAI,IACzBg4D,EAAO65E,EAAO7xI,GACV88B,MAAMlgB,GACT,OAAQo7C,GACP,IAAK,KACJy5E,EAAWlR,EAAEyB,EAAMxrF,GAAU+2F,QAAQj9I,OAAOwhJ,GAC5Cl1H,EAAM2jH,EAAE0D,QAAQwN,EAAS,GAAIzP,EAAMxrF,GAAU+2F,QAAU,EACvD,MACD,IAAK,IACJkE,EAAWlR,EAAEyB,EAAMxrF,GAAUq0F,aAAav6I,OAAOwhJ,GACjDl1H,EAAM2jH,EAAE0D,QAAQwN,EAAS,GAAIzP,EAAMxrF,GAAUq0F,aAAe,EAI/DzkB,EAAOpuD,GAAQp7C,CAChB,CAEA,IAAK5c,EAAE,EAAGA,EAAI0xI,EAAc7+I,OAAQmN,KACnCoN,EAAIskI,EAAc1xI,MACTomH,IAAWtpF,MAAMspF,EAAOh5G,MAChC4kI,EAAQ,IAAI7gF,KAAKu1E,GACjBiL,EAAYvkI,GAAG4kI,EAAO5rB,EAAOh5G,IACxB0vB,MAAMk1G,KACVtL,EAAOsL,GAGX,CACA,OAAOtL,CACR,EACAa,WAAY,SAASb,EAAM5B,EAAQtuF,GAClC,IAAKkwF,EACJ,MAAO,GAGR,GAFsB,iBAAX5B,IACVA,EAASrC,EAASsC,YAAYD,IAC3BA,EAAOmM,UACE,OAAOnM,EAAOmM,UAAUvK,EAAM5B,EAAQtuF,GAC1C,IAAI55B,EAAM,CAClBwc,EAAGstG,EAAKtF,aACR6Q,EAAGjQ,EAAMxrF,GAAUq6F,UAAUnK,EAAKyE,aAClC+G,GAAIlQ,EAAMxrF,GAAUo6F,KAAKlK,EAAKyE,aAC9B/1I,EAAGsxI,EAAKvF,cAAgB,EACxBgR,EAAGnQ,EAAMxrF,GAAUq0F,YAAYnE,EAAKvF,eACpCiR,GAAIpQ,EAAMxrF,GAAU+2F,OAAO7G,EAAKvF,eAChCkR,GAAI3L,EAAKxF,iBAAiBt3I,WAAWusC,UAAU,GAC/Cy7G,KAAMlL,EAAKxF,kBAEZtkH,EAAI01H,IAAM11H,EAAIwc,EAAI,GAAK,IAAM,IAAMxc,EAAIwc,EACvCxc,EAAI21H,IAAM31H,EAAIxnB,EAAI,GAAK,IAAM,IAAMwnB,EAAIxnB,EACvCsxI,EAAO,GAEP,IADA,IAAI8L,EAAOjS,EAAEjhF,OAAO,GAAIwlF,EAAOoM,YACtBlxI,EAAE,EAAG+xI,EAAMjN,EAAO1zD,MAAMv+E,OAAQmN,GAAK+xI,EAAK/xI,IAC9CwyI,EAAK3/I,QACR6zI,EAAKp0I,KAAKkgJ,EAAK5/H,SAChB8zH,EAAKp0I,KAAKsqB,EAAIkoH,EAAO1zD,MAAMpxE,KAE5B,OAAO0mI,EAAKx7I,KAAK,GAClB,EACAunJ,aAAc,sFAKYlO,EAAS5B,UAAUC,UAL/B,wEAOY2B,EAAS5B,UAAUE,WAP/B,qBAUd6P,aAAc,gDACdC,aAAc,2GASflQ,EAASn6E,SAAW,uFAGZm6E,EAASgQ,aACT,kBACAhQ,EAASkQ,aALG,+EAUZlQ,EAASgQ,aACThQ,EAASiQ,aACTjQ,EAASkQ,aAZG,8EAiBZlQ,EAASgQ,aACThQ,EAASiQ,aACTjQ,EAASkQ,aAnBG,gFAwBZlQ,EAASgQ,aACThQ,EAASiQ,aACTjQ,EAASkQ,aA1BG,kFA+BZlQ,EAASgQ,aACThQ,EAASiQ,aACTjQ,EAASkQ,aAjCG,uBAsCpBpS,EAAE7sI,GAAG4tI,WAAWmB,SAAWA,EAM3BlC,EAAE7sI,GAAG4tI,WAAWtmB,WAAa,WAE5B,OADAulB,EAAE7sI,GAAG4tI,WAAa1zH,EACXlF,IACR,EAIA63H,EAAE7sI,GAAG4tI,WAAWr2I,QAAU,QAE1Bs1I,EAAE7sI,GAAG4tI,WAAW7X,WAAa,SAASP,GACrC,IAAI/2G,EAAUxoB,OAAOwoB,QACjBA,GAAWA,EAAQY,MACtBZ,EAAQY,KAAK,eAAiBm2G,EAEhC,EAMAqX,EAAElzI,UAAU8oH,GACX,sDACA,+BACA,SAASt6E,GACR,IAAIjY,EAAQ28G,EAAE73H,MACVkb,EAAM3uB,KAAK,gBAEf4mC,EAAE7E,iBAEF04G,EAAiBhpI,KAAKkd,EAAO,QAC9B,IAED28G,GAAE,WACDmP,EAAiBhpI,KAAK65H,EAAE,sCACzB,GAED,GA9+DkC,uDCRnB7sI,GAAG4tI,WAAWU,MAAM4Q,GAAG,CAAChC,KAAK,CAAC,UAAU,SAAS,WAAW,WAAW,aAAa,UAAU,WAAWC,UAAU,CAAC,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,OAAOlG,QAAQ,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,MAAM4C,OAAO,CAAC,SAAS,UAAU,OAAO,QAAQ,MAAM,OAAO,OAAO,SAAS,YAAY,UAAU,WAAW,YAAY1C,YAAY,CAAC,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,OAAOlK,MAAM,QAAQ2M,YAAY,SAASpoH,MAAM,UAAU0/G,UAAU,EAAEE,OAAO,sCCA5dpxI,GAAG4tI,WAAWU,MAAM6Q,GAAG,CAACjC,KAAK,CAAC,WAAW,QAAQ,OAAO,SAAS,YAAY,SAAS,WAAWC,UAAU,CAAC,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,OAAOlG,QAAQ,CAAC,IAAI,IAAI,IAAI,MAAM,KAAK,IAAI,OAAO4C,OAAO,CAAC,SAAS,UAAU,UAAU,UAAU,QAAQ,SAAS,SAAS,YAAY,aAAa,UAAU,WAAW,YAAY1C,YAAY,CAAC,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,OAAOlK,MAAM,KAAKiE,UAAU,EAAE1/G,MAAM,QAAQinH,YAAY,WAAWrH,OAAO,2CCE7e,IAAIgO,EAAe,EAAQ,KAEvBC,EAAW,EAAQ,MAEnBC,EAAWD,EAASD,EAAa,6BAErCppF,EAAOP,QAAU,SAA4Br3D,EAAMmhJ,GAClD,IAAIC,EAAYJ,EAAahhJ,IAAQmhJ,GACrC,MAAyB,mBAAdC,GAA4BF,EAASlhJ,EAAM,gBAAkB,EAChEihJ,EAASG,GAEVA,CACR,+BCZA,IAAI9+H,EAAO,EAAQ,MACf0+H,EAAe,EAAQ,KAEvBK,EAASL,EAAa,8BACtBM,EAAQN,EAAa,6BACrBO,EAAgBP,EAAa,mBAAmB,IAAS1+H,EAAK1N,KAAK0sI,EAAOD,GAE1EG,EAAQR,EAAa,qCAAqC,GAC1Dx3G,EAAkBw3G,EAAa,2BAA2B,GAC1DS,EAAOT,EAAa,cAExB,GAAIx3G,EACH,IACCA,EAAgB,CAAC,EAAG,IAAK,CAAE5gC,MAAO,GACnC,CAAE,MAAOmhC,GAERP,EAAkB,IACnB,CAGDouB,EAAOP,QAAU,SAAkBqqF,GAClC,IAAI/7H,EAAO47H,EAAcj/H,EAAMg/H,EAAOxgJ,WAYtC,OAXI0gJ,GAASh4G,GACDg4G,EAAM77H,EAAM,UACd7R,cAER01B,EACC7jB,EACA,SACA,CAAE/c,MAAO,EAAI64I,EAAK,EAAGC,EAAiB3gJ,QAAUD,UAAUC,OAAS,MAI/D4kB,CACR,EAEA,IAAIg8H,EAAY,WACf,OAAOJ,EAAcj/H,EAAM++H,EAAQvgJ,UACpC,EAEI0oC,EACHA,EAAgBouB,EAAOP,QAAS,QAAS,CAAEzuD,MAAO+4I,IAElD/pF,EAAOP,QAAQ14C,MAAQgjI,kBC7CxB,EAAQ,MACR,IAAIhuH,EAAO,EAAQ,KAEnBikC,EAAOP,QAAU1jC,EAAK3xB,OAAO+d,wBCH7B,EAAQ,KACR,IAAI4T,EAAO,EAAQ,KAEnBikC,EAAOP,QAAU1jC,EAAK3xB,OAAO81C,+BCH7B,IAAI8pG,EAAa,EAAQ,KACrBC,EAAc,EAAQ,MAEtBC,EAAa7sI,UAGjB2iD,EAAOP,QAAU,SAAU0qF,GACzB,GAAIH,EAAWG,GAAW,OAAOA,EACjC,MAAMD,EAAWD,EAAYE,GAAY,qBAC3C,kBCTA,IAAInmF,EAAW,EAAQ,KAEnBomF,EAAU75H,OACV25H,EAAa7sI,UAGjB2iD,EAAOP,QAAU,SAAU0qF,GACzB,GAAInmF,EAASmmF,GAAW,OAAOA,EAC/B,MAAMD,EAAWE,EAAQD,GAAY,oBACvC,kBCTA,IAAIE,EAAkB,EAAQ,MAC1BC,EAAkB,EAAQ,MAC1BC,EAAoB,EAAQ,MAG5BvjF,EAAe,SAAUwjF,GAC3B,OAAO,SAAUtwH,EAAOqgC,EAAIkwF,GAC1B,IAGIz5I,EAHA2+B,EAAI06G,EAAgBnwH,GACpB/wB,EAASohJ,EAAkB56G,GAC3BtjC,EAAQi+I,EAAgBG,EAAWthJ,GAIvC,GAAIqhJ,GAAejwF,GAAMA,GAAI,KAAOpxD,EAASkD,GAG3C,IAFA2E,EAAQ2+B,EAAEtjC,OAEG2E,EAAO,OAAO,OAEtB,KAAM7H,EAASkD,EAAOA,IAC3B,IAAKm+I,GAAen+I,KAASsjC,IAAMA,EAAEtjC,KAAWkuD,EAAI,OAAOiwF,GAAen+I,GAAS,EACnF,OAAQm+I,IAAgB,CAC5B,CACF,EAEAxqF,EAAOP,QAAU,CAGf7qB,SAAUoyB,GAAa,GAGvBzhE,QAASyhE,GAAa,oBC9BxB,IAAI0jF,EAAc,EAAQ,MAEtBxqJ,EAAWwqJ,EAAY,CAAC,EAAExqJ,UAC1ByqJ,EAAcD,EAAY,GAAGvzI,OAEjC6oD,EAAOP,QAAU,SAAU7rB,GACzB,OAAO+2G,EAAYzqJ,EAAS0zC,GAAK,GAAI,EACvC,kBCPA,IAAIg3G,EAAS,EAAQ,MACjBnzG,EAAU,EAAQ,MAClBozG,EAAiC,EAAQ,MACzCC,EAAuB,EAAQ,MAEnC9qF,EAAOP,QAAU,SAAU35D,EAAQ+lC,EAAQk/G,GAIzC,IAHA,IAAIv/I,EAAOisC,EAAQ5L,GACfzvB,EAAiB0uI,EAAqB9qG,EACtCtN,EAA2Bm4G,EAA+B7qG,EACrD1pC,EAAI,EAAGA,EAAI9K,EAAKrC,OAAQmN,IAAK,CACpC,IAAI7K,EAAMD,EAAK8K,GACVs0I,EAAO9kJ,EAAQ2F,IAAUs/I,GAAcH,EAAOG,EAAYt/I,IAC7D2Q,EAAetW,EAAQ2F,EAAKinC,EAAyB7G,EAAQpgC,GAEjE,CACF,kBCfA,IAAIu/I,EAAQ,EAAQ,MAEpBhrF,EAAOP,SAAWurF,GAAM,WACtB,SAASC,IAAkB,CAG3B,OAFAA,EAAEzuI,UAAUK,YAAc,KAEnBzS,OAAO81C,eAAe,IAAI+qG,KAASA,EAAEzuI,SAC9C,oBCPA,IAAI0uI,EAAc,EAAQ,MACtBJ,EAAuB,EAAQ,MAC/BK,EAA2B,EAAQ,MAEvCnrF,EAAOP,QAAUyrF,EAAc,SAAUrjI,EAAQpc,EAAKuF,GACpD,OAAO85I,EAAqB9qG,EAAEn4B,EAAQpc,EAAK0/I,EAAyB,EAAGn6I,GACzE,EAAI,SAAU6W,EAAQpc,EAAKuF,GAEzB,OADA6W,EAAOpc,GAAOuF,EACP6W,CACT,YCTAm4C,EAAOP,QAAU,SAAU2rF,EAAQp6I,GACjC,MAAO,CACLiL,aAAuB,EAATmvI,GACdlvI,eAAyB,EAATkvI,GAChBjvI,WAAqB,EAATivI,GACZp6I,MAAOA,EAEX,kBCPA,IAAIg5I,EAAa,EAAQ,KACrBc,EAAuB,EAAQ,MAC/BO,EAAc,EAAQ,MACtBC,EAAuB,EAAQ,MAEnCtrF,EAAOP,QAAU,SAAU9vB,EAAGlkC,EAAKuF,EAAOjH,GACnCA,IAASA,EAAU,CAAC,GACzB,IAAIwhJ,EAASxhJ,EAAQkS,WACjB7T,OAAwBwE,IAAjB7C,EAAQ3B,KAAqB2B,EAAQ3B,KAAOqD,EAEvD,GADIu+I,EAAWh5I,IAAQq6I,EAAYr6I,EAAO5I,EAAM2B,GAC5CA,EAAQ4rC,OACN41G,EAAQ57G,EAAElkC,GAAOuF,EAChBs6I,EAAqB7/I,EAAKuF,OAC1B,CACL,IACOjH,EAAQyhJ,OACJ77G,EAAElkC,KAAM8/I,GAAS,UADE57G,EAAElkC,EAEhC,CAAE,MAAOid,GAAqB,CAC1B6iI,EAAQ57G,EAAElkC,GAAOuF,EAChB85I,EAAqB9qG,EAAErQ,EAAGlkC,EAAK,CAClCuF,MAAOA,EACPiL,YAAY,EACZC,cAAenS,EAAQ0hJ,gBACvBtvI,UAAWpS,EAAQ2hJ,aAEvB,CAAE,OAAO/7G,CACX,kBC1BA,IAAIgG,EAAS,EAAQ,MAGjBv5B,EAAiBhS,OAAOgS,eAE5B4jD,EAAOP,QAAU,SAAUh0D,EAAKuF,GAC9B,IACEoL,EAAeu5B,EAAQlqC,EAAK,CAAEuF,MAAOA,EAAOkL,cAAc,EAAMC,UAAU,GAC5E,CAAE,MAAOuM,GACPitB,EAAOlqC,GAAOuF,CAChB,CAAE,OAAOA,CACX,kBCXA,IAAIg6I,EAAQ,EAAQ,MAGpBhrF,EAAOP,SAAWurF,GAAM,WAEtB,OAA8E,GAAvE5gJ,OAAOgS,eAAe,CAAC,EAAG,EAAG,CAAEzT,IAAK,WAAc,OAAO,CAAG,IAAK,EAC1E,cCNA,IAAIgjJ,EAAiC,iBAAZhoJ,UAAwBA,SAASic,IAItDgsI,OAAmC,IAAfD,QAA8C/+I,IAAhB++I,EAEtD3rF,EAAOP,QAAU,CACf7/C,IAAK+rI,EACLC,WAAYA,kBCRd,IAAIj2G,EAAS,EAAQ,MACjBquB,EAAW,EAAQ,KAEnBrgE,EAAWgyC,EAAOhyC,SAElBkoJ,EAAS7nF,EAASrgE,IAAaqgE,EAASrgE,EAAS8pD,eAErDuS,EAAOP,QAAU,SAAU7rB,GACzB,OAAOi4G,EAASloJ,EAAS8pD,cAAc7Z,GAAM,CAAC,CAChD,YCTAosB,EAAOP,QAA8B,oBAAbx+D,WAA4BsvB,OAAOtvB,UAAUQ,YAAc,mBCAnF,IAOImmD,EAAOrmD,EAPPo0C,EAAS,EAAQ,MACjBl0C,EAAY,EAAQ,MAEpB+2C,EAAU7C,EAAO6C,QACjBszG,EAAOn2G,EAAOm2G,KACdhyG,EAAWtB,GAAWA,EAAQsB,UAAYgyG,GAAQA,EAAKvqJ,QACvDwqJ,EAAKjyG,GAAYA,EAASiyG,GAG1BA,IAIFxqJ,GAHAqmD,EAAQmkG,EAAG9+I,MAAM,MAGD,GAAK,GAAK26C,EAAM,GAAK,EAAI,IAAMA,EAAM,GAAKA,EAAM,MAK7DrmD,GAAWE,MACdmmD,EAAQnmD,EAAUmmD,MAAM,iBACVA,EAAM,IAAM,MACxBA,EAAQnmD,EAAUmmD,MAAM,oBACbrmD,GAAWqmD,EAAM,IAIhCoY,EAAOP,QAAUl+D,WCzBjBy+D,EAAOP,QAAU,CACf,cACA,iBACA,gBACA,uBACA,iBACA,WACA,2BCRF,IAAI9pB,EAAS,EAAQ,MACjBjD,EAA2B,UAC3Bs5G,EAA8B,EAAQ,MACtCC,EAAgB,EAAQ,MACxBX,EAAuB,EAAQ,MAC/BY,EAA4B,EAAQ,MACpCC,EAAW,EAAQ,MAiBvBnsF,EAAOP,QAAU,SAAU11D,EAAS8hC,GAClC,IAGY/lC,EAAQ2F,EAAK0/B,EAAgBihH,EAAgBpwI,EAHrDqwI,EAAStiJ,EAAQjE,OACjBwmJ,EAASviJ,EAAQ4rC,OACjB42G,EAASxiJ,EAAQyiJ,KASrB,GANE1mJ,EADEwmJ,EACO32G,EACA42G,EACA52G,EAAO02G,IAAWf,EAAqBe,EAAQ,CAAC,IAE/C12G,EAAO02G,IAAW,CAAC,GAAG7vI,UAEtB,IAAK/Q,KAAOogC,EAAQ,CAQ9B,GAPAugH,EAAiBvgH,EAAOpgC,GAGtB0/B,EAFEphC,EAAQ0iJ,gBACVzwI,EAAa02B,EAAyB5sC,EAAQ2F,KACfuQ,EAAWhL,MACpBlL,EAAO2F,IACtB0gJ,EAASG,EAAS7gJ,EAAM4gJ,GAAUE,EAAS,IAAM,KAAO9gJ,EAAK1B,EAAQ2iJ,cAE5C9/I,IAAnBu+B,EAA8B,CAC3C,UAAWihH,UAAyBjhH,EAAgB,SACpD+gH,EAA0BE,EAAgBjhH,EAC5C,EAEIphC,EAAQ4iJ,MAASxhH,GAAkBA,EAAewhH,OACpDX,EAA4BI,EAAgB,QAAQ,GAEtDH,EAAcnmJ,EAAQ2F,EAAK2gJ,EAAgBriJ,EAC7C,CACF,YCrDAi2D,EAAOP,QAAU,SAAUn+B,GACzB,IACE,QAASA,GACX,CAAE,MAAO5Y,GACP,OAAO,CACT,CACF,kBCNA,IAAIsiI,EAAQ,EAAQ,MAEpBhrF,EAAOP,SAAWurF,GAAM,WAEtB,IAAIrpJ,EAAO,WAA4B,EAAE+oB,OAEzC,MAAsB,mBAAR/oB,GAAsBA,EAAK4M,eAAe,YAC1D,oBCPA,IAAIq+I,EAAc,EAAQ,MAEtB5vI,EAAOuG,SAAS/G,UAAUQ,KAE9BgjD,EAAOP,QAAUmtF,EAAc5vI,EAAK0N,KAAK1N,GAAQ,WAC/C,OAAOA,EAAK+J,MAAM/J,EAAM9T,UAC1B,kBCNA,IAAIgiJ,EAAc,EAAQ,MACtBN,EAAS,EAAQ,MAEjBiC,EAAoBtpI,SAAS/G,UAE7BylH,EAAgBipB,GAAe9gJ,OAAOsoC,yBAEtCm5G,EAASjB,EAAOiC,EAAmB,QAEnCC,EAASjB,GAA0D,cAAhD,WAAqC,EAAEzjJ,KAC1D2kJ,EAAelB,KAAYX,GAAgBA,GAAejpB,EAAc4qB,EAAmB,QAAQ3wI,cAEvG8jD,EAAOP,QAAU,CACfosF,OAAQA,EACRiB,OAAQA,EACRC,aAAcA,mBCfhB,IAAIH,EAAc,EAAQ,MAEtBC,EAAoBtpI,SAAS/G,UAC7BQ,EAAO6vI,EAAkB7vI,KACzBgwI,EAAsBJ,GAAeC,EAAkBniI,KAAKA,KAAK1N,EAAMA,GAE3EgjD,EAAOP,QAAUmtF,EAAcI,EAAsB,SAAUhjJ,GAC7D,OAAO,WACL,OAAOgT,EAAK+J,MAAM/c,EAAId,UACxB,CACF,kBCVA,IAAIysC,EAAS,EAAQ,MACjBq0G,EAAa,EAAQ,KAMzBhqF,EAAOP,QAAU,SAAUwtF,EAAWlhH,GACpC,OAAO7iC,UAAUC,OAAS,GALFghJ,EAKgBx0G,EAAOs3G,GAJxCjD,EAAWG,GAAYA,OAAWv9I,GAIoB+oC,EAAOs3G,IAAct3G,EAAOs3G,GAAWlhH,GALtF,IAAUo+G,CAM1B,kBCTA,IAAI+C,EAAY,EAAQ,MACpBC,EAAoB,EAAQ,MAIhCntF,EAAOP,QAAU,SAAU2tF,EAAGpvF,GAC5B,IAAIjwC,EAAOq/H,EAAEpvF,GACb,OAAOmvF,EAAkBp/H,QAAQnhB,EAAYsgJ,EAAUn/H,EACzD,kBCRA,IAAIjX,EAAQ,SAAU88B,GACpB,OAAOA,GAAMA,EAAGjzC,MAAQA,MAAQizC,CAClC,EAGAosB,EAAOP,QAEL3oD,EAA2B,iBAAdu2I,YAA0BA,aACvCv2I,EAAuB,iBAAV7W,QAAsBA,SAEnC6W,EAAqB,iBAARiG,MAAoBA,OACjCjG,EAAuB,iBAAV,EAAAswB,GAAsB,EAAAA,IAEnC,WAAe,OAAOpoB,IAAO,CAA7B,IAAoCuE,SAAS,cAATA,mBCbtC,IAAImnI,EAAc,EAAQ,MACtB4C,EAAW,EAAQ,MAEnB/+I,EAAiBm8I,EAAY,CAAC,EAAEn8I,gBAKpCyxD,EAAOP,QAAUr1D,OAAOwgJ,QAAU,SAAgBh3G,EAAInoC,GACpD,OAAO8C,EAAe++I,EAAS15G,GAAKnoC,EACtC,YCVAu0D,EAAOP,QAAU,CAAC,kBCAlB,IAAIyrF,EAAc,EAAQ,MACtBF,EAAQ,EAAQ,MAChBv9F,EAAgB,EAAQ,KAG5BuS,EAAOP,SAAWyrF,IAAgBF,GAAM,WAEtC,OAEQ,GAFD5gJ,OAAOgS,eAAeqxC,EAAc,OAAQ,IAAK,CACtD9kD,IAAK,WAAc,OAAO,CAAG,IAC5BoN,CACL,oBCVA,IAAI20I,EAAc,EAAQ,MACtBM,EAAQ,EAAQ,MAChBuC,EAAU,EAAQ,MAElBC,EAAUpjJ,OACV6C,EAAQy9I,EAAY,GAAGz9I,OAG3B+yD,EAAOP,QAAUurF,GAAM,WAGrB,OAAQwC,EAAQ,KAAKjtH,qBAAqB,EAC5C,IAAK,SAAUqT,GACb,MAAsB,UAAf25G,EAAQ35G,GAAkB3mC,EAAM2mC,EAAI,IAAM45G,EAAQ55G,EAC3D,EAAI45G,kBCdJ,IAAI9C,EAAc,EAAQ,MACtBV,EAAa,EAAQ,KACrByD,EAAQ,EAAQ,MAEhBC,EAAmBhD,EAAYnnI,SAASrjB,UAGvC8pJ,EAAWyD,EAAME,iBACpBF,EAAME,cAAgB,SAAU/5G,GAC9B,OAAO85G,EAAiB95G,EAC1B,GAGFosB,EAAOP,QAAUguF,EAAME,8BCbvB,IAYI9kJ,EAAKF,EAAKF,EAZVmlJ,EAAkB,EAAQ,MAC1Bj4G,EAAS,EAAQ,MACjBquB,EAAW,EAAQ,KACnBgoF,EAA8B,EAAQ,MACtCpB,EAAS,EAAQ,MACjBiD,EAAS,EAAQ,MACjBC,EAAY,EAAQ,MACpBC,EAAa,EAAQ,MAErBC,EAA6B,6BAC7B3wI,EAAYs4B,EAAOt4B,UACnB+5B,EAAUzB,EAAOyB,QAgBrB,GAAIw2G,GAAmBC,EAAO3jJ,MAAO,CACnC,IAAIujJ,EAAQI,EAAO3jJ,QAAU2jJ,EAAO3jJ,MAAQ,IAAIktC,GAEhDq2G,EAAM9kJ,IAAM8kJ,EAAM9kJ,IAClB8kJ,EAAMhlJ,IAAMglJ,EAAMhlJ,IAClBglJ,EAAM5kJ,IAAM4kJ,EAAM5kJ,IAElBA,EAAM,SAAU+qC,EAAIhM,GAClB,GAAI6lH,EAAMhlJ,IAAImrC,GAAK,MAAMv2B,EAAU2wI,GAGnC,OAFApmH,EAASqmH,OAASr6G,EAClB65G,EAAM5kJ,IAAI+qC,EAAIhM,GACPA,CACT,EACAj/B,EAAM,SAAUirC,GACd,OAAO65G,EAAM9kJ,IAAIirC,IAAO,CAAC,CAC3B,EACAnrC,EAAM,SAAUmrC,GACd,OAAO65G,EAAMhlJ,IAAImrC,EACnB,CACF,KAAO,CACL,IAAIs6G,EAAQJ,EAAU,SACtBC,EAAWG,IAAS,EACpBrlJ,EAAM,SAAU+qC,EAAIhM,GAClB,GAAIgjH,EAAOh3G,EAAIs6G,GAAQ,MAAM7wI,EAAU2wI,GAGvC,OAFApmH,EAASqmH,OAASr6G,EAClBo4G,EAA4Bp4G,EAAIs6G,EAAOtmH,GAChCA,CACT,EACAj/B,EAAM,SAAUirC,GACd,OAAOg3G,EAAOh3G,EAAIs6G,GAASt6G,EAAGs6G,GAAS,CAAC,CAC1C,EACAzlJ,EAAM,SAAUmrC,GACd,OAAOg3G,EAAOh3G,EAAIs6G,EACpB,CACF,CAEAluF,EAAOP,QAAU,CACf52D,IAAKA,EACLF,IAAKA,EACLF,IAAKA,EACL0lJ,QArDY,SAAUv6G,GACtB,OAAOnrC,EAAImrC,GAAMjrC,EAAIirC,GAAM/qC,EAAI+qC,EAAI,CAAC,EACtC,EAoDEw6G,UAlDc,SAAUC,GACxB,OAAO,SAAUz6G,GACf,IAAI1pC,EACJ,IAAK85D,EAASpwB,KAAQ1pC,EAAQvB,EAAIirC,IAAKjsB,OAAS0mI,EAC9C,MAAMhxI,EAAU,0BAA4BgxI,EAAO,aACnD,OAAOnkJ,CACX,CACF,kBCzBA,IAAIokJ,EAAe,EAAQ,MAEvB3C,EAAc2C,EAAa1uI,IAI/BogD,EAAOP,QAAU6uF,EAAa1C,WAAa,SAAUzB,GACnD,MAA0B,mBAAZA,GAA0BA,IAAawB,CACvD,EAAI,SAAUxB,GACZ,MAA0B,mBAAZA,CAChB,kBCVA,IAAIa,EAAQ,EAAQ,MAChBhB,EAAa,EAAQ,KAErBhqB,EAAc,kBAEdmsB,EAAW,SAAU1iG,EAAS8kG,GAChC,IAAIv9I,EAAQzF,EAAKouC,EAAU8P,IAC3B,OAAOz4C,GAASw9I,GACZx9I,GAASy9I,IACTzE,EAAWuE,GAAavD,EAAMuD,KAC5BA,EACR,EAEI50G,EAAYwyG,EAASxyG,UAAY,SAAUm3B,GAC7C,OAAOvgD,OAAOugD,GAAQzhE,QAAQ2wH,EAAa,KAAKv8H,aAClD,EAEI8H,EAAO4gJ,EAAS5gJ,KAAO,CAAC,EACxBkjJ,EAAStC,EAASsC,OAAS,IAC3BD,EAAWrC,EAASqC,SAAW,IAEnCxuF,EAAOP,QAAU0sF,YCnBjBnsF,EAAOP,QAAU,SAAU7rB,GACzB,OAAOA,OACT,iBCJA,IAAIo2G,EAAa,EAAQ,KACrBsE,EAAe,EAAQ,MAEvB3C,EAAc2C,EAAa1uI,IAE/BogD,EAAOP,QAAU6uF,EAAa1C,WAAa,SAAUh4G,GACnD,MAAoB,iBAANA,EAAwB,OAAPA,EAAco2G,EAAWp2G,IAAOA,IAAO+3G,CACxE,EAAI,SAAU/3G,GACZ,MAAoB,iBAANA,EAAwB,OAAPA,EAAco2G,EAAWp2G,EAC1D,YCTAosB,EAAOP,SAAU,kBCAjB,IAAIivF,EAAa,EAAQ,MACrB1E,EAAa,EAAQ,KACrB2E,EAAgB,EAAQ,MACxBC,EAAoB,EAAQ,MAE5BpB,EAAUpjJ,OAEd41D,EAAOP,QAAUmvF,EAAoB,SAAUh7G,GAC7C,MAAoB,iBAANA,CAChB,EAAI,SAAUA,GACZ,IAAIi7G,EAAUH,EAAW,UACzB,OAAO1E,EAAW6E,IAAYF,EAAcE,EAAQryI,UAAWgxI,EAAQ55G,GACzE,kBCZA,IAAI7D,EAAW,EAAQ,MAIvBiwB,EAAOP,QAAU,SAAU7iD,GACzB,OAAOmzB,EAASnzB,EAAIzT,OACtB,kBCNA,IAAIuhJ,EAAc,EAAQ,MACtBM,EAAQ,EAAQ,MAChBhB,EAAa,EAAQ,KACrBY,EAAS,EAAQ,MACjBM,EAAc,EAAQ,MACtB4D,EAA6B,qBAC7BnB,EAAgB,EAAQ,MACxBoB,EAAsB,EAAQ,MAE9BC,EAAuBD,EAAoBZ,QAC3Cc,EAAmBF,EAAoBpmJ,IACvCyhJ,EAAU75H,OAEVnU,EAAiBhS,OAAOgS,eACxBuuI,EAAcD,EAAY,GAAGvzI,OAC7B9H,EAAUq7I,EAAY,GAAGr7I,SACzB7N,EAAOkpJ,EAAY,GAAGlpJ,MAEtB0tJ,EAAsBhE,IAAgBF,GAAM,WAC9C,OAAsF,IAA/E5uI,GAAe,WAA0B,GAAG,SAAU,CAAEpL,MAAO,IAAK7H,MAC7E,IAEIgmJ,EAAW5+H,OAAOA,QAAQtjB,MAAM,UAEhCo+I,EAAcrrF,EAAOP,QAAU,SAAUzuD,EAAO5I,EAAM2B,GACf,YAArC4gJ,EAAYP,EAAQhiJ,GAAO,EAAG,KAChCA,EAAO,IAAMiH,EAAQ+6I,EAAQhiJ,GAAO,qBAAsB,MAAQ,KAEhE2B,GAAWA,EAAQooH,SAAQ/pH,EAAO,OAASA,GAC3C2B,GAAWA,EAAQqlJ,SAAQhnJ,EAAO,OAASA,KAC1CwiJ,EAAO55I,EAAO,SAAY89I,GAA8B99I,EAAM5I,OAASA,KACtE8iJ,EAAa9uI,EAAepL,EAAO,OAAQ,CAAEA,MAAO5I,EAAM8T,cAAc,IACvElL,EAAM5I,KAAOA,GAEhB8mJ,GAAuBnlJ,GAAW6gJ,EAAO7gJ,EAAS,UAAYiH,EAAM7H,SAAWY,EAAQslJ,OACzFjzI,EAAepL,EAAO,SAAU,CAAEA,MAAOjH,EAAQslJ,QAEnD,IACMtlJ,GAAW6gJ,EAAO7gJ,EAAS,gBAAkBA,EAAQ8S,YACnDquI,GAAa9uI,EAAepL,EAAO,YAAa,CAAEmL,UAAU,IAEvDnL,EAAMwL,YAAWxL,EAAMwL,eAAY5P,EAChD,CAAE,MAAO8b,GAAqB,CAC9B,IAAIxe,EAAQ8kJ,EAAqBh+I,GAG/B,OAFG45I,EAAO1gJ,EAAO,YACjBA,EAAM2hC,OAASrqC,EAAK2tJ,EAAyB,iBAAR/mJ,EAAmBA,EAAO,KACxD4I,CACX,EAIAuS,SAAS/G,UAAUtc,SAAWmrJ,GAAY,WACxC,OAAOrB,EAAWhrI,OAASiwI,EAAiBjwI,MAAM6sB,QAAU8hH,EAAc3uI,KAC5E,GAAG,sBCrDH,IAAI60B,EAAOlzC,KAAKkzC,KACZL,EAAQ7yC,KAAK6yC,MAKjBwsB,EAAOP,QAAU9+D,KAAK2uJ,OAAS,SAAe7sJ,GAC5C,IAAIsyC,GAAKtyC,EACT,OAAQsyC,EAAI,EAAIvB,EAAQK,GAAMkB,EAChC,kBCTA,IAAIm2G,EAAc,EAAQ,MACtBqE,EAAiB,EAAQ,MACzBC,EAA0B,EAAQ,MAClCC,EAAW,EAAQ,MACnBC,EAAgB,EAAQ,MAExBxF,EAAa7sI,UAEbu0B,EAAkBxnC,OAAOgS,eAEzBuzI,EAA4BvlJ,OAAOsoC,yBACnCk9G,EAAa,aACb7C,EAAe,eACf8C,EAAW,WAIfpwF,EAAQzf,EAAIkrG,EAAcsE,EAA0B,SAAwB7/G,EAAGquB,EAAG8xF,GAIhF,GAHAL,EAAS9/G,GACTquB,EAAI0xF,EAAc1xF,GAClByxF,EAASK,GACQ,mBAANngH,GAA0B,cAANquB,GAAqB,UAAW8xF,GAAcD,KAAYC,IAAeA,EAAWD,GAAW,CAC5H,IAAIxkJ,EAAUskJ,EAA0BhgH,EAAGquB,GACvC3yD,GAAWA,EAAQwkJ,KACrBlgH,EAAEquB,GAAK8xF,EAAW9+I,MAClB8+I,EAAa,CACX5zI,aAAc6wI,KAAgB+C,EAAaA,EAAW/C,GAAgB1hJ,EAAQ0hJ,GAC9E9wI,WAAY2zI,KAAcE,EAAaA,EAAWF,GAAcvkJ,EAAQukJ,GACxEzzI,UAAU,GAGhB,CAAE,OAAOy1B,EAAgBjC,EAAGquB,EAAG8xF,EACjC,EAAIl+G,EAAkB,SAAwBjC,EAAGquB,EAAG8xF,GAIlD,GAHAL,EAAS9/G,GACTquB,EAAI0xF,EAAc1xF,GAClByxF,EAASK,GACLP,EAAgB,IAClB,OAAO39G,EAAgBjC,EAAGquB,EAAG8xF,EAC/B,CAAE,MAAOpnI,GAAqB,CAC9B,GAAI,QAASonI,GAAc,QAASA,EAAY,MAAM5F,EAAW,2BAEjE,MADI,UAAW4F,IAAYngH,EAAEquB,GAAK8xF,EAAW9+I,OACtC2+B,CACT,kBC1CA,IAAIu7G,EAAc,EAAQ,MACtBluI,EAAO,EAAQ,MACf+yI,EAA6B,EAAQ,MACrC5E,EAA2B,EAAQ,MACnCd,EAAkB,EAAQ,MAC1BqF,EAAgB,EAAQ,MACxB9E,EAAS,EAAQ,MACjB2E,EAAiB,EAAQ,MAGzBI,EAA4BvlJ,OAAOsoC,yBAIvC+sB,EAAQzf,EAAIkrG,EAAcyE,EAA4B,SAAkChgH,EAAGquB,GAGzF,GAFAruB,EAAI06G,EAAgB16G,GACpBquB,EAAI0xF,EAAc1xF,GACduxF,EAAgB,IAClB,OAAOI,EAA0BhgH,EAAGquB,EACtC,CAAE,MAAOt1C,GAAqB,CAC9B,GAAIkiI,EAAOj7G,EAAGquB,GAAI,OAAOmtF,GAA0BnuI,EAAK+yI,EAA2B/vG,EAAGrQ,EAAGquB,GAAIruB,EAAEquB,GACjG,kBCrBA,IAAIgyF,EAAqB,EAAQ,MAG7BjC,EAFc,EAAQ,KAEGhoJ,OAAO,SAAU,aAK9C05D,EAAQzf,EAAI51C,OAAO6nC,qBAAuB,SAA6BtC,GACrE,OAAOqgH,EAAmBrgH,EAAGo+G,EAC/B,gBCTAtuF,EAAQzf,EAAI51C,OAAOkrC,sCCDnB,IAAIs1G,EAAS,EAAQ,MACjBZ,EAAa,EAAQ,KACrBsD,EAAW,EAAQ,MACnBQ,EAAY,EAAQ,MACpBmC,EAA2B,EAAQ,MAEnCC,EAAWpC,EAAU,YACrBN,EAAUpjJ,OACV+lJ,EAAkB3C,EAAQhxI,UAK9BwjD,EAAOP,QAAUwwF,EAA2BzC,EAAQttG,eAAiB,SAAUvQ,GAC7E,IAAI9nB,EAASylI,EAAS39G,GACtB,GAAIi7G,EAAO/iI,EAAQqoI,GAAW,OAAOroI,EAAOqoI,GAC5C,IAAIrzI,EAAcgL,EAAOhL,YACzB,OAAImtI,EAAWntI,IAAgBgL,aAAkBhL,EACxCA,EAAYL,UACZqL,aAAkB2lI,EAAU2C,EAAkB,IACzD,kBCpBA,IAAIzF,EAAc,EAAQ,MAE1B1qF,EAAOP,QAAUirF,EAAY,CAAC,EAAEiE,+BCFhC,IAAIjE,EAAc,EAAQ,MACtBE,EAAS,EAAQ,MACjBP,EAAkB,EAAQ,MAC1B9kJ,EAAU,gBACVwoJ,EAAa,EAAQ,MAErBnlJ,EAAO8hJ,EAAY,GAAG9hJ,MAE1Bo3D,EAAOP,QAAU,SAAU53C,EAAQkc,GACjC,IAGIt4B,EAHAkkC,EAAI06G,EAAgBxiI,GACpBvR,EAAI,EACJtO,EAAS,GAEb,IAAKyD,KAAOkkC,GAAIi7G,EAAOmD,EAAYtiJ,IAAQm/I,EAAOj7G,EAAGlkC,IAAQ7C,EAAKZ,EAAQyD,GAE1E,KAAOs4B,EAAM56B,OAASmN,GAAOs0I,EAAOj7G,EAAGlkC,EAAMs4B,EAAMztB,SAChD/Q,EAAQyC,EAAQyD,IAAQ7C,EAAKZ,EAAQyD,IAExC,OAAOzD,CACT,kBCnBA,IAAIgoJ,EAAqB,EAAQ,MAC7BI,EAAc,EAAQ,KAK1BpwF,EAAOP,QAAUr1D,OAAOoB,MAAQ,SAAcmkC,GAC5C,OAAOqgH,EAAmBrgH,EAAGygH,EAC/B,6BCPA,IAAIC,EAAwB,CAAC,EAAE9vH,qBAE3BmS,EAA2BtoC,OAAOsoC,yBAGlC49G,EAAc59G,IAA6B29G,EAAsBrzI,KAAK,CAAE,EAAG,GAAK,GAIpFyiD,EAAQzf,EAAIswG,EAAc,SAA8BlD,GACtD,IAAIpxI,EAAa02B,EAAyB1zB,KAAMouI,GAChD,QAASpxI,GAAcA,EAAWC,UACpC,EAAIo0I,kBCbJ,IAAInF,EAAc,EAAQ,MACtBR,EAAc,EAAQ,MACtB6F,EAAa,EAAQ,MACrBlG,EAAkB,EAAQ,MAG1B9pH,EAAuBmqH,EAFC,WAGxB9hJ,EAAO8hJ,EAAY,GAAG9hJ,MAGtBo+D,EAAe,SAAUwpF,GAC3B,OAAO,SAAU58G,GAOf,IANA,IAKInoC,EALAkkC,EAAI06G,EAAgBz2G,GACpBpoC,EAAO+kJ,EAAW5gH,GAClBxmC,EAASqC,EAAKrC,OACdmN,EAAI,EACJtO,EAAS,GAENmB,EAASmN,GACd7K,EAAMD,EAAK8K,KACN40I,IAAe3qH,EAAqBoP,EAAGlkC,IAC1C7C,EAAKZ,EAAQwoJ,EAAa,CAAC/kJ,EAAKkkC,EAAElkC,IAAQkkC,EAAElkC,IAGhD,OAAOzD,CACT,CACF,EAEAg4D,EAAOP,QAAU,CAGft3C,QAAS6+C,GAAa,GAGtBj2C,OAAQi2C,GAAa,oBClCvB,IAAIhqD,EAAO,EAAQ,MACfgtI,EAAa,EAAQ,KACrBhmF,EAAW,EAAQ,KAEnBkmF,EAAa7sI,UAIjB2iD,EAAOP,QAAU,SAAU62B,EAAOm6D,GAChC,IAAIzmJ,EAAIkpB,EACR,GAAa,WAATu9H,GAAqBzG,EAAWhgJ,EAAKssF,EAAMp2F,YAAc8jE,EAAS9wC,EAAMlW,EAAKhT,EAAIssF,IAAS,OAAOpjE,EACrG,GAAI82H,EAAWhgJ,EAAKssF,EAAMyhD,WAAa/zE,EAAS9wC,EAAMlW,EAAKhT,EAAIssF,IAAS,OAAOpjE,EAC/E,GAAa,WAATu9H,GAAqBzG,EAAWhgJ,EAAKssF,EAAMp2F,YAAc8jE,EAAS9wC,EAAMlW,EAAKhT,EAAIssF,IAAS,OAAOpjE,EACrG,MAAMg3H,EAAW,0CACnB,kBCdA,IAAIwE,EAAa,EAAQ,MACrBhE,EAAc,EAAQ,MACtBgG,EAA4B,EAAQ,MACpCC,EAA8B,EAAQ,MACtClB,EAAW,EAAQ,MAEnB1pJ,EAAS2kJ,EAAY,GAAG3kJ,QAG5Bi6D,EAAOP,QAAUivF,EAAW,UAAW,YAAc,SAAiB96G,GACpE,IAAIpoC,EAAOklJ,EAA0B1wG,EAAEyvG,EAAS77G,IAC5C0B,EAAwBq7G,EAA4B3wG,EACxD,OAAO1K,EAAwBvvC,EAAOyF,EAAM8pC,EAAsB1B,IAAOpoC,CAC3E,iBCbA,IAAImqC,EAAS,EAAQ,MAErBqqB,EAAOP,QAAU9pB,kBCFjB,IAAIw3G,EAAoB,EAAQ,MAE5BjD,EAAa7sI,UAIjB2iD,EAAOP,QAAU,SAAU7rB,GACzB,GAAIu5G,EAAkBv5G,GAAK,MAAMs2G,EAAW,wBAA0Bt2G,GACtE,OAAOA,CACT,kBCTA,IAAIi6G,EAAS,EAAQ,MACjBz8G,EAAM,EAAQ,MAEd5lC,EAAOqiJ,EAAO,QAElB7tF,EAAOP,QAAU,SAAUh0D,GACzB,OAAOD,EAAKC,KAASD,EAAKC,GAAO2lC,EAAI3lC,GACvC,kBCPA,IAAIkqC,EAAS,EAAQ,MACjB21G,EAAuB,EAAQ,MAE/BsF,EAAS,qBACTnD,EAAQ93G,EAAOi7G,IAAWtF,EAAqBsF,EAAQ,CAAC,GAE5D5wF,EAAOP,QAAUguF,kBCNjB,IAAIoD,EAAU,EAAQ,MAClBpD,EAAQ,EAAQ,OAEnBztF,EAAOP,QAAU,SAAUh0D,EAAKuF,GAC/B,OAAOy8I,EAAMhiJ,KAASgiJ,EAAMhiJ,QAAiBmB,IAAVoE,EAAsBA,EAAQ,CAAC,EACpE,GAAG,WAAY,IAAIpI,KAAK,CACtBrH,QAAS,SACT8pC,KAAMwlH,EAAU,OAAS,SACzBC,UAAW,4CACXC,QAAS,2DACTllH,OAAQ,wDCTV,IAAImlH,EAAa,EAAQ,MACrBhG,EAAQ,EAAQ,MAGpBhrF,EAAOP,UAAYr1D,OAAOkrC,wBAA0B01G,GAAM,WACxD,IAAI1iH,EAAS5rB,SAGb,OAAQ6T,OAAO+X,MAAal+B,OAAOk+B,aAAmB5rB,UAEnDA,OAAOiwI,MAAQqE,GAAcA,EAAa,EAC/C,oBCZA,IAAIC,EAAsB,EAAQ,MAE9BrwJ,EAAMD,KAAKC,IACXC,EAAMF,KAAKE,IAKfm/D,EAAOP,QAAU,SAAUpzD,EAAOlD,GAChC,IAAI+nJ,EAAUD,EAAoB5kJ,GAClC,OAAO6kJ,EAAU,EAAItwJ,EAAIswJ,EAAU/nJ,EAAQ,GAAKtI,EAAIqwJ,EAAS/nJ,EAC/D,kBCVA,IAAIgoJ,EAAgB,EAAQ,MACxBC,EAAyB,EAAQ,MAErCpxF,EAAOP,QAAU,SAAU7rB,GACzB,OAAOu9G,EAAcC,EAAuBx9G,GAC9C,kBCNA,IAAI07G,EAAQ,EAAQ,MAIpBtvF,EAAOP,QAAU,SAAU0qF,GACzB,IAAIkH,GAAUlH,EAEd,OAAOkH,GAAWA,GAAqB,IAAXA,EAAe,EAAI/B,EAAM+B,EACvD,kBCRA,IAAIJ,EAAsB,EAAQ,MAE9BpwJ,EAAMF,KAAKE,IAIfm/D,EAAOP,QAAU,SAAU0qF,GACzB,OAAOA,EAAW,EAAItpJ,EAAIowJ,EAAoB9G,GAAW,kBAAoB,CAC/E,kBCRA,IAAIiH,EAAyB,EAAQ,MAEjC5D,EAAUpjJ,OAId41D,EAAOP,QAAU,SAAU0qF,GACzB,OAAOqD,EAAQ4D,EAAuBjH,GACxC,kBCRA,IAAIntI,EAAO,EAAQ,MACfgnD,EAAW,EAAQ,KACnBstF,EAAW,EAAQ,MACnBC,EAAY,EAAQ,MACpBC,EAAsB,EAAQ,MAC9BC,EAAkB,EAAQ,MAE1BvH,EAAa7sI,UACbq0I,EAAeD,EAAgB,eAInCzxF,EAAOP,QAAU,SAAU62B,EAAOm6D,GAChC,IAAKzsF,EAASsyB,IAAUg7D,EAASh7D,GAAQ,OAAOA,EAChD,IACItuF,EADA2pJ,EAAeJ,EAAUj7D,EAAOo7D,GAEpC,GAAIC,EAAc,CAGhB,QAFa/kJ,IAAT6jJ,IAAoBA,EAAO,WAC/BzoJ,EAASgV,EAAK20I,EAAcr7D,EAAOm6D,IAC9BzsF,EAASh8D,IAAWspJ,EAAStpJ,GAAS,OAAOA,EAClD,MAAMkiJ,EAAW,0CACnB,CAEA,YADat9I,IAAT6jJ,IAAoBA,EAAO,UACxBe,EAAoBl7D,EAAOm6D,EACpC,kBCxBA,IAAImB,EAAc,EAAQ,MACtBN,EAAW,EAAQ,MAIvBtxF,EAAOP,QAAU,SAAU0qF,GACzB,IAAI1+I,EAAMmmJ,EAAYzH,EAAU,UAChC,OAAOmH,EAAS7lJ,GAAOA,EAAMA,EAAM,EACrC,YCRA,IAAI2+I,EAAU75H,OAEdyvC,EAAOP,QAAU,SAAU0qF,GACzB,IACE,OAAOC,EAAQD,EACjB,CAAE,MAAOzhI,GACP,MAAO,QACT,CACF,kBCRA,IAAIgiI,EAAc,EAAQ,MAEtB7pI,EAAK,EACLgxI,EAAUlxJ,KAAK0vC,SACfnwC,EAAWwqJ,EAAY,GAAIxqJ,UAE/B8/D,EAAOP,QAAU,SAAUh0D,GACzB,MAAO,gBAAqBmB,IAARnB,EAAoB,GAAKA,GAAO,KAAOvL,IAAW2gB,EAAKgxI,EAAS,GACtF,kBCPA,IAAIC,EAAgB,EAAQ,MAE5B9xF,EAAOP,QAAUqyF,IACXp1I,OAAOiwI,MACkB,iBAAnBjwI,OAAOC,yBCLnB,IAAIuuI,EAAc,EAAQ,MACtBF,EAAQ,EAAQ,MAIpBhrF,EAAOP,QAAUyrF,GAAeF,GAAM,WAEpC,OAGgB,IAHT5gJ,OAAOgS,gBAAe,WAA0B,GAAG,YAAa,CACrEpL,MAAO,GACPmL,UAAU,IACTK,SACL,oBCXA,IAAIm5B,EAAS,EAAQ,MACjBq0G,EAAa,EAAQ,KAErB5yG,EAAUzB,EAAOyB,QAErB4oB,EAAOP,QAAUuqF,EAAW5yG,IAAY,cAAcz1C,KAAK4uB,OAAO6mB,oBCLlE,IAAIzB,EAAS,EAAQ,MACjBk4G,EAAS,EAAQ,MACjBjD,EAAS,EAAQ,MACjBx5G,EAAM,EAAQ,MACd0gH,EAAgB,EAAQ,MACxBlD,EAAoB,EAAQ,MAE5BlyI,EAASi5B,EAAOj5B,OAChBq1I,EAAwBlE,EAAO,OAC/BmE,EAAwBpD,EAAoBlyI,EAAY,KAAKA,EAASA,GAAUA,EAAOu1I,eAAiB7gH,EAE5G4uB,EAAOP,QAAU,SAAUr3D,GAKvB,OAJGwiJ,EAAOmH,EAAuB3pJ,KACjC2pJ,EAAsB3pJ,GAAQ0pJ,GAAiBlH,EAAOluI,EAAQtU,GAC1DsU,EAAOtU,GACP4pJ,EAAsB,UAAY5pJ,IAC/B2pJ,EAAsB3pJ,EACjC,kBCjBA,IAAIyuI,EAAI,EAAQ,MACZqb,EAAW,gBAIfrb,EAAE,CAAE/wI,OAAQ,SAAU0mJ,MAAM,GAAQ,CAClCrkI,QAAS,SAAiBwnB,GACxB,OAAOuiH,EAASviH,EAClB,mBCRF,IAAIknG,EAAI,EAAQ,MACZmU,EAAQ,EAAQ,MAChBsC,EAAW,EAAQ,MACnB6E,EAAuB,EAAQ,MAC/BlC,EAA2B,EAAQ,MAMvCpZ,EAAE,CAAE/wI,OAAQ,SAAU0mJ,MAAM,EAAME,OAJR1B,GAAM,WAAcmH,EAAqB,EAAI,IAIRxF,MAAOsD,GAA4B,CAChG/vG,eAAgB,SAAwBtM,GACtC,OAAOu+G,EAAqB7E,EAAS15G,GACvC,oBCbF,IAAInkC,EAAS,EAAQ,MAErBuwD,EAAOP,QAAUhwD,kBCFjB,IAAIA,EAAS,EAAQ,MAErBuwD,EAAOP,QAAUhwD,yBCqBjB,IAAI2iJ,EAAW,CACbC,6BAA8B,SAASC,EAAO5uI,EAAGgsB,GAG/C,IAAI6iH,EAAe,CAAC,EAIhBC,EAAQ,CAAC,EACbA,EAAM9uI,GAAK,EAMX,IAGI+uI,EACA9kC,EAAGj0G,EACHg5I,EACAC,EAEAC,EACAC,EATA/tG,EAAOstG,EAASU,cAAcC,OAWlC,IAVAjuG,EAAKl8C,KAAK8a,EAAG,IAULohC,EAAKkuG,SAaX,IAAKt5I,KATLi0G,GADA8kC,EAAU3tG,EAAK77B,OACHjY,MACZ0hJ,EAAiBD,EAAQQ,KAGzBN,EAAiBL,EAAM3kC,IAAM,CAAC,EAMxBglC,EAAepkJ,eAAemL,KAOhCk5I,EAAgCF,EALpBC,EAAej5I,GAW3Bm5I,EAAiBL,EAAM94I,SACY,IAAb84I,EAAM94I,IACTm5I,EAAiBD,KAClCJ,EAAM94I,GAAKk5I,EACX9tG,EAAKl8C,KAAK8Q,EAAGk5I,GACbL,EAAa74I,GAAKi0G,IAM1B,QAAiB,IAANj+E,QAAyC,IAAb8iH,EAAM9iH,GAAoB,CAC/D,IAAI8vF,EAAM,CAAC,8BAA+B97G,EAAG,OAAQgsB,EAAG,KAAKluC,KAAK,IAClE,MAAM,IAAIwoB,MAAMw1G,EAClB,CAEA,OAAO+yB,CACT,EAEAW,4CAA6C,SAASX,EAAc7iH,GAIlE,IAHA,IAAI4zD,EAAQ,GACRqqB,EAAIj+E,EAEDi+E,GACLrqB,EAAM16F,KAAK+kH,GACG4kC,EAAa5kC,GAC3BA,EAAI4kC,EAAa5kC,GAGnB,OADArqB,EAAMt+E,UACCs+E,CACT,EAEA6vD,UAAW,SAASb,EAAO5uI,EAAGgsB,GAC5B,IAAI6iH,EAAeH,EAASC,6BAA6BC,EAAO5uI,EAAGgsB,GACnE,OAAO0iH,EAASc,4CACdX,EAAc7iH,EAClB,EAKAojH,cAAe,CACbC,KAAM,SAAUn3B,GACd,IAEInwH,EAFAyqI,EAAIkc,EAASU,cACbtjH,EAAI,CAAC,EAGT,IAAK/jC,KADLmwH,EAAOA,GAAQ,CAAC,EACJsa,EACNA,EAAE3nI,eAAe9C,KACnB+jC,EAAE/jC,GAAOyqI,EAAEzqI,IAKf,OAFA+jC,EAAEzvB,MAAQ,GACVyvB,EAAE4jH,OAASx3B,EAAKw3B,QAAUld,EAAEmd,eACrB7jH,CACT,EAEA6jH,eAAgB,SAAUt9I,EAAGC,GAC3B,OAAOD,EAAEk9I,KAAOj9I,EAAEi9I,IACpB,EAMArqJ,KAAM,SAAUoI,EAAOiiJ,GACrB,IAAI5xJ,EAAO,CAAC2P,MAAOA,EAAOiiJ,KAAMA,GAChCj0I,KAAKe,MAAMnX,KAAKvH,GAChB2d,KAAKe,MAAM9X,KAAK+W,KAAKo0I,OACvB,EAKAnqI,IAAK,WACH,OAAOjK,KAAKe,MAAMmJ,OACpB,EAEA8pI,MAAO,WACL,OAA6B,IAAtBh0I,KAAKe,MAAM5W,MACpB,IAOF62D,EAAOP,QAAU2yF,oBChK8CpyF,EAAOP,QAG/D,WAAe,aAEtB,SAAShjD,EAAQG,GAGf,OAAOH,EAAU,mBAAqBC,QAAU,iBAAmBA,OAAOC,SAAW,SAAUC,GAC7F,cAAcA,CAChB,EAAI,SAAUA,GACZ,OAAOA,GAAO,mBAAqBF,QAAUE,EAAIC,cAAgBH,QAAUE,IAAQF,OAAOF,UAAY,gBAAkBI,CAC1H,EAAGH,EAAQG,EACb,CAEA,SAAS02I,EAAgBniH,EAAGrW,GAM1B,OALAw4H,EAAkBlpJ,OAAOmT,gBAAkB,SAAyB4zB,EAAGrW,GAErE,OADAqW,EAAE3zB,UAAYsd,EACPqW,CACT,EAEOmiH,EAAgBniH,EAAGrW,EAC5B,CAeA,SAASy4H,EAAWz2G,EAAQ1zC,EAAMoqJ,GAchC,OAZED,EAfJ,WACE,GAAuB,oBAAZjqI,UAA4BA,QAAQiuB,UAAW,OAAO,EACjE,GAAIjuB,QAAQiuB,UAAUo1G,KAAM,OAAO,EACnC,GAAqB,mBAAV8G,MAAsB,OAAO,EAExC,IAEE,OADA72G,QAAQpgC,UAAUu7H,QAAQ/6H,KAAKsM,QAAQiuB,UAAUqF,QAAS,IAAI,WAAa,MACpE,CACT,CAAE,MAAOzK,GACP,OAAO,CACT,CACF,CAGMuhH,GACWpqI,QAAQiuB,UAER,SAAoBuF,EAAQ1zC,EAAMoqJ,GAC7C,IAAIz9I,EAAI,CAAC,MACTA,EAAEnN,KAAKme,MAAMhR,EAAG3M,GAChB,IACIwB,EAAW,IADG2Y,SAASmH,KAAK3D,MAAM+1B,EAAQ/mC,IAG9C,OADIy9I,GAAOF,EAAgB1oJ,EAAU4oJ,EAAMh3I,WACpC5R,CACT,EAGK2oJ,EAAWxsI,MAAM,KAAM7d,UAChC,CAEA,SAASyqJ,EAAeC,EAAKt9I,GAC3B,OAWF,SAAyBs9I,GACvB,GAAIvqJ,MAAMkkB,QAAQqmI,GAAM,OAAOA,CACjC,CAbSC,CAAgBD,IAmBzB,SAA+BA,EAAKt9I,GAClC,IAAIU,EAAY,MAAP48I,EAAc,KAAyB,oBAAXl3I,QAA0Bk3I,EAAIl3I,OAAOC,WAAai3I,EAAI,cAE3F,GAAU,MAAN58I,EAAJ,CACA,IAII88I,EAAI3qC,EAJJ4qC,EAAO,GACPC,GAAK,EACLt3F,GAAK,EAIT,IACE,IAAK1lD,EAAKA,EAAGgG,KAAK42I,KAAQI,GAAMF,EAAK98I,EAAGnH,QAAQwY,QAC9C0rI,EAAKnrJ,KAAKkrJ,EAAG9iJ,QAETsF,GAAKy9I,EAAK5qJ,SAAWmN,GAH4B09I,GAAK,GAK9D,CAAE,MAAO1gI,GACPopC,GAAK,EACLysD,EAAK71F,CACP,CAAE,QACA,IACO0gI,GAAsB,MAAhBh9I,EAAW,QAAWA,EAAW,QAC9C,CAAE,QACA,GAAI0lD,EAAI,MAAMysD,CAChB,CACF,CAEA,OAAO4qC,CAxBe,CAyBxB,CA/CiCE,CAAsBL,EAAKt9I,IAAM49I,EAA4BN,EAAKt9I,IAsEnG,WACE,MAAM,IAAI+G,UAAU,4IACtB,CAxEyG82I,EACzG,CAEA,SAASC,EAAmBR,GAC1B,OAGF,SAA4BA,GAC1B,GAAIvqJ,MAAMkkB,QAAQqmI,GAAM,OAAOS,EAAkBT,EACnD,CALSU,CAAmBV,IAW5B,SAA0B7/G,GACxB,GAAsB,oBAAXr3B,QAAmD,MAAzBq3B,EAAKr3B,OAAOC,WAA2C,MAAtBo3B,EAAK,cAAuB,OAAO1qC,MAAMylC,KAAKiF,EACtH,CAboCwgH,CAAiBX,IAAQM,EAA4BN,IA8DzF,WACE,MAAM,IAAIv2I,UAAU,uIACtB,CAhEiGm3I,EACjG,CA4CA,SAASN,EAA4B/iH,EAAGn5B,GACtC,GAAKm5B,EAAL,CACA,GAAiB,iBAANA,EAAgB,OAAOkjH,EAAkBljH,EAAGn5B,GACvD,IAAI+8B,EAAI3qC,OAAOoS,UAAUtc,SAAS8c,KAAKm0B,GAAGh6B,MAAM,GAAI,GAEpD,MADU,WAAN49B,GAAkB5D,EAAEt0B,cAAak4B,EAAI5D,EAAEt0B,YAAYzU,MAC7C,QAAN2sC,GAAqB,QAANA,EAAoB1rC,MAAMylC,KAAKqC,GACxC,cAAN4D,GAAqB,2CAA2CpzC,KAAKozC,GAAWs/G,EAAkBljH,EAAGn5B,QAAzG,CALc,CAMhB,CAEA,SAASq8I,EAAkBT,EAAKjmJ,IACnB,MAAPA,GAAeA,EAAMimJ,EAAIzqJ,UAAQwE,EAAMimJ,EAAIzqJ,QAE/C,IAAK,IAAImN,EAAI,EAAGm+I,EAAO,IAAIprJ,MAAMsE,GAAM2I,EAAI3I,EAAK2I,IAAKm+I,EAAKn+I,GAAKs9I,EAAIt9I,GAEnE,OAAOm+I,CACT,CAmEA,IAAItsI,EAAU/d,OAAO+d,QACjB5K,EAAiBnT,OAAOmT,eACxBm3I,EAAWtqJ,OAAOsqJ,SAClBx0G,EAAiB91C,OAAO81C,eACxBxN,EAA2BtoC,OAAOsoC,yBAClCkF,EAASxtC,OAAOwtC,OAChB+8G,EAAOvqJ,OAAOuqJ,KACdr3I,EAASlT,OAAOkT,OAEhBjQ,EAA0B,oBAAZic,SAA2BA,QACzCvC,EAAQ1Z,EAAK0Z,MACbwwB,EAAYlqC,EAAKkqC,UAEhBxwB,IACHA,EAAQ,SAAe6tI,EAAKC,EAAWzrJ,GACrC,OAAOwrJ,EAAI7tI,MAAM8tI,EAAWzrJ,EAC9B,GAGGwuC,IACHA,EAAS,SAAgBn1C,GACvB,OAAOA,CACT,GAGGkyJ,IACHA,EAAO,SAAclyJ,GACnB,OAAOA,CACT,GAGG80C,IACHA,EAAY,SAAmBu9G,EAAM1rJ,GACnC,OAAOmqJ,EAAWuB,EAAMV,EAAmBhrJ,GAC7C,GAGF,IAoBqB2kB,EApBjBgnI,EAAeC,EAAQ3rJ,MAAMmT,UAAUjU,SACvC0sJ,EAAWD,EAAQ3rJ,MAAMmT,UAAUyM,KACnCisI,EAAYF,EAAQ3rJ,MAAMmT,UAAU5T,MACpCusJ,EAAoBH,EAAQzkI,OAAO/T,UAAU/Y,aAC7C2xJ,EAAiBJ,EAAQzkI,OAAO/T,UAAUtc,UAC1Cm1J,EAAcL,EAAQzkI,OAAO/T,UAAUorC,OACvC0tG,EAAgBN,EAAQzkI,OAAO/T,UAAUnN,SACzCkmJ,EAAgBP,EAAQzkI,OAAO/T,UAAUjX,SACzCiwJ,EAAaR,EAAQzkI,OAAO/T,UAAUwpD,MACtCyvF,EAAaT,EAAQpkF,OAAOp0D,UAAU7a,MACtC+zJ,GAUiB3nI,EAVa1Q,UAWzB,WACL,IAAK,IAAIykD,EAAQ54D,UAAUC,OAAQC,EAAO,IAAIC,MAAMy4D,GAAQC,EAAQ,EAAGA,EAAQD,EAAOC,IACpF34D,EAAK24D,GAAS74D,UAAU64D,GAG1B,OAAOxqB,EAAUxpB,EAAM3kB,EACzB,GAhBF,SAAS4rJ,EAAQjnI,GACf,OAAO,SAAU2mB,GACf,IAAK,IAAIzrC,EAAOC,UAAUC,OAAQC,EAAO,IAAIC,MAAMJ,EAAO,EAAIA,EAAO,EAAI,GAAIK,EAAO,EAAGA,EAAOL,EAAMK,IAClGF,EAAKE,EAAO,GAAKJ,UAAUI,GAG7B,OAAOyd,EAAMgH,EAAM2mB,EAAStrC,EAC9B,CACF,CAYA,SAASusJ,EAAS9sJ,EAAK4W,EAAOm2I,GAC5BA,EAAoBA,GAAwCT,EAExD53I,GAIFA,EAAe1U,EAAK,MAKtB,IAFA,IAAIugD,EAAI3pC,EAAMtW,OAEPigD,KAAK,CACV,IAAIvnD,EAAU4d,EAAM2pC,GAEpB,GAAuB,iBAAZvnD,EAAsB,CAC/B,IAAIg0J,EAAYD,EAAkB/zJ,GAE9Bg0J,IAAch0J,IAEX6yJ,EAASj1I,KACZA,EAAM2pC,GAAKysG,GAGbh0J,EAAUg0J,EAEd,CAEAhtJ,EAAIhH,IAAW,CACjB,CAEA,OAAOgH,CACT,CAGA,SAASitJ,EAAMjuI,GACb,IAGIkuI,EAHAC,EAAY14I,EAAO,MAEnB+yD,EAnKN,SAAoCl/B,EAAG8kH,GACrC,IAAIriH,EAAuB,oBAAXl3B,QAA0By0B,EAAEz0B,OAAOC,WAAaw0B,EAAE,cAElE,IAAKyC,EAAI,CACP,GAAIvqC,MAAMkkB,QAAQ4jB,KAAOyC,EAAKsgH,EAA4B/iH,KAAO8kH,GAAkB9kH,GAAyB,iBAAbA,EAAEhoC,OAAqB,CAChHyqC,IAAIzC,EAAIyC,GACZ,IAAIt9B,EAAI,EAEJ20I,EAAI,WAAa,EAErB,MAAO,CACLvnI,EAAGunI,EACHl2G,EAAG,WACD,OAAIz+B,GAAK66B,EAAEhoC,OAAe,CACxBkf,MAAM,GAED,CACLA,MAAM,EACNrX,MAAOmgC,EAAE76B,KAEb,EACA67B,EAAG,SAAUA,GACX,MAAMA,CACR,EACA6N,EAAGirG,EAEP,CAEA,MAAM,IAAI5tI,UAAU,wIACtB,CAEA,IAEIiW,EAFA4iI,GAAmB,EACnBC,GAAS,EAEb,MAAO,CACLzyI,EAAG,WACDkwB,EAAKA,EAAG52B,KAAKm0B,EACf,EACA4D,EAAG,WACD,IAAIZ,EAAOP,EAAG/jC,OAEd,OADAqmJ,EAAmB/hH,EAAK9rB,KACjB8rB,CACT,EACAhC,EAAG,SAAUA,GACXgkH,GAAS,EACT7iI,EAAM6e,CACR,EACA6N,EAAG,WACD,IACOk2G,GAAiC,MAAbtiH,EAAGK,QAAgBL,EAAGK,QACjD,CAAE,QACA,GAAIkiH,EAAQ,MAAM7iI,CACpB,CACF,EAEJ,CA4GkB8iI,CAA2BjuI,EAAQN,IAGnD,IACE,IAAKwoD,EAAU3sD,MAAOqyI,EAAQ1lF,EAAUt7B,KAAK1sB,MAAO,CAClD,IAAIguI,EAAc1C,EAAeoC,EAAM/kJ,MAAO,GAC1CqD,EAAWgiJ,EAAY,GACvBrlJ,EAAQqlJ,EAAY,GAExBL,EAAU3hJ,GAAYrD,CACxB,CACF,CAAE,MAAOsiB,GACP+8C,EAAUl+B,EAAE7e,EACd,CAAE,QACA+8C,EAAUrwB,GACZ,CAEA,OAAOg2G,CACT,CAIA,SAASM,EAAazuI,EAAQukB,GAC5B,KAAkB,OAAXvkB,GAAiB,CACtB,IAAI2d,EAAOkN,EAAyB7qB,EAAQukB,GAE5C,GAAI5G,EAAM,CACR,GAAIA,EAAK78B,IACP,OAAOqsJ,EAAQxvH,EAAK78B,KAGtB,GAA0B,mBAAf68B,EAAKx0B,MACd,OAAOgkJ,EAAQxvH,EAAKx0B,MAExB,CAEA6W,EAASq4B,EAAer4B,EAC1B,CAOA,OALA,SAAuBhmB,GAErB,OADA4mB,QAAQY,KAAK,qBAAsBxnB,GAC5B,IACT,CAGF,CAEA,IAAI00J,EAAS3+G,EAAO,CAAC,IAAK,OAAQ,UAAW,UAAW,OAAQ,UAAW,QAAS,QAAS,IAAK,MAAO,MAAO,MAAO,QAAS,aAAc,OAAQ,KAAM,SAAU,SAAU,UAAW,SAAU,OAAQ,OAAQ,MAAO,WAAY,UAAW,OAAQ,WAAY,KAAM,YAAa,MAAO,UAAW,MAAO,SAAU,MAAO,MAAO,KAAM,KAAM,UAAW,KAAM,WAAY,aAAc,SAAU,OAAQ,SAAU,OAAQ,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,OAAQ,SAAU,SAAU,KAAM,OAAQ,IAAK,MAAO,QAAS,MAAO,MAAO,QAAS,SAAU,KAAM,OAAQ,MAAO,OAAQ,UAAW,OAAQ,WAAY,QAAS,MAAO,OAAQ,KAAM,WAAY,SAAU,SAAU,IAAK,UAAW,MAAO,WAAY,IAAK,KAAM,KAAM,OAAQ,IAAK,OAAQ,UAAW,SAAU,SAAU,QAAS,SAAU,SAAU,OAAQ,SAAU,SAAU,QAAS,MAAO,UAAW,MAAO,QAAS,QAAS,KAAM,WAAY,WAAY,QAAS,KAAM,QAAS,OAAQ,KAAM,QAAS,KAAM,IAAK,KAAM,MAAO,QAAS,QAEn+B4+G,EAAQ5+G,EAAO,CAAC,MAAO,IAAK,WAAY,cAAe,eAAgB,eAAgB,gBAAiB,mBAAoB,SAAU,WAAY,OAAQ,OAAQ,UAAW,SAAU,OAAQ,IAAK,QAAS,WAAY,QAAS,QAAS,OAAQ,iBAAkB,SAAU,OAAQ,WAAY,QAAS,OAAQ,UAAW,UAAW,WAAY,iBAAkB,OAAQ,OAAQ,QAAS,SAAU,SAAU,OAAQ,WAAY,QAAS,OAAQ,QAAS,OAAQ,UAC3c6+G,EAAa7+G,EAAO,CAAC,UAAW,gBAAiB,sBAAuB,cAAe,mBAAoB,oBAAqB,oBAAqB,iBAAkB,UAAW,UAAW,UAAW,UAAW,UAAW,iBAAkB,UAAW,UAAW,cAAe,eAAgB,WAAY,eAAgB,qBAAsB,cAAe,SAAU,iBAKhX8+G,EAAgB9+G,EAAO,CAAC,UAAW,gBAAiB,SAAU,UAAW,eAAgB,YAAa,mBAAoB,iBAAkB,gBAAiB,gBAAiB,gBAAiB,QAAS,YAAa,OAAQ,eAAgB,YAAa,UAAW,gBAAiB,SAAU,MAAO,aAAc,UAAW,QAChU++G,EAAW/+G,EAAO,CAAC,OAAQ,WAAY,SAAU,UAAW,QAAS,SAAU,KAAM,aAAc,gBAAiB,KAAM,KAAM,QAAS,UAAW,WAAY,QAAS,OAAQ,KAAM,SAAU,QAAS,SAAU,OAAQ,OAAQ,UAAW,SAAU,MAAO,QAAS,MAAO,SAAU,eAG1Rg/G,EAAmBh/G,EAAO,CAAC,UAAW,cAAe,aAAc,WAAY,YAAa,UAAW,UAAW,SAAU,SAAU,QAAS,YAAa,aAAc,iBAAkB,cAAe,SAC3MtmB,EAAOsmB,EAAO,CAAC,UAEf1nC,EAAO0nC,EAAO,CAAC,SAAU,SAAU,QAAS,MAAO,iBAAkB,eAAgB,uBAAwB,WAAY,aAAc,UAAW,SAAU,UAAW,cAAe,cAAe,UAAW,OAAQ,QAAS,QAAS,QAAS,OAAQ,UAAW,WAAY,eAAgB,SAAU,cAAe,WAAY,WAAY,UAAW,MAAO,WAAY,0BAA2B,wBAAyB,WAAY,YAAa,UAAW,eAAgB,OAAQ,MAAO,UAAW,SAAU,SAAU,OAAQ,OAAQ,WAAY,KAAM,YAAa,YAAa,QAAS,OAAQ,QAAS,OAAQ,OAAQ,UAAW,OAAQ,MAAO,MAAO,YAAa,QAAS,SAAU,MAAO,YAAa,WAAY,QAAS,OAAQ,QAAS,UAAW,aAAc,SAAU,OAAQ,UAAW,UAAW,cAAe,cAAe,SAAU,UAAW,UAAW,aAAc,WAAY,MAAO,WAAY,MAAO,WAAY,OAAQ,OAAQ,UAAW,aAAc,QAAS,WAAY,QAAS,OAAQ,QAAS,OAAQ,UAAW,QAAS,MAAO,SAAU,OAAQ,QAAS,UAAW,WAAY,QAAS,YAAa,OAAQ,SAAU,SAAU,QAAS,QAAS,QAAS,SACjqCxP,EAAMwP,EAAO,CAAC,gBAAiB,aAAc,WAAY,qBAAsB,SAAU,gBAAiB,gBAAiB,UAAW,gBAAiB,iBAAkB,QAAS,OAAQ,KAAM,QAAS,OAAQ,gBAAiB,YAAa,YAAa,QAAS,sBAAuB,8BAA+B,gBAAiB,kBAAmB,KAAM,KAAM,IAAK,KAAM,KAAM,kBAAmB,YAAa,UAAW,UAAW,MAAO,WAAY,YAAa,MAAO,OAAQ,eAAgB,YAAa,SAAU,cAAe,cAAe,gBAAiB,cAAe,YAAa,mBAAoB,eAAgB,aAAc,eAAgB,cAAe,KAAM,KAAM,KAAM,KAAM,aAAc,WAAY,gBAAiB,oBAAqB,SAAU,OAAQ,KAAM,kBAAmB,KAAM,MAAO,IAAK,KAAM,KAAM,KAAM,KAAM,UAAW,YAAa,aAAc,WAAY,OAAQ,eAAgB,iBAAkB,eAAgB,mBAAoB,iBAAkB,QAAS,aAAc,aAAc,eAAgB,eAAgB,cAAe,cAAe,mBAAoB,YAAa,MAAO,OAAQ,QAAS,SAAU,OAAQ,MAAO,OAAQ,aAAc,SAAU,WAAY,UAAW,QAAS,SAAU,cAAe,SAAU,WAAY,cAAe,OAAQ,aAAc,sBAAuB,mBAAoB,eAAgB,SAAU,gBAAiB,sBAAuB,iBAAkB,IAAK,KAAM,KAAM,SAAU,OAAQ,OAAQ,cAAe,YAAa,UAAW,SAAU,SAAU,QAAS,OAAQ,kBAAmB,mBAAoB,mBAAoB,eAAgB,cAAe,eAAgB,cAAe,aAAc,eAAgB,mBAAoB,oBAAqB,iBAAkB,kBAAmB,oBAAqB,iBAAkB,SAAU,eAAgB,QAAS,eAAgB,iBAAkB,WAAY,UAAW,UAAW,YAAa,mBAAoB,cAAe,kBAAmB,iBAAkB,aAAc,OAAQ,KAAM,KAAM,UAAW,SAAU,UAAW,aAAc,UAAW,aAAc,gBAAiB,gBAAiB,QAAS,eAAgB,OAAQ,eAAgB,mBAAoB,mBAAoB,IAAK,KAAM,KAAM,QAAS,IAAK,KAAM,KAAM,IAAK,eAC9vEi/G,EAASj/G,EAAO,CAAC,SAAU,cAAe,QAAS,WAAY,QAAS,eAAgB,cAAe,aAAc,aAAc,QAAS,MAAO,UAAW,eAAgB,WAAY,QAAS,QAAS,SAAU,OAAQ,KAAM,UAAW,SAAU,gBAAiB,SAAU,SAAU,iBAAkB,YAAa,WAAY,cAAe,UAAW,UAAW,gBAAiB,WAAY,WAAY,OAAQ,WAAY,WAAY,aAAc,UAAW,SAAU,SAAU,cAAe,gBAAiB,uBAAwB,YAAa,YAAa,aAAc,WAAY,iBAAkB,iBAAkB,YAAa,UAAW,QAAS,UACrpBk/G,EAAMl/G,EAAO,CAAC,aAAc,SAAU,cAAe,YAAa,gBAElEm/G,EAAgBpC,EAAK,6BAErBqC,EAAWrC,EAAK,yBAChBsC,EAActC,EAAK,iBACnBuC,EAAYvC,EAAK,8BAEjBwC,EAAYxC,EAAK,kBAEjByC,EAAiBzC,EAAK,yFAEtB0C,EAAoB1C,EAAK,yBACzB2C,EAAkB3C,EAAK,+DAEvB4C,EAAe5C,EAAK,WAEpB6C,GAAY,WACd,MAAyB,oBAAXv3J,OAAyB,KAAOA,MAChD,EAWIw3J,GAA4B,SAAmCC,EAAc/zJ,GAC/E,GAA8B,WAA1B8Y,EAAQi7I,IAAmE,mBAA9BA,EAAaC,aAC5D,OAAO,KAMT,IAAItqB,EAAS,KACTuqB,EAAY,wBAEZj0J,EAASk0J,eAAiBl0J,EAASk0J,cAAc99F,aAAa69F,KAChEvqB,EAAS1pI,EAASk0J,cAAch3H,aAAa+2H,IAG/C,IAAIE,EAAa,aAAezqB,EAAS,IAAMA,EAAS,IAExD,IACE,OAAOqqB,EAAaC,aAAaG,EAAY,CAC3CC,WAAY,SAAoB7nJ,GAC9B,OAAOA,CACT,EACA8nJ,gBAAiB,SAAyBC,GACxC,OAAOA,CACT,GAEJ,CAAE,MAAOp6I,GAKP,OADA4K,QAAQY,KAAK,uBAAyByuI,EAAa,0BAC5C,IACT,CACF,EA6zCA,OA3zCA,SAASI,IACP,IAAIj4J,EAASiJ,UAAUC,OAAS,QAAsByD,IAAjB1D,UAAU,GAAmBA,UAAU,GAAKsuJ,KAE7EW,EAAY,SAAmBv5G,GACjC,OAAOs5G,EAAgBt5G,EACzB,EAeA,GARAu5G,EAAU52J,QAAU,QAMpB42J,EAAUv0I,QAAU,IAEf3jB,IAAWA,EAAO0D,UAAyC,IAA7B1D,EAAO0D,SAASioE,SAIjD,OADAusF,EAAUC,aAAc,EACjBD,EAGT,IAAIE,EAAmBp4J,EAAO0D,SAC1BA,EAAW1D,EAAO0D,SAClB20J,EAAmBr4J,EAAOq4J,iBAC1BC,EAAsBt4J,EAAOs4J,oBAC7BC,EAAOv4J,EAAOu4J,KACdl4J,EAAUL,EAAOK,QACjBm4J,EAAax4J,EAAOw4J,WACpBC,EAAuBz4J,EAAO04J,aAC9BA,OAAwC,IAAzBD,EAAkCz4J,EAAO04J,cAAgB14J,EAAO24J,gBAAkBF,EACjGG,EAAkB54J,EAAO44J,gBACzBC,EAAY74J,EAAO64J,UACnBpB,EAAez3J,EAAOy3J,aACtBqB,EAAmBz4J,EAAQkc,UAC3B4tF,GAAYksD,EAAayC,EAAkB,aAC3CC,GAAiB1C,EAAayC,EAAkB,eAChDE,GAAgB3C,EAAayC,EAAkB,cAC/C7zJ,GAAgBoxJ,EAAayC,EAAkB,cAOnD,GAAmC,mBAAxBR,EAAoC,CAC7C,IAAI35F,GAAWj7D,EAAS8pD,cAAc,YAElCmR,GAASpL,SAAWoL,GAASpL,QAAQrzD,gBACvCwD,EAAWi7D,GAASpL,QAAQrzD,cAEhC,CAEA,IAAI+4J,GAAqBzB,GAA0BC,EAAcW,GAE7Dc,GAAYD,GAAqBA,GAAmBnB,WAAW,IAAM,GACrEqB,GAAYz1J,EACZ4lD,GAAiB6vG,GAAU7vG,eAC3B8vG,GAAqBD,GAAUC,mBAC/B7uF,GAAyB4uF,GAAU5uF,uBACnC8uF,GAAuBF,GAAUE,qBACjCC,GAAalB,EAAiBkB,WAC9BrnD,GAAQ,CAAC,EAKbimD,EAAUC,YAAiC,mBAAZjwI,GAAmD,mBAAlBjjB,IAAgCqkD,SAA+D,IAAtCA,GAAeiwG,mBACxI,IAwJIC,GAGA7D,GA3JA8D,GAAkB3C,EAClB4C,GAAa3C,EACb4C,GAAgB3C,EAChB4C,GAAc3C,EACd4C,GAAc3C,EACd4C,GAAsB1C,EACtB2C,GAAoB1C,EACpB2C,GAAmB7C,EAQnB8C,GAAe,KACfC,GAAuBxE,EAAS,CAAC,EAAG,GAAG5vJ,OAAOquJ,EAAmBmC,GAASnC,EAAmBoC,GAAQpC,EAAmBqC,GAAarC,EAAmBuC,GAAWvC,EAAmB9iI,KAGtL8oI,GAAe,KACfC,GAAuB1E,EAAS,CAAC,EAAG,GAAG5vJ,OAAOquJ,EAAmBlkJ,GAAOkkJ,EAAmBhsH,GAAMgsH,EAAmByC,GAASzC,EAAmB0C,KAQhJwD,GAA0BlwJ,OAAOuqJ,KAAKvqJ,OAAOkT,OAAO,KAAM,CAC5Di9I,aAAc,CACZp+I,UAAU,EACVD,cAAc,EACdD,YAAY,EACZjL,MAAO,MAETwpJ,mBAAoB,CAClBr+I,UAAU,EACVD,cAAc,EACdD,YAAY,EACZjL,MAAO,MAETypJ,+BAAgC,CAC9Bt+I,UAAU,EACVD,cAAc,EACdD,YAAY,EACZjL,OAAO,MAKP0pJ,GAAc,KAGdC,GAAc,KAGdC,IAAkB,EAGlBC,IAAkB,EAGlBC,IAA0B,EAI1BC,IAA2B,EAK3BC,IAAqB,EAGrBC,IAAiB,EAGjBC,IAAa,EAIbC,IAAa,EAMbC,IAAa,EAIbC,IAAsB,EAItBC,IAAsB,EAKtBC,IAAe,EAefC,IAAuB,EAIvBC,IAAe,EAIfC,IAAW,EAGXC,GAAe,CAAC,EAGhBC,GAAkB,KAClBC,GAA0BlG,EAAS,CAAC,EAAG,CAAC,iBAAkB,QAAS,WAAY,OAAQ,gBAAiB,OAAQ,SAAU,OAAQ,KAAM,KAAM,KAAM,KAAM,QAAS,UAAW,WAAY,WAAY,YAAa,SAAU,QAAS,MAAO,WAAY,QAAS,QAAS,QAAS,QAGpRmG,GAAgB,KAChBC,GAAwBpG,EAAS,CAAC,EAAG,CAAC,QAAS,QAAS,MAAO,SAAU,QAAS,UAGlFqG,GAAsB,KACtBC,GAA8BtG,EAAS,CAAC,EAAG,CAAC,MAAO,QAAS,MAAO,KAAM,QAAS,OAAQ,UAAW,cAAe,OAAQ,UAAW,QAAS,QAAS,QAAS,UAClKuG,GAAmB,qCACnBC,GAAgB,6BAChBC,GAAiB,+BAGjBC,GAAYD,GACZE,IAAiB,EAGjBC,GAAqB,KACrBC,GAA6B7G,EAAS,CAAC,EAAG,CAACuG,GAAkBC,GAAeC,IAAiBhH,GAI7FqH,GAA+B,CAAC,wBAAyB,aAKzDC,GAAS,KAKTC,GAAch5J,EAAS8pD,cAAc,QAErCmvG,GAAoB,SAA2BC,GACjD,OAAOA,aAAqBjsF,QAAUisF,aAAqBt5I,QAC7D,EASIu5I,GAAe,SAAsB70G,GACnCy0G,IAAUA,KAAWz0G,IAMpBA,GAAwB,WAAjBxrC,EAAQwrC,KAClBA,EAAM,CAAC,GAKTA,EAAM6tG,EAAM7tG,GACZwxG,GACqEA,IAAJ,IAAjEgD,GAA6Bl3J,QAAQ0iD,EAAIwxG,mBArCX,YAqC2GxxG,EAAIwxG,kBAE7I7D,GAA0C,0BAAtB6D,GAAgDrE,EAAiBD,EAGrF+E,GAAe,iBAAkBjyG,EAAM0tG,EAAS,CAAC,EAAG1tG,EAAIiyG,aAActE,IAAqBuE,GAC3FC,GAAe,iBAAkBnyG,EAAM0tG,EAAS,CAAC,EAAG1tG,EAAImyG,aAAcxE,IAAqByE,GAC3FkC,GAAqB,uBAAwBt0G,EAAM0tG,EAAS,CAAC,EAAG1tG,EAAIs0G,mBAAoBnH,GAAkBoH,GAC1GR,GAAsB,sBAAuB/zG,EAAM0tG,EAASG,EAAMmG,IAClEh0G,EAAI80G,kBACJnH,IAEEqG,GACFH,GAAgB,sBAAuB7zG,EAAM0tG,EAASG,EAAMiG,IAC5D9zG,EAAI+0G,kBACJpH,IAEEmG,GACFH,GAAkB,oBAAqB3zG,EAAM0tG,EAAS,CAAC,EAAG1tG,EAAI2zG,gBAAiBhG,IAAqBiG,GACpGnB,GAAc,gBAAiBzyG,EAAM0tG,EAAS,CAAC,EAAG1tG,EAAIyyG,YAAa9E,IAAqB,CAAC,EACzF+E,GAAc,gBAAiB1yG,EAAM0tG,EAAS,CAAC,EAAG1tG,EAAI0yG,YAAa/E,IAAqB,CAAC,EACzF+F,GAAe,iBAAkB1zG,GAAMA,EAAI0zG,aAC3Cf,IAA0C,IAAxB3yG,EAAI2yG,gBAEtBC,IAA0C,IAAxB5yG,EAAI4yG,gBAEtBC,GAA0B7yG,EAAI6yG,0BAA2B,EAEzDC,IAA4D,IAAjC9yG,EAAI8yG,yBAE/BC,GAAqB/yG,EAAI+yG,qBAAsB,EAE/CC,GAAiBhzG,EAAIgzG,iBAAkB,EAEvCG,GAAanzG,EAAImzG,aAAc,EAE/BC,GAAsBpzG,EAAIozG,sBAAuB,EAEjDC,GAAsBrzG,EAAIqzG,sBAAuB,EAEjDH,GAAalzG,EAAIkzG,aAAc,EAE/BI,IAAoC,IAArBtzG,EAAIszG,aAEnBC,GAAuBvzG,EAAIuzG,uBAAwB,EAEnDC,IAAoC,IAArBxzG,EAAIwzG,aAEnBC,GAAWzzG,EAAIyzG,WAAY,EAE3BzB,GAAmBhyG,EAAIg1G,oBAAsBhD,GAC7CoC,GAAYp0G,EAAIo0G,WAAaD,GAC7B9B,GAA0BryG,EAAIqyG,yBAA2B,CAAC,EAEtDryG,EAAIqyG,yBAA2BsC,GAAkB30G,EAAIqyG,wBAAwBC,gBAC/ED,GAAwBC,aAAetyG,EAAIqyG,wBAAwBC,cAGjEtyG,EAAIqyG,yBAA2BsC,GAAkB30G,EAAIqyG,wBAAwBE,sBAC/EF,GAAwBE,mBAAqBvyG,EAAIqyG,wBAAwBE,oBAGvEvyG,EAAIqyG,yBAAiG,kBAA/DryG,EAAIqyG,wBAAwBG,iCACpEH,GAAwBG,+BAAiCxyG,EAAIqyG,wBAAwBG,gCAGnFO,KACFH,IAAkB,GAGhBQ,KACFD,IAAa,GAKXO,KACFzB,GAAevE,EAAS,CAAC,EAAGvB,EAAmB9iI,IAC/C8oI,GAAe,IAEW,IAAtBuB,GAAazrJ,OACfylJ,EAASuE,GAAc3D,GACvBZ,EAASyE,GAAclqJ,KAGA,IAArByrJ,GAAavzH,MACfutH,EAASuE,GAAc1D,GACvBb,EAASyE,GAAchyH,GACvButH,EAASyE,GAActD,KAGO,IAA5B6E,GAAalF,aACfd,EAASuE,GAAczD,GACvBd,EAASyE,GAAchyH,GACvButH,EAASyE,GAActD,KAGG,IAAxB6E,GAAa9E,SACflB,EAASuE,GAAcvD,GACvBhB,EAASyE,GAAcvD,GACvBlB,EAASyE,GAActD,KAMvB7uG,EAAIi1G,WACFhD,KAAiBC,KACnBD,GAAepE,EAAMoE,KAGvBvE,EAASuE,GAAcjyG,EAAIi1G,SAAUtH,KAGnC3tG,EAAIk1G,WACF/C,KAAiBC,KACnBD,GAAetE,EAAMsE,KAGvBzE,EAASyE,GAAcnyG,EAAIk1G,SAAUvH,KAGnC3tG,EAAI80G,mBACNpH,EAASqG,GAAqB/zG,EAAI80G,kBAAmBnH,IAGnD3tG,EAAI2zG,kBACFA,KAAoBC,KACtBD,GAAkB9F,EAAM8F,KAG1BjG,EAASiG,GAAiB3zG,EAAI2zG,gBAAiBhG,KAK7C6F,KACFvB,GAAa,UAAW,GAKtBe,IACFtF,EAASuE,GAAc,CAAC,OAAQ,OAAQ,SAKtCA,GAAakD,QACfzH,EAASuE,GAAc,CAAC,iBACjBQ,GAAY2C,OAKjBzlH,GACFA,EAAOqQ,GAGTy0G,GAASz0G,EACX,EAEIq1G,GAAiC3H,EAAS,CAAC,EAAG,CAAC,KAAM,KAAM,KAAM,KAAM,UACvE4H,GAA0B5H,EAAS,CAAC,EAAG,CAAC,gBAAiB,OAAQ,QAAS,mBAK1E6H,GAA+B7H,EAAS,CAAC,EAAG,CAAC,QAAS,QAAS,OAAQ,IAAK,WAK5E8H,GAAe9H,EAAS,CAAC,EAAGa,GAChCb,EAAS8H,GAAchH,GACvBd,EAAS8H,GAAc/G,GACvB,IAAIgH,GAAkB/H,EAAS,CAAC,EAAGgB,GACnChB,EAAS+H,GAAiB9G,GAU1B,IA4FI+G,GAAe,SAAsB39J,GACvCk1J,EAAUiD,EAAUv0I,QAAS,CAC3B/hB,QAAS7B,IAGX,IAEEA,EAAKoF,WAAWq8D,YAAYzhE,EAC9B,CAAE,MAAO6d,GACP7d,EAAKikC,QACP,CACF,EASI25H,GAAmB,SAA0Bx1J,EAAMpI,GACrD,IACEk1J,EAAUiD,EAAUv0I,QAAS,CAC3BtP,UAAWtU,EAAK69J,iBAAiBz1J,GACjC0mC,KAAM9uC,GAEV,CAAE,MAAO6d,GACPq3I,EAAUiD,EAAUv0I,QAAS,CAC3BtP,UAAW,KACXw6B,KAAM9uC,GAEV,CAIA,GAFAA,EAAKiU,gBAAgB7L,GAER,OAATA,IAAkBgyJ,GAAahyJ,GACjC,GAAIgzJ,IAAcC,GAChB,IACEsC,GAAa39J,EACf,CAAE,MAAO6d,GAAI,MAEb,IACE7d,EAAKkU,aAAa9L,EAAM,GAC1B,CAAE,MAAOyV,GAAI,CAGnB,EASIigJ,GAAgB,SAAuBC,GAEzC,IAAIrmD,EACAsmD,EAEJ,GAAI7C,GACF4C,EAAQ,oBAAsBA,MACzB,CAEL,IAAI30F,EAAUisF,EAAY0I,EAAO,eACjCC,EAAoB50F,GAAWA,EAAQ,EACzC,CAE0B,0BAAtBqwF,IAAiD4C,KAAcD,KAEjE2B,EAAQ,iEAAmEA,EAAQ,kBAGrF,IAAIE,EAAe/E,GAAqBA,GAAmBnB,WAAWgG,GAASA,EAM/E,GAAI1B,KAAcD,GAChB,IACE1kD,GAAM,IAAIohD,GAAYoF,gBAAgBD,EAAcxE,GACtD,CAAE,MAAO57I,GAAI,CAKf,IAAK65F,IAAQA,EAAI9zG,gBAAiB,CAChC8zG,EAAMnuD,GAAe40G,eAAe9B,GAAW,WAAY,MAE3D,IACE3kD,EAAI9zG,gBAAgBolC,UAAYszH,GAAiBnD,GAAY8E,CAC/D,CAAE,MAAOpgJ,GACT,CACF,CAEA,IAAIrY,EAAOkyG,EAAIlyG,MAAQkyG,EAAI9zG,gBAQ3B,OANIm6J,GAASC,GACXx4J,EAAK8kE,aAAa3mE,EAASunE,eAAe8yF,GAAoBx4J,EAAKknE,WAAW,IAAM,MAKlF2vF,KAAcD,GACT9C,GAAqBt8I,KAAK06F,EAAKujD,GAAiB,OAAS,QAAQ,GAGnEA,GAAiBvjD,EAAI9zG,gBAAkB4B,CAChD,EASI44J,GAAkB,SAAyBx/G,GAC7C,OAAOy6G,GAAmBr8I,KAAK4hC,EAAKz+C,eAAiBy+C,EAAMA,EAC3D65G,EAAW4F,aAAe5F,EAAW6F,aAAe7F,EAAW8F,UAAW,MAAM,EAClF,EAoBIC,GAAU,SAAiB32I,GAC7B,MAAyB,WAAlBpL,EAAQ+7I,GAAqB3wI,aAAkB2wI,EAAO3wI,GAA8B,WAApBpL,EAAQoL,IAAmD,iBAApBA,EAAO+jD,UAAoD,iBAApB/jD,EAAOrkB,QAC9J,EAWIi7J,GAAe,SAAsBC,EAAYp4J,EAAaiF,GAC3D2mG,GAAMwsD,IAIX3J,EAAa7iD,GAAMwsD,IAAa,SAAUC,GACxCA,EAAK3hJ,KAAKm7I,EAAW7xJ,EAAaiF,EAAMmxJ,GAC1C,GACF,EAaIkC,GAAoB,SAA2Bt4J,GACjD,IAAIktD,EA9CmCqrG,EAqDvC,GAJAJ,GAAa,yBAA0Bn4J,EAAa,OAjDbu4J,EAqDtBv4J,aApDKuyJ,IAA4C,iBAAjBgG,EAAIr7J,UAAoD,iBAApBq7J,EAAIj+D,aAAuD,mBAApBi+D,EAAIp9F,eAAgCo9F,EAAIr0J,sBAAsBmuJ,IAAgD,mBAAxBkG,EAAI5qJ,iBAA8D,mBAArB4qJ,EAAI3qJ,cAA2D,iBAArB2qJ,EAAIn0F,cAAyD,mBAArBm0F,EAAIv0F,cAA4D,mBAAtBu0F,EAAItuD,eAuD7X,OAFAotD,GAAar3J,IAEN,EAKT,IAAI63B,EAAUy3H,GAAkBtvJ,EAAY9C,UAU5C,GAPAi7J,GAAa,sBAAuBn4J,EAAa,CAC/C63B,QAASA,EACT2gI,YAAa5E,KAKX5zJ,EAAYiqG,kBAAoBiuD,GAAQl4J,EAAY4iC,sBAAwBs1H,GAAQl4J,EAAYktD,WAAagrG,GAAQl4J,EAAYktD,QAAQtqB,qBAAuBusH,EAAW,UAAWnvJ,EAAY0iC,YAAcysH,EAAW,UAAWnvJ,EAAYs6F,aAGpP,OAFA+8D,GAAar3J,IAEN,EAKT,IAAK4zJ,GAAa/7H,IAAYu8H,GAAYv8H,GAAU,CAElD,IAAKu8H,GAAYv8H,IAAY4gI,GAAwB5gI,GAAU,CAC7D,GAAIm8H,GAAwBC,wBAAwB3pF,QAAU6kF,EAAW6E,GAAwBC,aAAcp8H,GAAU,OAAO,EAChI,GAAIm8H,GAAwBC,wBAAwBh3I,UAAY+2I,GAAwBC,aAAap8H,GAAU,OAAO,CACxH,CAIA,GAAIs9H,KAAiBG,GAAgBz9H,GAAU,CAC7C,IAAI/4B,EAAaF,GAAcoB,IAAgBA,EAAYlB,WACvDsnE,EAAausF,GAAc3yJ,IAAgBA,EAAYomE,WAE3D,GAAIA,GAActnE,EAGhB,IAFA,IAESkR,EAFQo2D,EAAWvjE,OAEF,EAAGmN,GAAK,IAAKA,EACrClR,EAAWklE,aAAa8/B,GAAU19B,EAAWp2D,IAAI,GAAO0iJ,GAAe1yJ,GAG7E,CAIA,OAFAq3J,GAAar3J,IAEN,CACT,CAIA,OAAIA,aAAuBhG,IA1UF,SAA8BuB,GACvD,IAAI4N,EAASvK,GAAcrD,GAGtB4N,GAAWA,EAAO0uB,UACrB1uB,EAAS,CACPi7D,aAAc2xF,GACdl+H,QAAS,aAIb,IAAIA,EAAUg3H,EAAkBtzJ,EAAQs8B,SACpC8/E,EAAgBk3C,EAAkB1lJ,EAAO0uB,SAE7C,QAAKo+H,GAAmB16J,EAAQ6oE,gBAI5B7oE,EAAQ6oE,eAAiByxF,GAIvB1sJ,EAAOi7D,eAAiB0xF,GACP,QAAZj+H,EAML1uB,EAAOi7D,eAAiBwxF,GACP,QAAZ/9H,IAAwC,mBAAlB8/E,GAAsCq/C,GAA+Br/C,IAK7FrhE,QAAQ6gH,GAAat/H,IAG1Bt8B,EAAQ6oE,eAAiBwxF,GAIvBzsJ,EAAOi7D,eAAiB0xF,GACP,SAAZj+H,EAKL1uB,EAAOi7D,eAAiByxF,GACP,SAAZh+H,GAAsBo/H,GAAwBt/C,GAKhDrhE,QAAQ8gH,GAAgBv/H,IAG7Bt8B,EAAQ6oE,eAAiB0xF,KAIvB3sJ,EAAOi7D,eAAiByxF,KAAkBoB,GAAwBt/C,OAIlExuG,EAAOi7D,eAAiBwxF,KAAqBoB,GAA+Br/C,MAMxEy/C,GAAgBv/H,KAAaq/H,GAA6Br/H,KAAas/H,GAAat/H,MAIpE,0BAAtBs7H,KAAiD8C,GAAmB16J,EAAQ6oE,eASlF,CAsPyCs0F,CAAqB14J,IAC1Dq3J,GAAar3J,IAEN,GAKQ,aAAZ63B,GAAsC,YAAZA,IAA0Bs3H,EAAW,uBAAwBnvJ,EAAY0iC,YAQpGgyH,IAA+C,IAAzB10J,EAAYslE,WAEpCpY,EAAUltD,EAAYs6F,YACtBptC,EAAU8hG,EAAc9hG,EAASkmG,GAAiB,KAClDlmG,EAAU8hG,EAAc9hG,EAASmmG,GAAY,KAC7CnmG,EAAU8hG,EAAc9hG,EAASomG,GAAe,KAE5CtzJ,EAAYs6F,cAAgBptC,IAC9B0hG,EAAUiD,EAAUv0I,QAAS,CAC3B/hB,QAASyE,EAAY8jG,cAEvB9jG,EAAYs6F,YAAcptC,IAM9BirG,GAAa,wBAAyBn4J,EAAa,OAE5C,IA1BLq3J,GAAar3J,IAEN,EAyBX,EAYI24J,GAAoB,SAA2BC,EAAOC,EAAQnuJ,GAEhE,GAAIuqJ,KAA4B,OAAX4D,GAA8B,SAAXA,KAAuBnuJ,KAASrN,GAAYqN,KAAS2rJ,IAC3F,OAAO,EAQT,GAAI9B,KAAoBF,GAAYwE,IAAW1J,EAAWoE,GAAasF,SAAgB,GAAIvE,IAAmBnF,EAAWqE,GAAaqF,SAAgB,IAAK/E,GAAa+E,IAAWxE,GAAYwE,IAC7L,KAGAJ,GAAwBG,KAAW5E,GAAwBC,wBAAwB3pF,QAAU6kF,EAAW6E,GAAwBC,aAAc2E,IAAU5E,GAAwBC,wBAAwBh3I,UAAY+2I,GAAwBC,aAAa2E,MAAY5E,GAAwBE,8BAA8B5pF,QAAU6kF,EAAW6E,GAAwBE,mBAAoB2E,IAAW7E,GAAwBE,8BAA8Bj3I,UAAY+2I,GAAwBE,mBAAmB2E,KAEze,OAAXA,GAAmB7E,GAAwBG,iCAAmCH,GAAwBC,wBAAwB3pF,QAAU6kF,EAAW6E,GAAwBC,aAAcvpJ,IAAUspJ,GAAwBC,wBAAwBh3I,UAAY+2I,GAAwBC,aAAavpJ,KAClS,OAAO,OAIJ,GAAIgrJ,GAAoBmD,SAAgB,GAAI1J,EAAWwE,GAAkB3E,EAActkJ,EAAOgpJ,GAAmB,WAAa,GAAgB,QAAXmF,GAA+B,eAAXA,GAAsC,SAAXA,GAAgC,WAAVD,GAAwD,IAAlC3J,EAAcvkJ,EAAO,WAAkB8qJ,GAAcoD,GAAe,GAAIpE,KAA4BrF,EAAWsE,GAAqBzE,EAActkJ,EAAOgpJ,GAAmB,WAAa,GAAKhpJ,EACja,OAAO,EAGT,OAAO,CACT,EASI+tJ,GAA0B,SAAiC5gI,GAC7D,OAAOA,EAAQ54B,QAAQ,KAAO,CAChC,EAaI65J,GAAsB,SAA6B94J,GACrD,IAAIm0D,EACAzpD,EACAmuJ,EACA/1G,EAGJq1G,GAAa,2BAA4Bn4J,EAAa,MAEtD,IAAIkE,EAAalE,EAAYkE,WAG7B,GAAKA,EAAL,CAIA,IAAI60J,EAAY,CACdl2E,SAAU,GACVG,UAAW,GACXg2E,UAAU,EACVC,kBAAmBnF,IAKrB,IAHAhxG,EAAI5+C,EAAWrB,OAGRigD,KAAK,CAEV,IAAIo2G,EADJ/kG,EAAOjwD,EAAW4+C,GAEdhhD,EAAOo3J,EAAMp3J,KACbsiE,EAAe80F,EAAM90F,aAezB,GAdA15D,EAAiB,UAAT5I,EAAmBqyD,EAAKzpD,MAAQwkJ,EAAW/6F,EAAKzpD,OACxDmuJ,EAASvJ,GAAkBxtJ,GAG3Bi3J,EAAUl2E,SAAWg2E,EACrBE,EAAU/1E,UAAYt4E,EACtBquJ,EAAUC,UAAW,EACrBD,EAAUI,mBAAgB7yJ,EAE1B6xJ,GAAa,wBAAyBn4J,EAAa+4J,GAEnDruJ,EAAQquJ,EAAU/1E,WAGd+1E,EAAUI,gBAMd7B,GAAiBx1J,EAAM9B,GAIlB+4J,EAAUC,UAMf,GAAKvE,KAA4BtF,EAAW,OAAQzkJ,GAApD,CAQIgqJ,KACFhqJ,EAAQskJ,EAActkJ,EAAO0oJ,GAAiB,KAC9C1oJ,EAAQskJ,EAActkJ,EAAO2oJ,GAAY,KACzC3oJ,EAAQskJ,EAActkJ,EAAO4oJ,GAAe,MAK9C,IAAIsF,EAAQtJ,GAAkBtvJ,EAAY9C,UAE1C,GAAKy7J,GAAkBC,EAAOC,EAAQnuJ,GAAtC,CAkBA,IAVIwqJ,IAAoC,OAAX2D,GAA8B,SAAXA,IAE9CvB,GAAiBx1J,EAAM9B,GAGvB0K,EA9wB4B,gBA8wBUA,GAKpCkoJ,IAAgD,WAA1Bz8I,EAAQi7I,IAAuE,mBAAlCA,EAAagI,iBAClF,GAAIh1F,QACF,OAAQgtF,EAAagI,iBAAiBR,EAAOC,IAC3C,IAAK,cACHnuJ,EAAQkoJ,GAAmBnB,WAAW/mJ,GACtC,MAEF,IAAK,mBACHA,EAAQkoJ,GAAmBlB,gBAAgBhnJ,GAQnD,IACM05D,EACFpkE,EAAYq6B,eAAe+pC,EAActiE,EAAM4I,GAG/C1K,EAAY4N,aAAa9L,EAAM4I,GAGjCikJ,EAASkD,EAAUv0I,QACrB,CAAE,MAAO/F,GAAI,CAzCb,CAhBA,MAHE+/I,GAAiBx1J,EAAM9B,EA6D3B,CAIAm4J,GAAa,0BAA2Bn4J,EAAa,KAhHrD,CAiHF,EAQIq5J,GAAqB,SAASA,EAAmB9jG,GACnD,IAAI+jG,EAEAC,EAAiBzB,GAAgBviG,GAMrC,IAFA4iG,GAAa,0BAA2B5iG,EAAU,MAE3C+jG,EAAaC,EAAeC,YAEjCrB,GAAa,yBAA0BmB,EAAY,MAI/ChB,GAAkBgB,KAMlBA,EAAWpsG,mBAAmB8kG,GAChCqH,EAAmBC,EAAWpsG,SAKhC4rG,GAAoBQ,IAKtBnB,GAAa,yBAA0B5iG,EAAU,KACnD,EA8RA,OAnRAs8F,EAAU9hE,SAAW,SAAU0nE,GAC7B,IACIv4J,EACAu6J,EACAz5J,EACA05J,EAJA/3G,EAAM/+C,UAAUC,OAAS,QAAsByD,IAAjB1D,UAAU,GAAmBA,UAAU,GAAK,CAAC,EAiB/E,IARAozJ,IAAkByB,KAGhBA,EAAQ,eAKW,iBAAVA,IAAuBS,GAAQT,GAAQ,CAEhD,GAA8B,mBAAnBA,EAAM79J,SACf,MAAMw1J,EAAgB,8BAItB,GAAqB,iBAFrBqI,EAAQA,EAAM79J,YAGZ,MAAMw1J,EAAgB,kCAG5B,CAIA,IAAKyC,EAAUC,YACb,OAAO2F,EAkBT,GAbK7C,IACH4B,GAAa70G,GAKfkwG,EAAUv0I,QAAU,GAGC,iBAAVm6I,IACTrC,IAAW,GAGTA,IAEF,GAAIqC,EAAMv6J,SAAU,CAClB,IAAI26B,EAAUy3H,GAAkBmI,EAAMv6J,UAEtC,IAAK02J,GAAa/7H,IAAYu8H,GAAYv8H,GACxC,MAAMu3H,EAAgB,0DAE1B,OACK,GAAIqI,aAAiBvF,EAMI,KAF9BuH,GADAv6J,EAAOs4J,GAAc,kBACD39J,cAAco5J,WAAWwE,GAAO,IAEnCnyF,UAA4C,SAA1Bm0F,EAAav8J,UAGX,SAA1Bu8J,EAAav8J,SADtBgC,EAAOu6J,EAKPv6J,EAAKqoD,YAAYkyG,OAEd,CAEL,IAAK3E,KAAeJ,KAAuBC,KACnB,IAAxB8C,EAAMx4J,QAAQ,KACZ,OAAO2zJ,IAAsBoC,GAAsBpC,GAAmBnB,WAAWgG,GAASA,EAQ5F,KAHAv4J,EAAOs4J,GAAcC,IAInB,OAAO3C,GAAa,KAAOE,GAAsBnC,GAAY,EAEjE,CAII3zJ,GAAQ21J,IACVwC,GAAan4J,EAAKyjC,YASpB,IAJA,IAAIg3H,EAAe7B,GAAgB1C,GAAWqC,EAAQv4J,GAI/Cc,EAAc25J,EAAaH,YAE5BlB,GAAkBt4J,KAMlBA,EAAYktD,mBAAmB8kG,GACjCqH,GAAmBr5J,EAAYktD,SAKjC4rG,GAAoB94J,IAKtB,GAAIo1J,GACF,OAAOqC,EAKT,GAAI3C,GAAY,CACd,GAAIC,GAGF,IAFA2E,EAAax1F,GAAuBxtD,KAAKxX,EAAKrF,eAEvCqF,EAAKyjC,YAEV+2H,EAAWnyG,YAAYroD,EAAKyjC,iBAG9B+2H,EAAax6J,EAcf,OAXI40J,GAAa8F,YAAc9F,GAAa+F,iBAQ1CH,EAAazG,GAAWv8I,KAAKq7I,EAAkB2H,GAAY,IAGtDA,CACT,CAEA,IAAII,EAAiBnF,GAAiBz1J,EAAK66J,UAAY76J,EAAKwjC,UAe5D,OAZIiyH,IAAkBf,GAAa,aAAe10J,EAAKrF,eAAiBqF,EAAKrF,cAAcmgK,SAAW96J,EAAKrF,cAAcmgK,QAAQl4J,MAAQqtJ,EAAW8B,EAAc/xJ,EAAKrF,cAAcmgK,QAAQl4J,QAC3Lg4J,EAAiB,aAAe56J,EAAKrF,cAAcmgK,QAAQl4J,KAAO,MAAQg4J,GAKxEpF,KACFoF,EAAiB9K,EAAc8K,EAAgB1G,GAAiB,KAChE0G,EAAiB9K,EAAc8K,EAAgBzG,GAAY,KAC3DyG,EAAiB9K,EAAc8K,EAAgBxG,GAAe,MAGzDV,IAAsBoC,GAAsBpC,GAAmBnB,WAAWqI,GAAkBA,CACrG,EASAjI,EAAUoI,UAAY,SAAUt4G,GAC9B60G,GAAa70G,GAEbizG,IAAa,CACf,EAQA/C,EAAUqI,YAAc,WACtB9D,GAAS,KACTxB,IAAa,CACf,EAaA/C,EAAUsI,iBAAmB,SAAU1wI,EAAK0qC,EAAMzpD,GAE3C0rJ,IACHI,GAAa,CAAC,GAGhB,IAAIoC,EAAQtJ,GAAkB7lI,GAC1BovI,EAASvJ,GAAkBn7F,GAC/B,OAAOwkG,GAAkBC,EAAOC,EAAQnuJ,EAC1C,EAUAmnJ,EAAUuI,QAAU,SAAUhC,EAAYiC,GACZ,mBAAjBA,IAIXzuD,GAAMwsD,GAAcxsD,GAAMwsD,IAAe,GACzCxJ,EAAUhjD,GAAMwsD,GAAaiC,GAC/B,EAWAxI,EAAUyI,WAAa,SAAUlC,GAC/B,GAAIxsD,GAAMwsD,GACR,OAAOzJ,EAAS/iD,GAAMwsD,GAE1B,EASAvG,EAAU0I,YAAc,SAAUnC,GAC5BxsD,GAAMwsD,KACRxsD,GAAMwsD,GAAc,GAExB,EAQAvG,EAAU2I,eAAiB,WACzB5uD,GAAQ,CAAC,CACX,EAEOimD,CACT,CAEaD,EAId,CAnuDiF7+G,0BCDlF2mB,EAAOP,QAAU,SAAqB62B,GAIpC,IAHA,IAAItuF,EAAS,GACTogB,EAAOkuE,EAAMntF,OAERkD,EAAQ,EAAGA,EAAQ+b,EAAM/b,IAAS,CACzC,IAAI00J,EAAQzqE,EAAM3kE,WAAWtlB,GAE7B,GAAI00J,GAAS,OAAUA,GAAS,OAAU34I,EAAO/b,EAAQ,EAAG,CAC1D,IAAI20J,EAAS1qE,EAAM3kE,WAAWtlB,EAAQ,GAElC20J,GAAU,OAAUA,GAAU,QAEhCD,EAA2B,MAAlBA,EAAQ,OAAkBC,EAAS,MAAS,MACrD30J,GAAS,EAEb,CAGI00J,EAAQ,IACV/4J,EAAOY,KAAKm4J,GAKVA,EAAQ,MACV/4J,EAAOY,KAAMm4J,GAAS,EAAK,KAC3B/4J,EAAOY,KAAc,GAARm4J,EAAc,MAKzBA,EAAQ,OAAWA,GAAS,OAAUA,EAAQ,OAChD/4J,EAAOY,KAAMm4J,GAAS,GAAM,KAC5B/4J,EAAOY,KAAOm4J,GAAS,EAAK,GAAM,KAClC/4J,EAAOY,KAAc,GAARm4J,EAAc,MAKzBA,GAAS,OAAWA,GAAS,SAC/B/4J,EAAOY,KAAMm4J,GAAS,GAAM,KAC5B/4J,EAAOY,KAAOm4J,GAAS,GAAM,GAAM,KACnC/4J,EAAOY,KAAOm4J,GAAS,EAAK,GAAM,KAClC/4J,EAAOY,KAAc,GAARm4J,EAAc,MAK7B/4J,EAAOY,KAAK,IAAM,IAAM,IAC1B,CAEA,OAAO,IAAIoyB,WAAWhzB,GAAQopB,MAChC,mCCxBI6vI,YAPAC,EAAuB,iBAAZ53I,QAAuBA,QAAU,KAC5C63I,EAAeD,GAAwB,mBAAZA,EAAEn6I,MAC7Bm6I,EAAEn6I,MACF,SAAsBjhB,EAAQopH,EAAU9lH,GACxC,OAAOma,SAAS/G,UAAUuK,MAAM/J,KAAKlX,EAAQopH,EAAU9lH,EACzD,EAIA63J,EADEC,GAA0B,mBAAdA,EAAEzpH,QACCypH,EAAEzpH,QACVrtC,OAAOkrC,sBACC,SAAwBxvC,GACvC,OAAOsE,OAAO6nC,oBAAoBnsC,GAC/BC,OAAOqE,OAAOkrC,sBAAsBxvC,GACzC,EAEiB,SAAwBA,GACvC,OAAOsE,OAAO6nC,oBAAoBnsC,EACpC,EAOF,IAAIs7J,EAAcjuH,OAAOC,OAAS,SAAqBpiC,GACrD,OAAOA,GAAUA,CACnB,EAEA,SAASqwJ,IACPA,EAAajrH,KAAKp5B,KAAKgC,KACzB,CACAghD,EAAOP,QAAU4hG,EACjBrhG,EAAOP,QAAQ++B,KAwYf,SAAc8iE,EAASl5J,GACrB,OAAO,IAAIsE,GAAQ,SAAUD,EAAS+sC,GACpC,SAAS+nH,EAAcjuI,GACrBguI,EAAQE,eAAep5J,EAAMmzC,GAC7B/B,EAAOlmB,EACT,CAEA,SAASioB,IAC+B,mBAA3B+lH,EAAQE,gBACjBF,EAAQE,eAAe,QAASD,GAElC90J,EAAQ,GAAG0K,MAAM6F,KAAK9T,WACxB,CAEAu4J,EAA+BH,EAASl5J,EAAMmzC,EAAU,CAAEijD,MAAM,IACnD,UAATp2F,GAMR,SAAuCk5J,EAASviI,EAAS28F,GAC7B,mBAAf4lC,EAAQ70C,IACjBg1C,EAA+BH,EAAS,QAASviI,EAPO,CAAEy/D,MAAM,GASpE,CATMkjE,CAA8BJ,EAASC,EAE3C,GACF,EAxZAF,EAAaA,aAAeA,EAE5BA,EAAa7kJ,UAAU27H,aAAUvrI,EACjCy0J,EAAa7kJ,UAAUmlJ,aAAe,EACtCN,EAAa7kJ,UAAUolJ,mBAAgBh1J,EAIvC,IAAIi1J,EAAsB,GAE1B,SAASC,EAAcC,GACrB,GAAwB,mBAAbA,EACT,MAAM,IAAI1kJ,UAAU,0EAA4E0kJ,EAEpG,CAoCA,SAASC,EAAiBhe,GACxB,YAA2Bp3I,IAAvBo3I,EAAK4d,cACAP,EAAaQ,oBACf7d,EAAK4d,aACd,CAkDA,SAASK,EAAan8J,EAAQ6hB,EAAMo6I,EAAUj7I,GAC5C,IAAIpb,EACAozB,EACAxzB,EA1HsBmvH,EAgJ1B,GApBAqnC,EAAcC,QAGCn1J,KADfkyB,EAASh5B,EAAOqyI,UAEdr5G,EAASh5B,EAAOqyI,QAAU/tI,OAAOkT,OAAO,MACxCxX,EAAO67J,aAAe,SAIK/0J,IAAvBkyB,EAAOojI,cACTp8J,EAAOk0H,KAAK,cAAeryG,EACfo6I,EAASA,SAAWA,EAASA,SAAWA,GAIpDjjI,EAASh5B,EAAOqyI,SAElB7sI,EAAWwzB,EAAOnX,SAGH/a,IAAbtB,EAEFA,EAAWwzB,EAAOnX,GAAQo6I,IACxBj8J,EAAO67J,kBAeT,GAbwB,mBAAbr2J,EAETA,EAAWwzB,EAAOnX,GAChBb,EAAU,CAACi7I,EAAUz2J,GAAY,CAACA,EAAUy2J,GAErCj7I,EACTxb,EAAS6d,QAAQ44I,GAEjBz2J,EAAS1C,KAAKm5J,IAIhBr2J,EAAIs2J,EAAiBl8J,IACb,GAAKwF,EAASnC,OAASuC,IAAMJ,EAAS62J,OAAQ,CACpD72J,EAAS62J,QAAS,EAGlB,IAAIxa,EAAI,IAAI39H,MAAM,+CACE1e,EAASnC,OAAS,IAAMonB,OAAO5I,GADjC,qEAIlBggI,EAAEv/I,KAAO,8BACTu/I,EAAE2Z,QAAUx7J,EACZ6hJ,EAAEhgI,KAAOA,EACTggI,EAAE7hI,MAAQxa,EAASnC,OA7KGsxH,EA8KHktB,EA7KnBl/H,SAAWA,QAAQY,MAAMZ,QAAQY,KAAKoxG,EA8KxC,CAGF,OAAO30H,CACT,CAaA,SAASs8J,IACP,IAAKpjJ,KAAKqjJ,MAGR,OAFArjJ,KAAKlZ,OAAO07J,eAAexiJ,KAAK2I,KAAM3I,KAAKsjJ,QAC3CtjJ,KAAKqjJ,OAAQ,EACY,IAArBn5J,UAAUC,OACL6V,KAAK+iJ,SAAS/kJ,KAAKgC,KAAKlZ,QAC1BkZ,KAAK+iJ,SAASh7I,MAAM/H,KAAKlZ,OAAQoD,UAE5C,CAEA,SAASq5J,EAAUz8J,EAAQ6hB,EAAMo6I,GAC/B,IAAI73J,EAAQ,CAAEm4J,OAAO,EAAOC,YAAQ11J,EAAW9G,OAAQA,EAAQ6hB,KAAMA,EAAMo6I,SAAUA,GACjFh7B,EAAUq7B,EAAY13I,KAAKxgB,GAG/B,OAFA68H,EAAQg7B,SAAWA,EACnB73J,EAAMo4J,OAASv7B,EACRA,CACT,CAyHA,SAASy7B,EAAW18J,EAAQ6hB,EAAMykD,GAChC,IAAIttC,EAASh5B,EAAOqyI,QAEpB,QAAevrI,IAAXkyB,EACF,MAAO,GAET,IAAI2jI,EAAa3jI,EAAOnX,GACxB,YAAmB/a,IAAf61J,EACK,GAEiB,mBAAfA,EACFr2F,EAAS,CAACq2F,EAAWV,UAAYU,GAAc,CAACA,GAElDr2F,EAsDT,SAAyBwnF,GAEvB,IADA,IAAI5lC,EAAM,IAAI3kH,MAAMuqJ,EAAIzqJ,QACfmN,EAAI,EAAGA,EAAI03G,EAAI7kH,SAAUmN,EAChC03G,EAAI13G,GAAKs9I,EAAIt9I,GAAGyrJ,UAAYnO,EAAIt9I,GAElC,OAAO03G,CACT,CA3DI00C,CAAgBD,GAAcE,EAAWF,EAAYA,EAAWt5J,OACpE,CAmBA,SAASy5J,EAAcj7I,GACrB,IAAImX,EAAS9f,KAAKm5H,QAElB,QAAevrI,IAAXkyB,EAAsB,CACxB,IAAI2jI,EAAa3jI,EAAOnX,GAExB,GAA0B,mBAAf86I,EACT,OAAO,EACF,QAAmB71J,IAAf61J,EACT,OAAOA,EAAWt5J,MAEtB,CAEA,OAAO,CACT,CAMA,SAASw5J,EAAW/O,EAAK7+G,GAEvB,IADA,IAAIkjG,EAAO,IAAI5uI,MAAM0rC,GACZz+B,EAAI,EAAGA,EAAIy+B,IAAKz+B,EACvB2hI,EAAK3hI,GAAKs9I,EAAIt9I,GAChB,OAAO2hI,CACT,CA2CA,SAASwpB,EAA+BH,EAASl5J,EAAM25J,EAAUrmC,GAC/D,GAA0B,mBAAf4lC,EAAQ70C,GACbiP,EAAMl9B,KACR8iE,EAAQ9iE,KAAKp2F,EAAM25J,GAEnBT,EAAQ70C,GAAGrkH,EAAM25J,OAEd,IAAwC,mBAA7BT,EAAQ7tJ,iBAYxB,MAAM,IAAI4J,UAAU,6EAA+EikJ,GATnGA,EAAQ7tJ,iBAAiBrL,GAAM,SAASy6J,EAAaptH,GAG/CimF,EAAMl9B,MACR8iE,EAAQ5tJ,oBAAoBtL,EAAMy6J,GAEpCd,EAAStsH,EACX,GAGF,CACF,CAraArrC,OAAOgS,eAAeilJ,EAAc,sBAAuB,CACzDplJ,YAAY,EACZtT,IAAK,WACH,OAAOk5J,CACT,EACAh5J,IAAK,SAAS4sC,GACZ,GAAmB,iBAARA,GAAoBA,EAAM,GAAK2rH,EAAY3rH,GACpD,MAAM,IAAI+rF,WAAW,kGAAoG/rF,EAAM,KAEjIosH,EAAsBpsH,CACxB,IAGF4rH,EAAajrH,KAAO,gBAEGxpC,IAAjBoS,KAAKm5H,SACLn5H,KAAKm5H,UAAY/tI,OAAO81C,eAAelhC,MAAMm5H,UAC/Cn5H,KAAKm5H,QAAU/tI,OAAOkT,OAAO,MAC7B0B,KAAK2iJ,aAAe,GAGtB3iJ,KAAK4iJ,cAAgB5iJ,KAAK4iJ,oBAAiBh1J,CAC7C,EAIAy0J,EAAa7kJ,UAAUsmJ,gBAAkB,SAAyB/tH,GAChE,GAAiB,iBAANA,GAAkBA,EAAI,GAAKqsH,EAAYrsH,GAChD,MAAM,IAAIysF,WAAW,gFAAkFzsF,EAAI,KAG7G,OADA/1B,KAAK4iJ,cAAgB7sH,EACd/1B,IACT,EAQAqiJ,EAAa7kJ,UAAUumJ,gBAAkB,WACvC,OAAOf,EAAiBhjJ,KAC1B,EAEAqiJ,EAAa7kJ,UAAUw9G,KAAO,SAAcryG,GAE1C,IADA,IAAIve,EAAO,GACFkN,EAAI,EAAGA,EAAIpN,UAAUC,OAAQmN,IAAKlN,EAAKR,KAAKM,UAAUoN,IAC/D,IAAI0sJ,EAAoB,UAATr7I,EAEXmX,EAAS9f,KAAKm5H,QAClB,QAAevrI,IAAXkyB,EACFkkI,EAAWA,QAA4Bp2J,IAAjBkyB,EAAOpW,WAC1B,IAAKs6I,EACR,OAAO,EAGT,GAAIA,EAAS,CACX,IAAIC,EAGJ,GAFI75J,EAAKD,OAAS,IAChB85J,EAAK75J,EAAK,IACR65J,aAAcj5I,MAGhB,MAAMi5I,EAGR,IAAI3vI,EAAM,IAAItJ,MAAM,oBAAsBi5I,EAAK,KAAOA,EAAGxqI,QAAU,IAAM,KAEzE,MADAnF,EAAIvS,QAAUkiJ,EACR3vI,CACR,CAEA,IAAIyL,EAAUD,EAAOnX,GAErB,QAAgB/a,IAAZmyB,EACF,OAAO,EAET,GAAuB,mBAAZA,EACToiI,EAAapiI,EAAS/f,KAAM5V,OAE5B,KAAIuE,EAAMoxB,EAAQ51B,OACd+5J,EAAYP,EAAW5jI,EAASpxB,GACpC,IAAS2I,EAAI,EAAGA,EAAI3I,IAAO2I,EACzB6qJ,EAAa+B,EAAU5sJ,GAAI0I,KAAM5V,EAHX,CAM1B,OAAO,CACT,EAgEAi4J,EAAa7kJ,UAAU+1C,YAAc,SAAqB5qC,EAAMo6I,GAC9D,OAAOE,EAAajjJ,KAAM2I,EAAMo6I,GAAU,EAC5C,EAEAV,EAAa7kJ,UAAUiwG,GAAK40C,EAAa7kJ,UAAU+1C,YAEnD8uG,EAAa7kJ,UAAU2mJ,gBACnB,SAAyBx7I,EAAMo6I,GAC7B,OAAOE,EAAajjJ,KAAM2I,EAAMo6I,GAAU,EAC5C,EAoBJV,EAAa7kJ,UAAUgiF,KAAO,SAAc72E,EAAMo6I,GAGhD,OAFAD,EAAcC,GACd/iJ,KAAKytG,GAAG9kG,EAAM46I,EAAUvjJ,KAAM2I,EAAMo6I,IAC7B/iJ,IACT,EAEAqiJ,EAAa7kJ,UAAU4mJ,oBACnB,SAA6Bz7I,EAAMo6I,GAGjC,OAFAD,EAAcC,GACd/iJ,KAAKmkJ,gBAAgBx7I,EAAM46I,EAAUvjJ,KAAM2I,EAAMo6I,IAC1C/iJ,IACT,EAGJqiJ,EAAa7kJ,UAAUglJ,eACnB,SAAwB75I,EAAMo6I,GAC5B,IAAIr8J,EAAMo5B,EAAQ34B,EAAUmQ,EAAG+sJ,EAK/B,GAHAvB,EAAcC,QAGCn1J,KADfkyB,EAAS9f,KAAKm5H,SAEZ,OAAOn5H,KAGT,QAAapS,KADblH,EAAOo5B,EAAOnX,IAEZ,OAAO3I,KAET,GAAItZ,IAASq8J,GAAYr8J,EAAKq8J,WAAaA,EACb,KAAtB/iJ,KAAK2iJ,aACT3iJ,KAAKm5H,QAAU/tI,OAAOkT,OAAO,cAEtBwhB,EAAOnX,GACVmX,EAAO0iI,gBACTxiJ,KAAKg7G,KAAK,iBAAkBryG,EAAMjiB,EAAKq8J,UAAYA,SAElD,GAAoB,mBAATr8J,EAAqB,CAGrC,IAFAS,GAAY,EAEPmQ,EAAI5Q,EAAKyD,OAAS,EAAGmN,GAAK,EAAGA,IAChC,GAAI5Q,EAAK4Q,KAAOyrJ,GAAYr8J,EAAK4Q,GAAGyrJ,WAAaA,EAAU,CACzDsB,EAAmB39J,EAAK4Q,GAAGyrJ,SAC3B57J,EAAWmQ,EACX,KACF,CAGF,GAAInQ,EAAW,EACb,OAAO6Y,KAEQ,IAAb7Y,EACFT,EAAKwjB,QAiIf,SAAmBxjB,EAAM2G,GACvB,KAAOA,EAAQ,EAAI3G,EAAKyD,OAAQkD,IAC9B3G,EAAK2G,GAAS3G,EAAK2G,EAAQ,GAC7B3G,EAAKujB,KACP,CAnIUq6I,CAAU59J,EAAMS,GAGE,IAAhBT,EAAKyD,SACP21B,EAAOnX,GAAQjiB,EAAK,SAEQkH,IAA1BkyB,EAAO0iI,gBACTxiJ,KAAKg7G,KAAK,iBAAkBryG,EAAM07I,GAAoBtB,EAC1D,CAEA,OAAO/iJ,IACT,EAEJqiJ,EAAa7kJ,UAAUkxG,IAAM2zC,EAAa7kJ,UAAUglJ,eAEpDH,EAAa7kJ,UAAU+mJ,mBACnB,SAA4B57I,GAC1B,IAAIu7I,EAAWpkI,EAAQxoB,EAGvB,QAAe1J,KADfkyB,EAAS9f,KAAKm5H,SAEZ,OAAOn5H,KAGT,QAA8BpS,IAA1BkyB,EAAO0iI,eAUT,OATyB,IAArBt4J,UAAUC,QACZ6V,KAAKm5H,QAAU/tI,OAAOkT,OAAO,MAC7B0B,KAAK2iJ,aAAe,QACM/0J,IAAjBkyB,EAAOnX,KACY,KAAtB3I,KAAK2iJ,aACT3iJ,KAAKm5H,QAAU/tI,OAAOkT,OAAO,aAEtBwhB,EAAOnX,IAEX3I,KAIT,GAAyB,IAArB9V,UAAUC,OAAc,CAC1B,IACIsC,EADAD,EAAOpB,OAAOoB,KAAKszB,GAEvB,IAAKxoB,EAAI,EAAGA,EAAI9K,EAAKrC,SAAUmN,EAEjB,oBADZ7K,EAAMD,EAAK8K,KAEX0I,KAAKukJ,mBAAmB93J,GAK1B,OAHAuT,KAAKukJ,mBAAmB,kBACxBvkJ,KAAKm5H,QAAU/tI,OAAOkT,OAAO,MAC7B0B,KAAK2iJ,aAAe,EACb3iJ,IACT,CAIA,GAAyB,mBAFzBkkJ,EAAYpkI,EAAOnX,IAGjB3I,KAAKwiJ,eAAe75I,EAAMu7I,QACrB,QAAkBt2J,IAAds2J,EAET,IAAK5sJ,EAAI4sJ,EAAU/5J,OAAS,EAAGmN,GAAK,EAAGA,IACrC0I,KAAKwiJ,eAAe75I,EAAMu7I,EAAU5sJ,IAIxC,OAAO0I,IACT,EAmBJqiJ,EAAa7kJ,UAAU0mJ,UAAY,SAAmBv7I,GACpD,OAAO66I,EAAWxjJ,KAAM2I,GAAM,EAChC,EAEA05I,EAAa7kJ,UAAUgnJ,aAAe,SAAsB77I,GAC1D,OAAO66I,EAAWxjJ,KAAM2I,GAAM,EAChC,EAEA05I,EAAauB,cAAgB,SAAStB,EAAS35I,GAC7C,MAAqC,mBAA1B25I,EAAQsB,cACVtB,EAAQsB,cAAcj7I,GAEtBi7I,EAAc5lJ,KAAKskJ,EAAS35I,EAEvC,EAEA05I,EAAa7kJ,UAAUomJ,cAAgBA,EAiBvCvB,EAAa7kJ,UAAUinJ,WAAa,WAClC,OAAOzkJ,KAAK2iJ,aAAe,EAAIV,EAAejiJ,KAAKm5H,SAAW,EAChE,kBCzaA,IAAIurB,EAA6B,EAAQ,MACC,EAAQ,MAET,QAAIA,EAC7C1jG,EAAOP,QAAUikG,kBCJjB,IAAIA,EAA6B,EAAQ,MAErCC,EADsC,EAAQ,WAEE,IAAzCA,EAAmC,IAAmBA,EAAmC,EAAID,QAC/C,IAA9CC,EAAwC,SAAmBA,EAAwC,OAAID,GAClH1jG,EAAOP,QAAUikG,+BCFjB1jG,EAAOP,QAAU,WACf,GAA0B,iBAAf4tF,WACT,OAAOA,WAET,IAAIjmH,EACJ,IAGEA,EAAIpoB,MAAQ,IAAIuE,SAAS,cAAb,EACd,CAAE,MAAO4uB,GAEP,GAAsB,iBAAXlyC,OACT,OAAOA,OAIT,GAAoB,iBAAT8c,KACT,OAAOA,KAIT,QAAsB,IAAX,EAAAqqB,EACT,OAAO,EAAAA,CAEX,CACA,OAAOA,CACT,CA1BiB,gCCDjB,IAAI4iH,EAAa,EAAQ,MAErB4Z,EAAQx5J,OAAOoS,UAAUtc,SACzBqO,EAAiBnE,OAAOoS,UAAUjO,eAwDtCyxD,EAAOP,QAnBO,SAAiB/5D,EAAMiX,EAAU+3B,GAC3C,IAAKs1G,EAAWrtI,GACZ,MAAM,IAAIU,UAAU,+BAGxB,IAAI6xG,EACAhmH,UAAUC,QAAU,IACpB+lH,EAAWx6E,GAGU,mBAArBkvH,EAAM5mJ,KAAKtX,GA7CA,SAAsB+Z,EAAO9C,EAAUuyG,GACtD,IAAK,IAAI54G,EAAI,EAAG3I,EAAM8R,EAAMtW,OAAQmN,EAAI3I,EAAK2I,IACrC/H,EAAeyO,KAAKyC,EAAOnJ,KACX,MAAZ44G,EACAvyG,EAAS8C,EAAMnJ,GAAIA,EAAGmJ,GAEtB9C,EAASK,KAAKkyG,EAAUzvG,EAAMnJ,GAAIA,EAAGmJ,GAIrD,CAoCQokJ,CAAan+J,EAAMiX,EAAUuyG,GACN,iBAATxpH,EAnCF,SAAuBorE,EAAQn0D,EAAUuyG,GACzD,IAAK,IAAI54G,EAAI,EAAG3I,EAAMmjE,EAAO3nE,OAAQmN,EAAI3I,EAAK2I,IAE1B,MAAZ44G,EACAvyG,EAASm0D,EAAOlzD,OAAOtH,GAAIA,EAAGw6D,GAE9Bn0D,EAASK,KAAKkyG,EAAUp+C,EAAOlzD,OAAOtH,GAAIA,EAAGw6D,EAGzD,CA2BQgzF,CAAcp+J,EAAMiX,EAAUuyG,GAzBlB,SAAuBrnG,EAAQlL,EAAUuyG,GACzD,IAAK,IAAIz/E,KAAK5nB,EACNtZ,EAAeyO,KAAK6K,EAAQ4nB,KACZ,MAAZy/E,EACAvyG,EAASkL,EAAO4nB,GAAIA,EAAG5nB,GAEvBlL,EAASK,KAAKkyG,EAAUrnG,EAAO4nB,GAAIA,EAAG5nB,GAItD,CAiBQk8I,CAAcr+J,EAAMiX,EAAUuyG,EAEtC,yBCvDA,IACI/3G,EAAQ9N,MAAMmT,UAAUrF,MACxBysJ,EAAQx5J,OAAOoS,UAAUtc,SAG7B8/D,EAAOP,QAAU,SAAcukF,GAC3B,IAAIl+I,EAASkZ,KACb,GAAsB,mBAAXlZ,GAJA,sBAIyB89J,EAAM5mJ,KAAKlX,GAC3C,MAAM,IAAIuX,UARE,kDAQwBvX,GAyBxC,IAvBA,IAEIk+J,EAFA56J,EAAO+N,EAAM6F,KAAK9T,UAAW,GAqB7B+6J,EAActjK,KAAKC,IAAI,EAAGkF,EAAOqD,OAASC,EAAKD,QAC/C+6J,EAAY,GACP5tJ,EAAI,EAAGA,EAAI2tJ,EAAa3tJ,IAC7B4tJ,EAAUt7J,KAAK,IAAM0N,GAKzB,GAFA0tJ,EAAQzgJ,SAAS,SAAU,oBAAsB2gJ,EAAU1iK,KAAK,KAAO,4CAA/D+hB,EAxBK,WACT,GAAIvE,gBAAgBglJ,EAAO,CACvB,IAAIh8J,EAASlC,EAAOihB,MAChB/H,KACA5V,EAAKrD,OAAOoR,EAAM6F,KAAK9T,aAE3B,OAAIkB,OAAOpC,KAAYA,EACZA,EAEJgX,IACX,CACI,OAAOlZ,EAAOihB,MACVi9H,EACA56I,EAAKrD,OAAOoR,EAAM6F,KAAK9T,YAGnC,IAUIpD,EAAO0W,UAAW,CAClB,IAAI2nJ,EAAQ,WAAkB,EAC9BA,EAAM3nJ,UAAY1W,EAAO0W,UACzBwnJ,EAAMxnJ,UAAY,IAAI2nJ,EACtBA,EAAM3nJ,UAAY,IACtB,CAEA,OAAOwnJ,CACX,+BCjDA,IAAIz6G,EAAiB,EAAQ,MAE7ByW,EAAOP,QAAUl8C,SAAS/G,UAAUkO,MAAQ6+B,kCCFxC38C,YAEAw3J,EAAeC,YACfC,EAAY/gJ,SACZ2mI,EAAa7sI,UAGbknJ,EAAwB,SAAUC,GACrC,IACC,OAAOF,EAAU,yBAA2BE,EAAmB,iBAAxDF,EACR,CAAE,MAAOnyH,GAAI,CACd,EAEIy3G,EAAQx/I,OAAOsoC,yBACnB,GAAIk3G,EACH,IACCA,EAAM,CAAC,EAAG,GACX,CAAE,MAAOz3G,GACRy3G,EAAQ,IACT,CAGD,IAAI6a,EAAiB,WACpB,MAAM,IAAIva,CACX,EACIwa,EAAiB9a,EACjB,WACF,IAGC,OAAO6a,CACR,CAAE,MAAOE,GACR,IAEC,OAAO/a,EAAM1gJ,UAAW,UAAUP,GACnC,CAAE,MAAOi8J,GACR,OAAOH,CACR,CACD,CACD,CAbE,GAcAA,EAECI,EAAa,EAAQ,KAAR,GAEbC,EAAW16J,OAAO81C,gBAAkB,SAAUz9C,GAAK,OAAOA,EAAE+a,SAAW,EAEvEunJ,EAAY,CAAC,EAEbC,EAAmC,oBAAfhqI,WAA6BpuB,EAAYk4J,EAAS9pI,YAEtEiqI,EAAa,CAChB,mBAA8C,oBAAnBl4F,eAAiCngE,EAAYmgE,eACxE,UAAW1jE,MACX,gBAAwC,oBAAhB67J,YAA8Bt4J,EAAYs4J,YAClE,2BAA4BL,EAAaC,EAAS,GAAGpoJ,OAAOC,aAAe/P,EAC3E,mCAAoCA,EACpC,kBAAmBm4J,EACnB,mBAAoBA,EACpB,2BAA4BA,EAC5B,2BAA4BA,EAC5B,YAAgC,oBAAZI,QAA0Bv4J,EAAYu4J,QAC1D,WAA8B,oBAAXC,OAAyBx4J,EAAYw4J,OACxD,kBAA4C,oBAAlBC,cAAgCz4J,EAAYy4J,cACtE,mBAA8C,oBAAnBC,eAAiC14J,EAAY04J,eACxE,YAAa1oH,QACb,aAAkC,oBAAb2oH,SAA2B34J,EAAY24J,SAC5D,SAAU99F,KACV,cAAeqM,UACf,uBAAwB7D,mBACxB,cAAewG,UACf,uBAAwBzH,mBACxB,UAAWhlD,MACX,SAAUw7I,KACV,cAAeC,UACf,iBAA0C,oBAAjBC,aAA+B94J,EAAY84J,aACpE,iBAA0C,oBAAjBC,aAA+B/4J,EAAY+4J,aACpE,yBAA0D,oBAAzBC,qBAAuCh5J,EAAYg5J,qBACpF,aAActB,EACd,sBAAuBS,EACvB,cAAoC,oBAAdc,UAA4Bj5J,EAAYi5J,UAC9D,eAAsC,oBAAfC,WAA6Bl5J,EAAYk5J,WAChE,eAAsC,oBAAfC,WAA6Bn5J,EAAYm5J,WAChE,aAAc1yH,SACd,UAAWD,MACX,sBAAuByxH,EAAaC,EAASA,EAAS,GAAGpoJ,OAAOC,cAAgB/P,EAChF,SAA0B,iBAAT+b,KAAoBA,KAAO/b,EAC5C,QAAwB,oBAAR/E,IAAsB+E,EAAY/E,IAClD,yBAAyC,oBAARA,KAAwBg9J,EAAyBC,GAAS,IAAIj9J,KAAM6U,OAAOC,aAAtC/P,EACtE,SAAUjM,KACV,WAAYwyC,OACZ,WAAY/oC,OACZ,eAAgB0tB,WAChB,aAActK,SACd,iBAAgC,IAAZ9gB,EAA0BE,EAAYF,EAC1D,UAA4B,oBAAV+mJ,MAAwB7mJ,EAAY6mJ,MACtD,eAAgBjyB,WAChB,mBAAoBvkH,eACpB,YAAgC,oBAAZqM,QAA0B1c,EAAY0c,QAC1D,WAAYsnD,OACZ,QAAwB,oBAAR7oE,IAAsB6E,EAAY7E,IAClD,yBAAyC,oBAARA,KAAwB88J,EAAyBC,GAAS,IAAI/8J,KAAM2U,OAAOC,aAAtC/P,EACtE,sBAAoD,oBAAtBo5J,kBAAoCp5J,EAAYo5J,kBAC9E,WAAYz1I,OACZ,4BAA6Bs0I,EAAaC,EAAS,GAAGpoJ,OAAOC,aAAe/P,EAC5E,WAAYi4J,EAAanoJ,OAAS9P,EAClC,gBAAiBw3J,EACjB,mBAAoBM,EACpB,eAAgBM,EAChB,cAAe9a,EACf,eAAsC,oBAAflvH,WAA6BpuB,EAAYouB,WAChE,sBAAoD,oBAAtBirI,kBAAoCr5J,EAAYq5J,kBAC9E,gBAAwC,oBAAhBC,YAA8Bt5J,EAAYs5J,YAClE,gBAAwC,oBAAhBC,YAA8Bv5J,EAAYu5J,YAClE,aAAcC,SACd,YAAgC,oBAAZhvH,QAA0BxqC,EAAYwqC,QAC1D,YAAgC,oBAAZivH,QAA0Bz5J,EAAYy5J,QAC1D,YAAgC,oBAAZhvH,QAA0BzqC,EAAYyqC,SAG3D,IACC,KAAK3uB,KACN,CAAE,MAAOypB,GAER,IAAIm0H,EAAaxB,EAASA,EAAS3yH,IACnC8yH,EAAW,qBAAuBqB,CACnC,CAEA,IAAIC,EAAS,SAASA,EAAOn+J,GAC5B,IAAI4I,EACJ,GAAa,oBAAT5I,EACH4I,EAAQuzJ,EAAsB,6BACxB,GAAa,wBAATn8J,EACV4I,EAAQuzJ,EAAsB,wBACxB,GAAa,6BAATn8J,EACV4I,EAAQuzJ,EAAsB,8BACxB,GAAa,qBAATn8J,EAA6B,CACvC,IAAI4B,EAAKu8J,EAAO,4BACZv8J,IACHgH,EAAQhH,EAAGwS,UAEb,MAAO,GAAa,6BAATpU,EAAqC,CAC/C,IAAIo+J,EAAMD,EAAO,oBACbC,IACHx1J,EAAQ8zJ,EAAS0B,EAAIhqJ,WAEvB,CAIA,OAFAyoJ,EAAW78J,GAAQ4I,EAEZA,CACR,EAEIy1J,EAAiB,CACpB,yBAA0B,CAAC,cAAe,aAC1C,mBAAoB,CAAC,QAAS,aAC9B,uBAAwB,CAAC,QAAS,YAAa,WAC/C,uBAAwB,CAAC,QAAS,YAAa,WAC/C,oBAAqB,CAAC,QAAS,YAAa,QAC5C,sBAAuB,CAAC,QAAS,YAAa,UAC9C,2BAA4B,CAAC,gBAAiB,aAC9C,mBAAoB,CAAC,yBAA0B,aAC/C,4BAA6B,CAAC,yBAA0B,YAAa,aACrE,qBAAsB,CAAC,UAAW,aAClC,sBAAuB,CAAC,WAAY,aACpC,kBAAmB,CAAC,OAAQ,aAC5B,mBAAoB,CAAC,QAAS,aAC9B,uBAAwB,CAAC,YAAa,aACtC,0BAA2B,CAAC,eAAgB,aAC5C,0BAA2B,CAAC,eAAgB,aAC5C,sBAAuB,CAAC,WAAY,aACpC,cAAe,CAAC,oBAAqB,aACrC,uBAAwB,CAAC,oBAAqB,YAAa,aAC3D,uBAAwB,CAAC,YAAa,aACtC,wBAAyB,CAAC,aAAc,aACxC,wBAAyB,CAAC,aAAc,aACxC,cAAe,CAAC,OAAQ,SACxB,kBAAmB,CAAC,OAAQ,aAC5B,iBAAkB,CAAC,MAAO,aAC1B,oBAAqB,CAAC,SAAU,aAChC,oBAAqB,CAAC,SAAU,aAChC,sBAAuB,CAAC,SAAU,YAAa,YAC/C,qBAAsB,CAAC,SAAU,YAAa,WAC9C,qBAAsB,CAAC,UAAW,aAClC,sBAAuB,CAAC,UAAW,YAAa,QAChD,gBAAiB,CAAC,UAAW,OAC7B,mBAAoB,CAAC,UAAW,UAChC,oBAAqB,CAAC,UAAW,WACjC,wBAAyB,CAAC,aAAc,aACxC,4BAA6B,CAAC,iBAAkB,aAChD,oBAAqB,CAAC,SAAU,aAChC,iBAAkB,CAAC,MAAO,aAC1B,+BAAgC,CAAC,oBAAqB,aACtD,oBAAqB,CAAC,SAAU,aAChC,oBAAqB,CAAC,SAAU,aAChC,yBAA0B,CAAC,cAAe,aAC1C,wBAAyB,CAAC,aAAc,aACxC,uBAAwB,CAAC,YAAa,aACtC,wBAAyB,CAAC,aAAc,aACxC,+BAAgC,CAAC,oBAAqB,aACtD,yBAA0B,CAAC,cAAe,aAC1C,yBAA0B,CAAC,cAAe,aAC1C,sBAAuB,CAAC,WAAY,aACpC,qBAAsB,CAAC,UAAW,aAClC,qBAAsB,CAAC,UAAW,cAG/B/7I,EAAO,EAAQ,MACfkgI,EAAS,EAAQ,MACjB8b,EAAUh8I,EAAK1N,KAAKuG,SAASvG,KAAM3T,MAAMmT,UAAUzW,QACnD4gK,EAAej8I,EAAK1N,KAAKuG,SAASwD,MAAO1d,MAAMmT,UAAUmE,QACzDimJ,EAAWl8I,EAAK1N,KAAKuG,SAASvG,KAAMuT,OAAO/T,UAAUnN,SACrDw3J,EAAYn8I,EAAK1N,KAAKuG,SAASvG,KAAMuT,OAAO/T,UAAUrF,OACtD2vJ,EAAQp8I,EAAK1N,KAAKuG,SAASvG,KAAM4zD,OAAOp0D,UAAU8kB,MAGlDylI,EAAa,qGACbC,EAAe,WAiBfC,EAAmB,SAA0B7+J,EAAMmhJ,GACtD,IACIvtG,EADAkrH,EAAgB9+J,EAOpB,GALIwiJ,EAAO6b,EAAgBS,KAE1BA,EAAgB,KADhBlrH,EAAQyqH,EAAeS,IACK,GAAK,KAG9Btc,EAAOqa,EAAYiC,GAAgB,CACtC,IAAIl2J,EAAQi0J,EAAWiC,GAIvB,GAHIl2J,IAAU+zJ,IACb/zJ,EAAQu1J,EAAOW,SAEK,IAAVl2J,IAA0Bu4I,EACpC,MAAM,IAAIW,EAAW,aAAe9hJ,EAAO,wDAG5C,MAAO,CACN4zC,MAAOA,EACP5zC,KAAM8+J,EACNl2J,MAAOA,EAET,CAEA,MAAM,IAAIozJ,EAAa,aAAeh8J,EAAO,mBAC9C,EAEA43D,EAAOP,QAAU,SAAsBr3D,EAAMmhJ,GAC5C,GAAoB,iBAATnhJ,GAAqC,IAAhBA,EAAKe,OACpC,MAAM,IAAI+gJ,EAAW,6CAEtB,GAAIhhJ,UAAUC,OAAS,GAA6B,kBAAjBogJ,EAClC,MAAM,IAAIW,EAAW,6CAGtB,GAAmC,OAA/B4c,EAAM,cAAe1+J,GACxB,MAAM,IAAIg8J,EAAa,sFAExB,IAAI18E,EAtDc,SAAsB5W,GACxC,IAAIgM,EAAQ+pF,EAAU/1F,EAAQ,EAAG,GAC7Bz4C,EAAOwuI,EAAU/1F,GAAS,GAC9B,GAAc,MAAVgM,GAA0B,MAATzkD,EACpB,MAAM,IAAI+rI,EAAa,kDACjB,GAAa,MAAT/rI,GAA0B,MAAVykD,EAC1B,MAAM,IAAIsnF,EAAa,kDAExB,IAAIp8J,EAAS,GAIb,OAHA4+J,EAAS91F,EAAQi2F,GAAY,SAAUn/G,EAAOypG,EAAQr5H,EAAOmvI,GAC5Dn/J,EAAOA,EAAOmB,QAAU6uB,EAAQ4uI,EAASO,EAAWH,EAAc,MAAQ3V,GAAUzpG,CACrF,IACO5/C,CACR,CAyCao/J,CAAah/J,GACrBi/J,EAAoB3/E,EAAMv+E,OAAS,EAAIu+E,EAAM,GAAK,GAElD8hE,EAAYyd,EAAiB,IAAMI,EAAoB,IAAK9d,GAC5D+d,EAAoB9d,EAAUphJ,KAC9B4I,EAAQw4I,EAAUx4I,MAClBu2J,GAAqB,EAErBvrH,EAAQwtG,EAAUxtG,MAClBA,IACHqrH,EAAoBrrH,EAAM,GAC1B2qH,EAAaj/E,EAAOg/E,EAAQ,CAAC,EAAG,GAAI1qH,KAGrC,IAAK,IAAI1lC,EAAI,EAAGkxJ,GAAQ,EAAMlxJ,EAAIoxE,EAAMv+E,OAAQmN,GAAK,EAAG,CACvD,IAAIg4D,EAAOoZ,EAAMpxE,GACbwmE,EAAQ+pF,EAAUv4F,EAAM,EAAG,GAC3Bj2C,EAAOwuI,EAAUv4F,GAAO,GAC5B,IAEa,MAAVwO,GAA2B,MAAVA,GAA2B,MAAVA,GACtB,MAATzkD,GAAyB,MAATA,GAAyB,MAATA,IAElCykD,IAAUzkD,EAEb,MAAM,IAAI+rI,EAAa,wDASxB,GAPa,gBAAT91F,GAA2Bk5F,IAC9BD,GAAqB,GAMlB3c,EAAOqa,EAFXqC,EAAoB,KADpBD,GAAqB,IAAM/4F,GACmB,KAG7Ct9D,EAAQi0J,EAAWqC,QACb,GAAa,MAATt2J,EAAe,CACzB,KAAMs9D,KAAQt9D,GAAQ,CACrB,IAAKu4I,EACJ,MAAM,IAAIW,EAAW,sBAAwB9hJ,EAAO,+CAErD,MACD,CACA,GAAIwhJ,GAAUtzI,EAAI,GAAMoxE,EAAMv+E,OAAQ,CACrC,IAAIq8B,EAAOokH,EAAM54I,EAAOs9D,GAWvBt9D,GAVDw2J,IAAUhiI,IASG,QAASA,KAAU,kBAAmBA,EAAK78B,KAC/C68B,EAAK78B,IAELqI,EAAMs9D,EAEhB,MACCk5F,EAAQ5c,EAAO55I,EAAOs9D,GACtBt9D,EAAQA,EAAMs9D,GAGXk5F,IAAUD,IACbtC,EAAWqC,GAAqBt2J,EAElC,CACD,CACA,OAAOA,CACR,+BCrVA,IAEI44I,EAFe,EAAQ,IAEfR,CAAa,qCAAqC,GAE9D,GAAIQ,EACH,IACCA,EAAM,GAAI,SACX,CAAE,MAAOz3G,GAERy3G,EAAQ,IACT,CAGD5pF,EAAOP,QAAUmqF,+BCbjB,IAAI6d,EAA+B,oBAAX/qJ,QAA0BA,OAC9CgrJ,EAAgB,EAAQ,MAE5B1nG,EAAOP,QAAU,WAChB,MAA0B,mBAAfgoG,GACW,mBAAX/qJ,QACsB,iBAAtB+qJ,EAAW,QACO,iBAAlB/qJ,OAAO,QAEXgrJ,GACR,yBCTA1nG,EAAOP,QAAU,WAChB,GAAsB,mBAAX/iD,QAAiE,mBAAjCtS,OAAOkrC,sBAAwC,OAAO,EACjG,GAA+B,iBAApB54B,OAAOC,SAAyB,OAAO,EAElD,IAAIC,EAAM,CAAC,EACP+qJ,EAAMjrJ,OAAO,QACbkrJ,EAASx9J,OAAOu9J,GACpB,GAAmB,iBAARA,EAAoB,OAAO,EAEtC,GAA4C,oBAAxCv9J,OAAOoS,UAAUtc,SAAS8c,KAAK2qJ,GAA8B,OAAO,EACxE,GAA+C,oBAA3Cv9J,OAAOoS,UAAUtc,SAAS8c,KAAK4qJ,GAAiC,OAAO,EAY3E,IAAKD,KADL/qJ,EAAI+qJ,GADS,GAED/qJ,EAAO,OAAO,EAC1B,GAA2B,mBAAhBxS,OAAOoB,MAAmD,IAA5BpB,OAAOoB,KAAKoR,GAAKzT,OAAgB,OAAO,EAEjF,GAA0C,mBAA/BiB,OAAO6nC,qBAAiF,IAA3C7nC,OAAO6nC,oBAAoBr1B,GAAKzT,OAAgB,OAAO,EAE/G,IAAI0+J,EAAOz9J,OAAOkrC,sBAAsB14B,GACxC,GAAoB,IAAhBirJ,EAAK1+J,QAAgB0+J,EAAK,KAAOF,EAAO,OAAO,EAEnD,IAAKv9J,OAAOoS,UAAU+jB,qBAAqBvjB,KAAKJ,EAAK+qJ,GAAQ,OAAO,EAEpE,GAA+C,mBAApCv9J,OAAOsoC,yBAAyC,CAC1D,IAAI12B,EAAa5R,OAAOsoC,yBAAyB91B,EAAK+qJ,GACtD,GAdY,KAcR3rJ,EAAWhL,QAA8C,IAA1BgL,EAAWC,WAAuB,OAAO,CAC7E,CAEA,OAAO,CACR,+BCvCA,IAAI4oJ,EAAa,EAAQ,MAEzB7kG,EAAOP,QAAU,WAChB,OAAOolG,OAAkBnoJ,OAAOozB,WACjC,+BCJA,IAAIplB,EAAO,EAAQ,MAEnBs1C,EAAOP,QAAU/0C,EAAK1N,KAAKuG,SAASvG,KAAM5S,OAAOoS,UAAUjO,uHCD3D,QAFW,inBCEX,QAFW,2UCEX,QAFW,ueCEX,QAFW,+NCEX,QAFW,2WCEX,QAFW,wUCEX,QAFW,gkDCEX,QAFW,umCCEX,QAFW,m3DCEX,QAFW,2RCEX,QAFW,wOCEX,QAFW,0nBCEX,QAFW,ouJCEX,QAFW,imDCEX,QAFW,s0BCEX,QAFW,20BCEX,QAFW,8hCCEX,QAFW,ixBCEX,QAFW,ujBCEX,QAFW,03BCEX,QAFW,y0BCEX,QAFW,yICEX,QAFW,4hBCDkB,mBAAlBnE,OAAOkT,OAEhB0iD,EAAOP,QAAU,SAAkBxf,EAAM6nH,GACnCA,IACF7nH,EAAK8nH,OAASD,EACd7nH,EAAKzjC,UAAYpS,OAAOkT,OAAOwqJ,EAAUtrJ,UAAW,CAClDK,YAAa,CACX7L,MAAOivC,EACPhkC,YAAY,EACZE,UAAU,EACVD,cAAc,KAItB,EAGA8jD,EAAOP,QAAU,SAAkBxf,EAAM6nH,GACvC,GAAIA,EAAW,CACb7nH,EAAK8nH,OAASD,EACd,IAAIE,EAAW,WAAa,EAC5BA,EAASxrJ,UAAYsrJ,EAAUtrJ,UAC/ByjC,EAAKzjC,UAAY,IAAIwrJ,EACrB/nH,EAAKzjC,UAAUK,YAAcojC,CAC/B,CACF,+BCvBF,IAAIgoH,EAAiB,EAAQ,KAAR,GAGjBC,EAFY,EAAQ,KAERC,CAAU,6BAEtBC,EAAsB,SAAqBp3J,GAC9C,QAAIi3J,GAAkBj3J,GAA0B,iBAAVA,GAAsB0L,OAAOozB,eAAe9+B,IAGtD,uBAArBk3J,EAAUl3J,EAClB,EAEIq3J,EAAoB,SAAqBr3J,GAC5C,QAAIo3J,EAAoBp3J,IAGP,OAAVA,GACW,iBAAVA,GACiB,iBAAjBA,EAAM7H,QACb6H,EAAM7H,QAAU,GACK,mBAArB++J,EAAUl3J,IACkB,sBAA5Bk3J,EAAUl3J,EAAMs3J,OAClB,EAEIC,EAA6B,WAChC,OAAOH,EAAoBl/J,UAC5B,CAFgC,GAIhCk/J,EAAoBC,kBAAoBA,EAExCroG,EAAOP,QAAU8oG,EAA4BH,EAAsBC,yBC9BnE,IAEIG,EACAC,EAHAC,EAAUnlJ,SAAS/G,UAAUtc,SAC7ByoK,EAAkC,iBAAZr/I,SAAoC,OAAZA,SAAoBA,QAAQvC,MAG9E,GAA4B,mBAAjB4hJ,GAAgE,mBAA1Bv+J,OAAOgS,eACvD,IACCosJ,EAAep+J,OAAOgS,eAAe,CAAC,EAAG,SAAU,CAClDzT,IAAK,WACJ,MAAM8/J,CACP,IAEDA,EAAmB,CAAC,EAEpBE,GAAa,WAAc,MAAM,EAAI,GAAG,KAAMH,EAC/C,CAAE,MAAO3qJ,GACJA,IAAM4qJ,IACTE,EAAe,KAEjB,MAEAA,EAAe,KAGhB,IAAIC,EAAmB,cACnBC,EAAe,SAA4B73J,GAC9C,IACC,IAAI83J,EAAQJ,EAAQ1rJ,KAAKhM,GACzB,OAAO43J,EAAiBjnK,KAAKmnK,EAC9B,CAAE,MAAO32H,GACR,OAAO,CACR,CACD,EAEI42H,EAAoB,SAA0B/3J,GACjD,IACC,OAAI63J,EAAa73J,KACjB03J,EAAQ1rJ,KAAKhM,IACN,EACR,CAAE,MAAOmhC,GACR,OAAO,CACR,CACD,EACIyxH,EAAQx5J,OAAOoS,UAAUtc,SAOzB+nK,EAAmC,mBAAXvrJ,UAA2BA,OAAOozB,YAE1Dk5H,IAAW,IAAK,CAAC,IAEjBC,EAAQ,WAA8B,OAAO,CAAO,EACxD,GAAwB,iBAAbtlK,SAAuB,CAEjC,IAAIic,EAAMjc,SAASic,IACfgkJ,EAAM5mJ,KAAK4C,KAASgkJ,EAAM5mJ,KAAKrZ,SAASic,OAC3CqpJ,EAAQ,SAA0Bj4J,GAGjC,IAAKg4J,IAAWh4J,UAA4B,IAAVA,GAA0C,iBAAVA,GACjE,IACC,IAAIuhC,EAAMqxH,EAAM5mJ,KAAKhM,GACrB,OAlBU,+BAmBTuhC,GAlBU,qCAmBPA,GAlBO,4BAmBPA,GAxBS,oBAyBTA,IACc,MAAbvhC,EAAM,GACZ,CAAE,MAAOmhC,GAAU,CAEpB,OAAO,CACR,EAEF,CAEA6tB,EAAOP,QAAUkpG,EACd,SAAoB33J,GACrB,GAAIi4J,EAAMj4J,GAAU,OAAO,EAC3B,IAAKA,EAAS,OAAO,EACrB,GAAqB,mBAAVA,GAAyC,iBAAVA,EAAsB,OAAO,EACvE,IACC23J,EAAa33J,EAAO,KAAMw3J,EAC3B,CAAE,MAAOr2H,GACR,GAAIA,IAAMs2H,EAAoB,OAAO,CACtC,CACA,OAAQI,EAAa73J,IAAU+3J,EAAkB/3J,EAClD,EACE,SAAoBA,GACrB,GAAIi4J,EAAMj4J,GAAU,OAAO,EAC3B,IAAKA,EAAS,OAAO,EACrB,GAAqB,mBAAVA,GAAyC,iBAAVA,EAAsB,OAAO,EACvE,GAAIi3J,EAAkB,OAAOc,EAAkB/3J,GAC/C,GAAI63J,EAAa73J,GAAU,OAAO,EAClC,IAAIk4J,EAAWtF,EAAM5mJ,KAAKhM,GAC1B,QApDY,sBAoDRk4J,GAnDS,+BAmDeA,IAA0B,iBAAmBvnK,KAAKunK,KACvEH,EAAkB/3J,EAC1B,+BClGD,IAcIm4J,EAdAvF,EAAQx5J,OAAOoS,UAAUtc,SACzBwoK,EAAUnlJ,SAAS/G,UAAUtc,SAC7BkpK,EAAY,sBACZnB,EAAiB,EAAQ,KAAR,GACjBnD,EAAW16J,OAAO81C,eAYtB8f,EAAOP,QAAU,SAA6Bz1D,GAC7C,GAAkB,mBAAPA,EACV,OAAO,EAER,GAAIo/J,EAAUznK,KAAK+mK,EAAQ1rJ,KAAKhT,IAC/B,OAAO,EAER,IAAKi+J,EAEJ,MAAe,+BADLrE,EAAM5mJ,KAAKhT,GAGtB,IAAK86J,EACJ,OAAO,EAER,QAAiC,IAAtBqE,EAAmC,CAC7C,IAAIE,EA1BiB,WACtB,IAAKpB,EACJ,OAAO,EAER,IACC,OAAO1kJ,SAAS,wBAATA,EACR,CAAE,MAAO4uB,GACT,CACD,CAkBsBm3H,GACpBH,IAAoBE,GAAgBvE,EAASuE,EAC9C,CACA,OAAOvE,EAAS96J,KAAQm/J,CACzB,+BCnCA,IAAI5gK,EAAU,EAAQ,MAClBghK,EAAuB,EAAQ,MAC/BpB,EAAY,EAAQ,MAEpBD,EAAYC,EAAU,6BACtBF,EAAiB,EAAQ,KAAR,GACjBn3H,EAAO,EAAQ,MAEf1J,EAA0B,oBAAfimH,WAA6B,EAAAjmH,EAASimH,WACjDmc,EAAcD,IAEdjgB,EAAW6e,EAAU,2BAA2B,IAAS,SAAiB1oJ,EAAOzO,GACpF,IAAK,IAAIsF,EAAI,EAAGA,EAAImJ,EAAMtW,OAAQmN,GAAK,EACtC,GAAImJ,EAAMnJ,KAAOtF,EAChB,OAAOsF,EAGT,OAAQ,CACT,EACImzJ,EAAStB,EAAU,0BACnBuB,EAAY,CAAC,EACbxpH,EAAiB91C,OAAO81C,eACxB+nH,GAAkBn3H,GAAQoP,GAC7B33C,EAAQihK,GAAa,SAAUG,GAC9B,IAAI/V,EAAM,IAAIxsH,EAAEuiI,GAChB,GAAIjtJ,OAAOozB,eAAe8jH,EAAK,CAC9B,IAAIt4H,EAAQ4kB,EAAe0zG,GACvB53I,EAAa80B,EAAKxV,EAAO5e,OAAOozB,aACpC,IAAK9zB,EAAY,CAChB,IAAI4tJ,EAAa1pH,EAAe5kB,GAChCtf,EAAa80B,EAAK84H,EAAYltJ,OAAOozB,YACtC,CACA45H,EAAUC,GAAc3tJ,EAAWrT,GACpC,CACD,IAeDq3D,EAAOP,QAAU,SAAsBzuD,GACtC,IAAKA,GAA0B,iBAAVA,EAAsB,OAAO,EAClD,IAAKi3J,KAAoBvrJ,OAAOozB,eAAe9+B,GAAQ,CACtD,IAAI+e,EAAM05I,EAAOvB,EAAUl3J,GAAQ,GAAI,GACvC,OAAOs4I,EAASkgB,EAAaz5I,IAAQ,CACtC,CACA,QAAK+gB,GAlBe,SAA2B9/B,GAC/C,IAAI64J,GAAU,EAQd,OAPAthK,EAAQmhK,GAAW,SAAUv3C,EAAQw3C,GACpC,IAAKE,EACJ,IACCA,EAAU13C,EAAOn1G,KAAKhM,KAAW24J,CAClC,CAAE,MAAOx3H,GAAU,CAErB,IACO03H,CACR,CASQC,CAAe94J,EACvB,sBC3DA,OAaA,SAAY2kC,EAAQ0D,GAEnB,aAE6D,iBAAnB2mB,EAAOP,QAShDO,EAAOP,QAAU9pB,EAAOhyC,SACvB01C,EAAS1D,GAAQ,GACjB,SAAUgyG,GACT,IAAMA,EAAEhkJ,SACP,MAAM,IAAIqmB,MAAO,4CAElB,OAAOqvB,EAASsuG,EACjB,EAEDtuG,EAAS1D,EAIT,CA1BF,CA0BuB,oBAAX11C,OAAyBA,OAAS+e,MAAM,SAAU/e,EAAQ8pK,GAMtE,aAEA,IAAInW,EAAM,GAENkR,EAAW16J,OAAO81C,eAElB/oC,EAAQy8I,EAAIz8I,MAEZ6yJ,EAAOpW,EAAIoW,KAAO,SAAUvqJ,GAC/B,OAAOm0I,EAAIoW,KAAKhtJ,KAAMyC,EACvB,EAAI,SAAUA,GACb,OAAOm0I,EAAI7tJ,OAAOghB,MAAO,GAAItH,EAC9B,EAGI7W,EAAOgrJ,EAAIhrJ,KAEXrD,EAAUquJ,EAAIruJ,QAEd0kK,EAAa,CAAC,EAEd/pK,EAAW+pK,EAAW/pK,SAEtB0qJ,EAASqf,EAAW17J,eAEpB27J,EAAatf,EAAO1qJ,SAEpBiqK,EAAuBD,EAAWltJ,KAAM5S,QAExCggK,EAAU,CAAC,EAEX3mB,EAAa,SAAqB7mI,GASpC,MAAsB,mBAARA,GAA8C,iBAAjBA,EAAIgvD,UAC1B,mBAAbhvD,EAAIvb,IACb,EAGGgpK,EAAW,SAAmBztJ,GAChC,OAAc,MAAPA,GAAeA,IAAQA,EAAI3c,MACnC,EAGG0D,EAAW1D,EAAO0D,SAIjB2mK,EAA4B,CAC/B3iJ,MAAM,EACNgL,KAAK,EACL43I,OAAO,EACPC,UAAU,GAGX,SAASC,EAAS7xI,EAAM54B,EAAM03G,GAG7B,IAAIphG,EAAG4c,EACNgV,GAHDwvE,EAAMA,GAAO/zG,GAGC8pD,cAAe,UAG7B,GADAvlB,EAAO5W,KAAOsH,EACT54B,EACJ,IAAMsW,KAAKg0J,GAYVp3I,EAAMlzB,EAAMsW,IAAOtW,EAAK6gC,cAAgB7gC,EAAK6gC,aAAcvqB,KAE1D4xB,EAAOh0B,aAAcoC,EAAG4c,GAI3BwkF,EAAIjrC,KAAK5e,YAAa3lB,GAAS9iC,WAAWq8D,YAAav5B,EACxD,CAGD,SAASwiI,EAAQ9tJ,GAChB,OAAY,MAAPA,EACGA,EAAM,GAIQ,iBAARA,GAAmC,mBAARA,EACxCqtJ,EAAY/pK,EAAS8c,KAAMJ,KAAW,gBAC/BA,CACT,CAOA,IACCrb,EAAU,QAGVopK,EAAS,SAAUj2D,EAAU3zF,GAI5B,OAAO,IAAI4pJ,EAAO3gK,GAAGosC,KAAMs+D,EAAU3zF,EACtC,EAyVD,SAAS6pJ,EAAahuJ,GAMrB,IAAIzT,IAAWyT,GAAO,WAAYA,GAAOA,EAAIzT,OAC5Cwe,EAAO+iJ,EAAQ9tJ,GAEhB,OAAK6mI,EAAY7mI,KAASytJ,EAAUztJ,KAIpB,UAAT+K,GAA+B,IAAXxe,GACR,iBAAXA,GAAuBA,EAAS,GAAOA,EAAS,KAAOyT,EAChE,CAtWA+tJ,EAAO3gK,GAAK2gK,EAAOnuJ,UAAY,CAG9BspI,OAAQvkJ,EAERsb,YAAa8tJ,EAGbxhK,OAAQ,EAER69I,QAAS,WACR,OAAO7vI,EAAM6F,KAAMgC,KACpB,EAIArW,IAAK,SAAUkiK,GAGd,OAAY,MAAPA,EACG1zJ,EAAM6F,KAAMgC,MAIb6rJ,EAAM,EAAI7rJ,KAAM6rJ,EAAM7rJ,KAAK7V,QAAW6V,KAAM6rJ,EACpD,EAIAC,UAAW,SAAUC,GAGpB,IAAI/8C,EAAM28C,EAAOK,MAAOhsJ,KAAKnC,cAAekuJ,GAM5C,OAHA/8C,EAAIi9C,WAAajsJ,KAGVgvG,CACR,EAGA6S,KAAM,SAAUvkG,GACf,OAAOquI,EAAO9pC,KAAM7hH,KAAMsd,EAC3B,EAEAl7B,IAAK,SAAUk7B,GACd,OAAOtd,KAAK8rJ,UAAWH,EAAOvpK,IAAK4d,MAAM,SAAUunD,EAAMjwD,GACxD,OAAOgmB,EAAStf,KAAMupD,EAAMjwD,EAAGiwD,EAChC,IACD,EAEApvD,MAAO,WACN,OAAO6H,KAAK8rJ,UAAW3zJ,EAAM4P,MAAO/H,KAAM9V,WAC3C,EAEA4zE,MAAO,WACN,OAAO99D,KAAK8kI,GAAI,EACjB,EAEAzrH,KAAM,WACL,OAAOrZ,KAAK8kI,IAAK,EAClB,EAEA11D,KAAM,WACL,OAAOpvE,KAAK8rJ,UAAWH,EAAO7uB,KAAM98H,MAAM,SAAUksJ,EAAO50J,GAC1D,OAASA,EAAI,GAAM,CACpB,IACD,EAEA0kG,IAAK,WACJ,OAAOh8F,KAAK8rJ,UAAWH,EAAO7uB,KAAM98H,MAAM,SAAUksJ,EAAO50J,GAC1D,OAAOA,EAAI,CACZ,IACD,EAEAwtI,GAAI,SAAUxtI,GACb,IAAI3I,EAAMqR,KAAK7V,OACdub,GAAKpO,GAAMA,EAAI,EAAI3I,EAAM,GAC1B,OAAOqR,KAAK8rJ,UAAWpmJ,GAAK,GAAKA,EAAI/W,EAAM,CAAEqR,KAAM0F,IAAQ,GAC5D,EAEAzd,IAAK,WACJ,OAAO+X,KAAKisJ,YAAcjsJ,KAAKnC,aAChC,EAIAjU,KAAMA,EACNX,KAAM2rJ,EAAI3rJ,KACV0Y,OAAQizI,EAAIjzI,QAGbgqJ,EAAO/0G,OAAS+0G,EAAO3gK,GAAG4rD,OAAS,WAClC,IAAI7rD,EAAS3B,EAAMuqB,EAAKslH,EAAMkzB,EAAarV,EAC1ChwJ,EAASoD,UAAW,IAAO,CAAC,EAC5BoN,EAAI,EACJnN,EAASD,UAAUC,OACnBiiK,GAAO,EAsBR,IAnBuB,kBAAXtlK,IACXslK,EAAOtlK,EAGPA,EAASoD,UAAWoN,IAAO,CAAC,EAC5BA,KAIsB,iBAAXxQ,GAAwB29I,EAAY39I,KAC/CA,EAAS,CAAC,GAINwQ,IAAMnN,IACVrD,EAASkZ,KACT1I,KAGOA,EAAInN,EAAQmN,IAGnB,GAAqC,OAA9BvM,EAAUb,UAAWoN,IAG3B,IAAMlO,KAAQ2B,EACbkuI,EAAOluI,EAAS3B,GAIF,cAATA,GAAwBtC,IAAWmyI,IAKnCmzB,GAAQnzB,IAAU0yB,EAAOU,cAAepzB,KAC1CkzB,EAAc9hK,MAAMkkB,QAAS0qH,MAC/BtlH,EAAM7sB,EAAQsC,GAIb0tJ,EADIqV,IAAgB9hK,MAAMkkB,QAASoF,GAC3B,GACIw4I,GAAgBR,EAAOU,cAAe14I,GAG1CA,EAFA,CAAC,EAIVw4I,GAAc,EAGdrlK,EAAQsC,GAASuiK,EAAO/0G,OAAQw1G,EAAMtV,EAAO7d,SAGzBrrI,IAATqrI,IACXnyI,EAAQsC,GAAS6vI,IAOrB,OAAOnyI,CACR,EAEA6kK,EAAO/0G,OAAQ,CAGd01G,QAAS,UAAa/pK,EAAUZ,KAAK0vC,UAAWhhC,QAAS,MAAO,IAGhEk8J,SAAS,EAET7iJ,MAAO,SAAU82G,GAChB,MAAM,IAAIx1G,MAAOw1G,EAClB,EAEAlyD,KAAM,WAAY,EAElB+9F,cAAe,SAAUzuJ,GACxB,IAAI0e,EAAOkwI,EAIX,SAAM5uJ,GAAgC,oBAAzB1c,EAAS8c,KAAMJ,KAI5B0e,EAAQwpI,EAAUloJ,MASK,mBADvB4uJ,EAAO5gB,EAAO5tI,KAAMse,EAAO,gBAAmBA,EAAMze,cACfqtJ,EAAWltJ,KAAMwuJ,KAAWrB,GAClE,EAEAsB,cAAe,SAAU7uJ,GACxB,IAAIxU,EAEJ,IAAMA,KAAQwU,EACb,OAAO,EAER,OAAO,CACR,EAIA8uJ,WAAY,SAAU9yI,EAAM7uB,EAAS2tG,GACpC+yD,EAAS7xI,EAAM,CAAE2xI,MAAOxgK,GAAWA,EAAQwgK,OAAS7yD,EACrD,EAEAmpB,KAAM,SAAUjkH,EAAK0f,GACpB,IAAInzB,EAAQmN,EAAI,EAEhB,GAAKs0J,EAAahuJ,GAEjB,IADAzT,EAASyT,EAAIzT,OACLmN,EAAInN,IACqC,IAA3CmzB,EAAStf,KAAMJ,EAAKtG,GAAKA,EAAGsG,EAAKtG,IADnBA,UAMpB,IAAMA,KAAKsG,EACV,IAAgD,IAA3C0f,EAAStf,KAAMJ,EAAKtG,GAAKA,EAAGsG,EAAKtG,IACrC,MAKH,OAAOsG,CACR,EAGA+uJ,UAAW,SAAU/X,EAAKvjI,GACzB,IAAI29F,EAAM39F,GAAW,GAarB,OAXY,MAAPujI,IACCgX,EAAaxgK,OAAQwpJ,IACzB+W,EAAOK,MAAOh9C,EACE,iBAAR4lC,EACN,CAAEA,GAAQA,GAGZhrJ,EAAKoU,KAAMgxG,EAAK4lC,IAIX5lC,CACR,EAEAusB,QAAS,SAAUh0E,EAAMqtF,EAAKt9I,GAC7B,OAAc,MAAPs9I,GAAe,EAAIruJ,EAAQyX,KAAM42I,EAAKrtF,EAAMjwD,EACpD,EAIA00J,MAAO,SAAUluF,EAAOkkF,GAKvB,IAJA,IAAIrzJ,GAAOqzJ,EAAO73J,OACjBub,EAAI,EACJpO,EAAIwmE,EAAM3zE,OAEHub,EAAI/W,EAAK+W,IAChBo4D,EAAOxmE,KAAQ0qJ,EAAQt8I,GAKxB,OAFAo4D,EAAM3zE,OAASmN,EAERwmE,CACR,EAEAg/D,KAAM,SAAUivB,EAAOzuI,EAAUsvI,GAShC,IARA,IACCxiG,EAAU,GACV9yD,EAAI,EACJnN,EAAS4hK,EAAM5hK,OACf0iK,GAAkBD,EAIXt1J,EAAInN,EAAQmN,KACAgmB,EAAUyuI,EAAOz0J,GAAKA,KAChBu1J,GACxBziG,EAAQxgE,KAAMmiK,EAAOz0J,IAIvB,OAAO8yD,CACR,EAGAhoE,IAAK,SAAU2pK,EAAOzuI,EAAUmZ,GAC/B,IAAItsC,EAAQ6H,EACXsF,EAAI,EACJ03G,EAAM,GAGP,GAAK48C,EAAaG,GAEjB,IADA5hK,EAAS4hK,EAAM5hK,OACPmN,EAAInN,EAAQmN,IAGL,OAFdtF,EAAQsrB,EAAUyuI,EAAOz0J,GAAKA,EAAGm/B,KAGhCu4E,EAAIplH,KAAMoI,QAMZ,IAAMsF,KAAKy0J,EAGI,OAFd/5J,EAAQsrB,EAAUyuI,EAAOz0J,GAAKA,EAAGm/B,KAGhCu4E,EAAIplH,KAAMoI,GAMb,OAAOg5J,EAAMh8C,EACd,EAGA89C,KAAM,EAIN1B,QAASA,IAGa,mBAAX1tJ,SACXiuJ,EAAO3gK,GAAI0S,OAAOC,UAAai3I,EAAKl3I,OAAOC,WAI5CguJ,EAAO9pC,KAAM,uEAAuE5zH,MAAO,MAC1F,SAAU+J,EAAI5O,GACb6hK,EAAY,WAAa7hK,EAAO,KAAQA,EAAK3E,aAC9C,IAkBD,IAAIsoK,EAWJ,SAAY9rK,GACZ,IAAIqW,EACH8zJ,EACA4B,EACAC,EACAC,EACAC,EACAlhE,EACAmhE,EACAC,EACAC,EACAC,EAGAC,EACA7oK,EACA8oK,EACAC,EACAC,EACAC,EACAxjG,EACA55D,EAGA87J,EAAU,SAAW,EAAI,IAAI7jG,KAC7BolG,EAAe5sK,EAAO0D,SACtBmpK,EAAU,EACVzkJ,EAAO,EACP0kJ,EAAaC,KACbC,EAAaD,KACbE,EAAgBF,KAChBG,EAAyBH,KACzBI,EAAY,SAAUr3J,EAAGC,GAIxB,OAHKD,IAAMC,IACVu2J,GAAe,GAET,CACR,EAGA3hB,EAAS,CAAK,EAAEr8I,eAChBqlJ,EAAM,GACN3qI,EAAM2qI,EAAI3qI,IACVokJ,EAAazZ,EAAIhrJ,KACjBA,EAAOgrJ,EAAIhrJ,KACXuO,EAAQy8I,EAAIz8I,MAIZ5R,EAAU,SAAUG,EAAM6gE,GAGzB,IAFA,IAAIjwD,EAAI,EACP3I,EAAMjI,EAAKyD,OACJmN,EAAI3I,EAAK2I,IAChB,GAAK5Q,EAAM4Q,KAAQiwD,EAClB,OAAOjwD,EAGT,OAAQ,CACT,EAEAmwH,EAAW,6HAMX6mC,EAAa,sBAGbC,EAAa,0BAA4BD,EACxC,0CAGD9iK,EAAa,MAAQ8iK,EAAa,KAAOC,EAAa,OAASD,EAG9D,gBAAkBA,EAIlB,2DAA6DC,EAAa,OAC1ED,EAAa,OAEdE,EAAU,KAAOD,EAAP,wFAOoB/iK,EAPpB,eAcVijK,EAAc,IAAI78F,OAAQ08F,EAAa,IAAK,KAC5CI,EAAQ,IAAI98F,OAAQ,IAAM08F,EAAa,8BACtCA,EAAa,KAAM,KAEpBK,EAAS,IAAI/8F,OAAQ,IAAM08F,EAAa,KAAOA,EAAa,KAC5DM,EAAe,IAAIh9F,OAAQ,IAAM08F,EAAa,WAAaA,EAAa,IAAMA,EAC7E,KACDO,EAAW,IAAIj9F,OAAQ08F,EAAa,MAEpCQ,EAAU,IAAIl9F,OAAQ48F,GACtBO,EAAc,IAAIn9F,OAAQ,IAAM28F,EAAa,KAE7CS,EAAY,CACX,GAAM,IAAIp9F,OAAQ,MAAQ28F,EAAa,KACvC,MAAS,IAAI38F,OAAQ,QAAU28F,EAAa,KAC5C,IAAO,IAAI38F,OAAQ,KAAO28F,EAAa,SACvC,KAAQ,IAAI38F,OAAQ,IAAMpmE,GAC1B,OAAU,IAAIomE,OAAQ,IAAM48F,GAC5B,MAAS,IAAI58F,OAAQ,yDACpB08F,EAAa,+BAAiCA,EAAa,cAC3DA,EAAa,aAAeA,EAAa,SAAU,KACpD,KAAQ,IAAI18F,OAAQ,OAAS61D,EAAW,KAAM,KAI9C,aAAgB,IAAI71D,OAAQ,IAAM08F,EACjC,mDAAqDA,EACrD,mBAAqBA,EAAa,mBAAoB,MAGxDW,EAAQ,SACRC,EAAU,sCACVC,EAAU,SAEVC,EAAU,yBAGVC,EAAa,mCAEbC,GAAW,OAIXC,GAAY,IAAI39F,OAAQ,uBAAyB08F,EAAa,uBAAwB,KACtFkB,GAAY,SAAUC,EAAQC,GAC7B,IAAIC,EAAO,KAAOF,EAAOt3J,MAAO,GAAM,MAEtC,OAAOu3J,IASNC,EAAO,EACNp+I,OAAOuC,aAAc67I,EAAO,OAC5Bp+I,OAAOuC,aAAc67I,GAAQ,GAAK,MAAe,KAAPA,EAAe,OAC5D,EAIAC,GAAa,sDACbC,GAAa,SAAU17I,EAAI27I,GAC1B,OAAKA,EAGQ,OAAP37I,EACG,IAIDA,EAAGhc,MAAO,GAAI,GAAM,KAC1Bgc,EAAGxB,WAAYwB,EAAGhqB,OAAS,GAAIjJ,SAAU,IAAO,IAI3C,KAAOizB,CACf,EAMA47I,GAAgB,WACfvC,GACD,EAEAwC,GAAqBC,IACpB,SAAU1oG,GACT,OAAyB,IAAlBA,EAAK2oG,UAAqD,aAAhC3oG,EAAK/iE,SAASC,aAChD,GACA,CAAEmhJ,IAAK,aAAc/0I,KAAM,WAI7B,IACCjH,EAAKme,MACF6sI,EAAMz8I,EAAM6F,KAAM6vJ,EAAangG,YACjCmgG,EAAangG,YAMdknF,EAAKiZ,EAAangG,WAAWvjE,QAASyiE,QACvC,CAAE,MAAQz5B,GACTvpC,EAAO,CAAEme,MAAO6sI,EAAIzqJ,OAGnB,SAAUrD,EAAQqpK,GACjB9B,EAAWtmJ,MAAOjhB,EAAQqR,EAAM6F,KAAMmyJ,GACvC,EAIA,SAAUrpK,EAAQqpK,GAKjB,IAJA,IAAIzqJ,EAAI5e,EAAOqD,OACdmN,EAAI,EAGKxQ,EAAQ4e,KAAQyqJ,EAAK74J,OAC/BxQ,EAAOqD,OAASub,EAAI,CACrB,EAEF,CAEA,SAASqnJ,GAAQr3D,EAAU3zF,EAASsP,EAAS++I,GAC5C,IAAI1jK,EAAG4K,EAAGiwD,EAAM8oG,EAAKznH,EAAO0nH,EAAQC,EACnCC,EAAazuJ,GAAWA,EAAQ5gB,cAGhCyrE,EAAW7qD,EAAUA,EAAQ6qD,SAAW,EAKzC,GAHAv7C,EAAUA,GAAW,GAGI,iBAAbqkF,IAA0BA,GACxB,IAAb9oC,GAA+B,IAAbA,GAA+B,KAAbA,EAEpC,OAAOv7C,EAIR,IAAM++I,IACL5C,EAAazrJ,GACbA,EAAUA,GAAWpd,EAEhB+oK,GAAiB,CAIrB,GAAkB,KAAb9gG,IAAqBhkB,EAAQymH,EAAW/sI,KAAMozE,IAGlD,GAAOhpG,EAAIk8C,EAAO,IAGjB,GAAkB,IAAbgkB,EAAiB,CACrB,KAAOrF,EAAOxlD,EAAQyqD,eAAgB9/D,IAUrC,OAAO2kB,EALP,GAAKk2C,EAAK1lD,KAAOnV,EAEhB,OADA2kB,EAAQznB,KAAM29D,GACPl2C,CAOV,MAKC,GAAKm/I,IAAgBjpG,EAAOipG,EAAWhkG,eAAgB9/D,KACtD8D,EAAUuR,EAASwlD,IACnBA,EAAK1lD,KAAOnV,EAGZ,OADA2kB,EAAQznB,KAAM29D,GACPl2C,MAKH,IAAKu3B,EAAO,GAElB,OADAh/C,EAAKme,MAAOsJ,EAAStP,EAAQu4I,qBAAsB5kD,IAC5CrkF,EAGD,IAAO3kB,EAAIk8C,EAAO,KAASwiH,EAAQqF,wBACzC1uJ,EAAQ0uJ,uBAGR,OADA7mK,EAAKme,MAAOsJ,EAAStP,EAAQ0uJ,uBAAwB/jK,IAC9C2kB,CACR,CAID,GAAK+5I,EAAQsF,MACXvC,EAAwBz4D,EAAW,QACjCi4D,IAAcA,EAAUhrK,KAAM+yG,MAIlB,IAAb9oC,GAAqD,WAAnC7qD,EAAQvd,SAASC,eAA+B,CAYpE,GAVA8rK,EAAc76D,EACd86D,EAAazuJ,EASK,IAAb6qD,IACFiiG,EAASlsK,KAAM+yG,IAAck5D,EAAajsK,KAAM+yG,IAAe,CAqBjE,KAlBA86D,EAAalB,GAAS3sK,KAAM+yG,IAAci7D,GAAa5uJ,EAAQ3b,aAC9D2b,KAImBA,GAAYqpJ,EAAQjsJ,SAGhCkxJ,EAAMtuJ,EAAQ8f,aAAc,OAClCwuI,EAAMA,EAAIhgK,QAASu/J,GAAYC,IAE/B9tJ,EAAQ7M,aAAc,KAAQm7J,EAAM/D,IAMtCh1J,GADAg5J,EAASnD,EAAUz3D,IACRvrG,OACHmN,KACPg5J,EAAQh5J,IAAQ+4J,EAAM,IAAMA,EAAM,UAAa,IAC9CO,GAAYN,EAAQh5J,IAEtBi5J,EAAcD,EAAO9tK,KAAM,IAC5B,CAEA,IAIC,OAHAoH,EAAKme,MAAOsJ,EACXm/I,EAAW/0H,iBAAkB80H,IAEvBl/I,CACR,CAAE,MAAQw/I,GACT1C,EAAwBz4D,GAAU,EACnC,CAAE,QACI26D,IAAQ/D,GACZvqJ,EAAQ9M,gBAAiB,KAE3B,CACD,CACD,CAID,OAAOm4J,EAAQ13D,EAASrlG,QAASq+J,EAAO,MAAQ3sJ,EAASsP,EAAS++I,EACnE,CAQA,SAASpC,KACR,IAAIxhK,EAAO,GAYX,OAVA,SAASinB,EAAOhnB,EAAKuF,GAQpB,OALKxF,EAAK5C,KAAM6C,EAAM,KAAQugK,EAAK8D,oBAG3Br9I,EAAOjnB,EAAK0d,SAEXuJ,EAAOhnB,EAAM,KAAQuF,CAC/B,CAED,CAMA,SAAS++J,GAAc/lK,GAEtB,OADAA,EAAIshK,IAAY,EACTthK,CACR,CAMA,SAASs7D,GAAQt7D,GAChB,IAAIuwD,EAAK52D,EAAS8pD,cAAe,YAEjC,IACC,QAASzjD,EAAIuwD,EACd,CAAE,MAAQpoB,GACT,OAAO,CACR,CAAE,QAGIooB,EAAGn1D,YACPm1D,EAAGn1D,WAAWq8D,YAAalH,GAI5BA,EAAK,IACN,CACD,CAOA,SAASy1G,GAAW3lG,EAAOtrC,GAI1B,IAHA,IAAI60H,EAAMvpF,EAAMp9D,MAAO,KACtBqJ,EAAIs9I,EAAIzqJ,OAEDmN,KACP01J,EAAKiE,WAAYrc,EAAKt9I,IAAQyoB,CAEhC,CAQA,SAASmxI,GAAcn6J,EAAGC,GACzB,IAAIomH,EAAMpmH,GAAKD,EACdo6J,EAAO/zC,GAAsB,IAAfrmH,EAAE61D,UAAiC,IAAf51D,EAAE41D,UACnC71D,EAAEu9E,YAAct9E,EAAEs9E,YAGpB,GAAK68E,EACJ,OAAOA,EAIR,GAAK/zC,EACJ,KAAUA,EAAMA,EAAIzwD,aACnB,GAAKywD,IAAQpmH,EACZ,OAAQ,EAKX,OAAOD,EAAI,GAAK,CACjB,CAMA,SAASq6J,GAAmBzoJ,GAC3B,OAAO,SAAU4+C,GAEhB,MAAgB,UADLA,EAAK/iE,SAASC,eACE8iE,EAAK5+C,OAASA,CAC1C,CACD,CAMA,SAAS0oJ,GAAoB1oJ,GAC5B,OAAO,SAAU4+C,GAChB,IAAIn+D,EAAOm+D,EAAK/iE,SAASC,cACzB,OAAkB,UAAT2E,GAA6B,WAATA,IAAuBm+D,EAAK5+C,OAASA,CACnE,CACD,CAMA,SAAS2oJ,GAAsBpB,GAG9B,OAAO,SAAU3oG,GAKhB,MAAK,SAAUA,EASTA,EAAKnhE,aAAgC,IAAlBmhE,EAAK2oG,SAGvB,UAAW3oG,EACV,UAAWA,EAAKnhE,WACbmhE,EAAKnhE,WAAW8pK,WAAaA,EAE7B3oG,EAAK2oG,WAAaA,EAMpB3oG,EAAKgqG,aAAerB,GAI1B3oG,EAAKgqG,cAAgBrB,GACrBF,GAAoBzoG,KAAW2oG,EAG1B3oG,EAAK2oG,WAAaA,EAKd,UAAW3oG,GACfA,EAAK2oG,WAAaA,CAK3B,CACD,CAMA,SAASsB,GAAwBxmK,GAChC,OAAO+lK,IAAc,SAAU5lB,GAE9B,OADAA,GAAYA,EACL4lB,IAAc,SAAUX,EAAMhmG,GAMpC,IALA,IAAI1kD,EACH+rJ,EAAezmK,EAAI,GAAIolK,EAAKjmK,OAAQghJ,GACpC7zI,EAAIm6J,EAAatnK,OAGVmN,KACF84J,EAAQ1qJ,EAAI+rJ,EAAcn6J,MAC9B84J,EAAM1qJ,KAAS0kD,EAAS1kD,GAAM0qJ,EAAM1qJ,IAGvC,GACD,GACD,CAOA,SAASirJ,GAAa5uJ,GACrB,OAAOA,QAAmD,IAAjCA,EAAQu4I,sBAAwCv4I,CAC1E,CAirCA,IAAMzK,KA9qCN8zJ,EAAU2B,GAAO3B,QAAU,CAAC,EAO5B8B,EAAQH,GAAOG,MAAQ,SAAU3lG,GAChC,IAAI0mF,EAAY1mF,GAAQA,EAAKmE,aAC5B+hG,EAAUlmG,IAAUA,EAAKpmE,eAAiBomE,GAAO3iE,gBAKlD,OAAQqqK,EAAMtsK,KAAMsrJ,GAAawf,GAAWA,EAAQjpK,UAAY,OACjE,EAOAgpK,EAAcT,GAAOS,YAAc,SAAUxsK,GAC5C,IAAI0wK,EAAYC,EACfj5D,EAAM13G,EAAOA,EAAKG,eAAiBH,EAAO6sK,EAO3C,OAAKn1D,GAAO/zG,GAA6B,IAAjB+zG,EAAI9rC,UAAmB8rC,EAAI9zG,iBAMnD6oK,GADA9oK,EAAW+zG,GACQ9zG,gBACnB8oK,GAAkBR,EAAOvoK,GAQpBkpK,GAAgBlpK,IAClBgtK,EAAYhtK,EAASvD,cAAiBuwK,EAAU9tK,MAAQ8tK,IAGrDA,EAAUl9J,iBACdk9J,EAAUl9J,iBAAkB,SAAUs7J,IAAe,GAG1C4B,EAAUC,aACrBD,EAAUC,YAAa,WAAY7B,KASrC3E,EAAQjsJ,MAAQmnD,IAAQ,SAAU/K,GAEjC,OADAkyG,EAAQ5+G,YAAa0M,GAAK1M,YAAalqD,EAAS8pD,cAAe,aACzB,IAAxB8M,EAAG9f,mBACf8f,EAAG9f,iBAAkB,uBAAwBtxC,MAChD,IAQAihK,EAAQ5/J,WAAa86D,IAAQ,SAAU/K,GAEtC,OADAA,EAAGysC,UAAY,KACPzsC,EAAG15B,aAAc,YAC1B,IAMAupI,EAAQ9Q,qBAAuBh0F,IAAQ,SAAU/K,GAEhD,OADAA,EAAG1M,YAAalqD,EAASwnE,cAAe,MAChC5Q,EAAG++F,qBAAsB,KAAMnwJ,MACxC,IAGAihK,EAAQqF,uBAAyBrB,EAAQzsK,KAAMgC,EAAS8rK,wBAMxDrF,EAAQyG,QAAUvrG,IAAQ,SAAU/K,GAEnC,OADAkyG,EAAQ5+G,YAAa0M,GAAK15C,GAAKyqJ,GACvB3nK,EAASmtK,oBAAsBntK,EAASmtK,kBAAmBxF,GAAUniK,MAC9E,IAGKihK,EAAQyG,SACZ7E,EAAKplK,OAAa,GAAI,SAAUia,GAC/B,IAAIkwJ,EAASlwJ,EAAGxR,QAASk/J,GAAWC,IACpC,OAAO,SAAUjoG,GAChB,OAAOA,EAAK1lC,aAAc,QAAWkwI,CACtC,CACD,EACA/E,EAAK90J,KAAW,GAAI,SAAU2J,EAAIE,GACjC,QAAuC,IAA3BA,EAAQyqD,gBAAkCkhG,EAAiB,CACtE,IAAInmG,EAAOxlD,EAAQyqD,eAAgB3qD,GACnC,OAAO0lD,EAAO,CAAEA,GAAS,EAC1B,CACD,IAEAylG,EAAKplK,OAAa,GAAK,SAAUia,GAChC,IAAIkwJ,EAASlwJ,EAAGxR,QAASk/J,GAAWC,IACpC,OAAO,SAAUjoG,GAChB,IAAIvmE,OAAwC,IAA1BumE,EAAKs3F,kBACtBt3F,EAAKs3F,iBAAkB,MACxB,OAAO79J,GAAQA,EAAKgR,QAAU+/J,CAC/B,CACD,EAIA/E,EAAK90J,KAAW,GAAI,SAAU2J,EAAIE,GACjC,QAAuC,IAA3BA,EAAQyqD,gBAAkCkhG,EAAiB,CACtE,IAAI1sK,EAAMsW,EAAGy0J,EACZxkG,EAAOxlD,EAAQyqD,eAAgB3qD,GAEhC,GAAK0lD,EAAO,CAIX,IADAvmE,EAAOumE,EAAKs3F,iBAAkB,QACjB79J,EAAKgR,QAAU6P,EAC3B,MAAO,CAAE0lD,GAMV,IAFAwkG,EAAQhqJ,EAAQ+vJ,kBAAmBjwJ,GACnCvK,EAAI,EACMiwD,EAAOwkG,EAAOz0J,MAEvB,IADAtW,EAAOumE,EAAKs3F,iBAAkB,QACjB79J,EAAKgR,QAAU6P,EAC3B,MAAO,CAAE0lD,EAGZ,CAEA,MAAO,EACR,CACD,GAIDylG,EAAK90J,KAAY,IAAIkzJ,EAAQ9Q,qBAC5B,SAAUvpI,EAAKhP,GACd,YAA6C,IAAjCA,EAAQu4I,qBACZv4I,EAAQu4I,qBAAsBvpI,GAG1Bq6I,EAAQsF,IACZ3uJ,EAAQ05B,iBAAkB1qB,QAD3B,CAGR,EAEA,SAAUA,EAAKhP,GACd,IAAIwlD,EACHm0E,EAAM,GACNpkI,EAAI,EAGJ+Z,EAAUtP,EAAQu4I,qBAAsBvpI,GAGzC,GAAa,MAARA,EAAc,CAClB,KAAUw2C,EAAOl2C,EAAS/Z,MACF,IAAlBiwD,EAAKqF,UACT8uE,EAAI9xI,KAAM29D,GAIZ,OAAOm0E,CACR,CACA,OAAOrqH,CACR,EAGD27I,EAAK90J,KAAc,MAAIkzJ,EAAQqF,wBAA0B,SAAUzoE,EAAWjmF,GAC7E,QAA+C,IAAnCA,EAAQ0uJ,wBAA0C/C,EAC7D,OAAO3rJ,EAAQ0uJ,uBAAwBzoE,EAEzC,EAQA4lE,EAAgB,GAOhBD,EAAY,IAELvC,EAAQsF,IAAMtB,EAAQzsK,KAAMgC,EAAS82C,qBAI3C6qB,IAAQ,SAAU/K,GAEjB,IAAI+7B,EAOJm2E,EAAQ5+G,YAAa0M,GAAKvxB,UAAY,UAAYsiI,EAAZ,qBACpBA,EADoB,kEAQjC/wG,EAAG9f,iBAAkB,wBAAyBtxC,QAClDwjK,EAAU/jK,KAAM,SAAW0kK,EAAa,gBAKnC/yG,EAAG9f,iBAAkB,cAAetxC,QACzCwjK,EAAU/jK,KAAM,MAAQ0kK,EAAa,aAAe7mC,EAAW,KAI1DlsE,EAAG9f,iBAAkB,QAAU6wH,EAAU,MAAOniK,QACrDwjK,EAAU/jK,KAAM,OAQjB0tF,EAAQ3yF,EAAS8pD,cAAe,UAC1Bv5C,aAAc,OAAQ,IAC5BqmD,EAAG1M,YAAayoC,GACV/7B,EAAG9f,iBAAkB,aAActxC,QACxCwjK,EAAU/jK,KAAM,MAAQ0kK,EAAa,QAAUA,EAAa,KAC3DA,EAAa,gBAMT/yG,EAAG9f,iBAAkB,YAAatxC,QACvCwjK,EAAU/jK,KAAM,YAMX2xD,EAAG9f,iBAAkB,KAAO6wH,EAAU,MAAOniK,QAClDwjK,EAAU/jK,KAAM,YAKjB2xD,EAAG9f,iBAAkB,QACrBkyH,EAAU/jK,KAAM,cACjB,IAEA08D,IAAQ,SAAU/K,GACjBA,EAAGvxB,UAAY,oFAKf,IAAIstD,EAAQ3yF,EAAS8pD,cAAe,SACpC6oC,EAAMpiF,aAAc,OAAQ,UAC5BqmD,EAAG1M,YAAayoC,GAAQpiF,aAAc,OAAQ,KAIzCqmD,EAAG9f,iBAAkB,YAAatxC,QACtCwjK,EAAU/jK,KAAM,OAAS0kK,EAAa,eAKW,IAA7C/yG,EAAG9f,iBAAkB,YAAatxC,QACtCwjK,EAAU/jK,KAAM,WAAY,aAK7B6jK,EAAQ5+G,YAAa0M,GAAK20G,UAAW,EACc,IAA9C30G,EAAG9f,iBAAkB,aAActxC,QACvCwjK,EAAU/jK,KAAM,WAAY,aAK7B2xD,EAAG9f,iBAAkB,QACrBkyH,EAAU/jK,KAAM,OACjB,MAGMwhK,EAAQ/gG,gBAAkB+kG,EAAQzsK,KAAQynE,EAAUqjG,EAAQrjG,SAClEqjG,EAAQhjG,uBACRgjG,EAAQnjG,oBACRmjG,EAAQjjG,kBACRijG,EAAQljG,qBAERjE,IAAQ,SAAU/K,GAIjB6vG,EAAQ4G,kBAAoB5nG,EAAQpsD,KAAMu9C,EAAI,KAI9C6O,EAAQpsD,KAAMu9C,EAAI,aAClBqyG,EAAchkK,KAAM,KAAM4kK,EAC3B,IAGDb,EAAYA,EAAUxjK,QAAU,IAAIynE,OAAQ+7F,EAAUnrK,KAAM,MAC5DorK,EAAgBA,EAAczjK,QAAU,IAAIynE,OAAQg8F,EAAcprK,KAAM,MAIxEkvK,EAAatC,EAAQzsK,KAAM8qK,EAAQ5gD,yBAKnCr8G,EAAWkhK,GAActC,EAAQzsK,KAAM8qK,EAAQj9J,UAC9C,SAAUuG,EAAGC,GACZ,IAAIi7J,EAAuB,IAAfl7J,EAAE61D,SAAiB71D,EAAEnS,gBAAkBmS,EAClDm7J,EAAMl7J,GAAKA,EAAE5Q,WACd,OAAO2Q,IAAMm7J,MAAWA,GAAwB,IAAjBA,EAAItlG,YAClCqlG,EAAMzhK,SACLyhK,EAAMzhK,SAAU0hK,GAChBn7J,EAAE81G,yBAA8D,GAAnC91G,EAAE81G,wBAAyBqlD,IAE3D,EACA,SAAUn7J,EAAGC,GACZ,GAAKA,EACJ,KAAUA,EAAIA,EAAE5Q,YACf,GAAK4Q,IAAMD,EACV,OAAO,EAIV,OAAO,CACR,EAMDq3J,EAAYsD,EACZ,SAAU36J,EAAGC,GAGZ,GAAKD,IAAMC,EAEV,OADAu2J,GAAe,EACR,EAIR,IAAI4E,GAAWp7J,EAAE81G,yBAA2B71G,EAAE61G,wBAC9C,OAAKslD,IAgBU,GAPfA,GAAYp7J,EAAE5V,eAAiB4V,KAASC,EAAE7V,eAAiB6V,GAC1DD,EAAE81G,wBAAyB71G,GAG3B,KAIGo0J,EAAQgH,cAAgBp7J,EAAE61G,wBAAyB91G,KAAQo7J,EAOzDp7J,GAAKpS,GAAYoS,EAAE5V,eAAiB0sK,GACxCr9J,EAAUq9J,EAAc92J,IAChB,EAOJC,GAAKrS,GAAYqS,EAAE7V,eAAiB0sK,GACxCr9J,EAAUq9J,EAAc72J,GACjB,EAIDs2J,EACJ/mK,EAAS+mK,EAAWv2J,GAAMxQ,EAAS+mK,EAAWt2J,GAChD,EAGe,EAAVm7J,GAAe,EAAI,EAC3B,EACA,SAAUp7J,EAAGC,GAGZ,GAAKD,IAAMC,EAEV,OADAu2J,GAAe,EACR,EAGR,IAAInwC,EACH9lH,EAAI,EACJ+6J,EAAMt7J,EAAE3Q,WACR8rK,EAAMl7J,EAAE5Q,WACRksK,EAAK,CAAEv7J,GACPw7J,EAAK,CAAEv7J,GAGR,IAAMq7J,IAAQH,EAMb,OAAOn7J,GAAKpS,GAAY,EACvBqS,GAAKrS,EAAW,EAEhB0tK,GAAO,EACPH,EAAM,EACN5E,EACE/mK,EAAS+mK,EAAWv2J,GAAMxQ,EAAS+mK,EAAWt2J,GAChD,EAGK,GAAKq7J,IAAQH,EACnB,OAAOhB,GAAcn6J,EAAGC,GAKzB,IADAomH,EAAMrmH,EACIqmH,EAAMA,EAAIh3H,YACnBksK,EAAGnoJ,QAASizG,GAGb,IADAA,EAAMpmH,EACIomH,EAAMA,EAAIh3H,YACnBmsK,EAAGpoJ,QAASizG,GAIb,KAAQk1C,EAAIh7J,KAAQi7J,EAAIj7J,IACvBA,IAGD,OAAOA,EAGN45J,GAAcoB,EAAIh7J,GAAKi7J,EAAIj7J,IAO3Bg7J,EAAIh7J,IAAOu2J,GAAgB,EAC3B0E,EAAIj7J,IAAOu2J,EAAe,EAE1B,CACF,EAEOlpK,GA/cCA,CAgdT,EAEAooK,GAAO3iG,QAAU,SAAUooG,EAAMjnK,GAChC,OAAOwhK,GAAQyF,EAAM,KAAM,KAAMjnK,EAClC,EAEAwhK,GAAO1iG,gBAAkB,SAAU9C,EAAMirG,GAGxC,GAFAhF,EAAajmG,GAER6jG,EAAQ/gG,iBAAmBqjG,IAC9BS,EAAwBqE,EAAO,QAC7B5E,IAAkBA,EAAcjrK,KAAM6vK,OACtC7E,IAAkBA,EAAUhrK,KAAM6vK,IAErC,IACC,IAAIxjD,EAAM5kD,EAAQpsD,KAAMupD,EAAMirG,GAG9B,GAAKxjD,GAAOo8C,EAAQ4G,mBAInBzqG,EAAK5iE,UAAuC,KAA3B4iE,EAAK5iE,SAASioE,SAC/B,OAAOoiD,CAET,CAAE,MAAQ77E,GACTg7H,EAAwBqE,GAAM,EAC/B,CAGD,OAAOzF,GAAQyF,EAAM7tK,EAAU,KAAM,CAAE4iE,IAASp9D,OAAS,CAC1D,EAEA4iK,GAAOv8J,SAAW,SAAUuR,EAASwlD,GAUpC,OAHOxlD,EAAQ5gB,eAAiB4gB,IAAapd,GAC5C6oK,EAAazrJ,GAEPvR,EAAUuR,EAASwlD,EAC3B,EAEAwlG,GAAOtxG,KAAO,SAAU8L,EAAMn+D,IAOtBm+D,EAAKpmE,eAAiBomE,IAAU5iE,GACtC6oK,EAAajmG,GAGd,IAAIv8D,EAAKgiK,EAAKiE,WAAY7nK,EAAK3E,eAG9ByvB,EAAMlpB,GAAM4gJ,EAAO5tI,KAAMgvJ,EAAKiE,WAAY7nK,EAAK3E,eAC9CuG,EAAIu8D,EAAMn+D,GAAOskK,QACjB9/J,EAEF,YAAeA,IAARsmB,EACNA,EACAk3I,EAAQ5/J,aAAekiK,EACtBnmG,EAAK1lC,aAAcz4B,IACjB8qB,EAAMqzC,EAAKs3F,iBAAkBz1J,KAAY8qB,EAAIu+I,UAC9Cv+I,EAAIliB,MACJ,IACJ,EAEA+6J,GAAO0C,OAAS,SAAUiD,GACzB,OAASA,EAAM,IAAKriK,QAASu/J,GAAYC,GAC1C,EAEA9C,GAAOrjJ,MAAQ,SAAU82G,GACxB,MAAM,IAAIx1G,MAAO,0CAA4Cw1G,EAC9D,EAMAusC,GAAOroB,WAAa,SAAUrzH,GAC7B,IAAIk2C,EACHorG,EAAa,GACbjtJ,EAAI,EACJpO,EAAI,EAOL,GAJAi2J,GAAgBnC,EAAQwH,iBACxBtF,GAAalC,EAAQyH,YAAcxhJ,EAAQlZ,MAAO,GAClDkZ,EAAQpoB,KAAMmlK,GAETb,EAAe,CACnB,KAAUhmG,EAAOl2C,EAAS/Z,MACpBiwD,IAASl2C,EAAS/Z,KACtBoO,EAAIitJ,EAAW/oK,KAAM0N,IAGvB,KAAQoO,KACP2L,EAAQ1P,OAAQgxJ,EAAYjtJ,GAAK,EAEnC,CAMA,OAFA4nJ,EAAY,KAELj8I,CACR,EAMA47I,EAAUF,GAAOE,QAAU,SAAU1lG,GACpC,IAAIvmE,EACHguH,EAAM,GACN13G,EAAI,EACJs1D,EAAWrF,EAAKqF,SAEjB,GAAMA,GAQC,GAAkB,IAAbA,GAA+B,IAAbA,GAA+B,KAAbA,EAAkB,CAIjE,GAAiC,iBAArBrF,EAAKq6B,YAChB,OAAOr6B,EAAKq6B,YAIZ,IAAMr6B,EAAOA,EAAKt9B,WAAYs9B,EAAMA,EAAOA,EAAKoF,YAC/CqiD,GAAOi+C,EAAS1lG,EAGnB,MAAO,GAAkB,IAAbqF,GAA+B,IAAbA,EAC7B,OAAOrF,EAAKokB,eAnBZ,KAAU3qF,EAAOumE,EAAMjwD,MAGtB03G,GAAOi+C,EAASjsK,GAqBlB,OAAOguH,CACR,EAEAg+C,EAAOD,GAAO+F,UAAY,CAGzBhC,YAAa,GAEbiC,aAAchC,GAEdnoH,MAAOomH,EAEPiC,WAAY,CAAC,EAEb/4J,KAAM,CAAC,EAEP86J,SAAU,CACT,IAAK,CAAEptB,IAAK,aAAc9nE,OAAO,GACjC,IAAK,CAAE8nE,IAAK,cACZ,IAAK,CAAEA,IAAK,kBAAmB9nE,OAAO,GACtC,IAAK,CAAE8nE,IAAK,oBAGbqtB,UAAW,CACV,KAAQ,SAAUrqH,GAWjB,OAVAA,EAAO,GAAMA,EAAO,GAAIv4C,QAASk/J,GAAWC,IAG5C5mH,EAAO,IAAQA,EAAO,IAAOA,EAAO,IACnCA,EAAO,IAAO,IAAKv4C,QAASk/J,GAAWC,IAEpB,OAAf5mH,EAAO,KACXA,EAAO,GAAM,IAAMA,EAAO,GAAM,KAG1BA,EAAMzwC,MAAO,EAAG,EACxB,EAEA,MAAS,SAAUywC,GAiClB,OArBAA,EAAO,GAAMA,EAAO,GAAInkD,cAEU,QAA7BmkD,EAAO,GAAIzwC,MAAO,EAAG,IAGnBywC,EAAO,IACZmkH,GAAOrjJ,MAAOk/B,EAAO,IAKtBA,EAAO,KAASA,EAAO,GACtBA,EAAO,IAAQA,EAAO,IAAO,GAC7B,GAAqB,SAAfA,EAAO,IAAiC,QAAfA,EAAO,KACvCA,EAAO,KAAWA,EAAO,GAAMA,EAAO,IAAwB,QAAfA,EAAO,KAG3CA,EAAO,IAClBmkH,GAAOrjJ,MAAOk/B,EAAO,IAGfA,CACR,EAEA,OAAU,SAAUA,GACnB,IAAIsqH,EACHC,GAAYvqH,EAAO,IAAOA,EAAO,GAElC,OAAKomH,EAAmB,MAAErsK,KAAMimD,EAAO,IAC/B,MAIHA,EAAO,GACXA,EAAO,GAAMA,EAAO,IAAOA,EAAO,IAAO,GAG9BuqH,GAAYrE,EAAQnsK,KAAMwwK,KAGnCD,EAAS/F,EAAUgG,GAAU,MAG7BD,EAASC,EAAS5sK,QAAS,IAAK4sK,EAAShpK,OAAS+oK,GAAWC,EAAShpK,UAGxEy+C,EAAO,GAAMA,EAAO,GAAIzwC,MAAO,EAAG+6J,GAClCtqH,EAAO,GAAMuqH,EAASh7J,MAAO,EAAG+6J,IAI1BtqH,EAAMzwC,MAAO,EAAG,GACxB,GAGDvQ,OAAQ,CAEP,IAAO,SAAUwrK,GAChB,IAAI5uK,EAAW4uK,EAAiB/iK,QAASk/J,GAAWC,IAAY/qK,cAChE,MAA4B,MAArB2uK,EACN,WACC,OAAO,CACR,EACA,SAAU7rG,GACT,OAAOA,EAAK/iE,UAAY+iE,EAAK/iE,SAASC,gBAAkBD,CACzD,CACF,EAEA,MAAS,SAAUwjG,GAClB,IAAIl/D,EAAUilI,EAAY/lE,EAAY,KAEtC,OAAOl/D,IACJA,EAAU,IAAI8oC,OAAQ,MAAQ08F,EAC/B,IAAMtmE,EAAY,IAAMsmE,EAAa,SAAaP,EACjD/lE,GAAW,SAAUzgC,GACpB,OAAOz+B,EAAQnmC,KACY,iBAAnB4kE,EAAKygC,WAA0BzgC,EAAKygC,gBACd,IAAtBzgC,EAAK1lC,cACX0lC,EAAK1lC,aAAc,UACpB,GAEJ,GACF,EAEA,KAAQ,SAAUz4B,EAAMiqK,EAAUv7J,GACjC,OAAO,SAAUyvD,GAChB,IAAIv+D,EAAS+jK,GAAOtxG,KAAM8L,EAAMn+D,GAEhC,OAAe,MAAVJ,EACgB,OAAbqqK,GAEFA,IAINrqK,GAAU,GAIU,MAAbqqK,EAAmBrqK,IAAW8O,EACvB,OAAbu7J,EAAoBrqK,IAAW8O,EAClB,OAAbu7J,EAAoBv7J,GAAqC,IAA5B9O,EAAOzC,QAASuR,GAChC,OAAbu7J,EAAoBv7J,GAAS9O,EAAOzC,QAASuR,IAAW,EAC3C,OAAbu7J,EAAoBv7J,GAAS9O,EAAOmP,OAAQL,EAAM3N,UAAa2N,EAClD,OAAbu7J,GAAsB,IAAMrqK,EAAOqH,QAASo+J,EAAa,KAAQ,KAAMloK,QAASuR,IAAW,EAC9E,OAAbu7J,IAAoBrqK,IAAW8O,GAAS9O,EAAOmP,MAAO,EAAGL,EAAM3N,OAAS,KAAQ2N,EAAQ,KAI1F,CACD,EAEA,MAAS,SAAU6Q,EAAM2qJ,EAAMC,EAAWz1F,EAAOzkD,GAChD,IAAIkzH,EAAgC,QAAvB5jI,EAAKxQ,MAAO,EAAG,GAC3Bq7J,EAA+B,SAArB7qJ,EAAKxQ,OAAQ,GACvBs7J,EAAkB,YAATH,EAEV,OAAiB,IAAVx1F,GAAwB,IAATzkD,EAGrB,SAAUkuC,GACT,QAASA,EAAKnhE,UACf,EAEA,SAAUmhE,EAAMqtE,EAAUkjB,GACzB,IAAIrkI,EAAOigJ,EAAaC,EAAY3yK,EAAM4yK,EAAW5rK,EACpD49I,EAAM2G,IAAWinB,EAAU,cAAgB,kBAC3C/iK,EAAS82D,EAAKnhE,WACdgD,EAAOqqK,GAAUlsG,EAAK/iE,SAASC,cAC/BovK,GAAY/b,IAAQ2b,EACpBtC,GAAO,EAER,GAAK1gK,EAAS,CAGb,GAAK87I,EAAS,CACb,KAAQ3G,GAAM,CAEb,IADA5kJ,EAAOumE,EACGvmE,EAAOA,EAAM4kJ,IACtB,GAAK6tB,EACJzyK,EAAKwD,SAASC,gBAAkB2E,EACd,IAAlBpI,EAAK4rE,SAEL,OAAO,EAKT5kE,EAAQ49I,EAAe,SAATj9H,IAAoB3gB,GAAS,aAC5C,CACA,OAAO,CACR,CAKA,GAHAA,EAAQ,CAAEwrK,EAAU/iK,EAAOw5B,WAAax5B,EAAOy2F,WAG1CssE,GAAWK,GAkBf,IAHA1C,GADAyC,GADAngJ,GAHAigJ,GAJAC,GADA3yK,EAAOyP,GACY67J,KAAetrK,EAAMsrK,GAAY,CAAC,IAI3BtrK,EAAK8yK,YAC5BH,EAAY3yK,EAAK8yK,UAAa,CAAC,IAEbnrJ,IAAU,IACZ,KAAQmlJ,GAAWr6I,EAAO,KACzBA,EAAO,GAC3BzyB,EAAO4yK,GAAanjK,EAAOi9D,WAAYkmG,GAE7B5yK,IAAS4yK,GAAa5yK,GAAQA,EAAM4kJ,KAG3CurB,EAAOyC,EAAY,IAAO5rK,EAAMiiB,OAGlC,GAAuB,IAAlBjpB,EAAK4rE,YAAoBukG,GAAQnwK,IAASumE,EAAO,CACrDmsG,EAAa/qJ,GAAS,CAAEmlJ,EAAS8F,EAAWzC,GAC5C,KACD,OAwBD,GAlBK0C,IAaJ1C,EADAyC,GADAngJ,GAHAigJ,GAJAC,GADA3yK,EAAOumE,GACY+kG,KAAetrK,EAAMsrK,GAAY,CAAC,IAI3BtrK,EAAK8yK,YAC5BH,EAAY3yK,EAAK8yK,UAAa,CAAC,IAEbnrJ,IAAU,IACZ,KAAQmlJ,GAAWr6I,EAAO,KAMhC,IAAT09I,EAGJ,MAAUnwK,IAAS4yK,GAAa5yK,GAAQA,EAAM4kJ,KAC3CurB,EAAOyC,EAAY,IAAO5rK,EAAMiiB,UAE3BwpJ,EACNzyK,EAAKwD,SAASC,gBAAkB2E,EACd,IAAlBpI,EAAK4rE,cACHukG,IAGG0C,KAMJH,GALAC,EAAa3yK,EAAMsrK,KAChBtrK,EAAMsrK,GAAY,CAAC,IAIItrK,EAAK8yK,YAC5BH,EAAY3yK,EAAK8yK,UAAa,CAAC,IAErBnrJ,GAAS,CAAEmlJ,EAASqD,IAG7BnwK,IAASumE,MAUlB,OADA4pG,GAAQ93I,KACQykD,GAAWqzF,EAAOrzF,GAAU,GAAKqzF,EAAOrzF,GAAS,CAClE,CACD,CACF,EAEA,OAAU,SAAUi2F,EAAQ5oB,GAM3B,IAAI/gJ,EACHY,EAAKgiK,EAAKwB,QAASuF,IAAY/G,EAAKgH,WAAYD,EAAOtvK,gBACtDsoK,GAAOrjJ,MAAO,uBAAyBqqJ,GAKzC,OAAK/oK,EAAIshK,GACDthK,EAAImgJ,GAIPngJ,EAAGb,OAAS,GAChBC,EAAO,CAAE2pK,EAAQA,EAAQ,GAAI5oB,GACtB6hB,EAAKgH,WAAWzkK,eAAgBwkK,EAAOtvK,eAC7CssK,IAAc,SAAUX,EAAMhmG,GAI7B,IAHA,IAAIr2C,EACHzjB,EAAUtF,EAAIolK,EAAMjlB,GACpB7zI,EAAIhH,EAAQnG,OACLmN,KAEP84J,EADAr8I,EAAMxtB,EAAS6pK,EAAM9/J,EAASgH,OACb8yD,EAASr2C,GAAQzjB,EAASgH,GAE7C,IACA,SAAUiwD,GACT,OAAOv8D,EAAIu8D,EAAM,EAAGn9D,EACrB,GAGKY,CACR,GAGDwjK,QAAS,CAGR,IAAOuC,IAAc,SAAUr7D,GAK9B,IAAIpe,EAAQ,GACXjmE,EAAU,GACViS,EAAU2oE,EAASyJ,EAASrlG,QAASq+J,EAAO,OAE7C,OAAOprI,EAASgpI,GACfyE,IAAc,SAAUX,EAAMhmG,EAASwqE,EAAUkjB,GAMhD,IALA,IAAIvwF,EACH0sG,EAAY3wI,EAAS8sI,EAAM,KAAMtY,EAAK,IACtCxgJ,EAAI84J,EAAKjmK,OAGFmN,MACAiwD,EAAO0sG,EAAW38J,MACxB84J,EAAM94J,KAAS8yD,EAAS9yD,GAAMiwD,GAGjC,IACA,SAAUA,EAAMqtE,EAAUkjB,GAMzB,OALAxgE,EAAO,GAAM/vB,EACbjkC,EAASg0D,EAAO,KAAMwgE,EAAKzmI,GAG3BimE,EAAO,GAAM,MACLjmE,EAAQpH,KACjB,CACF,IAEA,IAAO8mJ,IAAc,SAAUr7D,GAC9B,OAAO,SAAUnuC,GAChB,OAAOwlG,GAAQr3D,EAAUnuC,GAAOp9D,OAAS,CAC1C,CACD,IAEA,SAAY4mK,IAAc,SAAUz+I,GAEnC,OADAA,EAAOA,EAAKjiB,QAASk/J,GAAWC,IACzB,SAAUjoG,GAChB,OAASA,EAAKq6B,aAAeqrE,EAAS1lG,IAAShhE,QAAS+rB,IAAU,CACnE,CACD,IASA,KAAQy+I,IAAc,SAAUn1B,GAO/B,OAJMmzB,EAAYpsK,KAAMi5I,GAAQ,KAC/BmxB,GAAOrjJ,MAAO,qBAAuBkyH,GAEtCA,EAAOA,EAAKvrI,QAASk/J,GAAWC,IAAY/qK,cACrC,SAAU8iE,GAChB,IAAI2sG,EACJ,GACC,GAAOA,EAAWxG,EACjBnmG,EAAKq0E,KACLr0E,EAAK1lC,aAAc,aAAgB0lC,EAAK1lC,aAAc,QAGtD,OADAqyI,EAAWA,EAASzvK,iBACAm3I,GAA2C,IAAnCs4B,EAAS3tK,QAASq1I,EAAO,YAE3Cr0E,EAAOA,EAAKnhE,aAAkC,IAAlBmhE,EAAKqF,UAC7C,OAAO,CACR,CACD,IAGA,OAAU,SAAUrF,GACnB,IAAIp3D,EAAOlP,EAAO86D,UAAY96D,EAAO86D,SAAS5rD,KAC9C,OAAOA,GAAQA,EAAKgI,MAAO,KAAQovD,EAAK1lD,EACzC,EAEA,KAAQ,SAAU0lD,GACjB,OAAOA,IAASkmG,CACjB,EAEA,MAAS,SAAUlmG,GAClB,OAAOA,IAAS5iE,EAASkpE,iBACrBlpE,EAASwvK,UAAYxvK,EAASwvK,gBAC7B5sG,EAAK5+C,MAAQ4+C,EAAK9M,OAAS8M,EAAK6sG,SACtC,EAGA,QAAW9C,IAAsB,GACjC,SAAYA,IAAsB,GAElC,QAAW,SAAU/pG,GAIpB,IAAI/iE,EAAW+iE,EAAK/iE,SAASC,cAC7B,MAAsB,UAAbD,KAA0B+iE,EAAKloC,SACxB,WAAb76B,KAA2B+iE,EAAKvjC,QACpC,EAEA,SAAY,SAAUujC,GASrB,OALKA,EAAKnhE,YAETmhE,EAAKnhE,WAAWiuK,eAGQ,IAAlB9sG,EAAKvjC,QACb,EAGA,MAAS,SAAUujC,GAMlB,IAAMA,EAAOA,EAAKt9B,WAAYs9B,EAAMA,EAAOA,EAAKoF,YAC/C,GAAKpF,EAAKqF,SAAW,EACpB,OAAO,EAGT,OAAO,CACR,EAEA,OAAU,SAAUrF,GACnB,OAAQylG,EAAKwB,QAAiB,MAAGjnG,EAClC,EAGA,OAAU,SAAUA,GACnB,OAAO4nG,EAAQxsK,KAAM4kE,EAAK/iE,SAC3B,EAEA,MAAS,SAAU+iE,GAClB,OAAO2nG,EAAQvsK,KAAM4kE,EAAK/iE,SAC3B,EAEA,OAAU,SAAU+iE,GACnB,IAAIn+D,EAAOm+D,EAAK/iE,SAASC,cACzB,MAAgB,UAAT2E,GAAkC,WAAdm+D,EAAK5+C,MAA8B,WAATvf,CACtD,EAEA,KAAQ,SAAUm+D,GACjB,IAAI9L,EACJ,MAAuC,UAAhC8L,EAAK/iE,SAASC,eACN,SAAd8iE,EAAK5+C,OAIuC,OAAxC8yC,EAAO8L,EAAK1lC,aAAc,UACN,SAAvB45B,EAAKh3D,cACR,EAGA,MAAS+sK,IAAwB,WAChC,MAAO,CAAE,EACV,IAEA,KAAQA,IAAwB,SAAU8C,EAAenqK,GACxD,MAAO,CAAEA,EAAS,EACnB,IAEA,GAAMqnK,IAAwB,SAAU8C,EAAenqK,EAAQghJ,GAC9D,MAAO,CAAEA,EAAW,EAAIA,EAAWhhJ,EAASghJ,EAC7C,IAEA,KAAQqmB,IAAwB,SAAUC,EAActnK,GAEvD,IADA,IAAImN,EAAI,EACAA,EAAInN,EAAQmN,GAAK,EACxBm6J,EAAa7nK,KAAM0N,GAEpB,OAAOm6J,CACR,IAEA,IAAOD,IAAwB,SAAUC,EAActnK,GAEtD,IADA,IAAImN,EAAI,EACAA,EAAInN,EAAQmN,GAAK,EACxBm6J,EAAa7nK,KAAM0N,GAEpB,OAAOm6J,CACR,IAEA,GAAMD,IAAwB,SAAUC,EAActnK,EAAQghJ,GAM7D,IALA,IAAI7zI,EAAI6zI,EAAW,EAClBA,EAAWhhJ,EACXghJ,EAAWhhJ,EACVA,EACAghJ,IACQ7zI,GAAK,GACdm6J,EAAa7nK,KAAM0N,GAEpB,OAAOm6J,CACR,IAEA,GAAMD,IAAwB,SAAUC,EAActnK,EAAQghJ,GAE7D,IADA,IAAI7zI,EAAI6zI,EAAW,EAAIA,EAAWhhJ,EAASghJ,IACjC7zI,EAAInN,GACbsnK,EAAa7nK,KAAM0N,GAEpB,OAAOm6J,CACR,MAIFzE,EAAKwB,QAAe,IAAIxB,EAAKwB,QAAc,GAGhC,CAAE+F,OAAO,EAAMC,UAAU,EAAMvlG,MAAM,EAAMwlG,UAAU,EAAMjsI,OAAO,GAC5EwkI,EAAKwB,QAASl3J,GAAM85J,GAAmB95J,GAExC,IAAMA,IAAK,CAAEo9J,QAAQ,EAAMtnK,OAAO,GACjC4/J,EAAKwB,QAASl3J,GAAM+5J,GAAoB/5J,GAIzC,SAAS08J,KAAc,CA0EvB,SAASpD,GAAYhpG,GAIpB,IAHA,IAAItwD,EAAI,EACP3I,EAAMi5D,EAAOz9D,OACburG,EAAW,GACJp+F,EAAI3I,EAAK2I,IAChBo+F,GAAY9tC,EAAQtwD,GAAItF,MAEzB,OAAO0jG,CACR,CAEA,SAASu6D,GAAe3sI,EAASqxI,EAAYxoC,GAC5C,IAAIyZ,EAAM+uB,EAAW/uB,IACpBgvB,EAAOD,EAAW9jK,KAClBpE,EAAMmoK,GAAQhvB,EACdivB,EAAmB1oC,GAAgB,eAAR1/H,EAC3BqoK,EAAWzrJ,IAEZ,OAAOsrJ,EAAW72F,MAGjB,SAAUvW,EAAMxlD,EAAS+1I,GACxB,KAAUvwF,EAAOA,EAAMq+E,IACtB,GAAuB,IAAlBr+E,EAAKqF,UAAkBioG,EAC3B,OAAOvxI,EAASikC,EAAMxlD,EAAS+1I,GAGjC,OAAO,CACR,EAGA,SAAUvwF,EAAMxlD,EAAS+1I,GACxB,IAAIid,EAAUrB,EAAaC,EAC1BqB,EAAW,CAAElH,EAASgH,GAGvB,GAAKhd,GACJ,KAAUvwF,EAAOA,EAAMq+E,IACtB,IAAuB,IAAlBr+E,EAAKqF,UAAkBioG,IACtBvxI,EAASikC,EAAMxlD,EAAS+1I,GAC5B,OAAO,OAKV,KAAUvwF,EAAOA,EAAMq+E,IACtB,GAAuB,IAAlBr+E,EAAKqF,UAAkBioG,EAQ3B,GAHAnB,GAJAC,EAAapsG,EAAM+kG,KAAe/kG,EAAM+kG,GAAY,CAAC,IAI3B/kG,EAAKusG,YAC5BH,EAAYpsG,EAAKusG,UAAa,CAAC,GAE7Bc,GAAQA,IAASrtG,EAAK/iE,SAASC,cACnC8iE,EAAOA,EAAMq+E,IAASr+E,MAChB,KAAOwtG,EAAWrB,EAAajnK,KACrCsoK,EAAU,KAAQjH,GAAWiH,EAAU,KAAQD,EAG/C,OAASE,EAAU,GAAMD,EAAU,GAOnC,GAHArB,EAAajnK,GAAQuoK,EAGdA,EAAU,GAAM1xI,EAASikC,EAAMxlD,EAAS+1I,GAC9C,OAAO,CAET,CAIH,OAAO,CACR,CACF,CAEA,SAASmd,GAAgB1hF,GACxB,OAAOA,EAASppF,OAAS,EACxB,SAAUo9D,EAAMxlD,EAAS+1I,GAExB,IADA,IAAIxgJ,EAAIi8E,EAASppF,OACTmN,KACP,IAAMi8E,EAAUj8E,GAAKiwD,EAAMxlD,EAAS+1I,GACnC,OAAO,EAGT,OAAO,CACR,EACAvkE,EAAU,EACZ,CAWA,SAAS2hF,GAAUjB,EAAW7xK,EAAKwF,EAAQma,EAAS+1I,GAOnD,IANA,IAAIvwF,EACH4tG,EAAe,GACf79J,EAAI,EACJ3I,EAAMslK,EAAU9pK,OAChBirK,EAAgB,MAAPhzK,EAEFkV,EAAI3I,EAAK2I,KACTiwD,EAAO0sG,EAAW38J,MAClB1P,IAAUA,EAAQ2/D,EAAMxlD,EAAS+1I,KACtCqd,EAAavrK,KAAM29D,GACd6tG,GACJhzK,EAAIwH,KAAM0N,KAMd,OAAO69J,CACR,CAEA,SAASE,GAAYpC,EAAWv9D,EAAUpyE,EAASgyI,EAAYC,EAAYC,GAO1E,OANKF,IAAeA,EAAYhJ,KAC/BgJ,EAAaD,GAAYC,IAErBC,IAAeA,EAAYjJ,KAC/BiJ,EAAaF,GAAYE,EAAYC,IAE/BzE,IAAc,SAAUX,EAAM/+I,EAAStP,EAAS+1I,GACtD,IAAI/qF,EAAMz1D,EAAGiwD,EACZkuG,EAAS,GACTC,EAAU,GACVC,EAActkJ,EAAQlnB,OAGtB4hK,EAAQqE,GA5CX,SAA2B16D,EAAU9yF,EAAUyO,GAG9C,IAFA,IAAI/Z,EAAI,EACP3I,EAAMiU,EAASzY,OACRmN,EAAI3I,EAAK2I,IAChBy1J,GAAQr3D,EAAU9yF,EAAUtL,GAAK+Z,GAElC,OAAOA,CACR,CAqCmBukJ,CACflgE,GAAY,IACZ3zF,EAAQ6qD,SAAW,CAAE7qD,GAAYA,EACjC,IAID8zJ,GAAY5C,IAAe7C,GAAS16D,EAEnCq2D,EADAmJ,GAAUnJ,EAAO0J,EAAQxC,EAAWlxJ,EAAS+1I,GAG9Cge,EAAaxyI,EAGZiyI,IAAgBnF,EAAO6C,EAAY0C,GAAeL,GAGjD,GAGAjkJ,EACDwkJ,EAQF,GALKvyI,GACJA,EAASuyI,EAAWC,EAAY/zJ,EAAS+1I,GAIrCwd,EAMJ,IALAvoG,EAAOmoG,GAAUY,EAAYJ,GAC7BJ,EAAYvoG,EAAM,GAAIhrD,EAAS+1I,GAG/BxgJ,EAAIy1D,EAAK5iE,OACDmN,MACAiwD,EAAOwF,EAAMz1D,MACnBw+J,EAAYJ,EAASp+J,MAAWu+J,EAAWH,EAASp+J,IAAQiwD,IAK/D,GAAK6oG,GACJ,GAAKmF,GAActC,EAAY,CAC9B,GAAKsC,EAAa,CAKjB,IAFAxoG,EAAO,GACPz1D,EAAIw+J,EAAW3rK,OACPmN,MACAiwD,EAAOuuG,EAAYx+J,KAGzBy1D,EAAKnjE,KAAQisK,EAAWv+J,GAAMiwD,GAGhCguG,EAAY,KAAQO,EAAa,GAAM/oG,EAAM+qF,EAC9C,CAIA,IADAxgJ,EAAIw+J,EAAW3rK,OACPmN,MACAiwD,EAAOuuG,EAAYx+J,MACvBy1D,EAAOwoG,EAAahvK,EAAS6pK,EAAM7oG,GAASkuG,EAAQn+J,KAAS,IAE/D84J,EAAMrjG,KAAY17C,EAAS07C,GAASxF,GAGvC,OAIAuuG,EAAaZ,GACZY,IAAezkJ,EACdykJ,EAAWn0J,OAAQg0J,EAAaG,EAAW3rK,QAC3C2rK,GAEGP,EACJA,EAAY,KAAMlkJ,EAASykJ,EAAYhe,GAEvCluJ,EAAKme,MAAOsJ,EAASykJ,EAGxB,GACD,CAEA,SAASC,GAAmBnuG,GAyB3B,IAxBA,IAAIouG,EAAc1yI,EAAS5d,EAC1B/W,EAAMi5D,EAAOz9D,OACb8rK,EAAkBjJ,EAAKgG,SAAUprG,EAAQ,GAAIj/C,MAC7CutJ,EAAmBD,GAAmBjJ,EAAKgG,SAAU,KACrD17J,EAAI2+J,EAAkB,EAAI,EAG1BE,EAAelG,IAAe,SAAU1oG,GACvC,OAAOA,IAASyuG,CACjB,GAAGE,GAAkB,GACrBE,EAAkBnG,IAAe,SAAU1oG,GAC1C,OAAOhhE,EAASyvK,EAAczuG,IAAU,CACzC,GAAG2uG,GAAkB,GACrB3iF,EAAW,CAAE,SAAUhsB,EAAMxlD,EAAS+1I,GACrC,IAAI9oC,GAASinD,IAAqBne,GAAO/1I,IAAYsrJ,MAClD2I,EAAej0J,GAAU6qD,SAC1BupG,EAAc5uG,EAAMxlD,EAAS+1I,GAC7Bse,EAAiB7uG,EAAMxlD,EAAS+1I,IAIlC,OADAke,EAAe,KACRhnD,CACR,GAEO13G,EAAI3I,EAAK2I,IAChB,GAAOgsB,EAAU0pI,EAAKgG,SAAUprG,EAAQtwD,GAAIqR,MAC3C4qE,EAAW,CAAE08E,GAAegF,GAAgB1hF,GAAYjwD,QAClD,CAIN,IAHAA,EAAU0pI,EAAKplK,OAAQggE,EAAQtwD,GAAIqR,MAAOZ,MAAO,KAAM6/C,EAAQtwD,GAAI8yD,UAGrDkiG,GAAY,CAIzB,IADA5mJ,IAAMpO,EACEoO,EAAI/W,IACNq+J,EAAKgG,SAAUprG,EAAQliD,GAAIiD,MADhBjD,KAKjB,OAAO2vJ,GACN/9J,EAAI,GAAK29J,GAAgB1hF,GACzBj8E,EAAI,GAAKs5J,GAGThpG,EACEzvD,MAAO,EAAGb,EAAI,GACdvQ,OAAQ,CAAEiL,MAAgC,MAAzB41D,EAAQtwD,EAAI,GAAIqR,KAAe,IAAM,MACtDtY,QAASq+J,EAAO,MAClBprI,EACAhsB,EAAIoO,GAAKqwJ,GAAmBnuG,EAAOzvD,MAAOb,EAAGoO,IAC7CA,EAAI/W,GAAOonK,GAAqBnuG,EAASA,EAAOzvD,MAAOuN,IACvDA,EAAI/W,GAAOiiK,GAAYhpG,GAEzB,CACA2rB,EAAS3pF,KAAM05B,EAChB,CAGD,OAAO2xI,GAAgB1hF,EACxB,CAmTA,OAtpBAygF,GAAWx2J,UAAYwvJ,EAAKqJ,QAAUrJ,EAAKwB,QAC3CxB,EAAKgH,WAAa,IAAIA,GAEtB7G,EAAWJ,GAAOI,SAAW,SAAUz3D,EAAU4gE,GAChD,IAAIhmK,EAASs4C,EAAOgf,EAAQj/C,EAC3B4tJ,EAAOjG,EAAQkG,EACf1xG,EAASmpG,EAAYv4D,EAAW,KAEjC,GAAK5wC,EACJ,OAAOwxG,EAAY,EAAIxxG,EAAO3sD,MAAO,GAOtC,IAJAo+J,EAAQ7gE,EACR46D,EAAS,GACTkG,EAAaxJ,EAAKiG,UAEVsD,GAAQ,CA2Bf,IAAM5tJ,KAxBArY,KAAas4C,EAAQ+lH,EAAOrsI,KAAMi0I,MAClC3tH,IAGJ2tH,EAAQA,EAAMp+J,MAAOywC,EAAO,GAAIz+C,SAAYosK,GAE7CjG,EAAO1mK,KAAQg+D,EAAS,KAGzBt3D,GAAU,GAGHs4C,EAAQgmH,EAAatsI,KAAMi0I,MACjCjmK,EAAUs4C,EAAM1+B,QAChB09C,EAAOh+D,KAAM,CACZoI,MAAO1B,EAGPqY,KAAMigC,EAAO,GAAIv4C,QAASq+J,EAAO,OAElC6H,EAAQA,EAAMp+J,MAAO7H,EAAQnG,SAIhB6iK,EAAKplK,SACXghD,EAAQomH,EAAWrmJ,GAAO2Z,KAAMi0I,KAAgBC,EAAY7tJ,MAChEigC,EAAQ4tH,EAAY7tJ,GAAQigC,MAC9Bt4C,EAAUs4C,EAAM1+B,QAChB09C,EAAOh+D,KAAM,CACZoI,MAAO1B,EACPqY,KAAMA,EACNyhD,QAASxhB,IAEV2tH,EAAQA,EAAMp+J,MAAO7H,EAAQnG,SAI/B,IAAMmG,EACL,KAEF,CAKA,OAAOgmK,EACNC,EAAMpsK,OACNosK,EACCxJ,GAAOrjJ,MAAOgsF,GAGdu4D,EAAYv4D,EAAU46D,GAASn4J,MAAO,EACzC,EA2ZA8zF,EAAU8gE,GAAO9gE,QAAU,SAAUyJ,EAAU9sD,GAC9C,IAAItxC,EACHm/J,EAAc,GACdC,EAAkB,GAClB5xG,EAASopG,EAAex4D,EAAW,KAEpC,IAAM5wC,EAAS,CAOd,IAJMlc,IACLA,EAAQukH,EAAUz3D,IAEnBp+F,EAAIsxC,EAAMz+C,OACFmN,MACPwtD,EAASixG,GAAmBntH,EAAOtxC,KACtBg1J,GACZmK,EAAY7sK,KAAMk7D,GAElB4xG,EAAgB9sK,KAAMk7D,GAKxBA,EAASopG,EACRx4D,EArJH,SAAmCghE,EAAiBD,GACnD,IAAIE,EAAQF,EAAYtsK,OAAS,EAChCysK,EAAYF,EAAgBvsK,OAAS,EACrC0sK,EAAe,SAAUzG,EAAMruJ,EAAS+1I,EAAKzmI,EAASylJ,GACrD,IAAIvvG,EAAM7hD,EAAG4d,EACZyzI,EAAe,EACfz/J,EAAI,IACJ28J,EAAY7D,GAAQ,GACpB4G,EAAa,GACbC,EAAgB5J,EAGhBtB,EAAQqE,GAAQwG,GAAa5J,EAAK90J,KAAY,IAAG,IAAK4+J,GAGtDI,EAAkBpJ,GAA4B,MAAjBmJ,EAAwB,EAAIt1K,KAAK0vC,UAAY,GAC1E1iC,EAAMo9J,EAAM5hK,OAcb,IAZK2sK,IAMJzJ,EAAmBtrJ,GAAWpd,GAAYod,GAAW+0J,GAM9Cx/J,IAAM3I,GAAgC,OAAvB44D,EAAOwkG,EAAOz0J,IAAeA,IAAM,CACzD,GAAKs/J,GAAarvG,EAAO,CAWxB,IAVA7hD,EAAI,EAME3D,GAAWwlD,EAAKpmE,eAAiBwD,IACtC6oK,EAAajmG,GACbuwF,GAAO4V,GAEEpqI,EAAUozI,EAAiBhxJ,MACpC,GAAK4d,EAASikC,EAAMxlD,GAAWpd,EAAUmzJ,GAAQ,CAChDzmI,EAAQznB,KAAM29D,GACd,KACD,CAEIuvG,IACJhJ,EAAUoJ,EAEZ,CAGKP,KAGGpvG,GAAQjkC,GAAWikC,IACzBwvG,IAII3G,GACJ6D,EAAUrqK,KAAM29D,GAGnB,CAaA,GATAwvG,GAAgBz/J,EASXq/J,GAASr/J,IAAMy/J,EAAe,CAElC,IADArxJ,EAAI,EACM4d,EAAUmzI,EAAa/wJ,MAChC4d,EAAS2wI,EAAW+C,EAAYj1J,EAAS+1I,GAG1C,GAAKsY,EAAO,CAGX,GAAK2G,EAAe,EACnB,KAAQz/J,KACC28J,EAAW38J,IAAO0/J,EAAY1/J,KACrC0/J,EAAY1/J,GAAM2S,EAAIjM,KAAMqT,IAM/B2lJ,EAAa9B,GAAU8B,EACxB,CAGAptK,EAAKme,MAAOsJ,EAAS2lJ,GAGhBF,IAAc1G,GAAQ4G,EAAW7sK,OAAS,GAC5C4sK,EAAeN,EAAYtsK,OAAW,GAExC4iK,GAAOroB,WAAYrzH,EAErB,CAQA,OALKylJ,IACJhJ,EAAUoJ,EACV7J,EAAmB4J,GAGbhD,CACR,EAED,OAAO0C,EACN5F,GAAc8F,GACdA,CACF,CA2BGM,CAA0BT,EAAiBD,IAI5C3xG,EAAO4wC,SAAWA,CACnB,CACA,OAAO5wC,CACR,EAWAsoG,EAASL,GAAOK,OAAS,SAAU13D,EAAU3zF,EAASsP,EAAS++I,GAC9D,IAAI94J,EAAGswD,EAAQjuC,EAAOhR,EAAMzQ,EAC3Bk/J,EAA+B,mBAAb1hE,GAA2BA,EAC7C9sD,GAASwnH,GAAQjD,EAAYz3D,EAAW0hE,EAAS1hE,UAAYA,GAM9D,GAJArkF,EAAUA,GAAW,GAIC,IAAjBu3B,EAAMz+C,OAAe,CAIzB,IADAy9D,EAAShf,EAAO,GAAMA,EAAO,GAAIzwC,MAAO,IAC5BhO,OAAS,GAAsC,QAA/BwvB,EAAQiuC,EAAQ,IAAMj/C,MAC5B,IAArB5G,EAAQ6qD,UAAkB8gG,GAAkBV,EAAKgG,SAAUprG,EAAQ,GAAIj/C,MAAS,CAIhF,KAFA5G,GAAYirJ,EAAK90J,KAAW,GAAGyhB,EAAMywC,QAAS,GAC5C/5D,QAASk/J,GAAWC,IAAaztJ,IAAa,IAAM,IAErD,OAAOsP,EAGI+lJ,IACXr1J,EAAUA,EAAQ3b,YAGnBsvG,EAAWA,EAASv9F,MAAOyvD,EAAO19C,QAAQlY,MAAM7H,OACjD,CAIA,IADAmN,EAAI03J,EAA0B,aAAErsK,KAAM+yG,GAAa,EAAI9tC,EAAOz9D,OACtDmN,MACPqiB,EAAQiuC,EAAQtwD,IAGX01J,EAAKgG,SAAYrqJ,EAAOgR,EAAMhR,QAGnC,IAAOzQ,EAAO80J,EAAK90J,KAAMyQ,MAGjBynJ,EAAOl4J,EACbyhB,EAAMywC,QAAS,GAAI/5D,QAASk/J,GAAWC,IACvCF,GAAS3sK,KAAMilE,EAAQ,GAAIj/C,OAAUgoJ,GAAa5uJ,EAAQ3b,aACzD2b,IACI,CAKL,GAFA6lD,EAAOjmD,OAAQrK,EAAG,KAClBo+F,EAAW06D,EAAKjmK,QAAUymK,GAAYhpG,IAGrC,OADAh+D,EAAKme,MAAOsJ,EAAS++I,GACd/+I,EAGR,KACD,CAGH,CAWA,OAPE+lJ,GAAYnrE,EAASyJ,EAAU9sD,IAChCwnH,EACAruJ,GACC2rJ,EACDr8I,GACCtP,GAAWutJ,GAAS3sK,KAAM+yG,IAAci7D,GAAa5uJ,EAAQ3b,aAAgB2b,GAExEsP,CACR,EAKA+5I,EAAQyH,WAAavG,EAAQr+J,MAAO,IAAKhF,KAAMmlK,GAAY5rK,KAAM,MAAS8pK,EAI1ElB,EAAQwH,mBAAqBrF,EAG7BC,IAIApC,EAAQgH,aAAe9rG,IAAQ,SAAU/K,GAGxC,OAA4E,EAArEA,EAAGsxD,wBAAyBloH,EAAS8pD,cAAe,YAC5D,IAKM6X,IAAQ,SAAU/K,GAEvB,OADAA,EAAGvxB,UAAY,mBACiC,MAAzCuxB,EAAGtxB,WAAWpI,aAAc,OACpC,KACCmvI,GAAW,0BAA0B,SAAUzpG,EAAMn+D,EAAM8jK,GAC1D,IAAMA,EACL,OAAO3lG,EAAK1lC,aAAcz4B,EAA6B,SAAvBA,EAAK3E,cAA2B,EAAI,EAEtE,IAKK2mK,EAAQ5/J,YAAe86D,IAAQ,SAAU/K,GAG9C,OAFAA,EAAGvxB,UAAY,WACfuxB,EAAGtxB,WAAW/0B,aAAc,QAAS,IACY,KAA1CqmD,EAAGtxB,WAAWpI,aAAc,QACpC,KACCmvI,GAAW,SAAS,SAAUzpG,EAAMkM,EAAOy5F,GAC1C,IAAMA,GAAyC,UAAhC3lG,EAAK/iE,SAASC,cAC5B,OAAO8iE,EAAKg7B,YAEd,IAKKj8B,IAAQ,SAAU/K,GACvB,OAAwC,MAAjCA,EAAG15B,aAAc,WACzB,KACCmvI,GAAWvpC,GAAU,SAAUlgE,EAAMn+D,EAAM8jK,GAC1C,IAAIh5I,EACJ,IAAMg5I,EACL,OAAwB,IAAjB3lG,EAAMn+D,GAAkBA,EAAK3E,eACjCyvB,EAAMqzC,EAAKs3F,iBAAkBz1J,KAAY8qB,EAAIu+I,UAC9Cv+I,EAAIliB,MACJ,IAEJ,IAGM+6J,EAEL,CA54EF,CA44EK9rK,GAIL0qK,EAAOzzJ,KAAO60J,EACdpB,EAAO6G,KAAOzF,EAAO+F,UAGrBnH,EAAO6G,KAAM,KAAQ7G,EAAO6G,KAAKhE,QACjC7C,EAAOjnB,WAAainB,EAAOhnB,OAASooB,EAAOroB,WAC3CinB,EAAOr5I,KAAOy6I,EAAOE,QACrBtB,EAAO0L,SAAWtK,EAAOG,MACzBvB,EAAOn7J,SAAWu8J,EAAOv8J,SACzBm7J,EAAO2L,eAAiBvK,EAAO0C,OAK/B,IAAI7pB,EAAM,SAAUr+E,EAAMq+E,EAAK2xB,GAI9B,IAHA,IAAIjnK,EAAU,GACbknK,OAAqB5pK,IAAV2pK,GAEFhwG,EAAOA,EAAMq+E,KAA6B,IAAlBr+E,EAAKqF,UACtC,GAAuB,IAAlBrF,EAAKqF,SAAiB,CAC1B,GAAK4qG,GAAY7L,EAAQpkG,GAAO7wB,GAAI6gI,GACnC,MAEDjnK,EAAQ1G,KAAM29D,EACf,CAED,OAAOj3D,CACR,EAGImnK,EAAW,SAAU1hI,EAAGwxB,GAG3B,IAFA,IAAIj3D,EAAU,GAENylC,EAAGA,EAAIA,EAAE42B,YACI,IAAf52B,EAAE62B,UAAkB72B,IAAMwxB,GAC9Bj3D,EAAQ1G,KAAMmsC,GAIhB,OAAOzlC,CACR,EAGIonK,EAAgB/L,EAAO6G,KAAK5pH,MAAM+uH,aAItC,SAASnzK,EAAU+iE,EAAMn+D,GAExB,OAAOm+D,EAAK/iE,UAAY+iE,EAAK/iE,SAASC,gBAAkB2E,EAAK3E,aAE9D,CACA,IAAImzK,EAAa,kEAKjB,SAASC,EAAQtsK,EAAUusK,EAAWC,GACrC,OAAKtzB,EAAYqzB,GACTnM,EAAO7uB,KAAMvxI,GAAU,SAAUg8D,EAAMjwD,GAC7C,QAASwgK,EAAU95J,KAAMupD,EAAMjwD,EAAGiwD,KAAWwwG,CAC9C,IAIID,EAAUlrG,SACP++F,EAAO7uB,KAAMvxI,GAAU,SAAUg8D,GACvC,OAASA,IAASuwG,IAAgBC,CACnC,IAIyB,iBAAdD,EACJnM,EAAO7uB,KAAMvxI,GAAU,SAAUg8D,GACvC,OAAShhE,EAAQyX,KAAM85J,EAAWvwG,IAAU,IAAQwwG,CACrD,IAIMpM,EAAO/jK,OAAQkwK,EAAWvsK,EAAUwsK,EAC5C,CAEApM,EAAO/jK,OAAS,SAAU4qK,EAAMzG,EAAOgM,GACtC,IAAIxwG,EAAOwkG,EAAO,GAMlB,OAJKgM,IACJvF,EAAO,QAAUA,EAAO,KAGH,IAAjBzG,EAAM5hK,QAAkC,IAAlBo9D,EAAKqF,SACxB++F,EAAOzzJ,KAAKmyD,gBAAiB9C,EAAMirG,GAAS,CAAEjrG,GAAS,GAGxDokG,EAAOzzJ,KAAKkyD,QAASooG,EAAM7G,EAAO7uB,KAAMivB,GAAO,SAAUxkG,GAC/D,OAAyB,IAAlBA,EAAKqF,QACb,IACD,EAEA++F,EAAO3gK,GAAG4rD,OAAQ,CACjB1+C,KAAM,SAAUw9F,GACf,IAAIp+F,EAAG03G,EACNrgH,EAAMqR,KAAK7V,OACX4T,EAAOiC,KAER,GAAyB,iBAAb01F,EACX,OAAO11F,KAAK8rJ,UAAWH,EAAQj2D,GAAW9tG,QAAQ,WACjD,IAAM0P,EAAI,EAAGA,EAAI3I,EAAK2I,IACrB,GAAKq0J,EAAOn7J,SAAUuN,EAAMzG,GAAK0I,MAChC,OAAO,CAGV,KAKD,IAFAgvG,EAAMhvG,KAAK8rJ,UAAW,IAEhBx0J,EAAI,EAAGA,EAAI3I,EAAK2I,IACrBq0J,EAAOzzJ,KAAMw9F,EAAU33F,EAAMzG,GAAK03G,GAGnC,OAAOrgH,EAAM,EAAIg9J,EAAOjnB,WAAY11B,GAAQA,CAC7C,EACApnH,OAAQ,SAAU8tG,GACjB,OAAO11F,KAAK8rJ,UAAW+L,EAAQ73J,KAAM01F,GAAY,IAAI,GACtD,EACAqiE,IAAK,SAAUriE,GACd,OAAO11F,KAAK8rJ,UAAW+L,EAAQ73J,KAAM01F,GAAY,IAAI,GACtD,EACAh/D,GAAI,SAAUg/D,GACb,QAASmiE,EACR73J,KAIoB,iBAAb01F,GAAyBgiE,EAAc/0K,KAAM+yG,GACnDi2D,EAAQj2D,GACRA,GAAY,IACb,GACCvrG,MACH,IAQD,IAAI6tK,EAMH3I,EAAa,uCAEN1D,EAAO3gK,GAAGosC,KAAO,SAAUs+D,EAAU3zF,EAAS69B,GACpD,IAAIgJ,EAAO2e,EAGX,IAAMmuC,EACL,OAAO11F,KAQR,GAHA4/B,EAAOA,GAAQo4H,EAGU,iBAAbtiE,EAAwB,CAanC,KAPC9sD,EALsB,MAAlB8sD,EAAU,IACsB,MAApCA,EAAUA,EAASvrG,OAAS,IAC5BurG,EAASvrG,QAAU,EAGX,CAAE,KAAMurG,EAAU,MAGlB25D,EAAW/sI,KAAMozE,MAIV9sD,EAAO,IAAQ7mC,EA6CxB,OAAMA,GAAWA,EAAQ+kI,QACtB/kI,GAAW69B,GAAO1nC,KAAMw9F,GAK1B11F,KAAKnC,YAAakE,GAAU7J,KAAMw9F,GAhDzC,GAAK9sD,EAAO,GAAM,CAYjB,GAXA7mC,EAAUA,aAAmB4pJ,EAAS5pJ,EAAS,GAAMA,EAIrD4pJ,EAAOK,MAAOhsJ,KAAM2rJ,EAAOsM,UAC1BrvH,EAAO,GACP7mC,GAAWA,EAAQ6qD,SAAW7qD,EAAQ5gB,eAAiB4gB,EAAUpd,GACjE,IAIIizK,EAAWj1K,KAAMimD,EAAO,KAAS+iH,EAAOU,cAAetqJ,GAC3D,IAAM6mC,KAAS7mC,EAGT0iI,EAAYzkI,KAAM4oC,IACtB5oC,KAAM4oC,GAAS7mC,EAAS6mC,IAIxB5oC,KAAKy7C,KAAM7S,EAAO7mC,EAAS6mC,IAK9B,OAAO5oC,IAGR,CASC,OARAunD,EAAO5iE,EAAS6nE,eAAgB5jB,EAAO,OAKtC5oC,KAAM,GAAMunD,EACZvnD,KAAK7V,OAAS,GAER6V,IAcV,CAAO,OAAK01F,EAAS9oC,UACpB5sD,KAAM,GAAM01F,EACZ11F,KAAK7V,OAAS,EACP6V,MAIIykI,EAAY/uC,QACD9nG,IAAfgyC,EAAK29C,MACX39C,EAAK29C,MAAOmY,GAGZA,EAAUi2D,GAGLA,EAAOgB,UAAWj3D,EAAU11F,KACpC,GAGIxC,UAAYmuJ,EAAO3gK,GAGxBgtK,EAAarM,EAAQhnK,GAGrB,IAAIuzK,EAAe,iCAGlBC,EAAmB,CAClBptG,UAAU,EACVqtG,UAAU,EACVvnK,MAAM,EACNwwE,MAAM,GAoFR,SAASg3F,EAASj7C,EAAKwoB,GACtB,MAAUxoB,EAAMA,EAAKwoB,KAA4B,IAAjBxoB,EAAIxwD,WACpC,OAAOwwD,CACR,CApFAuuC,EAAO3gK,GAAG4rD,OAAQ,CACjBntD,IAAK,SAAU3C,GACd,IAAI8lH,EAAU++C,EAAQ7kK,EAAQkZ,MAC7BoqC,EAAIwiE,EAAQziH,OAEb,OAAO6V,KAAKpY,QAAQ,WAEnB,IADA,IAAI0P,EAAI,EACAA,EAAI8yC,EAAG9yC,IACd,GAAKq0J,EAAOn7J,SAAUwP,KAAM4sG,EAASt1G,IACpC,OAAO,CAGV,GACD,EAEAm8I,QAAS,SAAUqf,EAAW/wJ,GAC7B,IAAIq7G,EACH9lH,EAAI,EACJ8yC,EAAIpqC,KAAK7V,OACTmG,EAAU,GACVs8G,EAA+B,iBAAdkmD,GAA0BnH,EAAQmH,GAGpD,IAAM4E,EAAc/0K,KAAMmwK,GACzB,KAAQx7J,EAAI8yC,EAAG9yC,IACd,IAAM8lH,EAAMp9G,KAAM1I,GAAK8lH,GAAOA,IAAQr7G,EAASq7G,EAAMA,EAAIh3H,WAGxD,GAAKg3H,EAAIxwD,SAAW,KAAQggD,EAC3BA,EAAQv/G,MAAO+vH,IAAS,EAGP,IAAjBA,EAAIxwD,UACH++F,EAAOzzJ,KAAKmyD,gBAAiB+yD,EAAK01C,IAAgB,CAEnDxiK,EAAQ1G,KAAMwzH,GACd,KACD,CAKH,OAAOp9G,KAAK8rJ,UAAWx7J,EAAQnG,OAAS,EAAIwhK,EAAOjnB,WAAYp0I,GAAYA,EAC5E,EAGAjD,MAAO,SAAUk6D,GAGhB,OAAMA,EAKe,iBAATA,EACJhhE,EAAQyX,KAAM2tJ,EAAQpkG,GAAQvnD,KAAM,IAIrCzZ,EAAQyX,KAAMgC,KAGpBunD,EAAKu/E,OAASv/E,EAAM,GAAMA,GAZjBvnD,KAAM,IAAOA,KAAM,GAAI5Z,WAAe4Z,KAAK89D,QAAQw6F,UAAUnuK,QAAU,CAclF,EAEAhB,IAAK,SAAUusG,EAAU3zF,GACxB,OAAO/B,KAAK8rJ,UACXH,EAAOjnB,WACNinB,EAAOK,MAAOhsJ,KAAKrW,MAAOgiK,EAAQj2D,EAAU3zF,KAG/C,EAEAw2J,QAAS,SAAU7iE,GAClB,OAAO11F,KAAK7W,IAAiB,MAAZusG,EAChB11F,KAAKisJ,WAAajsJ,KAAKisJ,WAAWrkK,OAAQ8tG,GAE5C,IAQDi2D,EAAO9pC,KAAM,CACZpxH,OAAQ,SAAU82D,GACjB,IAAI92D,EAAS82D,EAAKnhE,WAClB,OAAOqK,GAA8B,KAApBA,EAAOm8D,SAAkBn8D,EAAS,IACpD,EACA4wI,QAAS,SAAU95E,GAClB,OAAOq+E,EAAKr+E,EAAM,aACnB,EACAixG,aAAc,SAAUjxG,EAAMvvD,EAAIu/J,GACjC,OAAO3xB,EAAKr+E,EAAM,aAAcgwG,EACjC,EACA1mK,KAAM,SAAU02D,GACf,OAAO8wG,EAAS9wG,EAAM,cACvB,EACA8Z,KAAM,SAAU9Z,GACf,OAAO8wG,EAAS9wG,EAAM,kBACvB,EACAkxG,QAAS,SAAUlxG,GAClB,OAAOq+E,EAAKr+E,EAAM,cACnB,EACA+wG,QAAS,SAAU/wG,GAClB,OAAOq+E,EAAKr+E,EAAM,kBACnB,EACAmxG,UAAW,SAAUnxG,EAAMvvD,EAAIu/J,GAC9B,OAAO3xB,EAAKr+E,EAAM,cAAegwG,EAClC,EACAoB,UAAW,SAAUpxG,EAAMvvD,EAAIu/J,GAC9B,OAAO3xB,EAAKr+E,EAAM,kBAAmBgwG,EACtC,EACAE,SAAU,SAAUlwG,GACnB,OAAOkwG,GAAYlwG,EAAKnhE,YAAc,CAAC,GAAI6jC,WAAYs9B,EACxD,EACAwD,SAAU,SAAUxD,GACnB,OAAOkwG,EAAUlwG,EAAKt9B,WACvB,EACAmuI,SAAU,SAAU7wG,GACnB,OAA6B,MAAxBA,EAAKqxG,iBAKT9S,EAAUv+F,EAAKqxG,iBAERrxG,EAAKqxG,iBAMRp0K,EAAU+iE,EAAM,cACpBA,EAAOA,EAAK/S,SAAW+S,GAGjBokG,EAAOK,MAAO,GAAIzkG,EAAKmG,YAC/B,IACE,SAAUtkE,EAAM4B,GAClB2gK,EAAO3gK,GAAI5B,GAAS,SAAUmuK,EAAO7hE,GACpC,IAAIplG,EAAUq7J,EAAOvpK,IAAK4d,KAAMhV,EAAIusK,GAuBpC,MArB0B,UAArBnuK,EAAK+O,OAAQ,KACjBu9F,EAAW6hE,GAGP7hE,GAAgC,iBAAbA,IACvBplG,EAAUq7J,EAAO/jK,OAAQ8tG,EAAUplG,IAG/B0P,KAAK7V,OAAS,IAGZguK,EAAkB/uK,IACvBuiK,EAAOjnB,WAAYp0I,GAIf4nK,EAAav1K,KAAMyG,IACvBkH,EAAQ0V,WAIHhG,KAAK8rJ,UAAWx7J,EACxB,CACD,IACA,IAAIuoK,EAAgB,oBAsOpB,SAASC,EAAUp+J,GAClB,OAAOA,CACR,CACA,SAASq+J,EAASp9B,GACjB,MAAMA,CACP,CAEA,SAASq9B,EAAYhnK,EAAOvE,EAAS+sC,EAAQy+H,GAC5C,IAAIlsI,EAEJ,IAGM/6B,GAASyyI,EAAc13G,EAAS/6B,EAAMk0C,SAC1CnZ,EAAO/uB,KAAMhM,GAAQqX,KAAM5b,GAAUo2H,KAAMrpF,GAGhCxoC,GAASyyI,EAAc13G,EAAS/6B,EAAMrE,MACjDo/B,EAAO/uB,KAAMhM,EAAOvE,EAAS+sC,GAQ7B/sC,EAAQsa,WAAOna,EAAW,CAAEoE,GAAQmG,MAAO8gK,GAM7C,CAAE,MAAQjnK,GAITwoC,EAAOzyB,WAAOna,EAAW,CAAEoE,GAC5B,CACD,CAzOA25J,EAAOuN,UAAY,SAAUnuK,GAI5BA,EAA6B,iBAAZA,EAlClB,SAAwBA,GACvB,IAAI8d,EAAS,CAAC,EAId,OAHA8iJ,EAAO9pC,KAAM92H,EAAQ69C,MAAOiwH,IAAmB,IAAI,SAAUh6J,EAAGs6J,GAC/DtwJ,EAAQswJ,IAAS,CAClB,IACOtwJ,CACR,CA6BEuwJ,CAAeruK,GACf4gK,EAAO/0G,OAAQ,CAAC,EAAG7rD,GAEpB,IACCsuK,EAGArvG,EAGAq5F,EAGAiW,EAGA5yK,EAAO,GAGPqa,EAAQ,GAGRw4J,GAAe,EAGfC,EAAO,WAQN,IALAF,EAASA,GAAUvuK,EAAQy0F,KAI3B6jE,EAAQgW,GAAS,EACTt4J,EAAM5W,OAAQovK,GAAe,EAEpC,IADAvvG,EAASjpD,EAAMmJ,UACLqvJ,EAAc7yK,EAAKyD,SAGmC,IAA1DzD,EAAM6yK,GAAcxxJ,MAAOiiD,EAAQ,GAAKA,EAAQ,KACpDj/D,EAAQ0uK,cAGRF,EAAc7yK,EAAKyD,OACnB6/D,GAAS,GAMNj/D,EAAQi/D,SACbA,GAAS,GAGVqvG,GAAS,EAGJC,IAIH5yK,EADIsjE,EACG,GAIA,GAGV,EAGAjsD,EAAO,CAGN5U,IAAK,WA2BJ,OA1BKzC,IAGCsjE,IAAWqvG,IACfE,EAAc7yK,EAAKyD,OAAS,EAC5B4W,EAAMnX,KAAMogE,IAGb,SAAW7gE,EAAKiB,GACfuhK,EAAO9pC,KAAMz3H,GAAM,SAAUyU,EAAG43B,GAC1BguG,EAAYhuG,GACV1rC,EAAQ45I,QAAW5mI,EAAKtU,IAAKgtC,IAClC/vC,EAAKkD,KAAM6sC,GAEDA,GAAOA,EAAItsC,QAA4B,WAAlBuhK,EAAQj1H,IAGxCttC,EAAKstC,EAEP,GACC,CAZF,CAYKvsC,WAEA8/D,IAAWqvG,GACfG,KAGKx5J,IACR,EAGAilB,OAAQ,WAYP,OAXA0mI,EAAO9pC,KAAM33H,WAAW,SAAU2U,EAAG43B,GAEpC,IADA,IAAIppC,GACMA,EAAQs+J,EAAOpwB,QAAS9kG,EAAK/vC,EAAM2G,KAAa,GACzD3G,EAAKib,OAAQtU,EAAO,GAGfA,GAASksK,GACbA,GAGH,IACOv5J,IACR,EAIAvW,IAAK,SAAUuB,GACd,OAAOA,EACN2gK,EAAOpwB,QAASvwI,EAAItE,IAAU,EAC9BA,EAAKyD,OAAS,CAChB,EAGA6pJ,MAAO,WAIN,OAHKttJ,IACJA,EAAO,IAEDsZ,IACR,EAKA05J,QAAS,WAGR,OAFAJ,EAASv4J,EAAQ,GACjBra,EAAOsjE,EAAS,GACThqD,IACR,EACAkwJ,SAAU,WACT,OAAQxpK,CACT,EAKAk7C,KAAM,WAKL,OAJA03H,EAASv4J,EAAQ,GACXipD,GAAWqvG,IAChB3yK,EAAOsjE,EAAS,IAEVhqD,IACR,EACAs5J,OAAQ,WACP,QAASA,CACV,EAGAK,SAAU,SAAU53J,EAAS3X,GAS5B,OARMkvK,IAELlvK,EAAO,CAAE2X,GADT3X,EAAOA,GAAQ,IACQ+N,MAAQ/N,EAAK+N,QAAU/N,GAC9C2W,EAAMnX,KAAMQ,GACNivK,GACLG,KAGKx5J,IACR,EAGAw5J,KAAM,WAEL,OADAz7J,EAAK47J,SAAU35J,KAAM9V,WACd8V,IACR,EAGAqjJ,MAAO,WACN,QAASA,CACV,GAGF,OAAOtlJ,CACR,EA2CA4tJ,EAAO/0G,OAAQ,CAEdgjH,SAAU,SAAU7qJ,GACnB,IAAI8qJ,EAAS,CAIX,CAAE,SAAU,WAAYlO,EAAOuN,UAAW,UACzCvN,EAAOuN,UAAW,UAAY,GAC/B,CAAE,UAAW,OAAQvN,EAAOuN,UAAW,eACtCvN,EAAOuN,UAAW,eAAiB,EAAG,YACvC,CAAE,SAAU,OAAQvN,EAAOuN,UAAW,eACrCvN,EAAOuN,UAAW,eAAiB,EAAG,aAExChuK,EAAQ,UACRg7C,EAAU,CACTh7C,MAAO,WACN,OAAOA,CACR,EACA4uK,OAAQ,WAEP,OADAC,EAAS1wJ,KAAMnf,WAAY25H,KAAM35H,WAC1B8V,IACR,EACA,MAAS,SAAUhV,GAClB,OAAOk7C,EAAQv4C,KAAM,KAAM3C,EAC5B,EAGAgvK,KAAM,WACL,IAAIr5H,EAAMz2C,UAEV,OAAOyhK,EAAOiO,UAAU,SAAUK,GACjCtO,EAAO9pC,KAAMg4C,GAAQ,SAAU7hK,EAAIkiK,GAGlC,IAAIlvK,EAAKy5I,EAAY9jG,EAAKu5H,EAAO,MAAWv5H,EAAKu5H,EAAO,IAKxDH,EAAUG,EAAO,KAAO,WACvB,IAAIC,EAAWnvK,GAAMA,EAAG+c,MAAO/H,KAAM9V,WAChCiwK,GAAY11B,EAAY01B,EAASj0H,SACrCi0H,EAASj0H,UACPk0H,SAAUH,EAASx3I,QACnBpZ,KAAM4wJ,EAASxsK,SACfo2H,KAAMo2C,EAASz/H,QAEjBy/H,EAAUC,EAAO,GAAM,QACtBl6J,KACAhV,EAAK,CAAEmvK,GAAajwK,UAGvB,GACD,IACAy2C,EAAM,IACP,IAAIuF,SACL,EACAv4C,KAAM,SAAU0sK,EAAaC,EAAYC,GACxC,IAAIC,EAAW,EACf,SAAS/sK,EAASgtK,EAAOV,EAAUh6I,EAAS26I,GAC3C,OAAO,WACN,IAAI11B,EAAOhlI,KACV5V,EAAOF,UACPywK,EAAa,WACZ,IAAIR,EAAUxsK,EAKd,KAAK8sK,EAAQD,GAAb,CAQA,IAJAL,EAAWp6I,EAAQhY,MAAOi9H,EAAM56I,MAId2vK,EAAS7zH,UAC1B,MAAM,IAAI7nC,UAAW,4BAOtB1Q,EAAOwsK,IAKgB,iBAAbA,GACY,mBAAbA,IACRA,EAASxsK,KAGL82I,EAAY92I,GAGX+sK,EACJ/sK,EAAKqQ,KACJm8J,EACA1sK,EAAS+sK,EAAUT,EAAUjB,EAAU4B,GACvCjtK,EAAS+sK,EAAUT,EAAUhB,EAAS2B,KAOvCF,IAEA7sK,EAAKqQ,KACJm8J,EACA1sK,EAAS+sK,EAAUT,EAAUjB,EAAU4B,GACvCjtK,EAAS+sK,EAAUT,EAAUhB,EAAS2B,GACtCjtK,EAAS+sK,EAAUT,EAAUjB,EAC5BiB,EAASa,eASP76I,IAAY+4I,IAChB9zB,OAAOp3I,EACPxD,EAAO,CAAE+vK,KAKRO,GAAWX,EAASc,aAAe71B,EAAM56I,GA7D5C,CA+DD,EAGAovC,EAAUkhI,EACTC,EACA,WACC,IACCA,GACD,CAAE,MAAQxnI,GAEJw4H,EAAOiO,SAASkB,eACpBnP,EAAOiO,SAASkB,cAAe3nI,EAC9BqG,EAAQuhI,YAMLN,EAAQ,GAAKD,IAIZz6I,IAAYg5I,IAChB/zB,OAAOp3I,EACPxD,EAAO,CAAE+oC,IAGV4mI,EAASiB,WAAYh2B,EAAM56I,GAE7B,CACD,EAMGqwK,EACJjhI,KAKKmyH,EAAOiO,SAASqB,eACpBzhI,EAAQuhI,WAAapP,EAAOiO,SAASqB,gBAEtCh6K,EAAOs/B,WAAYiZ,GAErB,CACD,CAEA,OAAOmyH,EAAOiO,UAAU,SAAUK,GAGjCJ,EAAQ,GAAK,GAAI1wK,IAChBsE,EACC,EACAwsK,EACAx1B,EAAY81B,GACXA,EACAzB,EACDmB,EAASW,aAKXf,EAAQ,GAAK,GAAI1wK,IAChBsE,EACC,EACAwsK,EACAx1B,EAAY41B,GACXA,EACAvB,IAKHe,EAAQ,GAAK,GAAI1wK,IAChBsE,EACC,EACAwsK,EACAx1B,EAAY61B,GACXA,EACAvB,GAGJ,IAAI7yH,SACL,EAIAA,QAAS,SAAUtoC,GAClB,OAAc,MAAPA,EAAc+tJ,EAAO/0G,OAAQh5C,EAAKsoC,GAAYA,CACtD,GAED6zH,EAAW,CAAC,EAkEb,OA/DApO,EAAO9pC,KAAMg4C,GAAQ,SAAUviK,EAAG4iK,GACjC,IAAIxzK,EAAOwzK,EAAO,GACjBgB,EAAchB,EAAO,GAKtBh0H,EAASg0H,EAAO,IAAQxzK,EAAKyC,IAGxB+xK,GACJx0K,EAAKyC,KACJ,WAIC+B,EAAQgwK,CACT,GAIArB,EAAQ,EAAIviK,GAAK,GAAIoiK,QAIrBG,EAAQ,EAAIviK,GAAK,GAAIoiK,QAGrBG,EAAQ,GAAK,GAAIj4H,KAGjBi4H,EAAQ,GAAK,GAAIj4H,MAOnBl7C,EAAKyC,IAAK+wK,EAAO,GAAIV,MAKrBO,EAAUG,EAAO,IAAQ,WAExB,OADAH,EAAUG,EAAO,GAAM,QAAUl6J,OAAS+5J,OAAWnsK,EAAYoS,KAAM9V,WAChE8V,IACR,EAKA+5J,EAAUG,EAAO,GAAM,QAAWxzK,EAAKizK,QACxC,IAGAzzH,EAAQA,QAAS6zH,GAGZhrJ,GACJA,EAAK/Q,KAAM+7J,EAAUA,GAIfA,CACR,EAGAnzD,KAAM,SAAUu0D,GACf,IAGCC,EAAYlxK,UAAUC,OAGtBmN,EAAI8jK,EAGJC,EAAkBhxK,MAAOiN,GACzBgkK,EAAgBnjK,EAAM6F,KAAM9T,WAG5ByrB,EAAUg2I,EAAOiO,WAGjB2B,EAAa,SAAUjkK,GACtB,OAAO,SAAUtF,GAChBqpK,EAAiB/jK,GAAM0I,KACvBs7J,EAAehkK,GAAMpN,UAAUC,OAAS,EAAIgO,EAAM6F,KAAM9T,WAAc8H,IAC5DopK,GACTzlJ,EAAQklJ,YAAaQ,EAAiBC,EAExC,CACD,EAGD,GAAKF,GAAa,IACjBpC,EAAYmC,EAAaxlJ,EAAQtM,KAAMkyJ,EAAYjkK,IAAM7J,QAASkoB,EAAQ6kB,QACxE4gI,GAGuB,YAApBzlJ,EAAQzqB,SACZu5I,EAAY62B,EAAehkK,IAAOgkK,EAAehkK,GAAI3J,OAErD,OAAOgoB,EAAQhoB,OAKjB,KAAQ2J,KACP0hK,EAAYsC,EAAehkK,GAAKikK,EAAYjkK,GAAKqe,EAAQ6kB,QAG1D,OAAO7kB,EAAQuwB,SAChB,IAMD,IAAIs1H,EAAc,yDAElB7P,EAAOiO,SAASkB,cAAgB,SAAUpxJ,EAAOykD,GAI3CltE,EAAOwoB,SAAWxoB,EAAOwoB,QAAQY,MAAQX,GAAS8xJ,EAAY74K,KAAM+mB,EAAMtgB,OAC9EnI,EAAOwoB,QAAQY,KAAM,8BAAgCX,EAAM+P,QAAS/P,EAAMykD,MAAOA,EAEnF,EAKAw9F,EAAO8P,eAAiB,SAAU/xJ,GACjCzoB,EAAOs/B,YAAY,WAClB,MAAM7W,CACP,GACD,EAMA,IAAIgyJ,EAAY/P,EAAOiO,WAkDvB,SAASr/H,IACR51C,EAAS+P,oBAAqB,mBAAoB6lC,GAClDt5C,EAAOyT,oBAAqB,OAAQ6lC,GACpCoxH,EAAOpuE,OACR,CApDAouE,EAAO3gK,GAAGuyF,MAAQ,SAAUvyF,GAY3B,OAVA0wK,EACE/tK,KAAM3C,GAKN6wC,OAAO,SAAUnyB,GACjBiiJ,EAAO8P,eAAgB/xJ,EACxB,IAEM1J,IACR,EAEA2rJ,EAAO/0G,OAAQ,CAGd21G,SAAS,EAIToP,UAAW,EAGXp+E,MAAO,SAAUq+E,KAGF,IAATA,IAAkBjQ,EAAOgQ,UAAYhQ,EAAOY,WAKjDZ,EAAOY,SAAU,GAGH,IAATqP,KAAmBjQ,EAAOgQ,UAAY,GAK3CD,EAAUb,YAAal2K,EAAU,CAAEgnK,IACpC,IAGDA,EAAOpuE,MAAM5vF,KAAO+tK,EAAU/tK,KAaD,aAAxBhJ,EAAS21C,YACa,YAAxB31C,EAAS21C,aAA6B31C,EAASC,gBAAgBi3K,SAGjE56K,EAAOs/B,WAAYorI,EAAOpuE,QAK1B54F,EAAS8P,iBAAkB,mBAAoB8lC,GAG/Ct5C,EAAOwT,iBAAkB,OAAQ8lC,IAQlC,IAAI9nB,EAAS,SAAUs5I,EAAO/gK,EAAIyB,EAAKuF,EAAO8pK,EAAWC,EAAUjrJ,GAClE,IAAIxZ,EAAI,EACP3I,EAAMo9J,EAAM5hK,OACZ6xK,EAAc,MAAPvvK,EAGR,GAAuB,WAAlBi/J,EAAQj/J,GAEZ,IAAM6K,KADNwkK,GAAY,EACDrvK,EACVgmB,EAAQs5I,EAAO/gK,EAAIsM,EAAG7K,EAAK6K,IAAK,EAAMykK,EAAUjrJ,QAI3C,QAAeljB,IAAVoE,IACX8pK,GAAY,EAENr3B,EAAYzyI,KACjB8e,GAAM,GAGFkrJ,IAGClrJ,GACJ9lB,EAAGgT,KAAM+tJ,EAAO/5J,GAChBhH,EAAK,OAILgxK,EAAOhxK,EACPA,EAAK,SAAUu8D,EAAMj9D,EAAM0H,GAC1B,OAAOgqK,EAAKh+J,KAAM2tJ,EAAQpkG,GAAQv1D,EACnC,IAIGhH,GACJ,KAAQsM,EAAI3I,EAAK2I,IAChBtM,EACC+gK,EAAOz0J,GAAK7K,EAAKqkB,EAChB9e,EACAA,EAAMgM,KAAM+tJ,EAAOz0J,GAAKA,EAAGtM,EAAI+gK,EAAOz0J,GAAK7K,KAMhD,OAAKqvK,EACG/P,EAIHiQ,EACGhxK,EAAGgT,KAAM+tJ,GAGVp9J,EAAM3D,EAAI+gK,EAAO,GAAKt/J,GAAQsvK,CACtC,EAIIE,EAAY,QACfC,EAAa,YAGd,SAASC,EAAYC,EAAMC,GAC1B,OAAOA,EAAOv9J,aACf,CAKA,SAASH,EAAWmzD,GACnB,OAAOA,EAAOzhE,QAAS4rK,EAAW,OAAQ5rK,QAAS6rK,EAAYC,EAChE,CACA,IAAIG,EAAa,SAAU7jF,GAQ1B,OAA0B,IAAnBA,EAAM7rB,UAAqC,IAAnB6rB,EAAM7rB,YAAsB6rB,EAAM7rB,QAClE,EAKA,SAAS2vG,IACRv8J,KAAKssJ,QAAUX,EAAOW,QAAUiQ,EAAKnqI,KACtC,CAEAmqI,EAAKnqI,IAAM,EAEXmqI,EAAK/+J,UAAY,CAEhBiW,MAAO,SAAUglE,GAGhB,IAAIzmF,EAAQymF,EAAOz4E,KAAKssJ,SA4BxB,OAzBMt6J,IACLA,EAAQ,CAAC,EAKJsqK,EAAY7jF,KAIXA,EAAM7rB,SACV6rB,EAAOz4E,KAAKssJ,SAAYt6J,EAMxB5G,OAAOgS,eAAgBq7E,EAAOz4E,KAAKssJ,QAAS,CAC3Ct6J,MAAOA,EACPkL,cAAc,MAMXlL,CACR,EACAnI,IAAK,SAAU4uF,EAAOlsF,EAAMyF,GAC3B,IAAIo7B,EACH3Z,EAAQzT,KAAKyT,MAAOglE,GAIrB,GAAqB,iBAATlsF,EACXknB,EAAO9U,EAAWpS,IAAWyF,OAM7B,IAAMo7B,KAAQ7gC,EACbknB,EAAO9U,EAAWyuB,IAAW7gC,EAAM6gC,GAGrC,OAAO3Z,CACR,EACA9pB,IAAK,SAAU8uF,EAAOhsF,GACrB,YAAemB,IAARnB,EACNuT,KAAKyT,MAAOglE,GAGZA,EAAOz4E,KAAKssJ,UAAa7zE,EAAOz4E,KAAKssJ,SAAW3tJ,EAAWlS,GAC7D,EACAgmB,OAAQ,SAAUgmE,EAAOhsF,EAAKuF,GAa7B,YAAapE,IAARnB,GACCA,GAAsB,iBAARA,QAAgCmB,IAAVoE,EAElCgO,KAAKrW,IAAK8uF,EAAOhsF,IASzBuT,KAAKnW,IAAK4uF,EAAOhsF,EAAKuF,QAILpE,IAAVoE,EAAsBA,EAAQvF,EACtC,EACAw4B,OAAQ,SAAUwzD,EAAOhsF,GACxB,IAAI6K,EACHmc,EAAQglE,EAAOz4E,KAAKssJ,SAErB,QAAe1+J,IAAV6lB,EAAL,CAIA,QAAa7lB,IAARnB,EAAoB,CAkBxB6K,GAXC7K,EAJIpC,MAAMkkB,QAAS9hB,GAIbA,EAAIrK,IAAKuc,IAEflS,EAAMkS,EAAWlS,MAIJgnB,EACZ,CAAEhnB,GACAA,EAAIm8C,MAAOiwH,IAAmB,IAG1B1uK,OAER,KAAQmN,YACAmc,EAAOhnB,EAAK6K,GAErB,OAGa1J,IAARnB,GAAqBk/J,EAAOc,cAAeh5I,MAM1CglE,EAAM7rB,SACV6rB,EAAOz4E,KAAKssJ,cAAY1+J,SAEjB6qF,EAAOz4E,KAAKssJ,SArCrB,CAwCD,EACAkQ,QAAS,SAAU/jF,GAClB,IAAIhlE,EAAQglE,EAAOz4E,KAAKssJ,SACxB,YAAiB1+J,IAAV6lB,IAAwBk4I,EAAOc,cAAeh5I,EACtD,GAED,IAAIgpJ,EAAW,IAAIF,EAEfG,EAAW,IAAIH,EAcfI,GAAS,gCACZC,GAAa,SA2Bd,SAASC,GAAUt1G,EAAM96D,EAAKF,GAC7B,IAAInD,EAIJ,QAAcwE,IAATrB,GAAwC,IAAlBg7D,EAAKqF,SAI/B,GAHAxjE,EAAO,QAAUqD,EAAI4D,QAASusK,GAAY,OAAQn4K,cAG7B,iBAFrB8H,EAAOg7D,EAAK1lC,aAAcz4B,IAEM,CAC/B,IACCmD,EApCJ,SAAkBA,GACjB,MAAc,SAATA,GAIS,UAATA,IAIS,SAATA,EACG,KAIHA,KAAUA,EAAO,IACbA,EAGJowK,GAAOh6K,KAAM4J,GACVod,KAAK+J,MAAOnnB,GAGbA,EACR,CAaW+yI,CAAS/yI,EACjB,CAAE,MAAQ4mC,GAAK,CAGfupI,EAAS7yK,IAAK09D,EAAM96D,EAAKF,EAC1B,MACCA,OAAOqB,EAGT,OAAOrB,CACR,CAEAo/J,EAAO/0G,OAAQ,CACd4lH,QAAS,SAAUj1G,GAClB,OAAOm1G,EAASF,QAASj1G,IAAUk1G,EAASD,QAASj1G,EACtD,EAEAh7D,KAAM,SAAUg7D,EAAMn+D,EAAMmD,GAC3B,OAAOmwK,EAASjqJ,OAAQ80C,EAAMn+D,EAAMmD,EACrC,EAEAuwK,WAAY,SAAUv1G,EAAMn+D,GAC3BszK,EAASz3I,OAAQsiC,EAAMn+D,EACxB,EAIAurI,MAAO,SAAUptE,EAAMn+D,EAAMmD,GAC5B,OAAOkwK,EAAShqJ,OAAQ80C,EAAMn+D,EAAMmD,EACrC,EAEAwwK,YAAa,SAAUx1G,EAAMn+D,GAC5BqzK,EAASx3I,OAAQsiC,EAAMn+D,EACxB,IAGDuiK,EAAO3gK,GAAG4rD,OAAQ,CACjBrqD,KAAM,SAAUE,EAAKuF,GACpB,IAAIsF,EAAGlO,EAAMmD,EACZg7D,EAAOvnD,KAAM,GACbqrD,EAAQ9D,GAAQA,EAAK/7D,WAGtB,QAAaoC,IAARnB,EAAoB,CACxB,GAAKuT,KAAK7V,SACToC,EAAOmwK,EAAS/yK,IAAK49D,GAEE,IAAlBA,EAAKqF,WAAmB6vG,EAAS9yK,IAAK49D,EAAM,iBAAmB,CAEnE,IADAjwD,EAAI+zD,EAAMlhE,OACFmN,KAIF+zD,EAAO/zD,IAEsB,KADjClO,EAAOiiE,EAAO/zD,GAAIlO,MACR7C,QAAS,WAClB6C,EAAOuV,EAAWvV,EAAK+O,MAAO,IAC9B0kK,GAAUt1G,EAAMn+D,EAAMmD,EAAMnD,KAI/BqzK,EAAS5yK,IAAK09D,EAAM,gBAAgB,EACrC,CAGD,OAAOh7D,CACR,CAGA,MAAoB,iBAARE,EACJuT,KAAK6hH,MAAM,WACjB66C,EAAS7yK,IAAKmW,KAAMvT,EACrB,IAGMgmB,EAAQzS,MAAM,SAAUhO,GAC9B,IAAIzF,EAOJ,GAAKg7D,QAAkB35D,IAAVoE,EAKZ,YAAcpE,KADdrB,EAAOmwK,EAAS/yK,IAAK49D,EAAM96D,UAQbmB,KADdrB,EAAOswK,GAAUt1G,EAAM96D,IALfF,OAWR,EAIDyT,KAAK6hH,MAAM,WAGV66C,EAAS7yK,IAAKmW,KAAMvT,EAAKuF,EAC1B,GACD,GAAG,KAAMA,EAAO9H,UAAUC,OAAS,EAAG,MAAM,EAC7C,EAEA2yK,WAAY,SAAUrwK,GACrB,OAAOuT,KAAK6hH,MAAM,WACjB66C,EAASz3I,OAAQjlB,KAAMvT,EACxB,GACD,IAIDk/J,EAAO/0G,OAAQ,CACd71C,MAAO,SAAUwmD,EAAM5+C,EAAMpc,GAC5B,IAAIwU,EAEJ,GAAKwmD,EAYJ,OAXA5+C,GAASA,GAAQ,MAAS,QAC1B5H,EAAQ07J,EAAS9yK,IAAK49D,EAAM5+C,GAGvBpc,KACEwU,GAAS1W,MAAMkkB,QAAShiB,GAC7BwU,EAAQ07J,EAAShqJ,OAAQ80C,EAAM5+C,EAAMgjJ,EAAOgB,UAAWpgK,IAEvDwU,EAAMnX,KAAM2C,IAGPwU,GAAS,EAElB,EAEAi8J,QAAS,SAAUz1G,EAAM5+C,GACxBA,EAAOA,GAAQ,KAEf,IAAI5H,EAAQ4qJ,EAAO5qJ,MAAOwmD,EAAM5+C,GAC/Bs0J,EAAcl8J,EAAM5W,OACpBa,EAAK+V,EAAMmJ,QACXgpF,EAAQy4D,EAAOuR,YAAa31G,EAAM5+C,GAMvB,eAAP3d,IACJA,EAAK+V,EAAMmJ,QACX+yJ,KAGIjyK,IAIU,OAAT2d,GACJ5H,EAAMoJ,QAAS,qBAIT+oF,EAAM/pE,KACbn+B,EAAGgT,KAAMupD,GApBF,WACNokG,EAAOqR,QAASz1G,EAAM5+C,EACvB,GAkBqBuqF,KAGhB+pE,GAAe/pE,GACpBA,EAAM8gD,MAAMwlB,MAEd,EAGA0D,YAAa,SAAU31G,EAAM5+C,GAC5B,IAAIlc,EAAMkc,EAAO,aACjB,OAAO8zJ,EAAS9yK,IAAK49D,EAAM96D,IAASgwK,EAAShqJ,OAAQ80C,EAAM96D,EAAK,CAC/DunJ,MAAO2X,EAAOuN,UAAW,eAAgB/vK,KAAK,WAC7CszK,EAASx3I,OAAQsiC,EAAM,CAAE5+C,EAAO,QAASlc,GAC1C,KAEF,IAGDk/J,EAAO3gK,GAAG4rD,OAAQ,CACjB71C,MAAO,SAAU4H,EAAMpc,GACtB,IAAI6jJ,EAAS,EAQb,MANqB,iBAATznI,IACXpc,EAAOoc,EACPA,EAAO,KACPynI,KAGIlmJ,UAAUC,OAASimJ,EAChBub,EAAO5qJ,MAAOf,KAAM,GAAK2I,QAGjB/a,IAATrB,EACNyT,KACAA,KAAK6hH,MAAM,WACV,IAAI9gH,EAAQ4qJ,EAAO5qJ,MAAOf,KAAM2I,EAAMpc,GAGtCo/J,EAAOuR,YAAal9J,KAAM2I,GAEZ,OAATA,GAAgC,eAAf5H,EAAO,IAC5B4qJ,EAAOqR,QAASh9J,KAAM2I,EAExB,GACF,EACAq0J,QAAS,SAAUr0J,GAClB,OAAO3I,KAAK6hH,MAAM,WACjB8pC,EAAOqR,QAASh9J,KAAM2I,EACvB,GACD,EACAw0J,WAAY,SAAUx0J,GACrB,OAAO3I,KAAKe,MAAO4H,GAAQ,KAAM,GAClC,EAIAu9B,QAAS,SAAUv9B,EAAM/K,GACxB,IAAI89H,EACH50H,EAAQ,EACR8nC,EAAQ+8G,EAAOiO,WACfruK,EAAWyU,KACX1I,EAAI0I,KAAK7V,OACTsD,EAAU,aACCqZ,GACT8nC,EAAMisH,YAAatvK,EAAU,CAAEA,GAEjC,EAQD,IANqB,iBAATod,IACX/K,EAAM+K,EACNA,OAAO/a,GAER+a,EAAOA,GAAQ,KAEPrR,MACPokI,EAAM+gC,EAAS9yK,IAAK4B,EAAU+L,GAAKqR,EAAO,gBAC9B+yH,EAAIsY,QACfltI,IACA40H,EAAIsY,MAAM7qJ,IAAKsE,IAIjB,OADAA,IACOmhD,EAAM1I,QAAStoC,EACvB,IAED,IAAIw/J,GAAO,sCAA0CvwI,OAEjDwwI,GAAU,IAAIzrG,OAAQ,iBAAmBwrG,GAAO,cAAe,KAG/DE,GAAY,CAAE,MAAO,QAAS,SAAU,QAExC14K,GAAkBD,EAASC,gBAI1BgzF,GAAa,SAAUrwB,GACzB,OAAOokG,EAAOn7J,SAAU+2D,EAAKpmE,cAAeomE,EAC7C,EACAg2G,GAAW,CAAEA,UAAU,GAOnB34K,GAAgBgM,cACpBgnF,GAAa,SAAUrwB,GACtB,OAAOokG,EAAOn7J,SAAU+2D,EAAKpmE,cAAeomE,IAC3CA,EAAK32D,YAAa2sK,MAAeh2G,EAAKpmE,aACxC,GAEF,IAAIq8K,GAAqB,SAAUj2G,EAAMhM,GAOvC,MAA8B,UAH9BgM,EAAOhM,GAAMgM,GAGDvyD,MAAMyoK,SACM,KAAvBl2G,EAAKvyD,MAAMyoK,SAMX7lF,GAAYrwB,IAEsB,SAAlCokG,EAAOpkK,IAAKggE,EAAM,UACpB,EAID,SAASm2G,GAAWn2G,EAAMn6B,EAAMuwI,EAAYC,GAC3C,IAAIC,EAAUC,EACbC,EAAgB,GAChB92J,EAAe22J,EACd,WACC,OAAOA,EAAMxgD,KACd,EACA,WACC,OAAOuuC,EAAOpkK,IAAKggE,EAAMn6B,EAAM,GAChC,EACD4wI,EAAU/2J,IACVg3J,EAAON,GAAcA,EAAY,KAAShS,EAAOuS,UAAW9wI,GAAS,GAAK,MAG1E+wI,EAAgB52G,EAAKqF,WAClB++F,EAAOuS,UAAW9wI,IAAmB,OAAT6wI,IAAkBD,IAChDX,GAAQ/6I,KAAMqpI,EAAOpkK,IAAKggE,EAAMn6B,IAElC,GAAK+wI,GAAiBA,EAAe,KAAQF,EAAO,CAYnD,IARAD,GAAoB,EAGpBC,EAAOA,GAAQE,EAAe,GAG9BA,GAAiBH,GAAW,EAEpBD,KAIPpS,EAAO32J,MAAOuyD,EAAMn6B,EAAM+wI,EAAgBF,IACnC,EAAIH,IAAY,GAAMA,EAAQ72J,IAAiB+2J,GAAW,MAAW,IAC3ED,EAAgB,GAEjBI,GAAgCL,EAIjCK,GAAgC,EAChCxS,EAAO32J,MAAOuyD,EAAMn6B,EAAM+wI,EAAgBF,GAG1CN,EAAaA,GAAc,EAC5B,CAeA,OAbKA,IACJQ,GAAiBA,IAAkBH,GAAW,EAG9CH,EAAWF,EAAY,GACtBQ,GAAkBR,EAAY,GAAM,GAAMA,EAAY,IACrDA,EAAY,GACTC,IACJA,EAAMK,KAAOA,EACbL,EAAM51K,MAAQm2K,EACdP,EAAM31K,IAAM41K,IAGPA,CACR,CAGA,IAAIO,GAAoB,CAAC,EAEzB,SAASC,GAAmB92G,GAC3B,IAAIwF,EACH2rC,EAAMnxC,EAAKpmE,cACXqD,EAAW+iE,EAAK/iE,SAChBi5K,EAAUW,GAAmB55K,GAE9B,OAAKi5K,IAIL1wG,EAAO2rC,EAAIlyG,KAAKqoD,YAAa6pD,EAAIjqD,cAAejqD,IAChDi5K,EAAU9R,EAAOpkK,IAAKwlE,EAAM,WAE5BA,EAAK3mE,WAAWq8D,YAAasK,GAEZ,SAAZ0wG,IACJA,EAAU,SAEXW,GAAmB55K,GAAai5K,EAEzBA,EACR,CAEA,SAASa,GAAU/yK,EAAU6iF,GAO5B,IANA,IAAIqvF,EAASl2G,EACZx1C,EAAS,GACT1kB,EAAQ,EACRlD,EAASoB,EAASpB,OAGXkD,EAAQlD,EAAQkD,KACvBk6D,EAAOh8D,EAAU8B,IACN2H,QAIXyoK,EAAUl2G,EAAKvyD,MAAMyoK,QAChBrvF,GAKa,SAAZqvF,IACJ1rJ,EAAQ1kB,GAAUovK,EAAS9yK,IAAK49D,EAAM,YAAe,KAC/Cx1C,EAAQ1kB,KACbk6D,EAAKvyD,MAAMyoK,QAAU,KAGK,KAAvBl2G,EAAKvyD,MAAMyoK,SAAkBD,GAAoBj2G,KACrDx1C,EAAQ1kB,GAAUgxK,GAAmB92G,KAGrB,SAAZk2G,IACJ1rJ,EAAQ1kB,GAAU,OAGlBovK,EAAS5yK,IAAK09D,EAAM,UAAWk2G,KAMlC,IAAMpwK,EAAQ,EAAGA,EAAQlD,EAAQkD,IACR,MAAnB0kB,EAAQ1kB,KACZ9B,EAAU8B,GAAQ2H,MAAMyoK,QAAU1rJ,EAAQ1kB,IAI5C,OAAO9B,CACR,CAEAogK,EAAO3gK,GAAG4rD,OAAQ,CACjBw3B,KAAM,WACL,OAAOkwF,GAAUt+J,MAAM,EACxB,EACAo+H,KAAM,WACL,OAAOkgC,GAAUt+J,KAClB,EACA8nD,OAAQ,SAAU58D,GACjB,MAAsB,kBAAVA,EACJA,EAAQ8U,KAAKouE,OAASpuE,KAAKo+H,OAG5Bp+H,KAAK6hH,MAAM,WACZ27C,GAAoBx9J,MACxB2rJ,EAAQ3rJ,MAAOouE,OAEfu9E,EAAQ3rJ,MAAOo+H,MAEjB,GACD,IAED,IAUEr0G,GACAutD,GAXEinF,GAAiB,wBAEjBC,GAAW,iCAEXC,GAAc,qCAMhB10I,GADcplC,EAAS6mE,yBACR3c,YAAalqD,EAAS8pD,cAAe,SACpD6oC,GAAQ3yF,EAAS8pD,cAAe,UAM3Bv5C,aAAc,OAAQ,SAC5BoiF,GAAMpiF,aAAc,UAAW,WAC/BoiF,GAAMpiF,aAAc,OAAQ,KAE5B60B,GAAI8kB,YAAayoC,IAIjB8zE,EAAQsT,WAAa30I,GAAIqhE,WAAW,GAAOA,WAAW,GAAOlE,UAAU7nE,QAIvE0K,GAAIC,UAAY,yBAChBohI,EAAQuT,iBAAmB50I,GAAIqhE,WAAW,GAAOlE,UAAU3E,aAK3Dx4D,GAAIC,UAAY,oBAChBohI,EAAQtnI,SAAWiG,GAAIm9D,UAKxB,IAAI03E,GAAU,CAKbC,MAAO,CAAE,EAAG,UAAW,YACvBC,IAAK,CAAE,EAAG,oBAAqB,uBAC/BC,GAAI,CAAE,EAAG,iBAAkB,oBAC3BC,GAAI,CAAE,EAAG,qBAAsB,yBAE/BC,SAAU,CAAE,EAAG,GAAI,KAYpB,SAAS1hI,GAAQx7B,EAASgP,GAIzB,IAAIi+F,EAYJ,OATCA,OAD4C,IAAjCjtG,EAAQu4I,qBACbv4I,EAAQu4I,qBAAsBvpI,GAAO,UAEI,IAA7BhP,EAAQ05B,iBACpB15B,EAAQ05B,iBAAkB1qB,GAAO,KAGjC,QAGMnjB,IAARmjB,GAAqBA,GAAOvsB,EAAUud,EAASgP,GAC5C46I,EAAOK,MAAO,CAAEjqJ,GAAWitG,GAG5BA,CACR,CAIA,SAASkwD,GAAenT,EAAOoT,GAI9B,IAHA,IAAI7nK,EAAI,EACP8yC,EAAI2hH,EAAM5hK,OAEHmN,EAAI8yC,EAAG9yC,IACdmlK,EAAS5yK,IACRkiK,EAAOz0J,GACP,cACC6nK,GAAe1C,EAAS9yK,IAAKw1K,EAAa7nK,GAAK,cAGnD,CA7CAsnK,GAAQvgB,MAAQugB,GAAQQ,MAAQR,GAAQS,SAAWT,GAAQU,QAAUV,GAAQC,MAC7ED,GAAQv6B,GAAKu6B,GAAQI,GAGf5T,EAAQtnI,SACb86I,GAAQW,SAAWX,GAAQ96I,OAAS,CAAE,EAAG,+BAAgC,cA2C1E,IAAImrI,GAAQ,YAEZ,SAASuQ,GAAezT,EAAOhqJ,EAAS09J,EAASC,EAAWC,GAO3D,IANA,IAAIp4G,EAAMm0E,EAAK3qH,EAAK6uJ,EAAM5yH,EAAUtnC,EACnCm3C,EAAW96C,EAAQypD,yBACnB84B,EAAQ,GACRhtF,EAAI,EACJ8yC,EAAI2hH,EAAM5hK,OAEHmN,EAAI8yC,EAAG9yC,IAGd,IAFAiwD,EAAOwkG,EAAOz0J,KAEQ,IAATiwD,EAGZ,GAAwB,WAAnBmkG,EAAQnkG,GAIZokG,EAAOK,MAAO1nE,EAAO/8B,EAAKqF,SAAW,CAAErF,GAASA,QAG1C,GAAM0nG,GAAMtsK,KAAM4kE,GAIlB,CAUN,IATAm0E,EAAMA,GAAO7+E,EAAShO,YAAa9sC,EAAQ0sC,cAAe,QAG1D19B,GAAQytJ,GAASl8I,KAAMilC,IAAU,CAAE,GAAI,KAAQ,GAAI9iE,cACnDm7K,EAAOhB,GAAS7tJ,IAAS6tJ,GAAQK,SACjCvjC,EAAI1xG,UAAY41I,EAAM,GAAMjU,EAAOkU,cAAet4G,GAASq4G,EAAM,GAGjEl6J,EAAIk6J,EAAM,GACFl6J,KACPg2H,EAAMA,EAAIx0C,UAKXykE,EAAOK,MAAO1nE,EAAOo3C,EAAIhuE,aAGzBguE,EAAM7+E,EAAS5yB,YAGX23D,YAAc,EACnB,MA1BC0C,EAAM16F,KAAMmY,EAAQmqD,eAAgB3E,IAkCvC,IAHA1K,EAAS+kC,YAAc,GAEvBtqF,EAAI,EACMiwD,EAAO+8B,EAAOhtF,MAGvB,GAAKooK,GAAa/T,EAAOpwB,QAASh0E,EAAMm4G,IAAe,EACjDC,GACJA,EAAQ/1K,KAAM29D,QAgBhB,GAXAva,EAAW4qC,GAAYrwB,GAGvBm0E,EAAMn+F,GAAQsf,EAAShO,YAAa0Y,GAAQ,UAGvCva,GACJkyH,GAAexjC,GAIX+jC,EAEJ,IADA/5J,EAAI,EACM6hD,EAAOm0E,EAAKh2H,MAChB+4J,GAAY97K,KAAM4kE,EAAK5+C,MAAQ,KACnC82J,EAAQ71K,KAAM29D,GAMlB,OAAO1K,CACR,CAGA,IAAIijH,GAAiB,sBAErB,SAASC,KACR,OAAO,CACR,CAEA,SAASC,KACR,OAAO,CACR,CAQA,SAASC,GAAY14G,EAAM5+C,GAC1B,OAAS4+C,IAMV,WACC,IACC,OAAO5iE,EAASkpE,aACjB,CAAE,MAAQv5C,GAAQ,CACnB,CAVmB4rJ,KAAqC,UAATv3J,EAC/C,CAWA,SAAS8kG,GAAIlmD,EAAMuL,EAAO4iC,EAAUnpG,EAAMvB,EAAI8nG,GAC7C,IAAIqtE,EAAQx3J,EAGZ,GAAsB,iBAAVmqD,EAAqB,CAShC,IAAMnqD,IANmB,iBAAb+sF,IAGXnpG,EAAOA,GAAQmpG,EACfA,OAAW9nG,GAEEklE,EACb26C,GAAIlmD,EAAM5+C,EAAM+sF,EAAUnpG,EAAMumE,EAAOnqD,GAAQmqF,GAEhD,OAAOvrC,CACR,CAqBA,GAnBa,MAARh7D,GAAsB,MAANvB,GAGpBA,EAAK0qG,EACLnpG,EAAOmpG,OAAW9nG,GACD,MAAN5C,IACc,iBAAb0qG,GAGX1qG,EAAKuB,EACLA,OAAOqB,IAIP5C,EAAKuB,EACLA,EAAOmpG,EACPA,OAAW9nG,KAGD,IAAP5C,EACJA,EAAKg1K,QACC,IAAMh1K,EACZ,OAAOu8D,EAeR,OAZa,IAARurC,IACJqtE,EAASn1K,EACTA,EAAK,SAAU4xB,GAId,OADA+uI,IAASj9C,IAAK9xF,GACPujJ,EAAOp4J,MAAO/H,KAAM9V,UAC5B,EAGAc,EAAG8hK,KAAOqT,EAAOrT,OAAUqT,EAAOrT,KAAOnB,EAAOmB,SAE1CvlG,EAAKs6D,MAAM,WACjB8pC,EAAO/uI,MAAMzzB,IAAK6W,KAAM8yD,EAAO9nE,EAAIuB,EAAMmpG,EAC1C,GACD,CA6aA,SAAS0qE,GAAgB7kH,EAAI5yC,EAAMs3J,GAG5BA,GAQNxD,EAAS5yK,IAAK0xD,EAAI5yC,GAAM,GACxBgjJ,EAAO/uI,MAAMzzB,IAAKoyD,EAAI5yC,EAAM,CAC3BslI,WAAW,EACXluH,QAAS,SAAUnD,GAClB,IAAIyjJ,EAAUr3K,EACbs3K,EAAQ7D,EAAS9yK,IAAKqW,KAAM2I,GAE7B,GAAyB,EAAlBiU,EAAM2jJ,WAAmBvgK,KAAM2I,IAKrC,GAAM23J,EAAMn2K,QAuCEwhK,EAAO/uI,MAAM89I,QAAS/xJ,IAAU,CAAC,GAAI63J,cAClD5jJ,EAAMI,uBArBN,GAdAsjJ,EAAQnoK,EAAM6F,KAAM9T,WACpBuyK,EAAS5yK,IAAKmW,KAAM2I,EAAM23J,GAK1BD,EAAWJ,EAAYjgK,KAAM2I,GAC7B3I,KAAM2I,KAED23J,KADLt3K,EAASyzK,EAAS9yK,IAAKqW,KAAM2I,KACJ03J,EACxB5D,EAAS5yK,IAAKmW,KAAM2I,GAAM,GAE1B3f,EAAS,CAAC,EAENs3K,IAAUt3K,EAWd,OARA4zB,EAAM6jJ,2BACN7jJ,EAAM0R,iBAOCtlC,GAAUA,EAAOgJ,WAefsuK,EAAMn2K,SAGjBsyK,EAAS5yK,IAAKmW,KAAM2I,EAAM,CACzB3W,MAAO25J,EAAO/uI,MAAM6gC,QAInBkuG,EAAO/0G,OAAQ0pH,EAAO,GAAK3U,EAAOxhG,MAAM3sD,WACxC8iK,EAAMnoK,MAAO,GACb6H,QAKF4c,EAAM6jJ,2BAER,UAjFkC7yK,IAA7B6uK,EAAS9yK,IAAK4xD,EAAI5yC,IACtBgjJ,EAAO/uI,MAAMzzB,IAAKoyD,EAAI5yC,EAAMo3J,GAkF/B,CA9fApU,EAAO/uI,MAAQ,CAEd+Z,OAAQ,CAAC,EAETxtC,IAAK,SAAUo+D,EAAMuL,EAAO/yC,EAASxzB,EAAMmpG,GAE1C,IAAIgrE,EAAaC,EAAajlC,EAC7B57G,EAAQ0Q,EAAGowI,EACXlG,EAASh7H,EAAU/2B,EAAMk4J,EAAYC,EACrCC,EAAWtE,EAAS9yK,IAAK49D,GAG1B,GAAM+0G,EAAY/0G,GAuClB,IAlCKxnC,EAAQA,UAEZA,GADA2gJ,EAAc3gJ,GACQA,QACtB21E,EAAWgrE,EAAYhrE,UAKnBA,GACJi2D,EAAOzzJ,KAAKmyD,gBAAiBzlE,GAAiB8wG,GAIzC31E,EAAQ+sI,OACb/sI,EAAQ+sI,KAAOnB,EAAOmB,SAIfhtI,EAASihJ,EAASjhJ,UACzBA,EAASihJ,EAASjhJ,OAAS10B,OAAOkT,OAAQ,QAEnCqiK,EAAcI,EAASl5H,UAC9B84H,EAAcI,EAASl5H,OAAS,SAAU1U,GAIzC,YAAyB,IAAXw4H,GAA0BA,EAAO/uI,MAAMokJ,YAAc7tI,EAAExqB,KACpEgjJ,EAAO/uI,MAAMg+F,SAAS7yG,MAAOw/C,EAAMr9D,gBAAc0D,CACnD,GAKD4iC,GADAsiC,GAAUA,GAAS,IAAKlqB,MAAOiwH,IAAmB,CAAE,KAC1C1uK,OACFqmC,KAEP7nB,EAAOm4J,GADPplC,EAAMokC,GAAex9I,KAAMwwC,EAAOtiC,KAAS,IACpB,GACvBqwI,GAAenlC,EAAK,IAAO,IAAKztI,MAAO,KAAMhF,OAGvC0f,IAKN+xJ,EAAU/O,EAAO/uI,MAAM89I,QAAS/xJ,IAAU,CAAC,EAG3CA,GAAS+sF,EAAWglE,EAAQ8F,aAAe9F,EAAQuG,WAAct4J,EAGjE+xJ,EAAU/O,EAAO/uI,MAAM89I,QAAS/xJ,IAAU,CAAC,EAG3Ci4J,EAAYjV,EAAO/0G,OAAQ,CAC1BjuC,KAAMA,EACNm4J,SAAUA,EACVv0K,KAAMA,EACNwzB,QAASA,EACT+sI,KAAM/sI,EAAQ+sI,KACdp3D,SAAUA,EACViiE,aAAcjiE,GAAYi2D,EAAO6G,KAAK5pH,MAAM+uH,aAAah1K,KAAM+yG,GAC/Du4C,UAAW4yB,EAAWr+K,KAAM,MAC1Bk+K,IAGKhhI,EAAW5f,EAAQnX,OAC1B+2B,EAAW5f,EAAQnX,GAAS,IACnBu4J,cAAgB,EAGnBxG,EAAQyG,QACiD,IAA9DzG,EAAQyG,MAAMnjK,KAAMupD,EAAMh7D,EAAMs0K,EAAYF,IAEvCp5G,EAAK9yD,kBACT8yD,EAAK9yD,iBAAkBkU,EAAMg4J,IAK3BjG,EAAQvxK,MACZuxK,EAAQvxK,IAAI6U,KAAMupD,EAAMq5G,GAElBA,EAAU7gJ,QAAQ+sI,OACvB8T,EAAU7gJ,QAAQ+sI,KAAO/sI,EAAQ+sI,OAK9Bp3D,EACJh2D,EAAS/9B,OAAQ+9B,EAASwhI,gBAAiB,EAAGN,GAE9ClhI,EAAS91C,KAAMg3K,GAIhBjV,EAAO/uI,MAAM+Z,OAAQhuB,IAAS,EAGhC,EAGAsc,OAAQ,SAAUsiC,EAAMuL,EAAO/yC,EAAS21E,EAAU0rE,GAEjD,IAAI17J,EAAG27J,EAAW3lC,EACjB57G,EAAQ0Q,EAAGowI,EACXlG,EAASh7H,EAAU/2B,EAAMk4J,EAAYC,EACrCC,EAAWtE,EAASD,QAASj1G,IAAUk1G,EAAS9yK,IAAK49D,GAEtD,GAAMw5G,IAAejhJ,EAASihJ,EAASjhJ,QAAvC,CAOA,IADA0Q,GADAsiC,GAAUA,GAAS,IAAKlqB,MAAOiwH,IAAmB,CAAE,KAC1C1uK,OACFqmC,KAMP,GAJA7nB,EAAOm4J,GADPplC,EAAMokC,GAAex9I,KAAMwwC,EAAOtiC,KAAS,IACpB,GACvBqwI,GAAenlC,EAAK,IAAO,IAAKztI,MAAO,KAAMhF,OAGvC0f,EAAN,CAeA,IARA+xJ,EAAU/O,EAAO/uI,MAAM89I,QAAS/xJ,IAAU,CAAC,EAE3C+2B,EAAW5f,EADXnX,GAAS+sF,EAAWglE,EAAQ8F,aAAe9F,EAAQuG,WAAct4J,IACpC,GAC7B+yH,EAAMA,EAAK,IACV,IAAI9pE,OAAQ,UAAYivG,EAAWr+K,KAAM,iBAAoB,WAG9D6+K,EAAY37J,EAAIg6B,EAASv1C,OACjBub,KACPk7J,EAAYlhI,EAAUh6B,IAEf07J,GAAeN,IAAaF,EAAUE,UACzC/gJ,GAAWA,EAAQ+sI,OAAS8T,EAAU9T,MACtCpxB,IAAOA,EAAI/4I,KAAMi+K,EAAU3yB,YAC3Bv4C,GAAYA,IAAakrE,EAAUlrE,WACxB,OAAbA,IAAqBkrE,EAAUlrE,YAChCh2D,EAAS/9B,OAAQ+D,EAAG,GAEfk7J,EAAUlrE,UACdh2D,EAASwhI,gBAELxG,EAAQz1I,QACZy1I,EAAQz1I,OAAOjnB,KAAMupD,EAAMq5G,IAOzBS,IAAc3hI,EAASv1C,SACrBuwK,EAAQ4G,WACkD,IAA/D5G,EAAQ4G,SAAStjK,KAAMupD,EAAMs5G,EAAYE,EAASl5H,SAElD8jH,EAAO4V,YAAah6G,EAAM5+C,EAAMo4J,EAASl5H,eAGnC/nB,EAAQnX,GAtChB,MAJC,IAAMA,KAAQmX,EACb6rI,EAAO/uI,MAAMqI,OAAQsiC,EAAM5+C,EAAOmqD,EAAOtiC,GAAKzQ,EAAS21E,GAAU,GA8C/Di2D,EAAOc,cAAe3sI,IAC1B28I,EAASx3I,OAAQsiC,EAAM,gBA5DxB,CA8DD,EAEAqzD,SAAU,SAAU4mD,GAEnB,IAAIlqK,EAAGoO,EAAGspG,EAAK1+G,EAASswK,EAAWa,EAClCr3K,EAAO,IAAIC,MAAOH,UAAUC,QAG5ByyB,EAAQ+uI,EAAO/uI,MAAM8kJ,IAAKF,GAE1B9hI,GACC+8H,EAAS9yK,IAAKqW,KAAM,WAAc5U,OAAOkT,OAAQ,OAC/Cse,EAAMjU,OAAU,GACnB+xJ,EAAU/O,EAAO/uI,MAAM89I,QAAS99I,EAAMjU,OAAU,CAAC,EAKlD,IAFAve,EAAM,GAAMwyB,EAENtlB,EAAI,EAAGA,EAAIpN,UAAUC,OAAQmN,IAClClN,EAAMkN,GAAMpN,UAAWoN,GAMxB,GAHAslB,EAAM+kJ,eAAiB3hK,MAGlB06J,EAAQkH,cAA2D,IAA5ClH,EAAQkH,YAAY5jK,KAAMgC,KAAM4c,GAA5D,CASA,IAJA6kJ,EAAe9V,EAAO/uI,MAAM8iB,SAAS1hC,KAAMgC,KAAM4c,EAAO8iB,GAGxDpoC,EAAI,GACMhH,EAAUmxK,EAAcnqK,QAAYslB,EAAMilJ,wBAInD,IAHAjlJ,EAAM+oH,cAAgBr1I,EAAQi3D,KAE9B7hD,EAAI,GACMk7J,EAAYtwK,EAAQovC,SAAUh6B,QACtCkX,EAAMklJ,iCAIDllJ,EAAMmlJ,aAAsC,IAAxBnB,EAAU3yB,YACnCrxH,EAAMmlJ,WAAWp/K,KAAMi+K,EAAU3yB,aAEjCrxH,EAAMgkJ,UAAYA,EAClBhkJ,EAAMrwB,KAAOq0K,EAAUr0K,UAKVqB,KAHbohH,IAAU28C,EAAO/uI,MAAM89I,QAASkG,EAAUE,WAAc,CAAC,GAAIj5H,QAC5D+4H,EAAU7gJ,SAAUhY,MAAOzX,EAAQi3D,KAAMn9D,MAGT,KAAzBwyB,EAAM5zB,OAASgmH,KACrBpyF,EAAM0R,iBACN1R,EAAMI,oBAYX,OAJK09I,EAAQsH,cACZtH,EAAQsH,aAAahkK,KAAMgC,KAAM4c,GAG3BA,EAAM5zB,MAxCb,CAyCD,EAEA02C,SAAU,SAAU9iB,EAAO8iB,GAC1B,IAAIpoC,EAAGspK,EAAWlO,EAAKuP,EAAiBC,EACvCT,EAAe,GACfP,EAAgBxhI,EAASwhI,cACzB9jD,EAAMxgG,EAAM91B,OAGb,GAAKo6K,GAIJ9jD,EAAIxwD,YAOc,UAAfhwC,EAAMjU,MAAoBiU,EAAMulJ,QAAU,GAE7C,KAAQ/kD,IAAQp9G,KAAMo9G,EAAMA,EAAIh3H,YAAc4Z,KAI7C,GAAsB,IAAjBo9G,EAAIxwD,WAAoC,UAAfhwC,EAAMjU,OAAqC,IAAjBy0G,EAAI8yC,UAAsB,CAGjF,IAFA+R,EAAkB,GAClBC,EAAmB,CAAC,EACd5qK,EAAI,EAAGA,EAAI4pK,EAAe5pK,SAME1J,IAA5Bs0K,EAFLxP,GAHAkO,EAAYlhI,EAAUpoC,IAGNo+F,SAAW,OAG1BwsE,EAAkBxP,GAAQkO,EAAUjJ,aACnChM,EAAQ+G,EAAK1yJ,MAAO3S,MAAO+vH,IAAS,EACpCuuC,EAAOzzJ,KAAMw6J,EAAK1yJ,KAAM,KAAM,CAAEo9G,IAAQjzH,QAErC+3K,EAAkBxP,IACtBuP,EAAgBr4K,KAAMg3K,GAGnBqB,EAAgB93K,QACpBs3K,EAAa73K,KAAM,CAAE29D,KAAM61D,EAAK19E,SAAUuiI,GAE5C,CAUF,OALA7kD,EAAMp9G,KACDkhK,EAAgBxhI,EAASv1C,QAC7Bs3K,EAAa73K,KAAM,CAAE29D,KAAM61D,EAAK19E,SAAUA,EAASvnC,MAAO+oK,KAGpDO,CACR,EAEAW,QAAS,SAAUh5K,EAAMu2J,GACxBv0J,OAAOgS,eAAgBuuJ,EAAOxhG,MAAM3sD,UAAWpU,EAAM,CACpD6T,YAAY,EACZC,cAAc,EAEdvT,IAAK86I,EAAYkb,GAChB,WACC,GAAK3/I,KAAKo/H,cACT,OAAOugB,EAAM3/I,KAAKo/H,cAEpB,EACA,WACC,GAAKp/H,KAAKo/H,cACT,OAAOp/H,KAAKo/H,cAAeh2I,EAE7B,EAEDS,IAAK,SAAUmI,GACd5G,OAAOgS,eAAgB4C,KAAM5W,EAAM,CAClC6T,YAAY,EACZC,cAAc,EACdC,UAAU,EACVnL,MAAOA,GAET,GAEF,EAEA0vK,IAAK,SAAUtiC,GACd,OAAOA,EAAeusB,EAAOW,SAC5BltB,EACA,IAAIusB,EAAOxhG,MAAOi1E,EACpB,EAEAs7B,QAAS,CACR3sI,KAAM,CAGLs0I,UAAU,GAEXxkC,MAAO,CAGNsjC,MAAO,SAAU50K,GAIhB,IAAIgvD,EAAKv7C,MAAQzT,EAWjB,OARKgyK,GAAe57K,KAAM44D,EAAG5yC,OAC5B4yC,EAAGsiF,OAASr5I,EAAU+2D,EAAI,UAG1B6kH,GAAgB7kH,EAAI,QAASwkH,KAIvB,CACR,EACAtiH,QAAS,SAAUlxD,GAIlB,IAAIgvD,EAAKv7C,MAAQzT,EAUjB,OAPKgyK,GAAe57K,KAAM44D,EAAG5yC,OAC5B4yC,EAAGsiF,OAASr5I,EAAU+2D,EAAI,UAE1B6kH,GAAgB7kH,EAAI,UAId,CACR,EAIA0jH,SAAU,SAAUriJ,GACnB,IAAI91B,EAAS81B,EAAM91B,OACnB,OAAOy3K,GAAe57K,KAAMmE,EAAO6hB,OAClC7hB,EAAO+2I,OAASr5I,EAAUsC,EAAQ,UAClC21K,EAAS9yK,IAAK7C,EAAQ,UACtBtC,EAAUsC,EAAQ,IACpB,GAGDw7K,aAAc,CACbN,aAAc,SAAUplJ,QAIDhvB,IAAjBgvB,EAAM5zB,QAAwB4zB,EAAMwiH,gBACxCxiH,EAAMwiH,cAAclf,YAActjG,EAAM5zB,OAE1C,KAkGH2iK,EAAO4V,YAAc,SAAUh6G,EAAM5+C,EAAMk/B,GAGrC0f,EAAK7yD,qBACT6yD,EAAK7yD,oBAAqBiU,EAAMk/B,EAElC,EAEA8jH,EAAOxhG,MAAQ,SAAUx2C,EAAK5W,GAG7B,KAAQiD,gBAAgB2rJ,EAAOxhG,OAC9B,OAAO,IAAIwhG,EAAOxhG,MAAOx2C,EAAK5W,GAI1B4W,GAAOA,EAAIhL,MACf3I,KAAKo/H,cAAgBzrH,EACrB3T,KAAK2I,KAAOgL,EAAIhL,KAIhB3I,KAAKuiK,mBAAqB5uJ,EAAI6uJ,uBACH50K,IAAzB+lB,EAAI6uJ,mBAGgB,IAApB7uJ,EAAIusG,YACL6/C,GACAC,GAKDhgK,KAAKlZ,OAAW6sB,EAAI7sB,QAAkC,IAAxB6sB,EAAI7sB,OAAO8lE,SACxCj5C,EAAI7sB,OAAOV,WACXutB,EAAI7sB,OAELkZ,KAAK2lI,cAAgBhyH,EAAIgyH,cACzB3lI,KAAKyiK,cAAgB9uJ,EAAI8uJ,eAIzBziK,KAAK2I,KAAOgL,EAIR5W,GACJ4uJ,EAAO/0G,OAAQ52C,KAAMjD,GAItBiD,KAAK0iK,UAAY/uJ,GAAOA,EAAI+uJ,WAAaj6G,KAAKC,MAG9C1oD,KAAM2rJ,EAAOW,UAAY,CAC1B,EAIAX,EAAOxhG,MAAM3sD,UAAY,CACxBK,YAAa8tJ,EAAOxhG,MACpBo4G,mBAAoBvC,GACpB6B,qBAAsB7B,GACtB8B,8BAA+B9B,GAC/B2C,aAAa,EAEbr0I,eAAgB,WACf,IAAI6E,EAAInzB,KAAKo/H,cAEbp/H,KAAKuiK,mBAAqBxC,GAErB5sI,IAAMnzB,KAAK2iK,aACfxvI,EAAE7E,gBAEJ,EACAtR,gBAAiB,WAChB,IAAImW,EAAInzB,KAAKo/H,cAEbp/H,KAAK6hK,qBAAuB9B,GAEvB5sI,IAAMnzB,KAAK2iK,aACfxvI,EAAEnW,iBAEJ,EACAyjJ,yBAA0B,WACzB,IAAIttI,EAAInzB,KAAKo/H,cAEbp/H,KAAK8hK,8BAAgC/B,GAEhC5sI,IAAMnzB,KAAK2iK,aACfxvI,EAAEstI,2BAGHzgK,KAAKgd,iBACN,GAID2uI,EAAO9pC,KAAM,CACZ7mE,QAAQ,EACRtO,SAAS,EACTC,YAAY,EACZi2H,gBAAgB,EAChB3nH,SAAS,EACT5I,QAAQ,EACRwwH,YAAY,EACZ3nH,SAAS,EACT4nH,OAAO,EACPC,OAAO,EACP5nH,UAAU,EACVvxB,MAAM,EACN,MAAQ,EACRhQ,MAAM,EACNopJ,UAAU,EACVv2K,KAAK,EACLgxI,SAAS,EACT0kC,QAAQ,EACRc,SAAS,EACTC,SAAS,EACTC,SAAS,EACTC,SAAS,EACTC,SAAS,EACTC,WAAW,EACXC,aAAa,EACbC,SAAS,EACTC,SAAS,EACTC,eAAe,EACfC,WAAW,EACXC,SAAS,EACTvoH,OAAO,GACLswG,EAAO/uI,MAAMwlJ,SAEhBzW,EAAO9pC,KAAM,CAAE1/E,MAAO,UAAW21C,KAAM,aAAc,SAAUnvE,EAAM63J,GACpE7U,EAAO/uI,MAAM89I,QAAS/xJ,GAAS,CAG9Bw4J,MAAO,WAQN,OAHAf,GAAgBpgK,KAAM2I,EAAMs3J,KAGrB,CACR,EACAxiH,QAAS,WAMR,OAHA2iH,GAAgBpgK,KAAM2I,IAGf,CACR,EAIAs2J,SAAU,SAAUriJ,GACnB,OAAO6/I,EAAS9yK,IAAKizB,EAAM91B,OAAQ6hB,EACpC,EAEA63J,aAAcA,EAEhB,IAUA7U,EAAO9pC,KAAM,CACZgiD,WAAY,YACZC,WAAY,WACZC,aAAc,cACdC,aAAc,eACZ,SAAUC,EAAMvC,GAClB/V,EAAO/uI,MAAM89I,QAASuJ,GAAS,CAC9BzD,aAAckB,EACdT,SAAUS,EAEV75H,OAAQ,SAAUjrB,GACjB,IAAIoyF,EAEHk1D,EAAUtnJ,EAAM6lJ,cAChB7B,EAAYhkJ,EAAMgkJ,UASnB,OALMsD,IAAaA,IANTlkK,MAMgC2rJ,EAAOn7J,SANvCwP,KAMyDkkK,MAClEtnJ,EAAMjU,KAAOi4J,EAAUE,SACvB9xD,EAAM4xD,EAAU7gJ,QAAQhY,MAAO/H,KAAM9V,WACrC0yB,EAAMjU,KAAO+4J,GAEP1yD,CACR,EAEF,IAEA28C,EAAO3gK,GAAG4rD,OAAQ,CAEjB62D,GAAI,SAAU36C,EAAO4iC,EAAUnpG,EAAMvB,GACpC,OAAOyiH,GAAIztG,KAAM8yD,EAAO4iC,EAAUnpG,EAAMvB,EACzC,EACA8nG,IAAK,SAAUhgC,EAAO4iC,EAAUnpG,EAAMvB,GACrC,OAAOyiH,GAAIztG,KAAM8yD,EAAO4iC,EAAUnpG,EAAMvB,EAAI,EAC7C,EACA0jH,IAAK,SAAU57C,EAAO4iC,EAAU1qG,GAC/B,IAAI41K,EAAWj4J,EACf,GAAKmqD,GAASA,EAAMxkC,gBAAkBwkC,EAAM8tG,UAW3C,OARAA,EAAY9tG,EAAM8tG,UAClBjV,EAAQ74F,EAAM6uG,gBAAiBjzD,IAC9BkyD,EAAU3yB,UACT2yB,EAAUE,SAAW,IAAMF,EAAU3yB,UACrC2yB,EAAUE,SACXF,EAAUlrE,SACVkrE,EAAU7gJ,SAEJ/f,KAER,GAAsB,iBAAV8yD,EAAqB,CAGhC,IAAMnqD,KAAQmqD,EACb9yD,KAAK0uG,IAAK/lG,EAAM+sF,EAAU5iC,EAAOnqD,IAElC,OAAO3I,IACR,CAUA,OATkB,IAAb01F,GAA0C,mBAAbA,IAGjC1qG,EAAK0qG,EACLA,OAAW9nG,IAEA,IAAP5C,IACJA,EAAKg1K,IAEChgK,KAAK6hH,MAAM,WACjB8pC,EAAO/uI,MAAMqI,OAAQjlB,KAAM8yD,EAAO9nE,EAAI0qG,EACvC,GACD,IAID,IAKCyuE,GAAe,wBAGfC,GAAW,oCAEXC,GAAe,6BAGhB,SAASC,GAAoB/8G,EAAM/S,GAClC,OAAKhwD,EAAU+iE,EAAM,UACpB/iE,EAA+B,KAArBgwD,EAAQoY,SAAkBpY,EAAUA,EAAQvqB,WAAY,OAE3D0hI,EAAQpkG,GAAOwD,SAAU,SAAW,IAGrCxD,CACR,CAGA,SAASg9G,GAAeh9G,GAEvB,OADAA,EAAK5+C,MAAyC,OAAhC4+C,EAAK1lC,aAAc,SAAsB,IAAM0lC,EAAK5+C,KAC3D4+C,CACR,CACA,SAASi9G,GAAej9G,GAOvB,MAN2C,WAApCA,EAAK5+C,MAAQ,IAAKxQ,MAAO,EAAG,GAClCovD,EAAK5+C,KAAO4+C,EAAK5+C,KAAKxQ,MAAO,GAE7BovD,EAAKtyD,gBAAiB,QAGhBsyD,CACR,CAEA,SAASk9G,GAAgB9wJ,EAAK+wJ,GAC7B,IAAIptK,EAAG8yC,EAAGzhC,EAAgBg8J,EAAUC,EAAU9kJ,EAE9C,GAAuB,IAAlB4kJ,EAAK93G,SAAV,CAKA,GAAK6vG,EAASD,QAAS7oJ,KAEtBmM,EADW28I,EAAS9yK,IAAKgqB,GACPmM,QAKjB,IAAMnX,KAFN8zJ,EAASx3I,OAAQy/I,EAAM,iBAET5kJ,EACb,IAAMxoB,EAAI,EAAG8yC,EAAItqB,EAAQnX,GAAOxe,OAAQmN,EAAI8yC,EAAG9yC,IAC9Cq0J,EAAO/uI,MAAMzzB,IAAKu7K,EAAM/7J,EAAMmX,EAAQnX,GAAQrR,IAO7ColK,EAASF,QAAS7oJ,KACtBgxJ,EAAWjI,EAASjqJ,OAAQkB,GAC5BixJ,EAAWjZ,EAAO/0G,OAAQ,CAAC,EAAG+tH,GAE9BjI,EAAS7yK,IAAK66K,EAAME,GAvBrB,CAyBD,CAGA,SAASC,GAAUlxJ,EAAK+wJ,GACvB,IAAIlgL,EAAWkgL,EAAKlgL,SAASC,cAGX,UAAbD,GAAwB+5K,GAAe57K,KAAMgxB,EAAIhL,MACrD+7J,EAAKrlJ,QAAU1L,EAAI0L,QAGK,UAAb76B,GAAqC,aAAbA,IACnCkgL,EAAKniF,aAAe5uE,EAAI4uE,aAE1B,CAEA,SAASuiF,GAAU18J,EAAYhe,EAAMkzB,EAAUqiJ,GAG9Cv1K,EAAO4gK,EAAM5gK,GAEb,IAAIyyD,EAAUihB,EAAO2hG,EAASsF,EAAY/jL,EAAM03G,EAC/CphG,EAAI,EACJ8yC,EAAIhiC,EAAWje,OACf66K,EAAW56H,EAAI,EACfp4C,EAAQ5H,EAAM,GACd66K,EAAkBxgC,EAAYzyI,GAG/B,GAAKizK,GACD76H,EAAI,GAAsB,iBAAVp4C,IAChBo5J,EAAQsT,YAAc0F,GAASzhL,KAAMqP,GACxC,OAAOoW,EAAWy5G,MAAM,SAAUx0H,GACjC,IAAI0Q,EAAOqK,EAAW08H,GAAIz3I,GACrB43K,IACJ76K,EAAM,GAAM4H,EAAMgM,KAAMgC,KAAM3S,EAAO0Q,EAAK7M,SAE3C4zK,GAAU/mK,EAAM3T,EAAMkzB,EAAUqiJ,EACjC,IAGD,GAAKv1H,IAEJ0zB,GADAjhB,EAAW2iH,GAAep1K,EAAMge,EAAY,GAAIjnB,eAAe,EAAOinB,EAAYu3J,IACjE11I,WAEmB,IAA/B4yB,EAAS6Q,WAAWvjE,SACxB0yD,EAAWihB,GAIPA,GAAS6hG,GAAU,CAOvB,IALAoF,GADAtF,EAAU9T,EAAOvpK,IAAKm7C,GAAQsf,EAAU,UAAY0nH,KAC/Bp6K,OAKbmN,EAAI8yC,EAAG9yC,IACdtW,EAAO67D,EAEFvlD,IAAM0tK,IACVhkL,EAAO2qK,EAAO7U,MAAO91J,GAAM,GAAM,GAG5B+jL,GAIJpZ,EAAOK,MAAOyT,EAASliI,GAAQv8C,EAAM,YAIvCs8B,EAAStf,KAAMoK,EAAY9Q,GAAKtW,EAAMsW,GAGvC,GAAKytK,EAOJ,IANArsE,EAAM+mE,EAASA,EAAQt1K,OAAS,GAAIhJ,cAGpCwqK,EAAOvpK,IAAKq9K,EAAS+E,IAGfltK,EAAI,EAAGA,EAAIytK,EAAYztK,IAC5BtW,EAAOy+K,EAASnoK,GACXmnK,GAAY97K,KAAM3B,EAAK2nB,MAAQ,MAClC8zJ,EAAShqJ,OAAQzxB,EAAM,eACxB2qK,EAAOn7J,SAAUkoG,EAAK13G,KAEjBA,EAAK2yB,KAA8C,YAArC3yB,EAAK2nB,MAAQ,IAAKlkB,cAG/BknK,EAAOuZ,WAAalkL,EAAKwqK,UAC7BG,EAAOuZ,SAAUlkL,EAAK2yB,IAAK,CAC1B43I,MAAOvqK,EAAKuqK,OAASvqK,EAAK6gC,aAAc,UACtC62E,GASJ+yD,EAASzqK,EAAK4gG,YAAYvxF,QAASg0K,GAAc,IAAMrjL,EAAM03G,GAKlE,CAGD,OAAOtwF,CACR,CAEA,SAAS6c,GAAQsiC,EAAMmuC,EAAUyvE,GAKhC,IAJA,IAAInkL,EACHsjG,EAAQoR,EAAWi2D,EAAO/jK,OAAQ8tG,EAAUnuC,GAASA,EACrDjwD,EAAI,EAE4B,OAAvBtW,EAAOsjG,EAAOhtF,IAAeA,IAChC6tK,GAA8B,IAAlBnkL,EAAK4rE,UACtB++F,EAAOyZ,UAAW7nI,GAAQv8C,IAGtBA,EAAKoF,aACJ++K,GAAYvtF,GAAY52F,IAC5Bk+K,GAAe3hI,GAAQv8C,EAAM,WAE9BA,EAAKoF,WAAWq8D,YAAazhE,IAI/B,OAAOumE,CACR,CAEAokG,EAAO/0G,OAAQ,CACdipH,cAAe,SAAU3uK,GACxB,OAAOA,CACR,EAEA4lJ,MAAO,SAAUvvF,EAAM89G,EAAeC,GACrC,IAAIhuK,EAAG8yC,EAAGm7H,EAAaC,EACtB1uB,EAAQvvF,EAAK6jC,WAAW,GACxBq6E,EAAS7tF,GAAYrwB,GAGtB,KAAM6jG,EAAQuT,gBAAsC,IAAlBp3G,EAAKqF,UAAoC,KAAlBrF,EAAKqF,UAC3D++F,EAAO0L,SAAU9vG,IAMnB,IAHAi+G,EAAejoI,GAAQu5G,GAGjBx/I,EAAI,EAAG8yC,GAFbm7H,EAAchoI,GAAQgqB,IAEOp9D,OAAQmN,EAAI8yC,EAAG9yC,IAC3CutK,GAAUU,EAAajuK,GAAKkuK,EAAcluK,IAK5C,GAAK+tK,EACJ,GAAKC,EAIJ,IAHAC,EAAcA,GAAehoI,GAAQgqB,GACrCi+G,EAAeA,GAAgBjoI,GAAQu5G,GAEjCx/I,EAAI,EAAG8yC,EAAIm7H,EAAYp7K,OAAQmN,EAAI8yC,EAAG9yC,IAC3CmtK,GAAgBc,EAAajuK,GAAKkuK,EAAcluK,SAGjDmtK,GAAgBl9G,EAAMuvF,GAWxB,OANA0uB,EAAejoI,GAAQu5G,EAAO,WACZ3sJ,OAAS,GAC1B+0K,GAAesG,GAAeC,GAAUloI,GAAQgqB,EAAM,WAIhDuvF,CACR,EAEAsuB,UAAW,SAAUrZ,GAKpB,IAJA,IAAIx/J,EAAMg7D,EAAM5+C,EACf+xJ,EAAU/O,EAAO/uI,MAAM89I,QACvBpjK,EAAI,OAE6B1J,KAAxB25D,EAAOwkG,EAAOz0J,IAAqBA,IAC5C,GAAKglK,EAAY/0G,GAAS,CACzB,GAAOh7D,EAAOg7D,EAAMk1G,EAASnQ,SAAc,CAC1C,GAAK//J,EAAKuzB,OACT,IAAMnX,KAAQpc,EAAKuzB,OACb46I,EAAS/xJ,GACbgjJ,EAAO/uI,MAAMqI,OAAQsiC,EAAM5+C,GAI3BgjJ,EAAO4V,YAAah6G,EAAM5+C,EAAMpc,EAAKs7C,QAOxC0f,EAAMk1G,EAASnQ,cAAY1+J,CAC5B,CACK25D,EAAMm1G,EAASpQ,WAInB/kG,EAAMm1G,EAASpQ,cAAY1+J,EAE7B,CAEF,IAGD+9J,EAAO3gK,GAAG4rD,OAAQ,CACjBqoF,OAAQ,SAAUvpC,GACjB,OAAOzwE,GAAQjlB,KAAM01F,GAAU,EAChC,EAEAzwE,OAAQ,SAAUywE,GACjB,OAAOzwE,GAAQjlB,KAAM01F,EACtB,EAEApjF,KAAM,SAAUtgB,GACf,OAAOygB,EAAQzS,MAAM,SAAUhO,GAC9B,YAAiBpE,IAAVoE,EACN25J,EAAOr5I,KAAMtS,MACbA,KAAKg0I,QAAQnyB,MAAM,WACK,IAAlB7hH,KAAK4sD,UAAoC,KAAlB5sD,KAAK4sD,UAAqC,IAAlB5sD,KAAK4sD,WACxD5sD,KAAK4hF,YAAc5vF,EAErB,GACF,GAAG,KAAMA,EAAO9H,UAAUC,OAC3B,EAEA6d,OAAQ,WACP,OAAO88J,GAAU9kK,KAAM9V,WAAW,SAAUq9D,GACpB,IAAlBvnD,KAAK4sD,UAAoC,KAAlB5sD,KAAK4sD,UAAqC,IAAlB5sD,KAAK4sD,UAC3C03G,GAAoBtkK,KAAMunD,GAChC1Y,YAAa0Y,EAEtB,GACD,EAEAz/C,QAAS,WACR,OAAOg9J,GAAU9kK,KAAM9V,WAAW,SAAUq9D,GAC3C,GAAuB,IAAlBvnD,KAAK4sD,UAAoC,KAAlB5sD,KAAK4sD,UAAqC,IAAlB5sD,KAAK4sD,SAAiB,CACzE,IAAI9lE,EAASw9K,GAAoBtkK,KAAMunD,GACvCzgE,EAAOwkE,aAAc/D,EAAMzgE,EAAOmjC,WACnC,CACD,GACD,EAEAiqE,OAAQ,WACP,OAAO4wE,GAAU9kK,KAAM9V,WAAW,SAAUq9D,GACtCvnD,KAAK5Z,YACT4Z,KAAK5Z,WAAWklE,aAAc/D,EAAMvnD,KAEtC,GACD,EAEAo0F,MAAO,WACN,OAAO0wE,GAAU9kK,KAAM9V,WAAW,SAAUq9D,GACtCvnD,KAAK5Z,YACT4Z,KAAK5Z,WAAWklE,aAAc/D,EAAMvnD,KAAK2sD,YAE3C,GACD,EAEAqnF,MAAO,WAIN,IAHA,IAAIzsF,EACHjwD,EAAI,EAE2B,OAAtBiwD,EAAOvnD,KAAM1I,IAAeA,IACd,IAAlBiwD,EAAKqF,WAGT++F,EAAOyZ,UAAW7nI,GAAQgqB,GAAM,IAGhCA,EAAKq6B,YAAc,IAIrB,OAAO5hF,IACR,EAEA82I,MAAO,SAAUuuB,EAAeC,GAI/B,OAHAD,EAAiC,MAAjBA,GAAgCA,EAChDC,EAAyC,MAArBA,EAA4BD,EAAgBC,EAEzDtlK,KAAK5d,KAAK,WAChB,OAAOupK,EAAO7U,MAAO92I,KAAMqlK,EAAeC,EAC3C,GACD,EAEAp0K,KAAM,SAAUc,GACf,OAAOygB,EAAQzS,MAAM,SAAUhO,GAC9B,IAAIu1D,EAAOvnD,KAAM,IAAO,CAAC,EACxB1I,EAAI,EACJ8yC,EAAIpqC,KAAK7V,OAEV,QAAeyD,IAAVoE,GAAyC,IAAlBu1D,EAAKqF,SAChC,OAAOrF,EAAKv9B,UAIb,GAAsB,iBAAVh4B,IAAuBmyK,GAAaxhL,KAAMqP,KACpD4sK,IAAWJ,GAASl8I,KAAMtwB,IAAW,CAAE,GAAI,KAAQ,GAAIvN,eAAkB,CAE1EuN,EAAQ25J,EAAOkU,cAAe7tK,GAE9B,IACC,KAAQsF,EAAI8yC,EAAG9yC,IAIS,KAHvBiwD,EAAOvnD,KAAM1I,IAAO,CAAC,GAGXs1D,WACT++F,EAAOyZ,UAAW7nI,GAAQgqB,GAAM,IAChCA,EAAKv9B,UAAYh4B,GAInBu1D,EAAO,CAGR,CAAE,MAAQp0B,GAAK,CAChB,CAEKo0B,GACJvnD,KAAKg0I,QAAQhsI,OAAQhW,EAEvB,GAAG,KAAMA,EAAO9H,UAAUC,OAC3B,EAEAu7K,YAAa,WACZ,IAAI/F,EAAU,GAGd,OAAOmF,GAAU9kK,KAAM9V,WAAW,SAAUq9D,GAC3C,IAAI92D,EAASuP,KAAK5Z,WAEbulK,EAAOpwB,QAASv7H,KAAM2/J,GAAY,IACtChU,EAAOyZ,UAAW7nI,GAAQv9B,OACrBvP,GACJA,EAAO08D,aAAc5F,EAAMvnD,MAK9B,GAAG2/J,EACJ,IAGDhU,EAAO9pC,KAAM,CACZyY,SAAU,SACVqrC,UAAW,UACXr6G,aAAc,SACds6G,YAAa,QACbC,WAAY,gBACV,SAAUz8K,EAAM6+D,GAClB0jG,EAAO3gK,GAAI5B,GAAS,SAAUssG,GAO7B,IANA,IAAIq2D,EACH/8C,EAAM,GACNj5B,EAAS41E,EAAQj2D,GACjBr8E,EAAO08D,EAAO5rF,OAAS,EACvBmN,EAAI,EAEGA,GAAK+hB,EAAM/hB,IAClBy0J,EAAQz0J,IAAM+hB,EAAOrZ,KAAOA,KAAK82I,OAAO,GACxC6U,EAAQ51E,EAAQz+E,IAAO2wD,GAAY8jG,GAInCniK,EAAKme,MAAOinG,EAAK+8C,EAAMpiK,OAGxB,OAAOqW,KAAK8rJ,UAAW98C,EACxB,CACD,IACA,IAAI82D,GAAY,IAAIl0G,OAAQ,KAAOwrG,GAAO,kBAAmB,KAEzD2I,GAAc,MAGdC,GAAY,SAAUz+G,GAKxB,IAAI39B,EAAO29B,EAAKpmE,cAAcC,YAM9B,OAJMwoC,GAASA,EAAKq8I,SACnBr8I,EAAO3oC,GAGD2oC,EAAK9kC,iBAAkByiE,EAC/B,EAEGgR,GAAO,SAAUhR,EAAMx8D,EAASuyB,GACnC,IAAI0xF,EAAK5lH,EACR8b,EAAM,CAAC,EAGR,IAAM9b,KAAQ2B,EACbma,EAAK9b,GAASm+D,EAAKvyD,MAAO5L,GAC1Bm+D,EAAKvyD,MAAO5L,GAAS2B,EAAS3B,GAM/B,IAAMA,KAHN4lH,EAAM1xF,EAAStf,KAAMupD,GAGPx8D,EACbw8D,EAAKvyD,MAAO5L,GAAS8b,EAAK9b,GAG3B,OAAO4lH,CACR,EAGIk3D,GAAY,IAAIt0G,OAAQ0rG,GAAU96K,KAAM,KAAO,KAE/C8rK,GAAa,sBAGb6X,GAAW,IAAIv0G,OAClB,IAAM08F,GAAa,8BAAgCA,GAAa,KAChE,KAmJD,SAAS8X,GAAQ7+G,EAAMn+D,EAAMi9K,GAC5B,IAAIjjL,EAAOkjL,EAAU5xH,EAAUs6D,EAC9Bu3D,EAAeR,GAAYpjL,KAAMyG,GAMjC4L,EAAQuyD,EAAKvyD,MAgDd,OA9CAqxK,EAAWA,GAAYL,GAAWz+G,MAMjCynD,EAAMq3D,EAASG,iBAAkBp9K,IAAUi9K,EAAUj9K,GAGhDm9K,IAOJv3D,EAAMA,EAAI3+G,QAAS81K,GAAU,OAGjB,KAARn3D,GAAep3B,GAAYrwB,KAC/BynD,EAAM28C,EAAO32J,MAAOuyD,EAAMn+D,KAQrBgiK,EAAQqb,kBAAoBX,GAAUnjL,KAAMqsH,IAASk3D,GAAUvjL,KAAMyG,KAG1EhG,EAAQ4R,EAAM5R,MACdkjL,EAAWtxK,EAAMsxK,SACjB5xH,EAAW1/C,EAAM0/C,SAGjB1/C,EAAMsxK,SAAWtxK,EAAM0/C,SAAW1/C,EAAM5R,MAAQ4rH,EAChDA,EAAMq3D,EAASjjL,MAGf4R,EAAM5R,MAAQA,EACd4R,EAAMsxK,SAAWA,EACjBtxK,EAAM0/C,SAAWA,SAIJ9mD,IAARohH,EAINA,EAAM,GACNA,CACF,CAGA,SAAS03D,GAAcC,EAAaC,GAGnC,MAAO,CACNj9K,IAAK,WACJ,IAAKg9K,IASL,OAAS3mK,KAAKrW,IAAMi9K,GAAS7+J,MAAO/H,KAAM9V,kBALlC8V,KAAKrW,GAMd,EAEF,EA/NA,WAIC,SAASk9K,IAGR,GAAM98I,EAAN,CAIA4D,EAAU34B,MAAMgtB,QAAU,+EAE1B+H,EAAI/0B,MAAMgtB,QACT,4HAGDp9B,GAAgBiqD,YAAalhB,GAAYkhB,YAAa9kB,GAEtD,IAAI+8I,EAAW7lL,EAAO6D,iBAAkBilC,GACxCg9I,EAAoC,OAAjBD,EAASjjL,IAG5BmjL,EAAsE,KAA9CC,EAAoBH,EAASI,YAIrDn9I,EAAI/0B,MAAMjR,MAAQ,MAClBojL,EAA6D,KAAzCF,EAAoBH,EAAS/iL,OAIjDqjL,EAAgE,KAAzCH,EAAoBH,EAAS1jL,OAMpD2mC,EAAI/0B,MAAM7N,SAAW,WACrBkgL,EAAiE,KAA9CJ,EAAoBl9I,EAAI5mC,YAAc,GAEzDyB,GAAgB69D,YAAa90B,GAI7B5D,EAAM,IApCN,CAqCD,CAEA,SAASk9I,EAAoB/9G,GAC5B,OAAOvnE,KAAKG,MAAOg3B,WAAYowC,GAChC,CAEA,IAAI69G,EAAkBK,EAAsBC,EAAkBF,EAC7DG,EAAyBN,EACzBr5I,EAAYhpC,EAAS8pD,cAAe,OACpC1kB,EAAMplC,EAAS8pD,cAAe,OAGzB1kB,EAAI/0B,QAMV+0B,EAAI/0B,MAAMuyK,eAAiB,cAC3Bx9I,EAAIqhE,WAAW,GAAOp2F,MAAMuyK,eAAiB,GAC7Cnc,EAAQoc,gBAA+C,gBAA7Bz9I,EAAI/0B,MAAMuyK,eAEpC5b,EAAO/0G,OAAQw0G,EAAS,CACvBqc,kBAAmB,WAElB,OADAZ,IACOO,CACR,EACAX,eAAgB,WAEf,OADAI,IACOM,CACR,EACAO,cAAe,WAEd,OADAb,IACOE,CACR,EACAY,mBAAoB,WAEnB,OADAd,IACOG,CACR,EACAY,cAAe,WAEd,OADAf,IACOQ,CACR,EAWAQ,qBAAsB,WACrB,IAAIzpB,EAAO2gB,EAAI+I,EAASC,EAmCxB,OAlCgC,MAA3BT,IACJlpB,EAAQz5J,EAAS8pD,cAAe,SAChCswH,EAAKp6K,EAAS8pD,cAAe,MAC7Bq5H,EAAUnjL,EAAS8pD,cAAe,OAElC2vG,EAAMppJ,MAAMgtB,QAAU,2DACtB+8I,EAAG/pK,MAAMgtB,QAAU,mBAKnB+8I,EAAG/pK,MAAM1R,OAAS,MAClBwkL,EAAQ9yK,MAAM1R,OAAS,MAQvBwkL,EAAQ9yK,MAAMyoK,QAAU,QAExB74K,GACEiqD,YAAauvG,GACbvvG,YAAakwH,GACblwH,YAAai5H,GAEfC,EAAU9mL,EAAO6D,iBAAkBi6K,GACnCuI,EAA4B94J,SAAUu5J,EAAQzkL,OAAQ,IACrDkrB,SAAUu5J,EAAQC,eAAgB,IAClCx5J,SAAUu5J,EAAQE,kBAAmB,MAAWlJ,EAAG17K,aAEpDuB,GAAgB69D,YAAa27F,IAEvBkpB,CACR,IAEA,CA1IF,GAkOA,IAAIY,GAAc,CAAE,SAAU,MAAO,MACpCC,GAAaxjL,EAAS8pD,cAAe,OAAQz5C,MAC7CozK,GAAc,CAAC,EAkBhB,SAASC,GAAej/K,GAGvB,OAFYuiK,EAAO2c,SAAUl/K,IAAUg/K,GAAah/K,KAK/CA,KAAQ++K,GACL/+K,EAEDg/K,GAAah/K,GAxBrB,SAAyBA,GAMxB,IAHA,IAAIm/K,EAAUn/K,EAAM,GAAI0V,cAAgB1V,EAAK+O,MAAO,GACnDb,EAAI4wK,GAAY/9K,OAETmN,KAEP,IADAlO,EAAO8+K,GAAa5wK,GAAMixK,KACbJ,GACZ,OAAO/+K,CAGV,CAY8Bo/K,CAAgBp/K,IAAUA,EACxD,CAGA,IAKCq/K,GAAe,4BACfC,GAAU,CAAEvhL,SAAU,WAAYwhL,WAAY,SAAUlL,QAAS,SACjEmL,GAAqB,CACpBC,cAAe,IACfC,WAAY,OAGd,SAASC,GAAmB7c,EAAOl6J,EAAOg3K,GAIzC,IAAI5+G,EAAUizG,GAAQ/6I,KAAMtwB,GAC5B,OAAOo4D,EAGNzoE,KAAKC,IAAK,EAAGwoE,EAAS,IAAQ4+G,GAAY,KAAU5+G,EAAS,IAAO,MACpEp4D,CACF,CAEA,SAASi3K,GAAoB1hH,EAAM2hH,EAAWjwE,EAAKkwE,EAAa19K,EAAQ29K,GACvE,IAAI9xK,EAAkB,UAAd4xK,EAAwB,EAAI,EACnCG,EAAQ,EACR7rE,EAAQ,EAGT,GAAKvE,KAAUkwE,EAAc,SAAW,WACvC,OAAO,EAGR,KAAQ7xK,EAAI,EAAGA,GAAK,EAGN,WAAR2hG,IACJuE,GAASmuD,EAAOpkK,IAAKggE,EAAM0xC,EAAMqkE,GAAWhmK,IAAK,EAAM7L,IAIlD09K,GAmBQ,YAARlwE,IACJuE,GAASmuD,EAAOpkK,IAAKggE,EAAM,UAAY+1G,GAAWhmK,IAAK,EAAM7L,IAIjD,WAARwtG,IACJuE,GAASmuD,EAAOpkK,IAAKggE,EAAM,SAAW+1G,GAAWhmK,GAAM,SAAS,EAAM7L,MAtBvE+xG,GAASmuD,EAAOpkK,IAAKggE,EAAM,UAAY+1G,GAAWhmK,IAAK,EAAM7L,GAGhD,YAARwtG,EACJuE,GAASmuD,EAAOpkK,IAAKggE,EAAM,SAAW+1G,GAAWhmK,GAAM,SAAS,EAAM7L,GAItE49K,GAAS1d,EAAOpkK,IAAKggE,EAAM,SAAW+1G,GAAWhmK,GAAM,SAAS,EAAM7L,IAoCzE,OAhBM09K,GAAeC,GAAe,IAInC5rE,GAAS77G,KAAKC,IAAK,EAAGD,KAAKkzC,KAC1B0yB,EAAM,SAAW2hH,EAAW,GAAIpqK,cAAgBoqK,EAAU/wK,MAAO,IACjEixK,EACA5rE,EACA6rE,EACA,MAIM,GAGD7rE,CACR,CAEA,SAAS8rE,GAAkB/hH,EAAM2hH,EAAWG,GAG3C,IAAI59K,EAASu6K,GAAWz+G,GAKvB4hH,IADmB/d,EAAQqc,qBAAuB4B,IAEE,eAAnD1d,EAAOpkK,IAAKggE,EAAM,aAAa,EAAO97D,GACvC89K,EAAmBJ,EAEnBj1J,EAAMkyJ,GAAQ7+G,EAAM2hH,EAAWz9K,GAC/B+9K,EAAa,SAAWN,EAAW,GAAIpqK,cAAgBoqK,EAAU/wK,MAAO,GAIzE,GAAK2tK,GAAUnjL,KAAMuxB,GAAQ,CAC5B,IAAMm1J,EACL,OAAOn1J,EAERA,EAAM,MACP,CAwCA,QAlCQk3I,EAAQqc,qBAAuB0B,IAMrC/d,EAAQyc,wBAA0BrjL,EAAU+iE,EAAM,OAI3C,SAARrzC,IAIC4E,WAAY5E,IAA0D,WAAjDy3I,EAAOpkK,IAAKggE,EAAM,WAAW,EAAO97D,KAG1D87D,EAAKkiH,iBAAiBt/K,SAEtBg/K,EAAiE,eAAnDxd,EAAOpkK,IAAKggE,EAAM,aAAa,EAAO97D,IAKpD89K,EAAmBC,KAAcjiH,KAEhCrzC,EAAMqzC,EAAMiiH,MAKdt1J,EAAM4E,WAAY5E,IAAS,GAI1B+0J,GACC1hH,EACA2hH,EACAG,IAAWF,EAAc,SAAW,WACpCI,EACA99K,EAGAyoB,GAEE,IACL,CA8SA,SAASw1J,GAAOniH,EAAMx8D,EAASqiC,EAAMnlC,EAAK0hL,GACzC,OAAO,IAAID,GAAMlsK,UAAU45B,KAAMmwB,EAAMx8D,EAASqiC,EAAMnlC,EAAK0hL,EAC5D,CA9SAhe,EAAO/0G,OAAQ,CAIdgzH,SAAU,CACTC,QAAS,CACRlgL,IAAK,SAAU49D,EAAM8+G,GACpB,GAAKA,EAAW,CAGf,IAAIr3D,EAAMo3D,GAAQ7+G,EAAM,WACxB,MAAe,KAARynD,EAAa,IAAMA,CAC3B,CACD,IAKFkvD,UAAW,CACV,yBAA2B,EAC3B,aAAe,EACf,aAAe,EACf,UAAY,EACZ,YAAc,EACd,YAAc,EACd,UAAY,EACZ,YAAc,EACd,eAAiB,EACjB,iBAAmB,EACnB,SAAW,EACX,YAAc,EACd,cAAgB,EAChB,YAAc,EACd,SAAW,EACX,OAAS,EACT,SAAW,EACX,QAAU,EACV,QAAU,EACV,MAAQ,GAKToK,SAAU,CAAC,EAGXtzK,MAAO,SAAUuyD,EAAMn+D,EAAM4I,EAAOq3K,GAGnC,GAAM9hH,GAA0B,IAAlBA,EAAKqF,UAAoC,IAAlBrF,EAAKqF,UAAmBrF,EAAKvyD,MAAlE,CAKA,IAAIg6G,EAAKrmG,EAAMuqF,EACd42E,EAAWnrK,EAAWvV,GACtBm9K,EAAeR,GAAYpjL,KAAMyG,GACjC4L,EAAQuyD,EAAKvyD,MAad,GARMuxK,IACLn9K,EAAOi/K,GAAeyB,IAIvB52E,EAAQy4D,EAAOie,SAAUxgL,IAAUuiK,EAAOie,SAAUE,QAGrCl8K,IAAVoE,EA0CJ,OAAKkhG,GAAS,QAASA,QACwBtlG,KAA5CohH,EAAM9b,EAAMvpG,IAAK49D,GAAM,EAAO8hH,IAEzBr6D,EAIDh6G,EAAO5L,GA7CA,WAHduf,SAAc3W,KAGcg9G,EAAMquD,GAAQ/6I,KAAMtwB,KAAag9G,EAAK,KACjEh9G,EAAQ0rK,GAAWn2G,EAAMn+D,EAAM4lH,GAG/BrmG,EAAO,UAIM,MAAT3W,GAAiBA,GAAUA,IAOlB,WAAT2W,GAAsB49J,IAC1Bv0K,GAASg9G,GAAOA,EAAK,KAAS28C,EAAOuS,UAAW4L,GAAa,GAAK,OAI7D1e,EAAQoc,iBAA6B,KAAVx1K,GAAiD,IAAjC5I,EAAK7C,QAAS,gBAC9DyO,EAAO5L,GAAS,WAIX8pG,GAAY,QAASA,QACsBtlG,KAA9CoE,EAAQkhG,EAAMrpG,IAAK09D,EAAMv1D,EAAOq3K,MAE7B9C,EACJvxK,EAAMmtB,YAAa/4B,EAAM4I,GAEzBgD,EAAO5L,GAAS4I,GAtDnB,CAsED,EAEAzK,IAAK,SAAUggE,EAAMn+D,EAAMigL,EAAO59K,GACjC,IAAIyoB,EAAK23I,EAAK34D,EACb42E,EAAWnrK,EAAWvV,GA6BvB,OA5BgB28K,GAAYpjL,KAAMyG,KAMjCA,EAAOi/K,GAAeyB,KAIvB52E,EAAQy4D,EAAOie,SAAUxgL,IAAUuiK,EAAOie,SAAUE,KAGtC,QAAS52E,IACtBh/E,EAAMg/E,EAAMvpG,IAAK49D,GAAM,EAAM8hH,SAIjBz7K,IAARsmB,IACJA,EAAMkyJ,GAAQ7+G,EAAMn+D,EAAMqC,IAId,WAARyoB,GAAoB9qB,KAAQw/K,KAChC10J,EAAM00J,GAAoBx/K,IAIZ,KAAVigL,GAAgBA,GACpBxd,EAAM/yI,WAAY5E,IACD,IAAVm1J,GAAkBh1I,SAAUw3H,GAAQA,GAAO,EAAI33I,GAGhDA,CACR,IAGDy3I,EAAO9pC,KAAM,CAAE,SAAU,UAAW,SAAU7pH,EAAIkxK,GACjDvd,EAAOie,SAAUV,GAAc,CAC9Bv/K,IAAK,SAAU49D,EAAM8+G,EAAUgD,GAC9B,GAAKhD,EAIJ,OAAOoC,GAAa9lL,KAAMgpK,EAAOpkK,IAAKggE,EAAM,aAQxCA,EAAKkiH,iBAAiBt/K,QAAWo9D,EAAK3kE,wBAAwBQ,MAIjEkmL,GAAkB/hH,EAAM2hH,EAAWG,GAHnC9wG,GAAMhR,EAAMmhH,IAAS,WACpB,OAAOY,GAAkB/hH,EAAM2hH,EAAWG,EAC3C,GAGH,EAEAx/K,IAAK,SAAU09D,EAAMv1D,EAAOq3K,GAC3B,IAAIj/G,EACH3+D,EAASu6K,GAAWz+G,GAIpBwiH,GAAsB3e,EAAQwc,iBACT,aAApBn8K,EAAOtE,SAIRgiL,GADkBY,GAAsBV,IAEY,eAAnD1d,EAAOpkK,IAAKggE,EAAM,aAAa,EAAO97D,GACvCu9K,EAAWK,EACVJ,GACC1hH,EACA2hH,EACAG,EACAF,EACA19K,GAED,EAqBF,OAjBK09K,GAAeY,IACnBf,GAAYrnL,KAAKkzC,KAChB0yB,EAAM,SAAW2hH,EAAW,GAAIpqK,cAAgBoqK,EAAU/wK,MAAO,IACjE2gB,WAAYrtB,EAAQy9K,IACpBD,GAAoB1hH,EAAM2hH,EAAW,UAAU,EAAOz9K,GACtD,KAKGu9K,IAAc5+G,EAAUizG,GAAQ/6I,KAAMtwB,KACb,QAA3Bo4D,EAAS,IAAO,QAElB7C,EAAKvyD,MAAOk0K,GAAcl3K,EAC1BA,EAAQ25J,EAAOpkK,IAAKggE,EAAM2hH,IAGpBH,GAAmBxhH,EAAMv1D,EAAOg3K,EACxC,EAEF,IAEArd,EAAOie,SAAS1C,WAAaR,GAActb,EAAQuc,oBAClD,SAAUpgH,EAAM8+G,GACf,GAAKA,EACJ,OAASvtJ,WAAYstJ,GAAQ7+G,EAAM,gBAClCA,EAAK3kE,wBAAwBc,KAC5B60E,GAAMhR,EAAM,CAAE2/G,WAAY,IAAK,WAC9B,OAAO3/G,EAAK3kE,wBAAwBc,IACrC,KACE,IAEN,IAIDioK,EAAO9pC,KAAM,CACZzsH,OAAQ,GACRtC,QAAS,GACTk3K,OAAQ,UACN,SAAUt3J,EAAQ27G,GACpBs9B,EAAOie,SAAUl3J,EAAS27G,GAAW,CACpC47C,OAAQ,SAAUj4K,GAOjB,IANA,IAAIsF,EAAI,EACP4yK,EAAW,CAAC,EAGZxhG,EAAyB,iBAAV12E,EAAqBA,EAAM/D,MAAO,KAAQ,CAAE+D,GAEpDsF,EAAI,EAAGA,IACd4yK,EAAUx3J,EAAS4qJ,GAAWhmK,GAAM+2H,GACnC3lD,EAAOpxE,IAAOoxE,EAAOpxE,EAAI,IAAOoxE,EAAO,GAGzC,OAAOwhG,CACR,GAGe,WAAXx3J,IACJi5I,EAAOie,SAAUl3J,EAAS27G,GAASxkI,IAAMk/K,GAE3C,IAEApd,EAAO3gK,GAAG4rD,OAAQ,CACjBrvD,IAAK,SAAU6B,EAAM4I,GACpB,OAAOygB,EAAQzS,MAAM,SAAUunD,EAAMn+D,EAAM4I,GAC1C,IAAIvG,EAAQkD,EACXvM,EAAM,CAAC,EACPkV,EAAI,EAEL,GAAKjN,MAAMkkB,QAASnlB,GAAS,CAI5B,IAHAqC,EAASu6K,GAAWz+G,GACpB54D,EAAMvF,EAAKe,OAEHmN,EAAI3I,EAAK2I,IAChBlV,EAAKgH,EAAMkO,IAAQq0J,EAAOpkK,IAAKggE,EAAMn+D,EAAMkO,IAAK,EAAO7L,GAGxD,OAAOrJ,CACR,CAEA,YAAiBwL,IAAVoE,EACN25J,EAAO32J,MAAOuyD,EAAMn+D,EAAM4I,GAC1B25J,EAAOpkK,IAAKggE,EAAMn+D,EACpB,GAAGA,EAAM4I,EAAO9H,UAAUC,OAAS,EACpC,IAODwhK,EAAO+d,MAAQA,GAEfA,GAAMlsK,UAAY,CACjBK,YAAa6rK,GACbtyI,KAAM,SAAUmwB,EAAMx8D,EAASqiC,EAAMnlC,EAAK0hL,EAAQ1L,GACjDj+J,KAAKunD,KAAOA,EACZvnD,KAAKotB,KAAOA,EACZptB,KAAK2pK,OAASA,GAAUhe,EAAOge,OAAO1K,SACtCj/J,KAAKjV,QAAUA,EACfiV,KAAKhY,MAAQgY,KAAK0oD,IAAM1oD,KAAKo9G,MAC7Bp9G,KAAK/X,IAAMA,EACX+X,KAAKi+J,KAAOA,IAAUtS,EAAOuS,UAAW9wI,GAAS,GAAK,KACvD,EACAgwF,IAAK,WACJ,IAAIlqB,EAAQw2E,GAAMS,UAAWnqK,KAAKotB,MAElC,OAAO8lE,GAASA,EAAMvpG,IACrBupG,EAAMvpG,IAAKqW,MACX0pK,GAAMS,UAAUlL,SAASt1K,IAAKqW,KAChC,EACAw+D,IAAK,SAAU4rG,GACd,IAAIC,EACHn3E,EAAQw2E,GAAMS,UAAWnqK,KAAKotB,MAoB/B,OAlBKptB,KAAKjV,QAAQk+D,SACjBjpD,KAAK+rE,IAAMs+F,EAAQ1e,EAAOge,OAAQ3pK,KAAK2pK,QACtCS,EAASpqK,KAAKjV,QAAQk+D,SAAWmhH,EAAS,EAAG,EAAGpqK,KAAKjV,QAAQk+D,UAG9DjpD,KAAK+rE,IAAMs+F,EAAQD,EAEpBpqK,KAAK0oD,KAAQ1oD,KAAK/X,IAAM+X,KAAKhY,OAAUqiL,EAAQrqK,KAAKhY,MAE/CgY,KAAKjV,QAAQoqC,MACjBn1B,KAAKjV,QAAQoqC,KAAKn3B,KAAMgC,KAAKunD,KAAMvnD,KAAK0oD,IAAK1oD,MAGzCkzF,GAASA,EAAMrpG,IACnBqpG,EAAMrpG,IAAKmW,MAEX0pK,GAAMS,UAAUlL,SAASp1K,IAAKmW,MAExBA,IACR,GAGD0pK,GAAMlsK,UAAU45B,KAAK55B,UAAYksK,GAAMlsK,UAEvCksK,GAAMS,UAAY,CACjBlL,SAAU,CACTt1K,IAAK,SAAUi0K,GACd,IAAI50K,EAIJ,OAA6B,IAAxB40K,EAAMr2G,KAAKqF,UACa,MAA5BgxG,EAAMr2G,KAAMq2G,EAAMxwI,OAAoD,MAAlCwwI,EAAMr2G,KAAKvyD,MAAO4oK,EAAMxwI,MACrDwwI,EAAMr2G,KAAMq2G,EAAMxwI,OAO1BpkC,EAAS2iK,EAAOpkK,IAAKq2K,EAAMr2G,KAAMq2G,EAAMxwI,KAAM,MAGhB,SAAXpkC,EAAwBA,EAAJ,CACvC,EACAa,IAAK,SAAU+zK,GAKTjS,EAAOrwH,GAAGnG,KAAMyoI,EAAMxwI,MAC1Bu+H,EAAOrwH,GAAGnG,KAAMyoI,EAAMxwI,MAAQwwI,GACK,IAAxBA,EAAMr2G,KAAKqF,WACtB++F,EAAOie,SAAUhM,EAAMxwI,OAC6B,MAAnDwwI,EAAMr2G,KAAKvyD,MAAOqzK,GAAezK,EAAMxwI,OAGxCwwI,EAAMr2G,KAAMq2G,EAAMxwI,MAASwwI,EAAMl1G,IAFjCijG,EAAO32J,MAAO4oK,EAAMr2G,KAAMq2G,EAAMxwI,KAAMwwI,EAAMl1G,IAAMk1G,EAAMK,KAI1D,IAMFyL,GAAMS,UAAU9lL,UAAYqlL,GAAMS,UAAUhmL,WAAa,CACxD0F,IAAK,SAAU+zK,GACTA,EAAMr2G,KAAKqF,UAAYgxG,EAAMr2G,KAAKnhE,aACtCw3K,EAAMr2G,KAAMq2G,EAAMxwI,MAASwwI,EAAMl1G,IAEnC,GAGDijG,EAAOge,OAAS,CACfW,OAAQ,SAAUxuJ,GACjB,OAAOA,CACR,EACAyuJ,MAAO,SAAUzuJ,GAChB,MAAO,GAAMn6B,KAAK6oL,IAAK1uJ,EAAIn6B,KAAK8oL,IAAO,CACxC,EACAxL,SAAU,SAGXtT,EAAOrwH,GAAKouI,GAAMlsK,UAAU45B,KAG5Bu0H,EAAOrwH,GAAGnG,KAAO,CAAC,EAKlB,IACCu1I,GAAOC,GACPC,GAAW,yBACXC,GAAO,cAER,SAASz7D,KACHu7D,MACqB,IAApBhmL,EAAS4hE,QAAoBtlE,EAAO0lE,sBACxC1lE,EAAO0lE,sBAAuByoD,IAE9BnuH,EAAOs/B,WAAY6uF,GAAUu8C,EAAOrwH,GAAGwvI,UAGxCnf,EAAOrwH,GAAGyvI,OAEZ,CAGA,SAASC,KAIR,OAHA/pL,EAAOs/B,YAAY,WAClBmqJ,QAAQ98K,CACT,IACS88K,GAAQjiH,KAAKC,KACvB,CAGA,SAASuiH,GAAOtiK,EAAMuiK,GACrB,IAAI7vH,EACH/jD,EAAI,EACJ+zD,EAAQ,CAAE/nE,OAAQqlB,GAKnB,IADAuiK,EAAeA,EAAe,EAAI,EAC1B5zK,EAAI,EAAGA,GAAK,EAAI4zK,EAEvB7/G,EAAO,UADPhQ,EAAQiiH,GAAWhmK,KACS+zD,EAAO,UAAYhQ,GAAU1yC,EAO1D,OAJKuiK,IACJ7/G,EAAMw+G,QAAUx+G,EAAMjoE,MAAQulB,GAGxB0iD,CACR,CAEA,SAAS8/G,GAAan5K,EAAOo7B,EAAMs7D,GAKlC,IAJA,IAAIk1E,EACHx1J,GAAegjK,GAAUC,SAAUj+I,IAAU,IAAKrmC,OAAQqkL,GAAUC,SAAU,MAC9Eh+K,EAAQ,EACRlD,EAASie,EAAWje,OACbkD,EAAQlD,EAAQkD,IACvB,GAAOuwK,EAAQx1J,EAAY/a,GAAQ2Q,KAAM0qF,EAAWt7D,EAAMp7B,GAGzD,OAAO4rK,CAGV,CAmNA,SAASwN,GAAW7jH,EAAMnoC,EAAYr0B,GACrC,IAAI/B,EACHsiL,EACAj+K,EAAQ,EACRlD,EAASihL,GAAUG,WAAWphL,OAC9B4vK,EAAWpO,EAAOiO,WAAWE,QAAQ,kBAG7BiR,EAAKxjH,IACb,IACAwjH,EAAO,WACN,GAAKO,EACJ,OAAO,EAYR,IAVA,IAAIE,EAAcd,IAASM,KAC1B5P,EAAYz5K,KAAKC,IAAK,EAAG8mG,EAAU1/B,UAAY0/B,EAAUz/B,SAAWuiH,GAKpEpB,EAAU,GADHhP,EAAY1yE,EAAUz/B,UAAY,GAEzC57D,EAAQ,EACRlD,EAASu+F,EAAU+iF,OAAOthL,OAEnBkD,EAAQlD,EAAQkD,IACvBq7F,EAAU+iF,OAAQp+K,GAAQmxE,IAAK4rG,GAMhC,OAHArQ,EAASa,WAAYrzG,EAAM,CAAEmhC,EAAW0hF,EAAShP,IAG5CgP,EAAU,GAAKjgL,EACZixK,GAIFjxK,GACL4vK,EAASa,WAAYrzG,EAAM,CAAEmhC,EAAW,EAAG,IAI5CqxE,EAASc,YAAatzG,EAAM,CAAEmhC,KACvB,EACR,EACAA,EAAYqxE,EAAS7zH,QAAS,CAC7BqhB,KAAMA,EACNxqD,MAAO4uJ,EAAO/0G,OAAQ,CAAC,EAAGx3B,GAC1Bw9F,KAAM+uC,EAAO/0G,QAAQ,EAAM,CAC1B80H,cAAe,CAAC,EAChB/B,OAAQhe,EAAOge,OAAO1K,UACpBl0K,GACH4gL,mBAAoBvsJ,EACpBwsJ,gBAAiB7gL,EACjBi+D,UAAW0hH,IAASM,KACpB/hH,SAAUl+D,EAAQk+D,SAClBwiH,OAAQ,GACRN,YAAa,SAAU/9I,EAAMnlC,GAC5B,IAAI21K,EAAQjS,EAAO+d,MAAOniH,EAAMmhC,EAAUk0B,KAAMxvF,EAAMnlC,EACrDygG,EAAUk0B,KAAK8uD,cAAet+I,IAAUs7D,EAAUk0B,KAAK+sD,QAExD,OADAjhF,EAAU+iF,OAAO7hL,KAAMg0K,GAChBA,CACR,EACAz0I,KAAM,SAAU0iJ,GACf,IAAIx+K,EAAQ,EAIXlD,EAAS0hL,EAAUnjF,EAAU+iF,OAAOthL,OAAS,EAC9C,GAAKmhL,EACJ,OAAOtrK,KAGR,IADAsrK,GAAU,EACFj+K,EAAQlD,EAAQkD,IACvBq7F,EAAU+iF,OAAQp+K,GAAQmxE,IAAK,GAUhC,OANKqtG,GACJ9R,EAASa,WAAYrzG,EAAM,CAAEmhC,EAAW,EAAG,IAC3CqxE,EAASc,YAAatzG,EAAM,CAAEmhC,EAAWmjF,KAEzC9R,EAASiB,WAAYzzG,EAAM,CAAEmhC,EAAWmjF,IAElC7rK,IACR,IAEDjD,EAAQ2rF,EAAU3rF,MAInB,IA/HD,SAAqBA,EAAO2uK,GAC3B,IAAIr+K,EAAOjE,EAAMugL,EAAQ33K,EAAOkhG,EAGhC,IAAM7lG,KAAS0P,EAed,GAbA4sK,EAAS+B,EADTtiL,EAAOuV,EAAWtR,IAElB2E,EAAQ+K,EAAO1P,GACVhD,MAAMkkB,QAASvc,KACnB23K,EAAS33K,EAAO,GAChBA,EAAQ+K,EAAO1P,GAAU2E,EAAO,IAG5B3E,IAAUjE,IACd2T,EAAO3T,GAAS4I,SACT+K,EAAO1P,KAGf6lG,EAAQy4D,EAAOie,SAAUxgL,KACX,WAAY8pG,EAMzB,IAAM7lG,KALN2E,EAAQkhG,EAAM+2E,OAAQj4K,UACf+K,EAAO3T,GAIC4I,EACN3E,KAAS0P,IAChBA,EAAO1P,GAAU2E,EAAO3E,GACxBq+K,EAAer+K,GAAUs8K,QAI3B+B,EAAetiL,GAASugL,CAG3B,CA0FCmC,CAAY/uK,EAAO2rF,EAAUk0B,KAAK8uD,eAE1Br+K,EAAQlD,EAAQkD,IAEvB,GADArE,EAASoiL,GAAUG,WAAYl+K,GAAQ2Q,KAAM0qF,EAAWnhC,EAAMxqD,EAAO2rF,EAAUk0B,MAM9E,OAJK6nB,EAAYz7I,EAAOmgC,QACvBwiI,EAAOuR,YAAax0E,EAAUnhC,KAAMmhC,EAAUk0B,KAAK77G,OAAQooB,KAC1DngC,EAAOmgC,KAAKzd,KAAM1iB,IAEbA,EAyBT,OArBA2iK,EAAOvpK,IAAK2a,EAAOouK,GAAaziF,GAE3B+7C,EAAY/7C,EAAUk0B,KAAK50H,QAC/B0gG,EAAUk0B,KAAK50H,MAAMgW,KAAMupD,EAAMmhC,GAIlCA,EACE0xE,SAAU1xE,EAAUk0B,KAAKw9C,UACzB/wJ,KAAMq/E,EAAUk0B,KAAKvzG,KAAMq/E,EAAUk0B,KAAKj+C,UAC1CklD,KAAMn7B,EAAUk0B,KAAKiH,MACrBi2C,OAAQpxE,EAAUk0B,KAAKk9C,QAEzBnO,EAAOrwH,GAAGywI,MACTpgB,EAAO/0G,OAAQm0H,EAAM,CACpBxjH,KAAMA,EACNykH,KAAMtjF,EACN3nF,MAAO2nF,EAAUk0B,KAAK77G,SAIjB2nF,CACR,CAEAijE,EAAOyf,UAAYzf,EAAO/0G,OAAQw0H,GAAW,CAE5CC,SAAU,CACT,IAAK,CAAE,SAAUj+I,EAAMp7B,GACtB,IAAI4rK,EAAQ59J,KAAKmrK,YAAa/9I,EAAMp7B,GAEpC,OADA0rK,GAAWE,EAAMr2G,KAAMn6B,EAAMiwI,GAAQ/6I,KAAMtwB,GAAS4rK,GAC7CA,CACR,IAGDqO,QAAS,SAAUlvK,EAAOugB,GACpBmnH,EAAY1nI,IAChBugB,EAAWvgB,EACXA,EAAQ,CAAE,MAEVA,EAAQA,EAAM6rC,MAAOiwH,GAOtB,IAJA,IAAIzrI,EACH//B,EAAQ,EACRlD,EAAS4S,EAAM5S,OAERkD,EAAQlD,EAAQkD,IACvB+/B,EAAOrwB,EAAO1P,GACd+9K,GAAUC,SAAUj+I,GAASg+I,GAAUC,SAAUj+I,IAAU,GAC3Dg+I,GAAUC,SAAUj+I,GAAOjjB,QAASmT,EAEtC,EAEAiuJ,WAAY,CA3Wb,SAA2BhkH,EAAMxqD,EAAO6/G,GACvC,IAAIxvF,EAAMp7B,EAAO81D,EAAQorC,EAAOg5E,EAASC,EAAWC,EAAgB3O,EACnE4O,EAAQ,UAAWtvK,GAAS,WAAYA,EACxCivK,EAAOhsK,KACPikK,EAAO,CAAC,EACRjvK,EAAQuyD,EAAKvyD,MACbuxD,EAASgB,EAAKqF,UAAY4wG,GAAoBj2G,GAC9C+kH,EAAW7P,EAAS9yK,IAAK49D,EAAM,UA6BhC,IAAMn6B,KA1BAwvF,EAAK77G,QAEa,OADvBmyF,EAAQy4D,EAAOuR,YAAa31G,EAAM,OACvBglH,WACVr5E,EAAMq5E,SAAW,EACjBL,EAAUh5E,EAAM8gD,MAAMwlB,KACtBtmE,EAAM8gD,MAAMwlB,KAAO,WACZtmE,EAAMq5E,UACXL,GAEF,GAEDh5E,EAAMq5E,WAENP,EAAKlS,QAAQ,WAGZkS,EAAKlS,QAAQ,WACZ5mE,EAAMq5E,WACA5gB,EAAO5qJ,MAAOwmD,EAAM,MAAOp9D,QAChC+oG,EAAM8gD,MAAMwlB,MAEd,GACD,KAIaz8J,EAEb,GADA/K,EAAQ+K,EAAOqwB,GACVw9I,GAASjoL,KAAMqP,GAAU,CAG7B,UAFO+K,EAAOqwB,GACd06B,EAASA,GAAoB,WAAV91D,EACdA,KAAYu0D,EAAS,OAAS,QAAW,CAI7C,GAAe,SAAVv0D,IAAoBs6K,QAAiC1+K,IAArB0+K,EAAUl/I,GAK9C,SAJAm5B,GAAS,CAMX,CACA09G,EAAM72I,GAASk/I,GAAYA,EAAUl/I,IAAUu+H,EAAO32J,MAAOuyD,EAAMn6B,EACpE,CAKD,IADA++I,GAAaxgB,EAAOc,cAAe1vJ,MAChB4uJ,EAAOc,cAAewX,GA8DzC,IAAM72I,KAzDDi/I,GAA2B,IAAlB9kH,EAAKqF,WAMlBgwD,EAAK33H,SAAW,CAAE+P,EAAM/P,SAAU+P,EAAM9P,UAAW8P,EAAM7P,WAIlC,OADvBinL,EAAiBE,GAAYA,EAAS7O,WAErC2O,EAAiB3P,EAAS9yK,IAAK49D,EAAM,YAGrB,UADjBk2G,EAAU9R,EAAOpkK,IAAKggE,EAAM,cAEtB6kH,EACJ3O,EAAU2O,GAIV9N,GAAU,CAAE/2G,IAAQ,GACpB6kH,EAAiB7kH,EAAKvyD,MAAMyoK,SAAW2O,EACvC3O,EAAU9R,EAAOpkK,IAAKggE,EAAM,WAC5B+2G,GAAU,CAAE/2G,OAKG,WAAZk2G,GAAoC,iBAAZA,GAAgD,MAAlB2O,IACrB,SAAhCzgB,EAAOpkK,IAAKggE,EAAM,WAGhB4kH,IACLH,EAAK3iK,MAAM,WACVrU,EAAMyoK,QAAU2O,CACjB,IACuB,MAAlBA,IACJ3O,EAAUzoK,EAAMyoK,QAChB2O,EAA6B,SAAZ3O,EAAqB,GAAKA,IAG7CzoK,EAAMyoK,QAAU,iBAKd7gD,EAAK33H,WACT+P,EAAM/P,SAAW,SACjB+mL,EAAKlS,QAAQ,WACZ9kK,EAAM/P,SAAW23H,EAAK33H,SAAU,GAChC+P,EAAM9P,UAAY03H,EAAK33H,SAAU,GACjC+P,EAAM7P,UAAYy3H,EAAK33H,SAAU,EAClC,KAIDknL,GAAY,EACElI,EAGPkI,IACAG,EACC,WAAYA,IAChB/lH,EAAS+lH,EAAS/lH,QAGnB+lH,EAAW7P,EAAShqJ,OAAQ80C,EAAM,SAAU,CAAEk2G,QAAS2O,IAInDtkH,IACJwkH,EAAS/lH,QAAUA,GAIfA,GACJ+3G,GAAU,CAAE/2G,IAAQ,GAKrBykH,EAAK3iK,MAAM,WASV,IAAM+jB,KAJAm5B,GACL+3G,GAAU,CAAE/2G,IAEbk1G,EAASx3I,OAAQsiC,EAAM,UACT08G,EACbtY,EAAO32J,MAAOuyD,EAAMn6B,EAAM62I,EAAM72I,GAElC,KAID++I,EAAYhB,GAAa5kH,EAAS+lH,EAAUl/I,GAAS,EAAGA,EAAM4+I,GACtD5+I,KAAQk/I,IACfA,EAAUl/I,GAAS++I,EAAUnkL,MACxBu+D,IACJ4lH,EAAUlkL,IAAMkkL,EAAUnkL,MAC1BmkL,EAAUnkL,MAAQ,GAItB,GAmMCwkL,UAAW,SAAUlvJ,EAAUxV,GACzBA,EACJsjK,GAAUG,WAAWphK,QAASmT,GAE9B8tJ,GAAUG,WAAW3hL,KAAM0zB,EAE7B,IAGDquI,EAAO8gB,MAAQ,SAAUA,EAAO9C,EAAQ3+K,GACvC,IAAIwpB,EAAMi4J,GAA0B,iBAAVA,EAAqB9gB,EAAO/0G,OAAQ,CAAC,EAAG61H,GAAU,CAC3E9tG,SAAU3zE,IAAOA,GAAM2+K,GACtBllC,EAAYgoC,IAAWA,EACxBxjH,SAAUwjH,EACV9C,OAAQ3+K,GAAM2+K,GAAUA,IAAWllC,EAAYklC,IAAYA,GAoC5D,OAhCKhe,EAAOrwH,GAAGozE,IACdl6F,EAAIy0C,SAAW,EAGc,iBAAjBz0C,EAAIy0C,WACVz0C,EAAIy0C,YAAY0iG,EAAOrwH,GAAGoxI,OAC9Bl4J,EAAIy0C,SAAW0iG,EAAOrwH,GAAGoxI,OAAQl4J,EAAIy0C,UAGrCz0C,EAAIy0C,SAAW0iG,EAAOrwH,GAAGoxI,OAAOzN,UAMjB,MAAbzqJ,EAAIzT,QAA+B,IAAdyT,EAAIzT,QAC7ByT,EAAIzT,MAAQ,MAIbyT,EAAItP,IAAMsP,EAAImqD,SAEdnqD,EAAImqD,SAAW,WACT8lE,EAAYjwH,EAAItP,MACpBsP,EAAItP,IAAIlH,KAAMgC,MAGVwU,EAAIzT,OACR4qJ,EAAOqR,QAASh9J,KAAMwU,EAAIzT,MAE5B,EAEOyT,CACR,EAEAm3I,EAAO3gK,GAAG4rD,OAAQ,CACjB+1H,OAAQ,SAAUF,EAAO/0C,EAAIiyC,EAAQrsJ,GAGpC,OAAOtd,KAAKpY,OAAQ41K,IAAqBj2K,IAAK,UAAW,GAAI6mF,OAG3DnmF,MAAM+9B,QAAS,CAAE6jJ,QAASnyC,GAAM+0C,EAAO9C,EAAQrsJ,EAClD,EACA0I,QAAS,SAAUoH,EAAMq/I,EAAO9C,EAAQrsJ,GACvC,IAAI02H,EAAQ2X,EAAOc,cAAer/H,GACjCw/I,EAASjhB,EAAO8gB,MAAOA,EAAO9C,EAAQrsJ,GACtCuvJ,EAAc,WAGb,IAAIb,EAAOZ,GAAWprK,KAAM2rJ,EAAO/0G,OAAQ,CAAC,EAAGxpB,GAAQw/I,IAGlD54B,GAASyoB,EAAS9yK,IAAKqW,KAAM,YACjCgsK,EAAK7iJ,MAAM,EAEb,EAID,OAFA0jJ,EAAYC,OAASD,EAEd74B,IAA0B,IAAjB44B,EAAO7rK,MACtBf,KAAK6hH,KAAMgrD,GACX7sK,KAAKe,MAAO6rK,EAAO7rK,MAAO8rK,EAC5B,EACA1jJ,KAAM,SAAUxgB,EAAMw0J,EAAY0O,GACjC,IAAIkB,EAAY,SAAU75E,GACzB,IAAI/pE,EAAO+pE,EAAM/pE,YACV+pE,EAAM/pE,KACbA,EAAM0iJ,EACP,EAWA,MATqB,iBAATljK,IACXkjK,EAAU1O,EACVA,EAAax0J,EACbA,OAAO/a,GAEHuvK,GACJn9J,KAAKe,MAAO4H,GAAQ,KAAM,IAGpB3I,KAAK6hH,MAAM,WACjB,IAAIm7C,GAAU,EACb3vK,EAAgB,MAARsb,GAAgBA,EAAO,aAC/BqkK,EAASrhB,EAAOqhB,OAChBzgL,EAAOkwK,EAAS9yK,IAAKqW,MAEtB,GAAK3S,EACCd,EAAMc,IAAWd,EAAMc,GAAQ87B,MACnC4jJ,EAAWxgL,EAAMc,SAGlB,IAAMA,KAASd,EACTA,EAAMc,IAAWd,EAAMc,GAAQ87B,MAAQ0hJ,GAAKloL,KAAM0K,IACtD0/K,EAAWxgL,EAAMc,IAKpB,IAAMA,EAAQ2/K,EAAO7iL,OAAQkD,KACvB2/K,EAAQ3/K,GAAQk6D,OAASvnD,MACnB,MAAR2I,GAAgBqkK,EAAQ3/K,GAAQ0T,QAAU4H,IAE5CqkK,EAAQ3/K,GAAQ2+K,KAAK7iJ,KAAM0iJ,GAC3B7O,GAAU,EACVgQ,EAAOrrK,OAAQtU,EAAO,KAOnB2vK,GAAY6O,GAChBlgB,EAAOqR,QAASh9J,KAAM2I,EAExB,GACD,EACAmkK,OAAQ,SAAUnkK,GAIjB,OAHc,IAATA,IACJA,EAAOA,GAAQ,MAET3I,KAAK6hH,MAAM,WACjB,IAAIx0H,EACHd,EAAOkwK,EAAS9yK,IAAKqW,MACrBe,EAAQxU,EAAMoc,EAAO,SACrBuqF,EAAQ3mG,EAAMoc,EAAO,cACrBqkK,EAASrhB,EAAOqhB,OAChB7iL,EAAS4W,EAAQA,EAAM5W,OAAS,EAajC,IAVAoC,EAAKugL,QAAS,EAGdnhB,EAAO5qJ,MAAOf,KAAM2I,EAAM,IAErBuqF,GAASA,EAAM/pE,MACnB+pE,EAAM/pE,KAAKnrB,KAAMgC,MAAM,GAIlB3S,EAAQ2/K,EAAO7iL,OAAQkD,KACvB2/K,EAAQ3/K,GAAQk6D,OAASvnD,MAAQgtK,EAAQ3/K,GAAQ0T,QAAU4H,IAC/DqkK,EAAQ3/K,GAAQ2+K,KAAK7iJ,MAAM,GAC3B6jJ,EAAOrrK,OAAQtU,EAAO,IAKxB,IAAMA,EAAQ,EAAGA,EAAQlD,EAAQkD,IAC3B0T,EAAO1T,IAAW0T,EAAO1T,GAAQy/K,QACrC/rK,EAAO1T,GAAQy/K,OAAO9uK,KAAMgC,aAKvBzT,EAAKugL,MACb,GACD,IAGDnhB,EAAO9pC,KAAM,CAAE,SAAU,OAAQ,SAAU,SAAU7pH,EAAI5O,GACxD,IAAI6jL,EAAQthB,EAAO3gK,GAAI5B,GACvBuiK,EAAO3gK,GAAI5B,GAAS,SAAUqjL,EAAO9C,EAAQrsJ,GAC5C,OAAgB,MAATmvJ,GAAkC,kBAAVA,EAC9BQ,EAAMllK,MAAO/H,KAAM9V,WACnB8V,KAAKgmB,QAASilJ,GAAO7hL,GAAM,GAAQqjL,EAAO9C,EAAQrsJ,EACpD,CACD,IAGAquI,EAAO9pC,KAAM,CACZqrD,UAAWjC,GAAO,QAClBkC,QAASlC,GAAO,QAChBmC,YAAanC,GAAO,UACpBoC,OAAQ,CAAExD,QAAS,QACnByD,QAAS,CAAEzD,QAAS,QACpB0D,WAAY,CAAE1D,QAAS,YACrB,SAAUzgL,EAAM2T,GAClB4uJ,EAAO3gK,GAAI5B,GAAS,SAAUqjL,EAAO9C,EAAQrsJ,GAC5C,OAAOtd,KAAKgmB,QAASjpB,EAAO0vK,EAAO9C,EAAQrsJ,EAC5C,CACD,IAEAquI,EAAOqhB,OAAS,GAChBrhB,EAAOrwH,GAAGyvI,KAAO,WAChB,IAAIgB,EACHz0K,EAAI,EACJ01K,EAASrhB,EAAOqhB,OAIjB,IAFAtC,GAAQjiH,KAAKC,MAELpxD,EAAI01K,EAAO7iL,OAAQmN,KAC1By0K,EAAQiB,EAAQ11K,OAGC01K,EAAQ11K,KAAQy0K,GAChCiB,EAAOrrK,OAAQrK,IAAK,GAIhB01K,EAAO7iL,QACZwhK,EAAOrwH,GAAGnS,OAEXuhJ,QAAQ98K,CACT,EAEA+9J,EAAOrwH,GAAGywI,MAAQ,SAAUA,GAC3BpgB,EAAOqhB,OAAOpjL,KAAMmiL,GACpBpgB,EAAOrwH,GAAGtzC,OACX,EAEA2jK,EAAOrwH,GAAGwvI,SAAW,GACrBnf,EAAOrwH,GAAGtzC,MAAQ,WACZ2iL,KAILA,IAAa,EACbv7D,KACD,EAEAu8C,EAAOrwH,GAAGnS,KAAO,WAChBwhJ,GAAa,IACd,EAEAhf,EAAOrwH,GAAGoxI,OAAS,CAClBc,KAAM,IACNC,KAAM,IAGNxO,SAAU,KAKXtT,EAAO3gK,GAAGuuF,MAAQ,SAAU6oB,EAAMz5F,GAIjC,OAHAy5F,EAAOupD,EAAOrwH,IAAKqwH,EAAOrwH,GAAGoxI,OAAQtqE,IAAiBA,EACtDz5F,EAAOA,GAAQ,KAER3I,KAAKe,MAAO4H,GAAM,SAAU9X,EAAMqiG,GACxC,IAAIohC,EAAUrzI,EAAOs/B,WAAY1vB,EAAMuxG,GACvClP,EAAM/pE,KAAO,WACZloC,EAAOgmF,aAAcqtD,EACtB,CACD,GACD,EAGA,WACC,IAAIh9C,EAAQ3yF,EAAS8pD,cAAe,SAEnCj6B,EADS7vB,EAAS8pD,cAAe,UACpBI,YAAalqD,EAAS8pD,cAAe,WAEnD6oC,EAAM3uE,KAAO,WAIbyiJ,EAAQsiB,QAA0B,KAAhBp2F,EAAMtlF,MAIxBo5J,EAAQuiB,YAAcn5J,EAAIwP,UAI1BszD,EAAQ3yF,EAAS8pD,cAAe,UAC1Bz8C,MAAQ,IACdslF,EAAM3uE,KAAO,QACbyiJ,EAAQwiB,WAA6B,MAAhBt2F,EAAMtlF,KAC1B,CArBF,GAwBA,IAAI67K,GACH5c,GAAatF,EAAO6G,KAAKvB,WAE1BtF,EAAO3gK,GAAG4rD,OAAQ,CACjB6E,KAAM,SAAUryD,EAAM4I,GACrB,OAAOygB,EAAQzS,KAAM2rJ,EAAOlwG,KAAMryD,EAAM4I,EAAO9H,UAAUC,OAAS,EACnE,EAEA2jL,WAAY,SAAU1kL,GACrB,OAAO4W,KAAK6hH,MAAM,WACjB8pC,EAAOmiB,WAAY9tK,KAAM5W,EAC1B,GACD,IAGDuiK,EAAO/0G,OAAQ,CACd6E,KAAM,SAAU8L,EAAMn+D,EAAM4I,GAC3B,IAAIg9G,EAAK9b,EACR66E,EAAQxmH,EAAKqF,SAGd,GAAe,IAAVmhH,GAAyB,IAAVA,GAAyB,IAAVA,EAKnC,YAAkC,IAAtBxmH,EAAK1lC,aACT8pI,EAAOv+H,KAAMm6B,EAAMn+D,EAAM4I,IAKlB,IAAV+7K,GAAgBpiB,EAAO0L,SAAU9vG,KACrC2rC,EAAQy4D,EAAOqiB,UAAW5kL,EAAK3E,iBAC5BknK,EAAO6G,KAAK5pH,MAAMqlI,KAAKtrL,KAAMyG,GAASykL,QAAWjgL,SAGtCA,IAAVoE,EACW,OAAVA,OACJ25J,EAAOmiB,WAAYvmH,EAAMn+D,GAIrB8pG,GAAS,QAASA,QACuBtlG,KAA3CohH,EAAM9b,EAAMrpG,IAAK09D,EAAMv1D,EAAO5I,IACzB4lH,GAGRznD,EAAKryD,aAAc9L,EAAM4I,EAAQ,IAC1BA,GAGHkhG,GAAS,QAASA,GAA+C,QAApC8b,EAAM9b,EAAMvpG,IAAK49D,EAAMn+D,IACjD4lH,EAMM,OAHdA,EAAM28C,EAAOzzJ,KAAKujD,KAAM8L,EAAMn+D,SAGTwE,EAAYohH,EAClC,EAEAg/D,UAAW,CACVrlK,KAAM,CACL9e,IAAK,SAAU09D,EAAMv1D,GACpB,IAAMo5J,EAAQwiB,YAAwB,UAAV57K,GAC3BxN,EAAU+iE,EAAM,SAAY,CAC5B,IAAIrzC,EAAMqzC,EAAKv1D,MAKf,OAJAu1D,EAAKryD,aAAc,OAAQlD,GACtBkiB,IACJqzC,EAAKv1D,MAAQkiB,GAEPliB,CACR,CACD,IAIF87K,WAAY,SAAUvmH,EAAMv1D,GAC3B,IAAI5I,EACHkO,EAAI,EAIJ42K,EAAYl8K,GAASA,EAAM42C,MAAOiwH,GAEnC,GAAKqV,GAA+B,IAAlB3mH,EAAKqF,SACtB,KAAUxjE,EAAO8kL,EAAW52K,MAC3BiwD,EAAKtyD,gBAAiB7L,EAGzB,IAIDykL,GAAW,CACVhkL,IAAK,SAAU09D,EAAMv1D,EAAO5I,GAQ3B,OAPe,IAAV4I,EAGJ25J,EAAOmiB,WAAYvmH,EAAMn+D,GAEzBm+D,EAAKryD,aAAc9L,EAAMA,GAEnBA,CACR,GAGDuiK,EAAO9pC,KAAM8pC,EAAO6G,KAAK5pH,MAAMqlI,KAAKphJ,OAAO+b,MAAO,SAAU,SAAU5wC,EAAI5O,GACzE,IAAI+pH,EAAS89C,GAAY7nK,IAAUuiK,EAAOzzJ,KAAKujD,KAE/Cw1G,GAAY7nK,GAAS,SAAUm+D,EAAMn+D,EAAM8jK,GAC1C,IAAIl+C,EAAKnnE,EACRsmI,EAAgB/kL,EAAK3E,cAYtB,OAVMyoK,IAGLrlH,EAASopH,GAAYkd,GACrBld,GAAYkd,GAAkBn/D,EAC9BA,EAAqC,MAA/BmE,EAAQ5rD,EAAMn+D,EAAM8jK,GACzBihB,EACA,KACDld,GAAYkd,GAAkBtmI,GAExBmnE,CACR,CACD,IAKA,IAAIo/D,GAAa,sCAChBC,GAAa,gBAwIb,SAASC,GAAkBt8K,GAE1B,OADaA,EAAM42C,MAAOiwH,IAAmB,IAC/Br2K,KAAM,IACrB,CAGD,SAAS+rL,GAAUhnH,GAClB,OAAOA,EAAK1lC,cAAgB0lC,EAAK1lC,aAAc,UAAa,EAC7D,CAEA,SAAS2sJ,GAAgBx8K,GACxB,OAAK3H,MAAMkkB,QAASvc,GACZA,EAEc,iBAAVA,GACJA,EAAM42C,MAAOiwH,IAEd,EACR,CAxJAlN,EAAO3gK,GAAG4rD,OAAQ,CACjBxpB,KAAM,SAAUhkC,EAAM4I,GACrB,OAAOygB,EAAQzS,KAAM2rJ,EAAOv+H,KAAMhkC,EAAM4I,EAAO9H,UAAUC,OAAS,EACnE,EAEAskL,WAAY,SAAUrlL,GACrB,OAAO4W,KAAK6hH,MAAM,kBACV7hH,KAAM2rJ,EAAO+iB,QAAStlL,IAAUA,EACxC,GACD,IAGDuiK,EAAO/0G,OAAQ,CACdxpB,KAAM,SAAUm6B,EAAMn+D,EAAM4I,GAC3B,IAAIg9G,EAAK9b,EACR66E,EAAQxmH,EAAKqF,SAGd,GAAe,IAAVmhH,GAAyB,IAAVA,GAAyB,IAAVA,EAWnC,OAPe,IAAVA,GAAgBpiB,EAAO0L,SAAU9vG,KAGrCn+D,EAAOuiK,EAAO+iB,QAAStlL,IAAUA,EACjC8pG,EAAQy4D,EAAOwe,UAAW/gL,SAGZwE,IAAVoE,EACCkhG,GAAS,QAASA,QACuBtlG,KAA3CohH,EAAM9b,EAAMrpG,IAAK09D,EAAMv1D,EAAO5I,IACzB4lH,EAGCznD,EAAMn+D,GAAS4I,EAGpBkhG,GAAS,QAASA,GAA+C,QAApC8b,EAAM9b,EAAMvpG,IAAK49D,EAAMn+D,IACjD4lH,EAGDznD,EAAMn+D,EACd,EAEA+gL,UAAW,CACV/V,SAAU,CACTzqK,IAAK,SAAU49D,GAMd,IAAIonH,EAAWhjB,EAAOzzJ,KAAKujD,KAAM8L,EAAM,YAEvC,OAAKonH,EACGngK,SAAUmgK,EAAU,IAI3BP,GAAWzrL,KAAM4kE,EAAK/iE,WACtB6pL,GAAW1rL,KAAM4kE,EAAK/iE,WACtB+iE,EAAK9M,KAEE,GAGA,CACT,IAIFi0H,QAAS,CACR,IAAO,UACP,MAAS,eAYLtjB,EAAQuiB,cACbhiB,EAAOwe,UAAUnmJ,SAAW,CAC3Br6B,IAAK,SAAU49D,GAId,IAAI92D,EAAS82D,EAAKnhE,WAIlB,OAHKqK,GAAUA,EAAOrK,YACrBqK,EAAOrK,WAAWiuK,cAEZ,IACR,EACAxqK,IAAK,SAAU09D,GAId,IAAI92D,EAAS82D,EAAKnhE,WACbqK,IACJA,EAAO4jK,cAEF5jK,EAAOrK,YACXqK,EAAOrK,WAAWiuK,cAGrB,IAIF1I,EAAO9pC,KAAM,CACZ,WACA,WACA,YACA,cACA,cACA,UACA,UACA,SACA,cACA,oBACE,WACF8pC,EAAO+iB,QAAS1uK,KAAKvb,eAAkBub,IACxC,IA2BA2rJ,EAAO3gK,GAAG4rD,OAAQ,CACjBsgC,SAAU,SAAUllF,GACnB,IAAI48K,EAAYxxD,EAAKyxD,EAAU7mF,EAAW1wF,EAAGw3K,EAE7C,OAAKrqC,EAAYzyI,GACTgO,KAAK6hH,MAAM,SAAUn8G,GAC3BimJ,EAAQ3rJ,MAAOk3E,SAAUllF,EAAMgM,KAAMgC,KAAM0F,EAAG6oK,GAAUvuK,OACzD,KAGD4uK,EAAaJ,GAAgBx8K,IAEb7H,OACR6V,KAAK6hH,MAAM,WAIjB,GAHAgtD,EAAWN,GAAUvuK,MACrBo9G,EAAwB,IAAlBp9G,KAAK4sD,UAAoB,IAAM0hH,GAAkBO,GAAa,IAEzD,CACV,IAAMv3K,EAAI,EAAGA,EAAIs3K,EAAWzkL,OAAQmN,IACnC0wF,EAAY4mF,EAAYt3K,GACnB8lH,EAAI72H,QAAS,IAAMyhG,EAAY,KAAQ,IAC3Co1B,GAAOp1B,EAAY,KAKrB8mF,EAAaR,GAAkBlxD,GAC1ByxD,IAAaC,GACjB9uK,KAAK9K,aAAc,QAAS45K,EAE9B,CACD,IAGM9uK,IACR,EAEAi3E,YAAa,SAAUjlF,GACtB,IAAI48K,EAAYxxD,EAAKyxD,EAAU7mF,EAAW1wF,EAAGw3K,EAE7C,OAAKrqC,EAAYzyI,GACTgO,KAAK6hH,MAAM,SAAUn8G,GAC3BimJ,EAAQ3rJ,MAAOi3E,YAAajlF,EAAMgM,KAAMgC,KAAM0F,EAAG6oK,GAAUvuK,OAC5D,IAGK9V,UAAUC,QAIhBykL,EAAaJ,GAAgBx8K,IAEb7H,OACR6V,KAAK6hH,MAAM,WAMjB,GALAgtD,EAAWN,GAAUvuK,MAGrBo9G,EAAwB,IAAlBp9G,KAAK4sD,UAAoB,IAAM0hH,GAAkBO,GAAa,IAEzD,CACV,IAAMv3K,EAAI,EAAGA,EAAIs3K,EAAWzkL,OAAQmN,IAInC,IAHA0wF,EAAY4mF,EAAYt3K,GAGhB8lH,EAAI72H,QAAS,IAAMyhG,EAAY,MAAS,GAC/Co1B,EAAMA,EAAI/sH,QAAS,IAAM23F,EAAY,IAAK,KAK5C8mF,EAAaR,GAAkBlxD,GAC1ByxD,IAAaC,GACjB9uK,KAAK9K,aAAc,QAAS45K,EAE9B,CACD,IAGM9uK,KA/BCA,KAAKy7C,KAAM,QAAS,GAgC7B,EAEA8pF,YAAa,SAAUvzI,EAAO+8K,GAC7B,IAAIH,EAAY5mF,EAAW1wF,EAAGyG,EAC7B4K,SAAc3W,EACdg9K,EAAwB,WAATrmK,GAAqBte,MAAMkkB,QAASvc,GAEpD,OAAKyyI,EAAYzyI,GACTgO,KAAK6hH,MAAM,SAAUvqH,GAC3Bq0J,EAAQ3rJ,MAAOulI,YACdvzI,EAAMgM,KAAMgC,KAAM1I,EAAGi3K,GAAUvuK,MAAQ+uK,GACvCA,EAEF,IAGwB,kBAAbA,GAA0BC,EAC9BD,EAAW/uK,KAAKk3E,SAAUllF,GAAUgO,KAAKi3E,YAAajlF,IAG9D48K,EAAaJ,GAAgBx8K,GAEtBgO,KAAK6hH,MAAM,WACjB,GAAKmtD,EAKJ,IAFAjxK,EAAO4tJ,EAAQ3rJ,MAET1I,EAAI,EAAGA,EAAIs3K,EAAWzkL,OAAQmN,IACnC0wF,EAAY4mF,EAAYt3K,GAGnByG,EAAK67H,SAAU5xC,GACnBjqF,EAAKk5E,YAAa+Q,GAElBjqF,EAAKm5E,SAAU8Q,aAKIp6F,IAAVoE,GAAgC,YAAT2W,KAClCq/E,EAAYumF,GAAUvuK,QAIrBy8J,EAAS5yK,IAAKmW,KAAM,gBAAiBgoF,GAOjChoF,KAAK9K,cACT8K,KAAK9K,aAAc,QAClB8yF,IAAuB,IAAVh2F,EACZ,GACAyqK,EAAS9yK,IAAKqW,KAAM,kBAAqB,IAI9C,IACD,EAEA45H,SAAU,SAAUlkC,GACnB,IAAI1N,EAAWzgC,EACdjwD,EAAI,EAGL,IADA0wF,EAAY,IAAM0N,EAAW,IACnBnuC,EAAOvnD,KAAM1I,MACtB,GAAuB,IAAlBiwD,EAAKqF,WACP,IAAM0hH,GAAkBC,GAAUhnH,IAAW,KAAMhhE,QAASyhG,IAAe,EAC7E,OAAO,EAIT,OAAO,CACR,IAMD,IAAIinF,GAAU,MAEdtjB,EAAO3gK,GAAG4rD,OAAQ,CACjB1iC,IAAK,SAAUliB,GACd,IAAIkhG,EAAO8b,EAAKi2D,EACf19G,EAAOvnD,KAAM,GAEd,OAAM9V,UAAUC,QA0BhB86K,EAAkBxgC,EAAYzyI,GAEvBgO,KAAK6hH,MAAM,SAAUvqH,GAC3B,IAAI4c,EAEmB,IAAlBlU,KAAK4sD,WAWE,OANX14C,EADI+wJ,EACEjzK,EAAMgM,KAAMgC,KAAM1I,EAAGq0J,EAAQ3rJ,MAAOkU,OAEpCliB,GAKNkiB,EAAM,GAEoB,iBAARA,EAClBA,GAAO,GAEI7pB,MAAMkkB,QAAS2F,KAC1BA,EAAMy3I,EAAOvpK,IAAK8xB,GAAK,SAAUliB,GAChC,OAAgB,MAATA,EAAgB,GAAKA,EAAQ,EACrC,MAGDkhG,EAAQy4D,EAAOujB,SAAUlvK,KAAK2I,OAAUgjJ,EAAOujB,SAAUlvK,KAAKxb,SAASC,iBAGrD,QAASyuG,QAA+CtlG,IAApCslG,EAAMrpG,IAAKmW,KAAMkU,EAAK,WAC3DlU,KAAKhO,MAAQkiB,GAEf,KA3DMqzC,GACJ2rC,EAAQy4D,EAAOujB,SAAU3nH,EAAK5+C,OAC7BgjJ,EAAOujB,SAAU3nH,EAAK/iE,SAASC,iBAG/B,QAASyuG,QACgCtlG,KAAvCohH,EAAM9b,EAAMvpG,IAAK49D,EAAM,UAElBynD,EAMY,iBAHpBA,EAAMznD,EAAKv1D,OAIHg9G,EAAI3+G,QAAS4+K,GAAS,IAIhB,MAAPjgE,EAAc,GAAKA,OAG3B,CAsCF,IAGD28C,EAAO/0G,OAAQ,CACds4H,SAAU,CACTprJ,OAAQ,CACPn6B,IAAK,SAAU49D,GAEd,IAAIrzC,EAAMy3I,EAAOzzJ,KAAKujD,KAAM8L,EAAM,SAClC,OAAc,MAAPrzC,EACNA,EAMAo6J,GAAkB3iB,EAAOr5I,KAAMi1C,GACjC,GAED6lG,OAAQ,CACPzjK,IAAK,SAAU49D,GACd,IAAIv1D,EAAO8xB,EAAQxsB,EAClBvM,EAAUw8D,EAAKx8D,QACfsC,EAAQk6D,EAAK8sG,cACbvhE,EAAoB,eAAdvrC,EAAK5+C,KACXoJ,EAAS+gF,EAAM,KAAO,GACtBlxG,EAAMkxG,EAAMzlG,EAAQ,EAAItC,EAAQZ,OAUjC,IAPCmN,EADIjK,EAAQ,EACRzL,EAGAkxG,EAAMzlG,EAAQ,EAIXiK,EAAI1V,EAAK0V,IAKhB,KAJAwsB,EAAS/4B,EAASuM,IAIJ0sB,UAAY1sB,IAAMjK,KAG7By2B,EAAOosI,YACLpsI,EAAO19B,WAAW8pK,WACnB1rK,EAAUs/B,EAAO19B,WAAY,aAAiB,CAMjD,GAHA4L,EAAQ25J,EAAQ7nI,GAAS5P,MAGpB4+E,EACJ,OAAO9gG,EAIR+f,EAAOnoB,KAAMoI,EACd,CAGD,OAAO+f,CACR,EAEAloB,IAAK,SAAU09D,EAAMv1D,GAMpB,IALA,IAAIm9K,EAAWrrJ,EACd/4B,EAAUw8D,EAAKx8D,QACfgnB,EAAS45I,EAAOgB,UAAW36J,GAC3BsF,EAAIvM,EAAQZ,OAELmN,OACPwsB,EAAS/4B,EAASuM,IAIN0sB,SACX2nI,EAAOpwB,QAASowB,EAAOujB,SAASprJ,OAAOn6B,IAAKm6B,GAAU/R,IAAY,KAElEo9J,GAAY,GAUd,OAHMA,IACL5nH,EAAK8sG,eAAiB,GAEhBtiJ,CACR,MAMH45I,EAAO9pC,KAAM,CAAE,QAAS,aAAc,WACrC8pC,EAAOujB,SAAUlvK,MAAS,CACzBnW,IAAK,SAAU09D,EAAMv1D,GACpB,GAAK3H,MAAMkkB,QAASvc,GACnB,OAASu1D,EAAKloC,QAAUssI,EAAOpwB,QAASowB,EAAQpkG,GAAOrzC,MAAOliB,IAAW,CAE3E,GAEKo5J,EAAQsiB,UACb/hB,EAAOujB,SAAUlvK,MAAOrW,IAAM,SAAU49D,GACvC,OAAwC,OAAjCA,EAAK1lC,aAAc,SAAqB,KAAO0lC,EAAKv1D,KAC5D,EAEF,IAQAo5J,EAAQgkB,QAAU,cAAenuL,EAGjC,IAAIouL,GAAc,kCACjBC,GAA0B,SAAUn8I,GACnCA,EAAEnW,iBACH,EAED2uI,EAAO/0G,OAAQ+0G,EAAO/uI,MAAO,CAE5B6gC,QAAS,SAAU7gC,EAAOrwB,EAAMg7D,EAAMgoH,GAErC,IAAIj4K,EAAG8lH,EAAKse,EAAK8zC,EAAYC,EAAQ5nI,EAAQ6yH,EAASgV,EACrDC,EAAY,CAAEpoH,GAAQ5iE,GACtBgkB,EAAOijI,EAAO5tI,KAAM4e,EAAO,QAAWA,EAAMjU,KAAOiU,EACnDikJ,EAAaj1B,EAAO5tI,KAAM4e,EAAO,aAAgBA,EAAMqxH,UAAUhgJ,MAAO,KAAQ,GAKjF,GAHAmvH,EAAMsyD,EAAch0C,EAAMn0E,EAAOA,GAAQ5iE,EAGlB,IAAlB4iE,EAAKqF,UAAoC,IAAlBrF,EAAKqF,WAK5ByiH,GAAY1sL,KAAMgmB,EAAOgjJ,EAAO/uI,MAAMokJ,aAItCr4J,EAAKpiB,QAAS,MAAS,IAG3Bs6K,EAAal4J,EAAK1a,MAAO,KACzB0a,EAAOk4J,EAAW32J,QAClB22J,EAAW53K,QAEZwmL,EAAS9mK,EAAKpiB,QAAS,KAAQ,GAAK,KAAOoiB,GAG3CiU,EAAQA,EAAO+uI,EAAOW,SACrB1vI,EACA,IAAI+uI,EAAOxhG,MAAOxhD,EAAuB,iBAAViU,GAAsBA,IAGhD2jJ,UAAYgP,EAAe,EAAI,EACrC3yJ,EAAMqxH,UAAY4yB,EAAWr+K,KAAM,KACnCo6B,EAAMmlJ,WAAanlJ,EAAMqxH,UACxB,IAAIr8E,OAAQ,UAAYivG,EAAWr+K,KAAM,iBAAoB,WAC7D,KAGDo6B,EAAM5zB,YAAS4E,EACTgvB,EAAM91B,SACX81B,EAAM91B,OAASygE,GAIhBh7D,EAAe,MAARA,EACN,CAAEqwB,GACF+uI,EAAOgB,UAAWpgK,EAAM,CAAEqwB,IAG3B89I,EAAU/O,EAAO/uI,MAAM89I,QAAS/xJ,IAAU,CAAC,EACrC4mK,IAAgB7U,EAAQj9G,UAAmD,IAAxCi9G,EAAQj9G,QAAQ11C,MAAOw/C,EAAMh7D,IAAtE,CAMA,IAAMgjL,IAAiB7U,EAAQ2H,WAAahX,EAAU9jG,GAAS,CAM9D,IAJAioH,EAAa9U,EAAQ8F,cAAgB73J,EAC/B0mK,GAAY1sL,KAAM6sL,EAAa7mK,KACpCy0G,EAAMA,EAAIh3H,YAEHg3H,EAAKA,EAAMA,EAAIh3H,WACtBupL,EAAU/lL,KAAMwzH,GAChBse,EAAMte,EAIFse,KAAUn0E,EAAKpmE,eAAiBwD,IACpCgrL,EAAU/lL,KAAM8xI,EAAIt6I,aAAes6I,EAAIk0C,cAAgB3uL,EAEzD,CAIA,IADAqW,EAAI,GACM8lH,EAAMuyD,EAAWr4K,QAAYslB,EAAMilJ,wBAC5C6N,EAActyD,EACdxgG,EAAMjU,KAAOrR,EAAI,EAChBk4K,EACA9U,EAAQuG,UAAYt4J,GAGrBk/B,GAAW40H,EAAS9yK,IAAKyzH,EAAK,WAAchyH,OAAOkT,OAAQ,OAAUse,EAAMjU,OAC1E8zJ,EAAS9yK,IAAKyzH,EAAK,YAEnBv1E,EAAO9/B,MAAOq1G,EAAK7wH,IAIpBs7C,EAAS4nI,GAAUryD,EAAKqyD,KACT5nI,EAAO9/B,OAASu0J,EAAYl/C,KAC1CxgG,EAAM5zB,OAAS6+C,EAAO9/B,MAAOq1G,EAAK7wH,IACZ,IAAjBqwB,EAAM5zB,QACV4zB,EAAM0R,kBA8CT,OA1CA1R,EAAMjU,KAAOA,EAGP4mK,GAAiB3yJ,EAAM2lJ,sBAEpB7H,EAAQuE,WACqC,IAApDvE,EAAQuE,SAASl3J,MAAO4nK,EAAU1lK,MAAO1d,KACzC+vK,EAAY/0G,IAIPkoH,GAAUhrC,EAAYl9E,EAAM5+C,MAAa0iJ,EAAU9jG,MAGvDm0E,EAAMn0E,EAAMkoH,MAGXloH,EAAMkoH,GAAW,MAIlB9jB,EAAO/uI,MAAMokJ,UAAYr4J,EAEpBiU,EAAMilJ,wBACV6N,EAAYj7K,iBAAkBkU,EAAM2mK,IAGrC/nH,EAAM5+C,KAEDiU,EAAMilJ,wBACV6N,EAAYh7K,oBAAqBiU,EAAM2mK,IAGxC3jB,EAAO/uI,MAAMokJ,eAAYpzK,EAEpB8tI,IACJn0E,EAAMkoH,GAAW/zC,IAMd9+G,EAAM5zB,MAvFb,CAwFD,EAIA6mL,SAAU,SAAUlnK,EAAM4+C,EAAM3qC,GAC/B,IAAIuW,EAAIw4H,EAAO/0G,OACd,IAAI+0G,EAAOxhG,MACXvtC,EACA,CACCjU,KAAMA,EACNg6J,aAAa,IAIfhX,EAAO/uI,MAAM6gC,QAAStqB,EAAG,KAAMo0B,EAChC,IAIDokG,EAAO3gK,GAAG4rD,OAAQ,CAEjB6G,QAAS,SAAU90C,EAAMpc,GACxB,OAAOyT,KAAK6hH,MAAM,WACjB8pC,EAAO/uI,MAAM6gC,QAAS90C,EAAMpc,EAAMyT,KACnC,GACD,EACA8vK,eAAgB,SAAUnnK,EAAMpc,GAC/B,IAAIg7D,EAAOvnD,KAAM,GACjB,GAAKunD,EACJ,OAAOokG,EAAO/uI,MAAM6gC,QAAS90C,EAAMpc,EAAMg7D,GAAM,EAEjD,IAYK6jG,EAAQgkB,SACbzjB,EAAO9pC,KAAM,CAAE1/E,MAAO,UAAW21C,KAAM,aAAc,SAAUmsF,EAAMvC,GAGpE,IAAI3hJ,EAAU,SAAUnD,GACvB+uI,EAAO/uI,MAAMizJ,SAAUnO,EAAK9kJ,EAAM91B,OAAQ6kK,EAAO/uI,MAAM8kJ,IAAK9kJ,GAC7D,EAEA+uI,EAAO/uI,MAAM89I,QAASgH,GAAQ,CAC7BP,MAAO,WAIN,IAAIzoE,EAAM14F,KAAK7e,eAAiB6e,KAAKrb,UAAYqb,KAChD+vK,EAAWtT,EAAShqJ,OAAQimF,EAAKgpE,GAE5BqO,GACLr3E,EAAIjkG,iBAAkBwvK,EAAMlkJ,GAAS,GAEtC08I,EAAShqJ,OAAQimF,EAAKgpE,GAAOqO,GAAY,GAAM,EAChD,EACAzO,SAAU,WACT,IAAI5oE,EAAM14F,KAAK7e,eAAiB6e,KAAKrb,UAAYqb,KAChD+vK,EAAWtT,EAAShqJ,OAAQimF,EAAKgpE,GAAQ,EAEpCqO,EAKLtT,EAAShqJ,OAAQimF,EAAKgpE,EAAKqO,IAJ3Br3E,EAAIhkG,oBAAqBuvK,EAAMlkJ,GAAS,GACxC08I,EAASx3I,OAAQyzE,EAAKgpE,GAKxB,EAEF,IAED,IAAI3lH,GAAW96D,EAAO86D,SAElBwvG,GAAQ,CAAEuB,KAAMrkG,KAAKC,OAErBsnH,GAAS,KAKbrkB,EAAOskB,SAAW,SAAU1jL,GAC3B,IAAIurJ,EAAKo4B,EACT,IAAM3jL,GAAwB,iBAATA,EACpB,OAAO,KAKR,IACCurJ,GAAM,IAAM72J,EAAO64J,WAAcoF,gBAAiB3yJ,EAAM,WACzD,CAAE,MAAQ4mC,GAAK,CAYf,OAVA+8I,EAAkBp4B,GAAOA,EAAIwC,qBAAsB,eAAiB,GAC9DxC,IAAOo4B,GACZvkB,EAAOjiJ,MAAO,iBACbwmK,EACCvkB,EAAOvpK,IAAK8tL,EAAgBxiH,YAAY,SAAUnS,GACjD,OAAOA,EAAGqmC,WACX,IAAIp/F,KAAM,MACV+J,IAGIurJ,CACR,EAGA,IACCq4B,GAAW,QACXC,GAAQ,SACRC,GAAkB,wCAClBC,GAAe,qCAEhB,SAASC,GAAa79J,EAAQ9U,EAAKuyD,EAAahnE,GAC/C,IAAIC,EAEJ,GAAKiB,MAAMkkB,QAAS3Q,GAGnB+tJ,EAAO9pC,KAAMjkH,GAAK,SAAUtG,EAAGoD,GACzBy1D,GAAeggH,GAASxtL,KAAM+vB,GAGlCvpB,EAAKupB,EAAQhY,GAKb61K,GACC79J,EAAS,KAAqB,iBAANhY,GAAuB,MAALA,EAAYpD,EAAI,IAAO,IACjEoD,EACAy1D,EACAhnE,EAGH,SAEM,GAAMgnE,GAAiC,WAAlBu7F,EAAQ9tJ,GAUnCzU,EAAKupB,EAAQ9U,QAPb,IAAMxU,KAAQwU,EACb2yK,GAAa79J,EAAS,IAAMtpB,EAAO,IAAKwU,EAAKxU,GAAQ+mE,EAAahnE,EAQrE,CAIAwiK,EAAOn3F,MAAQ,SAAUz9D,EAAGo5D,GAC3B,IAAIz9C,EACHhO,EAAI,GACJvb,EAAM,SAAUsD,EAAK+jL,GAGpB,IAAIx+K,EAAQyyI,EAAY+rC,GACvBA,IACAA,EAED9rK,EAAGA,EAAEva,QAAW6lE,mBAAoBvjE,GAAQ,IAC3CujE,mBAA6B,MAATh+D,EAAgB,GAAKA,EAC3C,EAED,GAAU,MAAL+E,EACJ,MAAO,GAIR,GAAK1M,MAAMkkB,QAASxX,IAASA,EAAE+vI,SAAW6kB,EAAOU,cAAet1J,GAG/D40J,EAAO9pC,KAAM9qH,GAAG,WACf5N,EAAK6W,KAAK5W,KAAM4W,KAAKhO,MACtB,SAMA,IAAM0gB,KAAU3b,EACfw5K,GAAa79J,EAAQ3b,EAAG2b,GAAUy9C,EAAahnE,GAKjD,OAAOub,EAAEliB,KAAM,IAChB,EAEAmpK,EAAO3gK,GAAG4rD,OAAQ,CACjB65H,UAAW,WACV,OAAO9kB,EAAOn3F,MAAOx0D,KAAK0wK,iBAC3B,EACAA,eAAgB,WACf,OAAO1wK,KAAK5d,KAAK,WAGhB,IAAImJ,EAAWogK,EAAOv+H,KAAMptB,KAAM,YAClC,OAAOzU,EAAWogK,EAAOgB,UAAWphK,GAAayU,IAClD,IAAIpY,QAAQ,WACX,IAAI+gB,EAAO3I,KAAK2I,KAGhB,OAAO3I,KAAK5W,OAASuiK,EAAQ3rJ,MAAO02B,GAAI,cACvC45I,GAAa3tL,KAAMqd,KAAKxb,YAAe6rL,GAAgB1tL,KAAMgmB,KAC3D3I,KAAKqf,UAAYk/I,GAAe57K,KAAMgmB,GAC1C,IAAIvmB,KAAK,SAAU4V,EAAIuvD,GACtB,IAAIrzC,EAAMy3I,EAAQ3rJ,MAAOkU,MAEzB,OAAY,MAAPA,EACG,KAGH7pB,MAAMkkB,QAAS2F,GACZy3I,EAAOvpK,IAAK8xB,GAAK,SAAUA,GACjC,MAAO,CAAE9qB,KAAMm+D,EAAKn+D,KAAM4I,MAAOkiB,EAAI7jB,QAAS+/K,GAAO,QACtD,IAGM,CAAEhnL,KAAMm+D,EAAKn+D,KAAM4I,MAAOkiB,EAAI7jB,QAAS+/K,GAAO,QACtD,IAAIzmL,KACL,IAID,IACCgnL,GAAM,OACNC,GAAQ,OACRC,GAAa,gBACbC,GAAW,6BAIXC,GAAa,iBACbC,GAAY,QAWZzF,GAAa,CAAC,EAOd0F,GAAa,CAAC,EAGdC,GAAW,KAAKnqL,OAAQ,KAGxBoqL,GAAexsL,EAAS8pD,cAAe,KAKxC,SAAS2iI,GAA6BC,GAGrC,OAAO,SAAUC,EAAoBviK,GAED,iBAAvBuiK,IACXviK,EAAOuiK,EACPA,EAAqB,KAGtB,IAAIC,EACHj6K,EAAI,EACJk6K,EAAYF,EAAmB7sL,cAAcmkD,MAAOiwH,IAAmB,GAExE,GAAKp0B,EAAY11H,GAGhB,KAAUwiK,EAAWC,EAAWl6K,MAGR,MAAlBi6K,EAAU,IACdA,EAAWA,EAASp5K,MAAO,IAAO,KAChCk5K,EAAWE,GAAaF,EAAWE,IAAc,IAAKpnK,QAAS4E,KAI/DsiK,EAAWE,GAAaF,EAAWE,IAAc,IAAK3nL,KAAMmlB,EAIlE,CACD,CAGA,SAAS0iK,GAA+BJ,EAAWtmL,EAAS6gL,EAAiB8F,GAE5E,IAAIC,EAAY,CAAC,EAChBC,EAAqBP,IAAcJ,GAEpC,SAAS9tG,EAASouG,GACjB,IAAIvtJ,EAcJ,OAbA2tJ,EAAWJ,IAAa,EACxB5lB,EAAO9pC,KAAMwvD,EAAWE,IAAc,IAAI,SAAU1yK,EAAGgzK,GACtD,IAAIC,EAAsBD,EAAoB9mL,EAAS6gL,EAAiB8F,GACxE,MAAoC,iBAAxBI,GACVF,GAAqBD,EAAWG,GAKtBF,IACD5tJ,EAAW8tJ,QADf,GAHN/mL,EAAQymL,UAAUrnK,QAAS2nK,GAC3B3uG,EAAS2uG,IACF,EAIT,IACO9tJ,CACR,CAEA,OAAOm/C,EAASp4E,EAAQymL,UAAW,MAAUG,EAAW,MAASxuG,EAAS,IAC3E,CAKA,SAAS4uG,GAAYjrL,EAAQ6sB,GAC5B,IAAIlnB,EAAK2/J,EACR4lB,EAAcrmB,EAAOsmB,aAAaD,aAAe,CAAC,EAEnD,IAAMvlL,KAAOknB,OACQ/lB,IAAf+lB,EAAKlnB,MACPulL,EAAavlL,GAAQ3F,EAAWslK,IAAUA,EAAO,CAAC,IAAS3/J,GAAQknB,EAAKlnB,IAO5E,OAJK2/J,GACJT,EAAO/0G,QAAQ,EAAM9vD,EAAQslK,GAGvBtlK,CACR,CAhFAqqL,GAAa12H,KAAOsB,GAAStB,KAgP7BkxG,EAAO/0G,OAAQ,CAGds7H,OAAQ,EAGRC,aAAc,CAAC,EACfC,KAAM,CAAC,EAEPH,aAAc,CACbr0H,IAAK7B,GAAStB,KACd9xC,KAAM,MACN0pK,QAxRgB,4DAwRQ1vL,KAAMo5D,GAASwB,UACvC5mB,QAAQ,EACR27I,aAAa,EACb3jI,OAAO,EACP4jI,YAAa,mDAcbC,QAAS,CACR,IAAKtB,GACL5+J,KAAM,aACNphB,KAAM,YACN4mJ,IAAK,4BACL26B,KAAM,qCAGPra,SAAU,CACTtgB,IAAK,UACL5mJ,KAAM,SACNuhL,KAAM,YAGPC,eAAgB,CACf56B,IAAK,cACLxlI,KAAM,eACNmgK,KAAM,gBAKPE,WAAY,CAGX,SAAUphK,OAGV,aAAa,EAGb,YAAa5H,KAAK+J,MAGlB,WAAYi4I,EAAOskB,UAOpB+B,YAAa,CACZp0H,KAAK,EACL77C,SAAS,IAOX6wK,UAAW,SAAU9rL,EAAQy8C,GAC5B,OAAOA,EAGNwuI,GAAYA,GAAYjrL,EAAQ6kK,EAAOsmB,cAAgB1uI,GAGvDwuI,GAAYpmB,EAAOsmB,aAAcnrL,EACnC,EAEA+rL,cAAezB,GAA6B7F,IAC5CuH,cAAe1B,GAA6BH,IAG5C8B,KAAM,SAAUn1H,EAAK7yD,GAGA,iBAAR6yD,IACX7yD,EAAU6yD,EACVA,OAAMhwD,GAIP7C,EAAUA,GAAW,CAAC,EAEtB,IAAIioL,EAGHC,EAGAC,EACAC,EAGAC,EAGAC,EAGA94I,EAGA+4I,EAGAh8K,EAGAi8K,EAGA7uK,EAAIinJ,EAAOinB,UAAW,CAAC,EAAG7nL,GAG1ByoL,EAAkB9uK,EAAE3C,SAAW2C,EAG/B+uK,EAAqB/uK,EAAE3C,UACpByxK,EAAgB5mH,UAAY4mH,EAAgB1sC,QAC9C6kB,EAAQ6nB,GACR7nB,EAAO/uI,MAGRm9I,EAAWpO,EAAOiO,WAClB8Z,EAAmB/nB,EAAOuN,UAAW,eAGrCya,EAAajvK,EAAEivK,YAAc,CAAC,EAG9BC,EAAiB,CAAC,EAClBC,EAAsB,CAAC,EAGvBC,EAAW,WAGXpC,EAAQ,CACPp3I,WAAY,EAGZy5I,kBAAmB,SAAUtnL,GAC5B,IAAIm8C,EACJ,GAAKrO,EAAY,CAChB,IAAM44I,EAEL,IADAA,EAAkB,CAAC,EACTvqI,EAAQkoI,GAASxuJ,KAAM4wJ,IAChCC,EAAiBvqI,EAAO,GAAInkD,cAAgB,MACzC0uL,EAAiBvqI,EAAO,GAAInkD,cAAgB,MAAS,IACrDsC,OAAQ6hD,EAAO,IAGpBA,EAAQuqI,EAAiB1mL,EAAIhI,cAAgB,IAC9C,CACA,OAAgB,MAATmkD,EAAgB,KAAOA,EAAMpmD,KAAM,KAC3C,EAGAwxL,sBAAuB,WACtB,OAAOz5I,EAAY24I,EAAwB,IAC5C,EAGAe,iBAAkB,SAAU7qL,EAAM4I,GAMjC,OALkB,MAAbuoC,IACJnxC,EAAOyqL,EAAqBzqL,EAAK3E,eAChCovL,EAAqBzqL,EAAK3E,gBAAmB2E,EAC9CwqL,EAAgBxqL,GAAS4I,GAEnBgO,IACR,EAGAk0K,iBAAkB,SAAUvrK,GAI3B,OAHkB,MAAb4xB,IACJ71B,EAAEyvK,SAAWxrK,GAEP3I,IACR,EAGA2zK,WAAY,SAAUvxL,GACrB,IAAIw3B,EACJ,GAAKx3B,EACJ,GAAKm4C,EAGJm3I,EAAM5X,OAAQ13K,EAAKsvL,EAAMrzG,cAIzB,IAAMzkD,KAAQx3B,EACbuxL,EAAY/5J,GAAS,CAAE+5J,EAAY/5J,GAAQx3B,EAAKw3B,IAInD,OAAO5Z,IACR,EAGAo0K,MAAO,SAAUC,GAChB,IAAIC,EAAYD,GAAcP,EAK9B,OAJKd,GACJA,EAAUoB,MAAOE,GAElBjrK,EAAM,EAAGirK,GACFt0K,IACR,GAmBF,GAfA+5J,EAAS7zH,QAASwrI,GAKlBhtK,EAAEk5C,MAAUA,GAAOl5C,EAAEk5C,KAAO7B,GAAStB,MAAS,IAC5CpqD,QAAS2gL,GAAWj1H,GAASwB,SAAW,MAG1C74C,EAAEiE,KAAO5d,EAAQgiC,QAAUhiC,EAAQ4d,MAAQjE,EAAEqoB,QAAUroB,EAAEiE,KAGzDjE,EAAE8sK,WAAc9sK,EAAE6sK,UAAY,KAAM9sL,cAAcmkD,MAAOiwH,IAAmB,CAAE,IAGxD,MAAjBn0J,EAAE6vK,YAAsB,CAC5BlB,EAAY1uL,EAAS8pD,cAAe,KAKpC,IACC4kI,EAAU54H,KAAO/1C,EAAEk5C,IAInBy1H,EAAU54H,KAAO44H,EAAU54H,KAC3B/1C,EAAE6vK,YAAcpD,GAAa5zH,SAAW,KAAO4zH,GAAa9qL,MAC3DgtL,EAAU91H,SAAW,KAAO81H,EAAUhtL,IACxC,CAAE,MAAQ8sC,GAITzuB,EAAE6vK,aAAc,CACjB,CACD,CAWA,GARK7vK,EAAEnY,MAAQmY,EAAE4tK,aAAiC,iBAAX5tK,EAAEnY,OACxCmY,EAAEnY,KAAOo/J,EAAOn3F,MAAO9vD,EAAEnY,KAAMmY,EAAEyrD,cAIlCshH,GAA+BlG,GAAY7mK,EAAG3Z,EAAS2mL,GAGlDn3I,EACJ,OAAOm3I,EA8ER,IAAMp6K,KAzENg8K,EAAc3nB,EAAO/uI,OAASlY,EAAEiyB,SAGQ,GAApBg1H,EAAOumB,UAC1BvmB,EAAO/uI,MAAM6gC,QAAS,aAIvB/4C,EAAEiE,KAAOjE,EAAEiE,KAAK7J,cAGhB4F,EAAE8vK,YAAczD,GAAWpuL,KAAM+hB,EAAEiE,MAKnCsqK,EAAWvuK,EAAEk5C,IAAIvtD,QAASugL,GAAO,IAG3BlsK,EAAE8vK,WAwBI9vK,EAAEnY,MAAQmY,EAAE4tK,aACoD,KAAzE5tK,EAAE6tK,aAAe,IAAKhsL,QAAS,uCACjCme,EAAEnY,KAAOmY,EAAEnY,KAAK8D,QAASsgL,GAAK,OAvB9B4C,EAAW7uK,EAAEk5C,IAAIzlD,MAAO86K,EAAS9oL,QAG5Bua,EAAEnY,OAAUmY,EAAE4tK,aAAiC,iBAAX5tK,EAAEnY,QAC1C0mL,IAAcjD,GAAOrtL,KAAMswL,GAAa,IAAM,KAAQvuK,EAAEnY,YAGjDmY,EAAEnY,OAIO,IAAZmY,EAAE+O,QACNw/J,EAAWA,EAAS5iL,QAASwgL,GAAY,MACzC0C,GAAavD,GAAOrtL,KAAMswL,GAAa,IAAM,KAAQ,KAAS1nB,GAAMuB,OACnEymB,GAIF7uK,EAAEk5C,IAAMq1H,EAAWM,GASf7uK,EAAE+vK,aACD9oB,EAAOwmB,aAAcc,IACzBvB,EAAMuC,iBAAkB,oBAAqBtoB,EAAOwmB,aAAcc,IAE9DtnB,EAAOymB,KAAMa,IACjBvB,EAAMuC,iBAAkB,gBAAiBtoB,EAAOymB,KAAMa,MAKnDvuK,EAAEnY,MAAQmY,EAAE8vK,aAAgC,IAAlB9vK,EAAE6tK,aAAyBxnL,EAAQwnL,cACjEb,EAAMuC,iBAAkB,eAAgBvvK,EAAE6tK,aAI3Cb,EAAMuC,iBACL,SACAvvK,EAAE8sK,UAAW,IAAO9sK,EAAE8tK,QAAS9tK,EAAE8sK,UAAW,IAC3C9sK,EAAE8tK,QAAS9tK,EAAE8sK,UAAW,KACA,MAArB9sK,EAAE8sK,UAAW,GAAc,KAAON,GAAW,WAAa,IAC7DxsK,EAAE8tK,QAAS,MAIF9tK,EAAEgwK,QACZhD,EAAMuC,iBAAkB38K,EAAGoN,EAAEgwK,QAASp9K,IAIvC,GAAKoN,EAAEiwK,cAC+C,IAAnDjwK,EAAEiwK,WAAW32K,KAAMw1K,EAAiB9B,EAAOhtK,IAAiB61B,GAG9D,OAAOm3I,EAAM0C,QAed,GAXAN,EAAW,QAGXJ,EAAiBvqL,IAAKub,EAAEi6D,UACxB+yG,EAAMroK,KAAM3E,EAAEw/G,SACdwtD,EAAM7tD,KAAMn/G,EAAEgF,OAGdspK,EAAYvB,GAA+BR,GAAYvsK,EAAG3Z,EAAS2mL,GAK5D,CASN,GARAA,EAAMp3I,WAAa,EAGdg5I,GACJG,EAAmBh2H,QAAS,WAAY,CAAEi0H,EAAOhtK,IAI7C61B,EACJ,OAAOm3I,EAIHhtK,EAAEiqC,OAASjqC,EAAE4vH,QAAU,IAC3B8+C,EAAenyL,EAAOs/B,YAAY,WACjCmxJ,EAAM0C,MAAO,UACd,GAAG1vK,EAAE4vH,UAGN,IACC/5F,GAAY,EACZy4I,EAAU4B,KAAMhB,EAAgBvqK,EACjC,CAAE,MAAQ8pB,GAGT,GAAKoH,EACJ,MAAMpH,EAIP9pB,GAAO,EAAG8pB,EACX,CACD,MAlCC9pB,GAAO,EAAG,gBAqCX,SAASA,EAAMg1D,EAAQw2G,EAAkBC,EAAWJ,GACnD,IAAIK,EAAW7wD,EAASx6G,EAAOsrK,EAAUC,EACxCZ,EAAaQ,EAGTt6I,IAILA,GAAY,EAGP64I,GACJnyL,EAAOgmF,aAAcmsG,GAKtBJ,OAAYplL,EAGZslL,EAAwBwB,GAAW,GAGnChD,EAAMp3I,WAAa+jC,EAAS,EAAI,EAAI,EAGpC02G,EAAY12G,GAAU,KAAOA,EAAS,KAAkB,MAAXA,EAGxCy2G,IACJE,EA7lBJ,SAA8BtwK,EAAGgtK,EAAOoD,GAOvC,IALA,IAAII,EAAIvsK,EAAMwsK,EAAeC,EAC5Bhd,EAAW1zJ,EAAE0zJ,SACboZ,EAAY9sK,EAAE8sK,UAGY,MAAnBA,EAAW,IAClBA,EAAUtnK,aACEtc,IAAPsnL,IACJA,EAAKxwK,EAAEyvK,UAAYzC,EAAMqC,kBAAmB,iBAK9C,GAAKmB,EACJ,IAAMvsK,KAAQyvJ,EACb,GAAKA,EAAUzvJ,IAAUyvJ,EAAUzvJ,GAAOhmB,KAAMuyL,GAAO,CACtD1D,EAAUrnK,QAASxB,GACnB,KACD,CAKF,GAAK6oK,EAAW,KAAOsD,EACtBK,EAAgB3D,EAAW,OACrB,CAGN,IAAM7oK,KAAQmsK,EAAY,CACzB,IAAMtD,EAAW,IAAO9sK,EAAEiuK,WAAYhqK,EAAO,IAAM6oK,EAAW,IAAQ,CACrE2D,EAAgBxsK,EAChB,KACD,CACMysK,IACLA,EAAgBzsK,EAElB,CAGAwsK,EAAgBA,GAAiBC,CAClC,CAKA,GAAKD,EAIJ,OAHKA,IAAkB3D,EAAW,IACjCA,EAAUrnK,QAASgrK,GAEbL,EAAWK,EAEpB,CAwiBeE,CAAqB3wK,EAAGgtK,EAAOoD,KAIrCC,GACLppB,EAAOpwB,QAAS,SAAU72H,EAAE8sK,YAAe,GAC3C7lB,EAAOpwB,QAAS,OAAQ72H,EAAE8sK,WAAc,IACxC9sK,EAAEiuK,WAAY,eAAkB,WAAY,GAI7CqC,EA9iBH,SAAsBtwK,EAAGswK,EAAUtD,EAAOqD,GACzC,IAAIO,EAAOjpL,EAASkpL,EAAM75C,EAAKr6D,EAC9BsxG,EAAa,CAAC,EAGdnB,EAAY9sK,EAAE8sK,UAAUr5K,QAGzB,GAAKq5K,EAAW,GACf,IAAM+D,KAAQ7wK,EAAEiuK,WACfA,EAAY4C,EAAK9wL,eAAkBigB,EAAEiuK,WAAY4C,GAOnD,IAHAlpL,EAAUmlL,EAAUtnK,QAGZ7d,GAcP,GAZKqY,EAAEguK,eAAgBrmL,KACtBqlL,EAAOhtK,EAAEguK,eAAgBrmL,IAAc2oL,IAIlC3zG,GAAQ0zG,GAAarwK,EAAE8wK,aAC5BR,EAAWtwK,EAAE8wK,WAAYR,EAAUtwK,EAAE6sK,WAGtClwG,EAAOh1E,EACPA,EAAUmlL,EAAUtnK,QAKnB,GAAiB,MAAZ7d,EAEJA,EAAUg1E,OAGJ,GAAc,MAATA,GAAgBA,IAASh1E,EAAU,CAM9C,KAHAkpL,EAAO5C,EAAYtxG,EAAO,IAAMh1E,IAAasmL,EAAY,KAAOtmL,IAI/D,IAAMipL,KAAS3C,EAId,IADAj3C,EAAM45C,EAAMrnL,MAAO,MACT,KAAQ5B,IAGjBkpL,EAAO5C,EAAYtxG,EAAO,IAAMq6D,EAAK,KACpCi3C,EAAY,KAAOj3C,EAAK,KACb,EAGG,IAAT65C,EACJA,EAAO5C,EAAY2C,IAGgB,IAAxB3C,EAAY2C,KACvBjpL,EAAUqvI,EAAK,GACf81C,EAAUrnK,QAASuxH,EAAK,KAEzB,KACD,CAMH,IAAc,IAAT65C,EAGJ,GAAKA,GAAQ7wK,EAAE+wK,OACdT,EAAWO,EAAMP,QAEjB,IACCA,EAAWO,EAAMP,EAClB,CAAE,MAAQ7hJ,GACT,MAAO,CACNjoC,MAAO,cACPwe,MAAO6rK,EAAOpiJ,EAAI,sBAAwBkuC,EAAO,OAASh1E,EAE5D,CAGH,CAIF,MAAO,CAAEnB,MAAO,UAAWqB,KAAMyoL,EAClC,CAgdcU,CAAahxK,EAAGswK,EAAUtD,EAAOqD,GAGvCA,GAGCrwK,EAAE+vK,cACNQ,EAAWvD,EAAMqC,kBAAmB,oBAEnCpoB,EAAOwmB,aAAcc,GAAagC,IAEnCA,EAAWvD,EAAMqC,kBAAmB,WAEnCpoB,EAAOymB,KAAMa,GAAagC,IAKZ,MAAX52G,GAA6B,SAAX35D,EAAEiE,KACxB0rK,EAAa,YAGS,MAAXh2G,EACXg2G,EAAa,eAIbA,EAAaW,EAAS9pL,MACtBg5H,EAAU8wD,EAASzoL,KAEnBwoL,IADArrK,EAAQsrK,EAAStrK,UAMlBA,EAAQ2qK,GACHh2G,GAAWg2G,IACfA,EAAa,QACRh2G,EAAS,IACbA,EAAS,KAMZqzG,EAAMrzG,OAASA,EACfqzG,EAAM2C,YAAeQ,GAAoBR,GAAe,GAGnDU,EACJhb,EAASc,YAAa2Y,EAAiB,CAAEtvD,EAASmwD,EAAY3C,IAE9D3X,EAASiB,WAAYwY,EAAiB,CAAE9B,EAAO2C,EAAY3qK,IAI5DgoK,EAAMiC,WAAYA,GAClBA,OAAa/lL,EAER0lL,GACJG,EAAmBh2H,QAASs3H,EAAY,cAAgB,YACvD,CAAErD,EAAOhtK,EAAGqwK,EAAY7wD,EAAUx6G,IAIpCgqK,EAAiB/Z,SAAU6Z,EAAiB,CAAE9B,EAAO2C,IAEhDf,IACJG,EAAmBh2H,QAAS,eAAgB,CAAEi0H,EAAOhtK,MAG3CinJ,EAAOumB,QAChBvmB,EAAO/uI,MAAM6gC,QAAS,aAGzB,CAEA,OAAOi0H,CACR,EAEAiE,QAAS,SAAU/3H,EAAKrxD,EAAM+wB,GAC7B,OAAOquI,EAAOhiK,IAAKi0D,EAAKrxD,EAAM+wB,EAAU,OACzC,EAEAs4J,UAAW,SAAUh4H,EAAKtgC,GACzB,OAAOquI,EAAOhiK,IAAKi0D,OAAKhwD,EAAW0vB,EAAU,SAC9C,IAGDquI,EAAO9pC,KAAM,CAAE,MAAO,SAAU,SAAU7pH,EAAI+0B,GAC7C4+H,EAAQ5+H,GAAW,SAAU6wB,EAAKrxD,EAAM+wB,EAAU3U,GAUjD,OAPK87H,EAAYl4I,KAChBoc,EAAOA,GAAQ2U,EACfA,EAAW/wB,EACXA,OAAOqB,GAID+9J,EAAOonB,KAAMpnB,EAAO/0G,OAAQ,CAClCgH,IAAKA,EACLj1C,KAAMokB,EACNwkJ,SAAU5oK,EACVpc,KAAMA,EACN23H,QAAS5mG,GACPquI,EAAOU,cAAezuG,IAASA,GACnC,CACD,IAEA+tG,EAAOknB,eAAe,SAAUnuK,GAC/B,IAAIpN,EACJ,IAAMA,KAAKoN,EAAEgwK,QACa,iBAApBp9K,EAAE7S,gBACNigB,EAAE6tK,YAAc7tK,EAAEgwK,QAASp9K,IAAO,GAGrC,IAGAq0J,EAAOuZ,SAAW,SAAUtnH,EAAK7yD,EAAS2tG,GACzC,OAAOizD,EAAOonB,KAAM,CACnBn1H,IAAKA,EAGLj1C,KAAM,MACN4oK,SAAU,SACV99J,OAAO,EACPk7B,OAAO,EACPhY,QAAQ,EAKRg8I,WAAY,CACX,cAAe,WAAY,GAE5B6C,WAAY,SAAUR,GACrBrpB,EAAOe,WAAYsoB,EAAUjqL,EAAS2tG,EACvC,GAEF,EAGAizD,EAAO3gK,GAAG4rD,OAAQ,CACjBi/H,QAAS,SAAU3kL,GAClB,IAAI0uK,EAyBJ,OAvBK5/J,KAAM,KACLykI,EAAYvzI,KAChBA,EAAOA,EAAK8M,KAAMgC,KAAM,KAIzB4/J,EAAOjU,EAAQz6J,EAAM8O,KAAM,GAAI7e,eAAgB2jJ,GAAI,GAAIgS,OAAO,GAEzD92I,KAAM,GAAI5Z,YACdw5K,EAAKt0G,aAActrD,KAAM,IAG1B4/J,EAAKx9K,KAAK,WAGT,IAFA,IAAImlE,EAAOvnD,KAEHunD,EAAKr9B,mBACZq9B,EAAOA,EAAKr9B,kBAGb,OAAOq9B,CACR,IAAIv/C,OAAQhI,OAGNA,IACR,EAEA81K,UAAW,SAAU5kL,GACpB,OAAKuzI,EAAYvzI,GACT8O,KAAK6hH,MAAM,SAAUvqH,GAC3Bq0J,EAAQ3rJ,MAAO81K,UAAW5kL,EAAK8M,KAAMgC,KAAM1I,GAC5C,IAGM0I,KAAK6hH,MAAM,WACjB,IAAI9jH,EAAO4tJ,EAAQ3rJ,MAClBo4J,EAAWr6J,EAAKq6J,WAEZA,EAASjuK,OACbiuK,EAASyd,QAAS3kL,GAGlB6M,EAAKiK,OAAQ9W,EAEf,GACD,EAEA0uK,KAAM,SAAU1uK,GACf,IAAI6kL,EAAiBtxC,EAAYvzI,GAEjC,OAAO8O,KAAK6hH,MAAM,SAAUvqH,GAC3Bq0J,EAAQ3rJ,MAAO61K,QAASE,EAAiB7kL,EAAK8M,KAAMgC,KAAM1I,GAAMpG,EACjE,GACD,EAEAk8D,OAAQ,SAAUsoC,GAIjB,OAHA11F,KAAKvP,OAAQilG,GAAWqiE,IAAK,QAASl2C,MAAM,WAC3C8pC,EAAQ3rJ,MAAO0lK,YAAa1lK,KAAK0tD,WAClC,IACO1tD,IACR,IAID2rJ,EAAO6G,KAAKhE,QAAQjoG,OAAS,SAAUgB,GACtC,OAAQokG,EAAO6G,KAAKhE,QAAQwnB,QAASzuH,EACtC,EACAokG,EAAO6G,KAAKhE,QAAQwnB,QAAU,SAAUzuH,GACvC,SAAWA,EAAKpkE,aAAeokE,EAAKlkE,cAAgBkkE,EAAKkiH,iBAAiBt/K,OAC3E,EAKAwhK,EAAOsmB,aAAagE,IAAM,WACzB,IACC,OAAO,IAAIh1L,EAAO6sE,cACnB,CAAE,MAAQ36B,GAAK,CAChB,EAEA,IAAI+iJ,GAAmB,CAGrB,EAAG,IAIH,KAAM,KAEPC,GAAexqB,EAAOsmB,aAAagE,MAEpC7qB,EAAQgrB,OAASD,IAAkB,oBAAqBA,GACxD/qB,EAAQ2nB,KAAOoD,KAAiBA,GAEhCxqB,EAAOmnB,eAAe,SAAU/nL,GAC/B,IAAIuyB,EAAU+4J,EAGd,GAAKjrB,EAAQgrB,MAAQD,KAAiBprL,EAAQwpL,YAC7C,MAAO,CACNK,KAAM,SAAUF,EAAS/1G,GACxB,IAAIrnE,EACH2+K,EAAMlrL,EAAQkrL,MAWf,GATAA,EAAInwI,KACH/6C,EAAQ4d,KACR5d,EAAQ6yD,IACR7yD,EAAQ4jD,MACR5jD,EAAQurL,SACRvrL,EAAQ0pK,UAIJ1pK,EAAQwrL,UACZ,IAAMj/K,KAAKvM,EAAQwrL,UAClBN,EAAK3+K,GAAMvM,EAAQwrL,UAAWj/K,GAmBhC,IAAMA,KAdDvM,EAAQopL,UAAY8B,EAAI/B,kBAC5B+B,EAAI/B,iBAAkBnpL,EAAQopL,UAQzBppL,EAAQwpL,aAAgBG,EAAS,sBACtCA,EAAS,oBAAuB,kBAItBA,EACVuB,EAAIhC,iBAAkB38K,EAAGo9K,EAASp9K,IAInCgmB,EAAW,SAAU3U,GACpB,OAAO,WACD2U,IACJA,EAAW+4J,EAAgBJ,EAAIO,OAC9BP,EAAIlnI,QAAUknI,EAAIQ,QAAUR,EAAIS,UAC/BT,EAAIU,mBAAqB,KAEb,UAAThuK,EACJstK,EAAI7B,QACgB,UAATzrK,EAKgB,iBAAfstK,EAAI53G,OACfM,EAAU,EAAG,SAEbA,EAGCs3G,EAAI53G,OACJ43G,EAAI5B,YAIN11G,EACCu3G,GAAkBD,EAAI53G,SAAY43G,EAAI53G,OACtC43G,EAAI5B,WAK+B,UAAjC4B,EAAIW,cAAgB,SACM,iBAArBX,EAAIY,aACV,CAAEjkK,OAAQqjK,EAAIjB,UACd,CAAE1iK,KAAM2jK,EAAIY,cACbZ,EAAIjC,yBAIR,CACD,EAGAiC,EAAIO,OAASl5J,IACb+4J,EAAgBJ,EAAIlnI,QAAUknI,EAAIS,UAAYp5J,EAAU,cAKnC1vB,IAAhBqoL,EAAIQ,QACRR,EAAIQ,QAAUJ,EAEdJ,EAAIU,mBAAqB,WAGA,IAAnBV,EAAI37I,YAMRr5C,EAAOs/B,YAAY,WACbjD,GACJ+4J,GAEF,GAEF,EAID/4J,EAAWA,EAAU,SAErB,IAGC24J,EAAIrB,KAAM7pL,EAAQypL,YAAczpL,EAAQwB,MAAQ,KACjD,CAAE,MAAQ4mC,GAGT,GAAK7V,EACJ,MAAM6V,CAER,CACD,EAEAihJ,MAAO,WACD92J,GACJA,GAEF,EAGH,IAMAquI,EAAOknB,eAAe,SAAUnuK,GAC1BA,EAAE6vK,cACN7vK,EAAE0zJ,SAASlvI,QAAS,EAEtB,IAGAyiI,EAAOinB,UAAW,CACjBJ,QAAS,CACRtpJ,OAAQ,6FAGTkvI,SAAU,CACTlvI,OAAQ,2BAETypJ,WAAY,CACX,cAAe,SAAUrgK,GAExB,OADAq5I,EAAOe,WAAYp6I,GACZA,CACR,KAKFq5I,EAAOknB,cAAe,UAAU,SAAUnuK,QACxB9W,IAAZ8W,EAAE+O,QACN/O,EAAE+O,OAAQ,GAEN/O,EAAE6vK,cACN7vK,EAAEiE,KAAO,MAEX,IAGAgjJ,EAAOmnB,cAAe,UAAU,SAAUpuK,GAIxC,IAAIwkB,EAAQ5L,EADb,GAAK5Y,EAAE6vK,aAAe7vK,EAAEoyK,YAEvB,MAAO,CACNlC,KAAM,SAAU/1K,EAAG8/D,GAClBz1C,EAASyiI,EAAQ,YACflwG,KAAM/2C,EAAEoyK,aAAe,CAAC,GACxB1pJ,KAAM,CAAE2pJ,QAASryK,EAAEsyK,cAAerjK,IAAKjP,EAAEk5C,MACzC6vD,GAAI,aAAcnwF,EAAW,SAAUkvB,GACvCtjB,EAAOjE,SACP3H,EAAW,KACNkvB,GACJmyB,EAAuB,UAAbnyB,EAAI7jC,KAAmB,IAAM,IAAK6jC,EAAI7jC,KAElD,GAGDhkB,EAAS8oE,KAAK5e,YAAa3lB,EAAQ,GACpC,EACAkrJ,MAAO,WACD92J,GACJA,GAEF,EAGH,IAKA,IAqGK92B,GArGDywL,GAAe,GAClBC,GAAS,oBAGVvrB,EAAOinB,UAAW,CACjBuE,MAAO,WACPC,cAAe,WACd,IAAI95J,EAAW25J,GAAahtK,OAAW0hJ,EAAOW,QAAU,IAAQf,GAAMuB,OAEtE,OADA9sJ,KAAMsd,IAAa,EACZA,CACR,IAIDquI,EAAOknB,cAAe,cAAc,SAAUnuK,EAAG2yK,EAAkB3F,GAElE,IAAIrhJ,EAAcinJ,EAAaC,EAC9BC,GAAuB,IAAZ9yK,EAAEyyK,QAAqBD,GAAOv0L,KAAM+hB,EAAEk5C,KAChD,MACkB,iBAAXl5C,EAAEnY,MAE6C,KADnDmY,EAAE6tK,aAAe,IACjBhsL,QAAS,sCACX2wL,GAAOv0L,KAAM+hB,EAAEnY,OAAU,QAI5B,GAAKirL,GAAiC,UAArB9yK,EAAE8sK,UAAW,GA8D7B,OA3DAnhJ,EAAe3rB,EAAE0yK,cAAgB3yC,EAAY//H,EAAE0yK,eAC9C1yK,EAAE0yK,gBACF1yK,EAAE0yK,cAGEI,EACJ9yK,EAAG8yK,GAAa9yK,EAAG8yK,GAAWnnL,QAAS6mL,GAAQ,KAAO7mJ,IAC/B,IAAZ3rB,EAAEyyK,QACbzyK,EAAEk5C,MAASoyH,GAAOrtL,KAAM+hB,EAAEk5C,KAAQ,IAAM,KAAQl5C,EAAEyyK,MAAQ,IAAM9mJ,GAIjE3rB,EAAEiuK,WAAY,eAAkB,WAI/B,OAHM4E,GACL5rB,EAAOjiJ,MAAO2mB,EAAe,mBAEvBknJ,EAAmB,EAC3B,EAGA7yK,EAAE8sK,UAAW,GAAM,OAGnB8F,EAAcr2L,EAAQovC,GACtBpvC,EAAQovC,GAAiB,WACxBknJ,EAAoBrtL,SACrB,EAGAwnL,EAAM5X,QAAQ,gBAGQlsK,IAAhB0pL,EACJ3rB,EAAQ1qK,GAASwtL,WAAYp+I,GAI7BpvC,EAAQovC,GAAiBinJ,EAIrB5yK,EAAG2rB,KAGP3rB,EAAE0yK,cAAgBC,EAAiBD,cAGnCH,GAAartL,KAAMymC,IAIfknJ,GAAqB9yC,EAAY6yC,IACrCA,EAAaC,EAAmB,IAGjCA,EAAoBD,OAAc1pL,CACnC,IAGO,QAET,IAUAw9J,EAAQ5Q,qBACHh0J,GAAO7B,EAAS4lD,eAAeiwG,mBAAoB,IAAKh0J,MACvDwjC,UAAY,6BACiB,IAA3BxjC,GAAKknE,WAAWvjE,QAQxBwhK,EAAOsM,UAAY,SAAU1rK,EAAMwV,EAAS01K,GAC3C,MAAqB,iBAATlrL,EACJ,IAEgB,kBAAZwV,IACX01K,EAAc11K,EACdA,GAAU,GAKLA,IAIAqpJ,EAAQ5Q,qBAMZruB,GALApqH,EAAUpd,EAAS4lD,eAAeiwG,mBAAoB,KAKvC/rG,cAAe,SACzBgM,KAAO91D,EAASo3D,SAAStB,KAC9B14C,EAAQ0rD,KAAK5e,YAAas9E,IAE1BpqH,EAAUpd,GAKZ86K,GAAWgY,GAAe,IAD1B/5D,EAASk6C,EAAWt1I,KAAM/1B,IAKlB,CAAEwV,EAAQ0sC,cAAeivE,EAAQ,MAGzCA,EAAS8hD,GAAe,CAAEjzK,GAAQwV,EAAS09J,GAEtCA,GAAWA,EAAQt1K,QACvBwhK,EAAQ8T,GAAUx6I,SAGZ0mI,EAAOK,MAAO,GAAItuC,EAAOhwD,cAlChC,IAAIy+D,EAAMzO,EAAQ+hD,CAmCnB,EAMA9T,EAAO3gK,GAAG+iC,KAAO,SAAU6vB,EAAKlP,EAAQpxB,GACvC,IAAIo4E,EAAU/sF,EAAMqsK,EACnBj3K,EAAOiC,KACP0uG,EAAM9wD,EAAIr3D,QAAS,KAsDpB,OApDKmoH,GAAO,IACXhZ,EAAW44E,GAAkB1wH,EAAIzlD,MAAOu2G,IACxC9wD,EAAMA,EAAIzlD,MAAO,EAAGu2G,IAIhB+1B,EAAY/1F,IAGhBpxB,EAAWoxB,EACXA,OAAS9gD,GAGE8gD,GAA4B,iBAAXA,IAC5B/lC,EAAO,QAIH5K,EAAK5T,OAAS,GAClBwhK,EAAOonB,KAAM,CACZn1H,IAAKA,EAKLj1C,KAAMA,GAAQ,MACd4oK,SAAU,OACVhlL,KAAMmiD,IACHrlC,MAAM,SAAUwtK,GAGnB7B,EAAW9qL,UAEX6T,EAAK7M,KAAMwkG,EAIVi2D,EAAQ,SAAU3jJ,OAAQ2jJ,EAAOsM,UAAW4e,IAAiB3+K,KAAMw9F,GAGnEmhF,EAKF,IAAI/c,OAAQx8I,GAAY,SAAUo0J,EAAOrzG,GACxCtgE,EAAK8jH,MAAM,WACVvkG,EAASvV,MAAO/H,KAAMg1K,GAAY,CAAEtD,EAAMmF,aAAcx4G,EAAQqzG,GACjE,GACD,GAGM1xK,IACR,EAKA2rJ,EAAO6G,KAAKhE,QAAQkpB,SAAW,SAAUnwH,GACxC,OAAOokG,EAAO7uB,KAAM6uB,EAAOqhB,QAAQ,SAAUhiL,GAC5C,OAAOu8D,IAASv8D,EAAGu8D,IACpB,IAAIp9D,MACL,EAKAwhK,EAAO73J,OAAS,CACf6jL,UAAW,SAAUpwH,EAAMx8D,EAASuM,GACnC,IAAIsgL,EAAaC,EAASC,EAAWC,EAAQC,EAAWC,EACvD9wL,EAAWwkK,EAAOpkK,IAAKggE,EAAM,YAC7B2wH,EAAUvsB,EAAQpkG,GAClBxqD,EAAQ,CAAC,EAGQ,WAAb5V,IACJogE,EAAKvyD,MAAM7N,SAAW,YAGvB6wL,EAAYE,EAAQpkL,SACpBgkL,EAAYnsB,EAAOpkK,IAAKggE,EAAM,OAC9B0wH,EAAatsB,EAAOpkK,IAAKggE,EAAM,SACI,aAAbpgE,GAAwC,UAAbA,KAC9C2wL,EAAYG,GAAa1xL,QAAS,SAAY,GAMhDwxL,GADAH,EAAcM,EAAQ/wL,YACDtD,IACrBg0L,EAAUD,EAAYl0L,OAGtBq0L,EAASj/J,WAAYg/J,IAAe,EACpCD,EAAU/+J,WAAYm/J,IAAgB,GAGlCxzC,EAAY15I,KAGhBA,EAAUA,EAAQiT,KAAMupD,EAAMjwD,EAAGq0J,EAAO/0G,OAAQ,CAAC,EAAGohI,KAGjC,MAAfjtL,EAAQlH,MACZkZ,EAAMlZ,IAAQkH,EAAQlH,IAAMm0L,EAAUn0L,IAAQk0L,GAE1B,MAAhBhtL,EAAQrH,OACZqZ,EAAMrZ,KAASqH,EAAQrH,KAAOs0L,EAAUt0L,KAASm0L,GAG7C,UAAW9sL,EACfA,EAAQsqI,MAAMr3H,KAAMupD,EAAMxqD,GAG1Bm7K,EAAQ3wL,IAAKwV,EAEf,GAGD4uJ,EAAO3gK,GAAG4rD,OAAQ,CAGjB9iD,OAAQ,SAAU/I,GAGjB,GAAKb,UAAUC,OACd,YAAmByD,IAAZ7C,EACNiV,KACAA,KAAK6hH,MAAM,SAAUvqH,GACpBq0J,EAAO73J,OAAO6jL,UAAW33K,KAAMjV,EAASuM,EACzC,IAGF,IAAI5R,EAAMxB,EACTqjE,EAAOvnD,KAAM,GAEd,OAAMunD,EAQAA,EAAKkiH,iBAAiBt/K,QAK5BzE,EAAO6hE,EAAK3kE,wBACZsB,EAAMqjE,EAAKpmE,cAAcC,YAClB,CACNyC,IAAK6B,EAAK7B,IAAMK,EAAII,YACpBZ,KAAMgC,EAAKhC,KAAOQ,EAAIE,cARf,CAAEP,IAAK,EAAGH,KAAM,QATxB,CAmBD,EAIAyD,SAAU,WACT,GAAM6Y,KAAM,GAAZ,CAIA,IAAI1a,EAAcwO,EAAQ4kG,EACzBnxC,EAAOvnD,KAAM,GACbm4K,EAAe,CAAEt0L,IAAK,EAAGH,KAAM,GAGhC,GAAwC,UAAnCioK,EAAOpkK,IAAKggE,EAAM,YAGtBzzD,EAASyzD,EAAK3kE,4BAER,CAON,IANAkR,EAASkM,KAAKlM,SAId4kG,EAAMnxC,EAAKpmE,cACXmE,EAAeiiE,EAAKjiE,cAAgBozG,EAAI9zG,gBAChCU,IACLA,IAAiBozG,EAAIlyG,MAAQlB,IAAiBozG,EAAI9zG,kBACT,WAA3C+mK,EAAOpkK,IAAKjC,EAAc,aAE1BA,EAAeA,EAAac,WAExBd,GAAgBA,IAAiBiiE,GAAkC,IAA1BjiE,EAAasnE,YAG1DurH,EAAexsB,EAAQrmK,GAAewO,UACzBjQ,KAAO8nK,EAAOpkK,IAAKjC,EAAc,kBAAkB,GAChE6yL,EAAaz0L,MAAQioK,EAAOpkK,IAAKjC,EAAc,mBAAmB,GAEpE,CAGA,MAAO,CACNzB,IAAKiQ,EAAOjQ,IAAMs0L,EAAat0L,IAAM8nK,EAAOpkK,IAAKggE,EAAM,aAAa,GACpE7jE,KAAMoQ,EAAOpQ,KAAOy0L,EAAaz0L,KAAOioK,EAAOpkK,IAAKggE,EAAM,cAAc,GArCzE,CAuCD,EAYAjiE,aAAc,WACb,OAAO0a,KAAK5d,KAAK,WAGhB,IAFA,IAAIkD,EAAe0a,KAAK1a,aAEhBA,GAA2D,WAA3CqmK,EAAOpkK,IAAKjC,EAAc,aACjDA,EAAeA,EAAaA,aAG7B,OAAOA,GAAgBV,EACxB,GACD,IAID+mK,EAAO9pC,KAAM,CAAE19H,WAAY,cAAeE,UAAW,gBAAiB,SAAU0oC,EAAQK,GACvF,IAAIvpC,EAAM,gBAAkBupC,EAE5Bu+H,EAAO3gK,GAAI+hC,GAAW,SAAU7Y,GAC/B,OAAOzB,EAAQzS,MAAM,SAAUunD,EAAMx6B,EAAQ7Y,GAG5C,IAAIhwB,EAOJ,GANKmnK,EAAU9jG,GACdrjE,EAAMqjE,EACuB,IAAlBA,EAAKqF,WAChB1oE,EAAMqjE,EAAKnmE,kBAGCwM,IAARsmB,EACJ,OAAOhwB,EAAMA,EAAKkpC,GAASm6B,EAAMx6B,GAG7B7oC,EACJA,EAAIk0L,SACFv0L,EAAYK,EAAIE,YAAV8vB,EACPrwB,EAAMqwB,EAAMhwB,EAAII,aAIjBijE,EAAMx6B,GAAW7Y,CAEnB,GAAG6Y,EAAQ7Y,EAAKhqB,UAAUC,OAC3B,CACD,IAQAwhK,EAAO9pC,KAAM,CAAE,MAAO,SAAU,SAAU7pH,EAAIo1B,GAC7Cu+H,EAAOie,SAAUx8I,GAASs5I,GAActb,EAAQsc,eAC/C,SAAUngH,EAAM8+G,GACf,GAAKA,EAIJ,OAHAA,EAAWD,GAAQ7+G,EAAMn6B,GAGlB04I,GAAUnjL,KAAM0jL,GACtB1a,EAAQpkG,GAAOpgE,WAAYimC,GAAS,KACpCi5I,CAEH,GAEF,IAIA1a,EAAO9pC,KAAM,CAAEw2D,OAAQ,SAAUC,MAAO,UAAW,SAAUlvL,EAAMuf,GAClEgjJ,EAAO9pC,KAAM,CACZ/uH,QAAS,QAAU1J,EACnBorD,QAAS7rC,EACT,GAAI,QAAUvf,IACZ,SAAUmvL,EAAcC,GAG1B7sB,EAAO3gK,GAAIwtL,GAAa,SAAUpjL,EAAQpD,GACzC,IAAI8pK,EAAY5xK,UAAUC,SAAYouL,GAAkC,kBAAXnjL,GAC5Di0K,EAAQkP,KAA6B,IAAXnjL,IAA6B,IAAVpD,EAAiB,SAAW,UAE1E,OAAOygB,EAAQzS,MAAM,SAAUunD,EAAM5+C,EAAM3W,GAC1C,IAAI0mG,EAEJ,OAAK2yD,EAAU9jG,GAGyB,IAAhCixH,EAASjyL,QAAS,SACxBghE,EAAM,QAAUn+D,GAChBm+D,EAAK5iE,SAASC,gBAAiB,SAAWwE,GAIrB,IAAlBm+D,EAAKqF,UACT8rC,EAAMnxC,EAAK3iE,gBAIJjD,KAAKC,IACX2lE,EAAK/gE,KAAM,SAAW4C,GAAQsvG,EAAK,SAAWtvG,GAC9Cm+D,EAAK/gE,KAAM,SAAW4C,GAAQsvG,EAAK,SAAWtvG,GAC9CsvG,EAAK,SAAWtvG,UAIDwE,IAAVoE,EAGN25J,EAAOpkK,IAAKggE,EAAM5+C,EAAM0gK,GAGxB1d,EAAO32J,MAAOuyD,EAAM5+C,EAAM3W,EAAOq3K,EACnC,GAAG1gK,EAAMmzJ,EAAY1mK,OAASxH,EAAWkuK,EAC1C,CACD,GACD,IAGAnQ,EAAO9pC,KAAM,CACZ,YACA,WACA,eACA,YACA,cACA,aACE,SAAU7pH,EAAI2Q,GAChBgjJ,EAAO3gK,GAAI2d,GAAS,SAAU3d,GAC7B,OAAOgV,KAAKytG,GAAI9kG,EAAM3d,EACvB,CACD,IAKA2gK,EAAO3gK,GAAG4rD,OAAQ,CAEjBlrC,KAAM,SAAUonD,EAAOvmE,EAAMvB,GAC5B,OAAOgV,KAAKytG,GAAI36C,EAAO,KAAMvmE,EAAMvB,EACpC,EACA+gB,OAAQ,SAAU+mD,EAAO9nE,GACxB,OAAOgV,KAAK0uG,IAAK57C,EAAO,KAAM9nE,EAC/B,EAEA60B,SAAU,SAAU61E,EAAU5iC,EAAOvmE,EAAMvB,GAC1C,OAAOgV,KAAKytG,GAAI36C,EAAO4iC,EAAUnpG,EAAMvB,EACxC,EACAytL,WAAY,SAAU/iF,EAAU5iC,EAAO9nE,GAGtC,OAA4B,IAArBd,UAAUC,OAChB6V,KAAK0uG,IAAKhZ,EAAU,MACpB11F,KAAK0uG,IAAK57C,EAAO4iC,GAAY,KAAM1qG,EACrC,EAEA0tL,MAAO,SAAUC,EAAQC,GACxB,OAAO54K,KAAK6jK,WAAY8U,GAAS7U,WAAY8U,GAASD,EACvD,IAGDhtB,EAAO9pC,KACN,wLAE4D5zH,MAAO,MACnE,SAAU+J,EAAI5O,GAGbuiK,EAAO3gK,GAAI5B,GAAS,SAAUmD,EAAMvB,GACnC,OAAOd,UAAUC,OAAS,EACzB6V,KAAKytG,GAAIrkH,EAAM,KAAMmD,EAAMvB,GAC3BgV,KAAKy9C,QAASr0D,EAChB,CACD,IAUD,IAAIslK,GAAQ,sDAMZ/C,EAAOnuB,MAAQ,SAAUxyI,EAAI+W,GAC5B,IAAI25H,EAAKtxI,EAAMozI,EAUf,GARwB,iBAAZz7H,IACX25H,EAAM1wI,EAAI+W,GACVA,EAAU/W,EACVA,EAAK0wI,GAKA+I,EAAYz5I,GAalB,OARAZ,EAAO+N,EAAM6F,KAAM9T,UAAW,GAC9BszI,EAAQ,WACP,OAAOxyI,EAAG+c,MAAOhG,GAAW/B,KAAM5V,EAAKrD,OAAQoR,EAAM6F,KAAM9T,YAC5D,EAGAszI,EAAMsvB,KAAO9hK,EAAG8hK,KAAO9hK,EAAG8hK,MAAQnB,EAAOmB,OAElCtvB,CACR,EAEAmuB,EAAOktB,UAAY,SAAUC,GACvBA,EACJntB,EAAOgQ,YAEPhQ,EAAOpuE,OAAO,EAEhB,EACAouE,EAAOp9I,QAAUlkB,MAAMkkB,QACvBo9I,EAAOotB,UAAYpvK,KAAK+J,MACxBi4I,EAAOnnK,SAAWA,EAClBmnK,EAAOlnB,WAAaA,EACpBknB,EAAON,SAAWA,EAClBM,EAAOhtJ,UAAYA,EACnBgtJ,EAAOhjJ,KAAO+iJ,EAEdC,EAAOjjG,IAAMD,KAAKC,IAElBijG,EAAOqtB,UAAY,SAAUp7K,GAK5B,IAAI+K,EAAOgjJ,EAAOhjJ,KAAM/K,GACxB,OAAkB,WAAT+K,GAA8B,WAATA,KAK5ByrB,MAAOx2B,EAAMkb,WAAYlb,GAC5B,EAEA+tJ,EAAO3kG,KAAO,SAAU10C,GACvB,OAAe,MAARA,EACN,IACEA,EAAO,IAAKjiB,QAASq+J,GAAO,KAChC,OAoBE,KAFqB,EAAF,WACnB,OAAO/C,CACP,UAFiB,OAEjB,aAMF,IAGCstB,GAAUh4L,EAAO0qK,OAGjButB,GAAKj4L,EAAO42I,EAwBb,OAtBA8zB,EAAOr5C,WAAa,SAAU85C,GAS7B,OARKnrK,EAAO42I,IAAM8zB,IACjB1qK,EAAO42I,EAAIqhD,IAGP9sB,GAAQnrK,EAAO0qK,SAAWA,IAC9B1qK,EAAO0qK,OAASstB,IAGVttB,CACR,OAKyB,IAAbZ,IACX9pK,EAAO0qK,OAAS1qK,EAAO42I,EAAI8zB,GAMrBA,CACP,0BC5pVA,iBAQE,WAGA,IAAI/9J,EAUAurL,EAAkB,sBAIlBC,EAAiB,4BAMjBC,EAAc,yBAiBdC,EAAoB,GAEpBC,EAAgB,IAkBhBC,EAAW,IACXC,EAAmB,iBAEnBC,EAAM,IAGNC,EAAmB,WAKnBC,EAAY,CACd,CAAC,MAAOL,GACR,CAAC,OAtCkB,GAuCnB,CAAC,UAtCsB,GAuCvB,CAAC,QArCmB,GAsCpB,CAAC,aArCyB,IAsC1B,CAAC,OAjCkB,KAkCnB,CAAC,UAAWD,GACZ,CAAC,eAtC2B,IAuC5B,CAAC,QArCmB,MAyClBO,EAAU,qBACVC,EAAW,iBAEXC,EAAU,mBACVC,EAAU,gBAEVC,EAAW,iBACXC,EAAU,oBACVC,EAAS,6BACTC,EAAS,eACTC,EAAY,kBAEZC,EAAY,kBACZC,EAAa,mBAEbC,EAAY,kBACZC,EAAS,eACTC,EAAY,kBACZC,EAAY,kBAEZC,EAAa,mBAGbC,EAAiB,uBACjBC,EAAc,oBACdC,EAAa,wBACbC,EAAa,wBACbC,EAAU,qBACVC,EAAW,sBACXC,EAAW,sBACXC,EAAW,sBACXC,EAAkB,6BAClBC,EAAY,uBACZC,EAAY,uBAGZC,EAAuB,iBACvBC,EAAsB,qBACtBC,EAAwB,gCAGxBC,EAAgB,4BAChBC,EAAkB,WAClBC,EAAmBjqH,OAAO+pH,EAAc9uJ,QACxCivJ,EAAqBlqH,OAAOgqH,EAAgB/uJ,QAG5CkvJ,EAAW,mBACXC,EAAa,kBACbC,EAAgB,mBAGhBC,EAAe,mDACfC,EAAgB,QAChBp0B,GAAa,mGAMbq0B,GAAe,sBACfC,GAAkBzqH,OAAOwqH,GAAavvJ,QAGtCyvJ,GAAc,OAGdC,GAAe,KAGfC,GAAgB,4CAChBC,GAAgB,oCAChBC,GAAiB,QAGjBC,GAAc,4CAYdC,GAA6B,mBAG7B50B,GAAe,WAMf60B,GAAe,kCAGfC,GAAU,OAGVC,GAAa,qBAGbC,GAAa,aAGbC,GAAe,8BAGfC,GAAY,cAGZC,GAAW,mBAGXC,GAAU,8CAGVC,GAAY,OAGZC,GAAoB,yBAGpBC,GAAgB,kBAIhBC,GAAeC,gDACfC,GAAiB,kBACjBC,GAAe,4BAKfC,GAAe,4BACfC,GAAa,iBACbC,GAAeC,8OAIfC,GAAW,IAAMT,GAAgB,IACjCU,GAAU,IAAMH,GAAe,IAC/BI,GAAU,IAAMV,GAAe,IAC/BW,GAAW,OACXC,GAAY,IAAMV,GAAiB,IACnCW,GAAU,IAAMV,GAAe,IAC/BW,GAAS,KAAOf,GAAgBO,GAAeK,GAAWT,GAAiBC,GAAeC,GAAe,IACzGW,GAAS,2BAETC,GAAc,KAAOjB,GAAgB,IACrCkB,GAAa,kCACbC,GAAa,qCACbC,GAAU,IAAMf,GAAe,IAC/BgB,GAAQ,UAGRC,GAAc,MAAQR,GAAU,IAAMC,GAAS,IAC/CQ,GAAc,MAAQH,GAAU,IAAML,GAAS,IAC/CS,GAAkB,gCAClBC,GAAkB,gCAClBC,GAZa,MAAQf,GAAU,IAAMK,GAY1BW,KACXC,GAAW,IAAMtB,GAAa,KAI9BuB,GAAQD,GAAWF,GAHP,MAAQL,GAAQ,MAAQ,CAACJ,GAAaC,GAAYC,IAAYl8L,KAAK,KAAO,IAAM28L,GAAWF,GAAW,KAIlHI,GAAU,MAAQ,CAACjB,GAAWK,GAAYC,IAAYl8L,KAAK,KAAO,IAAM48L,GACxEE,GAAW,MAAQ,CAACd,GAAcN,GAAU,IAAKA,GAASO,GAAYC,GAAYV,IAAUx7L,KAAK,KAAO,IAGxG+8L,GAAS3tH,OA/BA,OA+Be,KAMxB4tH,GAAc5tH,OAAOssH,GAAS,KAG9BuB,GAAY7tH,OAAO2sH,GAAS,MAAQA,GAAS,KAAOe,GAAWF,GAAO,KAGtEM,GAAgB9tH,OAAO,CACzB+sH,GAAU,IAAMN,GAAU,IAAMU,GAAkB,MAAQ,CAACd,GAASU,GAAS,KAAKn8L,KAAK,KAAO,IAC9Fs8L,GAAc,IAAME,GAAkB,MAAQ,CAACf,GAASU,GAAUE,GAAa,KAAKr8L,KAAK,KAAO,IAChGm8L,GAAU,IAAME,GAAc,IAAME,GACpCJ,GAAU,IAAMK,GAtBD,mDADA,mDA0Bfb,GACAkB,IACA78L,KAAK,KAAM,KAGTm9L,GAAe/tH,OAAO,IAAMgtH,GAAQrB,GAAiBC,GAAeK,GAAa,KAGjF+B,GAAmB,qEAGnBC,GAAe,CACjB,QAAS,SAAU,WAAY,OAAQ,QAAS,eAAgB,eAChE,WAAY,YAAa,aAAc,aAAc,MAAO,OAAQ,SACpE,UAAW,SAAU,MAAO,SAAU,SAAU,YAAa,aAC7D,oBAAqB,cAAe,cAAe,UACnD,IAAK,eAAgB,WAAY,WAAY,cAI3CC,IAAmB,EAGnBC,GAAiB,CAAC,EACtBA,GAAehF,GAAcgF,GAAe/E,GAC5C+E,GAAe9E,GAAW8E,GAAe7E,GACzC6E,GAAe5E,GAAY4E,GAAe3E,GAC1C2E,GAAe1E,GAAmB0E,GAAezE,GACjDyE,GAAexE,IAAa,EAC5BwE,GAAelG,GAAWkG,GAAejG,GACzCiG,GAAelF,GAAkBkF,GAAehG,GAChDgG,GAAejF,GAAeiF,GAAe/F,GAC7C+F,GAAe9F,GAAY8F,GAAe7F,GAC1C6F,GAAe3F,GAAU2F,GAAe1F,GACxC0F,GAAezF,GAAayF,GAAevF,GAC3CuF,GAAetF,GAAUsF,GAAerF,GACxCqF,GAAenF,IAAc,EAG7B,IAAIoF,GAAgB,CAAC,EACrBA,GAAcnG,GAAWmG,GAAclG,GACvCkG,GAAcnF,GAAkBmF,GAAclF,GAC9CkF,GAAcjG,GAAWiG,GAAchG,GACvCgG,GAAcjF,GAAciF,GAAchF,GAC1CgF,GAAc/E,GAAW+E,GAAc9E,GACvC8E,GAAc7E,GAAY6E,GAAc5F,GACxC4F,GAAc3F,GAAa2F,GAAc1F,GACzC0F,GAAcxF,GAAawF,GAAcvF,GACzCuF,GAActF,GAAasF,GAAcrF,GACzCqF,GAAc5E,GAAY4E,GAAc3E,GACxC2E,GAAc1E,GAAa0E,GAAczE,IAAa,EACtDyE,GAAc/F,GAAY+F,GAAc9F,GACxC8F,GAAcpF,IAAc,EAG5B,IA4EIqF,GAAgB,CAClB,KAAM,KACN,IAAK,IACL,KAAM,IACN,KAAM,IACN,SAAU,QACV,SAAU,SAIRC,GAAiBpnK,WACjBqnK,GAAe3xK,SAGf4xK,GAA8B,iBAAV,EAAAh4J,GAAsB,EAAAA,GAAU,EAAAA,EAAOh9B,SAAWA,QAAU,EAAAg9B,EAGhFi4J,GAA0B,iBAARtiL,MAAoBA,MAAQA,KAAK3S,SAAWA,QAAU2S,KAGxE6hC,GAAOwgJ,IAAcC,IAAY97K,SAAS,cAATA,GAGjC+7K,GAA4C7/H,IAAYA,EAAQmM,UAAYnM,EAG5E8/H,GAAaD,IAA4Ct/H,IAAWA,EAAO4L,UAAY5L,EAGvFR,GAAgB+/H,IAAcA,GAAW9/H,UAAY6/H,GAGrDE,GAAchgI,IAAiB4/H,GAAW5mJ,QAG1CinJ,GAAY,WACd,IAIE,OAFYF,IAAcA,GAAWG,SAAWH,GAAWG,QAAQ,QAAQ5tH,OAOpE0tH,IAAeA,GAAYh/K,SAAWg/K,GAAYh/K,QAAQ,OACnE,CAAE,MAAO2xB,GAAI,CACf,CAZe,GAeXwtJ,GAAoBF,IAAYA,GAASG,cACzCC,GAAaJ,IAAYA,GAASK,OAClCC,GAAYN,IAAYA,GAAS9wD,MACjCqxD,GAAeP,IAAYA,GAASQ,SACpCC,GAAYT,IAAYA,GAASU,MACjCC,GAAmBX,IAAYA,GAASY,aAc5C,SAASt5K,GAAMgH,EAAM2mB,EAAStrC,GAC5B,OAAQA,EAAKD,QACX,KAAK,EAAG,OAAO4kB,EAAK/Q,KAAK03B,GACzB,KAAK,EAAG,OAAO3mB,EAAK/Q,KAAK03B,EAAStrC,EAAK,IACvC,KAAK,EAAG,OAAO2kB,EAAK/Q,KAAK03B,EAAStrC,EAAK,GAAIA,EAAK,IAChD,KAAK,EAAG,OAAO2kB,EAAK/Q,KAAK03B,EAAStrC,EAAK,GAAIA,EAAK,GAAIA,EAAK,IAE3D,OAAO2kB,EAAKhH,MAAM2tB,EAAStrC,EAC7B,CAYA,SAASk3L,GAAgB7gL,EAAO2vI,EAAQmxC,EAAUC,GAIhD,IAHA,IAAIn0L,GAAS,EACTlD,EAAkB,MAATsW,EAAgB,EAAIA,EAAMtW,SAE9BkD,EAAQlD,GAAQ,CACvB,IAAI6H,EAAQyO,EAAMpT,GAClB+iJ,EAAOoxC,EAAaxvL,EAAOuvL,EAASvvL,GAAQyO,EAC9C,CACA,OAAO+gL,CACT,CAWA,SAASC,GAAUhhL,EAAO8gL,GAIxB,IAHA,IAAIl0L,GAAS,EACTlD,EAAkB,MAATsW,EAAgB,EAAIA,EAAMtW,SAE9BkD,EAAQlD,IAC8B,IAAzCo3L,EAAS9gL,EAAMpT,GAAQA,EAAOoT,KAIpC,OAAOA,CACT,CAWA,SAASihL,GAAejhL,EAAO8gL,GAG7B,IAFA,IAAIp3L,EAAkB,MAATsW,EAAgB,EAAIA,EAAMtW,OAEhCA,MAC0C,IAA3Co3L,EAAS9gL,EAAMtW,GAASA,EAAQsW,KAItC,OAAOA,CACT,CAYA,SAASkhL,GAAWlhL,EAAOg1B,GAIzB,IAHA,IAAIpoC,GAAS,EACTlD,EAAkB,MAATsW,EAAgB,EAAIA,EAAMtW,SAE9BkD,EAAQlD,GACf,IAAKsrC,EAAUh1B,EAAMpT,GAAQA,EAAOoT,GAClC,OAAO,EAGX,OAAO,CACT,CAWA,SAASmhL,GAAYnhL,EAAOg1B,GAM1B,IALA,IAAIpoC,GAAS,EACTlD,EAAkB,MAATsW,EAAgB,EAAIA,EAAMtW,OACnC03L,EAAW,EACX74L,EAAS,KAEJqE,EAAQlD,GAAQ,CACvB,IAAI6H,EAAQyO,EAAMpT,GACdooC,EAAUzjC,EAAO3E,EAAOoT,KAC1BzX,EAAO64L,KAAc7vL,EAEzB,CACA,OAAOhJ,CACT,CAWA,SAAS84L,GAAcrhL,EAAOzO,GAE5B,QADsB,MAATyO,IAAoBA,EAAMtW,SACpB43L,GAAYthL,EAAOzO,EAAO,IAAM,CACrD,CAWA,SAASgwL,GAAkBvhL,EAAOzO,EAAOiwL,GAIvC,IAHA,IAAI50L,GAAS,EACTlD,EAAkB,MAATsW,EAAgB,EAAIA,EAAMtW,SAE9BkD,EAAQlD,GACf,GAAI83L,EAAWjwL,EAAOyO,EAAMpT,IAC1B,OAAO,EAGX,OAAO,CACT,CAWA,SAAS60L,GAASzhL,EAAO8gL,GAKvB,IAJA,IAAIl0L,GAAS,EACTlD,EAAkB,MAATsW,EAAgB,EAAIA,EAAMtW,OACnCnB,EAASqB,MAAMF,KAEVkD,EAAQlD,GACfnB,EAAOqE,GAASk0L,EAAS9gL,EAAMpT,GAAQA,EAAOoT,GAEhD,OAAOzX,CACT,CAUA,SAASktJ,GAAUz1I,EAAOsR,GAKxB,IAJA,IAAI1kB,GAAS,EACTlD,EAAS4nB,EAAO5nB,OAChB2J,EAAS2M,EAAMtW,SAEVkD,EAAQlD,GACfsW,EAAM3M,EAASzG,GAAS0kB,EAAO1kB,GAEjC,OAAOoT,CACT,CAcA,SAAS0hL,GAAY1hL,EAAO8gL,EAAUC,EAAaY,GACjD,IAAI/0L,GAAS,EACTlD,EAAkB,MAATsW,EAAgB,EAAIA,EAAMtW,OAKvC,IAHIi4L,GAAaj4L,IACfq3L,EAAc/gL,IAAQpT,MAEfA,EAAQlD,GACfq3L,EAAcD,EAASC,EAAa/gL,EAAMpT,GAAQA,EAAOoT,GAE3D,OAAO+gL,CACT,CAcA,SAASa,GAAiB5hL,EAAO8gL,EAAUC,EAAaY,GACtD,IAAIj4L,EAAkB,MAATsW,EAAgB,EAAIA,EAAMtW,OAIvC,IAHIi4L,GAAaj4L,IACfq3L,EAAc/gL,IAAQtW,IAEjBA,KACLq3L,EAAcD,EAASC,EAAa/gL,EAAMtW,GAASA,EAAQsW,GAE7D,OAAO+gL,CACT,CAYA,SAASc,GAAU7hL,EAAOg1B,GAIxB,IAHA,IAAIpoC,GAAS,EACTlD,EAAkB,MAATsW,EAAgB,EAAIA,EAAMtW,SAE9BkD,EAAQlD,GACf,GAAIsrC,EAAUh1B,EAAMpT,GAAQA,EAAOoT,GACjC,OAAO,EAGX,OAAO,CACT,CASA,IAAI8hL,GAAYC,GAAa,UAmC7B,SAASC,GAAYr6K,EAAYqtB,EAAWitJ,GAC1C,IAAI15L,EAOJ,OANA05L,EAASt6K,GAAY,SAASpW,EAAOvF,EAAK2b,GACxC,GAAIqtB,EAAUzjC,EAAOvF,EAAK2b,GAExB,OADApf,EAASyD,GACF,CAEX,IACOzD,CACT,CAaA,SAAS25L,GAAcliL,EAAOg1B,EAAWg2G,EAAWm3C,GAIlD,IAHA,IAAIz4L,EAASsW,EAAMtW,OACfkD,EAAQo+I,GAAam3C,EAAY,GAAK,GAElCA,EAAYv1L,MAAYA,EAAQlD,GACtC,GAAIsrC,EAAUh1B,EAAMpT,GAAQA,EAAOoT,GACjC,OAAOpT,EAGX,OAAQ,CACV,CAWA,SAAS00L,GAAYthL,EAAOzO,EAAOy5I,GACjC,OAAOz5I,GAAUA,EAidnB,SAAuByO,EAAOzO,EAAOy5I,GAInC,IAHA,IAAIp+I,EAAQo+I,EAAY,EACpBthJ,EAASsW,EAAMtW,SAEVkD,EAAQlD,GACf,GAAIsW,EAAMpT,KAAW2E,EACnB,OAAO3E,EAGX,OAAQ,CACV,CA1dMw1L,CAAcpiL,EAAOzO,EAAOy5I,GAC5Bk3C,GAAcliL,EAAOqiL,GAAWr3C,EACtC,CAYA,SAASs3C,GAAgBtiL,EAAOzO,EAAOy5I,EAAWw2C,GAIhD,IAHA,IAAI50L,EAAQo+I,EAAY,EACpBthJ,EAASsW,EAAMtW,SAEVkD,EAAQlD,GACf,GAAI83L,EAAWxhL,EAAMpT,GAAQ2E,GAC3B,OAAO3E,EAGX,OAAQ,CACV,CASA,SAASy1L,GAAU9wL,GACjB,OAAOA,GAAUA,CACnB,CAWA,SAASgxL,GAASviL,EAAO8gL,GACvB,IAAIp3L,EAAkB,MAATsW,EAAgB,EAAIA,EAAMtW,OACvC,OAAOA,EAAU84L,GAAQxiL,EAAO8gL,GAAYp3L,EAAUuvL,CACxD,CASA,SAAS8I,GAAa/1L,GACpB,OAAO,SAASoc,GACd,OAAiB,MAAVA,EAAiBjb,EAAYib,EAAOpc,EAC7C,CACF,CASA,SAASy2L,GAAer6K,GACtB,OAAO,SAASpc,GACd,OAAiB,MAAVoc,EAAiBjb,EAAYib,EAAOpc,EAC7C,CACF,CAeA,SAAS02L,GAAW/6K,EAAYm5K,EAAUC,EAAaY,EAAWM,GAMhE,OALAA,EAASt6K,GAAY,SAASpW,EAAO3E,EAAO+a,GAC1Co5K,EAAcY,GACTA,GAAY,EAAOpwL,GACpBuvL,EAASC,EAAaxvL,EAAO3E,EAAO+a,EAC1C,IACOo5K,CACT,CA+BA,SAASyB,GAAQxiL,EAAO8gL,GAKtB,IAJA,IAAIv4L,EACAqE,GAAS,EACTlD,EAASsW,EAAMtW,SAEVkD,EAAQlD,GAAQ,CACvB,IAAIkC,EAAUk1L,EAAS9gL,EAAMpT,IACzBhB,IAAYuB,IACd5E,EAASA,IAAW4E,EAAYvB,EAAWrD,EAASqD,EAExD,CACA,OAAOrD,CACT,CAWA,SAASo6L,GAAUrtJ,EAAGwrJ,GAIpB,IAHA,IAAIl0L,GAAS,EACTrE,EAASqB,MAAM0rC,KAEV1oC,EAAQ0oC,GACf/sC,EAAOqE,GAASk0L,EAASl0L,GAE3B,OAAOrE,CACT,CAwBA,SAASq6L,GAASvxH,GAChB,OAAOA,EACHA,EAAO35D,MAAM,EAAGmrL,GAAgBxxH,GAAU,GAAGzhE,QAAQisL,GAAa,IAClExqH,CACN,CASA,SAASyxH,GAAUx0K,GACjB,OAAO,SAAS/c,GACd,OAAO+c,EAAK/c,EACd,CACF,CAYA,SAASwxL,GAAW36K,EAAQ9L,GAC1B,OAAOmlL,GAASnlL,GAAO,SAAStQ,GAC9B,OAAOoc,EAAOpc,EAChB,GACF,CAUA,SAASg3L,GAAShwK,EAAOhnB,GACvB,OAAOgnB,EAAMhqB,IAAIgD,EACnB,CAWA,SAASi3L,GAAgBC,EAAYC,GAInC,IAHA,IAAIv2L,GAAS,EACTlD,EAASw5L,EAAWx5L,SAEfkD,EAAQlD,GAAU43L,GAAY6B,EAAYD,EAAWt2L,GAAQ,IAAM,IAC5E,OAAOA,CACT,CAWA,SAASw2L,GAAcF,EAAYC,GAGjC,IAFA,IAAIv2L,EAAQs2L,EAAWx5L,OAEhBkD,KAAW00L,GAAY6B,EAAYD,EAAWt2L,GAAQ,IAAM,IACnE,OAAOA,CACT,CA8BA,IAAIy2L,GAAeZ,GAjxBG,CAEpB,EAAQ,IAAM,EAAQ,IAAK,EAAQ,IAAK,EAAQ,IAAK,EAAQ,IAAK,EAAQ,IAC1E,EAAQ,IAAM,EAAQ,IAAK,EAAQ,IAAK,EAAQ,IAAK,EAAQ,IAAK,EAAQ,IAC1E,EAAQ,IAAM,EAAQ,IACtB,EAAQ,IAAM,EAAQ,IACtB,EAAQ,IAAM,EAAQ,IAAK,EAAQ,IAAK,EAAQ,IAChD,EAAQ,IAAM,EAAQ,IAAK,EAAQ,IAAK,EAAQ,IAChD,EAAQ,IAAM,EAAQ,IAAK,EAAQ,IAAK,EAAQ,IAChD,EAAQ,IAAM,EAAQ,IAAK,EAAQ,IAAK,EAAQ,IAChD,EAAQ,IAAM,EAAQ,IACtB,EAAQ,IAAM,EAAQ,IAAK,EAAQ,IAAK,EAAQ,IAAK,EAAQ,IAAK,EAAQ,IAC1E,EAAQ,IAAM,EAAQ,IAAK,EAAQ,IAAK,EAAQ,IAAK,EAAQ,IAAK,EAAQ,IAC1E,EAAQ,IAAM,EAAQ,IAAK,EAAQ,IAAK,EAAQ,IAChD,EAAQ,IAAM,EAAQ,IAAK,EAAQ,IAAK,EAAQ,IAChD,EAAQ,IAAM,EAAQ,IAAK,EAAQ,IACnC,EAAQ,KAAM,EAAQ,KACtB,EAAQ,KAAM,EAAQ,KACtB,EAAQ,KAER,EAAU,IAAM,EAAU,IAAK,EAAU,IACzC,EAAU,IAAM,EAAU,IAAK,EAAU,IACzC,EAAU,IAAM,EAAU,IAAK,EAAU,IAAK,EAAU,IACxD,EAAU,IAAM,EAAU,IAAK,EAAU,IAAK,EAAU,IACxD,EAAU,IAAM,EAAU,IAAK,EAAU,IAAK,EAAU,IACxD,EAAU,IAAM,EAAU,IAAK,EAAU,IAAK,EAAU,IAAK,EAAU,IACvE,EAAU,IAAM,EAAU,IAAK,EAAU,IAAK,EAAU,IAAK,EAAU,IACvE,EAAU,IAAM,EAAU,IAAK,EAAU,IAAK,EAAU,IACxD,EAAU,IAAM,EAAU,IAAK,EAAU,IAAK,EAAU,IACxD,EAAU,IAAM,EAAU,IAAK,EAAU,IAAK,EAAU,IACxD,EAAU,IAAM,EAAU,IAAK,EAAU,IAAK,EAAU,IAAK,EAAU,IACvE,EAAU,IAAM,EAAU,IAAK,EAAU,IAAK,EAAU,IAAK,EAAU,IACvE,EAAU,IAAM,EAAU,IAC1B,EAAU,IAAM,EAAU,IAAK,EAAU,IACzC,EAAU,IAAM,EAAU,IAAK,EAAU,IAAK,EAAU,IAAK,EAAU,IACvE,EAAU,IAAM,EAAU,IAAK,EAAU,IAAK,EAAU,IAAK,EAAU,IACvE,EAAU,IAAM,EAAU,IAAK,EAAU,IAAK,EAAU,IACxD,EAAU,IAAM,EAAU,IAAK,EAAU,IAAK,EAAU,IACxD,EAAU,IAAM,EAAU,IAAK,EAAU,IACzC,EAAU,IAAM,EAAU,IAAK,EAAU,IACzC,EAAU,IAAM,EAAU,IAAK,EAAU,IACzC,EAAU,IAAM,EAAU,IAAK,EAAU,IACzC,EAAU,IAAM,EAAU,IAAK,EAAU,IAAK,EAAU,IACxD,EAAU,IAAM,EAAU,IAAK,EAAU,IAAK,EAAU,IACxD,EAAU,IAAM,EAAU,IAAK,EAAU,IACzC,EAAU,IAAM,EAAU,IAAK,EAAU,IACzC,EAAU,IAAM,EAAU,IAAK,EAAU,IAAK,EAAU,IAAK,EAAU,IAAK,EAAU,IACtF,EAAU,IAAM,EAAU,IAAK,EAAU,IAAK,EAAU,IAAK,EAAU,IAAK,EAAU,IACtF,EAAU,IAAM,EAAU,IAC1B,EAAU,IAAM,EAAU,IAAK,EAAU,IACzC,EAAU,IAAM,EAAU,IAAK,EAAU,IACzC,EAAU,IAAM,EAAU,IAAK,EAAU,IACzC,EAAU,KAAM,EAAU,KAC1B,EAAU,KAAM,EAAU,KAC1B,EAAU,KAAM,EAAU,MAouBxBa,GAAiBb,GAhuBH,CAChB,IAAK,QACL,IAAK,OACL,IAAK,OACL,IAAK,SACL,IAAK,UAouBP,SAASc,GAAiBC,GACxB,MAAO,KAAOhE,GAAcgE,EAC9B,CAqBA,SAASC,GAAWpyH,GAClB,OAAO6tH,GAAah9L,KAAKmvE,EAC3B,CAqCA,SAASqyH,GAAW/hM,GAClB,IAAIiL,GAAS,EACTrE,EAASqB,MAAMjI,EAAIgnB,MAKvB,OAHAhnB,EAAImH,SAAQ,SAASyI,EAAOvF,GAC1BzD,IAASqE,GAAS,CAACZ,EAAKuF,EAC1B,IACOhJ,CACT,CAUA,SAASo7L,GAAQr1K,EAAMvnB,GACrB,OAAO,SAASivC,GACd,OAAO1nB,EAAKvnB,EAAUivC,GACxB,CACF,CAWA,SAAS4tJ,GAAe5jL,EAAO6jL,GAM7B,IALA,IAAIj3L,GAAS,EACTlD,EAASsW,EAAMtW,OACf03L,EAAW,EACX74L,EAAS,KAEJqE,EAAQlD,GAAQ,CACvB,IAAI6H,EAAQyO,EAAMpT,GACd2E,IAAUsyL,GAAetyL,IAAUqnL,IACrC54K,EAAMpT,GAASgsL,EACfrwL,EAAO64L,KAAcx0L,EAEzB,CACA,OAAOrE,CACT,CASA,SAASu7L,GAAW16L,GAClB,IAAIwD,GAAS,EACTrE,EAASqB,MAAMR,EAAIuf,MAKvB,OAHAvf,EAAIN,SAAQ,SAASyI,GACnBhJ,IAASqE,GAAS2E,CACpB,IACOhJ,CACT,CASA,SAASw7L,GAAW36L,GAClB,IAAIwD,GAAS,EACTrE,EAASqB,MAAMR,EAAIuf,MAKvB,OAHAvf,EAAIN,SAAQ,SAASyI,GACnBhJ,IAASqE,GAAS,CAAC2E,EAAOA,EAC5B,IACOhJ,CACT,CAmDA,SAASy7L,GAAW3yH,GAClB,OAAOoyH,GAAWpyH,GAiDpB,SAAqBA,GAEnB,IADA,IAAI9oE,EAASy2L,GAAUhrJ,UAAY,EAC5BgrJ,GAAU98L,KAAKmvE,MAClB9oE,EAEJ,OAAOA,CACT,CAtDM07L,CAAY5yH,GACZywH,GAAUzwH,EAChB,CASA,SAAS6yH,GAAc7yH,GACrB,OAAOoyH,GAAWpyH,GAmDpB,SAAwBA,GACtB,OAAOA,EAAOlpB,MAAM62I,KAAc,EACpC,CApDMmF,CAAe9yH,GA7kBrB,SAAsBA,GACpB,OAAOA,EAAO7jE,MAAM,GACtB,CA4kBM42L,CAAa/yH,EACnB,CAUA,SAASwxH,GAAgBxxH,GAGvB,IAFA,IAAIzkE,EAAQykE,EAAO3nE,OAEZkD,KAAWkvL,GAAa55L,KAAKmvE,EAAOlzD,OAAOvR,MAClD,OAAOA,CACT,CASA,IAAIy3L,GAAmB5B,GA38BH,CAClB,QAAS,IACT,OAAQ,IACR,OAAQ,IACR,SAAU,IACV,QAAS,MAk4gBPrkL,GAt3ee,SAAUkmL,EAAahjL,GAIxC,IA6BMqwB,EA7BF/nC,GAHJ0X,EAAqB,MAAXA,EAAkB69B,GAAO/gC,GAAEg9H,SAASj8F,GAAKx0C,SAAU2W,EAASlD,GAAEmmL,KAAKplJ,GAAMigJ,MAG/Dx1L,MAChBo+D,GAAO1mD,EAAQ0mD,KACfz9C,GAAQjJ,EAAQiJ,MAChBzG,GAAWxC,EAAQwC,SACnB5iB,GAAOogB,EAAQpgB,KACfyJ,GAAS2W,EAAQ3W,OACjBwmE,GAAS7vD,EAAQ6vD,OACjBrgD,GAASxP,EAAQwP,OACjBlT,GAAY0D,EAAQ1D,UAGpB2L,GAAa3f,EAAMmT,UACnBynL,GAAY1gL,GAAS/G,UACrB0nL,GAAc95L,GAAOoS,UAGrB2nL,GAAapjL,EAAQ,sBAGrBqjL,GAAeH,GAAU/jM,SAGzBqO,GAAiB21L,GAAY31L,eAG7B81L,GAAY,EAGZC,IACElzJ,EAAM,SAAS9P,KAAK6iK,IAAcA,GAAW34L,MAAQ24L,GAAW34L,KAAK0kJ,UAAY,KACvE,iBAAmB9+G,EAAO,GAQtCmzJ,GAAuBL,GAAYhkM,SAGnCskM,GAAmBJ,GAAapnL,KAAK5S,IAGrCq6L,GAAU7lJ,GAAK/gC,EAGf6mL,GAAa9zH,GAAO,IACtBwzH,GAAapnL,KAAKzO,IAAgBc,QAAQ+rL,GAAc,QACvD/rL,QAAQ,yDAA0D,SAAW,KAI5Es1L,GAASnlI,GAAgBz+C,EAAQ4jL,OAAS/3L,EAC1C8P,GAASqE,EAAQrE,OACjBse,GAAaja,EAAQia,WACrB4pK,GAAcD,GAASA,GAAOC,YAAch4L,EAC5Ci4L,GAAezB,GAAQh5L,GAAO81C,eAAgB91C,IAC9C06L,GAAe16L,GAAOkT,OACtBijB,GAAuB2jK,GAAY3jK,qBACnC5f,GAASqI,GAAWrI,OACpBokL,GAAmBroL,GAASA,GAAOsoL,mBAAqBp4L,EACxDq4L,GAAcvoL,GAASA,GAAOC,SAAW/P,EACzCs4L,GAAiBxoL,GAASA,GAAOozB,YAAcljC,EAE/CwP,GAAkB,WACpB,IACE,IAAI2R,EAAOo3K,GAAU/6L,GAAQ,kBAE7B,OADA2jB,EAAK,CAAC,EAAG,GAAI,CAAC,GACPA,CACT,CAAE,MAAOokB,GAAI,CACf,CANqB,GASjBizJ,GAAkBrkL,EAAQklE,eAAiBrnC,GAAKqnC,cAAgBllE,EAAQklE,aACxEo/G,GAAS59H,IAAQA,GAAKC,MAAQ9oB,GAAK6oB,KAAKC,KAAOD,GAAKC,IACpD49H,GAAgBvkL,EAAQwe,aAAeqf,GAAKrf,YAAcxe,EAAQwe,WAGlEgmK,GAAa5kM,GAAKkzC,KAClB2xJ,GAAc7kM,GAAK6yC,MACnBiyJ,GAAmBr7L,GAAOkrC,sBAC1BowJ,GAAiBf,GAASA,GAAOgB,SAAW/4L,EAC5Cg5L,GAAiB7kL,EAAQsyB,SACzBwyJ,GAAa78K,GAAWxnB,KACxBskM,GAAa1C,GAAQh5L,GAAOoB,KAAMpB,IAClC27L,GAAYplM,GAAKC,IACjBolM,GAAYrlM,GAAKE,IACjBolM,GAAYx+H,GAAKC,IACjBw+H,GAAiBnlL,EAAQyM,SACzB24K,GAAexlM,GAAK0vC,OACpB+1J,GAAgBp9K,GAAWhE,QAG3BugJ,GAAW4/B,GAAUpkL,EAAS,YAC9BlZ,GAAMs9L,GAAUpkL,EAAS,OACzBrU,GAAUy4L,GAAUpkL,EAAS,WAC7BhZ,GAAMo9L,GAAUpkL,EAAS,OACzBq2B,GAAU+tJ,GAAUpkL,EAAS,WAC7BslL,GAAelB,GAAU/6L,GAAQ,UAGjCk8L,GAAUlvJ,IAAW,IAAIA,GAGzBmvJ,GAAY,CAAC,EAGbC,GAAqBC,GAASlhC,IAC9BmhC,GAAgBD,GAAS5+L,IACzB8+L,GAAoBF,GAAS/5L,IAC7Bk6L,GAAgBH,GAAS1+L,IACzB8+L,GAAoBJ,GAASrvJ,IAG7B0vJ,GAAcpqL,GAASA,GAAOF,UAAY5P,EAC1Cm6L,GAAgBD,GAAcA,GAAY/uD,QAAUnrI,EACpDo6L,GAAiBF,GAAcA,GAAY5mM,SAAW0M,EAyH1D,SAASq6L,GAAOj2L,GACd,GAAIk2L,GAAal2L,KAAWuc,GAAQvc,MAAYA,aAAiBm2L,IAAc,CAC7E,GAAIn2L,aAAiBo2L,GACnB,OAAOp2L,EAET,GAAIzC,GAAeyO,KAAKhM,EAAO,eAC7B,OAAOq2L,GAAar2L,EAExB,CACA,OAAO,IAAIo2L,GAAcp2L,EAC3B,CAUA,IAAIs2L,GAAc,WAChB,SAASz/K,IAAU,CACnB,OAAO,SAASyT,GACd,IAAK0oC,GAAS1oC,GACZ,MAAO,CAAC,EAEV,GAAIwpK,GACF,OAAOA,GAAaxpK,GAEtBzT,EAAOrL,UAAY8e,EACnB,IAAItzB,EAAS,IAAI6f,EAEjB,OADAA,EAAOrL,UAAY5P,EACZ5E,CACT,CACF,CAdiB,GAqBjB,SAASu/L,KAET,CASA,SAASH,GAAcp2L,EAAOw2L,GAC5BxoL,KAAKyoL,YAAcz2L,EACnBgO,KAAK0oL,YAAc,GACnB1oL,KAAK2oL,YAAcH,EACnBxoL,KAAK4oL,UAAY,EACjB5oL,KAAK6oL,WAAaj7L,CACpB,CA+EA,SAASu6L,GAAYn2L,GACnBgO,KAAKyoL,YAAcz2L,EACnBgO,KAAK0oL,YAAc,GACnB1oL,KAAK8oL,QAAU,EACf9oL,KAAK+oL,cAAe,EACpB/oL,KAAKgpL,cAAgB,GACrBhpL,KAAKipL,cAAgBtP,EACrB35K,KAAKkpL,UAAY,EACnB,CA+GA,SAASC,GAAKhgL,GACZ,IAAI9b,GAAS,EACTlD,EAAoB,MAAXgf,EAAkB,EAAIA,EAAQhf,OAG3C,IADA6V,KAAKwc,UACInvB,EAAQlD,GAAQ,CACvB,IAAI+zB,EAAQ/U,EAAQ9b,GACpB2S,KAAKnW,IAAIq0B,EAAM,GAAIA,EAAM,GAC3B,CACF,CA+FA,SAASkrK,GAAUjgL,GACjB,IAAI9b,GAAS,EACTlD,EAAoB,MAAXgf,EAAkB,EAAIA,EAAQhf,OAG3C,IADA6V,KAAKwc,UACInvB,EAAQlD,GAAQ,CACvB,IAAI+zB,EAAQ/U,EAAQ9b,GACpB2S,KAAKnW,IAAIq0B,EAAM,GAAIA,EAAM,GAC3B,CACF,CA4GA,SAASmrK,GAASlgL,GAChB,IAAI9b,GAAS,EACTlD,EAAoB,MAAXgf,EAAkB,EAAIA,EAAQhf,OAG3C,IADA6V,KAAKwc,UACInvB,EAAQlD,GAAQ,CACvB,IAAI+zB,EAAQ/U,EAAQ9b,GACpB2S,KAAKnW,IAAIq0B,EAAM,GAAIA,EAAM,GAC3B,CACF,CA+FA,SAASorK,GAASv3K,GAChB,IAAI1kB,GAAS,EACTlD,EAAmB,MAAV4nB,EAAiB,EAAIA,EAAO5nB,OAGzC,IADA6V,KAAKupL,SAAW,IAAIF,KACXh8L,EAAQlD,GACf6V,KAAK7W,IAAI4oB,EAAO1kB,GAEpB,CA2CA,SAASm8L,GAAMrgL,GACb,IAAI5c,EAAOyT,KAAKupL,SAAW,IAAIH,GAAUjgL,GACzCnJ,KAAKoJ,KAAO7c,EAAK6c,IACnB,CAoGA,SAASqgL,GAAcz3L,EAAO03L,GAC5B,IAAIC,EAAQp7K,GAAQvc,GAChB43L,GAASD,GAASE,GAAY73L,GAC9B83L,GAAUH,IAAUC,GAASjD,GAAS30L,GACtC+3L,GAAUJ,IAAUC,IAAUE,GAAUzI,GAAarvL,GACrDg4L,EAAcL,GAASC,GAASE,GAAUC,EAC1C/gM,EAASghM,EAAc5G,GAAUpxL,EAAM7H,OAAQonB,IAAU,GACzDpnB,EAASnB,EAAOmB,OAEpB,IAAK,IAAIsC,KAAOuF,GACT03L,IAAan6L,GAAeyO,KAAKhM,EAAOvF,IACvCu9L,IAEQ,UAAPv9L,GAECq9L,IAAkB,UAAPr9L,GAA0B,UAAPA,IAE9Bs9L,IAAkB,UAAPt9L,GAA0B,cAAPA,GAA8B,cAAPA,IAEtDw9L,GAAQx9L,EAAKtC,KAElBnB,EAAOY,KAAK6C,GAGhB,OAAOzD,CACT,CASA,SAASkhM,GAAYzpL,GACnB,IAAItW,EAASsW,EAAMtW,OACnB,OAAOA,EAASsW,EAAM0pL,GAAW,EAAGhgM,EAAS,IAAMyD,CACrD,CAUA,SAASw8L,GAAgB3pL,EAAOs1B,GAC9B,OAAOs0J,GAAYC,GAAU7pL,GAAQ8pL,GAAUx0J,EAAG,EAAGt1B,EAAMtW,QAC7D,CASA,SAASqgM,GAAa/pL,GACpB,OAAO4pL,GAAYC,GAAU7pL,GAC/B,CAWA,SAASgqL,GAAiB5hL,EAAQpc,EAAKuF,IAChCA,IAAUpE,IAAck3I,GAAGj8H,EAAOpc,GAAMuF,IACxCA,IAAUpE,KAAenB,KAAOoc,KACnC6hL,GAAgB7hL,EAAQpc,EAAKuF,EAEjC,CAYA,SAAS24L,GAAY9hL,EAAQpc,EAAKuF,GAChC,IAAI44L,EAAW/hL,EAAOpc,GAChB8C,GAAeyO,KAAK6K,EAAQpc,IAAQq4I,GAAG8lD,EAAU54L,KAClDA,IAAUpE,GAAenB,KAAOoc,IACnC6hL,GAAgB7hL,EAAQpc,EAAKuF,EAEjC,CAUA,SAAS64L,GAAapqL,EAAOhU,GAE3B,IADA,IAAItC,EAASsW,EAAMtW,OACZA,KACL,GAAI26I,GAAGrkI,EAAMtW,GAAQ,GAAIsC,GACvB,OAAOtC,EAGX,OAAQ,CACV,CAaA,SAAS2gM,GAAe1iL,EAAYgoI,EAAQmxC,EAAUC,GAIpD,OAHAuJ,GAAS3iL,GAAY,SAASpW,EAAOvF,EAAK2b,GACxCgoI,EAAOoxC,EAAaxvL,EAAOuvL,EAASvvL,GAAQoW,EAC9C,IACOo5K,CACT,CAWA,SAASwJ,GAAWniL,EAAQgkB,GAC1B,OAAOhkB,GAAUoiL,GAAWp+J,EAAQrgC,GAAKqgC,GAAShkB,EACpD,CAwBA,SAAS6hL,GAAgB7hL,EAAQpc,EAAKuF,GACzB,aAAPvF,GAAsB2Q,GACxBA,GAAeyL,EAAQpc,EAAK,CAC1B,cAAgB,EAChB,YAAc,EACd,MAASuF,EACT,UAAY,IAGd6W,EAAOpc,GAAOuF,CAElB,CAUA,SAASk5L,GAAOriL,EAAQkwC,GAMtB,IALA,IAAI1rD,GAAS,EACTlD,EAAS4uD,EAAM5uD,OACfnB,EAASqB,EAAMF,GACfyqK,EAAiB,MAAV/rJ,IAEFxb,EAAQlD,GACfnB,EAAOqE,GAASunK,EAAOhnK,EAAYjE,GAAIkf,EAAQkwC,EAAM1rD,IAEvD,OAAOrE,CACT,CAWA,SAASuhM,GAAUl4C,EAAQ84C,EAAOC,GAShC,OARI/4C,GAAWA,IACT+4C,IAAUx9L,IACZykJ,EAASA,GAAU+4C,EAAQ/4C,EAAS+4C,GAElCD,IAAUv9L,IACZykJ,EAASA,GAAU84C,EAAQ94C,EAAS84C,IAGjC94C,CACT,CAkBA,SAASg5C,GAAUr5L,EAAOs5L,EAASC,EAAY9+L,EAAKoc,EAAQslD,GAC1D,IAAInlE,EACAwiM,EArkFc,EAqkFLF,EACTG,EArkFc,EAqkFLH,EACTI,EArkFiB,EAqkFRJ,EAKb,GAHIC,IACFviM,EAAS6f,EAAS0iL,EAAWv5L,EAAOvF,EAAKoc,EAAQslD,GAASo9H,EAAWv5L,IAEnEhJ,IAAW4E,EACb,OAAO5E,EAET,IAAKg8D,GAAShzD,GACZ,OAAOA,EAET,IAAI23L,EAAQp7K,GAAQvc,GACpB,GAAI23L,GAEF,GADA3gM,EA68GJ,SAAwByX,GACtB,IAAItW,EAASsW,EAAMtW,OACfnB,EAAS,IAAIyX,EAAM5C,YAAY1T,GAOnC,OAJIA,GAA6B,iBAAZsW,EAAM,IAAkBlR,GAAeyO,KAAKyC,EAAO,WACtEzX,EAAOqE,MAAQoT,EAAMpT,MACrBrE,EAAOsuF,MAAQ72E,EAAM62E,OAEhBtuF,CACT,CAv9Ga2iM,CAAe35L,IACnBw5L,EACH,OAAOlB,GAAUt4L,EAAOhJ,OAErB,CACL,IAAI+nB,EAAM66K,GAAO55L,GACb65L,EAAS96K,GAAOmpK,GAAWnpK,GAAOopK,EAEtC,GAAIwM,GAAS30L,GACX,OAAO85L,GAAY95L,EAAOw5L,GAE5B,GAAIz6K,GAAOupK,GAAavpK,GAAO8oK,GAAYgS,IAAWhjL,GAEpD,GADA7f,EAAUyiM,GAAUI,EAAU,CAAC,EAAIE,GAAgB/5L,IAC9Cw5L,EACH,OAAOC,EA+nEf,SAAuB5+J,EAAQhkB,GAC7B,OAAOoiL,GAAWp+J,EAAQm/J,GAAan/J,GAAShkB,EAClD,CAhoEYojL,CAAcj6L,EAnH1B,SAAsB6W,EAAQgkB,GAC5B,OAAOhkB,GAAUoiL,GAAWp+J,EAAQq/J,GAAOr/J,GAAShkB,EACtD,CAiHiCsjL,CAAanjM,EAAQgJ,IAknEtD,SAAqB66B,EAAQhkB,GAC3B,OAAOoiL,GAAWp+J,EAAQu/J,GAAWv/J,GAAShkB,EAChD,CAnnEYwjL,CAAYr6L,EAAOg5L,GAAWhiM,EAAQgJ,QAEvC,CACL,IAAKguL,GAAcjvK,GACjB,OAAOlI,EAAS7W,EAAQ,CAAC,EAE3BhJ,EA49GN,SAAwB6f,EAAQkI,EAAKy6K,GACnC,IAzlDmBliK,EAylDfkjI,EAAO3jJ,EAAOhL,YAClB,OAAQkT,GACN,KAAK8pK,EACH,OAAOyR,GAAiBzjL,GAE1B,KAAKkxK,EACL,KAAKC,EACH,OAAO,IAAIxtB,GAAM3jJ,GAEnB,KAAKiyK,EACH,OA5nDN,SAAuByR,EAAUf,GAC/B,IAAIp5K,EAASo5K,EAASc,GAAiBC,EAASn6K,QAAUm6K,EAASn6K,OACnE,OAAO,IAAIm6K,EAAS1uL,YAAYuU,EAAQm6K,EAASC,WAAYD,EAASE,WACxE,CAynDaC,CAAc7jL,EAAQ2iL,GAE/B,KAAKzQ,EAAY,KAAKC,EACtB,KAAKC,EAAS,KAAKC,EAAU,KAAKC,EAClC,KAAKC,EAAU,KAAKC,EAAiB,KAAKC,EAAW,KAAKC,EACxD,OAAOoR,GAAgB9jL,EAAQ2iL,GAEjC,KAAKpR,EACH,OAAO,IAAI5tB,EAEb,KAAK6tB,EACL,KAAKK,EACH,OAAO,IAAIluB,EAAK3jJ,GAElB,KAAK2xK,EACH,OA/nDN,SAAqBoS,GACnB,IAAI5jM,EAAS,IAAI4jM,EAAO/uL,YAAY+uL,EAAO//J,OAAQiwJ,GAAQx6J,KAAKsqK,IAEhE,OADA5jM,EAAOyrC,UAAYm4J,EAAOn4J,UACnBzrC,CACT,CA2nDa6jM,CAAYhkL,GAErB,KAAK4xK,EACH,OAAO,IAAIjuB,EAEb,KAAKmuB,EACH,OAxnDerxJ,EAwnDIzgB,EAvnDhBk/K,GAAgB38L,GAAO28L,GAAc/pL,KAAKsrB,IAAW,CAAC,EAynD/D,CA9/GewjK,CAAe96L,EAAO+e,EAAKy6K,EACtC,CACF,CAEAr9H,IAAUA,EAAQ,IAAIq7H,IACtB,IAAIuD,EAAU5+H,EAAMxkE,IAAIqI,GACxB,GAAI+6L,EACF,OAAOA,EAET5+H,EAAMtkE,IAAImI,EAAOhJ,GAEbm4L,GAAMnvL,GACRA,EAAMzI,SAAQ,SAASyjM,GACrBhkM,EAAOG,IAAIkiM,GAAU2B,EAAU1B,EAASC,EAAYyB,EAAUh7L,EAAOm8D,GACvE,IACSwhE,GAAM39H,IACfA,EAAMzI,SAAQ,SAASyjM,EAAUvgM,GAC/BzD,EAAOa,IAAI4C,EAAK4+L,GAAU2B,EAAU1B,EAASC,EAAY9+L,EAAKuF,EAAOm8D,GACvE,IAGF,IAIIpxD,EAAQ4sL,EAAQ/7L,GAJL89L,EACVD,EAASwB,GAAeC,GACxBzB,EAASS,GAAS1/L,IAEkBwF,GASzC,OARAyvL,GAAU1kL,GAAS/K,GAAO,SAASg7L,EAAUvgM,GACvCsQ,IAEFiwL,EAAWh7L,EADXvF,EAAMugM,IAIRrC,GAAY3hM,EAAQyD,EAAK4+L,GAAU2B,EAAU1B,EAASC,EAAY9+L,EAAKuF,EAAOm8D,GAChF,IACOnlE,CACT,CAwBA,SAASmkM,GAAetkL,EAAQgkB,EAAQ9vB,GACtC,IAAI5S,EAAS4S,EAAM5S,OACnB,GAAc,MAAV0e,EACF,OAAQ1e,EAGV,IADA0e,EAASzd,GAAOyd,GACT1e,KAAU,CACf,IAAIsC,EAAMsQ,EAAM5S,GACZsrC,EAAY5I,EAAOpgC,GACnBuF,EAAQ6W,EAAOpc,GAEnB,GAAKuF,IAAUpE,KAAenB,KAAOoc,KAAa4sB,EAAUzjC,GAC1D,OAAO,CAEX,CACA,OAAO,CACT,CAYA,SAASo7L,GAAUr+K,EAAM6sJ,EAAMxxK,GAC7B,GAAmB,mBAAR2kB,EACT,MAAM,IAAI1Q,GAAU86K,GAEtB,OAAO54J,IAAW,WAAaxR,EAAKhH,MAAMna,EAAWxD,EAAO,GAAGwxK,EACjE,CAaA,SAASyxB,GAAe5sL,EAAOsR,EAAQwvK,EAAUU,GAC/C,IAAI50L,GAAS,EACTuoC,EAAWksJ,GACXwL,GAAW,EACXnjM,EAASsW,EAAMtW,OACfnB,EAAS,GACTukM,EAAex7K,EAAO5nB,OAE1B,IAAKA,EACH,OAAOnB,EAELu4L,IACFxvK,EAASmwK,GAASnwK,EAAQwxK,GAAUhC,KAElCU,GACFrsJ,EAAWosJ,GACXsL,GAAW,GAEJv7K,EAAO5nB,QAtvFG,MAuvFjByrC,EAAW6tJ,GACX6J,GAAW,EACXv7K,EAAS,IAAIu3K,GAASv3K,IAExBy7K,EACA,OAASngM,EAAQlD,GAAQ,CACvB,IAAI6H,EAAQyO,EAAMpT,GACdg5K,EAAuB,MAAZkb,EAAmBvvL,EAAQuvL,EAASvvL,GAGnD,GADAA,EAASiwL,GAAwB,IAAVjwL,EAAeA,EAAQ,EAC1Cs7L,GAAYjnB,GAAaA,EAAU,CAErC,IADA,IAAIonB,EAAcF,EACXE,KACL,GAAI17K,EAAO07K,KAAiBpnB,EAC1B,SAASmnB,EAGbxkM,EAAOY,KAAKoI,EACd,MACU4jC,EAAS7jB,EAAQs0J,EAAU4b,IACnCj5L,EAAOY,KAAKoI,EAEhB,CACA,OAAOhJ,CACT,CAlkCAi/L,GAAOyF,iBAAmB,CAQxB,OAAU3R,EAQV,SAAYC,EAQZ,YAAeC,EAQf,SAAY,GAQZ,QAAW,CAQT,EAAKgM,KAKTA,GAAOzqL,UAAY+qL,GAAW/qL,UAC9ByqL,GAAOzqL,UAAUK,YAAcoqL,GAE/BG,GAAc5qL,UAAY8qL,GAAWC,GAAW/qL,WAChD4qL,GAAc5qL,UAAUK,YAAcuqL,GAsHtCD,GAAY3qL,UAAY8qL,GAAWC,GAAW/qL,WAC9C2qL,GAAY3qL,UAAUK,YAAcsqL,GAoGpCgB,GAAK3rL,UAAUgf,MAvEf,WACExc,KAAKupL,SAAWlC,GAAeA,GAAa,MAAQ,CAAC,EACrDrnL,KAAKoJ,KAAO,CACd,EAqEA+/K,GAAK3rL,UAAkB,OAzDvB,SAAoB/Q,GAClB,IAAIzD,EAASgX,KAAKvW,IAAIgD,WAAeuT,KAAKupL,SAAS98L,GAEnD,OADAuT,KAAKoJ,MAAQpgB,EAAS,EAAI,EACnBA,CACT,EAsDAmgM,GAAK3rL,UAAU7T,IA3Cf,SAAiB8C,GACf,IAAIF,EAAOyT,KAAKupL,SAChB,GAAIlC,GAAc,CAChB,IAAIr+L,EAASuD,EAAKE,GAClB,OAAOzD,IAAWowL,EAAiBxrL,EAAY5E,CACjD,CACA,OAAOuG,GAAeyO,KAAKzR,EAAME,GAAOF,EAAKE,GAAOmB,CACtD,EAqCAu7L,GAAK3rL,UAAU/T,IA1Bf,SAAiBgD,GACf,IAAIF,EAAOyT,KAAKupL,SAChB,OAAOlC,GAAgB96L,EAAKE,KAASmB,EAAa2B,GAAeyO,KAAKzR,EAAME,EAC9E,EAwBA08L,GAAK3rL,UAAU3T,IAZf,SAAiB4C,EAAKuF,GACpB,IAAIzF,EAAOyT,KAAKupL,SAGhB,OAFAvpL,KAAKoJ,MAAQpJ,KAAKvW,IAAIgD,GAAO,EAAI,EACjCF,EAAKE,GAAQ46L,IAAgBr1L,IAAUpE,EAAawrL,EAAiBpnL,EAC9DgO,IACT,EAwHAopL,GAAU5rL,UAAUgf,MApFpB,WACExc,KAAKupL,SAAW,GAChBvpL,KAAKoJ,KAAO,CACd,EAkFAggL,GAAU5rL,UAAkB,OAvE5B,SAAyB/Q,GACvB,IAAIF,EAAOyT,KAAKupL,SACZl8L,EAAQw9L,GAAat+L,EAAME,GAE/B,QAAIY,EAAQ,IAIRA,GADYd,EAAKpC,OAAS,EAE5BoC,EAAK0d,MAELtI,GAAO3D,KAAKzR,EAAMc,EAAO,KAEzB2S,KAAKoJ,KACA,GACT,EAyDAggL,GAAU5rL,UAAU7T,IA9CpB,SAAsB8C,GACpB,IAAIF,EAAOyT,KAAKupL,SACZl8L,EAAQw9L,GAAat+L,EAAME,GAE/B,OAAOY,EAAQ,EAAIO,EAAYrB,EAAKc,GAAO,EAC7C,EA0CA+7L,GAAU5rL,UAAU/T,IA/BpB,SAAsBgD,GACpB,OAAOo+L,GAAa7qL,KAAKupL,SAAU98L,IAAQ,CAC7C,EA8BA28L,GAAU5rL,UAAU3T,IAlBpB,SAAsB4C,EAAKuF,GACzB,IAAIzF,EAAOyT,KAAKupL,SACZl8L,EAAQw9L,GAAat+L,EAAME,GAQ/B,OANIY,EAAQ,KACR2S,KAAKoJ,KACP7c,EAAK3C,KAAK,CAAC6C,EAAKuF,KAEhBzF,EAAKc,GAAO,GAAK2E,EAEZgO,IACT,EA0GAqpL,GAAS7rL,UAAUgf,MAtEnB,WACExc,KAAKoJ,KAAO,EACZpJ,KAAKupL,SAAW,CACd,KAAQ,IAAIJ,GACZ,IAAO,IAAKtgM,IAAOugM,IACnB,OAAU,IAAID,GAElB,EAgEAE,GAAS7rL,UAAkB,OArD3B,SAAwB/Q,GACtB,IAAIzD,EAAS2kM,GAAW3tL,KAAMvT,GAAa,OAAEA,GAE7C,OADAuT,KAAKoJ,MAAQpgB,EAAS,EAAI,EACnBA,CACT,EAkDAqgM,GAAS7rL,UAAU7T,IAvCnB,SAAqB8C,GACnB,OAAOkhM,GAAW3tL,KAAMvT,GAAK9C,IAAI8C,EACnC,EAsCA48L,GAAS7rL,UAAU/T,IA3BnB,SAAqBgD,GACnB,OAAOkhM,GAAW3tL,KAAMvT,GAAKhD,IAAIgD,EACnC,EA0BA48L,GAAS7rL,UAAU3T,IAdnB,SAAqB4C,EAAKuF,GACxB,IAAIzF,EAAOohM,GAAW3tL,KAAMvT,GACxB2c,EAAO7c,EAAK6c,KAIhB,OAFA7c,EAAK1C,IAAI4C,EAAKuF,GACdgO,KAAKoJ,MAAQ7c,EAAK6c,MAAQA,EAAO,EAAI,EAC9BpJ,IACT,EA0DAspL,GAAS9rL,UAAUrU,IAAMmgM,GAAS9rL,UAAU5T,KAnB5C,SAAqBoI,GAEnB,OADAgO,KAAKupL,SAAS1/L,IAAImI,EAAOonL,GAClBp5K,IACT,EAiBAspL,GAAS9rL,UAAU/T,IANnB,SAAqBuI,GACnB,OAAOgO,KAAKupL,SAAS9/L,IAAIuI,EAC3B,EAsGAw3L,GAAMhsL,UAAUgf,MA3EhB,WACExc,KAAKupL,SAAW,IAAIH,GACpBppL,KAAKoJ,KAAO,CACd,EAyEAogL,GAAMhsL,UAAkB,OA9DxB,SAAqB/Q,GACnB,IAAIF,EAAOyT,KAAKupL,SACZvgM,EAASuD,EAAa,OAAEE,GAG5B,OADAuT,KAAKoJ,KAAO7c,EAAK6c,KACVpgB,CACT,EAyDAwgM,GAAMhsL,UAAU7T,IA9ChB,SAAkB8C,GAChB,OAAOuT,KAAKupL,SAAS5/L,IAAI8C,EAC3B,EA6CA+8L,GAAMhsL,UAAU/T,IAlChB,SAAkBgD,GAChB,OAAOuT,KAAKupL,SAAS9/L,IAAIgD,EAC3B,EAiCA+8L,GAAMhsL,UAAU3T,IArBhB,SAAkB4C,EAAKuF,GACrB,IAAIzF,EAAOyT,KAAKupL,SAChB,GAAIh9L,aAAgB68L,GAAW,CAC7B,IAAI94H,EAAQ/jE,EAAKg9L,SACjB,IAAK1gM,IAAQynE,EAAMnmE,OAASyjM,IAG1B,OAFAt9H,EAAM1mE,KAAK,CAAC6C,EAAKuF,IACjBgO,KAAKoJ,OAAS7c,EAAK6c,KACZpJ,KAETzT,EAAOyT,KAAKupL,SAAW,IAAIF,GAAS/4H,EACtC,CAGA,OAFA/jE,EAAK1C,IAAI4C,EAAKuF,GACdgO,KAAKoJ,KAAO7c,EAAK6c,KACVpJ,IACT,EAqcA,IAAI+qL,GAAW8C,GAAeC,IAU1BC,GAAgBF,GAAeG,IAAiB,GAWpD,SAASC,GAAU7lL,EAAYqtB,GAC7B,IAAIzsC,GAAS,EAKb,OAJA+hM,GAAS3iL,GAAY,SAASpW,EAAO3E,EAAO+a,GAE1C,OADApf,IAAWysC,EAAUzjC,EAAO3E,EAAO+a,EAErC,IACOpf,CACT,CAYA,SAASklM,GAAaztL,EAAO8gL,EAAUU,GAIrC,IAHA,IAAI50L,GAAS,EACTlD,EAASsW,EAAMtW,SAEVkD,EAAQlD,GAAQ,CACvB,IAAI6H,EAAQyO,EAAMpT,GACdhB,EAAUk1L,EAASvvL,GAEvB,GAAe,MAAX3F,IAAoBg6K,IAAaz4K,EAC5BvB,GAAYA,IAAYimJ,GAASjmJ,GAClC41L,EAAW51L,EAASg6K,IAE1B,IAAIA,EAAWh6K,EACXrD,EAASgJ,CAEjB,CACA,OAAOhJ,CACT,CAsCA,SAASmlM,GAAW/lL,EAAYqtB,GAC9B,IAAIzsC,EAAS,GAMb,OALA+hM,GAAS3iL,GAAY,SAASpW,EAAO3E,EAAO+a,GACtCqtB,EAAUzjC,EAAO3E,EAAO+a,IAC1Bpf,EAAOY,KAAKoI,EAEhB,IACOhJ,CACT,CAaA,SAASolM,GAAY3tL,EAAOg6J,EAAOhlI,EAAW44J,EAAUrlM,GACtD,IAAIqE,GAAS,EACTlD,EAASsW,EAAMtW,OAKnB,IAHAsrC,IAAcA,EAAY64J,IAC1BtlM,IAAWA,EAAS,MAEXqE,EAAQlD,GAAQ,CACvB,IAAI6H,EAAQyO,EAAMpT,GACdotK,EAAQ,GAAKhlI,EAAUzjC,GACrByoK,EAAQ,EAEV2zB,GAAYp8L,EAAOyoK,EAAQ,EAAGhlI,EAAW44J,EAAUrlM,GAEnDktJ,GAAUltJ,EAAQgJ,GAEVq8L,IACVrlM,EAAOA,EAAOmB,QAAU6H,EAE5B,CACA,OAAOhJ,CACT,CAaA,IAAIulM,GAAUC,KAYVC,GAAeD,IAAc,GAUjC,SAASV,GAAWjlL,EAAQ04K,GAC1B,OAAO14K,GAAU0lL,GAAQ1lL,EAAQ04K,EAAU/0L,GAC7C,CAUA,SAASwhM,GAAgBnlL,EAAQ04K,GAC/B,OAAO14K,GAAU4lL,GAAa5lL,EAAQ04K,EAAU/0L,GAClD,CAWA,SAASkiM,GAAc7lL,EAAQ9L,GAC7B,OAAO6kL,GAAY7kL,GAAO,SAAStQ,GACjC,OAAOg4I,GAAW57H,EAAOpc,GAC3B,GACF,CAUA,SAASkiM,GAAQ9lL,EAAQkU,GAMvB,IAHA,IAAI1vB,EAAQ,EACRlD,GAHJ4yB,EAAO6xK,GAAS7xK,EAAMlU,IAGJ1e,OAED,MAAV0e,GAAkBxb,EAAQlD,GAC/B0e,EAASA,EAAOgmL,GAAM9xK,EAAK1vB,OAE7B,OAAQA,GAASA,GAASlD,EAAU0e,EAASjb,CAC/C,CAaA,SAASkhM,GAAejmL,EAAQkmL,EAAUC,GACxC,IAAIhmM,EAAS+lM,EAASlmL,GACtB,OAAO0F,GAAQ1F,GAAU7f,EAASktJ,GAAUltJ,EAAQgmM,EAAYnmL,GAClE,CASA,SAASomL,GAAWj9L,GAClB,OAAa,MAATA,EACKA,IAAUpE,EAn7FJ,qBARL,gBA67FFs4L,IAAkBA,MAAkB96L,GAAO4G,GA23FrD,SAAmBA,GACjB,IAAIw2J,EAAQj5J,GAAeyO,KAAKhM,EAAOk0L,IACnCn1K,EAAM/e,EAAMk0L,IAEhB,IACEl0L,EAAMk0L,IAAkBt4L,EACxB,IAAIshM,GAAW,CACjB,CAAE,MAAO/7J,GAAI,CAEb,IAAInqC,EAASu8L,GAAqBvnL,KAAKhM,GAQvC,OAPIk9L,IACE1mC,EACFx2J,EAAMk0L,IAAkBn1K,SAEjB/e,EAAMk0L,KAGVl9L,CACT,CA54FMmmM,CAAUn9L,GA+5GhB,SAAwBA,GACtB,OAAOuzL,GAAqBvnL,KAAKhM,EACnC,CAh6GMo9L,CAAep9L,EACrB,CAWA,SAASq9L,GAAOr9L,EAAOs9L,GACrB,OAAOt9L,EAAQs9L,CACjB,CAUA,SAASC,GAAQ1mL,EAAQpc,GACvB,OAAiB,MAAVoc,GAAkBtZ,GAAeyO,KAAK6K,EAAQpc,EACvD,CAUA,SAAS+iM,GAAU3mL,EAAQpc,GACzB,OAAiB,MAAVoc,GAAkBpc,KAAOrB,GAAOyd,EACzC,CAyBA,SAAS4mL,GAAiBC,EAAQnO,EAAUU,GAS1C,IARA,IAAIrsJ,EAAWqsJ,EAAaD,GAAoBF,GAC5C33L,EAASulM,EAAO,GAAGvlM,OACnBwlM,EAAYD,EAAOvlM,OACnBylM,EAAWD,EACXE,EAASxlM,EAAMslM,GACf1qF,EAAYy3B,IACZ1zI,EAAS,GAEN4mM,KAAY,CACjB,IAAInvL,EAAQivL,EAAOE,GACfA,GAAYrO,IACd9gL,EAAQyhL,GAASzhL,EAAO8iL,GAAUhC,KAEpCt8E,EAAY+hF,GAAUvmL,EAAMtW,OAAQ86G,GACpC4qF,EAAOD,IAAa3N,IAAeV,GAAap3L,GAAU,KAAOsW,EAAMtW,QAAU,KAC7E,IAAIm/L,GAASsG,GAAYnvL,GACzB7S,CACN,CACA6S,EAAQivL,EAAO,GAEf,IAAIriM,GAAS,EACTyiM,EAAOD,EAAO,GAElBrC,EACA,OAASngM,EAAQlD,GAAUnB,EAAOmB,OAAS86G,GAAW,CACpD,IAAIjzG,EAAQyO,EAAMpT,GACdg5K,EAAWkb,EAAWA,EAASvvL,GAASA,EAG5C,GADAA,EAASiwL,GAAwB,IAAVjwL,EAAeA,EAAQ,IACxC89L,EACErM,GAASqM,EAAMzpB,GACfzwI,EAAS5sC,EAAQq9K,EAAU4b,IAC5B,CAEL,IADA2N,EAAWD,IACFC,GAAU,CACjB,IAAIn8K,EAAQo8K,EAAOD,GACnB,KAAMn8K,EACEgwK,GAAShwK,EAAO4yJ,GAChBzwI,EAAS85J,EAAOE,GAAWvpB,EAAU4b,IAE3C,SAASuL,CAEb,CACIsC,GACFA,EAAKlmM,KAAKy8K,GAEZr9K,EAAOY,KAAKoI,EACd,CACF,CACA,OAAOhJ,CACT,CA8BA,SAAS+mM,GAAWlnL,EAAQkU,EAAM3yB,GAGhC,IAAI2kB,EAAiB,OADrBlG,EAASpY,GAAOoY,EADhBkU,EAAO6xK,GAAS7xK,EAAMlU,KAEMA,EAASA,EAAOgmL,GAAMx1K,GAAK0D,KACvD,OAAe,MAARhO,EAAenhB,EAAYma,GAAMgH,EAAMlG,EAAQze,EACxD,CASA,SAAS4lM,GAAgBh+L,GACvB,OAAOk2L,GAAal2L,IAAUi9L,GAAWj9L,IAAU6nL,CACrD,CAsCA,SAASoW,GAAYj+L,EAAOs9L,EAAOhE,EAASC,EAAYp9H,GACtD,OAAIn8D,IAAUs9L,IAGD,MAATt9L,GAA0B,MAATs9L,IAAmBpH,GAAal2L,KAAWk2L,GAAaoH,GACpEt9L,GAAUA,GAASs9L,GAAUA,EAmBxC,SAAyBzmL,EAAQymL,EAAOhE,EAASC,EAAY2E,EAAW/hI,GACtE,IAAIgiI,EAAW5hL,GAAQ1F,GACnBunL,EAAW7hL,GAAQ+gL,GACnBe,EAASF,EAAWrW,EAAW8R,GAAO/iL,GACtCynL,EAASF,EAAWtW,EAAW8R,GAAO0D,GAKtCiB,GAHJF,EAASA,GAAUxW,EAAUS,EAAY+V,IAGhB/V,EACrBkW,GAHJF,EAASA,GAAUzW,EAAUS,EAAYgW,IAGhBhW,EACrBmW,EAAYJ,GAAUC,EAE1B,GAAIG,GAAa9J,GAAS99K,GAAS,CACjC,IAAK89K,GAAS2I,GACZ,OAAO,EAETa,GAAW,EACXI,GAAW,CACb,CACA,GAAIE,IAAcF,EAEhB,OADApiI,IAAUA,EAAQ,IAAIq7H,IACd2G,GAAY9O,GAAax4K,GAC7B6nL,GAAY7nL,EAAQymL,EAAOhE,EAASC,EAAY2E,EAAW/hI,GA81EnE,SAAoBtlD,EAAQymL,EAAOv+K,EAAKu6K,EAASC,EAAY2E,EAAW/hI,GACtE,OAAQp9C,GACN,KAAK+pK,EACH,GAAKjyK,EAAO4jL,YAAc6C,EAAM7C,YAC3B5jL,EAAO2jL,YAAc8C,EAAM9C,WAC9B,OAAO,EAET3jL,EAASA,EAAOuJ,OAChBk9K,EAAQA,EAAMl9K,OAEhB,KAAKyoK,EACH,QAAKhyK,EAAO4jL,YAAc6C,EAAM7C,aAC3ByD,EAAU,IAAIl0K,GAAWnT,GAAS,IAAImT,GAAWszK,KAKxD,KAAKvV,EACL,KAAKC,EACL,KAAKK,EAGH,OAAOv1C,IAAIj8H,GAASymL,GAEtB,KAAKrV,EACH,OAAOpxK,EAAOzf,MAAQkmM,EAAMlmM,MAAQyf,EAAO4Q,SAAW61K,EAAM71K,QAE9D,KAAK+gK,EACL,KAAKE,EAIH,OAAO7xK,GAAWymL,EAAQ,GAE5B,KAAKlV,EACH,IAAIuW,EAAUxM,GAEhB,KAAK1J,EACH,IAAImW,EAxnLe,EAwnLHtF,EAGhB,GAFAqF,IAAYA,EAAUpM,IAElB17K,EAAOO,MAAQkmL,EAAMlmL,OAASwnL,EAChC,OAAO,EAGT,IAAI7D,EAAU5+H,EAAMxkE,IAAIkf,GACxB,GAAIkkL,EACF,OAAOA,GAAWuC,EAEpBhE,GAloLqB,EAqoLrBn9H,EAAMtkE,IAAIgf,EAAQymL,GAClB,IAAItmM,EAAS0nM,GAAYC,EAAQ9nL,GAAS8nL,EAAQrB,GAAQhE,EAASC,EAAY2E,EAAW/hI,GAE1F,OADAA,EAAc,OAAEtlD,GACT7f,EAET,KAAK2xL,EACH,GAAIoN,GACF,OAAOA,GAAc/pL,KAAK6K,IAAWk/K,GAAc/pL,KAAKsxL,GAG9D,OAAO,CACT,CA55EQuB,CAAWhoL,EAAQymL,EAAOe,EAAQ/E,EAASC,EAAY2E,EAAW/hI,GAExE,KAvvGuB,EAuvGjBm9H,GAAiC,CACrC,IAAIwF,EAAeP,GAAYhhM,GAAeyO,KAAK6K,EAAQ,eACvDkoL,EAAeP,GAAYjhM,GAAeyO,KAAKsxL,EAAO,eAE1D,GAAIwB,GAAgBC,EAAc,CAChC,IAAIC,EAAeF,EAAejoL,EAAO7W,QAAU6W,EAC/CooL,EAAeF,EAAezB,EAAMt9L,QAAUs9L,EAGlD,OADAnhI,IAAUA,EAAQ,IAAIq7H,IACf0G,EAAUc,EAAcC,EAAc3F,EAASC,EAAYp9H,EACpE,CACF,CACA,QAAKsiI,IAGLtiI,IAAUA,EAAQ,IAAIq7H,IA05ExB,SAAsB3gL,EAAQymL,EAAOhE,EAASC,EAAY2E,EAAW/hI,GACnE,IAAIyiI,EAjqLmB,EAiqLPtF,EACZ4F,EAAWhE,GAAWrkL,GACtBsoL,EAAYD,EAAS/mM,OAIzB,GAAIgnM,GAHWjE,GAAWoC,GACDnlM,SAEMymM,EAC7B,OAAO,EAGT,IADA,IAAIvjM,EAAQ8jM,EACL9jM,KAAS,CACd,IAAIZ,EAAMykM,EAAS7jM,GACnB,KAAMujM,EAAYnkM,KAAO6iM,EAAQ//L,GAAeyO,KAAKsxL,EAAO7iM,IAC1D,OAAO,CAEX,CAEA,IAAI2kM,EAAajjI,EAAMxkE,IAAIkf,GACvBwoL,EAAaljI,EAAMxkE,IAAI2lM,GAC3B,GAAI8B,GAAcC,EAChB,OAAOD,GAAc9B,GAAS+B,GAAcxoL,EAE9C,IAAI7f,GAAS,EACbmlE,EAAMtkE,IAAIgf,EAAQymL,GAClBnhI,EAAMtkE,IAAIylM,EAAOzmL,GAGjB,IADA,IAAIyoL,EAAWV,IACNvjM,EAAQ8jM,GAAW,CAE1B,IAAIvG,EAAW/hL,EADfpc,EAAMykM,EAAS7jM,IAEXkkM,EAAWjC,EAAM7iM,GAErB,GAAI8+L,EACF,IAAIiG,EAAWZ,EACXrF,EAAWgG,EAAU3G,EAAUn+L,EAAK6iM,EAAOzmL,EAAQslD,GACnDo9H,EAAWX,EAAU2G,EAAU9kM,EAAKoc,EAAQymL,EAAOnhI,GAGzD,KAAMqjI,IAAa5jM,EACVg9L,IAAa2G,GAAYrB,EAAUtF,EAAU2G,EAAUjG,EAASC,EAAYp9H,GAC7EqjI,GACD,CACLxoM,GAAS,EACT,KACF,CACAsoM,IAAaA,EAAkB,eAAP7kM,EAC1B,CACA,GAAIzD,IAAWsoM,EAAU,CACvB,IAAIG,EAAU5oL,EAAOhL,YACjB6zL,EAAUpC,EAAMzxL,YAGhB4zL,GAAWC,KACV,gBAAiB7oL,MAAU,gBAAiBymL,IACzB,mBAAXmC,GAAyBA,aAAmBA,GACjC,mBAAXC,GAAyBA,aAAmBA,IACvD1oM,GAAS,EAEb,CAGA,OAFAmlE,EAAc,OAAEtlD,GAChBslD,EAAc,OAAEmhI,GACTtmM,CACT,CAx9ES2oM,CAAa9oL,EAAQymL,EAAOhE,EAASC,EAAY2E,EAAW/hI,GACrE,CA5DSyjI,CAAgB5/L,EAAOs9L,EAAOhE,EAASC,EAAY0E,GAAa9hI,GACzE,CAkFA,SAAS0jI,GAAYhpL,EAAQgkB,EAAQilK,EAAWvG,GAC9C,IAAIl+L,EAAQykM,EAAU3nM,OAClBA,EAASkD,EACT0kM,GAAgBxG,EAEpB,GAAc,MAAV1iL,EACF,OAAQ1e,EAGV,IADA0e,EAASzd,GAAOyd,GACTxb,KAAS,CACd,IAAId,EAAOulM,EAAUzkM,GACrB,GAAK0kM,GAAgBxlM,EAAK,GAClBA,EAAK,KAAOsc,EAAOtc,EAAK,MACtBA,EAAK,KAAMsc,GAEnB,OAAO,CAEX,CACA,OAASxb,EAAQlD,GAAQ,CAEvB,IAAIsC,GADJF,EAAOulM,EAAUzkM,IACF,GACXu9L,EAAW/hL,EAAOpc,GAClBulM,EAAWzlM,EAAK,GAEpB,GAAIwlM,GAAgBxlM,EAAK,IACvB,GAAIq+L,IAAah9L,KAAenB,KAAOoc,GACrC,OAAO,MAEJ,CACL,IAAIslD,EAAQ,IAAIq7H,GAChB,GAAI+B,EACF,IAAIviM,EAASuiM,EAAWX,EAAUoH,EAAUvlM,EAAKoc,EAAQgkB,EAAQshC,GAEnE,KAAMnlE,IAAW4E,EACTqiM,GAAY+B,EAAUpH,EAAUqH,EAA+C1G,EAAYp9H,GAC3FnlE,GAEN,OAAO,CAEX,CACF,CACA,OAAO,CACT,CAUA,SAASkpM,GAAalgM,GACpB,SAAKgzD,GAAShzD,KA05FE+c,EA15FiB/c,EA25FxBszL,IAAeA,MAAcv2K,MAx5FxB01H,GAAWzyI,GAAS0zL,GAAazI,IAChCt6L,KAAK8kM,GAASz1L,IAs5F/B,IAAkB+c,CAr5FlB,CA2CA,SAASojL,GAAangM,GAGpB,MAAoB,mBAATA,EACFA,EAEI,MAATA,EACKogM,GAEW,iBAATpgM,EACFuc,GAAQvc,GACXqgM,GAAoBrgM,EAAM,GAAIA,EAAM,IACpCsgM,GAAYtgM,GAEXqD,GAASrD,EAClB,CASA,SAASugM,GAAS1pL,GAChB,IAAK2pL,GAAY3pL,GACf,OAAOi+K,GAAWj+K,GAEpB,IAAI7f,EAAS,GACb,IAAK,IAAIyD,KAAOrB,GAAOyd,GACjBtZ,GAAeyO,KAAK6K,EAAQpc,IAAe,eAAPA,GACtCzD,EAAOY,KAAK6C,GAGhB,OAAOzD,CACT,CAiCA,SAASypM,GAAOzgM,EAAOs9L,GACrB,OAAOt9L,EAAQs9L,CACjB,CAUA,SAASoD,GAAQtqL,EAAYm5K,GAC3B,IAAIl0L,GAAS,EACTrE,EAAS4iK,GAAYxjJ,GAAc/d,EAAM+d,EAAWje,QAAU,GAKlE,OAHA4gM,GAAS3iL,GAAY,SAASpW,EAAOvF,EAAK2b,GACxCpf,IAASqE,GAASk0L,EAASvvL,EAAOvF,EAAK2b,EACzC,IACOpf,CACT,CASA,SAASspM,GAAYzlK,GACnB,IAAIilK,EAAYa,GAAa9lK,GAC7B,OAAwB,GAApBilK,EAAU3nM,QAAe2nM,EAAU,GAAG,GACjCc,GAAwBd,EAAU,GAAG,GAAIA,EAAU,GAAG,IAExD,SAASjpL,GACd,OAAOA,IAAWgkB,GAAUglK,GAAYhpL,EAAQgkB,EAAQilK,EAC1D,CACF,CAUA,SAASO,GAAoBt1K,EAAMi1K,GACjC,OAAIa,GAAM91K,IAAS+1K,GAAmBd,GAC7BY,GAAwB/D,GAAM9xK,GAAOi1K,GAEvC,SAASnpL,GACd,IAAI+hL,EAAWjhM,GAAIkf,EAAQkU,GAC3B,OAAQ6tK,IAAah9L,GAAag9L,IAAaoH,EAC3Ce,GAAMlqL,EAAQkU,GACdkzK,GAAY+B,EAAUpH,EAAUqH,EACtC,CACF,CAaA,SAASe,GAAUnqL,EAAQgkB,EAAQ2jG,EAAU+6D,EAAYp9H,GACnDtlD,IAAWgkB,GAGf0hK,GAAQ1hK,GAAQ,SAASmlK,EAAUvlM,GAEjC,GADA0hE,IAAUA,EAAQ,IAAIq7H,IAClBxkI,GAASgtI,IA+BjB,SAAuBnpL,EAAQgkB,EAAQpgC,EAAK+jI,EAAUyiE,EAAW1H,EAAYp9H,GAC3E,IAAIy8H,EAAWsI,GAAQrqL,EAAQpc,GAC3BulM,EAAWkB,GAAQrmK,EAAQpgC,GAC3BsgM,EAAU5+H,EAAMxkE,IAAIqoM,GAExB,GAAIjF,EACFtC,GAAiB5hL,EAAQpc,EAAKsgM,OADhC,CAIA,IAAI9pL,EAAWsoL,EACXA,EAAWX,EAAUoH,EAAWvlM,EAAM,GAAKoc,EAAQgkB,EAAQshC,GAC3DvgE,EAEA0/L,EAAWrqL,IAAarV,EAE5B,GAAI0/L,EAAU,CACZ,IAAI3D,EAAQp7K,GAAQyjL,GAChBlI,GAAUH,GAAShD,GAASqL,GAC5BmB,GAAWxJ,IAAUG,GAAUzI,GAAa2Q,GAEhD/uL,EAAW+uL,EACPrI,GAASG,GAAUqJ,EACjB5kL,GAAQq8K,GACV3nL,EAAW2nL,EAEJwI,GAAkBxI,GACzB3nL,EAAWqnL,GAAUM,GAEdd,GACPwD,GAAW,EACXrqL,EAAW6oL,GAAYkG,GAAU,IAE1BmB,GACP7F,GAAW,EACXrqL,EAAW0pL,GAAgBqF,GAAU,IAGrC/uL,EAAW,GAGNopJ,GAAc2lC,IAAanI,GAAYmI,IAC9C/uL,EAAW2nL,EACPf,GAAYe,GACd3nL,EAAWowL,GAAczI,GAEjB5lI,GAAS4lI,KAAanmD,GAAWmmD,KACzC3nL,EAAW8oL,GAAgBiG,KAI7B1E,GAAW,CAEf,CACIA,IAEFn/H,EAAMtkE,IAAImoM,EAAU/uL,GACpBgwL,EAAUhwL,EAAU+uL,EAAUxhE,EAAU+6D,EAAYp9H,GACpDA,EAAc,OAAE6jI,IAElBvH,GAAiB5hL,EAAQpc,EAAKwW,EAnD9B,CAoDF,CA1FMqwL,CAAczqL,EAAQgkB,EAAQpgC,EAAK+jI,EAAUwiE,GAAWzH,EAAYp9H,OAEjE,CACH,IAAIlrD,EAAWsoL,EACXA,EAAW2H,GAAQrqL,EAAQpc,GAAMulM,EAAWvlM,EAAM,GAAKoc,EAAQgkB,EAAQshC,GACvEvgE,EAEAqV,IAAarV,IACfqV,EAAW+uL,GAEbvH,GAAiB5hL,EAAQpc,EAAKwW,EAChC,CACF,GAAGipL,GACL,CAuFA,SAASqH,GAAQ9yL,EAAOs1B,GACtB,IAAI5rC,EAASsW,EAAMtW,OACnB,GAAKA,EAIL,OAAO8/L,GADPl0J,GAAKA,EAAI,EAAI5rC,EAAS,EACJA,GAAUsW,EAAMs1B,GAAKnoC,CACzC,CAWA,SAAS4lM,GAAYprL,EAAYqrL,EAAWC,GAExCD,EADEA,EAAUtpM,OACA+3L,GAASuR,GAAW,SAASlS,GACvC,OAAIhzK,GAAQgzK,GACH,SAASvvL,GACd,OAAO28L,GAAQ38L,EAA2B,IAApBuvL,EAASp3L,OAAeo3L,EAAS,GAAKA,EAC9D,EAEKA,CACT,IAEY,CAAC6Q,IAGf,IAAI/kM,GAAS,EACbomM,EAAYvR,GAASuR,EAAWlQ,GAAUoQ,OAE1C,IAAI3qM,EAAS0pM,GAAQtqL,GAAY,SAASpW,EAAOvF,EAAK2b,GACpD,IAAIwrL,EAAW1R,GAASuR,GAAW,SAASlS,GAC1C,OAAOA,EAASvvL,EAClB,IACA,MAAO,CAAE,SAAY4hM,EAAU,QAAWvmM,EAAO,MAAS2E,EAC5D,IAEA,OA5xFJ,SAAoByO,EAAOozL,GACzB,IAAI1pM,EAASsW,EAAMtW,OAGnB,IADAsW,EAAMxX,MAyxFsB,SAAS4f,EAAQymL,GACzC,OA04BJ,SAAyBzmL,EAAQymL,EAAOoE,GAOtC,IANA,IAAIrmM,GAAS,EACTymM,EAAcjrL,EAAO+qL,SACrBG,EAAczE,EAAMsE,SACpBzpM,EAAS2pM,EAAY3pM,OACrB6pM,EAAeN,EAAOvpM,SAEjBkD,EAAQlD,GAAQ,CACvB,IAAInB,EAASirM,GAAiBH,EAAYzmM,GAAQ0mM,EAAY1mM,IAC9D,GAAIrE,EACF,OAAIqE,GAAS2mM,EACJhrM,EAGFA,GAAmB,QADd0qM,EAAOrmM,IACiB,EAAI,EAE5C,CAQA,OAAOwb,EAAOxb,MAAQiiM,EAAMjiM,KAC9B,CAn6BW6mM,CAAgBrrL,EAAQymL,EAAOoE,EACxC,IA1xFKvpM,KACLsW,EAAMtW,GAAUsW,EAAMtW,GAAQ6H,MAEhC,OAAOyO,CACT,CAoxFW0zL,CAAWnrM,EAGpB,CA0BA,SAASorM,GAAWvrL,EAAQkwC,EAAOtjB,GAKjC,IAJA,IAAIpoC,GAAS,EACTlD,EAAS4uD,EAAM5uD,OACfnB,EAAS,CAAC,IAELqE,EAAQlD,GAAQ,CACvB,IAAI4yB,EAAOg8B,EAAM1rD,GACb2E,EAAQ28L,GAAQ9lL,EAAQkU,GAExB0Y,EAAUzjC,EAAO+qB,IACnBs3K,GAAQrrM,EAAQ4lM,GAAS7xK,EAAMlU,GAAS7W,EAE5C,CACA,OAAOhJ,CACT,CA0BA,SAASsrM,GAAY7zL,EAAOsR,EAAQwvK,EAAUU,GAC5C,IAAI17L,EAAU07L,EAAac,GAAkBhB,GACzC10L,GAAS,EACTlD,EAAS4nB,EAAO5nB,OAChB2lM,EAAOrvL,EAQX,IANIA,IAAUsR,IACZA,EAASu4K,GAAUv4K,IAEjBwvK,IACFuO,EAAO5N,GAASzhL,EAAO8iL,GAAUhC,OAE1Bl0L,EAAQlD,GAKf,IAJA,IAAIshJ,EAAY,EACZz5I,EAAQ+f,EAAO1kB,GACfg5K,EAAWkb,EAAWA,EAASvvL,GAASA,GAEpCy5I,EAAYllJ,EAAQupM,EAAMzpB,EAAU56B,EAAWw2C,KAAgB,GACjE6N,IAASrvL,GACXkB,GAAO3D,KAAK8xL,EAAMrkD,EAAW,GAE/B9pI,GAAO3D,KAAKyC,EAAOgrI,EAAW,GAGlC,OAAOhrI,CACT,CAWA,SAAS8zL,GAAW9zL,EAAO+zL,GAIzB,IAHA,IAAIrqM,EAASsW,EAAQ+zL,EAAQrqM,OAAS,EAClCsqC,EAAYtqC,EAAS,EAElBA,KAAU,CACf,IAAIkD,EAAQmnM,EAAQrqM,GACpB,GAAIA,GAAUsqC,GAAapnC,IAAU2Z,EAAU,CAC7C,IAAIA,EAAW3Z,EACX48L,GAAQ58L,GACVsU,GAAO3D,KAAKyC,EAAOpT,EAAO,GAE1BonM,GAAUh0L,EAAOpT,EAErB,CACF,CACA,OAAOoT,CACT,CAWA,SAAS0pL,GAAWgB,EAAOC,GACzB,OAAOD,EAAQ3E,GAAYW,MAAkBiE,EAAQD,EAAQ,GAC/D,CAiCA,SAASuJ,GAAW5iI,EAAQ/7B,GAC1B,IAAI/sC,EAAS,GACb,IAAK8oE,GAAU/7B,EAAI,GAAKA,EAAI0jJ,EAC1B,OAAOzwL,EAIT,GACM+sC,EAAI,IACN/sC,GAAU8oE,IAEZ/7B,EAAIywJ,GAAYzwJ,EAAI,MAElB+7B,GAAUA,SAEL/7B,GAET,OAAO/sC,CACT,CAUA,SAAS2rM,GAAS5lL,EAAM/mB,GACtB,OAAO4sM,GAAYC,GAAS9lL,EAAM/mB,EAAOoqM,IAAWrjL,EAAO,GAC7D,CASA,SAAS+lL,GAAW1sL,GAClB,OAAO8hL,GAAYn4K,GAAO3J,GAC5B,CAUA,SAAS2sL,GAAe3sL,EAAY2tB,GAClC,IAAIt1B,EAAQsR,GAAO3J,GACnB,OAAOiiL,GAAY5pL,EAAO8pL,GAAUx0J,EAAG,EAAGt1B,EAAMtW,QAClD,CAYA,SAASkqM,GAAQxrL,EAAQkU,EAAM/qB,EAAOu5L,GACpC,IAAKvmI,GAASn8C,GACZ,OAAOA,EAST,IALA,IAAIxb,GAAS,EACTlD,GAHJ4yB,EAAO6xK,GAAS7xK,EAAMlU,IAGJ1e,OACdsqC,EAAYtqC,EAAS,EACrB6qM,EAASnsL,EAEI,MAAVmsL,KAAoB3nM,EAAQlD,GAAQ,CACzC,IAAIsC,EAAMoiM,GAAM9xK,EAAK1vB,IACjB4V,EAAWjR,EAEf,GAAY,cAARvF,GAA+B,gBAARA,GAAiC,cAARA,EAClD,OAAOoc,EAGT,GAAIxb,GAASonC,EAAW,CACtB,IAAIm2J,EAAWoK,EAAOvoM,IACtBwW,EAAWsoL,EAAaA,EAAWX,EAAUn+L,EAAKuoM,GAAUpnM,KAC3CA,IACfqV,EAAW+hD,GAAS4lI,GAChBA,EACCX,GAAQltK,EAAK1vB,EAAQ,IAAM,GAAK,CAAC,EAE1C,CACAs9L,GAAYqK,EAAQvoM,EAAKwW,GACzB+xL,EAASA,EAAOvoM,EAClB,CACA,OAAOoc,CACT,CAUA,IAAIosL,GAAe3N,GAAqB,SAASv4K,EAAMxiB,GAErD,OADA+6L,GAAQz9L,IAAIklB,EAAMxiB,GACXwiB,CACT,EAH6BqjL,GAazB8C,GAAmB93L,GAA4B,SAAS2R,EAAM+iD,GAChE,OAAO10D,GAAe2R,EAAM,WAAY,CACtC,cAAgB,EAChB,YAAc,EACd,MAASomL,GAASrjI,GAClB,UAAY,GAEhB,EAPwCsgI,GAgBxC,SAASgD,GAAYhtL,GACnB,OAAOiiL,GAAYt4K,GAAO3J,GAC5B,CAWA,SAASitL,GAAU50L,EAAOzY,EAAOC,GAC/B,IAAIoF,GAAS,EACTlD,EAASsW,EAAMtW,OAEfnC,EAAQ,IACVA,GAASA,EAAQmC,EAAS,EAAKA,EAASnC,IAE1CC,EAAMA,EAAMkC,EAASA,EAASlC,GACpB,IACRA,GAAOkC,GAETA,EAASnC,EAAQC,EAAM,EAAMA,EAAMD,IAAW,EAC9CA,KAAW,EAGX,IADA,IAAIgB,EAASqB,EAAMF,KACVkD,EAAQlD,GACfnB,EAAOqE,GAASoT,EAAMpT,EAAQrF,GAEhC,OAAOgB,CACT,CAWA,SAASssM,GAASltL,EAAYqtB,GAC5B,IAAIzsC,EAMJ,OAJA+hM,GAAS3iL,GAAY,SAASpW,EAAO3E,EAAO+a,GAE1C,QADApf,EAASysC,EAAUzjC,EAAO3E,EAAO+a,GAEnC,MACSpf,CACX,CAcA,SAASusM,GAAgB90L,EAAOzO,EAAOwjM,GACrC,IAAIC,EAAM,EACN9lC,EAAgB,MAATlvJ,EAAgBg1L,EAAMh1L,EAAMtW,OAEvC,GAAoB,iBAAT6H,GAAqBA,GAAUA,GAAS29J,GAn/H3BgqB,WAm/H0D,CAChF,KAAO8b,EAAM9lC,GAAM,CACjB,IAAI+lC,EAAOD,EAAM9lC,IAAU,EACvB0W,EAAW5lK,EAAMi1L,GAEJ,OAAbrvB,IAAsB/zB,GAAS+zB,KAC9BmvB,EAAcnvB,GAAYr0K,EAAUq0K,EAAWr0K,GAClDyjM,EAAMC,EAAM,EAEZ/lC,EAAO+lC,CAEX,CACA,OAAO/lC,CACT,CACA,OAAOgmC,GAAkBl1L,EAAOzO,EAAOogM,GAAUoD,EACnD,CAeA,SAASG,GAAkBl1L,EAAOzO,EAAOuvL,EAAUiU,GACjD,IAAIC,EAAM,EACN9lC,EAAgB,MAATlvJ,EAAgB,EAAIA,EAAMtW,OACrC,GAAa,IAATwlK,EACF,OAAO,EAST,IALA,IAAIimC,GADJ5jM,EAAQuvL,EAASvvL,KACQA,EACrB6jM,EAAsB,OAAV7jM,EACZ8jM,EAAcxjD,GAAStgJ,GACvB+jM,EAAiB/jM,IAAUpE,EAExB6nM,EAAM9lC,GAAM,CACjB,IAAI+lC,EAAMlP,IAAaiP,EAAM9lC,GAAQ,GACjC0W,EAAWkb,EAAS9gL,EAAMi1L,IAC1BM,EAAe3vB,IAAaz4K,EAC5BqoM,EAAyB,OAAb5vB,EACZ6vB,EAAiB7vB,GAAaA,EAC9B8vB,EAAc7jD,GAAS+zB,GAE3B,GAAIuvB,EACF,IAAIQ,EAASZ,GAAcU,OAE3BE,EADSL,EACAG,IAAmBV,GAAcQ,GACjCH,EACAK,GAAkBF,IAAiBR,IAAeS,GAClDH,EACAI,GAAkBF,IAAiBC,IAAcT,IAAeW,IAChEF,IAAaE,IAGbX,EAAcnvB,GAAYr0K,EAAUq0K,EAAWr0K,GAEtDokM,EACFX,EAAMC,EAAM,EAEZ/lC,EAAO+lC,CAEX,CACA,OAAO1O,GAAUr3B,EA1jICgqB,WA2jIpB,CAWA,SAAS0c,GAAe51L,EAAO8gL,GAM7B,IALA,IAAIl0L,GAAS,EACTlD,EAASsW,EAAMtW,OACf03L,EAAW,EACX74L,EAAS,KAEJqE,EAAQlD,GAAQ,CACvB,IAAI6H,EAAQyO,EAAMpT,GACdg5K,EAAWkb,EAAWA,EAASvvL,GAASA,EAE5C,IAAK3E,IAAUy3I,GAAGuhC,EAAUypB,GAAO,CACjC,IAAIA,EAAOzpB,EACXr9K,EAAO64L,KAAwB,IAAV7vL,EAAc,EAAIA,CACzC,CACF,CACA,OAAOhJ,CACT,CAUA,SAASstM,GAAatkM,GACpB,MAAoB,iBAATA,EACFA,EAELsgJ,GAAStgJ,GACJ0nL,GAED1nL,CACV,CAUA,SAASukM,GAAavkM,GAEpB,GAAoB,iBAATA,EACT,OAAOA,EAET,GAAIuc,GAAQvc,GAEV,OAAOkwL,GAASlwL,EAAOukM,IAAgB,GAEzC,GAAIjkD,GAAStgJ,GACX,OAAOg2L,GAAiBA,GAAehqL,KAAKhM,GAAS,GAEvD,IAAIhJ,EAAUgJ,EAAQ,GACtB,MAAkB,KAAVhJ,GAAkB,EAAIgJ,IAAU,IAAa,KAAOhJ,CAC9D,CAWA,SAASwtM,GAAS/1L,EAAO8gL,EAAUU,GACjC,IAAI50L,GAAS,EACTuoC,EAAWksJ,GACX33L,EAASsW,EAAMtW,OACfmjM,GAAW,EACXtkM,EAAS,GACT8mM,EAAO9mM,EAEX,GAAIi5L,EACFqL,GAAW,EACX13J,EAAWosJ,QAER,GAAI73L,GAjtIU,IAitIkB,CACnC,IAAIN,EAAM03L,EAAW,KAAOkV,GAAUh2L,GACtC,GAAI5W,EACF,OAAO06L,GAAW16L,GAEpByjM,GAAW,EACX13J,EAAW6tJ,GACXqM,EAAO,IAAIxG,EACb,MAEEwG,EAAOvO,EAAW,GAAKv4L,EAEzBwkM,EACA,OAASngM,EAAQlD,GAAQ,CACvB,IAAI6H,EAAQyO,EAAMpT,GACdg5K,EAAWkb,EAAWA,EAASvvL,GAASA,EAG5C,GADAA,EAASiwL,GAAwB,IAAVjwL,EAAeA,EAAQ,EAC1Cs7L,GAAYjnB,GAAaA,EAAU,CAErC,IADA,IAAIqwB,EAAY5G,EAAK3lM,OACdusM,KACL,GAAI5G,EAAK4G,KAAerwB,EACtB,SAASmnB,EAGTjM,GACFuO,EAAKlmM,KAAKy8K,GAEZr9K,EAAOY,KAAKoI,EACd,MACU4jC,EAASk6J,EAAMzpB,EAAU4b,KAC7B6N,IAAS9mM,GACX8mM,EAAKlmM,KAAKy8K,GAEZr9K,EAAOY,KAAKoI,GAEhB,CACA,OAAOhJ,CACT,CAUA,SAASyrM,GAAU5rL,EAAQkU,GAGzB,OAAiB,OADjBlU,EAASpY,GAAOoY,EADhBkU,EAAO6xK,GAAS7xK,EAAMlU,aAEUA,EAAOgmL,GAAMx1K,GAAK0D,IACpD,CAYA,SAAS45K,GAAW9tL,EAAQkU,EAAM65K,EAASrL,GACzC,OAAO8I,GAAQxrL,EAAQkU,EAAM65K,EAAQjI,GAAQ9lL,EAAQkU,IAAQwuK,EAC/D,CAaA,SAASsL,GAAUp2L,EAAOg1B,EAAWqhK,EAAQlU,GAI3C,IAHA,IAAIz4L,EAASsW,EAAMtW,OACfkD,EAAQu1L,EAAYz4L,GAAU,GAE1By4L,EAAYv1L,MAAYA,EAAQlD,IACtCsrC,EAAUh1B,EAAMpT,GAAQA,EAAOoT,KAEjC,OAAOq2L,EACHzB,GAAU50L,EAAQmiL,EAAY,EAAIv1L,EAASu1L,EAAYv1L,EAAQ,EAAIlD,GACnEkrM,GAAU50L,EAAQmiL,EAAYv1L,EAAQ,EAAI,EAAKu1L,EAAYz4L,EAASkD,EAC1E,CAYA,SAAS0pM,GAAiB/kM,EAAOglM,GAC/B,IAAIhuM,EAASgJ,EAIb,OAHIhJ,aAAkBm/L,KACpBn/L,EAASA,EAAOgJ,SAEXmwL,GAAY6U,GAAS,SAAShuM,EAAQyjD,GAC3C,OAAOA,EAAO19B,KAAKhH,MAAM0kC,EAAO/W,QAASwgH,GAAU,CAACltJ,GAASyjD,EAAOriD,MACtE,GAAGpB,EACL,CAYA,SAASiuM,GAAQvH,EAAQnO,EAAUU,GACjC,IAAI93L,EAASulM,EAAOvlM,OACpB,GAAIA,EAAS,EACX,OAAOA,EAASqsM,GAAS9G,EAAO,IAAM,GAKxC,IAHA,IAAIriM,GAAS,EACTrE,EAASqB,EAAMF,KAEVkD,EAAQlD,GAIf,IAHA,IAAIsW,EAAQivL,EAAOriM,GACfuiM,GAAY,IAEPA,EAAWzlM,GACdylM,GAAYviM,IACdrE,EAAOqE,GAASggM,GAAerkM,EAAOqE,IAAUoT,EAAOivL,EAAOE,GAAWrO,EAAUU,IAIzF,OAAOuU,GAASpI,GAAYplM,EAAQ,GAAIu4L,EAAUU,EACpD,CAWA,SAASiV,GAAcn6L,EAAOgV,EAAQolL,GAMpC,IALA,IAAI9pM,GAAS,EACTlD,EAAS4S,EAAM5S,OACfitM,EAAarlL,EAAO5nB,OACpBnB,EAAS,CAAC,IAELqE,EAAQlD,GAAQ,CACvB,IAAI6H,EAAQ3E,EAAQ+pM,EAAarlL,EAAO1kB,GAASO,EACjDupM,EAAWnuM,EAAQ+T,EAAM1P,GAAQ2E,EACnC,CACA,OAAOhJ,CACT,CASA,SAASquM,GAAoBrlM,GAC3B,OAAOohM,GAAkBphM,GAASA,EAAQ,EAC5C,CASA,SAASslM,GAAatlM,GACpB,MAAuB,mBAATA,EAAsBA,EAAQogM,EAC9C,CAUA,SAASxD,GAAS58L,EAAO6W,GACvB,OAAI0F,GAAQvc,GACHA,EAEF6gM,GAAM7gM,EAAO6W,GAAU,CAAC7W,GAASo2J,GAAalnK,GAAS8Q,GAChE,CAWA,IAAIulM,GAAW5C,GAWf,SAAS6C,GAAU/2L,EAAOzY,EAAOC,GAC/B,IAAIkC,EAASsW,EAAMtW,OAEnB,OADAlC,EAAMA,IAAQ2F,EAAYzD,EAASlC,GAC1BD,GAASC,GAAOkC,EAAUsW,EAAQ40L,GAAU50L,EAAOzY,EAAOC,EACrE,CAQA,IAAIg/E,GAAem/G,IAAmB,SAASvkL,GAC7C,OAAO+9B,GAAKqnC,aAAaplE,EAC3B,EAUA,SAASiqL,GAAY15K,EAAQo5K,GAC3B,GAAIA,EACF,OAAOp5K,EAAOja,QAEhB,IAAIhO,EAASioB,EAAOjoB,OAChBnB,EAAS48L,GAAcA,GAAYz7L,GAAU,IAAIioB,EAAOvU,YAAY1T,GAGxE,OADAioB,EAAO6mH,KAAKjwI,GACLA,CACT,CASA,SAASsjM,GAAiBmL,GACxB,IAAIzuM,EAAS,IAAIyuM,EAAY55L,YAAY45L,EAAYhL,YAErD,OADA,IAAIzwK,GAAWhzB,GAAQa,IAAI,IAAImyB,GAAWy7K,IACnCzuM,CACT,CA+CA,SAAS2jM,GAAgBhiC,EAAY6gC,GACnC,IAAIp5K,EAASo5K,EAASc,GAAiB3hC,EAAWv4I,QAAUu4I,EAAWv4I,OACvE,OAAO,IAAIu4I,EAAW9sJ,YAAYuU,EAAQu4I,EAAW6hC,WAAY7hC,EAAWxgK,OAC9E,CAUA,SAAS8pM,GAAiBjiM,EAAOs9L,GAC/B,GAAIt9L,IAAUs9L,EAAO,CACnB,IAAIoI,EAAe1lM,IAAUpE,EACzBioM,EAAsB,OAAV7jM,EACZ2lM,EAAiB3lM,GAAUA,EAC3B8jM,EAAcxjD,GAAStgJ,GAEvBgkM,EAAe1G,IAAU1hM,EACzBqoM,EAAsB,OAAV3G,EACZ4G,EAAiB5G,GAAUA,EAC3B6G,EAAc7jD,GAASg9C,GAE3B,IAAM2G,IAAcE,IAAgBL,GAAe9jM,EAAQs9L,GACtDwG,GAAeE,GAAgBE,IAAmBD,IAAcE,GAChEN,GAAaG,GAAgBE,IAC5BwB,GAAgBxB,IACjByB,EACH,OAAO,EAET,IAAM9B,IAAcC,IAAgBK,GAAenkM,EAAQs9L,GACtD6G,GAAeuB,GAAgBC,IAAmB9B,IAAcC,GAChEG,GAAayB,GAAgBC,IAC5B3B,GAAgB2B,IACjBzB,EACH,OAAQ,CAEZ,CACA,OAAO,CACT,CAsDA,SAAS0B,GAAYxtM,EAAMytM,EAAUC,EAASC,GAU5C,IATA,IAAIC,GAAa,EACbC,EAAa7tM,EAAKD,OAClB+tM,EAAgBJ,EAAQ3tM,OACxBguM,GAAa,EACbC,EAAaP,EAAS1tM,OACtBkuM,EAActR,GAAUkR,EAAaC,EAAe,GACpDlvM,EAASqB,EAAM+tM,EAAaC,GAC5BC,GAAeP,IAEVI,EAAYC,GACnBpvM,EAAOmvM,GAAaN,EAASM,GAE/B,OAASH,EAAYE,IACfI,GAAeN,EAAYC,KAC7BjvM,EAAO8uM,EAAQE,IAAc5tM,EAAK4tM,IAGtC,KAAOK,KACLrvM,EAAOmvM,KAAe/tM,EAAK4tM,KAE7B,OAAOhvM,CACT,CAaA,SAASuvM,GAAiBnuM,EAAMytM,EAAUC,EAASC,GAWjD,IAVA,IAAIC,GAAa,EACbC,EAAa7tM,EAAKD,OAClBquM,GAAgB,EAChBN,EAAgBJ,EAAQ3tM,OACxBsuM,GAAc,EACdC,EAAcb,EAAS1tM,OACvBkuM,EAActR,GAAUkR,EAAaC,EAAe,GACpDlvM,EAASqB,EAAMguM,EAAcK,GAC7BJ,GAAeP,IAEVC,EAAYK,GACnBrvM,EAAOgvM,GAAa5tM,EAAK4tM,GAG3B,IADA,IAAIlkM,EAASkkM,IACJS,EAAaC,GACpB1vM,EAAO8K,EAAS2kM,GAAcZ,EAASY,GAEzC,OAASD,EAAeN,IAClBI,GAAeN,EAAYC,KAC7BjvM,EAAO8K,EAASgkM,EAAQU,IAAiBpuM,EAAK4tM,MAGlD,OAAOhvM,CACT,CAUA,SAASshM,GAAUz9J,EAAQpsB,GACzB,IAAIpT,GAAS,EACTlD,EAAS0iC,EAAO1iC,OAGpB,IADAsW,IAAUA,EAAQpW,EAAMF,MACfkD,EAAQlD,GACfsW,EAAMpT,GAASw/B,EAAOx/B,GAExB,OAAOoT,CACT,CAYA,SAASwqL,GAAWp+J,EAAQ9vB,EAAO8L,EAAQ0iL,GACzC,IAAIoN,GAAS9vL,EACbA,IAAWA,EAAS,CAAC,GAKrB,IAHA,IAAIxb,GAAS,EACTlD,EAAS4S,EAAM5S,SAEVkD,EAAQlD,GAAQ,CACvB,IAAIsC,EAAMsQ,EAAM1P,GAEZ4V,EAAWsoL,EACXA,EAAW1iL,EAAOpc,GAAMogC,EAAOpgC,GAAMA,EAAKoc,EAAQgkB,GAClDj/B,EAEAqV,IAAarV,IACfqV,EAAW4pB,EAAOpgC,IAEhBksM,EACFjO,GAAgB7hL,EAAQpc,EAAKwW,GAE7B0nL,GAAY9hL,EAAQpc,EAAKwW,EAE7B,CACA,OAAO4F,CACT,CAkCA,SAAS+vL,GAAiBxoD,EAAQ7/G,GAChC,OAAO,SAASnoB,EAAYm5K,GAC1B,IAAIxyK,EAAOR,GAAQnG,GAAck5K,GAAkBwJ,GAC/CtJ,EAAcjxJ,EAAcA,IAAgB,CAAC,EAEjD,OAAOxhB,EAAK3G,EAAYgoI,EAAQujD,GAAYpS,EAAU,GAAIC,EAC5D,CACF,CASA,SAASqX,GAAeC,GACtB,OAAOnE,IAAS,SAAS9rL,EAAQkwL,GAC/B,IAAI1rM,GAAS,EACTlD,EAAS4uM,EAAQ5uM,OACjBohM,EAAaphM,EAAS,EAAI4uM,EAAQ5uM,EAAS,GAAKyD,EAChDorM,EAAQ7uM,EAAS,EAAI4uM,EAAQ,GAAKnrM,EAWtC,IATA29L,EAAcuN,EAAS3uM,OAAS,GAA0B,mBAAdohM,GACvCphM,IAAUohM,GACX39L,EAEAorM,GAASC,GAAeF,EAAQ,GAAIA,EAAQ,GAAIC,KAClDzN,EAAaphM,EAAS,EAAIyD,EAAY29L,EACtCphM,EAAS,GAEX0e,EAASzd,GAAOyd,KACPxb,EAAQlD,GAAQ,CACvB,IAAI0iC,EAASksK,EAAQ1rM,GACjBw/B,GACFisK,EAASjwL,EAAQgkB,EAAQx/B,EAAOk+L,EAEpC,CACA,OAAO1iL,CACT,GACF,CAUA,SAASglL,GAAenL,EAAUE,GAChC,OAAO,SAASx6K,EAAYm5K,GAC1B,GAAkB,MAAdn5K,EACF,OAAOA,EAET,IAAKwjJ,GAAYxjJ,GACf,OAAOs6K,EAASt6K,EAAYm5K,GAM9B,IAJA,IAAIp3L,EAASie,EAAWje,OACpBkD,EAAQu1L,EAAYz4L,GAAU,EAC9B+uM,EAAW9tM,GAAOgd,IAEdw6K,EAAYv1L,MAAYA,EAAQlD,KACa,IAA/Co3L,EAAS2X,EAAS7rM,GAAQA,EAAO6rM,KAIvC,OAAO9wL,CACT,CACF,CASA,SAASomL,GAAc5L,GACrB,OAAO,SAAS/5K,EAAQ04K,EAAUwN,GAMhC,IALA,IAAI1hM,GAAS,EACT6rM,EAAW9tM,GAAOyd,GAClB9L,EAAQgyL,EAASlmL,GACjB1e,EAAS4S,EAAM5S,OAEZA,KAAU,CACf,IAAIsC,EAAMsQ,EAAM6lL,EAAYz4L,IAAWkD,GACvC,IAA+C,IAA3Ck0L,EAAS2X,EAASzsM,GAAMA,EAAKysM,GAC/B,KAEJ,CACA,OAAOrwL,CACT,CACF,CA8BA,SAASswL,GAAgBtmF,GACvB,OAAO,SAAS/gD,GAGd,IAAI6xH,EAAaO,GAFjBpyH,EAAS5wE,GAAS4wE,IAGd6yH,GAAc7yH,GACdlkE,EAEAq2L,EAAMN,EACNA,EAAW,GACX7xH,EAAOlzD,OAAO,GAEdw6L,EAAWzV,EACX6T,GAAU7T,EAAY,GAAGnhM,KAAK,IAC9BsvE,EAAO35D,MAAM,GAEjB,OAAO8rL,EAAIpxE,KAAgBumF,CAC7B,CACF,CASA,SAASC,GAAiB/7K,GACxB,OAAO,SAASw0C,GACd,OAAOqwH,GAAYz8E,GAAM4zF,GAAOxnI,GAAQzhE,QAAQkvL,GAAQ,KAAMjiK,EAAU,GAC1E,CACF,CAUA,SAASi8K,GAAW/sC,GAClB,OAAO,WAIL,IAAIpiK,EAAOF,UACX,OAAQE,EAAKD,QACX,KAAK,EAAG,OAAO,IAAIqiK,EACnB,KAAK,EAAG,OAAO,IAAIA,EAAKpiK,EAAK,IAC7B,KAAK,EAAG,OAAO,IAAIoiK,EAAKpiK,EAAK,GAAIA,EAAK,IACtC,KAAK,EAAG,OAAO,IAAIoiK,EAAKpiK,EAAK,GAAIA,EAAK,GAAIA,EAAK,IAC/C,KAAK,EAAG,OAAO,IAAIoiK,EAAKpiK,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,IACxD,KAAK,EAAG,OAAO,IAAIoiK,EAAKpiK,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,IACjE,KAAK,EAAG,OAAO,IAAIoiK,EAAKpiK,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,IAC1E,KAAK,EAAG,OAAO,IAAIoiK,EAAKpiK,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,IAErF,IAAIovM,EAAclR,GAAW97B,EAAKhvJ,WAC9BxU,EAASwjK,EAAKzkJ,MAAMyxL,EAAapvM,GAIrC,OAAO46D,GAASh8D,GAAUA,EAASwwM,CACrC,CACF,CA8CA,SAASC,GAAWC,GAClB,OAAO,SAAStxL,EAAYqtB,EAAWg2G,GACrC,IAAIytD,EAAW9tM,GAAOgd,GACtB,IAAKwjJ,GAAYxjJ,GAAa,CAC5B,IAAIm5K,EAAWoS,GAAYl+J,EAAW,GACtCrtB,EAAa5b,GAAK4b,GAClBqtB,EAAY,SAAShpC,GAAO,OAAO80L,EAAS2X,EAASzsM,GAAMA,EAAKysM,EAAW,CAC7E,CACA,IAAI7rM,EAAQqsM,EAActxL,EAAYqtB,EAAWg2G,GACjD,OAAOp+I,GAAS,EAAI6rM,EAAS3X,EAAWn5K,EAAW/a,GAASA,GAASO,CACvE,CACF,CASA,SAAS+rM,GAAW/W,GAClB,OAAOgX,IAAS,SAASC,GACvB,IAAI1vM,EAAS0vM,EAAM1vM,OACfkD,EAAQlD,EACR2vM,EAAS1R,GAAc5qL,UAAUu8L,KAKrC,IAHInX,GACFiX,EAAM7zL,UAED3Y,KAAS,CACd,IAAI0hB,EAAO8qL,EAAMxsM,GACjB,GAAmB,mBAAR0hB,EACT,MAAM,IAAI1Q,GAAU86K,GAEtB,GAAI2gB,IAAWE,GAAgC,WAArBC,GAAYlrL,GACpC,IAAIirL,EAAU,IAAI5R,GAAc,IAAI,EAExC,CAEA,IADA/6L,EAAQ2sM,EAAU3sM,EAAQlD,IACjBkD,EAAQlD,GAAQ,CAGvB,IAAIquL,EAAWyhB,GAFflrL,EAAO8qL,EAAMxsM,IAGTd,EAAmB,WAAZisL,EAAwBl5C,GAAQvwH,GAAQnhB,EAMjDosM,EAJEztM,GAAQ2tM,GAAW3tM,EAAK,KACX,KAAXA,EAAK,KACJA,EAAK,GAAGpC,QAAqB,GAAXoC,EAAK,GAElBytM,EAAQC,GAAY1tM,EAAK,KAAKwb,MAAMiyL,EAASztM,EAAK,IAElC,GAAfwiB,EAAK5kB,QAAe+vM,GAAWnrL,GACtCirL,EAAQxhB,KACRwhB,EAAQD,KAAKhrL,EAErB,CACA,OAAO,WACL,IAAI3kB,EAAOF,UACP8H,EAAQ5H,EAAK,GAEjB,GAAI4vM,GAA0B,GAAf5vM,EAAKD,QAAeokB,GAAQvc,GACzC,OAAOgoM,EAAQG,MAAMnoM,GAAOA,QAK9B,IAHA,IAAI3E,EAAQ,EACRrE,EAASmB,EAAS0vM,EAAMxsM,GAAO0a,MAAM/H,KAAM5V,GAAQ4H,IAE9C3E,EAAQlD,GACfnB,EAAS6wM,EAAMxsM,GAAO2Q,KAAKgC,KAAMhX,GAEnC,OAAOA,CACT,CACF,GACF,CAqBA,SAASoxM,GAAarrL,EAAMu8K,EAAS51J,EAASmiK,EAAUC,EAASuC,EAAeC,EAAcC,EAAQlrI,EAAKghF,GACzG,IAAImqD,EAAQlP,EAAU/R,EAClBkhB,EA5iKa,EA4iKJnP,EACToP,EA5iKiB,EA4iKLpP,EACZyM,EAAsB,GAAVzM,EACZqP,EAtiKa,IAsiKJrP,EACT9+B,EAAOkuC,EAAY9sM,EAAY2rM,GAAWxqL,GA6C9C,OA3CA,SAASirL,IAKP,IAJA,IAAI7vM,EAASD,UAAUC,OACnBC,EAAOC,EAAMF,GACbkD,EAAQlD,EAELkD,KACLjD,EAAKiD,GAASnD,UAAUmD,GAE1B,GAAI0qM,EACF,IAAIzT,EAAcsW,GAAUZ,GACxBa,EAvhIZ,SAAsBp6L,EAAO6jL,GAI3B,IAHA,IAAIn6L,EAASsW,EAAMtW,OACfnB,EAAS,EAENmB,KACDsW,EAAMtW,KAAYm6L,KAClBt7L,EAGN,OAAOA,CACT,CA6gI2B8xM,CAAa1wM,EAAMk6L,GASxC,GAPIuT,IACFztM,EAAOwtM,GAAYxtM,EAAMytM,EAAUC,EAASC,IAE1CsC,IACFjwM,EAAOmuM,GAAiBnuM,EAAMiwM,EAAeC,EAAcvC,IAE7D5tM,GAAU0wM,EACN9C,GAAa5tM,EAASkmJ,EAAO,CAC/B,IAAI0qD,EAAa1W,GAAej6L,EAAMk6L,GACtC,OAAO0W,GACLjsL,EAAMu8K,EAAS8O,GAAcJ,EAAQ1V,YAAa5uJ,EAClDtrC,EAAM2wM,EAAYR,EAAQlrI,EAAKghF,EAAQlmJ,EAE3C,CACA,IAAIqvM,EAAciB,EAAS/kK,EAAU11B,KACjChV,EAAK0vM,EAAYlB,EAAYzqL,GAAQA,EAczC,OAZA5kB,EAASC,EAAKD,OACVowM,EACFnwM,EAg4CN,SAAiBqW,EAAO+zL,GAKtB,IAJA,IAAIyG,EAAYx6L,EAAMtW,OAClBA,EAAS68L,GAAUwN,EAAQrqM,OAAQ8wM,GACnCvwL,EAAW4/K,GAAU7pL,GAElBtW,KAAU,CACf,IAAIkD,EAAQmnM,EAAQrqM,GACpBsW,EAAMtW,GAAU8/L,GAAQ58L,EAAO4tM,GAAavwL,EAASrd,GAASO,CAChE,CACA,OAAO6S,CACT,CA14Cay6L,CAAQ9wM,EAAMmwM,GACZI,GAAUxwM,EAAS,GAC5BC,EAAK4b,UAEHw0L,GAASnrI,EAAMllE,IACjBC,EAAKD,OAASklE,GAEZrvD,MAAQA,OAAS4/B,IAAQ5/B,gBAAgBg6L,IAC3ChvM,EAAKwhK,GAAQ+sC,GAAWvuM,IAEnBA,EAAG+c,MAAMyxL,EAAapvM,EAC/B,CAEF,CAUA,SAAS+wM,GAAe/qD,EAAQgrD,GAC9B,OAAO,SAASvyL,EAAQ04K,GACtB,OAh/DJ,SAAsB14K,EAAQunI,EAAQmxC,EAAUC,GAI9C,OAHAsM,GAAWjlL,GAAQ,SAAS7W,EAAOvF,EAAKoc,GACtCunI,EAAOoxC,EAAaD,EAASvvL,GAAQvF,EAAKoc,EAC5C,IACO24K,CACT,CA2+DW6Z,CAAaxyL,EAAQunI,EAAQgrD,EAAW7Z,GAAW,CAAC,EAC7D,CACF,CAUA,SAAS+Z,GAAoBjoC,EAAU9wE,GACrC,OAAO,SAASvwF,EAAOs9L,GACrB,IAAItmM,EACJ,GAAIgJ,IAAUpE,GAAa0hM,IAAU1hM,EACnC,OAAO20F,EAKT,GAHIvwF,IAAUpE,IACZ5E,EAASgJ,GAEPs9L,IAAU1hM,EAAW,CACvB,GAAI5E,IAAW4E,EACb,OAAO0hM,EAEW,iBAATt9L,GAAqC,iBAATs9L,GACrCt9L,EAAQukM,GAAavkM,GACrBs9L,EAAQiH,GAAajH,KAErBt9L,EAAQskM,GAAatkM,GACrBs9L,EAAQgH,GAAahH,IAEvBtmM,EAASqqK,EAASrhK,EAAOs9L,EAC3B,CACA,OAAOtmM,CACT,CACF,CASA,SAASuyM,GAAWC,GAClB,OAAO5B,IAAS,SAASnG,GAEvB,OADAA,EAAYvR,GAASuR,EAAWlQ,GAAUoQ,OACnCgB,IAAS,SAASvqM,GACvB,IAAIsrC,EAAU11B,KACd,OAAOw7L,EAAU/H,GAAW,SAASlS,GACnC,OAAOx5K,GAAMw5K,EAAU7rJ,EAAStrC,EAClC,GACF,GACF,GACF,CAWA,SAASqxM,GAActxM,EAAQuxM,GAG7B,IAAIC,GAFJD,EAAQA,IAAU9tM,EAAY,IAAM2oM,GAAamF,IAEzBvxM,OACxB,GAAIwxM,EAAc,EAChB,OAAOA,EAAcjH,GAAWgH,EAAOvxM,GAAUuxM,EAEnD,IAAI1yM,EAAS0rM,GAAWgH,EAAOnV,GAAWp8L,EAASs6L,GAAWiX,KAC9D,OAAOxX,GAAWwX,GACdlE,GAAU7S,GAAc37L,GAAS,EAAGmB,GAAQ3H,KAAK,IACjDwG,EAAOmP,MAAM,EAAGhO,EACtB,CA4CA,SAASyxM,GAAYhZ,GACnB,OAAO,SAAS56L,EAAOC,EAAKktC,GAa1B,OAZIA,GAAuB,iBAARA,GAAoB8jK,GAAejxM,EAAOC,EAAKktC,KAChEltC,EAAMktC,EAAOvnC,GAGf5F,EAAQ6zM,GAAS7zM,GACbC,IAAQ2F,GACV3F,EAAMD,EACNA,EAAQ,GAERC,EAAM4zM,GAAS5zM,GA57CrB,SAAmBD,EAAOC,EAAKktC,EAAMytJ,GAKnC,IAJA,IAAIv1L,GAAS,EACTlD,EAAS48L,GAAUR,IAAYt+L,EAAMD,IAAUmtC,GAAQ,IAAK,GAC5DnsC,EAASqB,EAAMF,GAEZA,KACLnB,EAAO45L,EAAYz4L,IAAWkD,GAASrF,EACvCA,GAASmtC,EAEX,OAAOnsC,CACT,CAq7CW8yM,CAAU9zM,EAAOC,EADxBktC,EAAOA,IAASvnC,EAAa5F,EAAQC,EAAM,GAAK,EAAK4zM,GAAS1mK,GAC3BytJ,EACrC,CACF,CASA,SAASmZ,GAA0B1oC,GACjC,OAAO,SAASrhK,EAAOs9L,GAKrB,MAJsB,iBAATt9L,GAAqC,iBAATs9L,IACvCt9L,EAAQyS,GAASzS,GACjBs9L,EAAQ7qL,GAAS6qL,IAEZj8B,EAASrhK,EAAOs9L,EACzB,CACF,CAmBA,SAAS0L,GAAcjsL,EAAMu8K,EAAS0Q,EAAU1X,EAAa5uJ,EAASmiK,EAAUC,EAASyC,EAAQlrI,EAAKghF,GACpG,IAAI4rD,EArxKc,EAqxKJ3Q,EAMdA,GAAY2Q,EAAU3iB,EAxxKI,GAJF,GA6xKxBgS,KAAa2Q,EAzxKa,GAyxKuB3iB,MAG/CgS,IAAW,GAEb,IAAI4Q,EAAU,CACZntL,EAAMu8K,EAAS51J,EAVCumK,EAAUpE,EAAWjqM,EAFtBquM,EAAUnE,EAAUlqM,EAGdquM,EAAUruM,EAAYiqM,EAFvBoE,EAAUruM,EAAYkqM,EAYzByC,EAAQlrI,EAAKghF,GAG5BrnJ,EAASgzM,EAASj0L,MAAMna,EAAWsuM,GAKvC,OAJIhC,GAAWnrL,IACbotL,GAAQnzM,EAAQkzM,GAElBlzM,EAAOs7L,YAAcA,EACd8X,GAAgBpzM,EAAQ+lB,EAAMu8K,EACvC,CASA,SAAS+Q,GAAYxpF,GACnB,IAAI9jG,EAAOptB,GAAKkxH,GAChB,OAAO,SAASw/B,EAAQiqD,GAGtB,GAFAjqD,EAAS5tI,GAAS4tI,IAClBiqD,EAAyB,MAAbA,EAAoB,EAAItV,GAAUlyJ,GAAUwnK,GAAY,OACnD1V,GAAev0C,GAAS,CAGvC,IAAIhwH,GAAQnhC,GAASmxJ,GAAU,KAAKpkJ,MAAM,KAI1C,SADAo0B,GAAQnhC,GAFI6tB,EAAKsT,EAAK,GAAK,MAAQA,EAAK,GAAKi6K,KAEnB,KAAKruM,MAAM,MACvB,GAAK,MAAQo0B,EAAK,GAAKi6K,GACvC,CACA,OAAOvtL,EAAKsjI,EACd,CACF,CASA,IAAIokD,GAAc1tM,IAAQ,EAAIw7L,GAAW,IAAIx7L,GAAI,CAAC,EAAE,KAAK,IAAOywL,EAAmB,SAASznK,GAC1F,OAAO,IAAIhpB,GAAIgpB,EACjB,EAF4Eu8C,GAW5E,SAASiuI,GAAcxN,GACrB,OAAO,SAASlmL,GACd,IAAIkI,EAAM66K,GAAO/iL,GACjB,OAAIkI,GAAOqpK,EACF+J,GAAWt7K,GAEhBkI,GAAO0pK,EACF+J,GAAW37K,GAn6I1B,SAAqBA,EAAQ9L,GAC3B,OAAOmlL,GAASnlL,GAAO,SAAStQ,GAC9B,MAAO,CAACA,EAAKoc,EAAOpc,GACtB,GACF,CAi6Ia+vM,CAAY3zL,EAAQkmL,EAASlmL,GACtC,CACF,CA2BA,SAAS4zL,GAAW1tL,EAAMu8K,EAAS51J,EAASmiK,EAAUC,EAASyC,EAAQlrI,EAAKghF,GAC1E,IAAIqqD,EAl4KiB,EAk4KLpP,EAChB,IAAKoP,GAA4B,mBAAR3rL,EACvB,MAAM,IAAI1Q,GAAU86K,GAEtB,IAAIhvL,EAAS0tM,EAAWA,EAAS1tM,OAAS,EAS1C,GARKA,IACHmhM,IAAW,GACXuM,EAAWC,EAAUlqM,GAEvByhE,EAAMA,IAAQzhE,EAAYyhE,EAAM03H,GAAUjyJ,GAAUu6B,GAAM,GAC1DghF,EAAQA,IAAUziJ,EAAYyiJ,EAAQv7G,GAAUu7G,GAChDlmJ,GAAU2tM,EAAUA,EAAQ3tM,OAAS,EAx4KX,GA04KtBmhM,EAAmC,CACrC,IAAI+O,EAAgBxC,EAChByC,EAAexC,EAEnBD,EAAWC,EAAUlqM,CACvB,CACA,IAAIrB,EAAOmuM,EAAY9sM,EAAY0xI,GAAQvwH,GAEvCmtL,EAAU,CACZntL,EAAMu8K,EAAS51J,EAASmiK,EAAUC,EAASuC,EAAeC,EAC1DC,EAAQlrI,EAAKghF,GAkBf,GAfI9jJ,GA26BN,SAAmBA,EAAMsgC,GACvB,IAAIy+J,EAAU/+L,EAAK,GACfmwM,EAAa7vK,EAAO,GACpB8vK,EAAarR,EAAUoR,EACvBpP,EAAWqP,EAAa,IAExBC,EACAF,GAAcnjB,GA50MA,GA40MmB+R,GACjCoR,GAAcnjB,GAx0MA,KAw0MmB+R,GAAgC/+L,EAAK,GAAGpC,QAAU0iC,EAAO,IAC5E,KAAd6vK,GAAqD7vK,EAAO,GAAG1iC,QAAU0iC,EAAO,IA90MlE,GA80M0Ey+J,EAG5F,IAAMgC,IAAYsP,EAChB,OAAOrwM,EAr1MQ,EAw1MbmwM,IACFnwM,EAAK,GAAKsgC,EAAO,GAEjB8vK,GA31Me,EA21MDrR,EAA2B,EAz1MnB,GA41MxB,IAAIt5L,EAAQ66B,EAAO,GACnB,GAAI76B,EAAO,CACT,IAAI6lM,EAAWtrM,EAAK,GACpBA,EAAK,GAAKsrM,EAAWD,GAAYC,EAAU7lM,EAAO66B,EAAO,IAAM76B,EAC/DzF,EAAK,GAAKsrM,EAAWxT,GAAe93L,EAAK,GAAI8sL,GAAexsJ,EAAO,EACrE,EAEA76B,EAAQ66B,EAAO,MAEbgrK,EAAWtrM,EAAK,GAChBA,EAAK,GAAKsrM,EAAWU,GAAiBV,EAAU7lM,EAAO66B,EAAO,IAAM76B,EACpEzF,EAAK,GAAKsrM,EAAWxT,GAAe93L,EAAK,GAAI8sL,GAAexsJ,EAAO,KAGrE76B,EAAQ66B,EAAO,MAEbtgC,EAAK,GAAKyF,GAGR0qM,EAAanjB,IACfhtL,EAAK,GAAgB,MAAXA,EAAK,GAAasgC,EAAO,GAAKm6J,GAAUz6L,EAAK,GAAIsgC,EAAO,KAGrD,MAAXtgC,EAAK,KACPA,EAAK,GAAKsgC,EAAO,IAGnBtgC,EAAK,GAAKsgC,EAAO,GACjBtgC,EAAK,GAAKowM,CAGZ,CA/9BIE,CAAUX,EAAS3vM,GAErBwiB,EAAOmtL,EAAQ,GACf5Q,EAAU4Q,EAAQ,GAClBxmK,EAAUwmK,EAAQ,GAClBrE,EAAWqE,EAAQ,GACnBpE,EAAUoE,EAAQ,KAClB7rD,EAAQ6rD,EAAQ,GAAKA,EAAQ,KAAOtuM,EAC/B8sM,EAAY,EAAI3rL,EAAK5kB,OACtB48L,GAAUmV,EAAQ,GAAK/xM,EAAQ,KAEX,GAAVmhM,IACZA,IAAW,IAERA,GA56KY,GA46KDA,EAGdtiM,EA56KgB,GA26KPsiM,GA16Ka,IA06KiBA,EApgB3C,SAAqBv8K,EAAMu8K,EAASj7C,GAClC,IAAImc,EAAO+sC,GAAWxqL,GAwBtB,OAtBA,SAASirL,IAMP,IALA,IAAI7vM,EAASD,UAAUC,OACnBC,EAAOC,EAAMF,GACbkD,EAAQlD,EACRm6L,EAAcsW,GAAUZ,GAErB3sM,KACLjD,EAAKiD,GAASnD,UAAUmD,GAE1B,IAAIyqM,EAAW3tM,EAAS,GAAKC,EAAK,KAAOk6L,GAAel6L,EAAKD,EAAS,KAAOm6L,EACzE,GACAD,GAAej6L,EAAMk6L,GAGzB,OADAn6L,GAAU2tM,EAAQ3tM,QACLkmJ,EACJ2qD,GACLjsL,EAAMu8K,EAAS8O,GAAcJ,EAAQ1V,YAAa12L,EAClDxD,EAAM0tM,EAASlqM,EAAWA,EAAWyiJ,EAAQlmJ,GAG1C4d,GADG/H,MAAQA,OAAS4/B,IAAQ5/B,gBAAgBg6L,EAAWxtC,EAAOz9I,EACpD/O,KAAM5V,EACzB,CAEF,CA2ea0yM,CAAY/tL,EAAMu8K,EAASj7C,GAC1Bi7C,GAAWhS,GAAgC,IAAXgS,GAAqDwM,EAAQ3tM,OAG9FiwM,GAAaryL,MAAMna,EAAWsuM,GA9O3C,SAAuBntL,EAAMu8K,EAAS51J,EAASmiK,GAC7C,IAAI4C,EAtsKa,EAssKJnP,EACT9+B,EAAO+sC,GAAWxqL,GAkBtB,OAhBA,SAASirL,IAQP,IAPA,IAAIhC,GAAa,EACbC,EAAa/tM,UAAUC,OACvBguM,GAAa,EACbC,EAAaP,EAAS1tM,OACtBC,EAAOC,EAAM+tM,EAAaH,GAC1BjtM,EAAMgV,MAAQA,OAAS4/B,IAAQ5/B,gBAAgBg6L,EAAWxtC,EAAOz9I,IAE5DopL,EAAYC,GACnBhuM,EAAK+tM,GAAaN,EAASM,GAE7B,KAAOF,KACL7tM,EAAK+tM,KAAejuM,YAAY8tM,GAElC,OAAOjwL,GAAM/c,EAAIyvM,EAAS/kK,EAAU11B,KAAM5V,EAC5C,CAEF,CAuNa2yM,CAAchuL,EAAMu8K,EAAS51J,EAASmiK,QAJ/C,IAAI7uM,EAhmBR,SAAoB+lB,EAAMu8K,EAAS51J,GACjC,IAAI+kK,EA90Ja,EA80JJnP,EACT9+B,EAAO+sC,GAAWxqL,GAMtB,OAJA,SAASirL,IAEP,OADUh6L,MAAQA,OAAS4/B,IAAQ5/B,gBAAgBg6L,EAAWxtC,EAAOz9I,GAC3DhH,MAAM0yL,EAAS/kK,EAAU11B,KAAM9V,UAC3C,CAEF,CAulBiB8yM,CAAWjuL,EAAMu8K,EAAS51J,GASzC,OAAO0mK,IADM7vM,EAAO0oM,GAAckH,IACJnzM,EAAQkzM,GAAUntL,EAAMu8K,EACxD,CAcA,SAAS2R,GAAuBrS,EAAUoH,EAAUvlM,EAAKoc,GACvD,OAAI+hL,IAAah9L,GACZk3I,GAAG8lD,EAAU1F,GAAYz4L,MAAU8C,GAAeyO,KAAK6K,EAAQpc,GAC3DulM,EAEFpH,CACT,CAgBA,SAASsS,GAAoBtS,EAAUoH,EAAUvlM,EAAKoc,EAAQgkB,EAAQshC,GAOpE,OANInJ,GAAS4lI,IAAa5lI,GAASgtI,KAEjC7jI,EAAMtkE,IAAImoM,EAAUpH,GACpBoI,GAAUpI,EAAUoH,EAAUpkM,EAAWsvM,GAAqB/uI,GAC9DA,EAAc,OAAE6jI,IAEXpH,CACT,CAWA,SAASuS,GAAgBnrM,GACvB,OAAOq6J,GAAcr6J,GAASpE,EAAYoE,CAC5C,CAeA,SAAS0+L,GAAYjwL,EAAO6uL,EAAOhE,EAASC,EAAY2E,EAAW/hI,GACjE,IAAIyiI,EApgLmB,EAogLPtF,EACZ2P,EAAYx6L,EAAMtW,OAClBwlM,EAAYL,EAAMnlM,OAEtB,GAAI8wM,GAAatL,KAAeiB,GAAajB,EAAYsL,GACvD,OAAO,EAGT,IAAImC,EAAajvI,EAAMxkE,IAAI8W,GACvB4wL,EAAaljI,EAAMxkE,IAAI2lM,GAC3B,GAAI8N,GAAc/L,EAChB,OAAO+L,GAAc9N,GAAS+B,GAAc5wL,EAE9C,IAAIpT,GAAS,EACTrE,GAAS,EACT8mM,EAlhLqB,EAkhLbxE,EAAoC,IAAIhC,GAAW17L,EAM/D,IAJAugE,EAAMtkE,IAAI4W,EAAO6uL,GACjBnhI,EAAMtkE,IAAIylM,EAAO7uL,KAGRpT,EAAQ4tM,GAAW,CAC1B,IAAIoC,EAAW58L,EAAMpT,GACjBkkM,EAAWjC,EAAMjiM,GAErB,GAAIk+L,EACF,IAAIiG,EAAWZ,EACXrF,EAAWgG,EAAU8L,EAAUhwM,EAAOiiM,EAAO7uL,EAAO0tD,GACpDo9H,EAAW8R,EAAU9L,EAAUlkM,EAAOoT,EAAO6uL,EAAOnhI,GAE1D,GAAIqjI,IAAa5jM,EAAW,CAC1B,GAAI4jM,EACF,SAEFxoM,GAAS,EACT,KACF,CAEA,GAAI8mM,GACF,IAAKxN,GAAUgN,GAAO,SAASiC,EAAU3B,GACnC,IAAKnM,GAASqM,EAAMF,KACfyN,IAAa9L,GAAYrB,EAAUmN,EAAU9L,EAAUjG,EAASC,EAAYp9H,IAC/E,OAAO2hI,EAAKlmM,KAAKgmM,EAErB,IAAI,CACN5mM,GAAS,EACT,KACF,OACK,GACDq0M,IAAa9L,IACXrB,EAAUmN,EAAU9L,EAAUjG,EAASC,EAAYp9H,GACpD,CACLnlE,GAAS,EACT,KACF,CACF,CAGA,OAFAmlE,EAAc,OAAE1tD,GAChB0tD,EAAc,OAAEmhI,GACTtmM,CACT,CAyKA,SAAS4wM,GAAS7qL,GAChB,OAAO6lL,GAAYC,GAAS9lL,EAAMnhB,EAAW0vM,IAAUvuL,EAAO,GAChE,CASA,SAASm+K,GAAWrkL,GAClB,OAAOimL,GAAejmL,EAAQrc,GAAM4/L,GACtC,CAUA,SAASa,GAAapkL,GACpB,OAAOimL,GAAejmL,EAAQqjL,GAAQF,GACxC,CASA,IAAI1sD,GAAWgoD,GAAiB,SAASv4K,GACvC,OAAOu4K,GAAQ39L,IAAIolB,EACrB,EAFyBu/C,GAWzB,SAAS2rI,GAAYlrL,GAKnB,IAJA,IAAI/lB,EAAU+lB,EAAK3lB,KAAO,GACtBqX,EAAQ8mL,GAAUv+L,GAClBmB,EAASoF,GAAeyO,KAAKupL,GAAWv+L,GAAUyX,EAAMtW,OAAS,EAE9DA,KAAU,CACf,IAAIoC,EAAOkU,EAAMtW,GACbozM,EAAYhxM,EAAKwiB,KACrB,GAAiB,MAAbwuL,GAAqBA,GAAaxuL,EACpC,OAAOxiB,EAAKnD,IAEhB,CACA,OAAOJ,CACT,CASA,SAAS4xM,GAAU7rL,GAEjB,OADaxf,GAAeyO,KAAKiqL,GAAQ,eAAiBA,GAASl5K,GACrDu1K,WAChB,CAaA,SAASqP,KACP,IAAI3qM,EAASi/L,GAAO1G,UAAYA,GAEhC,OADAv4L,EAASA,IAAWu4L,GAAW4Q,GAAenpM,EACvCkB,UAAUC,OAASnB,EAAOkB,UAAU,GAAIA,UAAU,IAAMlB,CACjE,CAUA,SAAS2kM,GAAWvrM,EAAKqK,GACvB,IAgYiBuF,EACb2W,EAjYApc,EAAOnK,EAAImnM,SACf,OAiYgB,WADZ5gL,SADa3W,EA/XAvF,KAiYmB,UAARkc,GAA4B,UAARA,GAA4B,WAARA,EACrD,cAAV3W,EACU,OAAVA,GAlYDzF,EAAmB,iBAAPE,EAAkB,SAAW,QACzCF,EAAKnK,GACX,CASA,SAASuwM,GAAa9pL,GAIpB,IAHA,IAAI7f,EAASwD,GAAKqc,GACd1e,EAASnB,EAAOmB,OAEbA,KAAU,CACf,IAAIsC,EAAMzD,EAAOmB,GACb6H,EAAQ6W,EAAOpc,GAEnBzD,EAAOmB,GAAU,CAACsC,EAAKuF,EAAO8gM,GAAmB9gM,GACnD,CACA,OAAOhJ,CACT,CAUA,SAASm9L,GAAUt9K,EAAQpc,GACzB,IAAIuF,EAlxJR,SAAkB6W,EAAQpc,GACxB,OAAiB,MAAVoc,EAAiBjb,EAAYib,EAAOpc,EAC7C,CAgxJgB0X,CAAS0E,EAAQpc,GAC7B,OAAOylM,GAAalgM,GAASA,EAAQpE,CACvC,CAoCA,IAAIw+L,GAAc3F,GAA+B,SAAS59K,GACxD,OAAc,MAAVA,EACK,IAETA,EAASzd,GAAOyd,GACT+4K,GAAY6E,GAAiB59K,IAAS,SAASygB,GACpD,OAAO/H,GAAqBvjB,KAAK6K,EAAQygB,EAC3C,IACF,EARqCk0K,GAiBjCxR,GAAgBvF,GAA+B,SAAS59K,GAE1D,IADA,IAAI7f,EAAS,GACN6f,GACLqtI,GAAUltJ,EAAQojM,GAAWvjL,IAC7BA,EAASg9K,GAAah9K,GAExB,OAAO7f,CACT,EAPuCw0M,GAgBnC5R,GAASqD,GA2Eb,SAASwO,GAAQ50L,EAAQkU,EAAM2gL,GAO7B,IAJA,IAAIrwM,GAAS,EACTlD,GAHJ4yB,EAAO6xK,GAAS7xK,EAAMlU,IAGJ1e,OACdnB,GAAS,IAEJqE,EAAQlD,GAAQ,CACvB,IAAIsC,EAAMoiM,GAAM9xK,EAAK1vB,IACrB,KAAMrE,EAAmB,MAAV6f,GAAkB60L,EAAQ70L,EAAQpc,IAC/C,MAEFoc,EAASA,EAAOpc,EAClB,CACA,OAAIzD,KAAYqE,GAASlD,EAChBnB,KAETmB,EAAmB,MAAV0e,EAAiB,EAAIA,EAAO1e,SAClBwzM,GAASxzM,IAAW8/L,GAAQx9L,EAAKtC,KACjDokB,GAAQ1F,IAAWghL,GAAYhhL,GACpC,CA4BA,SAASkjL,GAAgBljL,GACvB,MAAqC,mBAAtBA,EAAOhL,aAA8B20L,GAAY3pL,GAE5D,CAAC,EADDy/K,GAAWzC,GAAah9K,GAE9B,CA4EA,SAASylL,GAAct8L,GACrB,OAAOuc,GAAQvc,IAAU63L,GAAY73L,OAChC+zL,IAAoB/zL,GAASA,EAAM+zL,IAC1C,CAUA,SAASkE,GAAQj4L,EAAO7H,GACtB,IAAIwe,SAAc3W,EAGlB,SAFA7H,EAAmB,MAAVA,EAAiBsvL,EAAmBtvL,KAGlC,UAARwe,GACU,UAARA,GAAoBw0K,GAASx6L,KAAKqP,KAChCA,GAAS,GAAKA,EAAQ,GAAK,GAAKA,EAAQ7H,CACjD,CAYA,SAAS8uM,GAAejnM,EAAO3E,EAAOwb,GACpC,IAAKm8C,GAASn8C,GACZ,OAAO,EAET,IAAIF,SAActb,EAClB,SAAY,UAARsb,EACKijJ,GAAY/iJ,IAAWohL,GAAQ58L,EAAOwb,EAAO1e,QACrC,UAARwe,GAAoBtb,KAASwb,IAE7Bi8H,GAAGj8H,EAAOxb,GAAQ2E,EAG7B,CAUA,SAAS6gM,GAAM7gM,EAAO6W,GACpB,GAAI0F,GAAQvc,GACV,OAAO,EAET,IAAI2W,SAAc3W,EAClB,QAAY,UAAR2W,GAA4B,UAARA,GAA4B,WAARA,GAC/B,MAAT3W,IAAiBsgJ,GAAStgJ,KAGvBmqL,EAAcx5L,KAAKqP,KAAWkqL,EAAav5L,KAAKqP,IAC1C,MAAV6W,GAAkB7W,KAAS5G,GAAOyd,EACvC,CAwBA,SAASqxL,GAAWnrL,GAClB,IAAIypK,EAAWyhB,GAAYlrL,GACvBugL,EAAQrH,GAAOzP,GAEnB,GAAoB,mBAAT8W,KAAyB9W,KAAY2P,GAAY3qL,WAC1D,OAAO,EAET,GAAIuR,IAASugL,EACX,OAAO,EAET,IAAI/iM,EAAO+yI,GAAQgwD,GACnB,QAAS/iM,GAAQwiB,IAASxiB,EAAK,EACjC,EA9SKg6J,IAAYqlC,GAAO,IAAIrlC,GAAS,IAAIL,YAAY,MAAQ40B,GACxDjyL,IAAO+iM,GAAO,IAAI/iM,KAAQuxL,GAC1B1sL,IAAWk+L,GAAOl+L,GAAQD,YAAc8sL,GACxCxxL,IAAO6iM,GAAO,IAAI7iM,KAAQ0xL,GAC1BriJ,IAAWwzJ,GAAO,IAAIxzJ,KAAYwiJ,KACrCgR,GAAS,SAAS55L,GAChB,IAAIhJ,EAASimM,GAAWj9L,GACpBw6J,EAAOxjK,GAAUsxL,EAAYtoL,EAAM6L,YAAcjQ,EACjDgwM,EAAapxC,EAAOi7B,GAASj7B,GAAQ,GAEzC,GAAIoxC,EACF,OAAQA,GACN,KAAKpW,GAAoB,OAAO1M,EAChC,KAAK4M,GAAe,OAAOtN,EAC3B,KAAKuN,GAAmB,OAAOpN,EAC/B,KAAKqN,GAAe,OAAOnN,EAC3B,KAAKoN,GAAmB,OAAOjN,EAGnC,OAAO5xL,CACT,GA8SF,IAAI60M,GAAa1Y,GAAa1gD,GAAaq5D,GAS3C,SAAStL,GAAYxgM,GACnB,IAAIw6J,EAAOx6J,GAASA,EAAM6L,YAG1B,OAAO7L,KAFqB,mBAARw6J,GAAsBA,EAAKhvJ,WAAc0nL,GAG/D,CAUA,SAAS4N,GAAmB9gM,GAC1B,OAAOA,GAAUA,IAAUgzD,GAAShzD,EACtC,CAWA,SAAS4gM,GAAwBnmM,EAAKulM,GACpC,OAAO,SAASnpL,GACd,OAAc,MAAVA,GAGGA,EAAOpc,KAASulM,IACpBA,IAAapkM,GAAcnB,KAAOrB,GAAOyd,GAC9C,CACF,CAoIA,SAASgsL,GAAS9lL,EAAM/mB,EAAOR,GAE7B,OADAQ,EAAQ++L,GAAU/+L,IAAU4F,EAAamhB,EAAK5kB,OAAS,EAAKnC,EAAO,GAC5D,WAML,IALA,IAAIoC,EAAOF,UACPmD,GAAS,EACTlD,EAAS48L,GAAU38L,EAAKD,OAASnC,EAAO,GACxCyY,EAAQpW,EAAMF,KAETkD,EAAQlD,GACfsW,EAAMpT,GAASjD,EAAKpC,EAAQqF,GAE9BA,GAAS,EAET,IADA,IAAI0wM,EAAY1zM,EAAMrC,EAAQ,KACrBqF,EAAQrF,GACf+1M,EAAU1wM,GAASjD,EAAKiD,GAG1B,OADA0wM,EAAU/1M,GAASR,EAAUiZ,GACtBsH,GAAMgH,EAAM/O,KAAM+9L,EAC3B,CACF,CAUA,SAASttM,GAAOoY,EAAQkU,GACtB,OAAOA,EAAK5yB,OAAS,EAAI0e,EAAS8lL,GAAQ9lL,EAAQwsL,GAAUt4K,EAAM,GAAI,GACxE,CAgCA,SAASm2K,GAAQrqL,EAAQpc,GACvB,IAAY,gBAARA,GAAgD,mBAAhBoc,EAAOpc,KAIhC,aAAPA,EAIJ,OAAOoc,EAAOpc,EAChB,CAgBA,IAAI0vM,GAAU6B,GAAS/I,IAUnB10K,GAAa+lK,IAAiB,SAASv3K,EAAM6sJ,GAC/C,OAAOh8H,GAAKrf,WAAWxR,EAAM6sJ,EAC/B,EAUIg5B,GAAcoJ,GAAS9I,IAY3B,SAASkH,GAAgBpC,EAAS3xM,EAAWijM,GAC3C,IAAIz+J,EAAUxkC,EAAY,GAC1B,OAAOusM,GAAYoF,EA1brB,SAA2BntK,EAAQoxK,GACjC,IAAI9zM,EAAS8zM,EAAQ9zM,OACrB,IAAKA,EACH,OAAO0iC,EAET,IAAI4H,EAAYtqC,EAAS,EAGzB,OAFA8zM,EAAQxpK,IAActqC,EAAS,EAAI,KAAO,IAAM8zM,EAAQxpK,GACxDwpK,EAAUA,EAAQz7M,KAAK2H,EAAS,EAAI,KAAO,KACpC0iC,EAAOx8B,QAAQmsL,GAAe,uBAAyByhB,EAAU,SAC1E,CAib8BC,CAAkBrxK,EAqHhD,SAA2BoxK,EAAS3S,GAOlC,OANA7J,GAAU7H,GAAW,SAASv3J,GAC5B,IAAIrwB,EAAQ,KAAOqwB,EAAK,GACnBipK,EAAUjpK,EAAK,KAAQy/J,GAAcmc,EAASjsM,IACjDisM,EAAQr0M,KAAKoI,EAEjB,IACOisM,EAAQh1M,MACjB,CA7HwDk1M,CAtjBxD,SAAwBtxK,GACtB,IAAI+b,EAAQ/b,EAAO+b,MAAM6zI,IACzB,OAAO7zI,EAAQA,EAAM,GAAG36C,MAAMyuL,IAAkB,EAClD,CAmjB0E0hB,CAAevxK,GAASy+J,IAClG,CAWA,SAAS0S,GAASjvL,GAChB,IAAIjI,EAAQ,EACRu3L,EAAa,EAEjB,OAAO,WACL,IAAIC,EAAQrX,KACR7rB,EApiNK,IAoiNmBkjC,EAAQD,GAGpC,GADAA,EAAaC,EACTljC,EAAY,GACd,KAAMt0J,GAziNE,IA0iNN,OAAO5c,UAAU,QAGnB4c,EAAQ,EAEV,OAAOiI,EAAKhH,MAAMna,EAAW1D,UAC/B,CACF,CAUA,SAASmgM,GAAY5pL,EAAO2I,GAC1B,IAAI/b,GAAS,EACTlD,EAASsW,EAAMtW,OACfsqC,EAAYtqC,EAAS,EAGzB,IADAif,EAAOA,IAASxb,EAAYzD,EAASif,IAC5B/b,EAAQ+b,GAAM,CACrB,IAAIm1L,EAAOpU,GAAW98L,EAAOonC,GACzBziC,EAAQyO,EAAM89L,GAElB99L,EAAM89L,GAAQ99L,EAAMpT,GACpBoT,EAAMpT,GAAS2E,CACjB,CAEA,OADAyO,EAAMtW,OAASif,EACR3I,CACT,CASA,IAtTMzX,GAOAyqB,GA+SF20I,IAtTEp/J,GAASw1M,IAsTkB,SAAS1sI,GACxC,IAAI9oE,EAAS,GAOb,OAN6B,KAAzB8oE,EAAOn/C,WAAW,IACpB3pB,EAAOY,KAAK,IAEdkoE,EAAOzhE,QAAQ03J,IAAY,SAASn/G,EAAOypG,EAAQr5H,EAAOmvI,GACxDn/J,EAAOY,KAAKovB,EAAQmvI,EAAU93J,QAAQ23J,GAAc,MAAS3V,GAAUzpG,EACzE,IACO5/C,CACT,IA/T6B,SAASyD,GAIlC,OAh0MiB,MA6zMbgnB,GAAMrK,MACRqK,GAAM+I,QAED/vB,CACT,IAEIgnB,GAAQzqB,GAAOyqB,MACZzqB,IAgUT,SAAS6lM,GAAM78L,GACb,GAAoB,iBAATA,GAAqBsgJ,GAAStgJ,GACvC,OAAOA,EAET,IAAIhJ,EAAUgJ,EAAQ,GACtB,MAAkB,KAAVhJ,GAAkB,EAAIgJ,IAAU,IAAa,KAAOhJ,CAC9D,CASA,SAASy+L,GAAS14K,GAChB,GAAY,MAARA,EAAc,CAChB,IACE,OAAOq2K,GAAapnL,KAAK+Q,EAC3B,CAAE,MAAOokB,GAAI,CACb,IACE,OAAQpkB,EAAO,EACjB,CAAE,MAAOokB,GAAI,CACf,CACA,MAAO,EACT,CA2BA,SAASk1J,GAAa2R,GACpB,GAAIA,aAAmB7R,GACrB,OAAO6R,EAAQljD,QAEjB,IAAI9tJ,EAAS,IAAIo/L,GAAc4R,EAAQvR,YAAauR,EAAQrR,WAI5D,OAHA3/L,EAAO0/L,YAAc4B,GAAU0P,EAAQtR,aACvC1/L,EAAO4/L,UAAaoR,EAAQpR,UAC5B5/L,EAAO6/L,WAAamR,EAAQnR,WACrB7/L,CACT,CAqIA,IAAIy1M,GAAa9J,IAAS,SAASl0L,EAAOsR,GACxC,OAAOqhL,GAAkB3yL,GACrB4sL,GAAe5sL,EAAO2tL,GAAYr8K,EAAQ,EAAGqhL,IAAmB,IAChE,EACN,IA4BIsL,GAAe/J,IAAS,SAASl0L,EAAOsR,GAC1C,IAAIwvK,EAAWloK,GAAKtH,GAIpB,OAHIqhL,GAAkB7R,KACpBA,EAAW3zL,GAENwlM,GAAkB3yL,GACrB4sL,GAAe5sL,EAAO2tL,GAAYr8K,EAAQ,EAAGqhL,IAAmB,GAAOO,GAAYpS,EAAU,IAC7F,EACN,IAyBIod,GAAiBhK,IAAS,SAASl0L,EAAOsR,GAC5C,IAAIkwK,EAAa5oK,GAAKtH,GAItB,OAHIqhL,GAAkBnR,KACpBA,EAAar0L,GAERwlM,GAAkB3yL,GACrB4sL,GAAe5sL,EAAO2tL,GAAYr8K,EAAQ,EAAGqhL,IAAmB,GAAOxlM,EAAWq0L,GAClF,EACN,IAqOA,SAAS1+J,GAAU9iB,EAAOg1B,EAAWg2G,GACnC,IAAIthJ,EAAkB,MAATsW,EAAgB,EAAIA,EAAMtW,OACvC,IAAKA,EACH,OAAQ,EAEV,IAAIkD,EAAqB,MAAbo+I,EAAoB,EAAI32G,GAAU22G,GAI9C,OAHIp+I,EAAQ,IACVA,EAAQ05L,GAAU58L,EAASkD,EAAO,IAE7Bs1L,GAAcliL,EAAOkzL,GAAYl+J,EAAW,GAAIpoC,EACzD,CAqCA,SAASuxM,GAAcn+L,EAAOg1B,EAAWg2G,GACvC,IAAIthJ,EAAkB,MAATsW,EAAgB,EAAIA,EAAMtW,OACvC,IAAKA,EACH,OAAQ,EAEV,IAAIkD,EAAQlD,EAAS,EAOrB,OANIshJ,IAAc79I,IAChBP,EAAQynC,GAAU22G,GAClBp+I,EAAQo+I,EAAY,EAChBs7C,GAAU58L,EAASkD,EAAO,GAC1B25L,GAAU35L,EAAOlD,EAAS,IAEzBw4L,GAAcliL,EAAOkzL,GAAYl+J,EAAW,GAAIpoC,GAAO,EAChE,CAgBA,SAASiwM,GAAQ78L,GAEf,OADsB,MAATA,GAAoBA,EAAMtW,OACvBikM,GAAY3tL,EAAO,GAAK,EAC1C,CA+FA,SAASgtD,GAAKhtD,GACZ,OAAQA,GAASA,EAAMtW,OAAUsW,EAAM,GAAK7S,CAC9C,CAyEA,IAAIixM,GAAelK,IAAS,SAASjF,GACnC,IAAIt6B,EAAS8sB,GAASwN,EAAQ2H,IAC9B,OAAQjiC,EAAOjrK,QAAUirK,EAAO,KAAOs6B,EAAO,GAC1CD,GAAiBr6B,GACjB,EACN,IAyBI0pC,GAAiBnK,IAAS,SAASjF,GACrC,IAAInO,EAAWloK,GAAKq2K,GAChBt6B,EAAS8sB,GAASwN,EAAQ2H,IAO9B,OALI9V,IAAaloK,GAAK+7I,GACpBmsB,EAAW3zL,EAEXwnK,EAAOnrJ,MAEDmrJ,EAAOjrK,QAAUirK,EAAO,KAAOs6B,EAAO,GAC1CD,GAAiBr6B,EAAQu+B,GAAYpS,EAAU,IAC/C,EACN,IAuBIwd,GAAmBpK,IAAS,SAASjF,GACvC,IAAIzN,EAAa5oK,GAAKq2K,GAClBt6B,EAAS8sB,GAASwN,EAAQ2H,IAM9B,OAJApV,EAAkC,mBAAdA,EAA2BA,EAAar0L,IAE1DwnK,EAAOnrJ,MAEDmrJ,EAAOjrK,QAAUirK,EAAO,KAAOs6B,EAAO,GAC1CD,GAAiBr6B,EAAQxnK,EAAWq0L,GACpC,EACN,IAmCA,SAAS5oK,GAAK5Y,GACZ,IAAItW,EAAkB,MAATsW,EAAgB,EAAIA,EAAMtW,OACvC,OAAOA,EAASsW,EAAMtW,EAAS,GAAKyD,CACtC,CAsFA,IAAIoxM,GAAOrK,GAASsK,IAsBpB,SAASA,GAAQx+L,EAAOsR,GACtB,OAAQtR,GAASA,EAAMtW,QAAU4nB,GAAUA,EAAO5nB,OAC9CmqM,GAAY7zL,EAAOsR,GACnBtR,CACN,CAoFA,IAAIy+L,GAAStF,IAAS,SAASn5L,EAAO+zL,GACpC,IAAIrqM,EAAkB,MAATsW,EAAgB,EAAIA,EAAMtW,OACnCnB,EAASkiM,GAAOzqL,EAAO+zL,GAM3B,OAJAD,GAAW9zL,EAAOyhL,GAASsS,GAAS,SAASnnM,GAC3C,OAAO48L,GAAQ58L,EAAOlD,IAAWkD,EAAQA,CAC3C,IAAGpE,KAAKgrM,KAEDjrM,CACT,IA0EA,SAASgd,GAAQvF,GACf,OAAgB,MAATA,EAAgBA,EAAQ2mL,GAAcppL,KAAKyC,EACpD,CAiaA,IAAI0+L,GAAQxK,IAAS,SAASjF,GAC5B,OAAO8G,GAASpI,GAAYsB,EAAQ,EAAG0D,IAAmB,GAC5D,IAyBIgM,GAAUzK,IAAS,SAASjF,GAC9B,IAAInO,EAAWloK,GAAKq2K,GAIpB,OAHI0D,GAAkB7R,KACpBA,EAAW3zL,GAEN4oM,GAASpI,GAAYsB,EAAQ,EAAG0D,IAAmB,GAAOO,GAAYpS,EAAU,GACzF,IAuBI8d,GAAY1K,IAAS,SAASjF,GAChC,IAAIzN,EAAa5oK,GAAKq2K,GAEtB,OADAzN,EAAkC,mBAAdA,EAA2BA,EAAar0L,EACrD4oM,GAASpI,GAAYsB,EAAQ,EAAG0D,IAAmB,GAAOxlM,EAAWq0L,EAC9E,IA+FA,SAASqd,GAAM7+L,GACb,IAAMA,IAASA,EAAMtW,OACnB,MAAO,GAET,IAAIA,EAAS,EAOb,OANAsW,EAAQmhL,GAAYnhL,GAAO,SAAS8+L,GAClC,GAAInM,GAAkBmM,GAEpB,OADAp1M,EAAS48L,GAAUwY,EAAMp1M,OAAQA,IAC1B,CAEX,IACOi5L,GAAUj5L,GAAQ,SAASkD,GAChC,OAAO60L,GAASzhL,EAAO+hL,GAAan1L,GACtC,GACF,CAuBA,SAASmyM,GAAU/+L,EAAO8gL,GACxB,IAAM9gL,IAASA,EAAMtW,OACnB,MAAO,GAET,IAAInB,EAASs2M,GAAM7+L,GACnB,OAAgB,MAAZ8gL,EACKv4L,EAEFk5L,GAASl5L,GAAQ,SAASu2M,GAC/B,OAAOx3L,GAAMw5K,EAAU3zL,EAAW2xM,EACpC,GACF,CAsBA,IAAIE,GAAU9K,IAAS,SAASl0L,EAAOsR,GACrC,OAAOqhL,GAAkB3yL,GACrB4sL,GAAe5sL,EAAOsR,GACtB,EACN,IAoBI2tL,GAAM/K,IAAS,SAASjF,GAC1B,OAAOuH,GAAQrV,GAAY8N,EAAQ0D,IACrC,IAyBIuM,GAAQhL,IAAS,SAASjF,GAC5B,IAAInO,EAAWloK,GAAKq2K,GAIpB,OAHI0D,GAAkB7R,KACpBA,EAAW3zL,GAENqpM,GAAQrV,GAAY8N,EAAQ0D,IAAoBO,GAAYpS,EAAU,GAC/E,IAuBIqe,GAAUjL,IAAS,SAASjF,GAC9B,IAAIzN,EAAa5oK,GAAKq2K,GAEtB,OADAzN,EAAkC,mBAAdA,EAA2BA,EAAar0L,EACrDqpM,GAAQrV,GAAY8N,EAAQ0D,IAAoBxlM,EAAWq0L,EACpE,IAkBI4d,GAAMlL,GAAS2K,IA6DfQ,GAAUnL,IAAS,SAASjF,GAC9B,IAAIvlM,EAASulM,EAAOvlM,OAChBo3L,EAAWp3L,EAAS,EAAIulM,EAAOvlM,EAAS,GAAKyD,EAGjD,OADA2zL,EAA8B,mBAAZA,GAA0BmO,EAAOzlL,MAAOs3K,GAAY3zL,EAC/D4xM,GAAU9P,EAAQnO,EAC3B,IAiCA,SAASl9E,GAAMryG,GACb,IAAIhJ,EAASi/L,GAAOj2L,GAEpB,OADAhJ,EAAO2/L,WAAY,EACZ3/L,CACT,CAqDA,SAAS+wM,GAAK/nM,EAAO+tM,GACnB,OAAOA,EAAY/tM,EACrB,CAkBA,IAAIguM,GAAYpG,IAAS,SAAS7gJ,GAChC,IAAI5uD,EAAS4uD,EAAM5uD,OACfnC,EAAQmC,EAAS4uD,EAAM,GAAK,EAC5B/mD,EAAQgO,KAAKyoL,YACbsX,EAAc,SAASl3L,GAAU,OAAOqiL,GAAOriL,EAAQkwC,EAAQ,EAEnE,QAAI5uD,EAAS,GAAK6V,KAAK0oL,YAAYv+L,SAC7B6H,aAAiBm2L,IAAiB8B,GAAQjiM,KAGhDgK,EAAQA,EAAMmG,MAAMnQ,GAAQA,GAASmC,EAAS,EAAI,KAC5Cu+L,YAAY9+L,KAAK,CACrB,KAAQmwM,GACR,KAAQ,CAACgG,GACT,QAAWnyM,IAEN,IAAIw6L,GAAcp2L,EAAOgO,KAAK2oL,WAAWoR,MAAK,SAASt5L,GAI5D,OAHItW,IAAWsW,EAAMtW,QACnBsW,EAAM7W,KAAKgE,GAEN6S,CACT,KAbST,KAAK+5L,KAAKgG,EAcrB,IAiPIE,GAAUrH,IAAiB,SAAS5vM,EAAQgJ,EAAOvF,GACjD8C,GAAeyO,KAAKhV,EAAQyD,KAC5BzD,EAAOyD,GAETi+L,GAAgB1hM,EAAQyD,EAAK,EAEjC,IAqIIyL,GAAOuhM,GAAWl2K,IAqBlB28K,GAAWzG,GAAWmF,IA2G1B,SAASr1M,GAAQ6e,EAAYm5K,GAE3B,OADWhzK,GAAQnG,GAAcq5K,GAAYsJ,IACjC3iL,EAAYurL,GAAYpS,EAAU,GAChD,CAsBA,SAAS4e,GAAa/3L,EAAYm5K,GAEhC,OADWhzK,GAAQnG,GAAcs5K,GAAiBqM,IACtC3lL,EAAYurL,GAAYpS,EAAU,GAChD,CAyBA,IAAI6e,GAAUxH,IAAiB,SAAS5vM,EAAQgJ,EAAOvF,GACjD8C,GAAeyO,KAAKhV,EAAQyD,GAC9BzD,EAAOyD,GAAK7C,KAAKoI,GAEjB04L,GAAgB1hM,EAAQyD,EAAK,CAACuF,GAElC,IAoEIquM,GAAY1L,IAAS,SAASvsL,EAAY2U,EAAM3yB,GAClD,IAAIiD,GAAS,EACTw+L,EAAwB,mBAAR9uK,EAChB/zB,EAAS4iK,GAAYxjJ,GAAc/d,EAAM+d,EAAWje,QAAU,GAKlE,OAHA4gM,GAAS3iL,GAAY,SAASpW,GAC5BhJ,IAASqE,GAASw+L,EAAS9jL,GAAMgV,EAAM/qB,EAAO5H,GAAQ2lM,GAAW/9L,EAAO+qB,EAAM3yB,EAChF,IACOpB,CACT,IA8BIs3M,GAAQ1H,IAAiB,SAAS5vM,EAAQgJ,EAAOvF,GACnDi+L,GAAgB1hM,EAAQyD,EAAKuF,EAC/B,IA4CA,SAAS5P,GAAIgmB,EAAYm5K,GAEvB,OADWhzK,GAAQnG,GAAc85K,GAAWwQ,IAChCtqL,EAAYurL,GAAYpS,EAAU,GAChD,CAiFA,IAAIgf,GAAY3H,IAAiB,SAAS5vM,EAAQgJ,EAAOvF,GACvDzD,EAAOyD,EAAM,EAAI,GAAG7C,KAAKoI,EAC3B,IAAG,WAAa,MAAO,CAAC,GAAI,GAAK,IAmS7BwuM,GAAS7L,IAAS,SAASvsL,EAAYqrL,GACzC,GAAkB,MAAdrrL,EACF,MAAO,GAET,IAAIje,EAASspM,EAAUtpM,OAMvB,OALIA,EAAS,GAAK8uM,GAAe7wL,EAAYqrL,EAAU,GAAIA,EAAU,IACnEA,EAAY,GACHtpM,EAAS,GAAK8uM,GAAexF,EAAU,GAAIA,EAAU,GAAIA,EAAU,MAC5EA,EAAY,CAACA,EAAU,KAElBD,GAAYprL,EAAYgmL,GAAYqF,EAAW,GAAI,GAC5D,IAoBI/qI,GAAM29H,IAAU,WAClB,OAAOzmJ,GAAK6oB,KAAKC,KACnB,EAyDA,SAAS2G,GAAItgD,EAAMgnB,EAAGijK,GAGpB,OAFAjjK,EAAIijK,EAAQprM,EAAYmoC,EACxBA,EAAKhnB,GAAa,MAALgnB,EAAahnB,EAAK5kB,OAAS4rC,EACjC0mK,GAAW1tL,EAAMwqK,EAAe3rL,EAAWA,EAAWA,EAAWA,EAAWmoC,EACrF,CAmBA,SAASm+D,GAAOn+D,EAAGhnB,GACjB,IAAI/lB,EACJ,GAAmB,mBAAR+lB,EACT,MAAM,IAAI1Q,GAAU86K,GAGtB,OADApjJ,EAAIjB,GAAUiB,GACP,WAOL,QANMA,EAAI,IACR/sC,EAAS+lB,EAAKhH,MAAM/H,KAAM9V,YAExB6rC,GAAK,IACPhnB,EAAOnhB,GAEF5E,CACT,CACF,CAqCA,IAAI0iB,GAAOipL,IAAS,SAAS5lL,EAAM2mB,EAASmiK,GAC1C,IAAIvM,EAv4Ta,EAw4TjB,GAAIuM,EAAS1tM,OAAQ,CACnB,IAAI2tM,EAAUzT,GAAewT,EAAU+C,GAAUlvL,KACjD4/K,GAAWhS,CACb,CACA,OAAOmjB,GAAW1tL,EAAMu8K,EAAS51J,EAASmiK,EAAUC,EACtD,IA+CI2I,GAAU9L,IAAS,SAAS9rL,EAAQpc,EAAKorM,GAC3C,IAAIvM,EAAUoV,EACd,GAAI7I,EAAS1tM,OAAQ,CACnB,IAAI2tM,EAAUzT,GAAewT,EAAU+C,GAAU6F,KACjDnV,GAAWhS,CACb,CACA,OAAOmjB,GAAWhwM,EAAK6+L,EAASziL,EAAQgvL,EAAUC,EACpD,IAqJA,SAAS6I,GAAS5xL,EAAM6sJ,EAAM7wK,GAC5B,IAAI61M,EACAC,EACAC,EACA93M,EACA+3M,EACAC,EACAC,EAAiB,EACjBC,GAAU,EACVC,GAAS,EACT/H,GAAW,EAEf,GAAmB,mBAARrqL,EACT,MAAM,IAAI1Q,GAAU86K,GAUtB,SAASioB,EAAWh/F,GAClB,IAAIh4G,EAAOw2M,EACPlrK,EAAUmrK,EAKd,OAHAD,EAAWC,EAAWjzM,EACtBqzM,EAAiB7+F,EACjBp5G,EAAS+lB,EAAKhH,MAAM2tB,EAAStrC,EAE/B,CAqBA,SAASi3M,EAAaj/F,GACpB,IAAIk/F,EAAoBl/F,EAAO4+F,EAM/B,OAAQA,IAAiBpzM,GAAc0zM,GAAqB1lC,GACzD0lC,EAAoB,GAAOH,GANJ/+F,EAAO6+F,GAM8BH,CACjE,CAEA,SAASS,IACP,IAAIn/F,EAAO15C,KACX,GAAI24I,EAAaj/F,GACf,OAAOo/F,EAAap/F,GAGtB2+F,EAAUxgL,GAAWghL,EA3BvB,SAAuBn/F,GACrB,IAEIq/F,EAAc7lC,GAFMx5D,EAAO4+F,GAI/B,OAAOG,EACHna,GAAUya,EAAaX,GAJD1+F,EAAO6+F,IAK7BQ,CACN,CAmBqCC,CAAct/F,GACnD,CAEA,SAASo/F,EAAap/F,GAKpB,OAJA2+F,EAAUnzM,EAINwrM,GAAYwH,EACPQ,EAAWh/F,IAEpBw+F,EAAWC,EAAWjzM,EACf5E,EACT,CAcA,SAAS24M,IACP,IAAIv/F,EAAO15C,KACPk5I,EAAaP,EAAaj/F,GAM9B,GAJAw+F,EAAW12M,UACX22M,EAAW7gM,KACXghM,EAAe5+F,EAEXw/F,EAAY,CACd,GAAIb,IAAYnzM,EACd,OAzEN,SAAqBw0G,GAMnB,OAJA6+F,EAAiB7+F,EAEjB2+F,EAAUxgL,GAAWghL,EAAc3lC,GAE5BslC,EAAUE,EAAWh/F,GAAQp5G,CACtC,CAkEa64M,CAAYb,GAErB,GAAIG,EAIF,OAFAl6H,GAAa85H,GACbA,EAAUxgL,GAAWghL,EAAc3lC,GAC5BwlC,EAAWJ,EAEtB,CAIA,OAHID,IAAYnzM,IACdmzM,EAAUxgL,GAAWghL,EAAc3lC,IAE9B5yK,CACT,CAGA,OA3GA4yK,EAAOn3J,GAASm3J,IAAS,EACrB52G,GAASj6D,KACXm2M,IAAYn2M,EAAQm2M,QAEpBJ,GADAK,EAAS,YAAap2M,GACHg8L,GAAUtiL,GAAS1Z,EAAQ+1M,UAAY,EAAGllC,GAAQklC,EACrE1H,EAAW,aAAcruM,IAAYA,EAAQquM,SAAWA,GAoG1DuI,EAAUr7J,OApCV,WACMy6J,IAAYnzM,GACdq5E,GAAa85H,GAEfE,EAAiB,EACjBL,EAAWI,EAAeH,EAAWE,EAAUnzM,CACjD,EA+BA+zM,EAAUrgM,MA7BV,WACE,OAAOy/L,IAAYnzM,EAAY5E,EAASw4M,EAAa94I,KACvD,EA4BOi5I,CACT,CAoBA,IAAI/yJ,GAAQ+lJ,IAAS,SAAS5lL,EAAM3kB,GAClC,OAAOgjM,GAAUr+K,EAAM,EAAG3kB,EAC5B,IAqBImvF,GAAQo7G,IAAS,SAAS5lL,EAAM6sJ,EAAMxxK,GACxC,OAAOgjM,GAAUr+K,EAAMtK,GAASm3J,IAAS,EAAGxxK,EAC9C,IAoEA,SAASo0M,GAAQzvL,EAAMwtB,GACrB,GAAmB,mBAARxtB,GAAmC,MAAZwtB,GAAuC,mBAAZA,EAC3D,MAAM,IAAIl+B,GAAU86K,GAEtB,IAAI2oB,EAAW,WACb,IAAI13M,EAAOF,UACPuC,EAAM8vC,EAAWA,EAASx0B,MAAM/H,KAAM5V,GAAQA,EAAK,GACnDqpB,EAAQquL,EAASruL,MAErB,GAAIA,EAAMhqB,IAAIgD,GACZ,OAAOgnB,EAAM9pB,IAAI8C,GAEnB,IAAIzD,EAAS+lB,EAAKhH,MAAM/H,KAAM5V,GAE9B,OADA03M,EAASruL,MAAQA,EAAM5pB,IAAI4C,EAAKzD,IAAWyqB,EACpCzqB,CACT,EAEA,OADA84M,EAASruL,MAAQ,IAAK+qL,GAAQuD,OAAS1Y,IAChCyY,CACT,CAyBA,SAASE,GAAOvsK,GACd,GAAwB,mBAAbA,EACT,MAAM,IAAIp3B,GAAU86K,GAEtB,OAAO,WACL,IAAI/uL,EAAOF,UACX,OAAQE,EAAKD,QACX,KAAK,EAAG,OAAQsrC,EAAUz3B,KAAKgC,MAC/B,KAAK,EAAG,OAAQy1B,EAAUz3B,KAAKgC,KAAM5V,EAAK,IAC1C,KAAK,EAAG,OAAQqrC,EAAUz3B,KAAKgC,KAAM5V,EAAK,GAAIA,EAAK,IACnD,KAAK,EAAG,OAAQqrC,EAAUz3B,KAAKgC,KAAM5V,EAAK,GAAIA,EAAK,GAAIA,EAAK,IAE9D,OAAQqrC,EAAU1tB,MAAM/H,KAAM5V,EAChC,CACF,CApCAo0M,GAAQuD,MAAQ1Y,GA2FhB,IAAI4Y,GAAW1K,IAAS,SAASxoL,EAAMmzL,GAKrC,IAAIC,GAJJD,EAAmC,GAArBA,EAAW/3M,QAAeokB,GAAQ2zL,EAAW,IACvDhgB,GAASggB,EAAW,GAAI3e,GAAUoQ,OAClCzR,GAASkM,GAAY8T,EAAY,GAAI3e,GAAUoQ,QAEtBxpM,OAC7B,OAAOwqM,IAAS,SAASvqM,GAIvB,IAHA,IAAIiD,GAAS,EACTlD,EAAS68L,GAAU58L,EAAKD,OAAQg4M,KAE3B90M,EAAQlD,GACfC,EAAKiD,GAAS60M,EAAW70M,GAAO2Q,KAAKgC,KAAM5V,EAAKiD,IAElD,OAAO0a,GAAMgH,EAAM/O,KAAM5V,EAC3B,GACF,IAmCIg4M,GAAUzN,IAAS,SAAS5lL,EAAM8oL,GACpC,IAAIC,EAAUzT,GAAewT,EAAU+C,GAAUwH,KACjD,OAAO3F,GAAW1tL,EAAMuqK,EAAmB1rL,EAAWiqM,EAAUC,EAClE,IAkCIuK,GAAe1N,IAAS,SAAS5lL,EAAM8oL,GACzC,IAAIC,EAAUzT,GAAewT,EAAU+C,GAAUyH,KACjD,OAAO5F,GAAW1tL,EAvgVQ,GAugVuBnhB,EAAWiqM,EAAUC,EACxE,IAwBIwK,GAAQ1I,IAAS,SAAS7qL,EAAMylL,GAClC,OAAOiI,GAAW1tL,EA/hVA,IA+hVuBnhB,EAAWA,EAAWA,EAAW4mM,EAC5E,IAgaA,SAAS1vD,GAAG9yI,EAAOs9L,GACjB,OAAOt9L,IAAUs9L,GAAUt9L,GAAUA,GAASs9L,GAAUA,CAC1D,CAyBA,IAAIiT,GAAKxG,GAA0B1M,IAyB/BmT,GAAMzG,IAA0B,SAAS/pM,EAAOs9L,GAClD,OAAOt9L,GAASs9L,CAClB,IAoBIzF,GAAcmG,GAAgB,WAAa,OAAO9lM,SAAW,CAA/B,IAAsC8lM,GAAkB,SAASh+L,GACjG,OAAOk2L,GAAal2L,IAAUzC,GAAeyO,KAAKhM,EAAO,YACtDuvB,GAAqBvjB,KAAKhM,EAAO,SACtC,EAyBIuc,GAAUlkB,EAAMkkB,QAmBhBqyK,GAAgBD,GAAoB4C,GAAU5C,IA75PlD,SAA2B3uL,GACzB,OAAOk2L,GAAal2L,IAAUi9L,GAAWj9L,IAAU6oL,CACrD,EAs7PA,SAASjvB,GAAY55J,GACnB,OAAgB,MAATA,GAAiB2rM,GAAS3rM,EAAM7H,UAAYs6I,GAAWzyI,EAChE,CA2BA,SAASohM,GAAkBphM,GACzB,OAAOk2L,GAAal2L,IAAU45J,GAAY55J,EAC5C,CAyCA,IAAI20L,GAAWD,IAAkBoX,GAmB7Bhd,GAASD,GAAa0C,GAAU1C,IAxgQpC,SAAoB7uL,GAClB,OAAOk2L,GAAal2L,IAAUi9L,GAAWj9L,IAAUgoL,CACrD,EA8qQA,SAAStjD,GAAQ1kI,GACf,IAAKk2L,GAAal2L,GAChB,OAAO,EAET,IAAI+e,EAAMk+K,GAAWj9L,GACrB,OAAO+e,GAAOkpK,GA9yWF,yBA8yWclpK,GACC,iBAAjB/e,EAAMynB,SAA4C,iBAAdznB,EAAM5I,OAAqBijK,GAAcr6J,EACzF,CAiDA,SAASyyI,GAAWzyI,GAClB,IAAKgzD,GAAShzD,GACZ,OAAO,EAIT,IAAI+e,EAAMk+K,GAAWj9L,GACrB,OAAO+e,GAAOmpK,GAAWnpK,GAAOopK,GA32WrB,0BA22W+BppK,GA/1W/B,kBA+1WkDA,CAC/D,CA4BA,SAAS0xL,GAAUzwM,GACjB,MAAuB,iBAATA,GAAqBA,GAAS8iC,GAAU9iC,EACxD,CA4BA,SAAS2rM,GAAS3rM,GAChB,MAAuB,iBAATA,GACZA,GAAS,GAAKA,EAAQ,GAAK,GAAKA,GAASynL,CAC7C,CA2BA,SAASz0H,GAAShzD,GAChB,IAAI2W,SAAc3W,EAClB,OAAgB,MAATA,IAA0B,UAAR2W,GAA4B,YAARA,EAC/C,CA0BA,SAASu/K,GAAal2L,GACpB,OAAgB,MAATA,GAAiC,iBAATA,CACjC,CAmBA,IAAI29H,GAAQoxD,GAAYwC,GAAUxC,IA5xQlC,SAAmB/uL,GACjB,OAAOk2L,GAAal2L,IAAU45L,GAAO55L,IAAUooL,CACjD,EA4+QA,SAASsoB,GAAS1wM,GAChB,MAAuB,iBAATA,GACXk2L,GAAal2L,IAAUi9L,GAAWj9L,IAAUqoL,CACjD,CA8BA,SAAShuB,GAAcr6J,GACrB,IAAKk2L,GAAal2L,IAAUi9L,GAAWj9L,IAAUsoL,EAC/C,OAAO,EAET,IAAIh+J,EAAQupK,GAAa7zL,GACzB,GAAc,OAAVsqB,EACF,OAAO,EAET,IAAIkwI,EAAOj9J,GAAeyO,KAAKse,EAAO,gBAAkBA,EAAMze,YAC9D,MAAsB,mBAAR2uJ,GAAsBA,aAAgBA,GAClD44B,GAAapnL,KAAKwuJ,IAASg5B,EAC/B,CAmBA,IAAIvE,GAAWD,GAAeuC,GAAUvC,IA59QxC,SAAsBhvL,GACpB,OAAOk2L,GAAal2L,IAAUi9L,GAAWj9L,IAAUwoL,CACrD,EA4gRI2G,GAAQD,GAAYqC,GAAUrC,IAngRlC,SAAmBlvL,GACjB,OAAOk2L,GAAal2L,IAAU45L,GAAO55L,IAAUyoL,CACjD,EAohRA,SAAS9yE,GAAS31G,GAChB,MAAuB,iBAATA,IACVuc,GAAQvc,IAAUk2L,GAAal2L,IAAUi9L,GAAWj9L,IAAU0oL,CACpE,CAmBA,SAASpoC,GAAStgJ,GAChB,MAAuB,iBAATA,GACXk2L,GAAal2L,IAAUi9L,GAAWj9L,IAAU2oL,CACjD,CAmBA,IAAI0G,GAAeD,GAAmBmC,GAAUnC,IAvjRhD,SAA0BpvL,GACxB,OAAOk2L,GAAal2L,IAClB2rM,GAAS3rM,EAAM7H,WAAa41L,GAAekP,GAAWj9L,GAC1D,EA4oRI2wM,GAAK5G,GAA0BtJ,IAyB/BmQ,GAAM7G,IAA0B,SAAS/pM,EAAOs9L,GAClD,OAAOt9L,GAASs9L,CAClB,IAyBA,SAAStnD,GAAQh2I,GACf,IAAKA,EACH,MAAO,GAET,GAAI45J,GAAY55J,GACd,OAAO21G,GAAS31G,GAAS2yL,GAAc3yL,GAASs4L,GAAUt4L,GAE5D,GAAIi0L,IAAej0L,EAAMi0L,IACvB,OAv8VN,SAAyBtoL,GAIvB,IAHA,IAAIpR,EACAvD,EAAS,KAEJuD,EAAOoR,EAAS9M,QAAQwY,MAC/BrgB,EAAOY,KAAK2C,EAAKyF,OAEnB,OAAOhJ,CACT,CA+7Va65M,CAAgB7wM,EAAMi0L,OAE/B,IAAIl1K,EAAM66K,GAAO55L,GAGjB,OAFW+e,GAAOqpK,EAAS+J,GAAcpzK,GAAO0pK,EAAS8J,GAAaxyK,IAE1D/f,EACd,CAyBA,SAAS6pM,GAAS7pM,GAChB,OAAKA,GAGLA,EAAQyS,GAASzS,MACHwnL,GAAYxnL,KAAU,IAxkYtB,uBAykYAA,EAAQ,GAAK,EAAI,GAGxBA,GAAUA,EAAQA,EAAQ,EAPd,IAAVA,EAAcA,EAAQ,CAQjC,CA4BA,SAAS8iC,GAAU9iC,GACjB,IAAIhJ,EAAS6yM,GAAS7pM,GAClB8wM,EAAY95M,EAAS,EAEzB,OAAOA,GAAWA,EAAU85M,EAAY95M,EAAS85M,EAAY95M,EAAU,CACzE,CA6BA,SAAS+nC,GAAS/+B,GAChB,OAAOA,EAAQu4L,GAAUz1J,GAAU9iC,GAAQ,EAAG2nL,GAAoB,CACpE,CAyBA,SAASl1K,GAASzS,GAChB,GAAoB,iBAATA,EACT,OAAOA,EAET,GAAIsgJ,GAAStgJ,GACX,OAAO0nL,EAET,GAAI10H,GAAShzD,GAAQ,CACnB,IAAIs9L,EAAgC,mBAAjBt9L,EAAM+mI,QAAwB/mI,EAAM+mI,UAAY/mI,EACnEA,EAAQgzD,GAASsqI,GAAUA,EAAQ,GAAMA,CAC3C,CACA,GAAoB,iBAATt9L,EACT,OAAiB,IAAVA,EAAcA,GAASA,EAEhCA,EAAQqxL,GAASrxL,GACjB,IAAI+wM,EAAW/lB,GAAWr6L,KAAKqP,GAC/B,OAAQ+wM,GAAY7lB,GAAUv6L,KAAKqP,GAC/BmuL,GAAanuL,EAAMmG,MAAM,GAAI4qM,EAAW,EAAI,GAC3ChmB,GAAWp6L,KAAKqP,GAAS0nL,GAAO1nL,CACvC,CA0BA,SAASqhM,GAAcrhM,GACrB,OAAOi5L,GAAWj5L,EAAOk6L,GAAOl6L,GAClC,CAqDA,SAAS9Q,GAAS8Q,GAChB,OAAgB,MAATA,EAAgB,GAAKukM,GAAavkM,EAC3C,CAoCA,IAAI3G,GAASwtM,IAAe,SAAShwL,EAAQgkB,GAC3C,GAAI2lK,GAAY3lK,IAAW++H,GAAY/+H,GACrCo+J,GAAWp+J,EAAQrgC,GAAKqgC,GAAShkB,QAGnC,IAAK,IAAIpc,KAAOogC,EACVt9B,GAAeyO,KAAK6uB,EAAQpgC,IAC9Bk+L,GAAY9hL,EAAQpc,EAAKogC,EAAOpgC,GAGtC,IAiCIu2M,GAAWnK,IAAe,SAAShwL,EAAQgkB,GAC7Co+J,GAAWp+J,EAAQq/J,GAAOr/J,GAAShkB,EACrC,IA+BIo6L,GAAepK,IAAe,SAAShwL,EAAQgkB,EAAQ2jG,EAAU+6D,GACnEN,GAAWp+J,EAAQq/J,GAAOr/J,GAAShkB,EAAQ0iL,EAC7C,IA8BI2X,GAAarK,IAAe,SAAShwL,EAAQgkB,EAAQ2jG,EAAU+6D,GACjEN,GAAWp+J,EAAQrgC,GAAKqgC,GAAShkB,EAAQ0iL,EAC3C,IAmBI4X,GAAKvJ,GAAS1O,IA8DdrvD,GAAW84D,IAAS,SAAS9rL,EAAQkwL,GACvClwL,EAASzd,GAAOyd,GAEhB,IAAIxb,GAAS,EACTlD,EAAS4uM,EAAQ5uM,OACjB6uM,EAAQ7uM,EAAS,EAAI4uM,EAAQ,GAAKnrM,EAMtC,IAJIorM,GAASC,GAAeF,EAAQ,GAAIA,EAAQ,GAAIC,KAClD7uM,EAAS,KAGFkD,EAAQlD,GAMf,IALA,IAAI0iC,EAASksK,EAAQ1rM,GACjB0P,EAAQmvL,GAAOr/J,GACfu2K,GAAc,EACdC,EAActmM,EAAM5S,SAEfi5M,EAAaC,GAAa,CACjC,IAAI52M,EAAMsQ,EAAMqmM,GACZpxM,EAAQ6W,EAAOpc,IAEfuF,IAAUpE,GACTk3I,GAAG9yI,EAAOkzL,GAAYz4L,MAAU8C,GAAeyO,KAAK6K,EAAQpc,MAC/Doc,EAAOpc,GAAOogC,EAAOpgC,GAEzB,CAGF,OAAOoc,CACT,IAqBIy6L,GAAe3O,IAAS,SAASvqM,GAEnC,OADAA,EAAKR,KAAKgE,EAAWsvM,IACdn1L,GAAMw7L,GAAW31M,EAAWxD,EACrC,IA+RA,SAAST,GAAIkf,EAAQkU,EAAMwlE,GACzB,IAAIv5F,EAAmB,MAAV6f,EAAiBjb,EAAY+gM,GAAQ9lL,EAAQkU,GAC1D,OAAO/zB,IAAW4E,EAAY20F,EAAev5F,CAC/C,CA2DA,SAAS+pM,GAAMlqL,EAAQkU,GACrB,OAAiB,MAAVlU,GAAkB40L,GAAQ50L,EAAQkU,EAAMyyK,GACjD,CAoBA,IAAI5iC,GAASuuC,IAAe,SAASnyM,EAAQgJ,EAAOvF,GACrC,MAATuF,GACyB,mBAAlBA,EAAM9Q,WACf8Q,EAAQuzL,GAAqBvnL,KAAKhM,IAGpChJ,EAAOgJ,GAASvF,CAClB,GAAG0oM,GAAS/C,KA4BRoR,GAAWrI,IAAe,SAASnyM,EAAQgJ,EAAOvF,GACvC,MAATuF,GACyB,mBAAlBA,EAAM9Q,WACf8Q,EAAQuzL,GAAqBvnL,KAAKhM,IAGhCzC,GAAeyO,KAAKhV,EAAQgJ,GAC9BhJ,EAAOgJ,GAAOpI,KAAK6C,GAEnBzD,EAAOgJ,GAAS,CAACvF,EAErB,GAAGknM,IAoBC92J,GAAS83J,GAAS5E,IA8BtB,SAASvjM,GAAKqc,GACZ,OAAO+iJ,GAAY/iJ,GAAU4gL,GAAc5gL,GAAU0pL,GAAS1pL,EAChE,CAyBA,SAASqjL,GAAOrjL,GACd,OAAO+iJ,GAAY/iJ,GAAU4gL,GAAc5gL,GAAQ,GAloTrD,SAAoBA,GAClB,IAAKm8C,GAASn8C,GACZ,OA09FJ,SAAsBA,GACpB,IAAI7f,EAAS,GACb,GAAc,MAAV6f,EACF,IAAK,IAAIpc,KAAOrB,GAAOyd,GACrB7f,EAAOY,KAAK6C,GAGhB,OAAOzD,CACT,CAl+FWy6M,CAAa56L,GAEtB,IAAI66L,EAAUlR,GAAY3pL,GACtB7f,EAAS,GAEb,IAAK,IAAIyD,KAAOoc,GACD,eAAPpc,IAAyBi3M,GAAYn0M,GAAeyO,KAAK6K,EAAQpc,KACrEzD,EAAOY,KAAK6C,GAGhB,OAAOzD,CACT,CAqnT6D26M,CAAW96L,EACxE,CAsGA,IAAImjJ,GAAQ6sC,IAAe,SAAShwL,EAAQgkB,EAAQ2jG,GAClDwiE,GAAUnqL,EAAQgkB,EAAQ2jG,EAC5B,IAiCI+yE,GAAY1K,IAAe,SAAShwL,EAAQgkB,EAAQ2jG,EAAU+6D,GAChEyH,GAAUnqL,EAAQgkB,EAAQ2jG,EAAU+6D,EACtC,IAsBIqY,GAAOhK,IAAS,SAAS/wL,EAAQkwC,GACnC,IAAI/vD,EAAS,CAAC,EACd,GAAc,MAAV6f,EACF,OAAO7f,EAET,IAAIwiM,GAAS,EACbzyI,EAAQmpI,GAASnpI,GAAO,SAASh8B,GAG/B,OAFAA,EAAO6xK,GAAS7xK,EAAMlU,GACtB2iL,IAAWA,EAASzuK,EAAK5yB,OAAS,GAC3B4yB,CACT,IACAkuK,GAAWpiL,EAAQokL,GAAapkL,GAAS7f,GACrCwiM,IACFxiM,EAASqiM,GAAUriM,EAAQ66M,EAAwD1G,KAGrF,IADA,IAAIhzM,EAAS4uD,EAAM5uD,OACZA,KACLsqM,GAAUzrM,EAAQ+vD,EAAM5uD,IAE1B,OAAOnB,CACT,IA2CIg8L,GAAO4U,IAAS,SAAS/wL,EAAQkwC,GACnC,OAAiB,MAAVlwC,EAAiB,CAAC,EAnmT3B,SAAkBA,EAAQkwC,GACxB,OAAOq7I,GAAWvrL,EAAQkwC,GAAO,SAAS/mD,EAAO+qB,GAC/C,OAAOg2K,GAAMlqL,EAAQkU,EACvB,GACF,CA+lT+B+mL,CAASj7L,EAAQkwC,EAChD,IAoBA,SAASgrJ,GAAOl7L,EAAQ4sB,GACtB,GAAc,MAAV5sB,EACF,MAAO,CAAC,EAEV,IAAI9L,EAAQmlL,GAAS+K,GAAapkL,IAAS,SAASukB,GAClD,MAAO,CAACA,EACV,IAEA,OADAqI,EAAYk+J,GAAYl+J,GACjB2+J,GAAWvrL,EAAQ9L,GAAO,SAAS/K,EAAO+qB,GAC/C,OAAO0Y,EAAUzjC,EAAO+qB,EAAK,GAC/B,GACF,CA0IA,IAAIinL,GAAUzH,GAAc/vM,IA0BxBy3M,GAAY1H,GAAcrQ,IA4K9B,SAASn6K,GAAOlJ,GACd,OAAiB,MAAVA,EAAiB,GAAK26K,GAAW36K,EAAQrc,GAAKqc,GACvD,CAiNA,IAAIlK,GAAY06L,IAAiB,SAASrwM,EAAQ+zI,EAAM1vI,GAEtD,OADA0vI,EAAOA,EAAKt4I,cACLuE,GAAUqE,EAAQ62M,GAAWnnE,GAAQA,EAC9C,IAiBA,SAASmnE,GAAWpyI,GAClB,OAAOqyI,GAAWjjN,GAAS4wE,GAAQrtE,cACrC,CAoBA,SAAS60M,GAAOxnI,GAEd,OADAA,EAAS5wE,GAAS4wE,KACDA,EAAOzhE,QAAQ+sL,GAAS0G,IAAczzL,QAAQmvL,GAAa,GAC9E,CAqHA,IAAI4kB,GAAY/K,IAAiB,SAASrwM,EAAQ+zI,EAAM1vI,GACtD,OAAOrE,GAAUqE,EAAQ,IAAM,IAAM0vI,EAAKt4I,aAC5C,IAsBI4/M,GAAYhL,IAAiB,SAASrwM,EAAQ+zI,EAAM1vI,GACtD,OAAOrE,GAAUqE,EAAQ,IAAM,IAAM0vI,EAAKt4I,aAC5C,IAmBI6/M,GAAanL,GAAgB,eA0N7BoL,GAAYlL,IAAiB,SAASrwM,EAAQ+zI,EAAM1vI,GACtD,OAAOrE,GAAUqE,EAAQ,IAAM,IAAM0vI,EAAKt4I,aAC5C,IA+DI+/M,GAAYnL,IAAiB,SAASrwM,EAAQ+zI,EAAM1vI,GACtD,OAAOrE,GAAUqE,EAAQ,IAAM,IAAM82M,GAAWpnE,EAClD,IAqiBI0nE,GAAYpL,IAAiB,SAASrwM,EAAQ+zI,EAAM1vI,GACtD,OAAOrE,GAAUqE,EAAQ,IAAM,IAAM0vI,EAAKj+H,aAC5C,IAmBIqlM,GAAahL,GAAgB,eAqBjC,SAASzzF,GAAM5zC,EAAQhpC,EAASkwK,GAI9B,OAHAlnI,EAAS5wE,GAAS4wE,IAClBhpC,EAAUkwK,EAAQprM,EAAYk7B,KAEdl7B,EArybpB,SAAwBkkE,GACtB,OAAO8tH,GAAiBj9L,KAAKmvE,EAC/B,CAoyba4yI,CAAe5yI,GA1jb5B,SAAsBA,GACpB,OAAOA,EAAOlpB,MAAM82I,KAAkB,EACxC,CAwjbsCilB,CAAa7yI,GAzrcnD,SAAoBA,GAClB,OAAOA,EAAOlpB,MAAM+zI,KAAgB,EACtC,CAurc6DioB,CAAW9yI,GAE7DA,EAAOlpB,MAAM9f,IAAY,EAClC,CA0BA,IAAI6+F,GAAUgtE,IAAS,SAAS5lL,EAAM3kB,GACpC,IACE,OAAO2d,GAAMgH,EAAMnhB,EAAWxD,EAChC,CAAE,MAAO+oC,GACP,OAAOujG,GAAQvjG,GAAKA,EAAI,IAAInoB,GAAMmoB,EACpC,CACF,IA4BI0xK,GAAUjL,IAAS,SAAS/wL,EAAQi8L,GAKtC,OAJArjB,GAAUqjB,GAAa,SAASr4M,GAC9BA,EAAMoiM,GAAMpiM,GACZi+L,GAAgB7hL,EAAQpc,EAAKif,GAAK7C,EAAOpc,GAAMoc,GACjD,IACOA,CACT,IAoGA,SAASssL,GAASnjM,GAChB,OAAO,WACL,OAAOA,CACT,CACF,CAgDA,IAAI+yM,GAAOpL,KAuBPqL,GAAYrL,IAAW,GAkB3B,SAASvH,GAASpgM,GAChB,OAAOA,CACT,CA4CA,SAASuvL,GAASxyK,GAChB,OAAOojL,GAA4B,mBAARpjL,EAAqBA,EAAOs8K,GAAUt8K,EAjte/C,GAktepB,CAsGA,IAAIge,GAAS4nK,IAAS,SAAS53K,EAAM3yB,GACnC,OAAO,SAASye,GACd,OAAOknL,GAAWlnL,EAAQkU,EAAM3yB,EAClC,CACF,IAyBI66M,GAAWtQ,IAAS,SAAS9rL,EAAQze,GACvC,OAAO,SAAS2yB,GACd,OAAOgzK,GAAWlnL,EAAQkU,EAAM3yB,EAClC,CACF,IAsCA,SAASu7D,GAAM98C,EAAQgkB,EAAQ9hC,GAC7B,IAAIgS,EAAQvQ,GAAKqgC,GACbi4K,EAAcpW,GAAc7hK,EAAQ9vB,GAEzB,MAAXhS,GACEi6D,GAASn4B,KAAYi4K,EAAY36M,SAAW4S,EAAM5S,UACtDY,EAAU8hC,EACVA,EAAShkB,EACTA,EAAS7I,KACT8kM,EAAcpW,GAAc7hK,EAAQrgC,GAAKqgC,KAE3C,IAAIw3E,IAAUr/C,GAASj6D,IAAY,UAAWA,IAAcA,EAAQs5G,OAChEwnF,EAASpnD,GAAW57H,GAqBxB,OAnBA44K,GAAUqjB,GAAa,SAASjyF,GAC9B,IAAI9jG,EAAO8d,EAAOgmF,GAClBhqG,EAAOgqG,GAAc9jG,EACjB88K,IACFhjL,EAAOrL,UAAUq1G,GAAc,WAC7B,IAAI21E,EAAWxoL,KAAK2oL,UACpB,GAAItkF,GAASmkF,EAAU,CACrB,IAAIx/L,EAAS6f,EAAO7I,KAAKyoL,aAKzB,OAJcz/L,EAAO0/L,YAAc4B,GAAUtqL,KAAK0oL,cAE1C9+L,KAAK,CAAE,KAAQmlB,EAAM,KAAQ7kB,UAAW,QAAW2e,IAC3D7f,EAAO2/L,UAAYH,EACZx/L,CACT,CACA,OAAO+lB,EAAKhH,MAAMc,EAAQqtI,GAAU,CAACl2I,KAAKhO,SAAU9H,WACtD,EAEJ,IAEO2e,CACT,CAkCA,SAASylD,KAET,CA+CA,IAAI42I,GAAO3J,GAAWrZ,IA8BlBijB,GAAY5J,GAAW5Z,IAiCvByjB,GAAW7J,GAAWjZ,IAwB1B,SAASjtL,GAAS0nB,GAChB,OAAO81K,GAAM91K,GAAQylK,GAAaqM,GAAM9xK,IAh3X1C,SAA0BA,GACxB,OAAO,SAASlU,GACd,OAAO8lL,GAAQ9lL,EAAQkU,EACzB,CACF,CA42XmDsoL,CAAiBtoL,EACpE,CAsEA,IAAIqoF,GAAQw2F,KAsCR0J,GAAa1J,IAAY,GAoB7B,SAAS4B,KACP,MAAO,EACT,CAeA,SAASM,KACP,OAAO,CACT,CA8JA,IA2oBMjxK,GA3oBF1jC,GAAMmyM,IAAoB,SAASiK,EAAQC,GAC7C,OAAOD,EAASC,CAClB,GAAG,GAuBC3wK,GAAOwnK,GAAY,QAiBnBoJ,GAASnK,IAAoB,SAASoK,EAAUC,GAClD,OAAOD,EAAWC,CACpB,GAAG,GAuBCnxK,GAAQ6nK,GAAY,SAwKpBtoM,GAAWunM,IAAoB,SAASsK,EAAYC,GACtD,OAAOD,EAAaC,CACtB,GAAG,GAuBC/jN,GAAQu6M,GAAY,SAiBpBrzB,GAAWsyB,IAAoB,SAASwK,EAASC,GACnD,OAAOD,EAAUC,CACnB,GAAG,GAgmBH,OA1iBA9d,GAAO7zF,MAp6MP,SAAer+D,EAAGhnB,GAChB,GAAmB,mBAARA,EACT,MAAM,IAAI1Q,GAAU86K,GAGtB,OADApjJ,EAAIjB,GAAUiB,GACP,WACL,KAAMA,EAAI,EACR,OAAOhnB,EAAKhH,MAAM/H,KAAM9V,UAE5B,CACF,EA25MA+9L,GAAO54H,IAAMA,GACb44H,GAAO58L,OAASA,GAChB48L,GAAO+a,SAAWA,GAClB/a,GAAOgb,aAAeA,GACtBhb,GAAOib,WAAaA,GACpBjb,GAAOkb,GAAKA,GACZlb,GAAO/zF,OAASA,GAChB+zF,GAAOv8K,KAAOA,GACdu8K,GAAO4c,QAAUA,GACjB5c,GAAOwY,QAAUA,GACjBxY,GAAO+d,UAl8KP,WACE,IAAK97M,UAAUC,OACb,MAAO,GAET,IAAI6H,EAAQ9H,UAAU,GACtB,OAAOqkB,GAAQvc,GAASA,EAAQ,CAACA,EACnC,EA67KAi2L,GAAO5jF,MAAQA,GACf4jF,GAAOge,MApgTP,SAAexlM,EAAO2I,EAAM4vL,GAExB5vL,GADG4vL,EAAQC,GAAex4L,EAAO2I,EAAM4vL,GAAS5vL,IAASxb,GAClD,EAEAm5L,GAAUjyJ,GAAU1rB,GAAO,GAEpC,IAAIjf,EAAkB,MAATsW,EAAgB,EAAIA,EAAMtW,OACvC,IAAKA,GAAUif,EAAO,EACpB,MAAO,GAMT,IAJA,IAAI/b,EAAQ,EACRw0L,EAAW,EACX74L,EAASqB,EAAMk8L,GAAWp8L,EAASif,IAEhC/b,EAAQlD,GACbnB,EAAO64L,KAAcwT,GAAU50L,EAAOpT,EAAQA,GAAS+b,GAEzD,OAAOpgB,CACT,EAm/SAi/L,GAAOie,QAl+SP,SAAiBzlM,GAMf,IALA,IAAIpT,GAAS,EACTlD,EAAkB,MAATsW,EAAgB,EAAIA,EAAMtW,OACnC03L,EAAW,EACX74L,EAAS,KAEJqE,EAAQlD,GAAQ,CACvB,IAAI6H,EAAQyO,EAAMpT,GACd2E,IACFhJ,EAAO64L,KAAc7vL,EAEzB,CACA,OAAOhJ,CACT,EAs9SAi/L,GAAOlhM,OA97SP,WACE,IAAIoD,EAASD,UAAUC,OACvB,IAAKA,EACH,MAAO,GAMT,IAJA,IAAIC,EAAOC,EAAMF,EAAS,GACtBsW,EAAQvW,UAAU,GAClBmD,EAAQlD,EAELkD,KACLjD,EAAKiD,EAAQ,GAAKnD,UAAUmD,GAE9B,OAAO6oJ,GAAU3nI,GAAQ9N,GAAS6pL,GAAU7pL,GAAS,CAACA,GAAQ2tL,GAAYhkM,EAAM,GAClF,EAk7SA69L,GAAOke,KA3tCP,SAAc71I,GACZ,IAAInmE,EAAkB,MAATmmE,EAAgB,EAAIA,EAAMnmE,OACnCixM,EAAazH,KASjB,OAPArjI,EAASnmE,EAAc+3L,GAAS5xH,GAAO,SAASjuC,GAC9C,GAAsB,mBAAXA,EAAK,GACd,MAAM,IAAIhkB,GAAU86K,GAEtB,MAAO,CAACiiB,EAAW/4K,EAAK,IAAKA,EAAK,GACpC,IALkB,GAOXsyK,IAAS,SAASvqM,GAEvB,IADA,IAAIiD,GAAS,IACJA,EAAQlD,GAAQ,CACvB,IAAIk4B,EAAOiuC,EAAMjjE,GACjB,GAAI0a,GAAMsa,EAAK,GAAIriB,KAAM5V,GACvB,OAAO2d,GAAMsa,EAAK,GAAIriB,KAAM5V,EAEhC,CACF,GACF,EAwsCA69L,GAAOme,SA9qCP,SAAkBv5K,GAChB,OAz5YF,SAAsBA,GACpB,IAAI9vB,EAAQvQ,GAAKqgC,GACjB,OAAO,SAAShkB,GACd,OAAOskL,GAAetkL,EAAQgkB,EAAQ9vB,EACxC,CACF,CAo5YSspM,CAAahb,GAAUx+J,EA/ieZ,GAgjepB,EA6qCAo7J,GAAOkN,SAAWA,GAClBlN,GAAOgY,QAAUA,GACjBhY,GAAO3pL,OAtuHP,SAAgBd,EAAW4hB,GACzB,IAAIp2B,EAASs/L,GAAW9qL,GACxB,OAAqB,MAAd4hB,EAAqBp2B,EAASgiM,GAAWhiM,EAAQo2B,EAC1D,EAouHA6oK,GAAOqe,MAzuMP,SAASA,EAAMv3L,EAAMshI,EAAO2oD,GAE1B,IAAIhwM,EAASyzM,GAAW1tL,EA7+TN,EA6+T6BnhB,EAAWA,EAAWA,EAAWA,EAAWA,EAD3FyiJ,EAAQ2oD,EAAQprM,EAAYyiJ,GAG5B,OADArnJ,EAAOs7L,YAAcgiB,EAAMhiB,YACpBt7L,CACT,EAquMAi/L,GAAOse,WA7rMP,SAASA,EAAWx3L,EAAMshI,EAAO2oD,GAE/B,IAAIhwM,EAASyzM,GAAW1tL,EAzhUA,GAyhU6BnhB,EAAWA,EAAWA,EAAWA,EAAWA,EADjGyiJ,EAAQ2oD,EAAQprM,EAAYyiJ,GAG5B,OADArnJ,EAAOs7L,YAAciiB,EAAWjiB,YACzBt7L,CACT,EAyrMAi/L,GAAO0Y,SAAWA,GAClB1Y,GAAOpsD,SAAWA,GAClBosD,GAAOqb,aAAeA,GACtBrb,GAAOr5I,MAAQA,GACfq5I,GAAO1uG,MAAQA,GACf0uG,GAAOwW,WAAaA,GACpBxW,GAAOyW,aAAeA,GACtBzW,GAAO0W,eAAiBA,GACxB1W,GAAOue,KAt0SP,SAAc/lM,EAAOs1B,EAAGijK,GACtB,IAAI7uM,EAAkB,MAATsW,EAAgB,EAAIA,EAAMtW,OACvC,OAAKA,EAIEkrM,GAAU50L,GADjBs1B,EAAKijK,GAASjjK,IAAMnoC,EAAa,EAAIknC,GAAUiB,IACnB,EAAI,EAAIA,EAAG5rC,GAH9B,EAIX,EAg0SA89L,GAAOwe,UArySP,SAAmBhmM,EAAOs1B,EAAGijK,GAC3B,IAAI7uM,EAAkB,MAATsW,EAAgB,EAAIA,EAAMtW,OACvC,OAAKA,EAKEkrM,GAAU50L,EAAO,GADxBs1B,EAAI5rC,GADJ4rC,EAAKijK,GAASjjK,IAAMnoC,EAAa,EAAIknC,GAAUiB,KAEhB,EAAI,EAAIA,GAJ9B,EAKX,EA8xSAkyJ,GAAOye,eAzvSP,SAAwBjmM,EAAOg1B,GAC7B,OAAQh1B,GAASA,EAAMtW,OACnB0sM,GAAUp2L,EAAOkzL,GAAYl+J,EAAW,IAAI,GAAM,GAClD,EACN,EAsvSAwyJ,GAAO0e,UAjtSP,SAAmBlmM,EAAOg1B,GACxB,OAAQh1B,GAASA,EAAMtW,OACnB0sM,GAAUp2L,EAAOkzL,GAAYl+J,EAAW,IAAI,GAC5C,EACN,EA8sSAwyJ,GAAOnmD,KA/qSP,SAAcrhI,EAAOzO,EAAOhK,EAAOC,GACjC,IAAIkC,EAAkB,MAATsW,EAAgB,EAAIA,EAAMtW,OACvC,OAAKA,GAGDnC,GAAyB,iBAATA,GAAqBixM,GAAex4L,EAAOzO,EAAOhK,KACpEA,EAAQ,EACRC,EAAMkC,GAzvIV,SAAkBsW,EAAOzO,EAAOhK,EAAOC,GACrC,IAAIkC,EAASsW,EAAMtW,OAWnB,KATAnC,EAAQ8sC,GAAU9sC,IACN,IACVA,GAASA,EAAQmC,EAAS,EAAKA,EAASnC,IAE1CC,EAAOA,IAAQ2F,GAAa3F,EAAMkC,EAAUA,EAAS2qC,GAAU7sC,IACrD,IACRA,GAAOkC,GAETlC,EAAMD,EAAQC,EAAM,EAAI8oC,GAAS9oC,GAC1BD,EAAQC,GACbwY,EAAMzY,KAAWgK,EAEnB,OAAOyO,CACT,CA2uISmmM,CAASnmM,EAAOzO,EAAOhK,EAAOC,IAN5B,EAOX,EAsqSAggM,GAAOrgM,OA3vOP,SAAgBwgB,EAAYqtB,GAE1B,OADWlnB,GAAQnG,GAAcw5K,GAAcuM,IACnC/lL,EAAYurL,GAAYl+J,EAAW,GACjD,EAyvOAwyJ,GAAO4e,QAvqOP,SAAiBz+L,EAAYm5K,GAC3B,OAAO6M,GAAYhsM,GAAIgmB,EAAYm5K,GAAW,EAChD,EAsqOA0G,GAAO6e,YAhpOP,SAAqB1+L,EAAYm5K,GAC/B,OAAO6M,GAAYhsM,GAAIgmB,EAAYm5K,GAAW/H,EAChD,EA+oOAyO,GAAO8e,aAxnOP,SAAsB3+L,EAAYm5K,EAAU9mB,GAE1C,OADAA,EAAQA,IAAU7sK,EAAY,EAAIknC,GAAU2lI,GACrC2zB,GAAYhsM,GAAIgmB,EAAYm5K,GAAW9mB,EAChD,EAsnOAwtB,GAAOqV,QAAUA,GACjBrV,GAAO+e,YAviSP,SAAqBvmM,GAEnB,OADsB,MAATA,GAAoBA,EAAMtW,OACvBikM,GAAY3tL,EAAO+4K,GAAY,EACjD,EAqiSAyO,GAAOgf,aA/gSP,SAAsBxmM,EAAOg6J,GAE3B,OADsB,MAATh6J,GAAoBA,EAAMtW,OAKhCikM,GAAY3tL,EADnBg6J,EAAQA,IAAU7sK,EAAY,EAAIknC,GAAU2lI,IAFnC,EAIX,EAygSAwtB,GAAOif,KAz9LP,SAAcn4L,GACZ,OAAO0tL,GAAW1tL,EA5wUD,IA6wUnB,EAw9LAk5K,GAAO8c,KAAOA,GACd9c,GAAO+c,UAAYA,GACnB/c,GAAOkf,UA3/RP,SAAmB72I,GAKjB,IAJA,IAAIjjE,GAAS,EACTlD,EAAkB,MAATmmE,EAAgB,EAAIA,EAAMnmE,OACnCnB,EAAS,CAAC,IAELqE,EAAQlD,GAAQ,CACvB,IAAIk4B,EAAOiuC,EAAMjjE,GACjBrE,EAAOq5B,EAAK,IAAMA,EAAK,EACzB,CACA,OAAOr5B,CACT,EAk/RAi/L,GAAOmf,UA38GP,SAAmBv+L,GACjB,OAAiB,MAAVA,EAAiB,GAAK6lL,GAAc7lL,EAAQrc,GAAKqc,GAC1D,EA08GAo/K,GAAOof,YAj7GP,SAAqBx+L,GACnB,OAAiB,MAAVA,EAAiB,GAAK6lL,GAAc7lL,EAAQqjL,GAAOrjL,GAC5D,EAg7GAo/K,GAAOmY,QAAUA,GACjBnY,GAAOjqB,QA56RP,SAAiBv9J,GAEf,OADsB,MAATA,GAAoBA,EAAMtW,OACvBkrM,GAAU50L,EAAO,GAAI,GAAK,EAC5C,EA06RAwnL,GAAO4W,aAAeA,GACtB5W,GAAO6W,eAAiBA,GACxB7W,GAAO8W,iBAAmBA,GAC1B9W,GAAOr7B,OAASA,GAChBq7B,GAAOub,SAAWA,GAClBvb,GAAOoY,UAAYA,GACnBpY,GAAO1G,SAAWA,GAClB0G,GAAOqY,MAAQA,GACfrY,GAAOz7L,KAAOA,GACdy7L,GAAOiE,OAASA,GAChBjE,GAAO7lM,IAAMA,GACb6lM,GAAOqf,QA1rGP,SAAiBz+L,EAAQ04K,GACvB,IAAIv4L,EAAS,CAAC,EAMd,OALAu4L,EAAWoS,GAAYpS,EAAU,GAEjCuM,GAAWjlL,GAAQ,SAAS7W,EAAOvF,EAAKoc,GACtC6hL,GAAgB1hM,EAAQu4L,EAASvvL,EAAOvF,EAAKoc,GAAS7W,EACxD,IACOhJ,CACT,EAmrGAi/L,GAAOsf,UArpGP,SAAmB1+L,EAAQ04K,GACzB,IAAIv4L,EAAS,CAAC,EAMd,OALAu4L,EAAWoS,GAAYpS,EAAU,GAEjCuM,GAAWjlL,GAAQ,SAAS7W,EAAOvF,EAAKoc,GACtC6hL,GAAgB1hM,EAAQyD,EAAK80L,EAASvvL,EAAOvF,EAAKoc,GACpD,IACO7f,CACT,EA8oGAi/L,GAAO79H,QAphCP,SAAiBv9B,GACf,OAAOylK,GAAYjH,GAAUx+J,EAxveX,GAyvepB,EAmhCAo7J,GAAOuf,gBAh/BP,SAAyBzqL,EAAMi1K,GAC7B,OAAOK,GAAoBt1K,EAAMsuK,GAAU2G,EA7xezB,GA8xepB,EA++BA/J,GAAOuW,QAAUA,GACjBvW,GAAOj8B,MAAQA,GACfi8B,GAAOsb,UAAYA,GACnBtb,GAAOl7J,OAASA,GAChBk7J,GAAOgd,SAAWA,GAClBhd,GAAOtiI,MAAQA,GACfsiI,GAAO+Z,OAASA,GAChB/Z,GAAOwf,OAzzBP,SAAgB1xK,GAEd,OADAA,EAAIjB,GAAUiB,GACP4+J,IAAS,SAASvqM,GACvB,OAAOmpM,GAAQnpM,EAAM2rC,EACvB,GACF,EAqzBAkyJ,GAAO2b,KAAOA,GACd3b,GAAOyf,OAnhGP,SAAgB7+L,EAAQ4sB,GACtB,OAAOsuK,GAAOl7L,EAAQm5L,GAAOrO,GAAYl+J,IAC3C,EAkhGAwyJ,GAAOzoG,KA73LP,SAAczwE,GACZ,OAAOmlF,GAAO,EAAGnlF,EACnB,EA43LAk5K,GAAO0f,QAr4NP,SAAiBv/L,EAAYqrL,EAAWC,EAAQsF,GAC9C,OAAkB,MAAd5wL,EACK,IAEJmG,GAAQklL,KACXA,EAAyB,MAAbA,EAAoB,GAAK,CAACA,IAGnCllL,GADLmlL,EAASsF,EAAQprM,EAAY8lM,KAE3BA,EAAmB,MAAVA,EAAiB,GAAK,CAACA,IAE3BF,GAAYprL,EAAYqrL,EAAWC,GAC5C,EA03NAzL,GAAOid,KAAOA,GACdjd,GAAOga,SAAWA,GAClBha,GAAOkd,UAAYA,GACnBld,GAAOmd,SAAWA,GAClBnd,GAAOma,QAAUA,GACjBna,GAAOoa,aAAeA,GACtBpa,GAAOsY,UAAYA,GACnBtY,GAAOjD,KAAOA,GACdiD,GAAO8b,OAASA,GAChB9b,GAAO5yL,SAAWA,GAClB4yL,GAAO2f,WA/rBP,SAAoB/+L,GAClB,OAAO,SAASkU,GACd,OAAiB,MAAVlU,EAAiBjb,EAAY+gM,GAAQ9lL,EAAQkU,EACtD,CACF,EA4rBAkrK,GAAO+W,KAAOA,GACd/W,GAAOgX,QAAUA,GACjBhX,GAAO4f,UApsRP,SAAmBpnM,EAAOsR,EAAQwvK,GAChC,OAAQ9gL,GAASA,EAAMtW,QAAU4nB,GAAUA,EAAO5nB,OAC9CmqM,GAAY7zL,EAAOsR,EAAQ4hL,GAAYpS,EAAU,IACjD9gL,CACN,EAisRAwnL,GAAO6f,YAxqRP,SAAqBrnM,EAAOsR,EAAQkwK,GAClC,OAAQxhL,GAASA,EAAMtW,QAAU4nB,GAAUA,EAAO5nB,OAC9CmqM,GAAY7zL,EAAOsR,EAAQnkB,EAAWq0L,GACtCxhL,CACN,EAqqRAwnL,GAAOiX,OAASA,GAChBjX,GAAO7iF,MAAQA,GACf6iF,GAAOqd,WAAaA,GACpBrd,GAAOqa,MAAQA,GACfra,GAAOztJ,OAxvNP,SAAgBpyB,EAAYqtB,GAE1B,OADWlnB,GAAQnG,GAAcw5K,GAAcuM,IACnC/lL,EAAY45L,GAAOrO,GAAYl+J,EAAW,IACxD,EAsvNAwyJ,GAAOhjK,OAzmRP,SAAgBxkB,EAAOg1B,GACrB,IAAIzsC,EAAS,GACb,IAAMyX,IAASA,EAAMtW,OACnB,OAAOnB,EAET,IAAIqE,GAAS,EACTmnM,EAAU,GACVrqM,EAASsW,EAAMtW,OAGnB,IADAsrC,EAAYk+J,GAAYl+J,EAAW,KAC1BpoC,EAAQlD,GAAQ,CACvB,IAAI6H,EAAQyO,EAAMpT,GACdooC,EAAUzjC,EAAO3E,EAAOoT,KAC1BzX,EAAOY,KAAKoI,GACZwiM,EAAQ5qM,KAAKyD,GAEjB,CAEA,OADAknM,GAAW9zL,EAAO+zL,GACXxrM,CACT,EAulRAi/L,GAAO9iK,KAluLP,SAAcpW,EAAM/mB,GAClB,GAAmB,mBAAR+mB,EACT,MAAM,IAAI1Q,GAAU86K,GAGtB,OAAOwb,GAAS5lL,EADhB/mB,EAAQA,IAAU4F,EAAY5F,EAAQ8sC,GAAU9sC,GAElD,EA6tLAigM,GAAOjiL,QAAUA,GACjBiiL,GAAO8f,WAhtNP,SAAoB3/L,EAAY2tB,EAAGijK,GAOjC,OALEjjK,GADGijK,EAAQC,GAAe7wL,EAAY2tB,EAAGijK,GAASjjK,IAAMnoC,GACpD,EAEAknC,GAAUiB,IAELxnB,GAAQnG,GAAcgiL,GAAkB2K,IACvC3sL,EAAY2tB,EAC1B,EAysNAkyJ,GAAOp+L,IAv6FP,SAAagf,EAAQkU,EAAM/qB,GACzB,OAAiB,MAAV6W,EAAiBA,EAASwrL,GAAQxrL,EAAQkU,EAAM/qB,EACzD,EAs6FAi2L,GAAO+f,QA54FP,SAAiBn/L,EAAQkU,EAAM/qB,EAAOu5L,GAEpC,OADAA,EAAkC,mBAAdA,EAA2BA,EAAa39L,EAC3C,MAAVib,EAAiBA,EAASwrL,GAAQxrL,EAAQkU,EAAM/qB,EAAOu5L,EAChE,EA04FAtD,GAAOggB,QA1rNP,SAAiB7/L,GAEf,OADWmG,GAAQnG,GAAcoiL,GAAe4K,IACpChtL,EACd,EAwrNA6/K,GAAO9vL,MAhjRP,SAAesI,EAAOzY,EAAOC,GAC3B,IAAIkC,EAAkB,MAATsW,EAAgB,EAAIA,EAAMtW,OACvC,OAAKA,GAGDlC,GAAqB,iBAAPA,GAAmBgxM,GAAex4L,EAAOzY,EAAOC,IAChED,EAAQ,EACRC,EAAMkC,IAGNnC,EAAiB,MAATA,EAAgB,EAAI8sC,GAAU9sC,GACtCC,EAAMA,IAAQ2F,EAAYzD,EAAS2qC,GAAU7sC,IAExCotM,GAAU50L,EAAOzY,EAAOC,IAVtB,EAWX,EAmiRAggM,GAAOuY,OAASA,GAChBvY,GAAOigB,WAx3QP,SAAoBznM,GAClB,OAAQA,GAASA,EAAMtW,OACnBksM,GAAe51L,GACf,EACN,EAq3QAwnL,GAAOkgB,aAn2QP,SAAsB1nM,EAAO8gL,GAC3B,OAAQ9gL,GAASA,EAAMtW,OACnBksM,GAAe51L,EAAOkzL,GAAYpS,EAAU,IAC5C,EACN,EAg2QA0G,GAAOh6L,MA5hEP,SAAe6jE,EAAQ5D,EAAWy4D,GAKhC,OAJIA,GAAyB,iBAATA,GAAqBsyE,GAAennI,EAAQ5D,EAAWy4D,KACzEz4D,EAAYy4D,EAAQ/4H,IAEtB+4H,EAAQA,IAAU/4H,EAAY+rL,EAAmBhzD,IAAU,IAI3D70D,EAAS5wE,GAAS4wE,MAEQ,iBAAb5D,GACO,MAAbA,IAAsB+yH,GAAS/yH,OAEpCA,EAAYqoI,GAAaroI,KACPg2H,GAAWpyH,GACpB0lI,GAAU7S,GAAc7yH,GAAS,EAAG60D,GAGxC70D,EAAO7jE,MAAMigE,EAAWy4D,GAZtB,EAaX,EA0gEAshE,GAAOxhE,OAnsLP,SAAgB13G,EAAM/mB,GACpB,GAAmB,mBAAR+mB,EACT,MAAM,IAAI1Q,GAAU86K,GAGtB,OADAnxL,EAAiB,MAATA,EAAgB,EAAI++L,GAAUjyJ,GAAU9sC,GAAQ,GACjD2sM,IAAS,SAASvqM,GACvB,IAAIqW,EAAQrW,EAAKpC,GACb+1M,EAAYvG,GAAUptM,EAAM,EAAGpC,GAKnC,OAHIyY,GACFy1I,GAAU6nD,EAAWt9L,GAEhBsH,GAAMgH,EAAM/O,KAAM+9L,EAC3B,GACF,EAsrLA9V,GAAOzuK,KAl1QP,SAAc/Y,GACZ,IAAItW,EAAkB,MAATsW,EAAgB,EAAIA,EAAMtW,OACvC,OAAOA,EAASkrM,GAAU50L,EAAO,EAAGtW,GAAU,EAChD,EAg1QA89L,GAAOmgB,KArzQP,SAAc3nM,EAAOs1B,EAAGijK,GACtB,OAAMv4L,GAASA,EAAMtW,OAIdkrM,GAAU50L,EAAO,GADxBs1B,EAAKijK,GAASjjK,IAAMnoC,EAAa,EAAIknC,GAAUiB,IAChB,EAAI,EAAIA,GAH9B,EAIX,EAgzQAkyJ,GAAOogB,UArxQP,SAAmB5nM,EAAOs1B,EAAGijK,GAC3B,IAAI7uM,EAAkB,MAATsW,EAAgB,EAAIA,EAAMtW,OACvC,OAAKA,EAKEkrM,GAAU50L,GADjBs1B,EAAI5rC,GADJ4rC,EAAKijK,GAASjjK,IAAMnoC,EAAa,EAAIknC,GAAUiB,KAEnB,EAAI,EAAIA,EAAG5rC,GAJ9B,EAKX,EA8wQA89L,GAAOqgB,eAzuQP,SAAwB7nM,EAAOg1B,GAC7B,OAAQh1B,GAASA,EAAMtW,OACnB0sM,GAAUp2L,EAAOkzL,GAAYl+J,EAAW,IAAI,GAAO,GACnD,EACN,EAsuQAwyJ,GAAOsgB,UAjsQP,SAAmB9nM,EAAOg1B,GACxB,OAAQh1B,GAASA,EAAMtW,OACnB0sM,GAAUp2L,EAAOkzL,GAAYl+J,EAAW,IACxC,EACN,EA8rQAwyJ,GAAO7jE,IApuPP,SAAapyH,EAAO+tM,GAElB,OADAA,EAAY/tM,GACLA,CACT,EAkuPAi2L,GAAO7uG,SA9oLP,SAAkBrqE,EAAM6sJ,EAAM7wK,GAC5B,IAAIm2M,GAAU,EACV9H,GAAW,EAEf,GAAmB,mBAARrqL,EACT,MAAM,IAAI1Q,GAAU86K,GAMtB,OAJIn0H,GAASj6D,KACXm2M,EAAU,YAAan2M,IAAYA,EAAQm2M,QAAUA,EACrD9H,EAAW,aAAcruM,IAAYA,EAAQquM,SAAWA,GAEnDuH,GAAS5xL,EAAM6sJ,EAAM,CAC1B,QAAWslC,EACX,QAAWtlC,EACX,SAAYw9B,GAEhB,EA+nLAnR,GAAO8R,KAAOA,GACd9R,GAAOjgD,QAAUA,GACjBigD,GAAO+b,QAAUA,GACjB/b,GAAOgc,UAAYA,GACnBhc,GAAOugB,OArfP,SAAgBx2M,GACd,OAAIuc,GAAQvc,GACHkwL,GAASlwL,EAAO68L,IAElBv8C,GAAStgJ,GAAS,CAACA,GAASs4L,GAAUliC,GAAalnK,GAAS8Q,IACrE,EAifAi2L,GAAOoL,cAAgBA,GACvBpL,GAAOzgM,UA10FP,SAAmBqhB,EAAQ04K,EAAUC,GACnC,IAAImI,EAAQp7K,GAAQ1F,GAChB4/L,EAAY9e,GAAShD,GAAS99K,IAAWw4K,GAAax4K,GAG1D,GADA04K,EAAWoS,GAAYpS,EAAU,GACd,MAAfC,EAAqB,CACvB,IAAIh1B,EAAO3jJ,GAAUA,EAAOhL,YAE1B2jL,EADEinB,EACY9e,EAAQ,IAAIn9B,EAAO,GAE1BxnG,GAASn8C,IACF47H,GAAW+nB,GAAQ87B,GAAWzC,GAAah9K,IAG3C,CAAC,CAEnB,CAIA,OAHC4/L,EAAYhnB,GAAYqM,IAAYjlL,GAAQ,SAAS7W,EAAO3E,EAAOwb,GAClE,OAAO04K,EAASC,EAAaxvL,EAAO3E,EAAOwb,EAC7C,IACO24K,CACT,EAszFAyG,GAAO90K,MArnLP,SAAepE,GACb,OAAOsgD,GAAItgD,EAAM,EACnB,EAonLAk5K,GAAOkX,MAAQA,GACflX,GAAOmX,QAAUA,GACjBnX,GAAOoX,UAAYA,GACnBpX,GAAOygB,KAzmQP,SAAcjoM,GACZ,OAAQA,GAASA,EAAMtW,OAAUqsM,GAAS/1L,GAAS,EACrD,EAwmQAwnL,GAAO0gB,OA/kQP,SAAgBloM,EAAO8gL,GACrB,OAAQ9gL,GAASA,EAAMtW,OAAUqsM,GAAS/1L,EAAOkzL,GAAYpS,EAAU,IAAM,EAC/E,EA8kQA0G,GAAO2gB,SAxjQP,SAAkBnoM,EAAOwhL,GAEvB,OADAA,EAAkC,mBAAdA,EAA2BA,EAAar0L,EACpD6S,GAASA,EAAMtW,OAAUqsM,GAAS/1L,EAAO7S,EAAWq0L,GAAc,EAC5E,EAsjQAgG,GAAOpuG,MAhyFP,SAAehxE,EAAQkU,GACrB,OAAiB,MAAVlU,GAAwB4rL,GAAU5rL,EAAQkU,EACnD,EA+xFAkrK,GAAOqX,MAAQA,GACfrX,GAAOuX,UAAYA,GACnBvX,GAAOj7L,OApwFP,SAAgB6b,EAAQkU,EAAM65K,GAC5B,OAAiB,MAAV/tL,EAAiBA,EAAS8tL,GAAW9tL,EAAQkU,EAAMu6K,GAAaV,GACzE,EAmwFA3O,GAAO4gB,WAzuFP,SAAoBhgM,EAAQkU,EAAM65K,EAASrL,GAEzC,OADAA,EAAkC,mBAAdA,EAA2BA,EAAa39L,EAC3C,MAAVib,EAAiBA,EAAS8tL,GAAW9tL,EAAQkU,EAAMu6K,GAAaV,GAAUrL,EACnF,EAuuFAtD,GAAOl2K,OAASA,GAChBk2K,GAAO6gB,SAhrFP,SAAkBjgM,GAChB,OAAiB,MAAVA,EAAiB,GAAK26K,GAAW36K,EAAQqjL,GAAOrjL,GACzD,EA+qFAo/K,GAAOwX,QAAUA,GACjBxX,GAAOviF,MAAQA,GACfuiF,GAAOroB,KA3mLP,SAAc5tK,EAAOgoM,GACnB,OAAOoI,GAAQ9K,GAAa0C,GAAUhoM,EACxC,EA0mLAi2L,GAAOyX,IAAMA,GACbzX,GAAO0X,MAAQA,GACf1X,GAAO2X,QAAUA,GACjB3X,GAAO4X,IAAMA,GACb5X,GAAO8gB,UAj3PP,SAAmBhsM,EAAOgV,GACxB,OAAOmlL,GAAcn6L,GAAS,GAAIgV,GAAU,GAAI44K,GAClD,EAg3PA1C,GAAO+gB,cA/1PP,SAAuBjsM,EAAOgV,GAC5B,OAAOmlL,GAAcn6L,GAAS,GAAIgV,GAAU,GAAIsiL,GAClD,EA81PApM,GAAO6X,QAAUA,GAGjB7X,GAAO9+K,QAAU66L,GACjB/b,GAAOghB,UAAYhF,GACnBhc,GAAOrxI,OAASosJ,GAChB/a,GAAOihB,WAAajG,GAGpBt9I,GAAMsiI,GAAQA,IAKdA,GAAO9+L,IAAMA,GACb8+L,GAAOtgE,QAAUA,GACjBsgE,GAAOtpL,UAAYA,GACnBspL,GAAOic,WAAaA,GACpBjc,GAAOpzJ,KAAOA,GACdozJ,GAAOkhB,MAprFP,SAAe92D,EAAQ84C,EAAOC,GAa5B,OAZIA,IAAUx9L,IACZw9L,EAAQD,EACRA,EAAQv9L,GAENw9L,IAAUx9L,IAEZw9L,GADAA,EAAQ3mL,GAAS2mL,KACCA,EAAQA,EAAQ,GAEhCD,IAAUv9L,IAEZu9L,GADAA,EAAQ1mL,GAAS0mL,KACCA,EAAQA,EAAQ,GAE7BZ,GAAU9lL,GAAS4tI,GAAS84C,EAAOC,EAC5C,EAuqFAnD,GAAOnxC,MA7jLP,SAAe9kJ,GACb,OAAOq5L,GAAUr5L,EArzVI,EAszVvB,EA4jLAi2L,GAAOmhB,UApgLP,SAAmBp3M,GACjB,OAAOq5L,GAAUr5L,EAAO6xM,EAC1B,EAmgLA5b,GAAOohB,cAr+KP,SAAuBr3M,EAAOu5L,GAE5B,OAAOF,GAAUr5L,EAAO6xM,EADxBtY,EAAkC,mBAAdA,EAA2BA,EAAa39L,EAE9D,EAm+KAq6L,GAAOqhB,UA7hLP,SAAmBt3M,EAAOu5L,GAExB,OAAOF,GAAUr5L,EAz1VI,EAw1VrBu5L,EAAkC,mBAAdA,EAA2BA,EAAa39L,EAE9D,EA2hLAq6L,GAAOshB,WA18KP,SAAoB1gM,EAAQgkB,GAC1B,OAAiB,MAAVA,GAAkBsgK,GAAetkL,EAAQgkB,EAAQrgC,GAAKqgC,GAC/D,EAy8KAo7J,GAAOqR,OAASA,GAChBrR,GAAOuhB,UA1xCP,SAAmBx3M,EAAOuwF,GACxB,OAAiB,MAATvwF,GAAiBA,GAAUA,EAASuwF,EAAevwF,CAC7D,EAyxCAi2L,GAAOwd,OAASA,GAChBxd,GAAOz6J,SAz9EP,SAAkBskC,EAAQhrE,EAAQK,GAChC2qE,EAAS5wE,GAAS4wE,GAClBhrE,EAASyvM,GAAazvM,GAEtB,IAAIqD,EAAS2nE,EAAO3nE,OAKhBlC,EAJJd,EAAWA,IAAayG,EACpBzD,EACAogM,GAAUz1J,GAAU3tC,GAAW,EAAGgD,GAItC,OADAhD,GAAYL,EAAOqD,SACA,GAAK2nE,EAAO35D,MAAMhR,EAAUc,IAAQnB,CACzD,EA88EAmhM,GAAOnjD,GAAKA,GACZmjD,GAAOx4B,OAj7EP,SAAgB39F,GAEd,OADAA,EAAS5wE,GAAS4wE,KACAgqH,EAAmBn5L,KAAKmvE,GACtCA,EAAOzhE,QAAQurL,EAAiBmI,IAChCjyH,CACN,EA66EAm2H,GAAOwhB,aA55EP,SAAsB33I,GAEpB,OADAA,EAAS5wE,GAAS4wE,KACAuqH,GAAgB15L,KAAKmvE,GACnCA,EAAOzhE,QAAQ+rL,GAAc,QAC7BtqH,CACN,EAw5EAm2H,GAAOpwL,MA57OP,SAAeuQ,EAAYqtB,EAAWujK,GACpC,IAAIjqL,EAAOR,GAAQnG,GAAcu5K,GAAasM,GAI9C,OAHI+K,GAASC,GAAe7wL,EAAYqtB,EAAWujK,KACjDvjK,EAAY7nC,GAEPmhB,EAAK3G,EAAYurL,GAAYl+J,EAAW,GACjD,EAu7OAwyJ,GAAO/vL,KAAOA,GACd+vL,GAAO1kK,UAAYA,GACnB0kK,GAAOyhB,QArxHP,SAAiB7gM,EAAQ4sB,GACvB,OAAOgtJ,GAAY55K,EAAQ8qL,GAAYl+J,EAAW,GAAIq4J,GACxD,EAoxHA7F,GAAOiY,SAAWA,GAClBjY,GAAO2W,cAAgBA,GACvB3W,GAAO0hB,YAjvHP,SAAqB9gM,EAAQ4sB,GAC3B,OAAOgtJ,GAAY55K,EAAQ8qL,GAAYl+J,EAAW,GAAIu4J,GACxD,EAgvHA/F,GAAOzzJ,MAAQA,GACfyzJ,GAAO1+L,QAAUA,GACjB0+L,GAAOkY,aAAeA,GACtBlY,GAAO2hB,MArtHP,SAAe/gM,EAAQ04K,GACrB,OAAiB,MAAV14K,EACHA,EACA0lL,GAAQ1lL,EAAQ8qL,GAAYpS,EAAU,GAAI2K,GAChD,EAktHAjE,GAAO4hB,WAtrHP,SAAoBhhM,EAAQ04K,GAC1B,OAAiB,MAAV14K,EACHA,EACA4lL,GAAa5lL,EAAQ8qL,GAAYpS,EAAU,GAAI2K,GACrD,EAmrHAjE,GAAO6hB,OArpHP,SAAgBjhM,EAAQ04K,GACtB,OAAO14K,GAAUilL,GAAWjlL,EAAQ8qL,GAAYpS,EAAU,GAC5D,EAopHA0G,GAAO8hB,YAxnHP,SAAqBlhM,EAAQ04K,GAC3B,OAAO14K,GAAUmlL,GAAgBnlL,EAAQ8qL,GAAYpS,EAAU,GACjE,EAunHA0G,GAAOt+L,IAAMA,GACbs+L,GAAOsa,GAAKA,GACZta,GAAOua,IAAMA,GACbva,GAAOx+L,IAzgHP,SAAaof,EAAQkU,GACnB,OAAiB,MAAVlU,GAAkB40L,GAAQ50L,EAAQkU,EAAMwyK,GACjD,EAwgHAtH,GAAO8K,MAAQA,GACf9K,GAAOx6H,KAAOA,GACdw6H,GAAOmK,SAAWA,GAClBnK,GAAOryJ,SA5pOP,SAAkBxtB,EAAYpW,EAAOy5I,EAAWutD,GAC9C5wL,EAAawjJ,GAAYxjJ,GAAcA,EAAa2J,GAAO3J,GAC3DqjI,EAAaA,IAAcutD,EAASlkK,GAAU22G,GAAa,EAE3D,IAAIthJ,EAASie,EAAWje,OAIxB,OAHIshJ,EAAY,IACdA,EAAYs7C,GAAU58L,EAASshJ,EAAW,IAErC9jC,GAASv/F,GACXqjI,GAAathJ,GAAUie,EAAW7hB,QAAQyL,EAAOy5I,IAAc,IAC7DthJ,GAAU43L,GAAY35K,EAAYpW,EAAOy5I,IAAc,CAChE,EAkpOAw8C,GAAO1hM,QA9lSP,SAAiBka,EAAOzO,EAAOy5I,GAC7B,IAAIthJ,EAAkB,MAATsW,EAAgB,EAAIA,EAAMtW,OACvC,IAAKA,EACH,OAAQ,EAEV,IAAIkD,EAAqB,MAAbo+I,EAAoB,EAAI32G,GAAU22G,GAI9C,OAHIp+I,EAAQ,IACVA,EAAQ05L,GAAU58L,EAASkD,EAAO,IAE7B00L,GAAYthL,EAAOzO,EAAO3E,EACnC,EAqlSA46L,GAAO+hB,QAlqFP,SAAiB33D,EAAQrqJ,EAAOC,GAS9B,OARAD,EAAQ6zM,GAAS7zM,GACbC,IAAQ2F,GACV3F,EAAMD,EACNA,EAAQ,GAERC,EAAM4zM,GAAS5zM,GArsVnB,SAAqBoqJ,EAAQrqJ,EAAOC,GAClC,OAAOoqJ,GAAU20C,GAAUh/L,EAAOC,IAAQoqJ,EAAS00C,GAAU/+L,EAAOC,EACtE,CAssVSgiN,CADP53D,EAAS5tI,GAAS4tI,GACSrqJ,EAAOC,EACpC,EAypFAggM,GAAOprJ,OAASA,GAChBorJ,GAAO4B,YAAcA,GACrB5B,GAAO15K,QAAUA,GACjB05K,GAAOrH,cAAgBA,GACvBqH,GAAOr8B,YAAcA,GACrBq8B,GAAOmL,kBAAoBA,GAC3BnL,GAAOiiB,UAtwKP,SAAmBl4M,GACjB,OAAiB,IAAVA,IAA4B,IAAVA,GACtBk2L,GAAal2L,IAAUi9L,GAAWj9L,IAAU+nL,CACjD,EAowKAkO,GAAOtB,SAAWA,GAClBsB,GAAOnH,OAASA,GAChBmH,GAAO5mM,UA7sKP,SAAmB2Q,GACjB,OAAOk2L,GAAal2L,IAA6B,IAAnBA,EAAM46D,WAAmBy/F,GAAcr6J,EACvE,EA4sKAi2L,GAAO90H,QAzqKP,SAAiBnhE,GACf,GAAa,MAATA,EACF,OAAO,EAET,GAAI45J,GAAY55J,KACXuc,GAAQvc,IAA0B,iBAATA,GAA4C,mBAAhBA,EAAM2P,QAC1DglL,GAAS30L,IAAUqvL,GAAarvL,IAAU63L,GAAY73L,IAC1D,OAAQA,EAAM7H,OAEhB,IAAI4mB,EAAM66K,GAAO55L,GACjB,GAAI+e,GAAOqpK,GAAUrpK,GAAO0pK,EAC1B,OAAQzoL,EAAMoX,KAEhB,GAAIopL,GAAYxgM,GACd,OAAQugM,GAASvgM,GAAO7H,OAE1B,IAAK,IAAIsC,KAAOuF,EACd,GAAIzC,GAAeyO,KAAKhM,EAAOvF,GAC7B,OAAO,EAGX,OAAO,CACT,EAopKAw7L,GAAOkiB,QAtnKP,SAAiBn4M,EAAOs9L,GACtB,OAAOW,GAAYj+L,EAAOs9L,EAC5B,EAqnKArH,GAAOmiB,YAnlKP,SAAqBp4M,EAAOs9L,EAAO/D,GAEjC,IAAIviM,GADJuiM,EAAkC,mBAAdA,EAA2BA,EAAa39L,GAClC29L,EAAWv5L,EAAOs9L,GAAS1hM,EACrD,OAAO5E,IAAW4E,EAAYqiM,GAAYj+L,EAAOs9L,EAAO1hM,EAAW29L,KAAgBviM,CACrF,EAglKAi/L,GAAOvxD,QAAUA,GACjBuxD,GAAO5zJ,SA1hKP,SAAkBriC,GAChB,MAAuB,iBAATA,GAAqB40L,GAAe50L,EACpD,EAyhKAi2L,GAAOxjD,WAAaA,GACpBwjD,GAAOwa,UAAYA,GACnBxa,GAAO0V,SAAWA,GAClB1V,GAAOt4D,MAAQA,GACfs4D,GAAOoiB,QA11JP,SAAiBxhM,EAAQgkB,GACvB,OAAOhkB,IAAWgkB,GAAUglK,GAAYhpL,EAAQgkB,EAAQ8lK,GAAa9lK,GACvE,EAy1JAo7J,GAAOqiB,YAvzJP,SAAqBzhM,EAAQgkB,EAAQ0+J,GAEnC,OADAA,EAAkC,mBAAdA,EAA2BA,EAAa39L,EACrDikM,GAAYhpL,EAAQgkB,EAAQ8lK,GAAa9lK,GAAS0+J,EAC3D,EAqzJAtD,GAAO7zJ,MAvxJP,SAAepiC,GAIb,OAAO0wM,GAAS1wM,IAAUA,IAAUA,CACtC,EAmxJAi2L,GAAOsiB,SAvvJP,SAAkBv4M,GAChB,GAAI6rM,GAAW7rM,GACb,MAAM,IAAIgZ,GAtsXM,mEAwsXlB,OAAOknL,GAAalgM,EACtB,EAmvJAi2L,GAAOuiB,MAxsJP,SAAex4M,GACb,OAAgB,MAATA,CACT,EAusJAi2L,GAAOwiB,OAjuJP,SAAgBz4M,GACd,OAAiB,OAAVA,CACT,EAguJAi2L,GAAOya,SAAWA,GAClBza,GAAOjjI,SAAWA,GAClBijI,GAAOC,aAAeA,GACtBD,GAAO57B,cAAgBA,GACvB47B,GAAOhH,SAAWA,GAClBgH,GAAOyiB,cArlJP,SAAuB14M,GACrB,OAAOywM,GAAUzwM,IAAUA,IAAS,kBAAqBA,GAASynL,CACpE,EAolJAwO,GAAO9G,MAAQA,GACf8G,GAAOtgF,SAAWA,GAClBsgF,GAAO31C,SAAWA,GAClB21C,GAAO5G,aAAeA,GACtB4G,GAAO0iB,YAn/IP,SAAqB34M,GACnB,OAAOA,IAAUpE,CACnB,EAk/IAq6L,GAAO2iB,UA/9IP,SAAmB54M,GACjB,OAAOk2L,GAAal2L,IAAU45L,GAAO55L,IAAU4oL,CACjD,EA89IAqN,GAAO4iB,UA38IP,SAAmB74M,GACjB,OAAOk2L,GAAal2L,IAn6XP,oBAm6XiBi9L,GAAWj9L,EAC3C,EA08IAi2L,GAAOzlM,KAz/RP,SAAcie,EAAOytD,GACnB,OAAgB,MAATztD,EAAgB,GAAKomL,GAAW7oL,KAAKyC,EAAOytD,EACrD,EAw/RA+5H,GAAOmc,UAAYA,GACnBnc,GAAO5uK,KAAOA,GACd4uK,GAAO7wH,YAh9RP,SAAqB32D,EAAOzO,EAAOy5I,GACjC,IAAIthJ,EAAkB,MAATsW,EAAgB,EAAIA,EAAMtW,OACvC,IAAKA,EACH,OAAQ,EAEV,IAAIkD,EAAQlD,EAKZ,OAJIshJ,IAAc79I,IAEhBP,GADAA,EAAQynC,GAAU22G,IACF,EAAIs7C,GAAU58L,EAASkD,EAAO,GAAK25L,GAAU35L,EAAOlD,EAAS,IAExE6H,GAAUA,EArvMrB,SAA2ByO,EAAOzO,EAAOy5I,GAEvC,IADA,IAAIp+I,EAAQo+I,EAAY,EACjBp+I,KACL,GAAIoT,EAAMpT,KAAW2E,EACnB,OAAO3E,EAGX,OAAOA,CACT,CA8uMQy9M,CAAkBrqM,EAAOzO,EAAO3E,GAChCs1L,GAAcliL,EAAOqiL,GAAWz1L,GAAO,EAC7C,EAo8RA46L,GAAOoc,UAAYA,GACnBpc,GAAOqc,WAAaA,GACpBrc,GAAO0a,GAAKA,GACZ1a,GAAO2a,IAAMA,GACb3a,GAAOrmM,IAhfP,SAAa6e,GACX,OAAQA,GAASA,EAAMtW,OACnB+jM,GAAaztL,EAAO2xL,GAAU/C,IAC9BzhM,CACN,EA6eAq6L,GAAO8iB,MApdP,SAAetqM,EAAO8gL,GACpB,OAAQ9gL,GAASA,EAAMtW,OACnB+jM,GAAaztL,EAAOkzL,GAAYpS,EAAU,GAAI8N,IAC9CzhM,CACN,EAidAq6L,GAAO+iB,KAjcP,SAAcvqM,GACZ,OAAOuiL,GAASviL,EAAO2xL,GACzB,EAgcAnK,GAAOgjB,OAvaP,SAAgBxqM,EAAO8gL,GACrB,OAAOyB,GAASviL,EAAOkzL,GAAYpS,EAAU,GAC/C,EAsaA0G,GAAOpmM,IAlZP,SAAa4e,GACX,OAAQA,GAASA,EAAMtW,OACnB+jM,GAAaztL,EAAO2xL,GAAUK,IAC9B7kM,CACN,EA+YAq6L,GAAOijB,MAtXP,SAAezqM,EAAO8gL,GACpB,OAAQ9gL,GAASA,EAAMtW,OACnB+jM,GAAaztL,EAAOkzL,GAAYpS,EAAU,GAAIkR,IAC9C7kM,CACN,EAmXAq6L,GAAOuV,UAAYA,GACnBvV,GAAO6V,UAAYA,GACnB7V,GAAOkjB,WAztBP,WACE,MAAO,CAAC,CACV,EAwtBAljB,GAAOmjB,WAzsBP,WACE,MAAO,EACT,EAwsBAnjB,GAAOojB,SAzrBP,WACE,OAAO,CACT,EAwrBApjB,GAAOl0L,SAAWA,GAClBk0L,GAAOqjB,IA77RP,SAAa7qM,EAAOs1B,GAClB,OAAQt1B,GAASA,EAAMtW,OAAUopM,GAAQ9yL,EAAOq0B,GAAUiB,IAAMnoC,CAClE,EA47RAq6L,GAAO31E,WAliCP,WAIE,OAHI1yE,GAAK/gC,IAAMmB,OACb4/B,GAAK/gC,EAAI4mL,IAEJzlL,IACT,EA8hCAioL,GAAO35H,KAAOA,GACd25H,GAAOv/H,IAAMA,GACbu/H,GAAOsjB,IAj5EP,SAAaz5I,EAAQ3nE,EAAQuxM,GAC3B5pI,EAAS5wE,GAAS4wE,GAGlB,IAAI05I,GAFJrhN,EAAS2qC,GAAU3qC,IAEMs6L,GAAW3yH,GAAU,EAC9C,IAAK3nE,GAAUqhN,GAAarhN,EAC1B,OAAO2nE,EAET,IAAI4jI,GAAOvrM,EAASqhN,GAAa,EACjC,OACE/P,GAAcjV,GAAYkP,GAAMgG,GAChC5pI,EACA2pI,GAAclV,GAAWmP,GAAMgG,EAEnC,EAo4EAzT,GAAOwjB,OA32EP,SAAgB35I,EAAQ3nE,EAAQuxM,GAC9B5pI,EAAS5wE,GAAS4wE,GAGlB,IAAI05I,GAFJrhN,EAAS2qC,GAAU3qC,IAEMs6L,GAAW3yH,GAAU,EAC9C,OAAQ3nE,GAAUqhN,EAAYrhN,EACzB2nE,EAAS2pI,GAActxM,EAASqhN,EAAW9P,GAC5C5pI,CACN,EAo2EAm2H,GAAOyjB,SA30EP,SAAkB55I,EAAQ3nE,EAAQuxM,GAChC5pI,EAAS5wE,GAAS4wE,GAGlB,IAAI05I,GAFJrhN,EAAS2qC,GAAU3qC,IAEMs6L,GAAW3yH,GAAU,EAC9C,OAAQ3nE,GAAUqhN,EAAYrhN,EACzBsxM,GAActxM,EAASqhN,EAAW9P,GAAS5pI,EAC5CA,CACN,EAo0EAm2H,GAAOz5K,SA1yEP,SAAkBsjD,EAAQ65I,EAAO3S,GAM/B,OALIA,GAAkB,MAAT2S,EACXA,EAAQ,EACCA,IACTA,GAASA,GAEJzkB,GAAehmM,GAAS4wE,GAAQzhE,QAAQisL,GAAa,IAAKqvB,GAAS,EAC5E,EAoyEA1jB,GAAO52J,OA1rFP,SAAgB85J,EAAOC,EAAOwgB,GA2B5B,GA1BIA,GAA+B,kBAAZA,GAAyB3S,GAAe9N,EAAOC,EAAOwgB,KAC3ExgB,EAAQwgB,EAAWh+M,GAEjBg+M,IAAah+M,IACK,kBAATw9L,GACTwgB,EAAWxgB,EACXA,EAAQx9L,GAEe,kBAATu9L,IACdygB,EAAWzgB,EACXA,EAAQv9L,IAGRu9L,IAAUv9L,GAAaw9L,IAAUx9L,GACnCu9L,EAAQ,EACRC,EAAQ,IAGRD,EAAQ0Q,GAAS1Q,GACbC,IAAUx9L,GACZw9L,EAAQD,EACRA,EAAQ,GAERC,EAAQyQ,GAASzQ,IAGjBD,EAAQC,EAAO,CACjB,IAAIr+H,EAAOo+H,EACXA,EAAQC,EACRA,EAAQr+H,CACV,CACA,GAAI6+I,GAAYzgB,EAAQ,GAAKC,EAAQ,EAAG,CACtC,IAAImT,EAAOpX,KACX,OAAOH,GAAUmE,EAASoT,GAAQnT,EAAQD,EAAQjL,GAAe,QAAUqe,EAAO,IAAIp0M,OAAS,KAAOihM,EACxG,CACA,OAAOjB,GAAWgB,EAAOC,EAC3B,EAspFAnD,GAAO1/L,OA5+NP,SAAgB6f,EAAYm5K,EAAUC,GACpC,IAAIzyK,EAAOR,GAAQnG,GAAc+5K,GAAcgB,GAC3Cf,EAAYl4L,UAAUC,OAAS,EAEnC,OAAO4kB,EAAK3G,EAAYurL,GAAYpS,EAAU,GAAIC,EAAaY,EAAW2I,GAC5E,EAw+NA9C,GAAO4jB,YAh9NP,SAAqBzjM,EAAYm5K,EAAUC,GACzC,IAAIzyK,EAAOR,GAAQnG,GAAci6K,GAAmBc,GAChDf,EAAYl4L,UAAUC,OAAS,EAEnC,OAAO4kB,EAAK3G,EAAYurL,GAAYpS,EAAU,GAAIC,EAAaY,EAAW2L,GAC5E,EA48NA9F,GAAOv2H,OA/wEP,SAAgBI,EAAQ/7B,EAAGijK,GAMzB,OAJEjjK,GADGijK,EAAQC,GAAennI,EAAQ/7B,EAAGijK,GAASjjK,IAAMnoC,GAChD,EAEAknC,GAAUiB,GAET2+J,GAAWxzM,GAAS4wE,GAAS/7B,EACtC,EAywEAkyJ,GAAO53L,QApvEP,WACE,IAAIjG,EAAOF,UACP4nE,EAAS5wE,GAASkJ,EAAK,IAE3B,OAAOA,EAAKD,OAAS,EAAI2nE,EAASA,EAAOzhE,QAAQjG,EAAK,GAAIA,EAAK,GACjE,EAgvEA69L,GAAOj/L,OAtoGP,SAAgB6f,EAAQkU,EAAMwlE,GAG5B,IAAIl1F,GAAS,EACTlD,GAHJ4yB,EAAO6xK,GAAS7xK,EAAMlU,IAGJ1e,OAOlB,IAJKA,IACHA,EAAS,EACT0e,EAASjb,KAEFP,EAAQlD,GAAQ,CACvB,IAAI6H,EAAkB,MAAV6W,EAAiBjb,EAAYib,EAAOgmL,GAAM9xK,EAAK1vB,KACvD2E,IAAUpE,IACZP,EAAQlD,EACR6H,EAAQuwF,GAEV15E,EAAS47H,GAAWzyI,GAASA,EAAMgM,KAAK6K,GAAU7W,CACpD,CACA,OAAO6W,CACT,EAmnGAo/K,GAAOnmM,MAAQA,GACfmmM,GAAOlD,aAAeA,EACtBkD,GAAO6jB,OA15NP,SAAgB1jM,GAEd,OADWmG,GAAQnG,GAAc8hL,GAAc4K,IACnC1sL,EACd,EAw5NA6/K,GAAO7+K,KA/0NP,SAAchB,GACZ,GAAkB,MAAdA,EACF,OAAO,EAET,GAAIwjJ,GAAYxjJ,GACd,OAAOu/F,GAASv/F,GAAcq8K,GAAWr8K,GAAcA,EAAWje,OAEpE,IAAI4mB,EAAM66K,GAAOxjL,GACjB,OAAI2I,GAAOqpK,GAAUrpK,GAAO0pK,EACnBryK,EAAWgB,KAEbmpL,GAASnqL,GAAYje,MAC9B,EAo0NA89L,GAAOsc,UAAYA,GACnBtc,GAAO19L,KA/xNP,SAAc6d,EAAYqtB,EAAWujK,GACnC,IAAIjqL,EAAOR,GAAQnG,GAAck6K,GAAYgT,GAI7C,OAHI0D,GAASC,GAAe7wL,EAAYqtB,EAAWujK,KACjDvjK,EAAY7nC,GAEPmhB,EAAK3G,EAAYurL,GAAYl+J,EAAW,GACjD,EA0xNAwyJ,GAAO8jB,YAhsRP,SAAqBtrM,EAAOzO,GAC1B,OAAOujM,GAAgB90L,EAAOzO,EAChC,EA+rRAi2L,GAAO+jB,cApqRP,SAAuBvrM,EAAOzO,EAAOuvL,GACnC,OAAOoU,GAAkBl1L,EAAOzO,EAAO2hM,GAAYpS,EAAU,GAC/D,EAmqRA0G,GAAOgkB,cAjpRP,SAAuBxrM,EAAOzO,GAC5B,IAAI7H,EAAkB,MAATsW,EAAgB,EAAIA,EAAMtW,OACvC,GAAIA,EAAQ,CACV,IAAIkD,EAAQkoM,GAAgB90L,EAAOzO,GACnC,GAAI3E,EAAQlD,GAAU26I,GAAGrkI,EAAMpT,GAAQ2E,GACrC,OAAO3E,CAEX,CACA,OAAQ,CACV,EAyoRA46L,GAAOikB,gBArnRP,SAAyBzrM,EAAOzO,GAC9B,OAAOujM,GAAgB90L,EAAOzO,GAAO,EACvC,EAonRAi2L,GAAOkkB,kBAzlRP,SAA2B1rM,EAAOzO,EAAOuvL,GACvC,OAAOoU,GAAkBl1L,EAAOzO,EAAO2hM,GAAYpS,EAAU,IAAI,EACnE,EAwlRA0G,GAAOmkB,kBAtkRP,SAA2B3rM,EAAOzO,GAEhC,GADsB,MAATyO,GAAoBA,EAAMtW,OAC3B,CACV,IAAIkD,EAAQkoM,GAAgB90L,EAAOzO,GAAO,GAAQ,EAClD,GAAI8yI,GAAGrkI,EAAMpT,GAAQ2E,GACnB,OAAO3E,CAEX,CACA,OAAQ,CACV,EA8jRA46L,GAAOuc,UAAYA,GACnBvc,GAAOvzJ,WA3oEP,SAAoBo9B,EAAQhrE,EAAQK,GAOlC,OANA2qE,EAAS5wE,GAAS4wE,GAClB3qE,EAAuB,MAAZA,EACP,EACAojM,GAAUz1J,GAAU3tC,GAAW,EAAG2qE,EAAO3nE,QAE7CrD,EAASyvM,GAAazvM,GACfgrE,EAAO35D,MAAMhR,EAAUA,EAAWL,EAAOqD,SAAWrD,CAC7D,EAooEAmhM,GAAOjf,SAAWA,GAClBif,GAAOokB,IAzUP,SAAa5rM,GACX,OAAQA,GAASA,EAAMtW,OACnB84L,GAAQxiL,EAAO2xL,IACf,CACN,EAsUAnK,GAAOqkB,MA7SP,SAAe7rM,EAAO8gL,GACpB,OAAQ9gL,GAASA,EAAMtW,OACnB84L,GAAQxiL,EAAOkzL,GAAYpS,EAAU,IACrC,CACN,EA0SA0G,GAAOroI,SA7hEP,SAAkBkS,EAAQ/mE,EAASiuM,GAIjC,IAAIz1J,EAAW0kJ,GAAOyF,iBAElBsL,GAASC,GAAennI,EAAQ/mE,EAASiuM,KAC3CjuM,EAAU6C,GAEZkkE,EAAS5wE,GAAS4wE,GAClB/mE,EAAUk4M,GAAa,CAAC,EAAGl4M,EAASw4C,EAAU05J,IAE9C,IAIIsP,EACAC,EALAx8G,EAAUizG,GAAa,CAAC,EAAGl4M,EAAQilG,QAASzsD,EAASysD,QAASitG,IAC9DwP,EAAcjgN,GAAKwjG,GACnB08G,EAAgBlpB,GAAWxzF,EAASy8G,GAIpCp/M,EAAQ,EACR47E,EAAcl+E,EAAQk+E,aAAeo0G,GACrCxwJ,EAAS,WAGT8/K,EAAe/6I,IAChB7mE,EAAQ0kK,QAAU4tB,IAAWxwJ,OAAS,IACvCo8C,EAAYp8C,OAAS,KACpBo8C,IAAgBgzG,EAAgBY,GAAeQ,IAAWxwJ,OAAS,KACnE9hC,EAAQqZ,UAAYi5K,IAAWxwJ,OAAS,KACzC,KAME+/K,EAAY,kBACbr9M,GAAeyO,KAAKjT,EAAS,cACzBA,EAAQ6hN,UAAY,IAAIv8M,QAAQ,MAAO,KACvC,6BAA+ByvL,GAAmB,KACnD,KAENhuH,EAAOzhE,QAAQs8M,GAAc,SAAS/jK,EAAOikK,EAAaC,EAAkBC,EAAiBC,EAAel5M,GAsB1G,OArBAg5M,IAAqBA,EAAmBC,GAGxClgL,GAAUilC,EAAO35D,MAAM9K,EAAOyG,GAAQzD,QAAQitL,GAAmB0G,IAG7D6oB,IACFN,GAAa,EACb1/K,GAAU,YAAcggL,EAAc,UAEpCG,IACFR,GAAe,EACf3/K,GAAU,OAASmgL,EAAgB,eAEjCF,IACFjgL,GAAU,iBAAmBigL,EAAmB,+BAElDz/M,EAAQyG,EAAS80C,EAAMz+C,OAIhBy+C,CACT,IAEA/b,GAAU,OAIV,IAAIogL,EAAW19M,GAAeyO,KAAKjT,EAAS,aAAeA,EAAQkiN,SACnE,GAAKA,GAKA,GAAIrwB,GAA2Bj6L,KAAKsqN,GACvC,MAAM,IAAIjiM,GA3idmB,2DAsid7B6hB,EAAS,iBAAmBA,EAAS,QASvCA,GAAU2/K,EAAe3/K,EAAOx8B,QAAQmrL,EAAsB,IAAM3uJ,GACjEx8B,QAAQorL,EAAqB,MAC7BprL,QAAQqrL,EAAuB,OAGlC7uJ,EAAS,aAAeogL,GAAY,OAAS,SAC1CA,EACG,GACA,wBAEJ,qBACCV,EACI,mBACA,KAEJC,EACG,uFAEA,OAEJ3/K,EACA,gBAEF,IAAI7jC,EAAS2+H,IAAQ,WACnB,OAAOpjH,GAASkoM,EAAaG,EAAY,UAAY//K,GAClD9kB,MAAMna,EAAW8+M,EACtB,IAKA,GADA1jN,EAAO6jC,OAASA,EACZ6pG,GAAQ1tI,GACV,MAAMA,EAER,OAAOA,CACT,EA26DAi/L,GAAOilB,MApsBP,SAAen3K,EAAGwrJ,GAEhB,IADAxrJ,EAAIjB,GAAUiB,IACN,GAAKA,EAAI0jJ,EACf,MAAO,GAET,IAAIpsL,EAAQssL,EACRxvL,EAAS68L,GAAUjxJ,EAAG4jJ,GAE1B4H,EAAWoS,GAAYpS,GACvBxrJ,GAAK4jJ,EAGL,IADA,IAAI3wL,EAASo6L,GAAUj5L,EAAQo3L,KACtBl0L,EAAQ0oC,GACfwrJ,EAASl0L,GAEX,OAAOrE,CACT,EAqrBAi/L,GAAO4T,SAAWA,GAClB5T,GAAOnzJ,UAAYA,GACnBmzJ,GAAOl3J,SAAWA,GAClBk3J,GAAOklB,QAx5DP,SAAiBn7M,GACf,OAAO9Q,GAAS8Q,GAAOvN,aACzB,EAu5DAwjM,GAAOxjL,SAAWA,GAClBwjL,GAAOmlB,cApuIP,SAAuBp7M,GACrB,OAAOA,EACHu4L,GAAUz1J,GAAU9iC,IAAQ,iBAAmBynL,GACpC,IAAVznL,EAAcA,EAAQ,CAC7B,EAiuIAi2L,GAAO/mM,SAAWA,GAClB+mM,GAAOolB,QAn4DP,SAAiBr7M,GACf,OAAO9Q,GAAS8Q,GAAO8M,aACzB,EAk4DAmpL,GAAOjhI,KA12DP,SAAc8K,EAAQ4pI,EAAO1C,GAE3B,IADAlnI,EAAS5wE,GAAS4wE,MACHknI,GAAS0C,IAAU9tM,GAChC,OAAOy1L,GAASvxH,GAElB,IAAKA,KAAY4pI,EAAQnF,GAAamF,IACpC,OAAO5pI,EAET,IAAI6xH,EAAagB,GAAc7yH,GAC3B8xH,EAAae,GAAc+W,GAI/B,OAAOlE,GAAU7T,EAHLD,GAAgBC,EAAYC,GAC9BC,GAAcF,EAAYC,GAAc,GAETphM,KAAK,GAChD,EA61DAylM,GAAOqlB,QAx0DP,SAAiBx7I,EAAQ4pI,EAAO1C,GAE9B,IADAlnI,EAAS5wE,GAAS4wE,MACHknI,GAAS0C,IAAU9tM,GAChC,OAAOkkE,EAAO35D,MAAM,EAAGmrL,GAAgBxxH,GAAU,GAEnD,IAAKA,KAAY4pI,EAAQnF,GAAamF,IACpC,OAAO5pI,EAET,IAAI6xH,EAAagB,GAAc7yH,GAG/B,OAAO0lI,GAAU7T,EAAY,EAFnBE,GAAcF,EAAYgB,GAAc+W,IAAU,GAEvBl5M,KAAK,GAC5C,EA6zDAylM,GAAOslB,UAxyDP,SAAmBz7I,EAAQ4pI,EAAO1C,GAEhC,IADAlnI,EAAS5wE,GAAS4wE,MACHknI,GAAS0C,IAAU9tM,GAChC,OAAOkkE,EAAOzhE,QAAQisL,GAAa,IAErC,IAAKxqH,KAAY4pI,EAAQnF,GAAamF,IACpC,OAAO5pI,EAET,IAAI6xH,EAAagB,GAAc7yH,GAG/B,OAAO0lI,GAAU7T,EAFLD,GAAgBC,EAAYgB,GAAc+W,KAElBl5M,KAAK,GAC3C,EA6xDAylM,GAAOzwB,SAtvDP,SAAkB1lG,EAAQ/mE,GACxB,IAAIZ,EAnvdmB,GAovdnBqjN,EAnvdqB,MAqvdzB,GAAIxoJ,GAASj6D,GAAU,CACrB,IAAImjE,EAAY,cAAenjE,EAAUA,EAAQmjE,UAAYA,EAC7D/jE,EAAS,WAAYY,EAAU+pC,GAAU/pC,EAAQZ,QAAUA,EAC3DqjN,EAAW,aAAcziN,EAAUwrM,GAAaxrM,EAAQyiN,UAAYA,CACtE,CAGA,IAAIhC,GAFJ15I,EAAS5wE,GAAS4wE,IAEK3nE,OACvB,GAAI+5L,GAAWpyH,GAAS,CACtB,IAAI6xH,EAAagB,GAAc7yH,GAC/B05I,EAAY7nB,EAAWx5L,MACzB,CACA,GAAIA,GAAUqhN,EACZ,OAAO15I,EAET,IAAI7pE,EAAMkC,EAASs6L,GAAW+oB,GAC9B,GAAIvlN,EAAM,EACR,OAAOulN,EAET,IAAIxkN,EAAS26L,EACT6T,GAAU7T,EAAY,EAAG17L,GAAKzF,KAAK,IACnCsvE,EAAO35D,MAAM,EAAGlQ,GAEpB,GAAIimE,IAActgE,EAChB,OAAO5E,EAASwkN,EAKlB,GAHI7pB,IACF17L,GAAQe,EAAOmB,OAASlC,GAEtBg5L,GAAS/yH,IACX,GAAI4D,EAAO35D,MAAMlQ,GAAK80D,OAAOmR,GAAY,CACvC,IAAItlB,EACAnb,EAAYzkC,EAMhB,IAJKklE,EAAUv3B,SACbu3B,EAAY0D,GAAO1D,EAAUrhC,OAAQ3rC,GAAS47L,GAAQx6J,KAAK4rC,IAAc,MAE3EA,EAAUz5B,UAAY,EACdmU,EAAQslB,EAAU5rC,KAAKmL,IAC7B,IAAIggL,EAAS7kK,EAAMv7C,MAErBrE,EAASA,EAAOmP,MAAM,EAAGs1M,IAAW7/M,EAAY3F,EAAMwlN,EACxD,OACK,GAAI37I,EAAOvrE,QAAQgwM,GAAaroI,GAAYjmE,IAAQA,EAAK,CAC9D,IAAIoF,EAAQrE,EAAOouE,YAAYlJ,GAC3B7gE,GAAS,IACXrE,EAASA,EAAOmP,MAAM,EAAG9K,GAE7B,CACA,OAAOrE,EAASwkN,CAClB,EAisDAvlB,GAAO7uK,SA5qDP,SAAkB04C,GAEhB,OADAA,EAAS5wE,GAAS4wE,KACA+pH,EAAiBl5L,KAAKmvE,GACpCA,EAAOzhE,QAAQsrL,EAAemJ,IAC9BhzH,CACN,EAwqDAm2H,GAAOylB,SAvpBP,SAAkBh7L,GAChB,IAAI7Q,IAAOwjL,GACX,OAAOnkM,GAASwxB,GAAU7Q,CAC5B,EAqpBAomL,GAAOwc,UAAYA,GACnBxc,GAAOkc,WAAaA,GAGpBlc,GAAOpmE,KAAOt4H,GACd0+L,GAAO0lB,UAAYxN,GACnBlY,GAAOnqH,MAAQrQ,GAEf9H,GAAMsiI,IACAp7J,GAAS,CAAC,EACdihK,GAAW7F,IAAQ,SAASl5K,EAAM8jG,GAC3BtjH,GAAeyO,KAAKiqL,GAAOzqL,UAAWq1G,KACzChmF,GAAOgmF,GAAc9jG,EAEzB,IACO8d,IACH,CAAE,OAAS,IAWjBo7J,GAAO2lB,QA/ihBK,UAkjhBZnsB,GAAU,CAAC,OAAQ,UAAW,QAAS,aAAc,UAAW,iBAAiB,SAAS5uE,GACxFo1E,GAAOp1E,GAAYyxE,YAAc2D,EACnC,IAGAxG,GAAU,CAAC,OAAQ,SAAS,SAAS5uE,EAAYxlH,GAC/C86L,GAAY3qL,UAAUq1G,GAAc,SAAS98E,GAC3CA,EAAIA,IAAMnoC,EAAY,EAAIm5L,GAAUjyJ,GAAUiB,GAAI,GAElD,IAAI/sC,EAAUgX,KAAK+oL,eAAiB17L,EAChC,IAAI86L,GAAYnoL,MAChBA,KAAK82I,QAUT,OARI9tJ,EAAO+/L,aACT//L,EAAOigM,cAAgBjC,GAAUjxJ,EAAG/sC,EAAOigM,eAE3CjgM,EAAOkgM,UAAUt/L,KAAK,CACpB,KAAQo9L,GAAUjxJ,EAAG4jJ,GACrB,KAAQ9mE,GAAc7pH,EAAO8/L,QAAU,EAAI,QAAU,MAGlD9/L,CACT,EAEAm/L,GAAY3qL,UAAUq1G,EAAa,SAAW,SAAS98E,GACrD,OAAO/1B,KAAKgG,UAAU6sG,GAAY98E,GAAG/vB,SACvC,CACF,IAGAy7K,GAAU,CAAC,SAAU,MAAO,cAAc,SAAS5uE,EAAYxlH,GAC7D,IAAIsb,EAAOtb,EAAQ,EACfwgN,EAjihBe,GAiihBJllM,GA/hhBG,GA+hhByBA,EAE3Cw/K,GAAY3qL,UAAUq1G,GAAc,SAAS0uE,GAC3C,IAAIv4L,EAASgX,KAAK82I,QAMlB,OALA9tJ,EAAOggM,cAAcp/L,KAAK,CACxB,SAAY+pM,GAAYpS,EAAU,GAClC,KAAQ54K,IAEV3f,EAAO+/L,aAAe//L,EAAO+/L,cAAgB8kB,EACtC7kN,CACT,CACF,IAGAy4L,GAAU,CAAC,OAAQ,SAAS,SAAS5uE,EAAYxlH,GAC/C,IAAIygN,EAAW,QAAUzgN,EAAQ,QAAU,IAE3C86L,GAAY3qL,UAAUq1G,GAAc,WAClC,OAAO7yG,KAAK8tM,GAAU,GAAG97M,QAAQ,EACnC,CACF,IAGAyvL,GAAU,CAAC,UAAW,SAAS,SAAS5uE,EAAYxlH,GAClD,IAAI0gN,EAAW,QAAU1gN,EAAQ,GAAK,SAEtC86L,GAAY3qL,UAAUq1G,GAAc,WAClC,OAAO7yG,KAAK+oL,aAAe,IAAIZ,GAAYnoL,MAAQA,KAAK+tM,GAAU,EACpE,CACF,IAEA5lB,GAAY3qL,UAAU0oM,QAAU,WAC9B,OAAOlmM,KAAKpY,OAAOwqM,GACrB,EAEAjK,GAAY3qL,UAAUtF,KAAO,SAASu9B,GACpC,OAAOz1B,KAAKpY,OAAO6tC,GAAWg4B,MAChC,EAEA06H,GAAY3qL,UAAU0iM,SAAW,SAASzqK,GACxC,OAAOz1B,KAAKgG,UAAU9N,KAAKu9B,EAC7B,EAEA0yJ,GAAY3qL,UAAU6iM,UAAY1L,IAAS,SAAS53K,EAAM3yB,GACxD,MAAmB,mBAAR2yB,EACF,IAAIorK,GAAYnoL,MAElBA,KAAK5d,KAAI,SAAS4P,GACvB,OAAO+9L,GAAW/9L,EAAO+qB,EAAM3yB,EACjC,GACF,IAEA+9L,GAAY3qL,UAAUg9B,OAAS,SAAS/E,GACtC,OAAOz1B,KAAKpY,OAAOo6M,GAAOrO,GAAYl+J,IACxC,EAEA0yJ,GAAY3qL,UAAUrF,MAAQ,SAASnQ,EAAOC,GAC5CD,EAAQ8sC,GAAU9sC,GAElB,IAAIgB,EAASgX,KACb,OAAIhX,EAAO+/L,eAAiB/gM,EAAQ,GAAKC,EAAM,GACtC,IAAIkgM,GAAYn/L,IAErBhB,EAAQ,EACVgB,EAASA,EAAOq/M,WAAWrgN,GAClBA,IACTgB,EAASA,EAAOw9M,KAAKx+M,IAEnBC,IAAQ2F,IAEV5E,GADAf,EAAM6sC,GAAU7sC,IACD,EAAIe,EAAOy9M,WAAWx+M,GAAOe,EAAOo/M,KAAKngN,EAAMD,IAEzDgB,EACT,EAEAm/L,GAAY3qL,UAAU8qM,eAAiB,SAAS7yK,GAC9C,OAAOz1B,KAAKgG,UAAUuiM,UAAU9yK,GAAWzvB,SAC7C,EAEAmiL,GAAY3qL,UAAUwqI,QAAU,WAC9B,OAAOhoI,KAAKooM,KAAKzuB,EACnB,EAGAmU,GAAW3F,GAAY3qL,WAAW,SAASuR,EAAM8jG,GAC/C,IAAIm7F,EAAgB,qCAAqCrrN,KAAKkwH,GAC1Do7F,EAAU,kBAAkBtrN,KAAKkwH,GACjCq7F,EAAajmB,GAAOgmB,EAAW,QAAwB,QAAdp7F,EAAuB,QAAU,IAAOA,GACjFs7F,EAAeF,GAAW,QAAQtrN,KAAKkwH,GAEtCq7F,IAGLjmB,GAAOzqL,UAAUq1G,GAAc,WAC7B,IAAI7gH,EAAQgO,KAAKyoL,YACbr+L,EAAO6jN,EAAU,CAAC,GAAK/jN,UACvBkkN,EAASp8M,aAAiBm2L,GAC1B5G,EAAWn3L,EAAK,GAChBikN,EAAUD,GAAU7/L,GAAQvc,GAE5B+tM,EAAc,SAAS/tM,GACzB,IAAIhJ,EAASklN,EAAWnmM,MAAMkgL,GAAQ/xC,GAAU,CAAClkJ,GAAQ5H,IACzD,OAAQ6jN,GAAWzlB,EAAYx/L,EAAO,GAAKA,CAC7C,EAEIqlN,GAAWL,GAAoC,mBAAZzsB,GAA6C,GAAnBA,EAASp3L,SAExEikN,EAASC,GAAU,GAErB,IAAI7lB,EAAWxoL,KAAK2oL,UAChB2lB,IAAatuM,KAAK0oL,YAAYv+L,OAC9BokN,EAAcJ,IAAiB3lB,EAC/BgmB,EAAWJ,IAAWE,EAE1B,IAAKH,GAAgBE,EAAS,CAC5Br8M,EAAQw8M,EAAWx8M,EAAQ,IAAIm2L,GAAYnoL,MAC3C,IAAIhX,EAAS+lB,EAAKhH,MAAM/V,EAAO5H,GAE/B,OADApB,EAAO0/L,YAAY9+L,KAAK,CAAE,KAAQmwM,GAAM,KAAQ,CAACgG,GAAc,QAAWnyM,IACnE,IAAIw6L,GAAcp/L,EAAQw/L,EACnC,CACA,OAAI+lB,GAAeC,EACVz/L,EAAKhH,MAAM/H,KAAM5V,IAE1BpB,EAASgX,KAAK+5L,KAAKgG,GACZwO,EAAeN,EAAUjlN,EAAOgJ,QAAQ,GAAKhJ,EAAOgJ,QAAWhJ,EACxE,EACF,IAGAy4L,GAAU,CAAC,MAAO,OAAQ,QAAS,OAAQ,SAAU,YAAY,SAAS5uE,GACxE,IAAI9jG,EAAO/E,GAAW6oG,GAClB47F,EAAY,0BAA0B9rN,KAAKkwH,GAAc,MAAQ,OACjEs7F,EAAe,kBAAkBxrN,KAAKkwH,GAE1Co1E,GAAOzqL,UAAUq1G,GAAc,WAC7B,IAAIzoH,EAAOF,UACX,GAAIikN,IAAiBnuM,KAAK2oL,UAAW,CACnC,IAAI32L,EAAQgO,KAAKhO,QACjB,OAAO+c,EAAKhH,MAAMwG,GAAQvc,GAASA,EAAQ,GAAI5H,EACjD,CACA,OAAO4V,KAAKyuM,IAAW,SAASz8M,GAC9B,OAAO+c,EAAKhH,MAAMwG,GAAQvc,GAASA,EAAQ,GAAI5H,EACjD,GACF,CACF,IAGA0jM,GAAW3F,GAAY3qL,WAAW,SAASuR,EAAM8jG,GAC/C,IAAIq7F,EAAajmB,GAAOp1E,GACxB,GAAIq7F,EAAY,CACd,IAAIzhN,EAAMyhN,EAAW9kN,KAAO,GACvBmG,GAAeyO,KAAKupL,GAAW96L,KAClC86L,GAAU96L,GAAO,IAEnB86L,GAAU96L,GAAK7C,KAAK,CAAE,KAAQipH,EAAY,KAAQq7F,GACpD,CACF,IAEA3mB,GAAU6S,GAAaxsM,EAlthBA,GAkthB+BxE,MAAQ,CAAC,CAC7D,KAAQ,UACR,KAAQwE,IAIVu6L,GAAY3qL,UAAUs5I,MAh9dtB,WACE,IAAI9tJ,EAAS,IAAIm/L,GAAYnoL,KAAKyoL,aAOlC,OANAz/L,EAAO0/L,YAAc4B,GAAUtqL,KAAK0oL,aACpC1/L,EAAO8/L,QAAU9oL,KAAK8oL,QACtB9/L,EAAO+/L,aAAe/oL,KAAK+oL,aAC3B//L,EAAOggM,cAAgBsB,GAAUtqL,KAAKgpL,eACtChgM,EAAOigM,cAAgBjpL,KAAKipL,cAC5BjgM,EAAOkgM,UAAYoB,GAAUtqL,KAAKkpL,WAC3BlgM,CACT,EAw8dAm/L,GAAY3qL,UAAUwI,QA97dtB,WACE,GAAIhG,KAAK+oL,aAAc,CACrB,IAAI//L,EAAS,IAAIm/L,GAAYnoL,MAC7BhX,EAAO8/L,SAAW,EAClB9/L,EAAO+/L,cAAe,CACxB,MACE//L,EAASgX,KAAK82I,SACPgyC,UAAY,EAErB,OAAO9/L,CACT,EAq7dAm/L,GAAY3qL,UAAUxL,MA36dtB,WACE,IAAIyO,EAAQT,KAAKyoL,YAAYz2L,QACzB4zI,EAAM5lI,KAAK8oL,QACXa,EAAQp7K,GAAQ9N,GAChBiuM,EAAU9oE,EAAM,EAChBq1D,EAAYtR,EAAQlpL,EAAMtW,OAAS,EACnCy/B,EA8pIN,SAAiB5hC,EAAOC,EAAKi6M,GAI3B,IAHA,IAAI70M,GAAS,EACTlD,EAAS+3M,EAAW/3M,SAEfkD,EAAQlD,GAAQ,CACvB,IAAIoC,EAAO21M,EAAW70M,GAClB+b,EAAO7c,EAAK6c,KAEhB,OAAQ7c,EAAKoc,MACX,IAAK,OAAa3gB,GAASohB,EAAM,MACjC,IAAK,YAAanhB,GAAOmhB,EAAM,MAC/B,IAAK,OAAanhB,EAAM++L,GAAU/+L,EAAKD,EAAQohB,GAAO,MACtD,IAAK,YAAaphB,EAAQ++L,GAAU/+L,EAAOC,EAAMmhB,GAErD,CACA,MAAO,CAAE,MAASphB,EAAO,IAAOC,EAClC,CA9qIa0mN,CAAQ,EAAG1T,EAAWj7L,KAAKkpL,WAClClhM,EAAQ4hC,EAAK5hC,MACbC,EAAM2hC,EAAK3hC,IACXkC,EAASlC,EAAMD,EACfqF,EAAQqhN,EAAUzmN,EAAOD,EAAQ,EACjCyrM,EAAYzzL,KAAKgpL,cACjB4lB,EAAanb,EAAUtpM,OACvB03L,EAAW,EACXgtB,EAAY7nB,GAAU78L,EAAQ6V,KAAKipL,eAEvC,IAAKU,IAAW+kB,GAAWzT,GAAa9wM,GAAU0kN,GAAa1kN,EAC7D,OAAO4sM,GAAiBt2L,EAAOT,KAAK0oL,aAEtC,IAAI1/L,EAAS,GAEbwkM,EACA,KAAOrjM,KAAY03L,EAAWgtB,GAAW,CAMvC,IAHA,IAAIC,GAAa,EACb98M,EAAQyO,EAHZpT,GAASu4I,KAKAkpE,EAAYF,GAAY,CAC/B,IAAIriN,EAAOknM,EAAUqb,GACjBvtB,EAAWh1L,EAAKg1L,SAChB54K,EAAOpc,EAAKoc,KACZ09J,EAAWkb,EAASvvL,GAExB,GA7zDY,GA6zDR2W,EACF3W,EAAQq0K,OACH,IAAKA,EAAU,CACpB,GAj0Da,GAi0DT19J,EACF,SAAS6kL,EAET,MAAMA,CAEV,CACF,CACAxkM,EAAO64L,KAAc7vL,CACvB,CACA,OAAOhJ,CACT,EA+3dAi/L,GAAOzqL,UAAU2lM,GAAKnD,GACtB/X,GAAOzqL,UAAU6mG,MA1iQjB,WACE,OAAOA,GAAMrkG,KACf,EAyiQAioL,GAAOzqL,UAAUuxM,OA7gQjB,WACE,OAAO,IAAI3mB,GAAcpoL,KAAKhO,QAASgO,KAAK2oL,UAC9C,EA4gQAV,GAAOzqL,UAAU3M,KAp/PjB,WACMmP,KAAK6oL,aAAej7L,IACtBoS,KAAK6oL,WAAa7gD,GAAQhoI,KAAKhO,UAEjC,IAAIqX,EAAOrJ,KAAK4oL,WAAa5oL,KAAK6oL,WAAW1+L,OAG7C,MAAO,CAAE,KAAQkf,EAAM,MAFXA,EAAOzb,EAAYoS,KAAK6oL,WAAW7oL,KAAK4oL,aAGtD,EA6+PAX,GAAOzqL,UAAU28L,MA77PjB,SAAsBnoM,GAIpB,IAHA,IAAIhJ,EACAyH,EAASuP,KAENvP,aAAkB83L,IAAY,CACnC,IAAIzxC,EAAQuxC,GAAa53L,GACzBqmJ,EAAM8xC,UAAY,EAClB9xC,EAAM+xC,WAAaj7L,EACf5E,EACFge,EAASyhL,YAAc3xC,EAEvB9tJ,EAAS8tJ,EAEX,IAAI9vI,EAAW8vI,EACfrmJ,EAASA,EAAOg4L,WAClB,CAEA,OADAzhL,EAASyhL,YAAcz2L,EAChBhJ,CACT,EA46PAi/L,GAAOzqL,UAAUwI,QAt5PjB,WACE,IAAIhU,EAAQgO,KAAKyoL,YACjB,GAAIz2L,aAAiBm2L,GAAa,CAChC,IAAIpgE,EAAU/1H,EAUd,OATIgO,KAAK0oL,YAAYv+L,SACnB49H,EAAU,IAAIogE,GAAYnoL,QAE5B+nH,EAAUA,EAAQ/hH,WACV0iL,YAAY9+L,KAAK,CACvB,KAAQmwM,GACR,KAAQ,CAAC/zL,IACT,QAAWpY,IAEN,IAAIw6L,GAAcrgE,EAAS/nH,KAAK2oL,UACzC,CACA,OAAO3oL,KAAK+5L,KAAK/zL,GACnB,EAu4PAiiL,GAAOzqL,UAAU4sH,OAAS69D,GAAOzqL,UAAUu7H,QAAUkvD,GAAOzqL,UAAUxL,MAv3PtE,WACE,OAAO+kM,GAAiB/2L,KAAKyoL,YAAazoL,KAAK0oL,YACjD,EAw3PAT,GAAOzqL,UAAUsgE,MAAQmqH,GAAOzqL,UAAUiwD,KAEtCw4H,KACFgC,GAAOzqL,UAAUyoL,IAj+PnB,WACE,OAAOjmL,IACT,GAi+POioL,EACR,CAKOlD,GAQNnlJ,GAAK/gC,EAAIA,IAIT,aACE,OAAOA,EACR,mCAaL,EAAEb,KAAKgC,oBCxzhBMghD,EAAOP,QAAU,EAAjB,OACNuuJ,GAAGjhL,KAAK,EAAQ,6BCDvB,WAMC,SAAU6R,EAAMvF,GAChB,aAGkC2mB,EAAOP,QACxCO,EAAOP,QAAUpmB,EAAQ,EAAQ,OAEjC,EAAO,CAAC,aAAkB,0BAAP,EAAF,GAAS,+BAI5B,CAXA,CAWEr6B,GAAM,SAAUivM,GACjB,kBAGuBrhN,IAAnBqhN,EAAO1sN,SAAyB0sN,EAAOztJ,UAC1CytJ,EAASA,EAAOztJ,SASjB,IAMC0tJ,EALAC,EAAQ,CAAC,EACTC,EAAQ,CAAC,EACTC,EAAY,CAAC,EACbtqL,EAAQ,CAAC,EACTuqL,EAAU,CAAC,EAGPL,GAAoC,iBAAnBA,EAAO1sN,SAC5BgtN,EAAS,gGAGV,IAAIC,EAAgBP,EAAO1sN,QAAQ0L,MAAM,KACxCwhN,GAASD,EAAc,GACvBE,GAASF,EAAc,GAWxB,SAASG,EAAc3sC,GACtB,OAAIA,EAAW,GACPA,EAAW,GACRA,EAAW,GACdA,EAAW,GAEZA,EAAW,EACnB,CAEA,SAAS4sC,EAAa99I,GACrB,IAAIx6D,EAAI,EACPoxE,EAAQ5W,EAAO7jE,MAAM,KACrB4hN,EAAQnnI,EAAM,GACdonI,EAAapnI,EAAM,IAAM,GACzBk9H,EAAa,EAEbl+D,EAAM,EACNqoE,EAAO,EASR,IAN6B,KAAzBj+I,EAAOn/C,WAAW,KACrBrb,EAAI,EACJy4M,GAAQ,GAIDz4M,EAAIu4M,EAAM1lN,OAAQmN,IAEzBowI,EAAM,GAAKA,EADLioE,EAAcE,EAAMl9L,WAAWrb,IAKtC,IAAKA,EAAI,EAAGA,EAAIw4M,EAAW3lN,OAAQmN,IAClCsuM,GAA0B,GAE1Bl+D,GADMioE,EAAcG,EAAWn9L,WAAWrb,IAC7BsuM,EAGd,OAAOl+D,EAAMqoE,CACd,CAEA,SAASC,EAAYvvM,GACpB,IAAK,IAAInJ,EAAI,EAAGA,EAAImJ,EAAMtW,OAAQmN,IACjCmJ,EAAMnJ,GAAKs4M,EAAanvM,EAAMnJ,GAEhC,CAUA,SAAS24M,EAAYpjL,EAAQqjL,GAC5B,IAAc54M,EAAVowI,EAAM,GAEV,IAAKpwI,EAAI,EAAGA,EAAI44M,EAAQ/lN,OAAQmN,IAC/BowI,EAAIpwI,GAAKu1B,EAAOqjL,EAAQ54M,IAGzB,OAAOowI,CACR,CAEA,SAASyoE,EAAQr+I,GAChB,IAAIvlE,EAAOulE,EAAO7jE,MAAM,KACvBpI,EAAU0G,EAAK,GAAG0B,MAAM,KACxBiiN,EAAU3jN,EAAK,GAAG0B,MAAM,IACxBmiN,EAAU7jN,EAAK,GAAG0B,MAAM,KAQzB,OANA+hN,EAAWnqN,GACXmqN,EAAWE,GACXF,EAAWI,GA1BZ,SAAqB3vM,EAAOtW,GAC3B,IAAK,IAAImN,EAAI,EAAGA,EAAInN,EAAQmN,IAC3BmJ,EAAMnJ,GAAK3V,KAAKG,OAAO2e,EAAMnJ,EAAI,IAAM,GAAiB,IAAXmJ,EAAMnJ,IAGpDmJ,EAAMtW,EAAS,GAAKuyI,GACrB,CAsBC2zE,CAAWD,EAAQF,EAAQ/lN,QAEpB,CACNf,KAAamD,EAAK,GAClB+jN,MAAaL,EAAW1jN,EAAK,GAAG0B,MAAM,KAAMiiN,GAC5CrqN,QAAaoqN,EAAWpqN,EAASqqN,GACjCE,OAAaA,EACbG,WAAuB,EAAVhkN,EAAK,GAEpB,CAMA,SAASikN,EAAMC,GACVA,GACHzwM,KAAK0wM,KAAKP,EAAOM,GAEnB,CA0EA,SAASE,EAASC,EAAcC,GAC/B7wM,KAAK5W,KAAOwnN,EACZ5wM,KAAKmvM,MAAQ0B,CACd,CAMA,SAASC,EAAS3N,GACjB,IAAI4N,EAAa5N,EAAG6N,eAChBC,EAAOF,EAAWnoK,MAAM,gBAaf,SARZqoK,EAJGA,GAAQA,EAAK,IAGhBA,EAAOA,EAAK,GAAGroK,MAAM,WACPqoK,EAAKzuN,KAAK,SAAMoL,GAI9BqjN,EAAOF,EAAWnoK,MAAM,gBACVqoK,EAAK,QAAKrjN,KAIxBqjN,OAAOrjN,GAGRoS,KAAKmjM,IAAMA,EACXnjM,KAAKixM,KAAOA,EACZjxM,KAAKlM,OAASqvM,EAAGzjE,mBAClB,CAEA,SAASwxE,EAAUC,GAClBnxM,KAAKmxM,KAAOA,EACZnxM,KAAKoxM,YAAc,EACnBpxM,KAAKqxM,UAAY,CAClB,CASA,SAASC,EAAW7b,EAAK9lC,GAGxB,IAFA,IAAI+lC,EAAKvkC,EAEDA,EAAyC,MAAhCxB,EAAKwzC,GAAK1N,EAAI0N,IAAM,KAAO,KAC3CzN,EAAM,IAAIob,EAAS,IAAIroJ,KAAKgtI,EAAI0N,GAAKhyC,KAC7Br9J,SAAW2hM,EAAI3hM,OACtB2hM,EAAMC,EAEN/lC,EAAO+lC,EAIT,OAAOD,CACR,CA0BA,SAAS8b,EAAgBx6M,EAAGC,GAC3B,OAAID,EAAEq6M,cAAgBp6M,EAAEo6M,YAChBr6M,EAAEq6M,YAAcp6M,EAAEo6M,YAEtBr6M,EAAEs6M,YAAcr6M,EAAEq6M,UACdt6M,EAAEs6M,UAAYr6M,EAAEq6M,UAEpBt6M,EAAEo6M,KAAKZ,aAAev5M,EAAEm6M,KAAKZ,WACzBv5M,EAAEm6M,KAAKZ,WAAax5M,EAAEo6M,KAAKZ,WAE5Bv5M,EAAEm6M,KAAK/nN,KAAKooN,cAAcz6M,EAAEo6M,KAAK/nN,KACzC,CAEA,SAASqoN,EAAcroN,EAAMvD,GAC5B,IAAIyR,EAAGxD,EAEP,IADAk8M,EAAWnqN,GACNyR,EAAI,EAAGA,EAAIzR,EAAQsE,OAAQmN,IAC/BxD,EAASjO,EAAQyR,GACjBg4M,EAAQx7M,GAAUw7M,EAAQx7M,IAAW,CAAC,EACtCw7M,EAAQx7M,GAAQ1K,IAAQ,CAE1B,CAEA,SAASsoN,EAAuB7rN,GAC/B,IAGCyR,EAAGoO,EAAGisM,EAHHC,EAAgB/rN,EAAQsE,OAC3B0nN,EAAkB,CAAC,EACnBnqE,EAAM,GAGP,IAAKpwI,EAAI,EAAGA,EAAIs6M,EAAet6M,IAE9B,IAAKoO,KADLisM,EAAgBrC,EAAQzpN,EAAQyR,GAAGxD,SAAW,CAAC,EAE1C69M,EAAcpiN,eAAemW,KAChCmsM,EAAgBnsM,IAAK,GAKxB,IAAKpO,KAAKu6M,EACLA,EAAgBtiN,eAAe+H,IAClCowI,EAAI99I,KAAKm7B,EAAMztB,IAIjB,OAAOowI,CACR,CAgDA,SAASoqE,EAAe1oN,GACvB,OAAQA,GAAQ,IAAI3E,cAAc4L,QAAQ,MAAO,IAClD,CAEA,SAAS0hN,EAASC,GACjB,IAAI16M,EAAGlO,EAAM6E,EAAO2sC,EAMpB,IAJsB,iBAAXo3K,IACVA,EAAS,CAACA,IAGN16M,EAAI,EAAGA,EAAI06M,EAAO7nN,OAAQmN,IAG9BsjC,EAAak3K,EADb1oN,GADA6E,EAAQ+jN,EAAO16M,GAAGrJ,MAAM,MACX,IAEbkhN,EAAMv0K,GAAco3K,EAAO16M,GAC3BytB,EAAM6V,GAAcxxC,EACpBqoN,EAAa72K,EAAY3sC,EAAM,GAAGA,MAAM,KAE1C,CAEA,SAASgkN,EAAS7oN,EAAMwpH,GAEvBxpH,EAAO0oN,EAAc1oN,GAErB,IACI8oN,EADAf,EAAOhC,EAAM/lN,GAGjB,OAAI+nN,aAAgBX,EACZW,EAGY,iBAATA,GACVA,EAAO,IAAIX,EAAKW,GAChBhC,EAAM/lN,GAAQ+nN,EACPA,GAIJ/B,EAAMhmN,IAASwpH,IAAWq/F,IAAYC,EAAOD,EAAQ7C,EAAMhmN,GAAO6oN,MACrEd,EAAOhC,EAAM/lN,GAAQ,IAAIonN,GACpBE,KAAKwB,GACVf,EAAK/nN,KAAO27B,EAAM37B,GACX+nN,GAGD,IACR,CAkBA,SAASgB,EAAS/gH,GACjB,IAAI95F,EAAG0lC,EAAOo1K,EAASC,EAMvB,IAJuB,iBAAZjhH,IACVA,EAAU,CAACA,IAGP95F,EAAI,EAAGA,EAAI85F,EAAQjnG,OAAQmN,IAG/B86M,EAAUN,GAFV90K,EAAQo0D,EAAQ95F,GAAGrJ,MAAM,MAEK,IAC9BokN,EAAUP,EAAc90K,EAAM,IAE9BoyK,EAAMgD,GAAWC,EACjBttL,EAAMqtL,GAAWp1K,EAAM,GAEvBoyK,EAAMiD,GAAWD,EACjBrtL,EAAMstL,GAAWr1K,EAAM,EAEzB,CAwDA,SAASs1K,EAAa5lN,GACrB,IAAI6lN,EAA4B,MAAT7lN,EAAE8lN,IAAuB,MAAT9lN,EAAE8lN,GACzC,SAAU9lN,EAAE2uC,SAAkBztC,IAAXlB,EAAE+lN,MAAwBF,EAC9C,CAEA,SAAShD,EAAU91L,GACK,oBAAZhQ,SAAoD,mBAAlBA,QAAQC,OACpDD,QAAQC,MAAM+P,EAEhB,CAMA,SAASu1L,EAAI13H,GACZ,IAAIltF,EAAOC,MAAMmT,UAAUrF,MAAM6F,KAAK9T,UAAW,GAAI,GACpDd,EAAOc,UAAUA,UAAUC,OAAS,GACpCgnN,EAAOc,EAAQ7oN,GACfs+I,EAAOunE,EAAOzvE,IAAIz3H,MAAM,KAAM3d,GAQ/B,OANI+mN,IAASlC,EAAOyD,SAASp7H,IAAUg7H,EAAY5qE,IAClDA,EAAIv+I,IAAIgoN,EAAKz9L,MAAMg0H,GAAM,WAG1BA,EAAIsnE,GAAG5lN,GAEAs+I,CACR,EA1gBI+nE,EAAQ,GAAgB,IAAVA,GAAeC,EAAQ,IACxCH,EAAS,wEAA0EN,EAAO1sN,QAAU,sBAuGrGiuN,EAAKhzM,UAAY,CAChBkzM,KAAO,SAAUiC,GAChB3yM,KAAK5W,KAAaupN,EAASvpN,KAC3B4W,KAAKswM,MAAaqC,EAASrC,MAC3BtwM,KAAKowM,OAAauC,EAASvC,OAC3BpwM,KAAKna,QAAa8sN,EAAS9sN,QAC3Bma,KAAKuwM,WAAaoC,EAASpC,UAC5B,EAEAqC,OAAS,SAAUltE,GAClB,IAECpuI,EAFGxQ,GAAU4+I,EACb0qE,EAASpwM,KAAKowM,OAGf,IAAK94M,EAAI,EAAGA,EAAI84M,EAAOjmN,OAAQmN,IAC9B,GAAIxQ,EAASspN,EAAO94M,GACnB,OAAOA,CAGV,EAEA+3M,UAAY,WACX,IAAIwD,EAAY7yM,KAAK5W,KACrB,OAAOgC,OAAOoB,KAAK6iN,GAAWznN,QAAO,SAAUkrN,GAC9C,OAA6D,IAAtDzD,EAAUyD,GAAc3D,MAAM5oN,QAAQssN,EAC9C,GACD,EAEAn/L,MAAQ,SAAUgyH,GACjB,IAIC5xI,EAAQi/M,EAAYC,EAAY17M,EAJ7BxQ,GAAW4+I,EACd7/I,EAAUma,KAAKna,QACfuqN,EAAUpwM,KAAKowM,OACfxuN,EAAUwuN,EAAOjmN,OAAS,EAG3B,IAAKmN,EAAI,EAAGA,EAAI1V,EAAK0V,IAWpB,GAVAxD,EAAajO,EAAQyR,GACrBy7M,EAAaltN,EAAQyR,EAAI,GACzB07M,EAAantN,EAAQyR,EAAIA,EAAI,EAAIA,GAE7BxD,EAASi/M,GAAc/D,EAAGiE,qBAC7Bn/M,EAASi/M,EACCj/M,EAASk/M,GAAchE,EAAGkE,qBACpCp/M,EAASk/M,GAGNlsN,EAASspN,EAAO94M,GAAe,IAATxD,EACzB,OAAOjO,EAAQyR,GAIjB,OAAOzR,EAAQjE,EAChB,EAEAqvN,KAAO,SAAUkC,GAChB,OAAOnzM,KAAKswM,MAAMtwM,KAAK4yM,OAAOO,GAC/B,EAEAr/M,OAAS,SAAUq/M,GAElB,OADA5D,EAAS,8DACFvvM,KAAKna,QAAQma,KAAK4yM,OAAOO,GACjC,EAEAC,UAAY,SAAUD,GACrB,OAAOnzM,KAAKna,QAAQma,KAAK4yM,OAAOO,GACjC,GA8CDjC,EAAU1zM,UAAU61M,cAAgB,SAAUC,GAC7CtzM,KAAKoxM,aAAezvN,KAAKsE,IAAI+Z,KAAKmxM,KAAKiC,UAAUE,EAASnQ,IAAMmQ,EAASx/M,QACrEkM,KAAKmxM,KAAKF,KAAKqC,EAASnQ,IAAI9yM,QAAQ,UAAW,MAAQijN,EAASrC,MACnEjxM,KAAKqxM,WAEP,EAgTArC,EAAGzsN,QA7hBW,SA8hBdysN,EAAGuE,YAAe,GAClBvE,EAAGwE,OAAerE,EAClBH,EAAGyE,OAAerE,EAClBJ,EAAGx5I,OAAezwC,EAClBiqL,EAAG0E,WAAarE,EAChBL,EAAG7lN,IAAe4oN,EAClB/C,EAAGkD,KAAeC,EAClBnD,EAAGjhL,KArDH,SAAmBxhC,GAClBwlN,EAAQxlN,EAAK4iN,OACbgD,EAAQ5lN,EAAK6iN,OAzCd,SAAuB7iN,GACtB,IAAI+K,EAAGw7M,EAAca,EAAe1lN,EACpC,GAAK1B,GAASA,EAAKpC,OACnB,IAAKmN,EAAI,EAAGA,EAAI/K,EAAKpC,OAAQmN,IAE5Bw7M,GADA7kN,EAAQ1B,EAAK+K,GAAGrJ,MAAM,MACD,GAAG6Q,cACxB60M,EAAgB1lN,EAAM,GAAGA,MAAM,KAC/BohN,EAAUyD,GAAgB,IAAInC,EAC7BmC,EACAa,EAGH,CA8BCC,CAAarnN,EAAK8iN,WAClBL,EAAGuE,YAAchnN,EAAKhK,OACvB,EAiDAysN,EAAGmC,KAAec,EAClBjD,EAAG6E,WAhDH,SAASA,EAAYzqN,GAKpB,OAJKyqN,EAAWC,eACfD,EAAWC,cAAe,EACzBvE,EAAS,yBAA2BnmN,EAAO,uDAAyDA,EAAO,SAEpG6oN,EAAQ7oN,EAClB,EA2CA4lN,EAAG+E,MAhMH,SAAgBC,GAIf,OAHK9E,IAAe8E,IACnB9E,EArCF,WAGC,IACC,IAAI+E,EAAWC,KAAKC,iBAAiBC,kBAAkBC,SACvD,GAAIJ,GAAYA,EAAS9pN,OAAS,EAAG,CACpC,IAAIf,EAAO27B,EAAM+sL,EAAcmC,IAC/B,GAAI7qN,EACH,OAAOA,EAERmmN,EAAS,yBAA2B0E,EAAW,yDAChD,CACD,CAAE,MAAO9gL,GAET,CAEA,IAICmhL,EAAWh9M,EAAGoO,EAJX7f,EAvFL,WACC,IAGC8lH,EAAQ96G,EAAMyG,EAHXurI,GAAY,IAAIp6E,MAAOyvE,cAAgB,EAC1C7+G,EAAO,IAAIy3L,EAAS,IAAIroJ,KAAKo6E,EAAW,EAAG,IAC3Ch9I,EAAU,CAACwzB,GAGZ,IAAK/hB,EAAI,EAAGA,EAAI,GAAIA,KACnBzG,EAAO,IAAIigN,EAAS,IAAIroJ,KAAKo6E,EAAWvrI,EAAG,KAClCxD,SAAWulB,EAAKvlB,SACxB63G,EAAS2lG,EAAWj4L,EAAMxoB,GAC1BhL,EAAQ+D,KAAK+hH,GACb9lH,EAAQ+D,KAAK,IAAIknN,EAAS,IAAIroJ,KAAKkjD,EAAOw3F,GAAK,QAEhD9pL,EAAOxoB,EAGR,IAAKyG,EAAI,EAAGA,EAAI,EAAGA,IAClBzR,EAAQ+D,KAAK,IAAIknN,EAAS,IAAIroJ,KAAKo6E,EAAYvrI,EAAG,EAAG,KACrDzR,EAAQ+D,KAAK,IAAIknN,EAAS,IAAIroJ,KAAKo6E,EAAYvrI,EAAG,EAAG,KAGtD,OAAOzR,CACR,CAiEe0uN,GACb3C,EAAgB/rN,EAAQsE,OACxBmlN,EAAUoC,EAAsB7rN,GAChC2uN,EAAa,GAGd,IAAKl9M,EAAI,EAAGA,EAAIg4M,EAAQnlN,OAAQmN,IAAK,CAEpC,IADAg9M,EAAY,IAAIpD,EAAUe,EAAQ3C,EAAQh4M,IAAKs6M,GAC1ClsM,EAAI,EAAGA,EAAIksM,EAAelsM,IAC9B4uM,EAAUjB,cAAcxtN,EAAQ6f,IAEjC8uM,EAAW5qN,KAAK0qN,EACjB,CAIA,OAFAE,EAAWvrN,KAAKsoN,GAETiD,EAAWrqN,OAAS,EAAIqqN,EAAW,GAAGrD,KAAK/nN,UAAOwE,CAC1D,CAIgB6mN,IAERvF,CACR,EA4LAF,EAAGjqL,MArIH,WACC,IAAIztB,EAAGowI,EAAM,GAEb,IAAKpwI,KAAKytB,EACLA,EAAMx1B,eAAe+H,KAAO63M,EAAM73M,IAAM63M,EAAMC,EAAM93M,MAAQytB,EAAMztB,IACrEowI,EAAI99I,KAAKm7B,EAAMztB,IAIjB,OAAOowI,EAAIz+I,MACZ,EA4HA+lN,EAAGwB,KAAeA,EAClBxB,EAAGmB,OAAeA,EAClBnB,EAAGY,aAAeA,EAClBZ,EAAGsD,YAAeA,EAClBtD,EAAGkE,oBAAuB,EAC1BlE,EAAGiE,sBAAuB,EAC1BjE,EAAGK,UAhIH,WACC,OAAOjkN,OAAOoB,KAAK6iN,EACpB,EA+HAL,EAAG0F,gBArFH,SAAyBC,EAASC,GALlC,IAAqBxrN,EAQpB,GAPAA,GADoBA,EAMCurN,GALT71M,gBAKZ61M,EAJOtF,EAAUjmN,IAAS,MAMZ,OAAO,KAErB,IAAI+lN,EAAQwF,EAAQxF,MAAMlmN,OAE1B,OAAI2rN,EACIzF,EAAM/sN,KAAI,SAAUywN,GAE1B,MAAO,CACNzpN,KAAMypN,EACN/+M,OAHUm+M,EAAQY,GAGLO,UAAU,IAAI3qJ,MAE7B,IAGM0mJ,CACR,EAyEA,IA8DyBjqM,EA9DrBla,EAAKikN,EAAOjkN,GAgDhB,SAAS6pN,EAAU3vM,GAClB,OAAO,WACN,OAAIlF,KAAK80M,GAAa90M,KAAK80M,GAAG7D,KAAKjxM,MAC5BkF,EAAIlH,KAAKgC,KACjB,CACD,CAEA,SAAS+0M,EAAe7vM,GACvB,OAAO,WAEN,OADAlF,KAAK80M,GAAK,KACH5vM,EAAI6C,MAAM/H,KAAM9V,UACxB,CACD,CA1DA+kN,EAAOD,GAAKA,EAEZC,EAAO+F,YAAc,KAErB/F,EAAOgG,aAAe,SAAU9B,EAAK+B,GACpC,IACCphN,EADGq9M,EAAOlC,EAAO+F,YAUlB,QAPepnN,IAAXulN,EAAI2B,KACH3D,GAAQmB,EAAYa,KAASA,EAAIgC,SACpChC,EAAIz1J,GAAKuxJ,EAAOzvE,IAAI2zE,EAAI93K,IAAIqiB,GAC5By1J,EAAI3zE,MAAMr2I,IAAIgoN,EAAKz9L,MAAMy/L,GAAM,YAEhCA,EAAI2B,GAAK3D,GAENgC,EAAI2B,GAKP,GAJAhhN,EAASq/M,EAAI2B,GAAG1B,UAAUD,GACtBxxN,KAAKsE,IAAI6N,GAAU,KACtBA,GAAkB,SAEGlG,IAAlBulN,EAAIC,UAAyB,CAChC,IAAIgC,EAAIjC,EAAI2B,GACZ3B,EAAIC,WAAWt/M,EAAQohN,GACvB/B,EAAI2B,GAAKM,CACV,MACCjC,EAAIhC,KAAKr9M,EAAQohN,EAGpB,EAEAlqN,EAAGgkN,GAAK,SAAU5lN,EAAM8rN,GACvB,GAAI9rN,EAAM,CACT,GAAoB,iBAATA,EACV,MAAM,IAAI4hB,MAAM,wCAA0C5hB,EAAO,YAAcA,EAAO,KAQvF,OANA4W,KAAK80M,GAAK7C,EAAQ7oN,GACd4W,KAAK80M,GACR7F,EAAOgG,aAAaj1M,KAAMk1M,GAE1B3F,EAAS,mCAAqCnmN,EAAO,4DAE/C4W,IACR,CACA,GAAIA,KAAK80M,GAAM,OAAO90M,KAAK80M,GAAG1rN,IAC/B,EAuBA4B,EAAGqqN,SAAYR,EAAS7pN,EAAGqqN,UAC3BrqN,EAAGsqN,SAAYT,EAAS7pN,EAAGsqN,UAC3BtqN,EAAGw0I,IAAYu1E,EAAc/pN,EAAGw0I,KAChCx0I,EAAGggF,MAAY+pI,EAAc/pN,EAAGggF,OAChChgF,EAAGooN,WAXsBluM,EAWKla,EAAGooN,UAVzB,WAEN,OADIlpN,UAAUC,OAAS,IAAG6V,KAAK80M,GAAK,MAC7B5vM,EAAI6C,MAAM/H,KAAM9V,UACxB,GASD+kN,EAAOD,GAAGuG,WAAa,SAASnsN,GAK/B,OAJIqmN,EAAQ,GAAgB,IAAVA,GAAeC,EAAQ,IACxCH,EAAS,qFAAuFN,EAAO1sN,QAAU,KAElH0sN,EAAO+F,YAAc5rN,EAAO6oN,EAAQ7oN,GAAQ,KACrC6lN,CACR,EAGA,IAAIuG,EAAmBvG,EAAOuG,iBAY9B,MAXyD,mBAArDpqN,OAAOoS,UAAUtc,SAAS8c,KAAKw3M,IAElCA,EAAiB5rN,KAAK,MACtB4rN,EAAiB5rN,KAAK,OACZ4rN,IAEVA,EAAiBV,GAAK,MAKhB7F,CACR,2BC5qBQ,SAAWA,GAAU,aAIzB,SAASwG,EAAoBpjE,EAAQqjE,EAAejpN,EAAKkpN,GACrD,IAAIv5E,EAAS,CACT1vI,EAAG,CAAC,cAAe,gBACnBkpN,EAAG,CAAC,cAAe,gBACnBllL,EAAG,CAAC,UAAW,aACfk5G,GAAI,CAACyI,EAAS,QAASA,EAAS,UAChC1J,EAAG,CAAC,aAAc,eAClBc,EAAG,CAAC,YAAa,eACjBC,GAAI,CAAC2I,EAAS,UAAWA,EAAS,YAClCzuJ,EAAG,CAAC,WAAY,cAChB+lJ,GAAI,CAAC0I,EAAS,SAAUA,EAAS,YAErC,OAAOqjE,EAAgBt5E,EAAO3vI,GAAK,GAAK2vI,EAAO3vI,GAAK,EACxD,CAESwiN,EAAO4G,aAAa,KAAM,CAC/BhxE,OAAQ,qFAAqF52I,MACzF,KAEJk0I,YACI,6DAA6Dl0I,MAAM,KACvE6nN,kBAAkB,EAClBC,SACI,8DAA8D9nN,MAC1D,KAER+nN,cAAe,8BAA8B/nN,MAAM,KACnDgoN,YAAa,uBAAuBhoN,MAAM,KAC1CioN,oBAAoB,EACpBC,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,eACJC,IAAK,qBACLC,KAAM,4BAEVC,SAAU,CACNC,QAAS,sBACTC,SAAU,IACVC,QAAS,uBACTC,SAAU,qBACVC,QAAS,wBACTC,SAAU,gCAEdC,aAAc,CACVC,OAAQ,QACRC,KAAM,SACNzyM,EAAG,oBACH0yM,GAAI,cACJ1qN,EAAG+oN,EACH5rE,GAAI,aACJ+rE,EAAGH,EACH4B,GAAI,aACJ3mL,EAAG+kL,EACH7rE,GAAI6rE,EACJ9sE,EAAG8sE,EACH6B,GAAI,YACJ7tE,EAAGgsE,EACH/rE,GAAI+rE,EACJ7xN,EAAG6xN,EACH9rE,GAAI8rE,GAER8B,uBAAwB,YACxBC,QAAS,MACTC,KAAM,CACFC,IAAK,EACLC,IAAK,IAMhB,CAhFyCt9K,CAAQ,EAAQ,6BCElD,SAAW40K,GAAU,aAIzB,IAAI2I,EACA,gEAAgE3pN,MAAM,KAC1E,SAAS4pN,EAAUxlE,EAAQqjE,EAAejpN,EAAKkpN,GAC3C,IAAI9pD,EAAMxZ,EACV,OAAQ5lJ,GACJ,IAAK,IACD,OAAOkpN,GAAYD,EACb,mBACA,oBACV,IAAK,KACD,OAAO7pD,GAAO8pD,GAAYD,GACpB,aACA,cACV,IAAK,IACD,MAAO,OAASC,GAAYD,EAAgB,QAAU,UAC1D,IAAK,KACD,OAAO7pD,GAAO8pD,GAAYD,EAAgB,QAAU,UACxD,IAAK,IACD,MAAO,OAASC,GAAYD,EAAgB,OAAS,UACzD,IAAK,KACD,OAAO7pD,GAAO8pD,GAAYD,EAAgB,OAAS,UACvD,IAAK,IACD,MAAO,OAASC,GAAYD,EAAgB,OAAS,UACzD,IAAK,KACD,OAAO7pD,GAAO8pD,GAAYD,EAAgB,OAAS,UACvD,IAAK,IACD,MAAO,OAASC,GAAYD,EAAgB,SAAW,YAC3D,IAAK,KACD,OAAO7pD,GAAO8pD,GAAYD,EAAgB,SAAW,YACzD,IAAK,IACD,MAAO,OAASC,GAAYD,EAAgB,MAAQ,QACxD,IAAK,KACD,OAAO7pD,GAAO8pD,GAAYD,EAAgB,MAAQ,QAE1D,MAAO,EACX,CACA,SAAS+B,EAAK9B,GACV,OACKA,EAAW,GAAK,WACjB,IACAiC,EAAY53M,KAAKk9H,OACjB,YAER,CAES+xE,EAAO4G,aAAa,KAAM,CAC/BhxE,OAAQ,oGAAoG52I,MACxG,KAEJk0I,YACI,iEAAiEl0I,MAC7D,KAER6nN,kBAAkB,EAClBC,SAAU,sDAAsD9nN,MAAM,KACtE+nN,cAAe,gCAAgC/nN,MAAM,KACrDgoN,YAAa,qBAAqBhoN,MAAM,KACxCkoN,eAAgB,CACZC,GAAI,OACJC,IAAK,UACLC,EAAG,cACHC,GAAI,gBACJC,IAAK,qBACLC,KAAM,4BAEVqB,cAAe,SACfC,KAAM,SAAUzgI,GACZ,MAAyC,MAAlCA,EAAM14E,OAAO,GAAGna,aAC3B,EACAuzN,SAAU,SAAUC,EAAOC,EAASC,GAChC,OAAIF,EAAQ,IACW,IAAZE,EAAmB,KAAO,MAEd,IAAZA,EAAmB,KAAO,IAEzC,EACAzB,SAAU,CACNC,QAAS,gBACTE,QAAS,oBACTC,SAAU,WACN,OAAOW,EAAKz5M,KAAKgC,MAAM,EAC3B,EACA+2M,QAAS,oBACTC,SAAU,WACN,OAAOS,EAAKz5M,KAAKgC,MAAM,EAC3B,EACA42M,SAAU,KAEdK,aAAc,CACVC,OAAQ,WACRC,KAAM,KACNzyM,EAAGmzM,EACHT,GAAIS,EACJnrN,EAAGmrN,EACHhuE,GAAIguE,EACJjC,EAAGiC,EACHR,GAAIQ,EACJnnL,EAAGmnL,EACHjuE,GAAIiuE,EACJpuE,EAAGouE,EACHnuE,GAAImuE,EACJj0N,EAAGi0N,EACHluE,GAAIkuE,GAERN,uBAAwB,YACxBC,QAAS,MACTC,KAAM,CACFC,IAAK,EACLC,IAAK,IAMhB,CAzHyCt9K,CAAQ,EAAQ,wCCAgBomB,QAGlE,WAAe,aAEnB,IAAI23J,EA6HA7tN,EA3HJ,SAAS2oG,IACL,OAAOklH,EAAarwM,MAAM,KAAM7d,UACpC,CAQA,SAASqkB,EAAQ+oE,GACb,OACIA,aAAiBjtF,OACyB,mBAA1Ce,OAAOoS,UAAUtc,SAAS8c,KAAKs5E,EAEvC,CAEA,SAAStyB,EAASsyB,GAGd,OACa,MAATA,GAC0C,oBAA1ClsF,OAAOoS,UAAUtc,SAAS8c,KAAKs5E,EAEvC,CAEA,SAAS+gI,EAAWthN,EAAGC,GACnB,OAAO5L,OAAOoS,UAAUjO,eAAeyO,KAAKjH,EAAGC,EACnD,CAEA,SAASshN,EAAc16M,GACnB,GAAIxS,OAAO6nC,oBACP,OAAkD,IAA3C7nC,OAAO6nC,oBAAoBr1B,GAAKzT,OAEvC,IAAIsmC,EACJ,IAAKA,KAAK7yB,EACN,GAAIy6M,EAAWz6M,EAAK6yB,GAChB,OAAO,EAGf,OAAO,CAEf,CAEA,SAASk6K,EAAYrzH,GACjB,YAAiB,IAAVA,CACX,CAEA,SAASorH,EAASprH,GACd,MACqB,iBAAVA,GACmC,oBAA1ClsF,OAAOoS,UAAUtc,SAAS8c,KAAKs5E,EAEvC,CAEA,SAASwpG,EAAOxpG,GACZ,OACIA,aAAiB7uB,MACyB,kBAA1Cr9D,OAAOoS,UAAUtc,SAAS8c,KAAKs5E,EAEvC,CAEA,SAASl1F,EAAIwyJ,EAAK5pJ,GACd,IACIsM,EADAihN,EAAM,GAENC,EAAS5jE,EAAIzqJ,OACjB,IAAKmN,EAAI,EAAGA,EAAIkhN,IAAUlhN,EACtBihN,EAAI3uN,KAAKoB,EAAG4pJ,EAAIt9I,GAAIA,IAExB,OAAOihN,CACX,CAEA,SAAS3hK,EAAO7/C,EAAGC,GACf,IAAK,IAAIM,KAAKN,EACNqhN,EAAWrhN,EAAGM,KACdP,EAAEO,GAAKN,EAAEM,IAYjB,OARI+gN,EAAWrhN,EAAG,cACdD,EAAE7V,SAAW8V,EAAE9V,UAGfm3N,EAAWrhN,EAAG,aACdD,EAAEgiI,QAAU/hI,EAAE+hI,SAGXhiI,CACX,CAEA,SAAS0hN,EAAUnhI,EAAO8kD,EAAQs8E,EAAQC,GACtC,OAAOC,GAAiBthI,EAAO8kD,EAAQs8E,EAAQC,GAAQ,GAAMn5E,KACjE,CAwBA,SAASq5E,EAAgBnsN,GAIrB,OAHa,MAATA,EAAEosN,MACFpsN,EAAEosN,IAtBC,CACH9kE,OAAO,EACP+kE,aAAc,GACdC,YAAa,GACb/zN,UAAW,EACXg0N,cAAe,EACfC,WAAW,EACXC,WAAY,KACZC,aAAc,KACdC,eAAe,EACfC,iBAAiB,EACjBC,KAAK,EACLC,gBAAiB,GACjBC,IAAK,KACLzB,SAAU,KACV0B,SAAS,EACTC,iBAAiB,IAQdjtN,EAAEosN,GACb,CAqBA,SAASc,EAAQltN,GACb,GAAkB,MAAdA,EAAEmtN,SAAkB,CACpB,IAAIn9F,EAAQm8F,EAAgBnsN,GACxBotN,EAAcvvN,EAAKyT,KAAK0+G,EAAM88F,iBAAiB,SAAUliN,GACrD,OAAY,MAALA,CACX,IACAyiN,GACK3lL,MAAM1nC,EAAEgxD,GAAG+hF,YACZ/iB,EAAMz3H,SAAW,IAChBy3H,EAAMs3B,QACNt3B,EAAMy8F,aACNz8F,EAAM08F,eACN18F,EAAMs9F,iBACNt9F,EAAMi9F,kBACNj9F,EAAMw8F,YACNx8F,EAAM28F,gBACN38F,EAAM48F,mBACL58F,EAAMs7F,UAAat7F,EAAMs7F,UAAY8B,GAU/C,GARIptN,EAAEutN,UACFF,EACIA,GACwB,IAAxBr9F,EAAMu8F,eACwB,IAA9Bv8F,EAAMq8F,aAAa5uN,aACDyD,IAAlB8uH,EAAMw9F,SAGS,MAAnB9uN,OAAOsqJ,UAAqBtqJ,OAAOsqJ,SAAShpJ,GAG5C,OAAOqtN,EAFPrtN,EAAEmtN,SAAWE,CAIrB,CACA,OAAOrtN,EAAEmtN,QACb,CAEA,SAASM,EAAcz9F,GACnB,IAAIhwH,EAAI+rN,EAAU2B,KAOlB,OANa,MAAT19F,EACA9lE,EAAOiiK,EAAgBnsN,GAAIgwH,GAE3Bm8F,EAAgBnsN,GAAG4sN,iBAAkB,EAGlC5sN,CACX,CA9DInC,EADAF,MAAMmT,UAAUjT,KACTF,MAAMmT,UAAUjT,KAEhB,SAAUqrJ,GACb,IAEIt+I,EAFAk5B,EAAIplC,OAAO4U,MACXrR,EAAM6hC,EAAErmC,SAAW,EAGvB,IAAKmN,EAAI,EAAGA,EAAI3I,EAAK2I,IACjB,GAAIA,KAAKk5B,GAAKolH,EAAI53I,KAAKgC,KAAMwwB,EAAEl5B,GAAIA,EAAGk5B,GAClC,OAAO,EAIf,OAAO,CACX,EAoDJ,IAAIglL,EAAoBtiH,EAAMsiH,iBAAmB,GAC7C6E,GAAmB,EAEvB,SAASC,EAAW5iF,EAAI5nG,GACpB,IAAIx4B,EACA81B,EACAlZ,EACAqmM,EAAsB/E,EAAiBrrN,OAiC3C,GA/BKwgN,EAAY76K,EAAK0qL,oBAClB9iF,EAAG8iF,iBAAmB1qL,EAAK0qL,kBAE1B7P,EAAY76K,EAAK93B,MAClB0/H,EAAG1/H,GAAK83B,EAAK93B,IAEZ2yM,EAAY76K,EAAK0iL,MAClB96E,EAAG86E,GAAK1iL,EAAK0iL,IAEZ7H,EAAY76K,EAAKqlC,MAClBuiE,EAAGviE,GAAKrlC,EAAKqlC,IAEZw1I,EAAY76K,EAAKmqL,WAClBviF,EAAGuiF,QAAUnqL,EAAKmqL,SAEjBtP,EAAY76K,EAAK2iL,QAClB/6E,EAAG+6E,KAAO3iL,EAAK2iL,MAEd9H,EAAY76K,EAAKqlL,UAClBz9E,EAAGy9E,OAASrlL,EAAKqlL,QAEhBxK,EAAY76K,EAAK51B,WAClBw9H,EAAGx9H,QAAU41B,EAAK51B,SAEjBywM,EAAY76K,EAAKgpL,OAClBphF,EAAGohF,IAAMD,EAAgB/oL,IAExB66K,EAAY76K,EAAK2qL,WAClB/iF,EAAG+iF,QAAU3qL,EAAK2qL,SAGlBF,EAAsB,EACtB,IAAKjjN,EAAI,EAAGA,EAAIijN,EAAqBjjN,IAG5BqzM,EADLz2L,EAAM4b,EADN1C,EAAOooL,EAAiBl+M,OAGpBogI,EAAGtqG,GAAQlZ,GAKvB,OAAOwjH,CACX,CAGA,SAASgjF,EAAOl7L,GACZ86L,EAAWt6M,KAAMwf,GACjBxf,KAAK09C,GAAK,IAAI+K,KAAkB,MAAbjpC,EAAOk+B,GAAal+B,EAAOk+B,GAAG+hF,UAAY26E,KACxDp6M,KAAK45M,YACN55M,KAAK09C,GAAK,IAAI+K,KAAK2xJ,OAIE,IAArBC,IACAA,GAAmB,EACnBnnH,EAAM+hH,aAAaj1M,MACnBq6M,GAAmB,EAE3B,CAEA,SAAS3H,EAAS90M,GACd,OACIA,aAAe88M,GAAkB,MAAP98M,GAAuC,MAAxBA,EAAI48M,gBAErD,CAEA,SAASnwM,EAAKm2G,IAEgC,IAAtCttB,EAAMynH,6BACa,oBAAZlxM,SACPA,QAAQY,MAERZ,QAAQY,KAAK,wBAA0Bm2G,EAE/C,CAEA,SAASo6F,EAAUp6F,EAAKx1H,GACpB,IAAI6vN,GAAY,EAEhB,OAAOjkK,GAAO,WAIV,GAHgC,MAA5Bs8C,EAAM4nH,oBACN5nH,EAAM4nH,mBAAmB,KAAMt6F,GAE/Bq6F,EAAW,CACX,IACIpkL,EACAn/B,EACA7K,EAHArC,EAAO,GAIP2wN,EAAS7wN,UAAUC,OACvB,IAAKmN,EAAI,EAAGA,EAAIyjN,EAAQzjN,IAAK,CAEzB,GADAm/B,EAAM,GACsB,iBAAjBvsC,UAAUoN,GAAiB,CAElC,IAAK7K,KADLgqC,GAAO,MAAQn/B,EAAI,KACPpN,UAAU,GACdmuN,EAAWnuN,UAAU,GAAIuC,KACzBgqC,GAAOhqC,EAAM,KAAOvC,UAAU,GAAGuC,GAAO,MAGhDgqC,EAAMA,EAAIt+B,MAAM,GAAI,EACxB,MACIs+B,EAAMvsC,UAAUoN,GAEpBlN,EAAKR,KAAK6sC,EACd,CACApsB,EACIm2G,EACI,gBACAn2H,MAAMmT,UAAUrF,MAAM6F,KAAK5T,GAAM5H,KAAK,IACtC,MACA,IAAIwoB,OAAQmjD,OAEpB0sJ,GAAY,CAChB,CACA,OAAO7vN,EAAG+c,MAAM/H,KAAM9V,UAC1B,GAAGc,EACP,CAEA,IAgFIwB,EAhFAwuN,EAAe,CAAC,EAEpB,SAASC,EAAgB7xN,EAAMo3H,GACK,MAA5BttB,EAAM4nH,oBACN5nH,EAAM4nH,mBAAmB1xN,EAAMo3H,GAE9Bw6F,EAAa5xN,KACdihB,EAAKm2G,GACLw6F,EAAa5xN,IAAQ,EAE7B,CAKA,SAASq7I,EAAWntD,GAChB,MACyB,oBAAb/yE,UAA4B+yE,aAAiB/yE,UACX,sBAA1CnZ,OAAOoS,UAAUtc,SAAS8c,KAAKs5E,EAEvC,CAyBA,SAAS4jI,EAAaC,EAAcC,GAChC,IACIhuL,EADAmrL,EAAM3hK,EAAO,CAAC,EAAGukK,GAErB,IAAK/tL,KAAQguL,EACL/C,EAAW+C,EAAahuL,KACpB43B,EAASm2J,EAAa/tL,KAAU43B,EAASo2J,EAAYhuL,KACrDmrL,EAAInrL,GAAQ,CAAC,EACbwpB,EAAO2hK,EAAInrL,GAAO+tL,EAAa/tL,IAC/BwpB,EAAO2hK,EAAInrL,GAAOguL,EAAYhuL,KACF,MAArBguL,EAAYhuL,GACnBmrL,EAAInrL,GAAQguL,EAAYhuL,UAEjBmrL,EAAInrL,IAIvB,IAAKA,KAAQ+tL,EAEL9C,EAAW8C,EAAc/tL,KACxBirL,EAAW+C,EAAahuL,IACzB43B,EAASm2J,EAAa/tL,MAGtBmrL,EAAInrL,GAAQwpB,EAAO,CAAC,EAAG2hK,EAAInrL,KAGnC,OAAOmrL,CACX,CAEA,SAAS8C,EAAO77L,GACE,MAAVA,GACAxf,KAAKnW,IAAI21B,EAEjB,CAlEA0zE,EAAMynH,6BAA8B,EACpCznH,EAAM4nH,mBAAqB,KAsEvBtuN,EADApB,OAAOoB,KACApB,OAAOoB,KAEP,SAAUoR,GACb,IAAItG,EACAihN,EAAM,GACV,IAAKjhN,KAAKsG,EACFy6M,EAAWz6M,EAAKtG,IAChBihN,EAAI3uN,KAAK0N,GAGjB,OAAOihN,CACX,EAiBJ,SAAS+C,EAASjpE,EAAQkpE,EAAcC,GACpC,IAAIC,EAAY,GAAK95N,KAAKsE,IAAIosJ,GAC1BqpE,EAAcH,EAAeE,EAAUtxN,OAE3C,OADWkoJ,GAAU,EAERmpE,EAAY,IAAM,GAAM,KACjC75N,KAAKi3B,IAAI,GAAIj3B,KAAKC,IAAI,EAAG85N,IAAcx6N,WAAWyzC,OAAO,GACzD8mL,CAER,CAEA,IAAIE,EACI,yMACJC,EAAwB,6CACxBC,EAAkB,CAAC,EACnBC,EAAuB,CAAC,EAM5B,SAASC,EAAepiM,EAAOqiM,EAAQxE,EAASl6L,GAC5C,IAAIvO,EAAOuO,EACa,iBAAbA,IACPvO,EAAO,WACH,OAAO/O,KAAKsd,IAChB,GAEA3D,IACAmiM,EAAqBniM,GAAS5K,GAE9BitM,IACAF,EAAqBE,EAAO,IAAM,WAC9B,OAAOV,EAASvsM,EAAKhH,MAAM/H,KAAM9V,WAAY8xN,EAAO,GAAIA,EAAO,GACnE,GAEAxE,IACAsE,EAAqBtE,GAAW,WAC5B,OAAOx3M,KAAKi8M,aAAazE,QACrBzoM,EAAKhH,MAAM/H,KAAM9V,WACjByvB,EAER,EAER,CAmCA,SAASuiM,EAAaxvN,EAAG0vI,GACrB,OAAK1vI,EAAEktN,WAIPx9E,EAAS+/E,EAAa//E,EAAQ1vI,EAAEuvN,cAChCJ,EAAgBz/E,GACZy/E,EAAgBz/E,IAjCxB,SAA4BA,GACxB,IACI9kI,EACAnN,EAVwBmtF,EAQxB72E,EAAQ27H,EAAOxzF,MAAM+yK,GAIzB,IAAKrkN,EAAI,EAAGnN,EAASsW,EAAMtW,OAAQmN,EAAInN,EAAQmN,IACvCwkN,EAAqBr7M,EAAMnJ,IAC3BmJ,EAAMnJ,GAAKwkN,EAAqBr7M,EAAMnJ,IAEtCmJ,EAAMnJ,IAhBcggF,EAgBc72E,EAAMnJ,IAftCsxC,MAAM,YACL0uC,EAAMjnF,QAAQ,WAAY,IAE9BinF,EAAMjnF,QAAQ,MAAO,IAgB5B,OAAO,SAAU8iN,GACb,IACI77M,EADAyvC,EAAS,GAEb,IAAKzvC,EAAI,EAAGA,EAAInN,EAAQmN,IACpByvC,GAAU09F,EAAWhkI,EAAMnJ,IACrBmJ,EAAMnJ,GAAG0G,KAAKm1M,EAAK/2E,GACnB37H,EAAMnJ,GAEhB,OAAOyvC,CACX,CACJ,CAUmCq1K,CAAmBhgF,GAE3Cy/E,EAAgBz/E,GAAQ1vI,IAPpBA,EAAEuvN,aAAaI,aAQ9B,CAEA,SAASF,EAAa//E,EAAQs8E,GAC1B,IAAIphN,EAAI,EAER,SAASglN,EAA4BhlI,GACjC,OAAOohI,EAAOvC,eAAe7+H,IAAUA,CAC3C,CAGA,IADAskI,EAAsBnnL,UAAY,EAC3Bn9B,GAAK,GAAKskN,EAAsBj5N,KAAKy5I,IACxCA,EAASA,EAAO/rI,QACZurN,EACAU,GAEJV,EAAsBnnL,UAAY,EAClCn9B,GAAK,EAGT,OAAO8kI,CACX,CAiFA,IAAIhrC,EAAU,CAAC,EAEf,SAASmrH,EAAat+C,EAAMu+C,GACxB,IAAInY,EAAYpmC,EAAKx5K,cACrB2sG,EAAQizG,GAAajzG,EAAQizG,EAAY,KAAOjzG,EAAQorH,GAAav+C,CACzE,CAEA,SAASw+C,EAAeC,GACpB,MAAwB,iBAAVA,EACRtrH,EAAQsrH,IAAUtrH,EAAQsrH,EAAMj4N,oBAChCmJ,CACV,CAEA,SAAS+uN,EAAqBC,GAC1B,IACIC,EACAzvL,EAFA0vL,EAAkB,CAAC,EAIvB,IAAK1vL,KAAQwvL,EACLvE,EAAWuE,EAAaxvL,KACxByvL,EAAiBJ,EAAervL,MAE5B0vL,EAAgBD,GAAkBD,EAAYxvL,IAK1D,OAAO0vL,CACX,CAEA,IAAIC,EAAa,CAAC,EAElB,SAASC,EAAgB/+C,EAAM/7I,GAC3B66L,EAAW9+C,GAAQ/7I,CACvB,CAgBA,SAAS+6L,EAAWjgF,GAChB,OAAQA,EAAO,GAAM,GAAKA,EAAO,KAAQ,GAAMA,EAAO,KAAQ,CAClE,CAEA,SAASkgF,EAAS7qE,GACd,OAAIA,EAAS,EAEF1wJ,KAAKkzC,KAAKw9G,IAAW,EAErB1wJ,KAAK6yC,MAAM69G,EAE1B,CAEA,SAAS8qE,EAAMC,GACX,IAAIC,GAAiBD,EACjBprN,EAAQ,EAMZ,OAJsB,IAAlBqrN,GAAuBhpL,SAASgpL,KAChCrrN,EAAQkrN,EAASG,IAGdrrN,CACX,CAEA,SAASsrN,EAAWr/C,EAAMi3C,GACtB,OAAO,SAAUljN,GACb,OAAa,MAATA,GACAurN,EAAMv9M,KAAMi+J,EAAMjsK,GAClBkhG,EAAM+hH,aAAaj1M,KAAMk1M,GAClBl1M,MAEArW,EAAIqW,KAAMi+J,EAEzB,CACJ,CAEA,SAASt0K,EAAIwpN,EAAKl1C,GACd,OAAOk1C,EAAIyG,UACLzG,EAAIz1J,GAAG,OAASy1J,EAAIgC,OAAS,MAAQ,IAAMl3C,KAC3Cm8C,GACV,CAEA,SAASmD,EAAMpK,EAAKl1C,EAAMjsK,GAClBmhN,EAAIyG,YAAcxlL,MAAMpiC,KAEX,aAATisK,GACAg/C,EAAW9J,EAAIn2E,SACC,IAAhBm2E,EAAIl2E,SACW,KAAfk2E,EAAIn1E,QAEJhsI,EAAQmrN,EAAMnrN,GACdmhN,EAAIz1J,GAAG,OAASy1J,EAAIgC,OAAS,MAAQ,IAAMl3C,GACvCjsK,EACAmhN,EAAIl2E,QACJugF,GAAYxrN,EAAOmhN,EAAIl2E,WAG3Bk2E,EAAIz1J,GAAG,OAASy1J,EAAIgC,OAAS,MAAQ,IAAMl3C,GAAMjsK,GAG7D,CA8BA,IAoBIyrN,EApBAC,EAAS,KACTC,EAAS,OACTC,EAAS,QACTC,GAAS,QACTC,GAAS,aACTC,GAAY,QACZC,GAAY,YACZC,GAAY,gBACZC,GAAY,UACZC,GAAY,UACZC,GAAY,eACZC,GAAgB,MAChBC,GAAc,WACdC,GAAc,qBACdC,GAAmB,0BAInBC,GACI,wJAKR,SAASC,GAAc/kM,EAAOs4C,EAAO0sJ,GACjClB,EAAQ9jM,GAAS8qH,EAAWxyE,GACtBA,EACA,SAAUo8H,EAAU4tB,GAChB,OAAO5tB,GAAYswB,EAAcA,EAAc1sJ,CACnD,CACV,CAEA,SAAS2sJ,GAAsBjlM,EAAO6F,GAClC,OAAK64L,EAAWoF,EAAS9jM,GAIlB8jM,EAAQ9jM,GAAO6F,EAAOy6L,QAASz6L,EAAOi7L,SAHlC,IAAI7oJ,OAQRitJ,GAR8BllM,EAU5BtpB,QAAQ,KAAM,IACdA,QACG,uCACA,SAAUC,EAASgoF,EAAIwmI,EAAIC,EAAIC,GAC3B,OAAO1mI,GAAMwmI,GAAMC,GAAMC,CAC7B,KAXhB,CAgBA,SAASH,GAAYn6M,GACjB,OAAOA,EAAErU,QAAQ,yBAA0B,OAC/C,CAlCAotN,EAAU,CAAC,EAoCX,IAAI71J,GAAS,CAAC,EAEd,SAASq3J,GAActlM,EAAO2D,GAC1B,IAAIhmB,EAEA4nN,EADAnwM,EAAOuO,EAWX,IATqB,iBAAV3D,IACPA,EAAQ,CAACA,IAET+oL,EAASplL,KACTvO,EAAO,SAAUuoE,EAAO72E,GACpBA,EAAM6c,GAAY6/L,EAAM7lI,EAC5B,GAEJ4nI,EAAWvlM,EAAMxvB,OACZmN,EAAI,EAAGA,EAAI4nN,EAAU5nN,IACtBswD,GAAOjuC,EAAMriB,IAAMyX,CAE3B,CAEA,SAASowM,GAAkBxlM,EAAO2D,GAC9B2hM,GAActlM,GAAO,SAAU29D,EAAO72E,EAAO+e,EAAQ7F,GACjD6F,EAAO4/L,GAAK5/L,EAAO4/L,IAAM,CAAC,EAC1B9hM,EAASg6D,EAAO93D,EAAO4/L,GAAI5/L,EAAQ7F,EACvC,GACJ,CAEA,SAAS0lM,GAAwB1lM,EAAO29D,EAAO93D,GAC9B,MAAT83D,GAAiB+gI,EAAWzwJ,GAAQjuC,IACpCiuC,GAAOjuC,GAAO29D,EAAO93D,EAAO6b,GAAI7b,EAAQ7F,EAEhD,CAEA,IAcIpzB,GAdA+4N,GAAO,EACPC,GAAQ,EACRC,GAAO,EACPC,GAAO,EACPC,GAAS,EACTC,GAAS,EACTC,GAAc,EACdC,GAAO,EACPC,GAAU,EAuBd,SAAStC,GAAYxgF,EAAMC,GACvB,GAAI7oG,MAAM4oG,IAAS5oG,MAAM6oG,GACrB,OAAOm9E,IAEX,IAzBY32N,EAyBRs8N,GAAe9iF,GAzBPx5I,EAyBc,IAxBRA,GAAKA,EA0BvB,OADAu5I,IAASC,EAAQ8iF,GAAY,GACT,IAAbA,EACD9C,EAAWjgF,GACP,GACA,GACJ,GAAO+iF,EAAW,EAAK,CACjC,CAzBIx5N,GADA8D,MAAMmT,UAAUjX,QACN8D,MAAMmT,UAAUjX,QAEhB,SAAU4rC,GAEhB,IAAI76B,EACJ,IAAKA,EAAI,EAAGA,EAAI0I,KAAK7V,SAAUmN,EAC3B,GAAI0I,KAAK1I,KAAO66B,EACZ,OAAO76B,EAGf,OAAQ,CACZ,EAkBJykN,EAAe,IAAK,CAAC,KAAM,GAAI,MAAM,WACjC,OAAO/7M,KAAKi9H,QAAU,CAC1B,IAEA8+E,EAAe,MAAO,EAAG,GAAG,SAAU3/E,GAClC,OAAOp8H,KAAKi8M,aAAa95E,YAAYniI,KAAMo8H,EAC/C,IAEA2/E,EAAe,OAAQ,EAAG,GAAG,SAAU3/E,GACnC,OAAOp8H,KAAKi8M,aAAap3E,OAAO7kI,KAAMo8H,EAC1C,IAIAmgF,EAAa,QAAS,KAItBS,EAAgB,QAAS,GAIzB0B,GAAc,IAAKX,IACnBW,GAAc,KAAMX,GAAWJ,GAC/Be,GAAc,OAAO,SAAUrwB,EAAUqqB,GACrC,OAAOA,EAAOsH,iBAAiB3xB,EACnC,IACAqwB,GAAc,QAAQ,SAAUrwB,EAAUqqB,GACtC,OAAOA,EAAOuH,YAAY5xB,EAC9B,IAEA4wB,GAAc,CAAC,IAAK,OAAO,SAAU3nI,EAAO72E,GACxCA,EAAM8+M,IAASpC,EAAM7lI,GAAS,CAClC,IAEA2nI,GAAc,CAAC,MAAO,SAAS,SAAU3nI,EAAO72E,EAAO+e,EAAQ7F,GAC3D,IAAIsjH,EAAQz9G,EAAOi7L,QAAQyF,YAAY5oI,EAAO39D,EAAO6F,EAAOy6L,SAE/C,MAATh9E,EACAx8H,EAAM8+M,IAAStiF,EAEf47E,EAAgBr5L,GAAQ45L,aAAe9hI,CAE/C,IAIA,IAAI6oI,GACI,wFAAwFlyN,MACpF,KAERmyN,GACI,kDAAkDnyN,MAAM,KAC5DoyN,GAAmB,gCACnBC,GAA0B7B,GAC1B8B,GAAqB9B,GA8BzB,SAAS+B,GAAkBC,EAAWrkF,EAAQu8E,GAC1C,IAAIrhN,EACAsI,EACAuzM,EACAuN,EAAMD,EAAUE,oBACpB,IAAK3gN,KAAK4gN,aAKN,IAHA5gN,KAAK4gN,aAAe,GACpB5gN,KAAK6gN,iBAAmB,GACxB7gN,KAAK8gN,kBAAoB,GACpBxpN,EAAI,EAAGA,EAAI,KAAMA,EAClB67M,EAAMsF,EAAU,CAAC,IAAMnhN,IACvB0I,KAAK8gN,kBAAkBxpN,GAAK0I,KAAKmiI,YAC7BgxE,EACA,IACFwN,oBACF3gN,KAAK6gN,iBAAiBvpN,GAAK0I,KAAK6kI,OAAOsuE,EAAK,IAAIwN,oBAIxD,OAAIhI,EACe,QAAXv8E,GAEe,KADfx8H,EAAKrZ,GAAQyX,KAAKgC,KAAK8gN,kBAAmBJ,IACvB9gN,EAAK,MAGT,KADfA,EAAKrZ,GAAQyX,KAAKgC,KAAK6gN,iBAAkBH,IACtB9gN,EAAK,KAGb,QAAXw8H,GAEY,KADZx8H,EAAKrZ,GAAQyX,KAAKgC,KAAK8gN,kBAAmBJ,MAK3B,KADf9gN,EAAKrZ,GAAQyX,KAAKgC,KAAK6gN,iBAAkBH,IAF9B9gN,EAGa,MAGZ,KADZA,EAAKrZ,GAAQyX,KAAKgC,KAAK6gN,iBAAkBH,MAK1B,KADf9gN,EAAKrZ,GAAQyX,KAAKgC,KAAK8gN,kBAAmBJ,IAF/B9gN,EAGa,IAGpC,CAyDA,SAASmhN,GAAS5N,EAAKnhN,GACnB,IAAIgvN,EAEJ,IAAK7N,EAAIyG,UAEL,OAAOzG,EAGX,GAAqB,iBAAVnhN,EACP,GAAI,QAAQrP,KAAKqP,GACbA,EAAQmrN,EAAMnrN,QAId,IAAK0wM,EAFL1wM,EAAQmhN,EAAI8I,aAAaiE,YAAYluN,IAGjC,OAAOmhN,EAOnB,OAFA6N,EAAar/N,KAAKE,IAAIsxN,EAAIn1E,OAAQw/E,GAAYrK,EAAIn2E,OAAQhrI,IAC1DmhN,EAAIz1J,GAAG,OAASy1J,EAAIgC,OAAS,MAAQ,IAAM,SAASnjN,EAAOgvN,GACpD7N,CACX,CAEA,SAAS8N,GAAYjvN,GACjB,OAAa,MAATA,GACA+uN,GAAS/gN,KAAMhO,GACfkhG,EAAM+hH,aAAaj1M,MAAM,GAClBA,MAEArW,EAAIqW,KAAM,QAEzB,CA8CA,SAASkhN,KACL,SAASC,EAAUpqN,EAAGC,GAClB,OAAOA,EAAE7M,OAAS4M,EAAE5M,MACxB,CAEA,IAGImN,EACA67M,EAJAiO,EAAc,GACdC,EAAa,GACbC,EAAc,GAGlB,IAAKhqN,EAAI,EAAGA,EAAI,GAAIA,IAEhB67M,EAAMsF,EAAU,CAAC,IAAMnhN,IACvB8pN,EAAYx3N,KAAKoW,KAAKmiI,YAAYgxE,EAAK,KACvCkO,EAAWz3N,KAAKoW,KAAK6kI,OAAOsuE,EAAK,KACjCmO,EAAY13N,KAAKoW,KAAK6kI,OAAOsuE,EAAK,KAClCmO,EAAY13N,KAAKoW,KAAKmiI,YAAYgxE,EAAK,KAO3C,IAHAiO,EAAYn4N,KAAKk4N,GACjBE,EAAWp4N,KAAKk4N,GAChBG,EAAYr4N,KAAKk4N,GACZ7pN,EAAI,EAAGA,EAAI,GAAIA,IAChB8pN,EAAY9pN,GAAKunN,GAAYuC,EAAY9pN,IACzC+pN,EAAW/pN,GAAKunN,GAAYwC,EAAW/pN,IAE3C,IAAKA,EAAI,EAAGA,EAAI,GAAIA,IAChBgqN,EAAYhqN,GAAKunN,GAAYyC,EAAYhqN,IAG7C0I,KAAKuhN,aAAe,IAAI3vJ,OAAO,KAAO0vJ,EAAY9+N,KAAK,KAAO,IAAK,KACnEwd,KAAKwhN,kBAAoBxhN,KAAKuhN,aAC9BvhN,KAAKyhN,mBAAqB,IAAI7vJ,OAC1B,KAAOyvJ,EAAW7+N,KAAK,KAAO,IAC9B,KAEJwd,KAAK0hN,wBAA0B,IAAI9vJ,OAC/B,KAAOwvJ,EAAY5+N,KAAK,KAAO,IAC/B,IAER,CA+CA,SAASm/N,GAAW3kF,GAChB,OAAOigF,EAAWjgF,GAAQ,IAAM,GACpC,CA7CA++E,EAAe,IAAK,EAAG,GAAG,WACtB,IAAIn4N,EAAIoc,KAAKg9H,OACb,OAAOp5I,GAAK,KAAO03N,EAAS13N,EAAG,GAAK,IAAMA,CAC9C,IAEAm4N,EAAe,EAAG,CAAC,KAAM,GAAI,GAAG,WAC5B,OAAO/7M,KAAKg9H,OAAS,GACzB,IAEA++E,EAAe,EAAG,CAAC,OAAQ,GAAI,EAAG,QAClCA,EAAe,EAAG,CAAC,QAAS,GAAI,EAAG,QACnCA,EAAe,EAAG,CAAC,SAAU,GAAG,GAAO,EAAG,QAI1CQ,EAAa,OAAQ,KAIrBS,EAAgB,OAAQ,GAIxB0B,GAAc,IAAKJ,IACnBI,GAAc,KAAMX,GAAWJ,GAC/Be,GAAc,OAAQP,GAAWN,IACjCa,GAAc,QAASN,GAAWN,IAClCY,GAAc,SAAUN,GAAWN,IAEnCmB,GAAc,CAAC,QAAS,UAAWK,IACnCL,GAAc,QAAQ,SAAU3nI,EAAO72E,GACnCA,EAAM6+M,IACe,IAAjBhoI,EAAMntF,OAAe+oG,EAAM0uH,kBAAkBtqI,GAAS6lI,EAAM7lI,EACpE,IACA2nI,GAAc,MAAM,SAAU3nI,EAAO72E,GACjCA,EAAM6+M,IAAQpsH,EAAM0uH,kBAAkBtqI,EAC1C,IACA2nI,GAAc,KAAK,SAAU3nI,EAAO72E,GAChCA,EAAM6+M,IAAQ9wM,SAAS8oE,EAAO,GAClC,IAUA4b,EAAM0uH,kBAAoB,SAAUtqI,GAChC,OAAO6lI,EAAM7lI,IAAU6lI,EAAM7lI,GAAS,GAAK,KAAO,IACtD,EAIA,IAAIuqI,GAAavE,EAAW,YAAY,GAMxC,SAASwE,GAAWl+N,EAAG8I,EAAGgkC,EAAGklL,EAAGnsE,EAAG/kI,EAAGyvH,GAGlC,IAAI6J,EAYJ,OAVIp6I,EAAI,KAAOA,GAAK,GAEhBo6I,EAAO,IAAIv1E,KAAK7kE,EAAI,IAAK8I,EAAGgkC,EAAGklL,EAAGnsE,EAAG/kI,EAAGyvH,GACpC9/F,SAAS2pG,EAAK9F,gBACd8F,EAAK+jF,YAAYn+N,IAGrBo6I,EAAO,IAAIv1E,KAAK7kE,EAAG8I,EAAGgkC,EAAGklL,EAAGnsE,EAAG/kI,EAAGyvH,GAG/B6J,CACX,CAEA,SAASgkF,GAAcp+N,GACnB,IAAIo6I,EAAM5zI,EAcV,OAZIxG,EAAI,KAAOA,GAAK,IAChBwG,EAAOC,MAAMmT,UAAUrF,MAAM6F,KAAK9T,YAE7B,GAAKtG,EAAI,IACdo6I,EAAO,IAAIv1E,KAAKA,KAAKsvE,IAAIhwH,MAAM,KAAM3d,IACjCiqC,SAAS2pG,EAAKxF,mBACdwF,EAAKiG,eAAergJ,IAGxBo6I,EAAO,IAAIv1E,KAAKA,KAAKsvE,IAAIhwH,MAAM,KAAM7d,YAGlC8zI,CACX,CAGA,SAASikF,GAAgBjlF,EAAM06E,EAAKC,GAChC,IACIuK,EAAM,EAAIxK,EAAMC,EAIpB,QAFa,EAAIqK,GAAchlF,EAAM,EAAGklF,GAAKz/E,YAAci1E,GAAO,EAElDwK,EAAM,CAC1B,CAGA,SAASC,GAAmBnlF,EAAMy6E,EAAM2K,EAAS1K,EAAKC,GAClD,IAGI0K,EACAC,EAFAC,EAAY,EAAI,GAAK9K,EAAO,IAFZ,EAAI2K,EAAU1K,GAAO,EACxBuK,GAAgBjlF,EAAM06E,EAAKC,GAgB5C,OAXI4K,GAAa,EAEbD,EAAeX,GADfU,EAAUrlF,EAAO,GACoBulF,EAC9BA,EAAYZ,GAAW3kF,IAC9BqlF,EAAUrlF,EAAO,EACjBslF,EAAeC,EAAYZ,GAAW3kF,KAEtCqlF,EAAUrlF,EACVslF,EAAeC,GAGZ,CACHvlF,KAAMqlF,EACNE,UAAWD,EAEnB,CAEA,SAASE,GAAWrP,EAAKuE,EAAKC,GAC1B,IAEI8K,EACAJ,EAHAK,EAAaT,GAAgB9O,EAAIn2E,OAAQ06E,EAAKC,GAC9CF,EAAO91N,KAAK6yC,OAAO2+K,EAAIoP,YAAcG,EAAa,GAAK,GAAK,EAehE,OAXIjL,EAAO,EAEPgL,EAAUhL,EAAOkL,GADjBN,EAAUlP,EAAIn2E,OAAS,EACe06E,EAAKC,GACpCF,EAAOkL,GAAYxP,EAAIn2E,OAAQ06E,EAAKC,IAC3C8K,EAAUhL,EAAOkL,GAAYxP,EAAIn2E,OAAQ06E,EAAKC,GAC9C0K,EAAUlP,EAAIn2E,OAAS,IAEvBqlF,EAAUlP,EAAIn2E,OACdylF,EAAUhL,GAGP,CACHA,KAAMgL,EACNzlF,KAAMqlF,EAEd,CAEA,SAASM,GAAY3lF,EAAM06E,EAAKC,GAC5B,IAAI+K,EAAaT,GAAgBjlF,EAAM06E,EAAKC,GACxCiL,EAAiBX,GAAgBjlF,EAAO,EAAG06E,EAAKC,GACpD,OAAQgK,GAAW3kF,GAAQ0lF,EAAaE,GAAkB,CAC9D,CAIA7G,EAAe,IAAK,CAAC,KAAM,GAAI,KAAM,QACrCA,EAAe,IAAK,CAAC,KAAM,GAAI,KAAM,WAIrCQ,EAAa,OAAQ,KACrBA,EAAa,UAAW,KAIxBS,EAAgB,OAAQ,GACxBA,EAAgB,UAAW,GAI3B0B,GAAc,IAAKX,IACnBW,GAAc,KAAMX,GAAWJ,GAC/Be,GAAc,IAAKX,IACnBW,GAAc,KAAMX,GAAWJ,GAE/BwB,GACI,CAAC,IAAK,KAAM,IAAK,OACjB,SAAU7nI,EAAOmgI,EAAMj4L,EAAQ7F,GAC3B89L,EAAK99L,EAAMgb,OAAO,EAAG,IAAMwoL,EAAM7lI,EACrC,IA0HJ,SAASurI,GAAcz+E,EAAIruG,GACvB,OAAOquG,EAAGjsI,MAAM49B,EAAG,GAAGhvC,OAAOq9I,EAAGjsI,MAAM,EAAG49B,GAC7C,CAtFAgmL,EAAe,IAAK,EAAG,KAAM,OAE7BA,EAAe,KAAM,EAAG,GAAG,SAAU3/E,GACjC,OAAOp8H,KAAKi8M,aAAahG,YAAYj2M,KAAMo8H,EAC/C,IAEA2/E,EAAe,MAAO,EAAG,GAAG,SAAU3/E,GAClC,OAAOp8H,KAAKi8M,aAAajG,cAAch2M,KAAMo8H,EACjD,IAEA2/E,EAAe,OAAQ,EAAG,GAAG,SAAU3/E,GACnC,OAAOp8H,KAAKi8M,aAAalG,SAAS/1M,KAAMo8H,EAC5C,IAEA2/E,EAAe,IAAK,EAAG,EAAG,WAC1BA,EAAe,IAAK,EAAG,EAAG,cAI1BQ,EAAa,MAAO,KACpBA,EAAa,UAAW,KACxBA,EAAa,aAAc,KAG3BS,EAAgB,MAAO,IACvBA,EAAgB,UAAW,IAC3BA,EAAgB,aAAc,IAI9B0B,GAAc,IAAKX,IACnBW,GAAc,IAAKX,IACnBW,GAAc,IAAKX,IACnBW,GAAc,MAAM,SAAUrwB,EAAUqqB,GACpC,OAAOA,EAAOoK,iBAAiBz0B,EACnC,IACAqwB,GAAc,OAAO,SAAUrwB,EAAUqqB,GACrC,OAAOA,EAAOqK,mBAAmB10B,EACrC,IACAqwB,GAAc,QAAQ,SAAUrwB,EAAUqqB,GACtC,OAAOA,EAAOsK,cAAc30B,EAChC,IAEA8wB,GAAkB,CAAC,KAAM,MAAO,SAAS,SAAU7nI,EAAOmgI,EAAMj4L,EAAQ7F,GACpE,IAAIyoM,EAAU5iM,EAAOi7L,QAAQwI,cAAc3rI,EAAO39D,EAAO6F,EAAOy6L,SAEjD,MAAXmI,EACA3K,EAAK/mL,EAAI0xL,EAETvJ,EAAgBr5L,GAAQw6L,eAAiB1iI,CAEjD,IAEA6nI,GAAkB,CAAC,IAAK,IAAK,MAAM,SAAU7nI,EAAOmgI,EAAMj4L,EAAQ7F,GAC9D89L,EAAK99L,GAASwjM,EAAM7lI,EACxB,IAiCA,IAAI4rI,GACI,2DAA2Dj1N,MAAM,KACrEk1N,GAA6B,8BAA8Bl1N,MAAM,KACjEm1N,GAA2B,uBAAuBn1N,MAAM,KACxDo1N,GAAuB5E,GACvB6E,GAA4B7E,GAC5B8E,GAA0B9E,GAiC9B,SAAS+E,GAAoBC,EAAarnF,EAAQu8E,GAC9C,IAAIrhN,EACAsI,EACAuzM,EACAuN,EAAM+C,EAAY9C,oBACtB,IAAK3gN,KAAK0jN,eAKN,IAJA1jN,KAAK0jN,eAAiB,GACtB1jN,KAAK2jN,oBAAsB,GAC3B3jN,KAAK4jN,kBAAoB,GAEpBtsN,EAAI,EAAGA,EAAI,IAAKA,EACjB67M,EAAMsF,EAAU,CAAC,IAAM,IAAIv7E,IAAI5lI,GAC/B0I,KAAK4jN,kBAAkBtsN,GAAK0I,KAAKi2M,YAC7B9C,EACA,IACFwN,oBACF3gN,KAAK2jN,oBAAoBrsN,GAAK0I,KAAKg2M,cAC/B7C,EACA,IACFwN,oBACF3gN,KAAK0jN,eAAepsN,GAAK0I,KAAK+1M,SAAS5C,EAAK,IAAIwN,oBAIxD,OAAIhI,EACe,SAAXv8E,GAEe,KADfx8H,EAAKrZ,GAAQyX,KAAKgC,KAAK0jN,eAAgBhD,IACpB9gN,EAAK,KACN,QAAXw8H,GAEQ,KADfx8H,EAAKrZ,GAAQyX,KAAKgC,KAAK2jN,oBAAqBjD,IACzB9gN,EAAK,MAGT,KADfA,EAAKrZ,GAAQyX,KAAKgC,KAAK4jN,kBAAmBlD,IACvB9gN,EAAK,KAGb,SAAXw8H,GAEY,KADZx8H,EAAKrZ,GAAQyX,KAAKgC,KAAK0jN,eAAgBhD,MAK3B,KADZ9gN,EAAKrZ,GAAQyX,KAAKgC,KAAK2jN,oBAAqBjD,MAK7B,KADf9gN,EAAKrZ,GAAQyX,KAAKgC,KAAK4jN,kBAAmBlD,IAN/B9gN,EAOa,KACN,QAAXw8H,GAEK,KADZx8H,EAAKrZ,GAAQyX,KAAKgC,KAAK2jN,oBAAqBjD,MAKhC,KADZ9gN,EAAKrZ,GAAQyX,KAAKgC,KAAK0jN,eAAgBhD,MAKxB,KADf9gN,EAAKrZ,GAAQyX,KAAKgC,KAAK4jN,kBAAmBlD,IAN/B9gN,EAOa,MAGZ,KADZA,EAAKrZ,GAAQyX,KAAKgC,KAAK4jN,kBAAmBlD,MAK9B,KADZ9gN,EAAKrZ,GAAQyX,KAAKgC,KAAK0jN,eAAgBhD,MAKxB,KADf9gN,EAAKrZ,GAAQyX,KAAKgC,KAAK2jN,oBAAqBjD,IANjC9gN,EAOa,IAGpC,CAyKA,SAASikN,KACL,SAAS1C,EAAUpqN,EAAGC,GAClB,OAAOA,EAAE7M,OAAS4M,EAAE5M,MACxB,CAEA,IAIImN,EACA67M,EACA2Q,EACAC,EACAC,EARAC,EAAY,GACZ7C,EAAc,GACdC,EAAa,GACbC,EAAc,GAMlB,IAAKhqN,EAAI,EAAGA,EAAI,EAAGA,IAEf67M,EAAMsF,EAAU,CAAC,IAAM,IAAIv7E,IAAI5lI,GAC/BwsN,EAAOjF,GAAY7+M,KAAKi2M,YAAY9C,EAAK,KACzC4Q,EAASlF,GAAY7+M,KAAKg2M,cAAc7C,EAAK,KAC7C6Q,EAAQnF,GAAY7+M,KAAK+1M,SAAS5C,EAAK,KACvC8Q,EAAUr6N,KAAKk6N,GACf1C,EAAYx3N,KAAKm6N,GACjB1C,EAAWz3N,KAAKo6N,GAChB1C,EAAY13N,KAAKk6N,GACjBxC,EAAY13N,KAAKm6N,GACjBzC,EAAY13N,KAAKo6N,GAIrBC,EAAUh7N,KAAKk4N,GACfC,EAAYn4N,KAAKk4N,GACjBE,EAAWp4N,KAAKk4N,GAChBG,EAAYr4N,KAAKk4N,GAEjBnhN,KAAKkkN,eAAiB,IAAItyJ,OAAO,KAAO0vJ,EAAY9+N,KAAK,KAAO,IAAK,KACrEwd,KAAKmkN,oBAAsBnkN,KAAKkkN,eAChClkN,KAAKokN,kBAAoBpkN,KAAKkkN,eAE9BlkN,KAAKqkN,qBAAuB,IAAIzyJ,OAC5B,KAAOyvJ,EAAW7+N,KAAK,KAAO,IAC9B,KAEJwd,KAAKskN,0BAA4B,IAAI1yJ,OACjC,KAAOwvJ,EAAY5+N,KAAK,KAAO,IAC/B,KAEJwd,KAAKukN,wBAA0B,IAAI3yJ,OAC/B,KAAOqyJ,EAAUzhO,KAAK,KAAO,IAC7B,IAER,CAIA,SAASgiO,KACL,OAAOxkN,KAAKi4M,QAAU,IAAM,EAChC,CAoCA,SAASD,GAASr+L,EAAO8qM,GACrB1I,EAAepiM,EAAO,EAAG,GAAG,WACxB,OAAO3Z,KAAKi8M,aAAajE,SACrBh4M,KAAKi4M,QACLj4M,KAAKk4M,UACLuM,EAER,GACJ,CAcA,SAASC,GAAcr2B,EAAUqqB,GAC7B,OAAOA,EAAOiM,cAClB,CAtDA5I,EAAe,IAAK,CAAC,KAAM,GAAI,EAAG,QAClCA,EAAe,IAAK,CAAC,KAAM,GAAI,EAAGyI,IAClCzI,EAAe,IAAK,CAAC,KAAM,GAAI,GAN/B,WACI,OAAO/7M,KAAKi4M,SAAW,EAC3B,IAMA8D,EAAe,MAAO,EAAG,GAAG,WACxB,MAAO,GAAKyI,GAAQz8M,MAAM/H,MAAQs7M,EAASt7M,KAAKk4M,UAAW,EAC/D,IAEA6D,EAAe,QAAS,EAAG,GAAG,WAC1B,MACI,GACAyI,GAAQz8M,MAAM/H,MACds7M,EAASt7M,KAAKk4M,UAAW,GACzBoD,EAASt7M,KAAK4kN,UAAW,EAEjC,IAEA7I,EAAe,MAAO,EAAG,GAAG,WACxB,MAAO,GAAK/7M,KAAKi4M,QAAUqD,EAASt7M,KAAKk4M,UAAW,EACxD,IAEA6D,EAAe,QAAS,EAAG,GAAG,WAC1B,MACI,GACA/7M,KAAKi4M,QACLqD,EAASt7M,KAAKk4M,UAAW,GACzBoD,EAASt7M,KAAK4kN,UAAW,EAEjC,IAYA5M,GAAS,KAAK,GACdA,GAAS,KAAK,GAIduE,EAAa,OAAQ,KAGrBS,EAAgB,OAAQ,IAQxB0B,GAAc,IAAKgG,IACnBhG,GAAc,IAAKgG,IACnBhG,GAAc,IAAKX,IACnBW,GAAc,IAAKX,IACnBW,GAAc,IAAKX,IACnBW,GAAc,KAAMX,GAAWJ,GAC/Be,GAAc,KAAMX,GAAWJ,GAC/Be,GAAc,KAAMX,GAAWJ,GAE/Be,GAAc,MAAOV,IACrBU,GAAc,QAAST,IACvBS,GAAc,MAAOV,IACrBU,GAAc,QAAST,IAEvBgB,GAAc,CAAC,IAAK,MAAOQ,IAC3BR,GAAc,CAAC,IAAK,OAAO,SAAU3nI,EAAO72E,EAAO+e,GAC/C,IAAIqlM,EAAS1H,EAAM7lI,GACnB72E,EAAMg/M,IAAmB,KAAXoF,EAAgB,EAAIA,CACtC,IACA5F,GAAc,CAAC,IAAK,MAAM,SAAU3nI,EAAO72E,EAAO+e,GAC9CA,EAAOslM,MAAQtlM,EAAOi7L,QAAQ1C,KAAKzgI,GACnC93D,EAAOulM,UAAYztI,CACvB,IACA2nI,GAAc,CAAC,IAAK,OAAO,SAAU3nI,EAAO72E,EAAO+e,GAC/C/e,EAAMg/M,IAAQtC,EAAM7lI,GACpBuhI,EAAgBr5L,GAAQ06L,SAAU,CACtC,IACA+E,GAAc,OAAO,SAAU3nI,EAAO72E,EAAO+e,GACzC,IAAIusD,EAAMuL,EAAMntF,OAAS,EACzBsW,EAAMg/M,IAAQtC,EAAM7lI,EAAM3iD,OAAO,EAAGo3C,IACpCtrE,EAAMi/M,IAAUvC,EAAM7lI,EAAM3iD,OAAOo3C,IACnC8sI,EAAgBr5L,GAAQ06L,SAAU,CACtC,IACA+E,GAAc,SAAS,SAAU3nI,EAAO72E,EAAO+e,GAC3C,IAAIwlM,EAAO1tI,EAAMntF,OAAS,EACtB86N,EAAO3tI,EAAMntF,OAAS,EAC1BsW,EAAMg/M,IAAQtC,EAAM7lI,EAAM3iD,OAAO,EAAGqwL,IACpCvkN,EAAMi/M,IAAUvC,EAAM7lI,EAAM3iD,OAAOqwL,EAAM,IACzCvkN,EAAMk/M,IAAUxC,EAAM7lI,EAAM3iD,OAAOswL,IACnCpM,EAAgBr5L,GAAQ06L,SAAU,CACtC,IACA+E,GAAc,OAAO,SAAU3nI,EAAO72E,EAAO+e,GACzC,IAAIusD,EAAMuL,EAAMntF,OAAS,EACzBsW,EAAMg/M,IAAQtC,EAAM7lI,EAAM3iD,OAAO,EAAGo3C,IACpCtrE,EAAMi/M,IAAUvC,EAAM7lI,EAAM3iD,OAAOo3C,GACvC,IACAkzI,GAAc,SAAS,SAAU3nI,EAAO72E,EAAO+e,GAC3C,IAAIwlM,EAAO1tI,EAAMntF,OAAS,EACtB86N,EAAO3tI,EAAMntF,OAAS,EAC1BsW,EAAMg/M,IAAQtC,EAAM7lI,EAAM3iD,OAAO,EAAGqwL,IACpCvkN,EAAMi/M,IAAUvC,EAAM7lI,EAAM3iD,OAAOqwL,EAAM,IACzCvkN,EAAMk/M,IAAUxC,EAAM7lI,EAAM3iD,OAAOswL,GACvC,IAUA,IAKIC,GAAa5H,EAAW,SAAS,GAUrC,IAuBI6H,GAvBAC,GAAa,CACb1O,SA5iDkB,CAClBC,QAAS,gBACTE,QAAS,mBACTC,SAAU,eACVC,QAAS,oBACTC,SAAU,sBACVJ,SAAU,KAuiDVT,eAh7CwB,CACxBE,IAAK,YACLD,GAAI,SACJE,EAAG,aACHC,GAAI,eACJC,IAAK,sBACLC,KAAM,6BA26CN4F,YA94CqB,eA+4CrB7E,QAz4CiB,KA04CjBD,uBAz4CgC,UA04ChCN,aAp4CsB,CACtBC,OAAQ,QACRC,KAAM,SACNzyM,EAAG,gBACH0yM,GAAI,aACJ1qN,EAAG,WACHm9I,GAAI,aACJ+rE,EAAG,UACHyB,GAAI,WACJ3mL,EAAG,QACHk5G,GAAI,UACJjB,EAAG,SACH2uE,GAAI,WACJ7tE,EAAG,UACHC,GAAI,YACJ9lJ,EAAG,SACH+lJ,GAAI,YAs3CJ9E,OAAQs7E,GACRh+E,YAAai+E,GAEb3I,KAxlBoB,CACpBC,IAAK,EACLC,IAAK,GAwlBL5B,SAAUmN,GACVjN,YAAamN,GACbpN,cAAemN,GAEfrL,cAhC6B,iBAoC7BuN,GAAU,CAAC,EACXC,GAAiB,CAAC,EAGtB,SAASC,GAAaC,EAAM/vE,GACxB,IAAIn+I,EACAmuN,EAAO9jO,KAAKE,IAAI2jO,EAAKr7N,OAAQsrJ,EAAKtrJ,QACtC,IAAKmN,EAAI,EAAGA,EAAImuN,EAAMnuN,GAAK,EACvB,GAAIkuN,EAAKluN,KAAOm+I,EAAKn+I,GACjB,OAAOA,EAGf,OAAOmuN,CACX,CAEA,SAASC,GAAgBj5N,GACrB,OAAOA,EAAMA,EAAIhI,cAAc4L,QAAQ,IAAK,KAAO5D,CACvD,CA0CA,SAASk5N,GAAWv8N,GAChB,IAAIw8N,EAAY,KAGhB,QACsBh4N,IAAlBy3N,GAAQj8N,IAER43D,GACAA,EAAOP,SAbf,SAA0Br3D,GAEtB,OAAoC,MAA7BA,EAAKw/C,MAAM,cACtB,CAWQi9K,CAAiBz8N,GAEjB,IACIw8N,EAAYT,GAAaW,MAEzB,0GACAC,GAAmBH,EACvB,CAAE,MAAOzyL,GAGLkyL,GAAQj8N,GAAQ,IACpB,CAEJ,OAAOi8N,GAAQj8N,EACnB,CAKA,SAAS28N,GAAmBt5N,EAAKslB,GAC7B,IAAIxlB,EAqBJ,OApBIE,KAEIF,EADAo+M,EAAY54L,GACLi0M,GAAUv5N,GAEVopN,GAAappN,EAAKslB,IAKzBozM,GAAe54N,EAEQ,oBAAZkd,SAA2BA,QAAQY,MAE1CZ,QAAQY,KACJ,UAAY5d,EAAM,2CAM3B04N,GAAaW,KACxB,CAEA,SAASjQ,GAAazsN,EAAMo2B,GACxB,GAAe,OAAXA,EAAiB,CACjB,IAAIk5L,EACAyC,EAAeiK,GAEnB,GADA5lM,EAAOyxL,KAAO7nN,EACO,MAAjBi8N,GAAQj8N,GACR6xN,EACI,uBACA,2OAKJE,EAAekK,GAAQj8N,GAAMokD,aAC1B,GAA2B,MAAvBhuB,EAAOymM,aACd,GAAoC,MAAhCZ,GAAQ7lM,EAAOymM,cACf9K,EAAekK,GAAQ7lM,EAAOymM,cAAcz4K,YACzC,CAEH,GAAc,OADdkrK,EAASiN,GAAWnmM,EAAOymM,eAWvB,OAPKX,GAAe9lM,EAAOymM,gBACvBX,GAAe9lM,EAAOymM,cAAgB,IAE1CX,GAAe9lM,EAAOymM,cAAcr8N,KAAK,CACrCR,KAAMA,EACNo2B,OAAQA,IAEL,KATP27L,EAAezC,EAAOlrK,OAW9B,CAeJ,OAbA63K,GAAQj8N,GAAQ,IAAIiyN,EAAOH,EAAaC,EAAc37L,IAElD8lM,GAAel8N,IACfk8N,GAAel8N,GAAMG,SAAQ,SAAU9F,GACnCoyN,GAAapyN,EAAE2F,KAAM3F,EAAE+7B,OAC3B,IAMJumM,GAAmB38N,GAEZi8N,GAAQj8N,EACnB,CAGI,cADOi8N,GAAQj8N,GACR,IAEf,CAgDA,SAAS48N,GAAUv5N,GACf,IAAIisN,EAMJ,GAJIjsN,GAAOA,EAAIguN,SAAWhuN,EAAIguN,QAAQqL,QAClCr5N,EAAMA,EAAIguN,QAAQqL,QAGjBr5N,EACD,OAAO04N,GAGX,IAAK52M,EAAQ9hB,GAAM,CAGf,GADAisN,EAASiN,GAAWl5N,GAEhB,OAAOisN,EAEXjsN,EAAM,CAACA,EACX,CAEA,OAlNJ,SAAsBs4B,GAOlB,IANA,IACIrf,EACA7U,EACA6nN,EACAzqN,EAJAqJ,EAAI,EAMDA,EAAIytB,EAAM56B,QAAQ,CAKrB,IAHAub,GADAzX,EAAQy3N,GAAgB3gM,EAAMztB,IAAIrJ,MAAM,MAC9B9D,OAEV0G,GADAA,EAAO60N,GAAgB3gM,EAAMztB,EAAI,KACnBzG,EAAK5C,MAAM,KAAO,KACzByX,EAAI,GAAG,CAEV,GADAgzM,EAASiN,GAAW13N,EAAMkK,MAAM,EAAGuN,GAAGljB,KAAK,MAEvC,OAAOk2N,EAEX,GACI7nN,GACAA,EAAK1G,QAAUub,GACf6/M,GAAat3N,EAAO4C,IAAS6U,EAAI,EAGjC,MAEJA,GACJ,CACApO,GACJ,CACA,OAAO6tN,EACX,CAoLWe,CAAaz5N,EACxB,CAMA,SAAS05N,GAAcz5N,GACnB,IAAIzH,EACA8R,EAAIrK,EAAE2uC,GAuCV,OArCItkC,IAAsC,IAAjC8hN,EAAgBnsN,GAAGzH,WACxBA,EACI8R,EAAEwoN,IAAS,GAAKxoN,EAAEwoN,IAAS,GACrBA,GACAxoN,EAAEyoN,IAAQ,GAAKzoN,EAAEyoN,IAAQhC,GAAYzmN,EAAEuoN,IAAOvoN,EAAEwoN,KAChDC,GACAzoN,EAAE0oN,IAAQ,GACV1oN,EAAE0oN,IAAQ,IACG,KAAZ1oN,EAAE0oN,MACgB,IAAd1oN,EAAE2oN,KACe,IAAd3oN,EAAE4oN,KACiB,IAAnB5oN,EAAE6oN,KACVH,GACA1oN,EAAE2oN,IAAU,GAAK3oN,EAAE2oN,IAAU,GAC7BA,GACA3oN,EAAE4oN,IAAU,GAAK5oN,EAAE4oN,IAAU,GAC7BA,GACA5oN,EAAE6oN,IAAe,GAAK7oN,EAAE6oN,IAAe,IACvCA,IACC,EAGP/G,EAAgBnsN,GAAG05N,qBAClBnhO,EAAWq6N,IAAQr6N,EAAWu6N,MAE/Bv6N,EAAWu6N,IAEX3G,EAAgBnsN,GAAG25N,iBAAgC,IAAdphO,IACrCA,EAAW46N,IAEXhH,EAAgBnsN,GAAG45N,mBAAkC,IAAdrhO,IACvCA,EAAW66N,IAGfjH,EAAgBnsN,GAAGzH,SAAWA,GAG3ByH,CACX,CAIA,IAAI65N,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,qBAElBlN,GACI,0LACJmN,GAAa,CACTC,GAAI,EACJC,IAAK,EACLC,KAAK,IACLC,KAAK,IACLC,KAAK,IACLC,KAAK,IACLC,KAAK,IACLC,KAAK,IACLC,KAAK,IACLC,KAAK,KAIb,SAASC,GAAchoM,GACnB,IAAIloB,EACA8yC,EAGAq9K,EACAC,EACAC,EACAC,EALA91J,EAAStyC,EAAOxnB,GAChB4wC,EAAQ29K,GAAiBjkM,KAAKwvC,IAAW00J,GAAclkM,KAAKwvC,GAK5D+1J,EAAcnB,GAASv8N,OACvB29N,EAAcnB,GAASx8N,OAE3B,GAAIy+C,EAAO,CAEP,IADAiwK,EAAgBr5L,GAAQ+5L,KAAM,EACzBjiN,EAAI,EAAG8yC,EAAIy9K,EAAavwN,EAAI8yC,EAAG9yC,IAChC,GAAIovN,GAASpvN,GAAG,GAAGgrB,KAAKsmB,EAAM,IAAK,CAC/B8+K,EAAahB,GAASpvN,GAAG,GACzBmwN,GAA+B,IAAnBf,GAASpvN,GAAG,GACxB,KACJ,CAEJ,GAAkB,MAAdowN,EAEA,YADAloM,EAAOq6L,UAAW,GAGtB,GAAIjxK,EAAM,GAAI,CACV,IAAKtxC,EAAI,EAAG8yC,EAAI09K,EAAaxwN,EAAI8yC,EAAG9yC,IAChC,GAAIqvN,GAASrvN,GAAG,GAAGgrB,KAAKsmB,EAAM,IAAK,CAE/B++K,GAAc/+K,EAAM,IAAM,KAAO+9K,GAASrvN,GAAG,GAC7C,KACJ,CAEJ,GAAkB,MAAdqwN,EAEA,YADAnoM,EAAOq6L,UAAW,EAG1B,CACA,IAAK4N,GAA2B,MAAdE,EAEd,YADAnoM,EAAOq6L,UAAW,GAGtB,GAAIjxK,EAAM,GAAI,CACV,IAAI69K,GAAQnkM,KAAKsmB,EAAM,IAInB,YADAppB,EAAOq6L,UAAW,GAFlB+N,EAAW,GAKnB,CACApoM,EAAOgzL,GAAKkV,GAAcC,GAAc,KAAOC,GAAY,IAC3DG,GAA0BvoM,EAC9B,MACIA,EAAOq6L,UAAW,CAE1B,CAyBA,SAASmO,GAAeC,GACpB,IAAIjrF,EAAOxuH,SAASy5M,EAAS,IAC7B,OAAIjrF,GAAQ,GACD,IAAOA,EACPA,GAAQ,IACR,KAAOA,EAEXA,CACX,CA4CA,SAASkrF,GAAkB1oM,GACvB,IACI2oM,EA5EJF,EACAG,EACAC,EACAC,EACAC,EACAC,EAEIx/N,EAoEA4/C,EAAQ8wK,GAAQp3L,KAAuB9C,EAAOxnB,GAxC7C3H,QAAQ,qBAAsB,KAC9BA,QAAQ,WAAY,KACpBA,QAAQ,SAAU,IAClBA,QAAQ,SAAU,KAuCvB,GAAIu4C,EAAO,CASP,GAtFJq/K,EA+EQr/K,EAAM,GA9Edw/K,EA+EQx/K,EAAM,GA9Edy/K,EA+EQz/K,EAAM,GA9Ed0/K,EA+EQ1/K,EAAM,GA9Ed2/K,EA+EQ3/K,EAAM,GA9Ed4/K,EA+EQ5/K,EAAM,GA7EV5/C,EAAS,CACTg/N,GAAeC,GACf7H,GAAyB75N,QAAQ6hO,GACjC55M,SAAS65M,EAAQ,IACjB75M,SAAS85M,EAAS,IAClB95M,SAAS+5M,EAAW,KAGpBC,GACAx/N,EAAOY,KAAK4kB,SAASg6M,EAAW,KA8DhCL,EA3DGn/N,GAsBX,SAAsBy/N,EAAYC,EAAalpM,GAC3C,OAAIipM,GAEsBtF,GAA2B58N,QAAQkiO,KACrC,IAAIhgK,KAChBigK,EAAY,GACZA,EAAY,GACZA,EAAY,IACdC,WAEF9P,EAAgBr5L,GAAQm6L,iBAAkB,EAC1Cn6L,EAAOq6L,UAAW,GACX,EAInB,CA6Ba+O,CAAahgL,EAAM,GAAIu/K,EAAa3oM,GACrC,OAGJA,EAAO6b,GAAK8sL,EACZ3oM,EAAOizL,KAhCf,SAAyBoW,EAAWC,EAAgBC,GAChD,GAAIF,EACA,OAAOhC,GAAWgC,GACf,GAAIC,EAEP,OAAO,EAEP,IAAIE,EAAKx6M,SAASu6M,EAAW,IACzBr8N,EAAIs8N,EAAK,IAEb,OADSA,EAAKt8N,GAAK,IACR,GAAKA,CAExB,CAoBsBu8N,CAAgBrgL,EAAM,GAAIA,EAAM,GAAIA,EAAM,KAExDppB,EAAOk+B,GAAKskK,GAAcj6M,MAAM,KAAMyX,EAAO6b,IAC7C7b,EAAOk+B,GAAGwrK,cAAc1pM,EAAOk+B,GAAGyrK,gBAAkB3pM,EAAOizL,MAE3DoG,EAAgBr5L,GAAQk6L,SAAU,CACtC,MACIl6L,EAAOq6L,UAAW,CAE1B,CA0CA,SAASh+E,GAAS9kI,EAAGC,EAAGi9B,GACpB,OAAS,MAALl9B,EACOA,EAEF,MAALC,EACOA,EAEJi9B,CACX,CAmBA,SAASm1L,GAAgB5pM,GACrB,IAAIloB,EACA0mI,EAEAqrF,EACAC,EACAC,EAHAjyI,EAAQ,GAKZ,IAAI93D,EAAOk+B,GAAX,CAgCA,IA5BA2rK,EA7BJ,SAA0B7pM,GAEtB,IAAIgqM,EAAW,IAAI/gK,KAAKyqC,EAAMxqC,OAC9B,OAAIlpC,EAAOiqM,QACA,CACHD,EAAShxF,iBACTgxF,EAAS/wF,cACT+wF,EAAS9wF,cAGV,CAAC8wF,EAAStxF,cAAesxF,EAASrxF,WAAYqxF,EAASpxF,UAClE,CAkBkBsxF,CAAiBlqM,GAG3BA,EAAO4/L,IAAyB,MAAnB5/L,EAAO6b,GAAGmkL,KAAqC,MAApBhgM,EAAO6b,GAAGkkL,KA0E1D,SAA+B//L,GAC3B,IAAImpH,EAAGghF,EAAUlS,EAAM2K,EAAS1K,EAAKC,EAAK5qJ,EAAM68J,EAAiBC,EAGrD,OADZlhF,EAAInpH,EAAO4/L,IACL0K,IAAqB,MAAPnhF,EAAEohF,GAAoB,MAAPphF,EAAE3zG,GACjC0iL,EAAM,EACNC,EAAM,EAMNgS,EAAW9tF,GACP8M,EAAEmhF,GACFtqM,EAAO6b,GAAGikL,IACVkD,GAAWwH,KAAe,EAAG,GAAGhtF,MAEpCy6E,EAAO57E,GAAS8M,EAAEohF,EAAG,KACrB3H,EAAUvmF,GAAS8M,EAAE3zG,EAAG,IACV,GAAKotL,EAAU,KACzBwH,GAAkB,KAGtBlS,EAAMl4L,EAAOi7L,QAAQwP,MAAMvS,IAC3BC,EAAMn4L,EAAOi7L,QAAQwP,MAAMtS,IAE3BkS,EAAUrH,GAAWwH,KAAetS,EAAKC,GAEzCgS,EAAW9tF,GAAS8M,EAAEuhF,GAAI1qM,EAAO6b,GAAGikL,IAAOuK,EAAQ7sF,MAGnDy6E,EAAO57E,GAAS8M,EAAEA,EAAGkhF,EAAQpS,MAElB,MAAP9uE,EAAEj4G,IAEF0xL,EAAUz5E,EAAEj4G,GACE,GAAK0xL,EAAU,KACzBwH,GAAkB,GAER,MAAPjhF,EAAEx1G,GAETivL,EAAUz5E,EAAEx1G,EAAIukL,GACZ/uE,EAAEx1G,EAAI,GAAKw1G,EAAEx1G,EAAI,KACjBy2L,GAAkB,IAItBxH,EAAU1K,GAGdD,EAAO,GAAKA,EAAOkL,GAAYgH,EAAUjS,EAAKC,GAC9CkB,EAAgBr5L,GAAQ6mM,gBAAiB,EACf,MAAnBuD,EACP/Q,EAAgBr5L,GAAQ8mM,kBAAmB,GAE3Cv5J,EAAOo1J,GAAmBwH,EAAUlS,EAAM2K,EAAS1K,EAAKC,GACxDn4L,EAAO6b,GAAGikL,IAAQvyJ,EAAKiwE,KACvBx9G,EAAO2qM,WAAap9J,EAAKw1J,UAEjC,CApIQ6H,CAAsB5qM,GAID,MAArBA,EAAO2qM,aACPZ,EAAY1tF,GAASr8G,EAAO6b,GAAGikL,IAAO+J,EAAY/J,MAG9C9/L,EAAO2qM,WAAaxI,GAAW4H,IACT,IAAtB/pM,EAAO2qM,cAEPtR,EAAgBr5L,GAAQ4mM,oBAAqB,GAGjDpoF,EAAOgkF,GAAcuH,EAAW,EAAG/pM,EAAO2qM,YAC1C3qM,EAAO6b,GAAGkkL,IAASvhF,EAAKvF,cACxBj5G,EAAO6b,GAAGmkL,IAAQxhF,EAAKtF,cAQtBphI,EAAI,EAAGA,EAAI,GAAqB,MAAhBkoB,EAAO6b,GAAG/jC,KAAcA,EACzCkoB,EAAO6b,GAAG/jC,GAAKggF,EAAMhgF,GAAK+xN,EAAY/xN,GAI1C,KAAOA,EAAI,EAAGA,IACVkoB,EAAO6b,GAAG/jC,GAAKggF,EAAMhgF,GACD,MAAhBkoB,EAAO6b,GAAG/jC,GAAoB,IAANA,EAAU,EAAI,EAAKkoB,EAAO6b,GAAG/jC,GAKrC,KAApBkoB,EAAO6b,GAAGokL,KACY,IAAtBjgM,EAAO6b,GAAGqkL,KACY,IAAtBlgM,EAAO6b,GAAGskL,KACiB,IAA3BngM,EAAO6b,GAAGukL,MAEVpgM,EAAO6qM,UAAW,EAClB7qM,EAAO6b,GAAGokL,IAAQ,GAGtBjgM,EAAOk+B,IAAMl+B,EAAOiqM,QAAUzH,GAAgBF,IAAY/5M,MACtD,KACAuvE,GAEJgyI,EAAkB9pM,EAAOiqM,QACnBjqM,EAAOk+B,GAAG+kF,YACVjjH,EAAOk+B,GAAGirK,SAIG,MAAfnpM,EAAOizL,MACPjzL,EAAOk+B,GAAGwrK,cAAc1pM,EAAOk+B,GAAGyrK,gBAAkB3pM,EAAOizL,MAG3DjzL,EAAO6qM,WACP7qM,EAAO6b,GAAGokL,IAAQ,IAKlBjgM,EAAO4/L,SACgB,IAAhB5/L,EAAO4/L,GAAG1uL,GACjBlR,EAAO4/L,GAAG1uL,IAAM44L,IAEhBzQ,EAAgBr5L,GAAQm6L,iBAAkB,EA3E9C,CA6EJ,CAsEA,SAASoO,GAA0BvoM,GAE/B,GAAIA,EAAOgzL,KAAOt/G,EAAMo3H,SAIxB,GAAI9qM,EAAOgzL,KAAOt/G,EAAMq3H,SAAxB,CAIA/qM,EAAO6b,GAAK,GACZw9K,EAAgBr5L,GAAQw0H,OAAQ,EAGhC,IACI18I,EACAoxN,EACA9gK,EACAjuC,EACA6wM,EAGA/Q,EACAyF,EATAptJ,EAAS,GAAKtyC,EAAOxnB,GAMrByyN,EAAe34J,EAAO3nE,OACtBugO,EAAyB,EAO7B,IADAxL,GAFAt3J,EACIu0J,EAAa38L,EAAOgzL,GAAIhzL,EAAOi7L,SAAS7xK,MAAM+yK,IAAqB,IACrDxxN,OACbmN,EAAI,EAAGA,EAAI4nN,EAAU5nN,IACtBqiB,EAAQiuC,EAAOtwD,IACfoxN,GAAe52J,EAAOlpB,MAAMg2K,GAAsBjlM,EAAO6F,KACrD,IAAI,OAEJgrM,EAAU14J,EAAOn9B,OAAO,EAAGm9B,EAAOvrE,QAAQmiO,KAC9Bv+N,OAAS,GACjB0uN,EAAgBr5L,GAAQw5L,YAAYpvN,KAAK4gO,GAE7C14J,EAASA,EAAO35D,MACZ25D,EAAOvrE,QAAQmiO,GAAeA,EAAYv+N,QAE9CugO,GAA0BhC,EAAYv+N,QAGtC2xN,EAAqBniM,IACjB+uM,EACA7P,EAAgBr5L,GAAQw0H,OAAQ,EAEhC6kE,EAAgBr5L,GAAQu5L,aAAanvN,KAAK+vB,GAE9C0lM,GAAwB1lM,EAAO+uM,EAAalpM,IACrCA,EAAOy6L,UAAYyO,GAC1B7P,EAAgBr5L,GAAQu5L,aAAanvN,KAAK+vB,GAKlDk/L,EAAgBr5L,GAAQy5L,cACpBwR,EAAeC,EACf54J,EAAO3nE,OAAS,GAChB0uN,EAAgBr5L,GAAQw5L,YAAYpvN,KAAKkoE,GAKzCtyC,EAAO6b,GAAGokL,KAAS,KACiB,IAApC5G,EAAgBr5L,GAAQ06L,SACxB16L,EAAO6b,GAAGokL,IAAQ,IAElB5G,EAAgBr5L,GAAQ06L,aAAUtsN,GAGtCirN,EAAgBr5L,GAAQg6L,gBAAkBh6L,EAAO6b,GAAGljC,MAAM,GAC1D0gN,EAAgBr5L,GAAQw4L,SAAWx4L,EAAOulM,UAE1CvlM,EAAO6b,GAAGokL,IAgBd,SAAyB/G,EAAQiS,EAAM3S,GACnC,IAAI4S,EAEJ,OAAgB,MAAZ5S,EAEO2S,EAEgB,MAAvBjS,EAAOmS,aACAnS,EAAOmS,aAAaF,EAAM3S,GACX,MAAfU,EAAOX,OAEd6S,EAAOlS,EAAOX,KAAKC,KACP2S,EAAO,KACfA,GAAQ,IAEPC,GAAiB,KAATD,IACTA,EAAO,GAEJA,GAGAA,CAEf,CAvCsBG,CACdtrM,EAAOi7L,QACPj7L,EAAO6b,GAAGokL,IACVjgM,EAAOulM,WAKC,QADZtL,EAAMZ,EAAgBr5L,GAAQi6L,OAE1Bj6L,EAAO6b,GAAGikL,IAAQ9/L,EAAOi7L,QAAQsQ,gBAAgBtR,EAAKj6L,EAAO6b,GAAGikL,MAGpE8J,GAAgB5pM,GAChB2mM,GAAc3mM,EA9Ed,MAFI0oM,GAAkB1oM,QAJlBgoM,GAAchoM,EAqFtB,CAqHA,SAASwrM,GAAcxrM,GACnB,IAAI83D,EAAQ93D,EAAOxnB,GACfokI,EAAS58G,EAAOgzL,GAIpB,OAFAhzL,EAAOi7L,QAAUj7L,EAAOi7L,SAAWuL,GAAUxmM,EAAO21C,IAEtC,OAAVmiB,QAA8B1pF,IAAXwuI,GAAkC,KAAV9kD,EACpC6iI,EAAc,CAAEjB,WAAW,KAGjB,iBAAV5hI,IACP93D,EAAOxnB,GAAKs/E,EAAQ93D,EAAOi7L,QAAQwQ,SAAS3zI,IAG5Co7H,EAASp7H,GACF,IAAIojI,EAAOyL,GAAc7uI,KACzBwpG,EAAOxpG,GACd93D,EAAOk+B,GAAK45B,EACL/oE,EAAQ6tH,GA3GvB,SAAkC58G,GAC9B,IAAI0rM,EACAC,EACAC,EACA9zN,EACA+zN,EACAC,EACAC,GAAoB,EACpBC,EAAahsM,EAAOgzL,GAAGroN,OAE3B,GAAmB,IAAfqhO,EAGA,OAFA3S,EAAgBr5L,GAAQ65L,eAAgB,OACxC75L,EAAOk+B,GAAK,IAAI+K,KAAK2xJ,MAIzB,IAAK9iN,EAAI,EAAGA,EAAIk0N,EAAYl0N,IACxB+zN,EAAe,EACfC,GAAmB,EACnBJ,EAAa5Q,EAAW,CAAC,EAAG96L,GACN,MAAlBA,EAAOiqM,UACPyB,EAAWzB,QAAUjqM,EAAOiqM,SAEhCyB,EAAW1Y,GAAKhzL,EAAOgzL,GAAGl7M,GAC1BywN,GAA0BmD,GAEtBtR,EAAQsR,KACRI,GAAmB,GAIvBD,GAAgBxS,EAAgBqS,GAAYjS,cAG5CoS,GAAkE,GAAlDxS,EAAgBqS,GAAYnS,aAAa5uN,OAEzD0uN,EAAgBqS,GAAYO,MAAQJ,EAE/BE,EAaGF,EAAeD,IACfA,EAAcC,EACdF,EAAaD,IAbE,MAAfE,GACAC,EAAeD,GACfE,KAEAF,EAAcC,EACdF,EAAaD,EACTI,IACAC,GAAoB,IAWpC30K,EAAOp3B,EAAQ2rM,GAAcD,EACjC,CAiDQQ,CAAyBlsM,GAClB48G,EACP2rF,GAA0BvoM,GAYlC,SAAyBA,GACrB,IAAI83D,EAAQ93D,EAAOxnB,GACf2yM,EAAYrzH,GACZ93D,EAAOk+B,GAAK,IAAI+K,KAAKyqC,EAAMxqC,OACpBo4H,EAAOxpG,GACd93D,EAAOk+B,GAAK,IAAI+K,KAAK6uB,EAAMyhD,WACH,iBAAVzhD,EAndtB,SAA0B93D,GACtB,IAAIlvB,EAAUs2N,GAAgBtkM,KAAK9C,EAAOxnB,IAC1B,OAAZ1H,GAKJk3N,GAAchoM,IACU,IAApBA,EAAOq6L,kBACAr6L,EAAOq6L,SAKlBqO,GAAkB1oM,IACM,IAApBA,EAAOq6L,kBACAr6L,EAAOq6L,SAKdr6L,EAAOy6L,QACPz6L,EAAOq6L,UAAW,EAGlB3mH,EAAMy4H,wBAAwBnsM,MAtB9BA,EAAOk+B,GAAK,IAAI+K,MAAMn4D,EAAQ,GAwBtC,CAybQs7N,CAAiBpsM,GACVjR,EAAQ+oE,IACf93D,EAAO6b,GAAKj5C,EAAIk1F,EAAMn/E,MAAM,IAAI,SAAUyF,GACtC,OAAO4Q,SAAS5Q,EAAK,GACzB,IACAwrN,GAAgB5pM,IACTwlC,EAASsyB,GA1ExB,SAA0B93D,GACtB,IAAIA,EAAOk+B,GAAX,CAIA,IAAIpmD,EAAIqlN,EAAqBn9L,EAAOxnB,IAChC6zN,OAAsBj+N,IAAV0J,EAAE4lI,IAAoB5lI,EAAE0mI,KAAO1mI,EAAE4lI,IACjD19G,EAAO6b,GAAKj5C,EACR,CAACkV,EAAE0lI,KAAM1lI,EAAE2lI,MAAO4uF,EAAWv0N,EAAEqzN,KAAMrzN,EAAEw0N,OAAQx0N,EAAE0qJ,OAAQ1qJ,EAAEy0N,cAC3D,SAAUnuN,GACN,OAAOA,GAAO4Q,SAAS5Q,EAAK,GAChC,IAGJwrN,GAAgB5pM,EAXhB,CAYJ,CA4DQwsM,CAAiBxsM,GACVkjL,EAASprH,GAEhB93D,EAAOk+B,GAAK,IAAI+K,KAAK6uB,GAErB4b,EAAMy4H,wBAAwBnsM,EAEtC,CA/BQysM,CAAgBzsM,GAGfo6L,EAAQp6L,KACTA,EAAOk+B,GAAK,MAGTl+B,GACX,CAyBA,SAASo5L,GAAiBthI,EAAO8kD,EAAQs8E,EAAQC,EAAQuT,GACrD,IAnEI3T,EAmEAtkL,EAAI,CAAC,EA2BT,OAzBe,IAAXmoG,IAA8B,IAAXA,IACnBu8E,EAASv8E,EACTA,OAASxuI,IAGE,IAAX8qN,IAA8B,IAAXA,IACnBC,EAASD,EACTA,OAAS9qN,IAIRo3D,EAASsyB,IAAUghI,EAAchhI,IACjC/oE,EAAQ+oE,IAA2B,IAAjBA,EAAMntF,UAEzBmtF,OAAQ1pF,GAIZqmC,EAAEumL,kBAAmB,EACrBvmL,EAAEw1L,QAAUx1L,EAAEkhL,OAAS+W,EACvBj4L,EAAEkhC,GAAKujJ,EACPzkL,EAAEj8B,GAAKs/E,EACPrjD,EAAEu+K,GAAKp2E,EACPnoG,EAAEgmL,QAAUtB,GA5FRJ,EAAM,IAAImC,EAAOyL,GAAc6E,GA8FX/2L,MA7FhBo2L,WAEJ9R,EAAIpvN,IAAI,EAAG,KACXovN,EAAI8R,cAAWz8N,GAGZ2qN,CAwFX,CAEA,SAASyR,GAAY1yI,EAAO8kD,EAAQs8E,EAAQC,GACxC,OAAOC,GAAiBthI,EAAO8kD,EAAQs8E,EAAQC,GAAQ,EAC3D,CAxeAzlH,EAAMy4H,wBAA0B/Q,EAC5B,iSAGA,SAAUp7L,GACNA,EAAOk+B,GAAK,IAAI+K,KAAKjpC,EAAOxnB,IAAMwnB,EAAOiqM,QAAU,OAAS,IAChE,IAsLJv2H,EAAMo3H,SAAW,WAAa,EAG9Bp3H,EAAMq3H,SAAW,WAAa,EA2S9B,IAAI4B,GAAevR,EACX,sGACA,WACI,IAAItrB,EAAQ06B,GAAYjiN,MAAM,KAAM7d,WACpC,OAAI8V,KAAK45M,WAAatqB,EAAMsqB,UACjBtqB,EAAQtvL,KAAOA,KAAOsvL,EAEtB6qB,GAEf,IAEJiS,GAAexR,EACX,sGACA,WACI,IAAItrB,EAAQ06B,GAAYjiN,MAAM,KAAM7d,WACpC,OAAI8V,KAAK45M,WAAatqB,EAAMsqB,UACjBtqB,EAAQtvL,KAAOA,KAAOsvL,EAEtB6qB,GAEf,IAQR,SAASpW,GAAO/4M,EAAIqhO,GAChB,IAAI9T,EAAKjhN,EAIT,GAHuB,IAAnB+0N,EAAQliO,QAAgBokB,EAAQ89M,EAAQ,MACxCA,EAAUA,EAAQ,KAEjBA,EAAQliO,OACT,OAAO6/N,KAGX,IADAzR,EAAM8T,EAAQ,GACT/0N,EAAI,EAAGA,EAAI+0N,EAAQliO,SAAUmN,EACzB+0N,EAAQ/0N,GAAGsiN,YAAayS,EAAQ/0N,GAAGtM,GAAIutN,KACxCA,EAAM8T,EAAQ/0N,IAGtB,OAAOihN,CACX,CAeA,IAII+T,GAAW,CACX,OACA,UACA,QACA,OACA,MACA,OACA,SACA,SACA,eA0CJ,SAASC,GAAStjK,GACd,IAAI6zJ,EAAkBH,EAAqB1zJ,GACvCujK,EAAQ1P,EAAgB9/E,MAAQ,EAChCyvF,EAAW3P,EAAgB4P,SAAW,EACtC7nF,EAASi4E,EAAgB7/E,OAAS,EAClC0vF,EAAQ7P,EAAgBrF,MAAQqF,EAAgB8P,SAAW,EAC3D1kF,EAAO40E,EAAgB5/E,KAAO,EAC9B+6E,EAAQ6E,EAAgB6N,MAAQ,EAChCzS,EAAU4E,EAAgBgP,QAAU,EACpClH,EAAU9H,EAAgB96D,QAAU,EACpC6qE,EAAe/P,EAAgBiP,aAAe,EAElD/rN,KAAK65M,SAnDT,SAAyBntN,GACrB,IAAID,EAEA6K,EADAw1N,GAAiB,EAEjBC,EAAWT,GAASniO,OACxB,IAAKsC,KAAOC,EACR,GACI2rN,EAAW3rN,EAAGD,MAEuB,IAAjClG,GAAQyX,KAAKsuN,GAAU7/N,IACZ,MAAVC,EAAED,IAAiB2nC,MAAM1nC,EAAED,KAGhC,OAAO,EAIf,IAAK6K,EAAI,EAAGA,EAAIy1N,IAAYz1N,EACxB,GAAI5K,EAAE4/N,GAASh1N,IAAK,CAChB,GAAIw1N,EACA,OAAO,EAEPh0M,WAAWpsB,EAAE4/N,GAASh1N,OAAS6lN,EAAMzwN,EAAE4/N,GAASh1N,OAChDw1N,GAAiB,EAEzB,CAGJ,OAAO,CACX,CAsBoBE,CAAgBlQ,GAGhC98M,KAAKitN,eACAJ,EACS,IAAVjI,EACU,IAAV1M,EACQ,IAARD,EAAe,GAAK,GAGxBj4M,KAAKktN,OAAShlF,EAAe,EAARykF,EAIrB3sN,KAAKmtN,SAAWtoF,EAAoB,EAAX4nF,EAAuB,GAARD,EAExCxsN,KAAK20H,MAAQ,CAAC,EAEd30H,KAAKy6M,QAAUuL,KAEfhmN,KAAKotN,SACT,CAEA,SAASC,GAAWzvN,GAChB,OAAOA,aAAe2uN,EAC1B,CAEA,SAASe,GAASj7E,GACd,OAAIA,EAAS,GACyB,EAA3B1wJ,KAAKG,OAAO,EAAIuwJ,GAEhB1wJ,KAAKG,MAAMuwJ,EAE1B,CAqBA,SAASv+I,GAAO6lB,EAAOu0C,GACnB6tJ,EAAepiM,EAAO,EAAG,GAAG,WACxB,IAAI7lB,EAASkM,KAAKozM,YACdrD,EAAO,IAKX,OAJIj8M,EAAS,IACTA,GAAUA,EACVi8M,EAAO,KAGPA,EACAuL,KAAYxnN,EAAS,IAAK,GAC1Bo6D,EACAotJ,IAAWxnN,EAAS,GAAI,EAEhC,GACJ,CAEAA,GAAO,IAAK,KACZA,GAAO,KAAM,IAIb4qN,GAAc,IAAKF,IACnBE,GAAc,KAAMF,IACpBS,GAAc,CAAC,IAAK,OAAO,SAAU3nI,EAAO72E,EAAO+e,GAC/CA,EAAOiqM,SAAU,EACjBjqM,EAAOizL,KAAO8a,GAAiB/O,GAAkBlnI,EACrD,IAOA,IAAIk2I,GAAc,kBAElB,SAASD,GAAiBjqM,EAASwuC,GAC/B,IAEI4W,EACAwvI,EAHA9tJ,GAAW0H,GAAU,IAAIlpB,MAAMtlB,GAKnC,OAAgB,OAAZ8mC,EACO,KAOQ,KAFnB8tJ,EAAuB,IADvBxvI,IADQte,EAAQA,EAAQjgE,OAAS,IAAM,IACtB,IAAIy+C,MAAM4kL,KAAgB,CAAC,IAAK,EAAG,IAClC,GAAWrQ,EAAMz0I,EAAM,KAElB,EAAiB,MAAbA,EAAM,GAAawvI,GAAWA,CAC7D,CAGA,SAASuV,GAAgBn2I,EAAOn0D,GAC5B,IAAIo1L,EAAKpnD,EACT,OAAIhuI,EAAMgyL,QACNoD,EAAMp1L,EAAM2zH,QACZqa,GACKuhD,EAASp7H,IAAUwpG,EAAOxpG,GACrBA,EAAMyhD,UACNixF,GAAY1yI,GAAOyhD,WAAaw/E,EAAIx/E,UAE9Cw/E,EAAI76J,GAAGgwK,QAAQnV,EAAI76J,GAAGq7E,UAAYo4B,GAClCj+D,EAAM+hH,aAAasD,GAAK,GACjBA,GAEAyR,GAAY1yI,GAAOtM,OAElC,CAEA,SAAS2iJ,GAAcjhO,GAGnB,OAAQ/K,KAAKG,MAAM4K,EAAEgxD,GAAGgiF,oBAC5B,CAyJA,SAASkuF,KACL,QAAO5tN,KAAK45M,WAAY55M,KAAKm1M,QAA2B,IAAjBn1M,KAAK9F,OAChD,CArJAg5F,EAAM+hH,aAAe,WAAa,EAwJlC,IAAI4Y,GAAc,wDAIdC,GACI,sKAER,SAASC,GAAez2I,EAAO7qF,GAC3B,IAGIsjN,EACA/gG,EACAg/G,EA4FmB7hG,EAAMmjE,EACzBipB,EAlGAtvJ,EAAWquB,EAEX1uC,EAAQ,KAkEZ,OA7DIykL,GAAW/1I,GACXruB,EAAW,CACPkrE,GAAI78C,EAAM21I,cACVv8L,EAAG4mD,EAAM41I,MACTzjF,EAAGnyD,EAAM61I,SAENzqB,EAASprH,KAAWljD,OAAOkjD,IAClCruB,EAAW,CAAC,EACRx8D,EACAw8D,EAASx8D,IAAQ6qF,EAEjBruB,EAAS4jK,cAAgBv1I,IAErB1uC,EAAQilL,GAAYvrM,KAAKg1D,KACjCy4H,EAAoB,MAAbnnK,EAAM,IAAc,EAAI,EAC/BqgB,EAAW,CACPrlE,EAAG,EACH8sC,EAAGysL,EAAMv0K,EAAM42K,KAASzP,EACxB6F,EAAGuH,EAAMv0K,EAAM62K,KAAS1P,EACxBrjN,EAAGywN,EAAMv0K,EAAM82K,KAAW3P,EAC1BrrM,EAAGy4M,EAAMv0K,EAAM+2K,KAAW5P,EAC1B57E,GAAIgpF,EAAMmQ,GAA8B,IAArB1kL,EAAMg3K,MAAwB7P,KAE7CnnK,EAAQklL,GAASxrM,KAAKg1D,KAC9By4H,EAAoB,MAAbnnK,EAAM,IAAc,EAAI,EAC/BqgB,EAAW,CACPrlE,EAAGqqO,GAASrlL,EAAM,GAAImnK,GACtBtmE,EAAGwkF,GAASrlL,EAAM,GAAImnK,GACtBpnE,EAAGslF,GAASrlL,EAAM,GAAImnK,GACtBr/K,EAAGu9L,GAASrlL,EAAM,GAAImnK,GACtB6F,EAAGqY,GAASrlL,EAAM,GAAImnK,GACtBrjN,EAAGuhO,GAASrlL,EAAM,GAAImnK,GACtBrrM,EAAGupN,GAASrlL,EAAM,GAAImnK,KAEP,MAAZ9mJ,EAEPA,EAAW,CAAC,EAEQ,iBAAbA,IACN,SAAUA,GAAY,OAAQA,KAmDZkjE,EAhDf69F,GAAY/gK,EAASn5B,MAgDAw/J,EA/CrB06B,GAAY/gK,EAASyuE,IAFzBs2F,EAmDE7hG,EAAKytF,WAAatqB,EAAMsqB,WAI9BtqB,EAAQm+B,GAAgBn+B,EAAOnjE,GAC3BA,EAAK+hG,SAAS5+B,GACdipB,EAAM4V,GAA0BhiG,EAAMmjE,KAEtCipB,EAAM4V,GAA0B7+B,EAAOnjE,IACnC0gG,cAAgBtU,EAAIsU,aACxBtU,EAAI1zE,QAAU0zE,EAAI1zE,QAGf0zE,GAZI,CAAEsU,aAAc,EAAGhoF,OAAQ,IA/ClC57E,EAAW,CAAC,GACHkrE,GAAK65F,EAAQnB,aACtB5jK,EAASwgF,EAAIukF,EAAQnpF,QAGzB71B,EAAM,IAAIu9G,GAAStjK,GAEfokK,GAAW/1I,IAAU+gI,EAAW/gI,EAAO,aACvC03B,EAAIyrG,QAAUnjI,EAAMmjI,SAGpB4S,GAAW/1I,IAAU+gI,EAAW/gI,EAAO,cACvC03B,EAAI6qG,SAAWviI,EAAMuiI,UAGlB7qG,CACX,CAKA,SAASi/G,GAASG,EAAKre,GAInB,IAAIwI,EAAM6V,GAAOt1M,WAAWs1M,EAAI/9N,QAAQ,IAAK,MAE7C,OAAQ+jC,MAAMmkL,GAAO,EAAIA,GAAOxI,CACpC,CAEA,SAASoe,GAA0BhiG,EAAMmjE,GACrC,IAAIipB,EAAM,CAAC,EAUX,OARAA,EAAI1zE,OACAyqD,EAAMryD,QAAU9Q,EAAK8Q,QAAyC,IAA9BqyD,EAAMtyD,OAAS7Q,EAAK6Q,QACpD7Q,EAAK2qB,QAAQ3tJ,IAAIovN,EAAI1zE,OAAQ,KAAKwpF,QAAQ/+B,MACxCipB,EAAI1zE,OAGV0zE,EAAIsU,cAAgBv9B,GAASnjE,EAAK2qB,QAAQ3tJ,IAAIovN,EAAI1zE,OAAQ,KAEnD0zE,CACX,CAqBA,SAAS+V,GAAY38N,EAAWvI,GAC5B,OAAO,SAAU8qB,EAAKq6M,GAClB,IAAS7yF,EAmBT,OAjBe,OAAX6yF,GAAoBn6L,OAAOm6L,KAC3BtT,EACI7xN,EACA,YACIA,EACA,uDACAA,EAHJ,kGAOJsyI,EAAMxnH,EACNA,EAAMq6M,EACNA,EAAS7yF,GAIb8yF,GAAYxuN,KADN+tN,GAAe75M,EAAKq6M,GACH58N,GAChBqO,IACX,CACJ,CAEA,SAASwuN,GAAYrb,EAAKlqJ,EAAUwlK,EAAUxZ,GAC1C,IAAI4X,EAAe5jK,EAASgkK,cACxB/kF,EAAOolF,GAASrkK,EAASikK,OACzBroF,EAASyoF,GAASrkK,EAASkkK,SAE1Bha,EAAIyG,YAKT3E,EAA+B,MAAhBA,GAA8BA,EAEzCpwE,GACAk8E,GAAS5N,EAAKxpN,EAAIwpN,EAAK,SAAWtuE,EAAS4pF,GAE3CvmF,GACAq1E,EAAMpK,EAAK,OAAQxpN,EAAIwpN,EAAK,QAAUjrE,EAAOumF,GAE7C5B,GACA1Z,EAAIz1J,GAAGgwK,QAAQva,EAAIz1J,GAAGq7E,UAAY8zF,EAAe4B,GAEjDxZ,GACA/hH,EAAM+hH,aAAa9B,EAAKjrE,GAAQrD,GAExC,CA9FAkpF,GAAe/iO,GAAKuhO,GAAS/uN,UAC7BuwN,GAAeW,QA/Xf,WACI,OAAOX,GAAe3T,IAC1B,EA4dA,IAAIjxN,GAAMmlO,GAAY,EAAG,OACrBtlD,GAAWslD,IAAa,EAAG,YAE/B,SAAS3mH,GAASrwB,GACd,MAAwB,iBAAVA,GAAsBA,aAAiB/lE,MACzD,CAGA,SAASo9M,GAAcr3I,GACnB,OACIo7H,EAASp7H,IACTwpG,EAAOxpG,IACPqwB,GAASrwB,IACTorH,EAASprH,IAiDjB,SAA+BA,GAC3B,IAAIs3I,EAAYrgN,EAAQ+oE,GACpBu3I,GAAe,EAOnB,OANID,IACAC,EAGkB,IAFdv3I,EAAM1vF,QAAO,SAAUvF,GACnB,OAAQqgN,EAASrgN,IAASslH,GAASrwB,EACvC,IAAGntF,QAEJykO,GAAaC,CACxB,CA1DQC,CAAsBx3I,IAO9B,SAA6BA,GACzB,IA4BIhgF,EACAjC,EA7BA05N,EAAa/pK,EAASsyB,KAAWghI,EAAchhI,GAC/C03I,GAAe,EACf5vM,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,MAIJ6vM,EAAc7vM,EAAWj1B,OAE7B,IAAKmN,EAAI,EAAGA,EAAI23N,EAAa33N,GAAK,EAC9BjC,EAAW+pB,EAAW9nB,GACtB03N,EAAeA,GAAgB3W,EAAW/gI,EAAOjiF,GAGrD,OAAO05N,GAAcC,CACzB,CA7CQE,CAAoB53I,IANjB,MAOHA,CAGR,CAsPA,SAAS63I,GAAUp4N,EAAGC,GAClB,GAAID,EAAEinI,OAAShnI,EAAEgnI,OAGb,OAAQmxF,GAAUn4N,EAAGD,GAGzB,IAAIq4N,EAAyC,IAAvBp4N,EAAEgmI,OAASjmI,EAAEimI,SAAgBhmI,EAAEimI,QAAUlmI,EAAEkmI,SAE7DriF,EAAS7jD,EAAE+/I,QAAQ3tJ,IAAIimO,EAAgB,UAe3C,QAASA,GAXLp4N,EAAI4jD,EAAS,GAGH5jD,EAAI4jD,IAAWA,EAFf7jD,EAAE+/I,QAAQ3tJ,IAAIimO,EAAiB,EAAG,YAMlCp4N,EAAI4jD,IAFJ7jD,EAAE+/I,QAAQ3tJ,IAAIimO,EAAiB,EAAG,UAETx0K,MAIF,CACzC,CAkHA,SAAS89J,GAAOjsN,GACZ,IAAI4iO,EAEJ,YAAYzhO,IAARnB,EACOuT,KAAKy6M,QAAQqL,OAGC,OADrBuJ,EAAgBrJ,GAAUv5N,MAEtBuT,KAAKy6M,QAAU4U,GAEZrvN,KAEf,CA5HAkzF,EAAMo8H,cAAgB,uBACtBp8H,EAAMq8H,iBAAmB,yBA6HzB,IAAI3zF,GAAOg/E,EACP,mJACA,SAAUnuN,GACN,YAAYmB,IAARnB,EACOuT,KAAKi8M,aAELj8M,KAAK04M,OAAOjsN,EAE3B,IAGJ,SAASwvN,KACL,OAAOj8M,KAAKy6M,OAChB,CAEA,IAAI+U,GAAgB,IAChBC,GAAgB,GAAKD,GACrBE,GAAc,GAAKD,GACnBE,GAAmB,QAAwBD,GAG/C,SAASE,GAAMlqB,EAAUC,GACrB,OAASD,EAAWC,EAAWA,GAAWA,CAC9C,CAEA,SAASkqB,GAAiBjsO,EAAG8I,EAAGgkC,GAE5B,OAAI9sC,EAAI,KAAOA,GAAK,EAET,IAAI6kE,KAAK7kE,EAAI,IAAK8I,EAAGgkC,GAAKi/L,GAE1B,IAAIlnK,KAAK7kE,EAAG8I,EAAGgkC,GAAGqoG,SAEjC,CAEA,SAAS+2F,GAAelsO,EAAG8I,EAAGgkC,GAE1B,OAAI9sC,EAAI,KAAOA,GAAK,EAET6kE,KAAKsvE,IAAIn0I,EAAI,IAAK8I,EAAGgkC,GAAKi/L,GAE1BlnK,KAAKsvE,IAAIn0I,EAAG8I,EAAGgkC,EAE9B,CAkbA,SAASq/L,GAAa1hC,EAAUqqB,GAC5B,OAAOA,EAAOsX,cAAc3hC,EAChC,CAcA,SAAS4hC,KACL,IAII34N,EACA8yC,EALA8lL,EAAa,GACbC,EAAa,GACbC,EAAe,GACf9O,EAAc,GAGd+O,EAAOrwN,KAAKqwN,OAEhB,IAAK/4N,EAAI,EAAG8yC,EAAIimL,EAAKlmO,OAAQmN,EAAI8yC,IAAK9yC,EAClC64N,EAAWvmO,KAAKi1N,GAAYwR,EAAK/4N,GAAGlO,OACpC8mO,EAAWtmO,KAAKi1N,GAAYwR,EAAK/4N,GAAG25M,OACpCmf,EAAaxmO,KAAKi1N,GAAYwR,EAAK/4N,GAAGg5N,SAEtChP,EAAY13N,KAAKi1N,GAAYwR,EAAK/4N,GAAGlO,OACrCk4N,EAAY13N,KAAKi1N,GAAYwR,EAAK/4N,GAAG25M,OACrCqQ,EAAY13N,KAAKi1N,GAAYwR,EAAK/4N,GAAGg5N,SAGzCtwN,KAAKuwN,WAAa,IAAI3+J,OAAO,KAAO0vJ,EAAY9+N,KAAK,KAAO,IAAK,KACjEwd,KAAKwwN,eAAiB,IAAI5+J,OAAO,KAAOu+J,EAAW3tO,KAAK,KAAO,IAAK,KACpEwd,KAAKywN,eAAiB,IAAI7+J,OAAO,KAAOs+J,EAAW1tO,KAAK,KAAO,IAAK,KACpEwd,KAAK0wN,iBAAmB,IAAI9+J,OACxB,KAAOw+J,EAAa5tO,KAAK,KAAO,IAChC,IAER,CAYA,SAASmuO,GAAuBh3M,EAAOw5F,GACnC4oG,EAAe,EAAG,CAACpiM,EAAOA,EAAMxvB,QAAS,EAAGgpH,EAChD,CAiFA,SAASy9G,GAAqBt5I,EAAOmgI,EAAM2K,EAAS1K,EAAKC,GACrD,IAAIkZ,EACJ,OAAa,MAATv5I,EACOkrI,GAAWxiN,KAAM03M,EAAKC,GAAK36E,MAG9By6E,GADJoZ,EAAclO,GAAYrrI,EAAOogI,EAAKC,MAElCF,EAAOoZ,GAEJC,GAAW9yN,KAAKgC,KAAMs3E,EAAOmgI,EAAM2K,EAAS1K,EAAKC,GAEhE,CAEA,SAASmZ,GAAWnH,EAAUlS,EAAM2K,EAAS1K,EAAKC,GAC9C,IAAIoZ,EAAgB5O,GAAmBwH,EAAUlS,EAAM2K,EAAS1K,EAAKC,GACjE35E,EAAOgkF,GAAc+O,EAAc/zF,KAAM,EAAG+zF,EAAcxO,WAK9D,OAHAviN,KAAKg9H,KAAKgB,EAAKxF,kBACfx4H,KAAKi9H,MAAMe,EAAKvF,eAChBz4H,KAAKg+H,KAAKA,EAAKtF,cACR14H,IACX,CAzYA+7M,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,WAEpC2C,GAAc,IAAKqR,IACnBrR,GAAc,KAAMqR,IACpBrR,GAAc,MAAOqR,IACrBrR,GAAc,QAiOd,SAAsBrwB,EAAUqqB,GAC5B,OAAOA,EAAOsY,cAAc3iC,EAChC,IAlOAqwB,GAAc,SAoOd,SAAwBrwB,EAAUqqB,GAC9B,OAAOA,EAAOuY,gBAAgB5iC,EAClC,IApOA4wB,GACI,CAAC,IAAK,KAAM,MAAO,OAAQ,UAC3B,SAAU3nI,EAAO72E,EAAO+e,EAAQ7F,GAC5B,IAAI8/L,EAAMj6L,EAAOi7L,QAAQyW,UAAU55I,EAAO39D,EAAO6F,EAAOy6L,SACpDR,EACAZ,EAAgBr5L,GAAQi6L,IAAMA,EAE9BZ,EAAgBr5L,GAAQ25L,WAAa7hI,CAE7C,IAGJonI,GAAc,IAAKL,IACnBK,GAAc,KAAML,IACpBK,GAAc,MAAOL,IACrBK,GAAc,OAAQL,IACtBK,GAAc,MAsNd,SAA6BrwB,EAAUqqB,GACnC,OAAOA,EAAOyY,sBAAwB9S,EAC1C,IAtNAY,GAAc,CAAC,IAAK,KAAM,MAAO,QAASK,IAC1CL,GAAc,CAAC,OAAO,SAAU3nI,EAAO72E,EAAO+e,EAAQ7F,GAClD,IAAIivB,EACAppB,EAAOi7L,QAAQ0W,uBACfvoL,EAAQ0uC,EAAM1uC,MAAMppB,EAAOi7L,QAAQ0W,uBAGnC3xM,EAAOi7L,QAAQ2W,oBACf3wN,EAAM6+M,IAAQ9/L,EAAOi7L,QAAQ2W,oBAAoB95I,EAAO1uC,GAExDnoC,EAAM6+M,IAAQ9wM,SAAS8oE,EAAO,GAEtC,IA0OAykI,EAAe,EAAG,CAAC,KAAM,GAAI,GAAG,WAC5B,OAAO/7M,KAAK2pN,WAAa,GAC7B,IAEA5N,EAAe,EAAG,CAAC,KAAM,GAAI,GAAG,WAC5B,OAAO/7M,KAAKqxN,cAAgB,GAChC,IAMAV,GAAuB,OAAQ,YAC/BA,GAAuB,QAAS,YAChCA,GAAuB,OAAQ,eAC/BA,GAAuB,QAAS,eAIhCpU,EAAa,WAAY,MACzBA,EAAa,cAAe,MAI5BS,EAAgB,WAAY,GAC5BA,EAAgB,cAAe,GAI/B0B,GAAc,IAAKJ,IACnBI,GAAc,IAAKJ,IACnBI,GAAc,KAAMX,GAAWJ,GAC/Be,GAAc,KAAMX,GAAWJ,GAC/Be,GAAc,OAAQP,GAAWN,IACjCa,GAAc,OAAQP,GAAWN,IACjCa,GAAc,QAASN,GAAWN,IAClCY,GAAc,QAASN,GAAWN,IAElCqB,GACI,CAAC,OAAQ,QAAS,OAAQ,UAC1B,SAAU7nI,EAAOmgI,EAAMj4L,EAAQ7F,GAC3B89L,EAAK99L,EAAMgb,OAAO,EAAG,IAAMwoL,EAAM7lI,EACrC,IAGJ6nI,GAAkB,CAAC,KAAM,OAAO,SAAU7nI,EAAOmgI,EAAMj4L,EAAQ7F,GAC3D89L,EAAK99L,GAASu5E,EAAM0uH,kBAAkBtqI,EAC1C,IAqEAykI,EAAe,IAAK,EAAG,KAAM,WAI7BQ,EAAa,UAAW,KAIxBS,EAAgB,UAAW,GAI3B0B,GAAc,IAAKhB,GACnBuB,GAAc,KAAK,SAAU3nI,EAAO72E,GAChCA,EAAM8+M,IAA8B,GAApBpC,EAAM7lI,GAAS,EACnC,IAYAykI,EAAe,IAAK,CAAC,KAAM,GAAI,KAAM,QAIrCQ,EAAa,OAAQ,KAGrBS,EAAgB,OAAQ,GAIxB0B,GAAc,IAAKX,IACnBW,GAAc,KAAMX,GAAWJ,GAC/Be,GAAc,MAAM,SAAUrwB,EAAUqqB,GAEpC,OAAOrqB,EACDqqB,EAAO4Y,yBAA2B5Y,EAAO6Y,cACzC7Y,EAAO8Y,8BACjB,IAEAvS,GAAc,CAAC,IAAK,MAAOO,IAC3BP,GAAc,MAAM,SAAU3nI,EAAO72E,GACjCA,EAAM++M,IAAQrC,EAAM7lI,EAAM1uC,MAAMm1K,IAAW,GAC/C,IAIA,IAAI0T,GAAmBnU,EAAW,QAAQ,GAI1CvB,EAAe,MAAO,CAAC,OAAQ,GAAI,OAAQ,aAI3CQ,EAAa,YAAa,OAG1BS,EAAgB,YAAa,GAI7B0B,GAAc,MAAOR,IACrBQ,GAAc,OAAQd,GACtBqB,GAAc,CAAC,MAAO,SAAS,SAAU3nI,EAAO72E,EAAO+e,GACnDA,EAAO2qM,WAAahN,EAAM7lI,EAC9B,IAgBAykI,EAAe,IAAK,CAAC,KAAM,GAAI,EAAG,UAIlCQ,EAAa,SAAU,KAIvBS,EAAgB,SAAU,IAI1B0B,GAAc,IAAKX,IACnBW,GAAc,KAAMX,GAAWJ,GAC/BsB,GAAc,CAAC,IAAK,MAAOS,IAI3B,IAAIgS,GAAepU,EAAW,WAAW,GAIzCvB,EAAe,IAAK,CAAC,KAAM,GAAI,EAAG,UAIlCQ,EAAa,SAAU,KAIvBS,EAAgB,SAAU,IAI1B0B,GAAc,IAAKX,IACnBW,GAAc,KAAMX,GAAWJ,GAC/BsB,GAAc,CAAC,IAAK,MAAOU,IAI3B,IA8CIhmM,GAAOg4M,GA9CPC,GAAetU,EAAW,WAAW,GA+CzC,IA3CAvB,EAAe,IAAK,EAAG,GAAG,WACtB,SAAU/7M,KAAK+rN,cAAgB,IACnC,IAEAhQ,EAAe,EAAG,CAAC,KAAM,GAAI,GAAG,WAC5B,SAAU/7M,KAAK+rN,cAAgB,GACnC,IAEAhQ,EAAe,EAAG,CAAC,MAAO,GAAI,EAAG,eACjCA,EAAe,EAAG,CAAC,OAAQ,GAAI,GAAG,WAC9B,OAA4B,GAArB/7M,KAAK+rN,aAChB,IACAhQ,EAAe,EAAG,CAAC,QAAS,GAAI,GAAG,WAC/B,OAA4B,IAArB/7M,KAAK+rN,aAChB,IACAhQ,EAAe,EAAG,CAAC,SAAU,GAAI,GAAG,WAChC,OAA4B,IAArB/7M,KAAK+rN,aAChB,IACAhQ,EAAe,EAAG,CAAC,UAAW,GAAI,GAAG,WACjC,OAA4B,IAArB/7M,KAAK+rN,aAChB,IACAhQ,EAAe,EAAG,CAAC,WAAY,GAAI,GAAG,WAClC,OAA4B,IAArB/7M,KAAK+rN,aAChB,IACAhQ,EAAe,EAAG,CAAC,YAAa,GAAI,GAAG,WACnC,OAA4B,IAArB/7M,KAAK+rN,aAChB,IAIAxP,EAAa,cAAe,MAI5BS,EAAgB,cAAe,IAI/B0B,GAAc,IAAKR,GAAWR,GAC9BgB,GAAc,KAAMR,GAAWP,GAC/Be,GAAc,MAAOR,GAAWN,GAG3BjkM,GAAQ,OAAQA,GAAMxvB,QAAU,EAAGwvB,IAAS,IAC7C+kM,GAAc/kM,GAAO0kM,IAGzB,SAASwT,GAAQv6I,EAAO72E,GACpBA,EAAMm/M,IAAezC,EAAuB,KAAhB,KAAO7lI,GACvC,CAEA,IAAK39D,GAAQ,IAAKA,GAAMxvB,QAAU,EAAGwvB,IAAS,IAC1CslM,GAActlM,GAAOk4M,IAGzBF,GAAoBrU,EAAW,gBAAgB,GAI/CvB,EAAe,IAAK,EAAG,EAAG,YAC1BA,EAAe,KAAM,EAAG,EAAG,YAY3B,IAAIz/L,GAAQo+L,EAAOl9M,UAgHnB,SAASs0N,GAAmBhgK,GACxB,OAAOA,CACX,CAhHAx1C,GAAMnzB,IAAMA,GACZmzB,GAAMo6L,SAhoCN,SAAoBt0G,EAAM2vH,GAEG,IAArB7nO,UAAUC,SACLD,UAAU,GAGJykO,GAAczkO,UAAU,KAC/Bk4G,EAAOl4G,UAAU,GACjB6nO,OAAUnkO,GA/CtB,SAAwB0pF,GACpB,IAUIhgF,EAVAy3N,EAAa/pK,EAASsyB,KAAWghI,EAAchhI,GAC/C03I,GAAe,EACf5vM,EAAa,CACT,UACA,UACA,UACA,WACA,WACA,YAKR,IAAK9nB,EAAI,EAAGA,EAAI8nB,EAAWj1B,OAAQmN,GAAK,EAEpC03N,EAAeA,GAAgB3W,EAAW/gI,EAD/Bl4D,EAAW9nB,IAI1B,OAAOy3N,GAAcC,CACzB,CA4BmBgD,CAAe9nO,UAAU,MAChC6nO,EAAU7nO,UAAU,GACpBk4G,OAAOx0G,IAPPw0G,OAAOx0G,EACPmkO,OAAUnkO,IAWlB,IAAI86D,EAAM05C,GAAQ4nH,KACdiI,EAAMxE,GAAgB/kK,EAAK1oD,MAAMkyN,QAAQ,OACzC91F,EAASlpC,EAAMi/H,eAAenyN,KAAMiyN,IAAQ,WAC5ClrL,EACIgrL,IACCttF,EAAWstF,EAAQ31F,IACd21F,EAAQ31F,GAAQp+H,KAAKgC,KAAM0oD,GAC3BqpK,EAAQ31F,IAEtB,OAAOp8H,KAAKo8H,OACRr1F,GAAU/mC,KAAKi8M,aAAavF,SAASt6E,EAAQp8H,KAAMgqN,GAAYthK,IAEvE,EAqmCApsC,GAAMw6H,MAnmCN,WACI,OAAO,IAAI4jE,EAAO16M,KACtB,EAkmCAsc,GAAM60I,KA3hCN,SAAc75E,EAAOolI,EAAO0V,GACxB,IAAIptF,EAAMqtF,EAAWtrL,EAErB,IAAK/mC,KAAK45M,UACN,OAAOQ,IAKX,KAFAp1E,EAAOyoF,GAAgBn2I,EAAOt3E,OAEpB45M,UACN,OAAOQ,IAOX,OAJAiY,EAAoD,KAAvCrtF,EAAKouE,YAAcpzM,KAAKozM,aAErCsJ,EAAQD,EAAeC,IAGnB,IAAK,OACD31K,EAASooL,GAAUnvN,KAAMglI,GAAQ,GACjC,MACJ,IAAK,QACDj+F,EAASooL,GAAUnvN,KAAMglI,GACzB,MACJ,IAAK,UACDj+F,EAASooL,GAAUnvN,KAAMglI,GAAQ,EACjC,MACJ,IAAK,SACDj+F,GAAU/mC,KAAOglI,GAAQ,IACzB,MACJ,IAAK,SACDj+F,GAAU/mC,KAAOglI,GAAQ,IACzB,MACJ,IAAK,OACDj+F,GAAU/mC,KAAOglI,GAAQ,KACzB,MACJ,IAAK,MACDj+F,GAAU/mC,KAAOglI,EAAOqtF,GAAa,MACrC,MACJ,IAAK,OACDtrL,GAAU/mC,KAAOglI,EAAOqtF,GAAa,OACrC,MACJ,QACItrL,EAAS/mC,KAAOglI,EAGxB,OAAOotF,EAAUrrL,EAASm2K,EAASn2K,EACvC,EA6+BAzqB,GAAMg2M,MAtuBN,SAAe5V,GACX,IAAIt6G,EAAMmwH,EAEV,QAAc3kO,KADd8uN,EAAQD,EAAeC,KACc,gBAAVA,IAA4B18M,KAAK45M,UACxD,OAAO55M,KAKX,OAFAuyN,EAAcvyN,KAAKm1M,OAAS2a,GAAiBD,GAErCnT,GACJ,IAAK,OACDt6G,EAAOmwH,EAAYvyN,KAAKg9H,OAAS,EAAG,EAAG,GAAK,EAC5C,MACJ,IAAK,UACD56B,EACImwH,EACIvyN,KAAKg9H,OACLh9H,KAAKi9H,QAAWj9H,KAAKi9H,QAAU,EAAK,EACpC,GACA,EACR,MACJ,IAAK,QACD76B,EAAOmwH,EAAYvyN,KAAKg9H,OAAQh9H,KAAKi9H,QAAU,EAAG,GAAK,EACvD,MACJ,IAAK,OACD76B,EACImwH,EACIvyN,KAAKg9H,OACLh9H,KAAKi9H,QACLj9H,KAAKg+H,OAASh+H,KAAKoiN,UAAY,GAC/B,EACR,MACJ,IAAK,UACDhgH,EACImwH,EACIvyN,KAAKg9H,OACLh9H,KAAKi9H,QACLj9H,KAAKg+H,QAAUh+H,KAAKwyN,aAAe,GAAK,GACxC,EACR,MACJ,IAAK,MACL,IAAK,OACDpwH,EAAOmwH,EAAYvyN,KAAKg9H,OAAQh9H,KAAKi9H,QAASj9H,KAAKg+H,OAAS,GAAK,EACjE,MACJ,IAAK,OACD57B,EAAOpiG,KAAK09C,GAAGq7E,UACf32B,GACIstH,GACAE,GACIxtH,GAAQpiG,KAAKm1M,OAAS,EAAIn1M,KAAKozM,YAAcqc,IAC7CC,IAEJ,EACJ,MACJ,IAAK,SACDttH,EAAOpiG,KAAK09C,GAAGq7E,UACf32B,GAAQqtH,GAAgBG,GAAMxtH,EAAMqtH,IAAiB,EACrD,MACJ,IAAK,SACDrtH,EAAOpiG,KAAK09C,GAAGq7E,UACf32B,GAAQotH,GAAgBI,GAAMxtH,EAAMotH,IAAiB,EAM7D,OAFAxvN,KAAK09C,GAAGgwK,QAAQtrH,GAChBlP,EAAM+hH,aAAaj1M,MAAM,GAClBA,IACX,EAoqBAsc,GAAM8/G,OAh5BN,SAAgBq2F,GACPA,IACDA,EAAczyN,KAAK4tN,QACb16H,EAAMq8H,iBACNr8H,EAAMo8H,eAEhB,IAAIvoL,EAASm1K,EAAal8M,KAAMyyN,GAChC,OAAOzyN,KAAKi8M,aAAayW,WAAW3rL,EACxC,EAy4BAzqB,GAAMwT,KAv4BN,SAAcsyE,EAAMszG,GAChB,OACI11M,KAAK45M,YACHlH,EAAStwG,IAASA,EAAKw3G,WAAcoQ,GAAY5nH,GAAMw3G,WAElDmU,GAAe,CAAEr2F,GAAI13H,KAAM8vB,KAAMsyE,IACnCs2G,OAAO14M,KAAK04M,UACZia,UAAUjd,GAER11M,KAAKi8M,aAAaI,aAEjC,EA63BA//L,GAAMs2M,QA33BN,SAAiBld,GACb,OAAO11M,KAAK8vB,KAAKk6L,KAAetU,EACpC,EA03BAp5L,GAAMo7G,GAx3BN,SAAYt1B,EAAMszG,GACd,OACI11M,KAAK45M,YACHlH,EAAStwG,IAASA,EAAKw3G,WAAcoQ,GAAY5nH,GAAMw3G,WAElDmU,GAAe,CAAEj+L,KAAM9vB,KAAM03H,GAAIt1B,IACnCs2G,OAAO14M,KAAK04M,UACZia,UAAUjd,GAER11M,KAAKi8M,aAAaI,aAEjC,EA82BA//L,GAAMu2M,MA52BN,SAAend,GACX,OAAO11M,KAAK03H,GAAGsyF,KAAetU,EAClC,EA22BAp5L,GAAM3yB,IA9jIN,SAAmB+yN,GAEf,OAAIj4E,EAAWzkI,KADf08M,EAAQD,EAAeC,KAEZ18M,KAAK08M,KAET18M,IACX,EAyjIAsc,GAAMw2M,UArnBN,WACI,OAAOja,EAAgB74M,MAAM/a,QACjC,EAonBAq3B,GAAM+xM,QAzmCN,SAAiB/2I,EAAOolI,GACpB,IAAIqW,EAAargB,EAASp7H,GAASA,EAAQ0yI,GAAY1yI,GACvD,SAAMt3E,KAAK45M,YAAamZ,EAAWnZ,aAIrB,iBADd8C,EAAQD,EAAeC,IAAU,eAEtB18M,KAAK+4H,UAAYg6F,EAAWh6F,UAE5Bg6F,EAAWh6F,UAAY/4H,KAAK82I,QAAQo7E,QAAQxV,GAAO3jF,UAElE,EA+lCAz8G,GAAM4xM,SA7lCN,SAAkB52I,EAAOolI,GACrB,IAAIqW,EAAargB,EAASp7H,GAASA,EAAQ0yI,GAAY1yI,GACvD,SAAMt3E,KAAK45M,YAAamZ,EAAWnZ,aAIrB,iBADd8C,EAAQD,EAAeC,IAAU,eAEtB18M,KAAK+4H,UAAYg6F,EAAWh6F,UAE5B/4H,KAAK82I,QAAQw7E,MAAM5V,GAAO3jF,UAAYg6F,EAAWh6F,UAEhE,EAmlCAz8G,GAAM02M,UAjlCN,SAAmBljM,EAAM4nG,EAAIglF,EAAOuW,GAChC,IAAIC,EAAYxgB,EAAS5iL,GAAQA,EAAOk6L,GAAYl6L,GAChDqjM,EAAUzgB,EAASh7E,GAAMA,EAAKsyF,GAAYtyF,GAC9C,SAAM13H,KAAK45M,WAAasZ,EAAUtZ,WAAauZ,EAAQvZ,aAK/B,OAFxBqZ,EAAcA,GAAe,MAEZ,GACPjzN,KAAKquN,QAAQ6E,EAAWxW,IACvB18M,KAAKkuN,SAASgF,EAAWxW,MACZ,MAAnBuW,EAAY,GACPjzN,KAAKkuN,SAASiF,EAASzW,IACtB18M,KAAKquN,QAAQ8E,EAASzW,GAErC,EAmkCApgM,GAAM82M,OAjkCN,SAAgB97I,EAAOolI,GACnB,IACI2W,EADAN,EAAargB,EAASp7H,GAASA,EAAQ0yI,GAAY1yI,GAEvD,SAAMt3E,KAAK45M,YAAamZ,EAAWnZ,aAIrB,iBADd8C,EAAQD,EAAeC,IAAU,eAEtB18M,KAAK+4H,YAAcg6F,EAAWh6F,WAErCs6F,EAAUN,EAAWh6F,UAEjB/4H,KAAK82I,QAAQo7E,QAAQxV,GAAO3jF,WAAas6F,GACzCA,GAAWrzN,KAAK82I,QAAQw7E,MAAM5V,GAAO3jF,WAGjD,EAkjCAz8G,GAAMg3M,cAhjCN,SAAuBh8I,EAAOolI,GAC1B,OAAO18M,KAAKozN,OAAO97I,EAAOolI,IAAU18M,KAAKquN,QAAQ/2I,EAAOolI,EAC5D,EA+iCApgM,GAAMi3M,eA7iCN,SAAwBj8I,EAAOolI,GAC3B,OAAO18M,KAAKozN,OAAO97I,EAAOolI,IAAU18M,KAAKkuN,SAAS52I,EAAOolI,EAC7D,EA4iCApgM,GAAMs9L,QApoBN,WACI,OAAOA,EAAQ55M,KACnB,EAmoBAsc,GAAMs/G,KAAOA,GACbt/G,GAAMo8L,OAASA,GACfp8L,GAAM2/L,WAAaA,GACnB3/L,GAAM16B,IAAMwqO,GACZ9vM,GAAMz6B,IAAMsqO,GACZ7vM,GAAMk3M,aAtoBN,WACI,OAAO58K,EAAO,CAAC,EAAGiiK,EAAgB74M,MACtC,EAqoBAsc,GAAMzyB,IArkIN,SAAmB6yN,EAAO1qN,GACtB,GAAqB,iBAAV0qN,EAAoB,CAE3B,IACIplN,EADAm8N,EAzFZ,SAA6BC,GACzB,IACI/kH,EADA+tG,EAAQ,GAEZ,IAAK/tG,KAAK+kH,EACFrb,EAAWqb,EAAU/kH,IACrB+tG,EAAM9yN,KAAK,CAAEq0K,KAAMtvD,EAAGzsF,SAAU66L,EAAWpuG,KAMnD,OAHA+tG,EAAMzzN,MAAK,SAAU8N,EAAGC,GACpB,OAAOD,EAAEmrB,SAAWlrB,EAAEkrB,QAC1B,IACOw6L,CACX,CA6E0BiX,CADlBjX,EAAQC,EAAqBD,IAGzBkX,EAAiBH,EAAYtpO,OACjC,IAAKmN,EAAI,EAAGA,EAAIs8N,EAAgBt8N,IAC5B0I,KAAKyzN,EAAYn8N,GAAG2mK,MAAMy+C,EAAM+W,EAAYn8N,GAAG2mK,MAEvD,MAEI,GAAIx5B,EAAWzkI,KADf08M,EAAQD,EAAeC,KAEnB,OAAO18M,KAAK08M,GAAO1qN,GAG3B,OAAOgO,IACX,EAsjIAsc,GAAM41M,QA3zBN,SAAiBxV,GACb,IAAIt6G,EAAMmwH,EAEV,QAAc3kO,KADd8uN,EAAQD,EAAeC,KACc,gBAAVA,IAA4B18M,KAAK45M,UACxD,OAAO55M,KAKX,OAFAuyN,EAAcvyN,KAAKm1M,OAAS2a,GAAiBD,GAErCnT,GACJ,IAAK,OACDt6G,EAAOmwH,EAAYvyN,KAAKg9H,OAAQ,EAAG,GACnC,MACJ,IAAK,UACD56B,EAAOmwH,EACHvyN,KAAKg9H,OACLh9H,KAAKi9H,QAAWj9H,KAAKi9H,QAAU,EAC/B,GAEJ,MACJ,IAAK,QACD76B,EAAOmwH,EAAYvyN,KAAKg9H,OAAQh9H,KAAKi9H,QAAS,GAC9C,MACJ,IAAK,OACD76B,EAAOmwH,EACHvyN,KAAKg9H,OACLh9H,KAAKi9H,QACLj9H,KAAKg+H,OAASh+H,KAAKoiN,WAEvB,MACJ,IAAK,UACDhgH,EAAOmwH,EACHvyN,KAAKg9H,OACLh9H,KAAKi9H,QACLj9H,KAAKg+H,QAAUh+H,KAAKwyN,aAAe,IAEvC,MACJ,IAAK,MACL,IAAK,OACDpwH,EAAOmwH,EAAYvyN,KAAKg9H,OAAQh9H,KAAKi9H,QAASj9H,KAAKg+H,QACnD,MACJ,IAAK,OACD57B,EAAOpiG,KAAK09C,GAAGq7E,UACf32B,GAAQwtH,GACJxtH,GAAQpiG,KAAKm1M,OAAS,EAAIn1M,KAAKozM,YAAcqc,IAC7CC,IAEJ,MACJ,IAAK,SACDttH,EAAOpiG,KAAK09C,GAAGq7E,UACf32B,GAAQwtH,GAAMxtH,EAAMqtH,IACpB,MACJ,IAAK,SACDrtH,EAAOpiG,KAAK09C,GAAGq7E,UACf32B,GAAQwtH,GAAMxtH,EAAMotH,IAM5B,OAFAxvN,KAAK09C,GAAGgwK,QAAQtrH,GAChBlP,EAAM+hH,aAAaj1M,MAAM,GAClBA,IACX,EA+vBAsc,GAAM0sJ,SAAWA,GACjB1sJ,GAAM0rH,QA7qBN,WACI,IAAIt7I,EAAIsT,KACR,MAAO,CACHtT,EAAEswI,OACFtwI,EAAEuwI,QACFvwI,EAAEsxI,OACFtxI,EAAEi+N,OACFj+N,EAAEo/N,SACFp/N,EAAEs1J,SACFt1J,EAAEq/N,cAEV,EAmqBAzvM,GAAMgyH,SAjqBN,WACI,IAAI5hJ,EAAIsT,KACR,MAAO,CACHwsN,MAAO9/N,EAAEswI,OACT6H,OAAQn4I,EAAEuwI,QACVe,KAAMtxI,EAAEsxI,OACRi6E,MAAOvrN,EAAEurN,QACTC,QAASxrN,EAAEwrN,UACX0M,QAASl4N,EAAEk4N,UACXiI,aAAcngO,EAAEmgO,eAExB,EAupBAvwM,GAAMu3M,OAnrBN,WACI,OAAO,IAAIprK,KAAKzoD,KAAK+4H,UACzB,EAkrBAz8G,GAAMw3M,YAp+BN,SAAqBC,GACjB,IAAK/zN,KAAK45M,UACN,OAAO,KAEX,IAAIp6E,GAAqB,IAAfu0F,EACNrnO,EAAI8yI,EAAMx/H,KAAK82I,QAAQtX,MAAQx/H,KACnC,OAAItT,EAAEswI,OAAS,GAAKtwI,EAAEswI,OAAS,KACpBk/E,EACHxvN,EACA8yI,EACM,iCACA,gCAGViF,EAAWh8E,KAAKjrD,UAAUs2N,aAEtBt0F,EACOx/H,KAAK6zN,SAASC,cAEd,IAAIrrK,KAAKzoD,KAAK+4H,UAA+B,GAAnB/4H,KAAKozM,YAAmB,KACpD0gB,cACAzjO,QAAQ,IAAK6rN,EAAaxvN,EAAG,MAGnCwvN,EACHxvN,EACA8yI,EAAM,+BAAiC,6BAE/C,EAy8BAljH,GAAM6mD,QAj8BN,WACI,IAAKnjE,KAAK45M,UACN,MAAO,qBAAuB55M,KAAKhI,GAAK,OAE5C,IAEI0a,EACAsqH,EAEA3O,EALAt/G,EAAO,SACPoiM,EAAO,GAcX,OATKnxM,KAAKqyK,YACNtjK,EAA4B,IAArB/O,KAAKozM,YAAoB,aAAe,mBAC/CjC,EAAO,KAEXz+L,EAAS,IAAM3D,EAAO,MACtBiuH,EAAO,GAAKh9H,KAAKg9H,QAAUh9H,KAAKg9H,QAAU,KAAO,OAAS,SAC/C,wBACX3O,EAAS8iF,EAAO,OAETnxM,KAAKo8H,OAAO1pH,EAASsqH,EAHjB,wBAGmC3O,EAClD,EA86BsB,oBAAX3wH,QAAwC,MAAdA,OAAOmN,MACxCyR,GAAM5e,OAAOmN,IAAI,+BAAiC,WAC9C,MAAO,UAAY7K,KAAKo8H,SAAW,GACvC,GAEJ9/G,GAAM8tG,OA7pBN,WAEI,OAAOpqH,KAAK45M,UAAY55M,KAAK8zN,cAAgB,IACjD,EA2pBAx3M,GAAMp7B,SAh/BN,WACI,OAAO8e,KAAK82I,QAAQ4hE,OAAO,MAAMt8E,OAAO,mCAC5C,EA++BA9/G,GAAM03M,KAjsBN,WACI,OAAOryO,KAAK6yC,MAAMx0B,KAAK+4H,UAAY,IACvC,EAgsBAz8G,GAAMy8G,QAtsBN,WACI,OAAO/4H,KAAK09C,GAAGq7E,UAAkC,KAArB/4H,KAAK9F,SAAW,EAChD,EAqsBAoiB,GAAM23M,aAhpBN,WACI,MAAO,CACH38I,MAAOt3E,KAAKhI,GACZokI,OAAQp8H,KAAKwyM,GACbkG,OAAQ14M,KAAKy6M,QACbyR,MAAOlsN,KAAKm1M,OACZwD,OAAQ34M,KAAKi6M,QAErB,EAyoBA39L,GAAM43M,QAvgBN,WACI,IAAI58N,EACA8yC,EACAl2B,EACAm8M,EAAOrwN,KAAKi8M,aAAaoU,OAC7B,IAAK/4N,EAAI,EAAG8yC,EAAIimL,EAAKlmO,OAAQmN,EAAI8yC,IAAK9yC,EAAG,CAIrC,GAFA4c,EAAMlU,KAAK82I,QAAQo7E,QAAQ,OAAOn5F,UAE9Bs3F,EAAK/4N,GAAG68N,OAASjgN,GAAOA,GAAOm8M,EAAK/4N,GAAGigK,MACvC,OAAO84D,EAAK/4N,GAAGlO,KAEnB,GAAIinO,EAAK/4N,GAAGigK,OAASrjJ,GAAOA,GAAOm8M,EAAK/4N,GAAG68N,MACvC,OAAO9D,EAAK/4N,GAAGlO,IAEvB,CAEA,MAAO,EACX,EAsfAkzB,GAAM83M,UApfN,WACI,IAAI98N,EACA8yC,EACAl2B,EACAm8M,EAAOrwN,KAAKi8M,aAAaoU,OAC7B,IAAK/4N,EAAI,EAAG8yC,EAAIimL,EAAKlmO,OAAQmN,EAAI8yC,IAAK9yC,EAAG,CAIrC,GAFA4c,EAAMlU,KAAK82I,QAAQo7E,QAAQ,OAAOn5F,UAE9Bs3F,EAAK/4N,GAAG68N,OAASjgN,GAAOA,GAAOm8M,EAAK/4N,GAAGigK,MACvC,OAAO84D,EAAK/4N,GAAGg5N,OAEnB,GAAID,EAAK/4N,GAAGigK,OAASrjJ,GAAOA,GAAOm8M,EAAK/4N,GAAG68N,MACvC,OAAO9D,EAAK/4N,GAAGg5N,MAEvB,CAEA,MAAO,EACX,EAmeAh0M,GAAM+3M,QAjeN,WACI,IAAI/8N,EACA8yC,EACAl2B,EACAm8M,EAAOrwN,KAAKi8M,aAAaoU,OAC7B,IAAK/4N,EAAI,EAAG8yC,EAAIimL,EAAKlmO,OAAQmN,EAAI8yC,IAAK9yC,EAAG,CAIrC,GAFA4c,EAAMlU,KAAK82I,QAAQo7E,QAAQ,OAAOn5F,UAE9Bs3F,EAAK/4N,GAAG68N,OAASjgN,GAAOA,GAAOm8M,EAAK/4N,GAAGigK,MACvC,OAAO84D,EAAK/4N,GAAG25M,KAEnB,GAAIof,EAAK/4N,GAAGigK,OAASrjJ,GAAOA,GAAOm8M,EAAK/4N,GAAG68N,MACvC,OAAO9D,EAAK/4N,GAAG25M,IAEvB,CAEA,MAAO,EACX,EAgdA30L,GAAMg4M,QA9cN,WACI,IAAIh9N,EACA8yC,EACAw7F,EACA1xH,EACAm8M,EAAOrwN,KAAKi8M,aAAaoU,OAC7B,IAAK/4N,EAAI,EAAG8yC,EAAIimL,EAAKlmO,OAAQmN,EAAI8yC,IAAK9yC,EAMlC,GALAsuI,EAAMyqF,EAAK/4N,GAAG68N,OAAS9D,EAAK/4N,GAAGigK,MAAQ,GAAM,EAG7CrjJ,EAAMlU,KAAK82I,QAAQo7E,QAAQ,OAAOn5F,UAG7Bs3F,EAAK/4N,GAAG68N,OAASjgN,GAAOA,GAAOm8M,EAAK/4N,GAAGigK,OACvC84D,EAAK/4N,GAAGigK,OAASrjJ,GAAOA,GAAOm8M,EAAK/4N,GAAG68N,MAExC,OACKn0N,KAAKg9H,OAAS9pC,EAAMm9H,EAAK/4N,GAAG68N,OAAOn3F,QAAU4I,EAC9CyqF,EAAK/4N,GAAGxD,OAKpB,OAAOkM,KAAKg9H,MAChB,EAubA1gH,GAAM0gH,KAAO6kF,GACbvlM,GAAM2gM,WAjlHN,WACI,OAAOA,EAAWj9M,KAAKg9H,OAC3B,EAglHA1gH,GAAMqtM,SAjUN,SAAwBryI,GACpB,OAAOs5I,GAAqB5yN,KACxBgC,KACAs3E,EACAt3E,KAAKy3M,OACLz3M,KAAKoiN,UACLpiN,KAAKi8M,aAAagO,MAAMvS,IACxB13M,KAAKi8M,aAAagO,MAAMtS,IAEhC,EAyTAr7L,GAAM+0M,YAvTN,SAA2B/5I,GACvB,OAAOs5I,GAAqB5yN,KACxBgC,KACAs3E,EACAt3E,KAAK4sN,UACL5sN,KAAKwyN,aACL,EACA,EAER,EA+SAl2M,GAAMowM,QAAUpwM,GAAMmwM,SA/OtB,SAAuBn1I,GACnB,OAAgB,MAATA,EACD31F,KAAKkzC,MAAM70B,KAAKi9H,QAAU,GAAK,GAC/Bj9H,KAAKi9H,MAAoB,GAAb3lD,EAAQ,GAAUt3E,KAAKi9H,QAAU,EACvD,EA4OA3gH,GAAM2gH,MAAQgkF,GACd3kM,GAAMkhM,YAxuHN,WACI,OAAOA,GAAYx9M,KAAKg9H,OAAQh9H,KAAKi9H,QACzC,EAuuHA3gH,GAAMm7L,KAAOn7L,GAAMqwM,MA37GnB,SAAoBr1I,GAChB,IAAImgI,EAAOz3M,KAAKi8M,aAAaxE,KAAKz3M,MAClC,OAAgB,MAATs3E,EAAgBmgI,EAAOz3M,KAAK7W,IAAqB,GAAhBmuF,EAAQmgI,GAAW,IAC/D,EAy7GAn7L,GAAMswM,QAAUtwM,GAAMi4M,SAv7GtB,SAAuBj9I,GACnB,IAAImgI,EAAO+K,GAAWxiN,KAAM,EAAG,GAAGy3M,KAClC,OAAgB,MAATngI,EAAgBmgI,EAAOz3M,KAAK7W,IAAqB,GAAhBmuF,EAAQmgI,GAAW,IAC/D,EAq7GAn7L,GAAMqmM,YA1SN,WACI,IAAI6R,EAAWx0N,KAAKi8M,aAAagO,MACjC,OAAOtH,GAAY3iN,KAAKg9H,OAAQw3F,EAAS9c,IAAK8c,EAAS7c,IAC3D,EAwSAr7L,GAAMm4M,gBAtSN,WACI,IAAID,EAAWx0N,KAAKi8M,aAAagO,MACjC,OAAOtH,GAAY3iN,KAAK2pN,WAAY6K,EAAS9c,IAAK8c,EAAS7c,IAC/D,EAoSAr7L,GAAMo4M,eApTN,WACI,OAAO/R,GAAY3iN,KAAKg9H,OAAQ,EAAG,EACvC,EAmTA1gH,GAAMq4M,sBAjTN,WACI,OAAOhS,GAAY3iN,KAAKqxN,cAAe,EAAG,EAC9C,EAgTA/0M,GAAM0hH,KAAOyzF,GACbn1M,GAAM4gH,IAAM5gH,GAAM4rH,KAzqGlB,SAAyB5wD,GACrB,IAAKt3E,KAAK45M,UACN,OAAgB,MAATtiI,EAAgBt3E,KAAOo6M,IAElC,IAAIl9E,EAAMl9H,KAAKm1M,OAASn1M,KAAK09C,GAAG+kF,YAAcziI,KAAK09C,GAAGirK,SACtD,OAAa,MAATrxI,GACAA,EAxNR,SAAsBA,EAAOohI,GACzB,MAAqB,iBAAVphI,EACAA,EAGNljD,MAAMkjD,GAKU,iBADrBA,EAAQohI,EAAOuK,cAAc3rI,IAElBA,EAGJ,KARI9oE,SAAS8oE,EAAO,GAS/B,CAyMgBs9I,CAAat9I,EAAOt3E,KAAKi8M,cAC1Bj8M,KAAK7W,IAAImuF,EAAQ4lD,EAAK,MAEtBA,CAEf,EA+pGA5gH,GAAM8lM,QA7pGN,SAA+B9qI,GAC3B,IAAKt3E,KAAK45M,UACN,OAAgB,MAATtiI,EAAgBt3E,KAAOo6M,IAElC,IAAIgI,GAAWpiN,KAAKk9H,MAAQ,EAAIl9H,KAAKi8M,aAAagO,MAAMvS,KAAO,EAC/D,OAAgB,MAATpgI,EAAgB8qI,EAAUpiN,KAAK7W,IAAImuF,EAAQ8qI,EAAS,IAC/D,EAwpGA9lM,GAAMk2M,WAtpGN,SAA4Bl7I,GACxB,IAAKt3E,KAAK45M,UACN,OAAgB,MAATtiI,EAAgBt3E,KAAOo6M,IAOlC,GAAa,MAAT9iI,EAAe,CACf,IAAI8qI,EAhOZ,SAAyB9qI,EAAOohI,GAC5B,MAAqB,iBAAVphI,EACAohI,EAAOuK,cAAc3rI,GAAS,GAAK,EAEvCljD,MAAMkjD,GAAS,KAAOA,CACjC,CA2NsBu9I,CAAgBv9I,EAAOt3E,KAAKi8M,cAC1C,OAAOj8M,KAAKk9H,IAAIl9H,KAAKk9H,MAAQ,EAAIklF,EAAUA,EAAU,EACzD,CACI,OAAOpiN,KAAKk9H,OAAS,CAE7B,EAwoGA5gH,GAAMimM,UAhMN,SAAyBjrI,GACrB,IAAIirI,EACA5gO,KAAKG,OACAke,KAAK82I,QAAQo7E,QAAQ,OAASlyN,KAAK82I,QAAQo7E,QAAQ,SAAW,OAC/D,EACR,OAAgB,MAAT56I,EAAgBirI,EAAYviN,KAAK7W,IAAImuF,EAAQirI,EAAW,IACnE,EA2LAjmM,GAAMquM,KAAOruM,GAAM27L,MAAQiN,GAC3B5oM,GAAMwvM,OAASxvM,GAAM47L,QAAUwZ,GAC/Bp1M,GAAM0lI,OAAS1lI,GAAMsoM,QAAUgN,GAC/Bt1M,GAAMyvM,YAAczvM,GAAMuwM,aAAe8E,GACzCr1M,GAAM82L,UA9mDN,SAAsB97H,EAAOw9I,EAAeC,GACxC,IACIC,EADAlhO,EAASkM,KAAK9F,SAAW,EAE7B,IAAK8F,KAAK45M,UACN,OAAgB,MAATtiI,EAAgBt3E,KAAOo6M,IAElC,GAAa,MAAT9iI,EAAe,CACf,GAAqB,iBAAVA,GAEP,GAAc,QADdA,EAAQi2I,GAAiB/O,GAAkBlnI,IAEvC,OAAOt3E,UAEJre,KAAKsE,IAAIqxF,GAAS,KAAOy9I,IAChCz9I,GAAgB,IAwBpB,OAtBKt3E,KAAKm1M,QAAU2f,IAChBE,EAAcrH,GAAc3tN,OAEhCA,KAAK9F,QAAUo9E,EACft3E,KAAKm1M,QAAS,EACK,MAAf6f,GACAh1N,KAAK7W,IAAI6rO,EAAa,KAEtBlhO,IAAWwjF,KACNw9I,GAAiB90N,KAAKi1N,kBACvBzG,GACIxuN,KACA+tN,GAAez2I,EAAQxjF,EAAQ,KAC/B,GACA,GAEIkM,KAAKi1N,oBACbj1N,KAAKi1N,mBAAoB,EACzB/hI,EAAM+hH,aAAaj1M,MAAM,GACzBA,KAAKi1N,kBAAoB,OAG1Bj1N,IACX,CACI,OAAOA,KAAKm1M,OAASrhN,EAAS65N,GAAc3tN,KAEpD,EAskDAsc,GAAMkjH,IAtjDN,SAAwBs1F,GACpB,OAAO90N,KAAKozM,UAAU,EAAG0hB,EAC7B,EAqjDAx4M,GAAM0uD,MAnjDN,SAA0B8pJ,GAStB,OARI90N,KAAKm1M,SACLn1M,KAAKozM,UAAU,EAAG0hB,GAClB90N,KAAKm1M,QAAS,EAEV2f,GACA90N,KAAKgpK,SAAS2kD,GAAc3tN,MAAO,MAGpCA,IACX,EA0iDAsc,GAAM44M,UAxiDN,WACI,GAAiB,MAAbl1N,KAAKyyM,KACLzyM,KAAKozM,UAAUpzM,KAAKyyM,MAAM,GAAO,QAC9B,GAAuB,iBAAZzyM,KAAKhI,GAAiB,CACpC,IAAIm9N,EAAQ5H,GAAiBhP,GAAav+M,KAAKhI,IAClC,MAATm9N,EACAn1N,KAAKozM,UAAU+hB,GAEfn1N,KAAKozM,UAAU,GAAG,EAE1B,CACA,OAAOpzM,IACX,EA6hDAsc,GAAM84M,qBA3hDN,SAA8B99I,GAC1B,QAAKt3E,KAAK45M,YAGVtiI,EAAQA,EAAQ0yI,GAAY1yI,GAAO87H,YAAc,GAEzCpzM,KAAKozM,YAAc97H,GAAS,IAAO,EAC/C,EAqhDAh7D,GAAM+4M,MAnhDN,WACI,OACIr1N,KAAKozM,YAAcpzM,KAAK82I,QAAQ7Z,MAAM,GAAGm2E,aACzCpzM,KAAKozM,YAAcpzM,KAAK82I,QAAQ7Z,MAAM,GAAGm2E,WAEjD,EA+gDA92L,GAAM+1J,QAv/CN,WACI,QAAOryK,KAAK45M,YAAa55M,KAAKm1M,MAClC,EAs/CA74L,GAAMg5M,YAp/CN,WACI,QAAOt1N,KAAK45M,WAAY55M,KAAKm1M,MACjC,EAm/CA74L,GAAMsxM,MAAQA,GACdtxM,GAAM4vM,MAAQ0B,GACdtxM,GAAMg5L,SAzFN,WACI,OAAOt1M,KAAKm1M,OAAS,MAAQ,EACjC,EAwFA74L,GAAM+4L,SAtFN,WACI,OAAOr1M,KAAKm1M,OAAS,6BAA+B,EACxD,EAqFA74L,GAAMg9G,MAAQshF,EACV,kDACA6W,IAEJn1M,GAAMuoH,OAAS+1E,EACX,mDACAqG,IAEJ3kM,GAAMkwM,MAAQ5R,EACV,iDACAiH,IAEJvlM,GAAM60L,KAAOyJ,EACT,4GA5lDJ,SAAoBtjI,EAAOw9I,GACvB,OAAa,MAATx9I,GACqB,iBAAVA,IACPA,GAASA,GAGbt3E,KAAKozM,UAAU97H,EAAOw9I,GAEf90N,OAECA,KAAKozM,WAErB,IAmlDA92L,GAAMi5M,aAAe3a,EACjB,2GApiDJ,WACI,IAAKjQ,EAAY3qM,KAAKw1N,eAClB,OAAOx1N,KAAKw1N,cAGhB,IACIlmC,EADAr7J,EAAI,CAAC,EAcT,OAXAqmL,EAAWrmL,EAAGj0B,OACdi0B,EAAI+2L,GAAc/2L,IAEZoH,IACFi0J,EAAQr7J,EAAEkhL,OAASsD,EAAUxkL,EAAEoH,IAAM2uL,GAAY/1L,EAAEoH,IACnDr7B,KAAKw1N,cACDx1N,KAAK45M,WAtOjB,SAAuB6b,EAAQx9L,EAAQy9L,GACnC,IAGIp+N,EAHA3I,EAAMhN,KAAKE,IAAI4zO,EAAOtrO,OAAQ8tC,EAAO9tC,QACrCwrO,EAAah0O,KAAKsE,IAAIwvO,EAAOtrO,OAAS8tC,EAAO9tC,QAC7CyrO,EAAQ,EAEZ,IAAKt+N,EAAI,EAAGA,EAAI3I,EAAK2I,KAEZo+N,GAAeD,EAAOn+N,KAAO2gC,EAAO3gC,KACnCo+N,GAAevY,EAAMsY,EAAOn+N,MAAQ6lN,EAAMllL,EAAO3gC,MAEnDs+N,IAGR,OAAOA,EAAQD,CACnB,CAwN8BE,CAAc5hM,EAAEoH,GAAIi0J,EAAMtnD,WAAa,GAE7DhoI,KAAKw1N,eAAgB,EAGlBx1N,KAAKw1N,aAChB,IAgiDA,IAAIM,GAAUza,EAAO79M,UAuCrB,SAASu4N,GAAM35F,EAAQ/uI,EAAO2oO,EAAO5lF,GACjC,IAAIsoE,EAASsN,KACTxmF,EAAMi5E,IAAY5uN,IAAIumJ,EAAQ/iJ,GAClC,OAAOqrN,EAAOsd,GAAOx2F,EAAKpD,EAC9B,CAEA,SAAS65F,GAAe75F,EAAQ/uI,EAAO2oO,GAQnC,GAPItzB,EAAStmE,KACT/uI,EAAQ+uI,EACRA,OAASxuI,GAGbwuI,EAASA,GAAU,GAEN,MAAT/uI,EACA,OAAO0oO,GAAM35F,EAAQ/uI,EAAO2oO,EAAO,SAGvC,IAAI1+N,EACAowI,EAAM,GACV,IAAKpwI,EAAI,EAAGA,EAAI,GAAIA,IAChBowI,EAAIpwI,GAAKy+N,GAAM35F,EAAQ9kI,EAAG0+N,EAAO,SAErC,OAAOtuF,CACX,CAUA,SAASwuF,GAAiBC,EAAc/5F,EAAQ/uI,EAAO2oO,GACvB,kBAAjBG,GACHzzB,EAAStmE,KACT/uI,EAAQ+uI,EACRA,OAASxuI,GAGbwuI,EAASA,GAAU,KAGnB/uI,EADA+uI,EAAS+5F,EAETA,GAAe,EAEXzzB,EAAStmE,KACT/uI,EAAQ+uI,EACRA,OAASxuI,GAGbwuI,EAASA,GAAU,IAGvB,IAEI9kI,EAFAohN,EAASsN,KACT97M,EAAQisN,EAAezd,EAAOuR,MAAMvS,IAAM,EAE1ChwE,EAAM,GAEV,GAAa,MAATr6I,EACA,OAAO0oO,GAAM35F,GAAS/uI,EAAQ6c,GAAS,EAAG8rN,EAAO,OAGrD,IAAK1+N,EAAI,EAAGA,EAAI,EAAGA,IACfowI,EAAIpwI,GAAKy+N,GAAM35F,GAAS9kI,EAAI4S,GAAS,EAAG8rN,EAAO,OAEnD,OAAOtuF,CACX,CAzGAouF,GAAQpf,SA79IR,SAAkBjqN,EAAK0mN,EAAKzqJ,GACxB,IAAI3hB,EAAS/mC,KAAKo2N,UAAU3pO,IAAQuT,KAAKo2N,UAAoB,SAC7D,OAAO3xF,EAAW19F,GAAUA,EAAO/oC,KAAKm1M,EAAKzqJ,GAAO3hB,CACxD,EA29IA+uL,GAAQ3f,eAj2IR,SAAwB1pN,GACpB,IAAI2vI,EAASp8H,KAAKq2N,gBAAgB5pO,GAC9B6pO,EAAct2N,KAAKq2N,gBAAgB5pO,EAAIqS,eAE3C,OAAIs9H,IAAWk6F,EACJl6F,GAGXp8H,KAAKq2N,gBAAgB5pO,GAAO6pO,EACvB1tL,MAAM+yK,GACNv5N,KAAI,SAAUm0O,GACX,MACY,SAARA,GACQ,OAARA,GACQ,OAARA,GACQ,SAARA,EAEOA,EAAIp+N,MAAM,GAEdo+N,CACX,IACC/zO,KAAK,IAEHwd,KAAKq2N,gBAAgB5pO,GAChC,EA00IAqpO,GAAQzZ,YAt0IR,WACI,OAAOr8M,KAAKw2N,YAChB,EAq0IAV,GAAQte,QAh0IR,SAAiBnlE,GACb,OAAOryI,KAAKy2N,SAASpmO,QAAQ,KAAMgiJ,EACvC,EA+zIAyjF,GAAQ7K,SAAW6G,GACnBgE,GAAQpD,WAAaZ,GACrBgE,GAAQ7e,aA5yIR,SAAsB5kE,EAAQqjE,EAAe5jJ,EAAQ6jJ,GACjD,IAAI5uK,EAAS/mC,KAAK02N,cAAc5kK,GAChC,OAAO2yE,EAAW19F,GACZA,EAAOsrG,EAAQqjE,EAAe5jJ,EAAQ6jJ,GACtC5uK,EAAO12C,QAAQ,MAAOgiJ,EAChC,EAwyIAyjF,GAAQa,WAtyIR,SAAoBxlE,EAAMpqH,GACtB,IAAIq1F,EAASp8H,KAAK02N,cAAcvlE,EAAO,EAAI,SAAW,QACtD,OAAO1sB,EAAWrI,GAAUA,EAAOr1F,GAAUq1F,EAAO/rI,QAAQ,MAAO02C,EACvE,EAoyIA+uL,GAAQjsO,IAzjJR,SAAa21B,GACT,IAAI4N,EAAM91B,EACV,IAAKA,KAAKkoB,EACF64L,EAAW74L,EAAQloB,KAEfmtI,EADJr3G,EAAO5N,EAAOloB,IAEV0I,KAAK1I,GAAK81B,EAEVptB,KAAK,IAAM1I,GAAK81B,GAI5BptB,KAAKwtC,QAAUhuB,EAIfxf,KAAKwxN,+BAAiC,IAAI5/J,QACrC5xD,KAAKsxN,wBAAwBzkM,QAAU7sB,KAAKuxN,cAAc1kM,QACvD,IACA,UAAUA,OAEtB,EAqiJAipM,GAAQzF,KAxqBR,SAAoB3jO,EAAG0vI,GACnB,IAAI9kI,EACA8yC,EACA4zF,EACAqyF,EAAOrwN,KAAK42N,OAAS5Q,GAAU,MAAM4Q,MACzC,IAAKt/N,EAAI,EAAG8yC,EAAIimL,EAAKlmO,OAAQmN,EAAI8yC,IAAK9yC,EASlC,OAPS,iBADM+4N,EAAK/4N,GAAG68N,QAGfn2F,EAAO9qC,EAAMm9H,EAAK/4N,GAAG68N,OAAOjC,QAAQ,OACpC7B,EAAK/4N,GAAG68N,MAAQn2F,EAAKjF,kBAIds3F,EAAK/4N,GAAGigK,OACnB,IAAK,YACD84D,EAAK/4N,GAAGigK,MAAQ,IAChB,MACJ,IAAK,SAEDv5B,EAAO9qC,EAAMm9H,EAAK/4N,GAAGigK,OAAO26D,QAAQ,OAAOn5F,UAC3Cs3F,EAAK/4N,GAAGigK,MAAQv5B,EAAKjF,UAIjC,OAAOs3F,CACX,EA+oBAyF,GAAQ5E,UA7oBR,SAAyBgD,EAAS93F,EAAQu8E,GACtC,IAAIrhN,EACA8yC,EAEAhhD,EACA6nN,EACAqf,EAHAD,EAAOrwN,KAAKqwN,OAMhB,IAFA6D,EAAUA,EAAQp1N,cAEbxH,EAAI,EAAG8yC,EAAIimL,EAAKlmO,OAAQmN,EAAI8yC,IAAK9yC,EAKlC,GAJAlO,EAAOinO,EAAK/4N,GAAGlO,KAAK0V,cACpBmyM,EAAOof,EAAK/4N,GAAG25M,KAAKnyM,cACpBwxN,EAASD,EAAK/4N,GAAGg5N,OAAOxxN,cAEpB65M,EACA,OAAQv8E,GACJ,IAAK,IACL,IAAK,KACL,IAAK,MACD,GAAI60E,IAASijB,EACT,OAAO7D,EAAK/4N,GAEhB,MAEJ,IAAK,OACD,GAAIlO,IAAS8qO,EACT,OAAO7D,EAAK/4N,GAEhB,MAEJ,IAAK,QACD,GAAIg5N,IAAW4D,EACX,OAAO7D,EAAK/4N,QAIrB,GAAI,CAAClO,EAAM6nN,EAAMqf,GAAQ/pO,QAAQ2tO,IAAY,EAChD,OAAO7D,EAAK/4N,EAGxB,EAsmBAw+N,GAAQ/K,gBApmBR,SAA+BtR,EAAKz8E,GAChC,IAAI4I,EAAM6zE,EAAI0a,OAAS1a,EAAIliD,MAAQ,GAAM,EACzC,YAAa3pK,IAATovI,EACO9pC,EAAMumH,EAAI0a,OAAOn3F,OAEjB9pC,EAAMumH,EAAI0a,OAAOn3F,QAAUA,EAAOy8E,EAAI3lN,QAAU8xI,CAE/D,EA8lBAkwF,GAAQ9F,cA/fR,SAAuB3hC,GAInB,OAHKgqB,EAAWr4M,KAAM,mBAClBiwN,GAAiBjyN,KAAKgC,MAEnBquL,EAAWruL,KAAKywN,eAAiBzwN,KAAKuwN,UACjD,EA2fAuF,GAAQ9E,cAvgBR,SAAuB3iC,GAInB,OAHKgqB,EAAWr4M,KAAM,mBAClBiwN,GAAiBjyN,KAAKgC,MAEnBquL,EAAWruL,KAAKwwN,eAAiBxwN,KAAKuwN,UACjD,EAmgBAuF,GAAQ7E,gBA1fR,SAAyB5iC,GAIrB,OAHKgqB,EAAWr4M,KAAM,qBAClBiwN,GAAiBjyN,KAAKgC,MAEnBquL,EAAWruL,KAAK0wN,iBAAmB1wN,KAAKuwN,UACnD,EAufAuF,GAAQjxF,OA59HR,SAAsBn4I,EAAG0vI,GACrB,OAAK1vI,EAKE6hB,EAAQvO,KAAKmtN,SACdntN,KAAKmtN,QAAQzgO,EAAEuwI,SACfj9H,KAAKmtN,SACAntN,KAAKmtN,QAAQ0J,UAAYxW,IAAkB19N,KAAKy5I,GAC3C,SACA,cACR1vI,EAAEuwI,SAVC1uH,EAAQvO,KAAKmtN,SACdntN,KAAKmtN,QACLntN,KAAKmtN,QAAoB,UASvC,EAg9HA2I,GAAQ3zF,YA98HR,SAA2Bz1I,EAAG0vI,GAC1B,OAAK1vI,EAKE6hB,EAAQvO,KAAK82N,cACd92N,KAAK82N,aAAapqO,EAAEuwI,SACpBj9H,KAAK82N,aACDzW,GAAiB19N,KAAKy5I,GAAU,SAAW,cAC7C1vI,EAAEuwI,SARC1uH,EAAQvO,KAAK82N,cACd92N,KAAK82N,aACL92N,KAAK82N,aAAyB,UAO5C,EAo8HAhB,GAAQ5V,YAn5HR,SAA2BO,EAAWrkF,EAAQu8E,GAC1C,IAAIrhN,EAAG67M,EAAKlhJ,EAEZ,GAAIjyD,KAAK+2N,kBACL,OAAOvW,GAAkBxiN,KAAKgC,KAAMygN,EAAWrkF,EAAQu8E,GAY3D,IATK34M,KAAK4gN,eACN5gN,KAAK4gN,aAAe,GACpB5gN,KAAK6gN,iBAAmB,GACxB7gN,KAAK8gN,kBAAoB,IAMxBxpN,EAAI,EAAGA,EAAI,GAAIA,IAAK,CAmBrB,GAjBA67M,EAAMsF,EAAU,CAAC,IAAMnhN,IACnBqhN,IAAW34M,KAAK6gN,iBAAiBvpN,KACjC0I,KAAK6gN,iBAAiBvpN,GAAK,IAAIs6D,OAC3B,IAAM5xD,KAAK6kI,OAAOsuE,EAAK,IAAI9iN,QAAQ,IAAK,IAAM,IAC9C,KAEJ2P,KAAK8gN,kBAAkBxpN,GAAK,IAAIs6D,OAC5B,IAAM5xD,KAAKmiI,YAAYgxE,EAAK,IAAI9iN,QAAQ,IAAK,IAAM,IACnD,MAGHsoN,GAAW34M,KAAK4gN,aAAatpN,KAC9B26D,EACI,IAAMjyD,KAAK6kI,OAAOsuE,EAAK,IAAM,KAAOnzM,KAAKmiI,YAAYgxE,EAAK,IAC9DnzM,KAAK4gN,aAAatpN,GAAK,IAAIs6D,OAAOK,EAAM5hE,QAAQ,IAAK,IAAK,MAI1DsoN,GACW,SAAXv8E,GACAp8H,KAAK6gN,iBAAiBvpN,GAAG3U,KAAK89N,GAE9B,OAAOnpN,EACJ,GACHqhN,GACW,QAAXv8E,GACAp8H,KAAK8gN,kBAAkBxpN,GAAG3U,KAAK89N,GAE/B,OAAOnpN,EACJ,IAAKqhN,GAAU34M,KAAK4gN,aAAatpN,GAAG3U,KAAK89N,GAC5C,OAAOnpN,CAEf,CACJ,EAi2HAw+N,GAAQ7V,YAlyHR,SAAqB5xB,GACjB,OAAIruL,KAAK+2N,mBACA1e,EAAWr4M,KAAM,iBAClBkhN,GAAmBljN,KAAKgC,MAExBquL,EACOruL,KAAKyhN,mBAELzhN,KAAKuhN,eAGXlJ,EAAWr4M,KAAM,kBAClBA,KAAKuhN,aAAehB,IAEjBvgN,KAAKyhN,oBAAsBpzB,EAC5BruL,KAAKyhN,mBACLzhN,KAAKuhN,aAEnB,EAixHAuU,GAAQ9V,iBAvzHR,SAA0B3xB,GACtB,OAAIruL,KAAK+2N,mBACA1e,EAAWr4M,KAAM,iBAClBkhN,GAAmBljN,KAAKgC,MAExBquL,EACOruL,KAAK0hN,wBAEL1hN,KAAKwhN,oBAGXnJ,EAAWr4M,KAAM,uBAClBA,KAAKwhN,kBAAoBlB,IAEtBtgN,KAAK0hN,yBAA2BrzB,EACjCruL,KAAK0hN,wBACL1hN,KAAKwhN,kBAEnB,EAsyHAsU,GAAQre,KAjiHR,SAAoBtE,GAChB,OAAOqP,GAAWrP,EAAKnzM,KAAKiqN,MAAMvS,IAAK13M,KAAKiqN,MAAMtS,KAAKF,IAC3D,EAgiHAqe,GAAQkB,eArhHR,WACI,OAAOh3N,KAAKiqN,MAAMtS,GACtB,EAohHAme,GAAQmB,eA1hHR,WACI,OAAOj3N,KAAKiqN,MAAMvS,GACtB,EA0hHAoe,GAAQ/f,SAt6GR,SAAwBrpN,EAAG0vI,GACvB,IAAI25E,EAAWxnM,EAAQvO,KAAKk3N,WACtBl3N,KAAKk3N,UACLl3N,KAAKk3N,UACDxqO,IAAW,IAANA,GAAcsT,KAAKk3N,UAAUL,SAASl0O,KAAKy5I,GAC1C,SACA,cAEhB,OAAa,IAAN1vI,EACDm2N,GAAc9M,EAAU/1M,KAAKiqN,MAAMvS,KACnChrN,EACAqpN,EAASrpN,EAAEwwI,OACX64E,CACV,EA05GA+f,GAAQ7f,YAh5GR,SAA2BvpN,GACvB,OAAa,IAANA,EACDm2N,GAAc7iN,KAAKm3N,aAAcn3N,KAAKiqN,MAAMvS,KAC5ChrN,EACAsT,KAAKm3N,aAAazqO,EAAEwwI,OACpBl9H,KAAKm3N,YACf,EA24GArB,GAAQ9f,cAz5GR,SAA6BtpN,GACzB,OAAa,IAANA,EACDm2N,GAAc7iN,KAAKo3N,eAAgBp3N,KAAKiqN,MAAMvS,KAC9ChrN,EACAsT,KAAKo3N,eAAe1qO,EAAEwwI,OACtBl9H,KAAKo3N,cACf,EAo5GAtB,GAAQ7S,cAj0GR,SAA6BQ,EAAarnF,EAAQu8E,GAC9C,IAAIrhN,EAAG67M,EAAKlhJ,EAEZ,GAAIjyD,KAAKq3N,oBACL,OAAO7T,GAAoBxlN,KAAKgC,KAAMyjN,EAAarnF,EAAQu8E,GAU/D,IAPK34M,KAAK0jN,iBACN1jN,KAAK0jN,eAAiB,GACtB1jN,KAAK4jN,kBAAoB,GACzB5jN,KAAK2jN,oBAAsB,GAC3B3jN,KAAKs3N,mBAAqB,IAGzBhgO,EAAI,EAAGA,EAAI,EAAGA,IAAK,CA6BpB,GA1BA67M,EAAMsF,EAAU,CAAC,IAAM,IAAIv7E,IAAI5lI,GAC3BqhN,IAAW34M,KAAKs3N,mBAAmBhgO,KACnC0I,KAAKs3N,mBAAmBhgO,GAAK,IAAIs6D,OAC7B,IAAM5xD,KAAK+1M,SAAS5C,EAAK,IAAI9iN,QAAQ,IAAK,QAAU,IACpD,KAEJ2P,KAAK2jN,oBAAoBrsN,GAAK,IAAIs6D,OAC9B,IAAM5xD,KAAKg2M,cAAc7C,EAAK,IAAI9iN,QAAQ,IAAK,QAAU,IACzD,KAEJ2P,KAAK4jN,kBAAkBtsN,GAAK,IAAIs6D,OAC5B,IAAM5xD,KAAKi2M,YAAY9C,EAAK,IAAI9iN,QAAQ,IAAK,QAAU,IACvD,MAGH2P,KAAK0jN,eAAepsN,KACrB26D,EACI,IACAjyD,KAAK+1M,SAAS5C,EAAK,IACnB,KACAnzM,KAAKg2M,cAAc7C,EAAK,IACxB,KACAnzM,KAAKi2M,YAAY9C,EAAK,IAC1BnzM,KAAK0jN,eAAepsN,GAAK,IAAIs6D,OAAOK,EAAM5hE,QAAQ,IAAK,IAAK,MAI5DsoN,GACW,SAAXv8E,GACAp8H,KAAKs3N,mBAAmBhgO,GAAG3U,KAAK8gO,GAEhC,OAAOnsN,EACJ,GACHqhN,GACW,QAAXv8E,GACAp8H,KAAK2jN,oBAAoBrsN,GAAG3U,KAAK8gO,GAEjC,OAAOnsN,EACJ,GACHqhN,GACW,OAAXv8E,GACAp8H,KAAK4jN,kBAAkBtsN,GAAG3U,KAAK8gO,GAE/B,OAAOnsN,EACJ,IAAKqhN,GAAU34M,KAAK0jN,eAAepsN,GAAG3U,KAAK8gO,GAC9C,OAAOnsN,CAEf,CACJ,EAkwGAw+N,GAAQ9S,cAxtGR,SAAuB30B,GACnB,OAAIruL,KAAKq3N,qBACAhf,EAAWr4M,KAAM,mBAClB6jN,GAAqB7lN,KAAKgC,MAE1BquL,EACOruL,KAAKqkN,qBAELrkN,KAAKkkN,iBAGX7L,EAAWr4M,KAAM,oBAClBA,KAAKkkN,eAAiBb,IAEnBrjN,KAAKqkN,sBAAwBh2B,EAC9BruL,KAAKqkN,qBACLrkN,KAAKkkN,eAEnB,EAusGA4R,GAAQ/S,mBArsGR,SAA4B10B,GACxB,OAAIruL,KAAKq3N,qBACAhf,EAAWr4M,KAAM,mBAClB6jN,GAAqB7lN,KAAKgC,MAE1BquL,EACOruL,KAAKskN,0BAELtkN,KAAKmkN,sBAGX9L,EAAWr4M,KAAM,yBAClBA,KAAKmkN,oBAAsBb,IAExBtjN,KAAKskN,2BAA6Bj2B,EACnCruL,KAAKskN,0BACLtkN,KAAKmkN,oBAEnB,EAorGA2R,GAAQhT,iBAlrGR,SAA0Bz0B,GACtB,OAAIruL,KAAKq3N,qBACAhf,EAAWr4M,KAAM,mBAClB6jN,GAAqB7lN,KAAKgC,MAE1BquL,EACOruL,KAAKukN,wBAELvkN,KAAKokN,oBAGX/L,EAAWr4M,KAAM,uBAClBA,KAAKokN,kBAAoBb,IAEtBvjN,KAAKukN,yBAA2Bl2B,EACjCruL,KAAKukN,wBACLvkN,KAAKokN,kBAEnB,EAkqGA0R,GAAQ/d,KAl/FR,SAAoBzgI,GAGhB,MAAgD,OAAxCA,EAAQ,IAAI7yF,cAAcma,OAAO,EAC7C,EA++FAk3N,GAAQ9d,SAt+FR,SAAwBC,EAAOC,EAASC,GACpC,OAAIF,EAAQ,GACDE,EAAU,KAAO,KAEjBA,EAAU,KAAO,IAEhC,EA4jGA4N,GAAmB,KAAM,CACrBsK,KAAM,CACF,CACI8D,MAAO,aACP58D,MAAO,IACPzjK,OAAQ,EACR1K,KAAM,cACNknO,OAAQ,KACRrf,KAAM,MAEV,CACIkjB,MAAO,aACP58D,OAAO,IACPzjK,OAAQ,EACR1K,KAAM,gBACNknO,OAAQ,KACRrf,KAAM,OAGdsG,uBAAwB,uBACxBC,QAAS,SAAUnlE,GACf,IAAIr7I,EAAIq7I,EAAS,GAWjB,OAAOA,GATgC,IAA/B8qE,EAAO9qE,EAAS,IAAO,IACjB,KACM,IAANr7I,EACA,KACM,IAANA,EACA,KACM,IAANA,EACA,KACA,KAElB,IAKJk8F,EAAM0oC,KAAOg/E,EACT,wDACAmL,IAEJ7yH,EAAMqkI,SAAW3c,EACb,gEACAoL,IAGJ,IAAIwR,GAAU71O,KAAKsE,IAmBnB,SAASwxO,GAAcxuK,EAAUquB,EAAOtlF,EAAOL,GAC3C,IAAI29L,EAAQy+B,GAAez2I,EAAOtlF,GAMlC,OAJAi3D,EAASgkK,eAAiBt7N,EAAY29L,EAAM29B,cAC5ChkK,EAASikK,OAASv7N,EAAY29L,EAAM49B,MACpCjkK,EAASkkK,SAAWx7N,EAAY29L,EAAM69B,QAE/BlkK,EAASmkK,SACpB,CAYA,SAASsK,GAAQrlF,GACb,OAAIA,EAAS,EACF1wJ,KAAK6yC,MAAM69G,GAEX1wJ,KAAKkzC,KAAKw9G,EAEzB,CAyDA,SAASslF,GAAazvF,GAGlB,OAAe,KAAPA,EAAe,MAC3B,CAEA,SAAS0vF,GAAa/yF,GAElB,OAAiB,OAATA,EAAmB,IAC/B,CA2DA,SAASgzF,GAAO76L,GACZ,OAAO,WACH,OAAOh9B,KAAKy+B,GAAGzB,EACnB,CACJ,CAEA,IAAI86L,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,KAWrB,SAASU,GAAWnvO,GAChB,OAAO,WACH,OAAO4W,KAAK45M,UAAY55M,KAAK20H,MAAMvrI,GAAQgxN,GAC/C,CACJ,CAEA,IAAIyS,GAAe0L,GAAW,gBAC1B3T,GAAU2T,GAAW,WACrBrgB,GAAUqgB,GAAW,WACrBtgB,GAAQsgB,GAAW,SACnBrwF,GAAOqwF,GAAW,QAClB1zF,GAAS0zF,GAAW,UACpB/L,GAAQ+L,GAAW,SAMvB,IAAIz2O,GAAQH,KAAKG,MACb02O,GAAa,CACTphB,GAAI,GACJ1yM,EAAG,GACHhY,EAAG,GACHkpN,EAAG,GACHllL,EAAG,GACHi4G,EAAG,KACHc,EAAG,IAIX,SAASgvF,GAAkB3mK,EAAQugF,EAAQqjE,EAAeC,EAAU+C,GAChE,OAAOA,EAAOzB,aAAa5kE,GAAU,IAAKqjE,EAAe5jJ,EAAQ6jJ,EACrE,CAmGA,IAAI+iB,GAAQ/2O,KAAKsE,IAEjB,SAAS8pN,GAAKtsN,GACV,OAAQA,EAAI,IAAMA,EAAI,KAAOA,CACjC,CAEA,SAASk1O,KAQL,IAAK34N,KAAK45M,UACN,OAAO55M,KAAKi8M,aAAaI,cAG7B,IAGInE,EACAD,EACAuU,EACA9nN,EAEAk0N,EACAC,EACAC,EACAC,EAXAnU,EAAU8T,GAAM14N,KAAKitN,eAAiB,IACtC/kF,EAAOwwF,GAAM14N,KAAKktN,OAClBroF,EAAS6zF,GAAM14N,KAAKmtN,SAKpB6L,EAAQh5N,KAAK+3N,YAMjB,OAAKiB,GAOL9gB,EAAUgF,EAAS0H,EAAU,IAC7B3M,EAAQiF,EAAShF,EAAU,IAC3B0M,GAAW,GACX1M,GAAW,GAGXsU,EAAQtP,EAASr4E,EAAS,IAC1BA,GAAU,GAGVngI,EAAIkgN,EAAUA,EAAQtuK,QAAQ,GAAGjmD,QAAQ,SAAU,IAAM,GAEzDuoO,EAAYI,EAAQ,EAAI,IAAM,GAC9BH,EAAS9oB,GAAK/vM,KAAKmtN,WAAapd,GAAKipB,GAAS,IAAM,GACpDF,EAAW/oB,GAAK/vM,KAAKktN,SAAWnd,GAAKipB,GAAS,IAAM,GACpDD,EAAUhpB,GAAK/vM,KAAKitN,iBAAmBld,GAAKipB,GAAS,IAAM,GAGvDJ,EACA,KACCpM,EAAQqM,EAASrM,EAAQ,IAAM,KAC/B3nF,EAASg0F,EAASh0F,EAAS,IAAM,KACjCqD,EAAO4wF,EAAW5wF,EAAO,IAAM,KAC/B+vE,GAASC,GAAW0M,EAAU,IAAM,KACpC3M,EAAQ8gB,EAAU9gB,EAAQ,IAAM,KAChCC,EAAU6gB,EAAU7gB,EAAU,IAAM,KACpC0M,EAAUmU,EAAUr0N,EAAI,IAAM,KA9BxB,KAgCf,CAEA,IAAIu0N,GAAU1M,GAAS/uN,UAwGvB,OAtGAy7N,GAAQrf,QAh4ER,WACI,OAAO55M,KAAK65M,QAChB,EA+3EAof,GAAQhzO,IA3YR,WACI,IAAIsG,EAAOyT,KAAK20H,MAahB,OAXA30H,KAAKitN,cAAgBuK,GAAQx3N,KAAKitN,eAClCjtN,KAAKktN,MAAQsK,GAAQx3N,KAAKktN,OAC1BltN,KAAKmtN,QAAUqK,GAAQx3N,KAAKmtN,SAE5B5gO,EAAKsgO,aAAe2K,GAAQjrO,EAAKsgO,cACjCtgO,EAAKq4N,QAAU4S,GAAQjrO,EAAKq4N,SAC5Br4N,EAAK2rN,QAAUsf,GAAQjrO,EAAK2rN,SAC5B3rN,EAAK0rN,MAAQuf,GAAQjrO,EAAK0rN,OAC1B1rN,EAAKs4I,OAAS2yF,GAAQjrO,EAAKs4I,QAC3Bt4I,EAAKigO,MAAQgL,GAAQjrO,EAAKigO,OAEnBxsN,IACX,EA6XAi5N,GAAQ9vO,IAhXR,SAAemuF,EAAOtlF,GAClB,OAAOylO,GAAcz3N,KAAMs3E,EAAOtlF,EAAO,EAC7C,EA+WAinO,GAAQjwD,SA5WR,SAAoB1xF,EAAOtlF,GACvB,OAAOylO,GAAcz3N,KAAMs3E,EAAOtlF,GAAQ,EAC9C,EA2WAinO,GAAQx6L,GA/RR,SAAYi+K,GACR,IAAK18M,KAAK45M,UACN,OAAOQ,IAEX,IAAIlyE,EACArD,EACAgoF,EAAe7sN,KAAKitN,cAIxB,GAAc,WAFdvQ,EAAQD,EAAeC,KAEY,YAAVA,GAAiC,SAAVA,EAG5C,OAFAx0E,EAAOloI,KAAKktN,MAAQL,EAAe,MACnChoF,EAAS7kI,KAAKmtN,QAAUwK,GAAazvF,GAC7Bw0E,GACJ,IAAK,QACD,OAAO73E,EACX,IAAK,UACD,OAAOA,EAAS,EACpB,IAAK,OACD,OAAOA,EAAS,QAKxB,OADAqD,EAAOloI,KAAKktN,MAAQvrO,KAAKG,MAAM81O,GAAa53N,KAAKmtN,UACzCzQ,GACJ,IAAK,OACD,OAAOx0E,EAAO,EAAI2kF,EAAe,OACrC,IAAK,MACD,OAAO3kF,EAAO2kF,EAAe,MACjC,IAAK,OACD,OAAc,GAAP3kF,EAAY2kF,EAAe,KACtC,IAAK,SACD,OAAc,KAAP3kF,EAAc2kF,EAAe,IACxC,IAAK,SACD,OAAc,MAAP3kF,EAAe2kF,EAAe,IAEzC,IAAK,cACD,OAAOlrO,KAAK6yC,MAAa,MAAP0zG,GAAgB2kF,EACtC,QACI,MAAM,IAAI7hN,MAAM,gBAAkB0xM,GAGlD,EAsPAuc,GAAQnB,eAAiBA,GACzBmB,GAAQlB,UAAYA,GACpBkB,GAAQjB,UAAYA,GACpBiB,GAAQhB,QAAUA,GAClBgB,GAAQf,OAASA,GACjBe,GAAQd,QAAUA,GAClBc,GAAQb,SAAWA,GACnBa,GAAQZ,WAAaA,GACrBY,GAAQX,QAAUA,GAClBW,GAAQlgG,QA5PR,WACI,OAAK/4H,KAAK45M,UAIN55M,KAAKitN,cACQ,MAAbjtN,KAAKktN,MACJltN,KAAKmtN,QAAU,GAAM,OACK,QAA3BhQ,EAAMn9M,KAAKmtN,QAAU,IANd/S,GAQf,EAmPA6e,GAAQ7L,QA5WR,WACI,IAIIxI,EACA1M,EACAD,EACAuU,EACA0M,EARArM,EAAe7sN,KAAKitN,cACpB/kF,EAAOloI,KAAKktN,MACZroF,EAAS7kI,KAAKmtN,QACd5gO,EAAOyT,KAAK20H,MAgDhB,OArCSk4F,GAAgB,GAAK3kF,GAAQ,GAAKrD,GAAU,GAC5CgoF,GAAgB,GAAK3kF,GAAQ,GAAKrD,GAAU,IAGjDgoF,GAAuD,MAAvC6K,GAAQE,GAAa/yF,GAAUqD,GAC/CA,EAAO,EACPrD,EAAS,GAKbt4I,EAAKsgO,aAAeA,EAAe,IAEnCjI,EAAU1H,EAAS2P,EAAe,KAClCtgO,EAAKq4N,QAAUA,EAAU,GAEzB1M,EAAUgF,EAAS0H,EAAU,IAC7Br4N,EAAK2rN,QAAUA,EAAU,GAEzBD,EAAQiF,EAAShF,EAAU,IAC3B3rN,EAAK0rN,MAAQA,EAAQ,GAErB/vE,GAAQg1E,EAASjF,EAAQ,IAIzBpzE,GADAq0F,EAAiBhc,EAASya,GAAazvF,IAEvCA,GAAQwvF,GAAQE,GAAasB,IAG7B1M,EAAQtP,EAASr4E,EAAS,IAC1BA,GAAU,GAEVt4I,EAAK27I,KAAOA,EACZ37I,EAAKs4I,OAASA,EACdt4I,EAAKigO,MAAQA,EAENxsN,IACX,EAwTAi5N,GAAQniF,MAlOR,WACI,OAAOi3E,GAAe/tN,KAC1B,EAiOAi5N,GAAQtvO,IA/NR,SAAe+yN,GAEX,OADAA,EAAQD,EAAeC,GAChB18M,KAAK45M,UAAY55M,KAAK08M,EAAQ,OAAStC,GAClD,EA6NA6e,GAAQpM,aAAeA,GACvBoM,GAAQrU,QAAUA,GAClBqU,GAAQ/gB,QAAUA,GAClB+gB,GAAQhhB,MAAQA,GAChBghB,GAAQ/wF,KAAOA,GACf+wF,GAAQtM,MAlNR,WACI,OAAOzP,EAASl9M,KAAKkoI,OAAS,EAClC,EAiNA+wF,GAAQp0F,OAASA,GACjBo0F,GAAQzM,MAAQA,GAChByM,GAAQtG,SAlIR,SAAkBwG,EAAeC,GAC7B,IAAKp5N,KAAK45M,UACN,OAAO55M,KAAKi8M,aAAaI,cAG7B,IAEI3D,EACA3xK,EAHAsyL,GAAa,EACbh1F,EAAKm0F,GAyBT,MArB6B,iBAAlBW,IACPC,EAAgBD,EAChBA,GAAgB,GAES,kBAAlBA,IACPE,EAAaF,GAEY,iBAAlBC,IACP/0F,EAAKj5I,OAAOC,OAAO,CAAC,EAAGmtO,GAAYY,GACZ,MAAnBA,EAAc10N,GAAiC,MAApB00N,EAAchiB,KACzC/yE,EAAG+yE,GAAKgiB,EAAc10N,EAAI,IAKlCqiC,EAxFJ,SAAwBuyL,EAAgB5jB,EAAe8iB,EAAY9f,GAC/D,IAAIzvJ,EAAW8kK,GAAeuL,GAAgBrzO,MAC1C2+N,EAAU9iO,GAAMmnE,EAASxqB,GAAG,MAC5By5K,EAAUp2N,GAAMmnE,EAASxqB,GAAG,MAC5Bw5K,EAAQn2N,GAAMmnE,EAASxqB,GAAG,MAC1BypG,EAAOpmJ,GAAMmnE,EAASxqB,GAAG,MACzBomG,EAAS/iJ,GAAMmnE,EAASxqB,GAAG,MAC3BkuL,EAAQ7qO,GAAMmnE,EAASxqB,GAAG,MAC1B+tL,EAAQ1qO,GAAMmnE,EAASxqB,GAAG,MAC1B1nC,EACK6tN,GAAW4T,EAAWphB,IAAM,CAAC,IAAKwN,IAClCA,EAAU4T,EAAW9zN,GAAK,CAAC,KAAMkgN,IACjC1M,GAAW,GAAK,CAAC,MACjBA,EAAUsgB,EAAW9rO,GAAK,CAAC,KAAMwrN,IACjCD,GAAS,GAAK,CAAC,MACfA,EAAQugB,EAAW5iB,GAAK,CAAC,KAAMqC,IAC/B/vE,GAAQ,GAAK,CAAC,MACdA,EAAOswF,EAAW9nM,GAAK,CAAC,KAAMw3G,GAgBvC,OAdoB,MAAhBswF,EAAW7vF,IACX5xI,EACIA,GACC41N,GAAS,GAAK,CAAC,MACfA,EAAQ6L,EAAW7vF,GAAK,CAAC,KAAMgkF,KAExC51N,EAAIA,GACC8tI,GAAU,GAAK,CAAC,MAChBA,EAAS2zF,EAAW/uF,GAAK,CAAC,KAAM5E,IAChC2nF,GAAS,GAAK,CAAC,MAAS,CAAC,KAAMA,IAElC,GAAK9W,EACP3+M,EAAE,IAAMuiO,EAAiB,EACzBviO,EAAE,GAAK2hN,EACA+f,GAAkB1wN,MAAM,KAAMhR,EACzC,CAsDawiO,CAAev5N,MAAOq5N,EAAYh1F,EAD3Cq0E,EAAS14M,KAAKi8M,cAGVod,IACAtyL,EAAS2xK,EAAOie,YAAY32N,KAAM+mC,IAG/B2xK,EAAOga,WAAW3rL,EAC7B,EAmGAkyL,GAAQnF,YAAc6E,GACtBM,GAAQ/3O,SAAWy3O,GACnBM,GAAQ7uG,OAASuuG,GACjBM,GAAQvgB,OAASA,GACjBugB,GAAQhd,WAAaA,GAErBgd,GAAQO,YAAc5e,EAClB,sFACA+d,IAEJM,GAAQr9F,KAAOA,GAIfmgF,EAAe,IAAK,EAAG,EAAG,QAC1BA,EAAe,IAAK,EAAG,EAAG,WAI1B2C,GAAc,IAAKJ,IACnBI,GAAc,IAxuJO,wBAyuJrBO,GAAc,KAAK,SAAU3nI,EAAO72E,EAAO+e,GACvCA,EAAOk+B,GAAK,IAAI+K,KAAyB,IAApB3vC,WAAWw+D,GACpC,IACA2nI,GAAc,KAAK,SAAU3nI,EAAO72E,EAAO+e,GACvCA,EAAOk+B,GAAK,IAAI+K,KAAK00J,EAAM7lI,GAC/B,IAIA4b,EAAM3wG,QAAU,SAh/KZ61N,EAk/KY4R,GAEhB92H,EAAMloG,GAAKsxB,GACX42E,EAAMrxG,IAz/EN,WAGI,OAAOkiN,GAAO,WAFH,GAAG5rM,MAAM6F,KAAK9T,UAAW,GAGxC,EAs/EAgpG,EAAMtxG,IAp/EN,WAGI,OAAOmiN,GAAO,UAFH,GAAG5rM,MAAM6F,KAAK9T,UAAW,GAGxC,EAi/EAgpG,EAAMxqC,IA/+EI,WACN,OAAOD,KAAKC,IAAMD,KAAKC,OAAS,IAAID,IACxC,EA8+EAyqC,EAAMssC,IAAMi5E,EACZvlH,EAAM8gI,KA1oBN,SAAoB18I,GAChB,OAAO0yI,GAAoB,IAAR1yI,EACvB,EAyoBA4b,EAAM2xC,OAlhBN,SAAoBzI,EAAQ/uI,GACxB,OAAO4oO,GAAe75F,EAAQ/uI,EAAO,SACzC,EAihBA6lG,EAAM4tF,OAASA,EACf5tF,EAAMwlH,OAASqN,GACf7yH,EAAMw7H,QAAUvU,EAChBjnH,EAAMjqC,SAAW8kK,GACjB76H,EAAMw/G,SAAWA,EACjBx/G,EAAM6iH,SAhhBN,SAAsBogB,EAAc/5F,EAAQ/uI,GACxC,OAAO6oO,GAAiBC,EAAc/5F,EAAQ/uI,EAAO,WACzD,EA+gBA6lG,EAAMgiI,UA9oBN,WACI,OAAOlL,GAAYjiN,MAAM,KAAM7d,WAAWgrO,WAC9C,EA6oBAhiI,EAAM+oH,WAAa+J,GACnB9yH,EAAMm6H,WAAaA,GACnBn6H,EAAMivC,YAxhBN,SAAyB/F,EAAQ/uI,GAC7B,OAAO4oO,GAAe75F,EAAQ/uI,EAAO,cACzC,EAuhBA6lG,EAAM+iH,YA7gBN,SAAyBkgB,EAAc/5F,EAAQ/uI,GAC3C,OAAO6oO,GAAiBC,EAAc/5F,EAAQ/uI,EAAO,cACzD,EA4gBA6lG,EAAM2iH,aAAeA,GACrB3iH,EAAMumI,aA14GN,SAAsBrwO,EAAMo2B,GACxB,GAAc,MAAVA,EAAgB,CAChB,IAAIk5L,EACAghB,EACAve,EAAeiK,GAEE,MAAjBC,GAAQj8N,IAA+C,MAA9Bi8N,GAAQj8N,GAAM68N,aAEvCZ,GAAQj8N,GAAMS,IAAIqxN,EAAamK,GAAQj8N,GAAMokD,QAAShuB,KAIrC,OADjBk6M,EAAY/T,GAAWv8N,MAEnB+xN,EAAeue,EAAUlsL,SAE7BhuB,EAAS07L,EAAaC,EAAc37L,GACnB,MAAbk6M,IAIAl6M,EAAOyxL,KAAO7nN,IAElBsvN,EAAS,IAAI2C,EAAO77L,IACbymM,aAAeZ,GAAQj8N,GAC9Bi8N,GAAQj8N,GAAQsvN,GAIpBqN,GAAmB38N,EACvB,MAEyB,MAAjBi8N,GAAQj8N,KAC0B,MAA9Bi8N,GAAQj8N,GAAM68N,cACdZ,GAAQj8N,GAAQi8N,GAAQj8N,GAAM68N,aAC1B78N,IAAS28N,MACTA,GAAmB38N,IAEC,MAAjBi8N,GAAQj8N,WACRi8N,GAAQj8N,IAI3B,OAAOi8N,GAAQj8N,EACnB,EAg2GA8pG,EAAMmyH,QAt0GN,WACI,OAAO74N,EAAK64N,GAChB,EAq0GAnyH,EAAM8iH,cArhBN,SAA2BmgB,EAAc/5F,EAAQ/uI,GAC7C,OAAO6oO,GAAiBC,EAAc/5F,EAAQ/uI,EAAO,gBACzD,EAohBA6lG,EAAMupH,eAAiBA,EACvBvpH,EAAMymI,qBAtNN,SAAoCC,GAChC,YAAyBhsO,IAArBgsO,EACO93O,GAEqB,mBAArB83O,IACP93O,GAAQ83O,GACD,EAGf,EA8MA1mI,EAAM2mI,sBA3MN,SAAqCh2K,EAAW8iE,GAC5C,YAA8B/4H,IAA1B4qO,GAAW30K,UAGDj2D,IAAV+4H,EACO6xG,GAAW30K,IAEtB20K,GAAW30K,GAAa8iE,EACN,MAAd9iE,IACA20K,GAAWphB,GAAKzwF,EAAQ,IAErB,GACX,EAgMAzzB,EAAMi/H,eAp5DN,SAA2B2H,EAAUpxK,GACjC,IAAIyoG,EAAO2oE,EAAS3oE,KAAKzoG,EAAK,QAAQ,GACtC,OAAOyoG,GAAQ,EACT,WACAA,GAAQ,EACR,WACAA,EAAO,EACP,UACAA,EAAO,EACP,UACAA,EAAO,EACP,UACAA,EAAO,EACP,WACA,UACV,EAs4DAj+D,EAAM11F,UAAY8e,GAGlB42E,EAAM6mI,UAAY,CACdC,eAAgB,mBAChBC,uBAAwB,sBACxBC,kBAAmB,0BACnB1a,KAAM,aACN2a,KAAM,QACNC,aAAc,WACdC,QAAS,eACTxa,KAAM,aACNN,MAAO,WAGJrsH,CAEV,CA7iLmF74D,wBCEpF,WACI,aAEA,IAGI26G,EACAslF,EAiDAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EA7DAh9N,EAAOiC,KAEPg7N,EAAYj9N,EAAKu8N,MAIjBW,EAAgB,CACZ,IAAK,QACL,IAAK,OACL,IAAK,OACL,IAAK,SACL,IAAK,QACL,IAAK,SACL,IAAK,SACL,IAAK,UAETC,EAAe,CACX,MAAS,QACT,MAAS,QACT,SAAY,YAEhBC,EAAiB,CACb,WAAY,KACZ,YAAa,KACb,cAAe,KACf,eAAgB,KAChB,IAAO,MACP,OAAU,SACV,GAAM,KACN,GAAM,KACN,GAAM,KACN,GAAM,KACN,EAAK,MACL,EAAK,UAETC,EAAkB,CACd,MAAS,CAAC,KAAM,KAAM,KAAM,MAC5B,MAAS,CAAC,MAAO,UACjB,SAAY,CAAC,MAAO,WAExBC,EAAe,CACX,QAAW,UACX,QAAW,UACX,QAAW,UACX,OAAU,SACV,KAAQ,IAEZC,EAAmB,CACf,MAAS,QACT,KAAQ,OACR,OAAU,UAgBlBtmF,EAAK,CAIDumF,MAAO,WACH,MAAO,SAAW55O,KAAK6yC,MAAsB,KAAhB7yC,KAAK0vC,SACtC,EAMAulB,OAAQ,WACJ,IAAInqD,EAAK6K,EAET,IAAKA,EAAI,EAAGA,EAAIpN,UAAUC,OAAQmN,IAE9B,IAAK7K,KAAOvC,UAAUoN,GAEdpN,UAAUoN,GAAG/H,eAAe9C,KAC5BvC,UAAU,GAAGuC,GAAOvC,UAAUoN,GAAG7K,IAI7C,OAAOvC,UAAU,EACrB,EAQAkyI,OAAQ,WACJ,IACIo/F,EACAlkO,EAFAi8B,EAAMrpC,UAAU,GAIpB,IAAKoN,EAAI,EAAGA,EAAIpN,UAAUC,OAAS,EAAGmN,IAClCkkO,EAAM,IAAI5pK,OAAO,MAAQt6D,EAAI,MAAO,MACpCi8B,EAAMA,EAAIljC,QAAQmrO,EAAKtxO,UAAUoN,EAAI,IAGzC,OAAOi8B,CACX,EAMAkoM,WAAY,SAAS3pK,GACjB,OAAOvgD,OAAOugD,GAAQzhE,QAAQ,gBAAgB,SAAwBqU,GAClE,OAAOu2N,EAAcv2N,EACzB,GACJ,EAQAg3N,SAAU,SAASngL,GACU,mBAAdA,EAAGt2B,OACVs2B,EAAGt2B,SACEs2B,EAAGwtB,eACRxtB,EAAGwtB,cAActmB,YAAYlH,EACrC,GAQJg/K,EAAmB,SAAS/6M,GACxB,IAAI7W,EAAO6W,EAAOm8M,UACdx0O,EAAWq4B,EAAOo8M,cAEtB,QAA2BhuO,IAAvBstO,EAAavyN,GACb,MAAM,IAAIqC,MAAM,+BAEpB,QAAiCpd,IAA7ButO,EAAeh0O,GACf,MAAM,IAAI6jB,MAAM,mCAEpB,QAAuCpd,IAAnCytO,EAAa77M,EAAOq8M,WACpB,MAAM,IAAI7wN,MAAM,+BAEpB,QAA+Cpd,IAA3C0tO,EAAiB97M,EAAOs8M,eACxB,MAAM,IAAI9wN,MAAM,mCAEpB,QAAuBpd,IAAnB4xB,EAAO/F,QACP,MAAM,IAAIzO,MAAM,6BAEpB,GAAIowN,EAAgBzyN,GAAMpiB,QAAQ40O,EAAeh0O,IAAa,EAC1D,MAAM,IAAI6jB,MAAM,yBAA2B7jB,EAAW,oBAAsBwhB,EAAO,KAEvF,GAAI6W,EAAOu8M,cACwB,mBAAxBv8M,EAAOu8M,aACd,MAAM,IAAI/wN,MAAM,kCAEpB,GAAIwU,EAAOw8M,YAC0B,iBAAzBx8M,EAAOy8M,eAAgE,iBAA3Bz8M,EAAO08M,gBAC3D,MAAM,IAAIlxN,MAAM,kEACxB,EAKAwvN,EAAuB,SAASh7M,GAC5B,IAAIwF,EAAY,GACZrc,EAAO6W,EAAOm8M,UACdE,EAAYr8M,EAAOq8M,UAYvB,OAVA72M,EAAUp7B,KAAK,SAEfo7B,EAAUp7B,KAAK,cAAgBsxO,EAAavyN,IAExC0yN,EAAaQ,IACb72M,EAAUp7B,KAAK,eAAiByxO,EAAaQ,IAE7Cr8M,EAAO28M,YACPn3M,EAAUp7B,KAAK41B,EAAO28M,YAEnBn3M,CACX,EAOAy1M,EAAyB,SAASj7M,GAC9B,IAGI48M,EAHAzzN,EAAO6W,EAAOm8M,UACdx0O,EAAWq4B,EAAOo8M,cAClBS,EAAe,CAAC,mBAiBpB,OAdAA,EAAazyO,KAAK,kBAAoBuxO,EAAeh0O,IAExC,UAATwhB,GACA0zN,EAAazyO,KAAe,UAAT+e,EAAoB,wBAA0B,6BAErEyzN,EAAcz3O,SAAS6W,cAAc,IAAM6gO,EAAa75O,KAAK,UAIzD45O,EAAcz3O,SAAS8pD,cAAc,QACzBv5C,aAAa,QAASmnO,EAAa75O,KAAK,MACpDmC,SAAS6B,KAAKqoD,YAAYutL,IAGvBA,CACX,EAMAvB,EAAsB,SAASr7M,EAAQ88M,GACxB98M,EAAOm8M,UAAlB,IACIG,EAAgBt8M,EAAOs8M,cACvBS,EAAiB/8M,EAAO+8M,eAE5Bh8M,YAAW,WACP+7M,EAAQpnO,aAAa,QAASylO,EAAuBn7M,GAAQh9B,KAAK,MAG5C,UAAlBs5O,GAEAQ,EAAQt3M,UAAUC,OAAO,kBACzBq3M,EAAQt3M,UAAU77B,IAAI,oBAEC,SAAlB2yO,GAELQ,EAAQt3M,UAAUC,OAAO,iBACzBq3M,EAAQt3M,UAAU77B,IAAI,oBAItBmzO,EAAQt3M,UAAUC,OAAOs3M,EAAeC,OACxCF,EAAQt3M,UAAU77B,IAAIozO,EAAe9rH,OAGzClwF,YAAW,WACPy0H,EAAG0mF,SAASY,EAChB,GAAG98M,EAAOi9M,kBAEd,GAAGj9M,EAAOk9M,kBACd,EAOA9B,EAAqB,SAASp7M,EAAQ88M,GACpBA,EAAQ9gO,cAAc,gBAE5BmhO,QAAU,SAASxpM,GACvB,IAAIypM,EAEAp9M,EAAOu8M,eACPa,EAAUp9M,EAAOu8M,aAAah0N,MAAM/H,KAAM9V,YAEzC0yO,GACD5nF,EAAG0mF,SAASY,EACpB,CACJ,EAKAxB,EAAsB,SAASt7M,EAAQ88M,GACnC,IAEIO,EAFAC,EAAkBR,EAAQ9gO,cAAc,gDACxCuhO,EAAoBT,EAAQ9gO,cAAc,kDAG9CqhO,EAAmB,SAASG,GACxB,OAAO,SAAS7pM,GACE6pM,EAAaC,cAAcl1N,MAAM/H,KAAM9V,YAEjD8qJ,EAAG0mF,SAASY,EACpB,CACJ,EAEIQ,IACAA,EAAgBH,QAAUE,EAAiBr9M,EAAOy8M,gBAElDc,IACAA,EAAkBJ,QAAUE,EAAiBr9M,EAAO08M,iBAC5D,EAKAxB,EAA0B,SAASl7M,GAC/B,IAAI7W,EAAO6W,EAAOm8M,UACdG,EAAgBt8M,EAAOs8M,cACvBoB,EAAoB19M,EAAO09M,kBAC3BT,EAAoBj9M,EAAOi9M,kBAAoB,IAC/CU,EAA4B,UAAlBrB,EACVsB,EAAY,GAgBhB,MAdsB,WAAlBtB,IAEa,UAATnzN,EACAy0N,EAAUxzO,KAAKuzO,EAAU,4BAA8B,cAEvDC,EAAUxzO,KAAKuzO,EAAU,4BAA8B,cAEvDD,GACAE,EAAUxzO,KAAKorJ,EAAG5Y,OAAO,iCAAkC8gG,KAG/DT,EAAoB,GACpBW,EAAUxzO,KAAKorJ,EAAG5Y,OAAO,2BAA4BqgG,IAElDW,CACX,EAKAzC,EAAyB,SAASn7M,GAC9B,IAAI7W,EAAO6W,EAAOm8M,UACdx0O,EAAWq4B,EAAOo8M,cAClBE,EAAgBt8M,EAAOs8M,cACvBoB,EAAoB19M,EAAO09M,kBAC3BT,EAAoBj9M,EAAOi9M,kBAAoB,IAC/CU,EAA4B,UAAlBrB,EACVsB,EAAY,GA0BhB,MAxBsB,WAAlBtB,IAEa,UAATnzN,EAEIwyN,EAAeh0O,GAAUZ,QAAQ,MAAQ,EACzC62O,EAAUxzO,KAAKuzO,EAAU,+BAAiC,cAE1DC,EAAUxzO,KAAKuzO,EAAU,8BAAgC,cAI5B,QAA7BhC,EAAeh0O,GACfi2O,EAAUxzO,KAAKuzO,EAAU,+BAAiC,cAE1DC,EAAUxzO,KAAKuzO,EAAU,8BAAgC,cAG7DD,GACAE,EAAUxzO,KAAKorJ,EAAG5Y,OAAO,iCAAkC8gG,KAG/DT,EAAoB,GACpBW,EAAUxzO,KAAKorJ,EAAG5Y,OAAO,2BAA4BqgG,IAElDW,CACX,EAKArC,EAAkB,SAASv7M,GACvB,IAMI69M,EANAC,EAAY34O,SAAS8pD,cAAc,OACnCqtL,EAAgBt8M,EAAOs8M,cACvBS,EAAiB/8M,EAAO+8M,eACxBY,EAA4B,UAAlBrB,EACVyB,EAAsB/9M,EAAOg+M,WAC7Bx4M,EAAY,GAEZy4M,EAAkB,GAClBC,EAAqB,GACrBC,EAAuB,GACvBC,EAAc,GACdC,EAAa,GAmEjB,OAjEA74M,EAAYw1M,EAAqBh7M,GAE7BA,EAAOwG,UAEe,WAAlB81M,GAEA92M,EAAUp7B,KAAKuzO,EAAU,cAAgB,cACzCn4M,EAAUp7B,KAAKuzO,EAAU,iBAAmB,mBAI5Cn4M,EAAUp7B,KAAK2yO,EAAeuB,OAC9B94M,EAAUp7B,KAAK2yO,EAAer+M,QAGlCo/M,EAAUpoO,aAAa,QAASwlO,EAAwBl7M,GAAQh9B,KAAK,OAGzE86O,EAAUpoO,aAAa,KAAM8/I,EAAGumF,SAChC+B,EAAUpoO,aAAa,QAAS8vB,EAAUxiC,KAAK,MAE3Cg9B,EAAOu+M,WAEPF,EAAa,CACT,4CACI,0CACJ,UACFr7O,KAAK,KAGPg9B,EAAOw8M,aAEHx8M,EAAOy8M,gBACPyB,EAAqB1oF,EAAG5Y,OAAO,sDAAuDmhG,EAAsB/9M,EAAOy8M,cAAc3pN,KAAO0iI,EAAGymF,WAAWj8M,EAAOy8M,cAAc3pN,QAE3KkN,EAAO08M,kBACPyB,EAAuB3oF,EAAG5Y,OAAO,wDAAyDmhG,EAAsB/9M,EAAO08M,gBAAgB5pN,KAAO0iI,EAAGymF,WAAWj8M,EAAO08M,gBAAgB5pN,QAEvLsrN,EAAc,CACV,8CACIF,EACAC,EACJ,UACFn7O,KAAK,KAGc,aAArBg9B,EAAOm8M,YACP8B,EAAkB,8CAEtBJ,EAAa,CACT,8CACII,EACA,mCACI,MACJ,SACJ,SACAI,EACAD,GACFp7O,KAAK,IAEP86O,EAAUtzM,UAAYgrH,EAAG5Y,OAAOihG,EACJE,EAAsB/9M,EAAOgK,MAAQwrH,EAAGymF,WAAWj8M,EAAOgK,OAC1D+zM,EAAsB/9M,EAAO/F,QAAUu7H,EAAGymF,WAAWj8M,EAAO/F,UAGjF6jN,CACX,EAMAhD,EAAQv8N,EAAKu8N,MAAQ,SAAS0D,GACbr5O,SAAS6B,KAAtB,IAEIy3O,EAAY,CAAC,EA+FjB,OA7CAD,EAAahpF,EAAGp+F,OA/CA,CACZ+kL,UAAW,QAEXC,cAAe,YAKfC,UAAW,OAEX2B,YAAY,EAGZO,UAAU,EAEVG,WAAW,EAEXxB,kBAAmB,IAEnB12M,SAAS,EAET81M,cAAe,QAIfW,kBAAmB,IAInBS,kBAAmB,WAKnBX,eAAgB,CACZuB,MAAO,GACP5/M,MAAO,GACPuyF,KAAM,IAOV0rH,WAAY,wBAGsB6B,GAOtCC,EAAU3rH,WAAa,WAEnB,OADAv0G,EAAKu8N,MAAQU,EACNV,CACX,EAKA2D,EAAUrpD,KAAO,SAASp1J,GACtB,IAAI48M,EACAE,EAwBJ,OAtBA98M,EAASw1H,EAAGp+F,OAAO,CAAC,EAAGonL,EAAYx+M,GAEnC+6M,EAAiB/6M,GAEjB48M,EAAc3B,EAAuBj7M,GAErC88M,EAAUvB,EAAgBv7M,GAEtBA,EAAOu+M,UACPnD,EAAmBp7M,EAAQ88M,GAE3B98M,EAAOw8M,YACPlB,EAAoBt7M,EAAQ88M,GAE5B98M,EAAOo8M,cAAcr1O,QAAQ,WAAa,EAC1C61O,EAAY9wK,aAAagxK,EAASF,EAAYnyM,YAE9CmyM,EAAYvtL,YAAYytL,GAExB98M,EAAO0+M,WACPrD,EAAoBr7M,EAAQ88M,GAEzBA,EAAQz6M,aAAa,KAChC,EAGOo8M,CACX,EAMQj9K,EAAOP,UAEPA,EAAUO,EAAOP,QAAU65K,GAE/B75K,EAAQ65K,MAAQA,CAMvB,GAAEt8N,KAAKgC,gBCrkBR,IAOIm+N,EACAC,EARA5kM,EAAUwnB,EAAOP,QAAU,CAAC,EAUhC,SAAS49K,IACL,MAAM,IAAIrzN,MAAM,kCACpB,CACA,SAASszN,IACL,MAAM,IAAItzN,MAAM,oCACpB,CAqBA,SAASuzN,EAAW3oF,GAChB,GAAIuoF,IAAqB59M,WAErB,OAAOA,WAAWq1H,EAAK,GAG3B,IAAKuoF,IAAqBE,IAAqBF,IAAqB59M,WAEhE,OADA49M,EAAmB59M,WACZA,WAAWq1H,EAAK,GAE3B,IAEI,OAAOuoF,EAAiBvoF,EAAK,EACjC,CAAE,MAAMziH,GACJ,IAEI,OAAOgrM,EAAiBngO,KAAK,KAAM43I,EAAK,EAC5C,CAAE,MAAMziH,GAEJ,OAAOgrM,EAAiBngO,KAAKgC,KAAM41I,EAAK,EAC5C,CACJ,CAGJ,EA5CC,WACG,IAEQuoF,EADsB,mBAAf59M,WACYA,WAEA89M,CAE3B,CAAE,MAAOlrM,GACLgrM,EAAmBE,CACvB,CACA,IAEQD,EADwB,mBAAjBn3J,aACcA,aAEAq3J,CAE7B,CAAE,MAAOnrM,GACLirM,EAAqBE,CACzB,CACJ,CAnBA,GAwEA,IAEIE,EAFAz9N,EAAQ,GACR09N,GAAW,EAEXC,GAAc,EAElB,SAASC,IACAF,GAAaD,IAGlBC,GAAW,EACPD,EAAar0O,OACb4W,EAAQy9N,EAAaz3O,OAAOga,GAE5B29N,GAAc,EAEd39N,EAAM5W,QACNy0O,IAER,CAEA,SAASA,IACL,IAAIH,EAAJ,CAGA,IAAInqG,EAAUiqG,EAAWI,GACzBF,GAAW,EAGX,IADA,IAAI9vO,EAAMoS,EAAM5W,OACVwE,GAAK,CAGP,IAFA6vO,EAAez9N,EACfA,EAAQ,KACC29N,EAAa/vO,GACd6vO,GACAA,EAAaE,GAAYlgK,MAGjCkgK,GAAc,EACd/vO,EAAMoS,EAAM5W,MAChB,CACAq0O,EAAe,KACfC,GAAW,EAnEf,SAAyBxlN,GACrB,GAAImlN,IAAuBn3J,aAEvB,OAAOA,aAAahuD,GAGxB,IAAKmlN,IAAuBE,IAAwBF,IAAuBn3J,aAEvE,OADAm3J,EAAqBn3J,aACdA,aAAahuD,GAExB,IAEI,OAAOmlN,EAAmBnlN,EAC9B,CAAE,MAAOka,GACL,IAEI,OAAOirM,EAAmBpgO,KAAK,KAAMib,EACzC,CAAE,MAAOka,GAGL,OAAOirM,EAAmBpgO,KAAKgC,KAAMiZ,EACzC,CACJ,CAIJ,CA0CI4lN,CAAgBvqG,EAlBhB,CAmBJ,CAgBA,SAASwqG,EAAKlpF,EAAKn1I,GACfT,KAAK41I,IAAMA,EACX51I,KAAKS,MAAQA,CACjB,CAWA,SAAS6tD,IAAQ,CA5BjB90B,EAAQ24F,SAAW,SAAUyjB,GACzB,IAAIxrJ,EAAO,IAAIC,MAAMH,UAAUC,OAAS,GACxC,GAAID,UAAUC,OAAS,EACnB,IAAK,IAAImN,EAAI,EAAGA,EAAIpN,UAAUC,OAAQmN,IAClClN,EAAKkN,EAAI,GAAKpN,UAAUoN,GAGhCyJ,EAAMnX,KAAK,IAAIk1O,EAAKlpF,EAAKxrJ,IACJ,IAAjB2W,EAAM5W,QAAiBs0O,GACvBF,EAAWK,EAEnB,EAOAE,EAAKthO,UAAUghE,IAAM,WACjBx+D,KAAK41I,IAAI7tI,MAAM,KAAM/H,KAAKS,MAC9B,EACA+4B,EAAQhQ,MAAQ,UAChBgQ,EAAQC,SAAU,EAClBD,EAAQ2+E,IAAM,CAAC,EACf3+E,EAAQulM,KAAO,GACfvlM,EAAQj3C,QAAU,GAClBi3C,EAAQsB,SAAW,CAAC,EAIpBtB,EAAQi0E,GAAKn/C,EACb90B,EAAQ+Z,YAAc+a,EACtB90B,EAAQgmD,KAAOlxB,EACf90B,EAAQk1E,IAAMpgD,EACd90B,EAAQgpH,eAAiBl0F,EACzB90B,EAAQ+qH,mBAAqBj2F,EAC7B90B,EAAQwhF,KAAO1sD,EACf90B,EAAQ2qH,gBAAkB71F,EAC1B90B,EAAQ4qH,oBAAsB91F,EAE9B90B,EAAQ0qH,UAAY,SAAU96J,GAAQ,MAAO,EAAG,EAEhDowC,EAAQh4B,QAAU,SAAUpY,GACxB,MAAM,IAAI4hB,MAAM,mCACpB,EAEAwuB,EAAQwlM,IAAM,WAAc,MAAO,GAAI,EACvCxlM,EAAQylM,MAAQ,SAAUr5F,GACtB,MAAM,IAAI56H,MAAM,iCACpB,EACAwuB,EAAQ0lM,MAAQ,WAAa,OAAO,CAAG,gCCtLvC,MAAMC,EAAa,EAAQ,MAErBC,EAAS,EAAQ,MACjBC,EAAiB,EAAQ,MACzBC,EAAc,EAAQ,MAE5B,SAASC,EAAcC,EAAYC,EAAQntN,EAAMsqG,EAAMhH,GACrD,MAAMxrH,EAAO,GAAG+N,MAAM6F,KAAK9T,UAAW,GAChCw1O,EAAUt1O,EAAKD,OACfw1O,EAA2C,mBAAtBv1O,EAAKs1O,EAAU,GAE1C,IAAKC,IAAgBR,IACnB,MAAM,IAAIn0N,MAAM,sCAGlB,IAAI20N,EAoBG,CACL,GAAID,EAAU,EACZ,MAAM,IAAI10N,MAAM,8BAYlB,OATgB,IAAZ00N,GACFptN,EAAOmtN,EACPA,EAAS7iH,OAAOhvH,GACK,IAAZ8xO,GAAkBD,EAAOr2G,aAClCxM,EAAOtqG,EACPA,EAAOmtN,EACPA,OAAS7xO,GAGJ,IAAIF,GAAQ,SAAUD,EAAS+sC,GACpC,IACE,MAAMjuC,EAAO6yO,EAAO9gO,OAAOgU,EAAMsqG,GACjCnvH,EAAQ+xO,EAAWjzO,EAAMkzO,EAAQ7iH,GACnC,CAAE,MAAOzpF,GACPqH,EAAOrH,EACT,CACF,GACF,CAzCE,GAAIusM,EAAU,EACZ,MAAM,IAAI10N,MAAM,8BAGF,IAAZ00N,GACF9pH,EAAKtjG,EACLA,EAAOmtN,EACPA,EAAS7iH,OAAOhvH,GACK,IAAZ8xO,IACLD,EAAOr2G,iBAA4B,IAAPxT,GAC9BA,EAAKgH,EACLA,OAAOhvH,IAEPgoH,EAAKgH,EACLA,EAAOtqG,EACPA,EAAOmtN,EACPA,OAAS7xO,IA2Bf,IACE,MAAMrB,EAAO6yO,EAAO9gO,OAAOgU,EAAMsqG,GACjChH,EAAG,KAAM4pH,EAAWjzO,EAAMkzO,EAAQ7iH,GACpC,CAAE,MAAOzpF,GACPyiF,EAAGziF,EACL,CACF,CAEiBisM,EAAO9gO,OACxBmiD,EAAQ,GAAW8+K,EAAa7zN,KAAK,KAAM2zN,EAAen2H,QACtCq2H,EAAa7zN,KAAK,KAAM2zN,EAAeO,iBAGxCL,EAAa7zN,KAAK,MAAM,SAAUnf,EAAMsS,EAAG+9G,GAC5D,OAAO0iH,EAAYp2H,OAAO38G,EAAMqwH,EAClC,kCCvEA57D,EAAOP,QAAU,WACf,MAA0B,mBAAZ/yD,GAA0BA,EAAQ8P,WAAa9P,EAAQ8P,UAAU7P,IACjF,kBCIA,MAAMkyO,EAAgB,qBAgBtBp/K,EAAQq/K,gBAAkB,SAA0Bv9O,GAClD,GAAgB,IAAZA,EAAe,MAAO,GAE1B,MAAMw9O,EAAWp+O,KAAK6yC,MAAMjyC,EAAU,GAAK,EACrC6mB,EAAOy2N,EAAct9O,GACrBy9O,EAAqB,MAAT52N,EAAe,GAAmD,EAA9CznB,KAAKkzC,MAAMzrB,EAAO,KAAO,EAAI22N,EAAW,IACxEE,EAAY,CAAC72N,EAAO,GAE1B,IAAK,IAAI9R,EAAI,EAAGA,EAAIyoO,EAAW,EAAGzoO,IAChC2oO,EAAU3oO,GAAK2oO,EAAU3oO,EAAI,GAAK0oO,EAKpC,OAFAC,EAAUr2O,KAAK,GAERq2O,EAAUj6N,SACnB,EAsBAy6C,EAAQy/K,aAAe,SAAuB39O,GAC5C,MAAM49O,EAAS,GACTp0J,EAAMtrB,EAAQq/K,gBAAgBv9O,GAC9B69O,EAAYr0J,EAAI5hF,OAEtB,IAAK,IAAImN,EAAI,EAAGA,EAAI8oO,EAAW9oO,IAC7B,IAAK,IAAIoO,EAAI,EAAGA,EAAI06N,EAAW16N,IAElB,IAANpO,GAAiB,IAANoO,GACL,IAANpO,GAAWoO,IAAM06N,EAAY,GAC7B9oO,IAAM8oO,EAAY,GAAW,IAAN16N,GAI5By6N,EAAOv2O,KAAK,CAACmiF,EAAIz0E,GAAIy0E,EAAIrmE,KAI7B,OAAOy6N,CACT,kBClFA,MAAME,EAAO,EAAQ,MAWfC,EAAkB,CACtB,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC7C,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC5D,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC5D,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAG1C,SAASC,EAAkBh0O,GACzByT,KAAKqsB,KAAOg0M,EAAKG,aACjBxgO,KAAKzT,KAAOA,CACd,CAEAg0O,EAAiBE,cAAgB,SAAwBt2O,GACvD,OAAO,GAAKxI,KAAK6yC,MAAMrqC,EAAS,GAAUA,EAAS,EAAd,CACvC,EAEAo2O,EAAiB/iO,UAAUkjO,UAAY,WACrC,OAAO1gO,KAAKzT,KAAKpC,MACnB,EAEAo2O,EAAiB/iO,UAAUijO,cAAgB,WACzC,OAAOF,EAAiBE,cAAczgO,KAAKzT,KAAKpC,OAClD,EAEAo2O,EAAiB/iO,UAAU6U,MAAQ,SAAgBsuN,GACjD,IAAIrpO,EAIJ,IAAKA,EAAI,EAAGA,EAAI,GAAK0I,KAAKzT,KAAKpC,OAAQmN,GAAK,EAAG,CAE7C,IAAItF,EAAgD,GAAxCsuO,EAAgB/5O,QAAQyZ,KAAKzT,KAAK+K,IAG9CtF,GAASsuO,EAAgB/5O,QAAQyZ,KAAKzT,KAAK+K,EAAI,IAG/CqpO,EAAUlvK,IAAIz/D,EAAO,GACvB,CAIIgO,KAAKzT,KAAKpC,OAAS,GACrBw2O,EAAUlvK,IAAI6uK,EAAgB/5O,QAAQyZ,KAAKzT,KAAK+K,IAAK,EAEzD,EAEA0pD,EAAOP,QAAU8/K,YC1DjB,SAASK,IACP5gO,KAAKoS,OAAS,GACdpS,KAAK7V,OAAS,CAChB,CAEAy2O,EAAUpjO,UAAY,CAEpB7T,IAAK,SAAU0D,GACb,MAAMwzO,EAAWl/O,KAAK6yC,MAAMnnC,EAAQ,GACpC,OAA6D,IAApD2S,KAAKoS,OAAOyuN,KAAe,EAAIxzO,EAAQ,EAAM,EACxD,EAEAokE,IAAK,SAAUo6F,EAAK1hK,GAClB,IAAK,IAAImN,EAAI,EAAGA,EAAInN,EAAQmN,IAC1B0I,KAAK8gO,OAA4C,IAAnCj1E,IAAS1hK,EAASmN,EAAI,EAAM,GAE9C,EAEAypO,gBAAiB,WACf,OAAO/gO,KAAK7V,MACd,EAEA22O,OAAQ,SAAUE,GAChB,MAAMH,EAAWl/O,KAAK6yC,MAAMx0B,KAAK7V,OAAS,GACtC6V,KAAKoS,OAAOjoB,QAAU02O,GACxB7gO,KAAKoS,OAAOxoB,KAAK,GAGfo3O,IACFhhO,KAAKoS,OAAOyuN,IAAc,MAAU7gO,KAAK7V,OAAS,GAGpD6V,KAAK7V,QACP,GAGF62D,EAAOP,QAAUmgL,YC/BjB,SAASK,EAAW73N,GAClB,IAAKA,GAAQA,EAAO,EAClB,MAAM,IAAI4B,MAAM,qDAGlBhL,KAAKoJ,KAAOA,EACZpJ,KAAKzT,KAAO,IAAIyvB,WAAW5S,EAAOA,GAClCpJ,KAAKkhO,YAAc,IAAIllN,WAAW5S,EAAOA,EAC3C,CAWA63N,EAAUzjO,UAAU3T,IAAM,SAAUs3O,EAAKriE,EAAK9sK,EAAOovO,GACnD,MAAM/zO,EAAQ8zO,EAAMnhO,KAAKoJ,KAAO01J,EAChC9+J,KAAKzT,KAAKc,GAAS2E,EACfovO,IAAUphO,KAAKkhO,YAAY7zO,IAAS,EAC1C,EASA4zO,EAAUzjO,UAAU7T,IAAM,SAAUw3O,EAAKriE,GACvC,OAAO9+J,KAAKzT,KAAK40O,EAAMnhO,KAAKoJ,KAAO01J,EACrC,EAUAmiE,EAAUzjO,UAAUkiM,IAAM,SAAUyhC,EAAKriE,EAAK9sK,GAC5CgO,KAAKzT,KAAK40O,EAAMnhO,KAAKoJ,KAAO01J,IAAQ9sK,CACtC,EASAivO,EAAUzjO,UAAU6jO,WAAa,SAAUF,EAAKriE,GAC9C,OAAO9+J,KAAKkhO,YAAYC,EAAMnhO,KAAKoJ,KAAO01J,EAC5C,EAEA99G,EAAOP,QAAUwgL,kBChEjB,MAAMK,EAAa,EAAQ,MACrBjB,EAAO,EAAQ,MAErB,SAASkB,EAAUh1O,GACjByT,KAAKqsB,KAAOg0M,EAAKmB,KACK,iBAAX,IACTj1O,EAAO+0O,EAAW/0O,IAEpByT,KAAKzT,KAAO,IAAIyvB,WAAWzvB,EAC7B,CAEAg1O,EAASd,cAAgB,SAAwBt2O,GAC/C,OAAgB,EAATA,CACT,EAEAo3O,EAAS/jO,UAAUkjO,UAAY,WAC7B,OAAO1gO,KAAKzT,KAAKpC,MACnB,EAEAo3O,EAAS/jO,UAAUijO,cAAgB,WACjC,OAAOc,EAASd,cAAczgO,KAAKzT,KAAKpC,OAC1C,EAEAo3O,EAAS/jO,UAAU6U,MAAQ,SAAUsuN,GACnC,IAAK,IAAIrpO,EAAI,EAAG8yC,EAAIpqC,KAAKzT,KAAKpC,OAAQmN,EAAI8yC,EAAG9yC,IAC3CqpO,EAAUlvK,IAAIzxD,KAAKzT,KAAK+K,GAAI,EAEhC,EAEA0pD,EAAOP,QAAU8gL,kBC7BjB,MAAME,EAAU,EAAQ,MAElBC,EAAkB,CAEtB,EAAG,EAAG,EAAG,EACT,EAAG,EAAG,EAAG,EACT,EAAG,EAAG,EAAG,EACT,EAAG,EAAG,EAAG,EACT,EAAG,EAAG,EAAG,EACT,EAAG,EAAG,EAAG,EACT,EAAG,EAAG,EAAG,EACT,EAAG,EAAG,EAAG,EACT,EAAG,EAAG,EAAG,EACT,EAAG,EAAG,EAAG,EACT,EAAG,EAAG,EAAG,GACT,EAAG,EAAG,GAAI,GACV,EAAG,EAAG,GAAI,GACV,EAAG,EAAG,GAAI,GACV,EAAG,GAAI,GAAI,GACX,EAAG,GAAI,GAAI,GACX,EAAG,GAAI,GAAI,GACX,EAAG,GAAI,GAAI,GACX,EAAG,GAAI,GAAI,GACX,EAAG,GAAI,GAAI,GACX,EAAG,GAAI,GAAI,GACX,EAAG,GAAI,GAAI,GACX,EAAG,GAAI,GAAI,GACX,GAAI,GAAI,GAAI,GACZ,GAAI,GAAI,GAAI,GACZ,GAAI,GAAI,GAAI,GACZ,GAAI,GAAI,GAAI,GACZ,GAAI,GAAI,GAAI,GACZ,GAAI,GAAI,GAAI,GACZ,GAAI,GAAI,GAAI,GACZ,GAAI,GAAI,GAAI,GACZ,GAAI,GAAI,GAAI,GACZ,GAAI,GAAI,GAAI,GACZ,GAAI,GAAI,GAAI,GACZ,GAAI,GAAI,GAAI,GACZ,GAAI,GAAI,GAAI,GACZ,GAAI,GAAI,GAAI,GACZ,GAAI,GAAI,GAAI,GACZ,GAAI,GAAI,GAAI,GACZ,GAAI,GAAI,GAAI,IAGRC,EAAqB,CAEzB,EAAG,GAAI,GAAI,GACX,GAAI,GAAI,GAAI,GACZ,GAAI,GAAI,GAAI,GACZ,GAAI,GAAI,GAAI,GACZ,GAAI,GAAI,GAAI,GACZ,GAAI,GAAI,GAAI,IACZ,GAAI,GAAI,IAAK,IACb,GAAI,GAAI,IAAK,IACb,GAAI,IAAK,IAAK,IACd,GAAI,IAAK,IAAK,IACd,GAAI,IAAK,IAAK,IACd,GAAI,IAAK,IAAK,IACd,IAAK,IAAK,IAAK,IACf,IAAK,IAAK,IAAK,IACf,IAAK,IAAK,IAAK,IACf,IAAK,IAAK,IAAK,IACf,IAAK,IAAK,IAAK,IACf,IAAK,IAAK,IAAK,IACf,IAAK,IAAK,IAAK,IACf,IAAK,IAAK,IAAK,IACf,IAAK,IAAK,IAAK,IACf,IAAK,IAAK,IAAK,IACf,IAAK,IAAK,IAAK,IACf,IAAK,IAAK,IAAK,IACf,IAAK,IAAK,IAAK,KACf,IAAK,IAAK,IAAK,KACf,IAAK,IAAK,KAAM,KAChB,IAAK,IAAK,KAAM,KAChB,IAAK,IAAK,KAAM,KAChB,IAAK,IAAK,KAAM,KAChB,IAAK,IAAK,KAAM,KAChB,IAAK,IAAK,KAAM,KAChB,IAAK,IAAK,KAAM,KAChB,IAAK,KAAM,KAAM,KACjB,IAAK,KAAM,KAAM,KACjB,IAAK,KAAM,KAAM,KACjB,IAAK,KAAM,KAAM,KACjB,IAAK,KAAM,KAAM,KACjB,IAAK,KAAM,KAAM,KACjB,IAAK,KAAM,KAAM,MAWnBlhL,EAAQmhL,eAAiB,SAAyBr/O,EAASs/O,GACzD,OAAQA,GACN,KAAKJ,EAAQnrB,EACX,OAAOorB,EAAgC,GAAfn/O,EAAU,GAAS,GAC7C,KAAKk/O,EAAQh4F,EACX,OAAOi4F,EAAgC,GAAfn/O,EAAU,GAAS,GAC7C,KAAKk/O,EAAQK,EACX,OAAOJ,EAAgC,GAAfn/O,EAAU,GAAS,GAC7C,KAAKk/O,EAAQM,EACX,OAAOL,EAAgC,GAAfn/O,EAAU,GAAS,GAC7C,QACE,OAEN,EAUAk+D,EAAQuhL,uBAAyB,SAAiCz/O,EAASs/O,GACzE,OAAQA,GACN,KAAKJ,EAAQnrB,EACX,OAAOqrB,EAAmC,GAAfp/O,EAAU,GAAS,GAChD,KAAKk/O,EAAQh4F,EACX,OAAOk4F,EAAmC,GAAfp/O,EAAU,GAAS,GAChD,KAAKk/O,EAAQK,EACX,OAAOH,EAAmC,GAAfp/O,EAAU,GAAS,GAChD,KAAKk/O,EAAQM,EACX,OAAOJ,EAAmC,GAAfp/O,EAAU,GAAS,GAChD,QACE,OAEN,gBCtIAk+D,EAAQ61J,EAAI,CAAE0qB,IAAK,GACnBvgL,EAAQgpF,EAAI,CAAEu3F,IAAK,GACnBvgL,EAAQqhL,EAAI,CAAEd,IAAK,GACnBvgL,EAAQshL,EAAI,CAAEf,IAAK,GA+BnBvgL,EAAQm5J,QAAU,SAAkB7tK,GAClC,OAAOA,QAA8B,IAAdA,EAAMi1L,KAC3Bj1L,EAAMi1L,KAAO,GAAKj1L,EAAMi1L,IAAM,CAClC,EAEAvgL,EAAQ3wB,KAAO,SAAe99B,EAAOuwF,GACnC,GAAI9hC,EAAQm5J,QAAQ5nN,GAClB,OAAOA,EAGT,IACE,OAxCJ,SAAqB8/D,GACnB,GAAsB,iBAAXA,EACT,MAAM,IAAI9mD,MAAM,yBAKlB,OAFc8mD,EAAOrtE,eAGnB,IAAK,IACL,IAAK,MACH,OAAOg8D,EAAQ61J,EAEjB,IAAK,IACL,IAAK,SACH,OAAO71J,EAAQgpF,EAEjB,IAAK,IACL,IAAK,WACH,OAAOhpF,EAAQqhL,EAEjB,IAAK,IACL,IAAK,OACH,OAAOrhL,EAAQshL,EAEjB,QACE,MAAM,IAAI/2N,MAAM,qBAAuB8mD,GAE7C,CAaWmwK,CAAWjwO,EACpB,CAAE,MAAOmhC,GACP,OAAOovD,CACT,CACF,kBCjDA,MAAMs9I,EAAgB,qBAUtBp/K,EAAQy/K,aAAe,SAAuB39O,GAC5C,MAAM6mB,EAAOy2N,EAAct9O,GAE3B,MAAO,CAEL,CAAC,EAAG,GAEJ,CAAC6mB,EAhBuB,EAgBK,GAE7B,CAAC,EAAGA,EAlBoB,GAoB5B,kBCrBA,MAAM84N,EAAQ,EAAQ,KAIhBC,EAAUD,EAAME,YAFV,MAcZ3hL,EAAQ4hL,eAAiB,SAAyBR,EAAsBl5M,GACtE,MAAMp8B,EAASs1O,EAAqBb,KAAO,EAAKr4M,EAChD,IAAI+H,EAAInkC,GAAQ,GAEhB,KAAO21O,EAAME,YAAY1xM,GAAKyxM,GAAW,GACvCzxM,GAnBQ,MAmBMwxM,EAAME,YAAY1xM,GAAKyxM,EAMvC,OAxBe,OAwBN51O,GAAQ,GAAMmkC,EACzB,gBC5BA,MAAM4xM,EAAY,IAAItmN,WAAW,KAC3BumN,EAAY,IAAIvmN,WAAW,MAS/B,WACA,IAAIv4B,EAAI,EACR,IAAK,IAAI6T,EAAI,EAAGA,EAAI,IAAKA,IACvBgrO,EAAUhrO,GAAK7T,EACf8+O,EAAU9+O,GAAK6T,EAEf7T,IAAM,EAIE,IAAJA,IACFA,GAAK,KAQT,IAAK,IAAI6T,EAAI,IAAKA,EAAI,IAAKA,IACzBgrO,EAAUhrO,GAAKgrO,EAAUhrO,EAAI,IAEjC,CAtBC,GA8BDmpD,EAAQwJ,IAAM,SAAcl0B,GAC1B,GAAIA,EAAI,EAAG,MAAM,IAAI/qB,MAAM,OAAS+qB,EAAI,KACxC,OAAOwsM,EAAUxsM,EACnB,EAQA0qB,EAAQ+hL,IAAM,SAAczsM,GAC1B,OAAOusM,EAAUvsM,EACnB,EASA0qB,EAAQgiL,IAAM,SAAch/O,EAAGG,GAC7B,OAAU,IAANH,GAAiB,IAANG,EAAgB,EAIxB0+O,EAAUC,EAAU9+O,GAAK8+O,EAAU3+O,GAC5C,kBCpEA,MAAMy8O,EAAO,EAAQ,MACf6B,EAAQ,EAAQ,KAEtB,SAASQ,EAAWn2O,GAClByT,KAAKqsB,KAAOg0M,EAAKsC,MACjB3iO,KAAKzT,KAAOA,CACd,CAEAm2O,EAAUjC,cAAgB,SAAwBt2O,GAChD,OAAgB,GAATA,CACT,EAEAu4O,EAAUllO,UAAUkjO,UAAY,WAC9B,OAAO1gO,KAAKzT,KAAKpC,MACnB,EAEAu4O,EAAUllO,UAAUijO,cAAgB,WAClC,OAAOiC,EAAUjC,cAAczgO,KAAKzT,KAAKpC,OAC3C,EAEAu4O,EAAUllO,UAAU6U,MAAQ,SAAUsuN,GACpC,IAAIrpO,EAKJ,IAAKA,EAAI,EAAGA,EAAI0I,KAAKzT,KAAKpC,OAAQmN,IAAK,CACrC,IAAItF,EAAQkwO,EAAMU,OAAO5iO,KAAKzT,KAAK+K,IAGnC,GAAItF,GAAS,OAAUA,GAAS,MAE9BA,GAAS,UAGJ,MAAIA,GAAS,OAAUA,GAAS,OAIrC,MAAM,IAAIgZ,MACR,2BAA6BhL,KAAKzT,KAAK+K,GAAvC,qCAHFtF,GAAS,KAKX,CAIAA,EAAkC,KAAvBA,IAAU,EAAK,MAAyB,IAARA,GAG3C2uO,EAAUlvK,IAAIz/D,EAAO,GACvB,CACF,EAEAgvD,EAAOP,QAAUiiL,gBCjDjBjiL,EAAQoiL,SAAW,CACjBC,WAAY,EACZC,WAAY,EACZC,WAAY,EACZC,WAAY,EACZC,WAAY,EACZC,WAAY,EACZC,WAAY,EACZC,WAAY,GA6Jd,SAASC,EAAWC,EAAajsO,EAAGoO,GAClC,OAAQ69N,GACN,KAAK9iL,EAAQoiL,SAASC,WAAY,OAAQxrO,EAAIoO,GAAK,GAAM,EACzD,KAAK+6C,EAAQoiL,SAASE,WAAY,OAAOzrO,EAAI,GAAM,EACnD,KAAKmpD,EAAQoiL,SAASG,WAAY,OAAOt9N,EAAI,GAAM,EACnD,KAAK+6C,EAAQoiL,SAASI,WAAY,OAAQ3rO,EAAIoO,GAAK,GAAM,EACzD,KAAK+6C,EAAQoiL,SAASK,WAAY,OAAQvhP,KAAK6yC,MAAMl9B,EAAI,GAAK3V,KAAK6yC,MAAM9uB,EAAI,IAAM,GAAM,EACzF,KAAK+6C,EAAQoiL,SAASM,WAAY,OAAQ7rO,EAAIoO,EAAK,EAAKpO,EAAIoO,EAAK,GAAM,EACvE,KAAK+6C,EAAQoiL,SAASO,WAAY,OAAS9rO,EAAIoO,EAAK,EAAKpO,EAAIoO,EAAK,GAAK,GAAM,EAC7E,KAAK+6C,EAAQoiL,SAASQ,WAAY,OAAS/rO,EAAIoO,EAAK,GAAKpO,EAAIoO,GAAK,GAAK,GAAM,EAE7E,QAAS,MAAM,IAAIsF,MAAM,mBAAqBu4N,GAElD,CAtJA9iL,EAAQm5J,QAAU,SAAkBjxL,GAClC,OAAe,MAARA,GAAyB,KAATA,IAAgByL,MAAMzL,IAASA,GAAQ,GAAKA,GAAQ,CAC7E,EASA83B,EAAQ3wB,KAAO,SAAe99B,GAC5B,OAAOyuD,EAAQm5J,QAAQ5nN,GAASwc,SAASxc,EAAO,SAAMpE,CACxD,EASA6yD,EAAQ+iL,aAAe,SAAuBj3O,GAC5C,MAAM6c,EAAO7c,EAAK6c,KAClB,IAAIq6N,EAAS,EACTC,EAAe,EACfC,EAAe,EACfC,EAAU,KACVC,EAAU,KAEd,IAAK,IAAI1C,EAAM,EAAGA,EAAM/3N,EAAM+3N,IAAO,CACnCuC,EAAeC,EAAe,EAC9BC,EAAUC,EAAU,KAEpB,IAAK,IAAI/kE,EAAM,EAAGA,EAAM11J,EAAM01J,IAAO,CACnC,IAAI99G,EAASz0D,EAAK5C,IAAIw3O,EAAKriE,GACvB99G,IAAW4iL,EACbF,KAEIA,GAAgB,IAAGD,GAA8BC,EAAe,EAnDtE,GAoDEE,EAAU5iL,EACV0iL,EAAe,GAGjB1iL,EAASz0D,EAAK5C,IAAIm1K,EAAKqiE,GACnBngL,IAAW6iL,EACbF,KAEIA,GAAgB,IAAGF,GAA8BE,EAAe,EA5DtE,GA6DEE,EAAU7iL,EACV2iL,EAAe,EAEnB,CAEID,GAAgB,IAAGD,GAA8BC,EAAe,EAlElE,GAmEEC,GAAgB,IAAGF,GAA8BE,EAAe,EAnElE,EAoEJ,CAEA,OAAOF,CACT,EAOAhjL,EAAQqjL,aAAe,SAAuBv3O,GAC5C,MAAM6c,EAAO7c,EAAK6c,KAClB,IAAIq6N,EAAS,EAEb,IAAK,IAAItC,EAAM,EAAGA,EAAM/3N,EAAO,EAAG+3N,IAChC,IAAK,IAAIriE,EAAM,EAAGA,EAAM11J,EAAO,EAAG01J,IAAO,CACvC,MAAMzlJ,EAAO9sB,EAAK5C,IAAIw3O,EAAKriE,GACzBvyK,EAAK5C,IAAIw3O,EAAKriE,EAAM,GACpBvyK,EAAK5C,IAAIw3O,EAAM,EAAGriE,GAClBvyK,EAAK5C,IAAIw3O,EAAM,EAAGriE,EAAM,GAEb,IAATzlJ,GAAuB,IAATA,GAAYoqN,GAChC,CAGF,OA5FI,EA4FGA,CACT,EAQAhjL,EAAQsjL,aAAe,SAAuBx3O,GAC5C,MAAM6c,EAAO7c,EAAK6c,KAClB,IAAIq6N,EAAS,EACTO,EAAU,EACVC,EAAU,EAEd,IAAK,IAAI9C,EAAM,EAAGA,EAAM/3N,EAAM+3N,IAAO,CACnC6C,EAAUC,EAAU,EACpB,IAAK,IAAInlE,EAAM,EAAGA,EAAM11J,EAAM01J,IAC5BklE,EAAYA,GAAW,EAAK,KAASz3O,EAAK5C,IAAIw3O,EAAKriE,GAC/CA,GAAO,KAAmB,OAAZklE,GAAiC,KAAZA,IAAoBP,IAE3DQ,EAAYA,GAAW,EAAK,KAAS13O,EAAK5C,IAAIm1K,EAAKqiE,GAC/CriE,GAAO,KAAmB,OAAZmlE,GAAiC,KAAZA,IAAoBR,GAE/D,CAEA,OArHI,GAqHGA,CACT,EAUAhjL,EAAQyjL,aAAe,SAAuB33O,GAC5C,IAAI43O,EAAY,EAChB,MAAMC,EAAe73O,EAAKA,KAAKpC,OAE/B,IAAK,IAAImN,EAAI,EAAGA,EAAI8sO,EAAc9sO,IAAK6sO,GAAa53O,EAAKA,KAAK+K,GAI9D,OAvII,GAqIM3V,KAAKsE,IAAItE,KAAKkzC,KAAkB,IAAZsvM,EAAkBC,EAAgB,GAAK,GAGvE,EA+BA3jL,EAAQ4jL,UAAY,SAAoBv7M,EAASv8B,GAC/C,MAAM6c,EAAO7c,EAAK6c,KAElB,IAAK,IAAI01J,EAAM,EAAGA,EAAM11J,EAAM01J,IAC5B,IAAK,IAAIqiE,EAAM,EAAGA,EAAM/3N,EAAM+3N,IACxB50O,EAAK80O,WAAWF,EAAKriE,IACzBvyK,EAAKmzM,IAAIyhC,EAAKriE,EAAKwkE,EAAUx6M,EAASq4M,EAAKriE,GAGjD,EAQAr+G,EAAQ6jL,YAAc,SAAsB/3O,EAAMg4O,GAChD,MAAMC,EAAcp5O,OAAOoB,KAAKi0D,EAAQoiL,UAAU14O,OAClD,IAAIs6O,EAAc,EACdC,EAAehoG,IAEnB,IAAK,IAAI5gH,EAAI,EAAGA,EAAI0oN,EAAa1oN,IAAK,CACpCyoN,EAAgBzoN,GAChB2kC,EAAQ4jL,UAAUvoN,EAAGvvB,GAGrB,MAAMo4O,EACJlkL,EAAQ+iL,aAAaj3O,GACrBk0D,EAAQqjL,aAAav3O,GACrBk0D,EAAQsjL,aAAax3O,GACrBk0D,EAAQyjL,aAAa33O,GAGvBk0D,EAAQ4jL,UAAUvoN,EAAGvvB,GAEjBo4O,EAAUD,IACZA,EAAeC,EACfF,EAAc3oN,EAElB,CAEA,OAAO2oN,CACT,kBCzOA,MAAMG,EAAe,EAAQ,MACvBC,EAAQ,EAAQ,MAStBpkL,EAAQqkL,QAAU,CAChBjjO,GAAI,UACJm/N,IAAK,EACL+D,OAAQ,CAAC,GAAI,GAAI,KAYnBtkL,EAAQ+/K,aAAe,CACrB3+N,GAAI,eACJm/N,IAAK,EACL+D,OAAQ,CAAC,EAAG,GAAI,KAQlBtkL,EAAQ+gL,KAAO,CACb3/N,GAAI,OACJm/N,IAAK,EACL+D,OAAQ,CAAC,EAAG,GAAI,KAYlBtkL,EAAQkiL,MAAQ,CACd9gO,GAAI,QACJm/N,IAAK,EACL+D,OAAQ,CAAC,EAAG,GAAI,KASlBtkL,EAAQukL,MAAQ,CACdhE,KAAM,GAWRvgL,EAAQwkL,sBAAwB,SAAgC54M,EAAM9pC,GACpE,IAAK8pC,EAAK04M,OAAQ,MAAM,IAAI/5N,MAAM,iBAAmBqhB,GAErD,IAAKu4M,EAAahrB,QAAQr3N,GACxB,MAAM,IAAIyoB,MAAM,oBAAsBzoB,GAGxC,OAAIA,GAAW,GAAKA,EAAU,GAAW8pC,EAAK04M,OAAO,GAC5CxiP,EAAU,GAAW8pC,EAAK04M,OAAO,GACnC14M,EAAK04M,OAAO,EACrB,EAQAtkL,EAAQykL,mBAAqB,SAA6BC,GACxD,OAAIN,EAAMO,YAAYD,GAAiB1kL,EAAQqkL,QACtCD,EAAMQ,iBAAiBF,GAAiB1kL,EAAQ+/K,aAChDqE,EAAMS,UAAUH,GAAiB1kL,EAAQkiL,MACtCliL,EAAQ+gL,IACtB,EAQA/gL,EAAQv/D,SAAW,SAAmBmrC,GACpC,GAAIA,GAAQA,EAAKxqB,GAAI,OAAOwqB,EAAKxqB,GACjC,MAAM,IAAImJ,MAAM,eAClB,EAQAy1C,EAAQm5J,QAAU,SAAkBvtL,GAClC,OAAOA,GAAQA,EAAK20M,KAAO30M,EAAK04M,MAClC,EAqCAtkL,EAAQ3wB,KAAO,SAAe99B,EAAOuwF,GACnC,GAAI9hC,EAAQm5J,QAAQ5nN,GAClB,OAAOA,EAGT,IACE,OAnCJ,SAAqB8/D,GACnB,GAAsB,iBAAXA,EACT,MAAM,IAAI9mD,MAAM,yBAKlB,OAFc8mD,EAAOrtE,eAGnB,IAAK,UACH,OAAOg8D,EAAQqkL,QACjB,IAAK,eACH,OAAOrkL,EAAQ+/K,aACjB,IAAK,QACH,OAAO//K,EAAQkiL,MACjB,IAAK,OACH,OAAOliL,EAAQ+gL,KACjB,QACE,MAAM,IAAIx2N,MAAM,iBAAmB8mD,GAEzC,CAgBWmwK,CAAWjwO,EACpB,CAAE,MAAOmhC,GACP,OAAOovD,CACT,CACF,kBCtKA,MAAM89I,EAAO,EAAQ,MAErB,SAASkF,EAAah5O,GACpByT,KAAKqsB,KAAOg0M,EAAKyE,QACjB9kO,KAAKzT,KAAOA,EAAKrL,UACnB,CAEAqkP,EAAY9E,cAAgB,SAAwBt2O,GAClD,OAAO,GAAKxI,KAAK6yC,MAAMrqC,EAAS,IAAOA,EAAS,EAAOA,EAAS,EAAK,EAAI,EAAK,EAChF,EAEAo7O,EAAY/nO,UAAUkjO,UAAY,WAChC,OAAO1gO,KAAKzT,KAAKpC,MACnB,EAEAo7O,EAAY/nO,UAAUijO,cAAgB,WACpC,OAAO8E,EAAY9E,cAAczgO,KAAKzT,KAAKpC,OAC7C,EAEAo7O,EAAY/nO,UAAU6U,MAAQ,SAAgBsuN,GAC5C,IAAIrpO,EAAGioM,EAAOvtM,EAId,IAAKsF,EAAI,EAAGA,EAAI,GAAK0I,KAAKzT,KAAKpC,OAAQmN,GAAK,EAC1CioM,EAAQv/L,KAAKzT,KAAKooC,OAAOr9B,EAAG,GAC5BtF,EAAQwc,SAAS+wL,EAAO,IAExBohC,EAAUlvK,IAAIz/D,EAAO,IAKvB,MAAMwzO,EAAexlO,KAAKzT,KAAKpC,OAASmN,EACpCkuO,EAAe,IACjBjmC,EAAQv/L,KAAKzT,KAAKooC,OAAOr9B,GACzBtF,EAAQwc,SAAS+wL,EAAO,IAExBohC,EAAUlvK,IAAIz/D,EAAsB,EAAfwzO,EAAmB,GAE5C,EAEAxkL,EAAOP,QAAU8kL,kBC1CjB,MAAME,EAAK,EAAQ,MASnBhlL,EAAQgiL,IAAM,SAAcnqJ,EAAIwmI,GAC9B,MAAM4mB,EAAQ,IAAI1pN,WAAWs8D,EAAGnuF,OAAS20N,EAAG30N,OAAS,GAErD,IAAK,IAAImN,EAAI,EAAGA,EAAIghF,EAAGnuF,OAAQmN,IAC7B,IAAK,IAAIoO,EAAI,EAAGA,EAAIo5M,EAAG30N,OAAQub,IAC7BggO,EAAMpuO,EAAIoO,IAAM+/N,EAAGhD,IAAInqJ,EAAGhhF,GAAIwnN,EAAGp5M,IAIrC,OAAOggO,CACT,EASAjlL,EAAQklL,IAAM,SAAcC,EAAUjgC,GACpC,IAAI38M,EAAS,IAAIgzB,WAAW4pN,GAE5B,KAAQ58O,EAAOmB,OAASw7M,EAAQx7M,QAAW,GAAG,CAC5C,MAAMu7O,EAAQ18O,EAAO,GAErB,IAAK,IAAIsO,EAAI,EAAGA,EAAIquM,EAAQx7M,OAAQmN,IAClCtO,EAAOsO,IAAMmuO,EAAGhD,IAAI98B,EAAQruM,GAAIouO,GAIlC,IAAI5xO,EAAS,EACb,KAAOA,EAAS9K,EAAOmB,QAA6B,IAAnBnB,EAAO8K,IAAeA,IACvD9K,EAASA,EAAOmP,MAAMrE,EACxB,CAEA,OAAO9K,CACT,EASAy3D,EAAQolL,qBAAuB,SAA+BC,GAC5D,IAAIC,EAAO,IAAI/pN,WAAW,CAAC,IAC3B,IAAK,IAAI1kB,EAAI,EAAGA,EAAIwuO,EAAQxuO,IAC1ByuO,EAAOtlL,EAAQgiL,IAAIsD,EAAM,IAAI/pN,WAAW,CAAC,EAAGypN,EAAGjD,IAAIlrO,MAGrD,OAAOyuO,CACT,kBC7DA,MAAM7D,EAAQ,EAAQ,KAChBT,EAAU,EAAQ,MAClBb,EAAY,EAAQ,MACpBK,EAAY,EAAQ,MACpB+E,EAAmB,EAAQ,MAC3BC,EAAgB,EAAQ,MACxBC,EAAc,EAAQ,MACtBC,EAAS,EAAQ,MACjBC,EAAqB,EAAQ,MAC7BC,EAAU,EAAQ,MAClBC,EAAa,EAAQ,MACrBjG,EAAO,EAAQ,MACfkG,EAAW,EAAQ,MAqIzB,SAASC,EAAiBC,EAAQ5E,EAAsB0B,GACtD,MAAMn6N,EAAOq9N,EAAOr9N,KACds9N,EAAOJ,EAAWjE,eAAeR,EAAsB0B,GAC7D,IAAIjsO,EAAGquO,EAEP,IAAKruO,EAAI,EAAGA,EAAI,GAAIA,IAClBquO,EAA4B,IAApBe,GAAQpvO,EAAK,GAGjBA,EAAI,EACNmvO,EAAO58O,IAAIyN,EAAG,EAAGquO,GAAK,GACbruO,EAAI,EACbmvO,EAAO58O,IAAIyN,EAAI,EAAG,EAAGquO,GAAK,GAE1Bc,EAAO58O,IAAIuf,EAAO,GAAK9R,EAAG,EAAGquO,GAAK,GAIhCruO,EAAI,EACNmvO,EAAO58O,IAAI,EAAGuf,EAAO9R,EAAI,EAAGquO,GAAK,GACxBruO,EAAI,EACbmvO,EAAO58O,IAAI,EAAG,GAAKyN,EAAI,EAAI,EAAGquO,GAAK,GAEnCc,EAAO58O,IAAI,EAAG,GAAKyN,EAAI,EAAGquO,GAAK,GAKnCc,EAAO58O,IAAIuf,EAAO,EAAG,EAAG,GAAG,EAC7B,CA2MA,SAASu9N,EAAcp6O,EAAMhK,EAASs/O,EAAsB0B,GAC1D,IAAInwK,EAEJ,GAAI/oE,MAAMkkB,QAAQhiB,GAChB6mE,EAAWmzK,EAASK,UAAUr6O,OACzB,IAAoB,iBAATA,EAchB,MAAM,IAAIye,MAAM,gBAdmB,CACnC,IAAI67N,EAAmBtkP,EAEvB,IAAKskP,EAAkB,CACrB,MAAMC,EAAcP,EAASQ,SAASx6O,GAGtCs6O,EAAmBR,EAAQW,sBAAsBF,EAAajF,EAChE,CAIAzuK,EAAWmzK,EAAStE,WAAW11O,EAAMs6O,GAAoB,GAC3D,CAEA,CAGA,MAAMI,EAAcZ,EAAQW,sBAAsB5zK,EAAUyuK,GAG5D,IAAKoF,EACH,MAAM,IAAIj8N,MAAM,2DAIlB,GAAKzoB,GAIE,GAAIA,EAAU0kP,EACnB,MAAM,IAAIj8N,MAAM,wHAE0Ci8N,EAAc,YANxE1kP,EAAU0kP,EAUZ,MAAMC,EA7LR,SAAqB3kP,EAASs/O,EAAsBzuK,GAElD,MAAMhhD,EAAS,IAAIwuN,EAEnBxtK,EAAS7pE,SAAQ,SAAUgD,GAEzB6lB,EAAOq/C,IAAIllE,EAAK8/B,KAAK20M,IAAK,GAS1B5uN,EAAOq/C,IAAIllE,EAAKm0O,YAAaL,EAAK4E,sBAAsB14O,EAAK8/B,KAAM9pC,IAGnEgK,EAAK8lB,MAAMD,EACb,IAGA,MAEM+0N,EAA+D,GAF9CjF,EAAMkF,wBAAwB7kP,GAC5B4jP,EAAOnE,uBAAuBz/O,EAASs/O,IAiBhE,IATIzvN,EAAO2uN,kBAAoB,GAAKoG,GAClC/0N,EAAOq/C,IAAI,EAAG,GAQTr/C,EAAO2uN,kBAAoB,GAAM,GACtC3uN,EAAO0uN,OAAO,GAOhB,MAAMuG,GAAiBF,EAAyB/0N,EAAO2uN,mBAAqB,EAC5E,IAAK,IAAIzpO,EAAI,EAAGA,EAAI+vO,EAAe/vO,IACjC8a,EAAOq/C,IAAIn6D,EAAI,EAAI,GAAO,IAAM,GAGlC,OAYF,SAA0BqpO,EAAWp+O,EAASs/O,GAE5C,MAAMyF,EAAiBpF,EAAMkF,wBAAwB7kP,GAM/CglP,EAAqBD,EAHFnB,EAAOnE,uBAAuBz/O,EAASs/O,GAM1D2F,EAAgBrB,EAAOvE,eAAer/O,EAASs/O,GAI/C4F,EAAiBD,EADAF,EAAiBE,EAGlCE,EAAyB/lP,KAAK6yC,MAAM8yM,EAAiBE,GAErDG,EAAwBhmP,KAAK6yC,MAAM+yM,EAAqBC,GACxDI,EAAwBD,EAAwB,EAGhDE,EAAUH,EAAyBC,EAGnCG,EAAK,IAAI1B,EAAmByB,GAElC,IAAI/zO,EAAS,EACb,MAAMi0O,EAAS,IAAI19O,MAAMm9O,GACnBQ,EAAS,IAAI39O,MAAMm9O,GACzB,IAAIS,EAAc,EAClB,MAAM71N,EAAS,IAAI4J,WAAW2kN,EAAUvuN,QAGxC,IAAK,IAAIpb,EAAI,EAAGA,EAAIwwO,EAAexwO,IAAK,CACtC,MAAMkxO,EAAWlxO,EAAIywO,EAAiBE,EAAwBC,EAG9DG,EAAO/wO,GAAKob,EAAOja,MAAMrE,EAAQA,EAASo0O,GAG1CF,EAAOhxO,GAAK8wO,EAAGjwL,OAAOkwL,EAAO/wO,IAE7BlD,GAAUo0O,EACVD,EAActmP,KAAKC,IAAIqmP,EAAaC,EACtC,CAIA,MAAM37O,EAAO,IAAIyvB,WAAWsrN,GAC5B,IACIhwO,EAAG6gC,EADH9qC,EAAQ,EAIZ,IAAKiK,EAAI,EAAGA,EAAI2wO,EAAa3wO,IAC3B,IAAK6gC,EAAI,EAAGA,EAAIqvM,EAAervM,IACzB7gC,EAAIywO,EAAO5vM,GAAGhuC,SAChBoC,EAAKc,KAAW06O,EAAO5vM,GAAG7gC,IAMhC,IAAKA,EAAI,EAAGA,EAAIuwO,EAASvwO,IACvB,IAAK6gC,EAAI,EAAGA,EAAIqvM,EAAervM,IAC7B5rC,EAAKc,KAAW26O,EAAO7vM,GAAG7gC,GAI9B,OAAO/K,CACT,CAnFS47O,CAAgB/1N,EAAQ7vB,EAASs/O,EAC1C,CAuImBuG,CAAW7lP,EAASs/O,EAAsBzuK,GAGrDi1K,EAAcnG,EAAMrC,cAAct9O,GAClCohD,EAAU,IAAIs9L,EAAUoH,GAgC9B,OAzZF,SAA6B5B,EAAQlkP,GACnC,MAAM6mB,EAAOq9N,EAAOr9N,KACd2iE,EAAMk6J,EAAc/F,aAAa39O,GAEvC,IAAK,IAAI+U,EAAI,EAAGA,EAAIy0E,EAAI5hF,OAAQmN,IAAK,CACnC,MAAM6pO,EAAMp1J,EAAIz0E,GAAG,GACbwnK,EAAM/yF,EAAIz0E,GAAG,GAEnB,IAAK,IAAI6gC,GAAK,EAAGA,GAAK,EAAGA,IACvB,KAAIgpM,EAAMhpM,IAAM,GAAK/uB,GAAQ+3N,EAAMhpM,GAEnC,IAAK,IAAIlE,GAAK,EAAGA,GAAK,EAAGA,IACnB6qI,EAAM7qI,IAAM,GAAK7qB,GAAQ01J,EAAM7qI,IAE9BkE,GAAK,GAAKA,GAAK,IAAY,IAANlE,GAAiB,IAANA,IAClCA,GAAK,GAAKA,GAAK,IAAY,IAANkE,GAAiB,IAANA,IAChCA,GAAK,GAAKA,GAAK,GAAKlE,GAAK,GAAKA,GAAK,EACpCwyM,EAAO58O,IAAIs3O,EAAMhpM,EAAG2mI,EAAM7qI,GAAG,GAAM,GAEnCwyM,EAAO58O,IAAIs3O,EAAMhpM,EAAG2mI,EAAM7qI,GAAG,GAAO,GAI5C,CACF,CAoWEq0M,CAAmB3kM,EAASphD,GA3V9B,SAA6BkkP,GAC3B,MAAMr9N,EAAOq9N,EAAOr9N,KAEpB,IAAK,IAAI+uB,EAAI,EAAGA,EAAI/uB,EAAO,EAAG+uB,IAAK,CACjC,MAAMnmC,EAAQmmC,EAAI,GAAM,EACxBsuM,EAAO58O,IAAIsuC,EAAG,EAAGnmC,GAAO,GACxBy0O,EAAO58O,IAAI,EAAGsuC,EAAGnmC,GAAO,EAC1B,CACF,CAoVEu2O,CAAmB5kM,GA1UrB,SAAgC8iM,EAAQlkP,GACtC,MAAMwpF,EAAMi6J,EAAiB9F,aAAa39O,GAE1C,IAAK,IAAI+U,EAAI,EAAGA,EAAIy0E,EAAI5hF,OAAQmN,IAAK,CACnC,MAAM6pO,EAAMp1J,EAAIz0E,GAAG,GACbwnK,EAAM/yF,EAAIz0E,GAAG,GAEnB,IAAK,IAAI6gC,GAAK,EAAGA,GAAK,EAAGA,IACvB,IAAK,IAAIlE,GAAK,EAAGA,GAAK,EAAGA,KACZ,IAAPkE,GAAkB,IAANA,IAAkB,IAAPlE,GAAkB,IAANA,GAC9B,IAANkE,GAAiB,IAANlE,EACZwyM,EAAO58O,IAAIs3O,EAAMhpM,EAAG2mI,EAAM7qI,GAAG,GAAM,GAEnCwyM,EAAO58O,IAAIs3O,EAAMhpM,EAAG2mI,EAAM7qI,GAAG,GAAO,EAI5C,CACF,CAyTEu0M,CAAsB7kM,EAASphD,GAM/BikP,EAAgB7iM,EAASk+L,EAAsB,GAE3Ct/O,GAAW,GAzTjB,SAA2BkkP,EAAQlkP,GACjC,MAAM6mB,EAAOq9N,EAAOr9N,KACds9N,EAAOL,EAAQhE,eAAe9/O,GACpC,IAAI4+O,EAAKriE,EAAK6mE,EAEd,IAAK,IAAIruO,EAAI,EAAGA,EAAI,GAAIA,IACtB6pO,EAAMx/O,KAAK6yC,MAAMl9B,EAAI,GACrBwnK,EAAMxnK,EAAI,EAAI8R,EAAO,EAAI,EACzBu8N,EAA4B,IAApBe,GAAQpvO,EAAK,GAErBmvO,EAAO58O,IAAIs3O,EAAKriE,EAAK6mE,GAAK,GAC1Bc,EAAO58O,IAAIi1K,EAAKqiE,EAAKwE,GAAK,EAE9B,CA6SI8C,CAAiB9kM,EAASphD,GA/P9B,SAAoBkkP,EAAQl6O,GAC1B,MAAM6c,EAAOq9N,EAAOr9N,KACpB,IAAIs/N,GAAO,EACPvH,EAAM/3N,EAAO,EACbu/N,EAAW,EACXC,EAAY,EAEhB,IAAK,IAAI9pE,EAAM11J,EAAO,EAAG01J,EAAM,EAAGA,GAAO,EAGvC,IAFY,IAARA,GAAWA,MAEF,CACX,IAAK,IAAI7qI,EAAI,EAAGA,EAAI,EAAGA,IACrB,IAAKwyM,EAAOpF,WAAWF,EAAKriE,EAAM7qI,GAAI,CACpC,IAAI40M,GAAO,EAEPD,EAAYr8O,EAAKpC,SACnB0+O,EAAiD,IAAvCt8O,EAAKq8O,KAAeD,EAAY,IAG5ClC,EAAO58O,IAAIs3O,EAAKriE,EAAM7qI,EAAG40M,GACzBF,KAEkB,IAAdA,IACFC,IACAD,EAAW,EAEf,CAKF,GAFAxH,GAAOuH,EAEHvH,EAAM,GAAK/3N,GAAQ+3N,EAAK,CAC1BA,GAAOuH,EACPA,GAAOA,EACP,KACF,CACF,CAEJ,CA6NEI,CAAUnlM,EAASujM,GAEf9yM,MAAMmvM,KAERA,EAAc2C,EAAY5B,YAAY3gM,EACpC6iM,EAAgB96N,KAAK,KAAMi4B,EAASk+L,KAIxCqE,EAAY7B,UAAUd,EAAa5/L,GAGnC6iM,EAAgB7iM,EAASk+L,EAAsB0B,GAExC,CACL5/L,QAASA,EACTphD,QAASA,EACTs/O,qBAAsBA,EACtB0B,YAAaA,EACbnwK,SAAUA,EAEd,CAWA3S,EAAQniD,OAAS,SAAiB/R,EAAMxB,GACtC,QAAoB,IAATwB,GAAiC,KAATA,EACjC,MAAM,IAAIye,MAAM,iBAGlB,IACIzoB,EACAomC,EAFAk5M,EAAuBJ,EAAQh4F,EAenC,YAXuB,IAAZ1+I,IAET82O,EAAuBJ,EAAQ3xM,KAAK/kC,EAAQ82O,qBAAsBJ,EAAQh4F,GAC1ElnJ,EAAU8jP,EAAQv2M,KAAK/kC,EAAQxI,SAC/BomC,EAAOu9M,EAAYp2M,KAAK/kC,EAAQw4O,aAE5Bx4O,EAAQg+O,YACV7G,EAAM8G,kBAAkBj+O,EAAQg+O,aAI7BpC,EAAap6O,EAAMhK,EAASs/O,EAAsBl5M,EAC3D,kBC9eA,MAAMsgN,EAAa,EAAQ,MAE3B,SAAS7C,EAAoBN,GAC3B9lO,KAAKkpO,aAAUt7O,EACfoS,KAAK8lO,OAASA,EAEV9lO,KAAK8lO,QAAQ9lO,KAAK0tB,WAAW1tB,KAAK8lO,OACxC,CAQAM,EAAmB5oO,UAAUkwB,WAAa,SAAqBo4M,GAE7D9lO,KAAK8lO,OAASA,EACd9lO,KAAKkpO,QAAUD,EAAWpD,qBAAqB7lO,KAAK8lO,OACtD,EAQAM,EAAmB5oO,UAAUq6C,OAAS,SAAiBtrD,GACrD,IAAKyT,KAAKkpO,QACR,MAAM,IAAIl+N,MAAM,2BAKlB,MAAMm+N,EAAa,IAAIntN,WAAWzvB,EAAKpC,OAAS6V,KAAK8lO,QACrDqD,EAAWt/O,IAAI0C,GAIf,MAAMu2M,EAAYmmC,EAAWtD,IAAIwD,EAAYnpO,KAAKkpO,SAK5ClhP,EAAQgY,KAAK8lO,OAAShjC,EAAU34M,OACtC,GAAInC,EAAQ,EAAG,CACb,MAAMohP,EAAO,IAAIptN,WAAWhc,KAAK8lO,QAGjC,OAFAsD,EAAKv/O,IAAIi5M,EAAW96M,GAEbohP,CACT,CAEA,OAAOtmC,CACT,EAEA9hJ,EAAOP,QAAU2lL,gBCvDjB,MAAMiD,EAAU,SAEhB,IAAIC,EAAQ,mNAIZA,EAAQA,EAAMj5O,QAAQ,KAAM,OAE5B,MAAMk5O,EAAO,6BAA+BD,EAAQ,kBAEpD7oL,EAAQkiL,MAAQ,IAAI/wK,OAAO03K,EAAO,KAClC7oL,EAAQ+oL,WAAa,IAAI53K,OAAO,wBAAyB,KACzDnR,EAAQ+gL,KAAO,IAAI5vK,OAAO23K,EAAM,KAChC9oL,EAAQqkL,QAAU,IAAIlzK,OAAOy3K,EAAS,KACtC5oL,EAAQ+/K,aAAe,IAAI5uK,OAbN,oBAa2B,KAEhD,MAAM63K,EAAa,IAAI73K,OAAO,IAAM03K,EAAQ,KACtCI,EAAe,IAAI93K,OAAO,IAAMy3K,EAAU,KAC1CM,EAAoB,IAAI/3K,OAAO,0BAErCnR,EAAQ6kL,UAAY,SAAoB/xM,GACtC,OAAOk2M,EAAW9mP,KAAK4wC,EACzB,EAEAktB,EAAQ2kL,YAAc,SAAsB7xM,GAC1C,OAAOm2M,EAAa/mP,KAAK4wC,EAC3B,EAEAktB,EAAQ4kL,iBAAmB,SAA2B9xM,GACpD,OAAOo2M,EAAkBhnP,KAAK4wC,EAChC,kBC9BA,MAAM8sM,EAAO,EAAQ,MACfkF,EAAc,EAAQ,MACtBhF,EAAmB,EAAQ,MAC3BgB,EAAW,EAAQ,MACnBmB,EAAY,EAAQ,MACpBmC,EAAQ,EAAQ,MAChB3C,EAAQ,EAAQ,KAChB9uF,EAAW,EAAQ,MAQzB,SAASw2F,EAAqBr2M,GAC5B,OAAOna,SAAS42C,mBAAmBz8B,IAAMppC,MAC3C,CAUA,SAAS0/O,EAAa53K,EAAO5lC,EAAMkH,GACjC,MAAM6/B,EAAW,GACjB,IAAIpqE,EAEJ,KAAsC,QAA9BA,EAASipE,EAAM3vC,KAAKiR,KAC1B6/B,EAASxpE,KAAK,CACZ2C,KAAMvD,EAAO,GACbqE,MAAOrE,EAAOqE,MACdg/B,KAAMA,EACNliC,OAAQnB,EAAO,GAAGmB,SAItB,OAAOipE,CACT,CASA,SAAS02K,EAAuB3E,GAC9B,MAAM4E,EAAUF,EAAYhF,EAAMC,QAASzE,EAAKyE,QAASK,GACnD6E,EAAeH,EAAYhF,EAAMrE,aAAcH,EAAKG,aAAc2E,GACxE,IAAI8E,EACAC,EAYJ,OAVIhI,EAAMiI,sBACRF,EAAWJ,EAAYhF,EAAMrD,KAAMnB,EAAKmB,KAAM2D,GAC9C+E,EAAYL,EAAYhF,EAAMlC,MAAOtC,EAAKsC,MAAOwC,KAEjD8E,EAAWJ,EAAYhF,EAAM2E,WAAYnJ,EAAKmB,KAAM2D,GACpD+E,EAAY,IAGDH,EAAQhjP,OAAOijP,EAAcC,EAAUC,GAGjDjhP,MAAK,SAAUmhP,EAAIC,GAClB,OAAOD,EAAG/8O,MAAQg9O,EAAGh9O,KACvB,IACCjL,KAAI,SAAUwb,GACb,MAAO,CACLrR,KAAMqR,EAAIrR,KACV8/B,KAAMzuB,EAAIyuB,KACVliC,OAAQyT,EAAIzT,OAEhB,GACJ,CAUA,SAASmgP,EAAsBngP,EAAQkiC,GACrC,OAAQA,GACN,KAAKg0M,EAAKyE,QACR,OAAOS,EAAY9E,cAAct2O,GACnC,KAAKk2O,EAAKG,aACR,OAAOD,EAAiBE,cAAct2O,GACxC,KAAKk2O,EAAKsC,MACR,OAAOD,EAAUjC,cAAct2O,GACjC,KAAKk2O,EAAKmB,KACR,OAAOD,EAASd,cAAct2O,GAEpC,CAsIA,SAASogP,EAAoBh+O,EAAMi+O,GACjC,IAAIn+M,EACJ,MAAMo+M,EAAWpK,EAAK6E,mBAAmB34O,GAKzC,GAHA8/B,EAAOg0M,EAAKvwM,KAAK06M,EAAWC,GAGxBp+M,IAASg0M,EAAKmB,MAAQn1M,EAAK20M,IAAMyJ,EAASzJ,IAC5C,MAAM,IAAIh2N,MAAM,IAAMze,EAAN,iCACoB8zO,EAAKn/O,SAASmrC,GAChD,0BAA4Bg0M,EAAKn/O,SAASupP,IAQ9C,OAJIp+M,IAASg0M,EAAKsC,OAAUT,EAAMiI,uBAChC99M,EAAOg0M,EAAKmB,MAGNn1M,GACN,KAAKg0M,EAAKyE,QACR,OAAO,IAAIS,EAAYh5O,GAEzB,KAAK8zO,EAAKG,aACR,OAAO,IAAID,EAAiBh0O,GAE9B,KAAK8zO,EAAKsC,MACR,OAAO,IAAID,EAAUn2O,GAEvB,KAAK8zO,EAAKmB,KACR,OAAO,IAAID,EAASh1O,GAE1B,CAiBAk0D,EAAQmmL,UAAY,SAAoBnmO,GACtC,OAAOA,EAAMlY,QAAO,SAAUC,EAAKkiP,GAOjC,MANmB,iBAARA,EACTliP,EAAIoB,KAAK2gP,EAAmBG,EAAK,OACxBA,EAAIn+O,MACb/D,EAAIoB,KAAK2gP,EAAmBG,EAAIn+O,KAAMm+O,EAAIr+M,OAGrC7jC,CACT,GAAG,GACL,EAUAi4D,EAAQwhL,WAAa,SAAqB11O,EAAMhK,GAC9C,MAEM+hG,EAxKR,SAAqBqmJ,GACnB,MAAMrmJ,EAAQ,GACd,IAAK,IAAIhtF,EAAI,EAAGA,EAAIqzO,EAAKxgP,OAAQmN,IAAK,CACpC,MAAMozO,EAAMC,EAAKrzO,GAEjB,OAAQozO,EAAIr+M,MACV,KAAKg0M,EAAKyE,QACRxgJ,EAAM16F,KAAK,CAAC8gP,EACV,CAAEn+O,KAAMm+O,EAAIn+O,KAAM8/B,KAAMg0M,EAAKG,aAAcr2O,OAAQugP,EAAIvgP,QACvD,CAAEoC,KAAMm+O,EAAIn+O,KAAM8/B,KAAMg0M,EAAKmB,KAAMr3O,OAAQugP,EAAIvgP,UAEjD,MACF,KAAKk2O,EAAKG,aACRl8I,EAAM16F,KAAK,CAAC8gP,EACV,CAAEn+O,KAAMm+O,EAAIn+O,KAAM8/B,KAAMg0M,EAAKmB,KAAMr3O,OAAQugP,EAAIvgP,UAEjD,MACF,KAAKk2O,EAAKsC,MACRr+I,EAAM16F,KAAK,CAAC8gP,EACV,CAAEn+O,KAAMm+O,EAAIn+O,KAAM8/B,KAAMg0M,EAAKmB,KAAMr3O,OAAQy/O,EAAoBc,EAAIn+O,SAErE,MACF,KAAK8zO,EAAKmB,KACRl9I,EAAM16F,KAAK,CACT,CAAE2C,KAAMm+O,EAAIn+O,KAAM8/B,KAAMg0M,EAAKmB,KAAMr3O,OAAQy/O,EAAoBc,EAAIn+O,SAG3E,CAEA,OAAO+3F,CACT,CA0IgBsmJ,CAFDd,EAAsBv9O,EAAM21O,EAAMiI,uBAGzC72F,EA7HR,SAAqBhvD,EAAO/hG,GAC1B,MAAM67J,EAAQ,CAAC,EACT9K,EAAQ,CAAEtrJ,MAAO,CAAC,GACxB,IAAI6iP,EAAc,CAAC,SAEnB,IAAK,IAAIvzO,EAAI,EAAGA,EAAIgtF,EAAMn6F,OAAQmN,IAAK,CACrC,MAAMwzO,EAAYxmJ,EAAMhtF,GAClByzO,EAAiB,GAEvB,IAAK,IAAIrlO,EAAI,EAAGA,EAAIolO,EAAU3gP,OAAQub,IAAK,CACzC,MAAM1kB,EAAO8pP,EAAUplO,GACjBjZ,EAAM,GAAK6K,EAAIoO,EAErBqlO,EAAenhP,KAAK6C,GACpB2xJ,EAAM3xJ,GAAO,CAAEzL,KAAMA,EAAMgqP,UAAW,GACtC13F,EAAM7mJ,GAAO,CAAC,EAEd,IAAK,IAAIspC,EAAI,EAAGA,EAAI80M,EAAY1gP,OAAQ4rC,IAAK,CAC3C,MAAMk1M,EAAaJ,EAAY90M,GAE3BqoH,EAAM6sF,IAAe7sF,EAAM6sF,GAAYjqP,KAAKqrC,OAASrrC,EAAKqrC,MAC5DinH,EAAM23F,GAAYx+O,GAChB69O,EAAqBlsF,EAAM6sF,GAAYD,UAAYhqP,EAAKmJ,OAAQnJ,EAAKqrC,MACrEi+M,EAAqBlsF,EAAM6sF,GAAYD,UAAWhqP,EAAKqrC,MAEzD+xH,EAAM6sF,GAAYD,WAAahqP,EAAKmJ,SAEhCi0J,EAAM6sF,KAAa7sF,EAAM6sF,GAAYD,UAAYhqP,EAAKmJ,QAE1DmpJ,EAAM23F,GAAYx+O,GAAO69O,EAAqBtpP,EAAKmJ,OAAQnJ,EAAKqrC,MAC9D,EAAIg0M,EAAK4E,sBAAsBjkP,EAAKqrC,KAAM9pC,GAEhD,CACF,CAEAsoP,EAAcE,CAChB,CAEA,IAAK,IAAIh1M,EAAI,EAAGA,EAAI80M,EAAY1gP,OAAQ4rC,IACtCu9G,EAAMu3F,EAAY90M,IAAI9tC,IAAM,EAG9B,MAAO,CAAE7F,IAAKkxJ,EAAO8K,MAAOA,EAC9B,CAkFgB8sF,CAAW5mJ,EAAO/hG,GAC1Bw6B,EAAOq2H,EAASe,UAAUb,EAAMlxJ,IAAK,QAAS,OAE9C+oP,EAAgB,GACtB,IAAK,IAAI7zO,EAAI,EAAGA,EAAIylB,EAAK5yB,OAAS,EAAGmN,IACnC6zO,EAAcvhP,KAAK0pJ,EAAM8K,MAAMrhI,EAAKzlB,IAAItW,MAG1C,OAAOy/D,EAAQmmL,UAAwBuE,EA7M3B5iP,QAAO,SAAUC,EAAK4iP,GAChC,MAAMC,EAAU7iP,EAAI2B,OAAS,GAAK,EAAI3B,EAAIA,EAAI2B,OAAS,GAAK,KAC5D,OAAIkhP,GAAWA,EAAQh/M,OAAS++M,EAAK/+M,MACnC7jC,EAAIA,EAAI2B,OAAS,GAAGoC,MAAQ6+O,EAAK7+O,KAC1B/D,IAGTA,EAAIoB,KAAKwhP,GACF5iP,EACT,GAAG,IAqML,EAYAi4D,EAAQsmL,SAAW,SAAmBx6O,GACpC,OAAOk0D,EAAQmmL,UACbkD,EAAsBv9O,EAAM21O,EAAMiI,sBAEtC,eCzUA,IAAImB,EACJ,MAAMC,EAAkB,CACtB,EACA,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC1C,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAC7C,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACtD,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,MASxD9qL,EAAQo/K,cAAgB,SAAwBt9O,GAC9C,IAAKA,EAAS,MAAM,IAAIyoB,MAAM,yCAC9B,GAAIzoB,EAAU,GAAKA,EAAU,GAAI,MAAM,IAAIyoB,MAAM,6CACjD,OAAiB,EAAVzoB,EAAc,EACvB,EAQAk+D,EAAQ2mL,wBAA0B,SAAkC7kP,GAClE,OAAOgpP,EAAgBhpP,EACzB,EAQAk+D,EAAQ2hL,YAAc,SAAU71O,GAC9B,IAAIi/O,EAAQ,EAEZ,KAAgB,IAATj/O,GACLi/O,IACAj/O,KAAU,EAGZ,OAAOi/O,CACT,EAEA/qL,EAAQuoL,kBAAoB,SAA4BhoM,GACtD,GAAiB,mBAANA,EACT,MAAM,IAAIh2B,MAAM,yCAGlBsgO,EAAiBtqM,CACnB,EAEAyf,EAAQ0pL,mBAAqB,WAC3B,YAAiC,IAAnBmB,CAChB,EAEA7qL,EAAQmiL,OAAS,SAAiB0G,GAChC,OAAOgC,EAAehC,EACxB,gBCxDA7oL,EAAQm5J,QAAU,SAAkBr3N,GAClC,OAAQ6xC,MAAM7xC,IAAYA,GAAW,GAAKA,GAAW,EACvD,kBCRA,MAAM2/O,EAAQ,EAAQ,KAChBiE,EAAS,EAAQ,MACjB1E,EAAU,EAAQ,MAClBpB,EAAO,EAAQ,MACfuE,EAAe,EAAQ,MAIvB6G,EAAUvJ,EAAME,YADV,MAaZ,SAASsJ,EAAsBr/M,EAAM9pC,GAEnC,OAAO89O,EAAK4E,sBAAsB54M,EAAM9pC,GAAW,CACrD,CAEA,SAASopP,EAA2Bv4K,EAAU7wE,GAC5C,IAAIqpP,EAAY,EAOhB,OALAx4K,EAAS7pE,SAAQ,SAAUgD,GACzB,MAAMs/O,EAAeH,EAAqBn/O,EAAK8/B,KAAM9pC,GACrDqpP,GAAaC,EAAet/O,EAAKk0O,eACnC,IAEOmL,CACT,CAqBAnrL,EAAQ3wB,KAAO,SAAe99B,EAAOuwF,GACnC,OAAIqiJ,EAAahrB,QAAQ5nN,GAChBwc,SAASxc,EAAO,IAGlBuwF,CACT,EAWA9hC,EAAQqrL,YAAc,SAAsBvpP,EAASs/O,EAAsBx1M,GACzE,IAAKu4M,EAAahrB,QAAQr3N,GACxB,MAAM,IAAIyoB,MAAM,gCAIE,IAATqhB,IAAsBA,EAAOg0M,EAAKmB,MAG7C,MAMM2F,EAA+D,GAN9CjF,EAAMkF,wBAAwB7kP,GAG5B4jP,EAAOnE,uBAAuBz/O,EAASs/O,IAKhE,GAAIx1M,IAASg0M,EAAK2E,MAAO,OAAOmC,EAEhC,MAAM4E,EAAa5E,EAAyBuE,EAAqBr/M,EAAM9pC,GAGvE,OAAQ8pC,GACN,KAAKg0M,EAAKyE,QACR,OAAOnjP,KAAK6yC,MAAOu3M,EAAa,GAAM,GAExC,KAAK1L,EAAKG,aACR,OAAO7+O,KAAK6yC,MAAOu3M,EAAa,GAAM,GAExC,KAAK1L,EAAKsC,MACR,OAAOhhP,KAAK6yC,MAAMu3M,EAAa,IAEjC,KAAK1L,EAAKmB,KACV,QACE,OAAO7/O,KAAK6yC,MAAMu3M,EAAa,GAErC,EAUAtrL,EAAQumL,sBAAwB,SAAgCz6O,EAAMs1O,GACpE,IAAI6I,EAEJ,MAAMsB,EAAMvK,EAAQ3xM,KAAK+xM,EAAsBJ,EAAQh4F,GAEvD,GAAIp/I,MAAMkkB,QAAQhiB,GAAO,CACvB,GAAIA,EAAKpC,OAAS,EAChB,OAzFN,SAAqCipE,EAAUyuK,GAC7C,IAAK,IAAIoK,EAAiB,EAAGA,GAAkB,GAAIA,IAEjD,GADeN,EAA0Bv4K,EAAU64K,IACrCxrL,EAAQqrL,YAAYG,EAAgBpK,EAAsBxB,EAAK2E,OAC3E,OAAOiH,CAKb,CAgFaC,CAA2B3/O,EAAMy/O,GAG1C,GAAoB,IAAhBz/O,EAAKpC,OACP,OAAO,EAGTugP,EAAMn+O,EAAK,EACb,MACEm+O,EAAMn+O,EAGR,OA/HF,SAAsC8/B,EAAMliC,EAAQ03O,GAClD,IAAK,IAAIoK,EAAiB,EAAGA,GAAkB,GAAIA,IACjD,GAAI9hP,GAAUs2D,EAAQqrL,YAAYG,EAAgBpK,EAAsBx1M,GACtE,OAAO4/M,CAKb,CAuHSE,CAA4BzB,EAAIr+M,KAAMq+M,EAAIhK,YAAasL,EAChE,EAYAvrL,EAAQ4hL,eAAiB,SAAyB9/O,GAChD,IAAKqiP,EAAahrB,QAAQr3N,IAAYA,EAAU,EAC9C,MAAM,IAAIyoB,MAAM,2BAGlB,IAAI0lB,EAAInuC,GAAW,GAEnB,KAAO2/O,EAAME,YAAY1xM,GAAK+6M,GAAW,GACvC/6M,GAvJQ,MAuJMwxM,EAAME,YAAY1xM,GAAK+6M,EAGvC,OAAQlpP,GAAW,GAAMmuC,CAC3B,kBClKA,MAAMwxM,EAAQ,EAAQ,MAoBtBzhL,EAAQyoD,OAAS,SAAiBkjI,EAAQ3M,EAAQ10O,GAChD,IAAI6xH,EAAO7xH,EACPshP,EAAW5M,OAEK,IAAT7iH,GAA0B6iH,GAAWA,EAAOr2G,aACrDxM,EAAO6iH,EACPA,OAAS7xO,GAGN6xO,IACH4M,EAlBJ,WACE,IACE,OAAO1nP,SAAS8pD,cAAc,SAChC,CAAE,MAAOtb,GACP,MAAM,IAAInoB,MAAM,uCAClB,CACF,CAYeshO,IAGb1vH,EAAOslH,EAAMqK,WAAW3vH,GACxB,MAAMxzG,EAAO84N,EAAMsK,cAAcJ,EAAOzoM,QAAQv6B,KAAMwzG,GAEhD1F,EAAMm1H,EAASjjH,WAAW,MAC1B5gG,EAAQ0uF,EAAIu1H,gBAAgBrjO,EAAMA,GAMxC,OALA84N,EAAMwK,cAAclkN,EAAMj8B,KAAM6/O,EAAQxvH,GApC1C,SAAsB1F,EAAKuoH,EAAQr2N,GACjC8tG,EAAIy1H,UAAU,EAAG,EAAGlN,EAAOr8O,MAAOq8O,EAAOn8O,QAEpCm8O,EAAOzqO,QAAOyqO,EAAOzqO,MAAQ,CAAC,GACnCyqO,EAAOn8O,OAAS8lB,EAChBq2N,EAAOr8O,MAAQgmB,EACfq2N,EAAOzqO,MAAM1R,OAAS8lB,EAAO,KAC7Bq2N,EAAOzqO,MAAM5R,MAAQgmB,EAAO,IAC9B,CA8BEwjO,CAAY11H,EAAKm1H,EAAUjjO,GAC3B8tG,EAAI21H,aAAarkN,EAAO,EAAG,GAEpB6jN,CACT,EAEA5rL,EAAQm/K,gBAAkB,SAA0BwM,EAAQ3M,EAAQ10O,GAClE,IAAI6xH,EAAO7xH,OAES,IAAT6xH,GAA0B6iH,GAAWA,EAAOr2G,aACrDxM,EAAO6iH,EACPA,OAAS7xO,GAGNgvH,IAAMA,EAAO,CAAC,GAEnB,MAAMyvH,EAAW5rL,EAAQyoD,OAAOkjI,EAAQ3M,EAAQ7iH,GAE1Cj0G,EAAOi0G,EAAKj0G,MAAQ,YACpBmkO,EAAelwH,EAAKkwH,cAAgB,CAAC,EAE3C,OAAOT,EAASU,UAAUpkO,EAAMmkO,EAAaE,QAC/C,kBC9DA,MAAM9K,EAAQ,EAAQ,MAEtB,SAAS+K,EAAgBjtH,EAAOktH,GAC9B,MAAMC,EAAQntH,EAAMjpH,EAAI,IAClBw8B,EAAM25M,EAAS,KAAOltH,EAAM7mG,IAAM,IAExC,OAAOg0N,EAAQ,EACX55M,EAAM,IAAM25M,EAAS,aAAeC,EAAM72L,QAAQ,GAAGn+C,MAAM,GAAK,IAChEo7B,CACN,CAEA,SAAS65M,EAAQC,EAAK5pP,EAAGG,GACvB,IAAI2vC,EAAM85M,EAAM5pP,EAGhB,YAFiB,IAANG,IAAmB2vC,GAAO,IAAM3vC,GAEpC2vC,CACT,CAsCAktB,EAAQyoD,OAAS,SAAiBkjI,EAAQrhP,EAAS6qH,GACjD,MAAMgH,EAAOslH,EAAMqK,WAAWxhP,GACxBqe,EAAOgjO,EAAOzoM,QAAQv6B,KACtB7c,EAAO6/O,EAAOzoM,QAAQp3C,KACtB+gP,EAAalkO,EAAqB,EAAdwzG,EAAKxnH,OAEzBm4O,EAAM3wH,EAAKoD,MAAMwtH,MAAMz2O,EAEzB,SAAWk2O,EAAerwH,EAAKoD,MAAMwtH,MAAO,QAC5C,YAAcF,EAAa,IAAMA,EAAa,SAF9C,GAIEvwN,EACJ,SAAWkwN,EAAerwH,EAAKoD,MAAM6oH,KAAM,UAC3C,OAjDJ,SAAmBt8O,EAAM6c,EAAMhU,GAC7B,IAAI2nB,EAAO,GACP0wN,EAAS,EACTC,GAAS,EACTC,EAAa,EAEjB,IAAK,IAAIr2O,EAAI,EAAGA,EAAI/K,EAAKpC,OAAQmN,IAAK,CACpC,MAAMwnK,EAAMn9K,KAAK6yC,MAAMl9B,EAAI8R,GACrB+3N,EAAMx/O,KAAK6yC,MAAMl9B,EAAI8R,GAEtB01J,GAAQ4uE,IAAQA,GAAS,GAE1BnhP,EAAK+K,IACPq2O,IAEMr2O,EAAI,GAAKwnK,EAAM,GAAKvyK,EAAK+K,EAAI,KACjCylB,GAAQ2wN,EACJN,EAAO,IAAKtuE,EAAM1pK,EAAQ,GAAM+rO,EAAM/rO,GACtCg4O,EAAO,IAAKK,EAAQ,GAExBA,EAAS,EACTC,GAAS,GAGL5uE,EAAM,EAAI11J,GAAQ7c,EAAK+K,EAAI,KAC/BylB,GAAQqwN,EAAO,IAAKO,GACpBA,EAAa,IAGfF,GAEJ,CAEA,OAAO1wN,CACT,CAea6wN,CAASrhP,EAAM6c,EAAMwzG,EAAKxnH,QAAU,MAEzCy4O,EAAU,gBAAuBP,EAAa,IAAMA,EAAa,IAIjEQ,EAAS,4CAFAlxH,EAAKx5H,MAAa,UAAYw5H,EAAKx5H,MAAQ,aAAew5H,EAAKx5H,MAAQ,KAA1D,IAEwCyqP,EAAU,iCAAmCN,EAAKxwN,EAAO,WAM7H,MAJkB,mBAAP64F,GACTA,EAAG,KAAMk4H,GAGJA,CACT,gBChFA,SAASC,EAAU50N,GAKjB,GAJmB,iBAARA,IACTA,EAAMA,EAAIj4B,YAGO,iBAARi4B,EACT,MAAM,IAAInO,MAAM,yCAGlB,IAAIgjO,EAAU70N,EAAIhhB,QAAQ9H,QAAQ,IAAK,IAAIpC,MAAM,IACjD,GAAI+/O,EAAQ7jP,OAAS,GAAwB,IAAnB6jP,EAAQ7jP,QAAgB6jP,EAAQ7jP,OAAS,EACjE,MAAM,IAAI6gB,MAAM,sBAAwBmO,GAInB,IAAnB60N,EAAQ7jP,QAAmC,IAAnB6jP,EAAQ7jP,SAClC6jP,EAAU3jP,MAAMmT,UAAUzW,OAAOghB,MAAM,GAAIimO,EAAQ5rP,KAAI,SAAU6xC,GAC/D,MAAO,CAACA,EAAGA,EACb,MAIqB,IAAnB+5M,EAAQ7jP,QAAc6jP,EAAQpkP,KAAK,IAAK,KAE5C,MAAMqkP,EAAWz/N,SAASw/N,EAAQxrP,KAAK,IAAK,IAE5C,MAAO,CACL21C,EAAI81M,GAAY,GAAM,IACtB7lN,EAAI6lN,GAAY,GAAM,IACtBj3O,EAAIi3O,GAAY,EAAK,IACrBl3O,EAAc,IAAXk3O,EACH90N,IAAK,IAAM60N,EAAQ71O,MAAM,EAAG,GAAG3V,KAAK,IAExC,CAEAi+D,EAAQ8rL,WAAa,SAAqBxhP,GACnCA,IAASA,EAAU,CAAC,GACpBA,EAAQi1H,QAAOj1H,EAAQi1H,MAAQ,CAAC,GAErC,MAAM5qH,OAAmC,IAAnBrK,EAAQqK,QACT,OAAnBrK,EAAQqK,QACRrK,EAAQqK,OAAS,EACf,EACArK,EAAQqK,OAENhS,EAAQ2H,EAAQ3H,OAAS2H,EAAQ3H,OAAS,GAAK2H,EAAQ3H,WAAQwK,EAC/DkwK,EAAQ/yK,EAAQ+yK,OAAS,EAE/B,MAAO,CACL16K,MAAOA,EACP06K,MAAO16K,EAAQ,EAAI06K,EACnB1oK,OAAQA,EACR4qH,MAAO,CACL6oH,KAAMkF,EAAShjP,EAAQi1H,MAAM6oH,MAAQ,aACrC2E,MAAOO,EAAShjP,EAAQi1H,MAAMwtH,OAAS,cAEzC7kO,KAAM5d,EAAQ4d,KACdmkO,aAAc/hP,EAAQ+hP,cAAgB,CAAC,EAE3C,EAEArsL,EAAQytL,SAAW,SAAmBC,EAAQvxH,GAC5C,OAAOA,EAAKx5H,OAASw5H,EAAKx5H,OAAS+qP,EAAuB,EAAdvxH,EAAKxnH,OAC7CwnH,EAAKx5H,OAAS+qP,EAAuB,EAAdvxH,EAAKxnH,QAC5BwnH,EAAKkhD,KACX,EAEAr9G,EAAQ+rL,cAAgB,SAAwB2B,EAAQvxH,GACtD,MAAMkhD,EAAQr9G,EAAQytL,SAASC,EAAQvxH,GACvC,OAAOj7H,KAAK6yC,OAAO25M,EAAuB,EAAdvxH,EAAKxnH,QAAc0oK,EACjD,EAEAr9G,EAAQisL,cAAgB,SAAwB0B,EAASC,EAAIzxH,GAC3D,MAAMxzG,EAAOilO,EAAG1qM,QAAQv6B,KAClB7c,EAAO8hP,EAAG1qM,QAAQp3C,KAClBuxK,EAAQr9G,EAAQytL,SAAS9kO,EAAMwzG,GAC/B0xH,EAAa3sP,KAAK6yC,OAAOprB,EAAqB,EAAdwzG,EAAKxnH,QAAc0oK,GACnDywE,EAAe3xH,EAAKxnH,OAAS0oK,EAC7B0wE,EAAU,CAAC5xH,EAAKoD,MAAMwtH,MAAO5wH,EAAKoD,MAAM6oH,MAE9C,IAAK,IAAIvxO,EAAI,EAAGA,EAAIg3O,EAAYh3O,IAC9B,IAAK,IAAIoO,EAAI,EAAGA,EAAI4oO,EAAY5oO,IAAK,CACnC,IAAI+oO,EAAgC,GAAtBn3O,EAAIg3O,EAAa5oO,GAC3BgpO,EAAU9xH,EAAKoD,MAAMwtH,MAErBl2O,GAAKi3O,GAAgB7oO,GAAK6oO,GAC5Bj3O,EAAIg3O,EAAaC,GAAgB7oO,EAAI4oO,EAAaC,IAGlDG,EAAUF,EAAQjiP,EAFL5K,KAAK6yC,OAAOl9B,EAAIi3O,GAAgBzwE,GAEf10J,EADjBznB,KAAK6yC,OAAO9uB,EAAI6oO,GAAgBzwE,IACA,EAAI,IAGnDswE,EAAQK,KAAYC,EAAQv2M,EAC5Bi2M,EAAQK,KAAYC,EAAQtmN,EAC5BgmN,EAAQK,KAAYC,EAAQ13O,EAC5Bo3O,EAAQK,GAAUC,EAAQ33O,CAC5B,CAEJ,qBClGA,gBAUI,EAAO,CAAC,SAAW,EAuBpB,SAAU40J,GAIX,IAAIgjF,EAAK,WAGT,GAAIhjF,GAAUA,EAAO3gK,IAAM2gK,EAAO3gK,GAAG4jP,SAAWjjF,EAAO3gK,GAAG4jP,QAAQC,IAChE,IAAIF,EAAKhjF,EAAO3gK,GAAG4jP,QAAQC,IAE/B,IAUIC,EAAWpuD,EAASt7H,EA20Mb/qB,EAkRT,OAvmNyBs0M,GAAOA,EAAGG,YAChCH,EAAwBjuD,EAAUiuD,EAA5BA,EAAK,CAAC,EAUhB,SAAUI,GACP,IAAIhhJ,EAAM2B,EAAKs/I,EAAStvM,EACpBuvM,EAAU,CAAC,EACXC,EAAU,CAAC,EACX1vN,EAAS,CAAC,EACV2vN,EAAW,CAAC,EACZvjG,EAASxgJ,OAAOoS,UAAUjO,eAC1B6/O,EAAM,GAAGj3O,MACTk3O,EAAiB,QAErB,SAASz7G,EAAQh2H,EAAKwvB,GAClB,OAAOw+G,EAAO5tI,KAAKJ,EAAKwvB,EAC5B,CAUA,SAASuN,EAAUvxC,EAAMkmP,GACrB,IAAIngL,EAAWogL,EAAaC,EAAUC,EAAUh7M,EAC5Ci7M,EAAQC,EAAcC,EAAOt4O,EAAGoO,EAAG4pD,EACnCugL,EAAYP,GAAYA,EAASrhP,MAAM,KACvC7L,EAAMo9B,EAAOp9B,IACb0tP,EAAW1tP,GAAOA,EAAI,MAAS,CAAC,EAGpC,GAAIgH,EAAM,CAwBN,IAtBAqrC,GADArrC,EAAOA,EAAK6E,MAAM,MACD9D,OAAS,EAMtBq1B,EAAOuwN,cAAgBV,EAAe1sP,KAAKyG,EAAKqrC,MAChDrrC,EAAKqrC,GAAarrC,EAAKqrC,GAAWpkC,QAAQg/O,EAAgB,KAIpC,MAAtBjmP,EAAK,GAAGwV,OAAO,IAAcixO,IAO7BzmP,EADsBymP,EAAU13O,MAAM,EAAG03O,EAAU1lP,OAAS,GACjCpD,OAAOqC,IAIjCkO,EAAI,EAAGA,EAAIlO,EAAKe,OAAQmN,IAEzB,GAAa,OADbg4D,EAAOlmE,EAAKkO,IAERlO,EAAKuY,OAAOrK,EAAG,GACfA,GAAK,OACF,GAAa,OAATg4D,EAAe,CAMtB,GAAU,IAANh4D,GAAkB,IAANA,GAAuB,OAAZlO,EAAK,IAAgC,OAAhBA,EAAKkO,EAAI,GACrD,SACOA,EAAI,IACXlO,EAAKuY,OAAOrK,EAAI,EAAG,GACnBA,GAAK,EAEb,CAIJlO,EAAOA,EAAK5G,KAAK,IACrB,CAGA,IAAKqtP,GAAaC,IAAY1tP,EAAK,CAG/B,IAAKkV,GAFL63D,EAAY/lE,EAAK6E,MAAM,MAEJ9D,OAAQmN,EAAI,EAAGA,GAAK,EAAG,CAGtC,GAFAi4O,EAAcpgL,EAAUh3D,MAAM,EAAGb,GAAG9U,KAAK,KAErCqtP,EAGA,IAAKnqO,EAAImqO,EAAU1lP,OAAQub,EAAI,EAAGA,GAAK,EAKnC,IAJA8pO,EAAWptP,EAAIytP,EAAU13O,MAAM,EAAGuN,GAAGljB,KAAK,SAKtCgtP,EAAWA,EAASD,IACN,CAEVE,EAAWD,EACXE,EAASp4O,EACT,KACJ,CAKZ,GAAIm4O,EACA,OAMCE,GAAgBG,GAAWA,EAAQP,KACpCI,EAAeG,EAAQP,GACvBK,EAAQt4O,EAEhB,EAEKm4O,GAAYE,IACbF,EAAWE,EACXD,EAASE,GAGTH,IACAtgL,EAAUxtD,OAAO,EAAG+tO,EAAQD,GAC5BrmP,EAAO+lE,EAAU3sE,KAAK,KAE9B,CAEA,OAAO4G,CACX,CAEA,SAAS4mP,EAAYC,EAASC,GAC1B,OAAO,WAIH,IAAI9lP,EAAOglP,EAAIpxO,KAAK9T,UAAW,GAQ/B,MAHuB,iBAAZE,EAAK,IAAmC,IAAhBA,EAAKD,QACpCC,EAAKR,KAAK,MAEP8lG,EAAI3nF,MAAMgnO,EAAO3kP,EAAKrD,OAAO,CAACkpP,EAASC,IAClD,CACJ,CAQA,SAASC,EAASC,GACd,OAAO,SAAUp+O,GACbi9O,EAAQmB,GAAWp+O,CACvB,CACJ,CAEA,SAASq+O,EAAQjnP,GACb,GAAIwqI,EAAQs7G,EAAS9lP,GAAO,CACxB,IAAIgB,EAAO8kP,EAAQ9lP,UACZ8lP,EAAQ9lP,GACf+lP,EAAS/lP,IAAQ,EACjB2kG,EAAKhmF,MAAMgnO,EAAO3kP,EACtB,CAEA,IAAKwpI,EAAQq7G,EAAS7lP,KAAUwqI,EAAQu7G,EAAU/lP,GAC9C,MAAM,IAAI4hB,MAAM,MAAQ5hB,GAE5B,OAAO6lP,EAAQ7lP,EACnB,CAKA,SAASknP,EAAYlnP,GACjB,IAAIspB,EACArlB,EAAQjE,EAAOA,EAAK7C,QAAQ,MAAQ,EAKxC,OAJI8G,GAAS,IACTqlB,EAAStpB,EAAKqkC,UAAU,EAAGpgC,GAC3BjE,EAAOA,EAAKqkC,UAAUpgC,EAAQ,EAAGjE,EAAKe,SAEnC,CAACuoB,EAAQtpB,EACpB,CAIA,SAASmnP,EAAaN,GAClB,OAAOA,EAAUK,EAAYL,GAAW,EAC5C,CA8CA,SAASO,EAAWpnP,GAChB,OAAO,WACH,OAAQo2B,GAAUA,EAAOA,QAAUA,EAAOA,OAAOp2B,IAAU,CAAC,CAChE,CACJ,CA3CA4lP,EAAU,SAAU5lP,EAAMqnP,GACtB,IAAI/lM,EAnDeulM,EAoDfvnK,EAAQ4nK,EAAYlnP,GACpBspB,EAASg2D,EAAM,GACfgoK,EAAkBD,EAAS,GA2B/B,OAzBArnP,EAAOs/E,EAAM,GAETh2D,IAEAg4B,EAAS2lM,EADT39N,EAASioB,EAAUjoB,EAAQg+N,KAK3Bh+N,EAEItpB,EADAshD,GAAUA,EAAO/P,UACV+P,EAAO/P,UAAUvxC,GAlEb6mP,EAkEiCS,EAjE7C,SAAUtnP,GACb,OAAOuxC,EAAUvxC,EAAM6mP,EAC3B,IAiEet1M,EAAUvxC,EAAMsnP,IAK3Bh+N,GADAg2D,EAAQ4nK,EADRlnP,EAAOuxC,EAAUvxC,EAAMsnP,KAER,GACftnP,EAAOs/E,EAAM,GACTh2D,IACAg4B,EAAS2lM,EAAQ39N,KAKlB,CACHsuB,EAAGtuB,EAASA,EAAS,IAAMtpB,EAAOA,EAClC2sC,EAAG3sC,EACHunP,GAAIj+N,EACJoJ,EAAG4uB,EAEX,EAQAhL,EAAW,CACPghJ,QAAS,SAAUt3L,GACf,OAAO4mP,EAAY5mP,EACvB,EACAq3D,QAAS,SAAUr3D,GACf,IAAI+pC,EAAI87M,EAAQ7lP,GAChB,YAAiB,IAAN+pC,EACAA,EAEC87M,EAAQ7lP,GAAQ,CAAC,CAEjC,EACA43D,OAAQ,SAAU53D,GACd,MAAO,CACHyY,GAAIzY,EACJwnP,IAAK,GACLnwL,QAASwuL,EAAQ7lP,GACjBo2B,OAAQgxN,EAAWpnP,GAE3B,GAGJ2kG,EAAO,SAAU3kG,EAAM61C,EAAM3hB,EAAU2yN,GACnC,IAAIY,EAAWT,EAASphI,EAAK5sH,EAAKkV,EAAGm5O,EAGjCK,EAFA1mP,EAAO,GACP2mP,SAAsBzzN,EAQ1B,GAHAmzN,EAAWF,EADXN,EAAUA,GAAW7mP,GAIA,cAAjB2nP,GAAiD,aAAjBA,EAA6B,CAK7D,IADA9xM,GAAQA,EAAK90C,QAAUmzB,EAASnzB,OAAS,CAAC,UAAW,UAAW,UAAY80C,EACvE3nC,EAAI,EAAGA,EAAI2nC,EAAK90C,OAAQmN,GAAK,EAK9B,GAAgB,aAHhB84O,GADAhuP,EAAM4sP,EAAQ/vM,EAAK3nC,GAAIm5O,IACTzvM,GAIV52C,EAAKkN,GAAKooC,EAASghJ,QAAQt3L,QACxB,GAAgB,YAAZgnP,EAEPhmP,EAAKkN,GAAKooC,EAAS+gB,QAAQr3D,GAC3B0nP,GAAe,OACZ,GAAgB,WAAZV,EAEPS,EAAYzmP,EAAKkN,GAAKooC,EAASshB,OAAO53D,QACnC,GAAIwqI,EAAQq7G,EAASmB,IACjBx8G,EAAQs7G,EAASkB,IACjBx8G,EAAQu7G,EAAUiB,GACzBhmP,EAAKkN,GAAK+4O,EAAQD,OACf,KAAIhuP,EAAI05B,EAIX,MAAM,IAAI9Q,MAAM5hB,EAAO,YAAcgnP,GAHrChuP,EAAI05B,EAAEiS,KAAK3rC,EAAI2zC,EAAGi6M,EAAYC,GAAS,GAAOE,EAASC,GAAU,CAAC,GAClEhmP,EAAKkN,GAAK23O,EAAQmB,EAGtB,CAGJphI,EAAM1xF,EAAWA,EAASvV,MAAMknO,EAAQ7lP,GAAOgB,QAAQwD,EAEnDxE,IAIIynP,GAAaA,EAAUpwL,UAAYsuL,GAC/B8B,EAAUpwL,UAAYwuL,EAAQ7lP,GAClC6lP,EAAQ7lP,GAAQynP,EAAUpwL,QACnBuuD,IAAQ+/H,GAAU+B,IAEzB7B,EAAQ7lP,GAAQ4lH,GAG5B,MAAW5lH,IAGP6lP,EAAQ7lP,GAAQk0B,EAExB,EAEAwxN,EAAYpuD,EAAUhxF,EAAM,SAAUzwD,EAAM3hB,EAAU2yN,EAASC,EAAWc,GACtE,GAAoB,iBAAT/xM,EACP,OAAIS,EAAST,GAEFS,EAAST,GAAM3hB,GAMnB+yN,EAAQrB,EAAQ/vM,EAAMsxM,EAAajzN,IAAW0jB,GAClD,IAAK/B,EAAKt9B,OAAQ,CAMrB,IAJA6d,EAASyf,GACEA,MACPywD,EAAIlwE,EAAOyf,KAAMzf,EAAOlC,WAEvBA,EACD,OAGAA,EAAS3b,QAGTs9B,EAAO3hB,EACPA,EAAW2yN,EACXA,EAAU,MAEVhxM,EAAO8vM,CAEf,CA2BA,OAxBAzxN,EAAWA,GAAY,WAAa,EAIb,mBAAZ2yN,IACPA,EAAUC,EACVA,EAAYc,GAIZd,EACAniJ,EAAKghJ,EAAO9vM,EAAM3hB,EAAU2yN,GAQ5B1vN,YAAW,WACPwtE,EAAKghJ,EAAO9vM,EAAM3hB,EAAU2yN,EAChC,GAAG,GAGAvgJ,CACX,EAMAA,EAAIlwE,OAAS,SAAUypB,GACnB,OAAOymD,EAAIzmD,EACf,EAKA6lM,EAAUmC,SAAWhC,GAErB7pL,EAAS,SAAUh8D,EAAM61C,EAAM3hB,GAC3B,GAAoB,iBAATl0B,EACP,MAAM,IAAI4hB,MAAM,6DAIfi0B,EAAKt9B,SAIN2b,EAAW2hB,EACXA,EAAO,IAGN20F,EAAQq7G,EAAS7lP,IAAUwqI,EAAQs7G,EAAS9lP,KAC7C8lP,EAAQ9lP,GAAQ,CAACA,EAAM61C,EAAM3hB,GAErC,GAEOuxN,IAAM,CACTljF,QAAQ,EAEhB,CAxaA,GA0aAgjF,EAAGG,UAAYA,EAAUH,EAAGjuD,QAAUA,EAAQiuD,EAAGvpL,OAASA,GAG1DupL,EAAGvpL,OAAO,UAAU,WAAW,IAG/BupL,EAAGvpL,OAAO,SAAS,IAAG,WACpB,IAAI8zH,EAAKvtB,GAAU9zB,EAUnB,OARU,MAANqhD,GAAczvK,SAAWA,QAAQC,OACnCD,QAAQC,MACN,yJAMGwvK,CACT,IAEAy1D,EAAGvpL,OAAO,gBAAgB,CACxB,WACC,SAAUyyE,GACX,IAAIqqG,EAAQ,CAAC,EAsBb,SAASgP,EAAYC,GACnB,IAAI70N,EAAQ60N,EAAS3zO,UAEjBilH,EAAU,GAEd,IAAK,IAAI5P,KAAcv2F,EAGJ,mBAFTA,EAAMu2F,IAMK,gBAAfA,GAIJ4P,EAAQ74H,KAAKipH,GAGf,OAAO4P,CACT,CAxCAy/G,EAAMkP,OAAS,SAAUC,EAAYC,GACnC,IAAIC,EAAY,CAAC,EAAEhiP,eAEnB,SAASiiP,IACPxxO,KAAKnC,YAAcwzO,CACrB,CAEA,IAAK,IAAI5kP,KAAO6kP,EACVC,EAAUvzO,KAAKszO,EAAY7kP,KAC7B4kP,EAAW5kP,GAAO6kP,EAAW7kP,IAQjC,OAJA+kP,EAAgBh0O,UAAY8zO,EAAW9zO,UACvC6zO,EAAW7zO,UAAY,IAAIg0O,EAC3BH,EAAWI,UAAYH,EAAW9zO,UAE3B6zO,CACT,EAwBAnP,EAAMwP,SAAW,SAAUJ,EAAYK,GACrC,IAAIC,EAAmBV,EAAWS,GAC9BE,EAAeX,EAAWI,GAE9B,SAASQ,IACP,IAAI3nO,EAAU9f,MAAMmT,UAAU2M,QAE1B4nO,EAAWJ,EAAen0O,UAAUK,YAAY1T,OAEhD6nP,EAAoBV,EAAW9zO,UAAUK,YAEzCk0O,EAAW,IACb5nO,EAAQnM,KAAK9T,UAAWonP,EAAW9zO,UAAUK,aAE7Cm0O,EAAoBL,EAAen0O,UAAUK,aAG/Cm0O,EAAkBjqO,MAAM/H,KAAM9V,UAChC,CAEAynP,EAAelsI,YAAc6rI,EAAW7rI,YAMxCqsI,EAAet0O,UAAY,IAJ3B,WACEwC,KAAKnC,YAAci0O,CACrB,EAIA,IAAK,IAAIplP,EAAI,EAAGA,EAAImlP,EAAa1nP,OAAQuC,IAAK,CAC5C,IAAIulP,EAAcJ,EAAanlP,GAE/BolP,EAAet0O,UAAUy0O,GACvBX,EAAW9zO,UAAUy0O,EACzB,CAqBA,IAnBA,IAAIC,EAAe,SAAUr/H,GAE3B,IAAIs/H,EAAiB,WAAa,EAE9Bt/H,KAAci/H,EAAet0O,YAC/B20O,EAAiBL,EAAet0O,UAAUq1G,IAG5C,IAAIu/H,EAAkBT,EAAen0O,UAAUq1G,GAE/C,OAAO,WAKL,OAJcxoH,MAAMmT,UAAU2M,QAEtBnM,KAAK9T,UAAWioP,GAEjBC,EAAgBrqO,MAAM/H,KAAM9V,UACrC,CACF,EAESwmC,EAAI,EAAGA,EAAIkhN,EAAiBznP,OAAQumC,IAAK,CAChD,IAAI0hN,EAAkBR,EAAiBlhN,GAEvCohN,EAAet0O,UAAU40O,GAAmBF,EAAaE,EAC3D,CAEA,OAAON,CACT,EAEA,IAAIO,EAAa,WACfryO,KAAKkkJ,UAAY,CAAC,CACpB,EAEAmuF,EAAW70O,UAAUiwG,GAAK,SAAU7wF,EAAOU,GACzCtd,KAAKkkJ,UAAYlkJ,KAAKkkJ,WAAa,CAAC,EAEhCtnI,KAAS5c,KAAKkkJ,UAChBlkJ,KAAKkkJ,UAAUtnI,GAAOhzB,KAAK0zB,GAE3Btd,KAAKkkJ,UAAUtnI,GAAS,CAACU,EAE7B,EAEA+0N,EAAW70O,UAAUigD,QAAU,SAAU7gC,GACvC,IAAIzkB,EAAQ9N,MAAMmT,UAAUrF,MACxBu2C,EAASv2C,EAAM6F,KAAK9T,UAAW,GAEnC8V,KAAKkkJ,UAAYlkJ,KAAKkkJ,WAAa,CAAC,EAGtB,MAAVx1G,IACFA,EAAS,IAIW,IAAlBA,EAAOvkD,QACTukD,EAAO9kD,KAAK,CAAC,GAIf8kD,EAAO,GAAG4jM,MAAQ11N,EAEdA,KAAS5c,KAAKkkJ,WAChBlkJ,KAAK68B,OAAO78B,KAAKkkJ,UAAUtnI,GAAQzkB,EAAM6F,KAAK9T,UAAW,IAGvD,MAAO8V,KAAKkkJ,WACdlkJ,KAAK68B,OAAO78B,KAAKkkJ,UAAU,KAAMh6J,UAErC,EAEAmoP,EAAW70O,UAAUq/B,OAAS,SAAUqnH,EAAWx1G,GACjD,IAAK,IAAIp3C,EAAI,EAAG3I,EAAMu1J,EAAU/5J,OAAQmN,EAAI3I,EAAK2I,IAC/C4sJ,EAAU5sJ,GAAGyQ,MAAM/H,KAAM0uC,EAE7B,EAEAwzL,EAAMmQ,WAAaA,EAEnBnQ,EAAMqQ,cAAgB,SAAUpoP,GAG9B,IAFA,IAAIuxM,EAAQ,GAEHpkM,EAAI,EAAGA,EAAInN,EAAQmN,IAE1BokM,GADiB/5M,KAAK6yC,MAAsB,GAAhB7yC,KAAK0vC,UACbnwC,SAAS,IAG/B,OAAOw6M,CACT,EAEAwmC,EAAMx2N,KAAO,SAAUqD,EAAMhN,GAC3B,OAAO,WACLgN,EAAKhH,MAAMhG,EAAS7X,UACtB,CACF,EAEAg4O,EAAMsQ,aAAe,SAAUjmP,GAC7B,IAAK,IAAI6zC,KAAe7zC,EAAM,CAC5B,IAAIC,EAAO4zC,EAAYnyC,MAAM,KAEzBwkP,EAAYlmP,EAEhB,GAAoB,IAAhBC,EAAKrC,OAAT,CAIA,IAAK,IAAIsmC,EAAI,EAAGA,EAAIjkC,EAAKrC,OAAQsmC,IAAK,CACpC,IAAIhkC,EAAMD,EAAKikC,IAIfhkC,EAAMA,EAAIghC,UAAU,EAAG,GAAGhpC,cAAgBgI,EAAIghC,UAAU,MAE3CglN,IACXA,EAAUhmP,GAAO,CAAC,GAGhBgkC,GAAKjkC,EAAKrC,OAAS,IACrBsoP,EAAUhmP,GAAOF,EAAK6zC,IAGxBqyM,EAAYA,EAAUhmP,EACxB,QAEOF,EAAK6zC,EApBZ,CAqBF,CAEA,OAAO7zC,CACT,EAEA21O,EAAMwQ,UAAY,SAAUrlP,EAAOkuD,GAOjC,IAAIo3L,EAAM96G,EAAEt8E,GACRr2D,EAAYq2D,EAAGvmD,MAAM9P,UACrBC,EAAYo2D,EAAGvmD,MAAM7P,UAGzB,OAAID,IAAcC,GACC,WAAdA,GAAwC,YAAdA,KAIb,WAAdD,GAAwC,WAAdC,GAItBwtP,EAAIxxI,cAAgB5lD,EAAG7pD,cAC7BihP,EAAIC,aAAer3L,EAAG9pD,YAC1B,EAEAywO,EAAM2Q,aAAe,SAAU/lL,GAC7B,IAAIgmL,EAAa,CACf,KAAM,QACN,IAAK,QACL,IAAK,OACL,IAAK,OACL,IAAK,SACL,IAAM,QACN,IAAK,SAIP,MAAsB,iBAAXhmL,EACFA,EAGFv7C,OAAOu7C,GAAQz8D,QAAQ,gBAAgB,SAAUu4C,GACtD,OAAOkqM,EAAWlqM,EACpB,GACF,EAGAs5L,EAAM6Q,WAAa,SAAUC,EAAUC,GAGrC,GAAiC,QAA7Bp7G,EAAE7sI,GAAG87I,OAAOnyG,OAAO,EAAG,GAAc,CACtC,IAAIu+M,EAAWr7G,IAEfA,EAAEz1I,IAAI6wP,GAAQ,SAAUjyP,GACtBkyP,EAAWA,EAAS/pP,IAAInI,EAC1B,IAEAiyP,EAASC,CACX,CAEAF,EAAShrO,OAAOirO,EAClB,EAGA/Q,EAAMiR,QAAU,CAAC,EAEjB,IAAItxO,EAAK,EA6DT,OA5DAqgO,EAAMkR,mBAAqB,SAAUvwP,GAMnC,IAAIwwP,EAAYxwP,EAAQg/B,aAAa,mBAWrC,OAViB,MAAbwxN,IAEExwP,EAAQgf,IACVwxO,EAAYxwP,EAAQgf,GACpBhf,EAAQqS,aAAa,kBAAmBm+O,KAExCxwP,EAAQqS,aAAa,oBAAqB2M,GAC1CwxO,EAAYxxO,EAAG3gB,aAGZmyP,CACT,EAEAnR,EAAMoR,UAAY,SAAUzwP,EAASuG,EAAM4I,GAGzC,IAAI6P,EAAKqgO,EAAMkR,mBAAmBvwP,GAC7Bq/O,EAAMiR,QAAQtxO,KACjBqgO,EAAMiR,QAAQtxO,GAAM,CAAC,GAGvBqgO,EAAMiR,QAAQtxO,GAAIzY,GAAQ4I,CAC5B,EAEAkwO,EAAMqR,QAAU,SAAU1wP,EAASuG,GAKjC,IAAIyY,EAAKqgO,EAAMkR,mBAAmBvwP,GAClC,OAAIuG,EACE84O,EAAMiR,QAAQtxO,IACe,MAA3BqgO,EAAMiR,QAAQtxO,GAAIzY,GACb84O,EAAMiR,QAAQtxO,GAAIzY,GAItByuI,EAAEh1I,GAAS0J,KAAKnD,GAEhB84O,EAAMiR,QAAQtxO,EAEzB,EAEAqgO,EAAMsR,WAAa,SAAU3wP,GAE3B,IAAIgf,EAAKqgO,EAAMkR,mBAAmBvwP,GACT,MAArBq/O,EAAMiR,QAAQtxO,WACTqgO,EAAMiR,QAAQtxO,GAGvBhf,EAAQoS,gBAAgB,kBAC1B,EAEOitO,CACT,IAEAyM,EAAGvpL,OAAO,kBAAkB,CAC1B,SACA,YACC,SAAUyyE,EAAGqqG,GACd,SAASuR,EAAST,EAAUjoP,EAAS2oP,GACnC1zO,KAAKgzO,SAAWA,EAChBhzO,KAAKzT,KAAOmnP,EACZ1zO,KAAKjV,QAAUA,EAEf0oP,EAAQhC,UAAU5zO,YAAYG,KAAKgC,KACrC,CA2gBA,OAzgBAkiO,EAAMkP,OAAOqC,EAASvR,EAAMmQ,YAE5BoB,EAAQj2O,UAAU0rG,OAAS,WACzB,IAAIyqI,EAAW97G,EACb,6DASF,OANI73H,KAAKjV,QAAQpB,IAAI,aACnBgqP,EAASl4L,KAAK,uBAAwB,QAGxCz7C,KAAK2zO,SAAWA,EAETA,CACT,EAEAF,EAAQj2O,UAAUgf,MAAQ,WACxBxc,KAAK2zO,SAAS3/F,OAChB,EAEAy/F,EAAQj2O,UAAUo2O,eAAiB,SAAUllM,GAC3C,IAAImkM,EAAe7yO,KAAKjV,QAAQpB,IAAI,gBAEpCqW,KAAKwc,QACLxc,KAAK6zO,cAEL,IAAIC,EAAWj8G,EACb,gFAIEp+G,EAAUzZ,KAAKjV,QAAQpB,IAAI,gBAAgBA,IAAI+kD,EAAOj1B,SAE1Dq6N,EAAS9rO,OACP6qO,EACEp5N,EAAQi1B,EAAOtkD,QAInB0pP,EAAS,GAAG9rJ,WAAa,4BAEzBhoF,KAAK2zO,SAAS3rO,OAAO8rO,EACvB,EAEAL,EAAQj2O,UAAUu2O,aAAe,WAC/B/zO,KAAK2zO,SAASz7O,KAAK,6BAA6B+sB,QAClD,EAEAwuN,EAAQj2O,UAAUwK,OAAS,SAAUzb,GACnCyT,KAAK6zO,cAEL,IAAIG,EAAW,GAEf,GAAoB,MAAhBznP,EAAK8kB,SAA2C,IAAxB9kB,EAAK8kB,QAAQlnB,OAAzC,CAUAoC,EAAK8kB,QAAUrR,KAAK/W,KAAKsD,EAAK8kB,SAE9B,IAAK,IAAIqf,EAAI,EAAGA,EAAInkC,EAAK8kB,QAAQlnB,OAAQumC,IAAK,CAC5C,IAAIruC,EAAOkK,EAAK8kB,QAAQqf,GAEpBujN,EAAUj0O,KAAK8jB,OAAOzhC,GAE1B2xP,EAASpqP,KAAKqqP,EAChB,CAEAj0O,KAAK2zO,SAAS3rO,OAAOgsO,EAZrB,MAP0C,IAApCh0O,KAAK2zO,SAAS5oL,WAAW5gE,QAC3B6V,KAAKy9C,QAAQ,kBAAmB,CAC9BhkC,QAAS,aAkBjB,EAEAg6N,EAAQj2O,UAAUrW,SAAW,SAAUwsP,EAAUO,GACvBA,EAAUh8O,KAAK,oBACrB8P,OAAO2rO,EAC3B,EAEAF,EAAQj2O,UAAUvU,KAAO,SAAUsD,GAGjC,OAFayT,KAAKjV,QAAQpB,IAAI,SAEvByqJ,CAAO7nJ,EAChB,EAEAknP,EAAQj2O,UAAU22O,mBAAqB,WACrC,IAAIH,EAAWh0O,KAAK2zO,SACjBz7O,KAAK,2CAEJk8O,EAAYJ,EAASpsP,OAAO,wBAG5BwsP,EAAUjqP,OAAS,EAErBiqP,EAAUt2K,QAAQrgB,QAAQ,cAI1Bu2L,EAASl2K,QAAQrgB,QAAQ,cAG3Bz9C,KAAKq0O,wBACP,EAEAZ,EAAQj2O,UAAU82O,WAAa,WAC7B,IAAIv2O,EAAOiC,KAEXA,KAAKzT,KAAKF,SAAQ,SAAU23B,GAC1B,IAAIuwN,EAAc18G,EAAEz1I,IAAI4hC,GAAU,SAAUtf,GAC1C,OAAOA,EAAE7C,GAAG3gB,UACd,IAEe6c,EAAK41O,SACjBz7O,KAAK,2CAEC2pH,MAAK,WACZ,IAAIoyH,EAAUp8G,EAAE73H,MAEZ3d,EAAO6/O,EAAMqR,QAAQvzO,KAAM,QAG3B6B,EAAK,GAAKxf,EAAKwf,GAEE,MAAhBxf,EAAKQ,SAAmBR,EAAKQ,QAAQmhC,UACrB,MAAhB3hC,EAAKQ,SAAmBg1I,EAAE0D,QAAQ15H,EAAI0yO,IAAgB,EACzDN,EAAQx4L,KAAK,gBAAiB,QAE9Bw4L,EAAQx4L,KAAK,gBAAiB,QAElC,GAEF,GACF,EAEAg4L,EAAQj2O,UAAUg3O,YAAc,SAAU9lM,GACxC1uC,KAAK6zO,cAEL,IAEIY,EAAU,CACZvkF,UAAU,EACVukF,SAAS,EACTniO,KALgBtS,KAAKjV,QAAQpB,IAAI,gBAAgBA,IAAI,YAK/C+qP,CAAYhmM,IAEhBimM,EAAW30O,KAAK8jB,OAAO2wN,GAC3BE,EAAS3sJ,WAAa,mBAEtBhoF,KAAK2zO,SAAS7rO,QAAQ6sO,EACxB,EAEAlB,EAAQj2O,UAAUq2O,YAAc,WAC9B7zO,KAAK2zO,SAASz7O,KAAK,oBAAoB+sB,QACzC,EAEAwuN,EAAQj2O,UAAUsmB,OAAS,SAAUv3B,GACnC,IAAIu3B,EAASn/B,SAAS8pD,cAAc,MACpC3qB,EAAOkkE,UAAY,0BAEnB,IAAI38B,EAAQ,CACV,KAAQ,SACR,gBAAiB,SAGfjB,EAAUnpE,OAAOK,QAAQkc,UAAU4sD,SACrCnpE,OAAOK,QAAQkc,UAAU+sD,mBACzBtpE,OAAOK,QAAQkc,UAAUitD,sBA0B3B,IAAK,IAAIhP,KAxBY,MAAhBlvD,EAAK1J,SAAmBunE,EAAQpsD,KAAKzR,EAAK1J,QAAS,cACnC,MAAhB0J,EAAK1J,SAAmB0J,EAAK2jK,mBACzB7kG,EAAM,iBACbA,EAAM,iBAAmB,QAGZ,MAAX9+D,EAAKsV,WACAwpD,EAAM,iBAGO,MAAlB9+D,EAAKqoP,YACP9wN,EAAOjiB,GAAKtV,EAAKqoP,WAGfroP,EAAKi9B,QACP1F,EAAO0F,MAAQj9B,EAAKi9B,OAGlBj9B,EAAKw+D,WACPM,EAAMwpL,KAAO,QACbxpL,EAAM,cAAgB9+D,EAAK+lB,YACpB+4C,EAAM,kBAGEA,EAAO,CACtB,IAAIn3C,EAAMm3C,EAAM5P,GAEhB33B,EAAO5uB,aAAaumD,EAAMvnC,EAC5B,CAEA,GAAI3nB,EAAKw+D,SAAU,CACjB,IAAIkpL,EAAUp8G,EAAE/zG,GAEZowB,EAAQvvD,SAAS8pD,cAAc,UACnCyF,EAAM8zC,UAAY,yBAEL6vC,EAAE3jF,GACfl0C,KAAK4/C,SAASrzD,EAAM2nD,GAIpB,IAFA,IAAI4gM,EAAY,GAEP7gN,EAAI,EAAGA,EAAI1nC,EAAKw+D,SAAS5gE,OAAQ8pC,IAAK,CAC7C,IAAIvjC,EAAQnE,EAAKw+D,SAAS92B,GAEtB8gN,EAAS/0O,KAAK8jB,OAAOpzB,GAEzBokP,EAAUlrP,KAAKmrP,EACjB,CAEA,IAAIC,EAAqBn9G,EAAE,YAAa,CACtC,MAAS,8DAGXm9G,EAAmBhtO,OAAO8sO,GAE1Bb,EAAQjsO,OAAOksC,GACf+/L,EAAQjsO,OAAOgtO,EACjB,MACEh1O,KAAK4/C,SAASrzD,EAAMu3B,GAKtB,OAFAo+M,EAAMoR,UAAUxvN,EAAQ,OAAQv3B,GAEzBu3B,CACT,EAEA2vN,EAAQj2O,UAAUkO,KAAO,SAAUiiB,EAAWsnN,GAC5C,IAAIl3O,EAAOiC,KAEP6B,EAAK8rB,EAAU9rB,GAAK,WAExB7B,KAAK2zO,SAASl4L,KAAK,KAAM55C,GAEzB8rB,EAAU8/E,GAAG,eAAe,SAAU/+D,GACpC3wC,EAAKye,QACLze,EAAKiK,OAAO0mC,EAAOniD,MAEfohC,EAAUunN,WACZn3O,EAAKu2O,aACLv2O,EAAKo2O,qBAET,IAEAxmN,EAAU8/E,GAAG,kBAAkB,SAAU/+D,GACvC3wC,EAAKiK,OAAO0mC,EAAOniD,MAEfohC,EAAUunN,UACZn3O,EAAKu2O,YAET,IAEA3mN,EAAU8/E,GAAG,SAAS,SAAU/+D,GAC9B3wC,EAAKg2O,eACLh2O,EAAKy2O,YAAY9lM,EACnB,IAEA/gB,EAAU8/E,GAAG,UAAU,WAChB9/E,EAAUunN,WAIfn3O,EAAKu2O,aAEDv2O,EAAKhT,QAAQpB,IAAI,sBACnBoU,EAAKo2O,qBAET,IAEAxmN,EAAU8/E,GAAG,YAAY,WAClB9/E,EAAUunN,WAIfn3O,EAAKu2O,aAEDv2O,EAAKhT,QAAQpB,IAAI,sBACnBoU,EAAKo2O,qBAET,IAEAxmN,EAAU8/E,GAAG,QAAQ,WAEnB1vG,EAAK41O,SAASl4L,KAAK,gBAAiB,QACpC19C,EAAK41O,SAASl4L,KAAK,cAAe,SAElC19C,EAAKu2O,aACLv2O,EAAKs2O,wBACP,IAEA1mN,EAAU8/E,GAAG,SAAS,WAEpB1vG,EAAK41O,SAASl4L,KAAK,gBAAiB,SACpC19C,EAAK41O,SAASl4L,KAAK,cAAe,QAClC19C,EAAK41O,SAAS7lE,WAAW,wBAC3B,IAEAngJ,EAAU8/E,GAAG,kBAAkB,WAC7B,IAAI0nI,EAAep3O,EAAKq3O,wBAEI,IAAxBD,EAAahrP,QAIjBgrP,EAAa13L,QAAQ,UACvB,IAEA9vB,EAAU8/E,GAAG,kBAAkB,WAC7B,IAAI0nI,EAAep3O,EAAKq3O,wBAExB,GAA4B,IAAxBD,EAAahrP,OAAjB,CAIA,IAAIoC,EAAO21O,EAAMqR,QAAQ4B,EAAa,GAAI,QAEA,QAAtCA,EAAa15L,KAAK,iBACpB19C,EAAK0/C,QAAQ,QAAS,CAAC,GAEvB1/C,EAAK0/C,QAAQ,SAAU,CACrBlxD,KAAMA,GARV,CAWF,IAEAohC,EAAU8/E,GAAG,oBAAoB,WAC/B,IAAI0nI,EAAep3O,EAAKq3O,wBAEpBpB,EAAWj2O,EAAK41O,SAASz7O,KAAK,mBAE9Bm9O,EAAerB,EAAS3mP,MAAM8nP,GAIlC,KAAIE,GAAgB,GAApB,CAIA,IAAIC,EAAYD,EAAe,EAGH,IAAxBF,EAAahrP,SACfmrP,EAAY,GAGd,IAAIC,EAAQvB,EAASlvG,GAAGwwG,GAExBC,EAAM93L,QAAQ,cAEd,IAAI+3L,EAAgBz3O,EAAK41O,SAAS7/O,SAASjQ,IACvC4xP,EAAUF,EAAMzhP,SAASjQ,IACzB6xP,EAAa33O,EAAK41O,SAAStvP,aAAeoxP,EAAUD,GAEtC,IAAdF,EACFv3O,EAAK41O,SAAStvP,UAAU,GACfoxP,EAAUD,EAAgB,GACnCz3O,EAAK41O,SAAStvP,UAAUqxP,EApB1B,CAsBF,IAEA/nN,EAAU8/E,GAAG,gBAAgB,WAC3B,IAAI0nI,EAAep3O,EAAKq3O,wBAEpBpB,EAAWj2O,EAAK41O,SAASz7O,KAAK,mBAI9Bo9O,EAFetB,EAAS3mP,MAAM8nP,GAEH,EAG/B,KAAIG,GAAatB,EAAS7pP,QAA1B,CAIA,IAAIorP,EAAQvB,EAASlvG,GAAGwwG,GAExBC,EAAM93L,QAAQ,cAEd,IAAI+3L,EAAgBz3O,EAAK41O,SAAS7/O,SAASjQ,IACzCka,EAAK41O,SAAS1yG,aAAY,GACxB00G,EAAaJ,EAAMzhP,SAASjQ,IAAM0xP,EAAMt0G,aAAY,GACpDy0G,EAAa33O,EAAK41O,SAAStvP,YAAcsxP,EAAaH,EAExC,IAAdF,EACFv3O,EAAK41O,SAAStvP,UAAU,GACfsxP,EAAaH,GACtBz3O,EAAK41O,SAAStvP,UAAUqxP,EAd1B,CAgBF,IAEA/nN,EAAU8/E,GAAG,iBAAiB,SAAU/+D,GACtCA,EAAO7rD,QAAQq0F,SAAS,uCAC1B,IAEAvpD,EAAU8/E,GAAG,mBAAmB,SAAU/+D,GACxC3wC,EAAK61O,eAAellM,EACtB,IAEImpF,EAAE7sI,GAAG4qP,YACP51O,KAAK2zO,SAASlmI,GAAG,cAAc,SAAUt6E,GACvC,IAAItvC,EAAMka,EAAK41O,SAAStvP,YAEpBL,EAAS+Z,EAAK41O,SAAShqP,IAAI,GAAG+H,aAAe7N,EAAMsvC,EAAE0iN,OAErDnzI,EAAUvvE,EAAE0iN,OAAS,GAAKhyP,EAAMsvC,EAAE0iN,QAAU,EAC5CpzI,EAAatvE,EAAE0iN,OAAS,GAAK7xP,GAAU+Z,EAAK41O,SAASrwP,SAErDo/G,GACF3kG,EAAK41O,SAAStvP,UAAU,GAExB8uC,EAAE7E,iBACF6E,EAAEnW,mBACOylF,IACT1kG,EAAK41O,SAAStvP,UACZ0Z,EAAK41O,SAAShqP,IAAI,GAAG+H,aAAeqM,EAAK41O,SAASrwP,UAGpD6vC,EAAE7E,iBACF6E,EAAEnW,kBAEN,IAGFhd,KAAK2zO,SAASlmI,GAAG,UAAW,2CAC1B,SAAUjhE,GACV,IAAItxB,EAAQ28G,EAAE73H,MAEVzT,EAAO21O,EAAMqR,QAAQvzO,KAAM,QAEK,SAAhCkb,EAAMugC,KAAK,iBAaf19C,EAAK0/C,QAAQ,SAAU,CACrB2hF,cAAe5yF,EACfjgD,KAAMA,IAdFwR,EAAKhT,QAAQpB,IAAI,YACnBoU,EAAK0/C,QAAQ,WAAY,CACvB2hF,cAAe5yF,EACfjgD,KAAMA,IAGRwR,EAAK0/C,QAAQ,QAAS,CAAC,EAU7B,IAEAz9C,KAAK2zO,SAASlmI,GAAG,aAAc,2CAC7B,SAAUjhE,GACV,IAAIjgD,EAAO21O,EAAMqR,QAAQvzO,KAAM,QAE/BjC,EAAKq3O,wBACAn+J,YAAY,wCAEjBl5E,EAAK0/C,QAAQ,gBAAiB,CAC5BlxD,KAAMA,EACN1J,QAASg1I,EAAE73H,OAEf,GACF,EAEAyzO,EAAQj2O,UAAU43O,sBAAwB,WAIxC,OAHmBp1O,KAAK2zO,SACvBz7O,KAAK,wCAGR,EAEAu7O,EAAQj2O,UAAU3P,QAAU,WAC1BmS,KAAK2zO,SAAS1uN,QAChB,EAEAwuN,EAAQj2O,UAAU62O,uBAAyB,WACzC,IAAIc,EAAen1O,KAAKo1O,wBAExB,GAA4B,IAAxBD,EAAahrP,OAAjB,CAIA,IAEIkrP,EAFWr1O,KAAK2zO,SAASz7O,KAAK,mBAEN7K,MAAM8nP,GAE9BK,EAAgBx1O,KAAK2zO,SAAS7/O,SAASjQ,IACvC4xP,EAAUN,EAAarhP,SAASjQ,IAChC6xP,EAAa11O,KAAK2zO,SAAStvP,aAAeoxP,EAAUD,GAEpDM,EAAcL,EAAUD,EAC5BE,GAAgD,EAAlCP,EAAal0G,aAAY,GAEnCo0G,GAAgB,EAClBr1O,KAAK2zO,SAAStvP,UAAU,IACfyxP,EAAc91O,KAAK2zO,SAAS1yG,eAAiB60G,EAAc,IACpE91O,KAAK2zO,SAAStvP,UAAUqxP,EAhB1B,CAkBF,EAEAjC,EAAQj2O,UAAUoiD,SAAW,SAAU52D,EAAQ2kC,GAC7C,IAAIiyB,EAAW5/C,KAAKjV,QAAQpB,IAAI,kBAC5BkpP,EAAe7yO,KAAKjV,QAAQpB,IAAI,gBAEhC6qD,EAAUoL,EAAS52D,EAAQ2kC,GAEhB,MAAX6mB,EACF7mB,EAAU34B,MAAMyoK,QAAU,OACE,iBAAZjpH,EAChB7mB,EAAU3D,UAAY6oN,EAAar+L,GAEnCqjF,EAAElqG,GAAW3lB,OAAOwsC,EAExB,EAEOi/L,CACT,IAEA9E,EAAGvpL,OAAO,eAAe,IAEtB,WAqBD,MApBW,CACT2wL,UAAW,EACXC,IAAK,EACLC,MAAO,GACPC,MAAO,GACPC,KAAM,GACNC,IAAK,GACLC,IAAK,GACLC,MAAO,GACPC,QAAS,GACTC,UAAW,GACXC,IAAK,GACLC,KAAM,GACNC,KAAM,GACNC,GAAI,GACJC,MAAO,GACPC,KAAM,GACNC,OAAQ,GAIZ,IAEApI,EAAGvpL,OAAO,yBAAyB,CACjC,SACA,WACA,YACC,SAAUyyE,EAAGqqG,EAAO8U,GACrB,SAASC,EAAejE,EAAUjoP,GAChCiV,KAAKgzO,SAAWA,EAChBhzO,KAAKjV,QAAUA,EAEfksP,EAAcxF,UAAU5zO,YAAYG,KAAKgC,KAC3C,CAsKA,OApKAkiO,EAAMkP,OAAO6F,EAAe/U,EAAMmQ,YAElC4E,EAAcz5O,UAAU0rG,OAAS,WAC/B,IAAIguI,EAAar/G,EACf,uGAmBF,OAdA73H,KAAKm3O,UAAY,EAEsC,MAAnDjV,EAAMqR,QAAQvzO,KAAKgzO,SAAS,GAAI,gBAClChzO,KAAKm3O,UAAYjV,EAAMqR,QAAQvzO,KAAKgzO,SAAS,GAAI,gBACN,MAAlChzO,KAAKgzO,SAASv3L,KAAK,cAC5Bz7C,KAAKm3O,UAAYn3O,KAAKgzO,SAASv3L,KAAK,aAGtCy7L,EAAWz7L,KAAK,QAASz7C,KAAKgzO,SAASv3L,KAAK,UAC5Cy7L,EAAWz7L,KAAK,WAAYz7C,KAAKm3O,WACjCD,EAAWz7L,KAAK,gBAAiB,SAEjCz7C,KAAKk3O,WAAaA,EAEXA,CACT,EAEAD,EAAcz5O,UAAUkO,KAAO,SAAUiiB,EAAWsnN,GAClD,IAAIl3O,EAAOiC,KAEPo3O,EAAYzpN,EAAU9rB,GAAK,WAE/B7B,KAAK2tB,UAAYA,EAEjB3tB,KAAKk3O,WAAWzpI,GAAG,SAAS,SAAUjhE,GACpCzuC,EAAK0/C,QAAQ,QAASjR,EACxB,IAEAxsC,KAAKk3O,WAAWzpI,GAAG,QAAQ,SAAUjhE,GACnCzuC,EAAKs5O,YAAY7qM,EACnB,IAEAxsC,KAAKk3O,WAAWzpI,GAAG,WAAW,SAAUjhE,GACtCzuC,EAAK0/C,QAAQ,WAAYjR,GAErBA,EAAI6O,QAAU27L,EAAKV,OACrB9pM,EAAIle,gBAER,IAEAX,EAAU8/E,GAAG,iBAAiB,SAAU/+D,GACtC3wC,EAAKm5O,WAAWz7L,KAAK,wBAAyB/M,EAAOniD,KAAKqoP,UAC5D,IAEAjnN,EAAU8/E,GAAG,oBAAoB,SAAU/+D,GACzC3wC,EAAK/Q,OAAO0hD,EAAOniD,KACrB,IAEAohC,EAAU8/E,GAAG,QAAQ,WAEnB1vG,EAAKm5O,WAAWz7L,KAAK,gBAAiB,QACtC19C,EAAKm5O,WAAWz7L,KAAK,YAAa27L,GAElCr5O,EAAKu5O,oBAAoB3pN,EAC3B,IAEAA,EAAU8/E,GAAG,SAAS,WAEpB1vG,EAAKm5O,WAAWz7L,KAAK,gBAAiB,SACtC19C,EAAKm5O,WAAWppE,WAAW,yBAC3B/vK,EAAKm5O,WAAWppE,WAAW,aAE3B/vK,EAAKm5O,WAAWz5L,QAAQ,SAExB1/C,EAAKw5O,oBAAoB5pN,EAC3B,IAEAA,EAAU8/E,GAAG,UAAU,WACrB1vG,EAAKm5O,WAAWz7L,KAAK,WAAY19C,EAAKo5O,WACtCp5O,EAAKm5O,WAAWz7L,KAAK,gBAAiB,QACxC,IAEA9tB,EAAU8/E,GAAG,WAAW,WACtB1vG,EAAKm5O,WAAWz7L,KAAK,WAAY,MACjC19C,EAAKm5O,WAAWz7L,KAAK,gBAAiB,OACxC,GACF,EAEAw7L,EAAcz5O,UAAU65O,YAAc,SAAU7qM,GAC9C,IAAIzuC,EAAOiC,KAIX/e,OAAOs/B,YAAW,WAGb57B,SAASkpE,eAAiB9vD,EAAKm5O,WAAW,IAC1Cr/G,EAAErnI,SAASuN,EAAKm5O,WAAW,GAAIvyP,SAASkpE,gBAK3C9vD,EAAK0/C,QAAQ,OAAQjR,EACvB,GAAG,EACL,EAEAyqM,EAAcz5O,UAAU85O,oBAAsB,SAAU3pN,GAEtDkqG,EAAElzI,SAAS6B,MAAMinH,GAAG,qBAAuB9/E,EAAU9rB,IAAI,SAAUsxB,GACjE,IAEIqkN,EAFU3/G,EAAE1kG,EAAErsC,QAEI2sJ,QAAQ,YAEnB5b,EAAE,oCAERhW,MAAK,WACJ7hH,MAAQw3O,EAAQ,IAILtV,EAAMqR,QAAQvzO,KAAM,WAE1B4uO,QAAQ,QACnB,GACF,GACF,EAEAqI,EAAcz5O,UAAU+5O,oBAAsB,SAAU5pN,GACtDkqG,EAAElzI,SAAS6B,MAAMkoH,IAAI,qBAAuB/gF,EAAU9rB,GACxD,EAEAo1O,EAAcz5O,UAAUrW,SAAW,SAAU+vP,EAAYjC,GAC7BA,EAAW/8O,KAAK,cACtB8P,OAAOkvO,EAC7B,EAEAD,EAAcz5O,UAAU3P,QAAU,WAChCmS,KAAKu3O,oBAAoBv3O,KAAK2tB,UAChC,EAEAspN,EAAcz5O,UAAUxQ,OAAS,SAAUT,GACzC,MAAM,IAAIye,MAAM,wDAClB,EASAisO,EAAcz5O,UAAUyxC,UAAY,WAClC,OAAQjvC,KAAKuxJ,YACf,EAQA0lF,EAAcz5O,UAAU+zJ,WAAa,WACnC,OAAOvxJ,KAAKjV,QAAQpB,IAAI,WAC1B,EAEOstP,CACT,IAEAtI,EAAGvpL,OAAO,2BAA2B,CACnC,SACA,SACA,WACA,YACC,SAAUyyE,EAAGo/G,EAAe/U,EAAO8U,GACpC,SAASS,IACPA,EAAgBhG,UAAU5zO,YAAYkK,MAAM/H,KAAM9V,UACpD,CAiGA,OA/FAg4O,EAAMkP,OAAOqG,EAAiBR,GAE9BQ,EAAgBj6O,UAAU0rG,OAAS,WACjC,IAAIguI,EAAaO,EAAgBhG,UAAUvoI,OAAOlrG,KAAKgC,MAWvD,OATAk3O,EAAWhgK,SAAS,6BAEpBggK,EAAWhmP,KACT,kJAMKgmP,CACT,EAEAO,EAAgBj6O,UAAUkO,KAAO,SAAUiiB,EAAWsnN,GACpD,IAAIl3O,EAAOiC,KAEXy3O,EAAgBhG,UAAU/lO,KAAK3D,MAAM/H,KAAM9V,WAE3C,IAAI2X,EAAK8rB,EAAU9rB,GAAK,aAExB7B,KAAKk3O,WAAWh/O,KAAK,gCAClBujD,KAAK,KAAM55C,GACX45C,KAAK,OAAQ,WACbA,KAAK,gBAAiB,QACzBz7C,KAAKk3O,WAAWz7L,KAAK,kBAAmB55C,GAExC7B,KAAKk3O,WAAWzpI,GAAG,aAAa,SAAUjhE,GAEtB,IAAdA,EAAI6O,OAIRt9C,EAAK0/C,QAAQ,SAAU,CACrB2hF,cAAe5yF,GAEnB,IAEAxsC,KAAKk3O,WAAWzpI,GAAG,SAAS,SAAUjhE,GAEtC,IAEAxsC,KAAKk3O,WAAWzpI,GAAG,QAAQ,SAAUjhE,GAErC,IAEA7e,EAAU8/E,GAAG,SAAS,SAAUjhE,GACzB7e,EAAUunN,UACbn3O,EAAKm5O,WAAWz5L,QAAQ,QAE5B,GACF,EAEAg6L,EAAgBj6O,UAAUgf,MAAQ,WAChC,IAAIk7N,EAAY13O,KAAKk3O,WAAWh/O,KAAK,gCACrCw/O,EAAU1jG,QACV0jG,EAAU5pE,WAAW,QACvB,EAEA2pE,EAAgBj6O,UAAUigK,QAAU,SAAUlxK,EAAMohC,GAClD,IAAIiyB,EAAW5/C,KAAKjV,QAAQpB,IAAI,qBAGhC,OAFmBqW,KAAKjV,QAAQpB,IAAI,eAE7BkpP,CAAajzL,EAASrzD,EAAMohC,GACrC,EAEA8pN,EAAgBj6O,UAAUm6O,mBAAqB,WAC7C,OAAO9/G,EAAE,gBACX,EAEA4/G,EAAgBj6O,UAAUxQ,OAAS,SAAUT,GAC3C,GAAoB,IAAhBA,EAAKpC,OAAT,CAKA,IAAIu1K,EAAYnzK,EAAK,GAEjBmrP,EAAY13O,KAAKk3O,WAAWh/O,KAAK,gCACjCkoI,EAAYpgI,KAAKy9J,QAAQiC,EAAWg4E,GAExCA,EAAU1jG,QAAQhsI,OAAOo4H,GAEzB,IAAI52G,EAAQk2I,EAAUl2I,OAASk2I,EAAUptJ,KAErCkX,EACFkuN,EAAUj8L,KAAK,QAASjyB,GAExBkuN,EAAU5pE,WAAW,QAdvB,MAFE9tK,KAAKwc,OAkBT,EAEOi7N,CACT,IAEA9I,EAAGvpL,OAAO,6BAA6B,CACrC,SACA,SACA,aACC,SAAUyyE,EAAGo/G,EAAe/U,GAC7B,SAAS0V,EAAmB5E,EAAUjoP,GACpC6sP,EAAkBnG,UAAU5zO,YAAYkK,MAAM/H,KAAM9V,UACtD,CA2GA,OAzGAg4O,EAAMkP,OAAOwG,EAAmBX,GAEhCW,EAAkBp6O,UAAU0rG,OAAS,WACnC,IAAIguI,EAAaU,EAAkBnG,UAAUvoI,OAAOlrG,KAAKgC,MAQzD,OANAk3O,EAAWhgK,SAAS,+BAEpBggK,EAAWhmP,KACT,iDAGKgmP,CACT,EAEAU,EAAkBp6O,UAAUkO,KAAO,SAAUiiB,EAAWsnN,GACtD,IAAIl3O,EAAOiC,KAEX43O,EAAkBnG,UAAU/lO,KAAK3D,MAAM/H,KAAM9V,WAE7C8V,KAAKk3O,WAAWzpI,GAAG,SAAS,SAAUjhE,GACpCzuC,EAAK0/C,QAAQ,SAAU,CACrB2hF,cAAe5yF,GAEnB,IAEAxsC,KAAKk3O,WAAWzpI,GACd,QACA,sCACA,SAAUjhE,GAER,IAAIzuC,EAAKwzJ,aAAT,CAIA,IACI2lF,EADUr/G,EAAE73H,MACSvP,SAErBlE,EAAO21O,EAAMqR,QAAQ2D,EAAW,GAAI,QAExCn5O,EAAK0/C,QAAQ,WAAY,CACvB2hF,cAAe5yF,EACfjgD,KAAMA,GATR,CAWF,GAEJ,EAEAqrP,EAAkBp6O,UAAUgf,MAAQ,WAClC,IAAIk7N,EAAY13O,KAAKk3O,WAAWh/O,KAAK,gCACrCw/O,EAAU1jG,QACV0jG,EAAU5pE,WAAW,QACvB,EAEA8pE,EAAkBp6O,UAAUigK,QAAU,SAAUlxK,EAAMohC,GACpD,IAAIiyB,EAAW5/C,KAAKjV,QAAQpB,IAAI,qBAGhC,OAFmBqW,KAAKjV,QAAQpB,IAAI,eAE7BkpP,CAAajzL,EAASrzD,EAAMohC,GACrC,EAEAiqN,EAAkBp6O,UAAUm6O,mBAAqB,WAS/C,OARiB9/G,EACf,gIAQJ,EAEA+/G,EAAkBp6O,UAAUxQ,OAAS,SAAUT,GAG7C,GAFAyT,KAAKwc,QAEe,IAAhBjwB,EAAKpC,OAAT,CAMA,IAFA,IAAI0tP,EAAc,GAETnnN,EAAI,EAAGA,EAAInkC,EAAKpC,OAAQumC,IAAK,CACpC,IAAIgvI,EAAYnzK,EAAKmkC,GAEjBwmN,EAAal3O,KAAK23O,qBAClBv3G,EAAYpgI,KAAKy9J,QAAQiC,EAAWw3E,GAExCA,EAAWlvO,OAAOo4H,GAElB,IAAI52G,EAAQk2I,EAAUl2I,OAASk2I,EAAUptJ,KAErCkX,GACF0tN,EAAWz7L,KAAK,QAASjyB,GAG3B04M,EAAMoR,UAAU4D,EAAW,GAAI,OAAQx3E,GAEvCm4E,EAAYjuP,KAAKstP,EACnB,CAEA,IAAIQ,EAAY13O,KAAKk3O,WAAWh/O,KAAK,gCAErCgqO,EAAM6Q,WAAW2E,EAAWG,EAzB5B,CA0BF,EAEOD,CACT,IAEAjJ,EAAGvpL,OAAO,gCAAgC,CACxC,aACC,SAAU88K,GACX,SAAS4V,EAAaC,EAAW/E,EAAUjoP,GACzCiV,KAAKskL,YAActkL,KAAKg4O,qBAAqBjtP,EAAQpB,IAAI,gBAEzDouP,EAAU/5O,KAAKgC,KAAMgzO,EAAUjoP,EACjC,CAwCA,OAtCA+sP,EAAYt6O,UAAUw6O,qBAAuB,SAAUn5O,EAAGylL,GAQxD,MAP2B,iBAAhBA,IACTA,EAAc,CACZziL,GAAI,GACJyQ,KAAMgyK,IAIHA,CACT,EAEAwzD,EAAYt6O,UAAUy6O,kBAAoB,SAAUF,EAAWzzD,GAC7D,IAAI4zD,EAAel4O,KAAK23O,qBAMxB,OAJAO,EAAahnP,KAAK8O,KAAKy9J,QAAQ6mB,IAC/B4zD,EAAahhK,SAAS,kCACTD,YAAY,6BAElBihK,CACT,EAEAJ,EAAYt6O,UAAUxQ,OAAS,SAAU+qP,EAAWxrP,GAClD,IAAI4rP,EACa,GAAf5rP,EAAKpC,QAAeoC,EAAK,GAAGsV,IAAM7B,KAAKskL,YAAYziL,GAIrD,GAFyBtV,EAAKpC,OAAS,GAEbguP,EACxB,OAAOJ,EAAU/5O,KAAKgC,KAAMzT,GAG9ByT,KAAKwc,QAEL,IAAI07N,EAAel4O,KAAKi4O,kBAAkBj4O,KAAKskL,aAE/CtkL,KAAKk3O,WAAWh/O,KAAK,gCAAgC8P,OAAOkwO,EAC9D,EAEOJ,CACT,IAEAnJ,EAAGvpL,OAAO,+BAA+B,CACvC,SACA,UACA,aACC,SAAUyyE,EAAGm/G,EAAM9U,GACpB,SAASkW,IAAgB,CA0GzB,OAxGAA,EAAW56O,UAAUkO,KAAO,SAAUqsO,EAAWpqN,EAAWsnN,GAC1D,IAAIl3O,EAAOiC,KAEX+3O,EAAU/5O,KAAKgC,KAAM2tB,EAAWsnN,GAER,MAApBj1O,KAAKskL,aACHtkL,KAAKjV,QAAQpB,IAAI,UAAY1I,OAAOwoB,SAAWA,QAAQC,OACzDD,QAAQC,MACN,iGAMN1J,KAAKk3O,WAAWzpI,GAAG,YAAa,6BAC9B,SAAUjhE,GACRzuC,EAAKs6O,aAAa7rM,EACtB,IAEA7e,EAAU8/E,GAAG,YAAY,SAAUjhE,GACjCzuC,EAAKu6O,qBAAqB9rM,EAAK7e,EACjC,GACF,EAEAyqN,EAAW56O,UAAU66O,aAAe,SAAUx5O,EAAG2tC,GAE/C,IAAIxsC,KAAKuxJ,aAAT,CAIA,IAAIgnF,EAASv4O,KAAKk3O,WAAWh/O,KAAK,6BAGlC,GAAsB,IAAlBqgP,EAAOpuP,OAAX,CAIAqiD,EAAIxvB,kBAEJ,IAAIzwB,EAAO21O,EAAMqR,QAAQgF,EAAO,GAAI,QAEhCC,EAAcx4O,KAAKgzO,SAAS9+N,MAChClU,KAAKgzO,SAAS9+N,IAAIlU,KAAKskL,YAAYziL,IAEnC,IAAI42O,EAAe,CACjBlsP,KAAMA,GAGR,GADAyT,KAAKy9C,QAAQ,QAASg7L,GAClBA,EAAaC,UACf14O,KAAKgzO,SAAS9+N,IAAIskO,OADpB,CAKA,IAAK,IAAI9nN,EAAI,EAAGA,EAAInkC,EAAKpC,OAAQumC,IAU/B,GATA+nN,EAAe,CACblsP,KAAMA,EAAKmkC,IAKb1wB,KAAKy9C,QAAQ,WAAYg7L,GAGrBA,EAAaC,UAEf,YADA14O,KAAKgzO,SAAS9+N,IAAIskO,GAKtBx4O,KAAKgzO,SAASv1L,QAAQ,SAASA,QAAQ,UAEvCz9C,KAAKy9C,QAAQ,SAAU,CAAC,EApBxB,CAhBA,CAPA,CA4CF,EAEA26L,EAAW56O,UAAU86O,qBAAuB,SAAUz5O,EAAG2tC,EAAK7e,GACxDA,EAAUunN,UAIV1oM,EAAI6O,OAAS27L,EAAKD,QAAUvqM,EAAI6O,OAAS27L,EAAKjB,WAChD/1O,KAAKq4O,aAAa7rM,EAEtB,EAEA4rM,EAAW56O,UAAUxQ,OAAS,SAAU+qP,EAAWxrP,GAGjD,GAFAwrP,EAAU/5O,KAAKgC,KAAMzT,KAEjByT,KAAKk3O,WAAWh/O,KAAK,mCAAmC/N,OAAS,GACjD,IAAhBoC,EAAKpC,QADT,CAKA,IAAIwiF,EAAY3sE,KAAKjV,QAAQpB,IAAI,gBAAgBA,IAAI,kBAEjDgvP,EAAU9gH,EACZ,iDAAmDlrD,IAAnD,oBAIFu1J,EAAMoR,UAAUqF,EAAQ,GAAI,OAAQpsP,GAEpCyT,KAAKk3O,WAAWh/O,KAAK,gCAAgC4P,QAAQ6wO,EAX7D,CAYF,EAEOP,CACT,IAEAzJ,EAAGvpL,OAAO,2BAA2B,CACnC,SACA,WACA,YACC,SAAUyyE,EAAGqqG,EAAO8U,GACrB,SAAS4B,EAAQb,EAAW/E,EAAUjoP,GACpCgtP,EAAU/5O,KAAKgC,KAAMgzO,EAAUjoP,EACjC,CAmOA,OAjOA6tP,EAAOp7O,UAAU0rG,OAAS,SAAU6uI,GAClC,IAAIc,EAAUhhH,EACZ,sPAOF73H,KAAK84O,iBAAmBD,EACxB74O,KAAK64O,QAAUA,EAAQ3gP,KAAK,SAE5B,IAAIw/O,EAAYK,EAAU/5O,KAAKgC,MAI/B,OAFAA,KAAK+4O,oBAEErB,CACT,EAEAkB,EAAOp7O,UAAUkO,KAAO,SAAUqsO,EAAWpqN,EAAWsnN,GACtD,IAAIl3O,EAAOiC,KAEPo3O,EAAYzpN,EAAU9rB,GAAK,WAE/Bk2O,EAAU/5O,KAAKgC,KAAM2tB,EAAWsnN,GAEhCtnN,EAAU8/E,GAAG,QAAQ,WACnB1vG,EAAK86O,QAAQp9L,KAAK,gBAAiB27L,GACnCr5O,EAAK86O,QAAQp7L,QAAQ,QACvB,IAEA9vB,EAAU8/E,GAAG,SAAS,WACpB1vG,EAAK86O,QAAQ3kO,IAAI,IACjBnW,EAAK86O,QAAQ/qE,WAAW,iBACxB/vK,EAAK86O,QAAQ/qE,WAAW,yBACxB/vK,EAAK86O,QAAQp7L,QAAQ,QACvB,IAEA9vB,EAAU8/E,GAAG,UAAU,WACrB1vG,EAAK86O,QAAQzrN,KAAK,YAAY,GAE9BrvB,EAAKg7O,mBACP,IAEAprN,EAAU8/E,GAAG,WAAW,WACtB1vG,EAAK86O,QAAQzrN,KAAK,YAAY,EAChC,IAEAO,EAAU8/E,GAAG,SAAS,SAAUjhE,GAC9BzuC,EAAK86O,QAAQp7L,QAAQ,QACvB,IAEA9vB,EAAU8/E,GAAG,iBAAiB,SAAU/+D,GAClCA,EAAOniD,KAAKqoP,UACd72O,EAAK86O,QAAQp9L,KAAK,wBAAyB/M,EAAOniD,KAAKqoP,WAEvD72O,EAAK86O,QAAQ/qE,WAAW,wBAE5B,IAEA9tK,KAAKk3O,WAAWzpI,GAAG,UAAW,2BAA2B,SAAUjhE,GACjEzuC,EAAK0/C,QAAQ,QAASjR,EACxB,IAEAxsC,KAAKk3O,WAAWzpI,GAAG,WAAY,2BAA2B,SAAUjhE,GAClEzuC,EAAKs5O,YAAY7qM,EACnB,IAEAxsC,KAAKk3O,WAAWzpI,GAAG,UAAW,2BAA2B,SAAUjhE,GASjE,GARAA,EAAIxvB,kBAEJjf,EAAK0/C,QAAQ,WAAYjR,GAEzBzuC,EAAKi7O,gBAAkBxsM,EAAI+1H,qBAEjB/1H,EAAI6O,QAEF27L,EAAKjB,WAAoC,KAAvBh4O,EAAK86O,QAAQ3kO,MAAc,CACvD,IAAI+kO,EAAkBl7O,EAAK+6O,iBACxBz3K,KAAK,8BAER,GAAI43K,EAAgB9uP,OAAS,EAAG,CAC9B,IAAI9H,EAAO6/O,EAAMqR,QAAQ0F,EAAgB,GAAI,QAE7Cl7O,EAAKm7O,mBAAmB72P,GAExBmqD,EAAIle,gBACN,CACF,CACF,IAEAtuB,KAAKk3O,WAAWzpI,GAAG,QAAS,2BAA2B,SAAUjhE,GAC3DzuC,EAAK86O,QAAQ3kO,OACfs4B,EAAIxvB,iBAER,IAOA,IAAIm8N,EAAOx0P,SAASy0P,aAChBC,EAAqBF,GAAQA,GAAQ,GAKzCn5O,KAAKk3O,WAAWzpI,GACd,oBACA,2BACA,SAAUjhE,GAIJ6sM,EACFt7O,EAAKm5O,WAAWxoI,IAAI,kCAKtB3wG,EAAKm5O,WAAWxoI,IAAI,eACtB,IAGF1uG,KAAKk3O,WAAWzpI,GACd,4BACA,2BACA,SAAUjhE,GAIR,GAAI6sM,GAAmC,UAAb7sM,EAAI7jC,KAC5B5K,EAAKm5O,WAAWxoI,IAAI,sCADtB,CAKA,IAAIjiH,EAAM+/C,EAAI6O,MAGV5uD,GAAOuqP,EAAKd,OAASzpP,GAAOuqP,EAAKb,MAAQ1pP,GAAOuqP,EAAKZ,KAKrD3pP,GAAOuqP,EAAKhB,KAIhBj4O,EAAKu7O,aAAa9sM,EAdlB,CAeF,GAEJ,EASAosM,EAAOp7O,UAAUu7O,kBAAoB,SAAUhB,GAC7C/3O,KAAK64O,QAAQp9L,KAAK,WAAYz7C,KAAKk3O,WAAWz7L,KAAK,aACnDz7C,KAAKk3O,WAAWz7L,KAAK,WAAY,KACnC,EAEAm9L,EAAOp7O,UAAUy6O,kBAAoB,SAAUF,EAAWzzD,GACxDtkL,KAAK64O,QAAQp9L,KAAK,cAAe6oI,EAAYhyK,KAC/C,EAEAsmO,EAAOp7O,UAAUxQ,OAAS,SAAU+qP,EAAWxrP,GAC7C,IAAIgtP,EAAiBv5O,KAAK64O,QAAQ,IAAMl0P,SAASkpE,cAEjD7tD,KAAK64O,QAAQp9L,KAAK,cAAe,IAEjCs8L,EAAU/5O,KAAKgC,KAAMzT,GAErByT,KAAKk3O,WAAWh/O,KAAK,gCACL8P,OAAOhI,KAAK84O,kBAE5B94O,KAAKw5O,eACDD,GACFv5O,KAAK64O,QAAQp7L,QAAQ,QAEzB,EAEAm7L,EAAOp7O,UAAU87O,aAAe,WAG9B,GAFAt5O,KAAKw5O,gBAEAx5O,KAAKg5O,gBAAiB,CACzB,IAAI1hK,EAAQt3E,KAAK64O,QAAQ3kO,MAEzBlU,KAAKy9C,QAAQ,QAAS,CACpBg8L,KAAMniK,GAEV,CAEAt3E,KAAKg5O,iBAAkB,CACzB,EAEAJ,EAAOp7O,UAAU07O,mBAAqB,SAAUnB,EAAW11P,GACzD2d,KAAKy9C,QAAQ,WAAY,CACvBlxD,KAAMlK,IAGR2d,KAAK64O,QAAQ3kO,IAAI7xB,EAAKiwB,MACtBtS,KAAKs5O,cACP,EAEAV,EAAOp7O,UAAUg8O,aAAe,WAC9Bx5O,KAAK64O,QAAQtxP,IAAI,QAAS,QAE1B,IAAInE,EAGFA,EADuC,KAArC4c,KAAK64O,QAAQp9L,KAAK,eACZz7C,KAAKk3O,WAAWh/O,KAAK,gCAAgC9U,QAIrC,KAFL4c,KAAK64O,QAAQ3kO,MAAM/pB,OAAS,GAEf,KAGlC6V,KAAK64O,QAAQtxP,IAAI,QAASnE,EAC5B,EAEOw1P,CACT,IAEAjK,EAAGvpL,OAAO,+BAA+B,CACvC,WACC,SAAUyyE,GACX,SAAS6hH,IAAgB,CA2CzB,OAzCAA,EAAWl8O,UAAUkO,KAAO,SAAUqsO,EAAWpqN,EAAWsnN,GAC1D,IAAIl3O,EAAOiC,KACP25O,EAAc,CAChB,OAAQ,UACR,QAAS,UACT,SAAU,YACV,WAAY,cACZ,QAAS,YAGPC,EAAoB,CACtB,UAAW,UAAW,YAAa,cAAe,YAGpD7B,EAAU/5O,KAAKgC,KAAM2tB,EAAWsnN,GAEhCtnN,EAAU8/E,GAAG,KAAK,SAAUrkH,EAAMslD,GAEhC,IAAsC,IAAlCmpF,EAAE0D,QAAQnyI,EAAMuwP,GAApB,CAKAjrM,EAASA,GAAU,CAAC,EAGpB,IAAIlC,EAAMqrF,EAAE1tE,MAAM,WAAa/gE,EAAM,CACnCslD,OAAQA,IAGV3wC,EAAKi1O,SAASv1L,QAAQjR,IAGsB,IAAxCqrF,EAAE0D,QAAQnyI,EAAMwwP,KAIpBlrM,EAAOgqM,UAAYlsM,EAAI+1H,qBAjBvB,CAkBF,GACF,EAEOm3E,CACT,IAEA/K,EAAGvpL,OAAO,sBAAsB,CAC9B,SACA,YACC,SAAUyyE,EAAG6oD,GACd,SAASm5D,EAAaC,GACpB95O,KAAK85O,KAAOA,GAAQ,CAAC,CACvB,CA4BA,OA1BAD,EAAYr8O,UAAUoD,IAAM,WAC1B,OAAOZ,KAAK85O,IACd,EAEAD,EAAYr8O,UAAU7T,IAAM,SAAU8C,GACpC,OAAOuT,KAAK85O,KAAKrtP,EACnB,EAEAotP,EAAYr8O,UAAUo5C,OAAS,SAAUmjM,GACvC/5O,KAAK85O,KAAOjiH,EAAEjhF,OAAO,CAAC,EAAGmjM,EAAYn5O,MAAOZ,KAAK85O,KACnD,EAIAD,EAAYG,OAAS,CAAC,EAEtBH,EAAYI,SAAW,SAAUl9N,GAC/B,KAAMA,KAAQ88N,EAAYG,QAAS,CACjC,IAAIE,EAAex5D,EAAQ3jK,GAE3B88N,EAAYG,OAAOj9N,GAAQm9N,CAC7B,CAEA,OAAO,IAAIL,EAAYA,EAAYG,OAAOj9N,GAC5C,EAEO88N,CACT,IAEAlL,EAAGvpL,OAAO,qBAAqB,IAE5B,WA80BD,MA70BiB,CACf,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,KACV,EAAU,KACV,EAAU,KACV,EAAU,KACV,EAAU,KACV,EAAU,KACV,EAAU,KACV,EAAU,KACV,EAAU,KACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,KACV,EAAU,KACV,EAAU,KACV,EAAU,KACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,KACV,EAAU,KACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,KACV,EAAU,KACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,KACV,EAAU,KACV,EAAU,KACV,EAAU,KACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,KACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,KACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,KACV,EAAU,KACV,EAAU,KACV,EAAU,KACV,EAAU,KACV,EAAU,KACV,EAAU,KACV,EAAU,KACV,EAAU,KACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,KACV,EAAU,KACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,KACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,KACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,KACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,KACV,EAAU,KACV,EAAU,KACV,EAAU,KACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,KACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,KACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV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IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,KACV,EAAU,KACV,EAAU,KACV,EAAU,KACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,KACV,EAAU,KACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,KACV,EAAU,KACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,KACV,EAAU,KACV,EAAU,KACV,EAAU,KACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,KACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,KACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,KACV,EAAU,KACV,EAAU,KACV,EAAU,KACV,EAAU,KACV,EAAU,KACV,EAAU,KACV,EAAU,KACV,EAAU,KACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,KACV,EAAU,KACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,KACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,KACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,KACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,KACV,EAAU,KACV,EAAU,KACV,EAAU,KACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,KACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,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","sources":["webpack://free-floating-web-admin/./node_modules/@popperjs/core/lib/dom-utils/getWindow.js","webpack://free-floating-web-admin/./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js","webpack://free-floating-web-admin/./node_modules/@popperjs/core/lib/utils/math.js","webpack://free-floating-web-admin/./node_modules/@popperjs/core/lib/utils/userAgent.js","webpack://free-floating-web-admin/./node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js","webpack://free-floating-web-admin/./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js","webpack://free-floating-web-admin/./node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js","webpack://free-floating-web-admin/./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js","webpack://free-floating-web-admin/./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js","webpack://free-floating-web-admin/./node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js","webpack://free-floating-web-admin/./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js","webpack://free-floating-web-admin/./node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js","webpack://free-floating-web-admin/./node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js","webpack://free-floating-web-admin/./node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js","webpack://free-floating-web-admin/./node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js","webpack://free-floating-web-admin/./node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js","webpack://free-floating-web-admin/./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js","webpack://free-floating-web-admin/./node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js","webpack://free-floating-web-admin/./node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js","webpack://free-floating-web-admin/./node_modules/@popperjs/core/lib/dom-utils/isTableElement.js","webpack://free-floating-web-admin/./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js","webpack://free-floating-web-admin/./node_modules/@popperjs/core/lib/enums.js","webpack://free-floating-web-admin/./node_modules/@popperjs/core/lib/utils/orderModifiers.js","webpack://free-floating-web-admin/./node_modules/@popperjs/core/lib/createPopper.js","webpack://free-floating-web-admin/./node_modules/@popperjs/core/lib/utils/debounce.js","webpack://free-floating-web-admin/./node_modules/@popperjs/core/lib/utils/mergeByName.js","webpack://free-floating-web-admin/./node_modules/@popperjs/core/lib/modifiers/eventListeners.js","webpack://free-floating-web-admin/./node_modules/@popperjs/core/lib/utils/getBasePlacement.js","webpack://free-floating-web-admin/./node_modules/@popperjs/core/lib/utils/getVariation.js","webpack://free-floating-web-admin/./node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js","webpack://free-floating-web-admin/./node_modules/@popperjs/core/lib/utils/computeOffsets.js","webpack://free-floating-web-admin/./node_modules/@popperjs/core/lib/modifiers/computeStyles.js","webpack://free-floating-web-admin/./node_modules/@popperjs/core/lib/utils/getOppositePlacement.js","webpack://free-floating-web-admin/./node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js","webpack://free-floating-web-admin/./node_modules/@popperjs/core/lib/dom-utils/contains.js","webpack://free-floating-web-admin/./node_modules/@popperjs/core/lib/utils/rectToClientRect.js","webpack://free-floating-web-admin/./node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js","webpack://free-floating-web-admin/./node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js","webpack://free-floating-web-admin/./node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js","webpack://free-floating-web-admin/./node_modules/@popperjs/core/lib/utils/mergePaddingObject.js","webpack://free-floating-web-admin/./node_modules/@popperjs/core/lib/utils/getFreshSideObject.js","webpack://free-floating-web-admin/./node_modules/@popperjs/core/lib/utils/expandToHashMap.js","webpack://free-floating-web-admin/./node_modules/@popperjs/core/lib/utils/detectOverflow.js","webpack://free-floating-web-admin/./node_modules/@popperjs/core/lib/utils/within.js","webpack://free-floating-web-admin/./node_modules/@popperjs/core/lib/modifiers/hide.js","webpack://free-floating-web-admin/./node_modules/@popperjs/core/lib/popper.js","webpack://free-floating-web-admin/./node_modules/@popperjs/core/lib/modifiers/popperOffsets.js","webpack://free-floating-web-admin/./node_modules/@popperjs/core/lib/modifiers/applyStyles.js","webpack://free-floating-web-admin/./node_modules/@popperjs/core/lib/modifiers/offset.js","webpack://free-floating-web-admin/./node_modules/@popperjs/core/lib/modifiers/flip.js","webpack://free-floating-web-admin/./node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js","webpack://free-floating-web-admin/./node_modules/@popperjs/core/lib/modifiers/preventOverflow.js","webpack://free-floating-web-admin/./node_modules/@popperjs/core/lib/utils/getAltAxis.js","webpack://free-floating-web-admin/./node_modules/@popperjs/core/lib/modifiers/arrow.js","webpack://free-floating-web-admin/./node_modules/aurelia-binding/dist/native-modules/aurelia-binding.js","webpack://free-floating-web-admin/./node_modules/aurelia-polyfills/dist/native-modules/aurelia-polyfills.js","webpack://free-floating-web-admin/./node_modules/aurelia-bootstrapper/dist/native-modules/aurelia-bootstrapper.js","webpack://free-floating-web-admin/./node_modules/aurelia-dependency-injection/dist/native-modules/aurelia-dependency-injection.js","webpack://free-floating-web-admin/./node_modules/aurelia-dialog/dist/native-modules/aurelia-dialog.js","webpack://free-floating-web-admin/./node_modules/aurelia-dialog/dist/native-modules/chunk.js","webpack://free-floating-web-admin/./node_modules/aurelia-event-aggregator/dist/native-modules/aurelia-event-aggregator.js","webpack://free-floating-web-admin/./node_modules/aurelia-framework/dist/native-modules/aurelia-framework.js","webpack://free-floating-web-admin/./node_modules/aurelia-google-maps/dist/native-modules/configure.js","webpack://free-floating-web-admin/./node_modules/aurelia-google-maps/dist/native-modules/google-maps-api.js","webpack://free-floating-web-admin/./node_modules/aurelia-google-maps/dist/native-modules/marker-clustering.js","webpack://free-floating-web-admin/./node_modules/aurelia-google-maps/dist/native-modules/events.js","webpack://free-floating-web-admin/./node_modules/aurelia-google-maps/dist/native-modules/google-maps.js","webpack://free-floating-web-admin/./node_modules/aurelia-google-maps/dist/native-modules/index.js","webpack://free-floating-web-admin/./node_modules/aurelia-history-browser/dist/native-modules/aurelia-history-browser.js","webpack://free-floating-web-admin/./node_modules/aurelia-history/dist/native-modules/aurelia-history.js","webpack://free-floating-web-admin/./node_modules/aurelia-loader-webpack/dist/native-modules/aurelia-loader-webpack.js","webpack://free-floating-web-admin/./node_modules/aurelia-loader/dist/native-modules/aurelia-loader.js","webpack://free-floating-web-admin/./node_modules/aurelia-logging-console/dist/native-modules/aurelia-logging-console.js","webpack://free-floating-web-admin/./node_modules/aurelia-logging/dist/native-modules/aurelia-logging.js","webpack://free-floating-web-admin/./node_modules/aurelia-metadata/dist/native-modules/aurelia-metadata.js","webpack://free-floating-web-admin/./node_modules/aurelia-pal-browser/dist/native-modules/aurelia-pal-browser.js","webpack://free-floating-web-admin/./node_modules/aurelia-pal/dist/native-modules/aurelia-pal.js","webpack://free-floating-web-admin/./node_modules/aurelia-path/dist/native-modules/aurelia-path.js","webpack://free-floating-web-admin/./node_modules/aurelia-route-recognizer/dist/native-modules/aurelia-route-recognizer.js","webpack://free-floating-web-admin/./node_modules/aurelia-router/dist/native-modules/aurelia-router.js","webpack://free-floating-web-admin/./node_modules/aurelia-task-queue/dist/native-modules/aurelia-task-queue.js","webpack://free-floating-web-admin/./node_modules/aurelia-templating-binding/dist/native-modules/aurelia-templating-binding.js","webpack://free-floating-web-admin/./node_modules/aurelia-templating-resources/dist/native-modules/aurelia-templating-resources.js","webpack://free-floating-web-admin/./node_modules/aurelia-templating-router/dist/native-modules/aurelia-templating-router.js","webpack://free-floating-web-admin/./node_modules/aurelia-templating/dist/native-modules/aurelia-templating.js","webpack://free-floating-web-admin/./node_modules/aurelia-ui-virtualization/dist/native-modules/aurelia-ui-virtualization.js","webpack://free-floating-web-admin/./node_modules/aurelia-validation/dist/native-modules/aurelia-validation.js","webpack://free-floating-web-admin/./node_modules/aurelia-webpack-plugin/runtime/pal-loader-entry.js","webpack://free-floating-web-admin/./node_modules/bluebird/js/browser/bluebird.js","webpack://free-floating-web-admin/./node_modules/bootstrap-datepicker/dist/js/bootstrap-datepicker.js","webpack://free-floating-web-admin/./node_modules/bootstrap-datepicker/dist/locales/bootstrap-datepicker.de.min.js","webpack://free-floating-web-admin/./node_modules/bootstrap-datepicker/dist/locales/bootstrap-datepicker.hu.min.js","webpack://free-floating-web-admin/./node_modules/call-bind/callBound.js","webpack://free-floating-web-admin/./node_modules/call-bind/index.js","webpack://free-floating-web-admin/./node_modules/core-js/es/object/entries.js","webpack://free-floating-web-admin/./node_modules/core-js/es/object/get-prototype-of.js","webpack://free-floating-web-admin/./node_modules/core-js/internals/a-callable.js","webpack://free-floating-web-admin/./node_modules/core-js/internals/an-object.js","webpack://free-floating-web-admin/./node_modules/core-js/internals/array-includes.js","webpack://free-floating-web-admin/./node_modules/core-js/internals/classof-raw.js","webpack://free-floating-web-admin/./node_modules/core-js/internals/copy-constructor-properties.js","webpack://free-floating-web-admin/./node_modules/core-js/internals/correct-prototype-getter.js","webpack://free-floating-web-admin/./node_modules/core-js/internals/create-non-enumerable-property.js","webpack://free-floating-web-admin/./node_modules/core-js/internals/create-property-descriptor.js","webpack://free-floating-web-admin/./node_modules/core-js/internals/define-built-in.js","webpack://free-floating-web-admin/./node_modules/core-js/internals/define-global-property.js","webpack://free-floating-web-admin/./node_modules/core-js/internals/descriptors.js","webpack://free-floating-web-admin/./node_modules/core-js/internals/document-all.js","webpack://free-floating-web-admin/./node_modules/core-js/internals/document-create-element.js","webpack://free-floating-web-admin/./node_modules/core-js/internals/engine-user-agent.js","webpack://free-floating-web-admin/./node_modules/core-js/internals/engine-v8-version.js","webpack://free-floating-web-admin/./node_modules/core-js/internals/enum-bug-keys.js","webpack://free-floating-web-admin/./node_modules/core-js/internals/export.js","webpack://free-floating-web-admin/./node_modules/core-js/internals/fails.js","webpack://free-floating-web-admin/./node_modules/core-js/internals/function-bind-native.js","webpack://free-floating-web-admin/./node_modules/core-js/internals/function-call.js","webpack://free-floating-web-admin/./node_modules/core-js/internals/function-name.js","webpack://free-floating-web-admin/./node_modules/core-js/internals/function-uncurry-this.js","webpack://free-floating-web-admin/./node_modules/core-js/internals/get-built-in.js","webpack://free-floating-web-admin/./node_modules/core-js/internals/get-method.js","webpack://free-floating-web-admin/./node_modules/core-js/internals/global.js","webpack://free-floating-web-admin/./node_modules/core-js/internals/has-own-property.js","webpack://free-floating-web-admin/./node_modules/core-js/internals/hidden-keys.js","webpack://free-floating-web-admin/./node_modules/core-js/internals/ie8-dom-define.js","webpack://free-floating-web-admin/./node_modules/core-js/internals/indexed-object.js","webpack://free-floating-web-admin/./node_modules/core-js/internals/inspect-source.js","webpack://free-floating-web-admin/./node_modules/core-js/internals/internal-state.js","webpack://free-floating-web-admin/./node_modules/core-js/internals/is-callable.js","webpack://free-floating-web-admin/./node_modules/core-js/internals/is-forced.js","webpack://free-floating-web-admin/./node_modules/core-js/internals/is-null-or-undefined.js","webpack://free-floating-web-admin/./node_modules/core-js/internals/is-object.js","webpack://free-floating-web-admin/./node_modules/core-js/internals/is-pure.js","webpack://free-floating-web-admin/./node_modules/core-js/internals/is-symbol.js","webpack://free-floating-web-admin/./node_modules/core-js/internals/length-of-array-like.js","webpack://free-floating-web-admin/./node_modules/core-js/internals/make-built-in.js","webpack://free-floating-web-admin/./node_modules/core-js/internals/math-trunc.js","webpack://free-floating-web-admin/./node_modules/core-js/internals/object-define-property.js","webpack://free-floating-web-admin/./node_modules/core-js/internals/object-get-own-property-descriptor.js","webpack://free-floating-web-admin/./node_modules/core-js/internals/object-get-own-property-names.js","webpack://free-floating-web-admin/./node_modules/core-js/internals/object-get-own-property-symbols.js","webpack://free-floating-web-admin/./node_modules/core-js/internals/object-get-prototype-of.js","webpack://free-floating-web-admin/./node_modules/core-js/internals/object-is-prototype-of.js","webpack://free-floating-web-admin/./node_modules/core-js/internals/object-keys-internal.js","webpack://free-floating-web-admin/./node_modules/core-js/internals/object-keys.js","webpack://free-floating-web-admin/./node_modules/core-js/internals/object-property-is-enumerable.js","webpack://free-floating-web-admin/./node_modules/core-js/internals/object-to-array.js","webpack://free-floating-web-admin/./node_modules/core-js/internals/ordinary-to-primitive.js","webpack://free-floating-web-admin/./node_modules/core-js/internals/own-keys.js","webpack://free-floating-web-admin/./node_modules/core-js/internals/path.js","webpack://free-floating-web-admin/./node_modules/core-js/internals/require-object-coercible.js","webpack://free-floating-web-admin/./node_modules/core-js/internals/shared-key.js","webpack://free-floating-web-admin/./node_modules/core-js/internals/shared-store.js","webpack://free-floating-web-admin/./node_modules/core-js/internals/shared.js","webpack://free-floating-web-admin/./node_modules/core-js/internals/symbol-constructor-detection.js","webpack://free-floating-web-admin/./node_modules/core-js/internals/to-absolute-index.js","webpack://free-floating-web-admin/./node_modules/core-js/internals/to-indexed-object.js","webpack://free-floating-web-admin/./node_modules/core-js/internals/to-integer-or-infinity.js","webpack://free-floating-web-admin/./node_modules/core-js/internals/to-length.js","webpack://free-floating-web-admin/./node_modules/core-js/internals/to-object.js","webpack://free-floating-web-admin/./node_modules/core-js/internals/to-primitive.js","webpack://free-floating-web-admin/./node_modules/core-js/internals/to-property-key.js","webpack://free-floating-web-admin/./node_modules/core-js/internals/try-to-string.js","webpack://free-floating-web-admin/./node_modules/core-js/internals/uid.js","webpack://free-floating-web-admin/./node_modules/core-js/internals/use-symbol-as-uid.js","webpack://free-floating-web-admin/./node_modules/core-js/internals/v8-prototype-define-bug.js","webpack://free-floating-web-admin/./node_modules/core-js/internals/weak-map-basic-detection.js","webpack://free-floating-web-admin/./node_modules/core-js/internals/well-known-symbol.js","webpack://free-floating-web-admin/./node_modules/core-js/modules/es.object.entries.js","webpack://free-floating-web-admin/./node_modules/core-js/modules/es.object.get-prototype-of.js","webpack://free-floating-web-admin/./node_modules/core-js/stable/object/entries.js","webpack://free-floating-web-admin/./node_modules/core-js/stable/object/get-prototype-of.js","webpack://free-floating-web-admin/./node_modules/dijkstrajs/dijkstra.js","webpack://free-floating-web-admin/./node_modules/dompurify/dist/purify.js","webpack://free-floating-web-admin/./node_modules/encode-utf8/index.js","webpack://free-floating-web-admin/./node_modules/events/events.js","webpack://free-floating-web-admin/./node_modules/bluebird/js/browser/bluebird-exposed.js","webpack://free-floating-web-admin/./node_modules/jquery/dist/jquery-exposed.js","webpack://free-floating-web-admin/./node_modules/expose-loader/dist/runtime/getGlobalThis.js","webpack://free-floating-web-admin/./node_modules/for-each/index.js","webpack://free-floating-web-admin/./node_modules/function-bind/implementation.js","webpack://free-floating-web-admin/./node_modules/function-bind/index.js","webpack://free-floating-web-admin/./node_modules/get-intrinsic/index.js","webpack://free-floating-web-admin/./node_modules/gopd/index.js","webpack://free-floating-web-admin/./node_modules/has-symbols/index.js","webpack://free-floating-web-admin/./node_modules/has-symbols/shams.js","webpack://free-floating-web-admin/./node_modules/has-tostringtag/shams.js","webpack://free-floating-web-admin/./node_modules/has/src/index.js","webpack://free-floating-web-admin/./node_modules/@steinpilz/business-app-theme-au/src/app-tile.html","webpack://free-floating-web-admin/./node_modules/@steinpilz/business-app-theme-au/src/app-tiles-container.html","webpack://free-floating-web-admin/./node_modules/@steinpilz/business-app-theme-au/src/content-container.html","webpack://free-floating-web-admin/./node_modules/@steinpilz/business-app-theme-au/src/custom-select.html","webpack://free-floating-web-admin/./node_modules/@steinpilz/business-app-theme-au/src/dropdown-component.html","webpack://free-floating-web-admin/./node_modules/@steinpilz/business-app-theme-au/src/footer-bar.html","webpack://free-floating-web-admin/./node_modules/@steinpilz/business-app-theme-au/src/global-area.html","webpack://free-floating-web-admin/./node_modules/@steinpilz/business-app-theme-au/src/header-bar.html","webpack://free-floating-web-admin/./node_modules/@steinpilz/business-app-theme-au/src/list.html","webpack://free-floating-web-admin/./node_modules/@steinpilz/business-app-theme-au/src/master-details.html","webpack://free-floating-web-admin/./node_modules/@steinpilz/business-app-theme-au/src/page-content.html","webpack://free-floating-web-admin/./node_modules/@steinpilz/fria2-au-auth/src/test/test-login.html","webpack://free-floating-web-admin/./node_modules/@steinpilz/fria2-au-data-grid/src/data-grid.html","webpack://free-floating-web-admin/./node_modules/@steinpilz/fria2-au-data-grid/src/pager.html","webpack://free-floating-web-admin/./node_modules/@steinpilz/fria2-au-date-pickers/src/date-picker.html","webpack://free-floating-web-admin/./node_modules/@steinpilz/fria2-au-date-pickers/src/date-picker2.html","webpack://free-floating-web-admin/./node_modules/@steinpilz/fria2-au-date-pickers/src/datetime-picker.html","webpack://free-floating-web-admin/./node_modules/@steinpilz/fria2-au-date-pickers/src/daytime-picker.html","webpack://free-floating-web-admin/./node_modules/@steinpilz/fria2-au-date-pickers/src/time-picker.html","webpack://free-floating-web-admin/./node_modules/@steinpilz/fria2-au-dialogs/src/confirmation-dialog.html","webpack://free-floating-web-admin/./node_modules/@steinpilz/fria2-au-dialogs/src/message-dialog.html","webpack://free-floating-web-admin/./node_modules/@steinpilz/fria2-au-routing/src/reload-page.html","webpack://free-floating-web-admin/./node_modules/@steinpilz/fria2-au-validation/src/validation-summary.html","webpack://free-floating-web-admin/./node_modules/inherits/inherits_browser.js","webpack://free-floating-web-admin/./node_modules/is-arguments/index.js","webpack://free-floating-web-admin/./node_modules/is-callable/index.js","webpack://free-floating-web-admin/./node_modules/is-generator-function/index.js","webpack://free-floating-web-admin/./node_modules/is-typed-array/index.js","webpack://free-floating-web-admin/./node_modules/jquery/dist/jquery.js","webpack://free-floating-web-admin/./node_modules/lodash/lodash.js","webpack://free-floating-web-admin/./node_modules/moment-timezone/index.js","webpack://free-floating-web-admin/./node_modules/moment-timezone/moment-timezone.js","webpack://free-floating-web-admin/./node_modules/moment/locale/de.js","webpack://free-floating-web-admin/./node_modules/moment/locale/hu.js","webpack://free-floating-web-admin/./node_modules/moment/moment.js","webpack://free-floating-web-admin/./node_modules/notus/src/notus.js","webpack://free-floating-web-admin/./node_modules/process/browser.js","webpack://free-floating-web-admin/./node_modules/qrcode/lib/browser.js","webpack://free-floating-web-admin/./node_modules/qrcode/lib/can-promise.js","webpack://free-floating-web-admin/./node_modules/qrcode/lib/core/alignment-pattern.js","webpack://free-floating-web-admin/./node_modules/qrcode/lib/core/alphanumeric-data.js","webpack://free-floating-web-admin/./node_modules/qrcode/lib/core/bit-buffer.js","webpack://free-floating-web-admin/./node_modules/qrcode/lib/core/bit-matrix.js","webpack://free-floating-web-admin/./node_modules/qrcode/lib/core/byte-data.js","webpack://free-floating-web-admin/./node_modules/qrcode/lib/core/error-correction-code.js","webpack://free-floating-web-admin/./node_modules/qrcode/lib/core/error-correction-level.js","webpack://free-floating-web-admin/./node_modules/qrcode/lib/core/finder-pattern.js","webpack://free-floating-web-admin/./node_modules/qrcode/lib/core/format-info.js","webpack://free-floating-web-admin/./node_modules/qrcode/lib/core/galois-field.js","webpack://free-floating-web-admin/./node_modules/qrcode/lib/core/kanji-data.js","webpack://free-floating-web-admin/./node_modules/qrcode/lib/core/mask-pattern.js","webpack://free-floating-web-admin/./node_modules/qrcode/lib/core/mode.js","webpack://free-floating-web-admin/./node_modules/qrcode/lib/core/numeric-data.js","webpack://free-floating-web-admin/./node_modules/qrcode/lib/core/polynomial.js","webpack://free-floating-web-admin/./node_modules/qrcode/lib/core/qrcode.js","webpack://free-floating-web-admin/./node_modules/qrcode/lib/core/reed-solomon-encoder.js","webpack://free-floating-web-admin/./node_modules/qrcode/lib/core/regex.js","webpack://free-floating-web-admin/./node_modules/qrcode/lib/core/segments.js","webpack://free-floating-web-admin/./node_modules/qrcode/lib/core/utils.js","webpack://free-floating-web-admin/./node_modules/qrcode/lib/core/version-check.js","webpack://free-floating-web-admin/./node_modules/qrcode/lib/core/version.js","webpack://free-floating-web-admin/./node_modules/qrcode/lib/renderer/canvas.js","webpack://free-floating-web-admin/./node_modules/qrcode/lib/renderer/svg-tag.js","webpack://free-floating-web-admin/./node_modules/qrcode/lib/renderer/utils.js","webpack://free-floating-web-admin/./node_modules/select2/dist/js/select2.full.js","webpack://free-floating-web-admin/./node_modules/select2/dist/js/select2.js","webpack://free-floating-web-admin/./node_modules/@steinpilz/business-app-theme-au/src/GlobalAreaChangeEvent.ts","webpack://free-floating-web-admin/./node_modules/@steinpilz/business-app-theme-au/src/app-tile.ts","webpack://free-floating-web-admin/./node_modules/@steinpilz/business-app-theme-au/src/app-tiles-container.ts","webpack://free-floating-web-admin/./node_modules/@steinpilz/business-app-theme-au/src/au-dropdown.ts","webpack://free-floating-web-admin/./node_modules/@steinpilz/business-app-theme-au/src/content-container.ts","webpack://free-floating-web-admin/./node_modules/@steinpilz/business-app-theme-au/src/custom-select.ts","webpack://free-floating-web-admin/./node_modules/@steinpilz/business-app-theme-au/src/dropdown-component.ts","webpack://free-floating-web-admin/./node_modules/@steinpilz/business-app-theme-au/src/dropdown.ts","webpack://free-floating-web-admin/./node_modules/@steinpilz/business-app-theme-au/src/footer-bar.ts","webpack://free-floating-web-admin/./node_modules/@steinpilz/business-app-theme-au/src/global-area.ts","webpack://free-floating-web-admin/./node_modules/@steinpilz/business-app-theme-au/src/header-bar.ts","webpack://free-floating-web-admin/./node_modules/@steinpilz/business-app-theme-au/src/index.ts","webpack://free-floating-web-admin/./node_modules/@steinpilz/business-app-theme-au/src/utils/isObjectLike.ts","webpack://free-floating-web-admin/./node_modules/@steinpilz/business-app-theme-au/src/utils/getType.ts","webpack://free-floating-web-admin/./node_modules/@steinpilz/business-app-theme-au/src/utils/isEqual.ts","webpack://free-floating-web-admin/./node_modules/@steinpilz/business-app-theme-au/src/utils/isEqualDeep.ts","webpack://free-floating-web-admin/./node_modules/@steinpilz/business-app-theme-au/src/utils/isEqualArrays.ts","webpack://free-floating-web-admin/./node_modules/@steinpilz/business-app-theme-au/src/utils/isEqualObjects.ts","webpack://free-floating-web-admin/./node_modules/@steinpilz/business-app-theme-au/src/list.ts","webpack://free-floating-web-admin/./node_modules/@steinpilz/business-app-theme-au/src/utils/uniqBy.ts","webpack://free-floating-web-admin/./node_modules/@steinpilz/business-app-theme-au/src/master-details.ts","webpack://free-floating-web-admin/./node_modules/@steinpilz/business-app-theme-au/src/page-content.ts","webpack://free-floating-web-admin/./node_modules/@steinpilz/business-app-theme-au/src/utils/HTML.ts","webpack://free-floating-web-admin/./node_modules/@steinpilz/fria2-au-auth/src/authentication-service.ts","webpack://free-floating-web-admin/./node_modules/@steinpilz/fria2-au-auth/src/external-page-authentication-service.ts","webpack://free-floating-web-admin/./node_modules/@steinpilz/fria2-au-auth/src/mandant.ts","webpack://free-floating-web-admin/./node_modules/@steinpilz/fria2-au-auth/src/index.ts","webpack://free-floating-web-admin/./node_modules/@steinpilz/fria2-au-auth/src/test/siteminder-service.ts","webpack://free-floating-web-admin/./node_modules/@steinpilz/fria2-au-auth/src/test/authentication-service.ts","webpack://free-floating-web-admin/./node_modules/@steinpilz/fria2-au-auth/src/test/test-login.ts","webpack://free-floating-web-admin/./node_modules/@steinpilz/fria2-au-busy-indicator/src/busy-indicator.ts","webpack://free-floating-web-admin/./node_modules/@steinpilz/fria2-au-cache/cache.ts","webpack://free-floating-web-admin/./node_modules/@steinpilz/fria2-au-data-grid/src/data-grid.ts","webpack://free-floating-web-admin/./node_modules/@steinpilz/fria2-au-data-grid/src/data-source.ts","webpack://free-floating-web-admin/./node_modules/@steinpilz/fria2-au-data-grid/src/index.ts","webpack://free-floating-web-admin/./node_modules/@steinpilz/fria2-au-data-grid/src/pager.ts","webpack://free-floating-web-admin/./node_modules/@steinpilz/fria2-au-data-grid/src/plugin-config.ts","webpack://free-floating-web-admin/./node_modules/@steinpilz/fria2-au-date-pickers/src/utils/moment-helper.ts","webpack://free-floating-web-admin/./node_modules/@steinpilz/fria2-au-date-pickers/src/date-picker.ts","webpack://free-floating-web-admin/./node_modules/@steinpilz/fria2-au-date-pickers/src/date-picker2.ts","webpack://free-floating-web-admin/./node_modules/@steinpilz/fria2-au-date-pickers/src/date-pickers-configuration.ts","webpack://free-floating-web-admin/./node_modules/@steinpilz/fria2-au-date-pickers/src/utils/is-object-like.ts","webpack://free-floating-web-admin/./node_modules/@steinpilz/fria2-au-date-pickers/src/utils/get-type.ts","webpack://free-floating-web-admin/./node_modules/@steinpilz/fria2-au-date-pickers/src/utils/is-equal.ts","webpack://free-floating-web-admin/./node_modules/@steinpilz/fria2-au-date-pickers/src/utils/is-equal-deep.ts","webpack://free-floating-web-admin/./node_modules/@steinpilz/fria2-au-date-pickers/src/utils/is-equal-arrays.ts","webpack://free-floating-web-admin/./node_modules/@steinpilz/fria2-au-date-pickers/src/utils/is-equal-objects.ts","webpack://free-floating-web-admin/./node_modules/@steinpilz/fria2-au-date-pickers/src/datetime-config.ts","webpack://free-floating-web-admin/./node_modules/@steinpilz/fria2-au-date-pickers/src/datetime-picker.ts","webpack://free-floating-web-admin/./node_modules/@steinpilz/fria2-au-date-pickers/src/daytime-picker.ts","webpack://free-floating-web-admin/./node_modules/@steinpilz/fria2-au-date-pickers/src/index.ts","webpack://free-floating-web-admin/./node_modules/@steinpilz/fria2-au-date-pickers/src/time-picker.ts","webpack://free-floating-web-admin/./node_modules/@steinpilz/fria2-au-dialogs/src/confirmation-dialog.ts","webpack://free-floating-web-admin/./node_modules/@steinpilz/fria2-au-dialogs/src/exec.ts","webpack://free-floating-web-admin/./node_modules/@steinpilz/fria2-au-dialogs/src/close-all-dialogs.ts","webpack://free-floating-web-admin/./node_modules/@steinpilz/fria2-au-dialogs/src/index.ts","webpack://free-floating-web-admin/./node_modules/@steinpilz/fria2-au-dialogs/src/message-dialog.ts","webpack://free-floating-web-admin/./node_modules/@steinpilz/fria2-au-l10n-moment/src/config.ts","webpack://free-floating-web-admin/./node_modules/@steinpilz/fria2-au-l10n-moment/src/date-format-converter.ts","webpack://free-floating-web-admin/./node_modules/@steinpilz/fria2-au-l10n-moment/src/date-time-format-converter.ts","webpack://free-floating-web-admin/./node_modules/@steinpilz/fria2-au-l10n-moment/src/time-service.ts","webpack://free-floating-web-admin/./node_modules/@steinpilz/fria2-au-l10n-moment/src/index.ts","webpack://free-floating-web-admin/./node_modules/@steinpilz/fria2-au-l10n-moment/src/moment-helper.ts","webpack://free-floating-web-admin/./node_modules/@steinpilz/fria2-au-l10n/src/configuration.ts","webpack://free-floating-web-admin/./node_modules/@steinpilz/fria2-au-l10n/src/currency-converter.ts","webpack://free-floating-web-admin/./node_modules/@steinpilz/fria2-au-l10n/src/currency-format.ts","webpack://free-floating-web-admin/./node_modules/@steinpilz/fria2-au-l10n/src/index.ts","webpack://free-floating-web-admin/./node_modules/@steinpilz/fria2-host-module/src/url.ts","webpack://free-floating-web-admin/./node_modules/@steinpilz/fria2-host-module/src/base-href.ts","webpack://free-floating-web-admin/./node_modules/@steinpilz/fria2-host-module/src/endpoint-resolver-helper.ts","webpack://free-floating-web-admin/./node_modules/@steinpilz/fria2-host-module/src/gateway.ts","webpack://free-floating-web-admin/./node_modules/@steinpilz/fria2-host-module/src/host-module-config-storage.ts","webpack://free-floating-web-admin/./node_modules/@steinpilz/fria2-host-module/src/host-config-helper.ts","webpack://free-floating-web-admin/./node_modules/@steinpilz/fria2-host-module/src/endpoint-resolver.ts","webpack://free-floating-web-admin/./node_modules/@steinpilz/fria2-text-resources-module/src/gateway.ts","webpack://free-floating-web-admin/./node_modules/@steinpilz/fria2-au-l10n/src/object.ts","webpack://free-floating-web-admin/./node_modules/@steinpilz/fria2-au-l10n/src/localization.ts","webpack://free-floating-web-admin/./node_modules/@steinpilz/fria2-au-l10n/src/statistics.ts","webpack://free-floating-web-admin/./node_modules/@steinpilz/fria2-au-l10n/src/translate-binding-behavior.ts","webpack://free-floating-web-admin/./node_modules/@steinpilz/fria2-au-l10n/src/translate-converter.ts","webpack://free-floating-web-admin/./node_modules/@steinpilz/fria2-au-l10n/src/translate-find-first-converter.ts","webpack://free-floating-web-admin/./node_modules/@steinpilz/fria2-au-routing/src/routes.ts","webpack://free-floating-web-admin/./node_modules/@steinpilz/fria2-au-routing/src/reload-page.ts","webpack://free-floating-web-admin/./node_modules/@steinpilz/fria2-au-routing/src/reload.ts","webpack://free-floating-web-admin/./node_modules/@steinpilz/fria2-au-select/src/index.ts","webpack://free-floating-web-admin/./node_modules/@steinpilz/fria2-au-select/src/select.ts","webpack://free-floating-web-admin/./node_modules/@steinpilz/fria2-au-validation/src/dom-polyfills.ts","webpack://free-floating-web-admin/./node_modules/@steinpilz/fria2-au-validation/src/form-validation-renderer.ts","webpack://free-floating-web-admin/./node_modules/@steinpilz/fria2-au-validation/src/index.ts","webpack://free-floating-web-admin/./node_modules/aurelia-fetch-client/dist/native-modules/aurelia-fetch-client.js","webpack://free-floating-web-admin/./node_modules/@steinpilz/fria2-au-web-api/src/web-api-client-config.ts","webpack://free-floating-web-admin/./node_modules/@steinpilz/fria2-au-web-api/src/web-api-client.ts","webpack://free-floating-web-admin/./node_modules/@steinpilz/fria2-au-web-api/src/utils.ts","webpack://free-floating-web-admin/./node_modules/@steinpilz/fria2-moment-json-deserializer/src/get-deserializer.ts","webpack://free-floating-web-admin/./node_modules/@steinpilz/fria2-moment-json-deserializer/src/with-json-moment-deserializer.ts","webpack://free-floating-web-admin/./node_modules/tslib/tslib.es6.js","webpack://free-floating-web-admin/./node_modules/util/support/isBufferBrowser.js","webpack://free-floating-web-admin/./node_modules/util/support/types.js","webpack://free-floating-web-admin/./node_modules/util/util.js","webpack://free-floating-web-admin/./node_modules/uuid/rng-browser.js","webpack://free-floating-web-admin/./node_modules/uuid/uuid.js","webpack://free-floating-web-admin/./node_modules/which-typed-array/index.js","webpack://free-floating-web-admin/./node_modules/available-typed-arrays/index.js","webpack://free-floating-web-admin/./node_modules/terra-draw-google-maps-adapter/dist/terra-draw-google-maps-adapter.modern.js","webpack://free-floating-web-admin/./node_modules/terra-draw/dist/terra-draw.modern.js"],"sourcesContent":["export default function getWindow(node) {\n  if (node == null) {\n    return window;\n  }\n\n  if (node.toString() !== '[object Window]') {\n    var ownerDocument = node.ownerDocument;\n    return ownerDocument ? ownerDocument.defaultView || window : window;\n  }\n\n  return node;\n}","import getWindow from \"./getWindow.js\";\n\nfunction isElement(node) {\n  var OwnElement = getWindow(node).Element;\n  return node instanceof OwnElement || node instanceof Element;\n}\n\nfunction isHTMLElement(node) {\n  var OwnElement = getWindow(node).HTMLElement;\n  return node instanceof OwnElement || node instanceof HTMLElement;\n}\n\nfunction isShadowRoot(node) {\n  // IE 11 has no ShadowRoot\n  if (typeof ShadowRoot === 'undefined') {\n    return false;\n  }\n\n  var OwnElement = getWindow(node).ShadowRoot;\n  return node instanceof OwnElement || node instanceof ShadowRoot;\n}\n\nexport { isElement, isHTMLElement, isShadowRoot };","export var max = Math.max;\nexport var min = Math.min;\nexport var round = Math.round;","export default function getUAString() {\n  var uaData = navigator.userAgentData;\n\n  if (uaData != null && uaData.brands) {\n    return uaData.brands.map(function (item) {\n      return item.brand + \"/\" + item.version;\n    }).join(' ');\n  }\n\n  return navigator.userAgent;\n}","import getUAString from \"../utils/userAgent.js\";\nexport default function isLayoutViewport() {\n  return !/^((?!chrome|android).)*safari/i.test(getUAString());\n}","import { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport { round } from \"../utils/math.js\";\nimport getWindow from \"./getWindow.js\";\nimport isLayoutViewport from \"./isLayoutViewport.js\";\nexport default function getBoundingClientRect(element, includeScale, isFixedStrategy) {\n  if (includeScale === void 0) {\n    includeScale = false;\n  }\n\n  if (isFixedStrategy === void 0) {\n    isFixedStrategy = false;\n  }\n\n  var clientRect = element.getBoundingClientRect();\n  var scaleX = 1;\n  var scaleY = 1;\n\n  if (includeScale && isHTMLElement(element)) {\n    scaleX = element.offsetWidth > 0 ? round(clientRect.width) / element.offsetWidth || 1 : 1;\n    scaleY = element.offsetHeight > 0 ? round(clientRect.height) / element.offsetHeight || 1 : 1;\n  }\n\n  var _ref = isElement(element) ? getWindow(element) : window,\n      visualViewport = _ref.visualViewport;\n\n  var addVisualOffsets = !isLayoutViewport() && isFixedStrategy;\n  var x = (clientRect.left + (addVisualOffsets && visualViewport ? visualViewport.offsetLeft : 0)) / scaleX;\n  var y = (clientRect.top + (addVisualOffsets && visualViewport ? visualViewport.offsetTop : 0)) / scaleY;\n  var width = clientRect.width / scaleX;\n  var height = clientRect.height / scaleY;\n  return {\n    width: width,\n    height: height,\n    top: y,\n    right: x + width,\n    bottom: y + height,\n    left: x,\n    x: x,\n    y: y\n  };\n}","import getWindow from \"./getWindow.js\";\nexport default function getWindowScroll(node) {\n  var win = getWindow(node);\n  var scrollLeft = win.pageXOffset;\n  var scrollTop = win.pageYOffset;\n  return {\n    scrollLeft: scrollLeft,\n    scrollTop: scrollTop\n  };\n}","export default function getNodeName(element) {\n  return element ? (element.nodeName || '').toLowerCase() : null;\n}","import { isElement } from \"./instanceOf.js\";\nexport default function getDocumentElement(element) {\n  // $FlowFixMe[incompatible-return]: assume body is always available\n  return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]\n  element.document) || window.document).documentElement;\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nexport default function getWindowScrollBarX(element) {\n  // If <html> has a CSS width greater than the viewport, then this will be\n  // incorrect for RTL.\n  // Popper 1 is broken in this case and never had a bug report so let's assume\n  // it's not an issue. I don't think anyone ever specifies width on <html>\n  // anyway.\n  // Browsers where the left scrollbar doesn't cause an issue report `0` for\n  // this (e.g. Edge 2019, IE11, Safari)\n  return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;\n}","import getWindow from \"./getWindow.js\";\nexport default function getComputedStyle(element) {\n  return getWindow(element).getComputedStyle(element);\n}","import getComputedStyle from \"./getComputedStyle.js\";\nexport default function isScrollParent(element) {\n  // Firefox wants us to check `-x` and `-y` variations as well\n  var _getComputedStyle = getComputedStyle(element),\n      overflow = _getComputedStyle.overflow,\n      overflowX = _getComputedStyle.overflowX,\n      overflowY = _getComputedStyle.overflowY;\n\n  return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getNodeScroll from \"./getNodeScroll.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport { round } from \"../utils/math.js\";\n\nfunction isElementScaled(element) {\n  var rect = element.getBoundingClientRect();\n  var scaleX = round(rect.width) / element.offsetWidth || 1;\n  var scaleY = round(rect.height) / element.offsetHeight || 1;\n  return scaleX !== 1 || scaleY !== 1;\n} // Returns the composite rect of an element relative to its offsetParent.\n// Composite means it takes into account transforms as well as layout.\n\n\nexport default function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {\n  if (isFixed === void 0) {\n    isFixed = false;\n  }\n\n  var isOffsetParentAnElement = isHTMLElement(offsetParent);\n  var offsetParentIsScaled = isHTMLElement(offsetParent) && isElementScaled(offsetParent);\n  var documentElement = getDocumentElement(offsetParent);\n  var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled, isFixed);\n  var scroll = {\n    scrollLeft: 0,\n    scrollTop: 0\n  };\n  var offsets = {\n    x: 0,\n    y: 0\n  };\n\n  if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n    if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078\n    isScrollParent(documentElement)) {\n      scroll = getNodeScroll(offsetParent);\n    }\n\n    if (isHTMLElement(offsetParent)) {\n      offsets = getBoundingClientRect(offsetParent, true);\n      offsets.x += offsetParent.clientLeft;\n      offsets.y += offsetParent.clientTop;\n    } else if (documentElement) {\n      offsets.x = getWindowScrollBarX(documentElement);\n    }\n  }\n\n  return {\n    x: rect.left + scroll.scrollLeft - offsets.x,\n    y: rect.top + scroll.scrollTop - offsets.y,\n    width: rect.width,\n    height: rect.height\n  };\n}","import getWindowScroll from \"./getWindowScroll.js\";\nimport getWindow from \"./getWindow.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getHTMLElementScroll from \"./getHTMLElementScroll.js\";\nexport default function getNodeScroll(node) {\n  if (node === getWindow(node) || !isHTMLElement(node)) {\n    return getWindowScroll(node);\n  } else {\n    return getHTMLElementScroll(node);\n  }\n}","export default function getHTMLElementScroll(element) {\n  return {\n    scrollLeft: element.scrollLeft,\n    scrollTop: element.scrollTop\n  };\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\"; // Returns the layout rect of an element relative to its offsetParent. Layout\n// means it doesn't take into account transforms.\n\nexport default function getLayoutRect(element) {\n  var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.\n  // Fixes https://github.com/popperjs/popper-core/issues/1223\n\n  var width = element.offsetWidth;\n  var height = element.offsetHeight;\n\n  if (Math.abs(clientRect.width - width) <= 1) {\n    width = clientRect.width;\n  }\n\n  if (Math.abs(clientRect.height - height) <= 1) {\n    height = clientRect.height;\n  }\n\n  return {\n    x: element.offsetLeft,\n    y: element.offsetTop,\n    width: width,\n    height: height\n  };\n}","import getNodeName from \"./getNodeName.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport { isShadowRoot } from \"./instanceOf.js\";\nexport default function getParentNode(element) {\n  if (getNodeName(element) === 'html') {\n    return element;\n  }\n\n  return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle\n    // $FlowFixMe[incompatible-return]\n    // $FlowFixMe[prop-missing]\n    element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n    element.parentNode || ( // DOM Element detected\n    isShadowRoot(element) ? element.host : null) || // ShadowRoot detected\n    // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n    getDocumentElement(element) // fallback\n\n  );\n}","import getParentNode from \"./getParentNode.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nexport default function getScrollParent(node) {\n  if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n    // $FlowFixMe[incompatible-return]: assume body is always available\n    return node.ownerDocument.body;\n  }\n\n  if (isHTMLElement(node) && isScrollParent(node)) {\n    return node;\n  }\n\n  return getScrollParent(getParentNode(node));\n}","import getScrollParent from \"./getScrollParent.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getWindow from \"./getWindow.js\";\nimport isScrollParent from \"./isScrollParent.js\";\n/*\ngiven a DOM element, return the list of all scroll parents, up the list of ancesors\nuntil we get to the top window object. This list is what we attach scroll listeners\nto, because if any of these parent elements scroll, we'll need to re-calculate the\nreference element's position.\n*/\n\nexport default function listScrollParents(element, list) {\n  var _element$ownerDocumen;\n\n  if (list === void 0) {\n    list = [];\n  }\n\n  var scrollParent = getScrollParent(element);\n  var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);\n  var win = getWindow(scrollParent);\n  var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;\n  var updatedList = list.concat(target);\n  return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n  updatedList.concat(listScrollParents(getParentNode(target)));\n}","import getNodeName from \"./getNodeName.js\";\nexport default function isTableElement(element) {\n  return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n}","import getWindow from \"./getWindow.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isHTMLElement, isShadowRoot } from \"./instanceOf.js\";\nimport isTableElement from \"./isTableElement.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getUAString from \"../utils/userAgent.js\";\n\nfunction getTrueOffsetParent(element) {\n  if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837\n  getComputedStyle(element).position === 'fixed') {\n    return null;\n  }\n\n  return element.offsetParent;\n} // `.offsetParent` reports `null` for fixed elements, while absolute elements\n// return the containing block\n\n\nfunction getContainingBlock(element) {\n  var isFirefox = /firefox/i.test(getUAString());\n  var isIE = /Trident/i.test(getUAString());\n\n  if (isIE && isHTMLElement(element)) {\n    // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n    var elementCss = getComputedStyle(element);\n\n    if (elementCss.position === 'fixed') {\n      return null;\n    }\n  }\n\n  var currentNode = getParentNode(element);\n\n  if (isShadowRoot(currentNode)) {\n    currentNode = currentNode.host;\n  }\n\n  while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {\n    var css = getComputedStyle(currentNode); // This is non-exhaustive but covers the most common CSS properties that\n    // create a containing block.\n    // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n    if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {\n      return currentNode;\n    } else {\n      currentNode = currentNode.parentNode;\n    }\n  }\n\n  return null;\n} // Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\n\n\nexport default function getOffsetParent(element) {\n  var window = getWindow(element);\n  var offsetParent = getTrueOffsetParent(element);\n\n  while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === 'static') {\n    offsetParent = getTrueOffsetParent(offsetParent);\n  }\n\n  if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle(offsetParent).position === 'static')) {\n    return window;\n  }\n\n  return offsetParent || getContainingBlock(element) || window;\n}","export var top = 'top';\nexport var bottom = 'bottom';\nexport var right = 'right';\nexport var left = 'left';\nexport var auto = 'auto';\nexport var basePlacements = [top, bottom, right, left];\nexport var start = 'start';\nexport var end = 'end';\nexport var clippingParents = 'clippingParents';\nexport var viewport = 'viewport';\nexport var popper = 'popper';\nexport var reference = 'reference';\nexport var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n  return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n}, []);\nexport var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\n  return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n}, []); // modifiers that need to read the DOM\n\nexport var beforeRead = 'beforeRead';\nexport var read = 'read';\nexport var afterRead = 'afterRead'; // pure-logic modifiers\n\nexport var beforeMain = 'beforeMain';\nexport var main = 'main';\nexport var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\nexport var beforeWrite = 'beforeWrite';\nexport var write = 'write';\nexport var afterWrite = 'afterWrite';\nexport var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];","import { modifierPhases } from \"../enums.js\"; // source: https://stackoverflow.com/questions/49875255\n\nfunction order(modifiers) {\n  var map = new Map();\n  var visited = new Set();\n  var result = [];\n  modifiers.forEach(function (modifier) {\n    map.set(modifier.name, modifier);\n  }); // On visiting object, check for its dependencies and visit them recursively\n\n  function sort(modifier) {\n    visited.add(modifier.name);\n    var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);\n    requires.forEach(function (dep) {\n      if (!visited.has(dep)) {\n        var depModifier = map.get(dep);\n\n        if (depModifier) {\n          sort(depModifier);\n        }\n      }\n    });\n    result.push(modifier);\n  }\n\n  modifiers.forEach(function (modifier) {\n    if (!visited.has(modifier.name)) {\n      // check for visited object\n      sort(modifier);\n    }\n  });\n  return result;\n}\n\nexport default function orderModifiers(modifiers) {\n  // order based on dependencies\n  var orderedModifiers = order(modifiers); // order based on phase\n\n  return modifierPhases.reduce(function (acc, phase) {\n    return acc.concat(orderedModifiers.filter(function (modifier) {\n      return modifier.phase === phase;\n    }));\n  }, []);\n}","import getCompositeRect from \"./dom-utils/getCompositeRect.js\";\nimport getLayoutRect from \"./dom-utils/getLayoutRect.js\";\nimport listScrollParents from \"./dom-utils/listScrollParents.js\";\nimport getOffsetParent from \"./dom-utils/getOffsetParent.js\";\nimport getComputedStyle from \"./dom-utils/getComputedStyle.js\";\nimport orderModifiers from \"./utils/orderModifiers.js\";\nimport debounce from \"./utils/debounce.js\";\nimport validateModifiers from \"./utils/validateModifiers.js\";\nimport uniqueBy from \"./utils/uniqueBy.js\";\nimport getBasePlacement from \"./utils/getBasePlacement.js\";\nimport mergeByName from \"./utils/mergeByName.js\";\nimport detectOverflow from \"./utils/detectOverflow.js\";\nimport { isElement } from \"./dom-utils/instanceOf.js\";\nimport { auto } from \"./enums.js\";\nvar INVALID_ELEMENT_ERROR = 'Popper: Invalid reference or popper argument provided. They must be either a DOM element or virtual element.';\nvar INFINITE_LOOP_ERROR = 'Popper: An infinite loop in the modifiers cycle has been detected! The cycle has been interrupted to prevent a browser crash.';\nvar DEFAULT_OPTIONS = {\n  placement: 'bottom',\n  modifiers: [],\n  strategy: 'absolute'\n};\n\nfunction areValidElements() {\n  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n    args[_key] = arguments[_key];\n  }\n\n  return !args.some(function (element) {\n    return !(element && typeof element.getBoundingClientRect === 'function');\n  });\n}\n\nexport function popperGenerator(generatorOptions) {\n  if (generatorOptions === void 0) {\n    generatorOptions = {};\n  }\n\n  var _generatorOptions = generatorOptions,\n      _generatorOptions$def = _generatorOptions.defaultModifiers,\n      defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,\n      _generatorOptions$def2 = _generatorOptions.defaultOptions,\n      defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;\n  return function createPopper(reference, popper, options) {\n    if (options === void 0) {\n      options = defaultOptions;\n    }\n\n    var state = {\n      placement: 'bottom',\n      orderedModifiers: [],\n      options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),\n      modifiersData: {},\n      elements: {\n        reference: reference,\n        popper: popper\n      },\n      attributes: {},\n      styles: {}\n    };\n    var effectCleanupFns = [];\n    var isDestroyed = false;\n    var instance = {\n      state: state,\n      setOptions: function setOptions(setOptionsAction) {\n        var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction;\n        cleanupModifierEffects();\n        state.options = Object.assign({}, defaultOptions, state.options, options);\n        state.scrollParents = {\n          reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],\n          popper: listScrollParents(popper)\n        }; // Orders the modifiers based on their dependencies and `phase`\n        // properties\n\n        var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers\n\n        state.orderedModifiers = orderedModifiers.filter(function (m) {\n          return m.enabled;\n        }); // Validate the provided modifiers so that the consumer will get warned\n        // if one of the modifiers is invalid for any reason\n\n        if (process.env.NODE_ENV !== \"production\") {\n          var modifiers = uniqueBy([].concat(orderedModifiers, state.options.modifiers), function (_ref) {\n            var name = _ref.name;\n            return name;\n          });\n          validateModifiers(modifiers);\n\n          if (getBasePlacement(state.options.placement) === auto) {\n            var flipModifier = state.orderedModifiers.find(function (_ref2) {\n              var name = _ref2.name;\n              return name === 'flip';\n            });\n\n            if (!flipModifier) {\n              console.error(['Popper: \"auto\" placements require the \"flip\" modifier be', 'present and enabled to work.'].join(' '));\n            }\n          }\n\n          var _getComputedStyle = getComputedStyle(popper),\n              marginTop = _getComputedStyle.marginTop,\n              marginRight = _getComputedStyle.marginRight,\n              marginBottom = _getComputedStyle.marginBottom,\n              marginLeft = _getComputedStyle.marginLeft; // We no longer take into account `margins` on the popper, and it can\n          // cause bugs with positioning, so we'll warn the consumer\n\n\n          if ([marginTop, marginRight, marginBottom, marginLeft].some(function (margin) {\n            return parseFloat(margin);\n          })) {\n            console.warn(['Popper: CSS \"margin\" styles cannot be used to apply padding', 'between the popper and its reference element or boundary.', 'To replicate margin, use the `offset` modifier, as well as', 'the `padding` option in the `preventOverflow` and `flip`', 'modifiers.'].join(' '));\n          }\n        }\n\n        runModifierEffects();\n        return instance.update();\n      },\n      // Sync update – it will always be executed, even if not necessary. This\n      // is useful for low frequency updates where sync behavior simplifies the\n      // logic.\n      // For high frequency updates (e.g. `resize` and `scroll` events), always\n      // prefer the async Popper#update method\n      forceUpdate: function forceUpdate() {\n        if (isDestroyed) {\n          return;\n        }\n\n        var _state$elements = state.elements,\n            reference = _state$elements.reference,\n            popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements\n        // anymore\n\n        if (!areValidElements(reference, popper)) {\n          if (process.env.NODE_ENV !== \"production\") {\n            console.error(INVALID_ELEMENT_ERROR);\n          }\n\n          return;\n        } // Store the reference and popper rects to be read by modifiers\n\n\n        state.rects = {\n          reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),\n          popper: getLayoutRect(popper)\n        }; // Modifiers have the ability to reset the current update cycle. The\n        // most common use case for this is the `flip` modifier changing the\n        // placement, which then needs to re-run all the modifiers, because the\n        // logic was previously ran for the previous placement and is therefore\n        // stale/incorrect\n\n        state.reset = false;\n        state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier\n        // is filled with the initial data specified by the modifier. This means\n        // it doesn't persist and is fresh on each update.\n        // To ensure persistent data, use `${name}#persistent`\n\n        state.orderedModifiers.forEach(function (modifier) {\n          return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);\n        });\n        var __debug_loops__ = 0;\n\n        for (var index = 0; index < state.orderedModifiers.length; index++) {\n          if (process.env.NODE_ENV !== \"production\") {\n            __debug_loops__ += 1;\n\n            if (__debug_loops__ > 100) {\n              console.error(INFINITE_LOOP_ERROR);\n              break;\n            }\n          }\n\n          if (state.reset === true) {\n            state.reset = false;\n            index = -1;\n            continue;\n          }\n\n          var _state$orderedModifie = state.orderedModifiers[index],\n              fn = _state$orderedModifie.fn,\n              _state$orderedModifie2 = _state$orderedModifie.options,\n              _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,\n              name = _state$orderedModifie.name;\n\n          if (typeof fn === 'function') {\n            state = fn({\n              state: state,\n              options: _options,\n              name: name,\n              instance: instance\n            }) || state;\n          }\n        }\n      },\n      // Async and optimistically optimized update – it will not be executed if\n      // not necessary (debounced to run at most once-per-tick)\n      update: debounce(function () {\n        return new Promise(function (resolve) {\n          instance.forceUpdate();\n          resolve(state);\n        });\n      }),\n      destroy: function destroy() {\n        cleanupModifierEffects();\n        isDestroyed = true;\n      }\n    };\n\n    if (!areValidElements(reference, popper)) {\n      if (process.env.NODE_ENV !== \"production\") {\n        console.error(INVALID_ELEMENT_ERROR);\n      }\n\n      return instance;\n    }\n\n    instance.setOptions(options).then(function (state) {\n      if (!isDestroyed && options.onFirstUpdate) {\n        options.onFirstUpdate(state);\n      }\n    }); // Modifiers have the ability to execute arbitrary code before the first\n    // update cycle runs. They will be executed in the same order as the update\n    // cycle. This is useful when a modifier adds some persistent data that\n    // other modifiers need to use, but the modifier is run after the dependent\n    // one.\n\n    function runModifierEffects() {\n      state.orderedModifiers.forEach(function (_ref3) {\n        var name = _ref3.name,\n            _ref3$options = _ref3.options,\n            options = _ref3$options === void 0 ? {} : _ref3$options,\n            effect = _ref3.effect;\n\n        if (typeof effect === 'function') {\n          var cleanupFn = effect({\n            state: state,\n            name: name,\n            instance: instance,\n            options: options\n          });\n\n          var noopFn = function noopFn() {};\n\n          effectCleanupFns.push(cleanupFn || noopFn);\n        }\n      });\n    }\n\n    function cleanupModifierEffects() {\n      effectCleanupFns.forEach(function (fn) {\n        return fn();\n      });\n      effectCleanupFns = [];\n    }\n\n    return instance;\n  };\n}\nexport var createPopper = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules\n\nexport { detectOverflow };","export default function debounce(fn) {\n  var pending;\n  return function () {\n    if (!pending) {\n      pending = new Promise(function (resolve) {\n        Promise.resolve().then(function () {\n          pending = undefined;\n          resolve(fn());\n        });\n      });\n    }\n\n    return pending;\n  };\n}","export default function mergeByName(modifiers) {\n  var merged = modifiers.reduce(function (merged, current) {\n    var existing = merged[current.name];\n    merged[current.name] = existing ? Object.assign({}, existing, current, {\n      options: Object.assign({}, existing.options, current.options),\n      data: Object.assign({}, existing.data, current.data)\n    }) : current;\n    return merged;\n  }, {}); // IE11 does not support Object.values\n\n  return Object.keys(merged).map(function (key) {\n    return merged[key];\n  });\n}","import getWindow from \"../dom-utils/getWindow.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar passive = {\n  passive: true\n};\n\nfunction effect(_ref) {\n  var state = _ref.state,\n      instance = _ref.instance,\n      options = _ref.options;\n  var _options$scroll = options.scroll,\n      scroll = _options$scroll === void 0 ? true : _options$scroll,\n      _options$resize = options.resize,\n      resize = _options$resize === void 0 ? true : _options$resize;\n  var window = getWindow(state.elements.popper);\n  var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);\n\n  if (scroll) {\n    scrollParents.forEach(function (scrollParent) {\n      scrollParent.addEventListener('scroll', instance.update, passive);\n    });\n  }\n\n  if (resize) {\n    window.addEventListener('resize', instance.update, passive);\n  }\n\n  return function () {\n    if (scroll) {\n      scrollParents.forEach(function (scrollParent) {\n        scrollParent.removeEventListener('scroll', instance.update, passive);\n      });\n    }\n\n    if (resize) {\n      window.removeEventListener('resize', instance.update, passive);\n    }\n  };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'eventListeners',\n  enabled: true,\n  phase: 'write',\n  fn: function fn() {},\n  effect: effect,\n  data: {}\n};","import { auto } from \"../enums.js\";\nexport default function getBasePlacement(placement) {\n  return placement.split('-')[0];\n}","export default function getVariation(placement) {\n  return placement.split('-')[1];\n}","export default function getMainAxisFromPlacement(placement) {\n  return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n}","import getBasePlacement from \"./getBasePlacement.js\";\nimport getVariation from \"./getVariation.js\";\nimport getMainAxisFromPlacement from \"./getMainAxisFromPlacement.js\";\nimport { top, right, bottom, left, start, end } from \"../enums.js\";\nexport default function computeOffsets(_ref) {\n  var reference = _ref.reference,\n      element = _ref.element,\n      placement = _ref.placement;\n  var basePlacement = placement ? getBasePlacement(placement) : null;\n  var variation = placement ? getVariation(placement) : null;\n  var commonX = reference.x + reference.width / 2 - element.width / 2;\n  var commonY = reference.y + reference.height / 2 - element.height / 2;\n  var offsets;\n\n  switch (basePlacement) {\n    case top:\n      offsets = {\n        x: commonX,\n        y: reference.y - element.height\n      };\n      break;\n\n    case bottom:\n      offsets = {\n        x: commonX,\n        y: reference.y + reference.height\n      };\n      break;\n\n    case right:\n      offsets = {\n        x: reference.x + reference.width,\n        y: commonY\n      };\n      break;\n\n    case left:\n      offsets = {\n        x: reference.x - element.width,\n        y: commonY\n      };\n      break;\n\n    default:\n      offsets = {\n        x: reference.x,\n        y: reference.y\n      };\n  }\n\n  var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;\n\n  if (mainAxis != null) {\n    var len = mainAxis === 'y' ? 'height' : 'width';\n\n    switch (variation) {\n      case start:\n        offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n        break;\n\n      case end:\n        offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n        break;\n\n      default:\n    }\n  }\n\n  return offsets;\n}","import { top, left, right, bottom, end } from \"../enums.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getWindow from \"../dom-utils/getWindow.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getComputedStyle from \"../dom-utils/getComputedStyle.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport { round } from \"../utils/math.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar unsetSides = {\n  top: 'auto',\n  right: 'auto',\n  bottom: 'auto',\n  left: 'auto'\n}; // Round the offsets to the nearest suitable subpixel based on the DPR.\n// Zooming can change the DPR, but it seems to report a value that will\n// cleanly divide the values into the appropriate subpixels.\n\nfunction roundOffsetsByDPR(_ref) {\n  var x = _ref.x,\n      y = _ref.y;\n  var win = window;\n  var dpr = win.devicePixelRatio || 1;\n  return {\n    x: round(x * dpr) / dpr || 0,\n    y: round(y * dpr) / dpr || 0\n  };\n}\n\nexport function mapToStyles(_ref2) {\n  var _Object$assign2;\n\n  var popper = _ref2.popper,\n      popperRect = _ref2.popperRect,\n      placement = _ref2.placement,\n      variation = _ref2.variation,\n      offsets = _ref2.offsets,\n      position = _ref2.position,\n      gpuAcceleration = _ref2.gpuAcceleration,\n      adaptive = _ref2.adaptive,\n      roundOffsets = _ref2.roundOffsets,\n      isFixed = _ref2.isFixed;\n  var _offsets$x = offsets.x,\n      x = _offsets$x === void 0 ? 0 : _offsets$x,\n      _offsets$y = offsets.y,\n      y = _offsets$y === void 0 ? 0 : _offsets$y;\n\n  var _ref3 = typeof roundOffsets === 'function' ? roundOffsets({\n    x: x,\n    y: y\n  }) : {\n    x: x,\n    y: y\n  };\n\n  x = _ref3.x;\n  y = _ref3.y;\n  var hasX = offsets.hasOwnProperty('x');\n  var hasY = offsets.hasOwnProperty('y');\n  var sideX = left;\n  var sideY = top;\n  var win = window;\n\n  if (adaptive) {\n    var offsetParent = getOffsetParent(popper);\n    var heightProp = 'clientHeight';\n    var widthProp = 'clientWidth';\n\n    if (offsetParent === getWindow(popper)) {\n      offsetParent = getDocumentElement(popper);\n\n      if (getComputedStyle(offsetParent).position !== 'static' && position === 'absolute') {\n        heightProp = 'scrollHeight';\n        widthProp = 'scrollWidth';\n      }\n    } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n\n\n    offsetParent = offsetParent;\n\n    if (placement === top || (placement === left || placement === right) && variation === end) {\n      sideY = bottom;\n      var offsetY = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.height : // $FlowFixMe[prop-missing]\n      offsetParent[heightProp];\n      y -= offsetY - popperRect.height;\n      y *= gpuAcceleration ? 1 : -1;\n    }\n\n    if (placement === left || (placement === top || placement === bottom) && variation === end) {\n      sideX = right;\n      var offsetX = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.width : // $FlowFixMe[prop-missing]\n      offsetParent[widthProp];\n      x -= offsetX - popperRect.width;\n      x *= gpuAcceleration ? 1 : -1;\n    }\n  }\n\n  var commonStyles = Object.assign({\n    position: position\n  }, adaptive && unsetSides);\n\n  var _ref4 = roundOffsets === true ? roundOffsetsByDPR({\n    x: x,\n    y: y\n  }) : {\n    x: x,\n    y: y\n  };\n\n  x = _ref4.x;\n  y = _ref4.y;\n\n  if (gpuAcceleration) {\n    var _Object$assign;\n\n    return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? \"translate(\" + x + \"px, \" + y + \"px)\" : \"translate3d(\" + x + \"px, \" + y + \"px, 0)\", _Object$assign));\n  }\n\n  return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + \"px\" : '', _Object$assign2[sideX] = hasX ? x + \"px\" : '', _Object$assign2.transform = '', _Object$assign2));\n}\n\nfunction computeStyles(_ref5) {\n  var state = _ref5.state,\n      options = _ref5.options;\n  var _options$gpuAccelerat = options.gpuAcceleration,\n      gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,\n      _options$adaptive = options.adaptive,\n      adaptive = _options$adaptive === void 0 ? true : _options$adaptive,\n      _options$roundOffsets = options.roundOffsets,\n      roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;\n\n  if (process.env.NODE_ENV !== \"production\") {\n    var transitionProperty = getComputedStyle(state.elements.popper).transitionProperty || '';\n\n    if (adaptive && ['transform', 'top', 'right', 'bottom', 'left'].some(function (property) {\n      return transitionProperty.indexOf(property) >= 0;\n    })) {\n      console.warn(['Popper: Detected CSS transitions on at least one of the following', 'CSS properties: \"transform\", \"top\", \"right\", \"bottom\", \"left\".', '\\n\\n', 'Disable the \"computeStyles\" modifier\\'s `adaptive` option to allow', 'for smooth transitions, or remove these properties from the CSS', 'transition declaration on the popper element if only transitioning', 'opacity or background-color for example.', '\\n\\n', 'We recommend using the popper element as a wrapper around an inner', 'element that can have any CSS property transitioned for animations.'].join(' '));\n    }\n  }\n\n  var commonStyles = {\n    placement: getBasePlacement(state.placement),\n    variation: getVariation(state.placement),\n    popper: state.elements.popper,\n    popperRect: state.rects.popper,\n    gpuAcceleration: gpuAcceleration,\n    isFixed: state.options.strategy === 'fixed'\n  };\n\n  if (state.modifiersData.popperOffsets != null) {\n    state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {\n      offsets: state.modifiersData.popperOffsets,\n      position: state.options.strategy,\n      adaptive: adaptive,\n      roundOffsets: roundOffsets\n    })));\n  }\n\n  if (state.modifiersData.arrow != null) {\n    state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {\n      offsets: state.modifiersData.arrow,\n      position: 'absolute',\n      adaptive: false,\n      roundOffsets: roundOffsets\n    })));\n  }\n\n  state.attributes.popper = Object.assign({}, state.attributes.popper, {\n    'data-popper-placement': state.placement\n  });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'computeStyles',\n  enabled: true,\n  phase: 'beforeWrite',\n  fn: computeStyles,\n  data: {}\n};","var hash = {\n  left: 'right',\n  right: 'left',\n  bottom: 'top',\n  top: 'bottom'\n};\nexport default function getOppositePlacement(placement) {\n  return placement.replace(/left|right|bottom|top/g, function (matched) {\n    return hash[matched];\n  });\n}","var hash = {\n  start: 'end',\n  end: 'start'\n};\nexport default function getOppositeVariationPlacement(placement) {\n  return placement.replace(/start|end/g, function (matched) {\n    return hash[matched];\n  });\n}","import { isShadowRoot } from \"./instanceOf.js\";\nexport default function contains(parent, child) {\n  var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method\n\n  if (parent.contains(child)) {\n    return true;\n  } // then fallback to custom implementation with Shadow DOM support\n  else if (rootNode && isShadowRoot(rootNode)) {\n      var next = child;\n\n      do {\n        if (next && parent.isSameNode(next)) {\n          return true;\n        } // $FlowFixMe[prop-missing]: need a better way to handle this...\n\n\n        next = next.parentNode || next.host;\n      } while (next);\n    } // Give up, the result is false\n\n\n  return false;\n}","export default function rectToClientRect(rect) {\n  return Object.assign({}, rect, {\n    left: rect.x,\n    top: rect.y,\n    right: rect.x + rect.width,\n    bottom: rect.y + rect.height\n  });\n}","import { viewport } from \"../enums.js\";\nimport getViewportRect from \"./getViewportRect.js\";\nimport getDocumentRect from \"./getDocumentRect.js\";\nimport listScrollParents from \"./listScrollParents.js\";\nimport getOffsetParent from \"./getOffsetParent.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport contains from \"./contains.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport rectToClientRect from \"../utils/rectToClientRect.js\";\nimport { max, min } from \"../utils/math.js\";\n\nfunction getInnerBoundingClientRect(element, strategy) {\n  var rect = getBoundingClientRect(element, false, strategy === 'fixed');\n  rect.top = rect.top + element.clientTop;\n  rect.left = rect.left + element.clientLeft;\n  rect.bottom = rect.top + element.clientHeight;\n  rect.right = rect.left + element.clientWidth;\n  rect.width = element.clientWidth;\n  rect.height = element.clientHeight;\n  rect.x = rect.left;\n  rect.y = rect.top;\n  return rect;\n}\n\nfunction getClientRectFromMixedType(element, clippingParent, strategy) {\n  return clippingParent === viewport ? rectToClientRect(getViewportRect(element, strategy)) : isElement(clippingParent) ? getInnerBoundingClientRect(clippingParent, strategy) : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n} // A \"clipping parent\" is an overflowable container with the characteristic of\n// clipping (or hiding) overflowing elements with a position different from\n// `initial`\n\n\nfunction getClippingParents(element) {\n  var clippingParents = listScrollParents(getParentNode(element));\n  var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle(element).position) >= 0;\n  var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;\n\n  if (!isElement(clipperElement)) {\n    return [];\n  } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n\n\n  return clippingParents.filter(function (clippingParent) {\n    return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';\n  });\n} // Gets the maximum area that the element is visible in due to any number of\n// clipping parents\n\n\nexport default function getClippingRect(element, boundary, rootBoundary, strategy) {\n  var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n  var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\n  var firstClippingParent = clippingParents[0];\n  var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\n    var rect = getClientRectFromMixedType(element, clippingParent, strategy);\n    accRect.top = max(rect.top, accRect.top);\n    accRect.right = min(rect.right, accRect.right);\n    accRect.bottom = min(rect.bottom, accRect.bottom);\n    accRect.left = max(rect.left, accRect.left);\n    return accRect;\n  }, getClientRectFromMixedType(element, firstClippingParent, strategy));\n  clippingRect.width = clippingRect.right - clippingRect.left;\n  clippingRect.height = clippingRect.bottom - clippingRect.top;\n  clippingRect.x = clippingRect.left;\n  clippingRect.y = clippingRect.top;\n  return clippingRect;\n}","import getWindow from \"./getWindow.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport isLayoutViewport from \"./isLayoutViewport.js\";\nexport default function getViewportRect(element, strategy) {\n  var win = getWindow(element);\n  var html = getDocumentElement(element);\n  var visualViewport = win.visualViewport;\n  var width = html.clientWidth;\n  var height = html.clientHeight;\n  var x = 0;\n  var y = 0;\n\n  if (visualViewport) {\n    width = visualViewport.width;\n    height = visualViewport.height;\n    var layoutViewport = isLayoutViewport();\n\n    if (layoutViewport || !layoutViewport && strategy === 'fixed') {\n      x = visualViewport.offsetLeft;\n      y = visualViewport.offsetTop;\n    }\n  }\n\n  return {\n    width: width,\n    height: height,\n    x: x + getWindowScrollBarX(element),\n    y: y\n  };\n}","import getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nimport { max } from \"../utils/math.js\"; // Gets the entire size of the scrollable document area, even extending outside\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable\n\nexport default function getDocumentRect(element) {\n  var _element$ownerDocumen;\n\n  var html = getDocumentElement(element);\n  var winScroll = getWindowScroll(element);\n  var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n  var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n  var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n  var x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n  var y = -winScroll.scrollTop;\n\n  if (getComputedStyle(body || html).direction === 'rtl') {\n    x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n  }\n\n  return {\n    width: width,\n    height: height,\n    x: x,\n    y: y\n  };\n}","import getFreshSideObject from \"./getFreshSideObject.js\";\nexport default function mergePaddingObject(paddingObject) {\n  return Object.assign({}, getFreshSideObject(), paddingObject);\n}","export default function getFreshSideObject() {\n  return {\n    top: 0,\n    right: 0,\n    bottom: 0,\n    left: 0\n  };\n}","export default function expandToHashMap(value, keys) {\n  return keys.reduce(function (hashMap, key) {\n    hashMap[key] = value;\n    return hashMap;\n  }, {});\n}","import getClippingRect from \"../dom-utils/getClippingRect.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getBoundingClientRect from \"../dom-utils/getBoundingClientRect.js\";\nimport computeOffsets from \"./computeOffsets.js\";\nimport rectToClientRect from \"./rectToClientRect.js\";\nimport { clippingParents, reference, popper, bottom, top, right, basePlacements, viewport } from \"../enums.js\";\nimport { isElement } from \"../dom-utils/instanceOf.js\";\nimport mergePaddingObject from \"./mergePaddingObject.js\";\nimport expandToHashMap from \"./expandToHashMap.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport default function detectOverflow(state, options) {\n  if (options === void 0) {\n    options = {};\n  }\n\n  var _options = options,\n      _options$placement = _options.placement,\n      placement = _options$placement === void 0 ? state.placement : _options$placement,\n      _options$strategy = _options.strategy,\n      strategy = _options$strategy === void 0 ? state.strategy : _options$strategy,\n      _options$boundary = _options.boundary,\n      boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,\n      _options$rootBoundary = _options.rootBoundary,\n      rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,\n      _options$elementConte = _options.elementContext,\n      elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,\n      _options$altBoundary = _options.altBoundary,\n      altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\n      _options$padding = _options.padding,\n      padding = _options$padding === void 0 ? 0 : _options$padding;\n  var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n  var altContext = elementContext === popper ? reference : popper;\n  var popperRect = state.rects.popper;\n  var element = state.elements[altBoundary ? altContext : elementContext];\n  var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary, strategy);\n  var referenceClientRect = getBoundingClientRect(state.elements.reference);\n  var popperOffsets = computeOffsets({\n    reference: referenceClientRect,\n    element: popperRect,\n    strategy: 'absolute',\n    placement: placement\n  });\n  var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));\n  var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\n  // 0 or negative = within the clipping rect\n\n  var overflowOffsets = {\n    top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n    bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n    left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n    right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n  };\n  var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\n\n  if (elementContext === popper && offsetData) {\n    var offset = offsetData[placement];\n    Object.keys(overflowOffsets).forEach(function (key) {\n      var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n      var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n      overflowOffsets[key] += offset[axis] * multiply;\n    });\n  }\n\n  return overflowOffsets;\n}","import { max as mathMax, min as mathMin } from \"./math.js\";\nexport function within(min, value, max) {\n  return mathMax(min, mathMin(value, max));\n}\nexport function withinMaxClamp(min, value, max) {\n  var v = within(min, value, max);\n  return v > max ? max : v;\n}","import { top, bottom, left, right } from \"../enums.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\n\nfunction getSideOffsets(overflow, rect, preventedOffsets) {\n  if (preventedOffsets === void 0) {\n    preventedOffsets = {\n      x: 0,\n      y: 0\n    };\n  }\n\n  return {\n    top: overflow.top - rect.height - preventedOffsets.y,\n    right: overflow.right - rect.width + preventedOffsets.x,\n    bottom: overflow.bottom - rect.height + preventedOffsets.y,\n    left: overflow.left - rect.width - preventedOffsets.x\n  };\n}\n\nfunction isAnySideFullyClipped(overflow) {\n  return [top, right, bottom, left].some(function (side) {\n    return overflow[side] >= 0;\n  });\n}\n\nfunction hide(_ref) {\n  var state = _ref.state,\n      name = _ref.name;\n  var referenceRect = state.rects.reference;\n  var popperRect = state.rects.popper;\n  var preventedOffsets = state.modifiersData.preventOverflow;\n  var referenceOverflow = detectOverflow(state, {\n    elementContext: 'reference'\n  });\n  var popperAltOverflow = detectOverflow(state, {\n    altBoundary: true\n  });\n  var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);\n  var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);\n  var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n  var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n  state.modifiersData[name] = {\n    referenceClippingOffsets: referenceClippingOffsets,\n    popperEscapeOffsets: popperEscapeOffsets,\n    isReferenceHidden: isReferenceHidden,\n    hasPopperEscaped: hasPopperEscaped\n  };\n  state.attributes.popper = Object.assign({}, state.attributes.popper, {\n    'data-popper-reference-hidden': isReferenceHidden,\n    'data-popper-escaped': hasPopperEscaped\n  });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'hide',\n  enabled: true,\n  phase: 'main',\n  requiresIfExists: ['preventOverflow'],\n  fn: hide\n};","import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nimport offset from \"./modifiers/offset.js\";\nimport flip from \"./modifiers/flip.js\";\nimport preventOverflow from \"./modifiers/preventOverflow.js\";\nimport arrow from \"./modifiers/arrow.js\";\nimport hide from \"./modifiers/hide.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles, offset, flip, preventOverflow, arrow, hide];\nvar createPopper = /*#__PURE__*/popperGenerator({\n  defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow }; // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper as createPopperLite } from \"./popper-lite.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport * from \"./modifiers/index.js\";","import computeOffsets from \"../utils/computeOffsets.js\";\n\nfunction popperOffsets(_ref) {\n  var state = _ref.state,\n      name = _ref.name;\n  // Offsets are the actual position the popper needs to have to be\n  // properly positioned near its reference element\n  // This is the most basic placement, and will be adjusted by\n  // the modifiers in the next step\n  state.modifiersData[name] = computeOffsets({\n    reference: state.rects.reference,\n    element: state.rects.popper,\n    strategy: 'absolute',\n    placement: state.placement\n  });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'popperOffsets',\n  enabled: true,\n  phase: 'read',\n  fn: popperOffsets,\n  data: {}\n};","import getNodeName from \"../dom-utils/getNodeName.js\";\nimport { isHTMLElement } from \"../dom-utils/instanceOf.js\"; // This modifier takes the styles prepared by the `computeStyles` modifier\n// and applies them to the HTMLElements such as popper and arrow\n\nfunction applyStyles(_ref) {\n  var state = _ref.state;\n  Object.keys(state.elements).forEach(function (name) {\n    var style = state.styles[name] || {};\n    var attributes = state.attributes[name] || {};\n    var element = state.elements[name]; // arrow is optional + virtual elements\n\n    if (!isHTMLElement(element) || !getNodeName(element)) {\n      return;\n    } // Flow doesn't support to extend this property, but it's the most\n    // effective way to apply styles to an HTMLElement\n    // $FlowFixMe[cannot-write]\n\n\n    Object.assign(element.style, style);\n    Object.keys(attributes).forEach(function (name) {\n      var value = attributes[name];\n\n      if (value === false) {\n        element.removeAttribute(name);\n      } else {\n        element.setAttribute(name, value === true ? '' : value);\n      }\n    });\n  });\n}\n\nfunction effect(_ref2) {\n  var state = _ref2.state;\n  var initialStyles = {\n    popper: {\n      position: state.options.strategy,\n      left: '0',\n      top: '0',\n      margin: '0'\n    },\n    arrow: {\n      position: 'absolute'\n    },\n    reference: {}\n  };\n  Object.assign(state.elements.popper.style, initialStyles.popper);\n  state.styles = initialStyles;\n\n  if (state.elements.arrow) {\n    Object.assign(state.elements.arrow.style, initialStyles.arrow);\n  }\n\n  return function () {\n    Object.keys(state.elements).forEach(function (name) {\n      var element = state.elements[name];\n      var attributes = state.attributes[name] || {};\n      var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\n\n      var style = styleProperties.reduce(function (style, property) {\n        style[property] = '';\n        return style;\n      }, {}); // arrow is optional + virtual elements\n\n      if (!isHTMLElement(element) || !getNodeName(element)) {\n        return;\n      }\n\n      Object.assign(element.style, style);\n      Object.keys(attributes).forEach(function (attribute) {\n        element.removeAttribute(attribute);\n      });\n    });\n  };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'applyStyles',\n  enabled: true,\n  phase: 'write',\n  fn: applyStyles,\n  effect: effect,\n  requires: ['computeStyles']\n};","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport { top, left, right, placements } from \"../enums.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport function distanceAndSkiddingToXY(placement, rects, offset) {\n  var basePlacement = getBasePlacement(placement);\n  var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n  var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {\n    placement: placement\n  })) : offset,\n      skidding = _ref[0],\n      distance = _ref[1];\n\n  skidding = skidding || 0;\n  distance = (distance || 0) * invertDistance;\n  return [left, right].indexOf(basePlacement) >= 0 ? {\n    x: distance,\n    y: skidding\n  } : {\n    x: skidding,\n    y: distance\n  };\n}\n\nfunction offset(_ref2) {\n  var state = _ref2.state,\n      options = _ref2.options,\n      name = _ref2.name;\n  var _options$offset = options.offset,\n      offset = _options$offset === void 0 ? [0, 0] : _options$offset;\n  var data = placements.reduce(function (acc, placement) {\n    acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n    return acc;\n  }, {});\n  var _data$state$placement = data[state.placement],\n      x = _data$state$placement.x,\n      y = _data$state$placement.y;\n\n  if (state.modifiersData.popperOffsets != null) {\n    state.modifiersData.popperOffsets.x += x;\n    state.modifiersData.popperOffsets.y += y;\n  }\n\n  state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'offset',\n  enabled: true,\n  phase: 'main',\n  requires: ['popperOffsets'],\n  fn: offset\n};","import getOppositePlacement from \"../utils/getOppositePlacement.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getOppositeVariationPlacement from \"../utils/getOppositeVariationPlacement.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport computeAutoPlacement from \"../utils/computeAutoPlacement.js\";\nimport { bottom, top, start, right, left, auto } from \"../enums.js\";\nimport getVariation from \"../utils/getVariation.js\"; // eslint-disable-next-line import/no-unused-modules\n\nfunction getExpandedFallbackPlacements(placement) {\n  if (getBasePlacement(placement) === auto) {\n    return [];\n  }\n\n  var oppositePlacement = getOppositePlacement(placement);\n  return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];\n}\n\nfunction flip(_ref) {\n  var state = _ref.state,\n      options = _ref.options,\n      name = _ref.name;\n\n  if (state.modifiersData[name]._skip) {\n    return;\n  }\n\n  var _options$mainAxis = options.mainAxis,\n      checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n      _options$altAxis = options.altAxis,\n      checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,\n      specifiedFallbackPlacements = options.fallbackPlacements,\n      padding = options.padding,\n      boundary = options.boundary,\n      rootBoundary = options.rootBoundary,\n      altBoundary = options.altBoundary,\n      _options$flipVariatio = options.flipVariations,\n      flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,\n      allowedAutoPlacements = options.allowedAutoPlacements;\n  var preferredPlacement = state.options.placement;\n  var basePlacement = getBasePlacement(preferredPlacement);\n  var isBasePlacement = basePlacement === preferredPlacement;\n  var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));\n  var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {\n    return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {\n      placement: placement,\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      padding: padding,\n      flipVariations: flipVariations,\n      allowedAutoPlacements: allowedAutoPlacements\n    }) : placement);\n  }, []);\n  var referenceRect = state.rects.reference;\n  var popperRect = state.rects.popper;\n  var checksMap = new Map();\n  var makeFallbackChecks = true;\n  var firstFittingPlacement = placements[0];\n\n  for (var i = 0; i < placements.length; i++) {\n    var placement = placements[i];\n\n    var _basePlacement = getBasePlacement(placement);\n\n    var isStartVariation = getVariation(placement) === start;\n    var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;\n    var len = isVertical ? 'width' : 'height';\n    var overflow = detectOverflow(state, {\n      placement: placement,\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      altBoundary: altBoundary,\n      padding: padding\n    });\n    var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;\n\n    if (referenceRect[len] > popperRect[len]) {\n      mainVariationSide = getOppositePlacement(mainVariationSide);\n    }\n\n    var altVariationSide = getOppositePlacement(mainVariationSide);\n    var checks = [];\n\n    if (checkMainAxis) {\n      checks.push(overflow[_basePlacement] <= 0);\n    }\n\n    if (checkAltAxis) {\n      checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);\n    }\n\n    if (checks.every(function (check) {\n      return check;\n    })) {\n      firstFittingPlacement = placement;\n      makeFallbackChecks = false;\n      break;\n    }\n\n    checksMap.set(placement, checks);\n  }\n\n  if (makeFallbackChecks) {\n    // `2` may be desired in some cases – research later\n    var numberOfChecks = flipVariations ? 3 : 1;\n\n    var _loop = function _loop(_i) {\n      var fittingPlacement = placements.find(function (placement) {\n        var checks = checksMap.get(placement);\n\n        if (checks) {\n          return checks.slice(0, _i).every(function (check) {\n            return check;\n          });\n        }\n      });\n\n      if (fittingPlacement) {\n        firstFittingPlacement = fittingPlacement;\n        return \"break\";\n      }\n    };\n\n    for (var _i = numberOfChecks; _i > 0; _i--) {\n      var _ret = _loop(_i);\n\n      if (_ret === \"break\") break;\n    }\n  }\n\n  if (state.placement !== firstFittingPlacement) {\n    state.modifiersData[name]._skip = true;\n    state.placement = firstFittingPlacement;\n    state.reset = true;\n  }\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'flip',\n  enabled: true,\n  phase: 'main',\n  fn: flip,\n  requiresIfExists: ['offset'],\n  data: {\n    _skip: false\n  }\n};","import getVariation from \"./getVariation.js\";\nimport { variationPlacements, basePlacements, placements as allPlacements } from \"../enums.js\";\nimport detectOverflow from \"./detectOverflow.js\";\nimport getBasePlacement from \"./getBasePlacement.js\";\nexport default function computeAutoPlacement(state, options) {\n  if (options === void 0) {\n    options = {};\n  }\n\n  var _options = options,\n      placement = _options.placement,\n      boundary = _options.boundary,\n      rootBoundary = _options.rootBoundary,\n      padding = _options.padding,\n      flipVariations = _options.flipVariations,\n      _options$allowedAutoP = _options.allowedAutoPlacements,\n      allowedAutoPlacements = _options$allowedAutoP === void 0 ? allPlacements : _options$allowedAutoP;\n  var variation = getVariation(placement);\n  var placements = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {\n    return getVariation(placement) === variation;\n  }) : basePlacements;\n  var allowedPlacements = placements.filter(function (placement) {\n    return allowedAutoPlacements.indexOf(placement) >= 0;\n  });\n\n  if (allowedPlacements.length === 0) {\n    allowedPlacements = placements;\n\n    if (process.env.NODE_ENV !== \"production\") {\n      console.error(['Popper: The `allowedAutoPlacements` option did not allow any', 'placements. Ensure the `placement` option matches the variation', 'of the allowed placements.', 'For example, \"auto\" cannot be used to allow \"bottom-start\".', 'Use \"auto-start\" instead.'].join(' '));\n    }\n  } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...\n\n\n  var overflows = allowedPlacements.reduce(function (acc, placement) {\n    acc[placement] = detectOverflow(state, {\n      placement: placement,\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      padding: padding\n    })[getBasePlacement(placement)];\n    return acc;\n  }, {});\n  return Object.keys(overflows).sort(function (a, b) {\n    return overflows[a] - overflows[b];\n  });\n}","import { top, left, right, bottom, start } from \"../enums.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport getAltAxis from \"../utils/getAltAxis.js\";\nimport { within, withinMaxClamp } from \"../utils/within.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport getFreshSideObject from \"../utils/getFreshSideObject.js\";\nimport { min as mathMin, max as mathMax } from \"../utils/math.js\";\n\nfunction preventOverflow(_ref) {\n  var state = _ref.state,\n      options = _ref.options,\n      name = _ref.name;\n  var _options$mainAxis = options.mainAxis,\n      checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n      _options$altAxis = options.altAxis,\n      checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,\n      boundary = options.boundary,\n      rootBoundary = options.rootBoundary,\n      altBoundary = options.altBoundary,\n      padding = options.padding,\n      _options$tether = options.tether,\n      tether = _options$tether === void 0 ? true : _options$tether,\n      _options$tetherOffset = options.tetherOffset,\n      tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;\n  var overflow = detectOverflow(state, {\n    boundary: boundary,\n    rootBoundary: rootBoundary,\n    padding: padding,\n    altBoundary: altBoundary\n  });\n  var basePlacement = getBasePlacement(state.placement);\n  var variation = getVariation(state.placement);\n  var isBasePlacement = !variation;\n  var mainAxis = getMainAxisFromPlacement(basePlacement);\n  var altAxis = getAltAxis(mainAxis);\n  var popperOffsets = state.modifiersData.popperOffsets;\n  var referenceRect = state.rects.reference;\n  var popperRect = state.rects.popper;\n  var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {\n    placement: state.placement\n  })) : tetherOffset;\n  var normalizedTetherOffsetValue = typeof tetherOffsetValue === 'number' ? {\n    mainAxis: tetherOffsetValue,\n    altAxis: tetherOffsetValue\n  } : Object.assign({\n    mainAxis: 0,\n    altAxis: 0\n  }, tetherOffsetValue);\n  var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null;\n  var data = {\n    x: 0,\n    y: 0\n  };\n\n  if (!popperOffsets) {\n    return;\n  }\n\n  if (checkMainAxis) {\n    var _offsetModifierState$;\n\n    var mainSide = mainAxis === 'y' ? top : left;\n    var altSide = mainAxis === 'y' ? bottom : right;\n    var len = mainAxis === 'y' ? 'height' : 'width';\n    var offset = popperOffsets[mainAxis];\n    var min = offset + overflow[mainSide];\n    var max = offset - overflow[altSide];\n    var additive = tether ? -popperRect[len] / 2 : 0;\n    var minLen = variation === start ? referenceRect[len] : popperRect[len];\n    var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go\n    // outside the reference bounds\n\n    var arrowElement = state.elements.arrow;\n    var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {\n      width: 0,\n      height: 0\n    };\n    var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();\n    var arrowPaddingMin = arrowPaddingObject[mainSide];\n    var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want\n    // to include its full size in the calculation. If the reference is small\n    // and near the edge of a boundary, the popper can overflow even if the\n    // reference is not overflowing as well (e.g. virtual elements with no\n    // width or height)\n\n    var arrowLen = within(0, referenceRect[len], arrowRect[len]);\n    var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis;\n    var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis;\n    var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);\n    var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;\n    var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0;\n    var tetherMin = offset + minOffset - offsetModifierValue - clientOffset;\n    var tetherMax = offset + maxOffset - offsetModifierValue;\n    var preventedOffset = within(tether ? mathMin(min, tetherMin) : min, offset, tether ? mathMax(max, tetherMax) : max);\n    popperOffsets[mainAxis] = preventedOffset;\n    data[mainAxis] = preventedOffset - offset;\n  }\n\n  if (checkAltAxis) {\n    var _offsetModifierState$2;\n\n    var _mainSide = mainAxis === 'x' ? top : left;\n\n    var _altSide = mainAxis === 'x' ? bottom : right;\n\n    var _offset = popperOffsets[altAxis];\n\n    var _len = altAxis === 'y' ? 'height' : 'width';\n\n    var _min = _offset + overflow[_mainSide];\n\n    var _max = _offset - overflow[_altSide];\n\n    var isOriginSide = [top, left].indexOf(basePlacement) !== -1;\n\n    var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0;\n\n    var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis;\n\n    var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max;\n\n    var _preventedOffset = tether && isOriginSide ? withinMaxClamp(_tetherMin, _offset, _tetherMax) : within(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max);\n\n    popperOffsets[altAxis] = _preventedOffset;\n    data[altAxis] = _preventedOffset - _offset;\n  }\n\n  state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'preventOverflow',\n  enabled: true,\n  phase: 'main',\n  fn: preventOverflow,\n  requiresIfExists: ['offset']\n};","export default function getAltAxis(axis) {\n  return axis === 'x' ? 'y' : 'x';\n}","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport contains from \"../dom-utils/contains.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport { within } from \"../utils/within.js\";\nimport mergePaddingObject from \"../utils/mergePaddingObject.js\";\nimport expandToHashMap from \"../utils/expandToHashMap.js\";\nimport { left, right, basePlacements, top, bottom } from \"../enums.js\";\nimport { isHTMLElement } from \"../dom-utils/instanceOf.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar toPaddingObject = function toPaddingObject(padding, state) {\n  padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {\n    placement: state.placement\n  })) : padding;\n  return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n};\n\nfunction arrow(_ref) {\n  var _state$modifiersData$;\n\n  var state = _ref.state,\n      name = _ref.name,\n      options = _ref.options;\n  var arrowElement = state.elements.arrow;\n  var popperOffsets = state.modifiersData.popperOffsets;\n  var basePlacement = getBasePlacement(state.placement);\n  var axis = getMainAxisFromPlacement(basePlacement);\n  var isVertical = [left, right].indexOf(basePlacement) >= 0;\n  var len = isVertical ? 'height' : 'width';\n\n  if (!arrowElement || !popperOffsets) {\n    return;\n  }\n\n  var paddingObject = toPaddingObject(options.padding, state);\n  var arrowRect = getLayoutRect(arrowElement);\n  var minProp = axis === 'y' ? top : left;\n  var maxProp = axis === 'y' ? bottom : right;\n  var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];\n  var startDiff = popperOffsets[axis] - state.rects.reference[axis];\n  var arrowOffsetParent = getOffsetParent(arrowElement);\n  var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n  var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is\n  // outside of the popper bounds\n\n  var min = paddingObject[minProp];\n  var max = clientSize - arrowRect[len] - paddingObject[maxProp];\n  var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n  var offset = within(min, center, max); // Prevents breaking syntax highlighting...\n\n  var axisProp = axis;\n  state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);\n}\n\nfunction effect(_ref2) {\n  var state = _ref2.state,\n      options = _ref2.options;\n  var _options$element = options.element,\n      arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;\n\n  if (arrowElement == null) {\n    return;\n  } // CSS selector\n\n\n  if (typeof arrowElement === 'string') {\n    arrowElement = state.elements.popper.querySelector(arrowElement);\n\n    if (!arrowElement) {\n      return;\n    }\n  }\n\n  if (process.env.NODE_ENV !== \"production\") {\n    if (!isHTMLElement(arrowElement)) {\n      console.error(['Popper: \"arrow\" element must be an HTMLElement (not an SVGElement).', 'To use an SVG arrow, wrap it in an HTMLElement that will be used as', 'the arrow.'].join(' '));\n    }\n  }\n\n  if (!contains(state.elements.popper, arrowElement)) {\n    if (process.env.NODE_ENV !== \"production\") {\n      console.error(['Popper: \"arrow\" modifier\\'s `element` must be a child of the popper', 'element.'].join(' '));\n    }\n\n    return;\n  }\n\n  state.elements.arrow = arrowElement;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'arrow',\n  enabled: true,\n  phase: 'main',\n  fn: arrow,\n  effect: effect,\n  requires: ['popperOffsets'],\n  requiresIfExists: ['preventOverflow']\n};","export { _getArrayObserver as getArrayObserver };\nexport { _getMapObserver as getMapObserver };\nexport { _getSetObserver as getSetObserver };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _dec, _dec2, _class, _dec3, _class2, _dec4, _class3, _dec5, _class5, _dec6, _class7, _dec7, _class8, _dec8, _class9, _dec9, _class10, _class12, _temp, _dec10, _class13, _class14, _temp2;\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n\n\nimport * as LogManager from 'aurelia-logging';\nimport { PLATFORM, DOM } from 'aurelia-pal';\nimport { TaskQueue } from 'aurelia-task-queue';\nimport { metadata } from 'aurelia-metadata';\n\nexport var targetContext = 'Binding:target';\nexport var sourceContext = 'Binding:source';\n\nvar map = Object.create(null);\n\nexport function camelCase(name) {\n  if (name in map) {\n    return map[name];\n  }\n  var result = name.charAt(0).toLowerCase() + name.slice(1).replace(/[_.-](\\w|$)/g, function (_, x) {\n    return x.toUpperCase();\n  });\n  map[name] = result;\n  return result;\n}\n\nexport function createOverrideContext(bindingContext, parentOverrideContext) {\n  return {\n    bindingContext: bindingContext,\n    parentOverrideContext: parentOverrideContext || null\n  };\n}\n\nexport function getContextFor(name, scope, ancestor) {\n  var oc = scope.overrideContext;\n\n  if (ancestor) {\n    while (ancestor && oc) {\n      ancestor--;\n      oc = oc.parentOverrideContext;\n    }\n    if (ancestor || !oc) {\n      return undefined;\n    }\n    return name in oc ? oc : oc.bindingContext;\n  }\n\n  while (oc && !(name in oc) && !(oc.bindingContext && name in oc.bindingContext)) {\n    oc = oc.parentOverrideContext;\n  }\n  if (oc) {\n    return name in oc ? oc : oc.bindingContext;\n  }\n\n  return scope.bindingContext || scope.overrideContext;\n}\n\nexport function createScopeForTest(bindingContext, parentBindingContext) {\n  if (parentBindingContext) {\n    return {\n      bindingContext: bindingContext,\n      overrideContext: createOverrideContext(bindingContext, createOverrideContext(parentBindingContext))\n    };\n  }\n  return {\n    bindingContext: bindingContext,\n    overrideContext: createOverrideContext(bindingContext)\n  };\n}\n\nvar slotNames = [];\nvar versionSlotNames = [];\nvar lastSlot = -1;\nfunction ensureEnoughSlotNames(currentSlot) {\n  if (currentSlot === lastSlot) {\n    lastSlot += 5;\n    var ii = slotNames.length = versionSlotNames.length = lastSlot + 1;\n    for (var i = currentSlot + 1; i < ii; ++i) {\n      slotNames[i] = '_observer' + i;\n      versionSlotNames[i] = '_observerVersion' + i;\n    }\n  }\n}\nensureEnoughSlotNames(-1);\n\nfunction addObserver(observer) {\n  var observerSlots = this._observerSlots === undefined ? 0 : this._observerSlots;\n  var i = observerSlots;\n  while (i-- && this[slotNames[i]] !== observer) {}\n\n  if (i === -1) {\n    i = 0;\n    while (this[slotNames[i]]) {\n      i++;\n    }\n    this[slotNames[i]] = observer;\n    observer.subscribe(sourceContext, this);\n\n    if (i === observerSlots) {\n      this._observerSlots = i + 1;\n    }\n  }\n\n  if (this._version === undefined) {\n    this._version = 0;\n  }\n  this[versionSlotNames[i]] = this._version;\n  ensureEnoughSlotNames(i);\n}\n\nfunction observeProperty(obj, propertyName) {\n  var observer = this.observerLocator.getObserver(obj, propertyName);\n  addObserver.call(this, observer);\n}\n\nfunction observeArray(array) {\n  var observer = this.observerLocator.getArrayObserver(array);\n  addObserver.call(this, observer);\n}\n\nfunction unobserve(all) {\n  var i = this._observerSlots;\n  while (i--) {\n    if (all || this[versionSlotNames[i]] !== this._version) {\n      var observer = this[slotNames[i]];\n      this[slotNames[i]] = null;\n      if (observer) {\n        observer.unsubscribe(sourceContext, this);\n      }\n    }\n  }\n}\n\nexport function connectable() {\n  return function (target) {\n    target.prototype.observeProperty = observeProperty;\n    target.prototype.observeArray = observeArray;\n    target.prototype.unobserve = unobserve;\n    target.prototype.addObserver = addObserver;\n  };\n}\n\nvar queue = [];\nvar queued = {};\nvar nextId = 0;\nvar minimumImmediate = 100;\nvar frameBudget = 15;\n\nvar isFlushRequested = false;\nvar immediate = 0;\n\nfunction flush(animationFrameStart) {\n  var length = queue.length;\n  var i = 0;\n  while (i < length) {\n    var binding = queue[i];\n    queued[binding.__connectQueueId] = false;\n    binding.connect(true);\n    i++;\n\n    if (i % 100 === 0 && PLATFORM.performance.now() - animationFrameStart > frameBudget) {\n      break;\n    }\n  }\n  queue.splice(0, i);\n\n  if (queue.length) {\n    PLATFORM.requestAnimationFrame(flush);\n  } else {\n    isFlushRequested = false;\n    immediate = 0;\n  }\n}\n\nexport function enqueueBindingConnect(binding) {\n  if (immediate < minimumImmediate) {\n    immediate++;\n    binding.connect(false);\n  } else {\n    var id = binding.__connectQueueId;\n    if (id === undefined) {\n      id = nextId;\n      nextId++;\n      binding.__connectQueueId = id;\n    }\n\n    if (!queued[id]) {\n      queue.push(binding);\n      queued[id] = true;\n    }\n  }\n  if (!isFlushRequested) {\n    isFlushRequested = true;\n    PLATFORM.requestAnimationFrame(flush);\n  }\n}\n\nexport function setConnectQueueThreshold(value) {\n  minimumImmediate = value;\n}\n\nexport function enableConnectQueue() {\n  setConnectQueueThreshold(100);\n}\n\nexport function disableConnectQueue() {\n  setConnectQueueThreshold(Number.MAX_SAFE_INTEGER);\n}\n\nexport function getConnectQueueSize() {\n  return queue.length;\n}\n\nfunction addSubscriber(context, callable) {\n  if (this.hasSubscriber(context, callable)) {\n    return false;\n  }\n  if (!this._context0) {\n    this._context0 = context;\n    this._callable0 = callable;\n    return true;\n  }\n  if (!this._context1) {\n    this._context1 = context;\n    this._callable1 = callable;\n    return true;\n  }\n  if (!this._context2) {\n    this._context2 = context;\n    this._callable2 = callable;\n    return true;\n  }\n  if (!this._contextsRest) {\n    this._contextsRest = [context];\n    this._callablesRest = [callable];\n    return true;\n  }\n  this._contextsRest.push(context);\n  this._callablesRest.push(callable);\n  return true;\n}\n\nfunction removeSubscriber(context, callable) {\n  if (this._context0 === context && this._callable0 === callable) {\n    this._context0 = null;\n    this._callable0 = null;\n    return true;\n  }\n  if (this._context1 === context && this._callable1 === callable) {\n    this._context1 = null;\n    this._callable1 = null;\n    return true;\n  }\n  if (this._context2 === context && this._callable2 === callable) {\n    this._context2 = null;\n    this._callable2 = null;\n    return true;\n  }\n  var callables = this._callablesRest;\n  if (callables === undefined || callables.length === 0) {\n    return false;\n  }\n  var contexts = this._contextsRest;\n  var i = 0;\n  while (!(callables[i] === callable && contexts[i] === context) && callables.length > i) {\n    i++;\n  }\n  if (i >= callables.length) {\n    return false;\n  }\n  contexts.splice(i, 1);\n  callables.splice(i, 1);\n  return true;\n}\n\nvar arrayPool1 = [];\nvar arrayPool2 = [];\nvar poolUtilization = [];\n\nfunction callSubscribers(newValue, oldValue) {\n  var context0 = this._context0;\n  var callable0 = this._callable0;\n  var context1 = this._context1;\n  var callable1 = this._callable1;\n  var context2 = this._context2;\n  var callable2 = this._callable2;\n  var length = this._contextsRest ? this._contextsRest.length : 0;\n  var contextsRest = void 0;\n  var callablesRest = void 0;\n  var poolIndex = void 0;\n  var i = void 0;\n  if (length) {\n    poolIndex = poolUtilization.length;\n    while (poolIndex-- && poolUtilization[poolIndex]) {}\n    if (poolIndex < 0) {\n      poolIndex = poolUtilization.length;\n      contextsRest = [];\n      callablesRest = [];\n      poolUtilization.push(true);\n      arrayPool1.push(contextsRest);\n      arrayPool2.push(callablesRest);\n    } else {\n      poolUtilization[poolIndex] = true;\n      contextsRest = arrayPool1[poolIndex];\n      callablesRest = arrayPool2[poolIndex];\n    }\n\n    i = length;\n    while (i--) {\n      contextsRest[i] = this._contextsRest[i];\n      callablesRest[i] = this._callablesRest[i];\n    }\n  }\n\n  if (context0) {\n    if (callable0) {\n      callable0.call(context0, newValue, oldValue);\n    } else {\n      context0(newValue, oldValue);\n    }\n  }\n  if (context1) {\n    if (callable1) {\n      callable1.call(context1, newValue, oldValue);\n    } else {\n      context1(newValue, oldValue);\n    }\n  }\n  if (context2) {\n    if (callable2) {\n      callable2.call(context2, newValue, oldValue);\n    } else {\n      context2(newValue, oldValue);\n    }\n  }\n  if (length) {\n    for (i = 0; i < length; i++) {\n      var callable = callablesRest[i];\n      var context = contextsRest[i];\n      if (callable) {\n        callable.call(context, newValue, oldValue);\n      } else {\n        context(newValue, oldValue);\n      }\n      contextsRest[i] = null;\n      callablesRest[i] = null;\n    }\n    poolUtilization[poolIndex] = false;\n  }\n}\n\nfunction hasSubscribers() {\n  return !!(this._context0 || this._context1 || this._context2 || this._contextsRest && this._contextsRest.length);\n}\n\nfunction hasSubscriber(context, callable) {\n  var has = this._context0 === context && this._callable0 === callable || this._context1 === context && this._callable1 === callable || this._context2 === context && this._callable2 === callable;\n  if (has) {\n    return true;\n  }\n  var index = void 0;\n  var contexts = this._contextsRest;\n  if (!contexts || (index = contexts.length) === 0) {\n    return false;\n  }\n  var callables = this._callablesRest;\n  while (index--) {\n    if (contexts[index] === context && callables[index] === callable) {\n      return true;\n    }\n  }\n  return false;\n}\n\nexport function subscriberCollection() {\n  return function (target) {\n    target.prototype.addSubscriber = addSubscriber;\n    target.prototype.removeSubscriber = removeSubscriber;\n    target.prototype.callSubscribers = callSubscribers;\n    target.prototype.hasSubscribers = hasSubscribers;\n    target.prototype.hasSubscriber = hasSubscriber;\n  };\n}\n\nexport var ExpressionObserver = (_dec = connectable(), _dec2 = subscriberCollection(), _dec(_class = _dec2(_class = function () {\n  function ExpressionObserver(scope, expression, observerLocator, lookupFunctions) {\n    \n\n    this.scope = scope;\n    this.expression = expression;\n    this.observerLocator = observerLocator;\n    this.lookupFunctions = lookupFunctions;\n  }\n\n  ExpressionObserver.prototype.getValue = function getValue() {\n    return this.expression.evaluate(this.scope, this.lookupFunctions);\n  };\n\n  ExpressionObserver.prototype.setValue = function setValue(newValue) {\n    this.expression.assign(this.scope, newValue);\n  };\n\n  ExpressionObserver.prototype.subscribe = function subscribe(context, callable) {\n    var _this = this;\n\n    if (!this.hasSubscribers()) {\n      this.oldValue = this.expression.evaluate(this.scope, this.lookupFunctions);\n      this.expression.connect(this, this.scope);\n    }\n    this.addSubscriber(context, callable);\n    if (arguments.length === 1 && context instanceof Function) {\n      return {\n        dispose: function dispose() {\n          _this.unsubscribe(context, callable);\n        }\n      };\n    }\n  };\n\n  ExpressionObserver.prototype.unsubscribe = function unsubscribe(context, callable) {\n    if (this.removeSubscriber(context, callable) && !this.hasSubscribers()) {\n      this.unobserve(true);\n      this.oldValue = undefined;\n    }\n  };\n\n  ExpressionObserver.prototype.call = function call() {\n    var newValue = this.expression.evaluate(this.scope, this.lookupFunctions);\n    var oldValue = this.oldValue;\n    if (newValue !== oldValue) {\n      this.oldValue = newValue;\n      this.callSubscribers(newValue, oldValue);\n    }\n    this._version++;\n    this.expression.connect(this, this.scope);\n    this.unobserve(false);\n  };\n\n  return ExpressionObserver;\n}()) || _class) || _class);\n\nfunction isIndex(s) {\n  return +s === s >>> 0;\n}\n\nfunction toNumber(s) {\n  return +s;\n}\n\nfunction newSplice(index, removed, addedCount) {\n  return {\n    index: index,\n    removed: removed,\n    addedCount: addedCount\n  };\n}\n\nvar EDIT_LEAVE = 0;\nvar EDIT_UPDATE = 1;\nvar EDIT_ADD = 2;\nvar EDIT_DELETE = 3;\n\nfunction ArraySplice() {}\n\nArraySplice.prototype = {\n  calcEditDistances: function calcEditDistances(current, currentStart, currentEnd, old, oldStart, oldEnd) {\n    var rowCount = oldEnd - oldStart + 1;\n    var columnCount = currentEnd - currentStart + 1;\n    var distances = new Array(rowCount);\n    var north = void 0;\n    var west = void 0;\n\n    for (var i = 0; i < rowCount; ++i) {\n      distances[i] = new Array(columnCount);\n      distances[i][0] = i;\n    }\n\n    for (var j = 0; j < columnCount; ++j) {\n      distances[0][j] = j;\n    }\n\n    for (var _i = 1; _i < rowCount; ++_i) {\n      for (var _j = 1; _j < columnCount; ++_j) {\n        if (this.equals(current[currentStart + _j - 1], old[oldStart + _i - 1])) {\n          distances[_i][_j] = distances[_i - 1][_j - 1];\n        } else {\n          north = distances[_i - 1][_j] + 1;\n          west = distances[_i][_j - 1] + 1;\n          distances[_i][_j] = north < west ? north : west;\n        }\n      }\n    }\n\n    return distances;\n  },\n\n  spliceOperationsFromEditDistances: function spliceOperationsFromEditDistances(distances) {\n    var i = distances.length - 1;\n    var j = distances[0].length - 1;\n    var current = distances[i][j];\n    var edits = [];\n    while (i > 0 || j > 0) {\n      if (i === 0) {\n        edits.push(EDIT_ADD);\n        j--;\n        continue;\n      }\n      if (j === 0) {\n        edits.push(EDIT_DELETE);\n        i--;\n        continue;\n      }\n      var northWest = distances[i - 1][j - 1];\n      var west = distances[i - 1][j];\n      var north = distances[i][j - 1];\n\n      var min = void 0;\n      if (west < north) {\n        min = west < northWest ? west : northWest;\n      } else {\n        min = north < northWest ? north : northWest;\n      }\n\n      if (min === northWest) {\n        if (northWest === current) {\n          edits.push(EDIT_LEAVE);\n        } else {\n          edits.push(EDIT_UPDATE);\n          current = northWest;\n        }\n        i--;\n        j--;\n      } else if (min === west) {\n        edits.push(EDIT_DELETE);\n        i--;\n        current = west;\n      } else {\n        edits.push(EDIT_ADD);\n        j--;\n        current = north;\n      }\n    }\n\n    edits.reverse();\n    return edits;\n  },\n\n  calcSplices: function calcSplices(current, currentStart, currentEnd, old, oldStart, oldEnd) {\n    var prefixCount = 0;\n    var suffixCount = 0;\n\n    var minLength = Math.min(currentEnd - currentStart, oldEnd - oldStart);\n    if (currentStart === 0 && oldStart === 0) {\n      prefixCount = this.sharedPrefix(current, old, minLength);\n    }\n\n    if (currentEnd === current.length && oldEnd === old.length) {\n      suffixCount = this.sharedSuffix(current, old, minLength - prefixCount);\n    }\n\n    currentStart += prefixCount;\n    oldStart += prefixCount;\n    currentEnd -= suffixCount;\n    oldEnd -= suffixCount;\n\n    if (currentEnd - currentStart === 0 && oldEnd - oldStart === 0) {\n      return [];\n    }\n\n    if (currentStart === currentEnd) {\n      var _splice = newSplice(currentStart, [], 0);\n      while (oldStart < oldEnd) {\n        _splice.removed.push(old[oldStart++]);\n      }\n\n      return [_splice];\n    } else if (oldStart === oldEnd) {\n      return [newSplice(currentStart, [], currentEnd - currentStart)];\n    }\n\n    var ops = this.spliceOperationsFromEditDistances(this.calcEditDistances(current, currentStart, currentEnd, old, oldStart, oldEnd));\n\n    var splice = undefined;\n    var splices = [];\n    var index = currentStart;\n    var oldIndex = oldStart;\n    for (var i = 0; i < ops.length; ++i) {\n      switch (ops[i]) {\n        case EDIT_LEAVE:\n          if (splice) {\n            splices.push(splice);\n            splice = undefined;\n          }\n\n          index++;\n          oldIndex++;\n          break;\n        case EDIT_UPDATE:\n          if (!splice) {\n            splice = newSplice(index, [], 0);\n          }\n\n          splice.addedCount++;\n          index++;\n\n          splice.removed.push(old[oldIndex]);\n          oldIndex++;\n          break;\n        case EDIT_ADD:\n          if (!splice) {\n            splice = newSplice(index, [], 0);\n          }\n\n          splice.addedCount++;\n          index++;\n          break;\n        case EDIT_DELETE:\n          if (!splice) {\n            splice = newSplice(index, [], 0);\n          }\n\n          splice.removed.push(old[oldIndex]);\n          oldIndex++;\n          break;\n      }\n    }\n\n    if (splice) {\n      splices.push(splice);\n    }\n    return splices;\n  },\n\n  sharedPrefix: function sharedPrefix(current, old, searchLength) {\n    for (var i = 0; i < searchLength; ++i) {\n      if (!this.equals(current[i], old[i])) {\n        return i;\n      }\n    }\n\n    return searchLength;\n  },\n\n  sharedSuffix: function sharedSuffix(current, old, searchLength) {\n    var index1 = current.length;\n    var index2 = old.length;\n    var count = 0;\n    while (count < searchLength && this.equals(current[--index1], old[--index2])) {\n      count++;\n    }\n\n    return count;\n  },\n\n  calculateSplices: function calculateSplices(current, previous) {\n    return this.calcSplices(current, 0, current.length, previous, 0, previous.length);\n  },\n\n  equals: function equals(currentValue, previousValue) {\n    return currentValue === previousValue;\n  }\n};\n\nvar arraySplice = new ArraySplice();\n\nexport function calcSplices(current, currentStart, currentEnd, old, oldStart, oldEnd) {\n  return arraySplice.calcSplices(current, currentStart, currentEnd, old, oldStart, oldEnd);\n}\n\nfunction intersect(start1, end1, start2, end2) {\n  if (end1 < start2 || end2 < start1) {\n    return -1;\n  }\n\n  if (end1 === start2 || end2 === start1) {\n    return 0;\n  }\n\n  if (start1 < start2) {\n    if (end1 < end2) {\n      return end1 - start2;\n    }\n\n    return end2 - start2;\n  }\n\n  if (end2 < end1) {\n    return end2 - start1;\n  }\n\n  return end1 - start1;\n}\n\nexport function mergeSplice(splices, index, removed, addedCount) {\n  var splice = newSplice(index, removed, addedCount);\n\n  var inserted = false;\n  var insertionOffset = 0;\n\n  for (var i = 0; i < splices.length; i++) {\n    var current = splices[i];\n    current.index += insertionOffset;\n\n    if (inserted) {\n      continue;\n    }\n\n    var intersectCount = intersect(splice.index, splice.index + splice.removed.length, current.index, current.index + current.addedCount);\n\n    if (intersectCount >= 0) {\n\n      splices.splice(i, 1);\n      i--;\n\n      insertionOffset -= current.addedCount - current.removed.length;\n\n      splice.addedCount += current.addedCount - intersectCount;\n      var deleteCount = splice.removed.length + current.removed.length - intersectCount;\n\n      if (!splice.addedCount && !deleteCount) {\n        inserted = true;\n      } else {\n        var currentRemoved = current.removed;\n\n        if (splice.index < current.index) {\n          var prepend = splice.removed.slice(0, current.index - splice.index);\n          Array.prototype.push.apply(prepend, currentRemoved);\n          currentRemoved = prepend;\n        }\n\n        if (splice.index + splice.removed.length > current.index + current.addedCount) {\n          var append = splice.removed.slice(current.index + current.addedCount - splice.index);\n          Array.prototype.push.apply(currentRemoved, append);\n        }\n\n        splice.removed = currentRemoved;\n        if (current.index < splice.index) {\n          splice.index = current.index;\n        }\n      }\n    } else if (splice.index < current.index) {\n\n      inserted = true;\n\n      splices.splice(i, 0, splice);\n      i++;\n\n      var offset = splice.addedCount - splice.removed.length;\n      current.index += offset;\n      insertionOffset += offset;\n    }\n  }\n\n  if (!inserted) {\n    splices.push(splice);\n  }\n}\n\nfunction createInitialSplices(array, changeRecords) {\n  var splices = [];\n\n  for (var i = 0; i < changeRecords.length; i++) {\n    var record = changeRecords[i];\n    switch (record.type) {\n      case 'splice':\n        mergeSplice(splices, record.index, record.removed.slice(), record.addedCount);\n        break;\n      case 'add':\n      case 'update':\n      case 'delete':\n        if (!isIndex(record.name)) {\n          continue;\n        }\n\n        var index = toNumber(record.name);\n        if (index < 0) {\n          continue;\n        }\n\n        mergeSplice(splices, index, [record.oldValue], record.type === 'delete' ? 0 : 1);\n        break;\n      default:\n        console.error('Unexpected record type: ' + JSON.stringify(record));\n        break;\n    }\n  }\n\n  return splices;\n}\n\nexport function projectArraySplices(array, changeRecords) {\n  var splices = [];\n\n  createInitialSplices(array, changeRecords).forEach(function (splice) {\n    if (splice.addedCount === 1 && splice.removed.length === 1) {\n      if (splice.removed[0] !== array[splice.index]) {\n        splices.push(splice);\n      }\n\n      return;\n    }\n\n    splices = splices.concat(calcSplices(array, splice.index, splice.index + splice.addedCount, splice.removed, 0, splice.removed.length));\n  });\n\n  return splices;\n}\n\nfunction newRecord(type, object, key, oldValue) {\n  return {\n    type: type,\n    object: object,\n    key: key,\n    oldValue: oldValue\n  };\n}\n\nexport function getChangeRecords(map) {\n  var entries = new Array(map.size);\n  var keys = map.keys();\n  var i = 0;\n  var item = void 0;\n\n  while (item = keys.next()) {\n    if (item.done) {\n      break;\n    }\n\n    entries[i] = newRecord('added', map, item.value);\n    i++;\n  }\n\n  return entries;\n}\n\nexport var ModifyCollectionObserver = (_dec3 = subscriberCollection(), _dec3(_class2 = function () {\n  function ModifyCollectionObserver(taskQueue, collection) {\n    \n\n    this.taskQueue = taskQueue;\n    this.queued = false;\n    this.changeRecords = null;\n    this.oldCollection = null;\n    this.collection = collection;\n    this.lengthPropertyName = collection instanceof Map || collection instanceof Set ? 'size' : 'length';\n  }\n\n  ModifyCollectionObserver.prototype.subscribe = function subscribe(context, callable) {\n    this.addSubscriber(context, callable);\n  };\n\n  ModifyCollectionObserver.prototype.unsubscribe = function unsubscribe(context, callable) {\n    this.removeSubscriber(context, callable);\n  };\n\n  ModifyCollectionObserver.prototype.addChangeRecord = function addChangeRecord(changeRecord) {\n    if (!this.hasSubscribers() && !this.lengthObserver) {\n      return;\n    }\n\n    if (changeRecord.type === 'splice') {\n      var index = changeRecord.index;\n      var arrayLength = changeRecord.object.length;\n      if (index > arrayLength) {\n        index = arrayLength - changeRecord.addedCount;\n      } else if (index < 0) {\n        index = arrayLength + changeRecord.removed.length + index - changeRecord.addedCount;\n      }\n      if (index < 0) {\n        index = 0;\n      }\n      changeRecord.index = index;\n    }\n\n    if (this.changeRecords === null) {\n      this.changeRecords = [changeRecord];\n    } else {\n      this.changeRecords.push(changeRecord);\n    }\n\n    if (!this.queued) {\n      this.queued = true;\n      this.taskQueue.queueMicroTask(this);\n    }\n  };\n\n  ModifyCollectionObserver.prototype.flushChangeRecords = function flushChangeRecords() {\n    if (this.changeRecords && this.changeRecords.length || this.oldCollection) {\n      this.call();\n    }\n  };\n\n  ModifyCollectionObserver.prototype.reset = function reset(oldCollection) {\n    this.oldCollection = oldCollection;\n\n    if (this.hasSubscribers() && !this.queued) {\n      this.queued = true;\n      this.taskQueue.queueMicroTask(this);\n    }\n  };\n\n  ModifyCollectionObserver.prototype.getLengthObserver = function getLengthObserver() {\n    return this.lengthObserver || (this.lengthObserver = new CollectionLengthObserver(this.collection));\n  };\n\n  ModifyCollectionObserver.prototype.call = function call() {\n    var changeRecords = this.changeRecords;\n    var oldCollection = this.oldCollection;\n    var records = void 0;\n\n    this.queued = false;\n    this.changeRecords = [];\n    this.oldCollection = null;\n\n    if (this.hasSubscribers()) {\n      if (oldCollection) {\n        if (this.collection instanceof Map || this.collection instanceof Set) {\n          records = getChangeRecords(oldCollection);\n        } else {\n          records = calcSplices(this.collection, 0, this.collection.length, oldCollection, 0, oldCollection.length);\n        }\n      } else {\n        if (this.collection instanceof Map || this.collection instanceof Set) {\n          records = changeRecords;\n        } else {\n          records = projectArraySplices(this.collection, changeRecords);\n        }\n      }\n\n      this.callSubscribers(records);\n    }\n\n    if (this.lengthObserver) {\n      this.lengthObserver.call(this.collection[this.lengthPropertyName]);\n    }\n  };\n\n  return ModifyCollectionObserver;\n}()) || _class2);\n\nexport var CollectionLengthObserver = (_dec4 = subscriberCollection(), _dec4(_class3 = function () {\n  function CollectionLengthObserver(collection) {\n    \n\n    this.collection = collection;\n    this.lengthPropertyName = collection instanceof Map || collection instanceof Set ? 'size' : 'length';\n    this.currentValue = collection[this.lengthPropertyName];\n  }\n\n  CollectionLengthObserver.prototype.getValue = function getValue() {\n    return this.collection[this.lengthPropertyName];\n  };\n\n  CollectionLengthObserver.prototype.setValue = function setValue(newValue) {\n    this.collection[this.lengthPropertyName] = newValue;\n  };\n\n  CollectionLengthObserver.prototype.subscribe = function subscribe(context, callable) {\n    this.addSubscriber(context, callable);\n  };\n\n  CollectionLengthObserver.prototype.unsubscribe = function unsubscribe(context, callable) {\n    this.removeSubscriber(context, callable);\n  };\n\n  CollectionLengthObserver.prototype.call = function call(newValue) {\n    var oldValue = this.currentValue;\n    this.callSubscribers(newValue, oldValue);\n    this.currentValue = newValue;\n  };\n\n  return CollectionLengthObserver;\n}()) || _class3);\n\nvar arrayProto = Array.prototype;\nvar pop = arrayProto.pop;\nvar push = arrayProto.push;\nvar reverse = arrayProto.reverse;\nvar shift = arrayProto.shift;\nvar sort = arrayProto.sort;\nvar splice = arrayProto.splice;\nvar unshift = arrayProto.unshift;\n\nif (arrayProto.__au_patched__) {\n  LogManager.getLogger('array-observation').warn('Detected 2nd attempt of patching array from Aurelia binding.' + ' This is probably caused by dependency mismatch between core modules and a 3rd party plugin.' + ' Please see https://github.com/aurelia/cli/pull/906 if you are using webpack.');\n} else {\n  Reflect.defineProperty(arrayProto, '__au_patched__', { value: 1 });\n  arrayProto.pop = function () {\n    var notEmpty = this.length > 0;\n    var methodCallResult = pop.apply(this, arguments);\n    if (notEmpty && this.__array_observer__ !== undefined) {\n      this.__array_observer__.addChangeRecord({\n        type: 'delete',\n        object: this,\n        name: this.length,\n        oldValue: methodCallResult\n      });\n    }\n    return methodCallResult;\n  };\n\n  arrayProto.push = function () {\n    var methodCallResult = push.apply(this, arguments);\n    if (this.__array_observer__ !== undefined) {\n      this.__array_observer__.addChangeRecord({\n        type: 'splice',\n        object: this,\n        index: this.length - arguments.length,\n        removed: [],\n        addedCount: arguments.length\n      });\n    }\n    return methodCallResult;\n  };\n\n  arrayProto.reverse = function () {\n    var oldArray = void 0;\n    if (this.__array_observer__ !== undefined) {\n      this.__array_observer__.flushChangeRecords();\n      oldArray = this.slice();\n    }\n    var methodCallResult = reverse.apply(this, arguments);\n    if (this.__array_observer__ !== undefined) {\n      this.__array_observer__.reset(oldArray);\n    }\n    return methodCallResult;\n  };\n\n  arrayProto.shift = function () {\n    var notEmpty = this.length > 0;\n    var methodCallResult = shift.apply(this, arguments);\n    if (notEmpty && this.__array_observer__ !== undefined) {\n      this.__array_observer__.addChangeRecord({\n        type: 'delete',\n        object: this,\n        name: 0,\n        oldValue: methodCallResult\n      });\n    }\n    return methodCallResult;\n  };\n\n  arrayProto.sort = function () {\n    var oldArray = void 0;\n    if (this.__array_observer__ !== undefined) {\n      this.__array_observer__.flushChangeRecords();\n      oldArray = this.slice();\n    }\n    var methodCallResult = sort.apply(this, arguments);\n    if (this.__array_observer__ !== undefined) {\n      this.__array_observer__.reset(oldArray);\n    }\n    return methodCallResult;\n  };\n\n  arrayProto.splice = function () {\n    var methodCallResult = splice.apply(this, arguments);\n    if (this.__array_observer__ !== undefined) {\n      this.__array_observer__.addChangeRecord({\n        type: 'splice',\n        object: this,\n        index: +arguments[0],\n        removed: methodCallResult,\n        addedCount: arguments.length > 2 ? arguments.length - 2 : 0\n      });\n    }\n    return methodCallResult;\n  };\n\n  arrayProto.unshift = function () {\n    var methodCallResult = unshift.apply(this, arguments);\n    if (this.__array_observer__ !== undefined) {\n      this.__array_observer__.addChangeRecord({\n        type: 'splice',\n        object: this,\n        index: 0,\n        removed: [],\n        addedCount: arguments.length\n      });\n    }\n    return methodCallResult;\n  };\n}\n\nfunction _getArrayObserver(taskQueue, array) {\n  return ModifyArrayObserver.for(taskQueue, array);\n}\n\nvar ModifyArrayObserver = function (_ModifyCollectionObse) {\n  _inherits(ModifyArrayObserver, _ModifyCollectionObse);\n\n  function ModifyArrayObserver(taskQueue, array) {\n    \n\n    return _possibleConstructorReturn(this, _ModifyCollectionObse.call(this, taskQueue, array));\n  }\n\n  ModifyArrayObserver.for = function _for(taskQueue, array) {\n    if (!('__array_observer__' in array)) {\n      Reflect.defineProperty(array, '__array_observer__', {\n        value: ModifyArrayObserver.create(taskQueue, array),\n        enumerable: false, configurable: false\n      });\n    }\n    return array.__array_observer__;\n  };\n\n  ModifyArrayObserver.create = function create(taskQueue, array) {\n    return new ModifyArrayObserver(taskQueue, array);\n  };\n\n  return ModifyArrayObserver;\n}(ModifyCollectionObserver);\n\nexport var Expression = function () {\n  function Expression() {\n    \n\n    this.isAssignable = false;\n  }\n\n  Expression.prototype.evaluate = function evaluate(scope, lookupFunctions, args) {\n    throw new Error('Binding expression \"' + this + '\" cannot be evaluated.');\n  };\n\n  Expression.prototype.assign = function assign(scope, value, lookupFunctions) {\n    throw new Error('Binding expression \"' + this + '\" cannot be assigned to.');\n  };\n\n  Expression.prototype.toString = function toString() {\n    return typeof FEATURE_NO_UNPARSER === 'undefined' ? _Unparser.unparse(this) : Function.prototype.toString.call(this);\n  };\n\n  return Expression;\n}();\n\nexport var BindingBehavior = function (_Expression) {\n  _inherits(BindingBehavior, _Expression);\n\n  function BindingBehavior(expression, name, args) {\n    \n\n    var _this3 = _possibleConstructorReturn(this, _Expression.call(this));\n\n    _this3.expression = expression;\n    _this3.name = name;\n    _this3.args = args;\n    return _this3;\n  }\n\n  BindingBehavior.prototype.evaluate = function evaluate(scope, lookupFunctions) {\n    return this.expression.evaluate(scope, lookupFunctions);\n  };\n\n  BindingBehavior.prototype.assign = function assign(scope, value, lookupFunctions) {\n    return this.expression.assign(scope, value, lookupFunctions);\n  };\n\n  BindingBehavior.prototype.accept = function accept(visitor) {\n    return visitor.visitBindingBehavior(this);\n  };\n\n  BindingBehavior.prototype.connect = function connect(binding, scope) {\n    this.expression.connect(binding, scope);\n  };\n\n  BindingBehavior.prototype.bind = function bind(binding, scope, lookupFunctions) {\n    if (this.expression.expression && this.expression.bind) {\n      this.expression.bind(binding, scope, lookupFunctions);\n    }\n    var behavior = lookupFunctions.bindingBehaviors(this.name);\n    if (!behavior) {\n      throw new Error('No BindingBehavior named \"' + this.name + '\" was found!');\n    }\n    var behaviorKey = 'behavior-' + this.name;\n    if (binding[behaviorKey]) {\n      throw new Error('A binding behavior named \"' + this.name + '\" has already been applied to \"' + this.expression + '\"');\n    }\n    binding[behaviorKey] = behavior;\n    behavior.bind.apply(behavior, [binding, scope].concat(evalList(scope, this.args, binding.lookupFunctions)));\n  };\n\n  BindingBehavior.prototype.unbind = function unbind(binding, scope) {\n    var behaviorKey = 'behavior-' + this.name;\n    binding[behaviorKey].unbind(binding, scope);\n    binding[behaviorKey] = null;\n    if (this.expression.expression && this.expression.unbind) {\n      this.expression.unbind(binding, scope);\n    }\n  };\n\n  return BindingBehavior;\n}(Expression);\n\nexport var ValueConverter = function (_Expression2) {\n  _inherits(ValueConverter, _Expression2);\n\n  function ValueConverter(expression, name, args) {\n    \n\n    var _this4 = _possibleConstructorReturn(this, _Expression2.call(this));\n\n    _this4.expression = expression;\n    _this4.name = name;\n    _this4.args = args;\n    _this4.allArgs = [expression].concat(args);\n    return _this4;\n  }\n\n  ValueConverter.prototype.evaluate = function evaluate(scope, lookupFunctions) {\n    var converter = lookupFunctions.valueConverters(this.name);\n    if (!converter) {\n      throw new Error('No ValueConverter named \"' + this.name + '\" was found!');\n    }\n\n    if ('toView' in converter) {\n      return converter.toView.apply(converter, evalList(scope, this.allArgs, lookupFunctions));\n    }\n\n    return this.allArgs[0].evaluate(scope, lookupFunctions);\n  };\n\n  ValueConverter.prototype.assign = function assign(scope, value, lookupFunctions) {\n    var converter = lookupFunctions.valueConverters(this.name);\n    if (!converter) {\n      throw new Error('No ValueConverter named \"' + this.name + '\" was found!');\n    }\n\n    if ('fromView' in converter) {\n      value = converter.fromView.apply(converter, [value].concat(evalList(scope, this.args, lookupFunctions)));\n    }\n\n    return this.allArgs[0].assign(scope, value, lookupFunctions);\n  };\n\n  ValueConverter.prototype.accept = function accept(visitor) {\n    return visitor.visitValueConverter(this);\n  };\n\n  ValueConverter.prototype.connect = function connect(binding, scope) {\n    var expressions = this.allArgs;\n    var i = expressions.length;\n    while (i--) {\n      expressions[i].connect(binding, scope);\n    }\n    var converter = binding.lookupFunctions.valueConverters(this.name);\n    if (!converter) {\n      throw new Error('No ValueConverter named \"' + this.name + '\" was found!');\n    }\n    var signals = converter.signals;\n    if (signals === undefined) {\n      return;\n    }\n    i = signals.length;\n    while (i--) {\n      connectBindingToSignal(binding, signals[i]);\n    }\n  };\n\n  return ValueConverter;\n}(Expression);\n\nexport var Assign = function (_Expression3) {\n  _inherits(Assign, _Expression3);\n\n  function Assign(target, value) {\n    \n\n    var _this5 = _possibleConstructorReturn(this, _Expression3.call(this));\n\n    _this5.target = target;\n    _this5.value = value;\n    _this5.isAssignable = true;\n    return _this5;\n  }\n\n  Assign.prototype.evaluate = function evaluate(scope, lookupFunctions) {\n    return this.target.assign(scope, this.value.evaluate(scope, lookupFunctions));\n  };\n\n  Assign.prototype.accept = function accept(vistor) {\n    vistor.visitAssign(this);\n  };\n\n  Assign.prototype.connect = function connect(binding, scope) {};\n\n  Assign.prototype.assign = function assign(scope, value) {\n    this.value.assign(scope, value);\n    this.target.assign(scope, value);\n  };\n\n  return Assign;\n}(Expression);\n\nexport var Conditional = function (_Expression4) {\n  _inherits(Conditional, _Expression4);\n\n  function Conditional(condition, yes, no) {\n    \n\n    var _this6 = _possibleConstructorReturn(this, _Expression4.call(this));\n\n    _this6.condition = condition;\n    _this6.yes = yes;\n    _this6.no = no;\n    return _this6;\n  }\n\n  Conditional.prototype.evaluate = function evaluate(scope, lookupFunctions) {\n    return !!this.condition.evaluate(scope, lookupFunctions) ? this.yes.evaluate(scope, lookupFunctions) : this.no.evaluate(scope, lookupFunctions);\n  };\n\n  Conditional.prototype.accept = function accept(visitor) {\n    return visitor.visitConditional(this);\n  };\n\n  Conditional.prototype.connect = function connect(binding, scope) {\n    this.condition.connect(binding, scope);\n    if (this.condition.evaluate(scope)) {\n      this.yes.connect(binding, scope);\n    } else {\n      this.no.connect(binding, scope);\n    }\n  };\n\n  return Conditional;\n}(Expression);\n\nexport var AccessThis = function (_Expression5) {\n  _inherits(AccessThis, _Expression5);\n\n  function AccessThis(ancestor) {\n    \n\n    var _this7 = _possibleConstructorReturn(this, _Expression5.call(this));\n\n    _this7.ancestor = ancestor;\n    return _this7;\n  }\n\n  AccessThis.prototype.evaluate = function evaluate(scope, lookupFunctions) {\n    var oc = scope.overrideContext;\n    var i = this.ancestor;\n    while (i-- && oc) {\n      oc = oc.parentOverrideContext;\n    }\n    return i < 1 && oc ? oc.bindingContext : undefined;\n  };\n\n  AccessThis.prototype.accept = function accept(visitor) {\n    return visitor.visitAccessThis(this);\n  };\n\n  AccessThis.prototype.connect = function connect(binding, scope) {};\n\n  return AccessThis;\n}(Expression);\n\nexport var AccessScope = function (_Expression6) {\n  _inherits(AccessScope, _Expression6);\n\n  function AccessScope(name, ancestor) {\n    \n\n    var _this8 = _possibleConstructorReturn(this, _Expression6.call(this));\n\n    _this8.name = name;\n    _this8.ancestor = ancestor;\n    _this8.isAssignable = true;\n    return _this8;\n  }\n\n  AccessScope.prototype.evaluate = function evaluate(scope, lookupFunctions) {\n    var context = getContextFor(this.name, scope, this.ancestor);\n    return context[this.name];\n  };\n\n  AccessScope.prototype.assign = function assign(scope, value) {\n    var context = getContextFor(this.name, scope, this.ancestor);\n    return context ? context[this.name] = value : undefined;\n  };\n\n  AccessScope.prototype.accept = function accept(visitor) {\n    return visitor.visitAccessScope(this);\n  };\n\n  AccessScope.prototype.connect = function connect(binding, scope) {\n    var context = getContextFor(this.name, scope, this.ancestor);\n    binding.observeProperty(context, this.name);\n  };\n\n  return AccessScope;\n}(Expression);\n\nexport var AccessMember = function (_Expression7) {\n  _inherits(AccessMember, _Expression7);\n\n  function AccessMember(object, name) {\n    \n\n    var _this9 = _possibleConstructorReturn(this, _Expression7.call(this));\n\n    _this9.object = object;\n    _this9.name = name;\n    _this9.isAssignable = true;\n    return _this9;\n  }\n\n  AccessMember.prototype.evaluate = function evaluate(scope, lookupFunctions) {\n    var instance = this.object.evaluate(scope, lookupFunctions);\n    return instance === null || instance === undefined ? instance : instance[this.name];\n  };\n\n  AccessMember.prototype.assign = function assign(scope, value) {\n    var instance = this.object.evaluate(scope);\n\n    if (instance === null || instance === undefined) {\n      instance = {};\n      this.object.assign(scope, instance);\n    }\n\n    instance[this.name] = value;\n    return value;\n  };\n\n  AccessMember.prototype.accept = function accept(visitor) {\n    return visitor.visitAccessMember(this);\n  };\n\n  AccessMember.prototype.connect = function connect(binding, scope) {\n    this.object.connect(binding, scope);\n    var obj = this.object.evaluate(scope);\n    if (obj) {\n      binding.observeProperty(obj, this.name);\n    }\n  };\n\n  return AccessMember;\n}(Expression);\n\nexport var AccessKeyed = function (_Expression8) {\n  _inherits(AccessKeyed, _Expression8);\n\n  function AccessKeyed(object, key) {\n    \n\n    var _this10 = _possibleConstructorReturn(this, _Expression8.call(this));\n\n    _this10.object = object;\n    _this10.key = key;\n    _this10.isAssignable = true;\n    return _this10;\n  }\n\n  AccessKeyed.prototype.evaluate = function evaluate(scope, lookupFunctions) {\n    var instance = this.object.evaluate(scope, lookupFunctions);\n    var lookup = this.key.evaluate(scope, lookupFunctions);\n    return getKeyed(instance, lookup);\n  };\n\n  AccessKeyed.prototype.assign = function assign(scope, value) {\n    var instance = this.object.evaluate(scope);\n    var lookup = this.key.evaluate(scope);\n    return setKeyed(instance, lookup, value);\n  };\n\n  AccessKeyed.prototype.accept = function accept(visitor) {\n    return visitor.visitAccessKeyed(this);\n  };\n\n  AccessKeyed.prototype.connect = function connect(binding, scope) {\n    this.object.connect(binding, scope);\n    var obj = this.object.evaluate(scope);\n    if (obj instanceof Object) {\n      this.key.connect(binding, scope);\n      var key = this.key.evaluate(scope);\n\n      if (key !== null && key !== undefined && !(Array.isArray(obj) && typeof key === 'number')) {\n        binding.observeProperty(obj, key);\n      }\n    }\n  };\n\n  return AccessKeyed;\n}(Expression);\n\nexport var CallScope = function (_Expression9) {\n  _inherits(CallScope, _Expression9);\n\n  function CallScope(name, args, ancestor) {\n    \n\n    var _this11 = _possibleConstructorReturn(this, _Expression9.call(this));\n\n    _this11.name = name;\n    _this11.args = args;\n    _this11.ancestor = ancestor;\n    return _this11;\n  }\n\n  CallScope.prototype.evaluate = function evaluate(scope, lookupFunctions, mustEvaluate) {\n    var args = evalList(scope, this.args, lookupFunctions);\n    var context = getContextFor(this.name, scope, this.ancestor);\n    var func = getFunction(context, this.name, mustEvaluate);\n    if (func) {\n      return func.apply(context, args);\n    }\n    return undefined;\n  };\n\n  CallScope.prototype.accept = function accept(visitor) {\n    return visitor.visitCallScope(this);\n  };\n\n  CallScope.prototype.connect = function connect(binding, scope) {\n    var args = this.args;\n    var i = args.length;\n    while (i--) {\n      args[i].connect(binding, scope);\n    }\n  };\n\n  return CallScope;\n}(Expression);\n\nexport var CallMember = function (_Expression10) {\n  _inherits(CallMember, _Expression10);\n\n  function CallMember(object, name, args) {\n    \n\n    var _this12 = _possibleConstructorReturn(this, _Expression10.call(this));\n\n    _this12.object = object;\n    _this12.name = name;\n    _this12.args = args;\n    return _this12;\n  }\n\n  CallMember.prototype.evaluate = function evaluate(scope, lookupFunctions, mustEvaluate) {\n    var instance = this.object.evaluate(scope, lookupFunctions);\n    var args = evalList(scope, this.args, lookupFunctions);\n    var func = getFunction(instance, this.name, mustEvaluate);\n    if (func) {\n      return func.apply(instance, args);\n    }\n    return undefined;\n  };\n\n  CallMember.prototype.accept = function accept(visitor) {\n    return visitor.visitCallMember(this);\n  };\n\n  CallMember.prototype.connect = function connect(binding, scope) {\n    this.object.connect(binding, scope);\n    var obj = this.object.evaluate(scope);\n    if (getFunction(obj, this.name, false)) {\n      var args = this.args;\n      var i = args.length;\n      while (i--) {\n        args[i].connect(binding, scope);\n      }\n    }\n  };\n\n  return CallMember;\n}(Expression);\n\nexport var CallFunction = function (_Expression11) {\n  _inherits(CallFunction, _Expression11);\n\n  function CallFunction(func, args) {\n    \n\n    var _this13 = _possibleConstructorReturn(this, _Expression11.call(this));\n\n    _this13.func = func;\n    _this13.args = args;\n    return _this13;\n  }\n\n  CallFunction.prototype.evaluate = function evaluate(scope, lookupFunctions, mustEvaluate) {\n    var func = this.func.evaluate(scope, lookupFunctions);\n    if (typeof func === 'function') {\n      return func.apply(null, evalList(scope, this.args, lookupFunctions));\n    }\n    if (!mustEvaluate && (func === null || func === undefined)) {\n      return undefined;\n    }\n    throw new Error(this.func + ' is not a function');\n  };\n\n  CallFunction.prototype.accept = function accept(visitor) {\n    return visitor.visitCallFunction(this);\n  };\n\n  CallFunction.prototype.connect = function connect(binding, scope) {\n    this.func.connect(binding, scope);\n    var func = this.func.evaluate(scope);\n    if (typeof func === 'function') {\n      var args = this.args;\n      var i = args.length;\n      while (i--) {\n        args[i].connect(binding, scope);\n      }\n    }\n  };\n\n  return CallFunction;\n}(Expression);\n\nexport var Binary = function (_Expression12) {\n  _inherits(Binary, _Expression12);\n\n  function Binary(operation, left, right) {\n    \n\n    var _this14 = _possibleConstructorReturn(this, _Expression12.call(this));\n\n    _this14.operation = operation;\n    _this14.left = left;\n    _this14.right = right;\n    return _this14;\n  }\n\n  Binary.prototype.evaluate = function evaluate(scope, lookupFunctions) {\n    var left = this.left.evaluate(scope, lookupFunctions);\n\n    switch (this.operation) {\n      case '&&':\n        return left && this.right.evaluate(scope, lookupFunctions);\n      case '||':\n        return left || this.right.evaluate(scope, lookupFunctions);\n    }\n\n    var right = this.right.evaluate(scope, lookupFunctions);\n\n    switch (this.operation) {\n      case '==':\n        return left == right;\n      case '===':\n        return left === right;\n      case '!=':\n        return left != right;\n      case '!==':\n        return left !== right;\n      case 'instanceof':\n        return typeof right === 'function' && left instanceof right;\n      case 'in':\n        return (typeof right === 'undefined' ? 'undefined' : _typeof(right)) === 'object' && right !== null && left in right;\n    }\n\n    if (left === null || right === null || left === undefined || right === undefined) {\n      switch (this.operation) {\n        case '+':\n          if (left !== null && left !== undefined) return left;\n          if (right !== null && right !== undefined) return right;\n          return 0;\n        case '-':\n          if (left !== null && left !== undefined) return left;\n          if (right !== null && right !== undefined) return 0 - right;\n          return 0;\n      }\n\n      return null;\n    }\n\n    switch (this.operation) {\n      case '+':\n        return autoConvertAdd(left, right);\n      case '-':\n        return left - right;\n      case '*':\n        return left * right;\n      case '/':\n        return left / right;\n      case '%':\n        return left % right;\n      case '<':\n        return left < right;\n      case '>':\n        return left > right;\n      case '<=':\n        return left <= right;\n      case '>=':\n        return left >= right;\n      case '^':\n        return left ^ right;\n    }\n\n    throw new Error('Internal error [' + this.operation + '] not handled');\n  };\n\n  Binary.prototype.accept = function accept(visitor) {\n    return visitor.visitBinary(this);\n  };\n\n  Binary.prototype.connect = function connect(binding, scope) {\n    this.left.connect(binding, scope);\n    var left = this.left.evaluate(scope);\n    if (this.operation === '&&' && !left || this.operation === '||' && left) {\n      return;\n    }\n    this.right.connect(binding, scope);\n  };\n\n  return Binary;\n}(Expression);\n\nexport var Unary = function (_Expression13) {\n  _inherits(Unary, _Expression13);\n\n  function Unary(operation, expression) {\n    \n\n    var _this15 = _possibleConstructorReturn(this, _Expression13.call(this));\n\n    _this15.operation = operation;\n    _this15.expression = expression;\n    return _this15;\n  }\n\n  Unary.prototype.evaluate = function evaluate(scope, lookupFunctions) {\n    switch (this.operation) {\n      case '!':\n        return !this.expression.evaluate(scope, lookupFunctions);\n      case 'typeof':\n        return _typeof(this.expression.evaluate(scope, lookupFunctions));\n      case 'void':\n        return void this.expression.evaluate(scope, lookupFunctions);\n    }\n\n    throw new Error('Internal error [' + this.operation + '] not handled');\n  };\n\n  Unary.prototype.accept = function accept(visitor) {\n    return visitor.visitPrefix(this);\n  };\n\n  Unary.prototype.connect = function connect(binding, scope) {\n    this.expression.connect(binding, scope);\n  };\n\n  return Unary;\n}(Expression);\n\nexport var LiteralPrimitive = function (_Expression14) {\n  _inherits(LiteralPrimitive, _Expression14);\n\n  function LiteralPrimitive(value) {\n    \n\n    var _this16 = _possibleConstructorReturn(this, _Expression14.call(this));\n\n    _this16.value = value;\n    return _this16;\n  }\n\n  LiteralPrimitive.prototype.evaluate = function evaluate(scope, lookupFunctions) {\n    return this.value;\n  };\n\n  LiteralPrimitive.prototype.accept = function accept(visitor) {\n    return visitor.visitLiteralPrimitive(this);\n  };\n\n  LiteralPrimitive.prototype.connect = function connect(binding, scope) {};\n\n  return LiteralPrimitive;\n}(Expression);\n\nexport var LiteralString = function (_Expression15) {\n  _inherits(LiteralString, _Expression15);\n\n  function LiteralString(value) {\n    \n\n    var _this17 = _possibleConstructorReturn(this, _Expression15.call(this));\n\n    _this17.value = value;\n    return _this17;\n  }\n\n  LiteralString.prototype.evaluate = function evaluate(scope, lookupFunctions) {\n    return this.value;\n  };\n\n  LiteralString.prototype.accept = function accept(visitor) {\n    return visitor.visitLiteralString(this);\n  };\n\n  LiteralString.prototype.connect = function connect(binding, scope) {};\n\n  return LiteralString;\n}(Expression);\n\nexport var LiteralTemplate = function (_Expression16) {\n  _inherits(LiteralTemplate, _Expression16);\n\n  function LiteralTemplate(cooked, expressions, raw, tag) {\n    \n\n    var _this18 = _possibleConstructorReturn(this, _Expression16.call(this));\n\n    _this18.cooked = cooked;\n    _this18.expressions = expressions || [];\n    _this18.length = _this18.expressions.length;\n    _this18.tagged = tag !== undefined;\n    if (_this18.tagged) {\n      _this18.cooked.raw = raw;\n      _this18.tag = tag;\n      if (tag instanceof AccessScope) {\n        _this18.contextType = 'Scope';\n      } else if (tag instanceof AccessMember || tag instanceof AccessKeyed) {\n        _this18.contextType = 'Object';\n      } else {\n        throw new Error(_this18.tag + ' is not a valid template tag');\n      }\n    }\n    return _this18;\n  }\n\n  LiteralTemplate.prototype.getScopeContext = function getScopeContext(scope, lookupFunctions) {\n    return getContextFor(this.tag.name, scope, this.tag.ancestor);\n  };\n\n  LiteralTemplate.prototype.getObjectContext = function getObjectContext(scope, lookupFunctions) {\n    return this.tag.object.evaluate(scope, lookupFunctions);\n  };\n\n  LiteralTemplate.prototype.evaluate = function evaluate(scope, lookupFunctions, mustEvaluate) {\n    var results = new Array(this.length);\n    for (var i = 0; i < this.length; i++) {\n      results[i] = this.expressions[i].evaluate(scope, lookupFunctions);\n    }\n    if (this.tagged) {\n      var func = this.tag.evaluate(scope, lookupFunctions);\n      if (typeof func === 'function') {\n        var context = this['get' + this.contextType + 'Context'](scope, lookupFunctions);\n        return func.call.apply(func, [context, this.cooked].concat(results));\n      }\n      if (!mustEvaluate) {\n        return null;\n      }\n      throw new Error(this.tag + ' is not a function');\n    }\n    var result = this.cooked[0];\n    for (var _i2 = 0; _i2 < this.length; _i2++) {\n      result = String.prototype.concat(result, results[_i2], this.cooked[_i2 + 1]);\n    }\n    return result;\n  };\n\n  LiteralTemplate.prototype.accept = function accept(visitor) {\n    return visitor.visitLiteralTemplate(this);\n  };\n\n  LiteralTemplate.prototype.connect = function connect(binding, scope) {\n    for (var i = 0; i < this.length; i++) {\n      this.expressions[i].connect(binding, scope);\n    }\n    if (this.tagged) {\n      this.tag.connect(binding, scope);\n    }\n  };\n\n  return LiteralTemplate;\n}(Expression);\n\nexport var LiteralArray = function (_Expression17) {\n  _inherits(LiteralArray, _Expression17);\n\n  function LiteralArray(elements) {\n    \n\n    var _this19 = _possibleConstructorReturn(this, _Expression17.call(this));\n\n    _this19.elements = elements;\n    return _this19;\n  }\n\n  LiteralArray.prototype.evaluate = function evaluate(scope, lookupFunctions) {\n    var elements = this.elements;\n    var result = [];\n\n    for (var i = 0, length = elements.length; i < length; ++i) {\n      result[i] = elements[i].evaluate(scope, lookupFunctions);\n    }\n\n    return result;\n  };\n\n  LiteralArray.prototype.accept = function accept(visitor) {\n    return visitor.visitLiteralArray(this);\n  };\n\n  LiteralArray.prototype.connect = function connect(binding, scope) {\n    var length = this.elements.length;\n    for (var i = 0; i < length; i++) {\n      this.elements[i].connect(binding, scope);\n    }\n  };\n\n  return LiteralArray;\n}(Expression);\n\nexport var LiteralObject = function (_Expression18) {\n  _inherits(LiteralObject, _Expression18);\n\n  function LiteralObject(keys, values) {\n    \n\n    var _this20 = _possibleConstructorReturn(this, _Expression18.call(this));\n\n    _this20.keys = keys;\n    _this20.values = values;\n    return _this20;\n  }\n\n  LiteralObject.prototype.evaluate = function evaluate(scope, lookupFunctions) {\n    var instance = {};\n    var keys = this.keys;\n    var values = this.values;\n\n    for (var i = 0, length = keys.length; i < length; ++i) {\n      instance[keys[i]] = values[i].evaluate(scope, lookupFunctions);\n    }\n\n    return instance;\n  };\n\n  LiteralObject.prototype.accept = function accept(visitor) {\n    return visitor.visitLiteralObject(this);\n  };\n\n  LiteralObject.prototype.connect = function connect(binding, scope) {\n    var length = this.keys.length;\n    for (var i = 0; i < length; i++) {\n      this.values[i].connect(binding, scope);\n    }\n  };\n\n  return LiteralObject;\n}(Expression);\n\nfunction evalList(scope, list, lookupFunctions) {\n  var length = list.length;\n  var result = [];\n  for (var i = 0; i < length; i++) {\n    result[i] = list[i].evaluate(scope, lookupFunctions);\n  }\n  return result;\n}\n\nfunction autoConvertAdd(a, b) {\n  if (a !== null && b !== null) {\n    if (typeof a === 'string' && typeof b !== 'string') {\n      return a + b.toString();\n    }\n\n    if (typeof a !== 'string' && typeof b === 'string') {\n      return a.toString() + b;\n    }\n\n    return a + b;\n  }\n\n  if (a !== null) {\n    return a;\n  }\n\n  if (b !== null) {\n    return b;\n  }\n\n  return 0;\n}\n\nfunction getFunction(obj, name, mustExist) {\n  var func = obj === null || obj === undefined ? null : obj[name];\n  if (typeof func === 'function') {\n    return func;\n  }\n  if (!mustExist && (func === null || func === undefined)) {\n    return null;\n  }\n  throw new Error(name + ' is not a function');\n}\n\nfunction getKeyed(obj, key) {\n  if (Array.isArray(obj)) {\n    return obj[parseInt(key, 10)];\n  } else if (obj) {\n    return obj[key];\n  } else if (obj === null || obj === undefined) {\n    return undefined;\n  }\n\n  return obj[key];\n}\n\nfunction setKeyed(obj, key, value) {\n  if (Array.isArray(obj)) {\n    var index = parseInt(key, 10);\n\n    if (obj.length <= index) {\n      obj.length = index + 1;\n    }\n\n    obj[index] = value;\n  } else {\n    obj[key] = value;\n  }\n\n  return value;\n}\n\nvar _Unparser = null;\n\nexport { _Unparser as Unparser };\nif (typeof FEATURE_NO_UNPARSER === 'undefined') {\n  _Unparser = function () {\n    function Unparser(buffer) {\n      \n\n      this.buffer = buffer;\n    }\n\n    Unparser.unparse = function unparse(expression) {\n      var buffer = [];\n      var visitor = new _Unparser(buffer);\n\n      expression.accept(visitor);\n\n      return buffer.join('');\n    };\n\n    Unparser.prototype.write = function write(text) {\n      this.buffer.push(text);\n    };\n\n    Unparser.prototype.writeArgs = function writeArgs(args) {\n      this.write('(');\n\n      for (var i = 0, length = args.length; i < length; ++i) {\n        if (i !== 0) {\n          this.write(',');\n        }\n\n        args[i].accept(this);\n      }\n\n      this.write(')');\n    };\n\n    Unparser.prototype.visitBindingBehavior = function visitBindingBehavior(behavior) {\n      var args = behavior.args;\n\n      behavior.expression.accept(this);\n      this.write('&' + behavior.name);\n\n      for (var i = 0, length = args.length; i < length; ++i) {\n        this.write(':');\n        args[i].accept(this);\n      }\n    };\n\n    Unparser.prototype.visitValueConverter = function visitValueConverter(converter) {\n      var args = converter.args;\n\n      converter.expression.accept(this);\n      this.write('|' + converter.name);\n\n      for (var i = 0, length = args.length; i < length; ++i) {\n        this.write(':');\n        args[i].accept(this);\n      }\n    };\n\n    Unparser.prototype.visitAssign = function visitAssign(assign) {\n      assign.target.accept(this);\n      this.write('=');\n      assign.value.accept(this);\n    };\n\n    Unparser.prototype.visitConditional = function visitConditional(conditional) {\n      conditional.condition.accept(this);\n      this.write('?');\n      conditional.yes.accept(this);\n      this.write(':');\n      conditional.no.accept(this);\n    };\n\n    Unparser.prototype.visitAccessThis = function visitAccessThis(access) {\n      if (access.ancestor === 0) {\n        this.write('$this');\n        return;\n      }\n      this.write('$parent');\n      var i = access.ancestor - 1;\n      while (i--) {\n        this.write('.$parent');\n      }\n    };\n\n    Unparser.prototype.visitAccessScope = function visitAccessScope(access) {\n      var i = access.ancestor;\n      while (i--) {\n        this.write('$parent.');\n      }\n      this.write(access.name);\n    };\n\n    Unparser.prototype.visitAccessMember = function visitAccessMember(access) {\n      access.object.accept(this);\n      this.write('.' + access.name);\n    };\n\n    Unparser.prototype.visitAccessKeyed = function visitAccessKeyed(access) {\n      access.object.accept(this);\n      this.write('[');\n      access.key.accept(this);\n      this.write(']');\n    };\n\n    Unparser.prototype.visitCallScope = function visitCallScope(call) {\n      var i = call.ancestor;\n      while (i--) {\n        this.write('$parent.');\n      }\n      this.write(call.name);\n      this.writeArgs(call.args);\n    };\n\n    Unparser.prototype.visitCallFunction = function visitCallFunction(call) {\n      call.func.accept(this);\n      this.writeArgs(call.args);\n    };\n\n    Unparser.prototype.visitCallMember = function visitCallMember(call) {\n      call.object.accept(this);\n      this.write('.' + call.name);\n      this.writeArgs(call.args);\n    };\n\n    Unparser.prototype.visitPrefix = function visitPrefix(prefix) {\n      this.write('(' + prefix.operation);\n      if (prefix.operation.charCodeAt(0) >= 97) {\n        this.write(' ');\n      }\n      prefix.expression.accept(this);\n      this.write(')');\n    };\n\n    Unparser.prototype.visitBinary = function visitBinary(binary) {\n      binary.left.accept(this);\n      if (binary.operation.charCodeAt(0) === 105) {\n        this.write(' ' + binary.operation + ' ');\n      } else {\n        this.write(binary.operation);\n      }\n      binary.right.accept(this);\n    };\n\n    Unparser.prototype.visitLiteralPrimitive = function visitLiteralPrimitive(literal) {\n      this.write('' + literal.value);\n    };\n\n    Unparser.prototype.visitLiteralArray = function visitLiteralArray(literal) {\n      var elements = literal.elements;\n\n      this.write('[');\n\n      for (var i = 0, length = elements.length; i < length; ++i) {\n        if (i !== 0) {\n          this.write(',');\n        }\n\n        elements[i].accept(this);\n      }\n\n      this.write(']');\n    };\n\n    Unparser.prototype.visitLiteralObject = function visitLiteralObject(literal) {\n      var keys = literal.keys;\n      var values = literal.values;\n\n      this.write('{');\n\n      for (var i = 0, length = keys.length; i < length; ++i) {\n        if (i !== 0) {\n          this.write(',');\n        }\n\n        this.write('\\'' + keys[i] + '\\':');\n        values[i].accept(this);\n      }\n\n      this.write('}');\n    };\n\n    Unparser.prototype.visitLiteralString = function visitLiteralString(literal) {\n      var escaped = literal.value.replace(/'/g, \"\\'\");\n      this.write('\\'' + escaped + '\\'');\n    };\n\n    Unparser.prototype.visitLiteralTemplate = function visitLiteralTemplate(literal) {\n      var cooked = literal.cooked,\n          expressions = literal.expressions;\n\n      var length = expressions.length;\n      this.write('`');\n      this.write(cooked[0]);\n      for (var i = 0; i < length; i++) {\n        expressions[i].accept(this);\n        this.write(cooked[i + 1]);\n      }\n      this.write('`');\n    };\n\n    return Unparser;\n  }();\n}\n\nexport var ExpressionCloner = function () {\n  function ExpressionCloner() {\n    \n  }\n\n  ExpressionCloner.prototype.cloneExpressionArray = function cloneExpressionArray(array) {\n    var clonedArray = [];\n    var i = array.length;\n    while (i--) {\n      clonedArray[i] = array[i].accept(this);\n    }\n    return clonedArray;\n  };\n\n  ExpressionCloner.prototype.visitBindingBehavior = function visitBindingBehavior(behavior) {\n    return new BindingBehavior(behavior.expression.accept(this), behavior.name, this.cloneExpressionArray(behavior.args));\n  };\n\n  ExpressionCloner.prototype.visitValueConverter = function visitValueConverter(converter) {\n    return new ValueConverter(converter.expression.accept(this), converter.name, this.cloneExpressionArray(converter.args));\n  };\n\n  ExpressionCloner.prototype.visitAssign = function visitAssign(assign) {\n    return new Assign(assign.target.accept(this), assign.value.accept(this));\n  };\n\n  ExpressionCloner.prototype.visitConditional = function visitConditional(conditional) {\n    return new Conditional(conditional.condition.accept(this), conditional.yes.accept(this), conditional.no.accept(this));\n  };\n\n  ExpressionCloner.prototype.visitAccessThis = function visitAccessThis(access) {\n    return new AccessThis(access.ancestor);\n  };\n\n  ExpressionCloner.prototype.visitAccessScope = function visitAccessScope(access) {\n    return new AccessScope(access.name, access.ancestor);\n  };\n\n  ExpressionCloner.prototype.visitAccessMember = function visitAccessMember(access) {\n    return new AccessMember(access.object.accept(this), access.name);\n  };\n\n  ExpressionCloner.prototype.visitAccessKeyed = function visitAccessKeyed(access) {\n    return new AccessKeyed(access.object.accept(this), access.key.accept(this));\n  };\n\n  ExpressionCloner.prototype.visitCallScope = function visitCallScope(call) {\n    return new CallScope(call.name, this.cloneExpressionArray(call.args), call.ancestor);\n  };\n\n  ExpressionCloner.prototype.visitCallFunction = function visitCallFunction(call) {\n    return new CallFunction(call.func.accept(this), this.cloneExpressionArray(call.args));\n  };\n\n  ExpressionCloner.prototype.visitCallMember = function visitCallMember(call) {\n    return new CallMember(call.object.accept(this), call.name, this.cloneExpressionArray(call.args));\n  };\n\n  ExpressionCloner.prototype.visitUnary = function visitUnary(unary) {\n    return new Unary(prefix.operation, prefix.expression.accept(this));\n  };\n\n  ExpressionCloner.prototype.visitBinary = function visitBinary(binary) {\n    return new Binary(binary.operation, binary.left.accept(this), binary.right.accept(this));\n  };\n\n  ExpressionCloner.prototype.visitLiteralPrimitive = function visitLiteralPrimitive(literal) {\n    return new LiteralPrimitive(literal);\n  };\n\n  ExpressionCloner.prototype.visitLiteralArray = function visitLiteralArray(literal) {\n    return new LiteralArray(this.cloneExpressionArray(literal.elements));\n  };\n\n  ExpressionCloner.prototype.visitLiteralObject = function visitLiteralObject(literal) {\n    return new LiteralObject(literal.keys, this.cloneExpressionArray(literal.values));\n  };\n\n  ExpressionCloner.prototype.visitLiteralString = function visitLiteralString(literal) {\n    return new LiteralString(literal.value);\n  };\n\n  ExpressionCloner.prototype.visitLiteralTemplate = function visitLiteralTemplate(literal) {\n    return new LiteralTemplate(literal.cooked, this.cloneExpressionArray(literal.expressions), literal.raw, literal.tag && literal.tag.accept(this));\n  };\n\n  return ExpressionCloner;\n}();\n\nexport function cloneExpression(expression) {\n  var visitor = new ExpressionCloner();\n  return expression.accept(visitor);\n}\n\nexport var bindingMode = {\n  oneTime: 0,\n  toView: 1,\n  oneWay: 1,\n  twoWay: 2,\n  fromView: 3\n};\n\nexport var Parser = function () {\n  function Parser() {\n    \n\n    this.cache = Object.create(null);\n  }\n\n  Parser.prototype.parse = function parse(src) {\n    src = src || '';\n\n    return this.cache[src] || (this.cache[src] = new ParserImplementation(src).parseBindingBehavior());\n  };\n\n  return Parser;\n}();\n\nvar fromCharCode = String.fromCharCode;\n\nexport var ParserImplementation = function () {\n  _createClass(ParserImplementation, [{\n    key: 'raw',\n    get: function get() {\n      return this.src.slice(this.start, this.idx);\n    }\n  }]);\n\n  function ParserImplementation(src) {\n    \n\n    this.idx = 0;\n\n    this.start = 0;\n\n    this.src = src;\n    this.len = src.length;\n\n    this.tkn = T$EOF;\n\n    this.val = undefined;\n\n    this.ch = src.charCodeAt(0);\n  }\n\n  ParserImplementation.prototype.parseBindingBehavior = function parseBindingBehavior() {\n    this.nextToken();\n    if (this.tkn & T$ExpressionTerminal) {\n      this.err('Invalid start of expression');\n    }\n    var result = this.parseValueConverter();\n    while (this.opt(T$Ampersand)) {\n      result = new BindingBehavior(result, this.val, this.parseVariadicArgs());\n    }\n    if (this.tkn !== T$EOF) {\n      this.err('Unconsumed token ' + this.raw);\n    }\n    return result;\n  };\n\n  ParserImplementation.prototype.parseValueConverter = function parseValueConverter() {\n    var result = this.parseExpression();\n    while (this.opt(T$Bar)) {\n      result = new ValueConverter(result, this.val, this.parseVariadicArgs());\n    }\n    return result;\n  };\n\n  ParserImplementation.prototype.parseVariadicArgs = function parseVariadicArgs() {\n    this.nextToken();\n    var result = [];\n    while (this.opt(T$Colon)) {\n      result.push(this.parseExpression());\n    }\n    return result;\n  };\n\n  ParserImplementation.prototype.parseExpression = function parseExpression() {\n    var exprStart = this.idx;\n    var result = this.parseConditional();\n\n    while (this.tkn === T$Eq) {\n      if (!result.isAssignable) {\n        this.err('Expression ' + this.src.slice(exprStart, this.start) + ' is not assignable');\n      }\n      this.nextToken();\n      exprStart = this.idx;\n      result = new Assign(result, this.parseConditional());\n    }\n    return result;\n  };\n\n  ParserImplementation.prototype.parseConditional = function parseConditional() {\n    var result = this.parseBinary(0);\n\n    if (this.opt(T$Question)) {\n      var yes = this.parseExpression();\n      this.expect(T$Colon);\n      result = new Conditional(result, yes, this.parseExpression());\n    }\n    return result;\n  };\n\n  ParserImplementation.prototype.parseBinary = function parseBinary(minPrecedence) {\n    var left = this.parseLeftHandSide(0);\n\n    while (this.tkn & T$BinaryOp) {\n      var opToken = this.tkn;\n      if ((opToken & T$Precedence) <= minPrecedence) {\n        break;\n      }\n      this.nextToken();\n      left = new Binary(TokenValues[opToken & T$TokenMask], left, this.parseBinary(opToken & T$Precedence));\n    }\n    return left;\n  };\n\n  ParserImplementation.prototype.parseLeftHandSide = function parseLeftHandSide(context) {\n    var result = void 0;\n\n    primary: switch (this.tkn) {\n      case T$Plus:\n        this.nextToken();\n        return this.parseLeftHandSide(0);\n      case T$Minus:\n        this.nextToken();\n        return new Binary('-', new LiteralPrimitive(0), this.parseLeftHandSide(0));\n      case T$Bang:\n      case T$TypeofKeyword:\n      case T$VoidKeyword:\n        var op = TokenValues[this.tkn & T$TokenMask];\n        this.nextToken();\n        return new Unary(op, this.parseLeftHandSide(0));\n      case T$ParentScope:\n        {\n          do {\n            this.nextToken();\n            context++;\n            if (this.opt(T$Period)) {\n              if (this.tkn === T$Period) {\n                this.err();\n              }\n              continue;\n            } else if (this.tkn & T$AccessScopeTerminal) {\n              result = new AccessThis(context & C$Ancestor);\n\n              context = context & C$ShorthandProp | C$This;\n              break primary;\n            } else {\n              this.err();\n            }\n          } while (this.tkn === T$ParentScope);\n        }\n\n      case T$Identifier:\n        {\n          result = new AccessScope(this.val, context & C$Ancestor);\n          this.nextToken();\n          context = context & C$ShorthandProp | C$Scope;\n          break;\n        }\n      case T$ThisScope:\n        this.nextToken();\n        result = new AccessThis(0);\n        context = context & C$ShorthandProp | C$This;\n        break;\n      case T$LParen:\n        this.nextToken();\n        result = this.parseExpression();\n        this.expect(T$RParen);\n        context = C$Primary;\n        break;\n      case T$LBracket:\n        {\n          this.nextToken();\n          var _elements = [];\n          if (this.tkn !== T$RBracket) {\n            do {\n              _elements.push(this.parseExpression());\n            } while (this.opt(T$Comma));\n          }\n          this.expect(T$RBracket);\n          result = new LiteralArray(_elements);\n          context = C$Primary;\n          break;\n        }\n      case T$LBrace:\n        {\n          var keys = [];\n          var values = [];\n          this.nextToken();\n          while (this.tkn !== T$RBrace) {\n            if (this.tkn & T$IdentifierOrKeyword) {\n              var ch = this.ch,\n                  tkn = this.tkn,\n                  idx = this.idx;\n\n              keys.push(this.val);\n              this.nextToken();\n              if (this.opt(T$Colon)) {\n                values.push(this.parseExpression());\n              } else {\n                this.ch = ch;\n                this.tkn = tkn;\n                this.idx = idx;\n                values.push(this.parseLeftHandSide(C$ShorthandProp));\n              }\n            } else if (this.tkn & T$Literal) {\n              keys.push(this.val);\n              this.nextToken();\n              this.expect(T$Colon);\n              values.push(this.parseExpression());\n            } else {\n              this.err();\n            }\n            if (this.tkn !== T$RBrace) {\n              this.expect(T$Comma);\n            }\n          }\n          this.expect(T$RBrace);\n          result = new LiteralObject(keys, values);\n          context = C$Primary;\n          break;\n        }\n      case T$StringLiteral:\n        result = new LiteralString(this.val);\n        this.nextToken();\n        context = C$Primary;\n        break;\n      case T$TemplateTail:\n        result = new LiteralTemplate([this.val]);\n        this.nextToken();\n        context = C$Primary;\n        break;\n      case T$TemplateContinuation:\n        result = this.parseTemplate(0);\n        context = C$Primary;\n        break;\n      case T$NumericLiteral:\n        {\n          result = new LiteralPrimitive(this.val);\n          this.nextToken();\n\n          break;\n        }\n      case T$NullKeyword:\n      case T$UndefinedKeyword:\n      case T$TrueKeyword:\n      case T$FalseKeyword:\n        result = new LiteralPrimitive(TokenValues[this.tkn & T$TokenMask]);\n        this.nextToken();\n        context = C$Primary;\n        break;\n      default:\n        if (this.idx >= this.len) {\n          this.err('Unexpected end of expression');\n        } else {\n          this.err();\n        }\n    }\n\n    if (context & C$ShorthandProp) {\n      return result;\n    }\n\n    var name = this.val;\n    while (this.tkn & T$MemberOrCallExpression) {\n      switch (this.tkn) {\n        case T$Period:\n          this.nextToken();\n          if (!(this.tkn & T$IdentifierOrKeyword)) {\n            this.err();\n          }\n          name = this.val;\n          this.nextToken();\n\n          context = context & C$Primary | (context & (C$This | C$Scope)) << 1 | context & C$Member | (context & C$Keyed) >> 1 | (context & C$Call) >> 2;\n          if (this.tkn === T$LParen) {\n            continue;\n          }\n          if (context & C$Scope) {\n            result = new AccessScope(name, result.ancestor);\n          } else {\n            result = new AccessMember(result, name);\n          }\n          continue;\n        case T$LBracket:\n          this.nextToken();\n          context = C$Keyed;\n          result = new AccessKeyed(result, this.parseExpression());\n          this.expect(T$RBracket);\n          break;\n        case T$LParen:\n          this.nextToken();\n          var args = [];\n          while (this.tkn !== T$RParen) {\n            args.push(this.parseExpression());\n            if (!this.opt(T$Comma)) {\n              break;\n            }\n          }\n          this.expect(T$RParen);\n          if (context & C$Scope) {\n            result = new CallScope(name, args, result.ancestor);\n          } else if (context & (C$Member | C$Primary)) {\n            result = new CallMember(result, name, args);\n          } else {\n            result = new CallFunction(result, args);\n          }\n          context = C$Call;\n          break;\n        case T$TemplateTail:\n          result = new LiteralTemplate([this.val], [], [this.raw], result);\n          this.nextToken();\n          break;\n        case T$TemplateContinuation:\n          result = this.parseTemplate(context | C$Tagged, result);\n      }\n    }\n\n    return result;\n  };\n\n  ParserImplementation.prototype.parseTemplate = function parseTemplate(context, func) {\n    var cooked = [this.val];\n    var raw = context & C$Tagged ? [this.raw] : undefined;\n    this.expect(T$TemplateContinuation);\n    var expressions = [this.parseExpression()];\n\n    while ((this.tkn = this.scanTemplateTail()) !== T$TemplateTail) {\n      cooked.push(this.val);\n      if (context & C$Tagged) {\n        raw.push(this.raw);\n      }\n      this.expect(T$TemplateContinuation);\n      expressions.push(this.parseExpression());\n    }\n\n    cooked.push(this.val);\n    if (context & C$Tagged) {\n      raw.push(this.raw);\n    }\n    this.nextToken();\n    return new LiteralTemplate(cooked, expressions, raw, func);\n  };\n\n  ParserImplementation.prototype.nextToken = function nextToken() {\n    while (this.idx < this.len) {\n      if (this.ch <= 0x20) {\n        this.next();\n        continue;\n      }\n      this.start = this.idx;\n      if (this.ch === 0x24 || this.ch >= 0x61 && this.ch <= 0x7A) {\n        this.tkn = this.scanIdentifier();\n        return;\n      }\n\n      if ((this.tkn = CharScanners[this.ch](this)) !== null) {\n        return;\n      }\n    }\n    this.tkn = T$EOF;\n  };\n\n  ParserImplementation.prototype.next = function next() {\n    return this.ch = this.src.charCodeAt(++this.idx);\n  };\n\n  ParserImplementation.prototype.scanIdentifier = function scanIdentifier() {\n    while (AsciiIdParts.has(this.next()) || this.ch > 0x7F && IdParts[this.ch]) {}\n\n    return KeywordLookup[this.val = this.raw] || T$Identifier;\n  };\n\n  ParserImplementation.prototype.scanNumber = function scanNumber(isFloat) {\n    if (isFloat) {\n      this.val = 0;\n    } else {\n      this.val = this.ch - 0x30;\n      while (this.next() <= 0x39 && this.ch >= 0x30) {\n        this.val = this.val * 10 + this.ch - 0x30;\n      }\n    }\n\n    if (isFloat || this.ch === 0x2E) {\n      if (!isFloat) {\n        this.next();\n      }\n      var start = this.idx;\n      var value = this.ch - 0x30;\n      while (this.next() <= 0x39 && this.ch >= 0x30) {\n        value = value * 10 + this.ch - 0x30;\n      }\n      this.val = this.val + value / Math.pow(10, this.idx - start);\n    }\n\n    if (this.ch === 0x65 || this.ch === 0x45) {\n      var _start = this.idx;\n\n      this.next();\n      if (this.ch === 0x2D || this.ch === 0x2B) {\n        this.next();\n      }\n\n      if (!(this.ch >= 0x30 && this.ch <= 0x39)) {\n        this.idx = _start;\n        this.err('Invalid exponent');\n      }\n      while (this.next() <= 0x39 && this.ch >= 0x30) {}\n      this.val = parseFloat(this.src.slice(this.start, this.idx));\n    }\n\n    return T$NumericLiteral;\n  };\n\n  ParserImplementation.prototype.scanString = function scanString() {\n    var quote = this.ch;\n    this.next();\n\n    var buffer = void 0;\n    var marker = this.idx;\n\n    while (this.ch !== quote) {\n      if (this.ch === 0x5C) {\n        if (!buffer) {\n          buffer = [];\n        }\n\n        buffer.push(this.src.slice(marker, this.idx));\n\n        this.next();\n\n        var _unescaped = void 0;\n\n        if (this.ch === 0x75) {\n          this.next();\n\n          if (this.idx + 4 < this.len) {\n            var hex = this.src.slice(this.idx, this.idx + 4);\n\n            if (!/[A-Z0-9]{4}/i.test(hex)) {\n              this.err('Invalid unicode escape [\\\\u' + hex + ']');\n            }\n\n            _unescaped = parseInt(hex, 16);\n            this.idx += 4;\n            this.ch = this.src.charCodeAt(this.idx);\n          } else {\n            this.err();\n          }\n        } else {\n          _unescaped = unescape(this.ch);\n          this.next();\n        }\n\n        buffer.push(fromCharCode(_unescaped));\n        marker = this.idx;\n      } else if (this.ch === 0 || this.idx >= this.len) {\n        this.err('Unterminated quote');\n      } else {\n        this.next();\n      }\n    }\n\n    var last = this.src.slice(marker, this.idx);\n    this.next();\n    var unescaped = last;\n\n    if (buffer !== null && buffer !== undefined) {\n      buffer.push(last);\n      unescaped = buffer.join('');\n    }\n\n    this.val = unescaped;\n    return T$StringLiteral;\n  };\n\n  ParserImplementation.prototype.scanTemplate = function scanTemplate() {\n    var tail = true;\n    var result = '';\n\n    while (this.next() !== 0x60) {\n      if (this.ch === 0x24) {\n        if (this.idx + 1 < this.len && this.src.charCodeAt(this.idx + 1) === 0x7B) {\n          this.idx++;\n          tail = false;\n          break;\n        } else {\n          result += '$';\n        }\n      } else if (this.ch === 0x5C) {\n        result += fromCharCode(unescape(this.next()));\n      } else if (this.ch === 0 || this.idx >= this.len) {\n        this.err('Unterminated template literal');\n      } else {\n        result += fromCharCode(this.ch);\n      }\n    }\n\n    this.next();\n    this.val = result;\n    if (tail) {\n      return T$TemplateTail;\n    }\n    return T$TemplateContinuation;\n  };\n\n  ParserImplementation.prototype.scanTemplateTail = function scanTemplateTail() {\n    if (this.idx >= this.len) {\n      this.err('Unterminated template');\n    }\n    this.idx--;\n    return this.scanTemplate();\n  };\n\n  ParserImplementation.prototype.err = function err() {\n    var message = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'Unexpected token ' + this.raw;\n    var column = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.start;\n\n    throw new Error('Parser Error: ' + message + ' at column ' + column + ' in expression [' + this.src + ']');\n  };\n\n  ParserImplementation.prototype.opt = function opt(token) {\n    if (this.tkn === token) {\n      this.nextToken();\n      return true;\n    }\n\n    return false;\n  };\n\n  ParserImplementation.prototype.expect = function expect(token) {\n    if (this.tkn === token) {\n      this.nextToken();\n    } else {\n      this.err('Missing expected token ' + TokenValues[token & T$TokenMask], this.idx);\n    }\n  };\n\n  return ParserImplementation;\n}();\n\nfunction unescape(code) {\n  switch (code) {\n    case 0x66:\n      return 0xC;\n    case 0x6E:\n      return 0xA;\n    case 0x72:\n      return 0xD;\n    case 0x74:\n      return 0x9;\n    case 0x76:\n      return 0xB;\n    default:\n      return code;\n  }\n}\n\nvar C$This = 1 << 10;\nvar C$Scope = 1 << 11;\nvar C$Member = 1 << 12;\nvar C$Keyed = 1 << 13;\nvar C$Call = 1 << 14;\nvar C$Primary = 1 << 15;\nvar C$ShorthandProp = 1 << 16;\nvar C$Tagged = 1 << 17;\n\nvar C$Ancestor = (1 << 9) - 1;\n\nvar T$TokenMask = (1 << 6) - 1;\n\nvar T$PrecShift = 6;\n\nvar T$Precedence = 7 << T$PrecShift;\n\nvar T$ExpressionTerminal = 1 << 11;\n\nvar T$ClosingToken = 1 << 12;\n\nvar T$OpeningToken = 1 << 13;\n\nvar T$AccessScopeTerminal = 1 << 14;\nvar T$Keyword = 1 << 15;\nvar T$EOF = 1 << 16 | T$AccessScopeTerminal | T$ExpressionTerminal;\nvar T$Identifier = 1 << 17;\nvar T$IdentifierOrKeyword = T$Identifier | T$Keyword;\nvar T$Literal = 1 << 18;\nvar T$NumericLiteral = 1 << 19 | T$Literal;\nvar T$StringLiteral = 1 << 20 | T$Literal;\nvar T$BinaryOp = 1 << 21;\n\nvar T$UnaryOp = 1 << 22;\n\nvar T$MemberExpression = 1 << 23;\n\nvar T$MemberOrCallExpression = 1 << 24;\nvar T$TemplateTail = 1 << 25 | T$MemberOrCallExpression;\nvar T$TemplateContinuation = 1 << 26 | T$MemberOrCallExpression;\n\nvar T$FalseKeyword = 0 | T$Keyword | T$Literal;\nvar T$TrueKeyword = 1 | T$Keyword | T$Literal;\nvar T$NullKeyword = 2 | T$Keyword | T$Literal;\nvar T$UndefinedKeyword = 3 | T$Keyword | T$Literal;\nvar T$ThisScope = 4 | T$IdentifierOrKeyword;\nvar T$ParentScope = 5 | T$IdentifierOrKeyword;\n\nvar T$LParen = 6 | T$OpeningToken | T$AccessScopeTerminal | T$MemberOrCallExpression;\nvar T$LBrace = 7 | T$OpeningToken;\nvar T$Period = 8 | T$MemberExpression | T$MemberOrCallExpression;\nvar T$RBrace = 9 | T$AccessScopeTerminal | T$ClosingToken | T$ExpressionTerminal;\nvar T$RParen = 10 | T$AccessScopeTerminal | T$ClosingToken | T$ExpressionTerminal;\nvar T$Comma = 11 | T$AccessScopeTerminal;\nvar T$LBracket = 12 | T$OpeningToken | T$AccessScopeTerminal | T$MemberExpression | T$MemberOrCallExpression;\nvar T$RBracket = 13 | T$ClosingToken | T$ExpressionTerminal;\nvar T$Colon = 14 | T$AccessScopeTerminal;\nvar T$Question = 15;\n\nvar T$Ampersand = 18 | T$AccessScopeTerminal;\nvar T$Bar = 19 | T$AccessScopeTerminal;\nvar T$BarBar = 20 | 1 << T$PrecShift | T$BinaryOp;\nvar T$AmpersandAmpersand = 21 | 2 << T$PrecShift | T$BinaryOp;\nvar T$Caret = 22 | 3 << T$PrecShift | T$BinaryOp;\nvar T$EqEq = 23 | 4 << T$PrecShift | T$BinaryOp;\nvar T$BangEq = 24 | 4 << T$PrecShift | T$BinaryOp;\nvar T$EqEqEq = 25 | 4 << T$PrecShift | T$BinaryOp;\nvar T$BangEqEq = 26 | 4 << T$PrecShift | T$BinaryOp;\nvar T$Lt = 27 | 5 << T$PrecShift | T$BinaryOp;\nvar T$Gt = 28 | 5 << T$PrecShift | T$BinaryOp;\nvar T$LtEq = 29 | 5 << T$PrecShift | T$BinaryOp;\nvar T$GtEq = 30 | 5 << T$PrecShift | T$BinaryOp;\nvar T$InKeyword = 31 | 5 << T$PrecShift | T$BinaryOp | T$Keyword;\nvar T$InstanceOfKeyword = 32 | 5 << T$PrecShift | T$BinaryOp | T$Keyword;\nvar T$Plus = 33 | 6 << T$PrecShift | T$BinaryOp | T$UnaryOp;\nvar T$Minus = 34 | 6 << T$PrecShift | T$BinaryOp | T$UnaryOp;\nvar T$TypeofKeyword = 35 | T$UnaryOp | T$Keyword;\nvar T$VoidKeyword = 36 | T$UnaryOp | T$Keyword;\nvar T$Star = 37 | 7 << T$PrecShift | T$BinaryOp;\nvar T$Percent = 38 | 7 << T$PrecShift | T$BinaryOp;\nvar T$Slash = 39 | 7 << T$PrecShift | T$BinaryOp;\nvar T$Eq = 40;\nvar T$Bang = 41 | T$UnaryOp;\n\nvar KeywordLookup = Object.create(null);\nKeywordLookup.true = T$TrueKeyword;\nKeywordLookup.null = T$NullKeyword;\nKeywordLookup.false = T$FalseKeyword;\nKeywordLookup.undefined = T$UndefinedKeyword;\nKeywordLookup.$this = T$ThisScope;\nKeywordLookup.$parent = T$ParentScope;\nKeywordLookup.in = T$InKeyword;\nKeywordLookup.instanceof = T$InstanceOfKeyword;\nKeywordLookup.typeof = T$TypeofKeyword;\nKeywordLookup.void = T$VoidKeyword;\n\nvar TokenValues = [false, true, null, undefined, '$this', '$parent', '(', '{', '.', '}', ')', ',', '[', ']', ':', '?', '\\'', '\"', '&', '|', '||', '&&', '^', '==', '!=', '===', '!==', '<', '>', '<=', '>=', 'in', 'instanceof', '+', '-', 'typeof', 'void', '*', '%', '/', '=', '!'];\n\nvar codes = {\n  AsciiIdPart: [0x24, 0, 0x30, 0x3A, 0x41, 0x5B, 0x5F, 0, 0x61, 0x7B],\n  IdStart: [0x24, 0, 0x41, 0x5B, 0x5F, 0, 0x61, 0x7B, 0xAA, 0, 0xBA, 0, 0xC0, 0xD7, 0xD8, 0xF7, 0xF8, 0x2B9, 0x2E0, 0x2E5, 0x1D00, 0x1D26, 0x1D2C, 0x1D5D, 0x1D62, 0x1D66, 0x1D6B, 0x1D78, 0x1D79, 0x1DBF, 0x1E00, 0x1F00, 0x2071, 0, 0x207F, 0, 0x2090, 0x209D, 0x212A, 0x212C, 0x2132, 0, 0x214E, 0, 0x2160, 0x2189, 0x2C60, 0x2C80, 0xA722, 0xA788, 0xA78B, 0xA7AF, 0xA7B0, 0xA7B8, 0xA7F7, 0xA800, 0xAB30, 0xAB5B, 0xAB5C, 0xAB65, 0xFB00, 0xFB07, 0xFF21, 0xFF3B, 0xFF41, 0xFF5B],\n  Digit: [0x30, 0x3A],\n  Skip: [0, 0x21, 0x7F, 0xA1]\n};\n\nfunction decompress(lookup, set, compressed, value) {\n  var rangeCount = compressed.length;\n  for (var i = 0; i < rangeCount; i += 2) {\n    var start = compressed[i];\n    var end = compressed[i + 1];\n    end = end > 0 ? end : start + 1;\n    if (lookup) {\n      var j = start;\n      while (j < end) {\n        lookup[j] = value;\n        j++;\n      }\n    }\n    if (set) {\n      for (var ch = start; ch < end; ch++) {\n        set.add(ch);\n      }\n    }\n  }\n}\n\nfunction returnToken(token) {\n  return function (p) {\n    p.next();\n    return token;\n  };\n}\nfunction unexpectedCharacter(p) {\n  p.err('Unexpected character [' + fromCharCode(p.ch) + ']');\n  return null;\n}\n\nvar AsciiIdParts = new Set();\ndecompress(null, AsciiIdParts, codes.AsciiIdPart, true);\n\nvar IdParts = new Uint8Array(0xFFFF);\ndecompress(IdParts, null, codes.IdStart, 1);\ndecompress(IdParts, null, codes.Digit, 1);\n\nvar CharScanners = new Array(0xFFFF);\nvar ci = 0;\nwhile (ci < 0xFFFF) {\n  CharScanners[ci] = unexpectedCharacter;\n  ci++;\n}\n\ndecompress(CharScanners, null, codes.Skip, function (p) {\n  p.next();\n  return null;\n});\ndecompress(CharScanners, null, codes.IdStart, function (p) {\n  return p.scanIdentifier();\n});\ndecompress(CharScanners, null, codes.Digit, function (p) {\n  return p.scanNumber(false);\n});\n\nCharScanners[0x22] = CharScanners[0x27] = function (p) {\n  return p.scanString();\n};\nCharScanners[0x60] = function (p) {\n  return p.scanTemplate();\n};\n\nCharScanners[0x21] = function (p) {\n  if (p.next() !== 0x3D) {\n    return T$Bang;\n  }\n  if (p.next() !== 0x3D) {\n    return T$BangEq;\n  }\n  p.next();\n  return T$BangEqEq;\n};\n\nCharScanners[0x3D] = function (p) {\n  if (p.next() !== 0x3D) {\n    return T$Eq;\n  }\n  if (p.next() !== 0x3D) {\n    return T$EqEq;\n  }\n  p.next();\n  return T$EqEqEq;\n};\n\nCharScanners[0x26] = function (p) {\n  if (p.next() !== 0x26) {\n    return T$Ampersand;\n  }\n  p.next();\n  return T$AmpersandAmpersand;\n};\n\nCharScanners[0x7C] = function (p) {\n  if (p.next() !== 0x7C) {\n    return T$Bar;\n  }\n  p.next();\n  return T$BarBar;\n};\n\nCharScanners[0x2E] = function (p) {\n  if (p.next() <= 0x39 && p.ch >= 0x30) {\n    return p.scanNumber(true);\n  }\n  return T$Period;\n};\n\nCharScanners[0x3C] = function (p) {\n  if (p.next() !== 0x3D) {\n    return T$Lt;\n  }\n  p.next();\n  return T$LtEq;\n};\n\nCharScanners[0x3E] = function (p) {\n  if (p.next() !== 0x3D) {\n    return T$Gt;\n  }\n  p.next();\n  return T$GtEq;\n};\n\nCharScanners[0x25] = returnToken(T$Percent);\nCharScanners[0x28] = returnToken(T$LParen);\nCharScanners[0x29] = returnToken(T$RParen);\nCharScanners[0x2A] = returnToken(T$Star);\nCharScanners[0x2B] = returnToken(T$Plus);\nCharScanners[0x2C] = returnToken(T$Comma);\nCharScanners[0x2D] = returnToken(T$Minus);\nCharScanners[0x2F] = returnToken(T$Slash);\nCharScanners[0x3A] = returnToken(T$Colon);\nCharScanners[0x3F] = returnToken(T$Question);\nCharScanners[0x5B] = returnToken(T$LBracket);\nCharScanners[0x5D] = returnToken(T$RBracket);\nCharScanners[0x5E] = returnToken(T$Caret);\nCharScanners[0x7B] = returnToken(T$LBrace);\nCharScanners[0x7D] = returnToken(T$RBrace);\n\nvar mapProto = Map.prototype;\n\nfunction _getMapObserver(taskQueue, map) {\n  return ModifyMapObserver.for(taskQueue, map);\n}\n\nvar ModifyMapObserver = function (_ModifyCollectionObse2) {\n  _inherits(ModifyMapObserver, _ModifyCollectionObse2);\n\n  function ModifyMapObserver(taskQueue, map) {\n    \n\n    return _possibleConstructorReturn(this, _ModifyCollectionObse2.call(this, taskQueue, map));\n  }\n\n  ModifyMapObserver.for = function _for(taskQueue, map) {\n    if (!('__map_observer__' in map)) {\n      Reflect.defineProperty(map, '__map_observer__', {\n        value: ModifyMapObserver.create(taskQueue, map),\n        enumerable: false, configurable: false\n      });\n    }\n    return map.__map_observer__;\n  };\n\n  ModifyMapObserver.create = function create(taskQueue, map) {\n    var observer = new ModifyMapObserver(taskQueue, map);\n\n    var proto = mapProto;\n    if (proto.set !== map.set || proto.delete !== map.delete || proto.clear !== map.clear) {\n      proto = {\n        set: map.set,\n        delete: map.delete,\n        clear: map.clear\n      };\n    }\n\n    map.set = function () {\n      var hasValue = map.has(arguments[0]);\n      var type = hasValue ? 'update' : 'add';\n      var oldValue = map.get(arguments[0]);\n      var methodCallResult = proto.set.apply(map, arguments);\n      if (!hasValue || oldValue !== map.get(arguments[0])) {\n        observer.addChangeRecord({\n          type: type,\n          object: map,\n          key: arguments[0],\n          oldValue: oldValue\n        });\n      }\n      return methodCallResult;\n    };\n\n    map.delete = function () {\n      var hasValue = map.has(arguments[0]);\n      var oldValue = map.get(arguments[0]);\n      var methodCallResult = proto.delete.apply(map, arguments);\n      if (hasValue) {\n        observer.addChangeRecord({\n          type: 'delete',\n          object: map,\n          key: arguments[0],\n          oldValue: oldValue\n        });\n      }\n      return methodCallResult;\n    };\n\n    map.clear = function () {\n      var methodCallResult = proto.clear.apply(map, arguments);\n      observer.addChangeRecord({\n        type: 'clear',\n        object: map\n      });\n      return methodCallResult;\n    };\n\n    return observer;\n  };\n\n  return ModifyMapObserver;\n}(ModifyCollectionObserver);\n\nvar emLogger = LogManager.getLogger('event-manager');\n\nfunction findOriginalEventTarget(event) {\n  return event.composedPath && event.composedPath()[0] || event.deepPath && event.deepPath()[0] || event.path && event.path[0] || event.target;\n}\n\nfunction stopPropagation() {\n  this.standardStopPropagation();\n  this.propagationStopped = true;\n}\n\nfunction handleCapturedEvent(event) {\n  event.propagationStopped = false;\n  var target = findOriginalEventTarget(event);\n\n  var orderedCallbacks = [];\n\n  while (target) {\n    if (target.capturedCallbacks) {\n      var callback = target.capturedCallbacks[event.type];\n      if (callback) {\n        if (event.stopPropagation !== stopPropagation) {\n          event.standardStopPropagation = event.stopPropagation;\n          event.stopPropagation = stopPropagation;\n        }\n        orderedCallbacks.push(callback);\n      }\n    }\n    target = target.parentNode;\n  }\n  for (var i = orderedCallbacks.length - 1; i >= 0 && !event.propagationStopped; i--) {\n    var orderedCallback = orderedCallbacks[i];\n    if ('handleEvent' in orderedCallback) {\n      orderedCallback.handleEvent(event);\n    } else {\n      orderedCallback(event);\n    }\n  }\n}\n\nvar CapturedHandlerEntry = function () {\n  function CapturedHandlerEntry(eventName) {\n    \n\n    this.eventName = eventName;\n    this.count = 0;\n  }\n\n  CapturedHandlerEntry.prototype.increment = function increment() {\n    this.count++;\n\n    if (this.count === 1) {\n      DOM.addEventListener(this.eventName, handleCapturedEvent, true);\n    }\n  };\n\n  CapturedHandlerEntry.prototype.decrement = function decrement() {\n    if (this.count === 0) {\n      emLogger.warn('The same EventListener was disposed multiple times.');\n    } else if (--this.count === 0) {\n      DOM.removeEventListener(this.eventName, handleCapturedEvent, true);\n    }\n  };\n\n  return CapturedHandlerEntry;\n}();\n\nvar DelegateHandlerEntry = function () {\n  function DelegateHandlerEntry(eventName, eventManager) {\n    \n\n    this.eventName = eventName;\n    this.count = 0;\n    this.eventManager = eventManager;\n  }\n\n  DelegateHandlerEntry.prototype.handleEvent = function handleEvent(event) {\n    event.propagationStopped = false;\n    var target = findOriginalEventTarget(event);\n\n    while (target && !event.propagationStopped) {\n      if (target.delegatedCallbacks) {\n        var callback = target.delegatedCallbacks[event.type];\n        if (callback) {\n          if (event.stopPropagation !== stopPropagation) {\n            event.standardStopPropagation = event.stopPropagation;\n            event.stopPropagation = stopPropagation;\n          }\n          if ('handleEvent' in callback) {\n            callback.handleEvent(event);\n          } else {\n            callback(event);\n          }\n        }\n      }\n\n      var parent = target.parentNode;\n      var shouldEscapeShadowRoot = this.eventManager.escapeShadowRoot && parent instanceof ShadowRoot;\n\n      target = shouldEscapeShadowRoot ? parent.host : parent;\n    }\n  };\n\n  DelegateHandlerEntry.prototype.increment = function increment() {\n    this.count++;\n\n    if (this.count === 1) {\n      DOM.addEventListener(this.eventName, this, false);\n    }\n  };\n\n  DelegateHandlerEntry.prototype.decrement = function decrement() {\n    if (this.count === 0) {\n      emLogger.warn('The same EventListener was disposed multiple times.');\n    } else if (--this.count === 0) {\n      DOM.removeEventListener(this.eventName, this, false);\n    }\n  };\n\n  return DelegateHandlerEntry;\n}();\n\nvar DelegationEntryHandler = function () {\n  function DelegationEntryHandler(entry, lookup, targetEvent) {\n    \n\n    this.entry = entry;\n    this.lookup = lookup;\n    this.targetEvent = targetEvent;\n  }\n\n  DelegationEntryHandler.prototype.dispose = function dispose() {\n    if (this.lookup[this.targetEvent]) {\n      this.entry.decrement();\n      this.lookup[this.targetEvent] = null;\n    } else {\n      emLogger.warn('Calling .dispose() on already disposed eventListener');\n    }\n  };\n\n  return DelegationEntryHandler;\n}();\n\nvar EventHandler = function () {\n  function EventHandler(target, targetEvent, callback) {\n    \n\n    this.target = target;\n    this.targetEvent = targetEvent;\n    this.callback = callback;\n  }\n\n  EventHandler.prototype.dispose = function dispose() {\n    this.target.removeEventListener(this.targetEvent, this.callback);\n  };\n\n  return EventHandler;\n}();\n\nvar DefaultEventStrategy = function () {\n  function DefaultEventStrategy(eventManager) {\n    \n\n    this.delegatedHandlers = {};\n    this.capturedHandlers = {};\n\n    this.eventManager = eventManager;\n  }\n\n  DefaultEventStrategy.prototype.subscribe = function subscribe(target, targetEvent, callback, strategy, disposable) {\n    var delegatedHandlers = void 0;\n    var capturedHandlers = void 0;\n    var handlerEntry = void 0;\n\n    if (strategy === delegationStrategy.bubbling) {\n      delegatedHandlers = this.delegatedHandlers;\n      handlerEntry = delegatedHandlers[targetEvent] || (delegatedHandlers[targetEvent] = new DelegateHandlerEntry(targetEvent, this.eventManager));\n      var delegatedCallbacks = target.delegatedCallbacks || (target.delegatedCallbacks = {});\n      if (!delegatedCallbacks[targetEvent]) {\n        handlerEntry.increment();\n      } else {\n        emLogger.warn('Overriding previous callback for event listener', { event: targetEvent, callback: callback, previousCallback: delegatedCallbacks[targetEvent] });\n      }\n      delegatedCallbacks[targetEvent] = callback;\n\n      if (disposable === true) {\n        return new DelegationEntryHandler(handlerEntry, delegatedCallbacks, targetEvent);\n      }\n\n      return function () {\n        handlerEntry.decrement();\n        delegatedCallbacks[targetEvent] = null;\n      };\n    }\n    if (strategy === delegationStrategy.capturing) {\n      capturedHandlers = this.capturedHandlers;\n      handlerEntry = capturedHandlers[targetEvent] || (capturedHandlers[targetEvent] = new CapturedHandlerEntry(targetEvent));\n      var capturedCallbacks = target.capturedCallbacks || (target.capturedCallbacks = {});\n      if (!capturedCallbacks[targetEvent]) {\n        handlerEntry.increment();\n      } else {\n        emLogger.error('already have a callback for event', { event: targetEvent, callback: callback });\n      }\n      capturedCallbacks[targetEvent] = callback;\n\n      if (disposable === true) {\n        return new DelegationEntryHandler(handlerEntry, capturedCallbacks, targetEvent);\n      }\n\n      return function () {\n        handlerEntry.decrement();\n        capturedCallbacks[targetEvent] = null;\n      };\n    }\n\n    target.addEventListener(targetEvent, callback);\n\n    if (disposable === true) {\n      return new EventHandler(target, targetEvent, callback);\n    }\n\n    return function () {\n      target.removeEventListener(targetEvent, callback);\n    };\n  };\n\n  return DefaultEventStrategy;\n}();\n\nexport var delegationStrategy = {\n  none: 0,\n  capturing: 1,\n  bubbling: 2\n};\n\nexport var EventManager = function () {\n  function EventManager() {\n    var escapeShadowRoot = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n    \n\n    this.elementHandlerLookup = {};\n    this.eventStrategyLookup = {};\n    this.escapeShadowRoot = escapeShadowRoot;\n\n    this.registerElementConfig({\n      tagName: 'input',\n      properties: {\n        value: ['change', 'input'],\n        checked: ['change', 'input'],\n        files: ['change', 'input']\n      }\n    });\n\n    this.registerElementConfig({\n      tagName: 'textarea',\n      properties: {\n        value: ['change', 'input']\n      }\n    });\n\n    this.registerElementConfig({\n      tagName: 'select',\n      properties: {\n        value: ['change']\n      }\n    });\n\n    this.registerElementConfig({\n      tagName: 'content editable',\n      properties: {\n        value: ['change', 'input', 'blur', 'keyup', 'paste']\n      }\n    });\n\n    this.registerElementConfig({\n      tagName: 'scrollable element',\n      properties: {\n        scrollTop: ['scroll'],\n        scrollLeft: ['scroll']\n      }\n    });\n\n    this.defaultEventStrategy = new DefaultEventStrategy(this);\n  }\n\n  EventManager.prototype.registerElementConfig = function registerElementConfig(config) {\n    var tagName = config.tagName.toLowerCase();\n    var properties = config.properties;\n    var propertyName = void 0;\n\n    var lookup = this.elementHandlerLookup[tagName] = {};\n\n    for (propertyName in properties) {\n      if (properties.hasOwnProperty(propertyName)) {\n        lookup[propertyName] = properties[propertyName];\n      }\n    }\n  };\n\n  EventManager.prototype.registerEventStrategy = function registerEventStrategy(eventName, strategy) {\n    this.eventStrategyLookup[eventName] = strategy;\n  };\n\n  EventManager.prototype.getElementHandler = function getElementHandler(target, propertyName) {\n    var tagName = void 0;\n    var lookup = this.elementHandlerLookup;\n\n    if (target.tagName) {\n      tagName = target.tagName.toLowerCase();\n\n      if (lookup[tagName] && lookup[tagName][propertyName]) {\n        return new EventSubscriber(lookup[tagName][propertyName]);\n      }\n\n      if (propertyName === 'textContent' || propertyName === 'innerHTML') {\n        return new EventSubscriber(lookup['content editable'].value);\n      }\n\n      if (propertyName === 'scrollTop' || propertyName === 'scrollLeft') {\n        return new EventSubscriber(lookup['scrollable element'][propertyName]);\n      }\n    }\n\n    return null;\n  };\n\n  EventManager.prototype.addEventListener = function addEventListener(target, targetEvent, callbackOrListener, delegate, disposable) {\n    return (this.eventStrategyLookup[targetEvent] || this.defaultEventStrategy).subscribe(target, targetEvent, callbackOrListener, delegate, disposable);\n  };\n\n  return EventManager;\n}();\n\nexport var EventSubscriber = function () {\n  function EventSubscriber(events) {\n    \n\n    this.events = events;\n    this.element = null;\n    this.handler = null;\n  }\n\n  EventSubscriber.prototype.subscribe = function subscribe(element, callbackOrListener) {\n    this.element = element;\n    this.handler = callbackOrListener;\n\n    var events = this.events;\n    for (var i = 0, ii = events.length; ii > i; ++i) {\n      element.addEventListener(events[i], callbackOrListener);\n    }\n  };\n\n  EventSubscriber.prototype.dispose = function dispose() {\n    if (this.element === null) {\n      return;\n    }\n    var element = this.element;\n    var callbackOrListener = this.handler;\n    var events = this.events;\n    for (var i = 0, ii = events.length; ii > i; ++i) {\n      element.removeEventListener(events[i], callbackOrListener);\n    }\n    this.element = this.handler = null;\n  };\n\n  return EventSubscriber;\n}();\n\nexport var DirtyChecker = function () {\n  function DirtyChecker() {\n    \n\n    this.tracked = [];\n    this.checkDelay = 120;\n  }\n\n  DirtyChecker.prototype.addProperty = function addProperty(property) {\n    var tracked = this.tracked;\n\n    tracked.push(property);\n\n    if (tracked.length === 1) {\n      this.scheduleDirtyCheck();\n    }\n  };\n\n  DirtyChecker.prototype.removeProperty = function removeProperty(property) {\n    var tracked = this.tracked;\n    tracked.splice(tracked.indexOf(property), 1);\n  };\n\n  DirtyChecker.prototype.scheduleDirtyCheck = function scheduleDirtyCheck() {\n    var _this22 = this;\n\n    setTimeout(function () {\n      return _this22.check();\n    }, this.checkDelay);\n  };\n\n  DirtyChecker.prototype.check = function check() {\n    var tracked = this.tracked;\n    var i = tracked.length;\n\n    while (i--) {\n      var current = tracked[i];\n\n      if (current.isDirty()) {\n        current.call();\n      }\n    }\n\n    if (tracked.length) {\n      this.scheduleDirtyCheck();\n    }\n  };\n\n  return DirtyChecker;\n}();\n\nexport var DirtyCheckProperty = (_dec5 = subscriberCollection(), _dec5(_class5 = function () {\n  function DirtyCheckProperty(dirtyChecker, obj, propertyName) {\n    \n\n    this.dirtyChecker = dirtyChecker;\n    this.obj = obj;\n    this.propertyName = propertyName;\n  }\n\n  DirtyCheckProperty.prototype.getValue = function getValue() {\n    return this.obj[this.propertyName];\n  };\n\n  DirtyCheckProperty.prototype.setValue = function setValue(newValue) {\n    this.obj[this.propertyName] = newValue;\n  };\n\n  DirtyCheckProperty.prototype.call = function call() {\n    var oldValue = this.oldValue;\n    var newValue = this.getValue();\n\n    this.callSubscribers(newValue, oldValue);\n\n    this.oldValue = newValue;\n  };\n\n  DirtyCheckProperty.prototype.isDirty = function isDirty() {\n    return this.oldValue !== this.obj[this.propertyName];\n  };\n\n  DirtyCheckProperty.prototype.subscribe = function subscribe(context, callable) {\n    if (!this.hasSubscribers()) {\n      this.oldValue = this.getValue();\n      this.dirtyChecker.addProperty(this);\n    }\n    this.addSubscriber(context, callable);\n  };\n\n  DirtyCheckProperty.prototype.unsubscribe = function unsubscribe(context, callable) {\n    if (this.removeSubscriber(context, callable) && !this.hasSubscribers()) {\n      this.dirtyChecker.removeProperty(this);\n    }\n  };\n\n  return DirtyCheckProperty;\n}()) || _class5);\n\nvar logger = LogManager.getLogger('property-observation');\n\nexport var propertyAccessor = {\n  getValue: function getValue(obj, propertyName) {\n    return obj[propertyName];\n  },\n  setValue: function setValue(value, obj, propertyName) {\n    obj[propertyName] = value;\n  }\n};\n\nexport var PrimitiveObserver = function () {\n  function PrimitiveObserver(primitive, propertyName) {\n    \n\n    this.doNotCache = true;\n\n    this.primitive = primitive;\n    this.propertyName = propertyName;\n  }\n\n  PrimitiveObserver.prototype.getValue = function getValue() {\n    return this.primitive[this.propertyName];\n  };\n\n  PrimitiveObserver.prototype.setValue = function setValue() {\n    var type = _typeof(this.primitive);\n    throw new Error('The ' + this.propertyName + ' property of a ' + type + ' (' + this.primitive + ') cannot be assigned.');\n  };\n\n  PrimitiveObserver.prototype.subscribe = function subscribe() {};\n\n  PrimitiveObserver.prototype.unsubscribe = function unsubscribe() {};\n\n  return PrimitiveObserver;\n}();\n\nexport var SetterObserver = (_dec6 = subscriberCollection(), _dec6(_class7 = function () {\n  function SetterObserver(taskQueue, obj, propertyName) {\n    \n\n    this.taskQueue = taskQueue;\n    this.obj = obj;\n    this.propertyName = propertyName;\n    this.queued = false;\n    this.observing = false;\n  }\n\n  SetterObserver.prototype.getValue = function getValue() {\n    return this.obj[this.propertyName];\n  };\n\n  SetterObserver.prototype.setValue = function setValue(newValue) {\n    this.obj[this.propertyName] = newValue;\n  };\n\n  SetterObserver.prototype.getterValue = function getterValue() {\n    return this.currentValue;\n  };\n\n  SetterObserver.prototype.setterValue = function setterValue(newValue) {\n    var oldValue = this.currentValue;\n\n    if (oldValue !== newValue) {\n      if (!this.queued) {\n        this.oldValue = oldValue;\n        this.queued = true;\n        this.taskQueue.queueMicroTask(this);\n      }\n\n      this.currentValue = newValue;\n    }\n  };\n\n  SetterObserver.prototype.call = function call() {\n    var oldValue = this.oldValue;\n    var newValue = this.oldValue = this.currentValue;\n\n    this.queued = false;\n\n    this.callSubscribers(newValue, oldValue);\n  };\n\n  SetterObserver.prototype.subscribe = function subscribe(context, callable) {\n    if (!this.observing) {\n      this.convertProperty();\n    }\n    this.addSubscriber(context, callable);\n  };\n\n  SetterObserver.prototype.unsubscribe = function unsubscribe(context, callable) {\n    this.removeSubscriber(context, callable);\n  };\n\n  SetterObserver.prototype.convertProperty = function convertProperty() {\n    this.observing = true;\n    this.currentValue = this.obj[this.propertyName];\n    this.setValue = this.setterValue;\n    this.getValue = this.getterValue;\n\n    if (!Reflect.defineProperty(this.obj, this.propertyName, {\n      configurable: true,\n      enumerable: this.propertyName in this.obj ? this.obj.propertyIsEnumerable(this.propertyName) : true,\n      get: this.getValue.bind(this),\n      set: this.setValue.bind(this)\n    })) {\n      logger.warn('Cannot observe property \\'' + this.propertyName + '\\' of object', this.obj);\n    }\n  };\n\n  return SetterObserver;\n}()) || _class7);\n\nexport var XLinkAttributeObserver = function () {\n  function XLinkAttributeObserver(element, propertyName, attributeName) {\n    \n\n    this.element = element;\n    this.propertyName = propertyName;\n    this.attributeName = attributeName;\n  }\n\n  XLinkAttributeObserver.prototype.getValue = function getValue() {\n    return this.element.getAttributeNS('http://www.w3.org/1999/xlink', this.attributeName);\n  };\n\n  XLinkAttributeObserver.prototype.setValue = function setValue(newValue) {\n    return this.element.setAttributeNS('http://www.w3.org/1999/xlink', this.attributeName, newValue);\n  };\n\n  XLinkAttributeObserver.prototype.subscribe = function subscribe() {\n    throw new Error('Observation of a \"' + this.element.nodeName + '\" element\\'s \"' + this.propertyName + '\" property is not supported.');\n  };\n\n  return XLinkAttributeObserver;\n}();\n\nexport var dataAttributeAccessor = {\n  getValue: function getValue(obj, propertyName) {\n    return obj.getAttribute(propertyName);\n  },\n  setValue: function setValue(value, obj, propertyName) {\n    if (value === null || value === undefined) {\n      obj.removeAttribute(propertyName);\n    } else {\n      obj.setAttribute(propertyName, value);\n    }\n  }\n};\n\nexport var DataAttributeObserver = function () {\n  function DataAttributeObserver(element, propertyName) {\n    \n\n    this.element = element;\n    this.propertyName = propertyName;\n  }\n\n  DataAttributeObserver.prototype.getValue = function getValue() {\n    return this.element.getAttribute(this.propertyName);\n  };\n\n  DataAttributeObserver.prototype.setValue = function setValue(newValue) {\n    if (newValue === null || newValue === undefined) {\n      return this.element.removeAttribute(this.propertyName);\n    }\n    return this.element.setAttribute(this.propertyName, newValue);\n  };\n\n  DataAttributeObserver.prototype.subscribe = function subscribe() {\n    throw new Error('Observation of a \"' + this.element.nodeName + '\" element\\'s \"' + this.propertyName + '\" property is not supported.');\n  };\n\n  return DataAttributeObserver;\n}();\n\nexport var StyleObserver = function () {\n  function StyleObserver(element, propertyName) {\n    \n\n    this.element = element;\n    this.propertyName = propertyName;\n\n    this.styles = null;\n    this.version = 0;\n  }\n\n  StyleObserver.prototype.getValue = function getValue() {\n    return this.element.style.cssText;\n  };\n\n  StyleObserver.prototype._setProperty = function _setProperty(style, value) {\n    var priority = '';\n\n    if (value !== null && value !== undefined && typeof value.indexOf === 'function' && value.indexOf('!important') !== -1) {\n      priority = 'important';\n      value = value.replace('!important', '');\n    }\n    this.element.style.setProperty(style, value, priority);\n  };\n\n  StyleObserver.prototype.setValue = function setValue(newValue) {\n    var styles = this.styles || {};\n    var style = void 0;\n    var version = this.version;\n\n    if (newValue !== null && newValue !== undefined) {\n      if (newValue instanceof Object) {\n        var value = void 0;\n        for (style in newValue) {\n          if (newValue.hasOwnProperty(style)) {\n            value = newValue[style];\n            style = style.replace(/([A-Z])/g, function (m) {\n              return '-' + m.toLowerCase();\n            });\n            styles[style] = version;\n            this._setProperty(style, value);\n          }\n        }\n      } else if (newValue.length) {\n        var rx = /\\s*([\\w\\-]+)\\s*:\\s*((?:(?:[\\w\\-]+\\(\\s*(?:\"(?:\\\\\"|[^\"])*\"|'(?:\\\\'|[^'])*'|[\\w\\-]+\\(\\s*(?:^\"(?:\\\\\"|[^\"])*\"|'(?:\\\\'|[^'])*'|[^\\)]*)\\),?|[^\\)]*)\\),?|\"(?:\\\\\"|[^\"])*\"|'(?:\\\\'|[^'])*'|[^;]*),?\\s*)+);?/g;\n        var pair = void 0;\n        while ((pair = rx.exec(newValue)) !== null) {\n          style = pair[1];\n          if (!style) {\n            continue;\n          }\n\n          styles[style] = version;\n          this._setProperty(style, pair[2]);\n        }\n      }\n    }\n\n    this.styles = styles;\n    this.version += 1;\n\n    if (version === 0) {\n      return;\n    }\n\n    version -= 1;\n    for (style in styles) {\n      if (!styles.hasOwnProperty(style) || styles[style] !== version) {\n        continue;\n      }\n\n      this.element.style.removeProperty(style);\n    }\n  };\n\n  StyleObserver.prototype.subscribe = function subscribe() {\n    throw new Error('Observation of a \"' + this.element.nodeName + '\" element\\'s \"' + this.propertyName + '\" property is not supported.');\n  };\n\n  return StyleObserver;\n}();\n\nexport var ValueAttributeObserver = (_dec7 = subscriberCollection(), _dec7(_class8 = function () {\n  function ValueAttributeObserver(element, propertyName, handler) {\n    \n\n    this.element = element;\n    this.propertyName = propertyName;\n    this.handler = handler;\n    if (propertyName === 'files') {\n      this.setValue = function () {};\n    }\n  }\n\n  ValueAttributeObserver.prototype.getValue = function getValue() {\n    return this.element[this.propertyName];\n  };\n\n  ValueAttributeObserver.prototype.setValue = function setValue(newValue) {\n    newValue = newValue === undefined || newValue === null ? '' : newValue;\n    if (this.element[this.propertyName] !== newValue) {\n      this.element[this.propertyName] = newValue;\n      this.notify();\n    }\n  };\n\n  ValueAttributeObserver.prototype.notify = function notify() {\n    var oldValue = this.oldValue;\n    var newValue = this.getValue();\n\n    this.callSubscribers(newValue, oldValue);\n\n    this.oldValue = newValue;\n  };\n\n  ValueAttributeObserver.prototype.handleEvent = function handleEvent() {\n    this.notify();\n  };\n\n  ValueAttributeObserver.prototype.subscribe = function subscribe(context, callable) {\n    if (!this.hasSubscribers()) {\n      this.oldValue = this.getValue();\n      this.handler.subscribe(this.element, this);\n    }\n\n    this.addSubscriber(context, callable);\n  };\n\n  ValueAttributeObserver.prototype.unsubscribe = function unsubscribe(context, callable) {\n    if (this.removeSubscriber(context, callable) && !this.hasSubscribers()) {\n      this.handler.dispose();\n    }\n  };\n\n  return ValueAttributeObserver;\n}()) || _class8);\n\nvar checkedArrayContext = 'CheckedObserver:array';\nvar checkedValueContext = 'CheckedObserver:value';\n\nexport var CheckedObserver = (_dec8 = subscriberCollection(), _dec8(_class9 = function () {\n  function CheckedObserver(element, handler, observerLocator) {\n    \n\n    this.element = element;\n    this.handler = handler;\n    this.observerLocator = observerLocator;\n  }\n\n  CheckedObserver.prototype.getValue = function getValue() {\n    return this.value;\n  };\n\n  CheckedObserver.prototype.setValue = function setValue(newValue) {\n    if (this.initialSync && this.value === newValue) {\n      return;\n    }\n\n    if (this.arrayObserver) {\n      this.arrayObserver.unsubscribe(checkedArrayContext, this);\n      this.arrayObserver = null;\n    }\n\n    if (this.element.type === 'checkbox' && Array.isArray(newValue)) {\n      this.arrayObserver = this.observerLocator.getArrayObserver(newValue);\n      this.arrayObserver.subscribe(checkedArrayContext, this);\n    }\n\n    this.oldValue = this.value;\n    this.value = newValue;\n    this.synchronizeElement();\n    this.notify();\n\n    if (!this.initialSync) {\n      this.initialSync = true;\n      this.observerLocator.taskQueue.queueMicroTask(this);\n    }\n  };\n\n  CheckedObserver.prototype.call = function call(context, splices) {\n    this.synchronizeElement();\n\n    if (!this.valueObserver) {\n      this.valueObserver = this.element.__observers__.model || this.element.__observers__.value;\n      if (this.valueObserver) {\n        this.valueObserver.subscribe(checkedValueContext, this);\n      }\n    }\n  };\n\n  CheckedObserver.prototype.synchronizeElement = function synchronizeElement() {\n    var value = this.value;\n    var element = this.element;\n    var elementValue = element.hasOwnProperty('model') ? element.model : element.value;\n    var isRadio = element.type === 'radio';\n    var matcher = element.matcher || function (a, b) {\n      return a === b;\n    };\n\n    element.checked = isRadio && !!matcher(value, elementValue) || !isRadio && value === true || !isRadio && Array.isArray(value) && value.findIndex(function (item) {\n      return !!matcher(item, elementValue);\n    }) !== -1;\n  };\n\n  CheckedObserver.prototype.synchronizeValue = function synchronizeValue() {\n    var value = this.value;\n    var element = this.element;\n    var elementValue = element.hasOwnProperty('model') ? element.model : element.value;\n    var index = void 0;\n    var matcher = element.matcher || function (a, b) {\n      return a === b;\n    };\n\n    if (element.type === 'checkbox') {\n      if (Array.isArray(value)) {\n        index = value.findIndex(function (item) {\n          return !!matcher(item, elementValue);\n        });\n        if (element.checked && index === -1) {\n          value.push(elementValue);\n        } else if (!element.checked && index !== -1) {\n          value.splice(index, 1);\n        }\n\n        return;\n      }\n\n      value = element.checked;\n    } else if (element.checked) {\n      value = elementValue;\n    } else {\n      return;\n    }\n\n    this.oldValue = this.value;\n    this.value = value;\n    this.notify();\n  };\n\n  CheckedObserver.prototype.notify = function notify() {\n    var oldValue = this.oldValue;\n    var newValue = this.value;\n\n    if (newValue === oldValue) {\n      return;\n    }\n\n    this.callSubscribers(newValue, oldValue);\n  };\n\n  CheckedObserver.prototype.handleEvent = function handleEvent() {\n    this.synchronizeValue();\n  };\n\n  CheckedObserver.prototype.subscribe = function subscribe(context, callable) {\n    if (!this.hasSubscribers()) {\n      this.handler.subscribe(this.element, this);\n    }\n    this.addSubscriber(context, callable);\n  };\n\n  CheckedObserver.prototype.unsubscribe = function unsubscribe(context, callable) {\n    if (this.removeSubscriber(context, callable) && !this.hasSubscribers()) {\n      this.handler.dispose();\n    }\n  };\n\n  CheckedObserver.prototype.unbind = function unbind() {\n    if (this.arrayObserver) {\n      this.arrayObserver.unsubscribe(checkedArrayContext, this);\n      this.arrayObserver = null;\n    }\n    if (this.valueObserver) {\n      this.valueObserver.unsubscribe(checkedValueContext, this);\n    }\n  };\n\n  return CheckedObserver;\n}()) || _class9);\n\nvar selectArrayContext = 'SelectValueObserver:array';\n\nexport var SelectValueObserver = (_dec9 = subscriberCollection(), _dec9(_class10 = function () {\n  function SelectValueObserver(element, handler, observerLocator) {\n    \n\n    this.element = element;\n    this.handler = handler;\n    this.observerLocator = observerLocator;\n  }\n\n  SelectValueObserver.prototype.getValue = function getValue() {\n    return this.value;\n  };\n\n  SelectValueObserver.prototype.setValue = function setValue(newValue) {\n    if (newValue !== null && newValue !== undefined && this.element.multiple && !Array.isArray(newValue)) {\n      throw new Error('Only null or Array instances can be bound to a multi-select.');\n    }\n    if (this.value === newValue) {\n      return;\n    }\n\n    if (this.arrayObserver) {\n      this.arrayObserver.unsubscribe(selectArrayContext, this);\n      this.arrayObserver = null;\n    }\n\n    if (Array.isArray(newValue)) {\n      this.arrayObserver = this.observerLocator.getArrayObserver(newValue);\n      this.arrayObserver.subscribe(selectArrayContext, this);\n    }\n\n    this.oldValue = this.value;\n    this.value = newValue;\n    this.synchronizeOptions();\n    this.notify();\n\n    if (!this.initialSync) {\n      this.initialSync = true;\n      this.observerLocator.taskQueue.queueMicroTask(this);\n    }\n  };\n\n  SelectValueObserver.prototype.call = function call(context, splices) {\n    this.synchronizeOptions();\n  };\n\n  SelectValueObserver.prototype.synchronizeOptions = function synchronizeOptions() {\n    var value = this.value;\n    var isArray = void 0;\n\n    if (Array.isArray(value)) {\n      isArray = true;\n    }\n\n    var options = this.element.options;\n    var i = options.length;\n    var matcher = this.element.matcher || function (a, b) {\n      return a === b;\n    };\n\n    var _loop = function _loop() {\n      var option = options.item(i);\n      var optionValue = option.hasOwnProperty('model') ? option.model : option.value;\n      if (isArray) {\n        option.selected = value.findIndex(function (item) {\n          return !!matcher(optionValue, item);\n        }) !== -1;\n        return 'continue';\n      }\n      option.selected = !!matcher(optionValue, value);\n    };\n\n    while (i--) {\n      var _ret = _loop();\n\n      if (_ret === 'continue') continue;\n    }\n  };\n\n  SelectValueObserver.prototype.synchronizeValue = function synchronizeValue() {\n    var _this23 = this;\n\n    var options = this.element.options;\n    var count = 0;\n    var value = [];\n\n    for (var i = 0, ii = options.length; i < ii; i++) {\n      var _option = options.item(i);\n      if (!_option.selected) {\n        continue;\n      }\n      value.push(_option.hasOwnProperty('model') ? _option.model : _option.value);\n      count++;\n    }\n\n    if (this.element.multiple) {\n      if (Array.isArray(this.value)) {\n        var _ret2 = function () {\n          var matcher = _this23.element.matcher || function (a, b) {\n            return a === b;\n          };\n\n          var i = 0;\n\n          var _loop2 = function _loop2() {\n            var a = _this23.value[i];\n            if (value.findIndex(function (b) {\n              return matcher(a, b);\n            }) === -1) {\n              _this23.value.splice(i, 1);\n            } else {\n              i++;\n            }\n          };\n\n          while (i < _this23.value.length) {\n            _loop2();\n          }\n\n          i = 0;\n\n          var _loop3 = function _loop3() {\n            var a = value[i];\n            if (_this23.value.findIndex(function (b) {\n              return matcher(a, b);\n            }) === -1) {\n              _this23.value.push(a);\n            }\n            i++;\n          };\n\n          while (i < value.length) {\n            _loop3();\n          }\n          return {\n            v: void 0\n          };\n        }();\n\n        if ((typeof _ret2 === 'undefined' ? 'undefined' : _typeof(_ret2)) === \"object\") return _ret2.v;\n      }\n    } else {\n      if (count === 0) {\n        value = null;\n      } else {\n        value = value[0];\n      }\n    }\n\n    if (value !== this.value) {\n      this.oldValue = this.value;\n      this.value = value;\n      this.notify();\n    }\n  };\n\n  SelectValueObserver.prototype.notify = function notify() {\n    var oldValue = this.oldValue;\n    var newValue = this.value;\n\n    this.callSubscribers(newValue, oldValue);\n  };\n\n  SelectValueObserver.prototype.handleEvent = function handleEvent() {\n    this.synchronizeValue();\n  };\n\n  SelectValueObserver.prototype.subscribe = function subscribe(context, callable) {\n    if (!this.hasSubscribers()) {\n      this.handler.subscribe(this.element, this);\n    }\n    this.addSubscriber(context, callable);\n  };\n\n  SelectValueObserver.prototype.unsubscribe = function unsubscribe(context, callable) {\n    if (this.removeSubscriber(context, callable) && !this.hasSubscribers()) {\n      this.handler.dispose();\n    }\n  };\n\n  SelectValueObserver.prototype.bind = function bind() {\n    var _this24 = this;\n\n    this.domObserver = DOM.createMutationObserver(function () {\n      _this24.synchronizeOptions();\n      _this24.synchronizeValue();\n    });\n    this.domObserver.observe(this.element, { childList: true, subtree: true, characterData: true });\n  };\n\n  SelectValueObserver.prototype.unbind = function unbind() {\n    this.domObserver.disconnect();\n    this.domObserver = null;\n\n    if (this.arrayObserver) {\n      this.arrayObserver.unsubscribe(selectArrayContext, this);\n      this.arrayObserver = null;\n    }\n  };\n\n  return SelectValueObserver;\n}()) || _class10);\n\nexport var ClassObserver = function () {\n  function ClassObserver(element) {\n    \n\n    this.element = element;\n    this.doNotCache = true;\n    this.value = '';\n    this.version = 0;\n  }\n\n  ClassObserver.prototype.getValue = function getValue() {\n    return this.value;\n  };\n\n  ClassObserver.prototype.setValue = function setValue(newValue) {\n    var nameIndex = this.nameIndex || {};\n    var version = this.version;\n    var names = void 0;\n    var name = void 0;\n\n    if (newValue !== null && newValue !== undefined && newValue.length) {\n      names = newValue.split(/\\s+/);\n      for (var i = 0, length = names.length; i < length; i++) {\n        name = names[i];\n        if (name === '') {\n          continue;\n        }\n        nameIndex[name] = version;\n        this.element.classList.add(name);\n      }\n    }\n\n    this.value = newValue;\n    this.nameIndex = nameIndex;\n    this.version += 1;\n\n    if (version === 0) {\n      return;\n    }\n\n    version -= 1;\n    for (name in nameIndex) {\n      if (!nameIndex.hasOwnProperty(name) || nameIndex[name] !== version) {\n        continue;\n      }\n      this.element.classList.remove(name);\n    }\n  };\n\n  ClassObserver.prototype.subscribe = function subscribe() {\n    throw new Error('Observation of a \"' + this.element.nodeName + '\" element\\'s \"class\" property is not supported.');\n  };\n\n  return ClassObserver;\n}();\n\nexport function hasDeclaredDependencies(descriptor) {\n  return !!(descriptor && descriptor.get && descriptor.get.dependencies);\n}\n\nexport function declarePropertyDependencies(ctor, propertyName, dependencies) {\n  var descriptor = Object.getOwnPropertyDescriptor(ctor.prototype, propertyName);\n  descriptor.get.dependencies = dependencies;\n}\n\nexport function computedFrom() {\n  for (var _len = arguments.length, rest = Array(_len), _key = 0; _key < _len; _key++) {\n    rest[_key] = arguments[_key];\n  }\n\n  return function (target, key, descriptor) {\n    descriptor.get.dependencies = rest;\n    return descriptor;\n  };\n}\n\nexport var ComputedExpression = function (_Expression19) {\n  _inherits(ComputedExpression, _Expression19);\n\n  function ComputedExpression(name, dependencies) {\n    \n\n    var _this25 = _possibleConstructorReturn(this, _Expression19.call(this));\n\n    _this25.name = name;\n    _this25.dependencies = dependencies;\n    _this25.isAssignable = true;\n    return _this25;\n  }\n\n  ComputedExpression.prototype.evaluate = function evaluate(scope, lookupFunctions) {\n    return scope.bindingContext[this.name];\n  };\n\n  ComputedExpression.prototype.assign = function assign(scope, value) {\n    scope.bindingContext[this.name] = value;\n  };\n\n  ComputedExpression.prototype.accept = function accept(visitor) {\n    throw new Error('not implemented');\n  };\n\n  ComputedExpression.prototype.connect = function connect(binding, scope) {\n    var dependencies = this.dependencies;\n    var i = dependencies.length;\n    while (i--) {\n      dependencies[i].connect(binding, scope);\n    }\n  };\n\n  return ComputedExpression;\n}(Expression);\n\nexport function createComputedObserver(obj, propertyName, descriptor, observerLocator) {\n  var dependencies = descriptor.get.dependencies;\n  if (!(dependencies instanceof ComputedExpression)) {\n    var i = dependencies.length;\n    while (i--) {\n      dependencies[i] = observerLocator.parser.parse(dependencies[i]);\n    }\n    dependencies = descriptor.get.dependencies = new ComputedExpression(propertyName, dependencies);\n  }\n\n  var scope = { bindingContext: obj, overrideContext: createOverrideContext(obj) };\n  return new ExpressionObserver(scope, dependencies, observerLocator);\n}\n\nvar svgElements = void 0;\nvar svgPresentationElements = void 0;\nvar svgPresentationAttributes = void 0;\nvar svgAnalyzer = void 0;\n\nif (typeof FEATURE_NO_SVG === 'undefined') {\n  svgElements = {\n    a: ['class', 'externalResourcesRequired', 'id', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'requiredExtensions', 'requiredFeatures', 'style', 'systemLanguage', 'target', 'transform', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space'],\n    altGlyph: ['class', 'dx', 'dy', 'externalResourcesRequired', 'format', 'glyphRef', 'id', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'requiredExtensions', 'requiredFeatures', 'rotate', 'style', 'systemLanguage', 'x', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    altGlyphDef: ['id', 'xml:base', 'xml:lang', 'xml:space'],\n    altGlyphItem: ['id', 'xml:base', 'xml:lang', 'xml:space'],\n    animate: ['accumulate', 'additive', 'attributeName', 'attributeType', 'begin', 'by', 'calcMode', 'dur', 'end', 'externalResourcesRequired', 'fill', 'from', 'id', 'keySplines', 'keyTimes', 'max', 'min', 'onbegin', 'onend', 'onload', 'onrepeat', 'repeatCount', 'repeatDur', 'requiredExtensions', 'requiredFeatures', 'restart', 'systemLanguage', 'to', 'values', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space'],\n    animateColor: ['accumulate', 'additive', 'attributeName', 'attributeType', 'begin', 'by', 'calcMode', 'dur', 'end', 'externalResourcesRequired', 'fill', 'from', 'id', 'keySplines', 'keyTimes', 'max', 'min', 'onbegin', 'onend', 'onload', 'onrepeat', 'repeatCount', 'repeatDur', 'requiredExtensions', 'requiredFeatures', 'restart', 'systemLanguage', 'to', 'values', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space'],\n    animateMotion: ['accumulate', 'additive', 'begin', 'by', 'calcMode', 'dur', 'end', 'externalResourcesRequired', 'fill', 'from', 'id', 'keyPoints', 'keySplines', 'keyTimes', 'max', 'min', 'onbegin', 'onend', 'onload', 'onrepeat', 'origin', 'path', 'repeatCount', 'repeatDur', 'requiredExtensions', 'requiredFeatures', 'restart', 'rotate', 'systemLanguage', 'to', 'values', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space'],\n    animateTransform: ['accumulate', 'additive', 'attributeName', 'attributeType', 'begin', 'by', 'calcMode', 'dur', 'end', 'externalResourcesRequired', 'fill', 'from', 'id', 'keySplines', 'keyTimes', 'max', 'min', 'onbegin', 'onend', 'onload', 'onrepeat', 'repeatCount', 'repeatDur', 'requiredExtensions', 'requiredFeatures', 'restart', 'systemLanguage', 'to', 'type', 'values', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space'],\n    circle: ['class', 'cx', 'cy', 'externalResourcesRequired', 'id', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'r', 'requiredExtensions', 'requiredFeatures', 'style', 'systemLanguage', 'transform', 'xml:base', 'xml:lang', 'xml:space'],\n    clipPath: ['class', 'clipPathUnits', 'externalResourcesRequired', 'id', 'requiredExtensions', 'requiredFeatures', 'style', 'systemLanguage', 'transform', 'xml:base', 'xml:lang', 'xml:space'],\n    'color-profile': ['id', 'local', 'name', 'rendering-intent', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space'],\n    cursor: ['externalResourcesRequired', 'id', 'requiredExtensions', 'requiredFeatures', 'systemLanguage', 'x', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    defs: ['class', 'externalResourcesRequired', 'id', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'requiredExtensions', 'requiredFeatures', 'style', 'systemLanguage', 'transform', 'xml:base', 'xml:lang', 'xml:space'],\n    desc: ['class', 'id', 'style', 'xml:base', 'xml:lang', 'xml:space'],\n    ellipse: ['class', 'cx', 'cy', 'externalResourcesRequired', 'id', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'requiredExtensions', 'requiredFeatures', 'rx', 'ry', 'style', 'systemLanguage', 'transform', 'xml:base', 'xml:lang', 'xml:space'],\n    feBlend: ['class', 'height', 'id', 'in', 'in2', 'mode', 'result', 'style', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    feColorMatrix: ['class', 'height', 'id', 'in', 'result', 'style', 'type', 'values', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    feComponentTransfer: ['class', 'height', 'id', 'in', 'result', 'style', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    feComposite: ['class', 'height', 'id', 'in', 'in2', 'k1', 'k2', 'k3', 'k4', 'operator', 'result', 'style', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    feConvolveMatrix: ['bias', 'class', 'divisor', 'edgeMode', 'height', 'id', 'in', 'kernelMatrix', 'kernelUnitLength', 'order', 'preserveAlpha', 'result', 'style', 'targetX', 'targetY', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    feDiffuseLighting: ['class', 'diffuseConstant', 'height', 'id', 'in', 'kernelUnitLength', 'result', 'style', 'surfaceScale', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    feDisplacementMap: ['class', 'height', 'id', 'in', 'in2', 'result', 'scale', 'style', 'width', 'x', 'xChannelSelector', 'xml:base', 'xml:lang', 'xml:space', 'y', 'yChannelSelector'],\n    feDistantLight: ['azimuth', 'elevation', 'id', 'xml:base', 'xml:lang', 'xml:space'],\n    feFlood: ['class', 'height', 'id', 'result', 'style', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    feFuncA: ['amplitude', 'exponent', 'id', 'intercept', 'offset', 'slope', 'tableValues', 'type', 'xml:base', 'xml:lang', 'xml:space'],\n    feFuncB: ['amplitude', 'exponent', 'id', 'intercept', 'offset', 'slope', 'tableValues', 'type', 'xml:base', 'xml:lang', 'xml:space'],\n    feFuncG: ['amplitude', 'exponent', 'id', 'intercept', 'offset', 'slope', 'tableValues', 'type', 'xml:base', 'xml:lang', 'xml:space'],\n    feFuncR: ['amplitude', 'exponent', 'id', 'intercept', 'offset', 'slope', 'tableValues', 'type', 'xml:base', 'xml:lang', 'xml:space'],\n    feGaussianBlur: ['class', 'height', 'id', 'in', 'result', 'stdDeviation', 'style', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    feImage: ['class', 'externalResourcesRequired', 'height', 'id', 'preserveAspectRatio', 'result', 'style', 'width', 'x', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    feMerge: ['class', 'height', 'id', 'result', 'style', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    feMergeNode: ['id', 'xml:base', 'xml:lang', 'xml:space'],\n    feMorphology: ['class', 'height', 'id', 'in', 'operator', 'radius', 'result', 'style', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    feOffset: ['class', 'dx', 'dy', 'height', 'id', 'in', 'result', 'style', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    fePointLight: ['id', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y', 'z'],\n    feSpecularLighting: ['class', 'height', 'id', 'in', 'kernelUnitLength', 'result', 'specularConstant', 'specularExponent', 'style', 'surfaceScale', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    feSpotLight: ['id', 'limitingConeAngle', 'pointsAtX', 'pointsAtY', 'pointsAtZ', 'specularExponent', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y', 'z'],\n    feTile: ['class', 'height', 'id', 'in', 'result', 'style', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    feTurbulence: ['baseFrequency', 'class', 'height', 'id', 'numOctaves', 'result', 'seed', 'stitchTiles', 'style', 'type', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    filter: ['class', 'externalResourcesRequired', 'filterRes', 'filterUnits', 'height', 'id', 'primitiveUnits', 'style', 'width', 'x', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    font: ['class', 'externalResourcesRequired', 'horiz-adv-x', 'horiz-origin-x', 'horiz-origin-y', 'id', 'style', 'vert-adv-y', 'vert-origin-x', 'vert-origin-y', 'xml:base', 'xml:lang', 'xml:space'],\n    'font-face': ['accent-height', 'alphabetic', 'ascent', 'bbox', 'cap-height', 'descent', 'font-family', 'font-size', 'font-stretch', 'font-style', 'font-variant', 'font-weight', 'hanging', 'id', 'ideographic', 'mathematical', 'overline-position', 'overline-thickness', 'panose-1', 'slope', 'stemh', 'stemv', 'strikethrough-position', 'strikethrough-thickness', 'underline-position', 'underline-thickness', 'unicode-range', 'units-per-em', 'v-alphabetic', 'v-hanging', 'v-ideographic', 'v-mathematical', 'widths', 'x-height', 'xml:base', 'xml:lang', 'xml:space'],\n    'font-face-format': ['id', 'string', 'xml:base', 'xml:lang', 'xml:space'],\n    'font-face-name': ['id', 'name', 'xml:base', 'xml:lang', 'xml:space'],\n    'font-face-src': ['id', 'xml:base', 'xml:lang', 'xml:space'],\n    'font-face-uri': ['id', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space'],\n    foreignObject: ['class', 'externalResourcesRequired', 'height', 'id', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'requiredExtensions', 'requiredFeatures', 'style', 'systemLanguage', 'transform', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    g: ['class', 'externalResourcesRequired', 'id', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'requiredExtensions', 'requiredFeatures', 'style', 'systemLanguage', 'transform', 'xml:base', 'xml:lang', 'xml:space'],\n    glyph: ['arabic-form', 'class', 'd', 'glyph-name', 'horiz-adv-x', 'id', 'lang', 'orientation', 'style', 'unicode', 'vert-adv-y', 'vert-origin-x', 'vert-origin-y', 'xml:base', 'xml:lang', 'xml:space'],\n    glyphRef: ['class', 'dx', 'dy', 'format', 'glyphRef', 'id', 'style', 'x', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    hkern: ['g1', 'g2', 'id', 'k', 'u1', 'u2', 'xml:base', 'xml:lang', 'xml:space'],\n    image: ['class', 'externalResourcesRequired', 'height', 'id', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'preserveAspectRatio', 'requiredExtensions', 'requiredFeatures', 'style', 'systemLanguage', 'transform', 'width', 'x', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    line: ['class', 'externalResourcesRequired', 'id', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'requiredExtensions', 'requiredFeatures', 'style', 'systemLanguage', 'transform', 'x1', 'x2', 'xml:base', 'xml:lang', 'xml:space', 'y1', 'y2'],\n    linearGradient: ['class', 'externalResourcesRequired', 'gradientTransform', 'gradientUnits', 'id', 'spreadMethod', 'style', 'x1', 'x2', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space', 'y1', 'y2'],\n    marker: ['class', 'externalResourcesRequired', 'id', 'markerHeight', 'markerUnits', 'markerWidth', 'orient', 'preserveAspectRatio', 'refX', 'refY', 'style', 'viewBox', 'xml:base', 'xml:lang', 'xml:space'],\n    mask: ['class', 'externalResourcesRequired', 'height', 'id', 'maskContentUnits', 'maskUnits', 'requiredExtensions', 'requiredFeatures', 'style', 'systemLanguage', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    metadata: ['id', 'xml:base', 'xml:lang', 'xml:space'],\n    'missing-glyph': ['class', 'd', 'horiz-adv-x', 'id', 'style', 'vert-adv-y', 'vert-origin-x', 'vert-origin-y', 'xml:base', 'xml:lang', 'xml:space'],\n    mpath: ['externalResourcesRequired', 'id', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space'],\n    path: ['class', 'd', 'externalResourcesRequired', 'id', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'pathLength', 'requiredExtensions', 'requiredFeatures', 'style', 'systemLanguage', 'transform', 'xml:base', 'xml:lang', 'xml:space'],\n    pattern: ['class', 'externalResourcesRequired', 'height', 'id', 'patternContentUnits', 'patternTransform', 'patternUnits', 'preserveAspectRatio', 'requiredExtensions', 'requiredFeatures', 'style', 'systemLanguage', 'viewBox', 'width', 'x', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    polygon: ['class', 'externalResourcesRequired', 'id', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'points', 'requiredExtensions', 'requiredFeatures', 'style', 'systemLanguage', 'transform', 'xml:base', 'xml:lang', 'xml:space'],\n    polyline: ['class', 'externalResourcesRequired', 'id', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'points', 'requiredExtensions', 'requiredFeatures', 'style', 'systemLanguage', 'transform', 'xml:base', 'xml:lang', 'xml:space'],\n    radialGradient: ['class', 'cx', 'cy', 'externalResourcesRequired', 'fx', 'fy', 'gradientTransform', 'gradientUnits', 'id', 'r', 'spreadMethod', 'style', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space'],\n    rect: ['class', 'externalResourcesRequired', 'height', 'id', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'requiredExtensions', 'requiredFeatures', 'rx', 'ry', 'style', 'systemLanguage', 'transform', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    script: ['externalResourcesRequired', 'id', 'type', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space'],\n    set: ['attributeName', 'attributeType', 'begin', 'dur', 'end', 'externalResourcesRequired', 'fill', 'id', 'max', 'min', 'onbegin', 'onend', 'onload', 'onrepeat', 'repeatCount', 'repeatDur', 'requiredExtensions', 'requiredFeatures', 'restart', 'systemLanguage', 'to', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space'],\n    stop: ['class', 'id', 'offset', 'style', 'xml:base', 'xml:lang', 'xml:space'],\n    style: ['id', 'media', 'title', 'type', 'xml:base', 'xml:lang', 'xml:space'],\n    svg: ['baseProfile', 'class', 'contentScriptType', 'contentStyleType', 'externalResourcesRequired', 'height', 'id', 'onabort', 'onactivate', 'onclick', 'onerror', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'onresize', 'onscroll', 'onunload', 'onzoom', 'preserveAspectRatio', 'requiredExtensions', 'requiredFeatures', 'style', 'systemLanguage', 'version', 'viewBox', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y', 'zoomAndPan'],\n    switch: ['class', 'externalResourcesRequired', 'id', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'requiredExtensions', 'requiredFeatures', 'style', 'systemLanguage', 'transform', 'xml:base', 'xml:lang', 'xml:space'],\n    symbol: ['class', 'externalResourcesRequired', 'id', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'preserveAspectRatio', 'style', 'viewBox', 'xml:base', 'xml:lang', 'xml:space'],\n    text: ['class', 'dx', 'dy', 'externalResourcesRequired', 'id', 'lengthAdjust', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'requiredExtensions', 'requiredFeatures', 'rotate', 'style', 'systemLanguage', 'textLength', 'transform', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    textPath: ['class', 'externalResourcesRequired', 'id', 'lengthAdjust', 'method', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'requiredExtensions', 'requiredFeatures', 'spacing', 'startOffset', 'style', 'systemLanguage', 'textLength', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space'],\n    title: ['class', 'id', 'style', 'xml:base', 'xml:lang', 'xml:space'],\n    tref: ['class', 'dx', 'dy', 'externalResourcesRequired', 'id', 'lengthAdjust', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'requiredExtensions', 'requiredFeatures', 'rotate', 'style', 'systemLanguage', 'textLength', 'x', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    tspan: ['class', 'dx', 'dy', 'externalResourcesRequired', 'id', 'lengthAdjust', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'requiredExtensions', 'requiredFeatures', 'rotate', 'style', 'systemLanguage', 'textLength', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    use: ['class', 'externalResourcesRequired', 'height', 'id', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'requiredExtensions', 'requiredFeatures', 'style', 'systemLanguage', 'transform', 'width', 'x', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    view: ['externalResourcesRequired', 'id', 'preserveAspectRatio', 'viewBox', 'viewTarget', 'xml:base', 'xml:lang', 'xml:space', 'zoomAndPan'],\n    vkern: ['g1', 'g2', 'id', 'k', 'u1', 'u2', 'xml:base', 'xml:lang', 'xml:space']\n  };\n\n\n  svgPresentationElements = {\n    'a': true,\n    'altGlyph': true,\n    'animate': true,\n    'animateColor': true,\n    'circle': true,\n    'clipPath': true,\n    'defs': true,\n    'ellipse': true,\n    'feBlend': true,\n    'feColorMatrix': true,\n    'feComponentTransfer': true,\n    'feComposite': true,\n    'feConvolveMatrix': true,\n    'feDiffuseLighting': true,\n    'feDisplacementMap': true,\n    'feFlood': true,\n    'feGaussianBlur': true,\n    'feImage': true,\n    'feMerge': true,\n    'feMorphology': true,\n    'feOffset': true,\n    'feSpecularLighting': true,\n    'feTile': true,\n    'feTurbulence': true,\n    'filter': true,\n    'font': true,\n    'foreignObject': true,\n    'g': true,\n    'glyph': true,\n    'glyphRef': true,\n    'image': true,\n    'line': true,\n    'linearGradient': true,\n    'marker': true,\n    'mask': true,\n    'missing-glyph': true,\n    'path': true,\n    'pattern': true,\n    'polygon': true,\n    'polyline': true,\n    'radialGradient': true,\n    'rect': true,\n    'stop': true,\n    'svg': true,\n    'switch': true,\n    'symbol': true,\n    'text': true,\n    'textPath': true,\n    'tref': true,\n    'tspan': true,\n    'use': true\n  };\n\n  svgPresentationAttributes = {\n    'alignment-baseline': true,\n    'baseline-shift': true,\n    'clip-path': true,\n    'clip-rule': true,\n    'clip': true,\n    'color-interpolation-filters': true,\n    'color-interpolation': true,\n    'color-profile': true,\n    'color-rendering': true,\n    'color': true,\n    'cursor': true,\n    'direction': true,\n    'display': true,\n    'dominant-baseline': true,\n    'enable-background': true,\n    'fill-opacity': true,\n    'fill-rule': true,\n    'fill': true,\n    'filter': true,\n    'flood-color': true,\n    'flood-opacity': true,\n    'font-family': true,\n    'font-size-adjust': true,\n    'font-size': true,\n    'font-stretch': true,\n    'font-style': true,\n    'font-variant': true,\n    'font-weight': true,\n    'glyph-orientation-horizontal': true,\n    'glyph-orientation-vertical': true,\n    'image-rendering': true,\n    'kerning': true,\n    'letter-spacing': true,\n    'lighting-color': true,\n    'marker-end': true,\n    'marker-mid': true,\n    'marker-start': true,\n    'mask': true,\n    'opacity': true,\n    'overflow': true,\n    'pointer-events': true,\n    'shape-rendering': true,\n    'stop-color': true,\n    'stop-opacity': true,\n    'stroke-dasharray': true,\n    'stroke-dashoffset': true,\n    'stroke-linecap': true,\n    'stroke-linejoin': true,\n    'stroke-miterlimit': true,\n    'stroke-opacity': true,\n    'stroke-width': true,\n    'stroke': true,\n    'text-anchor': true,\n    'text-decoration': true,\n    'text-rendering': true,\n    'unicode-bidi': true,\n    'visibility': true,\n    'word-spacing': true,\n    'writing-mode': true\n  };\n\n  var createElement = function createElement(html) {\n    var div = DOM.createElement('div');\n    div.innerHTML = html;\n    return div.firstChild;\n  };\n\n  svgAnalyzer = function () {\n    function SVGAnalyzer() {\n      \n\n      if (createElement('<svg><altGlyph /></svg>').firstElementChild.nodeName === 'altglyph' && elements.altGlyph) {\n        elements.altglyph = elements.altGlyph;\n        delete elements.altGlyph;\n        elements.altglyphdef = elements.altGlyphDef;\n        delete elements.altGlyphDef;\n        elements.altglyphitem = elements.altGlyphItem;\n        delete elements.altGlyphItem;\n        elements.glyphref = elements.glyphRef;\n        delete elements.glyphRef;\n      }\n    }\n\n    SVGAnalyzer.prototype.isStandardSvgAttribute = function isStandardSvgAttribute(nodeName, attributeName) {\n      return presentationElements[nodeName] && presentationAttributes[attributeName] || elements[nodeName] && elements[nodeName].indexOf(attributeName) !== -1;\n    };\n\n    return SVGAnalyzer;\n  }();\n}\n\nexport var elements = svgElements;\nexport var presentationElements = svgPresentationElements;\nexport var presentationAttributes = svgPresentationAttributes;\nexport var SVGAnalyzer = svgAnalyzer || function () {\n  function _class11() {\n    \n  }\n\n  _class11.prototype.isStandardSvgAttribute = function isStandardSvgAttribute() {\n    return false;\n  };\n\n  return _class11;\n}();\n\nexport var ObserverLocator = (_temp = _class12 = function () {\n  function ObserverLocator(taskQueue, eventManager, dirtyChecker, svgAnalyzer, parser) {\n    \n\n    this.taskQueue = taskQueue;\n    this.eventManager = eventManager;\n    this.dirtyChecker = dirtyChecker;\n    this.svgAnalyzer = svgAnalyzer;\n    this.parser = parser;\n\n    this.adapters = [];\n    this.logger = LogManager.getLogger('observer-locator');\n  }\n\n  ObserverLocator.prototype.getObserver = function getObserver(obj, propertyName) {\n    var observersLookup = obj.__observers__;\n    var observer = void 0;\n\n    if (observersLookup && propertyName in observersLookup) {\n      return observersLookup[propertyName];\n    }\n\n    observer = this.createPropertyObserver(obj, propertyName);\n\n    if (!observer.doNotCache) {\n      if (observersLookup === undefined) {\n        observersLookup = this.getOrCreateObserversLookup(obj);\n      }\n\n      observersLookup[propertyName] = observer;\n    }\n\n    return observer;\n  };\n\n  ObserverLocator.prototype.getOrCreateObserversLookup = function getOrCreateObserversLookup(obj) {\n    return obj.__observers__ || this.createObserversLookup(obj);\n  };\n\n  ObserverLocator.prototype.createObserversLookup = function createObserversLookup(obj) {\n    var value = {};\n\n    if (!Reflect.defineProperty(obj, '__observers__', {\n      enumerable: false,\n      configurable: false,\n      writable: false,\n      value: value\n    })) {\n      this.logger.warn('Cannot add observers to object', obj);\n    }\n\n    return value;\n  };\n\n  ObserverLocator.prototype.addAdapter = function addAdapter(adapter) {\n    this.adapters.push(adapter);\n  };\n\n  ObserverLocator.prototype.getAdapterObserver = function getAdapterObserver(obj, propertyName, descriptor) {\n    for (var i = 0, ii = this.adapters.length; i < ii; i++) {\n      var adapter = this.adapters[i];\n      var observer = adapter.getObserver(obj, propertyName, descriptor);\n      if (observer) {\n        return observer;\n      }\n    }\n    return null;\n  };\n\n  ObserverLocator.prototype.createPropertyObserver = function createPropertyObserver(obj, propertyName) {\n    var descriptor = void 0;\n    var handler = void 0;\n    var xlinkResult = void 0;\n\n    if (!(obj instanceof Object)) {\n      return new PrimitiveObserver(obj, propertyName);\n    }\n\n    if (obj instanceof DOM.Element) {\n      if (propertyName === 'class') {\n        return new ClassObserver(obj);\n      }\n      if (propertyName === 'style' || propertyName === 'css') {\n        return new StyleObserver(obj, propertyName);\n      }\n      handler = this.eventManager.getElementHandler(obj, propertyName);\n      if (propertyName === 'value' && obj.tagName.toLowerCase() === 'select') {\n        return new SelectValueObserver(obj, handler, this);\n      }\n      if (propertyName === 'checked' && obj.tagName.toLowerCase() === 'input') {\n        return new CheckedObserver(obj, handler, this);\n      }\n      if (handler) {\n        return new ValueAttributeObserver(obj, propertyName, handler);\n      }\n      xlinkResult = /^xlink:(.+)$/.exec(propertyName);\n      if (xlinkResult) {\n        return new XLinkAttributeObserver(obj, propertyName, xlinkResult[1]);\n      }\n      if (propertyName === 'role' && (obj instanceof DOM.Element || obj instanceof DOM.SVGElement) || /^\\w+:|^data-|^aria-/.test(propertyName) || obj instanceof DOM.SVGElement && this.svgAnalyzer.isStandardSvgAttribute(obj.nodeName, propertyName)) {\n        return new DataAttributeObserver(obj, propertyName);\n      }\n    }\n\n    descriptor = Object.getPropertyDescriptor(obj, propertyName);\n\n    if (hasDeclaredDependencies(descriptor)) {\n      return createComputedObserver(obj, propertyName, descriptor, this);\n    }\n\n    if (descriptor) {\n      var existingGetterOrSetter = descriptor.get || descriptor.set;\n      if (existingGetterOrSetter) {\n        if (existingGetterOrSetter.getObserver) {\n          return existingGetterOrSetter.getObserver(obj);\n        }\n\n        var adapterObserver = this.getAdapterObserver(obj, propertyName, descriptor);\n        if (adapterObserver) {\n          return adapterObserver;\n        }\n        return new DirtyCheckProperty(this.dirtyChecker, obj, propertyName);\n      }\n    }\n\n    if (obj instanceof Array) {\n      if (propertyName === 'length') {\n        return this.getArrayObserver(obj).getLengthObserver();\n      }\n\n      return new DirtyCheckProperty(this.dirtyChecker, obj, propertyName);\n    } else if (obj instanceof Map) {\n      if (propertyName === 'size') {\n        return this.getMapObserver(obj).getLengthObserver();\n      }\n\n      return new DirtyCheckProperty(this.dirtyChecker, obj, propertyName);\n    } else if (obj instanceof Set) {\n      if (propertyName === 'size') {\n        return this.getSetObserver(obj).getLengthObserver();\n      }\n\n      return new DirtyCheckProperty(this.dirtyChecker, obj, propertyName);\n    }\n\n    return new SetterObserver(this.taskQueue, obj, propertyName);\n  };\n\n  ObserverLocator.prototype.getAccessor = function getAccessor(obj, propertyName) {\n    if (obj instanceof DOM.Element) {\n      if (propertyName === 'class' || propertyName === 'style' || propertyName === 'css' || propertyName === 'value' && (obj.tagName.toLowerCase() === 'input' || obj.tagName.toLowerCase() === 'select') || propertyName === 'checked' && obj.tagName.toLowerCase() === 'input' || propertyName === 'model' && obj.tagName.toLowerCase() === 'input' || /^xlink:.+$/.exec(propertyName)) {\n        return this.getObserver(obj, propertyName);\n      }\n      if (/^\\w+:|^data-|^aria-/.test(propertyName) || obj instanceof DOM.SVGElement && this.svgAnalyzer.isStandardSvgAttribute(obj.nodeName, propertyName) || obj.tagName.toLowerCase() === 'img' && propertyName === 'src' || obj.tagName.toLowerCase() === 'a' && propertyName === 'href') {\n        return dataAttributeAccessor;\n      }\n    }\n    return propertyAccessor;\n  };\n\n  ObserverLocator.prototype.getArrayObserver = function getArrayObserver(array) {\n    return _getArrayObserver(this.taskQueue, array);\n  };\n\n  ObserverLocator.prototype.getMapObserver = function getMapObserver(map) {\n    return _getMapObserver(this.taskQueue, map);\n  };\n\n  ObserverLocator.prototype.getSetObserver = function getSetObserver(set) {\n    return _getSetObserver(this.taskQueue, set);\n  };\n\n  return ObserverLocator;\n}(), _class12.inject = [TaskQueue, EventManager, DirtyChecker, SVGAnalyzer, Parser], _temp);\n\nexport var ObjectObservationAdapter = function () {\n  function ObjectObservationAdapter() {\n    \n  }\n\n  ObjectObservationAdapter.prototype.getObserver = function getObserver(object, propertyName, descriptor) {\n    throw new Error('BindingAdapters must implement getObserver(object, propertyName).');\n  };\n\n  return ObjectObservationAdapter;\n}();\n\nexport var BindingExpression = function () {\n  function BindingExpression(observerLocator, targetProperty, sourceExpression, mode, lookupFunctions, attribute) {\n    \n\n    this.observerLocator = observerLocator;\n    this.targetProperty = targetProperty;\n    this.sourceExpression = sourceExpression;\n    this.mode = mode;\n    this.lookupFunctions = lookupFunctions;\n    this.attribute = attribute;\n    this.discrete = false;\n  }\n\n  BindingExpression.prototype.createBinding = function createBinding(target) {\n    return new Binding(this.observerLocator, this.sourceExpression, target, this.targetProperty, this.mode, this.lookupFunctions);\n  };\n\n  return BindingExpression;\n}();\n\nexport var Binding = (_dec10 = connectable(), _dec10(_class13 = function () {\n  function Binding(observerLocator, sourceExpression, target, targetProperty, mode, lookupFunctions) {\n    \n\n    this.observerLocator = observerLocator;\n    this.sourceExpression = sourceExpression;\n    this.target = target;\n    this.targetProperty = targetProperty;\n    this.mode = mode;\n    this.lookupFunctions = lookupFunctions;\n  }\n\n  Binding.prototype.updateTarget = function updateTarget(value) {\n    this.targetObserver.setValue(value, this.target, this.targetProperty);\n  };\n\n  Binding.prototype.updateSource = function updateSource(value) {\n    this.sourceExpression.assign(this.source, value, this.lookupFunctions);\n  };\n\n  Binding.prototype.call = function call(context, newValue, oldValue) {\n    if (!this.isBound) {\n      return;\n    }\n    if (context === sourceContext) {\n      oldValue = this.targetObserver.getValue(this.target, this.targetProperty);\n      newValue = this.sourceExpression.evaluate(this.source, this.lookupFunctions);\n      if (newValue !== oldValue) {\n        this.updateTarget(newValue);\n      }\n      if (this.mode !== bindingMode.oneTime) {\n        this._version++;\n        this.sourceExpression.connect(this, this.source);\n        this.unobserve(false);\n      }\n      return;\n    }\n    if (context === targetContext) {\n      if (newValue !== this.sourceExpression.evaluate(this.source, this.lookupFunctions)) {\n        this.updateSource(newValue);\n      }\n      return;\n    }\n    throw new Error('Unexpected call context ' + context);\n  };\n\n  Binding.prototype.bind = function bind(source) {\n    if (this.isBound) {\n      if (this.source === source) {\n        return;\n      }\n      this.unbind();\n    }\n    this.isBound = true;\n    this.source = source;\n\n    if (this.sourceExpression.bind) {\n      this.sourceExpression.bind(this, source, this.lookupFunctions);\n    }\n\n    var mode = this.mode;\n    if (!this.targetObserver) {\n      var method = mode === bindingMode.twoWay || mode === bindingMode.fromView ? 'getObserver' : 'getAccessor';\n      this.targetObserver = this.observerLocator[method](this.target, this.targetProperty);\n    }\n\n    if ('bind' in this.targetObserver) {\n      this.targetObserver.bind();\n    }\n    if (this.mode !== bindingMode.fromView) {\n      var value = this.sourceExpression.evaluate(source, this.lookupFunctions);\n      this.updateTarget(value);\n    }\n\n    if (mode === bindingMode.oneTime) {\n      return;\n    } else if (mode === bindingMode.toView) {\n      enqueueBindingConnect(this);\n    } else if (mode === bindingMode.twoWay) {\n      this.sourceExpression.connect(this, source);\n      this.targetObserver.subscribe(targetContext, this);\n    } else if (mode === bindingMode.fromView) {\n      this.targetObserver.subscribe(targetContext, this);\n    }\n  };\n\n  Binding.prototype.unbind = function unbind() {\n    if (!this.isBound) {\n      return;\n    }\n    this.isBound = false;\n    if (this.sourceExpression.unbind) {\n      this.sourceExpression.unbind(this, this.source);\n    }\n    this.source = null;\n    if ('unbind' in this.targetObserver) {\n      this.targetObserver.unbind();\n    }\n    if (this.targetObserver.unsubscribe) {\n      this.targetObserver.unsubscribe(targetContext, this);\n    }\n    this.unobserve(true);\n  };\n\n  Binding.prototype.connect = function connect(evaluate) {\n    if (!this.isBound) {\n      return;\n    }\n    if (evaluate) {\n      var value = this.sourceExpression.evaluate(this.source, this.lookupFunctions);\n      this.updateTarget(value);\n    }\n    this.sourceExpression.connect(this, this.source);\n  };\n\n  return Binding;\n}()) || _class13);\n\nexport var CallExpression = function () {\n  function CallExpression(observerLocator, targetProperty, sourceExpression, lookupFunctions) {\n    \n\n    this.observerLocator = observerLocator;\n    this.targetProperty = targetProperty;\n    this.sourceExpression = sourceExpression;\n    this.lookupFunctions = lookupFunctions;\n  }\n\n  CallExpression.prototype.createBinding = function createBinding(target) {\n    return new Call(this.observerLocator, this.sourceExpression, target, this.targetProperty, this.lookupFunctions);\n  };\n\n  return CallExpression;\n}();\n\nexport var Call = function () {\n  function Call(observerLocator, sourceExpression, target, targetProperty, lookupFunctions) {\n    \n\n    this.sourceExpression = sourceExpression;\n    this.target = target;\n    this.targetProperty = observerLocator.getObserver(target, targetProperty);\n    this.lookupFunctions = lookupFunctions;\n  }\n\n  Call.prototype.callSource = function callSource($event) {\n    var overrideContext = this.source.overrideContext;\n    Object.assign(overrideContext, $event);\n    overrideContext.$event = $event;\n    var mustEvaluate = true;\n    var result = this.sourceExpression.evaluate(this.source, this.lookupFunctions, mustEvaluate);\n    delete overrideContext.$event;\n    for (var prop in $event) {\n      delete overrideContext[prop];\n    }\n    return result;\n  };\n\n  Call.prototype.bind = function bind(source) {\n    var _this26 = this;\n\n    if (this.isBound) {\n      if (this.source === source) {\n        return;\n      }\n      this.unbind();\n    }\n    this.isBound = true;\n    this.source = source;\n\n    if (this.sourceExpression.bind) {\n      this.sourceExpression.bind(this, source, this.lookupFunctions);\n    }\n    this.targetProperty.setValue(function ($event) {\n      return _this26.callSource($event);\n    });\n  };\n\n  Call.prototype.unbind = function unbind() {\n    if (!this.isBound) {\n      return;\n    }\n    this.isBound = false;\n    if (this.sourceExpression.unbind) {\n      this.sourceExpression.unbind(this, this.source);\n    }\n    this.source = null;\n    this.targetProperty.setValue(null);\n  };\n\n  return Call;\n}();\n\nexport var ValueConverterResource = function () {\n  function ValueConverterResource(name) {\n    \n\n    this.name = name;\n  }\n\n  ValueConverterResource.convention = function convention(name) {\n    if (name.endsWith('ValueConverter')) {\n      return new ValueConverterResource(camelCase(name.substring(0, name.length - 14)));\n    }\n  };\n\n  ValueConverterResource.prototype.initialize = function initialize(container, target) {\n    this.instance = container.get(target);\n  };\n\n  ValueConverterResource.prototype.register = function register(registry, name) {\n    registry.registerValueConverter(name || this.name, this.instance);\n  };\n\n  ValueConverterResource.prototype.load = function load(container, target) {};\n\n  return ValueConverterResource;\n}();\n\nexport function valueConverter(nameOrTarget) {\n  if (nameOrTarget === undefined || typeof nameOrTarget === 'string') {\n    return function (target) {\n      metadata.define(metadata.resource, new ValueConverterResource(nameOrTarget), target);\n    };\n  }\n\n  metadata.define(metadata.resource, new ValueConverterResource(), nameOrTarget);\n}\n\nexport var BindingBehaviorResource = function () {\n  function BindingBehaviorResource(name) {\n    \n\n    this.name = name;\n  }\n\n  BindingBehaviorResource.convention = function convention(name) {\n    if (name.endsWith('BindingBehavior')) {\n      return new BindingBehaviorResource(camelCase(name.substring(0, name.length - 15)));\n    }\n  };\n\n  BindingBehaviorResource.prototype.initialize = function initialize(container, target) {\n    this.instance = container.get(target);\n  };\n\n  BindingBehaviorResource.prototype.register = function register(registry, name) {\n    registry.registerBindingBehavior(name || this.name, this.instance);\n  };\n\n  BindingBehaviorResource.prototype.load = function load(container, target) {};\n\n  return BindingBehaviorResource;\n}();\n\nexport function bindingBehavior(nameOrTarget) {\n  if (nameOrTarget === undefined || typeof nameOrTarget === 'string') {\n    return function (target) {\n      metadata.define(metadata.resource, new BindingBehaviorResource(nameOrTarget), target);\n    };\n  }\n\n  metadata.define(metadata.resource, new BindingBehaviorResource(), nameOrTarget);\n}\n\nexport var ListenerExpression = function () {\n  function ListenerExpression(eventManager, targetEvent, sourceExpression, delegationStrategy, preventDefault, lookupFunctions) {\n    \n\n    this.eventManager = eventManager;\n    this.targetEvent = targetEvent;\n    this.sourceExpression = sourceExpression;\n    this.delegationStrategy = delegationStrategy;\n    this.discrete = true;\n    this.preventDefault = preventDefault;\n    this.lookupFunctions = lookupFunctions;\n  }\n\n  ListenerExpression.prototype.createBinding = function createBinding(target) {\n    return new Listener(this.eventManager, this.targetEvent, this.delegationStrategy, this.sourceExpression, target, this.preventDefault, this.lookupFunctions);\n  };\n\n  return ListenerExpression;\n}();\n\nexport var Listener = function () {\n  function Listener(eventManager, targetEvent, delegationStrategy, sourceExpression, target, preventDefault, lookupFunctions) {\n    \n\n    this.eventManager = eventManager;\n    this.targetEvent = targetEvent;\n    this.delegationStrategy = delegationStrategy;\n    this.sourceExpression = sourceExpression;\n    this.target = target;\n    this.preventDefault = preventDefault;\n    this.lookupFunctions = lookupFunctions;\n  }\n\n  Listener.prototype.callSource = function callSource(event) {\n    var overrideContext = this.source.overrideContext;\n    overrideContext.$event = event;\n    var mustEvaluate = true;\n    var result = this.sourceExpression.evaluate(this.source, this.lookupFunctions, mustEvaluate);\n    delete overrideContext.$event;\n    if (result !== true && this.preventDefault) {\n      event.preventDefault();\n    }\n    return result;\n  };\n\n  Listener.prototype.handleEvent = function handleEvent(event) {\n    this.callSource(event);\n  };\n\n  Listener.prototype.bind = function bind(source) {\n    if (this.isBound) {\n      if (this.source === source) {\n        return;\n      }\n      this.unbind();\n    }\n    this.isBound = true;\n    this.source = source;\n\n    if (this.sourceExpression.bind) {\n      this.sourceExpression.bind(this, source, this.lookupFunctions);\n    }\n    this._handler = this.eventManager.addEventListener(this.target, this.targetEvent, this, this.delegationStrategy, true);\n  };\n\n  Listener.prototype.unbind = function unbind() {\n    if (!this.isBound) {\n      return;\n    }\n    this.isBound = false;\n    if (this.sourceExpression.unbind) {\n      this.sourceExpression.unbind(this, this.source);\n    }\n    this.source = null;\n    this._handler.dispose();\n    this._handler = null;\n  };\n\n  return Listener;\n}();\n\nfunction getAU(element) {\n  var au = element.au;\n\n  if (au === undefined) {\n    throw new Error('No Aurelia APIs are defined for the element: \"' + element.tagName + '\".');\n  }\n\n  return au;\n}\n\nexport var NameExpression = function () {\n  function NameExpression(sourceExpression, apiName, lookupFunctions) {\n    \n\n    this.sourceExpression = sourceExpression;\n    this.apiName = apiName;\n    this.lookupFunctions = lookupFunctions;\n    this.discrete = true;\n  }\n\n  NameExpression.prototype.createBinding = function createBinding(target) {\n    return new NameBinder(this.sourceExpression, NameExpression.locateAPI(target, this.apiName), this.lookupFunctions);\n  };\n\n  NameExpression.locateAPI = function locateAPI(element, apiName) {\n    switch (apiName) {\n      case 'element':\n        return element;\n      case 'controller':\n        return getAU(element).controller;\n      case 'view-model':\n        return getAU(element).controller.viewModel;\n      case 'view':\n        return getAU(element).controller.view;\n      default:\n        var target = getAU(element)[apiName];\n\n        if (target === undefined) {\n          throw new Error('Attempted to reference \"' + apiName + '\", but it was not found amongst the target\\'s API.');\n        }\n\n        return target.viewModel;\n    }\n  };\n\n  return NameExpression;\n}();\n\nvar NameBinder = function () {\n  function NameBinder(sourceExpression, target, lookupFunctions) {\n    \n\n    this.sourceExpression = sourceExpression;\n    this.target = target;\n    this.lookupFunctions = lookupFunctions;\n  }\n\n  NameBinder.prototype.bind = function bind(source) {\n    if (this.isBound) {\n      if (this.source === source) {\n        return;\n      }\n      this.unbind();\n    }\n    this.isBound = true;\n    this.source = source;\n    if (this.sourceExpression.bind) {\n      this.sourceExpression.bind(this, source, this.lookupFunctions);\n    }\n    this.sourceExpression.assign(this.source, this.target, this.lookupFunctions);\n  };\n\n  NameBinder.prototype.unbind = function unbind() {\n    if (!this.isBound) {\n      return;\n    }\n    this.isBound = false;\n    if (this.sourceExpression.evaluate(this.source, this.lookupFunctions) === this.target) {\n      this.sourceExpression.assign(this.source, null, this.lookupFunctions);\n    }\n    if (this.sourceExpression.unbind) {\n      this.sourceExpression.unbind(this, this.source);\n    }\n    this.source = null;\n  };\n\n  return NameBinder;\n}();\n\nvar LookupFunctions = {\n  bindingBehaviors: function bindingBehaviors(name) {\n    return null;\n  },\n  valueConverters: function valueConverters(name) {\n    return null;\n  }\n};\n\nexport var BindingEngine = (_temp2 = _class14 = function () {\n  function BindingEngine(observerLocator, parser) {\n    \n\n    this.observerLocator = observerLocator;\n    this.parser = parser;\n  }\n\n  BindingEngine.prototype.createBindingExpression = function createBindingExpression(targetProperty, sourceExpression) {\n    var mode = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : bindingMode.toView;\n    var lookupFunctions = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : LookupFunctions;\n\n    return new BindingExpression(this.observerLocator, targetProperty, this.parser.parse(sourceExpression), mode, lookupFunctions);\n  };\n\n  BindingEngine.prototype.propertyObserver = function propertyObserver(obj, propertyName) {\n    var _this27 = this;\n\n    return {\n      subscribe: function subscribe(callback) {\n        var observer = _this27.observerLocator.getObserver(obj, propertyName);\n        observer.subscribe(callback);\n        return {\n          dispose: function dispose() {\n            return observer.unsubscribe(callback);\n          }\n        };\n      }\n    };\n  };\n\n  BindingEngine.prototype.collectionObserver = function collectionObserver(collection) {\n    var _this28 = this;\n\n    return {\n      subscribe: function subscribe(callback) {\n        var observer = void 0;\n        if (collection instanceof Array) {\n          observer = _this28.observerLocator.getArrayObserver(collection);\n        } else if (collection instanceof Map) {\n          observer = _this28.observerLocator.getMapObserver(collection);\n        } else if (collection instanceof Set) {\n          observer = _this28.observerLocator.getSetObserver(collection);\n        } else {\n          throw new Error('collection must be an instance of Array, Map or Set.');\n        }\n        observer.subscribe(callback);\n        return {\n          dispose: function dispose() {\n            return observer.unsubscribe(callback);\n          }\n        };\n      }\n    };\n  };\n\n  BindingEngine.prototype.expressionObserver = function expressionObserver(bindingContext, expression) {\n    var scope = { bindingContext: bindingContext, overrideContext: createOverrideContext(bindingContext) };\n    return new ExpressionObserver(scope, this.parser.parse(expression), this.observerLocator, LookupFunctions);\n  };\n\n  BindingEngine.prototype.parseExpression = function parseExpression(expression) {\n    return this.parser.parse(expression);\n  };\n\n  BindingEngine.prototype.registerAdapter = function registerAdapter(adapter) {\n    this.observerLocator.addAdapter(adapter);\n  };\n\n  return BindingEngine;\n}(), _class14.inject = [ObserverLocator, Parser], _temp2);\n\nvar setProto = Set.prototype;\n\nfunction _getSetObserver(taskQueue, set) {\n  return ModifySetObserver.for(taskQueue, set);\n}\n\nvar ModifySetObserver = function (_ModifyCollectionObse3) {\n  _inherits(ModifySetObserver, _ModifyCollectionObse3);\n\n  function ModifySetObserver(taskQueue, set) {\n    \n\n    return _possibleConstructorReturn(this, _ModifyCollectionObse3.call(this, taskQueue, set));\n  }\n\n  ModifySetObserver.for = function _for(taskQueue, set) {\n    if (!('__set_observer__' in set)) {\n      Reflect.defineProperty(set, '__set_observer__', {\n        value: ModifySetObserver.create(taskQueue, set),\n        enumerable: false, configurable: false\n      });\n    }\n    return set.__set_observer__;\n  };\n\n  ModifySetObserver.create = function create(taskQueue, set) {\n    var observer = new ModifySetObserver(taskQueue, set);\n\n    var proto = setProto;\n    if (proto.add !== set.add || proto.delete !== set.delete || proto.clear !== set.clear) {\n      proto = {\n        add: set.add,\n        delete: set.delete,\n        clear: set.clear\n      };\n    }\n\n    set.add = function () {\n      var type = 'add';\n      var oldSize = set.size;\n      var methodCallResult = proto.add.apply(set, arguments);\n      var hasValue = set.size === oldSize;\n      if (!hasValue) {\n        observer.addChangeRecord({\n          type: type,\n          object: set,\n          value: Array.from(set).pop()\n        });\n      }\n      return methodCallResult;\n    };\n\n    set.delete = function () {\n      var hasValue = set.has(arguments[0]);\n      var methodCallResult = proto.delete.apply(set, arguments);\n      if (hasValue) {\n        observer.addChangeRecord({\n          type: 'delete',\n          object: set,\n          value: arguments[0]\n        });\n      }\n      return methodCallResult;\n    };\n\n    set.clear = function () {\n      var methodCallResult = proto.clear.apply(set, arguments);\n      observer.addChangeRecord({\n        type: 'clear',\n        object: set\n      });\n      return methodCallResult;\n    };\n\n    return observer;\n  };\n\n  return ModifySetObserver;\n}(ModifyCollectionObserver);\n\nexport function observable(targetOrConfig, key, descriptor) {\n  function deco(target, key, descriptor, config) {\n    var isClassDecorator = key === undefined;\n    if (isClassDecorator) {\n      target = target.prototype;\n      key = typeof config === 'string' ? config : config.name;\n    }\n\n    var innerPropertyName = '_' + key;\n    var innerPropertyDescriptor = {\n      configurable: true,\n      enumerable: false,\n      writable: true\n    };\n\n    var callbackName = config && config.changeHandler || key + 'Changed';\n\n    if (descriptor) {\n      if (typeof descriptor.initializer === 'function') {\n        innerPropertyDescriptor.value = descriptor.initializer();\n      }\n    } else {\n      descriptor = {};\n    }\n\n    if (!('enumerable' in descriptor)) {\n      descriptor.enumerable = true;\n    }\n\n    delete descriptor.value;\n    delete descriptor.writable;\n    delete descriptor.initializer;\n\n    Reflect.defineProperty(target, innerPropertyName, innerPropertyDescriptor);\n\n    descriptor.get = function () {\n      return this[innerPropertyName];\n    };\n    descriptor.set = function (newValue) {\n      var oldValue = this[innerPropertyName];\n      if (newValue === oldValue) {\n        return;\n      }\n\n      this[innerPropertyName] = newValue;\n      Reflect.defineProperty(this, innerPropertyName, { enumerable: false });\n\n      if (this[callbackName]) {\n        this[callbackName](newValue, oldValue, key);\n      }\n    };\n\n    descriptor.get.dependencies = [innerPropertyName];\n\n    if (isClassDecorator) {\n      Reflect.defineProperty(target, key, descriptor);\n    } else {\n      return descriptor;\n    }\n  }\n\n  if (key === undefined) {\n    return function (t, k, d) {\n      return deco(t, k, d, targetOrConfig);\n    };\n  }\n  return deco(targetOrConfig, key, descriptor);\n}\n\nvar signals = {};\n\nexport function connectBindingToSignal(binding, name) {\n  if (!signals.hasOwnProperty(name)) {\n    signals[name] = 0;\n  }\n  binding.observeProperty(signals, name);\n}\n\nexport function signalBindings(name) {\n  if (signals.hasOwnProperty(name)) {\n    signals[name]++;\n  }\n}","var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nimport { PLATFORM } from 'aurelia-pal';\n\nif (typeof FEATURE_NO_ES2015 === 'undefined') {\n\n  (function (Object, GOPS) {\n    'use strict';\n\n    if (GOPS in Object) return;\n\n    var setDescriptor,\n        G = PLATFORM.global,\n        id = 0,\n        random = '' + Math.random(),\n        prefix = '__\\x01symbol:',\n        prefixLength = prefix.length,\n        internalSymbol = '__\\x01symbol@@' + random,\n        DP = 'defineProperty',\n        DPies = 'defineProperties',\n        GOPN = 'getOwnPropertyNames',\n        GOPD = 'getOwnPropertyDescriptor',\n        PIE = 'propertyIsEnumerable',\n        gOPN = Object[GOPN],\n        gOPD = Object[GOPD],\n        create = Object.create,\n        keys = Object.keys,\n        defineProperty = Object[DP],\n        $defineProperties = Object[DPies],\n        descriptor = gOPD(Object, GOPN),\n        ObjectProto = Object.prototype,\n        hOP = ObjectProto.hasOwnProperty,\n        pIE = ObjectProto[PIE],\n        toString = ObjectProto.toString,\n        indexOf = Array.prototype.indexOf || function (v) {\n      for (var i = this.length; i-- && this[i] !== v;) {}\n      return i;\n    },\n        addInternalIfNeeded = function addInternalIfNeeded(o, uid, enumerable) {\n      if (!hOP.call(o, internalSymbol)) {\n        defineProperty(o, internalSymbol, {\n          enumerable: false,\n          configurable: false,\n          writable: false,\n          value: {}\n        });\n      }\n      o[internalSymbol]['@@' + uid] = enumerable;\n    },\n        createWithSymbols = function createWithSymbols(proto, descriptors) {\n      var self = create(proto);\n      if (descriptors !== null && (typeof descriptors === 'undefined' ? 'undefined' : _typeof(descriptors)) === 'object') {\n        gOPN(descriptors).forEach(function (key) {\n          if (propertyIsEnumerable.call(descriptors, key)) {\n            $defineProperty(self, key, descriptors[key]);\n          }\n        });\n      }\n      return self;\n    },\n        copyAsNonEnumerable = function copyAsNonEnumerable(descriptor) {\n      var newDescriptor = create(descriptor);\n      newDescriptor.enumerable = false;\n      return newDescriptor;\n    },\n        get = function get() {},\n        onlyNonSymbols = function onlyNonSymbols(name) {\n      return name != internalSymbol && !hOP.call(source, name);\n    },\n        onlySymbols = function onlySymbols(name) {\n      return name != internalSymbol && hOP.call(source, name);\n    },\n        propertyIsEnumerable = function propertyIsEnumerable(key) {\n      var uid = '' + key;\n      return onlySymbols(uid) ? hOP.call(this, uid) && this[internalSymbol] && this[internalSymbol]['@@' + uid] : pIE.call(this, key);\n    },\n        setAndGetSymbol = function setAndGetSymbol(uid) {\n      var descriptor = {\n        enumerable: false,\n        configurable: true,\n        get: get,\n        set: function set(value) {\n          setDescriptor(this, uid, {\n            enumerable: false,\n            configurable: true,\n            writable: true,\n            value: value\n          });\n          addInternalIfNeeded(this, uid, true);\n        }\n      };\n      defineProperty(ObjectProto, uid, descriptor);\n      return source[uid] = defineProperty(Object(uid), 'constructor', sourceConstructor);\n    },\n        _Symbol = function _Symbol2(description) {\n      if (this && this !== G) {\n        throw new TypeError('Symbol is not a constructor');\n      }\n      return setAndGetSymbol(prefix.concat(description || '', random, ++id));\n    },\n        source = create(null),\n        sourceConstructor = { value: _Symbol },\n        sourceMap = function sourceMap(uid) {\n      return source[uid];\n    },\n        $defineProperty = function defineProp(o, key, descriptor) {\n      var uid = '' + key;\n      if (onlySymbols(uid)) {\n        setDescriptor(o, uid, descriptor.enumerable ? copyAsNonEnumerable(descriptor) : descriptor);\n        addInternalIfNeeded(o, uid, !!descriptor.enumerable);\n      } else {\n        defineProperty(o, key, descriptor);\n      }\n      return o;\n    },\n        $getOwnPropertySymbols = function getOwnPropertySymbols(o) {\n      var cof = toString.call(o);\n      o = cof === '[object String]' ? o.split('') : Object(o);\n      return gOPN(o).filter(onlySymbols).map(sourceMap);\n    };\n\n    descriptor.value = $defineProperty;\n    defineProperty(Object, DP, descriptor);\n\n    descriptor.value = $getOwnPropertySymbols;\n    defineProperty(Object, GOPS, descriptor);\n\n    var cachedWindowNames = (typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object' ? Object.getOwnPropertyNames(window) : [];\n    var originalObjectGetOwnPropertyNames = Object.getOwnPropertyNames;\n    descriptor.value = function getOwnPropertyNames(o) {\n      if (toString.call(o) === '[object Window]') {\n        try {\n          return originalObjectGetOwnPropertyNames(o);\n        } catch (e) {\n          return [].concat([], cachedWindowNames);\n        }\n      }\n      return gOPN(o).filter(onlyNonSymbols);\n    };\n    defineProperty(Object, GOPN, descriptor);\n\n    descriptor.value = function defineProperties(o, descriptors) {\n      var symbols = $getOwnPropertySymbols(descriptors);\n      if (symbols.length) {\n        keys(descriptors).concat(symbols).forEach(function (uid) {\n          if (propertyIsEnumerable.call(descriptors, uid)) {\n            $defineProperty(o, uid, descriptors[uid]);\n          }\n        });\n      } else {\n        $defineProperties(o, descriptors);\n      }\n      return o;\n    };\n    defineProperty(Object, DPies, descriptor);\n\n    descriptor.value = propertyIsEnumerable;\n    defineProperty(ObjectProto, PIE, descriptor);\n\n    descriptor.value = _Symbol;\n    defineProperty(G, 'Symbol', descriptor);\n\n    descriptor.value = function (key) {\n      var uid = prefix.concat(prefix, key, random);\n      return uid in ObjectProto ? source[uid] : setAndGetSymbol(uid);\n    };\n    defineProperty(_Symbol, 'for', descriptor);\n\n    descriptor.value = function (symbol) {\n      return hOP.call(source, symbol) ? symbol.slice(prefixLength * 2, -random.length) : void 0;\n    };\n    defineProperty(_Symbol, 'keyFor', descriptor);\n\n    descriptor.value = function getOwnPropertyDescriptor(o, key) {\n      var descriptor = gOPD(o, key);\n      if (descriptor && onlySymbols(key)) {\n        descriptor.enumerable = propertyIsEnumerable.call(o, key);\n      }\n      return descriptor;\n    };\n    defineProperty(Object, GOPD, descriptor);\n\n    descriptor.value = function (proto, descriptors) {\n      return arguments.length === 1 ? create(proto) : createWithSymbols(proto, descriptors);\n    };\n    defineProperty(Object, 'create', descriptor);\n\n    descriptor.value = function () {\n      var str = toString.call(this);\n      return str === '[object String]' && onlySymbols(this) ? '[object Symbol]' : str;\n    };\n    defineProperty(ObjectProto, 'toString', descriptor);\n\n    try {\n      setDescriptor = create(defineProperty({}, prefix, {\n        get: function get() {\n          return defineProperty(this, prefix, { value: false })[prefix];\n        }\n      }))[prefix] || defineProperty;\n    } catch (o_O) {\n      setDescriptor = function setDescriptor(o, key, descriptor) {\n        var protoDescriptor = gOPD(ObjectProto, key);\n        delete ObjectProto[key];\n        defineProperty(o, key, descriptor);\n        defineProperty(ObjectProto, key, protoDescriptor);\n      };\n    }\n  })(Object, 'getOwnPropertySymbols');\n\n  (function (O, S) {\n    var dP = O.defineProperty,\n        ObjectProto = O.prototype,\n        toString = ObjectProto.toString,\n        toStringTag = 'toStringTag',\n        descriptor;\n    ['iterator', 'match', 'replace', 'search', 'split', 'hasInstance', 'isConcatSpreadable', 'unscopables', 'species', 'toPrimitive', toStringTag].forEach(function (name) {\n      if (!(name in Symbol)) {\n        dP(Symbol, name, { value: Symbol(name) });\n        switch (name) {\n          case toStringTag:\n            descriptor = O.getOwnPropertyDescriptor(ObjectProto, 'toString');\n            descriptor.value = function () {\n              var str = toString.call(this),\n                  tst = typeof this === 'undefined' || this === null ? undefined : this[Symbol.toStringTag];\n              return typeof tst === 'undefined' ? str : '[object ' + tst + ']';\n            };\n            dP(ObjectProto, 'toString', descriptor);\n            break;\n        }\n      }\n    });\n  })(Object, Symbol);\n\n  (function (Si, AP, SP) {\n\n    function returnThis() {\n      return this;\n    }\n\n    if (!AP[Si]) AP[Si] = function () {\n      var i = 0,\n          self = this,\n          iterator = {\n        next: function next() {\n          var done = self.length <= i;\n          return done ? { done: done } : { done: done, value: self[i++] };\n        }\n      };\n      iterator[Si] = returnThis;\n      return iterator;\n    };\n\n    if (!SP[Si]) SP[Si] = function () {\n      var fromCodePoint = String.fromCodePoint,\n          self = this,\n          i = 0,\n          length = self.length,\n          iterator = {\n        next: function next() {\n          var done = length <= i,\n              c = done ? '' : fromCodePoint(self.codePointAt(i));\n          i += c.length;\n          return done ? { done: done } : { done: done, value: c };\n        }\n      };\n      iterator[Si] = returnThis;\n      return iterator;\n    };\n  })(Symbol.iterator, Array.prototype, String.prototype);\n}\n\nif (typeof FEATURE_NO_ES2015 === 'undefined') {\n\n  Number.isNaN = Number.isNaN || function (value) {\n    return value !== value;\n  };\n\n  Number.isFinite = Number.isFinite || function (value) {\n    return typeof value === \"number\" && isFinite(value);\n  };\n}\n\nif (!String.prototype.endsWith || function () {\n  try {\n    return !\"ab\".endsWith(\"a\", 1);\n  } catch (e) {\n    return true;\n  }\n}()) {\n  String.prototype.endsWith = function (searchString, position) {\n    var subjectString = this.toString();\n    if (typeof position !== 'number' || !isFinite(position) || Math.floor(position) !== position || position > subjectString.length) {\n      position = subjectString.length;\n    }\n    position -= searchString.length;\n    var lastIndex = subjectString.indexOf(searchString, position);\n    return lastIndex !== -1 && lastIndex === position;\n  };\n}\n\nif (!String.prototype.startsWith || function () {\n  try {\n    return !\"ab\".startsWith(\"b\", 1);\n  } catch (e) {\n    return true;\n  }\n}()) {\n  String.prototype.startsWith = function (searchString, position) {\n    position = position || 0;\n    return this.substr(position, searchString.length) === searchString;\n  };\n}\n\nif (typeof FEATURE_NO_ES2015 === 'undefined') {\n\n  if (!Array.from) {\n    Array.from = function () {\n      var toInteger = function toInteger(it) {\n        return isNaN(it = +it) ? 0 : (it > 0 ? Math.floor : Math.ceil)(it);\n      };\n      var toLength = function toLength(it) {\n        return it > 0 ? Math.min(toInteger(it), 0x1fffffffffffff) : 0;\n      };\n      var iterCall = function iterCall(iter, fn, val, index) {\n        try {\n          return fn(val, index);\n        } catch (E) {\n          if (typeof iter.return == 'function') iter.return();\n          throw E;\n        }\n      };\n\n      return function from(arrayLike) {\n        var O = Object(arrayLike),\n            C = typeof this == 'function' ? this : Array,\n            aLen = arguments.length,\n            mapfn = aLen > 1 ? arguments[1] : undefined,\n            mapping = mapfn !== undefined,\n            index = 0,\n            iterFn = O[Symbol.iterator],\n            length,\n            result,\n            step,\n            iterator;\n        if (mapping) mapfn = mapfn.bind(aLen > 2 ? arguments[2] : undefined);\n        if (iterFn != undefined && !Array.isArray(arrayLike)) {\n          for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n            result[index] = mapping ? iterCall(iterator, mapfn, step.value, index) : step.value;\n          }\n        } else {\n          length = toLength(O.length);\n          for (result = new C(length); length > index; index++) {\n            result[index] = mapping ? mapfn(O[index], index) : O[index];\n          }\n        }\n        result.length = index;\n        return result;\n      };\n    }();\n  }\n\n  if (!Array.prototype.find) {\n    Object.defineProperty(Array.prototype, 'find', {\n      configurable: true,\n      writable: true,\n      enumerable: false,\n      value: function value(predicate) {\n        if (this === null) {\n          throw new TypeError('Array.prototype.find called on null or undefined');\n        }\n        if (typeof predicate !== 'function') {\n          throw new TypeError('predicate must be a function');\n        }\n        var list = Object(this);\n        var length = list.length >>> 0;\n        var thisArg = arguments[1];\n        var value;\n\n        for (var i = 0; i < length; i++) {\n          value = list[i];\n          if (predicate.call(thisArg, value, i, list)) {\n            return value;\n          }\n        }\n        return undefined;\n      }\n    });\n  }\n\n  if (!Array.prototype.findIndex) {\n    Object.defineProperty(Array.prototype, 'findIndex', {\n      configurable: true,\n      writable: true,\n      enumerable: false,\n      value: function value(predicate) {\n        if (this === null) {\n          throw new TypeError('Array.prototype.findIndex called on null or undefined');\n        }\n        if (typeof predicate !== 'function') {\n          throw new TypeError('predicate must be a function');\n        }\n        var list = Object(this);\n        var length = list.length >>> 0;\n        var thisArg = arguments[1];\n        var value;\n\n        for (var i = 0; i < length; i++) {\n          value = list[i];\n          if (predicate.call(thisArg, value, i, list)) {\n            return i;\n          }\n        }\n        return -1;\n      }\n    });\n  }\n}\n\nif (typeof FEATURE_NO_ES2016 === 'undefined' && !Array.prototype.includes) {\n  Object.defineProperty(Array.prototype, 'includes', {\n    configurable: true,\n    writable: true,\n    enumerable: false,\n    value: function value(searchElement) {\n      var O = Object(this);\n      var len = parseInt(O.length) || 0;\n      if (len === 0) {\n        return false;\n      }\n      var n = parseInt(arguments[1]) || 0;\n      var k;\n      if (n >= 0) {\n        k = n;\n      } else {\n        k = len + n;\n        if (k < 0) {\n          k = 0;\n        }\n      }\n      var currentElement;\n      while (k < len) {\n        currentElement = O[k];\n        if (searchElement === currentElement || searchElement !== searchElement && currentElement !== currentElement) {\n          return true;\n        }\n        k++;\n      }\n      return false;\n    }\n  });\n}\n\nif (typeof FEATURE_NO_ES2015 === 'undefined') {\n\n  (function () {\n    var needsFix = false;\n\n    try {\n      var s = Object.keys('a');\n      needsFix = s.length !== 1 || s[0] !== '0';\n    } catch (e) {\n      needsFix = true;\n    }\n\n    if (needsFix) {\n      Object.keys = function () {\n        var hasOwnProperty = Object.prototype.hasOwnProperty,\n            hasDontEnumBug = !{ toString: null }.propertyIsEnumerable('toString'),\n            dontEnums = ['toString', 'toLocaleString', 'valueOf', 'hasOwnProperty', 'isPrototypeOf', 'propertyIsEnumerable', 'constructor'],\n            dontEnumsLength = dontEnums.length;\n\n        return function (obj) {\n          if (obj === undefined || obj === null) {\n            throw TypeError('Cannot convert undefined or null to object');\n          }\n\n          obj = Object(obj);\n\n          var result = [],\n              prop,\n              i;\n\n          for (prop in obj) {\n            if (hasOwnProperty.call(obj, prop)) {\n              result.push(prop);\n            }\n          }\n\n          if (hasDontEnumBug) {\n            for (i = 0; i < dontEnumsLength; i++) {\n              if (hasOwnProperty.call(obj, dontEnums[i])) {\n                result.push(dontEnums[i]);\n              }\n            }\n          }\n\n          return result;\n        };\n      }();\n    }\n  })();\n\n  (function (O) {\n    if ('assign' in O) {\n      return;\n    }\n\n    O.defineProperty(O, 'assign', {\n      configurable: true,\n      writable: true,\n      value: function () {\n        var gOPS = O.getOwnPropertySymbols,\n            pIE = O.propertyIsEnumerable,\n            filterOS = gOPS ? function (self) {\n          return gOPS(self).filter(pIE, self);\n        } : function () {\n          return Array.prototype;\n        };\n\n        return function assign(where) {\n          if (gOPS && !(where instanceof O)) {\n            console.warn('problematic Symbols', where);\n          }\n\n          function set(keyOrSymbol) {\n            where[keyOrSymbol] = arg[keyOrSymbol];\n          }\n\n          for (var i = 1, ii = arguments.length; i < ii; ++i) {\n            var arg = arguments[i];\n\n            if (arg === null || arg === undefined) {\n              continue;\n            }\n\n            O.keys(arg).concat(filterOS(arg)).forEach(set);\n          }\n\n          return where;\n        };\n      }()\n    });\n  })(Object);\n\n  if (!Object.is) {\n    Object.is = function (x, y) {\n      if (x === y) {\n        return x !== 0 || 1 / x === 1 / y;\n      } else {\n        return x !== x && y !== y;\n      }\n    };\n  }\n}\n\nif (typeof FEATURE_NO_ES2015 === 'undefined') {\n\n  (function (global) {\n    var i;\n\n    var defineProperty = Object.defineProperty,\n        is = function is(a, b) {\n      return a === b || a !== a && b !== b;\n    };\n\n    if (typeof WeakMap == 'undefined') {\n      global.WeakMap = createCollection({\n        'delete': sharedDelete,\n\n        clear: sharedClear,\n\n        get: sharedGet,\n\n        has: mapHas,\n\n        set: sharedSet\n      }, true);\n    }\n\n    if (typeof Map == 'undefined' || typeof new Map().values !== 'function' || !new Map().values().next) {\n      var _createCollection;\n\n      global.Map = createCollection((_createCollection = {\n        'delete': sharedDelete,\n\n        has: mapHas,\n\n        get: sharedGet,\n\n        set: sharedSet,\n\n        keys: sharedKeys,\n\n        values: sharedValues,\n\n        entries: mapEntries,\n\n        forEach: sharedForEach,\n\n        clear: sharedClear\n      }, _createCollection[Symbol.iterator] = mapEntries, _createCollection));\n    }\n\n    if (typeof Set == 'undefined' || typeof new Set().values !== 'function' || !new Set().values().next) {\n      var _createCollection2;\n\n      global.Set = createCollection((_createCollection2 = {\n        has: setHas,\n\n        add: sharedAdd,\n\n        'delete': sharedDelete,\n\n        clear: sharedClear,\n\n        keys: sharedValues,\n        values: sharedValues,\n\n        entries: setEntries,\n\n        forEach: sharedForEach\n      }, _createCollection2[Symbol.iterator] = sharedValues, _createCollection2));\n    }\n\n    if (typeof WeakSet == 'undefined') {\n      global.WeakSet = createCollection({\n        'delete': sharedDelete,\n\n        add: sharedAdd,\n\n        clear: sharedClear,\n\n        has: setHas\n      }, true);\n    }\n\n    function createCollection(proto, objectOnly) {\n      function Collection(a) {\n        if (!this || this.constructor !== Collection) return new Collection(a);\n        this._keys = [];\n        this._values = [];\n        this._itp = [];\n        this.objectOnly = objectOnly;\n\n        if (a) init.call(this, a);\n      }\n\n      if (!objectOnly) {\n        defineProperty(proto, 'size', {\n          get: sharedSize\n        });\n      }\n\n      proto.constructor = Collection;\n      Collection.prototype = proto;\n\n      return Collection;\n    }\n\n    function init(a) {\n      var i;\n\n      if (this.add) a.forEach(this.add, this);else a.forEach(function (a) {\n          this.set(a[0], a[1]);\n        }, this);\n    }\n\n    function sharedDelete(key) {\n      if (this.has(key)) {\n        this._keys.splice(i, 1);\n        this._values.splice(i, 1);\n\n        this._itp.forEach(function (p) {\n          if (i < p[0]) p[0]--;\n        });\n      }\n\n      return -1 < i;\n    };\n\n    function sharedGet(key) {\n      return this.has(key) ? this._values[i] : undefined;\n    }\n\n    function has(list, key) {\n      if (this.objectOnly && key !== Object(key)) throw new TypeError(\"Invalid value used as weak collection key\");\n\n      if (key != key || key === 0) for (i = list.length; i-- && !is(list[i], key);) {} else i = list.indexOf(key);\n      return -1 < i;\n    }\n\n    function setHas(value) {\n      return has.call(this, this._values, value);\n    }\n\n    function mapHas(value) {\n      return has.call(this, this._keys, value);\n    }\n\n    function sharedSet(key, value) {\n      this.has(key) ? this._values[i] = value : this._values[this._keys.push(key) - 1] = value;\n      return this;\n    }\n\n    function sharedAdd(value) {\n      if (!this.has(value)) this._values.push(value);\n      return this;\n    }\n\n    function sharedClear() {\n      (this._keys || 0).length = this._values.length = 0;\n    }\n\n    function sharedKeys() {\n      return sharedIterator(this._itp, this._keys);\n    }\n\n    function sharedValues() {\n      return sharedIterator(this._itp, this._values);\n    }\n\n    function mapEntries() {\n      return sharedIterator(this._itp, this._keys, this._values);\n    }\n\n    function setEntries() {\n      return sharedIterator(this._itp, this._values, this._values);\n    }\n\n    function sharedIterator(itp, array, array2) {\n      var _ref;\n\n      var p = [0],\n          done = false;\n      itp.push(p);\n      return _ref = {}, _ref[Symbol.iterator] = function () {\n        return this;\n      }, _ref.next = function next() {\n        var v,\n            k = p[0];\n        if (!done && k < array.length) {\n          v = array2 ? [array[k], array2[k]] : array[k];\n          p[0]++;\n        } else {\n          done = true;\n          itp.splice(itp.indexOf(p), 1);\n        }\n        return { done: done, value: v };\n      }, _ref;\n    }\n\n    function sharedSize() {\n      return this._values.length;\n    }\n\n    function sharedForEach(callback, context) {\n      var it = this.entries();\n      for (;;) {\n        var r = it.next();\n        if (r.done) break;\n        callback.call(context, r.value[1], r.value[0], this);\n      }\n    }\n  })(PLATFORM.global);\n}\n\nif (typeof FEATURE_NO_ES2015 === 'undefined') {\n\n  var bind = Function.prototype.bind;\n\n  if (typeof PLATFORM.global.Reflect === 'undefined') {\n    PLATFORM.global.Reflect = {};\n  }\n\n  if (typeof Reflect.defineProperty !== 'function') {\n    Reflect.defineProperty = function (target, propertyKey, descriptor) {\n      if ((typeof target === 'undefined' ? 'undefined' : _typeof(target)) === 'object' ? target === null : typeof target !== 'function') {\n        throw new TypeError('Reflect.defineProperty called on non-object');\n      }\n      try {\n        Object.defineProperty(target, propertyKey, descriptor);\n        return true;\n      } catch (e) {\n        return false;\n      }\n    };\n  }\n\n  if (typeof Reflect.construct !== 'function') {\n    Reflect.construct = function (Target, args) {\n      if (args) {\n        switch (args.length) {\n          case 0:\n            return new Target();\n          case 1:\n            return new Target(args[0]);\n          case 2:\n            return new Target(args[0], args[1]);\n          case 3:\n            return new Target(args[0], args[1], args[2]);\n          case 4:\n            return new Target(args[0], args[1], args[2], args[3]);\n        }\n      }\n\n      var a = [null];\n      a.push.apply(a, args);\n      return new (bind.apply(Target, a))();\n    };\n  }\n\n  if (typeof Reflect.ownKeys !== 'function') {\n    Reflect.ownKeys = function (o) {\n      return Object.getOwnPropertyNames(o).concat(Object.getOwnPropertySymbols(o));\n    };\n  }\n}\n\nif (typeof FEATURE_NO_ESNEXT === 'undefined') {\n\n  var emptyMetadata = Object.freeze({});\n  var metadataContainerKey = '__metadata__';\n\n  if (typeof Reflect.getOwnMetadata !== 'function') {\n    Reflect.getOwnMetadata = function (metadataKey, target, targetKey) {\n      if (target.hasOwnProperty(metadataContainerKey)) {\n        return (target[metadataContainerKey][targetKey] || emptyMetadata)[metadataKey];\n      }\n    };\n  }\n\n  if (typeof Reflect.defineMetadata !== 'function') {\n    Reflect.defineMetadata = function (metadataKey, metadataValue, target, targetKey) {\n      var metadataContainer = target.hasOwnProperty(metadataContainerKey) ? target[metadataContainerKey] : target[metadataContainerKey] = {};\n      var targetContainer = metadataContainer[targetKey] || (metadataContainer[targetKey] = {});\n      targetContainer[metadataKey] = metadataValue;\n    };\n  }\n\n  if (typeof Reflect.metadata !== 'function') {\n    Reflect.metadata = function (metadataKey, metadataValue) {\n      return function (target, targetKey) {\n        Reflect.defineMetadata(metadataKey, metadataValue, target, targetKey);\n      };\n    };\n  }\n}","import 'aurelia-polyfills';\nimport { PLATFORM, isInitialized } from 'aurelia-pal';\n\nvar bootstrapPromises = [];\r\nvar startResolve;\r\nvar startPromise = new Promise(function (resolve) { return startResolve = resolve; });\r\nvar host = PLATFORM.global;\r\nvar isNodeLike = typeof process !== 'undefined' && !process.browser;\r\nfunction ready() {\r\n    if (!host.document || host.document.readyState === 'complete') {\r\n        return Promise.resolve();\r\n    }\r\n    return new Promise(function (resolve) {\r\n        host.document.addEventListener('DOMContentLoaded', completed);\r\n        host.addEventListener('load', completed);\r\n        function completed() {\r\n            host.document.removeEventListener('DOMContentLoaded', completed);\r\n            host.removeEventListener('load', completed);\r\n            resolve();\r\n        }\r\n    });\r\n}\r\nfunction createLoader() {\r\n    if (PLATFORM.Loader) {\r\n        return Promise.resolve(new PLATFORM.Loader());\r\n    }\r\n    if (typeof AURELIA_WEBPACK_2_0 === 'undefined') {\r\n        if (typeof __webpack_require__ !== 'undefined') {\r\n            var m = __webpack_require__(require.resolve('aurelia-loader-webpack'));\r\n            return Promise.resolve(new m.WebpackLoader());\r\n        }\r\n        if (host.System && typeof host.System.config === 'function') {\r\n            return host.System.normalize('aurelia-bootstrapper').then(function (bsn) {\r\n                return host.System.normalize('aurelia-loader-default', bsn);\r\n            }).then(function (loaderName) {\r\n                return host.System.import(loaderName).then(function (m) { return new m.DefaultLoader(); });\r\n            });\r\n        }\r\n        if (typeof host.require === 'function' && typeof host.define === 'function' && typeof host.define.amd === 'object') {\r\n            return new Promise(function (resolve, reject) { return host.require(['aurelia-loader-default'], function (m) { return resolve(new m.DefaultLoader()); }, reject); });\r\n        }\r\n        if (isNodeLike && typeof module !== 'undefined' && typeof module.require !== 'undefined') {\r\n            var m = module.require('aurelia-loader-nodejs');\r\n            return Promise.resolve(new m.NodeJsLoader());\r\n        }\r\n    }\r\n    return Promise.reject('No PLATFORM.Loader is defined and there is neither a System API (ES6) or a Require API (AMD) globally available to load your app.');\r\n}\r\nfunction initializePal(loader) {\r\n    if (isInitialized)\r\n        return Promise.resolve();\r\n    var type;\r\n    var isRenderer = isNodeLike && (process.type === 'renderer' || process.versions['node-webkit']);\r\n    if (isNodeLike && !isRenderer) {\r\n        type = 'nodejs';\r\n    }\r\n    else if (typeof window !== 'undefined') {\r\n        type = 'browser';\r\n    }\r\n    else if (typeof self !== 'undefined') {\r\n        type = 'worker';\r\n    }\r\n    else {\r\n        throw new Error('Could not determine platform implementation to load.');\r\n    }\r\n    return loader.loadModule('aurelia-pal-' + type)\r\n        .then(function (palModule) { return type === 'nodejs' && !isInitialized && palModule.globalize() || palModule.initialize(); });\r\n}\r\nfunction preparePlatform(loader) {\r\n    var map = function (moduleId, relativeTo) {\r\n        return loader.normalize(moduleId, relativeTo)\r\n            .then(function (normalized) {\r\n            loader.map(moduleId, normalized);\r\n            return normalized;\r\n        });\r\n    };\r\n    return initializePal(loader)\r\n        .then(function () { return loader.normalize('aurelia-bootstrapper'); })\r\n        .then(function (bootstrapperName) {\r\n        var frameworkPromise = map(PLATFORM.moduleName('aurelia-framework', { exports: ['Aurelia'] }), bootstrapperName);\r\n        return Promise.all([\r\n            frameworkPromise,\r\n            frameworkPromise.then(function (frameworkName) { return map('aurelia-dependency-injection', frameworkName); }),\r\n            map('aurelia-router', bootstrapperName),\r\n            map('aurelia-logging-console', bootstrapperName)\r\n        ]);\r\n    })\r\n        .then(function (_a) {\r\n        var frameworkName = _a[0];\r\n        return loader.loadModule(frameworkName);\r\n    })\r\n        .then(function (fx) { return startResolve(function () { return new fx.Aurelia(loader); }); });\r\n}\r\nfunction config(appHost, configModuleId, aurelia) {\r\n    aurelia.host = appHost;\r\n    aurelia.configModuleId = configModuleId || null;\r\n    if (configModuleId) {\r\n        return aurelia.loader\r\n            .loadModule(configModuleId)\r\n            .then(function (customConfig) {\r\n            if (!customConfig.configure) {\r\n                throw new Error(\"Cannot initialize module '\".concat(configModuleId, \"' without a configure function.\"));\r\n            }\r\n            return customConfig.configure(aurelia);\r\n        });\r\n    }\r\n    aurelia.use\r\n        .standardConfiguration()\r\n        .developmentLogging();\r\n    return aurelia.start().then(function () { return aurelia.setRoot(); });\r\n}\r\nfunction run() {\r\n    return ready()\r\n        .then(createLoader)\r\n        .then(preparePlatform)\r\n        .then(function () {\r\n        var appHosts = host.document.querySelectorAll('[aurelia-app],[data-aurelia-app]');\r\n        for (var i = 0, ii = appHosts.length; i < ii; ++i) {\r\n            var appHost = appHosts[i];\r\n            var mainModuleId = appHost.getAttribute('aurelia-app') || appHost.getAttribute('data-aurelia-app');\r\n            bootstrap(config.bind(null, appHost, mainModuleId));\r\n        }\r\n        var toConsole = console.error.bind(console);\r\n        var bootstraps = bootstrapPromises.map(function (p) { return p.catch(toConsole); });\r\n        bootstrapPromises = null;\r\n        return Promise.all(bootstraps);\r\n    });\r\n}\r\nfunction bootstrap(configure) {\r\n    var p = startPromise.then(function (factory) { return configure(factory()); });\r\n    if (bootstrapPromises)\r\n        bootstrapPromises.push(p);\r\n    return p;\r\n}\r\nvar starting = run();\n\nexport { bootstrap, starting };\n//# sourceMappingURL=aurelia-bootstrapper.js.map\n","import { metadata, protocol } from 'aurelia-metadata';\nimport { AggregateError } from 'aurelia-pal';\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n\r\nfunction __decorate(decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nfunction __metadata(metadataKey, metadataValue) {\r\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\n\nfunction isInjectable(potentialTarget) {\r\n    return !!potentialTarget;\r\n}\r\nfunction autoinject(potentialTarget) {\r\n    var deco = function (target) {\r\n        if (!target.hasOwnProperty('inject')) {\r\n            target.inject = (metadata.getOwn(metadata.paramTypes, target) ||\r\n                _emptyParameters).slice();\r\n            if (target.inject && target.inject.length > 0) {\r\n                if (target.inject[target.inject.length - 1] === Object) {\r\n                    target.inject.splice(-1, 1);\r\n                }\r\n            }\r\n        }\r\n    };\r\n    if (isInjectable(potentialTarget)) {\r\n        return deco(potentialTarget);\r\n    }\r\n    return deco;\r\n}\r\nfunction inject() {\r\n    var rest = [];\r\n    for (var _i = 0; _i < arguments.length; _i++) {\r\n        rest[_i] = arguments[_i];\r\n    }\r\n    return function (target, _key, descriptor) {\r\n        if (typeof descriptor === 'number') {\r\n            autoinject(target);\r\n            if (rest.length === 1) {\r\n                target.inject[descriptor] = rest[0];\r\n            }\r\n            return;\r\n        }\r\n        if (descriptor) {\r\n            var fn = descriptor.value;\r\n            fn.inject = rest;\r\n        }\r\n        else {\r\n            target.inject = rest;\r\n        }\r\n    };\r\n}\n\nvar resolver = protocol.create('aurelia:resolver', function (target) {\r\n    if (!(typeof target.get === 'function')) {\r\n        return 'Resolvers must implement: get(container: Container, key: any): any';\r\n    }\r\n    return true;\r\n});\r\nvar Strategy;\r\n(function (Strategy) {\r\n    Strategy[Strategy[\"instance\"] = 0] = \"instance\";\r\n    Strategy[Strategy[\"singleton\"] = 1] = \"singleton\";\r\n    Strategy[Strategy[\"transient\"] = 2] = \"transient\";\r\n    Strategy[Strategy[\"function\"] = 3] = \"function\";\r\n    Strategy[Strategy[\"array\"] = 4] = \"array\";\r\n    Strategy[Strategy[\"alias\"] = 5] = \"alias\";\r\n})(Strategy || (Strategy = {}));\r\nfunction isStrategy(actual, expected, state) {\r\n    return actual === expected;\r\n}\r\nvar StrategyResolver = (function () {\r\n    function StrategyResolver(strategy, state) {\r\n        this.strategy = strategy;\r\n        this.state = state;\r\n    }\r\n    StrategyResolver.prototype.get = function (container, key) {\r\n        if (isStrategy(this.strategy, Strategy.instance, this.state)) {\r\n            return this.state;\r\n        }\r\n        if (isStrategy(this.strategy, Strategy.singleton, this.state)) {\r\n            var singleton = container.invoke(this.state);\r\n            this.state = singleton;\r\n            this.strategy = 0;\r\n            return singleton;\r\n        }\r\n        if (isStrategy(this.strategy, Strategy.transient, this.state)) {\r\n            return container.invoke(this.state);\r\n        }\r\n        if (isStrategy(this.strategy, Strategy.function, this.state)) {\r\n            return this.state(container, key, this);\r\n        }\r\n        if (isStrategy(this.strategy, Strategy.array, this.state)) {\r\n            return this.state[0].get(container, key);\r\n        }\r\n        if (isStrategy(this.strategy, Strategy.alias, this.state)) {\r\n            return container.get(this.state);\r\n        }\r\n        throw new Error('Invalid strategy: ' + this.strategy);\r\n    };\r\n    StrategyResolver = __decorate([\r\n        resolver(),\r\n        __metadata(\"design:paramtypes\", [Number, Object])\r\n    ], StrategyResolver);\r\n    return StrategyResolver;\r\n}());\r\nvar Lazy = (function () {\r\n    function Lazy(key) {\r\n        this._key = key;\r\n    }\r\n    Lazy_1 = Lazy;\r\n    Lazy.prototype.get = function (container) {\r\n        var _this = this;\r\n        return function () { return container.get(_this._key); };\r\n    };\r\n    Lazy.of = function (key) {\r\n        return new Lazy_1(key);\r\n    };\r\n    var Lazy_1;\r\n    Lazy = Lazy_1 = __decorate([\r\n        resolver(),\r\n        __metadata(\"design:paramtypes\", [Object])\r\n    ], Lazy);\r\n    return Lazy;\r\n}());\r\nvar All = (function () {\r\n    function All(key) {\r\n        this._key = key;\r\n    }\r\n    All_1 = All;\r\n    All.prototype.get = function (container) {\r\n        return container.getAll(this._key);\r\n    };\r\n    All.of = function (key) {\r\n        return new All_1(key);\r\n    };\r\n    var All_1;\r\n    All = All_1 = __decorate([\r\n        resolver(),\r\n        __metadata(\"design:paramtypes\", [Object])\r\n    ], All);\r\n    return All;\r\n}());\r\nvar Optional = (function () {\r\n    function Optional(key, checkParent) {\r\n        if (checkParent === void 0) { checkParent = true; }\r\n        this._key = key;\r\n        this._checkParent = checkParent;\r\n    }\r\n    Optional_1 = Optional;\r\n    Optional.prototype.get = function (container) {\r\n        if (container.hasResolver(this._key, this._checkParent)) {\r\n            return container.get(this._key);\r\n        }\r\n        return null;\r\n    };\r\n    Optional.of = function (key, checkParent) {\r\n        if (checkParent === void 0) { checkParent = true; }\r\n        return new Optional_1(key, checkParent);\r\n    };\r\n    var Optional_1;\r\n    Optional = Optional_1 = __decorate([\r\n        resolver(),\r\n        __metadata(\"design:paramtypes\", [Object, Boolean])\r\n    ], Optional);\r\n    return Optional;\r\n}());\r\nvar Parent = (function () {\r\n    function Parent(key) {\r\n        this._key = key;\r\n    }\r\n    Parent_1 = Parent;\r\n    Parent.prototype.get = function (container) {\r\n        return container.parent ? container.parent.get(this._key) : null;\r\n    };\r\n    Parent.of = function (key) {\r\n        return new Parent_1(key);\r\n    };\r\n    var Parent_1;\r\n    Parent = Parent_1 = __decorate([\r\n        resolver(),\r\n        __metadata(\"design:paramtypes\", [Object])\r\n    ], Parent);\r\n    return Parent;\r\n}());\r\nvar Factory = (function () {\r\n    function Factory(key) {\r\n        this._key = key;\r\n    }\r\n    Factory_1 = Factory;\r\n    Factory.prototype.get = function (container) {\r\n        var fn = this._key;\r\n        var resolver = container.getResolver(fn);\r\n        if (resolver && resolver.strategy === Strategy.function) {\r\n            fn = resolver.state;\r\n        }\r\n        return function () {\r\n            var rest = [];\r\n            for (var _i = 0; _i < arguments.length; _i++) {\r\n                rest[_i] = arguments[_i];\r\n            }\r\n            return container.invoke(fn, rest);\r\n        };\r\n    };\r\n    Factory.of = function (key) {\r\n        return new Factory_1(key);\r\n    };\r\n    var Factory_1;\r\n    Factory = Factory_1 = __decorate([\r\n        resolver(),\r\n        __metadata(\"design:paramtypes\", [Object])\r\n    ], Factory);\r\n    return Factory;\r\n}());\r\nvar NewInstance = (function () {\r\n    function NewInstance(key) {\r\n        var dynamicDependencies = [];\r\n        for (var _i = 1; _i < arguments.length; _i++) {\r\n            dynamicDependencies[_i - 1] = arguments[_i];\r\n        }\r\n        this.key = key;\r\n        this.asKey = key;\r\n        this.dynamicDependencies = dynamicDependencies;\r\n    }\r\n    NewInstance_1 = NewInstance;\r\n    NewInstance.prototype.get = function (container) {\r\n        var dynamicDependencies = this.dynamicDependencies.length > 0\r\n            ? this.dynamicDependencies.map(function (dependency) {\r\n                return dependency['protocol:aurelia:resolver']\r\n                    ? dependency.get(container)\r\n                    : container.get(dependency);\r\n            })\r\n            : undefined;\r\n        var fn = this.key;\r\n        var resolver = container.getResolver(fn);\r\n        if (resolver && resolver.strategy === 3) {\r\n            fn = resolver.state;\r\n        }\r\n        var instance = container.invoke(fn, dynamicDependencies);\r\n        container.registerInstance(this.asKey, instance);\r\n        return instance;\r\n    };\r\n    NewInstance.prototype.as = function (key) {\r\n        this.asKey = key;\r\n        return this;\r\n    };\r\n    NewInstance.of = function (key) {\r\n        var dynamicDependencies = [];\r\n        for (var _i = 1; _i < arguments.length; _i++) {\r\n            dynamicDependencies[_i - 1] = arguments[_i];\r\n        }\r\n        return new (NewInstance_1.bind.apply(NewInstance_1, [void 0, key].concat(dynamicDependencies)))();\r\n    };\r\n    var NewInstance_1;\r\n    NewInstance = NewInstance_1 = __decorate([\r\n        resolver(),\r\n        __metadata(\"design:paramtypes\", [Object, Object])\r\n    ], NewInstance);\r\n    return NewInstance;\r\n}());\r\nfunction getDecoratorDependencies(target) {\r\n    autoinject(target);\r\n    return target.inject;\r\n}\r\nfunction lazy(keyValue) {\r\n    return function (target, _key, index) {\r\n        var inject$$1 = getDecoratorDependencies(target);\r\n        inject$$1[index] = Lazy.of(keyValue);\r\n    };\r\n}\r\nfunction all(keyValue) {\r\n    return function (target, _key, index) {\r\n        var inject$$1 = getDecoratorDependencies(target);\r\n        inject$$1[index] = All.of(keyValue);\r\n    };\r\n}\r\nfunction optional(checkParentOrTarget) {\r\n    if (checkParentOrTarget === void 0) { checkParentOrTarget = true; }\r\n    var deco = function (checkParent) {\r\n        return function (target, _key, index) {\r\n            var inject$$1 = getDecoratorDependencies(target);\r\n            inject$$1[index] = Optional.of(inject$$1[index], checkParent);\r\n        };\r\n    };\r\n    if (typeof checkParentOrTarget === 'boolean') {\r\n        return deco(checkParentOrTarget);\r\n    }\r\n    return deco(true);\r\n}\r\nfunction parent(target, _key, index) {\r\n    var inject$$1 = getDecoratorDependencies(target);\r\n    inject$$1[index] = Parent.of(inject$$1[index]);\r\n}\r\nfunction factory(keyValue) {\r\n    return function (target, _key, index) {\r\n        var inject$$1 = getDecoratorDependencies(target);\r\n        inject$$1[index] = Factory.of(keyValue);\r\n    };\r\n}\r\nfunction newInstance(asKeyOrTarget) {\r\n    var dynamicDependencies = [];\r\n    for (var _i = 1; _i < arguments.length; _i++) {\r\n        dynamicDependencies[_i - 1] = arguments[_i];\r\n    }\r\n    var deco = function (asKey) {\r\n        return function (target, _key, index) {\r\n            var inject$$1 = getDecoratorDependencies(target);\r\n            inject$$1[index] = NewInstance.of.apply(NewInstance, [inject$$1[index]].concat(dynamicDependencies));\r\n            if (!!asKey) {\r\n                inject$$1[index].as(asKey);\r\n            }\r\n        };\r\n    };\r\n    if (arguments.length >= 1) {\r\n        return deco(asKeyOrTarget);\r\n    }\r\n    return deco();\r\n}\n\nfunction validateKey(key) {\r\n    if (key === null || key === undefined) {\r\n        throw new Error('key/value cannot be null or undefined. Are you trying to inject/register something that doesn\\'t exist with DI?');\r\n    }\r\n}\r\nvar _emptyParameters = Object.freeze([]);\r\nmetadata.registration = 'aurelia:registration';\r\nmetadata.invoker = 'aurelia:invoker';\r\nvar resolverDecorates = resolver.decorates;\r\nvar InvocationHandler = (function () {\r\n    function InvocationHandler(fn, invoker, dependencies) {\r\n        this.fn = fn;\r\n        this.invoker = invoker;\r\n        this.dependencies = dependencies;\r\n    }\r\n    InvocationHandler.prototype.invoke = function (container, dynamicDependencies) {\r\n        return dynamicDependencies !== undefined\r\n            ? this.invoker.invokeWithDynamicDependencies(container, this.fn, this.dependencies, dynamicDependencies)\r\n            : this.invoker.invoke(container, this.fn, this.dependencies);\r\n    };\r\n    return InvocationHandler;\r\n}());\r\nfunction invokeWithDynamicDependencies(container, fn, staticDependencies, dynamicDependencies) {\r\n    var i = staticDependencies.length;\r\n    var args = new Array(i);\r\n    var lookup;\r\n    while (i--) {\r\n        lookup = staticDependencies[i];\r\n        if (lookup === null || lookup === undefined) {\r\n            throw new Error('Constructor Parameter with index ' +\r\n                i +\r\n                ' cannot be null or undefined. Are you trying to inject/register something that doesn\\'t exist with DI?');\r\n        }\r\n        else {\r\n            args[i] = container.get(lookup);\r\n        }\r\n    }\r\n    if (dynamicDependencies !== undefined) {\r\n        args = args.concat(dynamicDependencies);\r\n    }\r\n    return Reflect.construct(fn, args);\r\n}\r\nvar classInvoker = {\r\n    invoke: function (container, Type, deps) {\r\n        var instances = deps.map(function (dep) { return container.get(dep); });\r\n        return Reflect.construct(Type, instances);\r\n    },\r\n    invokeWithDynamicDependencies: invokeWithDynamicDependencies\r\n};\r\nfunction getDependencies(f) {\r\n    if (!f.hasOwnProperty('inject')) {\r\n        return [];\r\n    }\r\n    if (typeof f.inject === 'function') {\r\n        return f.inject();\r\n    }\r\n    return f.inject;\r\n}\r\nvar Container = (function () {\r\n    function Container(configuration) {\r\n        if (configuration === undefined) {\r\n            configuration = {};\r\n        }\r\n        this._configuration = configuration;\r\n        this._onHandlerCreated = configuration.onHandlerCreated;\r\n        this._handlers =\r\n            configuration.handlers || (configuration.handlers = new Map());\r\n        this._resolvers = new Map();\r\n        this.root = this;\r\n        this.parent = null;\r\n    }\r\n    Container.prototype.makeGlobal = function () {\r\n        Container.instance = this;\r\n        return this;\r\n    };\r\n    Container.prototype.setHandlerCreatedCallback = function (onHandlerCreated) {\r\n        this._onHandlerCreated = onHandlerCreated;\r\n        this._configuration.onHandlerCreated = onHandlerCreated;\r\n    };\r\n    Container.prototype.registerInstance = function (key, instance) {\r\n        return this.registerResolver(key, new StrategyResolver(0, instance === undefined ? key : instance));\r\n    };\r\n    Container.prototype.registerSingleton = function (key, fn) {\r\n        return this.registerResolver(key, new StrategyResolver(1, fn === undefined ? key : fn));\r\n    };\r\n    Container.prototype.registerTransient = function (key, fn) {\r\n        return this.registerResolver(key, new StrategyResolver(2, fn === undefined ? key : fn));\r\n    };\r\n    Container.prototype.registerHandler = function (key, handler) {\r\n        return this.registerResolver(key, new StrategyResolver(3, handler));\r\n    };\r\n    Container.prototype.registerAlias = function (originalKey, aliasKey) {\r\n        return this.registerResolver(aliasKey, new StrategyResolver(5, originalKey));\r\n    };\r\n    Container.prototype.registerResolver = function (key, resolver$$1) {\r\n        validateKey(key);\r\n        var allResolvers = this._resolvers;\r\n        var result = allResolvers.get(key);\r\n        if (result === undefined) {\r\n            allResolvers.set(key, resolver$$1);\r\n        }\r\n        else if (result.strategy === 4) {\r\n            result.state.push(resolver$$1);\r\n        }\r\n        else {\r\n            allResolvers.set(key, new StrategyResolver(4, [result, resolver$$1]));\r\n        }\r\n        return resolver$$1;\r\n    };\r\n    Container.prototype.autoRegister = function (key, fn) {\r\n        fn = fn === undefined ? key : fn;\r\n        if (typeof fn === 'function') {\r\n            var registration = metadata.get(metadata.registration, fn);\r\n            if (registration === undefined) {\r\n                return this.registerResolver(key, new StrategyResolver(1, fn));\r\n            }\r\n            return registration.registerResolver(this, key, fn);\r\n        }\r\n        return this.registerResolver(key, new StrategyResolver(0, fn));\r\n    };\r\n    Container.prototype.autoRegisterAll = function (fns) {\r\n        var i = fns.length;\r\n        while (i--) {\r\n            this.autoRegister(fns[i]);\r\n        }\r\n    };\r\n    Container.prototype.unregister = function (key) {\r\n        this._resolvers.delete(key);\r\n    };\r\n    Container.prototype.hasResolver = function (key, checkParent) {\r\n        if (checkParent === void 0) { checkParent = false; }\r\n        validateKey(key);\r\n        return (this._resolvers.has(key) ||\r\n            (checkParent &&\r\n                this.parent !== null &&\r\n                this.parent.hasResolver(key, checkParent)));\r\n    };\r\n    Container.prototype.getResolver = function (key) {\r\n        return this._resolvers.get(key);\r\n    };\r\n    Container.prototype.get = function (key) {\r\n        validateKey(key);\r\n        if (key === Container) {\r\n            return this;\r\n        }\r\n        if (resolverDecorates(key)) {\r\n            return key.get(this, key);\r\n        }\r\n        var resolver$$1 = this._resolvers.get(key);\r\n        if (resolver$$1 === undefined) {\r\n            if (this.parent === null) {\r\n                return this.autoRegister(key).get(this, key);\r\n            }\r\n            var registration = metadata.get(metadata.registration, key);\r\n            if (registration === undefined) {\r\n                return this.parent._get(key);\r\n            }\r\n            return registration.registerResolver(this, key, key).get(this, key);\r\n        }\r\n        return resolver$$1.get(this, key);\r\n    };\r\n    Container.prototype._get = function (key) {\r\n        var resolver$$1 = this._resolvers.get(key);\r\n        if (resolver$$1 === undefined) {\r\n            if (this.parent === null) {\r\n                return this.autoRegister(key).get(this, key);\r\n            }\r\n            return this.parent._get(key);\r\n        }\r\n        return resolver$$1.get(this, key);\r\n    };\r\n    Container.prototype.getAll = function (key) {\r\n        validateKey(key);\r\n        var resolver$$1 = this._resolvers.get(key);\r\n        if (resolver$$1 === undefined) {\r\n            if (this.parent === null) {\r\n                return _emptyParameters;\r\n            }\r\n            return this.parent.getAll(key);\r\n        }\r\n        if (resolver$$1.strategy === 4) {\r\n            var state = resolver$$1.state;\r\n            var i = state.length;\r\n            var results = new Array(i);\r\n            while (i--) {\r\n                results[i] = state[i].get(this, key);\r\n            }\r\n            return results;\r\n        }\r\n        return [resolver$$1.get(this, key)];\r\n    };\r\n    Container.prototype.createChild = function () {\r\n        var child = new Container(this._configuration);\r\n        child.root = this.root;\r\n        child.parent = this;\r\n        return child;\r\n    };\r\n    Container.prototype.invoke = function (fn, dynamicDependencies) {\r\n        try {\r\n            var handler = this._handlers.get(fn);\r\n            if (handler === undefined) {\r\n                handler = this._createInvocationHandler(fn);\r\n                this._handlers.set(fn, handler);\r\n            }\r\n            return handler.invoke(this, dynamicDependencies);\r\n        }\r\n        catch (e) {\r\n            throw new AggregateError(\"Error invoking \" + fn.name + \". Check the inner error for details.\", e, true);\r\n        }\r\n    };\r\n    Container.prototype._createInvocationHandler = function (fn) {\r\n        var dependencies;\r\n        if (fn.inject === undefined) {\r\n            dependencies =\r\n                metadata.getOwn(metadata.paramTypes, fn) || _emptyParameters;\r\n        }\r\n        else {\r\n            dependencies = [];\r\n            var ctor = fn;\r\n            while (typeof ctor === 'function') {\r\n                dependencies.push.apply(dependencies, getDependencies(ctor));\r\n                ctor = Object.getPrototypeOf(ctor);\r\n            }\r\n        }\r\n        var invoker = metadata.getOwn(metadata.invoker, fn) || classInvoker;\r\n        var handler = new InvocationHandler(fn, invoker, dependencies);\r\n        return this._onHandlerCreated !== undefined\r\n            ? this._onHandlerCreated(handler)\r\n            : handler;\r\n    };\r\n    return Container;\r\n}());\n\nfunction invoker(value) {\r\n    return function (target) {\r\n        metadata.define(metadata.invoker, value, target);\r\n    };\r\n}\r\nfunction invokeAsFactory(potentialTarget) {\r\n    var deco = function (target) {\r\n        metadata.define(metadata.invoker, FactoryInvoker.instance, target);\r\n    };\r\n    return potentialTarget ? deco(potentialTarget) : deco;\r\n}\r\nvar FactoryInvoker = (function () {\r\n    function FactoryInvoker() {\r\n    }\r\n    FactoryInvoker.prototype.invoke = function (container, fn, dependencies) {\r\n        var i = dependencies.length;\r\n        var args = new Array(i);\r\n        while (i--) {\r\n            args[i] = container.get(dependencies[i]);\r\n        }\r\n        return fn.apply(undefined, args);\r\n    };\r\n    FactoryInvoker.prototype.invokeWithDynamicDependencies = function (container, fn, staticDependencies, dynamicDependencies) {\r\n        var i = staticDependencies.length;\r\n        var args = new Array(i);\r\n        while (i--) {\r\n            args[i] = container.get(staticDependencies[i]);\r\n        }\r\n        if (dynamicDependencies !== undefined) {\r\n            args = args.concat(dynamicDependencies);\r\n        }\r\n        return fn.apply(undefined, args);\r\n    };\r\n    return FactoryInvoker;\r\n}());\r\nFactoryInvoker.instance = new FactoryInvoker();\n\nfunction registration(value) {\r\n    return function (target) {\r\n        metadata.define(metadata.registration, value, target);\r\n    };\r\n}\r\nfunction transient(key) {\r\n    return registration(new TransientRegistration(key));\r\n}\r\nfunction singleton(keyOrRegisterInChild, registerInChild) {\r\n    if (registerInChild === void 0) { registerInChild = false; }\r\n    return registration(new SingletonRegistration(keyOrRegisterInChild, registerInChild));\r\n}\r\nvar TransientRegistration = (function () {\r\n    function TransientRegistration(key) {\r\n        this._key = key;\r\n    }\r\n    TransientRegistration.prototype.registerResolver = function (container, key, fn) {\r\n        var existingResolver = container.getResolver(this._key || key);\r\n        return existingResolver === undefined\r\n            ? container.registerTransient((this._key || key), fn)\r\n            : existingResolver;\r\n    };\r\n    return TransientRegistration;\r\n}());\r\nvar SingletonRegistration = (function () {\r\n    function SingletonRegistration(keyOrRegisterInChild, registerInChild) {\r\n        if (registerInChild === void 0) { registerInChild = false; }\r\n        if (typeof keyOrRegisterInChild === 'boolean') {\r\n            this._registerInChild = keyOrRegisterInChild;\r\n        }\r\n        else {\r\n            this._key = keyOrRegisterInChild;\r\n            this._registerInChild = registerInChild;\r\n        }\r\n    }\r\n    SingletonRegistration.prototype.registerResolver = function (container, key, fn) {\r\n        var targetContainer = this._registerInChild ? container : container.root;\r\n        var existingResolver = targetContainer.getResolver(this._key || key);\r\n        return existingResolver === undefined\r\n            ? targetContainer.registerSingleton(this._key || key, fn)\r\n            : existingResolver;\r\n    };\r\n    return SingletonRegistration;\r\n}());\n\nexport { _emptyParameters, InvocationHandler, Container, autoinject, inject, invoker, invokeAsFactory, FactoryInvoker, registration, transient, singleton, TransientRegistration, SingletonRegistration, resolver, Strategy, StrategyResolver, Lazy, All, Optional, Parent, Factory, NewInstance, getDecoratorDependencies, lazy, all, optional, parent, factory, newInstance };\n","import { a as Renderer, b as createDialogCancelError, c as invokeLifecycle, d as DialogController } from './chunk.js';\nexport { d as DialogController, a as Renderer, b as createDialogCancelError, e as createDialogCloseError } from './chunk.js';\nimport { DOM } from 'aurelia-pal';\nimport { Container } from 'aurelia-dependency-injection';\nimport { ViewSlot, CompositionEngine } from 'aurelia-templating';\n\nvar DefaultDialogSettings = (function () {\r\n    function DefaultDialogSettings() {\r\n        this.lock = true;\r\n        this.startingZIndex = 1000;\r\n        this.centerHorizontalOnly = false;\r\n        this.rejectOnCancel = false;\r\n        this.ignoreTransitions = false;\r\n        this.restoreFocus = function (lastActiveElement) { return lastActiveElement.focus(); };\r\n    }\r\n    return DefaultDialogSettings;\r\n}());\n\nvar RENDERRERS = {\r\n    ux: function () { return import('./ux-dialog-renderer.js').then(function (m) { return m.DialogRenderer; }); },\r\n    native: function () { return import('./native-dialog-renderer.js').then(function (m) { return m.NativeDialogRenderer; }); }\r\n};\r\nvar DEFAULT_RESOURCES = {\r\n    'ux-dialog': function () { return import('./ux-dialog.js').then(function (m) { return m.UxDialog; }); },\r\n    'ux-dialog-header': function () { return import('./ux-dialog-header.js').then(function (m) { return m.UxDialogHeader; }); },\r\n    'ux-dialog-body': function () { return import('./ux-dialog-body.js').then(function (m) { return m.UxDialogBody; }); },\r\n    'ux-dialog-footer': function () { return import('./ux-dialog-footer.js').then(function (m) { return m.UxDialogFooter; }); },\r\n    'attach-focus': function () { return import('./attach-focus.js').then(function (m) { return m.AttachFocus; }); }\r\n};\r\nvar DEFAULT_CSS_TEXT = function () { return import('./default-styles.js').then(function (cssM) { return cssM['default']; }); };\r\nvar DialogConfiguration = (function () {\r\n    function DialogConfiguration(frameworkConfiguration, applySetter) {\r\n        var _this = this;\r\n        this.renderer = 'ux';\r\n        this.cssText = DEFAULT_CSS_TEXT;\r\n        this.resources = [];\r\n        this.fwConfig = frameworkConfiguration;\r\n        this.settings = frameworkConfiguration.container.get(DefaultDialogSettings);\r\n        applySetter(function () { return _this._apply(); });\r\n    }\r\n    DialogConfiguration.prototype._apply = function () {\r\n        var _this = this;\r\n        var renderer = this.renderer;\r\n        var cssText = this.cssText;\r\n        return Promise\r\n            .all([\r\n            typeof renderer === 'string' ? RENDERRERS[renderer]() : renderer,\r\n            cssText\r\n                ? typeof cssText === 'string'\r\n                    ? cssText\r\n                    : cssText()\r\n                : ''\r\n        ])\r\n            .then(function (_a) {\r\n            var rendererImpl = _a[0], $cssText = _a[1];\r\n            var fwConfig = _this.fwConfig;\r\n            fwConfig.transient(Renderer, rendererImpl);\r\n            if ($cssText) {\r\n                DOM.injectStyles($cssText);\r\n            }\r\n            return Promise\r\n                .all(_this.resources.map(function (name) { return DEFAULT_RESOURCES[name](); }))\r\n                .then(function (modules) {\r\n                fwConfig.globalResources(modules);\r\n            });\r\n        });\r\n    };\r\n    DialogConfiguration.prototype.useDefaults = function () {\r\n        return this\r\n            .useRenderer('ux')\r\n            .useCSS(DEFAULT_CSS_TEXT)\r\n            .useStandardResources();\r\n    };\r\n    DialogConfiguration.prototype.useStandardResources = function () {\r\n        Object.keys(DEFAULT_RESOURCES).forEach(this.useResource, this);\r\n        return this;\r\n    };\r\n    DialogConfiguration.prototype.useResource = function (resourceName) {\r\n        this.resources.push(resourceName);\r\n        return this;\r\n    };\r\n    DialogConfiguration.prototype.useRenderer = function (renderer, settings) {\r\n        this.renderer = renderer;\r\n        if (settings) {\r\n            Object.assign(this.settings, settings);\r\n        }\r\n        return this;\r\n    };\r\n    DialogConfiguration.prototype.useCSS = function (cssText) {\r\n        this.cssText = cssText;\r\n        return this;\r\n    };\r\n    return DialogConfiguration;\r\n}());\n\nfunction whenClosed(onfulfilled, onrejected) {\r\n    return this.then(function (r) { return r.wasCancelled ? r : r.closeResult; }).then(onfulfilled, onrejected);\r\n}\r\nfunction asDialogOpenPromise(promise) {\r\n    promise.whenClosed = whenClosed;\r\n    return promise;\r\n}\r\nvar DialogService = (function () {\r\n    function DialogService(container, compositionEngine, defaultSettings) {\r\n        this.controllers = [];\r\n        this.hasOpenDialog = false;\r\n        this.hasActiveDialog = false;\r\n        this.container = container;\r\n        this.compositionEngine = compositionEngine;\r\n        this.defaultSettings = defaultSettings;\r\n    }\r\n    DialogService.prototype.validateSettings = function (settings) {\r\n        if (!settings.viewModel && !settings.view) {\r\n            throw new Error('Invalid Dialog Settings. You must provide \"viewModel\", \"view\" or both.');\r\n        }\r\n    };\r\n    DialogService.prototype.createCompositionContext = function (childContainer, host, settings) {\r\n        return {\r\n            container: childContainer.parent,\r\n            childContainer: childContainer,\r\n            bindingContext: null,\r\n            viewResources: null,\r\n            model: settings.model,\r\n            view: settings.view,\r\n            viewModel: settings.viewModel,\r\n            viewSlot: new ViewSlot(host, true),\r\n            host: host\r\n        };\r\n    };\r\n    DialogService.prototype.ensureViewModel = function (compositionContext) {\r\n        if (typeof compositionContext.viewModel === 'object') {\r\n            return Promise.resolve(compositionContext);\r\n        }\r\n        return this.compositionEngine.ensureViewModel(compositionContext);\r\n    };\r\n    DialogService.prototype._cancelOperation = function (rejectOnCancel) {\r\n        if (!rejectOnCancel) {\r\n            return { wasCancelled: true };\r\n        }\r\n        throw createDialogCancelError();\r\n    };\r\n    DialogService.prototype.composeAndShowDialog = function (compositionContext, dialogController) {\r\n        var _this = this;\r\n        if (!compositionContext.viewModel) {\r\n            compositionContext.bindingContext = { controller: dialogController };\r\n        }\r\n        return this.compositionEngine\r\n            .compose(compositionContext)\r\n            .then(function (controller) {\r\n            dialogController.controller = controller;\r\n            return dialogController.renderer\r\n                .showDialog(dialogController)\r\n                .then(function () {\r\n                _this.controllers.push(dialogController);\r\n                _this.hasActiveDialog = _this.hasOpenDialog = !!_this.controllers.length;\r\n            }, function (reason) {\r\n                if (controller.viewModel) {\r\n                    invokeLifecycle(controller.viewModel, 'deactivate');\r\n                }\r\n                return Promise.reject(reason);\r\n            });\r\n        });\r\n    };\r\n    DialogService.prototype.createSettings = function (settings) {\r\n        settings = Object.assign({}, this.defaultSettings, settings);\r\n        if (typeof settings.keyboard !== 'boolean' && !settings.keyboard) {\r\n            settings.keyboard = !settings.lock;\r\n        }\r\n        if (typeof settings.overlayDismiss !== 'boolean') {\r\n            settings.overlayDismiss = !settings.lock;\r\n        }\r\n        Object.defineProperty(settings, 'rejectOnCancel', {\r\n            writable: false,\r\n            configurable: true,\r\n            enumerable: true\r\n        });\r\n        this.validateSettings(settings);\r\n        return settings;\r\n    };\r\n    DialogService.prototype.open = function (settings) {\r\n        var _this = this;\r\n        if (settings === void 0) { settings = {}; }\r\n        settings = this.createSettings(settings);\r\n        var childContainer = settings.childContainer || this.container.createChild();\r\n        var resolveCloseResult;\r\n        var rejectCloseResult;\r\n        var closeResult = new Promise(function (resolve, reject) {\r\n            resolveCloseResult = resolve;\r\n            rejectCloseResult = reject;\r\n        });\r\n        var dialogController = childContainer.invoke(DialogController, [settings, resolveCloseResult, rejectCloseResult]);\r\n        childContainer.registerInstance(DialogController, dialogController);\r\n        closeResult.then(function () {\r\n            removeController(_this, dialogController);\r\n        }, function () {\r\n            removeController(_this, dialogController);\r\n        });\r\n        var compositionContext = this.createCompositionContext(childContainer, dialogController.renderer.getDialogContainer(), dialogController.settings);\r\n        var openResult = this.ensureViewModel(compositionContext).then(function (compositionContext) {\r\n            if (!compositionContext.viewModel) {\r\n                return true;\r\n            }\r\n            return invokeLifecycle(compositionContext.viewModel, 'canActivate', dialogController.settings.model);\r\n        }).then(function (canActivate) {\r\n            if (!canActivate) {\r\n                return _this._cancelOperation(dialogController.settings.rejectOnCancel);\r\n            }\r\n            return _this.composeAndShowDialog(compositionContext, dialogController)\r\n                .then(function () { return ({ controller: dialogController, closeResult: closeResult, wasCancelled: false }); });\r\n        });\r\n        return asDialogOpenPromise(openResult);\r\n    };\r\n    DialogService.prototype.closeAll = function () {\r\n        return Promise.all(this.controllers.slice(0).map(function (controller) {\r\n            if (!controller.settings.rejectOnCancel) {\r\n                return controller.cancel().then(function (result) {\r\n                    if (result.wasCancelled) {\r\n                        return controller;\r\n                    }\r\n                    return null;\r\n                });\r\n            }\r\n            return controller.cancel().then(function () { return null; }).catch(function (reason) {\r\n                if (reason.wasCancelled) {\r\n                    return controller;\r\n                }\r\n                throw reason;\r\n            });\r\n        })).then(function (unclosedControllers) { return unclosedControllers.filter(function (unclosed) { return !!unclosed; }); });\r\n    };\r\n    DialogService.inject = [Container, CompositionEngine, DefaultDialogSettings];\r\n    return DialogService;\r\n}());\r\nfunction removeController(service, dialogController) {\r\n    var i = service.controllers.indexOf(dialogController);\r\n    if (i !== -1) {\r\n        service.controllers.splice(i, 1);\r\n        service.hasActiveDialog = service.hasOpenDialog = !!service.controllers.length;\r\n    }\r\n}\n\nfunction configure(frameworkConfig, callback) {\r\n    var applyConfig = null;\r\n    var config = new DialogConfiguration(frameworkConfig, function (apply) { applyConfig = apply; });\r\n    if (typeof callback === 'function') {\r\n        callback(config);\r\n    }\r\n    else {\r\n        config.useDefaults();\r\n    }\r\n    return applyConfig();\r\n}\n\nexport { DefaultDialogSettings, DialogConfiguration, DialogService, configure };\n//# sourceMappingURL=aurelia-dialog.js.map\n","var Renderer = (function () {\r\n    function Renderer() {\r\n    }\r\n    Renderer.prototype.getDialogContainer = function () {\r\n        throw new Error('DialogRenderer must implement getDialogContainer().');\r\n    };\r\n    Renderer.prototype.showDialog = function (dialogController) {\r\n        throw new Error('DialogRenderer must implement showDialog().');\r\n    };\r\n    Renderer.prototype.hideDialog = function (dialogController) {\r\n        throw new Error('DialogRenderer must implement hideDialog().');\r\n    };\r\n    return Renderer;\r\n}());\n\nfunction createDialogCancelError(output) {\r\n    var error = new Error('Operation cancelled.');\r\n    error.wasCancelled = true;\r\n    error.output = output;\r\n    return error;\r\n}\n\nfunction createDialogCloseError(output) {\r\n    var error = new Error();\r\n    error.wasCancelled = false;\r\n    error.output = output;\r\n    return error;\r\n}\n\nfunction invokeLifecycle(instance, name, model) {\r\n    if (typeof instance[name] === 'function') {\r\n        return new Promise(function (resolve) {\r\n            resolve(instance[name](model));\r\n        }).then(function (result) {\r\n            if (result !== null && result !== undefined) {\r\n                return result;\r\n            }\r\n            return true;\r\n        });\r\n    }\r\n    return Promise.resolve(true);\r\n}\n\nvar DialogController = (function () {\r\n    function DialogController(renderer, settings, resolve, reject) {\r\n        this.resolve = resolve;\r\n        this.reject = reject;\r\n        this.settings = settings;\r\n        this.renderer = renderer;\r\n    }\r\n    DialogController.prototype.releaseResources = function (result) {\r\n        var _this = this;\r\n        return invokeLifecycle(this.controller.viewModel || {}, 'deactivate', result)\r\n            .then(function () { return _this.renderer.hideDialog(_this); })\r\n            .then(function () {\r\n            _this.controller.unbind();\r\n        });\r\n    };\r\n    DialogController.prototype.cancelOperation = function () {\r\n        if (!this.settings.rejectOnCancel) {\r\n            return { wasCancelled: true };\r\n        }\r\n        throw createDialogCancelError();\r\n    };\r\n    DialogController.prototype.ok = function (output) {\r\n        return this.close(true, output);\r\n    };\r\n    DialogController.prototype.cancel = function (output) {\r\n        return this.close(false, output);\r\n    };\r\n    DialogController.prototype.error = function (output) {\r\n        var _this = this;\r\n        var closeError = createDialogCloseError(output);\r\n        return this.releaseResources(closeError).then(function () { _this.reject(closeError); });\r\n    };\r\n    DialogController.prototype.close = function (ok, output) {\r\n        var _this = this;\r\n        if (this.closePromise) {\r\n            return this.closePromise;\r\n        }\r\n        var dialogResult = { wasCancelled: !ok, output: output };\r\n        return this.closePromise = invokeLifecycle(this.controller.viewModel || {}, 'canDeactivate', dialogResult)\r\n            .catch(function (reason) {\r\n            _this.closePromise = undefined;\r\n            return Promise.reject(reason);\r\n        }).then(function (canDeactivate) {\r\n            if (!canDeactivate) {\r\n                _this.closePromise = undefined;\r\n                return _this.cancelOperation();\r\n            }\r\n            return _this.releaseResources(dialogResult).then(function () {\r\n                if (!_this.settings.rejectOnCancel || ok) {\r\n                    _this.resolve(dialogResult);\r\n                }\r\n                else {\r\n                    _this.reject(createDialogCancelError(output));\r\n                }\r\n                return { wasCancelled: false };\r\n            }).catch(function (reason) {\r\n                _this.closePromise = undefined;\r\n                return Promise.reject(reason);\r\n            });\r\n        });\r\n    };\r\n    DialogController.inject = [Renderer];\r\n    return DialogController;\r\n}());\n\nexport { Renderer as a, createDialogCancelError as b, invokeLifecycle as c, DialogController as d, createDialogCloseError as e };\n//# sourceMappingURL=chunk.js.map\n","\n\nimport * as LogManager from 'aurelia-logging';\n\nvar logger = LogManager.getLogger('event-aggregator');\n\nvar Handler = function () {\n  function Handler(messageType, callback) {\n    \n\n    this.messageType = messageType;\n    this.callback = callback;\n  }\n\n  Handler.prototype.handle = function handle(message) {\n    if (message instanceof this.messageType) {\n      this.callback.call(null, message);\n    }\n  };\n\n  return Handler;\n}();\n\nfunction invokeCallback(callback, data, event) {\n  try {\n    callback(data, event);\n  } catch (e) {\n    logger.error(e);\n  }\n}\n\nfunction invokeHandler(handler, data) {\n  try {\n    handler.handle(data);\n  } catch (e) {\n    logger.error(e);\n  }\n}\n\nexport var EventAggregator = function () {\n  function EventAggregator() {\n    \n\n    this.eventLookup = {};\n    this.messageHandlers = [];\n  }\n\n  EventAggregator.prototype.publish = function publish(event, data) {\n    var subscribers = void 0;\n    var i = void 0;\n\n    if (!event) {\n      throw new Error('Event was invalid.');\n    }\n\n    if (typeof event === 'string') {\n      subscribers = this.eventLookup[event];\n      if (subscribers) {\n        subscribers = subscribers.slice();\n        i = subscribers.length;\n\n        while (i--) {\n          invokeCallback(subscribers[i], data, event);\n        }\n      }\n    } else {\n      subscribers = this.messageHandlers.slice();\n      i = subscribers.length;\n\n      while (i--) {\n        invokeHandler(subscribers[i], event);\n      }\n    }\n  };\n\n  EventAggregator.prototype.subscribe = function subscribe(event, callback) {\n    var handler = void 0;\n    var subscribers = void 0;\n\n    if (!event) {\n      throw new Error('Event channel/type was invalid.');\n    }\n\n    if (typeof event === 'string') {\n      handler = callback;\n      subscribers = this.eventLookup[event] || (this.eventLookup[event] = []);\n    } else {\n      handler = new Handler(event, callback);\n      subscribers = this.messageHandlers;\n    }\n\n    subscribers.push(handler);\n\n    return {\n      dispose: function dispose() {\n        var idx = subscribers.indexOf(handler);\n        if (idx !== -1) {\n          subscribers.splice(idx, 1);\n        }\n      }\n    };\n  };\n\n  EventAggregator.prototype.subscribeOnce = function subscribeOnce(event, callback) {\n    var sub = this.subscribe(event, function (a, b) {\n      sub.dispose();\n      return callback(a, b);\n    });\n\n    return sub;\n  };\n\n  return EventAggregator;\n}();\n\nexport function includeEventsIn(obj) {\n  var ea = new EventAggregator();\n\n  obj.subscribeOnce = function (event, callback) {\n    return ea.subscribeOnce(event, callback);\n  };\n\n  obj.subscribe = function (event, callback) {\n    return ea.subscribe(event, callback);\n  };\n\n  obj.publish = function (event, data) {\n    ea.publish(event, data);\n  };\n\n  return ea;\n}\n\nexport function configure(config) {\n  config.instance(EventAggregator, includeEventsIn(config.aurelia));\n}","import { Container } from 'aurelia-dependency-injection';\nexport * from 'aurelia-dependency-injection';\nexport * from 'aurelia-binding';\nexport * from 'aurelia-metadata';\nimport { HtmlBehaviorResource, ViewEngine, BindingLanguage, TemplatingEngine, CompositionTransaction, ViewSlot, ViewResources } from 'aurelia-templating';\nexport * from 'aurelia-templating';\nimport { Loader } from 'aurelia-loader';\nexport * from 'aurelia-loader';\nexport * from 'aurelia-task-queue';\nimport { join, relativeToFile } from 'aurelia-path';\nexport * from 'aurelia-path';\nimport { DOM, PLATFORM } from 'aurelia-pal';\nexport * from 'aurelia-pal';\nimport * as TheLogManager from 'aurelia-logging';\nexport { TheLogManager as LogManager };\n\nvar logger = TheLogManager.getLogger('aurelia');\r\nvar extPattern = /\\.[^/.]+$/;\r\nfunction runTasks(config, tasks) {\r\n    var current;\r\n    var next = function () {\r\n        current = tasks.shift();\r\n        if (current) {\r\n            return Promise.resolve(current(config)).then(next);\r\n        }\r\n        return Promise.resolve();\r\n    };\r\n    return next();\r\n}\r\nfunction loadPlugin(fwConfig, loader, info) {\r\n    logger.debug(\"Loading plugin \".concat(info.moduleId, \".\"));\r\n    if (typeof info.moduleId === 'string') {\r\n        fwConfig.resourcesRelativeTo = info.resourcesRelativeTo;\r\n        var id = info.moduleId;\r\n        if (info.resourcesRelativeTo.length > 1) {\r\n            return loader.normalize(info.moduleId, info.resourcesRelativeTo[1])\r\n                .then(function (normalizedId) { return _loadPlugin(normalizedId); });\r\n        }\r\n        return _loadPlugin(id);\r\n    }\r\n    else if (typeof info.configure === 'function') {\r\n        if (fwConfig.configuredPlugins.indexOf(info.configure) !== -1) {\r\n            return Promise.resolve();\r\n        }\r\n        fwConfig.configuredPlugins.push(info.configure);\r\n        return Promise.resolve(info.configure.call(null, fwConfig, info.config || {}));\r\n    }\r\n    throw new Error(invalidConfigMsg(info.moduleId || info.configure, 'plugin'));\r\n    function _loadPlugin(moduleId) {\r\n        return loader.loadModule(moduleId).then(function (m) {\r\n            if ('configure' in m) {\r\n                if (fwConfig.configuredPlugins.indexOf(m.configure) !== -1) {\r\n                    return Promise.resolve();\r\n                }\r\n                return Promise.resolve(m.configure(fwConfig, info.config || {})).then(function () {\r\n                    fwConfig.configuredPlugins.push(m.configure);\r\n                    fwConfig.resourcesRelativeTo = null;\r\n                    logger.debug(\"Configured plugin \".concat(info.moduleId, \".\"));\r\n                });\r\n            }\r\n            fwConfig.resourcesRelativeTo = null;\r\n            logger.debug(\"Loaded plugin \".concat(info.moduleId, \".\"));\r\n        });\r\n    }\r\n}\r\nfunction loadResources(aurelia, resourcesToLoad, appResources) {\r\n    if (Object.keys(resourcesToLoad).length === 0) {\r\n        return Promise.resolve();\r\n    }\r\n    var viewEngine = aurelia.container.get(ViewEngine);\r\n    return Promise.all(Object.keys(resourcesToLoad).map(function (n) { return _normalize(resourcesToLoad[n]); }))\r\n        .then(function (loads) {\r\n        var names = [];\r\n        var importIds = [];\r\n        loads.forEach(function (l) {\r\n            names.push(undefined);\r\n            importIds.push(l.importId);\r\n        });\r\n        return viewEngine.importViewResources(importIds, names, appResources);\r\n    });\r\n    function _normalize(load) {\r\n        var moduleId = load.moduleId;\r\n        var ext = getExt(moduleId);\r\n        if (isOtherResource(moduleId)) {\r\n            moduleId = removeExt(moduleId);\r\n        }\r\n        return aurelia.loader.normalize(moduleId, load.relativeTo)\r\n            .then(function (normalized) {\r\n            return {\r\n                name: load.moduleId,\r\n                importId: isOtherResource(load.moduleId) ? addOriginalExt(normalized, ext) : normalized\r\n            };\r\n        });\r\n    }\r\n    function isOtherResource(name) {\r\n        var ext = getExt(name);\r\n        if (!ext)\r\n            return false;\r\n        if (ext === '')\r\n            return false;\r\n        if (ext === '.js' || ext === '.ts')\r\n            return false;\r\n        return true;\r\n    }\r\n    function removeExt(name) {\r\n        return name.replace(extPattern, '');\r\n    }\r\n    function addOriginalExt(normalized, ext) {\r\n        return removeExt(normalized) + '.' + ext;\r\n    }\r\n}\r\nfunction getExt(name) {\r\n    var match = name.match(extPattern);\r\n    if (match && match.length > 0) {\r\n        return (match[0].split('.'))[1];\r\n    }\r\n}\r\nfunction loadBehaviors(config) {\r\n    return Promise.all(config.behaviorsToLoad.map(function (m) { return m.load(config.container, m.target); })).then(function () {\r\n        config.behaviorsToLoad = null;\r\n    });\r\n}\r\nfunction assertProcessed(plugins) {\r\n    if (plugins.processed) {\r\n        throw new Error('This config instance has already been applied. To load more plugins or global resources, create a new FrameworkConfiguration instance.');\r\n    }\r\n}\r\nfunction invalidConfigMsg(cfg, type) {\r\n    return \"Invalid \".concat(type, \" [\").concat(cfg, \"], \").concat(type, \" must be specified as functions or relative module IDs.\");\r\n}\r\nvar FrameworkConfiguration = (function () {\r\n    function FrameworkConfiguration(aurelia) {\r\n        var _this = this;\r\n        this.aurelia = aurelia;\r\n        this.container = aurelia.container;\r\n        this.info = [];\r\n        this.processed = false;\r\n        this.preTasks = [];\r\n        this.postTasks = [];\r\n        this.behaviorsToLoad = [];\r\n        this.configuredPlugins = [];\r\n        this.resourcesToLoad = {};\r\n        this.preTask(function () { return aurelia.loader.normalize('aurelia-bootstrapper', undefined)\r\n            .then(function (name) { return _this.bootstrapperName = name; }); });\r\n        this.postTask(function () { return loadResources(aurelia, _this.resourcesToLoad, aurelia.resources); });\r\n    }\r\n    FrameworkConfiguration.prototype.instance = function (type, instance) {\r\n        this.container.registerInstance(type, instance);\r\n        return this;\r\n    };\r\n    FrameworkConfiguration.prototype.singleton = function (type, implementation) {\r\n        this.container.registerSingleton(type, implementation);\r\n        return this;\r\n    };\r\n    FrameworkConfiguration.prototype.transient = function (type, implementation) {\r\n        this.container.registerTransient(type, implementation);\r\n        return this;\r\n    };\r\n    FrameworkConfiguration.prototype.preTask = function (task) {\r\n        assertProcessed(this);\r\n        this.preTasks.push(task);\r\n        return this;\r\n    };\r\n    FrameworkConfiguration.prototype.postTask = function (task) {\r\n        assertProcessed(this);\r\n        this.postTasks.push(task);\r\n        return this;\r\n    };\r\n    FrameworkConfiguration.prototype.feature = function (plugin, config) {\r\n        if (config === void 0) { config = {}; }\r\n        switch (typeof plugin) {\r\n            case 'string':\r\n                var hasIndex = /\\/index$/i.test(plugin);\r\n                var moduleId = hasIndex || getExt(plugin) ? plugin : plugin + '/index';\r\n                var root = hasIndex ? plugin.slice(0, -6) : plugin;\r\n                this.info.push({ moduleId: moduleId, resourcesRelativeTo: [root, ''], config: config });\r\n                break;\r\n            case 'function':\r\n                this.info.push({ configure: plugin, config: config || {} });\r\n                break;\r\n            default:\r\n                throw new Error(invalidConfigMsg(plugin, 'feature'));\r\n        }\r\n        return this;\r\n    };\r\n    FrameworkConfiguration.prototype.globalResources = function (resources) {\r\n        var _this = this;\r\n        assertProcessed(this);\r\n        var toAdd = Array.isArray(resources) ? resources : arguments;\r\n        var resource;\r\n        var resourcesRelativeTo = this.resourcesRelativeTo || ['', ''];\r\n        for (var i = 0, ii = toAdd.length; i < ii; ++i) {\r\n            resource = toAdd[i];\r\n            switch (typeof resource) {\r\n                case 'string':\r\n                    var parent_1 = resourcesRelativeTo[0];\r\n                    var grandParent = resourcesRelativeTo[1];\r\n                    var name_1 = resource;\r\n                    if ((resource.startsWith('./') || resource.startsWith('../')) && parent_1 !== '') {\r\n                        name_1 = join(parent_1, resource);\r\n                    }\r\n                    this.resourcesToLoad[name_1] = { moduleId: name_1, relativeTo: grandParent };\r\n                    break;\r\n                case 'function':\r\n                    var meta = this.aurelia.resources.autoRegister(this.container, resource);\r\n                    if (meta instanceof HtmlBehaviorResource && meta.elementName !== null) {\r\n                        if (this.behaviorsToLoad.push(meta) === 1) {\r\n                            this.postTask(function () { return loadBehaviors(_this); });\r\n                        }\r\n                    }\r\n                    break;\r\n                default:\r\n                    throw new Error(invalidConfigMsg(resource, 'resource'));\r\n            }\r\n        }\r\n        return this;\r\n    };\r\n    FrameworkConfiguration.prototype.globalName = function (resourcePath, newName) {\r\n        assertProcessed(this);\r\n        this.resourcesToLoad[resourcePath] = { moduleId: newName, relativeTo: '' };\r\n        return this;\r\n    };\r\n    FrameworkConfiguration.prototype.plugin = function (plugin, pluginConfig) {\r\n        assertProcessed(this);\r\n        var info;\r\n        switch (typeof plugin) {\r\n            case 'string':\r\n                info = { moduleId: plugin, resourcesRelativeTo: [plugin, ''], config: pluginConfig || {} };\r\n                break;\r\n            case 'function':\r\n                info = { configure: plugin, config: pluginConfig || {} };\r\n                break;\r\n            default:\r\n                throw new Error(invalidConfigMsg(plugin, 'plugin'));\r\n        }\r\n        this.info.push(info);\r\n        return this;\r\n    };\r\n    FrameworkConfiguration.prototype._addNormalizedPlugin = function (name, config) {\r\n        var _this = this;\r\n        var plugin = { moduleId: name, resourcesRelativeTo: [name, ''], config: config || {} };\r\n        this.info.push(plugin);\r\n        this.preTask(function () {\r\n            var relativeTo = [name, _this.bootstrapperName];\r\n            plugin.moduleId = name;\r\n            plugin.resourcesRelativeTo = relativeTo;\r\n            return Promise.resolve();\r\n        });\r\n        return this;\r\n    };\r\n    FrameworkConfiguration.prototype.defaultBindingLanguage = function () {\r\n        return this._addNormalizedPlugin('aurelia-templating-binding');\r\n    };\r\n    FrameworkConfiguration.prototype.router = function () {\r\n        return this._addNormalizedPlugin('aurelia-templating-router');\r\n    };\r\n    FrameworkConfiguration.prototype.history = function () {\r\n        return this._addNormalizedPlugin('aurelia-history-browser');\r\n    };\r\n    FrameworkConfiguration.prototype.defaultResources = function () {\r\n        return this._addNormalizedPlugin('aurelia-templating-resources');\r\n    };\r\n    FrameworkConfiguration.prototype.eventAggregator = function () {\r\n        return this._addNormalizedPlugin('aurelia-event-aggregator');\r\n    };\r\n    FrameworkConfiguration.prototype.basicConfiguration = function () {\r\n        return this.defaultBindingLanguage().defaultResources().eventAggregator();\r\n    };\r\n    FrameworkConfiguration.prototype.standardConfiguration = function () {\r\n        return this.basicConfiguration().history().router();\r\n    };\r\n    FrameworkConfiguration.prototype.developmentLogging = function (level) {\r\n        var _this = this;\r\n        var logLevel = level ? TheLogManager.logLevel[level] : undefined;\r\n        if (logLevel === undefined) {\r\n            logLevel = TheLogManager.logLevel.debug;\r\n        }\r\n        this.preTask(function () {\r\n            return _this.aurelia.loader.normalize('aurelia-logging-console', _this.bootstrapperName).then(function (name) {\r\n                return _this.aurelia.loader.loadModule(name).then(function (m) {\r\n                    TheLogManager.addAppender(new m.ConsoleAppender());\r\n                    TheLogManager.setLevel(logLevel);\r\n                });\r\n            });\r\n        });\r\n        return this;\r\n    };\r\n    FrameworkConfiguration.prototype.apply = function () {\r\n        var _this = this;\r\n        if (this.processed) {\r\n            return Promise.resolve();\r\n        }\r\n        return runTasks(this, this.preTasks).then(function () {\r\n            var loader = _this.aurelia.loader;\r\n            var info = _this.info;\r\n            var current;\r\n            var next = function () {\r\n                current = info.shift();\r\n                if (current) {\r\n                    return loadPlugin(_this, loader, current).then(next);\r\n                }\r\n                _this.processed = true;\r\n                _this.configuredPlugins = null;\r\n                return Promise.resolve();\r\n            };\r\n            return next().then(function () { return runTasks(_this, _this.postTasks); });\r\n        });\r\n    };\r\n    return FrameworkConfiguration;\r\n}());\n\nfunction preventActionlessFormSubmit() {\r\n    DOM.addEventListener('submit', function (evt) {\r\n        var target = evt.target;\r\n        var action = target.action;\r\n        if (target.tagName.toLowerCase() === 'form' && !action) {\r\n            evt.preventDefault();\r\n        }\r\n    }, false);\r\n}\r\nvar Aurelia = (function () {\r\n    function Aurelia(loader, container, resources) {\r\n        this.loader = loader || new PLATFORM.Loader();\r\n        this.container = container || (new Container()).makeGlobal();\r\n        this.resources = resources || new ViewResources();\r\n        this.use = new FrameworkConfiguration(this);\r\n        this.logger = TheLogManager.getLogger('aurelia');\r\n        this.hostConfigured = false;\r\n        this.host = null;\r\n        this.use.instance(Aurelia, this);\r\n        this.use.instance(Loader, this.loader);\r\n        this.use.instance(ViewResources, this.resources);\r\n    }\r\n    Aurelia.prototype.start = function () {\r\n        var _this = this;\r\n        if (this._started) {\r\n            return this._started;\r\n        }\r\n        this.logger.info('Aurelia Starting');\r\n        return this._started = this.use.apply().then(function () {\r\n            preventActionlessFormSubmit();\r\n            if (!_this.container.hasResolver(BindingLanguage)) {\r\n                var message = 'You must configure Aurelia with a BindingLanguage implementation.';\r\n                _this.logger.error(message);\r\n                throw new Error(message);\r\n            }\r\n            _this.logger.info('Aurelia Started');\r\n            var evt = DOM.createCustomEvent('aurelia-started', { bubbles: true, cancelable: true });\r\n            DOM.dispatchEvent(evt);\r\n            return _this;\r\n        });\r\n    };\r\n    Aurelia.prototype.enhance = function (bindingContext, applicationHost) {\r\n        var _this = this;\r\n        if (bindingContext === void 0) { bindingContext = {}; }\r\n        if (applicationHost === void 0) { applicationHost = null; }\r\n        this._configureHost(applicationHost || DOM.querySelectorAll('body')[0]);\r\n        return new Promise(function (resolve) {\r\n            var engine = _this.container.get(TemplatingEngine);\r\n            _this.root = engine.enhance({ container: _this.container, element: _this.host, resources: _this.resources, bindingContext: bindingContext });\r\n            _this.root.attached();\r\n            _this._onAureliaComposed();\r\n            resolve(_this);\r\n        });\r\n    };\r\n    Aurelia.prototype.setRoot = function (root, applicationHost) {\r\n        var _this = this;\r\n        if (root === void 0) { root = null; }\r\n        if (applicationHost === void 0) { applicationHost = null; }\r\n        var instruction = {};\r\n        if (this.root && this.root.viewModel && this.root.viewModel.router) {\r\n            this.root.viewModel.router.deactivate();\r\n            this.root.viewModel.router.reset();\r\n        }\r\n        this._configureHost(applicationHost);\r\n        var engine = this.container.get(TemplatingEngine);\r\n        var transaction = this.container.get(CompositionTransaction);\r\n        delete transaction.initialComposition;\r\n        if (!root) {\r\n            if (this.configModuleId) {\r\n                root = relativeToFile('./app', this.configModuleId);\r\n            }\r\n            else {\r\n                root = 'app';\r\n            }\r\n        }\r\n        instruction.viewModel = root;\r\n        instruction.container = instruction.childContainer = this.container;\r\n        instruction.viewSlot = this.hostSlot;\r\n        instruction.host = this.host;\r\n        return engine.compose(instruction).then(function (r) {\r\n            _this.root = r;\r\n            instruction.viewSlot.attached();\r\n            _this._onAureliaComposed();\r\n            return _this;\r\n        });\r\n    };\r\n    Aurelia.prototype._configureHost = function (applicationHost) {\r\n        if (this.hostConfigured) {\r\n            return;\r\n        }\r\n        applicationHost = applicationHost || this.host;\r\n        if (!applicationHost || typeof applicationHost === 'string') {\r\n            this.host = DOM.getElementById(applicationHost || 'applicationHost');\r\n        }\r\n        else {\r\n            this.host = applicationHost;\r\n        }\r\n        if (!this.host) {\r\n            throw new Error('No applicationHost was specified.');\r\n        }\r\n        this.hostConfigured = true;\r\n        this.host.aurelia = this;\r\n        this.hostSlot = new ViewSlot(this.host, true);\r\n        this.hostSlot.transformChildNodesIntoView();\r\n        this.container.registerInstance(DOM.boundary, this.host);\r\n    };\r\n    Aurelia.prototype._onAureliaComposed = function () {\r\n        var evt = DOM.createCustomEvent('aurelia-composed', { bubbles: true, cancelable: true });\r\n        setTimeout(function () { return DOM.dispatchEvent(evt); }, 1);\r\n    };\r\n    return Aurelia;\r\n}());\n\nexport { Aurelia, FrameworkConfiguration };\n//# sourceMappingURL=aurelia-framework.js.map\n","var Configure = (function () {\n    function Configure() {\n        this._config = {\n            apiScript: 'https://maps.googleapis.com/maps/api/js',\n            apiKey: '',\n            client: '',\n            apiLibraries: '',\n            region: '',\n            language: '',\n            options: {},\n            markerCluster: {\n                enable: false,\n                src: 'https://cdn.rawgit.com/googlemaps/v3-utility-library/99a385c1/markerclusterer/src/markerclusterer.js',\n                imagePath: 'https://raw.githubusercontent.com/googlemaps/v3-utility-library/99a385c1/markerclusterer/images/m',\n                imageExtension: 'png',\n            }\n        };\n    }\n    Configure.prototype.options = function (obj) {\n        Object.assign(this._config, obj, {\n            markerCluster: Object.assign({}, this._config.markerCluster, obj.markerCluster)\n        });\n    };\n    Configure.prototype.get = function (key) {\n        return this._config[key];\n    };\n    Configure.prototype.set = function (key, val) {\n        this._config[key] = val;\n        return this._config[key];\n    };\n    return Configure;\n}());\nexport { Configure };\n//# sourceMappingURL=configure.js.map","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nimport { inject } from 'aurelia-dependency-injection';\nimport { Configure } from './configure';\nvar GoogleMapsAPI = (function () {\n    function GoogleMapsAPI(config) {\n        this._scriptPromise = null;\n        this.config = config;\n    }\n    GoogleMapsAPI.prototype.getMapsInstance = function () {\n        if (this._scriptPromise !== null) {\n            return this._scriptPromise;\n        }\n        if (window.google === undefined || window.google.maps === undefined) {\n            var script_1 = document.createElement('script');\n            var params = [\n                this.config.get('apiKey') ? \"key=\" + this.config.get('apiKey') + \"&\" : '',\n                this.config.get('client') ? \"client=\" + this.config.get('client') : '',\n                this.config.get('apiLibraries') ? \"libraries=\" + this.config.get('apiLibraries') : '',\n                this.config.get('language') ? \"language=\" + this.config.get('language') : '',\n                this.config.get('region') ? \"region=\" + this.config.get('region') : '',\n                'callback=aureliaGoogleMapsCallback',\n            ];\n            script_1.type = 'text/javascript';\n            script_1.async = true;\n            script_1.defer = true;\n            script_1.src = this.config.get('apiScript') + \"?\" + params.join('&');\n            document.body.appendChild(script_1);\n            this._scriptPromise = new Promise(function (resolve, reject) {\n                window.aureliaGoogleMapsCallback = function () {\n                    resolve();\n                };\n                script_1.onerror = function (error) {\n                    reject(error);\n                };\n            });\n            return this._scriptPromise;\n        }\n        if (window.google && window.google.maps) {\n            this._scriptPromise = new Promise(function (resolve) { resolve(); });\n            return this._scriptPromise;\n        }\n        return false;\n    };\n    GoogleMapsAPI = __decorate([\n        inject(Configure),\n        __metadata(\"design:paramtypes\", [Object])\n    ], GoogleMapsAPI);\n    return GoogleMapsAPI;\n}());\nexport { GoogleMapsAPI };\n//# sourceMappingURL=google-maps-api.js.map","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nimport { inject } from 'aurelia-dependency-injection';\nimport { Configure } from './configure';\nvar MarkerClustering = (function () {\n    function MarkerClustering(config) {\n        this.config = config;\n    }\n    MarkerClustering.prototype.isEnabled = function () {\n        return this.config.get('markerCluster') && this.config.get('markerCluster').enable;\n    };\n    MarkerClustering.prototype.clearMarkers = function () {\n        if (this.markerClusterer) {\n            this.markerClusterer.clearMarkers();\n        }\n    };\n    MarkerClustering.prototype.loadScript = function () {\n        if (!this.isEnabled()) {\n            return;\n        }\n        var script = document.createElement('script');\n        script.type = 'text/javascript';\n        script.src = this.config.get('markerCluster').src;\n        document.body.appendChild(script);\n    };\n    MarkerClustering.prototype.renderClusters = function (map, markers) {\n        if (!this.isEnabled()) {\n            return;\n        }\n        this.markerClusterer = new window.MarkerClusterer(map, markers, this.config.get('markerCluster'));\n    };\n    MarkerClustering = __decorate([\n        inject(Configure),\n        __metadata(\"design:paramtypes\", [Object])\n    ], MarkerClustering);\n    return MarkerClustering;\n}());\nexport { MarkerClustering };\n//# sourceMappingURL=marker-clustering.js.map","var Events = (function () {\n    function Events() {\n    }\n    Events.BOUNDSCHANGED = \"bounds-change\";\n    Events.MAPCLICK = 'map-click';\n    Events.MAPOVERLAYCOMPLETE = 'map-overlay-complete';\n    Events.MARKERRENDERED = 'marker-render';\n    Events.MARKERCLICK = 'marker-click';\n    Events.MARKERMOUSEOVER = 'marker-mouse-over';\n    Events.MARKERMOUSEOUT = 'marker-mouse-out';\n    Events.POLYGONCLICK = 'polygon-click';\n    Events.POLYGONRENDERED = 'polygon-render';\n    Events.INFOWINDOWSHOW = 'info-window-show';\n    Events.INFOWINDOWCLOSE = 'info-window-close';\n    Events.START_MARKER_HIGHLIGHT = 'start-marker-highlight';\n    Events.STOP_MARKER_HIGHLIGHT = 'stop-marker-highlight';\n    Events.PAN_TO_MARKER = 'pan-to-marker';\n    Events.CLEAR_MARKERS = 'clear-markers';\n    return Events;\n}());\nexport { Events };\n//# sourceMappingURL=events.js.map","var __assign = (this && this.__assign) || function () {\n    __assign = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign.apply(this, arguments);\n};\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nimport { inject } from 'aurelia-dependency-injection';\nimport { bindable, customElement, noView } from 'aurelia-templating';\nimport { TaskQueue } from 'aurelia-task-queue';\nimport { BindingEngine } from 'aurelia-binding';\nimport { getLogger } from 'aurelia-logging';\nimport { Configure } from './configure';\nimport { GoogleMapsAPI } from './google-maps-api';\nimport { MarkerClustering } from './marker-clustering';\nimport { Events } from './events';\nvar logger = getLogger('aurelia-google-maps');\nvar GoogleMaps = (function () {\n    function GoogleMaps(element, taskQueue, config, bindingEngine, googleMapsApi, markerClustering) {\n        var _this_1 = this;\n        this._currentInfoWindow = null;\n        this.drawnMarkers = [];\n        this.drawnCircles = [];\n        this.longitude = 0;\n        this.latitude = 0;\n        this.circleRadius = 0;\n        this.zoom = 8;\n        this.disableDefaultUi = false;\n        this.markers = [];\n        this.autoUpdateBounds = false;\n        this.autoInfoWindow = true;\n        this.mapType = 'ROADMAP';\n        this.options = {};\n        this.drawEnabled = false;\n        this.drawMode = 'MARKER';\n        this.polygons = [];\n        this.drawSingleElement = false;\n        this.map = null;\n        this._renderedMarkers = [];\n        this._markersSubscription = null;\n        this._scriptPromise = null;\n        this._mapPromise = null;\n        this._mapResolve = null;\n        this.drawingManager = null;\n        this._renderedPolygons = [];\n        this._polygonsSubscription = null;\n        this.element = element;\n        this.taskQueue = taskQueue;\n        this.config = config;\n        this.bindingEngine = bindingEngine;\n        this.googleMapsApi = googleMapsApi;\n        this.markerClustering = markerClustering;\n        if (!config.get('apiScript')) {\n            logger.error('No API script is defined.');\n        }\n        if ((!config.get('apiKey') && config.get('apiKey') !== false) && (!config.get('client') && config.get('client') !== false)) {\n            logger.error('No API key or client ID has been specified.');\n        }\n        this.markerClustering.loadScript();\n        this._scriptPromise = this.googleMapsApi.getMapsInstance();\n        var self = this;\n        this._mapPromise = this._scriptPromise.then(function () {\n            return new Promise(function (resolve) {\n                self._mapResolve = resolve;\n            });\n        });\n        this.element.addEventListener(Events.START_MARKER_HIGHLIGHT, function (data) {\n            var marker = self._renderedMarkers[data.detail.index];\n            marker.setIcon(marker.custom.altIcon);\n            marker.setZIndex(window.google.maps.Marker.MAX_ZINDEX + 1);\n        });\n        this.element.addEventListener(Events.STOP_MARKER_HIGHLIGHT, function (data) {\n            var marker = self._renderedMarkers[data.detail.index];\n            marker.setIcon(marker.custom.defaultIcon);\n        });\n        this.element.addEventListener(Events.PAN_TO_MARKER, function (data) {\n            self.map.panTo(self._renderedMarkers[data.detail.index].position);\n            self.map.setZoom(17);\n        });\n        this.element.addEventListener(Events.CLEAR_MARKERS, function () {\n            _this_1.clearMarkers();\n        });\n    }\n    GoogleMaps.prototype.clearMarkers = function () {\n        if (!this._renderedMarkers) {\n            return;\n        }\n        this._renderedMarkers.forEach(function (marker) {\n            marker.setMap(null);\n        });\n        this._renderedMarkers = [];\n        if (this.markerClustering) {\n            this.markerClustering.clearMarkers();\n        }\n    };\n    GoogleMaps.prototype.attached = function () {\n        var _this_1 = this;\n        this.element.addEventListener('dragstart', function (evt) {\n            evt.preventDefault();\n        });\n        this.element.addEventListener('zoom_to_bounds', function () {\n            _this_1.zoomToMarkerBounds(true);\n        });\n        this._scriptPromise.then(function () {\n            var latLng = new window.google.maps.LatLng(parseFloat(_this_1.latitude), parseFloat(_this_1.longitude));\n            var mapTypeId = _this_1.getMapTypeId();\n            var options = Object.assign({}, _this_1.options, _this_1.config.get('options'), {\n                center: latLng,\n                zoom: parseInt(_this_1.zoom, 10),\n                disableDefaultUI: _this_1.disableDefaultUi,\n                mapTypeId: mapTypeId\n            });\n            _this_1.map = new window.google.maps.Map(_this_1.element, options);\n            if (_this_1.mapLoaded) {\n                _this_1.mapLoaded(_this_1.map);\n            }\n            _this_1._mapResolve();\n            _this_1.map.addListener('click', function (e) {\n                dispatchEvent(Events.MAPCLICK, e, _this_1.element);\n                if (!_this_1.autoInfoWindow)\n                    return;\n                if (_this_1._currentInfoWindow) {\n                    _this_1._currentInfoWindow.close();\n                    dispatchEvent(Events.INFOWINDOWCLOSE, { infoWindow: _this_1._currentInfoWindow }, _this_1.element);\n                }\n            });\n            _this_1.map.addListener('dragend', function () {\n                _this_1.sendBoundsEvent();\n            });\n            _this_1.map.addListener('zoom_changed', function () {\n                _this_1.sendBoundsEvent();\n            });\n        });\n    };\n    GoogleMaps.prototype.sendBoundsEvent = function () {\n        var bounds = this.map.getBounds();\n        if (!bounds)\n            return;\n        dispatchEvent(Events.BOUNDSCHANGED, { bounds: bounds }, this.element);\n    };\n    GoogleMaps.prototype.renderMarker = function (marker) {\n        var _this_1 = this;\n        return this._mapPromise.then(function () {\n            var markerLatLng = new window.google.maps.LatLng(parseFloat(marker.latitude), parseFloat(marker.longitude));\n            _this_1.createMarker({\n                map: _this_1.map,\n                position: markerLatLng\n            }).then(function (createdMarker) {\n                createdMarker.addListener('click', function () {\n                    dispatchEvent(Events.MARKERCLICK, { marker: marker, createdMarker: createdMarker }, _this_1.element);\n                    if (!_this_1.autoInfoWindow)\n                        return;\n                    if (_this_1._currentInfoWindow) {\n                        _this_1._currentInfoWindow.close();\n                    }\n                    if (!createdMarker.infoWindow) {\n                        _this_1._currentInfoWindow = null;\n                        return;\n                    }\n                    _this_1._currentInfoWindow = createdMarker.infoWindow;\n                    createdMarker.infoWindow.open(_this_1.map, createdMarker);\n                });\n                createdMarker.addListener('mouseover', function () {\n                    dispatchEvent(Events.MARKERMOUSEOVER, { marker: createdMarker }, _this_1.element);\n                    createdMarker.setZIndex(window.google.maps.Marker.MAX_ZINDEX + 1);\n                });\n                createdMarker.addListener('mouseout', function () {\n                    dispatchEvent(Events.MARKERMOUSEOUT, { marker: createdMarker }, _this_1.element);\n                });\n                createdMarker.addListener('dblclick', function () {\n                    _this_1.map.setZoom(15);\n                    _this_1.map.panTo(createdMarker.position);\n                });\n                if (marker.icon) {\n                    createdMarker.setIcon(marker.icon);\n                }\n                if (marker.label) {\n                    createdMarker.setLabel(marker.label);\n                }\n                if (marker.title) {\n                    createdMarker.setTitle(marker.title);\n                }\n                if (marker.draggable) {\n                    createdMarker.setDraggable(marker.draggable);\n                }\n                if (marker.infoWindow) {\n                    createdMarker.infoWindow = new window.google.maps.InfoWindow({\n                        content: marker.infoWindow.content,\n                        pixelOffset: marker.infoWindow.pixelOffset,\n                        position: marker.infoWindow.position,\n                        maxWidth: marker.infoWindow.maxWidth,\n                        parentMarker: __assign({}, marker)\n                    });\n                    createdMarker.infoWindow.addListener('domready', function () {\n                        dispatchEvent(Events.INFOWINDOWSHOW, { infoWindow: createdMarker.infoWindow }, _this_1.element);\n                    });\n                    createdMarker.infoWindow.addListener('closeclick', function () {\n                        dispatchEvent(Events.INFOWINDOWCLOSE, { infoWindow: createdMarker.infoWindow }, _this_1.element);\n                    });\n                }\n                if (marker.custom) {\n                    createdMarker.custom = marker.custom;\n                }\n                _this_1._renderedMarkers.push(createdMarker);\n                dispatchEvent(Events.MARKERRENDERED, { createdMarker: createdMarker, marker: marker }, _this_1.element);\n            });\n        });\n    };\n    GoogleMaps.prototype.setOptions = function (options) {\n        if (!this.map) {\n            return;\n        }\n        this.map.setOptions(options);\n    };\n    GoogleMaps.prototype.createMarker = function (options) {\n        return this._scriptPromise.then(function () {\n            return Promise.resolve(new window.google.maps.Marker(options));\n        });\n    };\n    GoogleMaps.prototype.getCenter = function () {\n        var _this_1 = this;\n        this._mapPromise.then(function () {\n            return Promise.resolve(_this_1.map.getCenter());\n        });\n    };\n    GoogleMaps.prototype.setCenter = function (latLong) {\n        var _this_1 = this;\n        this._mapPromise.then(function () {\n            _this_1.map.setCenter(latLong);\n            _this_1.sendBoundsEvent();\n        });\n    };\n    GoogleMaps.prototype.updateCenter = function () {\n        var _this_1 = this;\n        this._mapPromise.then(function () {\n            var lat = parseFloat(_this_1.latitude);\n            var lng = parseFloat(_this_1.longitude);\n            if (lat && lng) {\n                var latLng = new window.google.maps.LatLng(lat, lng);\n                _this_1.setCenter(latLng);\n            }\n        });\n    };\n    GoogleMaps.prototype.latitudeChanged = function () {\n        var _this_1 = this;\n        this._mapPromise.then(function () {\n            _this_1.taskQueue.queueMicroTask(function () {\n                _this_1.updateCenter();\n            });\n        });\n    };\n    GoogleMaps.prototype.longitudeChanged = function () {\n        var _this_1 = this;\n        this._mapPromise.then(function () {\n            _this_1.taskQueue.queueMicroTask(function () {\n                _this_1.updateCenter();\n            });\n        });\n    };\n    GoogleMaps.prototype.zoomChanged = function (newValue) {\n        var _this_1 = this;\n        this._mapPromise.then(function () {\n            _this_1.taskQueue.queueMicroTask(function () {\n                var zoomValue = parseInt(newValue, 10);\n                _this_1.map.setZoom(zoomValue);\n            });\n        });\n    };\n    GoogleMaps.prototype.circleRadiusChanged = function () {\n        if (this.drawSingleElement) {\n            this.clearDrawnCircles();\n        }\n    };\n    GoogleMaps.prototype.markersChanged = function (newValue) {\n        var _this_1 = this;\n        if (this._markersSubscription !== null) {\n            this._markersSubscription.dispose();\n            for (var _i = 0, _a = this._renderedMarkers; _i < _a.length; _i++) {\n                var marker = _a[_i];\n                marker.setMap(null);\n            }\n            this._renderedMarkers = [];\n        }\n        this._markersSubscription = this.bindingEngine\n            .collectionObserver(this.markers)\n            .subscribe(function (splices) { _this_1.markerCollectionChange(splices); });\n        if (!newValue.length)\n            return;\n        var markerPromises = [];\n        this._mapPromise.then(function () {\n            markerPromises = newValue.map(function (marker) {\n                return _this_1.renderMarker(marker);\n            });\n            return markerPromises;\n        }).then(function (p) {\n            Promise.all(p).then(function () {\n                _this_1.taskQueue.queueTask(function () {\n                    _this_1.markerClustering.renderClusters(_this_1.map, _this_1._renderedMarkers);\n                    _this_1.zoomToMarkerBounds();\n                });\n                _this_1.taskQueue.queueTask(function () {\n                    if (_this_1.drawSingleElement) {\n                        _this_1.clearDrawnMarkers();\n                        _this_1.clearDrawnCircles();\n                        if (_this_1.circleRadius) {\n                            for (var _i = 0, newValue_1 = newValue; _i < newValue_1.length; _i++) {\n                                var newMarker = newValue_1[_i];\n                                var circle = new window.google.maps.Circle({\n                                    map: _this_1.map,\n                                    center: { lat: parseFloat(newMarker.latitude.toString()), lng: parseFloat(newMarker.longitude.toString()) },\n                                    radius: parseFloat(_this_1.circleRadius.toString())\n                                });\n                                _this_1.drawnCircles.push(circle);\n                            }\n                        }\n                    }\n                });\n            });\n        });\n    };\n    GoogleMaps.prototype.markerCollectionChange = function (splices) {\n        var _this_1 = this;\n        if (!splices.length) {\n            return;\n        }\n        var renderPromises = [];\n        for (var _i = 0, splices_1 = splices; _i < splices_1.length; _i++) {\n            var splice = splices_1[_i];\n            if (splice.removed.length) {\n                for (var _a = 0, _b = splice.removed; _a < _b.length; _a++) {\n                    var removedObj = _b[_a];\n                    for (var markerIndex in this._renderedMarkers) {\n                        if (!this._renderedMarkers.hasOwnProperty(markerIndex)) {\n                            continue;\n                        }\n                        var renderedMarker = this._renderedMarkers[markerIndex];\n                        if (renderedMarker.position.lat().toFixed(12) !== removedObj.latitude.toFixed(12) ||\n                            renderedMarker.position.lng().toFixed(12) !== removedObj.longitude.toFixed(12)) {\n                            continue;\n                        }\n                        renderedMarker.setMap(null);\n                        this._renderedMarkers.splice(markerIndex, 1);\n                        break;\n                    }\n                }\n            }\n            if (splice.addedCount) {\n                var addedMarkers = this.markers.slice(splice.index, splice.index + splice.addedCount);\n                for (var _c = 0, addedMarkers_1 = addedMarkers; _c < addedMarkers_1.length; _c++) {\n                    var addedMarker = addedMarkers_1[_c];\n                    renderPromises.push(this.renderMarker(addedMarker));\n                }\n            }\n        }\n        Promise.all(renderPromises).then(function () {\n            _this_1.markerClustering.renderClusters(_this_1.map, _this_1._renderedMarkers);\n            _this_1.taskQueue.queueTask(function () {\n                _this_1.zoomToMarkerBounds();\n            });\n        });\n    };\n    GoogleMaps.prototype.zoomToMarkerBounds = function (force) {\n        var _this_1 = this;\n        if (force === void 0) { force = false; }\n        if (typeof force === 'undefined') {\n            force = false;\n        }\n        if (!force && (!this._renderedMarkers || !this.autoUpdateBounds)) {\n            return;\n        }\n        this._mapPromise.then(function () {\n            var bounds = new window.google.maps.LatLngBounds();\n            for (var _i = 0, _a = _this_1._renderedMarkers; _i < _a.length; _i++) {\n                var marker = _a[_i];\n                var lat = parseFloat(marker.position.lat());\n                var lng = parseFloat(marker.position.lng());\n                if (isNaN(lat) || isNaN(lng)) {\n                    console.warn(\"Marker returned NaN for lat/lng\", { marker: marker, lat: lat, lng: lng });\n                    return;\n                }\n                var markerLatLng = new window.google.maps.LatLng(parseFloat(marker.position.lat()), parseFloat(marker.position.lng()));\n                bounds.extend(markerLatLng);\n            }\n            for (var _b = 0, _c = _this_1._renderedPolygons; _b < _c.length; _b++) {\n                var polygon = _c[_b];\n                polygon.getPath().forEach(function (element) {\n                    bounds.extend(element);\n                });\n            }\n            _this_1.map.fitBounds(bounds);\n        });\n    };\n    GoogleMaps.prototype.getMapTypeId = function () {\n        if (this.mapType.toUpperCase() === 'HYBRID') {\n            return window.google.maps.MapTypeId.HYBRID;\n        }\n        else if (this.mapType.toUpperCase() === 'SATELLITE') {\n            return window.google.maps.MapTypeId.SATELLITE;\n        }\n        else if (this.mapType.toUpperCase() === 'TERRAIN') {\n            return window.google.maps.MapTypeId.TERRAIN;\n        }\n        return window.google.maps.MapTypeId.ROADMAP;\n    };\n    GoogleMaps.prototype.initDrawingManager = function (options) {\n        var _this_1 = this;\n        if (options === void 0) { options = {}; }\n        return this._mapPromise.then(function () {\n            if (_this_1.drawingManager)\n                return Promise.resolve();\n            var config = Object.assign({}, {\n                drawingMode: _this_1.getOverlayType(_this_1.drawMode),\n                drawingControl: _this_1.drawingControl,\n                drawingControlOptions: _this_1.drawingControlOptions\n            }, options);\n            _this_1.drawingManager = new window.google.maps.drawing.DrawingManager(config);\n            _this_1.drawingManager.addListener('overlaycomplete', function (evt) {\n                if (evt.type.toUpperCase() == 'POLYGON' || evt.type.toUpperCase() == 'POLYLINE') {\n                    Object.assign(evt, {\n                        path: evt.overlay.getPath().getArray().map(function (x) { return { latitude: x.lat(), longitude: x.lng() }; }),\n                        encode: _this_1.encodePath(evt.overlay.getPath())\n                    });\n                }\n                dispatchEvent(Events.MAPOVERLAYCOMPLETE, evt, _this_1.element);\n            });\n            if (_this_1.drawSingleElement) {\n                var _this = _this_1;\n                _this_1.drawingManager.addListener('markercomplete', function (marker) {\n                    _this.drawnMarkers.push(marker);\n                });\n                _this_1.drawingManager.addListener('circlecomplete', function (circle) {\n                    _this.drawnCircles.push(circle);\n                });\n            }\n            return Promise.resolve();\n        });\n    };\n    GoogleMaps.prototype.destroyDrawingManager = function () {\n        if (!this.drawingManager)\n            return;\n        this.drawingManager.setMap(null);\n        this.drawingManager = null;\n    };\n    GoogleMaps.prototype.getOverlayType = function (type) {\n        if (type === void 0) { type = ''; }\n        switch (type.toUpperCase()) {\n            case 'POLYGON':\n                return window.google.maps.drawing.OverlayType.POLYGON;\n            case 'POLYLINE':\n                return window.google.maps.drawing.OverlayType.POLYLINE;\n            case 'RECTANGLE':\n                return window.google.maps.drawing.OverlayType.RECTANGLE;\n            case 'CIRCLE':\n                return window.google.maps.drawing.OverlayType.CIRCLE;\n            case 'MARKER':\n                return window.google.maps.drawing.OverlayType.MARKER;\n            default:\n                return null;\n        }\n    };\n    GoogleMaps.prototype.drawEnabledChanged = function (newval, oldval) {\n        var _this_1 = this;\n        this.initDrawingManager()\n            .then(function () {\n            if (newval && !oldval) {\n                _this_1.drawingManager.setMap(_this_1.map);\n            }\n            else if (oldval && !newval) {\n                _this_1.destroyDrawingManager();\n            }\n        });\n    };\n    GoogleMaps.prototype.drawModeChanged = function (newval) {\n        var _this_1 = this;\n        if (newval === void 0) { newval = ''; }\n        this.initDrawingManager()\n            .then(function () {\n            _this_1.drawingManager.setOptions({\n                drawingMode: _this_1.getOverlayType(newval)\n            });\n        });\n    };\n    GoogleMaps.prototype.encodePath = function (path) {\n        if (path === void 0) { path = []; }\n        return window.google.maps.geometry.encoding.encodePath(path);\n    };\n    GoogleMaps.prototype.decodePath = function (polyline) {\n        return window.google.maps.geometry.encoding.decodePath(polyline);\n    };\n    GoogleMaps.prototype.renderPolygon = function (polygonObject) {\n        var _this_1 = this;\n        if (polygonObject === void 0) { polygonObject = []; }\n        var paths = polygonObject.paths;\n        if (!paths)\n            return;\n        if (Array.isArray(paths)) {\n            paths = paths.map(function (x) {\n                return new window.google.maps.LatLng(x.latitude, x.longitude);\n            });\n        }\n        var polygon = new window.google.maps.Polygon(Object.assign({}, polygonObject, { paths: paths }));\n        polygon.addListener('click', function () {\n            dispatchEvent(Events.POLYGONCLICK, { polygon: polygon }, _this_1.element);\n        });\n        polygon.setMap(this.map);\n        if (polygonObject.infoWindow) {\n            polygon.infoWindow = new window.google.maps.InfoWindow({\n                content: polygonObject.infoWindow.content,\n                pixelOffset: polygonObject.infoWindow.pixelOffset,\n                position: polygonObject.infoWindow.position,\n                maxWidth: polygonObject.infoWindow.maxWidth,\n                parentPolygon: __assign({}, polygonObject)\n            });\n        }\n        dispatchEvent(Events.POLYGONRENDERED, { polygon: polygon, polygonObject: polygonObject }, this.element);\n        this._renderedPolygons.push(polygon);\n    };\n    GoogleMaps.prototype.polygonsChanged = function (newValue) {\n        var _this_1 = this;\n        if (this._polygonsSubscription !== null) {\n            this._polygonsSubscription.dispose();\n            for (var _i = 0, _a = this._renderedPolygons; _i < _a.length; _i++) {\n                var polygon = _a[_i];\n                polygon.setMap(null);\n            }\n            this._renderedPolygons = [];\n        }\n        this._polygonsSubscription = this.bindingEngine\n            .collectionObserver(this.polygons)\n            .subscribe(function (splices) { _this_1.polygonCollectionChange(splices); });\n        if (!newValue.length)\n            return;\n        this._mapPromise.then(function () {\n            Promise.all(newValue.map(function (polygon) {\n                if (typeof polygon === 'string') {\n                    return _this_1.decodePath(polygon);\n                }\n                return polygon;\n            })).then(function (polygons) {\n                return Promise.all(polygons.map(_this_1.renderPolygon.bind(_this_1)));\n            }).then(function () {\n                _this_1.taskQueue.queueTask(function () {\n                    _this_1.zoomToMarkerBounds();\n                });\n            });\n        });\n    };\n    GoogleMaps.prototype.polygonCollectionChange = function (splices) {\n        var _this_1 = this;\n        if (!splices.length) {\n            return;\n        }\n        this._mapPromise.then(function () {\n            for (var _i = 0, splices_2 = splices; _i < splices_2.length; _i++) {\n                var splice = splices_2[_i];\n                if (splice.removed.length) {\n                    for (var _a = 0, _b = splice.removed; _a < _b.length; _a++) {\n                        var removedObj = _b[_a];\n                        for (var polygonIndex in _this_1._renderedPolygons) {\n                            if (!_this_1._renderedPolygons.hasOwnProperty(polygonIndex)) {\n                                continue;\n                            }\n                            var renderedPolygon = _this_1._renderedPolygons[polygonIndex];\n                            var strRendered = void 0, strRemoved = void 0;\n                            strRendered = _this_1.encodePath(renderedPolygon.getPath());\n                            var removedPaths = removedObj.paths.map(function (x) {\n                                return new window.google.maps.LatLng(x.latitude, x.longitude);\n                            });\n                            strRemoved = _this_1.encodePath(removedPaths);\n                            if (strRendered !== strRemoved) {\n                                continue;\n                            }\n                            renderedPolygon.setMap(null);\n                            _this_1._renderedPolygons.splice(polygonIndex, 1);\n                            break;\n                        }\n                    }\n                }\n                if (splice.addedCount) {\n                    var addedPolygons = _this_1.polygons.slice(splice.index, splice.index + splice.addedCount);\n                    for (var _c = 0, addedPolygons_1 = addedPolygons; _c < addedPolygons_1.length; _c++) {\n                        var addedPolygon = addedPolygons_1[_c];\n                        _this_1.renderPolygon(addedPolygon);\n                    }\n                }\n            }\n        }).then(function () {\n            _this_1.taskQueue.queueTask(function () {\n                _this_1.zoomToMarkerBounds();\n            });\n        });\n    };\n    GoogleMaps.prototype.clearDrawnCircles = function () {\n        for (var _i = 0, _a = this.drawnCircles; _i < _a.length; _i++) {\n            var circle = _a[_i];\n            circle.setMap(null);\n        }\n        this.drawnCircles = [];\n    };\n    GoogleMaps.prototype.clearDrawnMarkers = function () {\n        for (var _i = 0, _a = this.drawnMarkers; _i < _a.length; _i++) {\n            var marker = _a[_i];\n            marker.setMap(null);\n        }\n        this.drawnMarkers = [];\n    };\n    __decorate([\n        bindable,\n        __metadata(\"design:type\", Number)\n    ], GoogleMaps.prototype, \"longitude\", void 0);\n    __decorate([\n        bindable,\n        __metadata(\"design:type\", Number)\n    ], GoogleMaps.prototype, \"latitude\", void 0);\n    __decorate([\n        bindable,\n        __metadata(\"design:type\", Number)\n    ], GoogleMaps.prototype, \"circleRadius\", void 0);\n    __decorate([\n        bindable,\n        __metadata(\"design:type\", Number)\n    ], GoogleMaps.prototype, \"zoom\", void 0);\n    __decorate([\n        bindable,\n        __metadata(\"design:type\", Boolean)\n    ], GoogleMaps.prototype, \"disableDefaultUi\", void 0);\n    __decorate([\n        bindable,\n        __metadata(\"design:type\", Object)\n    ], GoogleMaps.prototype, \"markers\", void 0);\n    __decorate([\n        bindable,\n        __metadata(\"design:type\", Boolean)\n    ], GoogleMaps.prototype, \"autoUpdateBounds\", void 0);\n    __decorate([\n        bindable,\n        __metadata(\"design:type\", Boolean)\n    ], GoogleMaps.prototype, \"autoInfoWindow\", void 0);\n    __decorate([\n        bindable,\n        __metadata(\"design:type\", Object)\n    ], GoogleMaps.prototype, \"mapType\", void 0);\n    __decorate([\n        bindable,\n        __metadata(\"design:type\", Object)\n    ], GoogleMaps.prototype, \"options\", void 0);\n    __decorate([\n        bindable,\n        __metadata(\"design:type\", Object)\n    ], GoogleMaps.prototype, \"mapLoaded\", void 0);\n    __decorate([\n        bindable,\n        __metadata(\"design:type\", Boolean)\n    ], GoogleMaps.prototype, \"drawEnabled\", void 0);\n    __decorate([\n        bindable,\n        __metadata(\"design:type\", Object)\n    ], GoogleMaps.prototype, \"drawMode\", void 0);\n    __decorate([\n        bindable,\n        __metadata(\"design:type\", Object)\n    ], GoogleMaps.prototype, \"polygons\", void 0);\n    __decorate([\n        bindable,\n        __metadata(\"design:type\", Boolean)\n    ], GoogleMaps.prototype, \"drawingControl\", void 0);\n    __decorate([\n        bindable,\n        __metadata(\"design:type\", Object)\n    ], GoogleMaps.prototype, \"drawingControlOptions\", void 0);\n    __decorate([\n        bindable,\n        __metadata(\"design:type\", Boolean)\n    ], GoogleMaps.prototype, \"drawSingleElement\", void 0);\n    GoogleMaps = __decorate([\n        noView(),\n        customElement('google-map'),\n        inject(Element, TaskQueue, Configure, BindingEngine, GoogleMapsAPI, MarkerClustering),\n        __metadata(\"design:paramtypes\", [Element,\n            TaskQueue,\n            Configure,\n            BindingEngine,\n            GoogleMapsAPI,\n            MarkerClustering])\n    ], GoogleMaps);\n    return GoogleMaps;\n}());\nexport { GoogleMaps };\nfunction dispatchEvent(name, detail, target, bubbles) {\n    if (bubbles === void 0) { bubbles = true; }\n    var changeEvent;\n    if (window.CustomEvent) {\n        changeEvent = new CustomEvent(name, { detail: detail, bubbles: bubbles });\n    }\n    else {\n        changeEvent = document.createEvent('CustomEvent');\n        changeEvent.initCustomEvent(name, bubbles, true, { data: detail });\n    }\n    target.dispatchEvent(changeEvent);\n}\n//# sourceMappingURL=google-maps.js.map","import { PLATFORM, DOM } from 'aurelia-pal';\nimport { Configure } from './configure';\nimport { GoogleMaps } from './google-maps';\nimport { GoogleMapsAPI } from './google-maps-api';\nexport function configure(aurelia, configCallback) {\n    var instance = aurelia.container.get(Configure);\n    DOM.injectStyles(\"google-map { display: block; height: 350px; }\");\n    if (configCallback !== undefined && typeof (configCallback) === 'function') {\n        configCallback(instance);\n    }\n    aurelia.globalResources([\n        PLATFORM.moduleName('./google-maps')\n    ]);\n}\nexport { Configure };\nexport { GoogleMaps };\nexport { GoogleMapsAPI };\n//# sourceMappingURL=index.js.map","import { History } from 'aurelia-history';\nimport { DOM, PLATFORM } from 'aurelia-pal';\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n    extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n    return extendStatics(d, b);\r\n};\r\n\r\nfunction __extends(d, b) {\r\n    extendStatics(d, b);\r\n    function __() { this.constructor = d; }\r\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\n\nvar LinkHandler = (function () {\r\n    function LinkHandler() {\r\n    }\r\n    LinkHandler.prototype.activate = function (history) { };\r\n    LinkHandler.prototype.deactivate = function () { };\r\n    return LinkHandler;\r\n}());\r\nvar DefaultLinkHandler = (function (_super) {\r\n    __extends(DefaultLinkHandler, _super);\r\n    function DefaultLinkHandler() {\r\n        var _this = _super.call(this) || this;\r\n        _this.handler = function (e) {\r\n            var _a = DefaultLinkHandler.getEventInfo(e), shouldHandleEvent = _a.shouldHandleEvent, href = _a.href;\r\n            if (shouldHandleEvent) {\r\n                e.preventDefault();\r\n                _this.history.navigate(href);\r\n            }\r\n        };\r\n        return _this;\r\n    }\r\n    DefaultLinkHandler.prototype.activate = function (history) {\r\n        if (history._hasPushState) {\r\n            this.history = history;\r\n            DOM.addEventListener('click', this.handler, true);\r\n        }\r\n    };\r\n    DefaultLinkHandler.prototype.deactivate = function () {\r\n        DOM.removeEventListener('click', this.handler, true);\r\n    };\r\n    DefaultLinkHandler.getEventInfo = function (event) {\r\n        var $event = event;\r\n        var info = {\r\n            shouldHandleEvent: false,\r\n            href: null,\r\n            anchor: null\r\n        };\r\n        var target = DefaultLinkHandler.findClosestAnchor($event.target);\r\n        if (!target || !DefaultLinkHandler.targetIsThisWindow(target)) {\r\n            return info;\r\n        }\r\n        if (hasAttribute(target, 'download')\r\n            || hasAttribute(target, 'router-ignore')\r\n            || hasAttribute(target, 'data-router-ignore')) {\r\n            return info;\r\n        }\r\n        if ($event.altKey || $event.ctrlKey || $event.metaKey || $event.shiftKey) {\r\n            return info;\r\n        }\r\n        var href = target.getAttribute('href');\r\n        info.anchor = target;\r\n        info.href = href;\r\n        var leftButtonClicked = $event.which === 1;\r\n        var isRelative = href && !(href.charAt(0) === '#' || (/^[a-z]+:/i).test(href));\r\n        info.shouldHandleEvent = leftButtonClicked && isRelative;\r\n        return info;\r\n    };\r\n    DefaultLinkHandler.findClosestAnchor = function (el) {\r\n        while (el) {\r\n            if (el.tagName === 'A') {\r\n                return el;\r\n            }\r\n            el = el.parentNode;\r\n        }\r\n    };\r\n    DefaultLinkHandler.targetIsThisWindow = function (target) {\r\n        var targetWindow = target.getAttribute('target');\r\n        var win = PLATFORM.global;\r\n        return !targetWindow ||\r\n            targetWindow === win.name ||\r\n            targetWindow === '_self';\r\n    };\r\n    return DefaultLinkHandler;\r\n}(LinkHandler));\r\nvar hasAttribute = function (el, attr) { return el.hasAttribute(attr); };\n\nvar BrowserHistory = (function (_super) {\r\n    __extends(BrowserHistory, _super);\r\n    function BrowserHistory(linkHandler) {\r\n        var _this = _super.call(this) || this;\r\n        _this._isActive = false;\r\n        _this._checkUrlCallback = _this._checkUrl.bind(_this);\r\n        _this.location = PLATFORM.location;\r\n        _this.history = PLATFORM.history;\r\n        _this.linkHandler = linkHandler;\r\n        return _this;\r\n    }\r\n    BrowserHistory.prototype.activate = function (options) {\r\n        if (this._isActive) {\r\n            throw new Error('History has already been activated.');\r\n        }\r\n        var $history = this.history;\r\n        var wantsPushState = !!options.pushState;\r\n        this._isActive = true;\r\n        var normalizedOptions = this.options = Object.assign({}, { root: '/' }, this.options, options);\r\n        var rootUrl = this.root = ('/' + normalizedOptions.root + '/').replace(rootStripper, '/');\r\n        var wantsHashChange = this._wantsHashChange = normalizedOptions.hashChange !== false;\r\n        var hasPushState = this._hasPushState = !!(normalizedOptions.pushState && $history && $history.pushState);\r\n        var eventName;\r\n        if (hasPushState) {\r\n            eventName = 'popstate';\r\n        }\r\n        else if (wantsHashChange) {\r\n            eventName = 'hashchange';\r\n        }\r\n        PLATFORM.addEventListener(eventName, this._checkUrlCallback);\r\n        if (wantsHashChange && wantsPushState) {\r\n            var $location = this.location;\r\n            var atRoot = $location.pathname.replace(/[^\\/]$/, '$&/') === rootUrl;\r\n            if (!hasPushState && !atRoot) {\r\n                var fragment = this.fragment = this._getFragment(null, true);\r\n                $location.replace(rootUrl + $location.search + '#' + fragment);\r\n                return true;\r\n            }\r\n            else if (hasPushState && atRoot && $location.hash) {\r\n                var fragment = this.fragment = this._getHash().replace(routeStripper, '');\r\n                $history.replaceState({}, DOM.title, rootUrl + fragment + $location.search);\r\n            }\r\n        }\r\n        if (!this.fragment) {\r\n            this.fragment = this._getFragment('');\r\n        }\r\n        this.linkHandler.activate(this);\r\n        if (!normalizedOptions.silent) {\r\n            return this._loadUrl('');\r\n        }\r\n    };\r\n    BrowserHistory.prototype.deactivate = function () {\r\n        var handler = this._checkUrlCallback;\r\n        PLATFORM.removeEventListener('popstate', handler);\r\n        PLATFORM.removeEventListener('hashchange', handler);\r\n        this._isActive = false;\r\n        this.linkHandler.deactivate();\r\n    };\r\n    BrowserHistory.prototype.getAbsoluteRoot = function () {\r\n        var $location = this.location;\r\n        var origin = createOrigin($location.protocol, $location.hostname, $location.port);\r\n        return \"\" + origin + this.root;\r\n    };\r\n    BrowserHistory.prototype.navigate = function (fragment, _a) {\r\n        var _b = _a === void 0 ? {} : _a, _c = _b.trigger, trigger = _c === void 0 ? true : _c, _d = _b.replace, replace = _d === void 0 ? false : _d;\r\n        var location = this.location;\r\n        if (fragment && absoluteUrl.test(fragment)) {\r\n            location.href = fragment;\r\n            return true;\r\n        }\r\n        if (!this._isActive) {\r\n            return false;\r\n        }\r\n        fragment = this._getFragment(fragment || '');\r\n        if (this.fragment === fragment && !replace) {\r\n            return false;\r\n        }\r\n        this.fragment = fragment;\r\n        var url = this.root + fragment;\r\n        if (fragment === '' && url !== '/') {\r\n            url = url.slice(0, -1);\r\n        }\r\n        if (this._hasPushState) {\r\n            url = url.replace('//', '/');\r\n            this.history[replace ? 'replaceState' : 'pushState']({}, DOM.title, url);\r\n        }\r\n        else if (this._wantsHashChange) {\r\n            updateHash(location, fragment, replace);\r\n        }\r\n        else {\r\n            location.assign(url);\r\n        }\r\n        if (trigger) {\r\n            return this._loadUrl(fragment);\r\n        }\r\n        return true;\r\n    };\r\n    BrowserHistory.prototype.navigateBack = function () {\r\n        this.history.back();\r\n    };\r\n    BrowserHistory.prototype.setTitle = function (title) {\r\n        DOM.title = title;\r\n    };\r\n    BrowserHistory.prototype.setState = function (key, value) {\r\n        var $history = this.history;\r\n        var state = Object.assign({}, $history.state);\r\n        var _a = this.location, pathname = _a.pathname, search = _a.search, hash = _a.hash;\r\n        state[key] = value;\r\n        $history.replaceState(state, null, \"\" + pathname + search + hash);\r\n    };\r\n    BrowserHistory.prototype.getState = function (key) {\r\n        var state = Object.assign({}, this.history.state);\r\n        return state[key];\r\n    };\r\n    BrowserHistory.prototype.getHistoryIndex = function () {\r\n        var historyIndex = this.getState('HistoryIndex');\r\n        if (historyIndex === undefined) {\r\n            historyIndex = this.history.length - 1;\r\n            this.setState('HistoryIndex', historyIndex);\r\n        }\r\n        return historyIndex;\r\n    };\r\n    BrowserHistory.prototype.go = function (movement) {\r\n        this.history.go(movement);\r\n    };\r\n    BrowserHistory.prototype._getHash = function () {\r\n        return this.location.hash.substr(1);\r\n    };\r\n    BrowserHistory.prototype._getFragment = function (fragment, forcePushState) {\r\n        var rootUrl;\r\n        if (!fragment) {\r\n            if (this._hasPushState || !this._wantsHashChange || forcePushState) {\r\n                var location_1 = this.location;\r\n                fragment = location_1.pathname + location_1.search;\r\n                rootUrl = this.root.replace(trailingSlash, '');\r\n                if (!fragment.indexOf(rootUrl)) {\r\n                    fragment = fragment.substr(rootUrl.length);\r\n                }\r\n            }\r\n            else {\r\n                fragment = this._getHash();\r\n            }\r\n        }\r\n        return '/' + fragment.replace(routeStripper, '');\r\n    };\r\n    BrowserHistory.prototype._checkUrl = function () {\r\n        var current = this._getFragment('');\r\n        if (current !== this.fragment) {\r\n            this._loadUrl('');\r\n        }\r\n    };\r\n    BrowserHistory.prototype._loadUrl = function (fragmentOverride) {\r\n        var fragment = this.fragment = this._getFragment(fragmentOverride);\r\n        return this.options.routeHandler ?\r\n            this.options.routeHandler(fragment) :\r\n            false;\r\n    };\r\n    BrowserHistory.inject = [LinkHandler];\r\n    return BrowserHistory;\r\n}(History));\r\nvar routeStripper = /^#?\\/*|\\s+$/g;\r\nvar rootStripper = /^\\/+|\\/+$/g;\r\nvar trailingSlash = /\\/$/;\r\nvar absoluteUrl = /^([a-z][a-z0-9+\\-.]*:)?\\/\\//i;\r\nfunction updateHash($location, fragment, replace) {\r\n    if (replace) {\r\n        var href = $location.href.replace(/(javascript:|#).*$/, '');\r\n        $location.replace(href + '#' + fragment);\r\n    }\r\n    else {\r\n        $location.hash = '#' + fragment;\r\n    }\r\n}\r\nfunction createOrigin(protocol, hostname, port) {\r\n    return protocol + \"//\" + hostname + (port ? ':' + port : '');\r\n}\n\nfunction configure(config) {\r\n    var $config = config;\r\n    $config.singleton(History, BrowserHistory);\r\n    $config.transient(LinkHandler, DefaultLinkHandler);\r\n}\n\nexport { BrowserHistory, DefaultLinkHandler, LinkHandler, configure };\n//# sourceMappingURL=aurelia-history-browser.js.map\n","\n\nfunction mi(name) {\n  throw new Error('History must implement ' + name + '().');\n}\n\nexport var History = function () {\n  function History() {\n    \n  }\n\n  History.prototype.activate = function activate(options) {\n    mi('activate');\n  };\n\n  History.prototype.deactivate = function deactivate() {\n    mi('deactivate');\n  };\n\n  History.prototype.getAbsoluteRoot = function getAbsoluteRoot() {\n    mi('getAbsoluteRoot');\n  };\n\n  History.prototype.navigate = function navigate(fragment, options) {\n    mi('navigate');\n  };\n\n  History.prototype.navigateBack = function navigateBack() {\n    mi('navigateBack');\n  };\n\n  History.prototype.setTitle = function setTitle(title) {\n    mi('setTitle');\n  };\n\n  History.prototype.setState = function setState(key, value) {\n    mi('setState');\n  };\n\n  History.prototype.getState = function getState(key) {\n    mi('getState');\n  };\n\n  History.prototype.getHistoryIndex = function getHistoryIndex() {\n    mi('getHistoryIndex');\n  };\n\n  History.prototype.go = function go(movement) {\n    mi('go');\n  };\n\n  return History;\n}();","import { Loader } from 'aurelia-loader';\nimport { Origin } from 'aurelia-metadata';\nimport { PLATFORM, DOM } from 'aurelia-pal';\n\n/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n    extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n    return extendStatics(d, b);\r\n};\r\n\r\nfunction __extends(d, b) {\r\n    if (typeof b !== \"function\" && b !== null)\r\n        throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n    extendStatics(d, b);\r\n    function __() { this.constructor = d; }\r\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nfunction __awaiter(thisArg, _arguments, P, generator) {\r\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n    return new (P || (P = Promise))(function (resolve, reject) {\r\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n    });\r\n}\r\n\r\nfunction __generator(thisArg, body) {\r\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n    function verb(n) { return function (v) { return step([n, v]); }; }\r\n    function step(op) {\r\n        if (f) throw new TypeError(\"Generator is already executing.\");\r\n        while (_) try {\r\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n            if (y = 0, t) op = [op[0] & 2, t.value];\r\n            switch (op[0]) {\r\n                case 0: case 1: t = op; break;\r\n                case 4: _.label++; return { value: op[1], done: false };\r\n                case 5: _.label++; y = op[1]; op = [0]; continue;\r\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n                default:\r\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n                    if (t[2]) _.ops.pop();\r\n                    _.trys.pop(); continue;\r\n            }\r\n            op = body.call(thisArg, _);\r\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n    }\r\n}\n\n/**\r\n* An implementation of the TemplateLoader interface implemented with text-based loading.\r\n*/\r\nvar TextTemplateLoader = /** @class */ (function () {\r\n    function TextTemplateLoader() {\r\n    }\r\n    /**\r\n    * Loads a template.\r\n    * @param loader The loader that is requesting the template load.\r\n    * @param entry The TemplateRegistryEntry to load and populate with a template.\r\n    * @return A promise which resolves when the TemplateRegistryEntry is loaded with a template.\r\n    */\r\n    TextTemplateLoader.prototype.loadTemplate = function (loader, entry) {\r\n        return __awaiter(this, void 0, void 0, function () {\r\n            var text;\r\n            return __generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0: return [4 /*yield*/, loader.loadText(entry.address)];\r\n                    case 1:\r\n                        text = _a.sent();\r\n                        entry.template = DOM.createTemplateFromMarkup(text);\r\n                        return [2 /*return*/];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    return TextTemplateLoader;\r\n}());\r\nfunction ensureOriginOnExports(moduleExports, moduleId) {\r\n    var target = moduleExports;\r\n    var key;\r\n    var exportedValue;\r\n    if (target.__useDefault) {\r\n        target = target.default;\r\n    }\r\n    Origin.set(target, new Origin(moduleId, 'default'));\r\n    if (typeof target === 'object') {\r\n        for (key in target) {\r\n            exportedValue = target[key];\r\n            if (typeof exportedValue === 'function') {\r\n                Origin.set(exportedValue, new Origin(moduleId, key));\r\n            }\r\n        }\r\n    }\r\n    return moduleExports;\r\n}\r\n/**\r\n* A default implementation of the Loader abstraction which works with webpack (extended common-js style).\r\n*/\r\nvar WebpackLoader = /** @class */ (function (_super) {\r\n    __extends(WebpackLoader, _super);\r\n    function WebpackLoader() {\r\n        var _this = _super.call(this) || this;\r\n        _this.moduleRegistry = Object.create(null);\r\n        _this.loaderPlugins = Object.create(null);\r\n        _this.modulesBeingLoaded = new Map();\r\n        _this.useTemplateLoader(new TextTemplateLoader());\r\n        _this.addPlugin('template-registry-entry', {\r\n            fetch: function (moduleId) { return __awaiter(_this, void 0, void 0, function () {\r\n                var HmrContext, entry;\r\n                var _this = this;\r\n                return __generator(this, function (_a) {\r\n                    switch (_a.label) {\r\n                        case 0:\r\n                            // HMR:\r\n                            if (module.hot) {\r\n                                if (!this.hmrContext) {\r\n                                    HmrContext = require('aurelia-hot-module-reload').HmrContext;\r\n                                    this.hmrContext = new HmrContext(this);\r\n                                }\r\n                                module.hot.accept(moduleId, function () { return __awaiter(_this, void 0, void 0, function () {\r\n                                    return __generator(this, function (_a) {\r\n                                        switch (_a.label) {\r\n                                            case 0: return [4 /*yield*/, this.hmrContext.handleViewChange(moduleId)];\r\n                                            case 1:\r\n                                                _a.sent();\r\n                                                return [2 /*return*/];\r\n                                        }\r\n                                    });\r\n                                }); });\r\n                            }\r\n                            entry = this.getOrCreateTemplateRegistryEntry(moduleId);\r\n                            if (!!entry.templateIsLoaded) return [3 /*break*/, 2];\r\n                            return [4 /*yield*/, this.templateLoader.loadTemplate(this, entry)];\r\n                        case 1:\r\n                            _a.sent();\r\n                            _a.label = 2;\r\n                        case 2: return [2 /*return*/, entry];\r\n                    }\r\n                });\r\n            }); }\r\n        });\r\n        PLATFORM.eachModule = function (callback) {\r\n            var registry = __webpack_require__.c;\r\n            var cachedModuleIds = Object.getOwnPropertyNames(registry);\r\n            cachedModuleIds\r\n                // Note: we use .some here like a .forEach that can be \"break\"ed out of.\r\n                // It will stop iterating only when a truthy value is returned.\r\n                // Even though the docs say \"true\" explicitly, loader-default also goes by truthy\r\n                // and this is to keep it consistent with that.\r\n                .some(function (moduleId) {\r\n                var moduleExports = registry[moduleId].exports;\r\n                if (typeof moduleExports === 'object') {\r\n                    return callback(moduleId, moduleExports);\r\n                }\r\n                return false;\r\n            });\r\n        };\r\n        return _this;\r\n    }\r\n    WebpackLoader.prototype._import = function (address, defaultHMR) {\r\n        if (defaultHMR === void 0) { defaultHMR = true; }\r\n        return __awaiter(this, void 0, void 0, function () {\r\n            var addressParts, moduleId, loaderPlugin, plugin_1, asyncModuleId, callback;\r\n            var _this = this;\r\n            return __generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0:\r\n                        addressParts = address.split('!');\r\n                        moduleId = addressParts.splice(addressParts.length - 1, 1)[0];\r\n                        loaderPlugin = addressParts.length === 1 ? addressParts[0] : null;\r\n                        if (!loaderPlugin) return [3 /*break*/, 2];\r\n                        plugin_1 = this.loaderPlugins[loaderPlugin];\r\n                        if (!plugin_1) {\r\n                            throw new Error(\"Plugin \" + loaderPlugin + \" is not registered in the loader.\");\r\n                        }\r\n                        if (module.hot && plugin_1.hot) {\r\n                            module.hot.accept(moduleId, function () { return plugin_1.hot(moduleId); });\r\n                        }\r\n                        return [4 /*yield*/, plugin_1.fetch(moduleId)];\r\n                    case 1: return [2 /*return*/, _a.sent()];\r\n                    case 2:\r\n                        if (__webpack_require__.m[moduleId]) {\r\n                            if (defaultHMR && module.hot && this.hmrContext) {\r\n                                module.hot.accept(moduleId, function () { return _this.hmrContext.handleModuleChange(moduleId, module.hot); });\r\n                            }\r\n                            return [2 /*return*/, __webpack_require__(moduleId)];\r\n                        }\r\n                        asyncModuleId = \"async!\" + moduleId;\r\n                        if (!__webpack_require__.m[asyncModuleId]) return [3 /*break*/, 4];\r\n                        if (defaultHMR && module.hot && this.hmrContext) {\r\n                            module.hot.accept(moduleId, function () { return _this.hmrContext.handleModuleChange(moduleId, module.hot); });\r\n                            module.hot.accept(asyncModuleId, function () { return _this.hmrContext.handleModuleChange(moduleId, module.hot); });\r\n                        }\r\n                        callback = __webpack_require__(asyncModuleId);\r\n                        return [4 /*yield*/, new Promise(callback)];\r\n                    case 3: return [2 /*return*/, _a.sent()];\r\n                    case 4: throw new Error(\"Unable to find module with ID: \" + moduleId);\r\n                }\r\n            });\r\n        });\r\n    };\r\n    /**\r\n    * Maps a module id to a source.\r\n    * @param id The module id.\r\n    * @param source The source to map the module to.\r\n    */\r\n    WebpackLoader.prototype.map = function (id, source) { };\r\n    /**\r\n    * Normalizes a module id.\r\n    * @param moduleId The module id to normalize.\r\n    * @param relativeTo What the module id should be normalized relative to.\r\n    * @return The normalized module id.\r\n    */\r\n    WebpackLoader.prototype.normalizeSync = function (moduleId, relativeTo) {\r\n        return moduleId;\r\n    };\r\n    /**\r\n    * Normalizes a module id.\r\n    * @param moduleId The module id to normalize.\r\n    * @param relativeTo What the module id should be normalized relative to.\r\n    * @return The normalized module id.\r\n    */\r\n    WebpackLoader.prototype.normalize = function (moduleId, relativeTo) {\r\n        return Promise.resolve(moduleId);\r\n    };\r\n    /**\r\n    * Instructs the loader to use a specific TemplateLoader instance for loading templates\r\n    * @param templateLoader The instance of TemplateLoader to use for loading templates.\r\n    */\r\n    WebpackLoader.prototype.useTemplateLoader = function (templateLoader) {\r\n        this.templateLoader = templateLoader;\r\n    };\r\n    /**\r\n    * Loads a collection of modules.\r\n    * @param ids The set of module ids to load.\r\n    * @return A Promise for an array of loaded modules.\r\n    */\r\n    WebpackLoader.prototype.loadAllModules = function (ids) {\r\n        var _this = this;\r\n        return Promise.all(ids.map(function (id) { return _this.loadModule(id); }));\r\n    };\r\n    /**\r\n    * Loads a module.\r\n    * @param moduleId The module ID to load.\r\n    * @return A Promise for the loaded module.\r\n    */\r\n    WebpackLoader.prototype.loadModule = function (moduleId, defaultHMR) {\r\n        if (defaultHMR === void 0) { defaultHMR = true; }\r\n        return __awaiter(this, void 0, void 0, function () {\r\n            var existing, beingLoaded, moduleExports;\r\n            return __generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0:\r\n                        existing = this.moduleRegistry[moduleId];\r\n                        if (existing) {\r\n                            return [2 /*return*/, existing];\r\n                        }\r\n                        beingLoaded = this.modulesBeingLoaded.get(moduleId);\r\n                        if (beingLoaded) {\r\n                            return [2 /*return*/, beingLoaded];\r\n                        }\r\n                        beingLoaded = this._import(moduleId, defaultHMR);\r\n                        this.modulesBeingLoaded.set(moduleId, beingLoaded);\r\n                        return [4 /*yield*/, beingLoaded];\r\n                    case 1:\r\n                        moduleExports = _a.sent();\r\n                        this.moduleRegistry[moduleId] = ensureOriginOnExports(moduleExports, moduleId);\r\n                        this.modulesBeingLoaded.delete(moduleId);\r\n                        return [2 /*return*/, moduleExports];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    /**\r\n    * Loads a template.\r\n    * @param url The url of the template to load.\r\n    * @return A Promise for a TemplateRegistryEntry containing the template.\r\n    */\r\n    WebpackLoader.prototype.loadTemplate = function (url) {\r\n        return this.loadModule(this.applyPluginToUrl(url, 'template-registry-entry'), false);\r\n    };\r\n    /**\r\n    * Loads a text-based resource.\r\n    * @param url The url of the text file to load.\r\n    * @return A Promise for text content.\r\n    */\r\n    WebpackLoader.prototype.loadText = function (url) {\r\n        return __awaiter(this, void 0, void 0, function () {\r\n            var result, defaultExport;\r\n            return __generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0: return [4 /*yield*/, this.loadModule(url, false)];\r\n                    case 1:\r\n                        result = _a.sent();\r\n                        defaultExport = result && result.__esModule ? result.default : result;\r\n                        if (this.isCssLoaderModule(defaultExport)) {\r\n                            // we're dealing with a file loaded using the css-loader:\r\n                            return [2 /*return*/, this.getCssText(defaultExport)];\r\n                        }\r\n                        return [2 /*return*/, typeof result === \"string\" ? result : defaultExport];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    /**\r\n     * Check if a loaded module is a css-loader module\r\n     * @param o The loaded module\r\n     * @returns `true` when {@link o} is a {@link CssLoaderModule}; otherwise false\r\n     */\r\n    WebpackLoader.prototype.isCssLoaderModule = function (o) {\r\n        return o instanceof Array && o[0] instanceof Array && o.hasOwnProperty('toString');\r\n    };\r\n    /**\r\n     * Get CSS text from loaded css-loader module\r\n     * @param cssLoaderModule The {@link CssLoaderModule}\r\n     * @returns The css content with potential source map references\r\n     */\r\n    WebpackLoader.prototype.getCssText = function (cssLoaderModule) {\r\n        var result = cssLoaderModule.toString();\r\n        // If some css-loader modules include source maps,\r\n        // ensure /*# sourceURL=[...] */ is removed to avoid chrome devtools problems\r\n        if (cssLoaderModule.some(function (m) { return m[3]; })) {\r\n            result = result.replace(/^\\/\\*# sourceURL=.* \\*\\/\\s*\\n/gm, \"\");\r\n        }\r\n        return result;\r\n    };\r\n    /**\r\n    * Alters a module id so that it includes a plugin loader.\r\n    * @param url The url of the module to load.\r\n    * @param pluginName The plugin to apply to the module id.\r\n    * @return The plugin-based module id.\r\n    */\r\n    WebpackLoader.prototype.applyPluginToUrl = function (url, pluginName) {\r\n        return pluginName + \"!\" + url;\r\n    };\r\n    /**\r\n    * Registers a plugin with the loader.\r\n    * @param pluginName The name of the plugin.\r\n    * @param implementation The plugin implementation.\r\n    */\r\n    WebpackLoader.prototype.addPlugin = function (pluginName, implementation) {\r\n        this.loaderPlugins[pluginName] = implementation;\r\n    };\r\n    return WebpackLoader;\r\n}(Loader));\r\nPLATFORM.Loader = WebpackLoader;\n\nexport { TextTemplateLoader, WebpackLoader, ensureOriginOnExports };\n","var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\n\n\nimport { relativeToFile } from 'aurelia-path';\nimport { Origin } from 'aurelia-metadata';\n\nexport var TemplateDependency = function TemplateDependency(src, name) {\n  \n\n  this.src = src;\n  this.name = name;\n};\n\nexport var TemplateRegistryEntry = function () {\n  function TemplateRegistryEntry(address) {\n    \n\n    this.templateIsLoaded = false;\n    this.factoryIsReady = false;\n    this.resources = null;\n    this.dependencies = null;\n\n    this.address = address;\n    this.onReady = null;\n    this._template = null;\n    this._factory = null;\n  }\n\n  TemplateRegistryEntry.prototype.addDependency = function addDependency(src, name) {\n    var finalSrc = typeof src === 'string' ? relativeToFile(src, this.address) : Origin.get(src).moduleId;\n\n    this.dependencies.push(new TemplateDependency(finalSrc, name));\n  };\n\n  _createClass(TemplateRegistryEntry, [{\n    key: 'template',\n    get: function get() {\n      return this._template;\n    },\n    set: function set(value) {\n      var address = this.address;\n      var requires = void 0;\n      var current = void 0;\n      var src = void 0;\n      var dependencies = void 0;\n\n      this._template = value;\n      this.templateIsLoaded = true;\n\n      requires = value.content.querySelectorAll('require');\n      dependencies = this.dependencies = new Array(requires.length);\n\n      for (var i = 0, ii = requires.length; i < ii; ++i) {\n        current = requires[i];\n        src = current.getAttribute('from');\n\n        if (!src) {\n          throw new Error('<require> element in ' + address + ' has no \"from\" attribute.');\n        }\n\n        dependencies[i] = new TemplateDependency(relativeToFile(src, address), current.getAttribute('as'));\n\n        if (current.parentNode) {\n          current.parentNode.removeChild(current);\n        }\n      }\n    }\n  }, {\n    key: 'factory',\n    get: function get() {\n      return this._factory;\n    },\n    set: function set(value) {\n      this._factory = value;\n      this.factoryIsReady = true;\n    }\n  }]);\n\n  return TemplateRegistryEntry;\n}();\n\nexport var Loader = function () {\n  function Loader() {\n    \n\n    this.templateRegistry = {};\n  }\n\n  Loader.prototype.map = function map(id, source) {\n    throw new Error('Loaders must implement map(id, source).');\n  };\n\n  Loader.prototype.normalizeSync = function normalizeSync(moduleId, relativeTo) {\n    throw new Error('Loaders must implement normalizeSync(moduleId, relativeTo).');\n  };\n\n  Loader.prototype.normalize = function normalize(moduleId, relativeTo) {\n    throw new Error('Loaders must implement normalize(moduleId: string, relativeTo: string): Promise<string>.');\n  };\n\n  Loader.prototype.loadModule = function loadModule(id) {\n    throw new Error('Loaders must implement loadModule(id).');\n  };\n\n  Loader.prototype.loadAllModules = function loadAllModules(ids) {\n    throw new Error('Loader must implement loadAllModules(ids).');\n  };\n\n  Loader.prototype.loadTemplate = function loadTemplate(url) {\n    throw new Error('Loader must implement loadTemplate(url).');\n  };\n\n  Loader.prototype.loadText = function loadText(url) {\n    throw new Error('Loader must implement loadText(url).');\n  };\n\n  Loader.prototype.applyPluginToUrl = function applyPluginToUrl(url, pluginName) {\n    throw new Error('Loader must implement applyPluginToUrl(url, pluginName).');\n  };\n\n  Loader.prototype.addPlugin = function addPlugin(pluginName, implementation) {\n    throw new Error('Loader must implement addPlugin(pluginName, implementation).');\n  };\n\n  Loader.prototype.getOrCreateTemplateRegistryEntry = function getOrCreateTemplateRegistryEntry(address) {\n    return this.templateRegistry[address] || (this.templateRegistry[address] = new TemplateRegistryEntry(address));\n  };\n\n  return Loader;\n}();","\n\nexport var ConsoleAppender = function () {\n  function ConsoleAppender() {\n    \n  }\n\n  ConsoleAppender.prototype.debug = function debug(logger) {\n    var _console;\n\n    for (var _len = arguments.length, rest = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n      rest[_key - 1] = arguments[_key];\n    }\n\n    (_console = console).debug.apply(_console, [\"DEBUG [\" + logger.id + \"]\"].concat(rest));\n  };\n\n  ConsoleAppender.prototype.info = function info(logger) {\n    var _console2;\n\n    for (var _len2 = arguments.length, rest = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n      rest[_key2 - 1] = arguments[_key2];\n    }\n\n    (_console2 = console).info.apply(_console2, [\"INFO [\" + logger.id + \"]\"].concat(rest));\n  };\n\n  ConsoleAppender.prototype.warn = function warn(logger) {\n    var _console3;\n\n    for (var _len3 = arguments.length, rest = Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {\n      rest[_key3 - 1] = arguments[_key3];\n    }\n\n    (_console3 = console).warn.apply(_console3, [\"WARN [\" + logger.id + \"]\"].concat(rest));\n  };\n\n  ConsoleAppender.prototype.error = function error(logger) {\n    var _console4;\n\n    for (var _len4 = arguments.length, rest = Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {\n      rest[_key4 - 1] = arguments[_key4];\n    }\n\n    (_console4 = console).error.apply(_console4, [\"ERROR [\" + logger.id + \"]\"].concat(rest));\n  };\n\n  return ConsoleAppender;\n}();","\n\nexport var logLevel = {\n  none: 0,\n  error: 10,\n  warn: 20,\n  info: 30,\n  debug: 40\n};\n\nvar loggers = {};\nvar appenders = [];\nvar globalDefaultLevel = logLevel.none;\n\nvar standardLevels = ['none', 'error', 'warn', 'info', 'debug'];\nfunction isStandardLevel(level) {\n  return standardLevels.filter(function (l) {\n    return l === level;\n  }).length > 0;\n}\n\nfunction appendArgs() {\n  return [this].concat(Array.prototype.slice.call(arguments));\n}\n\nfunction logFactory(level) {\n  var threshold = logLevel[level];\n  return function () {\n    if (this.level < threshold) {\n      return;\n    }\n\n    var args = appendArgs.apply(this, arguments);\n    var i = appenders.length;\n    while (i--) {\n      var _appenders$i;\n\n      (_appenders$i = appenders[i])[level].apply(_appenders$i, args);\n    }\n  };\n}\n\nfunction logFactoryCustom(level) {\n  var threshold = logLevel[level];\n  return function () {\n    if (this.level < threshold) {\n      return;\n    }\n\n    var args = appendArgs.apply(this, arguments);\n    var i = appenders.length;\n    while (i--) {\n      var appender = appenders[i];\n      if (appender[level] !== undefined) {\n        appender[level].apply(appender, args);\n      }\n    }\n  };\n}\n\nfunction connectLoggers() {\n  var proto = Logger.prototype;\n  for (var _level in logLevel) {\n    if (isStandardLevel(_level)) {\n      if (_level !== 'none') {\n        proto[_level] = logFactory(_level);\n      }\n    } else {\n      proto[_level] = logFactoryCustom(_level);\n    }\n  }\n}\n\nfunction disconnectLoggers() {\n  var proto = Logger.prototype;\n  for (var _level2 in logLevel) {\n    if (_level2 !== 'none') {\n      proto[_level2] = function () {};\n    }\n  }\n}\n\nexport function getLogger(id) {\n  return loggers[id] || new Logger(id);\n}\n\nexport function addAppender(appender) {\n  if (appenders.push(appender) === 1) {\n    connectLoggers();\n  }\n}\n\nexport function removeAppender(appender) {\n  appenders = appenders.filter(function (a) {\n    return a !== appender;\n  });\n}\n\nexport function getAppenders() {\n  return [].concat(appenders);\n}\n\nexport function clearAppenders() {\n  appenders = [];\n  disconnectLoggers();\n}\n\nexport function addCustomLevel(name, value) {\n  if (logLevel[name] !== undefined) {\n    throw Error('Log level \"' + name + '\" already exists.');\n  }\n\n  if (isNaN(value)) {\n    throw Error('Value must be a number.');\n  }\n\n  logLevel[name] = value;\n\n  if (appenders.length > 0) {\n    connectLoggers();\n  } else {\n    Logger.prototype[name] = function () {};\n  }\n}\n\nexport function removeCustomLevel(name) {\n  if (logLevel[name] === undefined) {\n    return;\n  }\n\n  if (isStandardLevel(name)) {\n    throw Error('Built-in log level \"' + name + '\" cannot be removed.');\n  }\n\n  delete logLevel[name];\n  delete Logger.prototype[name];\n}\n\nexport function setLevel(level) {\n  globalDefaultLevel = level;\n  for (var key in loggers) {\n    loggers[key].setLevel(level);\n  }\n}\n\nexport function getLevel() {\n  return globalDefaultLevel;\n}\n\nexport var Logger = function () {\n  function Logger(id) {\n    \n\n    var cached = loggers[id];\n    if (cached) {\n      return cached;\n    }\n\n    loggers[id] = this;\n    this.id = id;\n    this.level = globalDefaultLevel;\n  }\n\n  Logger.prototype.debug = function debug(message) {};\n\n  Logger.prototype.info = function info(message) {};\n\n  Logger.prototype.warn = function warn(message) {};\n\n  Logger.prototype.error = function error(message) {};\n\n  Logger.prototype.setLevel = function setLevel(level) {\n    this.level = level;\n  };\n\n  Logger.prototype.isDebugEnabled = function isDebugEnabled() {\n    return this.level === logLevel.debug;\n  };\n\n  return Logger;\n}();","var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n\n\nimport { PLATFORM } from 'aurelia-pal';\n\nfunction isObject(val) {\n  return val && (typeof val === 'function' || (typeof val === 'undefined' ? 'undefined' : _typeof(val)) === 'object');\n}\n\nexport var metadata = {\n  resource: 'aurelia:resource',\n  paramTypes: 'design:paramtypes',\n  propertyType: 'design:type',\n  properties: 'design:properties',\n  get: function get(metadataKey, target, targetKey) {\n    if (!isObject(target)) {\n      return undefined;\n    }\n    var result = metadata.getOwn(metadataKey, target, targetKey);\n    return result === undefined ? metadata.get(metadataKey, Object.getPrototypeOf(target), targetKey) : result;\n  },\n  getOwn: function getOwn(metadataKey, target, targetKey) {\n    if (!isObject(target)) {\n      return undefined;\n    }\n    return Reflect.getOwnMetadata(metadataKey, target, targetKey);\n  },\n  define: function define(metadataKey, metadataValue, target, targetKey) {\n    Reflect.defineMetadata(metadataKey, metadataValue, target, targetKey);\n  },\n  getOrCreateOwn: function getOrCreateOwn(metadataKey, Type, target, targetKey) {\n    var result = metadata.getOwn(metadataKey, target, targetKey);\n\n    if (result === undefined) {\n      result = new Type();\n      Reflect.defineMetadata(metadataKey, result, target, targetKey);\n    }\n\n    return result;\n  }\n};\n\nvar originStorage = new Map();\nvar unknownOrigin = Object.freeze({ moduleId: undefined, moduleMember: undefined });\n\nexport var Origin = function () {\n  function Origin(moduleId, moduleMember) {\n    \n\n    this.moduleId = moduleId;\n    this.moduleMember = moduleMember;\n  }\n\n  Origin.get = function get(fn) {\n    var origin = originStorage.get(fn);\n\n    if (origin === undefined) {\n      PLATFORM.eachModule(function (key, value) {\n        if ((typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object') {\n          for (var name in value) {\n            try {\n              var exp = value[name];\n              if (exp === fn) {\n                originStorage.set(fn, origin = new Origin(key, name));\n                return true;\n              }\n            } catch (e) {}\n          }\n        }\n\n        if (value === fn) {\n          originStorage.set(fn, origin = new Origin(key, 'default'));\n          return true;\n        }\n\n        return false;\n      });\n    }\n\n    return origin || unknownOrigin;\n  };\n\n  Origin.set = function set(fn, origin) {\n    originStorage.set(fn, origin);\n  };\n\n  return Origin;\n}();\n\nexport function decorators() {\n  for (var _len = arguments.length, rest = Array(_len), _key = 0; _key < _len; _key++) {\n    rest[_key] = arguments[_key];\n  }\n\n  var applicator = function applicator(target, key, descriptor) {\n    var i = rest.length;\n\n    if (key) {\n      descriptor = descriptor || {\n        value: target[key],\n        writable: true,\n        configurable: true,\n        enumerable: true\n      };\n\n      while (i--) {\n        descriptor = rest[i](target, key, descriptor) || descriptor;\n      }\n\n      Object.defineProperty(target, key, descriptor);\n    } else {\n      while (i--) {\n        target = rest[i](target) || target;\n      }\n    }\n\n    return target;\n  };\n\n  applicator.on = applicator;\n  return applicator;\n}\n\nexport function deprecated(optionsOrTarget, maybeKey, maybeDescriptor) {\n  function decorator(target, key, descriptor) {\n    var methodSignature = target.constructor.name + '#' + key;\n    var options = maybeKey ? {} : optionsOrTarget || {};\n    var message = 'DEPRECATION - ' + methodSignature;\n\n    if (typeof descriptor.value !== 'function') {\n      throw new SyntaxError('Only methods can be marked as deprecated.');\n    }\n\n    if (options.message) {\n      message += ' - ' + options.message;\n    }\n\n    return _extends({}, descriptor, {\n      value: function deprecationWrapper() {\n        if (options.error) {\n          throw new Error(message);\n        } else {\n          console.warn(message);\n        }\n\n        return descriptor.value.apply(this, arguments);\n      }\n    });\n  }\n\n  return maybeKey ? decorator(optionsOrTarget, maybeKey, maybeDescriptor) : decorator;\n}\n\nexport function mixin(behavior) {\n  var instanceKeys = Object.keys(behavior);\n\n  function _mixin(possible) {\n    var decorator = function decorator(target) {\n      var resolvedTarget = typeof target === 'function' ? target.prototype : target;\n\n      var i = instanceKeys.length;\n      while (i--) {\n        var property = instanceKeys[i];\n        Object.defineProperty(resolvedTarget, property, {\n          value: behavior[property],\n          writable: true\n        });\n      }\n    };\n\n    return possible ? decorator(possible) : decorator;\n  }\n\n  return _mixin;\n}\n\nfunction alwaysValid() {\n  return true;\n}\nfunction noCompose() {}\n\nfunction ensureProtocolOptions(options) {\n  if (options === undefined) {\n    options = {};\n  } else if (typeof options === 'function') {\n    options = {\n      validate: options\n    };\n  }\n\n  if (!options.validate) {\n    options.validate = alwaysValid;\n  }\n\n  if (!options.compose) {\n    options.compose = noCompose;\n  }\n\n  return options;\n}\n\nfunction createProtocolValidator(validate) {\n  return function (target) {\n    var result = validate(target);\n    return result === true;\n  };\n}\n\nfunction createProtocolAsserter(name, validate) {\n  return function (target) {\n    var result = validate(target);\n    if (result !== true) {\n      throw new Error(result || name + ' was not correctly implemented.');\n    }\n  };\n}\n\nexport function protocol(name, options) {\n  options = ensureProtocolOptions(options);\n\n  var result = function result(target) {\n    var resolvedTarget = typeof target === 'function' ? target.prototype : target;\n\n    options.compose(resolvedTarget);\n    result.assert(resolvedTarget);\n\n    Object.defineProperty(resolvedTarget, 'protocol:' + name, {\n      enumerable: false,\n      configurable: false,\n      writable: false,\n      value: true\n    });\n  };\n\n  result.validate = createProtocolValidator(options.validate);\n  result.assert = createProtocolAsserter(name, options.validate);\n\n  return result;\n}\n\nprotocol.create = function (name, options) {\n  options = ensureProtocolOptions(options);\n  var hidden = 'protocol:' + name;\n  var result = function result(target) {\n    var decorator = protocol(name, options);\n    return target ? decorator(target) : decorator;\n  };\n\n  result.decorates = function (obj) {\n    return obj[hidden] === true;\n  };\n  result.validate = createProtocolValidator(options.validate);\n  result.assert = createProtocolAsserter(name, options.validate);\n\n  return result;\n};","var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nimport { initializePAL, isInitialized } from 'aurelia-pal';\n\nexport var _PLATFORM = {\n  location: window.location,\n  history: window.history,\n  addEventListener: function addEventListener(eventName, callback, capture) {\n    this.global.addEventListener(eventName, callback, capture);\n  },\n  removeEventListener: function removeEventListener(eventName, callback, capture) {\n    this.global.removeEventListener(eventName, callback, capture);\n  },\n\n  performance: window.performance,\n  requestAnimationFrame: function requestAnimationFrame(callback) {\n    return this.global.requestAnimationFrame(callback);\n  }\n};\n\nif (typeof FEATURE_NO_IE === 'undefined') {\n  var test = function test() {};\n\n  if (test.name === undefined) {\n    Object.defineProperty(Function.prototype, 'name', {\n      get: function get() {\n        var name = this.toString().match(/^\\s*function\\s*(\\S*)\\s*\\(/)[1];\n\n        Object.defineProperty(this, 'name', { value: name });\n        return name;\n      }\n    });\n  }\n}\n\nif (typeof FEATURE_NO_IE === 'undefined') {\n  if (!('classList' in document.createElement('_')) || document.createElementNS && !('classList' in document.createElementNS('http://www.w3.org/2000/svg', 'g'))) {\n    var protoProp = 'prototype';\n    var strTrim = String.prototype.trim;\n    var arrIndexOf = Array.prototype.indexOf;\n    var emptyArray = [];\n\n    var DOMEx = function DOMEx(type, message) {\n      this.name = type;\n      this.code = DOMException[type];\n      this.message = message;\n    };\n\n    var checkTokenAndGetIndex = function checkTokenAndGetIndex(classList, token) {\n      if (token === '') {\n        throw new DOMEx('SYNTAX_ERR', 'An invalid or illegal string was specified');\n      }\n\n      if (/\\s/.test(token)) {\n        throw new DOMEx('INVALID_CHARACTER_ERR', 'String contains an invalid character');\n      }\n\n      return arrIndexOf.call(classList, token);\n    };\n\n    var ClassList = function ClassList(elem) {\n      var trimmedClasses = strTrim.call(elem.getAttribute('class') || '');\n      var classes = trimmedClasses ? trimmedClasses.split(/\\s+/) : emptyArray;\n\n      for (var i = 0, ii = classes.length; i < ii; ++i) {\n        this.push(classes[i]);\n      }\n\n      this._updateClassName = function () {\n        elem.setAttribute('class', this.toString());\n      };\n    };\n\n    var classListProto = ClassList[protoProp] = [];\n\n    DOMEx[protoProp] = Error[protoProp];\n\n    classListProto.item = function (i) {\n      return this[i] || null;\n    };\n\n    classListProto.contains = function (token) {\n      token += '';\n      return checkTokenAndGetIndex(this, token) !== -1;\n    };\n\n    classListProto.add = function () {\n      var tokens = arguments;\n      var i = 0;\n      var ii = tokens.length;\n      var token = void 0;\n      var updated = false;\n\n      do {\n        token = tokens[i] + '';\n        if (checkTokenAndGetIndex(this, token) === -1) {\n          this.push(token);\n          updated = true;\n        }\n      } while (++i < ii);\n\n      if (updated) {\n        this._updateClassName();\n      }\n    };\n\n    classListProto.remove = function () {\n      var tokens = arguments;\n      var i = 0;\n      var ii = tokens.length;\n      var token = void 0;\n      var updated = false;\n      var index = void 0;\n\n      do {\n        token = tokens[i] + '';\n        index = checkTokenAndGetIndex(this, token);\n        while (index !== -1) {\n          this.splice(index, 1);\n          updated = true;\n          index = checkTokenAndGetIndex(this, token);\n        }\n      } while (++i < ii);\n\n      if (updated) {\n        this._updateClassName();\n      }\n    };\n\n    classListProto.toggle = function (token, force) {\n      token += '';\n\n      var result = this.contains(token);\n      var method = result ? force !== true && 'remove' : force !== false && 'add';\n\n      if (method) {\n        this[method](token);\n      }\n\n      if (force === true || force === false) {\n        return force;\n      }\n\n      return !result;\n    };\n\n    classListProto.toString = function () {\n      return this.join(' ');\n    };\n\n    Object.defineProperty(Element.prototype, 'classList', {\n      get: function get() {\n        return new ClassList(this);\n      },\n      enumerable: true,\n      configurable: true\n    });\n  } else {\n    var testElement = document.createElement('_');\n    testElement.classList.add('c1', 'c2');\n\n    if (!testElement.classList.contains('c2')) {\n      var createMethod = function createMethod(method) {\n        var original = DOMTokenList.prototype[method];\n\n        DOMTokenList.prototype[method] = function (token) {\n          for (var i = 0, ii = arguments.length; i < ii; ++i) {\n            token = arguments[i];\n            original.call(this, token);\n          }\n        };\n      };\n\n      createMethod('add');\n      createMethod('remove');\n    }\n\n    testElement.classList.toggle('c3', false);\n\n    if (testElement.classList.contains('c3')) {\n      var _toggle = DOMTokenList.prototype.toggle;\n\n      DOMTokenList.prototype.toggle = function (token, force) {\n        if (1 in arguments && !this.contains(token) === !force) {\n          return force;\n        }\n\n        return _toggle.call(this, token);\n      };\n    }\n\n    testElement = null;\n  }\n}\n\nif (typeof FEATURE_NO_IE === 'undefined') {\n  var _filterEntries = function _filterEntries(key, value) {\n    var i = 0,\n        n = _entries.length,\n        result = [];\n    for (; i < n; i++) {\n      if (_entries[i][key] == value) {\n        result.push(_entries[i]);\n      }\n    }\n    return result;\n  };\n\n  var _clearEntries = function _clearEntries(type, name) {\n    var i = _entries.length,\n        entry;\n    while (i--) {\n      entry = _entries[i];\n      if (entry.entryType == type && (name === void 0 || entry.name == name)) {\n        _entries.splice(i, 1);\n      }\n    }\n  };\n\n  // @license http://opensource.org/licenses/MIT\n  if ('performance' in window === false) {\n    window.performance = {};\n  }\n\n  if ('now' in window.performance === false) {\n    var nowOffset = Date.now();\n\n    if (performance.timing && performance.timing.navigationStart) {\n      nowOffset = performance.timing.navigationStart;\n    }\n\n    window.performance.now = function now() {\n      return Date.now() - nowOffset;\n    };\n  }\n\n  var startOffset = Date.now ? Date.now() : +new Date();\n  var _entries = [];\n  var _marksIndex = {};\n\n  ;\n\n  if (!window.performance.mark) {\n    window.performance.mark = window.performance.webkitMark || function (name) {\n      var mark = {\n        name: name,\n        entryType: \"mark\",\n        startTime: window.performance.now(),\n        duration: 0\n      };\n\n      _entries.push(mark);\n      _marksIndex[name] = mark;\n    };\n  }\n\n  if (!window.performance.measure) {\n    window.performance.measure = window.performance.webkitMeasure || function (name, startMark, endMark) {\n      startMark = _marksIndex[startMark].startTime;\n      endMark = _marksIndex[endMark].startTime;\n\n      _entries.push({\n        name: name,\n        entryType: \"measure\",\n        startTime: startMark,\n        duration: endMark - startMark\n      });\n    };\n  }\n\n  if (!window.performance.getEntriesByType) {\n    window.performance.getEntriesByType = window.performance.webkitGetEntriesByType || function (type) {\n      return _filterEntries(\"entryType\", type);\n    };\n  }\n\n  if (!window.performance.getEntriesByName) {\n    window.performance.getEntriesByName = window.performance.webkitGetEntriesByName || function (name) {\n      return _filterEntries(\"name\", name);\n    };\n  }\n\n  if (!window.performance.clearMarks) {\n    window.performance.clearMarks = window.performance.webkitClearMarks || function (name) {\n      _clearEntries(\"mark\", name);\n    };\n  }\n\n  if (!window.performance.clearMeasures) {\n    window.performance.clearMeasures = window.performance.webkitClearMeasures || function (name) {\n      _clearEntries(\"measure\", name);\n    };\n  }\n\n  _PLATFORM.performance = window.performance;\n}\n\nif (typeof FEATURE_NO_IE === 'undefined') {\n  var con = window.console = window.console || {};\n  var nop = function nop() {};\n\n  if (!con.memory) con.memory = {};\n  ('assert,clear,count,debug,dir,dirxml,error,exception,group,' + 'groupCollapsed,groupEnd,info,log,markTimeline,profile,profiles,profileEnd,' + 'show,table,time,timeEnd,timeline,timelineEnd,timeStamp,trace,warn').split(',').forEach(function (m) {\n    if (!con[m]) con[m] = nop;\n  });\n\n  if (_typeof(con.log) === 'object') {\n    'log,info,warn,error,assert,dir,clear,profile,profileEnd'.split(',').forEach(function (method) {\n      console[method] = this.bind(console[method], console);\n    }, Function.prototype.call);\n  }\n}\n\nif (typeof FEATURE_NO_IE === 'undefined') {\n  if (!window.CustomEvent || typeof window.CustomEvent !== 'function') {\n    var _CustomEvent = function _CustomEvent(event, params) {\n      params = params || {\n        bubbles: false,\n        cancelable: false,\n        detail: undefined\n      };\n\n      var evt = document.createEvent('CustomEvent');\n      evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n      return evt;\n    };\n\n    _CustomEvent.prototype = window.Event.prototype;\n    window.CustomEvent = _CustomEvent;\n  }\n}\n\nif (Element && !Element.prototype.matches) {\n  var proto = Element.prototype;\n  proto.matches = proto.matchesSelector || proto.mozMatchesSelector || proto.msMatchesSelector || proto.oMatchesSelector || proto.webkitMatchesSelector;\n}\n\nexport var _FEATURE = {\n  shadowDOM: !!HTMLElement.prototype.attachShadow,\n  scopedCSS: 'scoped' in document.createElement('style'),\n  htmlTemplateElement: function () {\n    var d = document.createElement('div');\n    d.innerHTML = '<template></template>';\n    return 'content' in d.children[0];\n  }(),\n  mutationObserver: !!(window.MutationObserver || window.WebKitMutationObserver),\n  ensureHTMLTemplateElement: function ensureHTMLTemplateElement(t) {\n    return t;\n  }\n};\n\nif (typeof FEATURE_NO_IE === 'undefined') {\n  var isSVGTemplate = function isSVGTemplate(el) {\n    return el.tagName === 'template' && el.namespaceURI === 'http://www.w3.org/2000/svg';\n  };\n\n  var fixSVGTemplateElement = function fixSVGTemplateElement(el) {\n    var template = el.ownerDocument.createElement('template');\n    var attrs = el.attributes;\n    var length = attrs.length;\n    var attr = void 0;\n\n    el.parentNode.insertBefore(template, el);\n\n    while (length-- > 0) {\n      attr = attrs[length];\n      template.setAttribute(attr.name, attr.value);\n      el.removeAttribute(attr.name);\n    }\n\n    el.parentNode.removeChild(el);\n\n    return fixHTMLTemplateElement(template);\n  };\n\n  var fixHTMLTemplateElement = function fixHTMLTemplateElement(template) {\n    var content = template.content = document.createDocumentFragment();\n    var child = void 0;\n\n    while (child = template.firstChild) {\n      content.appendChild(child);\n    }\n\n    return template;\n  };\n\n  var fixHTMLTemplateElementRoot = function fixHTMLTemplateElementRoot(template) {\n    var content = fixHTMLTemplateElement(template).content;\n    var childTemplates = content.querySelectorAll('template');\n\n    for (var i = 0, ii = childTemplates.length; i < ii; ++i) {\n      var child = childTemplates[i];\n\n      if (isSVGTemplate(child)) {\n        fixSVGTemplateElement(child);\n      } else {\n        fixHTMLTemplateElement(child);\n      }\n    }\n\n    return template;\n  };\n\n  if (!_FEATURE.htmlTemplateElement) {\n    _FEATURE.ensureHTMLTemplateElement = fixHTMLTemplateElementRoot;\n  }\n}\n\nvar shadowPoly = window.ShadowDOMPolyfill || null;\n\nexport var _DOM = {\n  Element: Element,\n  NodeList: NodeList,\n  SVGElement: SVGElement,\n  boundary: 'aurelia-dom-boundary',\n  addEventListener: function addEventListener(eventName, callback, capture) {\n    document.addEventListener(eventName, callback, capture);\n  },\n  removeEventListener: function removeEventListener(eventName, callback, capture) {\n    document.removeEventListener(eventName, callback, capture);\n  },\n  adoptNode: function adoptNode(node) {\n    return document.adoptNode(node);\n  },\n  createAttribute: function createAttribute(name) {\n    return document.createAttribute(name);\n  },\n  createElement: function createElement(tagName) {\n    return document.createElement(tagName);\n  },\n  createTextNode: function createTextNode(text) {\n    return document.createTextNode(text);\n  },\n  createComment: function createComment(text) {\n    return document.createComment(text);\n  },\n  createDocumentFragment: function createDocumentFragment() {\n    return document.createDocumentFragment();\n  },\n  createTemplateElement: function createTemplateElement() {\n    var template = document.createElement('template');\n    return _FEATURE.ensureHTMLTemplateElement(template);\n  },\n  createMutationObserver: function createMutationObserver(callback) {\n    return new (window.MutationObserver || window.WebKitMutationObserver)(callback);\n  },\n  createCustomEvent: function createCustomEvent(eventType, options) {\n    return new window.CustomEvent(eventType, options);\n  },\n  dispatchEvent: function dispatchEvent(evt) {\n    document.dispatchEvent(evt);\n  },\n  getComputedStyle: function getComputedStyle(element) {\n    return window.getComputedStyle(element);\n  },\n  getElementById: function getElementById(id) {\n    return document.getElementById(id);\n  },\n  querySelector: function querySelector(query) {\n    return document.querySelector(query);\n  },\n  querySelectorAll: function querySelectorAll(query) {\n    return document.querySelectorAll(query);\n  },\n  nextElementSibling: function nextElementSibling(element) {\n    if (element.nextElementSibling) {\n      return element.nextElementSibling;\n    }\n    do {\n      element = element.nextSibling;\n    } while (element && element.nodeType !== 1);\n    return element;\n  },\n  createTemplateFromMarkup: function createTemplateFromMarkup(markup) {\n    var parser = document.createElement('div');\n    parser.innerHTML = markup;\n\n    var temp = parser.firstElementChild;\n    if (!temp || temp.nodeName !== 'TEMPLATE') {\n      throw new Error('Template markup must be wrapped in a <template> element e.g. <template> <!-- markup here --> </template>');\n    }\n\n    return _FEATURE.ensureHTMLTemplateElement(temp);\n  },\n  appendNode: function appendNode(newNode, parentNode) {\n    (parentNode || document.body).appendChild(newNode);\n  },\n  replaceNode: function replaceNode(newNode, node, parentNode) {\n    if (node.parentNode) {\n      node.parentNode.replaceChild(newNode, node);\n    } else if (shadowPoly !== null) {\n      shadowPoly.unwrap(parentNode).replaceChild(shadowPoly.unwrap(newNode), shadowPoly.unwrap(node));\n    } else {\n      parentNode.replaceChild(newNode, node);\n    }\n  },\n  removeNode: function removeNode(node, parentNode) {\n    if (node.parentNode) {\n      node.parentNode.removeChild(node);\n    } else if (parentNode) {\n      if (shadowPoly !== null) {\n        shadowPoly.unwrap(parentNode).removeChild(shadowPoly.unwrap(node));\n      } else {\n        parentNode.removeChild(node);\n      }\n    }\n  },\n  injectStyles: function injectStyles(styles, destination, prepend, id) {\n    if (id) {\n      var oldStyle = document.getElementById(id);\n      if (oldStyle) {\n        var isStyleTag = oldStyle.tagName.toLowerCase() === 'style';\n\n        if (isStyleTag) {\n          oldStyle.innerHTML = styles;\n          return;\n        }\n\n        throw new Error('The provided id does not indicate a style tag.');\n      }\n    }\n\n    var node = document.createElement('style');\n    node.innerHTML = styles;\n    node.type = 'text/css';\n\n    if (id) {\n      node.id = id;\n    }\n\n    destination = destination || document.head;\n\n    if (prepend && destination.childNodes.length > 0) {\n      destination.insertBefore(node, destination.childNodes[0]);\n    } else {\n      destination.appendChild(node);\n    }\n\n    return node;\n  }\n};\n\nexport function initialize() {\n  if (isInitialized) {\n    return;\n  }\n\n  initializePAL(function (platform, feature, dom) {\n    Object.assign(platform, _PLATFORM);\n    Object.assign(feature, _FEATURE);\n    Object.assign(dom, _DOM);\n\n    Object.defineProperty(dom, 'title', {\n      get: function get() {\n        return document.title;\n      },\n      set: function set(value) {\n        document.title = value;\n      }\n    });\n\n    Object.defineProperty(dom, 'activeElement', {\n      get: function get() {\n        return document.activeElement;\n      }\n    });\n\n    Object.defineProperty(platform, 'XMLHttpRequest', {\n      get: function get() {\n        return platform.global.XMLHttpRequest;\n      }\n    });\n  });\n}","\nexport function AggregateError(message, innerError, skipIfAlreadyAggregate) {\n  if (innerError) {\n    if (innerError.innerError && skipIfAlreadyAggregate) {\n      return innerError;\n    }\n\n    var separator = '\\n------------------------------------------------\\n';\n\n    message += separator + 'Inner Error:\\n';\n\n    if (typeof innerError === 'string') {\n      message += 'Message: ' + innerError;\n    } else {\n      if (innerError.message) {\n        message += 'Message: ' + innerError.message;\n      } else {\n        message += 'Unknown Inner Error Type. Displaying Inner Error as JSON:\\n ' + JSON.stringify(innerError, null, '  ');\n      }\n\n      if (innerError.stack) {\n        message += '\\nInner Error Stack:\\n' + innerError.stack;\n        message += '\\nEnd Inner Error Stack';\n      }\n    }\n\n    message += separator;\n  }\n\n  var e = new Error(message);\n  if (innerError) {\n    e.innerError = innerError;\n  }\n\n  return e;\n}\n\nexport var FEATURE = {};\n\nexport var PLATFORM = {\n  noop: function noop() {},\n  eachModule: function eachModule() {},\n  moduleName: function (_moduleName) {\n    function moduleName(_x) {\n      return _moduleName.apply(this, arguments);\n    }\n\n    moduleName.toString = function () {\n      return _moduleName.toString();\n    };\n\n    return moduleName;\n  }(function (moduleName) {\n    return moduleName;\n  })\n};\n\nPLATFORM.global = function () {\n  if (typeof self !== 'undefined') {\n    return self;\n  }\n\n  if (typeof global !== 'undefined') {\n    return global;\n  }\n\n  return new Function('return this')();\n}();\n\nexport var DOM = {};\nexport var isInitialized = false;\n\nexport function initializePAL(callback) {\n  if (isInitialized) {\n    return;\n  }\n  isInitialized = true;\n  if (typeof Object.getPropertyDescriptor !== 'function') {\n    Object.getPropertyDescriptor = function (subject, name) {\n      var pd = Object.getOwnPropertyDescriptor(subject, name);\n      var proto = Object.getPrototypeOf(subject);\n      while (typeof pd === 'undefined' && proto !== null) {\n        pd = Object.getOwnPropertyDescriptor(proto, name);\n        proto = Object.getPrototypeOf(proto);\n      }\n      return pd;\n    };\n  }\n\n  callback(PLATFORM, FEATURE, DOM);\n}\nexport function reset() {\n  isInitialized = false;\n}","function trimDots(ary) {\r\n    for (var i = 0; i < ary.length; ++i) {\r\n        var part = ary[i];\r\n        if (part === '.') {\r\n            ary.splice(i, 1);\r\n            i -= 1;\r\n        }\r\n        else if (part === '..') {\r\n            if (i === 0 || (i === 1 && ary[2] === '..') || ary[i - 1] === '..') {\r\n                continue;\r\n            }\r\n            else if (i > 0) {\r\n                ary.splice(i - 1, 2);\r\n                i -= 2;\r\n            }\r\n        }\r\n    }\r\n}\r\nfunction relativeToFile(name, file) {\r\n    var fileParts = file && file.split('/');\r\n    var nameParts = name.trim().split('/');\r\n    if (nameParts[0].charAt(0) === '.' && fileParts) {\r\n        var normalizedBaseParts = fileParts.slice(0, fileParts.length - 1);\r\n        nameParts.unshift.apply(nameParts, normalizedBaseParts);\r\n    }\r\n    trimDots(nameParts);\r\n    return nameParts.join('/');\r\n}\r\nfunction join(path1, path2) {\r\n    if (!path1) {\r\n        return path2;\r\n    }\r\n    if (!path2) {\r\n        return path1;\r\n    }\r\n    var schemeMatch = path1.match(/^([^/]*?:)\\//);\r\n    var scheme = (schemeMatch && schemeMatch.length > 0) ? schemeMatch[1] : '';\r\n    path1 = path1.substr(scheme.length);\r\n    var urlPrefix;\r\n    if (path1.indexOf('///') === 0 && scheme === 'file:') {\r\n        urlPrefix = '///';\r\n    }\r\n    else if (path1.indexOf('//') === 0) {\r\n        urlPrefix = '//';\r\n    }\r\n    else if (path1.indexOf('/') === 0) {\r\n        urlPrefix = '/';\r\n    }\r\n    else {\r\n        urlPrefix = '';\r\n    }\r\n    var trailingSlash = path2.slice(-1) === '/' ? '/' : '';\r\n    var url1 = path1.split('/');\r\n    var url2 = path2.split('/');\r\n    var url3 = [];\r\n    for (var i = 0, ii = url1.length; i < ii; ++i) {\r\n        if (url1[i] === '..') {\r\n            if (url3.length && url3[url3.length - 1] !== '..') {\r\n                url3.pop();\r\n            }\r\n            else {\r\n                url3.push(url1[i]);\r\n            }\r\n        }\r\n        else if (url1[i] === '.' || url1[i] === '') {\r\n            continue;\r\n        }\r\n        else {\r\n            url3.push(url1[i]);\r\n        }\r\n    }\r\n    for (var i = 0, ii = url2.length; i < ii; ++i) {\r\n        if (url2[i] === '..') {\r\n            if (url3.length && url3[url3.length - 1] !== '..') {\r\n                url3.pop();\r\n            }\r\n            else {\r\n                url3.push(url2[i]);\r\n            }\r\n        }\r\n        else if (url2[i] === '.' || url2[i] === '') {\r\n            continue;\r\n        }\r\n        else {\r\n            url3.push(url2[i]);\r\n        }\r\n    }\r\n    return scheme + urlPrefix + url3.join('/') + trailingSlash;\r\n}\r\nvar encode = encodeURIComponent;\r\nvar encodeKey = function (k) { return encode(k).replace('%24', '$'); };\r\nfunction buildParam(key, value, traditional) {\r\n    var result = [];\r\n    if (value === null || value === undefined) {\r\n        return result;\r\n    }\r\n    if (Array.isArray(value)) {\r\n        for (var i = 0, l = value.length; i < l; i++) {\r\n            if (traditional) {\r\n                result.push(encodeKey(key) + \"=\" + encode(value[i]));\r\n            }\r\n            else {\r\n                var arrayKey = key + '[' + (typeof value[i] === 'object' && value[i] !== null ? i : '') + ']';\r\n                result = result.concat(buildParam(arrayKey, value[i]));\r\n            }\r\n        }\r\n    }\r\n    else if (typeof (value) === 'object' && !traditional) {\r\n        for (var propertyName in value) {\r\n            result = result.concat(buildParam(key + '[' + propertyName + ']', value[propertyName]));\r\n        }\r\n    }\r\n    else {\r\n        result.push(encodeKey(key) + \"=\" + encode(value));\r\n    }\r\n    return result;\r\n}\r\nfunction buildQueryString(params, traditional) {\r\n    var pairs = [];\r\n    var keys = Object.keys(params || {}).sort();\r\n    for (var i = 0, len = keys.length; i < len; i++) {\r\n        var key = keys[i];\r\n        pairs = pairs.concat(buildParam(key, params[key], traditional));\r\n    }\r\n    if (pairs.length === 0) {\r\n        return '';\r\n    }\r\n    return pairs.join('&');\r\n}\r\nfunction processScalarParam(existedParam, value) {\r\n    if (Array.isArray(existedParam)) {\r\n        existedParam.push(value);\r\n        return existedParam;\r\n    }\r\n    if (existedParam !== undefined) {\r\n        return [existedParam, value];\r\n    }\r\n    return value;\r\n}\r\nfunction parseComplexParam(queryParams, keys, value) {\r\n    var currentParams = queryParams;\r\n    var keysLastIndex = keys.length - 1;\r\n    for (var j = 0; j <= keysLastIndex; j++) {\r\n        var key = keys[j] === '' ? currentParams.length : keys[j];\r\n        preventPollution(key);\r\n        if (j < keysLastIndex) {\r\n            var prevValue = !currentParams[key] || typeof currentParams[key] === 'object' ? currentParams[key] : [currentParams[key]];\r\n            currentParams = currentParams[key] = prevValue || (isNaN(keys[j + 1]) ? {} : []);\r\n        }\r\n        else {\r\n            currentParams = currentParams[key] = value;\r\n        }\r\n    }\r\n}\r\nfunction parseQueryString(queryString) {\r\n    var queryParams = {};\r\n    if (!queryString || typeof queryString !== 'string') {\r\n        return queryParams;\r\n    }\r\n    var query = queryString;\r\n    if (query.charAt(0) === '?') {\r\n        query = query.substr(1);\r\n    }\r\n    var pairs = query.replace(/\\+/g, ' ').split('&');\r\n    for (var i = 0; i < pairs.length; i++) {\r\n        var pair = pairs[i].split('=');\r\n        var key = decodeURIComponent(pair[0]);\r\n        if (!key) {\r\n            continue;\r\n        }\r\n        var keys = key.split('][');\r\n        var keysLastIndex = keys.length - 1;\r\n        if (/\\[/.test(keys[0]) && /\\]$/.test(keys[keysLastIndex])) {\r\n            keys[keysLastIndex] = keys[keysLastIndex].replace(/\\]$/, '');\r\n            keys = keys.shift().split('[').concat(keys);\r\n            keysLastIndex = keys.length - 1;\r\n        }\r\n        else {\r\n            keysLastIndex = 0;\r\n        }\r\n        if (pair.length >= 2) {\r\n            var value = pair[1] ? decodeURIComponent(pair[1]) : '';\r\n            if (keysLastIndex) {\r\n                parseComplexParam(queryParams, keys, value);\r\n            }\r\n            else {\r\n                preventPollution(key);\r\n                queryParams[key] = processScalarParam(queryParams[key], value);\r\n            }\r\n        }\r\n        else {\r\n            queryParams[key] = true;\r\n        }\r\n    }\r\n    return queryParams;\r\n}\r\nfunction preventPollution(key) {\r\n    if (key === '__proto__') {\r\n        throw new Error('Prototype pollution detected.');\r\n    }\r\n}\n\nexport { buildQueryString, join, parseQueryString, relativeToFile };\n//# sourceMappingURL=aurelia-path.js.map\n","\n\nimport { buildQueryString, parseQueryString } from 'aurelia-path';\n\nexport var State = function () {\n  function State(charSpec) {\n    \n\n    this.charSpec = charSpec;\n    this.nextStates = [];\n  }\n\n  State.prototype.get = function get(charSpec) {\n    for (var _iterator = this.nextStates, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n      var _ref;\n\n      if (_isArray) {\n        if (_i >= _iterator.length) break;\n        _ref = _iterator[_i++];\n      } else {\n        _i = _iterator.next();\n        if (_i.done) break;\n        _ref = _i.value;\n      }\n\n      var child = _ref;\n\n      var isEqual = child.charSpec.validChars === charSpec.validChars && child.charSpec.invalidChars === charSpec.invalidChars;\n\n      if (isEqual) {\n        return child;\n      }\n    }\n\n    return undefined;\n  };\n\n  State.prototype.put = function put(charSpec) {\n    var state = this.get(charSpec);\n\n    if (state) {\n      return state;\n    }\n\n    state = new State(charSpec);\n\n    this.nextStates.push(state);\n\n    if (charSpec.repeat) {\n      state.nextStates.push(state);\n    }\n\n    return state;\n  };\n\n  State.prototype.match = function match(ch) {\n    var nextStates = this.nextStates;\n    var results = [];\n\n    for (var i = 0, l = nextStates.length; i < l; i++) {\n      var child = nextStates[i];\n      var charSpec = child.charSpec;\n\n      if (charSpec.validChars !== undefined) {\n        if (charSpec.validChars.indexOf(ch) !== -1) {\n          results.push(child);\n        }\n      } else if (charSpec.invalidChars !== undefined) {\n        if (charSpec.invalidChars.indexOf(ch) === -1) {\n          results.push(child);\n        }\n      }\n    }\n\n    return results;\n  };\n\n  return State;\n}();\n\nvar specials = ['/', '.', '*', '+', '?', '|', '(', ')', '[', ']', '{', '}', '\\\\'];\n\nvar escapeRegex = new RegExp('(\\\\' + specials.join('|\\\\') + ')', 'g');\n\nexport var StaticSegment = function () {\n  function StaticSegment(string, caseSensitive) {\n    \n\n    this.string = string;\n    this.caseSensitive = caseSensitive;\n  }\n\n  StaticSegment.prototype.eachChar = function eachChar(callback) {\n    var s = this.string;\n    for (var i = 0, ii = s.length; i < ii; ++i) {\n      var ch = s[i];\n      callback({ validChars: this.caseSensitive ? ch : ch.toUpperCase() + ch.toLowerCase() });\n    }\n  };\n\n  StaticSegment.prototype.regex = function regex() {\n    return this.string.replace(escapeRegex, '\\\\$1');\n  };\n\n  StaticSegment.prototype.generate = function generate() {\n    return this.string;\n  };\n\n  return StaticSegment;\n}();\n\nexport var DynamicSegment = function () {\n  function DynamicSegment(name, optional) {\n    \n\n    this.name = name;\n    this.optional = optional;\n  }\n\n  DynamicSegment.prototype.eachChar = function eachChar(callback) {\n    callback({ invalidChars: '/', repeat: true });\n  };\n\n  DynamicSegment.prototype.regex = function regex() {\n    return '([^/]+)';\n  };\n\n  DynamicSegment.prototype.generate = function generate(params, consumed) {\n    consumed[this.name] = true;\n    return params[this.name];\n  };\n\n  return DynamicSegment;\n}();\n\nexport var StarSegment = function () {\n  function StarSegment(name) {\n    \n\n    this.name = name;\n  }\n\n  StarSegment.prototype.eachChar = function eachChar(callback) {\n    callback({ invalidChars: '', repeat: true });\n  };\n\n  StarSegment.prototype.regex = function regex() {\n    return '(.+)';\n  };\n\n  StarSegment.prototype.generate = function generate(params, consumed) {\n    consumed[this.name] = true;\n    return params[this.name];\n  };\n\n  return StarSegment;\n}();\n\nexport var EpsilonSegment = function () {\n  function EpsilonSegment() {\n    \n  }\n\n  EpsilonSegment.prototype.eachChar = function eachChar() {};\n\n  EpsilonSegment.prototype.regex = function regex() {\n    return '';\n  };\n\n  EpsilonSegment.prototype.generate = function generate() {\n    return '';\n  };\n\n  return EpsilonSegment;\n}();\n\nexport var RouteRecognizer = function () {\n  function RouteRecognizer() {\n    \n\n    this.rootState = new State();\n    this.names = {};\n    this.routes = new Map();\n  }\n\n  RouteRecognizer.prototype.add = function add(route) {\n    var _this = this;\n\n    if (Array.isArray(route)) {\n      route.forEach(function (r) {\n        return _this.add(r);\n      });\n      return undefined;\n    }\n\n    var currentState = this.rootState;\n    var skippableStates = [];\n    var regex = '^';\n    var types = { statics: 0, dynamics: 0, stars: 0 };\n    var names = [];\n    var routeName = route.handler.name;\n    var isEmpty = true;\n    var segments = parse(route.path, names, types, route.caseSensitive);\n\n    for (var i = 0, ii = segments.length; i < ii; i++) {\n      var segment = segments[i];\n      if (segment instanceof EpsilonSegment) {\n        continue;\n      }\n\n      var _addSegment = addSegment(currentState, segment),\n          firstState = _addSegment[0],\n          nextState = _addSegment[1];\n\n      for (var j = 0, jj = skippableStates.length; j < jj; j++) {\n        skippableStates[j].nextStates.push(firstState);\n      }\n\n      if (segment.optional) {\n        skippableStates.push(nextState);\n        regex += '(?:/' + segment.regex() + ')?';\n      } else {\n        currentState = nextState;\n        regex += '/' + segment.regex();\n        skippableStates.length = 0;\n        isEmpty = false;\n      }\n    }\n\n    if (isEmpty) {\n      currentState = currentState.put({ validChars: '/' });\n      regex += '/?';\n    }\n\n    var handlers = [{ handler: route.handler, names: names }];\n\n    this.routes.set(route.handler, { segments: segments, handlers: handlers });\n    if (routeName) {\n      var routeNames = Array.isArray(routeName) ? routeName : [routeName];\n      for (var _i2 = 0; _i2 < routeNames.length; _i2++) {\n        if (!(routeNames[_i2] in this.names)) {\n          this.names[routeNames[_i2]] = { segments: segments, handlers: handlers };\n        }\n      }\n    }\n\n    for (var _i3 = 0; _i3 < skippableStates.length; _i3++) {\n      var state = skippableStates[_i3];\n      state.handlers = handlers;\n      state.regex = new RegExp(regex + '$', route.caseSensitive ? '' : 'i');\n      state.types = types;\n    }\n\n    currentState.handlers = handlers;\n    currentState.regex = new RegExp(regex + '$', route.caseSensitive ? '' : 'i');\n    currentState.types = types;\n\n    return currentState;\n  };\n\n  RouteRecognizer.prototype.getRoute = function getRoute(nameOrRoute) {\n    return typeof nameOrRoute === 'string' ? this.names[nameOrRoute] : this.routes.get(nameOrRoute);\n  };\n\n  RouteRecognizer.prototype.handlersFor = function handlersFor(nameOrRoute) {\n    var route = this.getRoute(nameOrRoute);\n    if (!route) {\n      throw new Error('There is no route named ' + nameOrRoute);\n    }\n\n    return [].concat(route.handlers);\n  };\n\n  RouteRecognizer.prototype.hasRoute = function hasRoute(nameOrRoute) {\n    return !!this.getRoute(nameOrRoute);\n  };\n\n  RouteRecognizer.prototype.generate = function generate(nameOrRoute, params) {\n    var route = this.getRoute(nameOrRoute);\n    if (!route) {\n      throw new Error('There is no route named ' + nameOrRoute);\n    }\n\n    var handler = route.handlers[0].handler;\n    if (handler.generationUsesHref) {\n      return handler.href;\n    }\n\n    var routeParams = Object.assign({}, params);\n    var segments = route.segments;\n    var consumed = {};\n    var output = '';\n\n    for (var i = 0, l = segments.length; i < l; i++) {\n      var segment = segments[i];\n\n      if (segment instanceof EpsilonSegment) {\n        continue;\n      }\n\n      var segmentValue = segment.generate(routeParams, consumed);\n      if (segmentValue === null || segmentValue === undefined) {\n        if (!segment.optional) {\n          throw new Error('A value is required for route parameter \\'' + segment.name + '\\' in route \\'' + nameOrRoute + '\\'.');\n        }\n      } else {\n        output += '/';\n        output += segmentValue;\n      }\n    }\n\n    if (output.charAt(0) !== '/') {\n      output = '/' + output;\n    }\n\n    for (var param in consumed) {\n      delete routeParams[param];\n    }\n\n    var queryString = buildQueryString(routeParams);\n    output += queryString ? '?' + queryString : '';\n\n    return output;\n  };\n\n  RouteRecognizer.prototype.recognize = function recognize(path) {\n    var states = [this.rootState];\n    var queryParams = {};\n    var isSlashDropped = false;\n    var normalizedPath = path;\n\n    var queryStart = normalizedPath.indexOf('?');\n    if (queryStart !== -1) {\n      var queryString = normalizedPath.substr(queryStart + 1, normalizedPath.length);\n      normalizedPath = normalizedPath.substr(0, queryStart);\n      queryParams = parseQueryString(queryString);\n    }\n\n    normalizedPath = decodeURI(normalizedPath);\n\n    if (normalizedPath.charAt(0) !== '/') {\n      normalizedPath = '/' + normalizedPath;\n    }\n\n    var pathLen = normalizedPath.length;\n    if (pathLen > 1 && normalizedPath.charAt(pathLen - 1) === '/') {\n      normalizedPath = normalizedPath.substr(0, pathLen - 1);\n      isSlashDropped = true;\n    }\n\n    for (var i = 0, l = normalizedPath.length; i < l; i++) {\n      states = recognizeChar(states, normalizedPath.charAt(i));\n      if (!states.length) {\n        break;\n      }\n    }\n\n    var solutions = [];\n    for (var _i4 = 0, _l = states.length; _i4 < _l; _i4++) {\n      if (states[_i4].handlers) {\n        solutions.push(states[_i4]);\n      }\n    }\n\n    states = sortSolutions(solutions);\n\n    var state = solutions[0];\n    if (state && state.handlers) {\n      if (isSlashDropped && state.regex.source.slice(-5) === '(.+)$') {\n        normalizedPath = normalizedPath + '/';\n      }\n\n      return findHandler(state, normalizedPath, queryParams);\n    }\n  };\n\n  return RouteRecognizer;\n}();\n\nvar RecognizeResults = function RecognizeResults(queryParams) {\n  \n\n  this.splice = Array.prototype.splice;\n  this.slice = Array.prototype.slice;\n  this.push = Array.prototype.push;\n  this.length = 0;\n  this.queryParams = queryParams || {};\n};\n\nfunction parse(route, names, types, caseSensitive) {\n  var normalizedRoute = route;\n  if (route.charAt(0) === '/') {\n    normalizedRoute = route.substr(1);\n  }\n\n  var results = [];\n\n  var splitRoute = normalizedRoute.split('/');\n  for (var i = 0, ii = splitRoute.length; i < ii; ++i) {\n    var segment = splitRoute[i];\n\n    var match = segment.match(/^:([^?]+)(\\?)?$/);\n    if (match) {\n      var _match = match,\n          _name = _match[1],\n          optional = _match[2];\n\n      if (_name.indexOf('=') !== -1) {\n        throw new Error('Parameter ' + _name + ' in route ' + route + ' has a default value, which is not supported.');\n      }\n      results.push(new DynamicSegment(_name, !!optional));\n      names.push(_name);\n      types.dynamics++;\n      continue;\n    }\n\n    match = segment.match(/^\\*(.+)$/);\n    if (match) {\n      results.push(new StarSegment(match[1]));\n      names.push(match[1]);\n      types.stars++;\n    } else if (segment === '') {\n      results.push(new EpsilonSegment());\n    } else {\n      results.push(new StaticSegment(segment, caseSensitive));\n      types.statics++;\n    }\n  }\n\n  return results;\n}\n\nfunction sortSolutions(states) {\n  return states.sort(function (a, b) {\n    if (a.types.stars !== b.types.stars) {\n      return a.types.stars - b.types.stars;\n    }\n\n    if (a.types.stars) {\n      if (a.types.statics !== b.types.statics) {\n        return b.types.statics - a.types.statics;\n      }\n      if (a.types.dynamics !== b.types.dynamics) {\n        return b.types.dynamics - a.types.dynamics;\n      }\n    }\n\n    if (a.types.dynamics !== b.types.dynamics) {\n      return a.types.dynamics - b.types.dynamics;\n    }\n\n    if (a.types.statics !== b.types.statics) {\n      return b.types.statics - a.types.statics;\n    }\n\n    return 0;\n  });\n}\n\nfunction recognizeChar(states, ch) {\n  var nextStates = [];\n\n  for (var i = 0, l = states.length; i < l; i++) {\n    var state = states[i];\n    nextStates.push.apply(nextStates, state.match(ch));\n  }\n\n  return nextStates;\n}\n\nfunction findHandler(state, path, queryParams) {\n  var handlers = state.handlers;\n  var regex = state.regex;\n  var captures = path.match(regex);\n  var currentCapture = 1;\n  var result = new RecognizeResults(queryParams);\n\n  for (var i = 0, l = handlers.length; i < l; i++) {\n    var _handler = handlers[i];\n    var _names = _handler.names;\n    var _params = {};\n\n    for (var j = 0, m = _names.length; j < m; j++) {\n      _params[_names[j]] = captures[currentCapture++];\n    }\n\n    result.push({ handler: _handler.handler, params: _params, isDynamic: !!_names.length });\n  }\n\n  return result;\n}\n\nfunction addSegment(currentState, segment) {\n  var firstState = currentState.put({ validChars: '/' });\n  var nextState = firstState;\n  segment.eachChar(function (ch) {\n    nextState = nextState.put(ch);\n  });\n\n  return [firstState, nextState];\n}","import { getLogger } from 'aurelia-logging';\nimport { Container } from 'aurelia-dependency-injection';\nimport { History } from 'aurelia-history';\nimport { RouteRecognizer } from 'aurelia-route-recognizer';\nimport { EventAggregator } from 'aurelia-event-aggregator';\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n    extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n    return extendStatics(d, b);\r\n};\r\n\r\nfunction __extends(d, b) {\r\n    extendStatics(d, b);\r\n    function __() { this.constructor = d; }\r\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\n\n/**\r\n * Class used to represent an instruction during a navigation.\r\n */\r\nvar NavigationInstruction = /** @class */ (function () {\r\n    function NavigationInstruction(init) {\r\n        /**\r\n         * Current built viewport plan of this nav instruction\r\n         */\r\n        this.plan = null;\r\n        this.options = {};\r\n        Object.assign(this, init);\r\n        this.params = this.params || {};\r\n        this.viewPortInstructions = {};\r\n        var ancestorParams = [];\r\n        var current = this;\r\n        do {\r\n            var currentParams = Object.assign({}, current.params);\r\n            if (current.config && current.config.hasChildRouter) {\r\n                // remove the param for the injected child route segment\r\n                delete currentParams[current.getWildCardName()];\r\n            }\r\n            ancestorParams.unshift(currentParams);\r\n            current = current.parentInstruction;\r\n        } while (current);\r\n        var allParams = Object.assign.apply(Object, [{}, this.queryParams].concat(ancestorParams));\r\n        this.lifecycleArgs = [allParams, this.config, this];\r\n    }\r\n    /**\r\n     * Gets an array containing this instruction and all child instructions for the current navigation.\r\n     */\r\n    NavigationInstruction.prototype.getAllInstructions = function () {\r\n        var instructions = [this];\r\n        var viewPortInstructions = this.viewPortInstructions;\r\n        for (var key in viewPortInstructions) {\r\n            var childInstruction = viewPortInstructions[key].childNavigationInstruction;\r\n            if (childInstruction) {\r\n                instructions.push.apply(instructions, childInstruction.getAllInstructions());\r\n            }\r\n        }\r\n        return instructions;\r\n    };\r\n    /**\r\n     * Gets an array containing the instruction and all child instructions for the previous navigation.\r\n     * Previous instructions are no longer available after navigation completes.\r\n     */\r\n    NavigationInstruction.prototype.getAllPreviousInstructions = function () {\r\n        return this.getAllInstructions().map(function (c) { return c.previousInstruction; }).filter(function (c) { return c; });\r\n    };\r\n    NavigationInstruction.prototype.addViewPortInstruction = function (nameOrInitOptions, strategy, moduleId, component) {\r\n        var viewPortInstruction;\r\n        var viewPortName = typeof nameOrInitOptions === 'string' ? nameOrInitOptions : nameOrInitOptions.name;\r\n        var lifecycleArgs = this.lifecycleArgs;\r\n        var config = Object.assign({}, lifecycleArgs[1], { currentViewPort: viewPortName });\r\n        if (typeof nameOrInitOptions === 'string') {\r\n            viewPortInstruction = {\r\n                name: nameOrInitOptions,\r\n                strategy: strategy,\r\n                moduleId: moduleId,\r\n                component: component,\r\n                childRouter: component.childRouter,\r\n                lifecycleArgs: [lifecycleArgs[0], config, lifecycleArgs[2]]\r\n            };\r\n        }\r\n        else {\r\n            viewPortInstruction = {\r\n                name: viewPortName,\r\n                strategy: nameOrInitOptions.strategy,\r\n                component: nameOrInitOptions.component,\r\n                moduleId: nameOrInitOptions.moduleId,\r\n                childRouter: nameOrInitOptions.component.childRouter,\r\n                lifecycleArgs: [lifecycleArgs[0], config, lifecycleArgs[2]]\r\n            };\r\n        }\r\n        return this.viewPortInstructions[viewPortName] = viewPortInstruction;\r\n    };\r\n    /**\r\n     * Gets the name of the route pattern's wildcard parameter, if applicable.\r\n     */\r\n    NavigationInstruction.prototype.getWildCardName = function () {\r\n        // todo: potential issue, or at least unsafe typings\r\n        var configRoute = this.config.route;\r\n        var wildcardIndex = configRoute.lastIndexOf('*');\r\n        return configRoute.substr(wildcardIndex + 1);\r\n    };\r\n    /**\r\n     * Gets the path and query string created by filling the route\r\n     * pattern's wildcard parameter with the matching param.\r\n     */\r\n    NavigationInstruction.prototype.getWildcardPath = function () {\r\n        var wildcardName = this.getWildCardName();\r\n        var path = this.params[wildcardName] || '';\r\n        var queryString = this.queryString;\r\n        if (queryString) {\r\n            path += '?' + queryString;\r\n        }\r\n        return path;\r\n    };\r\n    /**\r\n     * Gets the instruction's base URL, accounting for wildcard route parameters.\r\n     */\r\n    NavigationInstruction.prototype.getBaseUrl = function () {\r\n        var _this = this;\r\n        var $encodeURI = encodeURI;\r\n        var fragment = decodeURI(this.fragment);\r\n        if (fragment === '') {\r\n            var nonEmptyRoute = this.router.routes.find(function (route) {\r\n                return route.name === _this.config.name &&\r\n                    route.route !== '';\r\n            });\r\n            if (nonEmptyRoute) {\r\n                fragment = nonEmptyRoute.route;\r\n            }\r\n        }\r\n        if (!this.params) {\r\n            return $encodeURI(fragment);\r\n        }\r\n        var wildcardName = this.getWildCardName();\r\n        var path = this.params[wildcardName] || '';\r\n        if (!path) {\r\n            return $encodeURI(fragment);\r\n        }\r\n        return $encodeURI(fragment.substr(0, fragment.lastIndexOf(path)));\r\n    };\r\n    /**\r\n     * Finalize a viewport instruction\r\n     * @internal\r\n     */\r\n    NavigationInstruction.prototype._commitChanges = function (waitToSwap) {\r\n        var _this = this;\r\n        var router = this.router;\r\n        router.currentInstruction = this;\r\n        var previousInstruction = this.previousInstruction;\r\n        if (previousInstruction) {\r\n            previousInstruction.config.navModel.isActive = false;\r\n        }\r\n        this.config.navModel.isActive = true;\r\n        router.refreshNavigation();\r\n        var loads = [];\r\n        var delaySwaps = [];\r\n        var viewPortInstructions = this.viewPortInstructions;\r\n        var _loop_1 = function (viewPortName) {\r\n            var viewPortInstruction = viewPortInstructions[viewPortName];\r\n            var viewPort = router.viewPorts[viewPortName];\r\n            if (!viewPort) {\r\n                throw new Error(\"There was no router-view found in the view for \" + viewPortInstruction.moduleId + \".\");\r\n            }\r\n            var childNavInstruction = viewPortInstruction.childNavigationInstruction;\r\n            if (viewPortInstruction.strategy === \"replace\" /* Replace */) {\r\n                if (childNavInstruction && childNavInstruction.parentCatchHandler) {\r\n                    loads.push(childNavInstruction._commitChanges(waitToSwap));\r\n                }\r\n                else {\r\n                    if (waitToSwap) {\r\n                        delaySwaps.push({ viewPort: viewPort, viewPortInstruction: viewPortInstruction });\r\n                    }\r\n                    loads.push(viewPort\r\n                        .process(viewPortInstruction, waitToSwap)\r\n                        .then(function () { return childNavInstruction\r\n                        ? childNavInstruction._commitChanges(waitToSwap)\r\n                        : Promise.resolve(); }));\r\n                }\r\n            }\r\n            else {\r\n                if (childNavInstruction) {\r\n                    loads.push(childNavInstruction._commitChanges(waitToSwap));\r\n                }\r\n            }\r\n        };\r\n        for (var viewPortName in viewPortInstructions) {\r\n            _loop_1(viewPortName);\r\n        }\r\n        return Promise\r\n            .all(loads)\r\n            .then(function () {\r\n            delaySwaps.forEach(function (x) { return x.viewPort.swap(x.viewPortInstruction); });\r\n            return null;\r\n        })\r\n            .then(function () { return prune(_this); });\r\n    };\r\n    /**@internal */\r\n    NavigationInstruction.prototype._updateTitle = function () {\r\n        var router = this.router;\r\n        var title = this._buildTitle(router.titleSeparator);\r\n        if (title) {\r\n            router.history.setTitle(title);\r\n        }\r\n    };\r\n    /**@internal */\r\n    NavigationInstruction.prototype._buildTitle = function (separator) {\r\n        if (separator === void 0) { separator = ' | '; }\r\n        var title = '';\r\n        var childTitles = [];\r\n        var navModelTitle = this.config.navModel.title;\r\n        var instructionRouter = this.router;\r\n        var viewPortInstructions = this.viewPortInstructions;\r\n        if (navModelTitle) {\r\n            title = instructionRouter.transformTitle(navModelTitle);\r\n        }\r\n        for (var viewPortName in viewPortInstructions) {\r\n            var viewPortInstruction = viewPortInstructions[viewPortName];\r\n            var child_nav_instruction = viewPortInstruction.childNavigationInstruction;\r\n            if (child_nav_instruction) {\r\n                var childTitle = child_nav_instruction._buildTitle(separator);\r\n                if (childTitle) {\r\n                    childTitles.push(childTitle);\r\n                }\r\n            }\r\n        }\r\n        if (childTitles.length) {\r\n            title = childTitles.join(separator) + (title ? separator : '') + title;\r\n        }\r\n        if (instructionRouter.title) {\r\n            title += (title ? separator : '') + instructionRouter.transformTitle(instructionRouter.title);\r\n        }\r\n        return title;\r\n    };\r\n    return NavigationInstruction;\r\n}());\r\nvar prune = function (instruction) {\r\n    instruction.previousInstruction = null;\r\n    instruction.plan = null;\r\n};\n\n/**\r\n* Class for storing and interacting with a route's navigation settings.\r\n*/\r\nvar NavModel = /** @class */ (function () {\r\n    function NavModel(router, relativeHref) {\r\n        /**\r\n        * True if this nav item is currently active.\r\n        */\r\n        this.isActive = false;\r\n        /**\r\n        * The title.\r\n        */\r\n        this.title = null;\r\n        /**\r\n        * This nav item's absolute href.\r\n        */\r\n        this.href = null;\r\n        /**\r\n        * This nav item's relative href.\r\n        */\r\n        this.relativeHref = null;\r\n        /**\r\n        * Data attached to the route at configuration time.\r\n        */\r\n        this.settings = {};\r\n        /**\r\n        * The route config.\r\n        */\r\n        this.config = null;\r\n        this.router = router;\r\n        this.relativeHref = relativeHref;\r\n    }\r\n    /**\r\n    * Sets the route's title and updates document.title.\r\n    *  If the a navigation is in progress, the change will be applied\r\n    *  to document.title when the navigation completes.\r\n    *\r\n    * @param title The new title.\r\n    */\r\n    NavModel.prototype.setTitle = function (title) {\r\n        this.title = title;\r\n        if (this.isActive) {\r\n            this.router.updateTitle();\r\n        }\r\n    };\r\n    return NavModel;\r\n}());\n\nfunction _normalizeAbsolutePath(path, hasPushState, absolute) {\r\n    if (absolute === void 0) { absolute = false; }\r\n    if (!hasPushState && path[0] !== '#') {\r\n        path = '#' + path;\r\n    }\r\n    if (hasPushState && absolute) {\r\n        path = path.substring(1, path.length);\r\n    }\r\n    return path;\r\n}\r\nfunction _createRootedPath(fragment, baseUrl, hasPushState, absolute) {\r\n    if (isAbsoluteUrl.test(fragment)) {\r\n        return fragment;\r\n    }\r\n    var path = '';\r\n    if (baseUrl.length && baseUrl[0] !== '/') {\r\n        path += '/';\r\n    }\r\n    path += baseUrl;\r\n    if ((!path.length || path[path.length - 1] !== '/') && fragment[0] !== '/') {\r\n        path += '/';\r\n    }\r\n    if (path.length && path[path.length - 1] === '/' && fragment[0] === '/') {\r\n        path = path.substring(0, path.length - 1);\r\n    }\r\n    return _normalizeAbsolutePath(path + fragment, hasPushState, absolute);\r\n}\r\nfunction _resolveUrl(fragment, baseUrl, hasPushState) {\r\n    if (isRootedPath.test(fragment)) {\r\n        return _normalizeAbsolutePath(fragment, hasPushState);\r\n    }\r\n    return _createRootedPath(fragment, baseUrl, hasPushState);\r\n}\r\nfunction _ensureArrayWithSingleRoutePerConfig(config) {\r\n    var routeConfigs = [];\r\n    if (Array.isArray(config.route)) {\r\n        for (var i = 0, ii = config.route.length; i < ii; ++i) {\r\n            var current = Object.assign({}, config);\r\n            current.route = config.route[i];\r\n            routeConfigs.push(current);\r\n        }\r\n    }\r\n    else {\r\n        routeConfigs.push(Object.assign({}, config));\r\n    }\r\n    return routeConfigs;\r\n}\r\nvar isRootedPath = /^#?\\//;\r\nvar isAbsoluteUrl = /^([a-z][a-z0-9+\\-.]*:)?\\/\\//i;\n\n/**\r\n * Class used to configure a [[Router]] instance.\r\n *\r\n * @constructor\r\n */\r\nvar RouterConfiguration = /** @class */ (function () {\r\n    function RouterConfiguration() {\r\n        this.instructions = [];\r\n        this.options = {};\r\n        this.pipelineSteps = [];\r\n    }\r\n    /**\r\n     * Adds a step to be run during the [[Router]]'s navigation pipeline.\r\n     *\r\n     * @param name The name of the pipeline slot to insert the step into.\r\n     * @param step The pipeline step.\r\n     * @chainable\r\n     */\r\n    RouterConfiguration.prototype.addPipelineStep = function (name, step) {\r\n        if (step === null || step === undefined) {\r\n            throw new Error('Pipeline step cannot be null or undefined.');\r\n        }\r\n        this.pipelineSteps.push({ name: name, step: step });\r\n        return this;\r\n    };\r\n    /**\r\n     * Adds a step to be run during the [[Router]]'s authorize pipeline slot.\r\n     *\r\n     * @param step The pipeline step.\r\n     * @chainable\r\n     */\r\n    RouterConfiguration.prototype.addAuthorizeStep = function (step) {\r\n        return this.addPipelineStep(\"authorize\" /* Authorize */, step);\r\n    };\r\n    /**\r\n     * Adds a step to be run during the [[Router]]'s preActivate pipeline slot.\r\n     *\r\n     * @param step The pipeline step.\r\n     * @chainable\r\n     */\r\n    RouterConfiguration.prototype.addPreActivateStep = function (step) {\r\n        return this.addPipelineStep(\"preActivate\" /* PreActivate */, step);\r\n    };\r\n    /**\r\n     * Adds a step to be run during the [[Router]]'s preRender pipeline slot.\r\n     *\r\n     * @param step The pipeline step.\r\n     * @chainable\r\n     */\r\n    RouterConfiguration.prototype.addPreRenderStep = function (step) {\r\n        return this.addPipelineStep(\"preRender\" /* PreRender */, step);\r\n    };\r\n    /**\r\n     * Adds a step to be run during the [[Router]]'s postRender pipeline slot.\r\n     *\r\n     * @param step The pipeline step.\r\n     * @chainable\r\n     */\r\n    RouterConfiguration.prototype.addPostRenderStep = function (step) {\r\n        return this.addPipelineStep(\"postRender\" /* PostRender */, step);\r\n    };\r\n    /**\r\n     * Configures a route that will be used if there is no previous location available on navigation cancellation.\r\n     *\r\n     * @param fragment The URL fragment to use as the navigation destination.\r\n     * @chainable\r\n     */\r\n    RouterConfiguration.prototype.fallbackRoute = function (fragment) {\r\n        this._fallbackRoute = fragment;\r\n        return this;\r\n    };\r\n    /**\r\n     * Maps one or more routes to be registered with the router.\r\n     *\r\n     * @param route The [[RouteConfig]] to map, or an array of [[RouteConfig]] to map.\r\n     * @chainable\r\n     */\r\n    RouterConfiguration.prototype.map = function (route) {\r\n        var _this = this;\r\n        if (Array.isArray(route)) {\r\n            route.forEach(function (r) { return _this.map(r); });\r\n            return this;\r\n        }\r\n        return this.mapRoute(route);\r\n    };\r\n    /**\r\n     * Configures defaults to use for any view ports.\r\n     *\r\n     * @param viewPortConfig a view port configuration object to use as a\r\n     *  default, of the form { viewPortName: { moduleId } }.\r\n     * @chainable\r\n     */\r\n    RouterConfiguration.prototype.useViewPortDefaults = function (viewPortConfig) {\r\n        this.viewPortDefaults = viewPortConfig;\r\n        return this;\r\n    };\r\n    /**\r\n     * Maps a single route to be registered with the router.\r\n     *\r\n     * @param route The [[RouteConfig]] to map.\r\n     * @chainable\r\n     */\r\n    RouterConfiguration.prototype.mapRoute = function (config) {\r\n        this.instructions.push(function (router) {\r\n            var routeConfigs = _ensureArrayWithSingleRoutePerConfig(config);\r\n            var navModel;\r\n            for (var i = 0, ii = routeConfigs.length; i < ii; ++i) {\r\n                var routeConfig = routeConfigs[i];\r\n                routeConfig.settings = routeConfig.settings || {};\r\n                if (!navModel) {\r\n                    navModel = router.createNavModel(routeConfig);\r\n                }\r\n                router.addRoute(routeConfig, navModel);\r\n            }\r\n        });\r\n        return this;\r\n    };\r\n    /**\r\n     * Registers an unknown route handler to be run when the URL fragment doesn't match any registered routes.\r\n     *\r\n     * @param config A string containing a moduleId to load, or a [[RouteConfig]], or a function that takes the\r\n     *  [[NavigationInstruction]] and selects a moduleId to load.\r\n     * @chainable\r\n     */\r\n    RouterConfiguration.prototype.mapUnknownRoutes = function (config) {\r\n        this.unknownRouteConfig = config;\r\n        return this;\r\n    };\r\n    /**\r\n     * Applies the current configuration to the specified [[Router]].\r\n     *\r\n     * @param router The [[Router]] to apply the configuration to.\r\n     */\r\n    RouterConfiguration.prototype.exportToRouter = function (router) {\r\n        var instructions = this.instructions;\r\n        for (var i = 0, ii = instructions.length; i < ii; ++i) {\r\n            instructions[i](router);\r\n        }\r\n        var _a = this, title = _a.title, titleSeparator = _a.titleSeparator, unknownRouteConfig = _a.unknownRouteConfig, _fallbackRoute = _a._fallbackRoute, viewPortDefaults = _a.viewPortDefaults;\r\n        if (title) {\r\n            router.title = title;\r\n        }\r\n        if (titleSeparator) {\r\n            router.titleSeparator = titleSeparator;\r\n        }\r\n        if (unknownRouteConfig) {\r\n            router.handleUnknownRoutes(unknownRouteConfig);\r\n        }\r\n        if (_fallbackRoute) {\r\n            router.fallbackRoute = _fallbackRoute;\r\n        }\r\n        if (viewPortDefaults) {\r\n            router.useViewPortDefaults(viewPortDefaults);\r\n        }\r\n        Object.assign(router.options, this.options);\r\n        var pipelineSteps = this.pipelineSteps;\r\n        var pipelineStepCount = pipelineSteps.length;\r\n        if (pipelineStepCount) {\r\n            if (!router.isRoot) {\r\n                throw new Error('Pipeline steps can only be added to the root router');\r\n            }\r\n            var pipelineProvider = router.pipelineProvider;\r\n            for (var i = 0, ii = pipelineStepCount; i < ii; ++i) {\r\n                var _b = pipelineSteps[i], name_1 = _b.name, step = _b.step;\r\n                pipelineProvider.addStep(name_1, step);\r\n            }\r\n        }\r\n    };\r\n    return RouterConfiguration;\r\n}());\n\n/**\r\n * The primary class responsible for handling routing and navigation.\r\n */\r\nvar Router = /** @class */ (function () {\r\n    /**\r\n     * @param container The [[Container]] to use when child routers.\r\n     * @param history The [[History]] implementation to delegate navigation requests to.\r\n     */\r\n    function Router(container, history) {\r\n        var _this = this;\r\n        /**\r\n         * The parent router, or null if this instance is not a child router.\r\n         */\r\n        this.parent = null;\r\n        this.options = {};\r\n        /**\r\n         * The defaults used when a viewport lacks specified content\r\n         */\r\n        this.viewPortDefaults = {};\r\n        /**\r\n         * Extension point to transform the document title before it is built and displayed.\r\n         * By default, child routers delegate to the parent router, and the app router\r\n         * returns the title unchanged.\r\n         */\r\n        this.transformTitle = function (title) {\r\n            if (_this.parent) {\r\n                return _this.parent.transformTitle(title);\r\n            }\r\n            return title;\r\n        };\r\n        this.container = container;\r\n        this.history = history;\r\n        this.reset();\r\n    }\r\n    /**\r\n     * Fully resets the router's internal state. Primarily used internally by the framework when multiple calls to setRoot are made.\r\n     * Use with caution (actually, avoid using this). Do not use this to simply change your navigation model.\r\n     */\r\n    Router.prototype.reset = function () {\r\n        var _this = this;\r\n        this.viewPorts = {};\r\n        this.routes = [];\r\n        this.baseUrl = '';\r\n        this.isConfigured = false;\r\n        this.isNavigating = false;\r\n        this.isExplicitNavigation = false;\r\n        this.isExplicitNavigationBack = false;\r\n        this.isNavigatingFirst = false;\r\n        this.isNavigatingNew = false;\r\n        this.isNavigatingRefresh = false;\r\n        this.isNavigatingForward = false;\r\n        this.isNavigatingBack = false;\r\n        this.couldDeactivate = false;\r\n        this.navigation = [];\r\n        this.currentInstruction = null;\r\n        this.viewPortDefaults = {};\r\n        this._fallbackOrder = 100;\r\n        this._recognizer = new RouteRecognizer();\r\n        this._childRecognizer = new RouteRecognizer();\r\n        this._configuredPromise = new Promise(function (resolve) {\r\n            _this._resolveConfiguredPromise = resolve;\r\n        });\r\n    };\r\n    Object.defineProperty(Router.prototype, \"isRoot\", {\r\n        /**\r\n         * Gets a value indicating whether or not this [[Router]] is the root in the router tree. I.e., it has no parent.\r\n         */\r\n        get: function () {\r\n            return !this.parent;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Registers a viewPort to be used as a rendering target for activated routes.\r\n     *\r\n     * @param viewPort The viewPort.\r\n     * @param name The name of the viewPort. 'default' if unspecified.\r\n     */\r\n    Router.prototype.registerViewPort = function (viewPort, name) {\r\n        name = name || 'default';\r\n        this.viewPorts[name] = viewPort;\r\n    };\r\n    /**\r\n     * Returns a Promise that resolves when the router is configured.\r\n     */\r\n    Router.prototype.ensureConfigured = function () {\r\n        return this._configuredPromise;\r\n    };\r\n    /**\r\n     * Configures the router.\r\n     *\r\n     * @param callbackOrConfig The [[RouterConfiguration]] or a callback that takes a [[RouterConfiguration]].\r\n     */\r\n    Router.prototype.configure = function (callbackOrConfig) {\r\n        var _this = this;\r\n        this.isConfigured = true;\r\n        var result = callbackOrConfig;\r\n        var config;\r\n        if (typeof callbackOrConfig === 'function') {\r\n            config = new RouterConfiguration();\r\n            result = callbackOrConfig(config);\r\n        }\r\n        return Promise\r\n            .resolve(result)\r\n            .then(function (c) {\r\n            if (c && c.exportToRouter) {\r\n                config = c;\r\n            }\r\n            config.exportToRouter(_this);\r\n            _this.isConfigured = true;\r\n            _this._resolveConfiguredPromise();\r\n        });\r\n    };\r\n    /**\r\n     * Navigates to a new location.\r\n     *\r\n     * @param fragment The URL fragment to use as the navigation destination.\r\n     * @param options The navigation options.\r\n     */\r\n    Router.prototype.navigate = function (fragment, options) {\r\n        if (!this.isConfigured && this.parent) {\r\n            return this.parent.navigate(fragment, options);\r\n        }\r\n        this.isExplicitNavigation = true;\r\n        return this.history.navigate(_resolveUrl(fragment, this.baseUrl, this.history._hasPushState), options);\r\n    };\r\n    /**\r\n     * Navigates to a new location corresponding to the route and params specified. Equivallent to [[Router.generate]] followed\r\n     * by [[Router.navigate]].\r\n     *\r\n     * @param route The name of the route to use when generating the navigation location.\r\n     * @param params The route parameters to be used when populating the route pattern.\r\n     * @param options The navigation options.\r\n     */\r\n    Router.prototype.navigateToRoute = function (route, params, options) {\r\n        var path = this.generate(route, params);\r\n        return this.navigate(path, options);\r\n    };\r\n    /**\r\n     * Navigates back to the most recent location in history.\r\n     */\r\n    Router.prototype.navigateBack = function () {\r\n        this.isExplicitNavigationBack = true;\r\n        this.history.navigateBack();\r\n    };\r\n    /**\r\n     * Creates a child router of the current router.\r\n     *\r\n     * @param container The [[Container]] to provide to the child router. Uses the current [[Router]]'s [[Container]] if unspecified.\r\n     * @returns {Router} The new child Router.\r\n     */\r\n    Router.prototype.createChild = function (container) {\r\n        var childRouter = new Router(container || this.container.createChild(), this.history);\r\n        childRouter.parent = this;\r\n        return childRouter;\r\n    };\r\n    /**\r\n     * Generates a URL fragment matching the specified route pattern.\r\n     *\r\n     * @param name The name of the route whose pattern should be used to generate the fragment.\r\n     * @param params The route params to be used to populate the route pattern.\r\n     * @param options If options.absolute = true, then absolute url will be generated; otherwise, it will be relative url.\r\n     * @returns {string} A string containing the generated URL fragment.\r\n     */\r\n    Router.prototype.generate = function (nameOrRoute, params, options) {\r\n        if (params === void 0) { params = {}; }\r\n        if (options === void 0) { options = {}; }\r\n        // A child recognizer generates routes for potential child routes. Any potential child route is added\r\n        // to the childRoute property of params for the childRouter to recognize. When generating routes, we\r\n        // use the childRecognizer when childRoute params are available to generate a child router enabled route.\r\n        var recognizer = 'childRoute' in params ? this._childRecognizer : this._recognizer;\r\n        var hasRoute = recognizer.hasRoute(nameOrRoute);\r\n        if (!hasRoute) {\r\n            if (this.parent) {\r\n                return this.parent.generate(nameOrRoute, params, options);\r\n            }\r\n            throw new Error(\"A route with name '\" + nameOrRoute + \"' could not be found. Check that `name: '\" + nameOrRoute + \"'` was specified in the route's config.\");\r\n        }\r\n        var path = recognizer.generate(nameOrRoute, params);\r\n        var rootedPath = _createRootedPath(path, this.baseUrl, this.history._hasPushState, options.absolute);\r\n        return options.absolute ? \"\" + this.history.getAbsoluteRoot() + rootedPath : rootedPath;\r\n    };\r\n    /**\r\n     * Creates a [[NavModel]] for the specified route config.\r\n     *\r\n     * @param config The route config.\r\n     */\r\n    Router.prototype.createNavModel = function (config) {\r\n        var navModel = new NavModel(this, 'href' in config\r\n            ? config.href\r\n            // potential error when config.route is a string[] ?\r\n            : config.route);\r\n        navModel.title = config.title;\r\n        navModel.order = config.nav;\r\n        navModel.href = config.href;\r\n        navModel.settings = config.settings;\r\n        navModel.config = config;\r\n        return navModel;\r\n    };\r\n    /**\r\n     * Registers a new route with the router.\r\n     *\r\n     * @param config The [[RouteConfig]].\r\n     * @param navModel The [[NavModel]] to use for the route. May be omitted for single-pattern routes.\r\n     */\r\n    Router.prototype.addRoute = function (config, navModel) {\r\n        if (Array.isArray(config.route)) {\r\n            var routeConfigs = _ensureArrayWithSingleRoutePerConfig(config);\r\n            // the following is wrong. todo: fix this after TS refactoring release\r\n            routeConfigs.forEach(this.addRoute.bind(this));\r\n            return;\r\n        }\r\n        validateRouteConfig(config);\r\n        if (!('viewPorts' in config) && !config.navigationStrategy) {\r\n            config.viewPorts = {\r\n                'default': {\r\n                    moduleId: config.moduleId,\r\n                    view: config.view\r\n                }\r\n            };\r\n        }\r\n        if (!navModel) {\r\n            navModel = this.createNavModel(config);\r\n        }\r\n        this.routes.push(config);\r\n        var path = config.route;\r\n        if (path.charAt(0) === '/') {\r\n            path = path.substr(1);\r\n        }\r\n        var caseSensitive = config.caseSensitive === true;\r\n        var state = this._recognizer.add({\r\n            path: path,\r\n            handler: config,\r\n            caseSensitive: caseSensitive\r\n        });\r\n        if (path) {\r\n            var settings = config.settings;\r\n            delete config.settings;\r\n            var withChild = JSON.parse(JSON.stringify(config));\r\n            config.settings = settings;\r\n            withChild.route = path + \"/*childRoute\";\r\n            withChild.hasChildRouter = true;\r\n            this._childRecognizer.add({\r\n                path: withChild.route,\r\n                handler: withChild,\r\n                caseSensitive: caseSensitive\r\n            });\r\n            withChild.navModel = navModel;\r\n            withChild.settings = config.settings;\r\n            withChild.navigationStrategy = config.navigationStrategy;\r\n        }\r\n        config.navModel = navModel;\r\n        var navigation = this.navigation;\r\n        if ((navModel.order || navModel.order === 0) && navigation.indexOf(navModel) === -1) {\r\n            if ((!navModel.href && navModel.href !== '') && (state.types.dynamics || state.types.stars)) {\r\n                throw new Error('Invalid route config for \"' + config.route + '\" : dynamic routes must specify an \"href:\" to be included in the navigation model.');\r\n            }\r\n            if (typeof navModel.order !== 'number') {\r\n                navModel.order = ++this._fallbackOrder;\r\n            }\r\n            navigation.push(navModel);\r\n            // this is a potential error / inconsistency between browsers\r\n            //\r\n            // MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort\r\n            // If compareFunction(a, b) returns 0, leave a and b unchanged with respect to each other,\r\n            // but sorted with respect to all different elements.\r\n            // Note: the ECMAscript standard does not guarantee this behaviour,\r\n            // and thus not all browsers (e.g. Mozilla versions dating back to at least 2003) respect this.\r\n            navigation.sort(function (a, b) { return a.order - b.order; });\r\n        }\r\n    };\r\n    /**\r\n     * Gets a value indicating whether or not this [[Router]] or one of its ancestors has a route registered with the specified name.\r\n     *\r\n     * @param name The name of the route to check.\r\n     */\r\n    Router.prototype.hasRoute = function (name) {\r\n        return !!(this._recognizer.hasRoute(name) || this.parent && this.parent.hasRoute(name));\r\n    };\r\n    /**\r\n     * Gets a value indicating whether or not this [[Router]] has a route registered with the specified name.\r\n     *\r\n     * @param name The name of the route to check.\r\n     */\r\n    Router.prototype.hasOwnRoute = function (name) {\r\n        return this._recognizer.hasRoute(name);\r\n    };\r\n    /**\r\n     * Register a handler to use when the incoming URL fragment doesn't match any registered routes.\r\n     *\r\n     * @param config The moduleId, or a function that selects the moduleId, or a [[RouteConfig]].\r\n     */\r\n    Router.prototype.handleUnknownRoutes = function (config) {\r\n        var _this = this;\r\n        if (!config) {\r\n            throw new Error('Invalid unknown route handler');\r\n        }\r\n        this.catchAllHandler = function (instruction) {\r\n            return _this\r\n                ._createRouteConfig(config, instruction)\r\n                .then(function (c) {\r\n                instruction.config = c;\r\n                return instruction;\r\n            });\r\n        };\r\n    };\r\n    /**\r\n     * Updates the document title using the current navigation instruction.\r\n     */\r\n    Router.prototype.updateTitle = function () {\r\n        var parentRouter = this.parent;\r\n        if (parentRouter) {\r\n            return parentRouter.updateTitle();\r\n        }\r\n        var currentInstruction = this.currentInstruction;\r\n        if (currentInstruction) {\r\n            currentInstruction._updateTitle();\r\n        }\r\n        return undefined;\r\n    };\r\n    /**\r\n     * Updates the navigation routes with hrefs relative to the current location.\r\n     * Note: This method will likely move to a plugin in a future release.\r\n     */\r\n    Router.prototype.refreshNavigation = function () {\r\n        var nav = this.navigation;\r\n        for (var i = 0, length_1 = nav.length; i < length_1; i++) {\r\n            var current = nav[i];\r\n            if (!current.config.href) {\r\n                current.href = _createRootedPath(current.relativeHref, this.baseUrl, this.history._hasPushState);\r\n            }\r\n            else {\r\n                current.href = _normalizeAbsolutePath(current.config.href, this.history._hasPushState);\r\n            }\r\n        }\r\n    };\r\n    /**\r\n     * Sets the default configuration for the view ports. This specifies how to\r\n     *  populate a view port for which no module is specified. The default is\r\n     *  an empty view/view-model pair.\r\n     */\r\n    Router.prototype.useViewPortDefaults = function ($viewPortDefaults) {\r\n        // a workaround to have strong typings while not requiring to expose interface ViewPortInstruction\r\n        var viewPortDefaults = $viewPortDefaults;\r\n        for (var viewPortName in viewPortDefaults) {\r\n            var viewPortConfig = viewPortDefaults[viewPortName];\r\n            this.viewPortDefaults[viewPortName] = {\r\n                moduleId: viewPortConfig.moduleId\r\n            };\r\n        }\r\n    };\r\n    /**@internal */\r\n    Router.prototype._refreshBaseUrl = function () {\r\n        var parentRouter = this.parent;\r\n        if (parentRouter) {\r\n            this.baseUrl = generateBaseUrl(parentRouter, parentRouter.currentInstruction);\r\n        }\r\n    };\r\n    /**@internal */\r\n    Router.prototype._createNavigationInstruction = function (url, parentInstruction) {\r\n        if (url === void 0) { url = ''; }\r\n        if (parentInstruction === void 0) { parentInstruction = null; }\r\n        var fragment = url;\r\n        var queryString = '';\r\n        var queryIndex = url.indexOf('?');\r\n        if (queryIndex !== -1) {\r\n            fragment = url.substr(0, queryIndex);\r\n            queryString = url.substr(queryIndex + 1);\r\n        }\r\n        var urlRecognizationResults = this._recognizer.recognize(url);\r\n        if (!urlRecognizationResults || !urlRecognizationResults.length) {\r\n            urlRecognizationResults = this._childRecognizer.recognize(url);\r\n        }\r\n        var instructionInit = {\r\n            fragment: fragment,\r\n            queryString: queryString,\r\n            config: null,\r\n            parentInstruction: parentInstruction,\r\n            previousInstruction: this.currentInstruction,\r\n            router: this,\r\n            options: {\r\n                compareQueryParams: this.options.compareQueryParams\r\n            }\r\n        };\r\n        var result;\r\n        if (urlRecognizationResults && urlRecognizationResults.length) {\r\n            var first = urlRecognizationResults[0];\r\n            var instruction = new NavigationInstruction(Object.assign({}, instructionInit, {\r\n                params: first.params,\r\n                queryParams: first.queryParams || urlRecognizationResults.queryParams,\r\n                config: first.config || first.handler\r\n            }));\r\n            if (typeof first.handler === 'function') {\r\n                result = evaluateNavigationStrategy(instruction, first.handler, first);\r\n            }\r\n            else if (first.handler && typeof first.handler.navigationStrategy === 'function') {\r\n                result = evaluateNavigationStrategy(instruction, first.handler.navigationStrategy, first.handler);\r\n            }\r\n            else {\r\n                result = Promise.resolve(instruction);\r\n            }\r\n        }\r\n        else if (this.catchAllHandler) {\r\n            var instruction = new NavigationInstruction(Object.assign({}, instructionInit, {\r\n                params: { path: fragment },\r\n                queryParams: urlRecognizationResults ? urlRecognizationResults.queryParams : {},\r\n                config: null // config will be created by the catchAllHandler\r\n            }));\r\n            result = evaluateNavigationStrategy(instruction, this.catchAllHandler);\r\n        }\r\n        else if (this.parent) {\r\n            var router = this._parentCatchAllHandler(this.parent);\r\n            if (router) {\r\n                var newParentInstruction = this._findParentInstructionFromRouter(router, parentInstruction);\r\n                var instruction = new NavigationInstruction(Object.assign({}, instructionInit, {\r\n                    params: { path: fragment },\r\n                    queryParams: urlRecognizationResults ? urlRecognizationResults.queryParams : {},\r\n                    router: router,\r\n                    parentInstruction: newParentInstruction,\r\n                    parentCatchHandler: true,\r\n                    config: null // config will be created by the chained parent catchAllHandler\r\n                }));\r\n                result = evaluateNavigationStrategy(instruction, router.catchAllHandler);\r\n            }\r\n        }\r\n        if (result && parentInstruction) {\r\n            this.baseUrl = generateBaseUrl(this.parent, parentInstruction);\r\n        }\r\n        return result || Promise.reject(new Error(\"Route not found: \" + url));\r\n    };\r\n    /**@internal */\r\n    Router.prototype._findParentInstructionFromRouter = function (router, instruction) {\r\n        if (instruction.router === router) {\r\n            instruction.fragment = router.baseUrl; // need to change the fragment in case of a redirect instead of moduleId\r\n            return instruction;\r\n        }\r\n        else if (instruction.parentInstruction) {\r\n            return this._findParentInstructionFromRouter(router, instruction.parentInstruction);\r\n        }\r\n        return undefined;\r\n    };\r\n    /**@internal */\r\n    Router.prototype._parentCatchAllHandler = function (router) {\r\n        if (router.catchAllHandler) {\r\n            return router;\r\n        }\r\n        else if (router.parent) {\r\n            return this._parentCatchAllHandler(router.parent);\r\n        }\r\n        return false;\r\n    };\r\n    /**\r\n     * @internal\r\n     */\r\n    Router.prototype._createRouteConfig = function (config, instruction) {\r\n        var _this = this;\r\n        return Promise\r\n            .resolve(config)\r\n            .then(function (c) {\r\n            if (typeof c === 'string') {\r\n                return { moduleId: c };\r\n            }\r\n            else if (typeof c === 'function') {\r\n                return c(instruction);\r\n            }\r\n            return c;\r\n        })\r\n            // typing here could be either RouteConfig or RedirectConfig\r\n            // but temporarily treat both as RouteConfig\r\n            // todo: improve typings precision\r\n            .then(function (c) { return typeof c === 'string' ? { moduleId: c } : c; })\r\n            .then(function (c) {\r\n            c.route = instruction.params.path;\r\n            validateRouteConfig(c);\r\n            if (!c.navModel) {\r\n                c.navModel = _this.createNavModel(c);\r\n            }\r\n            return c;\r\n        });\r\n    };\r\n    return Router;\r\n}());\r\n/* @internal exported for unit testing */\r\nvar generateBaseUrl = function (router, instruction) {\r\n    return \"\" + (router.baseUrl || '') + (instruction.getBaseUrl() || '');\r\n};\r\n/* @internal exported for unit testing */\r\nvar validateRouteConfig = function (config) {\r\n    if (typeof config !== 'object') {\r\n        throw new Error('Invalid Route Config');\r\n    }\r\n    if (typeof config.route !== 'string') {\r\n        var name_1 = config.name || '(no name)';\r\n        throw new Error('Invalid Route Config for \"' + name_1 + '\": You must specify a \"route:\" pattern.');\r\n    }\r\n    if (!('redirect' in config || config.moduleId || config.navigationStrategy || config.viewPorts)) {\r\n        throw new Error('Invalid Route Config for \"' + config.route + '\": You must specify a \"moduleId:\", \"redirect:\", \"navigationStrategy:\", or \"viewPorts:\".');\r\n    }\r\n};\r\n/* @internal exported for unit testing */\r\nvar evaluateNavigationStrategy = function (instruction, evaluator, context) {\r\n    return Promise\r\n        .resolve(evaluator.call(context, instruction))\r\n        .then(function () {\r\n        if (!('viewPorts' in instruction.config)) {\r\n            instruction.config.viewPorts = {\r\n                'default': {\r\n                    moduleId: instruction.config.moduleId\r\n                }\r\n            };\r\n        }\r\n        return instruction;\r\n    });\r\n};\n\n/**@internal exported for unit testing */\r\nvar createNextFn = function (instruction, steps) {\r\n    var index = -1;\r\n    var next = function () {\r\n        index++;\r\n        if (index < steps.length) {\r\n            var currentStep = steps[index];\r\n            try {\r\n                return currentStep(instruction, next);\r\n            }\r\n            catch (e) {\r\n                return next.reject(e);\r\n            }\r\n        }\r\n        else {\r\n            return next.complete();\r\n        }\r\n    };\r\n    next.complete = createCompletionHandler(next, \"completed\" /* Completed */);\r\n    next.cancel = createCompletionHandler(next, \"canceled\" /* Canceled */);\r\n    next.reject = createCompletionHandler(next, \"rejected\" /* Rejected */);\r\n    return next;\r\n};\r\n/**@internal exported for unit testing */\r\nvar createCompletionHandler = function (next, status) {\r\n    return function (output) { return Promise\r\n        .resolve({\r\n        status: status,\r\n        output: output,\r\n        completed: status === \"completed\" /* Completed */\r\n    }); };\r\n};\n\n/**\r\n * The class responsible for managing and processing the navigation pipeline.\r\n */\r\nvar Pipeline = /** @class */ (function () {\r\n    function Pipeline() {\r\n        /**\r\n         * The pipeline steps. And steps added via addStep will be converted to a function\r\n         * The actualy running functions with correct step contexts of this pipeline\r\n         */\r\n        this.steps = [];\r\n    }\r\n    /**\r\n     * Adds a step to the pipeline.\r\n     *\r\n     * @param step The pipeline step.\r\n     */\r\n    Pipeline.prototype.addStep = function (step) {\r\n        var run;\r\n        if (typeof step === 'function') {\r\n            run = step;\r\n        }\r\n        else if (typeof step.getSteps === 'function') {\r\n            // getSteps is to enable support open slots\r\n            // where devs can add multiple steps into the same slot name\r\n            var steps = step.getSteps();\r\n            for (var i = 0, l = steps.length; i < l; i++) {\r\n                this.addStep(steps[i]);\r\n            }\r\n            return this;\r\n        }\r\n        else {\r\n            run = step.run.bind(step);\r\n        }\r\n        this.steps.push(run);\r\n        return this;\r\n    };\r\n    /**\r\n     * Runs the pipeline.\r\n     *\r\n     * @param instruction The navigation instruction to process.\r\n     */\r\n    Pipeline.prototype.run = function (instruction) {\r\n        var nextFn = createNextFn(instruction, this.steps);\r\n        return nextFn();\r\n    };\r\n    return Pipeline;\r\n}());\n\n/**\r\n* Determines if the provided object is a navigation command.\r\n* A navigation command is anything with a navigate method.\r\n*\r\n* @param obj The object to check.\r\n*/\r\nfunction isNavigationCommand(obj) {\r\n    return obj && typeof obj.navigate === 'function';\r\n}\r\n/**\r\n* Used during the activation lifecycle to cause a redirect.\r\n*/\r\nvar Redirect = /** @class */ (function () {\r\n    /**\r\n     * @param url The URL fragment to use as the navigation destination.\r\n     * @param options The navigation options.\r\n     */\r\n    function Redirect(url, options) {\r\n        if (options === void 0) { options = {}; }\r\n        this.url = url;\r\n        this.options = Object.assign({ trigger: true, replace: true }, options);\r\n        this.shouldContinueProcessing = false;\r\n    }\r\n    /**\r\n     * Called by the activation system to set the child router.\r\n     *\r\n     * @param router The router.\r\n     */\r\n    Redirect.prototype.setRouter = function (router) {\r\n        this.router = router;\r\n    };\r\n    /**\r\n     * Called by the navigation pipeline to navigate.\r\n     *\r\n     * @param appRouter The router to be redirected.\r\n     */\r\n    Redirect.prototype.navigate = function (appRouter) {\r\n        var navigatingRouter = this.options.useAppRouter ? appRouter : (this.router || appRouter);\r\n        navigatingRouter.navigate(this.url, this.options);\r\n    };\r\n    return Redirect;\r\n}());\r\n/**\r\n * Used during the activation lifecycle to cause a redirect to a named route.\r\n */\r\nvar RedirectToRoute = /** @class */ (function () {\r\n    /**\r\n     * @param route The name of the route.\r\n     * @param params The parameters to be sent to the activation method.\r\n     * @param options The options to use for navigation.\r\n     */\r\n    function RedirectToRoute(route, params, options) {\r\n        if (params === void 0) { params = {}; }\r\n        if (options === void 0) { options = {}; }\r\n        this.route = route;\r\n        this.params = params;\r\n        this.options = Object.assign({ trigger: true, replace: true }, options);\r\n        this.shouldContinueProcessing = false;\r\n    }\r\n    /**\r\n     * Called by the activation system to set the child router.\r\n     *\r\n     * @param router The router.\r\n     */\r\n    RedirectToRoute.prototype.setRouter = function (router) {\r\n        this.router = router;\r\n    };\r\n    /**\r\n     * Called by the navigation pipeline to navigate.\r\n     *\r\n     * @param appRouter The router to be redirected.\r\n     */\r\n    RedirectToRoute.prototype.navigate = function (appRouter) {\r\n        var navigatingRouter = this.options.useAppRouter ? appRouter : (this.router || appRouter);\r\n        navigatingRouter.navigateToRoute(this.route, this.params, this.options);\r\n    };\r\n    return RedirectToRoute;\r\n}());\n\n/**\r\n * @internal exported for unit testing\r\n */\r\nfunction _buildNavigationPlan(instruction, forceLifecycleMinimum) {\r\n    var config = instruction.config;\r\n    if ('redirect' in config) {\r\n        return buildRedirectPlan(instruction);\r\n    }\r\n    var prevInstruction = instruction.previousInstruction;\r\n    var defaultViewPortConfigs = instruction.router.viewPortDefaults;\r\n    if (prevInstruction) {\r\n        return buildTransitionPlans(instruction, prevInstruction, defaultViewPortConfigs, forceLifecycleMinimum);\r\n    }\r\n    // first navigation, only need to prepare a few information for each viewport plan\r\n    var viewPortPlans = {};\r\n    var viewPortConfigs = config.viewPorts;\r\n    for (var viewPortName in viewPortConfigs) {\r\n        var viewPortConfig = viewPortConfigs[viewPortName];\r\n        if (viewPortConfig.moduleId === null && viewPortName in defaultViewPortConfigs) {\r\n            viewPortConfig = defaultViewPortConfigs[viewPortName];\r\n        }\r\n        viewPortPlans[viewPortName] = {\r\n            name: viewPortName,\r\n            strategy: \"replace\" /* Replace */,\r\n            config: viewPortConfig\r\n        };\r\n    }\r\n    return Promise.resolve(viewPortPlans);\r\n}\r\n/**\r\n * Build redirect plan based on config of a navigation instruction\r\n * @internal exported for unit testing\r\n */\r\nvar buildRedirectPlan = function (instruction) {\r\n    var config = instruction.config;\r\n    var router = instruction.router;\r\n    return router\r\n        ._createNavigationInstruction(config.redirect)\r\n        .then(function (redirectInstruction) {\r\n        var params = {};\r\n        var originalInstructionParams = instruction.params;\r\n        var redirectInstructionParams = redirectInstruction.params;\r\n        for (var key in redirectInstructionParams) {\r\n            // If the param on the redirect points to another param, e.g. { route: first/:this, redirect: second/:this }\r\n            var val = redirectInstructionParams[key];\r\n            if (typeof val === 'string' && val[0] === ':') {\r\n                val = val.slice(1);\r\n                // And if that param is found on the original instruction then use it\r\n                if (val in originalInstructionParams) {\r\n                    params[key] = originalInstructionParams[val];\r\n                }\r\n            }\r\n            else {\r\n                params[key] = redirectInstructionParams[key];\r\n            }\r\n        }\r\n        var redirectLocation = router.generate(redirectInstruction.config, params, instruction.options);\r\n        // Special handling for child routes\r\n        for (var key in originalInstructionParams) {\r\n            redirectLocation = redirectLocation.replace(\":\" + key, originalInstructionParams[key]);\r\n        }\r\n        var queryString = instruction.queryString;\r\n        if (queryString) {\r\n            redirectLocation += '?' + queryString;\r\n        }\r\n        return Promise.resolve(new Redirect(redirectLocation));\r\n    });\r\n};\r\n/**\r\n * @param viewPortPlans the Plan record that holds information about built plans\r\n * @internal exported for unit testing\r\n */\r\nvar buildTransitionPlans = function (currentInstruction, previousInstruction, defaultViewPortConfigs, forceLifecycleMinimum) {\r\n    var viewPortPlans = {};\r\n    var newInstructionConfig = currentInstruction.config;\r\n    var hasNewParams = hasDifferentParameterValues(previousInstruction, currentInstruction);\r\n    var pending = [];\r\n    var previousViewPortInstructions = previousInstruction.viewPortInstructions;\r\n    var _loop_1 = function (viewPortName) {\r\n        var prevViewPortInstruction = previousViewPortInstructions[viewPortName];\r\n        var prevViewPortComponent = prevViewPortInstruction.component;\r\n        var newInstructionViewPortConfigs = newInstructionConfig.viewPorts;\r\n        // if this is invoked on a viewport without any changes, based on new url,\r\n        // newViewPortConfig will be the existing viewport instruction\r\n        var nextViewPortConfig = viewPortName in newInstructionViewPortConfigs\r\n            ? newInstructionViewPortConfigs[viewPortName]\r\n            : prevViewPortInstruction;\r\n        if (nextViewPortConfig.moduleId === null && viewPortName in defaultViewPortConfigs) {\r\n            nextViewPortConfig = defaultViewPortConfigs[viewPortName];\r\n        }\r\n        var viewPortActivationStrategy = determineActivationStrategy(currentInstruction, prevViewPortInstruction, nextViewPortConfig, hasNewParams, forceLifecycleMinimum);\r\n        var viewPortPlan = viewPortPlans[viewPortName] = {\r\n            name: viewPortName,\r\n            // ViewPortInstruction can quack like a RouteConfig\r\n            config: nextViewPortConfig,\r\n            prevComponent: prevViewPortComponent,\r\n            prevModuleId: prevViewPortInstruction.moduleId,\r\n            strategy: viewPortActivationStrategy\r\n        };\r\n        // recursively build nav plans for all existing child routers/viewports of this viewport\r\n        // this is possible because existing child viewports and routers already have necessary information\r\n        // to process the wildcard path from parent instruction\r\n        if (viewPortActivationStrategy !== \"replace\" /* Replace */ && prevViewPortInstruction.childRouter) {\r\n            var path = currentInstruction.getWildcardPath();\r\n            var task = prevViewPortInstruction\r\n                .childRouter\r\n                ._createNavigationInstruction(path, currentInstruction)\r\n                .then(function (childInstruction) {\r\n                viewPortPlan.childNavigationInstruction = childInstruction;\r\n                return _buildNavigationPlan(childInstruction, \r\n                // is it safe to assume viewPortPlan has not been changed from previous assignment?\r\n                // if so, can just use local variable viewPortPlanStrategy\r\n                // there could be user code modifying viewport plan during _createNavigationInstruction?\r\n                viewPortPlan.strategy === \"invoke-lifecycle\" /* InvokeLifecycle */)\r\n                    .then(function (childPlan) {\r\n                    if (childPlan instanceof Redirect) {\r\n                        return Promise.reject(childPlan);\r\n                    }\r\n                    childInstruction.plan = childPlan;\r\n                    // for bluebird ?\r\n                    return null;\r\n                });\r\n            });\r\n            pending.push(task);\r\n        }\r\n    };\r\n    for (var viewPortName in previousViewPortInstructions) {\r\n        _loop_1(viewPortName);\r\n    }\r\n    return Promise.all(pending).then(function () { return viewPortPlans; });\r\n};\r\n/**\r\n * @param newViewPortConfig if this is invoked on a viewport without any changes, based on new url, newViewPortConfig will be the existing viewport instruction\r\n * @internal exported for unit testing\r\n */\r\nvar determineActivationStrategy = function (currentNavInstruction, prevViewPortInstruction, newViewPortConfig, \r\n// indicates whether there is difference between old and new url params\r\nhasNewParams, forceLifecycleMinimum) {\r\n    var newInstructionConfig = currentNavInstruction.config;\r\n    var prevViewPortViewModel = prevViewPortInstruction.component.viewModel;\r\n    var viewPortPlanStrategy;\r\n    if (prevViewPortInstruction.moduleId !== newViewPortConfig.moduleId) {\r\n        viewPortPlanStrategy = \"replace\" /* Replace */;\r\n    }\r\n    else if ('determineActivationStrategy' in prevViewPortViewModel) {\r\n        viewPortPlanStrategy = prevViewPortViewModel.determineActivationStrategy.apply(prevViewPortViewModel, currentNavInstruction.lifecycleArgs);\r\n    }\r\n    else if (newInstructionConfig.activationStrategy) {\r\n        viewPortPlanStrategy = newInstructionConfig.activationStrategy;\r\n    }\r\n    else if (hasNewParams || forceLifecycleMinimum) {\r\n        viewPortPlanStrategy = \"invoke-lifecycle\" /* InvokeLifecycle */;\r\n    }\r\n    else {\r\n        viewPortPlanStrategy = \"no-change\" /* NoChange */;\r\n    }\r\n    return viewPortPlanStrategy;\r\n};\r\n/**@internal exported for unit testing */\r\nvar hasDifferentParameterValues = function (prev, next) {\r\n    var prevParams = prev.params;\r\n    var nextParams = next.params;\r\n    var nextWildCardName = next.config.hasChildRouter ? next.getWildCardName() : null;\r\n    for (var key in nextParams) {\r\n        if (key === nextWildCardName) {\r\n            continue;\r\n        }\r\n        if (prevParams[key] !== nextParams[key]) {\r\n            return true;\r\n        }\r\n    }\r\n    for (var key in prevParams) {\r\n        if (key === nextWildCardName) {\r\n            continue;\r\n        }\r\n        if (prevParams[key] !== nextParams[key]) {\r\n            return true;\r\n        }\r\n    }\r\n    if (!next.options.compareQueryParams) {\r\n        return false;\r\n    }\r\n    var prevQueryParams = prev.queryParams;\r\n    var nextQueryParams = next.queryParams;\r\n    for (var key in nextQueryParams) {\r\n        if (prevQueryParams[key] !== nextQueryParams[key]) {\r\n            return true;\r\n        }\r\n    }\r\n    for (var key in prevQueryParams) {\r\n        if (prevQueryParams[key] !== nextQueryParams[key]) {\r\n            return true;\r\n        }\r\n    }\r\n    return false;\r\n};\n\n/**\r\n * Transform a navigation instruction into viewport plan record object,\r\n * or a redirect request if user viewmodel demands\r\n */\r\nvar BuildNavigationPlanStep = /** @class */ (function () {\r\n    function BuildNavigationPlanStep() {\r\n    }\r\n    BuildNavigationPlanStep.prototype.run = function (navigationInstruction, next) {\r\n        return _buildNavigationPlan(navigationInstruction)\r\n            .then(function (plan) {\r\n            if (plan instanceof Redirect) {\r\n                return next.cancel(plan);\r\n            }\r\n            navigationInstruction.plan = plan;\r\n            return next();\r\n        })\r\n            .catch(next.cancel);\r\n    };\r\n    return BuildNavigationPlanStep;\r\n}());\n\n/**\r\n * @internal Exported for unit testing\r\n */\r\nvar loadNewRoute = function (routeLoader, navigationInstruction) {\r\n    var loadingPlans = determineLoadingPlans(navigationInstruction);\r\n    var loadPromises = loadingPlans.map(function (loadingPlan) { return loadRoute(routeLoader, loadingPlan.navigationInstruction, loadingPlan.viewPortPlan); });\r\n    return Promise.all(loadPromises);\r\n};\r\n/**\r\n * @internal Exported for unit testing\r\n */\r\nvar determineLoadingPlans = function (navigationInstruction, loadingPlans) {\r\n    if (loadingPlans === void 0) { loadingPlans = []; }\r\n    var viewPortPlans = navigationInstruction.plan;\r\n    for (var viewPortName in viewPortPlans) {\r\n        var viewPortPlan = viewPortPlans[viewPortName];\r\n        var childNavInstruction = viewPortPlan.childNavigationInstruction;\r\n        if (viewPortPlan.strategy === \"replace\" /* Replace */) {\r\n            loadingPlans.push({ viewPortPlan: viewPortPlan, navigationInstruction: navigationInstruction });\r\n            if (childNavInstruction) {\r\n                determineLoadingPlans(childNavInstruction, loadingPlans);\r\n            }\r\n        }\r\n        else {\r\n            var viewPortInstruction = navigationInstruction.addViewPortInstruction({\r\n                name: viewPortName,\r\n                strategy: viewPortPlan.strategy,\r\n                moduleId: viewPortPlan.prevModuleId,\r\n                component: viewPortPlan.prevComponent\r\n            });\r\n            if (childNavInstruction) {\r\n                viewPortInstruction.childNavigationInstruction = childNavInstruction;\r\n                determineLoadingPlans(childNavInstruction, loadingPlans);\r\n            }\r\n        }\r\n    }\r\n    return loadingPlans;\r\n};\r\n/**\r\n * @internal Exported for unit testing\r\n */\r\nvar loadRoute = function (routeLoader, navigationInstruction, viewPortPlan) {\r\n    var planConfig = viewPortPlan.config;\r\n    var moduleId = planConfig ? planConfig.moduleId : null;\r\n    return loadComponent(routeLoader, navigationInstruction, planConfig)\r\n        .then(function (component) {\r\n        var viewPortInstruction = navigationInstruction.addViewPortInstruction({\r\n            name: viewPortPlan.name,\r\n            strategy: viewPortPlan.strategy,\r\n            moduleId: moduleId,\r\n            component: component\r\n        });\r\n        var childRouter = component.childRouter;\r\n        if (childRouter) {\r\n            var path = navigationInstruction.getWildcardPath();\r\n            return childRouter\r\n                ._createNavigationInstruction(path, navigationInstruction)\r\n                .then(function (childInstruction) {\r\n                viewPortPlan.childNavigationInstruction = childInstruction;\r\n                return _buildNavigationPlan(childInstruction)\r\n                    .then(function (childPlan) {\r\n                    if (childPlan instanceof Redirect) {\r\n                        return Promise.reject(childPlan);\r\n                    }\r\n                    childInstruction.plan = childPlan;\r\n                    viewPortInstruction.childNavigationInstruction = childInstruction;\r\n                    return loadNewRoute(routeLoader, childInstruction);\r\n                });\r\n            });\r\n        }\r\n        // ts complains without this, though they are same\r\n        return void 0;\r\n    });\r\n};\r\n/**\r\n * Load a routed-component based on navigation instruction and route config\r\n * @internal exported for unit testing only\r\n */\r\nvar loadComponent = function (routeLoader, navigationInstruction, config) {\r\n    var router = navigationInstruction.router;\r\n    var lifecycleArgs = navigationInstruction.lifecycleArgs;\r\n    return Promise.resolve()\r\n        .then(function () { return routeLoader.loadRoute(router, config, navigationInstruction); })\r\n        .then(\r\n    /**\r\n     * @param component an object carrying information about loaded route\r\n     * typically contains information about view model, childContainer, view and router\r\n     */\r\n    function (component) {\r\n        var viewModel = component.viewModel, childContainer = component.childContainer;\r\n        component.router = router;\r\n        component.config = config;\r\n        if ('configureRouter' in viewModel) {\r\n            var childRouter_1 = childContainer.getChildRouter();\r\n            component.childRouter = childRouter_1;\r\n            return childRouter_1\r\n                .configure(function (c) { return viewModel.configureRouter(c, childRouter_1, lifecycleArgs[0], lifecycleArgs[1], lifecycleArgs[2]); })\r\n                .then(function () { return component; });\r\n        }\r\n        return component;\r\n    });\r\n};\n\n/**\r\n * Abstract class that is responsible for loading view / view model from a route config\r\n * The default implementation can be found in `aurelia-templating-router`\r\n */\r\nvar RouteLoader = /** @class */ (function () {\r\n    function RouteLoader() {\r\n    }\r\n    /**\r\n     * Load a route config based on its viewmodel / view configuration\r\n     */\r\n    // return typing: return typings used to be never\r\n    // as it was a throw. Changing it to Promise<any> should not cause any issues\r\n    RouteLoader.prototype.loadRoute = function (router, config, navigationInstruction) {\r\n        throw new Error('Route loaders must implement \"loadRoute(router, config, navigationInstruction)\".');\r\n    };\r\n    return RouteLoader;\r\n}());\n\n/**\r\n * A pipeline step responsible for loading a route config of a navigation instruction\r\n */\r\nvar LoadRouteStep = /** @class */ (function () {\r\n    function LoadRouteStep(routeLoader) {\r\n        this.routeLoader = routeLoader;\r\n    }\r\n    /**@internal */\r\n    LoadRouteStep.inject = function () { return [RouteLoader]; };\r\n    /**\r\n     * Run the internal to load route config of a navigation instruction to prepare for next steps in the pipeline\r\n     */\r\n    LoadRouteStep.prototype.run = function (navigationInstruction, next) {\r\n        return loadNewRoute(this.routeLoader, navigationInstruction)\r\n            .then(next, next.cancel);\r\n    };\r\n    return LoadRouteStep;\r\n}());\n\n/**\r\n * A pipeline step for instructing a piepline to commit changes on a navigation instruction\r\n */\r\nvar CommitChangesStep = /** @class */ (function () {\r\n    function CommitChangesStep() {\r\n    }\r\n    CommitChangesStep.prototype.run = function (navigationInstruction, next) {\r\n        return navigationInstruction\r\n            ._commitChanges(/*wait to swap?*/ true)\r\n            .then(function () {\r\n            navigationInstruction._updateTitle();\r\n            return next();\r\n        });\r\n    };\r\n    return CommitChangesStep;\r\n}());\n\n/**\r\n * An optional interface describing the available activation strategies.\r\n * @internal Used internally.\r\n */\r\nvar InternalActivationStrategy;\r\n(function (InternalActivationStrategy) {\r\n    /**\r\n     * Reuse the existing view model, without invoking Router lifecycle hooks.\r\n     */\r\n    InternalActivationStrategy[\"NoChange\"] = \"no-change\";\r\n    /**\r\n     * Reuse the existing view model, invoking Router lifecycle hooks.\r\n     */\r\n    InternalActivationStrategy[\"InvokeLifecycle\"] = \"invoke-lifecycle\";\r\n    /**\r\n     * Replace the existing view model, invoking Router lifecycle hooks.\r\n     */\r\n    InternalActivationStrategy[\"Replace\"] = \"replace\";\r\n})(InternalActivationStrategy || (InternalActivationStrategy = {}));\r\n/**\r\n * The strategy to use when activating modules during navigation.\r\n */\r\n// kept for compat reason\r\nvar activationStrategy = {\r\n    noChange: \"no-change\" /* NoChange */,\r\n    invokeLifecycle: \"invoke-lifecycle\" /* InvokeLifecycle */,\r\n    replace: \"replace\" /* Replace */\r\n};\n\n/**\r\n * Recursively find list of deactivate-able view models\r\n * and invoke the either 'canDeactivate' or 'deactivate' on each\r\n * @internal exported for unit testing\r\n */\r\nvar processDeactivatable = function (navigationInstruction, callbackName, next, ignoreResult) {\r\n    var plan = navigationInstruction.plan;\r\n    var infos = findDeactivatable(plan, callbackName);\r\n    var i = infos.length; // query from inside out\r\n    function inspect(val) {\r\n        if (ignoreResult || shouldContinue(val)) {\r\n            return iterate();\r\n        }\r\n        return next.cancel(val);\r\n    }\r\n    function iterate() {\r\n        if (i--) {\r\n            try {\r\n                var viewModel = infos[i];\r\n                var result = viewModel[callbackName](navigationInstruction);\r\n                return processPotential(result, inspect, next.cancel);\r\n            }\r\n            catch (error) {\r\n                return next.cancel(error);\r\n            }\r\n        }\r\n        navigationInstruction.router.couldDeactivate = true;\r\n        return next();\r\n    }\r\n    return iterate();\r\n};\r\n/**\r\n * Recursively find and returns a list of deactivate-able view models\r\n * @internal exported for unit testing\r\n */\r\nvar findDeactivatable = function (plan, callbackName, list) {\r\n    if (list === void 0) { list = []; }\r\n    for (var viewPortName in plan) {\r\n        var viewPortPlan = plan[viewPortName];\r\n        var prevComponent = viewPortPlan.prevComponent;\r\n        if ((viewPortPlan.strategy === activationStrategy.invokeLifecycle || viewPortPlan.strategy === activationStrategy.replace)\r\n            && prevComponent) {\r\n            var viewModel = prevComponent.viewModel;\r\n            if (callbackName in viewModel) {\r\n                list.push(viewModel);\r\n            }\r\n        }\r\n        if (viewPortPlan.strategy === activationStrategy.replace && prevComponent) {\r\n            addPreviousDeactivatable(prevComponent, callbackName, list);\r\n        }\r\n        else if (viewPortPlan.childNavigationInstruction) {\r\n            findDeactivatable(viewPortPlan.childNavigationInstruction.plan, callbackName, list);\r\n        }\r\n    }\r\n    return list;\r\n};\r\n/**\r\n * @internal exported for unit testing\r\n */\r\nvar addPreviousDeactivatable = function (component, callbackName, list) {\r\n    var childRouter = component.childRouter;\r\n    if (childRouter && childRouter.currentInstruction) {\r\n        var viewPortInstructions = childRouter.currentInstruction.viewPortInstructions;\r\n        for (var viewPortName in viewPortInstructions) {\r\n            var viewPortInstruction = viewPortInstructions[viewPortName];\r\n            var prevComponent = viewPortInstruction.component;\r\n            var prevViewModel = prevComponent.viewModel;\r\n            if (callbackName in prevViewModel) {\r\n                list.push(prevViewModel);\r\n            }\r\n            addPreviousDeactivatable(prevComponent, callbackName, list);\r\n        }\r\n    }\r\n};\r\n/**\r\n * @internal exported for unit testing\r\n */\r\nvar processActivatable = function (navigationInstruction, callbackName, next, ignoreResult) {\r\n    var infos = findActivatable(navigationInstruction, callbackName);\r\n    var length = infos.length;\r\n    var i = -1; // query from top down\r\n    function inspect(val, router) {\r\n        if (ignoreResult || shouldContinue(val, router)) {\r\n            return iterate();\r\n        }\r\n        return next.cancel(val);\r\n    }\r\n    function iterate() {\r\n        var _a;\r\n        i++;\r\n        if (i < length) {\r\n            try {\r\n                var current_1 = infos[i];\r\n                var result = (_a = current_1.viewModel)[callbackName].apply(_a, current_1.lifecycleArgs);\r\n                return processPotential(result, function (val) { return inspect(val, current_1.router); }, next.cancel);\r\n            }\r\n            catch (error) {\r\n                return next.cancel(error);\r\n            }\r\n        }\r\n        return next();\r\n    }\r\n    return iterate();\r\n};\r\n/**\r\n * Find list of activatable view model and add to list (3rd parameter)\r\n * @internal exported for unit testing\r\n */\r\nvar findActivatable = function (navigationInstruction, callbackName, list, router) {\r\n    if (list === void 0) { list = []; }\r\n    var plan = navigationInstruction.plan;\r\n    Object\r\n        .keys(plan)\r\n        .forEach(function (viewPortName) {\r\n        var viewPortPlan = plan[viewPortName];\r\n        var viewPortInstruction = navigationInstruction.viewPortInstructions[viewPortName];\r\n        var viewPortComponent = viewPortInstruction.component;\r\n        var viewModel = viewPortComponent.viewModel;\r\n        if ((viewPortPlan.strategy === activationStrategy.invokeLifecycle\r\n            || viewPortPlan.strategy === activationStrategy.replace)\r\n            && callbackName in viewModel) {\r\n            list.push({\r\n                viewModel: viewModel,\r\n                lifecycleArgs: viewPortInstruction.lifecycleArgs,\r\n                router: router\r\n            });\r\n        }\r\n        var childNavInstruction = viewPortPlan.childNavigationInstruction;\r\n        if (childNavInstruction) {\r\n            findActivatable(childNavInstruction, callbackName, list, viewPortComponent.childRouter || router);\r\n        }\r\n    });\r\n    return list;\r\n};\r\nvar shouldContinue = function (output, router) {\r\n    if (output instanceof Error) {\r\n        return false;\r\n    }\r\n    if (isNavigationCommand(output)) {\r\n        if (typeof output.setRouter === 'function') {\r\n            output.setRouter(router);\r\n        }\r\n        return !!output.shouldContinueProcessing;\r\n    }\r\n    if (output === undefined) {\r\n        return true;\r\n    }\r\n    return output;\r\n};\r\n/**\r\n * wraps a subscription, allowing unsubscribe calls even if\r\n * the first value comes synchronously\r\n */\r\nvar SafeSubscription = /** @class */ (function () {\r\n    function SafeSubscription(subscriptionFunc) {\r\n        this._subscribed = true;\r\n        this._subscription = subscriptionFunc(this);\r\n        if (!this._subscribed) {\r\n            this.unsubscribe();\r\n        }\r\n    }\r\n    Object.defineProperty(SafeSubscription.prototype, \"subscribed\", {\r\n        get: function () {\r\n            return this._subscribed;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    SafeSubscription.prototype.unsubscribe = function () {\r\n        if (this._subscribed && this._subscription) {\r\n            this._subscription.unsubscribe();\r\n        }\r\n        this._subscribed = false;\r\n    };\r\n    return SafeSubscription;\r\n}());\r\n/**\r\n * A function to process return value from `activate`/`canActivate` steps\r\n * Supports observable/promise\r\n *\r\n * For observable, resolve at first next() or on complete()\r\n */\r\nvar processPotential = function (obj, resolve, reject) {\r\n    // if promise like\r\n    if (obj && typeof obj.then === 'function') {\r\n        return Promise.resolve(obj).then(resolve).catch(reject);\r\n    }\r\n    // if observable\r\n    if (obj && typeof obj.subscribe === 'function') {\r\n        var obs_1 = obj;\r\n        return new SafeSubscription(function (sub) { return obs_1.subscribe({\r\n            next: function () {\r\n                if (sub.subscribed) {\r\n                    sub.unsubscribe();\r\n                    resolve(obj);\r\n                }\r\n            },\r\n            error: function (error) {\r\n                if (sub.subscribed) {\r\n                    sub.unsubscribe();\r\n                    reject(error);\r\n                }\r\n            },\r\n            complete: function () {\r\n                if (sub.subscribed) {\r\n                    sub.unsubscribe();\r\n                    resolve(obj);\r\n                }\r\n            }\r\n        }); });\r\n    }\r\n    // else just resolve\r\n    try {\r\n        return resolve(obj);\r\n    }\r\n    catch (error) {\r\n        return reject(error);\r\n    }\r\n};\n\n/**\r\n * A pipeline step responsible for finding and activating method `canDeactivate` on a view model of a route\r\n */\r\nvar CanDeactivatePreviousStep = /** @class */ (function () {\r\n    function CanDeactivatePreviousStep() {\r\n    }\r\n    CanDeactivatePreviousStep.prototype.run = function (navigationInstruction, next) {\r\n        return processDeactivatable(navigationInstruction, 'canDeactivate', next);\r\n    };\r\n    return CanDeactivatePreviousStep;\r\n}());\r\n/**\r\n * A pipeline step responsible for finding and activating method `canActivate` on a view model of a route\r\n */\r\nvar CanActivateNextStep = /** @class */ (function () {\r\n    function CanActivateNextStep() {\r\n    }\r\n    CanActivateNextStep.prototype.run = function (navigationInstruction, next) {\r\n        return processActivatable(navigationInstruction, 'canActivate', next);\r\n    };\r\n    return CanActivateNextStep;\r\n}());\r\n/**\r\n * A pipeline step responsible for finding and activating method `deactivate` on a view model of a route\r\n */\r\nvar DeactivatePreviousStep = /** @class */ (function () {\r\n    function DeactivatePreviousStep() {\r\n    }\r\n    DeactivatePreviousStep.prototype.run = function (navigationInstruction, next) {\r\n        return processDeactivatable(navigationInstruction, 'deactivate', next, true);\r\n    };\r\n    return DeactivatePreviousStep;\r\n}());\r\n/**\r\n * A pipeline step responsible for finding and activating method `activate` on a view model of a route\r\n */\r\nvar ActivateNextStep = /** @class */ (function () {\r\n    function ActivateNextStep() {\r\n    }\r\n    ActivateNextStep.prototype.run = function (navigationInstruction, next) {\r\n        return processActivatable(navigationInstruction, 'activate', next, true);\r\n    };\r\n    return ActivateNextStep;\r\n}());\n\n/**\r\n * A multi-slots Pipeline Placeholder Step for hooking into a pipeline execution\r\n */\r\nvar PipelineSlot = /** @class */ (function () {\r\n    function PipelineSlot(container, name, alias) {\r\n        this.steps = [];\r\n        this.container = container;\r\n        this.slotName = name;\r\n        this.slotAlias = alias;\r\n    }\r\n    PipelineSlot.prototype.getSteps = function () {\r\n        var _this = this;\r\n        return this.steps.map(function (x) { return _this.container.get(x); });\r\n    };\r\n    return PipelineSlot;\r\n}());\r\n/**\r\n * Class responsible for creating the navigation pipeline.\r\n */\r\nvar PipelineProvider = /** @class */ (function () {\r\n    function PipelineProvider(container) {\r\n        this.container = container;\r\n        this.steps = [\r\n            BuildNavigationPlanStep,\r\n            CanDeactivatePreviousStep,\r\n            LoadRouteStep,\r\n            createPipelineSlot(container, \"authorize\" /* Authorize */),\r\n            CanActivateNextStep,\r\n            createPipelineSlot(container, \"preActivate\" /* PreActivate */, 'modelbind'),\r\n            // NOTE: app state changes start below - point of no return\r\n            DeactivatePreviousStep,\r\n            ActivateNextStep,\r\n            createPipelineSlot(container, \"preRender\" /* PreRender */, 'precommit'),\r\n            CommitChangesStep,\r\n            createPipelineSlot(container, \"postRender\" /* PostRender */, 'postcomplete')\r\n        ];\r\n    }\r\n    /**@internal */\r\n    PipelineProvider.inject = function () { return [Container]; };\r\n    /**\r\n     * Create the navigation pipeline.\r\n     */\r\n    PipelineProvider.prototype.createPipeline = function (useCanDeactivateStep) {\r\n        var _this = this;\r\n        if (useCanDeactivateStep === void 0) { useCanDeactivateStep = true; }\r\n        var pipeline = new Pipeline();\r\n        this.steps.forEach(function (step) {\r\n            if (useCanDeactivateStep || step !== CanDeactivatePreviousStep) {\r\n                pipeline.addStep(_this.container.get(step));\r\n            }\r\n        });\r\n        return pipeline;\r\n    };\r\n    /**@internal */\r\n    PipelineProvider.prototype._findStep = function (name) {\r\n        // Steps that are not PipelineSlots are constructor functions, and they will automatically fail. Probably.\r\n        return this.steps.find(function (x) { return x.slotName === name || x.slotAlias === name; });\r\n    };\r\n    /**\r\n     * Adds a step into the pipeline at a known slot location.\r\n     */\r\n    PipelineProvider.prototype.addStep = function (name, step) {\r\n        var found = this._findStep(name);\r\n        if (found) {\r\n            var slotSteps = found.steps;\r\n            // prevent duplicates\r\n            if (!slotSteps.includes(step)) {\r\n                slotSteps.push(step);\r\n            }\r\n        }\r\n        else {\r\n            throw new Error(\"Invalid pipeline slot name: \" + name + \".\");\r\n        }\r\n    };\r\n    /**\r\n     * Removes a step from a slot in the pipeline\r\n     */\r\n    PipelineProvider.prototype.removeStep = function (name, step) {\r\n        var slot = this._findStep(name);\r\n        if (slot) {\r\n            var slotSteps = slot.steps;\r\n            slotSteps.splice(slotSteps.indexOf(step), 1);\r\n        }\r\n    };\r\n    /**\r\n     * Clears all steps from a slot in the pipeline\r\n     * @internal\r\n     */\r\n    PipelineProvider.prototype._clearSteps = function (name) {\r\n        if (name === void 0) { name = ''; }\r\n        var slot = this._findStep(name);\r\n        if (slot) {\r\n            slot.steps = [];\r\n        }\r\n    };\r\n    /**\r\n     * Resets all pipeline slots\r\n     */\r\n    PipelineProvider.prototype.reset = function () {\r\n        this._clearSteps(\"authorize\" /* Authorize */);\r\n        this._clearSteps(\"preActivate\" /* PreActivate */);\r\n        this._clearSteps(\"preRender\" /* PreRender */);\r\n        this._clearSteps(\"postRender\" /* PostRender */);\r\n    };\r\n    return PipelineProvider;\r\n}());\r\n/**@internal */\r\nvar createPipelineSlot = function (container, name, alias) {\r\n    return new PipelineSlot(container, name, alias);\r\n};\n\nvar logger = getLogger('app-router');\r\n/**\r\n * The main application router.\r\n */\r\nvar AppRouter = /** @class */ (function (_super) {\r\n    __extends(AppRouter, _super);\r\n    function AppRouter(container, history, pipelineProvider, events) {\r\n        var _this = _super.call(this, container, history) || this;\r\n        _this.pipelineProvider = pipelineProvider;\r\n        _this.events = events;\r\n        return _this;\r\n    }\r\n    /**@internal */\r\n    AppRouter.inject = function () { return [Container, History, PipelineProvider, EventAggregator]; };\r\n    /**\r\n     * Fully resets the router's internal state. Primarily used internally by the framework when multiple calls to setRoot are made.\r\n     * Use with caution (actually, avoid using this). Do not use this to simply change your navigation model.\r\n     */\r\n    AppRouter.prototype.reset = function () {\r\n        _super.prototype.reset.call(this);\r\n        this.maxInstructionCount = 10;\r\n        if (!this._queue) {\r\n            this._queue = [];\r\n        }\r\n        else {\r\n            this._queue.length = 0;\r\n        }\r\n    };\r\n    /**\r\n     * Loads the specified URL.\r\n     *\r\n     * @param url The URL fragment to load.\r\n     */\r\n    AppRouter.prototype.loadUrl = function (url) {\r\n        var _this = this;\r\n        return this\r\n            ._createNavigationInstruction(url)\r\n            .then(function (instruction) { return _this._queueInstruction(instruction); })\r\n            .catch(function (error) {\r\n            logger.error(error);\r\n            restorePreviousLocation(_this);\r\n        });\r\n    };\r\n    /**\r\n     * Registers a viewPort to be used as a rendering target for activated routes.\r\n     *\r\n     * @param viewPort The viewPort. This is typically a <router-view/> element in Aurelia default impl\r\n     * @param name The name of the viewPort. 'default' if unspecified.\r\n     */\r\n    AppRouter.prototype.registerViewPort = function (viewPort, name) {\r\n        var _this = this;\r\n        // having strong typing without changing public API\r\n        var $viewPort = viewPort;\r\n        _super.prototype.registerViewPort.call(this, $viewPort, name);\r\n        // beside adding viewport to the registry of this instance\r\n        // AppRouter also configure routing/history to start routing functionality\r\n        // There are situation where there are more than 1 <router-view/> element at root view\r\n        // in that case, still only activate once via the following guard\r\n        if (!this.isActive) {\r\n            var viewModel_1 = this._findViewModel($viewPort);\r\n            if ('configureRouter' in viewModel_1) {\r\n                // If there are more than one <router-view/> element at root view\r\n                // use this flag to guard against configure method being invoked multiple times\r\n                // this flag is set inside method configure\r\n                if (!this.isConfigured) {\r\n                    // replace the real resolve with a noop to guarantee that any action in base class Router\r\n                    // won't resolve the configurePromise prematurely\r\n                    var resolveConfiguredPromise_1 = this._resolveConfiguredPromise;\r\n                    this._resolveConfiguredPromise = function () { };\r\n                    return this\r\n                        .configure(function (config) {\r\n                        return Promise\r\n                            .resolve(viewModel_1.configureRouter(config, _this))\r\n                            // an issue with configure interface. Should be fixed there\r\n                            // todo: fix this via configure interface in router\r\n                            .then(function () { return config; });\r\n                    })\r\n                        .then(function () {\r\n                        _this.activate();\r\n                        resolveConfiguredPromise_1();\r\n                    });\r\n                }\r\n            }\r\n            else {\r\n                this.activate();\r\n            }\r\n        }\r\n        // when a viewport is added dynamically to a root view that is already activated\r\n        // just process the navigation instruction\r\n        else {\r\n            this._dequeueInstruction();\r\n        }\r\n        return Promise.resolve();\r\n    };\r\n    /**\r\n     * Activates the router. This instructs the router to begin listening for history changes and processing instructions.\r\n     *\r\n     * @params options The set of options to activate the router with.\r\n     */\r\n    AppRouter.prototype.activate = function (options) {\r\n        if (this.isActive) {\r\n            return;\r\n        }\r\n        this.isActive = true;\r\n        // route handler property is responsible for handling url change\r\n        // the interface of aurelia-history isn't clear on this perspective\r\n        this.options = Object.assign({ routeHandler: this.loadUrl.bind(this) }, this.options, options);\r\n        this.history.activate(this.options);\r\n        this._dequeueInstruction();\r\n    };\r\n    /**\r\n     * Deactivates the router.\r\n     */\r\n    AppRouter.prototype.deactivate = function () {\r\n        this.isActive = false;\r\n        this.history.deactivate();\r\n    };\r\n    /**@internal */\r\n    AppRouter.prototype._queueInstruction = function (instruction) {\r\n        var _this = this;\r\n        return new Promise(function (resolve) {\r\n            instruction.resolve = resolve;\r\n            _this._queue.unshift(instruction);\r\n            _this._dequeueInstruction();\r\n        });\r\n    };\r\n    /**@internal */\r\n    AppRouter.prototype._dequeueInstruction = function (instructionCount) {\r\n        var _this = this;\r\n        if (instructionCount === void 0) { instructionCount = 0; }\r\n        return Promise.resolve().then(function () {\r\n            if (_this.isNavigating && !instructionCount) {\r\n                // ts complains about inconsistent returns without void 0\r\n                return void 0;\r\n            }\r\n            var instruction = _this._queue.shift();\r\n            _this._queue.length = 0;\r\n            if (!instruction) {\r\n                // ts complains about inconsistent returns without void 0\r\n                return void 0;\r\n            }\r\n            _this.isNavigating = true;\r\n            var navtracker = _this.history.getState('NavigationTracker');\r\n            var currentNavTracker = _this.currentNavigationTracker;\r\n            if (!navtracker && !currentNavTracker) {\r\n                _this.isNavigatingFirst = true;\r\n                _this.isNavigatingNew = true;\r\n            }\r\n            else if (!navtracker) {\r\n                _this.isNavigatingNew = true;\r\n            }\r\n            else if (!currentNavTracker) {\r\n                _this.isNavigatingRefresh = true;\r\n            }\r\n            else if (currentNavTracker < navtracker) {\r\n                _this.isNavigatingForward = true;\r\n            }\r\n            else if (currentNavTracker > navtracker) {\r\n                _this.isNavigatingBack = true;\r\n            }\r\n            if (!navtracker) {\r\n                navtracker = Date.now();\r\n                _this.history.setState('NavigationTracker', navtracker);\r\n            }\r\n            _this.currentNavigationTracker = navtracker;\r\n            instruction.previousInstruction = _this.currentInstruction;\r\n            var maxInstructionCount = _this.maxInstructionCount;\r\n            if (!instructionCount) {\r\n                _this.events.publish(\"router:navigation:processing\" /* Processing */, { instruction: instruction });\r\n            }\r\n            else if (instructionCount === maxInstructionCount - 1) {\r\n                logger.error(instructionCount + 1 + \" navigation instructions have been attempted without success. Restoring last known good location.\");\r\n                restorePreviousLocation(_this);\r\n                return _this._dequeueInstruction(instructionCount + 1);\r\n            }\r\n            else if (instructionCount > maxInstructionCount) {\r\n                throw new Error('Maximum navigation attempts exceeded. Giving up.');\r\n            }\r\n            var pipeline = _this.pipelineProvider.createPipeline(!_this.couldDeactivate);\r\n            return pipeline\r\n                .run(instruction)\r\n                .then(function (result) { return processResult(instruction, result, instructionCount, _this); })\r\n                .catch(function (error) {\r\n                return { output: error instanceof Error ? error : new Error(error) };\r\n            })\r\n                .then(function (result) { return resolveInstruction(instruction, result, !!instructionCount, _this); });\r\n        });\r\n    };\r\n    /**@internal */\r\n    AppRouter.prototype._findViewModel = function (viewPort) {\r\n        if (this.container.viewModel) {\r\n            return this.container.viewModel;\r\n        }\r\n        if (viewPort.container) {\r\n            var container = viewPort.container;\r\n            while (container) {\r\n                if (container.viewModel) {\r\n                    this.container.viewModel = container.viewModel;\r\n                    return container.viewModel;\r\n                }\r\n                container = container.parent;\r\n            }\r\n        }\r\n        return undefined;\r\n    };\r\n    return AppRouter;\r\n}(Router));\r\nvar processResult = function (instruction, result, instructionCount, router) {\r\n    if (!(result && 'completed' in result && 'output' in result)) {\r\n        result = result || {};\r\n        result.output = new Error(\"Expected router pipeline to return a navigation result, but got [\" + JSON.stringify(result) + \"] instead.\");\r\n    }\r\n    var finalResult = null;\r\n    var navigationCommandResult = null;\r\n    if (isNavigationCommand(result.output)) {\r\n        navigationCommandResult = result.output.navigate(router);\r\n    }\r\n    else {\r\n        finalResult = result;\r\n        if (!result.completed) {\r\n            if (result.output instanceof Error) {\r\n                logger.error(result.output.toString());\r\n            }\r\n            restorePreviousLocation(router);\r\n        }\r\n    }\r\n    return Promise.resolve(navigationCommandResult)\r\n        .then(function (_) { return router._dequeueInstruction(instructionCount + 1); })\r\n        .then(function (innerResult) { return finalResult || innerResult || result; });\r\n};\r\nvar resolveInstruction = function (instruction, result, isInnerInstruction, router) {\r\n    instruction.resolve(result);\r\n    var eventAggregator = router.events;\r\n    var eventArgs = { instruction: instruction, result: result };\r\n    if (!isInnerInstruction) {\r\n        router.isNavigating = false;\r\n        router.isExplicitNavigation = false;\r\n        router.isExplicitNavigationBack = false;\r\n        router.isNavigatingFirst = false;\r\n        router.isNavigatingNew = false;\r\n        router.isNavigatingRefresh = false;\r\n        router.isNavigatingForward = false;\r\n        router.isNavigatingBack = false;\r\n        router.couldDeactivate = false;\r\n        var eventName = void 0;\r\n        if (result.output instanceof Error) {\r\n            eventName = \"router:navigation:error\" /* Error */;\r\n        }\r\n        else if (!result.completed) {\r\n            eventName = \"router:navigation:canceled\" /* Canceled */;\r\n        }\r\n        else {\r\n            var queryString = instruction.queryString ? ('?' + instruction.queryString) : '';\r\n            router.history.previousLocation = instruction.fragment + queryString;\r\n            eventName = \"router:navigation:success\" /* Success */;\r\n        }\r\n        eventAggregator.publish(eventName, eventArgs);\r\n        eventAggregator.publish(\"router:navigation:complete\" /* Complete */, eventArgs);\r\n    }\r\n    else {\r\n        eventAggregator.publish(\"router:navigation:child:complete\" /* ChildComplete */, eventArgs);\r\n    }\r\n    return result;\r\n};\r\nvar restorePreviousLocation = function (router) {\r\n    var previousLocation = router.history.previousLocation;\r\n    if (previousLocation) {\r\n        router.navigate(previousLocation, { trigger: false, replace: true });\r\n    }\r\n    else if (router.fallbackRoute) {\r\n        router.navigate(router.fallbackRoute, { trigger: true, replace: true });\r\n    }\r\n    else {\r\n        logger.error('Router navigation failed, and no previous location or fallbackRoute could be restored.');\r\n    }\r\n};\n\n/**\r\n* The status of a Pipeline.\r\n*/\r\nvar PipelineStatus;\r\n(function (PipelineStatus) {\r\n    PipelineStatus[\"Completed\"] = \"completed\";\r\n    PipelineStatus[\"Canceled\"] = \"canceled\";\r\n    PipelineStatus[\"Rejected\"] = \"rejected\";\r\n    PipelineStatus[\"Running\"] = \"running\";\r\n})(PipelineStatus || (PipelineStatus = {}));\n\n/**\r\n * A list of known router events used by the Aurelia router\r\n * to signal the pipeline has come to a certain state\r\n */\r\n// const enum is preserved in tsconfig\r\nvar RouterEvent;\r\n(function (RouterEvent) {\r\n    RouterEvent[\"Processing\"] = \"router:navigation:processing\";\r\n    RouterEvent[\"Error\"] = \"router:navigation:error\";\r\n    RouterEvent[\"Canceled\"] = \"router:navigation:canceled\";\r\n    RouterEvent[\"Complete\"] = \"router:navigation:complete\";\r\n    RouterEvent[\"Success\"] = \"router:navigation:success\";\r\n    RouterEvent[\"ChildComplete\"] = \"router:navigation:child:complete\";\r\n})(RouterEvent || (RouterEvent = {}));\n\n/**\r\n * Available pipeline slot names to insert interceptor into router pipeline\r\n */\r\n// const enum is preserved in tsconfig\r\nvar PipelineSlotName;\r\n(function (PipelineSlotName) {\r\n    /**\r\n     * Authorization slot. Invoked early in the pipeline,\r\n     * before `canActivate` hook of incoming route\r\n     */\r\n    PipelineSlotName[\"Authorize\"] = \"authorize\";\r\n    /**\r\n     * Pre-activation slot. Invoked early in the pipeline,\r\n     * Invoked timing:\r\n     *   - after Authorization slot\r\n     *   - after canActivate hook on new view model\r\n     *   - before deactivate hook on old view model\r\n     *   - before activate hook on new view model\r\n     */\r\n    PipelineSlotName[\"PreActivate\"] = \"preActivate\";\r\n    /**\r\n     * Pre-render slot. Invoked later in the pipeline\r\n     * Invokcation timing:\r\n     *   - after activate hook on new view model\r\n     *   - before commit step on new navigation instruction\r\n     */\r\n    PipelineSlotName[\"PreRender\"] = \"preRender\";\r\n    /**\r\n     * Post-render slot. Invoked last in the pipeline\r\n     */\r\n    PipelineSlotName[\"PostRender\"] = \"postRender\";\r\n})(PipelineSlotName || (PipelineSlotName = {}));\n\nexport { ActivateNextStep, AppRouter, BuildNavigationPlanStep, CanActivateNextStep, CanDeactivatePreviousStep, CommitChangesStep, DeactivatePreviousStep, LoadRouteStep, NavModel, NavigationInstruction, Pipeline, PipelineProvider, PipelineSlotName, PipelineStatus, Redirect, RedirectToRoute, RouteLoader, Router, RouterConfiguration, RouterEvent, activationStrategy, isNavigationCommand };\n//# sourceMappingURL=aurelia-router.js.map\n","var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n\n\nimport { DOM, FEATURE } from 'aurelia-pal';\n\nvar stackSeparator = '\\nEnqueued in TaskQueue by:\\n';\nvar microStackSeparator = '\\nEnqueued in MicroTaskQueue by:\\n';\n\nfunction makeRequestFlushFromMutationObserver(flush) {\n  var observer = DOM.createMutationObserver(flush);\n  var val = 'a';\n  var node = DOM.createTextNode('a');\n  var values = Object.create(null);\n  values.a = 'b';\n  values.b = 'a';\n  observer.observe(node, { characterData: true });\n  return function requestFlush() {\n    node.data = val = values[val];\n  };\n}\n\nfunction makeRequestFlushFromTimer(flush) {\n  return function requestFlush() {\n    var timeoutHandle = setTimeout(handleFlushTimer, 0);\n\n    var intervalHandle = setInterval(handleFlushTimer, 50);\n    function handleFlushTimer() {\n      clearTimeout(timeoutHandle);\n      clearInterval(intervalHandle);\n      flush();\n    }\n  };\n}\n\nfunction onError(error, task, longStacks) {\n  if (longStacks && task.stack && (typeof error === 'undefined' ? 'undefined' : _typeof(error)) === 'object' && error !== null) {\n    error.stack = filterFlushStack(error.stack) + task.stack;\n  }\n\n  if ('onError' in task) {\n    task.onError(error);\n  } else {\n    setTimeout(function () {\n      throw error;\n    }, 0);\n  }\n}\n\nexport var TaskQueue = function () {\n  function TaskQueue() {\n    var _this = this;\n\n    \n\n    this.flushing = false;\n    this.longStacks = false;\n\n    this.microTaskQueue = [];\n    this.microTaskQueueCapacity = 1024;\n    this.taskQueue = [];\n\n    if (FEATURE.mutationObserver) {\n      this.requestFlushMicroTaskQueue = makeRequestFlushFromMutationObserver(function () {\n        return _this.flushMicroTaskQueue();\n      });\n    } else {\n      this.requestFlushMicroTaskQueue = makeRequestFlushFromTimer(function () {\n        return _this.flushMicroTaskQueue();\n      });\n    }\n\n    this.requestFlushTaskQueue = makeRequestFlushFromTimer(function () {\n      return _this.flushTaskQueue();\n    });\n  }\n\n  TaskQueue.prototype._flushQueue = function _flushQueue(queue, capacity) {\n    var index = 0;\n    var task = void 0;\n\n    try {\n      this.flushing = true;\n      while (index < queue.length) {\n        task = queue[index];\n        if (this.longStacks) {\n          this.stack = typeof task.stack === 'string' ? task.stack : undefined;\n        }\n        task.call();\n        index++;\n\n        if (index > capacity) {\n          for (var scan = 0, newLength = queue.length - index; scan < newLength; scan++) {\n            queue[scan] = queue[scan + index];\n          }\n\n          queue.length -= index;\n          index = 0;\n        }\n      }\n    } catch (error) {\n      onError(error, task, this.longStacks);\n    } finally {\n      this.flushing = false;\n    }\n  };\n\n  TaskQueue.prototype.queueMicroTask = function queueMicroTask(task) {\n    if (this.microTaskQueue.length < 1) {\n      this.requestFlushMicroTaskQueue();\n    }\n\n    if (this.longStacks) {\n      task.stack = this.prepareQueueStack(microStackSeparator);\n    }\n\n    this.microTaskQueue.push(task);\n  };\n\n  TaskQueue.prototype.queueTask = function queueTask(task) {\n    if (this.taskQueue.length < 1) {\n      this.requestFlushTaskQueue();\n    }\n\n    if (this.longStacks) {\n      task.stack = this.prepareQueueStack(stackSeparator);\n    }\n\n    this.taskQueue.push(task);\n  };\n\n  TaskQueue.prototype.flushTaskQueue = function flushTaskQueue() {\n    var queue = this.taskQueue;\n    this.taskQueue = [];\n    this._flushQueue(queue, Number.MAX_VALUE);\n  };\n\n  TaskQueue.prototype.flushMicroTaskQueue = function flushMicroTaskQueue() {\n    var queue = this.microTaskQueue;\n    this._flushQueue(queue, this.microTaskQueueCapacity);\n    queue.length = 0;\n  };\n\n  TaskQueue.prototype.prepareQueueStack = function prepareQueueStack(separator) {\n    var stack = separator + filterQueueStack(captureStack());\n\n    if (typeof this.stack === 'string') {\n      stack = filterFlushStack(stack) + this.stack;\n    }\n\n    return stack;\n  };\n\n  return TaskQueue;\n}();\n\nfunction captureStack() {\n  var error = new Error();\n\n  if (error.stack) {\n    return error.stack;\n  }\n\n  try {\n    throw error;\n  } catch (e) {\n    return e.stack;\n  }\n}\n\nfunction filterQueueStack(stack) {\n  return stack.replace(/^[\\s\\S]*?\\bqueue(Micro)?Task\\b[^\\n]*\\n/, '');\n}\n\nfunction filterFlushStack(stack) {\n  var index = stack.lastIndexOf('flushMicroTaskQueue');\n\n  if (index < 0) {\n    index = stack.lastIndexOf('flushTaskQueue');\n    if (index < 0) {\n      return stack;\n    }\n  }\n\n  index = stack.lastIndexOf('\\n', index);\n\n  return index < 0 ? stack : stack.substr(0, index);\n}","import { BehaviorInstruction, BindingLanguage } from 'aurelia-templating';\nimport { camelCase, SVGAnalyzer, bindingMode, enqueueBindingConnect, connectable, sourceContext, BindingExpression, ListenerExpression, delegationStrategy, CallExpression, Parser, ObserverLocator, EventManager, NameExpression, LiteralString } from 'aurelia-binding';\nimport * as LogManager from 'aurelia-logging';\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n    extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n    return extendStatics(d, b);\r\n};\r\n\r\nfunction __extends(d, b) {\r\n    extendStatics(d, b);\r\n    function __() { this.constructor = d; }\r\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nfunction __decorate(decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\n\nvar AttributeMap = (function () {\r\n    function AttributeMap(svg) {\r\n        this.elements = Object.create(null);\r\n        this.allElements = Object.create(null);\r\n        this.svg = svg;\r\n        this.registerUniversal('accesskey', 'accessKey');\r\n        this.registerUniversal('contenteditable', 'contentEditable');\r\n        this.registerUniversal('tabindex', 'tabIndex');\r\n        this.registerUniversal('textcontent', 'textContent');\r\n        this.registerUniversal('innerhtml', 'innerHTML');\r\n        this.registerUniversal('scrolltop', 'scrollTop');\r\n        this.registerUniversal('scrollleft', 'scrollLeft');\r\n        this.registerUniversal('readonly', 'readOnly');\r\n        this.register('label', 'for', 'htmlFor');\r\n        this.register('img', 'usemap', 'useMap');\r\n        this.register('input', 'maxlength', 'maxLength');\r\n        this.register('input', 'minlength', 'minLength');\r\n        this.register('input', 'formaction', 'formAction');\r\n        this.register('input', 'formenctype', 'formEncType');\r\n        this.register('input', 'formmethod', 'formMethod');\r\n        this.register('input', 'formnovalidate', 'formNoValidate');\r\n        this.register('input', 'formtarget', 'formTarget');\r\n        this.register('textarea', 'maxlength', 'maxLength');\r\n        this.register('td', 'rowspan', 'rowSpan');\r\n        this.register('td', 'colspan', 'colSpan');\r\n        this.register('th', 'rowspan', 'rowSpan');\r\n        this.register('th', 'colspan', 'colSpan');\r\n    }\r\n    AttributeMap.prototype.register = function (elementName, attributeName, propertyName) {\r\n        elementName = elementName.toLowerCase();\r\n        attributeName = attributeName.toLowerCase();\r\n        var element = this.elements[elementName] = (this.elements[elementName] || Object.create(null));\r\n        element[attributeName] = propertyName;\r\n    };\r\n    AttributeMap.prototype.registerUniversal = function (attributeName, propertyName) {\r\n        attributeName = attributeName.toLowerCase();\r\n        this.allElements[attributeName] = propertyName;\r\n    };\r\n    AttributeMap.prototype.map = function (elementName, attributeName) {\r\n        if (this.svg.isStandardSvgAttribute(elementName, attributeName)) {\r\n            return attributeName;\r\n        }\r\n        elementName = elementName.toLowerCase();\r\n        attributeName = attributeName.toLowerCase();\r\n        var element = this.elements[elementName];\r\n        if (element !== undefined && attributeName in element) {\r\n            return element[attributeName];\r\n        }\r\n        if (attributeName in this.allElements) {\r\n            return this.allElements[attributeName];\r\n        }\r\n        if (/(?:^data-)|(?:^aria-)|:/.test(attributeName)) {\r\n            return attributeName;\r\n        }\r\n        return camelCase(attributeName);\r\n    };\r\n    AttributeMap.inject = [SVGAnalyzer];\r\n    return AttributeMap;\r\n}());\n\nvar InterpolationBindingExpression = (function () {\r\n    function InterpolationBindingExpression(observerLocator, targetProperty, parts, mode, lookupFunctions, attribute) {\r\n        this.observerLocator = observerLocator;\r\n        this.targetProperty = targetProperty;\r\n        this.parts = parts;\r\n        this.mode = mode;\r\n        this.lookupFunctions = lookupFunctions;\r\n        this.attribute = this.attrToRemove = attribute;\r\n        this.discrete = false;\r\n    }\r\n    InterpolationBindingExpression.prototype.createBinding = function (target) {\r\n        if (this.parts.length === 3) {\r\n            return new ChildInterpolationBinding(target, this.observerLocator, this.parts[1], this.mode, this.lookupFunctions, this.targetProperty, this.parts[0], this.parts[2]);\r\n        }\r\n        return new InterpolationBinding(this.observerLocator, this.parts, target, this.targetProperty, this.mode, this.lookupFunctions);\r\n    };\r\n    return InterpolationBindingExpression;\r\n}());\r\nfunction validateTarget(target, propertyName) {\r\n    if (propertyName === 'style') {\r\n        LogManager.getLogger('templating-binding')\r\n            .info('Internet Explorer does not support interpolation in \"style\" attributes.  Use the style attribute\\'s alias, \"css\" instead.');\r\n    }\r\n    else if (target.parentElement && target.parentElement.nodeName === 'TEXTAREA' && propertyName === 'textContent') {\r\n        throw new Error('Interpolation binding cannot be used in the content of a textarea element.  Use <textarea value.bind=\"expression\"></textarea> instead.');\r\n    }\r\n}\r\nvar InterpolationBinding = (function () {\r\n    function InterpolationBinding(observerLocator, parts, target, targetProperty, mode, lookupFunctions) {\r\n        validateTarget(target, targetProperty);\r\n        this.observerLocator = observerLocator;\r\n        this.parts = parts;\r\n        this.target = target;\r\n        this.targetProperty = targetProperty;\r\n        this.targetAccessor = observerLocator.getAccessor(target, targetProperty);\r\n        this.mode = mode;\r\n        this.lookupFunctions = lookupFunctions;\r\n    }\r\n    InterpolationBinding.prototype.interpolate = function () {\r\n        if (this.isBound) {\r\n            var value = '';\r\n            var parts = this.parts;\r\n            for (var i = 0, ii = parts.length; i < ii; i++) {\r\n                value += (i % 2 === 0 ? parts[i] : this[\"childBinding\".concat(i)].value);\r\n            }\r\n            this.targetAccessor.setValue(value, this.target, this.targetProperty);\r\n        }\r\n    };\r\n    InterpolationBinding.prototype.updateOneTimeBindings = function () {\r\n        for (var i = 1, ii = this.parts.length; i < ii; i += 2) {\r\n            var child = this[\"childBinding\".concat(i)];\r\n            if (child.mode === bindingMode.oneTime) {\r\n                child.call();\r\n            }\r\n        }\r\n    };\r\n    InterpolationBinding.prototype.bind = function (source) {\r\n        if (this.isBound) {\r\n            if (this.source === source) {\r\n                return;\r\n            }\r\n            this.unbind();\r\n        }\r\n        this.source = source;\r\n        var parts = this.parts;\r\n        for (var i = 1, ii = parts.length; i < ii; i += 2) {\r\n            var binding = new ChildInterpolationBinding(this, this.observerLocator, parts[i], this.mode, this.lookupFunctions);\r\n            binding.bind(source);\r\n            this[\"childBinding\".concat(i)] = binding;\r\n        }\r\n        this.isBound = true;\r\n        this.interpolate();\r\n    };\r\n    InterpolationBinding.prototype.unbind = function () {\r\n        if (!this.isBound) {\r\n            return;\r\n        }\r\n        this.isBound = false;\r\n        this.source = null;\r\n        var parts = this.parts;\r\n        for (var i = 1, ii = parts.length; i < ii; i += 2) {\r\n            var name_1 = \"childBinding\".concat(i);\r\n            this[name_1].unbind();\r\n        }\r\n    };\r\n    return InterpolationBinding;\r\n}());\r\nvar ChildInterpolationBinding = (function () {\r\n    function ChildInterpolationBinding(target, observerLocator, sourceExpression, mode, lookupFunctions, targetProperty, left, right) {\r\n        if (target instanceof InterpolationBinding) {\r\n            this.parent = target;\r\n        }\r\n        else {\r\n            validateTarget(target, targetProperty);\r\n            this.target = target;\r\n            this.targetProperty = targetProperty;\r\n            this.targetAccessor = observerLocator.getAccessor(target, targetProperty);\r\n        }\r\n        this.observerLocator = observerLocator;\r\n        this.sourceExpression = sourceExpression;\r\n        this.mode = mode;\r\n        this.lookupFunctions = lookupFunctions;\r\n        this.left = left;\r\n        this.right = right;\r\n    }\r\n    ChildInterpolationBinding.prototype.updateTarget = function (value) {\r\n        value = value === null || value === undefined ? '' : value.toString();\r\n        if (value !== this.value) {\r\n            this.value = value;\r\n            if (this.parent) {\r\n                this.parent.interpolate();\r\n            }\r\n            else {\r\n                this.targetAccessor.setValue(this.left + value + this.right, this.target, this.targetProperty);\r\n            }\r\n        }\r\n    };\r\n    ChildInterpolationBinding.prototype.call = function () {\r\n        if (!this.isBound) {\r\n            return;\r\n        }\r\n        this.rawValue = this.sourceExpression.evaluate(this.source, this.lookupFunctions);\r\n        this.updateTarget(this.rawValue);\r\n        if (this.mode !== bindingMode.oneTime) {\r\n            this._version++;\r\n            this.sourceExpression.connect(this, this.source);\r\n            if (this.rawValue instanceof Array) {\r\n                this.observeArray(this.rawValue);\r\n            }\r\n            this.unobserve(false);\r\n        }\r\n    };\r\n    ChildInterpolationBinding.prototype.bind = function (source) {\r\n        if (this.isBound) {\r\n            if (this.source === source) {\r\n                return;\r\n            }\r\n            this.unbind();\r\n        }\r\n        this.isBound = true;\r\n        this.source = source;\r\n        var sourceExpression = this.sourceExpression;\r\n        if (sourceExpression.bind) {\r\n            sourceExpression.bind(this, source, this.lookupFunctions);\r\n        }\r\n        this.rawValue = sourceExpression.evaluate(source, this.lookupFunctions);\r\n        this.updateTarget(this.rawValue);\r\n        if (this.mode === bindingMode.oneWay) {\r\n            enqueueBindingConnect(this);\r\n        }\r\n    };\r\n    ChildInterpolationBinding.prototype.unbind = function () {\r\n        if (!this.isBound) {\r\n            return;\r\n        }\r\n        this.isBound = false;\r\n        var sourceExpression = this.sourceExpression;\r\n        if (sourceExpression.unbind) {\r\n            sourceExpression.unbind(this, this.source);\r\n        }\r\n        this.source = null;\r\n        this.value = null;\r\n        this.rawValue = null;\r\n        this.unobserve(true);\r\n    };\r\n    ChildInterpolationBinding.prototype.connect = function (evaluate) {\r\n        if (!this.isBound) {\r\n            return;\r\n        }\r\n        if (evaluate) {\r\n            this.rawValue = this.sourceExpression.evaluate(this.source, this.lookupFunctions);\r\n            this.updateTarget(this.rawValue);\r\n        }\r\n        this.sourceExpression.connect(this, this.source);\r\n        if (this.rawValue instanceof Array) {\r\n            this.observeArray(this.rawValue);\r\n        }\r\n    };\r\n    ChildInterpolationBinding = __decorate([\r\n        connectable()\r\n    ], ChildInterpolationBinding);\r\n    return ChildInterpolationBinding;\r\n}());\n\nvar LetExpression = (function () {\r\n    function LetExpression(observerLocator, targetProperty, sourceExpression, lookupFunctions, toBindingContext) {\r\n        this.observerLocator = observerLocator;\r\n        this.sourceExpression = sourceExpression;\r\n        this.targetProperty = targetProperty;\r\n        this.lookupFunctions = lookupFunctions;\r\n        this.toBindingContext = toBindingContext;\r\n    }\r\n    LetExpression.prototype.createBinding = function () {\r\n        return new LetBinding(this.observerLocator, this.sourceExpression, this.targetProperty, this.lookupFunctions, this.toBindingContext);\r\n    };\r\n    return LetExpression;\r\n}());\r\nvar LetBinding = (function () {\r\n    function LetBinding(observerLocator, sourceExpression, targetProperty, lookupFunctions, toBindingContext) {\r\n        this.observerLocator = observerLocator;\r\n        this.sourceExpression = sourceExpression;\r\n        this.targetProperty = targetProperty;\r\n        this.lookupFunctions = lookupFunctions;\r\n        this.source = null;\r\n        this.target = null;\r\n        this.toBindingContext = toBindingContext;\r\n    }\r\n    LetBinding.prototype.updateTarget = function () {\r\n        var value = this.sourceExpression.evaluate(this.source, this.lookupFunctions);\r\n        this.target[this.targetProperty] = value;\r\n    };\r\n    LetBinding.prototype.call = function (context) {\r\n        if (!this.isBound) {\r\n            return;\r\n        }\r\n        if (context === sourceContext) {\r\n            this.updateTarget();\r\n            return;\r\n        }\r\n        throw new Error(\"Unexpected call context \".concat(context));\r\n    };\r\n    LetBinding.prototype.bind = function (source) {\r\n        if (this.isBound) {\r\n            if (this.source === source) {\r\n                return;\r\n            }\r\n            this.unbind();\r\n        }\r\n        this.isBound = true;\r\n        this.source = source;\r\n        this.target = this.toBindingContext ? source.bindingContext : source.overrideContext;\r\n        if (this.sourceExpression.bind) {\r\n            this.sourceExpression.bind(this, source, this.lookupFunctions);\r\n        }\r\n        enqueueBindingConnect(this);\r\n    };\r\n    LetBinding.prototype.unbind = function () {\r\n        if (!this.isBound) {\r\n            return;\r\n        }\r\n        this.isBound = false;\r\n        if (this.sourceExpression.unbind) {\r\n            this.sourceExpression.unbind(this, this.source);\r\n        }\r\n        this.source = null;\r\n        this.target = null;\r\n        this.unobserve(true);\r\n    };\r\n    LetBinding.prototype.unobserve = function (arg0) {\r\n        throw new Error('Method not implemented.');\r\n    };\r\n    LetBinding.prototype.connect = function () {\r\n        if (!this.isBound) {\r\n            return;\r\n        }\r\n        this.updateTarget();\r\n        this.sourceExpression.connect(this, this.source);\r\n    };\r\n    LetBinding = __decorate([\r\n        connectable()\r\n    ], LetBinding);\r\n    return LetBinding;\r\n}());\n\nvar LetInterpolationBindingExpression = (function () {\r\n    function LetInterpolationBindingExpression(observerLocator, targetProperty, parts, lookupFunctions, toBindingContext) {\r\n        this.observerLocator = observerLocator;\r\n        this.targetProperty = targetProperty;\r\n        this.parts = parts;\r\n        this.lookupFunctions = lookupFunctions;\r\n        this.toBindingContext = toBindingContext;\r\n    }\r\n    LetInterpolationBindingExpression.prototype.createBinding = function () {\r\n        return new LetInterpolationBinding(this.observerLocator, this.targetProperty, this.parts, this.lookupFunctions, this.toBindingContext);\r\n    };\r\n    return LetInterpolationBindingExpression;\r\n}());\r\nvar LetInterpolationBinding = (function () {\r\n    function LetInterpolationBinding(observerLocator, targetProperty, parts, lookupFunctions, toBindingContext) {\r\n        this.observerLocator = observerLocator;\r\n        this.parts = parts;\r\n        this.targetProperty = targetProperty;\r\n        this.lookupFunctions = lookupFunctions;\r\n        this.toBindingContext = toBindingContext;\r\n        this.target = null;\r\n    }\r\n    LetInterpolationBinding.prototype.bind = function (source) {\r\n        if (this.isBound) {\r\n            if (this.source === source) {\r\n                return;\r\n            }\r\n            this.unbind();\r\n        }\r\n        this.isBound = true;\r\n        this.source = source;\r\n        this.target = this.toBindingContext ? source.bindingContext : source.overrideContext;\r\n        this.interpolationBinding = this.createInterpolationBinding();\r\n        this.interpolationBinding.bind(source);\r\n    };\r\n    LetInterpolationBinding.prototype.unbind = function () {\r\n        if (!this.isBound) {\r\n            return;\r\n        }\r\n        this.isBound = false;\r\n        this.source = null;\r\n        this.target = null;\r\n        this.interpolationBinding.unbind();\r\n        this.interpolationBinding = null;\r\n    };\r\n    LetInterpolationBinding.prototype.createInterpolationBinding = function () {\r\n        if (this.parts.length === 3) {\r\n            return new ChildInterpolationBinding(this.target, this.observerLocator, this.parts[1], bindingMode.toView, this.lookupFunctions, this.targetProperty, this.parts[0], this.parts[2]);\r\n        }\r\n        return new InterpolationBinding(this.observerLocator, this.parts, this.target, this.targetProperty, bindingMode.toView, this.lookupFunctions);\r\n    };\r\n    return LetInterpolationBinding;\r\n}());\n\nvar SyntaxInterpreter = (function () {\r\n    function SyntaxInterpreter(parser, observerLocator, eventManager, attributeMap) {\r\n        this.parser = parser;\r\n        this.observerLocator = observerLocator;\r\n        this.eventManager = eventManager;\r\n        this.attributeMap = attributeMap;\r\n    }\r\n    SyntaxInterpreter.prototype.interpret = function (resources, element, info, existingInstruction, context) {\r\n        if (info.command in this) {\r\n            return this[info.command](resources, element, info, existingInstruction, context);\r\n        }\r\n        return this.handleUnknownCommand(resources, element, info, existingInstruction, context);\r\n    };\r\n    SyntaxInterpreter.prototype.handleUnknownCommand = function (resources, element, info, existingInstruction, context) {\r\n        LogManager.getLogger('templating-binding').warn('Unknown binding command.', info);\r\n        return existingInstruction;\r\n    };\r\n    SyntaxInterpreter.prototype.determineDefaultBindingMode = function (element, attrName, context) {\r\n        var tagName = element.tagName.toLowerCase();\r\n        if (tagName === 'input' && (attrName === 'value' || attrName === 'files') && element.type !== 'checkbox' && element.type !== 'radio'\r\n            || tagName === 'input' && attrName === 'checked' && (element.type === 'checkbox' || element.type === 'radio')\r\n            || (tagName === 'textarea' || tagName === 'select') && attrName === 'value'\r\n            || (attrName === 'textcontent' || attrName === 'innerhtml') && element.contentEditable === 'true'\r\n            || attrName === 'scrolltop'\r\n            || attrName === 'scrollleft') {\r\n            return bindingMode.twoWay;\r\n        }\r\n        if (context\r\n            && attrName in context.attributes\r\n            && context.attributes[attrName]\r\n            && context.attributes[attrName].defaultBindingMode >= bindingMode.oneTime) {\r\n            return context.attributes[attrName].defaultBindingMode;\r\n        }\r\n        return bindingMode.toView;\r\n    };\r\n    SyntaxInterpreter.prototype.bind = function (resources, element, info, existingInstruction, context) {\r\n        var instruction = existingInstruction || BehaviorInstruction.attribute(info.attrName);\r\n        instruction.attributes[info.attrName] = new BindingExpression(this.observerLocator, this.attributeMap.map(element.tagName, info.attrName), this.parser.parse(info.attrValue), info.defaultBindingMode === undefined || info.defaultBindingMode === null\r\n            ? this.determineDefaultBindingMode(element, info.attrName, context)\r\n            : info.defaultBindingMode, resources.lookupFunctions);\r\n        return instruction;\r\n    };\r\n    SyntaxInterpreter.prototype.trigger = function (resources, element, info) {\r\n        return new ListenerExpression(this.eventManager, info.attrName, this.parser.parse(info.attrValue), delegationStrategy.none, true, resources.lookupFunctions);\r\n    };\r\n    SyntaxInterpreter.prototype.capture = function (resources, element, info) {\r\n        return new ListenerExpression(this.eventManager, info.attrName, this.parser.parse(info.attrValue), delegationStrategy.capturing, true, resources.lookupFunctions);\r\n    };\r\n    SyntaxInterpreter.prototype.delegate = function (resources, element, info) {\r\n        return new ListenerExpression(this.eventManager, info.attrName, this.parser.parse(info.attrValue), delegationStrategy.bubbling, true, resources.lookupFunctions);\r\n    };\r\n    SyntaxInterpreter.prototype.call = function (resources, element, info, existingInstruction) {\r\n        var instruction = existingInstruction || BehaviorInstruction.attribute(info.attrName);\r\n        instruction.attributes[info.attrName] = new CallExpression(this.observerLocator, info.attrName, this.parser.parse(info.attrValue), resources.lookupFunctions);\r\n        return instruction;\r\n    };\r\n    SyntaxInterpreter.prototype.options = function (resources, element, info, existingInstruction, context) {\r\n        var instruction = existingInstruction || BehaviorInstruction.attribute(info.attrName);\r\n        var attrValue = info.attrValue;\r\n        var language = this.language;\r\n        var name = null;\r\n        var target = '';\r\n        var current;\r\n        var i;\r\n        var ii;\r\n        var inString = false;\r\n        var inEscape = false;\r\n        var foundName = false;\r\n        for (i = 0, ii = attrValue.length; i < ii; ++i) {\r\n            current = attrValue[i];\r\n            if (current === ';' && !inString) {\r\n                if (!foundName) {\r\n                    name = this._getPrimaryPropertyName(resources, context);\r\n                }\r\n                info = language.inspectAttribute(resources, '?', name, target.trim());\r\n                language.createAttributeInstruction(resources, element, info, instruction, context);\r\n                if (!instruction.attributes[info.attrName]) {\r\n                    instruction.attributes[info.attrName] = info.attrValue;\r\n                }\r\n                target = '';\r\n                name = null;\r\n            }\r\n            else if (current === ':' && name === null) {\r\n                foundName = true;\r\n                name = target.trim();\r\n                target = '';\r\n            }\r\n            else if (current === '\\\\') {\r\n                target += current;\r\n                inEscape = true;\r\n                continue;\r\n            }\r\n            else {\r\n                target += current;\r\n                if (name !== null && inEscape === false && current === '\\'') {\r\n                    inString = !inString;\r\n                }\r\n            }\r\n            inEscape = false;\r\n        }\r\n        if (!foundName) {\r\n            name = this._getPrimaryPropertyName(resources, context);\r\n        }\r\n        if (name !== null) {\r\n            info = language.inspectAttribute(resources, '?', name, target.trim());\r\n            language.createAttributeInstruction(resources, element, info, instruction, context);\r\n            if (!instruction.attributes[info.attrName]) {\r\n                instruction.attributes[info.attrName] = info.attrValue;\r\n            }\r\n        }\r\n        return instruction;\r\n    };\r\n    SyntaxInterpreter.prototype._getPrimaryPropertyName = function (resources, context) {\r\n        var type = resources.getAttribute(context.attributeName);\r\n        if (type && type.primaryProperty) {\r\n            return type.primaryProperty.attribute;\r\n        }\r\n        return null;\r\n    };\r\n    SyntaxInterpreter.prototype['for'] = function (resources, element, info, existingInstruction) {\r\n        var parts;\r\n        var keyValue;\r\n        var instruction;\r\n        var attrValue;\r\n        var isDestructuring;\r\n        attrValue = info.attrValue;\r\n        isDestructuring = attrValue.match(/^ *[[].+[\\]]/);\r\n        parts = isDestructuring ? attrValue.split('of ') : attrValue.split(' of ');\r\n        if (parts.length !== 2) {\r\n            throw new Error('Incorrect syntax for \"for\". The form is: \"$local of $items\" or \"[$key, $value] of $items\".');\r\n        }\r\n        instruction = existingInstruction || BehaviorInstruction.attribute(info.attrName);\r\n        if (isDestructuring) {\r\n            keyValue = parts[0].replace(/[[\\]]/g, '').replace(/,/g, ' ').replace(/\\s+/g, ' ').trim().split(' ');\r\n            instruction.attributes.key = keyValue[0];\r\n            instruction.attributes.value = keyValue[1];\r\n        }\r\n        else {\r\n            instruction.attributes.local = parts[0];\r\n        }\r\n        instruction.attributes.items = new BindingExpression(this.observerLocator, 'items', this.parser.parse(parts[1]), bindingMode.toView, resources.lookupFunctions);\r\n        return instruction;\r\n    };\r\n    SyntaxInterpreter.prototype['two-way'] = function (resources, element, info, existingInstruction) {\r\n        var instruction = existingInstruction || BehaviorInstruction.attribute(info.attrName);\r\n        instruction.attributes[info.attrName] = new BindingExpression(this.observerLocator, this.attributeMap.map(element.tagName, info.attrName), this.parser.parse(info.attrValue), bindingMode.twoWay, resources.lookupFunctions);\r\n        return instruction;\r\n    };\r\n    SyntaxInterpreter.prototype['to-view'] = function (resources, element, info, existingInstruction) {\r\n        var instruction = existingInstruction || BehaviorInstruction.attribute(info.attrName);\r\n        instruction.attributes[info.attrName] = new BindingExpression(this.observerLocator, this.attributeMap.map(element.tagName, info.attrName), this.parser.parse(info.attrValue), bindingMode.toView, resources.lookupFunctions);\r\n        return instruction;\r\n    };\r\n    SyntaxInterpreter.prototype['from-view'] = function (resources, element, info, existingInstruction) {\r\n        var instruction = existingInstruction || BehaviorInstruction.attribute(info.attrName);\r\n        instruction.attributes[info.attrName] = new BindingExpression(this.observerLocator, this.attributeMap.map(element.tagName, info.attrName), this.parser.parse(info.attrValue), bindingMode.fromView, resources.lookupFunctions);\r\n        return instruction;\r\n    };\r\n    SyntaxInterpreter.prototype['one-time'] = function (resources, element, info, existingInstruction) {\r\n        var instruction = existingInstruction || BehaviorInstruction.attribute(info.attrName);\r\n        instruction.attributes[info.attrName] = new BindingExpression(this.observerLocator, this.attributeMap.map(element.tagName, info.attrName), this.parser.parse(info.attrValue), bindingMode.oneTime, resources.lookupFunctions);\r\n        return instruction;\r\n    };\r\n    SyntaxInterpreter.inject = [Parser, ObserverLocator, EventManager, AttributeMap];\r\n    return SyntaxInterpreter;\r\n}());\r\nObject.defineProperty(SyntaxInterpreter.prototype, 'one-way', Object.getOwnPropertyDescriptor(SyntaxInterpreter.prototype, 'to-view'));\n\nvar info = {};\r\nvar TemplatingBindingLanguage = (function (_super) {\r\n    __extends(TemplatingBindingLanguage, _super);\r\n    function TemplatingBindingLanguage(parser, observerLocator, syntaxInterpreter, attributeMap) {\r\n        var _this = _super.call(this) || this;\r\n        _this.parser = parser;\r\n        _this.observerLocator = observerLocator;\r\n        _this.syntaxInterpreter = syntaxInterpreter;\r\n        _this.emptyStringExpression = _this.parser.parse('\\'\\'');\r\n        syntaxInterpreter.language = _this;\r\n        _this.attributeMap = attributeMap;\r\n        _this.toBindingContextAttr = 'to-binding-context';\r\n        return _this;\r\n    }\r\n    TemplatingBindingLanguage.prototype.inspectAttribute = function (resources, elementName, attrName, attrValue) {\r\n        var parts = attrName.split('.');\r\n        info.defaultBindingMode = null;\r\n        if (parts.length === 2) {\r\n            info.attrName = parts[0].trim();\r\n            info.attrValue = attrValue;\r\n            info.command = parts[1].trim();\r\n            if (info.command === 'ref') {\r\n                info.expression = new NameExpression(this.parser.parse(attrValue), info.attrName, resources.lookupFunctions);\r\n                info.command = null;\r\n                info.attrName = 'ref';\r\n            }\r\n            else {\r\n                info.expression = null;\r\n            }\r\n        }\r\n        else if (attrName === 'ref') {\r\n            info.attrName = attrName;\r\n            info.attrValue = attrValue;\r\n            info.command = null;\r\n            info.expression = new NameExpression(this.parser.parse(attrValue), 'element', resources.lookupFunctions);\r\n        }\r\n        else {\r\n            info.attrName = attrName;\r\n            info.attrValue = attrValue;\r\n            info.command = null;\r\n            var interpolationParts = this.parseInterpolation(resources, attrValue);\r\n            if (interpolationParts === null) {\r\n                info.expression = null;\r\n            }\r\n            else {\r\n                info.expression = new InterpolationBindingExpression(this.observerLocator, this.attributeMap.map(elementName, attrName), interpolationParts, bindingMode.toView, resources.lookupFunctions, attrName);\r\n            }\r\n        }\r\n        return info;\r\n    };\r\n    TemplatingBindingLanguage.prototype.createAttributeInstruction = function (resources, element, theInfo, existingInstruction, context) {\r\n        var instruction;\r\n        if (theInfo.expression) {\r\n            if (theInfo.attrName === 'ref') {\r\n                return theInfo.expression;\r\n            }\r\n            instruction = existingInstruction || BehaviorInstruction.attribute(theInfo.attrName);\r\n            instruction.attributes[theInfo.attrName] = theInfo.expression;\r\n        }\r\n        else if (theInfo.command) {\r\n            instruction = this.syntaxInterpreter.interpret(resources, element, theInfo, existingInstruction, context);\r\n        }\r\n        return instruction;\r\n    };\r\n    TemplatingBindingLanguage.prototype.createLetExpressions = function (resources, letElement) {\r\n        var expressions = [];\r\n        var attributes = letElement.attributes;\r\n        var attr;\r\n        var parts;\r\n        var attrName;\r\n        var attrValue;\r\n        var command;\r\n        var toBindingContextAttr = this.toBindingContextAttr;\r\n        var toBindingContext = letElement.hasAttribute(toBindingContextAttr);\r\n        for (var i = 0, ii = attributes.length; ii > i; ++i) {\r\n            attr = attributes[i];\r\n            attrName = attr.name;\r\n            attrValue = attr.nodeValue;\r\n            parts = attrName.split('.');\r\n            if (attrName === toBindingContextAttr) {\r\n                continue;\r\n            }\r\n            if (parts.length === 2) {\r\n                command = parts[1];\r\n                if (command !== 'bind') {\r\n                    LogManager.getLogger('templating-binding-language')\r\n                        .warn(\"Detected invalid let command. Expected \\\"\".concat(parts[0], \".bind\\\", given \\\"\").concat(attrName, \"\\\"\"));\r\n                    continue;\r\n                }\r\n                expressions.push(new LetExpression(this.observerLocator, camelCase(parts[0]), this.parser.parse(attrValue), resources.lookupFunctions, toBindingContext));\r\n            }\r\n            else {\r\n                attrName = camelCase(attrName);\r\n                parts = this.parseInterpolation(resources, attrValue);\r\n                if (parts === null) {\r\n                    LogManager.getLogger('templating-binding-language')\r\n                        .warn(\"Detected string literal in let bindings. Did you mean \\\"\".concat(attrName, \".bind=\").concat(attrValue, \"\\\" or \\\"\").concat(attrName, \"=${\").concat(attrValue, \"}\\\" ?\"));\r\n                }\r\n                if (parts) {\r\n                    expressions.push(new LetInterpolationBindingExpression(this.observerLocator, attrName, parts, resources.lookupFunctions, toBindingContext));\r\n                }\r\n                else {\r\n                    expressions.push(new LetExpression(this.observerLocator, attrName, new LiteralString(attrValue), resources.lookupFunctions, toBindingContext));\r\n                }\r\n            }\r\n        }\r\n        return expressions;\r\n    };\r\n    TemplatingBindingLanguage.prototype.inspectTextContent = function (resources, value) {\r\n        var parts = this.parseInterpolation(resources, value);\r\n        if (parts === null) {\r\n            return null;\r\n        }\r\n        return new InterpolationBindingExpression(this.observerLocator, 'textContent', parts, bindingMode.toView, resources.lookupFunctions, 'textContent');\r\n    };\r\n    TemplatingBindingLanguage.prototype.parseInterpolation = function (resources, value) {\r\n        var i = value.indexOf('${', 0);\r\n        var ii = value.length;\r\n        var char;\r\n        var pos = 0;\r\n        var open = 0;\r\n        var quote = null;\r\n        var interpolationStart;\r\n        var parts;\r\n        var partIndex = 0;\r\n        while (i >= 0 && i < ii - 2) {\r\n            open = 1;\r\n            interpolationStart = i;\r\n            i += 2;\r\n            do {\r\n                char = value[i];\r\n                i++;\r\n                if (char === \"'\" || char === '\"') {\r\n                    if (quote === null) {\r\n                        quote = char;\r\n                    }\r\n                    else if (quote === char) {\r\n                        quote = null;\r\n                    }\r\n                    continue;\r\n                }\r\n                if (char === '\\\\') {\r\n                    i++;\r\n                    continue;\r\n                }\r\n                if (quote !== null) {\r\n                    continue;\r\n                }\r\n                if (char === '{') {\r\n                    open++;\r\n                }\r\n                else if (char === '}') {\r\n                    open--;\r\n                }\r\n            } while (open > 0 && i < ii);\r\n            if (open === 0) {\r\n                parts = parts || [];\r\n                if (value[interpolationStart - 1] === '\\\\' && value[interpolationStart - 2] !== '\\\\') {\r\n                    parts[partIndex] = value.substring(pos, interpolationStart - 1) + value.substring(interpolationStart, i);\r\n                    partIndex++;\r\n                    parts[partIndex] = this.emptyStringExpression;\r\n                    partIndex++;\r\n                }\r\n                else {\r\n                    parts[partIndex] = value.substring(pos, interpolationStart);\r\n                    partIndex++;\r\n                    parts[partIndex] = this.parser.parse(value.substring(interpolationStart + 2, i - 1));\r\n                    partIndex++;\r\n                }\r\n                pos = i;\r\n                i = value.indexOf('${', i);\r\n            }\r\n            else {\r\n                break;\r\n            }\r\n        }\r\n        if (partIndex === 0) {\r\n            return null;\r\n        }\r\n        parts[partIndex] = value.substr(pos);\r\n        return parts;\r\n    };\r\n    TemplatingBindingLanguage.inject = [Parser, ObserverLocator, SyntaxInterpreter, AttributeMap];\r\n    return TemplatingBindingLanguage;\r\n}(BindingLanguage));\n\nfunction configure(config) {\r\n    config.container.registerSingleton(BindingLanguage, TemplatingBindingLanguage);\r\n    config.container.registerAlias(BindingLanguage, TemplatingBindingLanguage);\r\n}\n\nexport { AttributeMap, ChildInterpolationBinding, InterpolationBinding, InterpolationBindingExpression, LetBinding, LetExpression, LetInterpolationBinding, LetInterpolationBindingExpression, SyntaxInterpreter, TemplatingBindingLanguage, configure };\n//# sourceMappingURL=aurelia-templating-binding.js.map\n","import { Container, inject, Optional } from 'aurelia-dependency-injection';\nimport { DOM, FEATURE } from 'aurelia-pal';\nimport { TaskQueue } from 'aurelia-task-queue';\nimport { bindable, noView, customElement, CompositionEngine, ViewSlot, ViewResources, customAttribute, templateController, BoundViewFactory, TargetInstruction, Animator, resource, useView, useShadowDOM, ViewEngine } from 'aurelia-templating';\nimport { createOverrideContext, bindingMode, BindingBehavior, ValueConverter, sourceContext, mergeSplice, ObserverLocator, valueConverter, DataAttributeObserver, bindingBehavior, targetContext, EventSubscriber } from 'aurelia-binding';\nimport { Loader } from 'aurelia-loader';\nimport { relativeToFile } from 'aurelia-path';\nimport { mixin } from 'aurelia-metadata';\nimport { getLogger } from 'aurelia-logging';\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n    extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n    return extendStatics(d, b);\r\n};\r\n\r\nfunction __extends(d, b) {\r\n    if (typeof b !== \"function\" && b !== null)\r\n        throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n    extendStatics(d, b);\r\n    function __() { this.constructor = d; }\r\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nfunction __decorate(decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\n\nvar ActivationStrategy;\r\n(function (ActivationStrategy) {\r\n    ActivationStrategy[\"InvokeLifecycle\"] = \"invoke-lifecycle\";\r\n    ActivationStrategy[\"Replace\"] = \"replace\";\r\n})(ActivationStrategy || (ActivationStrategy = {}));\r\nvar Compose = (function () {\r\n    function Compose(element, container, compositionEngine, viewSlot, viewResources, taskQueue) {\r\n        this.activationStrategy = ActivationStrategy.InvokeLifecycle;\r\n        this.element = element;\r\n        this.container = container;\r\n        this.compositionEngine = compositionEngine;\r\n        this.viewSlot = viewSlot;\r\n        this.viewResources = viewResources;\r\n        this.taskQueue = taskQueue;\r\n        this.currentController = null;\r\n        this.currentViewModel = null;\r\n        this.changes = Object.create(null);\r\n    }\r\n    Compose.inject = function () {\r\n        return [DOM.Element, Container, CompositionEngine, ViewSlot, ViewResources, TaskQueue];\r\n    };\r\n    Compose.prototype.created = function (owningView) {\r\n        this.owningView = owningView;\r\n    };\r\n    Compose.prototype.bind = function (bindingContext, overrideContext) {\r\n        this.bindingContext = bindingContext;\r\n        this.overrideContext = overrideContext;\r\n        var changes = this.changes;\r\n        changes.view = this.view;\r\n        changes.viewModel = this.viewModel;\r\n        changes.model = this.model;\r\n        if (!this.pendingTask) {\r\n            processChanges(this);\r\n        }\r\n    };\r\n    Compose.prototype.unbind = function () {\r\n        this.changes = Object.create(null);\r\n        this.bindingContext = null;\r\n        this.overrideContext = null;\r\n        var returnToCache = true;\r\n        var skipAnimation = true;\r\n        this.viewSlot.removeAll(returnToCache, skipAnimation);\r\n    };\r\n    Compose.prototype.modelChanged = function (newValue, oldValue) {\r\n        this.changes.model = newValue;\r\n        requestUpdate(this);\r\n    };\r\n    Compose.prototype.viewChanged = function (newValue, oldValue) {\r\n        this.changes.view = newValue;\r\n        requestUpdate(this);\r\n    };\r\n    Compose.prototype.viewModelChanged = function (newValue, oldValue) {\r\n        this.changes.viewModel = newValue;\r\n        requestUpdate(this);\r\n    };\r\n    __decorate([\r\n        bindable\r\n    ], Compose.prototype, \"model\", void 0);\r\n    __decorate([\r\n        bindable\r\n    ], Compose.prototype, \"view\", void 0);\r\n    __decorate([\r\n        bindable\r\n    ], Compose.prototype, \"viewModel\", void 0);\r\n    __decorate([\r\n        bindable\r\n    ], Compose.prototype, \"activationStrategy\", void 0);\r\n    __decorate([\r\n        bindable\r\n    ], Compose.prototype, \"swapOrder\", void 0);\r\n    Compose = __decorate([\r\n        noView,\r\n        customElement('compose')\r\n    ], Compose);\r\n    return Compose;\r\n}());\r\nfunction isEmpty(obj) {\r\n    for (var _ in obj) {\r\n        return false;\r\n    }\r\n    return true;\r\n}\r\nfunction tryActivateViewModel(vm, model) {\r\n    if (vm && typeof vm.activate === 'function') {\r\n        return Promise.resolve(vm.activate(model));\r\n    }\r\n}\r\nfunction createInstruction(composer, instruction) {\r\n    return Object.assign(instruction, {\r\n        bindingContext: composer.bindingContext,\r\n        overrideContext: composer.overrideContext,\r\n        owningView: composer.owningView,\r\n        container: composer.container,\r\n        viewSlot: composer.viewSlot,\r\n        viewResources: composer.viewResources,\r\n        currentController: composer.currentController,\r\n        host: composer.element,\r\n        swapOrder: composer.swapOrder\r\n    });\r\n}\r\nfunction processChanges(composer) {\r\n    var changes = composer.changes;\r\n    composer.changes = Object.create(null);\r\n    if (needsReInitialization(composer, changes)) {\r\n        var instruction = {\r\n            view: composer.view,\r\n            viewModel: composer.currentViewModel || composer.viewModel,\r\n            model: composer.model\r\n        };\r\n        instruction = Object.assign(instruction, changes);\r\n        instruction = createInstruction(composer, instruction);\r\n        composer.pendingTask = composer.compositionEngine.compose(instruction).then(function (controller) {\r\n            composer.currentController = controller;\r\n            composer.currentViewModel = controller ? controller.viewModel : null;\r\n        });\r\n    }\r\n    else {\r\n        composer.pendingTask = tryActivateViewModel(composer.currentViewModel, changes.model);\r\n        if (!composer.pendingTask) {\r\n            return;\r\n        }\r\n    }\r\n    composer.pendingTask = composer.pendingTask\r\n        .then(function () {\r\n        completeCompositionTask(composer);\r\n    }, function (reason) {\r\n        completeCompositionTask(composer);\r\n        throw reason;\r\n    });\r\n}\r\nfunction completeCompositionTask(composer) {\r\n    composer.pendingTask = null;\r\n    if (!isEmpty(composer.changes)) {\r\n        processChanges(composer);\r\n    }\r\n}\r\nfunction requestUpdate(composer) {\r\n    if (composer.pendingTask || composer.updateRequested) {\r\n        return;\r\n    }\r\n    composer.updateRequested = true;\r\n    composer.taskQueue.queueMicroTask(function () {\r\n        composer.updateRequested = false;\r\n        processChanges(composer);\r\n    });\r\n}\r\nfunction needsReInitialization(composer, changes) {\r\n    var activationStrategy = composer.activationStrategy;\r\n    var vm = composer.currentViewModel;\r\n    if (vm && typeof vm.determineActivationStrategy === 'function') {\r\n        activationStrategy = vm.determineActivationStrategy();\r\n    }\r\n    return 'view' in changes\r\n        || 'viewModel' in changes\r\n        || activationStrategy === ActivationStrategy.Replace;\r\n}\n\nvar IfCore = (function () {\r\n    function IfCore(viewFactory, viewSlot) {\r\n        this.viewFactory = viewFactory;\r\n        this.viewSlot = viewSlot;\r\n        this.view = null;\r\n        this.bindingContext = null;\r\n        this.overrideContext = null;\r\n        this.showing = false;\r\n        this.cache = true;\r\n    }\r\n    IfCore.prototype.bind = function (bindingContext, overrideContext) {\r\n        this.bindingContext = bindingContext;\r\n        this.overrideContext = overrideContext;\r\n    };\r\n    IfCore.prototype.unbind = function () {\r\n        if (this.view === null) {\r\n            return;\r\n        }\r\n        this.view.unbind();\r\n        if (!this.viewFactory.isCaching) {\r\n            return;\r\n        }\r\n        if (this.showing) {\r\n            this.showing = false;\r\n            this.viewSlot.remove(this.view, true, true);\r\n        }\r\n        else {\r\n            this.view.returnToCache();\r\n        }\r\n        this.view = null;\r\n    };\r\n    IfCore.prototype._show = function () {\r\n        if (this.showing) {\r\n            if (!this.view.isBound) {\r\n                this.view.bind(this.bindingContext, this.overrideContext);\r\n            }\r\n            return;\r\n        }\r\n        if (this.view === null) {\r\n            this.view = this.viewFactory.create();\r\n        }\r\n        if (!this.view.isBound) {\r\n            this.view.bind(this.bindingContext, this.overrideContext);\r\n        }\r\n        this.showing = true;\r\n        return this.viewSlot.add(this.view);\r\n    };\r\n    IfCore.prototype._hide = function () {\r\n        var _this = this;\r\n        if (!this.showing) {\r\n            return;\r\n        }\r\n        this.showing = false;\r\n        var removed = this.viewSlot.remove(this.view);\r\n        if (removed instanceof Promise) {\r\n            return removed.then(function () {\r\n                _this._unbindView();\r\n            });\r\n        }\r\n        this._unbindView();\r\n    };\r\n    IfCore.prototype._unbindView = function () {\r\n        var cache = this.cache === 'false' ? false : !!this.cache;\r\n        this.view.unbind();\r\n        if (!cache) {\r\n            this.view = null;\r\n        }\r\n    };\r\n    return IfCore;\r\n}());\n\nvar If = (function (_super) {\r\n    __extends(If, _super);\r\n    function If() {\r\n        var _this = _super !== null && _super.apply(this, arguments) || this;\r\n        _this.cache = true;\r\n        return _this;\r\n    }\r\n    If.prototype.bind = function (bindingContext, overrideContext) {\r\n        _super.prototype.bind.call(this, bindingContext, overrideContext);\r\n        if (this.condition) {\r\n            this._show();\r\n        }\r\n        else {\r\n            this._hide();\r\n        }\r\n    };\r\n    If.prototype.conditionChanged = function (newValue) {\r\n        this._update(newValue);\r\n    };\r\n    If.prototype._update = function (show) {\r\n        var _this = this;\r\n        if (this.animating) {\r\n            return;\r\n        }\r\n        var promise;\r\n        if (this.elseVm) {\r\n            promise = show ? this._swap(this.elseVm, this) : this._swap(this, this.elseVm);\r\n        }\r\n        else {\r\n            promise = show ? this._show() : this._hide();\r\n        }\r\n        if (promise) {\r\n            this.animating = true;\r\n            promise.then(function () {\r\n                _this.animating = false;\r\n                if (_this.condition !== _this.showing) {\r\n                    _this._update(_this.condition);\r\n                }\r\n            });\r\n        }\r\n    };\r\n    If.prototype._swap = function (remove, add) {\r\n        switch (this.swapOrder) {\r\n            case 'before':\r\n                return Promise.resolve(add._show()).then(function () { return remove._hide(); });\r\n            case 'with':\r\n                return Promise.all([remove._hide(), add._show()]);\r\n            default:\r\n                var promise = remove._hide();\r\n                return promise ? promise.then(function () { return add._show(); }) : add._show();\r\n        }\r\n    };\r\n    __decorate([\r\n        bindable({ primaryProperty: true })\r\n    ], If.prototype, \"condition\", void 0);\r\n    __decorate([\r\n        bindable\r\n    ], If.prototype, \"swapOrder\", void 0);\r\n    __decorate([\r\n        bindable\r\n    ], If.prototype, \"cache\", void 0);\r\n    If = __decorate([\r\n        customAttribute('if'),\r\n        templateController,\r\n        inject(BoundViewFactory, ViewSlot)\r\n    ], If);\r\n    return If;\r\n}(IfCore));\n\nvar Else = (function (_super) {\r\n    __extends(Else, _super);\r\n    function Else(viewFactory, viewSlot) {\r\n        var _this = _super.call(this, viewFactory, viewSlot) || this;\r\n        _this._registerInIf();\r\n        return _this;\r\n    }\r\n    Else.prototype.bind = function (bindingContext, overrideContext) {\r\n        _super.prototype.bind.call(this, bindingContext, overrideContext);\r\n        if (this.ifVm.condition) {\r\n            this._hide();\r\n        }\r\n        else {\r\n            this._show();\r\n        }\r\n    };\r\n    Else.prototype._registerInIf = function () {\r\n        var previous = this.viewSlot.anchor.previousSibling;\r\n        while (previous && !previous.au) {\r\n            previous = previous.previousSibling;\r\n        }\r\n        if (!previous || !previous.au.if) {\r\n            throw new Error(\"Can't find matching If for Else custom attribute.\");\r\n        }\r\n        this.ifVm = previous.au.if.viewModel;\r\n        this.ifVm.elseVm = this;\r\n    };\r\n    Else = __decorate([\r\n        customAttribute('else'),\r\n        templateController,\r\n        inject(BoundViewFactory, ViewSlot)\r\n    ], Else);\r\n    return Else;\r\n}(IfCore));\n\nvar With = (function () {\r\n    function With(viewFactory, viewSlot) {\r\n        this.viewFactory = viewFactory;\r\n        this.viewSlot = viewSlot;\r\n        this.parentOverrideContext = null;\r\n        this.view = null;\r\n    }\r\n    With.prototype.bind = function (bindingContext, overrideContext) {\r\n        this.parentOverrideContext = overrideContext;\r\n        this.valueChanged(this.value);\r\n    };\r\n    With.prototype.valueChanged = function (newValue) {\r\n        var overrideContext = createOverrideContext(newValue, this.parentOverrideContext);\r\n        var view = this.view;\r\n        if (!view) {\r\n            view = this.view = this.viewFactory.create();\r\n            view.bind(newValue, overrideContext);\r\n            this.viewSlot.add(view);\r\n        }\r\n        else {\r\n            view.bind(newValue, overrideContext);\r\n        }\r\n    };\r\n    With.prototype.unbind = function () {\r\n        var view = this.view;\r\n        this.parentOverrideContext = null;\r\n        if (view) {\r\n            view.unbind();\r\n        }\r\n    };\r\n    With = __decorate([\r\n        customAttribute('with'),\r\n        templateController,\r\n        inject(BoundViewFactory, ViewSlot)\r\n    ], With);\r\n    return With;\r\n}());\n\nvar oneTime = bindingMode.oneTime;\r\nfunction updateOverrideContexts(views, startIndex) {\r\n    var length = views.length;\r\n    if (startIndex > 0) {\r\n        startIndex = startIndex - 1;\r\n    }\r\n    for (; startIndex < length; ++startIndex) {\r\n        updateOverrideContext(views[startIndex].overrideContext, startIndex, length);\r\n    }\r\n}\r\nfunction createFullOverrideContext(repeat, data, index, length, key) {\r\n    var bindingContext = {};\r\n    var overrideContext = createOverrideContext(bindingContext, repeat.scope.overrideContext);\r\n    if (typeof key !== 'undefined') {\r\n        bindingContext[repeat.key] = key;\r\n        bindingContext[repeat.value] = data;\r\n    }\r\n    else {\r\n        bindingContext[repeat.local] = data;\r\n    }\r\n    updateOverrideContext(overrideContext, index, length);\r\n    return overrideContext;\r\n}\r\nfunction updateOverrideContext(overrideContext, index, length) {\r\n    var first = (index === 0);\r\n    var last = (index === length - 1);\r\n    var even = index % 2 === 0;\r\n    overrideContext.$index = index;\r\n    overrideContext.$first = first;\r\n    overrideContext.$last = last;\r\n    overrideContext.$middle = !(first || last);\r\n    overrideContext.$odd = !even;\r\n    overrideContext.$even = even;\r\n}\r\nfunction getItemsSourceExpression(instruction, attrName) {\r\n    return instruction.behaviorInstructions\r\n        .filter(function (bi) { return bi.originalAttrName === attrName; })[0]\r\n        .attributes\r\n        .items\r\n        .sourceExpression;\r\n}\r\nfunction unwrapExpression(expression) {\r\n    var unwrapped = false;\r\n    while (expression instanceof BindingBehavior) {\r\n        expression = expression.expression;\r\n    }\r\n    while (expression instanceof ValueConverter) {\r\n        expression = expression.expression;\r\n        unwrapped = true;\r\n    }\r\n    return unwrapped ? expression : null;\r\n}\r\nfunction isOneTime(expression) {\r\n    while (expression instanceof BindingBehavior) {\r\n        if (expression.name === 'oneTime') {\r\n            return true;\r\n        }\r\n        expression = expression.expression;\r\n    }\r\n    return false;\r\n}\r\nfunction updateOneTimeBinding(binding) {\r\n    if (binding.call && binding.mode === oneTime) {\r\n        binding.call(sourceContext);\r\n    }\r\n    else if (binding.updateOneTimeBindings) {\r\n        binding.updateOneTimeBindings();\r\n    }\r\n}\r\nfunction indexOf(array, item, matcher, startIndex) {\r\n    if (!matcher) {\r\n        return array.indexOf(item);\r\n    }\r\n    var length = array.length;\r\n    for (var index = startIndex || 0; index < length; index++) {\r\n        if (matcher(array[index], item)) {\r\n            return index;\r\n        }\r\n    }\r\n    return -1;\r\n}\n\nvar ArrayRepeatStrategy = (function () {\r\n    function ArrayRepeatStrategy() {\r\n    }\r\n    ArrayRepeatStrategy.prototype.getCollectionObserver = function (observerLocator, items) {\r\n        return observerLocator.getArrayObserver(items);\r\n    };\r\n    ArrayRepeatStrategy.prototype.instanceChanged = function (repeat, items) {\r\n        var _this = this;\r\n        var $repeat = repeat;\r\n        var itemsLength = items.length;\r\n        if (!items || itemsLength === 0) {\r\n            $repeat.removeAllViews(true, !$repeat.viewsRequireLifecycle);\r\n            return;\r\n        }\r\n        var children = $repeat.views();\r\n        var viewsLength = children.length;\r\n        if (viewsLength === 0) {\r\n            this._standardProcessInstanceChanged($repeat, items);\r\n            return;\r\n        }\r\n        if ($repeat.viewsRequireLifecycle) {\r\n            var childrenSnapshot = children.slice(0);\r\n            var itemNameInBindingContext = $repeat.local;\r\n            var matcher_1 = $repeat.matcher();\r\n            var itemsPreviouslyInViews_1 = [];\r\n            var viewsToRemove = [];\r\n            for (var index = 0; index < viewsLength; index++) {\r\n                var view = childrenSnapshot[index];\r\n                var oldItem = view.bindingContext[itemNameInBindingContext];\r\n                if (indexOf(items, oldItem, matcher_1) === -1) {\r\n                    viewsToRemove.push(view);\r\n                }\r\n                else {\r\n                    itemsPreviouslyInViews_1.push(oldItem);\r\n                }\r\n            }\r\n            var updateViews = void 0;\r\n            var removePromise = void 0;\r\n            if (itemsPreviouslyInViews_1.length > 0) {\r\n                removePromise = $repeat.removeViews(viewsToRemove, true, !$repeat.viewsRequireLifecycle);\r\n                updateViews = function () {\r\n                    for (var index = 0; index < itemsLength; index++) {\r\n                        var item = items[index];\r\n                        var indexOfView = indexOf(itemsPreviouslyInViews_1, item, matcher_1, index);\r\n                        var view = void 0;\r\n                        if (indexOfView === -1) {\r\n                            var overrideContext = createFullOverrideContext($repeat, items[index], index, itemsLength);\r\n                            $repeat.insertView(index, overrideContext.bindingContext, overrideContext);\r\n                            itemsPreviouslyInViews_1.splice(index, 0, undefined);\r\n                        }\r\n                        else if (indexOfView === index) {\r\n                            view = children[indexOfView];\r\n                            itemsPreviouslyInViews_1[indexOfView] = undefined;\r\n                        }\r\n                        else {\r\n                            view = children[indexOfView];\r\n                            $repeat.moveView(indexOfView, index);\r\n                            itemsPreviouslyInViews_1.splice(indexOfView, 1);\r\n                            itemsPreviouslyInViews_1.splice(index, 0, undefined);\r\n                        }\r\n                        if (view) {\r\n                            updateOverrideContext(view.overrideContext, index, itemsLength);\r\n                        }\r\n                    }\r\n                    _this._inPlaceProcessItems($repeat, items);\r\n                };\r\n            }\r\n            else {\r\n                removePromise = $repeat.removeAllViews(true, !$repeat.viewsRequireLifecycle);\r\n                updateViews = function () { return _this._standardProcessInstanceChanged($repeat, items); };\r\n            }\r\n            if (removePromise instanceof Promise) {\r\n                removePromise.then(updateViews);\r\n            }\r\n            else {\r\n                updateViews();\r\n            }\r\n        }\r\n        else {\r\n            this._inPlaceProcessItems($repeat, items);\r\n        }\r\n    };\r\n    ArrayRepeatStrategy.prototype._standardProcessInstanceChanged = function (repeat, items) {\r\n        for (var i = 0, ii = items.length; i < ii; i++) {\r\n            var overrideContext = createFullOverrideContext(repeat, items[i], i, ii);\r\n            repeat.addView(overrideContext.bindingContext, overrideContext);\r\n        }\r\n    };\r\n    ArrayRepeatStrategy.prototype._inPlaceProcessItems = function (repeat, items) {\r\n        var itemsLength = items.length;\r\n        var viewsLength = repeat.viewCount();\r\n        while (viewsLength > itemsLength) {\r\n            viewsLength--;\r\n            repeat.removeView(viewsLength, true, !repeat.viewsRequireLifecycle);\r\n        }\r\n        var local = repeat.local;\r\n        for (var i = 0; i < viewsLength; i++) {\r\n            var view = repeat.view(i);\r\n            var last = i === itemsLength - 1;\r\n            var middle = i !== 0 && !last;\r\n            var bindingContext = view.bindingContext;\r\n            var overrideContext = view.overrideContext;\r\n            if (bindingContext[local] === items[i]\r\n                && overrideContext.$middle === middle\r\n                && overrideContext.$last === last) {\r\n                continue;\r\n            }\r\n            bindingContext[local] = items[i];\r\n            overrideContext.$middle = middle;\r\n            overrideContext.$last = last;\r\n            repeat.updateBindings(view);\r\n        }\r\n        for (var i = viewsLength; i < itemsLength; i++) {\r\n            var overrideContext = createFullOverrideContext(repeat, items[i], i, itemsLength);\r\n            repeat.addView(overrideContext.bindingContext, overrideContext);\r\n        }\r\n    };\r\n    ArrayRepeatStrategy.prototype.instanceMutated = function (repeat, array, splices) {\r\n        var _this = this;\r\n        if (repeat.__queuedSplices) {\r\n            for (var i = 0, ii = splices.length; i < ii; ++i) {\r\n                var _a = splices[i], index = _a.index, removed = _a.removed, addedCount = _a.addedCount;\r\n                mergeSplice(repeat.__queuedSplices, index, removed, addedCount);\r\n            }\r\n            repeat.__array = array.slice(0);\r\n            return;\r\n        }\r\n        var maybePromise = this._runSplices(repeat, array.slice(0), splices);\r\n        if (maybePromise instanceof Promise) {\r\n            var queuedSplices_1 = repeat.__queuedSplices = [];\r\n            var runQueuedSplices_1 = function () {\r\n                if (!queuedSplices_1.length) {\r\n                    repeat.__queuedSplices = undefined;\r\n                    repeat.__array = undefined;\r\n                    return;\r\n                }\r\n                var nextPromise = _this._runSplices(repeat, repeat.__array, queuedSplices_1) || Promise.resolve();\r\n                queuedSplices_1 = repeat.__queuedSplices = [];\r\n                nextPromise.then(runQueuedSplices_1);\r\n            };\r\n            maybePromise.then(runQueuedSplices_1);\r\n        }\r\n    };\r\n    ArrayRepeatStrategy.prototype._runSplices = function (repeat, array, splices) {\r\n        var _this = this;\r\n        var removeDelta = 0;\r\n        var rmPromises = [];\r\n        for (var i = 0, ii = splices.length; i < ii; ++i) {\r\n            var splice = splices[i];\r\n            var removed = splice.removed;\r\n            for (var j = 0, jj = removed.length; j < jj; ++j) {\r\n                var viewOrPromise = repeat.removeView(splice.index + removeDelta + rmPromises.length, true);\r\n                if (viewOrPromise instanceof Promise) {\r\n                    rmPromises.push(viewOrPromise);\r\n                }\r\n            }\r\n            removeDelta -= splice.addedCount;\r\n        }\r\n        if (rmPromises.length > 0) {\r\n            return Promise.all(rmPromises).then(function () {\r\n                var spliceIndexLow = _this._handleAddedSplices(repeat, array, splices);\r\n                updateOverrideContexts(repeat.views(), spliceIndexLow);\r\n            });\r\n        }\r\n        var spliceIndexLow = this._handleAddedSplices(repeat, array, splices);\r\n        updateOverrideContexts(repeat.views(), spliceIndexLow);\r\n        return undefined;\r\n    };\r\n    ArrayRepeatStrategy.prototype._handleAddedSplices = function (repeat, array, splices) {\r\n        var spliceIndex;\r\n        var spliceIndexLow;\r\n        var arrayLength = array.length;\r\n        for (var i = 0, ii = splices.length; i < ii; ++i) {\r\n            var splice = splices[i];\r\n            var addIndex = spliceIndex = splice.index;\r\n            var end = splice.index + splice.addedCount;\r\n            if (typeof spliceIndexLow === 'undefined' || spliceIndexLow === null || spliceIndexLow > splice.index) {\r\n                spliceIndexLow = spliceIndex;\r\n            }\r\n            for (; addIndex < end; ++addIndex) {\r\n                var overrideContext = createFullOverrideContext(repeat, array[addIndex], addIndex, arrayLength);\r\n                repeat.insertView(addIndex, overrideContext.bindingContext, overrideContext);\r\n            }\r\n        }\r\n        return spliceIndexLow;\r\n    };\r\n    return ArrayRepeatStrategy;\r\n}());\n\nvar MapRepeatStrategy = (function () {\r\n    function MapRepeatStrategy() {\r\n    }\r\n    MapRepeatStrategy.prototype.getCollectionObserver = function (observerLocator, items) {\r\n        return observerLocator.getMapObserver(items);\r\n    };\r\n    MapRepeatStrategy.prototype.instanceChanged = function (repeat, items) {\r\n        var _this = this;\r\n        var removePromise = repeat.removeAllViews(true, !repeat.viewsRequireLifecycle);\r\n        if (removePromise instanceof Promise) {\r\n            removePromise.then(function () { return _this._standardProcessItems(repeat, items); });\r\n            return;\r\n        }\r\n        this._standardProcessItems(repeat, items);\r\n    };\r\n    MapRepeatStrategy.prototype._standardProcessItems = function (repeat, items) {\r\n        var index = 0;\r\n        var overrideContext;\r\n        items.forEach(function (value, key) {\r\n            overrideContext = createFullOverrideContext(repeat, value, index, items.size, key);\r\n            repeat.addView(overrideContext.bindingContext, overrideContext);\r\n            ++index;\r\n        });\r\n    };\r\n    MapRepeatStrategy.prototype.instanceMutated = function (repeat, map, records) {\r\n        var key;\r\n        var i;\r\n        var ii;\r\n        var overrideContext;\r\n        var removeIndex;\r\n        var addIndex;\r\n        var record;\r\n        var rmPromises = [];\r\n        var viewOrPromise;\r\n        for (i = 0, ii = records.length; i < ii; ++i) {\r\n            record = records[i];\r\n            key = record.key;\r\n            switch (record.type) {\r\n                case 'update':\r\n                    removeIndex = this._getViewIndexByKey(repeat, key);\r\n                    viewOrPromise = repeat.removeView(removeIndex, true, !repeat.viewsRequireLifecycle);\r\n                    if (viewOrPromise instanceof Promise) {\r\n                        rmPromises.push(viewOrPromise);\r\n                    }\r\n                    overrideContext = createFullOverrideContext(repeat, map.get(key), removeIndex, map.size, key);\r\n                    repeat.insertView(removeIndex, overrideContext.bindingContext, overrideContext);\r\n                    break;\r\n                case 'add':\r\n                    addIndex = repeat.viewCount() <= map.size - 1 ? repeat.viewCount() : map.size - 1;\r\n                    overrideContext = createFullOverrideContext(repeat, map.get(key), addIndex, map.size, key);\r\n                    repeat.insertView(map.size - 1, overrideContext.bindingContext, overrideContext);\r\n                    break;\r\n                case 'delete':\r\n                    if (record.oldValue === undefined) {\r\n                        return;\r\n                    }\r\n                    removeIndex = this._getViewIndexByKey(repeat, key);\r\n                    viewOrPromise = repeat.removeView(removeIndex, true, !repeat.viewsRequireLifecycle);\r\n                    if (viewOrPromise instanceof Promise) {\r\n                        rmPromises.push(viewOrPromise);\r\n                    }\r\n                    break;\r\n                case 'clear':\r\n                    repeat.removeAllViews(true, !repeat.viewsRequireLifecycle);\r\n                    break;\r\n                default:\r\n                    continue;\r\n            }\r\n        }\r\n        if (rmPromises.length > 0) {\r\n            Promise.all(rmPromises).then(function () {\r\n                updateOverrideContexts(repeat.views(), 0);\r\n            });\r\n        }\r\n        else {\r\n            updateOverrideContexts(repeat.views(), 0);\r\n        }\r\n    };\r\n    MapRepeatStrategy.prototype._getViewIndexByKey = function (repeat, key) {\r\n        var i;\r\n        var ii;\r\n        var child;\r\n        for (i = 0, ii = repeat.viewCount(); i < ii; ++i) {\r\n            child = repeat.view(i);\r\n            if (child.bindingContext[repeat.key] === key) {\r\n                return i;\r\n            }\r\n        }\r\n        return undefined;\r\n    };\r\n    return MapRepeatStrategy;\r\n}());\n\nvar NullRepeatStrategy = (function () {\r\n    function NullRepeatStrategy() {\r\n    }\r\n    NullRepeatStrategy.prototype.instanceChanged = function (repeat, items) {\r\n        repeat.removeAllViews(true);\r\n    };\r\n    NullRepeatStrategy.prototype.getCollectionObserver = function (observerLocator, items) {\r\n    };\r\n    return NullRepeatStrategy;\r\n}());\n\nvar NumberRepeatStrategy = (function () {\r\n    function NumberRepeatStrategy() {\r\n    }\r\n    NumberRepeatStrategy.prototype.getCollectionObserver = function () {\r\n        return null;\r\n    };\r\n    NumberRepeatStrategy.prototype.instanceChanged = function (repeat, value) {\r\n        var _this = this;\r\n        var removePromise = repeat.removeAllViews(true, !repeat.viewsRequireLifecycle);\r\n        if (removePromise instanceof Promise) {\r\n            removePromise.then(function () { return _this._standardProcessItems(repeat, value); });\r\n            return;\r\n        }\r\n        this._standardProcessItems(repeat, value);\r\n    };\r\n    NumberRepeatStrategy.prototype._standardProcessItems = function (repeat, value) {\r\n        var childrenLength = repeat.viewCount();\r\n        var i;\r\n        var ii;\r\n        var overrideContext;\r\n        var viewsToRemove;\r\n        value = Math.floor(value);\r\n        viewsToRemove = childrenLength - value;\r\n        if (viewsToRemove > 0) {\r\n            if (viewsToRemove > childrenLength) {\r\n                viewsToRemove = childrenLength;\r\n            }\r\n            for (i = 0, ii = viewsToRemove; i < ii; ++i) {\r\n                repeat.removeView(childrenLength - (i + 1), true, !repeat.viewsRequireLifecycle);\r\n            }\r\n            return;\r\n        }\r\n        for (i = childrenLength, ii = value; i < ii; ++i) {\r\n            overrideContext = createFullOverrideContext(repeat, i, i, ii);\r\n            repeat.addView(overrideContext.bindingContext, overrideContext);\r\n        }\r\n        updateOverrideContexts(repeat.views(), 0);\r\n    };\r\n    return NumberRepeatStrategy;\r\n}());\n\nvar SetRepeatStrategy = (function () {\r\n    function SetRepeatStrategy() {\r\n    }\r\n    SetRepeatStrategy.prototype.getCollectionObserver = function (observerLocator, items) {\r\n        return observerLocator.getSetObserver(items);\r\n    };\r\n    SetRepeatStrategy.prototype.instanceChanged = function (repeat, items) {\r\n        var _this = this;\r\n        var removePromise = repeat.removeAllViews(true, !repeat.viewsRequireLifecycle);\r\n        if (removePromise instanceof Promise) {\r\n            removePromise.then(function () { return _this._standardProcessItems(repeat, items); });\r\n            return;\r\n        }\r\n        this._standardProcessItems(repeat, items);\r\n    };\r\n    SetRepeatStrategy.prototype._standardProcessItems = function (repeat, items) {\r\n        var index = 0;\r\n        var overrideContext;\r\n        items.forEach(function (value) {\r\n            overrideContext = createFullOverrideContext(repeat, value, index, items.size);\r\n            repeat.addView(overrideContext.bindingContext, overrideContext);\r\n            ++index;\r\n        });\r\n    };\r\n    SetRepeatStrategy.prototype.instanceMutated = function (repeat, set, records) {\r\n        var value;\r\n        var i;\r\n        var ii;\r\n        var overrideContext;\r\n        var removeIndex;\r\n        var record;\r\n        var rmPromises = [];\r\n        var viewOrPromise;\r\n        for (i = 0, ii = records.length; i < ii; ++i) {\r\n            record = records[i];\r\n            value = record.value;\r\n            switch (record.type) {\r\n                case 'add':\r\n                    var size = Math.max(set.size - 1, 0);\r\n                    overrideContext = createFullOverrideContext(repeat, value, size, set.size);\r\n                    repeat.insertView(size, overrideContext.bindingContext, overrideContext);\r\n                    break;\r\n                case 'delete':\r\n                    removeIndex = this._getViewIndexByValue(repeat, value);\r\n                    viewOrPromise = repeat.removeView(removeIndex, true, !repeat.viewsRequireLifecycle);\r\n                    if (viewOrPromise instanceof Promise) {\r\n                        rmPromises.push(viewOrPromise);\r\n                    }\r\n                    break;\r\n                case 'clear':\r\n                    repeat.removeAllViews(true, !repeat.viewsRequireLifecycle);\r\n                    break;\r\n                default:\r\n                    continue;\r\n            }\r\n        }\r\n        if (rmPromises.length > 0) {\r\n            Promise.all(rmPromises).then(function () {\r\n                updateOverrideContexts(repeat.views(), 0);\r\n            });\r\n        }\r\n        else {\r\n            updateOverrideContexts(repeat.views(), 0);\r\n        }\r\n    };\r\n    SetRepeatStrategy.prototype._getViewIndexByValue = function (repeat, value) {\r\n        var i;\r\n        var ii;\r\n        var child;\r\n        for (i = 0, ii = repeat.viewCount(); i < ii; ++i) {\r\n            child = repeat.view(i);\r\n            if (child.bindingContext[repeat.local] === value) {\r\n                return i;\r\n            }\r\n        }\r\n        return undefined;\r\n    };\r\n    return SetRepeatStrategy;\r\n}());\n\nvar RepeatStrategyLocator = (function () {\r\n    function RepeatStrategyLocator() {\r\n        this.matchers = [];\r\n        this.strategies = [];\r\n        this.addStrategy(function (items) { return items === null || items === undefined; }, new NullRepeatStrategy());\r\n        this.addStrategy(function (items) { return items instanceof Array; }, new ArrayRepeatStrategy());\r\n        this.addStrategy(function (items) { return items instanceof Map; }, new MapRepeatStrategy());\r\n        this.addStrategy(function (items) { return items instanceof Set; }, new SetRepeatStrategy());\r\n        this.addStrategy(function (items) { return typeof items === 'number'; }, new NumberRepeatStrategy());\r\n    }\r\n    RepeatStrategyLocator.prototype.addStrategy = function (matcher, strategy) {\r\n        this.matchers.push(matcher);\r\n        this.strategies.push(strategy);\r\n    };\r\n    RepeatStrategyLocator.prototype.getStrategy = function (items) {\r\n        var matchers = this.matchers;\r\n        for (var i = 0, ii = matchers.length; i < ii; ++i) {\r\n            if (matchers[i](items)) {\r\n                return this.strategies[i];\r\n            }\r\n        }\r\n        return null;\r\n    };\r\n    return RepeatStrategyLocator;\r\n}());\n\nvar lifecycleOptionalBehaviors = ['focus', 'if', 'else', 'repeat', 'show', 'hide', 'with'];\r\nfunction behaviorRequiresLifecycle(instruction) {\r\n    var t = instruction.type;\r\n    var name = t.elementName !== null ? t.elementName : t.attributeName;\r\n    return lifecycleOptionalBehaviors.indexOf(name) === -1 && (t.handlesAttached || t.handlesBind || t.handlesCreated || t.handlesDetached || t.handlesUnbind)\r\n        || t.viewFactory && viewsRequireLifecycle(t.viewFactory)\r\n        || instruction.viewFactory && viewsRequireLifecycle(instruction.viewFactory);\r\n}\r\nfunction targetRequiresLifecycle(instruction) {\r\n    var behaviors = instruction.behaviorInstructions;\r\n    if (behaviors) {\r\n        var i = behaviors.length;\r\n        while (i--) {\r\n            if (behaviorRequiresLifecycle(behaviors[i])) {\r\n                return true;\r\n            }\r\n        }\r\n    }\r\n    return instruction.viewFactory && viewsRequireLifecycle(instruction.viewFactory);\r\n}\r\nfunction viewsRequireLifecycle(viewFactory) {\r\n    if ('_viewsRequireLifecycle' in viewFactory) {\r\n        return viewFactory._viewsRequireLifecycle;\r\n    }\r\n    viewFactory._viewsRequireLifecycle = false;\r\n    if (viewFactory.viewFactory) {\r\n        viewFactory._viewsRequireLifecycle = viewsRequireLifecycle(viewFactory.viewFactory);\r\n        return viewFactory._viewsRequireLifecycle;\r\n    }\r\n    if (viewFactory.template.querySelector('.au-animate')) {\r\n        viewFactory._viewsRequireLifecycle = true;\r\n        return true;\r\n    }\r\n    for (var id in viewFactory.instructions) {\r\n        if (targetRequiresLifecycle(viewFactory.instructions[id])) {\r\n            viewFactory._viewsRequireLifecycle = true;\r\n            return true;\r\n        }\r\n    }\r\n    viewFactory._viewsRequireLifecycle = false;\r\n    return false;\r\n}\n\nvar AbstractRepeater = (function () {\r\n    function AbstractRepeater(options) {\r\n        Object.assign(this, {\r\n            local: 'items',\r\n            viewsRequireLifecycle: true\r\n        }, options);\r\n    }\r\n    AbstractRepeater.prototype.viewCount = function () {\r\n        throw new Error('subclass must implement `viewCount`');\r\n    };\r\n    AbstractRepeater.prototype.views = function () {\r\n        throw new Error('subclass must implement `views`');\r\n    };\r\n    AbstractRepeater.prototype.view = function (index) {\r\n        throw new Error('subclass must implement `view`');\r\n    };\r\n    AbstractRepeater.prototype.matcher = function () {\r\n        throw new Error('subclass must implement `matcher`');\r\n    };\r\n    AbstractRepeater.prototype.addView = function (bindingContext, overrideContext) {\r\n        throw new Error('subclass must implement `addView`');\r\n    };\r\n    AbstractRepeater.prototype.insertView = function (index, bindingContext, overrideContext) {\r\n        throw new Error('subclass must implement `insertView`');\r\n    };\r\n    AbstractRepeater.prototype.moveView = function (sourceIndex, targetIndex) {\r\n        throw new Error('subclass must implement `moveView`');\r\n    };\r\n    AbstractRepeater.prototype.removeAllViews = function (returnToCache, skipAnimation) {\r\n        throw new Error('subclass must implement `removeAllViews`');\r\n    };\r\n    AbstractRepeater.prototype.removeViews = function (viewsToRemove, returnToCache, skipAnimation) {\r\n        throw new Error('subclass must implement `removeView`');\r\n    };\r\n    AbstractRepeater.prototype.removeView = function (index, returnToCache, skipAnimation) {\r\n        throw new Error('subclass must implement `removeView`');\r\n    };\r\n    AbstractRepeater.prototype.updateBindings = function (view) {\r\n        throw new Error('subclass must implement `updateBindings`');\r\n    };\r\n    return AbstractRepeater;\r\n}());\n\nvar matcherExtractionMarker = '__marker_extracted__';\r\nvar Repeat = (function (_super) {\r\n    __extends(Repeat, _super);\r\n    function Repeat(viewFactory, instruction, viewSlot, viewResources, observerLocator, strategyLocator) {\r\n        var _this = _super.call(this, {\r\n            local: 'item',\r\n            viewsRequireLifecycle: viewsRequireLifecycle(viewFactory)\r\n        }) || this;\r\n        _this.viewFactory = viewFactory;\r\n        _this.instruction = instruction;\r\n        _this.viewSlot = viewSlot;\r\n        _this.lookupFunctions = viewResources.lookupFunctions;\r\n        _this.observerLocator = observerLocator;\r\n        _this.key = 'key';\r\n        _this.value = 'value';\r\n        _this.strategyLocator = strategyLocator;\r\n        _this.ignoreMutation = false;\r\n        _this.sourceExpression = getItemsSourceExpression(_this.instruction, 'repeat.for');\r\n        _this.isOneTime = isOneTime(_this.sourceExpression);\r\n        _this.viewsRequireLifecycle = viewsRequireLifecycle(viewFactory);\r\n        return _this;\r\n    }\r\n    Repeat_1 = Repeat;\r\n    Repeat.prototype.call = function (context, changes) {\r\n        this[context](this.items, changes);\r\n    };\r\n    Repeat.prototype.bind = function (bindingContext, overrideContext) {\r\n        this.scope = { bindingContext: bindingContext, overrideContext: overrideContext };\r\n        var instruction = this.instruction;\r\n        if (!(matcherExtractionMarker in instruction)) {\r\n            instruction[matcherExtractionMarker] = this._captureAndRemoveMatcherBinding();\r\n        }\r\n        this.matcherBinding = instruction[matcherExtractionMarker];\r\n        this.itemsChanged();\r\n    };\r\n    Repeat.prototype.unbind = function () {\r\n        this.scope = null;\r\n        this.items = null;\r\n        this.matcherBinding = null;\r\n        this.viewSlot.removeAll(true, true);\r\n        this._unsubscribeCollection();\r\n    };\r\n    Repeat.prototype._unsubscribeCollection = function () {\r\n        if (this.collectionObserver) {\r\n            this.collectionObserver.unsubscribe(this.callContext, this);\r\n            this.collectionObserver = null;\r\n            this.callContext = null;\r\n        }\r\n    };\r\n    Repeat.prototype.itemsChanged = function () {\r\n        var _this = this;\r\n        this._unsubscribeCollection();\r\n        if (!this.scope) {\r\n            return;\r\n        }\r\n        var items = this.items;\r\n        this.strategy = this.strategyLocator.getStrategy(items);\r\n        if (!this.strategy) {\r\n            throw new Error(\"Value for '\".concat(this.sourceExpression, \"' is non-repeatable\"));\r\n        }\r\n        if (!this.isOneTime && !this._observeInnerCollection()) {\r\n            this._observeCollection();\r\n        }\r\n        this.ignoreMutation = true;\r\n        this.strategy.instanceChanged(this, items);\r\n        this.observerLocator.taskQueue.queueMicroTask(function () {\r\n            _this.ignoreMutation = false;\r\n        });\r\n    };\r\n    Repeat.prototype._getInnerCollection = function () {\r\n        var expression = unwrapExpression(this.sourceExpression);\r\n        if (!expression) {\r\n            return null;\r\n        }\r\n        return expression.evaluate(this.scope, null);\r\n    };\r\n    Repeat.prototype.handleCollectionMutated = function (collection, changes) {\r\n        if (!this.collectionObserver) {\r\n            return;\r\n        }\r\n        if (this.ignoreMutation) {\r\n            return;\r\n        }\r\n        this.strategy.instanceMutated(this, collection, changes);\r\n    };\r\n    Repeat.prototype.handleInnerCollectionMutated = function (collection, changes) {\r\n        var _this = this;\r\n        if (!this.collectionObserver) {\r\n            return;\r\n        }\r\n        if (this.ignoreMutation) {\r\n            return;\r\n        }\r\n        this.ignoreMutation = true;\r\n        var newItems = this.sourceExpression.evaluate(this.scope, this.lookupFunctions);\r\n        this.observerLocator.taskQueue.queueMicroTask(function () { return _this.ignoreMutation = false; });\r\n        if (newItems === this.items) {\r\n            this.itemsChanged();\r\n        }\r\n        else {\r\n            this.items = newItems;\r\n        }\r\n    };\r\n    Repeat.prototype._observeInnerCollection = function () {\r\n        var items = this._getInnerCollection();\r\n        var strategy = this.strategyLocator.getStrategy(items);\r\n        if (!strategy) {\r\n            return false;\r\n        }\r\n        this.collectionObserver = strategy.getCollectionObserver(this.observerLocator, items);\r\n        if (!this.collectionObserver) {\r\n            return false;\r\n        }\r\n        this.callContext = 'handleInnerCollectionMutated';\r\n        this.collectionObserver.subscribe(this.callContext, this);\r\n        return true;\r\n    };\r\n    Repeat.prototype._observeCollection = function () {\r\n        var items = this.items;\r\n        this.collectionObserver = this.strategy.getCollectionObserver(this.observerLocator, items);\r\n        if (this.collectionObserver) {\r\n            this.callContext = 'handleCollectionMutated';\r\n            this.collectionObserver.subscribe(this.callContext, this);\r\n        }\r\n    };\r\n    Repeat.prototype._captureAndRemoveMatcherBinding = function () {\r\n        var viewFactory = this.viewFactory.viewFactory;\r\n        if (viewFactory) {\r\n            var template = viewFactory.template;\r\n            var instructions = viewFactory.instructions;\r\n            if (Repeat_1.useInnerMatcher) {\r\n                return extractMatcherBindingExpression(instructions);\r\n            }\r\n            if (getChildrenCount(template) > 1) {\r\n                return undefined;\r\n            }\r\n            var repeatedElement = getFirstElementChild(template);\r\n            if (!repeatedElement.hasAttribute('au-target-id')) {\r\n                return undefined;\r\n            }\r\n            var repeatedElementTargetId = repeatedElement.getAttribute('au-target-id');\r\n            return extractMatcherBindingExpression(instructions, repeatedElementTargetId);\r\n        }\r\n        return undefined;\r\n    };\r\n    Repeat.prototype.viewCount = function () { return this.viewSlot.children.length; };\r\n    Repeat.prototype.views = function () { return this.viewSlot.children; };\r\n    Repeat.prototype.view = function (index) { return this.viewSlot.children[index]; };\r\n    Repeat.prototype.matcher = function () {\r\n        var matcherBinding = this.matcherBinding;\r\n        return matcherBinding\r\n            ? matcherBinding.sourceExpression.evaluate(this.scope, matcherBinding.lookupFunctions)\r\n            : null;\r\n    };\r\n    Repeat.prototype.addView = function (bindingContext, overrideContext) {\r\n        var view = this.viewFactory.create();\r\n        view.bind(bindingContext, overrideContext);\r\n        this.viewSlot.add(view);\r\n    };\r\n    Repeat.prototype.insertView = function (index, bindingContext, overrideContext) {\r\n        var view = this.viewFactory.create();\r\n        view.bind(bindingContext, overrideContext);\r\n        this.viewSlot.insert(index, view);\r\n    };\r\n    Repeat.prototype.moveView = function (sourceIndex, targetIndex) {\r\n        this.viewSlot.move(sourceIndex, targetIndex);\r\n    };\r\n    Repeat.prototype.removeAllViews = function (returnToCache, skipAnimation) {\r\n        return this.viewSlot.removeAll(returnToCache, skipAnimation);\r\n    };\r\n    Repeat.prototype.removeViews = function (viewsToRemove, returnToCache, skipAnimation) {\r\n        return this.viewSlot.removeMany(viewsToRemove, returnToCache, skipAnimation);\r\n    };\r\n    Repeat.prototype.removeView = function (index, returnToCache, skipAnimation) {\r\n        return this.viewSlot.removeAt(index, returnToCache, skipAnimation);\r\n    };\r\n    Repeat.prototype.updateBindings = function (view) {\r\n        var $view = view;\r\n        var j = $view.bindings.length;\r\n        while (j--) {\r\n            updateOneTimeBinding($view.bindings[j]);\r\n        }\r\n        j = $view.controllers.length;\r\n        while (j--) {\r\n            var k = $view.controllers[j].boundProperties.length;\r\n            while (k--) {\r\n                var binding = $view.controllers[j].boundProperties[k].binding;\r\n                updateOneTimeBinding(binding);\r\n            }\r\n        }\r\n    };\r\n    var Repeat_1;\r\n    Repeat.useInnerMatcher = true;\r\n    __decorate([\r\n        bindable\r\n    ], Repeat.prototype, \"items\", void 0);\r\n    __decorate([\r\n        bindable\r\n    ], Repeat.prototype, \"local\", void 0);\r\n    __decorate([\r\n        bindable\r\n    ], Repeat.prototype, \"key\", void 0);\r\n    __decorate([\r\n        bindable\r\n    ], Repeat.prototype, \"value\", void 0);\r\n    Repeat = Repeat_1 = __decorate([\r\n        customAttribute('repeat'),\r\n        templateController,\r\n        inject(BoundViewFactory, TargetInstruction, ViewSlot, ViewResources, ObserverLocator, RepeatStrategyLocator)\r\n    ], Repeat);\r\n    return Repeat;\r\n}(AbstractRepeater));\r\nvar extractMatcherBindingExpression = function (instructions, targetedElementId) {\r\n    var instructionIds = Object.keys(instructions);\r\n    for (var i = 0; i < instructionIds.length; i++) {\r\n        var instructionId = instructionIds[i];\r\n        if (targetedElementId !== undefined && instructionId !== targetedElementId) {\r\n            continue;\r\n        }\r\n        var expressions = instructions[instructionId].expressions;\r\n        if (expressions) {\r\n            for (var ii = 0; ii < expressions.length; ii++) {\r\n                if (expressions[ii].targetProperty === 'matcher') {\r\n                    var matcherBindingExpression = expressions[ii];\r\n                    expressions.splice(ii, 1);\r\n                    return matcherBindingExpression;\r\n                }\r\n            }\r\n        }\r\n    }\r\n};\r\nvar getChildrenCount = function (el) {\r\n    var childNodes = el.childNodes;\r\n    var count = 0;\r\n    for (var i = 0, ii = childNodes.length; ii > i; ++i) {\r\n        if (childNodes[i].nodeType === 1) {\r\n            ++count;\r\n        }\r\n    }\r\n    return count;\r\n};\r\nvar getFirstElementChild = function (el) {\r\n    var firstChild = el.firstChild;\r\n    while (firstChild !== null) {\r\n        if (firstChild.nodeType === 1) {\r\n            return firstChild;\r\n        }\r\n        firstChild = firstChild.nextSibling;\r\n    }\r\n    return null;\r\n};\n\nvar aureliaHideClassName = 'aurelia-hide';\r\nvar aureliaHideClass = \".\".concat(aureliaHideClassName, \" { display:none !important; }\");\r\nfunction injectAureliaHideStyleAtHead() {\r\n    DOM.injectStyles(aureliaHideClass);\r\n}\r\nfunction injectAureliaHideStyleAtBoundary(domBoundary) {\r\n    if (FEATURE.shadowDOM && domBoundary && !domBoundary.hasAureliaHideStyle) {\r\n        domBoundary.hasAureliaHideStyle = true;\r\n        DOM.injectStyles(aureliaHideClass, domBoundary);\r\n    }\r\n}\n\nvar Show = (function () {\r\n    function Show(element, animator, domBoundary) {\r\n        this.element = element;\r\n        this.animator = animator;\r\n        this.domBoundary = domBoundary;\r\n    }\r\n    Show.inject = function () {\r\n        return [DOM.Element, Animator, Optional.of(DOM.boundary, true)];\r\n    };\r\n    Show.prototype.created = function () {\r\n        injectAureliaHideStyleAtBoundary(this.domBoundary);\r\n    };\r\n    Show.prototype.valueChanged = function (newValue) {\r\n        var element = this.element;\r\n        var animator = this.animator;\r\n        if (newValue) {\r\n            animator.removeClass(element, aureliaHideClassName);\r\n        }\r\n        else {\r\n            animator.addClass(element, aureliaHideClassName);\r\n        }\r\n    };\r\n    Show.prototype.bind = function (bindingContext) {\r\n        this.valueChanged(this.value);\r\n    };\r\n    Show = __decorate([\r\n        customAttribute('show')\r\n    ], Show);\r\n    return Show;\r\n}());\n\nvar Hide = (function () {\r\n    function Hide(element, animator, domBoundary) {\r\n        this.element = element;\r\n        this.animator = animator;\r\n        this.domBoundary = domBoundary;\r\n    }\r\n    Hide.inject = function () {\r\n        return [DOM.Element, Animator, Optional.of(DOM.boundary, true)];\r\n    };\r\n    Hide.prototype.created = function () {\r\n        injectAureliaHideStyleAtBoundary(this.domBoundary);\r\n    };\r\n    Hide.prototype.valueChanged = function (newValue) {\r\n        if (newValue) {\r\n            this.animator.addClass(this.element, aureliaHideClassName);\r\n        }\r\n        else {\r\n            this.animator.removeClass(this.element, aureliaHideClassName);\r\n        }\r\n    };\r\n    Hide.prototype.bind = function (bindingContext) {\r\n        this.valueChanged(this.value);\r\n    };\r\n    Hide.prototype.value = function (value) {\r\n        throw new Error('Method not implemented.');\r\n    };\r\n    Hide = __decorate([\r\n        customAttribute('hide')\r\n    ], Hide);\r\n    return Hide;\r\n}());\n\nvar HTMLSanitizer = (function () {\r\n    function HTMLSanitizer() {\r\n    }\r\n    HTMLSanitizer.prototype.sanitize = function (input) {\r\n        throw new Error(\"To protect the application against a wide variety of sophisticated XSS attacks.\\nPlease see https://aurelia.io/docs/binding/basics#element-content for instructions on how to use a secure solution like DOMPurify or sanitize-html.\");\r\n    };\r\n    return HTMLSanitizer;\r\n}());\n\nvar SanitizeHTMLValueConverter = (function () {\r\n    function SanitizeHTMLValueConverter(sanitizer) {\r\n        this.sanitizer = sanitizer;\r\n    }\r\n    SanitizeHTMLValueConverter.prototype.toView = function (untrustedMarkup) {\r\n        if (untrustedMarkup === null || untrustedMarkup === undefined) {\r\n            return null;\r\n        }\r\n        return this.sanitizer.sanitize(untrustedMarkup);\r\n    };\r\n    SanitizeHTMLValueConverter = __decorate([\r\n        valueConverter('sanitizeHTML'),\r\n        inject(HTMLSanitizer)\r\n    ], SanitizeHTMLValueConverter);\r\n    return SanitizeHTMLValueConverter;\r\n}());\n\nvar Replaceable = (function () {\r\n    function Replaceable(viewFactory, viewSlot) {\r\n        this.viewFactory = viewFactory;\r\n        this.viewSlot = viewSlot;\r\n        this.view = null;\r\n    }\r\n    Replaceable.prototype.bind = function (bindingContext, overrideContext) {\r\n        if (this.view === null) {\r\n            this.view = this.viewFactory.create();\r\n            this.viewSlot.add(this.view);\r\n        }\r\n        this.view.bind(bindingContext, overrideContext);\r\n    };\r\n    Replaceable.prototype.unbind = function () {\r\n        this.view.unbind();\r\n    };\r\n    Replaceable = __decorate([\r\n        customAttribute('replaceable'),\r\n        templateController,\r\n        inject(BoundViewFactory, ViewSlot)\r\n    ], Replaceable);\r\n    return Replaceable;\r\n}());\n\nvar Focus = (function () {\r\n    function Focus(element, taskQueue) {\r\n        this.element = element;\r\n        this.taskQueue = taskQueue;\r\n        this.isAttached = false;\r\n        this.needsApply = false;\r\n    }\r\n    Focus.inject = function () {\r\n        return [DOM.Element, TaskQueue];\r\n    };\r\n    Focus.prototype.valueChanged = function () {\r\n        if (this.isAttached) {\r\n            this._apply();\r\n        }\r\n        else {\r\n            this.needsApply = true;\r\n        }\r\n    };\r\n    Focus.prototype._apply = function () {\r\n        var _this = this;\r\n        if (this.value) {\r\n            this.taskQueue.queueMicroTask(function () {\r\n                if (_this.value) {\r\n                    _this.element.focus();\r\n                }\r\n            });\r\n        }\r\n        else {\r\n            this.element.blur();\r\n        }\r\n    };\r\n    Focus.prototype.attached = function () {\r\n        this.isAttached = true;\r\n        if (this.needsApply) {\r\n            this.needsApply = false;\r\n            this._apply();\r\n        }\r\n        this.element.addEventListener('focus', this);\r\n        this.element.addEventListener('blur', this);\r\n    };\r\n    Focus.prototype.detached = function () {\r\n        this.isAttached = false;\r\n        this.element.removeEventListener('focus', this);\r\n        this.element.removeEventListener('blur', this);\r\n    };\r\n    Focus.prototype.handleEvent = function (e) {\r\n        if (e.type === 'focus') {\r\n            this.value = true;\r\n        }\r\n        else if (DOM.activeElement !== this.element) {\r\n            this.value = false;\r\n        }\r\n    };\r\n    Focus = __decorate([\r\n        customAttribute('focus', bindingMode.twoWay)\r\n    ], Focus);\r\n    return Focus;\r\n}());\n\nvar cssUrlMatcher = /url\\((?!['\"]data)([^)]+)\\)/gi;\r\nfunction fixupCSSUrls(address, css) {\r\n    if (typeof css !== 'string') {\r\n        throw new Error(\"Failed loading required CSS file: \".concat(address));\r\n    }\r\n    return css.replace(cssUrlMatcher, function (match, p1) {\r\n        var quote = p1.charAt(0);\r\n        if (quote === '\\'' || quote === '\"') {\r\n            p1 = p1.substr(1, p1.length - 2);\r\n        }\r\n        return 'url(\\'' + relativeToFile(p1, address) + '\\')';\r\n    });\r\n}\r\nvar CSSResource = (function () {\r\n    function CSSResource(address) {\r\n        this.address = address;\r\n        this._scoped = null;\r\n        this._global = false;\r\n        this._alreadyGloballyInjected = false;\r\n    }\r\n    CSSResource.prototype.initialize = function (container, Target) {\r\n        this._scoped = new Target(this);\r\n    };\r\n    CSSResource.prototype.register = function (registry, name) {\r\n        if (name === 'scoped') {\r\n            registry.registerViewEngineHooks(this._scoped);\r\n        }\r\n        else {\r\n            this._global = true;\r\n        }\r\n    };\r\n    CSSResource.prototype.load = function (container) {\r\n        var _this = this;\r\n        return container.get(Loader)\r\n            .loadText(this.address)\r\n            .catch(function () { return null; })\r\n            .then(function (text) {\r\n            text = fixupCSSUrls(_this.address, text);\r\n            _this._scoped.css = text;\r\n            if (_this._global) {\r\n                _this._alreadyGloballyInjected = true;\r\n                DOM.injectStyles(text);\r\n            }\r\n            return _this;\r\n        });\r\n    };\r\n    return CSSResource;\r\n}());\r\nvar CSSViewEngineHooks = (function () {\r\n    function CSSViewEngineHooks(owner) {\r\n        this.owner = owner;\r\n        this.css = null;\r\n    }\r\n    CSSViewEngineHooks.prototype.beforeCompile = function (content, resources, instruction) {\r\n        if (instruction.targetShadowDOM) {\r\n            DOM.injectStyles(this.css, content, true);\r\n        }\r\n        else if (FEATURE.scopedCSS) {\r\n            var styleNode = DOM.injectStyles(this.css, content, true);\r\n            styleNode.setAttribute('scoped', 'scoped');\r\n        }\r\n        else if (this._global && !this.owner._alreadyGloballyInjected) {\r\n            DOM.injectStyles(this.css);\r\n            this.owner._alreadyGloballyInjected = true;\r\n        }\r\n    };\r\n    return CSSViewEngineHooks;\r\n}());\r\nfunction _createCSSResource(address) {\r\n    var ViewCSS = (function (_super) {\r\n        __extends(ViewCSS, _super);\r\n        function ViewCSS() {\r\n            return _super !== null && _super.apply(this, arguments) || this;\r\n        }\r\n        ViewCSS = __decorate([\r\n            resource(new CSSResource(address))\r\n        ], ViewCSS);\r\n        return ViewCSS;\r\n    }(CSSViewEngineHooks));\r\n    return ViewCSS;\r\n}\n\nvar AttrBindingBehavior = (function () {\r\n    function AttrBindingBehavior() {\r\n    }\r\n    AttrBindingBehavior.prototype.bind = function (binding, source) {\r\n        binding.targetObserver = new DataAttributeObserver(binding.target, binding.targetProperty);\r\n    };\r\n    AttrBindingBehavior.prototype.unbind = function (binding, source) {\r\n    };\r\n    AttrBindingBehavior = __decorate([\r\n        bindingBehavior('attr')\r\n    ], AttrBindingBehavior);\r\n    return AttrBindingBehavior;\r\n}());\n\nvar modeBindingBehavior = {\r\n    bind: function (binding, source, lookupFunctions) {\r\n        binding.originalMode = binding.mode;\r\n        binding.mode = this.mode;\r\n    },\r\n    unbind: function (binding, source) {\r\n        binding.mode = binding.originalMode;\r\n        binding.originalMode = null;\r\n    }\r\n};\r\nvar OneTimeBindingBehavior = (function () {\r\n    function OneTimeBindingBehavior() {\r\n        this.mode = bindingMode.oneTime;\r\n    }\r\n    OneTimeBindingBehavior = __decorate([\r\n        mixin(modeBindingBehavior),\r\n        bindingBehavior('oneTime')\r\n    ], OneTimeBindingBehavior);\r\n    return OneTimeBindingBehavior;\r\n}());\r\nvar OneWayBindingBehavior = (function () {\r\n    function OneWayBindingBehavior() {\r\n        this.mode = bindingMode.toView;\r\n    }\r\n    OneWayBindingBehavior = __decorate([\r\n        mixin(modeBindingBehavior),\r\n        bindingBehavior('oneWay')\r\n    ], OneWayBindingBehavior);\r\n    return OneWayBindingBehavior;\r\n}());\r\nvar ToViewBindingBehavior = (function () {\r\n    function ToViewBindingBehavior() {\r\n        this.mode = bindingMode.toView;\r\n    }\r\n    ToViewBindingBehavior = __decorate([\r\n        mixin(modeBindingBehavior),\r\n        bindingBehavior('toView')\r\n    ], ToViewBindingBehavior);\r\n    return ToViewBindingBehavior;\r\n}());\r\nvar FromViewBindingBehavior = (function () {\r\n    function FromViewBindingBehavior() {\r\n        this.mode = bindingMode.fromView;\r\n    }\r\n    FromViewBindingBehavior = __decorate([\r\n        mixin(modeBindingBehavior),\r\n        bindingBehavior('fromView')\r\n    ], FromViewBindingBehavior);\r\n    return FromViewBindingBehavior;\r\n}());\r\nvar TwoWayBindingBehavior = (function () {\r\n    function TwoWayBindingBehavior() {\r\n        this.mode = bindingMode.twoWay;\r\n    }\r\n    TwoWayBindingBehavior = __decorate([\r\n        mixin(modeBindingBehavior),\r\n        bindingBehavior('twoWay')\r\n    ], TwoWayBindingBehavior);\r\n    return TwoWayBindingBehavior;\r\n}());\n\nfunction throttle(newValue) {\r\n    var _this = this;\r\n    var state = this.throttleState;\r\n    var elapsed = +new Date() - state.last;\r\n    if (elapsed >= state.delay) {\r\n        clearTimeout(state.timeoutId);\r\n        state.timeoutId = null;\r\n        state.last = +new Date();\r\n        this.throttledMethod(newValue);\r\n        return;\r\n    }\r\n    state.newValue = newValue;\r\n    if (state.timeoutId === null) {\r\n        state.timeoutId = setTimeout(function () {\r\n            state.timeoutId = null;\r\n            state.last = +new Date();\r\n            _this.throttledMethod(state.newValue);\r\n        }, state.delay - elapsed);\r\n    }\r\n}\r\nvar ThrottleBindingBehavior = (function () {\r\n    function ThrottleBindingBehavior() {\r\n    }\r\n    ThrottleBindingBehavior.prototype.bind = function (binding, source, delay) {\r\n        if (delay === void 0) { delay = 200; }\r\n        var methodToThrottle = 'updateTarget';\r\n        if (binding.callSource) {\r\n            methodToThrottle = 'callSource';\r\n        }\r\n        else if (binding.updateSource && binding.mode === bindingMode.twoWay) {\r\n            methodToThrottle = 'updateSource';\r\n        }\r\n        binding.throttledMethod = binding[methodToThrottle];\r\n        binding.throttledMethod.originalName = methodToThrottle;\r\n        binding[methodToThrottle] = throttle;\r\n        binding.throttleState = {\r\n            delay: delay,\r\n            last: 0,\r\n            timeoutId: null\r\n        };\r\n    };\r\n    ThrottleBindingBehavior.prototype.unbind = function (binding, source) {\r\n        var methodToRestore = binding.throttledMethod.originalName;\r\n        binding[methodToRestore] = binding.throttledMethod;\r\n        binding.throttledMethod = null;\r\n        clearTimeout(binding.throttleState.timeoutId);\r\n        binding.throttleState = null;\r\n    };\r\n    ThrottleBindingBehavior = __decorate([\r\n        bindingBehavior('throttle')\r\n    ], ThrottleBindingBehavior);\r\n    return ThrottleBindingBehavior;\r\n}());\n\nvar unset = {};\r\nfunction debounceCallSource(event) {\r\n    var _this = this;\r\n    var state = this.debounceState;\r\n    clearTimeout(state.timeoutId);\r\n    state.timeoutId = setTimeout(function () { return _this.debouncedMethod(event); }, state.delay);\r\n}\r\nfunction debounceCall(context, newValue, oldValue) {\r\n    var _this = this;\r\n    var state = this.debounceState;\r\n    clearTimeout(state.timeoutId);\r\n    if (context !== state.callContextToDebounce) {\r\n        state.oldValue = unset;\r\n        this.debouncedMethod(context, newValue, oldValue);\r\n        return;\r\n    }\r\n    if (state.oldValue === unset) {\r\n        state.oldValue = oldValue;\r\n    }\r\n    state.timeoutId = setTimeout(function () {\r\n        var _oldValue = state.oldValue;\r\n        state.oldValue = unset;\r\n        _this.debouncedMethod(context, newValue, _oldValue);\r\n    }, state.delay);\r\n}\r\nvar DebounceBindingBehavior = (function () {\r\n    function DebounceBindingBehavior() {\r\n    }\r\n    DebounceBindingBehavior.prototype.bind = function (binding, source, delay) {\r\n        if (delay === void 0) { delay = 200; }\r\n        var isCallSource = binding.callSource !== undefined;\r\n        var methodToDebounce = isCallSource ? 'callSource' : 'call';\r\n        var debouncer = isCallSource ? debounceCallSource : debounceCall;\r\n        var mode = binding.mode;\r\n        var callContextToDebounce = mode === bindingMode.twoWay || mode === bindingMode.fromView ? targetContext : sourceContext;\r\n        binding.debouncedMethod = binding[methodToDebounce];\r\n        binding.debouncedMethod.originalName = methodToDebounce;\r\n        binding[methodToDebounce] = debouncer;\r\n        binding.debounceState = {\r\n            callContextToDebounce: callContextToDebounce,\r\n            delay: delay,\r\n            timeoutId: 0,\r\n            oldValue: unset\r\n        };\r\n    };\r\n    DebounceBindingBehavior.prototype.unbind = function (binding, source) {\r\n        var methodToRestore = binding.debouncedMethod.originalName;\r\n        binding[methodToRestore] = binding.debouncedMethod;\r\n        binding.debouncedMethod = null;\r\n        clearTimeout(binding.debounceState.timeoutId);\r\n        binding.debounceState = null;\r\n    };\r\n    DebounceBindingBehavior = __decorate([\r\n        bindingBehavior('debounce')\r\n    ], DebounceBindingBehavior);\r\n    return DebounceBindingBehavior;\r\n}());\n\nfunction findOriginalEventTarget(event) {\r\n    return (event.path && event.path[0]) || (event.deepPath && event.deepPath[0]) || event.target;\r\n}\r\nfunction handleSelfEvent(event) {\r\n    var target = findOriginalEventTarget(event);\r\n    if (this.target !== target) {\r\n        return;\r\n    }\r\n    this.selfEventCallSource(event);\r\n}\r\nvar SelfBindingBehavior = (function () {\r\n    function SelfBindingBehavior() {\r\n    }\r\n    SelfBindingBehavior.prototype.bind = function (binding, source) {\r\n        if (!binding.callSource || !binding.targetEvent) {\r\n            throw new Error('Self binding behavior only supports event.');\r\n        }\r\n        binding.selfEventCallSource = binding.callSource;\r\n        binding.callSource = handleSelfEvent;\r\n    };\r\n    SelfBindingBehavior.prototype.unbind = function (binding, source) {\r\n        binding.callSource = binding.selfEventCallSource;\r\n        binding.selfEventCallSource = null;\r\n    };\r\n    SelfBindingBehavior = __decorate([\r\n        bindingBehavior('self')\r\n    ], SelfBindingBehavior);\r\n    return SelfBindingBehavior;\r\n}());\n\nvar BindingSignaler = (function () {\r\n    function BindingSignaler() {\r\n        this.signals = {};\r\n    }\r\n    BindingSignaler.prototype.signal = function (name) {\r\n        var bindings = this.signals[name];\r\n        if (!bindings) {\r\n            return;\r\n        }\r\n        var i = bindings.length;\r\n        while (i--) {\r\n            bindings[i].call(sourceContext);\r\n        }\r\n    };\r\n    return BindingSignaler;\r\n}());\n\nvar SignalBindingBehavior = (function () {\r\n    function SignalBindingBehavior(bindingSignaler) {\r\n        this.signals = bindingSignaler.signals;\r\n    }\r\n    SignalBindingBehavior.inject = function () { return [BindingSignaler]; };\r\n    SignalBindingBehavior.prototype.bind = function (binding, source) {\r\n        var names = [];\r\n        for (var _i = 2; _i < arguments.length; _i++) {\r\n            names[_i - 2] = arguments[_i];\r\n        }\r\n        if (!binding.updateTarget) {\r\n            throw new Error('Only property bindings and string interpolation bindings can be signaled.  Trigger, delegate and call bindings cannot be signaled.');\r\n        }\r\n        var signals = this.signals;\r\n        if (names.length === 1) {\r\n            var name_1 = names[0];\r\n            var bindings = signals[name_1] || (signals[name_1] = []);\r\n            bindings.push(binding);\r\n            binding.signalName = name_1;\r\n        }\r\n        else if (names.length > 1) {\r\n            var i = names.length;\r\n            while (i--) {\r\n                var name_2 = names[i];\r\n                var bindings = signals[name_2] || (signals[name_2] = []);\r\n                bindings.push(binding);\r\n            }\r\n            binding.signalName = names;\r\n        }\r\n        else {\r\n            throw new Error('Signal name is required.');\r\n        }\r\n    };\r\n    SignalBindingBehavior.prototype.unbind = function (binding, source) {\r\n        var signals = this.signals;\r\n        var name = binding.signalName;\r\n        binding.signalName = null;\r\n        if (Array.isArray(name)) {\r\n            var names = name;\r\n            var i = names.length;\r\n            while (i--) {\r\n                var n = names[i];\r\n                var bindings = signals[n];\r\n                bindings.splice(bindings.indexOf(binding), 1);\r\n            }\r\n        }\r\n        else {\r\n            var bindings = signals[name];\r\n            bindings.splice(bindings.indexOf(binding), 1);\r\n        }\r\n    };\r\n    SignalBindingBehavior = __decorate([\r\n        bindingBehavior('signal')\r\n    ], SignalBindingBehavior);\r\n    return SignalBindingBehavior;\r\n}());\n\nvar eventNamesRequired = 'The updateTrigger binding behavior requires at least one event name argument: eg <input value.bind=\"firstName & updateTrigger:\\'blur\\'\">';\r\nvar notApplicableMessage = 'The updateTrigger binding behavior can only be applied to two-way/ from-view bindings on input/select elements.';\r\nvar UpdateTriggerBindingBehavior = (function () {\r\n    function UpdateTriggerBindingBehavior() {\r\n    }\r\n    UpdateTriggerBindingBehavior.prototype.bind = function (binding, source) {\r\n        var events = [];\r\n        for (var _i = 2; _i < arguments.length; _i++) {\r\n            events[_i - 2] = arguments[_i];\r\n        }\r\n        if (events.length === 0) {\r\n            throw new Error(eventNamesRequired);\r\n        }\r\n        if (binding.mode !== bindingMode.twoWay && binding.mode !== bindingMode.fromView) {\r\n            throw new Error(notApplicableMessage);\r\n        }\r\n        var targetObserver = binding.observerLocator.getObserver(binding.target, binding.targetProperty);\r\n        if (!targetObserver.handler) {\r\n            throw new Error(notApplicableMessage);\r\n        }\r\n        binding.targetObserver = targetObserver;\r\n        targetObserver.originalHandler = binding.targetObserver.handler;\r\n        var handler = new EventSubscriber(events);\r\n        targetObserver.handler = handler;\r\n    };\r\n    UpdateTriggerBindingBehavior.prototype.unbind = function (binding, source) {\r\n        var targetObserver = binding.targetObserver;\r\n        targetObserver.handler.dispose();\r\n        targetObserver.handler = targetObserver.originalHandler;\r\n        targetObserver.originalHandler = null;\r\n    };\r\n    UpdateTriggerBindingBehavior = __decorate([\r\n        bindingBehavior('updateTrigger')\r\n    ], UpdateTriggerBindingBehavior);\r\n    return UpdateTriggerBindingBehavior;\r\n}());\n\nfunction _createDynamicElement(_a) {\r\n    var name = _a.name, viewUrl = _a.viewUrl, bindableNames = _a.bindableNames, useShadowDOMmode = _a.useShadowDOMmode;\r\n    var DynamicElement = (function () {\r\n        function DynamicElement() {\r\n        }\r\n        DynamicElement.prototype.bind = function (bindingContext) {\r\n            this.$parent = bindingContext;\r\n        };\r\n        DynamicElement = __decorate([\r\n            customElement(name),\r\n            useView(viewUrl)\r\n        ], DynamicElement);\r\n        return DynamicElement;\r\n    }());\r\n    for (var i = 0, ii = bindableNames.length; i < ii; ++i) {\r\n        bindable(bindableNames[i])(DynamicElement);\r\n    }\r\n    switch (useShadowDOMmode) {\r\n        case 'open':\r\n            useShadowDOM({ mode: 'open' })(DynamicElement);\r\n            break;\r\n        case 'closed':\r\n            useShadowDOM({ mode: 'closed' })(DynamicElement);\r\n            break;\r\n        case '':\r\n            useShadowDOM(DynamicElement);\r\n            break;\r\n        case null:\r\n            break;\r\n        default:\r\n            getLogger('aurelia-html-only-element')\r\n                .warn(\"Expected 'use-shadow-dom' value to be \\\"close\\\", \\\"open\\\" or \\\"\\\", received \".concat(useShadowDOMmode));\r\n            break;\r\n    }\r\n    return DynamicElement;\r\n}\n\nfunction getElementName(address) {\r\n    return /([^\\/^\\?]+)\\.html/i.exec(address)[1].toLowerCase();\r\n}\r\nfunction configure$1(config) {\r\n    var viewEngine = config.container.get(ViewEngine);\r\n    var loader = config.aurelia.loader;\r\n    viewEngine.addResourcePlugin('.html', {\r\n        'fetch': function (viewUrl) {\r\n            return loader.loadTemplate(viewUrl).then(function (registryEntry) {\r\n                var _a;\r\n                var bindableNames = registryEntry.template.getAttribute('bindable');\r\n                var useShadowDOMmode = registryEntry.template.getAttribute('use-shadow-dom');\r\n                var name = getElementName(viewUrl);\r\n                if (bindableNames) {\r\n                    bindableNames = bindableNames.split(',').map(function (x) { return x.trim(); });\r\n                    registryEntry.template.removeAttribute('bindable');\r\n                }\r\n                else {\r\n                    bindableNames = [];\r\n                }\r\n                return _a = {}, _a[name] = _createDynamicElement({ name: name, viewUrl: viewUrl, bindableNames: bindableNames, useShadowDOMmode: useShadowDOMmode }), _a;\r\n            });\r\n        }\r\n    });\r\n}\n\nfunction configure(config) {\r\n    injectAureliaHideStyleAtHead();\r\n    config.globalResources(Compose, If, Else, With, Repeat, Show, Hide, Replaceable, Focus, SanitizeHTMLValueConverter, OneTimeBindingBehavior, OneWayBindingBehavior, ToViewBindingBehavior, FromViewBindingBehavior, TwoWayBindingBehavior, ThrottleBindingBehavior, DebounceBindingBehavior, SelfBindingBehavior, SignalBindingBehavior, UpdateTriggerBindingBehavior, AttrBindingBehavior);\r\n    configure$1(config);\r\n    var viewEngine = config.container.get(ViewEngine);\r\n    var styleResourcePlugin = {\r\n        fetch: function (address) {\r\n            var _a;\r\n            return _a = {}, _a[address] = _createCSSResource(address), _a;\r\n        }\r\n    };\r\n    ['.css', '.less', '.sass', '.scss', '.styl'].forEach(function (ext) { return viewEngine.addResourcePlugin(ext, styleResourcePlugin); });\r\n}\n\nexport { AbstractRepeater, ArrayRepeatStrategy, AttrBindingBehavior, BindingSignaler, Compose, DebounceBindingBehavior, Else, Focus, FromViewBindingBehavior, HTMLSanitizer, Hide, If, MapRepeatStrategy, NullRepeatStrategy, NumberRepeatStrategy, OneTimeBindingBehavior, OneWayBindingBehavior, Repeat, RepeatStrategyLocator, Replaceable, SanitizeHTMLValueConverter, SelfBindingBehavior, SetRepeatStrategy, Show, SignalBindingBehavior, ThrottleBindingBehavior, ToViewBindingBehavior, TwoWayBindingBehavior, UpdateTriggerBindingBehavior, With, configure, createFullOverrideContext, getItemsSourceExpression, isOneTime, unwrapExpression, updateOneTimeBinding, updateOverrideContext, viewsRequireLifecycle };\n//# sourceMappingURL=aurelia-templating-resources.js.map\n","import { Router, RouteLoader, AppRouter } from 'aurelia-router';\nimport { Origin } from 'aurelia-metadata';\nimport { relativeToFile } from 'aurelia-path';\nimport { BehaviorInstruction, ShadowDOM, ViewSlot, ViewLocator, CompositionTransaction, CompositionEngine, SwapStrategies, inlineView, customElement, useView } from 'aurelia-templating';\nimport { Container } from 'aurelia-dependency-injection';\nimport { createOverrideContext } from 'aurelia-binding';\nimport { DOM } from 'aurelia-pal';\nimport * as LogManager from 'aurelia-logging';\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n    extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n    return extendStatics(d, b);\r\n};\r\n\r\nfunction __extends(d, b) {\r\n    if (typeof b !== \"function\" && b !== null)\r\n        throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n    extendStatics(d, b);\r\n    function __() { this.constructor = d; }\r\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\n\nvar EmptyLayoutViewModel = (function () {\r\n    function EmptyLayoutViewModel() {\r\n    }\r\n    return EmptyLayoutViewModel;\r\n}());\r\nvar RouterView = (function () {\r\n    function RouterView(element, container, viewSlot, router, viewLocator, compositionTransaction, compositionEngine) {\r\n        this.element = element;\r\n        this.container = container;\r\n        this.viewSlot = viewSlot;\r\n        this.router = router;\r\n        this.viewLocator = viewLocator;\r\n        this.compositionTransaction = compositionTransaction;\r\n        this.compositionEngine = compositionEngine;\r\n        this.router.registerViewPort(this, this.element.getAttribute('name'));\r\n        if (!('initialComposition' in compositionTransaction)) {\r\n            compositionTransaction.initialComposition = true;\r\n            this.compositionTransactionNotifier = compositionTransaction.enlist();\r\n        }\r\n    }\r\n    RouterView.inject = function () {\r\n        return [DOM.Element, Container, ViewSlot, Router, ViewLocator, CompositionTransaction, CompositionEngine];\r\n    };\r\n    RouterView.prototype.created = function (owningView) {\r\n        this.owningView = owningView;\r\n    };\r\n    RouterView.prototype.bind = function (bindingContext, overrideContext) {\r\n        this.container.viewModel = bindingContext;\r\n        this.overrideContext = overrideContext;\r\n    };\r\n    RouterView.prototype.process = function ($viewPortInstruction, waitToSwap) {\r\n        var _this = this;\r\n        var viewPortInstruction = $viewPortInstruction;\r\n        var component = viewPortInstruction.component;\r\n        var childContainer = component.childContainer;\r\n        var viewModel = component.viewModel;\r\n        var viewModelResource = component.viewModelResource;\r\n        var metadata = viewModelResource.metadata;\r\n        var config = component.router.currentInstruction.config;\r\n        var viewPortConfig = config.viewPorts ? (config.viewPorts[viewPortInstruction.name] || {}) : {};\r\n        childContainer.get(RouterViewLocator)._notify(this);\r\n        var layoutInstruction = {\r\n            viewModel: viewPortConfig.layoutViewModel || config.layoutViewModel || this.layoutViewModel,\r\n            view: viewPortConfig.layoutView || config.layoutView || this.layoutView,\r\n            model: viewPortConfig.layoutModel || config.layoutModel || this.layoutModel,\r\n            router: viewPortInstruction.component.router,\r\n            childContainer: childContainer,\r\n            viewSlot: this.viewSlot\r\n        };\r\n        var viewStrategy = this.viewLocator.getViewStrategy(component.view || viewModel);\r\n        if (viewStrategy && component.view) {\r\n            viewStrategy.makeRelativeTo(Origin.get(component.router.container.viewModel.constructor).moduleId);\r\n        }\r\n        return metadata\r\n            .load(childContainer, viewModelResource.value, null, viewStrategy, true)\r\n            .then(function (viewFactory) {\r\n            if (!_this.compositionTransactionNotifier) {\r\n                _this.compositionTransactionOwnershipToken = _this.compositionTransaction.tryCapture();\r\n            }\r\n            if (layoutInstruction.viewModel || layoutInstruction.view) {\r\n                viewPortInstruction.layoutInstruction = layoutInstruction;\r\n            }\r\n            var viewPortComponentBehaviorInstruction = BehaviorInstruction.dynamic(_this.element, viewModel, viewFactory);\r\n            viewPortInstruction.controller = metadata.create(childContainer, viewPortComponentBehaviorInstruction);\r\n            if (waitToSwap) {\r\n                return null;\r\n            }\r\n            _this.swap(viewPortInstruction);\r\n        });\r\n    };\r\n    RouterView.prototype.swap = function ($viewPortInstruction) {\r\n        var _this = this;\r\n        var viewPortInstruction = $viewPortInstruction;\r\n        var viewPortController = viewPortInstruction.controller;\r\n        var layoutInstruction = viewPortInstruction.layoutInstruction;\r\n        var previousView = this.view;\r\n        var work = function () {\r\n            var swapStrategy = SwapStrategies[_this.swapOrder] || SwapStrategies.after;\r\n            var viewSlot = _this.viewSlot;\r\n            swapStrategy(viewSlot, previousView, function () { return Promise.resolve(viewSlot.add(_this.view)); }).then(function () {\r\n                _this._notify();\r\n            });\r\n        };\r\n        var ready = function (owningView_or_layoutView) {\r\n            viewPortController.automate(_this.overrideContext, owningView_or_layoutView);\r\n            var transactionOwnerShipToken = _this.compositionTransactionOwnershipToken;\r\n            if (transactionOwnerShipToken) {\r\n                return transactionOwnerShipToken\r\n                    .waitForCompositionComplete()\r\n                    .then(function () {\r\n                    _this.compositionTransactionOwnershipToken = null;\r\n                    return work();\r\n                });\r\n            }\r\n            return work();\r\n        };\r\n        if (layoutInstruction) {\r\n            if (!layoutInstruction.viewModel) {\r\n                layoutInstruction.viewModel = new EmptyLayoutViewModel();\r\n            }\r\n            return this.compositionEngine\r\n                .createController(layoutInstruction)\r\n                .then(function (layoutController) {\r\n                var layoutView = layoutController.view;\r\n                ShadowDOM.distributeView(viewPortController.view, layoutController.slots || layoutView.slots);\r\n                layoutController.automate(createOverrideContext(layoutInstruction.viewModel), _this.owningView);\r\n                layoutView.children.push(viewPortController.view);\r\n                return layoutView || layoutController;\r\n            })\r\n                .then(function (newView) {\r\n                _this.view = newView;\r\n                return ready(newView);\r\n            });\r\n        }\r\n        this.view = viewPortController.view;\r\n        return ready(this.owningView);\r\n    };\r\n    RouterView.prototype._notify = function () {\r\n        var notifier = this.compositionTransactionNotifier;\r\n        if (notifier) {\r\n            notifier.done();\r\n            this.compositionTransactionNotifier = null;\r\n        }\r\n    };\r\n    RouterView.$view = null;\r\n    RouterView.$resource = {\r\n        name: 'router-view',\r\n        bindables: ['swapOrder', 'layoutView', 'layoutViewModel', 'layoutModel', 'inherit-binding-context']\r\n    };\r\n    return RouterView;\r\n}());\r\nvar RouterViewLocator = (function () {\r\n    function RouterViewLocator() {\r\n        var _this = this;\r\n        this.promise = new Promise(function (resolve) { return _this.resolve = resolve; });\r\n    }\r\n    RouterViewLocator.prototype.findNearest = function () {\r\n        return this.promise;\r\n    };\r\n    RouterViewLocator.prototype._notify = function (routerView) {\r\n        this.resolve(routerView);\r\n    };\r\n    return RouterViewLocator;\r\n}());\n\nvar EmptyClass = (function () {\r\n    function EmptyClass() {\r\n    }\r\n    return EmptyClass;\r\n}());\r\ninlineView('<template></template>')(EmptyClass);\r\nvar TemplatingRouteLoader = (function (_super) {\r\n    __extends(TemplatingRouteLoader, _super);\r\n    function TemplatingRouteLoader(compositionEngine) {\r\n        var _this = _super.call(this) || this;\r\n        _this.compositionEngine = compositionEngine;\r\n        return _this;\r\n    }\r\n    TemplatingRouteLoader.prototype.resolveViewModel = function (router, config) {\r\n        return new Promise(function (resolve, reject) {\r\n            var viewModel;\r\n            if ('moduleId' in config) {\r\n                var moduleId = config.moduleId;\r\n                if (moduleId === null) {\r\n                    viewModel = EmptyClass;\r\n                }\r\n                else {\r\n                    moduleId = relativeToFile(moduleId, Origin.get(router.container.viewModel.constructor).moduleId);\r\n                    if (/\\.html/i.test(moduleId)) {\r\n                        viewModel = createDynamicClass(moduleId);\r\n                    }\r\n                    else {\r\n                        viewModel = moduleId;\r\n                    }\r\n                }\r\n                return resolve(viewModel);\r\n            }\r\n            reject(new Error('Invalid route config. No \"moduleId\" found.'));\r\n        });\r\n    };\r\n    TemplatingRouteLoader.prototype.createChildContainer = function (router) {\r\n        var childContainer = router.container.createChild();\r\n        childContainer.registerSingleton(RouterViewLocator);\r\n        childContainer.getChildRouter = function () {\r\n            var childRouter;\r\n            childContainer.registerHandler(Router, function () { return childRouter || (childRouter = router.createChild(childContainer)); });\r\n            return childContainer.get(Router);\r\n        };\r\n        return childContainer;\r\n    };\r\n    TemplatingRouteLoader.prototype.loadRoute = function (router, config, navInstruction) {\r\n        var _this = this;\r\n        return this\r\n            .resolveViewModel(router, config)\r\n            .then(function (viewModel) { return _this.compositionEngine.ensureViewModel({\r\n            viewModel: viewModel,\r\n            childContainer: _this.createChildContainer(router),\r\n            view: config.view || config.viewStrategy,\r\n            router: router\r\n        }); });\r\n    };\r\n    TemplatingRouteLoader.inject = [CompositionEngine];\r\n    return TemplatingRouteLoader;\r\n}(RouteLoader));\r\nfunction createDynamicClass(moduleId) {\r\n    var name = /([^\\/^\\?]+)\\.html/i.exec(moduleId)[1];\r\n    var DynamicClass = (function () {\r\n        function DynamicClass() {\r\n        }\r\n        DynamicClass.prototype.bind = function (bindingContext) {\r\n            this.$parent = bindingContext;\r\n        };\r\n        return DynamicClass;\r\n    }());\r\n    customElement(name)(DynamicClass);\r\n    useView(moduleId)(DynamicClass);\r\n    return DynamicClass;\r\n}\n\nvar logger = LogManager.getLogger('route-href');\r\nvar RouteHref = (function () {\r\n    function RouteHref(router, element) {\r\n        this.router = router;\r\n        this.element = element;\r\n        this.attribute = 'href';\r\n    }\r\n    RouteHref.inject = function () {\r\n        return [Router, DOM.Element];\r\n    };\r\n    RouteHref.prototype.bind = function () {\r\n        this.isActive = true;\r\n        this.processChange();\r\n    };\r\n    RouteHref.prototype.unbind = function () {\r\n        this.isActive = false;\r\n    };\r\n    RouteHref.prototype.attributeChanged = function (value, previous) {\r\n        if (previous) {\r\n            this.element.removeAttribute(previous);\r\n        }\r\n        return this.processChange();\r\n    };\r\n    RouteHref.prototype.processChange = function () {\r\n        var _this = this;\r\n        return this.router\r\n            .ensureConfigured()\r\n            .then(function () {\r\n            if (!_this.isActive) {\r\n                return null;\r\n            }\r\n            var element = _this.element;\r\n            var href = _this.router.generate(_this.route, _this.params);\r\n            if (element.au.controller) {\r\n                element.au.controller.viewModel[_this.attribute] = href;\r\n            }\r\n            else {\r\n                element.setAttribute(_this.attribute, href);\r\n            }\r\n            return null;\r\n        })\r\n            .catch(function (reason) {\r\n            logger.error(reason);\r\n        });\r\n    };\r\n    RouteHref.$resource = {\r\n        type: 'attribute',\r\n        name: 'route-href',\r\n        bindables: [\r\n            { name: 'route', changeHandler: 'processChange', primaryProperty: true },\r\n            { name: 'params', changeHandler: 'processChange' },\r\n            'attribute'\r\n        ]\r\n    };\r\n    return RouteHref;\r\n}());\n\nfunction configure(config) {\r\n    config\r\n        .singleton(RouteLoader, TemplatingRouteLoader)\r\n        .singleton(Router, AppRouter)\r\n        .globalResources(RouterView, RouteHref);\r\n    config.container.registerAlias(Router, AppRouter);\r\n}\n\nexport { RouteHref, RouterView, RouterViewLocator, TemplatingRouteLoader, configure };\n//# sourceMappingURL=aurelia-templating-router.js.map\n","import { DOM, FEATURE, PLATFORM } from 'aurelia-pal';\nimport { TemplateRegistryEntry, Loader } from 'aurelia-loader';\nimport { metadata, Origin, protocol } from 'aurelia-metadata';\nimport { relativeToFile } from 'aurelia-path';\nimport * as LogManager from 'aurelia-logging';\nimport { subscriberCollection, bindingMode, createOverrideContext, ValueConverterResource, BindingBehaviorResource, ObserverLocator, camelCase, EventManager } from 'aurelia-binding';\nimport { Container, resolver, inject } from 'aurelia-dependency-injection';\nimport { TaskQueue } from 'aurelia-task-queue';\n\nvar ElementEvents = (function () {\r\n    function ElementEvents(element) {\r\n        this.element = element;\r\n        this.subscriptions = {};\r\n    }\r\n    ElementEvents.prototype._enqueueHandler = function (handler) {\r\n        this.subscriptions[handler.eventName] = this.subscriptions[handler.eventName] || [];\r\n        this.subscriptions[handler.eventName].push(handler);\r\n    };\r\n    ElementEvents.prototype._dequeueHandler = function (handler) {\r\n        var index;\r\n        var subscriptions = this.subscriptions[handler.eventName];\r\n        if (subscriptions) {\r\n            index = subscriptions.indexOf(handler);\r\n            if (index > -1) {\r\n                subscriptions.splice(index, 1);\r\n            }\r\n        }\r\n        return handler;\r\n    };\r\n    ElementEvents.prototype.publish = function (eventName, detail, bubbles, cancelable) {\r\n        if (detail === void 0) { detail = {}; }\r\n        if (bubbles === void 0) { bubbles = true; }\r\n        if (cancelable === void 0) { cancelable = true; }\r\n        var event = DOM.createCustomEvent(eventName, { cancelable: cancelable, bubbles: bubbles, detail: detail });\r\n        this.element.dispatchEvent(event);\r\n    };\r\n    ElementEvents.prototype.subscribe = function (eventName, handler, captureOrOptions) {\r\n        if (typeof handler === 'function') {\r\n            if (captureOrOptions === undefined) {\r\n                captureOrOptions = ElementEvents.defaultListenerOptions;\r\n            }\r\n            var eventHandler = new EventHandlerImpl(this, eventName, handler, captureOrOptions, false);\r\n            return eventHandler;\r\n        }\r\n        return undefined;\r\n    };\r\n    ElementEvents.prototype.subscribeOnce = function (eventName, handler, captureOrOptions) {\r\n        if (typeof handler === 'function') {\r\n            if (captureOrOptions === undefined) {\r\n                captureOrOptions = ElementEvents.defaultListenerOptions;\r\n            }\r\n            var eventHandler = new EventHandlerImpl(this, eventName, handler, captureOrOptions, true);\r\n            return eventHandler;\r\n        }\r\n        return undefined;\r\n    };\r\n    ElementEvents.prototype.dispose = function (eventName) {\r\n        if (eventName && typeof eventName === 'string') {\r\n            var subscriptions = this.subscriptions[eventName];\r\n            if (subscriptions) {\r\n                while (subscriptions.length) {\r\n                    var subscription = subscriptions.pop();\r\n                    if (subscription) {\r\n                        subscription.dispose();\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        else {\r\n            this.disposeAll();\r\n        }\r\n    };\r\n    ElementEvents.prototype.disposeAll = function () {\r\n        for (var key in this.subscriptions) {\r\n            this.dispose(key);\r\n        }\r\n    };\r\n    ElementEvents.defaultListenerOptions = true;\r\n    return ElementEvents;\r\n}());\r\nvar EventHandlerImpl = (function () {\r\n    function EventHandlerImpl(owner, eventName, handler, captureOrOptions, once) {\r\n        this.owner = owner;\r\n        this.eventName = eventName;\r\n        this.handler = handler;\r\n        this.capture = typeof captureOrOptions === 'boolean' ? captureOrOptions : captureOrOptions.capture;\r\n        this.bubbles = !this.capture;\r\n        this.captureOrOptions = captureOrOptions;\r\n        this.once = once;\r\n        owner.element.addEventListener(eventName, this, captureOrOptions);\r\n        owner._enqueueHandler(this);\r\n    }\r\n    EventHandlerImpl.prototype.handleEvent = function (e) {\r\n        var fn = this.handler;\r\n        fn(e);\r\n        if (this.once) {\r\n            this.dispose();\r\n        }\r\n    };\r\n    EventHandlerImpl.prototype.dispose = function () {\r\n        this.owner.element.removeEventListener(this.eventName, this, this.captureOrOptions);\r\n        this.owner._dequeueHandler(this);\r\n        this.owner = this.handler = null;\r\n    };\r\n    return EventHandlerImpl;\r\n}());\n\nvar ResourceLoadContext = (function () {\r\n    function ResourceLoadContext() {\r\n        this.dependencies = {};\r\n    }\r\n    ResourceLoadContext.prototype.addDependency = function (url) {\r\n        this.dependencies[url] = true;\r\n    };\r\n    ResourceLoadContext.prototype.hasDependency = function (url) {\r\n        return url in this.dependencies;\r\n    };\r\n    return ResourceLoadContext;\r\n}());\r\nvar ViewCompileInstruction = (function () {\r\n    function ViewCompileInstruction(targetShadowDOM, compileSurrogate) {\r\n        if (targetShadowDOM === void 0) { targetShadowDOM = false; }\r\n        if (compileSurrogate === void 0) { compileSurrogate = false; }\r\n        this.targetShadowDOM = targetShadowDOM;\r\n        this.compileSurrogate = compileSurrogate;\r\n        this.associatedModuleId = null;\r\n    }\r\n    ViewCompileInstruction.normal = new ViewCompileInstruction();\r\n    return ViewCompileInstruction;\r\n}());\r\nvar BehaviorInstruction = (function () {\r\n    function BehaviorInstruction() {\r\n    }\r\n    BehaviorInstruction.enhance = function () {\r\n        var instruction = new BehaviorInstruction();\r\n        instruction.enhance = true;\r\n        return instruction;\r\n    };\r\n    BehaviorInstruction.unitTest = function (type, attributes) {\r\n        var instruction = new BehaviorInstruction();\r\n        instruction.type = type;\r\n        instruction.attributes = attributes || {};\r\n        return instruction;\r\n    };\r\n    BehaviorInstruction.element = function (node, type) {\r\n        var instruction = new BehaviorInstruction();\r\n        instruction.type = type;\r\n        instruction.attributes = {};\r\n        instruction.anchorIsContainer = !(node.hasAttribute('containerless') || type.containerless);\r\n        instruction.initiatedByBehavior = true;\r\n        return instruction;\r\n    };\r\n    BehaviorInstruction.attribute = function (attrName, type) {\r\n        var instruction = new BehaviorInstruction();\r\n        instruction.attrName = attrName;\r\n        instruction.type = type || null;\r\n        instruction.attributes = {};\r\n        return instruction;\r\n    };\r\n    BehaviorInstruction.dynamic = function (host, viewModel, viewFactory) {\r\n        var instruction = new BehaviorInstruction();\r\n        instruction.host = host;\r\n        instruction.viewModel = viewModel;\r\n        instruction.viewFactory = viewFactory;\r\n        instruction.inheritBindingContext = true;\r\n        return instruction;\r\n    };\r\n    BehaviorInstruction.normal = new BehaviorInstruction();\r\n    return BehaviorInstruction;\r\n}());\r\nvar biProto = BehaviorInstruction.prototype;\r\nbiProto.initiatedByBehavior = false;\r\nbiProto.enhance = false;\r\nbiProto.partReplacements = null;\r\nbiProto.viewFactory = null;\r\nbiProto.originalAttrName = null;\r\nbiProto.skipContentProcessing = false;\r\nbiProto.contentFactory = null;\r\nbiProto.viewModel = null;\r\nbiProto.anchorIsContainer = false;\r\nbiProto.host = null;\r\nbiProto.attributes = null;\r\nbiProto.type = null;\r\nbiProto.attrName = null;\r\nbiProto.inheritBindingContext = false;\r\nvar TargetInstruction = (function () {\r\n    function TargetInstruction() {\r\n    }\r\n    TargetInstruction.shadowSlot = function (parentInjectorId) {\r\n        var instruction = new TargetInstruction();\r\n        instruction.parentInjectorId = parentInjectorId;\r\n        instruction.shadowSlot = true;\r\n        return instruction;\r\n    };\r\n    TargetInstruction.contentExpression = function (expression) {\r\n        var instruction = new TargetInstruction();\r\n        instruction.contentExpression = expression;\r\n        return instruction;\r\n    };\r\n    TargetInstruction.letElement = function (expressions) {\r\n        var instruction = new TargetInstruction();\r\n        instruction.expressions = expressions;\r\n        instruction.letElement = true;\r\n        return instruction;\r\n    };\r\n    TargetInstruction.lifting = function (parentInjectorId, liftingInstruction) {\r\n        var instruction = new TargetInstruction();\r\n        instruction.parentInjectorId = parentInjectorId;\r\n        instruction.expressions = TargetInstruction.noExpressions;\r\n        instruction.behaviorInstructions = [liftingInstruction];\r\n        instruction.viewFactory = liftingInstruction.viewFactory;\r\n        instruction.providers = [liftingInstruction.type.target];\r\n        instruction.lifting = true;\r\n        return instruction;\r\n    };\r\n    TargetInstruction.normal = function (injectorId, parentInjectorId, providers, behaviorInstructions, expressions, elementInstruction) {\r\n        var instruction = new TargetInstruction();\r\n        instruction.injectorId = injectorId;\r\n        instruction.parentInjectorId = parentInjectorId;\r\n        instruction.providers = providers;\r\n        instruction.behaviorInstructions = behaviorInstructions;\r\n        instruction.expressions = expressions;\r\n        instruction.anchorIsContainer = elementInstruction ? elementInstruction.anchorIsContainer : true;\r\n        instruction.elementInstruction = elementInstruction;\r\n        return instruction;\r\n    };\r\n    TargetInstruction.surrogate = function (providers, behaviorInstructions, expressions, values) {\r\n        var instruction = new TargetInstruction();\r\n        instruction.expressions = expressions;\r\n        instruction.behaviorInstructions = behaviorInstructions;\r\n        instruction.providers = providers;\r\n        instruction.values = values;\r\n        return instruction;\r\n    };\r\n    TargetInstruction.noExpressions = Object.freeze([]);\r\n    return TargetInstruction;\r\n}());\r\nvar tiProto = TargetInstruction.prototype;\r\ntiProto.injectorId = null;\r\ntiProto.parentInjectorId = null;\r\ntiProto.shadowSlot = false;\r\ntiProto.slotName = null;\r\ntiProto.slotFallbackFactory = null;\r\ntiProto.contentExpression = null;\r\ntiProto.letElement = false;\r\ntiProto.expressions = null;\r\ntiProto.expressions = null;\r\ntiProto.providers = null;\r\ntiProto.viewFactory = null;\r\ntiProto.anchorIsContainer = false;\r\ntiProto.elementInstruction = null;\r\ntiProto.lifting = false;\r\ntiProto.values = null;\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n\r\nfunction __decorate(decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\n\nvar capitalMatcher = /([A-Z])/g;\r\nfunction addHyphenAndLower(char) {\r\n    return '-' + char.toLowerCase();\r\n}\r\nfunction _hyphenate(name) {\r\n    return (name.charAt(0).toLowerCase() + name.slice(1)).replace(capitalMatcher, addHyphenAndLower);\r\n}\r\nfunction _isAllWhitespace(node) {\r\n    return !(node.auInterpolationTarget || (/[^\\t\\n\\r ]/.test(node.textContent)));\r\n}\n\nvar BehaviorPropertyObserver = (function () {\r\n    function BehaviorPropertyObserver(taskQueue, obj, propertyName, selfSubscriber, initialValue) {\r\n        this.taskQueue = taskQueue;\r\n        this.obj = obj;\r\n        this.propertyName = propertyName;\r\n        this.notqueued = true;\r\n        this.publishing = false;\r\n        this.selfSubscriber = selfSubscriber;\r\n        this.currentValue = this.oldValue = initialValue;\r\n    }\r\n    BehaviorPropertyObserver.prototype.getValue = function () {\r\n        return this.currentValue;\r\n    };\r\n    BehaviorPropertyObserver.prototype.setValue = function (newValue) {\r\n        var oldValue = this.currentValue;\r\n        if (!Object.is(newValue, oldValue)) {\r\n            this.oldValue = oldValue;\r\n            this.currentValue = newValue;\r\n            if (this.publishing && this.notqueued) {\r\n                if (this.taskQueue.flushing) {\r\n                    this.call();\r\n                }\r\n                else {\r\n                    this.notqueued = false;\r\n                    this.taskQueue.queueMicroTask(this);\r\n                }\r\n            }\r\n        }\r\n    };\r\n    BehaviorPropertyObserver.prototype.call = function () {\r\n        var oldValue = this.oldValue;\r\n        var newValue = this.currentValue;\r\n        this.notqueued = true;\r\n        if (Object.is(newValue, oldValue)) {\r\n            return;\r\n        }\r\n        if (this.selfSubscriber) {\r\n            this.selfSubscriber(newValue, oldValue);\r\n        }\r\n        this.callSubscribers(newValue, oldValue);\r\n        this.oldValue = newValue;\r\n    };\r\n    BehaviorPropertyObserver.prototype.callSubscribers = function (newValue, oldValue) {\r\n        throw new Error('Method not implemented.');\r\n    };\r\n    BehaviorPropertyObserver.prototype.subscribe = function (context, callable) {\r\n        this.addSubscriber(context, callable);\r\n    };\r\n    BehaviorPropertyObserver.prototype.addSubscriber = function (context, callable) {\r\n        throw new Error('Method not implemented.');\r\n    };\r\n    BehaviorPropertyObserver.prototype.unsubscribe = function (context, callable) {\r\n        this.removeSubscriber(context, callable);\r\n    };\r\n    BehaviorPropertyObserver.prototype.removeSubscriber = function (context, callable) {\r\n        throw new Error('Method not implemented.');\r\n    };\r\n    BehaviorPropertyObserver = __decorate([\r\n        subscriberCollection()\r\n    ], BehaviorPropertyObserver);\r\n    return BehaviorPropertyObserver;\r\n}());\n\nfunction getObserver(instance, name) {\r\n    var lookup = instance.__observers__;\r\n    if (lookup === undefined) {\r\n        var ctor = Object.getPrototypeOf(instance).constructor;\r\n        var behavior = metadata.get(metadata.resource, ctor);\r\n        if (!behavior.isInitialized) {\r\n            behavior.initialize(Container.instance || new Container(), instance.constructor);\r\n        }\r\n        lookup = behavior.observerLocator.getOrCreateObserversLookup(instance);\r\n        behavior._ensurePropertiesDefined(instance, lookup);\r\n    }\r\n    return lookup[name];\r\n}\r\nvar BindableProperty = (function () {\r\n    function BindableProperty(nameOrConfig) {\r\n        if (typeof nameOrConfig === 'string') {\r\n            this.name = nameOrConfig;\r\n        }\r\n        else {\r\n            Object.assign(this, nameOrConfig);\r\n        }\r\n        this.attribute = this.attribute || _hyphenate(this.name);\r\n        var defaultBindingMode = this.defaultBindingMode;\r\n        if (defaultBindingMode === null || defaultBindingMode === undefined) {\r\n            this.defaultBindingMode = bindingMode.oneWay;\r\n        }\r\n        else if (typeof defaultBindingMode === 'string') {\r\n            this.defaultBindingMode = bindingMode[defaultBindingMode] || bindingMode.oneWay;\r\n        }\r\n        this.changeHandler = this.changeHandler || null;\r\n        this.owner = null;\r\n        this.descriptor = null;\r\n    }\r\n    BindableProperty.prototype.registerWith = function (target, behavior, descriptor) {\r\n        behavior.properties.push(this);\r\n        behavior.attributes[this.attribute] = this;\r\n        this.owner = behavior;\r\n        if (descriptor) {\r\n            this.descriptor = descriptor;\r\n            return this._configureDescriptor(descriptor);\r\n        }\r\n        return undefined;\r\n    };\r\n    BindableProperty.prototype._configureDescriptor = function (descriptor) {\r\n        var name = this.name;\r\n        descriptor.configurable = true;\r\n        descriptor.enumerable = true;\r\n        if ('initializer' in descriptor) {\r\n            this.defaultValue = descriptor.initializer;\r\n            delete descriptor.initializer;\r\n            delete descriptor.writable;\r\n        }\r\n        if ('value' in descriptor) {\r\n            this.defaultValue = descriptor.value;\r\n            delete descriptor.value;\r\n            delete descriptor.writable;\r\n        }\r\n        descriptor.get = function () {\r\n            return getObserver(this, name).getValue();\r\n        };\r\n        descriptor.set = function (value) {\r\n            getObserver(this, name).setValue(value);\r\n        };\r\n        descriptor.get.getObserver = function (obj) {\r\n            return getObserver(obj, name);\r\n        };\r\n        return descriptor;\r\n    };\r\n    BindableProperty.prototype.defineOn = function (target, behavior) {\r\n        var name = this.name;\r\n        var handlerName;\r\n        if (this.changeHandler === null) {\r\n            handlerName = name + 'Changed';\r\n            if (handlerName in target.prototype) {\r\n                this.changeHandler = handlerName;\r\n            }\r\n        }\r\n        if (this.descriptor === null) {\r\n            Object.defineProperty(target.prototype, name, this._configureDescriptor({}));\r\n        }\r\n    };\r\n    BindableProperty.prototype.createObserver = function (viewModel) {\r\n        var selfSubscriber = null;\r\n        var defaultValue = this.defaultValue;\r\n        var changeHandlerName = this.changeHandler;\r\n        var name = this.name;\r\n        var initialValue;\r\n        if (this.hasOptions) {\r\n            return undefined;\r\n        }\r\n        if (changeHandlerName in viewModel) {\r\n            if ('propertyChanged' in viewModel) {\r\n                selfSubscriber = function (newValue, oldValue) {\r\n                    viewModel[changeHandlerName](newValue, oldValue);\r\n                    viewModel.propertyChanged(name, newValue, oldValue);\r\n                };\r\n            }\r\n            else {\r\n                selfSubscriber = function (newValue, oldValue) { return viewModel[changeHandlerName](newValue, oldValue); };\r\n            }\r\n        }\r\n        else if ('propertyChanged' in viewModel) {\r\n            selfSubscriber = function (newValue, oldValue) { return viewModel.propertyChanged(name, newValue, oldValue); };\r\n        }\r\n        else if (changeHandlerName !== null) {\r\n            throw new Error(\"Change handler \".concat(changeHandlerName, \" was specified but not declared on the class.\"));\r\n        }\r\n        if (defaultValue !== undefined) {\r\n            initialValue = typeof defaultValue === 'function' ? defaultValue.call(viewModel) : defaultValue;\r\n        }\r\n        return new BehaviorPropertyObserver(this.owner.taskQueue, viewModel, this.name, selfSubscriber, initialValue);\r\n    };\r\n    BindableProperty.prototype._initialize = function (viewModel, observerLookup, attributes, behaviorHandlesBind, boundProperties) {\r\n        var selfSubscriber;\r\n        var observer;\r\n        var attribute;\r\n        var defaultValue = this.defaultValue;\r\n        if (this.isDynamic) {\r\n            for (var key in attributes) {\r\n                this._createDynamicProperty(viewModel, observerLookup, behaviorHandlesBind, key, attributes[key], boundProperties);\r\n            }\r\n        }\r\n        else if (!this.hasOptions) {\r\n            observer = observerLookup[this.name];\r\n            if (attributes !== null) {\r\n                selfSubscriber = observer.selfSubscriber;\r\n                attribute = attributes[this.attribute];\r\n                if (behaviorHandlesBind) {\r\n                    observer.selfSubscriber = null;\r\n                }\r\n                if (typeof attribute === 'string') {\r\n                    viewModel[this.name] = attribute;\r\n                    observer.call();\r\n                }\r\n                else if (attribute) {\r\n                    boundProperties.push({ observer: observer, binding: attribute.createBinding(viewModel) });\r\n                }\r\n                else if (defaultValue !== undefined) {\r\n                    observer.call();\r\n                }\r\n                observer.selfSubscriber = selfSubscriber;\r\n            }\r\n            observer.publishing = true;\r\n        }\r\n    };\r\n    BindableProperty.prototype._createDynamicProperty = function (viewModel, observerLookup, behaviorHandlesBind, name, attribute, boundProperties) {\r\n        var changeHandlerName = name + 'Changed';\r\n        var selfSubscriber = null;\r\n        var observer;\r\n        var info;\r\n        if (changeHandlerName in viewModel) {\r\n            if ('propertyChanged' in viewModel) {\r\n                selfSubscriber = function (newValue, oldValue) {\r\n                    viewModel[changeHandlerName](newValue, oldValue);\r\n                    viewModel.propertyChanged(name, newValue, oldValue);\r\n                };\r\n            }\r\n            else {\r\n                selfSubscriber = function (newValue, oldValue) { return viewModel[changeHandlerName](newValue, oldValue); };\r\n            }\r\n        }\r\n        else if ('propertyChanged' in viewModel) {\r\n            selfSubscriber = function (newValue, oldValue) { return viewModel.propertyChanged(name, newValue, oldValue); };\r\n        }\r\n        observer = observerLookup[name] = new BehaviorPropertyObserver(this.owner.taskQueue, viewModel, name, selfSubscriber);\r\n        Object.defineProperty(viewModel, name, {\r\n            configurable: true,\r\n            enumerable: true,\r\n            get: observer.getValue.bind(observer),\r\n            set: observer.setValue.bind(observer)\r\n        });\r\n        if (behaviorHandlesBind) {\r\n            observer.selfSubscriber = null;\r\n        }\r\n        if (typeof attribute === 'string') {\r\n            viewModel[name] = attribute;\r\n            observer.call();\r\n        }\r\n        else if (attribute) {\r\n            info = { observer: observer, binding: attribute.createBinding(viewModel) };\r\n            boundProperties.push(info);\r\n        }\r\n        observer.publishing = true;\r\n        observer.selfSubscriber = selfSubscriber;\r\n    };\r\n    return BindableProperty;\r\n}());\n\nvar ViewLocator = (function () {\r\n    function ViewLocator() {\r\n    }\r\n    ViewLocator.prototype.getViewStrategy = function (value) {\r\n        if (!value) {\r\n            return null;\r\n        }\r\n        if (typeof value === 'object' && 'getViewStrategy' in value) {\r\n            var origin_1 = Origin.get(value.constructor);\r\n            value = value.getViewStrategy();\r\n            if (typeof value === 'string') {\r\n                value = new RelativeViewStrategy(value);\r\n            }\r\n            viewStrategy.assert(value);\r\n            if (origin_1.moduleId) {\r\n                value.makeRelativeTo(origin_1.moduleId);\r\n            }\r\n            return value;\r\n        }\r\n        if (typeof value === 'string') {\r\n            value = new RelativeViewStrategy(value);\r\n        }\r\n        if (viewStrategy.validate(value)) {\r\n            return value;\r\n        }\r\n        if (typeof value !== 'function') {\r\n            value = value.constructor;\r\n        }\r\n        if ('$view' in value) {\r\n            var c = value.$view;\r\n            var view = void 0;\r\n            c = typeof c === 'function' ? c.call(value) : c;\r\n            if (c === null) {\r\n                view = new NoViewStrategy();\r\n            }\r\n            else {\r\n                view = c instanceof StaticViewStrategy ? c : new StaticViewStrategy(c);\r\n            }\r\n            metadata.define(ViewLocator.viewStrategyMetadataKey, view, value);\r\n            return view;\r\n        }\r\n        var origin = Origin.get(value);\r\n        var strategy = metadata.get(ViewLocator.viewStrategyMetadataKey, value);\r\n        if (!strategy) {\r\n            if (!origin.moduleId) {\r\n                throw new Error('Cannot determine default view strategy for object.\\n' + value);\r\n            }\r\n            strategy = this.createFallbackViewStrategy(origin);\r\n        }\r\n        else if (origin.moduleId) {\r\n            strategy.moduleId = origin.moduleId;\r\n        }\r\n        return strategy;\r\n    };\r\n    ViewLocator.prototype.createFallbackViewStrategy = function (origin) {\r\n        return new ConventionalViewStrategy(this, origin);\r\n    };\r\n    ViewLocator.prototype.convertOriginToViewUrl = function (origin) {\r\n        var moduleId = origin.moduleId;\r\n        var id = (moduleId.endsWith('.js') || moduleId.endsWith('.ts')) ? moduleId.substring(0, moduleId.length - 3) : moduleId;\r\n        return id + '.html';\r\n    };\r\n    ViewLocator.viewStrategyMetadataKey = 'aurelia:view-strategy';\r\n    return ViewLocator;\r\n}());\n\nfunction mi(name) {\r\n    throw new Error(\"BindingLanguage must implement \".concat(name, \"().\"));\r\n}\r\nvar BindingLanguage = (function () {\r\n    function BindingLanguage() {\r\n    }\r\n    BindingLanguage.prototype.inspectAttribute = function (resources, elementName, attrName, attrValue) {\r\n        mi('inspectAttribute');\r\n    };\r\n    BindingLanguage.prototype.createAttributeInstruction = function (resources, element, info, existingInstruction, context) {\r\n        mi('createAttributeInstruction');\r\n    };\r\n    BindingLanguage.prototype.createLetExpressions = function (resources, element) {\r\n        mi('createLetExpressions');\r\n    };\r\n    BindingLanguage.prototype.inspectTextContent = function (resources, value) {\r\n        mi('inspectTextContent');\r\n    };\r\n    return BindingLanguage;\r\n}());\n\nvar noNodes = Object.freeze([]);\r\nvar SlotCustomAttribute = (function () {\r\n    function SlotCustomAttribute(element) {\r\n        this.element = element;\r\n        this.element.auSlotAttribute = this;\r\n    }\r\n    SlotCustomAttribute.inject = function () {\r\n        return [DOM.Element];\r\n    };\r\n    SlotCustomAttribute.prototype.valueChanged = function (newValue, oldValue) { };\r\n    return SlotCustomAttribute;\r\n}());\r\nvar PassThroughSlot = (function () {\r\n    function PassThroughSlot(anchor, name, destinationName, fallbackFactory) {\r\n        this.anchor = anchor;\r\n        this.anchor.viewSlot = this;\r\n        this.name = name;\r\n        this.destinationName = destinationName;\r\n        this.fallbackFactory = fallbackFactory;\r\n        this.destinationSlot = null;\r\n        this.projections = 0;\r\n        this.contentView = null;\r\n        var attr = new SlotCustomAttribute(this.anchor);\r\n        attr.value = this.destinationName;\r\n    }\r\n    Object.defineProperty(PassThroughSlot.prototype, \"needsFallbackRendering\", {\r\n        get: function () {\r\n            return this.fallbackFactory && this.projections === 0;\r\n        },\r\n        enumerable: false,\r\n        configurable: true\r\n    });\r\n    PassThroughSlot.prototype.renderFallbackContent = function (view, nodes, projectionSource, index) {\r\n        if (this.contentView === null) {\r\n            this.contentView = this.fallbackFactory.create(this.ownerView.container);\r\n            this.contentView.bind(this.ownerView.bindingContext, this.ownerView.overrideContext);\r\n            var slots = Object.create(null);\r\n            slots[this.destinationSlot.name] = this.destinationSlot;\r\n            ShadowDOM.distributeView(this.contentView, slots, projectionSource, index, this.destinationSlot.name);\r\n        }\r\n    };\r\n    PassThroughSlot.prototype.passThroughTo = function (destinationSlot) {\r\n        this.destinationSlot = destinationSlot;\r\n    };\r\n    PassThroughSlot.prototype.addNode = function (view, node, projectionSource, index) {\r\n        if (this.contentView !== null) {\r\n            this.contentView.removeNodes();\r\n            this.contentView.detached();\r\n            this.contentView.unbind();\r\n            this.contentView = null;\r\n        }\r\n        if (node.viewSlot instanceof PassThroughSlot) {\r\n            node.viewSlot.passThroughTo(this);\r\n            return;\r\n        }\r\n        this.projections++;\r\n        this.destinationSlot.addNode(view, node, projectionSource, index);\r\n    };\r\n    PassThroughSlot.prototype.removeView = function (view, projectionSource) {\r\n        this.projections--;\r\n        this.destinationSlot.removeView(view, projectionSource);\r\n        if (this.needsFallbackRendering) {\r\n            this.renderFallbackContent(null, noNodes, projectionSource);\r\n        }\r\n    };\r\n    PassThroughSlot.prototype.removeAll = function (projectionSource) {\r\n        this.projections = 0;\r\n        this.destinationSlot.removeAll(projectionSource);\r\n        if (this.needsFallbackRendering) {\r\n            this.renderFallbackContent(null, noNodes, projectionSource);\r\n        }\r\n    };\r\n    PassThroughSlot.prototype.projectFrom = function (view, projectionSource) {\r\n        this.destinationSlot.projectFrom(view, projectionSource);\r\n    };\r\n    PassThroughSlot.prototype.created = function (ownerView) {\r\n        this.ownerView = ownerView;\r\n    };\r\n    PassThroughSlot.prototype.bind = function (view) {\r\n        if (this.contentView) {\r\n            this.contentView.bind(view.bindingContext, view.overrideContext);\r\n        }\r\n    };\r\n    PassThroughSlot.prototype.attached = function () {\r\n        if (this.contentView) {\r\n            this.contentView.attached();\r\n        }\r\n    };\r\n    PassThroughSlot.prototype.detached = function () {\r\n        if (this.contentView) {\r\n            this.contentView.detached();\r\n        }\r\n    };\r\n    PassThroughSlot.prototype.unbind = function () {\r\n        if (this.contentView) {\r\n            this.contentView.unbind();\r\n        }\r\n    };\r\n    return PassThroughSlot;\r\n}());\r\nvar ShadowSlot = (function () {\r\n    function ShadowSlot(anchor, name, fallbackFactory) {\r\n        this.anchor = anchor;\r\n        this.anchor.isContentProjectionSource = true;\r\n        this.anchor.viewSlot = this;\r\n        this.name = name;\r\n        this.fallbackFactory = fallbackFactory;\r\n        this.contentView = null;\r\n        this.projections = 0;\r\n        this.children = [];\r\n        this.projectFromAnchors = null;\r\n        this.destinationSlots = null;\r\n    }\r\n    Object.defineProperty(ShadowSlot.prototype, \"needsFallbackRendering\", {\r\n        get: function () {\r\n            return this.fallbackFactory && this.projections === 0;\r\n        },\r\n        enumerable: false,\r\n        configurable: true\r\n    });\r\n    ShadowSlot.prototype.addNode = function (view, node, projectionSource, index, destination) {\r\n        var $node = node;\r\n        if (this.contentView !== null) {\r\n            this.contentView.removeNodes();\r\n            this.contentView.detached();\r\n            this.contentView.unbind();\r\n            this.contentView = null;\r\n        }\r\n        if ($node.viewSlot instanceof PassThroughSlot) {\r\n            $node.viewSlot.passThroughTo(this);\r\n            return;\r\n        }\r\n        if (this.destinationSlots !== null) {\r\n            ShadowDOM.distributeNodes(view, [$node], this.destinationSlots, this, index);\r\n        }\r\n        else {\r\n            $node.auOwnerView = view;\r\n            $node.auProjectionSource = projectionSource;\r\n            $node.auAssignedSlot = this;\r\n            var anchor = this._findAnchor(view, $node, projectionSource, index);\r\n            var parent_1 = anchor.parentNode;\r\n            parent_1.insertBefore($node, anchor);\r\n            this.children.push($node);\r\n            this.projections++;\r\n        }\r\n    };\r\n    ShadowSlot.prototype.removeView = function (view, projectionSource) {\r\n        if (this.destinationSlots !== null) {\r\n            ShadowDOM.undistributeView(view, this.destinationSlots, this);\r\n        }\r\n        else if (this.contentView && this.contentView.hasSlots) {\r\n            ShadowDOM.undistributeView(view, this.contentView.slots, projectionSource);\r\n        }\r\n        else {\r\n            var found = this.children.find(function (x) { return x.auSlotProjectFrom === projectionSource; });\r\n            if (found) {\r\n                var children = found.auProjectionChildren;\r\n                var ownChildren = this.children;\r\n                for (var i = 0, ii = children.length; i < ii; ++i) {\r\n                    var child = children[i];\r\n                    if (child.auOwnerView === view) {\r\n                        children.splice(i, 1);\r\n                        view.fragment.appendChild(child);\r\n                        i--;\r\n                        ii--;\r\n                        this.projections--;\r\n                        var idx = ownChildren.indexOf(child);\r\n                        if (idx > -1) {\r\n                            ownChildren.splice(idx, 1);\r\n                        }\r\n                    }\r\n                }\r\n                if (this.needsFallbackRendering) {\r\n                    this.renderFallbackContent(view, noNodes, projectionSource);\r\n                }\r\n            }\r\n        }\r\n    };\r\n    ShadowSlot.prototype.removeAll = function (projectionSource) {\r\n        if (this.destinationSlots !== null) {\r\n            ShadowDOM.undistributeAll(this.destinationSlots, this);\r\n        }\r\n        else if (this.contentView && this.contentView.hasSlots) {\r\n            ShadowDOM.undistributeAll(this.contentView.slots, projectionSource);\r\n        }\r\n        else {\r\n            var found = this.children.find(function (x) { return x.auSlotProjectFrom === projectionSource; });\r\n            if (found) {\r\n                var children = found.auProjectionChildren;\r\n                var ownChildren = this.children;\r\n                for (var i = 0, ii = children.length; i < ii; ++i) {\r\n                    var child = children[i];\r\n                    child.auOwnerView.fragment.appendChild(child);\r\n                    this.projections--;\r\n                    var idx = ownChildren.indexOf(child);\r\n                    if (idx > -1) {\r\n                        ownChildren.splice(idx, 1);\r\n                    }\r\n                }\r\n                found.auProjectionChildren = [];\r\n                if (this.needsFallbackRendering) {\r\n                    this.renderFallbackContent(null, noNodes, projectionSource);\r\n                }\r\n            }\r\n        }\r\n    };\r\n    ShadowSlot.prototype._findAnchor = function (view, node, projectionSource, index) {\r\n        if (projectionSource) {\r\n            var found = this.children.find(function (x) { return x.auSlotProjectFrom === projectionSource; });\r\n            if (found) {\r\n                if (index !== undefined) {\r\n                    var children = found.auProjectionChildren;\r\n                    var viewIndex = -1;\r\n                    var lastView = void 0;\r\n                    for (var i = 0, ii = children.length; i < ii; ++i) {\r\n                        var current = children[i];\r\n                        if (current.auOwnerView !== lastView) {\r\n                            viewIndex++;\r\n                            lastView = current.auOwnerView;\r\n                            if (viewIndex >= index && lastView !== view) {\r\n                                children.splice(i, 0, node);\r\n                                return current;\r\n                            }\r\n                        }\r\n                    }\r\n                }\r\n                found.auProjectionChildren.push(node);\r\n                return found;\r\n            }\r\n        }\r\n        return this.anchor;\r\n    };\r\n    ShadowSlot.prototype.projectTo = function (slots) {\r\n        this.destinationSlots = slots;\r\n    };\r\n    ShadowSlot.prototype.projectFrom = function (view, projectionSource) {\r\n        var anchor = DOM.createComment('anchor');\r\n        var parent = this.anchor.parentNode;\r\n        anchor.auSlotProjectFrom = projectionSource;\r\n        anchor.auOwnerView = view;\r\n        anchor.auProjectionChildren = [];\r\n        parent.insertBefore(anchor, this.anchor);\r\n        this.children.push(anchor);\r\n        if (this.projectFromAnchors === null) {\r\n            this.projectFromAnchors = [];\r\n        }\r\n        this.projectFromAnchors.push(anchor);\r\n    };\r\n    ShadowSlot.prototype.renderFallbackContent = function (view, nodes, projectionSource, index) {\r\n        if (this.contentView === null) {\r\n            this.contentView = this.fallbackFactory.create(this.ownerView.container);\r\n            this.contentView.bind(this.ownerView.bindingContext, this.ownerView.overrideContext);\r\n            this.contentView.insertNodesBefore(this.anchor);\r\n        }\r\n        if (this.contentView.hasSlots) {\r\n            var slots = this.contentView.slots;\r\n            var projectFromAnchors = this.projectFromAnchors;\r\n            if (projectFromAnchors !== null) {\r\n                for (var slotName in slots) {\r\n                    var slot = slots[slotName];\r\n                    for (var i = 0, ii = projectFromAnchors.length; i < ii; ++i) {\r\n                        var anchor = projectFromAnchors[i];\r\n                        slot.projectFrom(anchor.auOwnerView, anchor.auSlotProjectFrom);\r\n                    }\r\n                }\r\n            }\r\n            this.fallbackSlots = slots;\r\n            ShadowDOM.distributeNodes(view, nodes, slots, projectionSource, index);\r\n        }\r\n    };\r\n    ShadowSlot.prototype.created = function (ownerView) {\r\n        this.ownerView = ownerView;\r\n    };\r\n    ShadowSlot.prototype.bind = function (view) {\r\n        if (this.contentView) {\r\n            this.contentView.bind(view.bindingContext, view.overrideContext);\r\n        }\r\n    };\r\n    ShadowSlot.prototype.attached = function () {\r\n        if (this.contentView) {\r\n            this.contentView.attached();\r\n        }\r\n    };\r\n    ShadowSlot.prototype.detached = function () {\r\n        if (this.contentView) {\r\n            this.contentView.detached();\r\n        }\r\n    };\r\n    ShadowSlot.prototype.unbind = function () {\r\n        if (this.contentView) {\r\n            this.contentView.unbind();\r\n        }\r\n    };\r\n    return ShadowSlot;\r\n}());\r\nvar ShadowDOM = (function () {\r\n    function ShadowDOM() {\r\n    }\r\n    ShadowDOM.getSlotName = function (node) {\r\n        if (node.auSlotAttribute === undefined) {\r\n            return ShadowDOM.defaultSlotKey;\r\n        }\r\n        return node.auSlotAttribute.value;\r\n    };\r\n    ShadowDOM.distributeView = function (view, slots, projectionSource, index, destinationOverride) {\r\n        var nodes;\r\n        if (view === null) {\r\n            nodes = noNodes;\r\n        }\r\n        else {\r\n            var childNodes = view.fragment.childNodes;\r\n            var ii = childNodes.length;\r\n            nodes = new Array(ii);\r\n            for (var i = 0; i < ii; ++i) {\r\n                nodes[i] = childNodes[i];\r\n            }\r\n        }\r\n        ShadowDOM.distributeNodes(view, nodes, slots, projectionSource, index, destinationOverride);\r\n    };\r\n    ShadowDOM.undistributeView = function (view, slots, projectionSource) {\r\n        for (var slotName in slots) {\r\n            slots[slotName].removeView(view, projectionSource);\r\n        }\r\n    };\r\n    ShadowDOM.undistributeAll = function (slots, projectionSource) {\r\n        for (var slotName in slots) {\r\n            slots[slotName].removeAll(projectionSource);\r\n        }\r\n    };\r\n    ShadowDOM.distributeNodes = function (view, nodes, slots, projectionSource, index, destinationOverride) {\r\n        for (var i = 0, ii = nodes.length; i < ii; ++i) {\r\n            var currentNode = nodes[i];\r\n            var nodeType = currentNode.nodeType;\r\n            if (currentNode.isContentProjectionSource) {\r\n                currentNode.viewSlot.projectTo(slots);\r\n                for (var slotName in slots) {\r\n                    slots[slotName].projectFrom(view, currentNode.viewSlot);\r\n                }\r\n                nodes.splice(i, 1);\r\n                ii--;\r\n                i--;\r\n            }\r\n            else if (nodeType === 1 || nodeType === 3 || currentNode.viewSlot instanceof PassThroughSlot) {\r\n                if (nodeType === 3 && _isAllWhitespace(currentNode)) {\r\n                    nodes.splice(i, 1);\r\n                    ii--;\r\n                    i--;\r\n                }\r\n                else {\r\n                    var found = slots[destinationOverride || ShadowDOM.getSlotName(currentNode)];\r\n                    if (found) {\r\n                        found.addNode(view, currentNode, projectionSource, index);\r\n                        nodes.splice(i, 1);\r\n                        ii--;\r\n                        i--;\r\n                    }\r\n                }\r\n            }\r\n            else {\r\n                nodes.splice(i, 1);\r\n                ii--;\r\n                i--;\r\n            }\r\n        }\r\n        for (var slotName in slots) {\r\n            var slot = slots[slotName];\r\n            if (slot.needsFallbackRendering) {\r\n                slot.renderFallbackContent(view, nodes, projectionSource, index);\r\n            }\r\n        }\r\n    };\r\n    ShadowDOM.defaultSlotKey = '__au-default-slot-key__';\r\n    return ShadowDOM;\r\n}());\n\nvar CompositionTransactionNotifier = (function () {\r\n    function CompositionTransactionNotifier(owner) {\r\n        this.owner = owner;\r\n        this.owner._compositionCount++;\r\n    }\r\n    CompositionTransactionNotifier.prototype.done = function () {\r\n        this.owner._compositionCount--;\r\n        this.owner._tryCompleteTransaction();\r\n    };\r\n    return CompositionTransactionNotifier;\r\n}());\r\nvar CompositionTransactionOwnershipToken = (function () {\r\n    function CompositionTransactionOwnershipToken(owner) {\r\n        this.owner = owner;\r\n        this.owner._ownershipToken = this;\r\n        this.thenable = this._createThenable();\r\n    }\r\n    CompositionTransactionOwnershipToken.prototype.waitForCompositionComplete = function () {\r\n        this.owner._tryCompleteTransaction();\r\n        return this.thenable;\r\n    };\r\n    CompositionTransactionOwnershipToken.prototype.resolve = function () {\r\n        this._resolveCallback();\r\n    };\r\n    CompositionTransactionOwnershipToken.prototype._resolveCallback = function () {\r\n        throw new Error(\"Method not implemented.\");\r\n    };\r\n    CompositionTransactionOwnershipToken.prototype._createThenable = function () {\r\n        var _this = this;\r\n        return new Promise(function (resolve) {\r\n            _this._resolveCallback = resolve;\r\n        });\r\n    };\r\n    return CompositionTransactionOwnershipToken;\r\n}());\r\nvar CompositionTransaction = (function () {\r\n    function CompositionTransaction() {\r\n        this._ownershipToken = null;\r\n        this._compositionCount = 0;\r\n    }\r\n    CompositionTransaction.prototype.tryCapture = function () {\r\n        return this._ownershipToken === null\r\n            ? new CompositionTransactionOwnershipToken(this)\r\n            : null;\r\n    };\r\n    CompositionTransaction.prototype.enlist = function () {\r\n        return new CompositionTransactionNotifier(this);\r\n    };\r\n    CompositionTransaction.prototype._tryCompleteTransaction = function () {\r\n        if (this._compositionCount <= 0) {\r\n            this._compositionCount = 0;\r\n            if (this._ownershipToken !== null) {\r\n                var token = this._ownershipToken;\r\n                this._ownershipToken = null;\r\n                token.resolve();\r\n            }\r\n        }\r\n    };\r\n    return CompositionTransaction;\r\n}());\n\nvar View = (function () {\r\n    function View(container, viewFactory, fragment, controllers, bindings, children, slots) {\r\n        this.container = container;\r\n        this.viewFactory = viewFactory;\r\n        this.resources = viewFactory.resources;\r\n        this.fragment = fragment;\r\n        this.firstChild = fragment.firstChild;\r\n        this.lastChild = fragment.lastChild;\r\n        this.controllers = controllers;\r\n        this.bindings = bindings;\r\n        this.children = children;\r\n        this.slots = slots;\r\n        this.hasSlots = false;\r\n        this.fromCache = false;\r\n        this.isBound = false;\r\n        this.isAttached = false;\r\n        this.bindingContext = null;\r\n        this.overrideContext = null;\r\n        this.controller = null;\r\n        this.viewModelScope = null;\r\n        this.animatableElement = undefined;\r\n        this._isUserControlled = false;\r\n        this.contentView = null;\r\n        for (var _ in slots) {\r\n            this.hasSlots = true;\r\n            break;\r\n        }\r\n    }\r\n    View.prototype.returnToCache = function () {\r\n        this.viewFactory.returnViewToCache(this);\r\n    };\r\n    View.prototype.created = function () {\r\n        var i;\r\n        var ii;\r\n        var controllers = this.controllers;\r\n        for (i = 0, ii = controllers.length; i < ii; ++i) {\r\n            controllers[i].created(this);\r\n        }\r\n    };\r\n    View.prototype.bind = function (bindingContext, overrideContext, _systemUpdate) {\r\n        var controllers;\r\n        var bindings;\r\n        var children;\r\n        var i;\r\n        var ii;\r\n        if (_systemUpdate && this._isUserControlled) {\r\n            return;\r\n        }\r\n        if (this.isBound) {\r\n            if (this.bindingContext === bindingContext) {\r\n                return;\r\n            }\r\n            this.unbind();\r\n        }\r\n        this.isBound = true;\r\n        this.bindingContext = bindingContext;\r\n        this.overrideContext = overrideContext || createOverrideContext(bindingContext);\r\n        this.resources._invokeHook('beforeBind', this);\r\n        bindings = this.bindings;\r\n        for (i = 0, ii = bindings.length; i < ii; ++i) {\r\n            bindings[i].bind(this);\r\n        }\r\n        if (this.viewModelScope !== null) {\r\n            bindingContext.bind(this.viewModelScope.bindingContext, this.viewModelScope.overrideContext);\r\n            this.viewModelScope = null;\r\n        }\r\n        controllers = this.controllers;\r\n        for (i = 0, ii = controllers.length; i < ii; ++i) {\r\n            controllers[i].bind(this);\r\n        }\r\n        children = this.children;\r\n        for (i = 0, ii = children.length; i < ii; ++i) {\r\n            children[i].bind(bindingContext, overrideContext, true);\r\n        }\r\n        if (this.hasSlots) {\r\n            ShadowDOM.distributeView(this.contentView, this.slots);\r\n        }\r\n    };\r\n    View.prototype.addBinding = function (binding) {\r\n        this.bindings.push(binding);\r\n        if (this.isBound) {\r\n            binding.bind(this);\r\n        }\r\n    };\r\n    View.prototype.unbind = function () {\r\n        var controllers;\r\n        var bindings;\r\n        var children;\r\n        var i;\r\n        var ii;\r\n        if (this.isBound) {\r\n            this.isBound = false;\r\n            this.resources._invokeHook('beforeUnbind', this);\r\n            if (this.controller !== null) {\r\n                this.controller.unbind();\r\n            }\r\n            bindings = this.bindings;\r\n            for (i = 0, ii = bindings.length; i < ii; ++i) {\r\n                bindings[i].unbind();\r\n            }\r\n            controllers = this.controllers;\r\n            for (i = 0, ii = controllers.length; i < ii; ++i) {\r\n                controllers[i].unbind();\r\n            }\r\n            children = this.children;\r\n            for (i = 0, ii = children.length; i < ii; ++i) {\r\n                children[i].unbind();\r\n            }\r\n            this.bindingContext = null;\r\n            this.overrideContext = null;\r\n        }\r\n    };\r\n    View.prototype.insertNodesBefore = function (refNode) {\r\n        refNode.parentNode.insertBefore(this.fragment, refNode);\r\n    };\r\n    View.prototype.appendNodesTo = function (parent) {\r\n        parent.appendChild(this.fragment);\r\n    };\r\n    View.prototype.removeNodes = function () {\r\n        var fragment = this.fragment;\r\n        var current = this.firstChild;\r\n        var end = this.lastChild;\r\n        var next;\r\n        while (current) {\r\n            next = current.nextSibling;\r\n            fragment.appendChild(current);\r\n            if (current === end) {\r\n                break;\r\n            }\r\n            current = next;\r\n        }\r\n    };\r\n    View.prototype.attached = function () {\r\n        var controllers;\r\n        var children;\r\n        var i;\r\n        var ii;\r\n        if (this.isAttached) {\r\n            return;\r\n        }\r\n        this.isAttached = true;\r\n        if (this.controller !== null) {\r\n            this.controller.attached();\r\n        }\r\n        controllers = this.controllers;\r\n        for (i = 0, ii = controllers.length; i < ii; ++i) {\r\n            controllers[i].attached();\r\n        }\r\n        children = this.children;\r\n        for (i = 0, ii = children.length; i < ii; ++i) {\r\n            children[i].attached();\r\n        }\r\n    };\r\n    View.prototype.detached = function () {\r\n        var controllers;\r\n        var children;\r\n        var i;\r\n        var ii;\r\n        if (this.isAttached) {\r\n            this.isAttached = false;\r\n            if (this.controller !== null) {\r\n                this.controller.detached();\r\n            }\r\n            controllers = this.controllers;\r\n            for (i = 0, ii = controllers.length; i < ii; ++i) {\r\n                controllers[i].detached();\r\n            }\r\n            children = this.children;\r\n            for (i = 0, ii = children.length; i < ii; ++i) {\r\n                children[i].detached();\r\n            }\r\n        }\r\n    };\r\n    return View;\r\n}());\n\nvar Animator = (function () {\r\n    function Animator() {\r\n    }\r\n    Animator.prototype.enter = function (element) {\r\n        return Promise.resolve(false);\r\n    };\r\n    Animator.prototype.leave = function (element) {\r\n        return Promise.resolve(false);\r\n    };\r\n    Animator.prototype.removeClass = function (element, className) {\r\n        element.classList.remove(className);\r\n        return Promise.resolve(false);\r\n    };\r\n    Animator.prototype.addClass = function (element, className) {\r\n        element.classList.add(className);\r\n        return Promise.resolve(false);\r\n    };\r\n    Animator.prototype.animate = function (element, className) {\r\n        return Promise.resolve(false);\r\n    };\r\n    Animator.prototype.runSequence = function (animations) {\r\n        return Promise.resolve(false);\r\n    };\r\n    Animator.prototype.registerEffect = function (effectName, properties) { };\r\n    Animator.prototype.unregisterEffect = function (effectName) { };\r\n    return Animator;\r\n}());\n\nfunction getAnimatableElement(view) {\r\n    if (view.animatableElement !== undefined) {\r\n        return view.animatableElement;\r\n    }\r\n    var current = view.firstChild;\r\n    while (current && current.nodeType !== 1) {\r\n        current = current.nextSibling;\r\n    }\r\n    if (current && current.nodeType === 1) {\r\n        return (view.animatableElement = current.classList.contains('au-animate') ? current : null);\r\n    }\r\n    return (view.animatableElement = null);\r\n}\r\nvar ViewSlot = (function () {\r\n    function ViewSlot(anchor, anchorIsContainer, animator) {\r\n        if (animator === void 0) { animator = Animator.instance; }\r\n        this.anchor = anchor;\r\n        this.anchorIsContainer = anchorIsContainer;\r\n        this.bindingContext = null;\r\n        this.overrideContext = null;\r\n        this.animator = animator;\r\n        this.children = [];\r\n        this.isBound = false;\r\n        this.isAttached = false;\r\n        this.contentSelectors = null;\r\n        anchor.viewSlot = this;\r\n        anchor.isContentProjectionSource = false;\r\n    }\r\n    ViewSlot.prototype.animateView = function (view, direction) {\r\n        if (direction === void 0) { direction = 'enter'; }\r\n        var animatableElement = getAnimatableElement(view);\r\n        if (animatableElement !== null) {\r\n            switch (direction) {\r\n                case 'enter':\r\n                    return this.animator.enter(animatableElement);\r\n                case 'leave':\r\n                    return this.animator.leave(animatableElement);\r\n                default:\r\n                    throw new Error('Invalid animation direction: ' + direction);\r\n            }\r\n        }\r\n    };\r\n    ViewSlot.prototype.transformChildNodesIntoView = function () {\r\n        var parent = this.anchor;\r\n        this.children.push({\r\n            fragment: parent,\r\n            firstChild: parent.firstChild,\r\n            lastChild: parent.lastChild,\r\n            returnToCache: function () { },\r\n            removeNodes: function () {\r\n                var last;\r\n                while (last = parent.lastChild) {\r\n                    parent.removeChild(last);\r\n                }\r\n            },\r\n            created: function () { },\r\n            bind: function () { },\r\n            unbind: function () { },\r\n            attached: function () { },\r\n            detached: function () { }\r\n        });\r\n    };\r\n    ViewSlot.prototype.bind = function (bindingContext, overrideContext) {\r\n        var i;\r\n        var ii;\r\n        var children;\r\n        if (this.isBound) {\r\n            if (this.bindingContext === bindingContext) {\r\n                return;\r\n            }\r\n            this.unbind();\r\n        }\r\n        this.isBound = true;\r\n        this.bindingContext = bindingContext = bindingContext || this.bindingContext;\r\n        this.overrideContext = overrideContext = overrideContext || this.overrideContext;\r\n        children = this.children;\r\n        for (i = 0, ii = children.length; i < ii; ++i) {\r\n            children[i].bind(bindingContext, overrideContext, true);\r\n        }\r\n    };\r\n    ViewSlot.prototype.unbind = function () {\r\n        if (this.isBound) {\r\n            var i = void 0;\r\n            var ii = void 0;\r\n            var children = this.children;\r\n            this.isBound = false;\r\n            this.bindingContext = null;\r\n            this.overrideContext = null;\r\n            for (i = 0, ii = children.length; i < ii; ++i) {\r\n                children[i].unbind();\r\n            }\r\n        }\r\n    };\r\n    ViewSlot.prototype.add = function (view) {\r\n        if (this.anchorIsContainer) {\r\n            view.appendNodesTo(this.anchor);\r\n        }\r\n        else {\r\n            view.insertNodesBefore(this.anchor);\r\n        }\r\n        this.children.push(view);\r\n        if (this.isAttached) {\r\n            view.attached();\r\n            return this.animateView(view, 'enter');\r\n        }\r\n    };\r\n    ViewSlot.prototype.insert = function (index, view) {\r\n        var children = this.children;\r\n        var length = children.length;\r\n        if ((index === 0 && length === 0) || index >= length) {\r\n            return this.add(view);\r\n        }\r\n        view.insertNodesBefore(children[index].firstChild);\r\n        children.splice(index, 0, view);\r\n        if (this.isAttached) {\r\n            view.attached();\r\n            return this.animateView(view, 'enter');\r\n        }\r\n    };\r\n    ViewSlot.prototype.move = function (sourceIndex, targetIndex) {\r\n        if (sourceIndex === targetIndex) {\r\n            return;\r\n        }\r\n        var children = this.children;\r\n        var view = children[sourceIndex];\r\n        view.removeNodes();\r\n        view.insertNodesBefore(children[targetIndex].firstChild);\r\n        children.splice(sourceIndex, 1);\r\n        children.splice(targetIndex, 0, view);\r\n    };\r\n    ViewSlot.prototype.remove = function (view, returnToCache, skipAnimation) {\r\n        return this.removeAt(this.children.indexOf(view), returnToCache, skipAnimation);\r\n    };\r\n    ViewSlot.prototype.removeMany = function (viewsToRemove, returnToCache, skipAnimation) {\r\n        var _this = this;\r\n        var children = this.children;\r\n        var ii = viewsToRemove.length;\r\n        var i;\r\n        var rmPromises = [];\r\n        viewsToRemove.forEach(function (child) {\r\n            if (skipAnimation) {\r\n                child.removeNodes();\r\n                return;\r\n            }\r\n            var animation = _this.animateView(child, 'leave');\r\n            if (animation) {\r\n                rmPromises.push(animation.then(function () { return child.removeNodes(); }));\r\n            }\r\n            else {\r\n                child.removeNodes();\r\n            }\r\n        });\r\n        var removeAction = function () {\r\n            if (_this.isAttached) {\r\n                for (i = 0; i < ii; ++i) {\r\n                    viewsToRemove[i].detached();\r\n                }\r\n            }\r\n            if (returnToCache) {\r\n                for (i = 0; i < ii; ++i) {\r\n                    viewsToRemove[i].returnToCache();\r\n                }\r\n            }\r\n            for (i = 0; i < ii; ++i) {\r\n                var index = children.indexOf(viewsToRemove[i]);\r\n                if (index >= 0) {\r\n                    children.splice(index, 1);\r\n                }\r\n            }\r\n        };\r\n        if (rmPromises.length > 0) {\r\n            return Promise.all(rmPromises).then(function () { return removeAction(); });\r\n        }\r\n        return removeAction();\r\n    };\r\n    ViewSlot.prototype.removeAt = function (index, returnToCache, skipAnimation) {\r\n        var _this = this;\r\n        var view = this.children[index];\r\n        var removeAction = function () {\r\n            index = _this.children.indexOf(view);\r\n            view.removeNodes();\r\n            _this.children.splice(index, 1);\r\n            if (_this.isAttached) {\r\n                view.detached();\r\n            }\r\n            if (returnToCache) {\r\n                view.returnToCache();\r\n            }\r\n            return view;\r\n        };\r\n        if (!skipAnimation) {\r\n            var animation = this.animateView(view, 'leave');\r\n            if (animation) {\r\n                return animation.then(function () { return removeAction(); });\r\n            }\r\n        }\r\n        return removeAction();\r\n    };\r\n    ViewSlot.prototype.removeAll = function (returnToCache, skipAnimation) {\r\n        var _this = this;\r\n        var children = this.children;\r\n        var ii = children.length;\r\n        var i;\r\n        var rmPromises = [];\r\n        children.forEach(function (child) {\r\n            if (skipAnimation) {\r\n                child.removeNodes();\r\n                return;\r\n            }\r\n            var animation = _this.animateView(child, 'leave');\r\n            if (animation) {\r\n                rmPromises.push(animation.then(function () { return child.removeNodes(); }));\r\n            }\r\n            else {\r\n                child.removeNodes();\r\n            }\r\n        });\r\n        var removeAction = function () {\r\n            if (_this.isAttached) {\r\n                for (i = 0; i < ii; ++i) {\r\n                    children[i].detached();\r\n                }\r\n            }\r\n            if (returnToCache) {\r\n                for (i = 0; i < ii; ++i) {\r\n                    var child = children[i];\r\n                    if (child) {\r\n                        child.returnToCache();\r\n                    }\r\n                }\r\n            }\r\n            _this.children = [];\r\n        };\r\n        if (rmPromises.length > 0) {\r\n            return Promise.all(rmPromises).then(function () { return removeAction(); });\r\n        }\r\n        return removeAction();\r\n    };\r\n    ViewSlot.prototype.attached = function () {\r\n        var i;\r\n        var ii;\r\n        var children;\r\n        var child;\r\n        if (this.isAttached) {\r\n            return;\r\n        }\r\n        this.isAttached = true;\r\n        children = this.children;\r\n        for (i = 0, ii = children.length; i < ii; ++i) {\r\n            child = children[i];\r\n            child.attached();\r\n            this.animateView(child, 'enter');\r\n        }\r\n    };\r\n    ViewSlot.prototype.detached = function () {\r\n        var i;\r\n        var ii;\r\n        var children;\r\n        if (this.isAttached) {\r\n            this.isAttached = false;\r\n            children = this.children;\r\n            for (i = 0, ii = children.length; i < ii; ++i) {\r\n                children[i].detached();\r\n            }\r\n        }\r\n    };\r\n    ViewSlot.prototype.projectTo = function (slots) {\r\n        var _this = this;\r\n        this.projectToSlots = slots;\r\n        this.add = this._projectionAdd;\r\n        this.insert = this._projectionInsert;\r\n        this.move = this._projectionMove;\r\n        this.remove = this._projectionRemove;\r\n        this.removeAt = this._projectionRemoveAt;\r\n        this.removeMany = this._projectionRemoveMany;\r\n        this.removeAll = this._projectionRemoveAll;\r\n        this.children.forEach(function (view) { return ShadowDOM.distributeView(view, slots, _this); });\r\n    };\r\n    ViewSlot.prototype._projectionAdd = function (view) {\r\n        ShadowDOM.distributeView(view, this.projectToSlots, this);\r\n        this.children.push(view);\r\n        if (this.isAttached) {\r\n            view.attached();\r\n        }\r\n    };\r\n    ViewSlot.prototype._projectionInsert = function (index, view) {\r\n        if ((index === 0 && !this.children.length) || index >= this.children.length) {\r\n            this.add(view);\r\n        }\r\n        else {\r\n            ShadowDOM.distributeView(view, this.projectToSlots, this, index);\r\n            this.children.splice(index, 0, view);\r\n            if (this.isAttached) {\r\n                view.attached();\r\n            }\r\n        }\r\n    };\r\n    ViewSlot.prototype._projectionMove = function (sourceIndex, targetIndex) {\r\n        if (sourceIndex === targetIndex) {\r\n            return;\r\n        }\r\n        var children = this.children;\r\n        var view = children[sourceIndex];\r\n        ShadowDOM.undistributeView(view, this.projectToSlots, this);\r\n        ShadowDOM.distributeView(view, this.projectToSlots, this, targetIndex);\r\n        children.splice(sourceIndex, 1);\r\n        children.splice(targetIndex, 0, view);\r\n    };\r\n    ViewSlot.prototype._projectionRemove = function (view, returnToCache) {\r\n        ShadowDOM.undistributeView(view, this.projectToSlots, this);\r\n        this.children.splice(this.children.indexOf(view), 1);\r\n        if (this.isAttached) {\r\n            view.detached();\r\n        }\r\n        if (returnToCache) {\r\n            view.returnToCache();\r\n        }\r\n    };\r\n    ViewSlot.prototype._projectionRemoveAt = function (index, returnToCache) {\r\n        var view = this.children[index];\r\n        ShadowDOM.undistributeView(view, this.projectToSlots, this);\r\n        this.children.splice(index, 1);\r\n        if (this.isAttached) {\r\n            view.detached();\r\n        }\r\n        if (returnToCache) {\r\n            view.returnToCache();\r\n        }\r\n    };\r\n    ViewSlot.prototype._projectionRemoveMany = function (viewsToRemove, returnToCache) {\r\n        var _this = this;\r\n        viewsToRemove.forEach(function (view) { return _this.remove(view, returnToCache); });\r\n    };\r\n    ViewSlot.prototype._projectionRemoveAll = function (returnToCache) {\r\n        ShadowDOM.undistributeAll(this.projectToSlots, this);\r\n        var children = this.children;\r\n        var ii = children.length;\r\n        for (var i = 0; i < ii; ++i) {\r\n            if (returnToCache) {\r\n                children[i].returnToCache();\r\n            }\r\n            else if (this.isAttached) {\r\n                children[i].detached();\r\n            }\r\n        }\r\n        this.children = [];\r\n    };\r\n    return ViewSlot;\r\n}());\n\nvar $resolver = resolver;\r\nvar ProviderResolver = (function () {\r\n    function ProviderResolver() {\r\n    }\r\n    ProviderResolver.prototype.get = function (container, key) {\r\n        var id = key.__providerId__;\r\n        return id in container ? container[id] : (container[id] = container.invoke(key));\r\n    };\r\n    ProviderResolver = __decorate([\r\n        $resolver\r\n    ], ProviderResolver);\r\n    return ProviderResolver;\r\n}());\r\nvar providerResolverInstance = new ProviderResolver();\r\nfunction elementContainerGet(key) {\r\n    if (key === DOM.Element) {\r\n        return this.element;\r\n    }\r\n    if (key === BoundViewFactory) {\r\n        if (this.boundViewFactory) {\r\n            return this.boundViewFactory;\r\n        }\r\n        var factory = this.instruction.viewFactory;\r\n        var partReplacements = this.partReplacements;\r\n        if (partReplacements) {\r\n            factory = partReplacements[factory.part] || factory;\r\n        }\r\n        this.boundViewFactory = new BoundViewFactory(this, factory, partReplacements);\r\n        return this.boundViewFactory;\r\n    }\r\n    if (key === ViewSlot) {\r\n        if (this.viewSlot === undefined) {\r\n            this.viewSlot = new ViewSlot(this.element, this.instruction.anchorIsContainer);\r\n            this.element.isContentProjectionSource = this.instruction.lifting;\r\n            this.children.push(this.viewSlot);\r\n        }\r\n        return this.viewSlot;\r\n    }\r\n    if (key === ElementEvents) {\r\n        return this.elementEvents || (this.elementEvents = new ElementEvents(this.element));\r\n    }\r\n    if (key === CompositionTransaction) {\r\n        return this.compositionTransaction || (this.compositionTransaction = this.parent.get(key));\r\n    }\r\n    if (key === ViewResources) {\r\n        return this.viewResources;\r\n    }\r\n    if (key === TargetInstruction) {\r\n        return this.instruction;\r\n    }\r\n    return this.superGet(key);\r\n}\r\nfunction createElementContainer(parent, element, instruction, children, partReplacements, resources) {\r\n    var container = parent.createChild();\r\n    var providers;\r\n    var i;\r\n    container.element = element;\r\n    container.instruction = instruction;\r\n    container.children = children;\r\n    container.viewResources = resources;\r\n    container.partReplacements = partReplacements;\r\n    providers = instruction.providers;\r\n    i = providers.length;\r\n    while (i--) {\r\n        container._resolvers.set(providers[i], providerResolverInstance);\r\n    }\r\n    container.superGet = container.get;\r\n    container.get = elementContainerGet;\r\n    return container;\r\n}\r\nfunction hasAttribute(name) {\r\n    return this._element.hasAttribute(name);\r\n}\r\nfunction getAttribute(name) {\r\n    return this._element.getAttribute(name);\r\n}\r\nfunction setAttribute(name, value) {\r\n    this._element.setAttribute(name, value);\r\n}\r\nfunction makeElementIntoAnchor(element, elementInstruction) {\r\n    var anchor = DOM.createComment('anchor');\r\n    if (elementInstruction) {\r\n        var firstChild = element.firstChild;\r\n        if (firstChild && firstChild.tagName === 'AU-CONTENT') {\r\n            anchor.contentElement = firstChild;\r\n        }\r\n        anchor._element = element;\r\n        anchor.hasAttribute = hasAttribute;\r\n        anchor.getAttribute = getAttribute;\r\n        anchor.setAttribute = setAttribute;\r\n    }\r\n    DOM.replaceNode(anchor, element);\r\n    return anchor;\r\n}\r\nfunction applyInstructions(containers, element, instruction, controllers, bindings, children, shadowSlots, partReplacements, resources) {\r\n    var behaviorInstructions = instruction.behaviorInstructions;\r\n    var expressions = instruction.expressions;\r\n    var elementContainer;\r\n    var i;\r\n    var ii;\r\n    var current;\r\n    var instance;\r\n    if (instruction.contentExpression) {\r\n        bindings.push(instruction.contentExpression.createBinding(element.nextSibling));\r\n        element.nextSibling.auInterpolationTarget = true;\r\n        element.parentNode.removeChild(element);\r\n        return;\r\n    }\r\n    if (instruction.shadowSlot) {\r\n        var commentAnchor = DOM.createComment('slot');\r\n        var slot = void 0;\r\n        if (instruction.slotDestination) {\r\n            slot = new PassThroughSlot(commentAnchor, instruction.slotName, instruction.slotDestination, instruction.slotFallbackFactory);\r\n        }\r\n        else {\r\n            slot = new ShadowSlot(commentAnchor, instruction.slotName, instruction.slotFallbackFactory);\r\n        }\r\n        DOM.replaceNode(commentAnchor, element);\r\n        shadowSlots[instruction.slotName] = slot;\r\n        controllers.push(slot);\r\n        return;\r\n    }\r\n    if (instruction.letElement) {\r\n        for (i = 0, ii = expressions.length; i < ii; ++i) {\r\n            bindings.push(expressions[i].createBinding());\r\n        }\r\n        element.parentNode.removeChild(element);\r\n        return;\r\n    }\r\n    if (behaviorInstructions.length) {\r\n        if (!instruction.anchorIsContainer) {\r\n            element = makeElementIntoAnchor(element, instruction.elementInstruction);\r\n        }\r\n        containers[instruction.injectorId] = elementContainer =\r\n            createElementContainer(containers[instruction.parentInjectorId], element, instruction, children, partReplacements, resources);\r\n        for (i = 0, ii = behaviorInstructions.length; i < ii; ++i) {\r\n            current = behaviorInstructions[i];\r\n            instance = current.type.create(elementContainer, current, element, bindings);\r\n            controllers.push(instance);\r\n        }\r\n    }\r\n    for (i = 0, ii = expressions.length; i < ii; ++i) {\r\n        bindings.push(expressions[i].createBinding(element));\r\n    }\r\n}\r\nfunction styleStringToObject(style, target) {\r\n    var attributes = style.split(';');\r\n    var firstIndexOfColon;\r\n    var i;\r\n    var current;\r\n    var key;\r\n    var value;\r\n    target = target || {};\r\n    for (i = 0; i < attributes.length; i++) {\r\n        current = attributes[i];\r\n        firstIndexOfColon = current.indexOf(':');\r\n        key = current.substring(0, firstIndexOfColon).trim();\r\n        value = current.substring(firstIndexOfColon + 1).trim();\r\n        target[key] = value;\r\n    }\r\n    return target;\r\n}\r\nfunction styleObjectToString(obj) {\r\n    var result = '';\r\n    for (var key in obj) {\r\n        result += key + ':' + obj[key] + ';';\r\n    }\r\n    return result;\r\n}\r\nfunction applySurrogateInstruction(container, element, instruction, controllers, bindings, children) {\r\n    var behaviorInstructions = instruction.behaviorInstructions;\r\n    var expressions = instruction.expressions;\r\n    var providers = instruction.providers;\r\n    var values = instruction.values;\r\n    var i;\r\n    var ii;\r\n    var current;\r\n    var instance;\r\n    var currentAttributeValue;\r\n    i = providers.length;\r\n    while (i--) {\r\n        container._resolvers.set(providers[i], providerResolverInstance);\r\n    }\r\n    for (var key in values) {\r\n        currentAttributeValue = element.getAttribute(key);\r\n        if (currentAttributeValue) {\r\n            if (key === 'class') {\r\n                element.setAttribute('class', currentAttributeValue + ' ' + values[key]);\r\n            }\r\n            else if (key === 'style') {\r\n                var styleObject = styleStringToObject(values[key]);\r\n                styleStringToObject(currentAttributeValue, styleObject);\r\n                element.setAttribute('style', styleObjectToString(styleObject));\r\n            }\r\n        }\r\n        else {\r\n            element.setAttribute(key, values[key]);\r\n        }\r\n    }\r\n    if (behaviorInstructions.length) {\r\n        for (i = 0, ii = behaviorInstructions.length; i < ii; ++i) {\r\n            current = behaviorInstructions[i];\r\n            instance = current.type.create(container, current, element, bindings);\r\n            if (instance.contentView) {\r\n                children.push(instance.contentView);\r\n            }\r\n            controllers.push(instance);\r\n        }\r\n    }\r\n    for (i = 0, ii = expressions.length; i < ii; ++i) {\r\n        bindings.push(expressions[i].createBinding(element));\r\n    }\r\n}\r\nvar BoundViewFactory = (function () {\r\n    function BoundViewFactory(parentContainer, viewFactory, partReplacements) {\r\n        this.parentContainer = parentContainer;\r\n        this.viewFactory = viewFactory;\r\n        this.factoryCreateInstruction = { partReplacements: partReplacements };\r\n    }\r\n    BoundViewFactory.prototype.create = function () {\r\n        var view = this.viewFactory.create(this.parentContainer.createChild(), this.factoryCreateInstruction);\r\n        view._isUserControlled = true;\r\n        return view;\r\n    };\r\n    Object.defineProperty(BoundViewFactory.prototype, \"isCaching\", {\r\n        get: function () {\r\n            return this.viewFactory.isCaching;\r\n        },\r\n        enumerable: false,\r\n        configurable: true\r\n    });\r\n    BoundViewFactory.prototype.setCacheSize = function (size, doNotOverrideIfAlreadySet) {\r\n        this.viewFactory.setCacheSize(size, doNotOverrideIfAlreadySet);\r\n    };\r\n    BoundViewFactory.prototype.getCachedView = function () {\r\n        return this.viewFactory.getCachedView();\r\n    };\r\n    BoundViewFactory.prototype.returnViewToCache = function (view) {\r\n        this.viewFactory.returnViewToCache(view);\r\n    };\r\n    return BoundViewFactory;\r\n}());\r\nvar ViewFactory = (function () {\r\n    function ViewFactory(template, instructions, resources) {\r\n        this.isCaching = false;\r\n        this.template = template;\r\n        this.instructions = instructions;\r\n        this.resources = resources;\r\n        this.cacheSize = -1;\r\n        this.cache = null;\r\n    }\r\n    ViewFactory.prototype.setCacheSize = function (size, doNotOverrideIfAlreadySet) {\r\n        if (size) {\r\n            if (size === '*') {\r\n                size = Number.MAX_VALUE;\r\n            }\r\n            else if (typeof size === 'string') {\r\n                size = parseInt(size, 10);\r\n            }\r\n        }\r\n        if (this.cacheSize === -1 || !doNotOverrideIfAlreadySet) {\r\n            this.cacheSize = Number(size);\r\n        }\r\n        if (this.cacheSize > 0) {\r\n            this.cache = [];\r\n        }\r\n        else {\r\n            this.cache = null;\r\n        }\r\n        this.isCaching = this.cacheSize > 0;\r\n    };\r\n    ViewFactory.prototype.getCachedView = function () {\r\n        return this.cache !== null ? (this.cache.pop() || null) : null;\r\n    };\r\n    ViewFactory.prototype.returnViewToCache = function (view) {\r\n        if (view.isAttached) {\r\n            view.detached();\r\n        }\r\n        if (view.isBound) {\r\n            view.unbind();\r\n        }\r\n        if (this.cache !== null && this.cache.length < this.cacheSize) {\r\n            view.fromCache = true;\r\n            this.cache.push(view);\r\n        }\r\n    };\r\n    ViewFactory.prototype.create = function (container, createInstruction, element) {\r\n        createInstruction = createInstruction || BehaviorInstruction.normal;\r\n        var cachedView = this.getCachedView();\r\n        if (cachedView !== null) {\r\n            return cachedView;\r\n        }\r\n        var fragment = createInstruction.enhance ? this.template : this.template.cloneNode(true);\r\n        var instructables = fragment.querySelectorAll('.au-target');\r\n        var instructions = this.instructions;\r\n        var resources = this.resources;\r\n        var controllers = [];\r\n        var bindings = [];\r\n        var children = [];\r\n        var shadowSlots = Object.create(null);\r\n        var containers = { root: container };\r\n        var partReplacements = createInstruction.partReplacements;\r\n        var i;\r\n        var ii;\r\n        var view;\r\n        var instructable;\r\n        var instruction;\r\n        this.resources._invokeHook('beforeCreate', this, container, fragment, createInstruction);\r\n        if (element && this.surrogateInstruction !== null) {\r\n            applySurrogateInstruction(container, element, this.surrogateInstruction, controllers, bindings, children);\r\n        }\r\n        if (createInstruction.enhance && fragment.hasAttribute('au-target-id')) {\r\n            instructable = fragment;\r\n            instruction = instructions[instructable.getAttribute('au-target-id')];\r\n            applyInstructions(containers, instructable, instruction, controllers, bindings, children, shadowSlots, partReplacements, resources);\r\n        }\r\n        for (i = 0, ii = instructables.length; i < ii; ++i) {\r\n            instructable = instructables[i];\r\n            instruction = instructions[instructable.getAttribute('au-target-id')];\r\n            applyInstructions(containers, instructable, instruction, controllers, bindings, children, shadowSlots, partReplacements, resources);\r\n        }\r\n        view = new View(container, this, fragment, controllers, bindings, children, shadowSlots);\r\n        if (!createInstruction.initiatedByBehavior) {\r\n            view.created();\r\n        }\r\n        this.resources._invokeHook('afterCreate', view);\r\n        return view;\r\n    };\r\n    return ViewFactory;\r\n}());\n\nvar nextInjectorId = 0;\r\nfunction getNextInjectorId() {\r\n    return ++nextInjectorId;\r\n}\r\nvar lastAUTargetID = 0;\r\nfunction getNextAUTargetID() {\r\n    return (++lastAUTargetID).toString();\r\n}\r\nfunction makeIntoInstructionTarget(element) {\r\n    var value = element.getAttribute('class');\r\n    var auTargetID = getNextAUTargetID();\r\n    element.setAttribute('class', (value ? value + ' au-target' : 'au-target'));\r\n    element.setAttribute('au-target-id', auTargetID);\r\n    return auTargetID;\r\n}\r\nfunction makeShadowSlot(compiler, resources, node, instructions, parentInjectorId) {\r\n    var auShadowSlot = DOM.createElement('au-shadow-slot');\r\n    DOM.replaceNode(auShadowSlot, node);\r\n    var auTargetID = makeIntoInstructionTarget(auShadowSlot);\r\n    var instruction = TargetInstruction.shadowSlot(parentInjectorId);\r\n    instruction.slotName = node.getAttribute('name') || ShadowDOM.defaultSlotKey;\r\n    instruction.slotDestination = node.getAttribute('slot');\r\n    if (node.innerHTML.trim()) {\r\n        var fragment = DOM.createDocumentFragment();\r\n        var child = void 0;\r\n        while (child = node.firstChild) {\r\n            fragment.appendChild(child);\r\n        }\r\n        instruction.slotFallbackFactory = compiler.compile(fragment, resources);\r\n    }\r\n    instructions[auTargetID] = instruction;\r\n    return auShadowSlot;\r\n}\r\nvar defaultLetHandler = BindingLanguage.prototype.createLetExpressions;\r\nvar ViewCompiler = (function () {\r\n    function ViewCompiler(bindingLanguage, resources) {\r\n        this.bindingLanguage = bindingLanguage;\r\n        this.resources = resources;\r\n    }\r\n    ViewCompiler.inject = function () {\r\n        return [BindingLanguage, ViewResources];\r\n    };\r\n    ViewCompiler.prototype.compile = function (source, resources, compileInstruction) {\r\n        resources = resources || this.resources;\r\n        compileInstruction = compileInstruction || ViewCompileInstruction.normal;\r\n        source = typeof source === 'string' ? DOM.createTemplateFromMarkup(source) : source;\r\n        var content;\r\n        var part;\r\n        var cacheSize;\r\n        if (source.content) {\r\n            part = source.getAttribute('part');\r\n            cacheSize = source.getAttribute('view-cache');\r\n            content = DOM.adoptNode(source.content);\r\n        }\r\n        else {\r\n            content = source;\r\n        }\r\n        compileInstruction.targetShadowDOM = compileInstruction.targetShadowDOM && FEATURE.shadowDOM;\r\n        resources._invokeHook('beforeCompile', content, resources, compileInstruction);\r\n        var instructions = {};\r\n        this._compileNode(content, resources, instructions, source, 'root', !compileInstruction.targetShadowDOM);\r\n        var firstChild = content.firstChild;\r\n        if (firstChild && firstChild.nodeType === 1) {\r\n            var targetId = firstChild.getAttribute('au-target-id');\r\n            if (targetId) {\r\n                var ins = instructions[targetId];\r\n                if (ins.shadowSlot || ins.lifting || (ins.elementInstruction && !ins.elementInstruction.anchorIsContainer)) {\r\n                    content.insertBefore(DOM.createComment('view'), firstChild);\r\n                }\r\n            }\r\n        }\r\n        var factory = new ViewFactory(content, instructions, resources);\r\n        factory.surrogateInstruction = compileInstruction.compileSurrogate ? this._compileSurrogate(source, resources) : null;\r\n        factory.part = part;\r\n        if (cacheSize) {\r\n            factory.setCacheSize(cacheSize);\r\n        }\r\n        resources._invokeHook('afterCompile', factory);\r\n        return factory;\r\n    };\r\n    ViewCompiler.prototype._compileNode = function (node, resources, instructions, parentNode, parentInjectorId, targetLightDOM) {\r\n        switch (node.nodeType) {\r\n            case 1:\r\n                return this._compileElement(node, resources, instructions, parentNode, parentInjectorId, targetLightDOM);\r\n            case 3:\r\n                var expression = resources.getBindingLanguage(this.bindingLanguage).inspectTextContent(resources, node.wholeText);\r\n                if (expression) {\r\n                    var marker = DOM.createElement('au-marker');\r\n                    var auTargetID = makeIntoInstructionTarget(marker);\r\n                    (node.parentNode || parentNode).insertBefore(marker, node);\r\n                    node.textContent = ' ';\r\n                    instructions[auTargetID] = TargetInstruction.contentExpression(expression);\r\n                    while (node.nextSibling && node.nextSibling.nodeType === 3) {\r\n                        (node.parentNode || parentNode).removeChild(node.nextSibling);\r\n                    }\r\n                }\r\n                else {\r\n                    while (node.nextSibling && node.nextSibling.nodeType === 3) {\r\n                        node = node.nextSibling;\r\n                    }\r\n                }\r\n                return node.nextSibling;\r\n            case 11:\r\n                var currentChild = node.firstChild;\r\n                while (currentChild) {\r\n                    currentChild = this._compileNode(currentChild, resources, instructions, node, parentInjectorId, targetLightDOM);\r\n                }\r\n                break;\r\n        }\r\n        return node.nextSibling;\r\n    };\r\n    ViewCompiler.prototype._compileSurrogate = function (node, resources) {\r\n        var tagName = node.tagName.toLowerCase();\r\n        var attributes = node.attributes;\r\n        var bindingLanguage = resources.getBindingLanguage(this.bindingLanguage);\r\n        var knownAttribute;\r\n        var property;\r\n        var instruction;\r\n        var i;\r\n        var ii;\r\n        var attr;\r\n        var attrName;\r\n        var attrValue;\r\n        var info;\r\n        var type;\r\n        var expressions = [];\r\n        var expression;\r\n        var behaviorInstructions = [];\r\n        var values = {};\r\n        var hasValues = false;\r\n        var providers = [];\r\n        for (i = 0, ii = attributes.length; i < ii; ++i) {\r\n            attr = attributes[i];\r\n            attrName = attr.name;\r\n            attrValue = attr.value;\r\n            info = bindingLanguage.inspectAttribute(resources, tagName, attrName, attrValue);\r\n            type = resources.getAttribute(info.attrName);\r\n            if (type) {\r\n                knownAttribute = resources.mapAttribute(info.attrName);\r\n                if (knownAttribute) {\r\n                    property = type.attributes[knownAttribute];\r\n                    if (property) {\r\n                        info.defaultBindingMode = property.defaultBindingMode;\r\n                        if (!info.command && !info.expression) {\r\n                            info.command = property.hasOptions ? 'options' : null;\r\n                        }\r\n                        if (info.command && (info.command !== 'options') && type.primaryProperty) {\r\n                            var primaryProperty = type.primaryProperty;\r\n                            attrName = info.attrName = primaryProperty.attribute;\r\n                            info.defaultBindingMode = primaryProperty.defaultBindingMode;\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n            instruction = bindingLanguage.createAttributeInstruction(resources, node, info, undefined, type);\r\n            if (instruction) {\r\n                if (instruction.alteredAttr) {\r\n                    type = resources.getAttribute(instruction.attrName);\r\n                }\r\n                if (instruction.discrete) {\r\n                    expressions.push(instruction);\r\n                }\r\n                else {\r\n                    if (type) {\r\n                        instruction.type = type;\r\n                        this._configureProperties(instruction, resources);\r\n                        if (type.liftsContent) {\r\n                            throw new Error('You cannot place a template controller on a surrogate element.');\r\n                        }\r\n                        else {\r\n                            behaviorInstructions.push(instruction);\r\n                        }\r\n                    }\r\n                    else {\r\n                        expressions.push(instruction.attributes[instruction.attrName]);\r\n                    }\r\n                }\r\n            }\r\n            else {\r\n                if (type) {\r\n                    instruction = BehaviorInstruction.attribute(attrName, type);\r\n                    instruction.attributes[resources.mapAttribute(attrName)] = attrValue;\r\n                    if (type.liftsContent) {\r\n                        throw new Error('You cannot place a template controller on a surrogate element.');\r\n                    }\r\n                    else {\r\n                        behaviorInstructions.push(instruction);\r\n                    }\r\n                }\r\n                else if (attrName !== 'id' && attrName !== 'part' && attrName !== 'replace-part') {\r\n                    hasValues = true;\r\n                    values[attrName] = attrValue;\r\n                }\r\n            }\r\n        }\r\n        if (expressions.length || behaviorInstructions.length || hasValues) {\r\n            for (i = 0, ii = behaviorInstructions.length; i < ii; ++i) {\r\n                instruction = behaviorInstructions[i];\r\n                instruction.type.compile(this, resources, node, instruction);\r\n                providers.push(instruction.type.target);\r\n            }\r\n            for (i = 0, ii = expressions.length; i < ii; ++i) {\r\n                expression = expressions[i];\r\n                if (expression.attrToRemove !== undefined) {\r\n                    node.removeAttribute(expression.attrToRemove);\r\n                }\r\n            }\r\n            return TargetInstruction.surrogate(providers, behaviorInstructions, expressions, values);\r\n        }\r\n        return null;\r\n    };\r\n    ViewCompiler.prototype._compileElement = function (node, resources, instructions, parentNode, parentInjectorId, targetLightDOM) {\r\n        var tagName = node.tagName.toLowerCase();\r\n        var attributes = node.attributes;\r\n        var expressions = [];\r\n        var expression;\r\n        var behaviorInstructions = [];\r\n        var providers = [];\r\n        var bindingLanguage = resources.getBindingLanguage(this.bindingLanguage);\r\n        var liftingInstruction;\r\n        var viewFactory;\r\n        var type;\r\n        var elementInstruction;\r\n        var elementProperty;\r\n        var i;\r\n        var ii;\r\n        var attr;\r\n        var attrName;\r\n        var attrValue;\r\n        var originalAttrName;\r\n        var instruction;\r\n        var info;\r\n        var property;\r\n        var knownAttribute;\r\n        var auTargetID;\r\n        var injectorId;\r\n        if (tagName === 'slot') {\r\n            if (targetLightDOM) {\r\n                node = makeShadowSlot(this, resources, node, instructions, parentInjectorId);\r\n            }\r\n            return node.nextSibling;\r\n        }\r\n        else if (tagName === 'template') {\r\n            if (!('content' in node)) {\r\n                throw new Error('You cannot place a template element within ' + node.namespaceURI + ' namespace');\r\n            }\r\n            viewFactory = this.compile(node, resources);\r\n            viewFactory.part = node.getAttribute('part');\r\n        }\r\n        else {\r\n            type = resources.getElement(node.getAttribute('as-element') || tagName);\r\n            if (tagName === 'let' && !type && bindingLanguage.createLetExpressions !== defaultLetHandler) {\r\n                expressions = bindingLanguage.createLetExpressions(resources, node);\r\n                auTargetID = makeIntoInstructionTarget(node);\r\n                instructions[auTargetID] = TargetInstruction.letElement(expressions);\r\n                return node.nextSibling;\r\n            }\r\n            if (type) {\r\n                elementInstruction = BehaviorInstruction.element(node, type);\r\n                type.processAttributes(this, resources, node, attributes, elementInstruction);\r\n                behaviorInstructions.push(elementInstruction);\r\n            }\r\n        }\r\n        for (i = 0, ii = attributes.length; i < ii; ++i) {\r\n            attr = attributes[i];\r\n            originalAttrName = attrName = attr.name;\r\n            attrValue = attr.value;\r\n            info = bindingLanguage.inspectAttribute(resources, tagName, attrName, attrValue);\r\n            if (targetLightDOM && info.attrName === 'slot') {\r\n                info.attrName = attrName = 'au-slot';\r\n            }\r\n            type = resources.getAttribute(info.attrName);\r\n            elementProperty = null;\r\n            if (type) {\r\n                knownAttribute = resources.mapAttribute(info.attrName);\r\n                if (knownAttribute) {\r\n                    property = type.attributes[knownAttribute];\r\n                    if (property) {\r\n                        info.defaultBindingMode = property.defaultBindingMode;\r\n                        if (!info.command && !info.expression) {\r\n                            info.command = property.hasOptions ? 'options' : null;\r\n                        }\r\n                        if (info.command && (info.command !== 'options') && type.primaryProperty) {\r\n                            var primaryProperty = type.primaryProperty;\r\n                            attrName = info.attrName = primaryProperty.attribute;\r\n                            info.defaultBindingMode = primaryProperty.defaultBindingMode;\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n            else if (elementInstruction) {\r\n                elementProperty = elementInstruction.type.attributes[info.attrName];\r\n                if (elementProperty) {\r\n                    info.defaultBindingMode = elementProperty.defaultBindingMode;\r\n                }\r\n            }\r\n            if (elementProperty) {\r\n                instruction = bindingLanguage.createAttributeInstruction(resources, node, info, elementInstruction);\r\n            }\r\n            else {\r\n                instruction = bindingLanguage.createAttributeInstruction(resources, node, info, undefined, type);\r\n            }\r\n            if (instruction) {\r\n                if (instruction.alteredAttr) {\r\n                    type = resources.getAttribute(instruction.attrName);\r\n                }\r\n                if (instruction.discrete) {\r\n                    expressions.push(instruction);\r\n                }\r\n                else {\r\n                    if (type) {\r\n                        instruction.type = type;\r\n                        this._configureProperties(instruction, resources);\r\n                        if (type.liftsContent) {\r\n                            instruction.originalAttrName = originalAttrName;\r\n                            liftingInstruction = instruction;\r\n                            break;\r\n                        }\r\n                        else {\r\n                            behaviorInstructions.push(instruction);\r\n                        }\r\n                    }\r\n                    else if (elementProperty) {\r\n                        elementInstruction.attributes[info.attrName].targetProperty = elementProperty.name;\r\n                    }\r\n                    else {\r\n                        expressions.push(instruction.attributes[instruction.attrName]);\r\n                    }\r\n                }\r\n            }\r\n            else {\r\n                if (type) {\r\n                    instruction = BehaviorInstruction.attribute(attrName, type);\r\n                    instruction.attributes[resources.mapAttribute(attrName)] = attrValue;\r\n                    if (type.liftsContent) {\r\n                        instruction.originalAttrName = originalAttrName;\r\n                        liftingInstruction = instruction;\r\n                        break;\r\n                    }\r\n                    else {\r\n                        behaviorInstructions.push(instruction);\r\n                    }\r\n                }\r\n                else if (elementProperty) {\r\n                    elementInstruction.attributes[attrName] = attrValue;\r\n                }\r\n            }\r\n        }\r\n        if (liftingInstruction) {\r\n            liftingInstruction.viewFactory = viewFactory;\r\n            node = liftingInstruction.type.compile(this, resources, node, liftingInstruction, parentNode);\r\n            auTargetID = makeIntoInstructionTarget(node);\r\n            instructions[auTargetID] = TargetInstruction.lifting(parentInjectorId, liftingInstruction);\r\n        }\r\n        else {\r\n            var skipContentProcessing = false;\r\n            if (expressions.length || behaviorInstructions.length) {\r\n                injectorId = behaviorInstructions.length ? getNextInjectorId() : false;\r\n                for (i = 0, ii = behaviorInstructions.length; i < ii; ++i) {\r\n                    instruction = behaviorInstructions[i];\r\n                    instruction.type.compile(this, resources, node, instruction, parentNode);\r\n                    providers.push(instruction.type.target);\r\n                    skipContentProcessing = skipContentProcessing || instruction.skipContentProcessing;\r\n                }\r\n                for (i = 0, ii = expressions.length; i < ii; ++i) {\r\n                    expression = expressions[i];\r\n                    if (expression.attrToRemove !== undefined) {\r\n                        node.removeAttribute(expression.attrToRemove);\r\n                    }\r\n                }\r\n                auTargetID = makeIntoInstructionTarget(node);\r\n                instructions[auTargetID] = TargetInstruction.normal(injectorId, parentInjectorId, providers, behaviorInstructions, expressions, elementInstruction);\r\n            }\r\n            if (skipContentProcessing) {\r\n                return node.nextSibling;\r\n            }\r\n            var currentChild = node.firstChild;\r\n            while (currentChild) {\r\n                currentChild = this._compileNode(currentChild, resources, instructions, node, injectorId || parentInjectorId, targetLightDOM);\r\n            }\r\n        }\r\n        return node.nextSibling;\r\n    };\r\n    ViewCompiler.prototype._configureProperties = function (instruction, resources) {\r\n        var type = instruction.type;\r\n        var attrName = instruction.attrName;\r\n        var attributes = instruction.attributes;\r\n        var property;\r\n        var key;\r\n        var value;\r\n        var knownAttribute = resources.mapAttribute(attrName);\r\n        if (knownAttribute && attrName in attributes && knownAttribute !== attrName) {\r\n            attributes[knownAttribute] = attributes[attrName];\r\n            delete attributes[attrName];\r\n        }\r\n        for (key in attributes) {\r\n            value = attributes[key];\r\n            if (value !== null && typeof value === 'object') {\r\n                property = type.attributes[key];\r\n                if (property !== undefined) {\r\n                    value.targetProperty = property.name;\r\n                }\r\n                else {\r\n                    value.targetProperty = key;\r\n                }\r\n            }\r\n        }\r\n    };\r\n    return ViewCompiler;\r\n}());\n\nvar ViewEngineHooksResource = (function () {\r\n    function ViewEngineHooksResource() {\r\n    }\r\n    ViewEngineHooksResource.prototype.initialize = function (container, target) {\r\n        this.instance = container.get(target);\r\n    };\r\n    ViewEngineHooksResource.prototype.register = function (registry, name) {\r\n        registry.registerViewEngineHooks(this.instance);\r\n    };\r\n    ViewEngineHooksResource.prototype.load = function (container, target) { };\r\n    ViewEngineHooksResource.convention = function (name) {\r\n        if (name.endsWith('ViewEngineHooks')) {\r\n            return new ViewEngineHooksResource();\r\n        }\r\n    };\r\n    return ViewEngineHooksResource;\r\n}());\r\nfunction viewEngineHooks(target) {\r\n    var deco = function (t) {\r\n        metadata.define(metadata.resource, new ViewEngineHooksResource(), t);\r\n    };\r\n    return target ? deco(target) : deco;\r\n}\n\nvar ResourceModule = (function () {\r\n    function ResourceModule(moduleId) {\r\n        this.id = moduleId;\r\n        this.moduleInstance = null;\r\n        this.mainResource = null;\r\n        this.resources = null;\r\n        this.viewStrategy = null;\r\n        this.isInitialized = false;\r\n        this.onLoaded = null;\r\n        this.loadContext = null;\r\n    }\r\n    ResourceModule.prototype.initialize = function (container) {\r\n        var current = this.mainResource;\r\n        var resources = this.resources;\r\n        var vs = this.viewStrategy;\r\n        if (this.isInitialized) {\r\n            return;\r\n        }\r\n        this.isInitialized = true;\r\n        if (current !== undefined) {\r\n            current.metadata.viewStrategy = vs;\r\n            current.initialize(container);\r\n        }\r\n        for (var i = 0, ii = resources.length; i < ii; ++i) {\r\n            current = resources[i];\r\n            current.metadata.viewStrategy = vs;\r\n            current.initialize(container);\r\n        }\r\n    };\r\n    ResourceModule.prototype.register = function (registry, name) {\r\n        var main = this.mainResource;\r\n        var resources = this.resources;\r\n        if (main !== undefined) {\r\n            main.register(registry, name);\r\n            name = null;\r\n        }\r\n        for (var i = 0, ii = resources.length; i < ii; ++i) {\r\n            resources[i].register(registry, name);\r\n            name = null;\r\n        }\r\n    };\r\n    ResourceModule.prototype.load = function (container, loadContext) {\r\n        if (this.onLoaded !== null) {\r\n            return this.loadContext === loadContext ? Promise.resolve() : this.onLoaded;\r\n        }\r\n        var main = this.mainResource;\r\n        var resources = this.resources;\r\n        var loads;\r\n        if (main !== undefined) {\r\n            loads = new Array(resources.length + 1);\r\n            loads[0] = main.load(container, loadContext);\r\n            for (var i = 0, ii = resources.length; i < ii; ++i) {\r\n                loads[i + 1] = resources[i].load(container, loadContext);\r\n            }\r\n        }\r\n        else {\r\n            loads = new Array(resources.length);\r\n            for (var i = 0, ii = resources.length; i < ii; ++i) {\r\n                loads[i] = resources[i].load(container, loadContext);\r\n            }\r\n        }\r\n        this.loadContext = loadContext;\r\n        this.onLoaded = Promise.all(loads);\r\n        return this.onLoaded;\r\n    };\r\n    return ResourceModule;\r\n}());\r\nvar ResourceDescription = (function () {\r\n    function ResourceDescription(key, exportedValue, resourceTypeMeta) {\r\n        if (!resourceTypeMeta) {\r\n            resourceTypeMeta = metadata.get(metadata.resource, exportedValue);\r\n            if (!resourceTypeMeta) {\r\n                resourceTypeMeta = new HtmlBehaviorResource();\r\n                resourceTypeMeta.elementName = _hyphenate(key);\r\n                metadata.define(metadata.resource, resourceTypeMeta, exportedValue);\r\n            }\r\n        }\r\n        if (resourceTypeMeta instanceof HtmlBehaviorResource) {\r\n            if (resourceTypeMeta.elementName === undefined) {\r\n                resourceTypeMeta.elementName = _hyphenate(key);\r\n            }\r\n            else if (resourceTypeMeta.attributeName === undefined) {\r\n                resourceTypeMeta.attributeName = _hyphenate(key);\r\n            }\r\n            else if (resourceTypeMeta.attributeName === null && resourceTypeMeta.elementName === null) {\r\n                HtmlBehaviorResource.convention(key, resourceTypeMeta);\r\n            }\r\n        }\r\n        else if (!resourceTypeMeta.name) {\r\n            resourceTypeMeta.name = _hyphenate(key);\r\n        }\r\n        this.metadata = resourceTypeMeta;\r\n        this.value = exportedValue;\r\n    }\r\n    ResourceDescription.prototype.initialize = function (container) {\r\n        this.metadata.initialize(container, this.value);\r\n    };\r\n    ResourceDescription.prototype.register = function (registry, name) {\r\n        this.metadata.register(registry, name);\r\n    };\r\n    ResourceDescription.prototype.load = function (container, loadContext) {\r\n        return this.metadata.load(container, this.value, loadContext);\r\n    };\r\n    return ResourceDescription;\r\n}());\r\nvar ModuleAnalyzer = (function () {\r\n    function ModuleAnalyzer() {\r\n        this.cache = Object.create(null);\r\n    }\r\n    ModuleAnalyzer.prototype.getAnalysis = function (moduleId) {\r\n        return this.cache[moduleId];\r\n    };\r\n    ModuleAnalyzer.prototype.analyze = function (moduleId, moduleInstance, mainResourceKey) {\r\n        var mainResource;\r\n        var fallbackValue;\r\n        var fallbackKey;\r\n        var resourceTypeMeta;\r\n        var key;\r\n        var exportedValue;\r\n        var resources = [];\r\n        var conventional;\r\n        var vs;\r\n        var resourceModule;\r\n        resourceModule = this.cache[moduleId];\r\n        if (resourceModule) {\r\n            return resourceModule;\r\n        }\r\n        resourceModule = new ResourceModule(moduleId);\r\n        this.cache[moduleId] = resourceModule;\r\n        if (typeof moduleInstance === 'function') {\r\n            moduleInstance = { 'default': moduleInstance };\r\n        }\r\n        if (mainResourceKey) {\r\n            mainResource = new ResourceDescription(mainResourceKey, moduleInstance[mainResourceKey]);\r\n        }\r\n        for (key in moduleInstance) {\r\n            exportedValue = moduleInstance[key];\r\n            if (key === mainResourceKey || typeof exportedValue !== 'function') {\r\n                continue;\r\n            }\r\n            resourceTypeMeta = metadata.get(metadata.resource, exportedValue);\r\n            if (resourceTypeMeta) {\r\n                if (resourceTypeMeta instanceof HtmlBehaviorResource) {\r\n                    ViewResources.convention(exportedValue, resourceTypeMeta);\r\n                    if (resourceTypeMeta.attributeName === null && resourceTypeMeta.elementName === null) {\r\n                        HtmlBehaviorResource.convention(key, resourceTypeMeta);\r\n                    }\r\n                    if (resourceTypeMeta.attributeName === null && resourceTypeMeta.elementName === null) {\r\n                        resourceTypeMeta.elementName = _hyphenate(key);\r\n                    }\r\n                }\r\n                if (!mainResource && resourceTypeMeta instanceof HtmlBehaviorResource && resourceTypeMeta.elementName !== null) {\r\n                    mainResource = new ResourceDescription(key, exportedValue, resourceTypeMeta);\r\n                }\r\n                else {\r\n                    resources.push(new ResourceDescription(key, exportedValue, resourceTypeMeta));\r\n                }\r\n            }\r\n            else if (viewStrategy.decorates(exportedValue)) {\r\n                vs = exportedValue;\r\n            }\r\n            else if (exportedValue instanceof TemplateRegistryEntry) {\r\n                vs = new TemplateRegistryViewStrategy(moduleId, exportedValue);\r\n            }\r\n            else {\r\n                if (conventional = ViewResources.convention(exportedValue)) {\r\n                    if (conventional.elementName !== null && !mainResource) {\r\n                        mainResource = new ResourceDescription(key, exportedValue, conventional);\r\n                    }\r\n                    else {\r\n                        resources.push(new ResourceDescription(key, exportedValue, conventional));\r\n                    }\r\n                    metadata.define(metadata.resource, conventional, exportedValue);\r\n                }\r\n                else if (conventional = HtmlBehaviorResource.convention(key)) {\r\n                    if (conventional.elementName !== null && !mainResource) {\r\n                        mainResource = new ResourceDescription(key, exportedValue, conventional);\r\n                    }\r\n                    else {\r\n                        resources.push(new ResourceDescription(key, exportedValue, conventional));\r\n                    }\r\n                    metadata.define(metadata.resource, conventional, exportedValue);\r\n                }\r\n                else if (conventional = ValueConverterResource.convention(key)\r\n                    || BindingBehaviorResource.convention(key)\r\n                    || ViewEngineHooksResource.convention(key)) {\r\n                    resources.push(new ResourceDescription(key, exportedValue, conventional));\r\n                    metadata.define(metadata.resource, conventional, exportedValue);\r\n                }\r\n                else if (!fallbackValue) {\r\n                    fallbackValue = exportedValue;\r\n                    fallbackKey = key;\r\n                }\r\n            }\r\n        }\r\n        if (!mainResource && fallbackValue) {\r\n            mainResource = new ResourceDescription(fallbackKey, fallbackValue);\r\n        }\r\n        resourceModule.moduleInstance = moduleInstance;\r\n        resourceModule.mainResource = mainResource;\r\n        resourceModule.resources = resources;\r\n        resourceModule.viewStrategy = vs;\r\n        return resourceModule;\r\n    };\r\n    return ModuleAnalyzer;\r\n}());\n\nvar logger = LogManager.getLogger('templating');\r\nfunction ensureRegistryEntry(loader, urlOrRegistryEntry) {\r\n    if (urlOrRegistryEntry instanceof TemplateRegistryEntry) {\r\n        return Promise.resolve(urlOrRegistryEntry);\r\n    }\r\n    return loader.loadTemplate(urlOrRegistryEntry);\r\n}\r\nvar ProxyViewFactory = (function () {\r\n    function ProxyViewFactory(promise) {\r\n        var _this = this;\r\n        promise.then(function (x) { return _this.viewFactory = x; });\r\n    }\r\n    ProxyViewFactory.prototype.create = function (container, bindingContext, createInstruction, element) {\r\n        return this.viewFactory.create(container, bindingContext, createInstruction, element);\r\n    };\r\n    Object.defineProperty(ProxyViewFactory.prototype, \"isCaching\", {\r\n        get: function () {\r\n            return this.viewFactory.isCaching;\r\n        },\r\n        enumerable: false,\r\n        configurable: true\r\n    });\r\n    ProxyViewFactory.prototype.setCacheSize = function (size, doNotOverrideIfAlreadySet) {\r\n        this.viewFactory.setCacheSize(size, doNotOverrideIfAlreadySet);\r\n    };\r\n    ProxyViewFactory.prototype.getCachedView = function () {\r\n        return this.viewFactory.getCachedView();\r\n    };\r\n    ProxyViewFactory.prototype.returnViewToCache = function (view) {\r\n        this.viewFactory.returnViewToCache(view);\r\n    };\r\n    return ProxyViewFactory;\r\n}());\r\nvar auSlotBehavior = null;\r\nvar ViewEngine = (function () {\r\n    function ViewEngine(loader, container, viewCompiler, moduleAnalyzer, appResources) {\r\n        this.loader = loader;\r\n        this.container = container;\r\n        this.viewCompiler = viewCompiler;\r\n        this.moduleAnalyzer = moduleAnalyzer;\r\n        this.appResources = appResources;\r\n        this._pluginMap = {};\r\n        if (auSlotBehavior === null) {\r\n            auSlotBehavior = new HtmlBehaviorResource();\r\n            auSlotBehavior.attributeName = 'au-slot';\r\n            metadata.define(metadata.resource, auSlotBehavior, SlotCustomAttribute);\r\n        }\r\n        auSlotBehavior.initialize(container, SlotCustomAttribute);\r\n        auSlotBehavior.register(appResources);\r\n    }\r\n    ViewEngine.inject = function () {\r\n        return [Loader, Container, ViewCompiler, ModuleAnalyzer, ViewResources];\r\n    };\r\n    ViewEngine.prototype.addResourcePlugin = function (extension, implementation) {\r\n        var name = extension.replace('.', '') + '-resource-plugin';\r\n        this._pluginMap[extension] = name;\r\n        this.loader.addPlugin(name, implementation);\r\n    };\r\n    ViewEngine.prototype.loadViewFactory = function (urlOrRegistryEntry, compileInstruction, loadContext, target) {\r\n        var _this = this;\r\n        loadContext = loadContext || new ResourceLoadContext();\r\n        return ensureRegistryEntry(this.loader, urlOrRegistryEntry).then(function (registryEntry) {\r\n            var url = registryEntry.address;\r\n            if (registryEntry.onReady) {\r\n                if (!loadContext.hasDependency(url)) {\r\n                    loadContext.addDependency(url);\r\n                    return registryEntry.onReady;\r\n                }\r\n                if (registryEntry.template === null) {\r\n                    return registryEntry.onReady;\r\n                }\r\n                return Promise.resolve(new ProxyViewFactory(registryEntry.onReady));\r\n            }\r\n            loadContext.addDependency(url);\r\n            registryEntry.onReady = _this.loadTemplateResources(registryEntry, compileInstruction, loadContext, target).then(function (resources) {\r\n                registryEntry.resources = resources;\r\n                if (registryEntry.template === null) {\r\n                    return registryEntry.factory = null;\r\n                }\r\n                var viewFactory = _this.viewCompiler.compile(registryEntry.template, resources, compileInstruction);\r\n                return registryEntry.factory = viewFactory;\r\n            });\r\n            return registryEntry.onReady;\r\n        });\r\n    };\r\n    ViewEngine.prototype.loadTemplateResources = function (registryEntry, compileInstruction, loadContext, target) {\r\n        var resources = new ViewResources(this.appResources, registryEntry.address);\r\n        var dependencies = registryEntry.dependencies;\r\n        var importIds;\r\n        var names;\r\n        compileInstruction = compileInstruction || ViewCompileInstruction.normal;\r\n        if (dependencies.length === 0 && !compileInstruction.associatedModuleId) {\r\n            return Promise.resolve(resources);\r\n        }\r\n        importIds = dependencies.map(function (x) { return x.src; });\r\n        names = dependencies.map(function (x) { return x.name; });\r\n        logger.debug(\"importing resources for \".concat(registryEntry.address), importIds);\r\n        if (target) {\r\n            var viewModelRequires = metadata.get(ViewEngine.viewModelRequireMetadataKey, target);\r\n            if (viewModelRequires) {\r\n                var templateImportCount = importIds.length;\r\n                for (var i = 0, ii = viewModelRequires.length; i < ii; ++i) {\r\n                    var req = viewModelRequires[i];\r\n                    var importId = typeof req === 'function'\r\n                        ? Origin.get(req).moduleId\r\n                        : relativeToFile(req.src || req, registryEntry.address);\r\n                    if (importIds.indexOf(importId) === -1) {\r\n                        importIds.push(importId);\r\n                        names.push(req.as);\r\n                    }\r\n                }\r\n                logger.debug(\"importing ViewModel resources for \".concat(compileInstruction.associatedModuleId), importIds.slice(templateImportCount));\r\n            }\r\n        }\r\n        return this.importViewResources(importIds, names, resources, compileInstruction, loadContext);\r\n    };\r\n    ViewEngine.prototype.importViewModelResource = function (moduleImport, moduleMember) {\r\n        var _this = this;\r\n        return this.loader.loadModule(moduleImport).then(function (viewModelModule) {\r\n            var normalizedId = Origin.get(viewModelModule).moduleId;\r\n            var resourceModule = _this.moduleAnalyzer.analyze(normalizedId, viewModelModule, moduleMember);\r\n            if (!resourceModule.mainResource) {\r\n                throw new Error(\"No view model found in module \\\"\".concat(moduleImport, \"\\\".\"));\r\n            }\r\n            resourceModule.initialize(_this.container);\r\n            return resourceModule.mainResource;\r\n        });\r\n    };\r\n    ViewEngine.prototype.importViewResources = function (moduleIds, names, resources, compileInstruction, loadContext) {\r\n        var _this = this;\r\n        loadContext = loadContext || new ResourceLoadContext();\r\n        compileInstruction = compileInstruction || ViewCompileInstruction.normal;\r\n        moduleIds = moduleIds.map(function (x) { return _this._applyLoaderPlugin(x); });\r\n        return this.loader.loadAllModules(moduleIds).then(function (imports) {\r\n            var i;\r\n            var ii;\r\n            var analysis;\r\n            var normalizedId;\r\n            var current;\r\n            var associatedModule;\r\n            var container = _this.container;\r\n            var moduleAnalyzer = _this.moduleAnalyzer;\r\n            var allAnalysis = new Array(imports.length);\r\n            for (i = 0, ii = imports.length; i < ii; ++i) {\r\n                current = imports[i];\r\n                normalizedId = Origin.get(current).moduleId;\r\n                analysis = moduleAnalyzer.analyze(normalizedId, current);\r\n                analysis.initialize(container);\r\n                analysis.register(resources, names[i]);\r\n                allAnalysis[i] = analysis;\r\n            }\r\n            if (compileInstruction.associatedModuleId) {\r\n                associatedModule = moduleAnalyzer.getAnalysis(compileInstruction.associatedModuleId);\r\n                if (associatedModule) {\r\n                    associatedModule.register(resources);\r\n                }\r\n            }\r\n            for (i = 0, ii = allAnalysis.length; i < ii; ++i) {\r\n                allAnalysis[i] = allAnalysis[i].load(container, loadContext);\r\n            }\r\n            return Promise.all(allAnalysis).then(function () { return resources; });\r\n        });\r\n    };\r\n    ViewEngine.prototype._applyLoaderPlugin = function (id) {\r\n        var index = id.lastIndexOf('.');\r\n        if (index !== -1) {\r\n            var ext = id.substring(index);\r\n            var pluginName = this._pluginMap[ext];\r\n            if (pluginName === undefined) {\r\n                return id;\r\n            }\r\n            return this.loader.applyPluginToUrl(id, pluginName);\r\n        }\r\n        return id;\r\n    };\r\n    ViewEngine.viewModelRequireMetadataKey = 'aurelia:view-model-require';\r\n    return ViewEngine;\r\n}());\n\nvar Controller = (function () {\r\n    function Controller(behavior, instruction, viewModel, container) {\r\n        this.behavior = behavior;\r\n        this.instruction = instruction;\r\n        this.viewModel = viewModel;\r\n        this.isAttached = false;\r\n        this.view = null;\r\n        this.isBound = false;\r\n        this.scope = null;\r\n        this.container = container;\r\n        this.elementEvents = container.elementEvents || null;\r\n        var observerLookup = behavior.observerLocator.getOrCreateObserversLookup(viewModel);\r\n        var handlesBind = behavior.handlesBind;\r\n        var attributes = instruction.attributes;\r\n        var boundProperties = this.boundProperties = [];\r\n        var properties = behavior.properties;\r\n        var i;\r\n        var ii;\r\n        behavior._ensurePropertiesDefined(viewModel, observerLookup);\r\n        for (i = 0, ii = properties.length; i < ii; ++i) {\r\n            properties[i]._initialize(viewModel, observerLookup, attributes, handlesBind, boundProperties);\r\n        }\r\n    }\r\n    Controller.prototype.created = function (owningView) {\r\n        if (this.behavior.handlesCreated) {\r\n            this.viewModel.created(owningView, this.view);\r\n        }\r\n    };\r\n    Controller.prototype.automate = function (overrideContext, owningView) {\r\n        this.view.bindingContext = this.viewModel;\r\n        this.view.overrideContext = overrideContext || createOverrideContext(this.viewModel);\r\n        this.view._isUserControlled = true;\r\n        if (this.behavior.handlesCreated) {\r\n            this.viewModel.created(owningView || null, this.view);\r\n        }\r\n        this.bind(this.view);\r\n    };\r\n    Controller.prototype.bind = function (scope) {\r\n        var skipSelfSubscriber = this.behavior.handlesBind;\r\n        var boundProperties = this.boundProperties;\r\n        var i;\r\n        var ii;\r\n        var x;\r\n        var observer;\r\n        var selfSubscriber;\r\n        if (this.isBound) {\r\n            if (this.scope === scope) {\r\n                return;\r\n            }\r\n            this.unbind();\r\n        }\r\n        this.isBound = true;\r\n        this.scope = scope;\r\n        for (i = 0, ii = boundProperties.length; i < ii; ++i) {\r\n            x = boundProperties[i];\r\n            observer = x.observer;\r\n            selfSubscriber = observer.selfSubscriber;\r\n            observer.publishing = false;\r\n            if (skipSelfSubscriber) {\r\n                observer.selfSubscriber = null;\r\n            }\r\n            x.binding.bind(scope);\r\n            observer.call();\r\n            observer.publishing = true;\r\n            observer.selfSubscriber = selfSubscriber;\r\n        }\r\n        var overrideContext;\r\n        if (this.view !== null) {\r\n            if (skipSelfSubscriber) {\r\n                this.view.viewModelScope = scope;\r\n            }\r\n            if (this.viewModel === scope.overrideContext.bindingContext) {\r\n                overrideContext = scope.overrideContext;\r\n            }\r\n            else if (this.instruction.inheritBindingContext) {\r\n                overrideContext = createOverrideContext(this.viewModel, scope.overrideContext);\r\n            }\r\n            else {\r\n                overrideContext = createOverrideContext(this.viewModel);\r\n                overrideContext.__parentOverrideContext = scope.overrideContext;\r\n            }\r\n            this.view.bind(this.viewModel, overrideContext);\r\n        }\r\n        else if (skipSelfSubscriber) {\r\n            overrideContext = scope.overrideContext;\r\n            if (scope.overrideContext.__parentOverrideContext !== undefined\r\n                && this.viewModel.viewFactory && this.viewModel.viewFactory.factoryCreateInstruction.partReplacements) {\r\n                overrideContext = Object.assign({}, scope.overrideContext);\r\n                overrideContext.parentOverrideContext = scope.overrideContext.__parentOverrideContext;\r\n            }\r\n            this.viewModel.bind(scope.bindingContext, overrideContext);\r\n        }\r\n    };\r\n    Controller.prototype.unbind = function () {\r\n        if (this.isBound) {\r\n            var boundProperties = this.boundProperties;\r\n            var i = void 0;\r\n            var ii = void 0;\r\n            this.isBound = false;\r\n            this.scope = null;\r\n            if (this.view !== null) {\r\n                this.view.unbind();\r\n            }\r\n            if (this.behavior.handlesUnbind) {\r\n                this.viewModel.unbind();\r\n            }\r\n            if (this.elementEvents !== null) {\r\n                this.elementEvents.disposeAll();\r\n            }\r\n            for (i = 0, ii = boundProperties.length; i < ii; ++i) {\r\n                boundProperties[i].binding.unbind();\r\n            }\r\n        }\r\n    };\r\n    Controller.prototype.attached = function () {\r\n        if (this.isAttached) {\r\n            return;\r\n        }\r\n        this.isAttached = true;\r\n        if (this.behavior.handlesAttached) {\r\n            this.viewModel.attached();\r\n        }\r\n        if (this.view !== null) {\r\n            this.view.attached();\r\n        }\r\n    };\r\n    Controller.prototype.detached = function () {\r\n        if (this.isAttached) {\r\n            this.isAttached = false;\r\n            if (this.view !== null) {\r\n                this.view.detached();\r\n            }\r\n            if (this.behavior.handlesDetached) {\r\n                this.viewModel.detached();\r\n            }\r\n        }\r\n    };\r\n    return Controller;\r\n}());\n\nvar lastProviderId = 0;\r\nfunction nextProviderId() {\r\n    return ++lastProviderId;\r\n}\r\nfunction doProcessContent() { return true; }\r\nfunction doProcessAttributes() { }\r\nvar HtmlBehaviorResource = (function () {\r\n    function HtmlBehaviorResource() {\r\n        this.elementName = null;\r\n        this.attributeName = null;\r\n        this.attributeDefaultBindingMode = undefined;\r\n        this.liftsContent = false;\r\n        this.targetShadowDOM = false;\r\n        this.shadowDOMOptions = null;\r\n        this.processAttributes = doProcessAttributes;\r\n        this.processContent = doProcessContent;\r\n        this.usesShadowDOM = false;\r\n        this.childBindings = null;\r\n        this.hasDynamicOptions = false;\r\n        this.containerless = false;\r\n        this.properties = [];\r\n        this.attributes = {};\r\n        this.isInitialized = false;\r\n        this.primaryProperty = null;\r\n    }\r\n    HtmlBehaviorResource.convention = function (name, existing) {\r\n        var behavior;\r\n        if (name.endsWith('CustomAttribute')) {\r\n            behavior = existing || new HtmlBehaviorResource();\r\n            behavior.attributeName = _hyphenate(name.substring(0, name.length - 15));\r\n        }\r\n        if (name.endsWith('CustomElement')) {\r\n            behavior = existing || new HtmlBehaviorResource();\r\n            behavior.elementName = _hyphenate(name.substring(0, name.length - 13));\r\n        }\r\n        return behavior;\r\n    };\r\n    HtmlBehaviorResource.prototype.addChildBinding = function (behavior) {\r\n        if (this.childBindings === null) {\r\n            this.childBindings = [];\r\n        }\r\n        this.childBindings.push(behavior);\r\n    };\r\n    HtmlBehaviorResource.prototype.initialize = function (container, target) {\r\n        var proto = target.prototype;\r\n        var properties = this.properties;\r\n        var attributeName = this.attributeName;\r\n        var attributeDefaultBindingMode = this.attributeDefaultBindingMode;\r\n        var i;\r\n        var ii;\r\n        var current;\r\n        if (this.isInitialized) {\r\n            return;\r\n        }\r\n        this.isInitialized = true;\r\n        target.__providerId__ = nextProviderId();\r\n        this.observerLocator = container.get(ObserverLocator);\r\n        this.taskQueue = container.get(TaskQueue);\r\n        this.target = target;\r\n        this.usesShadowDOM = this.targetShadowDOM && FEATURE.shadowDOM;\r\n        this.handlesCreated = ('created' in proto);\r\n        this.handlesBind = ('bind' in proto);\r\n        this.handlesUnbind = ('unbind' in proto);\r\n        this.handlesAttached = ('attached' in proto);\r\n        this.handlesDetached = ('detached' in proto);\r\n        this.htmlName = this.elementName || this.attributeName;\r\n        if (attributeName !== null) {\r\n            if (properties.length === 0) {\r\n                new BindableProperty({\r\n                    name: 'value',\r\n                    changeHandler: 'valueChanged' in proto ? 'valueChanged' : null,\r\n                    attribute: attributeName,\r\n                    defaultBindingMode: attributeDefaultBindingMode\r\n                }).registerWith(target, this);\r\n            }\r\n            current = properties[0];\r\n            if (properties.length === 1 && current.name === 'value') {\r\n                current.isDynamic = current.hasOptions = this.hasDynamicOptions;\r\n                current.defineOn(target, this);\r\n            }\r\n            else {\r\n                for (i = 0, ii = properties.length; i < ii; ++i) {\r\n                    properties[i].defineOn(target, this);\r\n                    if (properties[i].primaryProperty) {\r\n                        if (this.primaryProperty) {\r\n                            throw new Error('Only one bindable property on a custom element can be defined as the default');\r\n                        }\r\n                        this.primaryProperty = properties[i];\r\n                    }\r\n                }\r\n                current = new BindableProperty({\r\n                    name: 'value',\r\n                    changeHandler: 'valueChanged' in proto ? 'valueChanged' : null,\r\n                    attribute: attributeName,\r\n                    defaultBindingMode: attributeDefaultBindingMode\r\n                });\r\n                current.hasOptions = true;\r\n                current.registerWith(target, this);\r\n            }\r\n        }\r\n        else {\r\n            for (i = 0, ii = properties.length; i < ii; ++i) {\r\n                properties[i].defineOn(target, this);\r\n            }\r\n            this._copyInheritedProperties(container, target);\r\n        }\r\n    };\r\n    HtmlBehaviorResource.prototype.register = function (registry, name) {\r\n        var _this = this;\r\n        if (this.attributeName !== null) {\r\n            registry.registerAttribute(name || this.attributeName, this, this.attributeName);\r\n            if (Array.isArray(this.aliases)) {\r\n                this.aliases\r\n                    .forEach(function (alias) {\r\n                    registry.registerAttribute(alias, _this, _this.attributeName);\r\n                });\r\n            }\r\n        }\r\n        if (this.elementName !== null) {\r\n            registry.registerElement(name || this.elementName, this);\r\n        }\r\n    };\r\n    HtmlBehaviorResource.prototype.aliases = function (aliases) {\r\n        throw new Error('Method not implemented.');\r\n    };\r\n    HtmlBehaviorResource.prototype.load = function (container, target, loadContext, viewStrategy, transientView) {\r\n        var _this = this;\r\n        var options;\r\n        if (this.elementName !== null) {\r\n            viewStrategy = container.get(ViewLocator).getViewStrategy(viewStrategy || this.viewStrategy || target);\r\n            options = new ViewCompileInstruction(this.targetShadowDOM, true);\r\n            if (!viewStrategy.moduleId) {\r\n                viewStrategy.moduleId = Origin.get(target).moduleId;\r\n            }\r\n            return viewStrategy\r\n                .loadViewFactory(container.get(ViewEngine), options, loadContext, target)\r\n                .then(function (viewFactory) {\r\n                if (!transientView || !_this.viewFactory) {\r\n                    _this.viewFactory = viewFactory;\r\n                }\r\n                return viewFactory;\r\n            });\r\n        }\r\n        return Promise.resolve(this);\r\n    };\r\n    HtmlBehaviorResource.prototype.compile = function (compiler, resources, node, instruction, parentNode) {\r\n        if (this.liftsContent) {\r\n            if (!instruction.viewFactory) {\r\n                var template = DOM.createElement('template');\r\n                var fragment = DOM.createDocumentFragment();\r\n                var cacheSize = node.getAttribute('view-cache');\r\n                var part = node.getAttribute('part');\r\n                node.removeAttribute(instruction.originalAttrName);\r\n                DOM.replaceNode(template, node, parentNode);\r\n                fragment.appendChild(node);\r\n                instruction.viewFactory = compiler.compile(fragment, resources);\r\n                if (part) {\r\n                    instruction.viewFactory.part = part;\r\n                    node.removeAttribute('part');\r\n                }\r\n                if (cacheSize) {\r\n                    instruction.viewFactory.setCacheSize(cacheSize);\r\n                    node.removeAttribute('view-cache');\r\n                }\r\n                node = template;\r\n            }\r\n        }\r\n        else if (this.elementName !== null) {\r\n            var partReplacements = {};\r\n            if (this.processContent(compiler, resources, node, instruction) && node.hasChildNodes()) {\r\n                var currentChild = node.firstChild;\r\n                var contentElement = this.usesShadowDOM ? null : DOM.createElement('au-content');\r\n                var nextSibling = void 0;\r\n                var toReplace = void 0;\r\n                while (currentChild) {\r\n                    nextSibling = currentChild.nextSibling;\r\n                    if (currentChild.tagName === 'TEMPLATE' && (toReplace = currentChild.getAttribute('replace-part'))) {\r\n                        partReplacements[toReplace] = compiler.compile(currentChild, resources);\r\n                        DOM.removeNode(currentChild, parentNode);\r\n                        instruction.partReplacements = partReplacements;\r\n                    }\r\n                    else if (contentElement !== null) {\r\n                        if (currentChild.nodeType === 3 && _isAllWhitespace(currentChild)) {\r\n                            DOM.removeNode(currentChild, parentNode);\r\n                        }\r\n                        else {\r\n                            contentElement.appendChild(currentChild);\r\n                        }\r\n                    }\r\n                    currentChild = nextSibling;\r\n                }\r\n                if (contentElement !== null && contentElement.hasChildNodes()) {\r\n                    node.appendChild(contentElement);\r\n                }\r\n                instruction.skipContentProcessing = false;\r\n            }\r\n            else {\r\n                instruction.skipContentProcessing = true;\r\n            }\r\n        }\r\n        else if (!this.processContent(compiler, resources, node, instruction)) {\r\n            instruction.skipContentProcessing = true;\r\n        }\r\n        return node;\r\n    };\r\n    HtmlBehaviorResource.prototype.create = function (container, instruction, element, bindings) {\r\n        var viewHost;\r\n        var au = null;\r\n        instruction = instruction || BehaviorInstruction.normal;\r\n        element = element || null;\r\n        bindings = bindings || null;\r\n        if (this.elementName !== null && element) {\r\n            if (this.usesShadowDOM) {\r\n                viewHost = element.attachShadow(this.shadowDOMOptions);\r\n                container.registerInstance(DOM.boundary, viewHost);\r\n            }\r\n            else {\r\n                viewHost = element;\r\n                if (this.targetShadowDOM) {\r\n                    container.registerInstance(DOM.boundary, viewHost);\r\n                }\r\n            }\r\n        }\r\n        if (element !== null) {\r\n            element.au = au = element.au || {};\r\n        }\r\n        var viewModel = instruction.viewModel || container.get(this.target);\r\n        var controller = new Controller(this, instruction, viewModel, container);\r\n        var childBindings = this.childBindings;\r\n        var viewFactory;\r\n        if (this.liftsContent) {\r\n            au.controller = controller;\r\n        }\r\n        else if (this.elementName !== null) {\r\n            viewFactory = instruction.viewFactory || this.viewFactory;\r\n            container.viewModel = viewModel;\r\n            if (viewFactory) {\r\n                controller.view = viewFactory.create(container, instruction, element);\r\n            }\r\n            if (element !== null) {\r\n                au.controller = controller;\r\n                if (controller.view) {\r\n                    if (!this.usesShadowDOM && (element.childNodes.length === 1 || element.contentElement)) {\r\n                        var contentElement = element.childNodes[0] || element.contentElement;\r\n                        controller.view.contentView = { fragment: contentElement };\r\n                        contentElement.parentNode && DOM.removeNode(contentElement);\r\n                    }\r\n                    if (instruction.anchorIsContainer) {\r\n                        if (childBindings !== null) {\r\n                            for (var i = 0, ii = childBindings.length; i < ii; ++i) {\r\n                                controller.view.addBinding(childBindings[i].create(element, viewModel, controller));\r\n                            }\r\n                        }\r\n                        controller.view.appendNodesTo(viewHost);\r\n                    }\r\n                    else {\r\n                        controller.view.insertNodesBefore(viewHost);\r\n                    }\r\n                }\r\n                else if (childBindings !== null) {\r\n                    for (var i = 0, ii = childBindings.length; i < ii; ++i) {\r\n                        bindings.push(childBindings[i].create(element, viewModel, controller));\r\n                    }\r\n                }\r\n            }\r\n            else if (controller.view) {\r\n                controller.view.controller = controller;\r\n                if (childBindings !== null) {\r\n                    for (var i = 0, ii = childBindings.length; i < ii; ++i) {\r\n                        controller.view.addBinding(childBindings[i].create(instruction.host, viewModel, controller));\r\n                    }\r\n                }\r\n            }\r\n            else if (childBindings !== null) {\r\n                for (var i = 0, ii = childBindings.length; i < ii; ++i) {\r\n                    bindings.push(childBindings[i].create(instruction.host, viewModel, controller));\r\n                }\r\n            }\r\n        }\r\n        else if (childBindings !== null) {\r\n            for (var i = 0, ii = childBindings.length; i < ii; ++i) {\r\n                bindings.push(childBindings[i].create(element, viewModel, controller));\r\n            }\r\n        }\r\n        if (au !== null) {\r\n            au[this.htmlName] = controller;\r\n        }\r\n        if (instruction.initiatedByBehavior && viewFactory) {\r\n            controller.view.created();\r\n        }\r\n        return controller;\r\n    };\r\n    HtmlBehaviorResource.prototype._ensurePropertiesDefined = function (instance, lookup) {\r\n        var properties;\r\n        var i;\r\n        var ii;\r\n        var observer;\r\n        if ('__propertiesDefined__' in lookup) {\r\n            return;\r\n        }\r\n        lookup.__propertiesDefined__ = true;\r\n        properties = this.properties;\r\n        for (i = 0, ii = properties.length; i < ii; ++i) {\r\n            observer = properties[i].createObserver(instance);\r\n            if (observer !== undefined) {\r\n                lookup[observer.propertyName] = observer;\r\n            }\r\n        }\r\n    };\r\n    HtmlBehaviorResource.prototype._copyInheritedProperties = function (container, target) {\r\n        var behavior;\r\n        var derived = target;\r\n        while (true) {\r\n            var proto = Object.getPrototypeOf(target.prototype);\r\n            target = proto && proto.constructor;\r\n            if (!target) {\r\n                return;\r\n            }\r\n            behavior = metadata.getOwn(metadata.resource, target);\r\n            if (behavior) {\r\n                break;\r\n            }\r\n        }\r\n        behavior.initialize(container, target);\r\n        var _loop_1 = function (i, ii) {\r\n            var prop = behavior.properties[i];\r\n            if (this_1.properties.some(function (p) { return p.name === prop.name; })) {\r\n                return \"continue\";\r\n            }\r\n            new BindableProperty(prop).registerWith(derived, this_1);\r\n        };\r\n        var this_1 = this;\r\n        for (var i = 0, ii = behavior.properties.length; i < ii; ++i) {\r\n            _loop_1(i);\r\n        }\r\n    };\r\n    return HtmlBehaviorResource;\r\n}());\n\nfunction register(lookup, name, resource, type) {\r\n    if (!name) {\r\n        return;\r\n    }\r\n    var existing = lookup[name];\r\n    if (existing) {\r\n        if (existing !== resource) {\r\n            throw new Error(\"Attempted to register \".concat(type, \" when one with the same name already exists. Name: \").concat(name, \".\"));\r\n        }\r\n        return;\r\n    }\r\n    lookup[name] = resource;\r\n}\r\nfunction validateBehaviorName(name, type) {\r\n    if (/[A-Z]/.test(name)) {\r\n        var newName = _hyphenate(name);\r\n        LogManager\r\n            .getLogger('templating')\r\n            .warn(\"'\".concat(name, \"' is not a valid \").concat(type, \" name and has been converted to '\").concat(newName, \"'. Upper-case letters are not allowed because the DOM is not case-sensitive.\"));\r\n        return newName;\r\n    }\r\n    return name;\r\n}\r\nvar conventionMark = '__au_resource__';\r\nvar ViewResources = (function () {\r\n    function ViewResources(parent, viewUrl) {\r\n        this.bindingLanguage = null;\r\n        this.parent = parent || null;\r\n        this.hasParent = this.parent !== null;\r\n        this.viewUrl = viewUrl || '';\r\n        this.lookupFunctions = {\r\n            valueConverters: this.getValueConverter.bind(this),\r\n            bindingBehaviors: this.getBindingBehavior.bind(this)\r\n        };\r\n        this.attributes = Object.create(null);\r\n        this.elements = Object.create(null);\r\n        this.valueConverters = Object.create(null);\r\n        this.bindingBehaviors = Object.create(null);\r\n        this.attributeMap = Object.create(null);\r\n        this.values = Object.create(null);\r\n        this.beforeCompile = this.afterCompile = this.beforeCreate = this.afterCreate = this.beforeBind = this.beforeUnbind = false;\r\n    }\r\n    ViewResources.convention = function (target, existing) {\r\n        var resource;\r\n        if (existing && conventionMark in existing) {\r\n            return existing;\r\n        }\r\n        if ('$resource' in target) {\r\n            var config = target.$resource;\r\n            if (typeof config === 'string') {\r\n                resource = existing || new HtmlBehaviorResource();\r\n                resource[conventionMark] = true;\r\n                if (!resource.elementName) {\r\n                    resource.elementName = validateBehaviorName(config, 'custom element');\r\n                }\r\n            }\r\n            else {\r\n                if (typeof config === 'function') {\r\n                    config = config.call(target);\r\n                }\r\n                if (typeof config === 'string') {\r\n                    config = { name: config };\r\n                }\r\n                config = Object.assign({}, config);\r\n                var resourceType = config.type || 'element';\r\n                var name_1 = config.name;\r\n                switch (resourceType) {\r\n                    case 'element':\r\n                    case 'attribute':\r\n                        resource = existing || new HtmlBehaviorResource();\r\n                        resource[conventionMark] = true;\r\n                        if (resourceType === 'element') {\r\n                            if (!resource.elementName) {\r\n                                resource.elementName = name_1\r\n                                    ? validateBehaviorName(name_1, 'custom element')\r\n                                    : _hyphenate(target.name);\r\n                            }\r\n                        }\r\n                        else {\r\n                            if (!resource.attributeName) {\r\n                                resource.attributeName = name_1\r\n                                    ? validateBehaviorName(name_1, 'custom attribute')\r\n                                    : _hyphenate(target.name);\r\n                            }\r\n                        }\r\n                        if ('templateController' in config) {\r\n                            config.liftsContent = config.templateController;\r\n                            delete config.templateController;\r\n                        }\r\n                        if ('defaultBindingMode' in config && resource.attributeDefaultBindingMode !== undefined) {\r\n                            config.attributeDefaultBindingMode = config.defaultBindingMode;\r\n                            delete config.defaultBindingMode;\r\n                        }\r\n                        delete config.name;\r\n                        Object.assign(resource, config);\r\n                        break;\r\n                    case 'valueConverter':\r\n                        resource = new ValueConverterResource(camelCase(name_1 || target.name));\r\n                        break;\r\n                    case 'bindingBehavior':\r\n                        resource = new BindingBehaviorResource(camelCase(name_1 || target.name));\r\n                        break;\r\n                    case 'viewEngineHooks':\r\n                        resource = new ViewEngineHooksResource();\r\n                        break;\r\n                }\r\n            }\r\n            if (resource instanceof HtmlBehaviorResource) {\r\n                var bindables = typeof config === 'string' ? undefined : config.bindables;\r\n                var currentProps = resource.properties;\r\n                if (Array.isArray(bindables)) {\r\n                    for (var i = 0, ii = bindables.length; ii > i; ++i) {\r\n                        var prop = bindables[i];\r\n                        if (!prop || (typeof prop !== 'string' && !prop.name)) {\r\n                            throw new Error(\"Invalid bindable property at \\\"\".concat(i, \"\\\" for class \\\"\").concat(target.name, \"\\\". Expected either a string or an object with \\\"name\\\" property.\"));\r\n                        }\r\n                        var newProp = new BindableProperty(prop);\r\n                        var existed = false;\r\n                        for (var j = 0, jj = currentProps.length; jj > j; ++j) {\r\n                            if (currentProps[j].name === newProp.name) {\r\n                                existed = true;\r\n                                break;\r\n                            }\r\n                        }\r\n                        if (existed) {\r\n                            continue;\r\n                        }\r\n                        newProp.registerWith(target, resource);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        return resource;\r\n    };\r\n    ViewResources.prototype._tryAddHook = function (obj, name) {\r\n        if (typeof obj[name] === 'function') {\r\n            var func = obj[name].bind(obj);\r\n            var counter = 1;\r\n            var callbackName = void 0;\r\n            while (this[callbackName = name + counter.toString()] !== undefined) {\r\n                counter++;\r\n            }\r\n            this[name] = true;\r\n            this[callbackName] = func;\r\n        }\r\n    };\r\n    ViewResources.prototype._invokeHook = function (name, one, two, three, four) {\r\n        if (this.hasParent) {\r\n            this.parent._invokeHook(name, one, two, three, four);\r\n        }\r\n        if (this[name]) {\r\n            this[name + '1'](one, two, three, four);\r\n            var callbackName = name + '2';\r\n            if (this[callbackName]) {\r\n                this[callbackName](one, two, three, four);\r\n                callbackName = name + '3';\r\n                if (this[callbackName]) {\r\n                    this[callbackName](one, two, three, four);\r\n                    var counter = 4;\r\n                    while (this[callbackName = name + counter.toString()] !== undefined) {\r\n                        this[callbackName](one, two, three, four);\r\n                        counter++;\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    };\r\n    ViewResources.prototype.registerViewEngineHooks = function (hooks) {\r\n        this._tryAddHook(hooks, 'beforeCompile');\r\n        this._tryAddHook(hooks, 'afterCompile');\r\n        this._tryAddHook(hooks, 'beforeCreate');\r\n        this._tryAddHook(hooks, 'afterCreate');\r\n        this._tryAddHook(hooks, 'beforeBind');\r\n        this._tryAddHook(hooks, 'beforeUnbind');\r\n    };\r\n    ViewResources.prototype.getBindingLanguage = function (bindingLanguageFallback) {\r\n        return this.bindingLanguage || (this.bindingLanguage = bindingLanguageFallback);\r\n    };\r\n    ViewResources.prototype.patchInParent = function (newParent) {\r\n        var originalParent = this.parent;\r\n        this.parent = newParent || null;\r\n        this.hasParent = this.parent !== null;\r\n        if (newParent.parent === null) {\r\n            newParent.parent = originalParent;\r\n            newParent.hasParent = originalParent !== null;\r\n        }\r\n    };\r\n    ViewResources.prototype.relativeToView = function (path) {\r\n        return relativeToFile(path, this.viewUrl);\r\n    };\r\n    ViewResources.prototype.registerElement = function (tagName, behavior) {\r\n        register(this.elements, tagName, behavior, 'an Element');\r\n    };\r\n    ViewResources.prototype.getElement = function (tagName) {\r\n        return this.elements[tagName] || (this.hasParent ? this.parent.getElement(tagName) : null);\r\n    };\r\n    ViewResources.prototype.mapAttribute = function (attribute) {\r\n        return this.attributeMap[attribute] || (this.hasParent ? this.parent.mapAttribute(attribute) : null);\r\n    };\r\n    ViewResources.prototype.registerAttribute = function (attribute, behavior, knownAttribute) {\r\n        this.attributeMap[attribute] = knownAttribute;\r\n        register(this.attributes, attribute, behavior, 'an Attribute');\r\n    };\r\n    ViewResources.prototype.getAttribute = function (attribute) {\r\n        return this.attributes[attribute] || (this.hasParent ? this.parent.getAttribute(attribute) : null);\r\n    };\r\n    ViewResources.prototype.registerValueConverter = function (name, valueConverter) {\r\n        register(this.valueConverters, name, valueConverter, 'a ValueConverter');\r\n    };\r\n    ViewResources.prototype.getValueConverter = function (name) {\r\n        return this.valueConverters[name] || (this.hasParent ? this.parent.getValueConverter(name) : null);\r\n    };\r\n    ViewResources.prototype.registerBindingBehavior = function (name, bindingBehavior) {\r\n        register(this.bindingBehaviors, name, bindingBehavior, 'a BindingBehavior');\r\n    };\r\n    ViewResources.prototype.getBindingBehavior = function (name) {\r\n        return this.bindingBehaviors[name] || (this.hasParent ? this.parent.getBindingBehavior(name) : null);\r\n    };\r\n    ViewResources.prototype.registerValue = function (name, value) {\r\n        register(this.values, name, value, 'a value');\r\n    };\r\n    ViewResources.prototype.getValue = function (name) {\r\n        return this.values[name] || (this.hasParent ? this.parent.getValue(name) : null);\r\n    };\r\n    ViewResources.prototype.autoRegister = function (container, impl) {\r\n        var resourceTypeMeta = metadata.getOwn(metadata.resource, impl);\r\n        if (resourceTypeMeta) {\r\n            if (resourceTypeMeta instanceof HtmlBehaviorResource) {\r\n                ViewResources.convention(impl, resourceTypeMeta);\r\n                if (resourceTypeMeta.attributeName === null && resourceTypeMeta.elementName === null) {\r\n                    HtmlBehaviorResource.convention(impl.name, resourceTypeMeta);\r\n                }\r\n                if (resourceTypeMeta.attributeName === null && resourceTypeMeta.elementName === null) {\r\n                    resourceTypeMeta.elementName = _hyphenate(impl.name);\r\n                }\r\n            }\r\n        }\r\n        else {\r\n            resourceTypeMeta = ViewResources.convention(impl)\r\n                || HtmlBehaviorResource.convention(impl.name)\r\n                || ValueConverterResource.convention(impl.name)\r\n                || BindingBehaviorResource.convention(impl.name)\r\n                || ViewEngineHooksResource.convention(impl.name);\r\n            if (!resourceTypeMeta) {\r\n                resourceTypeMeta = new HtmlBehaviorResource();\r\n                resourceTypeMeta.elementName = _hyphenate(impl.name);\r\n            }\r\n            metadata.define(metadata.resource, resourceTypeMeta, impl);\r\n        }\r\n        resourceTypeMeta.initialize(container, impl);\r\n        resourceTypeMeta.register(this, undefined);\r\n        return resourceTypeMeta;\r\n    };\r\n    return ViewResources;\r\n}());\n\nvar viewStrategy = protocol.create('aurelia:view-strategy', {\r\n    validate: function (target) {\r\n        if (!(typeof target.loadViewFactory === 'function')) {\r\n            return 'View strategies must implement: loadViewFactory(viewEngine: ViewEngine, compileInstruction: ViewCompileInstruction, loadContext?: ResourceLoadContext): Promise<ViewFactory>';\r\n        }\r\n        return true;\r\n    },\r\n    compose: function (target) {\r\n        if (!(typeof target.makeRelativeTo === 'function')) {\r\n            target.makeRelativeTo = PLATFORM.noop;\r\n        }\r\n    }\r\n});\r\nvar RelativeViewStrategy = (function () {\r\n    function RelativeViewStrategy(path) {\r\n        this.path = path;\r\n        this.absolutePath = null;\r\n    }\r\n    RelativeViewStrategy.prototype.loadViewFactory = function (viewEngine, compileInstruction, loadContext, target) {\r\n        if (this.absolutePath === null && this.moduleId) {\r\n            this.absolutePath = relativeToFile(this.path, this.moduleId);\r\n        }\r\n        compileInstruction.associatedModuleId = this.moduleId;\r\n        return viewEngine.loadViewFactory(this.absolutePath || this.path, compileInstruction, loadContext, target);\r\n    };\r\n    RelativeViewStrategy.prototype.makeRelativeTo = function (file) {\r\n        if (this.absolutePath === null) {\r\n            this.absolutePath = relativeToFile(this.path, file);\r\n        }\r\n    };\r\n    RelativeViewStrategy = __decorate([\r\n        viewStrategy()\r\n    ], RelativeViewStrategy);\r\n    return RelativeViewStrategy;\r\n}());\r\nvar ConventionalViewStrategy = (function () {\r\n    function ConventionalViewStrategy(viewLocator, origin) {\r\n        this.moduleId = origin.moduleId;\r\n        this.viewUrl = viewLocator.convertOriginToViewUrl(origin);\r\n    }\r\n    ConventionalViewStrategy.prototype.loadViewFactory = function (viewEngine, compileInstruction, loadContext, target) {\r\n        compileInstruction.associatedModuleId = this.moduleId;\r\n        return viewEngine.loadViewFactory(this.viewUrl, compileInstruction, loadContext, target);\r\n    };\r\n    ConventionalViewStrategy = __decorate([\r\n        viewStrategy()\r\n    ], ConventionalViewStrategy);\r\n    return ConventionalViewStrategy;\r\n}());\r\nvar NoViewStrategy = (function () {\r\n    function NoViewStrategy(dependencies, dependencyBaseUrl) {\r\n        this.dependencies = dependencies || null;\r\n        this.dependencyBaseUrl = dependencyBaseUrl || '';\r\n    }\r\n    NoViewStrategy.prototype.loadViewFactory = function (viewEngine, compileInstruction, loadContext, target) {\r\n        var entry = this.entry;\r\n        var dependencies = this.dependencies;\r\n        if (entry && entry.factoryIsReady) {\r\n            return Promise.resolve(null);\r\n        }\r\n        this.entry = entry = new TemplateRegistryEntry(this.moduleId || this.dependencyBaseUrl);\r\n        entry.dependencies = [];\r\n        entry.templateIsLoaded = true;\r\n        if (dependencies !== null) {\r\n            for (var i = 0, ii = dependencies.length; i < ii; ++i) {\r\n                var current = dependencies[i];\r\n                if (typeof current === 'string' || typeof current === 'function') {\r\n                    entry.addDependency(current);\r\n                }\r\n                else {\r\n                    entry.addDependency(current.from, current.as);\r\n                }\r\n            }\r\n        }\r\n        compileInstruction.associatedModuleId = this.moduleId;\r\n        return viewEngine.loadViewFactory(entry, compileInstruction, loadContext, target);\r\n    };\r\n    NoViewStrategy = __decorate([\r\n        viewStrategy()\r\n    ], NoViewStrategy);\r\n    return NoViewStrategy;\r\n}());\r\nvar TemplateRegistryViewStrategy = (function () {\r\n    function TemplateRegistryViewStrategy(moduleId, entry) {\r\n        this.moduleId = moduleId;\r\n        this.entry = entry;\r\n    }\r\n    TemplateRegistryViewStrategy.prototype.loadViewFactory = function (viewEngine, compileInstruction, loadContext, target) {\r\n        var entry = this.entry;\r\n        if (entry.factoryIsReady) {\r\n            return Promise.resolve(entry.factory);\r\n        }\r\n        compileInstruction.associatedModuleId = this.moduleId;\r\n        return viewEngine.loadViewFactory(entry, compileInstruction, loadContext, target);\r\n    };\r\n    TemplateRegistryViewStrategy = __decorate([\r\n        viewStrategy()\r\n    ], TemplateRegistryViewStrategy);\r\n    return TemplateRegistryViewStrategy;\r\n}());\r\nvar InlineViewStrategy = (function () {\r\n    function InlineViewStrategy(markup, dependencies, dependencyBaseUrl) {\r\n        this.markup = markup;\r\n        this.dependencies = dependencies || null;\r\n        this.dependencyBaseUrl = dependencyBaseUrl || '';\r\n    }\r\n    InlineViewStrategy.prototype.loadViewFactory = function (viewEngine, compileInstruction, loadContext, target) {\r\n        var entry = this.entry;\r\n        var dependencies = this.dependencies;\r\n        if (entry && entry.factoryIsReady) {\r\n            return Promise.resolve(entry.factory);\r\n        }\r\n        this.entry = entry = new TemplateRegistryEntry(this.moduleId || this.dependencyBaseUrl);\r\n        entry.template = DOM.createTemplateFromMarkup(this.markup);\r\n        if (dependencies !== null) {\r\n            for (var i = 0, ii = dependencies.length; i < ii; ++i) {\r\n                var current = dependencies[i];\r\n                if (typeof current === 'string' || typeof current === 'function') {\r\n                    entry.addDependency(current);\r\n                }\r\n                else {\r\n                    entry.addDependency(current.from, current.as);\r\n                }\r\n            }\r\n        }\r\n        compileInstruction.associatedModuleId = this.moduleId;\r\n        return viewEngine.loadViewFactory(entry, compileInstruction, loadContext, target);\r\n    };\r\n    InlineViewStrategy = __decorate([\r\n        viewStrategy()\r\n    ], InlineViewStrategy);\r\n    return InlineViewStrategy;\r\n}());\r\nvar StaticViewStrategy = (function () {\r\n    function StaticViewStrategy(config) {\r\n        if (typeof config === 'string' || (config instanceof DOM.Element && config.tagName === 'TEMPLATE')) {\r\n            config = {\r\n                template: config\r\n            };\r\n        }\r\n        this.template = config.template;\r\n        this.dependencies = config.dependencies || [];\r\n        this.factoryIsReady = false;\r\n        this.onReady = null;\r\n        this.moduleId = 'undefined';\r\n    }\r\n    StaticViewStrategy.prototype.loadViewFactory = function (viewEngine, compileInstruction, loadContext, target) {\r\n        var _this = this;\r\n        if (this.factoryIsReady) {\r\n            return Promise.resolve(this.factory);\r\n        }\r\n        var $deps = this.dependencies;\r\n        var deps = typeof $deps === 'function' ? $deps() : $deps;\r\n        deps = deps ? deps : [];\r\n        deps = Array.isArray(deps) ? deps : [deps];\r\n        return Promise.all(deps).then(function (dependencies) {\r\n            var container = viewEngine.container;\r\n            var appResources = viewEngine.appResources;\r\n            var viewCompiler = viewEngine.viewCompiler;\r\n            var viewResources = new ViewResources(appResources);\r\n            var resource;\r\n            var elDeps = [];\r\n            if (target) {\r\n                viewResources.autoRegister(container, target);\r\n            }\r\n            for (var _i = 0, dependencies_1 = dependencies; _i < dependencies_1.length; _i++) {\r\n                var dep = dependencies_1[_i];\r\n                if (typeof dep === 'function') {\r\n                    resource = viewResources.autoRegister(container, dep);\r\n                    if (resource.elementName !== null) {\r\n                        elDeps.push(resource);\r\n                    }\r\n                }\r\n                else if (dep && typeof dep === 'object') {\r\n                    for (var key in dep) {\r\n                        var exported = dep[key];\r\n                        if (typeof exported === 'function') {\r\n                            resource = viewResources.autoRegister(container, exported);\r\n                            if (resource.elementName !== null) {\r\n                                elDeps.push(resource);\r\n                            }\r\n                        }\r\n                    }\r\n                }\r\n                else {\r\n                    throw new Error(\"dependency neither function nor object. Received: \\\"\".concat(typeof dep, \"\\\"\"));\r\n                }\r\n            }\r\n            return Promise.all(elDeps.map(function (el) { return el.load(container, el.target); })).then(function () {\r\n                var factory = _this.template !== null\r\n                    ? viewCompiler.compile(_this.template, viewResources, compileInstruction)\r\n                    : null;\r\n                _this.factoryIsReady = true;\r\n                _this.factory = factory;\r\n                return factory;\r\n            });\r\n        });\r\n    };\r\n    StaticViewStrategy = __decorate([\r\n        viewStrategy()\r\n    ], StaticViewStrategy);\r\n    return StaticViewStrategy;\r\n}());\n\nfunction remove(viewSlot, previous) {\r\n    return Array.isArray(previous)\r\n        ? viewSlot.removeMany(previous, true)\r\n        : viewSlot.remove(previous, true);\r\n}\r\nvar SwapStrategies = {\r\n    before: function (viewSlot, previous, callback) {\r\n        return (previous === undefined)\r\n            ? callback()\r\n            : callback().then(function () { return remove(viewSlot, previous); });\r\n    },\r\n    with: function (viewSlot, previous, callback) {\r\n        return (previous === undefined)\r\n            ? callback()\r\n            : Promise.all([remove(viewSlot, previous), callback()]);\r\n    },\r\n    after: function (viewSlot, previous, callback) {\r\n        return Promise.resolve(viewSlot.removeAll(true)).then(callback);\r\n    }\r\n};\n\nfunction tryActivateViewModel(context) {\r\n    if (context.skipActivation || typeof context.viewModel.activate !== 'function') {\r\n        return Promise.resolve();\r\n    }\r\n    return context.viewModel.activate(context.model) || Promise.resolve();\r\n}\r\nvar CompositionEngine = (function () {\r\n    function CompositionEngine(viewEngine, viewLocator) {\r\n        this.viewEngine = viewEngine;\r\n        this.viewLocator = viewLocator;\r\n    }\r\n    CompositionEngine.prototype._swap = function (context, view) {\r\n        var swapStrategy = SwapStrategies[context.swapOrder] || SwapStrategies.after;\r\n        var previousViews = context.viewSlot.children.slice();\r\n        return swapStrategy(context.viewSlot, previousViews, function () {\r\n            return Promise.resolve(context.viewSlot.add(view)).then(function () {\r\n                if (context.currentController) {\r\n                    context.currentController.unbind();\r\n                }\r\n            });\r\n        }).then(function () {\r\n            if (context.compositionTransactionNotifier) {\r\n                context.compositionTransactionNotifier.done();\r\n            }\r\n        });\r\n    };\r\n    CompositionEngine.prototype._createControllerAndSwap = function (context) {\r\n        var _this = this;\r\n        return this.createController(context).then(function (controller) {\r\n            if (context.compositionTransactionOwnershipToken) {\r\n                return context.compositionTransactionOwnershipToken\r\n                    .waitForCompositionComplete()\r\n                    .then(function () {\r\n                    controller.automate(context.overrideContext, context.owningView);\r\n                    return _this._swap(context, controller.view);\r\n                })\r\n                    .then(function () { return controller; });\r\n            }\r\n            controller.automate(context.overrideContext, context.owningView);\r\n            return _this._swap(context, controller.view).then(function () { return controller; });\r\n        });\r\n    };\r\n    CompositionEngine.prototype.createController = function (context) {\r\n        var _this = this;\r\n        var childContainer;\r\n        var viewModel;\r\n        var viewModelResource;\r\n        var m;\r\n        return this\r\n            .ensureViewModel(context)\r\n            .then(tryActivateViewModel)\r\n            .then(function () {\r\n            childContainer = context.childContainer;\r\n            viewModel = context.viewModel;\r\n            viewModelResource = context.viewModelResource;\r\n            m = viewModelResource.metadata;\r\n            var viewStrategy = _this.viewLocator.getViewStrategy(context.view || viewModel);\r\n            if (context.viewResources) {\r\n                viewStrategy.makeRelativeTo(context.viewResources.viewUrl);\r\n            }\r\n            return m.load(childContainer, viewModelResource.value, null, viewStrategy, true);\r\n        }).then(function (viewFactory) { return m.create(childContainer, BehaviorInstruction.dynamic(context.host, viewModel, viewFactory)); });\r\n    };\r\n    CompositionEngine.prototype.ensureViewModel = function (context) {\r\n        var childContainer = context.childContainer = (context.childContainer || context.container.createChild());\r\n        if (typeof context.viewModel === 'string') {\r\n            context.viewModel = context.viewResources\r\n                ? context.viewResources.relativeToView(context.viewModel)\r\n                : context.viewModel;\r\n            return this.viewEngine.importViewModelResource(context.viewModel).then(function (viewModelResource) {\r\n                childContainer.autoRegister(viewModelResource.value);\r\n                if (context.host) {\r\n                    childContainer.registerInstance(DOM.Element, context.host);\r\n                }\r\n                context.viewModel = childContainer.viewModel = childContainer.get(viewModelResource.value);\r\n                context.viewModelResource = viewModelResource;\r\n                return context;\r\n            });\r\n        }\r\n        var ctor = context.viewModel.constructor;\r\n        var isClass = typeof context.viewModel === 'function';\r\n        if (isClass) {\r\n            ctor = context.viewModel;\r\n            childContainer.autoRegister(ctor);\r\n        }\r\n        var m = metadata.getOrCreateOwn(metadata.resource, HtmlBehaviorResource, ctor);\r\n        m.elementName = m.elementName || 'dynamic-element';\r\n        m.initialize(isClass ? childContainer : (context.container || childContainer), ctor);\r\n        context.viewModelResource = { metadata: m, value: ctor };\r\n        if (context.host) {\r\n            childContainer.registerInstance(DOM.Element, context.host);\r\n        }\r\n        childContainer.viewModel = context.viewModel = isClass ? childContainer.get(ctor) : context.viewModel;\r\n        return Promise.resolve(context);\r\n    };\r\n    CompositionEngine.prototype.compose = function (context) {\r\n        var _this = this;\r\n        context.childContainer = context.childContainer || context.container.createChild();\r\n        context.view = this.viewLocator.getViewStrategy(context.view);\r\n        var transaction = context.childContainer.get(CompositionTransaction);\r\n        var compositionTransactionOwnershipToken = transaction.tryCapture();\r\n        if (compositionTransactionOwnershipToken) {\r\n            context.compositionTransactionOwnershipToken = compositionTransactionOwnershipToken;\r\n        }\r\n        else {\r\n            context.compositionTransactionNotifier = transaction.enlist();\r\n        }\r\n        if (context.viewModel) {\r\n            return this._createControllerAndSwap(context);\r\n        }\r\n        else if (context.view) {\r\n            if (context.viewResources) {\r\n                context.view.makeRelativeTo(context.viewResources.viewUrl);\r\n            }\r\n            return context.view.loadViewFactory(this.viewEngine, new ViewCompileInstruction()).then(function (viewFactory) {\r\n                var result = viewFactory.create(context.childContainer);\r\n                result.bind(context.bindingContext, context.overrideContext);\r\n                if (context.compositionTransactionOwnershipToken) {\r\n                    return context.compositionTransactionOwnershipToken.waitForCompositionComplete()\r\n                        .then(function () { return _this._swap(context, result); })\r\n                        .then(function () { return result; });\r\n                }\r\n                return _this._swap(context, result).then(function () { return result; });\r\n            });\r\n        }\r\n        else if (context.viewSlot) {\r\n            context.viewSlot.removeAll();\r\n            if (context.compositionTransactionNotifier) {\r\n                context.compositionTransactionNotifier.done();\r\n            }\r\n            return Promise.resolve(null);\r\n        }\r\n        return Promise.resolve(null);\r\n    };\r\n    CompositionEngine = __decorate([\r\n        inject(ViewEngine, ViewLocator)\r\n    ], CompositionEngine);\r\n    return CompositionEngine;\r\n}());\n\nvar animationEvent = {\r\n    enterBegin: 'animation:enter:begin',\r\n    enterActive: 'animation:enter:active',\r\n    enterDone: 'animation:enter:done',\r\n    enterTimeout: 'animation:enter:timeout',\r\n    leaveBegin: 'animation:leave:begin',\r\n    leaveActive: 'animation:leave:active',\r\n    leaveDone: 'animation:leave:done',\r\n    leaveTimeout: 'animation:leave:timeout',\r\n    staggerNext: 'animation:stagger:next',\r\n    removeClassBegin: 'animation:remove-class:begin',\r\n    removeClassActive: 'animation:remove-class:active',\r\n    removeClassDone: 'animation:remove-class:done',\r\n    removeClassTimeout: 'animation:remove-class:timeout',\r\n    addClassBegin: 'animation:add-class:begin',\r\n    addClassActive: 'animation:add-class:active',\r\n    addClassDone: 'animation:add-class:done',\r\n    addClassTimeout: 'animation:add-class:timeout',\r\n    animateBegin: 'animation:animate:begin',\r\n    animateActive: 'animation:animate:active',\r\n    animateDone: 'animation:animate:done',\r\n    animateTimeout: 'animation:animate:timeout',\r\n    sequenceBegin: 'animation:sequence:begin',\r\n    sequenceDone: 'animation:sequence:done'\r\n};\n\nfunction createChildObserverDecorator(selectorOrConfig, all) {\r\n    return function (target, key, descriptor) {\r\n        var actualTarget = typeof key === 'string' ? target.constructor : target;\r\n        var r = metadata.getOrCreateOwn(metadata.resource, HtmlBehaviorResource, actualTarget);\r\n        if (typeof selectorOrConfig === 'string') {\r\n            selectorOrConfig = {\r\n                selector: selectorOrConfig,\r\n                name: key\r\n            };\r\n        }\r\n        if (descriptor) {\r\n            descriptor.writable = true;\r\n            descriptor.configurable = true;\r\n        }\r\n        selectorOrConfig.all = all;\r\n        r.addChildBinding(new ChildObserver(selectorOrConfig));\r\n    };\r\n}\r\nfunction children(selectorOrConfig) {\r\n    return createChildObserverDecorator(selectorOrConfig, true);\r\n}\r\nfunction child(selectorOrConfig) {\r\n    return createChildObserverDecorator(selectorOrConfig, false);\r\n}\r\nvar ChildObserver = (function () {\r\n    function ChildObserver(config) {\r\n        this.name = config.name;\r\n        this.changeHandler = config.changeHandler || this.name + 'Changed';\r\n        this.selector = config.selector;\r\n        this.all = config.all;\r\n    }\r\n    ChildObserver.prototype.create = function (viewHost, viewModel, controller) {\r\n        return new ChildObserverBinder(this.selector, viewHost, this.name, viewModel, controller, this.changeHandler, this.all);\r\n    };\r\n    return ChildObserver;\r\n}());\r\nvar noMutations = [];\r\nfunction trackMutation(groupedMutations, binder, record) {\r\n    var mutations = groupedMutations.get(binder);\r\n    if (!mutations) {\r\n        mutations = [];\r\n        groupedMutations.set(binder, mutations);\r\n    }\r\n    mutations.push(record);\r\n}\r\nfunction onChildChange(mutations, observer) {\r\n    var binders = observer.binders;\r\n    var bindersLength = binders.length;\r\n    var groupedMutations = new Map();\r\n    for (var i = 0, ii = mutations.length; i < ii; ++i) {\r\n        var record = mutations[i];\r\n        var added = record.addedNodes;\r\n        var removed = record.removedNodes;\r\n        for (var j = 0, jj = removed.length; j < jj; ++j) {\r\n            var node = removed[j];\r\n            if (node.nodeType === 1) {\r\n                for (var k = 0; k < bindersLength; ++k) {\r\n                    var binder = binders[k];\r\n                    if (binder.onRemove(node)) {\r\n                        trackMutation(groupedMutations, binder, record);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        for (var j = 0, jj = added.length; j < jj; ++j) {\r\n            var node = added[j];\r\n            if (node.nodeType === 1) {\r\n                for (var k = 0; k < bindersLength; ++k) {\r\n                    var binder = binders[k];\r\n                    if (binder.onAdd(node)) {\r\n                        trackMutation(groupedMutations, binder, record);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n    groupedMutations.forEach(function (mutationRecords, binder) {\r\n        if (binder.isBound && binder.changeHandler !== null) {\r\n            binder.viewModel[binder.changeHandler](mutationRecords);\r\n        }\r\n    });\r\n}\r\nvar ChildObserverBinder = (function () {\r\n    function ChildObserverBinder(selector, viewHost, property, viewModel, controller, changeHandler, all) {\r\n        this.selector = selector;\r\n        this.viewHost = viewHost;\r\n        this.property = property;\r\n        this.viewModel = viewModel;\r\n        this.controller = controller;\r\n        this.changeHandler = changeHandler in viewModel ? changeHandler : null;\r\n        this.usesShadowDOM = controller.behavior.usesShadowDOM;\r\n        this.all = all;\r\n        if (!this.usesShadowDOM && controller.view && controller.view.contentView) {\r\n            this.contentView = controller.view.contentView;\r\n        }\r\n        else {\r\n            this.contentView = null;\r\n        }\r\n        this.source = null;\r\n        this.isBound = false;\r\n    }\r\n    ChildObserverBinder.prototype.matches = function (element) {\r\n        if (element.matches(this.selector)) {\r\n            if (this.contentView === null) {\r\n                return true;\r\n            }\r\n            var contentView = this.contentView;\r\n            var assignedSlot = element.auAssignedSlot;\r\n            if (assignedSlot && assignedSlot.projectFromAnchors) {\r\n                var anchors = assignedSlot.projectFromAnchors;\r\n                for (var i = 0, ii = anchors.length; i < ii; ++i) {\r\n                    if (anchors[i].auOwnerView === contentView) {\r\n                        return true;\r\n                    }\r\n                }\r\n                return false;\r\n            }\r\n            return element.auOwnerView === contentView;\r\n        }\r\n        return false;\r\n    };\r\n    ChildObserverBinder.prototype.bind = function (source) {\r\n        if (this.isBound) {\r\n            if (this.source === source) {\r\n                return;\r\n            }\r\n            this.source = source;\r\n        }\r\n        this.isBound = true;\r\n        var viewHost = this.viewHost;\r\n        var viewModel = this.viewModel;\r\n        var observer = viewHost.__childObserver__;\r\n        if (!observer) {\r\n            observer = viewHost.__childObserver__ = DOM.createMutationObserver(onChildChange);\r\n            var options = {\r\n                childList: true,\r\n                subtree: !this.usesShadowDOM\r\n            };\r\n            observer.observe(viewHost, options);\r\n            observer.binders = [];\r\n        }\r\n        observer.binders.push(this);\r\n        if (this.usesShadowDOM) {\r\n            var current = viewHost.firstElementChild;\r\n            if (this.all) {\r\n                var items = viewModel[this.property];\r\n                if (!items) {\r\n                    items = viewModel[this.property] = [];\r\n                }\r\n                else {\r\n                    items.splice(0);\r\n                }\r\n                while (current) {\r\n                    if (this.matches(current)) {\r\n                        items.push(current.au && current.au.controller ? current.au.controller.viewModel : current);\r\n                    }\r\n                    current = current.nextElementSibling;\r\n                }\r\n                if (this.changeHandler !== null) {\r\n                    this.viewModel[this.changeHandler](noMutations);\r\n                }\r\n            }\r\n            else {\r\n                while (current) {\r\n                    if (this.matches(current)) {\r\n                        var value = current.au && current.au.controller ? current.au.controller.viewModel : current;\r\n                        this.viewModel[this.property] = value;\r\n                        if (this.changeHandler !== null) {\r\n                            this.viewModel[this.changeHandler](value);\r\n                        }\r\n                        break;\r\n                    }\r\n                    current = current.nextElementSibling;\r\n                }\r\n            }\r\n        }\r\n    };\r\n    ChildObserverBinder.prototype.onRemove = function (element) {\r\n        if (this.matches(element)) {\r\n            var value = element.au && element.au.controller ? element.au.controller.viewModel : element;\r\n            if (this.all) {\r\n                var items = (this.viewModel[this.property] || (this.viewModel[this.property] = []));\r\n                var index = items.indexOf(value);\r\n                if (index !== -1) {\r\n                    items.splice(index, 1);\r\n                }\r\n                return true;\r\n            }\r\n            var currentValue = this.viewModel[this.property];\r\n            if (currentValue === value) {\r\n                this.viewModel[this.property] = null;\r\n                if (this.isBound && this.changeHandler !== null) {\r\n                    this.viewModel[this.changeHandler](value);\r\n                }\r\n            }\r\n        }\r\n        return false;\r\n    };\r\n    ChildObserverBinder.prototype.onAdd = function (element) {\r\n        if (this.matches(element)) {\r\n            var value = element.au && element.au.controller ? element.au.controller.viewModel : element;\r\n            if (this.all) {\r\n                var items = (this.viewModel[this.property] || (this.viewModel[this.property] = []));\r\n                if (this.selector === '*') {\r\n                    items.push(value);\r\n                    return true;\r\n                }\r\n                var index = 0;\r\n                var prev = element.previousElementSibling;\r\n                while (prev) {\r\n                    if (this.matches(prev)) {\r\n                        index++;\r\n                    }\r\n                    prev = prev.previousElementSibling;\r\n                }\r\n                items.splice(index, 0, value);\r\n                return true;\r\n            }\r\n            this.viewModel[this.property] = value;\r\n            if (this.isBound && this.changeHandler !== null) {\r\n                this.viewModel[this.changeHandler](value);\r\n            }\r\n        }\r\n        return false;\r\n    };\r\n    ChildObserverBinder.prototype.unbind = function () {\r\n        if (!this.isBound) {\r\n            return;\r\n        }\r\n        this.isBound = false;\r\n        this.source = null;\r\n        var childObserver = this.viewHost.__childObserver__;\r\n        if (childObserver) {\r\n            var binders = childObserver.binders;\r\n            if (binders && binders.length) {\r\n                var idx = binders.indexOf(this);\r\n                if (idx !== -1) {\r\n                    binders.splice(idx, 1);\r\n                }\r\n                if (binders.length === 0) {\r\n                    childObserver.disconnect();\r\n                    this.viewHost.__childObserver__ = null;\r\n                }\r\n            }\r\n            if (this.usesShadowDOM) {\r\n                this.viewModel[this.property] = null;\r\n            }\r\n        }\r\n    };\r\n    return ChildObserverBinder;\r\n}());\n\nvar ElementConfigResource = (function () {\r\n    function ElementConfigResource() {\r\n    }\r\n    ElementConfigResource.prototype.initialize = function (container, target) { };\r\n    ElementConfigResource.prototype.register = function (registry, name) { };\r\n    ElementConfigResource.prototype.load = function (container, target) {\r\n        var config = new target();\r\n        var eventManager = container.get(EventManager);\r\n        eventManager.registerElementConfig(config);\r\n    };\r\n    return ElementConfigResource;\r\n}());\n\nfunction resource(instanceOrConfig) {\r\n    return function (target) {\r\n        var isConfig = typeof instanceOrConfig === 'string' || Object.getPrototypeOf(instanceOrConfig) === Object.prototype;\r\n        if (isConfig) {\r\n            target.$resource = instanceOrConfig;\r\n        }\r\n        else {\r\n            metadata.define(metadata.resource, instanceOrConfig, target);\r\n        }\r\n    };\r\n}\r\nfunction behavior(override) {\r\n    return function (target) {\r\n        if (override instanceof HtmlBehaviorResource) {\r\n            metadata.define(metadata.resource, override, target);\r\n        }\r\n        else {\r\n            var r = metadata.getOrCreateOwn(metadata.resource, HtmlBehaviorResource, target);\r\n            Object.assign(r, override);\r\n        }\r\n    };\r\n}\r\nfunction customElement(name) {\r\n    return function (target) {\r\n        var r = metadata.getOrCreateOwn(metadata.resource, HtmlBehaviorResource, target);\r\n        r.elementName = validateBehaviorName(name, 'custom element');\r\n    };\r\n}\r\nfunction customAttribute(name, defaultBindingMode, aliases) {\r\n    return function (target) {\r\n        var r = metadata.getOrCreateOwn(metadata.resource, HtmlBehaviorResource, target);\r\n        r.attributeName = validateBehaviorName(name, 'custom attribute');\r\n        r.attributeDefaultBindingMode = defaultBindingMode;\r\n        r.aliases = aliases;\r\n    };\r\n}\r\nfunction templateController(target) {\r\n    var deco = function (t) {\r\n        var r = metadata.getOrCreateOwn(metadata.resource, HtmlBehaviorResource, t);\r\n        r.liftsContent = true;\r\n    };\r\n    return target ? deco(target) : deco;\r\n}\r\nfunction bindable(nameOrConfigOrTarget, key, descriptor) {\r\n    var deco = function (target, key2, descriptor2) {\r\n        var actualTarget = key2 ? target.constructor : target;\r\n        var r = metadata.getOrCreateOwn(metadata.resource, HtmlBehaviorResource, actualTarget);\r\n        var prop;\r\n        if (key2) {\r\n            nameOrConfigOrTarget = nameOrConfigOrTarget || {};\r\n            nameOrConfigOrTarget.name = key2;\r\n        }\r\n        prop = new BindableProperty(nameOrConfigOrTarget);\r\n        return prop.registerWith(actualTarget, r, descriptor2);\r\n    };\r\n    if (!nameOrConfigOrTarget) {\r\n        return deco;\r\n    }\r\n    if (key) {\r\n        var target = nameOrConfigOrTarget;\r\n        nameOrConfigOrTarget = null;\r\n        return deco(target, key, descriptor);\r\n    }\r\n    return deco;\r\n}\r\nfunction dynamicOptions(target) {\r\n    var deco = function (t) {\r\n        var r = metadata.getOrCreateOwn(metadata.resource, HtmlBehaviorResource, t);\r\n        r.hasDynamicOptions = true;\r\n    };\r\n    return target ? deco(target) : deco;\r\n}\r\nvar defaultShadowDOMOptions = { mode: 'open' };\r\nfunction useShadowDOM(targetOrOptions) {\r\n    var options = typeof targetOrOptions === 'function' || !targetOrOptions\r\n        ? defaultShadowDOMOptions\r\n        : targetOrOptions;\r\n    var deco = function (t) {\r\n        var r = metadata.getOrCreateOwn(metadata.resource, HtmlBehaviorResource, t);\r\n        r.targetShadowDOM = true;\r\n        r.shadowDOMOptions = options;\r\n    };\r\n    return typeof targetOrOptions === 'function' ? deco(targetOrOptions) : deco;\r\n}\r\nfunction processAttributes(processor) {\r\n    return function (t) {\r\n        var r = metadata.getOrCreateOwn(metadata.resource, HtmlBehaviorResource, t);\r\n        r.processAttributes = function (compiler, resources, node, attributes, elementInstruction) {\r\n            try {\r\n                processor(compiler, resources, node, attributes, elementInstruction);\r\n            }\r\n            catch (error) {\r\n                LogManager.getLogger('templating').error(error);\r\n            }\r\n        };\r\n    };\r\n}\r\nfunction doNotProcessContent() { return false; }\r\nfunction processContent(processor) {\r\n    return function (t) {\r\n        var r = metadata.getOrCreateOwn(metadata.resource, HtmlBehaviorResource, t);\r\n        r.processContent = processor ? function (compiler, resources, node, instruction) {\r\n            try {\r\n                return processor(compiler, resources, node, instruction);\r\n            }\r\n            catch (error) {\r\n                LogManager.getLogger('templating').error(error);\r\n                return false;\r\n            }\r\n        } : doNotProcessContent;\r\n    };\r\n}\r\nfunction containerless(target) {\r\n    var deco = function (t) {\r\n        var r = metadata.getOrCreateOwn(metadata.resource, HtmlBehaviorResource, t);\r\n        r.containerless = true;\r\n    };\r\n    return target ? deco(target) : deco;\r\n}\r\nfunction useViewStrategy(strategy) {\r\n    return function (target) {\r\n        metadata.define(ViewLocator.viewStrategyMetadataKey, strategy, target);\r\n    };\r\n}\r\nfunction useView(path) {\r\n    return useViewStrategy(new RelativeViewStrategy(path));\r\n}\r\nfunction inlineView(markup, dependencies, dependencyBaseUrl) {\r\n    return useViewStrategy(new InlineViewStrategy(markup, dependencies, dependencyBaseUrl));\r\n}\r\nfunction noView(targetOrDependencies, dependencyBaseUrl) {\r\n    var target;\r\n    var dependencies;\r\n    if (typeof targetOrDependencies === 'function') {\r\n        target = targetOrDependencies;\r\n    }\r\n    else {\r\n        dependencies = targetOrDependencies;\r\n        target = undefined;\r\n    }\r\n    var deco = function (t) {\r\n        metadata.define(ViewLocator.viewStrategyMetadataKey, new NoViewStrategy(dependencies, dependencyBaseUrl), t);\r\n    };\r\n    return target ? deco(target) : deco;\r\n}\r\nfunction view(templateOrConfig) {\r\n    return function (target) {\r\n        target.$view = templateOrConfig;\r\n    };\r\n}\r\nfunction elementConfig(target) {\r\n    var deco = function (t) {\r\n        metadata.define(metadata.resource, new ElementConfigResource(), t);\r\n    };\r\n    return target ? deco(target) : deco;\r\n}\r\nfunction viewResources() {\r\n    var resources = [];\r\n    for (var _i = 0; _i < arguments.length; _i++) {\r\n        resources[_i] = arguments[_i];\r\n    }\r\n    return function (target) {\r\n        metadata.define(ViewEngine.viewModelRequireMetadataKey, resources, target);\r\n    };\r\n}\n\nvar TemplatingEngine = (function () {\r\n    function TemplatingEngine(container, moduleAnalyzer, viewCompiler, compositionEngine) {\r\n        this._container = container;\r\n        this._moduleAnalyzer = moduleAnalyzer;\r\n        this._viewCompiler = viewCompiler;\r\n        this._compositionEngine = compositionEngine;\r\n        container.registerInstance(Animator, Animator.instance = new Animator());\r\n    }\r\n    TemplatingEngine.prototype.configureAnimator = function (animator) {\r\n        this._container.unregister(Animator);\r\n        this._container.registerInstance(Animator, Animator.instance = animator);\r\n    };\r\n    TemplatingEngine.prototype.compose = function (context) {\r\n        return this._compositionEngine.compose(context);\r\n    };\r\n    TemplatingEngine.prototype.enhance = function (instruction) {\r\n        if (instruction instanceof DOM.Element) {\r\n            instruction = { element: instruction };\r\n        }\r\n        var compilerInstructions = { letExpressions: [] };\r\n        var resources = instruction.resources || this._container.get(ViewResources);\r\n        this._viewCompiler._compileNode(instruction.element, resources, compilerInstructions, instruction.element.parentNode, 'root', true);\r\n        var factory = new ViewFactory(instruction.element, compilerInstructions, resources);\r\n        var container = instruction.container || this._container.createChild();\r\n        var view = factory.create(container, BehaviorInstruction.enhance());\r\n        view.bind(instruction.bindingContext || {}, instruction.overrideContext);\r\n        view.firstChild = view.lastChild = view.fragment;\r\n        view.fragment = DOM.createDocumentFragment();\r\n        view.attached();\r\n        return view;\r\n    };\r\n    TemplatingEngine.inject = [Container, ModuleAnalyzer, ViewCompiler, CompositionEngine];\r\n    return TemplatingEngine;\r\n}());\n\nexport { Animator, BehaviorInstruction, BehaviorPropertyObserver, BindableProperty, BindingLanguage, BoundViewFactory, CompositionEngine, CompositionTransaction, CompositionTransactionNotifier, CompositionTransactionOwnershipToken, Controller, ConventionalViewStrategy, ElementConfigResource, ElementEvents, HtmlBehaviorResource, InlineViewStrategy, ModuleAnalyzer, NoViewStrategy, PassThroughSlot, RelativeViewStrategy, ResourceDescription, ResourceLoadContext, ResourceModule, ShadowDOM, ShadowSlot, SlotCustomAttribute, StaticViewStrategy, SwapStrategies, TargetInstruction, TemplateRegistryViewStrategy, TemplatingEngine, View, ViewCompileInstruction, ViewCompiler, ViewEngine, ViewEngineHooksResource, ViewFactory, ViewLocator, ViewResources, ViewSlot, _hyphenate, _isAllWhitespace, animationEvent, behavior, bindable, child, children, containerless, customAttribute, customElement, dynamicOptions, elementConfig, inlineView, noView, processAttributes, processContent, resource, templateController, useShadowDOM, useView, useViewStrategy, validateBehaviorName, view, viewEngineHooks, viewResources, viewStrategy };\n//# sourceMappingURL=aurelia-templating.js.map\n","import { mergeSplice, ObserverLocator } from 'aurelia-binding';\nimport { ElementEvents, BoundViewFactory, TargetInstruction, ViewSlot, ViewResources } from 'aurelia-templating';\nimport { updateOverrideContext, createFullOverrideContext, ArrayRepeatStrategy, NullRepeatStrategy, unwrapExpression, updateOneTimeBinding, viewsRequireLifecycle, getItemsSourceExpression, isOneTime, AbstractRepeater } from 'aurelia-templating-resources';\nimport { DOM, PLATFORM } from 'aurelia-pal';\nimport { Container } from 'aurelia-dependency-injection';\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n    extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n    return extendStatics(d, b);\r\n};\r\n\r\nfunction __extends(d, b) {\r\n    if (typeof b !== \"function\" && b !== null)\r\n        throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n    extendStatics(d, b);\r\n    function __() { this.constructor = d; }\r\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\n\nvar rebindView = function (repeat, view, collectionIndex, collection) {\r\n    view.bindingContext[repeat.local] = collection[collectionIndex];\r\n    updateOverrideContext(view.overrideContext, collectionIndex, collection.length);\r\n};\r\nvar rebindAndMoveView = function (repeat, view, index, moveToBottom) {\r\n    var items = repeat.items;\r\n    var viewSlot = repeat.viewSlot;\r\n    updateOverrideContext(view.overrideContext, index, items.length);\r\n    view.bindingContext[repeat.local] = items[index];\r\n    if (moveToBottom) {\r\n        viewSlot.children.push(viewSlot.children.shift());\r\n        repeat.templateStrategy.moveViewLast(view, repeat.bottomBufferEl);\r\n    }\r\n    else {\r\n        viewSlot.children.unshift(viewSlot.children.splice(-1, 1)[0]);\r\n        repeat.templateStrategy.moveViewFirst(view, repeat.topBufferEl);\r\n    }\r\n};\r\nvar calcMinViewsRequired = function (scrollerHeight, itemHeight) {\r\n    return Math$floor(scrollerHeight / itemHeight) + 1;\r\n};\r\nvar Math$abs = Math.abs;\r\nvar Math$max = Math.max;\r\nvar Math$min = Math.min;\r\nvar Math$round = Math.round;\r\nvar Math$floor = Math.floor;\r\nvar $isNaN = isNaN;\n\nvar doc = document;\r\nvar htmlElement = doc.documentElement;\r\nvar $raf = requestAnimationFrame.bind(window);\n\nvar getScrollerElement = function (element) {\r\n    var current = element.parentNode;\r\n    while (current !== null && current !== htmlElement) {\r\n        if (hasOverflowScroll(current)) {\r\n            return current;\r\n        }\r\n        current = current.parentNode;\r\n    }\r\n    return doc.scrollingElement || htmlElement;\r\n};\r\nvar getElementDistanceToTopOfDocument = function (element) {\r\n    var box = element.getBoundingClientRect();\r\n    var scrollTop = window.pageYOffset;\r\n    var clientTop = htmlElement.clientTop;\r\n    var top = box.top + scrollTop - clientTop;\r\n    return Math$round(top);\r\n};\r\nvar hasOverflowScroll = function (element) {\r\n    var style = window.getComputedStyle(element);\r\n    return style && (style.overflowY === 'scroll' || style.overflow === 'scroll' || style.overflowY === 'auto' || style.overflow === 'auto');\r\n};\r\nvar getStyleValues = function (element) {\r\n    var styles = [];\r\n    for (var _i = 1; _i < arguments.length; _i++) {\r\n        styles[_i - 1] = arguments[_i];\r\n    }\r\n    var currentStyle = window.getComputedStyle(element);\r\n    var value = 0;\r\n    var styleValue = 0;\r\n    for (var i = 0, ii = styles.length; ii > i; ++i) {\r\n        styleValue = parseFloat(currentStyle[styles[i]]);\r\n        value += $isNaN(styleValue) ? 0 : styleValue;\r\n    }\r\n    return value;\r\n};\r\nvar calcOuterHeight = function (element) {\r\n    var height = element.getBoundingClientRect().height;\r\n    height += getStyleValues(element, 'marginTop', 'marginBottom');\r\n    return height;\r\n};\r\nvar calcScrollHeight = function (element) {\r\n    var height = element.getBoundingClientRect().height;\r\n    height -= getStyleValues(element, 'borderTopWidth', 'borderBottomWidth');\r\n    return height;\r\n};\r\nvar insertBeforeNode = function (view, bottomBuffer) {\r\n    bottomBuffer.parentNode.insertBefore(view.lastChild, bottomBuffer);\r\n};\r\nvar getDistanceToParent = function (child, parent) {\r\n    var offsetParent = child.offsetParent;\r\n    var childOffsetTop = child.offsetTop;\r\n    if (offsetParent === null || offsetParent === parent) {\r\n        return childOffsetTop;\r\n    }\r\n    else {\r\n        if (offsetParent.contains(parent)) {\r\n            return childOffsetTop - parent.offsetTop;\r\n        }\r\n        else {\r\n            return childOffsetTop + getDistanceToParent(offsetParent, parent);\r\n        }\r\n    }\r\n};\n\nvar ArrayVirtualRepeatStrategy = (function (_super) {\r\n    __extends(ArrayVirtualRepeatStrategy, _super);\r\n    function ArrayVirtualRepeatStrategy() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    ArrayVirtualRepeatStrategy.prototype.createFirstRow = function (repeat) {\r\n        var overrideContext = createFullOverrideContext(repeat, repeat.items[0], 0, 1);\r\n        return repeat.addView(overrideContext.bindingContext, overrideContext);\r\n    };\r\n    ArrayVirtualRepeatStrategy.prototype.count = function (items) {\r\n        return items.length;\r\n    };\r\n    ArrayVirtualRepeatStrategy.prototype.initCalculation = function (repeat, items) {\r\n        var itemCount = items.length;\r\n        if (!(itemCount > 0)) {\r\n            return 1;\r\n        }\r\n        var scrollerInfo = repeat.getScrollerInfo();\r\n        var existingViewCount = repeat.viewCount();\r\n        if (itemCount > 0 && existingViewCount === 0) {\r\n            this.createFirstRow(repeat);\r\n        }\r\n        var firstView = repeat.firstView();\r\n        var itemHeight = calcOuterHeight(firstView.firstChild);\r\n        if (itemHeight === 0) {\r\n            return 0;\r\n        }\r\n        repeat.itemHeight = itemHeight;\r\n        var scroll_el_height = scrollerInfo.height;\r\n        repeat.minViewsRequired = calcMinViewsRequired(scroll_el_height, itemHeight);\r\n        return 2 | 4;\r\n    };\r\n    ArrayVirtualRepeatStrategy.prototype.onAttached = function (repeat) {\r\n        if (repeat.items.length < repeat.minViewsRequired) {\r\n            repeat.getMore(0, true, this.isNearBottom(repeat, repeat.lastViewIndex()), true);\r\n        }\r\n    };\r\n    ArrayVirtualRepeatStrategy.prototype.getViewRange = function (repeat, scrollerInfo) {\r\n        var topBufferEl = repeat.topBufferEl;\r\n        var scrollerEl = repeat.scrollerEl;\r\n        var itemHeight = repeat.itemHeight;\r\n        var realScrollTop = 0;\r\n        var isFixedHeightContainer = scrollerInfo.scroller !== htmlElement;\r\n        if (isFixedHeightContainer) {\r\n            var topBufferDistance = getDistanceToParent(topBufferEl, scrollerEl);\r\n            var scrollerScrollTop = scrollerInfo.scrollTop;\r\n            realScrollTop = Math$max(0, scrollerScrollTop - Math$abs(topBufferDistance));\r\n        }\r\n        else {\r\n            realScrollTop = pageYOffset - repeat.distanceToTop;\r\n        }\r\n        var realViewCount = repeat.minViewsRequired * 2;\r\n        var firstVisibleIndex = Math$max(0, itemHeight > 0 ? Math$floor(realScrollTop / itemHeight) : 0);\r\n        var lastVisibleIndex = Math$min(repeat.items.length - 1, firstVisibleIndex + (realViewCount - 1));\r\n        firstVisibleIndex = Math$max(0, Math$min(firstVisibleIndex, lastVisibleIndex - (realViewCount - 1)));\r\n        return [firstVisibleIndex, lastVisibleIndex];\r\n    };\r\n    ArrayVirtualRepeatStrategy.prototype.updateBuffers = function (repeat, firstIndex) {\r\n        var itemHeight = repeat.itemHeight;\r\n        var itemCount = repeat.items.length;\r\n        repeat.topBufferHeight = firstIndex * itemHeight;\r\n        repeat.bottomBufferHeight = (itemCount - firstIndex - repeat.viewCount()) * itemHeight;\r\n        repeat.updateBufferElements(true);\r\n    };\r\n    ArrayVirtualRepeatStrategy.prototype.isNearTop = function (repeat, firstIndex) {\r\n        var itemCount = repeat.items.length;\r\n        return itemCount > 0\r\n            ? firstIndex < repeat.edgeDistance\r\n            : false;\r\n    };\r\n    ArrayVirtualRepeatStrategy.prototype.isNearBottom = function (repeat, lastIndex) {\r\n        var itemCount = repeat.items.length;\r\n        return lastIndex === -1\r\n            ? true\r\n            : itemCount > 0\r\n                ? lastIndex > (itemCount - 1 - repeat.edgeDistance)\r\n                : false;\r\n    };\r\n    ArrayVirtualRepeatStrategy.prototype.instanceChanged = function (repeat, items, first) {\r\n        if (this._inPlaceProcessItems(repeat, items, first)) {\r\n            this._remeasure(repeat, repeat.itemHeight, repeat.minViewsRequired * 2, items.length, repeat.$first);\r\n        }\r\n    };\r\n    ArrayVirtualRepeatStrategy.prototype.instanceMutated = function (repeat, array, splices) {\r\n        this._standardProcessInstanceMutated(repeat, array, splices);\r\n    };\r\n    ArrayVirtualRepeatStrategy.prototype._inPlaceProcessItems = function ($repeat, items, firstIndex) {\r\n        var repeat = $repeat;\r\n        var currItemCount = items.length;\r\n        if (currItemCount === 0) {\r\n            repeat.removeAllViews(true, false);\r\n            repeat.resetCalculation();\r\n            repeat.__queuedSplices = repeat.__array = undefined;\r\n            return false;\r\n        }\r\n        var max_views_count = repeat.minViewsRequired * 2;\r\n        var realViewsCount = repeat.viewCount();\r\n        while (realViewsCount > currItemCount) {\r\n            realViewsCount--;\r\n            repeat.removeView(realViewsCount, true, false);\r\n        }\r\n        while (realViewsCount > max_views_count) {\r\n            realViewsCount--;\r\n            repeat.removeView(realViewsCount, true, false);\r\n        }\r\n        realViewsCount = Math$min(realViewsCount, max_views_count);\r\n        var local = repeat.local;\r\n        var lastIndex = currItemCount - 1;\r\n        if (firstIndex + realViewsCount > lastIndex) {\r\n            firstIndex = Math$max(0, currItemCount - realViewsCount);\r\n        }\r\n        repeat.$first = firstIndex;\r\n        for (var i = 0; i < realViewsCount; i++) {\r\n            var currIndex = i + firstIndex;\r\n            var view = repeat.view(i);\r\n            var last = currIndex === currItemCount - 1;\r\n            var middle = currIndex !== 0 && !last;\r\n            var bindingContext = view.bindingContext;\r\n            var overrideContext = view.overrideContext;\r\n            if (bindingContext[local] === items[currIndex]\r\n                && overrideContext.$index === currIndex\r\n                && overrideContext.$middle === middle\r\n                && overrideContext.$last === last) {\r\n                continue;\r\n            }\r\n            bindingContext[local] = items[currIndex];\r\n            overrideContext.$first = currIndex === 0;\r\n            overrideContext.$middle = middle;\r\n            overrideContext.$last = last;\r\n            overrideContext.$index = currIndex;\r\n            var odd = currIndex % 2 === 1;\r\n            overrideContext.$odd = odd;\r\n            overrideContext.$even = !odd;\r\n            repeat.updateBindings(view);\r\n        }\r\n        var minLength = Math$min(max_views_count, currItemCount);\r\n        for (var i = realViewsCount; i < minLength; i++) {\r\n            var overrideContext = createFullOverrideContext(repeat, items[i], i, currItemCount);\r\n            repeat.addView(overrideContext.bindingContext, overrideContext);\r\n        }\r\n        return true;\r\n    };\r\n    ArrayVirtualRepeatStrategy.prototype._standardProcessInstanceMutated = function ($repeat, array, splices) {\r\n        var _this = this;\r\n        var repeat = $repeat;\r\n        if (repeat.__queuedSplices) {\r\n            for (var i = 0, ii = splices.length; i < ii; ++i) {\r\n                var _a = splices[i], index = _a.index, removed = _a.removed, addedCount = _a.addedCount;\r\n                mergeSplice(repeat.__queuedSplices, index, removed, addedCount);\r\n            }\r\n            repeat.__array = array.slice(0);\r\n            return;\r\n        }\r\n        if (array.length === 0) {\r\n            repeat.removeAllViews(true, false);\r\n            repeat.resetCalculation();\r\n            repeat.__queuedSplices = repeat.__array = undefined;\r\n            return;\r\n        }\r\n        var maybePromise = this._runSplices(repeat, array.slice(0), splices);\r\n        if (maybePromise instanceof Promise) {\r\n            var queuedSplices_1 = repeat.__queuedSplices = [];\r\n            var runQueuedSplices_1 = function () {\r\n                if (!queuedSplices_1.length) {\r\n                    repeat.__queuedSplices = repeat.__array = undefined;\r\n                    return;\r\n                }\r\n                var nextPromise = _this._runSplices(repeat, repeat.__array, queuedSplices_1) || Promise.resolve();\r\n                nextPromise.then(runQueuedSplices_1);\r\n            };\r\n            maybePromise.then(runQueuedSplices_1);\r\n        }\r\n    };\r\n    ArrayVirtualRepeatStrategy.prototype._runSplices = function (repeat, newArray, splices) {\r\n        var firstIndex = repeat.$first;\r\n        var totalRemovedCount = 0;\r\n        var totalAddedCount = 0;\r\n        var splice;\r\n        var i = 0;\r\n        var spliceCount = splices.length;\r\n        var newArraySize = newArray.length;\r\n        var allSplicesAreInplace = true;\r\n        for (i = 0; spliceCount > i; i++) {\r\n            splice = splices[i];\r\n            var removedCount = splice.removed.length;\r\n            var addedCount = splice.addedCount;\r\n            totalRemovedCount += removedCount;\r\n            totalAddedCount += addedCount;\r\n            if (removedCount !== addedCount) {\r\n                allSplicesAreInplace = false;\r\n            }\r\n        }\r\n        if (allSplicesAreInplace) {\r\n            var lastIndex = repeat.lastViewIndex();\r\n            for (i = 0; spliceCount > i; i++) {\r\n                splice = splices[i];\r\n                for (var collectionIndex = splice.index; collectionIndex < splice.index + splice.addedCount; collectionIndex++) {\r\n                    if (collectionIndex >= firstIndex && collectionIndex <= lastIndex) {\r\n                        var viewIndex = collectionIndex - firstIndex;\r\n                        var overrideContext = createFullOverrideContext(repeat, newArray[collectionIndex], collectionIndex, newArraySize);\r\n                        repeat.removeView(viewIndex, true, true);\r\n                        repeat.insertView(viewIndex, overrideContext.bindingContext, overrideContext);\r\n                    }\r\n                }\r\n            }\r\n            return;\r\n        }\r\n        var firstIndexAfterMutation = firstIndex;\r\n        var itemHeight = repeat.itemHeight;\r\n        var originalSize = newArraySize + totalRemovedCount - totalAddedCount;\r\n        var currViewCount = repeat.viewCount();\r\n        var newViewCount = currViewCount;\r\n        if (originalSize === 0 && itemHeight === 0) {\r\n            repeat.resetCalculation();\r\n            repeat.itemsChanged();\r\n            return;\r\n        }\r\n        var all_splices_are_positive_and_before_view_port = totalRemovedCount === 0\r\n            && totalAddedCount > 0\r\n            && splices.every(function (splice) { return splice.index <= firstIndex; });\r\n        if (all_splices_are_positive_and_before_view_port) {\r\n            repeat.$first = firstIndex + totalAddedCount - 1;\r\n            repeat.topBufferHeight += totalAddedCount * itemHeight;\r\n            repeat.enableScroll();\r\n            var scrollerInfo = repeat.getScrollerInfo();\r\n            var scroller_scroll_top = scrollerInfo.scrollTop;\r\n            var top_buffer_distance = getDistanceToParent(repeat.topBufferEl, scrollerInfo.scroller);\r\n            var real_scroll_top = Math$max(0, scroller_scroll_top === 0\r\n                ? 0\r\n                : (scroller_scroll_top - top_buffer_distance));\r\n            var first_index_after_scroll_adjustment = real_scroll_top === 0\r\n                ? 0\r\n                : Math$floor(real_scroll_top / itemHeight);\r\n            if (scroller_scroll_top > top_buffer_distance\r\n                && first_index_after_scroll_adjustment === firstIndex) {\r\n                repeat.updateBufferElements(false);\r\n                repeat.scrollerEl.scrollTop = real_scroll_top + totalAddedCount * itemHeight;\r\n                this._remeasure(repeat, itemHeight, newViewCount, newArraySize, firstIndex);\r\n                return;\r\n            }\r\n        }\r\n        var lastViewIndex = repeat.lastViewIndex();\r\n        var all_splices_are_after_view_port = currViewCount > repeat.minViewsRequired\r\n            && splices.every(function (s) { return s.index > lastViewIndex; });\r\n        if (all_splices_are_after_view_port) {\r\n            repeat.bottomBufferHeight = Math$max(0, newArraySize - firstIndex - currViewCount) * itemHeight;\r\n            repeat.updateBufferElements(true);\r\n        }\r\n        else {\r\n            var viewsRequiredCount = repeat.minViewsRequired * 2;\r\n            if (viewsRequiredCount === 0) {\r\n                var scrollerInfo = repeat.getScrollerInfo();\r\n                var minViewsRequired = calcMinViewsRequired(scrollerInfo.height, itemHeight);\r\n                repeat.minViewsRequired = minViewsRequired;\r\n                viewsRequiredCount = minViewsRequired * 2;\r\n            }\r\n            for (i = 0; spliceCount > i; ++i) {\r\n                var _a = splices[i], addedCount = _a.addedCount, removedCount = _a.removed.length, spliceIndex = _a.index;\r\n                var removeDelta = removedCount - addedCount;\r\n                if (firstIndexAfterMutation > spliceIndex) {\r\n                    firstIndexAfterMutation = Math$max(0, firstIndexAfterMutation - removeDelta);\r\n                }\r\n            }\r\n            newViewCount = 0;\r\n            if (newArraySize <= repeat.minViewsRequired) {\r\n                firstIndexAfterMutation = 0;\r\n                newViewCount = newArraySize;\r\n            }\r\n            else {\r\n                if (newArraySize <= viewsRequiredCount) {\r\n                    newViewCount = newArraySize;\r\n                    firstIndexAfterMutation = 0;\r\n                }\r\n                else {\r\n                    newViewCount = viewsRequiredCount;\r\n                }\r\n            }\r\n            var newTopBufferItemCount = newArraySize >= firstIndexAfterMutation\r\n                ? firstIndexAfterMutation\r\n                : 0;\r\n            var viewCountDelta = newViewCount - currViewCount;\r\n            if (viewCountDelta > 0) {\r\n                for (i = 0; viewCountDelta > i; ++i) {\r\n                    var collectionIndex = firstIndexAfterMutation + currViewCount + i;\r\n                    var overrideContext = createFullOverrideContext(repeat, newArray[collectionIndex], collectionIndex, newArray.length);\r\n                    repeat.addView(overrideContext.bindingContext, overrideContext);\r\n                }\r\n            }\r\n            else {\r\n                var ii = Math$abs(viewCountDelta);\r\n                for (i = 0; ii > i; ++i) {\r\n                    repeat.removeView(newViewCount, true, false);\r\n                }\r\n            }\r\n            var newBotBufferItemCount = Math$max(0, newArraySize - newTopBufferItemCount - newViewCount);\r\n            repeat.$first = firstIndexAfterMutation;\r\n            repeat.topBufferHeight = newTopBufferItemCount * itemHeight;\r\n            repeat.bottomBufferHeight = newBotBufferItemCount * itemHeight;\r\n            repeat.updateBufferElements(true);\r\n        }\r\n        this._remeasure(repeat, itemHeight, newViewCount, newArraySize, firstIndexAfterMutation);\r\n    };\r\n    ArrayVirtualRepeatStrategy.prototype.updateAllViews = function (repeat, startIndex) {\r\n        var views = repeat.viewSlot.children;\r\n        var viewLength = views.length;\r\n        var collection = repeat.items;\r\n        var delta = Math$floor(repeat.topBufferHeight / repeat.itemHeight);\r\n        var collectionIndex = 0;\r\n        var view;\r\n        for (; viewLength > startIndex; ++startIndex) {\r\n            collectionIndex = startIndex + delta;\r\n            view = repeat.view(startIndex);\r\n            rebindView(repeat, view, collectionIndex, collection);\r\n            repeat.updateBindings(view);\r\n        }\r\n    };\r\n    ArrayVirtualRepeatStrategy.prototype.remeasure = function (repeat) {\r\n        this._remeasure(repeat, repeat.itemHeight, repeat.viewCount(), repeat.items.length, repeat.firstViewIndex());\r\n    };\r\n    ArrayVirtualRepeatStrategy.prototype._remeasure = function (repeat, itemHeight, newViewCount, newArraySize, firstIndex) {\r\n        var scrollerInfo = repeat.getScrollerInfo();\r\n        var scroller_scroll_top = scrollerInfo.scrollTop;\r\n        var top_buffer_distance = getDistanceToParent(repeat.topBufferEl, scrollerInfo.scroller);\r\n        var real_scroll_top = Math$max(0, scroller_scroll_top === 0\r\n            ? 0\r\n            : (scroller_scroll_top - top_buffer_distance));\r\n        var first_index_after_scroll_adjustment = real_scroll_top === 0\r\n            ? 0\r\n            : Math$floor(real_scroll_top / itemHeight);\r\n        if (first_index_after_scroll_adjustment + newViewCount >= newArraySize) {\r\n            first_index_after_scroll_adjustment = Math$max(0, newArraySize - newViewCount);\r\n        }\r\n        var top_buffer_item_count_after_scroll_adjustment = first_index_after_scroll_adjustment;\r\n        var bot_buffer_item_count_after_scroll_adjustment = Math$max(0, newArraySize - top_buffer_item_count_after_scroll_adjustment - newViewCount);\r\n        repeat.$first = first_index_after_scroll_adjustment;\r\n        repeat.topBufferHeight = top_buffer_item_count_after_scroll_adjustment * itemHeight;\r\n        repeat.bottomBufferHeight = bot_buffer_item_count_after_scroll_adjustment * itemHeight;\r\n        repeat._handlingMutations = false;\r\n        repeat.revertScrollCheckGuard();\r\n        repeat.updateBufferElements();\r\n        this.updateAllViews(repeat, 0);\r\n    };\r\n    return ArrayVirtualRepeatStrategy;\r\n}(ArrayRepeatStrategy));\n\nvar NullVirtualRepeatStrategy = (function (_super) {\r\n    __extends(NullVirtualRepeatStrategy, _super);\r\n    function NullVirtualRepeatStrategy() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    NullVirtualRepeatStrategy.prototype.createFirstRow = function () {\r\n        return null;\r\n    };\r\n    NullVirtualRepeatStrategy.prototype.count = function (items) {\r\n        return 0;\r\n    };\r\n    NullVirtualRepeatStrategy.prototype.getViewRange = function (repeat, scrollerInfo) {\r\n        return [0, 0];\r\n    };\r\n    NullVirtualRepeatStrategy.prototype.updateBuffers = function (repeat, firstIndex) { };\r\n    NullVirtualRepeatStrategy.prototype.onAttached = function () { };\r\n    NullVirtualRepeatStrategy.prototype.isNearTop = function () {\r\n        return false;\r\n    };\r\n    NullVirtualRepeatStrategy.prototype.isNearBottom = function () {\r\n        return false;\r\n    };\r\n    NullVirtualRepeatStrategy.prototype.initCalculation = function (repeat, items) {\r\n        repeat.itemHeight\r\n            = repeat.minViewsRequired\r\n                = 0;\r\n        return 2;\r\n    };\r\n    NullVirtualRepeatStrategy.prototype.instanceMutated = function () { };\r\n    NullVirtualRepeatStrategy.prototype.instanceChanged = function (repeat) {\r\n        repeat.removeAllViews(true, false);\r\n        repeat.resetCalculation();\r\n    };\r\n    NullVirtualRepeatStrategy.prototype.remeasure = function (repeat) { };\r\n    NullVirtualRepeatStrategy.prototype.updateAllViews = function () { };\r\n    NullVirtualRepeatStrategy.prototype.getCollectionObserver = function (observerLocator, items) {\r\n    };\r\n    return NullVirtualRepeatStrategy;\r\n}(NullRepeatStrategy));\n\nvar VirtualRepeatStrategyLocator = (function () {\r\n    function VirtualRepeatStrategyLocator() {\r\n        this.matchers = [];\r\n        this.strategies = [];\r\n        this.addStrategy(function (items) { return items === null || items === undefined; }, new NullVirtualRepeatStrategy());\r\n        this.addStrategy(function (items) { return items instanceof Array; }, new ArrayVirtualRepeatStrategy());\r\n    }\r\n    VirtualRepeatStrategyLocator.prototype.addStrategy = function (matcher, strategy) {\r\n        this.matchers.push(matcher);\r\n        this.strategies.push(strategy);\r\n    };\r\n    VirtualRepeatStrategyLocator.prototype.getStrategy = function (items) {\r\n        var matchers = this.matchers;\r\n        for (var i = 0, ii = matchers.length; i < ii; ++i) {\r\n            if (matchers[i](items)) {\r\n                return this.strategies[i];\r\n            }\r\n        }\r\n        return null;\r\n    };\r\n    return VirtualRepeatStrategyLocator;\r\n}());\n\nvar DefaultTemplateStrategy = (function () {\r\n    function DefaultTemplateStrategy() {\r\n    }\r\n    DefaultTemplateStrategy.prototype.getScrollContainer = function (element) {\r\n        return getScrollerElement(element);\r\n    };\r\n    DefaultTemplateStrategy.prototype.moveViewFirst = function (view, topBuffer) {\r\n        insertBeforeNode(view, DOM.nextElementSibling(topBuffer));\r\n    };\r\n    DefaultTemplateStrategy.prototype.moveViewLast = function (view, bottomBuffer) {\r\n        var previousSibling = bottomBuffer.previousSibling;\r\n        var referenceNode = previousSibling.nodeType === 8 && previousSibling.data === 'anchor' ? previousSibling : bottomBuffer;\r\n        insertBeforeNode(view, referenceNode);\r\n    };\r\n    DefaultTemplateStrategy.prototype.createBuffers = function (element) {\r\n        var parent = element.parentNode;\r\n        return [\r\n            parent.insertBefore(DOM.createElement('div'), element),\r\n            parent.insertBefore(DOM.createElement('div'), element.nextSibling),\r\n        ];\r\n    };\r\n    DefaultTemplateStrategy.prototype.removeBuffers = function (el, topBuffer, bottomBuffer) {\r\n        var parent = el.parentNode;\r\n        parent.removeChild(topBuffer);\r\n        parent.removeChild(bottomBuffer);\r\n    };\r\n    DefaultTemplateStrategy.prototype.getFirstElement = function (topBuffer, bottomBuffer) {\r\n        var firstEl = topBuffer.nextElementSibling;\r\n        return firstEl === bottomBuffer ? null : firstEl;\r\n    };\r\n    DefaultTemplateStrategy.prototype.getLastElement = function (topBuffer, bottomBuffer) {\r\n        var lastEl = bottomBuffer.previousElementSibling;\r\n        return lastEl === topBuffer ? null : lastEl;\r\n    };\r\n    return DefaultTemplateStrategy;\r\n}());\n\nvar BaseTableTemplateStrategy = (function (_super) {\r\n    __extends(BaseTableTemplateStrategy, _super);\r\n    function BaseTableTemplateStrategy() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    BaseTableTemplateStrategy.prototype.getScrollContainer = function (element) {\r\n        return getScrollerElement(this.getTable(element));\r\n    };\r\n    BaseTableTemplateStrategy.prototype.createBuffers = function (element) {\r\n        var parent = element.parentNode;\r\n        return [\r\n            parent.insertBefore(DOM.createElement('tr'), element),\r\n            parent.insertBefore(DOM.createElement('tr'), element.nextSibling),\r\n        ];\r\n    };\r\n    return BaseTableTemplateStrategy;\r\n}(DefaultTemplateStrategy));\r\nvar TableBodyStrategy = (function (_super) {\r\n    __extends(TableBodyStrategy, _super);\r\n    function TableBodyStrategy() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    TableBodyStrategy.prototype.getTable = function (element) {\r\n        return element.parentNode;\r\n    };\r\n    return TableBodyStrategy;\r\n}(BaseTableTemplateStrategy));\r\nvar TableRowStrategy = (function (_super) {\r\n    __extends(TableRowStrategy, _super);\r\n    function TableRowStrategy() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    TableRowStrategy.prototype.getTable = function (element) {\r\n        return element.parentNode.parentNode;\r\n    };\r\n    return TableRowStrategy;\r\n}(BaseTableTemplateStrategy));\n\nvar ListTemplateStrategy = (function (_super) {\r\n    __extends(ListTemplateStrategy, _super);\r\n    function ListTemplateStrategy() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    ListTemplateStrategy.prototype.createBuffers = function (element) {\r\n        var parent = element.parentNode;\r\n        return [\r\n            parent.insertBefore(DOM.createElement('li'), element),\r\n            parent.insertBefore(DOM.createElement('li'), element.nextSibling),\r\n        ];\r\n    };\r\n    return ListTemplateStrategy;\r\n}(DefaultTemplateStrategy));\n\nvar TemplateStrategyLocator = (function () {\r\n    function TemplateStrategyLocator(container) {\r\n        this.container = container;\r\n    }\r\n    TemplateStrategyLocator.prototype.getStrategy = function (element) {\r\n        var parent = element.parentNode;\r\n        var container = this.container;\r\n        if (parent === null) {\r\n            return container.get(DefaultTemplateStrategy);\r\n        }\r\n        var parentTagName = parent.tagName;\r\n        if (parentTagName === 'TBODY' || parentTagName === 'THEAD' || parentTagName === 'TFOOT') {\r\n            return container.get(TableRowStrategy);\r\n        }\r\n        if (parentTagName === 'TABLE') {\r\n            return container.get(TableBodyStrategy);\r\n        }\r\n        if (parentTagName === 'OL' || parentTagName === 'UL') {\r\n            return container.get(ListTemplateStrategy);\r\n        }\r\n        return container.get(DefaultTemplateStrategy);\r\n    };\r\n    TemplateStrategyLocator.inject = [Container];\r\n    return TemplateStrategyLocator;\r\n}());\n\nvar VirtualizationEvents = Object.assign(Object.create(null), {\r\n    scrollerSizeChange: 'virtual-repeat-scroller-size-changed',\r\n    itemSizeChange: 'virtual-repeat-item-size-changed',\r\n});\n\nvar getResizeObserverClass = function () { return PLATFORM.global.ResizeObserver; };\n\nvar VirtualRepeat = (function (_super) {\r\n    __extends(VirtualRepeat, _super);\r\n    function VirtualRepeat(element, viewFactory, instruction, viewSlot, viewResources, observerLocator, collectionStrategyLocator, templateStrategyLocator) {\r\n        var _this = _super.call(this, {\r\n            local: 'item',\r\n            viewsRequireLifecycle: viewsRequireLifecycle(viewFactory),\r\n        }) || this;\r\n        _this.$first = 0;\r\n        _this._isAttached = false;\r\n        _this._ticking = false;\r\n        _this._calledGetMore = false;\r\n        _this._skipNextScrollHandle = false;\r\n        _this._handlingMutations = false;\r\n        _this._lastGetMore = 0;\r\n        _this.element = element;\r\n        _this.viewFactory = viewFactory;\r\n        _this.instruction = instruction;\r\n        _this.viewSlot = viewSlot;\r\n        _this.lookupFunctions = viewResources['lookupFunctions'];\r\n        _this.observerLocator = observerLocator;\r\n        _this.taskQueue = observerLocator.taskQueue;\r\n        _this.strategyLocator = collectionStrategyLocator;\r\n        _this.templateStrategyLocator = templateStrategyLocator;\r\n        _this.edgeDistance = 5;\r\n        _this.sourceExpression = getItemsSourceExpression(_this.instruction, 'virtual-repeat.for');\r\n        _this.isOneTime = isOneTime(_this.sourceExpression);\r\n        _this.topBufferHeight\r\n            = _this.bottomBufferHeight\r\n                = _this.itemHeight\r\n                    = _this.distanceToTop\r\n                        = 0;\r\n        _this.revertScrollCheckGuard = function () {\r\n            _this._ticking = false;\r\n        };\r\n        _this._onScroll = _this._onScroll.bind(_this);\r\n        return _this;\r\n    }\r\n    VirtualRepeat.inject = function () {\r\n        return [\r\n            DOM.Element,\r\n            BoundViewFactory,\r\n            TargetInstruction,\r\n            ViewSlot,\r\n            ViewResources,\r\n            ObserverLocator,\r\n            VirtualRepeatStrategyLocator,\r\n            TemplateStrategyLocator,\r\n        ];\r\n    };\r\n    VirtualRepeat.$resource = function () {\r\n        return {\r\n            type: 'attribute',\r\n            name: 'virtual-repeat',\r\n            templateController: true,\r\n            bindables: ['items', 'local'],\r\n        };\r\n    };\r\n    VirtualRepeat.prototype.bind = function (bindingContext, overrideContext) {\r\n        this.scope = { bindingContext: bindingContext, overrideContext: overrideContext };\r\n    };\r\n    VirtualRepeat.prototype.attached = function () {\r\n        var _this = this;\r\n        this._isAttached = true;\r\n        var element = this.element;\r\n        var templateStrategy = this.templateStrategy = this.templateStrategyLocator.getStrategy(element);\r\n        var scrollerEl = this.scrollerEl = templateStrategy.getScrollContainer(element);\r\n        var _a = templateStrategy.createBuffers(element), topBufferEl = _a[0], bottomBufferEl = _a[1];\r\n        var isFixedHeightContainer = scrollerEl !== htmlElement;\r\n        var scrollListener = this._onScroll;\r\n        this.topBufferEl = topBufferEl;\r\n        this.bottomBufferEl = bottomBufferEl;\r\n        this.itemsChanged();\r\n        this._currScrollerInfo = this.getScrollerInfo();\r\n        if (isFixedHeightContainer) {\r\n            scrollerEl.addEventListener('scroll', scrollListener);\r\n        }\r\n        else {\r\n            var firstElement = templateStrategy.getFirstElement(topBufferEl, bottomBufferEl);\r\n            this.distanceToTop = firstElement === null ? 0 : getElementDistanceToTopOfDocument(topBufferEl);\r\n            DOM.addEventListener('scroll', scrollListener, false);\r\n            this._calcDistanceToTopInterval = PLATFORM.global.setInterval(function () {\r\n                var prevDistanceToTop = _this.distanceToTop;\r\n                var currDistanceToTop = getElementDistanceToTopOfDocument(topBufferEl);\r\n                _this.distanceToTop = currDistanceToTop;\r\n                if (prevDistanceToTop !== currDistanceToTop) {\r\n                    var currentScrollerInfo = _this.getScrollerInfo();\r\n                    var prevScrollerInfo = _this._currScrollerInfo;\r\n                    _this._currScrollerInfo = currentScrollerInfo;\r\n                    _this._handleScroll(currentScrollerInfo, prevScrollerInfo);\r\n                }\r\n            }, 500);\r\n        }\r\n        this.strategy.onAttached(this);\r\n    };\r\n    VirtualRepeat.prototype.call = function (context, changes) {\r\n        this[context](this.items, changes);\r\n    };\r\n    VirtualRepeat.prototype.detached = function () {\r\n        var scrollCt = this.scrollerEl;\r\n        var scrollListener = this._onScroll;\r\n        if (hasOverflowScroll(scrollCt)) {\r\n            scrollCt.removeEventListener('scroll', scrollListener);\r\n        }\r\n        else {\r\n            DOM.removeEventListener('scroll', scrollListener, false);\r\n        }\r\n        this.unobserveScroller();\r\n        this._currScrollerContentRect = undefined;\r\n        this._isAttached\r\n            = false;\r\n        this._unsubscribeCollection();\r\n        this.resetCalculation();\r\n        this.templateStrategy.removeBuffers(this.element, this.topBufferEl, this.bottomBufferEl);\r\n        this.topBufferEl = this.bottomBufferEl = this.scrollerEl = null;\r\n        this.removeAllViews(true, false);\r\n        var $clearInterval = PLATFORM.global.clearInterval;\r\n        $clearInterval(this._calcDistanceToTopInterval);\r\n        $clearInterval(this._sizeInterval);\r\n        this.distanceToTop\r\n            = this._sizeInterval\r\n                = this._calcDistanceToTopInterval = 0;\r\n    };\r\n    VirtualRepeat.prototype.unbind = function () {\r\n        this.scope = null;\r\n        this.items = null;\r\n    };\r\n    VirtualRepeat.prototype.itemsChanged = function () {\r\n        var _this = this;\r\n        this._unsubscribeCollection();\r\n        if (!this.scope || !this._isAttached) {\r\n            return;\r\n        }\r\n        var items = this.items;\r\n        var strategy = this.strategy = this.strategyLocator.getStrategy(items);\r\n        if (strategy === null) {\r\n            throw new Error('Value is not iterateable for virtual repeat.');\r\n        }\r\n        if (!this.isOneTime && !this._observeInnerCollection()) {\r\n            this._observeCollection();\r\n        }\r\n        var calculationSignals = strategy.initCalculation(this, items);\r\n        strategy.instanceChanged(this, items, this.$first);\r\n        if (calculationSignals & 1) {\r\n            this.resetCalculation();\r\n        }\r\n        if ((calculationSignals & 2) === 0) {\r\n            var _a = PLATFORM.global, $setInterval = _a.setInterval, $clearInterval_1 = _a.clearInterval;\r\n            $clearInterval_1(this._sizeInterval);\r\n            this._sizeInterval = $setInterval(function () {\r\n                if (_this.items) {\r\n                    var firstView = _this.firstView() || _this.strategy.createFirstRow(_this);\r\n                    var newCalcSize = calcOuterHeight(firstView.firstChild);\r\n                    if (newCalcSize > 0) {\r\n                        $clearInterval_1(_this._sizeInterval);\r\n                        _this.itemsChanged();\r\n                    }\r\n                }\r\n                else {\r\n                    $clearInterval_1(_this._sizeInterval);\r\n                }\r\n            }, 500);\r\n        }\r\n        if (calculationSignals & 4) {\r\n            this.observeScroller(this.scrollerEl);\r\n        }\r\n    };\r\n    VirtualRepeat.prototype.handleCollectionMutated = function (collection, changes) {\r\n        if (this._ignoreMutation) {\r\n            return;\r\n        }\r\n        this._handlingMutations = true;\r\n        this.strategy.instanceMutated(this, collection, changes);\r\n    };\r\n    VirtualRepeat.prototype.handleInnerCollectionMutated = function (collection, changes) {\r\n        var _this = this;\r\n        if (this._ignoreMutation) {\r\n            return;\r\n        }\r\n        this._ignoreMutation = true;\r\n        var newItems = this.sourceExpression.evaluate(this.scope, this.lookupFunctions);\r\n        this.taskQueue.queueMicroTask(function () { return _this._ignoreMutation = false; });\r\n        if (newItems === this.items) {\r\n            this.itemsChanged();\r\n        }\r\n        else {\r\n            this.items = newItems;\r\n        }\r\n    };\r\n    VirtualRepeat.prototype.enableScroll = function () {\r\n        this._ticking = false;\r\n        this._handlingMutations = false;\r\n        this._skipNextScrollHandle = false;\r\n    };\r\n    VirtualRepeat.prototype.getScroller = function () {\r\n        return this.scrollerEl;\r\n    };\r\n    VirtualRepeat.prototype.getScrollerInfo = function () {\r\n        var scroller = this.scrollerEl;\r\n        return {\r\n            scroller: scroller,\r\n            scrollTop: scroller.scrollTop,\r\n            height: scroller === htmlElement\r\n                ? innerHeight\r\n                : calcScrollHeight(scroller),\r\n        };\r\n    };\r\n    VirtualRepeat.prototype.resetCalculation = function () {\r\n        this.$first\r\n            = this.topBufferHeight\r\n                = this.bottomBufferHeight\r\n                    = this.itemHeight\r\n                        = this.minViewsRequired = 0;\r\n        this._ignoreMutation\r\n            = this._handlingMutations\r\n                = this._ticking = false;\r\n        this.updateBufferElements(true);\r\n    };\r\n    VirtualRepeat.prototype._onScroll = function () {\r\n        var _this = this;\r\n        var isHandlingMutations = this._handlingMutations;\r\n        if (!this._ticking && !isHandlingMutations) {\r\n            var prevScrollerInfo_1 = this._currScrollerInfo;\r\n            var currentScrollerInfo_1 = this.getScrollerInfo();\r\n            this._currScrollerInfo = currentScrollerInfo_1;\r\n            this.taskQueue.queueMicroTask(function () {\r\n                _this._ticking = false;\r\n                _this._handleScroll(currentScrollerInfo_1, prevScrollerInfo_1);\r\n            });\r\n            this._ticking = true;\r\n        }\r\n        if (isHandlingMutations) {\r\n            this._handlingMutations = false;\r\n        }\r\n    };\r\n    VirtualRepeat.prototype._handleScroll = function (current_scroller_info, prev_scroller_info) {\r\n        if (!this._isAttached) {\r\n            return;\r\n        }\r\n        if (this._skipNextScrollHandle) {\r\n            this._skipNextScrollHandle = false;\r\n            return;\r\n        }\r\n        var items = this.items;\r\n        if (!items) {\r\n            return;\r\n        }\r\n        var strategy = this.strategy;\r\n        var old_range_start_index = this.$first;\r\n        var old_range_end_index = this.lastViewIndex();\r\n        var _a = strategy.getViewRange(this, current_scroller_info), new_range_start_index = _a[0], new_range_end_index = _a[1];\r\n        var scrolling_state = new_range_start_index > old_range_start_index\r\n            ? 1\r\n            : new_range_start_index < old_range_start_index\r\n                ? 2\r\n                : 0;\r\n        var didMovedViews = 0;\r\n        if (new_range_start_index >= old_range_start_index && old_range_end_index === new_range_end_index\r\n            || new_range_end_index === old_range_end_index && old_range_end_index >= new_range_end_index) {\r\n            if (new_range_start_index >= old_range_start_index && old_range_end_index === new_range_end_index) {\r\n                if (strategy.isNearBottom(this, new_range_end_index)) {\r\n                    scrolling_state |= 8;\r\n                }\r\n            }\r\n            else if (strategy.isNearTop(this, new_range_start_index)) {\r\n                scrolling_state |= 4;\r\n            }\r\n        }\r\n        else {\r\n            if (new_range_start_index > old_range_start_index\r\n                && old_range_end_index >= new_range_start_index\r\n                && new_range_end_index >= old_range_end_index) {\r\n                var views_to_move_count = new_range_start_index - old_range_start_index;\r\n                this._moveViews(views_to_move_count, 1);\r\n                didMovedViews = 1;\r\n                if (strategy.isNearBottom(this, new_range_end_index)) {\r\n                    scrolling_state |= 8;\r\n                }\r\n            }\r\n            else if (old_range_start_index > new_range_start_index\r\n                && old_range_start_index <= new_range_end_index\r\n                && old_range_end_index >= new_range_end_index) {\r\n                var views_to_move_count = old_range_end_index - new_range_end_index;\r\n                this._moveViews(views_to_move_count, -1);\r\n                didMovedViews = 1;\r\n                if (strategy.isNearTop(this, new_range_start_index)) {\r\n                    scrolling_state |= 4;\r\n                }\r\n            }\r\n            else if (old_range_end_index < new_range_start_index || old_range_start_index > new_range_end_index) {\r\n                strategy.remeasure(this);\r\n                if (old_range_end_index < new_range_start_index) {\r\n                    if (strategy.isNearBottom(this, new_range_end_index)) {\r\n                        scrolling_state |= 8;\r\n                    }\r\n                }\r\n                else if (strategy.isNearTop(this, new_range_start_index)) {\r\n                    scrolling_state |= 4;\r\n                }\r\n            }\r\n            else {\r\n                if (old_range_start_index !== new_range_start_index || old_range_end_index !== new_range_end_index) {\r\n                    console.log(\"[!] Scroll intersection not handled. With indices: \"\r\n                        + \"new [\".concat(new_range_start_index, \", \").concat(new_range_end_index, \"] / old [\").concat(old_range_start_index, \", \").concat(old_range_end_index, \"]\"));\r\n                    strategy.remeasure(this);\r\n                }\r\n                else {\r\n                    console.log('[!] Scroll handled, and there\\'s no changes');\r\n                }\r\n            }\r\n        }\r\n        if (didMovedViews === 1) {\r\n            this.$first = new_range_start_index;\r\n            strategy.updateBuffers(this, new_range_start_index);\r\n        }\r\n        if ((scrolling_state & 9) === 9\r\n            || (scrolling_state & 6) === 6) {\r\n            this.getMore(new_range_start_index, (scrolling_state & 4) > 0, (scrolling_state & 8) > 0);\r\n        }\r\n        else {\r\n            var scroll_top_delta = current_scroller_info.scrollTop - prev_scroller_info.scrollTop;\r\n            scrolling_state = scroll_top_delta > 0\r\n                ? 1\r\n                : scroll_top_delta < 0\r\n                    ? 2\r\n                    : 0;\r\n            if (strategy.isNearTop(this, new_range_start_index)) {\r\n                scrolling_state |= 4;\r\n            }\r\n            if (strategy.isNearBottom(this, new_range_end_index)) {\r\n                scrolling_state |= 8;\r\n            }\r\n            if ((scrolling_state & 9) === 9\r\n                || (scrolling_state & 6) === 6) {\r\n                this.getMore(new_range_start_index, (scrolling_state & 4) > 0, (scrolling_state & 8) > 0);\r\n            }\r\n        }\r\n    };\r\n    VirtualRepeat.prototype._moveViews = function (viewsCount, direction) {\r\n        var repeat = this;\r\n        if (direction === -1) {\r\n            var startIndex = repeat.firstViewIndex();\r\n            while (viewsCount--) {\r\n                var view = repeat.lastView();\r\n                rebindAndMoveView(repeat, view, --startIndex, false);\r\n            }\r\n        }\r\n        else {\r\n            var lastIndex = repeat.lastViewIndex();\r\n            while (viewsCount--) {\r\n                var view = repeat.view(0);\r\n                rebindAndMoveView(repeat, view, ++lastIndex, true);\r\n            }\r\n        }\r\n    };\r\n    VirtualRepeat.prototype.getMore = function (topIndex, isNearTop, isNearBottom, force) {\r\n        var _this = this;\r\n        if (isNearTop || isNearBottom || force) {\r\n            if (!this._calledGetMore) {\r\n                var executeGetMore = function (time) {\r\n                    if (time - _this._lastGetMore < 16) {\r\n                        return;\r\n                    }\r\n                    _this._lastGetMore = time;\r\n                    _this._calledGetMore = true;\r\n                    var revertCalledGetMore = function () {\r\n                        _this._calledGetMore = false;\r\n                    };\r\n                    var firstView = _this.firstView();\r\n                    if (firstView === null) {\r\n                        revertCalledGetMore();\r\n                        return;\r\n                    }\r\n                    var firstViewElement = firstView.firstChild;\r\n                    var scrollNextAttrName = 'infinite-scroll-next';\r\n                    var func = firstViewElement\r\n                        && firstViewElement.au\r\n                        && firstViewElement.au[scrollNextAttrName]\r\n                        ? firstViewElement.au[scrollNextAttrName].instruction.attributes[scrollNextAttrName]\r\n                        : undefined;\r\n                    if (func === undefined) {\r\n                        revertCalledGetMore();\r\n                    }\r\n                    else {\r\n                        var scrollContext = {\r\n                            topIndex: topIndex,\r\n                            isAtBottom: isNearBottom,\r\n                            isAtTop: isNearTop,\r\n                        };\r\n                        var overrideContext = _this.scope.overrideContext;\r\n                        overrideContext.$scrollContext = scrollContext;\r\n                        if (typeof func === 'string') {\r\n                            var bindingContext = overrideContext.bindingContext;\r\n                            var getMoreFuncName = firstView.firstChild.getAttribute(scrollNextAttrName);\r\n                            var funcCall = bindingContext[getMoreFuncName];\r\n                            if (typeof funcCall === 'function') {\r\n                                revertCalledGetMore();\r\n                                var result = funcCall.call(bindingContext, topIndex, isNearBottom, isNearTop);\r\n                                if (result instanceof Promise) {\r\n                                    _this._calledGetMore = true;\r\n                                    return result.then(function () {\r\n                                        revertCalledGetMore();\r\n                                    });\r\n                                }\r\n                            }\r\n                            else {\r\n                                throw new Error(\"'\".concat(scrollNextAttrName, \"' must be a function or evaluate to one\"));\r\n                            }\r\n                        }\r\n                        else if (func.sourceExpression) {\r\n                            revertCalledGetMore();\r\n                            return func.sourceExpression.evaluate(_this.scope);\r\n                        }\r\n                        else {\r\n                            throw new Error(\"'\".concat(scrollNextAttrName, \"' must be a function or evaluate to one\"));\r\n                        }\r\n                    }\r\n                };\r\n                $raf(executeGetMore);\r\n            }\r\n        }\r\n    };\r\n    VirtualRepeat.prototype.updateBufferElements = function (skipUpdate) {\r\n        this.topBufferEl.style.height = \"\".concat(this.topBufferHeight, \"px\");\r\n        this.bottomBufferEl.style.height = \"\".concat(this.bottomBufferHeight, \"px\");\r\n        if (skipUpdate) {\r\n            this._ticking = true;\r\n            $raf(this.revertScrollCheckGuard);\r\n        }\r\n    };\r\n    VirtualRepeat.prototype._unsubscribeCollection = function () {\r\n        var collectionObserver = this.collectionObserver;\r\n        if (collectionObserver) {\r\n            collectionObserver.unsubscribe(this.callContext, this);\r\n            this.collectionObserver = this.callContext = null;\r\n        }\r\n    };\r\n    VirtualRepeat.prototype.firstView = function () {\r\n        return this.view(0);\r\n    };\r\n    VirtualRepeat.prototype.lastView = function () {\r\n        return this.view(this.viewCount() - 1);\r\n    };\r\n    VirtualRepeat.prototype.firstViewIndex = function () {\r\n        var firstView = this.firstView();\r\n        return firstView === null ? -1 : firstView.overrideContext.$index;\r\n    };\r\n    VirtualRepeat.prototype.lastViewIndex = function () {\r\n        var lastView = this.lastView();\r\n        return lastView === null ? -1 : lastView.overrideContext.$index;\r\n    };\r\n    VirtualRepeat.prototype.observeScroller = function (scrollerEl) {\r\n        var _this = this;\r\n        var sizeChangeHandler = function (newRect) {\r\n            $raf(function () {\r\n                if (newRect === _this._currScrollerContentRect) {\r\n                    _this.itemsChanged();\r\n                }\r\n            });\r\n        };\r\n        var ResizeObserverConstructor = getResizeObserverClass();\r\n        if (typeof ResizeObserverConstructor === 'function') {\r\n            var observer = this._scrollerResizeObserver;\r\n            if (observer) {\r\n                observer.disconnect();\r\n            }\r\n            observer = this._scrollerResizeObserver = new ResizeObserverConstructor(function (entries) {\r\n                var oldRect = _this._currScrollerContentRect;\r\n                var newRect = entries[0].contentRect;\r\n                _this._currScrollerContentRect = newRect;\r\n                if (oldRect === undefined || newRect.height !== oldRect.height || newRect.width !== oldRect.width) {\r\n                    sizeChangeHandler(newRect);\r\n                }\r\n            });\r\n            observer.observe(scrollerEl);\r\n        }\r\n        var elEvents = this._scrollerEvents;\r\n        if (elEvents) {\r\n            elEvents.disposeAll();\r\n        }\r\n        var sizeChangeEventsHandler = function () {\r\n            $raf(function () {\r\n                _this.itemsChanged();\r\n            });\r\n        };\r\n        elEvents = this._scrollerEvents = new ElementEvents(scrollerEl);\r\n        elEvents.subscribe(VirtualizationEvents.scrollerSizeChange, sizeChangeEventsHandler, false);\r\n        elEvents.subscribe(VirtualizationEvents.itemSizeChange, sizeChangeEventsHandler, false);\r\n    };\r\n    VirtualRepeat.prototype.unobserveScroller = function () {\r\n        var observer = this._scrollerResizeObserver;\r\n        if (observer) {\r\n            observer.disconnect();\r\n        }\r\n        var scrollerEvents = this._scrollerEvents;\r\n        if (scrollerEvents) {\r\n            scrollerEvents.disposeAll();\r\n        }\r\n        this._scrollerResizeObserver\r\n            = this._scrollerEvents = undefined;\r\n    };\r\n    VirtualRepeat.prototype._observeInnerCollection = function () {\r\n        var items = this._getInnerCollection();\r\n        var strategy = this.strategyLocator.getStrategy(items);\r\n        if (!strategy) {\r\n            return false;\r\n        }\r\n        var collectionObserver = strategy.getCollectionObserver(this.observerLocator, items);\r\n        if (!collectionObserver) {\r\n            return false;\r\n        }\r\n        var context = \"handleInnerCollectionMutated\";\r\n        this.collectionObserver = collectionObserver;\r\n        this.callContext = context;\r\n        collectionObserver.subscribe(context, this);\r\n        return true;\r\n    };\r\n    VirtualRepeat.prototype._getInnerCollection = function () {\r\n        var expression = unwrapExpression(this.sourceExpression);\r\n        if (!expression) {\r\n            return null;\r\n        }\r\n        return expression.evaluate(this.scope, null);\r\n    };\r\n    VirtualRepeat.prototype._observeCollection = function () {\r\n        var collectionObserver = this.strategy.getCollectionObserver(this.observerLocator, this.items);\r\n        if (collectionObserver) {\r\n            this.callContext = \"handleCollectionMutated\";\r\n            this.collectionObserver = collectionObserver;\r\n            collectionObserver.subscribe(this.callContext, this);\r\n        }\r\n    };\r\n    VirtualRepeat.prototype.viewCount = function () {\r\n        return this.viewSlot.children.length;\r\n    };\r\n    VirtualRepeat.prototype.views = function () {\r\n        return this.viewSlot.children;\r\n    };\r\n    VirtualRepeat.prototype.view = function (index) {\r\n        var viewSlot = this.viewSlot;\r\n        return index < 0 || index > viewSlot.children.length - 1 ? null : viewSlot.children[index];\r\n    };\r\n    VirtualRepeat.prototype.addView = function (bindingContext, overrideContext) {\r\n        var view = this.viewFactory.create();\r\n        view.bind(bindingContext, overrideContext);\r\n        this.viewSlot.add(view);\r\n        return view;\r\n    };\r\n    VirtualRepeat.prototype.insertView = function (index, bindingContext, overrideContext) {\r\n        var view = this.viewFactory.create();\r\n        view.bind(bindingContext, overrideContext);\r\n        this.viewSlot.insert(index, view);\r\n    };\r\n    VirtualRepeat.prototype.removeAllViews = function (returnToCache, skipAnimation) {\r\n        return this.viewSlot.removeAll(returnToCache, skipAnimation);\r\n    };\r\n    VirtualRepeat.prototype.removeView = function (index, returnToCache, skipAnimation) {\r\n        return this.viewSlot.removeAt(index, returnToCache, skipAnimation);\r\n    };\r\n    VirtualRepeat.prototype.updateBindings = function (view) {\r\n        var bindings = view.bindings;\r\n        var j = bindings.length;\r\n        while (j--) {\r\n            updateOneTimeBinding(bindings[j]);\r\n        }\r\n        var controllers = view.controllers;\r\n        j = controllers.length;\r\n        while (j--) {\r\n            var boundProperties = controllers[j].boundProperties;\r\n            var k = boundProperties.length;\r\n            while (k--) {\r\n                var binding = boundProperties[k].binding;\r\n                updateOneTimeBinding(binding);\r\n            }\r\n        }\r\n    };\r\n    return VirtualRepeat;\r\n}(AbstractRepeater));\n\nvar InfiniteScrollNext = (function () {\r\n    function InfiniteScrollNext() {\r\n    }\r\n    InfiniteScrollNext.$resource = function () {\r\n        return {\r\n            type: 'attribute',\r\n            name: 'infinite-scroll-next',\r\n        };\r\n    };\r\n    return InfiniteScrollNext;\r\n}());\n\nfunction configure(config) {\r\n    config.globalResources(VirtualRepeat, InfiniteScrollNext);\r\n}\n\nexport { InfiniteScrollNext, VirtualRepeat, VirtualizationEvents, configure };\n//# sourceMappingURL=aurelia-ui-virtualization.js.map\n","import { LiteralString, Binary, Conditional, LiteralPrimitive, CallMember, AccessMember, AccessScope, AccessKeyed, BindingBehavior, ValueConverter, getContextFor, Parser, bindingBehavior, bindingMode } from 'aurelia-binding';\nimport { BindingLanguage, ViewResources, customAttribute, bindable } from 'aurelia-templating';\nimport { getLogger } from 'aurelia-logging';\nimport { DOM } from 'aurelia-pal';\nimport { Optional, Lazy } from 'aurelia-dependency-injection';\nimport { TaskQueue } from 'aurelia-task-queue';\n\n/**\r\n * Validates objects and properties.\r\n */\r\nvar Validator = /** @class */ (function () {\r\n    function Validator() {\r\n    }\r\n    return Validator;\r\n}());\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n    extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n    return extendStatics(d, b);\r\n};\r\n\r\nfunction __extends(d, b) {\r\n    extendStatics(d, b);\r\n    function __() { this.constructor = d; }\r\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nfunction __decorate(decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nfunction __spreadArrays() {\r\n    for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n    for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n        for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n            r[k] = a[j];\r\n    return r;\r\n}\n\n/**\r\n * The result of validating an individual validation rule.\r\n */\r\nvar ValidateResult = /** @class */ (function () {\r\n    /**\r\n     * @param rule The rule associated with the result. Validator implementation specific.\r\n     * @param object The object that was validated.\r\n     * @param propertyName The name of the property that was validated.\r\n     * @param error The error, if the result is a validation error.\r\n     */\r\n    function ValidateResult(rule, object, propertyName, valid, message) {\r\n        if (message === void 0) { message = null; }\r\n        this.rule = rule;\r\n        this.object = object;\r\n        this.propertyName = propertyName;\r\n        this.valid = valid;\r\n        this.message = message;\r\n        this.id = ValidateResult.nextId++;\r\n    }\r\n    ValidateResult.prototype.toString = function () {\r\n        return this.valid ? 'Valid.' : this.message;\r\n    };\r\n    ValidateResult.nextId = 0;\r\n    return ValidateResult;\r\n}());\n\n/**\r\n * Sets, unsets and retrieves rules on an object or constructor function.\r\n */\r\nvar Rules = /** @class */ (function () {\r\n    function Rules() {\r\n    }\r\n    /**\r\n     * Applies the rules to a target.\r\n     */\r\n    Rules.set = function (target, rules) {\r\n        if (target instanceof Function) {\r\n            target = target.prototype;\r\n        }\r\n        Object.defineProperty(target, Rules.key, { enumerable: false, configurable: false, writable: true, value: rules });\r\n    };\r\n    /**\r\n     * Removes rules from a target.\r\n     */\r\n    Rules.unset = function (target) {\r\n        if (target instanceof Function) {\r\n            target = target.prototype;\r\n        }\r\n        target[Rules.key] = null;\r\n    };\r\n    /**\r\n     * Retrieves the target's rules.\r\n     */\r\n    Rules.get = function (target) {\r\n        return target[Rules.key] || null;\r\n    };\r\n    /**\r\n     * The name of the property that stores the rules.\r\n     */\r\n    Rules.key = '__rules__';\r\n    return Rules;\r\n}());\n\n// tslint:disable:no-empty\r\nvar ExpressionVisitor = /** @class */ (function () {\r\n    function ExpressionVisitor() {\r\n    }\r\n    ExpressionVisitor.prototype.visitChain = function (chain) {\r\n        this.visitArgs(chain.expressions);\r\n    };\r\n    ExpressionVisitor.prototype.visitBindingBehavior = function (behavior) {\r\n        behavior.expression.accept(this);\r\n        this.visitArgs(behavior.args);\r\n    };\r\n    ExpressionVisitor.prototype.visitValueConverter = function (converter) {\r\n        converter.expression.accept(this);\r\n        this.visitArgs(converter.args);\r\n    };\r\n    ExpressionVisitor.prototype.visitAssign = function (assign) {\r\n        assign.target.accept(this);\r\n        assign.value.accept(this);\r\n    };\r\n    ExpressionVisitor.prototype.visitConditional = function (conditional) {\r\n        conditional.condition.accept(this);\r\n        conditional.yes.accept(this);\r\n        conditional.no.accept(this);\r\n    };\r\n    ExpressionVisitor.prototype.visitAccessThis = function (access) {\r\n        access.ancestor = access.ancestor;\r\n    };\r\n    ExpressionVisitor.prototype.visitAccessScope = function (access) {\r\n        access.name = access.name;\r\n    };\r\n    ExpressionVisitor.prototype.visitAccessMember = function (access) {\r\n        access.object.accept(this);\r\n    };\r\n    ExpressionVisitor.prototype.visitAccessKeyed = function (access) {\r\n        access.object.accept(this);\r\n        access.key.accept(this);\r\n    };\r\n    ExpressionVisitor.prototype.visitCallScope = function (call) {\r\n        this.visitArgs(call.args);\r\n    };\r\n    ExpressionVisitor.prototype.visitCallFunction = function (call) {\r\n        call.func.accept(this);\r\n        this.visitArgs(call.args);\r\n    };\r\n    ExpressionVisitor.prototype.visitCallMember = function (call) {\r\n        call.object.accept(this);\r\n        this.visitArgs(call.args);\r\n    };\r\n    ExpressionVisitor.prototype.visitPrefix = function (prefix) {\r\n        prefix.expression.accept(this);\r\n    };\r\n    ExpressionVisitor.prototype.visitBinary = function (binary) {\r\n        binary.left.accept(this);\r\n        binary.right.accept(this);\r\n    };\r\n    ExpressionVisitor.prototype.visitLiteralPrimitive = function (literal) {\r\n        literal.value = literal.value;\r\n    };\r\n    ExpressionVisitor.prototype.visitLiteralArray = function (literal) {\r\n        this.visitArgs(literal.elements);\r\n    };\r\n    ExpressionVisitor.prototype.visitLiteralObject = function (literal) {\r\n        this.visitArgs(literal.values);\r\n    };\r\n    ExpressionVisitor.prototype.visitLiteralString = function (literal) {\r\n        literal.value = literal.value;\r\n    };\r\n    ExpressionVisitor.prototype.visitArgs = function (args) {\r\n        for (var i = 0; i < args.length; i++) {\r\n            args[i].accept(this);\r\n        }\r\n    };\r\n    return ExpressionVisitor;\r\n}());\n\nvar ValidationMessageParser = /** @class */ (function () {\r\n    function ValidationMessageParser(bindinqLanguage) {\r\n        this.bindinqLanguage = bindinqLanguage;\r\n        this.emptyStringExpression = new LiteralString('');\r\n        this.nullExpression = new LiteralPrimitive(null);\r\n        this.undefinedExpression = new LiteralPrimitive(undefined);\r\n        this.cache = {};\r\n    }\r\n    ValidationMessageParser.prototype.parse = function (message) {\r\n        if (this.cache[message] !== undefined) {\r\n            return this.cache[message];\r\n        }\r\n        var parts = this.bindinqLanguage.parseInterpolation(null, message);\r\n        if (parts === null) {\r\n            return new LiteralString(message);\r\n        }\r\n        var expression = new LiteralString(parts[0]);\r\n        for (var i = 1; i < parts.length; i += 2) {\r\n            expression = new Binary('+', expression, new Binary('+', this.coalesce(parts[i]), new LiteralString(parts[i + 1])));\r\n        }\r\n        MessageExpressionValidator.validate(expression, message);\r\n        this.cache[message] = expression;\r\n        return expression;\r\n    };\r\n    ValidationMessageParser.prototype.coalesce = function (part) {\r\n        // part === null || part === undefined ? '' : part\r\n        return new Conditional(new Binary('||', new Binary('===', part, this.nullExpression), new Binary('===', part, this.undefinedExpression)), this.emptyStringExpression, new CallMember(part, 'toString', []));\r\n    };\r\n    ValidationMessageParser.inject = [BindingLanguage];\r\n    return ValidationMessageParser;\r\n}());\r\nvar MessageExpressionValidator = /** @class */ (function (_super) {\r\n    __extends(MessageExpressionValidator, _super);\r\n    function MessageExpressionValidator(originalMessage) {\r\n        var _this = _super.call(this) || this;\r\n        _this.originalMessage = originalMessage;\r\n        return _this;\r\n    }\r\n    MessageExpressionValidator.validate = function (expression, originalMessage) {\r\n        var visitor = new MessageExpressionValidator(originalMessage);\r\n        expression.accept(visitor);\r\n    };\r\n    MessageExpressionValidator.prototype.visitAccessScope = function (access) {\r\n        if (access.ancestor !== 0) {\r\n            throw new Error('$parent is not permitted in validation message expressions.');\r\n        }\r\n        if (['displayName', 'propertyName', 'value', 'object', 'config', 'getDisplayName'].indexOf(access.name) !== -1) {\r\n            getLogger('aurelia-validation')\r\n                // tslint:disable-next-line:max-line-length\r\n                .warn(\"Did you mean to use \\\"$\" + access.name + \"\\\" instead of \\\"\" + access.name + \"\\\" in this validation message template: \\\"\" + this.originalMessage + \"\\\"?\");\r\n        }\r\n    };\r\n    return MessageExpressionValidator;\r\n}(ExpressionVisitor));\n\n/**\r\n * Dictionary of validation messages. [messageKey]: messageExpression\r\n */\r\nvar validationMessages = {\r\n    /**\r\n     * The default validation message. Used with rules that have no standard message.\r\n     */\r\n    default: \"${$displayName} is invalid.\",\r\n    required: \"${$displayName} is required.\",\r\n    matches: \"${$displayName} is not correctly formatted.\",\r\n    email: \"${$displayName} is not a valid email.\",\r\n    minLength: \"${$displayName} must be at least ${$config.length} character${$config.length === 1 ? '' : 's'}.\",\r\n    maxLength: \"${$displayName} cannot be longer than ${$config.length} character${$config.length === 1 ? '' : 's'}.\",\r\n    minItems: \"${$displayName} must contain at least ${$config.count} item${$config.count === 1 ? '' : 's'}.\",\r\n    maxItems: \"${$displayName} cannot contain more than ${$config.count} item${$config.count === 1 ? '' : 's'}.\",\r\n    min: \"${$displayName} must be at least ${$config.constraint}.\",\r\n    max: \"${$displayName} must be at most ${$config.constraint}.\",\r\n    range: \"${$displayName} must be between or equal to ${$config.min} and ${$config.max}.\",\r\n    between: \"${$displayName} must be between but not equal to ${$config.min} and ${$config.max}.\",\r\n    equals: \"${$displayName} must be ${$config.expectedValue}.\",\r\n};\r\n/**\r\n * Retrieves validation messages and property display names.\r\n */\r\nvar ValidationMessageProvider = /** @class */ (function () {\r\n    function ValidationMessageProvider(parser) {\r\n        this.parser = parser;\r\n    }\r\n    /**\r\n     * Returns a message binding expression that corresponds to the key.\r\n     * @param key The message key.\r\n     */\r\n    ValidationMessageProvider.prototype.getMessage = function (key) {\r\n        var message;\r\n        if (key in validationMessages) {\r\n            message = validationMessages[key];\r\n        }\r\n        else {\r\n            message = validationMessages['default'];\r\n        }\r\n        return this.parser.parse(message);\r\n    };\r\n    /**\r\n     * Formulates a property display name using the property name and the configured\r\n     * displayName (if provided).\r\n     * Override this with your own custom logic.\r\n     * @param propertyName The property name.\r\n     */\r\n    ValidationMessageProvider.prototype.getDisplayName = function (propertyName, displayName) {\r\n        if (displayName !== null && displayName !== undefined) {\r\n            return (displayName instanceof Function) ? displayName() : displayName;\r\n        }\r\n        // split on upper-case letters.\r\n        var words = propertyName.toString().split(/(?=[A-Z])/).join(' ');\r\n        // capitalize first letter.\r\n        return words.charAt(0).toUpperCase() + words.slice(1);\r\n    };\r\n    ValidationMessageProvider.inject = [ValidationMessageParser];\r\n    return ValidationMessageProvider;\r\n}());\n\n/**\r\n * Validates.\r\n * Responsible for validating objects and properties.\r\n */\r\nvar StandardValidator = /** @class */ (function (_super) {\r\n    __extends(StandardValidator, _super);\r\n    function StandardValidator(messageProvider, resources) {\r\n        var _this = _super.call(this) || this;\r\n        _this.messageProvider = messageProvider;\r\n        _this.lookupFunctions = resources.lookupFunctions;\r\n        _this.getDisplayName = messageProvider.getDisplayName.bind(messageProvider);\r\n        return _this;\r\n    }\r\n    /**\r\n     * Validates the specified property.\r\n     * @param object The object to validate.\r\n     * @param propertyName The name of the property to validate.\r\n     * @param rules Optional. If unspecified, the rules will be looked up using the metadata\r\n     * for the object created by ValidationRules....on(class/object)\r\n     */\r\n    StandardValidator.prototype.validateProperty = function (object, propertyName, rules) {\r\n        return this.validate(object, propertyName, rules || null);\r\n    };\r\n    /**\r\n     * Validates all rules for specified object and it's properties.\r\n     * @param object The object to validate.\r\n     * @param rules Optional. If unspecified, the rules will be looked up using the metadata\r\n     * for the object created by ValidationRules....on(class/object)\r\n     */\r\n    StandardValidator.prototype.validateObject = function (object, rules) {\r\n        return this.validate(object, null, rules || null);\r\n    };\r\n    /**\r\n     * Determines whether a rule exists in a set of rules.\r\n     * @param rules The rules to search.\r\n     * @parem rule The rule to find.\r\n     */\r\n    StandardValidator.prototype.ruleExists = function (rules, rule) {\r\n        var i = rules.length;\r\n        while (i--) {\r\n            if (rules[i].indexOf(rule) !== -1) {\r\n                return true;\r\n            }\r\n        }\r\n        return false;\r\n    };\r\n    StandardValidator.prototype.getMessage = function (rule, object, value) {\r\n        var expression = rule.message || this.messageProvider.getMessage(rule.messageKey);\r\n        // tslint:disable-next-line:prefer-const\r\n        var _a = rule.property, propertyName = _a.name, displayName = _a.displayName;\r\n        if (propertyName !== null) {\r\n            displayName = this.messageProvider.getDisplayName(propertyName, displayName);\r\n        }\r\n        var overrideContext = {\r\n            $displayName: displayName,\r\n            $propertyName: propertyName,\r\n            $value: value,\r\n            $object: object,\r\n            $config: rule.config,\r\n            // returns the name of a given property, given just the property name (irrespective of the property's displayName)\r\n            // split on capital letters, first letter ensured to be capitalized\r\n            $getDisplayName: this.getDisplayName\r\n        };\r\n        return expression.evaluate({ bindingContext: object, overrideContext: overrideContext }, this.lookupFunctions);\r\n    };\r\n    StandardValidator.prototype.validateRuleSequence = function (object, propertyName, ruleSequence, sequence, results) {\r\n        var _this = this;\r\n        // are we validating all properties or a single property?\r\n        var validateAllProperties = propertyName === null || propertyName === undefined;\r\n        var rules = ruleSequence[sequence];\r\n        var allValid = true;\r\n        // validate each rule.\r\n        var promises = [];\r\n        var _loop_1 = function (i) {\r\n            var rule = rules[i];\r\n            // is the rule related to the property we're validating.\r\n            // tslint:disable-next-line:triple-equals | Use loose equality for property keys\r\n            if (!validateAllProperties && rule.property.name != propertyName) {\r\n                return \"continue\";\r\n            }\r\n            // is this a conditional rule? is the condition met?\r\n            if (rule.when && !rule.when(object)) {\r\n                return \"continue\";\r\n            }\r\n            // validate.\r\n            var value = rule.property.name === null ? object : object[rule.property.name];\r\n            var promiseOrBoolean = rule.condition(value, object);\r\n            if (!(promiseOrBoolean instanceof Promise)) {\r\n                promiseOrBoolean = Promise.resolve(promiseOrBoolean);\r\n            }\r\n            promises.push(promiseOrBoolean.then(function (valid) {\r\n                var message = valid ? null : _this.getMessage(rule, object, value);\r\n                results.push(new ValidateResult(rule, object, rule.property.name, valid, message));\r\n                allValid = allValid && valid;\r\n                return valid;\r\n            }));\r\n        };\r\n        for (var i = 0; i < rules.length; i++) {\r\n            _loop_1(i);\r\n        }\r\n        return Promise.all(promises)\r\n            .then(function () {\r\n            sequence++;\r\n            if (allValid && sequence < ruleSequence.length) {\r\n                return _this.validateRuleSequence(object, propertyName, ruleSequence, sequence, results);\r\n            }\r\n            return results;\r\n        });\r\n    };\r\n    StandardValidator.prototype.validate = function (object, propertyName, rules) {\r\n        // rules specified?\r\n        if (!rules) {\r\n            // no. attempt to locate the rules.\r\n            rules = Rules.get(object);\r\n        }\r\n        // any rules?\r\n        if (!rules || rules.length === 0) {\r\n            return Promise.resolve([]);\r\n        }\r\n        return this.validateRuleSequence(object, propertyName, rules, 0, []);\r\n    };\r\n    StandardValidator.inject = [ValidationMessageProvider, ViewResources];\r\n    return StandardValidator;\r\n}(Validator));\n\n/**\r\n * Validation triggers.\r\n */\r\nvar validateTrigger;\r\n(function (validateTrigger) {\r\n    /**\r\n     * Manual validation.  Use the controller's `validate()` and  `reset()` methods\r\n     * to validate all bindings.\r\n     */\r\n    validateTrigger[validateTrigger[\"manual\"] = 0] = \"manual\";\r\n    /**\r\n     * Validate the binding when the binding's target element fires a DOM \"blur\" event.\r\n     */\r\n    validateTrigger[validateTrigger[\"blur\"] = 1] = \"blur\";\r\n    /**\r\n     * Validate the binding when it updates the model due to a change in the view.\r\n     */\r\n    validateTrigger[validateTrigger[\"change\"] = 2] = \"change\";\r\n    /**\r\n     * Validate the binding when the binding's target element fires a DOM \"blur\" event and\r\n     * when it updates the model due to a change in the view.\r\n     */\r\n    validateTrigger[validateTrigger[\"changeOrBlur\"] = 3] = \"changeOrBlur\";\r\n})(validateTrigger || (validateTrigger = {}));\n\n/**\r\n * Aurelia Validation Configuration API\r\n */\r\nvar GlobalValidationConfiguration = /** @class */ (function () {\r\n    function GlobalValidationConfiguration() {\r\n        this.validatorType = StandardValidator;\r\n        this.validationTrigger = GlobalValidationConfiguration.DEFAULT_VALIDATION_TRIGGER;\r\n    }\r\n    /**\r\n     * Use a custom Validator implementation.\r\n     */\r\n    GlobalValidationConfiguration.prototype.customValidator = function (type) {\r\n        this.validatorType = type;\r\n        return this;\r\n    };\r\n    GlobalValidationConfiguration.prototype.defaultValidationTrigger = function (trigger) {\r\n        this.validationTrigger = trigger;\r\n        return this;\r\n    };\r\n    GlobalValidationConfiguration.prototype.getDefaultValidationTrigger = function () {\r\n        return this.validationTrigger;\r\n    };\r\n    /**\r\n     * Applies the configuration.\r\n     */\r\n    GlobalValidationConfiguration.prototype.apply = function (container) {\r\n        var validator = container.get(this.validatorType);\r\n        container.registerInstance(Validator, validator);\r\n        container.registerInstance(GlobalValidationConfiguration, this);\r\n    };\r\n    GlobalValidationConfiguration.DEFAULT_VALIDATION_TRIGGER = validateTrigger.blur;\r\n    return GlobalValidationConfiguration;\r\n}());\n\n/**\r\n * Gets the DOM element associated with the data-binding. Most of the time it's\r\n * the binding.target but sometimes binding.target is an aurelia custom element,\r\n * or custom attribute which is a javascript \"class\" instance, so we need to use\r\n * the controller's container to retrieve the actual DOM element.\r\n */\r\nfunction getTargetDOMElement(binding, view) {\r\n    var target = binding.target;\r\n    // DOM element\r\n    if (target instanceof Element) {\r\n        return target;\r\n    }\r\n    // custom element or custom attribute\r\n    // tslint:disable-next-line:prefer-const\r\n    for (var i = 0, ii = view.controllers.length; i < ii; i++) {\r\n        var controller = view.controllers[i];\r\n        if (controller.viewModel === target) {\r\n            var element = controller.container.get(DOM.Element);\r\n            if (element) {\r\n                return element;\r\n            }\r\n            throw new Error(\"Unable to locate target element for \\\"\" + binding.sourceExpression + \"\\\".\");\r\n        }\r\n    }\r\n    throw new Error(\"Unable to locate target element for \\\"\" + binding.sourceExpression + \"\\\".\");\r\n}\n\nfunction getObject(expression, objectExpression, source) {\r\n    var value = objectExpression.evaluate(source, null);\r\n    if (value === null || value === undefined || value instanceof Object) {\r\n        return value;\r\n    }\r\n    // tslint:disable-next-line:max-line-length\r\n    throw new Error(\"The '\" + objectExpression + \"' part of '\" + expression + \"' evaluates to \" + value + \" instead of an object, null or undefined.\");\r\n}\r\n/**\r\n * Retrieves the object and property name for the specified expression.\r\n * @param expression The expression\r\n * @param source The scope\r\n */\r\nfunction getPropertyInfo(expression, source) {\r\n    var originalExpression = expression;\r\n    while (expression instanceof BindingBehavior || expression instanceof ValueConverter) {\r\n        expression = expression.expression;\r\n    }\r\n    var object;\r\n    var propertyName;\r\n    if (expression instanceof AccessScope) {\r\n        object = getContextFor(expression.name, source, expression.ancestor);\r\n        propertyName = expression.name;\r\n    }\r\n    else if (expression instanceof AccessMember) {\r\n        object = getObject(originalExpression, expression.object, source);\r\n        propertyName = expression.name;\r\n    }\r\n    else if (expression instanceof AccessKeyed) {\r\n        object = getObject(originalExpression, expression.object, source);\r\n        propertyName = expression.key.evaluate(source);\r\n    }\r\n    else {\r\n        throw new Error(\"Expression '\" + originalExpression + \"' is not compatible with the validate binding-behavior.\");\r\n    }\r\n    if (object === null || object === undefined) {\r\n        return null;\r\n    }\r\n    return { object: object, propertyName: propertyName };\r\n}\n\nfunction isString(value) {\r\n    return Object.prototype.toString.call(value) === '[object String]';\r\n}\r\nfunction isNumber(value) {\r\n    return Object.prototype.toString.call(value) === '[object Number]';\r\n}\n\nvar PropertyAccessorParser = /** @class */ (function () {\r\n    function PropertyAccessorParser(parser) {\r\n        this.parser = parser;\r\n    }\r\n    PropertyAccessorParser.prototype.parse = function (property) {\r\n        if (isString(property) || isNumber(property)) {\r\n            return property;\r\n        }\r\n        var accessorText = getAccessorExpression(property.toString());\r\n        var accessor = this.parser.parse(accessorText);\r\n        if (accessor instanceof AccessScope\r\n            || accessor instanceof AccessMember && accessor.object instanceof AccessScope) {\r\n            return accessor.name;\r\n        }\r\n        throw new Error(\"Invalid property expression: \\\"\" + accessor + \"\\\"\");\r\n    };\r\n    PropertyAccessorParser.inject = [Parser];\r\n    return PropertyAccessorParser;\r\n}());\r\nfunction getAccessorExpression(fn) {\r\n    /* tslint:disable:max-line-length */\r\n    var classic = /^function\\s*\\([$_\\w\\d]+\\)\\s*\\{(?:\\s*\"use strict\";)?\\s*(?:[$_\\w\\d.['\"\\]+;]+)?\\s*return\\s+[$_\\w\\d]+\\.([$_\\w\\d]+)\\s*;?\\s*\\}$/;\r\n    /* tslint:enable:max-line-length */\r\n    var arrow = /^\\(?[$_\\w\\d]+\\)?\\s*=>\\s*[$_\\w\\d]+\\.([$_\\w\\d]+)$/;\r\n    var match = classic.exec(fn) || arrow.exec(fn);\r\n    if (match === null) {\r\n        throw new Error(\"Unable to parse accessor function:\\n\" + fn);\r\n    }\r\n    return match[1];\r\n}\n\nvar ValidateEvent = /** @class */ (function () {\r\n    function ValidateEvent(\r\n    /**\r\n     * The type of validate event. Either \"validate\" or \"reset\".\r\n     */\r\n    type, \r\n    /**\r\n     * The controller's current array of errors. For an array containing both\r\n     * failed rules and passed rules, use the \"results\" property.\r\n     */\r\n    errors, \r\n    /**\r\n     * The controller's current array of validate results. This\r\n     * includes both passed rules and failed rules. For an array of only failed rules,\r\n     * use the \"errors\" property.\r\n     */\r\n    results, \r\n    /**\r\n     * The instruction passed to the \"validate\" or \"reset\" event. Will be null when\r\n     * the controller's validate/reset method was called with no instruction argument.\r\n     */\r\n    instruction, \r\n    /**\r\n     * In events with type === \"validate\", this property will contain the result\r\n     * of validating the instruction (see \"instruction\" property). Use the controllerValidateResult\r\n     * to access the validate results specific to the call to \"validate\"\r\n     * (as opposed to using the \"results\" and \"errors\" properties to access the controller's entire\r\n     * set of results/errors).\r\n     */\r\n    controllerValidateResult) {\r\n        this.type = type;\r\n        this.errors = errors;\r\n        this.results = results;\r\n        this.instruction = instruction;\r\n        this.controllerValidateResult = controllerValidateResult;\r\n    }\r\n    return ValidateEvent;\r\n}());\n\n/**\r\n * Orchestrates validation.\r\n * Manages a set of bindings, renderers and objects.\r\n * Exposes the current list of validation results for binding purposes.\r\n */\r\nvar ValidationController = /** @class */ (function () {\r\n    function ValidationController(validator, propertyParser, config) {\r\n        this.validator = validator;\r\n        this.propertyParser = propertyParser;\r\n        // Registered bindings (via the validate binding behavior)\r\n        this.bindings = new Map();\r\n        // Renderers that have been added to the controller instance.\r\n        this.renderers = [];\r\n        /**\r\n         * Validation results that have been rendered by the controller.\r\n         */\r\n        this.results = [];\r\n        /**\r\n         * Validation errors that have been rendered by the controller.\r\n         */\r\n        this.errors = [];\r\n        /**\r\n         *  Whether the controller is currently validating.\r\n         */\r\n        this.validating = false;\r\n        // Elements related to validation results that have been rendered.\r\n        this.elements = new Map();\r\n        // Objects that have been added to the controller instance (entity-style validation).\r\n        this.objects = new Map();\r\n        // Promise that resolves when validation has completed.\r\n        this.finishValidating = Promise.resolve();\r\n        this.eventCallbacks = [];\r\n        this.validateTrigger = config instanceof GlobalValidationConfiguration\r\n            ? config.getDefaultValidationTrigger()\r\n            : GlobalValidationConfiguration.DEFAULT_VALIDATION_TRIGGER;\r\n    }\r\n    /**\r\n     * Subscribe to controller validate and reset events. These events occur when the\r\n     * controller's \"validate\"\" and \"reset\" methods are called.\r\n     * @param callback The callback to be invoked when the controller validates or resets.\r\n     */\r\n    ValidationController.prototype.subscribe = function (callback) {\r\n        var _this = this;\r\n        this.eventCallbacks.push(callback);\r\n        return {\r\n            dispose: function () {\r\n                var index = _this.eventCallbacks.indexOf(callback);\r\n                if (index === -1) {\r\n                    return;\r\n                }\r\n                _this.eventCallbacks.splice(index, 1);\r\n            }\r\n        };\r\n    };\r\n    /**\r\n     * Adds an object to the set of objects that should be validated when validate is called.\r\n     * @param object The object.\r\n     * @param rules Optional. The rules. If rules aren't supplied the Validator implementation will lookup the rules.\r\n     */\r\n    ValidationController.prototype.addObject = function (object, rules) {\r\n        this.objects.set(object, rules);\r\n    };\r\n    /**\r\n     * Removes an object from the set of objects that should be validated when validate is called.\r\n     * @param object The object.\r\n     */\r\n    ValidationController.prototype.removeObject = function (object) {\r\n        this.objects.delete(object);\r\n        this.processResultDelta('reset', this.results.filter(function (result) { return result.object === object; }), []);\r\n    };\r\n    /**\r\n     * Adds and renders an error.\r\n     */\r\n    ValidationController.prototype.addError = function (message, object, propertyName) {\r\n        if (propertyName === void 0) { propertyName = null; }\r\n        var resolvedPropertyName;\r\n        if (propertyName === null) {\r\n            resolvedPropertyName = propertyName;\r\n        }\r\n        else {\r\n            resolvedPropertyName = this.propertyParser.parse(propertyName);\r\n        }\r\n        var result = new ValidateResult({ __manuallyAdded__: true }, object, resolvedPropertyName, false, message);\r\n        this.processResultDelta('validate', [], [result]);\r\n        return result;\r\n    };\r\n    /**\r\n     * Removes and unrenders an error.\r\n     */\r\n    ValidationController.prototype.removeError = function (result) {\r\n        if (this.results.indexOf(result) !== -1) {\r\n            this.processResultDelta('reset', [result], []);\r\n        }\r\n    };\r\n    /**\r\n     * Adds a renderer.\r\n     * @param renderer The renderer.\r\n     */\r\n    ValidationController.prototype.addRenderer = function (renderer) {\r\n        var _this = this;\r\n        this.renderers.push(renderer);\r\n        renderer.render({\r\n            kind: 'validate',\r\n            render: this.results.map(function (result) { return ({ result: result, elements: _this.elements.get(result) }); }),\r\n            unrender: []\r\n        });\r\n    };\r\n    /**\r\n     * Removes a renderer.\r\n     * @param renderer The renderer.\r\n     */\r\n    ValidationController.prototype.removeRenderer = function (renderer) {\r\n        var _this = this;\r\n        this.renderers.splice(this.renderers.indexOf(renderer), 1);\r\n        renderer.render({\r\n            kind: 'reset',\r\n            render: [],\r\n            unrender: this.results.map(function (result) { return ({ result: result, elements: _this.elements.get(result) }); })\r\n        });\r\n    };\r\n    /**\r\n     * Registers a binding with the controller.\r\n     * @param binding The binding instance.\r\n     * @param target The DOM element.\r\n     * @param rules (optional) rules associated with the binding. Validator implementation specific.\r\n     */\r\n    ValidationController.prototype.registerBinding = function (binding, target, rules) {\r\n        this.bindings.set(binding, { target: target, rules: rules, propertyInfo: null });\r\n    };\r\n    /**\r\n     * Unregisters a binding with the controller.\r\n     * @param binding The binding instance.\r\n     */\r\n    ValidationController.prototype.unregisterBinding = function (binding) {\r\n        this.resetBinding(binding);\r\n        this.bindings.delete(binding);\r\n    };\r\n    /**\r\n     * Interprets the instruction and returns a predicate that will identify\r\n     * relevant results in the list of rendered validation results.\r\n     */\r\n    ValidationController.prototype.getInstructionPredicate = function (instruction) {\r\n        var _this = this;\r\n        if (instruction) {\r\n            var object_1 = instruction.object, propertyName_1 = instruction.propertyName, rules_1 = instruction.rules;\r\n            var predicate_1;\r\n            if (instruction.propertyName) {\r\n                predicate_1 = function (x) { return x.object === object_1 && x.propertyName === propertyName_1; };\r\n            }\r\n            else {\r\n                predicate_1 = function (x) { return x.object === object_1; };\r\n            }\r\n            if (rules_1) {\r\n                return function (x) { return predicate_1(x) && _this.validator.ruleExists(rules_1, x.rule); };\r\n            }\r\n            return predicate_1;\r\n        }\r\n        else {\r\n            return function () { return true; };\r\n        }\r\n    };\r\n    /**\r\n     * Validates and renders results.\r\n     * @param instruction Optional. Instructions on what to validate. If undefined, all\r\n     * objects and bindings will be validated.\r\n     */\r\n    ValidationController.prototype.validate = function (instruction) {\r\n        var _this = this;\r\n        // Get a function that will process the validation instruction.\r\n        var execute;\r\n        if (instruction) {\r\n            // tslint:disable-next-line:prefer-const\r\n            var object_2 = instruction.object, propertyName_2 = instruction.propertyName, rules_2 = instruction.rules;\r\n            // if rules were not specified, check the object map.\r\n            rules_2 = rules_2 || this.objects.get(object_2);\r\n            // property specified?\r\n            if (instruction.propertyName === undefined) {\r\n                // validate the specified object.\r\n                execute = function () { return _this.validator.validateObject(object_2, rules_2); };\r\n            }\r\n            else {\r\n                // validate the specified property.\r\n                execute = function () { return _this.validator.validateProperty(object_2, propertyName_2, rules_2); };\r\n            }\r\n        }\r\n        else {\r\n            // validate all objects and bindings.\r\n            execute = function () {\r\n                var promises = [];\r\n                for (var _i = 0, _a = Array.from(_this.objects); _i < _a.length; _i++) {\r\n                    var _b = _a[_i], object = _b[0], rules = _b[1];\r\n                    promises.push(_this.validator.validateObject(object, rules));\r\n                }\r\n                for (var _c = 0, _d = Array.from(_this.bindings); _c < _d.length; _c++) {\r\n                    var _e = _d[_c], binding = _e[0], rules = _e[1].rules;\r\n                    var propertyInfo = getPropertyInfo(binding.sourceExpression, binding.source);\r\n                    if (!propertyInfo || _this.objects.has(propertyInfo.object)) {\r\n                        continue;\r\n                    }\r\n                    promises.push(_this.validator.validateProperty(propertyInfo.object, propertyInfo.propertyName, rules));\r\n                }\r\n                return Promise.all(promises).then(function (resultSets) { return resultSets.reduce(function (a, b) { return a.concat(b); }, []); });\r\n            };\r\n        }\r\n        // Wait for any existing validation to finish, execute the instruction, render the results.\r\n        this.validating = true;\r\n        var returnPromise = this.finishValidating\r\n            .then(execute)\r\n            .then(function (newResults) {\r\n            var predicate = _this.getInstructionPredicate(instruction);\r\n            var oldResults = _this.results.filter(predicate);\r\n            _this.processResultDelta('validate', oldResults, newResults);\r\n            if (returnPromise === _this.finishValidating) {\r\n                _this.validating = false;\r\n            }\r\n            var result = {\r\n                instruction: instruction,\r\n                valid: newResults.find(function (x) { return !x.valid; }) === undefined,\r\n                results: newResults\r\n            };\r\n            _this.invokeCallbacks(instruction, result);\r\n            return result;\r\n        })\r\n            .catch(function (exception) {\r\n            // recover, to enable subsequent calls to validate()\r\n            _this.validating = false;\r\n            _this.finishValidating = Promise.resolve();\r\n            return Promise.reject(exception);\r\n        });\r\n        this.finishValidating = returnPromise;\r\n        return returnPromise;\r\n    };\r\n    /**\r\n     * Resets any rendered validation results (unrenders).\r\n     * @param instruction Optional. Instructions on what to reset. If unspecified all rendered results\r\n     * will be unrendered.\r\n     */\r\n    ValidationController.prototype.reset = function (instruction) {\r\n        var predicate = this.getInstructionPredicate(instruction);\r\n        var oldResults = this.results.filter(predicate);\r\n        this.processResultDelta('reset', oldResults, []);\r\n        this.invokeCallbacks(instruction, null);\r\n    };\r\n    /**\r\n     * Gets the elements associated with an object and propertyName (if any).\r\n     */\r\n    ValidationController.prototype.getAssociatedElements = function (_a) {\r\n        var object = _a.object, propertyName = _a.propertyName;\r\n        var elements = [];\r\n        for (var _i = 0, _b = Array.from(this.bindings); _i < _b.length; _i++) {\r\n            var _c = _b[_i], binding = _c[0], target = _c[1].target;\r\n            var propertyInfo = getPropertyInfo(binding.sourceExpression, binding.source);\r\n            if (propertyInfo && propertyInfo.object === object && propertyInfo.propertyName === propertyName) {\r\n                elements.push(target);\r\n            }\r\n        }\r\n        return elements;\r\n    };\r\n    ValidationController.prototype.processResultDelta = function (kind, oldResults, newResults) {\r\n        // prepare the instruction.\r\n        var instruction = {\r\n            kind: kind,\r\n            render: [],\r\n            unrender: []\r\n        };\r\n        // create a shallow copy of newResults so we can mutate it without causing side-effects.\r\n        newResults = newResults.slice(0);\r\n        var _loop_1 = function (oldResult) {\r\n            // get the elements associated with the old result.\r\n            var elements = this_1.elements.get(oldResult);\r\n            // remove the old result from the element map.\r\n            this_1.elements.delete(oldResult);\r\n            // create the unrender instruction.\r\n            instruction.unrender.push({ result: oldResult, elements: elements });\r\n            // determine if there's a corresponding new result for the old result we are unrendering.\r\n            var newResultIndex = newResults.findIndex(function (x) { return x.rule === oldResult.rule && x.object === oldResult.object && x.propertyName === oldResult.propertyName; });\r\n            if (newResultIndex === -1) {\r\n                // no corresponding new result... simple remove.\r\n                this_1.results.splice(this_1.results.indexOf(oldResult), 1);\r\n                if (!oldResult.valid) {\r\n                    this_1.errors.splice(this_1.errors.indexOf(oldResult), 1);\r\n                }\r\n            }\r\n            else {\r\n                // there is a corresponding new result...\r\n                var newResult = newResults.splice(newResultIndex, 1)[0];\r\n                // get the elements that are associated with the new result.\r\n                var elements_1 = this_1.getAssociatedElements(newResult);\r\n                this_1.elements.set(newResult, elements_1);\r\n                // create a render instruction for the new result.\r\n                instruction.render.push({ result: newResult, elements: elements_1 });\r\n                // do an in-place replacement of the old result with the new result.\r\n                // this ensures any repeats bound to this.results will not thrash.\r\n                this_1.results.splice(this_1.results.indexOf(oldResult), 1, newResult);\r\n                if (!oldResult.valid && newResult.valid) {\r\n                    this_1.errors.splice(this_1.errors.indexOf(oldResult), 1);\r\n                }\r\n                else if (!oldResult.valid && !newResult.valid) {\r\n                    this_1.errors.splice(this_1.errors.indexOf(oldResult), 1, newResult);\r\n                }\r\n                else if (!newResult.valid) {\r\n                    this_1.errors.push(newResult);\r\n                }\r\n            }\r\n        };\r\n        var this_1 = this;\r\n        // create unrender instructions from the old results.\r\n        for (var _i = 0, oldResults_1 = oldResults; _i < oldResults_1.length; _i++) {\r\n            var oldResult = oldResults_1[_i];\r\n            _loop_1(oldResult);\r\n        }\r\n        // create render instructions from the remaining new results.\r\n        for (var _a = 0, newResults_1 = newResults; _a < newResults_1.length; _a++) {\r\n            var result = newResults_1[_a];\r\n            var elements = this.getAssociatedElements(result);\r\n            instruction.render.push({ result: result, elements: elements });\r\n            this.elements.set(result, elements);\r\n            this.results.push(result);\r\n            if (!result.valid) {\r\n                this.errors.push(result);\r\n            }\r\n        }\r\n        // render.\r\n        for (var _b = 0, _c = this.renderers; _b < _c.length; _b++) {\r\n            var renderer = _c[_b];\r\n            renderer.render(instruction);\r\n        }\r\n    };\r\n    /**\r\n     * Validates the property associated with a binding.\r\n     */\r\n    ValidationController.prototype.validateBinding = function (binding) {\r\n        if (!binding.isBound) {\r\n            return;\r\n        }\r\n        var propertyInfo = getPropertyInfo(binding.sourceExpression, binding.source);\r\n        var rules;\r\n        var registeredBinding = this.bindings.get(binding);\r\n        if (registeredBinding) {\r\n            rules = registeredBinding.rules;\r\n            registeredBinding.propertyInfo = propertyInfo;\r\n        }\r\n        if (!propertyInfo) {\r\n            return;\r\n        }\r\n        var object = propertyInfo.object, propertyName = propertyInfo.propertyName;\r\n        this.validate({ object: object, propertyName: propertyName, rules: rules });\r\n    };\r\n    /**\r\n     * Resets the results for a property associated with a binding.\r\n     */\r\n    ValidationController.prototype.resetBinding = function (binding) {\r\n        var registeredBinding = this.bindings.get(binding);\r\n        var propertyInfo = getPropertyInfo(binding.sourceExpression, binding.source);\r\n        if (!propertyInfo && registeredBinding) {\r\n            propertyInfo = registeredBinding.propertyInfo;\r\n        }\r\n        if (registeredBinding) {\r\n            registeredBinding.propertyInfo = null;\r\n        }\r\n        if (!propertyInfo) {\r\n            return;\r\n        }\r\n        var object = propertyInfo.object, propertyName = propertyInfo.propertyName;\r\n        this.reset({ object: object, propertyName: propertyName });\r\n    };\r\n    /**\r\n     * Changes the controller's validateTrigger.\r\n     * @param newTrigger The new validateTrigger\r\n     */\r\n    ValidationController.prototype.changeTrigger = function (newTrigger) {\r\n        this.validateTrigger = newTrigger;\r\n        var bindings = Array.from(this.bindings.keys());\r\n        for (var _i = 0, bindings_1 = bindings; _i < bindings_1.length; _i++) {\r\n            var binding = bindings_1[_i];\r\n            var source = binding.source;\r\n            binding.unbind();\r\n            binding.bind(source);\r\n        }\r\n    };\r\n    /**\r\n     * Revalidates the controller's current set of errors.\r\n     */\r\n    ValidationController.prototype.revalidateErrors = function () {\r\n        for (var _i = 0, _a = this.errors; _i < _a.length; _i++) {\r\n            var _b = _a[_i], object = _b.object, propertyName = _b.propertyName, rule = _b.rule;\r\n            if (rule.__manuallyAdded__) {\r\n                continue;\r\n            }\r\n            var rules = [[rule]];\r\n            this.validate({ object: object, propertyName: propertyName, rules: rules });\r\n        }\r\n    };\r\n    ValidationController.prototype.invokeCallbacks = function (instruction, result) {\r\n        if (this.eventCallbacks.length === 0) {\r\n            return;\r\n        }\r\n        var event = new ValidateEvent(result ? 'validate' : 'reset', this.errors, this.results, instruction || null, result);\r\n        for (var i = 0; i < this.eventCallbacks.length; i++) {\r\n            this.eventCallbacks[i](event);\r\n        }\r\n    };\r\n    ValidationController.inject = [Validator, PropertyAccessorParser, GlobalValidationConfiguration];\r\n    return ValidationController;\r\n}());\n\n/**\r\n * Binding behavior. Indicates the bound property should be validated.\r\n */\r\nvar ValidateBindingBehaviorBase = /** @class */ (function () {\r\n    function ValidateBindingBehaviorBase(taskQueue) {\r\n        this.taskQueue = taskQueue;\r\n    }\r\n    ValidateBindingBehaviorBase.prototype.bind = function (binding, source, rulesOrController, rules) {\r\n        var _this = this;\r\n        // identify the target element.\r\n        var target = getTargetDOMElement(binding, source);\r\n        // locate the controller.\r\n        var controller;\r\n        if (rulesOrController instanceof ValidationController) {\r\n            controller = rulesOrController;\r\n        }\r\n        else {\r\n            controller = source.container.get(Optional.of(ValidationController));\r\n            rules = rulesOrController;\r\n        }\r\n        if (controller === null) {\r\n            throw new Error(\"A ValidationController has not been registered.\");\r\n        }\r\n        controller.registerBinding(binding, target, rules);\r\n        binding.validationController = controller;\r\n        var trigger = this.getValidateTrigger(controller);\r\n        // tslint:disable-next-line:no-bitwise\r\n        if (trigger & validateTrigger.change) {\r\n            binding.vbbUpdateSource = binding.updateSource;\r\n            // tslint:disable-next-line:only-arrow-functions\r\n            // tslint:disable-next-line:space-before-function-paren\r\n            binding.updateSource = function (value) {\r\n                this.vbbUpdateSource(value);\r\n                this.validationController.validateBinding(this);\r\n            };\r\n        }\r\n        // tslint:disable-next-line:no-bitwise\r\n        if (trigger & validateTrigger.blur) {\r\n            binding.validateBlurHandler = function () {\r\n                _this.taskQueue.queueMicroTask(function () { return controller.validateBinding(binding); });\r\n            };\r\n            binding.validateTarget = target;\r\n            target.addEventListener('blur', binding.validateBlurHandler);\r\n        }\r\n        if (trigger !== validateTrigger.manual) {\r\n            binding.standardUpdateTarget = binding.updateTarget;\r\n            // tslint:disable-next-line:only-arrow-functions\r\n            // tslint:disable-next-line:space-before-function-paren\r\n            binding.updateTarget = function (value) {\r\n                this.standardUpdateTarget(value);\r\n                this.validationController.resetBinding(this);\r\n            };\r\n        }\r\n    };\r\n    ValidateBindingBehaviorBase.prototype.unbind = function (binding) {\r\n        // reset the binding to it's original state.\r\n        if (binding.vbbUpdateSource) {\r\n            binding.updateSource = binding.vbbUpdateSource;\r\n            binding.vbbUpdateSource = null;\r\n        }\r\n        if (binding.standardUpdateTarget) {\r\n            binding.updateTarget = binding.standardUpdateTarget;\r\n            binding.standardUpdateTarget = null;\r\n        }\r\n        if (binding.validateBlurHandler) {\r\n            binding.validateTarget.removeEventListener('blur', binding.validateBlurHandler);\r\n            binding.validateBlurHandler = null;\r\n            binding.validateTarget = null;\r\n        }\r\n        binding.validationController.unregisterBinding(binding);\r\n        binding.validationController = null;\r\n    };\r\n    return ValidateBindingBehaviorBase;\r\n}());\n\n/**\r\n * Binding behavior. Indicates the bound property should be validated\r\n * when the validate trigger specified by the associated controller's\r\n * validateTrigger property occurs.\r\n */\r\nvar ValidateBindingBehavior = /** @class */ (function (_super) {\r\n    __extends(ValidateBindingBehavior, _super);\r\n    function ValidateBindingBehavior() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    ValidateBindingBehavior.prototype.getValidateTrigger = function (controller) {\r\n        return controller.validateTrigger;\r\n    };\r\n    ValidateBindingBehavior.inject = [TaskQueue];\r\n    ValidateBindingBehavior = __decorate([\r\n        bindingBehavior('validate')\r\n    ], ValidateBindingBehavior);\r\n    return ValidateBindingBehavior;\r\n}(ValidateBindingBehaviorBase));\r\n/**\r\n * Binding behavior. Indicates the bound property will be validated\r\n * manually, by calling controller.validate(). No automatic validation\r\n * triggered by data-entry or blur will occur.\r\n */\r\nvar ValidateManuallyBindingBehavior = /** @class */ (function (_super) {\r\n    __extends(ValidateManuallyBindingBehavior, _super);\r\n    function ValidateManuallyBindingBehavior() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    ValidateManuallyBindingBehavior.prototype.getValidateTrigger = function () {\r\n        return validateTrigger.manual;\r\n    };\r\n    ValidateManuallyBindingBehavior.inject = [TaskQueue];\r\n    ValidateManuallyBindingBehavior = __decorate([\r\n        bindingBehavior('validateManually')\r\n    ], ValidateManuallyBindingBehavior);\r\n    return ValidateManuallyBindingBehavior;\r\n}(ValidateBindingBehaviorBase));\r\n/**\r\n * Binding behavior. Indicates the bound property should be validated\r\n * when the associated element blurs.\r\n */\r\nvar ValidateOnBlurBindingBehavior = /** @class */ (function (_super) {\r\n    __extends(ValidateOnBlurBindingBehavior, _super);\r\n    function ValidateOnBlurBindingBehavior() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    ValidateOnBlurBindingBehavior.prototype.getValidateTrigger = function () {\r\n        return validateTrigger.blur;\r\n    };\r\n    ValidateOnBlurBindingBehavior.inject = [TaskQueue];\r\n    ValidateOnBlurBindingBehavior = __decorate([\r\n        bindingBehavior('validateOnBlur')\r\n    ], ValidateOnBlurBindingBehavior);\r\n    return ValidateOnBlurBindingBehavior;\r\n}(ValidateBindingBehaviorBase));\r\n/**\r\n * Binding behavior. Indicates the bound property should be validated\r\n * when the associated element is changed by the user, causing a change\r\n * to the model.\r\n */\r\nvar ValidateOnChangeBindingBehavior = /** @class */ (function (_super) {\r\n    __extends(ValidateOnChangeBindingBehavior, _super);\r\n    function ValidateOnChangeBindingBehavior() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    ValidateOnChangeBindingBehavior.prototype.getValidateTrigger = function () {\r\n        return validateTrigger.change;\r\n    };\r\n    ValidateOnChangeBindingBehavior.inject = [TaskQueue];\r\n    ValidateOnChangeBindingBehavior = __decorate([\r\n        bindingBehavior('validateOnChange')\r\n    ], ValidateOnChangeBindingBehavior);\r\n    return ValidateOnChangeBindingBehavior;\r\n}(ValidateBindingBehaviorBase));\r\n/**\r\n * Binding behavior. Indicates the bound property should be validated\r\n * when the associated element blurs or is changed by the user, causing\r\n * a change to the model.\r\n */\r\nvar ValidateOnChangeOrBlurBindingBehavior = /** @class */ (function (_super) {\r\n    __extends(ValidateOnChangeOrBlurBindingBehavior, _super);\r\n    function ValidateOnChangeOrBlurBindingBehavior() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    ValidateOnChangeOrBlurBindingBehavior.prototype.getValidateTrigger = function () {\r\n        return validateTrigger.changeOrBlur;\r\n    };\r\n    ValidateOnChangeOrBlurBindingBehavior.inject = [TaskQueue];\r\n    ValidateOnChangeOrBlurBindingBehavior = __decorate([\r\n        bindingBehavior('validateOnChangeOrBlur')\r\n    ], ValidateOnChangeOrBlurBindingBehavior);\r\n    return ValidateOnChangeOrBlurBindingBehavior;\r\n}(ValidateBindingBehaviorBase));\n\n/**\r\n * Creates ValidationController instances.\r\n */\r\nvar ValidationControllerFactory = /** @class */ (function () {\r\n    function ValidationControllerFactory(container) {\r\n        this.container = container;\r\n    }\r\n    ValidationControllerFactory.get = function (container) {\r\n        return new ValidationControllerFactory(container);\r\n    };\r\n    /**\r\n     * Creates a new controller instance.\r\n     */\r\n    ValidationControllerFactory.prototype.create = function (validator) {\r\n        if (!validator) {\r\n            validator = this.container.get(Validator);\r\n        }\r\n        var propertyParser = this.container.get(PropertyAccessorParser);\r\n        var config = this.container.get(GlobalValidationConfiguration);\r\n        return new ValidationController(validator, propertyParser, config);\r\n    };\r\n    /**\r\n     * Creates a new controller and registers it in the current element's container so that it's\r\n     * available to the validate binding behavior and renderers.\r\n     */\r\n    ValidationControllerFactory.prototype.createForCurrentScope = function (validator) {\r\n        var controller = this.create(validator);\r\n        this.container.registerInstance(ValidationController, controller);\r\n        return controller;\r\n    };\r\n    return ValidationControllerFactory;\r\n}());\r\nValidationControllerFactory['protocol:aurelia:resolver'] = true;\n\nvar ValidationErrorsCustomAttribute = /** @class */ (function () {\r\n    function ValidationErrorsCustomAttribute(boundaryElement, controllerAccessor) {\r\n        this.boundaryElement = boundaryElement;\r\n        this.controllerAccessor = controllerAccessor;\r\n        this.controller = null;\r\n        this.errors = [];\r\n        this.errorsInternal = [];\r\n    }\r\n    ValidationErrorsCustomAttribute.inject = function () {\r\n        return [DOM.Element, Lazy.of(ValidationController)];\r\n    };\r\n    ValidationErrorsCustomAttribute.prototype.sort = function () {\r\n        this.errorsInternal.sort(function (a, b) {\r\n            if (a.targets[0] === b.targets[0]) {\r\n                return 0;\r\n            }\r\n            // tslint:disable-next-line:no-bitwise\r\n            return a.targets[0].compareDocumentPosition(b.targets[0]) & 2 ? 1 : -1;\r\n        });\r\n    };\r\n    ValidationErrorsCustomAttribute.prototype.interestingElements = function (elements) {\r\n        var _this = this;\r\n        return elements.filter(function (e) { return _this.boundaryElement.contains(e); });\r\n    };\r\n    ValidationErrorsCustomAttribute.prototype.render = function (instruction) {\r\n        var _loop_1 = function (result) {\r\n            var index = this_1.errorsInternal.findIndex(function (x) { return x.error === result; });\r\n            if (index !== -1) {\r\n                this_1.errorsInternal.splice(index, 1);\r\n            }\r\n        };\r\n        var this_1 = this;\r\n        for (var _i = 0, _a = instruction.unrender; _i < _a.length; _i++) {\r\n            var result = _a[_i].result;\r\n            _loop_1(result);\r\n        }\r\n        for (var _b = 0, _c = instruction.render; _b < _c.length; _b++) {\r\n            var _d = _c[_b], result = _d.result, elements = _d.elements;\r\n            if (result.valid) {\r\n                continue;\r\n            }\r\n            var targets = this.interestingElements(elements);\r\n            if (targets.length) {\r\n                this.errorsInternal.push({ error: result, targets: targets });\r\n            }\r\n        }\r\n        this.sort();\r\n        this.errors = this.errorsInternal;\r\n    };\r\n    ValidationErrorsCustomAttribute.prototype.bind = function () {\r\n        if (!this.controller) {\r\n            this.controller = this.controllerAccessor();\r\n        }\r\n        // this will call render() with the side-effect of updating this.errors\r\n        this.controller.addRenderer(this);\r\n    };\r\n    ValidationErrorsCustomAttribute.prototype.unbind = function () {\r\n        if (this.controller) {\r\n            this.controller.removeRenderer(this);\r\n        }\r\n    };\r\n    __decorate([\r\n        bindable({ defaultBindingMode: bindingMode.oneWay })\r\n    ], ValidationErrorsCustomAttribute.prototype, \"controller\", void 0);\r\n    __decorate([\r\n        bindable({ primaryProperty: true, defaultBindingMode: bindingMode.twoWay })\r\n    ], ValidationErrorsCustomAttribute.prototype, \"errors\", void 0);\r\n    ValidationErrorsCustomAttribute = __decorate([\r\n        customAttribute('validation-errors')\r\n    ], ValidationErrorsCustomAttribute);\r\n    return ValidationErrorsCustomAttribute;\r\n}());\n\nvar ValidationRendererCustomAttribute = /** @class */ (function () {\r\n    function ValidationRendererCustomAttribute() {\r\n    }\r\n    ValidationRendererCustomAttribute.prototype.created = function (view) {\r\n        this.container = view.container;\r\n    };\r\n    ValidationRendererCustomAttribute.prototype.bind = function () {\r\n        this.controller = this.container.get(ValidationController);\r\n        this.renderer = this.container.get(this.value);\r\n        this.controller.addRenderer(this.renderer);\r\n    };\r\n    ValidationRendererCustomAttribute.prototype.unbind = function () {\r\n        this.controller.removeRenderer(this.renderer);\r\n        this.controller = null;\r\n        this.renderer = null;\r\n    };\r\n    ValidationRendererCustomAttribute = __decorate([\r\n        customAttribute('validation-renderer')\r\n    ], ValidationRendererCustomAttribute);\r\n    return ValidationRendererCustomAttribute;\r\n}());\n\n/**\r\n * Part of the fluent rule API. Enables customizing property rules.\r\n */\r\nvar FluentRuleCustomizer = /** @class */ (function () {\r\n    function FluentRuleCustomizer(property, condition, config, fluentEnsure, fluentRules, parsers) {\r\n        if (config === void 0) { config = {}; }\r\n        this.fluentEnsure = fluentEnsure;\r\n        this.fluentRules = fluentRules;\r\n        this.parsers = parsers;\r\n        this.rule = {\r\n            property: property,\r\n            condition: condition,\r\n            config: config,\r\n            when: null,\r\n            messageKey: 'default',\r\n            message: null,\r\n            sequence: fluentRules.sequence\r\n        };\r\n        this.fluentEnsure._addRule(this.rule);\r\n    }\r\n    /**\r\n     * Validate subsequent rules after previously declared rules have\r\n     * been validated successfully. Use to postpone validation of costly\r\n     * rules until less expensive rules pass validation.\r\n     */\r\n    FluentRuleCustomizer.prototype.then = function () {\r\n        this.fluentRules.sequence++;\r\n        return this;\r\n    };\r\n    /**\r\n     * Specifies the key to use when looking up the rule's validation message.\r\n     */\r\n    FluentRuleCustomizer.prototype.withMessageKey = function (key) {\r\n        this.rule.messageKey = key;\r\n        this.rule.message = null;\r\n        return this;\r\n    };\r\n    /**\r\n     * Specifies rule's validation message.\r\n     */\r\n    FluentRuleCustomizer.prototype.withMessage = function (message) {\r\n        this.rule.messageKey = 'custom';\r\n        this.rule.message = this.parsers.message.parse(message);\r\n        return this;\r\n    };\r\n    /**\r\n     * Specifies a condition that must be met before attempting to validate the rule.\r\n     * @param condition A function that accepts the object as a parameter and returns true\r\n     * or false whether the rule should be evaluated.\r\n     */\r\n    FluentRuleCustomizer.prototype.when = function (condition) {\r\n        this.rule.when = condition;\r\n        return this;\r\n    };\r\n    /**\r\n     * Tags the rule instance, enabling the rule to be found easily\r\n     * using ValidationRules.taggedRules(rules, tag)\r\n     */\r\n    FluentRuleCustomizer.prototype.tag = function (tag) {\r\n        this.rule.tag = tag;\r\n        return this;\r\n    };\r\n    ///// FluentEnsure APIs /////\r\n    /**\r\n     * Target a property with validation rules.\r\n     * @param property The property to target. Can be the property name or a property accessor function.\r\n     */\r\n    FluentRuleCustomizer.prototype.ensure = function (subject) {\r\n        return this.fluentEnsure.ensure(subject);\r\n    };\r\n    /**\r\n     * Targets an object with validation rules.\r\n     */\r\n    FluentRuleCustomizer.prototype.ensureObject = function () {\r\n        return this.fluentEnsure.ensureObject();\r\n    };\r\n    Object.defineProperty(FluentRuleCustomizer.prototype, \"rules\", {\r\n        /**\r\n         * Rules that have been defined using the fluent API.\r\n         */\r\n        get: function () {\r\n            return this.fluentEnsure.rules;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Applies the rules to a class or object, making them discoverable by the StandardValidator.\r\n     * @param target A class or object.\r\n     */\r\n    FluentRuleCustomizer.prototype.on = function (target) {\r\n        return this.fluentEnsure.on(target);\r\n    };\r\n    ///////// FluentRules APIs /////////\r\n    /**\r\n     * Applies an ad-hoc rule function to the ensured property or object.\r\n     * @param condition The function to validate the rule.\r\n     * Will be called with two arguments, the property value and the object.\r\n     * Should return a boolean or a Promise that resolves to a boolean.\r\n     */\r\n    FluentRuleCustomizer.prototype.satisfies = function (condition, config) {\r\n        return this.fluentRules.satisfies(condition, config);\r\n    };\r\n    /**\r\n     * Applies a rule by name.\r\n     * @param name The name of the custom or standard rule.\r\n     * @param args The rule's arguments.\r\n     */\r\n    FluentRuleCustomizer.prototype.satisfiesRule = function (name) {\r\n        var _a;\r\n        var args = [];\r\n        for (var _i = 1; _i < arguments.length; _i++) {\r\n            args[_i - 1] = arguments[_i];\r\n        }\r\n        return (_a = this.fluentRules).satisfiesRule.apply(_a, __spreadArrays([name], args));\r\n    };\r\n    /**\r\n     * Applies the \"required\" rule to the property.\r\n     * The value cannot be null, undefined or whitespace.\r\n     */\r\n    FluentRuleCustomizer.prototype.required = function () {\r\n        return this.fluentRules.required();\r\n    };\r\n    /**\r\n     * Applies the \"matches\" rule to the property.\r\n     * Value must match the specified regular expression.\r\n     * null, undefined and empty-string values are considered valid.\r\n     */\r\n    FluentRuleCustomizer.prototype.matches = function (regex) {\r\n        return this.fluentRules.matches(regex);\r\n    };\r\n    /**\r\n     * Applies the \"email\" rule to the property.\r\n     * null, undefined and empty-string values are considered valid.\r\n     */\r\n    FluentRuleCustomizer.prototype.email = function () {\r\n        return this.fluentRules.email();\r\n    };\r\n    /**\r\n     * Applies the \"minLength\" STRING validation rule to the property.\r\n     * null, undefined and empty-string values are considered valid.\r\n     */\r\n    FluentRuleCustomizer.prototype.minLength = function (length) {\r\n        return this.fluentRules.minLength(length);\r\n    };\r\n    /**\r\n     * Applies the \"maxLength\" STRING validation rule to the property.\r\n     * null, undefined and empty-string values are considered valid.\r\n     */\r\n    FluentRuleCustomizer.prototype.maxLength = function (length) {\r\n        return this.fluentRules.maxLength(length);\r\n    };\r\n    /**\r\n     * Applies the \"minItems\" ARRAY validation rule to the property.\r\n     * null and undefined values are considered valid.\r\n     */\r\n    FluentRuleCustomizer.prototype.minItems = function (count) {\r\n        return this.fluentRules.minItems(count);\r\n    };\r\n    /**\r\n     * Applies the \"maxItems\" ARRAY validation rule to the property.\r\n     * null and undefined values are considered valid.\r\n     */\r\n    FluentRuleCustomizer.prototype.maxItems = function (count) {\r\n        return this.fluentRules.maxItems(count);\r\n    };\r\n    /**\r\n     * Applies the \"min\" NUMBER validation rule to the property.\r\n     * Value must be greater than or equal to the specified constraint.\r\n     * null and undefined values are considered valid.\r\n     */\r\n    FluentRuleCustomizer.prototype.min = function (value) {\r\n        return this.fluentRules.min(value);\r\n    };\r\n    /**\r\n     * Applies the \"max\" NUMBER validation rule to the property.\r\n     * Value must be less than or equal to the specified constraint.\r\n     * null and undefined values are considered valid.\r\n     */\r\n    FluentRuleCustomizer.prototype.max = function (value) {\r\n        return this.fluentRules.max(value);\r\n    };\r\n    /**\r\n     * Applies the \"range\" NUMBER validation rule to the property.\r\n     * Value must be between or equal to the specified min and max.\r\n     * null and undefined values are considered valid.\r\n     */\r\n    FluentRuleCustomizer.prototype.range = function (min, max) {\r\n        return this.fluentRules.range(min, max);\r\n    };\r\n    /**\r\n     * Applies the \"between\" NUMBER validation rule to the property.\r\n     * Value must be between but not equal to the specified min and max.\r\n     * null and undefined values are considered valid.\r\n     */\r\n    FluentRuleCustomizer.prototype.between = function (min, max) {\r\n        return this.fluentRules.between(min, max);\r\n    };\r\n    /**\r\n     * Applies the \"equals\" validation rule to the property.\r\n     * null, undefined and empty-string values are considered valid.\r\n     */\r\n    FluentRuleCustomizer.prototype.equals = function (expectedValue) {\r\n        return this.fluentRules.equals(expectedValue);\r\n    };\r\n    return FluentRuleCustomizer;\r\n}());\r\n/**\r\n * Part of the fluent rule API. Enables applying rules to properties and objects.\r\n */\r\nvar FluentRules = /** @class */ (function () {\r\n    function FluentRules(fluentEnsure, parsers, property) {\r\n        this.fluentEnsure = fluentEnsure;\r\n        this.parsers = parsers;\r\n        this.property = property;\r\n        /**\r\n         * Current rule sequence number. Used to postpone evaluation of rules until rules\r\n         * with lower sequence number have successfully validated. The \"then\" fluent API method\r\n         * manages this property, there's usually no need to set it directly.\r\n         */\r\n        this.sequence = 0;\r\n    }\r\n    /**\r\n     * Sets the display name of the ensured property.\r\n     */\r\n    FluentRules.prototype.displayName = function (name) {\r\n        this.property.displayName = name;\r\n        return this;\r\n    };\r\n    /**\r\n     * Applies an ad-hoc rule function to the ensured property or object.\r\n     * @param condition The function to validate the rule.\r\n     * Will be called with two arguments, the property value and the object.\r\n     * Should return a boolean or a Promise that resolves to a boolean.\r\n     */\r\n    FluentRules.prototype.satisfies = function (condition, config) {\r\n        return new FluentRuleCustomizer(this.property, condition, config, this.fluentEnsure, this, this.parsers);\r\n    };\r\n    /**\r\n     * Applies a rule by name.\r\n     * @param name The name of the custom or standard rule.\r\n     * @param args The rule's arguments.\r\n     */\r\n    FluentRules.prototype.satisfiesRule = function (name) {\r\n        var _this = this;\r\n        var args = [];\r\n        for (var _i = 1; _i < arguments.length; _i++) {\r\n            args[_i - 1] = arguments[_i];\r\n        }\r\n        var rule = FluentRules.customRules[name];\r\n        if (!rule) {\r\n            // standard rule?\r\n            rule = this[name];\r\n            if (rule instanceof Function) {\r\n                return rule.call.apply(rule, __spreadArrays([this], args));\r\n            }\r\n            throw new Error(\"Rule with name \\\"\" + name + \"\\\" does not exist.\");\r\n        }\r\n        var config = rule.argsToConfig ? rule.argsToConfig.apply(rule, args) : undefined;\r\n        return this.satisfies(function (value, obj) {\r\n            var _a;\r\n            return (_a = rule.condition).call.apply(_a, __spreadArrays([_this, value, obj], args));\r\n        }, config)\r\n            .withMessageKey(name);\r\n    };\r\n    /**\r\n     * Applies the \"required\" rule to the property.\r\n     * The value cannot be null, undefined or whitespace.\r\n     */\r\n    FluentRules.prototype.required = function () {\r\n        return this.satisfies(function (value) {\r\n            return value !== null\r\n                && value !== undefined\r\n                && !(isString(value) && !/\\S/.test(value));\r\n        }).withMessageKey('required');\r\n    };\r\n    /**\r\n     * Applies the \"matches\" rule to the property.\r\n     * Value must match the specified regular expression.\r\n     * null, undefined and empty-string values are considered valid.\r\n     */\r\n    FluentRules.prototype.matches = function (regex) {\r\n        return this.satisfies(function (value) { return value === null || value === undefined || value.length === 0 || regex.test(value); })\r\n            .withMessageKey('matches');\r\n    };\r\n    /**\r\n     * Applies the \"email\" rule to the property.\r\n     * null, undefined and empty-string values are considered valid.\r\n     */\r\n    FluentRules.prototype.email = function () {\r\n        // regex from https://html.spec.whatwg.org/multipage/forms.html#valid-e-mail-address\r\n        /* tslint:disable:max-line-length */\r\n        return this.matches(/^[a-zA-Z0-9.!#$%&'*+\\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/)\r\n            /* tslint:enable:max-line-length */\r\n            .withMessageKey('email');\r\n    };\r\n    /**\r\n     * Applies the \"minLength\" STRING validation rule to the property.\r\n     * null, undefined and empty-string values are considered valid.\r\n     */\r\n    FluentRules.prototype.minLength = function (length) {\r\n        return this.satisfies(function (value) { return value === null || value === undefined || value.length === 0 || value.length >= length; }, { length: length })\r\n            .withMessageKey('minLength');\r\n    };\r\n    /**\r\n     * Applies the \"maxLength\" STRING validation rule to the property.\r\n     * null, undefined and empty-string values are considered valid.\r\n     */\r\n    FluentRules.prototype.maxLength = function (length) {\r\n        return this.satisfies(function (value) { return value === null || value === undefined || value.length === 0 || value.length <= length; }, { length: length })\r\n            .withMessageKey('maxLength');\r\n    };\r\n    /**\r\n     * Applies the \"minItems\" ARRAY validation rule to the property.\r\n     * null and undefined values are considered valid.\r\n     */\r\n    FluentRules.prototype.minItems = function (count) {\r\n        return this.satisfies(function (value) { return value === null || value === undefined || value.length >= count; }, { count: count })\r\n            .withMessageKey('minItems');\r\n    };\r\n    /**\r\n     * Applies the \"maxItems\" ARRAY validation rule to the property.\r\n     * null and undefined values are considered valid.\r\n     */\r\n    FluentRules.prototype.maxItems = function (count) {\r\n        return this.satisfies(function (value) { return value === null || value === undefined || value.length <= count; }, { count: count })\r\n            .withMessageKey('maxItems');\r\n    };\r\n    /**\r\n     * Applies the \"min\" NUMBER validation rule to the property.\r\n     * Value must be greater than or equal to the specified constraint.\r\n     * null and undefined values are considered valid.\r\n     */\r\n    FluentRules.prototype.min = function (constraint) {\r\n        return this.satisfies(function (value) { return value === null || value === undefined || value >= constraint; }, { constraint: constraint })\r\n            .withMessageKey('min');\r\n    };\r\n    /**\r\n     * Applies the \"max\" NUMBER validation rule to the property.\r\n     * Value must be less than or equal to the specified constraint.\r\n     * null and undefined values are considered valid.\r\n     */\r\n    FluentRules.prototype.max = function (constraint) {\r\n        return this.satisfies(function (value) { return value === null || value === undefined || value <= constraint; }, { constraint: constraint })\r\n            .withMessageKey('max');\r\n    };\r\n    /**\r\n     * Applies the \"range\" NUMBER validation rule to the property.\r\n     * Value must be between or equal to the specified min and max.\r\n     * null and undefined values are considered valid.\r\n     */\r\n    FluentRules.prototype.range = function (min, max) {\r\n        return this.satisfies(function (value) { return value === null || value === undefined || (value >= min && value <= max); }, { min: min, max: max })\r\n            .withMessageKey('range');\r\n    };\r\n    /**\r\n     * Applies the \"between\" NUMBER validation rule to the property.\r\n     * Value must be between but not equal to the specified min and max.\r\n     * null and undefined values are considered valid.\r\n     */\r\n    FluentRules.prototype.between = function (min, max) {\r\n        return this.satisfies(function (value) { return value === null || value === undefined || (value > min && value < max); }, { min: min, max: max })\r\n            .withMessageKey('between');\r\n    };\r\n    /**\r\n     * Applies the \"equals\" validation rule to the property.\r\n     * null and undefined values are considered valid.\r\n     */\r\n    FluentRules.prototype.equals = function (expectedValue) {\r\n        return this.satisfies(function (value) { return value === null || value === undefined || value === '' || value === expectedValue; }, { expectedValue: expectedValue })\r\n            .withMessageKey('equals');\r\n    };\r\n    FluentRules.customRules = {};\r\n    return FluentRules;\r\n}());\r\n/**\r\n * Part of the fluent rule API. Enables targeting properties and objects with rules.\r\n */\r\nvar FluentEnsure = /** @class */ (function () {\r\n    function FluentEnsure(parsers) {\r\n        this.parsers = parsers;\r\n        /**\r\n         * Rules that have been defined using the fluent API.\r\n         */\r\n        this.rules = [];\r\n    }\r\n    /**\r\n     * Target a property with validation rules.\r\n     * @param property The property to target. Can be the property name or a property accessor\r\n     * function.\r\n     */\r\n    FluentEnsure.prototype.ensure = function (property) {\r\n        this.assertInitialized();\r\n        var name = this.parsers.property.parse(property);\r\n        var fluentRules = new FluentRules(this, this.parsers, { name: name, displayName: null });\r\n        return this.mergeRules(fluentRules, name);\r\n    };\r\n    /**\r\n     * Targets an object with validation rules.\r\n     */\r\n    FluentEnsure.prototype.ensureObject = function () {\r\n        this.assertInitialized();\r\n        var fluentRules = new FluentRules(this, this.parsers, { name: null, displayName: null });\r\n        return this.mergeRules(fluentRules, null);\r\n    };\r\n    /**\r\n     * Applies the rules to a class or object, making them discoverable by the StandardValidator.\r\n     * @param target A class or object.\r\n     */\r\n    FluentEnsure.prototype.on = function (target) {\r\n        Rules.set(target, this.rules);\r\n        return this;\r\n    };\r\n    /**\r\n     * Adds a rule definition to the sequenced ruleset.\r\n     * @internal\r\n     */\r\n    FluentEnsure.prototype._addRule = function (rule) {\r\n        while (this.rules.length < rule.sequence + 1) {\r\n            this.rules.push([]);\r\n        }\r\n        this.rules[rule.sequence].push(rule);\r\n    };\r\n    FluentEnsure.prototype.assertInitialized = function () {\r\n        if (this.parsers) {\r\n            return;\r\n        }\r\n        throw new Error(\"Did you forget to add \\\".plugin('aurelia-validation')\\\" to your main.js?\");\r\n    };\r\n    FluentEnsure.prototype.mergeRules = function (fluentRules, propertyName) {\r\n        // tslint:disable-next-line:triple-equals | Use loose equality for property keys\r\n        var existingRules = this.rules.find(function (r) { return r.length > 0 && r[0].property.name == propertyName; });\r\n        if (existingRules) {\r\n            var rule = existingRules[existingRules.length - 1];\r\n            fluentRules.sequence = rule.sequence;\r\n            if (rule.property.displayName !== null) {\r\n                fluentRules = fluentRules.displayName(rule.property.displayName);\r\n            }\r\n        }\r\n        return fluentRules;\r\n    };\r\n    return FluentEnsure;\r\n}());\r\n/**\r\n * Fluent rule definition API.\r\n */\r\nvar ValidationRules = /** @class */ (function () {\r\n    function ValidationRules() {\r\n    }\r\n    ValidationRules.initialize = function (messageParser, propertyParser) {\r\n        this.parsers = {\r\n            message: messageParser,\r\n            property: propertyParser\r\n        };\r\n    };\r\n    /**\r\n     * Target a property with validation rules.\r\n     * @param property The property to target. Can be the property name or a property accessor function.\r\n     */\r\n    ValidationRules.ensure = function (property) {\r\n        return new FluentEnsure(ValidationRules.parsers).ensure(property);\r\n    };\r\n    /**\r\n     * Targets an object with validation rules.\r\n     */\r\n    ValidationRules.ensureObject = function () {\r\n        return new FluentEnsure(ValidationRules.parsers).ensureObject();\r\n    };\r\n    /**\r\n     * Defines a custom rule.\r\n     * @param name The name of the custom rule. Also serves as the message key.\r\n     * @param condition The rule function.\r\n     * @param message The message expression\r\n     * @param argsToConfig A function that maps the rule's arguments to a \"config\"\r\n     * object that can be used when evaluating the message expression.\r\n     */\r\n    ValidationRules.customRule = function (name, condition, message, argsToConfig) {\r\n        validationMessages[name] = message;\r\n        FluentRules.customRules[name] = { condition: condition, argsToConfig: argsToConfig };\r\n    };\r\n    /**\r\n     * Returns rules with the matching tag.\r\n     * @param rules The rules to search.\r\n     * @param tag The tag to search for.\r\n     */\r\n    ValidationRules.taggedRules = function (rules, tag) {\r\n        return rules.map(function (x) { return x.filter(function (r) { return r.tag === tag; }); });\r\n    };\r\n    /**\r\n     * Returns rules that have no tag.\r\n     * @param rules The rules to search.\r\n     */\r\n    ValidationRules.untaggedRules = function (rules) {\r\n        return rules.map(function (x) { return x.filter(function (r) { return r.tag === undefined; }); });\r\n    };\r\n    /**\r\n     * Removes the rules from a class or object.\r\n     * @param target A class or object.\r\n     */\r\n    ValidationRules.off = function (target) {\r\n        Rules.unset(target);\r\n    };\r\n    return ValidationRules;\r\n}());\n\n// Exports\r\n/**\r\n * Configures the plugin.\r\n */\r\nfunction configure(\r\n// tslint:disable-next-line:ban-types\r\nframeworkConfig, callback) {\r\n    // the fluent rule definition API needs the parser to translate messages\r\n    // to interpolation expressions.\r\n    var messageParser = frameworkConfig.container.get(ValidationMessageParser);\r\n    var propertyParser = frameworkConfig.container.get(PropertyAccessorParser);\r\n    ValidationRules.initialize(messageParser, propertyParser);\r\n    // configure...\r\n    var config = new GlobalValidationConfiguration();\r\n    if (callback instanceof Function) {\r\n        callback(config);\r\n    }\r\n    config.apply(frameworkConfig.container);\r\n    // globalize the behaviors.\r\n    if (frameworkConfig.globalResources) {\r\n        frameworkConfig.globalResources(ValidateBindingBehavior, ValidateManuallyBindingBehavior, ValidateOnBlurBindingBehavior, ValidateOnChangeBindingBehavior, ValidateOnChangeOrBlurBindingBehavior, ValidationErrorsCustomAttribute, ValidationRendererCustomAttribute);\r\n    }\r\n}\n\nexport { configure, GlobalValidationConfiguration, getTargetDOMElement, getPropertyInfo, PropertyAccessorParser, getAccessorExpression, ValidateBindingBehavior, ValidateManuallyBindingBehavior, ValidateOnBlurBindingBehavior, ValidateOnChangeBindingBehavior, ValidateOnChangeOrBlurBindingBehavior, ValidateEvent, ValidateResult, validateTrigger, ValidationController, ValidationControllerFactory, ValidationErrorsCustomAttribute, ValidationRendererCustomAttribute, Validator, Rules, StandardValidator, validationMessages, ValidationMessageProvider, ValidationMessageParser, MessageExpressionValidator, FluentRuleCustomizer, FluentRules, FluentEnsure, ValidationRules };\n","// With default aurelia-loader-webpack config, this module is added as an extra entry\r\n// before any other code executes so that PAL.Loader is properly configured.\r\n// There are several tricky points worth noticing.\r\n// \r\n// We don't add aurelia-loader-webpack itself as an entry point (used to until 2.0 RC2)\r\n// because it (transitively) brings too much bagage with itself, most notably polyfills.\r\n// This made it super-hard to add other polyfills before Aurelia's and led to various bugs.\r\n//\r\n// We don't add custom code in aurelia-pal or aurelia-loader or aurelia-bootstrapper to detect\r\n// the Webpack environment and configure the loader because they might live in a DLL.\r\n// If they do, they would bring aurelia-loader-webpack along in the DLL and this is a special \r\n// library that *has to be in the main chunk.*\r\n//\r\n// The over-complicated design I've settled upon in the end is to use this special module\r\n// as an entry point that configures aurelia-loader-webpack. It has minimal static imports:\r\n// just aurelia-pal, which itself has no other dependencies and doesn't run much code.\r\n// It hacks the loader field into a getter so that it can synchronously load aurelia-loader-webpack\r\n// just in time when it is demanded by aurelia-bootstrapper.\r\n// This enables users to load polyfills before aurelia-loader-webpack is actually loaded.\r\n\r\nimport { PLATFORM } from \"aurelia-pal\";\r\n\r\nvar Loader;\r\n\r\nObject.defineProperty(PLATFORM, \"Loader\", {\r\n  get: function() {\r\n    return Loader || (Loader = require(\"aurelia-loader-webpack\").WebpackLoader);\r\n  },\r\n  set: function(value) {\r\n    Loader = value;\r\n  }\r\n});\r\n","/* @preserve\n * The MIT License (MIT)\n * \n * Copyright (c) 2013-2018 Petka Antonov\n * \n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n * \n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n * \n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n * \n */\n/**\n * bluebird build version 3.7.2\n * Features enabled: core, race, call_get, generators, map, nodeify, promisify, props, reduce, settle, some, using, timers, filter, any, each\n*/\n!function(e){if(\"object\"==typeof exports&&\"undefined\"!=typeof module)module.exports=e();else if(\"function\"==typeof define&&define.amd)define([],e);else{var f;\"undefined\"!=typeof window?f=window:\"undefined\"!=typeof global?f=global:\"undefined\"!=typeof self&&(f=self),f.Promise=e()}}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof _dereq_==\"function\"&&_dereq_;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof _dereq_==\"function\"&&_dereq_;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise) {\nvar SomePromiseArray = Promise._SomePromiseArray;\nfunction any(promises) {\n    var ret = new SomePromiseArray(promises);\n    var promise = ret.promise();\n    ret.setHowMany(1);\n    ret.setUnwrap();\n    ret.init();\n    return promise;\n}\n\nPromise.any = function (promises) {\n    return any(promises);\n};\n\nPromise.prototype.any = function () {\n    return any(this);\n};\n\n};\n\n},{}],2:[function(_dereq_,module,exports){\n\"use strict\";\nvar firstLineError;\ntry {throw new Error(); } catch (e) {firstLineError = e;}\nvar schedule = _dereq_(\"./schedule\");\nvar Queue = _dereq_(\"./queue\");\n\nfunction Async() {\n    this._customScheduler = false;\n    this._isTickUsed = false;\n    this._lateQueue = new Queue(16);\n    this._normalQueue = new Queue(16);\n    this._haveDrainedQueues = false;\n    var self = this;\n    this.drainQueues = function () {\n        self._drainQueues();\n    };\n    this._schedule = schedule;\n}\n\nAsync.prototype.setScheduler = function(fn) {\n    var prev = this._schedule;\n    this._schedule = fn;\n    this._customScheduler = true;\n    return prev;\n};\n\nAsync.prototype.hasCustomScheduler = function() {\n    return this._customScheduler;\n};\n\nAsync.prototype.haveItemsQueued = function () {\n    return this._isTickUsed || this._haveDrainedQueues;\n};\n\n\nAsync.prototype.fatalError = function(e, isNode) {\n    if (isNode) {\n        process.stderr.write(\"Fatal \" + (e instanceof Error ? e.stack : e) +\n            \"\\n\");\n        process.exit(2);\n    } else {\n        this.throwLater(e);\n    }\n};\n\nAsync.prototype.throwLater = function(fn, arg) {\n    if (arguments.length === 1) {\n        arg = fn;\n        fn = function () { throw arg; };\n    }\n    if (typeof setTimeout !== \"undefined\") {\n        setTimeout(function() {\n            fn(arg);\n        }, 0);\n    } else try {\n        this._schedule(function() {\n            fn(arg);\n        });\n    } catch (e) {\n        throw new Error(\"No async scheduler available\\u000a\\u000a    See http://goo.gl/MqrFmX\\u000a\");\n    }\n};\n\nfunction AsyncInvokeLater(fn, receiver, arg) {\n    this._lateQueue.push(fn, receiver, arg);\n    this._queueTick();\n}\n\nfunction AsyncInvoke(fn, receiver, arg) {\n    this._normalQueue.push(fn, receiver, arg);\n    this._queueTick();\n}\n\nfunction AsyncSettlePromises(promise) {\n    this._normalQueue._pushOne(promise);\n    this._queueTick();\n}\n\nAsync.prototype.invokeLater = AsyncInvokeLater;\nAsync.prototype.invoke = AsyncInvoke;\nAsync.prototype.settlePromises = AsyncSettlePromises;\n\n\nfunction _drainQueue(queue) {\n    while (queue.length() > 0) {\n        _drainQueueStep(queue);\n    }\n}\n\nfunction _drainQueueStep(queue) {\n    var fn = queue.shift();\n    if (typeof fn !== \"function\") {\n        fn._settlePromises();\n    } else {\n        var receiver = queue.shift();\n        var arg = queue.shift();\n        fn.call(receiver, arg);\n    }\n}\n\nAsync.prototype._drainQueues = function () {\n    _drainQueue(this._normalQueue);\n    this._reset();\n    this._haveDrainedQueues = true;\n    _drainQueue(this._lateQueue);\n};\n\nAsync.prototype._queueTick = function () {\n    if (!this._isTickUsed) {\n        this._isTickUsed = true;\n        this._schedule(this.drainQueues);\n    }\n};\n\nAsync.prototype._reset = function () {\n    this._isTickUsed = false;\n};\n\nmodule.exports = Async;\nmodule.exports.firstLineError = firstLineError;\n\n},{\"./queue\":26,\"./schedule\":29}],3:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise, INTERNAL, tryConvertToPromise, debug) {\nvar calledBind = false;\nvar rejectThis = function(_, e) {\n    this._reject(e);\n};\n\nvar targetRejected = function(e, context) {\n    context.promiseRejectionQueued = true;\n    context.bindingPromise._then(rejectThis, rejectThis, null, this, e);\n};\n\nvar bindingResolved = function(thisArg, context) {\n    if (((this._bitField & 50397184) === 0)) {\n        this._resolveCallback(context.target);\n    }\n};\n\nvar bindingRejected = function(e, context) {\n    if (!context.promiseRejectionQueued) this._reject(e);\n};\n\nPromise.prototype.bind = function (thisArg) {\n    if (!calledBind) {\n        calledBind = true;\n        Promise.prototype._propagateFrom = debug.propagateFromFunction();\n        Promise.prototype._boundValue = debug.boundValueFunction();\n    }\n    var maybePromise = tryConvertToPromise(thisArg);\n    var ret = new Promise(INTERNAL);\n    ret._propagateFrom(this, 1);\n    var target = this._target();\n    ret._setBoundTo(maybePromise);\n    if (maybePromise instanceof Promise) {\n        var context = {\n            promiseRejectionQueued: false,\n            promise: ret,\n            target: target,\n            bindingPromise: maybePromise\n        };\n        target._then(INTERNAL, targetRejected, undefined, ret, context);\n        maybePromise._then(\n            bindingResolved, bindingRejected, undefined, ret, context);\n        ret._setOnCancel(maybePromise);\n    } else {\n        ret._resolveCallback(target);\n    }\n    return ret;\n};\n\nPromise.prototype._setBoundTo = function (obj) {\n    if (obj !== undefined) {\n        this._bitField = this._bitField | 2097152;\n        this._boundTo = obj;\n    } else {\n        this._bitField = this._bitField & (~2097152);\n    }\n};\n\nPromise.prototype._isBound = function () {\n    return (this._bitField & 2097152) === 2097152;\n};\n\nPromise.bind = function (thisArg, value) {\n    return Promise.resolve(value).bind(thisArg);\n};\n};\n\n},{}],4:[function(_dereq_,module,exports){\n\"use strict\";\nvar old;\nif (typeof Promise !== \"undefined\") old = Promise;\nfunction noConflict() {\n    try { if (Promise === bluebird) Promise = old; }\n    catch (e) {}\n    return bluebird;\n}\nvar bluebird = _dereq_(\"./promise\")();\nbluebird.noConflict = noConflict;\nmodule.exports = bluebird;\n\n},{\"./promise\":22}],5:[function(_dereq_,module,exports){\n\"use strict\";\nvar cr = Object.create;\nif (cr) {\n    var callerCache = cr(null);\n    var getterCache = cr(null);\n    callerCache[\" size\"] = getterCache[\" size\"] = 0;\n}\n\nmodule.exports = function(Promise) {\nvar util = _dereq_(\"./util\");\nvar canEvaluate = util.canEvaluate;\nvar isIdentifier = util.isIdentifier;\n\nvar getMethodCaller;\nvar getGetter;\nif (!true) {\nvar makeMethodCaller = function (methodName) {\n    return new Function(\"ensureMethod\", \"                                    \\n\\\n        return function(obj) {                                               \\n\\\n            'use strict'                                                     \\n\\\n            var len = this.length;                                           \\n\\\n            ensureMethod(obj, 'methodName');                                 \\n\\\n            switch(len) {                                                    \\n\\\n                case 1: return obj.methodName(this[0]);                      \\n\\\n                case 2: return obj.methodName(this[0], this[1]);             \\n\\\n                case 3: return obj.methodName(this[0], this[1], this[2]);    \\n\\\n                case 0: return obj.methodName();                             \\n\\\n                default:                                                     \\n\\\n                    return obj.methodName.apply(obj, this);                  \\n\\\n            }                                                                \\n\\\n        };                                                                   \\n\\\n        \".replace(/methodName/g, methodName))(ensureMethod);\n};\n\nvar makeGetter = function (propertyName) {\n    return new Function(\"obj\", \"                                             \\n\\\n        'use strict';                                                        \\n\\\n        return obj.propertyName;                                             \\n\\\n        \".replace(\"propertyName\", propertyName));\n};\n\nvar getCompiled = function(name, compiler, cache) {\n    var ret = cache[name];\n    if (typeof ret !== \"function\") {\n        if (!isIdentifier(name)) {\n            return null;\n        }\n        ret = compiler(name);\n        cache[name] = ret;\n        cache[\" size\"]++;\n        if (cache[\" size\"] > 512) {\n            var keys = Object.keys(cache);\n            for (var i = 0; i < 256; ++i) delete cache[keys[i]];\n            cache[\" size\"] = keys.length - 256;\n        }\n    }\n    return ret;\n};\n\ngetMethodCaller = function(name) {\n    return getCompiled(name, makeMethodCaller, callerCache);\n};\n\ngetGetter = function(name) {\n    return getCompiled(name, makeGetter, getterCache);\n};\n}\n\nfunction ensureMethod(obj, methodName) {\n    var fn;\n    if (obj != null) fn = obj[methodName];\n    if (typeof fn !== \"function\") {\n        var message = \"Object \" + util.classString(obj) + \" has no method '\" +\n            util.toString(methodName) + \"'\";\n        throw new Promise.TypeError(message);\n    }\n    return fn;\n}\n\nfunction caller(obj) {\n    var methodName = this.pop();\n    var fn = ensureMethod(obj, methodName);\n    return fn.apply(obj, this);\n}\nPromise.prototype.call = function (methodName) {\n    var args = [].slice.call(arguments, 1);;\n    if (!true) {\n        if (canEvaluate) {\n            var maybeCaller = getMethodCaller(methodName);\n            if (maybeCaller !== null) {\n                return this._then(\n                    maybeCaller, undefined, undefined, args, undefined);\n            }\n        }\n    }\n    args.push(methodName);\n    return this._then(caller, undefined, undefined, args, undefined);\n};\n\nfunction namedGetter(obj) {\n    return obj[this];\n}\nfunction indexedGetter(obj) {\n    var index = +this;\n    if (index < 0) index = Math.max(0, index + obj.length);\n    return obj[index];\n}\nPromise.prototype.get = function (propertyName) {\n    var isIndex = (typeof propertyName === \"number\");\n    var getter;\n    if (!isIndex) {\n        if (canEvaluate) {\n            var maybeGetter = getGetter(propertyName);\n            getter = maybeGetter !== null ? maybeGetter : namedGetter;\n        } else {\n            getter = namedGetter;\n        }\n    } else {\n        getter = indexedGetter;\n    }\n    return this._then(getter, undefined, undefined, propertyName, undefined);\n};\n};\n\n},{\"./util\":36}],6:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise, PromiseArray, apiRejection, debug) {\nvar util = _dereq_(\"./util\");\nvar tryCatch = util.tryCatch;\nvar errorObj = util.errorObj;\nvar async = Promise._async;\n\nPromise.prototype[\"break\"] = Promise.prototype.cancel = function() {\n    if (!debug.cancellation()) return this._warn(\"cancellation is disabled\");\n\n    var promise = this;\n    var child = promise;\n    while (promise._isCancellable()) {\n        if (!promise._cancelBy(child)) {\n            if (child._isFollowing()) {\n                child._followee().cancel();\n            } else {\n                child._cancelBranched();\n            }\n            break;\n        }\n\n        var parent = promise._cancellationParent;\n        if (parent == null || !parent._isCancellable()) {\n            if (promise._isFollowing()) {\n                promise._followee().cancel();\n            } else {\n                promise._cancelBranched();\n            }\n            break;\n        } else {\n            if (promise._isFollowing()) promise._followee().cancel();\n            promise._setWillBeCancelled();\n            child = promise;\n            promise = parent;\n        }\n    }\n};\n\nPromise.prototype._branchHasCancelled = function() {\n    this._branchesRemainingToCancel--;\n};\n\nPromise.prototype._enoughBranchesHaveCancelled = function() {\n    return this._branchesRemainingToCancel === undefined ||\n           this._branchesRemainingToCancel <= 0;\n};\n\nPromise.prototype._cancelBy = function(canceller) {\n    if (canceller === this) {\n        this._branchesRemainingToCancel = 0;\n        this._invokeOnCancel();\n        return true;\n    } else {\n        this._branchHasCancelled();\n        if (this._enoughBranchesHaveCancelled()) {\n            this._invokeOnCancel();\n            return true;\n        }\n    }\n    return false;\n};\n\nPromise.prototype._cancelBranched = function() {\n    if (this._enoughBranchesHaveCancelled()) {\n        this._cancel();\n    }\n};\n\nPromise.prototype._cancel = function() {\n    if (!this._isCancellable()) return;\n    this._setCancelled();\n    async.invoke(this._cancelPromises, this, undefined);\n};\n\nPromise.prototype._cancelPromises = function() {\n    if (this._length() > 0) this._settlePromises();\n};\n\nPromise.prototype._unsetOnCancel = function() {\n    this._onCancelField = undefined;\n};\n\nPromise.prototype._isCancellable = function() {\n    return this.isPending() && !this._isCancelled();\n};\n\nPromise.prototype.isCancellable = function() {\n    return this.isPending() && !this.isCancelled();\n};\n\nPromise.prototype._doInvokeOnCancel = function(onCancelCallback, internalOnly) {\n    if (util.isArray(onCancelCallback)) {\n        for (var i = 0; i < onCancelCallback.length; ++i) {\n            this._doInvokeOnCancel(onCancelCallback[i], internalOnly);\n        }\n    } else if (onCancelCallback !== undefined) {\n        if (typeof onCancelCallback === \"function\") {\n            if (!internalOnly) {\n                var e = tryCatch(onCancelCallback).call(this._boundValue());\n                if (e === errorObj) {\n                    this._attachExtraTrace(e.e);\n                    async.throwLater(e.e);\n                }\n            }\n        } else {\n            onCancelCallback._resultCancelled(this);\n        }\n    }\n};\n\nPromise.prototype._invokeOnCancel = function() {\n    var onCancelCallback = this._onCancel();\n    this._unsetOnCancel();\n    async.invoke(this._doInvokeOnCancel, this, onCancelCallback);\n};\n\nPromise.prototype._invokeInternalOnCancel = function() {\n    if (this._isCancellable()) {\n        this._doInvokeOnCancel(this._onCancel(), true);\n        this._unsetOnCancel();\n    }\n};\n\nPromise.prototype._resultCancelled = function() {\n    this.cancel();\n};\n\n};\n\n},{\"./util\":36}],7:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(NEXT_FILTER) {\nvar util = _dereq_(\"./util\");\nvar getKeys = _dereq_(\"./es5\").keys;\nvar tryCatch = util.tryCatch;\nvar errorObj = util.errorObj;\n\nfunction catchFilter(instances, cb, promise) {\n    return function(e) {\n        var boundTo = promise._boundValue();\n        predicateLoop: for (var i = 0; i < instances.length; ++i) {\n            var item = instances[i];\n\n            if (item === Error ||\n                (item != null && item.prototype instanceof Error)) {\n                if (e instanceof item) {\n                    return tryCatch(cb).call(boundTo, e);\n                }\n            } else if (typeof item === \"function\") {\n                var matchesPredicate = tryCatch(item).call(boundTo, e);\n                if (matchesPredicate === errorObj) {\n                    return matchesPredicate;\n                } else if (matchesPredicate) {\n                    return tryCatch(cb).call(boundTo, e);\n                }\n            } else if (util.isObject(e)) {\n                var keys = getKeys(item);\n                for (var j = 0; j < keys.length; ++j) {\n                    var key = keys[j];\n                    if (item[key] != e[key]) {\n                        continue predicateLoop;\n                    }\n                }\n                return tryCatch(cb).call(boundTo, e);\n            }\n        }\n        return NEXT_FILTER;\n    };\n}\n\nreturn catchFilter;\n};\n\n},{\"./es5\":13,\"./util\":36}],8:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise) {\nvar longStackTraces = false;\nvar contextStack = [];\n\nPromise.prototype._promiseCreated = function() {};\nPromise.prototype._pushContext = function() {};\nPromise.prototype._popContext = function() {return null;};\nPromise._peekContext = Promise.prototype._peekContext = function() {};\n\nfunction Context() {\n    this._trace = new Context.CapturedTrace(peekContext());\n}\nContext.prototype._pushContext = function () {\n    if (this._trace !== undefined) {\n        this._trace._promiseCreated = null;\n        contextStack.push(this._trace);\n    }\n};\n\nContext.prototype._popContext = function () {\n    if (this._trace !== undefined) {\n        var trace = contextStack.pop();\n        var ret = trace._promiseCreated;\n        trace._promiseCreated = null;\n        return ret;\n    }\n    return null;\n};\n\nfunction createContext() {\n    if (longStackTraces) return new Context();\n}\n\nfunction peekContext() {\n    var lastIndex = contextStack.length - 1;\n    if (lastIndex >= 0) {\n        return contextStack[lastIndex];\n    }\n    return undefined;\n}\nContext.CapturedTrace = null;\nContext.create = createContext;\nContext.deactivateLongStackTraces = function() {};\nContext.activateLongStackTraces = function() {\n    var Promise_pushContext = Promise.prototype._pushContext;\n    var Promise_popContext = Promise.prototype._popContext;\n    var Promise_PeekContext = Promise._peekContext;\n    var Promise_peekContext = Promise.prototype._peekContext;\n    var Promise_promiseCreated = Promise.prototype._promiseCreated;\n    Context.deactivateLongStackTraces = function() {\n        Promise.prototype._pushContext = Promise_pushContext;\n        Promise.prototype._popContext = Promise_popContext;\n        Promise._peekContext = Promise_PeekContext;\n        Promise.prototype._peekContext = Promise_peekContext;\n        Promise.prototype._promiseCreated = Promise_promiseCreated;\n        longStackTraces = false;\n    };\n    longStackTraces = true;\n    Promise.prototype._pushContext = Context.prototype._pushContext;\n    Promise.prototype._popContext = Context.prototype._popContext;\n    Promise._peekContext = Promise.prototype._peekContext = peekContext;\n    Promise.prototype._promiseCreated = function() {\n        var ctx = this._peekContext();\n        if (ctx && ctx._promiseCreated == null) ctx._promiseCreated = this;\n    };\n};\nreturn Context;\n};\n\n},{}],9:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise, Context,\n    enableAsyncHooks, disableAsyncHooks) {\nvar async = Promise._async;\nvar Warning = _dereq_(\"./errors\").Warning;\nvar util = _dereq_(\"./util\");\nvar es5 = _dereq_(\"./es5\");\nvar canAttachTrace = util.canAttachTrace;\nvar unhandledRejectionHandled;\nvar possiblyUnhandledRejection;\nvar bluebirdFramePattern =\n    /[\\\\\\/]bluebird[\\\\\\/]js[\\\\\\/](release|debug|instrumented)/;\nvar nodeFramePattern = /\\((?:timers\\.js):\\d+:\\d+\\)/;\nvar parseLinePattern = /[\\/<\\(](.+?):(\\d+):(\\d+)\\)?\\s*$/;\nvar stackFramePattern = null;\nvar formatStack = null;\nvar indentStackFrames = false;\nvar printWarning;\nvar debugging = !!(util.env(\"BLUEBIRD_DEBUG\") != 0 &&\n                        (true ||\n                         util.env(\"BLUEBIRD_DEBUG\") ||\n                         util.env(\"NODE_ENV\") === \"development\"));\n\nvar warnings = !!(util.env(\"BLUEBIRD_WARNINGS\") != 0 &&\n    (debugging || util.env(\"BLUEBIRD_WARNINGS\")));\n\nvar longStackTraces = !!(util.env(\"BLUEBIRD_LONG_STACK_TRACES\") != 0 &&\n    (debugging || util.env(\"BLUEBIRD_LONG_STACK_TRACES\")));\n\nvar wForgottenReturn = util.env(\"BLUEBIRD_W_FORGOTTEN_RETURN\") != 0 &&\n    (warnings || !!util.env(\"BLUEBIRD_W_FORGOTTEN_RETURN\"));\n\nvar deferUnhandledRejectionCheck;\n(function() {\n    var promises = [];\n\n    function unhandledRejectionCheck() {\n        for (var i = 0; i < promises.length; ++i) {\n            promises[i]._notifyUnhandledRejection();\n        }\n        unhandledRejectionClear();\n    }\n\n    function unhandledRejectionClear() {\n        promises.length = 0;\n    }\n\n    deferUnhandledRejectionCheck = function(promise) {\n        promises.push(promise);\n        setTimeout(unhandledRejectionCheck, 1);\n    };\n\n    es5.defineProperty(Promise, \"_unhandledRejectionCheck\", {\n        value: unhandledRejectionCheck\n    });\n    es5.defineProperty(Promise, \"_unhandledRejectionClear\", {\n        value: unhandledRejectionClear\n    });\n})();\n\nPromise.prototype.suppressUnhandledRejections = function() {\n    var target = this._target();\n    target._bitField = ((target._bitField & (~1048576)) |\n                      524288);\n};\n\nPromise.prototype._ensurePossibleRejectionHandled = function () {\n    if ((this._bitField & 524288) !== 0) return;\n    this._setRejectionIsUnhandled();\n    deferUnhandledRejectionCheck(this);\n};\n\nPromise.prototype._notifyUnhandledRejectionIsHandled = function () {\n    fireRejectionEvent(\"rejectionHandled\",\n                                  unhandledRejectionHandled, undefined, this);\n};\n\nPromise.prototype._setReturnedNonUndefined = function() {\n    this._bitField = this._bitField | 268435456;\n};\n\nPromise.prototype._returnedNonUndefined = function() {\n    return (this._bitField & 268435456) !== 0;\n};\n\nPromise.prototype._notifyUnhandledRejection = function () {\n    if (this._isRejectionUnhandled()) {\n        var reason = this._settledValue();\n        this._setUnhandledRejectionIsNotified();\n        fireRejectionEvent(\"unhandledRejection\",\n                                      possiblyUnhandledRejection, reason, this);\n    }\n};\n\nPromise.prototype._setUnhandledRejectionIsNotified = function () {\n    this._bitField = this._bitField | 262144;\n};\n\nPromise.prototype._unsetUnhandledRejectionIsNotified = function () {\n    this._bitField = this._bitField & (~262144);\n};\n\nPromise.prototype._isUnhandledRejectionNotified = function () {\n    return (this._bitField & 262144) > 0;\n};\n\nPromise.prototype._setRejectionIsUnhandled = function () {\n    this._bitField = this._bitField | 1048576;\n};\n\nPromise.prototype._unsetRejectionIsUnhandled = function () {\n    this._bitField = this._bitField & (~1048576);\n    if (this._isUnhandledRejectionNotified()) {\n        this._unsetUnhandledRejectionIsNotified();\n        this._notifyUnhandledRejectionIsHandled();\n    }\n};\n\nPromise.prototype._isRejectionUnhandled = function () {\n    return (this._bitField & 1048576) > 0;\n};\n\nPromise.prototype._warn = function(message, shouldUseOwnTrace, promise) {\n    return warn(message, shouldUseOwnTrace, promise || this);\n};\n\nPromise.onPossiblyUnhandledRejection = function (fn) {\n    var context = Promise._getContext();\n    possiblyUnhandledRejection = util.contextBind(context, fn);\n};\n\nPromise.onUnhandledRejectionHandled = function (fn) {\n    var context = Promise._getContext();\n    unhandledRejectionHandled = util.contextBind(context, fn);\n};\n\nvar disableLongStackTraces = function() {};\nPromise.longStackTraces = function () {\n    if (async.haveItemsQueued() && !config.longStackTraces) {\n        throw new Error(\"cannot enable long stack traces after promises have been created\\u000a\\u000a    See http://goo.gl/MqrFmX\\u000a\");\n    }\n    if (!config.longStackTraces && longStackTracesIsSupported()) {\n        var Promise_captureStackTrace = Promise.prototype._captureStackTrace;\n        var Promise_attachExtraTrace = Promise.prototype._attachExtraTrace;\n        var Promise_dereferenceTrace = Promise.prototype._dereferenceTrace;\n        config.longStackTraces = true;\n        disableLongStackTraces = function() {\n            if (async.haveItemsQueued() && !config.longStackTraces) {\n                throw new Error(\"cannot enable long stack traces after promises have been created\\u000a\\u000a    See http://goo.gl/MqrFmX\\u000a\");\n            }\n            Promise.prototype._captureStackTrace = Promise_captureStackTrace;\n            Promise.prototype._attachExtraTrace = Promise_attachExtraTrace;\n            Promise.prototype._dereferenceTrace = Promise_dereferenceTrace;\n            Context.deactivateLongStackTraces();\n            config.longStackTraces = false;\n        };\n        Promise.prototype._captureStackTrace = longStackTracesCaptureStackTrace;\n        Promise.prototype._attachExtraTrace = longStackTracesAttachExtraTrace;\n        Promise.prototype._dereferenceTrace = longStackTracesDereferenceTrace;\n        Context.activateLongStackTraces();\n    }\n};\n\nPromise.hasLongStackTraces = function () {\n    return config.longStackTraces && longStackTracesIsSupported();\n};\n\n\nvar legacyHandlers = {\n    unhandledrejection: {\n        before: function() {\n            var ret = util.global.onunhandledrejection;\n            util.global.onunhandledrejection = null;\n            return ret;\n        },\n        after: function(fn) {\n            util.global.onunhandledrejection = fn;\n        }\n    },\n    rejectionhandled: {\n        before: function() {\n            var ret = util.global.onrejectionhandled;\n            util.global.onrejectionhandled = null;\n            return ret;\n        },\n        after: function(fn) {\n            util.global.onrejectionhandled = fn;\n        }\n    }\n};\n\nvar fireDomEvent = (function() {\n    var dispatch = function(legacy, e) {\n        if (legacy) {\n            var fn;\n            try {\n                fn = legacy.before();\n                return !util.global.dispatchEvent(e);\n            } finally {\n                legacy.after(fn);\n            }\n        } else {\n            return !util.global.dispatchEvent(e);\n        }\n    };\n    try {\n        if (typeof CustomEvent === \"function\") {\n            var event = new CustomEvent(\"CustomEvent\");\n            util.global.dispatchEvent(event);\n            return function(name, event) {\n                name = name.toLowerCase();\n                var eventData = {\n                    detail: event,\n                    cancelable: true\n                };\n                var domEvent = new CustomEvent(name, eventData);\n                es5.defineProperty(\n                    domEvent, \"promise\", {value: event.promise});\n                es5.defineProperty(\n                    domEvent, \"reason\", {value: event.reason});\n\n                return dispatch(legacyHandlers[name], domEvent);\n            };\n        } else if (typeof Event === \"function\") {\n            var event = new Event(\"CustomEvent\");\n            util.global.dispatchEvent(event);\n            return function(name, event) {\n                name = name.toLowerCase();\n                var domEvent = new Event(name, {\n                    cancelable: true\n                });\n                domEvent.detail = event;\n                es5.defineProperty(domEvent, \"promise\", {value: event.promise});\n                es5.defineProperty(domEvent, \"reason\", {value: event.reason});\n                return dispatch(legacyHandlers[name], domEvent);\n            };\n        } else {\n            var event = document.createEvent(\"CustomEvent\");\n            event.initCustomEvent(\"testingtheevent\", false, true, {});\n            util.global.dispatchEvent(event);\n            return function(name, event) {\n                name = name.toLowerCase();\n                var domEvent = document.createEvent(\"CustomEvent\");\n                domEvent.initCustomEvent(name, false, true,\n                    event);\n                return dispatch(legacyHandlers[name], domEvent);\n            };\n        }\n    } catch (e) {}\n    return function() {\n        return false;\n    };\n})();\n\nvar fireGlobalEvent = (function() {\n    if (util.isNode) {\n        return function() {\n            return process.emit.apply(process, arguments);\n        };\n    } else {\n        if (!util.global) {\n            return function() {\n                return false;\n            };\n        }\n        return function(name) {\n            var methodName = \"on\" + name.toLowerCase();\n            var method = util.global[methodName];\n            if (!method) return false;\n            method.apply(util.global, [].slice.call(arguments, 1));\n            return true;\n        };\n    }\n})();\n\nfunction generatePromiseLifecycleEventObject(name, promise) {\n    return {promise: promise};\n}\n\nvar eventToObjectGenerator = {\n    promiseCreated: generatePromiseLifecycleEventObject,\n    promiseFulfilled: generatePromiseLifecycleEventObject,\n    promiseRejected: generatePromiseLifecycleEventObject,\n    promiseResolved: generatePromiseLifecycleEventObject,\n    promiseCancelled: generatePromiseLifecycleEventObject,\n    promiseChained: function(name, promise, child) {\n        return {promise: promise, child: child};\n    },\n    warning: function(name, warning) {\n        return {warning: warning};\n    },\n    unhandledRejection: function (name, reason, promise) {\n        return {reason: reason, promise: promise};\n    },\n    rejectionHandled: generatePromiseLifecycleEventObject\n};\n\nvar activeFireEvent = function (name) {\n    var globalEventFired = false;\n    try {\n        globalEventFired = fireGlobalEvent.apply(null, arguments);\n    } catch (e) {\n        async.throwLater(e);\n        globalEventFired = true;\n    }\n\n    var domEventFired = false;\n    try {\n        domEventFired = fireDomEvent(name,\n                    eventToObjectGenerator[name].apply(null, arguments));\n    } catch (e) {\n        async.throwLater(e);\n        domEventFired = true;\n    }\n\n    return domEventFired || globalEventFired;\n};\n\nPromise.config = function(opts) {\n    opts = Object(opts);\n    if (\"longStackTraces\" in opts) {\n        if (opts.longStackTraces) {\n            Promise.longStackTraces();\n        } else if (!opts.longStackTraces && Promise.hasLongStackTraces()) {\n            disableLongStackTraces();\n        }\n    }\n    if (\"warnings\" in opts) {\n        var warningsOption = opts.warnings;\n        config.warnings = !!warningsOption;\n        wForgottenReturn = config.warnings;\n\n        if (util.isObject(warningsOption)) {\n            if (\"wForgottenReturn\" in warningsOption) {\n                wForgottenReturn = !!warningsOption.wForgottenReturn;\n            }\n        }\n    }\n    if (\"cancellation\" in opts && opts.cancellation && !config.cancellation) {\n        if (async.haveItemsQueued()) {\n            throw new Error(\n                \"cannot enable cancellation after promises are in use\");\n        }\n        Promise.prototype._clearCancellationData =\n            cancellationClearCancellationData;\n        Promise.prototype._propagateFrom = cancellationPropagateFrom;\n        Promise.prototype._onCancel = cancellationOnCancel;\n        Promise.prototype._setOnCancel = cancellationSetOnCancel;\n        Promise.prototype._attachCancellationCallback =\n            cancellationAttachCancellationCallback;\n        Promise.prototype._execute = cancellationExecute;\n        propagateFromFunction = cancellationPropagateFrom;\n        config.cancellation = true;\n    }\n    if (\"monitoring\" in opts) {\n        if (opts.monitoring && !config.monitoring) {\n            config.monitoring = true;\n            Promise.prototype._fireEvent = activeFireEvent;\n        } else if (!opts.monitoring && config.monitoring) {\n            config.monitoring = false;\n            Promise.prototype._fireEvent = defaultFireEvent;\n        }\n    }\n    if (\"asyncHooks\" in opts && util.nodeSupportsAsyncResource) {\n        var prev = config.asyncHooks;\n        var cur = !!opts.asyncHooks;\n        if (prev !== cur) {\n            config.asyncHooks = cur;\n            if (cur) {\n                enableAsyncHooks();\n            } else {\n                disableAsyncHooks();\n            }\n        }\n    }\n    return Promise;\n};\n\nfunction defaultFireEvent() { return false; }\n\nPromise.prototype._fireEvent = defaultFireEvent;\nPromise.prototype._execute = function(executor, resolve, reject) {\n    try {\n        executor(resolve, reject);\n    } catch (e) {\n        return e;\n    }\n};\nPromise.prototype._onCancel = function () {};\nPromise.prototype._setOnCancel = function (handler) { ; };\nPromise.prototype._attachCancellationCallback = function(onCancel) {\n    ;\n};\nPromise.prototype._captureStackTrace = function () {};\nPromise.prototype._attachExtraTrace = function () {};\nPromise.prototype._dereferenceTrace = function () {};\nPromise.prototype._clearCancellationData = function() {};\nPromise.prototype._propagateFrom = function (parent, flags) {\n    ;\n    ;\n};\n\nfunction cancellationExecute(executor, resolve, reject) {\n    var promise = this;\n    try {\n        executor(resolve, reject, function(onCancel) {\n            if (typeof onCancel !== \"function\") {\n                throw new TypeError(\"onCancel must be a function, got: \" +\n                                    util.toString(onCancel));\n            }\n            promise._attachCancellationCallback(onCancel);\n        });\n    } catch (e) {\n        return e;\n    }\n}\n\nfunction cancellationAttachCancellationCallback(onCancel) {\n    if (!this._isCancellable()) return this;\n\n    var previousOnCancel = this._onCancel();\n    if (previousOnCancel !== undefined) {\n        if (util.isArray(previousOnCancel)) {\n            previousOnCancel.push(onCancel);\n        } else {\n            this._setOnCancel([previousOnCancel, onCancel]);\n        }\n    } else {\n        this._setOnCancel(onCancel);\n    }\n}\n\nfunction cancellationOnCancel() {\n    return this._onCancelField;\n}\n\nfunction cancellationSetOnCancel(onCancel) {\n    this._onCancelField = onCancel;\n}\n\nfunction cancellationClearCancellationData() {\n    this._cancellationParent = undefined;\n    this._onCancelField = undefined;\n}\n\nfunction cancellationPropagateFrom(parent, flags) {\n    if ((flags & 1) !== 0) {\n        this._cancellationParent = parent;\n        var branchesRemainingToCancel = parent._branchesRemainingToCancel;\n        if (branchesRemainingToCancel === undefined) {\n            branchesRemainingToCancel = 0;\n        }\n        parent._branchesRemainingToCancel = branchesRemainingToCancel + 1;\n    }\n    if ((flags & 2) !== 0 && parent._isBound()) {\n        this._setBoundTo(parent._boundTo);\n    }\n}\n\nfunction bindingPropagateFrom(parent, flags) {\n    if ((flags & 2) !== 0 && parent._isBound()) {\n        this._setBoundTo(parent._boundTo);\n    }\n}\nvar propagateFromFunction = bindingPropagateFrom;\n\nfunction boundValueFunction() {\n    var ret = this._boundTo;\n    if (ret !== undefined) {\n        if (ret instanceof Promise) {\n            if (ret.isFulfilled()) {\n                return ret.value();\n            } else {\n                return undefined;\n            }\n        }\n    }\n    return ret;\n}\n\nfunction longStackTracesCaptureStackTrace() {\n    this._trace = new CapturedTrace(this._peekContext());\n}\n\nfunction longStackTracesAttachExtraTrace(error, ignoreSelf) {\n    if (canAttachTrace(error)) {\n        var trace = this._trace;\n        if (trace !== undefined) {\n            if (ignoreSelf) trace = trace._parent;\n        }\n        if (trace !== undefined) {\n            trace.attachExtraTrace(error);\n        } else if (!error.__stackCleaned__) {\n            var parsed = parseStackAndMessage(error);\n            util.notEnumerableProp(error, \"stack\",\n                parsed.message + \"\\n\" + parsed.stack.join(\"\\n\"));\n            util.notEnumerableProp(error, \"__stackCleaned__\", true);\n        }\n    }\n}\n\nfunction longStackTracesDereferenceTrace() {\n    this._trace = undefined;\n}\n\nfunction checkForgottenReturns(returnValue, promiseCreated, name, promise,\n                               parent) {\n    if (returnValue === undefined && promiseCreated !== null &&\n        wForgottenReturn) {\n        if (parent !== undefined && parent._returnedNonUndefined()) return;\n        if ((promise._bitField & 65535) === 0) return;\n\n        if (name) name = name + \" \";\n        var handlerLine = \"\";\n        var creatorLine = \"\";\n        if (promiseCreated._trace) {\n            var traceLines = promiseCreated._trace.stack.split(\"\\n\");\n            var stack = cleanStack(traceLines);\n            for (var i = stack.length - 1; i >= 0; --i) {\n                var line = stack[i];\n                if (!nodeFramePattern.test(line)) {\n                    var lineMatches = line.match(parseLinePattern);\n                    if (lineMatches) {\n                        handlerLine  = \"at \" + lineMatches[1] +\n                            \":\" + lineMatches[2] + \":\" + lineMatches[3] + \" \";\n                    }\n                    break;\n                }\n            }\n\n            if (stack.length > 0) {\n                var firstUserLine = stack[0];\n                for (var i = 0; i < traceLines.length; ++i) {\n\n                    if (traceLines[i] === firstUserLine) {\n                        if (i > 0) {\n                            creatorLine = \"\\n\" + traceLines[i - 1];\n                        }\n                        break;\n                    }\n                }\n\n            }\n        }\n        var msg = \"a promise was created in a \" + name +\n            \"handler \" + handlerLine + \"but was not returned from it, \" +\n            \"see http://goo.gl/rRqMUw\" +\n            creatorLine;\n        promise._warn(msg, true, promiseCreated);\n    }\n}\n\nfunction deprecated(name, replacement) {\n    var message = name +\n        \" is deprecated and will be removed in a future version.\";\n    if (replacement) message += \" Use \" + replacement + \" instead.\";\n    return warn(message);\n}\n\nfunction warn(message, shouldUseOwnTrace, promise) {\n    if (!config.warnings) return;\n    var warning = new Warning(message);\n    var ctx;\n    if (shouldUseOwnTrace) {\n        promise._attachExtraTrace(warning);\n    } else if (config.longStackTraces && (ctx = Promise._peekContext())) {\n        ctx.attachExtraTrace(warning);\n    } else {\n        var parsed = parseStackAndMessage(warning);\n        warning.stack = parsed.message + \"\\n\" + parsed.stack.join(\"\\n\");\n    }\n\n    if (!activeFireEvent(\"warning\", warning)) {\n        formatAndLogError(warning, \"\", true);\n    }\n}\n\nfunction reconstructStack(message, stacks) {\n    for (var i = 0; i < stacks.length - 1; ++i) {\n        stacks[i].push(\"From previous event:\");\n        stacks[i] = stacks[i].join(\"\\n\");\n    }\n    if (i < stacks.length) {\n        stacks[i] = stacks[i].join(\"\\n\");\n    }\n    return message + \"\\n\" + stacks.join(\"\\n\");\n}\n\nfunction removeDuplicateOrEmptyJumps(stacks) {\n    for (var i = 0; i < stacks.length; ++i) {\n        if (stacks[i].length === 0 ||\n            ((i + 1 < stacks.length) && stacks[i][0] === stacks[i+1][0])) {\n            stacks.splice(i, 1);\n            i--;\n        }\n    }\n}\n\nfunction removeCommonRoots(stacks) {\n    var current = stacks[0];\n    for (var i = 1; i < stacks.length; ++i) {\n        var prev = stacks[i];\n        var currentLastIndex = current.length - 1;\n        var currentLastLine = current[currentLastIndex];\n        var commonRootMeetPoint = -1;\n\n        for (var j = prev.length - 1; j >= 0; --j) {\n            if (prev[j] === currentLastLine) {\n                commonRootMeetPoint = j;\n                break;\n            }\n        }\n\n        for (var j = commonRootMeetPoint; j >= 0; --j) {\n            var line = prev[j];\n            if (current[currentLastIndex] === line) {\n                current.pop();\n                currentLastIndex--;\n            } else {\n                break;\n            }\n        }\n        current = prev;\n    }\n}\n\nfunction cleanStack(stack) {\n    var ret = [];\n    for (var i = 0; i < stack.length; ++i) {\n        var line = stack[i];\n        var isTraceLine = \"    (No stack trace)\" === line ||\n            stackFramePattern.test(line);\n        var isInternalFrame = isTraceLine && shouldIgnore(line);\n        if (isTraceLine && !isInternalFrame) {\n            if (indentStackFrames && line.charAt(0) !== \" \") {\n                line = \"    \" + line;\n            }\n            ret.push(line);\n        }\n    }\n    return ret;\n}\n\nfunction stackFramesAsArray(error) {\n    var stack = error.stack.replace(/\\s+$/g, \"\").split(\"\\n\");\n    for (var i = 0; i < stack.length; ++i) {\n        var line = stack[i];\n        if (\"    (No stack trace)\" === line || stackFramePattern.test(line)) {\n            break;\n        }\n    }\n    if (i > 0 && error.name != \"SyntaxError\") {\n        stack = stack.slice(i);\n    }\n    return stack;\n}\n\nfunction parseStackAndMessage(error) {\n    var stack = error.stack;\n    var message = error.toString();\n    stack = typeof stack === \"string\" && stack.length > 0\n                ? stackFramesAsArray(error) : [\"    (No stack trace)\"];\n    return {\n        message: message,\n        stack: error.name == \"SyntaxError\" ? stack : cleanStack(stack)\n    };\n}\n\nfunction formatAndLogError(error, title, isSoft) {\n    if (typeof console !== \"undefined\") {\n        var message;\n        if (util.isObject(error)) {\n            var stack = error.stack;\n            message = title + formatStack(stack, error);\n        } else {\n            message = title + String(error);\n        }\n        if (typeof printWarning === \"function\") {\n            printWarning(message, isSoft);\n        } else if (typeof console.log === \"function\" ||\n            typeof console.log === \"object\") {\n            console.log(message);\n        }\n    }\n}\n\nfunction fireRejectionEvent(name, localHandler, reason, promise) {\n    var localEventFired = false;\n    try {\n        if (typeof localHandler === \"function\") {\n            localEventFired = true;\n            if (name === \"rejectionHandled\") {\n                localHandler(promise);\n            } else {\n                localHandler(reason, promise);\n            }\n        }\n    } catch (e) {\n        async.throwLater(e);\n    }\n\n    if (name === \"unhandledRejection\") {\n        if (!activeFireEvent(name, reason, promise) && !localEventFired) {\n            formatAndLogError(reason, \"Unhandled rejection \");\n        }\n    } else {\n        activeFireEvent(name, promise);\n    }\n}\n\nfunction formatNonError(obj) {\n    var str;\n    if (typeof obj === \"function\") {\n        str = \"[function \" +\n            (obj.name || \"anonymous\") +\n            \"]\";\n    } else {\n        str = obj && typeof obj.toString === \"function\"\n            ? obj.toString() : util.toString(obj);\n        var ruselessToString = /\\[object [a-zA-Z0-9$_]+\\]/;\n        if (ruselessToString.test(str)) {\n            try {\n                var newStr = JSON.stringify(obj);\n                str = newStr;\n            }\n            catch(e) {\n\n            }\n        }\n        if (str.length === 0) {\n            str = \"(empty array)\";\n        }\n    }\n    return (\"(<\" + snip(str) + \">, no stack trace)\");\n}\n\nfunction snip(str) {\n    var maxChars = 41;\n    if (str.length < maxChars) {\n        return str;\n    }\n    return str.substr(0, maxChars - 3) + \"...\";\n}\n\nfunction longStackTracesIsSupported() {\n    return typeof captureStackTrace === \"function\";\n}\n\nvar shouldIgnore = function() { return false; };\nvar parseLineInfoRegex = /[\\/<\\(]([^:\\/]+):(\\d+):(?:\\d+)\\)?\\s*$/;\nfunction parseLineInfo(line) {\n    var matches = line.match(parseLineInfoRegex);\n    if (matches) {\n        return {\n            fileName: matches[1],\n            line: parseInt(matches[2], 10)\n        };\n    }\n}\n\nfunction setBounds(firstLineError, lastLineError) {\n    if (!longStackTracesIsSupported()) return;\n    var firstStackLines = (firstLineError.stack || \"\").split(\"\\n\");\n    var lastStackLines = (lastLineError.stack || \"\").split(\"\\n\");\n    var firstIndex = -1;\n    var lastIndex = -1;\n    var firstFileName;\n    var lastFileName;\n    for (var i = 0; i < firstStackLines.length; ++i) {\n        var result = parseLineInfo(firstStackLines[i]);\n        if (result) {\n            firstFileName = result.fileName;\n            firstIndex = result.line;\n            break;\n        }\n    }\n    for (var i = 0; i < lastStackLines.length; ++i) {\n        var result = parseLineInfo(lastStackLines[i]);\n        if (result) {\n            lastFileName = result.fileName;\n            lastIndex = result.line;\n            break;\n        }\n    }\n    if (firstIndex < 0 || lastIndex < 0 || !firstFileName || !lastFileName ||\n        firstFileName !== lastFileName || firstIndex >= lastIndex) {\n        return;\n    }\n\n    shouldIgnore = function(line) {\n        if (bluebirdFramePattern.test(line)) return true;\n        var info = parseLineInfo(line);\n        if (info) {\n            if (info.fileName === firstFileName &&\n                (firstIndex <= info.line && info.line <= lastIndex)) {\n                return true;\n            }\n        }\n        return false;\n    };\n}\n\nfunction CapturedTrace(parent) {\n    this._parent = parent;\n    this._promisesCreated = 0;\n    var length = this._length = 1 + (parent === undefined ? 0 : parent._length);\n    captureStackTrace(this, CapturedTrace);\n    if (length > 32) this.uncycle();\n}\nutil.inherits(CapturedTrace, Error);\nContext.CapturedTrace = CapturedTrace;\n\nCapturedTrace.prototype.uncycle = function() {\n    var length = this._length;\n    if (length < 2) return;\n    var nodes = [];\n    var stackToIndex = {};\n\n    for (var i = 0, node = this; node !== undefined; ++i) {\n        nodes.push(node);\n        node = node._parent;\n    }\n    length = this._length = i;\n    for (var i = length - 1; i >= 0; --i) {\n        var stack = nodes[i].stack;\n        if (stackToIndex[stack] === undefined) {\n            stackToIndex[stack] = i;\n        }\n    }\n    for (var i = 0; i < length; ++i) {\n        var currentStack = nodes[i].stack;\n        var index = stackToIndex[currentStack];\n        if (index !== undefined && index !== i) {\n            if (index > 0) {\n                nodes[index - 1]._parent = undefined;\n                nodes[index - 1]._length = 1;\n            }\n            nodes[i]._parent = undefined;\n            nodes[i]._length = 1;\n            var cycleEdgeNode = i > 0 ? nodes[i - 1] : this;\n\n            if (index < length - 1) {\n                cycleEdgeNode._parent = nodes[index + 1];\n                cycleEdgeNode._parent.uncycle();\n                cycleEdgeNode._length =\n                    cycleEdgeNode._parent._length + 1;\n            } else {\n                cycleEdgeNode._parent = undefined;\n                cycleEdgeNode._length = 1;\n            }\n            var currentChildLength = cycleEdgeNode._length + 1;\n            for (var j = i - 2; j >= 0; --j) {\n                nodes[j]._length = currentChildLength;\n                currentChildLength++;\n            }\n            return;\n        }\n    }\n};\n\nCapturedTrace.prototype.attachExtraTrace = function(error) {\n    if (error.__stackCleaned__) return;\n    this.uncycle();\n    var parsed = parseStackAndMessage(error);\n    var message = parsed.message;\n    var stacks = [parsed.stack];\n\n    var trace = this;\n    while (trace !== undefined) {\n        stacks.push(cleanStack(trace.stack.split(\"\\n\")));\n        trace = trace._parent;\n    }\n    removeCommonRoots(stacks);\n    removeDuplicateOrEmptyJumps(stacks);\n    util.notEnumerableProp(error, \"stack\", reconstructStack(message, stacks));\n    util.notEnumerableProp(error, \"__stackCleaned__\", true);\n};\n\nvar captureStackTrace = (function stackDetection() {\n    var v8stackFramePattern = /^\\s*at\\s*/;\n    var v8stackFormatter = function(stack, error) {\n        if (typeof stack === \"string\") return stack;\n\n        if (error.name !== undefined &&\n            error.message !== undefined) {\n            return error.toString();\n        }\n        return formatNonError(error);\n    };\n\n    if (typeof Error.stackTraceLimit === \"number\" &&\n        typeof Error.captureStackTrace === \"function\") {\n        Error.stackTraceLimit += 6;\n        stackFramePattern = v8stackFramePattern;\n        formatStack = v8stackFormatter;\n        var captureStackTrace = Error.captureStackTrace;\n\n        shouldIgnore = function(line) {\n            return bluebirdFramePattern.test(line);\n        };\n        return function(receiver, ignoreUntil) {\n            Error.stackTraceLimit += 6;\n            captureStackTrace(receiver, ignoreUntil);\n            Error.stackTraceLimit -= 6;\n        };\n    }\n    var err = new Error();\n\n    if (typeof err.stack === \"string\" &&\n        err.stack.split(\"\\n\")[0].indexOf(\"stackDetection@\") >= 0) {\n        stackFramePattern = /@/;\n        formatStack = v8stackFormatter;\n        indentStackFrames = true;\n        return function captureStackTrace(o) {\n            o.stack = new Error().stack;\n        };\n    }\n\n    var hasStackAfterThrow;\n    try { throw new Error(); }\n    catch(e) {\n        hasStackAfterThrow = (\"stack\" in e);\n    }\n    if (!(\"stack\" in err) && hasStackAfterThrow &&\n        typeof Error.stackTraceLimit === \"number\") {\n        stackFramePattern = v8stackFramePattern;\n        formatStack = v8stackFormatter;\n        return function captureStackTrace(o) {\n            Error.stackTraceLimit += 6;\n            try { throw new Error(); }\n            catch(e) { o.stack = e.stack; }\n            Error.stackTraceLimit -= 6;\n        };\n    }\n\n    formatStack = function(stack, error) {\n        if (typeof stack === \"string\") return stack;\n\n        if ((typeof error === \"object\" ||\n            typeof error === \"function\") &&\n            error.name !== undefined &&\n            error.message !== undefined) {\n            return error.toString();\n        }\n        return formatNonError(error);\n    };\n\n    return null;\n\n})([]);\n\nif (typeof console !== \"undefined\" && typeof console.warn !== \"undefined\") {\n    printWarning = function (message) {\n        console.warn(message);\n    };\n    if (util.isNode && process.stderr.isTTY) {\n        printWarning = function(message, isSoft) {\n            var color = isSoft ? \"\\u001b[33m\" : \"\\u001b[31m\";\n            console.warn(color + message + \"\\u001b[0m\\n\");\n        };\n    } else if (!util.isNode && typeof (new Error().stack) === \"string\") {\n        printWarning = function(message, isSoft) {\n            console.warn(\"%c\" + message,\n                        isSoft ? \"color: darkorange\" : \"color: red\");\n        };\n    }\n}\n\nvar config = {\n    warnings: warnings,\n    longStackTraces: false,\n    cancellation: false,\n    monitoring: false,\n    asyncHooks: false\n};\n\nif (longStackTraces) Promise.longStackTraces();\n\nreturn {\n    asyncHooks: function() {\n        return config.asyncHooks;\n    },\n    longStackTraces: function() {\n        return config.longStackTraces;\n    },\n    warnings: function() {\n        return config.warnings;\n    },\n    cancellation: function() {\n        return config.cancellation;\n    },\n    monitoring: function() {\n        return config.monitoring;\n    },\n    propagateFromFunction: function() {\n        return propagateFromFunction;\n    },\n    boundValueFunction: function() {\n        return boundValueFunction;\n    },\n    checkForgottenReturns: checkForgottenReturns,\n    setBounds: setBounds,\n    warn: warn,\n    deprecated: deprecated,\n    CapturedTrace: CapturedTrace,\n    fireDomEvent: fireDomEvent,\n    fireGlobalEvent: fireGlobalEvent\n};\n};\n\n},{\"./errors\":12,\"./es5\":13,\"./util\":36}],10:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise) {\nfunction returner() {\n    return this.value;\n}\nfunction thrower() {\n    throw this.reason;\n}\n\nPromise.prototype[\"return\"] =\nPromise.prototype.thenReturn = function (value) {\n    if (value instanceof Promise) value.suppressUnhandledRejections();\n    return this._then(\n        returner, undefined, undefined, {value: value}, undefined);\n};\n\nPromise.prototype[\"throw\"] =\nPromise.prototype.thenThrow = function (reason) {\n    return this._then(\n        thrower, undefined, undefined, {reason: reason}, undefined);\n};\n\nPromise.prototype.catchThrow = function (reason) {\n    if (arguments.length <= 1) {\n        return this._then(\n            undefined, thrower, undefined, {reason: reason}, undefined);\n    } else {\n        var _reason = arguments[1];\n        var handler = function() {throw _reason;};\n        return this.caught(reason, handler);\n    }\n};\n\nPromise.prototype.catchReturn = function (value) {\n    if (arguments.length <= 1) {\n        if (value instanceof Promise) value.suppressUnhandledRejections();\n        return this._then(\n            undefined, returner, undefined, {value: value}, undefined);\n    } else {\n        var _value = arguments[1];\n        if (_value instanceof Promise) _value.suppressUnhandledRejections();\n        var handler = function() {return _value;};\n        return this.caught(value, handler);\n    }\n};\n};\n\n},{}],11:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise, INTERNAL) {\nvar PromiseReduce = Promise.reduce;\nvar PromiseAll = Promise.all;\n\nfunction promiseAllThis() {\n    return PromiseAll(this);\n}\n\nfunction PromiseMapSeries(promises, fn) {\n    return PromiseReduce(promises, fn, INTERNAL, INTERNAL);\n}\n\nPromise.prototype.each = function (fn) {\n    return PromiseReduce(this, fn, INTERNAL, 0)\n              ._then(promiseAllThis, undefined, undefined, this, undefined);\n};\n\nPromise.prototype.mapSeries = function (fn) {\n    return PromiseReduce(this, fn, INTERNAL, INTERNAL);\n};\n\nPromise.each = function (promises, fn) {\n    return PromiseReduce(promises, fn, INTERNAL, 0)\n              ._then(promiseAllThis, undefined, undefined, promises, undefined);\n};\n\nPromise.mapSeries = PromiseMapSeries;\n};\n\n\n},{}],12:[function(_dereq_,module,exports){\n\"use strict\";\nvar es5 = _dereq_(\"./es5\");\nvar Objectfreeze = es5.freeze;\nvar util = _dereq_(\"./util\");\nvar inherits = util.inherits;\nvar notEnumerableProp = util.notEnumerableProp;\n\nfunction subError(nameProperty, defaultMessage) {\n    function SubError(message) {\n        if (!(this instanceof SubError)) return new SubError(message);\n        notEnumerableProp(this, \"message\",\n            typeof message === \"string\" ? message : defaultMessage);\n        notEnumerableProp(this, \"name\", nameProperty);\n        if (Error.captureStackTrace) {\n            Error.captureStackTrace(this, this.constructor);\n        } else {\n            Error.call(this);\n        }\n    }\n    inherits(SubError, Error);\n    return SubError;\n}\n\nvar _TypeError, _RangeError;\nvar Warning = subError(\"Warning\", \"warning\");\nvar CancellationError = subError(\"CancellationError\", \"cancellation error\");\nvar TimeoutError = subError(\"TimeoutError\", \"timeout error\");\nvar AggregateError = subError(\"AggregateError\", \"aggregate error\");\ntry {\n    _TypeError = TypeError;\n    _RangeError = RangeError;\n} catch(e) {\n    _TypeError = subError(\"TypeError\", \"type error\");\n    _RangeError = subError(\"RangeError\", \"range error\");\n}\n\nvar methods = (\"join pop push shift unshift slice filter forEach some \" +\n    \"every map indexOf lastIndexOf reduce reduceRight sort reverse\").split(\" \");\n\nfor (var i = 0; i < methods.length; ++i) {\n    if (typeof Array.prototype[methods[i]] === \"function\") {\n        AggregateError.prototype[methods[i]] = Array.prototype[methods[i]];\n    }\n}\n\nes5.defineProperty(AggregateError.prototype, \"length\", {\n    value: 0,\n    configurable: false,\n    writable: true,\n    enumerable: true\n});\nAggregateError.prototype[\"isOperational\"] = true;\nvar level = 0;\nAggregateError.prototype.toString = function() {\n    var indent = Array(level * 4 + 1).join(\" \");\n    var ret = \"\\n\" + indent + \"AggregateError of:\" + \"\\n\";\n    level++;\n    indent = Array(level * 4 + 1).join(\" \");\n    for (var i = 0; i < this.length; ++i) {\n        var str = this[i] === this ? \"[Circular AggregateError]\" : this[i] + \"\";\n        var lines = str.split(\"\\n\");\n        for (var j = 0; j < lines.length; ++j) {\n            lines[j] = indent + lines[j];\n        }\n        str = lines.join(\"\\n\");\n        ret += str + \"\\n\";\n    }\n    level--;\n    return ret;\n};\n\nfunction OperationalError(message) {\n    if (!(this instanceof OperationalError))\n        return new OperationalError(message);\n    notEnumerableProp(this, \"name\", \"OperationalError\");\n    notEnumerableProp(this, \"message\", message);\n    this.cause = message;\n    this[\"isOperational\"] = true;\n\n    if (message instanceof Error) {\n        notEnumerableProp(this, \"message\", message.message);\n        notEnumerableProp(this, \"stack\", message.stack);\n    } else if (Error.captureStackTrace) {\n        Error.captureStackTrace(this, this.constructor);\n    }\n\n}\ninherits(OperationalError, Error);\n\nvar errorTypes = Error[\"__BluebirdErrorTypes__\"];\nif (!errorTypes) {\n    errorTypes = Objectfreeze({\n        CancellationError: CancellationError,\n        TimeoutError: TimeoutError,\n        OperationalError: OperationalError,\n        RejectionError: OperationalError,\n        AggregateError: AggregateError\n    });\n    es5.defineProperty(Error, \"__BluebirdErrorTypes__\", {\n        value: errorTypes,\n        writable: false,\n        enumerable: false,\n        configurable: false\n    });\n}\n\nmodule.exports = {\n    Error: Error,\n    TypeError: _TypeError,\n    RangeError: _RangeError,\n    CancellationError: errorTypes.CancellationError,\n    OperationalError: errorTypes.OperationalError,\n    TimeoutError: errorTypes.TimeoutError,\n    AggregateError: errorTypes.AggregateError,\n    Warning: Warning\n};\n\n},{\"./es5\":13,\"./util\":36}],13:[function(_dereq_,module,exports){\nvar isES5 = (function(){\n    \"use strict\";\n    return this === undefined;\n})();\n\nif (isES5) {\n    module.exports = {\n        freeze: Object.freeze,\n        defineProperty: Object.defineProperty,\n        getDescriptor: Object.getOwnPropertyDescriptor,\n        keys: Object.keys,\n        names: Object.getOwnPropertyNames,\n        getPrototypeOf: Object.getPrototypeOf,\n        isArray: Array.isArray,\n        isES5: isES5,\n        propertyIsWritable: function(obj, prop) {\n            var descriptor = Object.getOwnPropertyDescriptor(obj, prop);\n            return !!(!descriptor || descriptor.writable || descriptor.set);\n        }\n    };\n} else {\n    var has = {}.hasOwnProperty;\n    var str = {}.toString;\n    var proto = {}.constructor.prototype;\n\n    var ObjectKeys = function (o) {\n        var ret = [];\n        for (var key in o) {\n            if (has.call(o, key)) {\n                ret.push(key);\n            }\n        }\n        return ret;\n    };\n\n    var ObjectGetDescriptor = function(o, key) {\n        return {value: o[key]};\n    };\n\n    var ObjectDefineProperty = function (o, key, desc) {\n        o[key] = desc.value;\n        return o;\n    };\n\n    var ObjectFreeze = function (obj) {\n        return obj;\n    };\n\n    var ObjectGetPrototypeOf = function (obj) {\n        try {\n            return Object(obj).constructor.prototype;\n        }\n        catch (e) {\n            return proto;\n        }\n    };\n\n    var ArrayIsArray = function (obj) {\n        try {\n            return str.call(obj) === \"[object Array]\";\n        }\n        catch(e) {\n            return false;\n        }\n    };\n\n    module.exports = {\n        isArray: ArrayIsArray,\n        keys: ObjectKeys,\n        names: ObjectKeys,\n        defineProperty: ObjectDefineProperty,\n        getDescriptor: ObjectGetDescriptor,\n        freeze: ObjectFreeze,\n        getPrototypeOf: ObjectGetPrototypeOf,\n        isES5: isES5,\n        propertyIsWritable: function() {\n            return true;\n        }\n    };\n}\n\n},{}],14:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise, INTERNAL) {\nvar PromiseMap = Promise.map;\n\nPromise.prototype.filter = function (fn, options) {\n    return PromiseMap(this, fn, options, INTERNAL);\n};\n\nPromise.filter = function (promises, fn, options) {\n    return PromiseMap(promises, fn, options, INTERNAL);\n};\n};\n\n},{}],15:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise, tryConvertToPromise, NEXT_FILTER) {\nvar util = _dereq_(\"./util\");\nvar CancellationError = Promise.CancellationError;\nvar errorObj = util.errorObj;\nvar catchFilter = _dereq_(\"./catch_filter\")(NEXT_FILTER);\n\nfunction PassThroughHandlerContext(promise, type, handler) {\n    this.promise = promise;\n    this.type = type;\n    this.handler = handler;\n    this.called = false;\n    this.cancelPromise = null;\n}\n\nPassThroughHandlerContext.prototype.isFinallyHandler = function() {\n    return this.type === 0;\n};\n\nfunction FinallyHandlerCancelReaction(finallyHandler) {\n    this.finallyHandler = finallyHandler;\n}\n\nFinallyHandlerCancelReaction.prototype._resultCancelled = function() {\n    checkCancel(this.finallyHandler);\n};\n\nfunction checkCancel(ctx, reason) {\n    if (ctx.cancelPromise != null) {\n        if (arguments.length > 1) {\n            ctx.cancelPromise._reject(reason);\n        } else {\n            ctx.cancelPromise._cancel();\n        }\n        ctx.cancelPromise = null;\n        return true;\n    }\n    return false;\n}\n\nfunction succeed() {\n    return finallyHandler.call(this, this.promise._target()._settledValue());\n}\nfunction fail(reason) {\n    if (checkCancel(this, reason)) return;\n    errorObj.e = reason;\n    return errorObj;\n}\nfunction finallyHandler(reasonOrValue) {\n    var promise = this.promise;\n    var handler = this.handler;\n\n    if (!this.called) {\n        this.called = true;\n        var ret = this.isFinallyHandler()\n            ? handler.call(promise._boundValue())\n            : handler.call(promise._boundValue(), reasonOrValue);\n        if (ret === NEXT_FILTER) {\n            return ret;\n        } else if (ret !== undefined) {\n            promise._setReturnedNonUndefined();\n            var maybePromise = tryConvertToPromise(ret, promise);\n            if (maybePromise instanceof Promise) {\n                if (this.cancelPromise != null) {\n                    if (maybePromise._isCancelled()) {\n                        var reason =\n                            new CancellationError(\"late cancellation observer\");\n                        promise._attachExtraTrace(reason);\n                        errorObj.e = reason;\n                        return errorObj;\n                    } else if (maybePromise.isPending()) {\n                        maybePromise._attachCancellationCallback(\n                            new FinallyHandlerCancelReaction(this));\n                    }\n                }\n                return maybePromise._then(\n                    succeed, fail, undefined, this, undefined);\n            }\n        }\n    }\n\n    if (promise.isRejected()) {\n        checkCancel(this);\n        errorObj.e = reasonOrValue;\n        return errorObj;\n    } else {\n        checkCancel(this);\n        return reasonOrValue;\n    }\n}\n\nPromise.prototype._passThrough = function(handler, type, success, fail) {\n    if (typeof handler !== \"function\") return this.then();\n    return this._then(success,\n                      fail,\n                      undefined,\n                      new PassThroughHandlerContext(this, type, handler),\n                      undefined);\n};\n\nPromise.prototype.lastly =\nPromise.prototype[\"finally\"] = function (handler) {\n    return this._passThrough(handler,\n                             0,\n                             finallyHandler,\n                             finallyHandler);\n};\n\n\nPromise.prototype.tap = function (handler) {\n    return this._passThrough(handler, 1, finallyHandler);\n};\n\nPromise.prototype.tapCatch = function (handlerOrPredicate) {\n    var len = arguments.length;\n    if(len === 1) {\n        return this._passThrough(handlerOrPredicate,\n                                 1,\n                                 undefined,\n                                 finallyHandler);\n    } else {\n         var catchInstances = new Array(len - 1),\n            j = 0, i;\n        for (i = 0; i < len - 1; ++i) {\n            var item = arguments[i];\n            if (util.isObject(item)) {\n                catchInstances[j++] = item;\n            } else {\n                return Promise.reject(new TypeError(\n                    \"tapCatch statement predicate: \"\n                    + \"expecting an object but got \" + util.classString(item)\n                ));\n            }\n        }\n        catchInstances.length = j;\n        var handler = arguments[i];\n        return this._passThrough(catchFilter(catchInstances, handler, this),\n                                 1,\n                                 undefined,\n                                 finallyHandler);\n    }\n\n};\n\nreturn PassThroughHandlerContext;\n};\n\n},{\"./catch_filter\":7,\"./util\":36}],16:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise,\n                          apiRejection,\n                          INTERNAL,\n                          tryConvertToPromise,\n                          Proxyable,\n                          debug) {\nvar errors = _dereq_(\"./errors\");\nvar TypeError = errors.TypeError;\nvar util = _dereq_(\"./util\");\nvar errorObj = util.errorObj;\nvar tryCatch = util.tryCatch;\nvar yieldHandlers = [];\n\nfunction promiseFromYieldHandler(value, yieldHandlers, traceParent) {\n    for (var i = 0; i < yieldHandlers.length; ++i) {\n        traceParent._pushContext();\n        var result = tryCatch(yieldHandlers[i])(value);\n        traceParent._popContext();\n        if (result === errorObj) {\n            traceParent._pushContext();\n            var ret = Promise.reject(errorObj.e);\n            traceParent._popContext();\n            return ret;\n        }\n        var maybePromise = tryConvertToPromise(result, traceParent);\n        if (maybePromise instanceof Promise) return maybePromise;\n    }\n    return null;\n}\n\nfunction PromiseSpawn(generatorFunction, receiver, yieldHandler, stack) {\n    if (debug.cancellation()) {\n        var internal = new Promise(INTERNAL);\n        var _finallyPromise = this._finallyPromise = new Promise(INTERNAL);\n        this._promise = internal.lastly(function() {\n            return _finallyPromise;\n        });\n        internal._captureStackTrace();\n        internal._setOnCancel(this);\n    } else {\n        var promise = this._promise = new Promise(INTERNAL);\n        promise._captureStackTrace();\n    }\n    this._stack = stack;\n    this._generatorFunction = generatorFunction;\n    this._receiver = receiver;\n    this._generator = undefined;\n    this._yieldHandlers = typeof yieldHandler === \"function\"\n        ? [yieldHandler].concat(yieldHandlers)\n        : yieldHandlers;\n    this._yieldedPromise = null;\n    this._cancellationPhase = false;\n}\nutil.inherits(PromiseSpawn, Proxyable);\n\nPromiseSpawn.prototype._isResolved = function() {\n    return this._promise === null;\n};\n\nPromiseSpawn.prototype._cleanup = function() {\n    this._promise = this._generator = null;\n    if (debug.cancellation() && this._finallyPromise !== null) {\n        this._finallyPromise._fulfill();\n        this._finallyPromise = null;\n    }\n};\n\nPromiseSpawn.prototype._promiseCancelled = function() {\n    if (this._isResolved()) return;\n    var implementsReturn = typeof this._generator[\"return\"] !== \"undefined\";\n\n    var result;\n    if (!implementsReturn) {\n        var reason = new Promise.CancellationError(\n            \"generator .return() sentinel\");\n        Promise.coroutine.returnSentinel = reason;\n        this._promise._attachExtraTrace(reason);\n        this._promise._pushContext();\n        result = tryCatch(this._generator[\"throw\"]).call(this._generator,\n                                                         reason);\n        this._promise._popContext();\n    } else {\n        this._promise._pushContext();\n        result = tryCatch(this._generator[\"return\"]).call(this._generator,\n                                                          undefined);\n        this._promise._popContext();\n    }\n    this._cancellationPhase = true;\n    this._yieldedPromise = null;\n    this._continue(result);\n};\n\nPromiseSpawn.prototype._promiseFulfilled = function(value) {\n    this._yieldedPromise = null;\n    this._promise._pushContext();\n    var result = tryCatch(this._generator.next).call(this._generator, value);\n    this._promise._popContext();\n    this._continue(result);\n};\n\nPromiseSpawn.prototype._promiseRejected = function(reason) {\n    this._yieldedPromise = null;\n    this._promise._attachExtraTrace(reason);\n    this._promise._pushContext();\n    var result = tryCatch(this._generator[\"throw\"])\n        .call(this._generator, reason);\n    this._promise._popContext();\n    this._continue(result);\n};\n\nPromiseSpawn.prototype._resultCancelled = function() {\n    if (this._yieldedPromise instanceof Promise) {\n        var promise = this._yieldedPromise;\n        this._yieldedPromise = null;\n        promise.cancel();\n    }\n};\n\nPromiseSpawn.prototype.promise = function () {\n    return this._promise;\n};\n\nPromiseSpawn.prototype._run = function () {\n    this._generator = this._generatorFunction.call(this._receiver);\n    this._receiver =\n        this._generatorFunction = undefined;\n    this._promiseFulfilled(undefined);\n};\n\nPromiseSpawn.prototype._continue = function (result) {\n    var promise = this._promise;\n    if (result === errorObj) {\n        this._cleanup();\n        if (this._cancellationPhase) {\n            return promise.cancel();\n        } else {\n            return promise._rejectCallback(result.e, false);\n        }\n    }\n\n    var value = result.value;\n    if (result.done === true) {\n        this._cleanup();\n        if (this._cancellationPhase) {\n            return promise.cancel();\n        } else {\n            return promise._resolveCallback(value);\n        }\n    } else {\n        var maybePromise = tryConvertToPromise(value, this._promise);\n        if (!(maybePromise instanceof Promise)) {\n            maybePromise =\n                promiseFromYieldHandler(maybePromise,\n                                        this._yieldHandlers,\n                                        this._promise);\n            if (maybePromise === null) {\n                this._promiseRejected(\n                    new TypeError(\n                        \"A value %s was yielded that could not be treated as a promise\\u000a\\u000a    See http://goo.gl/MqrFmX\\u000a\\u000a\".replace(\"%s\", String(value)) +\n                        \"From coroutine:\\u000a\" +\n                        this._stack.split(\"\\n\").slice(1, -7).join(\"\\n\")\n                    )\n                );\n                return;\n            }\n        }\n        maybePromise = maybePromise._target();\n        var bitField = maybePromise._bitField;\n        ;\n        if (((bitField & 50397184) === 0)) {\n            this._yieldedPromise = maybePromise;\n            maybePromise._proxy(this, null);\n        } else if (((bitField & 33554432) !== 0)) {\n            Promise._async.invoke(\n                this._promiseFulfilled, this, maybePromise._value()\n            );\n        } else if (((bitField & 16777216) !== 0)) {\n            Promise._async.invoke(\n                this._promiseRejected, this, maybePromise._reason()\n            );\n        } else {\n            this._promiseCancelled();\n        }\n    }\n};\n\nPromise.coroutine = function (generatorFunction, options) {\n    if (typeof generatorFunction !== \"function\") {\n        throw new TypeError(\"generatorFunction must be a function\\u000a\\u000a    See http://goo.gl/MqrFmX\\u000a\");\n    }\n    var yieldHandler = Object(options).yieldHandler;\n    var PromiseSpawn$ = PromiseSpawn;\n    var stack = new Error().stack;\n    return function () {\n        var generator = generatorFunction.apply(this, arguments);\n        var spawn = new PromiseSpawn$(undefined, undefined, yieldHandler,\n                                      stack);\n        var ret = spawn.promise();\n        spawn._generator = generator;\n        spawn._promiseFulfilled(undefined);\n        return ret;\n    };\n};\n\nPromise.coroutine.addYieldHandler = function(fn) {\n    if (typeof fn !== \"function\") {\n        throw new TypeError(\"expecting a function but got \" + util.classString(fn));\n    }\n    yieldHandlers.push(fn);\n};\n\nPromise.spawn = function (generatorFunction) {\n    debug.deprecated(\"Promise.spawn()\", \"Promise.coroutine()\");\n    if (typeof generatorFunction !== \"function\") {\n        return apiRejection(\"generatorFunction must be a function\\u000a\\u000a    See http://goo.gl/MqrFmX\\u000a\");\n    }\n    var spawn = new PromiseSpawn(generatorFunction, this);\n    var ret = spawn.promise();\n    spawn._run(Promise.spawn);\n    return ret;\n};\n};\n\n},{\"./errors\":12,\"./util\":36}],17:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports =\nfunction(Promise, PromiseArray, tryConvertToPromise, INTERNAL, async) {\nvar util = _dereq_(\"./util\");\nvar canEvaluate = util.canEvaluate;\nvar tryCatch = util.tryCatch;\nvar errorObj = util.errorObj;\nvar reject;\n\nif (!true) {\nif (canEvaluate) {\n    var thenCallback = function(i) {\n        return new Function(\"value\", \"holder\", \"                             \\n\\\n            'use strict';                                                    \\n\\\n            holder.pIndex = value;                                           \\n\\\n            holder.checkFulfillment(this);                                   \\n\\\n            \".replace(/Index/g, i));\n    };\n\n    var promiseSetter = function(i) {\n        return new Function(\"promise\", \"holder\", \"                           \\n\\\n            'use strict';                                                    \\n\\\n            holder.pIndex = promise;                                         \\n\\\n            \".replace(/Index/g, i));\n    };\n\n    var generateHolderClass = function(total) {\n        var props = new Array(total);\n        for (var i = 0; i < props.length; ++i) {\n            props[i] = \"this.p\" + (i+1);\n        }\n        var assignment = props.join(\" = \") + \" = null;\";\n        var cancellationCode= \"var promise;\\n\" + props.map(function(prop) {\n            return \"                                                         \\n\\\n                promise = \" + prop + \";                                      \\n\\\n                if (promise instanceof Promise) {                            \\n\\\n                    promise.cancel();                                        \\n\\\n                }                                                            \\n\\\n            \";\n        }).join(\"\\n\");\n        var passedArguments = props.join(\", \");\n        var name = \"Holder$\" + total;\n\n\n        var code = \"return function(tryCatch, errorObj, Promise, async) {    \\n\\\n            'use strict';                                                    \\n\\\n            function [TheName](fn) {                                         \\n\\\n                [TheProperties]                                              \\n\\\n                this.fn = fn;                                                \\n\\\n                this.asyncNeeded = true;                                     \\n\\\n                this.now = 0;                                                \\n\\\n            }                                                                \\n\\\n                                                                             \\n\\\n            [TheName].prototype._callFunction = function(promise) {          \\n\\\n                promise._pushContext();                                      \\n\\\n                var ret = tryCatch(this.fn)([ThePassedArguments]);           \\n\\\n                promise._popContext();                                       \\n\\\n                if (ret === errorObj) {                                      \\n\\\n                    promise._rejectCallback(ret.e, false);                   \\n\\\n                } else {                                                     \\n\\\n                    promise._resolveCallback(ret);                           \\n\\\n                }                                                            \\n\\\n            };                                                               \\n\\\n                                                                             \\n\\\n            [TheName].prototype.checkFulfillment = function(promise) {       \\n\\\n                var now = ++this.now;                                        \\n\\\n                if (now === [TheTotal]) {                                    \\n\\\n                    if (this.asyncNeeded) {                                  \\n\\\n                        async.invoke(this._callFunction, this, promise);     \\n\\\n                    } else {                                                 \\n\\\n                        this._callFunction(promise);                         \\n\\\n                    }                                                        \\n\\\n                                                                             \\n\\\n                }                                                            \\n\\\n            };                                                               \\n\\\n                                                                             \\n\\\n            [TheName].prototype._resultCancelled = function() {              \\n\\\n                [CancellationCode]                                           \\n\\\n            };                                                               \\n\\\n                                                                             \\n\\\n            return [TheName];                                                \\n\\\n        }(tryCatch, errorObj, Promise, async);                               \\n\\\n        \";\n\n        code = code.replace(/\\[TheName\\]/g, name)\n            .replace(/\\[TheTotal\\]/g, total)\n            .replace(/\\[ThePassedArguments\\]/g, passedArguments)\n            .replace(/\\[TheProperties\\]/g, assignment)\n            .replace(/\\[CancellationCode\\]/g, cancellationCode);\n\n        return new Function(\"tryCatch\", \"errorObj\", \"Promise\", \"async\", code)\n                           (tryCatch, errorObj, Promise, async);\n    };\n\n    var holderClasses = [];\n    var thenCallbacks = [];\n    var promiseSetters = [];\n\n    for (var i = 0; i < 8; ++i) {\n        holderClasses.push(generateHolderClass(i + 1));\n        thenCallbacks.push(thenCallback(i + 1));\n        promiseSetters.push(promiseSetter(i + 1));\n    }\n\n    reject = function (reason) {\n        this._reject(reason);\n    };\n}}\n\nPromise.join = function () {\n    var last = arguments.length - 1;\n    var fn;\n    if (last > 0 && typeof arguments[last] === \"function\") {\n        fn = arguments[last];\n        if (!true) {\n            if (last <= 8 && canEvaluate) {\n                var ret = new Promise(INTERNAL);\n                ret._captureStackTrace();\n                var HolderClass = holderClasses[last - 1];\n                var holder = new HolderClass(fn);\n                var callbacks = thenCallbacks;\n\n                for (var i = 0; i < last; ++i) {\n                    var maybePromise = tryConvertToPromise(arguments[i], ret);\n                    if (maybePromise instanceof Promise) {\n                        maybePromise = maybePromise._target();\n                        var bitField = maybePromise._bitField;\n                        ;\n                        if (((bitField & 50397184) === 0)) {\n                            maybePromise._then(callbacks[i], reject,\n                                               undefined, ret, holder);\n                            promiseSetters[i](maybePromise, holder);\n                            holder.asyncNeeded = false;\n                        } else if (((bitField & 33554432) !== 0)) {\n                            callbacks[i].call(ret,\n                                              maybePromise._value(), holder);\n                        } else if (((bitField & 16777216) !== 0)) {\n                            ret._reject(maybePromise._reason());\n                        } else {\n                            ret._cancel();\n                        }\n                    } else {\n                        callbacks[i].call(ret, maybePromise, holder);\n                    }\n                }\n\n                if (!ret._isFateSealed()) {\n                    if (holder.asyncNeeded) {\n                        var context = Promise._getContext();\n                        holder.fn = util.contextBind(context, holder.fn);\n                    }\n                    ret._setAsyncGuaranteed();\n                    ret._setOnCancel(holder);\n                }\n                return ret;\n            }\n        }\n    }\n    var args = [].slice.call(arguments);;\n    if (fn) args.pop();\n    var ret = new PromiseArray(args).promise();\n    return fn !== undefined ? ret.spread(fn) : ret;\n};\n\n};\n\n},{\"./util\":36}],18:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise,\n                          PromiseArray,\n                          apiRejection,\n                          tryConvertToPromise,\n                          INTERNAL,\n                          debug) {\nvar util = _dereq_(\"./util\");\nvar tryCatch = util.tryCatch;\nvar errorObj = util.errorObj;\nvar async = Promise._async;\n\nfunction MappingPromiseArray(promises, fn, limit, _filter) {\n    this.constructor$(promises);\n    this._promise._captureStackTrace();\n    var context = Promise._getContext();\n    this._callback = util.contextBind(context, fn);\n    this._preservedValues = _filter === INTERNAL\n        ? new Array(this.length())\n        : null;\n    this._limit = limit;\n    this._inFlight = 0;\n    this._queue = [];\n    async.invoke(this._asyncInit, this, undefined);\n    if (util.isArray(promises)) {\n        for (var i = 0; i < promises.length; ++i) {\n            var maybePromise = promises[i];\n            if (maybePromise instanceof Promise) {\n                maybePromise.suppressUnhandledRejections();\n            }\n        }\n    }\n}\nutil.inherits(MappingPromiseArray, PromiseArray);\n\nMappingPromiseArray.prototype._asyncInit = function() {\n    this._init$(undefined, -2);\n};\n\nMappingPromiseArray.prototype._init = function () {};\n\nMappingPromiseArray.prototype._promiseFulfilled = function (value, index) {\n    var values = this._values;\n    var length = this.length();\n    var preservedValues = this._preservedValues;\n    var limit = this._limit;\n\n    if (index < 0) {\n        index = (index * -1) - 1;\n        values[index] = value;\n        if (limit >= 1) {\n            this._inFlight--;\n            this._drainQueue();\n            if (this._isResolved()) return true;\n        }\n    } else {\n        if (limit >= 1 && this._inFlight >= limit) {\n            values[index] = value;\n            this._queue.push(index);\n            return false;\n        }\n        if (preservedValues !== null) preservedValues[index] = value;\n\n        var promise = this._promise;\n        var callback = this._callback;\n        var receiver = promise._boundValue();\n        promise._pushContext();\n        var ret = tryCatch(callback).call(receiver, value, index, length);\n        var promiseCreated = promise._popContext();\n        debug.checkForgottenReturns(\n            ret,\n            promiseCreated,\n            preservedValues !== null ? \"Promise.filter\" : \"Promise.map\",\n            promise\n        );\n        if (ret === errorObj) {\n            this._reject(ret.e);\n            return true;\n        }\n\n        var maybePromise = tryConvertToPromise(ret, this._promise);\n        if (maybePromise instanceof Promise) {\n            maybePromise = maybePromise._target();\n            var bitField = maybePromise._bitField;\n            ;\n            if (((bitField & 50397184) === 0)) {\n                if (limit >= 1) this._inFlight++;\n                values[index] = maybePromise;\n                maybePromise._proxy(this, (index + 1) * -1);\n                return false;\n            } else if (((bitField & 33554432) !== 0)) {\n                ret = maybePromise._value();\n            } else if (((bitField & 16777216) !== 0)) {\n                this._reject(maybePromise._reason());\n                return true;\n            } else {\n                this._cancel();\n                return true;\n            }\n        }\n        values[index] = ret;\n    }\n    var totalResolved = ++this._totalResolved;\n    if (totalResolved >= length) {\n        if (preservedValues !== null) {\n            this._filter(values, preservedValues);\n        } else {\n            this._resolve(values);\n        }\n        return true;\n    }\n    return false;\n};\n\nMappingPromiseArray.prototype._drainQueue = function () {\n    var queue = this._queue;\n    var limit = this._limit;\n    var values = this._values;\n    while (queue.length > 0 && this._inFlight < limit) {\n        if (this._isResolved()) return;\n        var index = queue.pop();\n        this._promiseFulfilled(values[index], index);\n    }\n};\n\nMappingPromiseArray.prototype._filter = function (booleans, values) {\n    var len = values.length;\n    var ret = new Array(len);\n    var j = 0;\n    for (var i = 0; i < len; ++i) {\n        if (booleans[i]) ret[j++] = values[i];\n    }\n    ret.length = j;\n    this._resolve(ret);\n};\n\nMappingPromiseArray.prototype.preservedValues = function () {\n    return this._preservedValues;\n};\n\nfunction map(promises, fn, options, _filter) {\n    if (typeof fn !== \"function\") {\n        return apiRejection(\"expecting a function but got \" + util.classString(fn));\n    }\n\n    var limit = 0;\n    if (options !== undefined) {\n        if (typeof options === \"object\" && options !== null) {\n            if (typeof options.concurrency !== \"number\") {\n                return Promise.reject(\n                    new TypeError(\"'concurrency' must be a number but it is \" +\n                                    util.classString(options.concurrency)));\n            }\n            limit = options.concurrency;\n        } else {\n            return Promise.reject(new TypeError(\n                            \"options argument must be an object but it is \" +\n                             util.classString(options)));\n        }\n    }\n    limit = typeof limit === \"number\" &&\n        isFinite(limit) && limit >= 1 ? limit : 0;\n    return new MappingPromiseArray(promises, fn, limit, _filter).promise();\n}\n\nPromise.prototype.map = function (fn, options) {\n    return map(this, fn, options, null);\n};\n\nPromise.map = function (promises, fn, options, _filter) {\n    return map(promises, fn, options, _filter);\n};\n\n\n};\n\n},{\"./util\":36}],19:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports =\nfunction(Promise, INTERNAL, tryConvertToPromise, apiRejection, debug) {\nvar util = _dereq_(\"./util\");\nvar tryCatch = util.tryCatch;\n\nPromise.method = function (fn) {\n    if (typeof fn !== \"function\") {\n        throw new Promise.TypeError(\"expecting a function but got \" + util.classString(fn));\n    }\n    return function () {\n        var ret = new Promise(INTERNAL);\n        ret._captureStackTrace();\n        ret._pushContext();\n        var value = tryCatch(fn).apply(this, arguments);\n        var promiseCreated = ret._popContext();\n        debug.checkForgottenReturns(\n            value, promiseCreated, \"Promise.method\", ret);\n        ret._resolveFromSyncValue(value);\n        return ret;\n    };\n};\n\nPromise.attempt = Promise[\"try\"] = function (fn) {\n    if (typeof fn !== \"function\") {\n        return apiRejection(\"expecting a function but got \" + util.classString(fn));\n    }\n    var ret = new Promise(INTERNAL);\n    ret._captureStackTrace();\n    ret._pushContext();\n    var value;\n    if (arguments.length > 1) {\n        debug.deprecated(\"calling Promise.try with more than 1 argument\");\n        var arg = arguments[1];\n        var ctx = arguments[2];\n        value = util.isArray(arg) ? tryCatch(fn).apply(ctx, arg)\n                                  : tryCatch(fn).call(ctx, arg);\n    } else {\n        value = tryCatch(fn)();\n    }\n    var promiseCreated = ret._popContext();\n    debug.checkForgottenReturns(\n        value, promiseCreated, \"Promise.try\", ret);\n    ret._resolveFromSyncValue(value);\n    return ret;\n};\n\nPromise.prototype._resolveFromSyncValue = function (value) {\n    if (value === util.errorObj) {\n        this._rejectCallback(value.e, false);\n    } else {\n        this._resolveCallback(value, true);\n    }\n};\n};\n\n},{\"./util\":36}],20:[function(_dereq_,module,exports){\n\"use strict\";\nvar util = _dereq_(\"./util\");\nvar maybeWrapAsError = util.maybeWrapAsError;\nvar errors = _dereq_(\"./errors\");\nvar OperationalError = errors.OperationalError;\nvar es5 = _dereq_(\"./es5\");\n\nfunction isUntypedError(obj) {\n    return obj instanceof Error &&\n        es5.getPrototypeOf(obj) === Error.prototype;\n}\n\nvar rErrorKey = /^(?:name|message|stack|cause)$/;\nfunction wrapAsOperationalError(obj) {\n    var ret;\n    if (isUntypedError(obj)) {\n        ret = new OperationalError(obj);\n        ret.name = obj.name;\n        ret.message = obj.message;\n        ret.stack = obj.stack;\n        var keys = es5.keys(obj);\n        for (var i = 0; i < keys.length; ++i) {\n            var key = keys[i];\n            if (!rErrorKey.test(key)) {\n                ret[key] = obj[key];\n            }\n        }\n        return ret;\n    }\n    util.markAsOriginatingFromRejection(obj);\n    return obj;\n}\n\nfunction nodebackForPromise(promise, multiArgs) {\n    return function(err, value) {\n        if (promise === null) return;\n        if (err) {\n            var wrapped = wrapAsOperationalError(maybeWrapAsError(err));\n            promise._attachExtraTrace(wrapped);\n            promise._reject(wrapped);\n        } else if (!multiArgs) {\n            promise._fulfill(value);\n        } else {\n            var args = [].slice.call(arguments, 1);;\n            promise._fulfill(args);\n        }\n        promise = null;\n    };\n}\n\nmodule.exports = nodebackForPromise;\n\n},{\"./errors\":12,\"./es5\":13,\"./util\":36}],21:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise) {\nvar util = _dereq_(\"./util\");\nvar async = Promise._async;\nvar tryCatch = util.tryCatch;\nvar errorObj = util.errorObj;\n\nfunction spreadAdapter(val, nodeback) {\n    var promise = this;\n    if (!util.isArray(val)) return successAdapter.call(promise, val, nodeback);\n    var ret =\n        tryCatch(nodeback).apply(promise._boundValue(), [null].concat(val));\n    if (ret === errorObj) {\n        async.throwLater(ret.e);\n    }\n}\n\nfunction successAdapter(val, nodeback) {\n    var promise = this;\n    var receiver = promise._boundValue();\n    var ret = val === undefined\n        ? tryCatch(nodeback).call(receiver, null)\n        : tryCatch(nodeback).call(receiver, null, val);\n    if (ret === errorObj) {\n        async.throwLater(ret.e);\n    }\n}\nfunction errorAdapter(reason, nodeback) {\n    var promise = this;\n    if (!reason) {\n        var newReason = new Error(reason + \"\");\n        newReason.cause = reason;\n        reason = newReason;\n    }\n    var ret = tryCatch(nodeback).call(promise._boundValue(), reason);\n    if (ret === errorObj) {\n        async.throwLater(ret.e);\n    }\n}\n\nPromise.prototype.asCallback = Promise.prototype.nodeify = function (nodeback,\n                                                                     options) {\n    if (typeof nodeback == \"function\") {\n        var adapter = successAdapter;\n        if (options !== undefined && Object(options).spread) {\n            adapter = spreadAdapter;\n        }\n        this._then(\n            adapter,\n            errorAdapter,\n            undefined,\n            this,\n            nodeback\n        );\n    }\n    return this;\n};\n};\n\n},{\"./util\":36}],22:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function() {\nvar makeSelfResolutionError = function () {\n    return new TypeError(\"circular promise resolution chain\\u000a\\u000a    See http://goo.gl/MqrFmX\\u000a\");\n};\nvar reflectHandler = function() {\n    return new Promise.PromiseInspection(this._target());\n};\nvar apiRejection = function(msg) {\n    return Promise.reject(new TypeError(msg));\n};\nfunction Proxyable() {}\nvar UNDEFINED_BINDING = {};\nvar util = _dereq_(\"./util\");\nutil.setReflectHandler(reflectHandler);\n\nvar getDomain = function() {\n    var domain = process.domain;\n    if (domain === undefined) {\n        return null;\n    }\n    return domain;\n};\nvar getContextDefault = function() {\n    return null;\n};\nvar getContextDomain = function() {\n    return {\n        domain: getDomain(),\n        async: null\n    };\n};\nvar AsyncResource = util.isNode && util.nodeSupportsAsyncResource ?\n    _dereq_(\"async_hooks\").AsyncResource : null;\nvar getContextAsyncHooks = function() {\n    return {\n        domain: getDomain(),\n        async: new AsyncResource(\"Bluebird::Promise\")\n    };\n};\nvar getContext = util.isNode ? getContextDomain : getContextDefault;\nutil.notEnumerableProp(Promise, \"_getContext\", getContext);\nvar enableAsyncHooks = function() {\n    getContext = getContextAsyncHooks;\n    util.notEnumerableProp(Promise, \"_getContext\", getContextAsyncHooks);\n};\nvar disableAsyncHooks = function() {\n    getContext = getContextDomain;\n    util.notEnumerableProp(Promise, \"_getContext\", getContextDomain);\n};\n\nvar es5 = _dereq_(\"./es5\");\nvar Async = _dereq_(\"./async\");\nvar async = new Async();\nes5.defineProperty(Promise, \"_async\", {value: async});\nvar errors = _dereq_(\"./errors\");\nvar TypeError = Promise.TypeError = errors.TypeError;\nPromise.RangeError = errors.RangeError;\nvar CancellationError = Promise.CancellationError = errors.CancellationError;\nPromise.TimeoutError = errors.TimeoutError;\nPromise.OperationalError = errors.OperationalError;\nPromise.RejectionError = errors.OperationalError;\nPromise.AggregateError = errors.AggregateError;\nvar INTERNAL = function(){};\nvar APPLY = {};\nvar NEXT_FILTER = {};\nvar tryConvertToPromise = _dereq_(\"./thenables\")(Promise, INTERNAL);\nvar PromiseArray =\n    _dereq_(\"./promise_array\")(Promise, INTERNAL,\n                               tryConvertToPromise, apiRejection, Proxyable);\nvar Context = _dereq_(\"./context\")(Promise);\n /*jshint unused:false*/\nvar createContext = Context.create;\n\nvar debug = _dereq_(\"./debuggability\")(Promise, Context,\n    enableAsyncHooks, disableAsyncHooks);\nvar CapturedTrace = debug.CapturedTrace;\nvar PassThroughHandlerContext =\n    _dereq_(\"./finally\")(Promise, tryConvertToPromise, NEXT_FILTER);\nvar catchFilter = _dereq_(\"./catch_filter\")(NEXT_FILTER);\nvar nodebackForPromise = _dereq_(\"./nodeback\");\nvar errorObj = util.errorObj;\nvar tryCatch = util.tryCatch;\nfunction check(self, executor) {\n    if (self == null || self.constructor !== Promise) {\n        throw new TypeError(\"the promise constructor cannot be invoked directly\\u000a\\u000a    See http://goo.gl/MqrFmX\\u000a\");\n    }\n    if (typeof executor !== \"function\") {\n        throw new TypeError(\"expecting a function but got \" + util.classString(executor));\n    }\n\n}\n\nfunction Promise(executor) {\n    if (executor !== INTERNAL) {\n        check(this, executor);\n    }\n    this._bitField = 0;\n    this._fulfillmentHandler0 = undefined;\n    this._rejectionHandler0 = undefined;\n    this._promise0 = undefined;\n    this._receiver0 = undefined;\n    this._resolveFromExecutor(executor);\n    this._promiseCreated();\n    this._fireEvent(\"promiseCreated\", this);\n}\n\nPromise.prototype.toString = function () {\n    return \"[object Promise]\";\n};\n\nPromise.prototype.caught = Promise.prototype[\"catch\"] = function (fn) {\n    var len = arguments.length;\n    if (len > 1) {\n        var catchInstances = new Array(len - 1),\n            j = 0, i;\n        for (i = 0; i < len - 1; ++i) {\n            var item = arguments[i];\n            if (util.isObject(item)) {\n                catchInstances[j++] = item;\n            } else {\n                return apiRejection(\"Catch statement predicate: \" +\n                    \"expecting an object but got \" + util.classString(item));\n            }\n        }\n        catchInstances.length = j;\n        fn = arguments[i];\n\n        if (typeof fn !== \"function\") {\n            throw new TypeError(\"The last argument to .catch() \" +\n                \"must be a function, got \" + util.toString(fn));\n        }\n        return this.then(undefined, catchFilter(catchInstances, fn, this));\n    }\n    return this.then(undefined, fn);\n};\n\nPromise.prototype.reflect = function () {\n    return this._then(reflectHandler,\n        reflectHandler, undefined, this, undefined);\n};\n\nPromise.prototype.then = function (didFulfill, didReject) {\n    if (debug.warnings() && arguments.length > 0 &&\n        typeof didFulfill !== \"function\" &&\n        typeof didReject !== \"function\") {\n        var msg = \".then() only accepts functions but was passed: \" +\n                util.classString(didFulfill);\n        if (arguments.length > 1) {\n            msg += \", \" + util.classString(didReject);\n        }\n        this._warn(msg);\n    }\n    return this._then(didFulfill, didReject, undefined, undefined, undefined);\n};\n\nPromise.prototype.done = function (didFulfill, didReject) {\n    var promise =\n        this._then(didFulfill, didReject, undefined, undefined, undefined);\n    promise._setIsFinal();\n};\n\nPromise.prototype.spread = function (fn) {\n    if (typeof fn !== \"function\") {\n        return apiRejection(\"expecting a function but got \" + util.classString(fn));\n    }\n    return this.all()._then(fn, undefined, undefined, APPLY, undefined);\n};\n\nPromise.prototype.toJSON = function () {\n    var ret = {\n        isFulfilled: false,\n        isRejected: false,\n        fulfillmentValue: undefined,\n        rejectionReason: undefined\n    };\n    if (this.isFulfilled()) {\n        ret.fulfillmentValue = this.value();\n        ret.isFulfilled = true;\n    } else if (this.isRejected()) {\n        ret.rejectionReason = this.reason();\n        ret.isRejected = true;\n    }\n    return ret;\n};\n\nPromise.prototype.all = function () {\n    if (arguments.length > 0) {\n        this._warn(\".all() was passed arguments but it does not take any\");\n    }\n    return new PromiseArray(this).promise();\n};\n\nPromise.prototype.error = function (fn) {\n    return this.caught(util.originatesFromRejection, fn);\n};\n\nPromise.getNewLibraryCopy = module.exports;\n\nPromise.is = function (val) {\n    return val instanceof Promise;\n};\n\nPromise.fromNode = Promise.fromCallback = function(fn) {\n    var ret = new Promise(INTERNAL);\n    ret._captureStackTrace();\n    var multiArgs = arguments.length > 1 ? !!Object(arguments[1]).multiArgs\n                                         : false;\n    var result = tryCatch(fn)(nodebackForPromise(ret, multiArgs));\n    if (result === errorObj) {\n        ret._rejectCallback(result.e, true);\n    }\n    if (!ret._isFateSealed()) ret._setAsyncGuaranteed();\n    return ret;\n};\n\nPromise.all = function (promises) {\n    return new PromiseArray(promises).promise();\n};\n\nPromise.cast = function (obj) {\n    var ret = tryConvertToPromise(obj);\n    if (!(ret instanceof Promise)) {\n        ret = new Promise(INTERNAL);\n        ret._captureStackTrace();\n        ret._setFulfilled();\n        ret._rejectionHandler0 = obj;\n    }\n    return ret;\n};\n\nPromise.resolve = Promise.fulfilled = Promise.cast;\n\nPromise.reject = Promise.rejected = function (reason) {\n    var ret = new Promise(INTERNAL);\n    ret._captureStackTrace();\n    ret._rejectCallback(reason, true);\n    return ret;\n};\n\nPromise.setScheduler = function(fn) {\n    if (typeof fn !== \"function\") {\n        throw new TypeError(\"expecting a function but got \" + util.classString(fn));\n    }\n    return async.setScheduler(fn);\n};\n\nPromise.prototype._then = function (\n    didFulfill,\n    didReject,\n    _,    receiver,\n    internalData\n) {\n    var haveInternalData = internalData !== undefined;\n    var promise = haveInternalData ? internalData : new Promise(INTERNAL);\n    var target = this._target();\n    var bitField = target._bitField;\n\n    if (!haveInternalData) {\n        promise._propagateFrom(this, 3);\n        promise._captureStackTrace();\n        if (receiver === undefined &&\n            ((this._bitField & 2097152) !== 0)) {\n            if (!((bitField & 50397184) === 0)) {\n                receiver = this._boundValue();\n            } else {\n                receiver = target === this ? undefined : this._boundTo;\n            }\n        }\n        this._fireEvent(\"promiseChained\", this, promise);\n    }\n\n    var context = getContext();\n    if (!((bitField & 50397184) === 0)) {\n        var handler, value, settler = target._settlePromiseCtx;\n        if (((bitField & 33554432) !== 0)) {\n            value = target._rejectionHandler0;\n            handler = didFulfill;\n        } else if (((bitField & 16777216) !== 0)) {\n            value = target._fulfillmentHandler0;\n            handler = didReject;\n            target._unsetRejectionIsUnhandled();\n        } else {\n            settler = target._settlePromiseLateCancellationObserver;\n            value = new CancellationError(\"late cancellation observer\");\n            target._attachExtraTrace(value);\n            handler = didReject;\n        }\n\n        async.invoke(settler, target, {\n            handler: util.contextBind(context, handler),\n            promise: promise,\n            receiver: receiver,\n            value: value\n        });\n    } else {\n        target._addCallbacks(didFulfill, didReject, promise,\n                receiver, context);\n    }\n\n    return promise;\n};\n\nPromise.prototype._length = function () {\n    return this._bitField & 65535;\n};\n\nPromise.prototype._isFateSealed = function () {\n    return (this._bitField & 117506048) !== 0;\n};\n\nPromise.prototype._isFollowing = function () {\n    return (this._bitField & 67108864) === 67108864;\n};\n\nPromise.prototype._setLength = function (len) {\n    this._bitField = (this._bitField & -65536) |\n        (len & 65535);\n};\n\nPromise.prototype._setFulfilled = function () {\n    this._bitField = this._bitField | 33554432;\n    this._fireEvent(\"promiseFulfilled\", this);\n};\n\nPromise.prototype._setRejected = function () {\n    this._bitField = this._bitField | 16777216;\n    this._fireEvent(\"promiseRejected\", this);\n};\n\nPromise.prototype._setFollowing = function () {\n    this._bitField = this._bitField | 67108864;\n    this._fireEvent(\"promiseResolved\", this);\n};\n\nPromise.prototype._setIsFinal = function () {\n    this._bitField = this._bitField | 4194304;\n};\n\nPromise.prototype._isFinal = function () {\n    return (this._bitField & 4194304) > 0;\n};\n\nPromise.prototype._unsetCancelled = function() {\n    this._bitField = this._bitField & (~65536);\n};\n\nPromise.prototype._setCancelled = function() {\n    this._bitField = this._bitField | 65536;\n    this._fireEvent(\"promiseCancelled\", this);\n};\n\nPromise.prototype._setWillBeCancelled = function() {\n    this._bitField = this._bitField | 8388608;\n};\n\nPromise.prototype._setAsyncGuaranteed = function() {\n    if (async.hasCustomScheduler()) return;\n    var bitField = this._bitField;\n    this._bitField = bitField |\n        (((bitField & 536870912) >> 2) ^\n        134217728);\n};\n\nPromise.prototype._setNoAsyncGuarantee = function() {\n    this._bitField = (this._bitField | 536870912) &\n        (~134217728);\n};\n\nPromise.prototype._receiverAt = function (index) {\n    var ret = index === 0 ? this._receiver0 : this[\n            index * 4 - 4 + 3];\n    if (ret === UNDEFINED_BINDING) {\n        return undefined;\n    } else if (ret === undefined && this._isBound()) {\n        return this._boundValue();\n    }\n    return ret;\n};\n\nPromise.prototype._promiseAt = function (index) {\n    return this[\n            index * 4 - 4 + 2];\n};\n\nPromise.prototype._fulfillmentHandlerAt = function (index) {\n    return this[\n            index * 4 - 4 + 0];\n};\n\nPromise.prototype._rejectionHandlerAt = function (index) {\n    return this[\n            index * 4 - 4 + 1];\n};\n\nPromise.prototype._boundValue = function() {};\n\nPromise.prototype._migrateCallback0 = function (follower) {\n    var bitField = follower._bitField;\n    var fulfill = follower._fulfillmentHandler0;\n    var reject = follower._rejectionHandler0;\n    var promise = follower._promise0;\n    var receiver = follower._receiverAt(0);\n    if (receiver === undefined) receiver = UNDEFINED_BINDING;\n    this._addCallbacks(fulfill, reject, promise, receiver, null);\n};\n\nPromise.prototype._migrateCallbackAt = function (follower, index) {\n    var fulfill = follower._fulfillmentHandlerAt(index);\n    var reject = follower._rejectionHandlerAt(index);\n    var promise = follower._promiseAt(index);\n    var receiver = follower._receiverAt(index);\n    if (receiver === undefined) receiver = UNDEFINED_BINDING;\n    this._addCallbacks(fulfill, reject, promise, receiver, null);\n};\n\nPromise.prototype._addCallbacks = function (\n    fulfill,\n    reject,\n    promise,\n    receiver,\n    context\n) {\n    var index = this._length();\n\n    if (index >= 65535 - 4) {\n        index = 0;\n        this._setLength(0);\n    }\n\n    if (index === 0) {\n        this._promise0 = promise;\n        this._receiver0 = receiver;\n        if (typeof fulfill === \"function\") {\n            this._fulfillmentHandler0 = util.contextBind(context, fulfill);\n        }\n        if (typeof reject === \"function\") {\n            this._rejectionHandler0 = util.contextBind(context, reject);\n        }\n    } else {\n        var base = index * 4 - 4;\n        this[base + 2] = promise;\n        this[base + 3] = receiver;\n        if (typeof fulfill === \"function\") {\n            this[base + 0] =\n                util.contextBind(context, fulfill);\n        }\n        if (typeof reject === \"function\") {\n            this[base + 1] =\n                util.contextBind(context, reject);\n        }\n    }\n    this._setLength(index + 1);\n    return index;\n};\n\nPromise.prototype._proxy = function (proxyable, arg) {\n    this._addCallbacks(undefined, undefined, arg, proxyable, null);\n};\n\nPromise.prototype._resolveCallback = function(value, shouldBind) {\n    if (((this._bitField & 117506048) !== 0)) return;\n    if (value === this)\n        return this._rejectCallback(makeSelfResolutionError(), false);\n    var maybePromise = tryConvertToPromise(value, this);\n    if (!(maybePromise instanceof Promise)) return this._fulfill(value);\n\n    if (shouldBind) this._propagateFrom(maybePromise, 2);\n\n\n    var promise = maybePromise._target();\n\n    if (promise === this) {\n        this._reject(makeSelfResolutionError());\n        return;\n    }\n\n    var bitField = promise._bitField;\n    if (((bitField & 50397184) === 0)) {\n        var len = this._length();\n        if (len > 0) promise._migrateCallback0(this);\n        for (var i = 1; i < len; ++i) {\n            promise._migrateCallbackAt(this, i);\n        }\n        this._setFollowing();\n        this._setLength(0);\n        this._setFollowee(maybePromise);\n    } else if (((bitField & 33554432) !== 0)) {\n        this._fulfill(promise._value());\n    } else if (((bitField & 16777216) !== 0)) {\n        this._reject(promise._reason());\n    } else {\n        var reason = new CancellationError(\"late cancellation observer\");\n        promise._attachExtraTrace(reason);\n        this._reject(reason);\n    }\n};\n\nPromise.prototype._rejectCallback =\nfunction(reason, synchronous, ignoreNonErrorWarnings) {\n    var trace = util.ensureErrorObject(reason);\n    var hasStack = trace === reason;\n    if (!hasStack && !ignoreNonErrorWarnings && debug.warnings()) {\n        var message = \"a promise was rejected with a non-error: \" +\n            util.classString(reason);\n        this._warn(message, true);\n    }\n    this._attachExtraTrace(trace, synchronous ? hasStack : false);\n    this._reject(reason);\n};\n\nPromise.prototype._resolveFromExecutor = function (executor) {\n    if (executor === INTERNAL) return;\n    var promise = this;\n    this._captureStackTrace();\n    this._pushContext();\n    var synchronous = true;\n    var r = this._execute(executor, function(value) {\n        promise._resolveCallback(value);\n    }, function (reason) {\n        promise._rejectCallback(reason, synchronous);\n    });\n    synchronous = false;\n    this._popContext();\n\n    if (r !== undefined) {\n        promise._rejectCallback(r, true);\n    }\n};\n\nPromise.prototype._settlePromiseFromHandler = function (\n    handler, receiver, value, promise\n) {\n    var bitField = promise._bitField;\n    if (((bitField & 65536) !== 0)) return;\n    promise._pushContext();\n    var x;\n    if (receiver === APPLY) {\n        if (!value || typeof value.length !== \"number\") {\n            x = errorObj;\n            x.e = new TypeError(\"cannot .spread() a non-array: \" +\n                                    util.classString(value));\n        } else {\n            x = tryCatch(handler).apply(this._boundValue(), value);\n        }\n    } else {\n        x = tryCatch(handler).call(receiver, value);\n    }\n    var promiseCreated = promise._popContext();\n    bitField = promise._bitField;\n    if (((bitField & 65536) !== 0)) return;\n\n    if (x === NEXT_FILTER) {\n        promise._reject(value);\n    } else if (x === errorObj) {\n        promise._rejectCallback(x.e, false);\n    } else {\n        debug.checkForgottenReturns(x, promiseCreated, \"\",  promise, this);\n        promise._resolveCallback(x);\n    }\n};\n\nPromise.prototype._target = function() {\n    var ret = this;\n    while (ret._isFollowing()) ret = ret._followee();\n    return ret;\n};\n\nPromise.prototype._followee = function() {\n    return this._rejectionHandler0;\n};\n\nPromise.prototype._setFollowee = function(promise) {\n    this._rejectionHandler0 = promise;\n};\n\nPromise.prototype._settlePromise = function(promise, handler, receiver, value) {\n    var isPromise = promise instanceof Promise;\n    var bitField = this._bitField;\n    var asyncGuaranteed = ((bitField & 134217728) !== 0);\n    if (((bitField & 65536) !== 0)) {\n        if (isPromise) promise._invokeInternalOnCancel();\n\n        if (receiver instanceof PassThroughHandlerContext &&\n            receiver.isFinallyHandler()) {\n            receiver.cancelPromise = promise;\n            if (tryCatch(handler).call(receiver, value) === errorObj) {\n                promise._reject(errorObj.e);\n            }\n        } else if (handler === reflectHandler) {\n            promise._fulfill(reflectHandler.call(receiver));\n        } else if (receiver instanceof Proxyable) {\n            receiver._promiseCancelled(promise);\n        } else if (isPromise || promise instanceof PromiseArray) {\n            promise._cancel();\n        } else {\n            receiver.cancel();\n        }\n    } else if (typeof handler === \"function\") {\n        if (!isPromise) {\n            handler.call(receiver, value, promise);\n        } else {\n            if (asyncGuaranteed) promise._setAsyncGuaranteed();\n            this._settlePromiseFromHandler(handler, receiver, value, promise);\n        }\n    } else if (receiver instanceof Proxyable) {\n        if (!receiver._isResolved()) {\n            if (((bitField & 33554432) !== 0)) {\n                receiver._promiseFulfilled(value, promise);\n            } else {\n                receiver._promiseRejected(value, promise);\n            }\n        }\n    } else if (isPromise) {\n        if (asyncGuaranteed) promise._setAsyncGuaranteed();\n        if (((bitField & 33554432) !== 0)) {\n            promise._fulfill(value);\n        } else {\n            promise._reject(value);\n        }\n    }\n};\n\nPromise.prototype._settlePromiseLateCancellationObserver = function(ctx) {\n    var handler = ctx.handler;\n    var promise = ctx.promise;\n    var receiver = ctx.receiver;\n    var value = ctx.value;\n    if (typeof handler === \"function\") {\n        if (!(promise instanceof Promise)) {\n            handler.call(receiver, value, promise);\n        } else {\n            this._settlePromiseFromHandler(handler, receiver, value, promise);\n        }\n    } else if (promise instanceof Promise) {\n        promise._reject(value);\n    }\n};\n\nPromise.prototype._settlePromiseCtx = function(ctx) {\n    this._settlePromise(ctx.promise, ctx.handler, ctx.receiver, ctx.value);\n};\n\nPromise.prototype._settlePromise0 = function(handler, value, bitField) {\n    var promise = this._promise0;\n    var receiver = this._receiverAt(0);\n    this._promise0 = undefined;\n    this._receiver0 = undefined;\n    this._settlePromise(promise, handler, receiver, value);\n};\n\nPromise.prototype._clearCallbackDataAtIndex = function(index) {\n    var base = index * 4 - 4;\n    this[base + 2] =\n    this[base + 3] =\n    this[base + 0] =\n    this[base + 1] = undefined;\n};\n\nPromise.prototype._fulfill = function (value) {\n    var bitField = this._bitField;\n    if (((bitField & 117506048) >>> 16)) return;\n    if (value === this) {\n        var err = makeSelfResolutionError();\n        this._attachExtraTrace(err);\n        return this._reject(err);\n    }\n    this._setFulfilled();\n    this._rejectionHandler0 = value;\n\n    if ((bitField & 65535) > 0) {\n        if (((bitField & 134217728) !== 0)) {\n            this._settlePromises();\n        } else {\n            async.settlePromises(this);\n        }\n        this._dereferenceTrace();\n    }\n};\n\nPromise.prototype._reject = function (reason) {\n    var bitField = this._bitField;\n    if (((bitField & 117506048) >>> 16)) return;\n    this._setRejected();\n    this._fulfillmentHandler0 = reason;\n\n    if (this._isFinal()) {\n        return async.fatalError(reason, util.isNode);\n    }\n\n    if ((bitField & 65535) > 0) {\n        async.settlePromises(this);\n    } else {\n        this._ensurePossibleRejectionHandled();\n    }\n};\n\nPromise.prototype._fulfillPromises = function (len, value) {\n    for (var i = 1; i < len; i++) {\n        var handler = this._fulfillmentHandlerAt(i);\n        var promise = this._promiseAt(i);\n        var receiver = this._receiverAt(i);\n        this._clearCallbackDataAtIndex(i);\n        this._settlePromise(promise, handler, receiver, value);\n    }\n};\n\nPromise.prototype._rejectPromises = function (len, reason) {\n    for (var i = 1; i < len; i++) {\n        var handler = this._rejectionHandlerAt(i);\n        var promise = this._promiseAt(i);\n        var receiver = this._receiverAt(i);\n        this._clearCallbackDataAtIndex(i);\n        this._settlePromise(promise, handler, receiver, reason);\n    }\n};\n\nPromise.prototype._settlePromises = function () {\n    var bitField = this._bitField;\n    var len = (bitField & 65535);\n\n    if (len > 0) {\n        if (((bitField & 16842752) !== 0)) {\n            var reason = this._fulfillmentHandler0;\n            this._settlePromise0(this._rejectionHandler0, reason, bitField);\n            this._rejectPromises(len, reason);\n        } else {\n            var value = this._rejectionHandler0;\n            this._settlePromise0(this._fulfillmentHandler0, value, bitField);\n            this._fulfillPromises(len, value);\n        }\n        this._setLength(0);\n    }\n    this._clearCancellationData();\n};\n\nPromise.prototype._settledValue = function() {\n    var bitField = this._bitField;\n    if (((bitField & 33554432) !== 0)) {\n        return this._rejectionHandler0;\n    } else if (((bitField & 16777216) !== 0)) {\n        return this._fulfillmentHandler0;\n    }\n};\n\nif (typeof Symbol !== \"undefined\" && Symbol.toStringTag) {\n    es5.defineProperty(Promise.prototype, Symbol.toStringTag, {\n        get: function () {\n            return \"Object\";\n        }\n    });\n}\n\nfunction deferResolve(v) {this.promise._resolveCallback(v);}\nfunction deferReject(v) {this.promise._rejectCallback(v, false);}\n\nPromise.defer = Promise.pending = function() {\n    debug.deprecated(\"Promise.defer\", \"new Promise\");\n    var promise = new Promise(INTERNAL);\n    return {\n        promise: promise,\n        resolve: deferResolve,\n        reject: deferReject\n    };\n};\n\nutil.notEnumerableProp(Promise,\n                       \"_makeSelfResolutionError\",\n                       makeSelfResolutionError);\n\n_dereq_(\"./method\")(Promise, INTERNAL, tryConvertToPromise, apiRejection,\n    debug);\n_dereq_(\"./bind\")(Promise, INTERNAL, tryConvertToPromise, debug);\n_dereq_(\"./cancel\")(Promise, PromiseArray, apiRejection, debug);\n_dereq_(\"./direct_resolve\")(Promise);\n_dereq_(\"./synchronous_inspection\")(Promise);\n_dereq_(\"./join\")(\n    Promise, PromiseArray, tryConvertToPromise, INTERNAL, async);\nPromise.Promise = Promise;\nPromise.version = \"3.7.2\";\n_dereq_('./call_get.js')(Promise);\n_dereq_('./generators.js')(Promise, apiRejection, INTERNAL, tryConvertToPromise, Proxyable, debug);\n_dereq_('./map.js')(Promise, PromiseArray, apiRejection, tryConvertToPromise, INTERNAL, debug);\n_dereq_('./nodeify.js')(Promise);\n_dereq_('./promisify.js')(Promise, INTERNAL);\n_dereq_('./props.js')(Promise, PromiseArray, tryConvertToPromise, apiRejection);\n_dereq_('./race.js')(Promise, INTERNAL, tryConvertToPromise, apiRejection);\n_dereq_('./reduce.js')(Promise, PromiseArray, apiRejection, tryConvertToPromise, INTERNAL, debug);\n_dereq_('./settle.js')(Promise, PromiseArray, debug);\n_dereq_('./some.js')(Promise, PromiseArray, apiRejection);\n_dereq_('./timers.js')(Promise, INTERNAL, debug);\n_dereq_('./using.js')(Promise, apiRejection, tryConvertToPromise, createContext, INTERNAL, debug);\n_dereq_('./any.js')(Promise);\n_dereq_('./each.js')(Promise, INTERNAL);\n_dereq_('./filter.js')(Promise, INTERNAL);\n                                                         \n    util.toFastProperties(Promise);                                          \n    util.toFastProperties(Promise.prototype);                                \n    function fillTypes(value) {                                              \n        var p = new Promise(INTERNAL);                                       \n        p._fulfillmentHandler0 = value;                                      \n        p._rejectionHandler0 = value;                                        \n        p._promise0 = value;                                                 \n        p._receiver0 = value;                                                \n    }                                                                        \n    // Complete slack tracking, opt out of field-type tracking and           \n    // stabilize map                                                         \n    fillTypes({a: 1});                                                       \n    fillTypes({b: 2});                                                       \n    fillTypes({c: 3});                                                       \n    fillTypes(1);                                                            \n    fillTypes(function(){});                                                 \n    fillTypes(undefined);                                                    \n    fillTypes(false);                                                        \n    fillTypes(new Promise(INTERNAL));                                        \n    debug.setBounds(Async.firstLineError, util.lastLineError);               \n    return Promise;                                                          \n\n};\n\n},{\"./any.js\":1,\"./async\":2,\"./bind\":3,\"./call_get.js\":5,\"./cancel\":6,\"./catch_filter\":7,\"./context\":8,\"./debuggability\":9,\"./direct_resolve\":10,\"./each.js\":11,\"./errors\":12,\"./es5\":13,\"./filter.js\":14,\"./finally\":15,\"./generators.js\":16,\"./join\":17,\"./map.js\":18,\"./method\":19,\"./nodeback\":20,\"./nodeify.js\":21,\"./promise_array\":23,\"./promisify.js\":24,\"./props.js\":25,\"./race.js\":27,\"./reduce.js\":28,\"./settle.js\":30,\"./some.js\":31,\"./synchronous_inspection\":32,\"./thenables\":33,\"./timers.js\":34,\"./using.js\":35,\"./util\":36,\"async_hooks\":undefined}],23:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise, INTERNAL, tryConvertToPromise,\n    apiRejection, Proxyable) {\nvar util = _dereq_(\"./util\");\nvar isArray = util.isArray;\n\nfunction toResolutionValue(val) {\n    switch(val) {\n    case -2: return [];\n    case -3: return {};\n    case -6: return new Map();\n    }\n}\n\nfunction PromiseArray(values) {\n    var promise = this._promise = new Promise(INTERNAL);\n    if (values instanceof Promise) {\n        promise._propagateFrom(values, 3);\n        values.suppressUnhandledRejections();\n    }\n    promise._setOnCancel(this);\n    this._values = values;\n    this._length = 0;\n    this._totalResolved = 0;\n    this._init(undefined, -2);\n}\nutil.inherits(PromiseArray, Proxyable);\n\nPromiseArray.prototype.length = function () {\n    return this._length;\n};\n\nPromiseArray.prototype.promise = function () {\n    return this._promise;\n};\n\nPromiseArray.prototype._init = function init(_, resolveValueIfEmpty) {\n    var values = tryConvertToPromise(this._values, this._promise);\n    if (values instanceof Promise) {\n        values = values._target();\n        var bitField = values._bitField;\n        ;\n        this._values = values;\n\n        if (((bitField & 50397184) === 0)) {\n            this._promise._setAsyncGuaranteed();\n            return values._then(\n                init,\n                this._reject,\n                undefined,\n                this,\n                resolveValueIfEmpty\n           );\n        } else if (((bitField & 33554432) !== 0)) {\n            values = values._value();\n        } else if (((bitField & 16777216) !== 0)) {\n            return this._reject(values._reason());\n        } else {\n            return this._cancel();\n        }\n    }\n    values = util.asArray(values);\n    if (values === null) {\n        var err = apiRejection(\n            \"expecting an array or an iterable object but got \" + util.classString(values)).reason();\n        this._promise._rejectCallback(err, false);\n        return;\n    }\n\n    if (values.length === 0) {\n        if (resolveValueIfEmpty === -5) {\n            this._resolveEmptyArray();\n        }\n        else {\n            this._resolve(toResolutionValue(resolveValueIfEmpty));\n        }\n        return;\n    }\n    this._iterate(values);\n};\n\nPromiseArray.prototype._iterate = function(values) {\n    var len = this.getActualLength(values.length);\n    this._length = len;\n    this._values = this.shouldCopyValues() ? new Array(len) : this._values;\n    var result = this._promise;\n    var isResolved = false;\n    var bitField = null;\n    for (var i = 0; i < len; ++i) {\n        var maybePromise = tryConvertToPromise(values[i], result);\n\n        if (maybePromise instanceof Promise) {\n            maybePromise = maybePromise._target();\n            bitField = maybePromise._bitField;\n        } else {\n            bitField = null;\n        }\n\n        if (isResolved) {\n            if (bitField !== null) {\n                maybePromise.suppressUnhandledRejections();\n            }\n        } else if (bitField !== null) {\n            if (((bitField & 50397184) === 0)) {\n                maybePromise._proxy(this, i);\n                this._values[i] = maybePromise;\n            } else if (((bitField & 33554432) !== 0)) {\n                isResolved = this._promiseFulfilled(maybePromise._value(), i);\n            } else if (((bitField & 16777216) !== 0)) {\n                isResolved = this._promiseRejected(maybePromise._reason(), i);\n            } else {\n                isResolved = this._promiseCancelled(i);\n            }\n        } else {\n            isResolved = this._promiseFulfilled(maybePromise, i);\n        }\n    }\n    if (!isResolved) result._setAsyncGuaranteed();\n};\n\nPromiseArray.prototype._isResolved = function () {\n    return this._values === null;\n};\n\nPromiseArray.prototype._resolve = function (value) {\n    this._values = null;\n    this._promise._fulfill(value);\n};\n\nPromiseArray.prototype._cancel = function() {\n    if (this._isResolved() || !this._promise._isCancellable()) return;\n    this._values = null;\n    this._promise._cancel();\n};\n\nPromiseArray.prototype._reject = function (reason) {\n    this._values = null;\n    this._promise._rejectCallback(reason, false);\n};\n\nPromiseArray.prototype._promiseFulfilled = function (value, index) {\n    this._values[index] = value;\n    var totalResolved = ++this._totalResolved;\n    if (totalResolved >= this._length) {\n        this._resolve(this._values);\n        return true;\n    }\n    return false;\n};\n\nPromiseArray.prototype._promiseCancelled = function() {\n    this._cancel();\n    return true;\n};\n\nPromiseArray.prototype._promiseRejected = function (reason) {\n    this._totalResolved++;\n    this._reject(reason);\n    return true;\n};\n\nPromiseArray.prototype._resultCancelled = function() {\n    if (this._isResolved()) return;\n    var values = this._values;\n    this._cancel();\n    if (values instanceof Promise) {\n        values.cancel();\n    } else {\n        for (var i = 0; i < values.length; ++i) {\n            if (values[i] instanceof Promise) {\n                values[i].cancel();\n            }\n        }\n    }\n};\n\nPromiseArray.prototype.shouldCopyValues = function () {\n    return true;\n};\n\nPromiseArray.prototype.getActualLength = function (len) {\n    return len;\n};\n\nreturn PromiseArray;\n};\n\n},{\"./util\":36}],24:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise, INTERNAL) {\nvar THIS = {};\nvar util = _dereq_(\"./util\");\nvar nodebackForPromise = _dereq_(\"./nodeback\");\nvar withAppended = util.withAppended;\nvar maybeWrapAsError = util.maybeWrapAsError;\nvar canEvaluate = util.canEvaluate;\nvar TypeError = _dereq_(\"./errors\").TypeError;\nvar defaultSuffix = \"Async\";\nvar defaultPromisified = {__isPromisified__: true};\nvar noCopyProps = [\n    \"arity\",    \"length\",\n    \"name\",\n    \"arguments\",\n    \"caller\",\n    \"callee\",\n    \"prototype\",\n    \"__isPromisified__\"\n];\nvar noCopyPropsPattern = new RegExp(\"^(?:\" + noCopyProps.join(\"|\") + \")$\");\n\nvar defaultFilter = function(name) {\n    return util.isIdentifier(name) &&\n        name.charAt(0) !== \"_\" &&\n        name !== \"constructor\";\n};\n\nfunction propsFilter(key) {\n    return !noCopyPropsPattern.test(key);\n}\n\nfunction isPromisified(fn) {\n    try {\n        return fn.__isPromisified__ === true;\n    }\n    catch (e) {\n        return false;\n    }\n}\n\nfunction hasPromisified(obj, key, suffix) {\n    var val = util.getDataPropertyOrDefault(obj, key + suffix,\n                                            defaultPromisified);\n    return val ? isPromisified(val) : false;\n}\nfunction checkValid(ret, suffix, suffixRegexp) {\n    for (var i = 0; i < ret.length; i += 2) {\n        var key = ret[i];\n        if (suffixRegexp.test(key)) {\n            var keyWithoutAsyncSuffix = key.replace(suffixRegexp, \"\");\n            for (var j = 0; j < ret.length; j += 2) {\n                if (ret[j] === keyWithoutAsyncSuffix) {\n                    throw new TypeError(\"Cannot promisify an API that has normal methods with '%s'-suffix\\u000a\\u000a    See http://goo.gl/MqrFmX\\u000a\"\n                        .replace(\"%s\", suffix));\n                }\n            }\n        }\n    }\n}\n\nfunction promisifiableMethods(obj, suffix, suffixRegexp, filter) {\n    var keys = util.inheritedDataKeys(obj);\n    var ret = [];\n    for (var i = 0; i < keys.length; ++i) {\n        var key = keys[i];\n        var value = obj[key];\n        var passesDefaultFilter = filter === defaultFilter\n            ? true : defaultFilter(key, value, obj);\n        if (typeof value === \"function\" &&\n            !isPromisified(value) &&\n            !hasPromisified(obj, key, suffix) &&\n            filter(key, value, obj, passesDefaultFilter)) {\n            ret.push(key, value);\n        }\n    }\n    checkValid(ret, suffix, suffixRegexp);\n    return ret;\n}\n\nvar escapeIdentRegex = function(str) {\n    return str.replace(/([$])/, \"\\\\$\");\n};\n\nvar makeNodePromisifiedEval;\nif (!true) {\nvar switchCaseArgumentOrder = function(likelyArgumentCount) {\n    var ret = [likelyArgumentCount];\n    var min = Math.max(0, likelyArgumentCount - 1 - 3);\n    for(var i = likelyArgumentCount - 1; i >= min; --i) {\n        ret.push(i);\n    }\n    for(var i = likelyArgumentCount + 1; i <= 3; ++i) {\n        ret.push(i);\n    }\n    return ret;\n};\n\nvar argumentSequence = function(argumentCount) {\n    return util.filledRange(argumentCount, \"_arg\", \"\");\n};\n\nvar parameterDeclaration = function(parameterCount) {\n    return util.filledRange(\n        Math.max(parameterCount, 3), \"_arg\", \"\");\n};\n\nvar parameterCount = function(fn) {\n    if (typeof fn.length === \"number\") {\n        return Math.max(Math.min(fn.length, 1023 + 1), 0);\n    }\n    return 0;\n};\n\nmakeNodePromisifiedEval =\nfunction(callback, receiver, originalName, fn, _, multiArgs) {\n    var newParameterCount = Math.max(0, parameterCount(fn) - 1);\n    var argumentOrder = switchCaseArgumentOrder(newParameterCount);\n    var shouldProxyThis = typeof callback === \"string\" || receiver === THIS;\n\n    function generateCallForArgumentCount(count) {\n        var args = argumentSequence(count).join(\", \");\n        var comma = count > 0 ? \", \" : \"\";\n        var ret;\n        if (shouldProxyThis) {\n            ret = \"ret = callback.call(this, {{args}}, nodeback); break;\\n\";\n        } else {\n            ret = receiver === undefined\n                ? \"ret = callback({{args}}, nodeback); break;\\n\"\n                : \"ret = callback.call(receiver, {{args}}, nodeback); break;\\n\";\n        }\n        return ret.replace(\"{{args}}\", args).replace(\", \", comma);\n    }\n\n    function generateArgumentSwitchCase() {\n        var ret = \"\";\n        for (var i = 0; i < argumentOrder.length; ++i) {\n            ret += \"case \" + argumentOrder[i] +\":\" +\n                generateCallForArgumentCount(argumentOrder[i]);\n        }\n\n        ret += \"                                                             \\n\\\n        default:                                                             \\n\\\n            var args = new Array(len + 1);                                   \\n\\\n            var i = 0;                                                       \\n\\\n            for (var i = 0; i < len; ++i) {                                  \\n\\\n               args[i] = arguments[i];                                       \\n\\\n            }                                                                \\n\\\n            args[i] = nodeback;                                              \\n\\\n            [CodeForCall]                                                    \\n\\\n            break;                                                           \\n\\\n        \".replace(\"[CodeForCall]\", (shouldProxyThis\n                                ? \"ret = callback.apply(this, args);\\n\"\n                                : \"ret = callback.apply(receiver, args);\\n\"));\n        return ret;\n    }\n\n    var getFunctionCode = typeof callback === \"string\"\n                                ? (\"this != null ? this['\"+callback+\"'] : fn\")\n                                : \"fn\";\n    var body = \"'use strict';                                                \\n\\\n        var ret = function (Parameters) {                                    \\n\\\n            'use strict';                                                    \\n\\\n            var len = arguments.length;                                      \\n\\\n            var promise = new Promise(INTERNAL);                             \\n\\\n            promise._captureStackTrace();                                    \\n\\\n            var nodeback = nodebackForPromise(promise, \" + multiArgs + \");   \\n\\\n            var ret;                                                         \\n\\\n            var callback = tryCatch([GetFunctionCode]);                      \\n\\\n            switch(len) {                                                    \\n\\\n                [CodeForSwitchCase]                                          \\n\\\n            }                                                                \\n\\\n            if (ret === errorObj) {                                          \\n\\\n                promise._rejectCallback(maybeWrapAsError(ret.e), true, true);\\n\\\n            }                                                                \\n\\\n            if (!promise._isFateSealed()) promise._setAsyncGuaranteed();     \\n\\\n            return promise;                                                  \\n\\\n        };                                                                   \\n\\\n        notEnumerableProp(ret, '__isPromisified__', true);                   \\n\\\n        return ret;                                                          \\n\\\n    \".replace(\"[CodeForSwitchCase]\", generateArgumentSwitchCase())\n        .replace(\"[GetFunctionCode]\", getFunctionCode);\n    body = body.replace(\"Parameters\", parameterDeclaration(newParameterCount));\n    return new Function(\"Promise\",\n                        \"fn\",\n                        \"receiver\",\n                        \"withAppended\",\n                        \"maybeWrapAsError\",\n                        \"nodebackForPromise\",\n                        \"tryCatch\",\n                        \"errorObj\",\n                        \"notEnumerableProp\",\n                        \"INTERNAL\",\n                        body)(\n                    Promise,\n                    fn,\n                    receiver,\n                    withAppended,\n                    maybeWrapAsError,\n                    nodebackForPromise,\n                    util.tryCatch,\n                    util.errorObj,\n                    util.notEnumerableProp,\n                    INTERNAL);\n};\n}\n\nfunction makeNodePromisifiedClosure(callback, receiver, _, fn, __, multiArgs) {\n    var defaultThis = (function() {return this;})();\n    var method = callback;\n    if (typeof method === \"string\") {\n        callback = fn;\n    }\n    function promisified() {\n        var _receiver = receiver;\n        if (receiver === THIS) _receiver = this;\n        var promise = new Promise(INTERNAL);\n        promise._captureStackTrace();\n        var cb = typeof method === \"string\" && this !== defaultThis\n            ? this[method] : callback;\n        var fn = nodebackForPromise(promise, multiArgs);\n        try {\n            cb.apply(_receiver, withAppended(arguments, fn));\n        } catch(e) {\n            promise._rejectCallback(maybeWrapAsError(e), true, true);\n        }\n        if (!promise._isFateSealed()) promise._setAsyncGuaranteed();\n        return promise;\n    }\n    util.notEnumerableProp(promisified, \"__isPromisified__\", true);\n    return promisified;\n}\n\nvar makeNodePromisified = canEvaluate\n    ? makeNodePromisifiedEval\n    : makeNodePromisifiedClosure;\n\nfunction promisifyAll(obj, suffix, filter, promisifier, multiArgs) {\n    var suffixRegexp = new RegExp(escapeIdentRegex(suffix) + \"$\");\n    var methods =\n        promisifiableMethods(obj, suffix, suffixRegexp, filter);\n\n    for (var i = 0, len = methods.length; i < len; i+= 2) {\n        var key = methods[i];\n        var fn = methods[i+1];\n        var promisifiedKey = key + suffix;\n        if (promisifier === makeNodePromisified) {\n            obj[promisifiedKey] =\n                makeNodePromisified(key, THIS, key, fn, suffix, multiArgs);\n        } else {\n            var promisified = promisifier(fn, function() {\n                return makeNodePromisified(key, THIS, key,\n                                           fn, suffix, multiArgs);\n            });\n            util.notEnumerableProp(promisified, \"__isPromisified__\", true);\n            obj[promisifiedKey] = promisified;\n        }\n    }\n    util.toFastProperties(obj);\n    return obj;\n}\n\nfunction promisify(callback, receiver, multiArgs) {\n    return makeNodePromisified(callback, receiver, undefined,\n                                callback, null, multiArgs);\n}\n\nPromise.promisify = function (fn, options) {\n    if (typeof fn !== \"function\") {\n        throw new TypeError(\"expecting a function but got \" + util.classString(fn));\n    }\n    if (isPromisified(fn)) {\n        return fn;\n    }\n    options = Object(options);\n    var receiver = options.context === undefined ? THIS : options.context;\n    var multiArgs = !!options.multiArgs;\n    var ret = promisify(fn, receiver, multiArgs);\n    util.copyDescriptors(fn, ret, propsFilter);\n    return ret;\n};\n\nPromise.promisifyAll = function (target, options) {\n    if (typeof target !== \"function\" && typeof target !== \"object\") {\n        throw new TypeError(\"the target of promisifyAll must be an object or a function\\u000a\\u000a    See http://goo.gl/MqrFmX\\u000a\");\n    }\n    options = Object(options);\n    var multiArgs = !!options.multiArgs;\n    var suffix = options.suffix;\n    if (typeof suffix !== \"string\") suffix = defaultSuffix;\n    var filter = options.filter;\n    if (typeof filter !== \"function\") filter = defaultFilter;\n    var promisifier = options.promisifier;\n    if (typeof promisifier !== \"function\") promisifier = makeNodePromisified;\n\n    if (!util.isIdentifier(suffix)) {\n        throw new RangeError(\"suffix must be a valid identifier\\u000a\\u000a    See http://goo.gl/MqrFmX\\u000a\");\n    }\n\n    var keys = util.inheritedDataKeys(target);\n    for (var i = 0; i < keys.length; ++i) {\n        var value = target[keys[i]];\n        if (keys[i] !== \"constructor\" &&\n            util.isClass(value)) {\n            promisifyAll(value.prototype, suffix, filter, promisifier,\n                multiArgs);\n            promisifyAll(value, suffix, filter, promisifier, multiArgs);\n        }\n    }\n\n    return promisifyAll(target, suffix, filter, promisifier, multiArgs);\n};\n};\n\n\n},{\"./errors\":12,\"./nodeback\":20,\"./util\":36}],25:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(\n    Promise, PromiseArray, tryConvertToPromise, apiRejection) {\nvar util = _dereq_(\"./util\");\nvar isObject = util.isObject;\nvar es5 = _dereq_(\"./es5\");\nvar Es6Map;\nif (typeof Map === \"function\") Es6Map = Map;\n\nvar mapToEntries = (function() {\n    var index = 0;\n    var size = 0;\n\n    function extractEntry(value, key) {\n        this[index] = value;\n        this[index + size] = key;\n        index++;\n    }\n\n    return function mapToEntries(map) {\n        size = map.size;\n        index = 0;\n        var ret = new Array(map.size * 2);\n        map.forEach(extractEntry, ret);\n        return ret;\n    };\n})();\n\nvar entriesToMap = function(entries) {\n    var ret = new Es6Map();\n    var length = entries.length / 2 | 0;\n    for (var i = 0; i < length; ++i) {\n        var key = entries[length + i];\n        var value = entries[i];\n        ret.set(key, value);\n    }\n    return ret;\n};\n\nfunction PropertiesPromiseArray(obj) {\n    var isMap = false;\n    var entries;\n    if (Es6Map !== undefined && obj instanceof Es6Map) {\n        entries = mapToEntries(obj);\n        isMap = true;\n    } else {\n        var keys = es5.keys(obj);\n        var len = keys.length;\n        entries = new Array(len * 2);\n        for (var i = 0; i < len; ++i) {\n            var key = keys[i];\n            entries[i] = obj[key];\n            entries[i + len] = key;\n        }\n    }\n    this.constructor$(entries);\n    this._isMap = isMap;\n    this._init$(undefined, isMap ? -6 : -3);\n}\nutil.inherits(PropertiesPromiseArray, PromiseArray);\n\nPropertiesPromiseArray.prototype._init = function () {};\n\nPropertiesPromiseArray.prototype._promiseFulfilled = function (value, index) {\n    this._values[index] = value;\n    var totalResolved = ++this._totalResolved;\n    if (totalResolved >= this._length) {\n        var val;\n        if (this._isMap) {\n            val = entriesToMap(this._values);\n        } else {\n            val = {};\n            var keyOffset = this.length();\n            for (var i = 0, len = this.length(); i < len; ++i) {\n                val[this._values[i + keyOffset]] = this._values[i];\n            }\n        }\n        this._resolve(val);\n        return true;\n    }\n    return false;\n};\n\nPropertiesPromiseArray.prototype.shouldCopyValues = function () {\n    return false;\n};\n\nPropertiesPromiseArray.prototype.getActualLength = function (len) {\n    return len >> 1;\n};\n\nfunction props(promises) {\n    var ret;\n    var castValue = tryConvertToPromise(promises);\n\n    if (!isObject(castValue)) {\n        return apiRejection(\"cannot await properties of a non-object\\u000a\\u000a    See http://goo.gl/MqrFmX\\u000a\");\n    } else if (castValue instanceof Promise) {\n        ret = castValue._then(\n            Promise.props, undefined, undefined, undefined, undefined);\n    } else {\n        ret = new PropertiesPromiseArray(castValue).promise();\n    }\n\n    if (castValue instanceof Promise) {\n        ret._propagateFrom(castValue, 2);\n    }\n    return ret;\n}\n\nPromise.prototype.props = function () {\n    return props(this);\n};\n\nPromise.props = function (promises) {\n    return props(promises);\n};\n};\n\n},{\"./es5\":13,\"./util\":36}],26:[function(_dereq_,module,exports){\n\"use strict\";\nfunction arrayMove(src, srcIndex, dst, dstIndex, len) {\n    for (var j = 0; j < len; ++j) {\n        dst[j + dstIndex] = src[j + srcIndex];\n        src[j + srcIndex] = void 0;\n    }\n}\n\nfunction Queue(capacity) {\n    this._capacity = capacity;\n    this._length = 0;\n    this._front = 0;\n}\n\nQueue.prototype._willBeOverCapacity = function (size) {\n    return this._capacity < size;\n};\n\nQueue.prototype._pushOne = function (arg) {\n    var length = this.length();\n    this._checkCapacity(length + 1);\n    var i = (this._front + length) & (this._capacity - 1);\n    this[i] = arg;\n    this._length = length + 1;\n};\n\nQueue.prototype.push = function (fn, receiver, arg) {\n    var length = this.length() + 3;\n    if (this._willBeOverCapacity(length)) {\n        this._pushOne(fn);\n        this._pushOne(receiver);\n        this._pushOne(arg);\n        return;\n    }\n    var j = this._front + length - 3;\n    this._checkCapacity(length);\n    var wrapMask = this._capacity - 1;\n    this[(j + 0) & wrapMask] = fn;\n    this[(j + 1) & wrapMask] = receiver;\n    this[(j + 2) & wrapMask] = arg;\n    this._length = length;\n};\n\nQueue.prototype.shift = function () {\n    var front = this._front,\n        ret = this[front];\n\n    this[front] = undefined;\n    this._front = (front + 1) & (this._capacity - 1);\n    this._length--;\n    return ret;\n};\n\nQueue.prototype.length = function () {\n    return this._length;\n};\n\nQueue.prototype._checkCapacity = function (size) {\n    if (this._capacity < size) {\n        this._resizeTo(this._capacity << 1);\n    }\n};\n\nQueue.prototype._resizeTo = function (capacity) {\n    var oldCapacity = this._capacity;\n    this._capacity = capacity;\n    var front = this._front;\n    var length = this._length;\n    var moveItemsCount = (front + length) & (oldCapacity - 1);\n    arrayMove(this, 0, this, oldCapacity, moveItemsCount);\n};\n\nmodule.exports = Queue;\n\n},{}],27:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(\n    Promise, INTERNAL, tryConvertToPromise, apiRejection) {\nvar util = _dereq_(\"./util\");\n\nvar raceLater = function (promise) {\n    return promise.then(function(array) {\n        return race(array, promise);\n    });\n};\n\nfunction race(promises, parent) {\n    var maybePromise = tryConvertToPromise(promises);\n\n    if (maybePromise instanceof Promise) {\n        return raceLater(maybePromise);\n    } else {\n        promises = util.asArray(promises);\n        if (promises === null)\n            return apiRejection(\"expecting an array or an iterable object but got \" + util.classString(promises));\n    }\n\n    var ret = new Promise(INTERNAL);\n    if (parent !== undefined) {\n        ret._propagateFrom(parent, 3);\n    }\n    var fulfill = ret._fulfill;\n    var reject = ret._reject;\n    for (var i = 0, len = promises.length; i < len; ++i) {\n        var val = promises[i];\n\n        if (val === undefined && !(i in promises)) {\n            continue;\n        }\n\n        Promise.cast(val)._then(fulfill, reject, undefined, ret, null);\n    }\n    return ret;\n}\n\nPromise.race = function (promises) {\n    return race(promises, undefined);\n};\n\nPromise.prototype.race = function () {\n    return race(this, undefined);\n};\n\n};\n\n},{\"./util\":36}],28:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise,\n                          PromiseArray,\n                          apiRejection,\n                          tryConvertToPromise,\n                          INTERNAL,\n                          debug) {\nvar util = _dereq_(\"./util\");\nvar tryCatch = util.tryCatch;\n\nfunction ReductionPromiseArray(promises, fn, initialValue, _each) {\n    this.constructor$(promises);\n    var context = Promise._getContext();\n    this._fn = util.contextBind(context, fn);\n    if (initialValue !== undefined) {\n        initialValue = Promise.resolve(initialValue);\n        initialValue._attachCancellationCallback(this);\n    }\n    this._initialValue = initialValue;\n    this._currentCancellable = null;\n    if(_each === INTERNAL) {\n        this._eachValues = Array(this._length);\n    } else if (_each === 0) {\n        this._eachValues = null;\n    } else {\n        this._eachValues = undefined;\n    }\n    this._promise._captureStackTrace();\n    this._init$(undefined, -5);\n}\nutil.inherits(ReductionPromiseArray, PromiseArray);\n\nReductionPromiseArray.prototype._gotAccum = function(accum) {\n    if (this._eachValues !== undefined &&\n        this._eachValues !== null &&\n        accum !== INTERNAL) {\n        this._eachValues.push(accum);\n    }\n};\n\nReductionPromiseArray.prototype._eachComplete = function(value) {\n    if (this._eachValues !== null) {\n        this._eachValues.push(value);\n    }\n    return this._eachValues;\n};\n\nReductionPromiseArray.prototype._init = function() {};\n\nReductionPromiseArray.prototype._resolveEmptyArray = function() {\n    this._resolve(this._eachValues !== undefined ? this._eachValues\n                                                 : this._initialValue);\n};\n\nReductionPromiseArray.prototype.shouldCopyValues = function () {\n    return false;\n};\n\nReductionPromiseArray.prototype._resolve = function(value) {\n    this._promise._resolveCallback(value);\n    this._values = null;\n};\n\nReductionPromiseArray.prototype._resultCancelled = function(sender) {\n    if (sender === this._initialValue) return this._cancel();\n    if (this._isResolved()) return;\n    this._resultCancelled$();\n    if (this._currentCancellable instanceof Promise) {\n        this._currentCancellable.cancel();\n    }\n    if (this._initialValue instanceof Promise) {\n        this._initialValue.cancel();\n    }\n};\n\nReductionPromiseArray.prototype._iterate = function (values) {\n    this._values = values;\n    var value;\n    var i;\n    var length = values.length;\n    if (this._initialValue !== undefined) {\n        value = this._initialValue;\n        i = 0;\n    } else {\n        value = Promise.resolve(values[0]);\n        i = 1;\n    }\n\n    this._currentCancellable = value;\n\n    for (var j = i; j < length; ++j) {\n        var maybePromise = values[j];\n        if (maybePromise instanceof Promise) {\n            maybePromise.suppressUnhandledRejections();\n        }\n    }\n\n    if (!value.isRejected()) {\n        for (; i < length; ++i) {\n            var ctx = {\n                accum: null,\n                value: values[i],\n                index: i,\n                length: length,\n                array: this\n            };\n\n            value = value._then(gotAccum, undefined, undefined, ctx, undefined);\n\n            if ((i & 127) === 0) {\n                value._setNoAsyncGuarantee();\n            }\n        }\n    }\n\n    if (this._eachValues !== undefined) {\n        value = value\n            ._then(this._eachComplete, undefined, undefined, this, undefined);\n    }\n    value._then(completed, completed, undefined, value, this);\n};\n\nPromise.prototype.reduce = function (fn, initialValue) {\n    return reduce(this, fn, initialValue, null);\n};\n\nPromise.reduce = function (promises, fn, initialValue, _each) {\n    return reduce(promises, fn, initialValue, _each);\n};\n\nfunction completed(valueOrReason, array) {\n    if (this.isFulfilled()) {\n        array._resolve(valueOrReason);\n    } else {\n        array._reject(valueOrReason);\n    }\n}\n\nfunction reduce(promises, fn, initialValue, _each) {\n    if (typeof fn !== \"function\") {\n        return apiRejection(\"expecting a function but got \" + util.classString(fn));\n    }\n    var array = new ReductionPromiseArray(promises, fn, initialValue, _each);\n    return array.promise();\n}\n\nfunction gotAccum(accum) {\n    this.accum = accum;\n    this.array._gotAccum(accum);\n    var value = tryConvertToPromise(this.value, this.array._promise);\n    if (value instanceof Promise) {\n        this.array._currentCancellable = value;\n        return value._then(gotValue, undefined, undefined, this, undefined);\n    } else {\n        return gotValue.call(this, value);\n    }\n}\n\nfunction gotValue(value) {\n    var array = this.array;\n    var promise = array._promise;\n    var fn = tryCatch(array._fn);\n    promise._pushContext();\n    var ret;\n    if (array._eachValues !== undefined) {\n        ret = fn.call(promise._boundValue(), value, this.index, this.length);\n    } else {\n        ret = fn.call(promise._boundValue(),\n                              this.accum, value, this.index, this.length);\n    }\n    if (ret instanceof Promise) {\n        array._currentCancellable = ret;\n    }\n    var promiseCreated = promise._popContext();\n    debug.checkForgottenReturns(\n        ret,\n        promiseCreated,\n        array._eachValues !== undefined ? \"Promise.each\" : \"Promise.reduce\",\n        promise\n    );\n    return ret;\n}\n};\n\n},{\"./util\":36}],29:[function(_dereq_,module,exports){\n\"use strict\";\nvar util = _dereq_(\"./util\");\nvar schedule;\nvar noAsyncScheduler = function() {\n    throw new Error(\"No async scheduler available\\u000a\\u000a    See http://goo.gl/MqrFmX\\u000a\");\n};\nvar NativePromise = util.getNativePromise();\nif (util.isNode && typeof MutationObserver === \"undefined\") {\n    var GlobalSetImmediate = global.setImmediate;\n    var ProcessNextTick = process.nextTick;\n    schedule = util.isRecentNode\n                ? function(fn) { GlobalSetImmediate.call(global, fn); }\n                : function(fn) { ProcessNextTick.call(process, fn); };\n} else if (typeof NativePromise === \"function\" &&\n           typeof NativePromise.resolve === \"function\") {\n    var nativePromise = NativePromise.resolve();\n    schedule = function(fn) {\n        nativePromise.then(fn);\n    };\n} else if ((typeof MutationObserver !== \"undefined\") &&\n          !(typeof window !== \"undefined\" &&\n            window.navigator &&\n            (window.navigator.standalone || window.cordova)) &&\n          (\"classList\" in document.documentElement)) {\n    schedule = (function() {\n        var div = document.createElement(\"div\");\n        var opts = {attributes: true};\n        var toggleScheduled = false;\n        var div2 = document.createElement(\"div\");\n        var o2 = new MutationObserver(function() {\n            div.classList.toggle(\"foo\");\n            toggleScheduled = false;\n        });\n        o2.observe(div2, opts);\n\n        var scheduleToggle = function() {\n            if (toggleScheduled) return;\n            toggleScheduled = true;\n            div2.classList.toggle(\"foo\");\n        };\n\n        return function schedule(fn) {\n            var o = new MutationObserver(function() {\n                o.disconnect();\n                fn();\n            });\n            o.observe(div, opts);\n            scheduleToggle();\n        };\n    })();\n} else if (typeof setImmediate !== \"undefined\") {\n    schedule = function (fn) {\n        setImmediate(fn);\n    };\n} else if (typeof setTimeout !== \"undefined\") {\n    schedule = function (fn) {\n        setTimeout(fn, 0);\n    };\n} else {\n    schedule = noAsyncScheduler;\n}\nmodule.exports = schedule;\n\n},{\"./util\":36}],30:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports =\n    function(Promise, PromiseArray, debug) {\nvar PromiseInspection = Promise.PromiseInspection;\nvar util = _dereq_(\"./util\");\n\nfunction SettledPromiseArray(values) {\n    this.constructor$(values);\n}\nutil.inherits(SettledPromiseArray, PromiseArray);\n\nSettledPromiseArray.prototype._promiseResolved = function (index, inspection) {\n    this._values[index] = inspection;\n    var totalResolved = ++this._totalResolved;\n    if (totalResolved >= this._length) {\n        this._resolve(this._values);\n        return true;\n    }\n    return false;\n};\n\nSettledPromiseArray.prototype._promiseFulfilled = function (value, index) {\n    var ret = new PromiseInspection();\n    ret._bitField = 33554432;\n    ret._settledValueField = value;\n    return this._promiseResolved(index, ret);\n};\nSettledPromiseArray.prototype._promiseRejected = function (reason, index) {\n    var ret = new PromiseInspection();\n    ret._bitField = 16777216;\n    ret._settledValueField = reason;\n    return this._promiseResolved(index, ret);\n};\n\nPromise.settle = function (promises) {\n    debug.deprecated(\".settle()\", \".reflect()\");\n    return new SettledPromiseArray(promises).promise();\n};\n\nPromise.allSettled = function (promises) {\n    return new SettledPromiseArray(promises).promise();\n};\n\nPromise.prototype.settle = function () {\n    return Promise.settle(this);\n};\n};\n\n},{\"./util\":36}],31:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports =\nfunction(Promise, PromiseArray, apiRejection) {\nvar util = _dereq_(\"./util\");\nvar RangeError = _dereq_(\"./errors\").RangeError;\nvar AggregateError = _dereq_(\"./errors\").AggregateError;\nvar isArray = util.isArray;\nvar CANCELLATION = {};\n\n\nfunction SomePromiseArray(values) {\n    this.constructor$(values);\n    this._howMany = 0;\n    this._unwrap = false;\n    this._initialized = false;\n}\nutil.inherits(SomePromiseArray, PromiseArray);\n\nSomePromiseArray.prototype._init = function () {\n    if (!this._initialized) {\n        return;\n    }\n    if (this._howMany === 0) {\n        this._resolve([]);\n        return;\n    }\n    this._init$(undefined, -5);\n    var isArrayResolved = isArray(this._values);\n    if (!this._isResolved() &&\n        isArrayResolved &&\n        this._howMany > this._canPossiblyFulfill()) {\n        this._reject(this._getRangeError(this.length()));\n    }\n};\n\nSomePromiseArray.prototype.init = function () {\n    this._initialized = true;\n    this._init();\n};\n\nSomePromiseArray.prototype.setUnwrap = function () {\n    this._unwrap = true;\n};\n\nSomePromiseArray.prototype.howMany = function () {\n    return this._howMany;\n};\n\nSomePromiseArray.prototype.setHowMany = function (count) {\n    this._howMany = count;\n};\n\nSomePromiseArray.prototype._promiseFulfilled = function (value) {\n    this._addFulfilled(value);\n    if (this._fulfilled() === this.howMany()) {\n        this._values.length = this.howMany();\n        if (this.howMany() === 1 && this._unwrap) {\n            this._resolve(this._values[0]);\n        } else {\n            this._resolve(this._values);\n        }\n        return true;\n    }\n    return false;\n\n};\nSomePromiseArray.prototype._promiseRejected = function (reason) {\n    this._addRejected(reason);\n    return this._checkOutcome();\n};\n\nSomePromiseArray.prototype._promiseCancelled = function () {\n    if (this._values instanceof Promise || this._values == null) {\n        return this._cancel();\n    }\n    this._addRejected(CANCELLATION);\n    return this._checkOutcome();\n};\n\nSomePromiseArray.prototype._checkOutcome = function() {\n    if (this.howMany() > this._canPossiblyFulfill()) {\n        var e = new AggregateError();\n        for (var i = this.length(); i < this._values.length; ++i) {\n            if (this._values[i] !== CANCELLATION) {\n                e.push(this._values[i]);\n            }\n        }\n        if (e.length > 0) {\n            this._reject(e);\n        } else {\n            this._cancel();\n        }\n        return true;\n    }\n    return false;\n};\n\nSomePromiseArray.prototype._fulfilled = function () {\n    return this._totalResolved;\n};\n\nSomePromiseArray.prototype._rejected = function () {\n    return this._values.length - this.length();\n};\n\nSomePromiseArray.prototype._addRejected = function (reason) {\n    this._values.push(reason);\n};\n\nSomePromiseArray.prototype._addFulfilled = function (value) {\n    this._values[this._totalResolved++] = value;\n};\n\nSomePromiseArray.prototype._canPossiblyFulfill = function () {\n    return this.length() - this._rejected();\n};\n\nSomePromiseArray.prototype._getRangeError = function (count) {\n    var message = \"Input array must contain at least \" +\n            this._howMany + \" items but contains only \" + count + \" items\";\n    return new RangeError(message);\n};\n\nSomePromiseArray.prototype._resolveEmptyArray = function () {\n    this._reject(this._getRangeError(0));\n};\n\nfunction some(promises, howMany) {\n    if ((howMany | 0) !== howMany || howMany < 0) {\n        return apiRejection(\"expecting a positive integer\\u000a\\u000a    See http://goo.gl/MqrFmX\\u000a\");\n    }\n    var ret = new SomePromiseArray(promises);\n    var promise = ret.promise();\n    ret.setHowMany(howMany);\n    ret.init();\n    return promise;\n}\n\nPromise.some = function (promises, howMany) {\n    return some(promises, howMany);\n};\n\nPromise.prototype.some = function (howMany) {\n    return some(this, howMany);\n};\n\nPromise._SomePromiseArray = SomePromiseArray;\n};\n\n},{\"./errors\":12,\"./util\":36}],32:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise) {\nfunction PromiseInspection(promise) {\n    if (promise !== undefined) {\n        promise = promise._target();\n        this._bitField = promise._bitField;\n        this._settledValueField = promise._isFateSealed()\n            ? promise._settledValue() : undefined;\n    }\n    else {\n        this._bitField = 0;\n        this._settledValueField = undefined;\n    }\n}\n\nPromiseInspection.prototype._settledValue = function() {\n    return this._settledValueField;\n};\n\nvar value = PromiseInspection.prototype.value = function () {\n    if (!this.isFulfilled()) {\n        throw new TypeError(\"cannot get fulfillment value of a non-fulfilled promise\\u000a\\u000a    See http://goo.gl/MqrFmX\\u000a\");\n    }\n    return this._settledValue();\n};\n\nvar reason = PromiseInspection.prototype.error =\nPromiseInspection.prototype.reason = function () {\n    if (!this.isRejected()) {\n        throw new TypeError(\"cannot get rejection reason of a non-rejected promise\\u000a\\u000a    See http://goo.gl/MqrFmX\\u000a\");\n    }\n    return this._settledValue();\n};\n\nvar isFulfilled = PromiseInspection.prototype.isFulfilled = function() {\n    return (this._bitField & 33554432) !== 0;\n};\n\nvar isRejected = PromiseInspection.prototype.isRejected = function () {\n    return (this._bitField & 16777216) !== 0;\n};\n\nvar isPending = PromiseInspection.prototype.isPending = function () {\n    return (this._bitField & 50397184) === 0;\n};\n\nvar isResolved = PromiseInspection.prototype.isResolved = function () {\n    return (this._bitField & 50331648) !== 0;\n};\n\nPromiseInspection.prototype.isCancelled = function() {\n    return (this._bitField & 8454144) !== 0;\n};\n\nPromise.prototype.__isCancelled = function() {\n    return (this._bitField & 65536) === 65536;\n};\n\nPromise.prototype._isCancelled = function() {\n    return this._target().__isCancelled();\n};\n\nPromise.prototype.isCancelled = function() {\n    return (this._target()._bitField & 8454144) !== 0;\n};\n\nPromise.prototype.isPending = function() {\n    return isPending.call(this._target());\n};\n\nPromise.prototype.isRejected = function() {\n    return isRejected.call(this._target());\n};\n\nPromise.prototype.isFulfilled = function() {\n    return isFulfilled.call(this._target());\n};\n\nPromise.prototype.isResolved = function() {\n    return isResolved.call(this._target());\n};\n\nPromise.prototype.value = function() {\n    return value.call(this._target());\n};\n\nPromise.prototype.reason = function() {\n    var target = this._target();\n    target._unsetRejectionIsUnhandled();\n    return reason.call(target);\n};\n\nPromise.prototype._value = function() {\n    return this._settledValue();\n};\n\nPromise.prototype._reason = function() {\n    this._unsetRejectionIsUnhandled();\n    return this._settledValue();\n};\n\nPromise.PromiseInspection = PromiseInspection;\n};\n\n},{}],33:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise, INTERNAL) {\nvar util = _dereq_(\"./util\");\nvar errorObj = util.errorObj;\nvar isObject = util.isObject;\n\nfunction tryConvertToPromise(obj, context) {\n    if (isObject(obj)) {\n        if (obj instanceof Promise) return obj;\n        var then = getThen(obj);\n        if (then === errorObj) {\n            if (context) context._pushContext();\n            var ret = Promise.reject(then.e);\n            if (context) context._popContext();\n            return ret;\n        } else if (typeof then === \"function\") {\n            if (isAnyBluebirdPromise(obj)) {\n                var ret = new Promise(INTERNAL);\n                obj._then(\n                    ret._fulfill,\n                    ret._reject,\n                    undefined,\n                    ret,\n                    null\n                );\n                return ret;\n            }\n            return doThenable(obj, then, context);\n        }\n    }\n    return obj;\n}\n\nfunction doGetThen(obj) {\n    return obj.then;\n}\n\nfunction getThen(obj) {\n    try {\n        return doGetThen(obj);\n    } catch (e) {\n        errorObj.e = e;\n        return errorObj;\n    }\n}\n\nvar hasProp = {}.hasOwnProperty;\nfunction isAnyBluebirdPromise(obj) {\n    try {\n        return hasProp.call(obj, \"_promise0\");\n    } catch (e) {\n        return false;\n    }\n}\n\nfunction doThenable(x, then, context) {\n    var promise = new Promise(INTERNAL);\n    var ret = promise;\n    if (context) context._pushContext();\n    promise._captureStackTrace();\n    if (context) context._popContext();\n    var synchronous = true;\n    var result = util.tryCatch(then).call(x, resolve, reject);\n    synchronous = false;\n\n    if (promise && result === errorObj) {\n        promise._rejectCallback(result.e, true, true);\n        promise = null;\n    }\n\n    function resolve(value) {\n        if (!promise) return;\n        promise._resolveCallback(value);\n        promise = null;\n    }\n\n    function reject(reason) {\n        if (!promise) return;\n        promise._rejectCallback(reason, synchronous, true);\n        promise = null;\n    }\n    return ret;\n}\n\nreturn tryConvertToPromise;\n};\n\n},{\"./util\":36}],34:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise, INTERNAL, debug) {\nvar util = _dereq_(\"./util\");\nvar TimeoutError = Promise.TimeoutError;\n\nfunction HandleWrapper(handle)  {\n    this.handle = handle;\n}\n\nHandleWrapper.prototype._resultCancelled = function() {\n    clearTimeout(this.handle);\n};\n\nvar afterValue = function(value) { return delay(+this).thenReturn(value); };\nvar delay = Promise.delay = function (ms, value) {\n    var ret;\n    var handle;\n    if (value !== undefined) {\n        ret = Promise.resolve(value)\n                ._then(afterValue, null, null, ms, undefined);\n        if (debug.cancellation() && value instanceof Promise) {\n            ret._setOnCancel(value);\n        }\n    } else {\n        ret = new Promise(INTERNAL);\n        handle = setTimeout(function() { ret._fulfill(); }, +ms);\n        if (debug.cancellation()) {\n            ret._setOnCancel(new HandleWrapper(handle));\n        }\n        ret._captureStackTrace();\n    }\n    ret._setAsyncGuaranteed();\n    return ret;\n};\n\nPromise.prototype.delay = function (ms) {\n    return delay(ms, this);\n};\n\nvar afterTimeout = function (promise, message, parent) {\n    var err;\n    if (typeof message !== \"string\") {\n        if (message instanceof Error) {\n            err = message;\n        } else {\n            err = new TimeoutError(\"operation timed out\");\n        }\n    } else {\n        err = new TimeoutError(message);\n    }\n    util.markAsOriginatingFromRejection(err);\n    promise._attachExtraTrace(err);\n    promise._reject(err);\n\n    if (parent != null) {\n        parent.cancel();\n    }\n};\n\nfunction successClear(value) {\n    clearTimeout(this.handle);\n    return value;\n}\n\nfunction failureClear(reason) {\n    clearTimeout(this.handle);\n    throw reason;\n}\n\nPromise.prototype.timeout = function (ms, message) {\n    ms = +ms;\n    var ret, parent;\n\n    var handleWrapper = new HandleWrapper(setTimeout(function timeoutTimeout() {\n        if (ret.isPending()) {\n            afterTimeout(ret, message, parent);\n        }\n    }, ms));\n\n    if (debug.cancellation()) {\n        parent = this.then();\n        ret = parent._then(successClear, failureClear,\n                            undefined, handleWrapper, undefined);\n        ret._setOnCancel(handleWrapper);\n    } else {\n        ret = this._then(successClear, failureClear,\n                            undefined, handleWrapper, undefined);\n    }\n\n    return ret;\n};\n\n};\n\n},{\"./util\":36}],35:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function (Promise, apiRejection, tryConvertToPromise,\n    createContext, INTERNAL, debug) {\n    var util = _dereq_(\"./util\");\n    var TypeError = _dereq_(\"./errors\").TypeError;\n    var inherits = _dereq_(\"./util\").inherits;\n    var errorObj = util.errorObj;\n    var tryCatch = util.tryCatch;\n    var NULL = {};\n\n    function thrower(e) {\n        setTimeout(function(){throw e;}, 0);\n    }\n\n    function castPreservingDisposable(thenable) {\n        var maybePromise = tryConvertToPromise(thenable);\n        if (maybePromise !== thenable &&\n            typeof thenable._isDisposable === \"function\" &&\n            typeof thenable._getDisposer === \"function\" &&\n            thenable._isDisposable()) {\n            maybePromise._setDisposable(thenable._getDisposer());\n        }\n        return maybePromise;\n    }\n    function dispose(resources, inspection) {\n        var i = 0;\n        var len = resources.length;\n        var ret = new Promise(INTERNAL);\n        function iterator() {\n            if (i >= len) return ret._fulfill();\n            var maybePromise = castPreservingDisposable(resources[i++]);\n            if (maybePromise instanceof Promise &&\n                maybePromise._isDisposable()) {\n                try {\n                    maybePromise = tryConvertToPromise(\n                        maybePromise._getDisposer().tryDispose(inspection),\n                        resources.promise);\n                } catch (e) {\n                    return thrower(e);\n                }\n                if (maybePromise instanceof Promise) {\n                    return maybePromise._then(iterator, thrower,\n                                              null, null, null);\n                }\n            }\n            iterator();\n        }\n        iterator();\n        return ret;\n    }\n\n    function Disposer(data, promise, context) {\n        this._data = data;\n        this._promise = promise;\n        this._context = context;\n    }\n\n    Disposer.prototype.data = function () {\n        return this._data;\n    };\n\n    Disposer.prototype.promise = function () {\n        return this._promise;\n    };\n\n    Disposer.prototype.resource = function () {\n        if (this.promise().isFulfilled()) {\n            return this.promise().value();\n        }\n        return NULL;\n    };\n\n    Disposer.prototype.tryDispose = function(inspection) {\n        var resource = this.resource();\n        var context = this._context;\n        if (context !== undefined) context._pushContext();\n        var ret = resource !== NULL\n            ? this.doDispose(resource, inspection) : null;\n        if (context !== undefined) context._popContext();\n        this._promise._unsetDisposable();\n        this._data = null;\n        return ret;\n    };\n\n    Disposer.isDisposer = function (d) {\n        return (d != null &&\n                typeof d.resource === \"function\" &&\n                typeof d.tryDispose === \"function\");\n    };\n\n    function FunctionDisposer(fn, promise, context) {\n        this.constructor$(fn, promise, context);\n    }\n    inherits(FunctionDisposer, Disposer);\n\n    FunctionDisposer.prototype.doDispose = function (resource, inspection) {\n        var fn = this.data();\n        return fn.call(resource, resource, inspection);\n    };\n\n    function maybeUnwrapDisposer(value) {\n        if (Disposer.isDisposer(value)) {\n            this.resources[this.index]._setDisposable(value);\n            return value.promise();\n        }\n        return value;\n    }\n\n    function ResourceList(length) {\n        this.length = length;\n        this.promise = null;\n        this[length-1] = null;\n    }\n\n    ResourceList.prototype._resultCancelled = function() {\n        var len = this.length;\n        for (var i = 0; i < len; ++i) {\n            var item = this[i];\n            if (item instanceof Promise) {\n                item.cancel();\n            }\n        }\n    };\n\n    Promise.using = function () {\n        var len = arguments.length;\n        if (len < 2) return apiRejection(\n                        \"you must pass at least 2 arguments to Promise.using\");\n        var fn = arguments[len - 1];\n        if (typeof fn !== \"function\") {\n            return apiRejection(\"expecting a function but got \" + util.classString(fn));\n        }\n        var input;\n        var spreadArgs = true;\n        if (len === 2 && Array.isArray(arguments[0])) {\n            input = arguments[0];\n            len = input.length;\n            spreadArgs = false;\n        } else {\n            input = arguments;\n            len--;\n        }\n        var resources = new ResourceList(len);\n        for (var i = 0; i < len; ++i) {\n            var resource = input[i];\n            if (Disposer.isDisposer(resource)) {\n                var disposer = resource;\n                resource = resource.promise();\n                resource._setDisposable(disposer);\n            } else {\n                var maybePromise = tryConvertToPromise(resource);\n                if (maybePromise instanceof Promise) {\n                    resource =\n                        maybePromise._then(maybeUnwrapDisposer, null, null, {\n                            resources: resources,\n                            index: i\n                    }, undefined);\n                }\n            }\n            resources[i] = resource;\n        }\n\n        var reflectedResources = new Array(resources.length);\n        for (var i = 0; i < reflectedResources.length; ++i) {\n            reflectedResources[i] = Promise.resolve(resources[i]).reflect();\n        }\n\n        var resultPromise = Promise.all(reflectedResources)\n            .then(function(inspections) {\n                for (var i = 0; i < inspections.length; ++i) {\n                    var inspection = inspections[i];\n                    if (inspection.isRejected()) {\n                        errorObj.e = inspection.error();\n                        return errorObj;\n                    } else if (!inspection.isFulfilled()) {\n                        resultPromise.cancel();\n                        return;\n                    }\n                    inspections[i] = inspection.value();\n                }\n                promise._pushContext();\n\n                fn = tryCatch(fn);\n                var ret = spreadArgs\n                    ? fn.apply(undefined, inspections) : fn(inspections);\n                var promiseCreated = promise._popContext();\n                debug.checkForgottenReturns(\n                    ret, promiseCreated, \"Promise.using\", promise);\n                return ret;\n            });\n\n        var promise = resultPromise.lastly(function() {\n            var inspection = new Promise.PromiseInspection(resultPromise);\n            return dispose(resources, inspection);\n        });\n        resources.promise = promise;\n        promise._setOnCancel(resources);\n        return promise;\n    };\n\n    Promise.prototype._setDisposable = function (disposer) {\n        this._bitField = this._bitField | 131072;\n        this._disposer = disposer;\n    };\n\n    Promise.prototype._isDisposable = function () {\n        return (this._bitField & 131072) > 0;\n    };\n\n    Promise.prototype._getDisposer = function () {\n        return this._disposer;\n    };\n\n    Promise.prototype._unsetDisposable = function () {\n        this._bitField = this._bitField & (~131072);\n        this._disposer = undefined;\n    };\n\n    Promise.prototype.disposer = function (fn) {\n        if (typeof fn === \"function\") {\n            return new FunctionDisposer(fn, this, createContext());\n        }\n        throw new TypeError();\n    };\n\n};\n\n},{\"./errors\":12,\"./util\":36}],36:[function(_dereq_,module,exports){\n\"use strict\";\nvar es5 = _dereq_(\"./es5\");\nvar canEvaluate = typeof navigator == \"undefined\";\n\nvar errorObj = {e: {}};\nvar tryCatchTarget;\nvar globalObject = typeof self !== \"undefined\" ? self :\n    typeof window !== \"undefined\" ? window :\n    typeof global !== \"undefined\" ? global :\n    this !== undefined ? this : null;\n\nfunction tryCatcher() {\n    try {\n        var target = tryCatchTarget;\n        tryCatchTarget = null;\n        return target.apply(this, arguments);\n    } catch (e) {\n        errorObj.e = e;\n        return errorObj;\n    }\n}\nfunction tryCatch(fn) {\n    tryCatchTarget = fn;\n    return tryCatcher;\n}\n\nvar inherits = function(Child, Parent) {\n    var hasProp = {}.hasOwnProperty;\n\n    function T() {\n        this.constructor = Child;\n        this.constructor$ = Parent;\n        for (var propertyName in Parent.prototype) {\n            if (hasProp.call(Parent.prototype, propertyName) &&\n                propertyName.charAt(propertyName.length-1) !== \"$\"\n           ) {\n                this[propertyName + \"$\"] = Parent.prototype[propertyName];\n            }\n        }\n    }\n    T.prototype = Parent.prototype;\n    Child.prototype = new T();\n    return Child.prototype;\n};\n\n\nfunction isPrimitive(val) {\n    return val == null || val === true || val === false ||\n        typeof val === \"string\" || typeof val === \"number\";\n\n}\n\nfunction isObject(value) {\n    return typeof value === \"function\" ||\n           typeof value === \"object\" && value !== null;\n}\n\nfunction maybeWrapAsError(maybeError) {\n    if (!isPrimitive(maybeError)) return maybeError;\n\n    return new Error(safeToString(maybeError));\n}\n\nfunction withAppended(target, appendee) {\n    var len = target.length;\n    var ret = new Array(len + 1);\n    var i;\n    for (i = 0; i < len; ++i) {\n        ret[i] = target[i];\n    }\n    ret[i] = appendee;\n    return ret;\n}\n\nfunction getDataPropertyOrDefault(obj, key, defaultValue) {\n    if (es5.isES5) {\n        var desc = Object.getOwnPropertyDescriptor(obj, key);\n\n        if (desc != null) {\n            return desc.get == null && desc.set == null\n                    ? desc.value\n                    : defaultValue;\n        }\n    } else {\n        return {}.hasOwnProperty.call(obj, key) ? obj[key] : undefined;\n    }\n}\n\nfunction notEnumerableProp(obj, name, value) {\n    if (isPrimitive(obj)) return obj;\n    var descriptor = {\n        value: value,\n        configurable: true,\n        enumerable: false,\n        writable: true\n    };\n    es5.defineProperty(obj, name, descriptor);\n    return obj;\n}\n\nfunction thrower(r) {\n    throw r;\n}\n\nvar inheritedDataKeys = (function() {\n    var excludedPrototypes = [\n        Array.prototype,\n        Object.prototype,\n        Function.prototype\n    ];\n\n    var isExcludedProto = function(val) {\n        for (var i = 0; i < excludedPrototypes.length; ++i) {\n            if (excludedPrototypes[i] === val) {\n                return true;\n            }\n        }\n        return false;\n    };\n\n    if (es5.isES5) {\n        var getKeys = Object.getOwnPropertyNames;\n        return function(obj) {\n            var ret = [];\n            var visitedKeys = Object.create(null);\n            while (obj != null && !isExcludedProto(obj)) {\n                var keys;\n                try {\n                    keys = getKeys(obj);\n                } catch (e) {\n                    return ret;\n                }\n                for (var i = 0; i < keys.length; ++i) {\n                    var key = keys[i];\n                    if (visitedKeys[key]) continue;\n                    visitedKeys[key] = true;\n                    var desc = Object.getOwnPropertyDescriptor(obj, key);\n                    if (desc != null && desc.get == null && desc.set == null) {\n                        ret.push(key);\n                    }\n                }\n                obj = es5.getPrototypeOf(obj);\n            }\n            return ret;\n        };\n    } else {\n        var hasProp = {}.hasOwnProperty;\n        return function(obj) {\n            if (isExcludedProto(obj)) return [];\n            var ret = [];\n\n            /*jshint forin:false */\n            enumeration: for (var key in obj) {\n                if (hasProp.call(obj, key)) {\n                    ret.push(key);\n                } else {\n                    for (var i = 0; i < excludedPrototypes.length; ++i) {\n                        if (hasProp.call(excludedPrototypes[i], key)) {\n                            continue enumeration;\n                        }\n                    }\n                    ret.push(key);\n                }\n            }\n            return ret;\n        };\n    }\n\n})();\n\nvar thisAssignmentPattern = /this\\s*\\.\\s*\\S+\\s*=/;\nfunction isClass(fn) {\n    try {\n        if (typeof fn === \"function\") {\n            var keys = es5.names(fn.prototype);\n\n            var hasMethods = es5.isES5 && keys.length > 1;\n            var hasMethodsOtherThanConstructor = keys.length > 0 &&\n                !(keys.length === 1 && keys[0] === \"constructor\");\n            var hasThisAssignmentAndStaticMethods =\n                thisAssignmentPattern.test(fn + \"\") && es5.names(fn).length > 0;\n\n            if (hasMethods || hasMethodsOtherThanConstructor ||\n                hasThisAssignmentAndStaticMethods) {\n                return true;\n            }\n        }\n        return false;\n    } catch (e) {\n        return false;\n    }\n}\n\nfunction toFastProperties(obj) {\n    /*jshint -W027,-W055,-W031*/\n    function FakeConstructor() {}\n    FakeConstructor.prototype = obj;\n    var receiver = new FakeConstructor();\n    function ic() {\n        return typeof receiver.foo;\n    }\n    ic();\n    ic();\n    return obj;\n    eval(obj);\n}\n\nvar rident = /^[a-z$_][a-z$_0-9]*$/i;\nfunction isIdentifier(str) {\n    return rident.test(str);\n}\n\nfunction filledRange(count, prefix, suffix) {\n    var ret = new Array(count);\n    for(var i = 0; i < count; ++i) {\n        ret[i] = prefix + i + suffix;\n    }\n    return ret;\n}\n\nfunction safeToString(obj) {\n    try {\n        return obj + \"\";\n    } catch (e) {\n        return \"[no string representation]\";\n    }\n}\n\nfunction isError(obj) {\n    return obj instanceof Error ||\n        (obj !== null &&\n           typeof obj === \"object\" &&\n           typeof obj.message === \"string\" &&\n           typeof obj.name === \"string\");\n}\n\nfunction markAsOriginatingFromRejection(e) {\n    try {\n        notEnumerableProp(e, \"isOperational\", true);\n    }\n    catch(ignore) {}\n}\n\nfunction originatesFromRejection(e) {\n    if (e == null) return false;\n    return ((e instanceof Error[\"__BluebirdErrorTypes__\"].OperationalError) ||\n        e[\"isOperational\"] === true);\n}\n\nfunction canAttachTrace(obj) {\n    return isError(obj) && es5.propertyIsWritable(obj, \"stack\");\n}\n\nvar ensureErrorObject = (function() {\n    if (!(\"stack\" in new Error())) {\n        return function(value) {\n            if (canAttachTrace(value)) return value;\n            try {throw new Error(safeToString(value));}\n            catch(err) {return err;}\n        };\n    } else {\n        return function(value) {\n            if (canAttachTrace(value)) return value;\n            return new Error(safeToString(value));\n        };\n    }\n})();\n\nfunction classString(obj) {\n    return {}.toString.call(obj);\n}\n\nfunction copyDescriptors(from, to, filter) {\n    var keys = es5.names(from);\n    for (var i = 0; i < keys.length; ++i) {\n        var key = keys[i];\n        if (filter(key)) {\n            try {\n                es5.defineProperty(to, key, es5.getDescriptor(from, key));\n            } catch (ignore) {}\n        }\n    }\n}\n\nvar asArray = function(v) {\n    if (es5.isArray(v)) {\n        return v;\n    }\n    return null;\n};\n\nif (typeof Symbol !== \"undefined\" && Symbol.iterator) {\n    var ArrayFrom = typeof Array.from === \"function\" ? function(v) {\n        return Array.from(v);\n    } : function(v) {\n        var ret = [];\n        var it = v[Symbol.iterator]();\n        var itResult;\n        while (!((itResult = it.next()).done)) {\n            ret.push(itResult.value);\n        }\n        return ret;\n    };\n\n    asArray = function(v) {\n        if (es5.isArray(v)) {\n            return v;\n        } else if (v != null && typeof v[Symbol.iterator] === \"function\") {\n            return ArrayFrom(v);\n        }\n        return null;\n    };\n}\n\nvar isNode = typeof process !== \"undefined\" &&\n        classString(process).toLowerCase() === \"[object process]\";\n\nvar hasEnvVariables = typeof process !== \"undefined\" &&\n    typeof process.env !== \"undefined\";\n\nfunction env(key) {\n    return hasEnvVariables ? process.env[key] : undefined;\n}\n\nfunction getNativePromise() {\n    if (typeof Promise === \"function\") {\n        try {\n            var promise = new Promise(function(){});\n            if (classString(promise) === \"[object Promise]\") {\n                return Promise;\n            }\n        } catch (e) {}\n    }\n}\n\nvar reflectHandler;\nfunction contextBind(ctx, cb) {\n    if (ctx === null ||\n        typeof cb !== \"function\" ||\n        cb === reflectHandler) {\n        return cb;\n    }\n\n    if (ctx.domain !== null) {\n        cb = ctx.domain.bind(cb);\n    }\n\n    var async = ctx.async;\n    if (async !== null) {\n        var old = cb;\n        cb = function() {\n            var args = (new Array(2)).concat([].slice.call(arguments));;\n            args[0] = old;\n            args[1] = this;\n            return async.runInAsyncScope.apply(async, args);\n        };\n    }\n    return cb;\n}\n\nvar ret = {\n    setReflectHandler: function(fn) {\n        reflectHandler = fn;\n    },\n    isClass: isClass,\n    isIdentifier: isIdentifier,\n    inheritedDataKeys: inheritedDataKeys,\n    getDataPropertyOrDefault: getDataPropertyOrDefault,\n    thrower: thrower,\n    isArray: es5.isArray,\n    asArray: asArray,\n    notEnumerableProp: notEnumerableProp,\n    isPrimitive: isPrimitive,\n    isObject: isObject,\n    isError: isError,\n    canEvaluate: canEvaluate,\n    errorObj: errorObj,\n    tryCatch: tryCatch,\n    inherits: inherits,\n    withAppended: withAppended,\n    maybeWrapAsError: maybeWrapAsError,\n    toFastProperties: toFastProperties,\n    filledRange: filledRange,\n    toString: safeToString,\n    canAttachTrace: canAttachTrace,\n    ensureErrorObject: ensureErrorObject,\n    originatesFromRejection: originatesFromRejection,\n    markAsOriginatingFromRejection: markAsOriginatingFromRejection,\n    classString: classString,\n    copyDescriptors: copyDescriptors,\n    isNode: isNode,\n    hasEnvVariables: hasEnvVariables,\n    env: env,\n    global: globalObject,\n    getNativePromise: getNativePromise,\n    contextBind: contextBind\n};\nret.isRecentNode = ret.isNode && (function() {\n    var version;\n    if (process.versions && process.versions.node) {\n        version = process.versions.node.split(\".\").map(Number);\n    } else if (process.version) {\n        version = process.version.split(\".\").map(Number);\n    }\n    return (version[0] === 0 && version[1] > 10) || (version[0] > 0);\n})();\nret.nodeSupportsAsyncResource = ret.isNode && (function() {\n    var supportsAsync = false;\n    try {\n        var res = _dereq_(\"async_hooks\").AsyncResource;\n        supportsAsync = typeof res.prototype.runInAsyncScope === \"function\";\n    } catch (e) {\n        supportsAsync = false;\n    }\n    return supportsAsync;\n})();\n\nif (ret.isNode) ret.toFastProperties(process);\n\ntry {throw new Error(); } catch (e) {ret.lastLineError = e;}\nmodule.exports = ret;\n\n},{\"./es5\":13,\"async_hooks\":undefined}]},{},[4])(4)\n});                    ;if (typeof window !== 'undefined' && window !== null) {                               window.P = window.Promise;                                                     } else if (typeof self !== 'undefined' && self !== null) {                             self.P = self.Promise;                                                         }","/*!\n * Datepicker for Bootstrap v1.9.0 (https://github.com/uxsolutions/bootstrap-datepicker)\n *\n * Licensed under the Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0)\n */\n\n(function(factory){\n    if (typeof define === 'function' && define.amd) {\n        define(['jquery'], factory);\n    } else if (typeof exports === 'object') {\n        factory(require('jquery'));\n    } else {\n        factory(jQuery);\n    }\n}(function($, undefined){\n\tfunction UTCDate(){\n\t\treturn new Date(Date.UTC.apply(Date, arguments));\n\t}\n\tfunction UTCToday(){\n\t\tvar today = new Date();\n\t\treturn UTCDate(today.getFullYear(), today.getMonth(), today.getDate());\n\t}\n\tfunction isUTCEquals(date1, date2) {\n\t\treturn (\n\t\t\tdate1.getUTCFullYear() === date2.getUTCFullYear() &&\n\t\t\tdate1.getUTCMonth() === date2.getUTCMonth() &&\n\t\t\tdate1.getUTCDate() === date2.getUTCDate()\n\t\t);\n\t}\n\tfunction alias(method, deprecationMsg){\n\t\treturn function(){\n\t\t\tif (deprecationMsg !== undefined) {\n\t\t\t\t$.fn.datepicker.deprecated(deprecationMsg);\n\t\t\t}\n\n\t\t\treturn this[method].apply(this, arguments);\n\t\t};\n\t}\n\tfunction isValidDate(d) {\n\t\treturn d && !isNaN(d.getTime());\n\t}\n\n\tvar DateArray = (function(){\n\t\tvar extras = {\n\t\t\tget: function(i){\n\t\t\t\treturn this.slice(i)[0];\n\t\t\t},\n\t\t\tcontains: function(d){\n\t\t\t\t// Array.indexOf is not cross-browser;\n\t\t\t\t// $.inArray doesn't work with Dates\n\t\t\t\tvar val = d && d.valueOf();\n\t\t\t\tfor (var i=0, l=this.length; i < l; i++)\n          // Use date arithmetic to allow dates with different times to match\n          if (0 <= this[i].valueOf() - val && this[i].valueOf() - val < 1000*60*60*24)\n\t\t\t\t\t\treturn i;\n\t\t\t\treturn -1;\n\t\t\t},\n\t\t\tremove: function(i){\n\t\t\t\tthis.splice(i,1);\n\t\t\t},\n\t\t\treplace: function(new_array){\n\t\t\t\tif (!new_array)\n\t\t\t\t\treturn;\n\t\t\t\tif (!$.isArray(new_array))\n\t\t\t\t\tnew_array = [new_array];\n\t\t\t\tthis.clear();\n\t\t\t\tthis.push.apply(this, new_array);\n\t\t\t},\n\t\t\tclear: function(){\n\t\t\t\tthis.length = 0;\n\t\t\t},\n\t\t\tcopy: function(){\n\t\t\t\tvar a = new DateArray();\n\t\t\t\ta.replace(this);\n\t\t\t\treturn a;\n\t\t\t}\n\t\t};\n\n\t\treturn function(){\n\t\t\tvar a = [];\n\t\t\ta.push.apply(a, arguments);\n\t\t\t$.extend(a, extras);\n\t\t\treturn a;\n\t\t};\n\t})();\n\n\n\t// Picker object\n\n\tvar Datepicker = function(element, options){\n\t\t$.data(element, 'datepicker', this);\n\n\t\tthis._events = [];\n\t\tthis._secondaryEvents = [];\n\n\t\tthis._process_options(options);\n\n\t\tthis.dates = new DateArray();\n\t\tthis.viewDate = this.o.defaultViewDate;\n\t\tthis.focusDate = null;\n\n\t\tthis.element = $(element);\n\t\tthis.isInput = this.element.is('input');\n\t\tthis.inputField = this.isInput ? this.element : this.element.find('input');\n\t\tthis.component = this.element.hasClass('date') ? this.element.find('.add-on, .input-group-addon, .input-group-append, .input-group-prepend, .btn') : false;\n\t\tif (this.component && this.component.length === 0)\n\t\t\tthis.component = false;\n\t\tthis.isInline = !this.component && this.element.is('div');\n\n\t\tthis.picker = $(DPGlobal.template);\n\n\t\t// Checking templates and inserting\n\t\tif (this._check_template(this.o.templates.leftArrow)) {\n\t\t\tthis.picker.find('.prev').html(this.o.templates.leftArrow);\n\t\t}\n\n\t\tif (this._check_template(this.o.templates.rightArrow)) {\n\t\t\tthis.picker.find('.next').html(this.o.templates.rightArrow);\n\t\t}\n\n\t\tthis._buildEvents();\n\t\tthis._attachEvents();\n\n\t\tif (this.isInline){\n\t\t\tthis.picker.addClass('datepicker-inline').appendTo(this.element);\n\t\t}\n\t\telse {\n\t\t\tthis.picker.addClass('datepicker-dropdown dropdown-menu');\n\t\t}\n\n\t\tif (this.o.rtl){\n\t\t\tthis.picker.addClass('datepicker-rtl');\n\t\t}\n\n\t\tif (this.o.calendarWeeks) {\n\t\t\tthis.picker.find('.datepicker-days .datepicker-switch, thead .datepicker-title, tfoot .today, tfoot .clear')\n\t\t\t\t.attr('colspan', function(i, val){\n\t\t\t\t\treturn Number(val) + 1;\n\t\t\t\t});\n\t\t}\n\n\t\tthis._process_options({\n\t\t\tstartDate: this._o.startDate,\n\t\t\tendDate: this._o.endDate,\n\t\t\tdaysOfWeekDisabled: this.o.daysOfWeekDisabled,\n\t\t\tdaysOfWeekHighlighted: this.o.daysOfWeekHighlighted,\n\t\t\tdatesDisabled: this.o.datesDisabled\n\t\t});\n\n\t\tthis._allow_update = false;\n\t\tthis.setViewMode(this.o.startView);\n\t\tthis._allow_update = true;\n\n\t\tthis.fillDow();\n\t\tthis.fillMonths();\n\n\t\tthis.update();\n\n\t\tif (this.isInline){\n\t\t\tthis.show();\n\t\t}\n\t};\n\n\tDatepicker.prototype = {\n\t\tconstructor: Datepicker,\n\n\t\t_resolveViewName: function(view){\n\t\t\t$.each(DPGlobal.viewModes, function(i, viewMode){\n\t\t\t\tif (view === i || $.inArray(view, viewMode.names) !== -1){\n\t\t\t\t\tview = i;\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn view;\n\t\t},\n\n\t\t_resolveDaysOfWeek: function(daysOfWeek){\n\t\t\tif (!$.isArray(daysOfWeek))\n\t\t\t\tdaysOfWeek = daysOfWeek.split(/[,\\s]*/);\n\t\t\treturn $.map(daysOfWeek, Number);\n\t\t},\n\n\t\t_check_template: function(tmp){\n\t\t\ttry {\n\t\t\t\t// If empty\n\t\t\t\tif (tmp === undefined || tmp === \"\") {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\t// If no html, everything ok\n\t\t\t\tif ((tmp.match(/[<>]/g) || []).length <= 0) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\t// Checking if html is fine\n\t\t\t\tvar jDom = $(tmp);\n\t\t\t\treturn jDom.length > 0;\n\t\t\t}\n\t\t\tcatch (ex) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\n\t\t_process_options: function(opts){\n\t\t\t// Store raw options for reference\n\t\t\tthis._o = $.extend({}, this._o, opts);\n\t\t\t// Processed options\n\t\t\tvar o = this.o = $.extend({}, this._o);\n\n\t\t\t// Check if \"de-DE\" style date is available, if not language should\n\t\t\t// fallback to 2 letter code eg \"de\"\n\t\t\tvar lang = o.language;\n\t\t\tif (!dates[lang]){\n\t\t\t\tlang = lang.split('-')[0];\n\t\t\t\tif (!dates[lang])\n\t\t\t\t\tlang = defaults.language;\n\t\t\t}\n\t\t\to.language = lang;\n\n\t\t\t// Retrieve view index from any aliases\n\t\t\to.startView = this._resolveViewName(o.startView);\n\t\t\to.minViewMode = this._resolveViewName(o.minViewMode);\n\t\t\to.maxViewMode = this._resolveViewName(o.maxViewMode);\n\n\t\t\t// Check view is between min and max\n\t\t\to.startView = Math.max(this.o.minViewMode, Math.min(this.o.maxViewMode, o.startView));\n\n\t\t\t// true, false, or Number > 0\n\t\t\tif (o.multidate !== true){\n\t\t\t\to.multidate = Number(o.multidate) || false;\n\t\t\t\tif (o.multidate !== false)\n\t\t\t\t\to.multidate = Math.max(0, o.multidate);\n\t\t\t}\n\t\t\to.multidateSeparator = String(o.multidateSeparator);\n\n\t\t\to.weekStart %= 7;\n\t\t\to.weekEnd = (o.weekStart + 6) % 7;\n\n\t\t\tvar format = DPGlobal.parseFormat(o.format);\n\t\t\tif (o.startDate !== -Infinity){\n\t\t\t\tif (!!o.startDate){\n\t\t\t\t\tif (o.startDate instanceof Date)\n\t\t\t\t\t\to.startDate = this._local_to_utc(this._zero_time(o.startDate));\n\t\t\t\t\telse\n\t\t\t\t\t\to.startDate = DPGlobal.parseDate(o.startDate, format, o.language, o.assumeNearbyYear);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\to.startDate = -Infinity;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (o.endDate !== Infinity){\n\t\t\t\tif (!!o.endDate){\n\t\t\t\t\tif (o.endDate instanceof Date)\n\t\t\t\t\t\to.endDate = this._local_to_utc(this._zero_time(o.endDate));\n\t\t\t\t\telse\n\t\t\t\t\t\to.endDate = DPGlobal.parseDate(o.endDate, format, o.language, o.assumeNearbyYear);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\to.endDate = Infinity;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\to.daysOfWeekDisabled = this._resolveDaysOfWeek(o.daysOfWeekDisabled||[]);\n\t\t\to.daysOfWeekHighlighted = this._resolveDaysOfWeek(o.daysOfWeekHighlighted||[]);\n\n\t\t\to.datesDisabled = o.datesDisabled||[];\n\t\t\tif (!$.isArray(o.datesDisabled)) {\n\t\t\t\to.datesDisabled = o.datesDisabled.split(',');\n\t\t\t}\n\t\t\to.datesDisabled = $.map(o.datesDisabled, function(d){\n\t\t\t\treturn DPGlobal.parseDate(d, format, o.language, o.assumeNearbyYear);\n\t\t\t});\n\n\t\t\tvar plc = String(o.orientation).toLowerCase().split(/\\s+/g),\n\t\t\t\t_plc = o.orientation.toLowerCase();\n\t\t\tplc = $.grep(plc, function(word){\n\t\t\t\treturn /^auto|left|right|top|bottom$/.test(word);\n\t\t\t});\n\t\t\to.orientation = {x: 'auto', y: 'auto'};\n\t\t\tif (!_plc || _plc === 'auto')\n\t\t\t\t; // no action\n\t\t\telse if (plc.length === 1){\n\t\t\t\tswitch (plc[0]){\n\t\t\t\t\tcase 'top':\n\t\t\t\t\tcase 'bottom':\n\t\t\t\t\t\to.orientation.y = plc[0];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'left':\n\t\t\t\t\tcase 'right':\n\t\t\t\t\t\to.orientation.x = plc[0];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\t_plc = $.grep(plc, function(word){\n\t\t\t\t\treturn /^left|right$/.test(word);\n\t\t\t\t});\n\t\t\t\to.orientation.x = _plc[0] || 'auto';\n\n\t\t\t\t_plc = $.grep(plc, function(word){\n\t\t\t\t\treturn /^top|bottom$/.test(word);\n\t\t\t\t});\n\t\t\t\to.orientation.y = _plc[0] || 'auto';\n\t\t\t}\n\t\t\tif (o.defaultViewDate instanceof Date || typeof o.defaultViewDate === 'string') {\n\t\t\t\to.defaultViewDate = DPGlobal.parseDate(o.defaultViewDate, format, o.language, o.assumeNearbyYear);\n\t\t\t} else if (o.defaultViewDate) {\n\t\t\t\tvar year = o.defaultViewDate.year || new Date().getFullYear();\n\t\t\t\tvar month = o.defaultViewDate.month || 0;\n\t\t\t\tvar day = o.defaultViewDate.day || 1;\n\t\t\t\to.defaultViewDate = UTCDate(year, month, day);\n\t\t\t} else {\n\t\t\t\to.defaultViewDate = UTCToday();\n\t\t\t}\n\t\t},\n\t\t_applyEvents: function(evs){\n\t\t\tfor (var i=0, el, ch, ev; i < evs.length; i++){\n\t\t\t\tel = evs[i][0];\n\t\t\t\tif (evs[i].length === 2){\n\t\t\t\t\tch = undefined;\n\t\t\t\t\tev = evs[i][1];\n\t\t\t\t} else if (evs[i].length === 3){\n\t\t\t\t\tch = evs[i][1];\n\t\t\t\t\tev = evs[i][2];\n\t\t\t\t}\n\t\t\t\tel.on(ev, ch);\n\t\t\t}\n\t\t},\n\t\t_unapplyEvents: function(evs){\n\t\t\tfor (var i=0, el, ev, ch; i < evs.length; i++){\n\t\t\t\tel = evs[i][0];\n\t\t\t\tif (evs[i].length === 2){\n\t\t\t\t\tch = undefined;\n\t\t\t\t\tev = evs[i][1];\n\t\t\t\t} else if (evs[i].length === 3){\n\t\t\t\t\tch = evs[i][1];\n\t\t\t\t\tev = evs[i][2];\n\t\t\t\t}\n\t\t\t\tel.off(ev, ch);\n\t\t\t}\n\t\t},\n\t\t_buildEvents: function(){\n            var events = {\n                keyup: $.proxy(function(e){\n                    if ($.inArray(e.keyCode, [27, 37, 39, 38, 40, 32, 13, 9]) === -1)\n                        this.update();\n                }, this),\n                keydown: $.proxy(this.keydown, this),\n                paste: $.proxy(this.paste, this)\n            };\n\n            if (this.o.showOnFocus === true) {\n                events.focus = $.proxy(this.show, this);\n            }\n\n            if (this.isInput) { // single input\n                this._events = [\n                    [this.element, events]\n                ];\n            }\n            // component: input + button\n            else if (this.component && this.inputField.length) {\n                this._events = [\n                    // For components that are not readonly, allow keyboard nav\n                    [this.inputField, events],\n                    [this.component, {\n                        click: $.proxy(this.show, this)\n                    }]\n                ];\n            }\n\t\t\telse {\n\t\t\t\tthis._events = [\n\t\t\t\t\t[this.element, {\n\t\t\t\t\t\tclick: $.proxy(this.show, this),\n\t\t\t\t\t\tkeydown: $.proxy(this.keydown, this)\n\t\t\t\t\t}]\n\t\t\t\t];\n\t\t\t}\n\t\t\tthis._events.push(\n\t\t\t\t// Component: listen for blur on element descendants\n\t\t\t\t[this.element, '*', {\n\t\t\t\t\tblur: $.proxy(function(e){\n\t\t\t\t\t\tthis._focused_from = e.target;\n\t\t\t\t\t}, this)\n\t\t\t\t}],\n\t\t\t\t// Input: listen for blur on element\n\t\t\t\t[this.element, {\n\t\t\t\t\tblur: $.proxy(function(e){\n\t\t\t\t\t\tthis._focused_from = e.target;\n\t\t\t\t\t}, this)\n\t\t\t\t}]\n\t\t\t);\n\n\t\t\tif (this.o.immediateUpdates) {\n\t\t\t\t// Trigger input updates immediately on changed year/month\n\t\t\t\tthis._events.push([this.element, {\n\t\t\t\t\t'changeYear changeMonth': $.proxy(function(e){\n\t\t\t\t\t\tthis.update(e.date);\n\t\t\t\t\t}, this)\n\t\t\t\t}]);\n\t\t\t}\n\n\t\t\tthis._secondaryEvents = [\n\t\t\t\t[this.picker, {\n\t\t\t\t\tclick: $.proxy(this.click, this)\n\t\t\t\t}],\n\t\t\t\t[this.picker, '.prev, .next', {\n\t\t\t\t\tclick: $.proxy(this.navArrowsClick, this)\n\t\t\t\t}],\n\t\t\t\t[this.picker, '.day:not(.disabled)', {\n\t\t\t\t\tclick: $.proxy(this.dayCellClick, this)\n\t\t\t\t}],\n\t\t\t\t[$(window), {\n\t\t\t\t\tresize: $.proxy(this.place, this)\n\t\t\t\t}],\n\t\t\t\t[$(document), {\n\t\t\t\t\t'mousedown touchstart': $.proxy(function(e){\n\t\t\t\t\t\t// Clicked outside the datepicker, hide it\n\t\t\t\t\t\tif (!(\n\t\t\t\t\t\t\tthis.element.is(e.target) ||\n\t\t\t\t\t\t\tthis.element.find(e.target).length ||\n\t\t\t\t\t\t\tthis.picker.is(e.target) ||\n\t\t\t\t\t\t\tthis.picker.find(e.target).length ||\n\t\t\t\t\t\t\tthis.isInline\n\t\t\t\t\t\t)){\n\t\t\t\t\t\t\tthis.hide();\n\t\t\t\t\t\t}\n\t\t\t\t\t}, this)\n\t\t\t\t}]\n\t\t\t];\n\t\t},\n\t\t_attachEvents: function(){\n\t\t\tthis._detachEvents();\n\t\t\tthis._applyEvents(this._events);\n\t\t},\n\t\t_detachEvents: function(){\n\t\t\tthis._unapplyEvents(this._events);\n\t\t},\n\t\t_attachSecondaryEvents: function(){\n\t\t\tthis._detachSecondaryEvents();\n\t\t\tthis._applyEvents(this._secondaryEvents);\n\t\t},\n\t\t_detachSecondaryEvents: function(){\n\t\t\tthis._unapplyEvents(this._secondaryEvents);\n\t\t},\n\t\t_trigger: function(event, altdate){\n\t\t\tvar date = altdate || this.dates.get(-1),\n\t\t\t\tlocal_date = this._utc_to_local(date);\n\n\t\t\tthis.element.trigger({\n\t\t\t\ttype: event,\n\t\t\t\tdate: local_date,\n\t\t\t\tviewMode: this.viewMode,\n\t\t\t\tdates: $.map(this.dates, this._utc_to_local),\n\t\t\t\tformat: $.proxy(function(ix, format){\n\t\t\t\t\tif (arguments.length === 0){\n\t\t\t\t\t\tix = this.dates.length - 1;\n\t\t\t\t\t\tformat = this.o.format;\n\t\t\t\t\t} else if (typeof ix === 'string'){\n\t\t\t\t\t\tformat = ix;\n\t\t\t\t\t\tix = this.dates.length - 1;\n\t\t\t\t\t}\n\t\t\t\t\tformat = format || this.o.format;\n\t\t\t\t\tvar date = this.dates.get(ix);\n\t\t\t\t\treturn DPGlobal.formatDate(date, format, this.o.language);\n\t\t\t\t}, this)\n\t\t\t});\n\t\t},\n\n\t\tshow: function(){\n\t\t\tif (this.inputField.is(':disabled') || (this.inputField.prop('readonly') && this.o.enableOnReadonly === false))\n\t\t\t\treturn;\n\t\t\tif (!this.isInline)\n\t\t\t\tthis.picker.appendTo(this.o.container);\n\t\t\tthis.place();\n\t\t\tthis.picker.show();\n\t\t\tthis._attachSecondaryEvents();\n\t\t\tthis._trigger('show');\n\t\t\tif ((window.navigator.msMaxTouchPoints || 'ontouchstart' in document) && this.o.disableTouchKeyboard) {\n\t\t\t\t$(this.element).blur();\n\t\t\t}\n\t\t\treturn this;\n\t\t},\n\n\t\thide: function(){\n\t\t\tif (this.isInline || !this.picker.is(':visible'))\n\t\t\t\treturn this;\n\t\t\tthis.focusDate = null;\n\t\t\tthis.picker.hide().detach();\n\t\t\tthis._detachSecondaryEvents();\n\t\t\tthis.setViewMode(this.o.startView);\n\n\t\t\tif (this.o.forceParse && this.inputField.val())\n\t\t\t\tthis.setValue();\n\t\t\tthis._trigger('hide');\n\t\t\treturn this;\n\t\t},\n\n\t\tdestroy: function(){\n\t\t\tthis.hide();\n\t\t\tthis._detachEvents();\n\t\t\tthis._detachSecondaryEvents();\n\t\t\tthis.picker.remove();\n\t\t\tdelete this.element.data().datepicker;\n\t\t\tif (!this.isInput){\n\t\t\t\tdelete this.element.data().date;\n\t\t\t}\n\t\t\treturn this;\n\t\t},\n\n\t\tpaste: function(e){\n\t\t\tvar dateString;\n\t\t\tif (e.originalEvent.clipboardData && e.originalEvent.clipboardData.types\n\t\t\t\t&& $.inArray('text/plain', e.originalEvent.clipboardData.types) !== -1) {\n\t\t\t\tdateString = e.originalEvent.clipboardData.getData('text/plain');\n\t\t\t} else if (window.clipboardData) {\n\t\t\t\tdateString = window.clipboardData.getData('Text');\n\t\t\t} else {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.setDate(dateString);\n\t\t\tthis.update();\n\t\t\te.preventDefault();\n\t\t},\n\n\t\t_utc_to_local: function(utc){\n\t\t\tif (!utc) {\n\t\t\t\treturn utc;\n\t\t\t}\n\n\t\t\tvar local = new Date(utc.getTime() + (utc.getTimezoneOffset() * 60000));\n\n\t\t\tif (local.getTimezoneOffset() !== utc.getTimezoneOffset()) {\n\t\t\t\tlocal = new Date(utc.getTime() + (local.getTimezoneOffset() * 60000));\n\t\t\t}\n\n\t\t\treturn local;\n\t\t},\n\t\t_local_to_utc: function(local){\n\t\t\treturn local && new Date(local.getTime() - (local.getTimezoneOffset()*60000));\n\t\t},\n\t\t_zero_time: function(local){\n\t\t\treturn local && new Date(local.getFullYear(), local.getMonth(), local.getDate());\n\t\t},\n\t\t_zero_utc_time: function(utc){\n\t\t\treturn utc && UTCDate(utc.getUTCFullYear(), utc.getUTCMonth(), utc.getUTCDate());\n\t\t},\n\n\t\tgetDates: function(){\n\t\t\treturn $.map(this.dates, this._utc_to_local);\n\t\t},\n\n\t\tgetUTCDates: function(){\n\t\t\treturn $.map(this.dates, function(d){\n\t\t\t\treturn new Date(d);\n\t\t\t});\n\t\t},\n\n\t\tgetDate: function(){\n\t\t\treturn this._utc_to_local(this.getUTCDate());\n\t\t},\n\n\t\tgetUTCDate: function(){\n\t\t\tvar selected_date = this.dates.get(-1);\n\t\t\tif (selected_date !== undefined) {\n\t\t\t\treturn new Date(selected_date);\n\t\t\t} else {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t},\n\n\t\tclearDates: function(){\n\t\t\tthis.inputField.val('');\n\t\t\tthis.update();\n\t\t\tthis._trigger('changeDate');\n\n\t\t\tif (this.o.autoclose) {\n\t\t\t\tthis.hide();\n\t\t\t}\n\t\t},\n\n\t\tsetDates: function(){\n\t\t\tvar args = $.isArray(arguments[0]) ? arguments[0] : arguments;\n\t\t\tthis.update.apply(this, args);\n\t\t\tthis._trigger('changeDate');\n\t\t\tthis.setValue();\n\t\t\treturn this;\n\t\t},\n\n\t\tsetUTCDates: function(){\n\t\t\tvar args = $.isArray(arguments[0]) ? arguments[0] : arguments;\n\t\t\tthis.setDates.apply(this, $.map(args, this._utc_to_local));\n\t\t\treturn this;\n\t\t},\n\n\t\tsetDate: alias('setDates'),\n\t\tsetUTCDate: alias('setUTCDates'),\n\t\tremove: alias('destroy', 'Method `remove` is deprecated and will be removed in version 2.0. Use `destroy` instead'),\n\n\t\tsetValue: function(){\n\t\t\tvar formatted = this.getFormattedDate();\n\t\t\tthis.inputField.val(formatted);\n\t\t\treturn this;\n\t\t},\n\n\t\tgetFormattedDate: function(format){\n\t\t\tif (format === undefined)\n\t\t\t\tformat = this.o.format;\n\n\t\t\tvar lang = this.o.language;\n\t\t\treturn $.map(this.dates, function(d){\n\t\t\t\treturn DPGlobal.formatDate(d, format, lang);\n\t\t\t}).join(this.o.multidateSeparator);\n\t\t},\n\n\t\tgetStartDate: function(){\n\t\t\treturn this.o.startDate;\n\t\t},\n\n\t\tsetStartDate: function(startDate){\n\t\t\tthis._process_options({startDate: startDate});\n\t\t\tthis.update();\n\t\t\tthis.updateNavArrows();\n\t\t\treturn this;\n\t\t},\n\n\t\tgetEndDate: function(){\n\t\t\treturn this.o.endDate;\n\t\t},\n\n\t\tsetEndDate: function(endDate){\n\t\t\tthis._process_options({endDate: endDate});\n\t\t\tthis.update();\n\t\t\tthis.updateNavArrows();\n\t\t\treturn this;\n\t\t},\n\n\t\tsetDaysOfWeekDisabled: function(daysOfWeekDisabled){\n\t\t\tthis._process_options({daysOfWeekDisabled: daysOfWeekDisabled});\n\t\t\tthis.update();\n\t\t\treturn this;\n\t\t},\n\n\t\tsetDaysOfWeekHighlighted: function(daysOfWeekHighlighted){\n\t\t\tthis._process_options({daysOfWeekHighlighted: daysOfWeekHighlighted});\n\t\t\tthis.update();\n\t\t\treturn this;\n\t\t},\n\n\t\tsetDatesDisabled: function(datesDisabled){\n\t\t\tthis._process_options({datesDisabled: datesDisabled});\n\t\t\tthis.update();\n\t\t\treturn this;\n\t\t},\n\n\t\tplace: function(){\n\t\t\tif (this.isInline)\n\t\t\t\treturn this;\n\t\t\tvar calendarWidth = this.picker.outerWidth(),\n\t\t\t\tcalendarHeight = this.picker.outerHeight(),\n\t\t\t\tvisualPadding = 10,\n\t\t\t\tcontainer = $(this.o.container),\n\t\t\t\twindowWidth = container.width(),\n\t\t\t\tscrollTop = this.o.container === 'body' ? $(document).scrollTop() : container.scrollTop(),\n\t\t\t\tappendOffset = container.offset();\n\n\t\t\tvar parentsZindex = [0];\n\t\t\tthis.element.parents().each(function(){\n\t\t\t\tvar itemZIndex = $(this).css('z-index');\n\t\t\t\tif (itemZIndex !== 'auto' && Number(itemZIndex) !== 0) parentsZindex.push(Number(itemZIndex));\n\t\t\t});\n\t\t\tvar zIndex = Math.max.apply(Math, parentsZindex) + this.o.zIndexOffset;\n\t\t\tvar offset = this.component ? this.component.parent().offset() : this.element.offset();\n\t\t\tvar height = this.component ? this.component.outerHeight(true) : this.element.outerHeight(false);\n\t\t\tvar width = this.component ? this.component.outerWidth(true) : this.element.outerWidth(false);\n\t\t\tvar left = offset.left - appendOffset.left;\n\t\t\tvar top = offset.top - appendOffset.top;\n\n\t\t\tif (this.o.container !== 'body') {\n\t\t\t\ttop += scrollTop;\n\t\t\t}\n\n\t\t\tthis.picker.removeClass(\n\t\t\t\t'datepicker-orient-top datepicker-orient-bottom '+\n\t\t\t\t'datepicker-orient-right datepicker-orient-left'\n\t\t\t);\n\n\t\t\tif (this.o.orientation.x !== 'auto'){\n\t\t\t\tthis.picker.addClass('datepicker-orient-' + this.o.orientation.x);\n\t\t\t\tif (this.o.orientation.x === 'right')\n\t\t\t\t\tleft -= calendarWidth - width;\n\t\t\t}\n\t\t\t// auto x orientation is best-placement: if it crosses a window\n\t\t\t// edge, fudge it sideways\n\t\t\telse {\n\t\t\t\tif (offset.left < 0) {\n\t\t\t\t\t// component is outside the window on the left side. Move it into visible range\n\t\t\t\t\tthis.picker.addClass('datepicker-orient-left');\n\t\t\t\t\tleft -= offset.left - visualPadding;\n\t\t\t\t} else if (left + calendarWidth > windowWidth) {\n\t\t\t\t\t// the calendar passes the widow right edge. Align it to component right side\n\t\t\t\t\tthis.picker.addClass('datepicker-orient-right');\n\t\t\t\t\tleft += width - calendarWidth;\n\t\t\t\t} else {\n\t\t\t\t\tif (this.o.rtl) {\n\t\t\t\t\t\t// Default to right\n\t\t\t\t\t\tthis.picker.addClass('datepicker-orient-right');\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Default to left\n\t\t\t\t\t\tthis.picker.addClass('datepicker-orient-left');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// auto y orientation is best-situation: top or bottom, no fudging,\n\t\t\t// decision based on which shows more of the calendar\n\t\t\tvar yorient = this.o.orientation.y,\n\t\t\t\ttop_overflow;\n\t\t\tif (yorient === 'auto'){\n\t\t\t\ttop_overflow = -scrollTop + top - calendarHeight;\n\t\t\t\tyorient = top_overflow < 0 ? 'bottom' : 'top';\n\t\t\t}\n\n\t\t\tthis.picker.addClass('datepicker-orient-' + yorient);\n\t\t\tif (yorient === 'top')\n\t\t\t\ttop -= calendarHeight + parseInt(this.picker.css('padding-top'));\n\t\t\telse\n\t\t\t\ttop += height;\n\n\t\t\tif (this.o.rtl) {\n\t\t\t\tvar right = windowWidth - (left + width);\n\t\t\t\tthis.picker.css({\n\t\t\t\t\ttop: top,\n\t\t\t\t\tright: right,\n\t\t\t\t\tzIndex: zIndex\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tthis.picker.css({\n\t\t\t\t\ttop: top,\n\t\t\t\t\tleft: left,\n\t\t\t\t\tzIndex: zIndex\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn this;\n\t\t},\n\n\t\t_allow_update: true,\n\t\tupdate: function(){\n\t\t\tif (!this._allow_update)\n\t\t\t\treturn this;\n\n\t\t\tvar oldDates = this.dates.copy(),\n\t\t\t\tdates = [],\n\t\t\t\tfromArgs = false;\n\t\t\tif (arguments.length){\n\t\t\t\t$.each(arguments, $.proxy(function(i, date){\n\t\t\t\t\tif (date instanceof Date)\n\t\t\t\t\t\tdate = this._local_to_utc(date);\n\t\t\t\t\tdates.push(date);\n\t\t\t\t}, this));\n\t\t\t\tfromArgs = true;\n\t\t\t} else {\n\t\t\t\tdates = this.isInput\n\t\t\t\t\t\t? this.element.val()\n\t\t\t\t\t\t: this.element.data('date') || this.inputField.val();\n\t\t\t\tif (dates && this.o.multidate)\n\t\t\t\t\tdates = dates.split(this.o.multidateSeparator);\n\t\t\t\telse\n\t\t\t\t\tdates = [dates];\n\t\t\t\tdelete this.element.data().date;\n\t\t\t}\n\n\t\t\tdates = $.map(dates, $.proxy(function(date){\n\t\t\t\treturn DPGlobal.parseDate(date, this.o.format, this.o.language, this.o.assumeNearbyYear);\n\t\t\t}, this));\n\t\t\tdates = $.grep(dates, $.proxy(function(date){\n\t\t\t\treturn (\n\t\t\t\t\t!this.dateWithinRange(date) ||\n\t\t\t\t\t!date\n\t\t\t\t);\n\t\t\t}, this), true);\n\t\t\tthis.dates.replace(dates);\n\n\t\t\tif (this.o.updateViewDate) {\n\t\t\t\tif (this.dates.length)\n\t\t\t\t\tthis.viewDate = new Date(this.dates.get(-1));\n\t\t\t\telse if (this.viewDate < this.o.startDate)\n\t\t\t\t\tthis.viewDate = new Date(this.o.startDate);\n\t\t\t\telse if (this.viewDate > this.o.endDate)\n\t\t\t\t\tthis.viewDate = new Date(this.o.endDate);\n\t\t\t\telse\n\t\t\t\t\tthis.viewDate = this.o.defaultViewDate;\n\t\t\t}\n\n\t\t\tif (fromArgs){\n\t\t\t\t// setting date by clicking\n\t\t\t\tthis.setValue();\n\t\t\t\tthis.element.change();\n\t\t\t}\n\t\t\telse if (this.dates.length){\n\t\t\t\t// setting date by typing\n\t\t\t\tif (String(oldDates) !== String(this.dates) && fromArgs) {\n\t\t\t\t\tthis._trigger('changeDate');\n\t\t\t\t\tthis.element.change();\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!this.dates.length && oldDates.length) {\n\t\t\t\tthis._trigger('clearDate');\n\t\t\t\tthis.element.change();\n\t\t\t}\n\n\t\t\tthis.fill();\n\t\t\treturn this;\n\t\t},\n\n\t\tfillDow: function(){\n      if (this.o.showWeekDays) {\n\t\t\tvar dowCnt = this.o.weekStart,\n\t\t\t\thtml = '<tr>';\n\t\t\tif (this.o.calendarWeeks){\n\t\t\t\thtml += '<th class=\"cw\">&#160;</th>';\n\t\t\t}\n\t\t\twhile (dowCnt < this.o.weekStart + 7){\n\t\t\t\thtml += '<th class=\"dow';\n        if ($.inArray(dowCnt, this.o.daysOfWeekDisabled) !== -1)\n          html += ' disabled';\n        html += '\">'+dates[this.o.language].daysMin[(dowCnt++)%7]+'</th>';\n\t\t\t}\n\t\t\thtml += '</tr>';\n\t\t\tthis.picker.find('.datepicker-days thead').append(html);\n      }\n\t\t},\n\n\t\tfillMonths: function(){\n      var localDate = this._utc_to_local(this.viewDate);\n\t\t\tvar html = '';\n\t\t\tvar focused;\n\t\t\tfor (var i = 0; i < 12; i++){\n\t\t\t\tfocused = localDate && localDate.getMonth() === i ? ' focused' : '';\n\t\t\t\thtml += '<span class=\"month' + focused + '\">' + dates[this.o.language].monthsShort[i] + '</span>';\n\t\t\t}\n\t\t\tthis.picker.find('.datepicker-months td').html(html);\n\t\t},\n\n\t\tsetRange: function(range){\n\t\t\tif (!range || !range.length)\n\t\t\t\tdelete this.range;\n\t\t\telse\n\t\t\t\tthis.range = $.map(range, function(d){\n\t\t\t\t\treturn d.valueOf();\n\t\t\t\t});\n\t\t\tthis.fill();\n\t\t},\n\n\t\tgetClassNames: function(date){\n\t\t\tvar cls = [],\n\t\t\t\tyear = this.viewDate.getUTCFullYear(),\n\t\t\t\tmonth = this.viewDate.getUTCMonth(),\n\t\t\t\ttoday = UTCToday();\n\t\t\tif (date.getUTCFullYear() < year || (date.getUTCFullYear() === year && date.getUTCMonth() < month)){\n\t\t\t\tcls.push('old');\n\t\t\t} else if (date.getUTCFullYear() > year || (date.getUTCFullYear() === year && date.getUTCMonth() > month)){\n\t\t\t\tcls.push('new');\n\t\t\t}\n\t\t\tif (this.focusDate && date.valueOf() === this.focusDate.valueOf())\n\t\t\t\tcls.push('focused');\n\t\t\t// Compare internal UTC date with UTC today, not local today\n\t\t\tif (this.o.todayHighlight && isUTCEquals(date, today)) {\n\t\t\t\tcls.push('today');\n\t\t\t}\n\t\t\tif (this.dates.contains(date) !== -1)\n\t\t\t\tcls.push('active');\n\t\t\tif (!this.dateWithinRange(date)){\n\t\t\t\tcls.push('disabled');\n\t\t\t}\n\t\t\tif (this.dateIsDisabled(date)){\n\t\t\t\tcls.push('disabled', 'disabled-date');\n\t\t\t}\n\t\t\tif ($.inArray(date.getUTCDay(), this.o.daysOfWeekHighlighted) !== -1){\n\t\t\t\tcls.push('highlighted');\n\t\t\t}\n\n\t\t\tif (this.range){\n\t\t\t\tif (date > this.range[0] && date < this.range[this.range.length-1]){\n\t\t\t\t\tcls.push('range');\n\t\t\t\t}\n\t\t\t\tif ($.inArray(date.valueOf(), this.range) !== -1){\n\t\t\t\t\tcls.push('selected');\n\t\t\t\t}\n\t\t\t\tif (date.valueOf() === this.range[0]){\n          cls.push('range-start');\n        }\n        if (date.valueOf() === this.range[this.range.length-1]){\n          cls.push('range-end');\n        }\n\t\t\t}\n\t\t\treturn cls;\n\t\t},\n\n\t\t_fill_yearsView: function(selector, cssClass, factor, year, startYear, endYear, beforeFn){\n\t\t\tvar html = '';\n\t\t\tvar step = factor / 10;\n\t\t\tvar view = this.picker.find(selector);\n\t\t\tvar startVal = Math.floor(year / factor) * factor;\n\t\t\tvar endVal = startVal + step * 9;\n\t\t\tvar focusedVal = Math.floor(this.viewDate.getFullYear() / step) * step;\n\t\t\tvar selected = $.map(this.dates, function(d){\n\t\t\t\treturn Math.floor(d.getUTCFullYear() / step) * step;\n\t\t\t});\n\n\t\t\tvar classes, tooltip, before;\n\t\t\tfor (var currVal = startVal - step; currVal <= endVal + step; currVal += step) {\n\t\t\t\tclasses = [cssClass];\n\t\t\t\ttooltip = null;\n\n\t\t\t\tif (currVal === startVal - step) {\n\t\t\t\t\tclasses.push('old');\n\t\t\t\t} else if (currVal === endVal + step) {\n\t\t\t\t\tclasses.push('new');\n\t\t\t\t}\n\t\t\t\tif ($.inArray(currVal, selected) !== -1) {\n\t\t\t\t\tclasses.push('active');\n\t\t\t\t}\n\t\t\t\tif (currVal < startYear || currVal > endYear) {\n\t\t\t\t\tclasses.push('disabled');\n\t\t\t\t}\n\t\t\t\tif (currVal === focusedVal) {\n\t\t\t\t  classes.push('focused');\n        }\n\n\t\t\t\tif (beforeFn !== $.noop) {\n\t\t\t\t\tbefore = beforeFn(new Date(currVal, 0, 1));\n\t\t\t\t\tif (before === undefined) {\n\t\t\t\t\t\tbefore = {};\n\t\t\t\t\t} else if (typeof before === 'boolean') {\n\t\t\t\t\t\tbefore = {enabled: before};\n\t\t\t\t\t} else if (typeof before === 'string') {\n\t\t\t\t\t\tbefore = {classes: before};\n\t\t\t\t\t}\n\t\t\t\t\tif (before.enabled === false) {\n\t\t\t\t\t\tclasses.push('disabled');\n\t\t\t\t\t}\n\t\t\t\t\tif (before.classes) {\n\t\t\t\t\t\tclasses = classes.concat(before.classes.split(/\\s+/));\n\t\t\t\t\t}\n\t\t\t\t\tif (before.tooltip) {\n\t\t\t\t\t\ttooltip = before.tooltip;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\thtml += '<span class=\"' + classes.join(' ') + '\"' + (tooltip ? ' title=\"' + tooltip + '\"' : '') + '>' + currVal + '</span>';\n\t\t\t}\n\n\t\t\tview.find('.datepicker-switch').text(startVal + '-' + endVal);\n\t\t\tview.find('td').html(html);\n\t\t},\n\n\t\tfill: function(){\n\t\t\tvar d = new Date(this.viewDate),\n\t\t\t\tyear = d.getUTCFullYear(),\n\t\t\t\tmonth = d.getUTCMonth(),\n\t\t\t\tstartYear = this.o.startDate !== -Infinity ? this.o.startDate.getUTCFullYear() : -Infinity,\n\t\t\t\tstartMonth = this.o.startDate !== -Infinity ? this.o.startDate.getUTCMonth() : -Infinity,\n\t\t\t\tendYear = this.o.endDate !== Infinity ? this.o.endDate.getUTCFullYear() : Infinity,\n\t\t\t\tendMonth = this.o.endDate !== Infinity ? this.o.endDate.getUTCMonth() : Infinity,\n\t\t\t\ttodaytxt = dates[this.o.language].today || dates['en'].today || '',\n\t\t\t\tcleartxt = dates[this.o.language].clear || dates['en'].clear || '',\n        titleFormat = dates[this.o.language].titleFormat || dates['en'].titleFormat,\n        todayDate = UTCToday(),\n        titleBtnVisible = (this.o.todayBtn === true || this.o.todayBtn === 'linked') && todayDate >= this.o.startDate && todayDate <= this.o.endDate && !this.weekOfDateIsDisabled(todayDate),\n\t\t\t\ttooltip,\n\t\t\t\tbefore;\n\t\t\tif (isNaN(year) || isNaN(month))\n\t\t\t\treturn;\n\t\t\tthis.picker.find('.datepicker-days .datepicker-switch')\n\t\t\t\t\t\t.text(DPGlobal.formatDate(d, titleFormat, this.o.language));\n\t\t\tthis.picker.find('tfoot .today')\n\t\t\t\t\t\t.text(todaytxt)\n            .css('display', titleBtnVisible ? 'table-cell' : 'none');\n\t\t\tthis.picker.find('tfoot .clear')\n\t\t\t\t\t\t.text(cleartxt)\n\t\t\t\t\t\t.css('display', this.o.clearBtn === true ? 'table-cell' : 'none');\n\t\t\tthis.picker.find('thead .datepicker-title')\n\t\t\t\t\t\t.text(this.o.title)\n\t\t\t\t\t\t.css('display', typeof this.o.title === 'string' && this.o.title !== '' ? 'table-cell' : 'none');\n\t\t\tthis.updateNavArrows();\n\t\t\tthis.fillMonths();\n\t\t\tvar prevMonth = UTCDate(year, month, 0),\n\t\t\t\tday = prevMonth.getUTCDate();\n\t\t\tprevMonth.setUTCDate(day - (prevMonth.getUTCDay() - this.o.weekStart + 7)%7);\n\t\t\tvar nextMonth = new Date(prevMonth);\n\t\t\tif (prevMonth.getUTCFullYear() < 100){\n        nextMonth.setUTCFullYear(prevMonth.getUTCFullYear());\n      }\n\t\t\tnextMonth.setUTCDate(nextMonth.getUTCDate() + 42);\n\t\t\tnextMonth = nextMonth.valueOf();\n\t\t\tvar html = [];\n\t\t\tvar weekDay, clsName;\n\t\t\twhile (prevMonth.valueOf() < nextMonth){\n\t\t\t\tweekDay = prevMonth.getUTCDay();\n\t\t\t\tif (weekDay === this.o.weekStart){\n\t\t\t\t\thtml.push('<tr>');\n\t\t\t\t\tif (this.o.calendarWeeks){\n\t\t\t\t\t\t// ISO 8601: First week contains first thursday.\n\t\t\t\t\t\t// ISO also states week starts on Monday, but we can be more abstract here.\n\t\t\t\t\t\tvar\n\t\t\t\t\t\t\t// Start of current week: based on weekstart/current date\n\t\t\t\t\t\t\tws = new Date(+prevMonth + (this.o.weekStart - weekDay - 7) % 7 * 864e5),\n\t\t\t\t\t\t\t// Thursday of this week\n\t\t\t\t\t\t\tth = new Date(Number(ws) + (7 + 4 - ws.getUTCDay()) % 7 * 864e5),\n\t\t\t\t\t\t\t// First Thursday of year, year from thursday\n\t\t\t\t\t\t\tyth = new Date(Number(yth = UTCDate(th.getUTCFullYear(), 0, 1)) + (7 + 4 - yth.getUTCDay()) % 7 * 864e5),\n\t\t\t\t\t\t\t// Calendar week: ms between thursdays, div ms per day, div 7 days\n\t\t\t\t\t\t\tcalWeek = (th - yth) / 864e5 / 7 + 1;\n\t\t\t\t\t\thtml.push('<td class=\"cw\">'+ calWeek +'</td>');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tclsName = this.getClassNames(prevMonth);\n\t\t\t\tclsName.push('day');\n\n\t\t\t\tvar content = prevMonth.getUTCDate();\n\n\t\t\t\tif (this.o.beforeShowDay !== $.noop){\n\t\t\t\t\tbefore = this.o.beforeShowDay(this._utc_to_local(prevMonth));\n\t\t\t\t\tif (before === undefined)\n\t\t\t\t\t\tbefore = {};\n\t\t\t\t\telse if (typeof before === 'boolean')\n\t\t\t\t\t\tbefore = {enabled: before};\n\t\t\t\t\telse if (typeof before === 'string')\n\t\t\t\t\t\tbefore = {classes: before};\n\t\t\t\t\tif (before.enabled === false)\n\t\t\t\t\t\tclsName.push('disabled');\n\t\t\t\t\tif (before.classes)\n\t\t\t\t\t\tclsName = clsName.concat(before.classes.split(/\\s+/));\n\t\t\t\t\tif (before.tooltip)\n\t\t\t\t\t\ttooltip = before.tooltip;\n\t\t\t\t\tif (before.content)\n\t\t\t\t\t\tcontent = before.content;\n\t\t\t\t}\n\n\t\t\t\t//Check if uniqueSort exists (supported by jquery >=1.12 and >=2.2)\n\t\t\t\t//Fallback to unique function for older jquery versions\n\t\t\t\tif ($.isFunction($.uniqueSort)) {\n\t\t\t\t\tclsName = $.uniqueSort(clsName);\n\t\t\t\t} else {\n\t\t\t\t\tclsName = $.unique(clsName);\n\t\t\t\t}\n\n\t\t\t\thtml.push('<td class=\"'+clsName.join(' ')+'\"' + (tooltip ? ' title=\"'+tooltip+'\"' : '') + ' data-date=\"' + prevMonth.getTime().toString() + '\">' + content + '</td>');\n\t\t\t\ttooltip = null;\n\t\t\t\tif (weekDay === this.o.weekEnd){\n\t\t\t\t\thtml.push('</tr>');\n\t\t\t\t}\n\t\t\t\tprevMonth.setUTCDate(prevMonth.getUTCDate() + 1);\n\t\t\t}\n\t\t\tthis.picker.find('.datepicker-days tbody').html(html.join(''));\n\n\t\t\tvar monthsTitle = dates[this.o.language].monthsTitle || dates['en'].monthsTitle || 'Months';\n\t\t\tvar months = this.picker.find('.datepicker-months')\n\t\t\t\t\t\t.find('.datepicker-switch')\n\t\t\t\t\t\t\t.text(this.o.maxViewMode < 2 ? monthsTitle : year)\n\t\t\t\t\t\t\t.end()\n\t\t\t\t\t\t.find('tbody span').removeClass('active');\n\n\t\t\t$.each(this.dates, function(i, d){\n\t\t\t\tif (d.getUTCFullYear() === year)\n\t\t\t\t\tmonths.eq(d.getUTCMonth()).addClass('active');\n\t\t\t});\n\n\t\t\tif (year < startYear || year > endYear){\n\t\t\t\tmonths.addClass('disabled');\n\t\t\t}\n\t\t\tif (year === startYear){\n\t\t\t\tmonths.slice(0, startMonth).addClass('disabled');\n\t\t\t}\n\t\t\tif (year === endYear){\n\t\t\t\tmonths.slice(endMonth+1).addClass('disabled');\n\t\t\t}\n\n\t\t\tif (this.o.beforeShowMonth !== $.noop){\n\t\t\t\tvar that = this;\n\t\t\t\t$.each(months, function(i, month){\n          var moDate = new Date(year, i, 1);\n          var before = that.o.beforeShowMonth(moDate);\n\t\t\t\t\tif (before === undefined)\n\t\t\t\t\t\tbefore = {};\n\t\t\t\t\telse if (typeof before === 'boolean')\n\t\t\t\t\t\tbefore = {enabled: before};\n\t\t\t\t\telse if (typeof before === 'string')\n\t\t\t\t\t\tbefore = {classes: before};\n\t\t\t\t\tif (before.enabled === false && !$(month).hasClass('disabled'))\n\t\t\t\t\t    $(month).addClass('disabled');\n\t\t\t\t\tif (before.classes)\n\t\t\t\t\t    $(month).addClass(before.classes);\n\t\t\t\t\tif (before.tooltip)\n\t\t\t\t\t    $(month).prop('title', before.tooltip);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Generating decade/years picker\n\t\t\tthis._fill_yearsView(\n\t\t\t\t'.datepicker-years',\n\t\t\t\t'year',\n\t\t\t\t10,\n\t\t\t\tyear,\n\t\t\t\tstartYear,\n\t\t\t\tendYear,\n\t\t\t\tthis.o.beforeShowYear\n\t\t\t);\n\n\t\t\t// Generating century/decades picker\n\t\t\tthis._fill_yearsView(\n\t\t\t\t'.datepicker-decades',\n\t\t\t\t'decade',\n\t\t\t\t100,\n\t\t\t\tyear,\n\t\t\t\tstartYear,\n\t\t\t\tendYear,\n\t\t\t\tthis.o.beforeShowDecade\n\t\t\t);\n\n\t\t\t// Generating millennium/centuries picker\n\t\t\tthis._fill_yearsView(\n\t\t\t\t'.datepicker-centuries',\n\t\t\t\t'century',\n\t\t\t\t1000,\n\t\t\t\tyear,\n\t\t\t\tstartYear,\n\t\t\t\tendYear,\n\t\t\t\tthis.o.beforeShowCentury\n\t\t\t);\n\t\t},\n\n\t\tupdateNavArrows: function(){\n\t\t\tif (!this._allow_update)\n\t\t\t\treturn;\n\n\t\t\tvar d = new Date(this.viewDate),\n\t\t\t\tyear = d.getUTCFullYear(),\n\t\t\t\tmonth = d.getUTCMonth(),\n\t\t\t\tstartYear = this.o.startDate !== -Infinity ? this.o.startDate.getUTCFullYear() : -Infinity,\n\t\t\t\tstartMonth = this.o.startDate !== -Infinity ? this.o.startDate.getUTCMonth() : -Infinity,\n\t\t\t\tendYear = this.o.endDate !== Infinity ? this.o.endDate.getUTCFullYear() : Infinity,\n\t\t\t\tendMonth = this.o.endDate !== Infinity ? this.o.endDate.getUTCMonth() : Infinity,\n\t\t\t\tprevIsDisabled,\n\t\t\t\tnextIsDisabled,\n\t\t\t\tfactor = 1;\n\t\t\tswitch (this.viewMode){\n\t\t\t\tcase 4:\n\t\t\t\t\tfactor *= 10;\n\t\t\t\t\t/* falls through */\n\t\t\t\tcase 3:\n\t\t\t\t\tfactor *= 10;\n\t\t\t\t\t/* falls through */\n\t\t\t\tcase 2:\n\t\t\t\t\tfactor *= 10;\n\t\t\t\t\t/* falls through */\n\t\t\t\tcase 1:\n\t\t\t\t\tprevIsDisabled = Math.floor(year / factor) * factor <= startYear;\n\t\t\t\t\tnextIsDisabled = Math.floor(year / factor) * factor + factor > endYear;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0:\n\t\t\t\t\tprevIsDisabled = year <= startYear && month <= startMonth;\n\t\t\t\t\tnextIsDisabled = year >= endYear && month >= endMonth;\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tthis.picker.find('.prev').toggleClass('disabled', prevIsDisabled);\n\t\t\tthis.picker.find('.next').toggleClass('disabled', nextIsDisabled);\n\t\t},\n\n\t\tclick: function(e){\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\n\t\t\tvar target, dir, day, year, month;\n\t\t\ttarget = $(e.target);\n\n\t\t\t// Clicked on the switch\n\t\t\tif (target.hasClass('datepicker-switch') && this.viewMode !== this.o.maxViewMode){\n\t\t\t\tthis.setViewMode(this.viewMode + 1);\n\t\t\t}\n\n\t\t\t// Clicked on today button\n\t\t\tif (target.hasClass('today') && !target.hasClass('day')){\n\t\t\t\tthis.setViewMode(0);\n\t\t\t\tthis._setDate(UTCToday(), this.o.todayBtn === 'linked' ? null : 'view');\n\t\t\t}\n\n\t\t\t// Clicked on clear button\n\t\t\tif (target.hasClass('clear')){\n\t\t\t\tthis.clearDates();\n\t\t\t}\n\n\t\t\tif (!target.hasClass('disabled')){\n\t\t\t\t// Clicked on a month, year, decade, century\n\t\t\t\tif (target.hasClass('month')\n\t\t\t\t\t\t|| target.hasClass('year')\n\t\t\t\t\t\t|| target.hasClass('decade')\n\t\t\t\t\t\t|| target.hasClass('century')) {\n\t\t\t\t\tthis.viewDate.setUTCDate(1);\n\n\t\t\t\t\tday = 1;\n\t\t\t\t\tif (this.viewMode === 1){\n\t\t\t\t\t\tmonth = target.parent().find('span').index(target);\n\t\t\t\t\t\tyear = this.viewDate.getUTCFullYear();\n\t\t\t\t\t\tthis.viewDate.setUTCMonth(month);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmonth = 0;\n\t\t\t\t\t\tyear = Number(target.text());\n\t\t\t\t\t\tthis.viewDate.setUTCFullYear(year);\n\t\t\t\t\t}\n\n\t\t\t\t\tthis._trigger(DPGlobal.viewModes[this.viewMode - 1].e, this.viewDate);\n\n\t\t\t\t\tif (this.viewMode === this.o.minViewMode){\n\t\t\t\t\t\tthis._setDate(UTCDate(year, month, day));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.setViewMode(this.viewMode - 1);\n\t\t\t\t\t\tthis.fill();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.picker.is(':visible') && this._focused_from){\n\t\t\t\tthis._focused_from.focus();\n\t\t\t}\n\t\t\tdelete this._focused_from;\n\t\t},\n\n\t\tdayCellClick: function(e){\n\t\t\tvar $target = $(e.currentTarget);\n\t\t\tvar timestamp = $target.data('date');\n\t\t\tvar date = new Date(timestamp);\n\n\t\t\tif (this.o.updateViewDate) {\n\t\t\t\tif (date.getUTCFullYear() !== this.viewDate.getUTCFullYear()) {\n\t\t\t\t\tthis._trigger('changeYear', this.viewDate);\n\t\t\t\t}\n\n\t\t\t\tif (date.getUTCMonth() !== this.viewDate.getUTCMonth()) {\n\t\t\t\t\tthis._trigger('changeMonth', this.viewDate);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._setDate(date);\n\t\t},\n\n\t\t// Clicked on prev or next\n\t\tnavArrowsClick: function(e){\n\t\t\tvar $target = $(e.currentTarget);\n\t\t\tvar dir = $target.hasClass('prev') ? -1 : 1;\n\t\t\tif (this.viewMode !== 0){\n\t\t\t\tdir *= DPGlobal.viewModes[this.viewMode].navStep * 12;\n\t\t\t}\n\t\t\tthis.viewDate = this.moveMonth(this.viewDate, dir);\n\t\t\tthis._trigger(DPGlobal.viewModes[this.viewMode].e, this.viewDate);\n\t\t\tthis.fill();\n\t\t},\n\n\t\t_toggle_multidate: function(date){\n\t\t\tvar ix = this.dates.contains(date);\n\t\t\tif (!date){\n\t\t\t\tthis.dates.clear();\n\t\t\t}\n\n\t\t\tif (ix !== -1){\n\t\t\t\tif (this.o.multidate === true || this.o.multidate > 1 || this.o.toggleActive){\n\t\t\t\t\tthis.dates.remove(ix);\n\t\t\t\t}\n\t\t\t} else if (this.o.multidate === false) {\n\t\t\t\tthis.dates.clear();\n\t\t\t\tthis.dates.push(date);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.dates.push(date);\n\t\t\t}\n\n\t\t\tif (typeof this.o.multidate === 'number')\n\t\t\t\twhile (this.dates.length > this.o.multidate)\n\t\t\t\t\tthis.dates.remove(0);\n\t\t},\n\n\t\t_setDate: function(date, which){\n\t\t\tif (!which || which === 'date')\n\t\t\t\tthis._toggle_multidate(date && new Date(date));\n\t\t\tif ((!which && this.o.updateViewDate) || which === 'view')\n\t\t\t\tthis.viewDate = date && new Date(date);\n\n\t\t\tthis.fill();\n\t\t\tthis.setValue();\n\t\t\tif (!which || which !== 'view') {\n\t\t\t\tthis._trigger('changeDate');\n\t\t\t}\n\t\t\tthis.inputField.trigger('change');\n\t\t\tif (this.o.autoclose && (!which || which === 'date')){\n\t\t\t\tthis.hide();\n\t\t\t}\n\t\t},\n\n\t\tmoveDay: function(date, dir){\n\t\t\tvar newDate = new Date(date);\n\t\t\tnewDate.setUTCDate(date.getUTCDate() + dir);\n\n\t\t\treturn newDate;\n\t\t},\n\n\t\tmoveWeek: function(date, dir){\n\t\t\treturn this.moveDay(date, dir * 7);\n\t\t},\n\n\t\tmoveMonth: function(date, dir){\n\t\t\tif (!isValidDate(date))\n\t\t\t\treturn this.o.defaultViewDate;\n\t\t\tif (!dir)\n\t\t\t\treturn date;\n\t\t\tvar new_date = new Date(date.valueOf()),\n\t\t\t\tday = new_date.getUTCDate(),\n\t\t\t\tmonth = new_date.getUTCMonth(),\n\t\t\t\tmag = Math.abs(dir),\n\t\t\t\tnew_month, test;\n\t\t\tdir = dir > 0 ? 1 : -1;\n\t\t\tif (mag === 1){\n\t\t\t\ttest = dir === -1\n\t\t\t\t\t// If going back one month, make sure month is not current month\n\t\t\t\t\t// (eg, Mar 31 -> Feb 31 == Feb 28, not Mar 02)\n\t\t\t\t\t? function(){\n\t\t\t\t\t\treturn new_date.getUTCMonth() === month;\n\t\t\t\t\t}\n\t\t\t\t\t// If going forward one month, make sure month is as expected\n\t\t\t\t\t// (eg, Jan 31 -> Feb 31 == Feb 28, not Mar 02)\n\t\t\t\t\t: function(){\n\t\t\t\t\t\treturn new_date.getUTCMonth() !== new_month;\n\t\t\t\t\t};\n\t\t\t\tnew_month = month + dir;\n\t\t\t\tnew_date.setUTCMonth(new_month);\n\t\t\t\t// Dec -> Jan (12) or Jan -> Dec (-1) -- limit expected date to 0-11\n\t\t\t\tnew_month = (new_month + 12) % 12;\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// For magnitudes >1, move one month at a time...\n\t\t\t\tfor (var i=0; i < mag; i++)\n\t\t\t\t\t// ...which might decrease the day (eg, Jan 31 to Feb 28, etc)...\n\t\t\t\t\tnew_date = this.moveMonth(new_date, dir);\n\t\t\t\t// ...then reset the day, keeping it in the new month\n\t\t\t\tnew_month = new_date.getUTCMonth();\n\t\t\t\tnew_date.setUTCDate(day);\n\t\t\t\ttest = function(){\n\t\t\t\t\treturn new_month !== new_date.getUTCMonth();\n\t\t\t\t};\n\t\t\t}\n\t\t\t// Common date-resetting loop -- if date is beyond end of month, make it\n\t\t\t// end of month\n\t\t\twhile (test()){\n\t\t\t\tnew_date.setUTCDate(--day);\n\t\t\t\tnew_date.setUTCMonth(new_month);\n\t\t\t}\n\t\t\treturn new_date;\n\t\t},\n\n\t\tmoveYear: function(date, dir){\n\t\t\treturn this.moveMonth(date, dir*12);\n\t\t},\n\n\t\tmoveAvailableDate: function(date, dir, fn){\n\t\t\tdo {\n\t\t\t\tdate = this[fn](date, dir);\n\n\t\t\t\tif (!this.dateWithinRange(date))\n\t\t\t\t\treturn false;\n\n\t\t\t\tfn = 'moveDay';\n\t\t\t}\n\t\t\twhile (this.dateIsDisabled(date));\n\n\t\t\treturn date;\n\t\t},\n\n\t\tweekOfDateIsDisabled: function(date){\n\t\t\treturn $.inArray(date.getUTCDay(), this.o.daysOfWeekDisabled) !== -1;\n\t\t},\n\n\t\tdateIsDisabled: function(date){\n\t\t\treturn (\n\t\t\t\tthis.weekOfDateIsDisabled(date) ||\n\t\t\t\t$.grep(this.o.datesDisabled, function(d){\n\t\t\t\t\treturn isUTCEquals(date, d);\n\t\t\t\t}).length > 0\n\t\t\t);\n\t\t},\n\n\t\tdateWithinRange: function(date){\n\t\t\treturn date >= this.o.startDate && date <= this.o.endDate;\n\t\t},\n\n\t\tkeydown: function(e){\n\t\t\tif (!this.picker.is(':visible')){\n\t\t\t\tif (e.keyCode === 40 || e.keyCode === 27) { // allow down to re-show picker\n\t\t\t\t\tthis.show();\n\t\t\t\t\te.stopPropagation();\n        }\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar dateChanged = false,\n\t\t\t\tdir, newViewDate,\n\t\t\t\tfocusDate = this.focusDate || this.viewDate;\n\t\t\tswitch (e.keyCode){\n\t\t\t\tcase 27: // escape\n\t\t\t\t\tif (this.focusDate){\n\t\t\t\t\t\tthis.focusDate = null;\n\t\t\t\t\t\tthis.viewDate = this.dates.get(-1) || this.viewDate;\n\t\t\t\t\t\tthis.fill();\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\tthis.hide();\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t\tbreak;\n\t\t\t\tcase 37: // left\n\t\t\t\tcase 38: // up\n\t\t\t\tcase 39: // right\n\t\t\t\tcase 40: // down\n\t\t\t\t\tif (!this.o.keyboardNavigation || this.o.daysOfWeekDisabled.length === 7)\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdir = e.keyCode === 37 || e.keyCode === 38 ? -1 : 1;\n          if (this.viewMode === 0) {\n  \t\t\t\t\tif (e.ctrlKey){\n  \t\t\t\t\t\tnewViewDate = this.moveAvailableDate(focusDate, dir, 'moveYear');\n\n  \t\t\t\t\t\tif (newViewDate)\n  \t\t\t\t\t\t\tthis._trigger('changeYear', this.viewDate);\n  \t\t\t\t\t} else if (e.shiftKey){\n  \t\t\t\t\t\tnewViewDate = this.moveAvailableDate(focusDate, dir, 'moveMonth');\n\n  \t\t\t\t\t\tif (newViewDate)\n  \t\t\t\t\t\t\tthis._trigger('changeMonth', this.viewDate);\n  \t\t\t\t\t} else if (e.keyCode === 37 || e.keyCode === 39){\n  \t\t\t\t\t\tnewViewDate = this.moveAvailableDate(focusDate, dir, 'moveDay');\n  \t\t\t\t\t} else if (!this.weekOfDateIsDisabled(focusDate)){\n  \t\t\t\t\t\tnewViewDate = this.moveAvailableDate(focusDate, dir, 'moveWeek');\n  \t\t\t\t\t}\n          } else if (this.viewMode === 1) {\n            if (e.keyCode === 38 || e.keyCode === 40) {\n              dir = dir * 4;\n            }\n            newViewDate = this.moveAvailableDate(focusDate, dir, 'moveMonth');\n          } else if (this.viewMode === 2) {\n            if (e.keyCode === 38 || e.keyCode === 40) {\n              dir = dir * 4;\n            }\n            newViewDate = this.moveAvailableDate(focusDate, dir, 'moveYear');\n          }\n\t\t\t\t\tif (newViewDate){\n\t\t\t\t\t\tthis.focusDate = this.viewDate = newViewDate;\n\t\t\t\t\t\tthis.setValue();\n\t\t\t\t\t\tthis.fill();\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 13: // enter\n\t\t\t\t\tif (!this.o.forceParse)\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tfocusDate = this.focusDate || this.dates.get(-1) || this.viewDate;\n\t\t\t\t\tif (this.o.keyboardNavigation) {\n\t\t\t\t\t\tthis._toggle_multidate(focusDate);\n\t\t\t\t\t\tdateChanged = true;\n\t\t\t\t\t}\n\t\t\t\t\tthis.focusDate = null;\n\t\t\t\t\tthis.viewDate = this.dates.get(-1) || this.viewDate;\n\t\t\t\t\tthis.setValue();\n\t\t\t\t\tthis.fill();\n\t\t\t\t\tif (this.picker.is(':visible')){\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\tif (this.o.autoclose)\n\t\t\t\t\t\t\tthis.hide();\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 9: // tab\n\t\t\t\t\tthis.focusDate = null;\n\t\t\t\t\tthis.viewDate = this.dates.get(-1) || this.viewDate;\n\t\t\t\t\tthis.fill();\n\t\t\t\t\tthis.hide();\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (dateChanged){\n\t\t\t\tif (this.dates.length)\n\t\t\t\t\tthis._trigger('changeDate');\n\t\t\t\telse\n\t\t\t\t\tthis._trigger('clearDate');\n\t\t\t\tthis.inputField.trigger('change');\n\t\t\t}\n\t\t},\n\n\t\tsetViewMode: function(viewMode){\n\t\t\tthis.viewMode = viewMode;\n\t\t\tthis.picker\n\t\t\t\t.children('div')\n\t\t\t\t.hide()\n\t\t\t\t.filter('.datepicker-' + DPGlobal.viewModes[this.viewMode].clsName)\n\t\t\t\t\t.show();\n\t\t\tthis.updateNavArrows();\n      this._trigger('changeViewMode', new Date(this.viewDate));\n\t\t}\n\t};\n\n\tvar DateRangePicker = function(element, options){\n\t\t$.data(element, 'datepicker', this);\n\t\tthis.element = $(element);\n\t\tthis.inputs = $.map(options.inputs, function(i){\n\t\t\treturn i.jquery ? i[0] : i;\n\t\t});\n\t\tdelete options.inputs;\n\n\t\tthis.keepEmptyValues = options.keepEmptyValues;\n\t\tdelete options.keepEmptyValues;\n\n\t\tdatepickerPlugin.call($(this.inputs), options)\n\t\t\t.on('changeDate', $.proxy(this.dateUpdated, this));\n\n\t\tthis.pickers = $.map(this.inputs, function(i){\n\t\t\treturn $.data(i, 'datepicker');\n\t\t});\n\t\tthis.updateDates();\n\t};\n\tDateRangePicker.prototype = {\n\t\tupdateDates: function(){\n\t\t\tthis.dates = $.map(this.pickers, function(i){\n\t\t\t\treturn i.getUTCDate();\n\t\t\t});\n\t\t\tthis.updateRanges();\n\t\t},\n\t\tupdateRanges: function(){\n\t\t\tvar range = $.map(this.dates, function(d){\n\t\t\t\treturn d.valueOf();\n\t\t\t});\n\t\t\t$.each(this.pickers, function(i, p){\n\t\t\t\tp.setRange(range);\n\t\t\t});\n\t\t},\n\t\tclearDates: function(){\n\t\t\t$.each(this.pickers, function(i, p){\n\t\t\t\tp.clearDates();\n\t\t\t});\n\t\t},\n\t\tdateUpdated: function(e){\n\t\t\t// `this.updating` is a workaround for preventing infinite recursion\n\t\t\t// between `changeDate` triggering and `setUTCDate` calling.  Until\n\t\t\t// there is a better mechanism.\n\t\t\tif (this.updating)\n\t\t\t\treturn;\n\t\t\tthis.updating = true;\n\n\t\t\tvar dp = $.data(e.target, 'datepicker');\n\n\t\t\tif (dp === undefined) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar new_date = dp.getUTCDate(),\n\t\t\t\tkeep_empty_values = this.keepEmptyValues,\n\t\t\t\ti = $.inArray(e.target, this.inputs),\n\t\t\t\tj = i - 1,\n\t\t\t\tk = i + 1,\n\t\t\t\tl = this.inputs.length;\n\t\t\tif (i === -1)\n\t\t\t\treturn;\n\n\t\t\t$.each(this.pickers, function(i, p){\n\t\t\t\tif (!p.getUTCDate() && (p === dp || !keep_empty_values))\n\t\t\t\t\tp.setUTCDate(new_date);\n\t\t\t});\n\n\t\t\tif (new_date < this.dates[j]){\n\t\t\t\t// Date being moved earlier/left\n\t\t\t\twhile (j >= 0 && new_date < this.dates[j]){\n\t\t\t\t\tthis.pickers[j--].setUTCDate(new_date);\n\t\t\t\t}\n\t\t\t} else if (new_date > this.dates[k]){\n\t\t\t\t// Date being moved later/right\n\t\t\t\twhile (k < l && new_date > this.dates[k]){\n\t\t\t\t\tthis.pickers[k++].setUTCDate(new_date);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.updateDates();\n\n\t\t\tdelete this.updating;\n\t\t},\n\t\tdestroy: function(){\n\t\t\t$.map(this.pickers, function(p){ p.destroy(); });\n\t\t\t$(this.inputs).off('changeDate', this.dateUpdated);\n\t\t\tdelete this.element.data().datepicker;\n\t\t},\n\t\tremove: alias('destroy', 'Method `remove` is deprecated and will be removed in version 2.0. Use `destroy` instead')\n\t};\n\n\tfunction opts_from_el(el, prefix){\n\t\t// Derive options from element data-attrs\n\t\tvar data = $(el).data(),\n\t\t\tout = {}, inkey,\n\t\t\treplace = new RegExp('^' + prefix.toLowerCase() + '([A-Z])');\n\t\tprefix = new RegExp('^' + prefix.toLowerCase());\n\t\tfunction re_lower(_,a){\n\t\t\treturn a.toLowerCase();\n\t\t}\n\t\tfor (var key in data)\n\t\t\tif (prefix.test(key)){\n\t\t\t\tinkey = key.replace(replace, re_lower);\n\t\t\t\tout[inkey] = data[key];\n\t\t\t}\n\t\treturn out;\n\t}\n\n\tfunction opts_from_locale(lang){\n\t\t// Derive options from locale plugins\n\t\tvar out = {};\n\t\t// Check if \"de-DE\" style date is available, if not language should\n\t\t// fallback to 2 letter code eg \"de\"\n\t\tif (!dates[lang]){\n\t\t\tlang = lang.split('-')[0];\n\t\t\tif (!dates[lang])\n\t\t\t\treturn;\n\t\t}\n\t\tvar d = dates[lang];\n\t\t$.each(locale_opts, function(i,k){\n\t\t\tif (k in d)\n\t\t\t\tout[k] = d[k];\n\t\t});\n\t\treturn out;\n\t}\n\n\tvar old = $.fn.datepicker;\n\tvar datepickerPlugin = function(option){\n\t\tvar args = Array.apply(null, arguments);\n\t\targs.shift();\n\t\tvar internal_return;\n\t\tthis.each(function(){\n\t\t\tvar $this = $(this),\n\t\t\t\tdata = $this.data('datepicker'),\n\t\t\t\toptions = typeof option === 'object' && option;\n\t\t\tif (!data){\n\t\t\t\tvar elopts = opts_from_el(this, 'date'),\n\t\t\t\t\t// Preliminary otions\n\t\t\t\t\txopts = $.extend({}, defaults, elopts, options),\n\t\t\t\t\tlocopts = opts_from_locale(xopts.language),\n\t\t\t\t\t// Options priority: js args, data-attrs, locales, defaults\n\t\t\t\t\topts = $.extend({}, defaults, locopts, elopts, options);\n\t\t\t\tif ($this.hasClass('input-daterange') || opts.inputs){\n\t\t\t\t\t$.extend(opts, {\n\t\t\t\t\t\tinputs: opts.inputs || $this.find('input').toArray()\n\t\t\t\t\t});\n\t\t\t\t\tdata = new DateRangePicker(this, opts);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tdata = new Datepicker(this, opts);\n\t\t\t\t}\n\t\t\t\t$this.data('datepicker', data);\n\t\t\t}\n\t\t\tif (typeof option === 'string' && typeof data[option] === 'function'){\n\t\t\t\tinternal_return = data[option].apply(data, args);\n\t\t\t}\n\t\t});\n\n\t\tif (\n\t\t\tinternal_return === undefined ||\n\t\t\tinternal_return instanceof Datepicker ||\n\t\t\tinternal_return instanceof DateRangePicker\n\t\t)\n\t\t\treturn this;\n\n\t\tif (this.length > 1)\n\t\t\tthrow new Error('Using only allowed for the collection of a single element (' + option + ' function)');\n\t\telse\n\t\t\treturn internal_return;\n\t};\n\t$.fn.datepicker = datepickerPlugin;\n\n\tvar defaults = $.fn.datepicker.defaults = {\n\t\tassumeNearbyYear: false,\n\t\tautoclose: false,\n\t\tbeforeShowDay: $.noop,\n\t\tbeforeShowMonth: $.noop,\n\t\tbeforeShowYear: $.noop,\n\t\tbeforeShowDecade: $.noop,\n\t\tbeforeShowCentury: $.noop,\n\t\tcalendarWeeks: false,\n\t\tclearBtn: false,\n\t\ttoggleActive: false,\n\t\tdaysOfWeekDisabled: [],\n\t\tdaysOfWeekHighlighted: [],\n\t\tdatesDisabled: [],\n\t\tendDate: Infinity,\n\t\tforceParse: true,\n\t\tformat: 'mm/dd/yyyy',\n\t\tkeepEmptyValues: false,\n\t\tkeyboardNavigation: true,\n\t\tlanguage: 'en',\n\t\tminViewMode: 0,\n\t\tmaxViewMode: 4,\n\t\tmultidate: false,\n\t\tmultidateSeparator: ',',\n\t\torientation: \"auto\",\n\t\trtl: false,\n\t\tstartDate: -Infinity,\n\t\tstartView: 0,\n\t\ttodayBtn: false,\n\t\ttodayHighlight: false,\n\t\tupdateViewDate: true,\n\t\tweekStart: 0,\n\t\tdisableTouchKeyboard: false,\n\t\tenableOnReadonly: true,\n\t\tshowOnFocus: true,\n\t\tzIndexOffset: 10,\n\t\tcontainer: 'body',\n\t\timmediateUpdates: false,\n\t\ttitle: '',\n\t\ttemplates: {\n\t\t\tleftArrow: '&#x00AB;',\n\t\t\trightArrow: '&#x00BB;'\n\t\t},\n    showWeekDays: true\n\t};\n\tvar locale_opts = $.fn.datepicker.locale_opts = [\n\t\t'format',\n\t\t'rtl',\n\t\t'weekStart'\n\t];\n\t$.fn.datepicker.Constructor = Datepicker;\n\tvar dates = $.fn.datepicker.dates = {\n\t\ten: {\n\t\t\tdays: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n\t\t\tdaysShort: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n\t\t\tdaysMin: [\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"],\n\t\t\tmonths: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n\t\t\tmonthsShort: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"],\n\t\t\ttoday: \"Today\",\n\t\t\tclear: \"Clear\",\n\t\t\ttitleFormat: \"MM yyyy\"\n\t\t}\n\t};\n\n\tvar DPGlobal = {\n\t\tviewModes: [\n\t\t\t{\n\t\t\t\tnames: ['days', 'month'],\n\t\t\t\tclsName: 'days',\n\t\t\t\te: 'changeMonth'\n\t\t\t},\n\t\t\t{\n\t\t\t\tnames: ['months', 'year'],\n\t\t\t\tclsName: 'months',\n\t\t\t\te: 'changeYear',\n\t\t\t\tnavStep: 1\n\t\t\t},\n\t\t\t{\n\t\t\t\tnames: ['years', 'decade'],\n\t\t\t\tclsName: 'years',\n\t\t\t\te: 'changeDecade',\n\t\t\t\tnavStep: 10\n\t\t\t},\n\t\t\t{\n\t\t\t\tnames: ['decades', 'century'],\n\t\t\t\tclsName: 'decades',\n\t\t\t\te: 'changeCentury',\n\t\t\t\tnavStep: 100\n\t\t\t},\n\t\t\t{\n\t\t\t\tnames: ['centuries', 'millennium'],\n\t\t\t\tclsName: 'centuries',\n\t\t\t\te: 'changeMillennium',\n\t\t\t\tnavStep: 1000\n\t\t\t}\n\t\t],\n\t\tvalidParts: /dd?|DD?|mm?|MM?|yy(?:yy)?/g,\n\t\tnonpunctuation: /[^ -\\/:-@\\u5e74\\u6708\\u65e5\\[-`{-~\\t\\n\\r]+/g,\n\t\tparseFormat: function(format){\n\t\t\tif (typeof format.toValue === 'function' && typeof format.toDisplay === 'function')\n                return format;\n            // IE treats \\0 as a string end in inputs (truncating the value),\n\t\t\t// so it's a bad format delimiter, anyway\n\t\t\tvar separators = format.replace(this.validParts, '\\0').split('\\0'),\n\t\t\t\tparts = format.match(this.validParts);\n\t\t\tif (!separators || !separators.length || !parts || parts.length === 0){\n\t\t\t\tthrow new Error(\"Invalid date format.\");\n\t\t\t}\n\t\t\treturn {separators: separators, parts: parts};\n\t\t},\n\t\tparseDate: function(date, format, language, assumeNearby){\n\t\t\tif (!date)\n\t\t\t\treturn undefined;\n\t\t\tif (date instanceof Date)\n\t\t\t\treturn date;\n\t\t\tif (typeof format === 'string')\n\t\t\t\tformat = DPGlobal.parseFormat(format);\n\t\t\tif (format.toValue)\n\t\t\t\treturn format.toValue(date, format, language);\n\t\t\tvar fn_map = {\n\t\t\t\t\td: 'moveDay',\n\t\t\t\t\tm: 'moveMonth',\n\t\t\t\t\tw: 'moveWeek',\n\t\t\t\t\ty: 'moveYear'\n\t\t\t\t},\n\t\t\t\tdateAliases = {\n\t\t\t\t\tyesterday: '-1d',\n\t\t\t\t\ttoday: '+0d',\n\t\t\t\t\ttomorrow: '+1d'\n\t\t\t\t},\n\t\t\t\tparts, part, dir, i, fn;\n\t\t\tif (date in dateAliases){\n\t\t\t\tdate = dateAliases[date];\n\t\t\t}\n\t\t\tif (/^[\\-+]\\d+[dmwy]([\\s,]+[\\-+]\\d+[dmwy])*$/i.test(date)){\n\t\t\t\tparts = date.match(/([\\-+]\\d+)([dmwy])/gi);\n\t\t\t\tdate = new Date();\n\t\t\t\tfor (i=0; i < parts.length; i++){\n\t\t\t\t\tpart = parts[i].match(/([\\-+]\\d+)([dmwy])/i);\n\t\t\t\t\tdir = Number(part[1]);\n\t\t\t\t\tfn = fn_map[part[2].toLowerCase()];\n\t\t\t\t\tdate = Datepicker.prototype[fn](date, dir);\n\t\t\t\t}\n\t\t\t\treturn Datepicker.prototype._zero_utc_time(date);\n\t\t\t}\n\n\t\t\tparts = date && date.match(this.nonpunctuation) || [];\n\n\t\t\tfunction applyNearbyYear(year, threshold){\n\t\t\t\tif (threshold === true)\n\t\t\t\t\tthreshold = 10;\n\n\t\t\t\t// if year is 2 digits or less, than the user most likely is trying to get a recent century\n\t\t\t\tif (year < 100){\n\t\t\t\t\tyear += 2000;\n\t\t\t\t\t// if the new year is more than threshold years in advance, use last century\n\t\t\t\t\tif (year > ((new Date()).getFullYear()+threshold)){\n\t\t\t\t\t\tyear -= 100;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn year;\n\t\t\t}\n\n\t\t\tvar parsed = {},\n\t\t\t\tsetters_order = ['yyyy', 'yy', 'M', 'MM', 'm', 'mm', 'd', 'dd'],\n\t\t\t\tsetters_map = {\n\t\t\t\t\tyyyy: function(d,v){\n\t\t\t\t\t\treturn d.setUTCFullYear(assumeNearby ? applyNearbyYear(v, assumeNearby) : v);\n\t\t\t\t\t},\n\t\t\t\t\tm: function(d,v){\n\t\t\t\t\t\tif (isNaN(d))\n\t\t\t\t\t\t\treturn d;\n\t\t\t\t\t\tv -= 1;\n\t\t\t\t\t\twhile (v < 0) v += 12;\n\t\t\t\t\t\tv %= 12;\n\t\t\t\t\t\td.setUTCMonth(v);\n\t\t\t\t\t\twhile (d.getUTCMonth() !== v)\n\t\t\t\t\t\t\td.setUTCDate(d.getUTCDate()-1);\n\t\t\t\t\t\treturn d;\n\t\t\t\t\t},\n\t\t\t\t\td: function(d,v){\n\t\t\t\t\t\treturn d.setUTCDate(v);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tval, filtered;\n\t\t\tsetters_map['yy'] = setters_map['yyyy'];\n\t\t\tsetters_map['M'] = setters_map['MM'] = setters_map['mm'] = setters_map['m'];\n\t\t\tsetters_map['dd'] = setters_map['d'];\n\t\t\tdate = UTCToday();\n\t\t\tvar fparts = format.parts.slice();\n\t\t\t// Remove noop parts\n\t\t\tif (parts.length !== fparts.length){\n\t\t\t\tfparts = $(fparts).filter(function(i,p){\n\t\t\t\t\treturn $.inArray(p, setters_order) !== -1;\n\t\t\t\t}).toArray();\n\t\t\t}\n\t\t\t// Process remainder\n\t\t\tfunction match_part(){\n\t\t\t\tvar m = this.slice(0, parts[i].length),\n\t\t\t\t\tp = parts[i].slice(0, m.length);\n\t\t\t\treturn m.toLowerCase() === p.toLowerCase();\n\t\t\t}\n\t\t\tif (parts.length === fparts.length){\n\t\t\t\tvar cnt;\n\t\t\t\tfor (i=0, cnt = fparts.length; i < cnt; i++){\n\t\t\t\t\tval = parseInt(parts[i], 10);\n\t\t\t\t\tpart = fparts[i];\n\t\t\t\t\tif (isNaN(val)){\n\t\t\t\t\t\tswitch (part){\n\t\t\t\t\t\t\tcase 'MM':\n\t\t\t\t\t\t\t\tfiltered = $(dates[language].months).filter(match_part);\n\t\t\t\t\t\t\t\tval = $.inArray(filtered[0], dates[language].months) + 1;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'M':\n\t\t\t\t\t\t\t\tfiltered = $(dates[language].monthsShort).filter(match_part);\n\t\t\t\t\t\t\t\tval = $.inArray(filtered[0], dates[language].monthsShort) + 1;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tparsed[part] = val;\n\t\t\t\t}\n\t\t\t\tvar _date, s;\n\t\t\t\tfor (i=0; i < setters_order.length; i++){\n\t\t\t\t\ts = setters_order[i];\n\t\t\t\t\tif (s in parsed && !isNaN(parsed[s])){\n\t\t\t\t\t\t_date = new Date(date);\n\t\t\t\t\t\tsetters_map[s](_date, parsed[s]);\n\t\t\t\t\t\tif (!isNaN(_date))\n\t\t\t\t\t\t\tdate = _date;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn date;\n\t\t},\n\t\tformatDate: function(date, format, language){\n\t\t\tif (!date)\n\t\t\t\treturn '';\n\t\t\tif (typeof format === 'string')\n\t\t\t\tformat = DPGlobal.parseFormat(format);\n\t\t\tif (format.toDisplay)\n                return format.toDisplay(date, format, language);\n            var val = {\n\t\t\t\td: date.getUTCDate(),\n\t\t\t\tD: dates[language].daysShort[date.getUTCDay()],\n\t\t\t\tDD: dates[language].days[date.getUTCDay()],\n\t\t\t\tm: date.getUTCMonth() + 1,\n\t\t\t\tM: dates[language].monthsShort[date.getUTCMonth()],\n\t\t\t\tMM: dates[language].months[date.getUTCMonth()],\n\t\t\t\tyy: date.getUTCFullYear().toString().substring(2),\n\t\t\t\tyyyy: date.getUTCFullYear()\n\t\t\t};\n\t\t\tval.dd = (val.d < 10 ? '0' : '') + val.d;\n\t\t\tval.mm = (val.m < 10 ? '0' : '') + val.m;\n\t\t\tdate = [];\n\t\t\tvar seps = $.extend([], format.separators);\n\t\t\tfor (var i=0, cnt = format.parts.length; i <= cnt; i++){\n\t\t\t\tif (seps.length)\n\t\t\t\t\tdate.push(seps.shift());\n\t\t\t\tdate.push(val[format.parts[i]]);\n\t\t\t}\n\t\t\treturn date.join('');\n\t\t},\n\t\theadTemplate: '<thead>'+\n\t\t\t              '<tr>'+\n\t\t\t                '<th colspan=\"7\" class=\"datepicker-title\"></th>'+\n\t\t\t              '</tr>'+\n\t\t\t\t\t\t\t'<tr>'+\n\t\t\t\t\t\t\t\t'<th class=\"prev\">'+defaults.templates.leftArrow+'</th>'+\n\t\t\t\t\t\t\t\t'<th colspan=\"5\" class=\"datepicker-switch\"></th>'+\n\t\t\t\t\t\t\t\t'<th class=\"next\">'+defaults.templates.rightArrow+'</th>'+\n\t\t\t\t\t\t\t'</tr>'+\n\t\t\t\t\t\t'</thead>',\n\t\tcontTemplate: '<tbody><tr><td colspan=\"7\"></td></tr></tbody>',\n\t\tfootTemplate: '<tfoot>'+\n\t\t\t\t\t\t\t'<tr>'+\n\t\t\t\t\t\t\t\t'<th colspan=\"7\" class=\"today\"></th>'+\n\t\t\t\t\t\t\t'</tr>'+\n\t\t\t\t\t\t\t'<tr>'+\n\t\t\t\t\t\t\t\t'<th colspan=\"7\" class=\"clear\"></th>'+\n\t\t\t\t\t\t\t'</tr>'+\n\t\t\t\t\t\t'</tfoot>'\n\t};\n\tDPGlobal.template = '<div class=\"datepicker\">'+\n\t\t\t\t\t\t\t'<div class=\"datepicker-days\">'+\n\t\t\t\t\t\t\t\t'<table class=\"table-condensed\">'+\n\t\t\t\t\t\t\t\t\tDPGlobal.headTemplate+\n\t\t\t\t\t\t\t\t\t'<tbody></tbody>'+\n\t\t\t\t\t\t\t\t\tDPGlobal.footTemplate+\n\t\t\t\t\t\t\t\t'</table>'+\n\t\t\t\t\t\t\t'</div>'+\n\t\t\t\t\t\t\t'<div class=\"datepicker-months\">'+\n\t\t\t\t\t\t\t\t'<table class=\"table-condensed\">'+\n\t\t\t\t\t\t\t\t\tDPGlobal.headTemplate+\n\t\t\t\t\t\t\t\t\tDPGlobal.contTemplate+\n\t\t\t\t\t\t\t\t\tDPGlobal.footTemplate+\n\t\t\t\t\t\t\t\t'</table>'+\n\t\t\t\t\t\t\t'</div>'+\n\t\t\t\t\t\t\t'<div class=\"datepicker-years\">'+\n\t\t\t\t\t\t\t\t'<table class=\"table-condensed\">'+\n\t\t\t\t\t\t\t\t\tDPGlobal.headTemplate+\n\t\t\t\t\t\t\t\t\tDPGlobal.contTemplate+\n\t\t\t\t\t\t\t\t\tDPGlobal.footTemplate+\n\t\t\t\t\t\t\t\t'</table>'+\n\t\t\t\t\t\t\t'</div>'+\n\t\t\t\t\t\t\t'<div class=\"datepicker-decades\">'+\n\t\t\t\t\t\t\t\t'<table class=\"table-condensed\">'+\n\t\t\t\t\t\t\t\t\tDPGlobal.headTemplate+\n\t\t\t\t\t\t\t\t\tDPGlobal.contTemplate+\n\t\t\t\t\t\t\t\t\tDPGlobal.footTemplate+\n\t\t\t\t\t\t\t\t'</table>'+\n\t\t\t\t\t\t\t'</div>'+\n\t\t\t\t\t\t\t'<div class=\"datepicker-centuries\">'+\n\t\t\t\t\t\t\t\t'<table class=\"table-condensed\">'+\n\t\t\t\t\t\t\t\t\tDPGlobal.headTemplate+\n\t\t\t\t\t\t\t\t\tDPGlobal.contTemplate+\n\t\t\t\t\t\t\t\t\tDPGlobal.footTemplate+\n\t\t\t\t\t\t\t\t'</table>'+\n\t\t\t\t\t\t\t'</div>'+\n\t\t\t\t\t\t'</div>';\n\n\t$.fn.datepicker.DPGlobal = DPGlobal;\n\n\n\t/* DATEPICKER NO CONFLICT\n\t* =================== */\n\n\t$.fn.datepicker.noConflict = function(){\n\t\t$.fn.datepicker = old;\n\t\treturn this;\n\t};\n\n\t/* DATEPICKER VERSION\n\t * =================== */\n\t$.fn.datepicker.version = '1.9.0';\n\n\t$.fn.datepicker.deprecated = function(msg){\n\t\tvar console = window.console;\n\t\tif (console && console.warn) {\n\t\t\tconsole.warn('DEPRECATED: ' + msg);\n\t\t}\n\t};\n\n\n\t/* DATEPICKER DATA-API\n\t* ================== */\n\n\t$(document).on(\n\t\t'focus.datepicker.data-api click.datepicker.data-api',\n\t\t'[data-provide=\"datepicker\"]',\n\t\tfunction(e){\n\t\t\tvar $this = $(this);\n\t\t\tif ($this.data('datepicker'))\n\t\t\t\treturn;\n\t\t\te.preventDefault();\n\t\t\t// component click requires us to explicitly show it\n\t\t\tdatepickerPlugin.call($this, 'show');\n\t\t}\n\t);\n\t$(function(){\n\t\tdatepickerPlugin.call($('[data-provide=\"datepicker-inline\"]'));\n\t});\n\n}));\n","!function(a){a.fn.datepicker.dates.de={days:[\"Sonntag\",\"Montag\",\"Dienstag\",\"Mittwoch\",\"Donnerstag\",\"Freitag\",\"Samstag\"],daysShort:[\"Son\",\"Mon\",\"Die\",\"Mit\",\"Don\",\"Fre\",\"Sam\"],daysMin:[\"So\",\"Mo\",\"Di\",\"Mi\",\"Do\",\"Fr\",\"Sa\"],months:[\"Januar\",\"Februar\",\"März\",\"April\",\"Mai\",\"Juni\",\"Juli\",\"August\",\"September\",\"Oktober\",\"November\",\"Dezember\"],monthsShort:[\"Jan\",\"Feb\",\"Mär\",\"Apr\",\"Mai\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Okt\",\"Nov\",\"Dez\"],today:\"Heute\",monthsTitle:\"Monate\",clear:\"Löschen\",weekStart:1,format:\"dd.mm.yyyy\"}}(jQuery);","!function(a){a.fn.datepicker.dates.hu={days:[\"vasárnap\",\"hétfő\",\"kedd\",\"szerda\",\"csütörtök\",\"péntek\",\"szombat\"],daysShort:[\"vas\",\"hét\",\"ked\",\"sze\",\"csü\",\"pén\",\"szo\"],daysMin:[\"V\",\"H\",\"K\",\"Sze\",\"Cs\",\"P\",\"Szo\"],months:[\"január\",\"február\",\"március\",\"április\",\"május\",\"június\",\"július\",\"augusztus\",\"szeptember\",\"október\",\"november\",\"december\"],monthsShort:[\"jan\",\"feb\",\"már\",\"ápr\",\"máj\",\"jún\",\"júl\",\"aug\",\"sze\",\"okt\",\"nov\",\"dec\"],today:\"ma\",weekStart:1,clear:\"töröl\",titleFormat:\"yyyy. MM\",format:\"yyyy.mm.dd\"}}(jQuery);","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar callBind = require('./');\n\nvar $indexOf = callBind(GetIntrinsic('String.prototype.indexOf'));\n\nmodule.exports = function callBoundIntrinsic(name, allowMissing) {\n\tvar intrinsic = GetIntrinsic(name, !!allowMissing);\n\tif (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) {\n\t\treturn callBind(intrinsic);\n\t}\n\treturn intrinsic;\n};\n","'use strict';\n\nvar bind = require('function-bind');\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $apply = GetIntrinsic('%Function.prototype.apply%');\nvar $call = GetIntrinsic('%Function.prototype.call%');\nvar $reflectApply = GetIntrinsic('%Reflect.apply%', true) || bind.call($call, $apply);\n\nvar $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%', true);\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\nvar $max = GetIntrinsic('%Math.max%');\n\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = null;\n\t}\n}\n\nmodule.exports = function callBind(originalFunction) {\n\tvar func = $reflectApply(bind, $call, arguments);\n\tif ($gOPD && $defineProperty) {\n\t\tvar desc = $gOPD(func, 'length');\n\t\tif (desc.configurable) {\n\t\t\t// original length, plus the receiver, minus any additional arguments (after the receiver)\n\t\t\t$defineProperty(\n\t\t\t\tfunc,\n\t\t\t\t'length',\n\t\t\t\t{ value: 1 + $max(0, originalFunction.length - (arguments.length - 1)) }\n\t\t\t);\n\t\t}\n\t}\n\treturn func;\n};\n\nvar applyBind = function applyBind() {\n\treturn $reflectApply(bind, $apply, arguments);\n};\n\nif ($defineProperty) {\n\t$defineProperty(module.exports, 'apply', { value: applyBind });\n} else {\n\tmodule.exports.apply = applyBind;\n}\n","require('../../modules/es.object.entries');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Object.entries;\n","require('../../modules/es.object.get-prototype-of');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Object.getPrototypeOf;\n","var isCallable = require('../internals/is-callable');\nvar tryToString = require('../internals/try-to-string');\n\nvar $TypeError = TypeError;\n\n// `Assert: IsCallable(argument) is true`\nmodule.exports = function (argument) {\n  if (isCallable(argument)) return argument;\n  throw $TypeError(tryToString(argument) + ' is not a function');\n};\n","var isObject = require('../internals/is-object');\n\nvar $String = String;\nvar $TypeError = TypeError;\n\n// `Assert: Type(argument) is Object`\nmodule.exports = function (argument) {\n  if (isObject(argument)) return argument;\n  throw $TypeError($String(argument) + ' is not an object');\n};\n","var toIndexedObject = require('../internals/to-indexed-object');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\n\n// `Array.prototype.{ indexOf, includes }` methods implementation\nvar createMethod = function (IS_INCLUDES) {\n  return function ($this, el, fromIndex) {\n    var O = toIndexedObject($this);\n    var length = lengthOfArrayLike(O);\n    var index = toAbsoluteIndex(fromIndex, length);\n    var value;\n    // Array#includes uses SameValueZero equality algorithm\n    // eslint-disable-next-line no-self-compare -- NaN check\n    if (IS_INCLUDES && el != el) while (length > index) {\n      value = O[index++];\n      // eslint-disable-next-line no-self-compare -- NaN check\n      if (value != value) return true;\n    // Array#indexOf ignores holes, Array#includes - not\n    } else for (;length > index; index++) {\n      if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0;\n    } return !IS_INCLUDES && -1;\n  };\n};\n\nmodule.exports = {\n  // `Array.prototype.includes` method\n  // https://tc39.es/ecma262/#sec-array.prototype.includes\n  includes: createMethod(true),\n  // `Array.prototype.indexOf` method\n  // https://tc39.es/ecma262/#sec-array.prototype.indexof\n  indexOf: createMethod(false)\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\n\nvar toString = uncurryThis({}.toString);\nvar stringSlice = uncurryThis(''.slice);\n\nmodule.exports = function (it) {\n  return stringSlice(toString(it), 8, -1);\n};\n","var hasOwn = require('../internals/has-own-property');\nvar ownKeys = require('../internals/own-keys');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar definePropertyModule = require('../internals/object-define-property');\n\nmodule.exports = function (target, source, exceptions) {\n  var keys = ownKeys(source);\n  var defineProperty = definePropertyModule.f;\n  var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\n  for (var i = 0; i < keys.length; i++) {\n    var key = keys[i];\n    if (!hasOwn(target, key) && !(exceptions && hasOwn(exceptions, key))) {\n      defineProperty(target, key, getOwnPropertyDescriptor(source, key));\n    }\n  }\n};\n","var fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n  function F() { /* empty */ }\n  F.prototype.constructor = null;\n  // eslint-disable-next-line es/no-object-getprototypeof -- required for testing\n  return Object.getPrototypeOf(new F()) !== F.prototype;\n});\n","var DESCRIPTORS = require('../internals/descriptors');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = DESCRIPTORS ? function (object, key, value) {\n  return definePropertyModule.f(object, key, createPropertyDescriptor(1, value));\n} : function (object, key, value) {\n  object[key] = value;\n  return object;\n};\n","module.exports = function (bitmap, value) {\n  return {\n    enumerable: !(bitmap & 1),\n    configurable: !(bitmap & 2),\n    writable: !(bitmap & 4),\n    value: value\n  };\n};\n","var isCallable = require('../internals/is-callable');\nvar definePropertyModule = require('../internals/object-define-property');\nvar makeBuiltIn = require('../internals/make-built-in');\nvar defineGlobalProperty = require('../internals/define-global-property');\n\nmodule.exports = function (O, key, value, options) {\n  if (!options) options = {};\n  var simple = options.enumerable;\n  var name = options.name !== undefined ? options.name : key;\n  if (isCallable(value)) makeBuiltIn(value, name, options);\n  if (options.global) {\n    if (simple) O[key] = value;\n    else defineGlobalProperty(key, value);\n  } else {\n    try {\n      if (!options.unsafe) delete O[key];\n      else if (O[key]) simple = true;\n    } catch (error) { /* empty */ }\n    if (simple) O[key] = value;\n    else definePropertyModule.f(O, key, {\n      value: value,\n      enumerable: false,\n      configurable: !options.nonConfigurable,\n      writable: !options.nonWritable\n    });\n  } return O;\n};\n","var global = require('../internals/global');\n\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar defineProperty = Object.defineProperty;\n\nmodule.exports = function (key, value) {\n  try {\n    defineProperty(global, key, { value: value, configurable: true, writable: true });\n  } catch (error) {\n    global[key] = value;\n  } return value;\n};\n","var fails = require('../internals/fails');\n\n// Detect IE8's incomplete defineProperty implementation\nmodule.exports = !fails(function () {\n  // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n  return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] != 7;\n});\n","var documentAll = typeof document == 'object' && document.all;\n\n// https://tc39.es/ecma262/#sec-IsHTMLDDA-internal-slot\n// eslint-disable-next-line unicorn/no-typeof-undefined -- required for testing\nvar IS_HTMLDDA = typeof documentAll == 'undefined' && documentAll !== undefined;\n\nmodule.exports = {\n  all: documentAll,\n  IS_HTMLDDA: IS_HTMLDDA\n};\n","var global = require('../internals/global');\nvar isObject = require('../internals/is-object');\n\nvar document = global.document;\n// typeof document.createElement is 'object' in old IE\nvar EXISTS = isObject(document) && isObject(document.createElement);\n\nmodule.exports = function (it) {\n  return EXISTS ? document.createElement(it) : {};\n};\n","module.exports = typeof navigator != 'undefined' && String(navigator.userAgent) || '';\n","var global = require('../internals/global');\nvar userAgent = require('../internals/engine-user-agent');\n\nvar process = global.process;\nvar Deno = global.Deno;\nvar versions = process && process.versions || Deno && Deno.version;\nvar v8 = versions && versions.v8;\nvar match, version;\n\nif (v8) {\n  match = v8.split('.');\n  // in old Chrome, versions of V8 isn't V8 = Chrome / 10\n  // but their correct versions are not interesting for us\n  version = match[0] > 0 && match[0] < 4 ? 1 : +(match[0] + match[1]);\n}\n\n// BrowserFS NodeJS `process` polyfill incorrectly set `.v8` to `0.0`\n// so check `userAgent` even if `.v8` exists, but 0\nif (!version && userAgent) {\n  match = userAgent.match(/Edge\\/(\\d+)/);\n  if (!match || match[1] >= 74) {\n    match = userAgent.match(/Chrome\\/(\\d+)/);\n    if (match) version = +match[1];\n  }\n}\n\nmodule.exports = version;\n","// IE8- don't enum bug keys\nmodule.exports = [\n  'constructor',\n  'hasOwnProperty',\n  'isPrototypeOf',\n  'propertyIsEnumerable',\n  'toLocaleString',\n  'toString',\n  'valueOf'\n];\n","var global = require('../internals/global');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar defineBuiltIn = require('../internals/define-built-in');\nvar defineGlobalProperty = require('../internals/define-global-property');\nvar copyConstructorProperties = require('../internals/copy-constructor-properties');\nvar isForced = require('../internals/is-forced');\n\n/*\n  options.target         - name of the target object\n  options.global         - target is the global object\n  options.stat           - export as static methods of target\n  options.proto          - export as prototype methods of target\n  options.real           - real prototype method for the `pure` version\n  options.forced         - export even if the native feature is available\n  options.bind           - bind methods to the target, required for the `pure` version\n  options.wrap           - wrap constructors to preventing global pollution, required for the `pure` version\n  options.unsafe         - use the simple assignment of property instead of delete + defineProperty\n  options.sham           - add a flag to not completely full polyfills\n  options.enumerable     - export as enumerable property\n  options.dontCallGetSet - prevent calling a getter on target\n  options.name           - the .name of the function if it does not match the key\n*/\nmodule.exports = function (options, source) {\n  var TARGET = options.target;\n  var GLOBAL = options.global;\n  var STATIC = options.stat;\n  var FORCED, target, key, targetProperty, sourceProperty, descriptor;\n  if (GLOBAL) {\n    target = global;\n  } else if (STATIC) {\n    target = global[TARGET] || defineGlobalProperty(TARGET, {});\n  } else {\n    target = (global[TARGET] || {}).prototype;\n  }\n  if (target) for (key in source) {\n    sourceProperty = source[key];\n    if (options.dontCallGetSet) {\n      descriptor = getOwnPropertyDescriptor(target, key);\n      targetProperty = descriptor && descriptor.value;\n    } else targetProperty = target[key];\n    FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced);\n    // contained in target\n    if (!FORCED && targetProperty !== undefined) {\n      if (typeof sourceProperty == typeof targetProperty) continue;\n      copyConstructorProperties(sourceProperty, targetProperty);\n    }\n    // add a flag to not completely full polyfills\n    if (options.sham || (targetProperty && targetProperty.sham)) {\n      createNonEnumerableProperty(sourceProperty, 'sham', true);\n    }\n    defineBuiltIn(target, key, sourceProperty, options);\n  }\n};\n","module.exports = function (exec) {\n  try {\n    return !!exec();\n  } catch (error) {\n    return true;\n  }\n};\n","var fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n  // eslint-disable-next-line es/no-function-prototype-bind -- safe\n  var test = (function () { /* empty */ }).bind();\n  // eslint-disable-next-line no-prototype-builtins -- safe\n  return typeof test != 'function' || test.hasOwnProperty('prototype');\n});\n","var NATIVE_BIND = require('../internals/function-bind-native');\n\nvar call = Function.prototype.call;\n\nmodule.exports = NATIVE_BIND ? call.bind(call) : function () {\n  return call.apply(call, arguments);\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar hasOwn = require('../internals/has-own-property');\n\nvar FunctionPrototype = Function.prototype;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getDescriptor = DESCRIPTORS && Object.getOwnPropertyDescriptor;\n\nvar EXISTS = hasOwn(FunctionPrototype, 'name');\n// additional protection from minified / mangled / dropped function names\nvar PROPER = EXISTS && (function something() { /* empty */ }).name === 'something';\nvar CONFIGURABLE = EXISTS && (!DESCRIPTORS || (DESCRIPTORS && getDescriptor(FunctionPrototype, 'name').configurable));\n\nmodule.exports = {\n  EXISTS: EXISTS,\n  PROPER: PROPER,\n  CONFIGURABLE: CONFIGURABLE\n};\n","var NATIVE_BIND = require('../internals/function-bind-native');\n\nvar FunctionPrototype = Function.prototype;\nvar call = FunctionPrototype.call;\nvar uncurryThisWithBind = NATIVE_BIND && FunctionPrototype.bind.bind(call, call);\n\nmodule.exports = NATIVE_BIND ? uncurryThisWithBind : function (fn) {\n  return function () {\n    return call.apply(fn, arguments);\n  };\n};\n","var global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\n\nvar aFunction = function (argument) {\n  return isCallable(argument) ? argument : undefined;\n};\n\nmodule.exports = function (namespace, method) {\n  return arguments.length < 2 ? aFunction(global[namespace]) : global[namespace] && global[namespace][method];\n};\n","var aCallable = require('../internals/a-callable');\nvar isNullOrUndefined = require('../internals/is-null-or-undefined');\n\n// `GetMethod` abstract operation\n// https://tc39.es/ecma262/#sec-getmethod\nmodule.exports = function (V, P) {\n  var func = V[P];\n  return isNullOrUndefined(func) ? undefined : aCallable(func);\n};\n","var check = function (it) {\n  return it && it.Math == Math && it;\n};\n\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nmodule.exports =\n  // eslint-disable-next-line es/no-global-this -- safe\n  check(typeof globalThis == 'object' && globalThis) ||\n  check(typeof window == 'object' && window) ||\n  // eslint-disable-next-line no-restricted-globals -- safe\n  check(typeof self == 'object' && self) ||\n  check(typeof global == 'object' && global) ||\n  // eslint-disable-next-line no-new-func -- fallback\n  (function () { return this; })() || Function('return this')();\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar toObject = require('../internals/to-object');\n\nvar hasOwnProperty = uncurryThis({}.hasOwnProperty);\n\n// `HasOwnProperty` abstract operation\n// https://tc39.es/ecma262/#sec-hasownproperty\n// eslint-disable-next-line es/no-object-hasown -- safe\nmodule.exports = Object.hasOwn || function hasOwn(it, key) {\n  return hasOwnProperty(toObject(it), key);\n};\n","module.exports = {};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar createElement = require('../internals/document-create-element');\n\n// Thanks to IE8 for its funny defineProperty\nmodule.exports = !DESCRIPTORS && !fails(function () {\n  // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n  return Object.defineProperty(createElement('div'), 'a', {\n    get: function () { return 7; }\n  }).a != 7;\n});\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar fails = require('../internals/fails');\nvar classof = require('../internals/classof-raw');\n\nvar $Object = Object;\nvar split = uncurryThis(''.split);\n\n// fallback for non-array-like ES3 and non-enumerable old V8 strings\nmodule.exports = fails(function () {\n  // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346\n  // eslint-disable-next-line no-prototype-builtins -- safe\n  return !$Object('z').propertyIsEnumerable(0);\n}) ? function (it) {\n  return classof(it) == 'String' ? split(it, '') : $Object(it);\n} : $Object;\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar isCallable = require('../internals/is-callable');\nvar store = require('../internals/shared-store');\n\nvar functionToString = uncurryThis(Function.toString);\n\n// this helper broken in `core-js@3.4.1-3.4.4`, so we can't use `shared` helper\nif (!isCallable(store.inspectSource)) {\n  store.inspectSource = function (it) {\n    return functionToString(it);\n  };\n}\n\nmodule.exports = store.inspectSource;\n","var NATIVE_WEAK_MAP = require('../internals/weak-map-basic-detection');\nvar global = require('../internals/global');\nvar isObject = require('../internals/is-object');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar hasOwn = require('../internals/has-own-property');\nvar shared = require('../internals/shared-store');\nvar sharedKey = require('../internals/shared-key');\nvar hiddenKeys = require('../internals/hidden-keys');\n\nvar OBJECT_ALREADY_INITIALIZED = 'Object already initialized';\nvar TypeError = global.TypeError;\nvar WeakMap = global.WeakMap;\nvar set, get, has;\n\nvar enforce = function (it) {\n  return has(it) ? get(it) : set(it, {});\n};\n\nvar getterFor = function (TYPE) {\n  return function (it) {\n    var state;\n    if (!isObject(it) || (state = get(it)).type !== TYPE) {\n      throw TypeError('Incompatible receiver, ' + TYPE + ' required');\n    } return state;\n  };\n};\n\nif (NATIVE_WEAK_MAP || shared.state) {\n  var store = shared.state || (shared.state = new WeakMap());\n  /* eslint-disable no-self-assign -- prototype methods protection */\n  store.get = store.get;\n  store.has = store.has;\n  store.set = store.set;\n  /* eslint-enable no-self-assign -- prototype methods protection */\n  set = function (it, metadata) {\n    if (store.has(it)) throw TypeError(OBJECT_ALREADY_INITIALIZED);\n    metadata.facade = it;\n    store.set(it, metadata);\n    return metadata;\n  };\n  get = function (it) {\n    return store.get(it) || {};\n  };\n  has = function (it) {\n    return store.has(it);\n  };\n} else {\n  var STATE = sharedKey('state');\n  hiddenKeys[STATE] = true;\n  set = function (it, metadata) {\n    if (hasOwn(it, STATE)) throw TypeError(OBJECT_ALREADY_INITIALIZED);\n    metadata.facade = it;\n    createNonEnumerableProperty(it, STATE, metadata);\n    return metadata;\n  };\n  get = function (it) {\n    return hasOwn(it, STATE) ? it[STATE] : {};\n  };\n  has = function (it) {\n    return hasOwn(it, STATE);\n  };\n}\n\nmodule.exports = {\n  set: set,\n  get: get,\n  has: has,\n  enforce: enforce,\n  getterFor: getterFor\n};\n","var $documentAll = require('../internals/document-all');\n\nvar documentAll = $documentAll.all;\n\n// `IsCallable` abstract operation\n// https://tc39.es/ecma262/#sec-iscallable\nmodule.exports = $documentAll.IS_HTMLDDA ? function (argument) {\n  return typeof argument == 'function' || argument === documentAll;\n} : function (argument) {\n  return typeof argument == 'function';\n};\n","var fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\n\nvar replacement = /#|\\.prototype\\./;\n\nvar isForced = function (feature, detection) {\n  var value = data[normalize(feature)];\n  return value == POLYFILL ? true\n    : value == NATIVE ? false\n    : isCallable(detection) ? fails(detection)\n    : !!detection;\n};\n\nvar normalize = isForced.normalize = function (string) {\n  return String(string).replace(replacement, '.').toLowerCase();\n};\n\nvar data = isForced.data = {};\nvar NATIVE = isForced.NATIVE = 'N';\nvar POLYFILL = isForced.POLYFILL = 'P';\n\nmodule.exports = isForced;\n","// we can't use just `it == null` since of `document.all` special case\n// https://tc39.es/ecma262/#sec-IsHTMLDDA-internal-slot-aec\nmodule.exports = function (it) {\n  return it === null || it === undefined;\n};\n","var isCallable = require('../internals/is-callable');\nvar $documentAll = require('../internals/document-all');\n\nvar documentAll = $documentAll.all;\n\nmodule.exports = $documentAll.IS_HTMLDDA ? function (it) {\n  return typeof it == 'object' ? it !== null : isCallable(it) || it === documentAll;\n} : function (it) {\n  return typeof it == 'object' ? it !== null : isCallable(it);\n};\n","module.exports = false;\n","var getBuiltIn = require('../internals/get-built-in');\nvar isCallable = require('../internals/is-callable');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar $Object = Object;\n\nmodule.exports = USE_SYMBOL_AS_UID ? function (it) {\n  return typeof it == 'symbol';\n} : function (it) {\n  var $Symbol = getBuiltIn('Symbol');\n  return isCallable($Symbol) && isPrototypeOf($Symbol.prototype, $Object(it));\n};\n","var toLength = require('../internals/to-length');\n\n// `LengthOfArrayLike` abstract operation\n// https://tc39.es/ecma262/#sec-lengthofarraylike\nmodule.exports = function (obj) {\n  return toLength(obj.length);\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\nvar hasOwn = require('../internals/has-own-property');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar CONFIGURABLE_FUNCTION_NAME = require('../internals/function-name').CONFIGURABLE;\nvar inspectSource = require('../internals/inspect-source');\nvar InternalStateModule = require('../internals/internal-state');\n\nvar enforceInternalState = InternalStateModule.enforce;\nvar getInternalState = InternalStateModule.get;\nvar $String = String;\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar defineProperty = Object.defineProperty;\nvar stringSlice = uncurryThis(''.slice);\nvar replace = uncurryThis(''.replace);\nvar join = uncurryThis([].join);\n\nvar CONFIGURABLE_LENGTH = DESCRIPTORS && !fails(function () {\n  return defineProperty(function () { /* empty */ }, 'length', { value: 8 }).length !== 8;\n});\n\nvar TEMPLATE = String(String).split('String');\n\nvar makeBuiltIn = module.exports = function (value, name, options) {\n  if (stringSlice($String(name), 0, 7) === 'Symbol(') {\n    name = '[' + replace($String(name), /^Symbol\\(([^)]*)\\)/, '$1') + ']';\n  }\n  if (options && options.getter) name = 'get ' + name;\n  if (options && options.setter) name = 'set ' + name;\n  if (!hasOwn(value, 'name') || (CONFIGURABLE_FUNCTION_NAME && value.name !== name)) {\n    if (DESCRIPTORS) defineProperty(value, 'name', { value: name, configurable: true });\n    else value.name = name;\n  }\n  if (CONFIGURABLE_LENGTH && options && hasOwn(options, 'arity') && value.length !== options.arity) {\n    defineProperty(value, 'length', { value: options.arity });\n  }\n  try {\n    if (options && hasOwn(options, 'constructor') && options.constructor) {\n      if (DESCRIPTORS) defineProperty(value, 'prototype', { writable: false });\n    // in V8 ~ Chrome 53, prototypes of some methods, like `Array.prototype.values`, are non-writable\n    } else if (value.prototype) value.prototype = undefined;\n  } catch (error) { /* empty */ }\n  var state = enforceInternalState(value);\n  if (!hasOwn(state, 'source')) {\n    state.source = join(TEMPLATE, typeof name == 'string' ? name : '');\n  } return value;\n};\n\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n// eslint-disable-next-line no-extend-native -- required\nFunction.prototype.toString = makeBuiltIn(function toString() {\n  return isCallable(this) && getInternalState(this).source || inspectSource(this);\n}, 'toString');\n","var ceil = Math.ceil;\nvar floor = Math.floor;\n\n// `Math.trunc` method\n// https://tc39.es/ecma262/#sec-math.trunc\n// eslint-disable-next-line es/no-math-trunc -- safe\nmodule.exports = Math.trunc || function trunc(x) {\n  var n = +x;\n  return (n > 0 ? floor : ceil)(n);\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\nvar V8_PROTOTYPE_DEFINE_BUG = require('../internals/v8-prototype-define-bug');\nvar anObject = require('../internals/an-object');\nvar toPropertyKey = require('../internals/to-property-key');\n\nvar $TypeError = TypeError;\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar $defineProperty = Object.defineProperty;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar ENUMERABLE = 'enumerable';\nvar CONFIGURABLE = 'configurable';\nvar WRITABLE = 'writable';\n\n// `Object.defineProperty` method\n// https://tc39.es/ecma262/#sec-object.defineproperty\nexports.f = DESCRIPTORS ? V8_PROTOTYPE_DEFINE_BUG ? function defineProperty(O, P, Attributes) {\n  anObject(O);\n  P = toPropertyKey(P);\n  anObject(Attributes);\n  if (typeof O === 'function' && P === 'prototype' && 'value' in Attributes && WRITABLE in Attributes && !Attributes[WRITABLE]) {\n    var current = $getOwnPropertyDescriptor(O, P);\n    if (current && current[WRITABLE]) {\n      O[P] = Attributes.value;\n      Attributes = {\n        configurable: CONFIGURABLE in Attributes ? Attributes[CONFIGURABLE] : current[CONFIGURABLE],\n        enumerable: ENUMERABLE in Attributes ? Attributes[ENUMERABLE] : current[ENUMERABLE],\n        writable: false\n      };\n    }\n  } return $defineProperty(O, P, Attributes);\n} : $defineProperty : function defineProperty(O, P, Attributes) {\n  anObject(O);\n  P = toPropertyKey(P);\n  anObject(Attributes);\n  if (IE8_DOM_DEFINE) try {\n    return $defineProperty(O, P, Attributes);\n  } catch (error) { /* empty */ }\n  if ('get' in Attributes || 'set' in Attributes) throw $TypeError('Accessors not supported');\n  if ('value' in Attributes) O[P] = Attributes.value;\n  return O;\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar call = require('../internals/function-call');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toPropertyKey = require('../internals/to-property-key');\nvar hasOwn = require('../internals/has-own-property');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\n\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor\nexports.f = DESCRIPTORS ? $getOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {\n  O = toIndexedObject(O);\n  P = toPropertyKey(P);\n  if (IE8_DOM_DEFINE) try {\n    return $getOwnPropertyDescriptor(O, P);\n  } catch (error) { /* empty */ }\n  if (hasOwn(O, P)) return createPropertyDescriptor(!call(propertyIsEnumerableModule.f, O, P), O[P]);\n};\n","var internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\nvar hiddenKeys = enumBugKeys.concat('length', 'prototype');\n\n// `Object.getOwnPropertyNames` method\n// https://tc39.es/ecma262/#sec-object.getownpropertynames\n// eslint-disable-next-line es/no-object-getownpropertynames -- safe\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n  return internalObjectKeys(O, hiddenKeys);\n};\n","// eslint-disable-next-line es/no-object-getownpropertysymbols -- safe\nexports.f = Object.getOwnPropertySymbols;\n","var hasOwn = require('../internals/has-own-property');\nvar isCallable = require('../internals/is-callable');\nvar toObject = require('../internals/to-object');\nvar sharedKey = require('../internals/shared-key');\nvar CORRECT_PROTOTYPE_GETTER = require('../internals/correct-prototype-getter');\n\nvar IE_PROTO = sharedKey('IE_PROTO');\nvar $Object = Object;\nvar ObjectPrototype = $Object.prototype;\n\n// `Object.getPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.getprototypeof\n// eslint-disable-next-line es/no-object-getprototypeof -- safe\nmodule.exports = CORRECT_PROTOTYPE_GETTER ? $Object.getPrototypeOf : function (O) {\n  var object = toObject(O);\n  if (hasOwn(object, IE_PROTO)) return object[IE_PROTO];\n  var constructor = object.constructor;\n  if (isCallable(constructor) && object instanceof constructor) {\n    return constructor.prototype;\n  } return object instanceof $Object ? ObjectPrototype : null;\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\n\nmodule.exports = uncurryThis({}.isPrototypeOf);\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar hasOwn = require('../internals/has-own-property');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar indexOf = require('../internals/array-includes').indexOf;\nvar hiddenKeys = require('../internals/hidden-keys');\n\nvar push = uncurryThis([].push);\n\nmodule.exports = function (object, names) {\n  var O = toIndexedObject(object);\n  var i = 0;\n  var result = [];\n  var key;\n  for (key in O) !hasOwn(hiddenKeys, key) && hasOwn(O, key) && push(result, key);\n  // Don't enum bug & hidden keys\n  while (names.length > i) if (hasOwn(O, key = names[i++])) {\n    ~indexOf(result, key) || push(result, key);\n  }\n  return result;\n};\n","var internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\n// `Object.keys` method\n// https://tc39.es/ecma262/#sec-object.keys\n// eslint-disable-next-line es/no-object-keys -- safe\nmodule.exports = Object.keys || function keys(O) {\n  return internalObjectKeys(O, enumBugKeys);\n};\n","'use strict';\nvar $propertyIsEnumerable = {}.propertyIsEnumerable;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// Nashorn ~ JDK8 bug\nvar NASHORN_BUG = getOwnPropertyDescriptor && !$propertyIsEnumerable.call({ 1: 2 }, 1);\n\n// `Object.prototype.propertyIsEnumerable` method implementation\n// https://tc39.es/ecma262/#sec-object.prototype.propertyisenumerable\nexports.f = NASHORN_BUG ? function propertyIsEnumerable(V) {\n  var descriptor = getOwnPropertyDescriptor(this, V);\n  return !!descriptor && descriptor.enumerable;\n} : $propertyIsEnumerable;\n","var DESCRIPTORS = require('../internals/descriptors');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar objectKeys = require('../internals/object-keys');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar $propertyIsEnumerable = require('../internals/object-property-is-enumerable').f;\n\nvar propertyIsEnumerable = uncurryThis($propertyIsEnumerable);\nvar push = uncurryThis([].push);\n\n// `Object.{ entries, values }` methods implementation\nvar createMethod = function (TO_ENTRIES) {\n  return function (it) {\n    var O = toIndexedObject(it);\n    var keys = objectKeys(O);\n    var length = keys.length;\n    var i = 0;\n    var result = [];\n    var key;\n    while (length > i) {\n      key = keys[i++];\n      if (!DESCRIPTORS || propertyIsEnumerable(O, key)) {\n        push(result, TO_ENTRIES ? [key, O[key]] : O[key]);\n      }\n    }\n    return result;\n  };\n};\n\nmodule.exports = {\n  // `Object.entries` method\n  // https://tc39.es/ecma262/#sec-object.entries\n  entries: createMethod(true),\n  // `Object.values` method\n  // https://tc39.es/ecma262/#sec-object.values\n  values: createMethod(false)\n};\n","var call = require('../internals/function-call');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\n\nvar $TypeError = TypeError;\n\n// `OrdinaryToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-ordinarytoprimitive\nmodule.exports = function (input, pref) {\n  var fn, val;\n  if (pref === 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n  if (isCallable(fn = input.valueOf) && !isObject(val = call(fn, input))) return val;\n  if (pref !== 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n  throw $TypeError(\"Can't convert object to primitive value\");\n};\n","var getBuiltIn = require('../internals/get-built-in');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar anObject = require('../internals/an-object');\n\nvar concat = uncurryThis([].concat);\n\n// all object keys, includes non-enumerable and symbols\nmodule.exports = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) {\n  var keys = getOwnPropertyNamesModule.f(anObject(it));\n  var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n  return getOwnPropertySymbols ? concat(keys, getOwnPropertySymbols(it)) : keys;\n};\n","var global = require('../internals/global');\n\nmodule.exports = global;\n","var isNullOrUndefined = require('../internals/is-null-or-undefined');\n\nvar $TypeError = TypeError;\n\n// `RequireObjectCoercible` abstract operation\n// https://tc39.es/ecma262/#sec-requireobjectcoercible\nmodule.exports = function (it) {\n  if (isNullOrUndefined(it)) throw $TypeError(\"Can't call method on \" + it);\n  return it;\n};\n","var shared = require('../internals/shared');\nvar uid = require('../internals/uid');\n\nvar keys = shared('keys');\n\nmodule.exports = function (key) {\n  return keys[key] || (keys[key] = uid(key));\n};\n","var global = require('../internals/global');\nvar defineGlobalProperty = require('../internals/define-global-property');\n\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || defineGlobalProperty(SHARED, {});\n\nmodule.exports = store;\n","var IS_PURE = require('../internals/is-pure');\nvar store = require('../internals/shared-store');\n\n(module.exports = function (key, value) {\n  return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n  version: '3.29.1',\n  mode: IS_PURE ? 'pure' : 'global',\n  copyright: '© 2014-2023 Denis Pushkarev (zloirock.ru)',\n  license: 'https://github.com/zloirock/core-js/blob/v3.29.1/LICENSE',\n  source: 'https://github.com/zloirock/core-js'\n});\n","/* eslint-disable es/no-symbol -- required for testing */\nvar V8_VERSION = require('../internals/engine-v8-version');\nvar fails = require('../internals/fails');\n\n// eslint-disable-next-line es/no-object-getownpropertysymbols -- required for testing\nmodule.exports = !!Object.getOwnPropertySymbols && !fails(function () {\n  var symbol = Symbol();\n  // Chrome 38 Symbol has incorrect toString conversion\n  // `get-own-property-symbols` polyfill symbols converted to object are not Symbol instances\n  return !String(symbol) || !(Object(symbol) instanceof Symbol) ||\n    // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances\n    !Symbol.sham && V8_VERSION && V8_VERSION < 41;\n});\n","var toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\n\nvar max = Math.max;\nvar min = Math.min;\n\n// Helper for a popular repeating case of the spec:\n// Let integer be ? ToInteger(index).\n// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length).\nmodule.exports = function (index, length) {\n  var integer = toIntegerOrInfinity(index);\n  return integer < 0 ? max(integer + length, 0) : min(integer, length);\n};\n","// toObject with fallback for non-array-like ES3 strings\nvar IndexedObject = require('../internals/indexed-object');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nmodule.exports = function (it) {\n  return IndexedObject(requireObjectCoercible(it));\n};\n","var trunc = require('../internals/math-trunc');\n\n// `ToIntegerOrInfinity` abstract operation\n// https://tc39.es/ecma262/#sec-tointegerorinfinity\nmodule.exports = function (argument) {\n  var number = +argument;\n  // eslint-disable-next-line no-self-compare -- NaN check\n  return number !== number || number === 0 ? 0 : trunc(number);\n};\n","var toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\n\nvar min = Math.min;\n\n// `ToLength` abstract operation\n// https://tc39.es/ecma262/#sec-tolength\nmodule.exports = function (argument) {\n  return argument > 0 ? min(toIntegerOrInfinity(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991\n};\n","var requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar $Object = Object;\n\n// `ToObject` abstract operation\n// https://tc39.es/ecma262/#sec-toobject\nmodule.exports = function (argument) {\n  return $Object(requireObjectCoercible(argument));\n};\n","var call = require('../internals/function-call');\nvar isObject = require('../internals/is-object');\nvar isSymbol = require('../internals/is-symbol');\nvar getMethod = require('../internals/get-method');\nvar ordinaryToPrimitive = require('../internals/ordinary-to-primitive');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar $TypeError = TypeError;\nvar TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\n\n// `ToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-toprimitive\nmodule.exports = function (input, pref) {\n  if (!isObject(input) || isSymbol(input)) return input;\n  var exoticToPrim = getMethod(input, TO_PRIMITIVE);\n  var result;\n  if (exoticToPrim) {\n    if (pref === undefined) pref = 'default';\n    result = call(exoticToPrim, input, pref);\n    if (!isObject(result) || isSymbol(result)) return result;\n    throw $TypeError(\"Can't convert object to primitive value\");\n  }\n  if (pref === undefined) pref = 'number';\n  return ordinaryToPrimitive(input, pref);\n};\n","var toPrimitive = require('../internals/to-primitive');\nvar isSymbol = require('../internals/is-symbol');\n\n// `ToPropertyKey` abstract operation\n// https://tc39.es/ecma262/#sec-topropertykey\nmodule.exports = function (argument) {\n  var key = toPrimitive(argument, 'string');\n  return isSymbol(key) ? key : key + '';\n};\n","var $String = String;\n\nmodule.exports = function (argument) {\n  try {\n    return $String(argument);\n  } catch (error) {\n    return 'Object';\n  }\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\n\nvar id = 0;\nvar postfix = Math.random();\nvar toString = uncurryThis(1.0.toString);\n\nmodule.exports = function (key) {\n  return 'Symbol(' + (key === undefined ? '' : key) + ')_' + toString(++id + postfix, 36);\n};\n","/* eslint-disable es/no-symbol -- required for testing */\nvar NATIVE_SYMBOL = require('../internals/symbol-constructor-detection');\n\nmodule.exports = NATIVE_SYMBOL\n  && !Symbol.sham\n  && typeof Symbol.iterator == 'symbol';\n","var DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\n\n// V8 ~ Chrome 36-\n// https://bugs.chromium.org/p/v8/issues/detail?id=3334\nmodule.exports = DESCRIPTORS && fails(function () {\n  // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n  return Object.defineProperty(function () { /* empty */ }, 'prototype', {\n    value: 42,\n    writable: false\n  }).prototype != 42;\n});\n","var global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\n\nvar WeakMap = global.WeakMap;\n\nmodule.exports = isCallable(WeakMap) && /native code/.test(String(WeakMap));\n","var global = require('../internals/global');\nvar shared = require('../internals/shared');\nvar hasOwn = require('../internals/has-own-property');\nvar uid = require('../internals/uid');\nvar NATIVE_SYMBOL = require('../internals/symbol-constructor-detection');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar Symbol = global.Symbol;\nvar WellKnownSymbolsStore = shared('wks');\nvar createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol['for'] || Symbol : Symbol && Symbol.withoutSetter || uid;\n\nmodule.exports = function (name) {\n  if (!hasOwn(WellKnownSymbolsStore, name)) {\n    WellKnownSymbolsStore[name] = NATIVE_SYMBOL && hasOwn(Symbol, name)\n      ? Symbol[name]\n      : createWellKnownSymbol('Symbol.' + name);\n  } return WellKnownSymbolsStore[name];\n};\n","var $ = require('../internals/export');\nvar $entries = require('../internals/object-to-array').entries;\n\n// `Object.entries` method\n// https://tc39.es/ecma262/#sec-object.entries\n$({ target: 'Object', stat: true }, {\n  entries: function entries(O) {\n    return $entries(O);\n  }\n});\n","var $ = require('../internals/export');\nvar fails = require('../internals/fails');\nvar toObject = require('../internals/to-object');\nvar nativeGetPrototypeOf = require('../internals/object-get-prototype-of');\nvar CORRECT_PROTOTYPE_GETTER = require('../internals/correct-prototype-getter');\n\nvar FAILS_ON_PRIMITIVES = fails(function () { nativeGetPrototypeOf(1); });\n\n// `Object.getPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.getprototypeof\n$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES, sham: !CORRECT_PROTOTYPE_GETTER }, {\n  getPrototypeOf: function getPrototypeOf(it) {\n    return nativeGetPrototypeOf(toObject(it));\n  }\n});\n\n","var parent = require('../../es/object/entries');\n\nmodule.exports = parent;\n","var parent = require('../../es/object/get-prototype-of');\n\nmodule.exports = parent;\n","'use strict';\n\n/******************************************************************************\n * Created 2008-08-19.\n *\n * Dijkstra path-finding functions. Adapted from the Dijkstar Python project.\n *\n * Copyright (C) 2008\n *   Wyatt Baldwin <self@wyattbaldwin.com>\n *   All rights reserved\n *\n * Licensed under the MIT license.\n *\n *   http://www.opensource.org/licenses/mit-license.php\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n *****************************************************************************/\nvar dijkstra = {\n  single_source_shortest_paths: function(graph, s, d) {\n    // Predecessor map for each node that has been encountered.\n    // node ID => predecessor node ID\n    var predecessors = {};\n\n    // Costs of shortest paths from s to all nodes encountered.\n    // node ID => cost\n    var costs = {};\n    costs[s] = 0;\n\n    // Costs of shortest paths from s to all nodes encountered; differs from\n    // `costs` in that it provides easy access to the node that currently has\n    // the known shortest path from s.\n    // XXX: Do we actually need both `costs` and `open`?\n    var open = dijkstra.PriorityQueue.make();\n    open.push(s, 0);\n\n    var closest,\n        u, v,\n        cost_of_s_to_u,\n        adjacent_nodes,\n        cost_of_e,\n        cost_of_s_to_u_plus_cost_of_e,\n        cost_of_s_to_v,\n        first_visit;\n    while (!open.empty()) {\n      // In the nodes remaining in graph that have a known cost from s,\n      // find the node, u, that currently has the shortest path from s.\n      closest = open.pop();\n      u = closest.value;\n      cost_of_s_to_u = closest.cost;\n\n      // Get nodes adjacent to u...\n      adjacent_nodes = graph[u] || {};\n\n      // ...and explore the edges that connect u to those nodes, updating\n      // the cost of the shortest paths to any or all of those nodes as\n      // necessary. v is the node across the current edge from u.\n      for (v in adjacent_nodes) {\n        if (adjacent_nodes.hasOwnProperty(v)) {\n          // Get the cost of the edge running from u to v.\n          cost_of_e = adjacent_nodes[v];\n\n          // Cost of s to u plus the cost of u to v across e--this is *a*\n          // cost from s to v that may or may not be less than the current\n          // known cost to v.\n          cost_of_s_to_u_plus_cost_of_e = cost_of_s_to_u + cost_of_e;\n\n          // If we haven't visited v yet OR if the current known cost from s to\n          // v is greater than the new cost we just found (cost of s to u plus\n          // cost of u to v across e), update v's cost in the cost list and\n          // update v's predecessor in the predecessor list (it's now u).\n          cost_of_s_to_v = costs[v];\n          first_visit = (typeof costs[v] === 'undefined');\n          if (first_visit || cost_of_s_to_v > cost_of_s_to_u_plus_cost_of_e) {\n            costs[v] = cost_of_s_to_u_plus_cost_of_e;\n            open.push(v, cost_of_s_to_u_plus_cost_of_e);\n            predecessors[v] = u;\n          }\n        }\n      }\n    }\n\n    if (typeof d !== 'undefined' && typeof costs[d] === 'undefined') {\n      var msg = ['Could not find a path from ', s, ' to ', d, '.'].join('');\n      throw new Error(msg);\n    }\n\n    return predecessors;\n  },\n\n  extract_shortest_path_from_predecessor_list: function(predecessors, d) {\n    var nodes = [];\n    var u = d;\n    var predecessor;\n    while (u) {\n      nodes.push(u);\n      predecessor = predecessors[u];\n      u = predecessors[u];\n    }\n    nodes.reverse();\n    return nodes;\n  },\n\n  find_path: function(graph, s, d) {\n    var predecessors = dijkstra.single_source_shortest_paths(graph, s, d);\n    return dijkstra.extract_shortest_path_from_predecessor_list(\n      predecessors, d);\n  },\n\n  /**\n   * A very naive priority queue implementation.\n   */\n  PriorityQueue: {\n    make: function (opts) {\n      var T = dijkstra.PriorityQueue,\n          t = {},\n          key;\n      opts = opts || {};\n      for (key in T) {\n        if (T.hasOwnProperty(key)) {\n          t[key] = T[key];\n        }\n      }\n      t.queue = [];\n      t.sorter = opts.sorter || T.default_sorter;\n      return t;\n    },\n\n    default_sorter: function (a, b) {\n      return a.cost - b.cost;\n    },\n\n    /**\n     * Add a new item to the queue and ensure the highest priority element\n     * is at the front of the queue.\n     */\n    push: function (value, cost) {\n      var item = {value: value, cost: cost};\n      this.queue.push(item);\n      this.queue.sort(this.sorter);\n    },\n\n    /**\n     * Return the highest priority element in the queue.\n     */\n    pop: function () {\n      return this.queue.shift();\n    },\n\n    empty: function () {\n      return this.queue.length === 0;\n    }\n  }\n};\n\n\n// node.js module exports\nif (typeof module !== 'undefined') {\n  module.exports = dijkstra;\n}\n","/*! @license DOMPurify 3.0.1 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.0.1/LICENSE */\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 = typeof globalThis !== 'undefined' ? globalThis : global || self, global.DOMPurify = factory());\n})(this, (function () { 'use strict';\n\n  function _typeof(obj) {\n    \"@babel/helpers - typeof\";\n\n    return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n      return typeof obj;\n    } : function (obj) {\n      return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n    }, _typeof(obj);\n  }\n\n  function _setPrototypeOf(o, p) {\n    _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n      o.__proto__ = p;\n      return o;\n    };\n\n    return _setPrototypeOf(o, p);\n  }\n\n  function _isNativeReflectConstruct() {\n    if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n    if (Reflect.construct.sham) return false;\n    if (typeof Proxy === \"function\") return true;\n\n    try {\n      Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));\n      return true;\n    } catch (e) {\n      return false;\n    }\n  }\n\n  function _construct(Parent, args, Class) {\n    if (_isNativeReflectConstruct()) {\n      _construct = Reflect.construct;\n    } else {\n      _construct = function _construct(Parent, args, Class) {\n        var a = [null];\n        a.push.apply(a, args);\n        var Constructor = Function.bind.apply(Parent, a);\n        var instance = new Constructor();\n        if (Class) _setPrototypeOf(instance, Class.prototype);\n        return instance;\n      };\n    }\n\n    return _construct.apply(null, arguments);\n  }\n\n  function _slicedToArray(arr, i) {\n    return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();\n  }\n\n  function _toConsumableArray(arr) {\n    return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n  }\n\n  function _arrayWithoutHoles(arr) {\n    if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n  }\n\n  function _arrayWithHoles(arr) {\n    if (Array.isArray(arr)) return arr;\n  }\n\n  function _iterableToArray(iter) {\n    if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n  }\n\n  function _iterableToArrayLimit(arr, i) {\n    var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"];\n\n    if (_i == null) return;\n    var _arr = [];\n    var _n = true;\n    var _d = false;\n\n    var _s, _e;\n\n    try {\n      for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) {\n        _arr.push(_s.value);\n\n        if (i && _arr.length === i) break;\n      }\n    } catch (err) {\n      _d = true;\n      _e = err;\n    } finally {\n      try {\n        if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n      } finally {\n        if (_d) throw _e;\n      }\n    }\n\n    return _arr;\n  }\n\n  function _unsupportedIterableToArray(o, minLen) {\n    if (!o) return;\n    if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n    var n = Object.prototype.toString.call(o).slice(8, -1);\n    if (n === \"Object\" && o.constructor) n = o.constructor.name;\n    if (n === \"Map\" || n === \"Set\") return Array.from(o);\n    if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n  }\n\n  function _arrayLikeToArray(arr, len) {\n    if (len == null || len > arr.length) len = arr.length;\n\n    for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n    return arr2;\n  }\n\n  function _nonIterableSpread() {\n    throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n  }\n\n  function _nonIterableRest() {\n    throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n  }\n\n  function _createForOfIteratorHelper(o, allowArrayLike) {\n    var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"];\n\n    if (!it) {\n      if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") {\n        if (it) o = it;\n        var i = 0;\n\n        var F = function () {};\n\n        return {\n          s: F,\n          n: function () {\n            if (i >= o.length) return {\n              done: true\n            };\n            return {\n              done: false,\n              value: o[i++]\n            };\n          },\n          e: function (e) {\n            throw e;\n          },\n          f: F\n        };\n      }\n\n      throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n    }\n\n    var normalCompletion = true,\n        didErr = false,\n        err;\n    return {\n      s: function () {\n        it = it.call(o);\n      },\n      n: function () {\n        var step = it.next();\n        normalCompletion = step.done;\n        return step;\n      },\n      e: function (e) {\n        didErr = true;\n        err = e;\n      },\n      f: function () {\n        try {\n          if (!normalCompletion && it.return != null) it.return();\n        } finally {\n          if (didErr) throw err;\n        }\n      }\n    };\n  }\n\n  var entries = Object.entries,\n      setPrototypeOf = Object.setPrototypeOf,\n      isFrozen = Object.isFrozen,\n      getPrototypeOf = Object.getPrototypeOf,\n      getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n  var freeze = Object.freeze,\n      seal = Object.seal,\n      create = Object.create; // eslint-disable-line import/no-mutable-exports\n\n  var _ref = typeof Reflect !== 'undefined' && Reflect,\n      apply = _ref.apply,\n      construct = _ref.construct;\n\n  if (!apply) {\n    apply = function apply(fun, thisValue, args) {\n      return fun.apply(thisValue, args);\n    };\n  }\n\n  if (!freeze) {\n    freeze = function freeze(x) {\n      return x;\n    };\n  }\n\n  if (!seal) {\n    seal = function seal(x) {\n      return x;\n    };\n  }\n\n  if (!construct) {\n    construct = function construct(Func, args) {\n      return _construct(Func, _toConsumableArray(args));\n    };\n  }\n\n  var arrayForEach = unapply(Array.prototype.forEach);\n  var arrayPop = unapply(Array.prototype.pop);\n  var arrayPush = unapply(Array.prototype.push);\n  var stringToLowerCase = unapply(String.prototype.toLowerCase);\n  var stringToString = unapply(String.prototype.toString);\n  var stringMatch = unapply(String.prototype.match);\n  var stringReplace = unapply(String.prototype.replace);\n  var stringIndexOf = unapply(String.prototype.indexOf);\n  var stringTrim = unapply(String.prototype.trim);\n  var regExpTest = unapply(RegExp.prototype.test);\n  var typeErrorCreate = unconstruct(TypeError);\n  function unapply(func) {\n    return function (thisArg) {\n      for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n        args[_key - 1] = arguments[_key];\n      }\n\n      return apply(func, thisArg, args);\n    };\n  }\n  function unconstruct(func) {\n    return function () {\n      for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n        args[_key2] = arguments[_key2];\n      }\n\n      return construct(func, args);\n    };\n  }\n  /* Add properties to a lookup table */\n\n  function addToSet(set, array, transformCaseFunc) {\n    transformCaseFunc = transformCaseFunc ? transformCaseFunc : stringToLowerCase;\n\n    if (setPrototypeOf) {\n      // Make 'in' and truthy checks like Boolean(set.constructor)\n      // independent of any properties defined on Object.prototype.\n      // Prevent prototype setters from intercepting set as a this value.\n      setPrototypeOf(set, null);\n    }\n\n    var l = array.length;\n\n    while (l--) {\n      var element = array[l];\n\n      if (typeof element === 'string') {\n        var lcElement = transformCaseFunc(element);\n\n        if (lcElement !== element) {\n          // Config presets (e.g. tags.js, attrs.js) are immutable.\n          if (!isFrozen(array)) {\n            array[l] = lcElement;\n          }\n\n          element = lcElement;\n        }\n      }\n\n      set[element] = true;\n    }\n\n    return set;\n  }\n  /* Shallow clone an object */\n\n  function clone(object) {\n    var newObject = create(null);\n\n    var _iterator = _createForOfIteratorHelper(entries(object)),\n        _step;\n\n    try {\n      for (_iterator.s(); !(_step = _iterator.n()).done;) {\n        var _step$value = _slicedToArray(_step.value, 2),\n            property = _step$value[0],\n            value = _step$value[1];\n\n        newObject[property] = value;\n      }\n    } catch (err) {\n      _iterator.e(err);\n    } finally {\n      _iterator.f();\n    }\n\n    return newObject;\n  }\n  /* This method automatically checks if the prop is function\n   * or getter and behaves accordingly. */\n\n  function lookupGetter(object, prop) {\n    while (object !== null) {\n      var desc = getOwnPropertyDescriptor(object, prop);\n\n      if (desc) {\n        if (desc.get) {\n          return unapply(desc.get);\n        }\n\n        if (typeof desc.value === 'function') {\n          return unapply(desc.value);\n        }\n      }\n\n      object = getPrototypeOf(object);\n    }\n\n    function fallbackValue(element) {\n      console.warn('fallback value for', element);\n      return null;\n    }\n\n    return fallbackValue;\n  }\n\n  var html$1 = freeze(['a', 'abbr', 'acronym', 'address', 'area', 'article', 'aside', 'audio', 'b', 'bdi', 'bdo', 'big', 'blink', 'blockquote', 'body', 'br', 'button', 'canvas', 'caption', 'center', 'cite', 'code', 'col', 'colgroup', 'content', 'data', 'datalist', 'dd', 'decorator', 'del', 'details', 'dfn', 'dialog', 'dir', 'div', 'dl', 'dt', 'element', 'em', 'fieldset', 'figcaption', 'figure', 'font', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'i', 'img', 'input', 'ins', 'kbd', 'label', 'legend', 'li', 'main', 'map', 'mark', 'marquee', 'menu', 'menuitem', 'meter', 'nav', 'nobr', 'ol', 'optgroup', 'option', 'output', 'p', 'picture', 'pre', 'progress', 'q', 'rp', 'rt', 'ruby', 's', 'samp', 'section', 'select', 'shadow', 'small', 'source', 'spacer', 'span', 'strike', 'strong', 'style', 'sub', 'summary', 'sup', 'table', 'tbody', 'td', 'template', 'textarea', 'tfoot', 'th', 'thead', 'time', 'tr', 'track', 'tt', 'u', 'ul', 'var', 'video', 'wbr']); // SVG\n\n  var svg$1 = freeze(['svg', 'a', 'altglyph', 'altglyphdef', 'altglyphitem', 'animatecolor', 'animatemotion', 'animatetransform', 'circle', 'clippath', 'defs', 'desc', 'ellipse', 'filter', 'font', 'g', 'glyph', 'glyphref', 'hkern', 'image', 'line', 'lineargradient', 'marker', 'mask', 'metadata', 'mpath', 'path', 'pattern', 'polygon', 'polyline', 'radialgradient', 'rect', 'stop', 'style', 'switch', 'symbol', 'text', 'textpath', 'title', 'tref', 'tspan', 'view', 'vkern']);\n  var svgFilters = freeze(['feBlend', 'feColorMatrix', 'feComponentTransfer', 'feComposite', 'feConvolveMatrix', 'feDiffuseLighting', 'feDisplacementMap', 'feDistantLight', 'feFlood', 'feFuncA', 'feFuncB', 'feFuncG', 'feFuncR', 'feGaussianBlur', 'feImage', 'feMerge', 'feMergeNode', 'feMorphology', 'feOffset', 'fePointLight', 'feSpecularLighting', 'feSpotLight', 'feTile', 'feTurbulence']); // List of SVG elements that are disallowed by default.\n  // We still need to know them so that we can do namespace\n  // checks properly in case one wants to add them to\n  // allow-list.\n\n  var svgDisallowed = freeze(['animate', 'color-profile', 'cursor', 'discard', 'fedropshadow', 'font-face', 'font-face-format', 'font-face-name', 'font-face-src', 'font-face-uri', 'foreignobject', 'hatch', 'hatchpath', 'mesh', 'meshgradient', 'meshpatch', 'meshrow', 'missing-glyph', 'script', 'set', 'solidcolor', 'unknown', 'use']);\n  var mathMl$1 = freeze(['math', 'menclose', 'merror', 'mfenced', 'mfrac', 'mglyph', 'mi', 'mlabeledtr', 'mmultiscripts', 'mn', 'mo', 'mover', 'mpadded', 'mphantom', 'mroot', 'mrow', 'ms', 'mspace', 'msqrt', 'mstyle', 'msub', 'msup', 'msubsup', 'mtable', 'mtd', 'mtext', 'mtr', 'munder', 'munderover']); // Similarly to SVG, we want to know all MathML elements,\n  // even those that we disallow by default.\n\n  var mathMlDisallowed = freeze(['maction', 'maligngroup', 'malignmark', 'mlongdiv', 'mscarries', 'mscarry', 'msgroup', 'mstack', 'msline', 'msrow', 'semantics', 'annotation', 'annotation-xml', 'mprescripts', 'none']);\n  var text = freeze(['#text']);\n\n  var html = freeze(['accept', 'action', 'align', 'alt', 'autocapitalize', 'autocomplete', 'autopictureinpicture', 'autoplay', 'background', 'bgcolor', 'border', 'capture', 'cellpadding', 'cellspacing', 'checked', 'cite', 'class', 'clear', 'color', 'cols', 'colspan', 'controls', 'controlslist', 'coords', 'crossorigin', 'datetime', 'decoding', 'default', 'dir', 'disabled', 'disablepictureinpicture', 'disableremoteplayback', 'download', 'draggable', 'enctype', 'enterkeyhint', 'face', 'for', 'headers', 'height', 'hidden', 'high', 'href', 'hreflang', 'id', 'inputmode', 'integrity', 'ismap', 'kind', 'label', 'lang', 'list', 'loading', 'loop', 'low', 'max', 'maxlength', 'media', 'method', 'min', 'minlength', 'multiple', 'muted', 'name', 'nonce', 'noshade', 'novalidate', 'nowrap', 'open', 'optimum', 'pattern', 'placeholder', 'playsinline', 'poster', 'preload', 'pubdate', 'radiogroup', 'readonly', 'rel', 'required', 'rev', 'reversed', 'role', 'rows', 'rowspan', 'spellcheck', 'scope', 'selected', 'shape', 'size', 'sizes', 'span', 'srclang', 'start', 'src', 'srcset', 'step', 'style', 'summary', 'tabindex', 'title', 'translate', 'type', 'usemap', 'valign', 'value', 'width', 'xmlns', 'slot']);\n  var svg = freeze(['accent-height', 'accumulate', 'additive', 'alignment-baseline', 'ascent', 'attributename', 'attributetype', 'azimuth', 'basefrequency', 'baseline-shift', 'begin', 'bias', 'by', 'class', 'clip', 'clippathunits', 'clip-path', 'clip-rule', 'color', 'color-interpolation', 'color-interpolation-filters', 'color-profile', 'color-rendering', 'cx', 'cy', 'd', 'dx', 'dy', 'diffuseconstant', 'direction', 'display', 'divisor', 'dur', 'edgemode', 'elevation', 'end', 'fill', 'fill-opacity', 'fill-rule', 'filter', 'filterunits', 'flood-color', 'flood-opacity', 'font-family', 'font-size', 'font-size-adjust', 'font-stretch', 'font-style', 'font-variant', 'font-weight', 'fx', 'fy', 'g1', 'g2', 'glyph-name', 'glyphref', 'gradientunits', 'gradienttransform', 'height', 'href', 'id', 'image-rendering', 'in', 'in2', 'k', 'k1', 'k2', 'k3', 'k4', 'kerning', 'keypoints', 'keysplines', 'keytimes', 'lang', 'lengthadjust', 'letter-spacing', 'kernelmatrix', 'kernelunitlength', 'lighting-color', 'local', 'marker-end', 'marker-mid', 'marker-start', 'markerheight', 'markerunits', 'markerwidth', 'maskcontentunits', 'maskunits', 'max', 'mask', 'media', 'method', 'mode', 'min', 'name', 'numoctaves', 'offset', 'operator', 'opacity', 'order', 'orient', 'orientation', 'origin', 'overflow', 'paint-order', 'path', 'pathlength', 'patterncontentunits', 'patterntransform', 'patternunits', 'points', 'preservealpha', 'preserveaspectratio', 'primitiveunits', 'r', 'rx', 'ry', 'radius', 'refx', 'refy', 'repeatcount', 'repeatdur', 'restart', 'result', 'rotate', 'scale', 'seed', 'shape-rendering', 'specularconstant', 'specularexponent', 'spreadmethod', 'startoffset', 'stddeviation', 'stitchtiles', 'stop-color', 'stop-opacity', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-miterlimit', 'stroke-opacity', 'stroke', 'stroke-width', 'style', 'surfacescale', 'systemlanguage', 'tabindex', 'targetx', 'targety', 'transform', 'transform-origin', 'text-anchor', 'text-decoration', 'text-rendering', 'textlength', 'type', 'u1', 'u2', 'unicode', 'values', 'viewbox', 'visibility', 'version', 'vert-adv-y', 'vert-origin-x', 'vert-origin-y', 'width', 'word-spacing', 'wrap', 'writing-mode', 'xchannelselector', 'ychannelselector', 'x', 'x1', 'x2', 'xmlns', 'y', 'y1', 'y2', 'z', 'zoomandpan']);\n  var mathMl = freeze(['accent', 'accentunder', 'align', 'bevelled', 'close', 'columnsalign', 'columnlines', 'columnspan', 'denomalign', 'depth', 'dir', 'display', 'displaystyle', 'encoding', 'fence', 'frame', 'height', 'href', 'id', 'largeop', 'length', 'linethickness', 'lspace', 'lquote', 'mathbackground', 'mathcolor', 'mathsize', 'mathvariant', 'maxsize', 'minsize', 'movablelimits', 'notation', 'numalign', 'open', 'rowalign', 'rowlines', 'rowspacing', 'rowspan', 'rspace', 'rquote', 'scriptlevel', 'scriptminsize', 'scriptsizemultiplier', 'selection', 'separator', 'separators', 'stretchy', 'subscriptshift', 'supscriptshift', 'symmetric', 'voffset', 'width', 'xmlns']);\n  var xml = freeze(['xlink:href', 'xml:id', 'xlink:title', 'xml:space', 'xmlns:xlink']);\n\n  var MUSTACHE_EXPR = seal(/\\{\\{[\\w\\W]*|[\\w\\W]*\\}\\}/gm); // Specify template detection regex for SAFE_FOR_TEMPLATES mode\n\n  var ERB_EXPR = seal(/<%[\\w\\W]*|[\\w\\W]*%>/gm);\n  var TMPLIT_EXPR = seal(/\\${[\\w\\W]*}/gm);\n  var DATA_ATTR = seal(/^data-[\\-\\w.\\u00B7-\\uFFFF]/); // eslint-disable-line no-useless-escape\n\n  var ARIA_ATTR = seal(/^aria-[\\-\\w]+$/); // eslint-disable-line no-useless-escape\n\n  var IS_ALLOWED_URI = seal(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp):|[^a-z]|[a-z+.\\-]+(?:[^a-z+.\\-:]|$))/i // eslint-disable-line no-useless-escape\n  );\n  var IS_SCRIPT_OR_DATA = seal(/^(?:\\w+script|data):/i);\n  var ATTR_WHITESPACE = seal(/[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205F\\u3000]/g // eslint-disable-line no-control-regex\n  );\n  var DOCTYPE_NAME = seal(/^html$/i);\n\n  var getGlobal = function getGlobal() {\n    return typeof window === 'undefined' ? null : window;\n  };\n  /**\n   * Creates a no-op policy for internal use only.\n   * Don't export this function outside this module!\n   * @param {?TrustedTypePolicyFactory} trustedTypes The policy factory.\n   * @param {Document} document The document object (to determine policy name suffix)\n   * @return {?TrustedTypePolicy} The policy created (or null, if Trusted Types\n   * are not supported).\n   */\n\n\n  var _createTrustedTypesPolicy = function _createTrustedTypesPolicy(trustedTypes, document) {\n    if (_typeof(trustedTypes) !== 'object' || typeof trustedTypes.createPolicy !== 'function') {\n      return null;\n    } // Allow the callers to control the unique policy name\n    // by adding a data-tt-policy-suffix to the script element with the DOMPurify.\n    // Policy creation with duplicate names throws in Trusted Types.\n\n\n    var suffix = null;\n    var ATTR_NAME = 'data-tt-policy-suffix';\n\n    if (document.currentScript && document.currentScript.hasAttribute(ATTR_NAME)) {\n      suffix = document.currentScript.getAttribute(ATTR_NAME);\n    }\n\n    var policyName = 'dompurify' + (suffix ? '#' + suffix : '');\n\n    try {\n      return trustedTypes.createPolicy(policyName, {\n        createHTML: function createHTML(html) {\n          return html;\n        },\n        createScriptURL: function createScriptURL(scriptUrl) {\n          return scriptUrl;\n        }\n      });\n    } catch (_) {\n      // Policy creation failed (most likely another DOMPurify script has\n      // already run). Skip creating the policy, as this will only cause errors\n      // if TT are enforced.\n      console.warn('TrustedTypes policy ' + policyName + ' could not be created.');\n      return null;\n    }\n  };\n\n  function createDOMPurify() {\n    var window = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getGlobal();\n\n    var DOMPurify = function DOMPurify(root) {\n      return createDOMPurify(root);\n    };\n    /**\n     * Version label, exposed for easier checks\n     * if DOMPurify is up to date or not\n     */\n\n\n    DOMPurify.version = '3.0.1';\n    /**\n     * Array of elements that DOMPurify removed during sanitation.\n     * Empty if nothing was removed.\n     */\n\n    DOMPurify.removed = [];\n\n    if (!window || !window.document || window.document.nodeType !== 9) {\n      // Not running in a browser, provide a factory function\n      // so that you can pass your own Window\n      DOMPurify.isSupported = false;\n      return DOMPurify;\n    }\n\n    var originalDocument = window.document;\n    var document = window.document;\n    var DocumentFragment = window.DocumentFragment,\n        HTMLTemplateElement = window.HTMLTemplateElement,\n        Node = window.Node,\n        Element = window.Element,\n        NodeFilter = window.NodeFilter,\n        _window$NamedNodeMap = window.NamedNodeMap,\n        NamedNodeMap = _window$NamedNodeMap === void 0 ? window.NamedNodeMap || window.MozNamedAttrMap : _window$NamedNodeMap,\n        HTMLFormElement = window.HTMLFormElement,\n        DOMParser = window.DOMParser,\n        trustedTypes = window.trustedTypes;\n    var ElementPrototype = Element.prototype;\n    var cloneNode = lookupGetter(ElementPrototype, 'cloneNode');\n    var getNextSibling = lookupGetter(ElementPrototype, 'nextSibling');\n    var getChildNodes = lookupGetter(ElementPrototype, 'childNodes');\n    var getParentNode = lookupGetter(ElementPrototype, 'parentNode'); // As per issue #47, the web-components registry is inherited by a\n    // new document created via createHTMLDocument. As per the spec\n    // (http://w3c.github.io/webcomponents/spec/custom/#creating-and-passing-registries)\n    // a new empty registry is used when creating a template contents owner\n    // document, so we use that as our parent document to ensure nothing\n    // is inherited.\n\n    if (typeof HTMLTemplateElement === 'function') {\n      var template = document.createElement('template');\n\n      if (template.content && template.content.ownerDocument) {\n        document = template.content.ownerDocument;\n      }\n    }\n\n    var trustedTypesPolicy = _createTrustedTypesPolicy(trustedTypes, originalDocument);\n\n    var emptyHTML = trustedTypesPolicy ? trustedTypesPolicy.createHTML('') : '';\n    var _document = document,\n        implementation = _document.implementation,\n        createNodeIterator = _document.createNodeIterator,\n        createDocumentFragment = _document.createDocumentFragment,\n        getElementsByTagName = _document.getElementsByTagName;\n    var importNode = originalDocument.importNode;\n    var hooks = {};\n    /**\n     * Expose whether this browser supports running the full DOMPurify.\n     */\n\n    DOMPurify.isSupported = typeof entries === 'function' && typeof getParentNode === 'function' && implementation && typeof implementation.createHTMLDocument !== 'undefined';\n    var MUSTACHE_EXPR$1 = MUSTACHE_EXPR,\n        ERB_EXPR$1 = ERB_EXPR,\n        TMPLIT_EXPR$1 = TMPLIT_EXPR,\n        DATA_ATTR$1 = DATA_ATTR,\n        ARIA_ATTR$1 = ARIA_ATTR,\n        IS_SCRIPT_OR_DATA$1 = IS_SCRIPT_OR_DATA,\n        ATTR_WHITESPACE$1 = ATTR_WHITESPACE;\n    var IS_ALLOWED_URI$1 = IS_ALLOWED_URI;\n    /**\n     * We consider the elements and attributes below to be safe. Ideally\n     * don't add any new ones but feel free to remove unwanted ones.\n     */\n\n    /* allowed element names */\n\n    var ALLOWED_TAGS = null;\n    var DEFAULT_ALLOWED_TAGS = addToSet({}, [].concat(_toConsumableArray(html$1), _toConsumableArray(svg$1), _toConsumableArray(svgFilters), _toConsumableArray(mathMl$1), _toConsumableArray(text)));\n    /* Allowed attribute names */\n\n    var ALLOWED_ATTR = null;\n    var DEFAULT_ALLOWED_ATTR = addToSet({}, [].concat(_toConsumableArray(html), _toConsumableArray(svg), _toConsumableArray(mathMl), _toConsumableArray(xml)));\n    /*\n     * Configure how DOMPUrify should handle custom elements and their attributes as well as customized built-in elements.\n     * @property {RegExp|Function|null} tagNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any custom elements)\n     * @property {RegExp|Function|null} attributeNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any attributes not on the allow list)\n     * @property {boolean} allowCustomizedBuiltInElements allow custom elements derived from built-ins if they pass CUSTOM_ELEMENT_HANDLING.tagNameCheck. Default: `false`.\n     */\n\n    var CUSTOM_ELEMENT_HANDLING = Object.seal(Object.create(null, {\n      tagNameCheck: {\n        writable: true,\n        configurable: false,\n        enumerable: true,\n        value: null\n      },\n      attributeNameCheck: {\n        writable: true,\n        configurable: false,\n        enumerable: true,\n        value: null\n      },\n      allowCustomizedBuiltInElements: {\n        writable: true,\n        configurable: false,\n        enumerable: true,\n        value: false\n      }\n    }));\n    /* Explicitly forbidden tags (overrides ALLOWED_TAGS/ADD_TAGS) */\n\n    var FORBID_TAGS = null;\n    /* Explicitly forbidden attributes (overrides ALLOWED_ATTR/ADD_ATTR) */\n\n    var FORBID_ATTR = null;\n    /* Decide if ARIA attributes are okay */\n\n    var ALLOW_ARIA_ATTR = true;\n    /* Decide if custom data attributes are okay */\n\n    var ALLOW_DATA_ATTR = true;\n    /* Decide if unknown protocols are okay */\n\n    var ALLOW_UNKNOWN_PROTOCOLS = false;\n    /* Decide if self-closing tags in attributes are allowed.\n     * Usually removed due to a mXSS issue in jQuery 3.0 */\n\n    var ALLOW_SELF_CLOSE_IN_ATTR = true;\n    /* Output should be safe for common template engines.\n     * This means, DOMPurify removes data attributes, mustaches and ERB\n     */\n\n    var SAFE_FOR_TEMPLATES = false;\n    /* Decide if document with <html>... should be returned */\n\n    var WHOLE_DOCUMENT = false;\n    /* Track whether config is already set on this instance of DOMPurify. */\n\n    var SET_CONFIG = false;\n    /* Decide if all elements (e.g. style, script) must be children of\n     * document.body. By default, browsers might move them to document.head */\n\n    var FORCE_BODY = false;\n    /* Decide if a DOM `HTMLBodyElement` should be returned, instead of a html\n     * string (or a TrustedHTML object if Trusted Types are supported).\n     * If `WHOLE_DOCUMENT` is enabled a `HTMLHtmlElement` will be returned instead\n     */\n\n    var RETURN_DOM = false;\n    /* Decide if a DOM `DocumentFragment` should be returned, instead of a html\n     * string  (or a TrustedHTML object if Trusted Types are supported) */\n\n    var RETURN_DOM_FRAGMENT = false;\n    /* Try to return a Trusted Type object instead of a string, return a string in\n     * case Trusted Types are not supported  */\n\n    var RETURN_TRUSTED_TYPE = false;\n    /* Output should be free from DOM clobbering attacks?\n     * This sanitizes markups named with colliding, clobberable built-in DOM APIs.\n     */\n\n    var SANITIZE_DOM = true;\n    /* Achieve full DOM Clobbering protection by isolating the namespace of named\n     * properties and JS variables, mitigating attacks that abuse the HTML/DOM spec rules.\n     *\n     * HTML/DOM spec rules that enable DOM Clobbering:\n     *   - Named Access on Window (§7.3.3)\n     *   - DOM Tree Accessors (§3.1.5)\n     *   - Form Element Parent-Child Relations (§4.10.3)\n     *   - Iframe srcdoc / Nested WindowProxies (§4.8.5)\n     *   - HTMLCollection (§4.2.10.2)\n     *\n     * Namespace isolation is implemented by prefixing `id` and `name` attributes\n     * with a constant string, i.e., `user-content-`\n     */\n\n    var SANITIZE_NAMED_PROPS = false;\n    var SANITIZE_NAMED_PROPS_PREFIX = 'user-content-';\n    /* Keep element content when removing element? */\n\n    var KEEP_CONTENT = true;\n    /* If a `Node` is passed to sanitize(), then performs sanitization in-place instead\n     * of importing it into a new Document and returning a sanitized copy */\n\n    var IN_PLACE = false;\n    /* Allow usage of profiles like html, svg and mathMl */\n\n    var USE_PROFILES = {};\n    /* Tags to ignore content of when KEEP_CONTENT is true */\n\n    var FORBID_CONTENTS = null;\n    var DEFAULT_FORBID_CONTENTS = addToSet({}, ['annotation-xml', 'audio', 'colgroup', 'desc', 'foreignobject', 'head', 'iframe', 'math', 'mi', 'mn', 'mo', 'ms', 'mtext', 'noembed', 'noframes', 'noscript', 'plaintext', 'script', 'style', 'svg', 'template', 'thead', 'title', 'video', 'xmp']);\n    /* Tags that are safe for data: URIs */\n\n    var DATA_URI_TAGS = null;\n    var DEFAULT_DATA_URI_TAGS = addToSet({}, ['audio', 'video', 'img', 'source', 'image', 'track']);\n    /* Attributes safe for values like \"javascript:\" */\n\n    var URI_SAFE_ATTRIBUTES = null;\n    var DEFAULT_URI_SAFE_ATTRIBUTES = addToSet({}, ['alt', 'class', 'for', 'id', 'label', 'name', 'pattern', 'placeholder', 'role', 'summary', 'title', 'value', 'style', 'xmlns']);\n    var MATHML_NAMESPACE = 'http://www.w3.org/1998/Math/MathML';\n    var SVG_NAMESPACE = 'http://www.w3.org/2000/svg';\n    var HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml';\n    /* Document namespace */\n\n    var NAMESPACE = HTML_NAMESPACE;\n    var IS_EMPTY_INPUT = false;\n    /* Allowed XHTML+XML namespaces */\n\n    var ALLOWED_NAMESPACES = null;\n    var DEFAULT_ALLOWED_NAMESPACES = addToSet({}, [MATHML_NAMESPACE, SVG_NAMESPACE, HTML_NAMESPACE], stringToString);\n    /* Parsing of strict XHTML documents */\n\n    var PARSER_MEDIA_TYPE;\n    var SUPPORTED_PARSER_MEDIA_TYPES = ['application/xhtml+xml', 'text/html'];\n    var DEFAULT_PARSER_MEDIA_TYPE = 'text/html';\n    var transformCaseFunc;\n    /* Keep a reference to config to pass to hooks */\n\n    var CONFIG = null;\n    /* Ideally, do not touch anything below this line */\n\n    /* ______________________________________________ */\n\n    var formElement = document.createElement('form');\n\n    var isRegexOrFunction = function isRegexOrFunction(testValue) {\n      return testValue instanceof RegExp || testValue instanceof Function;\n    };\n    /**\n     * _parseConfig\n     *\n     * @param  {Object} cfg optional config literal\n     */\n    // eslint-disable-next-line complexity\n\n\n    var _parseConfig = function _parseConfig(cfg) {\n      if (CONFIG && CONFIG === cfg) {\n        return;\n      }\n      /* Shield configuration object from tampering */\n\n\n      if (!cfg || _typeof(cfg) !== 'object') {\n        cfg = {};\n      }\n      /* Shield configuration object from prototype pollution */\n\n\n      cfg = clone(cfg);\n      PARSER_MEDIA_TYPE = // eslint-disable-next-line unicorn/prefer-includes\n      SUPPORTED_PARSER_MEDIA_TYPES.indexOf(cfg.PARSER_MEDIA_TYPE) === -1 ? PARSER_MEDIA_TYPE = DEFAULT_PARSER_MEDIA_TYPE : PARSER_MEDIA_TYPE = cfg.PARSER_MEDIA_TYPE; // HTML tags and attributes are not case-sensitive, converting to lowercase. Keeping XHTML as is.\n\n      transformCaseFunc = PARSER_MEDIA_TYPE === 'application/xhtml+xml' ? stringToString : stringToLowerCase;\n      /* Set configuration parameters */\n\n      ALLOWED_TAGS = 'ALLOWED_TAGS' in cfg ? addToSet({}, cfg.ALLOWED_TAGS, transformCaseFunc) : DEFAULT_ALLOWED_TAGS;\n      ALLOWED_ATTR = 'ALLOWED_ATTR' in cfg ? addToSet({}, cfg.ALLOWED_ATTR, transformCaseFunc) : DEFAULT_ALLOWED_ATTR;\n      ALLOWED_NAMESPACES = 'ALLOWED_NAMESPACES' in cfg ? addToSet({}, cfg.ALLOWED_NAMESPACES, stringToString) : DEFAULT_ALLOWED_NAMESPACES;\n      URI_SAFE_ATTRIBUTES = 'ADD_URI_SAFE_ATTR' in cfg ? addToSet(clone(DEFAULT_URI_SAFE_ATTRIBUTES), // eslint-disable-line indent\n      cfg.ADD_URI_SAFE_ATTR, // eslint-disable-line indent\n      transformCaseFunc // eslint-disable-line indent\n      ) // eslint-disable-line indent\n      : DEFAULT_URI_SAFE_ATTRIBUTES;\n      DATA_URI_TAGS = 'ADD_DATA_URI_TAGS' in cfg ? addToSet(clone(DEFAULT_DATA_URI_TAGS), // eslint-disable-line indent\n      cfg.ADD_DATA_URI_TAGS, // eslint-disable-line indent\n      transformCaseFunc // eslint-disable-line indent\n      ) // eslint-disable-line indent\n      : DEFAULT_DATA_URI_TAGS;\n      FORBID_CONTENTS = 'FORBID_CONTENTS' in cfg ? addToSet({}, cfg.FORBID_CONTENTS, transformCaseFunc) : DEFAULT_FORBID_CONTENTS;\n      FORBID_TAGS = 'FORBID_TAGS' in cfg ? addToSet({}, cfg.FORBID_TAGS, transformCaseFunc) : {};\n      FORBID_ATTR = 'FORBID_ATTR' in cfg ? addToSet({}, cfg.FORBID_ATTR, transformCaseFunc) : {};\n      USE_PROFILES = 'USE_PROFILES' in cfg ? cfg.USE_PROFILES : false;\n      ALLOW_ARIA_ATTR = cfg.ALLOW_ARIA_ATTR !== false; // Default true\n\n      ALLOW_DATA_ATTR = cfg.ALLOW_DATA_ATTR !== false; // Default true\n\n      ALLOW_UNKNOWN_PROTOCOLS = cfg.ALLOW_UNKNOWN_PROTOCOLS || false; // Default false\n\n      ALLOW_SELF_CLOSE_IN_ATTR = cfg.ALLOW_SELF_CLOSE_IN_ATTR !== false; // Default true\n\n      SAFE_FOR_TEMPLATES = cfg.SAFE_FOR_TEMPLATES || false; // Default false\n\n      WHOLE_DOCUMENT = cfg.WHOLE_DOCUMENT || false; // Default false\n\n      RETURN_DOM = cfg.RETURN_DOM || false; // Default false\n\n      RETURN_DOM_FRAGMENT = cfg.RETURN_DOM_FRAGMENT || false; // Default false\n\n      RETURN_TRUSTED_TYPE = cfg.RETURN_TRUSTED_TYPE || false; // Default false\n\n      FORCE_BODY = cfg.FORCE_BODY || false; // Default false\n\n      SANITIZE_DOM = cfg.SANITIZE_DOM !== false; // Default true\n\n      SANITIZE_NAMED_PROPS = cfg.SANITIZE_NAMED_PROPS || false; // Default false\n\n      KEEP_CONTENT = cfg.KEEP_CONTENT !== false; // Default true\n\n      IN_PLACE = cfg.IN_PLACE || false; // Default false\n\n      IS_ALLOWED_URI$1 = cfg.ALLOWED_URI_REGEXP || IS_ALLOWED_URI$1;\n      NAMESPACE = cfg.NAMESPACE || HTML_NAMESPACE;\n      CUSTOM_ELEMENT_HANDLING = cfg.CUSTOM_ELEMENT_HANDLING || {};\n\n      if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck)) {\n        CUSTOM_ELEMENT_HANDLING.tagNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck;\n      }\n\n      if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)) {\n        CUSTOM_ELEMENT_HANDLING.attributeNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck;\n      }\n\n      if (cfg.CUSTOM_ELEMENT_HANDLING && typeof cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements === 'boolean') {\n        CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements = cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements;\n      }\n\n      if (SAFE_FOR_TEMPLATES) {\n        ALLOW_DATA_ATTR = false;\n      }\n\n      if (RETURN_DOM_FRAGMENT) {\n        RETURN_DOM = true;\n      }\n      /* Parse profile info */\n\n\n      if (USE_PROFILES) {\n        ALLOWED_TAGS = addToSet({}, _toConsumableArray(text));\n        ALLOWED_ATTR = [];\n\n        if (USE_PROFILES.html === true) {\n          addToSet(ALLOWED_TAGS, html$1);\n          addToSet(ALLOWED_ATTR, html);\n        }\n\n        if (USE_PROFILES.svg === true) {\n          addToSet(ALLOWED_TAGS, svg$1);\n          addToSet(ALLOWED_ATTR, svg);\n          addToSet(ALLOWED_ATTR, xml);\n        }\n\n        if (USE_PROFILES.svgFilters === true) {\n          addToSet(ALLOWED_TAGS, svgFilters);\n          addToSet(ALLOWED_ATTR, svg);\n          addToSet(ALLOWED_ATTR, xml);\n        }\n\n        if (USE_PROFILES.mathMl === true) {\n          addToSet(ALLOWED_TAGS, mathMl$1);\n          addToSet(ALLOWED_ATTR, mathMl);\n          addToSet(ALLOWED_ATTR, xml);\n        }\n      }\n      /* Merge configuration parameters */\n\n\n      if (cfg.ADD_TAGS) {\n        if (ALLOWED_TAGS === DEFAULT_ALLOWED_TAGS) {\n          ALLOWED_TAGS = clone(ALLOWED_TAGS);\n        }\n\n        addToSet(ALLOWED_TAGS, cfg.ADD_TAGS, transformCaseFunc);\n      }\n\n      if (cfg.ADD_ATTR) {\n        if (ALLOWED_ATTR === DEFAULT_ALLOWED_ATTR) {\n          ALLOWED_ATTR = clone(ALLOWED_ATTR);\n        }\n\n        addToSet(ALLOWED_ATTR, cfg.ADD_ATTR, transformCaseFunc);\n      }\n\n      if (cfg.ADD_URI_SAFE_ATTR) {\n        addToSet(URI_SAFE_ATTRIBUTES, cfg.ADD_URI_SAFE_ATTR, transformCaseFunc);\n      }\n\n      if (cfg.FORBID_CONTENTS) {\n        if (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) {\n          FORBID_CONTENTS = clone(FORBID_CONTENTS);\n        }\n\n        addToSet(FORBID_CONTENTS, cfg.FORBID_CONTENTS, transformCaseFunc);\n      }\n      /* Add #text in case KEEP_CONTENT is set to true */\n\n\n      if (KEEP_CONTENT) {\n        ALLOWED_TAGS['#text'] = true;\n      }\n      /* Add html, head and body to ALLOWED_TAGS in case WHOLE_DOCUMENT is true */\n\n\n      if (WHOLE_DOCUMENT) {\n        addToSet(ALLOWED_TAGS, ['html', 'head', 'body']);\n      }\n      /* Add tbody to ALLOWED_TAGS in case tables are permitted, see #286, #365 */\n\n\n      if (ALLOWED_TAGS.table) {\n        addToSet(ALLOWED_TAGS, ['tbody']);\n        delete FORBID_TAGS.tbody;\n      } // Prevent further manipulation of configuration.\n      // Not available in IE8, Safari 5, etc.\n\n\n      if (freeze) {\n        freeze(cfg);\n      }\n\n      CONFIG = cfg;\n    };\n\n    var MATHML_TEXT_INTEGRATION_POINTS = addToSet({}, ['mi', 'mo', 'mn', 'ms', 'mtext']);\n    var HTML_INTEGRATION_POINTS = addToSet({}, ['foreignobject', 'desc', 'title', 'annotation-xml']); // Certain elements are allowed in both SVG and HTML\n    // namespace. We need to specify them explicitly\n    // so that they don't get erroneously deleted from\n    // HTML namespace.\n\n    var COMMON_SVG_AND_HTML_ELEMENTS = addToSet({}, ['title', 'style', 'font', 'a', 'script']);\n    /* Keep track of all possible SVG and MathML tags\n     * so that we can perform the namespace checks\n     * correctly. */\n\n    var ALL_SVG_TAGS = addToSet({}, svg$1);\n    addToSet(ALL_SVG_TAGS, svgFilters);\n    addToSet(ALL_SVG_TAGS, svgDisallowed);\n    var ALL_MATHML_TAGS = addToSet({}, mathMl$1);\n    addToSet(ALL_MATHML_TAGS, mathMlDisallowed);\n    /**\n     *\n     *\n     * @param  {Element} element a DOM element whose namespace is being checked\n     * @returns {boolean} Return false if the element has a\n     *  namespace that a spec-compliant parser would never\n     *  return. Return true otherwise.\n     */\n\n    var _checkValidNamespace = function _checkValidNamespace(element) {\n      var parent = getParentNode(element); // In JSDOM, if we're inside shadow DOM, then parentNode\n      // can be null. We just simulate parent in this case.\n\n      if (!parent || !parent.tagName) {\n        parent = {\n          namespaceURI: NAMESPACE,\n          tagName: 'template'\n        };\n      }\n\n      var tagName = stringToLowerCase(element.tagName);\n      var parentTagName = stringToLowerCase(parent.tagName);\n\n      if (!ALLOWED_NAMESPACES[element.namespaceURI]) {\n        return false;\n      }\n\n      if (element.namespaceURI === SVG_NAMESPACE) {\n        // The only way to switch from HTML namespace to SVG\n        // is via <svg>. If it happens via any other tag, then\n        // it should be killed.\n        if (parent.namespaceURI === HTML_NAMESPACE) {\n          return tagName === 'svg';\n        } // The only way to switch from MathML to SVG is via`\n        // svg if parent is either <annotation-xml> or MathML\n        // text integration points.\n\n\n        if (parent.namespaceURI === MATHML_NAMESPACE) {\n          return tagName === 'svg' && (parentTagName === 'annotation-xml' || MATHML_TEXT_INTEGRATION_POINTS[parentTagName]);\n        } // We only allow elements that are defined in SVG\n        // spec. All others are disallowed in SVG namespace.\n\n\n        return Boolean(ALL_SVG_TAGS[tagName]);\n      }\n\n      if (element.namespaceURI === MATHML_NAMESPACE) {\n        // The only way to switch from HTML namespace to MathML\n        // is via <math>. If it happens via any other tag, then\n        // it should be killed.\n        if (parent.namespaceURI === HTML_NAMESPACE) {\n          return tagName === 'math';\n        } // The only way to switch from SVG to MathML is via\n        // <math> and HTML integration points\n\n\n        if (parent.namespaceURI === SVG_NAMESPACE) {\n          return tagName === 'math' && HTML_INTEGRATION_POINTS[parentTagName];\n        } // We only allow elements that are defined in MathML\n        // spec. All others are disallowed in MathML namespace.\n\n\n        return Boolean(ALL_MATHML_TAGS[tagName]);\n      }\n\n      if (element.namespaceURI === HTML_NAMESPACE) {\n        // The only way to switch from SVG to HTML is via\n        // HTML integration points, and from MathML to HTML\n        // is via MathML text integration points\n        if (parent.namespaceURI === SVG_NAMESPACE && !HTML_INTEGRATION_POINTS[parentTagName]) {\n          return false;\n        }\n\n        if (parent.namespaceURI === MATHML_NAMESPACE && !MATHML_TEXT_INTEGRATION_POINTS[parentTagName]) {\n          return false;\n        } // We disallow tags that are specific for MathML\n        // or SVG and should never appear in HTML namespace\n\n\n        return !ALL_MATHML_TAGS[tagName] && (COMMON_SVG_AND_HTML_ELEMENTS[tagName] || !ALL_SVG_TAGS[tagName]);\n      } // For XHTML and XML documents that support custom namespaces\n\n\n      if (PARSER_MEDIA_TYPE === 'application/xhtml+xml' && ALLOWED_NAMESPACES[element.namespaceURI]) {\n        return true;\n      } // The code should never reach this place (this means\n      // that the element somehow got namespace that is not\n      // HTML, SVG, MathML or allowed via ALLOWED_NAMESPACES).\n      // Return false just in case.\n\n\n      return false;\n    };\n    /**\n     * _forceRemove\n     *\n     * @param  {Node} node a DOM node\n     */\n\n\n    var _forceRemove = function _forceRemove(node) {\n      arrayPush(DOMPurify.removed, {\n        element: node\n      });\n\n      try {\n        // eslint-disable-next-line unicorn/prefer-dom-node-remove\n        node.parentNode.removeChild(node);\n      } catch (_) {\n        node.remove();\n      }\n    };\n    /**\n     * _removeAttribute\n     *\n     * @param  {String} name an Attribute name\n     * @param  {Node} node a DOM node\n     */\n\n\n    var _removeAttribute = function _removeAttribute(name, node) {\n      try {\n        arrayPush(DOMPurify.removed, {\n          attribute: node.getAttributeNode(name),\n          from: node\n        });\n      } catch (_) {\n        arrayPush(DOMPurify.removed, {\n          attribute: null,\n          from: node\n        });\n      }\n\n      node.removeAttribute(name); // We void attribute values for unremovable \"is\"\" attributes\n\n      if (name === 'is' && !ALLOWED_ATTR[name]) {\n        if (RETURN_DOM || RETURN_DOM_FRAGMENT) {\n          try {\n            _forceRemove(node);\n          } catch (_) {}\n        } else {\n          try {\n            node.setAttribute(name, '');\n          } catch (_) {}\n        }\n      }\n    };\n    /**\n     * _initDocument\n     *\n     * @param  {String} dirty a string of dirty markup\n     * @return {Document} a DOM, filled with the dirty markup\n     */\n\n\n    var _initDocument = function _initDocument(dirty) {\n      /* Create a HTML document */\n      var doc;\n      var leadingWhitespace;\n\n      if (FORCE_BODY) {\n        dirty = '<remove></remove>' + dirty;\n      } else {\n        /* If FORCE_BODY isn't used, leading whitespace needs to be preserved manually */\n        var matches = stringMatch(dirty, /^[\\r\\n\\t ]+/);\n        leadingWhitespace = matches && matches[0];\n      }\n\n      if (PARSER_MEDIA_TYPE === 'application/xhtml+xml' && NAMESPACE === HTML_NAMESPACE) {\n        // Root of XHTML doc must contain xmlns declaration (see https://www.w3.org/TR/xhtml1/normative.html#strict)\n        dirty = '<html xmlns=\"http://www.w3.org/1999/xhtml\"><head></head><body>' + dirty + '</body></html>';\n      }\n\n      var dirtyPayload = trustedTypesPolicy ? trustedTypesPolicy.createHTML(dirty) : dirty;\n      /*\n       * Use the DOMParser API by default, fallback later if needs be\n       * DOMParser not work for svg when has multiple root element.\n       */\n\n      if (NAMESPACE === HTML_NAMESPACE) {\n        try {\n          doc = new DOMParser().parseFromString(dirtyPayload, PARSER_MEDIA_TYPE);\n        } catch (_) {}\n      }\n      /* Use createHTMLDocument in case DOMParser is not available */\n\n\n      if (!doc || !doc.documentElement) {\n        doc = implementation.createDocument(NAMESPACE, 'template', null);\n\n        try {\n          doc.documentElement.innerHTML = IS_EMPTY_INPUT ? emptyHTML : dirtyPayload;\n        } catch (_) {// Syntax error if dirtyPayload is invalid xml\n        }\n      }\n\n      var body = doc.body || doc.documentElement;\n\n      if (dirty && leadingWhitespace) {\n        body.insertBefore(document.createTextNode(leadingWhitespace), body.childNodes[0] || null);\n      }\n      /* Work on whole document or just its body */\n\n\n      if (NAMESPACE === HTML_NAMESPACE) {\n        return getElementsByTagName.call(doc, WHOLE_DOCUMENT ? 'html' : 'body')[0];\n      }\n\n      return WHOLE_DOCUMENT ? doc.documentElement : body;\n    };\n    /**\n     * _createIterator\n     *\n     * @param  {Document} root document/fragment to create iterator for\n     * @return {Iterator} iterator instance\n     */\n\n\n    var _createIterator = function _createIterator(root) {\n      return createNodeIterator.call(root.ownerDocument || root, root, // eslint-disable-next-line no-bitwise\n      NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_TEXT, null, false);\n    };\n    /**\n     * _isClobbered\n     *\n     * @param  {Node} elm element to check for clobbering attacks\n     * @return {Boolean} true if clobbered, false if safe\n     */\n\n\n    var _isClobbered = function _isClobbered(elm) {\n      return elm instanceof HTMLFormElement && (typeof elm.nodeName !== 'string' || typeof elm.textContent !== 'string' || typeof elm.removeChild !== 'function' || !(elm.attributes instanceof NamedNodeMap) || typeof elm.removeAttribute !== 'function' || typeof elm.setAttribute !== 'function' || typeof elm.namespaceURI !== 'string' || typeof elm.insertBefore !== 'function' || typeof elm.hasChildNodes !== 'function');\n    };\n    /**\n     * _isNode\n     *\n     * @param  {Node} obj object to check whether it's a DOM node\n     * @return {Boolean} true is object is a DOM node\n     */\n\n\n    var _isNode = function _isNode(object) {\n      return _typeof(Node) === 'object' ? object instanceof Node : object && _typeof(object) === 'object' && typeof object.nodeType === 'number' && typeof object.nodeName === 'string';\n    };\n    /**\n     * _executeHook\n     * Execute user configurable hooks\n     *\n     * @param  {String} entryPoint  Name of the hook's entry point\n     * @param  {Node} currentNode node to work on with the hook\n     * @param  {Object} data additional hook parameters\n     */\n\n\n    var _executeHook = function _executeHook(entryPoint, currentNode, data) {\n      if (!hooks[entryPoint]) {\n        return;\n      }\n\n      arrayForEach(hooks[entryPoint], function (hook) {\n        hook.call(DOMPurify, currentNode, data, CONFIG);\n      });\n    };\n    /**\n     * _sanitizeElements\n     *\n     * @protect nodeName\n     * @protect textContent\n     * @protect removeChild\n     *\n     * @param   {Node} currentNode to check for permission to exist\n     * @return  {Boolean} true if node was killed, false if left alive\n     */\n\n\n    var _sanitizeElements = function _sanitizeElements(currentNode) {\n      var content;\n      /* Execute a hook if present */\n\n      _executeHook('beforeSanitizeElements', currentNode, null);\n      /* Check if element is clobbered or can clobber */\n\n\n      if (_isClobbered(currentNode)) {\n        _forceRemove(currentNode);\n\n        return true;\n      }\n      /* Now let's check the element's type and name */\n\n\n      var tagName = transformCaseFunc(currentNode.nodeName);\n      /* Execute a hook if present */\n\n      _executeHook('uponSanitizeElement', currentNode, {\n        tagName: tagName,\n        allowedTags: ALLOWED_TAGS\n      });\n      /* Detect mXSS attempts abusing namespace confusion */\n\n\n      if (currentNode.hasChildNodes() && !_isNode(currentNode.firstElementChild) && (!_isNode(currentNode.content) || !_isNode(currentNode.content.firstElementChild)) && regExpTest(/<[/\\w]/g, currentNode.innerHTML) && regExpTest(/<[/\\w]/g, currentNode.textContent)) {\n        _forceRemove(currentNode);\n\n        return true;\n      }\n      /* Remove element if anything forbids its presence */\n\n\n      if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {\n        /* Check if we have a custom element to handle */\n        if (!FORBID_TAGS[tagName] && _basicCustomElementTest(tagName)) {\n          if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, tagName)) return false;\n          if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(tagName)) return false;\n        }\n        /* Keep content except for bad-listed elements */\n\n\n        if (KEEP_CONTENT && !FORBID_CONTENTS[tagName]) {\n          var parentNode = getParentNode(currentNode) || currentNode.parentNode;\n          var childNodes = getChildNodes(currentNode) || currentNode.childNodes;\n\n          if (childNodes && parentNode) {\n            var childCount = childNodes.length;\n\n            for (var i = childCount - 1; i >= 0; --i) {\n              parentNode.insertBefore(cloneNode(childNodes[i], true), getNextSibling(currentNode));\n            }\n          }\n        }\n\n        _forceRemove(currentNode);\n\n        return true;\n      }\n      /* Check whether element has a valid namespace */\n\n\n      if (currentNode instanceof Element && !_checkValidNamespace(currentNode)) {\n        _forceRemove(currentNode);\n\n        return true;\n      }\n      /* Make sure that older browsers don't get noscript mXSS */\n\n\n      if ((tagName === 'noscript' || tagName === 'noembed') && regExpTest(/<\\/no(script|embed)/i, currentNode.innerHTML)) {\n        _forceRemove(currentNode);\n\n        return true;\n      }\n      /* Sanitize element content to be template-safe */\n\n\n      if (SAFE_FOR_TEMPLATES && currentNode.nodeType === 3) {\n        /* Get the element's text content */\n        content = currentNode.textContent;\n        content = stringReplace(content, MUSTACHE_EXPR$1, ' ');\n        content = stringReplace(content, ERB_EXPR$1, ' ');\n        content = stringReplace(content, TMPLIT_EXPR$1, ' ');\n\n        if (currentNode.textContent !== content) {\n          arrayPush(DOMPurify.removed, {\n            element: currentNode.cloneNode()\n          });\n          currentNode.textContent = content;\n        }\n      }\n      /* Execute a hook if present */\n\n\n      _executeHook('afterSanitizeElements', currentNode, null);\n\n      return false;\n    };\n    /**\n     * _isValidAttribute\n     *\n     * @param  {string} lcTag Lowercase tag name of containing element.\n     * @param  {string} lcName Lowercase attribute name.\n     * @param  {string} value Attribute value.\n     * @return {Boolean} Returns true if `value` is valid, otherwise false.\n     */\n    // eslint-disable-next-line complexity\n\n\n    var _isValidAttribute = function _isValidAttribute(lcTag, lcName, value) {\n      /* Make sure attribute cannot clobber */\n      if (SANITIZE_DOM && (lcName === 'id' || lcName === 'name') && (value in document || value in formElement)) {\n        return false;\n      }\n      /* Allow valid data-* attributes: At least one character after \"-\"\n          (https://html.spec.whatwg.org/multipage/dom.html#embedding-custom-non-visible-data-with-the-data-*-attributes)\n          XML-compatible (https://html.spec.whatwg.org/multipage/infrastructure.html#xml-compatible and http://www.w3.org/TR/xml/#d0e804)\n          We don't need to check the value; it's always URI safe. */\n\n\n      if (ALLOW_DATA_ATTR && !FORBID_ATTR[lcName] && regExpTest(DATA_ATTR$1, lcName)) ; else if (ALLOW_ARIA_ATTR && regExpTest(ARIA_ATTR$1, lcName)) ; else if (!ALLOWED_ATTR[lcName] || FORBID_ATTR[lcName]) {\n        if ( // First condition does a very basic check if a) it's basically a valid custom element tagname AND\n        // b) if the tagName passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck\n        // and c) if the attribute name passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.attributeNameCheck\n        _basicCustomElementTest(lcTag) && (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, lcTag) || CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(lcTag)) && (CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.attributeNameCheck, lcName) || CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.attributeNameCheck(lcName)) || // Alternative, second condition checks if it's an `is`-attribute, AND\n        // the value passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck\n        lcName === 'is' && CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements && (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, value) || CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(value))) ; else {\n          return false;\n        }\n        /* Check value is safe. First, is attr inert? If so, is safe */\n\n      } else if (URI_SAFE_ATTRIBUTES[lcName]) ; else if (regExpTest(IS_ALLOWED_URI$1, stringReplace(value, ATTR_WHITESPACE$1, ''))) ; else if ((lcName === 'src' || lcName === 'xlink:href' || lcName === 'href') && lcTag !== 'script' && stringIndexOf(value, 'data:') === 0 && DATA_URI_TAGS[lcTag]) ; else if (ALLOW_UNKNOWN_PROTOCOLS && !regExpTest(IS_SCRIPT_OR_DATA$1, stringReplace(value, ATTR_WHITESPACE$1, ''))) ; else if (!value) ; else {\n        return false;\n      }\n\n      return true;\n    };\n    /**\n     * _basicCustomElementCheck\n     * checks if at least one dash is included in tagName, and it's not the first char\n     * for more sophisticated checking see https://github.com/sindresorhus/validate-element-name\n     * @param {string} tagName name of the tag of the node to sanitize\n     */\n\n\n    var _basicCustomElementTest = function _basicCustomElementTest(tagName) {\n      return tagName.indexOf('-') > 0;\n    };\n    /**\n     * _sanitizeAttributes\n     *\n     * @protect attributes\n     * @protect nodeName\n     * @protect removeAttribute\n     * @protect setAttribute\n     *\n     * @param  {Node} currentNode to sanitize\n     */\n\n\n    var _sanitizeAttributes = function _sanitizeAttributes(currentNode) {\n      var attr;\n      var value;\n      var lcName;\n      var l;\n      /* Execute a hook if present */\n\n      _executeHook('beforeSanitizeAttributes', currentNode, null);\n\n      var attributes = currentNode.attributes;\n      /* Check if we have attributes; if not we might have a text node */\n\n      if (!attributes) {\n        return;\n      }\n\n      var hookEvent = {\n        attrName: '',\n        attrValue: '',\n        keepAttr: true,\n        allowedAttributes: ALLOWED_ATTR\n      };\n      l = attributes.length;\n      /* Go backwards over all attributes; safely remove bad ones */\n\n      while (l--) {\n        attr = attributes[l];\n        var _attr = attr,\n            name = _attr.name,\n            namespaceURI = _attr.namespaceURI;\n        value = name === 'value' ? attr.value : stringTrim(attr.value);\n        lcName = transformCaseFunc(name);\n        /* Execute a hook if present */\n\n        hookEvent.attrName = lcName;\n        hookEvent.attrValue = value;\n        hookEvent.keepAttr = true;\n        hookEvent.forceKeepAttr = undefined; // Allows developers to see this is a property they can set\n\n        _executeHook('uponSanitizeAttribute', currentNode, hookEvent);\n\n        value = hookEvent.attrValue;\n        /* Did the hooks approve of the attribute? */\n\n        if (hookEvent.forceKeepAttr) {\n          continue;\n        }\n        /* Remove attribute */\n\n\n        _removeAttribute(name, currentNode);\n        /* Did the hooks approve of the attribute? */\n\n\n        if (!hookEvent.keepAttr) {\n          continue;\n        }\n        /* Work around a security issue in jQuery 3.0 */\n\n\n        if (!ALLOW_SELF_CLOSE_IN_ATTR && regExpTest(/\\/>/i, value)) {\n          _removeAttribute(name, currentNode);\n\n          continue;\n        }\n        /* Sanitize attribute content to be template-safe */\n\n\n        if (SAFE_FOR_TEMPLATES) {\n          value = stringReplace(value, MUSTACHE_EXPR$1, ' ');\n          value = stringReplace(value, ERB_EXPR$1, ' ');\n          value = stringReplace(value, TMPLIT_EXPR$1, ' ');\n        }\n        /* Is `value` valid for this attribute? */\n\n\n        var lcTag = transformCaseFunc(currentNode.nodeName);\n\n        if (!_isValidAttribute(lcTag, lcName, value)) {\n          continue;\n        }\n        /* Full DOM Clobbering protection via namespace isolation,\n         * Prefix id and name attributes with `user-content-`\n         */\n\n\n        if (SANITIZE_NAMED_PROPS && (lcName === 'id' || lcName === 'name')) {\n          // Remove the attribute with this value\n          _removeAttribute(name, currentNode); // Prefix the value and later re-create the attribute with the sanitized value\n\n\n          value = SANITIZE_NAMED_PROPS_PREFIX + value;\n        }\n        /* Handle attributes that require Trusted Types */\n\n\n        if (trustedTypesPolicy && _typeof(trustedTypes) === 'object' && typeof trustedTypes.getAttributeType === 'function') {\n          if (namespaceURI) ; else {\n            switch (trustedTypes.getAttributeType(lcTag, lcName)) {\n              case 'TrustedHTML':\n                value = trustedTypesPolicy.createHTML(value);\n                break;\n\n              case 'TrustedScriptURL':\n                value = trustedTypesPolicy.createScriptURL(value);\n                break;\n            }\n          }\n        }\n        /* Handle invalid data-* attribute set by try-catching it */\n\n\n        try {\n          if (namespaceURI) {\n            currentNode.setAttributeNS(namespaceURI, name, value);\n          } else {\n            /* Fallback to setAttribute() for browser-unrecognized namespaces e.g. \"x-schema\". */\n            currentNode.setAttribute(name, value);\n          }\n\n          arrayPop(DOMPurify.removed);\n        } catch (_) {}\n      }\n      /* Execute a hook if present */\n\n\n      _executeHook('afterSanitizeAttributes', currentNode, null);\n    };\n    /**\n     * _sanitizeShadowDOM\n     *\n     * @param  {DocumentFragment} fragment to iterate over recursively\n     */\n\n\n    var _sanitizeShadowDOM = function _sanitizeShadowDOM(fragment) {\n      var shadowNode;\n\n      var shadowIterator = _createIterator(fragment);\n      /* Execute a hook if present */\n\n\n      _executeHook('beforeSanitizeShadowDOM', fragment, null);\n\n      while (shadowNode = shadowIterator.nextNode()) {\n        /* Execute a hook if present */\n        _executeHook('uponSanitizeShadowNode', shadowNode, null);\n        /* Sanitize tags and elements */\n\n\n        if (_sanitizeElements(shadowNode)) {\n          continue;\n        }\n        /* Deep shadow DOM detected */\n\n\n        if (shadowNode.content instanceof DocumentFragment) {\n          _sanitizeShadowDOM(shadowNode.content);\n        }\n        /* Check attributes, sanitize if necessary */\n\n\n        _sanitizeAttributes(shadowNode);\n      }\n      /* Execute a hook if present */\n\n\n      _executeHook('afterSanitizeShadowDOM', fragment, null);\n    };\n    /**\n     * Sanitize\n     * Public method providing core sanitation functionality\n     *\n     * @param {String|Node} dirty string or DOM node\n     * @param {Object} configuration object\n     */\n    // eslint-disable-next-line complexity\n\n\n    DOMPurify.sanitize = function (dirty) {\n      var cfg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      var body;\n      var importedNode;\n      var currentNode;\n      var returnNode;\n      /* Make sure we have a string to sanitize.\n        DO NOT return early, as this will return the wrong type if\n        the user has requested a DOM object rather than a string */\n\n      IS_EMPTY_INPUT = !dirty;\n\n      if (IS_EMPTY_INPUT) {\n        dirty = '<!-->';\n      }\n      /* Stringify, in case dirty is an object */\n\n\n      if (typeof dirty !== 'string' && !_isNode(dirty)) {\n        // eslint-disable-next-line no-negated-condition\n        if (typeof dirty.toString !== 'function') {\n          throw typeErrorCreate('toString is not a function');\n        } else {\n          dirty = dirty.toString();\n\n          if (typeof dirty !== 'string') {\n            throw typeErrorCreate('dirty is not a string, aborting');\n          }\n        }\n      }\n      /* Return dirty HTML if DOMPurify cannot run */\n\n\n      if (!DOMPurify.isSupported) {\n        return dirty;\n      }\n      /* Assign config vars */\n\n\n      if (!SET_CONFIG) {\n        _parseConfig(cfg);\n      }\n      /* Clean up removed elements */\n\n\n      DOMPurify.removed = [];\n      /* Check if dirty is correctly typed for IN_PLACE */\n\n      if (typeof dirty === 'string') {\n        IN_PLACE = false;\n      }\n\n      if (IN_PLACE) {\n        /* Do some early pre-sanitization to avoid unsafe root nodes */\n        if (dirty.nodeName) {\n          var tagName = transformCaseFunc(dirty.nodeName);\n\n          if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {\n            throw typeErrorCreate('root node is forbidden and cannot be sanitized in-place');\n          }\n        }\n      } else if (dirty instanceof Node) {\n        /* If dirty is a DOM element, append to an empty document to avoid\n           elements being stripped by the parser */\n        body = _initDocument('<!---->');\n        importedNode = body.ownerDocument.importNode(dirty, true);\n\n        if (importedNode.nodeType === 1 && importedNode.nodeName === 'BODY') {\n          /* Node is already a body, use as is */\n          body = importedNode;\n        } else if (importedNode.nodeName === 'HTML') {\n          body = importedNode;\n        } else {\n          // eslint-disable-next-line unicorn/prefer-dom-node-append\n          body.appendChild(importedNode);\n        }\n      } else {\n        /* Exit directly if we have nothing to do */\n        if (!RETURN_DOM && !SAFE_FOR_TEMPLATES && !WHOLE_DOCUMENT && // eslint-disable-next-line unicorn/prefer-includes\n        dirty.indexOf('<') === -1) {\n          return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(dirty) : dirty;\n        }\n        /* Initialize the document to work on */\n\n\n        body = _initDocument(dirty);\n        /* Check we have a DOM node from the data */\n\n        if (!body) {\n          return RETURN_DOM ? null : RETURN_TRUSTED_TYPE ? emptyHTML : '';\n        }\n      }\n      /* Remove first element node (ours) if FORCE_BODY is set */\n\n\n      if (body && FORCE_BODY) {\n        _forceRemove(body.firstChild);\n      }\n      /* Get node iterator */\n\n\n      var nodeIterator = _createIterator(IN_PLACE ? dirty : body);\n      /* Now start iterating over the created document */\n\n\n      while (currentNode = nodeIterator.nextNode()) {\n        /* Sanitize tags and elements */\n        if (_sanitizeElements(currentNode)) {\n          continue;\n        }\n        /* Shadow DOM detected, sanitize it */\n\n\n        if (currentNode.content instanceof DocumentFragment) {\n          _sanitizeShadowDOM(currentNode.content);\n        }\n        /* Check attributes, sanitize if necessary */\n\n\n        _sanitizeAttributes(currentNode);\n      }\n      /* If we sanitized `dirty` in-place, return it. */\n\n\n      if (IN_PLACE) {\n        return dirty;\n      }\n      /* Return sanitized string or DOM */\n\n\n      if (RETURN_DOM) {\n        if (RETURN_DOM_FRAGMENT) {\n          returnNode = createDocumentFragment.call(body.ownerDocument);\n\n          while (body.firstChild) {\n            // eslint-disable-next-line unicorn/prefer-dom-node-append\n            returnNode.appendChild(body.firstChild);\n          }\n        } else {\n          returnNode = body;\n        }\n\n        if (ALLOWED_ATTR.shadowroot || ALLOWED_ATTR.shadowrootmod) {\n          /*\n            AdoptNode() is not used because internal state is not reset\n            (e.g. the past names map of a HTMLFormElement), this is safe\n            in theory but we would rather not risk another attack vector.\n            The state that is cloned by importNode() is explicitly defined\n            by the specs.\n          */\n          returnNode = importNode.call(originalDocument, returnNode, true);\n        }\n\n        return returnNode;\n      }\n\n      var serializedHTML = WHOLE_DOCUMENT ? body.outerHTML : body.innerHTML;\n      /* Serialize doctype if allowed */\n\n      if (WHOLE_DOCUMENT && ALLOWED_TAGS['!doctype'] && body.ownerDocument && body.ownerDocument.doctype && body.ownerDocument.doctype.name && regExpTest(DOCTYPE_NAME, body.ownerDocument.doctype.name)) {\n        serializedHTML = '<!DOCTYPE ' + body.ownerDocument.doctype.name + '>\\n' + serializedHTML;\n      }\n      /* Sanitize final string template-safe */\n\n\n      if (SAFE_FOR_TEMPLATES) {\n        serializedHTML = stringReplace(serializedHTML, MUSTACHE_EXPR$1, ' ');\n        serializedHTML = stringReplace(serializedHTML, ERB_EXPR$1, ' ');\n        serializedHTML = stringReplace(serializedHTML, TMPLIT_EXPR$1, ' ');\n      }\n\n      return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(serializedHTML) : serializedHTML;\n    };\n    /**\n     * Public method to set the configuration once\n     * setConfig\n     *\n     * @param {Object} cfg configuration object\n     */\n\n\n    DOMPurify.setConfig = function (cfg) {\n      _parseConfig(cfg);\n\n      SET_CONFIG = true;\n    };\n    /**\n     * Public method to remove the configuration\n     * clearConfig\n     *\n     */\n\n\n    DOMPurify.clearConfig = function () {\n      CONFIG = null;\n      SET_CONFIG = false;\n    };\n    /**\n     * Public method to check if an attribute value is valid.\n     * Uses last set config, if any. Otherwise, uses config defaults.\n     * isValidAttribute\n     *\n     * @param  {string} tag Tag name of containing element.\n     * @param  {string} attr Attribute name.\n     * @param  {string} value Attribute value.\n     * @return {Boolean} Returns true if `value` is valid. Otherwise, returns false.\n     */\n\n\n    DOMPurify.isValidAttribute = function (tag, attr, value) {\n      /* Initialize shared config vars if necessary. */\n      if (!CONFIG) {\n        _parseConfig({});\n      }\n\n      var lcTag = transformCaseFunc(tag);\n      var lcName = transformCaseFunc(attr);\n      return _isValidAttribute(lcTag, lcName, value);\n    };\n    /**\n     * AddHook\n     * Public method to add DOMPurify hooks\n     *\n     * @param {String} entryPoint entry point for the hook to add\n     * @param {Function} hookFunction function to execute\n     */\n\n\n    DOMPurify.addHook = function (entryPoint, hookFunction) {\n      if (typeof hookFunction !== 'function') {\n        return;\n      }\n\n      hooks[entryPoint] = hooks[entryPoint] || [];\n      arrayPush(hooks[entryPoint], hookFunction);\n    };\n    /**\n     * RemoveHook\n     * Public method to remove a DOMPurify hook at a given entryPoint\n     * (pops it from the stack of hooks if more are present)\n     *\n     * @param {String} entryPoint entry point for the hook to remove\n     * @return {Function} removed(popped) hook\n     */\n\n\n    DOMPurify.removeHook = function (entryPoint) {\n      if (hooks[entryPoint]) {\n        return arrayPop(hooks[entryPoint]);\n      }\n    };\n    /**\n     * RemoveHooks\n     * Public method to remove all DOMPurify hooks at a given entryPoint\n     *\n     * @param  {String} entryPoint entry point for the hooks to remove\n     */\n\n\n    DOMPurify.removeHooks = function (entryPoint) {\n      if (hooks[entryPoint]) {\n        hooks[entryPoint] = [];\n      }\n    };\n    /**\n     * RemoveAllHooks\n     * Public method to remove all DOMPurify hooks\n     *\n     */\n\n\n    DOMPurify.removeAllHooks = function () {\n      hooks = {};\n    };\n\n    return DOMPurify;\n  }\n\n  var purify = createDOMPurify();\n\n  return purify;\n\n}));\n//# sourceMappingURL=purify.js.map\n","'use strict'\n\nmodule.exports = function encodeUtf8 (input) {\n  var result = []\n  var size = input.length\n\n  for (var index = 0; index < size; index++) {\n    var point = input.charCodeAt(index)\n\n    if (point >= 0xD800 && point <= 0xDBFF && size > index + 1) {\n      var second = input.charCodeAt(index + 1)\n\n      if (second >= 0xDC00 && second <= 0xDFFF) {\n        // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\n        point = (point - 0xD800) * 0x400 + second - 0xDC00 + 0x10000\n        index += 1\n      }\n    }\n\n    // US-ASCII\n    if (point < 0x80) {\n      result.push(point)\n      continue\n    }\n\n    // 2-byte UTF-8\n    if (point < 0x800) {\n      result.push((point >> 6) | 192)\n      result.push((point & 63) | 128)\n      continue\n    }\n\n    // 3-byte UTF-8\n    if (point < 0xD800 || (point >= 0xE000 && point < 0x10000)) {\n      result.push((point >> 12) | 224)\n      result.push(((point >> 6) & 63) | 128)\n      result.push((point & 63) | 128)\n      continue\n    }\n\n    // 4-byte UTF-8\n    if (point >= 0x10000 && point <= 0x10FFFF) {\n      result.push((point >> 18) | 240)\n      result.push(((point >> 12) & 63) | 128)\n      result.push(((point >> 6) & 63) | 128)\n      result.push((point & 63) | 128)\n      continue\n    }\n\n    // Invalid character\n    result.push(0xEF, 0xBF, 0xBD)\n  }\n\n  return new Uint8Array(result).buffer\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n  ? R.apply\n  : function ReflectApply(target, receiver, args) {\n    return Function.prototype.apply.call(target, receiver, args);\n  }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n  ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n  ReflectOwnKeys = function ReflectOwnKeys(target) {\n    return Object.getOwnPropertyNames(target)\n      .concat(Object.getOwnPropertySymbols(target));\n  };\n} else {\n  ReflectOwnKeys = function ReflectOwnKeys(target) {\n    return Object.getOwnPropertyNames(target);\n  };\n}\n\nfunction ProcessEmitWarning(warning) {\n  if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n  return value !== value;\n}\n\nfunction EventEmitter() {\n  EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n  if (typeof listener !== 'function') {\n    throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n  }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n  enumerable: true,\n  get: function() {\n    return defaultMaxListeners;\n  },\n  set: function(arg) {\n    if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n      throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n    }\n    defaultMaxListeners = arg;\n  }\n});\n\nEventEmitter.init = function() {\n\n  if (this._events === undefined ||\n      this._events === Object.getPrototypeOf(this)._events) {\n    this._events = Object.create(null);\n    this._eventsCount = 0;\n  }\n\n  this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n  if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n    throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n  }\n  this._maxListeners = n;\n  return this;\n};\n\nfunction _getMaxListeners(that) {\n  if (that._maxListeners === undefined)\n    return EventEmitter.defaultMaxListeners;\n  return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n  return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n  var args = [];\n  for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n  var doError = (type === 'error');\n\n  var events = this._events;\n  if (events !== undefined)\n    doError = (doError && events.error === undefined);\n  else if (!doError)\n    return false;\n\n  // If there is no 'error' event listener then throw.\n  if (doError) {\n    var er;\n    if (args.length > 0)\n      er = args[0];\n    if (er instanceof Error) {\n      // Note: The comments on the `throw` lines are intentional, they show\n      // up in Node's output if this results in an unhandled exception.\n      throw er; // Unhandled 'error' event\n    }\n    // At least give some kind of context to the user\n    var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n    err.context = er;\n    throw err; // Unhandled 'error' event\n  }\n\n  var handler = events[type];\n\n  if (handler === undefined)\n    return false;\n\n  if (typeof handler === 'function') {\n    ReflectApply(handler, this, args);\n  } else {\n    var len = handler.length;\n    var listeners = arrayClone(handler, len);\n    for (var i = 0; i < len; ++i)\n      ReflectApply(listeners[i], this, args);\n  }\n\n  return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n  var m;\n  var events;\n  var existing;\n\n  checkListener(listener);\n\n  events = target._events;\n  if (events === undefined) {\n    events = target._events = Object.create(null);\n    target._eventsCount = 0;\n  } else {\n    // To avoid recursion in the case that type === \"newListener\"! Before\n    // adding it to the listeners, first emit \"newListener\".\n    if (events.newListener !== undefined) {\n      target.emit('newListener', type,\n                  listener.listener ? listener.listener : listener);\n\n      // Re-assign `events` because a newListener handler could have caused the\n      // this._events to be assigned to a new object\n      events = target._events;\n    }\n    existing = events[type];\n  }\n\n  if (existing === undefined) {\n    // Optimize the case of one listener. Don't need the extra array object.\n    existing = events[type] = listener;\n    ++target._eventsCount;\n  } else {\n    if (typeof existing === 'function') {\n      // Adding the second element, need to change to array.\n      existing = events[type] =\n        prepend ? [listener, existing] : [existing, listener];\n      // If we've already got an array, just append.\n    } else if (prepend) {\n      existing.unshift(listener);\n    } else {\n      existing.push(listener);\n    }\n\n    // Check for listener leak\n    m = _getMaxListeners(target);\n    if (m > 0 && existing.length > m && !existing.warned) {\n      existing.warned = true;\n      // No error code for this since it is a Warning\n      // eslint-disable-next-line no-restricted-syntax\n      var w = new Error('Possible EventEmitter memory leak detected. ' +\n                          existing.length + ' ' + String(type) + ' listeners ' +\n                          'added. Use emitter.setMaxListeners() to ' +\n                          'increase limit');\n      w.name = 'MaxListenersExceededWarning';\n      w.emitter = target;\n      w.type = type;\n      w.count = existing.length;\n      ProcessEmitWarning(w);\n    }\n  }\n\n  return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n  return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n    function prependListener(type, listener) {\n      return _addListener(this, type, listener, true);\n    };\n\nfunction onceWrapper() {\n  if (!this.fired) {\n    this.target.removeListener(this.type, this.wrapFn);\n    this.fired = true;\n    if (arguments.length === 0)\n      return this.listener.call(this.target);\n    return this.listener.apply(this.target, arguments);\n  }\n}\n\nfunction _onceWrap(target, type, listener) {\n  var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n  var wrapped = onceWrapper.bind(state);\n  wrapped.listener = listener;\n  state.wrapFn = wrapped;\n  return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n  checkListener(listener);\n  this.on(type, _onceWrap(this, type, listener));\n  return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n    function prependOnceListener(type, listener) {\n      checkListener(listener);\n      this.prependListener(type, _onceWrap(this, type, listener));\n      return this;\n    };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n    function removeListener(type, listener) {\n      var list, events, position, i, originalListener;\n\n      checkListener(listener);\n\n      events = this._events;\n      if (events === undefined)\n        return this;\n\n      list = events[type];\n      if (list === undefined)\n        return this;\n\n      if (list === listener || list.listener === listener) {\n        if (--this._eventsCount === 0)\n          this._events = Object.create(null);\n        else {\n          delete events[type];\n          if (events.removeListener)\n            this.emit('removeListener', type, list.listener || listener);\n        }\n      } else if (typeof list !== 'function') {\n        position = -1;\n\n        for (i = list.length - 1; i >= 0; i--) {\n          if (list[i] === listener || list[i].listener === listener) {\n            originalListener = list[i].listener;\n            position = i;\n            break;\n          }\n        }\n\n        if (position < 0)\n          return this;\n\n        if (position === 0)\n          list.shift();\n        else {\n          spliceOne(list, position);\n        }\n\n        if (list.length === 1)\n          events[type] = list[0];\n\n        if (events.removeListener !== undefined)\n          this.emit('removeListener', type, originalListener || listener);\n      }\n\n      return this;\n    };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n    function removeAllListeners(type) {\n      var listeners, events, i;\n\n      events = this._events;\n      if (events === undefined)\n        return this;\n\n      // not listening for removeListener, no need to emit\n      if (events.removeListener === undefined) {\n        if (arguments.length === 0) {\n          this._events = Object.create(null);\n          this._eventsCount = 0;\n        } else if (events[type] !== undefined) {\n          if (--this._eventsCount === 0)\n            this._events = Object.create(null);\n          else\n            delete events[type];\n        }\n        return this;\n      }\n\n      // emit removeListener for all listeners on all events\n      if (arguments.length === 0) {\n        var keys = Object.keys(events);\n        var key;\n        for (i = 0; i < keys.length; ++i) {\n          key = keys[i];\n          if (key === 'removeListener') continue;\n          this.removeAllListeners(key);\n        }\n        this.removeAllListeners('removeListener');\n        this._events = Object.create(null);\n        this._eventsCount = 0;\n        return this;\n      }\n\n      listeners = events[type];\n\n      if (typeof listeners === 'function') {\n        this.removeListener(type, listeners);\n      } else if (listeners !== undefined) {\n        // LIFO order\n        for (i = listeners.length - 1; i >= 0; i--) {\n          this.removeListener(type, listeners[i]);\n        }\n      }\n\n      return this;\n    };\n\nfunction _listeners(target, type, unwrap) {\n  var events = target._events;\n\n  if (events === undefined)\n    return [];\n\n  var evlistener = events[type];\n  if (evlistener === undefined)\n    return [];\n\n  if (typeof evlistener === 'function')\n    return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n  return unwrap ?\n    unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n  return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n  return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n  if (typeof emitter.listenerCount === 'function') {\n    return emitter.listenerCount(type);\n  } else {\n    return listenerCount.call(emitter, type);\n  }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n  var events = this._events;\n\n  if (events !== undefined) {\n    var evlistener = events[type];\n\n    if (typeof evlistener === 'function') {\n      return 1;\n    } else if (evlistener !== undefined) {\n      return evlistener.length;\n    }\n  }\n\n  return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n  return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n  var copy = new Array(n);\n  for (var i = 0; i < n; ++i)\n    copy[i] = arr[i];\n  return copy;\n}\n\nfunction spliceOne(list, index) {\n  for (; index + 1 < list.length; index++)\n    list[index] = list[index + 1];\n  list.pop();\n}\n\nfunction unwrapListeners(arr) {\n  var ret = new Array(arr.length);\n  for (var i = 0; i < ret.length; ++i) {\n    ret[i] = arr[i].listener || arr[i];\n  }\n  return ret;\n}\n\nfunction once(emitter, name) {\n  return new Promise(function (resolve, reject) {\n    function errorListener(err) {\n      emitter.removeListener(name, resolver);\n      reject(err);\n    }\n\n    function resolver() {\n      if (typeof emitter.removeListener === 'function') {\n        emitter.removeListener('error', errorListener);\n      }\n      resolve([].slice.call(arguments));\n    };\n\n    eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n    if (name !== 'error') {\n      addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n    }\n  });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n  if (typeof emitter.on === 'function') {\n    eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n  }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n  if (typeof emitter.on === 'function') {\n    if (flags.once) {\n      emitter.once(name, listener);\n    } else {\n      emitter.on(name, listener);\n    }\n  } else if (typeof emitter.addEventListener === 'function') {\n    // EventTarget does not have `error` event semantics like Node\n    // EventEmitters, we do not listen for `error` events here.\n    emitter.addEventListener(name, function wrapListener(arg) {\n      // IE does not have builtin `{ once: true }` support so we\n      // have to do it manually.\n      if (flags.once) {\n        emitter.removeEventListener(name, wrapListener);\n      }\n      listener(arg);\n    });\n  } else {\n    throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n  }\n}\n","var ___EXPOSE_LOADER_IMPORT___ = require(\"-!./bluebird.js\");\nvar ___EXPOSE_LOADER_GET_GLOBAL_THIS___ = require(\"../../../expose-loader/dist/runtime/getGlobalThis.js\");\nvar ___EXPOSE_LOADER_GLOBAL_THIS___ = ___EXPOSE_LOADER_GET_GLOBAL_THIS___;\n___EXPOSE_LOADER_GLOBAL_THIS___[\"Promise\"] = ___EXPOSE_LOADER_IMPORT___;\nmodule.exports = ___EXPOSE_LOADER_IMPORT___;\n","var ___EXPOSE_LOADER_IMPORT___ = require(\"-!./jquery.js\");\nvar ___EXPOSE_LOADER_GET_GLOBAL_THIS___ = require(\"../../expose-loader/dist/runtime/getGlobalThis.js\");\nvar ___EXPOSE_LOADER_GLOBAL_THIS___ = ___EXPOSE_LOADER_GET_GLOBAL_THIS___;\nif (typeof ___EXPOSE_LOADER_GLOBAL_THIS___[\"$\"] === 'undefined') ___EXPOSE_LOADER_GLOBAL_THIS___[\"$\"] = ___EXPOSE_LOADER_IMPORT___;\nif (typeof ___EXPOSE_LOADER_GLOBAL_THIS___[\"jQuery\"] === 'undefined') ___EXPOSE_LOADER_GLOBAL_THIS___[\"jQuery\"] = ___EXPOSE_LOADER_IMPORT___;\nmodule.exports = ___EXPOSE_LOADER_IMPORT___;\n","\"use strict\";\n\n// eslint-disable-next-line func-names\nmodule.exports = function () {\n  if (typeof globalThis === \"object\") {\n    return globalThis;\n  }\n  var g;\n  try {\n    // This works if eval is allowed (see CSP)\n    // eslint-disable-next-line no-new-func\n    g = this || new Function(\"return this\")();\n  } catch (e) {\n    // This works if the window reference is available\n    if (typeof window === \"object\") {\n      return window;\n    }\n\n    // This works if the self reference is available\n    if (typeof self === \"object\") {\n      return self;\n    }\n\n    // This works if the global reference is available\n    if (typeof global !== \"undefined\") {\n      return global;\n    }\n  }\n  return g;\n}();","'use strict';\n\nvar isCallable = require('is-callable');\n\nvar toStr = Object.prototype.toString;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nvar forEachArray = function forEachArray(array, iterator, receiver) {\n    for (var i = 0, len = array.length; i < len; i++) {\n        if (hasOwnProperty.call(array, i)) {\n            if (receiver == null) {\n                iterator(array[i], i, array);\n            } else {\n                iterator.call(receiver, array[i], i, array);\n            }\n        }\n    }\n};\n\nvar forEachString = function forEachString(string, iterator, receiver) {\n    for (var i = 0, len = string.length; i < len; i++) {\n        // no such thing as a sparse string.\n        if (receiver == null) {\n            iterator(string.charAt(i), i, string);\n        } else {\n            iterator.call(receiver, string.charAt(i), i, string);\n        }\n    }\n};\n\nvar forEachObject = function forEachObject(object, iterator, receiver) {\n    for (var k in object) {\n        if (hasOwnProperty.call(object, k)) {\n            if (receiver == null) {\n                iterator(object[k], k, object);\n            } else {\n                iterator.call(receiver, object[k], k, object);\n            }\n        }\n    }\n};\n\nvar forEach = function forEach(list, iterator, thisArg) {\n    if (!isCallable(iterator)) {\n        throw new TypeError('iterator must be a function');\n    }\n\n    var receiver;\n    if (arguments.length >= 3) {\n        receiver = thisArg;\n    }\n\n    if (toStr.call(list) === '[object Array]') {\n        forEachArray(list, iterator, receiver);\n    } else if (typeof list === 'string') {\n        forEachString(list, iterator, receiver);\n    } else {\n        forEachObject(list, iterator, receiver);\n    }\n};\n\nmodule.exports = forEach;\n","'use strict';\n\n/* eslint no-invalid-this: 1 */\n\nvar ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';\nvar slice = Array.prototype.slice;\nvar toStr = Object.prototype.toString;\nvar funcType = '[object Function]';\n\nmodule.exports = function bind(that) {\n    var target = this;\n    if (typeof target !== 'function' || toStr.call(target) !== funcType) {\n        throw new TypeError(ERROR_MESSAGE + target);\n    }\n    var args = slice.call(arguments, 1);\n\n    var bound;\n    var binder = function () {\n        if (this instanceof bound) {\n            var result = target.apply(\n                this,\n                args.concat(slice.call(arguments))\n            );\n            if (Object(result) === result) {\n                return result;\n            }\n            return this;\n        } else {\n            return target.apply(\n                that,\n                args.concat(slice.call(arguments))\n            );\n        }\n    };\n\n    var boundLength = Math.max(0, target.length - args.length);\n    var boundArgs = [];\n    for (var i = 0; i < boundLength; i++) {\n        boundArgs.push('$' + i);\n    }\n\n    bound = Function('binder', 'return function (' + boundArgs.join(',') + '){ return binder.apply(this,arguments); }')(binder);\n\n    if (target.prototype) {\n        var Empty = function Empty() {};\n        Empty.prototype = target.prototype;\n        bound.prototype = new Empty();\n        Empty.prototype = null;\n    }\n\n    return bound;\n};\n","'use strict';\n\nvar implementation = require('./implementation');\n\nmodule.exports = Function.prototype.bind || implementation;\n","'use strict';\n\nvar undefined;\n\nvar $SyntaxError = SyntaxError;\nvar $Function = Function;\nvar $TypeError = TypeError;\n\n// eslint-disable-next-line consistent-return\nvar getEvalledConstructor = function (expressionSyntax) {\n\ttry {\n\t\treturn $Function('\"use strict\"; return (' + expressionSyntax + ').constructor;')();\n\t} catch (e) {}\n};\n\nvar $gOPD = Object.getOwnPropertyDescriptor;\nif ($gOPD) {\n\ttry {\n\t\t$gOPD({}, '');\n\t} catch (e) {\n\t\t$gOPD = null; // this is IE 8, which has a broken gOPD\n\t}\n}\n\nvar throwTypeError = function () {\n\tthrow new $TypeError();\n};\nvar ThrowTypeError = $gOPD\n\t? (function () {\n\t\ttry {\n\t\t\t// eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties\n\t\t\targuments.callee; // IE 8 does not throw here\n\t\t\treturn throwTypeError;\n\t\t} catch (calleeThrows) {\n\t\t\ttry {\n\t\t\t\t// IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '')\n\t\t\t\treturn $gOPD(arguments, 'callee').get;\n\t\t\t} catch (gOPDthrows) {\n\t\t\t\treturn throwTypeError;\n\t\t\t}\n\t\t}\n\t}())\n\t: throwTypeError;\n\nvar hasSymbols = require('has-symbols')();\n\nvar getProto = Object.getPrototypeOf || function (x) { return x.__proto__; }; // eslint-disable-line no-proto\n\nvar needsEval = {};\n\nvar TypedArray = typeof Uint8Array === 'undefined' ? undefined : getProto(Uint8Array);\n\nvar INTRINSICS = {\n\t'%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError,\n\t'%Array%': Array,\n\t'%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer,\n\t'%ArrayIteratorPrototype%': hasSymbols ? getProto([][Symbol.iterator]()) : undefined,\n\t'%AsyncFromSyncIteratorPrototype%': undefined,\n\t'%AsyncFunction%': needsEval,\n\t'%AsyncGenerator%': needsEval,\n\t'%AsyncGeneratorFunction%': needsEval,\n\t'%AsyncIteratorPrototype%': needsEval,\n\t'%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics,\n\t'%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt,\n\t'%BigInt64Array%': typeof BigInt64Array === 'undefined' ? undefined : BigInt64Array,\n\t'%BigUint64Array%': typeof BigUint64Array === 'undefined' ? undefined : BigUint64Array,\n\t'%Boolean%': Boolean,\n\t'%DataView%': typeof DataView === 'undefined' ? undefined : DataView,\n\t'%Date%': Date,\n\t'%decodeURI%': decodeURI,\n\t'%decodeURIComponent%': decodeURIComponent,\n\t'%encodeURI%': encodeURI,\n\t'%encodeURIComponent%': encodeURIComponent,\n\t'%Error%': Error,\n\t'%eval%': eval, // eslint-disable-line no-eval\n\t'%EvalError%': EvalError,\n\t'%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array,\n\t'%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array,\n\t'%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry,\n\t'%Function%': $Function,\n\t'%GeneratorFunction%': needsEval,\n\t'%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array,\n\t'%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array,\n\t'%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array,\n\t'%isFinite%': isFinite,\n\t'%isNaN%': isNaN,\n\t'%IteratorPrototype%': hasSymbols ? getProto(getProto([][Symbol.iterator]())) : undefined,\n\t'%JSON%': typeof JSON === 'object' ? JSON : undefined,\n\t'%Map%': typeof Map === 'undefined' ? undefined : Map,\n\t'%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols ? undefined : getProto(new Map()[Symbol.iterator]()),\n\t'%Math%': Math,\n\t'%Number%': Number,\n\t'%Object%': Object,\n\t'%parseFloat%': parseFloat,\n\t'%parseInt%': parseInt,\n\t'%Promise%': typeof Promise === 'undefined' ? undefined : Promise,\n\t'%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy,\n\t'%RangeError%': RangeError,\n\t'%ReferenceError%': ReferenceError,\n\t'%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect,\n\t'%RegExp%': RegExp,\n\t'%Set%': typeof Set === 'undefined' ? undefined : Set,\n\t'%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols ? undefined : getProto(new Set()[Symbol.iterator]()),\n\t'%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer,\n\t'%String%': String,\n\t'%StringIteratorPrototype%': hasSymbols ? getProto(''[Symbol.iterator]()) : undefined,\n\t'%Symbol%': hasSymbols ? Symbol : undefined,\n\t'%SyntaxError%': $SyntaxError,\n\t'%ThrowTypeError%': ThrowTypeError,\n\t'%TypedArray%': TypedArray,\n\t'%TypeError%': $TypeError,\n\t'%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array,\n\t'%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray,\n\t'%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array,\n\t'%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array,\n\t'%URIError%': URIError,\n\t'%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap,\n\t'%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef,\n\t'%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet\n};\n\ntry {\n\tnull.error; // eslint-disable-line no-unused-expressions\n} catch (e) {\n\t// https://github.com/tc39/proposal-shadowrealm/pull/384#issuecomment-1364264229\n\tvar errorProto = getProto(getProto(e));\n\tINTRINSICS['%Error.prototype%'] = errorProto;\n}\n\nvar doEval = function doEval(name) {\n\tvar value;\n\tif (name === '%AsyncFunction%') {\n\t\tvalue = getEvalledConstructor('async function () {}');\n\t} else if (name === '%GeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('function* () {}');\n\t} else if (name === '%AsyncGeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('async function* () {}');\n\t} else if (name === '%AsyncGenerator%') {\n\t\tvar fn = doEval('%AsyncGeneratorFunction%');\n\t\tif (fn) {\n\t\t\tvalue = fn.prototype;\n\t\t}\n\t} else if (name === '%AsyncIteratorPrototype%') {\n\t\tvar gen = doEval('%AsyncGenerator%');\n\t\tif (gen) {\n\t\t\tvalue = getProto(gen.prototype);\n\t\t}\n\t}\n\n\tINTRINSICS[name] = value;\n\n\treturn value;\n};\n\nvar LEGACY_ALIASES = {\n\t'%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'],\n\t'%ArrayPrototype%': ['Array', 'prototype'],\n\t'%ArrayProto_entries%': ['Array', 'prototype', 'entries'],\n\t'%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'],\n\t'%ArrayProto_keys%': ['Array', 'prototype', 'keys'],\n\t'%ArrayProto_values%': ['Array', 'prototype', 'values'],\n\t'%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'],\n\t'%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'],\n\t'%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'],\n\t'%BooleanPrototype%': ['Boolean', 'prototype'],\n\t'%DataViewPrototype%': ['DataView', 'prototype'],\n\t'%DatePrototype%': ['Date', 'prototype'],\n\t'%ErrorPrototype%': ['Error', 'prototype'],\n\t'%EvalErrorPrototype%': ['EvalError', 'prototype'],\n\t'%Float32ArrayPrototype%': ['Float32Array', 'prototype'],\n\t'%Float64ArrayPrototype%': ['Float64Array', 'prototype'],\n\t'%FunctionPrototype%': ['Function', 'prototype'],\n\t'%Generator%': ['GeneratorFunction', 'prototype'],\n\t'%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'],\n\t'%Int8ArrayPrototype%': ['Int8Array', 'prototype'],\n\t'%Int16ArrayPrototype%': ['Int16Array', 'prototype'],\n\t'%Int32ArrayPrototype%': ['Int32Array', 'prototype'],\n\t'%JSONParse%': ['JSON', 'parse'],\n\t'%JSONStringify%': ['JSON', 'stringify'],\n\t'%MapPrototype%': ['Map', 'prototype'],\n\t'%NumberPrototype%': ['Number', 'prototype'],\n\t'%ObjectPrototype%': ['Object', 'prototype'],\n\t'%ObjProto_toString%': ['Object', 'prototype', 'toString'],\n\t'%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'],\n\t'%PromisePrototype%': ['Promise', 'prototype'],\n\t'%PromiseProto_then%': ['Promise', 'prototype', 'then'],\n\t'%Promise_all%': ['Promise', 'all'],\n\t'%Promise_reject%': ['Promise', 'reject'],\n\t'%Promise_resolve%': ['Promise', 'resolve'],\n\t'%RangeErrorPrototype%': ['RangeError', 'prototype'],\n\t'%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'],\n\t'%RegExpPrototype%': ['RegExp', 'prototype'],\n\t'%SetPrototype%': ['Set', 'prototype'],\n\t'%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'],\n\t'%StringPrototype%': ['String', 'prototype'],\n\t'%SymbolPrototype%': ['Symbol', 'prototype'],\n\t'%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'],\n\t'%TypedArrayPrototype%': ['TypedArray', 'prototype'],\n\t'%TypeErrorPrototype%': ['TypeError', 'prototype'],\n\t'%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'],\n\t'%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'],\n\t'%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'],\n\t'%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'],\n\t'%URIErrorPrototype%': ['URIError', 'prototype'],\n\t'%WeakMapPrototype%': ['WeakMap', 'prototype'],\n\t'%WeakSetPrototype%': ['WeakSet', 'prototype']\n};\n\nvar bind = require('function-bind');\nvar hasOwn = require('has');\nvar $concat = bind.call(Function.call, Array.prototype.concat);\nvar $spliceApply = bind.call(Function.apply, Array.prototype.splice);\nvar $replace = bind.call(Function.call, String.prototype.replace);\nvar $strSlice = bind.call(Function.call, String.prototype.slice);\nvar $exec = bind.call(Function.call, RegExp.prototype.exec);\n\n/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */\nvar rePropName = /[^%.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|%$))/g;\nvar reEscapeChar = /\\\\(\\\\)?/g; /** Used to match backslashes in property paths. */\nvar stringToPath = function stringToPath(string) {\n\tvar first = $strSlice(string, 0, 1);\n\tvar last = $strSlice(string, -1);\n\tif (first === '%' && last !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected closing `%`');\n\t} else if (last === '%' && first !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected opening `%`');\n\t}\n\tvar result = [];\n\t$replace(string, rePropName, function (match, number, quote, subString) {\n\t\tresult[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match;\n\t});\n\treturn result;\n};\n/* end adaptation */\n\nvar getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) {\n\tvar intrinsicName = name;\n\tvar alias;\n\tif (hasOwn(LEGACY_ALIASES, intrinsicName)) {\n\t\talias = LEGACY_ALIASES[intrinsicName];\n\t\tintrinsicName = '%' + alias[0] + '%';\n\t}\n\n\tif (hasOwn(INTRINSICS, intrinsicName)) {\n\t\tvar value = INTRINSICS[intrinsicName];\n\t\tif (value === needsEval) {\n\t\t\tvalue = doEval(intrinsicName);\n\t\t}\n\t\tif (typeof value === 'undefined' && !allowMissing) {\n\t\t\tthrow new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');\n\t\t}\n\n\t\treturn {\n\t\t\talias: alias,\n\t\t\tname: intrinsicName,\n\t\t\tvalue: value\n\t\t};\n\t}\n\n\tthrow new $SyntaxError('intrinsic ' + name + ' does not exist!');\n};\n\nmodule.exports = function GetIntrinsic(name, allowMissing) {\n\tif (typeof name !== 'string' || name.length === 0) {\n\t\tthrow new $TypeError('intrinsic name must be a non-empty string');\n\t}\n\tif (arguments.length > 1 && typeof allowMissing !== 'boolean') {\n\t\tthrow new $TypeError('\"allowMissing\" argument must be a boolean');\n\t}\n\n\tif ($exec(/^%?[^%]*%?$/, name) === null) {\n\t\tthrow new $SyntaxError('`%` may not be present anywhere but at the beginning and end of the intrinsic name');\n\t}\n\tvar parts = stringToPath(name);\n\tvar intrinsicBaseName = parts.length > 0 ? parts[0] : '';\n\n\tvar intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing);\n\tvar intrinsicRealName = intrinsic.name;\n\tvar value = intrinsic.value;\n\tvar skipFurtherCaching = false;\n\n\tvar alias = intrinsic.alias;\n\tif (alias) {\n\t\tintrinsicBaseName = alias[0];\n\t\t$spliceApply(parts, $concat([0, 1], alias));\n\t}\n\n\tfor (var i = 1, isOwn = true; i < parts.length; i += 1) {\n\t\tvar part = parts[i];\n\t\tvar first = $strSlice(part, 0, 1);\n\t\tvar last = $strSlice(part, -1);\n\t\tif (\n\t\t\t(\n\t\t\t\t(first === '\"' || first === \"'\" || first === '`')\n\t\t\t\t|| (last === '\"' || last === \"'\" || last === '`')\n\t\t\t)\n\t\t\t&& first !== last\n\t\t) {\n\t\t\tthrow new $SyntaxError('property names with quotes must have matching quotes');\n\t\t}\n\t\tif (part === 'constructor' || !isOwn) {\n\t\t\tskipFurtherCaching = true;\n\t\t}\n\n\t\tintrinsicBaseName += '.' + part;\n\t\tintrinsicRealName = '%' + intrinsicBaseName + '%';\n\n\t\tif (hasOwn(INTRINSICS, intrinsicRealName)) {\n\t\t\tvalue = INTRINSICS[intrinsicRealName];\n\t\t} else if (value != null) {\n\t\t\tif (!(part in value)) {\n\t\t\t\tif (!allowMissing) {\n\t\t\t\t\tthrow new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.');\n\t\t\t\t}\n\t\t\t\treturn void undefined;\n\t\t\t}\n\t\t\tif ($gOPD && (i + 1) >= parts.length) {\n\t\t\t\tvar desc = $gOPD(value, part);\n\t\t\t\tisOwn = !!desc;\n\n\t\t\t\t// By convention, when a data property is converted to an accessor\n\t\t\t\t// property to emulate a data property that does not suffer from\n\t\t\t\t// the override mistake, that accessor's getter is marked with\n\t\t\t\t// an `originalValue` property. Here, when we detect this, we\n\t\t\t\t// uphold the illusion by pretending to see that original data\n\t\t\t\t// property, i.e., returning the value rather than the getter\n\t\t\t\t// itself.\n\t\t\t\tif (isOwn && 'get' in desc && !('originalValue' in desc.get)) {\n\t\t\t\t\tvalue = desc.get;\n\t\t\t\t} else {\n\t\t\t\t\tvalue = value[part];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tisOwn = hasOwn(value, part);\n\t\t\t\tvalue = value[part];\n\t\t\t}\n\n\t\t\tif (isOwn && !skipFurtherCaching) {\n\t\t\t\tINTRINSICS[intrinsicRealName] = value;\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%', true);\n\nif ($gOPD) {\n\ttry {\n\t\t$gOPD([], 'length');\n\t} catch (e) {\n\t\t// IE 8 has a broken gOPD\n\t\t$gOPD = null;\n\t}\n}\n\nmodule.exports = $gOPD;\n","'use strict';\n\nvar origSymbol = typeof Symbol !== 'undefined' && Symbol;\nvar hasSymbolSham = require('./shams');\n\nmodule.exports = function hasNativeSymbols() {\n\tif (typeof origSymbol !== 'function') { return false; }\n\tif (typeof Symbol !== 'function') { return false; }\n\tif (typeof origSymbol('foo') !== 'symbol') { return false; }\n\tif (typeof Symbol('bar') !== 'symbol') { return false; }\n\n\treturn hasSymbolSham();\n};\n","'use strict';\n\n/* eslint complexity: [2, 18], max-statements: [2, 33] */\nmodule.exports = function hasSymbols() {\n\tif (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; }\n\tif (typeof Symbol.iterator === 'symbol') { return true; }\n\n\tvar obj = {};\n\tvar sym = Symbol('test');\n\tvar symObj = Object(sym);\n\tif (typeof sym === 'string') { return false; }\n\n\tif (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; }\n\tif (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; }\n\n\t// temp disabled per https://github.com/ljharb/object.assign/issues/17\n\t// if (sym instanceof Symbol) { return false; }\n\t// temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4\n\t// if (!(symObj instanceof Symbol)) { return false; }\n\n\t// if (typeof Symbol.prototype.toString !== 'function') { return false; }\n\t// if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; }\n\n\tvar symVal = 42;\n\tobj[sym] = symVal;\n\tfor (sym in obj) { return false; } // eslint-disable-line no-restricted-syntax, no-unreachable-loop\n\tif (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; }\n\n\tif (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; }\n\n\tvar syms = Object.getOwnPropertySymbols(obj);\n\tif (syms.length !== 1 || syms[0] !== sym) { return false; }\n\n\tif (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; }\n\n\tif (typeof Object.getOwnPropertyDescriptor === 'function') {\n\t\tvar descriptor = Object.getOwnPropertyDescriptor(obj, sym);\n\t\tif (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; }\n\t}\n\n\treturn true;\n};\n","'use strict';\n\nvar hasSymbols = require('has-symbols/shams');\n\nmodule.exports = function hasToStringTagShams() {\n\treturn hasSymbols() && !!Symbol.toStringTag;\n};\n","'use strict';\n\nvar bind = require('function-bind');\n\nmodule.exports = bind.call(Function.call, Object.prototype.hasOwnProperty);\n","// Module\nvar code = \"<template> <div class=\\\"app-tile\\\" click.delegate=\\\"doClick($event)\\\" tabindex=\\\"0\\\" keypress.delegate=\\\"onEnterPress($event)\\\"> <div class=\\\"app-tile-header\\\"> <div class=\\\"app-tile-header-name\\\">${name}</div> <div class=\\\"app-tile-header-description\\\">${description}</div> </div> <div class=\\\"app-tile-body\\\"> <div class=\\\"app-tile-body-icon ${icon}\\\"></div> <div class=\\\"app-tile-body-unit\\\"> <div class=\\\"app-tile-body-unit-kpi\\\">${kpi}</div> <div class=\\\"app-tile-body-unit-unit\\\">${unit}</div> </div> </div> </div> </template>\";\n// Exports\nexport default code;","// Module\nvar code = \"<template> <div class=\\\"app-tiles-container\\\"> <div class=\\\"header\\\"> <label class=\\\"text w-100 app-tile-header__title\\\">${headerTitle}</label> </div> <div class=\\\"body\\\"> <slot name=\\\"body\\\"></slot> </div> </div> </template> \";\n// Exports\nexport default code;","// Module\nvar code = \"<template> <div class=\\\"content-container ${collapsible ? 'collapsible' : ''}\\\"> <input type=\\\"checkbox\\\" checked.bind=\\\"expanded\\\" class=\\\"checker\\\" if.bind=\\\"collapsible\\\" id=\\\"content-container-input-${id}\\\"> <div class=\\\"header\\\"> <label class=\\\"text w-100\\\" for=\\\"content-container-input-${id}\\\">${headerTitle}</label> </div> <div class=\\\"body\\\"> <slot></slot> </div> </div> </template> \";\n// Exports\nexport default code;","// Module\nvar code = \"<template> <select disabled.bind=\\\"disabled\\\" value.bind=\\\"selected\\\" style=\\\"width:100%\\\"> </select> </template>\";\n// Exports\nexport default code;","// Module\nvar code = \"<template> <require from=\\\"./dropdown\\\"></require> <div class=\\\"dropdown\\\" class.bind=\\\"dropdownClass\\\"> <div dropdown> <slot></slot> </div> <div class=\\\"dropdown-menu\\\" class.bind=\\\"dropdownMenuClass\\\"> <slot name=\\\"dropdown-menu\\\"></slot> </div> </div> </template> \";\n// Exports\nexport default code;","// Module\nvar code = \"<template> <footer> <div class=\\\"footer\\\"> <div class=\\\"footer-copy\\\"> <div class=\\\"col-md-12\\\"> ${footerKey | translate}<span if.bind=\\\"isVersionVisible && version\\\">${version}</span> </div> </div> </div> </footer> </template>\";\n// Exports\nexport default code;","// Module\nvar code = \"<template> <div class=\\\"global-area dark-controls\\\" ref=\\\"element\\\" class.bind=\\\"classes\\\"> <div class=\\\"wrapper global-area__content\\\"> <div class=\\\"global-filters global-area__global-filters form-row\\\"> <div class=\\\"col\\\"> <div class=\\\"form-row header-title-wrapper\\\" if.bind=\\\"headerTitle\\\"> <div class=\\\"col\\\"> <div class=\\\"title global-area__title\\\" if.bind=\\\"headerTitle\\\">${headerTitle}</div> </div> <div class=\\\"col-auto\\\"> <div class=\\\"global-area__header-right\\\" if.bind=\\\"collapsible\\\"> <button class=\\\"btn btn-link\\\" click.delegate=\\\"toggleFilters()\\\"> <i class=\\\"daimler-icon icon-custom-filter2\\\"></i> <i class=\\\"global-area__filter-indicator\\\" if.bind=\\\"appliedFilter\\\"></i> <span if.bind=\\\"collapsed\\\">${'Components.GlobalArea.ShowFilters' | translate}</span> <span if.bind=\\\"!collapsed\\\">${'Components.GlobalArea.HideFilters' | translate}</span> </button> </div> </div> </div> <slot name=\\\"global-filters\\\"> </slot> </div> <div class=\\\"col-auto\\\" if.bind=\\\"collapsible && !headerTitle\\\"> <button class=\\\"btn btn-link\\\" click.delegate=\\\"toggleFilters()\\\"> <i class=\\\"daimler-icon icon-custom-filter2\\\"></i> <i class=\\\"global-area__filter-indicator\\\" if.bind=\\\"appliedFilter\\\"></i> <span if.bind=\\\"collapsed\\\">${'Components.GlobalArea.ShowFilters' | translate}</span> <span if.bind=\\\"!collapsed\\\">${'Components.GlobalArea.HideFilters' | translate}</span> </button> </div> </div> <div class=\\\"local-filters global-area__local-filters\\\" show.bind=\\\"showLocalFilters\\\"> <slot name=\\\"local-filters\\\"></slot> </div> </div> </div> </template> \";\n// Exports\nexport default code;","// Module\nvar code = \"<template> <div class=\\\"nav-bar-container\\\" class.bind=\\\"warningMessage ? 'nav-bar-container_has-alert' : ''\\\"> <div class=\\\"nav-bar nav-bar-expand\\\"> <div class=\\\"nav-bar-itm nav-bar-back\\\"> <a href=\\\"javascript:void()\\\" click.trigger=\\\"goBack()\\\"> <span class=\\\"daimler-icon icon-interaction-arrow-left-12\\\"></span> </a> </div> <div class=\\\"vertical-separator\\\"></div> <div class=\\\"nav-bar-itm nav-bar-home\\\"> <a href.bind=\\\"homeRoute\\\"> <span class=\\\"daimler-icon icon-basic-home-1\\\"></span> </a> </div> <div class=\\\"nav-bar-itm nav-bar-app-name\\\"> <a href.bind=\\\"homeRoute\\\">${appTitleKey | translate}</a> <span if.bind=\\\"mandant.length > 0\\\">(${mandant})</span> </div> <div class=\\\"mr-auto\\\"> </div> <slot name=\\\"additional-right\\\" class=\\\"nav-bar-itm\\\"> </slot> <div class=\\\"nav-bar-itm nav-bar-person\\\"> <a href.bind=\\\"settingsRoute\\\"><span class=\\\"daimler-icon icon-basic-person-2\\\"></span></a> </div> </div> <div class=\\\"nav-bar-alert nav-bar-alert-danger\\\" if.bind=\\\"warningMessage\\\"> <span>${ warningMessage | translate}</span> </div> </div> </template> \";\n// Exports\nexport default code;","// Module\nvar code = \"<template> <div class=\\\"list-component-wrapper\\\"> <div class=\\\"form-group\\\"> <div class=\\\"input-group\\\"> <div class=\\\"input-group-preppend list-component-select-all\\\" if.bind=\\\"isCheckboxStrategy\\\"> <label class=\\\"custom-control custom-checkbox\\\"> <input type=\\\"checkbox\\\" class=\\\"custom-control-input\\\" checked.bind=\\\"checkAll\\\"> <span class=\\\"custom-control-label\\\"></span> </label> </div> <div class=\\\"input-group input-group-content input-group_inside\\\"> <input type=\\\"text\\\" placeholder=\\\"${'@steinpilz/business-app-theme-au.list.FilterPlaceholder' | translate}\\\" class=\\\"form-control\\\" value.bind=\\\"filterText & debounce:1000\\\"> <div class=\\\"input-group-append\\\"> <button class=\\\"btn-link\\\" click.delegate=\\\"clearFilterText()\\\"> <span class=\\\"daimler-icon icon-interaction-close\\\"></span> </button> </div> </div> </div> </div> <div> ${['@steinpilz/business-app-theme-au.list.SelectedItems{0}', selectedItems.length] | translate} </div> <div class=\\\"list-group list-component\\\" if.bind=\\\"isCheckboxStrategy\\\"> <div class=\\\"list-group-item list-component-item\\\" virtual-repeat.for=\\\"item of listItemsToDisplay\\\"> <div class=\\\"list-component-item__select\\\"> <label class=\\\"custom-control custom-checkbox\\\"> <input type=\\\"checkbox\\\" class=\\\"custom-control-input\\\" checked.bind=\\\"item.isActive\\\" change.delegate=\\\"toggleSelection($event, item)\\\"> <span class=\\\"custom-control-label\\\"></span> </label> </div> <div part=\\\"item-template\\\" replaceable> ${getItemText(item)} </div> </div> </div> <div class=\\\"list-group list-component\\\" if.bind=\\\"!isCheckboxStrategy\\\"> <div class=\\\"list-group-item list-component-item\\\" virtual-repeat.for=\\\"item of listItemsToDisplay\\\" click.trigger=\\\"toggleSelection($event, item)\\\" class.bind=\\\"item.isActive ? 'active' : ''\\\"> <div part=\\\"item-template\\\" replaceable> ${getItemText(item)} </div> </div> </div> </div> </template> \";\n// Exports\nexport default code;","// Module\nvar code = \"<template> <div class=\\\"master-details\\\"> <div class=\\\"master\\\"> <slot name=\\\"master\\\"></slot> </div> <div class=\\\"details\\\"> <slot name=\\\"details\\\"></slot> </div> </div> </template> \";\n// Exports\nexport default code;","// Module\nvar code = \"<template> <div class=\\\"content-area overflow-auto\\\" class.bind=\\\"containerClass\\\" ref=\\\"element\\\"> <slot></slot> </div> </template> \";\n// Exports\nexport default code;","// Module\nvar code = \"<template> <div class=\\\"row\\\"> <div style=\\\"margin-bottom:25px\\\" class=\\\"input-group\\\"> <span class=\\\"input-group-addon\\\"><i class=\\\"font-icon-account-group-5 daimler-icon icon-basic-account-group-5\\\"></i></span> <input id=\\\"login-username\\\" type=\\\"text\\\" class=\\\"form-control\\\" name=\\\"username\\\" value.bind=\\\"userName\\\" placeholder=\\\"username or email\\\"> </div> <div style=\\\"margin-top:10px\\\" class=\\\"form-group text-right\\\"> <a id=\\\"btn-login\\\" href=\\\"javascript:void(0)\\\" class=\\\"btn btn-success\\\" click.delegate=\\\"logIn()\\\">Login</a> </div> </div> </template> \";\n// Exports\nexport default code;","// Module\nvar code = \"<template> <require from=\\\"./pager\\\"></require> <div class=\\\"data-grid data-grid-${styleKind} body-template-container\\\"> <pager view-model.ref=\\\"pager\\\" data-source.bind=\\\"dataSource\\\" page-size.bind=\\\"pageSize\\\" preserve-current-page.bind=\\\"preserveCurrentPage\\\" visible-pages-max.bind=\\\"pagerVisiblePagesMax\\\" show.bind=\\\"showTopPager && (selectablePageSize || pager.pageCount > 1)\\\" selectable-page-size.bind=\\\"selectablePageSize\\\" suggestion-page-sizes.bind=\\\"suggestionPageSizes\\\"></pager> <div class.bind=\\\"tableOuterContainerCssClass\\\"> <div class=\\\"${tableInnerContainerCssClass} ${scrollTableCssClass}\\\"> <clear-filters cssClass=\\\"${clearFiltersCssClass}\\\" text=\\\"${labelConverter('Common.ClearFilters')}\\\" data-grid.bind=\\\"$this\\\"></clear-filters> <a if.bind=\\\"dataSource.dataItems.length > 0 && exportService != null\\\" class=\\\"${exportLinkCssClass}\\\" click.delegate=\\\"export()\\\" href=\\\"javascript:void(0)\\\">${labelConverter(\\\"Common.ExportTable\\\")}</a> <table class=\\\"${tableCssClass} ${additionalTableCssClass}\\\"> <thead if.one-time=\\\"showHeader\\\"> <tr> <th class=\\\"grid-actions\\\" if.bind=\\\"isAnyActionVisible && showActionsInFirstColumn\\\"></th> <th repeat.for=\\\"col of columns\\\" style.one-time=\\\"col.headerStyle\\\" class.one-time=\\\"col.headerCss\\\" show.bind=\\\"!col.hidden\\\"> <template if.one-time=\\\"col.sortable === false\\\"> <span class=\\\"daimler-table-header\\\">${colHeader(col)}</span> </template> <template if.one-time=\\\"col.sortable !== false\\\"> <a href=\\\"javascript:void(0)\\\" click.delegate=\\\"toggleSort(col)\\\"> <span class=\\\"daimler-table-header\\\">${colHeader(col)}</span> <i class=\\\"${sortCssClass(sort, col)}\\\"></i> </a> </template> <column-filter column.bind=\\\"col\\\" data-grid.bind=\\\"$parent\\\"></column-filter> </th> <th class=\\\"grid-actions\\\" if.bind=\\\"isAnyActionVisible && !showActionsInFirstColumn\\\"></th> </tr> </thead> <tbody> <tr repeat.for=\\\"row of dataSource.dataItems\\\" click.delegate=\\\"onRowClick(row, $event)\\\" tabindex.bind=\\\"rowClick ? 0 : -1\\\" keypress.trigger=\\\"onEnterPress($event)\\\"> <td class=\\\"grid-actions\\\" if.bind=\\\"isAnyActionVisible && showActionsInFirstColumn\\\"> <a repeat.for=\\\"action of actions\\\" href=\\\"javascript:void(0)\\\" class.bind=\\\"actionLinkCssClass\\\" title=\\\"${labelConverter(action.title)}\\\" click.delegate=\\\"onActionClick(action, row, $event)\\\" show.one-time=\\\"action.visibilityHandler == null || action.visibilityHandler(row)\\\"> <span class=\\\"${action.iconCssClass}\\\">${actionName(action)}</span> </a> </td> <td repeat.for=\\\"col of columns\\\" style.one-time=\\\"col.cellStyle\\\" class.one-time=\\\"col.cellCss + ' ' + col.getCustomCssHandler(row, col.name)\\\" show.bind=\\\"!col.hidden\\\"> <template if.one-time=\\\"linkType(col) === 'compose'\\\"> <compose view-model=\\\"${cellComposeViewModel(row, col)}\\\" model.one-time=\\\"cellComposeModel(row, col)\\\"></compose> </template> <template if.one-time=\\\"linkType(col) === 'none' && col.isHtml !== true\\\">${cellValue(row, col)}</template> <template if.one-time=\\\"linkType(col) === 'none' && col.isHtml === true\\\"> <span innerhtml.bind=\\\"cellValue(row, col)\\\"></span> </template> <template if.one-time=\\\"linkType(col) === 'routeName'\\\"> <a class=\\\"column-link\\\" route-href=\\\"route.one-time: linkRouteName(row, col); params.one-time: linkRouteParams(row, col)\\\">${cellValue(row, col)}</a> </template> <template if.one-time=\\\"linkType(col) === 'action'\\\"> <a class=\\\"column-link\\\" href=\\\"javascript:void(0)\\\" if.bind=\\\"linkEnabled(row, col)\\\" click.delegate=\\\"linkAction(row, col)\\\">${cellValue(row, col)}</a> <span if.bind=\\\"!linkEnabled(row, col)\\\">${cellValue(row, col)}</span> </template> <template if.one-time=\\\"linkType(col) === 'href'\\\"> <a class=\\\"column-link\\\" href.one-time=\\\"linkHref(row, col)\\\">${cellValue(row, col)}</a> </template> <template if.one-time=\\\"linkType(col) === 'checkbox'\\\"> <input type=\\\"checkbox\\\" checked.to-view=\\\"cellValue(row, col)\\\" change.delegate=\\\"col.handler(row)\\\" disabled.bind=\\\"col.disabledHandler && col.disabledHandler(row)\\\"/> </template> </td> <td class=\\\"grid-actions\\\" if.bind=\\\"isAnyActionVisible && !showActionsInFirstColumn\\\"> <a repeat.for=\\\"action of actions\\\" href=\\\"javascript:void(0)\\\" class.bind=\\\"actionLinkCssClass\\\" title=\\\"${labelConverter(action.title)}\\\" click.delegate=\\\"onActionClick(action, row, $event)\\\" show.one-time=\\\"action.visibilityHandler == null || action.visibilityHandler(row)\\\"> <span class=\\\"${action.iconCssClass}\\\">${actionName(action)}</span> </a> </td> </tr> </tbody> </table> <slot name=\\\"footer\\\"></slot> </div> </div> <pager item-count.bind=\\\"dataSource.totalCount\\\" current-page.bind=\\\"pager.currentPage\\\" page-size.bind=\\\"pageSize\\\" preserve-current-page.bind=\\\"preserveCurrentPage\\\" show.bind=\\\"showBottomPager && (selectablePageSize || pager.pageCount > 1)\\\" visible-pages-max.bind=\\\"pagerVisiblePagesMax\\\" selectable-page-size.bind=\\\"selectablePageSize\\\" suggestion-page-sizes.bind=\\\"suggestionPageSizes\\\"></pager> </div> </template> \";\n// Exports\nexport default code;","// Module\nvar code = \"<template> <nav> <ul class=\\\"pagination\\\"> <li class.bind=\\\"currentPage <= 1 ? 'disabled': ''\\\"> <a click.delegate=\\\"firstPage()\\\" aria-label=\\\"First\\\" href=\\\"javascript:void(0)\\\"> <span aria-hidden=\\\"true\\\">«</span> </a> </li> <li class.bind=\\\"currentPage <= 1 ? 'disabled': ''\\\"> <a click.delegate=\\\"prevPage()\\\" aria-label=\\\"Previous\\\" href=\\\"javascript:void(0)\\\"> <span aria-hidden=\\\"true\\\">‹</span> </a> </li> <li show.bind=\\\"pageRange.showPrevRange\\\"> <a click.delegate=\\\"prevPageRange()\\\" aria-label=\\\"Prev page range\\\" href=\\\"javascript:void(0)\\\"> <span aria-hidden=\\\"true\\\">...</span> </a> </li> <li repeat.for=\\\"page of visiblePageCount\\\" class=\\\"${page + pageRange.start === currentPage ? 'active' : ''}\\\"> <a click.delegate=\\\"goToPage(page + pageRange.start, $event)\\\" href=\\\"javascript:void(0)\\\">${page + pageRange.start}</a> </li> <li show.bind=\\\"pageRange.showNextRange\\\"> <a click.delegate=\\\"nextPageRange()\\\" aria-label=\\\"Next page range\\\" href=\\\"javascript:void(0)\\\"> <span aria-hidden=\\\"true\\\">...</span> </a> </li> <li class.bind=\\\"currentPage === pageCount ? 'disabled': ''\\\"> <a click.delegate=\\\"nextPage()\\\" aria-label=\\\"Next\\\" href=\\\"javascript:void(0)\\\"> <span aria-hidden=\\\"true\\\">›</span> </a> </li> <li class.bind=\\\"currentPage === pageCount ? 'disabled': ''\\\"> <a click.delegate=\\\"lastPage()\\\" aria-label=\\\"Last\\\" href=\\\"javascript:void(0)\\\"> <span aria-hidden=\\\"true\\\">»</span> </a> </li> <li if.bind=\\\"selectablePageSize\\\"> <select select2.bind=\\\"selectConfig\\\" value.bind=\\\"pageSize\\\" class=\\\"form-control\\\"> </select> </li> </ul> </nav> </template> \";\n// Exports\nexport default code;","// Module\nvar code = \"<template> <div class=\\\"${containerName} date-container position-relative date-picker-control\\\" class.bind=\\\"containerClass\\\"> <div class=\\\"date-anchor date-anchor-${uniqueContainerId}\\\" element.ref=\\\"dropdownAnchor\\\" if.bind=\\\"isOverflowedRight\\\"></div> <div class=\\\"input-group date ${ disabled ? 'disabled' : '' } ${ readonly ? 'readonly date-readonly' : '' }\\\" element.ref=\\\"dateContainer\\\"> <input type=\\\"text\\\" class=\\\"form-control\\\" disabled.bind=\\\"disabled\\\" element.ref=\\\"inputElement\\\" readonly.bind=\\\"readonly\\\"> <div class=\\\"input-group-addon input-group-append ${disabled ? '' : 'active'}\\\"> <div class=\\\"btn btn-default\\\"> <span class=\\\"daimler-icon icon-basic-window-application-1\\\"></span> </div> </div> </div> </div> </template> \";\n// Exports\nexport default code;","// Module\nvar code = \"<template> <div class=\\\"${containerName} date-container position-relative date-picker-control\\\" class.bind=\\\"containerClass\\\"> <div class=\\\"date-anchor date-anchor-2-${uniqueContainerId}\\\" element.ref=\\\"dropdownAnchor\\\" if.bind=\\\"isOverflowedRight\\\"></div> <div class=\\\"input-group date ${ disabled ? 'disabled' : '' } ${ readonly ? 'readonly date-readonly' : '' }\\\" element.ref=\\\"dateContainer\\\"> <input type=\\\"text\\\" class=\\\"form-control\\\" disabled.bind=\\\"disabled\\\" element.ref=\\\"inputElement\\\" readonly.bind=\\\"readonly\\\"> <div class=\\\"input-group-addon input-group-append ${disabled ? '' : 'active'}\\\"> <div class=\\\"btn btn-default\\\"> <span class=\\\"daimler-icon icon-basic-window-application-1\\\"></span> </div> </div> </div> </div> </template> \";\n// Exports\nexport default code;","// Module\nvar code = \"<template> <div class=\\\"${containerName} position-relative\\\"> <div class=\\\"date-time-anchor date-time-anchor-${uniqueId}\\\" element.ref=\\\"dropdownAnchor\\\" if.bind=\\\"isOverflowedRight\\\"></div> <div class=\\\"datetime-container\\\"> <div class=\\\"date-container position-relative\\\"> <div class=\\\"input-group date ${ disabled ? 'disabled' : '' }\\\"> <input type=\\\"text\\\" value.bind=\\\"displayedValue\\\" class=\\\"form-control\\\" disabled.bind=\\\"disabled\\\"> <div class=\\\"input-group-append ${disabled ? '' : 'active'}\\\"> <button type=\\\"button\\\" class=\\\"btn btn-default\\\" disabled.bind=\\\"disabled\\\"> <span class=\\\"daimler-icon icon-basic-window-application-1\\\"></span> </button> </div> </div> </div> <div class=\\\"time-container\\\"> <select2 class=\\\"\\\" selected.bind=\\\"displayedTime & validate\\\" disabled.bind=\\\"disabled || !displayedValue || isBusy\\\" default-value.bind=\\\"formatedStartTime\\\" options.bind=\\\"timeRange\\\" warning-target=\\\".time-container\\\"></select2> </div> </div> </div> </template> \";\n// Exports\nexport default code;","// Module\nvar code = \"<template> <div class=\\\"datetime-container\\\"> <div class=\\\"select-container w-100\\\"> <span class=\\\"daimler-icon icon-interaction-arrow-down-12 select-arrow\\\"></span> <select class=\\\"form-control light\\\" id=\\\"dayTimePicker1\\\" value.bind=\\\"day | nullToUndefinedNumber & validate\\\"> <option model.bind=\\\"null\\\">${'Common.Select' | translate}</option> <option repeat.for=\\\"itm of daysOfWeek\\\" model.bind=\\\"itm.id\\\">${itm.name}</option> </select> </div> <div class=\\\"time-container\\\"> <select2 class=\\\"\\\" selected.bind=\\\"displayedTime & validate\\\" disabled.bind=\\\"!day\\\" default-value.bind=\\\"formatedStartTime\\\" options.bind=\\\"timeRange\\\" warning-target=\\\".time-container\\\"></select2> </div> </div> </template> \";\n// Exports\nexport default code;","// Module\nvar code = \"<template> <div class=\\\"datetime-container\\\"> <div class=\\\"time-container\\\"> <select select2 class=\\\"form-control light\\\" value.bind=\\\"displayedHours\\\"> <option repeat.for=\\\"itm of availableHours\\\" model.bind=\\\"itm\\\">${itm}</option> </select> </div> <div class=\\\"time-container\\\"> <select select2 class=\\\"form-control light\\\" value.bind=\\\"displayedMinutes\\\"> <option repeat.for=\\\"itm of availableMinutes\\\" model.bind=\\\"itm\\\">${itm}</option> </select> </div> </div> </template> \";\n// Exports\nexport default code;","// Module\nvar code = \"<template> <ux-dialog class=\\\"confirmation-dialog\\\"> <ux-dialog-header if.bind=\\\"model.confirmationHeader\\\"> <h3 class=\\\"text-left\\\">${model.confirmationHeader | translate}</h3> </ux-dialog-header> <ux-dialog-body> <div class=\\\"page-main-inner-content\\\">${model.confirmationText | translate}</div> </ux-dialog-body> <ux-dialog-footer> <div class=\\\"btn-group\\\"> <button class=\\\"btn btn-primary\\\" click.trigger=\\\"controller.ok()\\\"> <span class=\\\"daimler-icon icon-basic-check-1 yes\\\" show.bind=\\\"!model.confirmButtonText\\\"></span> ${model.confirmButtonText || 'Dialog.Buttons.Ok' | translate} </button> <button class=\\\"btn btn-default\\\" click.trigger=\\\"controller.cancel()\\\"> ${model.cancelButtonText || 'Dialog.Buttons.Cancel' | translate} </button> </div> </ux-dialog-footer> </ux-dialog> </template> \";\n// Exports\nexport default code;","// Module\nvar code = \"<template> <ux-dialog class=\\\"message-dialog\\\"> <ux-dialog-header if.bind=\\\"model.header\\\"> <h3 class=\\\"text-left\\\">${model.header | translate}</h3> </ux-dialog-header> <ux-dialog-body> <div class=\\\"page-main-inner-content\\\" if.bind=\\\"model.messageTextTag\\\">${model.messageTextTag | translate}</div> <div class=\\\"page-main-inner-content\\\" if.bind=\\\"model.messageText\\\">${model.messageText}</div> <div class=\\\"page-main-inner-content\\\" if.bind=\\\"model.messageHtml\\\" innerhtml.bind=\\\"model.messageHtml\\\"></div> </ux-dialog-body> <ux-dialog-footer> <a repeat.for=\\\"button of model.buttons\\\" class=\\\"btn ${button.cssClass || 'btn-default'}\\\" click.trigger=\\\"controller.ok(button.result)\\\">${button.text | translate}</a> </ux-dialog-footer> </ux-dialog> </template> \";\n// Exports\nexport default code;","// Module\nvar code = \"<template> </template> \";\n// Exports\nexport default code;","// Module\nvar code = \"<template bindable=\\\"errors, autofocus\\\"> <div class=\\\"alert alert-danger\\\" tabindex=\\\"-1\\\" if.bind=\\\"errors.length > 0\\\" focus.one-way=\\\"autofocus && errors.length > 0\\\"> <ul class=\\\"list-unstyled\\\"> <li repeat.for=\\\"errorInfo of errors\\\"> <a class=\\\"text-danger\\\" href=\\\"javascript:void(0)\\\" if.bind=\\\"errorInfo.targets && errorInfo.targets.length > 0\\\" click.delegate=\\\"errorInfo.targets[0].focus()\\\"> ${errorInfo.error.message} </a> <span else innerhtml.bind=\\\"errorInfo.error.message || errorInfo.message\\\"> </span> </li> </ul> </div> </template>\";\n// Exports\nexport default code;","if (typeof Object.create === 'function') {\n  // implementation from standard node.js 'util' module\n  module.exports = function inherits(ctor, superCtor) {\n    if (superCtor) {\n      ctor.super_ = superCtor\n      ctor.prototype = Object.create(superCtor.prototype, {\n        constructor: {\n          value: ctor,\n          enumerable: false,\n          writable: true,\n          configurable: true\n        }\n      })\n    }\n  };\n} else {\n  // old school shim for old browsers\n  module.exports = function inherits(ctor, superCtor) {\n    if (superCtor) {\n      ctor.super_ = superCtor\n      var TempCtor = function () {}\n      TempCtor.prototype = superCtor.prototype\n      ctor.prototype = new TempCtor()\n      ctor.prototype.constructor = ctor\n    }\n  }\n}\n","'use strict';\n\nvar hasToStringTag = require('has-tostringtag/shams')();\nvar callBound = require('call-bind/callBound');\n\nvar $toString = callBound('Object.prototype.toString');\n\nvar isStandardArguments = function isArguments(value) {\n\tif (hasToStringTag && value && typeof value === 'object' && Symbol.toStringTag in value) {\n\t\treturn false;\n\t}\n\treturn $toString(value) === '[object Arguments]';\n};\n\nvar isLegacyArguments = function isArguments(value) {\n\tif (isStandardArguments(value)) {\n\t\treturn true;\n\t}\n\treturn value !== null &&\n\t\ttypeof value === 'object' &&\n\t\ttypeof value.length === 'number' &&\n\t\tvalue.length >= 0 &&\n\t\t$toString(value) !== '[object Array]' &&\n\t\t$toString(value.callee) === '[object Function]';\n};\n\nvar supportsStandardArguments = (function () {\n\treturn isStandardArguments(arguments);\n}());\n\nisStandardArguments.isLegacyArguments = isLegacyArguments; // for tests\n\nmodule.exports = supportsStandardArguments ? isStandardArguments : isLegacyArguments;\n","'use strict';\n\nvar fnToStr = Function.prototype.toString;\nvar reflectApply = typeof Reflect === 'object' && Reflect !== null && Reflect.apply;\nvar badArrayLike;\nvar isCallableMarker;\nif (typeof reflectApply === 'function' && typeof Object.defineProperty === 'function') {\n\ttry {\n\t\tbadArrayLike = Object.defineProperty({}, 'length', {\n\t\t\tget: function () {\n\t\t\t\tthrow isCallableMarker;\n\t\t\t}\n\t\t});\n\t\tisCallableMarker = {};\n\t\t// eslint-disable-next-line no-throw-literal\n\t\treflectApply(function () { throw 42; }, null, badArrayLike);\n\t} catch (_) {\n\t\tif (_ !== isCallableMarker) {\n\t\t\treflectApply = null;\n\t\t}\n\t}\n} else {\n\treflectApply = null;\n}\n\nvar constructorRegex = /^\\s*class\\b/;\nvar isES6ClassFn = function isES6ClassFunction(value) {\n\ttry {\n\t\tvar fnStr = fnToStr.call(value);\n\t\treturn constructorRegex.test(fnStr);\n\t} catch (e) {\n\t\treturn false; // not a function\n\t}\n};\n\nvar tryFunctionObject = function tryFunctionToStr(value) {\n\ttry {\n\t\tif (isES6ClassFn(value)) { return false; }\n\t\tfnToStr.call(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\nvar toStr = Object.prototype.toString;\nvar objectClass = '[object Object]';\nvar fnClass = '[object Function]';\nvar genClass = '[object GeneratorFunction]';\nvar ddaClass = '[object HTMLAllCollection]'; // IE 11\nvar ddaClass2 = '[object HTML document.all class]';\nvar ddaClass3 = '[object HTMLCollection]'; // IE 9-10\nvar hasToStringTag = typeof Symbol === 'function' && !!Symbol.toStringTag; // better: use `has-tostringtag`\n\nvar isIE68 = !(0 in [,]); // eslint-disable-line no-sparse-arrays, comma-spacing\n\nvar isDDA = function isDocumentDotAll() { return false; };\nif (typeof document === 'object') {\n\t// Firefox 3 canonicalizes DDA to undefined when it's not accessed directly\n\tvar all = document.all;\n\tif (toStr.call(all) === toStr.call(document.all)) {\n\t\tisDDA = function isDocumentDotAll(value) {\n\t\t\t/* globals document: false */\n\t\t\t// in IE 6-8, typeof document.all is \"object\" and it's truthy\n\t\t\tif ((isIE68 || !value) && (typeof value === 'undefined' || typeof value === 'object')) {\n\t\t\t\ttry {\n\t\t\t\t\tvar str = toStr.call(value);\n\t\t\t\t\treturn (\n\t\t\t\t\t\tstr === ddaClass\n\t\t\t\t\t\t|| str === ddaClass2\n\t\t\t\t\t\t|| str === ddaClass3 // opera 12.16\n\t\t\t\t\t\t|| str === objectClass // IE 6-8\n\t\t\t\t\t) && value('') == null; // eslint-disable-line eqeqeq\n\t\t\t\t} catch (e) { /**/ }\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\t}\n}\n\nmodule.exports = reflectApply\n\t? function isCallable(value) {\n\t\tif (isDDA(value)) { return true; }\n\t\tif (!value) { return false; }\n\t\tif (typeof value !== 'function' && typeof value !== 'object') { return false; }\n\t\ttry {\n\t\t\treflectApply(value, null, badArrayLike);\n\t\t} catch (e) {\n\t\t\tif (e !== isCallableMarker) { return false; }\n\t\t}\n\t\treturn !isES6ClassFn(value) && tryFunctionObject(value);\n\t}\n\t: function isCallable(value) {\n\t\tif (isDDA(value)) { return true; }\n\t\tif (!value) { return false; }\n\t\tif (typeof value !== 'function' && typeof value !== 'object') { return false; }\n\t\tif (hasToStringTag) { return tryFunctionObject(value); }\n\t\tif (isES6ClassFn(value)) { return false; }\n\t\tvar strClass = toStr.call(value);\n\t\tif (strClass !== fnClass && strClass !== genClass && !(/^\\[object HTML/).test(strClass)) { return false; }\n\t\treturn tryFunctionObject(value);\n\t};\n","'use strict';\n\nvar toStr = Object.prototype.toString;\nvar fnToStr = Function.prototype.toString;\nvar isFnRegex = /^\\s*(?:function)?\\*/;\nvar hasToStringTag = require('has-tostringtag/shams')();\nvar getProto = Object.getPrototypeOf;\nvar getGeneratorFunc = function () { // eslint-disable-line consistent-return\n\tif (!hasToStringTag) {\n\t\treturn false;\n\t}\n\ttry {\n\t\treturn Function('return function*() {}')();\n\t} catch (e) {\n\t}\n};\nvar GeneratorFunction;\n\nmodule.exports = function isGeneratorFunction(fn) {\n\tif (typeof fn !== 'function') {\n\t\treturn false;\n\t}\n\tif (isFnRegex.test(fnToStr.call(fn))) {\n\t\treturn true;\n\t}\n\tif (!hasToStringTag) {\n\t\tvar str = toStr.call(fn);\n\t\treturn str === '[object GeneratorFunction]';\n\t}\n\tif (!getProto) {\n\t\treturn false;\n\t}\n\tif (typeof GeneratorFunction === 'undefined') {\n\t\tvar generatorFunc = getGeneratorFunc();\n\t\tGeneratorFunction = generatorFunc ? getProto(generatorFunc) : false;\n\t}\n\treturn getProto(fn) === GeneratorFunction;\n};\n","'use strict';\n\nvar forEach = require('for-each');\nvar availableTypedArrays = require('available-typed-arrays');\nvar callBound = require('call-bind/callBound');\n\nvar $toString = callBound('Object.prototype.toString');\nvar hasToStringTag = require('has-tostringtag/shams')();\nvar gOPD = require('gopd');\n\nvar g = typeof globalThis === 'undefined' ? global : globalThis;\nvar typedArrays = availableTypedArrays();\n\nvar $indexOf = callBound('Array.prototype.indexOf', true) || function indexOf(array, value) {\n\tfor (var i = 0; i < array.length; i += 1) {\n\t\tif (array[i] === value) {\n\t\t\treturn i;\n\t\t}\n\t}\n\treturn -1;\n};\nvar $slice = callBound('String.prototype.slice');\nvar toStrTags = {};\nvar getPrototypeOf = Object.getPrototypeOf; // require('getprototypeof');\nif (hasToStringTag && gOPD && getPrototypeOf) {\n\tforEach(typedArrays, function (typedArray) {\n\t\tvar arr = new g[typedArray]();\n\t\tif (Symbol.toStringTag in arr) {\n\t\t\tvar proto = getPrototypeOf(arr);\n\t\t\tvar descriptor = gOPD(proto, Symbol.toStringTag);\n\t\t\tif (!descriptor) {\n\t\t\t\tvar superProto = getPrototypeOf(proto);\n\t\t\t\tdescriptor = gOPD(superProto, Symbol.toStringTag);\n\t\t\t}\n\t\t\ttoStrTags[typedArray] = descriptor.get;\n\t\t}\n\t});\n}\n\nvar tryTypedArrays = function tryAllTypedArrays(value) {\n\tvar anyTrue = false;\n\tforEach(toStrTags, function (getter, typedArray) {\n\t\tif (!anyTrue) {\n\t\t\ttry {\n\t\t\t\tanyTrue = getter.call(value) === typedArray;\n\t\t\t} catch (e) { /**/ }\n\t\t}\n\t});\n\treturn anyTrue;\n};\n\nmodule.exports = function isTypedArray(value) {\n\tif (!value || typeof value !== 'object') { return false; }\n\tif (!hasToStringTag || !(Symbol.toStringTag in value)) {\n\t\tvar tag = $slice($toString(value), 8, -1);\n\t\treturn $indexOf(typedArrays, tag) > -1;\n\t}\n\tif (!gOPD) { return false; }\n\treturn tryTypedArrays(value);\n};\n","/*!\n * jQuery JavaScript Library v3.6.1\n * https://jquery.com/\n *\n * Includes Sizzle.js\n * https://sizzlejs.com/\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2022-08-26T17:52Z\n */\n( function( global, factory ) {\n\n\t\"use strict\";\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket trac-14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory( global, true ) :\n\t\t\tfunction( w ) {\n\t\t\t\tif ( !w.document ) {\n\t\t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\n\t\t\t\t}\n\t\t\t\treturn factory( w );\n\t\t\t};\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n} )( typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1\n// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode\n// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common\n// enough that all such attempts are guarded in a try block.\n\"use strict\";\n\nvar arr = [];\n\nvar getProto = Object.getPrototypeOf;\n\nvar slice = arr.slice;\n\nvar flat = arr.flat ? function( array ) {\n\treturn arr.flat.call( array );\n} : function( array ) {\n\treturn arr.concat.apply( [], array );\n};\n\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar fnToString = hasOwn.toString;\n\nvar ObjectFunctionString = fnToString.call( Object );\n\nvar support = {};\n\nvar isFunction = function isFunction( obj ) {\n\n\t\t// Support: Chrome <=57, Firefox <=52\n\t\t// In some browsers, typeof returns \"function\" for HTML <object> elements\n\t\t// (i.e., `typeof document.createElement( \"object\" ) === \"function\"`).\n\t\t// We don't want to classify *any* DOM node as a function.\n\t\t// Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5\n\t\t// Plus for old WebKit, typeof returns \"function\" for HTML collections\n\t\t// (e.g., `typeof document.getElementsByTagName(\"div\") === \"function\"`). (gh-4756)\n\t\treturn typeof obj === \"function\" && typeof obj.nodeType !== \"number\" &&\n\t\t\ttypeof obj.item !== \"function\";\n\t};\n\n\nvar isWindow = function isWindow( obj ) {\n\t\treturn obj != null && obj === obj.window;\n\t};\n\n\nvar document = window.document;\n\n\n\n\tvar preservedScriptAttributes = {\n\t\ttype: true,\n\t\tsrc: true,\n\t\tnonce: true,\n\t\tnoModule: true\n\t};\n\n\tfunction DOMEval( code, node, doc ) {\n\t\tdoc = doc || document;\n\n\t\tvar i, val,\n\t\t\tscript = doc.createElement( \"script\" );\n\n\t\tscript.text = code;\n\t\tif ( node ) {\n\t\t\tfor ( i in preservedScriptAttributes ) {\n\n\t\t\t\t// Support: Firefox 64+, Edge 18+\n\t\t\t\t// Some browsers don't support the \"nonce\" property on scripts.\n\t\t\t\t// On the other hand, just using `getAttribute` is not enough as\n\t\t\t\t// the `nonce` attribute is reset to an empty string whenever it\n\t\t\t\t// becomes browsing-context connected.\n\t\t\t\t// See https://github.com/whatwg/html/issues/2369\n\t\t\t\t// See https://html.spec.whatwg.org/#nonce-attributes\n\t\t\t\t// The `node.getAttribute` check was added for the sake of\n\t\t\t\t// `jQuery.globalEval` so that it can fake a nonce-containing node\n\t\t\t\t// via an object.\n\t\t\t\tval = node[ i ] || node.getAttribute && node.getAttribute( i );\n\t\t\t\tif ( val ) {\n\t\t\t\t\tscript.setAttribute( i, val );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdoc.head.appendChild( script ).parentNode.removeChild( script );\n\t}\n\n\nfunction toType( obj ) {\n\tif ( obj == null ) {\n\t\treturn obj + \"\";\n\t}\n\n\t// Support: Android <=2.3 only (functionish RegExp)\n\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\ttypeof obj;\n}\n/* global Symbol */\n// Defining this global in .eslintrc.json would create a danger of using the global\n// unguarded in another place, it seems safer to define global only for this module\n\n\n\nvar\n\tversion = \"3.6.1\",\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t};\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\n\t\t// Return all the elements in a clean array\n\t\tif ( num == null ) {\n\t\t\treturn slice.call( this );\n\t\t}\n\n\t\t// Return just the one element from the set\n\t\treturn num < 0 ? this[ num + this.length ] : this[ num ];\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teven: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn ( i + 1 ) % 2;\n\t\t} ) );\n\t},\n\n\todd: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn i % 2;\n\t\t} ) );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: push,\n\tsort: arr.sort,\n\tsplice: arr.splice\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !isFunction( target ) ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent Object.prototype pollution\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( name === \"__proto__\" || target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = Array.isArray( copy ) ) ) ) {\n\t\t\t\t\tsrc = target[ name ];\n\n\t\t\t\t\t// Ensure proper type for the source value\n\t\t\t\t\tif ( copyIsArray && !Array.isArray( src ) ) {\n\t\t\t\t\t\tclone = [];\n\t\t\t\t\t} else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) {\n\t\t\t\t\t\tclone = {};\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src;\n\t\t\t\t\t}\n\t\t\t\t\tcopyIsArray = false;\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisPlainObject: function( obj ) {\n\t\tvar proto, Ctor;\n\n\t\t// Detect obvious negatives\n\t\t// Use toString instead of jQuery.type to catch host objects\n\t\tif ( !obj || toString.call( obj ) !== \"[object Object]\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tproto = getProto( obj );\n\n\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\tif ( !proto ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\tCtor = hasOwn.call( proto, \"constructor\" ) && proto.constructor;\n\t\treturn typeof Ctor === \"function\" && fnToString.call( Ctor ) === ObjectFunctionString;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\t// Evaluates a script in a provided context; falls back to the global one\n\t// if not specified.\n\tglobalEval: function( code, options, doc ) {\n\t\tDOMEval( code, { nonce: options && options.nonce }, doc );\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t// push.apply(_, arraylike) throws on ancient WebKit\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn flat( ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\n\tfunction( _i, name ) {\n\t\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n\t} );\n\nfunction isArrayLike( obj ) {\n\n\t// Support: real iOS 8.2 only (not reproducible in simulator)\n\t// `in` check used to prevent JIT error (gh-2145)\n\t// hasOwn isn't used here due to false negatives\n\t// regarding Nodelist length in IE\n\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\ttype = toType( obj );\n\n\tif ( isFunction( obj ) || isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\nvar Sizzle =\n/*!\n * Sizzle CSS Selector Engine v2.3.6\n * https://sizzlejs.com/\n *\n * Copyright JS Foundation and other contributors\n * Released under the MIT license\n * https://js.foundation/\n *\n * Date: 2021-02-16\n */\n( function( window ) {\nvar i,\n\tsupport,\n\tExpr,\n\tgetText,\n\tisXML,\n\ttokenize,\n\tcompile,\n\tselect,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\n\t// Local document vars\n\tsetDocument,\n\tdocument,\n\tdocElem,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\trbuggyMatches,\n\tmatches,\n\tcontains,\n\n\t// Instance-specific data\n\texpando = \"sizzle\" + 1 * new Date(),\n\tpreferredDoc = window.document,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\tnonnativeSelectorCache = createCache(),\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t}\n\t\treturn 0;\n\t},\n\n\t// Instance methods\n\thasOwn = ( {} ).hasOwnProperty,\n\tarr = [],\n\tpop = arr.pop,\n\tpushNative = arr.push,\n\tpush = arr.push,\n\tslice = arr.slice,\n\n\t// Use a stripped-down indexOf as it's faster than native\n\t// https://jsperf.com/thor-indexof-vs-for/5\n\tindexOf = function( list, elem ) {\n\t\tvar i = 0,\n\t\t\tlen = list.length;\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tif ( list[ i ] === elem ) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|\" +\n\t\t\"ismap|loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// http://www.w3.org/TR/css3-selectors/#whitespace\n\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n\n\t// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram\n\tidentifier = \"(?:\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\t\"?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+\",\n\n\t// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\n\t\t// Operator (capture 2)\n\t\t\"*([*^$|!~]?=)\" + whitespace +\n\n\t\t// \"Attribute values must be CSS identifiers [capture 5]\n\t\t// or strings [capture 3 or capture 4]\"\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" +\n\t\twhitespace + \"*\\\\]\",\n\n\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\n\t\t// 2. simple (capture 6)\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\n\t\t// 3. anything else (capture 2)\n\t\t\".*\" +\n\t\t\")\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" +\n\t\twhitespace + \"+$\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace +\n\t\t\"*\" ),\n\trdescend = new RegExp( whitespace + \"|>\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\t\"ID\": new RegExp( \"^#(\" + identifier + \")\" ),\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\t\t\"TAG\": new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\n\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\n\t\t\"CHILD\": new RegExp( \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" +\n\t\t\twhitespace + \"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" +\n\t\t\twhitespace + \"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\t\"bool\": new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\t\"needsContext\": new RegExp( \"^\" + whitespace +\n\t\t\t\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" + whitespace +\n\t\t\t\"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trhtml = /HTML$/i,\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\trnative = /^[^{]+\\{\\s*\\[native \\w/,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trsibling = /[+~]/,\n\n\t// CSS escapes\n\t// http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace + \"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\", \"g\" ),\n\tfunescape = function( escape, nonHex ) {\n\t\tvar high = \"0x\" + escape.slice( 1 ) - 0x10000;\n\n\t\treturn nonHex ?\n\n\t\t\t// Strip the backslash prefix from a non-hex escape sequence\n\t\t\tnonHex :\n\n\t\t\t// Replace a hexadecimal escape sequence with the encoded Unicode code point\n\t\t\t// Support: IE <=11+\n\t\t\t// For values outside the Basic Multilingual Plane (BMP), manually construct a\n\t\t\t// surrogate pair\n\t\t\thigh < 0 ?\n\t\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t},\n\n\t// CSS string/identifier serialization\n\t// https://drafts.csswg.org/cssom/#common-serializing-idioms\n\trcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,\n\tfcssescape = function( ch, asCodePoint ) {\n\t\tif ( asCodePoint ) {\n\n\t\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\t\tif ( ch === \"\\0\" ) {\n\t\t\t\treturn \"\\uFFFD\";\n\t\t\t}\n\n\t\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\t\treturn ch.slice( 0, -1 ) + \"\\\\\" +\n\t\t\t\tch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\n\t\t}\n\n\t\t// Other potentially-special ASCII characters get backslash-escaped\n\t\treturn \"\\\\\" + ch;\n\t},\n\n\t// Used for iframes\n\t// See setDocument()\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t},\n\n\tinDisabledFieldset = addCombinator(\n\t\tfunction( elem ) {\n\t\t\treturn elem.disabled === true && elem.nodeName.toLowerCase() === \"fieldset\";\n\t\t},\n\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t);\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t( arr = slice.call( preferredDoc.childNodes ) ),\n\t\tpreferredDoc.childNodes\n\t);\n\n\t// Support: Android<4.0\n\t// Detect silently failing push.apply\n\t// eslint-disable-next-line no-unused-expressions\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = { apply: arr.length ?\n\n\t\t// Leverage slice if possible\n\t\tfunction( target, els ) {\n\t\t\tpushNative.apply( target, slice.call( els ) );\n\t\t} :\n\n\t\t// Support: IE<9\n\t\t// Otherwise append directly\n\t\tfunction( target, els ) {\n\t\t\tvar j = target.length,\n\t\t\t\ti = 0;\n\n\t\t\t// Can't trust NodeList.length\n\t\t\twhile ( ( target[ j++ ] = els[ i++ ] ) ) {}\n\t\t\ttarget.length = j - 1;\n\t\t}\n\t};\n}\n\nfunction Sizzle( selector, context, results, seed ) {\n\tvar m, i, elem, nid, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\t\tsetDocument( context );\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( ( m = match[ 1 ] ) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( ( elem = context.getElementById( m ) ) ) {\n\n\t\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\tif ( newContext && ( elem = newContext.getElementById( m ) ) &&\n\t\t\t\t\t\t\tcontains( context, elem ) &&\n\t\t\t\t\t\t\telem.id === m ) {\n\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[ 2 ] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( ( m = match[ 3 ] ) && support.getElementsByClassName &&\n\t\t\t\t\tcontext.getElementsByClassName ) {\n\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( support.qsa &&\n\t\t\t\t!nonnativeSelectorCache[ selector + \" \" ] &&\n\t\t\t\t( !rbuggyQSA || !rbuggyQSA.test( selector ) ) &&\n\n\t\t\t\t// Support: IE 8 only\n\t\t\t\t// Exclude object elements\n\t\t\t\t( nodeType !== 1 || context.nodeName.toLowerCase() !== \"object\" ) ) {\n\n\t\t\t\tnewSelector = selector;\n\t\t\t\tnewContext = context;\n\n\t\t\t\t// qSA considers elements outside a scoping root when evaluating child or\n\t\t\t\t// descendant combinators, which is not what we want.\n\t\t\t\t// In such cases, we work around the behavior by prefixing every selector in the\n\t\t\t\t// list with an ID selector referencing the scope context.\n\t\t\t\t// The technique has to be used as well when a leading combinator is used\n\t\t\t\t// as such selectors are not recognized by querySelectorAll.\n\t\t\t\t// Thanks to Andrew Dupont for this technique.\n\t\t\t\tif ( nodeType === 1 &&\n\t\t\t\t\t( rdescend.test( selector ) || rcombinators.test( selector ) ) ) {\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\n\t\t\t\t\t// We can use :scope instead of the ID hack if the browser\n\t\t\t\t\t// supports it & if we're not changing the context.\n\t\t\t\t\tif ( newContext !== context || !support.scope ) {\n\n\t\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\t\tif ( ( nid = context.getAttribute( \"id\" ) ) ) {\n\t\t\t\t\t\t\tnid = nid.replace( rcssescape, fcssescape );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcontext.setAttribute( \"id\", ( nid = expando ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[ i ] = ( nid ? \"#\" + nid : \":scope\" ) + \" \" +\n\t\t\t\t\t\t\ttoSelector( groups[ i ] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t);\n\t\t\t\t\treturn results;\n\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\tnonnativeSelectorCache( selector, true );\n\t\t\t\t} finally {\n\t\t\t\t\tif ( nid === expando ) {\n\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrim, \"$1\" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\n\t\t// Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\n\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn ( cache[ key + \" \" ] = value );\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by Sizzle\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created element and returns a boolean result\n */\nfunction assert( fn ) {\n\tvar el = document.createElement( \"fieldset\" );\n\n\ttry {\n\t\treturn !!fn( el );\n\t} catch ( e ) {\n\t\treturn false;\n\t} finally {\n\n\t\t// Remove from its parent by default\n\t\tif ( el.parentNode ) {\n\t\t\tel.parentNode.removeChild( el );\n\t\t}\n\n\t\t// release memory in IE\n\t\tel = null;\n\t}\n}\n\n/**\n * Adds the same handler for all of the specified attrs\n * @param {String} attrs Pipe-separated list of attributes\n * @param {Function} handler The method that will be applied\n */\nfunction addHandle( attrs, handler ) {\n\tvar arr = attrs.split( \"|\" ),\n\t\ti = arr.length;\n\n\twhile ( i-- ) {\n\t\tExpr.attrHandle[ arr[ i ] ] = handler;\n\t}\n}\n\n/**\n * Checks document order of two siblings\n * @param {Element} a\n * @param {Element} b\n * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\n */\nfunction siblingCheck( a, b ) {\n\tvar cur = b && a,\n\t\tdiff = cur && a.nodeType === 1 && b.nodeType === 1 &&\n\t\t\ta.sourceIndex - b.sourceIndex;\n\n\t// Use IE sourceIndex if available on both nodes\n\tif ( diff ) {\n\t\treturn diff;\n\t}\n\n\t// Check if b follows a\n\tif ( cur ) {\n\t\twhile ( ( cur = cur.nextSibling ) ) {\n\t\t\tif ( cur === b ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn a ? 1 : -1;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn name === \"input\" && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn ( name === \"input\" || name === \"button\" ) && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for :enabled/:disabled\n * @param {Boolean} disabled true for :disabled; false for :enabled\n */\nfunction createDisabledPseudo( disabled ) {\n\n\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\treturn function( elem ) {\n\n\t\t// Only certain elements can match :enabled or :disabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\tif ( \"form\" in elem ) {\n\n\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t// * option elements in a disabled optgroup\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t// All such elements have a \"form\" property.\n\t\t\tif ( elem.parentNode && elem.disabled === false ) {\n\n\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\tif ( \"label\" in elem ) {\n\t\t\t\t\tif ( \"label\" in elem.parentNode ) {\n\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 6 - 11\n\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\t/* jshint -W018 */\n\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\tinDisabledFieldset( elem ) === disabled;\n\t\t\t}\n\n\t\t\treturn elem.disabled === disabled;\n\n\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t// even exist on them, let alone have a boolean value.\n\t\t} else if ( \"label\" in elem ) {\n\t\t\treturn elem.disabled === disabled;\n\t\t}\n\n\t\t// Remaining elements are neither :enabled nor :disabled\n\t\treturn false;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction( function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction( function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ ( j = matchIndexes[ i ] ) ] ) {\n\t\t\t\t\tseed[ j ] = !( matches[ j ] = seed[ j ] );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t} );\n}\n\n/**\n * Checks a node for validity as a Sizzle context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n// Expose support vars for convenience\nsupport = Sizzle.support = {};\n\n/**\n * Detects XML nodes\n * @param {Element|Object} elem An element or a document\n * @returns {Boolean} True iff elem is a non-HTML XML node\n */\nisXML = Sizzle.isXML = function( elem ) {\n\tvar namespace = elem && elem.namespaceURI,\n\t\tdocElem = elem && ( elem.ownerDocument || elem ).documentElement;\n\n\t// Support: IE <=8\n\t// Assume HTML when documentElement doesn't yet exist, such as inside loading iframes\n\t// https://bugs.jquery.com/ticket/4833\n\treturn !rhtml.test( namespace || docElem && docElem.nodeName || \"HTML\" );\n};\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [doc] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nsetDocument = Sizzle.setDocument = function( node ) {\n\tvar hasCompare, subWindow,\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t// Return early if doc is invalid or already selected\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocElem = document.documentElement;\n\tdocumentIsHTML = !isXML( document );\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (jQuery #13936)\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( preferredDoc != document &&\n\t\t( subWindow = document.defaultView ) && subWindow.top !== subWindow ) {\n\n\t\t// Support: IE 11, Edge\n\t\tif ( subWindow.addEventListener ) {\n\t\t\tsubWindow.addEventListener( \"unload\", unloadHandler, false );\n\n\t\t// Support: IE 9 - 10 only\n\t\t} else if ( subWindow.attachEvent ) {\n\t\t\tsubWindow.attachEvent( \"onunload\", unloadHandler );\n\t\t}\n\t}\n\n\t// Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only,\n\t// Safari 4 - 5 only, Opera <=11.6 - 12.x only\n\t// IE/Edge & older browsers don't support the :scope pseudo-class.\n\t// Support: Safari 6.0 only\n\t// Safari 6.0 supports :scope but it's an alias of :root there.\n\tsupport.scope = assert( function( el ) {\n\t\tdocElem.appendChild( el ).appendChild( document.createElement( \"div\" ) );\n\t\treturn typeof el.querySelectorAll !== \"undefined\" &&\n\t\t\t!el.querySelectorAll( \":scope fieldset div\" ).length;\n\t} );\n\n\t/* Attributes\n\t---------------------------------------------------------------------- */\n\n\t// Support: IE<8\n\t// Verify that getAttribute really returns attributes and not properties\n\t// (excepting IE8 booleans)\n\tsupport.attributes = assert( function( el ) {\n\t\tel.className = \"i\";\n\t\treturn !el.getAttribute( \"className\" );\n\t} );\n\n\t/* getElement(s)By*\n\t---------------------------------------------------------------------- */\n\n\t// Check if getElementsByTagName(\"*\") returns only elements\n\tsupport.getElementsByTagName = assert( function( el ) {\n\t\tel.appendChild( document.createComment( \"\" ) );\n\t\treturn !el.getElementsByTagName( \"*\" ).length;\n\t} );\n\n\t// Support: IE<9\n\tsupport.getElementsByClassName = rnative.test( document.getElementsByClassName );\n\n\t// Support: IE<10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don't pick up programmatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert( function( el ) {\n\t\tdocElem.appendChild( el ).id = expando;\n\t\treturn !document.getElementsByName || !document.getElementsByName( expando ).length;\n\t} );\n\n\t// ID filter and find\n\tif ( support.getById ) {\n\t\tExpr.filter[ \"ID\" ] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute( \"id\" ) === attrId;\n\t\t\t};\n\t\t};\n\t\tExpr.find[ \"ID\" ] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar elem = context.getElementById( id );\n\t\t\t\treturn elem ? [ elem ] : [];\n\t\t\t}\n\t\t};\n\t} else {\n\t\tExpr.filter[ \"ID\" ] =  function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\telem.getAttributeNode( \"id\" );\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\n\t\t// Support: IE 6 - 7 only\n\t\t// getElementById is not reliable as a find shortcut\n\t\tExpr.find[ \"ID\" ] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar node, i, elems,\n\t\t\t\t\telem = context.getElementById( id );\n\n\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t// Verify the id attribute\n\t\t\t\t\tnode = elem.getAttributeNode( \"id\" );\n\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t}\n\n\t\t\t\t\t// Fall back on getElementsByName\n\t\t\t\t\telems = context.getElementsByName( id );\n\t\t\t\t\ti = 0;\n\t\t\t\t\twhile ( ( elem = elems[ i++ ] ) ) {\n\t\t\t\t\t\tnode = elem.getAttributeNode( \"id\" );\n\t\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn [];\n\t\t\t}\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find[ \"TAG\" ] = support.getElementsByTagName ?\n\t\tfunction( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else if ( support.qsa ) {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t} :\n\n\t\tfunction( tag, context ) {\n\t\t\tvar elem,\n\t\t\t\ttmp = [],\n\t\t\t\ti = 0,\n\n\t\t\t\t// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too\n\t\t\t\tresults = context.getElementsByTagName( tag );\n\n\t\t\t// Filter out possible comments\n\t\t\tif ( tag === \"*\" ) {\n\t\t\t\twhile ( ( elem = results[ i++ ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\ttmp.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn tmp;\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\n\t// Class\n\tExpr.find[ \"CLASS\" ] = support.getElementsByClassName && function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\trbuggyMatches = [];\n\n\t// qSa(:focus) reports false when true (Chrome 21)\n\t// We allow this because of a bug in IE8/9 that throws an error\n\t// whenever `document.activeElement` is accessed on an iframe\n\t// So, we allow :focus to pass through QSA all the time to avoid the IE error\n\t// See https://bugs.jquery.com/ticket/13378\n\trbuggyQSA = [];\n\n\tif ( ( support.qsa = rnative.test( document.querySelectorAll ) ) ) {\n\n\t\t// Build QSA regex\n\t\t// Regex strategy adopted from Diego Perini\n\t\tassert( function( el ) {\n\n\t\t\tvar input;\n\n\t\t\t// Select is set to empty string on purpose\n\t\t\t// This is to test IE's treatment of not explicitly\n\t\t\t// setting a boolean content attribute,\n\t\t\t// since its presence should be enough\n\t\t\t// https://bugs.jquery.com/ticket/12359\n\t\t\tdocElem.appendChild( el ).innerHTML = \"<a id='\" + expando + \"'></a>\" +\n\t\t\t\t\"<select id='\" + expando + \"-\\r\\\\' msallowcapture=''>\" +\n\t\t\t\t\"<option selected=''></option></select>\";\n\n\t\t\t// Support: IE8, Opera 11-12.16\n\t\t\t// Nothing should be selected when empty strings follow ^= or $= or *=\n\t\t\t// The test attribute must be unknown in Opera but \"safe\" for WinRT\n\t\t\t// https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\n\t\t\tif ( el.querySelectorAll( \"[msallowcapture^='']\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Support: IE8\n\t\t\t// Boolean attributes and \"value\" are not treated correctly\n\t\t\tif ( !el.querySelectorAll( \"[selected]\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t\t}\n\n\t\t\t// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+\n\t\t\tif ( !el.querySelectorAll( \"[id~=\" + expando + \"-]\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"~=\" );\n\t\t\t}\n\n\t\t\t// Support: IE 11+, Edge 15 - 18+\n\t\t\t// IE 11/Edge don't find elements on a `[name='']` query in some cases.\n\t\t\t// Adding a temporary attribute to the document before the selection works\n\t\t\t// around the issue.\n\t\t\t// Interestingly, IE 10 & older don't seem to have the issue.\n\t\t\tinput = document.createElement( \"input\" );\n\t\t\tinput.setAttribute( \"name\", \"\" );\n\t\t\tel.appendChild( input );\n\t\t\tif ( !el.querySelectorAll( \"[name='']\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*name\" + whitespace + \"*=\" +\n\t\t\t\t\twhitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Webkit/Opera - :checked should return selected option elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !el.querySelectorAll( \":checked\" ).length ) {\n\t\t\t\trbuggyQSA.push( \":checked\" );\n\t\t\t}\n\n\t\t\t// Support: Safari 8+, iOS 8+\n\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t// In-page `selector#id sibling-combinator selector` fails\n\t\t\tif ( !el.querySelectorAll( \"a#\" + expando + \"+*\" ).length ) {\n\t\t\t\trbuggyQSA.push( \".#.+[+~]\" );\n\t\t\t}\n\n\t\t\t// Support: Firefox <=3.6 - 5 only\n\t\t\t// Old Firefox doesn't throw on a badly-escaped identifier.\n\t\t\tel.querySelectorAll( \"\\\\\\f\" );\n\t\t\trbuggyQSA.push( \"[\\\\r\\\\n\\\\f]\" );\n\t\t} );\n\n\t\tassert( function( el ) {\n\t\t\tel.innerHTML = \"<a href='' disabled='disabled'></a>\" +\n\t\t\t\t\"<select disabled='disabled'><option/></select>\";\n\n\t\t\t// Support: Windows 8 Native Apps\n\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\tvar input = document.createElement( \"input\" );\n\t\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\t\tel.appendChild( input ).setAttribute( \"name\", \"D\" );\n\n\t\t\t// Support: IE8\n\t\t\t// Enforce case-sensitivity of name attribute\n\t\t\tif ( el.querySelectorAll( \"[name=d]\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"name\" + whitespace + \"*[*^$|!~]?=\" );\n\t\t\t}\n\n\t\t\t// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( el.querySelectorAll( \":enabled\" ).length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Support: IE9-11+\n\t\t\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\t\tdocElem.appendChild( el ).disabled = true;\n\t\t\tif ( el.querySelectorAll( \":disabled\" ).length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Support: Opera 10 - 11 only\n\t\t\t// Opera 10-11 does not throw on post-comma invalid pseudos\n\t\t\tel.querySelectorAll( \"*,:x\" );\n\t\t\trbuggyQSA.push( \",.*:\" );\n\t\t} );\n\t}\n\n\tif ( ( support.matchesSelector = rnative.test( ( matches = docElem.matches ||\n\t\tdocElem.webkitMatchesSelector ||\n\t\tdocElem.mozMatchesSelector ||\n\t\tdocElem.oMatchesSelector ||\n\t\tdocElem.msMatchesSelector ) ) ) ) {\n\n\t\tassert( function( el ) {\n\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node (IE 9)\n\t\t\tsupport.disconnectedMatch = matches.call( el, \"*\" );\n\n\t\t\t// This should fail with an exception\n\t\t\t// Gecko does not error, returns false instead\n\t\t\tmatches.call( el, \"[s!='']:x\" );\n\t\t\trbuggyMatches.push( \"!=\", pseudos );\n\t\t} );\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( \"|\" ) );\n\trbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join( \"|\" ) );\n\n\t/* Contains\n\t---------------------------------------------------------------------- */\n\thasCompare = rnative.test( docElem.compareDocumentPosition );\n\n\t// Element contains another\n\t// Purposefully self-exclusive\n\t// As in, an element does not contain itself\n\tcontains = hasCompare || rnative.test( docElem.contains ) ?\n\t\tfunction( a, b ) {\n\t\t\tvar adown = a.nodeType === 9 ? a.documentElement : a,\n\t\t\t\tbup = b && b.parentNode;\n\t\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\t\t\t\tadown.contains ?\n\t\t\t\t\tadown.contains( bup ) :\n\t\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t\t) );\n\t\t} :\n\t\tfunction( a, b ) {\n\t\t\tif ( b ) {\n\t\t\t\twhile ( ( b = b.parentNode ) ) {\n\t\t\t\t\tif ( b === a ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = hasCompare ?\n\tfunction( a, b ) {\n\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\tif ( compare ) {\n\t\t\treturn compare;\n\t\t}\n\n\t\t// Calculate position if both inputs belong to the same document\n\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t// two documents; shallow comparisons work.\n\t\t// eslint-disable-next-line eqeqeq\n\t\tcompare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ?\n\t\t\ta.compareDocumentPosition( b ) :\n\n\t\t\t// Otherwise we know they are disconnected\n\t\t\t1;\n\n\t\t// Disconnected nodes\n\t\tif ( compare & 1 ||\n\t\t\t( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) {\n\n\t\t\t// Choose the first element that is related to our preferred document\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ( a == document || a.ownerDocument == preferredDoc &&\n\t\t\t\tcontains( preferredDoc, a ) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ( b == document || b.ownerDocument == preferredDoc &&\n\t\t\t\tcontains( preferredDoc, b ) ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\t// Maintain original order\n\t\t\treturn sortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t} :\n\tfunction( a, b ) {\n\n\t\t// Exit early if the nodes are identical\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\taup = a.parentNode,\n\t\t\tbup = b.parentNode,\n\t\t\tap = [ a ],\n\t\t\tbp = [ b ];\n\n\t\t// Parentless nodes are either documents or disconnected\n\t\tif ( !aup || !bup ) {\n\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t/* eslint-disable eqeqeq */\n\t\t\treturn a == document ? -1 :\n\t\t\t\tb == document ? 1 :\n\t\t\t\t/* eslint-enable eqeqeq */\n\t\t\t\taup ? -1 :\n\t\t\t\tbup ? 1 :\n\t\t\t\tsortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\n\t\t// If the nodes are siblings, we can do a quick check\n\t\t} else if ( aup === bup ) {\n\t\t\treturn siblingCheck( a, b );\n\t\t}\n\n\t\t// Otherwise we need full lists of their ancestors for comparison\n\t\tcur = a;\n\t\twhile ( ( cur = cur.parentNode ) ) {\n\t\t\tap.unshift( cur );\n\t\t}\n\t\tcur = b;\n\t\twhile ( ( cur = cur.parentNode ) ) {\n\t\t\tbp.unshift( cur );\n\t\t}\n\n\t\t// Walk down the tree looking for a discrepancy\n\t\twhile ( ap[ i ] === bp[ i ] ) {\n\t\t\ti++;\n\t\t}\n\n\t\treturn i ?\n\n\t\t\t// Do a sibling check if the nodes have a common ancestor\n\t\t\tsiblingCheck( ap[ i ], bp[ i ] ) :\n\n\t\t\t// Otherwise nodes in our document sort first\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t/* eslint-disable eqeqeq */\n\t\t\tap[ i ] == preferredDoc ? -1 :\n\t\t\tbp[ i ] == preferredDoc ? 1 :\n\t\t\t/* eslint-enable eqeqeq */\n\t\t\t0;\n\t};\n\n\treturn document;\n};\n\nSizzle.matches = function( expr, elements ) {\n\treturn Sizzle( expr, null, null, elements );\n};\n\nSizzle.matchesSelector = function( elem, expr ) {\n\tsetDocument( elem );\n\n\tif ( support.matchesSelector && documentIsHTML &&\n\t\t!nonnativeSelectorCache[ expr + \" \" ] &&\n\t\t( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&\n\t\t( !rbuggyQSA     || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\n\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t// fragment in IE 9\n\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch ( e ) {\n\t\t\tnonnativeSelectorCache( expr, true );\n\t\t}\n\t}\n\n\treturn Sizzle( expr, document, null, [ elem ] ).length > 0;\n};\n\nSizzle.contains = function( context, elem ) {\n\n\t// Set document vars if needed\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( ( context.ownerDocument || context ) != document ) {\n\t\tsetDocument( context );\n\t}\n\treturn contains( context, elem );\n};\n\nSizzle.attr = function( elem, name ) {\n\n\t// Set document vars if needed\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( ( elem.ownerDocument || elem ) != document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\n\t\t// Don't get fooled by Object.prototype properties (jQuery #13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\treturn val !== undefined ?\n\t\tval :\n\t\tsupport.attributes || !documentIsHTML ?\n\t\t\telem.getAttribute( name ) :\n\t\t\t( val = elem.getAttributeNode( name ) ) && val.specified ?\n\t\t\t\tval.value :\n\t\t\t\tnull;\n};\n\nSizzle.escape = function( sel ) {\n\treturn ( sel + \"\" ).replace( rcssescape, fcssescape );\n};\n\nSizzle.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\nSizzle.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\thasDuplicate = !support.detectDuplicates;\n\tsortInput = !support.sortStable && results.slice( 0 );\n\tresults.sort( sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( ( elem = results[ i++ ] ) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tresults.splice( duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\t// Clear input after sorting to release objects\n\t// See https://github.com/jquery/sizzle/pull/225\n\tsortInput = null;\n\n\treturn results;\n};\n\n/**\n * Utility function for retrieving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */\ngetText = Sizzle.getText = function( elem ) {\n\tvar node,\n\t\tret = \"\",\n\t\ti = 0,\n\t\tnodeType = elem.nodeType;\n\n\tif ( !nodeType ) {\n\n\t\t// If no nodeType, this is expected to be an array\n\t\twhile ( ( node = elem[ i++ ] ) ) {\n\n\t\t\t// Do not traverse comment nodes\n\t\t\tret += getText( node );\n\t\t}\n\t} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\n\n\t\t// Use textContent for elements\n\t\t// innerText usage removed for consistency of new lines (jQuery #11153)\n\t\tif ( typeof elem.textContent === \"string\" ) {\n\t\t\treturn elem.textContent;\n\t\t} else {\n\n\t\t\t// Traverse its children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tret += getText( elem );\n\t\t\t}\n\t\t}\n\t} else if ( nodeType === 3 || nodeType === 4 ) {\n\t\treturn elem.nodeValue;\n\t}\n\n\t// Do not include comment or processing instruction nodes\n\n\treturn ret;\n};\n\nExpr = Sizzle.selectors = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\t\"ATTR\": function( match ) {\n\t\t\tmatch[ 1 ] = match[ 1 ].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[ 3 ] = ( match[ 3 ] || match[ 4 ] ||\n\t\t\t\tmatch[ 5 ] || \"\" ).replace( runescape, funescape );\n\n\t\t\tif ( match[ 2 ] === \"~=\" ) {\n\t\t\t\tmatch[ 3 ] = \" \" + match[ 3 ] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\t\"CHILD\": function( match ) {\n\n\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[ 1 ] = match[ 1 ].toLowerCase();\n\n\t\t\tif ( match[ 1 ].slice( 0, 3 ) === \"nth\" ) {\n\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[ 3 ] ) {\n\t\t\t\t\tSizzle.error( match[ 0 ] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[ 4 ] = +( match[ 4 ] ?\n\t\t\t\t\tmatch[ 5 ] + ( match[ 6 ] || 1 ) :\n\t\t\t\t\t2 * ( match[ 3 ] === \"even\" || match[ 3 ] === \"odd\" ) );\n\t\t\t\tmatch[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === \"odd\" );\n\n\t\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[ 3 ] ) {\n\t\t\t\tSizzle.error( match[ 0 ] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\t\"PSEUDO\": function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[ 6 ] && match[ 2 ];\n\n\t\t\tif ( matchExpr[ \"CHILD\" ].test( match[ 0 ] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[ 3 ] ) {\n\t\t\t\tmatch[ 2 ] = match[ 4 ] || match[ 5 ] || \"\";\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t( excess = tokenize( unquoted, true ) ) &&\n\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t( excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length ) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[ 0 ] = match[ 0 ].slice( 0, excess );\n\t\t\t\tmatch[ 2 ] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\t\"TAG\": function( nodeNameSelector ) {\n\t\t\tvar nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\tfunction() {\n\t\t\t\t\treturn true;\n\t\t\t\t} :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n\t\t\t\t};\n\t\t},\n\n\t\t\"CLASS\": function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t( pattern = new RegExp( \"(^|\" + whitespace +\n\t\t\t\t\t\")\" + className + \"(\" + whitespace + \"|$)\" ) ) && classCache(\n\t\t\t\t\t\tclassName, function( elem ) {\n\t\t\t\t\t\t\treturn pattern.test(\n\t\t\t\t\t\t\t\ttypeof elem.className === \"string\" && elem.className ||\n\t\t\t\t\t\t\t\ttypeof elem.getAttribute !== \"undefined\" &&\n\t\t\t\t\t\t\t\t\telem.getAttribute( \"class\" ) ||\n\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t);\n\t\t\t\t} );\n\t\t},\n\n\t\t\"ATTR\": function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = Sizzle.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\t/* eslint-disable max-len */\n\n\t\t\t\treturn operator === \"=\" ? result === check :\n\t\t\t\t\toperator === \"!=\" ? result !== check :\n\t\t\t\t\toperator === \"^=\" ? check && result.indexOf( check ) === 0 :\n\t\t\t\t\toperator === \"*=\" ? check && result.indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"$=\" ? check && result.slice( -check.length ) === check :\n\t\t\t\t\toperator === \"~=\" ? ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" ).indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"|=\" ? result === check || result.slice( 0, check.length + 1 ) === check + \"-\" :\n\t\t\t\t\tfalse;\n\t\t\t\t/* eslint-enable max-len */\n\n\t\t\t};\n\t\t},\n\n\t\t\"CHILD\": function( type, what, _argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tvar cache, uniqueCache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( ( node = node[ dir ] ) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\n\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\tnode = parent;\n\t\t\t\t\t\t\touterCache = node[ expando ] || ( node[ expando ] = {} );\n\n\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t( outerCache[ node.uniqueID ] = {} );\n\n\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\n\t\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\touterCache = node[ expando ] || ( node[ expando ] = {} );\n\n\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t( outerCache[ node.uniqueID ] = {} );\n\n\t\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ expando ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t( node[ expando ] = {} );\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t( outerCache[ node.uniqueID ] = {} );\n\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\t\"PSEUDO\": function( pseudo, argument ) {\n\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// http://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tSizzle.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as Sizzle does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction( function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf( seed, matched[ i ] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[ i ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t} ) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\n\t\t// Potentially complex pseudos\n\t\t\"not\": markFunction( function( selector ) {\n\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrim, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction( function( seed, matches, _context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\t\t\t\t\tseed[ i ] = !( matches[ i ] = elem );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} ) :\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tinput[ 0 ] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\n\t\t\t\t\t// Don't keep the element (issue #299)\n\t\t\t\t\tinput[ 0 ] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t} ),\n\n\t\t\"has\": markFunction( function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn Sizzle( selector, elem ).length > 0;\n\t\t\t};\n\t\t} ),\n\n\t\t\"contains\": markFunction( function( text ) {\n\t\t\ttext = text.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || getText( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t} ),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// http://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\"lang\": markFunction( function( lang ) {\n\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test( lang || \"\" ) ) {\n\t\t\t\tSizzle.error( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( ( elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute( \"xml:lang\" ) || elem.getAttribute( \"lang\" ) ) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( ( elem = elem.parentNode ) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t} ),\n\n\t\t// Miscellaneous\n\t\t\"target\": function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\t\"root\": function( elem ) {\n\t\t\treturn elem === docElem;\n\t\t},\n\n\t\t\"focus\": function( elem ) {\n\t\t\treturn elem === document.activeElement &&\n\t\t\t\t( !document.hasFocus || document.hasFocus() ) &&\n\t\t\t\t!!( elem.type || elem.href || ~elem.tabIndex );\n\t\t},\n\n\t\t// Boolean properties\n\t\t\"enabled\": createDisabledPseudo( false ),\n\t\t\"disabled\": createDisabledPseudo( true ),\n\n\t\t\"checked\": function( elem ) {\n\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\tvar nodeName = elem.nodeName.toLowerCase();\n\t\t\treturn ( nodeName === \"input\" && !!elem.checked ) ||\n\t\t\t\t( nodeName === \"option\" && !!elem.selected );\n\t\t},\n\n\t\t\"selected\": function( elem ) {\n\n\t\t\t// Accessing this property makes selected-by-default\n\t\t\t// options in Safari work properly\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\t\"empty\": function( elem ) {\n\n\t\t\t// http://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t//   but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t\"parent\": function( elem ) {\n\t\t\treturn !Expr.pseudos[ \"empty\" ]( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\t\"header\": function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\t\"input\": function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\t\"button\": function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn name === \"input\" && elem.type === \"button\" || name === \"button\";\n\t\t},\n\n\t\t\"text\": function( elem ) {\n\t\t\tvar attr;\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" &&\n\t\t\t\telem.type === \"text\" &&\n\n\t\t\t\t// Support: IE<8\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear with elem.type === \"text\"\n\t\t\t\t( ( attr = elem.getAttribute( \"type\" ) ) == null ||\n\t\t\t\t\tattr.toLowerCase() === \"text\" );\n\t\t},\n\n\t\t// Position-in-collection\n\t\t\"first\": createPositionalPseudo( function() {\n\t\t\treturn [ 0 ];\n\t\t} ),\n\n\t\t\"last\": createPositionalPseudo( function( _matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t} ),\n\n\t\t\"eq\": createPositionalPseudo( function( _matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t} ),\n\n\t\t\"even\": createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\t\"odd\": createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\t\"lt\": createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ?\n\t\t\t\targument + length :\n\t\t\t\targument > length ?\n\t\t\t\t\tlength :\n\t\t\t\t\targument;\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\t\"gt\": createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} )\n\t}\n};\n\nExpr.pseudos[ \"nth\" ] = Expr.pseudos[ \"eq\" ];\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\ntokenize = Sizzle.tokenize = function( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || ( match = rcomma.exec( soFar ) ) ) {\n\t\t\tif ( match ) {\n\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[ 0 ].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( ( tokens = [] ) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( ( match = rcombinators.exec( soFar ) ) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push( {\n\t\t\t\tvalue: matched,\n\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[ 0 ].replace( rtrim, \" \" )\n\t\t\t} );\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] ||\n\t\t\t\t( match = preFilters[ type ]( match ) ) ) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push( {\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t} );\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\treturn parseOnly ?\n\t\tsoFar.length :\n\t\tsoFar ?\n\t\t\tSizzle.error( selector ) :\n\n\t\t\t// Cache the tokens\n\t\t\ttokenCache( selector, groups ).slice( 0 );\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[ i ].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tskip = combinator.next,\n\t\tkey = skip || dir,\n\t\tcheckNonElements = base && key === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, uniqueCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || ( elem[ expando ] = {} );\n\n\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\tuniqueCache = outerCache[ elem.uniqueID ] ||\n\t\t\t\t\t\t\t( outerCache[ elem.uniqueID ] = {} );\n\n\t\t\t\t\t\tif ( skip && skip === elem.nodeName.toLowerCase() ) {\n\t\t\t\t\t\t\telem = elem[ dir ] || elem;\n\t\t\t\t\t\t} else if ( ( oldCache = uniqueCache[ key ] ) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn ( newCache[ 2 ] = oldCache[ 2 ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\tuniqueCache[ key ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[ i ]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[ 0 ];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tSizzle( selector, contexts[ i ], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction( function( seed, results, context, xml ) {\n\t\tvar temp, i, elem,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed || multipleContexts(\n\t\t\t\tselector || \"*\",\n\t\t\t\tcontext.nodeType ? [ context ] : context,\n\t\t\t\t[]\n\t\t\t),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems,\n\n\t\t\tmatcherOut = matcher ?\n\n\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n\t\t\t\tpostFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t[] :\n\n\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\tresults :\n\t\t\t\tmatcherIn;\n\n\t\t// Find primary matches\n\t\tif ( matcher ) {\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( ( elem = temp[ i ] ) ) {\n\t\t\t\t\tmatcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) ) {\n\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( ( matcherIn[ i ] = elem ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, ( matcherOut = [] ), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) &&\n\t\t\t\t\t\t( temp = postFinder ? indexOf( seed, elem ) : preMap[ i ] ) > -1 ) {\n\n\t\t\t\t\t\tseed[ temp ] = !( results[ temp ] = elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t} );\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[ 0 ].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[ \" \" ],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\t\t\tvar ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (\n\t\t\t\t( checkContext = context ).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\n\t\t\t// Avoid hanging onto element (issue #299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) {\n\t\t\tmatchers = [ addCombinator( elementMatcher( matchers ), matcher ) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[ j ].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\n\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\ttokens\n\t\t\t\t\t\t.slice( 0, i - 1 )\n\t\t\t\t\t\t.concat( { value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" } )\n\t\t\t\t\t).replace( rtrim, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && Expr.find[ \"TAG\" ]( \"*\", outermost ),\n\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ),\n\t\t\t\tlen = elems.length;\n\n\t\t\tif ( outermost ) {\n\n\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\toutermostContext = context == document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Support: IE<9, Safari\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching elements by id\n\t\t\tfor ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif ( !context && elem.ownerDocument != document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( ( matcher = elementMatchers[ j++ ] ) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml ) ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( ( elem = !matcher && elem ) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( ( matcher = setMatchers[ j++ ] ) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !( unmatched[ i ] || setMatched[ i ] ) ) {\n\t\t\t\t\t\t\t\tsetMatched[ i ] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tSizzle.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\ncompile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[ i ] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache(\n\t\t\tselector,\n\t\t\tmatcherFromGroupMatchers( elementMatchers, setMatchers )\n\t\t);\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n};\n\n/**\n * A low-level selection function that works with Sizzle's compiled\n *  selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n *  selector function built with Sizzle.compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nselect = Sizzle.select = function( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( ( selector = compiled.selector || selector ) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[ 0 ] = match[ 0 ].slice( 0 );\n\t\tif ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === \"ID\" &&\n\t\t\tcontext.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) {\n\n\t\t\tcontext = ( Expr.find[ \"ID\" ]( token.matches[ 0 ]\n\t\t\t\t.replace( runescape, funescape ), context ) || [] )[ 0 ];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr[ \"needsContext\" ].test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[ i ];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( Expr.relative[ ( type = token.type ) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( ( find = Expr.find[ type ] ) ) {\n\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( ( seed = find(\n\t\t\t\t\ttoken.matches[ 0 ].replace( runescape, funescape ),\n\t\t\t\t\trsibling.test( tokens[ 0 ].type ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext\n\t\t\t\t) ) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n};\n\n// One-time assignments\n\n// Sort stability\nsupport.sortStable = expando.split( \"\" ).sort( sortOrder ).join( \"\" ) === expando;\n\n// Support: Chrome 14-35+\n// Always assume duplicates if they aren't passed to the comparison function\nsupport.detectDuplicates = !!hasDuplicate;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert( function( el ) {\n\n\t// Should return 1, but returns 4 (following)\n\treturn el.compareDocumentPosition( document.createElement( \"fieldset\" ) ) & 1;\n} );\n\n// Support: IE<8\n// Prevent attribute/property \"interpolation\"\n// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !assert( function( el ) {\n\tel.innerHTML = \"<a href='#'></a>\";\n\treturn el.firstChild.getAttribute( \"href\" ) === \"#\";\n} ) ) {\n\taddHandle( \"type|href|height|width\", function( elem, name, isXML ) {\n\t\tif ( !isXML ) {\n\t\t\treturn elem.getAttribute( name, name.toLowerCase() === \"type\" ? 1 : 2 );\n\t\t}\n\t} );\n}\n\n// Support: IE<9\n// Use defaultValue in place of getAttribute(\"value\")\nif ( !support.attributes || !assert( function( el ) {\n\tel.innerHTML = \"<input/>\";\n\tel.firstChild.setAttribute( \"value\", \"\" );\n\treturn el.firstChild.getAttribute( \"value\" ) === \"\";\n} ) ) {\n\taddHandle( \"value\", function( elem, _name, isXML ) {\n\t\tif ( !isXML && elem.nodeName.toLowerCase() === \"input\" ) {\n\t\t\treturn elem.defaultValue;\n\t\t}\n\t} );\n}\n\n// Support: IE<9\n// Use getAttributeNode to fetch booleans when getAttribute lies\nif ( !assert( function( el ) {\n\treturn el.getAttribute( \"disabled\" ) == null;\n} ) ) {\n\taddHandle( booleans, function( elem, name, isXML ) {\n\t\tvar val;\n\t\tif ( !isXML ) {\n\t\t\treturn elem[ name ] === true ? name.toLowerCase() :\n\t\t\t\t( val = elem.getAttributeNode( name ) ) && val.specified ?\n\t\t\t\t\tval.value :\n\t\t\t\t\tnull;\n\t\t}\n\t} );\n}\n\nreturn Sizzle;\n\n} )( window );\n\n\n\njQuery.find = Sizzle;\njQuery.expr = Sizzle.selectors;\n\n// Deprecated\njQuery.expr[ \":\" ] = jQuery.expr.pseudos;\njQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;\njQuery.text = Sizzle.getText;\njQuery.isXMLDoc = Sizzle.isXML;\njQuery.contains = Sizzle.contains;\njQuery.escapeSelector = Sizzle.escape;\n\n\n\n\nvar dir = function( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n};\n\n\nvar siblings = function( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n};\n\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\n\n\nfunction nodeName( elem, name ) {\n\n\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\n}\nvar rsingleTag = ( /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i );\n\n\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\t}\n\n\t// Single element\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\t}\n\n\t// Arraylike of elements (jQuery, arguments, Array)\n\tif ( typeof qualifier !== \"string\" ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t\t} );\n\t}\n\n\t// Filtered directly for both simple and complex selectors\n\treturn jQuery.filter( qualifier, elements, not );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\tif ( elems.length === 1 && elem.nodeType === 1 ) {\n\t\treturn jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];\n\t}\n\n\treturn jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\treturn elem.nodeType === 1;\n\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i, ret,\n\t\t\tlen = this.length,\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tret = this.pushStack( [] );\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\treturn len > 1 ? jQuery.uniqueSort( ret ) : ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n\n// Initialize a jQuery object\n\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over <tag> to avoid XSS via location.hash (trac-9521)\n\t// Strict HTML recognition (trac-11290: must start with <)\n\t// Shortcut simple #id case for speed\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\tinit = jQuery.fn.init = function( selector, context, root ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Method init() accepts an alternate rootjQuery\n\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\troot = root || rootjQuery;\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector[ 0 ] === \"<\" &&\n\t\t\t\tselector[ selector.length - 1 ] === \">\" &&\n\t\t\t\tselector.length >= 3 ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[ 2 ] );\n\n\t\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || root ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( isFunction( selector ) ) {\n\t\t\treturn root.ready !== undefined ?\n\t\t\t\troot.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document );\n\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\ttargets = typeof selectors !== \"string\" && jQuery( selectors );\n\n\t\t// Positional selectors never match, since there's no _selection_ context\n\t\tif ( !rneedsContext.test( selectors ) ) {\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\tif ( cur.nodeType < 11 && ( targets ?\n\t\t\t\t\t\ttargets.index( cur ) > -1 :\n\n\t\t\t\t\t\t// Don't pass non-elements to Sizzle\n\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\tif ( elem.contentDocument != null &&\n\n\t\t\t// Support: IE 11+\n\t\t\t// <object> elements with no `data` attribute has an object\n\t\t\t// `contentDocument` with a `null` prototype.\n\t\t\tgetProto( elem.contentDocument ) ) {\n\n\t\t\treturn elem.contentDocument;\n\t\t}\n\n\t\t// Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only\n\t\t// Treat the template element as a regular one in browsers that\n\t\t// don't support it.\n\t\tif ( nodeName( elem, \"template\" ) ) {\n\t\t\telem = elem.content || elem;\n\t\t}\n\n\t\treturn jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\nvar rnothtmlwhite = ( /[^\\x20\\t\\r\\n\\f]+/g );\n\n\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = locked || options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( isFunction( arg ) ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && toType( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory && !firing ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\n\nfunction Identity( v ) {\n\treturn v;\n}\nfunction Thrower( ex ) {\n\tthrow ex;\n}\n\nfunction adoptValue( value, resolve, reject, noValue ) {\n\tvar method;\n\n\ttry {\n\n\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\tif ( value && isFunction( ( method = value.promise ) ) ) {\n\t\t\tmethod.call( value ).done( resolve ).fail( reject );\n\n\t\t// Other thenables\n\t\t} else if ( value && isFunction( ( method = value.then ) ) ) {\n\t\t\tmethod.call( value, resolve, reject );\n\n\t\t// Other non-thenables\n\t\t} else {\n\n\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\tresolve.apply( undefined, [ value ].slice( noValue ) );\n\t\t}\n\n\t// For Promises/A+, convert exceptions into rejections\n\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t// Deferred#then to conditionally suppress rejection.\n\t} catch ( value ) {\n\n\t\t// Support: Android 4.0 only\n\t\t// Strict mode functions invoked without .call/.apply get global-object context\n\t\treject.apply( undefined, [ value ] );\n\t}\n}\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"memory\" ), 2 ],\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 0, \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 1, \"rejected\" ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\t\"catch\": function( fn ) {\n\t\t\t\t\treturn promise.then( null, fn );\n\t\t\t\t},\n\n\t\t\t\t// Keep pipe for back-compat\n\t\t\t\tpipe: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( _i, tuple ) {\n\n\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\tvar fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];\n\n\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\t\t\t\tthen: function( onFulfilled, onRejected, onProgress ) {\n\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\tfunction resolve( depth, deferred, handler, special ) {\n\t\t\t\t\t\treturn function() {\n\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\tmightThrow = function() {\n\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\tif ( depth < maxDepth ) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturned = handler.apply( that, args );\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\tif ( returned === deferred.promise() ) {\n\t\t\t\t\t\t\t\t\t\tthrow new TypeError( \"Thenable self-resolution\" );\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t( typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\" ) &&\n\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\tif ( isFunction( then ) ) {\n\n\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\tif ( special ) {\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special )\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith )\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\tif ( handler !== Identity ) {\n\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\targs = [ returned ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t( special || deferred.resolveWith )( that, args );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ( jQuery.Deferred.exceptionHook ) {\n\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook( e,\n\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.stackTrace );\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\tif ( depth + 1 >= maxDepth ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\tif ( handler !== Thrower ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\targs = [ e ];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith( that, args );\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\tif ( depth ) {\n\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Call an optional hook to record the stack, in case of exception\n\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\tif ( jQuery.Deferred.getStackHook ) {\n\t\t\t\t\t\t\t\t\tprocess.stackTrace = jQuery.Deferred.getStackHook();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\twindow.setTimeout( process );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\n\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 0 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onProgress ) ?\n\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 1 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onFulfilled ) ?\n\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 2 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onRejected ) ?\n\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 5 ];\n\n\t\t\t// promise.progress = list.add\n\t\t\t// promise.done = list.add\n\t\t\t// promise.fail = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(\n\t\t\t\t\tfunction() {\n\n\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t},\n\n\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\ttuples[ 3 - i ][ 2 ].disable,\n\n\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\ttuples[ 3 - i ][ 3 ].disable,\n\n\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\ttuples[ 0 ][ 2 ].lock,\n\n\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\ttuples[ 0 ][ 3 ].lock\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// progress_handlers.fire\n\t\t\t// fulfilled_handlers.fire\n\t\t\t// rejected_handlers.fire\n\t\t\tlist.add( tuple[ 3 ].fire );\n\n\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? undefined : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\n\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( singleValue ) {\n\t\tvar\n\n\t\t\t// count of uncompleted subordinates\n\t\t\tremaining = arguments.length,\n\n\t\t\t// count of unprocessed arguments\n\t\t\ti = remaining,\n\n\t\t\t// subordinate fulfillment data\n\t\t\tresolveContexts = Array( i ),\n\t\t\tresolveValues = slice.call( arguments ),\n\n\t\t\t// the primary Deferred\n\t\t\tprimary = jQuery.Deferred(),\n\n\t\t\t// subordinate callback factory\n\t\t\tupdateFunc = function( i ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tresolveContexts[ i ] = this;\n\t\t\t\t\tresolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( !( --remaining ) ) {\n\t\t\t\t\t\tprimary.resolveWith( resolveContexts, resolveValues );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\tif ( remaining <= 1 ) {\n\t\t\tadoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject,\n\t\t\t\t!remaining );\n\n\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\tif ( primary.state() === \"pending\" ||\n\t\t\t\tisFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {\n\n\t\t\t\treturn primary.then();\n\t\t\t}\n\t\t}\n\n\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\twhile ( i-- ) {\n\t\t\tadoptValue( resolveValues[ i ], updateFunc( i ), primary.reject );\n\t\t}\n\n\t\treturn primary.promise();\n\t}\n} );\n\n\n// These usually indicate a programmer mistake during development,\n// warn about them ASAP rather than swallowing them by default.\nvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\njQuery.Deferred.exceptionHook = function( error, stack ) {\n\n\t// Support: IE 8 - 9 only\n\t// Console exists when dev tools are open, which can happen at any time\n\tif ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {\n\t\twindow.console.warn( \"jQuery.Deferred exception: \" + error.message, error.stack, stack );\n\t}\n};\n\n\n\n\njQuery.readyException = function( error ) {\n\twindow.setTimeout( function() {\n\t\tthrow error;\n\t} );\n};\n\n\n\n\n// The deferred used on DOM ready\nvar readyList = jQuery.Deferred();\n\njQuery.fn.ready = function( fn ) {\n\n\treadyList\n\t\t.then( fn )\n\n\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t// happens at the time of error handling instead of callback\n\t\t// registration.\n\t\t.catch( function( error ) {\n\t\t\tjQuery.readyException( error );\n\t\t} );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See trac-6781\n\treadyWait: 1,\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\t}\n} );\n\njQuery.ready.then = readyList.then;\n\n// The ready event handler and self cleanup method\nfunction completed() {\n\tdocument.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\n// Catch cases where $(document).ready() is called\n// after the browser event has already occurred.\n// Support: IE <=9 - 10 only\n// Older IE sometimes signals \"interactive\" too soon\nif ( document.readyState === \"complete\" ||\n\t( document.readyState !== \"loading\" && !document.documentElement.doScroll ) ) {\n\n\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\twindow.setTimeout( jQuery.ready );\n\n} else {\n\n\t// Use the handy event callback\n\tdocument.addEventListener( \"DOMContentLoaded\", completed );\n\n\t// A fallback to window.onload, that will always work\n\twindow.addEventListener( \"load\", completed );\n}\n\n\n\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nvar access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( toType( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( !isFunction( value ) ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, _key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\t\tvalue :\n\t\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( chainable ) {\n\t\treturn elems;\n\t}\n\n\t// Gets\n\tif ( bulk ) {\n\t\treturn fn.call( elems );\n\t}\n\n\treturn len ? fn( elems[ 0 ], key ) : emptyGet;\n};\n\n\n// Matches dashed string for camelizing\nvar rmsPrefix = /^-ms-/,\n\trdashAlpha = /-([a-z])/g;\n\n// Used by camelCase as callback to replace()\nfunction fcamelCase( _all, letter ) {\n\treturn letter.toUpperCase();\n}\n\n// Convert dashed to camelCase; used by the css and data modules\n// Support: IE <=9 - 11, Edge 12 - 15\n// Microsoft forgot to hump their vendor prefix (trac-9572)\nfunction camelCase( string ) {\n\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n}\nvar acceptData = function( owner ) {\n\n\t// Accepts only:\n\t//  - Node\n\t//    - Node.ELEMENT_NODE\n\t//    - Node.DOCUMENT_NODE\n\t//  - Object\n\t//    - Any\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n};\n\n\n\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tcache: function( owner ) {\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = {};\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see trac-8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\t// Always use camelCase key (gh-2257)\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ camelCase( data ) ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ camelCase( prop ) ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn cache;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\towner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];\n\t},\n\taccess: function( owner, key, value ) {\n\n\t\t// In cases where either:\n\t\t//\n\t\t//   1. No key was specified\n\t\t//   2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t//   1. The entire cache object\n\t\t//   2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\treturn this.get( owner, key );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t//   1. An object of properties\n\t\t//   2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key !== undefined ) {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( Array.isArray( key ) ) {\n\n\t\t\t\t// If key is an array of keys...\n\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\tkey = key.map( camelCase );\n\t\t\t} else {\n\t\t\t\tkey = camelCase( key );\n\n\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\tkey = key in cache ?\n\t\t\t\t\t[ key ] :\n\t\t\t\t\t( key.match( rnothtmlwhite ) || [] );\n\t\t\t}\n\n\t\t\ti = key.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ key[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <=35 - 45\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction getData( data ) {\n\tif ( data === \"true\" ) {\n\t\treturn true;\n\t}\n\n\tif ( data === \"false\" ) {\n\t\treturn false;\n\t}\n\n\tif ( data === \"null\" ) {\n\t\treturn null;\n\t}\n\n\t// Only convert to a number if it doesn't change the string\n\tif ( data === +data + \"\" ) {\n\t\treturn +data;\n\t}\n\n\tif ( rbrace.test( data ) ) {\n\t\treturn JSON.parse( data );\n\t}\n\n\treturn data;\n}\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = getData( data );\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE 11 only\n\t\t\t\t\t\t// The attrs elements can be null (trac-14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\tdata = dataUser.get( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tthis.each( function() {\n\n\t\t\t\t// We always store the camelCased key\n\t\t\t\tdataUser.set( this, key, value );\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || Array.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.access( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.access( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\nvar pnum = ( /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/ ).source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\nvar documentElement = document.documentElement;\n\n\n\n\tvar isAttached = function( elem ) {\n\t\t\treturn jQuery.contains( elem.ownerDocument, elem );\n\t\t},\n\t\tcomposed = { composed: true };\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only\n\t// Check attachment across shadow DOM boundaries when possible (gh-3504)\n\t// Support: iOS 10.0-10.2 only\n\t// Early iOS 10 versions support `attachShadow` but not `getRootNode`,\n\t// leading to errors. We need to check for `getRootNode`.\n\tif ( documentElement.getRootNode ) {\n\t\tisAttached = function( elem ) {\n\t\t\treturn jQuery.contains( elem.ownerDocument, elem ) ||\n\t\t\t\telem.getRootNode( composed ) === elem.ownerDocument;\n\t\t};\n\t}\nvar isHiddenWithinTree = function( elem, el ) {\n\n\t\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\n\t\t// Inline style trumps all\n\t\treturn elem.style.display === \"none\" ||\n\t\t\telem.style.display === \"\" &&\n\n\t\t\t// Otherwise, check computed style\n\t\t\t// Support: Firefox <=43 - 45\n\t\t\t// Disconnected elements can have computed display: none, so first confirm that elem is\n\t\t\t// in the document.\n\t\t\tisAttached( elem ) &&\n\n\t\t\tjQuery.css( elem, \"display\" ) === \"none\";\n\t};\n\n\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted, scale,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() {\n\t\t\t\treturn tween.cur();\n\t\t\t} :\n\t\t\tfunction() {\n\t\t\t\treturn jQuery.css( elem, prop, \"\" );\n\t\t\t},\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = elem.nodeType &&\n\t\t\t( jQuery.cssNumber[ prop ] || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Support: Firefox <=54\n\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\tinitial = initial / 2;\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\twhile ( maxIterations-- ) {\n\n\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\t\t\tif ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {\n\t\t\t\tmaxIterations = 0;\n\t\t\t}\n\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t}\n\n\t\tinitialInUnit = initialInUnit * 2;\n\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\n\n\nvar defaultDisplayMap = {};\n\nfunction getDefaultDisplay( elem ) {\n\tvar temp,\n\t\tdoc = elem.ownerDocument,\n\t\tnodeName = elem.nodeName,\n\t\tdisplay = defaultDisplayMap[ nodeName ];\n\n\tif ( display ) {\n\t\treturn display;\n\t}\n\n\ttemp = doc.body.appendChild( doc.createElement( nodeName ) );\n\tdisplay = jQuery.css( temp, \"display\" );\n\n\ttemp.parentNode.removeChild( temp );\n\n\tif ( display === \"none\" ) {\n\t\tdisplay = \"block\";\n\t}\n\tdefaultDisplayMap[ nodeName ] = display;\n\n\treturn display;\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\t// Determine new display value for elements that need to change\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t// inline or about-to-be-restored)\n\t\t\tif ( display === \"none\" ) {\n\t\t\t\tvalues[ index ] = dataPriv.get( elem, \"display\" ) || null;\n\t\t\t\tif ( !values[ index ] ) {\n\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( elem.style.display === \"\" && isHiddenWithinTree( elem ) ) {\n\t\t\t\tvalues[ index ] = getDefaultDisplay( elem );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( display !== \"none\" ) {\n\t\t\t\tvalues[ index ] = \"none\";\n\n\t\t\t\t// Remember what we're overwriting\n\t\t\t\tdataPriv.set( elem, \"display\", display );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of the elements in a second loop to avoid constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\tif ( values[ index ] != null ) {\n\t\t\telements[ index ].style.display = values[ index ];\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend( {\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHiddenWithinTree( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\nvar rcheckableType = ( /^(?:checkbox|radio)$/i );\n\nvar rtagName = ( /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i );\n\nvar rscriptType = ( /^$|^module$|\\/(?:java|ecma)script/i );\n\n\n\n( function() {\n\tvar fragment = document.createDocumentFragment(),\n\t\tdiv = fragment.appendChild( document.createElement( \"div\" ) ),\n\t\tinput = document.createElement( \"input\" );\n\n\t// Support: Android 4.0 - 4.3 only\n\t// Check state lost if the name is set (trac-11217)\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` must use .setAttribute for WWA (trac-14901)\n\tinput.setAttribute( \"type\", \"radio\" );\n\tinput.setAttribute( \"checked\", \"checked\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tdiv.appendChild( input );\n\n\t// Support: Android <=4.1 only\n\t// Older WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE <=11 only\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\tdiv.innerHTML = \"<textarea>x</textarea>\";\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n\n\t// Support: IE <=9 only\n\t// IE <=9 replaces <option> tags with their contents when inserted outside of\n\t// the select element.\n\tdiv.innerHTML = \"<option></option>\";\n\tsupport.option = !!div.lastChild;\n} )();\n\n\n// We have to close these tags to support XHTML (trac-13200)\nvar wrapMap = {\n\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do. So we cannot shorten\n\t// this by omitting <tbody> or other required elements.\n\tthead: [ 1, \"<table>\", \"</table>\" ],\n\tcol: [ 2, \"<table><colgroup>\", \"</colgroup></table>\" ],\n\ttr: [ 2, \"<table><tbody>\", \"</tbody></table>\" ],\n\ttd: [ 3, \"<table><tbody><tr>\", \"</tr></tbody></table>\" ],\n\n\t_default: [ 0, \"\", \"\" ]\n};\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n// Support: IE <=9 only\nif ( !support.option ) {\n\twrapMap.optgroup = wrapMap.option = [ 1, \"<select multiple='multiple'>\", \"</select>\" ];\n}\n\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE <=9 - 11 only\n\t// Use typeof to avoid zero-argument method invocation on host objects (trac-15151)\n\tvar ret;\n\n\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\tret = context.getElementsByTagName( tag || \"*\" );\n\n\t} else if ( typeof context.querySelectorAll !== \"undefined\" ) {\n\t\tret = context.querySelectorAll( tag || \"*\" );\n\n\t} else {\n\t\tret = [];\n\t}\n\n\tif ( tag === undefined || tag && nodeName( context, tag ) ) {\n\t\treturn jQuery.merge( [ context ], ret );\n\t}\n\n\treturn ret;\n}\n\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, attached, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( toType( elem ) === \"object\" ) {\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\t\t\t\ttmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];\n\n\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\tj = wrap[ 0 ];\n\t\t\t\twhile ( j-- ) {\n\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t}\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (trac-12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tattached = isAttached( elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( attached ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n\nvar rtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\n// Support: IE <=9 - 11+\n// focus() and blur() are asynchronous, except when they are no-op.\n// So expect focus to be synchronous when the element is already active,\n// and blur to be synchronous when the element is not already active.\n// (focus and blur are always synchronous in other supported browsers,\n// this just defines when we can count on it).\nfunction expectSync( elem, type ) {\n\treturn ( elem === safeActiveElement() ) === ( type === \"focus\" );\n}\n\n// Support: IE <=9 only\n// Accessing document.activeElement can throw unexpectedly\n// https://bugs.jquery.com/ticket/13393\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Only attach events to objects that accept data\n\t\tif ( !acceptData( elem ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\tif ( selector ) {\n\t\t\tjQuery.find.matchesSelector( documentElement, selector );\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = Object.create( null );\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( nativeEvent ) {\n\n\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\targs = new Array( arguments.length ),\n\n\t\t\t// Make a writable jQuery.Event from the native event object\n\t\t\tevent = jQuery.event.fix( nativeEvent ),\n\n\t\t\thandlers = (\n\t\t\t\tdataPriv.get( this, \"events\" ) || Object.create( null )\n\t\t\t)[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\n\t\tfor ( i = 1; i < arguments.length; i++ ) {\n\t\t\targs[ i ] = arguments[ i ];\n\t\t}\n\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// If the event is namespaced, then each handler is only invoked if it is\n\t\t\t\t// specially universal or its namespaces are a superset of the event's.\n\t\t\t\tif ( !event.rnamespace || handleObj.namespace === false ||\n\t\t\t\t\tevent.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\tif ( delegateCount &&\n\n\t\t\t// Support: IE <=9\n\t\t\t// Black-hole SVG <use> instance trees (trac-13180)\n\t\t\tcur.nodeType &&\n\n\t\t\t// Support: Firefox <=42\n\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t// Support: IE 11 only\n\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t!( event.type === \"click\" && event.button >= 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (trac-13208)\n\t\t\t\t// Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764)\n\t\t\t\tif ( cur.nodeType === 1 && !( event.type === \"click\" && cur.disabled === true ) ) {\n\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (trac-13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatchedSelectors[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] ) {\n\t\t\t\t\t\t\tmatchedHandlers.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matchedHandlers.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matchedHandlers } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tcur = this;\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\taddProp: function( name, hook ) {\n\t\tObject.defineProperty( jQuery.Event.prototype, name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\n\t\t\tget: isFunction( hook ) ?\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\treturn hook( this.originalEvent );\n\t\t\t\t\t}\n\t\t\t\t} :\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\treturn this.originalEvent[ name ];\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\tset: function( value ) {\n\t\t\t\tObject.defineProperty( this, name, {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true,\n\t\t\t\t\tvalue: value\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t},\n\n\tfix: function( originalEvent ) {\n\t\treturn originalEvent[ jQuery.expando ] ?\n\t\t\toriginalEvent :\n\t\t\tnew jQuery.Event( originalEvent );\n\t},\n\n\tspecial: {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tclick: {\n\n\t\t\t// Utilize native event to ensure correct state for checkable inputs\n\t\t\tsetup: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Claim the first handler\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\t// dataPriv.set( el, \"click\", ... )\n\t\t\t\t\tleverageNative( el, \"click\", returnTrue );\n\t\t\t\t}\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\ttrigger: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Force setup before triggering a click\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\tleverageNative( el, \"click\" );\n\t\t\t\t}\n\n\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, suppress native .click() on links\n\t\t\t// Also prevent it if we're currently inside a leveraged native-event stack\n\t\t\t_default: function( event ) {\n\t\t\t\tvar target = event.target;\n\t\t\t\treturn rcheckableType.test( target.type ) &&\n\t\t\t\t\ttarget.click && nodeName( target, \"input\" ) &&\n\t\t\t\t\tdataPriv.get( target, \"click\" ) ||\n\t\t\t\t\tnodeName( target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Support: Firefox 20+\n\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Ensure the presence of an event listener that handles manually-triggered\n// synthetic events by interrupting progress until reinvoked in response to\n// *native* events that it fires directly, ensuring that state changes have\n// already occurred before other listeners are invoked.\nfunction leverageNative( el, type, expectSync ) {\n\n\t// Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add\n\tif ( !expectSync ) {\n\t\tif ( dataPriv.get( el, type ) === undefined ) {\n\t\t\tjQuery.event.add( el, type, returnTrue );\n\t\t}\n\t\treturn;\n\t}\n\n\t// Register the controller as a special universal handler for all event namespaces\n\tdataPriv.set( el, type, false );\n\tjQuery.event.add( el, type, {\n\t\tnamespace: false,\n\t\thandler: function( event ) {\n\t\t\tvar notAsync, result,\n\t\t\t\tsaved = dataPriv.get( this, type );\n\n\t\t\tif ( ( event.isTrigger & 1 ) && this[ type ] ) {\n\n\t\t\t\t// Interrupt processing of the outer synthetic .trigger()ed event\n\t\t\t\t// Saved data should be false in such cases, but might be a leftover capture object\n\t\t\t\t// from an async native handler (gh-4350)\n\t\t\t\tif ( !saved.length ) {\n\n\t\t\t\t\t// Store arguments for use when handling the inner native event\n\t\t\t\t\t// There will always be at least one argument (an event object), so this array\n\t\t\t\t\t// will not be confused with a leftover capture object.\n\t\t\t\t\tsaved = slice.call( arguments );\n\t\t\t\t\tdataPriv.set( this, type, saved );\n\n\t\t\t\t\t// Trigger the native event and capture its result\n\t\t\t\t\t// Support: IE <=9 - 11+\n\t\t\t\t\t// focus() and blur() are asynchronous\n\t\t\t\t\tnotAsync = expectSync( this, type );\n\t\t\t\t\tthis[ type ]();\n\t\t\t\t\tresult = dataPriv.get( this, type );\n\t\t\t\t\tif ( saved !== result || notAsync ) {\n\t\t\t\t\t\tdataPriv.set( this, type, false );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresult = {};\n\t\t\t\t\t}\n\t\t\t\t\tif ( saved !== result ) {\n\n\t\t\t\t\t\t// Cancel the outer synthetic event\n\t\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\t// Support: Chrome 86+\n\t\t\t\t\t\t// In Chrome, if an element having a focusout handler is blurred by\n\t\t\t\t\t\t// clicking outside of it, it invokes the handler synchronously. If\n\t\t\t\t\t\t// that handler calls `.remove()` on the element, the data is cleared,\n\t\t\t\t\t\t// leaving `result` undefined. We need to guard against this.\n\t\t\t\t\t\treturn result && result.value;\n\t\t\t\t\t}\n\n\t\t\t\t// If this is an inner synthetic event for an event with a bubbling surrogate\n\t\t\t\t// (focus or blur), assume that the surrogate already propagated from triggering the\n\t\t\t\t// native event and prevent that from happening again here.\n\t\t\t\t// This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the\n\t\t\t\t// bubbling surrogate propagates *after* the non-bubbling base), but that seems\n\t\t\t\t// less bad than duplication.\n\t\t\t\t} else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t}\n\n\t\t\t// If this is a native event triggered above, everything is now in order\n\t\t\t// Fire an inner synthetic event with the original arguments\n\t\t\t} else if ( saved.length ) {\n\n\t\t\t\t// ...and capture the result\n\t\t\t\tdataPriv.set( this, type, {\n\t\t\t\t\tvalue: jQuery.event.trigger(\n\n\t\t\t\t\t\t// Support: IE <=9 - 11+\n\t\t\t\t\t\t// Extend with the prototype to reset the above stopImmediatePropagation()\n\t\t\t\t\t\tjQuery.extend( saved[ 0 ], jQuery.Event.prototype ),\n\t\t\t\t\t\tsaved.slice( 1 ),\n\t\t\t\t\t\tthis\n\t\t\t\t\t)\n\t\t\t\t} );\n\n\t\t\t\t// Abort handling of the native event\n\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t}\n\t\t}\n\t} );\n}\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android <=2.3 only\n\t\t\t\tsrc.returnValue === false ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t\t// Create target properties\n\t\t// Support: Safari <=6 - 7 only\n\t\t// Target should not be a text node (trac-504, trac-13143)\n\t\tthis.target = ( src.target && src.target.nodeType === 3 ) ?\n\t\t\tsrc.target.parentNode :\n\t\t\tsrc.target;\n\n\t\tthis.currentTarget = src.currentTarget;\n\t\tthis.relatedTarget = src.relatedTarget;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || Date.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\tisSimulated: false,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Includes all common event props including KeyEvent and MouseEvent specific props\njQuery.each( {\n\taltKey: true,\n\tbubbles: true,\n\tcancelable: true,\n\tchangedTouches: true,\n\tctrlKey: true,\n\tdetail: true,\n\teventPhase: true,\n\tmetaKey: true,\n\tpageX: true,\n\tpageY: true,\n\tshiftKey: true,\n\tview: true,\n\t\"char\": true,\n\tcode: true,\n\tcharCode: true,\n\tkey: true,\n\tkeyCode: true,\n\tbutton: true,\n\tbuttons: true,\n\tclientX: true,\n\tclientY: true,\n\toffsetX: true,\n\toffsetY: true,\n\tpointerId: true,\n\tpointerType: true,\n\tscreenX: true,\n\tscreenY: true,\n\ttargetTouches: true,\n\ttoElement: true,\n\ttouches: true,\n\twhich: true\n}, jQuery.event.addProp );\n\njQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( type, delegateType ) {\n\tjQuery.event.special[ type ] = {\n\n\t\t// Utilize native event if possible so blur/focus sequence is correct\n\t\tsetup: function() {\n\n\t\t\t// Claim the first handler\n\t\t\t// dataPriv.set( this, \"focus\", ... )\n\t\t\t// dataPriv.set( this, \"blur\", ... )\n\t\t\tleverageNative( this, type, expectSync );\n\n\t\t\t// Return false to allow normal processing in the caller\n\t\t\treturn false;\n\t\t},\n\t\ttrigger: function() {\n\n\t\t\t// Force setup before trigger\n\t\t\tleverageNative( this, type );\n\n\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\treturn true;\n\t\t},\n\n\t\t// Suppress native focus or blur if we're currently inside\n\t\t// a leveraged native-event stack\n\t\t_default: function( event ) {\n\t\t\treturn dataPriv.get( event.target, type );\n\t\t},\n\n\t\tdelegateType: delegateType\n\t};\n} );\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\n//\n// Support: Safari 7 only\n// Safari sends mouseenter too often; see:\n// https://bugs.chromium.org/p/chromium/issues/detail?id=470258\n// for the description of the bug (it existed in older Chrome versions as well).\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event )  dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\n\nvar\n\n\t// Support: IE <=10 - 11, Edge 12 - 13 only\n\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\trnoInnerhtml = /<script|<style|<link/i,\n\n\t// checked=\"checked\" or checked\n\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\n\trcleanScript = /^\\s*<!\\[CDATA\\[|\\]\\]>\\s*$/g;\n\n// Prefer a tbody over its parent table for containing new rows\nfunction manipulationTarget( elem, content ) {\n\tif ( nodeName( elem, \"table\" ) &&\n\t\tnodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ) {\n\n\t\treturn jQuery( elem ).children( \"tbody\" )[ 0 ] || elem;\n\t}\n\n\treturn elem;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tif ( ( elem.type || \"\" ).slice( 0, 5 ) === \"true/\" ) {\n\t\telem.type = elem.type.slice( 5 );\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\tvar i, l, type, pdataOld, udataOld, udataCur, events;\n\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\t// 1. Copy private data: events, handlers, etc.\n\tif ( dataPriv.hasData( src ) ) {\n\t\tpdataOld = dataPriv.get( src );\n\t\tevents = pdataOld.events;\n\n\t\tif ( events ) {\n\t\t\tdataPriv.remove( dest, \"handle events\" );\n\n\t\t\tfor ( type in events ) {\n\t\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// 2. Copy user data\n\tif ( dataUser.hasData( src ) ) {\n\t\tudataOld = dataUser.access( src );\n\t\tudataCur = jQuery.extend( {}, udataOld );\n\n\t\tdataUser.set( dest, udataCur );\n\t}\n}\n\n// Fix IE bugs, see support tests\nfunction fixInput( src, dest ) {\n\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\tif ( nodeName === \"input\" && rcheckableType.test( src.type ) ) {\n\t\tdest.checked = src.checked;\n\n\t// Fails to return the selected option to the default selected state when cloning options\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = flat( args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tvalueIsFunction = isFunction( value );\n\n\t// We can't cloneNode fragments that contain checked, in WebKit\n\tif ( valueIsFunction ||\n\t\t\t( l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\t}\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (trac-8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\n\t\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Reenable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.access( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src && ( node.type || \"\" ).toLowerCase()  !== \"module\" ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl && !node.noModule ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src, {\n\t\t\t\t\t\t\t\t\tnonce: node.nonce || node.getAttribute( \"nonce\" )\n\t\t\t\t\t\t\t\t}, doc );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Unwrap a CDATA section containing script contents. This shouldn't be\n\t\t\t\t\t\t\t// needed as in XML documents they're already not visible when\n\t\t\t\t\t\t\t// inspecting element contents and in HTML documents they have no\n\t\t\t\t\t\t\t// meaning but we're preserving that logic for backwards compatibility.\n\t\t\t\t\t\t\t// This will be removed completely in 4.0. See gh-4904.\n\t\t\t\t\t\t\tDOMEval( node.textContent.replace( rcleanScript, \"\" ), node, doc );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nfunction remove( elem, selector, keepData ) {\n\tvar node,\n\t\tnodes = selector ? jQuery.filter( selector, elem ) : elem,\n\t\ti = 0;\n\n\tfor ( ; ( node = nodes[ i ] ) != null; i++ ) {\n\t\tif ( !keepData && node.nodeType === 1 ) {\n\t\t\tjQuery.cleanData( getAll( node ) );\n\t\t}\n\n\t\tif ( node.parentNode ) {\n\t\t\tif ( keepData && isAttached( node ) ) {\n\t\t\t\tsetGlobalEval( getAll( node, \"script\" ) );\n\t\t\t}\n\t\t\tnode.parentNode.removeChild( node );\n\t\t}\n\t}\n\n\treturn elem;\n}\n\njQuery.extend( {\n\thtmlPrefilter: function( html ) {\n\t\treturn html;\n\t},\n\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar i, l, srcElements, destElements,\n\t\t\tclone = elem.cloneNode( true ),\n\t\t\tinPage = isAttached( elem );\n\n\t\t// Fix IE cloning issues\n\t\tif ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&\n\t\t\t\t!jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\tfixInput( srcElements[ i ], destElements[ i ] );\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\t\tcloneCopyEvent( srcElements[ i ], destElements[ i ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\n\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t// .get() because push.apply(_, arraylike) throws on ancient WebKit\n\t\t\tpush.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar rcustomProp = /^--/;\n\n\nvar getStyles = function( elem ) {\n\n\t\t// Support: IE <=11 only, Firefox <=30 (trac-15098, trac-14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif ( !view || !view.opener ) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle( elem );\n\t};\n\nvar swap = function( elem, options, callback ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.call( elem );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n};\n\n\nvar rboxStyle = new RegExp( cssExpand.join( \"|\" ), \"i\" );\n\nvar whitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\";\n\n\nvar rtrimCSS = new RegExp(\n\t\"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\",\n\t\"g\"\n);\n\n\n\n\n( function() {\n\n\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t// so they're executed at the same time to save the second computation.\n\tfunction computeStyleTests() {\n\n\t\t// This is a singleton, we need to execute it only once\n\t\tif ( !div ) {\n\t\t\treturn;\n\t\t}\n\n\t\tcontainer.style.cssText = \"position:absolute;left:-11111px;width:60px;\" +\n\t\t\t\"margin-top:1px;padding:0;border:0\";\n\t\tdiv.style.cssText =\n\t\t\t\"position:relative;display:block;box-sizing:border-box;overflow:scroll;\" +\n\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\"width:60%;top:1%\";\n\t\tdocumentElement.appendChild( container ).appendChild( div );\n\n\t\tvar divStyle = window.getComputedStyle( div );\n\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\n\t\t// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44\n\t\treliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12;\n\n\t\t// Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3\n\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\tdiv.style.right = \"60%\";\n\t\tpixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36;\n\n\t\t// Support: IE 9 - 11 only\n\t\t// Detect misreporting of content dimensions for box-sizing:border-box elements\n\t\tboxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36;\n\n\t\t// Support: IE 9 only\n\t\t// Detect overflow:scroll screwiness (gh-3699)\n\t\t// Support: Chrome <=64\n\t\t// Don't get tricked when zoom affects offsetWidth (gh-4029)\n\t\tdiv.style.position = \"absolute\";\n\t\tscrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12;\n\n\t\tdocumentElement.removeChild( container );\n\n\t\t// Nullify the div so it wouldn't be stored in the memory and\n\t\t// it will also be a sign that checks already performed\n\t\tdiv = null;\n\t}\n\n\tfunction roundPixelMeasures( measure ) {\n\t\treturn Math.round( parseFloat( measure ) );\n\t}\n\n\tvar pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,\n\t\treliableTrDimensionsVal, reliableMarginLeftVal,\n\t\tcontainer = document.createElement( \"div\" ),\n\t\tdiv = document.createElement( \"div\" );\n\n\t// Finish early in limited (non-browser) environments\n\tif ( !div.style ) {\n\t\treturn;\n\t}\n\n\t// Support: IE <=9 - 11 only\n\t// Style of cloned element affects source element cloned (trac-8908)\n\tdiv.style.backgroundClip = \"content-box\";\n\tdiv.cloneNode( true ).style.backgroundClip = \"\";\n\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\tjQuery.extend( support, {\n\t\tboxSizingReliable: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn boxSizingReliableVal;\n\t\t},\n\t\tpixelBoxStyles: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelBoxStylesVal;\n\t\t},\n\t\tpixelPosition: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelPositionVal;\n\t\t},\n\t\treliableMarginLeft: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn reliableMarginLeftVal;\n\t\t},\n\t\tscrollboxSize: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn scrollboxSizeVal;\n\t\t},\n\n\t\t// Support: IE 9 - 11+, Edge 15 - 18+\n\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t// set in CSS while `offset*` properties report correct values.\n\t\t// Behavior in IE 9 is more subtle than in newer versions & it passes\n\t\t// some versions of this test; make sure not to make it pass there!\n\t\t//\n\t\t// Support: Firefox 70+\n\t\t// Only Firefox includes border widths\n\t\t// in computed dimensions. (gh-4529)\n\t\treliableTrDimensions: function() {\n\t\t\tvar table, tr, trChild, trStyle;\n\t\t\tif ( reliableTrDimensionsVal == null ) {\n\t\t\t\ttable = document.createElement( \"table\" );\n\t\t\t\ttr = document.createElement( \"tr\" );\n\t\t\t\ttrChild = document.createElement( \"div\" );\n\n\t\t\t\ttable.style.cssText = \"position:absolute;left:-11111px;border-collapse:separate\";\n\t\t\t\ttr.style.cssText = \"border:1px solid\";\n\n\t\t\t\t// Support: Chrome 86+\n\t\t\t\t// Height set through cssText does not get applied.\n\t\t\t\t// Computed height then comes back as 0.\n\t\t\t\ttr.style.height = \"1px\";\n\t\t\t\ttrChild.style.height = \"9px\";\n\n\t\t\t\t// Support: Android 8 Chrome 86+\n\t\t\t\t// In our bodyBackground.html iframe,\n\t\t\t\t// display for all div elements is set to \"inline\",\n\t\t\t\t// which causes a problem only in Android 8 Chrome 86.\n\t\t\t\t// Ensuring the div is display: block\n\t\t\t\t// gets around this issue.\n\t\t\t\ttrChild.style.display = \"block\";\n\n\t\t\t\tdocumentElement\n\t\t\t\t\t.appendChild( table )\n\t\t\t\t\t.appendChild( tr )\n\t\t\t\t\t.appendChild( trChild );\n\n\t\t\t\ttrStyle = window.getComputedStyle( tr );\n\t\t\t\treliableTrDimensionsVal = ( parseInt( trStyle.height, 10 ) +\n\t\t\t\t\tparseInt( trStyle.borderTopWidth, 10 ) +\n\t\t\t\t\tparseInt( trStyle.borderBottomWidth, 10 ) ) === tr.offsetHeight;\n\n\t\t\t\tdocumentElement.removeChild( table );\n\t\t\t}\n\t\t\treturn reliableTrDimensionsVal;\n\t\t}\n\t} );\n} )();\n\n\nfunction curCSS( elem, name, computed ) {\n\tvar width, minWidth, maxWidth, ret,\n\t\tisCustomProp = rcustomProp.test( name ),\n\n\t\t// Support: Firefox 51+\n\t\t// Retrieving style before computed somehow\n\t\t// fixes an issue with getting wrong values\n\t\t// on detached elements\n\t\tstyle = elem.style;\n\n\tcomputed = computed || getStyles( elem );\n\n\t// getPropertyValue is needed for:\n\t//   .css('filter') (IE 9 only, trac-12537)\n\t//   .css('--customProperty) (gh-3144)\n\tif ( computed ) {\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\n\t\t// trim whitespace for custom property (issue gh-4926)\n\t\tif ( isCustomProp ) {\n\n\t\t\t// rtrim treats U+000D CARRIAGE RETURN and U+000C FORM FEED\n\t\t\t// as whitespace while CSS does not, but this is not a problem\n\t\t\t// because CSS preprocessing replaces them with U+000A LINE FEED\n\t\t\t// (which *is* CSS whitespace)\n\t\t\t// https://www.w3.org/TR/css-syntax-3/#input-preprocessing\n\t\t\tret = ret.replace( rtrimCSS, \"$1\" );\n\t\t}\n\n\t\tif ( ret === \"\" && !isAttached( elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\n\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t// Android Browser returns percentage for some values,\n\t\t// but width seems to be reliably pixels.\n\t\t// This is against the CSSOM draft spec:\n\t\t// https://drafts.csswg.org/cssom/#resolved-values\n\t\tif ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\twidth = style.width;\n\t\t\tminWidth = style.minWidth;\n\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\tret = computed.width;\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.width = width;\n\t\t\tstyle.minWidth = minWidth;\n\t\t\tstyle.maxWidth = maxWidth;\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\n\nfunction addGetHookIf( conditionFn, hookFn ) {\n\n\t// Define the hook, we'll check on the first run if it's really needed.\n\treturn {\n\t\tget: function() {\n\t\t\tif ( conditionFn() ) {\n\n\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t// to missing dependency), remove it.\n\t\t\t\tdelete this.get;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\treturn ( this.get = hookFn ).apply( this, arguments );\n\t\t}\n\t};\n}\n\n\nvar cssPrefixes = [ \"Webkit\", \"Moz\", \"ms\" ],\n\temptyStyle = document.createElement( \"div\" ).style,\n\tvendorProps = {};\n\n// Return a vendor-prefixed property or undefined\nfunction vendorPropName( name ) {\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\n// Return a potentially-mapped jQuery.cssProps or vendor prefixed property\nfunction finalPropName( name ) {\n\tvar final = jQuery.cssProps[ name ] || vendorProps[ name ];\n\n\tif ( final ) {\n\t\treturn final;\n\t}\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\treturn vendorProps[ name ] = vendorPropName( name ) || name;\n}\n\n\nvar\n\n\t// Swappable if display is none or starts with table\n\t// except \"table\", \"table-cell\", or \"table-caption\"\n\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t};\n\nfunction setPositiveNumber( _elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {\n\tvar i = dimension === \"width\" ? 1 : 0,\n\t\textra = 0,\n\t\tdelta = 0;\n\n\t// Adjustment may not be necessary\n\tif ( box === ( isBorderBox ? \"border\" : \"content\" ) ) {\n\t\treturn 0;\n\t}\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin\n\t\tif ( box === \"margin\" ) {\n\t\t\tdelta += jQuery.css( elem, box + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\t// If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\t\tif ( !isBorderBox ) {\n\n\t\t\t// Add padding\n\t\t\tdelta += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// For \"border\" or \"margin\", add border\n\t\t\tif ( box !== \"padding\" ) {\n\t\t\t\tdelta += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\n\t\t\t// But still keep track of it otherwise\n\t\t\t} else {\n\t\t\t\textra += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\n\t\t// If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n\t\t// \"padding\" or \"margin\"\n\t\t} else {\n\n\t\t\t// For \"content\", subtract padding\n\t\t\tif ( box === \"content\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// For \"content\" or \"padding\", subtract border\n\t\t\tif ( box !== \"margin\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\tif ( !isBorderBox && computedVal >= 0 ) {\n\n\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\tdelta += Math.max( 0, Math.ceil(\n\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\tcomputedVal -\n\t\t\tdelta -\n\t\t\textra -\n\t\t\t0.5\n\n\t\t// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter\n\t\t// Use an explicit zero to avoid NaN (gh-3964)\n\t\t) ) || 0;\n\t}\n\n\treturn delta;\n}\n\nfunction getWidthOrHeight( elem, dimension, extra ) {\n\n\t// Start with computed style\n\tvar styles = getStyles( elem ),\n\n\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\n\t\t// Fake content-box until we know it's needed to know the true value.\n\t\tboxSizingNeeded = !support.boxSizingReliable() || extra,\n\t\tisBorderBox = boxSizingNeeded &&\n\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\tvalueIsBorderBox = isBorderBox,\n\n\t\tval = curCSS( elem, dimension, styles ),\n\t\toffsetProp = \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 );\n\n\t// Support: Firefox <=54\n\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\tif ( rnumnonpx.test( val ) ) {\n\t\tif ( !extra ) {\n\t\t\treturn val;\n\t\t}\n\t\tval = \"auto\";\n\t}\n\n\n\t// Support: IE 9 - 11 only\n\t// Use offsetWidth/offsetHeight for when box sizing is unreliable.\n\t// In those cases, the computed value can be trusted to be border-box.\n\tif ( ( !support.boxSizingReliable() && isBorderBox ||\n\n\t\t// Support: IE 10 - 11+, Edge 15 - 18+\n\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t// set in CSS while `offset*` properties report correct values.\n\t\t// Interestingly, in some cases IE 9 doesn't suffer from this issue.\n\t\t!support.reliableTrDimensions() && nodeName( elem, \"tr\" ) ||\n\n\t\t// Fall back to offsetWidth/offsetHeight when value is \"auto\"\n\t\t// This happens for inline elements with no explicit setting (gh-3571)\n\t\tval === \"auto\" ||\n\n\t\t// Support: Android <=4.1 - 4.3 only\n\t\t// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)\n\t\t!parseFloat( val ) && jQuery.css( elem, \"display\", false, styles ) === \"inline\" ) &&\n\n\t\t// Make sure the element is visible & connected\n\t\telem.getClientRects().length ) {\n\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t\t// Where available, offsetWidth/offsetHeight approximate border box dimensions.\n\t\t// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\n\t\t// retrieved value as a content box dimension.\n\t\tvalueIsBorderBox = offsetProp in elem;\n\t\tif ( valueIsBorderBox ) {\n\t\t\tval = elem[ offsetProp ];\n\t\t}\n\t}\n\n\t// Normalize \"\" and auto\n\tval = parseFloat( val ) || 0;\n\n\t// Adjust for the element's box model\n\treturn ( val +\n\t\tboxModelAdjustment(\n\t\t\telem,\n\t\t\tdimension,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles,\n\n\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\tval\n\t\t)\n\t) + \"px\";\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\" );\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Don't automatically add \"px\" to these possibly-unitless properties\n\tcssNumber: {\n\t\t\"animationIterationCount\": true,\n\t\t\"columnCount\": true,\n\t\t\"fillOpacity\": true,\n\t\t\"flexGrow\": true,\n\t\t\"flexShrink\": true,\n\t\t\"fontWeight\": true,\n\t\t\"gridArea\": true,\n\t\t\"gridColumn\": true,\n\t\t\"gridColumnEnd\": true,\n\t\t\"gridColumnStart\": true,\n\t\t\"gridRow\": true,\n\t\t\"gridRowEnd\": true,\n\t\t\"gridRowStart\": true,\n\t\t\"lineHeight\": true,\n\t\t\"opacity\": true,\n\t\t\"order\": true,\n\t\t\"orphans\": true,\n\t\t\"widows\": true,\n\t\t\"zIndex\": true,\n\t\t\"zoom\": true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name ),\n\t\t\tstyle = elem.style;\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to query the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (trac-7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug trac-9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (trac-7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\t// The isCustomProp check can be removed in jQuery 4.0 when we only auto-append\n\t\t\t// \"px\" to a few hardcoded values.\n\t\t\tif ( type === \"number\" && !isCustomProp ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? \"\" : \"px\" );\n\t\t\t}\n\n\t\t\t// background-* props affect original clone's values\n\t\t\tif ( !support.clearCloneStyle && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tif ( isCustomProp ) {\n\t\t\t\t\tstyle.setProperty( name, value );\n\t\t\t\t} else {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name );\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to modify the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( _i, dimension ) {\n\tjQuery.cssHooks[ dimension ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\treturn rdisplayswap.test( jQuery.css( elem, \"display\" ) ) &&\n\n\t\t\t\t\t// Support: Safari 8+\n\t\t\t\t\t// Table columns in Safari have non-zero offsetWidth & zero\n\t\t\t\t\t// getBoundingClientRect().width unless display is changed.\n\t\t\t\t\t// Support: IE <=11 only\n\t\t\t\t\t// Running getBoundingClientRect on a disconnected node\n\t\t\t\t\t// in IE throws an error.\n\t\t\t\t\t( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?\n\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\treturn getWidthOrHeight( elem, dimension, extra );\n\t\t\t\t\t} ) :\n\t\t\t\t\tgetWidthOrHeight( elem, dimension, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = getStyles( elem ),\n\n\t\t\t\t// Only read styles.position if the test has a chance to fail\n\t\t\t\t// to avoid forcing a reflow.\n\t\t\t\tscrollboxSizeBuggy = !support.scrollboxSize() &&\n\t\t\t\t\tstyles.position === \"absolute\",\n\n\t\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n\t\t\t\tboxSizingNeeded = scrollboxSizeBuggy || extra,\n\t\t\t\tisBorderBox = boxSizingNeeded &&\n\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\tsubtract = extra ?\n\t\t\t\t\tboxModelAdjustment(\n\t\t\t\t\t\telem,\n\t\t\t\t\t\tdimension,\n\t\t\t\t\t\textra,\n\t\t\t\t\t\tisBorderBox,\n\t\t\t\t\t\tstyles\n\t\t\t\t\t) :\n\t\t\t\t\t0;\n\n\t\t\t// Account for unreliable border-box dimensions by comparing offset* to computed and\n\t\t\t// faking a content-box to get border and padding (gh-3699)\n\t\t\tif ( isBorderBox && scrollboxSizeBuggy ) {\n\t\t\t\tsubtract -= Math.ceil(\n\t\t\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\t\t\tparseFloat( styles[ dimension ] ) -\n\t\t\t\t\tboxModelAdjustment( elem, dimension, \"border\", false, styles ) -\n\t\t\t\t\t0.5\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ dimension ] = value;\n\t\t\t\tvalue = jQuery.css( elem, dimension );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\njQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn ( parseFloat( curCSS( elem, \"marginLeft\" ) ) ||\n\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap( elem, { marginLeft: 0 }, function() {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t} )\n\t\t\t) + \"px\";\n\t\t}\n\t}\n);\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( prefix !== \"margin\" ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t}\n} );\n\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 && (\n\t\t\t\tjQuery.cssHooks[ tween.prop ] ||\n\t\t\t\t\ttween.elem.style[ finalPropName( tween.prop ) ] != null ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Support: IE <=9 only\n// Panic based approach to setting things on disconnected nodes\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\tset: function( tween ) {\n\t\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\n\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back compat <1.8 extension point\njQuery.fx.step = {};\n\n\n\n\nvar\n\tfxNow, inProgress,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\nfunction schedule() {\n\tif ( inProgress ) {\n\t\tif ( document.hidden === false && window.requestAnimationFrame ) {\n\t\t\twindow.requestAnimationFrame( schedule );\n\t\t} else {\n\t\t\twindow.setTimeout( schedule, jQuery.fx.interval );\n\t\t}\n\n\t\tjQuery.fx.tick();\n\t}\n}\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = Date.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\tisBox = \"width\" in props || \"height\" in props,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHiddenWithinTree( elem ),\n\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t// Queue-skipping animations hijack the fx hooks\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Detect show/hide animations\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.test( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\n\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\t\t}\n\t}\n\n\t// Bail out if this is a no-op like .hide().hide()\n\tpropTween = !jQuery.isEmptyObject( props );\n\tif ( !propTween && jQuery.isEmptyObject( orig ) ) {\n\t\treturn;\n\t}\n\n\t// Restrict \"overflow\" and \"display\" styles during box animations\n\tif ( isBox && elem.nodeType === 1 ) {\n\n\t\t// Support: IE <=9 - 11, Edge 12 - 15\n\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t// from identically-valued overflowX and overflowY and Edge just mirrors\n\t\t// the overflowX value there.\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\trestoreDisplay = dataShow && dataShow.display;\n\t\tif ( restoreDisplay == null ) {\n\t\t\trestoreDisplay = dataPriv.get( elem, \"display\" );\n\t\t}\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\tif ( display === \"none\" ) {\n\t\t\tif ( restoreDisplay ) {\n\t\t\t\tdisplay = restoreDisplay;\n\t\t\t} else {\n\n\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\t\t\tshowHide( [ elem ] );\n\t\t\t}\n\t\t}\n\n\t\t// Animate inline elements as inline-block\n\t\tif ( display === \"inline\" || display === \"inline-block\" && restoreDisplay != null ) {\n\t\t\tif ( jQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\tif ( !propTween ) {\n\t\t\t\t\tanim.done( function() {\n\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t} );\n\t\t\t\t\tif ( restoreDisplay == null ) {\n\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// Implement show/hide animations\n\tpropTween = false;\n\tfor ( prop in orig ) {\n\n\t\t// General show/hide setup for this element animation\n\t\tif ( !propTween ) {\n\t\t\tif ( dataShow ) {\n\t\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdataShow = dataPriv.access( elem, \"fxshow\", { display: restoreDisplay } );\n\t\t\t}\n\n\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\tif ( toggle ) {\n\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t}\n\n\t\t\t// Show elements before animating them\n\t\t\tif ( hidden ) {\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t}\n\n\t\t\t/* eslint-disable no-loop-func */\n\n\t\t\tanim.done( function() {\n\n\t\t\t\t/* eslint-enable no-loop-func */\n\n\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\tif ( !hidden ) {\n\t\t\t\t\tshowHide( [ elem ] );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( elem, \"fxshow\" );\n\t\t\t\tfor ( prop in orig ) {\n\t\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t// Per-property setup\n\t\tpropTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\t\tif ( !( prop in dataShow ) ) {\n\t\t\tdataShow[ prop ] = propTween.start;\n\t\t\tif ( hidden ) {\n\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\tpropTween.start = 0;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = camelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( Array.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\t// Support: Android 2.3 only\n\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (trac-12497)\n\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\tpercent = 1 - temp,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\t// If there's more to do, yield\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t}\n\n\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\tif ( !length ) {\n\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t}\n\n\t\t\t// Resolve the animation and report its conclusion\n\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\treturn false;\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( isFunction( result.stop ) ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tresult.stop.bind( result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( isFunction( animation.opts.start ) ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\t// Attach callbacks from options\n\tanimation\n\t\t.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\treturn animation;\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( isFunction( props ) ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnothtmlwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || !fn && easing ||\n\t\t\tisFunction( speed ) && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && !isFunction( easing ) && easing\n\t};\n\n\t// Go to the end state if fx are off\n\tif ( jQuery.fx.off ) {\n\t\topt.duration = 0;\n\n\t} else {\n\t\tif ( typeof opt.duration !== \"number\" ) {\n\t\t\tif ( opt.duration in jQuery.fx.speeds ) {\n\t\t\t\topt.duration = jQuery.fx.speeds[ opt.duration ];\n\n\t\t\t} else {\n\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( isFunction( opt.old ) ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHiddenWithinTree ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || dataPriv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\n\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( _i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = Date.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tjQuery.fx.start();\n};\n\njQuery.fx.interval = 13;\njQuery.fx.start = function() {\n\tif ( inProgress ) {\n\t\treturn;\n\t}\n\n\tinProgress = true;\n\tschedule();\n};\n\njQuery.fx.stop = function() {\n\tinProgress = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n\n// Based off of the plugin by Clint Helfers, with permission.\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\n\n( function() {\n\tvar input = document.createElement( \"input\" ),\n\t\tselect = document.createElement( \"select\" ),\n\t\topt = select.appendChild( document.createElement( \"option\" ) );\n\n\tinput.type = \"checkbox\";\n\n\t// Support: Android <=4.3 only\n\t// Default value for a checkbox should be \"on\"\n\tsupport.checkOn = input.value !== \"\";\n\n\t// Support: IE <=11 only\n\t// Must access selectedIndex to make default options select\n\tsupport.optSelected = opt.selected;\n\n\t// Support: IE <=11 only\n\t// An input loses its value after becoming a radio\n\tinput = document.createElement( \"input\" );\n\tinput.value = \"t\";\n\tinput.type = \"radio\";\n\tsupport.radioValue = input.value === \"t\";\n} )();\n\n\nvar boolHook,\n\tattrHandle = jQuery.expr.attrHandle;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// Attribute hooks are determined by the lowercase version\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\thooks = jQuery.attrHooks[ name.toLowerCase() ] ||\n\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value + \"\" );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = jQuery.find.attr( elem, name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( !support.radioValue && value === \"radio\" &&\n\t\t\t\t\tnodeName( elem, \"input\" ) ) {\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name,\n\t\t\ti = 0,\n\n\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\tattrNames = value && value.match( rnothtmlwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Hooks for boolean attributes\nboolHook = {\n\tset: function( elem, value, name ) {\n\t\tif ( value === false ) {\n\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else {\n\t\t\telem.setAttribute( name, name );\n\t\t}\n\t\treturn name;\n\t}\n};\n\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( _i, name ) {\n\tvar getter = attrHandle[ name ] || jQuery.find.attr;\n\n\tattrHandle[ name ] = function( elem, name, isXML ) {\n\t\tvar ret, handle,\n\t\t\tlowercaseName = name.toLowerCase();\n\n\t\tif ( !isXML ) {\n\n\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\thandle = attrHandle[ lowercaseName ];\n\t\t\tattrHandle[ lowercaseName ] = ret;\n\t\t\tret = getter( elem, name, isXML ) != null ?\n\t\t\t\tlowercaseName :\n\t\t\t\tnull;\n\t\t\tattrHandle[ lowercaseName ] = handle;\n\t\t}\n\t\treturn ret;\n\t};\n} );\n\n\n\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// Support: IE <=9 - 11 only\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// Use proper attribute retrieval (trac-12072)\n\t\t\t\tvar tabindex = jQuery.find.attr( elem, \"tabindex\" );\n\n\t\t\t\tif ( tabindex ) {\n\t\t\t\t\treturn parseInt( tabindex, 10 );\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\t\t\t\t\trclickable.test( elem.nodeName ) &&\n\t\t\t\t\telem.href\n\t\t\t\t) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\n// Support: IE <=11 only\n// Accessing the selectedIndex property\n// forces the browser to respect setting selected\n// on the option\n// The getter ensures a default option is selected\n// when in an optgroup\n// eslint rule \"no-unused-expressions\" is disabled for this code\n// since it considers such accessions noop\nif ( !support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n\n\n\n\t// Strip and collapse whitespace according to HTML spec\n\t// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\n\tfunction stripAndCollapse( value ) {\n\t\tvar tokens = value.match( rnothtmlwhite ) || [];\n\t\treturn tokens.join( \" \" );\n\t}\n\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\nfunction classesToArray( value ) {\n\tif ( Array.isArray( value ) ) {\n\t\treturn value;\n\t}\n\tif ( typeof value === \"string\" ) {\n\t\treturn value.match( rnothtmlwhite ) || [];\n\t}\n\treturn [];\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tcurValue = getClass( this );\n\t\t\t\tcur = this.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\t\tclassName = classNames[ i ];\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + className + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += className + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\tthis.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tcurValue = getClass( this );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = this.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\t\tclassName = classNames[ i ];\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + className + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + className + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\tthis.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar classNames, className, i, self,\n\t\t\ttype = typeof value,\n\t\t\tisValidValue = type === \"string\" || Array.isArray( value );\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\tif ( typeof stateVal === \"boolean\" && isValidValue ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\treturn this.each( function() {\n\t\t\tif ( isValidValue ) {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\tself = jQuery( this );\n\n\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\tclassName = classNames[ i ];\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Toggle whole class name\n\t\t\t} else if ( value === undefined || type === \"boolean\" ) {\n\t\t\t\tclassName = getClass( this );\n\t\t\t\tif ( className ) {\n\n\t\t\t\t\t// Store className if set\n\t\t\t\t\tdataPriv.set( this, \"__className__\", className );\n\t\t\t\t}\n\n\t\t\t\t// If the element has a class name or if we're passed `false`,\n\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\tif ( this.setAttribute ) {\n\t\t\t\t\tthis.setAttribute( \"class\",\n\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\t\"\" :\n\t\t\t\t\t\t\tdataPriv.get( this, \"__className__\" ) || \"\"\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + stripAndCollapse( getClass( elem ) ) + \" \" ).indexOf( className ) > -1 ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\n\n\n\nvar rreturn = /\\r/g;\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, valueIsFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\t// Handle most common string cases\n\t\t\t\tif ( typeof ret === \"string\" ) {\n\t\t\t\t\treturn ret.replace( rreturn, \"\" );\n\t\t\t\t}\n\n\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tvalueIsFunction = isFunction( value );\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( Array.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\tvar val = jQuery.find.attr( elem, \"value\" );\n\t\t\t\treturn val != null ?\n\t\t\t\t\tval :\n\n\t\t\t\t\t// Support: IE <=10 - 11 only\n\t\t\t\t\t// option.text throws exceptions (trac-14686, trac-14858)\n\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\tstripAndCollapse( jQuery.text( elem ) );\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option, i,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\tif ( index < 0 ) {\n\t\t\t\t\ti = max;\n\n\t\t\t\t} else {\n\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t}\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t// IE8-9 doesn't update selected after form reset (trac-2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t/* eslint-disable no-cond-assign */\n\n\t\t\t\t\tif ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1\n\t\t\t\t\t) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t/* eslint-enable no-cond-assign */\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( Array.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n\tif ( !support.checkOn ) {\n\t\tjQuery.valHooks[ this ].get = function( elem ) {\n\t\t\treturn elem.getAttribute( \"value\" ) === null ? \"on\" : elem.value;\n\t\t};\n\t}\n} );\n\n\n\n\n// Return jQuery for attributes-only inclusion\n\n\nsupport.focusin = \"onfocusin\" in window;\n\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\tstopPropagationCallback = function( e ) {\n\t\te.stopPropagation();\n\t};\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = lastElement = tmp = elem = elem || document;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (trac-9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tlastElement = cur;\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( dataPriv.get( cur, \"events\" ) || Object.create( null ) )[ event.type ] &&\n\t\t\t\tdataPriv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( ( !special._default ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (trac-6170)\n\t\t\t\tif ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.addEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\telem[ type ]();\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.removeEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\t// Used only for `focus(in | out)` events\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\n\n// Support: Firefox <=44\n// Firefox doesn't have focus(in | out) events\n// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n//\n// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1\n// focus(in | out) events fire after focus & blur events,\n// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857\nif ( !support.focusin ) {\n\tjQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\n\n\t\t// Attach a single capturing handler on the document while someone wants focusin/focusout\n\t\tvar handler = function( event ) {\n\t\t\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );\n\t\t};\n\n\t\tjQuery.event.special[ fix ] = {\n\t\t\tsetup: function() {\n\n\t\t\t\t// Handle: regular nodes (via `this.ownerDocument`), window\n\t\t\t\t// (via `this.document`) & document (via `this`).\n\t\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix );\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.addEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t\tdataPriv.access( doc, fix, ( attaches || 0 ) + 1 );\n\t\t\t},\n\t\t\tteardown: function() {\n\t\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix ) - 1;\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.removeEventListener( orig, handler, true );\n\t\t\t\t\tdataPriv.remove( doc, fix );\n\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.access( doc, fix, attaches );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t} );\n}\nvar location = window.location;\n\nvar nonce = { guid: Date.now() };\n\nvar rquery = ( /\\?/ );\n\n\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml, parserErrorElem;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE 9 - 11 only\n\t// IE throws on parseFromString with invalid input.\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {}\n\n\tparserErrorElem = xml && xml.getElementsByTagName( \"parsererror\" )[ 0 ];\n\tif ( !xml || parserErrorElem ) {\n\t\tjQuery.error( \"Invalid XML: \" + (\n\t\t\tparserErrorElem ?\n\t\t\t\tjQuery.map( parserErrorElem.childNodes, function( el ) {\n\t\t\t\t\treturn el.textContent;\n\t\t\t\t} ).join( \"\\n\" ) :\n\t\t\t\tdata\n\t\t) );\n\t}\n\treturn xml;\n};\n\n\nvar\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( Array.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && toType( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, valueOrFunction ) {\n\n\t\t\t// If value is a function, invoke it and use its return value\n\t\t\tvar value = isFunction( valueOrFunction ) ?\n\t\t\t\tvalueOrFunction() :\n\t\t\t\tvalueOrFunction;\n\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" +\n\t\t\t\tencodeURIComponent( value == null ? \"\" : value );\n\t\t};\n\n\tif ( a == null ) {\n\t\treturn \"\";\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} ).filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} ).map( function( _i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\tif ( val == null ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\treturn jQuery.map( val, function( val ) {\n\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\n\nvar\n\tr20 = /%20/g,\n\trhash = /#.*$/,\n\trantiCache = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t// trac-7653, trac-8125, trac-8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t *    - BEFORE asking for a transport\n\t *    - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Anchor tag for parsing the document origin\n\toriginAnchor = document.createElement( \"a\" );\n\noriginAnchor.href = location.href;\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];\n\n\t\tif ( isFunction( func ) ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[ 0 ] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes trac-9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s.throws ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: location.href,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": JSON.parse,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\tcompleted,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// uncached part of the url\n\t\t\tuncached,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( completed ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() + \" \" ] =\n\t\t\t\t\t\t\t\t\t( responseHeaders[ match[ 1 ].toLowerCase() + \" \" ] || [] )\n\t\t\t\t\t\t\t\t\t\t.concat( match[ 2 ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() + \" \" ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match.join( \", \" );\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\tname = requestHeadersNames[ name.toLowerCase() ] =\n\t\t\t\t\t\t\trequestHeadersNames[ name.toLowerCase() ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( completed ) {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR );\n\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (trac-10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || location.href ) + \"\" )\n\t\t\t.replace( rprotocol, location.protocol + \"//\" );\n\n\t\t// Alias method option to type as per ticket trac-12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = ( s.dataType || \"*\" ).toLowerCase().match( rnothtmlwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document.createElement( \"a\" );\n\n\t\t\t// Support: IE <=8 - 11, Edge 12 - 15\n\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t// e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE <=8 - 11 only\n\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\n\t\t\t}\n\t\t}\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( completed ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (trac-15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\t// Remove hash to simplify url manipulation\n\t\tcacheURL = s.url.replace( rhash, \"\" );\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// Remember the hash so we can put it back\n\t\t\tuncached = s.url.slice( cacheURL.length );\n\n\t\t\t// If data is available and should be processed, append data to url\n\t\t\tif ( s.data && ( s.processData || typeof s.data === \"string\" ) ) {\n\t\t\t\tcacheURL += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data;\n\n\t\t\t\t// trac-9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add or update anti-cache param if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\tcacheURL = cacheURL.replace( rantiCache, \"$1\" );\n\t\t\t\tuncached = ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" + ( nonce.guid++ ) +\n\t\t\t\t\tuncached;\n\t\t\t}\n\n\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\ts.url = cacheURL + uncached;\n\n\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t} else if ( s.data && s.processData &&\n\t\t\t( s.contentType || \"\" ).indexOf( \"application/x-www-form-urlencoded\" ) === 0 ) {\n\t\t\ts.data = s.data.replace( r20, \"+\" );\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tcompleteDeferred.add( s.complete );\n\t\tjqXHR.done( s.success );\n\t\tjqXHR.fail( s.error );\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( completed ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tcompleted = false;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\tif ( completed ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\n\t\t\t\t// Propagate others as results\n\t\t\t\tdone( -1, e );\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Ignore repeat invocations\n\t\t\tif ( completed ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcompleted = true;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Use a noop converter for missing script but not if jsonp\n\t\t\tif ( !isSuccess &&\n\t\t\t\tjQuery.inArray( \"script\", s.dataTypes ) > -1 &&\n\t\t\t\tjQuery.inArray( \"json\", s.dataTypes ) < 0 ) {\n\t\t\t\ts.converters[ \"text script\" ] = function() {};\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( _i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// Shift arguments if data argument was omitted\n\t\tif ( isFunction( data ) ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\njQuery.ajaxPrefilter( function( s ) {\n\tvar i;\n\tfor ( i in s.headers ) {\n\t\tif ( i.toLowerCase() === \"content-type\" ) {\n\t\t\ts.contentType = s.headers[ i ] || \"\";\n\t\t}\n\t}\n} );\n\n\njQuery._evalUrl = function( url, options, doc ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (trac-11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tcache: true,\n\t\tasync: false,\n\t\tglobal: false,\n\n\t\t// Only evaluate the response if it is successful (gh-4126)\n\t\t// dataFilter is not invoked for failure responses, so using it instead\n\t\t// of the default converter is kludgy but it works.\n\t\tconverters: {\n\t\t\t\"text script\": function() {}\n\t\t},\n\t\tdataFilter: function( response ) {\n\t\t\tjQuery.globalEval( response, options, doc );\n\t\t}\n\t} );\n};\n\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( this[ 0 ] ) {\n\t\t\tif ( isFunction( html ) ) {\n\t\t\t\thtml = html.call( this[ 0 ] );\n\t\t\t}\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( isFunction( html ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar htmlIsFunction = isFunction( html );\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function( selector ) {\n\t\tthis.parent( selector ).not( \"body\" ).each( function() {\n\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t} );\n\t\treturn this;\n\t}\n} );\n\n\njQuery.expr.pseudos.hidden = function( elem ) {\n\treturn !jQuery.expr.pseudos.visible( elem );\n};\njQuery.expr.pseudos.visible = function( elem ) {\n\treturn !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );\n};\n\n\n\n\njQuery.ajaxSettings.xhr = function() {\n\ttry {\n\t\treturn new window.XMLHttpRequest();\n\t} catch ( e ) {}\n};\n\nvar xhrSuccessStatus = {\n\n\t\t// File protocol always yields status code 0, assume 200\n\t\t0: 200,\n\n\t\t// Support: IE <=9 only\n\t\t// trac-1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\txhrSupported = jQuery.ajaxSettings.xhr();\n\nsupport.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\nsupport.ajax = xhrSupported = !!xhrSupported;\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback, errorCallback;\n\n\t// Cross domain only allowed if supported through XMLHttpRequest\n\tif ( support.cors || xhrSupported && !options.crossDomain ) {\n\t\treturn {\n\t\t\tsend: function( headers, complete ) {\n\t\t\t\tvar i,\n\t\t\t\t\txhr = options.xhr();\n\n\t\t\t\txhr.open(\n\t\t\t\t\toptions.type,\n\t\t\t\t\toptions.url,\n\t\t\t\t\toptions.async,\n\t\t\t\t\toptions.username,\n\t\t\t\t\toptions.password\n\t\t\t\t);\n\n\t\t\t\t// Apply custom fields if provided\n\t\t\t\tif ( options.xhrFields ) {\n\t\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Override mime type if needed\n\t\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t\t}\n\n\t\t\t\t// X-Requested-With header\n\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t\t}\n\n\t\t\t\t// Set headers\n\t\t\t\tfor ( i in headers ) {\n\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t\t}\n\n\t\t\t\t// Callback\n\t\t\t\tcallback = function( type ) {\n\t\t\t\t\treturn function() {\n\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\tcallback = errorCallback = xhr.onload =\n\t\t\t\t\t\t\t\txhr.onerror = xhr.onabort = xhr.ontimeout =\n\t\t\t\t\t\t\t\t\txhr.onreadystatechange = null;\n\n\t\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\n\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t// On a manual native abort, IE9 throws\n\t\t\t\t\t\t\t\t// errors on any property access that is not readyState\n\t\t\t\t\t\t\t\tif ( typeof xhr.status !== \"number\" ) {\n\t\t\t\t\t\t\t\t\tcomplete( 0, \"error\" );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see trac-8605, trac-14207\n\t\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t// IE9 has no XHR2 but throws on binary (trac-11426)\n\t\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t\t( xhr.responseType || \"text\" ) !== \"text\"  ||\n\t\t\t\t\t\t\t\t\ttypeof xhr.responseText !== \"string\" ?\n\t\t\t\t\t\t\t\t\t\t{ binary: xhr.response } :\n\t\t\t\t\t\t\t\t\t\t{ text: xhr.responseText },\n\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\t// Listen to events\n\t\t\t\txhr.onload = callback();\n\t\t\t\terrorCallback = xhr.onerror = xhr.ontimeout = callback( \"error\" );\n\n\t\t\t\t// Support: IE 9 only\n\t\t\t\t// Use onreadystatechange to replace onabort\n\t\t\t\t// to handle uncaught aborts\n\t\t\t\tif ( xhr.onabort !== undefined ) {\n\t\t\t\t\txhr.onabort = errorCallback;\n\t\t\t\t} else {\n\t\t\t\t\txhr.onreadystatechange = function() {\n\n\t\t\t\t\t\t// Check readyState before timeout as it changes\n\t\t\t\t\t\tif ( xhr.readyState === 4 ) {\n\n\t\t\t\t\t\t\t// Allow onerror to be called first,\n\t\t\t\t\t\t\t// but that will not handle a native abort\n\t\t\t\t\t\t\t// Also, save errorCallback to a variable\n\t\t\t\t\t\t\t// as xhr.onerror cannot be accessed\n\t\t\t\t\t\t\twindow.setTimeout( function() {\n\t\t\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\t\t\terrorCallback();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// Create the abort callback\n\t\t\t\tcallback = callback( \"abort\" );\n\n\t\t\t\ttry {\n\n\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// trac-14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\n// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)\njQuery.ajaxPrefilter( function( s ) {\n\tif ( s.crossDomain ) {\n\t\ts.contents.script = false;\n\t}\n} );\n\n// Install script dataType\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tcontents: {\n\t\tscript: /\\b(?:java|ecma)script\\b/\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\tif ( s.crossDomain ) {\n\t\ts.type = \"GET\";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\n\t// This transport only deals with cross domain or forced-by-attrs requests\n\tif ( s.crossDomain || s.scriptAttrs ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \"<script>\" )\n\t\t\t\t\t.attr( s.scriptAttrs || {} )\n\t\t\t\t\t.prop( { charset: s.scriptCharset, src: s.url } )\n\t\t\t\t\t.on( \"load error\", callback = function( evt ) {\n\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\tif ( evt ) {\n\t\t\t\t\t\t\tcomplete( evt.type === \"error\" ? 404 : 200, evt.type );\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\n\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\tdocument.head.appendChild( script[ 0 ] );\n\t\t\t},\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\nvar oldCallbacks = [],\n\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n// Default jsonp settings\njQuery.ajaxSetup( {\n\tjsonp: \"callback\",\n\tjsonpCallback: function() {\n\t\tvar callback = oldCallbacks.pop() || ( jQuery.expando + \"_\" + ( nonce.guid++ ) );\n\t\tthis[ callback ] = true;\n\t\treturn callback;\n\t}\n} );\n\n// Detect, normalize options and install callbacks for jsonp requests\njQuery.ajaxPrefilter( \"json jsonp\", function( s, originalSettings, jqXHR ) {\n\n\tvar callbackName, overwritten, responseContainer,\n\t\tjsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?\n\t\t\t\"url\" :\n\t\t\ttypeof s.data === \"string\" &&\n\t\t\t\t( s.contentType || \"\" )\n\t\t\t\t\t.indexOf( \"application/x-www-form-urlencoded\" ) === 0 &&\n\t\t\t\trjsonp.test( s.data ) && \"data\"\n\t\t);\n\n\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\tif ( jsonProp || s.dataTypes[ 0 ] === \"jsonp\" ) {\n\n\t\t// Get callback name, remembering preexisting value associated with it\n\t\tcallbackName = s.jsonpCallback = isFunction( s.jsonpCallback ) ?\n\t\t\ts.jsonpCallback() :\n\t\t\ts.jsonpCallback;\n\n\t\t// Insert callback into url or form data\n\t\tif ( jsonProp ) {\n\t\t\ts[ jsonProp ] = s[ jsonProp ].replace( rjsonp, \"$1\" + callbackName );\n\t\t} else if ( s.jsonp !== false ) {\n\t\t\ts.url += ( rquery.test( s.url ) ? \"&\" : \"?\" ) + s.jsonp + \"=\" + callbackName;\n\t\t}\n\n\t\t// Use data converter to retrieve json after script execution\n\t\ts.converters[ \"script json\" ] = function() {\n\t\t\tif ( !responseContainer ) {\n\t\t\t\tjQuery.error( callbackName + \" was not called\" );\n\t\t\t}\n\t\t\treturn responseContainer[ 0 ];\n\t\t};\n\n\t\t// Force json dataType\n\t\ts.dataTypes[ 0 ] = \"json\";\n\n\t\t// Install callback\n\t\toverwritten = window[ callbackName ];\n\t\twindow[ callbackName ] = function() {\n\t\t\tresponseContainer = arguments;\n\t\t};\n\n\t\t// Clean-up function (fires after converters)\n\t\tjqXHR.always( function() {\n\n\t\t\t// If previous value didn't exist - remove it\n\t\t\tif ( overwritten === undefined ) {\n\t\t\t\tjQuery( window ).removeProp( callbackName );\n\n\t\t\t// Otherwise restore preexisting value\n\t\t\t} else {\n\t\t\t\twindow[ callbackName ] = overwritten;\n\t\t\t}\n\n\t\t\t// Save back as free\n\t\t\tif ( s[ callbackName ] ) {\n\n\t\t\t\t// Make sure that re-using the options doesn't screw things around\n\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t// Save the callback name for future use\n\t\t\t\toldCallbacks.push( callbackName );\n\t\t\t}\n\n\t\t\t// Call if it was a function and we have a response\n\t\t\tif ( responseContainer && isFunction( overwritten ) ) {\n\t\t\t\toverwritten( responseContainer[ 0 ] );\n\t\t\t}\n\n\t\t\tresponseContainer = overwritten = undefined;\n\t\t} );\n\n\t\t// Delegate to script\n\t\treturn \"script\";\n\t}\n} );\n\n\n\n\n// Support: Safari 8 only\n// In Safari 8 documents created via document.implementation.createHTMLDocument\n// collapse sibling forms: the second one becomes a child of the first one.\n// Because of that, this security measure has to be disabled in Safari 8.\n// https://bugs.webkit.org/show_bug.cgi?id=137337\nsupport.createHTMLDocument = ( function() {\n\tvar body = document.implementation.createHTMLDocument( \"\" ).body;\n\tbody.innerHTML = \"<form></form><form></form>\";\n\treturn body.childNodes.length === 2;\n} )();\n\n\n// Argument \"data\" should be string of html\n// context (optional): If specified, the fragment will be created in this context,\n// defaults to document\n// keepScripts (optional): If true, will include scripts passed in the html string\njQuery.parseHTML = function( data, context, keepScripts ) {\n\tif ( typeof data !== \"string\" ) {\n\t\treturn [];\n\t}\n\tif ( typeof context === \"boolean\" ) {\n\t\tkeepScripts = context;\n\t\tcontext = false;\n\t}\n\n\tvar base, parsed, scripts;\n\n\tif ( !context ) {\n\n\t\t// Stop scripts or inline event handlers from being executed immediately\n\t\t// by using document.implementation\n\t\tif ( support.createHTMLDocument ) {\n\t\t\tcontext = document.implementation.createHTMLDocument( \"\" );\n\n\t\t\t// Set the base href for the created document\n\t\t\t// so any parsed elements with URLs\n\t\t\t// are based on the document's URL (gh-2965)\n\t\t\tbase = context.createElement( \"base\" );\n\t\t\tbase.href = document.location.href;\n\t\t\tcontext.head.appendChild( base );\n\t\t} else {\n\t\t\tcontext = document;\n\t\t}\n\t}\n\n\tparsed = rsingleTag.exec( data );\n\tscripts = !keepScripts && [];\n\n\t// Single tag\n\tif ( parsed ) {\n\t\treturn [ context.createElement( parsed[ 1 ] ) ];\n\t}\n\n\tparsed = buildFragment( [ data ], context, scripts );\n\n\tif ( scripts && scripts.length ) {\n\t\tjQuery( scripts ).remove();\n\t}\n\n\treturn jQuery.merge( [], parsed.childNodes );\n};\n\n\n/**\n * Load a url into a page\n */\njQuery.fn.load = function( url, params, callback ) {\n\tvar selector, type, response,\n\t\tself = this,\n\t\toff = url.indexOf( \" \" );\n\n\tif ( off > -1 ) {\n\t\tselector = stripAndCollapse( url.slice( off ) );\n\t\turl = url.slice( 0, off );\n\t}\n\n\t// If it's a function\n\tif ( isFunction( params ) ) {\n\n\t\t// We assume that it's the callback\n\t\tcallback = params;\n\t\tparams = undefined;\n\n\t// Otherwise, build a param string\n\t} else if ( params && typeof params === \"object\" ) {\n\t\ttype = \"POST\";\n\t}\n\n\t// If we have elements to modify, make the request\n\tif ( self.length > 0 ) {\n\t\tjQuery.ajax( {\n\t\t\turl: url,\n\n\t\t\t// If \"type\" variable is undefined, then \"GET\" method will be used.\n\t\t\t// Make value of this field explicit since\n\t\t\t// user can override it through ajaxSetup method\n\t\t\ttype: type || \"GET\",\n\t\t\tdataType: \"html\",\n\t\t\tdata: params\n\t\t} ).done( function( responseText ) {\n\n\t\t\t// Save response for use in complete callback\n\t\t\tresponse = arguments;\n\n\t\t\tself.html( selector ?\n\n\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\tjQuery( \"<div>\" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :\n\n\t\t\t\t// Otherwise use the full result\n\t\t\t\tresponseText );\n\n\t\t// If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n\t\t// but they are ignored because response was set above.\n\t\t// If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n\t\t} ).always( callback && function( jqXHR, status ) {\n\t\t\tself.each( function() {\n\t\t\t\tcallback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );\n\t\t\t} );\n\t\t} );\n\t}\n\n\treturn this;\n};\n\n\n\n\njQuery.expr.pseudos.animated = function( elem ) {\n\treturn jQuery.grep( jQuery.timers, function( fn ) {\n\t\treturn elem === fn.elem;\n\t} ).length;\n};\n\n\n\n\njQuery.offset = {\n\tsetOffset: function( elem, options, i ) {\n\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\tposition = jQuery.css( elem, \"position\" ),\n\t\t\tcurElem = jQuery( elem ),\n\t\t\tprops = {};\n\n\t\t// Set position first, in-case top/left are set even on static elem\n\t\tif ( position === \"static\" ) {\n\t\t\telem.style.position = \"relative\";\n\t\t}\n\n\t\tcurOffset = curElem.offset();\n\t\tcurCSSTop = jQuery.css( elem, \"top\" );\n\t\tcurCSSLeft = jQuery.css( elem, \"left\" );\n\t\tcalculatePosition = ( position === \"absolute\" || position === \"fixed\" ) &&\n\t\t\t( curCSSTop + curCSSLeft ).indexOf( \"auto\" ) > -1;\n\n\t\t// Need to be able to calculate position if either\n\t\t// top or left is auto and position is either absolute or fixed\n\t\tif ( calculatePosition ) {\n\t\t\tcurPosition = curElem.position();\n\t\t\tcurTop = curPosition.top;\n\t\t\tcurLeft = curPosition.left;\n\n\t\t} else {\n\t\t\tcurTop = parseFloat( curCSSTop ) || 0;\n\t\t\tcurLeft = parseFloat( curCSSLeft ) || 0;\n\t\t}\n\n\t\tif ( isFunction( options ) ) {\n\n\t\t\t// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n\t\t\toptions = options.call( elem, i, jQuery.extend( {}, curOffset ) );\n\t\t}\n\n\t\tif ( options.top != null ) {\n\t\t\tprops.top = ( options.top - curOffset.top ) + curTop;\n\t\t}\n\t\tif ( options.left != null ) {\n\t\t\tprops.left = ( options.left - curOffset.left ) + curLeft;\n\t\t}\n\n\t\tif ( \"using\" in options ) {\n\t\t\toptions.using.call( elem, props );\n\n\t\t} else {\n\t\t\tcurElem.css( props );\n\t\t}\n\t}\n};\n\njQuery.fn.extend( {\n\n\t// offset() relates an element's border box to the document origin\n\toffset: function( options ) {\n\n\t\t// Preserve chaining for setter\n\t\tif ( arguments.length ) {\n\t\t\treturn options === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each( function( i ) {\n\t\t\t\t\tjQuery.offset.setOffset( this, options, i );\n\t\t\t\t} );\n\t\t}\n\n\t\tvar rect, win,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !elem ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Return zeros for disconnected and hidden (display: none) elements (gh-2310)\n\t\t// Support: IE <=11 only\n\t\t// Running getBoundingClientRect on a\n\t\t// disconnected node in IE throws an error\n\t\tif ( !elem.getClientRects().length ) {\n\t\t\treturn { top: 0, left: 0 };\n\t\t}\n\n\t\t// Get document-relative position by adding viewport scroll to viewport-relative gBCR\n\t\trect = elem.getBoundingClientRect();\n\t\twin = elem.ownerDocument.defaultView;\n\t\treturn {\n\t\t\ttop: rect.top + win.pageYOffset,\n\t\t\tleft: rect.left + win.pageXOffset\n\t\t};\n\t},\n\n\t// position() relates an element's margin box to its offset parent's padding box\n\t// This corresponds to the behavior of CSS absolute positioning\n\tposition: function() {\n\t\tif ( !this[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar offsetParent, offset, doc,\n\t\t\telem = this[ 0 ],\n\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t// position:fixed elements are offset from the viewport, which itself always has zero offset\n\t\tif ( jQuery.css( elem, \"position\" ) === \"fixed\" ) {\n\n\t\t\t// Assume position:fixed implies availability of getBoundingClientRect\n\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t} else {\n\t\t\toffset = this.offset();\n\n\t\t\t// Account for the *real* offset parent, which can be the document or its root element\n\t\t\t// when a statically positioned element is identified\n\t\t\tdoc = elem.ownerDocument;\n\t\t\toffsetParent = elem.offsetParent || doc.documentElement;\n\t\t\twhile ( offsetParent &&\n\t\t\t\t( offsetParent === doc.body || offsetParent === doc.documentElement ) &&\n\t\t\t\tjQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\n\t\t\t\toffsetParent = offsetParent.parentNode;\n\t\t\t}\n\t\t\tif ( offsetParent && offsetParent !== elem && offsetParent.nodeType === 1 ) {\n\n\t\t\t\t// Incorporate borders into its offset, since they are outside its content origin\n\t\t\t\tparentOffset = jQuery( offsetParent ).offset();\n\t\t\t\tparentOffset.top += jQuery.css( offsetParent, \"borderTopWidth\", true );\n\t\t\t\tparentOffset.left += jQuery.css( offsetParent, \"borderLeftWidth\", true );\n\t\t\t}\n\t\t}\n\n\t\t// Subtract parent offsets and element margins\n\t\treturn {\n\t\t\ttop: offset.top - parentOffset.top - jQuery.css( elem, \"marginTop\", true ),\n\t\t\tleft: offset.left - parentOffset.left - jQuery.css( elem, \"marginLeft\", true )\n\t\t};\n\t},\n\n\t// This method will return documentElement in the following cases:\n\t// 1) For the element inside the iframe without offsetParent, this method will return\n\t//    documentElement of the parent window\n\t// 2) For the hidden or detached element\n\t// 3) For body or html element, i.e. in case of the html node - it will return itself\n\t//\n\t// but those exceptions were never presented as a real life use-cases\n\t// and might be considered as more preferable results.\n\t//\n\t// This logic, however, is not guaranteed and can change at any point in the future\n\toffsetParent: function() {\n\t\treturn this.map( function() {\n\t\t\tvar offsetParent = this.offsetParent;\n\n\t\t\twhile ( offsetParent && jQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t}\n\n\t\t\treturn offsetParent || documentElement;\n\t\t} );\n\t}\n} );\n\n// Create scrollLeft and scrollTop methods\njQuery.each( { scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function( method, prop ) {\n\tvar top = \"pageYOffset\" === prop;\n\n\tjQuery.fn[ method ] = function( val ) {\n\t\treturn access( this, function( elem, method, val ) {\n\n\t\t\t// Coalesce documents and windows\n\t\t\tvar win;\n\t\t\tif ( isWindow( elem ) ) {\n\t\t\t\twin = elem;\n\t\t\t} else if ( elem.nodeType === 9 ) {\n\t\t\t\twin = elem.defaultView;\n\t\t\t}\n\n\t\t\tif ( val === undefined ) {\n\t\t\t\treturn win ? win[ prop ] : elem[ method ];\n\t\t\t}\n\n\t\t\tif ( win ) {\n\t\t\t\twin.scrollTo(\n\t\t\t\t\t!top ? val : win.pageXOffset,\n\t\t\t\t\ttop ? val : win.pageYOffset\n\t\t\t\t);\n\n\t\t\t} else {\n\t\t\t\telem[ method ] = val;\n\t\t\t}\n\t\t}, method, val, arguments.length );\n\t};\n} );\n\n// Support: Safari <=7 - 9.1, Chrome <=37 - 49\n// Add the top/left cssHooks using jQuery.fn.position\n// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347\n// getComputedStyle returns percent when specified for top/left/bottom/right;\n// rather than make the css module depend on the offset module, just check for it here\njQuery.each( [ \"top\", \"left\" ], function( _i, prop ) {\n\tjQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,\n\t\tfunction( elem, computed ) {\n\t\t\tif ( computed ) {\n\t\t\t\tcomputed = curCSS( elem, prop );\n\n\t\t\t\t// If curCSS returns percentage, fallback to offset\n\t\t\t\treturn rnumnonpx.test( computed ) ?\n\t\t\t\t\tjQuery( elem ).position()[ prop ] + \"px\" :\n\t\t\t\t\tcomputed;\n\t\t\t}\n\t\t}\n\t);\n} );\n\n\n// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\njQuery.each( { Height: \"height\", Width: \"width\" }, function( name, type ) {\n\tjQuery.each( {\n\t\tpadding: \"inner\" + name,\n\t\tcontent: type,\n\t\t\"\": \"outer\" + name\n\t}, function( defaultExtra, funcName ) {\n\n\t\t// Margin is only for outerHeight, outerWidth\n\t\tjQuery.fn[ funcName ] = function( margin, value ) {\n\t\t\tvar chainable = arguments.length && ( defaultExtra || typeof margin !== \"boolean\" ),\n\t\t\t\textra = defaultExtra || ( margin === true || value === true ? \"margin\" : \"border\" );\n\n\t\t\treturn access( this, function( elem, type, value ) {\n\t\t\t\tvar doc;\n\n\t\t\t\tif ( isWindow( elem ) ) {\n\n\t\t\t\t\t// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)\n\t\t\t\t\treturn funcName.indexOf( \"outer\" ) === 0 ?\n\t\t\t\t\t\telem[ \"inner\" + name ] :\n\t\t\t\t\t\telem.document.documentElement[ \"client\" + name ];\n\t\t\t\t}\n\n\t\t\t\t// Get document width or height\n\t\t\t\tif ( elem.nodeType === 9 ) {\n\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t// whichever is greatest\n\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\telem.body[ \"scroll\" + name ], doc[ \"scroll\" + name ],\n\t\t\t\t\t\telem.body[ \"offset\" + name ], doc[ \"offset\" + name ],\n\t\t\t\t\t\tdoc[ \"client\" + name ]\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn value === undefined ?\n\n\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\tjQuery.css( elem, type, extra ) :\n\n\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\tjQuery.style( elem, type, value, extra );\n\t\t\t}, type, chainable ? margin : undefined, chainable );\n\t\t};\n\t} );\n} );\n\n\njQuery.each( [\n\t\"ajaxStart\",\n\t\"ajaxStop\",\n\t\"ajaxComplete\",\n\t\"ajaxError\",\n\t\"ajaxSuccess\",\n\t\"ajaxSend\"\n], function( _i, type ) {\n\tjQuery.fn[ type ] = function( fn ) {\n\t\treturn this.on( type, fn );\n\t};\n} );\n\n\n\n\njQuery.fn.extend( {\n\n\tbind: function( types, data, fn ) {\n\t\treturn this.on( types, null, data, fn );\n\t},\n\tunbind: function( types, fn ) {\n\t\treturn this.off( types, null, fn );\n\t},\n\n\tdelegate: function( selector, types, data, fn ) {\n\t\treturn this.on( types, selector, data, fn );\n\t},\n\tundelegate: function( selector, types, fn ) {\n\n\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\treturn arguments.length === 1 ?\n\t\t\tthis.off( selector, \"**\" ) :\n\t\t\tthis.off( types, selector || \"**\", fn );\n\t},\n\n\thover: function( fnOver, fnOut ) {\n\t\treturn this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );\n\t}\n} );\n\njQuery.each(\n\t( \"blur focus focusin focusout resize scroll click dblclick \" +\n\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\"change select submit keydown keypress keyup contextmenu\" ).split( \" \" ),\n\tfunction( _i, name ) {\n\n\t\t// Handle event binding\n\t\tjQuery.fn[ name ] = function( data, fn ) {\n\t\t\treturn arguments.length > 0 ?\n\t\t\t\tthis.on( name, null, data, fn ) :\n\t\t\t\tthis.trigger( name );\n\t\t};\n\t}\n);\n\n\n\n\n// Support: Android <=4.0 only\n// Make sure we trim BOM and NBSP\n// Require that the \"whitespace run\" starts from a non-whitespace\n// to avoid O(N^2) behavior when the engine would try matching \"\\s+$\" at each space position.\nvar rtrim = /^[\\s\\uFEFF\\xA0]+|([^\\s\\uFEFF\\xA0])[\\s\\uFEFF\\xA0]+$/g;\n\n// Bind a function to a context, optionally partially applying any\n// arguments.\n// jQuery.proxy is deprecated to promote standards (specifically Function#bind)\n// However, it is not slated for removal any time soon\njQuery.proxy = function( fn, context ) {\n\tvar tmp, args, proxy;\n\n\tif ( typeof context === \"string\" ) {\n\t\ttmp = fn[ context ];\n\t\tcontext = fn;\n\t\tfn = tmp;\n\t}\n\n\t// Quick check to determine if target is callable, in the spec\n\t// this throws a TypeError, but we will just return undefined.\n\tif ( !isFunction( fn ) ) {\n\t\treturn undefined;\n\t}\n\n\t// Simulated bind\n\targs = slice.call( arguments, 2 );\n\tproxy = function() {\n\t\treturn fn.apply( context || this, args.concat( slice.call( arguments ) ) );\n\t};\n\n\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\treturn proxy;\n};\n\njQuery.holdReady = function( hold ) {\n\tif ( hold ) {\n\t\tjQuery.readyWait++;\n\t} else {\n\t\tjQuery.ready( true );\n\t}\n};\njQuery.isArray = Array.isArray;\njQuery.parseJSON = JSON.parse;\njQuery.nodeName = nodeName;\njQuery.isFunction = isFunction;\njQuery.isWindow = isWindow;\njQuery.camelCase = camelCase;\njQuery.type = toType;\n\njQuery.now = Date.now;\n\njQuery.isNumeric = function( obj ) {\n\n\t// As of jQuery 3.0, isNumeric is limited to\n\t// strings and numbers (primitives or objects)\n\t// that can be coerced to finite numbers (gh-2662)\n\tvar type = jQuery.type( obj );\n\treturn ( type === \"number\" || type === \"string\" ) &&\n\n\t\t// parseFloat NaNs numeric-cast false positives (\"\")\n\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t// subtraction forces infinities to NaN\n\t\t!isNaN( obj - parseFloat( obj ) );\n};\n\njQuery.trim = function( text ) {\n\treturn text == null ?\n\t\t\"\" :\n\t\t( text + \"\" ).replace( rtrim, \"$1\" );\n};\n\n\n\n// Register as a named AMD module, since jQuery can be concatenated with other\n// files that may use define, but not via a proper concatenation script that\n// understands anonymous AMD modules. A named AMD is safest and most robust\n// way to register. Lowercase jquery is used because AMD module names are\n// derived from file names, and jQuery is normally delivered in a lowercase\n// file name. Do this after creating the global so that if an AMD module wants\n// to call noConflict to hide this version of jQuery, it will work.\n\n// Note that for maximum portability, libraries that are not jQuery should\n// declare themselves as anonymous modules, and avoid setting a global if an\n// AMD loader is present. jQuery is a special case. For more information, see\n// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\nif ( typeof define === \"function\" && define.amd ) {\n\tdefine( \"jquery\", [], function() {\n\t\treturn jQuery;\n\t} );\n}\n\n\n\n\nvar\n\n\t// Map over jQuery in case of overwrite\n\t_jQuery = window.jQuery,\n\n\t// Map over the $ in case of overwrite\n\t_$ = window.$;\n\njQuery.noConflict = function( deep ) {\n\tif ( window.$ === jQuery ) {\n\t\twindow.$ = _$;\n\t}\n\n\tif ( deep && window.jQuery === jQuery ) {\n\t\twindow.jQuery = _jQuery;\n\t}\n\n\treturn jQuery;\n};\n\n// Expose jQuery and $ identifiers, even in AMD\n// (trac-7102#comment:10, https://github.com/jquery/jquery/pull/557)\n// and CommonJS for browser emulators (trac-13566)\nif ( typeof noGlobal === \"undefined\" ) {\n\twindow.jQuery = window.$ = jQuery;\n}\n\n\n\n\nreturn jQuery;\n} );\n","/**\n * @license\n * Lodash <https://lodash.com/>\n * Copyright OpenJS Foundation and other contributors <https://openjsf.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n;(function() {\n\n  /** Used as a safe reference for `undefined` in pre-ES5 environments. */\n  var undefined;\n\n  /** Used as the semantic version number. */\n  var VERSION = '4.17.21';\n\n  /** Used as the size to enable large array optimizations. */\n  var LARGE_ARRAY_SIZE = 200;\n\n  /** Error message constants. */\n  var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.',\n      FUNC_ERROR_TEXT = 'Expected a function',\n      INVALID_TEMPL_VAR_ERROR_TEXT = 'Invalid `variable` option passed into `_.template`';\n\n  /** Used to stand-in for `undefined` hash values. */\n  var HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n  /** Used as the maximum memoize cache size. */\n  var MAX_MEMOIZE_SIZE = 500;\n\n  /** Used as the internal argument placeholder. */\n  var PLACEHOLDER = '__lodash_placeholder__';\n\n  /** Used to compose bitmasks for cloning. */\n  var CLONE_DEEP_FLAG = 1,\n      CLONE_FLAT_FLAG = 2,\n      CLONE_SYMBOLS_FLAG = 4;\n\n  /** Used to compose bitmasks for value comparisons. */\n  var COMPARE_PARTIAL_FLAG = 1,\n      COMPARE_UNORDERED_FLAG = 2;\n\n  /** Used to compose bitmasks for function metadata. */\n  var WRAP_BIND_FLAG = 1,\n      WRAP_BIND_KEY_FLAG = 2,\n      WRAP_CURRY_BOUND_FLAG = 4,\n      WRAP_CURRY_FLAG = 8,\n      WRAP_CURRY_RIGHT_FLAG = 16,\n      WRAP_PARTIAL_FLAG = 32,\n      WRAP_PARTIAL_RIGHT_FLAG = 64,\n      WRAP_ARY_FLAG = 128,\n      WRAP_REARG_FLAG = 256,\n      WRAP_FLIP_FLAG = 512;\n\n  /** Used as default options for `_.truncate`. */\n  var DEFAULT_TRUNC_LENGTH = 30,\n      DEFAULT_TRUNC_OMISSION = '...';\n\n  /** Used to detect hot functions by number of calls within a span of milliseconds. */\n  var HOT_COUNT = 800,\n      HOT_SPAN = 16;\n\n  /** Used to indicate the type of lazy iteratees. */\n  var LAZY_FILTER_FLAG = 1,\n      LAZY_MAP_FLAG = 2,\n      LAZY_WHILE_FLAG = 3;\n\n  /** Used as references for various `Number` constants. */\n  var INFINITY = 1 / 0,\n      MAX_SAFE_INTEGER = 9007199254740991,\n      MAX_INTEGER = 1.7976931348623157e+308,\n      NAN = 0 / 0;\n\n  /** Used as references for the maximum length and index of an array. */\n  var MAX_ARRAY_LENGTH = 4294967295,\n      MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1,\n      HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;\n\n  /** Used to associate wrap methods with their bit flags. */\n  var wrapFlags = [\n    ['ary', WRAP_ARY_FLAG],\n    ['bind', WRAP_BIND_FLAG],\n    ['bindKey', WRAP_BIND_KEY_FLAG],\n    ['curry', WRAP_CURRY_FLAG],\n    ['curryRight', WRAP_CURRY_RIGHT_FLAG],\n    ['flip', WRAP_FLIP_FLAG],\n    ['partial', WRAP_PARTIAL_FLAG],\n    ['partialRight', WRAP_PARTIAL_RIGHT_FLAG],\n    ['rearg', WRAP_REARG_FLAG]\n  ];\n\n  /** `Object#toString` result references. */\n  var argsTag = '[object Arguments]',\n      arrayTag = '[object Array]',\n      asyncTag = '[object AsyncFunction]',\n      boolTag = '[object Boolean]',\n      dateTag = '[object Date]',\n      domExcTag = '[object DOMException]',\n      errorTag = '[object Error]',\n      funcTag = '[object Function]',\n      genTag = '[object GeneratorFunction]',\n      mapTag = '[object Map]',\n      numberTag = '[object Number]',\n      nullTag = '[object Null]',\n      objectTag = '[object Object]',\n      promiseTag = '[object Promise]',\n      proxyTag = '[object Proxy]',\n      regexpTag = '[object RegExp]',\n      setTag = '[object Set]',\n      stringTag = '[object String]',\n      symbolTag = '[object Symbol]',\n      undefinedTag = '[object Undefined]',\n      weakMapTag = '[object WeakMap]',\n      weakSetTag = '[object WeakSet]';\n\n  var arrayBufferTag = '[object ArrayBuffer]',\n      dataViewTag = '[object DataView]',\n      float32Tag = '[object Float32Array]',\n      float64Tag = '[object Float64Array]',\n      int8Tag = '[object Int8Array]',\n      int16Tag = '[object Int16Array]',\n      int32Tag = '[object Int32Array]',\n      uint8Tag = '[object Uint8Array]',\n      uint8ClampedTag = '[object Uint8ClampedArray]',\n      uint16Tag = '[object Uint16Array]',\n      uint32Tag = '[object Uint32Array]';\n\n  /** Used to match empty string literals in compiled template source. */\n  var reEmptyStringLeading = /\\b__p \\+= '';/g,\n      reEmptyStringMiddle = /\\b(__p \\+=) '' \\+/g,\n      reEmptyStringTrailing = /(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g;\n\n  /** Used to match HTML entities and HTML characters. */\n  var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g,\n      reUnescapedHtml = /[&<>\"']/g,\n      reHasEscapedHtml = RegExp(reEscapedHtml.source),\n      reHasUnescapedHtml = RegExp(reUnescapedHtml.source);\n\n  /** Used to match template delimiters. */\n  var reEscape = /<%-([\\s\\S]+?)%>/g,\n      reEvaluate = /<%([\\s\\S]+?)%>/g,\n      reInterpolate = /<%=([\\s\\S]+?)%>/g;\n\n  /** Used to match property names within property paths. */\n  var reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n      reIsPlainProp = /^\\w*$/,\n      rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n  /**\n   * Used to match `RegExp`\n   * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n   */\n  var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g,\n      reHasRegExpChar = RegExp(reRegExpChar.source);\n\n  /** Used to match leading whitespace. */\n  var reTrimStart = /^\\s+/;\n\n  /** Used to match a single whitespace character. */\n  var reWhitespace = /\\s/;\n\n  /** Used to match wrap detail comments. */\n  var reWrapComment = /\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,\n      reWrapDetails = /\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,\n      reSplitDetails = /,? & /;\n\n  /** Used to match words composed of alphanumeric characters. */\n  var reAsciiWord = /[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;\n\n  /**\n   * Used to validate the `validate` option in `_.template` variable.\n   *\n   * Forbids characters which could potentially change the meaning of the function argument definition:\n   * - \"(),\" (modification of function parameters)\n   * - \"=\" (default value)\n   * - \"[]{}\" (destructuring of function parameters)\n   * - \"/\" (beginning of a comment)\n   * - whitespace\n   */\n  var reForbiddenIdentifierChars = /[()=,{}\\[\\]\\/\\s]/;\n\n  /** Used to match backslashes in property paths. */\n  var reEscapeChar = /\\\\(\\\\)?/g;\n\n  /**\n   * Used to match\n   * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components).\n   */\n  var reEsTemplate = /\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g;\n\n  /** Used to match `RegExp` flags from their coerced string values. */\n  var reFlags = /\\w*$/;\n\n  /** Used to detect bad signed hexadecimal string values. */\n  var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n  /** Used to detect binary string values. */\n  var reIsBinary = /^0b[01]+$/i;\n\n  /** Used to detect host constructors (Safari). */\n  var reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n  /** Used to detect octal string values. */\n  var reIsOctal = /^0o[0-7]+$/i;\n\n  /** Used to detect unsigned integer values. */\n  var reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n  /** Used to match Latin Unicode letters (excluding mathematical operators). */\n  var reLatin = /[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g;\n\n  /** Used to ensure capturing order of template delimiters. */\n  var reNoMatch = /($^)/;\n\n  /** Used to match unescaped characters in compiled string literals. */\n  var reUnescapedString = /['\\n\\r\\u2028\\u2029\\\\]/g;\n\n  /** Used to compose unicode character classes. */\n  var rsAstralRange = '\\\\ud800-\\\\udfff',\n      rsComboMarksRange = '\\\\u0300-\\\\u036f',\n      reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n      rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n      rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n      rsDingbatRange = '\\\\u2700-\\\\u27bf',\n      rsLowerRange = 'a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff',\n      rsMathOpRange = '\\\\xac\\\\xb1\\\\xd7\\\\xf7',\n      rsNonCharRange = '\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf',\n      rsPunctuationRange = '\\\\u2000-\\\\u206f',\n      rsSpaceRange = ' \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000',\n      rsUpperRange = 'A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde',\n      rsVarRange = '\\\\ufe0e\\\\ufe0f',\n      rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;\n\n  /** Used to compose unicode capture groups. */\n  var rsApos = \"['\\u2019]\",\n      rsAstral = '[' + rsAstralRange + ']',\n      rsBreak = '[' + rsBreakRange + ']',\n      rsCombo = '[' + rsComboRange + ']',\n      rsDigits = '\\\\d+',\n      rsDingbat = '[' + rsDingbatRange + ']',\n      rsLower = '[' + rsLowerRange + ']',\n      rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',\n      rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n      rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n      rsNonAstral = '[^' + rsAstralRange + ']',\n      rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n      rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n      rsUpper = '[' + rsUpperRange + ']',\n      rsZWJ = '\\\\u200d';\n\n  /** Used to compose unicode regexes. */\n  var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')',\n      rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')',\n      rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',\n      rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',\n      reOptMod = rsModifier + '?',\n      rsOptVar = '[' + rsVarRange + ']?',\n      rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n      rsOrdLower = '\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])',\n      rsOrdUpper = '\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])',\n      rsSeq = rsOptVar + reOptMod + rsOptJoin,\n      rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq,\n      rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n  /** Used to match apostrophes. */\n  var reApos = RegExp(rsApos, 'g');\n\n  /**\n   * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and\n   * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).\n   */\n  var reComboMark = RegExp(rsCombo, 'g');\n\n  /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\n  var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n  /** Used to match complex or compound words. */\n  var reUnicodeWord = RegExp([\n    rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',\n    rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')',\n    rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower,\n    rsUpper + '+' + rsOptContrUpper,\n    rsOrdUpper,\n    rsOrdLower,\n    rsDigits,\n    rsEmoji\n  ].join('|'), 'g');\n\n  /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */\n  var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange  + rsComboRange + rsVarRange + ']');\n\n  /** Used to detect strings that need a more robust regexp to match words. */\n  var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;\n\n  /** Used to assign default `context` object properties. */\n  var contextProps = [\n    'Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array',\n    'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object',\n    'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array',\n    'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap',\n    '_', 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout'\n  ];\n\n  /** Used to make template sourceURLs easier to identify. */\n  var templateCounter = -1;\n\n  /** Used to identify `toStringTag` values of typed arrays. */\n  var typedArrayTags = {};\n  typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\n  typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\n  typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\n  typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\n  typedArrayTags[uint32Tag] = true;\n  typedArrayTags[argsTag] = typedArrayTags[arrayTag] =\n  typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\n  typedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\n  typedArrayTags[errorTag] = typedArrayTags[funcTag] =\n  typedArrayTags[mapTag] = typedArrayTags[numberTag] =\n  typedArrayTags[objectTag] = typedArrayTags[regexpTag] =\n  typedArrayTags[setTag] = typedArrayTags[stringTag] =\n  typedArrayTags[weakMapTag] = false;\n\n  /** Used to identify `toStringTag` values supported by `_.clone`. */\n  var cloneableTags = {};\n  cloneableTags[argsTag] = cloneableTags[arrayTag] =\n  cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\n  cloneableTags[boolTag] = cloneableTags[dateTag] =\n  cloneableTags[float32Tag] = cloneableTags[float64Tag] =\n  cloneableTags[int8Tag] = cloneableTags[int16Tag] =\n  cloneableTags[int32Tag] = cloneableTags[mapTag] =\n  cloneableTags[numberTag] = cloneableTags[objectTag] =\n  cloneableTags[regexpTag] = cloneableTags[setTag] =\n  cloneableTags[stringTag] = cloneableTags[symbolTag] =\n  cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\n  cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\n  cloneableTags[errorTag] = cloneableTags[funcTag] =\n  cloneableTags[weakMapTag] = false;\n\n  /** Used to map Latin Unicode letters to basic Latin letters. */\n  var deburredLetters = {\n    // Latin-1 Supplement block.\n    '\\xc0': 'A',  '\\xc1': 'A', '\\xc2': 'A', '\\xc3': 'A', '\\xc4': 'A', '\\xc5': 'A',\n    '\\xe0': 'a',  '\\xe1': 'a', '\\xe2': 'a', '\\xe3': 'a', '\\xe4': 'a', '\\xe5': 'a',\n    '\\xc7': 'C',  '\\xe7': 'c',\n    '\\xd0': 'D',  '\\xf0': 'd',\n    '\\xc8': 'E',  '\\xc9': 'E', '\\xca': 'E', '\\xcb': 'E',\n    '\\xe8': 'e',  '\\xe9': 'e', '\\xea': 'e', '\\xeb': 'e',\n    '\\xcc': 'I',  '\\xcd': 'I', '\\xce': 'I', '\\xcf': 'I',\n    '\\xec': 'i',  '\\xed': 'i', '\\xee': 'i', '\\xef': 'i',\n    '\\xd1': 'N',  '\\xf1': 'n',\n    '\\xd2': 'O',  '\\xd3': 'O', '\\xd4': 'O', '\\xd5': 'O', '\\xd6': 'O', '\\xd8': 'O',\n    '\\xf2': 'o',  '\\xf3': 'o', '\\xf4': 'o', '\\xf5': 'o', '\\xf6': 'o', '\\xf8': 'o',\n    '\\xd9': 'U',  '\\xda': 'U', '\\xdb': 'U', '\\xdc': 'U',\n    '\\xf9': 'u',  '\\xfa': 'u', '\\xfb': 'u', '\\xfc': 'u',\n    '\\xdd': 'Y',  '\\xfd': 'y', '\\xff': 'y',\n    '\\xc6': 'Ae', '\\xe6': 'ae',\n    '\\xde': 'Th', '\\xfe': 'th',\n    '\\xdf': 'ss',\n    // Latin Extended-A block.\n    '\\u0100': 'A',  '\\u0102': 'A', '\\u0104': 'A',\n    '\\u0101': 'a',  '\\u0103': 'a', '\\u0105': 'a',\n    '\\u0106': 'C',  '\\u0108': 'C', '\\u010a': 'C', '\\u010c': 'C',\n    '\\u0107': 'c',  '\\u0109': 'c', '\\u010b': 'c', '\\u010d': 'c',\n    '\\u010e': 'D',  '\\u0110': 'D', '\\u010f': 'd', '\\u0111': 'd',\n    '\\u0112': 'E',  '\\u0114': 'E', '\\u0116': 'E', '\\u0118': 'E', '\\u011a': 'E',\n    '\\u0113': 'e',  '\\u0115': 'e', '\\u0117': 'e', '\\u0119': 'e', '\\u011b': 'e',\n    '\\u011c': 'G',  '\\u011e': 'G', '\\u0120': 'G', '\\u0122': 'G',\n    '\\u011d': 'g',  '\\u011f': 'g', '\\u0121': 'g', '\\u0123': 'g',\n    '\\u0124': 'H',  '\\u0126': 'H', '\\u0125': 'h', '\\u0127': 'h',\n    '\\u0128': 'I',  '\\u012a': 'I', '\\u012c': 'I', '\\u012e': 'I', '\\u0130': 'I',\n    '\\u0129': 'i',  '\\u012b': 'i', '\\u012d': 'i', '\\u012f': 'i', '\\u0131': 'i',\n    '\\u0134': 'J',  '\\u0135': 'j',\n    '\\u0136': 'K',  '\\u0137': 'k', '\\u0138': 'k',\n    '\\u0139': 'L',  '\\u013b': 'L', '\\u013d': 'L', '\\u013f': 'L', '\\u0141': 'L',\n    '\\u013a': 'l',  '\\u013c': 'l', '\\u013e': 'l', '\\u0140': 'l', '\\u0142': 'l',\n    '\\u0143': 'N',  '\\u0145': 'N', '\\u0147': 'N', '\\u014a': 'N',\n    '\\u0144': 'n',  '\\u0146': 'n', '\\u0148': 'n', '\\u014b': 'n',\n    '\\u014c': 'O',  '\\u014e': 'O', '\\u0150': 'O',\n    '\\u014d': 'o',  '\\u014f': 'o', '\\u0151': 'o',\n    '\\u0154': 'R',  '\\u0156': 'R', '\\u0158': 'R',\n    '\\u0155': 'r',  '\\u0157': 'r', '\\u0159': 'r',\n    '\\u015a': 'S',  '\\u015c': 'S', '\\u015e': 'S', '\\u0160': 'S',\n    '\\u015b': 's',  '\\u015d': 's', '\\u015f': 's', '\\u0161': 's',\n    '\\u0162': 'T',  '\\u0164': 'T', '\\u0166': 'T',\n    '\\u0163': 't',  '\\u0165': 't', '\\u0167': 't',\n    '\\u0168': 'U',  '\\u016a': 'U', '\\u016c': 'U', '\\u016e': 'U', '\\u0170': 'U', '\\u0172': 'U',\n    '\\u0169': 'u',  '\\u016b': 'u', '\\u016d': 'u', '\\u016f': 'u', '\\u0171': 'u', '\\u0173': 'u',\n    '\\u0174': 'W',  '\\u0175': 'w',\n    '\\u0176': 'Y',  '\\u0177': 'y', '\\u0178': 'Y',\n    '\\u0179': 'Z',  '\\u017b': 'Z', '\\u017d': 'Z',\n    '\\u017a': 'z',  '\\u017c': 'z', '\\u017e': 'z',\n    '\\u0132': 'IJ', '\\u0133': 'ij',\n    '\\u0152': 'Oe', '\\u0153': 'oe',\n    '\\u0149': \"'n\", '\\u017f': 's'\n  };\n\n  /** Used to map characters to HTML entities. */\n  var htmlEscapes = {\n    '&': '&amp;',\n    '<': '&lt;',\n    '>': '&gt;',\n    '\"': '&quot;',\n    \"'\": '&#39;'\n  };\n\n  /** Used to map HTML entities to characters. */\n  var htmlUnescapes = {\n    '&amp;': '&',\n    '&lt;': '<',\n    '&gt;': '>',\n    '&quot;': '\"',\n    '&#39;': \"'\"\n  };\n\n  /** Used to escape characters for inclusion in compiled string literals. */\n  var stringEscapes = {\n    '\\\\': '\\\\',\n    \"'\": \"'\",\n    '\\n': 'n',\n    '\\r': 'r',\n    '\\u2028': 'u2028',\n    '\\u2029': 'u2029'\n  };\n\n  /** Built-in method references without a dependency on `root`. */\n  var freeParseFloat = parseFloat,\n      freeParseInt = parseInt;\n\n  /** Detect free variable `global` from Node.js. */\n  var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n  /** Detect free variable `self`. */\n  var freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n  /** Used as a reference to the global object. */\n  var root = freeGlobal || freeSelf || Function('return this')();\n\n  /** Detect free variable `exports`. */\n  var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n  /** Detect free variable `module`. */\n  var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n  /** Detect the popular CommonJS extension `module.exports`. */\n  var moduleExports = freeModule && freeModule.exports === freeExports;\n\n  /** Detect free variable `process` from Node.js. */\n  var freeProcess = moduleExports && freeGlobal.process;\n\n  /** Used to access faster Node.js helpers. */\n  var nodeUtil = (function() {\n    try {\n      // Use `util.types` for Node.js 10+.\n      var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n      if (types) {\n        return types;\n      }\n\n      // Legacy `process.binding('util')` for Node.js < 10.\n      return freeProcess && freeProcess.binding && freeProcess.binding('util');\n    } catch (e) {}\n  }());\n\n  /* Node.js helper references. */\n  var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer,\n      nodeIsDate = nodeUtil && nodeUtil.isDate,\n      nodeIsMap = nodeUtil && nodeUtil.isMap,\n      nodeIsRegExp = nodeUtil && nodeUtil.isRegExp,\n      nodeIsSet = nodeUtil && nodeUtil.isSet,\n      nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n  /*--------------------------------------------------------------------------*/\n\n  /**\n   * A faster alternative to `Function#apply`, this function invokes `func`\n   * with the `this` binding of `thisArg` and the arguments of `args`.\n   *\n   * @private\n   * @param {Function} func The function to invoke.\n   * @param {*} thisArg The `this` binding of `func`.\n   * @param {Array} args The arguments to invoke `func` with.\n   * @returns {*} Returns the result of `func`.\n   */\n  function apply(func, thisArg, args) {\n    switch (args.length) {\n      case 0: return func.call(thisArg);\n      case 1: return func.call(thisArg, args[0]);\n      case 2: return func.call(thisArg, args[0], args[1]);\n      case 3: return func.call(thisArg, args[0], args[1], args[2]);\n    }\n    return func.apply(thisArg, args);\n  }\n\n  /**\n   * A specialized version of `baseAggregator` for arrays.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} setter The function to set `accumulator` values.\n   * @param {Function} iteratee The iteratee to transform keys.\n   * @param {Object} accumulator The initial aggregated object.\n   * @returns {Function} Returns `accumulator`.\n   */\n  function arrayAggregator(array, setter, iteratee, accumulator) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      var value = array[index];\n      setter(accumulator, value, iteratee(value), array);\n    }\n    return accumulator;\n  }\n\n  /**\n   * A specialized version of `_.forEach` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {Array} Returns `array`.\n   */\n  function arrayEach(array, iteratee) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      if (iteratee(array[index], index, array) === false) {\n        break;\n      }\n    }\n    return array;\n  }\n\n  /**\n   * A specialized version of `_.forEachRight` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {Array} Returns `array`.\n   */\n  function arrayEachRight(array, iteratee) {\n    var length = array == null ? 0 : array.length;\n\n    while (length--) {\n      if (iteratee(array[length], length, array) === false) {\n        break;\n      }\n    }\n    return array;\n  }\n\n  /**\n   * A specialized version of `_.every` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} predicate The function invoked per iteration.\n   * @returns {boolean} Returns `true` if all elements pass the predicate check,\n   *  else `false`.\n   */\n  function arrayEvery(array, predicate) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      if (!predicate(array[index], index, array)) {\n        return false;\n      }\n    }\n    return true;\n  }\n\n  /**\n   * A specialized version of `_.filter` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} predicate The function invoked per iteration.\n   * @returns {Array} Returns the new filtered array.\n   */\n  function arrayFilter(array, predicate) {\n    var index = -1,\n        length = array == null ? 0 : array.length,\n        resIndex = 0,\n        result = [];\n\n    while (++index < length) {\n      var value = array[index];\n      if (predicate(value, index, array)) {\n        result[resIndex++] = value;\n      }\n    }\n    return result;\n  }\n\n  /**\n   * A specialized version of `_.includes` for arrays without support for\n   * specifying an index to search from.\n   *\n   * @private\n   * @param {Array} [array] The array to inspect.\n   * @param {*} target The value to search for.\n   * @returns {boolean} Returns `true` if `target` is found, else `false`.\n   */\n  function arrayIncludes(array, value) {\n    var length = array == null ? 0 : array.length;\n    return !!length && baseIndexOf(array, value, 0) > -1;\n  }\n\n  /**\n   * This function is like `arrayIncludes` except that it accepts a comparator.\n   *\n   * @private\n   * @param {Array} [array] The array to inspect.\n   * @param {*} target The value to search for.\n   * @param {Function} comparator The comparator invoked per element.\n   * @returns {boolean} Returns `true` if `target` is found, else `false`.\n   */\n  function arrayIncludesWith(array, value, comparator) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      if (comparator(value, array[index])) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  /**\n   * A specialized version of `_.map` for arrays without support for iteratee\n   * shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {Array} Returns the new mapped array.\n   */\n  function arrayMap(array, iteratee) {\n    var index = -1,\n        length = array == null ? 0 : array.length,\n        result = Array(length);\n\n    while (++index < length) {\n      result[index] = iteratee(array[index], index, array);\n    }\n    return result;\n  }\n\n  /**\n   * Appends the elements of `values` to `array`.\n   *\n   * @private\n   * @param {Array} array The array to modify.\n   * @param {Array} values The values to append.\n   * @returns {Array} Returns `array`.\n   */\n  function arrayPush(array, values) {\n    var index = -1,\n        length = values.length,\n        offset = array.length;\n\n    while (++index < length) {\n      array[offset + index] = values[index];\n    }\n    return array;\n  }\n\n  /**\n   * A specialized version of `_.reduce` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @param {*} [accumulator] The initial value.\n   * @param {boolean} [initAccum] Specify using the first element of `array` as\n   *  the initial value.\n   * @returns {*} Returns the accumulated value.\n   */\n  function arrayReduce(array, iteratee, accumulator, initAccum) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    if (initAccum && length) {\n      accumulator = array[++index];\n    }\n    while (++index < length) {\n      accumulator = iteratee(accumulator, array[index], index, array);\n    }\n    return accumulator;\n  }\n\n  /**\n   * A specialized version of `_.reduceRight` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @param {*} [accumulator] The initial value.\n   * @param {boolean} [initAccum] Specify using the last element of `array` as\n   *  the initial value.\n   * @returns {*} Returns the accumulated value.\n   */\n  function arrayReduceRight(array, iteratee, accumulator, initAccum) {\n    var length = array == null ? 0 : array.length;\n    if (initAccum && length) {\n      accumulator = array[--length];\n    }\n    while (length--) {\n      accumulator = iteratee(accumulator, array[length], length, array);\n    }\n    return accumulator;\n  }\n\n  /**\n   * A specialized version of `_.some` for arrays without support for iteratee\n   * shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} predicate The function invoked per iteration.\n   * @returns {boolean} Returns `true` if any element passes the predicate check,\n   *  else `false`.\n   */\n  function arraySome(array, predicate) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      if (predicate(array[index], index, array)) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  /**\n   * Gets the size of an ASCII `string`.\n   *\n   * @private\n   * @param {string} string The string inspect.\n   * @returns {number} Returns the string size.\n   */\n  var asciiSize = baseProperty('length');\n\n  /**\n   * Converts an ASCII `string` to an array.\n   *\n   * @private\n   * @param {string} string The string to convert.\n   * @returns {Array} Returns the converted array.\n   */\n  function asciiToArray(string) {\n    return string.split('');\n  }\n\n  /**\n   * Splits an ASCII `string` into an array of its words.\n   *\n   * @private\n   * @param {string} The string to inspect.\n   * @returns {Array} Returns the words of `string`.\n   */\n  function asciiWords(string) {\n    return string.match(reAsciiWord) || [];\n  }\n\n  /**\n   * The base implementation of methods like `_.findKey` and `_.findLastKey`,\n   * without support for iteratee shorthands, which iterates over `collection`\n   * using `eachFunc`.\n   *\n   * @private\n   * @param {Array|Object} collection The collection to inspect.\n   * @param {Function} predicate The function invoked per iteration.\n   * @param {Function} eachFunc The function to iterate over `collection`.\n   * @returns {*} Returns the found element or its key, else `undefined`.\n   */\n  function baseFindKey(collection, predicate, eachFunc) {\n    var result;\n    eachFunc(collection, function(value, key, collection) {\n      if (predicate(value, key, collection)) {\n        result = key;\n        return false;\n      }\n    });\n    return result;\n  }\n\n  /**\n   * The base implementation of `_.findIndex` and `_.findLastIndex` without\n   * support for iteratee shorthands.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {Function} predicate The function invoked per iteration.\n   * @param {number} fromIndex The index to search from.\n   * @param {boolean} [fromRight] Specify iterating from right to left.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function baseFindIndex(array, predicate, fromIndex, fromRight) {\n    var length = array.length,\n        index = fromIndex + (fromRight ? 1 : -1);\n\n    while ((fromRight ? index-- : ++index < length)) {\n      if (predicate(array[index], index, array)) {\n        return index;\n      }\n    }\n    return -1;\n  }\n\n  /**\n   * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} value The value to search for.\n   * @param {number} fromIndex The index to search from.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function baseIndexOf(array, value, fromIndex) {\n    return value === value\n      ? strictIndexOf(array, value, fromIndex)\n      : baseFindIndex(array, baseIsNaN, fromIndex);\n  }\n\n  /**\n   * This function is like `baseIndexOf` except that it accepts a comparator.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} value The value to search for.\n   * @param {number} fromIndex The index to search from.\n   * @param {Function} comparator The comparator invoked per element.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function baseIndexOfWith(array, value, fromIndex, comparator) {\n    var index = fromIndex - 1,\n        length = array.length;\n\n    while (++index < length) {\n      if (comparator(array[index], value)) {\n        return index;\n      }\n    }\n    return -1;\n  }\n\n  /**\n   * The base implementation of `_.isNaN` without support for number objects.\n   *\n   * @private\n   * @param {*} value The value to check.\n   * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n   */\n  function baseIsNaN(value) {\n    return value !== value;\n  }\n\n  /**\n   * The base implementation of `_.mean` and `_.meanBy` without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} array The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {number} Returns the mean.\n   */\n  function baseMean(array, iteratee) {\n    var length = array == null ? 0 : array.length;\n    return length ? (baseSum(array, iteratee) / length) : NAN;\n  }\n\n  /**\n   * The base implementation of `_.property` without support for deep paths.\n   *\n   * @private\n   * @param {string} key The key of the property to get.\n   * @returns {Function} Returns the new accessor function.\n   */\n  function baseProperty(key) {\n    return function(object) {\n      return object == null ? undefined : object[key];\n    };\n  }\n\n  /**\n   * The base implementation of `_.propertyOf` without support for deep paths.\n   *\n   * @private\n   * @param {Object} object The object to query.\n   * @returns {Function} Returns the new accessor function.\n   */\n  function basePropertyOf(object) {\n    return function(key) {\n      return object == null ? undefined : object[key];\n    };\n  }\n\n  /**\n   * The base implementation of `_.reduce` and `_.reduceRight`, without support\n   * for iteratee shorthands, which iterates over `collection` using `eachFunc`.\n   *\n   * @private\n   * @param {Array|Object} collection The collection to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @param {*} accumulator The initial value.\n   * @param {boolean} initAccum Specify using the first or last element of\n   *  `collection` as the initial value.\n   * @param {Function} eachFunc The function to iterate over `collection`.\n   * @returns {*} Returns the accumulated value.\n   */\n  function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {\n    eachFunc(collection, function(value, index, collection) {\n      accumulator = initAccum\n        ? (initAccum = false, value)\n        : iteratee(accumulator, value, index, collection);\n    });\n    return accumulator;\n  }\n\n  /**\n   * The base implementation of `_.sortBy` which uses `comparer` to define the\n   * sort order of `array` and replaces criteria objects with their corresponding\n   * values.\n   *\n   * @private\n   * @param {Array} array The array to sort.\n   * @param {Function} comparer The function to define sort order.\n   * @returns {Array} Returns `array`.\n   */\n  function baseSortBy(array, comparer) {\n    var length = array.length;\n\n    array.sort(comparer);\n    while (length--) {\n      array[length] = array[length].value;\n    }\n    return array;\n  }\n\n  /**\n   * The base implementation of `_.sum` and `_.sumBy` without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} array The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {number} Returns the sum.\n   */\n  function baseSum(array, iteratee) {\n    var result,\n        index = -1,\n        length = array.length;\n\n    while (++index < length) {\n      var current = iteratee(array[index]);\n      if (current !== undefined) {\n        result = result === undefined ? current : (result + current);\n      }\n    }\n    return result;\n  }\n\n  /**\n   * The base implementation of `_.times` without support for iteratee shorthands\n   * or max array length checks.\n   *\n   * @private\n   * @param {number} n The number of times to invoke `iteratee`.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {Array} Returns the array of results.\n   */\n  function baseTimes(n, iteratee) {\n    var index = -1,\n        result = Array(n);\n\n    while (++index < n) {\n      result[index] = iteratee(index);\n    }\n    return result;\n  }\n\n  /**\n   * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array\n   * of key-value pairs for `object` corresponding to the property names of `props`.\n   *\n   * @private\n   * @param {Object} object The object to query.\n   * @param {Array} props The property names to get values for.\n   * @returns {Object} Returns the key-value pairs.\n   */\n  function baseToPairs(object, props) {\n    return arrayMap(props, function(key) {\n      return [key, object[key]];\n    });\n  }\n\n  /**\n   * The base implementation of `_.trim`.\n   *\n   * @private\n   * @param {string} string The string to trim.\n   * @returns {string} Returns the trimmed string.\n   */\n  function baseTrim(string) {\n    return string\n      ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n      : string;\n  }\n\n  /**\n   * The base implementation of `_.unary` without support for storing metadata.\n   *\n   * @private\n   * @param {Function} func The function to cap arguments for.\n   * @returns {Function} Returns the new capped function.\n   */\n  function baseUnary(func) {\n    return function(value) {\n      return func(value);\n    };\n  }\n\n  /**\n   * The base implementation of `_.values` and `_.valuesIn` which creates an\n   * array of `object` property values corresponding to the property names\n   * of `props`.\n   *\n   * @private\n   * @param {Object} object The object to query.\n   * @param {Array} props The property names to get values for.\n   * @returns {Object} Returns the array of property values.\n   */\n  function baseValues(object, props) {\n    return arrayMap(props, function(key) {\n      return object[key];\n    });\n  }\n\n  /**\n   * Checks if a `cache` value for `key` exists.\n   *\n   * @private\n   * @param {Object} cache The cache to query.\n   * @param {string} key The key of the entry to check.\n   * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n   */\n  function cacheHas(cache, key) {\n    return cache.has(key);\n  }\n\n  /**\n   * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol\n   * that is not found in the character symbols.\n   *\n   * @private\n   * @param {Array} strSymbols The string symbols to inspect.\n   * @param {Array} chrSymbols The character symbols to find.\n   * @returns {number} Returns the index of the first unmatched string symbol.\n   */\n  function charsStartIndex(strSymbols, chrSymbols) {\n    var index = -1,\n        length = strSymbols.length;\n\n    while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n    return index;\n  }\n\n  /**\n   * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol\n   * that is not found in the character symbols.\n   *\n   * @private\n   * @param {Array} strSymbols The string symbols to inspect.\n   * @param {Array} chrSymbols The character symbols to find.\n   * @returns {number} Returns the index of the last unmatched string symbol.\n   */\n  function charsEndIndex(strSymbols, chrSymbols) {\n    var index = strSymbols.length;\n\n    while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n    return index;\n  }\n\n  /**\n   * Gets the number of `placeholder` occurrences in `array`.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} placeholder The placeholder to search for.\n   * @returns {number} Returns the placeholder count.\n   */\n  function countHolders(array, placeholder) {\n    var length = array.length,\n        result = 0;\n\n    while (length--) {\n      if (array[length] === placeholder) {\n        ++result;\n      }\n    }\n    return result;\n  }\n\n  /**\n   * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A\n   * letters to basic Latin letters.\n   *\n   * @private\n   * @param {string} letter The matched letter to deburr.\n   * @returns {string} Returns the deburred letter.\n   */\n  var deburrLetter = basePropertyOf(deburredLetters);\n\n  /**\n   * Used by `_.escape` to convert characters to HTML entities.\n   *\n   * @private\n   * @param {string} chr The matched character to escape.\n   * @returns {string} Returns the escaped character.\n   */\n  var escapeHtmlChar = basePropertyOf(htmlEscapes);\n\n  /**\n   * Used by `_.template` to escape characters for inclusion in compiled string literals.\n   *\n   * @private\n   * @param {string} chr The matched character to escape.\n   * @returns {string} Returns the escaped character.\n   */\n  function escapeStringChar(chr) {\n    return '\\\\' + stringEscapes[chr];\n  }\n\n  /**\n   * Gets the value at `key` of `object`.\n   *\n   * @private\n   * @param {Object} [object] The object to query.\n   * @param {string} key The key of the property to get.\n   * @returns {*} Returns the property value.\n   */\n  function getValue(object, key) {\n    return object == null ? undefined : object[key];\n  }\n\n  /**\n   * Checks if `string` contains Unicode symbols.\n   *\n   * @private\n   * @param {string} string The string to inspect.\n   * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n   */\n  function hasUnicode(string) {\n    return reHasUnicode.test(string);\n  }\n\n  /**\n   * Checks if `string` contains a word composed of Unicode symbols.\n   *\n   * @private\n   * @param {string} string The string to inspect.\n   * @returns {boolean} Returns `true` if a word is found, else `false`.\n   */\n  function hasUnicodeWord(string) {\n    return reHasUnicodeWord.test(string);\n  }\n\n  /**\n   * Converts `iterator` to an array.\n   *\n   * @private\n   * @param {Object} iterator The iterator to convert.\n   * @returns {Array} Returns the converted array.\n   */\n  function iteratorToArray(iterator) {\n    var data,\n        result = [];\n\n    while (!(data = iterator.next()).done) {\n      result.push(data.value);\n    }\n    return result;\n  }\n\n  /**\n   * Converts `map` to its key-value pairs.\n   *\n   * @private\n   * @param {Object} map The map to convert.\n   * @returns {Array} Returns the key-value pairs.\n   */\n  function mapToArray(map) {\n    var index = -1,\n        result = Array(map.size);\n\n    map.forEach(function(value, key) {\n      result[++index] = [key, value];\n    });\n    return result;\n  }\n\n  /**\n   * Creates a unary function that invokes `func` with its argument transformed.\n   *\n   * @private\n   * @param {Function} func The function to wrap.\n   * @param {Function} transform The argument transform.\n   * @returns {Function} Returns the new function.\n   */\n  function overArg(func, transform) {\n    return function(arg) {\n      return func(transform(arg));\n    };\n  }\n\n  /**\n   * Replaces all `placeholder` elements in `array` with an internal placeholder\n   * and returns an array of their indexes.\n   *\n   * @private\n   * @param {Array} array The array to modify.\n   * @param {*} placeholder The placeholder to replace.\n   * @returns {Array} Returns the new array of placeholder indexes.\n   */\n  function replaceHolders(array, placeholder) {\n    var index = -1,\n        length = array.length,\n        resIndex = 0,\n        result = [];\n\n    while (++index < length) {\n      var value = array[index];\n      if (value === placeholder || value === PLACEHOLDER) {\n        array[index] = PLACEHOLDER;\n        result[resIndex++] = index;\n      }\n    }\n    return result;\n  }\n\n  /**\n   * Converts `set` to an array of its values.\n   *\n   * @private\n   * @param {Object} set The set to convert.\n   * @returns {Array} Returns the values.\n   */\n  function setToArray(set) {\n    var index = -1,\n        result = Array(set.size);\n\n    set.forEach(function(value) {\n      result[++index] = value;\n    });\n    return result;\n  }\n\n  /**\n   * Converts `set` to its value-value pairs.\n   *\n   * @private\n   * @param {Object} set The set to convert.\n   * @returns {Array} Returns the value-value pairs.\n   */\n  function setToPairs(set) {\n    var index = -1,\n        result = Array(set.size);\n\n    set.forEach(function(value) {\n      result[++index] = [value, value];\n    });\n    return result;\n  }\n\n  /**\n   * A specialized version of `_.indexOf` which performs strict equality\n   * comparisons of values, i.e. `===`.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} value The value to search for.\n   * @param {number} fromIndex The index to search from.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function strictIndexOf(array, value, fromIndex) {\n    var index = fromIndex - 1,\n        length = array.length;\n\n    while (++index < length) {\n      if (array[index] === value) {\n        return index;\n      }\n    }\n    return -1;\n  }\n\n  /**\n   * A specialized version of `_.lastIndexOf` which performs strict equality\n   * comparisons of values, i.e. `===`.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} value The value to search for.\n   * @param {number} fromIndex The index to search from.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function strictLastIndexOf(array, value, fromIndex) {\n    var index = fromIndex + 1;\n    while (index--) {\n      if (array[index] === value) {\n        return index;\n      }\n    }\n    return index;\n  }\n\n  /**\n   * Gets the number of symbols in `string`.\n   *\n   * @private\n   * @param {string} string The string to inspect.\n   * @returns {number} Returns the string size.\n   */\n  function stringSize(string) {\n    return hasUnicode(string)\n      ? unicodeSize(string)\n      : asciiSize(string);\n  }\n\n  /**\n   * Converts `string` to an array.\n   *\n   * @private\n   * @param {string} string The string to convert.\n   * @returns {Array} Returns the converted array.\n   */\n  function stringToArray(string) {\n    return hasUnicode(string)\n      ? unicodeToArray(string)\n      : asciiToArray(string);\n  }\n\n  /**\n   * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n   * character of `string`.\n   *\n   * @private\n   * @param {string} string The string to inspect.\n   * @returns {number} Returns the index of the last non-whitespace character.\n   */\n  function trimmedEndIndex(string) {\n    var index = string.length;\n\n    while (index-- && reWhitespace.test(string.charAt(index))) {}\n    return index;\n  }\n\n  /**\n   * Used by `_.unescape` to convert HTML entities to characters.\n   *\n   * @private\n   * @param {string} chr The matched character to unescape.\n   * @returns {string} Returns the unescaped character.\n   */\n  var unescapeHtmlChar = basePropertyOf(htmlUnescapes);\n\n  /**\n   * Gets the size of a Unicode `string`.\n   *\n   * @private\n   * @param {string} string The string inspect.\n   * @returns {number} Returns the string size.\n   */\n  function unicodeSize(string) {\n    var result = reUnicode.lastIndex = 0;\n    while (reUnicode.test(string)) {\n      ++result;\n    }\n    return result;\n  }\n\n  /**\n   * Converts a Unicode `string` to an array.\n   *\n   * @private\n   * @param {string} string The string to convert.\n   * @returns {Array} Returns the converted array.\n   */\n  function unicodeToArray(string) {\n    return string.match(reUnicode) || [];\n  }\n\n  /**\n   * Splits a Unicode `string` into an array of its words.\n   *\n   * @private\n   * @param {string} The string to inspect.\n   * @returns {Array} Returns the words of `string`.\n   */\n  function unicodeWords(string) {\n    return string.match(reUnicodeWord) || [];\n  }\n\n  /*--------------------------------------------------------------------------*/\n\n  /**\n   * Create a new pristine `lodash` function using the `context` object.\n   *\n   * @static\n   * @memberOf _\n   * @since 1.1.0\n   * @category Util\n   * @param {Object} [context=root] The context object.\n   * @returns {Function} Returns a new `lodash` function.\n   * @example\n   *\n   * _.mixin({ 'foo': _.constant('foo') });\n   *\n   * var lodash = _.runInContext();\n   * lodash.mixin({ 'bar': lodash.constant('bar') });\n   *\n   * _.isFunction(_.foo);\n   * // => true\n   * _.isFunction(_.bar);\n   * // => false\n   *\n   * lodash.isFunction(lodash.foo);\n   * // => false\n   * lodash.isFunction(lodash.bar);\n   * // => true\n   *\n   * // Create a suped-up `defer` in Node.js.\n   * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer;\n   */\n  var runInContext = (function runInContext(context) {\n    context = context == null ? root : _.defaults(root.Object(), context, _.pick(root, contextProps));\n\n    /** Built-in constructor references. */\n    var Array = context.Array,\n        Date = context.Date,\n        Error = context.Error,\n        Function = context.Function,\n        Math = context.Math,\n        Object = context.Object,\n        RegExp = context.RegExp,\n        String = context.String,\n        TypeError = context.TypeError;\n\n    /** Used for built-in method references. */\n    var arrayProto = Array.prototype,\n        funcProto = Function.prototype,\n        objectProto = Object.prototype;\n\n    /** Used to detect overreaching core-js shims. */\n    var coreJsData = context['__core-js_shared__'];\n\n    /** Used to resolve the decompiled source of functions. */\n    var funcToString = funcProto.toString;\n\n    /** Used to check objects for own properties. */\n    var hasOwnProperty = objectProto.hasOwnProperty;\n\n    /** Used to generate unique IDs. */\n    var idCounter = 0;\n\n    /** Used to detect methods masquerading as native. */\n    var maskSrcKey = (function() {\n      var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n      return uid ? ('Symbol(src)_1.' + uid) : '';\n    }());\n\n    /**\n     * Used to resolve the\n     * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n     * of values.\n     */\n    var nativeObjectToString = objectProto.toString;\n\n    /** Used to infer the `Object` constructor. */\n    var objectCtorString = funcToString.call(Object);\n\n    /** Used to restore the original `_` reference in `_.noConflict`. */\n    var oldDash = root._;\n\n    /** Used to detect if a method is native. */\n    var reIsNative = RegExp('^' +\n      funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n      .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n    );\n\n    /** Built-in value references. */\n    var Buffer = moduleExports ? context.Buffer : undefined,\n        Symbol = context.Symbol,\n        Uint8Array = context.Uint8Array,\n        allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined,\n        getPrototype = overArg(Object.getPrototypeOf, Object),\n        objectCreate = Object.create,\n        propertyIsEnumerable = objectProto.propertyIsEnumerable,\n        splice = arrayProto.splice,\n        spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined,\n        symIterator = Symbol ? Symbol.iterator : undefined,\n        symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n    var defineProperty = (function() {\n      try {\n        var func = getNative(Object, 'defineProperty');\n        func({}, '', {});\n        return func;\n      } catch (e) {}\n    }());\n\n    /** Mocked built-ins. */\n    var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout,\n        ctxNow = Date && Date.now !== root.Date.now && Date.now,\n        ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout;\n\n    /* Built-in method references for those with the same name as other `lodash` methods. */\n    var nativeCeil = Math.ceil,\n        nativeFloor = Math.floor,\n        nativeGetSymbols = Object.getOwnPropertySymbols,\n        nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n        nativeIsFinite = context.isFinite,\n        nativeJoin = arrayProto.join,\n        nativeKeys = overArg(Object.keys, Object),\n        nativeMax = Math.max,\n        nativeMin = Math.min,\n        nativeNow = Date.now,\n        nativeParseInt = context.parseInt,\n        nativeRandom = Math.random,\n        nativeReverse = arrayProto.reverse;\n\n    /* Built-in method references that are verified to be native. */\n    var DataView = getNative(context, 'DataView'),\n        Map = getNative(context, 'Map'),\n        Promise = getNative(context, 'Promise'),\n        Set = getNative(context, 'Set'),\n        WeakMap = getNative(context, 'WeakMap'),\n        nativeCreate = getNative(Object, 'create');\n\n    /** Used to store function metadata. */\n    var metaMap = WeakMap && new WeakMap;\n\n    /** Used to lookup unminified function names. */\n    var realNames = {};\n\n    /** Used to detect maps, sets, and weakmaps. */\n    var dataViewCtorString = toSource(DataView),\n        mapCtorString = toSource(Map),\n        promiseCtorString = toSource(Promise),\n        setCtorString = toSource(Set),\n        weakMapCtorString = toSource(WeakMap);\n\n    /** Used to convert symbols to primitives and strings. */\n    var symbolProto = Symbol ? Symbol.prototype : undefined,\n        symbolValueOf = symbolProto ? symbolProto.valueOf : undefined,\n        symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a `lodash` object which wraps `value` to enable implicit method\n     * chain sequences. Methods that operate on and return arrays, collections,\n     * and functions can be chained together. Methods that retrieve a single value\n     * or may return a primitive value will automatically end the chain sequence\n     * and return the unwrapped value. Otherwise, the value must be unwrapped\n     * with `_#value`.\n     *\n     * Explicit chain sequences, which must be unwrapped with `_#value`, may be\n     * enabled using `_.chain`.\n     *\n     * The execution of chained methods is lazy, that is, it's deferred until\n     * `_#value` is implicitly or explicitly called.\n     *\n     * Lazy evaluation allows several methods to support shortcut fusion.\n     * Shortcut fusion is an optimization to merge iteratee calls; this avoids\n     * the creation of intermediate arrays and can greatly reduce the number of\n     * iteratee executions. Sections of a chain sequence qualify for shortcut\n     * fusion if the section is applied to an array and iteratees accept only\n     * one argument. The heuristic for whether a section qualifies for shortcut\n     * fusion is subject to change.\n     *\n     * Chaining is supported in custom builds as long as the `_#value` method is\n     * directly or indirectly included in the build.\n     *\n     * In addition to lodash methods, wrappers have `Array` and `String` methods.\n     *\n     * The wrapper `Array` methods are:\n     * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift`\n     *\n     * The wrapper `String` methods are:\n     * `replace` and `split`\n     *\n     * The wrapper methods that support shortcut fusion are:\n     * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`,\n     * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`,\n     * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray`\n     *\n     * The chainable wrapper methods are:\n     * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`,\n     * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`,\n     * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`,\n     * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`,\n     * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`,\n     * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`,\n     * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`,\n     * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`,\n     * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`,\n     * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`,\n     * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`,\n     * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`,\n     * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`,\n     * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`,\n     * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`,\n     * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`,\n     * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`,\n     * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`,\n     * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`,\n     * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`,\n     * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`,\n     * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`,\n     * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`,\n     * `zipObject`, `zipObjectDeep`, and `zipWith`\n     *\n     * The wrapper methods that are **not** chainable by default are:\n     * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`,\n     * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`,\n     * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`,\n     * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`,\n     * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`,\n     * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`,\n     * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`,\n     * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`,\n     * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`,\n     * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`,\n     * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`,\n     * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`,\n     * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`,\n     * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`,\n     * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`,\n     * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`,\n     * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`,\n     * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`,\n     * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`,\n     * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`,\n     * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`,\n     * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`,\n     * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`,\n     * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`,\n     * `upperFirst`, `value`, and `words`\n     *\n     * @name _\n     * @constructor\n     * @category Seq\n     * @param {*} value The value to wrap in a `lodash` instance.\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var wrapped = _([1, 2, 3]);\n     *\n     * // Returns an unwrapped value.\n     * wrapped.reduce(_.add);\n     * // => 6\n     *\n     * // Returns a wrapped value.\n     * var squares = wrapped.map(square);\n     *\n     * _.isArray(squares);\n     * // => false\n     *\n     * _.isArray(squares.value());\n     * // => true\n     */\n    function lodash(value) {\n      if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) {\n        if (value instanceof LodashWrapper) {\n          return value;\n        }\n        if (hasOwnProperty.call(value, '__wrapped__')) {\n          return wrapperClone(value);\n        }\n      }\n      return new LodashWrapper(value);\n    }\n\n    /**\n     * The base implementation of `_.create` without support for assigning\n     * properties to the created object.\n     *\n     * @private\n     * @param {Object} proto The object to inherit from.\n     * @returns {Object} Returns the new object.\n     */\n    var baseCreate = (function() {\n      function object() {}\n      return function(proto) {\n        if (!isObject(proto)) {\n          return {};\n        }\n        if (objectCreate) {\n          return objectCreate(proto);\n        }\n        object.prototype = proto;\n        var result = new object;\n        object.prototype = undefined;\n        return result;\n      };\n    }());\n\n    /**\n     * The function whose prototype chain sequence wrappers inherit from.\n     *\n     * @private\n     */\n    function baseLodash() {\n      // No operation performed.\n    }\n\n    /**\n     * The base constructor for creating `lodash` wrapper objects.\n     *\n     * @private\n     * @param {*} value The value to wrap.\n     * @param {boolean} [chainAll] Enable explicit method chain sequences.\n     */\n    function LodashWrapper(value, chainAll) {\n      this.__wrapped__ = value;\n      this.__actions__ = [];\n      this.__chain__ = !!chainAll;\n      this.__index__ = 0;\n      this.__values__ = undefined;\n    }\n\n    /**\n     * By default, the template delimiters used by lodash are like those in\n     * embedded Ruby (ERB) as well as ES2015 template strings. Change the\n     * following template settings to use alternative delimiters.\n     *\n     * @static\n     * @memberOf _\n     * @type {Object}\n     */\n    lodash.templateSettings = {\n\n      /**\n       * Used to detect `data` property values to be HTML-escaped.\n       *\n       * @memberOf _.templateSettings\n       * @type {RegExp}\n       */\n      'escape': reEscape,\n\n      /**\n       * Used to detect code to be evaluated.\n       *\n       * @memberOf _.templateSettings\n       * @type {RegExp}\n       */\n      'evaluate': reEvaluate,\n\n      /**\n       * Used to detect `data` property values to inject.\n       *\n       * @memberOf _.templateSettings\n       * @type {RegExp}\n       */\n      'interpolate': reInterpolate,\n\n      /**\n       * Used to reference the data object in the template text.\n       *\n       * @memberOf _.templateSettings\n       * @type {string}\n       */\n      'variable': '',\n\n      /**\n       * Used to import variables into the compiled template.\n       *\n       * @memberOf _.templateSettings\n       * @type {Object}\n       */\n      'imports': {\n\n        /**\n         * A reference to the `lodash` function.\n         *\n         * @memberOf _.templateSettings.imports\n         * @type {Function}\n         */\n        '_': lodash\n      }\n    };\n\n    // Ensure wrappers are instances of `baseLodash`.\n    lodash.prototype = baseLodash.prototype;\n    lodash.prototype.constructor = lodash;\n\n    LodashWrapper.prototype = baseCreate(baseLodash.prototype);\n    LodashWrapper.prototype.constructor = LodashWrapper;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation.\n     *\n     * @private\n     * @constructor\n     * @param {*} value The value to wrap.\n     */\n    function LazyWrapper(value) {\n      this.__wrapped__ = value;\n      this.__actions__ = [];\n      this.__dir__ = 1;\n      this.__filtered__ = false;\n      this.__iteratees__ = [];\n      this.__takeCount__ = MAX_ARRAY_LENGTH;\n      this.__views__ = [];\n    }\n\n    /**\n     * Creates a clone of the lazy wrapper object.\n     *\n     * @private\n     * @name clone\n     * @memberOf LazyWrapper\n     * @returns {Object} Returns the cloned `LazyWrapper` object.\n     */\n    function lazyClone() {\n      var result = new LazyWrapper(this.__wrapped__);\n      result.__actions__ = copyArray(this.__actions__);\n      result.__dir__ = this.__dir__;\n      result.__filtered__ = this.__filtered__;\n      result.__iteratees__ = copyArray(this.__iteratees__);\n      result.__takeCount__ = this.__takeCount__;\n      result.__views__ = copyArray(this.__views__);\n      return result;\n    }\n\n    /**\n     * Reverses the direction of lazy iteration.\n     *\n     * @private\n     * @name reverse\n     * @memberOf LazyWrapper\n     * @returns {Object} Returns the new reversed `LazyWrapper` object.\n     */\n    function lazyReverse() {\n      if (this.__filtered__) {\n        var result = new LazyWrapper(this);\n        result.__dir__ = -1;\n        result.__filtered__ = true;\n      } else {\n        result = this.clone();\n        result.__dir__ *= -1;\n      }\n      return result;\n    }\n\n    /**\n     * Extracts the unwrapped value from its lazy wrapper.\n     *\n     * @private\n     * @name value\n     * @memberOf LazyWrapper\n     * @returns {*} Returns the unwrapped value.\n     */\n    function lazyValue() {\n      var array = this.__wrapped__.value(),\n          dir = this.__dir__,\n          isArr = isArray(array),\n          isRight = dir < 0,\n          arrLength = isArr ? array.length : 0,\n          view = getView(0, arrLength, this.__views__),\n          start = view.start,\n          end = view.end,\n          length = end - start,\n          index = isRight ? end : (start - 1),\n          iteratees = this.__iteratees__,\n          iterLength = iteratees.length,\n          resIndex = 0,\n          takeCount = nativeMin(length, this.__takeCount__);\n\n      if (!isArr || (!isRight && arrLength == length && takeCount == length)) {\n        return baseWrapperValue(array, this.__actions__);\n      }\n      var result = [];\n\n      outer:\n      while (length-- && resIndex < takeCount) {\n        index += dir;\n\n        var iterIndex = -1,\n            value = array[index];\n\n        while (++iterIndex < iterLength) {\n          var data = iteratees[iterIndex],\n              iteratee = data.iteratee,\n              type = data.type,\n              computed = iteratee(value);\n\n          if (type == LAZY_MAP_FLAG) {\n            value = computed;\n          } else if (!computed) {\n            if (type == LAZY_FILTER_FLAG) {\n              continue outer;\n            } else {\n              break outer;\n            }\n          }\n        }\n        result[resIndex++] = value;\n      }\n      return result;\n    }\n\n    // Ensure `LazyWrapper` is an instance of `baseLodash`.\n    LazyWrapper.prototype = baseCreate(baseLodash.prototype);\n    LazyWrapper.prototype.constructor = LazyWrapper;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a hash object.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [entries] The key-value pairs to cache.\n     */\n    function Hash(entries) {\n      var index = -1,\n          length = entries == null ? 0 : entries.length;\n\n      this.clear();\n      while (++index < length) {\n        var entry = entries[index];\n        this.set(entry[0], entry[1]);\n      }\n    }\n\n    /**\n     * Removes all key-value entries from the hash.\n     *\n     * @private\n     * @name clear\n     * @memberOf Hash\n     */\n    function hashClear() {\n      this.__data__ = nativeCreate ? nativeCreate(null) : {};\n      this.size = 0;\n    }\n\n    /**\n     * Removes `key` and its value from the hash.\n     *\n     * @private\n     * @name delete\n     * @memberOf Hash\n     * @param {Object} hash The hash to modify.\n     * @param {string} key The key of the value to remove.\n     * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n     */\n    function hashDelete(key) {\n      var result = this.has(key) && delete this.__data__[key];\n      this.size -= result ? 1 : 0;\n      return result;\n    }\n\n    /**\n     * Gets the hash value for `key`.\n     *\n     * @private\n     * @name get\n     * @memberOf Hash\n     * @param {string} key The key of the value to get.\n     * @returns {*} Returns the entry value.\n     */\n    function hashGet(key) {\n      var data = this.__data__;\n      if (nativeCreate) {\n        var result = data[key];\n        return result === HASH_UNDEFINED ? undefined : result;\n      }\n      return hasOwnProperty.call(data, key) ? data[key] : undefined;\n    }\n\n    /**\n     * Checks if a hash value for `key` exists.\n     *\n     * @private\n     * @name has\n     * @memberOf Hash\n     * @param {string} key The key of the entry to check.\n     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n     */\n    function hashHas(key) {\n      var data = this.__data__;\n      return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n    }\n\n    /**\n     * Sets the hash `key` to `value`.\n     *\n     * @private\n     * @name set\n     * @memberOf Hash\n     * @param {string} key The key of the value to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns the hash instance.\n     */\n    function hashSet(key, value) {\n      var data = this.__data__;\n      this.size += this.has(key) ? 0 : 1;\n      data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n      return this;\n    }\n\n    // Add methods to `Hash`.\n    Hash.prototype.clear = hashClear;\n    Hash.prototype['delete'] = hashDelete;\n    Hash.prototype.get = hashGet;\n    Hash.prototype.has = hashHas;\n    Hash.prototype.set = hashSet;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates an list cache object.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [entries] The key-value pairs to cache.\n     */\n    function ListCache(entries) {\n      var index = -1,\n          length = entries == null ? 0 : entries.length;\n\n      this.clear();\n      while (++index < length) {\n        var entry = entries[index];\n        this.set(entry[0], entry[1]);\n      }\n    }\n\n    /**\n     * Removes all key-value entries from the list cache.\n     *\n     * @private\n     * @name clear\n     * @memberOf ListCache\n     */\n    function listCacheClear() {\n      this.__data__ = [];\n      this.size = 0;\n    }\n\n    /**\n     * Removes `key` and its value from the list cache.\n     *\n     * @private\n     * @name delete\n     * @memberOf ListCache\n     * @param {string} key The key of the value to remove.\n     * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n     */\n    function listCacheDelete(key) {\n      var data = this.__data__,\n          index = assocIndexOf(data, key);\n\n      if (index < 0) {\n        return false;\n      }\n      var lastIndex = data.length - 1;\n      if (index == lastIndex) {\n        data.pop();\n      } else {\n        splice.call(data, index, 1);\n      }\n      --this.size;\n      return true;\n    }\n\n    /**\n     * Gets the list cache value for `key`.\n     *\n     * @private\n     * @name get\n     * @memberOf ListCache\n     * @param {string} key The key of the value to get.\n     * @returns {*} Returns the entry value.\n     */\n    function listCacheGet(key) {\n      var data = this.__data__,\n          index = assocIndexOf(data, key);\n\n      return index < 0 ? undefined : data[index][1];\n    }\n\n    /**\n     * Checks if a list cache value for `key` exists.\n     *\n     * @private\n     * @name has\n     * @memberOf ListCache\n     * @param {string} key The key of the entry to check.\n     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n     */\n    function listCacheHas(key) {\n      return assocIndexOf(this.__data__, key) > -1;\n    }\n\n    /**\n     * Sets the list cache `key` to `value`.\n     *\n     * @private\n     * @name set\n     * @memberOf ListCache\n     * @param {string} key The key of the value to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns the list cache instance.\n     */\n    function listCacheSet(key, value) {\n      var data = this.__data__,\n          index = assocIndexOf(data, key);\n\n      if (index < 0) {\n        ++this.size;\n        data.push([key, value]);\n      } else {\n        data[index][1] = value;\n      }\n      return this;\n    }\n\n    // Add methods to `ListCache`.\n    ListCache.prototype.clear = listCacheClear;\n    ListCache.prototype['delete'] = listCacheDelete;\n    ListCache.prototype.get = listCacheGet;\n    ListCache.prototype.has = listCacheHas;\n    ListCache.prototype.set = listCacheSet;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a map cache object to store key-value pairs.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [entries] The key-value pairs to cache.\n     */\n    function MapCache(entries) {\n      var index = -1,\n          length = entries == null ? 0 : entries.length;\n\n      this.clear();\n      while (++index < length) {\n        var entry = entries[index];\n        this.set(entry[0], entry[1]);\n      }\n    }\n\n    /**\n     * Removes all key-value entries from the map.\n     *\n     * @private\n     * @name clear\n     * @memberOf MapCache\n     */\n    function mapCacheClear() {\n      this.size = 0;\n      this.__data__ = {\n        'hash': new Hash,\n        'map': new (Map || ListCache),\n        'string': new Hash\n      };\n    }\n\n    /**\n     * Removes `key` and its value from the map.\n     *\n     * @private\n     * @name delete\n     * @memberOf MapCache\n     * @param {string} key The key of the value to remove.\n     * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n     */\n    function mapCacheDelete(key) {\n      var result = getMapData(this, key)['delete'](key);\n      this.size -= result ? 1 : 0;\n      return result;\n    }\n\n    /**\n     * Gets the map value for `key`.\n     *\n     * @private\n     * @name get\n     * @memberOf MapCache\n     * @param {string} key The key of the value to get.\n     * @returns {*} Returns the entry value.\n     */\n    function mapCacheGet(key) {\n      return getMapData(this, key).get(key);\n    }\n\n    /**\n     * Checks if a map value for `key` exists.\n     *\n     * @private\n     * @name has\n     * @memberOf MapCache\n     * @param {string} key The key of the entry to check.\n     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n     */\n    function mapCacheHas(key) {\n      return getMapData(this, key).has(key);\n    }\n\n    /**\n     * Sets the map `key` to `value`.\n     *\n     * @private\n     * @name set\n     * @memberOf MapCache\n     * @param {string} key The key of the value to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns the map cache instance.\n     */\n    function mapCacheSet(key, value) {\n      var data = getMapData(this, key),\n          size = data.size;\n\n      data.set(key, value);\n      this.size += data.size == size ? 0 : 1;\n      return this;\n    }\n\n    // Add methods to `MapCache`.\n    MapCache.prototype.clear = mapCacheClear;\n    MapCache.prototype['delete'] = mapCacheDelete;\n    MapCache.prototype.get = mapCacheGet;\n    MapCache.prototype.has = mapCacheHas;\n    MapCache.prototype.set = mapCacheSet;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     *\n     * Creates an array cache object to store unique values.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [values] The values to cache.\n     */\n    function SetCache(values) {\n      var index = -1,\n          length = values == null ? 0 : values.length;\n\n      this.__data__ = new MapCache;\n      while (++index < length) {\n        this.add(values[index]);\n      }\n    }\n\n    /**\n     * Adds `value` to the array cache.\n     *\n     * @private\n     * @name add\n     * @memberOf SetCache\n     * @alias push\n     * @param {*} value The value to cache.\n     * @returns {Object} Returns the cache instance.\n     */\n    function setCacheAdd(value) {\n      this.__data__.set(value, HASH_UNDEFINED);\n      return this;\n    }\n\n    /**\n     * Checks if `value` is in the array cache.\n     *\n     * @private\n     * @name has\n     * @memberOf SetCache\n     * @param {*} value The value to search for.\n     * @returns {number} Returns `true` if `value` is found, else `false`.\n     */\n    function setCacheHas(value) {\n      return this.__data__.has(value);\n    }\n\n    // Add methods to `SetCache`.\n    SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\n    SetCache.prototype.has = setCacheHas;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a stack cache object to store key-value pairs.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [entries] The key-value pairs to cache.\n     */\n    function Stack(entries) {\n      var data = this.__data__ = new ListCache(entries);\n      this.size = data.size;\n    }\n\n    /**\n     * Removes all key-value entries from the stack.\n     *\n     * @private\n     * @name clear\n     * @memberOf Stack\n     */\n    function stackClear() {\n      this.__data__ = new ListCache;\n      this.size = 0;\n    }\n\n    /**\n     * Removes `key` and its value from the stack.\n     *\n     * @private\n     * @name delete\n     * @memberOf Stack\n     * @param {string} key The key of the value to remove.\n     * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n     */\n    function stackDelete(key) {\n      var data = this.__data__,\n          result = data['delete'](key);\n\n      this.size = data.size;\n      return result;\n    }\n\n    /**\n     * Gets the stack value for `key`.\n     *\n     * @private\n     * @name get\n     * @memberOf Stack\n     * @param {string} key The key of the value to get.\n     * @returns {*} Returns the entry value.\n     */\n    function stackGet(key) {\n      return this.__data__.get(key);\n    }\n\n    /**\n     * Checks if a stack value for `key` exists.\n     *\n     * @private\n     * @name has\n     * @memberOf Stack\n     * @param {string} key The key of the entry to check.\n     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n     */\n    function stackHas(key) {\n      return this.__data__.has(key);\n    }\n\n    /**\n     * Sets the stack `key` to `value`.\n     *\n     * @private\n     * @name set\n     * @memberOf Stack\n     * @param {string} key The key of the value to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns the stack cache instance.\n     */\n    function stackSet(key, value) {\n      var data = this.__data__;\n      if (data instanceof ListCache) {\n        var pairs = data.__data__;\n        if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n          pairs.push([key, value]);\n          this.size = ++data.size;\n          return this;\n        }\n        data = this.__data__ = new MapCache(pairs);\n      }\n      data.set(key, value);\n      this.size = data.size;\n      return this;\n    }\n\n    // Add methods to `Stack`.\n    Stack.prototype.clear = stackClear;\n    Stack.prototype['delete'] = stackDelete;\n    Stack.prototype.get = stackGet;\n    Stack.prototype.has = stackHas;\n    Stack.prototype.set = stackSet;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates an array of the enumerable property names of the array-like `value`.\n     *\n     * @private\n     * @param {*} value The value to query.\n     * @param {boolean} inherited Specify returning inherited property names.\n     * @returns {Array} Returns the array of property names.\n     */\n    function arrayLikeKeys(value, inherited) {\n      var isArr = isArray(value),\n          isArg = !isArr && isArguments(value),\n          isBuff = !isArr && !isArg && isBuffer(value),\n          isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n          skipIndexes = isArr || isArg || isBuff || isType,\n          result = skipIndexes ? baseTimes(value.length, String) : [],\n          length = result.length;\n\n      for (var key in value) {\n        if ((inherited || hasOwnProperty.call(value, key)) &&\n            !(skipIndexes && (\n               // Safari 9 has enumerable `arguments.length` in strict mode.\n               key == 'length' ||\n               // Node.js 0.10 has enumerable non-index properties on buffers.\n               (isBuff && (key == 'offset' || key == 'parent')) ||\n               // PhantomJS 2 has enumerable non-index properties on typed arrays.\n               (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n               // Skip index properties.\n               isIndex(key, length)\n            ))) {\n          result.push(key);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * A specialized version of `_.sample` for arrays.\n     *\n     * @private\n     * @param {Array} array The array to sample.\n     * @returns {*} Returns the random element.\n     */\n    function arraySample(array) {\n      var length = array.length;\n      return length ? array[baseRandom(0, length - 1)] : undefined;\n    }\n\n    /**\n     * A specialized version of `_.sampleSize` for arrays.\n     *\n     * @private\n     * @param {Array} array The array to sample.\n     * @param {number} n The number of elements to sample.\n     * @returns {Array} Returns the random elements.\n     */\n    function arraySampleSize(array, n) {\n      return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length));\n    }\n\n    /**\n     * A specialized version of `_.shuffle` for arrays.\n     *\n     * @private\n     * @param {Array} array The array to shuffle.\n     * @returns {Array} Returns the new shuffled array.\n     */\n    function arrayShuffle(array) {\n      return shuffleSelf(copyArray(array));\n    }\n\n    /**\n     * This function is like `assignValue` except that it doesn't assign\n     * `undefined` values.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {string} key The key of the property to assign.\n     * @param {*} value The value to assign.\n     */\n    function assignMergeValue(object, key, value) {\n      if ((value !== undefined && !eq(object[key], value)) ||\n          (value === undefined && !(key in object))) {\n        baseAssignValue(object, key, value);\n      }\n    }\n\n    /**\n     * Assigns `value` to `key` of `object` if the existing value is not equivalent\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {string} key The key of the property to assign.\n     * @param {*} value The value to assign.\n     */\n    function assignValue(object, key, value) {\n      var objValue = object[key];\n      if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n          (value === undefined && !(key in object))) {\n        baseAssignValue(object, key, value);\n      }\n    }\n\n    /**\n     * Gets the index at which the `key` is found in `array` of key-value pairs.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {*} key The key to search for.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     */\n    function assocIndexOf(array, key) {\n      var length = array.length;\n      while (length--) {\n        if (eq(array[length][0], key)) {\n          return length;\n        }\n      }\n      return -1;\n    }\n\n    /**\n     * Aggregates elements of `collection` on `accumulator` with keys transformed\n     * by `iteratee` and values set by `setter`.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} setter The function to set `accumulator` values.\n     * @param {Function} iteratee The iteratee to transform keys.\n     * @param {Object} accumulator The initial aggregated object.\n     * @returns {Function} Returns `accumulator`.\n     */\n    function baseAggregator(collection, setter, iteratee, accumulator) {\n      baseEach(collection, function(value, key, collection) {\n        setter(accumulator, value, iteratee(value), collection);\n      });\n      return accumulator;\n    }\n\n    /**\n     * The base implementation of `_.assign` without support for multiple sources\n     * or `customizer` functions.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @returns {Object} Returns `object`.\n     */\n    function baseAssign(object, source) {\n      return object && copyObject(source, keys(source), object);\n    }\n\n    /**\n     * The base implementation of `_.assignIn` without support for multiple sources\n     * or `customizer` functions.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @returns {Object} Returns `object`.\n     */\n    function baseAssignIn(object, source) {\n      return object && copyObject(source, keysIn(source), object);\n    }\n\n    /**\n     * The base implementation of `assignValue` and `assignMergeValue` without\n     * value checks.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {string} key The key of the property to assign.\n     * @param {*} value The value to assign.\n     */\n    function baseAssignValue(object, key, value) {\n      if (key == '__proto__' && defineProperty) {\n        defineProperty(object, key, {\n          'configurable': true,\n          'enumerable': true,\n          'value': value,\n          'writable': true\n        });\n      } else {\n        object[key] = value;\n      }\n    }\n\n    /**\n     * The base implementation of `_.at` without support for individual paths.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {string[]} paths The property paths to pick.\n     * @returns {Array} Returns the picked elements.\n     */\n    function baseAt(object, paths) {\n      var index = -1,\n          length = paths.length,\n          result = Array(length),\n          skip = object == null;\n\n      while (++index < length) {\n        result[index] = skip ? undefined : get(object, paths[index]);\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.clamp` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {number} number The number to clamp.\n     * @param {number} [lower] The lower bound.\n     * @param {number} upper The upper bound.\n     * @returns {number} Returns the clamped number.\n     */\n    function baseClamp(number, lower, upper) {\n      if (number === number) {\n        if (upper !== undefined) {\n          number = number <= upper ? number : upper;\n        }\n        if (lower !== undefined) {\n          number = number >= lower ? number : lower;\n        }\n      }\n      return number;\n    }\n\n    /**\n     * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n     * traversed objects.\n     *\n     * @private\n     * @param {*} value The value to clone.\n     * @param {boolean} bitmask The bitmask flags.\n     *  1 - Deep clone\n     *  2 - Flatten inherited properties\n     *  4 - Clone symbols\n     * @param {Function} [customizer] The function to customize cloning.\n     * @param {string} [key] The key of `value`.\n     * @param {Object} [object] The parent object of `value`.\n     * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n     * @returns {*} Returns the cloned value.\n     */\n    function baseClone(value, bitmask, customizer, key, object, stack) {\n      var result,\n          isDeep = bitmask & CLONE_DEEP_FLAG,\n          isFlat = bitmask & CLONE_FLAT_FLAG,\n          isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n      if (customizer) {\n        result = object ? customizer(value, key, object, stack) : customizer(value);\n      }\n      if (result !== undefined) {\n        return result;\n      }\n      if (!isObject(value)) {\n        return value;\n      }\n      var isArr = isArray(value);\n      if (isArr) {\n        result = initCloneArray(value);\n        if (!isDeep) {\n          return copyArray(value, result);\n        }\n      } else {\n        var tag = getTag(value),\n            isFunc = tag == funcTag || tag == genTag;\n\n        if (isBuffer(value)) {\n          return cloneBuffer(value, isDeep);\n        }\n        if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n          result = (isFlat || isFunc) ? {} : initCloneObject(value);\n          if (!isDeep) {\n            return isFlat\n              ? copySymbolsIn(value, baseAssignIn(result, value))\n              : copySymbols(value, baseAssign(result, value));\n          }\n        } else {\n          if (!cloneableTags[tag]) {\n            return object ? value : {};\n          }\n          result = initCloneByTag(value, tag, isDeep);\n        }\n      }\n      // Check for circular references and return its corresponding clone.\n      stack || (stack = new Stack);\n      var stacked = stack.get(value);\n      if (stacked) {\n        return stacked;\n      }\n      stack.set(value, result);\n\n      if (isSet(value)) {\n        value.forEach(function(subValue) {\n          result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n        });\n      } else if (isMap(value)) {\n        value.forEach(function(subValue, key) {\n          result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n        });\n      }\n\n      var keysFunc = isFull\n        ? (isFlat ? getAllKeysIn : getAllKeys)\n        : (isFlat ? keysIn : keys);\n\n      var props = isArr ? undefined : keysFunc(value);\n      arrayEach(props || value, function(subValue, key) {\n        if (props) {\n          key = subValue;\n          subValue = value[key];\n        }\n        // Recursively populate clone (susceptible to call stack limits).\n        assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n      });\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.conforms` which doesn't clone `source`.\n     *\n     * @private\n     * @param {Object} source The object of property predicates to conform to.\n     * @returns {Function} Returns the new spec function.\n     */\n    function baseConforms(source) {\n      var props = keys(source);\n      return function(object) {\n        return baseConformsTo(object, source, props);\n      };\n    }\n\n    /**\n     * The base implementation of `_.conformsTo` which accepts `props` to check.\n     *\n     * @private\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property predicates to conform to.\n     * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n     */\n    function baseConformsTo(object, source, props) {\n      var length = props.length;\n      if (object == null) {\n        return !length;\n      }\n      object = Object(object);\n      while (length--) {\n        var key = props[length],\n            predicate = source[key],\n            value = object[key];\n\n        if ((value === undefined && !(key in object)) || !predicate(value)) {\n          return false;\n        }\n      }\n      return true;\n    }\n\n    /**\n     * The base implementation of `_.delay` and `_.defer` which accepts `args`\n     * to provide to `func`.\n     *\n     * @private\n     * @param {Function} func The function to delay.\n     * @param {number} wait The number of milliseconds to delay invocation.\n     * @param {Array} args The arguments to provide to `func`.\n     * @returns {number|Object} Returns the timer id or timeout object.\n     */\n    function baseDelay(func, wait, args) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      return setTimeout(function() { func.apply(undefined, args); }, wait);\n    }\n\n    /**\n     * The base implementation of methods like `_.difference` without support\n     * for excluding multiple arrays or iteratee shorthands.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {Array} values The values to exclude.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     */\n    function baseDifference(array, values, iteratee, comparator) {\n      var index = -1,\n          includes = arrayIncludes,\n          isCommon = true,\n          length = array.length,\n          result = [],\n          valuesLength = values.length;\n\n      if (!length) {\n        return result;\n      }\n      if (iteratee) {\n        values = arrayMap(values, baseUnary(iteratee));\n      }\n      if (comparator) {\n        includes = arrayIncludesWith;\n        isCommon = false;\n      }\n      else if (values.length >= LARGE_ARRAY_SIZE) {\n        includes = cacheHas;\n        isCommon = false;\n        values = new SetCache(values);\n      }\n      outer:\n      while (++index < length) {\n        var value = array[index],\n            computed = iteratee == null ? value : iteratee(value);\n\n        value = (comparator || value !== 0) ? value : 0;\n        if (isCommon && computed === computed) {\n          var valuesIndex = valuesLength;\n          while (valuesIndex--) {\n            if (values[valuesIndex] === computed) {\n              continue outer;\n            }\n          }\n          result.push(value);\n        }\n        else if (!includes(values, computed, comparator)) {\n          result.push(value);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.forEach` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Array|Object} Returns `collection`.\n     */\n    var baseEach = createBaseEach(baseForOwn);\n\n    /**\n     * The base implementation of `_.forEachRight` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Array|Object} Returns `collection`.\n     */\n    var baseEachRight = createBaseEach(baseForOwnRight, true);\n\n    /**\n     * The base implementation of `_.every` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} predicate The function invoked per iteration.\n     * @returns {boolean} Returns `true` if all elements pass the predicate check,\n     *  else `false`\n     */\n    function baseEvery(collection, predicate) {\n      var result = true;\n      baseEach(collection, function(value, index, collection) {\n        result = !!predicate(value, index, collection);\n        return result;\n      });\n      return result;\n    }\n\n    /**\n     * The base implementation of methods like `_.max` and `_.min` which accepts a\n     * `comparator` to determine the extremum value.\n     *\n     * @private\n     * @param {Array} array The array to iterate over.\n     * @param {Function} iteratee The iteratee invoked per iteration.\n     * @param {Function} comparator The comparator used to compare values.\n     * @returns {*} Returns the extremum value.\n     */\n    function baseExtremum(array, iteratee, comparator) {\n      var index = -1,\n          length = array.length;\n\n      while (++index < length) {\n        var value = array[index],\n            current = iteratee(value);\n\n        if (current != null && (computed === undefined\n              ? (current === current && !isSymbol(current))\n              : comparator(current, computed)\n            )) {\n          var computed = current,\n              result = value;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.fill` without an iteratee call guard.\n     *\n     * @private\n     * @param {Array} array The array to fill.\n     * @param {*} value The value to fill `array` with.\n     * @param {number} [start=0] The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns `array`.\n     */\n    function baseFill(array, value, start, end) {\n      var length = array.length;\n\n      start = toInteger(start);\n      if (start < 0) {\n        start = -start > length ? 0 : (length + start);\n      }\n      end = (end === undefined || end > length) ? length : toInteger(end);\n      if (end < 0) {\n        end += length;\n      }\n      end = start > end ? 0 : toLength(end);\n      while (start < end) {\n        array[start++] = value;\n      }\n      return array;\n    }\n\n    /**\n     * The base implementation of `_.filter` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} predicate The function invoked per iteration.\n     * @returns {Array} Returns the new filtered array.\n     */\n    function baseFilter(collection, predicate) {\n      var result = [];\n      baseEach(collection, function(value, index, collection) {\n        if (predicate(value, index, collection)) {\n          result.push(value);\n        }\n      });\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.flatten` with support for restricting flattening.\n     *\n     * @private\n     * @param {Array} array The array to flatten.\n     * @param {number} depth The maximum recursion depth.\n     * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n     * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n     * @param {Array} [result=[]] The initial result value.\n     * @returns {Array} Returns the new flattened array.\n     */\n    function baseFlatten(array, depth, predicate, isStrict, result) {\n      var index = -1,\n          length = array.length;\n\n      predicate || (predicate = isFlattenable);\n      result || (result = []);\n\n      while (++index < length) {\n        var value = array[index];\n        if (depth > 0 && predicate(value)) {\n          if (depth > 1) {\n            // Recursively flatten arrays (susceptible to call stack limits).\n            baseFlatten(value, depth - 1, predicate, isStrict, result);\n          } else {\n            arrayPush(result, value);\n          }\n        } else if (!isStrict) {\n          result[result.length] = value;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `baseForOwn` which iterates over `object`\n     * properties returned by `keysFunc` and invokes `iteratee` for each property.\n     * Iteratee functions may exit iteration early by explicitly returning `false`.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @param {Function} keysFunc The function to get the keys of `object`.\n     * @returns {Object} Returns `object`.\n     */\n    var baseFor = createBaseFor();\n\n    /**\n     * This function is like `baseFor` except that it iterates over properties\n     * in the opposite order.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @param {Function} keysFunc The function to get the keys of `object`.\n     * @returns {Object} Returns `object`.\n     */\n    var baseForRight = createBaseFor(true);\n\n    /**\n     * The base implementation of `_.forOwn` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     */\n    function baseForOwn(object, iteratee) {\n      return object && baseFor(object, iteratee, keys);\n    }\n\n    /**\n     * The base implementation of `_.forOwnRight` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     */\n    function baseForOwnRight(object, iteratee) {\n      return object && baseForRight(object, iteratee, keys);\n    }\n\n    /**\n     * The base implementation of `_.functions` which creates an array of\n     * `object` function property names filtered from `props`.\n     *\n     * @private\n     * @param {Object} object The object to inspect.\n     * @param {Array} props The property names to filter.\n     * @returns {Array} Returns the function names.\n     */\n    function baseFunctions(object, props) {\n      return arrayFilter(props, function(key) {\n        return isFunction(object[key]);\n      });\n    }\n\n    /**\n     * The base implementation of `_.get` without support for default values.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the property to get.\n     * @returns {*} Returns the resolved value.\n     */\n    function baseGet(object, path) {\n      path = castPath(path, object);\n\n      var index = 0,\n          length = path.length;\n\n      while (object != null && index < length) {\n        object = object[toKey(path[index++])];\n      }\n      return (index && index == length) ? object : undefined;\n    }\n\n    /**\n     * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n     * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n     * symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Function} keysFunc The function to get the keys of `object`.\n     * @param {Function} symbolsFunc The function to get the symbols of `object`.\n     * @returns {Array} Returns the array of property names and symbols.\n     */\n    function baseGetAllKeys(object, keysFunc, symbolsFunc) {\n      var result = keysFunc(object);\n      return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n    }\n\n    /**\n     * The base implementation of `getTag` without fallbacks for buggy environments.\n     *\n     * @private\n     * @param {*} value The value to query.\n     * @returns {string} Returns the `toStringTag`.\n     */\n    function baseGetTag(value) {\n      if (value == null) {\n        return value === undefined ? undefinedTag : nullTag;\n      }\n      return (symToStringTag && symToStringTag in Object(value))\n        ? getRawTag(value)\n        : objectToString(value);\n    }\n\n    /**\n     * The base implementation of `_.gt` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is greater than `other`,\n     *  else `false`.\n     */\n    function baseGt(value, other) {\n      return value > other;\n    }\n\n    /**\n     * The base implementation of `_.has` without support for deep paths.\n     *\n     * @private\n     * @param {Object} [object] The object to query.\n     * @param {Array|string} key The key to check.\n     * @returns {boolean} Returns `true` if `key` exists, else `false`.\n     */\n    function baseHas(object, key) {\n      return object != null && hasOwnProperty.call(object, key);\n    }\n\n    /**\n     * The base implementation of `_.hasIn` without support for deep paths.\n     *\n     * @private\n     * @param {Object} [object] The object to query.\n     * @param {Array|string} key The key to check.\n     * @returns {boolean} Returns `true` if `key` exists, else `false`.\n     */\n    function baseHasIn(object, key) {\n      return object != null && key in Object(object);\n    }\n\n    /**\n     * The base implementation of `_.inRange` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {number} number The number to check.\n     * @param {number} start The start of the range.\n     * @param {number} end The end of the range.\n     * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n     */\n    function baseInRange(number, start, end) {\n      return number >= nativeMin(start, end) && number < nativeMax(start, end);\n    }\n\n    /**\n     * The base implementation of methods like `_.intersection`, without support\n     * for iteratee shorthands, that accepts an array of arrays to inspect.\n     *\n     * @private\n     * @param {Array} arrays The arrays to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of shared values.\n     */\n    function baseIntersection(arrays, iteratee, comparator) {\n      var includes = comparator ? arrayIncludesWith : arrayIncludes,\n          length = arrays[0].length,\n          othLength = arrays.length,\n          othIndex = othLength,\n          caches = Array(othLength),\n          maxLength = Infinity,\n          result = [];\n\n      while (othIndex--) {\n        var array = arrays[othIndex];\n        if (othIndex && iteratee) {\n          array = arrayMap(array, baseUnary(iteratee));\n        }\n        maxLength = nativeMin(array.length, maxLength);\n        caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120))\n          ? new SetCache(othIndex && array)\n          : undefined;\n      }\n      array = arrays[0];\n\n      var index = -1,\n          seen = caches[0];\n\n      outer:\n      while (++index < length && result.length < maxLength) {\n        var value = array[index],\n            computed = iteratee ? iteratee(value) : value;\n\n        value = (comparator || value !== 0) ? value : 0;\n        if (!(seen\n              ? cacheHas(seen, computed)\n              : includes(result, computed, comparator)\n            )) {\n          othIndex = othLength;\n          while (--othIndex) {\n            var cache = caches[othIndex];\n            if (!(cache\n                  ? cacheHas(cache, computed)\n                  : includes(arrays[othIndex], computed, comparator))\n                ) {\n              continue outer;\n            }\n          }\n          if (seen) {\n            seen.push(computed);\n          }\n          result.push(value);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.invert` and `_.invertBy` which inverts\n     * `object` with values transformed by `iteratee` and set by `setter`.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} setter The function to set `accumulator` values.\n     * @param {Function} iteratee The iteratee to transform values.\n     * @param {Object} accumulator The initial inverted object.\n     * @returns {Function} Returns `accumulator`.\n     */\n    function baseInverter(object, setter, iteratee, accumulator) {\n      baseForOwn(object, function(value, key, object) {\n        setter(accumulator, iteratee(value), key, object);\n      });\n      return accumulator;\n    }\n\n    /**\n     * The base implementation of `_.invoke` without support for individual\n     * method arguments.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the method to invoke.\n     * @param {Array} args The arguments to invoke the method with.\n     * @returns {*} Returns the result of the invoked method.\n     */\n    function baseInvoke(object, path, args) {\n      path = castPath(path, object);\n      object = parent(object, path);\n      var func = object == null ? object : object[toKey(last(path))];\n      return func == null ? undefined : apply(func, object, args);\n    }\n\n    /**\n     * The base implementation of `_.isArguments`.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n     */\n    function baseIsArguments(value) {\n      return isObjectLike(value) && baseGetTag(value) == argsTag;\n    }\n\n    /**\n     * The base implementation of `_.isArrayBuffer` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n     */\n    function baseIsArrayBuffer(value) {\n      return isObjectLike(value) && baseGetTag(value) == arrayBufferTag;\n    }\n\n    /**\n     * The base implementation of `_.isDate` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n     */\n    function baseIsDate(value) {\n      return isObjectLike(value) && baseGetTag(value) == dateTag;\n    }\n\n    /**\n     * The base implementation of `_.isEqual` which supports partial comparisons\n     * and tracks traversed objects.\n     *\n     * @private\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @param {boolean} bitmask The bitmask flags.\n     *  1 - Unordered comparison\n     *  2 - Partial comparison\n     * @param {Function} [customizer] The function to customize comparisons.\n     * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n     */\n    function baseIsEqual(value, other, bitmask, customizer, stack) {\n      if (value === other) {\n        return true;\n      }\n      if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n        return value !== value && other !== other;\n      }\n      return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n    }\n\n    /**\n     * A specialized version of `baseIsEqual` for arrays and objects which performs\n     * deep comparisons and tracks traversed objects enabling objects with circular\n     * references to be compared.\n     *\n     * @private\n     * @param {Object} object The object to compare.\n     * @param {Object} other The other object to compare.\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n     * @param {Function} customizer The function to customize comparisons.\n     * @param {Function} equalFunc The function to determine equivalents of values.\n     * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n     */\n    function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n      var objIsArr = isArray(object),\n          othIsArr = isArray(other),\n          objTag = objIsArr ? arrayTag : getTag(object),\n          othTag = othIsArr ? arrayTag : getTag(other);\n\n      objTag = objTag == argsTag ? objectTag : objTag;\n      othTag = othTag == argsTag ? objectTag : othTag;\n\n      var objIsObj = objTag == objectTag,\n          othIsObj = othTag == objectTag,\n          isSameTag = objTag == othTag;\n\n      if (isSameTag && isBuffer(object)) {\n        if (!isBuffer(other)) {\n          return false;\n        }\n        objIsArr = true;\n        objIsObj = false;\n      }\n      if (isSameTag && !objIsObj) {\n        stack || (stack = new Stack);\n        return (objIsArr || isTypedArray(object))\n          ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n          : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n      }\n      if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n        var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n            othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n        if (objIsWrapped || othIsWrapped) {\n          var objUnwrapped = objIsWrapped ? object.value() : object,\n              othUnwrapped = othIsWrapped ? other.value() : other;\n\n          stack || (stack = new Stack);\n          return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n        }\n      }\n      if (!isSameTag) {\n        return false;\n      }\n      stack || (stack = new Stack);\n      return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n    }\n\n    /**\n     * The base implementation of `_.isMap` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n     */\n    function baseIsMap(value) {\n      return isObjectLike(value) && getTag(value) == mapTag;\n    }\n\n    /**\n     * The base implementation of `_.isMatch` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property values to match.\n     * @param {Array} matchData The property names, values, and compare flags to match.\n     * @param {Function} [customizer] The function to customize comparisons.\n     * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n     */\n    function baseIsMatch(object, source, matchData, customizer) {\n      var index = matchData.length,\n          length = index,\n          noCustomizer = !customizer;\n\n      if (object == null) {\n        return !length;\n      }\n      object = Object(object);\n      while (index--) {\n        var data = matchData[index];\n        if ((noCustomizer && data[2])\n              ? data[1] !== object[data[0]]\n              : !(data[0] in object)\n            ) {\n          return false;\n        }\n      }\n      while (++index < length) {\n        data = matchData[index];\n        var key = data[0],\n            objValue = object[key],\n            srcValue = data[1];\n\n        if (noCustomizer && data[2]) {\n          if (objValue === undefined && !(key in object)) {\n            return false;\n          }\n        } else {\n          var stack = new Stack;\n          if (customizer) {\n            var result = customizer(objValue, srcValue, key, object, source, stack);\n          }\n          if (!(result === undefined\n                ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n                : result\n              )) {\n            return false;\n          }\n        }\n      }\n      return true;\n    }\n\n    /**\n     * The base implementation of `_.isNative` without bad shim checks.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a native function,\n     *  else `false`.\n     */\n    function baseIsNative(value) {\n      if (!isObject(value) || isMasked(value)) {\n        return false;\n      }\n      var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n      return pattern.test(toSource(value));\n    }\n\n    /**\n     * The base implementation of `_.isRegExp` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n     */\n    function baseIsRegExp(value) {\n      return isObjectLike(value) && baseGetTag(value) == regexpTag;\n    }\n\n    /**\n     * The base implementation of `_.isSet` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n     */\n    function baseIsSet(value) {\n      return isObjectLike(value) && getTag(value) == setTag;\n    }\n\n    /**\n     * The base implementation of `_.isTypedArray` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n     */\n    function baseIsTypedArray(value) {\n      return isObjectLike(value) &&\n        isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n    }\n\n    /**\n     * The base implementation of `_.iteratee`.\n     *\n     * @private\n     * @param {*} [value=_.identity] The value to convert to an iteratee.\n     * @returns {Function} Returns the iteratee.\n     */\n    function baseIteratee(value) {\n      // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n      // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n      if (typeof value == 'function') {\n        return value;\n      }\n      if (value == null) {\n        return identity;\n      }\n      if (typeof value == 'object') {\n        return isArray(value)\n          ? baseMatchesProperty(value[0], value[1])\n          : baseMatches(value);\n      }\n      return property(value);\n    }\n\n    /**\n     * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     */\n    function baseKeys(object) {\n      if (!isPrototype(object)) {\n        return nativeKeys(object);\n      }\n      var result = [];\n      for (var key in Object(object)) {\n        if (hasOwnProperty.call(object, key) && key != 'constructor') {\n          result.push(key);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     */\n    function baseKeysIn(object) {\n      if (!isObject(object)) {\n        return nativeKeysIn(object);\n      }\n      var isProto = isPrototype(object),\n          result = [];\n\n      for (var key in object) {\n        if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n          result.push(key);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.lt` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is less than `other`,\n     *  else `false`.\n     */\n    function baseLt(value, other) {\n      return value < other;\n    }\n\n    /**\n     * The base implementation of `_.map` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Array} Returns the new mapped array.\n     */\n    function baseMap(collection, iteratee) {\n      var index = -1,\n          result = isArrayLike(collection) ? Array(collection.length) : [];\n\n      baseEach(collection, function(value, key, collection) {\n        result[++index] = iteratee(value, key, collection);\n      });\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.matches` which doesn't clone `source`.\n     *\n     * @private\n     * @param {Object} source The object of property values to match.\n     * @returns {Function} Returns the new spec function.\n     */\n    function baseMatches(source) {\n      var matchData = getMatchData(source);\n      if (matchData.length == 1 && matchData[0][2]) {\n        return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n      }\n      return function(object) {\n        return object === source || baseIsMatch(object, source, matchData);\n      };\n    }\n\n    /**\n     * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n     *\n     * @private\n     * @param {string} path The path of the property to get.\n     * @param {*} srcValue The value to match.\n     * @returns {Function} Returns the new spec function.\n     */\n    function baseMatchesProperty(path, srcValue) {\n      if (isKey(path) && isStrictComparable(srcValue)) {\n        return matchesStrictComparable(toKey(path), srcValue);\n      }\n      return function(object) {\n        var objValue = get(object, path);\n        return (objValue === undefined && objValue === srcValue)\n          ? hasIn(object, path)\n          : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n      };\n    }\n\n    /**\n     * The base implementation of `_.merge` without support for multiple sources.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @param {number} srcIndex The index of `source`.\n     * @param {Function} [customizer] The function to customize merged values.\n     * @param {Object} [stack] Tracks traversed source values and their merged\n     *  counterparts.\n     */\n    function baseMerge(object, source, srcIndex, customizer, stack) {\n      if (object === source) {\n        return;\n      }\n      baseFor(source, function(srcValue, key) {\n        stack || (stack = new Stack);\n        if (isObject(srcValue)) {\n          baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n        }\n        else {\n          var newValue = customizer\n            ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n            : undefined;\n\n          if (newValue === undefined) {\n            newValue = srcValue;\n          }\n          assignMergeValue(object, key, newValue);\n        }\n      }, keysIn);\n    }\n\n    /**\n     * A specialized version of `baseMerge` for arrays and objects which performs\n     * deep merges and tracks traversed objects enabling objects with circular\n     * references to be merged.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @param {string} key The key of the value to merge.\n     * @param {number} srcIndex The index of `source`.\n     * @param {Function} mergeFunc The function to merge values.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @param {Object} [stack] Tracks traversed source values and their merged\n     *  counterparts.\n     */\n    function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n      var objValue = safeGet(object, key),\n          srcValue = safeGet(source, key),\n          stacked = stack.get(srcValue);\n\n      if (stacked) {\n        assignMergeValue(object, key, stacked);\n        return;\n      }\n      var newValue = customizer\n        ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n        : undefined;\n\n      var isCommon = newValue === undefined;\n\n      if (isCommon) {\n        var isArr = isArray(srcValue),\n            isBuff = !isArr && isBuffer(srcValue),\n            isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n        newValue = srcValue;\n        if (isArr || isBuff || isTyped) {\n          if (isArray(objValue)) {\n            newValue = objValue;\n          }\n          else if (isArrayLikeObject(objValue)) {\n            newValue = copyArray(objValue);\n          }\n          else if (isBuff) {\n            isCommon = false;\n            newValue = cloneBuffer(srcValue, true);\n          }\n          else if (isTyped) {\n            isCommon = false;\n            newValue = cloneTypedArray(srcValue, true);\n          }\n          else {\n            newValue = [];\n          }\n        }\n        else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n          newValue = objValue;\n          if (isArguments(objValue)) {\n            newValue = toPlainObject(objValue);\n          }\n          else if (!isObject(objValue) || isFunction(objValue)) {\n            newValue = initCloneObject(srcValue);\n          }\n        }\n        else {\n          isCommon = false;\n        }\n      }\n      if (isCommon) {\n        // Recursively merge objects and arrays (susceptible to call stack limits).\n        stack.set(srcValue, newValue);\n        mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n        stack['delete'](srcValue);\n      }\n      assignMergeValue(object, key, newValue);\n    }\n\n    /**\n     * The base implementation of `_.nth` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {Array} array The array to query.\n     * @param {number} n The index of the element to return.\n     * @returns {*} Returns the nth element of `array`.\n     */\n    function baseNth(array, n) {\n      var length = array.length;\n      if (!length) {\n        return;\n      }\n      n += n < 0 ? length : 0;\n      return isIndex(n, length) ? array[n] : undefined;\n    }\n\n    /**\n     * The base implementation of `_.orderBy` without param guards.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.\n     * @param {string[]} orders The sort orders of `iteratees`.\n     * @returns {Array} Returns the new sorted array.\n     */\n    function baseOrderBy(collection, iteratees, orders) {\n      if (iteratees.length) {\n        iteratees = arrayMap(iteratees, function(iteratee) {\n          if (isArray(iteratee)) {\n            return function(value) {\n              return baseGet(value, iteratee.length === 1 ? iteratee[0] : iteratee);\n            }\n          }\n          return iteratee;\n        });\n      } else {\n        iteratees = [identity];\n      }\n\n      var index = -1;\n      iteratees = arrayMap(iteratees, baseUnary(getIteratee()));\n\n      var result = baseMap(collection, function(value, key, collection) {\n        var criteria = arrayMap(iteratees, function(iteratee) {\n          return iteratee(value);\n        });\n        return { 'criteria': criteria, 'index': ++index, 'value': value };\n      });\n\n      return baseSortBy(result, function(object, other) {\n        return compareMultiple(object, other, orders);\n      });\n    }\n\n    /**\n     * The base implementation of `_.pick` without support for individual\n     * property identifiers.\n     *\n     * @private\n     * @param {Object} object The source object.\n     * @param {string[]} paths The property paths to pick.\n     * @returns {Object} Returns the new object.\n     */\n    function basePick(object, paths) {\n      return basePickBy(object, paths, function(value, path) {\n        return hasIn(object, path);\n      });\n    }\n\n    /**\n     * The base implementation of  `_.pickBy` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Object} object The source object.\n     * @param {string[]} paths The property paths to pick.\n     * @param {Function} predicate The function invoked per property.\n     * @returns {Object} Returns the new object.\n     */\n    function basePickBy(object, paths, predicate) {\n      var index = -1,\n          length = paths.length,\n          result = {};\n\n      while (++index < length) {\n        var path = paths[index],\n            value = baseGet(object, path);\n\n        if (predicate(value, path)) {\n          baseSet(result, castPath(path, object), value);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * A specialized version of `baseProperty` which supports deep paths.\n     *\n     * @private\n     * @param {Array|string} path The path of the property to get.\n     * @returns {Function} Returns the new accessor function.\n     */\n    function basePropertyDeep(path) {\n      return function(object) {\n        return baseGet(object, path);\n      };\n    }\n\n    /**\n     * The base implementation of `_.pullAllBy` without support for iteratee\n     * shorthands.\n     *\n     * @private\n     * @param {Array} array The array to modify.\n     * @param {Array} values The values to remove.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns `array`.\n     */\n    function basePullAll(array, values, iteratee, comparator) {\n      var indexOf = comparator ? baseIndexOfWith : baseIndexOf,\n          index = -1,\n          length = values.length,\n          seen = array;\n\n      if (array === values) {\n        values = copyArray(values);\n      }\n      if (iteratee) {\n        seen = arrayMap(array, baseUnary(iteratee));\n      }\n      while (++index < length) {\n        var fromIndex = 0,\n            value = values[index],\n            computed = iteratee ? iteratee(value) : value;\n\n        while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) {\n          if (seen !== array) {\n            splice.call(seen, fromIndex, 1);\n          }\n          splice.call(array, fromIndex, 1);\n        }\n      }\n      return array;\n    }\n\n    /**\n     * The base implementation of `_.pullAt` without support for individual\n     * indexes or capturing the removed elements.\n     *\n     * @private\n     * @param {Array} array The array to modify.\n     * @param {number[]} indexes The indexes of elements to remove.\n     * @returns {Array} Returns `array`.\n     */\n    function basePullAt(array, indexes) {\n      var length = array ? indexes.length : 0,\n          lastIndex = length - 1;\n\n      while (length--) {\n        var index = indexes[length];\n        if (length == lastIndex || index !== previous) {\n          var previous = index;\n          if (isIndex(index)) {\n            splice.call(array, index, 1);\n          } else {\n            baseUnset(array, index);\n          }\n        }\n      }\n      return array;\n    }\n\n    /**\n     * The base implementation of `_.random` without support for returning\n     * floating-point numbers.\n     *\n     * @private\n     * @param {number} lower The lower bound.\n     * @param {number} upper The upper bound.\n     * @returns {number} Returns the random number.\n     */\n    function baseRandom(lower, upper) {\n      return lower + nativeFloor(nativeRandom() * (upper - lower + 1));\n    }\n\n    /**\n     * The base implementation of `_.range` and `_.rangeRight` which doesn't\n     * coerce arguments.\n     *\n     * @private\n     * @param {number} start The start of the range.\n     * @param {number} end The end of the range.\n     * @param {number} step The value to increment or decrement by.\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Array} Returns the range of numbers.\n     */\n    function baseRange(start, end, step, fromRight) {\n      var index = -1,\n          length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),\n          result = Array(length);\n\n      while (length--) {\n        result[fromRight ? length : ++index] = start;\n        start += step;\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.repeat` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {string} string The string to repeat.\n     * @param {number} n The number of times to repeat the string.\n     * @returns {string} Returns the repeated string.\n     */\n    function baseRepeat(string, n) {\n      var result = '';\n      if (!string || n < 1 || n > MAX_SAFE_INTEGER) {\n        return result;\n      }\n      // Leverage the exponentiation by squaring algorithm for a faster repeat.\n      // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details.\n      do {\n        if (n % 2) {\n          result += string;\n        }\n        n = nativeFloor(n / 2);\n        if (n) {\n          string += string;\n        }\n      } while (n);\n\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n     *\n     * @private\n     * @param {Function} func The function to apply a rest parameter to.\n     * @param {number} [start=func.length-1] The start position of the rest parameter.\n     * @returns {Function} Returns the new function.\n     */\n    function baseRest(func, start) {\n      return setToString(overRest(func, start, identity), func + '');\n    }\n\n    /**\n     * The base implementation of `_.sample`.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to sample.\n     * @returns {*} Returns the random element.\n     */\n    function baseSample(collection) {\n      return arraySample(values(collection));\n    }\n\n    /**\n     * The base implementation of `_.sampleSize` without param guards.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to sample.\n     * @param {number} n The number of elements to sample.\n     * @returns {Array} Returns the random elements.\n     */\n    function baseSampleSize(collection, n) {\n      var array = values(collection);\n      return shuffleSelf(array, baseClamp(n, 0, array.length));\n    }\n\n    /**\n     * The base implementation of `_.set`.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {*} value The value to set.\n     * @param {Function} [customizer] The function to customize path creation.\n     * @returns {Object} Returns `object`.\n     */\n    function baseSet(object, path, value, customizer) {\n      if (!isObject(object)) {\n        return object;\n      }\n      path = castPath(path, object);\n\n      var index = -1,\n          length = path.length,\n          lastIndex = length - 1,\n          nested = object;\n\n      while (nested != null && ++index < length) {\n        var key = toKey(path[index]),\n            newValue = value;\n\n        if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n          return object;\n        }\n\n        if (index != lastIndex) {\n          var objValue = nested[key];\n          newValue = customizer ? customizer(objValue, key, nested) : undefined;\n          if (newValue === undefined) {\n            newValue = isObject(objValue)\n              ? objValue\n              : (isIndex(path[index + 1]) ? [] : {});\n          }\n        }\n        assignValue(nested, key, newValue);\n        nested = nested[key];\n      }\n      return object;\n    }\n\n    /**\n     * The base implementation of `setData` without support for hot loop shorting.\n     *\n     * @private\n     * @param {Function} func The function to associate metadata with.\n     * @param {*} data The metadata.\n     * @returns {Function} Returns `func`.\n     */\n    var baseSetData = !metaMap ? identity : function(func, data) {\n      metaMap.set(func, data);\n      return func;\n    };\n\n    /**\n     * The base implementation of `setToString` without support for hot loop shorting.\n     *\n     * @private\n     * @param {Function} func The function to modify.\n     * @param {Function} string The `toString` result.\n     * @returns {Function} Returns `func`.\n     */\n    var baseSetToString = !defineProperty ? identity : function(func, string) {\n      return defineProperty(func, 'toString', {\n        'configurable': true,\n        'enumerable': false,\n        'value': constant(string),\n        'writable': true\n      });\n    };\n\n    /**\n     * The base implementation of `_.shuffle`.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to shuffle.\n     * @returns {Array} Returns the new shuffled array.\n     */\n    function baseShuffle(collection) {\n      return shuffleSelf(values(collection));\n    }\n\n    /**\n     * The base implementation of `_.slice` without an iteratee call guard.\n     *\n     * @private\n     * @param {Array} array The array to slice.\n     * @param {number} [start=0] The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns the slice of `array`.\n     */\n    function baseSlice(array, start, end) {\n      var index = -1,\n          length = array.length;\n\n      if (start < 0) {\n        start = -start > length ? 0 : (length + start);\n      }\n      end = end > length ? length : end;\n      if (end < 0) {\n        end += length;\n      }\n      length = start > end ? 0 : ((end - start) >>> 0);\n      start >>>= 0;\n\n      var result = Array(length);\n      while (++index < length) {\n        result[index] = array[index + start];\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.some` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} predicate The function invoked per iteration.\n     * @returns {boolean} Returns `true` if any element passes the predicate check,\n     *  else `false`.\n     */\n    function baseSome(collection, predicate) {\n      var result;\n\n      baseEach(collection, function(value, index, collection) {\n        result = predicate(value, index, collection);\n        return !result;\n      });\n      return !!result;\n    }\n\n    /**\n     * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which\n     * performs a binary search of `array` to determine the index at which `value`\n     * should be inserted into `array` in order to maintain its sort order.\n     *\n     * @private\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {boolean} [retHighest] Specify returning the highest qualified index.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     */\n    function baseSortedIndex(array, value, retHighest) {\n      var low = 0,\n          high = array == null ? low : array.length;\n\n      if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) {\n        while (low < high) {\n          var mid = (low + high) >>> 1,\n              computed = array[mid];\n\n          if (computed !== null && !isSymbol(computed) &&\n              (retHighest ? (computed <= value) : (computed < value))) {\n            low = mid + 1;\n          } else {\n            high = mid;\n          }\n        }\n        return high;\n      }\n      return baseSortedIndexBy(array, value, identity, retHighest);\n    }\n\n    /**\n     * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy`\n     * which invokes `iteratee` for `value` and each element of `array` to compute\n     * their sort ranking. The iteratee is invoked with one argument; (value).\n     *\n     * @private\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {Function} iteratee The iteratee invoked per element.\n     * @param {boolean} [retHighest] Specify returning the highest qualified index.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     */\n    function baseSortedIndexBy(array, value, iteratee, retHighest) {\n      var low = 0,\n          high = array == null ? 0 : array.length;\n      if (high === 0) {\n        return 0;\n      }\n\n      value = iteratee(value);\n      var valIsNaN = value !== value,\n          valIsNull = value === null,\n          valIsSymbol = isSymbol(value),\n          valIsUndefined = value === undefined;\n\n      while (low < high) {\n        var mid = nativeFloor((low + high) / 2),\n            computed = iteratee(array[mid]),\n            othIsDefined = computed !== undefined,\n            othIsNull = computed === null,\n            othIsReflexive = computed === computed,\n            othIsSymbol = isSymbol(computed);\n\n        if (valIsNaN) {\n          var setLow = retHighest || othIsReflexive;\n        } else if (valIsUndefined) {\n          setLow = othIsReflexive && (retHighest || othIsDefined);\n        } else if (valIsNull) {\n          setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull);\n        } else if (valIsSymbol) {\n          setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol);\n        } else if (othIsNull || othIsSymbol) {\n          setLow = false;\n        } else {\n          setLow = retHighest ? (computed <= value) : (computed < value);\n        }\n        if (setLow) {\n          low = mid + 1;\n        } else {\n          high = mid;\n        }\n      }\n      return nativeMin(high, MAX_ARRAY_INDEX);\n    }\n\n    /**\n     * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without\n     * support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     */\n    function baseSortedUniq(array, iteratee) {\n      var index = -1,\n          length = array.length,\n          resIndex = 0,\n          result = [];\n\n      while (++index < length) {\n        var value = array[index],\n            computed = iteratee ? iteratee(value) : value;\n\n        if (!index || !eq(computed, seen)) {\n          var seen = computed;\n          result[resIndex++] = value === 0 ? 0 : value;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.toNumber` which doesn't ensure correct\n     * conversions of binary, hexadecimal, or octal string values.\n     *\n     * @private\n     * @param {*} value The value to process.\n     * @returns {number} Returns the number.\n     */\n    function baseToNumber(value) {\n      if (typeof value == 'number') {\n        return value;\n      }\n      if (isSymbol(value)) {\n        return NAN;\n      }\n      return +value;\n    }\n\n    /**\n     * The base implementation of `_.toString` which doesn't convert nullish\n     * values to empty strings.\n     *\n     * @private\n     * @param {*} value The value to process.\n     * @returns {string} Returns the string.\n     */\n    function baseToString(value) {\n      // Exit early for strings to avoid a performance hit in some environments.\n      if (typeof value == 'string') {\n        return value;\n      }\n      if (isArray(value)) {\n        // Recursively convert values (susceptible to call stack limits).\n        return arrayMap(value, baseToString) + '';\n      }\n      if (isSymbol(value)) {\n        return symbolToString ? symbolToString.call(value) : '';\n      }\n      var result = (value + '');\n      return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n    }\n\n    /**\n     * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     */\n    function baseUniq(array, iteratee, comparator) {\n      var index = -1,\n          includes = arrayIncludes,\n          length = array.length,\n          isCommon = true,\n          result = [],\n          seen = result;\n\n      if (comparator) {\n        isCommon = false;\n        includes = arrayIncludesWith;\n      }\n      else if (length >= LARGE_ARRAY_SIZE) {\n        var set = iteratee ? null : createSet(array);\n        if (set) {\n          return setToArray(set);\n        }\n        isCommon = false;\n        includes = cacheHas;\n        seen = new SetCache;\n      }\n      else {\n        seen = iteratee ? [] : result;\n      }\n      outer:\n      while (++index < length) {\n        var value = array[index],\n            computed = iteratee ? iteratee(value) : value;\n\n        value = (comparator || value !== 0) ? value : 0;\n        if (isCommon && computed === computed) {\n          var seenIndex = seen.length;\n          while (seenIndex--) {\n            if (seen[seenIndex] === computed) {\n              continue outer;\n            }\n          }\n          if (iteratee) {\n            seen.push(computed);\n          }\n          result.push(value);\n        }\n        else if (!includes(seen, computed, comparator)) {\n          if (seen !== result) {\n            seen.push(computed);\n          }\n          result.push(value);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.unset`.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The property path to unset.\n     * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n     */\n    function baseUnset(object, path) {\n      path = castPath(path, object);\n      object = parent(object, path);\n      return object == null || delete object[toKey(last(path))];\n    }\n\n    /**\n     * The base implementation of `_.update`.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to update.\n     * @param {Function} updater The function to produce the updated value.\n     * @param {Function} [customizer] The function to customize path creation.\n     * @returns {Object} Returns `object`.\n     */\n    function baseUpdate(object, path, updater, customizer) {\n      return baseSet(object, path, updater(baseGet(object, path)), customizer);\n    }\n\n    /**\n     * The base implementation of methods like `_.dropWhile` and `_.takeWhile`\n     * without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array} array The array to query.\n     * @param {Function} predicate The function invoked per iteration.\n     * @param {boolean} [isDrop] Specify dropping elements instead of taking them.\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Array} Returns the slice of `array`.\n     */\n    function baseWhile(array, predicate, isDrop, fromRight) {\n      var length = array.length,\n          index = fromRight ? length : -1;\n\n      while ((fromRight ? index-- : ++index < length) &&\n        predicate(array[index], index, array)) {}\n\n      return isDrop\n        ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length))\n        : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index));\n    }\n\n    /**\n     * The base implementation of `wrapperValue` which returns the result of\n     * performing a sequence of actions on the unwrapped `value`, where each\n     * successive action is supplied the return value of the previous.\n     *\n     * @private\n     * @param {*} value The unwrapped value.\n     * @param {Array} actions Actions to perform to resolve the unwrapped value.\n     * @returns {*} Returns the resolved value.\n     */\n    function baseWrapperValue(value, actions) {\n      var result = value;\n      if (result instanceof LazyWrapper) {\n        result = result.value();\n      }\n      return arrayReduce(actions, function(result, action) {\n        return action.func.apply(action.thisArg, arrayPush([result], action.args));\n      }, result);\n    }\n\n    /**\n     * The base implementation of methods like `_.xor`, without support for\n     * iteratee shorthands, that accepts an array of arrays to inspect.\n     *\n     * @private\n     * @param {Array} arrays The arrays to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of values.\n     */\n    function baseXor(arrays, iteratee, comparator) {\n      var length = arrays.length;\n      if (length < 2) {\n        return length ? baseUniq(arrays[0]) : [];\n      }\n      var index = -1,\n          result = Array(length);\n\n      while (++index < length) {\n        var array = arrays[index],\n            othIndex = -1;\n\n        while (++othIndex < length) {\n          if (othIndex != index) {\n            result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator);\n          }\n        }\n      }\n      return baseUniq(baseFlatten(result, 1), iteratee, comparator);\n    }\n\n    /**\n     * This base implementation of `_.zipObject` which assigns values using `assignFunc`.\n     *\n     * @private\n     * @param {Array} props The property identifiers.\n     * @param {Array} values The property values.\n     * @param {Function} assignFunc The function to assign values.\n     * @returns {Object} Returns the new object.\n     */\n    function baseZipObject(props, values, assignFunc) {\n      var index = -1,\n          length = props.length,\n          valsLength = values.length,\n          result = {};\n\n      while (++index < length) {\n        var value = index < valsLength ? values[index] : undefined;\n        assignFunc(result, props[index], value);\n      }\n      return result;\n    }\n\n    /**\n     * Casts `value` to an empty array if it's not an array like object.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @returns {Array|Object} Returns the cast array-like object.\n     */\n    function castArrayLikeObject(value) {\n      return isArrayLikeObject(value) ? value : [];\n    }\n\n    /**\n     * Casts `value` to `identity` if it's not a function.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @returns {Function} Returns cast function.\n     */\n    function castFunction(value) {\n      return typeof value == 'function' ? value : identity;\n    }\n\n    /**\n     * Casts `value` to a path array if it's not one.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @param {Object} [object] The object to query keys on.\n     * @returns {Array} Returns the cast property path array.\n     */\n    function castPath(value, object) {\n      if (isArray(value)) {\n        return value;\n      }\n      return isKey(value, object) ? [value] : stringToPath(toString(value));\n    }\n\n    /**\n     * A `baseRest` alias which can be replaced with `identity` by module\n     * replacement plugins.\n     *\n     * @private\n     * @type {Function}\n     * @param {Function} func The function to apply a rest parameter to.\n     * @returns {Function} Returns the new function.\n     */\n    var castRest = baseRest;\n\n    /**\n     * Casts `array` to a slice if it's needed.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {number} start The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns the cast slice.\n     */\n    function castSlice(array, start, end) {\n      var length = array.length;\n      end = end === undefined ? length : end;\n      return (!start && end >= length) ? array : baseSlice(array, start, end);\n    }\n\n    /**\n     * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout).\n     *\n     * @private\n     * @param {number|Object} id The timer id or timeout object of the timer to clear.\n     */\n    var clearTimeout = ctxClearTimeout || function(id) {\n      return root.clearTimeout(id);\n    };\n\n    /**\n     * Creates a clone of  `buffer`.\n     *\n     * @private\n     * @param {Buffer} buffer The buffer to clone.\n     * @param {boolean} [isDeep] Specify a deep clone.\n     * @returns {Buffer} Returns the cloned buffer.\n     */\n    function cloneBuffer(buffer, isDeep) {\n      if (isDeep) {\n        return buffer.slice();\n      }\n      var length = buffer.length,\n          result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n      buffer.copy(result);\n      return result;\n    }\n\n    /**\n     * Creates a clone of `arrayBuffer`.\n     *\n     * @private\n     * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n     * @returns {ArrayBuffer} Returns the cloned array buffer.\n     */\n    function cloneArrayBuffer(arrayBuffer) {\n      var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n      new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n      return result;\n    }\n\n    /**\n     * Creates a clone of `dataView`.\n     *\n     * @private\n     * @param {Object} dataView The data view to clone.\n     * @param {boolean} [isDeep] Specify a deep clone.\n     * @returns {Object} Returns the cloned data view.\n     */\n    function cloneDataView(dataView, isDeep) {\n      var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n      return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n    }\n\n    /**\n     * Creates a clone of `regexp`.\n     *\n     * @private\n     * @param {Object} regexp The regexp to clone.\n     * @returns {Object} Returns the cloned regexp.\n     */\n    function cloneRegExp(regexp) {\n      var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n      result.lastIndex = regexp.lastIndex;\n      return result;\n    }\n\n    /**\n     * Creates a clone of the `symbol` object.\n     *\n     * @private\n     * @param {Object} symbol The symbol object to clone.\n     * @returns {Object} Returns the cloned symbol object.\n     */\n    function cloneSymbol(symbol) {\n      return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n    }\n\n    /**\n     * Creates a clone of `typedArray`.\n     *\n     * @private\n     * @param {Object} typedArray The typed array to clone.\n     * @param {boolean} [isDeep] Specify a deep clone.\n     * @returns {Object} Returns the cloned typed array.\n     */\n    function cloneTypedArray(typedArray, isDeep) {\n      var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n      return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n    }\n\n    /**\n     * Compares values to sort them in ascending order.\n     *\n     * @private\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {number} Returns the sort order indicator for `value`.\n     */\n    function compareAscending(value, other) {\n      if (value !== other) {\n        var valIsDefined = value !== undefined,\n            valIsNull = value === null,\n            valIsReflexive = value === value,\n            valIsSymbol = isSymbol(value);\n\n        var othIsDefined = other !== undefined,\n            othIsNull = other === null,\n            othIsReflexive = other === other,\n            othIsSymbol = isSymbol(other);\n\n        if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||\n            (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||\n            (valIsNull && othIsDefined && othIsReflexive) ||\n            (!valIsDefined && othIsReflexive) ||\n            !valIsReflexive) {\n          return 1;\n        }\n        if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||\n            (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||\n            (othIsNull && valIsDefined && valIsReflexive) ||\n            (!othIsDefined && valIsReflexive) ||\n            !othIsReflexive) {\n          return -1;\n        }\n      }\n      return 0;\n    }\n\n    /**\n     * Used by `_.orderBy` to compare multiple properties of a value to another\n     * and stable sort them.\n     *\n     * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,\n     * specify an order of \"desc\" for descending or \"asc\" for ascending sort order\n     * of corresponding values.\n     *\n     * @private\n     * @param {Object} object The object to compare.\n     * @param {Object} other The other object to compare.\n     * @param {boolean[]|string[]} orders The order to sort by for each property.\n     * @returns {number} Returns the sort order indicator for `object`.\n     */\n    function compareMultiple(object, other, orders) {\n      var index = -1,\n          objCriteria = object.criteria,\n          othCriteria = other.criteria,\n          length = objCriteria.length,\n          ordersLength = orders.length;\n\n      while (++index < length) {\n        var result = compareAscending(objCriteria[index], othCriteria[index]);\n        if (result) {\n          if (index >= ordersLength) {\n            return result;\n          }\n          var order = orders[index];\n          return result * (order == 'desc' ? -1 : 1);\n        }\n      }\n      // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications\n      // that causes it, under certain circumstances, to provide the same value for\n      // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247\n      // for more details.\n      //\n      // This also ensures a stable sort in V8 and other engines.\n      // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.\n      return object.index - other.index;\n    }\n\n    /**\n     * Creates an array that is the composition of partially applied arguments,\n     * placeholders, and provided arguments into a single array of arguments.\n     *\n     * @private\n     * @param {Array} args The provided arguments.\n     * @param {Array} partials The arguments to prepend to those provided.\n     * @param {Array} holders The `partials` placeholder indexes.\n     * @params {boolean} [isCurried] Specify composing for a curried function.\n     * @returns {Array} Returns the new array of composed arguments.\n     */\n    function composeArgs(args, partials, holders, isCurried) {\n      var argsIndex = -1,\n          argsLength = args.length,\n          holdersLength = holders.length,\n          leftIndex = -1,\n          leftLength = partials.length,\n          rangeLength = nativeMax(argsLength - holdersLength, 0),\n          result = Array(leftLength + rangeLength),\n          isUncurried = !isCurried;\n\n      while (++leftIndex < leftLength) {\n        result[leftIndex] = partials[leftIndex];\n      }\n      while (++argsIndex < holdersLength) {\n        if (isUncurried || argsIndex < argsLength) {\n          result[holders[argsIndex]] = args[argsIndex];\n        }\n      }\n      while (rangeLength--) {\n        result[leftIndex++] = args[argsIndex++];\n      }\n      return result;\n    }\n\n    /**\n     * This function is like `composeArgs` except that the arguments composition\n     * is tailored for `_.partialRight`.\n     *\n     * @private\n     * @param {Array} args The provided arguments.\n     * @param {Array} partials The arguments to append to those provided.\n     * @param {Array} holders The `partials` placeholder indexes.\n     * @params {boolean} [isCurried] Specify composing for a curried function.\n     * @returns {Array} Returns the new array of composed arguments.\n     */\n    function composeArgsRight(args, partials, holders, isCurried) {\n      var argsIndex = -1,\n          argsLength = args.length,\n          holdersIndex = -1,\n          holdersLength = holders.length,\n          rightIndex = -1,\n          rightLength = partials.length,\n          rangeLength = nativeMax(argsLength - holdersLength, 0),\n          result = Array(rangeLength + rightLength),\n          isUncurried = !isCurried;\n\n      while (++argsIndex < rangeLength) {\n        result[argsIndex] = args[argsIndex];\n      }\n      var offset = argsIndex;\n      while (++rightIndex < rightLength) {\n        result[offset + rightIndex] = partials[rightIndex];\n      }\n      while (++holdersIndex < holdersLength) {\n        if (isUncurried || argsIndex < argsLength) {\n          result[offset + holders[holdersIndex]] = args[argsIndex++];\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Copies the values of `source` to `array`.\n     *\n     * @private\n     * @param {Array} source The array to copy values from.\n     * @param {Array} [array=[]] The array to copy values to.\n     * @returns {Array} Returns `array`.\n     */\n    function copyArray(source, array) {\n      var index = -1,\n          length = source.length;\n\n      array || (array = Array(length));\n      while (++index < length) {\n        array[index] = source[index];\n      }\n      return array;\n    }\n\n    /**\n     * Copies properties of `source` to `object`.\n     *\n     * @private\n     * @param {Object} source The object to copy properties from.\n     * @param {Array} props The property identifiers to copy.\n     * @param {Object} [object={}] The object to copy properties to.\n     * @param {Function} [customizer] The function to customize copied values.\n     * @returns {Object} Returns `object`.\n     */\n    function copyObject(source, props, object, customizer) {\n      var isNew = !object;\n      object || (object = {});\n\n      var index = -1,\n          length = props.length;\n\n      while (++index < length) {\n        var key = props[index];\n\n        var newValue = customizer\n          ? customizer(object[key], source[key], key, object, source)\n          : undefined;\n\n        if (newValue === undefined) {\n          newValue = source[key];\n        }\n        if (isNew) {\n          baseAssignValue(object, key, newValue);\n        } else {\n          assignValue(object, key, newValue);\n        }\n      }\n      return object;\n    }\n\n    /**\n     * Copies own symbols of `source` to `object`.\n     *\n     * @private\n     * @param {Object} source The object to copy symbols from.\n     * @param {Object} [object={}] The object to copy symbols to.\n     * @returns {Object} Returns `object`.\n     */\n    function copySymbols(source, object) {\n      return copyObject(source, getSymbols(source), object);\n    }\n\n    /**\n     * Copies own and inherited symbols of `source` to `object`.\n     *\n     * @private\n     * @param {Object} source The object to copy symbols from.\n     * @param {Object} [object={}] The object to copy symbols to.\n     * @returns {Object} Returns `object`.\n     */\n    function copySymbolsIn(source, object) {\n      return copyObject(source, getSymbolsIn(source), object);\n    }\n\n    /**\n     * Creates a function like `_.groupBy`.\n     *\n     * @private\n     * @param {Function} setter The function to set accumulator values.\n     * @param {Function} [initializer] The accumulator object initializer.\n     * @returns {Function} Returns the new aggregator function.\n     */\n    function createAggregator(setter, initializer) {\n      return function(collection, iteratee) {\n        var func = isArray(collection) ? arrayAggregator : baseAggregator,\n            accumulator = initializer ? initializer() : {};\n\n        return func(collection, setter, getIteratee(iteratee, 2), accumulator);\n      };\n    }\n\n    /**\n     * Creates a function like `_.assign`.\n     *\n     * @private\n     * @param {Function} assigner The function to assign values.\n     * @returns {Function} Returns the new assigner function.\n     */\n    function createAssigner(assigner) {\n      return baseRest(function(object, sources) {\n        var index = -1,\n            length = sources.length,\n            customizer = length > 1 ? sources[length - 1] : undefined,\n            guard = length > 2 ? sources[2] : undefined;\n\n        customizer = (assigner.length > 3 && typeof customizer == 'function')\n          ? (length--, customizer)\n          : undefined;\n\n        if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n          customizer = length < 3 ? undefined : customizer;\n          length = 1;\n        }\n        object = Object(object);\n        while (++index < length) {\n          var source = sources[index];\n          if (source) {\n            assigner(object, source, index, customizer);\n          }\n        }\n        return object;\n      });\n    }\n\n    /**\n     * Creates a `baseEach` or `baseEachRight` function.\n     *\n     * @private\n     * @param {Function} eachFunc The function to iterate over a collection.\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Function} Returns the new base function.\n     */\n    function createBaseEach(eachFunc, fromRight) {\n      return function(collection, iteratee) {\n        if (collection == null) {\n          return collection;\n        }\n        if (!isArrayLike(collection)) {\n          return eachFunc(collection, iteratee);\n        }\n        var length = collection.length,\n            index = fromRight ? length : -1,\n            iterable = Object(collection);\n\n        while ((fromRight ? index-- : ++index < length)) {\n          if (iteratee(iterable[index], index, iterable) === false) {\n            break;\n          }\n        }\n        return collection;\n      };\n    }\n\n    /**\n     * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n     *\n     * @private\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Function} Returns the new base function.\n     */\n    function createBaseFor(fromRight) {\n      return function(object, iteratee, keysFunc) {\n        var index = -1,\n            iterable = Object(object),\n            props = keysFunc(object),\n            length = props.length;\n\n        while (length--) {\n          var key = props[fromRight ? length : ++index];\n          if (iteratee(iterable[key], key, iterable) === false) {\n            break;\n          }\n        }\n        return object;\n      };\n    }\n\n    /**\n     * Creates a function that wraps `func` to invoke it with the optional `this`\n     * binding of `thisArg`.\n     *\n     * @private\n     * @param {Function} func The function to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createBind(func, bitmask, thisArg) {\n      var isBind = bitmask & WRAP_BIND_FLAG,\n          Ctor = createCtor(func);\n\n      function wrapper() {\n        var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n        return fn.apply(isBind ? thisArg : this, arguments);\n      }\n      return wrapper;\n    }\n\n    /**\n     * Creates a function like `_.lowerFirst`.\n     *\n     * @private\n     * @param {string} methodName The name of the `String` case method to use.\n     * @returns {Function} Returns the new case function.\n     */\n    function createCaseFirst(methodName) {\n      return function(string) {\n        string = toString(string);\n\n        var strSymbols = hasUnicode(string)\n          ? stringToArray(string)\n          : undefined;\n\n        var chr = strSymbols\n          ? strSymbols[0]\n          : string.charAt(0);\n\n        var trailing = strSymbols\n          ? castSlice(strSymbols, 1).join('')\n          : string.slice(1);\n\n        return chr[methodName]() + trailing;\n      };\n    }\n\n    /**\n     * Creates a function like `_.camelCase`.\n     *\n     * @private\n     * @param {Function} callback The function to combine each word.\n     * @returns {Function} Returns the new compounder function.\n     */\n    function createCompounder(callback) {\n      return function(string) {\n        return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');\n      };\n    }\n\n    /**\n     * Creates a function that produces an instance of `Ctor` regardless of\n     * whether it was invoked as part of a `new` expression or by `call` or `apply`.\n     *\n     * @private\n     * @param {Function} Ctor The constructor to wrap.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createCtor(Ctor) {\n      return function() {\n        // Use a `switch` statement to work with class constructors. See\n        // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist\n        // for more details.\n        var args = arguments;\n        switch (args.length) {\n          case 0: return new Ctor;\n          case 1: return new Ctor(args[0]);\n          case 2: return new Ctor(args[0], args[1]);\n          case 3: return new Ctor(args[0], args[1], args[2]);\n          case 4: return new Ctor(args[0], args[1], args[2], args[3]);\n          case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]);\n          case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);\n          case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);\n        }\n        var thisBinding = baseCreate(Ctor.prototype),\n            result = Ctor.apply(thisBinding, args);\n\n        // Mimic the constructor's `return` behavior.\n        // See https://es5.github.io/#x13.2.2 for more details.\n        return isObject(result) ? result : thisBinding;\n      };\n    }\n\n    /**\n     * Creates a function that wraps `func` to enable currying.\n     *\n     * @private\n     * @param {Function} func The function to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {number} arity The arity of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createCurry(func, bitmask, arity) {\n      var Ctor = createCtor(func);\n\n      function wrapper() {\n        var length = arguments.length,\n            args = Array(length),\n            index = length,\n            placeholder = getHolder(wrapper);\n\n        while (index--) {\n          args[index] = arguments[index];\n        }\n        var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder)\n          ? []\n          : replaceHolders(args, placeholder);\n\n        length -= holders.length;\n        if (length < arity) {\n          return createRecurry(\n            func, bitmask, createHybrid, wrapper.placeholder, undefined,\n            args, holders, undefined, undefined, arity - length);\n        }\n        var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n        return apply(fn, this, args);\n      }\n      return wrapper;\n    }\n\n    /**\n     * Creates a `_.find` or `_.findLast` function.\n     *\n     * @private\n     * @param {Function} findIndexFunc The function to find the collection index.\n     * @returns {Function} Returns the new find function.\n     */\n    function createFind(findIndexFunc) {\n      return function(collection, predicate, fromIndex) {\n        var iterable = Object(collection);\n        if (!isArrayLike(collection)) {\n          var iteratee = getIteratee(predicate, 3);\n          collection = keys(collection);\n          predicate = function(key) { return iteratee(iterable[key], key, iterable); };\n        }\n        var index = findIndexFunc(collection, predicate, fromIndex);\n        return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;\n      };\n    }\n\n    /**\n     * Creates a `_.flow` or `_.flowRight` function.\n     *\n     * @private\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Function} Returns the new flow function.\n     */\n    function createFlow(fromRight) {\n      return flatRest(function(funcs) {\n        var length = funcs.length,\n            index = length,\n            prereq = LodashWrapper.prototype.thru;\n\n        if (fromRight) {\n          funcs.reverse();\n        }\n        while (index--) {\n          var func = funcs[index];\n          if (typeof func != 'function') {\n            throw new TypeError(FUNC_ERROR_TEXT);\n          }\n          if (prereq && !wrapper && getFuncName(func) == 'wrapper') {\n            var wrapper = new LodashWrapper([], true);\n          }\n        }\n        index = wrapper ? index : length;\n        while (++index < length) {\n          func = funcs[index];\n\n          var funcName = getFuncName(func),\n              data = funcName == 'wrapper' ? getData(func) : undefined;\n\n          if (data && isLaziable(data[0]) &&\n                data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) &&\n                !data[4].length && data[9] == 1\n              ) {\n            wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);\n          } else {\n            wrapper = (func.length == 1 && isLaziable(func))\n              ? wrapper[funcName]()\n              : wrapper.thru(func);\n          }\n        }\n        return function() {\n          var args = arguments,\n              value = args[0];\n\n          if (wrapper && args.length == 1 && isArray(value)) {\n            return wrapper.plant(value).value();\n          }\n          var index = 0,\n              result = length ? funcs[index].apply(this, args) : value;\n\n          while (++index < length) {\n            result = funcs[index].call(this, result);\n          }\n          return result;\n        };\n      });\n    }\n\n    /**\n     * Creates a function that wraps `func` to invoke it with optional `this`\n     * binding of `thisArg`, partial application, and currying.\n     *\n     * @private\n     * @param {Function|string} func The function or method name to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @param {Array} [partials] The arguments to prepend to those provided to\n     *  the new function.\n     * @param {Array} [holders] The `partials` placeholder indexes.\n     * @param {Array} [partialsRight] The arguments to append to those provided\n     *  to the new function.\n     * @param {Array} [holdersRight] The `partialsRight` placeholder indexes.\n     * @param {Array} [argPos] The argument positions of the new function.\n     * @param {number} [ary] The arity cap of `func`.\n     * @param {number} [arity] The arity of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {\n      var isAry = bitmask & WRAP_ARY_FLAG,\n          isBind = bitmask & WRAP_BIND_FLAG,\n          isBindKey = bitmask & WRAP_BIND_KEY_FLAG,\n          isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG),\n          isFlip = bitmask & WRAP_FLIP_FLAG,\n          Ctor = isBindKey ? undefined : createCtor(func);\n\n      function wrapper() {\n        var length = arguments.length,\n            args = Array(length),\n            index = length;\n\n        while (index--) {\n          args[index] = arguments[index];\n        }\n        if (isCurried) {\n          var placeholder = getHolder(wrapper),\n              holdersCount = countHolders(args, placeholder);\n        }\n        if (partials) {\n          args = composeArgs(args, partials, holders, isCurried);\n        }\n        if (partialsRight) {\n          args = composeArgsRight(args, partialsRight, holdersRight, isCurried);\n        }\n        length -= holdersCount;\n        if (isCurried && length < arity) {\n          var newHolders = replaceHolders(args, placeholder);\n          return createRecurry(\n            func, bitmask, createHybrid, wrapper.placeholder, thisArg,\n            args, newHolders, argPos, ary, arity - length\n          );\n        }\n        var thisBinding = isBind ? thisArg : this,\n            fn = isBindKey ? thisBinding[func] : func;\n\n        length = args.length;\n        if (argPos) {\n          args = reorder(args, argPos);\n        } else if (isFlip && length > 1) {\n          args.reverse();\n        }\n        if (isAry && ary < length) {\n          args.length = ary;\n        }\n        if (this && this !== root && this instanceof wrapper) {\n          fn = Ctor || createCtor(fn);\n        }\n        return fn.apply(thisBinding, args);\n      }\n      return wrapper;\n    }\n\n    /**\n     * Creates a function like `_.invertBy`.\n     *\n     * @private\n     * @param {Function} setter The function to set accumulator values.\n     * @param {Function} toIteratee The function to resolve iteratees.\n     * @returns {Function} Returns the new inverter function.\n     */\n    function createInverter(setter, toIteratee) {\n      return function(object, iteratee) {\n        return baseInverter(object, setter, toIteratee(iteratee), {});\n      };\n    }\n\n    /**\n     * Creates a function that performs a mathematical operation on two values.\n     *\n     * @private\n     * @param {Function} operator The function to perform the operation.\n     * @param {number} [defaultValue] The value used for `undefined` arguments.\n     * @returns {Function} Returns the new mathematical operation function.\n     */\n    function createMathOperation(operator, defaultValue) {\n      return function(value, other) {\n        var result;\n        if (value === undefined && other === undefined) {\n          return defaultValue;\n        }\n        if (value !== undefined) {\n          result = value;\n        }\n        if (other !== undefined) {\n          if (result === undefined) {\n            return other;\n          }\n          if (typeof value == 'string' || typeof other == 'string') {\n            value = baseToString(value);\n            other = baseToString(other);\n          } else {\n            value = baseToNumber(value);\n            other = baseToNumber(other);\n          }\n          result = operator(value, other);\n        }\n        return result;\n      };\n    }\n\n    /**\n     * Creates a function like `_.over`.\n     *\n     * @private\n     * @param {Function} arrayFunc The function to iterate over iteratees.\n     * @returns {Function} Returns the new over function.\n     */\n    function createOver(arrayFunc) {\n      return flatRest(function(iteratees) {\n        iteratees = arrayMap(iteratees, baseUnary(getIteratee()));\n        return baseRest(function(args) {\n          var thisArg = this;\n          return arrayFunc(iteratees, function(iteratee) {\n            return apply(iteratee, thisArg, args);\n          });\n        });\n      });\n    }\n\n    /**\n     * Creates the padding for `string` based on `length`. The `chars` string\n     * is truncated if the number of characters exceeds `length`.\n     *\n     * @private\n     * @param {number} length The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the padding for `string`.\n     */\n    function createPadding(length, chars) {\n      chars = chars === undefined ? ' ' : baseToString(chars);\n\n      var charsLength = chars.length;\n      if (charsLength < 2) {\n        return charsLength ? baseRepeat(chars, length) : chars;\n      }\n      var result = baseRepeat(chars, nativeCeil(length / stringSize(chars)));\n      return hasUnicode(chars)\n        ? castSlice(stringToArray(result), 0, length).join('')\n        : result.slice(0, length);\n    }\n\n    /**\n     * Creates a function that wraps `func` to invoke it with the `this` binding\n     * of `thisArg` and `partials` prepended to the arguments it receives.\n     *\n     * @private\n     * @param {Function} func The function to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {*} thisArg The `this` binding of `func`.\n     * @param {Array} partials The arguments to prepend to those provided to\n     *  the new function.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createPartial(func, bitmask, thisArg, partials) {\n      var isBind = bitmask & WRAP_BIND_FLAG,\n          Ctor = createCtor(func);\n\n      function wrapper() {\n        var argsIndex = -1,\n            argsLength = arguments.length,\n            leftIndex = -1,\n            leftLength = partials.length,\n            args = Array(leftLength + argsLength),\n            fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n\n        while (++leftIndex < leftLength) {\n          args[leftIndex] = partials[leftIndex];\n        }\n        while (argsLength--) {\n          args[leftIndex++] = arguments[++argsIndex];\n        }\n        return apply(fn, isBind ? thisArg : this, args);\n      }\n      return wrapper;\n    }\n\n    /**\n     * Creates a `_.range` or `_.rangeRight` function.\n     *\n     * @private\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Function} Returns the new range function.\n     */\n    function createRange(fromRight) {\n      return function(start, end, step) {\n        if (step && typeof step != 'number' && isIterateeCall(start, end, step)) {\n          end = step = undefined;\n        }\n        // Ensure the sign of `-0` is preserved.\n        start = toFinite(start);\n        if (end === undefined) {\n          end = start;\n          start = 0;\n        } else {\n          end = toFinite(end);\n        }\n        step = step === undefined ? (start < end ? 1 : -1) : toFinite(step);\n        return baseRange(start, end, step, fromRight);\n      };\n    }\n\n    /**\n     * Creates a function that performs a relational operation on two values.\n     *\n     * @private\n     * @param {Function} operator The function to perform the operation.\n     * @returns {Function} Returns the new relational operation function.\n     */\n    function createRelationalOperation(operator) {\n      return function(value, other) {\n        if (!(typeof value == 'string' && typeof other == 'string')) {\n          value = toNumber(value);\n          other = toNumber(other);\n        }\n        return operator(value, other);\n      };\n    }\n\n    /**\n     * Creates a function that wraps `func` to continue currying.\n     *\n     * @private\n     * @param {Function} func The function to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {Function} wrapFunc The function to create the `func` wrapper.\n     * @param {*} placeholder The placeholder value.\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @param {Array} [partials] The arguments to prepend to those provided to\n     *  the new function.\n     * @param {Array} [holders] The `partials` placeholder indexes.\n     * @param {Array} [argPos] The argument positions of the new function.\n     * @param {number} [ary] The arity cap of `func`.\n     * @param {number} [arity] The arity of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) {\n      var isCurry = bitmask & WRAP_CURRY_FLAG,\n          newHolders = isCurry ? holders : undefined,\n          newHoldersRight = isCurry ? undefined : holders,\n          newPartials = isCurry ? partials : undefined,\n          newPartialsRight = isCurry ? undefined : partials;\n\n      bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG);\n      bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG);\n\n      if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) {\n        bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG);\n      }\n      var newData = [\n        func, bitmask, thisArg, newPartials, newHolders, newPartialsRight,\n        newHoldersRight, argPos, ary, arity\n      ];\n\n      var result = wrapFunc.apply(undefined, newData);\n      if (isLaziable(func)) {\n        setData(result, newData);\n      }\n      result.placeholder = placeholder;\n      return setWrapToString(result, func, bitmask);\n    }\n\n    /**\n     * Creates a function like `_.round`.\n     *\n     * @private\n     * @param {string} methodName The name of the `Math` method to use when rounding.\n     * @returns {Function} Returns the new round function.\n     */\n    function createRound(methodName) {\n      var func = Math[methodName];\n      return function(number, precision) {\n        number = toNumber(number);\n        precision = precision == null ? 0 : nativeMin(toInteger(precision), 292);\n        if (precision && nativeIsFinite(number)) {\n          // Shift with exponential notation to avoid floating-point issues.\n          // See [MDN](https://mdn.io/round#Examples) for more details.\n          var pair = (toString(number) + 'e').split('e'),\n              value = func(pair[0] + 'e' + (+pair[1] + precision));\n\n          pair = (toString(value) + 'e').split('e');\n          return +(pair[0] + 'e' + (+pair[1] - precision));\n        }\n        return func(number);\n      };\n    }\n\n    /**\n     * Creates a set object of `values`.\n     *\n     * @private\n     * @param {Array} values The values to add to the set.\n     * @returns {Object} Returns the new set.\n     */\n    var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n      return new Set(values);\n    };\n\n    /**\n     * Creates a `_.toPairs` or `_.toPairsIn` function.\n     *\n     * @private\n     * @param {Function} keysFunc The function to get the keys of a given object.\n     * @returns {Function} Returns the new pairs function.\n     */\n    function createToPairs(keysFunc) {\n      return function(object) {\n        var tag = getTag(object);\n        if (tag == mapTag) {\n          return mapToArray(object);\n        }\n        if (tag == setTag) {\n          return setToPairs(object);\n        }\n        return baseToPairs(object, keysFunc(object));\n      };\n    }\n\n    /**\n     * Creates a function that either curries or invokes `func` with optional\n     * `this` binding and partially applied arguments.\n     *\n     * @private\n     * @param {Function|string} func The function or method name to wrap.\n     * @param {number} bitmask The bitmask flags.\n     *    1 - `_.bind`\n     *    2 - `_.bindKey`\n     *    4 - `_.curry` or `_.curryRight` of a bound function\n     *    8 - `_.curry`\n     *   16 - `_.curryRight`\n     *   32 - `_.partial`\n     *   64 - `_.partialRight`\n     *  128 - `_.rearg`\n     *  256 - `_.ary`\n     *  512 - `_.flip`\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @param {Array} [partials] The arguments to be partially applied.\n     * @param {Array} [holders] The `partials` placeholder indexes.\n     * @param {Array} [argPos] The argument positions of the new function.\n     * @param {number} [ary] The arity cap of `func`.\n     * @param {number} [arity] The arity of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {\n      var isBindKey = bitmask & WRAP_BIND_KEY_FLAG;\n      if (!isBindKey && typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      var length = partials ? partials.length : 0;\n      if (!length) {\n        bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG);\n        partials = holders = undefined;\n      }\n      ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0);\n      arity = arity === undefined ? arity : toInteger(arity);\n      length -= holders ? holders.length : 0;\n\n      if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) {\n        var partialsRight = partials,\n            holdersRight = holders;\n\n        partials = holders = undefined;\n      }\n      var data = isBindKey ? undefined : getData(func);\n\n      var newData = [\n        func, bitmask, thisArg, partials, holders, partialsRight, holdersRight,\n        argPos, ary, arity\n      ];\n\n      if (data) {\n        mergeData(newData, data);\n      }\n      func = newData[0];\n      bitmask = newData[1];\n      thisArg = newData[2];\n      partials = newData[3];\n      holders = newData[4];\n      arity = newData[9] = newData[9] === undefined\n        ? (isBindKey ? 0 : func.length)\n        : nativeMax(newData[9] - length, 0);\n\n      if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) {\n        bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG);\n      }\n      if (!bitmask || bitmask == WRAP_BIND_FLAG) {\n        var result = createBind(func, bitmask, thisArg);\n      } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) {\n        result = createCurry(func, bitmask, arity);\n      } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) {\n        result = createPartial(func, bitmask, thisArg, partials);\n      } else {\n        result = createHybrid.apply(undefined, newData);\n      }\n      var setter = data ? baseSetData : setData;\n      return setWrapToString(setter(result, newData), func, bitmask);\n    }\n\n    /**\n     * Used by `_.defaults` to customize its `_.assignIn` use to assign properties\n     * of source objects to the destination object for all destination properties\n     * that resolve to `undefined`.\n     *\n     * @private\n     * @param {*} objValue The destination value.\n     * @param {*} srcValue The source value.\n     * @param {string} key The key of the property to assign.\n     * @param {Object} object The parent object of `objValue`.\n     * @returns {*} Returns the value to assign.\n     */\n    function customDefaultsAssignIn(objValue, srcValue, key, object) {\n      if (objValue === undefined ||\n          (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n        return srcValue;\n      }\n      return objValue;\n    }\n\n    /**\n     * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source\n     * objects into destination objects that are passed thru.\n     *\n     * @private\n     * @param {*} objValue The destination value.\n     * @param {*} srcValue The source value.\n     * @param {string} key The key of the property to merge.\n     * @param {Object} object The parent object of `objValue`.\n     * @param {Object} source The parent object of `srcValue`.\n     * @param {Object} [stack] Tracks traversed source values and their merged\n     *  counterparts.\n     * @returns {*} Returns the value to assign.\n     */\n    function customDefaultsMerge(objValue, srcValue, key, object, source, stack) {\n      if (isObject(objValue) && isObject(srcValue)) {\n        // Recursively merge objects and arrays (susceptible to call stack limits).\n        stack.set(srcValue, objValue);\n        baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack);\n        stack['delete'](srcValue);\n      }\n      return objValue;\n    }\n\n    /**\n     * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain\n     * objects.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @param {string} key The key of the property to inspect.\n     * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.\n     */\n    function customOmitClone(value) {\n      return isPlainObject(value) ? undefined : value;\n    }\n\n    /**\n     * A specialized version of `baseIsEqualDeep` for arrays with support for\n     * partial deep comparisons.\n     *\n     * @private\n     * @param {Array} array The array to compare.\n     * @param {Array} other The other array to compare.\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n     * @param {Function} customizer The function to customize comparisons.\n     * @param {Function} equalFunc The function to determine equivalents of values.\n     * @param {Object} stack Tracks traversed `array` and `other` objects.\n     * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n     */\n    function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n      var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n          arrLength = array.length,\n          othLength = other.length;\n\n      if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n        return false;\n      }\n      // Check that cyclic values are equal.\n      var arrStacked = stack.get(array);\n      var othStacked = stack.get(other);\n      if (arrStacked && othStacked) {\n        return arrStacked == other && othStacked == array;\n      }\n      var index = -1,\n          result = true,\n          seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n      stack.set(array, other);\n      stack.set(other, array);\n\n      // Ignore non-index properties.\n      while (++index < arrLength) {\n        var arrValue = array[index],\n            othValue = other[index];\n\n        if (customizer) {\n          var compared = isPartial\n            ? customizer(othValue, arrValue, index, other, array, stack)\n            : customizer(arrValue, othValue, index, array, other, stack);\n        }\n        if (compared !== undefined) {\n          if (compared) {\n            continue;\n          }\n          result = false;\n          break;\n        }\n        // Recursively compare arrays (susceptible to call stack limits).\n        if (seen) {\n          if (!arraySome(other, function(othValue, othIndex) {\n                if (!cacheHas(seen, othIndex) &&\n                    (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n                  return seen.push(othIndex);\n                }\n              })) {\n            result = false;\n            break;\n          }\n        } else if (!(\n              arrValue === othValue ||\n                equalFunc(arrValue, othValue, bitmask, customizer, stack)\n            )) {\n          result = false;\n          break;\n        }\n      }\n      stack['delete'](array);\n      stack['delete'](other);\n      return result;\n    }\n\n    /**\n     * A specialized version of `baseIsEqualDeep` for comparing objects of\n     * the same `toStringTag`.\n     *\n     * **Note:** This function only supports comparing values with tags of\n     * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n     *\n     * @private\n     * @param {Object} object The object to compare.\n     * @param {Object} other The other object to compare.\n     * @param {string} tag The `toStringTag` of the objects to compare.\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n     * @param {Function} customizer The function to customize comparisons.\n     * @param {Function} equalFunc The function to determine equivalents of values.\n     * @param {Object} stack Tracks traversed `object` and `other` objects.\n     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n     */\n    function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n      switch (tag) {\n        case dataViewTag:\n          if ((object.byteLength != other.byteLength) ||\n              (object.byteOffset != other.byteOffset)) {\n            return false;\n          }\n          object = object.buffer;\n          other = other.buffer;\n\n        case arrayBufferTag:\n          if ((object.byteLength != other.byteLength) ||\n              !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n            return false;\n          }\n          return true;\n\n        case boolTag:\n        case dateTag:\n        case numberTag:\n          // Coerce booleans to `1` or `0` and dates to milliseconds.\n          // Invalid dates are coerced to `NaN`.\n          return eq(+object, +other);\n\n        case errorTag:\n          return object.name == other.name && object.message == other.message;\n\n        case regexpTag:\n        case stringTag:\n          // Coerce regexes to strings and treat strings, primitives and objects,\n          // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n          // for more details.\n          return object == (other + '');\n\n        case mapTag:\n          var convert = mapToArray;\n\n        case setTag:\n          var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n          convert || (convert = setToArray);\n\n          if (object.size != other.size && !isPartial) {\n            return false;\n          }\n          // Assume cyclic values are equal.\n          var stacked = stack.get(object);\n          if (stacked) {\n            return stacked == other;\n          }\n          bitmask |= COMPARE_UNORDERED_FLAG;\n\n          // Recursively compare objects (susceptible to call stack limits).\n          stack.set(object, other);\n          var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n          stack['delete'](object);\n          return result;\n\n        case symbolTag:\n          if (symbolValueOf) {\n            return symbolValueOf.call(object) == symbolValueOf.call(other);\n          }\n      }\n      return false;\n    }\n\n    /**\n     * A specialized version of `baseIsEqualDeep` for objects with support for\n     * partial deep comparisons.\n     *\n     * @private\n     * @param {Object} object The object to compare.\n     * @param {Object} other The other object to compare.\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n     * @param {Function} customizer The function to customize comparisons.\n     * @param {Function} equalFunc The function to determine equivalents of values.\n     * @param {Object} stack Tracks traversed `object` and `other` objects.\n     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n     */\n    function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n      var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n          objProps = getAllKeys(object),\n          objLength = objProps.length,\n          othProps = getAllKeys(other),\n          othLength = othProps.length;\n\n      if (objLength != othLength && !isPartial) {\n        return false;\n      }\n      var index = objLength;\n      while (index--) {\n        var key = objProps[index];\n        if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n          return false;\n        }\n      }\n      // Check that cyclic values are equal.\n      var objStacked = stack.get(object);\n      var othStacked = stack.get(other);\n      if (objStacked && othStacked) {\n        return objStacked == other && othStacked == object;\n      }\n      var result = true;\n      stack.set(object, other);\n      stack.set(other, object);\n\n      var skipCtor = isPartial;\n      while (++index < objLength) {\n        key = objProps[index];\n        var objValue = object[key],\n            othValue = other[key];\n\n        if (customizer) {\n          var compared = isPartial\n            ? customizer(othValue, objValue, key, other, object, stack)\n            : customizer(objValue, othValue, key, object, other, stack);\n        }\n        // Recursively compare objects (susceptible to call stack limits).\n        if (!(compared === undefined\n              ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n              : compared\n            )) {\n          result = false;\n          break;\n        }\n        skipCtor || (skipCtor = key == 'constructor');\n      }\n      if (result && !skipCtor) {\n        var objCtor = object.constructor,\n            othCtor = other.constructor;\n\n        // Non `Object` object instances with different constructors are not equal.\n        if (objCtor != othCtor &&\n            ('constructor' in object && 'constructor' in other) &&\n            !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n              typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n          result = false;\n        }\n      }\n      stack['delete'](object);\n      stack['delete'](other);\n      return result;\n    }\n\n    /**\n     * A specialized version of `baseRest` which flattens the rest array.\n     *\n     * @private\n     * @param {Function} func The function to apply a rest parameter to.\n     * @returns {Function} Returns the new function.\n     */\n    function flatRest(func) {\n      return setToString(overRest(func, undefined, flatten), func + '');\n    }\n\n    /**\n     * Creates an array of own enumerable property names and symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names and symbols.\n     */\n    function getAllKeys(object) {\n      return baseGetAllKeys(object, keys, getSymbols);\n    }\n\n    /**\n     * Creates an array of own and inherited enumerable property names and\n     * symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names and symbols.\n     */\n    function getAllKeysIn(object) {\n      return baseGetAllKeys(object, keysIn, getSymbolsIn);\n    }\n\n    /**\n     * Gets metadata for `func`.\n     *\n     * @private\n     * @param {Function} func The function to query.\n     * @returns {*} Returns the metadata for `func`.\n     */\n    var getData = !metaMap ? noop : function(func) {\n      return metaMap.get(func);\n    };\n\n    /**\n     * Gets the name of `func`.\n     *\n     * @private\n     * @param {Function} func The function to query.\n     * @returns {string} Returns the function name.\n     */\n    function getFuncName(func) {\n      var result = (func.name + ''),\n          array = realNames[result],\n          length = hasOwnProperty.call(realNames, result) ? array.length : 0;\n\n      while (length--) {\n        var data = array[length],\n            otherFunc = data.func;\n        if (otherFunc == null || otherFunc == func) {\n          return data.name;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Gets the argument placeholder value for `func`.\n     *\n     * @private\n     * @param {Function} func The function to inspect.\n     * @returns {*} Returns the placeholder value.\n     */\n    function getHolder(func) {\n      var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func;\n      return object.placeholder;\n    }\n\n    /**\n     * Gets the appropriate \"iteratee\" function. If `_.iteratee` is customized,\n     * this function returns the custom method, otherwise it returns `baseIteratee`.\n     * If arguments are provided, the chosen function is invoked with them and\n     * its result is returned.\n     *\n     * @private\n     * @param {*} [value] The value to convert to an iteratee.\n     * @param {number} [arity] The arity of the created iteratee.\n     * @returns {Function} Returns the chosen function or its result.\n     */\n    function getIteratee() {\n      var result = lodash.iteratee || iteratee;\n      result = result === iteratee ? baseIteratee : result;\n      return arguments.length ? result(arguments[0], arguments[1]) : result;\n    }\n\n    /**\n     * Gets the data for `map`.\n     *\n     * @private\n     * @param {Object} map The map to query.\n     * @param {string} key The reference key.\n     * @returns {*} Returns the map data.\n     */\n    function getMapData(map, key) {\n      var data = map.__data__;\n      return isKeyable(key)\n        ? data[typeof key == 'string' ? 'string' : 'hash']\n        : data.map;\n    }\n\n    /**\n     * Gets the property names, values, and compare flags of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the match data of `object`.\n     */\n    function getMatchData(object) {\n      var result = keys(object),\n          length = result.length;\n\n      while (length--) {\n        var key = result[length],\n            value = object[key];\n\n        result[length] = [key, value, isStrictComparable(value)];\n      }\n      return result;\n    }\n\n    /**\n     * Gets the native function at `key` of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {string} key The key of the method to get.\n     * @returns {*} Returns the function if it's native, else `undefined`.\n     */\n    function getNative(object, key) {\n      var value = getValue(object, key);\n      return baseIsNative(value) ? value : undefined;\n    }\n\n    /**\n     * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n     *\n     * @private\n     * @param {*} value The value to query.\n     * @returns {string} Returns the raw `toStringTag`.\n     */\n    function getRawTag(value) {\n      var isOwn = hasOwnProperty.call(value, symToStringTag),\n          tag = value[symToStringTag];\n\n      try {\n        value[symToStringTag] = undefined;\n        var unmasked = true;\n      } catch (e) {}\n\n      var result = nativeObjectToString.call(value);\n      if (unmasked) {\n        if (isOwn) {\n          value[symToStringTag] = tag;\n        } else {\n          delete value[symToStringTag];\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Creates an array of the own enumerable symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of symbols.\n     */\n    var getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n      if (object == null) {\n        return [];\n      }\n      object = Object(object);\n      return arrayFilter(nativeGetSymbols(object), function(symbol) {\n        return propertyIsEnumerable.call(object, symbol);\n      });\n    };\n\n    /**\n     * Creates an array of the own and inherited enumerable symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of symbols.\n     */\n    var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n      var result = [];\n      while (object) {\n        arrayPush(result, getSymbols(object));\n        object = getPrototype(object);\n      }\n      return result;\n    };\n\n    /**\n     * Gets the `toStringTag` of `value`.\n     *\n     * @private\n     * @param {*} value The value to query.\n     * @returns {string} Returns the `toStringTag`.\n     */\n    var getTag = baseGetTag;\n\n    // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\n    if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n        (Map && getTag(new Map) != mapTag) ||\n        (Promise && getTag(Promise.resolve()) != promiseTag) ||\n        (Set && getTag(new Set) != setTag) ||\n        (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n      getTag = function(value) {\n        var result = baseGetTag(value),\n            Ctor = result == objectTag ? value.constructor : undefined,\n            ctorString = Ctor ? toSource(Ctor) : '';\n\n        if (ctorString) {\n          switch (ctorString) {\n            case dataViewCtorString: return dataViewTag;\n            case mapCtorString: return mapTag;\n            case promiseCtorString: return promiseTag;\n            case setCtorString: return setTag;\n            case weakMapCtorString: return weakMapTag;\n          }\n        }\n        return result;\n      };\n    }\n\n    /**\n     * Gets the view, applying any `transforms` to the `start` and `end` positions.\n     *\n     * @private\n     * @param {number} start The start of the view.\n     * @param {number} end The end of the view.\n     * @param {Array} transforms The transformations to apply to the view.\n     * @returns {Object} Returns an object containing the `start` and `end`\n     *  positions of the view.\n     */\n    function getView(start, end, transforms) {\n      var index = -1,\n          length = transforms.length;\n\n      while (++index < length) {\n        var data = transforms[index],\n            size = data.size;\n\n        switch (data.type) {\n          case 'drop':      start += size; break;\n          case 'dropRight': end -= size; break;\n          case 'take':      end = nativeMin(end, start + size); break;\n          case 'takeRight': start = nativeMax(start, end - size); break;\n        }\n      }\n      return { 'start': start, 'end': end };\n    }\n\n    /**\n     * Extracts wrapper details from the `source` body comment.\n     *\n     * @private\n     * @param {string} source The source to inspect.\n     * @returns {Array} Returns the wrapper details.\n     */\n    function getWrapDetails(source) {\n      var match = source.match(reWrapDetails);\n      return match ? match[1].split(reSplitDetails) : [];\n    }\n\n    /**\n     * Checks if `path` exists on `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path to check.\n     * @param {Function} hasFunc The function to check properties.\n     * @returns {boolean} Returns `true` if `path` exists, else `false`.\n     */\n    function hasPath(object, path, hasFunc) {\n      path = castPath(path, object);\n\n      var index = -1,\n          length = path.length,\n          result = false;\n\n      while (++index < length) {\n        var key = toKey(path[index]);\n        if (!(result = object != null && hasFunc(object, key))) {\n          break;\n        }\n        object = object[key];\n      }\n      if (result || ++index != length) {\n        return result;\n      }\n      length = object == null ? 0 : object.length;\n      return !!length && isLength(length) && isIndex(key, length) &&\n        (isArray(object) || isArguments(object));\n    }\n\n    /**\n     * Initializes an array clone.\n     *\n     * @private\n     * @param {Array} array The array to clone.\n     * @returns {Array} Returns the initialized clone.\n     */\n    function initCloneArray(array) {\n      var length = array.length,\n          result = new array.constructor(length);\n\n      // Add properties assigned by `RegExp#exec`.\n      if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n        result.index = array.index;\n        result.input = array.input;\n      }\n      return result;\n    }\n\n    /**\n     * Initializes an object clone.\n     *\n     * @private\n     * @param {Object} object The object to clone.\n     * @returns {Object} Returns the initialized clone.\n     */\n    function initCloneObject(object) {\n      return (typeof object.constructor == 'function' && !isPrototype(object))\n        ? baseCreate(getPrototype(object))\n        : {};\n    }\n\n    /**\n     * Initializes an object clone based on its `toStringTag`.\n     *\n     * **Note:** This function only supports cloning values with tags of\n     * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n     *\n     * @private\n     * @param {Object} object The object to clone.\n     * @param {string} tag The `toStringTag` of the object to clone.\n     * @param {boolean} [isDeep] Specify a deep clone.\n     * @returns {Object} Returns the initialized clone.\n     */\n    function initCloneByTag(object, tag, isDeep) {\n      var Ctor = object.constructor;\n      switch (tag) {\n        case arrayBufferTag:\n          return cloneArrayBuffer(object);\n\n        case boolTag:\n        case dateTag:\n          return new Ctor(+object);\n\n        case dataViewTag:\n          return cloneDataView(object, isDeep);\n\n        case float32Tag: case float64Tag:\n        case int8Tag: case int16Tag: case int32Tag:\n        case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n          return cloneTypedArray(object, isDeep);\n\n        case mapTag:\n          return new Ctor;\n\n        case numberTag:\n        case stringTag:\n          return new Ctor(object);\n\n        case regexpTag:\n          return cloneRegExp(object);\n\n        case setTag:\n          return new Ctor;\n\n        case symbolTag:\n          return cloneSymbol(object);\n      }\n    }\n\n    /**\n     * Inserts wrapper `details` in a comment at the top of the `source` body.\n     *\n     * @private\n     * @param {string} source The source to modify.\n     * @returns {Array} details The details to insert.\n     * @returns {string} Returns the modified source.\n     */\n    function insertWrapDetails(source, details) {\n      var length = details.length;\n      if (!length) {\n        return source;\n      }\n      var lastIndex = length - 1;\n      details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex];\n      details = details.join(length > 2 ? ', ' : ' ');\n      return source.replace(reWrapComment, '{\\n/* [wrapped with ' + details + '] */\\n');\n    }\n\n    /**\n     * Checks if `value` is a flattenable `arguments` object or array.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n     */\n    function isFlattenable(value) {\n      return isArray(value) || isArguments(value) ||\n        !!(spreadableSymbol && value && value[spreadableSymbol]);\n    }\n\n    /**\n     * Checks if `value` is a valid array-like index.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n     * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n     */\n    function isIndex(value, length) {\n      var type = typeof value;\n      length = length == null ? MAX_SAFE_INTEGER : length;\n\n      return !!length &&\n        (type == 'number' ||\n          (type != 'symbol' && reIsUint.test(value))) &&\n            (value > -1 && value % 1 == 0 && value < length);\n    }\n\n    /**\n     * Checks if the given arguments are from an iteratee call.\n     *\n     * @private\n     * @param {*} value The potential iteratee value argument.\n     * @param {*} index The potential iteratee index or key argument.\n     * @param {*} object The potential iteratee object argument.\n     * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n     *  else `false`.\n     */\n    function isIterateeCall(value, index, object) {\n      if (!isObject(object)) {\n        return false;\n      }\n      var type = typeof index;\n      if (type == 'number'\n            ? (isArrayLike(object) && isIndex(index, object.length))\n            : (type == 'string' && index in object)\n          ) {\n        return eq(object[index], value);\n      }\n      return false;\n    }\n\n    /**\n     * Checks if `value` is a property name and not a property path.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @param {Object} [object] The object to query keys on.\n     * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n     */\n    function isKey(value, object) {\n      if (isArray(value)) {\n        return false;\n      }\n      var type = typeof value;\n      if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n          value == null || isSymbol(value)) {\n        return true;\n      }\n      return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n        (object != null && value in Object(object));\n    }\n\n    /**\n     * Checks if `value` is suitable for use as unique object key.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n     */\n    function isKeyable(value) {\n      var type = typeof value;\n      return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n        ? (value !== '__proto__')\n        : (value === null);\n    }\n\n    /**\n     * Checks if `func` has a lazy counterpart.\n     *\n     * @private\n     * @param {Function} func The function to check.\n     * @returns {boolean} Returns `true` if `func` has a lazy counterpart,\n     *  else `false`.\n     */\n    function isLaziable(func) {\n      var funcName = getFuncName(func),\n          other = lodash[funcName];\n\n      if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) {\n        return false;\n      }\n      if (func === other) {\n        return true;\n      }\n      var data = getData(other);\n      return !!data && func === data[0];\n    }\n\n    /**\n     * Checks if `func` has its source masked.\n     *\n     * @private\n     * @param {Function} func The function to check.\n     * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n     */\n    function isMasked(func) {\n      return !!maskSrcKey && (maskSrcKey in func);\n    }\n\n    /**\n     * Checks if `func` is capable of being masked.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `func` is maskable, else `false`.\n     */\n    var isMaskable = coreJsData ? isFunction : stubFalse;\n\n    /**\n     * Checks if `value` is likely a prototype object.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n     */\n    function isPrototype(value) {\n      var Ctor = value && value.constructor,\n          proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n      return value === proto;\n    }\n\n    /**\n     * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` if suitable for strict\n     *  equality comparisons, else `false`.\n     */\n    function isStrictComparable(value) {\n      return value === value && !isObject(value);\n    }\n\n    /**\n     * A specialized version of `matchesProperty` for source values suitable\n     * for strict equality comparisons, i.e. `===`.\n     *\n     * @private\n     * @param {string} key The key of the property to get.\n     * @param {*} srcValue The value to match.\n     * @returns {Function} Returns the new spec function.\n     */\n    function matchesStrictComparable(key, srcValue) {\n      return function(object) {\n        if (object == null) {\n          return false;\n        }\n        return object[key] === srcValue &&\n          (srcValue !== undefined || (key in Object(object)));\n      };\n    }\n\n    /**\n     * A specialized version of `_.memoize` which clears the memoized function's\n     * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n     *\n     * @private\n     * @param {Function} func The function to have its output memoized.\n     * @returns {Function} Returns the new memoized function.\n     */\n    function memoizeCapped(func) {\n      var result = memoize(func, function(key) {\n        if (cache.size === MAX_MEMOIZE_SIZE) {\n          cache.clear();\n        }\n        return key;\n      });\n\n      var cache = result.cache;\n      return result;\n    }\n\n    /**\n     * Merges the function metadata of `source` into `data`.\n     *\n     * Merging metadata reduces the number of wrappers used to invoke a function.\n     * This is possible because methods like `_.bind`, `_.curry`, and `_.partial`\n     * may be applied regardless of execution order. Methods like `_.ary` and\n     * `_.rearg` modify function arguments, making the order in which they are\n     * executed important, preventing the merging of metadata. However, we make\n     * an exception for a safe combined case where curried functions have `_.ary`\n     * and or `_.rearg` applied.\n     *\n     * @private\n     * @param {Array} data The destination metadata.\n     * @param {Array} source The source metadata.\n     * @returns {Array} Returns `data`.\n     */\n    function mergeData(data, source) {\n      var bitmask = data[1],\n          srcBitmask = source[1],\n          newBitmask = bitmask | srcBitmask,\n          isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG);\n\n      var isCombo =\n        ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) ||\n        ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) ||\n        ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG));\n\n      // Exit early if metadata can't be merged.\n      if (!(isCommon || isCombo)) {\n        return data;\n      }\n      // Use source `thisArg` if available.\n      if (srcBitmask & WRAP_BIND_FLAG) {\n        data[2] = source[2];\n        // Set when currying a bound function.\n        newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG;\n      }\n      // Compose partial arguments.\n      var value = source[3];\n      if (value) {\n        var partials = data[3];\n        data[3] = partials ? composeArgs(partials, value, source[4]) : value;\n        data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4];\n      }\n      // Compose partial right arguments.\n      value = source[5];\n      if (value) {\n        partials = data[5];\n        data[5] = partials ? composeArgsRight(partials, value, source[6]) : value;\n        data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6];\n      }\n      // Use source `argPos` if available.\n      value = source[7];\n      if (value) {\n        data[7] = value;\n      }\n      // Use source `ary` if it's smaller.\n      if (srcBitmask & WRAP_ARY_FLAG) {\n        data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);\n      }\n      // Use source `arity` if one is not provided.\n      if (data[9] == null) {\n        data[9] = source[9];\n      }\n      // Use source `func` and merge bitmasks.\n      data[0] = source[0];\n      data[1] = newBitmask;\n\n      return data;\n    }\n\n    /**\n     * This function is like\n     * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n     * except that it includes inherited enumerable properties.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     */\n    function nativeKeysIn(object) {\n      var result = [];\n      if (object != null) {\n        for (var key in Object(object)) {\n          result.push(key);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Converts `value` to a string using `Object.prototype.toString`.\n     *\n     * @private\n     * @param {*} value The value to convert.\n     * @returns {string} Returns the converted string.\n     */\n    function objectToString(value) {\n      return nativeObjectToString.call(value);\n    }\n\n    /**\n     * A specialized version of `baseRest` which transforms the rest array.\n     *\n     * @private\n     * @param {Function} func The function to apply a rest parameter to.\n     * @param {number} [start=func.length-1] The start position of the rest parameter.\n     * @param {Function} transform The rest array transform.\n     * @returns {Function} Returns the new function.\n     */\n    function overRest(func, start, transform) {\n      start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n      return function() {\n        var args = arguments,\n            index = -1,\n            length = nativeMax(args.length - start, 0),\n            array = Array(length);\n\n        while (++index < length) {\n          array[index] = args[start + index];\n        }\n        index = -1;\n        var otherArgs = Array(start + 1);\n        while (++index < start) {\n          otherArgs[index] = args[index];\n        }\n        otherArgs[start] = transform(array);\n        return apply(func, this, otherArgs);\n      };\n    }\n\n    /**\n     * Gets the parent value at `path` of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Array} path The path to get the parent value of.\n     * @returns {*} Returns the parent value.\n     */\n    function parent(object, path) {\n      return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));\n    }\n\n    /**\n     * Reorder `array` according to the specified indexes where the element at\n     * the first index is assigned as the first element, the element at\n     * the second index is assigned as the second element, and so on.\n     *\n     * @private\n     * @param {Array} array The array to reorder.\n     * @param {Array} indexes The arranged array indexes.\n     * @returns {Array} Returns `array`.\n     */\n    function reorder(array, indexes) {\n      var arrLength = array.length,\n          length = nativeMin(indexes.length, arrLength),\n          oldArray = copyArray(array);\n\n      while (length--) {\n        var index = indexes[length];\n        array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined;\n      }\n      return array;\n    }\n\n    /**\n     * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {string} key The key of the property to get.\n     * @returns {*} Returns the property value.\n     */\n    function safeGet(object, key) {\n      if (key === 'constructor' && typeof object[key] === 'function') {\n        return;\n      }\n\n      if (key == '__proto__') {\n        return;\n      }\n\n      return object[key];\n    }\n\n    /**\n     * Sets metadata for `func`.\n     *\n     * **Note:** If this function becomes hot, i.e. is invoked a lot in a short\n     * period of time, it will trip its breaker and transition to an identity\n     * function to avoid garbage collection pauses in V8. See\n     * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070)\n     * for more details.\n     *\n     * @private\n     * @param {Function} func The function to associate metadata with.\n     * @param {*} data The metadata.\n     * @returns {Function} Returns `func`.\n     */\n    var setData = shortOut(baseSetData);\n\n    /**\n     * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout).\n     *\n     * @private\n     * @param {Function} func The function to delay.\n     * @param {number} wait The number of milliseconds to delay invocation.\n     * @returns {number|Object} Returns the timer id or timeout object.\n     */\n    var setTimeout = ctxSetTimeout || function(func, wait) {\n      return root.setTimeout(func, wait);\n    };\n\n    /**\n     * Sets the `toString` method of `func` to return `string`.\n     *\n     * @private\n     * @param {Function} func The function to modify.\n     * @param {Function} string The `toString` result.\n     * @returns {Function} Returns `func`.\n     */\n    var setToString = shortOut(baseSetToString);\n\n    /**\n     * Sets the `toString` method of `wrapper` to mimic the source of `reference`\n     * with wrapper details in a comment at the top of the source body.\n     *\n     * @private\n     * @param {Function} wrapper The function to modify.\n     * @param {Function} reference The reference function.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @returns {Function} Returns `wrapper`.\n     */\n    function setWrapToString(wrapper, reference, bitmask) {\n      var source = (reference + '');\n      return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask)));\n    }\n\n    /**\n     * Creates a function that'll short out and invoke `identity` instead\n     * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n     * milliseconds.\n     *\n     * @private\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new shortable function.\n     */\n    function shortOut(func) {\n      var count = 0,\n          lastCalled = 0;\n\n      return function() {\n        var stamp = nativeNow(),\n            remaining = HOT_SPAN - (stamp - lastCalled);\n\n        lastCalled = stamp;\n        if (remaining > 0) {\n          if (++count >= HOT_COUNT) {\n            return arguments[0];\n          }\n        } else {\n          count = 0;\n        }\n        return func.apply(undefined, arguments);\n      };\n    }\n\n    /**\n     * A specialized version of `_.shuffle` which mutates and sets the size of `array`.\n     *\n     * @private\n     * @param {Array} array The array to shuffle.\n     * @param {number} [size=array.length] The size of `array`.\n     * @returns {Array} Returns `array`.\n     */\n    function shuffleSelf(array, size) {\n      var index = -1,\n          length = array.length,\n          lastIndex = length - 1;\n\n      size = size === undefined ? length : size;\n      while (++index < size) {\n        var rand = baseRandom(index, lastIndex),\n            value = array[rand];\n\n        array[rand] = array[index];\n        array[index] = value;\n      }\n      array.length = size;\n      return array;\n    }\n\n    /**\n     * Converts `string` to a property path array.\n     *\n     * @private\n     * @param {string} string The string to convert.\n     * @returns {Array} Returns the property path array.\n     */\n    var stringToPath = memoizeCapped(function(string) {\n      var result = [];\n      if (string.charCodeAt(0) === 46 /* . */) {\n        result.push('');\n      }\n      string.replace(rePropName, function(match, number, quote, subString) {\n        result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n      });\n      return result;\n    });\n\n    /**\n     * Converts `value` to a string key if it's not a string or symbol.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @returns {string|symbol} Returns the key.\n     */\n    function toKey(value) {\n      if (typeof value == 'string' || isSymbol(value)) {\n        return value;\n      }\n      var result = (value + '');\n      return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n    }\n\n    /**\n     * Converts `func` to its source code.\n     *\n     * @private\n     * @param {Function} func The function to convert.\n     * @returns {string} Returns the source code.\n     */\n    function toSource(func) {\n      if (func != null) {\n        try {\n          return funcToString.call(func);\n        } catch (e) {}\n        try {\n          return (func + '');\n        } catch (e) {}\n      }\n      return '';\n    }\n\n    /**\n     * Updates wrapper `details` based on `bitmask` flags.\n     *\n     * @private\n     * @returns {Array} details The details to modify.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @returns {Array} Returns `details`.\n     */\n    function updateWrapDetails(details, bitmask) {\n      arrayEach(wrapFlags, function(pair) {\n        var value = '_.' + pair[0];\n        if ((bitmask & pair[1]) && !arrayIncludes(details, value)) {\n          details.push(value);\n        }\n      });\n      return details.sort();\n    }\n\n    /**\n     * Creates a clone of `wrapper`.\n     *\n     * @private\n     * @param {Object} wrapper The wrapper to clone.\n     * @returns {Object} Returns the cloned wrapper.\n     */\n    function wrapperClone(wrapper) {\n      if (wrapper instanceof LazyWrapper) {\n        return wrapper.clone();\n      }\n      var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__);\n      result.__actions__ = copyArray(wrapper.__actions__);\n      result.__index__  = wrapper.__index__;\n      result.__values__ = wrapper.__values__;\n      return result;\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates an array of elements split into groups the length of `size`.\n     * If `array` can't be split evenly, the final chunk will be the remaining\n     * elements.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to process.\n     * @param {number} [size=1] The length of each chunk\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the new array of chunks.\n     * @example\n     *\n     * _.chunk(['a', 'b', 'c', 'd'], 2);\n     * // => [['a', 'b'], ['c', 'd']]\n     *\n     * _.chunk(['a', 'b', 'c', 'd'], 3);\n     * // => [['a', 'b', 'c'], ['d']]\n     */\n    function chunk(array, size, guard) {\n      if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) {\n        size = 1;\n      } else {\n        size = nativeMax(toInteger(size), 0);\n      }\n      var length = array == null ? 0 : array.length;\n      if (!length || size < 1) {\n        return [];\n      }\n      var index = 0,\n          resIndex = 0,\n          result = Array(nativeCeil(length / size));\n\n      while (index < length) {\n        result[resIndex++] = baseSlice(array, index, (index += size));\n      }\n      return result;\n    }\n\n    /**\n     * Creates an array with all falsey values removed. The values `false`, `null`,\n     * `0`, `\"\"`, `undefined`, and `NaN` are falsey.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to compact.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * _.compact([0, 1, false, 2, '', 3]);\n     * // => [1, 2, 3]\n     */\n    function compact(array) {\n      var index = -1,\n          length = array == null ? 0 : array.length,\n          resIndex = 0,\n          result = [];\n\n      while (++index < length) {\n        var value = array[index];\n        if (value) {\n          result[resIndex++] = value;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Creates a new array concatenating `array` with any additional arrays\n     * and/or values.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to concatenate.\n     * @param {...*} [values] The values to concatenate.\n     * @returns {Array} Returns the new concatenated array.\n     * @example\n     *\n     * var array = [1];\n     * var other = _.concat(array, 2, [3], [[4]]);\n     *\n     * console.log(other);\n     * // => [1, 2, 3, [4]]\n     *\n     * console.log(array);\n     * // => [1]\n     */\n    function concat() {\n      var length = arguments.length;\n      if (!length) {\n        return [];\n      }\n      var args = Array(length - 1),\n          array = arguments[0],\n          index = length;\n\n      while (index--) {\n        args[index - 1] = arguments[index];\n      }\n      return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1));\n    }\n\n    /**\n     * Creates an array of `array` values not included in the other given arrays\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons. The order and references of result values are\n     * determined by the first array.\n     *\n     * **Note:** Unlike `_.pullAll`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {...Array} [values] The values to exclude.\n     * @returns {Array} Returns the new array of filtered values.\n     * @see _.without, _.xor\n     * @example\n     *\n     * _.difference([2, 1], [2, 3]);\n     * // => [1]\n     */\n    var difference = baseRest(function(array, values) {\n      return isArrayLikeObject(array)\n        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true))\n        : [];\n    });\n\n    /**\n     * This method is like `_.difference` except that it accepts `iteratee` which\n     * is invoked for each element of `array` and `values` to generate the criterion\n     * by which they're compared. The order and references of result values are\n     * determined by the first array. The iteratee is invoked with one argument:\n     * (value).\n     *\n     * **Note:** Unlike `_.pullAllBy`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {...Array} [values] The values to exclude.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n     * // => [1.2]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x');\n     * // => [{ 'x': 2 }]\n     */\n    var differenceBy = baseRest(function(array, values) {\n      var iteratee = last(values);\n      if (isArrayLikeObject(iteratee)) {\n        iteratee = undefined;\n      }\n      return isArrayLikeObject(array)\n        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee, 2))\n        : [];\n    });\n\n    /**\n     * This method is like `_.difference` except that it accepts `comparator`\n     * which is invoked to compare elements of `array` to `values`. The order and\n     * references of result values are determined by the first array. The comparator\n     * is invoked with two arguments: (arrVal, othVal).\n     *\n     * **Note:** Unlike `_.pullAllWith`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {...Array} [values] The values to exclude.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n     *\n     * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual);\n     * // => [{ 'x': 2, 'y': 1 }]\n     */\n    var differenceWith = baseRest(function(array, values) {\n      var comparator = last(values);\n      if (isArrayLikeObject(comparator)) {\n        comparator = undefined;\n      }\n      return isArrayLikeObject(array)\n        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator)\n        : [];\n    });\n\n    /**\n     * Creates a slice of `array` with `n` elements dropped from the beginning.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.5.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to drop.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.drop([1, 2, 3]);\n     * // => [2, 3]\n     *\n     * _.drop([1, 2, 3], 2);\n     * // => [3]\n     *\n     * _.drop([1, 2, 3], 5);\n     * // => []\n     *\n     * _.drop([1, 2, 3], 0);\n     * // => [1, 2, 3]\n     */\n    function drop(array, n, guard) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      n = (guard || n === undefined) ? 1 : toInteger(n);\n      return baseSlice(array, n < 0 ? 0 : n, length);\n    }\n\n    /**\n     * Creates a slice of `array` with `n` elements dropped from the end.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to drop.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.dropRight([1, 2, 3]);\n     * // => [1, 2]\n     *\n     * _.dropRight([1, 2, 3], 2);\n     * // => [1]\n     *\n     * _.dropRight([1, 2, 3], 5);\n     * // => []\n     *\n     * _.dropRight([1, 2, 3], 0);\n     * // => [1, 2, 3]\n     */\n    function dropRight(array, n, guard) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      n = (guard || n === undefined) ? 1 : toInteger(n);\n      n = length - n;\n      return baseSlice(array, 0, n < 0 ? 0 : n);\n    }\n\n    /**\n     * Creates a slice of `array` excluding elements dropped from the end.\n     * Elements are dropped until `predicate` returns falsey. The predicate is\n     * invoked with three arguments: (value, index, array).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': true },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': false }\n     * ];\n     *\n     * _.dropRightWhile(users, function(o) { return !o.active; });\n     * // => objects for ['barney']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false });\n     * // => objects for ['barney', 'fred']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.dropRightWhile(users, ['active', false]);\n     * // => objects for ['barney']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.dropRightWhile(users, 'active');\n     * // => objects for ['barney', 'fred', 'pebbles']\n     */\n    function dropRightWhile(array, predicate) {\n      return (array && array.length)\n        ? baseWhile(array, getIteratee(predicate, 3), true, true)\n        : [];\n    }\n\n    /**\n     * Creates a slice of `array` excluding elements dropped from the beginning.\n     * Elements are dropped until `predicate` returns falsey. The predicate is\n     * invoked with three arguments: (value, index, array).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': false },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': true }\n     * ];\n     *\n     * _.dropWhile(users, function(o) { return !o.active; });\n     * // => objects for ['pebbles']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.dropWhile(users, { 'user': 'barney', 'active': false });\n     * // => objects for ['fred', 'pebbles']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.dropWhile(users, ['active', false]);\n     * // => objects for ['pebbles']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.dropWhile(users, 'active');\n     * // => objects for ['barney', 'fred', 'pebbles']\n     */\n    function dropWhile(array, predicate) {\n      return (array && array.length)\n        ? baseWhile(array, getIteratee(predicate, 3), true)\n        : [];\n    }\n\n    /**\n     * Fills elements of `array` with `value` from `start` up to, but not\n     * including, `end`.\n     *\n     * **Note:** This method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.2.0\n     * @category Array\n     * @param {Array} array The array to fill.\n     * @param {*} value The value to fill `array` with.\n     * @param {number} [start=0] The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [1, 2, 3];\n     *\n     * _.fill(array, 'a');\n     * console.log(array);\n     * // => ['a', 'a', 'a']\n     *\n     * _.fill(Array(3), 2);\n     * // => [2, 2, 2]\n     *\n     * _.fill([4, 6, 8, 10], '*', 1, 3);\n     * // => [4, '*', '*', 10]\n     */\n    function fill(array, value, start, end) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      if (start && typeof start != 'number' && isIterateeCall(array, value, start)) {\n        start = 0;\n        end = length;\n      }\n      return baseFill(array, value, start, end);\n    }\n\n    /**\n     * This method is like `_.find` except that it returns the index of the first\n     * element `predicate` returns truthy for instead of the element itself.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param {number} [fromIndex=0] The index to search from.\n     * @returns {number} Returns the index of the found element, else `-1`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': false },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': true }\n     * ];\n     *\n     * _.findIndex(users, function(o) { return o.user == 'barney'; });\n     * // => 0\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.findIndex(users, { 'user': 'fred', 'active': false });\n     * // => 1\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.findIndex(users, ['active', false]);\n     * // => 0\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.findIndex(users, 'active');\n     * // => 2\n     */\n    function findIndex(array, predicate, fromIndex) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return -1;\n      }\n      var index = fromIndex == null ? 0 : toInteger(fromIndex);\n      if (index < 0) {\n        index = nativeMax(length + index, 0);\n      }\n      return baseFindIndex(array, getIteratee(predicate, 3), index);\n    }\n\n    /**\n     * This method is like `_.findIndex` except that it iterates over elements\n     * of `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param {number} [fromIndex=array.length-1] The index to search from.\n     * @returns {number} Returns the index of the found element, else `-1`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': true },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': false }\n     * ];\n     *\n     * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; });\n     * // => 2\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.findLastIndex(users, { 'user': 'barney', 'active': true });\n     * // => 0\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.findLastIndex(users, ['active', false]);\n     * // => 2\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.findLastIndex(users, 'active');\n     * // => 0\n     */\n    function findLastIndex(array, predicate, fromIndex) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return -1;\n      }\n      var index = length - 1;\n      if (fromIndex !== undefined) {\n        index = toInteger(fromIndex);\n        index = fromIndex < 0\n          ? nativeMax(length + index, 0)\n          : nativeMin(index, length - 1);\n      }\n      return baseFindIndex(array, getIteratee(predicate, 3), index, true);\n    }\n\n    /**\n     * Flattens `array` a single level deep.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to flatten.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * _.flatten([1, [2, [3, [4]], 5]]);\n     * // => [1, 2, [3, [4]], 5]\n     */\n    function flatten(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? baseFlatten(array, 1) : [];\n    }\n\n    /**\n     * Recursively flattens `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to flatten.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * _.flattenDeep([1, [2, [3, [4]], 5]]);\n     * // => [1, 2, 3, 4, 5]\n     */\n    function flattenDeep(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? baseFlatten(array, INFINITY) : [];\n    }\n\n    /**\n     * Recursively flatten `array` up to `depth` times.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.4.0\n     * @category Array\n     * @param {Array} array The array to flatten.\n     * @param {number} [depth=1] The maximum recursion depth.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * var array = [1, [2, [3, [4]], 5]];\n     *\n     * _.flattenDepth(array, 1);\n     * // => [1, 2, [3, [4]], 5]\n     *\n     * _.flattenDepth(array, 2);\n     * // => [1, 2, 3, [4], 5]\n     */\n    function flattenDepth(array, depth) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      depth = depth === undefined ? 1 : toInteger(depth);\n      return baseFlatten(array, depth);\n    }\n\n    /**\n     * The inverse of `_.toPairs`; this method returns an object composed\n     * from key-value `pairs`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} pairs The key-value pairs.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * _.fromPairs([['a', 1], ['b', 2]]);\n     * // => { 'a': 1, 'b': 2 }\n     */\n    function fromPairs(pairs) {\n      var index = -1,\n          length = pairs == null ? 0 : pairs.length,\n          result = {};\n\n      while (++index < length) {\n        var pair = pairs[index];\n        result[pair[0]] = pair[1];\n      }\n      return result;\n    }\n\n    /**\n     * Gets the first element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @alias first\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {*} Returns the first element of `array`.\n     * @example\n     *\n     * _.head([1, 2, 3]);\n     * // => 1\n     *\n     * _.head([]);\n     * // => undefined\n     */\n    function head(array) {\n      return (array && array.length) ? array[0] : undefined;\n    }\n\n    /**\n     * Gets the index at which the first occurrence of `value` is found in `array`\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons. If `fromIndex` is negative, it's used as the\n     * offset from the end of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @param {number} [fromIndex=0] The index to search from.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     * @example\n     *\n     * _.indexOf([1, 2, 1, 2], 2);\n     * // => 1\n     *\n     * // Search from the `fromIndex`.\n     * _.indexOf([1, 2, 1, 2], 2, 2);\n     * // => 3\n     */\n    function indexOf(array, value, fromIndex) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return -1;\n      }\n      var index = fromIndex == null ? 0 : toInteger(fromIndex);\n      if (index < 0) {\n        index = nativeMax(length + index, 0);\n      }\n      return baseIndexOf(array, value, index);\n    }\n\n    /**\n     * Gets all but the last element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.initial([1, 2, 3]);\n     * // => [1, 2]\n     */\n    function initial(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? baseSlice(array, 0, -1) : [];\n    }\n\n    /**\n     * Creates an array of unique values that are included in all given arrays\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons. The order and references of result values are\n     * determined by the first array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @returns {Array} Returns the new array of intersecting values.\n     * @example\n     *\n     * _.intersection([2, 1], [2, 3]);\n     * // => [2]\n     */\n    var intersection = baseRest(function(arrays) {\n      var mapped = arrayMap(arrays, castArrayLikeObject);\n      return (mapped.length && mapped[0] === arrays[0])\n        ? baseIntersection(mapped)\n        : [];\n    });\n\n    /**\n     * This method is like `_.intersection` except that it accepts `iteratee`\n     * which is invoked for each element of each `arrays` to generate the criterion\n     * by which they're compared. The order and references of result values are\n     * determined by the first array. The iteratee is invoked with one argument:\n     * (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new array of intersecting values.\n     * @example\n     *\n     * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n     * // => [2.1]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n     * // => [{ 'x': 1 }]\n     */\n    var intersectionBy = baseRest(function(arrays) {\n      var iteratee = last(arrays),\n          mapped = arrayMap(arrays, castArrayLikeObject);\n\n      if (iteratee === last(mapped)) {\n        iteratee = undefined;\n      } else {\n        mapped.pop();\n      }\n      return (mapped.length && mapped[0] === arrays[0])\n        ? baseIntersection(mapped, getIteratee(iteratee, 2))\n        : [];\n    });\n\n    /**\n     * This method is like `_.intersection` except that it accepts `comparator`\n     * which is invoked to compare elements of `arrays`. The order and references\n     * of result values are determined by the first array. The comparator is\n     * invoked with two arguments: (arrVal, othVal).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of intersecting values.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n     *\n     * _.intersectionWith(objects, others, _.isEqual);\n     * // => [{ 'x': 1, 'y': 2 }]\n     */\n    var intersectionWith = baseRest(function(arrays) {\n      var comparator = last(arrays),\n          mapped = arrayMap(arrays, castArrayLikeObject);\n\n      comparator = typeof comparator == 'function' ? comparator : undefined;\n      if (comparator) {\n        mapped.pop();\n      }\n      return (mapped.length && mapped[0] === arrays[0])\n        ? baseIntersection(mapped, undefined, comparator)\n        : [];\n    });\n\n    /**\n     * Converts all elements in `array` into a string separated by `separator`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to convert.\n     * @param {string} [separator=','] The element separator.\n     * @returns {string} Returns the joined string.\n     * @example\n     *\n     * _.join(['a', 'b', 'c'], '~');\n     * // => 'a~b~c'\n     */\n    function join(array, separator) {\n      return array == null ? '' : nativeJoin.call(array, separator);\n    }\n\n    /**\n     * Gets the last element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {*} Returns the last element of `array`.\n     * @example\n     *\n     * _.last([1, 2, 3]);\n     * // => 3\n     */\n    function last(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? array[length - 1] : undefined;\n    }\n\n    /**\n     * This method is like `_.indexOf` except that it iterates over elements of\n     * `array` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @param {number} [fromIndex=array.length-1] The index to search from.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     * @example\n     *\n     * _.lastIndexOf([1, 2, 1, 2], 2);\n     * // => 3\n     *\n     * // Search from the `fromIndex`.\n     * _.lastIndexOf([1, 2, 1, 2], 2, 2);\n     * // => 1\n     */\n    function lastIndexOf(array, value, fromIndex) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return -1;\n      }\n      var index = length;\n      if (fromIndex !== undefined) {\n        index = toInteger(fromIndex);\n        index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1);\n      }\n      return value === value\n        ? strictLastIndexOf(array, value, index)\n        : baseFindIndex(array, baseIsNaN, index, true);\n    }\n\n    /**\n     * Gets the element at index `n` of `array`. If `n` is negative, the nth\n     * element from the end is returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.11.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=0] The index of the element to return.\n     * @returns {*} Returns the nth element of `array`.\n     * @example\n     *\n     * var array = ['a', 'b', 'c', 'd'];\n     *\n     * _.nth(array, 1);\n     * // => 'b'\n     *\n     * _.nth(array, -2);\n     * // => 'c';\n     */\n    function nth(array, n) {\n      return (array && array.length) ? baseNth(array, toInteger(n)) : undefined;\n    }\n\n    /**\n     * Removes all given values from `array` using\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons.\n     *\n     * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove`\n     * to remove elements from an array by predicate.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {...*} [values] The values to remove.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n     *\n     * _.pull(array, 'a', 'c');\n     * console.log(array);\n     * // => ['b', 'b']\n     */\n    var pull = baseRest(pullAll);\n\n    /**\n     * This method is like `_.pull` except that it accepts an array of values to remove.\n     *\n     * **Note:** Unlike `_.difference`, this method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {Array} values The values to remove.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n     *\n     * _.pullAll(array, ['a', 'c']);\n     * console.log(array);\n     * // => ['b', 'b']\n     */\n    function pullAll(array, values) {\n      return (array && array.length && values && values.length)\n        ? basePullAll(array, values)\n        : array;\n    }\n\n    /**\n     * This method is like `_.pullAll` except that it accepts `iteratee` which is\n     * invoked for each element of `array` and `values` to generate the criterion\n     * by which they're compared. The iteratee is invoked with one argument: (value).\n     *\n     * **Note:** Unlike `_.differenceBy`, this method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {Array} values The values to remove.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }];\n     *\n     * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x');\n     * console.log(array);\n     * // => [{ 'x': 2 }]\n     */\n    function pullAllBy(array, values, iteratee) {\n      return (array && array.length && values && values.length)\n        ? basePullAll(array, values, getIteratee(iteratee, 2))\n        : array;\n    }\n\n    /**\n     * This method is like `_.pullAll` except that it accepts `comparator` which\n     * is invoked to compare elements of `array` to `values`. The comparator is\n     * invoked with two arguments: (arrVal, othVal).\n     *\n     * **Note:** Unlike `_.differenceWith`, this method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.6.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {Array} values The values to remove.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }];\n     *\n     * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual);\n     * console.log(array);\n     * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }]\n     */\n    function pullAllWith(array, values, comparator) {\n      return (array && array.length && values && values.length)\n        ? basePullAll(array, values, undefined, comparator)\n        : array;\n    }\n\n    /**\n     * Removes elements from `array` corresponding to `indexes` and returns an\n     * array of removed elements.\n     *\n     * **Note:** Unlike `_.at`, this method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {...(number|number[])} [indexes] The indexes of elements to remove.\n     * @returns {Array} Returns the new array of removed elements.\n     * @example\n     *\n     * var array = ['a', 'b', 'c', 'd'];\n     * var pulled = _.pullAt(array, [1, 3]);\n     *\n     * console.log(array);\n     * // => ['a', 'c']\n     *\n     * console.log(pulled);\n     * // => ['b', 'd']\n     */\n    var pullAt = flatRest(function(array, indexes) {\n      var length = array == null ? 0 : array.length,\n          result = baseAt(array, indexes);\n\n      basePullAt(array, arrayMap(indexes, function(index) {\n        return isIndex(index, length) ? +index : index;\n      }).sort(compareAscending));\n\n      return result;\n    });\n\n    /**\n     * Removes all elements from `array` that `predicate` returns truthy for\n     * and returns an array of the removed elements. The predicate is invoked\n     * with three arguments: (value, index, array).\n     *\n     * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull`\n     * to pull elements from an array by value.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new array of removed elements.\n     * @example\n     *\n     * var array = [1, 2, 3, 4];\n     * var evens = _.remove(array, function(n) {\n     *   return n % 2 == 0;\n     * });\n     *\n     * console.log(array);\n     * // => [1, 3]\n     *\n     * console.log(evens);\n     * // => [2, 4]\n     */\n    function remove(array, predicate) {\n      var result = [];\n      if (!(array && array.length)) {\n        return result;\n      }\n      var index = -1,\n          indexes = [],\n          length = array.length;\n\n      predicate = getIteratee(predicate, 3);\n      while (++index < length) {\n        var value = array[index];\n        if (predicate(value, index, array)) {\n          result.push(value);\n          indexes.push(index);\n        }\n      }\n      basePullAt(array, indexes);\n      return result;\n    }\n\n    /**\n     * Reverses `array` so that the first element becomes the last, the second\n     * element becomes the second to last, and so on.\n     *\n     * **Note:** This method mutates `array` and is based on\n     * [`Array#reverse`](https://mdn.io/Array/reverse).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [1, 2, 3];\n     *\n     * _.reverse(array);\n     * // => [3, 2, 1]\n     *\n     * console.log(array);\n     * // => [3, 2, 1]\n     */\n    function reverse(array) {\n      return array == null ? array : nativeReverse.call(array);\n    }\n\n    /**\n     * Creates a slice of `array` from `start` up to, but not including, `end`.\n     *\n     * **Note:** This method is used instead of\n     * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are\n     * returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to slice.\n     * @param {number} [start=0] The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns the slice of `array`.\n     */\n    function slice(array, start, end) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      if (end && typeof end != 'number' && isIterateeCall(array, start, end)) {\n        start = 0;\n        end = length;\n      }\n      else {\n        start = start == null ? 0 : toInteger(start);\n        end = end === undefined ? length : toInteger(end);\n      }\n      return baseSlice(array, start, end);\n    }\n\n    /**\n     * Uses a binary search to determine the lowest index at which `value`\n     * should be inserted into `array` in order to maintain its sort order.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * _.sortedIndex([30, 50], 40);\n     * // => 1\n     */\n    function sortedIndex(array, value) {\n      return baseSortedIndex(array, value);\n    }\n\n    /**\n     * This method is like `_.sortedIndex` except that it accepts `iteratee`\n     * which is invoked for `value` and each element of `array` to compute their\n     * sort ranking. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * var objects = [{ 'x': 4 }, { 'x': 5 }];\n     *\n     * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n     * // => 0\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.sortedIndexBy(objects, { 'x': 4 }, 'x');\n     * // => 0\n     */\n    function sortedIndexBy(array, value, iteratee) {\n      return baseSortedIndexBy(array, value, getIteratee(iteratee, 2));\n    }\n\n    /**\n     * This method is like `_.indexOf` except that it performs a binary\n     * search on a sorted `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     * @example\n     *\n     * _.sortedIndexOf([4, 5, 5, 5, 6], 5);\n     * // => 1\n     */\n    function sortedIndexOf(array, value) {\n      var length = array == null ? 0 : array.length;\n      if (length) {\n        var index = baseSortedIndex(array, value);\n        if (index < length && eq(array[index], value)) {\n          return index;\n        }\n      }\n      return -1;\n    }\n\n    /**\n     * This method is like `_.sortedIndex` except that it returns the highest\n     * index at which `value` should be inserted into `array` in order to\n     * maintain its sort order.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * _.sortedLastIndex([4, 5, 5, 5, 6], 5);\n     * // => 4\n     */\n    function sortedLastIndex(array, value) {\n      return baseSortedIndex(array, value, true);\n    }\n\n    /**\n     * This method is like `_.sortedLastIndex` except that it accepts `iteratee`\n     * which is invoked for `value` and each element of `array` to compute their\n     * sort ranking. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * var objects = [{ 'x': 4 }, { 'x': 5 }];\n     *\n     * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n     * // => 1\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x');\n     * // => 1\n     */\n    function sortedLastIndexBy(array, value, iteratee) {\n      return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true);\n    }\n\n    /**\n     * This method is like `_.lastIndexOf` except that it performs a binary\n     * search on a sorted `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     * @example\n     *\n     * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5);\n     * // => 3\n     */\n    function sortedLastIndexOf(array, value) {\n      var length = array == null ? 0 : array.length;\n      if (length) {\n        var index = baseSortedIndex(array, value, true) - 1;\n        if (eq(array[index], value)) {\n          return index;\n        }\n      }\n      return -1;\n    }\n\n    /**\n     * This method is like `_.uniq` except that it's designed and optimized\n     * for sorted arrays.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * _.sortedUniq([1, 1, 2]);\n     * // => [1, 2]\n     */\n    function sortedUniq(array) {\n      return (array && array.length)\n        ? baseSortedUniq(array)\n        : [];\n    }\n\n    /**\n     * This method is like `_.uniqBy` except that it's designed and optimized\n     * for sorted arrays.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor);\n     * // => [1.1, 2.3]\n     */\n    function sortedUniqBy(array, iteratee) {\n      return (array && array.length)\n        ? baseSortedUniq(array, getIteratee(iteratee, 2))\n        : [];\n    }\n\n    /**\n     * Gets all but the first element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.tail([1, 2, 3]);\n     * // => [2, 3]\n     */\n    function tail(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? baseSlice(array, 1, length) : [];\n    }\n\n    /**\n     * Creates a slice of `array` with `n` elements taken from the beginning.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to take.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.take([1, 2, 3]);\n     * // => [1]\n     *\n     * _.take([1, 2, 3], 2);\n     * // => [1, 2]\n     *\n     * _.take([1, 2, 3], 5);\n     * // => [1, 2, 3]\n     *\n     * _.take([1, 2, 3], 0);\n     * // => []\n     */\n    function take(array, n, guard) {\n      if (!(array && array.length)) {\n        return [];\n      }\n      n = (guard || n === undefined) ? 1 : toInteger(n);\n      return baseSlice(array, 0, n < 0 ? 0 : n);\n    }\n\n    /**\n     * Creates a slice of `array` with `n` elements taken from the end.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to take.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.takeRight([1, 2, 3]);\n     * // => [3]\n     *\n     * _.takeRight([1, 2, 3], 2);\n     * // => [2, 3]\n     *\n     * _.takeRight([1, 2, 3], 5);\n     * // => [1, 2, 3]\n     *\n     * _.takeRight([1, 2, 3], 0);\n     * // => []\n     */\n    function takeRight(array, n, guard) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      n = (guard || n === undefined) ? 1 : toInteger(n);\n      n = length - n;\n      return baseSlice(array, n < 0 ? 0 : n, length);\n    }\n\n    /**\n     * Creates a slice of `array` with elements taken from the end. Elements are\n     * taken until `predicate` returns falsey. The predicate is invoked with\n     * three arguments: (value, index, array).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': true },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': false }\n     * ];\n     *\n     * _.takeRightWhile(users, function(o) { return !o.active; });\n     * // => objects for ['fred', 'pebbles']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false });\n     * // => objects for ['pebbles']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.takeRightWhile(users, ['active', false]);\n     * // => objects for ['fred', 'pebbles']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.takeRightWhile(users, 'active');\n     * // => []\n     */\n    function takeRightWhile(array, predicate) {\n      return (array && array.length)\n        ? baseWhile(array, getIteratee(predicate, 3), false, true)\n        : [];\n    }\n\n    /**\n     * Creates a slice of `array` with elements taken from the beginning. Elements\n     * are taken until `predicate` returns falsey. The predicate is invoked with\n     * three arguments: (value, index, array).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': false },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': true }\n     * ];\n     *\n     * _.takeWhile(users, function(o) { return !o.active; });\n     * // => objects for ['barney', 'fred']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.takeWhile(users, { 'user': 'barney', 'active': false });\n     * // => objects for ['barney']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.takeWhile(users, ['active', false]);\n     * // => objects for ['barney', 'fred']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.takeWhile(users, 'active');\n     * // => []\n     */\n    function takeWhile(array, predicate) {\n      return (array && array.length)\n        ? baseWhile(array, getIteratee(predicate, 3))\n        : [];\n    }\n\n    /**\n     * Creates an array of unique values, in order, from all given arrays using\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @returns {Array} Returns the new array of combined values.\n     * @example\n     *\n     * _.union([2], [1, 2]);\n     * // => [2, 1]\n     */\n    var union = baseRest(function(arrays) {\n      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));\n    });\n\n    /**\n     * This method is like `_.union` except that it accepts `iteratee` which is\n     * invoked for each element of each `arrays` to generate the criterion by\n     * which uniqueness is computed. Result values are chosen from the first\n     * array in which the value occurs. The iteratee is invoked with one argument:\n     * (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new array of combined values.\n     * @example\n     *\n     * _.unionBy([2.1], [1.2, 2.3], Math.floor);\n     * // => [2.1, 1.2]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n     * // => [{ 'x': 1 }, { 'x': 2 }]\n     */\n    var unionBy = baseRest(function(arrays) {\n      var iteratee = last(arrays);\n      if (isArrayLikeObject(iteratee)) {\n        iteratee = undefined;\n      }\n      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2));\n    });\n\n    /**\n     * This method is like `_.union` except that it accepts `comparator` which\n     * is invoked to compare elements of `arrays`. Result values are chosen from\n     * the first array in which the value occurs. The comparator is invoked\n     * with two arguments: (arrVal, othVal).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of combined values.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n     *\n     * _.unionWith(objects, others, _.isEqual);\n     * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n     */\n    var unionWith = baseRest(function(arrays) {\n      var comparator = last(arrays);\n      comparator = typeof comparator == 'function' ? comparator : undefined;\n      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator);\n    });\n\n    /**\n     * Creates a duplicate-free version of an array, using\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons, in which only the first occurrence of each element\n     * is kept. The order of result values is determined by the order they occur\n     * in the array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * _.uniq([2, 1, 2]);\n     * // => [2, 1]\n     */\n    function uniq(array) {\n      return (array && array.length) ? baseUniq(array) : [];\n    }\n\n    /**\n     * This method is like `_.uniq` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the criterion by which\n     * uniqueness is computed. The order of result values is determined by the\n     * order they occur in the array. The iteratee is invoked with one argument:\n     * (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * _.uniqBy([2.1, 1.2, 2.3], Math.floor);\n     * // => [2.1, 1.2]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');\n     * // => [{ 'x': 1 }, { 'x': 2 }]\n     */\n    function uniqBy(array, iteratee) {\n      return (array && array.length) ? baseUniq(array, getIteratee(iteratee, 2)) : [];\n    }\n\n    /**\n     * This method is like `_.uniq` except that it accepts `comparator` which\n     * is invoked to compare elements of `array`. The order of result values is\n     * determined by the order they occur in the array.The comparator is invoked\n     * with two arguments: (arrVal, othVal).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }];\n     *\n     * _.uniqWith(objects, _.isEqual);\n     * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]\n     */\n    function uniqWith(array, comparator) {\n      comparator = typeof comparator == 'function' ? comparator : undefined;\n      return (array && array.length) ? baseUniq(array, undefined, comparator) : [];\n    }\n\n    /**\n     * This method is like `_.zip` except that it accepts an array of grouped\n     * elements and creates an array regrouping the elements to their pre-zip\n     * configuration.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.2.0\n     * @category Array\n     * @param {Array} array The array of grouped elements to process.\n     * @returns {Array} Returns the new array of regrouped elements.\n     * @example\n     *\n     * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]);\n     * // => [['a', 1, true], ['b', 2, false]]\n     *\n     * _.unzip(zipped);\n     * // => [['a', 'b'], [1, 2], [true, false]]\n     */\n    function unzip(array) {\n      if (!(array && array.length)) {\n        return [];\n      }\n      var length = 0;\n      array = arrayFilter(array, function(group) {\n        if (isArrayLikeObject(group)) {\n          length = nativeMax(group.length, length);\n          return true;\n        }\n      });\n      return baseTimes(length, function(index) {\n        return arrayMap(array, baseProperty(index));\n      });\n    }\n\n    /**\n     * This method is like `_.unzip` except that it accepts `iteratee` to specify\n     * how regrouped values should be combined. The iteratee is invoked with the\n     * elements of each group: (...group).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.8.0\n     * @category Array\n     * @param {Array} array The array of grouped elements to process.\n     * @param {Function} [iteratee=_.identity] The function to combine\n     *  regrouped values.\n     * @returns {Array} Returns the new array of regrouped elements.\n     * @example\n     *\n     * var zipped = _.zip([1, 2], [10, 20], [100, 200]);\n     * // => [[1, 10, 100], [2, 20, 200]]\n     *\n     * _.unzipWith(zipped, _.add);\n     * // => [3, 30, 300]\n     */\n    function unzipWith(array, iteratee) {\n      if (!(array && array.length)) {\n        return [];\n      }\n      var result = unzip(array);\n      if (iteratee == null) {\n        return result;\n      }\n      return arrayMap(result, function(group) {\n        return apply(iteratee, undefined, group);\n      });\n    }\n\n    /**\n     * Creates an array excluding all given values using\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons.\n     *\n     * **Note:** Unlike `_.pull`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {...*} [values] The values to exclude.\n     * @returns {Array} Returns the new array of filtered values.\n     * @see _.difference, _.xor\n     * @example\n     *\n     * _.without([2, 1, 2, 3], 1, 2);\n     * // => [3]\n     */\n    var without = baseRest(function(array, values) {\n      return isArrayLikeObject(array)\n        ? baseDifference(array, values)\n        : [];\n    });\n\n    /**\n     * Creates an array of unique values that is the\n     * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference)\n     * of the given arrays. The order of result values is determined by the order\n     * they occur in the arrays.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @returns {Array} Returns the new array of filtered values.\n     * @see _.difference, _.without\n     * @example\n     *\n     * _.xor([2, 1], [2, 3]);\n     * // => [1, 3]\n     */\n    var xor = baseRest(function(arrays) {\n      return baseXor(arrayFilter(arrays, isArrayLikeObject));\n    });\n\n    /**\n     * This method is like `_.xor` except that it accepts `iteratee` which is\n     * invoked for each element of each `arrays` to generate the criterion by\n     * which by which they're compared. The order of result values is determined\n     * by the order they occur in the arrays. The iteratee is invoked with one\n     * argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n     * // => [1.2, 3.4]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n     * // => [{ 'x': 2 }]\n     */\n    var xorBy = baseRest(function(arrays) {\n      var iteratee = last(arrays);\n      if (isArrayLikeObject(iteratee)) {\n        iteratee = undefined;\n      }\n      return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2));\n    });\n\n    /**\n     * This method is like `_.xor` except that it accepts `comparator` which is\n     * invoked to compare elements of `arrays`. The order of result values is\n     * determined by the order they occur in the arrays. The comparator is invoked\n     * with two arguments: (arrVal, othVal).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n     *\n     * _.xorWith(objects, others, _.isEqual);\n     * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n     */\n    var xorWith = baseRest(function(arrays) {\n      var comparator = last(arrays);\n      comparator = typeof comparator == 'function' ? comparator : undefined;\n      return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator);\n    });\n\n    /**\n     * Creates an array of grouped elements, the first of which contains the\n     * first elements of the given arrays, the second of which contains the\n     * second elements of the given arrays, and so on.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to process.\n     * @returns {Array} Returns the new array of grouped elements.\n     * @example\n     *\n     * _.zip(['a', 'b'], [1, 2], [true, false]);\n     * // => [['a', 1, true], ['b', 2, false]]\n     */\n    var zip = baseRest(unzip);\n\n    /**\n     * This method is like `_.fromPairs` except that it accepts two arrays,\n     * one of property identifiers and one of corresponding values.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.4.0\n     * @category Array\n     * @param {Array} [props=[]] The property identifiers.\n     * @param {Array} [values=[]] The property values.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * _.zipObject(['a', 'b'], [1, 2]);\n     * // => { 'a': 1, 'b': 2 }\n     */\n    function zipObject(props, values) {\n      return baseZipObject(props || [], values || [], assignValue);\n    }\n\n    /**\n     * This method is like `_.zipObject` except that it supports property paths.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.1.0\n     * @category Array\n     * @param {Array} [props=[]] The property identifiers.\n     * @param {Array} [values=[]] The property values.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]);\n     * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } }\n     */\n    function zipObjectDeep(props, values) {\n      return baseZipObject(props || [], values || [], baseSet);\n    }\n\n    /**\n     * This method is like `_.zip` except that it accepts `iteratee` to specify\n     * how grouped values should be combined. The iteratee is invoked with the\n     * elements of each group: (...group).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.8.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to process.\n     * @param {Function} [iteratee=_.identity] The function to combine\n     *  grouped values.\n     * @returns {Array} Returns the new array of grouped elements.\n     * @example\n     *\n     * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) {\n     *   return a + b + c;\n     * });\n     * // => [111, 222]\n     */\n    var zipWith = baseRest(function(arrays) {\n      var length = arrays.length,\n          iteratee = length > 1 ? arrays[length - 1] : undefined;\n\n      iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined;\n      return unzipWith(arrays, iteratee);\n    });\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a `lodash` wrapper instance that wraps `value` with explicit method\n     * chain sequences enabled. The result of such sequences must be unwrapped\n     * with `_#value`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.3.0\n     * @category Seq\n     * @param {*} value The value to wrap.\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'age': 36 },\n     *   { 'user': 'fred',    'age': 40 },\n     *   { 'user': 'pebbles', 'age': 1 }\n     * ];\n     *\n     * var youngest = _\n     *   .chain(users)\n     *   .sortBy('age')\n     *   .map(function(o) {\n     *     return o.user + ' is ' + o.age;\n     *   })\n     *   .head()\n     *   .value();\n     * // => 'pebbles is 1'\n     */\n    function chain(value) {\n      var result = lodash(value);\n      result.__chain__ = true;\n      return result;\n    }\n\n    /**\n     * This method invokes `interceptor` and returns `value`. The interceptor\n     * is invoked with one argument; (value). The purpose of this method is to\n     * \"tap into\" a method chain sequence in order to modify intermediate results.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Seq\n     * @param {*} value The value to provide to `interceptor`.\n     * @param {Function} interceptor The function to invoke.\n     * @returns {*} Returns `value`.\n     * @example\n     *\n     * _([1, 2, 3])\n     *  .tap(function(array) {\n     *    // Mutate input array.\n     *    array.pop();\n     *  })\n     *  .reverse()\n     *  .value();\n     * // => [2, 1]\n     */\n    function tap(value, interceptor) {\n      interceptor(value);\n      return value;\n    }\n\n    /**\n     * This method is like `_.tap` except that it returns the result of `interceptor`.\n     * The purpose of this method is to \"pass thru\" values replacing intermediate\n     * results in a method chain sequence.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Seq\n     * @param {*} value The value to provide to `interceptor`.\n     * @param {Function} interceptor The function to invoke.\n     * @returns {*} Returns the result of `interceptor`.\n     * @example\n     *\n     * _('  abc  ')\n     *  .chain()\n     *  .trim()\n     *  .thru(function(value) {\n     *    return [value];\n     *  })\n     *  .value();\n     * // => ['abc']\n     */\n    function thru(value, interceptor) {\n      return interceptor(value);\n    }\n\n    /**\n     * This method is the wrapper version of `_.at`.\n     *\n     * @name at\n     * @memberOf _\n     * @since 1.0.0\n     * @category Seq\n     * @param {...(string|string[])} [paths] The property paths to pick.\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n     *\n     * _(object).at(['a[0].b.c', 'a[1]']).value();\n     * // => [3, 4]\n     */\n    var wrapperAt = flatRest(function(paths) {\n      var length = paths.length,\n          start = length ? paths[0] : 0,\n          value = this.__wrapped__,\n          interceptor = function(object) { return baseAt(object, paths); };\n\n      if (length > 1 || this.__actions__.length ||\n          !(value instanceof LazyWrapper) || !isIndex(start)) {\n        return this.thru(interceptor);\n      }\n      value = value.slice(start, +start + (length ? 1 : 0));\n      value.__actions__.push({\n        'func': thru,\n        'args': [interceptor],\n        'thisArg': undefined\n      });\n      return new LodashWrapper(value, this.__chain__).thru(function(array) {\n        if (length && !array.length) {\n          array.push(undefined);\n        }\n        return array;\n      });\n    });\n\n    /**\n     * Creates a `lodash` wrapper instance with explicit method chain sequences enabled.\n     *\n     * @name chain\n     * @memberOf _\n     * @since 0.1.0\n     * @category Seq\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36 },\n     *   { 'user': 'fred',   'age': 40 }\n     * ];\n     *\n     * // A sequence without explicit chaining.\n     * _(users).head();\n     * // => { 'user': 'barney', 'age': 36 }\n     *\n     * // A sequence with explicit chaining.\n     * _(users)\n     *   .chain()\n     *   .head()\n     *   .pick('user')\n     *   .value();\n     * // => { 'user': 'barney' }\n     */\n    function wrapperChain() {\n      return chain(this);\n    }\n\n    /**\n     * Executes the chain sequence and returns the wrapped result.\n     *\n     * @name commit\n     * @memberOf _\n     * @since 3.2.0\n     * @category Seq\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var array = [1, 2];\n     * var wrapped = _(array).push(3);\n     *\n     * console.log(array);\n     * // => [1, 2]\n     *\n     * wrapped = wrapped.commit();\n     * console.log(array);\n     * // => [1, 2, 3]\n     *\n     * wrapped.last();\n     * // => 3\n     *\n     * console.log(array);\n     * // => [1, 2, 3]\n     */\n    function wrapperCommit() {\n      return new LodashWrapper(this.value(), this.__chain__);\n    }\n\n    /**\n     * Gets the next value on a wrapped object following the\n     * [iterator protocol](https://mdn.io/iteration_protocols#iterator).\n     *\n     * @name next\n     * @memberOf _\n     * @since 4.0.0\n     * @category Seq\n     * @returns {Object} Returns the next iterator value.\n     * @example\n     *\n     * var wrapped = _([1, 2]);\n     *\n     * wrapped.next();\n     * // => { 'done': false, 'value': 1 }\n     *\n     * wrapped.next();\n     * // => { 'done': false, 'value': 2 }\n     *\n     * wrapped.next();\n     * // => { 'done': true, 'value': undefined }\n     */\n    function wrapperNext() {\n      if (this.__values__ === undefined) {\n        this.__values__ = toArray(this.value());\n      }\n      var done = this.__index__ >= this.__values__.length,\n          value = done ? undefined : this.__values__[this.__index__++];\n\n      return { 'done': done, 'value': value };\n    }\n\n    /**\n     * Enables the wrapper to be iterable.\n     *\n     * @name Symbol.iterator\n     * @memberOf _\n     * @since 4.0.0\n     * @category Seq\n     * @returns {Object} Returns the wrapper object.\n     * @example\n     *\n     * var wrapped = _([1, 2]);\n     *\n     * wrapped[Symbol.iterator]() === wrapped;\n     * // => true\n     *\n     * Array.from(wrapped);\n     * // => [1, 2]\n     */\n    function wrapperToIterator() {\n      return this;\n    }\n\n    /**\n     * Creates a clone of the chain sequence planting `value` as the wrapped value.\n     *\n     * @name plant\n     * @memberOf _\n     * @since 3.2.0\n     * @category Seq\n     * @param {*} value The value to plant.\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var wrapped = _([1, 2]).map(square);\n     * var other = wrapped.plant([3, 4]);\n     *\n     * other.value();\n     * // => [9, 16]\n     *\n     * wrapped.value();\n     * // => [1, 4]\n     */\n    function wrapperPlant(value) {\n      var result,\n          parent = this;\n\n      while (parent instanceof baseLodash) {\n        var clone = wrapperClone(parent);\n        clone.__index__ = 0;\n        clone.__values__ = undefined;\n        if (result) {\n          previous.__wrapped__ = clone;\n        } else {\n          result = clone;\n        }\n        var previous = clone;\n        parent = parent.__wrapped__;\n      }\n      previous.__wrapped__ = value;\n      return result;\n    }\n\n    /**\n     * This method is the wrapper version of `_.reverse`.\n     *\n     * **Note:** This method mutates the wrapped array.\n     *\n     * @name reverse\n     * @memberOf _\n     * @since 0.1.0\n     * @category Seq\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var array = [1, 2, 3];\n     *\n     * _(array).reverse().value()\n     * // => [3, 2, 1]\n     *\n     * console.log(array);\n     * // => [3, 2, 1]\n     */\n    function wrapperReverse() {\n      var value = this.__wrapped__;\n      if (value instanceof LazyWrapper) {\n        var wrapped = value;\n        if (this.__actions__.length) {\n          wrapped = new LazyWrapper(this);\n        }\n        wrapped = wrapped.reverse();\n        wrapped.__actions__.push({\n          'func': thru,\n          'args': [reverse],\n          'thisArg': undefined\n        });\n        return new LodashWrapper(wrapped, this.__chain__);\n      }\n      return this.thru(reverse);\n    }\n\n    /**\n     * Executes the chain sequence to resolve the unwrapped value.\n     *\n     * @name value\n     * @memberOf _\n     * @since 0.1.0\n     * @alias toJSON, valueOf\n     * @category Seq\n     * @returns {*} Returns the resolved unwrapped value.\n     * @example\n     *\n     * _([1, 2, 3]).value();\n     * // => [1, 2, 3]\n     */\n    function wrapperValue() {\n      return baseWrapperValue(this.__wrapped__, this.__actions__);\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates an object composed of keys generated from the results of running\n     * each element of `collection` thru `iteratee`. The corresponding value of\n     * each key is the number of times the key was returned by `iteratee`. The\n     * iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.5.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n     * @returns {Object} Returns the composed aggregate object.\n     * @example\n     *\n     * _.countBy([6.1, 4.2, 6.3], Math.floor);\n     * // => { '4': 1, '6': 2 }\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.countBy(['one', 'two', 'three'], 'length');\n     * // => { '3': 2, '5': 1 }\n     */\n    var countBy = createAggregator(function(result, value, key) {\n      if (hasOwnProperty.call(result, key)) {\n        ++result[key];\n      } else {\n        baseAssignValue(result, key, 1);\n      }\n    });\n\n    /**\n     * Checks if `predicate` returns truthy for **all** elements of `collection`.\n     * Iteration is stopped once `predicate` returns falsey. The predicate is\n     * invoked with three arguments: (value, index|key, collection).\n     *\n     * **Note:** This method returns `true` for\n     * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because\n     * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of\n     * elements of empty collections.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {boolean} Returns `true` if all elements pass the predicate check,\n     *  else `false`.\n     * @example\n     *\n     * _.every([true, 1, null, 'yes'], Boolean);\n     * // => false\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': false },\n     *   { 'user': 'fred',   'age': 40, 'active': false }\n     * ];\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.every(users, { 'user': 'barney', 'active': false });\n     * // => false\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.every(users, ['active', false]);\n     * // => true\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.every(users, 'active');\n     * // => false\n     */\n    function every(collection, predicate, guard) {\n      var func = isArray(collection) ? arrayEvery : baseEvery;\n      if (guard && isIterateeCall(collection, predicate, guard)) {\n        predicate = undefined;\n      }\n      return func(collection, getIteratee(predicate, 3));\n    }\n\n    /**\n     * Iterates over elements of `collection`, returning an array of all elements\n     * `predicate` returns truthy for. The predicate is invoked with three\n     * arguments: (value, index|key, collection).\n     *\n     * **Note:** Unlike `_.remove`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new filtered array.\n     * @see _.reject\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': true },\n     *   { 'user': 'fred',   'age': 40, 'active': false }\n     * ];\n     *\n     * _.filter(users, function(o) { return !o.active; });\n     * // => objects for ['fred']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.filter(users, { 'age': 36, 'active': true });\n     * // => objects for ['barney']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.filter(users, ['active', false]);\n     * // => objects for ['fred']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.filter(users, 'active');\n     * // => objects for ['barney']\n     *\n     * // Combining several predicates using `_.overEvery` or `_.overSome`.\n     * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]]));\n     * // => objects for ['fred', 'barney']\n     */\n    function filter(collection, predicate) {\n      var func = isArray(collection) ? arrayFilter : baseFilter;\n      return func(collection, getIteratee(predicate, 3));\n    }\n\n    /**\n     * Iterates over elements of `collection`, returning the first element\n     * `predicate` returns truthy for. The predicate is invoked with three\n     * arguments: (value, index|key, collection).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param {number} [fromIndex=0] The index to search from.\n     * @returns {*} Returns the matched element, else `undefined`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'age': 36, 'active': true },\n     *   { 'user': 'fred',    'age': 40, 'active': false },\n     *   { 'user': 'pebbles', 'age': 1,  'active': true }\n     * ];\n     *\n     * _.find(users, function(o) { return o.age < 40; });\n     * // => object for 'barney'\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.find(users, { 'age': 1, 'active': true });\n     * // => object for 'pebbles'\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.find(users, ['active', false]);\n     * // => object for 'fred'\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.find(users, 'active');\n     * // => object for 'barney'\n     */\n    var find = createFind(findIndex);\n\n    /**\n     * This method is like `_.find` except that it iterates over elements of\n     * `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param {number} [fromIndex=collection.length-1] The index to search from.\n     * @returns {*} Returns the matched element, else `undefined`.\n     * @example\n     *\n     * _.findLast([1, 2, 3, 4], function(n) {\n     *   return n % 2 == 1;\n     * });\n     * // => 3\n     */\n    var findLast = createFind(findLastIndex);\n\n    /**\n     * Creates a flattened array of values by running each element in `collection`\n     * thru `iteratee` and flattening the mapped results. The iteratee is invoked\n     * with three arguments: (value, index|key, collection).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * function duplicate(n) {\n     *   return [n, n];\n     * }\n     *\n     * _.flatMap([1, 2], duplicate);\n     * // => [1, 1, 2, 2]\n     */\n    function flatMap(collection, iteratee) {\n      return baseFlatten(map(collection, iteratee), 1);\n    }\n\n    /**\n     * This method is like `_.flatMap` except that it recursively flattens the\n     * mapped results.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * function duplicate(n) {\n     *   return [[[n, n]]];\n     * }\n     *\n     * _.flatMapDeep([1, 2], duplicate);\n     * // => [1, 1, 2, 2]\n     */\n    function flatMapDeep(collection, iteratee) {\n      return baseFlatten(map(collection, iteratee), INFINITY);\n    }\n\n    /**\n     * This method is like `_.flatMap` except that it recursively flattens the\n     * mapped results up to `depth` times.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {number} [depth=1] The maximum recursion depth.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * function duplicate(n) {\n     *   return [[[n, n]]];\n     * }\n     *\n     * _.flatMapDepth([1, 2], duplicate, 2);\n     * // => [[1, 1], [2, 2]]\n     */\n    function flatMapDepth(collection, iteratee, depth) {\n      depth = depth === undefined ? 1 : toInteger(depth);\n      return baseFlatten(map(collection, iteratee), depth);\n    }\n\n    /**\n     * Iterates over elements of `collection` and invokes `iteratee` for each element.\n     * The iteratee is invoked with three arguments: (value, index|key, collection).\n     * Iteratee functions may exit iteration early by explicitly returning `false`.\n     *\n     * **Note:** As with other \"Collections\" methods, objects with a \"length\"\n     * property are iterated like arrays. To avoid this behavior use `_.forIn`\n     * or `_.forOwn` for object iteration.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @alias each\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array|Object} Returns `collection`.\n     * @see _.forEachRight\n     * @example\n     *\n     * _.forEach([1, 2], function(value) {\n     *   console.log(value);\n     * });\n     * // => Logs `1` then `2`.\n     *\n     * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n     */\n    function forEach(collection, iteratee) {\n      var func = isArray(collection) ? arrayEach : baseEach;\n      return func(collection, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * This method is like `_.forEach` except that it iterates over elements of\n     * `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @alias eachRight\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array|Object} Returns `collection`.\n     * @see _.forEach\n     * @example\n     *\n     * _.forEachRight([1, 2], function(value) {\n     *   console.log(value);\n     * });\n     * // => Logs `2` then `1`.\n     */\n    function forEachRight(collection, iteratee) {\n      var func = isArray(collection) ? arrayEachRight : baseEachRight;\n      return func(collection, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * Creates an object composed of keys generated from the results of running\n     * each element of `collection` thru `iteratee`. The order of grouped values\n     * is determined by the order they occur in `collection`. The corresponding\n     * value of each key is an array of elements responsible for generating the\n     * key. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n     * @returns {Object} Returns the composed aggregate object.\n     * @example\n     *\n     * _.groupBy([6.1, 4.2, 6.3], Math.floor);\n     * // => { '4': [4.2], '6': [6.1, 6.3] }\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.groupBy(['one', 'two', 'three'], 'length');\n     * // => { '3': ['one', 'two'], '5': ['three'] }\n     */\n    var groupBy = createAggregator(function(result, value, key) {\n      if (hasOwnProperty.call(result, key)) {\n        result[key].push(value);\n      } else {\n        baseAssignValue(result, key, [value]);\n      }\n    });\n\n    /**\n     * Checks if `value` is in `collection`. If `collection` is a string, it's\n     * checked for a substring of `value`, otherwise\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * is used for equality comparisons. If `fromIndex` is negative, it's used as\n     * the offset from the end of `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object|string} collection The collection to inspect.\n     * @param {*} value The value to search for.\n     * @param {number} [fromIndex=0] The index to search from.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n     * @returns {boolean} Returns `true` if `value` is found, else `false`.\n     * @example\n     *\n     * _.includes([1, 2, 3], 1);\n     * // => true\n     *\n     * _.includes([1, 2, 3], 1, 2);\n     * // => false\n     *\n     * _.includes({ 'a': 1, 'b': 2 }, 1);\n     * // => true\n     *\n     * _.includes('abcd', 'bc');\n     * // => true\n     */\n    function includes(collection, value, fromIndex, guard) {\n      collection = isArrayLike(collection) ? collection : values(collection);\n      fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0;\n\n      var length = collection.length;\n      if (fromIndex < 0) {\n        fromIndex = nativeMax(length + fromIndex, 0);\n      }\n      return isString(collection)\n        ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1)\n        : (!!length && baseIndexOf(collection, value, fromIndex) > -1);\n    }\n\n    /**\n     * Invokes the method at `path` of each element in `collection`, returning\n     * an array of the results of each invoked method. Any additional arguments\n     * are provided to each invoked method. If `path` is a function, it's invoked\n     * for, and `this` bound to, each element in `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Array|Function|string} path The path of the method to invoke or\n     *  the function invoked per iteration.\n     * @param {...*} [args] The arguments to invoke each method with.\n     * @returns {Array} Returns the array of results.\n     * @example\n     *\n     * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort');\n     * // => [[1, 5, 7], [1, 2, 3]]\n     *\n     * _.invokeMap([123, 456], String.prototype.split, '');\n     * // => [['1', '2', '3'], ['4', '5', '6']]\n     */\n    var invokeMap = baseRest(function(collection, path, args) {\n      var index = -1,\n          isFunc = typeof path == 'function',\n          result = isArrayLike(collection) ? Array(collection.length) : [];\n\n      baseEach(collection, function(value) {\n        result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args);\n      });\n      return result;\n    });\n\n    /**\n     * Creates an object composed of keys generated from the results of running\n     * each element of `collection` thru `iteratee`. The corresponding value of\n     * each key is the last element responsible for generating the key. The\n     * iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n     * @returns {Object} Returns the composed aggregate object.\n     * @example\n     *\n     * var array = [\n     *   { 'dir': 'left', 'code': 97 },\n     *   { 'dir': 'right', 'code': 100 }\n     * ];\n     *\n     * _.keyBy(array, function(o) {\n     *   return String.fromCharCode(o.code);\n     * });\n     * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }\n     *\n     * _.keyBy(array, 'dir');\n     * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }\n     */\n    var keyBy = createAggregator(function(result, value, key) {\n      baseAssignValue(result, key, value);\n    });\n\n    /**\n     * Creates an array of values by running each element in `collection` thru\n     * `iteratee`. The iteratee is invoked with three arguments:\n     * (value, index|key, collection).\n     *\n     * Many lodash methods are guarded to work as iteratees for methods like\n     * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.\n     *\n     * The guarded methods are:\n     * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,\n     * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,\n     * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,\n     * `template`, `trim`, `trimEnd`, `trimStart`, and `words`\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new mapped array.\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * _.map([4, 8], square);\n     * // => [16, 64]\n     *\n     * _.map({ 'a': 4, 'b': 8 }, square);\n     * // => [16, 64] (iteration order is not guaranteed)\n     *\n     * var users = [\n     *   { 'user': 'barney' },\n     *   { 'user': 'fred' }\n     * ];\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.map(users, 'user');\n     * // => ['barney', 'fred']\n     */\n    function map(collection, iteratee) {\n      var func = isArray(collection) ? arrayMap : baseMap;\n      return func(collection, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * This method is like `_.sortBy` except that it allows specifying the sort\n     * orders of the iteratees to sort by. If `orders` is unspecified, all values\n     * are sorted in ascending order. Otherwise, specify an order of \"desc\" for\n     * descending or \"asc\" for ascending sort order of corresponding values.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]]\n     *  The iteratees to sort by.\n     * @param {string[]} [orders] The sort orders of `iteratees`.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n     * @returns {Array} Returns the new sorted array.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'fred',   'age': 48 },\n     *   { 'user': 'barney', 'age': 34 },\n     *   { 'user': 'fred',   'age': 40 },\n     *   { 'user': 'barney', 'age': 36 }\n     * ];\n     *\n     * // Sort by `user` in ascending order and by `age` in descending order.\n     * _.orderBy(users, ['user', 'age'], ['asc', 'desc']);\n     * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]\n     */\n    function orderBy(collection, iteratees, orders, guard) {\n      if (collection == null) {\n        return [];\n      }\n      if (!isArray(iteratees)) {\n        iteratees = iteratees == null ? [] : [iteratees];\n      }\n      orders = guard ? undefined : orders;\n      if (!isArray(orders)) {\n        orders = orders == null ? [] : [orders];\n      }\n      return baseOrderBy(collection, iteratees, orders);\n    }\n\n    /**\n     * Creates an array of elements split into two groups, the first of which\n     * contains elements `predicate` returns truthy for, the second of which\n     * contains elements `predicate` returns falsey for. The predicate is\n     * invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the array of grouped elements.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'age': 36, 'active': false },\n     *   { 'user': 'fred',    'age': 40, 'active': true },\n     *   { 'user': 'pebbles', 'age': 1,  'active': false }\n     * ];\n     *\n     * _.partition(users, function(o) { return o.active; });\n     * // => objects for [['fred'], ['barney', 'pebbles']]\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.partition(users, { 'age': 1, 'active': false });\n     * // => objects for [['pebbles'], ['barney', 'fred']]\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.partition(users, ['active', false]);\n     * // => objects for [['barney', 'pebbles'], ['fred']]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.partition(users, 'active');\n     * // => objects for [['fred'], ['barney', 'pebbles']]\n     */\n    var partition = createAggregator(function(result, value, key) {\n      result[key ? 0 : 1].push(value);\n    }, function() { return [[], []]; });\n\n    /**\n     * Reduces `collection` to a value which is the accumulated result of running\n     * each element in `collection` thru `iteratee`, where each successive\n     * invocation is supplied the return value of the previous. If `accumulator`\n     * is not given, the first element of `collection` is used as the initial\n     * value. The iteratee is invoked with four arguments:\n     * (accumulator, value, index|key, collection).\n     *\n     * Many lodash methods are guarded to work as iteratees for methods like\n     * `_.reduce`, `_.reduceRight`, and `_.transform`.\n     *\n     * The guarded methods are:\n     * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,\n     * and `sortBy`\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {*} [accumulator] The initial value.\n     * @returns {*} Returns the accumulated value.\n     * @see _.reduceRight\n     * @example\n     *\n     * _.reduce([1, 2], function(sum, n) {\n     *   return sum + n;\n     * }, 0);\n     * // => 3\n     *\n     * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n     *   (result[value] || (result[value] = [])).push(key);\n     *   return result;\n     * }, {});\n     * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)\n     */\n    function reduce(collection, iteratee, accumulator) {\n      var func = isArray(collection) ? arrayReduce : baseReduce,\n          initAccum = arguments.length < 3;\n\n      return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach);\n    }\n\n    /**\n     * This method is like `_.reduce` except that it iterates over elements of\n     * `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {*} [accumulator] The initial value.\n     * @returns {*} Returns the accumulated value.\n     * @see _.reduce\n     * @example\n     *\n     * var array = [[0, 1], [2, 3], [4, 5]];\n     *\n     * _.reduceRight(array, function(flattened, other) {\n     *   return flattened.concat(other);\n     * }, []);\n     * // => [4, 5, 2, 3, 0, 1]\n     */\n    function reduceRight(collection, iteratee, accumulator) {\n      var func = isArray(collection) ? arrayReduceRight : baseReduce,\n          initAccum = arguments.length < 3;\n\n      return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight);\n    }\n\n    /**\n     * The opposite of `_.filter`; this method returns the elements of `collection`\n     * that `predicate` does **not** return truthy for.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new filtered array.\n     * @see _.filter\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': false },\n     *   { 'user': 'fred',   'age': 40, 'active': true }\n     * ];\n     *\n     * _.reject(users, function(o) { return !o.active; });\n     * // => objects for ['fred']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.reject(users, { 'age': 40, 'active': true });\n     * // => objects for ['barney']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.reject(users, ['active', false]);\n     * // => objects for ['fred']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.reject(users, 'active');\n     * // => objects for ['barney']\n     */\n    function reject(collection, predicate) {\n      var func = isArray(collection) ? arrayFilter : baseFilter;\n      return func(collection, negate(getIteratee(predicate, 3)));\n    }\n\n    /**\n     * Gets a random element from `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to sample.\n     * @returns {*} Returns the random element.\n     * @example\n     *\n     * _.sample([1, 2, 3, 4]);\n     * // => 2\n     */\n    function sample(collection) {\n      var func = isArray(collection) ? arraySample : baseSample;\n      return func(collection);\n    }\n\n    /**\n     * Gets `n` random elements at unique keys from `collection` up to the\n     * size of `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to sample.\n     * @param {number} [n=1] The number of elements to sample.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the random elements.\n     * @example\n     *\n     * _.sampleSize([1, 2, 3], 2);\n     * // => [3, 1]\n     *\n     * _.sampleSize([1, 2, 3], 4);\n     * // => [2, 3, 1]\n     */\n    function sampleSize(collection, n, guard) {\n      if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) {\n        n = 1;\n      } else {\n        n = toInteger(n);\n      }\n      var func = isArray(collection) ? arraySampleSize : baseSampleSize;\n      return func(collection, n);\n    }\n\n    /**\n     * Creates an array of shuffled values, using a version of the\n     * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to shuffle.\n     * @returns {Array} Returns the new shuffled array.\n     * @example\n     *\n     * _.shuffle([1, 2, 3, 4]);\n     * // => [4, 1, 3, 2]\n     */\n    function shuffle(collection) {\n      var func = isArray(collection) ? arrayShuffle : baseShuffle;\n      return func(collection);\n    }\n\n    /**\n     * Gets the size of `collection` by returning its length for array-like\n     * values or the number of own enumerable string keyed properties for objects.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object|string} collection The collection to inspect.\n     * @returns {number} Returns the collection size.\n     * @example\n     *\n     * _.size([1, 2, 3]);\n     * // => 3\n     *\n     * _.size({ 'a': 1, 'b': 2 });\n     * // => 2\n     *\n     * _.size('pebbles');\n     * // => 7\n     */\n    function size(collection) {\n      if (collection == null) {\n        return 0;\n      }\n      if (isArrayLike(collection)) {\n        return isString(collection) ? stringSize(collection) : collection.length;\n      }\n      var tag = getTag(collection);\n      if (tag == mapTag || tag == setTag) {\n        return collection.size;\n      }\n      return baseKeys(collection).length;\n    }\n\n    /**\n     * Checks if `predicate` returns truthy for **any** element of `collection`.\n     * Iteration is stopped once `predicate` returns truthy. The predicate is\n     * invoked with three arguments: (value, index|key, collection).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {boolean} Returns `true` if any element passes the predicate check,\n     *  else `false`.\n     * @example\n     *\n     * _.some([null, 0, 'yes', false], Boolean);\n     * // => true\n     *\n     * var users = [\n     *   { 'user': 'barney', 'active': true },\n     *   { 'user': 'fred',   'active': false }\n     * ];\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.some(users, { 'user': 'barney', 'active': false });\n     * // => false\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.some(users, ['active', false]);\n     * // => true\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.some(users, 'active');\n     * // => true\n     */\n    function some(collection, predicate, guard) {\n      var func = isArray(collection) ? arraySome : baseSome;\n      if (guard && isIterateeCall(collection, predicate, guard)) {\n        predicate = undefined;\n      }\n      return func(collection, getIteratee(predicate, 3));\n    }\n\n    /**\n     * Creates an array of elements, sorted in ascending order by the results of\n     * running each element in a collection thru each iteratee. This method\n     * performs a stable sort, that is, it preserves the original sort order of\n     * equal elements. The iteratees are invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {...(Function|Function[])} [iteratees=[_.identity]]\n     *  The iteratees to sort by.\n     * @returns {Array} Returns the new sorted array.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'fred',   'age': 48 },\n     *   { 'user': 'barney', 'age': 36 },\n     *   { 'user': 'fred',   'age': 30 },\n     *   { 'user': 'barney', 'age': 34 }\n     * ];\n     *\n     * _.sortBy(users, [function(o) { return o.user; }]);\n     * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]]\n     *\n     * _.sortBy(users, ['user', 'age']);\n     * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]]\n     */\n    var sortBy = baseRest(function(collection, iteratees) {\n      if (collection == null) {\n        return [];\n      }\n      var length = iteratees.length;\n      if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {\n        iteratees = [];\n      } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {\n        iteratees = [iteratees[0]];\n      }\n      return baseOrderBy(collection, baseFlatten(iteratees, 1), []);\n    });\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Gets the timestamp of the number of milliseconds that have elapsed since\n     * the Unix epoch (1 January 1970 00:00:00 UTC).\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Date\n     * @returns {number} Returns the timestamp.\n     * @example\n     *\n     * _.defer(function(stamp) {\n     *   console.log(_.now() - stamp);\n     * }, _.now());\n     * // => Logs the number of milliseconds it took for the deferred invocation.\n     */\n    var now = ctxNow || function() {\n      return root.Date.now();\n    };\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * The opposite of `_.before`; this method creates a function that invokes\n     * `func` once it's called `n` or more times.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {number} n The number of calls before `func` is invoked.\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new restricted function.\n     * @example\n     *\n     * var saves = ['profile', 'settings'];\n     *\n     * var done = _.after(saves.length, function() {\n     *   console.log('done saving!');\n     * });\n     *\n     * _.forEach(saves, function(type) {\n     *   asyncSave({ 'type': type, 'complete': done });\n     * });\n     * // => Logs 'done saving!' after the two async saves have completed.\n     */\n    function after(n, func) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      n = toInteger(n);\n      return function() {\n        if (--n < 1) {\n          return func.apply(this, arguments);\n        }\n      };\n    }\n\n    /**\n     * Creates a function that invokes `func`, with up to `n` arguments,\n     * ignoring any additional arguments.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {Function} func The function to cap arguments for.\n     * @param {number} [n=func.length] The arity cap.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Function} Returns the new capped function.\n     * @example\n     *\n     * _.map(['6', '8', '10'], _.ary(parseInt, 1));\n     * // => [6, 8, 10]\n     */\n    function ary(func, n, guard) {\n      n = guard ? undefined : n;\n      n = (func && n == null) ? func.length : n;\n      return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n);\n    }\n\n    /**\n     * Creates a function that invokes `func`, with the `this` binding and arguments\n     * of the created function, while it's called less than `n` times. Subsequent\n     * calls to the created function return the result of the last `func` invocation.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {number} n The number of calls at which `func` is no longer invoked.\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new restricted function.\n     * @example\n     *\n     * jQuery(element).on('click', _.before(5, addContactToList));\n     * // => Allows adding up to 4 contacts to the list.\n     */\n    function before(n, func) {\n      var result;\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      n = toInteger(n);\n      return function() {\n        if (--n > 0) {\n          result = func.apply(this, arguments);\n        }\n        if (n <= 1) {\n          func = undefined;\n        }\n        return result;\n      };\n    }\n\n    /**\n     * Creates a function that invokes `func` with the `this` binding of `thisArg`\n     * and `partials` prepended to the arguments it receives.\n     *\n     * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds,\n     * may be used as a placeholder for partially applied arguments.\n     *\n     * **Note:** Unlike native `Function#bind`, this method doesn't set the \"length\"\n     * property of bound functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to bind.\n     * @param {*} thisArg The `this` binding of `func`.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new bound function.\n     * @example\n     *\n     * function greet(greeting, punctuation) {\n     *   return greeting + ' ' + this.user + punctuation;\n     * }\n     *\n     * var object = { 'user': 'fred' };\n     *\n     * var bound = _.bind(greet, object, 'hi');\n     * bound('!');\n     * // => 'hi fred!'\n     *\n     * // Bound with placeholders.\n     * var bound = _.bind(greet, object, _, '!');\n     * bound('hi');\n     * // => 'hi fred!'\n     */\n    var bind = baseRest(function(func, thisArg, partials) {\n      var bitmask = WRAP_BIND_FLAG;\n      if (partials.length) {\n        var holders = replaceHolders(partials, getHolder(bind));\n        bitmask |= WRAP_PARTIAL_FLAG;\n      }\n      return createWrap(func, bitmask, thisArg, partials, holders);\n    });\n\n    /**\n     * Creates a function that invokes the method at `object[key]` with `partials`\n     * prepended to the arguments it receives.\n     *\n     * This method differs from `_.bind` by allowing bound functions to reference\n     * methods that may be redefined or don't yet exist. See\n     * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern)\n     * for more details.\n     *\n     * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic\n     * builds, may be used as a placeholder for partially applied arguments.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.10.0\n     * @category Function\n     * @param {Object} object The object to invoke the method on.\n     * @param {string} key The key of the method.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new bound function.\n     * @example\n     *\n     * var object = {\n     *   'user': 'fred',\n     *   'greet': function(greeting, punctuation) {\n     *     return greeting + ' ' + this.user + punctuation;\n     *   }\n     * };\n     *\n     * var bound = _.bindKey(object, 'greet', 'hi');\n     * bound('!');\n     * // => 'hi fred!'\n     *\n     * object.greet = function(greeting, punctuation) {\n     *   return greeting + 'ya ' + this.user + punctuation;\n     * };\n     *\n     * bound('!');\n     * // => 'hiya fred!'\n     *\n     * // Bound with placeholders.\n     * var bound = _.bindKey(object, 'greet', _, '!');\n     * bound('hi');\n     * // => 'hiya fred!'\n     */\n    var bindKey = baseRest(function(object, key, partials) {\n      var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG;\n      if (partials.length) {\n        var holders = replaceHolders(partials, getHolder(bindKey));\n        bitmask |= WRAP_PARTIAL_FLAG;\n      }\n      return createWrap(key, bitmask, object, partials, holders);\n    });\n\n    /**\n     * Creates a function that accepts arguments of `func` and either invokes\n     * `func` returning its result, if at least `arity` number of arguments have\n     * been provided, or returns a function that accepts the remaining `func`\n     * arguments, and so on. The arity of `func` may be specified if `func.length`\n     * is not sufficient.\n     *\n     * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds,\n     * may be used as a placeholder for provided arguments.\n     *\n     * **Note:** This method doesn't set the \"length\" property of curried functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Function\n     * @param {Function} func The function to curry.\n     * @param {number} [arity=func.length] The arity of `func`.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Function} Returns the new curried function.\n     * @example\n     *\n     * var abc = function(a, b, c) {\n     *   return [a, b, c];\n     * };\n     *\n     * var curried = _.curry(abc);\n     *\n     * curried(1)(2)(3);\n     * // => [1, 2, 3]\n     *\n     * curried(1, 2)(3);\n     * // => [1, 2, 3]\n     *\n     * curried(1, 2, 3);\n     * // => [1, 2, 3]\n     *\n     * // Curried with placeholders.\n     * curried(1)(_, 3)(2);\n     * // => [1, 2, 3]\n     */\n    function curry(func, arity, guard) {\n      arity = guard ? undefined : arity;\n      var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n      result.placeholder = curry.placeholder;\n      return result;\n    }\n\n    /**\n     * This method is like `_.curry` except that arguments are applied to `func`\n     * in the manner of `_.partialRight` instead of `_.partial`.\n     *\n     * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic\n     * builds, may be used as a placeholder for provided arguments.\n     *\n     * **Note:** This method doesn't set the \"length\" property of curried functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {Function} func The function to curry.\n     * @param {number} [arity=func.length] The arity of `func`.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Function} Returns the new curried function.\n     * @example\n     *\n     * var abc = function(a, b, c) {\n     *   return [a, b, c];\n     * };\n     *\n     * var curried = _.curryRight(abc);\n     *\n     * curried(3)(2)(1);\n     * // => [1, 2, 3]\n     *\n     * curried(2, 3)(1);\n     * // => [1, 2, 3]\n     *\n     * curried(1, 2, 3);\n     * // => [1, 2, 3]\n     *\n     * // Curried with placeholders.\n     * curried(3)(1, _)(2);\n     * // => [1, 2, 3]\n     */\n    function curryRight(func, arity, guard) {\n      arity = guard ? undefined : arity;\n      var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n      result.placeholder = curryRight.placeholder;\n      return result;\n    }\n\n    /**\n     * Creates a debounced function that delays invoking `func` until after `wait`\n     * milliseconds have elapsed since the last time the debounced function was\n     * invoked. The debounced function comes with a `cancel` method to cancel\n     * delayed `func` invocations and a `flush` method to immediately invoke them.\n     * Provide `options` to indicate whether `func` should be invoked on the\n     * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n     * with the last arguments provided to the debounced function. Subsequent\n     * calls to the debounced function return the result of the last `func`\n     * invocation.\n     *\n     * **Note:** If `leading` and `trailing` options are `true`, `func` is\n     * invoked on the trailing edge of the timeout only if the debounced function\n     * is invoked more than once during the `wait` timeout.\n     *\n     * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n     * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n     *\n     * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n     * for details over the differences between `_.debounce` and `_.throttle`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to debounce.\n     * @param {number} [wait=0] The number of milliseconds to delay.\n     * @param {Object} [options={}] The options object.\n     * @param {boolean} [options.leading=false]\n     *  Specify invoking on the leading edge of the timeout.\n     * @param {number} [options.maxWait]\n     *  The maximum time `func` is allowed to be delayed before it's invoked.\n     * @param {boolean} [options.trailing=true]\n     *  Specify invoking on the trailing edge of the timeout.\n     * @returns {Function} Returns the new debounced function.\n     * @example\n     *\n     * // Avoid costly calculations while the window size is in flux.\n     * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n     *\n     * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n     * jQuery(element).on('click', _.debounce(sendMail, 300, {\n     *   'leading': true,\n     *   'trailing': false\n     * }));\n     *\n     * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n     * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n     * var source = new EventSource('/stream');\n     * jQuery(source).on('message', debounced);\n     *\n     * // Cancel the trailing debounced invocation.\n     * jQuery(window).on('popstate', debounced.cancel);\n     */\n    function debounce(func, wait, options) {\n      var lastArgs,\n          lastThis,\n          maxWait,\n          result,\n          timerId,\n          lastCallTime,\n          lastInvokeTime = 0,\n          leading = false,\n          maxing = false,\n          trailing = true;\n\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      wait = toNumber(wait) || 0;\n      if (isObject(options)) {\n        leading = !!options.leading;\n        maxing = 'maxWait' in options;\n        maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n        trailing = 'trailing' in options ? !!options.trailing : trailing;\n      }\n\n      function invokeFunc(time) {\n        var args = lastArgs,\n            thisArg = lastThis;\n\n        lastArgs = lastThis = undefined;\n        lastInvokeTime = time;\n        result = func.apply(thisArg, args);\n        return result;\n      }\n\n      function leadingEdge(time) {\n        // Reset any `maxWait` timer.\n        lastInvokeTime = time;\n        // Start the timer for the trailing edge.\n        timerId = setTimeout(timerExpired, wait);\n        // Invoke the leading edge.\n        return leading ? invokeFunc(time) : result;\n      }\n\n      function remainingWait(time) {\n        var timeSinceLastCall = time - lastCallTime,\n            timeSinceLastInvoke = time - lastInvokeTime,\n            timeWaiting = wait - timeSinceLastCall;\n\n        return maxing\n          ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n          : timeWaiting;\n      }\n\n      function shouldInvoke(time) {\n        var timeSinceLastCall = time - lastCallTime,\n            timeSinceLastInvoke = time - lastInvokeTime;\n\n        // Either this is the first call, activity has stopped and we're at the\n        // trailing edge, the system time has gone backwards and we're treating\n        // it as the trailing edge, or we've hit the `maxWait` limit.\n        return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n          (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n      }\n\n      function timerExpired() {\n        var time = now();\n        if (shouldInvoke(time)) {\n          return trailingEdge(time);\n        }\n        // Restart the timer.\n        timerId = setTimeout(timerExpired, remainingWait(time));\n      }\n\n      function trailingEdge(time) {\n        timerId = undefined;\n\n        // Only invoke if we have `lastArgs` which means `func` has been\n        // debounced at least once.\n        if (trailing && lastArgs) {\n          return invokeFunc(time);\n        }\n        lastArgs = lastThis = undefined;\n        return result;\n      }\n\n      function cancel() {\n        if (timerId !== undefined) {\n          clearTimeout(timerId);\n        }\n        lastInvokeTime = 0;\n        lastArgs = lastCallTime = lastThis = timerId = undefined;\n      }\n\n      function flush() {\n        return timerId === undefined ? result : trailingEdge(now());\n      }\n\n      function debounced() {\n        var time = now(),\n            isInvoking = shouldInvoke(time);\n\n        lastArgs = arguments;\n        lastThis = this;\n        lastCallTime = time;\n\n        if (isInvoking) {\n          if (timerId === undefined) {\n            return leadingEdge(lastCallTime);\n          }\n          if (maxing) {\n            // Handle invocations in a tight loop.\n            clearTimeout(timerId);\n            timerId = setTimeout(timerExpired, wait);\n            return invokeFunc(lastCallTime);\n          }\n        }\n        if (timerId === undefined) {\n          timerId = setTimeout(timerExpired, wait);\n        }\n        return result;\n      }\n      debounced.cancel = cancel;\n      debounced.flush = flush;\n      return debounced;\n    }\n\n    /**\n     * Defers invoking the `func` until the current call stack has cleared. Any\n     * additional arguments are provided to `func` when it's invoked.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to defer.\n     * @param {...*} [args] The arguments to invoke `func` with.\n     * @returns {number} Returns the timer id.\n     * @example\n     *\n     * _.defer(function(text) {\n     *   console.log(text);\n     * }, 'deferred');\n     * // => Logs 'deferred' after one millisecond.\n     */\n    var defer = baseRest(function(func, args) {\n      return baseDelay(func, 1, args);\n    });\n\n    /**\n     * Invokes `func` after `wait` milliseconds. Any additional arguments are\n     * provided to `func` when it's invoked.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to delay.\n     * @param {number} wait The number of milliseconds to delay invocation.\n     * @param {...*} [args] The arguments to invoke `func` with.\n     * @returns {number} Returns the timer id.\n     * @example\n     *\n     * _.delay(function(text) {\n     *   console.log(text);\n     * }, 1000, 'later');\n     * // => Logs 'later' after one second.\n     */\n    var delay = baseRest(function(func, wait, args) {\n      return baseDelay(func, toNumber(wait) || 0, args);\n    });\n\n    /**\n     * Creates a function that invokes `func` with arguments reversed.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Function\n     * @param {Function} func The function to flip arguments for.\n     * @returns {Function} Returns the new flipped function.\n     * @example\n     *\n     * var flipped = _.flip(function() {\n     *   return _.toArray(arguments);\n     * });\n     *\n     * flipped('a', 'b', 'c', 'd');\n     * // => ['d', 'c', 'b', 'a']\n     */\n    function flip(func) {\n      return createWrap(func, WRAP_FLIP_FLAG);\n    }\n\n    /**\n     * Creates a function that memoizes the result of `func`. If `resolver` is\n     * provided, it determines the cache key for storing the result based on the\n     * arguments provided to the memoized function. By default, the first argument\n     * provided to the memoized function is used as the map cache key. The `func`\n     * is invoked with the `this` binding of the memoized function.\n     *\n     * **Note:** The cache is exposed as the `cache` property on the memoized\n     * function. Its creation may be customized by replacing the `_.memoize.Cache`\n     * constructor with one whose instances implement the\n     * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n     * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to have its output memoized.\n     * @param {Function} [resolver] The function to resolve the cache key.\n     * @returns {Function} Returns the new memoized function.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2 };\n     * var other = { 'c': 3, 'd': 4 };\n     *\n     * var values = _.memoize(_.values);\n     * values(object);\n     * // => [1, 2]\n     *\n     * values(other);\n     * // => [3, 4]\n     *\n     * object.a = 2;\n     * values(object);\n     * // => [1, 2]\n     *\n     * // Modify the result cache.\n     * values.cache.set(object, ['a', 'b']);\n     * values(object);\n     * // => ['a', 'b']\n     *\n     * // Replace `_.memoize.Cache`.\n     * _.memoize.Cache = WeakMap;\n     */\n    function memoize(func, resolver) {\n      if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      var memoized = function() {\n        var args = arguments,\n            key = resolver ? resolver.apply(this, args) : args[0],\n            cache = memoized.cache;\n\n        if (cache.has(key)) {\n          return cache.get(key);\n        }\n        var result = func.apply(this, args);\n        memoized.cache = cache.set(key, result) || cache;\n        return result;\n      };\n      memoized.cache = new (memoize.Cache || MapCache);\n      return memoized;\n    }\n\n    // Expose `MapCache`.\n    memoize.Cache = MapCache;\n\n    /**\n     * Creates a function that negates the result of the predicate `func`. The\n     * `func` predicate is invoked with the `this` binding and arguments of the\n     * created function.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {Function} predicate The predicate to negate.\n     * @returns {Function} Returns the new negated function.\n     * @example\n     *\n     * function isEven(n) {\n     *   return n % 2 == 0;\n     * }\n     *\n     * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));\n     * // => [1, 3, 5]\n     */\n    function negate(predicate) {\n      if (typeof predicate != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      return function() {\n        var args = arguments;\n        switch (args.length) {\n          case 0: return !predicate.call(this);\n          case 1: return !predicate.call(this, args[0]);\n          case 2: return !predicate.call(this, args[0], args[1]);\n          case 3: return !predicate.call(this, args[0], args[1], args[2]);\n        }\n        return !predicate.apply(this, args);\n      };\n    }\n\n    /**\n     * Creates a function that is restricted to invoking `func` once. Repeat calls\n     * to the function return the value of the first invocation. The `func` is\n     * invoked with the `this` binding and arguments of the created function.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new restricted function.\n     * @example\n     *\n     * var initialize = _.once(createApplication);\n     * initialize();\n     * initialize();\n     * // => `createApplication` is invoked once\n     */\n    function once(func) {\n      return before(2, func);\n    }\n\n    /**\n     * Creates a function that invokes `func` with its arguments transformed.\n     *\n     * @static\n     * @since 4.0.0\n     * @memberOf _\n     * @category Function\n     * @param {Function} func The function to wrap.\n     * @param {...(Function|Function[])} [transforms=[_.identity]]\n     *  The argument transforms.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * function doubled(n) {\n     *   return n * 2;\n     * }\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var func = _.overArgs(function(x, y) {\n     *   return [x, y];\n     * }, [square, doubled]);\n     *\n     * func(9, 3);\n     * // => [81, 6]\n     *\n     * func(10, 5);\n     * // => [100, 10]\n     */\n    var overArgs = castRest(function(func, transforms) {\n      transforms = (transforms.length == 1 && isArray(transforms[0]))\n        ? arrayMap(transforms[0], baseUnary(getIteratee()))\n        : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee()));\n\n      var funcsLength = transforms.length;\n      return baseRest(function(args) {\n        var index = -1,\n            length = nativeMin(args.length, funcsLength);\n\n        while (++index < length) {\n          args[index] = transforms[index].call(this, args[index]);\n        }\n        return apply(func, this, args);\n      });\n    });\n\n    /**\n     * Creates a function that invokes `func` with `partials` prepended to the\n     * arguments it receives. This method is like `_.bind` except it does **not**\n     * alter the `this` binding.\n     *\n     * The `_.partial.placeholder` value, which defaults to `_` in monolithic\n     * builds, may be used as a placeholder for partially applied arguments.\n     *\n     * **Note:** This method doesn't set the \"length\" property of partially\n     * applied functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.2.0\n     * @category Function\n     * @param {Function} func The function to partially apply arguments to.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new partially applied function.\n     * @example\n     *\n     * function greet(greeting, name) {\n     *   return greeting + ' ' + name;\n     * }\n     *\n     * var sayHelloTo = _.partial(greet, 'hello');\n     * sayHelloTo('fred');\n     * // => 'hello fred'\n     *\n     * // Partially applied with placeholders.\n     * var greetFred = _.partial(greet, _, 'fred');\n     * greetFred('hi');\n     * // => 'hi fred'\n     */\n    var partial = baseRest(function(func, partials) {\n      var holders = replaceHolders(partials, getHolder(partial));\n      return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders);\n    });\n\n    /**\n     * This method is like `_.partial` except that partially applied arguments\n     * are appended to the arguments it receives.\n     *\n     * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic\n     * builds, may be used as a placeholder for partially applied arguments.\n     *\n     * **Note:** This method doesn't set the \"length\" property of partially\n     * applied functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.0.0\n     * @category Function\n     * @param {Function} func The function to partially apply arguments to.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new partially applied function.\n     * @example\n     *\n     * function greet(greeting, name) {\n     *   return greeting + ' ' + name;\n     * }\n     *\n     * var greetFred = _.partialRight(greet, 'fred');\n     * greetFred('hi');\n     * // => 'hi fred'\n     *\n     * // Partially applied with placeholders.\n     * var sayHelloTo = _.partialRight(greet, 'hello', _);\n     * sayHelloTo('fred');\n     * // => 'hello fred'\n     */\n    var partialRight = baseRest(function(func, partials) {\n      var holders = replaceHolders(partials, getHolder(partialRight));\n      return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders);\n    });\n\n    /**\n     * Creates a function that invokes `func` with arguments arranged according\n     * to the specified `indexes` where the argument value at the first index is\n     * provided as the first argument, the argument value at the second index is\n     * provided as the second argument, and so on.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {Function} func The function to rearrange arguments for.\n     * @param {...(number|number[])} indexes The arranged argument indexes.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var rearged = _.rearg(function(a, b, c) {\n     *   return [a, b, c];\n     * }, [2, 0, 1]);\n     *\n     * rearged('b', 'c', 'a')\n     * // => ['a', 'b', 'c']\n     */\n    var rearg = flatRest(function(func, indexes) {\n      return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes);\n    });\n\n    /**\n     * Creates a function that invokes `func` with the `this` binding of the\n     * created function and arguments from `start` and beyond provided as\n     * an array.\n     *\n     * **Note:** This method is based on the\n     * [rest parameter](https://mdn.io/rest_parameters).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Function\n     * @param {Function} func The function to apply a rest parameter to.\n     * @param {number} [start=func.length-1] The start position of the rest parameter.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var say = _.rest(function(what, names) {\n     *   return what + ' ' + _.initial(names).join(', ') +\n     *     (_.size(names) > 1 ? ', & ' : '') + _.last(names);\n     * });\n     *\n     * say('hello', 'fred', 'barney', 'pebbles');\n     * // => 'hello fred, barney, & pebbles'\n     */\n    function rest(func, start) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      start = start === undefined ? start : toInteger(start);\n      return baseRest(func, start);\n    }\n\n    /**\n     * Creates a function that invokes `func` with the `this` binding of the\n     * create function and an array of arguments much like\n     * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply).\n     *\n     * **Note:** This method is based on the\n     * [spread operator](https://mdn.io/spread_operator).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.2.0\n     * @category Function\n     * @param {Function} func The function to spread arguments over.\n     * @param {number} [start=0] The start position of the spread.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var say = _.spread(function(who, what) {\n     *   return who + ' says ' + what;\n     * });\n     *\n     * say(['fred', 'hello']);\n     * // => 'fred says hello'\n     *\n     * var numbers = Promise.all([\n     *   Promise.resolve(40),\n     *   Promise.resolve(36)\n     * ]);\n     *\n     * numbers.then(_.spread(function(x, y) {\n     *   return x + y;\n     * }));\n     * // => a Promise of 76\n     */\n    function spread(func, start) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      start = start == null ? 0 : nativeMax(toInteger(start), 0);\n      return baseRest(function(args) {\n        var array = args[start],\n            otherArgs = castSlice(args, 0, start);\n\n        if (array) {\n          arrayPush(otherArgs, array);\n        }\n        return apply(func, this, otherArgs);\n      });\n    }\n\n    /**\n     * Creates a throttled function that only invokes `func` at most once per\n     * every `wait` milliseconds. The throttled function comes with a `cancel`\n     * method to cancel delayed `func` invocations and a `flush` method to\n     * immediately invoke them. Provide `options` to indicate whether `func`\n     * should be invoked on the leading and/or trailing edge of the `wait`\n     * timeout. The `func` is invoked with the last arguments provided to the\n     * throttled function. Subsequent calls to the throttled function return the\n     * result of the last `func` invocation.\n     *\n     * **Note:** If `leading` and `trailing` options are `true`, `func` is\n     * invoked on the trailing edge of the timeout only if the throttled function\n     * is invoked more than once during the `wait` timeout.\n     *\n     * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n     * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n     *\n     * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n     * for details over the differences between `_.throttle` and `_.debounce`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to throttle.\n     * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n     * @param {Object} [options={}] The options object.\n     * @param {boolean} [options.leading=true]\n     *  Specify invoking on the leading edge of the timeout.\n     * @param {boolean} [options.trailing=true]\n     *  Specify invoking on the trailing edge of the timeout.\n     * @returns {Function} Returns the new throttled function.\n     * @example\n     *\n     * // Avoid excessively updating the position while scrolling.\n     * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n     *\n     * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n     * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n     * jQuery(element).on('click', throttled);\n     *\n     * // Cancel the trailing throttled invocation.\n     * jQuery(window).on('popstate', throttled.cancel);\n     */\n    function throttle(func, wait, options) {\n      var leading = true,\n          trailing = true;\n\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      if (isObject(options)) {\n        leading = 'leading' in options ? !!options.leading : leading;\n        trailing = 'trailing' in options ? !!options.trailing : trailing;\n      }\n      return debounce(func, wait, {\n        'leading': leading,\n        'maxWait': wait,\n        'trailing': trailing\n      });\n    }\n\n    /**\n     * Creates a function that accepts up to one argument, ignoring any\n     * additional arguments.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Function\n     * @param {Function} func The function to cap arguments for.\n     * @returns {Function} Returns the new capped function.\n     * @example\n     *\n     * _.map(['6', '8', '10'], _.unary(parseInt));\n     * // => [6, 8, 10]\n     */\n    function unary(func) {\n      return ary(func, 1);\n    }\n\n    /**\n     * Creates a function that provides `value` to `wrapper` as its first\n     * argument. Any additional arguments provided to the function are appended\n     * to those provided to the `wrapper`. The wrapper is invoked with the `this`\n     * binding of the created function.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {*} value The value to wrap.\n     * @param {Function} [wrapper=identity] The wrapper function.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var p = _.wrap(_.escape, function(func, text) {\n     *   return '<p>' + func(text) + '</p>';\n     * });\n     *\n     * p('fred, barney, & pebbles');\n     * // => '<p>fred, barney, &amp; pebbles</p>'\n     */\n    function wrap(value, wrapper) {\n      return partial(castFunction(wrapper), value);\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Casts `value` as an array if it's not one.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.4.0\n     * @category Lang\n     * @param {*} value The value to inspect.\n     * @returns {Array} Returns the cast array.\n     * @example\n     *\n     * _.castArray(1);\n     * // => [1]\n     *\n     * _.castArray({ 'a': 1 });\n     * // => [{ 'a': 1 }]\n     *\n     * _.castArray('abc');\n     * // => ['abc']\n     *\n     * _.castArray(null);\n     * // => [null]\n     *\n     * _.castArray(undefined);\n     * // => [undefined]\n     *\n     * _.castArray();\n     * // => []\n     *\n     * var array = [1, 2, 3];\n     * console.log(_.castArray(array) === array);\n     * // => true\n     */\n    function castArray() {\n      if (!arguments.length) {\n        return [];\n      }\n      var value = arguments[0];\n      return isArray(value) ? value : [value];\n    }\n\n    /**\n     * Creates a shallow clone of `value`.\n     *\n     * **Note:** This method is loosely based on the\n     * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)\n     * and supports cloning arrays, array buffers, booleans, date objects, maps,\n     * numbers, `Object` objects, regexes, sets, strings, symbols, and typed\n     * arrays. The own enumerable properties of `arguments` objects are cloned\n     * as plain objects. An empty object is returned for uncloneable values such\n     * as error objects, functions, DOM nodes, and WeakMaps.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to clone.\n     * @returns {*} Returns the cloned value.\n     * @see _.cloneDeep\n     * @example\n     *\n     * var objects = [{ 'a': 1 }, { 'b': 2 }];\n     *\n     * var shallow = _.clone(objects);\n     * console.log(shallow[0] === objects[0]);\n     * // => true\n     */\n    function clone(value) {\n      return baseClone(value, CLONE_SYMBOLS_FLAG);\n    }\n\n    /**\n     * This method is like `_.clone` except that it accepts `customizer` which\n     * is invoked to produce the cloned value. If `customizer` returns `undefined`,\n     * cloning is handled by the method instead. The `customizer` is invoked with\n     * up to four arguments; (value [, index|key, object, stack]).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to clone.\n     * @param {Function} [customizer] The function to customize cloning.\n     * @returns {*} Returns the cloned value.\n     * @see _.cloneDeepWith\n     * @example\n     *\n     * function customizer(value) {\n     *   if (_.isElement(value)) {\n     *     return value.cloneNode(false);\n     *   }\n     * }\n     *\n     * var el = _.cloneWith(document.body, customizer);\n     *\n     * console.log(el === document.body);\n     * // => false\n     * console.log(el.nodeName);\n     * // => 'BODY'\n     * console.log(el.childNodes.length);\n     * // => 0\n     */\n    function cloneWith(value, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return baseClone(value, CLONE_SYMBOLS_FLAG, customizer);\n    }\n\n    /**\n     * This method is like `_.clone` except that it recursively clones `value`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.0.0\n     * @category Lang\n     * @param {*} value The value to recursively clone.\n     * @returns {*} Returns the deep cloned value.\n     * @see _.clone\n     * @example\n     *\n     * var objects = [{ 'a': 1 }, { 'b': 2 }];\n     *\n     * var deep = _.cloneDeep(objects);\n     * console.log(deep[0] === objects[0]);\n     * // => false\n     */\n    function cloneDeep(value) {\n      return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n    }\n\n    /**\n     * This method is like `_.cloneWith` except that it recursively clones `value`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to recursively clone.\n     * @param {Function} [customizer] The function to customize cloning.\n     * @returns {*} Returns the deep cloned value.\n     * @see _.cloneWith\n     * @example\n     *\n     * function customizer(value) {\n     *   if (_.isElement(value)) {\n     *     return value.cloneNode(true);\n     *   }\n     * }\n     *\n     * var el = _.cloneDeepWith(document.body, customizer);\n     *\n     * console.log(el === document.body);\n     * // => false\n     * console.log(el.nodeName);\n     * // => 'BODY'\n     * console.log(el.childNodes.length);\n     * // => 20\n     */\n    function cloneDeepWith(value, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer);\n    }\n\n    /**\n     * Checks if `object` conforms to `source` by invoking the predicate\n     * properties of `source` with the corresponding property values of `object`.\n     *\n     * **Note:** This method is equivalent to `_.conforms` when `source` is\n     * partially applied.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.14.0\n     * @category Lang\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property predicates to conform to.\n     * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2 };\n     *\n     * _.conformsTo(object, { 'b': function(n) { return n > 1; } });\n     * // => true\n     *\n     * _.conformsTo(object, { 'b': function(n) { return n > 2; } });\n     * // => false\n     */\n    function conformsTo(object, source) {\n      return source == null || baseConformsTo(object, source, keys(source));\n    }\n\n    /**\n     * Performs a\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * comparison between two values to determine if they are equivalent.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n     * @example\n     *\n     * var object = { 'a': 1 };\n     * var other = { 'a': 1 };\n     *\n     * _.eq(object, object);\n     * // => true\n     *\n     * _.eq(object, other);\n     * // => false\n     *\n     * _.eq('a', 'a');\n     * // => true\n     *\n     * _.eq('a', Object('a'));\n     * // => false\n     *\n     * _.eq(NaN, NaN);\n     * // => true\n     */\n    function eq(value, other) {\n      return value === other || (value !== value && other !== other);\n    }\n\n    /**\n     * Checks if `value` is greater than `other`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.9.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is greater than `other`,\n     *  else `false`.\n     * @see _.lt\n     * @example\n     *\n     * _.gt(3, 1);\n     * // => true\n     *\n     * _.gt(3, 3);\n     * // => false\n     *\n     * _.gt(1, 3);\n     * // => false\n     */\n    var gt = createRelationalOperation(baseGt);\n\n    /**\n     * Checks if `value` is greater than or equal to `other`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.9.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is greater than or equal to\n     *  `other`, else `false`.\n     * @see _.lte\n     * @example\n     *\n     * _.gte(3, 1);\n     * // => true\n     *\n     * _.gte(3, 3);\n     * // => true\n     *\n     * _.gte(1, 3);\n     * // => false\n     */\n    var gte = createRelationalOperation(function(value, other) {\n      return value >= other;\n    });\n\n    /**\n     * Checks if `value` is likely an `arguments` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n     *  else `false`.\n     * @example\n     *\n     * _.isArguments(function() { return arguments; }());\n     * // => true\n     *\n     * _.isArguments([1, 2, 3]);\n     * // => false\n     */\n    var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n      return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n        !propertyIsEnumerable.call(value, 'callee');\n    };\n\n    /**\n     * Checks if `value` is classified as an `Array` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n     * @example\n     *\n     * _.isArray([1, 2, 3]);\n     * // => true\n     *\n     * _.isArray(document.body.children);\n     * // => false\n     *\n     * _.isArray('abc');\n     * // => false\n     *\n     * _.isArray(_.noop);\n     * // => false\n     */\n    var isArray = Array.isArray;\n\n    /**\n     * Checks if `value` is classified as an `ArrayBuffer` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n     * @example\n     *\n     * _.isArrayBuffer(new ArrayBuffer(2));\n     * // => true\n     *\n     * _.isArrayBuffer(new Array(2));\n     * // => false\n     */\n    var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer;\n\n    /**\n     * Checks if `value` is array-like. A value is considered array-like if it's\n     * not a function and has a `value.length` that's an integer greater than or\n     * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n     * @example\n     *\n     * _.isArrayLike([1, 2, 3]);\n     * // => true\n     *\n     * _.isArrayLike(document.body.children);\n     * // => true\n     *\n     * _.isArrayLike('abc');\n     * // => true\n     *\n     * _.isArrayLike(_.noop);\n     * // => false\n     */\n    function isArrayLike(value) {\n      return value != null && isLength(value.length) && !isFunction(value);\n    }\n\n    /**\n     * This method is like `_.isArrayLike` except that it also checks if `value`\n     * is an object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an array-like object,\n     *  else `false`.\n     * @example\n     *\n     * _.isArrayLikeObject([1, 2, 3]);\n     * // => true\n     *\n     * _.isArrayLikeObject(document.body.children);\n     * // => true\n     *\n     * _.isArrayLikeObject('abc');\n     * // => false\n     *\n     * _.isArrayLikeObject(_.noop);\n     * // => false\n     */\n    function isArrayLikeObject(value) {\n      return isObjectLike(value) && isArrayLike(value);\n    }\n\n    /**\n     * Checks if `value` is classified as a boolean primitive or object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a boolean, else `false`.\n     * @example\n     *\n     * _.isBoolean(false);\n     * // => true\n     *\n     * _.isBoolean(null);\n     * // => false\n     */\n    function isBoolean(value) {\n      return value === true || value === false ||\n        (isObjectLike(value) && baseGetTag(value) == boolTag);\n    }\n\n    /**\n     * Checks if `value` is a buffer.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n     * @example\n     *\n     * _.isBuffer(new Buffer(2));\n     * // => true\n     *\n     * _.isBuffer(new Uint8Array(2));\n     * // => false\n     */\n    var isBuffer = nativeIsBuffer || stubFalse;\n\n    /**\n     * Checks if `value` is classified as a `Date` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n     * @example\n     *\n     * _.isDate(new Date);\n     * // => true\n     *\n     * _.isDate('Mon April 23 2012');\n     * // => false\n     */\n    var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate;\n\n    /**\n     * Checks if `value` is likely a DOM element.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`.\n     * @example\n     *\n     * _.isElement(document.body);\n     * // => true\n     *\n     * _.isElement('<body>');\n     * // => false\n     */\n    function isElement(value) {\n      return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value);\n    }\n\n    /**\n     * Checks if `value` is an empty object, collection, map, or set.\n     *\n     * Objects are considered empty if they have no own enumerable string keyed\n     * properties.\n     *\n     * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n     * jQuery-like collections are considered empty if they have a `length` of `0`.\n     * Similarly, maps and sets are considered empty if they have a `size` of `0`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is empty, else `false`.\n     * @example\n     *\n     * _.isEmpty(null);\n     * // => true\n     *\n     * _.isEmpty(true);\n     * // => true\n     *\n     * _.isEmpty(1);\n     * // => true\n     *\n     * _.isEmpty([1, 2, 3]);\n     * // => false\n     *\n     * _.isEmpty({ 'a': 1 });\n     * // => false\n     */\n    function isEmpty(value) {\n      if (value == null) {\n        return true;\n      }\n      if (isArrayLike(value) &&\n          (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||\n            isBuffer(value) || isTypedArray(value) || isArguments(value))) {\n        return !value.length;\n      }\n      var tag = getTag(value);\n      if (tag == mapTag || tag == setTag) {\n        return !value.size;\n      }\n      if (isPrototype(value)) {\n        return !baseKeys(value).length;\n      }\n      for (var key in value) {\n        if (hasOwnProperty.call(value, key)) {\n          return false;\n        }\n      }\n      return true;\n    }\n\n    /**\n     * Performs a deep comparison between two values to determine if they are\n     * equivalent.\n     *\n     * **Note:** This method supports comparing arrays, array buffers, booleans,\n     * date objects, error objects, maps, numbers, `Object` objects, regexes,\n     * sets, strings, symbols, and typed arrays. `Object` objects are compared\n     * by their own, not inherited, enumerable properties. Functions and DOM\n     * nodes are compared by strict equality, i.e. `===`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n     * @example\n     *\n     * var object = { 'a': 1 };\n     * var other = { 'a': 1 };\n     *\n     * _.isEqual(object, other);\n     * // => true\n     *\n     * object === other;\n     * // => false\n     */\n    function isEqual(value, other) {\n      return baseIsEqual(value, other);\n    }\n\n    /**\n     * This method is like `_.isEqual` except that it accepts `customizer` which\n     * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n     * are handled by the method instead. The `customizer` is invoked with up to\n     * six arguments: (objValue, othValue [, index|key, object, other, stack]).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @param {Function} [customizer] The function to customize comparisons.\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n     * @example\n     *\n     * function isGreeting(value) {\n     *   return /^h(?:i|ello)$/.test(value);\n     * }\n     *\n     * function customizer(objValue, othValue) {\n     *   if (isGreeting(objValue) && isGreeting(othValue)) {\n     *     return true;\n     *   }\n     * }\n     *\n     * var array = ['hello', 'goodbye'];\n     * var other = ['hi', 'goodbye'];\n     *\n     * _.isEqualWith(array, other, customizer);\n     * // => true\n     */\n    function isEqualWith(value, other, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      var result = customizer ? customizer(value, other) : undefined;\n      return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result;\n    }\n\n    /**\n     * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`,\n     * `SyntaxError`, `TypeError`, or `URIError` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an error object, else `false`.\n     * @example\n     *\n     * _.isError(new Error);\n     * // => true\n     *\n     * _.isError(Error);\n     * // => false\n     */\n    function isError(value) {\n      if (!isObjectLike(value)) {\n        return false;\n      }\n      var tag = baseGetTag(value);\n      return tag == errorTag || tag == domExcTag ||\n        (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value));\n    }\n\n    /**\n     * Checks if `value` is a finite primitive number.\n     *\n     * **Note:** This method is based on\n     * [`Number.isFinite`](https://mdn.io/Number/isFinite).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a finite number, else `false`.\n     * @example\n     *\n     * _.isFinite(3);\n     * // => true\n     *\n     * _.isFinite(Number.MIN_VALUE);\n     * // => true\n     *\n     * _.isFinite(Infinity);\n     * // => false\n     *\n     * _.isFinite('3');\n     * // => false\n     */\n    function isFinite(value) {\n      return typeof value == 'number' && nativeIsFinite(value);\n    }\n\n    /**\n     * Checks if `value` is classified as a `Function` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n     * @example\n     *\n     * _.isFunction(_);\n     * // => true\n     *\n     * _.isFunction(/abc/);\n     * // => false\n     */\n    function isFunction(value) {\n      if (!isObject(value)) {\n        return false;\n      }\n      // The use of `Object#toString` avoids issues with the `typeof` operator\n      // in Safari 9 which returns 'object' for typed arrays and other constructors.\n      var tag = baseGetTag(value);\n      return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n    }\n\n    /**\n     * Checks if `value` is an integer.\n     *\n     * **Note:** This method is based on\n     * [`Number.isInteger`](https://mdn.io/Number/isInteger).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an integer, else `false`.\n     * @example\n     *\n     * _.isInteger(3);\n     * // => true\n     *\n     * _.isInteger(Number.MIN_VALUE);\n     * // => false\n     *\n     * _.isInteger(Infinity);\n     * // => false\n     *\n     * _.isInteger('3');\n     * // => false\n     */\n    function isInteger(value) {\n      return typeof value == 'number' && value == toInteger(value);\n    }\n\n    /**\n     * Checks if `value` is a valid array-like length.\n     *\n     * **Note:** This method is loosely based on\n     * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n     * @example\n     *\n     * _.isLength(3);\n     * // => true\n     *\n     * _.isLength(Number.MIN_VALUE);\n     * // => false\n     *\n     * _.isLength(Infinity);\n     * // => false\n     *\n     * _.isLength('3');\n     * // => false\n     */\n    function isLength(value) {\n      return typeof value == 'number' &&\n        value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n    }\n\n    /**\n     * Checks if `value` is the\n     * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n     * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n     * @example\n     *\n     * _.isObject({});\n     * // => true\n     *\n     * _.isObject([1, 2, 3]);\n     * // => true\n     *\n     * _.isObject(_.noop);\n     * // => true\n     *\n     * _.isObject(null);\n     * // => false\n     */\n    function isObject(value) {\n      var type = typeof value;\n      return value != null && (type == 'object' || type == 'function');\n    }\n\n    /**\n     * Checks if `value` is object-like. A value is object-like if it's not `null`\n     * and has a `typeof` result of \"object\".\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n     * @example\n     *\n     * _.isObjectLike({});\n     * // => true\n     *\n     * _.isObjectLike([1, 2, 3]);\n     * // => true\n     *\n     * _.isObjectLike(_.noop);\n     * // => false\n     *\n     * _.isObjectLike(null);\n     * // => false\n     */\n    function isObjectLike(value) {\n      return value != null && typeof value == 'object';\n    }\n\n    /**\n     * Checks if `value` is classified as a `Map` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n     * @example\n     *\n     * _.isMap(new Map);\n     * // => true\n     *\n     * _.isMap(new WeakMap);\n     * // => false\n     */\n    var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\n    /**\n     * Performs a partial deep comparison between `object` and `source` to\n     * determine if `object` contains equivalent property values.\n     *\n     * **Note:** This method is equivalent to `_.matches` when `source` is\n     * partially applied.\n     *\n     * Partial comparisons will match empty array and empty object `source`\n     * values against any array or object value, respectively. See `_.isEqual`\n     * for a list of supported value comparisons.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property values to match.\n     * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2 };\n     *\n     * _.isMatch(object, { 'b': 2 });\n     * // => true\n     *\n     * _.isMatch(object, { 'b': 1 });\n     * // => false\n     */\n    function isMatch(object, source) {\n      return object === source || baseIsMatch(object, source, getMatchData(source));\n    }\n\n    /**\n     * This method is like `_.isMatch` except that it accepts `customizer` which\n     * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n     * are handled by the method instead. The `customizer` is invoked with five\n     * arguments: (objValue, srcValue, index|key, object, source).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property values to match.\n     * @param {Function} [customizer] The function to customize comparisons.\n     * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n     * @example\n     *\n     * function isGreeting(value) {\n     *   return /^h(?:i|ello)$/.test(value);\n     * }\n     *\n     * function customizer(objValue, srcValue) {\n     *   if (isGreeting(objValue) && isGreeting(srcValue)) {\n     *     return true;\n     *   }\n     * }\n     *\n     * var object = { 'greeting': 'hello' };\n     * var source = { 'greeting': 'hi' };\n     *\n     * _.isMatchWith(object, source, customizer);\n     * // => true\n     */\n    function isMatchWith(object, source, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return baseIsMatch(object, source, getMatchData(source), customizer);\n    }\n\n    /**\n     * Checks if `value` is `NaN`.\n     *\n     * **Note:** This method is based on\n     * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as\n     * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for\n     * `undefined` and other non-number values.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n     * @example\n     *\n     * _.isNaN(NaN);\n     * // => true\n     *\n     * _.isNaN(new Number(NaN));\n     * // => true\n     *\n     * isNaN(undefined);\n     * // => true\n     *\n     * _.isNaN(undefined);\n     * // => false\n     */\n    function isNaN(value) {\n      // An `NaN` primitive is the only value that is not equal to itself.\n      // Perform the `toStringTag` check first to avoid errors with some\n      // ActiveX objects in IE.\n      return isNumber(value) && value != +value;\n    }\n\n    /**\n     * Checks if `value` is a pristine native function.\n     *\n     * **Note:** This method can't reliably detect native functions in the presence\n     * of the core-js package because core-js circumvents this kind of detection.\n     * Despite multiple requests, the core-js maintainer has made it clear: any\n     * attempt to fix the detection will be obstructed. As a result, we're left\n     * with little choice but to throw an error. Unfortunately, this also affects\n     * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill),\n     * which rely on core-js.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a native function,\n     *  else `false`.\n     * @example\n     *\n     * _.isNative(Array.prototype.push);\n     * // => true\n     *\n     * _.isNative(_);\n     * // => false\n     */\n    function isNative(value) {\n      if (isMaskable(value)) {\n        throw new Error(CORE_ERROR_TEXT);\n      }\n      return baseIsNative(value);\n    }\n\n    /**\n     * Checks if `value` is `null`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is `null`, else `false`.\n     * @example\n     *\n     * _.isNull(null);\n     * // => true\n     *\n     * _.isNull(void 0);\n     * // => false\n     */\n    function isNull(value) {\n      return value === null;\n    }\n\n    /**\n     * Checks if `value` is `null` or `undefined`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is nullish, else `false`.\n     * @example\n     *\n     * _.isNil(null);\n     * // => true\n     *\n     * _.isNil(void 0);\n     * // => true\n     *\n     * _.isNil(NaN);\n     * // => false\n     */\n    function isNil(value) {\n      return value == null;\n    }\n\n    /**\n     * Checks if `value` is classified as a `Number` primitive or object.\n     *\n     * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are\n     * classified as numbers, use the `_.isFinite` method.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a number, else `false`.\n     * @example\n     *\n     * _.isNumber(3);\n     * // => true\n     *\n     * _.isNumber(Number.MIN_VALUE);\n     * // => true\n     *\n     * _.isNumber(Infinity);\n     * // => true\n     *\n     * _.isNumber('3');\n     * // => false\n     */\n    function isNumber(value) {\n      return typeof value == 'number' ||\n        (isObjectLike(value) && baseGetTag(value) == numberTag);\n    }\n\n    /**\n     * Checks if `value` is a plain object, that is, an object created by the\n     * `Object` constructor or one with a `[[Prototype]]` of `null`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.8.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     * }\n     *\n     * _.isPlainObject(new Foo);\n     * // => false\n     *\n     * _.isPlainObject([1, 2, 3]);\n     * // => false\n     *\n     * _.isPlainObject({ 'x': 0, 'y': 0 });\n     * // => true\n     *\n     * _.isPlainObject(Object.create(null));\n     * // => true\n     */\n    function isPlainObject(value) {\n      if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n        return false;\n      }\n      var proto = getPrototype(value);\n      if (proto === null) {\n        return true;\n      }\n      var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n      return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n        funcToString.call(Ctor) == objectCtorString;\n    }\n\n    /**\n     * Checks if `value` is classified as a `RegExp` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n     * @example\n     *\n     * _.isRegExp(/abc/);\n     * // => true\n     *\n     * _.isRegExp('/abc/');\n     * // => false\n     */\n    var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp;\n\n    /**\n     * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754\n     * double precision number which isn't the result of a rounded unsafe integer.\n     *\n     * **Note:** This method is based on\n     * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`.\n     * @example\n     *\n     * _.isSafeInteger(3);\n     * // => true\n     *\n     * _.isSafeInteger(Number.MIN_VALUE);\n     * // => false\n     *\n     * _.isSafeInteger(Infinity);\n     * // => false\n     *\n     * _.isSafeInteger('3');\n     * // => false\n     */\n    function isSafeInteger(value) {\n      return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER;\n    }\n\n    /**\n     * Checks if `value` is classified as a `Set` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n     * @example\n     *\n     * _.isSet(new Set);\n     * // => true\n     *\n     * _.isSet(new WeakSet);\n     * // => false\n     */\n    var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\n    /**\n     * Checks if `value` is classified as a `String` primitive or object.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n     * @example\n     *\n     * _.isString('abc');\n     * // => true\n     *\n     * _.isString(1);\n     * // => false\n     */\n    function isString(value) {\n      return typeof value == 'string' ||\n        (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n    }\n\n    /**\n     * Checks if `value` is classified as a `Symbol` primitive or object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n     * @example\n     *\n     * _.isSymbol(Symbol.iterator);\n     * // => true\n     *\n     * _.isSymbol('abc');\n     * // => false\n     */\n    function isSymbol(value) {\n      return typeof value == 'symbol' ||\n        (isObjectLike(value) && baseGetTag(value) == symbolTag);\n    }\n\n    /**\n     * Checks if `value` is classified as a typed array.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n     * @example\n     *\n     * _.isTypedArray(new Uint8Array);\n     * // => true\n     *\n     * _.isTypedArray([]);\n     * // => false\n     */\n    var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\n    /**\n     * Checks if `value` is `undefined`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n     * @example\n     *\n     * _.isUndefined(void 0);\n     * // => true\n     *\n     * _.isUndefined(null);\n     * // => false\n     */\n    function isUndefined(value) {\n      return value === undefined;\n    }\n\n    /**\n     * Checks if `value` is classified as a `WeakMap` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a weak map, else `false`.\n     * @example\n     *\n     * _.isWeakMap(new WeakMap);\n     * // => true\n     *\n     * _.isWeakMap(new Map);\n     * // => false\n     */\n    function isWeakMap(value) {\n      return isObjectLike(value) && getTag(value) == weakMapTag;\n    }\n\n    /**\n     * Checks if `value` is classified as a `WeakSet` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a weak set, else `false`.\n     * @example\n     *\n     * _.isWeakSet(new WeakSet);\n     * // => true\n     *\n     * _.isWeakSet(new Set);\n     * // => false\n     */\n    function isWeakSet(value) {\n      return isObjectLike(value) && baseGetTag(value) == weakSetTag;\n    }\n\n    /**\n     * Checks if `value` is less than `other`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.9.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is less than `other`,\n     *  else `false`.\n     * @see _.gt\n     * @example\n     *\n     * _.lt(1, 3);\n     * // => true\n     *\n     * _.lt(3, 3);\n     * // => false\n     *\n     * _.lt(3, 1);\n     * // => false\n     */\n    var lt = createRelationalOperation(baseLt);\n\n    /**\n     * Checks if `value` is less than or equal to `other`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.9.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is less than or equal to\n     *  `other`, else `false`.\n     * @see _.gte\n     * @example\n     *\n     * _.lte(1, 3);\n     * // => true\n     *\n     * _.lte(3, 3);\n     * // => true\n     *\n     * _.lte(3, 1);\n     * // => false\n     */\n    var lte = createRelationalOperation(function(value, other) {\n      return value <= other;\n    });\n\n    /**\n     * Converts `value` to an array.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {Array} Returns the converted array.\n     * @example\n     *\n     * _.toArray({ 'a': 1, 'b': 2 });\n     * // => [1, 2]\n     *\n     * _.toArray('abc');\n     * // => ['a', 'b', 'c']\n     *\n     * _.toArray(1);\n     * // => []\n     *\n     * _.toArray(null);\n     * // => []\n     */\n    function toArray(value) {\n      if (!value) {\n        return [];\n      }\n      if (isArrayLike(value)) {\n        return isString(value) ? stringToArray(value) : copyArray(value);\n      }\n      if (symIterator && value[symIterator]) {\n        return iteratorToArray(value[symIterator]());\n      }\n      var tag = getTag(value),\n          func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values);\n\n      return func(value);\n    }\n\n    /**\n     * Converts `value` to a finite number.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.12.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {number} Returns the converted number.\n     * @example\n     *\n     * _.toFinite(3.2);\n     * // => 3.2\n     *\n     * _.toFinite(Number.MIN_VALUE);\n     * // => 5e-324\n     *\n     * _.toFinite(Infinity);\n     * // => 1.7976931348623157e+308\n     *\n     * _.toFinite('3.2');\n     * // => 3.2\n     */\n    function toFinite(value) {\n      if (!value) {\n        return value === 0 ? value : 0;\n      }\n      value = toNumber(value);\n      if (value === INFINITY || value === -INFINITY) {\n        var sign = (value < 0 ? -1 : 1);\n        return sign * MAX_INTEGER;\n      }\n      return value === value ? value : 0;\n    }\n\n    /**\n     * Converts `value` to an integer.\n     *\n     * **Note:** This method is loosely based on\n     * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {number} Returns the converted integer.\n     * @example\n     *\n     * _.toInteger(3.2);\n     * // => 3\n     *\n     * _.toInteger(Number.MIN_VALUE);\n     * // => 0\n     *\n     * _.toInteger(Infinity);\n     * // => 1.7976931348623157e+308\n     *\n     * _.toInteger('3.2');\n     * // => 3\n     */\n    function toInteger(value) {\n      var result = toFinite(value),\n          remainder = result % 1;\n\n      return result === result ? (remainder ? result - remainder : result) : 0;\n    }\n\n    /**\n     * Converts `value` to an integer suitable for use as the length of an\n     * array-like object.\n     *\n     * **Note:** This method is based on\n     * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {number} Returns the converted integer.\n     * @example\n     *\n     * _.toLength(3.2);\n     * // => 3\n     *\n     * _.toLength(Number.MIN_VALUE);\n     * // => 0\n     *\n     * _.toLength(Infinity);\n     * // => 4294967295\n     *\n     * _.toLength('3.2');\n     * // => 3\n     */\n    function toLength(value) {\n      return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0;\n    }\n\n    /**\n     * Converts `value` to a number.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to process.\n     * @returns {number} Returns the number.\n     * @example\n     *\n     * _.toNumber(3.2);\n     * // => 3.2\n     *\n     * _.toNumber(Number.MIN_VALUE);\n     * // => 5e-324\n     *\n     * _.toNumber(Infinity);\n     * // => Infinity\n     *\n     * _.toNumber('3.2');\n     * // => 3.2\n     */\n    function toNumber(value) {\n      if (typeof value == 'number') {\n        return value;\n      }\n      if (isSymbol(value)) {\n        return NAN;\n      }\n      if (isObject(value)) {\n        var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n        value = isObject(other) ? (other + '') : other;\n      }\n      if (typeof value != 'string') {\n        return value === 0 ? value : +value;\n      }\n      value = baseTrim(value);\n      var isBinary = reIsBinary.test(value);\n      return (isBinary || reIsOctal.test(value))\n        ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n        : (reIsBadHex.test(value) ? NAN : +value);\n    }\n\n    /**\n     * Converts `value` to a plain object flattening inherited enumerable string\n     * keyed properties of `value` to own properties of the plain object.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {Object} Returns the converted plain object.\n     * @example\n     *\n     * function Foo() {\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.assign({ 'a': 1 }, new Foo);\n     * // => { 'a': 1, 'b': 2 }\n     *\n     * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n     * // => { 'a': 1, 'b': 2, 'c': 3 }\n     */\n    function toPlainObject(value) {\n      return copyObject(value, keysIn(value));\n    }\n\n    /**\n     * Converts `value` to a safe integer. A safe integer can be compared and\n     * represented correctly.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {number} Returns the converted integer.\n     * @example\n     *\n     * _.toSafeInteger(3.2);\n     * // => 3\n     *\n     * _.toSafeInteger(Number.MIN_VALUE);\n     * // => 0\n     *\n     * _.toSafeInteger(Infinity);\n     * // => 9007199254740991\n     *\n     * _.toSafeInteger('3.2');\n     * // => 3\n     */\n    function toSafeInteger(value) {\n      return value\n        ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER)\n        : (value === 0 ? value : 0);\n    }\n\n    /**\n     * Converts `value` to a string. An empty string is returned for `null`\n     * and `undefined` values. The sign of `-0` is preserved.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {string} Returns the converted string.\n     * @example\n     *\n     * _.toString(null);\n     * // => ''\n     *\n     * _.toString(-0);\n     * // => '-0'\n     *\n     * _.toString([1, 2, 3]);\n     * // => '1,2,3'\n     */\n    function toString(value) {\n      return value == null ? '' : baseToString(value);\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Assigns own enumerable string keyed properties of source objects to the\n     * destination object. Source objects are applied from left to right.\n     * Subsequent sources overwrite property assignments of previous sources.\n     *\n     * **Note:** This method mutates `object` and is loosely based on\n     * [`Object.assign`](https://mdn.io/Object/assign).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.10.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @see _.assignIn\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     * }\n     *\n     * function Bar() {\n     *   this.c = 3;\n     * }\n     *\n     * Foo.prototype.b = 2;\n     * Bar.prototype.d = 4;\n     *\n     * _.assign({ 'a': 0 }, new Foo, new Bar);\n     * // => { 'a': 1, 'c': 3 }\n     */\n    var assign = createAssigner(function(object, source) {\n      if (isPrototype(source) || isArrayLike(source)) {\n        copyObject(source, keys(source), object);\n        return;\n      }\n      for (var key in source) {\n        if (hasOwnProperty.call(source, key)) {\n          assignValue(object, key, source[key]);\n        }\n      }\n    });\n\n    /**\n     * This method is like `_.assign` except that it iterates over own and\n     * inherited source properties.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @alias extend\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @see _.assign\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     * }\n     *\n     * function Bar() {\n     *   this.c = 3;\n     * }\n     *\n     * Foo.prototype.b = 2;\n     * Bar.prototype.d = 4;\n     *\n     * _.assignIn({ 'a': 0 }, new Foo, new Bar);\n     * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 }\n     */\n    var assignIn = createAssigner(function(object, source) {\n      copyObject(source, keysIn(source), object);\n    });\n\n    /**\n     * This method is like `_.assignIn` except that it accepts `customizer`\n     * which is invoked to produce the assigned values. If `customizer` returns\n     * `undefined`, assignment is handled by the method instead. The `customizer`\n     * is invoked with five arguments: (objValue, srcValue, key, object, source).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @alias extendWith\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} sources The source objects.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @see _.assignWith\n     * @example\n     *\n     * function customizer(objValue, srcValue) {\n     *   return _.isUndefined(objValue) ? srcValue : objValue;\n     * }\n     *\n     * var defaults = _.partialRight(_.assignInWith, customizer);\n     *\n     * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n     * // => { 'a': 1, 'b': 2 }\n     */\n    var assignInWith = createAssigner(function(object, source, srcIndex, customizer) {\n      copyObject(source, keysIn(source), object, customizer);\n    });\n\n    /**\n     * This method is like `_.assign` except that it accepts `customizer`\n     * which is invoked to produce the assigned values. If `customizer` returns\n     * `undefined`, assignment is handled by the method instead. The `customizer`\n     * is invoked with five arguments: (objValue, srcValue, key, object, source).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} sources The source objects.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @see _.assignInWith\n     * @example\n     *\n     * function customizer(objValue, srcValue) {\n     *   return _.isUndefined(objValue) ? srcValue : objValue;\n     * }\n     *\n     * var defaults = _.partialRight(_.assignWith, customizer);\n     *\n     * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n     * // => { 'a': 1, 'b': 2 }\n     */\n    var assignWith = createAssigner(function(object, source, srcIndex, customizer) {\n      copyObject(source, keys(source), object, customizer);\n    });\n\n    /**\n     * Creates an array of values corresponding to `paths` of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.0.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {...(string|string[])} [paths] The property paths to pick.\n     * @returns {Array} Returns the picked values.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n     *\n     * _.at(object, ['a[0].b.c', 'a[1]']);\n     * // => [3, 4]\n     */\n    var at = flatRest(baseAt);\n\n    /**\n     * Creates an object that inherits from the `prototype` object. If a\n     * `properties` object is given, its own enumerable string keyed properties\n     * are assigned to the created object.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.3.0\n     * @category Object\n     * @param {Object} prototype The object to inherit from.\n     * @param {Object} [properties] The properties to assign to the object.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * function Shape() {\n     *   this.x = 0;\n     *   this.y = 0;\n     * }\n     *\n     * function Circle() {\n     *   Shape.call(this);\n     * }\n     *\n     * Circle.prototype = _.create(Shape.prototype, {\n     *   'constructor': Circle\n     * });\n     *\n     * var circle = new Circle;\n     * circle instanceof Circle;\n     * // => true\n     *\n     * circle instanceof Shape;\n     * // => true\n     */\n    function create(prototype, properties) {\n      var result = baseCreate(prototype);\n      return properties == null ? result : baseAssign(result, properties);\n    }\n\n    /**\n     * Assigns own and inherited enumerable string keyed properties of source\n     * objects to the destination object for all destination properties that\n     * resolve to `undefined`. Source objects are applied from left to right.\n     * Once a property is set, additional values of the same property are ignored.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @see _.defaultsDeep\n     * @example\n     *\n     * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n     * // => { 'a': 1, 'b': 2 }\n     */\n    var defaults = baseRest(function(object, sources) {\n      object = Object(object);\n\n      var index = -1;\n      var length = sources.length;\n      var guard = length > 2 ? sources[2] : undefined;\n\n      if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n        length = 1;\n      }\n\n      while (++index < length) {\n        var source = sources[index];\n        var props = keysIn(source);\n        var propsIndex = -1;\n        var propsLength = props.length;\n\n        while (++propsIndex < propsLength) {\n          var key = props[propsIndex];\n          var value = object[key];\n\n          if (value === undefined ||\n              (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n            object[key] = source[key];\n          }\n        }\n      }\n\n      return object;\n    });\n\n    /**\n     * This method is like `_.defaults` except that it recursively assigns\n     * default properties.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.10.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @see _.defaults\n     * @example\n     *\n     * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } });\n     * // => { 'a': { 'b': 2, 'c': 3 } }\n     */\n    var defaultsDeep = baseRest(function(args) {\n      args.push(undefined, customDefaultsMerge);\n      return apply(mergeWith, undefined, args);\n    });\n\n    /**\n     * This method is like `_.find` except that it returns the key of the first\n     * element `predicate` returns truthy for instead of the element itself.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.1.0\n     * @category Object\n     * @param {Object} object The object to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {string|undefined} Returns the key of the matched element,\n     *  else `undefined`.\n     * @example\n     *\n     * var users = {\n     *   'barney':  { 'age': 36, 'active': true },\n     *   'fred':    { 'age': 40, 'active': false },\n     *   'pebbles': { 'age': 1,  'active': true }\n     * };\n     *\n     * _.findKey(users, function(o) { return o.age < 40; });\n     * // => 'barney' (iteration order is not guaranteed)\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.findKey(users, { 'age': 1, 'active': true });\n     * // => 'pebbles'\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.findKey(users, ['active', false]);\n     * // => 'fred'\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.findKey(users, 'active');\n     * // => 'barney'\n     */\n    function findKey(object, predicate) {\n      return baseFindKey(object, getIteratee(predicate, 3), baseForOwn);\n    }\n\n    /**\n     * This method is like `_.findKey` except that it iterates over elements of\n     * a collection in the opposite order.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Object\n     * @param {Object} object The object to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {string|undefined} Returns the key of the matched element,\n     *  else `undefined`.\n     * @example\n     *\n     * var users = {\n     *   'barney':  { 'age': 36, 'active': true },\n     *   'fred':    { 'age': 40, 'active': false },\n     *   'pebbles': { 'age': 1,  'active': true }\n     * };\n     *\n     * _.findLastKey(users, function(o) { return o.age < 40; });\n     * // => returns 'pebbles' assuming `_.findKey` returns 'barney'\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.findLastKey(users, { 'age': 36, 'active': true });\n     * // => 'barney'\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.findLastKey(users, ['active', false]);\n     * // => 'fred'\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.findLastKey(users, 'active');\n     * // => 'pebbles'\n     */\n    function findLastKey(object, predicate) {\n      return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight);\n    }\n\n    /**\n     * Iterates over own and inherited enumerable string keyed properties of an\n     * object and invokes `iteratee` for each property. The iteratee is invoked\n     * with three arguments: (value, key, object). Iteratee functions may exit\n     * iteration early by explicitly returning `false`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.3.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     * @see _.forInRight\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forIn(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed).\n     */\n    function forIn(object, iteratee) {\n      return object == null\n        ? object\n        : baseFor(object, getIteratee(iteratee, 3), keysIn);\n    }\n\n    /**\n     * This method is like `_.forIn` except that it iterates over properties of\n     * `object` in the opposite order.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     * @see _.forIn\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forInRight(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'.\n     */\n    function forInRight(object, iteratee) {\n      return object == null\n        ? object\n        : baseForRight(object, getIteratee(iteratee, 3), keysIn);\n    }\n\n    /**\n     * Iterates over own enumerable string keyed properties of an object and\n     * invokes `iteratee` for each property. The iteratee is invoked with three\n     * arguments: (value, key, object). Iteratee functions may exit iteration\n     * early by explicitly returning `false`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.3.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     * @see _.forOwnRight\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forOwn(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n     */\n    function forOwn(object, iteratee) {\n      return object && baseForOwn(object, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * This method is like `_.forOwn` except that it iterates over properties of\n     * `object` in the opposite order.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     * @see _.forOwn\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forOwnRight(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'.\n     */\n    function forOwnRight(object, iteratee) {\n      return object && baseForOwnRight(object, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * Creates an array of function property names from own enumerable properties\n     * of `object`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to inspect.\n     * @returns {Array} Returns the function names.\n     * @see _.functionsIn\n     * @example\n     *\n     * function Foo() {\n     *   this.a = _.constant('a');\n     *   this.b = _.constant('b');\n     * }\n     *\n     * Foo.prototype.c = _.constant('c');\n     *\n     * _.functions(new Foo);\n     * // => ['a', 'b']\n     */\n    function functions(object) {\n      return object == null ? [] : baseFunctions(object, keys(object));\n    }\n\n    /**\n     * Creates an array of function property names from own and inherited\n     * enumerable properties of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to inspect.\n     * @returns {Array} Returns the function names.\n     * @see _.functions\n     * @example\n     *\n     * function Foo() {\n     *   this.a = _.constant('a');\n     *   this.b = _.constant('b');\n     * }\n     *\n     * Foo.prototype.c = _.constant('c');\n     *\n     * _.functionsIn(new Foo);\n     * // => ['a', 'b', 'c']\n     */\n    function functionsIn(object) {\n      return object == null ? [] : baseFunctions(object, keysIn(object));\n    }\n\n    /**\n     * Gets the value at `path` of `object`. If the resolved value is\n     * `undefined`, the `defaultValue` is returned in its place.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.7.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the property to get.\n     * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n     * @returns {*} Returns the resolved value.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n     *\n     * _.get(object, 'a[0].b.c');\n     * // => 3\n     *\n     * _.get(object, ['a', '0', 'b', 'c']);\n     * // => 3\n     *\n     * _.get(object, 'a.b.c', 'default');\n     * // => 'default'\n     */\n    function get(object, path, defaultValue) {\n      var result = object == null ? undefined : baseGet(object, path);\n      return result === undefined ? defaultValue : result;\n    }\n\n    /**\n     * Checks if `path` is a direct property of `object`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path to check.\n     * @returns {boolean} Returns `true` if `path` exists, else `false`.\n     * @example\n     *\n     * var object = { 'a': { 'b': 2 } };\n     * var other = _.create({ 'a': _.create({ 'b': 2 }) });\n     *\n     * _.has(object, 'a');\n     * // => true\n     *\n     * _.has(object, 'a.b');\n     * // => true\n     *\n     * _.has(object, ['a', 'b']);\n     * // => true\n     *\n     * _.has(other, 'a');\n     * // => false\n     */\n    function has(object, path) {\n      return object != null && hasPath(object, path, baseHas);\n    }\n\n    /**\n     * Checks if `path` is a direct or inherited property of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path to check.\n     * @returns {boolean} Returns `true` if `path` exists, else `false`.\n     * @example\n     *\n     * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n     *\n     * _.hasIn(object, 'a');\n     * // => true\n     *\n     * _.hasIn(object, 'a.b');\n     * // => true\n     *\n     * _.hasIn(object, ['a', 'b']);\n     * // => true\n     *\n     * _.hasIn(object, 'b');\n     * // => false\n     */\n    function hasIn(object, path) {\n      return object != null && hasPath(object, path, baseHasIn);\n    }\n\n    /**\n     * Creates an object composed of the inverted keys and values of `object`.\n     * If `object` contains duplicate values, subsequent values overwrite\n     * property assignments of previous values.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.7.0\n     * @category Object\n     * @param {Object} object The object to invert.\n     * @returns {Object} Returns the new inverted object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2, 'c': 1 };\n     *\n     * _.invert(object);\n     * // => { '1': 'c', '2': 'b' }\n     */\n    var invert = createInverter(function(result, value, key) {\n      if (value != null &&\n          typeof value.toString != 'function') {\n        value = nativeObjectToString.call(value);\n      }\n\n      result[value] = key;\n    }, constant(identity));\n\n    /**\n     * This method is like `_.invert` except that the inverted object is generated\n     * from the results of running each element of `object` thru `iteratee`. The\n     * corresponding inverted value of each inverted key is an array of keys\n     * responsible for generating the inverted value. The iteratee is invoked\n     * with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.1.0\n     * @category Object\n     * @param {Object} object The object to invert.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Object} Returns the new inverted object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2, 'c': 1 };\n     *\n     * _.invertBy(object);\n     * // => { '1': ['a', 'c'], '2': ['b'] }\n     *\n     * _.invertBy(object, function(value) {\n     *   return 'group' + value;\n     * });\n     * // => { 'group1': ['a', 'c'], 'group2': ['b'] }\n     */\n    var invertBy = createInverter(function(result, value, key) {\n      if (value != null &&\n          typeof value.toString != 'function') {\n        value = nativeObjectToString.call(value);\n      }\n\n      if (hasOwnProperty.call(result, value)) {\n        result[value].push(key);\n      } else {\n        result[value] = [key];\n      }\n    }, getIteratee);\n\n    /**\n     * Invokes the method at `path` of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the method to invoke.\n     * @param {...*} [args] The arguments to invoke the method with.\n     * @returns {*} Returns the result of the invoked method.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] };\n     *\n     * _.invoke(object, 'a[0].b.c.slice', 1, 3);\n     * // => [2, 3]\n     */\n    var invoke = baseRest(baseInvoke);\n\n    /**\n     * Creates an array of the own enumerable property names of `object`.\n     *\n     * **Note:** Non-object values are coerced to objects. See the\n     * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n     * for more details.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.keys(new Foo);\n     * // => ['a', 'b'] (iteration order is not guaranteed)\n     *\n     * _.keys('hi');\n     * // => ['0', '1']\n     */\n    function keys(object) {\n      return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n    }\n\n    /**\n     * Creates an array of the own and inherited enumerable property names of `object`.\n     *\n     * **Note:** Non-object values are coerced to objects.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.keysIn(new Foo);\n     * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n     */\n    function keysIn(object) {\n      return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n    }\n\n    /**\n     * The opposite of `_.mapValues`; this method creates an object with the\n     * same values as `object` and keys generated by running each own enumerable\n     * string keyed property of `object` thru `iteratee`. The iteratee is invoked\n     * with three arguments: (value, key, object).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.8.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns the new mapped object.\n     * @see _.mapValues\n     * @example\n     *\n     * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) {\n     *   return key + value;\n     * });\n     * // => { 'a1': 1, 'b2': 2 }\n     */\n    function mapKeys(object, iteratee) {\n      var result = {};\n      iteratee = getIteratee(iteratee, 3);\n\n      baseForOwn(object, function(value, key, object) {\n        baseAssignValue(result, iteratee(value, key, object), value);\n      });\n      return result;\n    }\n\n    /**\n     * Creates an object with the same keys as `object` and values generated\n     * by running each own enumerable string keyed property of `object` thru\n     * `iteratee`. The iteratee is invoked with three arguments:\n     * (value, key, object).\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns the new mapped object.\n     * @see _.mapKeys\n     * @example\n     *\n     * var users = {\n     *   'fred':    { 'user': 'fred',    'age': 40 },\n     *   'pebbles': { 'user': 'pebbles', 'age': 1 }\n     * };\n     *\n     * _.mapValues(users, function(o) { return o.age; });\n     * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.mapValues(users, 'age');\n     * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n     */\n    function mapValues(object, iteratee) {\n      var result = {};\n      iteratee = getIteratee(iteratee, 3);\n\n      baseForOwn(object, function(value, key, object) {\n        baseAssignValue(result, key, iteratee(value, key, object));\n      });\n      return result;\n    }\n\n    /**\n     * This method is like `_.assign` except that it recursively merges own and\n     * inherited enumerable string keyed properties of source objects into the\n     * destination object. Source properties that resolve to `undefined` are\n     * skipped if a destination value exists. Array and plain object properties\n     * are merged recursively. Other objects and value types are overridden by\n     * assignment. Source objects are applied from left to right. Subsequent\n     * sources overwrite property assignments of previous sources.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.5.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = {\n     *   'a': [{ 'b': 2 }, { 'd': 4 }]\n     * };\n     *\n     * var other = {\n     *   'a': [{ 'c': 3 }, { 'e': 5 }]\n     * };\n     *\n     * _.merge(object, other);\n     * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n     */\n    var merge = createAssigner(function(object, source, srcIndex) {\n      baseMerge(object, source, srcIndex);\n    });\n\n    /**\n     * This method is like `_.merge` except that it accepts `customizer` which\n     * is invoked to produce the merged values of the destination and source\n     * properties. If `customizer` returns `undefined`, merging is handled by the\n     * method instead. The `customizer` is invoked with six arguments:\n     * (objValue, srcValue, key, object, source, stack).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} sources The source objects.\n     * @param {Function} customizer The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * function customizer(objValue, srcValue) {\n     *   if (_.isArray(objValue)) {\n     *     return objValue.concat(srcValue);\n     *   }\n     * }\n     *\n     * var object = { 'a': [1], 'b': [2] };\n     * var other = { 'a': [3], 'b': [4] };\n     *\n     * _.mergeWith(object, other, customizer);\n     * // => { 'a': [1, 3], 'b': [2, 4] }\n     */\n    var mergeWith = createAssigner(function(object, source, srcIndex, customizer) {\n      baseMerge(object, source, srcIndex, customizer);\n    });\n\n    /**\n     * The opposite of `_.pick`; this method creates an object composed of the\n     * own and inherited enumerable property paths of `object` that are not omitted.\n     *\n     * **Note:** This method is considerably slower than `_.pick`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The source object.\n     * @param {...(string|string[])} [paths] The property paths to omit.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\n     *\n     * _.omit(object, ['a', 'c']);\n     * // => { 'b': '2' }\n     */\n    var omit = flatRest(function(object, paths) {\n      var result = {};\n      if (object == null) {\n        return result;\n      }\n      var isDeep = false;\n      paths = arrayMap(paths, function(path) {\n        path = castPath(path, object);\n        isDeep || (isDeep = path.length > 1);\n        return path;\n      });\n      copyObject(object, getAllKeysIn(object), result);\n      if (isDeep) {\n        result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);\n      }\n      var length = paths.length;\n      while (length--) {\n        baseUnset(result, paths[length]);\n      }\n      return result;\n    });\n\n    /**\n     * The opposite of `_.pickBy`; this method creates an object composed of\n     * the own and inherited enumerable string keyed properties of `object` that\n     * `predicate` doesn't return truthy for. The predicate is invoked with two\n     * arguments: (value, key).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The source object.\n     * @param {Function} [predicate=_.identity] The function invoked per property.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\n     *\n     * _.omitBy(object, _.isNumber);\n     * // => { 'b': '2' }\n     */\n    function omitBy(object, predicate) {\n      return pickBy(object, negate(getIteratee(predicate)));\n    }\n\n    /**\n     * Creates an object composed of the picked `object` properties.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The source object.\n     * @param {...(string|string[])} [paths] The property paths to pick.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\n     *\n     * _.pick(object, ['a', 'c']);\n     * // => { 'a': 1, 'c': 3 }\n     */\n    var pick = flatRest(function(object, paths) {\n      return object == null ? {} : basePick(object, paths);\n    });\n\n    /**\n     * Creates an object composed of the `object` properties `predicate` returns\n     * truthy for. The predicate is invoked with two arguments: (value, key).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The source object.\n     * @param {Function} [predicate=_.identity] The function invoked per property.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\n     *\n     * _.pickBy(object, _.isNumber);\n     * // => { 'a': 1, 'c': 3 }\n     */\n    function pickBy(object, predicate) {\n      if (object == null) {\n        return {};\n      }\n      var props = arrayMap(getAllKeysIn(object), function(prop) {\n        return [prop];\n      });\n      predicate = getIteratee(predicate);\n      return basePickBy(object, props, function(value, path) {\n        return predicate(value, path[0]);\n      });\n    }\n\n    /**\n     * This method is like `_.get` except that if the resolved value is a\n     * function it's invoked with the `this` binding of its parent object and\n     * its result is returned.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the property to resolve.\n     * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n     * @returns {*} Returns the resolved value.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] };\n     *\n     * _.result(object, 'a[0].b.c1');\n     * // => 3\n     *\n     * _.result(object, 'a[0].b.c2');\n     * // => 4\n     *\n     * _.result(object, 'a[0].b.c3', 'default');\n     * // => 'default'\n     *\n     * _.result(object, 'a[0].b.c3', _.constant('default'));\n     * // => 'default'\n     */\n    function result(object, path, defaultValue) {\n      path = castPath(path, object);\n\n      var index = -1,\n          length = path.length;\n\n      // Ensure the loop is entered when path is empty.\n      if (!length) {\n        length = 1;\n        object = undefined;\n      }\n      while (++index < length) {\n        var value = object == null ? undefined : object[toKey(path[index])];\n        if (value === undefined) {\n          index = length;\n          value = defaultValue;\n        }\n        object = isFunction(value) ? value.call(object) : value;\n      }\n      return object;\n    }\n\n    /**\n     * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\n     * it's created. Arrays are created for missing index properties while objects\n     * are created for all other missing properties. Use `_.setWith` to customize\n     * `path` creation.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.7.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n     *\n     * _.set(object, 'a[0].b.c', 4);\n     * console.log(object.a[0].b.c);\n     * // => 4\n     *\n     * _.set(object, ['x', '0', 'y', 'z'], 5);\n     * console.log(object.x[0].y.z);\n     * // => 5\n     */\n    function set(object, path, value) {\n      return object == null ? object : baseSet(object, path, value);\n    }\n\n    /**\n     * This method is like `_.set` except that it accepts `customizer` which is\n     * invoked to produce the objects of `path`.  If `customizer` returns `undefined`\n     * path creation is handled by the method instead. The `customizer` is invoked\n     * with three arguments: (nsValue, key, nsObject).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {*} value The value to set.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = {};\n     *\n     * _.setWith(object, '[0][1]', 'a', Object);\n     * // => { '0': { '1': 'a' } }\n     */\n    function setWith(object, path, value, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return object == null ? object : baseSet(object, path, value, customizer);\n    }\n\n    /**\n     * Creates an array of own enumerable string keyed-value pairs for `object`\n     * which can be consumed by `_.fromPairs`. If `object` is a map or set, its\n     * entries are returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @alias entries\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the key-value pairs.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.toPairs(new Foo);\n     * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed)\n     */\n    var toPairs = createToPairs(keys);\n\n    /**\n     * Creates an array of own and inherited enumerable string keyed-value pairs\n     * for `object` which can be consumed by `_.fromPairs`. If `object` is a map\n     * or set, its entries are returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @alias entriesIn\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the key-value pairs.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.toPairsIn(new Foo);\n     * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed)\n     */\n    var toPairsIn = createToPairs(keysIn);\n\n    /**\n     * An alternative to `_.reduce`; this method transforms `object` to a new\n     * `accumulator` object which is the result of running each of its own\n     * enumerable string keyed properties thru `iteratee`, with each invocation\n     * potentially mutating the `accumulator` object. If `accumulator` is not\n     * provided, a new object with the same `[[Prototype]]` will be used. The\n     * iteratee is invoked with four arguments: (accumulator, value, key, object).\n     * Iteratee functions may exit iteration early by explicitly returning `false`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.3.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {*} [accumulator] The custom accumulator value.\n     * @returns {*} Returns the accumulated value.\n     * @example\n     *\n     * _.transform([2, 3, 4], function(result, n) {\n     *   result.push(n *= n);\n     *   return n % 2 == 0;\n     * }, []);\n     * // => [4, 9]\n     *\n     * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n     *   (result[value] || (result[value] = [])).push(key);\n     * }, {});\n     * // => { '1': ['a', 'c'], '2': ['b'] }\n     */\n    function transform(object, iteratee, accumulator) {\n      var isArr = isArray(object),\n          isArrLike = isArr || isBuffer(object) || isTypedArray(object);\n\n      iteratee = getIteratee(iteratee, 4);\n      if (accumulator == null) {\n        var Ctor = object && object.constructor;\n        if (isArrLike) {\n          accumulator = isArr ? new Ctor : [];\n        }\n        else if (isObject(object)) {\n          accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {};\n        }\n        else {\n          accumulator = {};\n        }\n      }\n      (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) {\n        return iteratee(accumulator, value, index, object);\n      });\n      return accumulator;\n    }\n\n    /**\n     * Removes the property at `path` of `object`.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to unset.\n     * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 7 } }] };\n     * _.unset(object, 'a[0].b.c');\n     * // => true\n     *\n     * console.log(object);\n     * // => { 'a': [{ 'b': {} }] };\n     *\n     * _.unset(object, ['a', '0', 'b', 'c']);\n     * // => true\n     *\n     * console.log(object);\n     * // => { 'a': [{ 'b': {} }] };\n     */\n    function unset(object, path) {\n      return object == null ? true : baseUnset(object, path);\n    }\n\n    /**\n     * This method is like `_.set` except that accepts `updater` to produce the\n     * value to set. Use `_.updateWith` to customize `path` creation. The `updater`\n     * is invoked with one argument: (value).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.6.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {Function} updater The function to produce the updated value.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n     *\n     * _.update(object, 'a[0].b.c', function(n) { return n * n; });\n     * console.log(object.a[0].b.c);\n     * // => 9\n     *\n     * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; });\n     * console.log(object.x[0].y.z);\n     * // => 0\n     */\n    function update(object, path, updater) {\n      return object == null ? object : baseUpdate(object, path, castFunction(updater));\n    }\n\n    /**\n     * This method is like `_.update` except that it accepts `customizer` which is\n     * invoked to produce the objects of `path`.  If `customizer` returns `undefined`\n     * path creation is handled by the method instead. The `customizer` is invoked\n     * with three arguments: (nsValue, key, nsObject).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.6.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {Function} updater The function to produce the updated value.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = {};\n     *\n     * _.updateWith(object, '[0][1]', _.constant('a'), Object);\n     * // => { '0': { '1': 'a' } }\n     */\n    function updateWith(object, path, updater, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer);\n    }\n\n    /**\n     * Creates an array of the own enumerable string keyed property values of `object`.\n     *\n     * **Note:** Non-object values are coerced to objects.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property values.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.values(new Foo);\n     * // => [1, 2] (iteration order is not guaranteed)\n     *\n     * _.values('hi');\n     * // => ['h', 'i']\n     */\n    function values(object) {\n      return object == null ? [] : baseValues(object, keys(object));\n    }\n\n    /**\n     * Creates an array of the own and inherited enumerable string keyed property\n     * values of `object`.\n     *\n     * **Note:** Non-object values are coerced to objects.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property values.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.valuesIn(new Foo);\n     * // => [1, 2, 3] (iteration order is not guaranteed)\n     */\n    function valuesIn(object) {\n      return object == null ? [] : baseValues(object, keysIn(object));\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Clamps `number` within the inclusive `lower` and `upper` bounds.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Number\n     * @param {number} number The number to clamp.\n     * @param {number} [lower] The lower bound.\n     * @param {number} upper The upper bound.\n     * @returns {number} Returns the clamped number.\n     * @example\n     *\n     * _.clamp(-10, -5, 5);\n     * // => -5\n     *\n     * _.clamp(10, -5, 5);\n     * // => 5\n     */\n    function clamp(number, lower, upper) {\n      if (upper === undefined) {\n        upper = lower;\n        lower = undefined;\n      }\n      if (upper !== undefined) {\n        upper = toNumber(upper);\n        upper = upper === upper ? upper : 0;\n      }\n      if (lower !== undefined) {\n        lower = toNumber(lower);\n        lower = lower === lower ? lower : 0;\n      }\n      return baseClamp(toNumber(number), lower, upper);\n    }\n\n    /**\n     * Checks if `n` is between `start` and up to, but not including, `end`. If\n     * `end` is not specified, it's set to `start` with `start` then set to `0`.\n     * If `start` is greater than `end` the params are swapped to support\n     * negative ranges.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.3.0\n     * @category Number\n     * @param {number} number The number to check.\n     * @param {number} [start=0] The start of the range.\n     * @param {number} end The end of the range.\n     * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n     * @see _.range, _.rangeRight\n     * @example\n     *\n     * _.inRange(3, 2, 4);\n     * // => true\n     *\n     * _.inRange(4, 8);\n     * // => true\n     *\n     * _.inRange(4, 2);\n     * // => false\n     *\n     * _.inRange(2, 2);\n     * // => false\n     *\n     * _.inRange(1.2, 2);\n     * // => true\n     *\n     * _.inRange(5.2, 4);\n     * // => false\n     *\n     * _.inRange(-3, -2, -6);\n     * // => true\n     */\n    function inRange(number, start, end) {\n      start = toFinite(start);\n      if (end === undefined) {\n        end = start;\n        start = 0;\n      } else {\n        end = toFinite(end);\n      }\n      number = toNumber(number);\n      return baseInRange(number, start, end);\n    }\n\n    /**\n     * Produces a random number between the inclusive `lower` and `upper` bounds.\n     * If only one argument is provided a number between `0` and the given number\n     * is returned. If `floating` is `true`, or either `lower` or `upper` are\n     * floats, a floating-point number is returned instead of an integer.\n     *\n     * **Note:** JavaScript follows the IEEE-754 standard for resolving\n     * floating-point values which can produce unexpected results.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.7.0\n     * @category Number\n     * @param {number} [lower=0] The lower bound.\n     * @param {number} [upper=1] The upper bound.\n     * @param {boolean} [floating] Specify returning a floating-point number.\n     * @returns {number} Returns the random number.\n     * @example\n     *\n     * _.random(0, 5);\n     * // => an integer between 0 and 5\n     *\n     * _.random(5);\n     * // => also an integer between 0 and 5\n     *\n     * _.random(5, true);\n     * // => a floating-point number between 0 and 5\n     *\n     * _.random(1.2, 5.2);\n     * // => a floating-point number between 1.2 and 5.2\n     */\n    function random(lower, upper, floating) {\n      if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) {\n        upper = floating = undefined;\n      }\n      if (floating === undefined) {\n        if (typeof upper == 'boolean') {\n          floating = upper;\n          upper = undefined;\n        }\n        else if (typeof lower == 'boolean') {\n          floating = lower;\n          lower = undefined;\n        }\n      }\n      if (lower === undefined && upper === undefined) {\n        lower = 0;\n        upper = 1;\n      }\n      else {\n        lower = toFinite(lower);\n        if (upper === undefined) {\n          upper = lower;\n          lower = 0;\n        } else {\n          upper = toFinite(upper);\n        }\n      }\n      if (lower > upper) {\n        var temp = lower;\n        lower = upper;\n        upper = temp;\n      }\n      if (floating || lower % 1 || upper % 1) {\n        var rand = nativeRandom();\n        return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper);\n      }\n      return baseRandom(lower, upper);\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the camel cased string.\n     * @example\n     *\n     * _.camelCase('Foo Bar');\n     * // => 'fooBar'\n     *\n     * _.camelCase('--foo-bar--');\n     * // => 'fooBar'\n     *\n     * _.camelCase('__FOO_BAR__');\n     * // => 'fooBar'\n     */\n    var camelCase = createCompounder(function(result, word, index) {\n      word = word.toLowerCase();\n      return result + (index ? capitalize(word) : word);\n    });\n\n    /**\n     * Converts the first character of `string` to upper case and the remaining\n     * to lower case.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to capitalize.\n     * @returns {string} Returns the capitalized string.\n     * @example\n     *\n     * _.capitalize('FRED');\n     * // => 'Fred'\n     */\n    function capitalize(string) {\n      return upperFirst(toString(string).toLowerCase());\n    }\n\n    /**\n     * Deburrs `string` by converting\n     * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)\n     * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)\n     * letters to basic Latin letters and removing\n     * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to deburr.\n     * @returns {string} Returns the deburred string.\n     * @example\n     *\n     * _.deburr('déjà vu');\n     * // => 'deja vu'\n     */\n    function deburr(string) {\n      string = toString(string);\n      return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');\n    }\n\n    /**\n     * Checks if `string` ends with the given target string.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to inspect.\n     * @param {string} [target] The string to search for.\n     * @param {number} [position=string.length] The position to search up to.\n     * @returns {boolean} Returns `true` if `string` ends with `target`,\n     *  else `false`.\n     * @example\n     *\n     * _.endsWith('abc', 'c');\n     * // => true\n     *\n     * _.endsWith('abc', 'b');\n     * // => false\n     *\n     * _.endsWith('abc', 'b', 2);\n     * // => true\n     */\n    function endsWith(string, target, position) {\n      string = toString(string);\n      target = baseToString(target);\n\n      var length = string.length;\n      position = position === undefined\n        ? length\n        : baseClamp(toInteger(position), 0, length);\n\n      var end = position;\n      position -= target.length;\n      return position >= 0 && string.slice(position, end) == target;\n    }\n\n    /**\n     * Converts the characters \"&\", \"<\", \">\", '\"', and \"'\" in `string` to their\n     * corresponding HTML entities.\n     *\n     * **Note:** No other characters are escaped. To escape additional\n     * characters use a third-party library like [_he_](https://mths.be/he).\n     *\n     * Though the \">\" character is escaped for symmetry, characters like\n     * \">\" and \"/\" don't need escaping in HTML and have no special meaning\n     * unless they're part of a tag or unquoted attribute value. See\n     * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)\n     * (under \"semi-related fun fact\") for more details.\n     *\n     * When working with HTML you should always\n     * [quote attribute values](http://wonko.com/post/html-escaping) to reduce\n     * XSS vectors.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category String\n     * @param {string} [string=''] The string to escape.\n     * @returns {string} Returns the escaped string.\n     * @example\n     *\n     * _.escape('fred, barney, & pebbles');\n     * // => 'fred, barney, &amp; pebbles'\n     */\n    function escape(string) {\n      string = toString(string);\n      return (string && reHasUnescapedHtml.test(string))\n        ? string.replace(reUnescapedHtml, escapeHtmlChar)\n        : string;\n    }\n\n    /**\n     * Escapes the `RegExp` special characters \"^\", \"$\", \"\\\", \".\", \"*\", \"+\",\n     * \"?\", \"(\", \")\", \"[\", \"]\", \"{\", \"}\", and \"|\" in `string`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to escape.\n     * @returns {string} Returns the escaped string.\n     * @example\n     *\n     * _.escapeRegExp('[lodash](https://lodash.com/)');\n     * // => '\\[lodash\\]\\(https://lodash\\.com/\\)'\n     */\n    function escapeRegExp(string) {\n      string = toString(string);\n      return (string && reHasRegExpChar.test(string))\n        ? string.replace(reRegExpChar, '\\\\$&')\n        : string;\n    }\n\n    /**\n     * Converts `string` to\n     * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the kebab cased string.\n     * @example\n     *\n     * _.kebabCase('Foo Bar');\n     * // => 'foo-bar'\n     *\n     * _.kebabCase('fooBar');\n     * // => 'foo-bar'\n     *\n     * _.kebabCase('__FOO_BAR__');\n     * // => 'foo-bar'\n     */\n    var kebabCase = createCompounder(function(result, word, index) {\n      return result + (index ? '-' : '') + word.toLowerCase();\n    });\n\n    /**\n     * Converts `string`, as space separated words, to lower case.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the lower cased string.\n     * @example\n     *\n     * _.lowerCase('--Foo-Bar--');\n     * // => 'foo bar'\n     *\n     * _.lowerCase('fooBar');\n     * // => 'foo bar'\n     *\n     * _.lowerCase('__FOO_BAR__');\n     * // => 'foo bar'\n     */\n    var lowerCase = createCompounder(function(result, word, index) {\n      return result + (index ? ' ' : '') + word.toLowerCase();\n    });\n\n    /**\n     * Converts the first character of `string` to lower case.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the converted string.\n     * @example\n     *\n     * _.lowerFirst('Fred');\n     * // => 'fred'\n     *\n     * _.lowerFirst('FRED');\n     * // => 'fRED'\n     */\n    var lowerFirst = createCaseFirst('toLowerCase');\n\n    /**\n     * Pads `string` on the left and right sides if it's shorter than `length`.\n     * Padding characters are truncated if they can't be evenly divided by `length`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to pad.\n     * @param {number} [length=0] The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the padded string.\n     * @example\n     *\n     * _.pad('abc', 8);\n     * // => '  abc   '\n     *\n     * _.pad('abc', 8, '_-');\n     * // => '_-abc_-_'\n     *\n     * _.pad('abc', 3);\n     * // => 'abc'\n     */\n    function pad(string, length, chars) {\n      string = toString(string);\n      length = toInteger(length);\n\n      var strLength = length ? stringSize(string) : 0;\n      if (!length || strLength >= length) {\n        return string;\n      }\n      var mid = (length - strLength) / 2;\n      return (\n        createPadding(nativeFloor(mid), chars) +\n        string +\n        createPadding(nativeCeil(mid), chars)\n      );\n    }\n\n    /**\n     * Pads `string` on the right side if it's shorter than `length`. Padding\n     * characters are truncated if they exceed `length`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to pad.\n     * @param {number} [length=0] The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the padded string.\n     * @example\n     *\n     * _.padEnd('abc', 6);\n     * // => 'abc   '\n     *\n     * _.padEnd('abc', 6, '_-');\n     * // => 'abc_-_'\n     *\n     * _.padEnd('abc', 3);\n     * // => 'abc'\n     */\n    function padEnd(string, length, chars) {\n      string = toString(string);\n      length = toInteger(length);\n\n      var strLength = length ? stringSize(string) : 0;\n      return (length && strLength < length)\n        ? (string + createPadding(length - strLength, chars))\n        : string;\n    }\n\n    /**\n     * Pads `string` on the left side if it's shorter than `length`. Padding\n     * characters are truncated if they exceed `length`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to pad.\n     * @param {number} [length=0] The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the padded string.\n     * @example\n     *\n     * _.padStart('abc', 6);\n     * // => '   abc'\n     *\n     * _.padStart('abc', 6, '_-');\n     * // => '_-_abc'\n     *\n     * _.padStart('abc', 3);\n     * // => 'abc'\n     */\n    function padStart(string, length, chars) {\n      string = toString(string);\n      length = toInteger(length);\n\n      var strLength = length ? stringSize(string) : 0;\n      return (length && strLength < length)\n        ? (createPadding(length - strLength, chars) + string)\n        : string;\n    }\n\n    /**\n     * Converts `string` to an integer of the specified radix. If `radix` is\n     * `undefined` or `0`, a `radix` of `10` is used unless `value` is a\n     * hexadecimal, in which case a `radix` of `16` is used.\n     *\n     * **Note:** This method aligns with the\n     * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.1.0\n     * @category String\n     * @param {string} string The string to convert.\n     * @param {number} [radix=10] The radix to interpret `value` by.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {number} Returns the converted integer.\n     * @example\n     *\n     * _.parseInt('08');\n     * // => 8\n     *\n     * _.map(['6', '08', '10'], _.parseInt);\n     * // => [6, 8, 10]\n     */\n    function parseInt(string, radix, guard) {\n      if (guard || radix == null) {\n        radix = 0;\n      } else if (radix) {\n        radix = +radix;\n      }\n      return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0);\n    }\n\n    /**\n     * Repeats the given string `n` times.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to repeat.\n     * @param {number} [n=1] The number of times to repeat the string.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {string} Returns the repeated string.\n     * @example\n     *\n     * _.repeat('*', 3);\n     * // => '***'\n     *\n     * _.repeat('abc', 2);\n     * // => 'abcabc'\n     *\n     * _.repeat('abc', 0);\n     * // => ''\n     */\n    function repeat(string, n, guard) {\n      if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) {\n        n = 1;\n      } else {\n        n = toInteger(n);\n      }\n      return baseRepeat(toString(string), n);\n    }\n\n    /**\n     * Replaces matches for `pattern` in `string` with `replacement`.\n     *\n     * **Note:** This method is based on\n     * [`String#replace`](https://mdn.io/String/replace).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to modify.\n     * @param {RegExp|string} pattern The pattern to replace.\n     * @param {Function|string} replacement The match replacement.\n     * @returns {string} Returns the modified string.\n     * @example\n     *\n     * _.replace('Hi Fred', 'Fred', 'Barney');\n     * // => 'Hi Barney'\n     */\n    function replace() {\n      var args = arguments,\n          string = toString(args[0]);\n\n      return args.length < 3 ? string : string.replace(args[1], args[2]);\n    }\n\n    /**\n     * Converts `string` to\n     * [snake case](https://en.wikipedia.org/wiki/Snake_case).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the snake cased string.\n     * @example\n     *\n     * _.snakeCase('Foo Bar');\n     * // => 'foo_bar'\n     *\n     * _.snakeCase('fooBar');\n     * // => 'foo_bar'\n     *\n     * _.snakeCase('--FOO-BAR--');\n     * // => 'foo_bar'\n     */\n    var snakeCase = createCompounder(function(result, word, index) {\n      return result + (index ? '_' : '') + word.toLowerCase();\n    });\n\n    /**\n     * Splits `string` by `separator`.\n     *\n     * **Note:** This method is based on\n     * [`String#split`](https://mdn.io/String/split).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to split.\n     * @param {RegExp|string} separator The separator pattern to split by.\n     * @param {number} [limit] The length to truncate results to.\n     * @returns {Array} Returns the string segments.\n     * @example\n     *\n     * _.split('a-b-c', '-', 2);\n     * // => ['a', 'b']\n     */\n    function split(string, separator, limit) {\n      if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) {\n        separator = limit = undefined;\n      }\n      limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0;\n      if (!limit) {\n        return [];\n      }\n      string = toString(string);\n      if (string && (\n            typeof separator == 'string' ||\n            (separator != null && !isRegExp(separator))\n          )) {\n        separator = baseToString(separator);\n        if (!separator && hasUnicode(string)) {\n          return castSlice(stringToArray(string), 0, limit);\n        }\n      }\n      return string.split(separator, limit);\n    }\n\n    /**\n     * Converts `string` to\n     * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.1.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the start cased string.\n     * @example\n     *\n     * _.startCase('--foo-bar--');\n     * // => 'Foo Bar'\n     *\n     * _.startCase('fooBar');\n     * // => 'Foo Bar'\n     *\n     * _.startCase('__FOO_BAR__');\n     * // => 'FOO BAR'\n     */\n    var startCase = createCompounder(function(result, word, index) {\n      return result + (index ? ' ' : '') + upperFirst(word);\n    });\n\n    /**\n     * Checks if `string` starts with the given target string.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to inspect.\n     * @param {string} [target] The string to search for.\n     * @param {number} [position=0] The position to search from.\n     * @returns {boolean} Returns `true` if `string` starts with `target`,\n     *  else `false`.\n     * @example\n     *\n     * _.startsWith('abc', 'a');\n     * // => true\n     *\n     * _.startsWith('abc', 'b');\n     * // => false\n     *\n     * _.startsWith('abc', 'b', 1);\n     * // => true\n     */\n    function startsWith(string, target, position) {\n      string = toString(string);\n      position = position == null\n        ? 0\n        : baseClamp(toInteger(position), 0, string.length);\n\n      target = baseToString(target);\n      return string.slice(position, position + target.length) == target;\n    }\n\n    /**\n     * Creates a compiled template function that can interpolate data properties\n     * in \"interpolate\" delimiters, HTML-escape interpolated data properties in\n     * \"escape\" delimiters, and execute JavaScript in \"evaluate\" delimiters. Data\n     * properties may be accessed as free variables in the template. If a setting\n     * object is given, it takes precedence over `_.templateSettings` values.\n     *\n     * **Note:** In the development build `_.template` utilizes\n     * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl)\n     * for easier debugging.\n     *\n     * For more information on precompiling templates see\n     * [lodash's custom builds documentation](https://lodash.com/custom-builds).\n     *\n     * For more information on Chrome extension sandboxes see\n     * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval).\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category String\n     * @param {string} [string=''] The template string.\n     * @param {Object} [options={}] The options object.\n     * @param {RegExp} [options.escape=_.templateSettings.escape]\n     *  The HTML \"escape\" delimiter.\n     * @param {RegExp} [options.evaluate=_.templateSettings.evaluate]\n     *  The \"evaluate\" delimiter.\n     * @param {Object} [options.imports=_.templateSettings.imports]\n     *  An object to import into the template as free variables.\n     * @param {RegExp} [options.interpolate=_.templateSettings.interpolate]\n     *  The \"interpolate\" delimiter.\n     * @param {string} [options.sourceURL='lodash.templateSources[n]']\n     *  The sourceURL of the compiled template.\n     * @param {string} [options.variable='obj']\n     *  The data object variable name.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Function} Returns the compiled template function.\n     * @example\n     *\n     * // Use the \"interpolate\" delimiter to create a compiled template.\n     * var compiled = _.template('hello <%= user %>!');\n     * compiled({ 'user': 'fred' });\n     * // => 'hello fred!'\n     *\n     * // Use the HTML \"escape\" delimiter to escape data property values.\n     * var compiled = _.template('<b><%- value %></b>');\n     * compiled({ 'value': '<script>' });\n     * // => '<b>&lt;script&gt;</b>'\n     *\n     * // Use the \"evaluate\" delimiter to execute JavaScript and generate HTML.\n     * var compiled = _.template('<% _.forEach(users, function(user) { %><li><%- user %></li><% }); %>');\n     * compiled({ 'users': ['fred', 'barney'] });\n     * // => '<li>fred</li><li>barney</li>'\n     *\n     * // Use the internal `print` function in \"evaluate\" delimiters.\n     * var compiled = _.template('<% print(\"hello \" + user); %>!');\n     * compiled({ 'user': 'barney' });\n     * // => 'hello barney!'\n     *\n     * // Use the ES template literal delimiter as an \"interpolate\" delimiter.\n     * // Disable support by replacing the \"interpolate\" delimiter.\n     * var compiled = _.template('hello ${ user }!');\n     * compiled({ 'user': 'pebbles' });\n     * // => 'hello pebbles!'\n     *\n     * // Use backslashes to treat delimiters as plain text.\n     * var compiled = _.template('<%= \"\\\\<%- value %\\\\>\" %>');\n     * compiled({ 'value': 'ignored' });\n     * // => '<%- value %>'\n     *\n     * // Use the `imports` option to import `jQuery` as `jq`.\n     * var text = '<% jq.each(users, function(user) { %><li><%- user %></li><% }); %>';\n     * var compiled = _.template(text, { 'imports': { 'jq': jQuery } });\n     * compiled({ 'users': ['fred', 'barney'] });\n     * // => '<li>fred</li><li>barney</li>'\n     *\n     * // Use the `sourceURL` option to specify a custom sourceURL for the template.\n     * var compiled = _.template('hello <%= user %>!', { 'sourceURL': '/basic/greeting.jst' });\n     * compiled(data);\n     * // => Find the source of \"greeting.jst\" under the Sources tab or Resources panel of the web inspector.\n     *\n     * // Use the `variable` option to ensure a with-statement isn't used in the compiled template.\n     * var compiled = _.template('hi <%= data.user %>!', { 'variable': 'data' });\n     * compiled.source;\n     * // => function(data) {\n     * //   var __t, __p = '';\n     * //   __p += 'hi ' + ((__t = ( data.user )) == null ? '' : __t) + '!';\n     * //   return __p;\n     * // }\n     *\n     * // Use custom template delimiters.\n     * _.templateSettings.interpolate = /{{([\\s\\S]+?)}}/g;\n     * var compiled = _.template('hello {{ user }}!');\n     * compiled({ 'user': 'mustache' });\n     * // => 'hello mustache!'\n     *\n     * // Use the `source` property to inline compiled templates for meaningful\n     * // line numbers in error messages and stack traces.\n     * fs.writeFileSync(path.join(process.cwd(), 'jst.js'), '\\\n     *   var JST = {\\\n     *     \"main\": ' + _.template(mainText).source + '\\\n     *   };\\\n     * ');\n     */\n    function template(string, options, guard) {\n      // Based on John Resig's `tmpl` implementation\n      // (http://ejohn.org/blog/javascript-micro-templating/)\n      // and Laura Doktorova's doT.js (https://github.com/olado/doT).\n      var settings = lodash.templateSettings;\n\n      if (guard && isIterateeCall(string, options, guard)) {\n        options = undefined;\n      }\n      string = toString(string);\n      options = assignInWith({}, options, settings, customDefaultsAssignIn);\n\n      var imports = assignInWith({}, options.imports, settings.imports, customDefaultsAssignIn),\n          importsKeys = keys(imports),\n          importsValues = baseValues(imports, importsKeys);\n\n      var isEscaping,\n          isEvaluating,\n          index = 0,\n          interpolate = options.interpolate || reNoMatch,\n          source = \"__p += '\";\n\n      // Compile the regexp to match each delimiter.\n      var reDelimiters = RegExp(\n        (options.escape || reNoMatch).source + '|' +\n        interpolate.source + '|' +\n        (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + '|' +\n        (options.evaluate || reNoMatch).source + '|$'\n      , 'g');\n\n      // Use a sourceURL for easier debugging.\n      // The sourceURL gets injected into the source that's eval-ed, so be careful\n      // to normalize all kinds of whitespace, so e.g. newlines (and unicode versions of it) can't sneak in\n      // and escape the comment, thus injecting code that gets evaled.\n      var sourceURL = '//# sourceURL=' +\n        (hasOwnProperty.call(options, 'sourceURL')\n          ? (options.sourceURL + '').replace(/\\s/g, ' ')\n          : ('lodash.templateSources[' + (++templateCounter) + ']')\n        ) + '\\n';\n\n      string.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) {\n        interpolateValue || (interpolateValue = esTemplateValue);\n\n        // Escape characters that can't be included in string literals.\n        source += string.slice(index, offset).replace(reUnescapedString, escapeStringChar);\n\n        // Replace delimiters with snippets.\n        if (escapeValue) {\n          isEscaping = true;\n          source += \"' +\\n__e(\" + escapeValue + \") +\\n'\";\n        }\n        if (evaluateValue) {\n          isEvaluating = true;\n          source += \"';\\n\" + evaluateValue + \";\\n__p += '\";\n        }\n        if (interpolateValue) {\n          source += \"' +\\n((__t = (\" + interpolateValue + \")) == null ? '' : __t) +\\n'\";\n        }\n        index = offset + match.length;\n\n        // The JS engine embedded in Adobe products needs `match` returned in\n        // order to produce the correct `offset` value.\n        return match;\n      });\n\n      source += \"';\\n\";\n\n      // If `variable` is not specified wrap a with-statement around the generated\n      // code to add the data object to the top of the scope chain.\n      var variable = hasOwnProperty.call(options, 'variable') && options.variable;\n      if (!variable) {\n        source = 'with (obj) {\\n' + source + '\\n}\\n';\n      }\n      // Throw an error if a forbidden character was found in `variable`, to prevent\n      // potential command injection attacks.\n      else if (reForbiddenIdentifierChars.test(variable)) {\n        throw new Error(INVALID_TEMPL_VAR_ERROR_TEXT);\n      }\n\n      // Cleanup code by stripping empty strings.\n      source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source)\n        .replace(reEmptyStringMiddle, '$1')\n        .replace(reEmptyStringTrailing, '$1;');\n\n      // Frame code as the function body.\n      source = 'function(' + (variable || 'obj') + ') {\\n' +\n        (variable\n          ? ''\n          : 'obj || (obj = {});\\n'\n        ) +\n        \"var __t, __p = ''\" +\n        (isEscaping\n           ? ', __e = _.escape'\n           : ''\n        ) +\n        (isEvaluating\n          ? ', __j = Array.prototype.join;\\n' +\n            \"function print() { __p += __j.call(arguments, '') }\\n\"\n          : ';\\n'\n        ) +\n        source +\n        'return __p\\n}';\n\n      var result = attempt(function() {\n        return Function(importsKeys, sourceURL + 'return ' + source)\n          .apply(undefined, importsValues);\n      });\n\n      // Provide the compiled function's source by its `toString` method or\n      // the `source` property as a convenience for inlining compiled templates.\n      result.source = source;\n      if (isError(result)) {\n        throw result;\n      }\n      return result;\n    }\n\n    /**\n     * Converts `string`, as a whole, to lower case just like\n     * [String#toLowerCase](https://mdn.io/toLowerCase).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the lower cased string.\n     * @example\n     *\n     * _.toLower('--Foo-Bar--');\n     * // => '--foo-bar--'\n     *\n     * _.toLower('fooBar');\n     * // => 'foobar'\n     *\n     * _.toLower('__FOO_BAR__');\n     * // => '__foo_bar__'\n     */\n    function toLower(value) {\n      return toString(value).toLowerCase();\n    }\n\n    /**\n     * Converts `string`, as a whole, to upper case just like\n     * [String#toUpperCase](https://mdn.io/toUpperCase).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the upper cased string.\n     * @example\n     *\n     * _.toUpper('--foo-bar--');\n     * // => '--FOO-BAR--'\n     *\n     * _.toUpper('fooBar');\n     * // => 'FOOBAR'\n     *\n     * _.toUpper('__foo_bar__');\n     * // => '__FOO_BAR__'\n     */\n    function toUpper(value) {\n      return toString(value).toUpperCase();\n    }\n\n    /**\n     * Removes leading and trailing whitespace or specified characters from `string`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to trim.\n     * @param {string} [chars=whitespace] The characters to trim.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {string} Returns the trimmed string.\n     * @example\n     *\n     * _.trim('  abc  ');\n     * // => 'abc'\n     *\n     * _.trim('-_-abc-_-', '_-');\n     * // => 'abc'\n     *\n     * _.map(['  foo  ', '  bar  '], _.trim);\n     * // => ['foo', 'bar']\n     */\n    function trim(string, chars, guard) {\n      string = toString(string);\n      if (string && (guard || chars === undefined)) {\n        return baseTrim(string);\n      }\n      if (!string || !(chars = baseToString(chars))) {\n        return string;\n      }\n      var strSymbols = stringToArray(string),\n          chrSymbols = stringToArray(chars),\n          start = charsStartIndex(strSymbols, chrSymbols),\n          end = charsEndIndex(strSymbols, chrSymbols) + 1;\n\n      return castSlice(strSymbols, start, end).join('');\n    }\n\n    /**\n     * Removes trailing whitespace or specified characters from `string`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to trim.\n     * @param {string} [chars=whitespace] The characters to trim.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {string} Returns the trimmed string.\n     * @example\n     *\n     * _.trimEnd('  abc  ');\n     * // => '  abc'\n     *\n     * _.trimEnd('-_-abc-_-', '_-');\n     * // => '-_-abc'\n     */\n    function trimEnd(string, chars, guard) {\n      string = toString(string);\n      if (string && (guard || chars === undefined)) {\n        return string.slice(0, trimmedEndIndex(string) + 1);\n      }\n      if (!string || !(chars = baseToString(chars))) {\n        return string;\n      }\n      var strSymbols = stringToArray(string),\n          end = charsEndIndex(strSymbols, stringToArray(chars)) + 1;\n\n      return castSlice(strSymbols, 0, end).join('');\n    }\n\n    /**\n     * Removes leading whitespace or specified characters from `string`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to trim.\n     * @param {string} [chars=whitespace] The characters to trim.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {string} Returns the trimmed string.\n     * @example\n     *\n     * _.trimStart('  abc  ');\n     * // => 'abc  '\n     *\n     * _.trimStart('-_-abc-_-', '_-');\n     * // => 'abc-_-'\n     */\n    function trimStart(string, chars, guard) {\n      string = toString(string);\n      if (string && (guard || chars === undefined)) {\n        return string.replace(reTrimStart, '');\n      }\n      if (!string || !(chars = baseToString(chars))) {\n        return string;\n      }\n      var strSymbols = stringToArray(string),\n          start = charsStartIndex(strSymbols, stringToArray(chars));\n\n      return castSlice(strSymbols, start).join('');\n    }\n\n    /**\n     * Truncates `string` if it's longer than the given maximum string length.\n     * The last characters of the truncated string are replaced with the omission\n     * string which defaults to \"...\".\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to truncate.\n     * @param {Object} [options={}] The options object.\n     * @param {number} [options.length=30] The maximum string length.\n     * @param {string} [options.omission='...'] The string to indicate text is omitted.\n     * @param {RegExp|string} [options.separator] The separator pattern to truncate to.\n     * @returns {string} Returns the truncated string.\n     * @example\n     *\n     * _.truncate('hi-diddly-ho there, neighborino');\n     * // => 'hi-diddly-ho there, neighbo...'\n     *\n     * _.truncate('hi-diddly-ho there, neighborino', {\n     *   'length': 24,\n     *   'separator': ' '\n     * });\n     * // => 'hi-diddly-ho there,...'\n     *\n     * _.truncate('hi-diddly-ho there, neighborino', {\n     *   'length': 24,\n     *   'separator': /,? +/\n     * });\n     * // => 'hi-diddly-ho there...'\n     *\n     * _.truncate('hi-diddly-ho there, neighborino', {\n     *   'omission': ' [...]'\n     * });\n     * // => 'hi-diddly-ho there, neig [...]'\n     */\n    function truncate(string, options) {\n      var length = DEFAULT_TRUNC_LENGTH,\n          omission = DEFAULT_TRUNC_OMISSION;\n\n      if (isObject(options)) {\n        var separator = 'separator' in options ? options.separator : separator;\n        length = 'length' in options ? toInteger(options.length) : length;\n        omission = 'omission' in options ? baseToString(options.omission) : omission;\n      }\n      string = toString(string);\n\n      var strLength = string.length;\n      if (hasUnicode(string)) {\n        var strSymbols = stringToArray(string);\n        strLength = strSymbols.length;\n      }\n      if (length >= strLength) {\n        return string;\n      }\n      var end = length - stringSize(omission);\n      if (end < 1) {\n        return omission;\n      }\n      var result = strSymbols\n        ? castSlice(strSymbols, 0, end).join('')\n        : string.slice(0, end);\n\n      if (separator === undefined) {\n        return result + omission;\n      }\n      if (strSymbols) {\n        end += (result.length - end);\n      }\n      if (isRegExp(separator)) {\n        if (string.slice(end).search(separator)) {\n          var match,\n              substring = result;\n\n          if (!separator.global) {\n            separator = RegExp(separator.source, toString(reFlags.exec(separator)) + 'g');\n          }\n          separator.lastIndex = 0;\n          while ((match = separator.exec(substring))) {\n            var newEnd = match.index;\n          }\n          result = result.slice(0, newEnd === undefined ? end : newEnd);\n        }\n      } else if (string.indexOf(baseToString(separator), end) != end) {\n        var index = result.lastIndexOf(separator);\n        if (index > -1) {\n          result = result.slice(0, index);\n        }\n      }\n      return result + omission;\n    }\n\n    /**\n     * The inverse of `_.escape`; this method converts the HTML entities\n     * `&amp;`, `&lt;`, `&gt;`, `&quot;`, and `&#39;` in `string` to\n     * their corresponding characters.\n     *\n     * **Note:** No other HTML entities are unescaped. To unescape additional\n     * HTML entities use a third-party library like [_he_](https://mths.be/he).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.6.0\n     * @category String\n     * @param {string} [string=''] The string to unescape.\n     * @returns {string} Returns the unescaped string.\n     * @example\n     *\n     * _.unescape('fred, barney, &amp; pebbles');\n     * // => 'fred, barney, & pebbles'\n     */\n    function unescape(string) {\n      string = toString(string);\n      return (string && reHasEscapedHtml.test(string))\n        ? string.replace(reEscapedHtml, unescapeHtmlChar)\n        : string;\n    }\n\n    /**\n     * Converts `string`, as space separated words, to upper case.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the upper cased string.\n     * @example\n     *\n     * _.upperCase('--foo-bar');\n     * // => 'FOO BAR'\n     *\n     * _.upperCase('fooBar');\n     * // => 'FOO BAR'\n     *\n     * _.upperCase('__foo_bar__');\n     * // => 'FOO BAR'\n     */\n    var upperCase = createCompounder(function(result, word, index) {\n      return result + (index ? ' ' : '') + word.toUpperCase();\n    });\n\n    /**\n     * Converts the first character of `string` to upper case.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the converted string.\n     * @example\n     *\n     * _.upperFirst('fred');\n     * // => 'Fred'\n     *\n     * _.upperFirst('FRED');\n     * // => 'FRED'\n     */\n    var upperFirst = createCaseFirst('toUpperCase');\n\n    /**\n     * Splits `string` into an array of its words.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to inspect.\n     * @param {RegExp|string} [pattern] The pattern to match words.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the words of `string`.\n     * @example\n     *\n     * _.words('fred, barney, & pebbles');\n     * // => ['fred', 'barney', 'pebbles']\n     *\n     * _.words('fred, barney, & pebbles', /[^, ]+/g);\n     * // => ['fred', 'barney', '&', 'pebbles']\n     */\n    function words(string, pattern, guard) {\n      string = toString(string);\n      pattern = guard ? undefined : pattern;\n\n      if (pattern === undefined) {\n        return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string);\n      }\n      return string.match(pattern) || [];\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Attempts to invoke `func`, returning either the result or the caught error\n     * object. Any additional arguments are provided to `func` when it's invoked.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Util\n     * @param {Function} func The function to attempt.\n     * @param {...*} [args] The arguments to invoke `func` with.\n     * @returns {*} Returns the `func` result or error object.\n     * @example\n     *\n     * // Avoid throwing errors for invalid selectors.\n     * var elements = _.attempt(function(selector) {\n     *   return document.querySelectorAll(selector);\n     * }, '>_>');\n     *\n     * if (_.isError(elements)) {\n     *   elements = [];\n     * }\n     */\n    var attempt = baseRest(function(func, args) {\n      try {\n        return apply(func, undefined, args);\n      } catch (e) {\n        return isError(e) ? e : new Error(e);\n      }\n    });\n\n    /**\n     * Binds methods of an object to the object itself, overwriting the existing\n     * method.\n     *\n     * **Note:** This method doesn't set the \"length\" property of bound functions.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {Object} object The object to bind and assign the bound methods to.\n     * @param {...(string|string[])} methodNames The object method names to bind.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var view = {\n     *   'label': 'docs',\n     *   'click': function() {\n     *     console.log('clicked ' + this.label);\n     *   }\n     * };\n     *\n     * _.bindAll(view, ['click']);\n     * jQuery(element).on('click', view.click);\n     * // => Logs 'clicked docs' when clicked.\n     */\n    var bindAll = flatRest(function(object, methodNames) {\n      arrayEach(methodNames, function(key) {\n        key = toKey(key);\n        baseAssignValue(object, key, bind(object[key], object));\n      });\n      return object;\n    });\n\n    /**\n     * Creates a function that iterates over `pairs` and invokes the corresponding\n     * function of the first predicate to return truthy. The predicate-function\n     * pairs are invoked with the `this` binding and arguments of the created\n     * function.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {Array} pairs The predicate-function pairs.\n     * @returns {Function} Returns the new composite function.\n     * @example\n     *\n     * var func = _.cond([\n     *   [_.matches({ 'a': 1 }),           _.constant('matches A')],\n     *   [_.conforms({ 'b': _.isNumber }), _.constant('matches B')],\n     *   [_.stubTrue,                      _.constant('no match')]\n     * ]);\n     *\n     * func({ 'a': 1, 'b': 2 });\n     * // => 'matches A'\n     *\n     * func({ 'a': 0, 'b': 1 });\n     * // => 'matches B'\n     *\n     * func({ 'a': '1', 'b': '2' });\n     * // => 'no match'\n     */\n    function cond(pairs) {\n      var length = pairs == null ? 0 : pairs.length,\n          toIteratee = getIteratee();\n\n      pairs = !length ? [] : arrayMap(pairs, function(pair) {\n        if (typeof pair[1] != 'function') {\n          throw new TypeError(FUNC_ERROR_TEXT);\n        }\n        return [toIteratee(pair[0]), pair[1]];\n      });\n\n      return baseRest(function(args) {\n        var index = -1;\n        while (++index < length) {\n          var pair = pairs[index];\n          if (apply(pair[0], this, args)) {\n            return apply(pair[1], this, args);\n          }\n        }\n      });\n    }\n\n    /**\n     * Creates a function that invokes the predicate properties of `source` with\n     * the corresponding property values of a given object, returning `true` if\n     * all predicates return truthy, else `false`.\n     *\n     * **Note:** The created function is equivalent to `_.conformsTo` with\n     * `source` partially applied.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {Object} source The object of property predicates to conform to.\n     * @returns {Function} Returns the new spec function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': 2, 'b': 1 },\n     *   { 'a': 1, 'b': 2 }\n     * ];\n     *\n     * _.filter(objects, _.conforms({ 'b': function(n) { return n > 1; } }));\n     * // => [{ 'a': 1, 'b': 2 }]\n     */\n    function conforms(source) {\n      return baseConforms(baseClone(source, CLONE_DEEP_FLAG));\n    }\n\n    /**\n     * Creates a function that returns `value`.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Util\n     * @param {*} value The value to return from the new function.\n     * @returns {Function} Returns the new constant function.\n     * @example\n     *\n     * var objects = _.times(2, _.constant({ 'a': 1 }));\n     *\n     * console.log(objects);\n     * // => [{ 'a': 1 }, { 'a': 1 }]\n     *\n     * console.log(objects[0] === objects[1]);\n     * // => true\n     */\n    function constant(value) {\n      return function() {\n        return value;\n      };\n    }\n\n    /**\n     * Checks `value` to determine whether a default value should be returned in\n     * its place. The `defaultValue` is returned if `value` is `NaN`, `null`,\n     * or `undefined`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.14.0\n     * @category Util\n     * @param {*} value The value to check.\n     * @param {*} defaultValue The default value.\n     * @returns {*} Returns the resolved value.\n     * @example\n     *\n     * _.defaultTo(1, 10);\n     * // => 1\n     *\n     * _.defaultTo(undefined, 10);\n     * // => 10\n     */\n    function defaultTo(value, defaultValue) {\n      return (value == null || value !== value) ? defaultValue : value;\n    }\n\n    /**\n     * Creates a function that returns the result of invoking the given functions\n     * with the `this` binding of the created function, where each successive\n     * invocation is supplied the return value of the previous.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Util\n     * @param {...(Function|Function[])} [funcs] The functions to invoke.\n     * @returns {Function} Returns the new composite function.\n     * @see _.flowRight\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var addSquare = _.flow([_.add, square]);\n     * addSquare(1, 2);\n     * // => 9\n     */\n    var flow = createFlow();\n\n    /**\n     * This method is like `_.flow` except that it creates a function that\n     * invokes the given functions from right to left.\n     *\n     * @static\n     * @since 3.0.0\n     * @memberOf _\n     * @category Util\n     * @param {...(Function|Function[])} [funcs] The functions to invoke.\n     * @returns {Function} Returns the new composite function.\n     * @see _.flow\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var addSquare = _.flowRight([square, _.add]);\n     * addSquare(1, 2);\n     * // => 9\n     */\n    var flowRight = createFlow(true);\n\n    /**\n     * This method returns the first argument it receives.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {*} value Any value.\n     * @returns {*} Returns `value`.\n     * @example\n     *\n     * var object = { 'a': 1 };\n     *\n     * console.log(_.identity(object) === object);\n     * // => true\n     */\n    function identity(value) {\n      return value;\n    }\n\n    /**\n     * Creates a function that invokes `func` with the arguments of the created\n     * function. If `func` is a property name, the created function returns the\n     * property value for a given element. If `func` is an array or object, the\n     * created function returns `true` for elements that contain the equivalent\n     * source properties, otherwise it returns `false`.\n     *\n     * @static\n     * @since 4.0.0\n     * @memberOf _\n     * @category Util\n     * @param {*} [func=_.identity] The value to convert to a callback.\n     * @returns {Function} Returns the callback.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': true },\n     *   { 'user': 'fred',   'age': 40, 'active': false }\n     * ];\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.filter(users, _.iteratee({ 'user': 'barney', 'active': true }));\n     * // => [{ 'user': 'barney', 'age': 36, 'active': true }]\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.filter(users, _.iteratee(['user', 'fred']));\n     * // => [{ 'user': 'fred', 'age': 40 }]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.map(users, _.iteratee('user'));\n     * // => ['barney', 'fred']\n     *\n     * // Create custom iteratee shorthands.\n     * _.iteratee = _.wrap(_.iteratee, function(iteratee, func) {\n     *   return !_.isRegExp(func) ? iteratee(func) : function(string) {\n     *     return func.test(string);\n     *   };\n     * });\n     *\n     * _.filter(['abc', 'def'], /ef/);\n     * // => ['def']\n     */\n    function iteratee(func) {\n      return baseIteratee(typeof func == 'function' ? func : baseClone(func, CLONE_DEEP_FLAG));\n    }\n\n    /**\n     * Creates a function that performs a partial deep comparison between a given\n     * object and `source`, returning `true` if the given object has equivalent\n     * property values, else `false`.\n     *\n     * **Note:** The created function is equivalent to `_.isMatch` with `source`\n     * partially applied.\n     *\n     * Partial comparisons will match empty array and empty object `source`\n     * values against any array or object value, respectively. See `_.isEqual`\n     * for a list of supported value comparisons.\n     *\n     * **Note:** Multiple values can be checked by combining several matchers\n     * using `_.overSome`\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Util\n     * @param {Object} source The object of property values to match.\n     * @returns {Function} Returns the new spec function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': 1, 'b': 2, 'c': 3 },\n     *   { 'a': 4, 'b': 5, 'c': 6 }\n     * ];\n     *\n     * _.filter(objects, _.matches({ 'a': 4, 'c': 6 }));\n     * // => [{ 'a': 4, 'b': 5, 'c': 6 }]\n     *\n     * // Checking for several possible values\n     * _.filter(objects, _.overSome([_.matches({ 'a': 1 }), _.matches({ 'a': 4 })]));\n     * // => [{ 'a': 1, 'b': 2, 'c': 3 }, { 'a': 4, 'b': 5, 'c': 6 }]\n     */\n    function matches(source) {\n      return baseMatches(baseClone(source, CLONE_DEEP_FLAG));\n    }\n\n    /**\n     * Creates a function that performs a partial deep comparison between the\n     * value at `path` of a given object to `srcValue`, returning `true` if the\n     * object value is equivalent, else `false`.\n     *\n     * **Note:** Partial comparisons will match empty array and empty object\n     * `srcValue` values against any array or object value, respectively. See\n     * `_.isEqual` for a list of supported value comparisons.\n     *\n     * **Note:** Multiple values can be checked by combining several matchers\n     * using `_.overSome`\n     *\n     * @static\n     * @memberOf _\n     * @since 3.2.0\n     * @category Util\n     * @param {Array|string} path The path of the property to get.\n     * @param {*} srcValue The value to match.\n     * @returns {Function} Returns the new spec function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': 1, 'b': 2, 'c': 3 },\n     *   { 'a': 4, 'b': 5, 'c': 6 }\n     * ];\n     *\n     * _.find(objects, _.matchesProperty('a', 4));\n     * // => { 'a': 4, 'b': 5, 'c': 6 }\n     *\n     * // Checking for several possible values\n     * _.filter(objects, _.overSome([_.matchesProperty('a', 1), _.matchesProperty('a', 4)]));\n     * // => [{ 'a': 1, 'b': 2, 'c': 3 }, { 'a': 4, 'b': 5, 'c': 6 }]\n     */\n    function matchesProperty(path, srcValue) {\n      return baseMatchesProperty(path, baseClone(srcValue, CLONE_DEEP_FLAG));\n    }\n\n    /**\n     * Creates a function that invokes the method at `path` of a given object.\n     * Any additional arguments are provided to the invoked method.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.7.0\n     * @category Util\n     * @param {Array|string} path The path of the method to invoke.\n     * @param {...*} [args] The arguments to invoke the method with.\n     * @returns {Function} Returns the new invoker function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': { 'b': _.constant(2) } },\n     *   { 'a': { 'b': _.constant(1) } }\n     * ];\n     *\n     * _.map(objects, _.method('a.b'));\n     * // => [2, 1]\n     *\n     * _.map(objects, _.method(['a', 'b']));\n     * // => [2, 1]\n     */\n    var method = baseRest(function(path, args) {\n      return function(object) {\n        return baseInvoke(object, path, args);\n      };\n    });\n\n    /**\n     * The opposite of `_.method`; this method creates a function that invokes\n     * the method at a given path of `object`. Any additional arguments are\n     * provided to the invoked method.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.7.0\n     * @category Util\n     * @param {Object} object The object to query.\n     * @param {...*} [args] The arguments to invoke the method with.\n     * @returns {Function} Returns the new invoker function.\n     * @example\n     *\n     * var array = _.times(3, _.constant),\n     *     object = { 'a': array, 'b': array, 'c': array };\n     *\n     * _.map(['a[2]', 'c[0]'], _.methodOf(object));\n     * // => [2, 0]\n     *\n     * _.map([['a', '2'], ['c', '0']], _.methodOf(object));\n     * // => [2, 0]\n     */\n    var methodOf = baseRest(function(object, args) {\n      return function(path) {\n        return baseInvoke(object, path, args);\n      };\n    });\n\n    /**\n     * Adds all own enumerable string keyed function properties of a source\n     * object to the destination object. If `object` is a function, then methods\n     * are added to its prototype as well.\n     *\n     * **Note:** Use `_.runInContext` to create a pristine `lodash` function to\n     * avoid conflicts caused by modifying the original.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {Function|Object} [object=lodash] The destination object.\n     * @param {Object} source The object of functions to add.\n     * @param {Object} [options={}] The options object.\n     * @param {boolean} [options.chain=true] Specify whether mixins are chainable.\n     * @returns {Function|Object} Returns `object`.\n     * @example\n     *\n     * function vowels(string) {\n     *   return _.filter(string, function(v) {\n     *     return /[aeiou]/i.test(v);\n     *   });\n     * }\n     *\n     * _.mixin({ 'vowels': vowels });\n     * _.vowels('fred');\n     * // => ['e']\n     *\n     * _('fred').vowels().value();\n     * // => ['e']\n     *\n     * _.mixin({ 'vowels': vowels }, { 'chain': false });\n     * _('fred').vowels();\n     * // => ['e']\n     */\n    function mixin(object, source, options) {\n      var props = keys(source),\n          methodNames = baseFunctions(source, props);\n\n      if (options == null &&\n          !(isObject(source) && (methodNames.length || !props.length))) {\n        options = source;\n        source = object;\n        object = this;\n        methodNames = baseFunctions(source, keys(source));\n      }\n      var chain = !(isObject(options) && 'chain' in options) || !!options.chain,\n          isFunc = isFunction(object);\n\n      arrayEach(methodNames, function(methodName) {\n        var func = source[methodName];\n        object[methodName] = func;\n        if (isFunc) {\n          object.prototype[methodName] = function() {\n            var chainAll = this.__chain__;\n            if (chain || chainAll) {\n              var result = object(this.__wrapped__),\n                  actions = result.__actions__ = copyArray(this.__actions__);\n\n              actions.push({ 'func': func, 'args': arguments, 'thisArg': object });\n              result.__chain__ = chainAll;\n              return result;\n            }\n            return func.apply(object, arrayPush([this.value()], arguments));\n          };\n        }\n      });\n\n      return object;\n    }\n\n    /**\n     * Reverts the `_` variable to its previous value and returns a reference to\n     * the `lodash` function.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @returns {Function} Returns the `lodash` function.\n     * @example\n     *\n     * var lodash = _.noConflict();\n     */\n    function noConflict() {\n      if (root._ === this) {\n        root._ = oldDash;\n      }\n      return this;\n    }\n\n    /**\n     * This method returns `undefined`.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.3.0\n     * @category Util\n     * @example\n     *\n     * _.times(2, _.noop);\n     * // => [undefined, undefined]\n     */\n    function noop() {\n      // No operation performed.\n    }\n\n    /**\n     * Creates a function that gets the argument at index `n`. If `n` is negative,\n     * the nth argument from the end is returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {number} [n=0] The index of the argument to return.\n     * @returns {Function} Returns the new pass-thru function.\n     * @example\n     *\n     * var func = _.nthArg(1);\n     * func('a', 'b', 'c', 'd');\n     * // => 'b'\n     *\n     * var func = _.nthArg(-2);\n     * func('a', 'b', 'c', 'd');\n     * // => 'c'\n     */\n    function nthArg(n) {\n      n = toInteger(n);\n      return baseRest(function(args) {\n        return baseNth(args, n);\n      });\n    }\n\n    /**\n     * Creates a function that invokes `iteratees` with the arguments it receives\n     * and returns their results.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {...(Function|Function[])} [iteratees=[_.identity]]\n     *  The iteratees to invoke.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var func = _.over([Math.max, Math.min]);\n     *\n     * func(1, 2, 3, 4);\n     * // => [4, 1]\n     */\n    var over = createOver(arrayMap);\n\n    /**\n     * Creates a function that checks if **all** of the `predicates` return\n     * truthy when invoked with the arguments it receives.\n     *\n     * Following shorthands are possible for providing predicates.\n     * Pass an `Object` and it will be used as an parameter for `_.matches` to create the predicate.\n     * Pass an `Array` of parameters for `_.matchesProperty` and the predicate will be created using them.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {...(Function|Function[])} [predicates=[_.identity]]\n     *  The predicates to check.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var func = _.overEvery([Boolean, isFinite]);\n     *\n     * func('1');\n     * // => true\n     *\n     * func(null);\n     * // => false\n     *\n     * func(NaN);\n     * // => false\n     */\n    var overEvery = createOver(arrayEvery);\n\n    /**\n     * Creates a function that checks if **any** of the `predicates` return\n     * truthy when invoked with the arguments it receives.\n     *\n     * Following shorthands are possible for providing predicates.\n     * Pass an `Object` and it will be used as an parameter for `_.matches` to create the predicate.\n     * Pass an `Array` of parameters for `_.matchesProperty` and the predicate will be created using them.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {...(Function|Function[])} [predicates=[_.identity]]\n     *  The predicates to check.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var func = _.overSome([Boolean, isFinite]);\n     *\n     * func('1');\n     * // => true\n     *\n     * func(null);\n     * // => true\n     *\n     * func(NaN);\n     * // => false\n     *\n     * var matchesFunc = _.overSome([{ 'a': 1 }, { 'a': 2 }])\n     * var matchesPropertyFunc = _.overSome([['a', 1], ['a', 2]])\n     */\n    var overSome = createOver(arraySome);\n\n    /**\n     * Creates a function that returns the value at `path` of a given object.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Util\n     * @param {Array|string} path The path of the property to get.\n     * @returns {Function} Returns the new accessor function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': { 'b': 2 } },\n     *   { 'a': { 'b': 1 } }\n     * ];\n     *\n     * _.map(objects, _.property('a.b'));\n     * // => [2, 1]\n     *\n     * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n     * // => [1, 2]\n     */\n    function property(path) {\n      return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n    }\n\n    /**\n     * The opposite of `_.property`; this method creates a function that returns\n     * the value at a given path of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Util\n     * @param {Object} object The object to query.\n     * @returns {Function} Returns the new accessor function.\n     * @example\n     *\n     * var array = [0, 1, 2],\n     *     object = { 'a': array, 'b': array, 'c': array };\n     *\n     * _.map(['a[2]', 'c[0]'], _.propertyOf(object));\n     * // => [2, 0]\n     *\n     * _.map([['a', '2'], ['c', '0']], _.propertyOf(object));\n     * // => [2, 0]\n     */\n    function propertyOf(object) {\n      return function(path) {\n        return object == null ? undefined : baseGet(object, path);\n      };\n    }\n\n    /**\n     * Creates an array of numbers (positive and/or negative) progressing from\n     * `start` up to, but not including, `end`. A step of `-1` is used if a negative\n     * `start` is specified without an `end` or `step`. If `end` is not specified,\n     * it's set to `start` with `start` then set to `0`.\n     *\n     * **Note:** JavaScript follows the IEEE-754 standard for resolving\n     * floating-point values which can produce unexpected results.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {number} [start=0] The start of the range.\n     * @param {number} end The end of the range.\n     * @param {number} [step=1] The value to increment or decrement by.\n     * @returns {Array} Returns the range of numbers.\n     * @see _.inRange, _.rangeRight\n     * @example\n     *\n     * _.range(4);\n     * // => [0, 1, 2, 3]\n     *\n     * _.range(-4);\n     * // => [0, -1, -2, -3]\n     *\n     * _.range(1, 5);\n     * // => [1, 2, 3, 4]\n     *\n     * _.range(0, 20, 5);\n     * // => [0, 5, 10, 15]\n     *\n     * _.range(0, -4, -1);\n     * // => [0, -1, -2, -3]\n     *\n     * _.range(1, 4, 0);\n     * // => [1, 1, 1]\n     *\n     * _.range(0);\n     * // => []\n     */\n    var range = createRange();\n\n    /**\n     * This method is like `_.range` except that it populates values in\n     * descending order.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {number} [start=0] The start of the range.\n     * @param {number} end The end of the range.\n     * @param {number} [step=1] The value to increment or decrement by.\n     * @returns {Array} Returns the range of numbers.\n     * @see _.inRange, _.range\n     * @example\n     *\n     * _.rangeRight(4);\n     * // => [3, 2, 1, 0]\n     *\n     * _.rangeRight(-4);\n     * // => [-3, -2, -1, 0]\n     *\n     * _.rangeRight(1, 5);\n     * // => [4, 3, 2, 1]\n     *\n     * _.rangeRight(0, 20, 5);\n     * // => [15, 10, 5, 0]\n     *\n     * _.rangeRight(0, -4, -1);\n     * // => [-3, -2, -1, 0]\n     *\n     * _.rangeRight(1, 4, 0);\n     * // => [1, 1, 1]\n     *\n     * _.rangeRight(0);\n     * // => []\n     */\n    var rangeRight = createRange(true);\n\n    /**\n     * This method returns a new empty array.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {Array} Returns the new empty array.\n     * @example\n     *\n     * var arrays = _.times(2, _.stubArray);\n     *\n     * console.log(arrays);\n     * // => [[], []]\n     *\n     * console.log(arrays[0] === arrays[1]);\n     * // => false\n     */\n    function stubArray() {\n      return [];\n    }\n\n    /**\n     * This method returns `false`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {boolean} Returns `false`.\n     * @example\n     *\n     * _.times(2, _.stubFalse);\n     * // => [false, false]\n     */\n    function stubFalse() {\n      return false;\n    }\n\n    /**\n     * This method returns a new empty object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {Object} Returns the new empty object.\n     * @example\n     *\n     * var objects = _.times(2, _.stubObject);\n     *\n     * console.log(objects);\n     * // => [{}, {}]\n     *\n     * console.log(objects[0] === objects[1]);\n     * // => false\n     */\n    function stubObject() {\n      return {};\n    }\n\n    /**\n     * This method returns an empty string.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {string} Returns the empty string.\n     * @example\n     *\n     * _.times(2, _.stubString);\n     * // => ['', '']\n     */\n    function stubString() {\n      return '';\n    }\n\n    /**\n     * This method returns `true`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {boolean} Returns `true`.\n     * @example\n     *\n     * _.times(2, _.stubTrue);\n     * // => [true, true]\n     */\n    function stubTrue() {\n      return true;\n    }\n\n    /**\n     * Invokes the iteratee `n` times, returning an array of the results of\n     * each invocation. The iteratee is invoked with one argument; (index).\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {number} n The number of times to invoke `iteratee`.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the array of results.\n     * @example\n     *\n     * _.times(3, String);\n     * // => ['0', '1', '2']\n     *\n     *  _.times(4, _.constant(0));\n     * // => [0, 0, 0, 0]\n     */\n    function times(n, iteratee) {\n      n = toInteger(n);\n      if (n < 1 || n > MAX_SAFE_INTEGER) {\n        return [];\n      }\n      var index = MAX_ARRAY_LENGTH,\n          length = nativeMin(n, MAX_ARRAY_LENGTH);\n\n      iteratee = getIteratee(iteratee);\n      n -= MAX_ARRAY_LENGTH;\n\n      var result = baseTimes(length, iteratee);\n      while (++index < n) {\n        iteratee(index);\n      }\n      return result;\n    }\n\n    /**\n     * Converts `value` to a property path array.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {*} value The value to convert.\n     * @returns {Array} Returns the new property path array.\n     * @example\n     *\n     * _.toPath('a.b.c');\n     * // => ['a', 'b', 'c']\n     *\n     * _.toPath('a[0].b.c');\n     * // => ['a', '0', 'b', 'c']\n     */\n    function toPath(value) {\n      if (isArray(value)) {\n        return arrayMap(value, toKey);\n      }\n      return isSymbol(value) ? [value] : copyArray(stringToPath(toString(value)));\n    }\n\n    /**\n     * Generates a unique ID. If `prefix` is given, the ID is appended to it.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {string} [prefix=''] The value to prefix the ID with.\n     * @returns {string} Returns the unique ID.\n     * @example\n     *\n     * _.uniqueId('contact_');\n     * // => 'contact_104'\n     *\n     * _.uniqueId();\n     * // => '105'\n     */\n    function uniqueId(prefix) {\n      var id = ++idCounter;\n      return toString(prefix) + id;\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Adds two numbers.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.4.0\n     * @category Math\n     * @param {number} augend The first number in an addition.\n     * @param {number} addend The second number in an addition.\n     * @returns {number} Returns the total.\n     * @example\n     *\n     * _.add(6, 4);\n     * // => 10\n     */\n    var add = createMathOperation(function(augend, addend) {\n      return augend + addend;\n    }, 0);\n\n    /**\n     * Computes `number` rounded up to `precision`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.10.0\n     * @category Math\n     * @param {number} number The number to round up.\n     * @param {number} [precision=0] The precision to round up to.\n     * @returns {number} Returns the rounded up number.\n     * @example\n     *\n     * _.ceil(4.006);\n     * // => 5\n     *\n     * _.ceil(6.004, 2);\n     * // => 6.01\n     *\n     * _.ceil(6040, -2);\n     * // => 6100\n     */\n    var ceil = createRound('ceil');\n\n    /**\n     * Divide two numbers.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Math\n     * @param {number} dividend The first number in a division.\n     * @param {number} divisor The second number in a division.\n     * @returns {number} Returns the quotient.\n     * @example\n     *\n     * _.divide(6, 4);\n     * // => 1.5\n     */\n    var divide = createMathOperation(function(dividend, divisor) {\n      return dividend / divisor;\n    }, 1);\n\n    /**\n     * Computes `number` rounded down to `precision`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.10.0\n     * @category Math\n     * @param {number} number The number to round down.\n     * @param {number} [precision=0] The precision to round down to.\n     * @returns {number} Returns the rounded down number.\n     * @example\n     *\n     * _.floor(4.006);\n     * // => 4\n     *\n     * _.floor(0.046, 2);\n     * // => 0.04\n     *\n     * _.floor(4060, -2);\n     * // => 4000\n     */\n    var floor = createRound('floor');\n\n    /**\n     * Computes the maximum value of `array`. If `array` is empty or falsey,\n     * `undefined` is returned.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @returns {*} Returns the maximum value.\n     * @example\n     *\n     * _.max([4, 2, 8, 6]);\n     * // => 8\n     *\n     * _.max([]);\n     * // => undefined\n     */\n    function max(array) {\n      return (array && array.length)\n        ? baseExtremum(array, identity, baseGt)\n        : undefined;\n    }\n\n    /**\n     * This method is like `_.max` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the criterion by which\n     * the value is ranked. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {*} Returns the maximum value.\n     * @example\n     *\n     * var objects = [{ 'n': 1 }, { 'n': 2 }];\n     *\n     * _.maxBy(objects, function(o) { return o.n; });\n     * // => { 'n': 2 }\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.maxBy(objects, 'n');\n     * // => { 'n': 2 }\n     */\n    function maxBy(array, iteratee) {\n      return (array && array.length)\n        ? baseExtremum(array, getIteratee(iteratee, 2), baseGt)\n        : undefined;\n    }\n\n    /**\n     * Computes the mean of the values in `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @returns {number} Returns the mean.\n     * @example\n     *\n     * _.mean([4, 2, 8, 6]);\n     * // => 5\n     */\n    function mean(array) {\n      return baseMean(array, identity);\n    }\n\n    /**\n     * This method is like `_.mean` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the value to be averaged.\n     * The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {number} Returns the mean.\n     * @example\n     *\n     * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];\n     *\n     * _.meanBy(objects, function(o) { return o.n; });\n     * // => 5\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.meanBy(objects, 'n');\n     * // => 5\n     */\n    function meanBy(array, iteratee) {\n      return baseMean(array, getIteratee(iteratee, 2));\n    }\n\n    /**\n     * Computes the minimum value of `array`. If `array` is empty or falsey,\n     * `undefined` is returned.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @returns {*} Returns the minimum value.\n     * @example\n     *\n     * _.min([4, 2, 8, 6]);\n     * // => 2\n     *\n     * _.min([]);\n     * // => undefined\n     */\n    function min(array) {\n      return (array && array.length)\n        ? baseExtremum(array, identity, baseLt)\n        : undefined;\n    }\n\n    /**\n     * This method is like `_.min` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the criterion by which\n     * the value is ranked. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {*} Returns the minimum value.\n     * @example\n     *\n     * var objects = [{ 'n': 1 }, { 'n': 2 }];\n     *\n     * _.minBy(objects, function(o) { return o.n; });\n     * // => { 'n': 1 }\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.minBy(objects, 'n');\n     * // => { 'n': 1 }\n     */\n    function minBy(array, iteratee) {\n      return (array && array.length)\n        ? baseExtremum(array, getIteratee(iteratee, 2), baseLt)\n        : undefined;\n    }\n\n    /**\n     * Multiply two numbers.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Math\n     * @param {number} multiplier The first number in a multiplication.\n     * @param {number} multiplicand The second number in a multiplication.\n     * @returns {number} Returns the product.\n     * @example\n     *\n     * _.multiply(6, 4);\n     * // => 24\n     */\n    var multiply = createMathOperation(function(multiplier, multiplicand) {\n      return multiplier * multiplicand;\n    }, 1);\n\n    /**\n     * Computes `number` rounded to `precision`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.10.0\n     * @category Math\n     * @param {number} number The number to round.\n     * @param {number} [precision=0] The precision to round to.\n     * @returns {number} Returns the rounded number.\n     * @example\n     *\n     * _.round(4.006);\n     * // => 4\n     *\n     * _.round(4.006, 2);\n     * // => 4.01\n     *\n     * _.round(4060, -2);\n     * // => 4100\n     */\n    var round = createRound('round');\n\n    /**\n     * Subtract two numbers.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {number} minuend The first number in a subtraction.\n     * @param {number} subtrahend The second number in a subtraction.\n     * @returns {number} Returns the difference.\n     * @example\n     *\n     * _.subtract(6, 4);\n     * // => 2\n     */\n    var subtract = createMathOperation(function(minuend, subtrahend) {\n      return minuend - subtrahend;\n    }, 0);\n\n    /**\n     * Computes the sum of the values in `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.4.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @returns {number} Returns the sum.\n     * @example\n     *\n     * _.sum([4, 2, 8, 6]);\n     * // => 20\n     */\n    function sum(array) {\n      return (array && array.length)\n        ? baseSum(array, identity)\n        : 0;\n    }\n\n    /**\n     * This method is like `_.sum` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the value to be summed.\n     * The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {number} Returns the sum.\n     * @example\n     *\n     * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];\n     *\n     * _.sumBy(objects, function(o) { return o.n; });\n     * // => 20\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.sumBy(objects, 'n');\n     * // => 20\n     */\n    function sumBy(array, iteratee) {\n      return (array && array.length)\n        ? baseSum(array, getIteratee(iteratee, 2))\n        : 0;\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    // Add methods that return wrapped values in chain sequences.\n    lodash.after = after;\n    lodash.ary = ary;\n    lodash.assign = assign;\n    lodash.assignIn = assignIn;\n    lodash.assignInWith = assignInWith;\n    lodash.assignWith = assignWith;\n    lodash.at = at;\n    lodash.before = before;\n    lodash.bind = bind;\n    lodash.bindAll = bindAll;\n    lodash.bindKey = bindKey;\n    lodash.castArray = castArray;\n    lodash.chain = chain;\n    lodash.chunk = chunk;\n    lodash.compact = compact;\n    lodash.concat = concat;\n    lodash.cond = cond;\n    lodash.conforms = conforms;\n    lodash.constant = constant;\n    lodash.countBy = countBy;\n    lodash.create = create;\n    lodash.curry = curry;\n    lodash.curryRight = curryRight;\n    lodash.debounce = debounce;\n    lodash.defaults = defaults;\n    lodash.defaultsDeep = defaultsDeep;\n    lodash.defer = defer;\n    lodash.delay = delay;\n    lodash.difference = difference;\n    lodash.differenceBy = differenceBy;\n    lodash.differenceWith = differenceWith;\n    lodash.drop = drop;\n    lodash.dropRight = dropRight;\n    lodash.dropRightWhile = dropRightWhile;\n    lodash.dropWhile = dropWhile;\n    lodash.fill = fill;\n    lodash.filter = filter;\n    lodash.flatMap = flatMap;\n    lodash.flatMapDeep = flatMapDeep;\n    lodash.flatMapDepth = flatMapDepth;\n    lodash.flatten = flatten;\n    lodash.flattenDeep = flattenDeep;\n    lodash.flattenDepth = flattenDepth;\n    lodash.flip = flip;\n    lodash.flow = flow;\n    lodash.flowRight = flowRight;\n    lodash.fromPairs = fromPairs;\n    lodash.functions = functions;\n    lodash.functionsIn = functionsIn;\n    lodash.groupBy = groupBy;\n    lodash.initial = initial;\n    lodash.intersection = intersection;\n    lodash.intersectionBy = intersectionBy;\n    lodash.intersectionWith = intersectionWith;\n    lodash.invert = invert;\n    lodash.invertBy = invertBy;\n    lodash.invokeMap = invokeMap;\n    lodash.iteratee = iteratee;\n    lodash.keyBy = keyBy;\n    lodash.keys = keys;\n    lodash.keysIn = keysIn;\n    lodash.map = map;\n    lodash.mapKeys = mapKeys;\n    lodash.mapValues = mapValues;\n    lodash.matches = matches;\n    lodash.matchesProperty = matchesProperty;\n    lodash.memoize = memoize;\n    lodash.merge = merge;\n    lodash.mergeWith = mergeWith;\n    lodash.method = method;\n    lodash.methodOf = methodOf;\n    lodash.mixin = mixin;\n    lodash.negate = negate;\n    lodash.nthArg = nthArg;\n    lodash.omit = omit;\n    lodash.omitBy = omitBy;\n    lodash.once = once;\n    lodash.orderBy = orderBy;\n    lodash.over = over;\n    lodash.overArgs = overArgs;\n    lodash.overEvery = overEvery;\n    lodash.overSome = overSome;\n    lodash.partial = partial;\n    lodash.partialRight = partialRight;\n    lodash.partition = partition;\n    lodash.pick = pick;\n    lodash.pickBy = pickBy;\n    lodash.property = property;\n    lodash.propertyOf = propertyOf;\n    lodash.pull = pull;\n    lodash.pullAll = pullAll;\n    lodash.pullAllBy = pullAllBy;\n    lodash.pullAllWith = pullAllWith;\n    lodash.pullAt = pullAt;\n    lodash.range = range;\n    lodash.rangeRight = rangeRight;\n    lodash.rearg = rearg;\n    lodash.reject = reject;\n    lodash.remove = remove;\n    lodash.rest = rest;\n    lodash.reverse = reverse;\n    lodash.sampleSize = sampleSize;\n    lodash.set = set;\n    lodash.setWith = setWith;\n    lodash.shuffle = shuffle;\n    lodash.slice = slice;\n    lodash.sortBy = sortBy;\n    lodash.sortedUniq = sortedUniq;\n    lodash.sortedUniqBy = sortedUniqBy;\n    lodash.split = split;\n    lodash.spread = spread;\n    lodash.tail = tail;\n    lodash.take = take;\n    lodash.takeRight = takeRight;\n    lodash.takeRightWhile = takeRightWhile;\n    lodash.takeWhile = takeWhile;\n    lodash.tap = tap;\n    lodash.throttle = throttle;\n    lodash.thru = thru;\n    lodash.toArray = toArray;\n    lodash.toPairs = toPairs;\n    lodash.toPairsIn = toPairsIn;\n    lodash.toPath = toPath;\n    lodash.toPlainObject = toPlainObject;\n    lodash.transform = transform;\n    lodash.unary = unary;\n    lodash.union = union;\n    lodash.unionBy = unionBy;\n    lodash.unionWith = unionWith;\n    lodash.uniq = uniq;\n    lodash.uniqBy = uniqBy;\n    lodash.uniqWith = uniqWith;\n    lodash.unset = unset;\n    lodash.unzip = unzip;\n    lodash.unzipWith = unzipWith;\n    lodash.update = update;\n    lodash.updateWith = updateWith;\n    lodash.values = values;\n    lodash.valuesIn = valuesIn;\n    lodash.without = without;\n    lodash.words = words;\n    lodash.wrap = wrap;\n    lodash.xor = xor;\n    lodash.xorBy = xorBy;\n    lodash.xorWith = xorWith;\n    lodash.zip = zip;\n    lodash.zipObject = zipObject;\n    lodash.zipObjectDeep = zipObjectDeep;\n    lodash.zipWith = zipWith;\n\n    // Add aliases.\n    lodash.entries = toPairs;\n    lodash.entriesIn = toPairsIn;\n    lodash.extend = assignIn;\n    lodash.extendWith = assignInWith;\n\n    // Add methods to `lodash.prototype`.\n    mixin(lodash, lodash);\n\n    /*------------------------------------------------------------------------*/\n\n    // Add methods that return unwrapped values in chain sequences.\n    lodash.add = add;\n    lodash.attempt = attempt;\n    lodash.camelCase = camelCase;\n    lodash.capitalize = capitalize;\n    lodash.ceil = ceil;\n    lodash.clamp = clamp;\n    lodash.clone = clone;\n    lodash.cloneDeep = cloneDeep;\n    lodash.cloneDeepWith = cloneDeepWith;\n    lodash.cloneWith = cloneWith;\n    lodash.conformsTo = conformsTo;\n    lodash.deburr = deburr;\n    lodash.defaultTo = defaultTo;\n    lodash.divide = divide;\n    lodash.endsWith = endsWith;\n    lodash.eq = eq;\n    lodash.escape = escape;\n    lodash.escapeRegExp = escapeRegExp;\n    lodash.every = every;\n    lodash.find = find;\n    lodash.findIndex = findIndex;\n    lodash.findKey = findKey;\n    lodash.findLast = findLast;\n    lodash.findLastIndex = findLastIndex;\n    lodash.findLastKey = findLastKey;\n    lodash.floor = floor;\n    lodash.forEach = forEach;\n    lodash.forEachRight = forEachRight;\n    lodash.forIn = forIn;\n    lodash.forInRight = forInRight;\n    lodash.forOwn = forOwn;\n    lodash.forOwnRight = forOwnRight;\n    lodash.get = get;\n    lodash.gt = gt;\n    lodash.gte = gte;\n    lodash.has = has;\n    lodash.hasIn = hasIn;\n    lodash.head = head;\n    lodash.identity = identity;\n    lodash.includes = includes;\n    lodash.indexOf = indexOf;\n    lodash.inRange = inRange;\n    lodash.invoke = invoke;\n    lodash.isArguments = isArguments;\n    lodash.isArray = isArray;\n    lodash.isArrayBuffer = isArrayBuffer;\n    lodash.isArrayLike = isArrayLike;\n    lodash.isArrayLikeObject = isArrayLikeObject;\n    lodash.isBoolean = isBoolean;\n    lodash.isBuffer = isBuffer;\n    lodash.isDate = isDate;\n    lodash.isElement = isElement;\n    lodash.isEmpty = isEmpty;\n    lodash.isEqual = isEqual;\n    lodash.isEqualWith = isEqualWith;\n    lodash.isError = isError;\n    lodash.isFinite = isFinite;\n    lodash.isFunction = isFunction;\n    lodash.isInteger = isInteger;\n    lodash.isLength = isLength;\n    lodash.isMap = isMap;\n    lodash.isMatch = isMatch;\n    lodash.isMatchWith = isMatchWith;\n    lodash.isNaN = isNaN;\n    lodash.isNative = isNative;\n    lodash.isNil = isNil;\n    lodash.isNull = isNull;\n    lodash.isNumber = isNumber;\n    lodash.isObject = isObject;\n    lodash.isObjectLike = isObjectLike;\n    lodash.isPlainObject = isPlainObject;\n    lodash.isRegExp = isRegExp;\n    lodash.isSafeInteger = isSafeInteger;\n    lodash.isSet = isSet;\n    lodash.isString = isString;\n    lodash.isSymbol = isSymbol;\n    lodash.isTypedArray = isTypedArray;\n    lodash.isUndefined = isUndefined;\n    lodash.isWeakMap = isWeakMap;\n    lodash.isWeakSet = isWeakSet;\n    lodash.join = join;\n    lodash.kebabCase = kebabCase;\n    lodash.last = last;\n    lodash.lastIndexOf = lastIndexOf;\n    lodash.lowerCase = lowerCase;\n    lodash.lowerFirst = lowerFirst;\n    lodash.lt = lt;\n    lodash.lte = lte;\n    lodash.max = max;\n    lodash.maxBy = maxBy;\n    lodash.mean = mean;\n    lodash.meanBy = meanBy;\n    lodash.min = min;\n    lodash.minBy = minBy;\n    lodash.stubArray = stubArray;\n    lodash.stubFalse = stubFalse;\n    lodash.stubObject = stubObject;\n    lodash.stubString = stubString;\n    lodash.stubTrue = stubTrue;\n    lodash.multiply = multiply;\n    lodash.nth = nth;\n    lodash.noConflict = noConflict;\n    lodash.noop = noop;\n    lodash.now = now;\n    lodash.pad = pad;\n    lodash.padEnd = padEnd;\n    lodash.padStart = padStart;\n    lodash.parseInt = parseInt;\n    lodash.random = random;\n    lodash.reduce = reduce;\n    lodash.reduceRight = reduceRight;\n    lodash.repeat = repeat;\n    lodash.replace = replace;\n    lodash.result = result;\n    lodash.round = round;\n    lodash.runInContext = runInContext;\n    lodash.sample = sample;\n    lodash.size = size;\n    lodash.snakeCase = snakeCase;\n    lodash.some = some;\n    lodash.sortedIndex = sortedIndex;\n    lodash.sortedIndexBy = sortedIndexBy;\n    lodash.sortedIndexOf = sortedIndexOf;\n    lodash.sortedLastIndex = sortedLastIndex;\n    lodash.sortedLastIndexBy = sortedLastIndexBy;\n    lodash.sortedLastIndexOf = sortedLastIndexOf;\n    lodash.startCase = startCase;\n    lodash.startsWith = startsWith;\n    lodash.subtract = subtract;\n    lodash.sum = sum;\n    lodash.sumBy = sumBy;\n    lodash.template = template;\n    lodash.times = times;\n    lodash.toFinite = toFinite;\n    lodash.toInteger = toInteger;\n    lodash.toLength = toLength;\n    lodash.toLower = toLower;\n    lodash.toNumber = toNumber;\n    lodash.toSafeInteger = toSafeInteger;\n    lodash.toString = toString;\n    lodash.toUpper = toUpper;\n    lodash.trim = trim;\n    lodash.trimEnd = trimEnd;\n    lodash.trimStart = trimStart;\n    lodash.truncate = truncate;\n    lodash.unescape = unescape;\n    lodash.uniqueId = uniqueId;\n    lodash.upperCase = upperCase;\n    lodash.upperFirst = upperFirst;\n\n    // Add aliases.\n    lodash.each = forEach;\n    lodash.eachRight = forEachRight;\n    lodash.first = head;\n\n    mixin(lodash, (function() {\n      var source = {};\n      baseForOwn(lodash, function(func, methodName) {\n        if (!hasOwnProperty.call(lodash.prototype, methodName)) {\n          source[methodName] = func;\n        }\n      });\n      return source;\n    }()), { 'chain': false });\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * The semantic version number.\n     *\n     * @static\n     * @memberOf _\n     * @type {string}\n     */\n    lodash.VERSION = VERSION;\n\n    // Assign default placeholders.\n    arrayEach(['bind', 'bindKey', 'curry', 'curryRight', 'partial', 'partialRight'], function(methodName) {\n      lodash[methodName].placeholder = lodash;\n    });\n\n    // Add `LazyWrapper` methods for `_.drop` and `_.take` variants.\n    arrayEach(['drop', 'take'], function(methodName, index) {\n      LazyWrapper.prototype[methodName] = function(n) {\n        n = n === undefined ? 1 : nativeMax(toInteger(n), 0);\n\n        var result = (this.__filtered__ && !index)\n          ? new LazyWrapper(this)\n          : this.clone();\n\n        if (result.__filtered__) {\n          result.__takeCount__ = nativeMin(n, result.__takeCount__);\n        } else {\n          result.__views__.push({\n            'size': nativeMin(n, MAX_ARRAY_LENGTH),\n            'type': methodName + (result.__dir__ < 0 ? 'Right' : '')\n          });\n        }\n        return result;\n      };\n\n      LazyWrapper.prototype[methodName + 'Right'] = function(n) {\n        return this.reverse()[methodName](n).reverse();\n      };\n    });\n\n    // Add `LazyWrapper` methods that accept an `iteratee` value.\n    arrayEach(['filter', 'map', 'takeWhile'], function(methodName, index) {\n      var type = index + 1,\n          isFilter = type == LAZY_FILTER_FLAG || type == LAZY_WHILE_FLAG;\n\n      LazyWrapper.prototype[methodName] = function(iteratee) {\n        var result = this.clone();\n        result.__iteratees__.push({\n          'iteratee': getIteratee(iteratee, 3),\n          'type': type\n        });\n        result.__filtered__ = result.__filtered__ || isFilter;\n        return result;\n      };\n    });\n\n    // Add `LazyWrapper` methods for `_.head` and `_.last`.\n    arrayEach(['head', 'last'], function(methodName, index) {\n      var takeName = 'take' + (index ? 'Right' : '');\n\n      LazyWrapper.prototype[methodName] = function() {\n        return this[takeName](1).value()[0];\n      };\n    });\n\n    // Add `LazyWrapper` methods for `_.initial` and `_.tail`.\n    arrayEach(['initial', 'tail'], function(methodName, index) {\n      var dropName = 'drop' + (index ? '' : 'Right');\n\n      LazyWrapper.prototype[methodName] = function() {\n        return this.__filtered__ ? new LazyWrapper(this) : this[dropName](1);\n      };\n    });\n\n    LazyWrapper.prototype.compact = function() {\n      return this.filter(identity);\n    };\n\n    LazyWrapper.prototype.find = function(predicate) {\n      return this.filter(predicate).head();\n    };\n\n    LazyWrapper.prototype.findLast = function(predicate) {\n      return this.reverse().find(predicate);\n    };\n\n    LazyWrapper.prototype.invokeMap = baseRest(function(path, args) {\n      if (typeof path == 'function') {\n        return new LazyWrapper(this);\n      }\n      return this.map(function(value) {\n        return baseInvoke(value, path, args);\n      });\n    });\n\n    LazyWrapper.prototype.reject = function(predicate) {\n      return this.filter(negate(getIteratee(predicate)));\n    };\n\n    LazyWrapper.prototype.slice = function(start, end) {\n      start = toInteger(start);\n\n      var result = this;\n      if (result.__filtered__ && (start > 0 || end < 0)) {\n        return new LazyWrapper(result);\n      }\n      if (start < 0) {\n        result = result.takeRight(-start);\n      } else if (start) {\n        result = result.drop(start);\n      }\n      if (end !== undefined) {\n        end = toInteger(end);\n        result = end < 0 ? result.dropRight(-end) : result.take(end - start);\n      }\n      return result;\n    };\n\n    LazyWrapper.prototype.takeRightWhile = function(predicate) {\n      return this.reverse().takeWhile(predicate).reverse();\n    };\n\n    LazyWrapper.prototype.toArray = function() {\n      return this.take(MAX_ARRAY_LENGTH);\n    };\n\n    // Add `LazyWrapper` methods to `lodash.prototype`.\n    baseForOwn(LazyWrapper.prototype, function(func, methodName) {\n      var checkIteratee = /^(?:filter|find|map|reject)|While$/.test(methodName),\n          isTaker = /^(?:head|last)$/.test(methodName),\n          lodashFunc = lodash[isTaker ? ('take' + (methodName == 'last' ? 'Right' : '')) : methodName],\n          retUnwrapped = isTaker || /^find/.test(methodName);\n\n      if (!lodashFunc) {\n        return;\n      }\n      lodash.prototype[methodName] = function() {\n        var value = this.__wrapped__,\n            args = isTaker ? [1] : arguments,\n            isLazy = value instanceof LazyWrapper,\n            iteratee = args[0],\n            useLazy = isLazy || isArray(value);\n\n        var interceptor = function(value) {\n          var result = lodashFunc.apply(lodash, arrayPush([value], args));\n          return (isTaker && chainAll) ? result[0] : result;\n        };\n\n        if (useLazy && checkIteratee && typeof iteratee == 'function' && iteratee.length != 1) {\n          // Avoid lazy use if the iteratee has a \"length\" value other than `1`.\n          isLazy = useLazy = false;\n        }\n        var chainAll = this.__chain__,\n            isHybrid = !!this.__actions__.length,\n            isUnwrapped = retUnwrapped && !chainAll,\n            onlyLazy = isLazy && !isHybrid;\n\n        if (!retUnwrapped && useLazy) {\n          value = onlyLazy ? value : new LazyWrapper(this);\n          var result = func.apply(value, args);\n          result.__actions__.push({ 'func': thru, 'args': [interceptor], 'thisArg': undefined });\n          return new LodashWrapper(result, chainAll);\n        }\n        if (isUnwrapped && onlyLazy) {\n          return func.apply(this, args);\n        }\n        result = this.thru(interceptor);\n        return isUnwrapped ? (isTaker ? result.value()[0] : result.value()) : result;\n      };\n    });\n\n    // Add `Array` methods to `lodash.prototype`.\n    arrayEach(['pop', 'push', 'shift', 'sort', 'splice', 'unshift'], function(methodName) {\n      var func = arrayProto[methodName],\n          chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru',\n          retUnwrapped = /^(?:pop|shift)$/.test(methodName);\n\n      lodash.prototype[methodName] = function() {\n        var args = arguments;\n        if (retUnwrapped && !this.__chain__) {\n          var value = this.value();\n          return func.apply(isArray(value) ? value : [], args);\n        }\n        return this[chainName](function(value) {\n          return func.apply(isArray(value) ? value : [], args);\n        });\n      };\n    });\n\n    // Map minified method names to their real names.\n    baseForOwn(LazyWrapper.prototype, function(func, methodName) {\n      var lodashFunc = lodash[methodName];\n      if (lodashFunc) {\n        var key = lodashFunc.name + '';\n        if (!hasOwnProperty.call(realNames, key)) {\n          realNames[key] = [];\n        }\n        realNames[key].push({ 'name': methodName, 'func': lodashFunc });\n      }\n    });\n\n    realNames[createHybrid(undefined, WRAP_BIND_KEY_FLAG).name] = [{\n      'name': 'wrapper',\n      'func': undefined\n    }];\n\n    // Add methods to `LazyWrapper`.\n    LazyWrapper.prototype.clone = lazyClone;\n    LazyWrapper.prototype.reverse = lazyReverse;\n    LazyWrapper.prototype.value = lazyValue;\n\n    // Add chain sequence methods to the `lodash` wrapper.\n    lodash.prototype.at = wrapperAt;\n    lodash.prototype.chain = wrapperChain;\n    lodash.prototype.commit = wrapperCommit;\n    lodash.prototype.next = wrapperNext;\n    lodash.prototype.plant = wrapperPlant;\n    lodash.prototype.reverse = wrapperReverse;\n    lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue;\n\n    // Add lazy aliases.\n    lodash.prototype.first = lodash.prototype.head;\n\n    if (symIterator) {\n      lodash.prototype[symIterator] = wrapperToIterator;\n    }\n    return lodash;\n  });\n\n  /*--------------------------------------------------------------------------*/\n\n  // Export lodash.\n  var _ = runInContext();\n\n  // Some AMD build optimizers, like r.js, check for condition patterns like:\n  if (typeof define == 'function' && typeof define.amd == 'object' && define.amd) {\n    // Expose Lodash on the global object to prevent errors when Lodash is\n    // loaded by a script tag in the presence of an AMD loader.\n    // See http://requirejs.org/docs/errors.html#mismatch for more details.\n    // Use `_.noConflict` to remove Lodash from the global object.\n    root._ = _;\n\n    // Define as an anonymous module so, through path mapping, it can be\n    // referenced as the \"underscore\" module.\n    define(function() {\n      return _;\n    });\n  }\n  // Check for `exports` after `define` in case a build optimizer adds it.\n  else if (freeModule) {\n    // Export for Node.js.\n    (freeModule.exports = _)._ = _;\n    // Export for CommonJS support.\n    freeExports._ = _;\n  }\n  else {\n    // Export to the global object.\n    root._ = _;\n  }\n}.call(this));\n","var moment = module.exports = require(\"./moment-timezone\");\nmoment.tz.load(require('./data/packed/latest.json'));\n","//! moment-timezone.js\n//! version : 0.5.41\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.41\",\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\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\tfor (i = 0; i < untils.length; i++) {\n\t\t\t\tif (target < untils[i]) {\n\t\t\t\t\treturn i;\n\t\t\t\t}\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\toffsets = [last],\n\t\t\tchange, next, i;\n\n\t\tfor (i = 1; i < 48; i++) {\n\t\t\tnext = new OffsetAt(new Date(startYear, i, 1));\n\t\t\tif (next.offset !== last.offset) {\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}\n\t\t\tlast = next;\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\ti, j, guessesOffset;\n\n\t\tfor (i = 0; i < offsetsLength; i++) {\n\t\t\tguessesOffset = guesses[offsets[i].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}\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\tzone = getZone(name),\n\t\t\tout  = moment.utc.apply(null, args);\n\n\t\tif (zone && !moment.isMoment(input) && needsOffset(out)) {\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) {\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 : German [de]\n//! author : lluchs : https://github.com/lluchs\n//! author: Menelion Elensúle: https://github.com/Oire\n//! author : Mikolaj Dadela : https://github.com/mik01aj\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    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            m: ['eine Minute', 'einer Minute'],\n            h: ['eine Stunde', 'einer Stunde'],\n            d: ['ein Tag', 'einem Tag'],\n            dd: [number + ' Tage', number + ' Tagen'],\n            w: ['eine Woche', 'einer Woche'],\n            M: ['ein Monat', 'einem Monat'],\n            MM: [number + ' Monate', number + ' Monaten'],\n            y: ['ein Jahr', 'einem Jahr'],\n            yy: [number + ' Jahre', number + ' Jahren'],\n        };\n        return withoutSuffix ? format[key][0] : format[key][1];\n    }\n\n    var de = moment.defineLocale('de', {\n        months: 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split(\n            '_'\n        ),\n        monthsShort:\n            'Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'),\n        monthsParseExact: true,\n        weekdays:\n            'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split(\n                '_'\n            ),\n        weekdaysShort: 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),\n        weekdaysMin: 'So_Mo_Di_Mi_Do_Fr_Sa'.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: '[heute um] LT [Uhr]',\n            sameElse: 'L',\n            nextDay: '[morgen um] LT [Uhr]',\n            nextWeek: 'dddd [um] LT [Uhr]',\n            lastDay: '[gestern um] LT [Uhr]',\n            lastWeek: '[letzten] dddd [um] LT [Uhr]',\n        },\n        relativeTime: {\n            future: 'in %s',\n            past: 'vor %s',\n            s: 'ein paar Sekunden',\n            ss: '%d Sekunden',\n            m: processRelativeTime,\n            mm: '%d Minuten',\n            h: processRelativeTime,\n            hh: '%d Stunden',\n            d: processRelativeTime,\n            dd: processRelativeTime,\n            w: processRelativeTime,\n            ww: '%d Wochen',\n            M: processRelativeTime,\n            MM: processRelativeTime,\n            y: processRelativeTime,\n            yy: processRelativeTime,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\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 de;\n\n})));\n","//! moment.js locale configuration\n//! locale : Hungarian [hu]\n//! author : Adam Brunner : https://github.com/adambrunner\n//! author : Peter Viszt  : https://github.com/passatgt\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 weekEndings =\n        'vasárnap hétfőn kedden szerdán csütörtökön pénteken szombaton'.split(' ');\n    function translate(number, withoutSuffix, key, isFuture) {\n        var num = number;\n        switch (key) {\n            case 's':\n                return isFuture || withoutSuffix\n                    ? 'néhány másodperc'\n                    : 'néhány másodperce';\n            case 'ss':\n                return num + (isFuture || withoutSuffix)\n                    ? ' másodperc'\n                    : ' másodperce';\n            case 'm':\n                return 'egy' + (isFuture || withoutSuffix ? ' perc' : ' perce');\n            case 'mm':\n                return num + (isFuture || withoutSuffix ? ' perc' : ' perce');\n            case 'h':\n                return 'egy' + (isFuture || withoutSuffix ? ' óra' : ' órája');\n            case 'hh':\n                return num + (isFuture || withoutSuffix ? ' óra' : ' órája');\n            case 'd':\n                return 'egy' + (isFuture || withoutSuffix ? ' nap' : ' napja');\n            case 'dd':\n                return num + (isFuture || withoutSuffix ? ' nap' : ' napja');\n            case 'M':\n                return 'egy' + (isFuture || withoutSuffix ? ' hónap' : ' hónapja');\n            case 'MM':\n                return num + (isFuture || withoutSuffix ? ' hónap' : ' hónapja');\n            case 'y':\n                return 'egy' + (isFuture || withoutSuffix ? ' év' : ' éve');\n            case 'yy':\n                return num + (isFuture || withoutSuffix ? ' év' : ' éve');\n        }\n        return '';\n    }\n    function week(isFuture) {\n        return (\n            (isFuture ? '' : '[múlt] ') +\n            '[' +\n            weekEndings[this.day()] +\n            '] LT[-kor]'\n        );\n    }\n\n    var hu = moment.defineLocale('hu', {\n        months: 'január_február_március_április_május_június_július_augusztus_szeptember_október_november_december'.split(\n            '_'\n        ),\n        monthsShort:\n            'jan._feb._márc._ápr._máj._jún._júl._aug._szept._okt._nov._dec.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat'.split('_'),\n        weekdaysShort: 'vas_hét_kedd_sze_csüt_pén_szo'.split('_'),\n        weekdaysMin: 'v_h_k_sze_cs_p_szo'.split('_'),\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'YYYY.MM.DD.',\n            LL: 'YYYY. MMMM D.',\n            LLL: 'YYYY. MMMM D. H:mm',\n            LLLL: 'YYYY. MMMM D., dddd H:mm',\n        },\n        meridiemParse: /de|du/i,\n        isPM: function (input) {\n            return input.charAt(1).toLowerCase() === 'u';\n        },\n        meridiem: function (hours, minutes, isLower) {\n            if (hours < 12) {\n                return isLower === true ? 'de' : 'DE';\n            } else {\n                return isLower === true ? 'du' : 'DU';\n            }\n        },\n        calendar: {\n            sameDay: '[ma] LT[-kor]',\n            nextDay: '[holnap] LT[-kor]',\n            nextWeek: function () {\n                return week.call(this, true);\n            },\n            lastDay: '[tegnap] LT[-kor]',\n            lastWeek: function () {\n                return week.call(this, false);\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s múlva',\n            past: '%s',\n            s: translate,\n            ss: translate,\n            m: translate,\n            mm: translate,\n            h: translate,\n            hh: translate,\n            d: translate,\n            dd: translate,\n            M: translate,\n            MM: translate,\n            y: translate,\n            yy: translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\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 hu;\n\n})));\n","//! moment.js\n//! version : 2.29.4\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        if (m._isValid == null) {\n            var flags = getParsingFlags(m),\n                parsedParts = some.call(flags.parsedDateParts, function (i) {\n                    return i != null;\n                }),\n                isNowValid =\n                    !isNaN(m._d.getTime()) &&\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\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        }\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\n    function addUnitAlias(unit, shorthand) {\n        var lowerCase = unit.toLowerCase();\n        aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit;\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\n    function addUnitPriority(unit, priority) {\n        priorities[unit] = priority;\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    function isLeapYear(year) {\n        return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\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    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        return mom.isValid()\n            ? mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]()\n            : NaN;\n    }\n\n    function set$1(mom, unit, value) {\n        if (mom.isValid() && !isNaN(value)) {\n            if (\n                unit === 'FullYear' &&\n                isLeapYear(mom.year()) &&\n                mom.month() === 1 &&\n                mom.date() === 29\n            ) {\n                value = toInt(value);\n                mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](\n                    value,\n                    mom.month(),\n                    daysInMonth(value, mom.month())\n                );\n            } else {\n                mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);\n            }\n        }\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    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        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    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    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    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    // ALIASES\n\n    addUnitAlias('month', 'M');\n\n    // PRIORITY\n\n    addUnitPriority('month', 8);\n\n    // PARSING\n\n    addRegexToken('M', match1to2);\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        var dayOfMonth;\n\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        dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value));\n        mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth);\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        for (i = 0; i < 12; i++) {\n            // make the regex if we don't have it already\n            mom = createUTC([2000, i]);\n            shortPieces.push(this.monthsShort(mom, ''));\n            longPieces.push(this.months(mom, ''));\n            mixedPieces.push(this.months(mom, ''));\n            mixedPieces.push(this.monthsShort(mom, ''));\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        for (i = 0; i < 12; i++) {\n            shortPieces[i] = regexEscape(shortPieces[i]);\n            longPieces[i] = regexEscape(longPieces[i]);\n        }\n        for (i = 0; i < 24; i++) {\n            mixedPieces[i] = regexEscape(mixedPieces[i]);\n        }\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    // 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    // ALIASES\n\n    addUnitAlias('year', 'y');\n\n    // PRIORITIES\n\n    addUnitPriority('year', 1);\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 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    // ALIASES\n\n    addUnitAlias('week', 'w');\n    addUnitAlias('isoWeek', 'W');\n\n    // PRIORITIES\n\n    addUnitPriority('week', 5);\n    addUnitPriority('isoWeek', 5);\n\n    // PARSING\n\n    addRegexToken('w', match1to2);\n    addRegexToken('ww', match1to2, match2);\n    addRegexToken('W', match1to2);\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    // ALIASES\n\n    addUnitAlias('day', 'd');\n    addUnitAlias('weekday', 'e');\n    addUnitAlias('isoWeekday', 'E');\n\n    // PRIORITY\n    addUnitPriority('day', 11);\n    addUnitPriority('weekday', 11);\n    addUnitPriority('isoWeekday', 11);\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        var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();\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    // ALIASES\n\n    addUnitAlias('hour', 'h');\n\n    // PRIORITY\n    addUnitPriority('hour', 13);\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);\n    addRegexToken('h', match1to2);\n    addRegexToken('k', match1to2);\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        return name.match('^[^/\\\\\\\\]*$') != null;\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            eras = this.eras();\n\n        for (i = 0, l = eras.length; i < l; ++i) {\n            namePieces.push(regexEscape(eras[i].name));\n            abbrPieces.push(regexEscape(eras[i].abbr));\n            narrowPieces.push(regexEscape(eras[i].narrow));\n\n            mixedPieces.push(regexEscape(eras[i].name));\n            mixedPieces.push(regexEscape(eras[i].abbr));\n            mixedPieces.push(regexEscape(eras[i].narrow));\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    addUnitAlias('weekYear', 'gg');\n    addUnitAlias('isoWeekYear', 'GG');\n\n    // PRIORITY\n\n    addUnitPriority('weekYear', 1);\n    addUnitPriority('isoWeekYear', 1);\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(),\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    // ALIASES\n\n    addUnitAlias('quarter', 'Q');\n\n    // PRIORITY\n\n    addUnitPriority('quarter', 7);\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    // ALIASES\n\n    addUnitAlias('date', 'D');\n\n    // PRIORITY\n    addUnitPriority('date', 9);\n\n    // PARSING\n\n    addRegexToken('D', match1to2);\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    // ALIASES\n\n    addUnitAlias('dayOfYear', 'DDD');\n\n    // PRIORITY\n    addUnitPriority('dayOfYear', 4);\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    // ALIASES\n\n    addUnitAlias('minute', 'm');\n\n    // PRIORITY\n\n    addUnitPriority('minute', 14);\n\n    // PARSING\n\n    addRegexToken('m', match1to2);\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    // ALIASES\n\n    addUnitAlias('second', 's');\n\n    // PRIORITY\n\n    addUnitPriority('second', 15);\n\n    // PARSING\n\n    addRegexToken('s', match1to2);\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    // ALIASES\n\n    addUnitAlias('millisecond', 'ms');\n\n    // PRIORITY\n\n    addUnitPriority('millisecond', 16);\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    // TODO: Use this.as('ms')?\n    function valueOf$1() {\n        if (!this.isValid()) {\n            return NaN;\n        }\n        return (\n            this._milliseconds +\n            this._days * 864e5 +\n            (this._months % 12) * 2592e6 +\n            toInt(this._months / 12) * 31536e6\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\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.29.4';\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', // <input type=\"datetime-local\" />\n        DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss', // <input type=\"datetime-local\" step=\"1\" />\n        DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS', // <input type=\"datetime-local\" step=\"0.001\" />\n        DATE: 'YYYY-MM-DD', // <input type=\"date\" />\n        TIME: 'HH:mm', // <input type=\"time\" />\n        TIME_SECONDS: 'HH:mm:ss', // <input type=\"time\" step=\"1\" />\n        TIME_MS: 'HH:mm:ss.SSS', // <input type=\"time\" step=\"0.001\" />\n        WEEK: 'GGGG-[W]WW', // <input type=\"week\" />\n        MONTH: 'YYYY-MM', // <input type=\"month\" />\n    };\n\n    return hooks;\n\n})));\n","/**\n * notus v0.3.1\n *\n * Author: Kushal Pandya <kushalspandya@gmail.com> (https://doublslash.com)\n * Date: 12 February, 2016\n *\n * Main Notus Script.\n */\n\n(function() {\n    \"use strict\";\n\n    var self = this,\n        hasRequire = (typeof require !== 'undefined'),\n        old_notus = self.notus,\n        _n = {},\n        notus;\n\n    var htmlEntityMap = {\n            '&': '&amp;',\n            '<': '&lt;',\n            '>': '&gt;',\n            '\"': '&quot;',\n            \"'\": '&#39;',\n            '/': '&#x2F;',\n            '`': '&#x60;',\n            '=': '&#x3D;'\n        },\n        notusTypeMap = {\n            'popup': 'popup',\n            'toast': 'toast',\n            'snackbar': 'snackbar'\n        },\n        positionShorts = {\n            'top-left': 'tl',\n            'top-right': 'tr',\n            'bottom-left': 'bl',\n            'bottom-right': 'br',\n            'top': 'top',\n            'bottom': 'bottom',\n            'tl': 'tl',\n            'tr': 'tr',\n            'bl': 'bl',\n            'br': 'br',\n            't': 'top',\n            'b': 'bottom'\n        },\n        positionForType = {\n            'popup': ['tl', 'tr', 'bl', 'br'],\n            'toast': ['top', 'bottom'],\n            'snackbar': ['top', 'bottom'],\n        },\n        alertTypeMap = {\n            'success': 'success',\n            'failure': 'failure',\n            'warning': 'warning',\n            'custom': 'custom',\n            'none': ''\n        },\n        animationTypeMap = {\n            'slide': 'slide',\n            'fade': 'fade',\n            'custom': 'custom'\n        };\n\n    var fnValidateConfig,\n        fnGetParentClassList,\n        fnCreateNotusContainer,\n        fnGetEntryAnimatorStyle,\n        fnGetExitAnimatorStyle,\n        fnBindCloseHandler,\n        fnBindCloseListener,\n        fnBindActionHandler,\n        fnCreateNotusEl;\n\n    /**\n     * Local Utility API.\n     */\n    _n = {\n        /**\n         * Generate timestamp based unique ID.\n         */\n        genId: function() {\n            return 'notus-' + Math.floor(Math.random() * 10000000000000001);\n        },\n\n        /**\n         * Simple Object extender (similar to jQuery's $.extend()).\n         * courtesy; SO < http://stackoverflow.com/a/11197343/414749 >\n         */\n        extend: function() {\n            var key, i;\n\n            for (i = 1; i < arguments.length; i++)\n            {\n                for (key in arguments[i])\n                {\n                    if (arguments[i].hasOwnProperty(key))\n                        arguments[0][key] = arguments[i][key];\n                }\n            }\n\n            return arguments[0];\n        },\n\n        /**\n         * String formatter.\n         * Accepts first param as target string, and following params as strings to\n         * replace placeholders (eg; {0}).\n         * courtesy: SO <http://stackoverflow.com/a/1038930/414749>\n         */\n        format: function() {\n            var str = arguments[0],\n                reg,\n                i;\n\n            for (i = 0; i < arguments.length - 1; i++) {\n                reg = new RegExp(\"\\\\{\" + i + \"\\\\}\", \"gm\");\n                str = str.replace(reg, arguments[i + 1]);\n            }\n\n            return str;\n        },\n\n        /**\n         * Escapes HTML tags present in the string.\n         * courtesy: Mustache.js < https://github.com/janl/mustache.js >\n         */\n        escapeHtml: function(string) {\n            return String(string).replace(/[&<>\"'`=\\/]/g, function fromEntityMap (s) {\n                return htmlEntityMap[s];\n            });\n        },\n\n        /**\n         * Removes an Element from the DOM.\n         * This method uses el.remove() internally in supported browsers\n         * except for IE11, where it is using el.parent.removeChild().\n         * courtesy: MDN < https://developer.mozilla.org/en-US/docs/Web/API/ChildNode/remove >\n         */\n        removeEl: function(el) {\n            if (typeof el.remove === 'function')\n                el.remove();\n            else if (el.parentElement)\n                el.parentElement.removeChild(el);\n        }\n    };\n\n    /** Helpers Begin **/\n\n    /**\n     * Validate user configuration and throw Errors accordingly.\n     */\n    fnValidateConfig = function(config) {\n        var type = config.notusType,\n            position = config.notusPosition;\n\n        if (notusTypeMap[type] === undefined)\n            throw new Error('Unknown value for notusType');\n\n        if (positionShorts[position] === undefined)\n            throw new Error('Unknown value for notusPosition');\n\n        if (alertTypeMap[config.alertType] === undefined)\n            throw new Error('Unknown value for alertType');\n\n        if (animationTypeMap[config.animationType] === undefined)\n            throw new Error('Unknown value for animationType');\n\n        if (config.message === undefined)\n            throw new Error('Unknown value for message');\n\n        if (positionForType[type].indexOf(positionShorts[position]) < 0)\n            throw new Error('Unsupported position \"' + position + '\" for notusType \"' + type + '\"');\n\n        if (config.closeHandler &&\n            typeof config.closeHandler !== \"function\")\n            throw new Error(\"closeHandler is not a function\");\n\n        if (config.actionable &&\n            (typeof config.primaryAction !== \"object\" && typeof config.secondaryAction !== \"object\"))\n            throw new Error(\"primaryAction or secondaryAction undefined for actionable notus\");\n    };\n\n    /**\n     * Creates list of CSS classes which are to be applied main Notus element based on config.\n     */\n    fnGetParentClassList = function(config) {\n        var classList = [],\n            type = config.notusType,\n            alertType = config.alertType;\n\n        classList.push('notus');\n\n        classList.push('notus-type-' + notusTypeMap[type]);\n\n        if (alertTypeMap[alertType])\n            classList.push('notus-alert-' + alertTypeMap[alertType]);\n\n        if (config.themeClass)\n            classList.push(config.themeClass);\n\n        return classList;\n    };\n\n    /**\n     * Creates new (or returns existing) Notus container elements to house Notus for a particular position.\n     * Note that it creates containers for all position types that Notus supports, and it will return\n     * reference to an existing container if it was previously created.\n     */\n    fnCreateNotusContainer = function(config) {\n        var type = config.notusType,\n            position = config.notusPosition,\n            containerCls = ['notus-container'],\n            containerEl;\n\n        containerCls.push('notus-position-' + positionShorts[position]);\n\n        if (type !== 'popup')\n            containerCls.push((type === 'toast') ? 'notus-container-toast' : 'notus-container-snackbar');\n\n        containerEl = document.querySelector('.' + containerCls.join('.'));\n\n        if (!containerEl)\n        {\n            containerEl = document.createElement('div');\n            containerEl.setAttribute('class', containerCls.join(' '));\n            document.body.appendChild(containerEl);\n        }\n\n        return containerEl;\n    };\n\n    /**\n     * Binds Timer event on each Notus that has autoClose set to true.\n     * the timer waits for autoCloseDuration to finish before closing & destroying Notus.\n     */\n    fnBindCloseListener = function(config, notusEl) {\n        var type = config.notusType,\n            animationType = config.animationType,\n            animationClass = config.animationClass;\n\n        setTimeout(function() {\n            notusEl.setAttribute('style', fnGetExitAnimatorStyle(config).join(';'));\n\n\n            if (animationType === 'slide')\n            {\n                notusEl.classList.remove('notus-slide-in');\n                notusEl.classList.add('notus-slide-out');\n            }\n            else if (animationType === 'fade')\n            {\n                notusEl.classList.remove('notus-fade-in');\n                notusEl.classList.add('notus-fade-out');\n            }\n            else\n            {\n                notusEl.classList.remove(animationClass.extry);\n                notusEl.classList.add(animationClass.exit);\n            }\n\n            setTimeout(function() {\n                _n.removeEl(notusEl);\n            }, config.animationDuration);\n\n        }, config.autoCloseDuration);\n    };\n\n    /**\n     * Binds Mouse Click event handler on Close element of Notus.\n     * it optionally supports closeHandler function that gets called before Notus is destroyed.\n     * if closeHandler returns false (boolean false), Notus will be prevented from destroying.\n     */\n    fnBindCloseHandler = function(config, notusEl) {\n        var closeEl = notusEl.querySelector('.notus-close');\n\n        closeEl.onclick = function(e) {\n            var persist;\n\n            if (config.closeHandler)\n                persist = config.closeHandler.apply(this, arguments);\n\n            if (!persist)\n                _n.removeEl(notusEl);\n        };\n    };\n\n    /**\n     * Binds Mouse Click event handler on action element of Notus type Snackbar.\n     */\n    fnBindActionHandler = function(config, notusEl) {\n        var primaryActionEl = notusEl.querySelector('.notus-actions > .action-item.action-primary'),\n            secondaryActionEl = notusEl.querySelector('.notus-actions > .action-item.action-secondary'),\n            getActionHandler;\n\n        getActionHandler = function(actionConfig) {\n            return function(e) {\n                var persist = actionConfig.actionHandler.apply(this, arguments);\n                if (!persist)\n                    _n.removeEl(notusEl);\n            };\n        };\n\n        if (primaryActionEl)\n            primaryActionEl.onclick = getActionHandler(config.primaryAction);\n\n        if (secondaryActionEl)\n            secondaryActionEl.onclick = getActionHandler(config.secondaryAction);\n    };\n\n    /**\n     * Updates and applies Entry Animation CSS styles and Classes of Notus Element based on config.\n     */\n    fnGetEntryAnimatorStyle = function(config) {\n        var type = config.notusType,\n            animationType = config.animationType,\n            animationFunction = config.animationFunction,\n            animationDuration = config.animationDuration / 1000,\n            isSlide = animationType === 'slide',\n            animators = [];\n\n        if (animationType !== 'custom')\n        {\n            if (type === 'popup')\n                animators.push(isSlide ? 'transform: translateX(0%)' : 'opacity: 1');\n            else\n                animators.push(isSlide ? 'transform: translateY(0%)' : 'opacity: 1');\n\n            if (animationFunction)\n                animators.push(_n.format('animation-timing-function: {0}', animationFunction));\n        }\n\n        if (animationDuration > 0)\n            animators.push(_n.format('animation-duration: {0}s', animationDuration));\n\n        return animators;\n    };\n\n    /**\n     * Updates and applies Exit Animation CSS styles and Classes of Notus Element based on config.\n     */\n    fnGetExitAnimatorStyle = function(config) {\n        var type = config.notusType,\n            position = config.notusPosition,\n            animationType = config.animationType,\n            animationFunction = config.animationFunction,\n            animationDuration = config.animationDuration / 1000,\n            isSlide = animationType === 'slide',\n            animators = [];\n\n        if (animationType !== 'custom')\n        {\n            if (type === 'popup')\n            {\n                if (positionShorts[position].indexOf('l') > -1)\n                    animators.push(isSlide ? 'transform: translateX(-110%)' : 'opacity: 0');\n                else\n                    animators.push(isSlide ? 'transform: translateX(110%)' : 'opacity: 0');\n            }\n            else\n            {\n                if (positionShorts[position] === 'top')\n                    animators.push(isSlide ? 'transform: translateY(-110%)' : 'opacity: 0');\n                else\n                    animators.push(isSlide ? 'transform: translateY(110%)' : 'opacity: 0');\n            }\n\n            if (animationFunction)\n                animators.push(_n.format('animation-timing-function: {0}', animationFunction));\n        }\n\n        if (animationDuration > 0)\n            animators.push(_n.format('animation-duration: {0}s', animationDuration));\n\n        return animators;\n    };\n\n    /**\n     * Creates main Notus DOM Element based with provided config.\n     */\n    fnCreateNotusEl = function(config) {\n        var parentDiv = document.createElement('div'),\n            animationType = config.animationType,\n            animationClass = config.animationClass,\n            isSlide = animationType === 'slide',\n            htmlStringSupported = config.htmlString,\n            classList = [],\n            notusElTpl = '',\n            notusTitleElTpl = '',\n            primaryActionElTpl = '',\n            secondaryActionElTpl = '',\n            actionElTpl = '',\n            closeElTpl = '';\n\n        classList = fnGetParentClassList(config);\n\n        if (config.animate)\n        {\n            if (animationType !== 'custom')\n            {\n                classList.push(isSlide ? 'notus-slide' : 'notus-fade');\n                classList.push(isSlide ? 'notus-slide-in' : 'notus-fade-in');\n            }\n            else\n            {\n                classList.push(animationClass.fixed);\n                classList.push(animationClass.entry);\n            }\n\n            parentDiv.setAttribute('style', fnGetEntryAnimatorStyle(config).join(';'));\n        }\n\n        parentDiv.setAttribute('id', _n.genId());\n        parentDiv.setAttribute('class', classList.join(' '));\n\n        if (config.closable)\n        {\n            closeElTpl = [\n                '<div class=\"notus-body-item notus-close\">',\n                    '<span class=\"icon-close\">&times;</span>',\n                '</div>'\n            ].join('');\n        }\n\n        if (config.actionable)\n        {\n            if (config.primaryAction)\n                primaryActionElTpl = _n.format('<span class=\"action-item action-primary\">{0}</span>', htmlStringSupported ? config.primaryAction.text : _n.escapeHtml(config.primaryAction.text));\n\n            if (config.secondaryAction)\n                secondaryActionElTpl = _n.format('<span class=\"action-item action-secondary\">{0}</span>', htmlStringSupported ? config.secondaryAction.text : _n.escapeHtml(config.secondaryAction.text));\n\n            actionElTpl = [\n                '<div class=\"notus-body-item notus-actions\">',\n                    primaryActionElTpl,\n                    secondaryActionElTpl,\n                '</div>'\n            ].join('');\n        }\n\n        if (config.notusType !== 'snackbar')\n            notusTitleElTpl = '<div class=\"notus-content-title\">{0}</div>';\n\n        notusElTpl = [\n            '<div class=\"notus-body-item notus-content\">',\n                notusTitleElTpl,\n                '<div class=\"notus-content-body\">',\n                    '{1}',\n                '</div>',\n            '</div>',\n            closeElTpl,\n            actionElTpl\n        ].join('');\n\n        parentDiv.innerHTML = _n.format(notusElTpl,\n                                    htmlStringSupported ? config.title : _n.escapeHtml(config.title),\n                                    htmlStringSupported ? config.message : _n.escapeHtml(config.message)\n                                );\n\n        return parentDiv;\n    };\n\n    /** Helpers End **/\n\n    /** Main Notus Object Begin **/\n\n    notus = self.notus = function(userConfig) {\n        var bodyEL = document.body,\n            defaultConfig = {},\n            thisNotus = {};\n\n        /** Default Config options that Notus provides **/\n        defaultConfig = {\n            notusType: 'popup',                     /* Type can be anything from; 'popup', 'toast' or 'snackbar' */\n\n            notusPosition: 'top-right',             /* Available positions for different notus types;\n                                                       'popup'              => 'top-left' ('tl'), 'bottom-left' ('bl'),\n                                                                               'top-right' ('tr') or 'bottom-right' ('br')\n                                                       'toast' & 'snackbar' => 'top' ('t') or 'bottom' ('b') */\n\n            alertType: 'none',                      /* Alert type can be; 'none', 'success', 'failure' or 'warning' */\n\n            htmlString: false,                      /* Enable HTML support in strings provided for 'title', 'message' & 'text' within actions,\n                                                       this is unsafe and hence, it is false by default */\n\n            closable: true,                         /* Show close button to close Notus */\n\n            autoClose: true,                        /* Automatically close Notus once autoCloseDuration completes */\n\n            autoCloseDuration: 3000,                /* Milliseconds to wait before closing  */\n\n            animate: true,                          /* Animate while showing/hiding Notus */\n\n            animationType: 'slide',                 /* Animation Type while showing/hiding Notus; it can be 'slide', 'fade' or 'custom'\n                                                       Using 'custom' exposes an additional config animationClass which can be used\n                                                       to provide animations using animate.css < https://github.com/daneden/animate.css > */\n\n            animationDuration: 300,                 /* Animation Duration to apply while showing/hiding Notus,\n                                                       it supports values in milliseconds.\n                                                       which is then passed to CSS animation-duration */\n\n            animationFunction: 'ease-out',          /* Animation Timing Function to use while showing/hiding Notus,\n                                                       it supports any value that CSS animation-timing-function supports,\n                                                       including cubic-bezier() & steps()\n                                                       value is then passed to CSS animation-timing-function */\n\n            animationClass: {\n                fixed: '',\n                entry: '',\n                exit: ''\n            },                                      /* This config is only applicable if animationType is 'custom'\n                                                       Using this config, you can provide custom 'extry' & 'exit' classes to control\n                                                       animations (exit animation only occurs if Notus auto-closes itself)\n                                                       with this config, while providing 'fixed' (that stays applied always) class to control your overrides,\n                                                       you can also use external library like animate.css */\n\n            themeClass: 'notus-material-light'      /* Provide custom CSS class that you want to apply on Parent element of Notus */\n        };\n\n        userConfig = _n.extend(defaultConfig, userConfig);\n\n        /** Notus API begin **/\n\n        /**\n         * Resolve instance conflict in case module is loaded more than once.\n         */\n        thisNotus.noConflict = function() {\n            self.notus = old_notus;\n            return notus;\n        };\n\n        /**\n         * Main Notus send() method to send supported type of notus Notifications.\n         */\n        thisNotus.send = function(config) {\n            var containerEl,\n                notusEl;\n\n            config = _n.extend({}, userConfig, config);\n\n            fnValidateConfig(config);\n\n            containerEl = fnCreateNotusContainer(config);\n\n            notusEl = fnCreateNotusEl(config);\n\n            if (config.closable)\n                fnBindCloseHandler(config, notusEl);\n\n            if (config.actionable)\n                fnBindActionHandler(config, notusEl);\n\n            if (config.notusPosition.indexOf('bottom') > -1)\n                containerEl.insertBefore(notusEl, containerEl.firstChild);\n            else\n                containerEl.appendChild(notusEl);\n\n            if (config.autoClose)\n                fnBindCloseListener(config, notusEl);\n\n            return notusEl.getAttribute('id');\n        };\n        /** Notus API end **/\n\n        return thisNotus;\n    };\n\n    // UMD Definition < https://github.com/umdjs/umd >.\n    if (typeof exports !== 'undefined')\n    {\n        if (typeof module !== 'undefined' &&\n            module.exports)\n        {\n            exports = module.exports = notus;\n        }\n        exports.notus = notus;\n    }\n    else\n    {\n        self.notus = notus;\n    }\n}).call(this);\n","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things.  But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals.  It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n    throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n    throw new Error('clearTimeout has not been defined');\n}\n(function () {\n    try {\n        if (typeof setTimeout === 'function') {\n            cachedSetTimeout = setTimeout;\n        } else {\n            cachedSetTimeout = defaultSetTimout;\n        }\n    } catch (e) {\n        cachedSetTimeout = defaultSetTimout;\n    }\n    try {\n        if (typeof clearTimeout === 'function') {\n            cachedClearTimeout = clearTimeout;\n        } else {\n            cachedClearTimeout = defaultClearTimeout;\n        }\n    } catch (e) {\n        cachedClearTimeout = defaultClearTimeout;\n    }\n} ())\nfunction runTimeout(fun) {\n    if (cachedSetTimeout === setTimeout) {\n        //normal enviroments in sane situations\n        return setTimeout(fun, 0);\n    }\n    // if setTimeout wasn't available but was latter defined\n    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n        cachedSetTimeout = setTimeout;\n        return setTimeout(fun, 0);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedSetTimeout(fun, 0);\n    } catch(e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n            return cachedSetTimeout.call(null, fun, 0);\n        } catch(e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n            return cachedSetTimeout.call(this, fun, 0);\n        }\n    }\n\n\n}\nfunction runClearTimeout(marker) {\n    if (cachedClearTimeout === clearTimeout) {\n        //normal enviroments in sane situations\n        return clearTimeout(marker);\n    }\n    // if clearTimeout wasn't available but was latter defined\n    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n        cachedClearTimeout = clearTimeout;\n        return clearTimeout(marker);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedClearTimeout(marker);\n    } catch (e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally\n            return cachedClearTimeout.call(null, marker);\n        } catch (e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n            // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n            return cachedClearTimeout.call(this, marker);\n        }\n    }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n    if (!draining || !currentQueue) {\n        return;\n    }\n    draining = false;\n    if (currentQueue.length) {\n        queue = currentQueue.concat(queue);\n    } else {\n        queueIndex = -1;\n    }\n    if (queue.length) {\n        drainQueue();\n    }\n}\n\nfunction drainQueue() {\n    if (draining) {\n        return;\n    }\n    var timeout = runTimeout(cleanUpNextTick);\n    draining = true;\n\n    var len = queue.length;\n    while(len) {\n        currentQueue = queue;\n        queue = [];\n        while (++queueIndex < len) {\n            if (currentQueue) {\n                currentQueue[queueIndex].run();\n            }\n        }\n        queueIndex = -1;\n        len = queue.length;\n    }\n    currentQueue = null;\n    draining = false;\n    runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n    var args = new Array(arguments.length - 1);\n    if (arguments.length > 1) {\n        for (var i = 1; i < arguments.length; i++) {\n            args[i - 1] = arguments[i];\n        }\n    }\n    queue.push(new Item(fun, args));\n    if (queue.length === 1 && !draining) {\n        runTimeout(drainQueue);\n    }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n    this.fun = fun;\n    this.array = array;\n}\nItem.prototype.run = function () {\n    this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n    throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n    throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","\nconst canPromise = require('./can-promise')\n\nconst QRCode = require('./core/qrcode')\nconst CanvasRenderer = require('./renderer/canvas')\nconst SvgRenderer = require('./renderer/svg-tag.js')\n\nfunction renderCanvas (renderFunc, canvas, text, opts, cb) {\n  const args = [].slice.call(arguments, 1)\n  const argsNum = args.length\n  const isLastArgCb = typeof args[argsNum - 1] === 'function'\n\n  if (!isLastArgCb && !canPromise()) {\n    throw new Error('Callback required as last argument')\n  }\n\n  if (isLastArgCb) {\n    if (argsNum < 2) {\n      throw new Error('Too few arguments provided')\n    }\n\n    if (argsNum === 2) {\n      cb = text\n      text = canvas\n      canvas = opts = undefined\n    } else if (argsNum === 3) {\n      if (canvas.getContext && typeof cb === 'undefined') {\n        cb = opts\n        opts = undefined\n      } else {\n        cb = opts\n        opts = text\n        text = canvas\n        canvas = undefined\n      }\n    }\n  } else {\n    if (argsNum < 1) {\n      throw new Error('Too few arguments provided')\n    }\n\n    if (argsNum === 1) {\n      text = canvas\n      canvas = opts = undefined\n    } else if (argsNum === 2 && !canvas.getContext) {\n      opts = text\n      text = canvas\n      canvas = undefined\n    }\n\n    return new Promise(function (resolve, reject) {\n      try {\n        const data = QRCode.create(text, opts)\n        resolve(renderFunc(data, canvas, opts))\n      } catch (e) {\n        reject(e)\n      }\n    })\n  }\n\n  try {\n    const data = QRCode.create(text, opts)\n    cb(null, renderFunc(data, canvas, opts))\n  } catch (e) {\n    cb(e)\n  }\n}\n\nexports.create = QRCode.create\nexports.toCanvas = renderCanvas.bind(null, CanvasRenderer.render)\nexports.toDataURL = renderCanvas.bind(null, CanvasRenderer.renderToDataURL)\n\n// only svg for now.\nexports.toString = renderCanvas.bind(null, function (data, _, opts) {\n  return SvgRenderer.render(data, opts)\n})\n","// can-promise has a crash in some versions of react native that dont have\n// standard global objects\n// https://github.com/soldair/node-qrcode/issues/157\n\nmodule.exports = function () {\n  return typeof Promise === 'function' && Promise.prototype && Promise.prototype.then\n}\n","/**\n * Alignment pattern are fixed reference pattern in defined positions\n * in a matrix symbology, which enables the decode software to re-synchronise\n * the coordinate mapping of the image modules in the event of moderate amounts\n * of distortion of the image.\n *\n * Alignment patterns are present only in QR Code symbols of version 2 or larger\n * and their number depends on the symbol version.\n */\n\nconst getSymbolSize = require('./utils').getSymbolSize\n\n/**\n * Calculate the row/column coordinates of the center module of each alignment pattern\n * for the specified QR Code version.\n *\n * The alignment patterns are positioned symmetrically on either side of the diagonal\n * running from the top left corner of the symbol to the bottom right corner.\n *\n * Since positions are simmetrical only half of the coordinates are returned.\n * Each item of the array will represent in turn the x and y coordinate.\n * @see {@link getPositions}\n *\n * @param  {Number} version QR Code version\n * @return {Array}          Array of coordinate\n */\nexports.getRowColCoords = function getRowColCoords (version) {\n  if (version === 1) return []\n\n  const posCount = Math.floor(version / 7) + 2\n  const size = getSymbolSize(version)\n  const intervals = size === 145 ? 26 : Math.ceil((size - 13) / (2 * posCount - 2)) * 2\n  const positions = [size - 7] // Last coord is always (size - 7)\n\n  for (let i = 1; i < posCount - 1; i++) {\n    positions[i] = positions[i - 1] - intervals\n  }\n\n  positions.push(6) // First coord is always 6\n\n  return positions.reverse()\n}\n\n/**\n * Returns an array containing the positions of each alignment pattern.\n * Each array's element represent the center point of the pattern as (x, y) coordinates\n *\n * Coordinates are calculated expanding the row/column coordinates returned by {@link getRowColCoords}\n * and filtering out the items that overlaps with finder pattern\n *\n * @example\n * For a Version 7 symbol {@link getRowColCoords} returns values 6, 22 and 38.\n * The alignment patterns, therefore, are to be centered on (row, column)\n * positions (6,22), (22,6), (22,22), (22,38), (38,22), (38,38).\n * Note that the coordinates (6,6), (6,38), (38,6) are occupied by finder patterns\n * and are not therefore used for alignment patterns.\n *\n * let pos = getPositions(7)\n * // [[6,22], [22,6], [22,22], [22,38], [38,22], [38,38]]\n *\n * @param  {Number} version QR Code version\n * @return {Array}          Array of coordinates\n */\nexports.getPositions = function getPositions (version) {\n  const coords = []\n  const pos = exports.getRowColCoords(version)\n  const posLength = pos.length\n\n  for (let i = 0; i < posLength; i++) {\n    for (let j = 0; j < posLength; j++) {\n      // Skip if position is occupied by finder patterns\n      if ((i === 0 && j === 0) || // top-left\n          (i === 0 && j === posLength - 1) || // bottom-left\n          (i === posLength - 1 && j === 0)) { // top-right\n        continue\n      }\n\n      coords.push([pos[i], pos[j]])\n    }\n  }\n\n  return coords\n}\n","const Mode = require('./mode')\n\n/**\n * Array of characters available in alphanumeric mode\n *\n * As per QR Code specification, to each character\n * is assigned a value from 0 to 44 which in this case coincides\n * with the array index\n *\n * @type {Array}\n */\nconst ALPHA_NUM_CHARS = [\n  '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',\n  'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',\n  'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',\n  ' ', '$', '%', '*', '+', '-', '.', '/', ':'\n]\n\nfunction AlphanumericData (data) {\n  this.mode = Mode.ALPHANUMERIC\n  this.data = data\n}\n\nAlphanumericData.getBitsLength = function getBitsLength (length) {\n  return 11 * Math.floor(length / 2) + 6 * (length % 2)\n}\n\nAlphanumericData.prototype.getLength = function getLength () {\n  return this.data.length\n}\n\nAlphanumericData.prototype.getBitsLength = function getBitsLength () {\n  return AlphanumericData.getBitsLength(this.data.length)\n}\n\nAlphanumericData.prototype.write = function write (bitBuffer) {\n  let i\n\n  // Input data characters are divided into groups of two characters\n  // and encoded as 11-bit binary codes.\n  for (i = 0; i + 2 <= this.data.length; i += 2) {\n    // The character value of the first character is multiplied by 45\n    let value = ALPHA_NUM_CHARS.indexOf(this.data[i]) * 45\n\n    // The character value of the second digit is added to the product\n    value += ALPHA_NUM_CHARS.indexOf(this.data[i + 1])\n\n    // The sum is then stored as 11-bit binary number\n    bitBuffer.put(value, 11)\n  }\n\n  // If the number of input data characters is not a multiple of two,\n  // the character value of the final character is encoded as a 6-bit binary number.\n  if (this.data.length % 2) {\n    bitBuffer.put(ALPHA_NUM_CHARS.indexOf(this.data[i]), 6)\n  }\n}\n\nmodule.exports = AlphanumericData\n","function BitBuffer () {\n  this.buffer = []\n  this.length = 0\n}\n\nBitBuffer.prototype = {\n\n  get: function (index) {\n    const bufIndex = Math.floor(index / 8)\n    return ((this.buffer[bufIndex] >>> (7 - index % 8)) & 1) === 1\n  },\n\n  put: function (num, length) {\n    for (let i = 0; i < length; i++) {\n      this.putBit(((num >>> (length - i - 1)) & 1) === 1)\n    }\n  },\n\n  getLengthInBits: function () {\n    return this.length\n  },\n\n  putBit: function (bit) {\n    const bufIndex = Math.floor(this.length / 8)\n    if (this.buffer.length <= bufIndex) {\n      this.buffer.push(0)\n    }\n\n    if (bit) {\n      this.buffer[bufIndex] |= (0x80 >>> (this.length % 8))\n    }\n\n    this.length++\n  }\n}\n\nmodule.exports = BitBuffer\n","/**\n * Helper class to handle QR Code symbol modules\n *\n * @param {Number} size Symbol size\n */\nfunction BitMatrix (size) {\n  if (!size || size < 1) {\n    throw new Error('BitMatrix size must be defined and greater than 0')\n  }\n\n  this.size = size\n  this.data = new Uint8Array(size * size)\n  this.reservedBit = new Uint8Array(size * size)\n}\n\n/**\n * Set bit value at specified location\n * If reserved flag is set, this bit will be ignored during masking process\n *\n * @param {Number}  row\n * @param {Number}  col\n * @param {Boolean} value\n * @param {Boolean} reserved\n */\nBitMatrix.prototype.set = function (row, col, value, reserved) {\n  const index = row * this.size + col\n  this.data[index] = value\n  if (reserved) this.reservedBit[index] = true\n}\n\n/**\n * Returns bit value at specified location\n *\n * @param  {Number}  row\n * @param  {Number}  col\n * @return {Boolean}\n */\nBitMatrix.prototype.get = function (row, col) {\n  return this.data[row * this.size + col]\n}\n\n/**\n * Applies xor operator at specified location\n * (used during masking process)\n *\n * @param {Number}  row\n * @param {Number}  col\n * @param {Boolean} value\n */\nBitMatrix.prototype.xor = function (row, col, value) {\n  this.data[row * this.size + col] ^= value\n}\n\n/**\n * Check if bit at specified location is reserved\n *\n * @param {Number}   row\n * @param {Number}   col\n * @return {Boolean}\n */\nBitMatrix.prototype.isReserved = function (row, col) {\n  return this.reservedBit[row * this.size + col]\n}\n\nmodule.exports = BitMatrix\n","const encodeUtf8 = require('encode-utf8')\nconst Mode = require('./mode')\n\nfunction ByteData (data) {\n  this.mode = Mode.BYTE\n  if (typeof (data) === 'string') {\n    data = encodeUtf8(data)\n  }\n  this.data = new Uint8Array(data)\n}\n\nByteData.getBitsLength = function getBitsLength (length) {\n  return length * 8\n}\n\nByteData.prototype.getLength = function getLength () {\n  return this.data.length\n}\n\nByteData.prototype.getBitsLength = function getBitsLength () {\n  return ByteData.getBitsLength(this.data.length)\n}\n\nByteData.prototype.write = function (bitBuffer) {\n  for (let i = 0, l = this.data.length; i < l; i++) {\n    bitBuffer.put(this.data[i], 8)\n  }\n}\n\nmodule.exports = ByteData\n","const ECLevel = require('./error-correction-level')\r\n\r\nconst EC_BLOCKS_TABLE = [\r\n// L  M  Q  H\r\n  1, 1, 1, 1,\r\n  1, 1, 1, 1,\r\n  1, 1, 2, 2,\r\n  1, 2, 2, 4,\r\n  1, 2, 4, 4,\r\n  2, 4, 4, 4,\r\n  2, 4, 6, 5,\r\n  2, 4, 6, 6,\r\n  2, 5, 8, 8,\r\n  4, 5, 8, 8,\r\n  4, 5, 8, 11,\r\n  4, 8, 10, 11,\r\n  4, 9, 12, 16,\r\n  4, 9, 16, 16,\r\n  6, 10, 12, 18,\r\n  6, 10, 17, 16,\r\n  6, 11, 16, 19,\r\n  6, 13, 18, 21,\r\n  7, 14, 21, 25,\r\n  8, 16, 20, 25,\r\n  8, 17, 23, 25,\r\n  9, 17, 23, 34,\r\n  9, 18, 25, 30,\r\n  10, 20, 27, 32,\r\n  12, 21, 29, 35,\r\n  12, 23, 34, 37,\r\n  12, 25, 34, 40,\r\n  13, 26, 35, 42,\r\n  14, 28, 38, 45,\r\n  15, 29, 40, 48,\r\n  16, 31, 43, 51,\r\n  17, 33, 45, 54,\r\n  18, 35, 48, 57,\r\n  19, 37, 51, 60,\r\n  19, 38, 53, 63,\r\n  20, 40, 56, 66,\r\n  21, 43, 59, 70,\r\n  22, 45, 62, 74,\r\n  24, 47, 65, 77,\r\n  25, 49, 68, 81\r\n]\r\n\r\nconst EC_CODEWORDS_TABLE = [\r\n// L  M  Q  H\r\n  7, 10, 13, 17,\r\n  10, 16, 22, 28,\r\n  15, 26, 36, 44,\r\n  20, 36, 52, 64,\r\n  26, 48, 72, 88,\r\n  36, 64, 96, 112,\r\n  40, 72, 108, 130,\r\n  48, 88, 132, 156,\r\n  60, 110, 160, 192,\r\n  72, 130, 192, 224,\r\n  80, 150, 224, 264,\r\n  96, 176, 260, 308,\r\n  104, 198, 288, 352,\r\n  120, 216, 320, 384,\r\n  132, 240, 360, 432,\r\n  144, 280, 408, 480,\r\n  168, 308, 448, 532,\r\n  180, 338, 504, 588,\r\n  196, 364, 546, 650,\r\n  224, 416, 600, 700,\r\n  224, 442, 644, 750,\r\n  252, 476, 690, 816,\r\n  270, 504, 750, 900,\r\n  300, 560, 810, 960,\r\n  312, 588, 870, 1050,\r\n  336, 644, 952, 1110,\r\n  360, 700, 1020, 1200,\r\n  390, 728, 1050, 1260,\r\n  420, 784, 1140, 1350,\r\n  450, 812, 1200, 1440,\r\n  480, 868, 1290, 1530,\r\n  510, 924, 1350, 1620,\r\n  540, 980, 1440, 1710,\r\n  570, 1036, 1530, 1800,\r\n  570, 1064, 1590, 1890,\r\n  600, 1120, 1680, 1980,\r\n  630, 1204, 1770, 2100,\r\n  660, 1260, 1860, 2220,\r\n  720, 1316, 1950, 2310,\r\n  750, 1372, 2040, 2430\r\n]\r\n\r\n/**\r\n * Returns the number of error correction block that the QR Code should contain\r\n * for the specified version and error correction level.\r\n *\r\n * @param  {Number} version              QR Code version\r\n * @param  {Number} errorCorrectionLevel Error correction level\r\n * @return {Number}                      Number of error correction blocks\r\n */\r\nexports.getBlocksCount = function getBlocksCount (version, errorCorrectionLevel) {\r\n  switch (errorCorrectionLevel) {\r\n    case ECLevel.L:\r\n      return EC_BLOCKS_TABLE[(version - 1) * 4 + 0]\r\n    case ECLevel.M:\r\n      return EC_BLOCKS_TABLE[(version - 1) * 4 + 1]\r\n    case ECLevel.Q:\r\n      return EC_BLOCKS_TABLE[(version - 1) * 4 + 2]\r\n    case ECLevel.H:\r\n      return EC_BLOCKS_TABLE[(version - 1) * 4 + 3]\r\n    default:\r\n      return undefined\r\n  }\r\n}\r\n\r\n/**\r\n * Returns the number of error correction codewords to use for the specified\r\n * version and error correction level.\r\n *\r\n * @param  {Number} version              QR Code version\r\n * @param  {Number} errorCorrectionLevel Error correction level\r\n * @return {Number}                      Number of error correction codewords\r\n */\r\nexports.getTotalCodewordsCount = function getTotalCodewordsCount (version, errorCorrectionLevel) {\r\n  switch (errorCorrectionLevel) {\r\n    case ECLevel.L:\r\n      return EC_CODEWORDS_TABLE[(version - 1) * 4 + 0]\r\n    case ECLevel.M:\r\n      return EC_CODEWORDS_TABLE[(version - 1) * 4 + 1]\r\n    case ECLevel.Q:\r\n      return EC_CODEWORDS_TABLE[(version - 1) * 4 + 2]\r\n    case ECLevel.H:\r\n      return EC_CODEWORDS_TABLE[(version - 1) * 4 + 3]\r\n    default:\r\n      return undefined\r\n  }\r\n}\r\n","exports.L = { bit: 1 }\nexports.M = { bit: 0 }\nexports.Q = { bit: 3 }\nexports.H = { bit: 2 }\n\nfunction fromString (string) {\n  if (typeof string !== 'string') {\n    throw new Error('Param is not a string')\n  }\n\n  const lcStr = string.toLowerCase()\n\n  switch (lcStr) {\n    case 'l':\n    case 'low':\n      return exports.L\n\n    case 'm':\n    case 'medium':\n      return exports.M\n\n    case 'q':\n    case 'quartile':\n      return exports.Q\n\n    case 'h':\n    case 'high':\n      return exports.H\n\n    default:\n      throw new Error('Unknown EC Level: ' + string)\n  }\n}\n\nexports.isValid = function isValid (level) {\n  return level && typeof level.bit !== 'undefined' &&\n    level.bit >= 0 && level.bit < 4\n}\n\nexports.from = function from (value, defaultValue) {\n  if (exports.isValid(value)) {\n    return value\n  }\n\n  try {\n    return fromString(value)\n  } catch (e) {\n    return defaultValue\n  }\n}\n","const getSymbolSize = require('./utils').getSymbolSize\nconst FINDER_PATTERN_SIZE = 7\n\n/**\n * Returns an array containing the positions of each finder pattern.\n * Each array's element represent the top-left point of the pattern as (x, y) coordinates\n *\n * @param  {Number} version QR Code version\n * @return {Array}          Array of coordinates\n */\nexports.getPositions = function getPositions (version) {\n  const size = getSymbolSize(version)\n\n  return [\n    // top-left\n    [0, 0],\n    // top-right\n    [size - FINDER_PATTERN_SIZE, 0],\n    // bottom-left\n    [0, size - FINDER_PATTERN_SIZE]\n  ]\n}\n","const Utils = require('./utils')\n\nconst G15 = (1 << 10) | (1 << 8) | (1 << 5) | (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0)\nconst G15_MASK = (1 << 14) | (1 << 12) | (1 << 10) | (1 << 4) | (1 << 1)\nconst G15_BCH = Utils.getBCHDigit(G15)\n\n/**\n * Returns format information with relative error correction bits\n *\n * The format information is a 15-bit sequence containing 5 data bits,\n * with 10 error correction bits calculated using the (15, 5) BCH code.\n *\n * @param  {Number} errorCorrectionLevel Error correction level\n * @param  {Number} mask                 Mask pattern\n * @return {Number}                      Encoded format information bits\n */\nexports.getEncodedBits = function getEncodedBits (errorCorrectionLevel, mask) {\n  const data = ((errorCorrectionLevel.bit << 3) | mask)\n  let d = data << 10\n\n  while (Utils.getBCHDigit(d) - G15_BCH >= 0) {\n    d ^= (G15 << (Utils.getBCHDigit(d) - G15_BCH))\n  }\n\n  // xor final data with mask pattern in order to ensure that\n  // no combination of Error Correction Level and data mask pattern\n  // will result in an all-zero data string\n  return ((data << 10) | d) ^ G15_MASK\n}\n","const EXP_TABLE = new Uint8Array(512)\nconst LOG_TABLE = new Uint8Array(256)\n/**\n * Precompute the log and anti-log tables for faster computation later\n *\n * For each possible value in the galois field 2^8, we will pre-compute\n * the logarithm and anti-logarithm (exponential) of this value\n *\n * ref {@link https://en.wikiversity.org/wiki/Reed%E2%80%93Solomon_codes_for_coders#Introduction_to_mathematical_fields}\n */\n;(function initTables () {\n  let x = 1\n  for (let i = 0; i < 255; i++) {\n    EXP_TABLE[i] = x\n    LOG_TABLE[x] = i\n\n    x <<= 1 // multiply by 2\n\n    // The QR code specification says to use byte-wise modulo 100011101 arithmetic.\n    // This means that when a number is 256 or larger, it should be XORed with 0x11D.\n    if (x & 0x100) { // similar to x >= 256, but a lot faster (because 0x100 == 256)\n      x ^= 0x11D\n    }\n  }\n\n  // Optimization: double the size of the anti-log table so that we don't need to mod 255 to\n  // stay inside the bounds (because we will mainly use this table for the multiplication of\n  // two GF numbers, no more).\n  // @see {@link mul}\n  for (let i = 255; i < 512; i++) {\n    EXP_TABLE[i] = EXP_TABLE[i - 255]\n  }\n}())\n\n/**\n * Returns log value of n inside Galois Field\n *\n * @param  {Number} n\n * @return {Number}\n */\nexports.log = function log (n) {\n  if (n < 1) throw new Error('log(' + n + ')')\n  return LOG_TABLE[n]\n}\n\n/**\n * Returns anti-log value of n inside Galois Field\n *\n * @param  {Number} n\n * @return {Number}\n */\nexports.exp = function exp (n) {\n  return EXP_TABLE[n]\n}\n\n/**\n * Multiplies two number inside Galois Field\n *\n * @param  {Number} x\n * @param  {Number} y\n * @return {Number}\n */\nexports.mul = function mul (x, y) {\n  if (x === 0 || y === 0) return 0\n\n  // should be EXP_TABLE[(LOG_TABLE[x] + LOG_TABLE[y]) % 255] if EXP_TABLE wasn't oversized\n  // @see {@link initTables}\n  return EXP_TABLE[LOG_TABLE[x] + LOG_TABLE[y]]\n}\n","const Mode = require('./mode')\nconst Utils = require('./utils')\n\nfunction KanjiData (data) {\n  this.mode = Mode.KANJI\n  this.data = data\n}\n\nKanjiData.getBitsLength = function getBitsLength (length) {\n  return length * 13\n}\n\nKanjiData.prototype.getLength = function getLength () {\n  return this.data.length\n}\n\nKanjiData.prototype.getBitsLength = function getBitsLength () {\n  return KanjiData.getBitsLength(this.data.length)\n}\n\nKanjiData.prototype.write = function (bitBuffer) {\n  let i\n\n  // In the Shift JIS system, Kanji characters are represented by a two byte combination.\n  // These byte values are shifted from the JIS X 0208 values.\n  // JIS X 0208 gives details of the shift coded representation.\n  for (i = 0; i < this.data.length; i++) {\n    let value = Utils.toSJIS(this.data[i])\n\n    // For characters with Shift JIS values from 0x8140 to 0x9FFC:\n    if (value >= 0x8140 && value <= 0x9FFC) {\n      // Subtract 0x8140 from Shift JIS value\n      value -= 0x8140\n\n    // For characters with Shift JIS values from 0xE040 to 0xEBBF\n    } else if (value >= 0xE040 && value <= 0xEBBF) {\n      // Subtract 0xC140 from Shift JIS value\n      value -= 0xC140\n    } else {\n      throw new Error(\n        'Invalid SJIS character: ' + this.data[i] + '\\n' +\n        'Make sure your charset is UTF-8')\n    }\n\n    // Multiply most significant byte of result by 0xC0\n    // and add least significant byte to product\n    value = (((value >>> 8) & 0xff) * 0xC0) + (value & 0xff)\n\n    // Convert result to a 13-bit binary string\n    bitBuffer.put(value, 13)\n  }\n}\n\nmodule.exports = KanjiData\n","/**\n * Data mask pattern reference\n * @type {Object}\n */\nexports.Patterns = {\n  PATTERN000: 0,\n  PATTERN001: 1,\n  PATTERN010: 2,\n  PATTERN011: 3,\n  PATTERN100: 4,\n  PATTERN101: 5,\n  PATTERN110: 6,\n  PATTERN111: 7\n}\n\n/**\n * Weighted penalty scores for the undesirable features\n * @type {Object}\n */\nconst PenaltyScores = {\n  N1: 3,\n  N2: 3,\n  N3: 40,\n  N4: 10\n}\n\n/**\n * Check if mask pattern value is valid\n *\n * @param  {Number}  mask    Mask pattern\n * @return {Boolean}         true if valid, false otherwise\n */\nexports.isValid = function isValid (mask) {\n  return mask != null && mask !== '' && !isNaN(mask) && mask >= 0 && mask <= 7\n}\n\n/**\n * Returns mask pattern from a value.\n * If value is not valid, returns undefined\n *\n * @param  {Number|String} value        Mask pattern value\n * @return {Number}                     Valid mask pattern or undefined\n */\nexports.from = function from (value) {\n  return exports.isValid(value) ? parseInt(value, 10) : undefined\n}\n\n/**\n* Find adjacent modules in row/column with the same color\n* and assign a penalty value.\n*\n* Points: N1 + i\n* i is the amount by which the number of adjacent modules of the same color exceeds 5\n*/\nexports.getPenaltyN1 = function getPenaltyN1 (data) {\n  const size = data.size\n  let points = 0\n  let sameCountCol = 0\n  let sameCountRow = 0\n  let lastCol = null\n  let lastRow = null\n\n  for (let row = 0; row < size; row++) {\n    sameCountCol = sameCountRow = 0\n    lastCol = lastRow = null\n\n    for (let col = 0; col < size; col++) {\n      let module = data.get(row, col)\n      if (module === lastCol) {\n        sameCountCol++\n      } else {\n        if (sameCountCol >= 5) points += PenaltyScores.N1 + (sameCountCol - 5)\n        lastCol = module\n        sameCountCol = 1\n      }\n\n      module = data.get(col, row)\n      if (module === lastRow) {\n        sameCountRow++\n      } else {\n        if (sameCountRow >= 5) points += PenaltyScores.N1 + (sameCountRow - 5)\n        lastRow = module\n        sameCountRow = 1\n      }\n    }\n\n    if (sameCountCol >= 5) points += PenaltyScores.N1 + (sameCountCol - 5)\n    if (sameCountRow >= 5) points += PenaltyScores.N1 + (sameCountRow - 5)\n  }\n\n  return points\n}\n\n/**\n * Find 2x2 blocks with the same color and assign a penalty value\n *\n * Points: N2 * (m - 1) * (n - 1)\n */\nexports.getPenaltyN2 = function getPenaltyN2 (data) {\n  const size = data.size\n  let points = 0\n\n  for (let row = 0; row < size - 1; row++) {\n    for (let col = 0; col < size - 1; col++) {\n      const last = data.get(row, col) +\n        data.get(row, col + 1) +\n        data.get(row + 1, col) +\n        data.get(row + 1, col + 1)\n\n      if (last === 4 || last === 0) points++\n    }\n  }\n\n  return points * PenaltyScores.N2\n}\n\n/**\n * Find 1:1:3:1:1 ratio (dark:light:dark:light:dark) pattern in row/column,\n * preceded or followed by light area 4 modules wide\n *\n * Points: N3 * number of pattern found\n */\nexports.getPenaltyN3 = function getPenaltyN3 (data) {\n  const size = data.size\n  let points = 0\n  let bitsCol = 0\n  let bitsRow = 0\n\n  for (let row = 0; row < size; row++) {\n    bitsCol = bitsRow = 0\n    for (let col = 0; col < size; col++) {\n      bitsCol = ((bitsCol << 1) & 0x7FF) | data.get(row, col)\n      if (col >= 10 && (bitsCol === 0x5D0 || bitsCol === 0x05D)) points++\n\n      bitsRow = ((bitsRow << 1) & 0x7FF) | data.get(col, row)\n      if (col >= 10 && (bitsRow === 0x5D0 || bitsRow === 0x05D)) points++\n    }\n  }\n\n  return points * PenaltyScores.N3\n}\n\n/**\n * Calculate proportion of dark modules in entire symbol\n *\n * Points: N4 * k\n *\n * k is the rating of the deviation of the proportion of dark modules\n * in the symbol from 50% in steps of 5%\n */\nexports.getPenaltyN4 = function getPenaltyN4 (data) {\n  let darkCount = 0\n  const modulesCount = data.data.length\n\n  for (let i = 0; i < modulesCount; i++) darkCount += data.data[i]\n\n  const k = Math.abs(Math.ceil((darkCount * 100 / modulesCount) / 5) - 10)\n\n  return k * PenaltyScores.N4\n}\n\n/**\n * Return mask value at given position\n *\n * @param  {Number} maskPattern Pattern reference value\n * @param  {Number} i           Row\n * @param  {Number} j           Column\n * @return {Boolean}            Mask value\n */\nfunction getMaskAt (maskPattern, i, j) {\n  switch (maskPattern) {\n    case exports.Patterns.PATTERN000: return (i + j) % 2 === 0\n    case exports.Patterns.PATTERN001: return i % 2 === 0\n    case exports.Patterns.PATTERN010: return j % 3 === 0\n    case exports.Patterns.PATTERN011: return (i + j) % 3 === 0\n    case exports.Patterns.PATTERN100: return (Math.floor(i / 2) + Math.floor(j / 3)) % 2 === 0\n    case exports.Patterns.PATTERN101: return (i * j) % 2 + (i * j) % 3 === 0\n    case exports.Patterns.PATTERN110: return ((i * j) % 2 + (i * j) % 3) % 2 === 0\n    case exports.Patterns.PATTERN111: return ((i * j) % 3 + (i + j) % 2) % 2 === 0\n\n    default: throw new Error('bad maskPattern:' + maskPattern)\n  }\n}\n\n/**\n * Apply a mask pattern to a BitMatrix\n *\n * @param  {Number}    pattern Pattern reference number\n * @param  {BitMatrix} data    BitMatrix data\n */\nexports.applyMask = function applyMask (pattern, data) {\n  const size = data.size\n\n  for (let col = 0; col < size; col++) {\n    for (let row = 0; row < size; row++) {\n      if (data.isReserved(row, col)) continue\n      data.xor(row, col, getMaskAt(pattern, row, col))\n    }\n  }\n}\n\n/**\n * Returns the best mask pattern for data\n *\n * @param  {BitMatrix} data\n * @return {Number} Mask pattern reference number\n */\nexports.getBestMask = function getBestMask (data, setupFormatFunc) {\n  const numPatterns = Object.keys(exports.Patterns).length\n  let bestPattern = 0\n  let lowerPenalty = Infinity\n\n  for (let p = 0; p < numPatterns; p++) {\n    setupFormatFunc(p)\n    exports.applyMask(p, data)\n\n    // Calculate penalty\n    const penalty =\n      exports.getPenaltyN1(data) +\n      exports.getPenaltyN2(data) +\n      exports.getPenaltyN3(data) +\n      exports.getPenaltyN4(data)\n\n    // Undo previously applied mask\n    exports.applyMask(p, data)\n\n    if (penalty < lowerPenalty) {\n      lowerPenalty = penalty\n      bestPattern = p\n    }\n  }\n\n  return bestPattern\n}\n","const VersionCheck = require('./version-check')\nconst Regex = require('./regex')\n\n/**\n * Numeric mode encodes data from the decimal digit set (0 - 9)\n * (byte values 30HEX to 39HEX).\n * Normally, 3 data characters are represented by 10 bits.\n *\n * @type {Object}\n */\nexports.NUMERIC = {\n  id: 'Numeric',\n  bit: 1 << 0,\n  ccBits: [10, 12, 14]\n}\n\n/**\n * Alphanumeric mode encodes data from a set of 45 characters,\n * i.e. 10 numeric digits (0 - 9),\n *      26 alphabetic characters (A - Z),\n *   and 9 symbols (SP, $, %, *, +, -, ., /, :).\n * Normally, two input characters are represented by 11 bits.\n *\n * @type {Object}\n */\nexports.ALPHANUMERIC = {\n  id: 'Alphanumeric',\n  bit: 1 << 1,\n  ccBits: [9, 11, 13]\n}\n\n/**\n * In byte mode, data is encoded at 8 bits per character.\n *\n * @type {Object}\n */\nexports.BYTE = {\n  id: 'Byte',\n  bit: 1 << 2,\n  ccBits: [8, 16, 16]\n}\n\n/**\n * The Kanji mode efficiently encodes Kanji characters in accordance with\n * the Shift JIS system based on JIS X 0208.\n * The Shift JIS values are shifted from the JIS X 0208 values.\n * JIS X 0208 gives details of the shift coded representation.\n * Each two-byte character value is compacted to a 13-bit binary codeword.\n *\n * @type {Object}\n */\nexports.KANJI = {\n  id: 'Kanji',\n  bit: 1 << 3,\n  ccBits: [8, 10, 12]\n}\n\n/**\n * Mixed mode will contain a sequences of data in a combination of any of\n * the modes described above\n *\n * @type {Object}\n */\nexports.MIXED = {\n  bit: -1\n}\n\n/**\n * Returns the number of bits needed to store the data length\n * according to QR Code specifications.\n *\n * @param  {Mode}   mode    Data mode\n * @param  {Number} version QR Code version\n * @return {Number}         Number of bits\n */\nexports.getCharCountIndicator = function getCharCountIndicator (mode, version) {\n  if (!mode.ccBits) throw new Error('Invalid mode: ' + mode)\n\n  if (!VersionCheck.isValid(version)) {\n    throw new Error('Invalid version: ' + version)\n  }\n\n  if (version >= 1 && version < 10) return mode.ccBits[0]\n  else if (version < 27) return mode.ccBits[1]\n  return mode.ccBits[2]\n}\n\n/**\n * Returns the most efficient mode to store the specified data\n *\n * @param  {String} dataStr Input data string\n * @return {Mode}           Best mode\n */\nexports.getBestModeForData = function getBestModeForData (dataStr) {\n  if (Regex.testNumeric(dataStr)) return exports.NUMERIC\n  else if (Regex.testAlphanumeric(dataStr)) return exports.ALPHANUMERIC\n  else if (Regex.testKanji(dataStr)) return exports.KANJI\n  else return exports.BYTE\n}\n\n/**\n * Return mode name as string\n *\n * @param {Mode} mode Mode object\n * @returns {String}  Mode name\n */\nexports.toString = function toString (mode) {\n  if (mode && mode.id) return mode.id\n  throw new Error('Invalid mode')\n}\n\n/**\n * Check if input param is a valid mode object\n *\n * @param   {Mode}    mode Mode object\n * @returns {Boolean} True if valid mode, false otherwise\n */\nexports.isValid = function isValid (mode) {\n  return mode && mode.bit && mode.ccBits\n}\n\n/**\n * Get mode object from its name\n *\n * @param   {String} string Mode name\n * @returns {Mode}          Mode object\n */\nfunction fromString (string) {\n  if (typeof string !== 'string') {\n    throw new Error('Param is not a string')\n  }\n\n  const lcStr = string.toLowerCase()\n\n  switch (lcStr) {\n    case 'numeric':\n      return exports.NUMERIC\n    case 'alphanumeric':\n      return exports.ALPHANUMERIC\n    case 'kanji':\n      return exports.KANJI\n    case 'byte':\n      return exports.BYTE\n    default:\n      throw new Error('Unknown mode: ' + string)\n  }\n}\n\n/**\n * Returns mode from a value.\n * If value is not a valid mode, returns defaultValue\n *\n * @param  {Mode|String} value        Encoding mode\n * @param  {Mode}        defaultValue Fallback value\n * @return {Mode}                     Encoding mode\n */\nexports.from = function from (value, defaultValue) {\n  if (exports.isValid(value)) {\n    return value\n  }\n\n  try {\n    return fromString(value)\n  } catch (e) {\n    return defaultValue\n  }\n}\n","const Mode = require('./mode')\n\nfunction NumericData (data) {\n  this.mode = Mode.NUMERIC\n  this.data = data.toString()\n}\n\nNumericData.getBitsLength = function getBitsLength (length) {\n  return 10 * Math.floor(length / 3) + ((length % 3) ? ((length % 3) * 3 + 1) : 0)\n}\n\nNumericData.prototype.getLength = function getLength () {\n  return this.data.length\n}\n\nNumericData.prototype.getBitsLength = function getBitsLength () {\n  return NumericData.getBitsLength(this.data.length)\n}\n\nNumericData.prototype.write = function write (bitBuffer) {\n  let i, group, value\n\n  // The input data string is divided into groups of three digits,\n  // and each group is converted to its 10-bit binary equivalent.\n  for (i = 0; i + 3 <= this.data.length; i += 3) {\n    group = this.data.substr(i, 3)\n    value = parseInt(group, 10)\n\n    bitBuffer.put(value, 10)\n  }\n\n  // If the number of input digits is not an exact multiple of three,\n  // the final one or two digits are converted to 4 or 7 bits respectively.\n  const remainingNum = this.data.length - i\n  if (remainingNum > 0) {\n    group = this.data.substr(i)\n    value = parseInt(group, 10)\n\n    bitBuffer.put(value, remainingNum * 3 + 1)\n  }\n}\n\nmodule.exports = NumericData\n","const GF = require('./galois-field')\n\n/**\n * Multiplies two polynomials inside Galois Field\n *\n * @param  {Uint8Array} p1 Polynomial\n * @param  {Uint8Array} p2 Polynomial\n * @return {Uint8Array}    Product of p1 and p2\n */\nexports.mul = function mul (p1, p2) {\n  const coeff = new Uint8Array(p1.length + p2.length - 1)\n\n  for (let i = 0; i < p1.length; i++) {\n    for (let j = 0; j < p2.length; j++) {\n      coeff[i + j] ^= GF.mul(p1[i], p2[j])\n    }\n  }\n\n  return coeff\n}\n\n/**\n * Calculate the remainder of polynomials division\n *\n * @param  {Uint8Array} divident Polynomial\n * @param  {Uint8Array} divisor  Polynomial\n * @return {Uint8Array}          Remainder\n */\nexports.mod = function mod (divident, divisor) {\n  let result = new Uint8Array(divident)\n\n  while ((result.length - divisor.length) >= 0) {\n    const coeff = result[0]\n\n    for (let i = 0; i < divisor.length; i++) {\n      result[i] ^= GF.mul(divisor[i], coeff)\n    }\n\n    // remove all zeros from buffer head\n    let offset = 0\n    while (offset < result.length && result[offset] === 0) offset++\n    result = result.slice(offset)\n  }\n\n  return result\n}\n\n/**\n * Generate an irreducible generator polynomial of specified degree\n * (used by Reed-Solomon encoder)\n *\n * @param  {Number} degree Degree of the generator polynomial\n * @return {Uint8Array}    Buffer containing polynomial coefficients\n */\nexports.generateECPolynomial = function generateECPolynomial (degree) {\n  let poly = new Uint8Array([1])\n  for (let i = 0; i < degree; i++) {\n    poly = exports.mul(poly, new Uint8Array([1, GF.exp(i)]))\n  }\n\n  return poly\n}\n","const Utils = require('./utils')\nconst ECLevel = require('./error-correction-level')\nconst BitBuffer = require('./bit-buffer')\nconst BitMatrix = require('./bit-matrix')\nconst AlignmentPattern = require('./alignment-pattern')\nconst FinderPattern = require('./finder-pattern')\nconst MaskPattern = require('./mask-pattern')\nconst ECCode = require('./error-correction-code')\nconst ReedSolomonEncoder = require('./reed-solomon-encoder')\nconst Version = require('./version')\nconst FormatInfo = require('./format-info')\nconst Mode = require('./mode')\nconst Segments = require('./segments')\n\n/**\n * QRCode for JavaScript\n *\n * modified by Ryan Day for nodejs support\n * Copyright (c) 2011 Ryan Day\n *\n * Licensed under the MIT license:\n *   http://www.opensource.org/licenses/mit-license.php\n *\n//---------------------------------------------------------------------\n// QRCode for JavaScript\n//\n// Copyright (c) 2009 Kazuhiko Arase\n//\n// URL: http://www.d-project.com/\n//\n// Licensed under the MIT license:\n//   http://www.opensource.org/licenses/mit-license.php\n//\n// The word \"QR Code\" is registered trademark of\n// DENSO WAVE INCORPORATED\n//   http://www.denso-wave.com/qrcode/faqpatent-e.html\n//\n//---------------------------------------------------------------------\n*/\n\n/**\n * Add finder patterns bits to matrix\n *\n * @param  {BitMatrix} matrix  Modules matrix\n * @param  {Number}    version QR Code version\n */\nfunction setupFinderPattern (matrix, version) {\n  const size = matrix.size\n  const pos = FinderPattern.getPositions(version)\n\n  for (let i = 0; i < pos.length; i++) {\n    const row = pos[i][0]\n    const col = pos[i][1]\n\n    for (let r = -1; r <= 7; r++) {\n      if (row + r <= -1 || size <= row + r) continue\n\n      for (let c = -1; c <= 7; c++) {\n        if (col + c <= -1 || size <= col + c) continue\n\n        if ((r >= 0 && r <= 6 && (c === 0 || c === 6)) ||\n          (c >= 0 && c <= 6 && (r === 0 || r === 6)) ||\n          (r >= 2 && r <= 4 && c >= 2 && c <= 4)) {\n          matrix.set(row + r, col + c, true, true)\n        } else {\n          matrix.set(row + r, col + c, false, true)\n        }\n      }\n    }\n  }\n}\n\n/**\n * Add timing pattern bits to matrix\n *\n * Note: this function must be called before {@link setupAlignmentPattern}\n *\n * @param  {BitMatrix} matrix Modules matrix\n */\nfunction setupTimingPattern (matrix) {\n  const size = matrix.size\n\n  for (let r = 8; r < size - 8; r++) {\n    const value = r % 2 === 0\n    matrix.set(r, 6, value, true)\n    matrix.set(6, r, value, true)\n  }\n}\n\n/**\n * Add alignment patterns bits to matrix\n *\n * Note: this function must be called after {@link setupTimingPattern}\n *\n * @param  {BitMatrix} matrix  Modules matrix\n * @param  {Number}    version QR Code version\n */\nfunction setupAlignmentPattern (matrix, version) {\n  const pos = AlignmentPattern.getPositions(version)\n\n  for (let i = 0; i < pos.length; i++) {\n    const row = pos[i][0]\n    const col = pos[i][1]\n\n    for (let r = -2; r <= 2; r++) {\n      for (let c = -2; c <= 2; c++) {\n        if (r === -2 || r === 2 || c === -2 || c === 2 ||\n          (r === 0 && c === 0)) {\n          matrix.set(row + r, col + c, true, true)\n        } else {\n          matrix.set(row + r, col + c, false, true)\n        }\n      }\n    }\n  }\n}\n\n/**\n * Add version info bits to matrix\n *\n * @param  {BitMatrix} matrix  Modules matrix\n * @param  {Number}    version QR Code version\n */\nfunction setupVersionInfo (matrix, version) {\n  const size = matrix.size\n  const bits = Version.getEncodedBits(version)\n  let row, col, mod\n\n  for (let i = 0; i < 18; i++) {\n    row = Math.floor(i / 3)\n    col = i % 3 + size - 8 - 3\n    mod = ((bits >> i) & 1) === 1\n\n    matrix.set(row, col, mod, true)\n    matrix.set(col, row, mod, true)\n  }\n}\n\n/**\n * Add format info bits to matrix\n *\n * @param  {BitMatrix} matrix               Modules matrix\n * @param  {ErrorCorrectionLevel}    errorCorrectionLevel Error correction level\n * @param  {Number}    maskPattern          Mask pattern reference value\n */\nfunction setupFormatInfo (matrix, errorCorrectionLevel, maskPattern) {\n  const size = matrix.size\n  const bits = FormatInfo.getEncodedBits(errorCorrectionLevel, maskPattern)\n  let i, mod\n\n  for (i = 0; i < 15; i++) {\n    mod = ((bits >> i) & 1) === 1\n\n    // vertical\n    if (i < 6) {\n      matrix.set(i, 8, mod, true)\n    } else if (i < 8) {\n      matrix.set(i + 1, 8, mod, true)\n    } else {\n      matrix.set(size - 15 + i, 8, mod, true)\n    }\n\n    // horizontal\n    if (i < 8) {\n      matrix.set(8, size - i - 1, mod, true)\n    } else if (i < 9) {\n      matrix.set(8, 15 - i - 1 + 1, mod, true)\n    } else {\n      matrix.set(8, 15 - i - 1, mod, true)\n    }\n  }\n\n  // fixed module\n  matrix.set(size - 8, 8, 1, true)\n}\n\n/**\n * Add encoded data bits to matrix\n *\n * @param  {BitMatrix}  matrix Modules matrix\n * @param  {Uint8Array} data   Data codewords\n */\nfunction setupData (matrix, data) {\n  const size = matrix.size\n  let inc = -1\n  let row = size - 1\n  let bitIndex = 7\n  let byteIndex = 0\n\n  for (let col = size - 1; col > 0; col -= 2) {\n    if (col === 6) col--\n\n    while (true) {\n      for (let c = 0; c < 2; c++) {\n        if (!matrix.isReserved(row, col - c)) {\n          let dark = false\n\n          if (byteIndex < data.length) {\n            dark = (((data[byteIndex] >>> bitIndex) & 1) === 1)\n          }\n\n          matrix.set(row, col - c, dark)\n          bitIndex--\n\n          if (bitIndex === -1) {\n            byteIndex++\n            bitIndex = 7\n          }\n        }\n      }\n\n      row += inc\n\n      if (row < 0 || size <= row) {\n        row -= inc\n        inc = -inc\n        break\n      }\n    }\n  }\n}\n\n/**\n * Create encoded codewords from data input\n *\n * @param  {Number}   version              QR Code version\n * @param  {ErrorCorrectionLevel}   errorCorrectionLevel Error correction level\n * @param  {ByteData} data                 Data input\n * @return {Uint8Array}                    Buffer containing encoded codewords\n */\nfunction createData (version, errorCorrectionLevel, segments) {\n  // Prepare data buffer\n  const buffer = new BitBuffer()\n\n  segments.forEach(function (data) {\n    // prefix data with mode indicator (4 bits)\n    buffer.put(data.mode.bit, 4)\n\n    // Prefix data with character count indicator.\n    // The character count indicator is a string of bits that represents the\n    // number of characters that are being encoded.\n    // The character count indicator must be placed after the mode indicator\n    // and must be a certain number of bits long, depending on the QR version\n    // and data mode\n    // @see {@link Mode.getCharCountIndicator}.\n    buffer.put(data.getLength(), Mode.getCharCountIndicator(data.mode, version))\n\n    // add binary data sequence to buffer\n    data.write(buffer)\n  })\n\n  // Calculate required number of bits\n  const totalCodewords = Utils.getSymbolTotalCodewords(version)\n  const ecTotalCodewords = ECCode.getTotalCodewordsCount(version, errorCorrectionLevel)\n  const dataTotalCodewordsBits = (totalCodewords - ecTotalCodewords) * 8\n\n  // Add a terminator.\n  // If the bit string is shorter than the total number of required bits,\n  // a terminator of up to four 0s must be added to the right side of the string.\n  // If the bit string is more than four bits shorter than the required number of bits,\n  // add four 0s to the end.\n  if (buffer.getLengthInBits() + 4 <= dataTotalCodewordsBits) {\n    buffer.put(0, 4)\n  }\n\n  // If the bit string is fewer than four bits shorter, add only the number of 0s that\n  // are needed to reach the required number of bits.\n\n  // After adding the terminator, if the number of bits in the string is not a multiple of 8,\n  // pad the string on the right with 0s to make the string's length a multiple of 8.\n  while (buffer.getLengthInBits() % 8 !== 0) {\n    buffer.putBit(0)\n  }\n\n  // Add pad bytes if the string is still shorter than the total number of required bits.\n  // Extend the buffer to fill the data capacity of the symbol corresponding to\n  // the Version and Error Correction Level by adding the Pad Codewords 11101100 (0xEC)\n  // and 00010001 (0x11) alternately.\n  const remainingByte = (dataTotalCodewordsBits - buffer.getLengthInBits()) / 8\n  for (let i = 0; i < remainingByte; i++) {\n    buffer.put(i % 2 ? 0x11 : 0xEC, 8)\n  }\n\n  return createCodewords(buffer, version, errorCorrectionLevel)\n}\n\n/**\n * Encode input data with Reed-Solomon and return codewords with\n * relative error correction bits\n *\n * @param  {BitBuffer} bitBuffer            Data to encode\n * @param  {Number}    version              QR Code version\n * @param  {ErrorCorrectionLevel} errorCorrectionLevel Error correction level\n * @return {Uint8Array}                     Buffer containing encoded codewords\n */\nfunction createCodewords (bitBuffer, version, errorCorrectionLevel) {\n  // Total codewords for this QR code version (Data + Error correction)\n  const totalCodewords = Utils.getSymbolTotalCodewords(version)\n\n  // Total number of error correction codewords\n  const ecTotalCodewords = ECCode.getTotalCodewordsCount(version, errorCorrectionLevel)\n\n  // Total number of data codewords\n  const dataTotalCodewords = totalCodewords - ecTotalCodewords\n\n  // Total number of blocks\n  const ecTotalBlocks = ECCode.getBlocksCount(version, errorCorrectionLevel)\n\n  // Calculate how many blocks each group should contain\n  const blocksInGroup2 = totalCodewords % ecTotalBlocks\n  const blocksInGroup1 = ecTotalBlocks - blocksInGroup2\n\n  const totalCodewordsInGroup1 = Math.floor(totalCodewords / ecTotalBlocks)\n\n  const dataCodewordsInGroup1 = Math.floor(dataTotalCodewords / ecTotalBlocks)\n  const dataCodewordsInGroup2 = dataCodewordsInGroup1 + 1\n\n  // Number of EC codewords is the same for both groups\n  const ecCount = totalCodewordsInGroup1 - dataCodewordsInGroup1\n\n  // Initialize a Reed-Solomon encoder with a generator polynomial of degree ecCount\n  const rs = new ReedSolomonEncoder(ecCount)\n\n  let offset = 0\n  const dcData = new Array(ecTotalBlocks)\n  const ecData = new Array(ecTotalBlocks)\n  let maxDataSize = 0\n  const buffer = new Uint8Array(bitBuffer.buffer)\n\n  // Divide the buffer into the required number of blocks\n  for (let b = 0; b < ecTotalBlocks; b++) {\n    const dataSize = b < blocksInGroup1 ? dataCodewordsInGroup1 : dataCodewordsInGroup2\n\n    // extract a block of data from buffer\n    dcData[b] = buffer.slice(offset, offset + dataSize)\n\n    // Calculate EC codewords for this data block\n    ecData[b] = rs.encode(dcData[b])\n\n    offset += dataSize\n    maxDataSize = Math.max(maxDataSize, dataSize)\n  }\n\n  // Create final data\n  // Interleave the data and error correction codewords from each block\n  const data = new Uint8Array(totalCodewords)\n  let index = 0\n  let i, r\n\n  // Add data codewords\n  for (i = 0; i < maxDataSize; i++) {\n    for (r = 0; r < ecTotalBlocks; r++) {\n      if (i < dcData[r].length) {\n        data[index++] = dcData[r][i]\n      }\n    }\n  }\n\n  // Apped EC codewords\n  for (i = 0; i < ecCount; i++) {\n    for (r = 0; r < ecTotalBlocks; r++) {\n      data[index++] = ecData[r][i]\n    }\n  }\n\n  return data\n}\n\n/**\n * Build QR Code symbol\n *\n * @param  {String} data                 Input string\n * @param  {Number} version              QR Code version\n * @param  {ErrorCorretionLevel} errorCorrectionLevel Error level\n * @param  {MaskPattern} maskPattern     Mask pattern\n * @return {Object}                      Object containing symbol data\n */\nfunction createSymbol (data, version, errorCorrectionLevel, maskPattern) {\n  let segments\n\n  if (Array.isArray(data)) {\n    segments = Segments.fromArray(data)\n  } else if (typeof data === 'string') {\n    let estimatedVersion = version\n\n    if (!estimatedVersion) {\n      const rawSegments = Segments.rawSplit(data)\n\n      // Estimate best version that can contain raw splitted segments\n      estimatedVersion = Version.getBestVersionForData(rawSegments, errorCorrectionLevel)\n    }\n\n    // Build optimized segments\n    // If estimated version is undefined, try with the highest version\n    segments = Segments.fromString(data, estimatedVersion || 40)\n  } else {\n    throw new Error('Invalid data')\n  }\n\n  // Get the min version that can contain data\n  const bestVersion = Version.getBestVersionForData(segments, errorCorrectionLevel)\n\n  // If no version is found, data cannot be stored\n  if (!bestVersion) {\n    throw new Error('The amount of data is too big to be stored in a QR Code')\n  }\n\n  // If not specified, use min version as default\n  if (!version) {\n    version = bestVersion\n\n  // Check if the specified version can contain the data\n  } else if (version < bestVersion) {\n    throw new Error('\\n' +\n      'The chosen QR Code version cannot contain this amount of data.\\n' +\n      'Minimum version required to store current data is: ' + bestVersion + '.\\n'\n    )\n  }\n\n  const dataBits = createData(version, errorCorrectionLevel, segments)\n\n  // Allocate matrix buffer\n  const moduleCount = Utils.getSymbolSize(version)\n  const modules = new BitMatrix(moduleCount)\n\n  // Add function modules\n  setupFinderPattern(modules, version)\n  setupTimingPattern(modules)\n  setupAlignmentPattern(modules, version)\n\n  // Add temporary dummy bits for format info just to set them as reserved.\n  // This is needed to prevent these bits from being masked by {@link MaskPattern.applyMask}\n  // since the masking operation must be performed only on the encoding region.\n  // These blocks will be replaced with correct values later in code.\n  setupFormatInfo(modules, errorCorrectionLevel, 0)\n\n  if (version >= 7) {\n    setupVersionInfo(modules, version)\n  }\n\n  // Add data codewords\n  setupData(modules, dataBits)\n\n  if (isNaN(maskPattern)) {\n    // Find best mask pattern\n    maskPattern = MaskPattern.getBestMask(modules,\n      setupFormatInfo.bind(null, modules, errorCorrectionLevel))\n  }\n\n  // Apply mask pattern\n  MaskPattern.applyMask(maskPattern, modules)\n\n  // Replace format info bits with correct values\n  setupFormatInfo(modules, errorCorrectionLevel, maskPattern)\n\n  return {\n    modules: modules,\n    version: version,\n    errorCorrectionLevel: errorCorrectionLevel,\n    maskPattern: maskPattern,\n    segments: segments\n  }\n}\n\n/**\n * QR Code\n *\n * @param {String | Array} data                 Input data\n * @param {Object} options                      Optional configurations\n * @param {Number} options.version              QR Code version\n * @param {String} options.errorCorrectionLevel Error correction level\n * @param {Function} options.toSJISFunc         Helper func to convert utf8 to sjis\n */\nexports.create = function create (data, options) {\n  if (typeof data === 'undefined' || data === '') {\n    throw new Error('No input text')\n  }\n\n  let errorCorrectionLevel = ECLevel.M\n  let version\n  let mask\n\n  if (typeof options !== 'undefined') {\n    // Use higher error correction level as default\n    errorCorrectionLevel = ECLevel.from(options.errorCorrectionLevel, ECLevel.M)\n    version = Version.from(options.version)\n    mask = MaskPattern.from(options.maskPattern)\n\n    if (options.toSJISFunc) {\n      Utils.setToSJISFunction(options.toSJISFunc)\n    }\n  }\n\n  return createSymbol(data, version, errorCorrectionLevel, mask)\n}\n","const Polynomial = require('./polynomial')\n\nfunction ReedSolomonEncoder (degree) {\n  this.genPoly = undefined\n  this.degree = degree\n\n  if (this.degree) this.initialize(this.degree)\n}\n\n/**\n * Initialize the encoder.\n * The input param should correspond to the number of error correction codewords.\n *\n * @param  {Number} degree\n */\nReedSolomonEncoder.prototype.initialize = function initialize (degree) {\n  // create an irreducible generator polynomial\n  this.degree = degree\n  this.genPoly = Polynomial.generateECPolynomial(this.degree)\n}\n\n/**\n * Encodes a chunk of data\n *\n * @param  {Uint8Array} data Buffer containing input data\n * @return {Uint8Array}      Buffer containing encoded data\n */\nReedSolomonEncoder.prototype.encode = function encode (data) {\n  if (!this.genPoly) {\n    throw new Error('Encoder not initialized')\n  }\n\n  // Calculate EC for this data block\n  // extends data size to data+genPoly size\n  const paddedData = new Uint8Array(data.length + this.degree)\n  paddedData.set(data)\n\n  // The error correction codewords are the remainder after dividing the data codewords\n  // by a generator polynomial\n  const remainder = Polynomial.mod(paddedData, this.genPoly)\n\n  // return EC data blocks (last n byte, where n is the degree of genPoly)\n  // If coefficients number in remainder are less than genPoly degree,\n  // pad with 0s to the left to reach the needed number of coefficients\n  const start = this.degree - remainder.length\n  if (start > 0) {\n    const buff = new Uint8Array(this.degree)\n    buff.set(remainder, start)\n\n    return buff\n  }\n\n  return remainder\n}\n\nmodule.exports = ReedSolomonEncoder\n","const numeric = '[0-9]+'\nconst alphanumeric = '[A-Z $%*+\\\\-./:]+'\nlet kanji = '(?:[u3000-u303F]|[u3040-u309F]|[u30A0-u30FF]|' +\n  '[uFF00-uFFEF]|[u4E00-u9FAF]|[u2605-u2606]|[u2190-u2195]|u203B|' +\n  '[u2010u2015u2018u2019u2025u2026u201Cu201Du2225u2260]|' +\n  '[u0391-u0451]|[u00A7u00A8u00B1u00B4u00D7u00F7])+'\nkanji = kanji.replace(/u/g, '\\\\u')\n\nconst byte = '(?:(?![A-Z0-9 $%*+\\\\-./:]|' + kanji + ')(?:.|[\\r\\n]))+'\n\nexports.KANJI = new RegExp(kanji, 'g')\nexports.BYTE_KANJI = new RegExp('[^A-Z0-9 $%*+\\\\-./:]+', 'g')\nexports.BYTE = new RegExp(byte, 'g')\nexports.NUMERIC = new RegExp(numeric, 'g')\nexports.ALPHANUMERIC = new RegExp(alphanumeric, 'g')\n\nconst TEST_KANJI = new RegExp('^' + kanji + '$')\nconst TEST_NUMERIC = new RegExp('^' + numeric + '$')\nconst TEST_ALPHANUMERIC = new RegExp('^[A-Z0-9 $%*+\\\\-./:]+$')\n\nexports.testKanji = function testKanji (str) {\n  return TEST_KANJI.test(str)\n}\n\nexports.testNumeric = function testNumeric (str) {\n  return TEST_NUMERIC.test(str)\n}\n\nexports.testAlphanumeric = function testAlphanumeric (str) {\n  return TEST_ALPHANUMERIC.test(str)\n}\n","const Mode = require('./mode')\nconst NumericData = require('./numeric-data')\nconst AlphanumericData = require('./alphanumeric-data')\nconst ByteData = require('./byte-data')\nconst KanjiData = require('./kanji-data')\nconst Regex = require('./regex')\nconst Utils = require('./utils')\nconst dijkstra = require('dijkstrajs')\n\n/**\n * Returns UTF8 byte length\n *\n * @param  {String} str Input string\n * @return {Number}     Number of byte\n */\nfunction getStringByteLength (str) {\n  return unescape(encodeURIComponent(str)).length\n}\n\n/**\n * Get a list of segments of the specified mode\n * from a string\n *\n * @param  {Mode}   mode Segment mode\n * @param  {String} str  String to process\n * @return {Array}       Array of object with segments data\n */\nfunction getSegments (regex, mode, str) {\n  const segments = []\n  let result\n\n  while ((result = regex.exec(str)) !== null) {\n    segments.push({\n      data: result[0],\n      index: result.index,\n      mode: mode,\n      length: result[0].length\n    })\n  }\n\n  return segments\n}\n\n/**\n * Extracts a series of segments with the appropriate\n * modes from a string\n *\n * @param  {String} dataStr Input string\n * @return {Array}          Array of object with segments data\n */\nfunction getSegmentsFromString (dataStr) {\n  const numSegs = getSegments(Regex.NUMERIC, Mode.NUMERIC, dataStr)\n  const alphaNumSegs = getSegments(Regex.ALPHANUMERIC, Mode.ALPHANUMERIC, dataStr)\n  let byteSegs\n  let kanjiSegs\n\n  if (Utils.isKanjiModeEnabled()) {\n    byteSegs = getSegments(Regex.BYTE, Mode.BYTE, dataStr)\n    kanjiSegs = getSegments(Regex.KANJI, Mode.KANJI, dataStr)\n  } else {\n    byteSegs = getSegments(Regex.BYTE_KANJI, Mode.BYTE, dataStr)\n    kanjiSegs = []\n  }\n\n  const segs = numSegs.concat(alphaNumSegs, byteSegs, kanjiSegs)\n\n  return segs\n    .sort(function (s1, s2) {\n      return s1.index - s2.index\n    })\n    .map(function (obj) {\n      return {\n        data: obj.data,\n        mode: obj.mode,\n        length: obj.length\n      }\n    })\n}\n\n/**\n * Returns how many bits are needed to encode a string of\n * specified length with the specified mode\n *\n * @param  {Number} length String length\n * @param  {Mode} mode     Segment mode\n * @return {Number}        Bit length\n */\nfunction getSegmentBitsLength (length, mode) {\n  switch (mode) {\n    case Mode.NUMERIC:\n      return NumericData.getBitsLength(length)\n    case Mode.ALPHANUMERIC:\n      return AlphanumericData.getBitsLength(length)\n    case Mode.KANJI:\n      return KanjiData.getBitsLength(length)\n    case Mode.BYTE:\n      return ByteData.getBitsLength(length)\n  }\n}\n\n/**\n * Merges adjacent segments which have the same mode\n *\n * @param  {Array} segs Array of object with segments data\n * @return {Array}      Array of object with segments data\n */\nfunction mergeSegments (segs) {\n  return segs.reduce(function (acc, curr) {\n    const prevSeg = acc.length - 1 >= 0 ? acc[acc.length - 1] : null\n    if (prevSeg && prevSeg.mode === curr.mode) {\n      acc[acc.length - 1].data += curr.data\n      return acc\n    }\n\n    acc.push(curr)\n    return acc\n  }, [])\n}\n\n/**\n * Generates a list of all possible nodes combination which\n * will be used to build a segments graph.\n *\n * Nodes are divided by groups. Each group will contain a list of all the modes\n * in which is possible to encode the given text.\n *\n * For example the text '12345' can be encoded as Numeric, Alphanumeric or Byte.\n * The group for '12345' will contain then 3 objects, one for each\n * possible encoding mode.\n *\n * Each node represents a possible segment.\n *\n * @param  {Array} segs Array of object with segments data\n * @return {Array}      Array of object with segments data\n */\nfunction buildNodes (segs) {\n  const nodes = []\n  for (let i = 0; i < segs.length; i++) {\n    const seg = segs[i]\n\n    switch (seg.mode) {\n      case Mode.NUMERIC:\n        nodes.push([seg,\n          { data: seg.data, mode: Mode.ALPHANUMERIC, length: seg.length },\n          { data: seg.data, mode: Mode.BYTE, length: seg.length }\n        ])\n        break\n      case Mode.ALPHANUMERIC:\n        nodes.push([seg,\n          { data: seg.data, mode: Mode.BYTE, length: seg.length }\n        ])\n        break\n      case Mode.KANJI:\n        nodes.push([seg,\n          { data: seg.data, mode: Mode.BYTE, length: getStringByteLength(seg.data) }\n        ])\n        break\n      case Mode.BYTE:\n        nodes.push([\n          { data: seg.data, mode: Mode.BYTE, length: getStringByteLength(seg.data) }\n        ])\n    }\n  }\n\n  return nodes\n}\n\n/**\n * Builds a graph from a list of nodes.\n * All segments in each node group will be connected with all the segments of\n * the next group and so on.\n *\n * At each connection will be assigned a weight depending on the\n * segment's byte length.\n *\n * @param  {Array} nodes    Array of object with segments data\n * @param  {Number} version QR Code version\n * @return {Object}         Graph of all possible segments\n */\nfunction buildGraph (nodes, version) {\n  const table = {}\n  const graph = { start: {} }\n  let prevNodeIds = ['start']\n\n  for (let i = 0; i < nodes.length; i++) {\n    const nodeGroup = nodes[i]\n    const currentNodeIds = []\n\n    for (let j = 0; j < nodeGroup.length; j++) {\n      const node = nodeGroup[j]\n      const key = '' + i + j\n\n      currentNodeIds.push(key)\n      table[key] = { node: node, lastCount: 0 }\n      graph[key] = {}\n\n      for (let n = 0; n < prevNodeIds.length; n++) {\n        const prevNodeId = prevNodeIds[n]\n\n        if (table[prevNodeId] && table[prevNodeId].node.mode === node.mode) {\n          graph[prevNodeId][key] =\n            getSegmentBitsLength(table[prevNodeId].lastCount + node.length, node.mode) -\n            getSegmentBitsLength(table[prevNodeId].lastCount, node.mode)\n\n          table[prevNodeId].lastCount += node.length\n        } else {\n          if (table[prevNodeId]) table[prevNodeId].lastCount = node.length\n\n          graph[prevNodeId][key] = getSegmentBitsLength(node.length, node.mode) +\n            4 + Mode.getCharCountIndicator(node.mode, version) // switch cost\n        }\n      }\n    }\n\n    prevNodeIds = currentNodeIds\n  }\n\n  for (let n = 0; n < prevNodeIds.length; n++) {\n    graph[prevNodeIds[n]].end = 0\n  }\n\n  return { map: graph, table: table }\n}\n\n/**\n * Builds a segment from a specified data and mode.\n * If a mode is not specified, the more suitable will be used.\n *\n * @param  {String} data             Input data\n * @param  {Mode | String} modesHint Data mode\n * @return {Segment}                 Segment\n */\nfunction buildSingleSegment (data, modesHint) {\n  let mode\n  const bestMode = Mode.getBestModeForData(data)\n\n  mode = Mode.from(modesHint, bestMode)\n\n  // Make sure data can be encoded\n  if (mode !== Mode.BYTE && mode.bit < bestMode.bit) {\n    throw new Error('\"' + data + '\"' +\n      ' cannot be encoded with mode ' + Mode.toString(mode) +\n      '.\\n Suggested mode is: ' + Mode.toString(bestMode))\n  }\n\n  // Use Mode.BYTE if Kanji support is disabled\n  if (mode === Mode.KANJI && !Utils.isKanjiModeEnabled()) {\n    mode = Mode.BYTE\n  }\n\n  switch (mode) {\n    case Mode.NUMERIC:\n      return new NumericData(data)\n\n    case Mode.ALPHANUMERIC:\n      return new AlphanumericData(data)\n\n    case Mode.KANJI:\n      return new KanjiData(data)\n\n    case Mode.BYTE:\n      return new ByteData(data)\n  }\n}\n\n/**\n * Builds a list of segments from an array.\n * Array can contain Strings or Objects with segment's info.\n *\n * For each item which is a string, will be generated a segment with the given\n * string and the more appropriate encoding mode.\n *\n * For each item which is an object, will be generated a segment with the given\n * data and mode.\n * Objects must contain at least the property \"data\".\n * If property \"mode\" is not present, the more suitable mode will be used.\n *\n * @param  {Array} array Array of objects with segments data\n * @return {Array}       Array of Segments\n */\nexports.fromArray = function fromArray (array) {\n  return array.reduce(function (acc, seg) {\n    if (typeof seg === 'string') {\n      acc.push(buildSingleSegment(seg, null))\n    } else if (seg.data) {\n      acc.push(buildSingleSegment(seg.data, seg.mode))\n    }\n\n    return acc\n  }, [])\n}\n\n/**\n * Builds an optimized sequence of segments from a string,\n * which will produce the shortest possible bitstream.\n *\n * @param  {String} data    Input string\n * @param  {Number} version QR Code version\n * @return {Array}          Array of segments\n */\nexports.fromString = function fromString (data, version) {\n  const segs = getSegmentsFromString(data, Utils.isKanjiModeEnabled())\n\n  const nodes = buildNodes(segs)\n  const graph = buildGraph(nodes, version)\n  const path = dijkstra.find_path(graph.map, 'start', 'end')\n\n  const optimizedSegs = []\n  for (let i = 1; i < path.length - 1; i++) {\n    optimizedSegs.push(graph.table[path[i]].node)\n  }\n\n  return exports.fromArray(mergeSegments(optimizedSegs))\n}\n\n/**\n * Splits a string in various segments with the modes which\n * best represent their content.\n * The produced segments are far from being optimized.\n * The output of this function is only used to estimate a QR Code version\n * which may contain the data.\n *\n * @param  {string} data Input string\n * @return {Array}       Array of segments\n */\nexports.rawSplit = function rawSplit (data) {\n  return exports.fromArray(\n    getSegmentsFromString(data, Utils.isKanjiModeEnabled())\n  )\n}\n","let toSJISFunction\nconst CODEWORDS_COUNT = [\n  0, // Not used\n  26, 44, 70, 100, 134, 172, 196, 242, 292, 346,\n  404, 466, 532, 581, 655, 733, 815, 901, 991, 1085,\n  1156, 1258, 1364, 1474, 1588, 1706, 1828, 1921, 2051, 2185,\n  2323, 2465, 2611, 2761, 2876, 3034, 3196, 3362, 3532, 3706\n]\n\n/**\n * Returns the QR Code size for the specified version\n *\n * @param  {Number} version QR Code version\n * @return {Number}         size of QR code\n */\nexports.getSymbolSize = function getSymbolSize (version) {\n  if (!version) throw new Error('\"version\" cannot be null or undefined')\n  if (version < 1 || version > 40) throw new Error('\"version\" should be in range from 1 to 40')\n  return version * 4 + 17\n}\n\n/**\n * Returns the total number of codewords used to store data and EC information.\n *\n * @param  {Number} version QR Code version\n * @return {Number}         Data length in bits\n */\nexports.getSymbolTotalCodewords = function getSymbolTotalCodewords (version) {\n  return CODEWORDS_COUNT[version]\n}\n\n/**\n * Encode data with Bose-Chaudhuri-Hocquenghem\n *\n * @param  {Number} data Value to encode\n * @return {Number}      Encoded value\n */\nexports.getBCHDigit = function (data) {\n  let digit = 0\n\n  while (data !== 0) {\n    digit++\n    data >>>= 1\n  }\n\n  return digit\n}\n\nexports.setToSJISFunction = function setToSJISFunction (f) {\n  if (typeof f !== 'function') {\n    throw new Error('\"toSJISFunc\" is not a valid function.')\n  }\n\n  toSJISFunction = f\n}\n\nexports.isKanjiModeEnabled = function () {\n  return typeof toSJISFunction !== 'undefined'\n}\n\nexports.toSJIS = function toSJIS (kanji) {\n  return toSJISFunction(kanji)\n}\n","/**\n * Check if QR Code version is valid\n *\n * @param  {Number}  version QR Code version\n * @return {Boolean}         true if valid version, false otherwise\n */\nexports.isValid = function isValid (version) {\n  return !isNaN(version) && version >= 1 && version <= 40\n}\n","const Utils = require('./utils')\nconst ECCode = require('./error-correction-code')\nconst ECLevel = require('./error-correction-level')\nconst Mode = require('./mode')\nconst VersionCheck = require('./version-check')\n\n// Generator polynomial used to encode version information\nconst G18 = (1 << 12) | (1 << 11) | (1 << 10) | (1 << 9) | (1 << 8) | (1 << 5) | (1 << 2) | (1 << 0)\nconst G18_BCH = Utils.getBCHDigit(G18)\n\nfunction getBestVersionForDataLength (mode, length, errorCorrectionLevel) {\n  for (let currentVersion = 1; currentVersion <= 40; currentVersion++) {\n    if (length <= exports.getCapacity(currentVersion, errorCorrectionLevel, mode)) {\n      return currentVersion\n    }\n  }\n\n  return undefined\n}\n\nfunction getReservedBitsCount (mode, version) {\n  // Character count indicator + mode indicator bits\n  return Mode.getCharCountIndicator(mode, version) + 4\n}\n\nfunction getTotalBitsFromDataArray (segments, version) {\n  let totalBits = 0\n\n  segments.forEach(function (data) {\n    const reservedBits = getReservedBitsCount(data.mode, version)\n    totalBits += reservedBits + data.getBitsLength()\n  })\n\n  return totalBits\n}\n\nfunction getBestVersionForMixedData (segments, errorCorrectionLevel) {\n  for (let currentVersion = 1; currentVersion <= 40; currentVersion++) {\n    const length = getTotalBitsFromDataArray(segments, currentVersion)\n    if (length <= exports.getCapacity(currentVersion, errorCorrectionLevel, Mode.MIXED)) {\n      return currentVersion\n    }\n  }\n\n  return undefined\n}\n\n/**\n * Returns version number from a value.\n * If value is not a valid version, returns defaultValue\n *\n * @param  {Number|String} value        QR Code version\n * @param  {Number}        defaultValue Fallback value\n * @return {Number}                     QR Code version number\n */\nexports.from = function from (value, defaultValue) {\n  if (VersionCheck.isValid(value)) {\n    return parseInt(value, 10)\n  }\n\n  return defaultValue\n}\n\n/**\n * Returns how much data can be stored with the specified QR code version\n * and error correction level\n *\n * @param  {Number} version              QR Code version (1-40)\n * @param  {Number} errorCorrectionLevel Error correction level\n * @param  {Mode}   mode                 Data mode\n * @return {Number}                      Quantity of storable data\n */\nexports.getCapacity = function getCapacity (version, errorCorrectionLevel, mode) {\n  if (!VersionCheck.isValid(version)) {\n    throw new Error('Invalid QR Code version')\n  }\n\n  // Use Byte mode as default\n  if (typeof mode === 'undefined') mode = Mode.BYTE\n\n  // Total codewords for this QR code version (Data + Error correction)\n  const totalCodewords = Utils.getSymbolTotalCodewords(version)\n\n  // Total number of error correction codewords\n  const ecTotalCodewords = ECCode.getTotalCodewordsCount(version, errorCorrectionLevel)\n\n  // Total number of data codewords\n  const dataTotalCodewordsBits = (totalCodewords - ecTotalCodewords) * 8\n\n  if (mode === Mode.MIXED) return dataTotalCodewordsBits\n\n  const usableBits = dataTotalCodewordsBits - getReservedBitsCount(mode, version)\n\n  // Return max number of storable codewords\n  switch (mode) {\n    case Mode.NUMERIC:\n      return Math.floor((usableBits / 10) * 3)\n\n    case Mode.ALPHANUMERIC:\n      return Math.floor((usableBits / 11) * 2)\n\n    case Mode.KANJI:\n      return Math.floor(usableBits / 13)\n\n    case Mode.BYTE:\n    default:\n      return Math.floor(usableBits / 8)\n  }\n}\n\n/**\n * Returns the minimum version needed to contain the amount of data\n *\n * @param  {Segment} data                    Segment of data\n * @param  {Number} [errorCorrectionLevel=H] Error correction level\n * @param  {Mode} mode                       Data mode\n * @return {Number}                          QR Code version\n */\nexports.getBestVersionForData = function getBestVersionForData (data, errorCorrectionLevel) {\n  let seg\n\n  const ecl = ECLevel.from(errorCorrectionLevel, ECLevel.M)\n\n  if (Array.isArray(data)) {\n    if (data.length > 1) {\n      return getBestVersionForMixedData(data, ecl)\n    }\n\n    if (data.length === 0) {\n      return 1\n    }\n\n    seg = data[0]\n  } else {\n    seg = data\n  }\n\n  return getBestVersionForDataLength(seg.mode, seg.getLength(), ecl)\n}\n\n/**\n * Returns version information with relative error correction bits\n *\n * The version information is included in QR Code symbols of version 7 or larger.\n * It consists of an 18-bit sequence containing 6 data bits,\n * with 12 error correction bits calculated using the (18, 6) Golay code.\n *\n * @param  {Number} version QR Code version\n * @return {Number}         Encoded version info bits\n */\nexports.getEncodedBits = function getEncodedBits (version) {\n  if (!VersionCheck.isValid(version) || version < 7) {\n    throw new Error('Invalid QR Code version')\n  }\n\n  let d = version << 12\n\n  while (Utils.getBCHDigit(d) - G18_BCH >= 0) {\n    d ^= (G18 << (Utils.getBCHDigit(d) - G18_BCH))\n  }\n\n  return (version << 12) | d\n}\n","const Utils = require('./utils')\n\nfunction clearCanvas (ctx, canvas, size) {\n  ctx.clearRect(0, 0, canvas.width, canvas.height)\n\n  if (!canvas.style) canvas.style = {}\n  canvas.height = size\n  canvas.width = size\n  canvas.style.height = size + 'px'\n  canvas.style.width = size + 'px'\n}\n\nfunction getCanvasElement () {\n  try {\n    return document.createElement('canvas')\n  } catch (e) {\n    throw new Error('You need to specify a canvas element')\n  }\n}\n\nexports.render = function render (qrData, canvas, options) {\n  let opts = options\n  let canvasEl = canvas\n\n  if (typeof opts === 'undefined' && (!canvas || !canvas.getContext)) {\n    opts = canvas\n    canvas = undefined\n  }\n\n  if (!canvas) {\n    canvasEl = getCanvasElement()\n  }\n\n  opts = Utils.getOptions(opts)\n  const size = Utils.getImageWidth(qrData.modules.size, opts)\n\n  const ctx = canvasEl.getContext('2d')\n  const image = ctx.createImageData(size, size)\n  Utils.qrToImageData(image.data, qrData, opts)\n\n  clearCanvas(ctx, canvasEl, size)\n  ctx.putImageData(image, 0, 0)\n\n  return canvasEl\n}\n\nexports.renderToDataURL = function renderToDataURL (qrData, canvas, options) {\n  let opts = options\n\n  if (typeof opts === 'undefined' && (!canvas || !canvas.getContext)) {\n    opts = canvas\n    canvas = undefined\n  }\n\n  if (!opts) opts = {}\n\n  const canvasEl = exports.render(qrData, canvas, opts)\n\n  const type = opts.type || 'image/png'\n  const rendererOpts = opts.rendererOpts || {}\n\n  return canvasEl.toDataURL(type, rendererOpts.quality)\n}\n","const Utils = require('./utils')\n\nfunction getColorAttrib (color, attrib) {\n  const alpha = color.a / 255\n  const str = attrib + '=\"' + color.hex + '\"'\n\n  return alpha < 1\n    ? str + ' ' + attrib + '-opacity=\"' + alpha.toFixed(2).slice(1) + '\"'\n    : str\n}\n\nfunction svgCmd (cmd, x, y) {\n  let str = cmd + x\n  if (typeof y !== 'undefined') str += ' ' + y\n\n  return str\n}\n\nfunction qrToPath (data, size, margin) {\n  let path = ''\n  let moveBy = 0\n  let newRow = false\n  let lineLength = 0\n\n  for (let i = 0; i < data.length; i++) {\n    const col = Math.floor(i % size)\n    const row = Math.floor(i / size)\n\n    if (!col && !newRow) newRow = true\n\n    if (data[i]) {\n      lineLength++\n\n      if (!(i > 0 && col > 0 && data[i - 1])) {\n        path += newRow\n          ? svgCmd('M', col + margin, 0.5 + row + margin)\n          : svgCmd('m', moveBy, 0)\n\n        moveBy = 0\n        newRow = false\n      }\n\n      if (!(col + 1 < size && data[i + 1])) {\n        path += svgCmd('h', lineLength)\n        lineLength = 0\n      }\n    } else {\n      moveBy++\n    }\n  }\n\n  return path\n}\n\nexports.render = function render (qrData, options, cb) {\n  const opts = Utils.getOptions(options)\n  const size = qrData.modules.size\n  const data = qrData.modules.data\n  const qrcodesize = size + opts.margin * 2\n\n  const bg = !opts.color.light.a\n    ? ''\n    : '<path ' + getColorAttrib(opts.color.light, 'fill') +\n      ' d=\"M0 0h' + qrcodesize + 'v' + qrcodesize + 'H0z\"/>'\n\n  const path =\n    '<path ' + getColorAttrib(opts.color.dark, 'stroke') +\n    ' d=\"' + qrToPath(data, size, opts.margin) + '\"/>'\n\n  const viewBox = 'viewBox=\"' + '0 0 ' + qrcodesize + ' ' + qrcodesize + '\"'\n\n  const width = !opts.width ? '' : 'width=\"' + opts.width + '\" height=\"' + opts.width + '\" '\n\n  const svgTag = '<svg xmlns=\"http://www.w3.org/2000/svg\" ' + width + viewBox + ' shape-rendering=\"crispEdges\">' + bg + path + '</svg>\\n'\n\n  if (typeof cb === 'function') {\n    cb(null, svgTag)\n  }\n\n  return svgTag\n}\n","function hex2rgba (hex) {\n  if (typeof hex === 'number') {\n    hex = hex.toString()\n  }\n\n  if (typeof hex !== 'string') {\n    throw new Error('Color should be defined as hex string')\n  }\n\n  let hexCode = hex.slice().replace('#', '').split('')\n  if (hexCode.length < 3 || hexCode.length === 5 || hexCode.length > 8) {\n    throw new Error('Invalid hex color: ' + hex)\n  }\n\n  // Convert from short to long form (fff -> ffffff)\n  if (hexCode.length === 3 || hexCode.length === 4) {\n    hexCode = Array.prototype.concat.apply([], hexCode.map(function (c) {\n      return [c, c]\n    }))\n  }\n\n  // Add default alpha value\n  if (hexCode.length === 6) hexCode.push('F', 'F')\n\n  const hexValue = parseInt(hexCode.join(''), 16)\n\n  return {\n    r: (hexValue >> 24) & 255,\n    g: (hexValue >> 16) & 255,\n    b: (hexValue >> 8) & 255,\n    a: hexValue & 255,\n    hex: '#' + hexCode.slice(0, 6).join('')\n  }\n}\n\nexports.getOptions = function getOptions (options) {\n  if (!options) options = {}\n  if (!options.color) options.color = {}\n\n  const margin = typeof options.margin === 'undefined' ||\n    options.margin === null ||\n    options.margin < 0\n    ? 4\n    : options.margin\n\n  const width = options.width && options.width >= 21 ? options.width : undefined\n  const scale = options.scale || 4\n\n  return {\n    width: width,\n    scale: width ? 4 : scale,\n    margin: margin,\n    color: {\n      dark: hex2rgba(options.color.dark || '#000000ff'),\n      light: hex2rgba(options.color.light || '#ffffffff')\n    },\n    type: options.type,\n    rendererOpts: options.rendererOpts || {}\n  }\n}\n\nexports.getScale = function getScale (qrSize, opts) {\n  return opts.width && opts.width >= qrSize + opts.margin * 2\n    ? opts.width / (qrSize + opts.margin * 2)\n    : opts.scale\n}\n\nexports.getImageWidth = function getImageWidth (qrSize, opts) {\n  const scale = exports.getScale(qrSize, opts)\n  return Math.floor((qrSize + opts.margin * 2) * scale)\n}\n\nexports.qrToImageData = function qrToImageData (imgData, qr, opts) {\n  const size = qr.modules.size\n  const data = qr.modules.data\n  const scale = exports.getScale(size, opts)\n  const symbolSize = Math.floor((size + opts.margin * 2) * scale)\n  const scaledMargin = opts.margin * scale\n  const palette = [opts.color.light, opts.color.dark]\n\n  for (let i = 0; i < symbolSize; i++) {\n    for (let j = 0; j < symbolSize; j++) {\n      let posDst = (i * symbolSize + j) * 4\n      let pxColor = opts.color.light\n\n      if (i >= scaledMargin && j >= scaledMargin &&\n        i < symbolSize - scaledMargin && j < symbolSize - scaledMargin) {\n        const iSrc = Math.floor((i - scaledMargin) / scale)\n        const jSrc = Math.floor((j - scaledMargin) / scale)\n        pxColor = palette[data[iSrc * size + jSrc] ? 1 : 0]\n      }\n\n      imgData[posDst++] = pxColor.r\n      imgData[posDst++] = pxColor.g\n      imgData[posDst++] = pxColor.b\n      imgData[posDst] = pxColor.a\n    }\n  }\n}\n","/*!\n * Select2 4.0.13\n * https://select2.github.io\n *\n * Released under the MIT license\n * https://github.com/select2/select2/blob/master/LICENSE.md\n */\n;(function (factory) {\n  if (typeof define === 'function' && define.amd) {\n    // AMD. Register as an anonymous module.\n    define(['jquery'], factory);\n  } else if (typeof module === 'object' && module.exports) {\n    // Node/CommonJS\n    module.exports = function (root, jQuery) {\n      if (jQuery === undefined) {\n        // require('jQuery') returns a factory that requires window to\n        // build a jQuery instance, we normalize how we use modules\n        // that require this pattern but the window provided is a noop\n        // if it's defined (how jquery works)\n        if (typeof window !== 'undefined') {\n          jQuery = require('jquery');\n        }\n        else {\n          jQuery = require('jquery')(root);\n        }\n      }\n      factory(jQuery);\n      return jQuery;\n    };\n  } else {\n    // Browser globals\n    factory(jQuery);\n  }\n} (function (jQuery) {\n  // This is needed so we can catch the AMD loader configuration and use it\n  // The inner file should be wrapped (by `banner.start.js`) in a function that\n  // returns the AMD loader references.\n  var S2 =(function () {\n  // Restore the Select2 AMD loader so it can be used\n  // Needed mostly in the language files, where the loader is not inserted\n  if (jQuery && jQuery.fn && jQuery.fn.select2 && jQuery.fn.select2.amd) {\n    var S2 = jQuery.fn.select2.amd;\n  }\nvar S2;(function () { if (!S2 || !S2.requirejs) {\nif (!S2) { S2 = {}; } else { require = S2; }\n/**\n * @license almond 0.3.3 Copyright jQuery Foundation and other contributors.\n * Released under MIT license, http://github.com/requirejs/almond/LICENSE\n */\n//Going sloppy to avoid 'use strict' string cost, but strict practices should\n//be followed.\n/*global setTimeout: false */\n\nvar requirejs, require, define;\n(function (undef) {\n    var main, req, makeMap, handlers,\n        defined = {},\n        waiting = {},\n        config = {},\n        defining = {},\n        hasOwn = Object.prototype.hasOwnProperty,\n        aps = [].slice,\n        jsSuffixRegExp = /\\.js$/;\n\n    function hasProp(obj, prop) {\n        return hasOwn.call(obj, prop);\n    }\n\n    /**\n     * Given a relative module name, like ./something, normalize it to\n     * a real name that can be mapped to a path.\n     * @param {String} name the relative name\n     * @param {String} baseName a real name that the name arg is relative\n     * to.\n     * @returns {String} normalized name\n     */\n    function normalize(name, baseName) {\n        var nameParts, nameSegment, mapValue, foundMap, lastIndex,\n            foundI, foundStarMap, starI, i, j, part, normalizedBaseParts,\n            baseParts = baseName && baseName.split(\"/\"),\n            map = config.map,\n            starMap = (map && map['*']) || {};\n\n        //Adjust any relative paths.\n        if (name) {\n            name = name.split('/');\n            lastIndex = name.length - 1;\n\n            // If wanting node ID compatibility, strip .js from end\n            // of IDs. Have to do this here, and not in nameToUrl\n            // because node allows either .js or non .js to map\n            // to same file.\n            if (config.nodeIdCompat && jsSuffixRegExp.test(name[lastIndex])) {\n                name[lastIndex] = name[lastIndex].replace(jsSuffixRegExp, '');\n            }\n\n            // Starts with a '.' so need the baseName\n            if (name[0].charAt(0) === '.' && baseParts) {\n                //Convert baseName to array, and lop off the last part,\n                //so that . matches that 'directory' and not name of the baseName's\n                //module. For instance, baseName of 'one/two/three', maps to\n                //'one/two/three.js', but we want the directory, 'one/two' for\n                //this normalization.\n                normalizedBaseParts = baseParts.slice(0, baseParts.length - 1);\n                name = normalizedBaseParts.concat(name);\n            }\n\n            //start trimDots\n            for (i = 0; i < name.length; i++) {\n                part = name[i];\n                if (part === '.') {\n                    name.splice(i, 1);\n                    i -= 1;\n                } else if (part === '..') {\n                    // If at the start, or previous value is still ..,\n                    // keep them so that when converted to a path it may\n                    // still work when converted to a path, even though\n                    // as an ID it is less than ideal. In larger point\n                    // releases, may be better to just kick out an error.\n                    if (i === 0 || (i === 1 && name[2] === '..') || name[i - 1] === '..') {\n                        continue;\n                    } else if (i > 0) {\n                        name.splice(i - 1, 2);\n                        i -= 2;\n                    }\n                }\n            }\n            //end trimDots\n\n            name = name.join('/');\n        }\n\n        //Apply map config if available.\n        if ((baseParts || starMap) && map) {\n            nameParts = name.split('/');\n\n            for (i = nameParts.length; i > 0; i -= 1) {\n                nameSegment = nameParts.slice(0, i).join(\"/\");\n\n                if (baseParts) {\n                    //Find the longest baseName segment match in the config.\n                    //So, do joins on the biggest to smallest lengths of baseParts.\n                    for (j = baseParts.length; j > 0; j -= 1) {\n                        mapValue = map[baseParts.slice(0, j).join('/')];\n\n                        //baseName segment has  config, find if it has one for\n                        //this name.\n                        if (mapValue) {\n                            mapValue = mapValue[nameSegment];\n                            if (mapValue) {\n                                //Match, update name to the new value.\n                                foundMap = mapValue;\n                                foundI = i;\n                                break;\n                            }\n                        }\n                    }\n                }\n\n                if (foundMap) {\n                    break;\n                }\n\n                //Check for a star map match, but just hold on to it,\n                //if there is a shorter segment match later in a matching\n                //config, then favor over this star map.\n                if (!foundStarMap && starMap && starMap[nameSegment]) {\n                    foundStarMap = starMap[nameSegment];\n                    starI = i;\n                }\n            }\n\n            if (!foundMap && foundStarMap) {\n                foundMap = foundStarMap;\n                foundI = starI;\n            }\n\n            if (foundMap) {\n                nameParts.splice(0, foundI, foundMap);\n                name = nameParts.join('/');\n            }\n        }\n\n        return name;\n    }\n\n    function makeRequire(relName, forceSync) {\n        return function () {\n            //A version of a require function that passes a moduleName\n            //value for items that may need to\n            //look up paths relative to the moduleName\n            var args = aps.call(arguments, 0);\n\n            //If first arg is not require('string'), and there is only\n            //one arg, it is the array form without a callback. Insert\n            //a null so that the following concat is correct.\n            if (typeof args[0] !== 'string' && args.length === 1) {\n                args.push(null);\n            }\n            return req.apply(undef, args.concat([relName, forceSync]));\n        };\n    }\n\n    function makeNormalize(relName) {\n        return function (name) {\n            return normalize(name, relName);\n        };\n    }\n\n    function makeLoad(depName) {\n        return function (value) {\n            defined[depName] = value;\n        };\n    }\n\n    function callDep(name) {\n        if (hasProp(waiting, name)) {\n            var args = waiting[name];\n            delete waiting[name];\n            defining[name] = true;\n            main.apply(undef, args);\n        }\n\n        if (!hasProp(defined, name) && !hasProp(defining, name)) {\n            throw new Error('No ' + name);\n        }\n        return defined[name];\n    }\n\n    //Turns a plugin!resource to [plugin, resource]\n    //with the plugin being undefined if the name\n    //did not have a plugin prefix.\n    function splitPrefix(name) {\n        var prefix,\n            index = name ? name.indexOf('!') : -1;\n        if (index > -1) {\n            prefix = name.substring(0, index);\n            name = name.substring(index + 1, name.length);\n        }\n        return [prefix, name];\n    }\n\n    //Creates a parts array for a relName where first part is plugin ID,\n    //second part is resource ID. Assumes relName has already been normalized.\n    function makeRelParts(relName) {\n        return relName ? splitPrefix(relName) : [];\n    }\n\n    /**\n     * Makes a name map, normalizing the name, and using a plugin\n     * for normalization if necessary. Grabs a ref to plugin\n     * too, as an optimization.\n     */\n    makeMap = function (name, relParts) {\n        var plugin,\n            parts = splitPrefix(name),\n            prefix = parts[0],\n            relResourceName = relParts[1];\n\n        name = parts[1];\n\n        if (prefix) {\n            prefix = normalize(prefix, relResourceName);\n            plugin = callDep(prefix);\n        }\n\n        //Normalize according\n        if (prefix) {\n            if (plugin && plugin.normalize) {\n                name = plugin.normalize(name, makeNormalize(relResourceName));\n            } else {\n                name = normalize(name, relResourceName);\n            }\n        } else {\n            name = normalize(name, relResourceName);\n            parts = splitPrefix(name);\n            prefix = parts[0];\n            name = parts[1];\n            if (prefix) {\n                plugin = callDep(prefix);\n            }\n        }\n\n        //Using ridiculous property names for space reasons\n        return {\n            f: prefix ? prefix + '!' + name : name, //fullName\n            n: name,\n            pr: prefix,\n            p: plugin\n        };\n    };\n\n    function makeConfig(name) {\n        return function () {\n            return (config && config.config && config.config[name]) || {};\n        };\n    }\n\n    handlers = {\n        require: function (name) {\n            return makeRequire(name);\n        },\n        exports: function (name) {\n            var e = defined[name];\n            if (typeof e !== 'undefined') {\n                return e;\n            } else {\n                return (defined[name] = {});\n            }\n        },\n        module: function (name) {\n            return {\n                id: name,\n                uri: '',\n                exports: defined[name],\n                config: makeConfig(name)\n            };\n        }\n    };\n\n    main = function (name, deps, callback, relName) {\n        var cjsModule, depName, ret, map, i, relParts,\n            args = [],\n            callbackType = typeof callback,\n            usingExports;\n\n        //Use name if no relName\n        relName = relName || name;\n        relParts = makeRelParts(relName);\n\n        //Call the callback to define the module, if necessary.\n        if (callbackType === 'undefined' || callbackType === 'function') {\n            //Pull out the defined dependencies and pass the ordered\n            //values to the callback.\n            //Default to [require, exports, module] if no deps\n            deps = !deps.length && callback.length ? ['require', 'exports', 'module'] : deps;\n            for (i = 0; i < deps.length; i += 1) {\n                map = makeMap(deps[i], relParts);\n                depName = map.f;\n\n                //Fast path CommonJS standard dependencies.\n                if (depName === \"require\") {\n                    args[i] = handlers.require(name);\n                } else if (depName === \"exports\") {\n                    //CommonJS module spec 1.1\n                    args[i] = handlers.exports(name);\n                    usingExports = true;\n                } else if (depName === \"module\") {\n                    //CommonJS module spec 1.1\n                    cjsModule = args[i] = handlers.module(name);\n                } else if (hasProp(defined, depName) ||\n                           hasProp(waiting, depName) ||\n                           hasProp(defining, depName)) {\n                    args[i] = callDep(depName);\n                } else if (map.p) {\n                    map.p.load(map.n, makeRequire(relName, true), makeLoad(depName), {});\n                    args[i] = defined[depName];\n                } else {\n                    throw new Error(name + ' missing ' + depName);\n                }\n            }\n\n            ret = callback ? callback.apply(defined[name], args) : undefined;\n\n            if (name) {\n                //If setting exports via \"module\" is in play,\n                //favor that over return value and exports. After that,\n                //favor a non-undefined return value over exports use.\n                if (cjsModule && cjsModule.exports !== undef &&\n                        cjsModule.exports !== defined[name]) {\n                    defined[name] = cjsModule.exports;\n                } else if (ret !== undef || !usingExports) {\n                    //Use the return value from the function.\n                    defined[name] = ret;\n                }\n            }\n        } else if (name) {\n            //May just be an object definition for the module. Only\n            //worry about defining if have a module name.\n            defined[name] = callback;\n        }\n    };\n\n    requirejs = require = req = function (deps, callback, relName, forceSync, alt) {\n        if (typeof deps === \"string\") {\n            if (handlers[deps]) {\n                //callback in this case is really relName\n                return handlers[deps](callback);\n            }\n            //Just return the module wanted. In this scenario, the\n            //deps arg is the module name, and second arg (if passed)\n            //is just the relName.\n            //Normalize module name, if it contains . or ..\n            return callDep(makeMap(deps, makeRelParts(callback)).f);\n        } else if (!deps.splice) {\n            //deps is a config object, not an array.\n            config = deps;\n            if (config.deps) {\n                req(config.deps, config.callback);\n            }\n            if (!callback) {\n                return;\n            }\n\n            if (callback.splice) {\n                //callback is an array, which means it is a dependency list.\n                //Adjust args if there are dependencies\n                deps = callback;\n                callback = relName;\n                relName = null;\n            } else {\n                deps = undef;\n            }\n        }\n\n        //Support require(['a'])\n        callback = callback || function () {};\n\n        //If relName is a function, it is an errback handler,\n        //so remove it.\n        if (typeof relName === 'function') {\n            relName = forceSync;\n            forceSync = alt;\n        }\n\n        //Simulate async callback;\n        if (forceSync) {\n            main(undef, deps, callback, relName);\n        } else {\n            //Using a non-zero value because of concern for what old browsers\n            //do, and latest browsers \"upgrade\" to 4 if lower value is used:\n            //http://www.whatwg.org/specs/web-apps/current-work/multipage/timers.html#dom-windowtimers-settimeout:\n            //If want a value immediately, use require('id') instead -- something\n            //that works in almond on the global level, but not guaranteed and\n            //unlikely to work in other AMD implementations.\n            setTimeout(function () {\n                main(undef, deps, callback, relName);\n            }, 4);\n        }\n\n        return req;\n    };\n\n    /**\n     * Just drops the config on the floor, but returns req in case\n     * the config return value is used.\n     */\n    req.config = function (cfg) {\n        return req(cfg);\n    };\n\n    /**\n     * Expose module registry for debugging and tooling\n     */\n    requirejs._defined = defined;\n\n    define = function (name, deps, callback) {\n        if (typeof name !== 'string') {\n            throw new Error('See almond README: incorrect module build, no module name');\n        }\n\n        //This module may not have dependencies\n        if (!deps.splice) {\n            //deps is not an array, so probably means\n            //an object literal or factory function for\n            //the value. Adjust args.\n            callback = deps;\n            deps = [];\n        }\n\n        if (!hasProp(defined, name) && !hasProp(waiting, name)) {\n            waiting[name] = [name, deps, callback];\n        }\n    };\n\n    define.amd = {\n        jQuery: true\n    };\n}());\n\nS2.requirejs = requirejs;S2.require = require;S2.define = define;\n}\n}());\nS2.define(\"almond\", function(){});\n\n/* global jQuery:false, $:false */\nS2.define('jquery',[],function () {\n  var _$ = jQuery || $;\n\n  if (_$ == null && console && console.error) {\n    console.error(\n      'Select2: An instance of jQuery or a jQuery-compatible library was not ' +\n      'found. Make sure that you are including jQuery before Select2 on your ' +\n      'web page.'\n    );\n  }\n\n  return _$;\n});\n\nS2.define('select2/utils',[\n  'jquery'\n], function ($) {\n  var Utils = {};\n\n  Utils.Extend = function (ChildClass, SuperClass) {\n    var __hasProp = {}.hasOwnProperty;\n\n    function BaseConstructor () {\n      this.constructor = ChildClass;\n    }\n\n    for (var key in SuperClass) {\n      if (__hasProp.call(SuperClass, key)) {\n        ChildClass[key] = SuperClass[key];\n      }\n    }\n\n    BaseConstructor.prototype = SuperClass.prototype;\n    ChildClass.prototype = new BaseConstructor();\n    ChildClass.__super__ = SuperClass.prototype;\n\n    return ChildClass;\n  };\n\n  function getMethods (theClass) {\n    var proto = theClass.prototype;\n\n    var methods = [];\n\n    for (var methodName in proto) {\n      var m = proto[methodName];\n\n      if (typeof m !== 'function') {\n        continue;\n      }\n\n      if (methodName === 'constructor') {\n        continue;\n      }\n\n      methods.push(methodName);\n    }\n\n    return methods;\n  }\n\n  Utils.Decorate = function (SuperClass, DecoratorClass) {\n    var decoratedMethods = getMethods(DecoratorClass);\n    var superMethods = getMethods(SuperClass);\n\n    function DecoratedClass () {\n      var unshift = Array.prototype.unshift;\n\n      var argCount = DecoratorClass.prototype.constructor.length;\n\n      var calledConstructor = SuperClass.prototype.constructor;\n\n      if (argCount > 0) {\n        unshift.call(arguments, SuperClass.prototype.constructor);\n\n        calledConstructor = DecoratorClass.prototype.constructor;\n      }\n\n      calledConstructor.apply(this, arguments);\n    }\n\n    DecoratorClass.displayName = SuperClass.displayName;\n\n    function ctr () {\n      this.constructor = DecoratedClass;\n    }\n\n    DecoratedClass.prototype = new ctr();\n\n    for (var m = 0; m < superMethods.length; m++) {\n      var superMethod = superMethods[m];\n\n      DecoratedClass.prototype[superMethod] =\n        SuperClass.prototype[superMethod];\n    }\n\n    var calledMethod = function (methodName) {\n      // Stub out the original method if it's not decorating an actual method\n      var originalMethod = function () {};\n\n      if (methodName in DecoratedClass.prototype) {\n        originalMethod = DecoratedClass.prototype[methodName];\n      }\n\n      var decoratedMethod = DecoratorClass.prototype[methodName];\n\n      return function () {\n        var unshift = Array.prototype.unshift;\n\n        unshift.call(arguments, originalMethod);\n\n        return decoratedMethod.apply(this, arguments);\n      };\n    };\n\n    for (var d = 0; d < decoratedMethods.length; d++) {\n      var decoratedMethod = decoratedMethods[d];\n\n      DecoratedClass.prototype[decoratedMethod] = calledMethod(decoratedMethod);\n    }\n\n    return DecoratedClass;\n  };\n\n  var Observable = function () {\n    this.listeners = {};\n  };\n\n  Observable.prototype.on = function (event, callback) {\n    this.listeners = this.listeners || {};\n\n    if (event in this.listeners) {\n      this.listeners[event].push(callback);\n    } else {\n      this.listeners[event] = [callback];\n    }\n  };\n\n  Observable.prototype.trigger = function (event) {\n    var slice = Array.prototype.slice;\n    var params = slice.call(arguments, 1);\n\n    this.listeners = this.listeners || {};\n\n    // Params should always come in as an array\n    if (params == null) {\n      params = [];\n    }\n\n    // If there are no arguments to the event, use a temporary object\n    if (params.length === 0) {\n      params.push({});\n    }\n\n    // Set the `_type` of the first object to the event\n    params[0]._type = event;\n\n    if (event in this.listeners) {\n      this.invoke(this.listeners[event], slice.call(arguments, 1));\n    }\n\n    if ('*' in this.listeners) {\n      this.invoke(this.listeners['*'], arguments);\n    }\n  };\n\n  Observable.prototype.invoke = function (listeners, params) {\n    for (var i = 0, len = listeners.length; i < len; i++) {\n      listeners[i].apply(this, params);\n    }\n  };\n\n  Utils.Observable = Observable;\n\n  Utils.generateChars = function (length) {\n    var chars = '';\n\n    for (var i = 0; i < length; i++) {\n      var randomChar = Math.floor(Math.random() * 36);\n      chars += randomChar.toString(36);\n    }\n\n    return chars;\n  };\n\n  Utils.bind = function (func, context) {\n    return function () {\n      func.apply(context, arguments);\n    };\n  };\n\n  Utils._convertData = function (data) {\n    for (var originalKey in data) {\n      var keys = originalKey.split('-');\n\n      var dataLevel = data;\n\n      if (keys.length === 1) {\n        continue;\n      }\n\n      for (var k = 0; k < keys.length; k++) {\n        var key = keys[k];\n\n        // Lowercase the first letter\n        // By default, dash-separated becomes camelCase\n        key = key.substring(0, 1).toLowerCase() + key.substring(1);\n\n        if (!(key in dataLevel)) {\n          dataLevel[key] = {};\n        }\n\n        if (k == keys.length - 1) {\n          dataLevel[key] = data[originalKey];\n        }\n\n        dataLevel = dataLevel[key];\n      }\n\n      delete data[originalKey];\n    }\n\n    return data;\n  };\n\n  Utils.hasScroll = function (index, el) {\n    // Adapted from the function created by @ShadowScripter\n    // and adapted by @BillBarry on the Stack Exchange Code Review website.\n    // The original code can be found at\n    // http://codereview.stackexchange.com/q/13338\n    // and was designed to be used with the Sizzle selector engine.\n\n    var $el = $(el);\n    var overflowX = el.style.overflowX;\n    var overflowY = el.style.overflowY;\n\n    //Check both x and y declarations\n    if (overflowX === overflowY &&\n        (overflowY === 'hidden' || overflowY === 'visible')) {\n      return false;\n    }\n\n    if (overflowX === 'scroll' || overflowY === 'scroll') {\n      return true;\n    }\n\n    return ($el.innerHeight() < el.scrollHeight ||\n      $el.innerWidth() < el.scrollWidth);\n  };\n\n  Utils.escapeMarkup = function (markup) {\n    var replaceMap = {\n      '\\\\': '&#92;',\n      '&': '&amp;',\n      '<': '&lt;',\n      '>': '&gt;',\n      '\"': '&quot;',\n      '\\'': '&#39;',\n      '/': '&#47;'\n    };\n\n    // Do not try to escape the markup if it's not a string\n    if (typeof markup !== 'string') {\n      return markup;\n    }\n\n    return String(markup).replace(/[&<>\"'\\/\\\\]/g, function (match) {\n      return replaceMap[match];\n    });\n  };\n\n  // Append an array of jQuery nodes to a given element.\n  Utils.appendMany = function ($element, $nodes) {\n    // jQuery 1.7.x does not support $.fn.append() with an array\n    // Fall back to a jQuery object collection using $.fn.add()\n    if ($.fn.jquery.substr(0, 3) === '1.7') {\n      var $jqNodes = $();\n\n      $.map($nodes, function (node) {\n        $jqNodes = $jqNodes.add(node);\n      });\n\n      $nodes = $jqNodes;\n    }\n\n    $element.append($nodes);\n  };\n\n  // Cache objects in Utils.__cache instead of $.data (see #4346)\n  Utils.__cache = {};\n\n  var id = 0;\n  Utils.GetUniqueElementId = function (element) {\n    // Get a unique element Id. If element has no id,\n    // creates a new unique number, stores it in the id\n    // attribute and returns the new id.\n    // If an id already exists, it simply returns it.\n\n    var select2Id = element.getAttribute('data-select2-id');\n    if (select2Id == null) {\n      // If element has id, use it.\n      if (element.id) {\n        select2Id = element.id;\n        element.setAttribute('data-select2-id', select2Id);\n      } else {\n        element.setAttribute('data-select2-id', ++id);\n        select2Id = id.toString();\n      }\n    }\n    return select2Id;\n  };\n\n  Utils.StoreData = function (element, name, value) {\n    // Stores an item in the cache for a specified element.\n    // name is the cache key.\n    var id = Utils.GetUniqueElementId(element);\n    if (!Utils.__cache[id]) {\n      Utils.__cache[id] = {};\n    }\n\n    Utils.__cache[id][name] = value;\n  };\n\n  Utils.GetData = function (element, name) {\n    // Retrieves a value from the cache by its key (name)\n    // name is optional. If no name specified, return\n    // all cache items for the specified element.\n    // and for a specified element.\n    var id = Utils.GetUniqueElementId(element);\n    if (name) {\n      if (Utils.__cache[id]) {\n        if (Utils.__cache[id][name] != null) {\n          return Utils.__cache[id][name];\n        }\n        return $(element).data(name); // Fallback to HTML5 data attribs.\n      }\n      return $(element).data(name); // Fallback to HTML5 data attribs.\n    } else {\n      return Utils.__cache[id];\n    }\n  };\n\n  Utils.RemoveData = function (element) {\n    // Removes all cached items for a specified element.\n    var id = Utils.GetUniqueElementId(element);\n    if (Utils.__cache[id] != null) {\n      delete Utils.__cache[id];\n    }\n\n    element.removeAttribute('data-select2-id');\n  };\n\n  return Utils;\n});\n\nS2.define('select2/results',[\n  'jquery',\n  './utils'\n], function ($, Utils) {\n  function Results ($element, options, dataAdapter) {\n    this.$element = $element;\n    this.data = dataAdapter;\n    this.options = options;\n\n    Results.__super__.constructor.call(this);\n  }\n\n  Utils.Extend(Results, Utils.Observable);\n\n  Results.prototype.render = function () {\n    var $results = $(\n      '<ul class=\"select2-results__options\" role=\"listbox\"></ul>'\n    );\n\n    if (this.options.get('multiple')) {\n      $results.attr('aria-multiselectable', 'true');\n    }\n\n    this.$results = $results;\n\n    return $results;\n  };\n\n  Results.prototype.clear = function () {\n    this.$results.empty();\n  };\n\n  Results.prototype.displayMessage = function (params) {\n    var escapeMarkup = this.options.get('escapeMarkup');\n\n    this.clear();\n    this.hideLoading();\n\n    var $message = $(\n      '<li role=\"alert\" aria-live=\"assertive\"' +\n      ' class=\"select2-results__option\"></li>'\n    );\n\n    var message = this.options.get('translations').get(params.message);\n\n    $message.append(\n      escapeMarkup(\n        message(params.args)\n      )\n    );\n\n    $message[0].className += ' select2-results__message';\n\n    this.$results.append($message);\n  };\n\n  Results.prototype.hideMessages = function () {\n    this.$results.find('.select2-results__message').remove();\n  };\n\n  Results.prototype.append = function (data) {\n    this.hideLoading();\n\n    var $options = [];\n\n    if (data.results == null || data.results.length === 0) {\n      if (this.$results.children().length === 0) {\n        this.trigger('results:message', {\n          message: 'noResults'\n        });\n      }\n\n      return;\n    }\n\n    data.results = this.sort(data.results);\n\n    for (var d = 0; d < data.results.length; d++) {\n      var item = data.results[d];\n\n      var $option = this.option(item);\n\n      $options.push($option);\n    }\n\n    this.$results.append($options);\n  };\n\n  Results.prototype.position = function ($results, $dropdown) {\n    var $resultsContainer = $dropdown.find('.select2-results');\n    $resultsContainer.append($results);\n  };\n\n  Results.prototype.sort = function (data) {\n    var sorter = this.options.get('sorter');\n\n    return sorter(data);\n  };\n\n  Results.prototype.highlightFirstItem = function () {\n    var $options = this.$results\n      .find('.select2-results__option[aria-selected]');\n\n    var $selected = $options.filter('[aria-selected=true]');\n\n    // Check if there are any selected options\n    if ($selected.length > 0) {\n      // If there are selected options, highlight the first\n      $selected.first().trigger('mouseenter');\n    } else {\n      // If there are no selected options, highlight the first option\n      // in the dropdown\n      $options.first().trigger('mouseenter');\n    }\n\n    this.ensureHighlightVisible();\n  };\n\n  Results.prototype.setClasses = function () {\n    var self = this;\n\n    this.data.current(function (selected) {\n      var selectedIds = $.map(selected, function (s) {\n        return s.id.toString();\n      });\n\n      var $options = self.$results\n        .find('.select2-results__option[aria-selected]');\n\n      $options.each(function () {\n        var $option = $(this);\n\n        var item = Utils.GetData(this, 'data');\n\n        // id needs to be converted to a string when comparing\n        var id = '' + item.id;\n\n        if ((item.element != null && item.element.selected) ||\n            (item.element == null && $.inArray(id, selectedIds) > -1)) {\n          $option.attr('aria-selected', 'true');\n        } else {\n          $option.attr('aria-selected', 'false');\n        }\n      });\n\n    });\n  };\n\n  Results.prototype.showLoading = function (params) {\n    this.hideLoading();\n\n    var loadingMore = this.options.get('translations').get('searching');\n\n    var loading = {\n      disabled: true,\n      loading: true,\n      text: loadingMore(params)\n    };\n    var $loading = this.option(loading);\n    $loading.className += ' loading-results';\n\n    this.$results.prepend($loading);\n  };\n\n  Results.prototype.hideLoading = function () {\n    this.$results.find('.loading-results').remove();\n  };\n\n  Results.prototype.option = function (data) {\n    var option = document.createElement('li');\n    option.className = 'select2-results__option';\n\n    var attrs = {\n      'role': 'option',\n      'aria-selected': 'false'\n    };\n\n    var matches = window.Element.prototype.matches ||\n      window.Element.prototype.msMatchesSelector ||\n      window.Element.prototype.webkitMatchesSelector;\n\n    if ((data.element != null && matches.call(data.element, ':disabled')) ||\n        (data.element == null && data.disabled)) {\n      delete attrs['aria-selected'];\n      attrs['aria-disabled'] = 'true';\n    }\n\n    if (data.id == null) {\n      delete attrs['aria-selected'];\n    }\n\n    if (data._resultId != null) {\n      option.id = data._resultId;\n    }\n\n    if (data.title) {\n      option.title = data.title;\n    }\n\n    if (data.children) {\n      attrs.role = 'group';\n      attrs['aria-label'] = data.text;\n      delete attrs['aria-selected'];\n    }\n\n    for (var attr in attrs) {\n      var val = attrs[attr];\n\n      option.setAttribute(attr, val);\n    }\n\n    if (data.children) {\n      var $option = $(option);\n\n      var label = document.createElement('strong');\n      label.className = 'select2-results__group';\n\n      var $label = $(label);\n      this.template(data, label);\n\n      var $children = [];\n\n      for (var c = 0; c < data.children.length; c++) {\n        var child = data.children[c];\n\n        var $child = this.option(child);\n\n        $children.push($child);\n      }\n\n      var $childrenContainer = $('<ul></ul>', {\n        'class': 'select2-results__options select2-results__options--nested'\n      });\n\n      $childrenContainer.append($children);\n\n      $option.append(label);\n      $option.append($childrenContainer);\n    } else {\n      this.template(data, option);\n    }\n\n    Utils.StoreData(option, 'data', data);\n\n    return option;\n  };\n\n  Results.prototype.bind = function (container, $container) {\n    var self = this;\n\n    var id = container.id + '-results';\n\n    this.$results.attr('id', id);\n\n    container.on('results:all', function (params) {\n      self.clear();\n      self.append(params.data);\n\n      if (container.isOpen()) {\n        self.setClasses();\n        self.highlightFirstItem();\n      }\n    });\n\n    container.on('results:append', function (params) {\n      self.append(params.data);\n\n      if (container.isOpen()) {\n        self.setClasses();\n      }\n    });\n\n    container.on('query', function (params) {\n      self.hideMessages();\n      self.showLoading(params);\n    });\n\n    container.on('select', function () {\n      if (!container.isOpen()) {\n        return;\n      }\n\n      self.setClasses();\n\n      if (self.options.get('scrollAfterSelect')) {\n        self.highlightFirstItem();\n      }\n    });\n\n    container.on('unselect', function () {\n      if (!container.isOpen()) {\n        return;\n      }\n\n      self.setClasses();\n\n      if (self.options.get('scrollAfterSelect')) {\n        self.highlightFirstItem();\n      }\n    });\n\n    container.on('open', function () {\n      // When the dropdown is open, aria-expended=\"true\"\n      self.$results.attr('aria-expanded', 'true');\n      self.$results.attr('aria-hidden', 'false');\n\n      self.setClasses();\n      self.ensureHighlightVisible();\n    });\n\n    container.on('close', function () {\n      // When the dropdown is closed, aria-expended=\"false\"\n      self.$results.attr('aria-expanded', 'false');\n      self.$results.attr('aria-hidden', 'true');\n      self.$results.removeAttr('aria-activedescendant');\n    });\n\n    container.on('results:toggle', function () {\n      var $highlighted = self.getHighlightedResults();\n\n      if ($highlighted.length === 0) {\n        return;\n      }\n\n      $highlighted.trigger('mouseup');\n    });\n\n    container.on('results:select', function () {\n      var $highlighted = self.getHighlightedResults();\n\n      if ($highlighted.length === 0) {\n        return;\n      }\n\n      var data = Utils.GetData($highlighted[0], 'data');\n\n      if ($highlighted.attr('aria-selected') == 'true') {\n        self.trigger('close', {});\n      } else {\n        self.trigger('select', {\n          data: data\n        });\n      }\n    });\n\n    container.on('results:previous', function () {\n      var $highlighted = self.getHighlightedResults();\n\n      var $options = self.$results.find('[aria-selected]');\n\n      var currentIndex = $options.index($highlighted);\n\n      // If we are already at the top, don't move further\n      // If no options, currentIndex will be -1\n      if (currentIndex <= 0) {\n        return;\n      }\n\n      var nextIndex = currentIndex - 1;\n\n      // If none are highlighted, highlight the first\n      if ($highlighted.length === 0) {\n        nextIndex = 0;\n      }\n\n      var $next = $options.eq(nextIndex);\n\n      $next.trigger('mouseenter');\n\n      var currentOffset = self.$results.offset().top;\n      var nextTop = $next.offset().top;\n      var nextOffset = self.$results.scrollTop() + (nextTop - currentOffset);\n\n      if (nextIndex === 0) {\n        self.$results.scrollTop(0);\n      } else if (nextTop - currentOffset < 0) {\n        self.$results.scrollTop(nextOffset);\n      }\n    });\n\n    container.on('results:next', function () {\n      var $highlighted = self.getHighlightedResults();\n\n      var $options = self.$results.find('[aria-selected]');\n\n      var currentIndex = $options.index($highlighted);\n\n      var nextIndex = currentIndex + 1;\n\n      // If we are at the last option, stay there\n      if (nextIndex >= $options.length) {\n        return;\n      }\n\n      var $next = $options.eq(nextIndex);\n\n      $next.trigger('mouseenter');\n\n      var currentOffset = self.$results.offset().top +\n        self.$results.outerHeight(false);\n      var nextBottom = $next.offset().top + $next.outerHeight(false);\n      var nextOffset = self.$results.scrollTop() + nextBottom - currentOffset;\n\n      if (nextIndex === 0) {\n        self.$results.scrollTop(0);\n      } else if (nextBottom > currentOffset) {\n        self.$results.scrollTop(nextOffset);\n      }\n    });\n\n    container.on('results:focus', function (params) {\n      params.element.addClass('select2-results__option--highlighted');\n    });\n\n    container.on('results:message', function (params) {\n      self.displayMessage(params);\n    });\n\n    if ($.fn.mousewheel) {\n      this.$results.on('mousewheel', function (e) {\n        var top = self.$results.scrollTop();\n\n        var bottom = self.$results.get(0).scrollHeight - top + e.deltaY;\n\n        var isAtTop = e.deltaY > 0 && top - e.deltaY <= 0;\n        var isAtBottom = e.deltaY < 0 && bottom <= self.$results.height();\n\n        if (isAtTop) {\n          self.$results.scrollTop(0);\n\n          e.preventDefault();\n          e.stopPropagation();\n        } else if (isAtBottom) {\n          self.$results.scrollTop(\n            self.$results.get(0).scrollHeight - self.$results.height()\n          );\n\n          e.preventDefault();\n          e.stopPropagation();\n        }\n      });\n    }\n\n    this.$results.on('mouseup', '.select2-results__option[aria-selected]',\n      function (evt) {\n      var $this = $(this);\n\n      var data = Utils.GetData(this, 'data');\n\n      if ($this.attr('aria-selected') === 'true') {\n        if (self.options.get('multiple')) {\n          self.trigger('unselect', {\n            originalEvent: evt,\n            data: data\n          });\n        } else {\n          self.trigger('close', {});\n        }\n\n        return;\n      }\n\n      self.trigger('select', {\n        originalEvent: evt,\n        data: data\n      });\n    });\n\n    this.$results.on('mouseenter', '.select2-results__option[aria-selected]',\n      function (evt) {\n      var data = Utils.GetData(this, 'data');\n\n      self.getHighlightedResults()\n          .removeClass('select2-results__option--highlighted');\n\n      self.trigger('results:focus', {\n        data: data,\n        element: $(this)\n      });\n    });\n  };\n\n  Results.prototype.getHighlightedResults = function () {\n    var $highlighted = this.$results\n    .find('.select2-results__option--highlighted');\n\n    return $highlighted;\n  };\n\n  Results.prototype.destroy = function () {\n    this.$results.remove();\n  };\n\n  Results.prototype.ensureHighlightVisible = function () {\n    var $highlighted = this.getHighlightedResults();\n\n    if ($highlighted.length === 0) {\n      return;\n    }\n\n    var $options = this.$results.find('[aria-selected]');\n\n    var currentIndex = $options.index($highlighted);\n\n    var currentOffset = this.$results.offset().top;\n    var nextTop = $highlighted.offset().top;\n    var nextOffset = this.$results.scrollTop() + (nextTop - currentOffset);\n\n    var offsetDelta = nextTop - currentOffset;\n    nextOffset -= $highlighted.outerHeight(false) * 2;\n\n    if (currentIndex <= 2) {\n      this.$results.scrollTop(0);\n    } else if (offsetDelta > this.$results.outerHeight() || offsetDelta < 0) {\n      this.$results.scrollTop(nextOffset);\n    }\n  };\n\n  Results.prototype.template = function (result, container) {\n    var template = this.options.get('templateResult');\n    var escapeMarkup = this.options.get('escapeMarkup');\n\n    var content = template(result, container);\n\n    if (content == null) {\n      container.style.display = 'none';\n    } else if (typeof content === 'string') {\n      container.innerHTML = escapeMarkup(content);\n    } else {\n      $(container).append(content);\n    }\n  };\n\n  return Results;\n});\n\nS2.define('select2/keys',[\n\n], function () {\n  var KEYS = {\n    BACKSPACE: 8,\n    TAB: 9,\n    ENTER: 13,\n    SHIFT: 16,\n    CTRL: 17,\n    ALT: 18,\n    ESC: 27,\n    SPACE: 32,\n    PAGE_UP: 33,\n    PAGE_DOWN: 34,\n    END: 35,\n    HOME: 36,\n    LEFT: 37,\n    UP: 38,\n    RIGHT: 39,\n    DOWN: 40,\n    DELETE: 46\n  };\n\n  return KEYS;\n});\n\nS2.define('select2/selection/base',[\n  'jquery',\n  '../utils',\n  '../keys'\n], function ($, Utils, KEYS) {\n  function BaseSelection ($element, options) {\n    this.$element = $element;\n    this.options = options;\n\n    BaseSelection.__super__.constructor.call(this);\n  }\n\n  Utils.Extend(BaseSelection, Utils.Observable);\n\n  BaseSelection.prototype.render = function () {\n    var $selection = $(\n      '<span class=\"select2-selection\" role=\"combobox\" ' +\n      ' aria-haspopup=\"true\" aria-expanded=\"false\">' +\n      '</span>'\n    );\n\n    this._tabindex = 0;\n\n    if (Utils.GetData(this.$element[0], 'old-tabindex') != null) {\n      this._tabindex = Utils.GetData(this.$element[0], 'old-tabindex');\n    } else if (this.$element.attr('tabindex') != null) {\n      this._tabindex = this.$element.attr('tabindex');\n    }\n\n    $selection.attr('title', this.$element.attr('title'));\n    $selection.attr('tabindex', this._tabindex);\n    $selection.attr('aria-disabled', 'false');\n\n    this.$selection = $selection;\n\n    return $selection;\n  };\n\n  BaseSelection.prototype.bind = function (container, $container) {\n    var self = this;\n\n    var resultsId = container.id + '-results';\n\n    this.container = container;\n\n    this.$selection.on('focus', function (evt) {\n      self.trigger('focus', evt);\n    });\n\n    this.$selection.on('blur', function (evt) {\n      self._handleBlur(evt);\n    });\n\n    this.$selection.on('keydown', function (evt) {\n      self.trigger('keypress', evt);\n\n      if (evt.which === KEYS.SPACE) {\n        evt.preventDefault();\n      }\n    });\n\n    container.on('results:focus', function (params) {\n      self.$selection.attr('aria-activedescendant', params.data._resultId);\n    });\n\n    container.on('selection:update', function (params) {\n      self.update(params.data);\n    });\n\n    container.on('open', function () {\n      // When the dropdown is open, aria-expanded=\"true\"\n      self.$selection.attr('aria-expanded', 'true');\n      self.$selection.attr('aria-owns', resultsId);\n\n      self._attachCloseHandler(container);\n    });\n\n    container.on('close', function () {\n      // When the dropdown is closed, aria-expanded=\"false\"\n      self.$selection.attr('aria-expanded', 'false');\n      self.$selection.removeAttr('aria-activedescendant');\n      self.$selection.removeAttr('aria-owns');\n\n      self.$selection.trigger('focus');\n\n      self._detachCloseHandler(container);\n    });\n\n    container.on('enable', function () {\n      self.$selection.attr('tabindex', self._tabindex);\n      self.$selection.attr('aria-disabled', 'false');\n    });\n\n    container.on('disable', function () {\n      self.$selection.attr('tabindex', '-1');\n      self.$selection.attr('aria-disabled', 'true');\n    });\n  };\n\n  BaseSelection.prototype._handleBlur = function (evt) {\n    var self = this;\n\n    // This needs to be delayed as the active element is the body when the tab\n    // key is pressed, possibly along with others.\n    window.setTimeout(function () {\n      // Don't trigger `blur` if the focus is still in the selection\n      if (\n        (document.activeElement == self.$selection[0]) ||\n        ($.contains(self.$selection[0], document.activeElement))\n      ) {\n        return;\n      }\n\n      self.trigger('blur', evt);\n    }, 1);\n  };\n\n  BaseSelection.prototype._attachCloseHandler = function (container) {\n\n    $(document.body).on('mousedown.select2.' + container.id, function (e) {\n      var $target = $(e.target);\n\n      var $select = $target.closest('.select2');\n\n      var $all = $('.select2.select2-container--open');\n\n      $all.each(function () {\n        if (this == $select[0]) {\n          return;\n        }\n\n        var $element = Utils.GetData(this, 'element');\n\n        $element.select2('close');\n      });\n    });\n  };\n\n  BaseSelection.prototype._detachCloseHandler = function (container) {\n    $(document.body).off('mousedown.select2.' + container.id);\n  };\n\n  BaseSelection.prototype.position = function ($selection, $container) {\n    var $selectionContainer = $container.find('.selection');\n    $selectionContainer.append($selection);\n  };\n\n  BaseSelection.prototype.destroy = function () {\n    this._detachCloseHandler(this.container);\n  };\n\n  BaseSelection.prototype.update = function (data) {\n    throw new Error('The `update` method must be defined in child classes.');\n  };\n\n  /**\n   * Helper method to abstract the \"enabled\" (not \"disabled\") state of this\n   * object.\n   *\n   * @return {true} if the instance is not disabled.\n   * @return {false} if the instance is disabled.\n   */\n  BaseSelection.prototype.isEnabled = function () {\n    return !this.isDisabled();\n  };\n\n  /**\n   * Helper method to abstract the \"disabled\" state of this object.\n   *\n   * @return {true} if the disabled option is true.\n   * @return {false} if the disabled option is false.\n   */\n  BaseSelection.prototype.isDisabled = function () {\n    return this.options.get('disabled');\n  };\n\n  return BaseSelection;\n});\n\nS2.define('select2/selection/single',[\n  'jquery',\n  './base',\n  '../utils',\n  '../keys'\n], function ($, BaseSelection, Utils, KEYS) {\n  function SingleSelection () {\n    SingleSelection.__super__.constructor.apply(this, arguments);\n  }\n\n  Utils.Extend(SingleSelection, BaseSelection);\n\n  SingleSelection.prototype.render = function () {\n    var $selection = SingleSelection.__super__.render.call(this);\n\n    $selection.addClass('select2-selection--single');\n\n    $selection.html(\n      '<span class=\"select2-selection__rendered\"></span>' +\n      '<span class=\"select2-selection__arrow\" role=\"presentation\">' +\n        '<b role=\"presentation\"></b>' +\n      '</span>'\n    );\n\n    return $selection;\n  };\n\n  SingleSelection.prototype.bind = function (container, $container) {\n    var self = this;\n\n    SingleSelection.__super__.bind.apply(this, arguments);\n\n    var id = container.id + '-container';\n\n    this.$selection.find('.select2-selection__rendered')\n      .attr('id', id)\n      .attr('role', 'textbox')\n      .attr('aria-readonly', 'true');\n    this.$selection.attr('aria-labelledby', id);\n\n    this.$selection.on('mousedown', function (evt) {\n      // Only respond to left clicks\n      if (evt.which !== 1) {\n        return;\n      }\n\n      self.trigger('toggle', {\n        originalEvent: evt\n      });\n    });\n\n    this.$selection.on('focus', function (evt) {\n      // User focuses on the container\n    });\n\n    this.$selection.on('blur', function (evt) {\n      // User exits the container\n    });\n\n    container.on('focus', function (evt) {\n      if (!container.isOpen()) {\n        self.$selection.trigger('focus');\n      }\n    });\n  };\n\n  SingleSelection.prototype.clear = function () {\n    var $rendered = this.$selection.find('.select2-selection__rendered');\n    $rendered.empty();\n    $rendered.removeAttr('title'); // clear tooltip on empty\n  };\n\n  SingleSelection.prototype.display = function (data, container) {\n    var template = this.options.get('templateSelection');\n    var escapeMarkup = this.options.get('escapeMarkup');\n\n    return escapeMarkup(template(data, container));\n  };\n\n  SingleSelection.prototype.selectionContainer = function () {\n    return $('<span></span>');\n  };\n\n  SingleSelection.prototype.update = function (data) {\n    if (data.length === 0) {\n      this.clear();\n      return;\n    }\n\n    var selection = data[0];\n\n    var $rendered = this.$selection.find('.select2-selection__rendered');\n    var formatted = this.display(selection, $rendered);\n\n    $rendered.empty().append(formatted);\n\n    var title = selection.title || selection.text;\n\n    if (title) {\n      $rendered.attr('title', title);\n    } else {\n      $rendered.removeAttr('title');\n    }\n  };\n\n  return SingleSelection;\n});\n\nS2.define('select2/selection/multiple',[\n  'jquery',\n  './base',\n  '../utils'\n], function ($, BaseSelection, Utils) {\n  function MultipleSelection ($element, options) {\n    MultipleSelection.__super__.constructor.apply(this, arguments);\n  }\n\n  Utils.Extend(MultipleSelection, BaseSelection);\n\n  MultipleSelection.prototype.render = function () {\n    var $selection = MultipleSelection.__super__.render.call(this);\n\n    $selection.addClass('select2-selection--multiple');\n\n    $selection.html(\n      '<ul class=\"select2-selection__rendered\"></ul>'\n    );\n\n    return $selection;\n  };\n\n  MultipleSelection.prototype.bind = function (container, $container) {\n    var self = this;\n\n    MultipleSelection.__super__.bind.apply(this, arguments);\n\n    this.$selection.on('click', function (evt) {\n      self.trigger('toggle', {\n        originalEvent: evt\n      });\n    });\n\n    this.$selection.on(\n      'click',\n      '.select2-selection__choice__remove',\n      function (evt) {\n        // Ignore the event if it is disabled\n        if (self.isDisabled()) {\n          return;\n        }\n\n        var $remove = $(this);\n        var $selection = $remove.parent();\n\n        var data = Utils.GetData($selection[0], 'data');\n\n        self.trigger('unselect', {\n          originalEvent: evt,\n          data: data\n        });\n      }\n    );\n  };\n\n  MultipleSelection.prototype.clear = function () {\n    var $rendered = this.$selection.find('.select2-selection__rendered');\n    $rendered.empty();\n    $rendered.removeAttr('title');\n  };\n\n  MultipleSelection.prototype.display = function (data, container) {\n    var template = this.options.get('templateSelection');\n    var escapeMarkup = this.options.get('escapeMarkup');\n\n    return escapeMarkup(template(data, container));\n  };\n\n  MultipleSelection.prototype.selectionContainer = function () {\n    var $container = $(\n      '<li class=\"select2-selection__choice\">' +\n        '<span class=\"select2-selection__choice__remove\" role=\"presentation\">' +\n          '&times;' +\n        '</span>' +\n      '</li>'\n    );\n\n    return $container;\n  };\n\n  MultipleSelection.prototype.update = function (data) {\n    this.clear();\n\n    if (data.length === 0) {\n      return;\n    }\n\n    var $selections = [];\n\n    for (var d = 0; d < data.length; d++) {\n      var selection = data[d];\n\n      var $selection = this.selectionContainer();\n      var formatted = this.display(selection, $selection);\n\n      $selection.append(formatted);\n\n      var title = selection.title || selection.text;\n\n      if (title) {\n        $selection.attr('title', title);\n      }\n\n      Utils.StoreData($selection[0], 'data', selection);\n\n      $selections.push($selection);\n    }\n\n    var $rendered = this.$selection.find('.select2-selection__rendered');\n\n    Utils.appendMany($rendered, $selections);\n  };\n\n  return MultipleSelection;\n});\n\nS2.define('select2/selection/placeholder',[\n  '../utils'\n], function (Utils) {\n  function Placeholder (decorated, $element, options) {\n    this.placeholder = this.normalizePlaceholder(options.get('placeholder'));\n\n    decorated.call(this, $element, options);\n  }\n\n  Placeholder.prototype.normalizePlaceholder = function (_, placeholder) {\n    if (typeof placeholder === 'string') {\n      placeholder = {\n        id: '',\n        text: placeholder\n      };\n    }\n\n    return placeholder;\n  };\n\n  Placeholder.prototype.createPlaceholder = function (decorated, placeholder) {\n    var $placeholder = this.selectionContainer();\n\n    $placeholder.html(this.display(placeholder));\n    $placeholder.addClass('select2-selection__placeholder')\n                .removeClass('select2-selection__choice');\n\n    return $placeholder;\n  };\n\n  Placeholder.prototype.update = function (decorated, data) {\n    var singlePlaceholder = (\n      data.length == 1 && data[0].id != this.placeholder.id\n    );\n    var multipleSelections = data.length > 1;\n\n    if (multipleSelections || singlePlaceholder) {\n      return decorated.call(this, data);\n    }\n\n    this.clear();\n\n    var $placeholder = this.createPlaceholder(this.placeholder);\n\n    this.$selection.find('.select2-selection__rendered').append($placeholder);\n  };\n\n  return Placeholder;\n});\n\nS2.define('select2/selection/allowClear',[\n  'jquery',\n  '../keys',\n  '../utils'\n], function ($, KEYS, Utils) {\n  function AllowClear () { }\n\n  AllowClear.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n\n    decorated.call(this, container, $container);\n\n    if (this.placeholder == null) {\n      if (this.options.get('debug') && window.console && console.error) {\n        console.error(\n          'Select2: The `allowClear` option should be used in combination ' +\n          'with the `placeholder` option.'\n        );\n      }\n    }\n\n    this.$selection.on('mousedown', '.select2-selection__clear',\n      function (evt) {\n        self._handleClear(evt);\n    });\n\n    container.on('keypress', function (evt) {\n      self._handleKeyboardClear(evt, container);\n    });\n  };\n\n  AllowClear.prototype._handleClear = function (_, evt) {\n    // Ignore the event if it is disabled\n    if (this.isDisabled()) {\n      return;\n    }\n\n    var $clear = this.$selection.find('.select2-selection__clear');\n\n    // Ignore the event if nothing has been selected\n    if ($clear.length === 0) {\n      return;\n    }\n\n    evt.stopPropagation();\n\n    var data = Utils.GetData($clear[0], 'data');\n\n    var previousVal = this.$element.val();\n    this.$element.val(this.placeholder.id);\n\n    var unselectData = {\n      data: data\n    };\n    this.trigger('clear', unselectData);\n    if (unselectData.prevented) {\n      this.$element.val(previousVal);\n      return;\n    }\n\n    for (var d = 0; d < data.length; d++) {\n      unselectData = {\n        data: data[d]\n      };\n\n      // Trigger the `unselect` event, so people can prevent it from being\n      // cleared.\n      this.trigger('unselect', unselectData);\n\n      // If the event was prevented, don't clear it out.\n      if (unselectData.prevented) {\n        this.$element.val(previousVal);\n        return;\n      }\n    }\n\n    this.$element.trigger('input').trigger('change');\n\n    this.trigger('toggle', {});\n  };\n\n  AllowClear.prototype._handleKeyboardClear = function (_, evt, container) {\n    if (container.isOpen()) {\n      return;\n    }\n\n    if (evt.which == KEYS.DELETE || evt.which == KEYS.BACKSPACE) {\n      this._handleClear(evt);\n    }\n  };\n\n  AllowClear.prototype.update = function (decorated, data) {\n    decorated.call(this, data);\n\n    if (this.$selection.find('.select2-selection__placeholder').length > 0 ||\n        data.length === 0) {\n      return;\n    }\n\n    var removeAll = this.options.get('translations').get('removeAllItems');\n\n    var $remove = $(\n      '<span class=\"select2-selection__clear\" title=\"' + removeAll() +'\">' +\n        '&times;' +\n      '</span>'\n    );\n    Utils.StoreData($remove[0], 'data', data);\n\n    this.$selection.find('.select2-selection__rendered').prepend($remove);\n  };\n\n  return AllowClear;\n});\n\nS2.define('select2/selection/search',[\n  'jquery',\n  '../utils',\n  '../keys'\n], function ($, Utils, KEYS) {\n  function Search (decorated, $element, options) {\n    decorated.call(this, $element, options);\n  }\n\n  Search.prototype.render = function (decorated) {\n    var $search = $(\n      '<li class=\"select2-search select2-search--inline\">' +\n        '<input class=\"select2-search__field\" type=\"search\" tabindex=\"-1\"' +\n        ' autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"none\"' +\n        ' spellcheck=\"false\" role=\"searchbox\" aria-autocomplete=\"list\" />' +\n      '</li>'\n    );\n\n    this.$searchContainer = $search;\n    this.$search = $search.find('input');\n\n    var $rendered = decorated.call(this);\n\n    this._transferTabIndex();\n\n    return $rendered;\n  };\n\n  Search.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n\n    var resultsId = container.id + '-results';\n\n    decorated.call(this, container, $container);\n\n    container.on('open', function () {\n      self.$search.attr('aria-controls', resultsId);\n      self.$search.trigger('focus');\n    });\n\n    container.on('close', function () {\n      self.$search.val('');\n      self.$search.removeAttr('aria-controls');\n      self.$search.removeAttr('aria-activedescendant');\n      self.$search.trigger('focus');\n    });\n\n    container.on('enable', function () {\n      self.$search.prop('disabled', false);\n\n      self._transferTabIndex();\n    });\n\n    container.on('disable', function () {\n      self.$search.prop('disabled', true);\n    });\n\n    container.on('focus', function (evt) {\n      self.$search.trigger('focus');\n    });\n\n    container.on('results:focus', function (params) {\n      if (params.data._resultId) {\n        self.$search.attr('aria-activedescendant', params.data._resultId);\n      } else {\n        self.$search.removeAttr('aria-activedescendant');\n      }\n    });\n\n    this.$selection.on('focusin', '.select2-search--inline', function (evt) {\n      self.trigger('focus', evt);\n    });\n\n    this.$selection.on('focusout', '.select2-search--inline', function (evt) {\n      self._handleBlur(evt);\n    });\n\n    this.$selection.on('keydown', '.select2-search--inline', function (evt) {\n      evt.stopPropagation();\n\n      self.trigger('keypress', evt);\n\n      self._keyUpPrevented = evt.isDefaultPrevented();\n\n      var key = evt.which;\n\n      if (key === KEYS.BACKSPACE && self.$search.val() === '') {\n        var $previousChoice = self.$searchContainer\n          .prev('.select2-selection__choice');\n\n        if ($previousChoice.length > 0) {\n          var item = Utils.GetData($previousChoice[0], 'data');\n\n          self.searchRemoveChoice(item);\n\n          evt.preventDefault();\n        }\n      }\n    });\n\n    this.$selection.on('click', '.select2-search--inline', function (evt) {\n      if (self.$search.val()) {\n        evt.stopPropagation();\n      }\n    });\n\n    // Try to detect the IE version should the `documentMode` property that\n    // is stored on the document. This is only implemented in IE and is\n    // slightly cleaner than doing a user agent check.\n    // This property is not available in Edge, but Edge also doesn't have\n    // this bug.\n    var msie = document.documentMode;\n    var disableInputEvents = msie && msie <= 11;\n\n    // Workaround for browsers which do not support the `input` event\n    // This will prevent double-triggering of events for browsers which support\n    // both the `keyup` and `input` events.\n    this.$selection.on(\n      'input.searchcheck',\n      '.select2-search--inline',\n      function (evt) {\n        // IE will trigger the `input` event when a placeholder is used on a\n        // search box. To get around this issue, we are forced to ignore all\n        // `input` events in IE and keep using `keyup`.\n        if (disableInputEvents) {\n          self.$selection.off('input.search input.searchcheck');\n          return;\n        }\n\n        // Unbind the duplicated `keyup` event\n        self.$selection.off('keyup.search');\n      }\n    );\n\n    this.$selection.on(\n      'keyup.search input.search',\n      '.select2-search--inline',\n      function (evt) {\n        // IE will trigger the `input` event when a placeholder is used on a\n        // search box. To get around this issue, we are forced to ignore all\n        // `input` events in IE and keep using `keyup`.\n        if (disableInputEvents && evt.type === 'input') {\n          self.$selection.off('input.search input.searchcheck');\n          return;\n        }\n\n        var key = evt.which;\n\n        // We can freely ignore events from modifier keys\n        if (key == KEYS.SHIFT || key == KEYS.CTRL || key == KEYS.ALT) {\n          return;\n        }\n\n        // Tabbing will be handled during the `keydown` phase\n        if (key == KEYS.TAB) {\n          return;\n        }\n\n        self.handleSearch(evt);\n      }\n    );\n  };\n\n  /**\n   * This method will transfer the tabindex attribute from the rendered\n   * selection to the search box. This allows for the search box to be used as\n   * the primary focus instead of the selection container.\n   *\n   * @private\n   */\n  Search.prototype._transferTabIndex = function (decorated) {\n    this.$search.attr('tabindex', this.$selection.attr('tabindex'));\n    this.$selection.attr('tabindex', '-1');\n  };\n\n  Search.prototype.createPlaceholder = function (decorated, placeholder) {\n    this.$search.attr('placeholder', placeholder.text);\n  };\n\n  Search.prototype.update = function (decorated, data) {\n    var searchHadFocus = this.$search[0] == document.activeElement;\n\n    this.$search.attr('placeholder', '');\n\n    decorated.call(this, data);\n\n    this.$selection.find('.select2-selection__rendered')\n                   .append(this.$searchContainer);\n\n    this.resizeSearch();\n    if (searchHadFocus) {\n      this.$search.trigger('focus');\n    }\n  };\n\n  Search.prototype.handleSearch = function () {\n    this.resizeSearch();\n\n    if (!this._keyUpPrevented) {\n      var input = this.$search.val();\n\n      this.trigger('query', {\n        term: input\n      });\n    }\n\n    this._keyUpPrevented = false;\n  };\n\n  Search.prototype.searchRemoveChoice = function (decorated, item) {\n    this.trigger('unselect', {\n      data: item\n    });\n\n    this.$search.val(item.text);\n    this.handleSearch();\n  };\n\n  Search.prototype.resizeSearch = function () {\n    this.$search.css('width', '25px');\n\n    var width = '';\n\n    if (this.$search.attr('placeholder') !== '') {\n      width = this.$selection.find('.select2-selection__rendered').width();\n    } else {\n      var minimumWidth = this.$search.val().length + 1;\n\n      width = (minimumWidth * 0.75) + 'em';\n    }\n\n    this.$search.css('width', width);\n  };\n\n  return Search;\n});\n\nS2.define('select2/selection/eventRelay',[\n  'jquery'\n], function ($) {\n  function EventRelay () { }\n\n  EventRelay.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n    var relayEvents = [\n      'open', 'opening',\n      'close', 'closing',\n      'select', 'selecting',\n      'unselect', 'unselecting',\n      'clear', 'clearing'\n    ];\n\n    var preventableEvents = [\n      'opening', 'closing', 'selecting', 'unselecting', 'clearing'\n    ];\n\n    decorated.call(this, container, $container);\n\n    container.on('*', function (name, params) {\n      // Ignore events that should not be relayed\n      if ($.inArray(name, relayEvents) === -1) {\n        return;\n      }\n\n      // The parameters should always be an object\n      params = params || {};\n\n      // Generate the jQuery event for the Select2 event\n      var evt = $.Event('select2:' + name, {\n        params: params\n      });\n\n      self.$element.trigger(evt);\n\n      // Only handle preventable events if it was one\n      if ($.inArray(name, preventableEvents) === -1) {\n        return;\n      }\n\n      params.prevented = evt.isDefaultPrevented();\n    });\n  };\n\n  return EventRelay;\n});\n\nS2.define('select2/translation',[\n  'jquery',\n  'require'\n], function ($, require) {\n  function Translation (dict) {\n    this.dict = dict || {};\n  }\n\n  Translation.prototype.all = function () {\n    return this.dict;\n  };\n\n  Translation.prototype.get = function (key) {\n    return this.dict[key];\n  };\n\n  Translation.prototype.extend = function (translation) {\n    this.dict = $.extend({}, translation.all(), this.dict);\n  };\n\n  // Static functions\n\n  Translation._cache = {};\n\n  Translation.loadPath = function (path) {\n    if (!(path in Translation._cache)) {\n      var translations = require(path);\n\n      Translation._cache[path] = translations;\n    }\n\n    return new Translation(Translation._cache[path]);\n  };\n\n  return Translation;\n});\n\nS2.define('select2/diacritics',[\n\n], function () {\n  var diacritics = {\n    '\\u24B6': 'A',\n    '\\uFF21': 'A',\n    '\\u00C0': 'A',\n    '\\u00C1': 'A',\n    '\\u00C2': 'A',\n    '\\u1EA6': 'A',\n    '\\u1EA4': 'A',\n    '\\u1EAA': 'A',\n    '\\u1EA8': 'A',\n    '\\u00C3': 'A',\n    '\\u0100': 'A',\n    '\\u0102': 'A',\n    '\\u1EB0': 'A',\n    '\\u1EAE': 'A',\n    '\\u1EB4': 'A',\n    '\\u1EB2': 'A',\n    '\\u0226': 'A',\n    '\\u01E0': 'A',\n    '\\u00C4': 'A',\n    '\\u01DE': 'A',\n    '\\u1EA2': 'A',\n    '\\u00C5': 'A',\n    '\\u01FA': 'A',\n    '\\u01CD': 'A',\n    '\\u0200': 'A',\n    '\\u0202': 'A',\n    '\\u1EA0': 'A',\n    '\\u1EAC': 'A',\n    '\\u1EB6': 'A',\n    '\\u1E00': 'A',\n    '\\u0104': 'A',\n    '\\u023A': 'A',\n    '\\u2C6F': 'A',\n    '\\uA732': 'AA',\n    '\\u00C6': 'AE',\n    '\\u01FC': 'AE',\n    '\\u01E2': 'AE',\n    '\\uA734': 'AO',\n    '\\uA736': 'AU',\n    '\\uA738': 'AV',\n    '\\uA73A': 'AV',\n    '\\uA73C': 'AY',\n    '\\u24B7': 'B',\n    '\\uFF22': 'B',\n    '\\u1E02': 'B',\n    '\\u1E04': 'B',\n    '\\u1E06': 'B',\n    '\\u0243': 'B',\n    '\\u0182': 'B',\n    '\\u0181': 'B',\n    '\\u24B8': 'C',\n    '\\uFF23': 'C',\n    '\\u0106': 'C',\n    '\\u0108': 'C',\n    '\\u010A': 'C',\n    '\\u010C': 'C',\n    '\\u00C7': 'C',\n    '\\u1E08': 'C',\n    '\\u0187': 'C',\n    '\\u023B': 'C',\n    '\\uA73E': 'C',\n    '\\u24B9': 'D',\n    '\\uFF24': 'D',\n    '\\u1E0A': 'D',\n    '\\u010E': 'D',\n    '\\u1E0C': 'D',\n    '\\u1E10': 'D',\n    '\\u1E12': 'D',\n    '\\u1E0E': 'D',\n    '\\u0110': 'D',\n    '\\u018B': 'D',\n    '\\u018A': 'D',\n    '\\u0189': 'D',\n    '\\uA779': 'D',\n    '\\u01F1': 'DZ',\n    '\\u01C4': 'DZ',\n    '\\u01F2': 'Dz',\n    '\\u01C5': 'Dz',\n    '\\u24BA': 'E',\n    '\\uFF25': 'E',\n    '\\u00C8': 'E',\n    '\\u00C9': 'E',\n    '\\u00CA': 'E',\n    '\\u1EC0': 'E',\n    '\\u1EBE': 'E',\n    '\\u1EC4': 'E',\n    '\\u1EC2': 'E',\n    '\\u1EBC': 'E',\n    '\\u0112': 'E',\n    '\\u1E14': 'E',\n    '\\u1E16': 'E',\n    '\\u0114': 'E',\n    '\\u0116': 'E',\n    '\\u00CB': 'E',\n    '\\u1EBA': 'E',\n    '\\u011A': 'E',\n    '\\u0204': 'E',\n    '\\u0206': 'E',\n    '\\u1EB8': 'E',\n    '\\u1EC6': 'E',\n    '\\u0228': 'E',\n    '\\u1E1C': 'E',\n    '\\u0118': 'E',\n    '\\u1E18': 'E',\n    '\\u1E1A': 'E',\n    '\\u0190': 'E',\n    '\\u018E': 'E',\n    '\\u24BB': 'F',\n    '\\uFF26': 'F',\n    '\\u1E1E': 'F',\n    '\\u0191': 'F',\n    '\\uA77B': 'F',\n    '\\u24BC': 'G',\n    '\\uFF27': 'G',\n    '\\u01F4': 'G',\n    '\\u011C': 'G',\n    '\\u1E20': 'G',\n    '\\u011E': 'G',\n    '\\u0120': 'G',\n    '\\u01E6': 'G',\n    '\\u0122': 'G',\n    '\\u01E4': 'G',\n    '\\u0193': 'G',\n    '\\uA7A0': 'G',\n    '\\uA77D': 'G',\n    '\\uA77E': 'G',\n    '\\u24BD': 'H',\n    '\\uFF28': 'H',\n    '\\u0124': 'H',\n    '\\u1E22': 'H',\n    '\\u1E26': 'H',\n    '\\u021E': 'H',\n    '\\u1E24': 'H',\n    '\\u1E28': 'H',\n    '\\u1E2A': 'H',\n    '\\u0126': 'H',\n    '\\u2C67': 'H',\n    '\\u2C75': 'H',\n    '\\uA78D': 'H',\n    '\\u24BE': 'I',\n    '\\uFF29': 'I',\n    '\\u00CC': 'I',\n    '\\u00CD': 'I',\n    '\\u00CE': 'I',\n    '\\u0128': 'I',\n    '\\u012A': 'I',\n    '\\u012C': 'I',\n    '\\u0130': 'I',\n    '\\u00CF': 'I',\n    '\\u1E2E': 'I',\n    '\\u1EC8': 'I',\n    '\\u01CF': 'I',\n    '\\u0208': 'I',\n    '\\u020A': 'I',\n    '\\u1ECA': 'I',\n    '\\u012E': 'I',\n    '\\u1E2C': 'I',\n    '\\u0197': 'I',\n    '\\u24BF': 'J',\n    '\\uFF2A': 'J',\n    '\\u0134': 'J',\n    '\\u0248': 'J',\n    '\\u24C0': 'K',\n    '\\uFF2B': 'K',\n    '\\u1E30': 'K',\n    '\\u01E8': 'K',\n    '\\u1E32': 'K',\n    '\\u0136': 'K',\n    '\\u1E34': 'K',\n    '\\u0198': 'K',\n    '\\u2C69': 'K',\n    '\\uA740': 'K',\n    '\\uA742': 'K',\n    '\\uA744': 'K',\n    '\\uA7A2': 'K',\n    '\\u24C1': 'L',\n    '\\uFF2C': 'L',\n    '\\u013F': 'L',\n    '\\u0139': 'L',\n    '\\u013D': 'L',\n    '\\u1E36': 'L',\n    '\\u1E38': 'L',\n    '\\u013B': 'L',\n    '\\u1E3C': 'L',\n    '\\u1E3A': 'L',\n    '\\u0141': 'L',\n    '\\u023D': 'L',\n    '\\u2C62': 'L',\n    '\\u2C60': 'L',\n    '\\uA748': 'L',\n    '\\uA746': 'L',\n    '\\uA780': 'L',\n    '\\u01C7': 'LJ',\n    '\\u01C8': 'Lj',\n    '\\u24C2': 'M',\n    '\\uFF2D': 'M',\n    '\\u1E3E': 'M',\n    '\\u1E40': 'M',\n    '\\u1E42': 'M',\n    '\\u2C6E': 'M',\n    '\\u019C': 'M',\n    '\\u24C3': 'N',\n    '\\uFF2E': 'N',\n    '\\u01F8': 'N',\n    '\\u0143': 'N',\n    '\\u00D1': 'N',\n    '\\u1E44': 'N',\n    '\\u0147': 'N',\n    '\\u1E46': 'N',\n    '\\u0145': 'N',\n    '\\u1E4A': 'N',\n    '\\u1E48': 'N',\n    '\\u0220': 'N',\n    '\\u019D': 'N',\n    '\\uA790': 'N',\n    '\\uA7A4': 'N',\n    '\\u01CA': 'NJ',\n    '\\u01CB': 'Nj',\n    '\\u24C4': 'O',\n    '\\uFF2F': 'O',\n    '\\u00D2': 'O',\n    '\\u00D3': 'O',\n    '\\u00D4': 'O',\n    '\\u1ED2': 'O',\n    '\\u1ED0': 'O',\n    '\\u1ED6': 'O',\n    '\\u1ED4': 'O',\n    '\\u00D5': 'O',\n    '\\u1E4C': 'O',\n    '\\u022C': 'O',\n    '\\u1E4E': 'O',\n    '\\u014C': 'O',\n    '\\u1E50': 'O',\n    '\\u1E52': 'O',\n    '\\u014E': 'O',\n    '\\u022E': 'O',\n    '\\u0230': 'O',\n    '\\u00D6': 'O',\n    '\\u022A': 'O',\n    '\\u1ECE': 'O',\n    '\\u0150': 'O',\n    '\\u01D1': 'O',\n    '\\u020C': 'O',\n    '\\u020E': 'O',\n    '\\u01A0': 'O',\n    '\\u1EDC': 'O',\n    '\\u1EDA': 'O',\n    '\\u1EE0': 'O',\n    '\\u1EDE': 'O',\n    '\\u1EE2': 'O',\n    '\\u1ECC': 'O',\n    '\\u1ED8': 'O',\n    '\\u01EA': 'O',\n    '\\u01EC': 'O',\n    '\\u00D8': 'O',\n    '\\u01FE': 'O',\n    '\\u0186': 'O',\n    '\\u019F': 'O',\n    '\\uA74A': 'O',\n    '\\uA74C': 'O',\n    '\\u0152': 'OE',\n    '\\u01A2': 'OI',\n    '\\uA74E': 'OO',\n    '\\u0222': 'OU',\n    '\\u24C5': 'P',\n    '\\uFF30': 'P',\n    '\\u1E54': 'P',\n    '\\u1E56': 'P',\n    '\\u01A4': 'P',\n    '\\u2C63': 'P',\n    '\\uA750': 'P',\n    '\\uA752': 'P',\n    '\\uA754': 'P',\n    '\\u24C6': 'Q',\n    '\\uFF31': 'Q',\n    '\\uA756': 'Q',\n    '\\uA758': 'Q',\n    '\\u024A': 'Q',\n    '\\u24C7': 'R',\n    '\\uFF32': 'R',\n    '\\u0154': 'R',\n    '\\u1E58': 'R',\n    '\\u0158': 'R',\n    '\\u0210': 'R',\n    '\\u0212': 'R',\n    '\\u1E5A': 'R',\n    '\\u1E5C': 'R',\n    '\\u0156': 'R',\n    '\\u1E5E': 'R',\n    '\\u024C': 'R',\n    '\\u2C64': 'R',\n    '\\uA75A': 'R',\n    '\\uA7A6': 'R',\n    '\\uA782': 'R',\n    '\\u24C8': 'S',\n    '\\uFF33': 'S',\n    '\\u1E9E': 'S',\n    '\\u015A': 'S',\n    '\\u1E64': 'S',\n    '\\u015C': 'S',\n    '\\u1E60': 'S',\n    '\\u0160': 'S',\n    '\\u1E66': 'S',\n    '\\u1E62': 'S',\n    '\\u1E68': 'S',\n    '\\u0218': 'S',\n    '\\u015E': 'S',\n    '\\u2C7E': 'S',\n    '\\uA7A8': 'S',\n    '\\uA784': 'S',\n    '\\u24C9': 'T',\n    '\\uFF34': 'T',\n    '\\u1E6A': 'T',\n    '\\u0164': 'T',\n    '\\u1E6C': 'T',\n    '\\u021A': 'T',\n    '\\u0162': 'T',\n    '\\u1E70': 'T',\n    '\\u1E6E': 'T',\n    '\\u0166': 'T',\n    '\\u01AC': 'T',\n    '\\u01AE': 'T',\n    '\\u023E': 'T',\n    '\\uA786': 'T',\n    '\\uA728': 'TZ',\n    '\\u24CA': 'U',\n    '\\uFF35': 'U',\n    '\\u00D9': 'U',\n    '\\u00DA': 'U',\n    '\\u00DB': 'U',\n    '\\u0168': 'U',\n    '\\u1E78': 'U',\n    '\\u016A': 'U',\n    '\\u1E7A': 'U',\n    '\\u016C': 'U',\n    '\\u00DC': 'U',\n    '\\u01DB': 'U',\n    '\\u01D7': 'U',\n    '\\u01D5': 'U',\n    '\\u01D9': 'U',\n    '\\u1EE6': 'U',\n    '\\u016E': 'U',\n    '\\u0170': 'U',\n    '\\u01D3': 'U',\n    '\\u0214': 'U',\n    '\\u0216': 'U',\n    '\\u01AF': 'U',\n    '\\u1EEA': 'U',\n    '\\u1EE8': 'U',\n    '\\u1EEE': 'U',\n    '\\u1EEC': 'U',\n    '\\u1EF0': 'U',\n    '\\u1EE4': 'U',\n    '\\u1E72': 'U',\n    '\\u0172': 'U',\n    '\\u1E76': 'U',\n    '\\u1E74': 'U',\n    '\\u0244': 'U',\n    '\\u24CB': 'V',\n    '\\uFF36': 'V',\n    '\\u1E7C': 'V',\n    '\\u1E7E': 'V',\n    '\\u01B2': 'V',\n    '\\uA75E': 'V',\n    '\\u0245': 'V',\n    '\\uA760': 'VY',\n    '\\u24CC': 'W',\n    '\\uFF37': 'W',\n    '\\u1E80': 'W',\n    '\\u1E82': 'W',\n    '\\u0174': 'W',\n    '\\u1E86': 'W',\n    '\\u1E84': 'W',\n    '\\u1E88': 'W',\n    '\\u2C72': 'W',\n    '\\u24CD': 'X',\n    '\\uFF38': 'X',\n    '\\u1E8A': 'X',\n    '\\u1E8C': 'X',\n    '\\u24CE': 'Y',\n    '\\uFF39': 'Y',\n    '\\u1EF2': 'Y',\n    '\\u00DD': 'Y',\n    '\\u0176': 'Y',\n    '\\u1EF8': 'Y',\n    '\\u0232': 'Y',\n    '\\u1E8E': 'Y',\n    '\\u0178': 'Y',\n    '\\u1EF6': 'Y',\n    '\\u1EF4': 'Y',\n    '\\u01B3': 'Y',\n    '\\u024E': 'Y',\n    '\\u1EFE': 'Y',\n    '\\u24CF': 'Z',\n    '\\uFF3A': 'Z',\n    '\\u0179': 'Z',\n    '\\u1E90': 'Z',\n    '\\u017B': 'Z',\n    '\\u017D': 'Z',\n    '\\u1E92': 'Z',\n    '\\u1E94': 'Z',\n    '\\u01B5': 'Z',\n    '\\u0224': 'Z',\n    '\\u2C7F': 'Z',\n    '\\u2C6B': 'Z',\n    '\\uA762': 'Z',\n    '\\u24D0': 'a',\n    '\\uFF41': 'a',\n    '\\u1E9A': 'a',\n    '\\u00E0': 'a',\n    '\\u00E1': 'a',\n    '\\u00E2': 'a',\n    '\\u1EA7': 'a',\n    '\\u1EA5': 'a',\n    '\\u1EAB': 'a',\n    '\\u1EA9': 'a',\n    '\\u00E3': 'a',\n    '\\u0101': 'a',\n    '\\u0103': 'a',\n    '\\u1EB1': 'a',\n    '\\u1EAF': 'a',\n    '\\u1EB5': 'a',\n    '\\u1EB3': 'a',\n    '\\u0227': 'a',\n    '\\u01E1': 'a',\n    '\\u00E4': 'a',\n    '\\u01DF': 'a',\n    '\\u1EA3': 'a',\n    '\\u00E5': 'a',\n    '\\u01FB': 'a',\n    '\\u01CE': 'a',\n    '\\u0201': 'a',\n    '\\u0203': 'a',\n    '\\u1EA1': 'a',\n    '\\u1EAD': 'a',\n    '\\u1EB7': 'a',\n    '\\u1E01': 'a',\n    '\\u0105': 'a',\n    '\\u2C65': 'a',\n    '\\u0250': 'a',\n    '\\uA733': 'aa',\n    '\\u00E6': 'ae',\n    '\\u01FD': 'ae',\n    '\\u01E3': 'ae',\n    '\\uA735': 'ao',\n    '\\uA737': 'au',\n    '\\uA739': 'av',\n    '\\uA73B': 'av',\n    '\\uA73D': 'ay',\n    '\\u24D1': 'b',\n    '\\uFF42': 'b',\n    '\\u1E03': 'b',\n    '\\u1E05': 'b',\n    '\\u1E07': 'b',\n    '\\u0180': 'b',\n    '\\u0183': 'b',\n    '\\u0253': 'b',\n    '\\u24D2': 'c',\n    '\\uFF43': 'c',\n    '\\u0107': 'c',\n    '\\u0109': 'c',\n    '\\u010B': 'c',\n    '\\u010D': 'c',\n    '\\u00E7': 'c',\n    '\\u1E09': 'c',\n    '\\u0188': 'c',\n    '\\u023C': 'c',\n    '\\uA73F': 'c',\n    '\\u2184': 'c',\n    '\\u24D3': 'd',\n    '\\uFF44': 'd',\n    '\\u1E0B': 'd',\n    '\\u010F': 'd',\n    '\\u1E0D': 'd',\n    '\\u1E11': 'd',\n    '\\u1E13': 'd',\n    '\\u1E0F': 'd',\n    '\\u0111': 'd',\n    '\\u018C': 'd',\n    '\\u0256': 'd',\n    '\\u0257': 'd',\n    '\\uA77A': 'd',\n    '\\u01F3': 'dz',\n    '\\u01C6': 'dz',\n    '\\u24D4': 'e',\n    '\\uFF45': 'e',\n    '\\u00E8': 'e',\n    '\\u00E9': 'e',\n    '\\u00EA': 'e',\n    '\\u1EC1': 'e',\n    '\\u1EBF': 'e',\n    '\\u1EC5': 'e',\n    '\\u1EC3': 'e',\n    '\\u1EBD': 'e',\n    '\\u0113': 'e',\n    '\\u1E15': 'e',\n    '\\u1E17': 'e',\n    '\\u0115': 'e',\n    '\\u0117': 'e',\n    '\\u00EB': 'e',\n    '\\u1EBB': 'e',\n    '\\u011B': 'e',\n    '\\u0205': 'e',\n    '\\u0207': 'e',\n    '\\u1EB9': 'e',\n    '\\u1EC7': 'e',\n    '\\u0229': 'e',\n    '\\u1E1D': 'e',\n    '\\u0119': 'e',\n    '\\u1E19': 'e',\n    '\\u1E1B': 'e',\n    '\\u0247': 'e',\n    '\\u025B': 'e',\n    '\\u01DD': 'e',\n    '\\u24D5': 'f',\n    '\\uFF46': 'f',\n    '\\u1E1F': 'f',\n    '\\u0192': 'f',\n    '\\uA77C': 'f',\n    '\\u24D6': 'g',\n    '\\uFF47': 'g',\n    '\\u01F5': 'g',\n    '\\u011D': 'g',\n    '\\u1E21': 'g',\n    '\\u011F': 'g',\n    '\\u0121': 'g',\n    '\\u01E7': 'g',\n    '\\u0123': 'g',\n    '\\u01E5': 'g',\n    '\\u0260': 'g',\n    '\\uA7A1': 'g',\n    '\\u1D79': 'g',\n    '\\uA77F': 'g',\n    '\\u24D7': 'h',\n    '\\uFF48': 'h',\n    '\\u0125': 'h',\n    '\\u1E23': 'h',\n    '\\u1E27': 'h',\n    '\\u021F': 'h',\n    '\\u1E25': 'h',\n    '\\u1E29': 'h',\n    '\\u1E2B': 'h',\n    '\\u1E96': 'h',\n    '\\u0127': 'h',\n    '\\u2C68': 'h',\n    '\\u2C76': 'h',\n    '\\u0265': 'h',\n    '\\u0195': 'hv',\n    '\\u24D8': 'i',\n    '\\uFF49': 'i',\n    '\\u00EC': 'i',\n    '\\u00ED': 'i',\n    '\\u00EE': 'i',\n    '\\u0129': 'i',\n    '\\u012B': 'i',\n    '\\u012D': 'i',\n    '\\u00EF': 'i',\n    '\\u1E2F': 'i',\n    '\\u1EC9': 'i',\n    '\\u01D0': 'i',\n    '\\u0209': 'i',\n    '\\u020B': 'i',\n    '\\u1ECB': 'i',\n    '\\u012F': 'i',\n    '\\u1E2D': 'i',\n    '\\u0268': 'i',\n    '\\u0131': 'i',\n    '\\u24D9': 'j',\n    '\\uFF4A': 'j',\n    '\\u0135': 'j',\n    '\\u01F0': 'j',\n    '\\u0249': 'j',\n    '\\u24DA': 'k',\n    '\\uFF4B': 'k',\n    '\\u1E31': 'k',\n    '\\u01E9': 'k',\n    '\\u1E33': 'k',\n    '\\u0137': 'k',\n    '\\u1E35': 'k',\n    '\\u0199': 'k',\n    '\\u2C6A': 'k',\n    '\\uA741': 'k',\n    '\\uA743': 'k',\n    '\\uA745': 'k',\n    '\\uA7A3': 'k',\n    '\\u24DB': 'l',\n    '\\uFF4C': 'l',\n    '\\u0140': 'l',\n    '\\u013A': 'l',\n    '\\u013E': 'l',\n    '\\u1E37': 'l',\n    '\\u1E39': 'l',\n    '\\u013C': 'l',\n    '\\u1E3D': 'l',\n    '\\u1E3B': 'l',\n    '\\u017F': 'l',\n    '\\u0142': 'l',\n    '\\u019A': 'l',\n    '\\u026B': 'l',\n    '\\u2C61': 'l',\n    '\\uA749': 'l',\n    '\\uA781': 'l',\n    '\\uA747': 'l',\n    '\\u01C9': 'lj',\n    '\\u24DC': 'm',\n    '\\uFF4D': 'm',\n    '\\u1E3F': 'm',\n    '\\u1E41': 'm',\n    '\\u1E43': 'm',\n    '\\u0271': 'm',\n    '\\u026F': 'm',\n    '\\u24DD': 'n',\n    '\\uFF4E': 'n',\n    '\\u01F9': 'n',\n    '\\u0144': 'n',\n    '\\u00F1': 'n',\n    '\\u1E45': 'n',\n    '\\u0148': 'n',\n    '\\u1E47': 'n',\n    '\\u0146': 'n',\n    '\\u1E4B': 'n',\n    '\\u1E49': 'n',\n    '\\u019E': 'n',\n    '\\u0272': 'n',\n    '\\u0149': 'n',\n    '\\uA791': 'n',\n    '\\uA7A5': 'n',\n    '\\u01CC': 'nj',\n    '\\u24DE': 'o',\n    '\\uFF4F': 'o',\n    '\\u00F2': 'o',\n    '\\u00F3': 'o',\n    '\\u00F4': 'o',\n    '\\u1ED3': 'o',\n    '\\u1ED1': 'o',\n    '\\u1ED7': 'o',\n    '\\u1ED5': 'o',\n    '\\u00F5': 'o',\n    '\\u1E4D': 'o',\n    '\\u022D': 'o',\n    '\\u1E4F': 'o',\n    '\\u014D': 'o',\n    '\\u1E51': 'o',\n    '\\u1E53': 'o',\n    '\\u014F': 'o',\n    '\\u022F': 'o',\n    '\\u0231': 'o',\n    '\\u00F6': 'o',\n    '\\u022B': 'o',\n    '\\u1ECF': 'o',\n    '\\u0151': 'o',\n    '\\u01D2': 'o',\n    '\\u020D': 'o',\n    '\\u020F': 'o',\n    '\\u01A1': 'o',\n    '\\u1EDD': 'o',\n    '\\u1EDB': 'o',\n    '\\u1EE1': 'o',\n    '\\u1EDF': 'o',\n    '\\u1EE3': 'o',\n    '\\u1ECD': 'o',\n    '\\u1ED9': 'o',\n    '\\u01EB': 'o',\n    '\\u01ED': 'o',\n    '\\u00F8': 'o',\n    '\\u01FF': 'o',\n    '\\u0254': 'o',\n    '\\uA74B': 'o',\n    '\\uA74D': 'o',\n    '\\u0275': 'o',\n    '\\u0153': 'oe',\n    '\\u01A3': 'oi',\n    '\\u0223': 'ou',\n    '\\uA74F': 'oo',\n    '\\u24DF': 'p',\n    '\\uFF50': 'p',\n    '\\u1E55': 'p',\n    '\\u1E57': 'p',\n    '\\u01A5': 'p',\n    '\\u1D7D': 'p',\n    '\\uA751': 'p',\n    '\\uA753': 'p',\n    '\\uA755': 'p',\n    '\\u24E0': 'q',\n    '\\uFF51': 'q',\n    '\\u024B': 'q',\n    '\\uA757': 'q',\n    '\\uA759': 'q',\n    '\\u24E1': 'r',\n    '\\uFF52': 'r',\n    '\\u0155': 'r',\n    '\\u1E59': 'r',\n    '\\u0159': 'r',\n    '\\u0211': 'r',\n    '\\u0213': 'r',\n    '\\u1E5B': 'r',\n    '\\u1E5D': 'r',\n    '\\u0157': 'r',\n    '\\u1E5F': 'r',\n    '\\u024D': 'r',\n    '\\u027D': 'r',\n    '\\uA75B': 'r',\n    '\\uA7A7': 'r',\n    '\\uA783': 'r',\n    '\\u24E2': 's',\n    '\\uFF53': 's',\n    '\\u00DF': 's',\n    '\\u015B': 's',\n    '\\u1E65': 's',\n    '\\u015D': 's',\n    '\\u1E61': 's',\n    '\\u0161': 's',\n    '\\u1E67': 's',\n    '\\u1E63': 's',\n    '\\u1E69': 's',\n    '\\u0219': 's',\n    '\\u015F': 's',\n    '\\u023F': 's',\n    '\\uA7A9': 's',\n    '\\uA785': 's',\n    '\\u1E9B': 's',\n    '\\u24E3': 't',\n    '\\uFF54': 't',\n    '\\u1E6B': 't',\n    '\\u1E97': 't',\n    '\\u0165': 't',\n    '\\u1E6D': 't',\n    '\\u021B': 't',\n    '\\u0163': 't',\n    '\\u1E71': 't',\n    '\\u1E6F': 't',\n    '\\u0167': 't',\n    '\\u01AD': 't',\n    '\\u0288': 't',\n    '\\u2C66': 't',\n    '\\uA787': 't',\n    '\\uA729': 'tz',\n    '\\u24E4': 'u',\n    '\\uFF55': 'u',\n    '\\u00F9': 'u',\n    '\\u00FA': 'u',\n    '\\u00FB': 'u',\n    '\\u0169': 'u',\n    '\\u1E79': 'u',\n    '\\u016B': 'u',\n    '\\u1E7B': 'u',\n    '\\u016D': 'u',\n    '\\u00FC': 'u',\n    '\\u01DC': 'u',\n    '\\u01D8': 'u',\n    '\\u01D6': 'u',\n    '\\u01DA': 'u',\n    '\\u1EE7': 'u',\n    '\\u016F': 'u',\n    '\\u0171': 'u',\n    '\\u01D4': 'u',\n    '\\u0215': 'u',\n    '\\u0217': 'u',\n    '\\u01B0': 'u',\n    '\\u1EEB': 'u',\n    '\\u1EE9': 'u',\n    '\\u1EEF': 'u',\n    '\\u1EED': 'u',\n    '\\u1EF1': 'u',\n    '\\u1EE5': 'u',\n    '\\u1E73': 'u',\n    '\\u0173': 'u',\n    '\\u1E77': 'u',\n    '\\u1E75': 'u',\n    '\\u0289': 'u',\n    '\\u24E5': 'v',\n    '\\uFF56': 'v',\n    '\\u1E7D': 'v',\n    '\\u1E7F': 'v',\n    '\\u028B': 'v',\n    '\\uA75F': 'v',\n    '\\u028C': 'v',\n    '\\uA761': 'vy',\n    '\\u24E6': 'w',\n    '\\uFF57': 'w',\n    '\\u1E81': 'w',\n    '\\u1E83': 'w',\n    '\\u0175': 'w',\n    '\\u1E87': 'w',\n    '\\u1E85': 'w',\n    '\\u1E98': 'w',\n    '\\u1E89': 'w',\n    '\\u2C73': 'w',\n    '\\u24E7': 'x',\n    '\\uFF58': 'x',\n    '\\u1E8B': 'x',\n    '\\u1E8D': 'x',\n    '\\u24E8': 'y',\n    '\\uFF59': 'y',\n    '\\u1EF3': 'y',\n    '\\u00FD': 'y',\n    '\\u0177': 'y',\n    '\\u1EF9': 'y',\n    '\\u0233': 'y',\n    '\\u1E8F': 'y',\n    '\\u00FF': 'y',\n    '\\u1EF7': 'y',\n    '\\u1E99': 'y',\n    '\\u1EF5': 'y',\n    '\\u01B4': 'y',\n    '\\u024F': 'y',\n    '\\u1EFF': 'y',\n    '\\u24E9': 'z',\n    '\\uFF5A': 'z',\n    '\\u017A': 'z',\n    '\\u1E91': 'z',\n    '\\u017C': 'z',\n    '\\u017E': 'z',\n    '\\u1E93': 'z',\n    '\\u1E95': 'z',\n    '\\u01B6': 'z',\n    '\\u0225': 'z',\n    '\\u0240': 'z',\n    '\\u2C6C': 'z',\n    '\\uA763': 'z',\n    '\\u0386': '\\u0391',\n    '\\u0388': '\\u0395',\n    '\\u0389': '\\u0397',\n    '\\u038A': '\\u0399',\n    '\\u03AA': '\\u0399',\n    '\\u038C': '\\u039F',\n    '\\u038E': '\\u03A5',\n    '\\u03AB': '\\u03A5',\n    '\\u038F': '\\u03A9',\n    '\\u03AC': '\\u03B1',\n    '\\u03AD': '\\u03B5',\n    '\\u03AE': '\\u03B7',\n    '\\u03AF': '\\u03B9',\n    '\\u03CA': '\\u03B9',\n    '\\u0390': '\\u03B9',\n    '\\u03CC': '\\u03BF',\n    '\\u03CD': '\\u03C5',\n    '\\u03CB': '\\u03C5',\n    '\\u03B0': '\\u03C5',\n    '\\u03CE': '\\u03C9',\n    '\\u03C2': '\\u03C3',\n    '\\u2019': '\\''\n  };\n\n  return diacritics;\n});\n\nS2.define('select2/data/base',[\n  '../utils'\n], function (Utils) {\n  function BaseAdapter ($element, options) {\n    BaseAdapter.__super__.constructor.call(this);\n  }\n\n  Utils.Extend(BaseAdapter, Utils.Observable);\n\n  BaseAdapter.prototype.current = function (callback) {\n    throw new Error('The `current` method must be defined in child classes.');\n  };\n\n  BaseAdapter.prototype.query = function (params, callback) {\n    throw new Error('The `query` method must be defined in child classes.');\n  };\n\n  BaseAdapter.prototype.bind = function (container, $container) {\n    // Can be implemented in subclasses\n  };\n\n  BaseAdapter.prototype.destroy = function () {\n    // Can be implemented in subclasses\n  };\n\n  BaseAdapter.prototype.generateResultId = function (container, data) {\n    var id = container.id + '-result-';\n\n    id += Utils.generateChars(4);\n\n    if (data.id != null) {\n      id += '-' + data.id.toString();\n    } else {\n      id += '-' + Utils.generateChars(4);\n    }\n    return id;\n  };\n\n  return BaseAdapter;\n});\n\nS2.define('select2/data/select',[\n  './base',\n  '../utils',\n  'jquery'\n], function (BaseAdapter, Utils, $) {\n  function SelectAdapter ($element, options) {\n    this.$element = $element;\n    this.options = options;\n\n    SelectAdapter.__super__.constructor.call(this);\n  }\n\n  Utils.Extend(SelectAdapter, BaseAdapter);\n\n  SelectAdapter.prototype.current = function (callback) {\n    var data = [];\n    var self = this;\n\n    this.$element.find(':selected').each(function () {\n      var $option = $(this);\n\n      var option = self.item($option);\n\n      data.push(option);\n    });\n\n    callback(data);\n  };\n\n  SelectAdapter.prototype.select = function (data) {\n    var self = this;\n\n    data.selected = true;\n\n    // If data.element is a DOM node, use it instead\n    if ($(data.element).is('option')) {\n      data.element.selected = true;\n\n      this.$element.trigger('input').trigger('change');\n\n      return;\n    }\n\n    if (this.$element.prop('multiple')) {\n      this.current(function (currentData) {\n        var val = [];\n\n        data = [data];\n        data.push.apply(data, currentData);\n\n        for (var d = 0; d < data.length; d++) {\n          var id = data[d].id;\n\n          if ($.inArray(id, val) === -1) {\n            val.push(id);\n          }\n        }\n\n        self.$element.val(val);\n        self.$element.trigger('input').trigger('change');\n      });\n    } else {\n      var val = data.id;\n\n      this.$element.val(val);\n      this.$element.trigger('input').trigger('change');\n    }\n  };\n\n  SelectAdapter.prototype.unselect = function (data) {\n    var self = this;\n\n    if (!this.$element.prop('multiple')) {\n      return;\n    }\n\n    data.selected = false;\n\n    if ($(data.element).is('option')) {\n      data.element.selected = false;\n\n      this.$element.trigger('input').trigger('change');\n\n      return;\n    }\n\n    this.current(function (currentData) {\n      var val = [];\n\n      for (var d = 0; d < currentData.length; d++) {\n        var id = currentData[d].id;\n\n        if (id !== data.id && $.inArray(id, val) === -1) {\n          val.push(id);\n        }\n      }\n\n      self.$element.val(val);\n\n      self.$element.trigger('input').trigger('change');\n    });\n  };\n\n  SelectAdapter.prototype.bind = function (container, $container) {\n    var self = this;\n\n    this.container = container;\n\n    container.on('select', function (params) {\n      self.select(params.data);\n    });\n\n    container.on('unselect', function (params) {\n      self.unselect(params.data);\n    });\n  };\n\n  SelectAdapter.prototype.destroy = function () {\n    // Remove anything added to child elements\n    this.$element.find('*').each(function () {\n      // Remove any custom data set by Select2\n      Utils.RemoveData(this);\n    });\n  };\n\n  SelectAdapter.prototype.query = function (params, callback) {\n    var data = [];\n    var self = this;\n\n    var $options = this.$element.children();\n\n    $options.each(function () {\n      var $option = $(this);\n\n      if (!$option.is('option') && !$option.is('optgroup')) {\n        return;\n      }\n\n      var option = self.item($option);\n\n      var matches = self.matches(params, option);\n\n      if (matches !== null) {\n        data.push(matches);\n      }\n    });\n\n    callback({\n      results: data\n    });\n  };\n\n  SelectAdapter.prototype.addOptions = function ($options) {\n    Utils.appendMany(this.$element, $options);\n  };\n\n  SelectAdapter.prototype.option = function (data) {\n    var option;\n\n    if (data.children) {\n      option = document.createElement('optgroup');\n      option.label = data.text;\n    } else {\n      option = document.createElement('option');\n\n      if (option.textContent !== undefined) {\n        option.textContent = data.text;\n      } else {\n        option.innerText = data.text;\n      }\n    }\n\n    if (data.id !== undefined) {\n      option.value = data.id;\n    }\n\n    if (data.disabled) {\n      option.disabled = true;\n    }\n\n    if (data.selected) {\n      option.selected = true;\n    }\n\n    if (data.title) {\n      option.title = data.title;\n    }\n\n    var $option = $(option);\n\n    var normalizedData = this._normalizeItem(data);\n    normalizedData.element = option;\n\n    // Override the option's data with the combined data\n    Utils.StoreData(option, 'data', normalizedData);\n\n    return $option;\n  };\n\n  SelectAdapter.prototype.item = function ($option) {\n    var data = {};\n\n    data = Utils.GetData($option[0], 'data');\n\n    if (data != null) {\n      return data;\n    }\n\n    if ($option.is('option')) {\n      data = {\n        id: $option.val(),\n        text: $option.text(),\n        disabled: $option.prop('disabled'),\n        selected: $option.prop('selected'),\n        title: $option.prop('title')\n      };\n    } else if ($option.is('optgroup')) {\n      data = {\n        text: $option.prop('label'),\n        children: [],\n        title: $option.prop('title')\n      };\n\n      var $children = $option.children('option');\n      var children = [];\n\n      for (var c = 0; c < $children.length; c++) {\n        var $child = $($children[c]);\n\n        var child = this.item($child);\n\n        children.push(child);\n      }\n\n      data.children = children;\n    }\n\n    data = this._normalizeItem(data);\n    data.element = $option[0];\n\n    Utils.StoreData($option[0], 'data', data);\n\n    return data;\n  };\n\n  SelectAdapter.prototype._normalizeItem = function (item) {\n    if (item !== Object(item)) {\n      item = {\n        id: item,\n        text: item\n      };\n    }\n\n    item = $.extend({}, {\n      text: ''\n    }, item);\n\n    var defaults = {\n      selected: false,\n      disabled: false\n    };\n\n    if (item.id != null) {\n      item.id = item.id.toString();\n    }\n\n    if (item.text != null) {\n      item.text = item.text.toString();\n    }\n\n    if (item._resultId == null && item.id && this.container != null) {\n      item._resultId = this.generateResultId(this.container, item);\n    }\n\n    return $.extend({}, defaults, item);\n  };\n\n  SelectAdapter.prototype.matches = function (params, data) {\n    var matcher = this.options.get('matcher');\n\n    return matcher(params, data);\n  };\n\n  return SelectAdapter;\n});\n\nS2.define('select2/data/array',[\n  './select',\n  '../utils',\n  'jquery'\n], function (SelectAdapter, Utils, $) {\n  function ArrayAdapter ($element, options) {\n    this._dataToConvert = options.get('data') || [];\n\n    ArrayAdapter.__super__.constructor.call(this, $element, options);\n  }\n\n  Utils.Extend(ArrayAdapter, SelectAdapter);\n\n  ArrayAdapter.prototype.bind = function (container, $container) {\n    ArrayAdapter.__super__.bind.call(this, container, $container);\n\n    this.addOptions(this.convertToOptions(this._dataToConvert));\n  };\n\n  ArrayAdapter.prototype.select = function (data) {\n    var $option = this.$element.find('option').filter(function (i, elm) {\n      return elm.value == data.id.toString();\n    });\n\n    if ($option.length === 0) {\n      $option = this.option(data);\n\n      this.addOptions($option);\n    }\n\n    ArrayAdapter.__super__.select.call(this, data);\n  };\n\n  ArrayAdapter.prototype.convertToOptions = function (data) {\n    var self = this;\n\n    var $existing = this.$element.find('option');\n    var existingIds = $existing.map(function () {\n      return self.item($(this)).id;\n    }).get();\n\n    var $options = [];\n\n    // Filter out all items except for the one passed in the argument\n    function onlyItem (item) {\n      return function () {\n        return $(this).val() == item.id;\n      };\n    }\n\n    for (var d = 0; d < data.length; d++) {\n      var item = this._normalizeItem(data[d]);\n\n      // Skip items which were pre-loaded, only merge the data\n      if ($.inArray(item.id, existingIds) >= 0) {\n        var $existingOption = $existing.filter(onlyItem(item));\n\n        var existingData = this.item($existingOption);\n        var newData = $.extend(true, {}, item, existingData);\n\n        var $newOption = this.option(newData);\n\n        $existingOption.replaceWith($newOption);\n\n        continue;\n      }\n\n      var $option = this.option(item);\n\n      if (item.children) {\n        var $children = this.convertToOptions(item.children);\n\n        Utils.appendMany($option, $children);\n      }\n\n      $options.push($option);\n    }\n\n    return $options;\n  };\n\n  return ArrayAdapter;\n});\n\nS2.define('select2/data/ajax',[\n  './array',\n  '../utils',\n  'jquery'\n], function (ArrayAdapter, Utils, $) {\n  function AjaxAdapter ($element, options) {\n    this.ajaxOptions = this._applyDefaults(options.get('ajax'));\n\n    if (this.ajaxOptions.processResults != null) {\n      this.processResults = this.ajaxOptions.processResults;\n    }\n\n    AjaxAdapter.__super__.constructor.call(this, $element, options);\n  }\n\n  Utils.Extend(AjaxAdapter, ArrayAdapter);\n\n  AjaxAdapter.prototype._applyDefaults = function (options) {\n    var defaults = {\n      data: function (params) {\n        return $.extend({}, params, {\n          q: params.term\n        });\n      },\n      transport: function (params, success, failure) {\n        var $request = $.ajax(params);\n\n        $request.then(success);\n        $request.fail(failure);\n\n        return $request;\n      }\n    };\n\n    return $.extend({}, defaults, options, true);\n  };\n\n  AjaxAdapter.prototype.processResults = function (results) {\n    return results;\n  };\n\n  AjaxAdapter.prototype.query = function (params, callback) {\n    var matches = [];\n    var self = this;\n\n    if (this._request != null) {\n      // JSONP requests cannot always be aborted\n      if ($.isFunction(this._request.abort)) {\n        this._request.abort();\n      }\n\n      this._request = null;\n    }\n\n    var options = $.extend({\n      type: 'GET'\n    }, this.ajaxOptions);\n\n    if (typeof options.url === 'function') {\n      options.url = options.url.call(this.$element, params);\n    }\n\n    if (typeof options.data === 'function') {\n      options.data = options.data.call(this.$element, params);\n    }\n\n    function request () {\n      var $request = options.transport(options, function (data) {\n        var results = self.processResults(data, params);\n\n        if (self.options.get('debug') && window.console && console.error) {\n          // Check to make sure that the response included a `results` key.\n          if (!results || !results.results || !$.isArray(results.results)) {\n            console.error(\n              'Select2: The AJAX results did not return an array in the ' +\n              '`results` key of the response.'\n            );\n          }\n        }\n\n        callback(results);\n      }, function () {\n        // Attempt to detect if a request was aborted\n        // Only works if the transport exposes a status property\n        if ('status' in $request &&\n            ($request.status === 0 || $request.status === '0')) {\n          return;\n        }\n\n        self.trigger('results:message', {\n          message: 'errorLoading'\n        });\n      });\n\n      self._request = $request;\n    }\n\n    if (this.ajaxOptions.delay && params.term != null) {\n      if (this._queryTimeout) {\n        window.clearTimeout(this._queryTimeout);\n      }\n\n      this._queryTimeout = window.setTimeout(request, this.ajaxOptions.delay);\n    } else {\n      request();\n    }\n  };\n\n  return AjaxAdapter;\n});\n\nS2.define('select2/data/tags',[\n  'jquery'\n], function ($) {\n  function Tags (decorated, $element, options) {\n    var tags = options.get('tags');\n\n    var createTag = options.get('createTag');\n\n    if (createTag !== undefined) {\n      this.createTag = createTag;\n    }\n\n    var insertTag = options.get('insertTag');\n\n    if (insertTag !== undefined) {\n        this.insertTag = insertTag;\n    }\n\n    decorated.call(this, $element, options);\n\n    if ($.isArray(tags)) {\n      for (var t = 0; t < tags.length; t++) {\n        var tag = tags[t];\n        var item = this._normalizeItem(tag);\n\n        var $option = this.option(item);\n\n        this.$element.append($option);\n      }\n    }\n  }\n\n  Tags.prototype.query = function (decorated, params, callback) {\n    var self = this;\n\n    this._removeOldTags();\n\n    if (params.term == null || params.page != null) {\n      decorated.call(this, params, callback);\n      return;\n    }\n\n    function wrapper (obj, child) {\n      var data = obj.results;\n\n      for (var i = 0; i < data.length; i++) {\n        var option = data[i];\n\n        var checkChildren = (\n          option.children != null &&\n          !wrapper({\n            results: option.children\n          }, true)\n        );\n\n        var optionText = (option.text || '').toUpperCase();\n        var paramsTerm = (params.term || '').toUpperCase();\n\n        var checkText = optionText === paramsTerm;\n\n        if (checkText || checkChildren) {\n          if (child) {\n            return false;\n          }\n\n          obj.data = data;\n          callback(obj);\n\n          return;\n        }\n      }\n\n      if (child) {\n        return true;\n      }\n\n      var tag = self.createTag(params);\n\n      if (tag != null) {\n        var $option = self.option(tag);\n        $option.attr('data-select2-tag', true);\n\n        self.addOptions([$option]);\n\n        self.insertTag(data, tag);\n      }\n\n      obj.results = data;\n\n      callback(obj);\n    }\n\n    decorated.call(this, params, wrapper);\n  };\n\n  Tags.prototype.createTag = function (decorated, params) {\n    var term = $.trim(params.term);\n\n    if (term === '') {\n      return null;\n    }\n\n    return {\n      id: term,\n      text: term\n    };\n  };\n\n  Tags.prototype.insertTag = function (_, data, tag) {\n    data.unshift(tag);\n  };\n\n  Tags.prototype._removeOldTags = function (_) {\n    var $options = this.$element.find('option[data-select2-tag]');\n\n    $options.each(function () {\n      if (this.selected) {\n        return;\n      }\n\n      $(this).remove();\n    });\n  };\n\n  return Tags;\n});\n\nS2.define('select2/data/tokenizer',[\n  'jquery'\n], function ($) {\n  function Tokenizer (decorated, $element, options) {\n    var tokenizer = options.get('tokenizer');\n\n    if (tokenizer !== undefined) {\n      this.tokenizer = tokenizer;\n    }\n\n    decorated.call(this, $element, options);\n  }\n\n  Tokenizer.prototype.bind = function (decorated, container, $container) {\n    decorated.call(this, container, $container);\n\n    this.$search =  container.dropdown.$search || container.selection.$search ||\n      $container.find('.select2-search__field');\n  };\n\n  Tokenizer.prototype.query = function (decorated, params, callback) {\n    var self = this;\n\n    function createAndSelect (data) {\n      // Normalize the data object so we can use it for checks\n      var item = self._normalizeItem(data);\n\n      // Check if the data object already exists as a tag\n      // Select it if it doesn't\n      var $existingOptions = self.$element.find('option').filter(function () {\n        return $(this).val() === item.id;\n      });\n\n      // If an existing option wasn't found for it, create the option\n      if (!$existingOptions.length) {\n        var $option = self.option(item);\n        $option.attr('data-select2-tag', true);\n\n        self._removeOldTags();\n        self.addOptions([$option]);\n      }\n\n      // Select the item, now that we know there is an option for it\n      select(item);\n    }\n\n    function select (data) {\n      self.trigger('select', {\n        data: data\n      });\n    }\n\n    params.term = params.term || '';\n\n    var tokenData = this.tokenizer(params, this.options, createAndSelect);\n\n    if (tokenData.term !== params.term) {\n      // Replace the search term if we have the search box\n      if (this.$search.length) {\n        this.$search.val(tokenData.term);\n        this.$search.trigger('focus');\n      }\n\n      params.term = tokenData.term;\n    }\n\n    decorated.call(this, params, callback);\n  };\n\n  Tokenizer.prototype.tokenizer = function (_, params, options, callback) {\n    var separators = options.get('tokenSeparators') || [];\n    var term = params.term;\n    var i = 0;\n\n    var createTag = this.createTag || function (params) {\n      return {\n        id: params.term,\n        text: params.term\n      };\n    };\n\n    while (i < term.length) {\n      var termChar = term[i];\n\n      if ($.inArray(termChar, separators) === -1) {\n        i++;\n\n        continue;\n      }\n\n      var part = term.substr(0, i);\n      var partParams = $.extend({}, params, {\n        term: part\n      });\n\n      var data = createTag(partParams);\n\n      if (data == null) {\n        i++;\n        continue;\n      }\n\n      callback(data);\n\n      // Reset the term to not include the tokenized portion\n      term = term.substr(i + 1) || '';\n      i = 0;\n    }\n\n    return {\n      term: term\n    };\n  };\n\n  return Tokenizer;\n});\n\nS2.define('select2/data/minimumInputLength',[\n\n], function () {\n  function MinimumInputLength (decorated, $e, options) {\n    this.minimumInputLength = options.get('minimumInputLength');\n\n    decorated.call(this, $e, options);\n  }\n\n  MinimumInputLength.prototype.query = function (decorated, params, callback) {\n    params.term = params.term || '';\n\n    if (params.term.length < this.minimumInputLength) {\n      this.trigger('results:message', {\n        message: 'inputTooShort',\n        args: {\n          minimum: this.minimumInputLength,\n          input: params.term,\n          params: params\n        }\n      });\n\n      return;\n    }\n\n    decorated.call(this, params, callback);\n  };\n\n  return MinimumInputLength;\n});\n\nS2.define('select2/data/maximumInputLength',[\n\n], function () {\n  function MaximumInputLength (decorated, $e, options) {\n    this.maximumInputLength = options.get('maximumInputLength');\n\n    decorated.call(this, $e, options);\n  }\n\n  MaximumInputLength.prototype.query = function (decorated, params, callback) {\n    params.term = params.term || '';\n\n    if (this.maximumInputLength > 0 &&\n        params.term.length > this.maximumInputLength) {\n      this.trigger('results:message', {\n        message: 'inputTooLong',\n        args: {\n          maximum: this.maximumInputLength,\n          input: params.term,\n          params: params\n        }\n      });\n\n      return;\n    }\n\n    decorated.call(this, params, callback);\n  };\n\n  return MaximumInputLength;\n});\n\nS2.define('select2/data/maximumSelectionLength',[\n\n], function (){\n  function MaximumSelectionLength (decorated, $e, options) {\n    this.maximumSelectionLength = options.get('maximumSelectionLength');\n\n    decorated.call(this, $e, options);\n  }\n\n  MaximumSelectionLength.prototype.bind =\n    function (decorated, container, $container) {\n      var self = this;\n\n      decorated.call(this, container, $container);\n\n      container.on('select', function () {\n        self._checkIfMaximumSelected();\n      });\n  };\n\n  MaximumSelectionLength.prototype.query =\n    function (decorated, params, callback) {\n      var self = this;\n\n      this._checkIfMaximumSelected(function () {\n        decorated.call(self, params, callback);\n      });\n  };\n\n  MaximumSelectionLength.prototype._checkIfMaximumSelected =\n    function (_, successCallback) {\n      var self = this;\n\n      this.current(function (currentData) {\n        var count = currentData != null ? currentData.length : 0;\n        if (self.maximumSelectionLength > 0 &&\n          count >= self.maximumSelectionLength) {\n          self.trigger('results:message', {\n            message: 'maximumSelected',\n            args: {\n              maximum: self.maximumSelectionLength\n            }\n          });\n          return;\n        }\n\n        if (successCallback) {\n          successCallback();\n        }\n      });\n  };\n\n  return MaximumSelectionLength;\n});\n\nS2.define('select2/dropdown',[\n  'jquery',\n  './utils'\n], function ($, Utils) {\n  function Dropdown ($element, options) {\n    this.$element = $element;\n    this.options = options;\n\n    Dropdown.__super__.constructor.call(this);\n  }\n\n  Utils.Extend(Dropdown, Utils.Observable);\n\n  Dropdown.prototype.render = function () {\n    var $dropdown = $(\n      '<span class=\"select2-dropdown\">' +\n        '<span class=\"select2-results\"></span>' +\n      '</span>'\n    );\n\n    $dropdown.attr('dir', this.options.get('dir'));\n\n    this.$dropdown = $dropdown;\n\n    return $dropdown;\n  };\n\n  Dropdown.prototype.bind = function () {\n    // Should be implemented in subclasses\n  };\n\n  Dropdown.prototype.position = function ($dropdown, $container) {\n    // Should be implemented in subclasses\n  };\n\n  Dropdown.prototype.destroy = function () {\n    // Remove the dropdown from the DOM\n    this.$dropdown.remove();\n  };\n\n  return Dropdown;\n});\n\nS2.define('select2/dropdown/search',[\n  'jquery',\n  '../utils'\n], function ($, Utils) {\n  function Search () { }\n\n  Search.prototype.render = function (decorated) {\n    var $rendered = decorated.call(this);\n\n    var $search = $(\n      '<span class=\"select2-search select2-search--dropdown\">' +\n        '<input class=\"select2-search__field\" type=\"search\" tabindex=\"-1\"' +\n        ' autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"none\"' +\n        ' spellcheck=\"false\" role=\"searchbox\" aria-autocomplete=\"list\" />' +\n      '</span>'\n    );\n\n    this.$searchContainer = $search;\n    this.$search = $search.find('input');\n\n    $rendered.prepend($search);\n\n    return $rendered;\n  };\n\n  Search.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n\n    var resultsId = container.id + '-results';\n\n    decorated.call(this, container, $container);\n\n    this.$search.on('keydown', function (evt) {\n      self.trigger('keypress', evt);\n\n      self._keyUpPrevented = evt.isDefaultPrevented();\n    });\n\n    // Workaround for browsers which do not support the `input` event\n    // This will prevent double-triggering of events for browsers which support\n    // both the `keyup` and `input` events.\n    this.$search.on('input', function (evt) {\n      // Unbind the duplicated `keyup` event\n      $(this).off('keyup');\n    });\n\n    this.$search.on('keyup input', function (evt) {\n      self.handleSearch(evt);\n    });\n\n    container.on('open', function () {\n      self.$search.attr('tabindex', 0);\n      self.$search.attr('aria-controls', resultsId);\n\n      self.$search.trigger('focus');\n\n      window.setTimeout(function () {\n        self.$search.trigger('focus');\n      }, 0);\n    });\n\n    container.on('close', function () {\n      self.$search.attr('tabindex', -1);\n      self.$search.removeAttr('aria-controls');\n      self.$search.removeAttr('aria-activedescendant');\n\n      self.$search.val('');\n      self.$search.trigger('blur');\n    });\n\n    container.on('focus', function () {\n      if (!container.isOpen()) {\n        self.$search.trigger('focus');\n      }\n    });\n\n    container.on('results:all', function (params) {\n      if (params.query.term == null || params.query.term === '') {\n        var showSearch = self.showSearch(params);\n\n        if (showSearch) {\n          self.$searchContainer.removeClass('select2-search--hide');\n        } else {\n          self.$searchContainer.addClass('select2-search--hide');\n        }\n      }\n    });\n\n    container.on('results:focus', function (params) {\n      if (params.data._resultId) {\n        self.$search.attr('aria-activedescendant', params.data._resultId);\n      } else {\n        self.$search.removeAttr('aria-activedescendant');\n      }\n    });\n  };\n\n  Search.prototype.handleSearch = function (evt) {\n    if (!this._keyUpPrevented) {\n      var input = this.$search.val();\n\n      this.trigger('query', {\n        term: input\n      });\n    }\n\n    this._keyUpPrevented = false;\n  };\n\n  Search.prototype.showSearch = function (_, params) {\n    return true;\n  };\n\n  return Search;\n});\n\nS2.define('select2/dropdown/hidePlaceholder',[\n\n], function () {\n  function HidePlaceholder (decorated, $element, options, dataAdapter) {\n    this.placeholder = this.normalizePlaceholder(options.get('placeholder'));\n\n    decorated.call(this, $element, options, dataAdapter);\n  }\n\n  HidePlaceholder.prototype.append = function (decorated, data) {\n    data.results = this.removePlaceholder(data.results);\n\n    decorated.call(this, data);\n  };\n\n  HidePlaceholder.prototype.normalizePlaceholder = function (_, placeholder) {\n    if (typeof placeholder === 'string') {\n      placeholder = {\n        id: '',\n        text: placeholder\n      };\n    }\n\n    return placeholder;\n  };\n\n  HidePlaceholder.prototype.removePlaceholder = function (_, data) {\n    var modifiedData = data.slice(0);\n\n    for (var d = data.length - 1; d >= 0; d--) {\n      var item = data[d];\n\n      if (this.placeholder.id === item.id) {\n        modifiedData.splice(d, 1);\n      }\n    }\n\n    return modifiedData;\n  };\n\n  return HidePlaceholder;\n});\n\nS2.define('select2/dropdown/infiniteScroll',[\n  'jquery'\n], function ($) {\n  function InfiniteScroll (decorated, $element, options, dataAdapter) {\n    this.lastParams = {};\n\n    decorated.call(this, $element, options, dataAdapter);\n\n    this.$loadingMore = this.createLoadingMore();\n    this.loading = false;\n  }\n\n  InfiniteScroll.prototype.append = function (decorated, data) {\n    this.$loadingMore.remove();\n    this.loading = false;\n\n    decorated.call(this, data);\n\n    if (this.showLoadingMore(data)) {\n      this.$results.append(this.$loadingMore);\n      this.loadMoreIfNeeded();\n    }\n  };\n\n  InfiniteScroll.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n\n    decorated.call(this, container, $container);\n\n    container.on('query', function (params) {\n      self.lastParams = params;\n      self.loading = true;\n    });\n\n    container.on('query:append', function (params) {\n      self.lastParams = params;\n      self.loading = true;\n    });\n\n    this.$results.on('scroll', this.loadMoreIfNeeded.bind(this));\n  };\n\n  InfiniteScroll.prototype.loadMoreIfNeeded = function () {\n    var isLoadMoreVisible = $.contains(\n      document.documentElement,\n      this.$loadingMore[0]\n    );\n\n    if (this.loading || !isLoadMoreVisible) {\n      return;\n    }\n\n    var currentOffset = this.$results.offset().top +\n      this.$results.outerHeight(false);\n    var loadingMoreOffset = this.$loadingMore.offset().top +\n      this.$loadingMore.outerHeight(false);\n\n    if (currentOffset + 50 >= loadingMoreOffset) {\n      this.loadMore();\n    }\n  };\n\n  InfiniteScroll.prototype.loadMore = function () {\n    this.loading = true;\n\n    var params = $.extend({}, {page: 1}, this.lastParams);\n\n    params.page++;\n\n    this.trigger('query:append', params);\n  };\n\n  InfiniteScroll.prototype.showLoadingMore = function (_, data) {\n    return data.pagination && data.pagination.more;\n  };\n\n  InfiniteScroll.prototype.createLoadingMore = function () {\n    var $option = $(\n      '<li ' +\n      'class=\"select2-results__option select2-results__option--load-more\"' +\n      'role=\"option\" aria-disabled=\"true\"></li>'\n    );\n\n    var message = this.options.get('translations').get('loadingMore');\n\n    $option.html(message(this.lastParams));\n\n    return $option;\n  };\n\n  return InfiniteScroll;\n});\n\nS2.define('select2/dropdown/attachBody',[\n  'jquery',\n  '../utils'\n], function ($, Utils) {\n  function AttachBody (decorated, $element, options) {\n    this.$dropdownParent = $(options.get('dropdownParent') || document.body);\n\n    decorated.call(this, $element, options);\n  }\n\n  AttachBody.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n\n    decorated.call(this, container, $container);\n\n    container.on('open', function () {\n      self._showDropdown();\n      self._attachPositioningHandler(container);\n\n      // Must bind after the results handlers to ensure correct sizing\n      self._bindContainerResultHandlers(container);\n    });\n\n    container.on('close', function () {\n      self._hideDropdown();\n      self._detachPositioningHandler(container);\n    });\n\n    this.$dropdownContainer.on('mousedown', function (evt) {\n      evt.stopPropagation();\n    });\n  };\n\n  AttachBody.prototype.destroy = function (decorated) {\n    decorated.call(this);\n\n    this.$dropdownContainer.remove();\n  };\n\n  AttachBody.prototype.position = function (decorated, $dropdown, $container) {\n    // Clone all of the container classes\n    $dropdown.attr('class', $container.attr('class'));\n\n    $dropdown.removeClass('select2');\n    $dropdown.addClass('select2-container--open');\n\n    $dropdown.css({\n      position: 'absolute',\n      top: -999999\n    });\n\n    this.$container = $container;\n  };\n\n  AttachBody.prototype.render = function (decorated) {\n    var $container = $('<span></span>');\n\n    var $dropdown = decorated.call(this);\n    $container.append($dropdown);\n\n    this.$dropdownContainer = $container;\n\n    return $container;\n  };\n\n  AttachBody.prototype._hideDropdown = function (decorated) {\n    this.$dropdownContainer.detach();\n  };\n\n  AttachBody.prototype._bindContainerResultHandlers =\n      function (decorated, container) {\n\n    // These should only be bound once\n    if (this._containerResultsHandlersBound) {\n      return;\n    }\n\n    var self = this;\n\n    container.on('results:all', function () {\n      self._positionDropdown();\n      self._resizeDropdown();\n    });\n\n    container.on('results:append', function () {\n      self._positionDropdown();\n      self._resizeDropdown();\n    });\n\n    container.on('results:message', function () {\n      self._positionDropdown();\n      self._resizeDropdown();\n    });\n\n    container.on('select', function () {\n      self._positionDropdown();\n      self._resizeDropdown();\n    });\n\n    container.on('unselect', function () {\n      self._positionDropdown();\n      self._resizeDropdown();\n    });\n\n    this._containerResultsHandlersBound = true;\n  };\n\n  AttachBody.prototype._attachPositioningHandler =\n      function (decorated, container) {\n    var self = this;\n\n    var scrollEvent = 'scroll.select2.' + container.id;\n    var resizeEvent = 'resize.select2.' + container.id;\n    var orientationEvent = 'orientationchange.select2.' + container.id;\n\n    var $watchers = this.$container.parents().filter(Utils.hasScroll);\n    $watchers.each(function () {\n      Utils.StoreData(this, 'select2-scroll-position', {\n        x: $(this).scrollLeft(),\n        y: $(this).scrollTop()\n      });\n    });\n\n    $watchers.on(scrollEvent, function (ev) {\n      var position = Utils.GetData(this, 'select2-scroll-position');\n      $(this).scrollTop(position.y);\n    });\n\n    $(window).on(scrollEvent + ' ' + resizeEvent + ' ' + orientationEvent,\n      function (e) {\n      self._positionDropdown();\n      self._resizeDropdown();\n    });\n  };\n\n  AttachBody.prototype._detachPositioningHandler =\n      function (decorated, container) {\n    var scrollEvent = 'scroll.select2.' + container.id;\n    var resizeEvent = 'resize.select2.' + container.id;\n    var orientationEvent = 'orientationchange.select2.' + container.id;\n\n    var $watchers = this.$container.parents().filter(Utils.hasScroll);\n    $watchers.off(scrollEvent);\n\n    $(window).off(scrollEvent + ' ' + resizeEvent + ' ' + orientationEvent);\n  };\n\n  AttachBody.prototype._positionDropdown = function () {\n    var $window = $(window);\n\n    var isCurrentlyAbove = this.$dropdown.hasClass('select2-dropdown--above');\n    var isCurrentlyBelow = this.$dropdown.hasClass('select2-dropdown--below');\n\n    var newDirection = null;\n\n    var offset = this.$container.offset();\n\n    offset.bottom = offset.top + this.$container.outerHeight(false);\n\n    var container = {\n      height: this.$container.outerHeight(false)\n    };\n\n    container.top = offset.top;\n    container.bottom = offset.top + container.height;\n\n    var dropdown = {\n      height: this.$dropdown.outerHeight(false)\n    };\n\n    var viewport = {\n      top: $window.scrollTop(),\n      bottom: $window.scrollTop() + $window.height()\n    };\n\n    var enoughRoomAbove = viewport.top < (offset.top - dropdown.height);\n    var enoughRoomBelow = viewport.bottom > (offset.bottom + dropdown.height);\n\n    var css = {\n      left: offset.left,\n      top: container.bottom\n    };\n\n    // Determine what the parent element is to use for calculating the offset\n    var $offsetParent = this.$dropdownParent;\n\n    // For statically positioned elements, we need to get the element\n    // that is determining the offset\n    if ($offsetParent.css('position') === 'static') {\n      $offsetParent = $offsetParent.offsetParent();\n    }\n\n    var parentOffset = {\n      top: 0,\n      left: 0\n    };\n\n    if (\n      $.contains(document.body, $offsetParent[0]) ||\n      $offsetParent[0].isConnected\n      ) {\n      parentOffset = $offsetParent.offset();\n    }\n\n    css.top -= parentOffset.top;\n    css.left -= parentOffset.left;\n\n    if (!isCurrentlyAbove && !isCurrentlyBelow) {\n      newDirection = 'below';\n    }\n\n    if (!enoughRoomBelow && enoughRoomAbove && !isCurrentlyAbove) {\n      newDirection = 'above';\n    } else if (!enoughRoomAbove && enoughRoomBelow && isCurrentlyAbove) {\n      newDirection = 'below';\n    }\n\n    if (newDirection == 'above' ||\n      (isCurrentlyAbove && newDirection !== 'below')) {\n      css.top = container.top - parentOffset.top - dropdown.height;\n    }\n\n    if (newDirection != null) {\n      this.$dropdown\n        .removeClass('select2-dropdown--below select2-dropdown--above')\n        .addClass('select2-dropdown--' + newDirection);\n      this.$container\n        .removeClass('select2-container--below select2-container--above')\n        .addClass('select2-container--' + newDirection);\n    }\n\n    this.$dropdownContainer.css(css);\n  };\n\n  AttachBody.prototype._resizeDropdown = function () {\n    var css = {\n      width: this.$container.outerWidth(false) + 'px'\n    };\n\n    if (this.options.get('dropdownAutoWidth')) {\n      css.minWidth = css.width;\n      css.position = 'relative';\n      css.width = 'auto';\n    }\n\n    this.$dropdown.css(css);\n  };\n\n  AttachBody.prototype._showDropdown = function (decorated) {\n    this.$dropdownContainer.appendTo(this.$dropdownParent);\n\n    this._positionDropdown();\n    this._resizeDropdown();\n  };\n\n  return AttachBody;\n});\n\nS2.define('select2/dropdown/minimumResultsForSearch',[\n\n], function () {\n  function countResults (data) {\n    var count = 0;\n\n    for (var d = 0; d < data.length; d++) {\n      var item = data[d];\n\n      if (item.children) {\n        count += countResults(item.children);\n      } else {\n        count++;\n      }\n    }\n\n    return count;\n  }\n\n  function MinimumResultsForSearch (decorated, $element, options, dataAdapter) {\n    this.minimumResultsForSearch = options.get('minimumResultsForSearch');\n\n    if (this.minimumResultsForSearch < 0) {\n      this.minimumResultsForSearch = Infinity;\n    }\n\n    decorated.call(this, $element, options, dataAdapter);\n  }\n\n  MinimumResultsForSearch.prototype.showSearch = function (decorated, params) {\n    if (countResults(params.data.results) < this.minimumResultsForSearch) {\n      return false;\n    }\n\n    return decorated.call(this, params);\n  };\n\n  return MinimumResultsForSearch;\n});\n\nS2.define('select2/dropdown/selectOnClose',[\n  '../utils'\n], function (Utils) {\n  function SelectOnClose () { }\n\n  SelectOnClose.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n\n    decorated.call(this, container, $container);\n\n    container.on('close', function (params) {\n      self._handleSelectOnClose(params);\n    });\n  };\n\n  SelectOnClose.prototype._handleSelectOnClose = function (_, params) {\n    if (params && params.originalSelect2Event != null) {\n      var event = params.originalSelect2Event;\n\n      // Don't select an item if the close event was triggered from a select or\n      // unselect event\n      if (event._type === 'select' || event._type === 'unselect') {\n        return;\n      }\n    }\n\n    var $highlightedResults = this.getHighlightedResults();\n\n    // Only select highlighted results\n    if ($highlightedResults.length < 1) {\n      return;\n    }\n\n    var data = Utils.GetData($highlightedResults[0], 'data');\n\n    // Don't re-select already selected resulte\n    if (\n      (data.element != null && data.element.selected) ||\n      (data.element == null && data.selected)\n    ) {\n      return;\n    }\n\n    this.trigger('select', {\n        data: data\n    });\n  };\n\n  return SelectOnClose;\n});\n\nS2.define('select2/dropdown/closeOnSelect',[\n\n], function () {\n  function CloseOnSelect () { }\n\n  CloseOnSelect.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n\n    decorated.call(this, container, $container);\n\n    container.on('select', function (evt) {\n      self._selectTriggered(evt);\n    });\n\n    container.on('unselect', function (evt) {\n      self._selectTriggered(evt);\n    });\n  };\n\n  CloseOnSelect.prototype._selectTriggered = function (_, evt) {\n    var originalEvent = evt.originalEvent;\n\n    // Don't close if the control key is being held\n    if (originalEvent && (originalEvent.ctrlKey || originalEvent.metaKey)) {\n      return;\n    }\n\n    this.trigger('close', {\n      originalEvent: originalEvent,\n      originalSelect2Event: evt\n    });\n  };\n\n  return CloseOnSelect;\n});\n\nS2.define('select2/i18n/en',[],function () {\n  // English\n  return {\n    errorLoading: function () {\n      return 'The results could not be loaded.';\n    },\n    inputTooLong: function (args) {\n      var overChars = args.input.length - args.maximum;\n\n      var message = 'Please delete ' + overChars + ' character';\n\n      if (overChars != 1) {\n        message += 's';\n      }\n\n      return message;\n    },\n    inputTooShort: function (args) {\n      var remainingChars = args.minimum - args.input.length;\n\n      var message = 'Please enter ' + remainingChars + ' or more characters';\n\n      return message;\n    },\n    loadingMore: function () {\n      return 'Loading more results…';\n    },\n    maximumSelected: function (args) {\n      var message = 'You can only select ' + args.maximum + ' item';\n\n      if (args.maximum != 1) {\n        message += 's';\n      }\n\n      return message;\n    },\n    noResults: function () {\n      return 'No results found';\n    },\n    searching: function () {\n      return 'Searching…';\n    },\n    removeAllItems: function () {\n      return 'Remove all items';\n    }\n  };\n});\n\nS2.define('select2/defaults',[\n  'jquery',\n  'require',\n\n  './results',\n\n  './selection/single',\n  './selection/multiple',\n  './selection/placeholder',\n  './selection/allowClear',\n  './selection/search',\n  './selection/eventRelay',\n\n  './utils',\n  './translation',\n  './diacritics',\n\n  './data/select',\n  './data/array',\n  './data/ajax',\n  './data/tags',\n  './data/tokenizer',\n  './data/minimumInputLength',\n  './data/maximumInputLength',\n  './data/maximumSelectionLength',\n\n  './dropdown',\n  './dropdown/search',\n  './dropdown/hidePlaceholder',\n  './dropdown/infiniteScroll',\n  './dropdown/attachBody',\n  './dropdown/minimumResultsForSearch',\n  './dropdown/selectOnClose',\n  './dropdown/closeOnSelect',\n\n  './i18n/en'\n], function ($, require,\n\n             ResultsList,\n\n             SingleSelection, MultipleSelection, Placeholder, AllowClear,\n             SelectionSearch, EventRelay,\n\n             Utils, Translation, DIACRITICS,\n\n             SelectData, ArrayData, AjaxData, Tags, Tokenizer,\n             MinimumInputLength, MaximumInputLength, MaximumSelectionLength,\n\n             Dropdown, DropdownSearch, HidePlaceholder, InfiniteScroll,\n             AttachBody, MinimumResultsForSearch, SelectOnClose, CloseOnSelect,\n\n             EnglishTranslation) {\n  function Defaults () {\n    this.reset();\n  }\n\n  Defaults.prototype.apply = function (options) {\n    options = $.extend(true, {}, this.defaults, options);\n\n    if (options.dataAdapter == null) {\n      if (options.ajax != null) {\n        options.dataAdapter = AjaxData;\n      } else if (options.data != null) {\n        options.dataAdapter = ArrayData;\n      } else {\n        options.dataAdapter = SelectData;\n      }\n\n      if (options.minimumInputLength > 0) {\n        options.dataAdapter = Utils.Decorate(\n          options.dataAdapter,\n          MinimumInputLength\n        );\n      }\n\n      if (options.maximumInputLength > 0) {\n        options.dataAdapter = Utils.Decorate(\n          options.dataAdapter,\n          MaximumInputLength\n        );\n      }\n\n      if (options.maximumSelectionLength > 0) {\n        options.dataAdapter = Utils.Decorate(\n          options.dataAdapter,\n          MaximumSelectionLength\n        );\n      }\n\n      if (options.tags) {\n        options.dataAdapter = Utils.Decorate(options.dataAdapter, Tags);\n      }\n\n      if (options.tokenSeparators != null || options.tokenizer != null) {\n        options.dataAdapter = Utils.Decorate(\n          options.dataAdapter,\n          Tokenizer\n        );\n      }\n\n      if (options.query != null) {\n        var Query = require(options.amdBase + 'compat/query');\n\n        options.dataAdapter = Utils.Decorate(\n          options.dataAdapter,\n          Query\n        );\n      }\n\n      if (options.initSelection != null) {\n        var InitSelection = require(options.amdBase + 'compat/initSelection');\n\n        options.dataAdapter = Utils.Decorate(\n          options.dataAdapter,\n          InitSelection\n        );\n      }\n    }\n\n    if (options.resultsAdapter == null) {\n      options.resultsAdapter = ResultsList;\n\n      if (options.ajax != null) {\n        options.resultsAdapter = Utils.Decorate(\n          options.resultsAdapter,\n          InfiniteScroll\n        );\n      }\n\n      if (options.placeholder != null) {\n        options.resultsAdapter = Utils.Decorate(\n          options.resultsAdapter,\n          HidePlaceholder\n        );\n      }\n\n      if (options.selectOnClose) {\n        options.resultsAdapter = Utils.Decorate(\n          options.resultsAdapter,\n          SelectOnClose\n        );\n      }\n    }\n\n    if (options.dropdownAdapter == null) {\n      if (options.multiple) {\n        options.dropdownAdapter = Dropdown;\n      } else {\n        var SearchableDropdown = Utils.Decorate(Dropdown, DropdownSearch);\n\n        options.dropdownAdapter = SearchableDropdown;\n      }\n\n      if (options.minimumResultsForSearch !== 0) {\n        options.dropdownAdapter = Utils.Decorate(\n          options.dropdownAdapter,\n          MinimumResultsForSearch\n        );\n      }\n\n      if (options.closeOnSelect) {\n        options.dropdownAdapter = Utils.Decorate(\n          options.dropdownAdapter,\n          CloseOnSelect\n        );\n      }\n\n      if (\n        options.dropdownCssClass != null ||\n        options.dropdownCss != null ||\n        options.adaptDropdownCssClass != null\n      ) {\n        var DropdownCSS = require(options.amdBase + 'compat/dropdownCss');\n\n        options.dropdownAdapter = Utils.Decorate(\n          options.dropdownAdapter,\n          DropdownCSS\n        );\n      }\n\n      options.dropdownAdapter = Utils.Decorate(\n        options.dropdownAdapter,\n        AttachBody\n      );\n    }\n\n    if (options.selectionAdapter == null) {\n      if (options.multiple) {\n        options.selectionAdapter = MultipleSelection;\n      } else {\n        options.selectionAdapter = SingleSelection;\n      }\n\n      // Add the placeholder mixin if a placeholder was specified\n      if (options.placeholder != null) {\n        options.selectionAdapter = Utils.Decorate(\n          options.selectionAdapter,\n          Placeholder\n        );\n      }\n\n      if (options.allowClear) {\n        options.selectionAdapter = Utils.Decorate(\n          options.selectionAdapter,\n          AllowClear\n        );\n      }\n\n      if (options.multiple) {\n        options.selectionAdapter = Utils.Decorate(\n          options.selectionAdapter,\n          SelectionSearch\n        );\n      }\n\n      if (\n        options.containerCssClass != null ||\n        options.containerCss != null ||\n        options.adaptContainerCssClass != null\n      ) {\n        var ContainerCSS = require(options.amdBase + 'compat/containerCss');\n\n        options.selectionAdapter = Utils.Decorate(\n          options.selectionAdapter,\n          ContainerCSS\n        );\n      }\n\n      options.selectionAdapter = Utils.Decorate(\n        options.selectionAdapter,\n        EventRelay\n      );\n    }\n\n    // If the defaults were not previously applied from an element, it is\n    // possible for the language option to have not been resolved\n    options.language = this._resolveLanguage(options.language);\n\n    // Always fall back to English since it will always be complete\n    options.language.push('en');\n\n    var uniqueLanguages = [];\n\n    for (var l = 0; l < options.language.length; l++) {\n      var language = options.language[l];\n\n      if (uniqueLanguages.indexOf(language) === -1) {\n        uniqueLanguages.push(language);\n      }\n    }\n\n    options.language = uniqueLanguages;\n\n    options.translations = this._processTranslations(\n      options.language,\n      options.debug\n    );\n\n    return options;\n  };\n\n  Defaults.prototype.reset = function () {\n    function stripDiacritics (text) {\n      // Used 'uni range + named function' from http://jsperf.com/diacritics/18\n      function match(a) {\n        return DIACRITICS[a] || a;\n      }\n\n      return text.replace(/[^\\u0000-\\u007E]/g, match);\n    }\n\n    function matcher (params, data) {\n      // Always return the object if there is nothing to compare\n      if ($.trim(params.term) === '') {\n        return data;\n      }\n\n      // Do a recursive check for options with children\n      if (data.children && data.children.length > 0) {\n        // Clone the data object if there are children\n        // This is required as we modify the object to remove any non-matches\n        var match = $.extend(true, {}, data);\n\n        // Check each child of the option\n        for (var c = data.children.length - 1; c >= 0; c--) {\n          var child = data.children[c];\n\n          var matches = matcher(params, child);\n\n          // If there wasn't a match, remove the object in the array\n          if (matches == null) {\n            match.children.splice(c, 1);\n          }\n        }\n\n        // If any children matched, return the new object\n        if (match.children.length > 0) {\n          return match;\n        }\n\n        // If there were no matching children, check just the plain object\n        return matcher(params, match);\n      }\n\n      var original = stripDiacritics(data.text).toUpperCase();\n      var term = stripDiacritics(params.term).toUpperCase();\n\n      // Check if the text contains the term\n      if (original.indexOf(term) > -1) {\n        return data;\n      }\n\n      // If it doesn't contain the term, don't return anything\n      return null;\n    }\n\n    this.defaults = {\n      amdBase: './',\n      amdLanguageBase: './i18n/',\n      closeOnSelect: true,\n      debug: false,\n      dropdownAutoWidth: false,\n      escapeMarkup: Utils.escapeMarkup,\n      language: {},\n      matcher: matcher,\n      minimumInputLength: 0,\n      maximumInputLength: 0,\n      maximumSelectionLength: 0,\n      minimumResultsForSearch: 0,\n      selectOnClose: false,\n      scrollAfterSelect: false,\n      sorter: function (data) {\n        return data;\n      },\n      templateResult: function (result) {\n        return result.text;\n      },\n      templateSelection: function (selection) {\n        return selection.text;\n      },\n      theme: 'default',\n      width: 'resolve'\n    };\n  };\n\n  Defaults.prototype.applyFromElement = function (options, $element) {\n    var optionLanguage = options.language;\n    var defaultLanguage = this.defaults.language;\n    var elementLanguage = $element.prop('lang');\n    var parentLanguage = $element.closest('[lang]').prop('lang');\n\n    var languages = Array.prototype.concat.call(\n      this._resolveLanguage(elementLanguage),\n      this._resolveLanguage(optionLanguage),\n      this._resolveLanguage(defaultLanguage),\n      this._resolveLanguage(parentLanguage)\n    );\n\n    options.language = languages;\n\n    return options;\n  };\n\n  Defaults.prototype._resolveLanguage = function (language) {\n    if (!language) {\n      return [];\n    }\n\n    if ($.isEmptyObject(language)) {\n      return [];\n    }\n\n    if ($.isPlainObject(language)) {\n      return [language];\n    }\n\n    var languages;\n\n    if (!$.isArray(language)) {\n      languages = [language];\n    } else {\n      languages = language;\n    }\n\n    var resolvedLanguages = [];\n\n    for (var l = 0; l < languages.length; l++) {\n      resolvedLanguages.push(languages[l]);\n\n      if (typeof languages[l] === 'string' && languages[l].indexOf('-') > 0) {\n        // Extract the region information if it is included\n        var languageParts = languages[l].split('-');\n        var baseLanguage = languageParts[0];\n\n        resolvedLanguages.push(baseLanguage);\n      }\n    }\n\n    return resolvedLanguages;\n  };\n\n  Defaults.prototype._processTranslations = function (languages, debug) {\n    var translations = new Translation();\n\n    for (var l = 0; l < languages.length; l++) {\n      var languageData = new Translation();\n\n      var language = languages[l];\n\n      if (typeof language === 'string') {\n        try {\n          // Try to load it with the original name\n          languageData = Translation.loadPath(language);\n        } catch (e) {\n          try {\n            // If we couldn't load it, check if it wasn't the full path\n            language = this.defaults.amdLanguageBase + language;\n            languageData = Translation.loadPath(language);\n          } catch (ex) {\n            // The translation could not be loaded at all. Sometimes this is\n            // because of a configuration problem, other times this can be\n            // because of how Select2 helps load all possible translation files\n            if (debug && window.console && console.warn) {\n              console.warn(\n                'Select2: The language file for \"' + language + '\" could ' +\n                'not be automatically loaded. A fallback will be used instead.'\n              );\n            }\n          }\n        }\n      } else if ($.isPlainObject(language)) {\n        languageData = new Translation(language);\n      } else {\n        languageData = language;\n      }\n\n      translations.extend(languageData);\n    }\n\n    return translations;\n  };\n\n  Defaults.prototype.set = function (key, value) {\n    var camelKey = $.camelCase(key);\n\n    var data = {};\n    data[camelKey] = value;\n\n    var convertedData = Utils._convertData(data);\n\n    $.extend(true, this.defaults, convertedData);\n  };\n\n  var defaults = new Defaults();\n\n  return defaults;\n});\n\nS2.define('select2/options',[\n  'require',\n  'jquery',\n  './defaults',\n  './utils'\n], function (require, $, Defaults, Utils) {\n  function Options (options, $element) {\n    this.options = options;\n\n    if ($element != null) {\n      this.fromElement($element);\n    }\n\n    if ($element != null) {\n      this.options = Defaults.applyFromElement(this.options, $element);\n    }\n\n    this.options = Defaults.apply(this.options);\n\n    if ($element && $element.is('input')) {\n      var InputCompat = require(this.get('amdBase') + 'compat/inputData');\n\n      this.options.dataAdapter = Utils.Decorate(\n        this.options.dataAdapter,\n        InputCompat\n      );\n    }\n  }\n\n  Options.prototype.fromElement = function ($e) {\n    var excludedData = ['select2'];\n\n    if (this.options.multiple == null) {\n      this.options.multiple = $e.prop('multiple');\n    }\n\n    if (this.options.disabled == null) {\n      this.options.disabled = $e.prop('disabled');\n    }\n\n    if (this.options.dir == null) {\n      if ($e.prop('dir')) {\n        this.options.dir = $e.prop('dir');\n      } else if ($e.closest('[dir]').prop('dir')) {\n        this.options.dir = $e.closest('[dir]').prop('dir');\n      } else {\n        this.options.dir = 'ltr';\n      }\n    }\n\n    $e.prop('disabled', this.options.disabled);\n    $e.prop('multiple', this.options.multiple);\n\n    if (Utils.GetData($e[0], 'select2Tags')) {\n      if (this.options.debug && window.console && console.warn) {\n        console.warn(\n          'Select2: The `data-select2-tags` attribute has been changed to ' +\n          'use the `data-data` and `data-tags=\"true\"` attributes and will be ' +\n          'removed in future versions of Select2.'\n        );\n      }\n\n      Utils.StoreData($e[0], 'data', Utils.GetData($e[0], 'select2Tags'));\n      Utils.StoreData($e[0], 'tags', true);\n    }\n\n    if (Utils.GetData($e[0], 'ajaxUrl')) {\n      if (this.options.debug && window.console && console.warn) {\n        console.warn(\n          'Select2: The `data-ajax-url` attribute has been changed to ' +\n          '`data-ajax--url` and support for the old attribute will be removed' +\n          ' in future versions of Select2.'\n        );\n      }\n\n      $e.attr('ajax--url', Utils.GetData($e[0], 'ajaxUrl'));\n      Utils.StoreData($e[0], 'ajax-Url', Utils.GetData($e[0], 'ajaxUrl'));\n    }\n\n    var dataset = {};\n\n    function upperCaseLetter(_, letter) {\n      return letter.toUpperCase();\n    }\n\n    // Pre-load all of the attributes which are prefixed with `data-`\n    for (var attr = 0; attr < $e[0].attributes.length; attr++) {\n      var attributeName = $e[0].attributes[attr].name;\n      var prefix = 'data-';\n\n      if (attributeName.substr(0, prefix.length) == prefix) {\n        // Get the contents of the attribute after `data-`\n        var dataName = attributeName.substring(prefix.length);\n\n        // Get the data contents from the consistent source\n        // This is more than likely the jQuery data helper\n        var dataValue = Utils.GetData($e[0], dataName);\n\n        // camelCase the attribute name to match the spec\n        var camelDataName = dataName.replace(/-([a-z])/g, upperCaseLetter);\n\n        // Store the data attribute contents into the dataset since\n        dataset[camelDataName] = dataValue;\n      }\n    }\n\n    // Prefer the element's `dataset` attribute if it exists\n    // jQuery 1.x does not correctly handle data attributes with multiple dashes\n    if ($.fn.jquery && $.fn.jquery.substr(0, 2) == '1.' && $e[0].dataset) {\n      dataset = $.extend(true, {}, $e[0].dataset, dataset);\n    }\n\n    // Prefer our internal data cache if it exists\n    var data = $.extend(true, {}, Utils.GetData($e[0]), dataset);\n\n    data = Utils._convertData(data);\n\n    for (var key in data) {\n      if ($.inArray(key, excludedData) > -1) {\n        continue;\n      }\n\n      if ($.isPlainObject(this.options[key])) {\n        $.extend(this.options[key], data[key]);\n      } else {\n        this.options[key] = data[key];\n      }\n    }\n\n    return this;\n  };\n\n  Options.prototype.get = function (key) {\n    return this.options[key];\n  };\n\n  Options.prototype.set = function (key, val) {\n    this.options[key] = val;\n  };\n\n  return Options;\n});\n\nS2.define('select2/core',[\n  'jquery',\n  './options',\n  './utils',\n  './keys'\n], function ($, Options, Utils, KEYS) {\n  var Select2 = function ($element, options) {\n    if (Utils.GetData($element[0], 'select2') != null) {\n      Utils.GetData($element[0], 'select2').destroy();\n    }\n\n    this.$element = $element;\n\n    this.id = this._generateId($element);\n\n    options = options || {};\n\n    this.options = new Options(options, $element);\n\n    Select2.__super__.constructor.call(this);\n\n    // Set up the tabindex\n\n    var tabindex = $element.attr('tabindex') || 0;\n    Utils.StoreData($element[0], 'old-tabindex', tabindex);\n    $element.attr('tabindex', '-1');\n\n    // Set up containers and adapters\n\n    var DataAdapter = this.options.get('dataAdapter');\n    this.dataAdapter = new DataAdapter($element, this.options);\n\n    var $container = this.render();\n\n    this._placeContainer($container);\n\n    var SelectionAdapter = this.options.get('selectionAdapter');\n    this.selection = new SelectionAdapter($element, this.options);\n    this.$selection = this.selection.render();\n\n    this.selection.position(this.$selection, $container);\n\n    var DropdownAdapter = this.options.get('dropdownAdapter');\n    this.dropdown = new DropdownAdapter($element, this.options);\n    this.$dropdown = this.dropdown.render();\n\n    this.dropdown.position(this.$dropdown, $container);\n\n    var ResultsAdapter = this.options.get('resultsAdapter');\n    this.results = new ResultsAdapter($element, this.options, this.dataAdapter);\n    this.$results = this.results.render();\n\n    this.results.position(this.$results, this.$dropdown);\n\n    // Bind events\n\n    var self = this;\n\n    // Bind the container to all of the adapters\n    this._bindAdapters();\n\n    // Register any DOM event handlers\n    this._registerDomEvents();\n\n    // Register any internal event handlers\n    this._registerDataEvents();\n    this._registerSelectionEvents();\n    this._registerDropdownEvents();\n    this._registerResultsEvents();\n    this._registerEvents();\n\n    // Set the initial state\n    this.dataAdapter.current(function (initialData) {\n      self.trigger('selection:update', {\n        data: initialData\n      });\n    });\n\n    // Hide the original select\n    $element.addClass('select2-hidden-accessible');\n    $element.attr('aria-hidden', 'true');\n\n    // Synchronize any monitored attributes\n    this._syncAttributes();\n\n    Utils.StoreData($element[0], 'select2', this);\n\n    // Ensure backwards compatibility with $element.data('select2').\n    $element.data('select2', this);\n  };\n\n  Utils.Extend(Select2, Utils.Observable);\n\n  Select2.prototype._generateId = function ($element) {\n    var id = '';\n\n    if ($element.attr('id') != null) {\n      id = $element.attr('id');\n    } else if ($element.attr('name') != null) {\n      id = $element.attr('name') + '-' + Utils.generateChars(2);\n    } else {\n      id = Utils.generateChars(4);\n    }\n\n    id = id.replace(/(:|\\.|\\[|\\]|,)/g, '');\n    id = 'select2-' + id;\n\n    return id;\n  };\n\n  Select2.prototype._placeContainer = function ($container) {\n    $container.insertAfter(this.$element);\n\n    var width = this._resolveWidth(this.$element, this.options.get('width'));\n\n    if (width != null) {\n      $container.css('width', width);\n    }\n  };\n\n  Select2.prototype._resolveWidth = function ($element, method) {\n    var WIDTH = /^width:(([-+]?([0-9]*\\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/i;\n\n    if (method == 'resolve') {\n      var styleWidth = this._resolveWidth($element, 'style');\n\n      if (styleWidth != null) {\n        return styleWidth;\n      }\n\n      return this._resolveWidth($element, 'element');\n    }\n\n    if (method == 'element') {\n      var elementWidth = $element.outerWidth(false);\n\n      if (elementWidth <= 0) {\n        return 'auto';\n      }\n\n      return elementWidth + 'px';\n    }\n\n    if (method == 'style') {\n      var style = $element.attr('style');\n\n      if (typeof(style) !== 'string') {\n        return null;\n      }\n\n      var attrs = style.split(';');\n\n      for (var i = 0, l = attrs.length; i < l; i = i + 1) {\n        var attr = attrs[i].replace(/\\s/g, '');\n        var matches = attr.match(WIDTH);\n\n        if (matches !== null && matches.length >= 1) {\n          return matches[1];\n        }\n      }\n\n      return null;\n    }\n\n    if (method == 'computedstyle') {\n      var computedStyle = window.getComputedStyle($element[0]);\n\n      return computedStyle.width;\n    }\n\n    return method;\n  };\n\n  Select2.prototype._bindAdapters = function () {\n    this.dataAdapter.bind(this, this.$container);\n    this.selection.bind(this, this.$container);\n\n    this.dropdown.bind(this, this.$container);\n    this.results.bind(this, this.$container);\n  };\n\n  Select2.prototype._registerDomEvents = function () {\n    var self = this;\n\n    this.$element.on('change.select2', function () {\n      self.dataAdapter.current(function (data) {\n        self.trigger('selection:update', {\n          data: data\n        });\n      });\n    });\n\n    this.$element.on('focus.select2', function (evt) {\n      self.trigger('focus', evt);\n    });\n\n    this._syncA = Utils.bind(this._syncAttributes, this);\n    this._syncS = Utils.bind(this._syncSubtree, this);\n\n    if (this.$element[0].attachEvent) {\n      this.$element[0].attachEvent('onpropertychange', this._syncA);\n    }\n\n    var observer = window.MutationObserver ||\n      window.WebKitMutationObserver ||\n      window.MozMutationObserver\n    ;\n\n    if (observer != null) {\n      this._observer = new observer(function (mutations) {\n        self._syncA();\n        self._syncS(null, mutations);\n      });\n      this._observer.observe(this.$element[0], {\n        attributes: true,\n        childList: true,\n        subtree: false\n      });\n    } else if (this.$element[0].addEventListener) {\n      this.$element[0].addEventListener(\n        'DOMAttrModified',\n        self._syncA,\n        false\n      );\n      this.$element[0].addEventListener(\n        'DOMNodeInserted',\n        self._syncS,\n        false\n      );\n      this.$element[0].addEventListener(\n        'DOMNodeRemoved',\n        self._syncS,\n        false\n      );\n    }\n  };\n\n  Select2.prototype._registerDataEvents = function () {\n    var self = this;\n\n    this.dataAdapter.on('*', function (name, params) {\n      self.trigger(name, params);\n    });\n  };\n\n  Select2.prototype._registerSelectionEvents = function () {\n    var self = this;\n    var nonRelayEvents = ['toggle', 'focus'];\n\n    this.selection.on('toggle', function () {\n      self.toggleDropdown();\n    });\n\n    this.selection.on('focus', function (params) {\n      self.focus(params);\n    });\n\n    this.selection.on('*', function (name, params) {\n      if ($.inArray(name, nonRelayEvents) !== -1) {\n        return;\n      }\n\n      self.trigger(name, params);\n    });\n  };\n\n  Select2.prototype._registerDropdownEvents = function () {\n    var self = this;\n\n    this.dropdown.on('*', function (name, params) {\n      self.trigger(name, params);\n    });\n  };\n\n  Select2.prototype._registerResultsEvents = function () {\n    var self = this;\n\n    this.results.on('*', function (name, params) {\n      self.trigger(name, params);\n    });\n  };\n\n  Select2.prototype._registerEvents = function () {\n    var self = this;\n\n    this.on('open', function () {\n      self.$container.addClass('select2-container--open');\n    });\n\n    this.on('close', function () {\n      self.$container.removeClass('select2-container--open');\n    });\n\n    this.on('enable', function () {\n      self.$container.removeClass('select2-container--disabled');\n    });\n\n    this.on('disable', function () {\n      self.$container.addClass('select2-container--disabled');\n    });\n\n    this.on('blur', function () {\n      self.$container.removeClass('select2-container--focus');\n    });\n\n    this.on('query', function (params) {\n      if (!self.isOpen()) {\n        self.trigger('open', {});\n      }\n\n      this.dataAdapter.query(params, function (data) {\n        self.trigger('results:all', {\n          data: data,\n          query: params\n        });\n      });\n    });\n\n    this.on('query:append', function (params) {\n      this.dataAdapter.query(params, function (data) {\n        self.trigger('results:append', {\n          data: data,\n          query: params\n        });\n      });\n    });\n\n    this.on('keypress', function (evt) {\n      var key = evt.which;\n\n      if (self.isOpen()) {\n        if (key === KEYS.ESC || key === KEYS.TAB ||\n            (key === KEYS.UP && evt.altKey)) {\n          self.close(evt);\n\n          evt.preventDefault();\n        } else if (key === KEYS.ENTER) {\n          self.trigger('results:select', {});\n\n          evt.preventDefault();\n        } else if ((key === KEYS.SPACE && evt.ctrlKey)) {\n          self.trigger('results:toggle', {});\n\n          evt.preventDefault();\n        } else if (key === KEYS.UP) {\n          self.trigger('results:previous', {});\n\n          evt.preventDefault();\n        } else if (key === KEYS.DOWN) {\n          self.trigger('results:next', {});\n\n          evt.preventDefault();\n        }\n      } else {\n        if (key === KEYS.ENTER || key === KEYS.SPACE ||\n            (key === KEYS.DOWN && evt.altKey)) {\n          self.open();\n\n          evt.preventDefault();\n        }\n      }\n    });\n  };\n\n  Select2.prototype._syncAttributes = function () {\n    this.options.set('disabled', this.$element.prop('disabled'));\n\n    if (this.isDisabled()) {\n      if (this.isOpen()) {\n        this.close();\n      }\n\n      this.trigger('disable', {});\n    } else {\n      this.trigger('enable', {});\n    }\n  };\n\n  Select2.prototype._isChangeMutation = function (evt, mutations) {\n    var changed = false;\n    var self = this;\n\n    // Ignore any mutation events raised for elements that aren't options or\n    // optgroups. This handles the case when the select element is destroyed\n    if (\n      evt && evt.target && (\n        evt.target.nodeName !== 'OPTION' && evt.target.nodeName !== 'OPTGROUP'\n      )\n    ) {\n      return;\n    }\n\n    if (!mutations) {\n      // If mutation events aren't supported, then we can only assume that the\n      // change affected the selections\n      changed = true;\n    } else if (mutations.addedNodes && mutations.addedNodes.length > 0) {\n      for (var n = 0; n < mutations.addedNodes.length; n++) {\n        var node = mutations.addedNodes[n];\n\n        if (node.selected) {\n          changed = true;\n        }\n      }\n    } else if (mutations.removedNodes && mutations.removedNodes.length > 0) {\n      changed = true;\n    } else if ($.isArray(mutations)) {\n      $.each(mutations, function(evt, mutation) {\n        if (self._isChangeMutation(evt, mutation)) {\n          // We've found a change mutation.\n          // Let's escape from the loop and continue\n          changed = true;\n          return false;\n        }\n      });\n    }\n    return changed;\n  };\n\n  Select2.prototype._syncSubtree = function (evt, mutations) {\n    var changed = this._isChangeMutation(evt, mutations);\n    var self = this;\n\n    // Only re-pull the data if we think there is a change\n    if (changed) {\n      this.dataAdapter.current(function (currentData) {\n        self.trigger('selection:update', {\n          data: currentData\n        });\n      });\n    }\n  };\n\n  /**\n   * Override the trigger method to automatically trigger pre-events when\n   * there are events that can be prevented.\n   */\n  Select2.prototype.trigger = function (name, args) {\n    var actualTrigger = Select2.__super__.trigger;\n    var preTriggerMap = {\n      'open': 'opening',\n      'close': 'closing',\n      'select': 'selecting',\n      'unselect': 'unselecting',\n      'clear': 'clearing'\n    };\n\n    if (args === undefined) {\n      args = {};\n    }\n\n    if (name in preTriggerMap) {\n      var preTriggerName = preTriggerMap[name];\n      var preTriggerArgs = {\n        prevented: false,\n        name: name,\n        args: args\n      };\n\n      actualTrigger.call(this, preTriggerName, preTriggerArgs);\n\n      if (preTriggerArgs.prevented) {\n        args.prevented = true;\n\n        return;\n      }\n    }\n\n    actualTrigger.call(this, name, args);\n  };\n\n  Select2.prototype.toggleDropdown = function () {\n    if (this.isDisabled()) {\n      return;\n    }\n\n    if (this.isOpen()) {\n      this.close();\n    } else {\n      this.open();\n    }\n  };\n\n  Select2.prototype.open = function () {\n    if (this.isOpen()) {\n      return;\n    }\n\n    if (this.isDisabled()) {\n      return;\n    }\n\n    this.trigger('query', {});\n  };\n\n  Select2.prototype.close = function (evt) {\n    if (!this.isOpen()) {\n      return;\n    }\n\n    this.trigger('close', { originalEvent : evt });\n  };\n\n  /**\n   * Helper method to abstract the \"enabled\" (not \"disabled\") state of this\n   * object.\n   *\n   * @return {true} if the instance is not disabled.\n   * @return {false} if the instance is disabled.\n   */\n  Select2.prototype.isEnabled = function () {\n    return !this.isDisabled();\n  };\n\n  /**\n   * Helper method to abstract the \"disabled\" state of this object.\n   *\n   * @return {true} if the disabled option is true.\n   * @return {false} if the disabled option is false.\n   */\n  Select2.prototype.isDisabled = function () {\n    return this.options.get('disabled');\n  };\n\n  Select2.prototype.isOpen = function () {\n    return this.$container.hasClass('select2-container--open');\n  };\n\n  Select2.prototype.hasFocus = function () {\n    return this.$container.hasClass('select2-container--focus');\n  };\n\n  Select2.prototype.focus = function (data) {\n    // No need to re-trigger focus events if we are already focused\n    if (this.hasFocus()) {\n      return;\n    }\n\n    this.$container.addClass('select2-container--focus');\n    this.trigger('focus', {});\n  };\n\n  Select2.prototype.enable = function (args) {\n    if (this.options.get('debug') && window.console && console.warn) {\n      console.warn(\n        'Select2: The `select2(\"enable\")` method has been deprecated and will' +\n        ' be removed in later Select2 versions. Use $element.prop(\"disabled\")' +\n        ' instead.'\n      );\n    }\n\n    if (args == null || args.length === 0) {\n      args = [true];\n    }\n\n    var disabled = !args[0];\n\n    this.$element.prop('disabled', disabled);\n  };\n\n  Select2.prototype.data = function () {\n    if (this.options.get('debug') &&\n        arguments.length > 0 && window.console && console.warn) {\n      console.warn(\n        'Select2: Data can no longer be set using `select2(\"data\")`. You ' +\n        'should consider setting the value instead using `$element.val()`.'\n      );\n    }\n\n    var data = [];\n\n    this.dataAdapter.current(function (currentData) {\n      data = currentData;\n    });\n\n    return data;\n  };\n\n  Select2.prototype.val = function (args) {\n    if (this.options.get('debug') && window.console && console.warn) {\n      console.warn(\n        'Select2: The `select2(\"val\")` method has been deprecated and will be' +\n        ' removed in later Select2 versions. Use $element.val() instead.'\n      );\n    }\n\n    if (args == null || args.length === 0) {\n      return this.$element.val();\n    }\n\n    var newVal = args[0];\n\n    if ($.isArray(newVal)) {\n      newVal = $.map(newVal, function (obj) {\n        return obj.toString();\n      });\n    }\n\n    this.$element.val(newVal).trigger('input').trigger('change');\n  };\n\n  Select2.prototype.destroy = function () {\n    this.$container.remove();\n\n    if (this.$element[0].detachEvent) {\n      this.$element[0].detachEvent('onpropertychange', this._syncA);\n    }\n\n    if (this._observer != null) {\n      this._observer.disconnect();\n      this._observer = null;\n    } else if (this.$element[0].removeEventListener) {\n      this.$element[0]\n        .removeEventListener('DOMAttrModified', this._syncA, false);\n      this.$element[0]\n        .removeEventListener('DOMNodeInserted', this._syncS, false);\n      this.$element[0]\n        .removeEventListener('DOMNodeRemoved', this._syncS, false);\n    }\n\n    this._syncA = null;\n    this._syncS = null;\n\n    this.$element.off('.select2');\n    this.$element.attr('tabindex',\n    Utils.GetData(this.$element[0], 'old-tabindex'));\n\n    this.$element.removeClass('select2-hidden-accessible');\n    this.$element.attr('aria-hidden', 'false');\n    Utils.RemoveData(this.$element[0]);\n    this.$element.removeData('select2');\n\n    this.dataAdapter.destroy();\n    this.selection.destroy();\n    this.dropdown.destroy();\n    this.results.destroy();\n\n    this.dataAdapter = null;\n    this.selection = null;\n    this.dropdown = null;\n    this.results = null;\n  };\n\n  Select2.prototype.render = function () {\n    var $container = $(\n      '<span class=\"select2 select2-container\">' +\n        '<span class=\"selection\"></span>' +\n        '<span class=\"dropdown-wrapper\" aria-hidden=\"true\"></span>' +\n      '</span>'\n    );\n\n    $container.attr('dir', this.options.get('dir'));\n\n    this.$container = $container;\n\n    this.$container.addClass('select2-container--' + this.options.get('theme'));\n\n    Utils.StoreData($container[0], 'element', this.$element);\n\n    return $container;\n  };\n\n  return Select2;\n});\n\nS2.define('select2/compat/utils',[\n  'jquery'\n], function ($) {\n  function syncCssClasses ($dest, $src, adapter) {\n    var classes, replacements = [], adapted;\n\n    classes = $.trim($dest.attr('class'));\n\n    if (classes) {\n      classes = '' + classes; // for IE which returns object\n\n      $(classes.split(/\\s+/)).each(function () {\n        // Save all Select2 classes\n        if (this.indexOf('select2-') === 0) {\n          replacements.push(this);\n        }\n      });\n    }\n\n    classes = $.trim($src.attr('class'));\n\n    if (classes) {\n      classes = '' + classes; // for IE which returns object\n\n      $(classes.split(/\\s+/)).each(function () {\n        // Only adapt non-Select2 classes\n        if (this.indexOf('select2-') !== 0) {\n          adapted = adapter(this);\n\n          if (adapted != null) {\n            replacements.push(adapted);\n          }\n        }\n      });\n    }\n\n    $dest.attr('class', replacements.join(' '));\n  }\n\n  return {\n    syncCssClasses: syncCssClasses\n  };\n});\n\nS2.define('select2/compat/containerCss',[\n  'jquery',\n  './utils'\n], function ($, CompatUtils) {\n  // No-op CSS adapter that discards all classes by default\n  function _containerAdapter (clazz) {\n    return null;\n  }\n\n  function ContainerCSS () { }\n\n  ContainerCSS.prototype.render = function (decorated) {\n    var $container = decorated.call(this);\n\n    var containerCssClass = this.options.get('containerCssClass') || '';\n\n    if ($.isFunction(containerCssClass)) {\n      containerCssClass = containerCssClass(this.$element);\n    }\n\n    var containerCssAdapter = this.options.get('adaptContainerCssClass');\n    containerCssAdapter = containerCssAdapter || _containerAdapter;\n\n    if (containerCssClass.indexOf(':all:') !== -1) {\n      containerCssClass = containerCssClass.replace(':all:', '');\n\n      var _cssAdapter = containerCssAdapter;\n\n      containerCssAdapter = function (clazz) {\n        var adapted = _cssAdapter(clazz);\n\n        if (adapted != null) {\n          // Append the old one along with the adapted one\n          return adapted + ' ' + clazz;\n        }\n\n        return clazz;\n      };\n    }\n\n    var containerCss = this.options.get('containerCss') || {};\n\n    if ($.isFunction(containerCss)) {\n      containerCss = containerCss(this.$element);\n    }\n\n    CompatUtils.syncCssClasses($container, this.$element, containerCssAdapter);\n\n    $container.css(containerCss);\n    $container.addClass(containerCssClass);\n\n    return $container;\n  };\n\n  return ContainerCSS;\n});\n\nS2.define('select2/compat/dropdownCss',[\n  'jquery',\n  './utils'\n], function ($, CompatUtils) {\n  // No-op CSS adapter that discards all classes by default\n  function _dropdownAdapter (clazz) {\n    return null;\n  }\n\n  function DropdownCSS () { }\n\n  DropdownCSS.prototype.render = function (decorated) {\n    var $dropdown = decorated.call(this);\n\n    var dropdownCssClass = this.options.get('dropdownCssClass') || '';\n\n    if ($.isFunction(dropdownCssClass)) {\n      dropdownCssClass = dropdownCssClass(this.$element);\n    }\n\n    var dropdownCssAdapter = this.options.get('adaptDropdownCssClass');\n    dropdownCssAdapter = dropdownCssAdapter || _dropdownAdapter;\n\n    if (dropdownCssClass.indexOf(':all:') !== -1) {\n      dropdownCssClass = dropdownCssClass.replace(':all:', '');\n\n      var _cssAdapter = dropdownCssAdapter;\n\n      dropdownCssAdapter = function (clazz) {\n        var adapted = _cssAdapter(clazz);\n\n        if (adapted != null) {\n          // Append the old one along with the adapted one\n          return adapted + ' ' + clazz;\n        }\n\n        return clazz;\n      };\n    }\n\n    var dropdownCss = this.options.get('dropdownCss') || {};\n\n    if ($.isFunction(dropdownCss)) {\n      dropdownCss = dropdownCss(this.$element);\n    }\n\n    CompatUtils.syncCssClasses($dropdown, this.$element, dropdownCssAdapter);\n\n    $dropdown.css(dropdownCss);\n    $dropdown.addClass(dropdownCssClass);\n\n    return $dropdown;\n  };\n\n  return DropdownCSS;\n});\n\nS2.define('select2/compat/initSelection',[\n  'jquery'\n], function ($) {\n  function InitSelection (decorated, $element, options) {\n    if (options.get('debug') && window.console && console.warn) {\n      console.warn(\n        'Select2: The `initSelection` option has been deprecated in favor' +\n        ' of a custom data adapter that overrides the `current` method. ' +\n        'This method is now called multiple times instead of a single ' +\n        'time when the instance is initialized. Support will be removed ' +\n        'for the `initSelection` option in future versions of Select2'\n      );\n    }\n\n    this.initSelection = options.get('initSelection');\n    this._isInitialized = false;\n\n    decorated.call(this, $element, options);\n  }\n\n  InitSelection.prototype.current = function (decorated, callback) {\n    var self = this;\n\n    if (this._isInitialized) {\n      decorated.call(this, callback);\n\n      return;\n    }\n\n    this.initSelection.call(null, this.$element, function (data) {\n      self._isInitialized = true;\n\n      if (!$.isArray(data)) {\n        data = [data];\n      }\n\n      callback(data);\n    });\n  };\n\n  return InitSelection;\n});\n\nS2.define('select2/compat/inputData',[\n  'jquery',\n  '../utils'\n], function ($, Utils) {\n  function InputData (decorated, $element, options) {\n    this._currentData = [];\n    this._valueSeparator = options.get('valueSeparator') || ',';\n\n    if ($element.prop('type') === 'hidden') {\n      if (options.get('debug') && console && console.warn) {\n        console.warn(\n          'Select2: Using a hidden input with Select2 is no longer ' +\n          'supported and may stop working in the future. It is recommended ' +\n          'to use a `<select>` element instead.'\n        );\n      }\n    }\n\n    decorated.call(this, $element, options);\n  }\n\n  InputData.prototype.current = function (_, callback) {\n    function getSelected (data, selectedIds) {\n      var selected = [];\n\n      if (data.selected || $.inArray(data.id, selectedIds) !== -1) {\n        data.selected = true;\n        selected.push(data);\n      } else {\n        data.selected = false;\n      }\n\n      if (data.children) {\n        selected.push.apply(selected, getSelected(data.children, selectedIds));\n      }\n\n      return selected;\n    }\n\n    var selected = [];\n\n    for (var d = 0; d < this._currentData.length; d++) {\n      var data = this._currentData[d];\n\n      selected.push.apply(\n        selected,\n        getSelected(\n          data,\n          this.$element.val().split(\n            this._valueSeparator\n          )\n        )\n      );\n    }\n\n    callback(selected);\n  };\n\n  InputData.prototype.select = function (_, data) {\n    if (!this.options.get('multiple')) {\n      this.current(function (allData) {\n        $.map(allData, function (data) {\n          data.selected = false;\n        });\n      });\n\n      this.$element.val(data.id);\n      this.$element.trigger('input').trigger('change');\n    } else {\n      var value = this.$element.val();\n      value += this._valueSeparator + data.id;\n\n      this.$element.val(value);\n      this.$element.trigger('input').trigger('change');\n    }\n  };\n\n  InputData.prototype.unselect = function (_, data) {\n    var self = this;\n\n    data.selected = false;\n\n    this.current(function (allData) {\n      var values = [];\n\n      for (var d = 0; d < allData.length; d++) {\n        var item = allData[d];\n\n        if (data.id == item.id) {\n          continue;\n        }\n\n        values.push(item.id);\n      }\n\n      self.$element.val(values.join(self._valueSeparator));\n      self.$element.trigger('input').trigger('change');\n    });\n  };\n\n  InputData.prototype.query = function (_, params, callback) {\n    var results = [];\n\n    for (var d = 0; d < this._currentData.length; d++) {\n      var data = this._currentData[d];\n\n      var matches = this.matches(params, data);\n\n      if (matches !== null) {\n        results.push(matches);\n      }\n    }\n\n    callback({\n      results: results\n    });\n  };\n\n  InputData.prototype.addOptions = function (_, $options) {\n    var options = $.map($options, function ($option) {\n      return Utils.GetData($option[0], 'data');\n    });\n\n    this._currentData.push.apply(this._currentData, options);\n  };\n\n  return InputData;\n});\n\nS2.define('select2/compat/matcher',[\n  'jquery'\n], function ($) {\n  function oldMatcher (matcher) {\n    function wrappedMatcher (params, data) {\n      var match = $.extend(true, {}, data);\n\n      if (params.term == null || $.trim(params.term) === '') {\n        return match;\n      }\n\n      if (data.children) {\n        for (var c = data.children.length - 1; c >= 0; c--) {\n          var child = data.children[c];\n\n          // Check if the child object matches\n          // The old matcher returned a boolean true or false\n          var doesMatch = matcher(params.term, child.text, child);\n\n          // If the child didn't match, pop it off\n          if (!doesMatch) {\n            match.children.splice(c, 1);\n          }\n        }\n\n        if (match.children.length > 0) {\n          return match;\n        }\n      }\n\n      if (matcher(params.term, data.text, data)) {\n        return match;\n      }\n\n      return null;\n    }\n\n    return wrappedMatcher;\n  }\n\n  return oldMatcher;\n});\n\nS2.define('select2/compat/query',[\n\n], function () {\n  function Query (decorated, $element, options) {\n    if (options.get('debug') && window.console && console.warn) {\n      console.warn(\n        'Select2: The `query` option has been deprecated in favor of a ' +\n        'custom data adapter that overrides the `query` method. Support ' +\n        'will be removed for the `query` option in future versions of ' +\n        'Select2.'\n      );\n    }\n\n    decorated.call(this, $element, options);\n  }\n\n  Query.prototype.query = function (_, params, callback) {\n    params.callback = callback;\n\n    var query = this.options.get('query');\n\n    query.call(null, params);\n  };\n\n  return Query;\n});\n\nS2.define('select2/dropdown/attachContainer',[\n\n], function () {\n  function AttachContainer (decorated, $element, options) {\n    decorated.call(this, $element, options);\n  }\n\n  AttachContainer.prototype.position =\n    function (decorated, $dropdown, $container) {\n    var $dropdownContainer = $container.find('.dropdown-wrapper');\n    $dropdownContainer.append($dropdown);\n\n    $dropdown.addClass('select2-dropdown--below');\n    $container.addClass('select2-container--below');\n  };\n\n  return AttachContainer;\n});\n\nS2.define('select2/dropdown/stopPropagation',[\n\n], function () {\n  function StopPropagation () { }\n\n  StopPropagation.prototype.bind = function (decorated, container, $container) {\n    decorated.call(this, container, $container);\n\n    var stoppedEvents = [\n    'blur',\n    'change',\n    'click',\n    'dblclick',\n    'focus',\n    'focusin',\n    'focusout',\n    'input',\n    'keydown',\n    'keyup',\n    'keypress',\n    'mousedown',\n    'mouseenter',\n    'mouseleave',\n    'mousemove',\n    'mouseover',\n    'mouseup',\n    'search',\n    'touchend',\n    'touchstart'\n    ];\n\n    this.$dropdown.on(stoppedEvents.join(' '), function (evt) {\n      evt.stopPropagation();\n    });\n  };\n\n  return StopPropagation;\n});\n\nS2.define('select2/selection/stopPropagation',[\n\n], function () {\n  function StopPropagation () { }\n\n  StopPropagation.prototype.bind = function (decorated, container, $container) {\n    decorated.call(this, container, $container);\n\n    var stoppedEvents = [\n      'blur',\n      'change',\n      'click',\n      'dblclick',\n      'focus',\n      'focusin',\n      'focusout',\n      'input',\n      'keydown',\n      'keyup',\n      'keypress',\n      'mousedown',\n      'mouseenter',\n      'mouseleave',\n      'mousemove',\n      'mouseover',\n      'mouseup',\n      'search',\n      'touchend',\n      'touchstart'\n    ];\n\n    this.$selection.on(stoppedEvents.join(' '), function (evt) {\n      evt.stopPropagation();\n    });\n  };\n\n  return StopPropagation;\n});\n\n/*!\n * jQuery Mousewheel 3.1.13\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n */\n\n(function (factory) {\n    if ( typeof S2.define === 'function' && S2.define.amd ) {\n        // AMD. Register as an anonymous module.\n        S2.define('jquery-mousewheel',['jquery'], factory);\n    } else if (typeof exports === 'object') {\n        // Node/CommonJS style for Browserify\n        module.exports = factory;\n    } else {\n        // Browser globals\n        factory(jQuery);\n    }\n}(function ($) {\n\n    var toFix  = ['wheel', 'mousewheel', 'DOMMouseScroll', 'MozMousePixelScroll'],\n        toBind = ( 'onwheel' in document || document.documentMode >= 9 ) ?\n                    ['wheel'] : ['mousewheel', 'DomMouseScroll', 'MozMousePixelScroll'],\n        slice  = Array.prototype.slice,\n        nullLowestDeltaTimeout, lowestDelta;\n\n    if ( $.event.fixHooks ) {\n        for ( var i = toFix.length; i; ) {\n            $.event.fixHooks[ toFix[--i] ] = $.event.mouseHooks;\n        }\n    }\n\n    var special = $.event.special.mousewheel = {\n        version: '3.1.12',\n\n        setup: function() {\n            if ( this.addEventListener ) {\n                for ( var i = toBind.length; i; ) {\n                    this.addEventListener( toBind[--i], handler, false );\n                }\n            } else {\n                this.onmousewheel = handler;\n            }\n            // Store the line height and page height for this particular element\n            $.data(this, 'mousewheel-line-height', special.getLineHeight(this));\n            $.data(this, 'mousewheel-page-height', special.getPageHeight(this));\n        },\n\n        teardown: function() {\n            if ( this.removeEventListener ) {\n                for ( var i = toBind.length; i; ) {\n                    this.removeEventListener( toBind[--i], handler, false );\n                }\n            } else {\n                this.onmousewheel = null;\n            }\n            // Clean up the data we added to the element\n            $.removeData(this, 'mousewheel-line-height');\n            $.removeData(this, 'mousewheel-page-height');\n        },\n\n        getLineHeight: function(elem) {\n            var $elem = $(elem),\n                $parent = $elem['offsetParent' in $.fn ? 'offsetParent' : 'parent']();\n            if (!$parent.length) {\n                $parent = $('body');\n            }\n            return parseInt($parent.css('fontSize'), 10) || parseInt($elem.css('fontSize'), 10) || 16;\n        },\n\n        getPageHeight: function(elem) {\n            return $(elem).height();\n        },\n\n        settings: {\n            adjustOldDeltas: true, // see shouldAdjustOldDeltas() below\n            normalizeOffset: true  // calls getBoundingClientRect for each event\n        }\n    };\n\n    $.fn.extend({\n        mousewheel: function(fn) {\n            return fn ? this.bind('mousewheel', fn) : this.trigger('mousewheel');\n        },\n\n        unmousewheel: function(fn) {\n            return this.unbind('mousewheel', fn);\n        }\n    });\n\n\n    function handler(event) {\n        var orgEvent   = event || window.event,\n            args       = slice.call(arguments, 1),\n            delta      = 0,\n            deltaX     = 0,\n            deltaY     = 0,\n            absDelta   = 0,\n            offsetX    = 0,\n            offsetY    = 0;\n        event = $.event.fix(orgEvent);\n        event.type = 'mousewheel';\n\n        // Old school scrollwheel delta\n        if ( 'detail'      in orgEvent ) { deltaY = orgEvent.detail * -1;      }\n        if ( 'wheelDelta'  in orgEvent ) { deltaY = orgEvent.wheelDelta;       }\n        if ( 'wheelDeltaY' in orgEvent ) { deltaY = orgEvent.wheelDeltaY;      }\n        if ( 'wheelDeltaX' in orgEvent ) { deltaX = orgEvent.wheelDeltaX * -1; }\n\n        // Firefox < 17 horizontal scrolling related to DOMMouseScroll event\n        if ( 'axis' in orgEvent && orgEvent.axis === orgEvent.HORIZONTAL_AXIS ) {\n            deltaX = deltaY * -1;\n            deltaY = 0;\n        }\n\n        // Set delta to be deltaY or deltaX if deltaY is 0 for backwards compatabilitiy\n        delta = deltaY === 0 ? deltaX : deltaY;\n\n        // New school wheel delta (wheel event)\n        if ( 'deltaY' in orgEvent ) {\n            deltaY = orgEvent.deltaY * -1;\n            delta  = deltaY;\n        }\n        if ( 'deltaX' in orgEvent ) {\n            deltaX = orgEvent.deltaX;\n            if ( deltaY === 0 ) { delta  = deltaX * -1; }\n        }\n\n        // No change actually happened, no reason to go any further\n        if ( deltaY === 0 && deltaX === 0 ) { return; }\n\n        // Need to convert lines and pages to pixels if we aren't already in pixels\n        // There are three delta modes:\n        //   * deltaMode 0 is by pixels, nothing to do\n        //   * deltaMode 1 is by lines\n        //   * deltaMode 2 is by pages\n        if ( orgEvent.deltaMode === 1 ) {\n            var lineHeight = $.data(this, 'mousewheel-line-height');\n            delta  *= lineHeight;\n            deltaY *= lineHeight;\n            deltaX *= lineHeight;\n        } else if ( orgEvent.deltaMode === 2 ) {\n            var pageHeight = $.data(this, 'mousewheel-page-height');\n            delta  *= pageHeight;\n            deltaY *= pageHeight;\n            deltaX *= pageHeight;\n        }\n\n        // Store lowest absolute delta to normalize the delta values\n        absDelta = Math.max( Math.abs(deltaY), Math.abs(deltaX) );\n\n        if ( !lowestDelta || absDelta < lowestDelta ) {\n            lowestDelta = absDelta;\n\n            // Adjust older deltas if necessary\n            if ( shouldAdjustOldDeltas(orgEvent, absDelta) ) {\n                lowestDelta /= 40;\n            }\n        }\n\n        // Adjust older deltas if necessary\n        if ( shouldAdjustOldDeltas(orgEvent, absDelta) ) {\n            // Divide all the things by 40!\n            delta  /= 40;\n            deltaX /= 40;\n            deltaY /= 40;\n        }\n\n        // Get a whole, normalized value for the deltas\n        delta  = Math[ delta  >= 1 ? 'floor' : 'ceil' ](delta  / lowestDelta);\n        deltaX = Math[ deltaX >= 1 ? 'floor' : 'ceil' ](deltaX / lowestDelta);\n        deltaY = Math[ deltaY >= 1 ? 'floor' : 'ceil' ](deltaY / lowestDelta);\n\n        // Normalise offsetX and offsetY properties\n        if ( special.settings.normalizeOffset && this.getBoundingClientRect ) {\n            var boundingRect = this.getBoundingClientRect();\n            offsetX = event.clientX - boundingRect.left;\n            offsetY = event.clientY - boundingRect.top;\n        }\n\n        // Add information to the event object\n        event.deltaX = deltaX;\n        event.deltaY = deltaY;\n        event.deltaFactor = lowestDelta;\n        event.offsetX = offsetX;\n        event.offsetY = offsetY;\n        // Go ahead and set deltaMode to 0 since we converted to pixels\n        // Although this is a little odd since we overwrite the deltaX/Y\n        // properties with normalized deltas.\n        event.deltaMode = 0;\n\n        // Add event and delta to the front of the arguments\n        args.unshift(event, delta, deltaX, deltaY);\n\n        // Clearout lowestDelta after sometime to better\n        // handle multiple device types that give different\n        // a different lowestDelta\n        // Ex: trackpad = 3 and mouse wheel = 120\n        if (nullLowestDeltaTimeout) { clearTimeout(nullLowestDeltaTimeout); }\n        nullLowestDeltaTimeout = setTimeout(nullLowestDelta, 200);\n\n        return ($.event.dispatch || $.event.handle).apply(this, args);\n    }\n\n    function nullLowestDelta() {\n        lowestDelta = null;\n    }\n\n    function shouldAdjustOldDeltas(orgEvent, absDelta) {\n        // If this is an older event and the delta is divisable by 120,\n        // then we are assuming that the browser is treating this as an\n        // older mouse wheel event and that we should divide the deltas\n        // by 40 to try and get a more usable deltaFactor.\n        // Side note, this actually impacts the reported scroll distance\n        // in older browsers and can cause scrolling to be slower than native.\n        // Turn this off by setting $.event.special.mousewheel.settings.adjustOldDeltas to false.\n        return special.settings.adjustOldDeltas && orgEvent.type === 'mousewheel' && absDelta % 120 === 0;\n    }\n\n}));\n\nS2.define('jquery.select2',[\n  'jquery',\n  'jquery-mousewheel',\n\n  './select2/core',\n  './select2/defaults',\n  './select2/utils'\n], function ($, _, Select2, Defaults, Utils) {\n  if ($.fn.select2 == null) {\n    // All methods that should return the element\n    var thisMethods = ['open', 'close', 'destroy'];\n\n    $.fn.select2 = function (options) {\n      options = options || {};\n\n      if (typeof options === 'object') {\n        this.each(function () {\n          var instanceOptions = $.extend(true, {}, options);\n\n          var instance = new Select2($(this), instanceOptions);\n        });\n\n        return this;\n      } else if (typeof options === 'string') {\n        var ret;\n        var args = Array.prototype.slice.call(arguments, 1);\n\n        this.each(function () {\n          var instance = Utils.GetData(this, 'select2');\n\n          if (instance == null && window.console && console.error) {\n            console.error(\n              'The select2(\\'' + options + '\\') method was called on an ' +\n              'element that is not using Select2.'\n            );\n          }\n\n          ret = instance[options].apply(instance, args);\n        });\n\n        // Check if we should be returning `this`\n        if ($.inArray(options, thisMethods) > -1) {\n          return this;\n        }\n\n        return ret;\n      } else {\n        throw new Error('Invalid arguments for Select2: ' + options);\n      }\n    };\n  }\n\n  if ($.fn.select2.defaults == null) {\n    $.fn.select2.defaults = Defaults;\n  }\n\n  return Select2;\n});\n\n  // Return the AMD loader configuration so it can be used outside of this file\n  return {\n    define: S2.define,\n    require: S2.require\n  };\n}());\n\n  // Autoload the jQuery bindings\n  // We know that all of the modules exist above this, so we're safe\n  var select2 = S2.require('jquery.select2');\n\n  // Hold the AMD module references on the jQuery function that was just loaded\n  // This allows Select2 to use the internal loader outside of this file, such\n  // as in the language files.\n  jQuery.fn.select2.amd = S2;\n\n  // Return the Select2 instance for anyone who is importing it.\n  return select2;\n}));\n","/*!\n * Select2 4.0.13\n * https://select2.github.io\n *\n * Released under the MIT license\n * https://github.com/select2/select2/blob/master/LICENSE.md\n */\n;(function (factory) {\n  if (typeof define === 'function' && define.amd) {\n    // AMD. Register as an anonymous module.\n    define(['jquery'], factory);\n  } else if (typeof module === 'object' && module.exports) {\n    // Node/CommonJS\n    module.exports = function (root, jQuery) {\n      if (jQuery === undefined) {\n        // require('jQuery') returns a factory that requires window to\n        // build a jQuery instance, we normalize how we use modules\n        // that require this pattern but the window provided is a noop\n        // if it's defined (how jquery works)\n        if (typeof window !== 'undefined') {\n          jQuery = require('jquery');\n        }\n        else {\n          jQuery = require('jquery')(root);\n        }\n      }\n      factory(jQuery);\n      return jQuery;\n    };\n  } else {\n    // Browser globals\n    factory(jQuery);\n  }\n} (function (jQuery) {\n  // This is needed so we can catch the AMD loader configuration and use it\n  // The inner file should be wrapped (by `banner.start.js`) in a function that\n  // returns the AMD loader references.\n  var S2 =(function () {\n  // Restore the Select2 AMD loader so it can be used\n  // Needed mostly in the language files, where the loader is not inserted\n  if (jQuery && jQuery.fn && jQuery.fn.select2 && jQuery.fn.select2.amd) {\n    var S2 = jQuery.fn.select2.amd;\n  }\nvar S2;(function () { if (!S2 || !S2.requirejs) {\nif (!S2) { S2 = {}; } else { require = S2; }\n/**\n * @license almond 0.3.3 Copyright jQuery Foundation and other contributors.\n * Released under MIT license, http://github.com/requirejs/almond/LICENSE\n */\n//Going sloppy to avoid 'use strict' string cost, but strict practices should\n//be followed.\n/*global setTimeout: false */\n\nvar requirejs, require, define;\n(function (undef) {\n    var main, req, makeMap, handlers,\n        defined = {},\n        waiting = {},\n        config = {},\n        defining = {},\n        hasOwn = Object.prototype.hasOwnProperty,\n        aps = [].slice,\n        jsSuffixRegExp = /\\.js$/;\n\n    function hasProp(obj, prop) {\n        return hasOwn.call(obj, prop);\n    }\n\n    /**\n     * Given a relative module name, like ./something, normalize it to\n     * a real name that can be mapped to a path.\n     * @param {String} name the relative name\n     * @param {String} baseName a real name that the name arg is relative\n     * to.\n     * @returns {String} normalized name\n     */\n    function normalize(name, baseName) {\n        var nameParts, nameSegment, mapValue, foundMap, lastIndex,\n            foundI, foundStarMap, starI, i, j, part, normalizedBaseParts,\n            baseParts = baseName && baseName.split(\"/\"),\n            map = config.map,\n            starMap = (map && map['*']) || {};\n\n        //Adjust any relative paths.\n        if (name) {\n            name = name.split('/');\n            lastIndex = name.length - 1;\n\n            // If wanting node ID compatibility, strip .js from end\n            // of IDs. Have to do this here, and not in nameToUrl\n            // because node allows either .js or non .js to map\n            // to same file.\n            if (config.nodeIdCompat && jsSuffixRegExp.test(name[lastIndex])) {\n                name[lastIndex] = name[lastIndex].replace(jsSuffixRegExp, '');\n            }\n\n            // Starts with a '.' so need the baseName\n            if (name[0].charAt(0) === '.' && baseParts) {\n                //Convert baseName to array, and lop off the last part,\n                //so that . matches that 'directory' and not name of the baseName's\n                //module. For instance, baseName of 'one/two/three', maps to\n                //'one/two/three.js', but we want the directory, 'one/two' for\n                //this normalization.\n                normalizedBaseParts = baseParts.slice(0, baseParts.length - 1);\n                name = normalizedBaseParts.concat(name);\n            }\n\n            //start trimDots\n            for (i = 0; i < name.length; i++) {\n                part = name[i];\n                if (part === '.') {\n                    name.splice(i, 1);\n                    i -= 1;\n                } else if (part === '..') {\n                    // If at the start, or previous value is still ..,\n                    // keep them so that when converted to a path it may\n                    // still work when converted to a path, even though\n                    // as an ID it is less than ideal. In larger point\n                    // releases, may be better to just kick out an error.\n                    if (i === 0 || (i === 1 && name[2] === '..') || name[i - 1] === '..') {\n                        continue;\n                    } else if (i > 0) {\n                        name.splice(i - 1, 2);\n                        i -= 2;\n                    }\n                }\n            }\n            //end trimDots\n\n            name = name.join('/');\n        }\n\n        //Apply map config if available.\n        if ((baseParts || starMap) && map) {\n            nameParts = name.split('/');\n\n            for (i = nameParts.length; i > 0; i -= 1) {\n                nameSegment = nameParts.slice(0, i).join(\"/\");\n\n                if (baseParts) {\n                    //Find the longest baseName segment match in the config.\n                    //So, do joins on the biggest to smallest lengths of baseParts.\n                    for (j = baseParts.length; j > 0; j -= 1) {\n                        mapValue = map[baseParts.slice(0, j).join('/')];\n\n                        //baseName segment has  config, find if it has one for\n                        //this name.\n                        if (mapValue) {\n                            mapValue = mapValue[nameSegment];\n                            if (mapValue) {\n                                //Match, update name to the new value.\n                                foundMap = mapValue;\n                                foundI = i;\n                                break;\n                            }\n                        }\n                    }\n                }\n\n                if (foundMap) {\n                    break;\n                }\n\n                //Check for a star map match, but just hold on to it,\n                //if there is a shorter segment match later in a matching\n                //config, then favor over this star map.\n                if (!foundStarMap && starMap && starMap[nameSegment]) {\n                    foundStarMap = starMap[nameSegment];\n                    starI = i;\n                }\n            }\n\n            if (!foundMap && foundStarMap) {\n                foundMap = foundStarMap;\n                foundI = starI;\n            }\n\n            if (foundMap) {\n                nameParts.splice(0, foundI, foundMap);\n                name = nameParts.join('/');\n            }\n        }\n\n        return name;\n    }\n\n    function makeRequire(relName, forceSync) {\n        return function () {\n            //A version of a require function that passes a moduleName\n            //value for items that may need to\n            //look up paths relative to the moduleName\n            var args = aps.call(arguments, 0);\n\n            //If first arg is not require('string'), and there is only\n            //one arg, it is the array form without a callback. Insert\n            //a null so that the following concat is correct.\n            if (typeof args[0] !== 'string' && args.length === 1) {\n                args.push(null);\n            }\n            return req.apply(undef, args.concat([relName, forceSync]));\n        };\n    }\n\n    function makeNormalize(relName) {\n        return function (name) {\n            return normalize(name, relName);\n        };\n    }\n\n    function makeLoad(depName) {\n        return function (value) {\n            defined[depName] = value;\n        };\n    }\n\n    function callDep(name) {\n        if (hasProp(waiting, name)) {\n            var args = waiting[name];\n            delete waiting[name];\n            defining[name] = true;\n            main.apply(undef, args);\n        }\n\n        if (!hasProp(defined, name) && !hasProp(defining, name)) {\n            throw new Error('No ' + name);\n        }\n        return defined[name];\n    }\n\n    //Turns a plugin!resource to [plugin, resource]\n    //with the plugin being undefined if the name\n    //did not have a plugin prefix.\n    function splitPrefix(name) {\n        var prefix,\n            index = name ? name.indexOf('!') : -1;\n        if (index > -1) {\n            prefix = name.substring(0, index);\n            name = name.substring(index + 1, name.length);\n        }\n        return [prefix, name];\n    }\n\n    //Creates a parts array for a relName where first part is plugin ID,\n    //second part is resource ID. Assumes relName has already been normalized.\n    function makeRelParts(relName) {\n        return relName ? splitPrefix(relName) : [];\n    }\n\n    /**\n     * Makes a name map, normalizing the name, and using a plugin\n     * for normalization if necessary. Grabs a ref to plugin\n     * too, as an optimization.\n     */\n    makeMap = function (name, relParts) {\n        var plugin,\n            parts = splitPrefix(name),\n            prefix = parts[0],\n            relResourceName = relParts[1];\n\n        name = parts[1];\n\n        if (prefix) {\n            prefix = normalize(prefix, relResourceName);\n            plugin = callDep(prefix);\n        }\n\n        //Normalize according\n        if (prefix) {\n            if (plugin && plugin.normalize) {\n                name = plugin.normalize(name, makeNormalize(relResourceName));\n            } else {\n                name = normalize(name, relResourceName);\n            }\n        } else {\n            name = normalize(name, relResourceName);\n            parts = splitPrefix(name);\n            prefix = parts[0];\n            name = parts[1];\n            if (prefix) {\n                plugin = callDep(prefix);\n            }\n        }\n\n        //Using ridiculous property names for space reasons\n        return {\n            f: prefix ? prefix + '!' + name : name, //fullName\n            n: name,\n            pr: prefix,\n            p: plugin\n        };\n    };\n\n    function makeConfig(name) {\n        return function () {\n            return (config && config.config && config.config[name]) || {};\n        };\n    }\n\n    handlers = {\n        require: function (name) {\n            return makeRequire(name);\n        },\n        exports: function (name) {\n            var e = defined[name];\n            if (typeof e !== 'undefined') {\n                return e;\n            } else {\n                return (defined[name] = {});\n            }\n        },\n        module: function (name) {\n            return {\n                id: name,\n                uri: '',\n                exports: defined[name],\n                config: makeConfig(name)\n            };\n        }\n    };\n\n    main = function (name, deps, callback, relName) {\n        var cjsModule, depName, ret, map, i, relParts,\n            args = [],\n            callbackType = typeof callback,\n            usingExports;\n\n        //Use name if no relName\n        relName = relName || name;\n        relParts = makeRelParts(relName);\n\n        //Call the callback to define the module, if necessary.\n        if (callbackType === 'undefined' || callbackType === 'function') {\n            //Pull out the defined dependencies and pass the ordered\n            //values to the callback.\n            //Default to [require, exports, module] if no deps\n            deps = !deps.length && callback.length ? ['require', 'exports', 'module'] : deps;\n            for (i = 0; i < deps.length; i += 1) {\n                map = makeMap(deps[i], relParts);\n                depName = map.f;\n\n                //Fast path CommonJS standard dependencies.\n                if (depName === \"require\") {\n                    args[i] = handlers.require(name);\n                } else if (depName === \"exports\") {\n                    //CommonJS module spec 1.1\n                    args[i] = handlers.exports(name);\n                    usingExports = true;\n                } else if (depName === \"module\") {\n                    //CommonJS module spec 1.1\n                    cjsModule = args[i] = handlers.module(name);\n                } else if (hasProp(defined, depName) ||\n                           hasProp(waiting, depName) ||\n                           hasProp(defining, depName)) {\n                    args[i] = callDep(depName);\n                } else if (map.p) {\n                    map.p.load(map.n, makeRequire(relName, true), makeLoad(depName), {});\n                    args[i] = defined[depName];\n                } else {\n                    throw new Error(name + ' missing ' + depName);\n                }\n            }\n\n            ret = callback ? callback.apply(defined[name], args) : undefined;\n\n            if (name) {\n                //If setting exports via \"module\" is in play,\n                //favor that over return value and exports. After that,\n                //favor a non-undefined return value over exports use.\n                if (cjsModule && cjsModule.exports !== undef &&\n                        cjsModule.exports !== defined[name]) {\n                    defined[name] = cjsModule.exports;\n                } else if (ret !== undef || !usingExports) {\n                    //Use the return value from the function.\n                    defined[name] = ret;\n                }\n            }\n        } else if (name) {\n            //May just be an object definition for the module. Only\n            //worry about defining if have a module name.\n            defined[name] = callback;\n        }\n    };\n\n    requirejs = require = req = function (deps, callback, relName, forceSync, alt) {\n        if (typeof deps === \"string\") {\n            if (handlers[deps]) {\n                //callback in this case is really relName\n                return handlers[deps](callback);\n            }\n            //Just return the module wanted. In this scenario, the\n            //deps arg is the module name, and second arg (if passed)\n            //is just the relName.\n            //Normalize module name, if it contains . or ..\n            return callDep(makeMap(deps, makeRelParts(callback)).f);\n        } else if (!deps.splice) {\n            //deps is a config object, not an array.\n            config = deps;\n            if (config.deps) {\n                req(config.deps, config.callback);\n            }\n            if (!callback) {\n                return;\n            }\n\n            if (callback.splice) {\n                //callback is an array, which means it is a dependency list.\n                //Adjust args if there are dependencies\n                deps = callback;\n                callback = relName;\n                relName = null;\n            } else {\n                deps = undef;\n            }\n        }\n\n        //Support require(['a'])\n        callback = callback || function () {};\n\n        //If relName is a function, it is an errback handler,\n        //so remove it.\n        if (typeof relName === 'function') {\n            relName = forceSync;\n            forceSync = alt;\n        }\n\n        //Simulate async callback;\n        if (forceSync) {\n            main(undef, deps, callback, relName);\n        } else {\n            //Using a non-zero value because of concern for what old browsers\n            //do, and latest browsers \"upgrade\" to 4 if lower value is used:\n            //http://www.whatwg.org/specs/web-apps/current-work/multipage/timers.html#dom-windowtimers-settimeout:\n            //If want a value immediately, use require('id') instead -- something\n            //that works in almond on the global level, but not guaranteed and\n            //unlikely to work in other AMD implementations.\n            setTimeout(function () {\n                main(undef, deps, callback, relName);\n            }, 4);\n        }\n\n        return req;\n    };\n\n    /**\n     * Just drops the config on the floor, but returns req in case\n     * the config return value is used.\n     */\n    req.config = function (cfg) {\n        return req(cfg);\n    };\n\n    /**\n     * Expose module registry for debugging and tooling\n     */\n    requirejs._defined = defined;\n\n    define = function (name, deps, callback) {\n        if (typeof name !== 'string') {\n            throw new Error('See almond README: incorrect module build, no module name');\n        }\n\n        //This module may not have dependencies\n        if (!deps.splice) {\n            //deps is not an array, so probably means\n            //an object literal or factory function for\n            //the value. Adjust args.\n            callback = deps;\n            deps = [];\n        }\n\n        if (!hasProp(defined, name) && !hasProp(waiting, name)) {\n            waiting[name] = [name, deps, callback];\n        }\n    };\n\n    define.amd = {\n        jQuery: true\n    };\n}());\n\nS2.requirejs = requirejs;S2.require = require;S2.define = define;\n}\n}());\nS2.define(\"almond\", function(){});\n\n/* global jQuery:false, $:false */\nS2.define('jquery',[],function () {\n  var _$ = jQuery || $;\n\n  if (_$ == null && console && console.error) {\n    console.error(\n      'Select2: An instance of jQuery or a jQuery-compatible library was not ' +\n      'found. Make sure that you are including jQuery before Select2 on your ' +\n      'web page.'\n    );\n  }\n\n  return _$;\n});\n\nS2.define('select2/utils',[\n  'jquery'\n], function ($) {\n  var Utils = {};\n\n  Utils.Extend = function (ChildClass, SuperClass) {\n    var __hasProp = {}.hasOwnProperty;\n\n    function BaseConstructor () {\n      this.constructor = ChildClass;\n    }\n\n    for (var key in SuperClass) {\n      if (__hasProp.call(SuperClass, key)) {\n        ChildClass[key] = SuperClass[key];\n      }\n    }\n\n    BaseConstructor.prototype = SuperClass.prototype;\n    ChildClass.prototype = new BaseConstructor();\n    ChildClass.__super__ = SuperClass.prototype;\n\n    return ChildClass;\n  };\n\n  function getMethods (theClass) {\n    var proto = theClass.prototype;\n\n    var methods = [];\n\n    for (var methodName in proto) {\n      var m = proto[methodName];\n\n      if (typeof m !== 'function') {\n        continue;\n      }\n\n      if (methodName === 'constructor') {\n        continue;\n      }\n\n      methods.push(methodName);\n    }\n\n    return methods;\n  }\n\n  Utils.Decorate = function (SuperClass, DecoratorClass) {\n    var decoratedMethods = getMethods(DecoratorClass);\n    var superMethods = getMethods(SuperClass);\n\n    function DecoratedClass () {\n      var unshift = Array.prototype.unshift;\n\n      var argCount = DecoratorClass.prototype.constructor.length;\n\n      var calledConstructor = SuperClass.prototype.constructor;\n\n      if (argCount > 0) {\n        unshift.call(arguments, SuperClass.prototype.constructor);\n\n        calledConstructor = DecoratorClass.prototype.constructor;\n      }\n\n      calledConstructor.apply(this, arguments);\n    }\n\n    DecoratorClass.displayName = SuperClass.displayName;\n\n    function ctr () {\n      this.constructor = DecoratedClass;\n    }\n\n    DecoratedClass.prototype = new ctr();\n\n    for (var m = 0; m < superMethods.length; m++) {\n      var superMethod = superMethods[m];\n\n      DecoratedClass.prototype[superMethod] =\n        SuperClass.prototype[superMethod];\n    }\n\n    var calledMethod = function (methodName) {\n      // Stub out the original method if it's not decorating an actual method\n      var originalMethod = function () {};\n\n      if (methodName in DecoratedClass.prototype) {\n        originalMethod = DecoratedClass.prototype[methodName];\n      }\n\n      var decoratedMethod = DecoratorClass.prototype[methodName];\n\n      return function () {\n        var unshift = Array.prototype.unshift;\n\n        unshift.call(arguments, originalMethod);\n\n        return decoratedMethod.apply(this, arguments);\n      };\n    };\n\n    for (var d = 0; d < decoratedMethods.length; d++) {\n      var decoratedMethod = decoratedMethods[d];\n\n      DecoratedClass.prototype[decoratedMethod] = calledMethod(decoratedMethod);\n    }\n\n    return DecoratedClass;\n  };\n\n  var Observable = function () {\n    this.listeners = {};\n  };\n\n  Observable.prototype.on = function (event, callback) {\n    this.listeners = this.listeners || {};\n\n    if (event in this.listeners) {\n      this.listeners[event].push(callback);\n    } else {\n      this.listeners[event] = [callback];\n    }\n  };\n\n  Observable.prototype.trigger = function (event) {\n    var slice = Array.prototype.slice;\n    var params = slice.call(arguments, 1);\n\n    this.listeners = this.listeners || {};\n\n    // Params should always come in as an array\n    if (params == null) {\n      params = [];\n    }\n\n    // If there are no arguments to the event, use a temporary object\n    if (params.length === 0) {\n      params.push({});\n    }\n\n    // Set the `_type` of the first object to the event\n    params[0]._type = event;\n\n    if (event in this.listeners) {\n      this.invoke(this.listeners[event], slice.call(arguments, 1));\n    }\n\n    if ('*' in this.listeners) {\n      this.invoke(this.listeners['*'], arguments);\n    }\n  };\n\n  Observable.prototype.invoke = function (listeners, params) {\n    for (var i = 0, len = listeners.length; i < len; i++) {\n      listeners[i].apply(this, params);\n    }\n  };\n\n  Utils.Observable = Observable;\n\n  Utils.generateChars = function (length) {\n    var chars = '';\n\n    for (var i = 0; i < length; i++) {\n      var randomChar = Math.floor(Math.random() * 36);\n      chars += randomChar.toString(36);\n    }\n\n    return chars;\n  };\n\n  Utils.bind = function (func, context) {\n    return function () {\n      func.apply(context, arguments);\n    };\n  };\n\n  Utils._convertData = function (data) {\n    for (var originalKey in data) {\n      var keys = originalKey.split('-');\n\n      var dataLevel = data;\n\n      if (keys.length === 1) {\n        continue;\n      }\n\n      for (var k = 0; k < keys.length; k++) {\n        var key = keys[k];\n\n        // Lowercase the first letter\n        // By default, dash-separated becomes camelCase\n        key = key.substring(0, 1).toLowerCase() + key.substring(1);\n\n        if (!(key in dataLevel)) {\n          dataLevel[key] = {};\n        }\n\n        if (k == keys.length - 1) {\n          dataLevel[key] = data[originalKey];\n        }\n\n        dataLevel = dataLevel[key];\n      }\n\n      delete data[originalKey];\n    }\n\n    return data;\n  };\n\n  Utils.hasScroll = function (index, el) {\n    // Adapted from the function created by @ShadowScripter\n    // and adapted by @BillBarry on the Stack Exchange Code Review website.\n    // The original code can be found at\n    // http://codereview.stackexchange.com/q/13338\n    // and was designed to be used with the Sizzle selector engine.\n\n    var $el = $(el);\n    var overflowX = el.style.overflowX;\n    var overflowY = el.style.overflowY;\n\n    //Check both x and y declarations\n    if (overflowX === overflowY &&\n        (overflowY === 'hidden' || overflowY === 'visible')) {\n      return false;\n    }\n\n    if (overflowX === 'scroll' || overflowY === 'scroll') {\n      return true;\n    }\n\n    return ($el.innerHeight() < el.scrollHeight ||\n      $el.innerWidth() < el.scrollWidth);\n  };\n\n  Utils.escapeMarkup = function (markup) {\n    var replaceMap = {\n      '\\\\': '&#92;',\n      '&': '&amp;',\n      '<': '&lt;',\n      '>': '&gt;',\n      '\"': '&quot;',\n      '\\'': '&#39;',\n      '/': '&#47;'\n    };\n\n    // Do not try to escape the markup if it's not a string\n    if (typeof markup !== 'string') {\n      return markup;\n    }\n\n    return String(markup).replace(/[&<>\"'\\/\\\\]/g, function (match) {\n      return replaceMap[match];\n    });\n  };\n\n  // Append an array of jQuery nodes to a given element.\n  Utils.appendMany = function ($element, $nodes) {\n    // jQuery 1.7.x does not support $.fn.append() with an array\n    // Fall back to a jQuery object collection using $.fn.add()\n    if ($.fn.jquery.substr(0, 3) === '1.7') {\n      var $jqNodes = $();\n\n      $.map($nodes, function (node) {\n        $jqNodes = $jqNodes.add(node);\n      });\n\n      $nodes = $jqNodes;\n    }\n\n    $element.append($nodes);\n  };\n\n  // Cache objects in Utils.__cache instead of $.data (see #4346)\n  Utils.__cache = {};\n\n  var id = 0;\n  Utils.GetUniqueElementId = function (element) {\n    // Get a unique element Id. If element has no id,\n    // creates a new unique number, stores it in the id\n    // attribute and returns the new id.\n    // If an id already exists, it simply returns it.\n\n    var select2Id = element.getAttribute('data-select2-id');\n    if (select2Id == null) {\n      // If element has id, use it.\n      if (element.id) {\n        select2Id = element.id;\n        element.setAttribute('data-select2-id', select2Id);\n      } else {\n        element.setAttribute('data-select2-id', ++id);\n        select2Id = id.toString();\n      }\n    }\n    return select2Id;\n  };\n\n  Utils.StoreData = function (element, name, value) {\n    // Stores an item in the cache for a specified element.\n    // name is the cache key.\n    var id = Utils.GetUniqueElementId(element);\n    if (!Utils.__cache[id]) {\n      Utils.__cache[id] = {};\n    }\n\n    Utils.__cache[id][name] = value;\n  };\n\n  Utils.GetData = function (element, name) {\n    // Retrieves a value from the cache by its key (name)\n    // name is optional. If no name specified, return\n    // all cache items for the specified element.\n    // and for a specified element.\n    var id = Utils.GetUniqueElementId(element);\n    if (name) {\n      if (Utils.__cache[id]) {\n        if (Utils.__cache[id][name] != null) {\n          return Utils.__cache[id][name];\n        }\n        return $(element).data(name); // Fallback to HTML5 data attribs.\n      }\n      return $(element).data(name); // Fallback to HTML5 data attribs.\n    } else {\n      return Utils.__cache[id];\n    }\n  };\n\n  Utils.RemoveData = function (element) {\n    // Removes all cached items for a specified element.\n    var id = Utils.GetUniqueElementId(element);\n    if (Utils.__cache[id] != null) {\n      delete Utils.__cache[id];\n    }\n\n    element.removeAttribute('data-select2-id');\n  };\n\n  return Utils;\n});\n\nS2.define('select2/results',[\n  'jquery',\n  './utils'\n], function ($, Utils) {\n  function Results ($element, options, dataAdapter) {\n    this.$element = $element;\n    this.data = dataAdapter;\n    this.options = options;\n\n    Results.__super__.constructor.call(this);\n  }\n\n  Utils.Extend(Results, Utils.Observable);\n\n  Results.prototype.render = function () {\n    var $results = $(\n      '<ul class=\"select2-results__options\" role=\"listbox\"></ul>'\n    );\n\n    if (this.options.get('multiple')) {\n      $results.attr('aria-multiselectable', 'true');\n    }\n\n    this.$results = $results;\n\n    return $results;\n  };\n\n  Results.prototype.clear = function () {\n    this.$results.empty();\n  };\n\n  Results.prototype.displayMessage = function (params) {\n    var escapeMarkup = this.options.get('escapeMarkup');\n\n    this.clear();\n    this.hideLoading();\n\n    var $message = $(\n      '<li role=\"alert\" aria-live=\"assertive\"' +\n      ' class=\"select2-results__option\"></li>'\n    );\n\n    var message = this.options.get('translations').get(params.message);\n\n    $message.append(\n      escapeMarkup(\n        message(params.args)\n      )\n    );\n\n    $message[0].className += ' select2-results__message';\n\n    this.$results.append($message);\n  };\n\n  Results.prototype.hideMessages = function () {\n    this.$results.find('.select2-results__message').remove();\n  };\n\n  Results.prototype.append = function (data) {\n    this.hideLoading();\n\n    var $options = [];\n\n    if (data.results == null || data.results.length === 0) {\n      if (this.$results.children().length === 0) {\n        this.trigger('results:message', {\n          message: 'noResults'\n        });\n      }\n\n      return;\n    }\n\n    data.results = this.sort(data.results);\n\n    for (var d = 0; d < data.results.length; d++) {\n      var item = data.results[d];\n\n      var $option = this.option(item);\n\n      $options.push($option);\n    }\n\n    this.$results.append($options);\n  };\n\n  Results.prototype.position = function ($results, $dropdown) {\n    var $resultsContainer = $dropdown.find('.select2-results');\n    $resultsContainer.append($results);\n  };\n\n  Results.prototype.sort = function (data) {\n    var sorter = this.options.get('sorter');\n\n    return sorter(data);\n  };\n\n  Results.prototype.highlightFirstItem = function () {\n    var $options = this.$results\n      .find('.select2-results__option[aria-selected]');\n\n    var $selected = $options.filter('[aria-selected=true]');\n\n    // Check if there are any selected options\n    if ($selected.length > 0) {\n      // If there are selected options, highlight the first\n      $selected.first().trigger('mouseenter');\n    } else {\n      // If there are no selected options, highlight the first option\n      // in the dropdown\n      $options.first().trigger('mouseenter');\n    }\n\n    this.ensureHighlightVisible();\n  };\n\n  Results.prototype.setClasses = function () {\n    var self = this;\n\n    this.data.current(function (selected) {\n      var selectedIds = $.map(selected, function (s) {\n        return s.id.toString();\n      });\n\n      var $options = self.$results\n        .find('.select2-results__option[aria-selected]');\n\n      $options.each(function () {\n        var $option = $(this);\n\n        var item = Utils.GetData(this, 'data');\n\n        // id needs to be converted to a string when comparing\n        var id = '' + item.id;\n\n        if ((item.element != null && item.element.selected) ||\n            (item.element == null && $.inArray(id, selectedIds) > -1)) {\n          $option.attr('aria-selected', 'true');\n        } else {\n          $option.attr('aria-selected', 'false');\n        }\n      });\n\n    });\n  };\n\n  Results.prototype.showLoading = function (params) {\n    this.hideLoading();\n\n    var loadingMore = this.options.get('translations').get('searching');\n\n    var loading = {\n      disabled: true,\n      loading: true,\n      text: loadingMore(params)\n    };\n    var $loading = this.option(loading);\n    $loading.className += ' loading-results';\n\n    this.$results.prepend($loading);\n  };\n\n  Results.prototype.hideLoading = function () {\n    this.$results.find('.loading-results').remove();\n  };\n\n  Results.prototype.option = function (data) {\n    var option = document.createElement('li');\n    option.className = 'select2-results__option';\n\n    var attrs = {\n      'role': 'option',\n      'aria-selected': 'false'\n    };\n\n    var matches = window.Element.prototype.matches ||\n      window.Element.prototype.msMatchesSelector ||\n      window.Element.prototype.webkitMatchesSelector;\n\n    if ((data.element != null && matches.call(data.element, ':disabled')) ||\n        (data.element == null && data.disabled)) {\n      delete attrs['aria-selected'];\n      attrs['aria-disabled'] = 'true';\n    }\n\n    if (data.id == null) {\n      delete attrs['aria-selected'];\n    }\n\n    if (data._resultId != null) {\n      option.id = data._resultId;\n    }\n\n    if (data.title) {\n      option.title = data.title;\n    }\n\n    if (data.children) {\n      attrs.role = 'group';\n      attrs['aria-label'] = data.text;\n      delete attrs['aria-selected'];\n    }\n\n    for (var attr in attrs) {\n      var val = attrs[attr];\n\n      option.setAttribute(attr, val);\n    }\n\n    if (data.children) {\n      var $option = $(option);\n\n      var label = document.createElement('strong');\n      label.className = 'select2-results__group';\n\n      var $label = $(label);\n      this.template(data, label);\n\n      var $children = [];\n\n      for (var c = 0; c < data.children.length; c++) {\n        var child = data.children[c];\n\n        var $child = this.option(child);\n\n        $children.push($child);\n      }\n\n      var $childrenContainer = $('<ul></ul>', {\n        'class': 'select2-results__options select2-results__options--nested'\n      });\n\n      $childrenContainer.append($children);\n\n      $option.append(label);\n      $option.append($childrenContainer);\n    } else {\n      this.template(data, option);\n    }\n\n    Utils.StoreData(option, 'data', data);\n\n    return option;\n  };\n\n  Results.prototype.bind = function (container, $container) {\n    var self = this;\n\n    var id = container.id + '-results';\n\n    this.$results.attr('id', id);\n\n    container.on('results:all', function (params) {\n      self.clear();\n      self.append(params.data);\n\n      if (container.isOpen()) {\n        self.setClasses();\n        self.highlightFirstItem();\n      }\n    });\n\n    container.on('results:append', function (params) {\n      self.append(params.data);\n\n      if (container.isOpen()) {\n        self.setClasses();\n      }\n    });\n\n    container.on('query', function (params) {\n      self.hideMessages();\n      self.showLoading(params);\n    });\n\n    container.on('select', function () {\n      if (!container.isOpen()) {\n        return;\n      }\n\n      self.setClasses();\n\n      if (self.options.get('scrollAfterSelect')) {\n        self.highlightFirstItem();\n      }\n    });\n\n    container.on('unselect', function () {\n      if (!container.isOpen()) {\n        return;\n      }\n\n      self.setClasses();\n\n      if (self.options.get('scrollAfterSelect')) {\n        self.highlightFirstItem();\n      }\n    });\n\n    container.on('open', function () {\n      // When the dropdown is open, aria-expended=\"true\"\n      self.$results.attr('aria-expanded', 'true');\n      self.$results.attr('aria-hidden', 'false');\n\n      self.setClasses();\n      self.ensureHighlightVisible();\n    });\n\n    container.on('close', function () {\n      // When the dropdown is closed, aria-expended=\"false\"\n      self.$results.attr('aria-expanded', 'false');\n      self.$results.attr('aria-hidden', 'true');\n      self.$results.removeAttr('aria-activedescendant');\n    });\n\n    container.on('results:toggle', function () {\n      var $highlighted = self.getHighlightedResults();\n\n      if ($highlighted.length === 0) {\n        return;\n      }\n\n      $highlighted.trigger('mouseup');\n    });\n\n    container.on('results:select', function () {\n      var $highlighted = self.getHighlightedResults();\n\n      if ($highlighted.length === 0) {\n        return;\n      }\n\n      var data = Utils.GetData($highlighted[0], 'data');\n\n      if ($highlighted.attr('aria-selected') == 'true') {\n        self.trigger('close', {});\n      } else {\n        self.trigger('select', {\n          data: data\n        });\n      }\n    });\n\n    container.on('results:previous', function () {\n      var $highlighted = self.getHighlightedResults();\n\n      var $options = self.$results.find('[aria-selected]');\n\n      var currentIndex = $options.index($highlighted);\n\n      // If we are already at the top, don't move further\n      // If no options, currentIndex will be -1\n      if (currentIndex <= 0) {\n        return;\n      }\n\n      var nextIndex = currentIndex - 1;\n\n      // If none are highlighted, highlight the first\n      if ($highlighted.length === 0) {\n        nextIndex = 0;\n      }\n\n      var $next = $options.eq(nextIndex);\n\n      $next.trigger('mouseenter');\n\n      var currentOffset = self.$results.offset().top;\n      var nextTop = $next.offset().top;\n      var nextOffset = self.$results.scrollTop() + (nextTop - currentOffset);\n\n      if (nextIndex === 0) {\n        self.$results.scrollTop(0);\n      } else if (nextTop - currentOffset < 0) {\n        self.$results.scrollTop(nextOffset);\n      }\n    });\n\n    container.on('results:next', function () {\n      var $highlighted = self.getHighlightedResults();\n\n      var $options = self.$results.find('[aria-selected]');\n\n      var currentIndex = $options.index($highlighted);\n\n      var nextIndex = currentIndex + 1;\n\n      // If we are at the last option, stay there\n      if (nextIndex >= $options.length) {\n        return;\n      }\n\n      var $next = $options.eq(nextIndex);\n\n      $next.trigger('mouseenter');\n\n      var currentOffset = self.$results.offset().top +\n        self.$results.outerHeight(false);\n      var nextBottom = $next.offset().top + $next.outerHeight(false);\n      var nextOffset = self.$results.scrollTop() + nextBottom - currentOffset;\n\n      if (nextIndex === 0) {\n        self.$results.scrollTop(0);\n      } else if (nextBottom > currentOffset) {\n        self.$results.scrollTop(nextOffset);\n      }\n    });\n\n    container.on('results:focus', function (params) {\n      params.element.addClass('select2-results__option--highlighted');\n    });\n\n    container.on('results:message', function (params) {\n      self.displayMessage(params);\n    });\n\n    if ($.fn.mousewheel) {\n      this.$results.on('mousewheel', function (e) {\n        var top = self.$results.scrollTop();\n\n        var bottom = self.$results.get(0).scrollHeight - top + e.deltaY;\n\n        var isAtTop = e.deltaY > 0 && top - e.deltaY <= 0;\n        var isAtBottom = e.deltaY < 0 && bottom <= self.$results.height();\n\n        if (isAtTop) {\n          self.$results.scrollTop(0);\n\n          e.preventDefault();\n          e.stopPropagation();\n        } else if (isAtBottom) {\n          self.$results.scrollTop(\n            self.$results.get(0).scrollHeight - self.$results.height()\n          );\n\n          e.preventDefault();\n          e.stopPropagation();\n        }\n      });\n    }\n\n    this.$results.on('mouseup', '.select2-results__option[aria-selected]',\n      function (evt) {\n      var $this = $(this);\n\n      var data = Utils.GetData(this, 'data');\n\n      if ($this.attr('aria-selected') === 'true') {\n        if (self.options.get('multiple')) {\n          self.trigger('unselect', {\n            originalEvent: evt,\n            data: data\n          });\n        } else {\n          self.trigger('close', {});\n        }\n\n        return;\n      }\n\n      self.trigger('select', {\n        originalEvent: evt,\n        data: data\n      });\n    });\n\n    this.$results.on('mouseenter', '.select2-results__option[aria-selected]',\n      function (evt) {\n      var data = Utils.GetData(this, 'data');\n\n      self.getHighlightedResults()\n          .removeClass('select2-results__option--highlighted');\n\n      self.trigger('results:focus', {\n        data: data,\n        element: $(this)\n      });\n    });\n  };\n\n  Results.prototype.getHighlightedResults = function () {\n    var $highlighted = this.$results\n    .find('.select2-results__option--highlighted');\n\n    return $highlighted;\n  };\n\n  Results.prototype.destroy = function () {\n    this.$results.remove();\n  };\n\n  Results.prototype.ensureHighlightVisible = function () {\n    var $highlighted = this.getHighlightedResults();\n\n    if ($highlighted.length === 0) {\n      return;\n    }\n\n    var $options = this.$results.find('[aria-selected]');\n\n    var currentIndex = $options.index($highlighted);\n\n    var currentOffset = this.$results.offset().top;\n    var nextTop = $highlighted.offset().top;\n    var nextOffset = this.$results.scrollTop() + (nextTop - currentOffset);\n\n    var offsetDelta = nextTop - currentOffset;\n    nextOffset -= $highlighted.outerHeight(false) * 2;\n\n    if (currentIndex <= 2) {\n      this.$results.scrollTop(0);\n    } else if (offsetDelta > this.$results.outerHeight() || offsetDelta < 0) {\n      this.$results.scrollTop(nextOffset);\n    }\n  };\n\n  Results.prototype.template = function (result, container) {\n    var template = this.options.get('templateResult');\n    var escapeMarkup = this.options.get('escapeMarkup');\n\n    var content = template(result, container);\n\n    if (content == null) {\n      container.style.display = 'none';\n    } else if (typeof content === 'string') {\n      container.innerHTML = escapeMarkup(content);\n    } else {\n      $(container).append(content);\n    }\n  };\n\n  return Results;\n});\n\nS2.define('select2/keys',[\n\n], function () {\n  var KEYS = {\n    BACKSPACE: 8,\n    TAB: 9,\n    ENTER: 13,\n    SHIFT: 16,\n    CTRL: 17,\n    ALT: 18,\n    ESC: 27,\n    SPACE: 32,\n    PAGE_UP: 33,\n    PAGE_DOWN: 34,\n    END: 35,\n    HOME: 36,\n    LEFT: 37,\n    UP: 38,\n    RIGHT: 39,\n    DOWN: 40,\n    DELETE: 46\n  };\n\n  return KEYS;\n});\n\nS2.define('select2/selection/base',[\n  'jquery',\n  '../utils',\n  '../keys'\n], function ($, Utils, KEYS) {\n  function BaseSelection ($element, options) {\n    this.$element = $element;\n    this.options = options;\n\n    BaseSelection.__super__.constructor.call(this);\n  }\n\n  Utils.Extend(BaseSelection, Utils.Observable);\n\n  BaseSelection.prototype.render = function () {\n    var $selection = $(\n      '<span class=\"select2-selection\" role=\"combobox\" ' +\n      ' aria-haspopup=\"true\" aria-expanded=\"false\">' +\n      '</span>'\n    );\n\n    this._tabindex = 0;\n\n    if (Utils.GetData(this.$element[0], 'old-tabindex') != null) {\n      this._tabindex = Utils.GetData(this.$element[0], 'old-tabindex');\n    } else if (this.$element.attr('tabindex') != null) {\n      this._tabindex = this.$element.attr('tabindex');\n    }\n\n    $selection.attr('title', this.$element.attr('title'));\n    $selection.attr('tabindex', this._tabindex);\n    $selection.attr('aria-disabled', 'false');\n\n    this.$selection = $selection;\n\n    return $selection;\n  };\n\n  BaseSelection.prototype.bind = function (container, $container) {\n    var self = this;\n\n    var resultsId = container.id + '-results';\n\n    this.container = container;\n\n    this.$selection.on('focus', function (evt) {\n      self.trigger('focus', evt);\n    });\n\n    this.$selection.on('blur', function (evt) {\n      self._handleBlur(evt);\n    });\n\n    this.$selection.on('keydown', function (evt) {\n      self.trigger('keypress', evt);\n\n      if (evt.which === KEYS.SPACE) {\n        evt.preventDefault();\n      }\n    });\n\n    container.on('results:focus', function (params) {\n      self.$selection.attr('aria-activedescendant', params.data._resultId);\n    });\n\n    container.on('selection:update', function (params) {\n      self.update(params.data);\n    });\n\n    container.on('open', function () {\n      // When the dropdown is open, aria-expanded=\"true\"\n      self.$selection.attr('aria-expanded', 'true');\n      self.$selection.attr('aria-owns', resultsId);\n\n      self._attachCloseHandler(container);\n    });\n\n    container.on('close', function () {\n      // When the dropdown is closed, aria-expanded=\"false\"\n      self.$selection.attr('aria-expanded', 'false');\n      self.$selection.removeAttr('aria-activedescendant');\n      self.$selection.removeAttr('aria-owns');\n\n      self.$selection.trigger('focus');\n\n      self._detachCloseHandler(container);\n    });\n\n    container.on('enable', function () {\n      self.$selection.attr('tabindex', self._tabindex);\n      self.$selection.attr('aria-disabled', 'false');\n    });\n\n    container.on('disable', function () {\n      self.$selection.attr('tabindex', '-1');\n      self.$selection.attr('aria-disabled', 'true');\n    });\n  };\n\n  BaseSelection.prototype._handleBlur = function (evt) {\n    var self = this;\n\n    // This needs to be delayed as the active element is the body when the tab\n    // key is pressed, possibly along with others.\n    window.setTimeout(function () {\n      // Don't trigger `blur` if the focus is still in the selection\n      if (\n        (document.activeElement == self.$selection[0]) ||\n        ($.contains(self.$selection[0], document.activeElement))\n      ) {\n        return;\n      }\n\n      self.trigger('blur', evt);\n    }, 1);\n  };\n\n  BaseSelection.prototype._attachCloseHandler = function (container) {\n\n    $(document.body).on('mousedown.select2.' + container.id, function (e) {\n      var $target = $(e.target);\n\n      var $select = $target.closest('.select2');\n\n      var $all = $('.select2.select2-container--open');\n\n      $all.each(function () {\n        if (this == $select[0]) {\n          return;\n        }\n\n        var $element = Utils.GetData(this, 'element');\n\n        $element.select2('close');\n      });\n    });\n  };\n\n  BaseSelection.prototype._detachCloseHandler = function (container) {\n    $(document.body).off('mousedown.select2.' + container.id);\n  };\n\n  BaseSelection.prototype.position = function ($selection, $container) {\n    var $selectionContainer = $container.find('.selection');\n    $selectionContainer.append($selection);\n  };\n\n  BaseSelection.prototype.destroy = function () {\n    this._detachCloseHandler(this.container);\n  };\n\n  BaseSelection.prototype.update = function (data) {\n    throw new Error('The `update` method must be defined in child classes.');\n  };\n\n  /**\n   * Helper method to abstract the \"enabled\" (not \"disabled\") state of this\n   * object.\n   *\n   * @return {true} if the instance is not disabled.\n   * @return {false} if the instance is disabled.\n   */\n  BaseSelection.prototype.isEnabled = function () {\n    return !this.isDisabled();\n  };\n\n  /**\n   * Helper method to abstract the \"disabled\" state of this object.\n   *\n   * @return {true} if the disabled option is true.\n   * @return {false} if the disabled option is false.\n   */\n  BaseSelection.prototype.isDisabled = function () {\n    return this.options.get('disabled');\n  };\n\n  return BaseSelection;\n});\n\nS2.define('select2/selection/single',[\n  'jquery',\n  './base',\n  '../utils',\n  '../keys'\n], function ($, BaseSelection, Utils, KEYS) {\n  function SingleSelection () {\n    SingleSelection.__super__.constructor.apply(this, arguments);\n  }\n\n  Utils.Extend(SingleSelection, BaseSelection);\n\n  SingleSelection.prototype.render = function () {\n    var $selection = SingleSelection.__super__.render.call(this);\n\n    $selection.addClass('select2-selection--single');\n\n    $selection.html(\n      '<span class=\"select2-selection__rendered\"></span>' +\n      '<span class=\"select2-selection__arrow\" role=\"presentation\">' +\n        '<b role=\"presentation\"></b>' +\n      '</span>'\n    );\n\n    return $selection;\n  };\n\n  SingleSelection.prototype.bind = function (container, $container) {\n    var self = this;\n\n    SingleSelection.__super__.bind.apply(this, arguments);\n\n    var id = container.id + '-container';\n\n    this.$selection.find('.select2-selection__rendered')\n      .attr('id', id)\n      .attr('role', 'textbox')\n      .attr('aria-readonly', 'true');\n    this.$selection.attr('aria-labelledby', id);\n\n    this.$selection.on('mousedown', function (evt) {\n      // Only respond to left clicks\n      if (evt.which !== 1) {\n        return;\n      }\n\n      self.trigger('toggle', {\n        originalEvent: evt\n      });\n    });\n\n    this.$selection.on('focus', function (evt) {\n      // User focuses on the container\n    });\n\n    this.$selection.on('blur', function (evt) {\n      // User exits the container\n    });\n\n    container.on('focus', function (evt) {\n      if (!container.isOpen()) {\n        self.$selection.trigger('focus');\n      }\n    });\n  };\n\n  SingleSelection.prototype.clear = function () {\n    var $rendered = this.$selection.find('.select2-selection__rendered');\n    $rendered.empty();\n    $rendered.removeAttr('title'); // clear tooltip on empty\n  };\n\n  SingleSelection.prototype.display = function (data, container) {\n    var template = this.options.get('templateSelection');\n    var escapeMarkup = this.options.get('escapeMarkup');\n\n    return escapeMarkup(template(data, container));\n  };\n\n  SingleSelection.prototype.selectionContainer = function () {\n    return $('<span></span>');\n  };\n\n  SingleSelection.prototype.update = function (data) {\n    if (data.length === 0) {\n      this.clear();\n      return;\n    }\n\n    var selection = data[0];\n\n    var $rendered = this.$selection.find('.select2-selection__rendered');\n    var formatted = this.display(selection, $rendered);\n\n    $rendered.empty().append(formatted);\n\n    var title = selection.title || selection.text;\n\n    if (title) {\n      $rendered.attr('title', title);\n    } else {\n      $rendered.removeAttr('title');\n    }\n  };\n\n  return SingleSelection;\n});\n\nS2.define('select2/selection/multiple',[\n  'jquery',\n  './base',\n  '../utils'\n], function ($, BaseSelection, Utils) {\n  function MultipleSelection ($element, options) {\n    MultipleSelection.__super__.constructor.apply(this, arguments);\n  }\n\n  Utils.Extend(MultipleSelection, BaseSelection);\n\n  MultipleSelection.prototype.render = function () {\n    var $selection = MultipleSelection.__super__.render.call(this);\n\n    $selection.addClass('select2-selection--multiple');\n\n    $selection.html(\n      '<ul class=\"select2-selection__rendered\"></ul>'\n    );\n\n    return $selection;\n  };\n\n  MultipleSelection.prototype.bind = function (container, $container) {\n    var self = this;\n\n    MultipleSelection.__super__.bind.apply(this, arguments);\n\n    this.$selection.on('click', function (evt) {\n      self.trigger('toggle', {\n        originalEvent: evt\n      });\n    });\n\n    this.$selection.on(\n      'click',\n      '.select2-selection__choice__remove',\n      function (evt) {\n        // Ignore the event if it is disabled\n        if (self.isDisabled()) {\n          return;\n        }\n\n        var $remove = $(this);\n        var $selection = $remove.parent();\n\n        var data = Utils.GetData($selection[0], 'data');\n\n        self.trigger('unselect', {\n          originalEvent: evt,\n          data: data\n        });\n      }\n    );\n  };\n\n  MultipleSelection.prototype.clear = function () {\n    var $rendered = this.$selection.find('.select2-selection__rendered');\n    $rendered.empty();\n    $rendered.removeAttr('title');\n  };\n\n  MultipleSelection.prototype.display = function (data, container) {\n    var template = this.options.get('templateSelection');\n    var escapeMarkup = this.options.get('escapeMarkup');\n\n    return escapeMarkup(template(data, container));\n  };\n\n  MultipleSelection.prototype.selectionContainer = function () {\n    var $container = $(\n      '<li class=\"select2-selection__choice\">' +\n        '<span class=\"select2-selection__choice__remove\" role=\"presentation\">' +\n          '&times;' +\n        '</span>' +\n      '</li>'\n    );\n\n    return $container;\n  };\n\n  MultipleSelection.prototype.update = function (data) {\n    this.clear();\n\n    if (data.length === 0) {\n      return;\n    }\n\n    var $selections = [];\n\n    for (var d = 0; d < data.length; d++) {\n      var selection = data[d];\n\n      var $selection = this.selectionContainer();\n      var formatted = this.display(selection, $selection);\n\n      $selection.append(formatted);\n\n      var title = selection.title || selection.text;\n\n      if (title) {\n        $selection.attr('title', title);\n      }\n\n      Utils.StoreData($selection[0], 'data', selection);\n\n      $selections.push($selection);\n    }\n\n    var $rendered = this.$selection.find('.select2-selection__rendered');\n\n    Utils.appendMany($rendered, $selections);\n  };\n\n  return MultipleSelection;\n});\n\nS2.define('select2/selection/placeholder',[\n  '../utils'\n], function (Utils) {\n  function Placeholder (decorated, $element, options) {\n    this.placeholder = this.normalizePlaceholder(options.get('placeholder'));\n\n    decorated.call(this, $element, options);\n  }\n\n  Placeholder.prototype.normalizePlaceholder = function (_, placeholder) {\n    if (typeof placeholder === 'string') {\n      placeholder = {\n        id: '',\n        text: placeholder\n      };\n    }\n\n    return placeholder;\n  };\n\n  Placeholder.prototype.createPlaceholder = function (decorated, placeholder) {\n    var $placeholder = this.selectionContainer();\n\n    $placeholder.html(this.display(placeholder));\n    $placeholder.addClass('select2-selection__placeholder')\n                .removeClass('select2-selection__choice');\n\n    return $placeholder;\n  };\n\n  Placeholder.prototype.update = function (decorated, data) {\n    var singlePlaceholder = (\n      data.length == 1 && data[0].id != this.placeholder.id\n    );\n    var multipleSelections = data.length > 1;\n\n    if (multipleSelections || singlePlaceholder) {\n      return decorated.call(this, data);\n    }\n\n    this.clear();\n\n    var $placeholder = this.createPlaceholder(this.placeholder);\n\n    this.$selection.find('.select2-selection__rendered').append($placeholder);\n  };\n\n  return Placeholder;\n});\n\nS2.define('select2/selection/allowClear',[\n  'jquery',\n  '../keys',\n  '../utils'\n], function ($, KEYS, Utils) {\n  function AllowClear () { }\n\n  AllowClear.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n\n    decorated.call(this, container, $container);\n\n    if (this.placeholder == null) {\n      if (this.options.get('debug') && window.console && console.error) {\n        console.error(\n          'Select2: The `allowClear` option should be used in combination ' +\n          'with the `placeholder` option.'\n        );\n      }\n    }\n\n    this.$selection.on('mousedown', '.select2-selection__clear',\n      function (evt) {\n        self._handleClear(evt);\n    });\n\n    container.on('keypress', function (evt) {\n      self._handleKeyboardClear(evt, container);\n    });\n  };\n\n  AllowClear.prototype._handleClear = function (_, evt) {\n    // Ignore the event if it is disabled\n    if (this.isDisabled()) {\n      return;\n    }\n\n    var $clear = this.$selection.find('.select2-selection__clear');\n\n    // Ignore the event if nothing has been selected\n    if ($clear.length === 0) {\n      return;\n    }\n\n    evt.stopPropagation();\n\n    var data = Utils.GetData($clear[0], 'data');\n\n    var previousVal = this.$element.val();\n    this.$element.val(this.placeholder.id);\n\n    var unselectData = {\n      data: data\n    };\n    this.trigger('clear', unselectData);\n    if (unselectData.prevented) {\n      this.$element.val(previousVal);\n      return;\n    }\n\n    for (var d = 0; d < data.length; d++) {\n      unselectData = {\n        data: data[d]\n      };\n\n      // Trigger the `unselect` event, so people can prevent it from being\n      // cleared.\n      this.trigger('unselect', unselectData);\n\n      // If the event was prevented, don't clear it out.\n      if (unselectData.prevented) {\n        this.$element.val(previousVal);\n        return;\n      }\n    }\n\n    this.$element.trigger('input').trigger('change');\n\n    this.trigger('toggle', {});\n  };\n\n  AllowClear.prototype._handleKeyboardClear = function (_, evt, container) {\n    if (container.isOpen()) {\n      return;\n    }\n\n    if (evt.which == KEYS.DELETE || evt.which == KEYS.BACKSPACE) {\n      this._handleClear(evt);\n    }\n  };\n\n  AllowClear.prototype.update = function (decorated, data) {\n    decorated.call(this, data);\n\n    if (this.$selection.find('.select2-selection__placeholder').length > 0 ||\n        data.length === 0) {\n      return;\n    }\n\n    var removeAll = this.options.get('translations').get('removeAllItems');\n\n    var $remove = $(\n      '<span class=\"select2-selection__clear\" title=\"' + removeAll() +'\">' +\n        '&times;' +\n      '</span>'\n    );\n    Utils.StoreData($remove[0], 'data', data);\n\n    this.$selection.find('.select2-selection__rendered').prepend($remove);\n  };\n\n  return AllowClear;\n});\n\nS2.define('select2/selection/search',[\n  'jquery',\n  '../utils',\n  '../keys'\n], function ($, Utils, KEYS) {\n  function Search (decorated, $element, options) {\n    decorated.call(this, $element, options);\n  }\n\n  Search.prototype.render = function (decorated) {\n    var $search = $(\n      '<li class=\"select2-search select2-search--inline\">' +\n        '<input class=\"select2-search__field\" type=\"search\" tabindex=\"-1\"' +\n        ' autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"none\"' +\n        ' spellcheck=\"false\" role=\"searchbox\" aria-autocomplete=\"list\" />' +\n      '</li>'\n    );\n\n    this.$searchContainer = $search;\n    this.$search = $search.find('input');\n\n    var $rendered = decorated.call(this);\n\n    this._transferTabIndex();\n\n    return $rendered;\n  };\n\n  Search.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n\n    var resultsId = container.id + '-results';\n\n    decorated.call(this, container, $container);\n\n    container.on('open', function () {\n      self.$search.attr('aria-controls', resultsId);\n      self.$search.trigger('focus');\n    });\n\n    container.on('close', function () {\n      self.$search.val('');\n      self.$search.removeAttr('aria-controls');\n      self.$search.removeAttr('aria-activedescendant');\n      self.$search.trigger('focus');\n    });\n\n    container.on('enable', function () {\n      self.$search.prop('disabled', false);\n\n      self._transferTabIndex();\n    });\n\n    container.on('disable', function () {\n      self.$search.prop('disabled', true);\n    });\n\n    container.on('focus', function (evt) {\n      self.$search.trigger('focus');\n    });\n\n    container.on('results:focus', function (params) {\n      if (params.data._resultId) {\n        self.$search.attr('aria-activedescendant', params.data._resultId);\n      } else {\n        self.$search.removeAttr('aria-activedescendant');\n      }\n    });\n\n    this.$selection.on('focusin', '.select2-search--inline', function (evt) {\n      self.trigger('focus', evt);\n    });\n\n    this.$selection.on('focusout', '.select2-search--inline', function (evt) {\n      self._handleBlur(evt);\n    });\n\n    this.$selection.on('keydown', '.select2-search--inline', function (evt) {\n      evt.stopPropagation();\n\n      self.trigger('keypress', evt);\n\n      self._keyUpPrevented = evt.isDefaultPrevented();\n\n      var key = evt.which;\n\n      if (key === KEYS.BACKSPACE && self.$search.val() === '') {\n        var $previousChoice = self.$searchContainer\n          .prev('.select2-selection__choice');\n\n        if ($previousChoice.length > 0) {\n          var item = Utils.GetData($previousChoice[0], 'data');\n\n          self.searchRemoveChoice(item);\n\n          evt.preventDefault();\n        }\n      }\n    });\n\n    this.$selection.on('click', '.select2-search--inline', function (evt) {\n      if (self.$search.val()) {\n        evt.stopPropagation();\n      }\n    });\n\n    // Try to detect the IE version should the `documentMode` property that\n    // is stored on the document. This is only implemented in IE and is\n    // slightly cleaner than doing a user agent check.\n    // This property is not available in Edge, but Edge also doesn't have\n    // this bug.\n    var msie = document.documentMode;\n    var disableInputEvents = msie && msie <= 11;\n\n    // Workaround for browsers which do not support the `input` event\n    // This will prevent double-triggering of events for browsers which support\n    // both the `keyup` and `input` events.\n    this.$selection.on(\n      'input.searchcheck',\n      '.select2-search--inline',\n      function (evt) {\n        // IE will trigger the `input` event when a placeholder is used on a\n        // search box. To get around this issue, we are forced to ignore all\n        // `input` events in IE and keep using `keyup`.\n        if (disableInputEvents) {\n          self.$selection.off('input.search input.searchcheck');\n          return;\n        }\n\n        // Unbind the duplicated `keyup` event\n        self.$selection.off('keyup.search');\n      }\n    );\n\n    this.$selection.on(\n      'keyup.search input.search',\n      '.select2-search--inline',\n      function (evt) {\n        // IE will trigger the `input` event when a placeholder is used on a\n        // search box. To get around this issue, we are forced to ignore all\n        // `input` events in IE and keep using `keyup`.\n        if (disableInputEvents && evt.type === 'input') {\n          self.$selection.off('input.search input.searchcheck');\n          return;\n        }\n\n        var key = evt.which;\n\n        // We can freely ignore events from modifier keys\n        if (key == KEYS.SHIFT || key == KEYS.CTRL || key == KEYS.ALT) {\n          return;\n        }\n\n        // Tabbing will be handled during the `keydown` phase\n        if (key == KEYS.TAB) {\n          return;\n        }\n\n        self.handleSearch(evt);\n      }\n    );\n  };\n\n  /**\n   * This method will transfer the tabindex attribute from the rendered\n   * selection to the search box. This allows for the search box to be used as\n   * the primary focus instead of the selection container.\n   *\n   * @private\n   */\n  Search.prototype._transferTabIndex = function (decorated) {\n    this.$search.attr('tabindex', this.$selection.attr('tabindex'));\n    this.$selection.attr('tabindex', '-1');\n  };\n\n  Search.prototype.createPlaceholder = function (decorated, placeholder) {\n    this.$search.attr('placeholder', placeholder.text);\n  };\n\n  Search.prototype.update = function (decorated, data) {\n    var searchHadFocus = this.$search[0] == document.activeElement;\n\n    this.$search.attr('placeholder', '');\n\n    decorated.call(this, data);\n\n    this.$selection.find('.select2-selection__rendered')\n                   .append(this.$searchContainer);\n\n    this.resizeSearch();\n    if (searchHadFocus) {\n      this.$search.trigger('focus');\n    }\n  };\n\n  Search.prototype.handleSearch = function () {\n    this.resizeSearch();\n\n    if (!this._keyUpPrevented) {\n      var input = this.$search.val();\n\n      this.trigger('query', {\n        term: input\n      });\n    }\n\n    this._keyUpPrevented = false;\n  };\n\n  Search.prototype.searchRemoveChoice = function (decorated, item) {\n    this.trigger('unselect', {\n      data: item\n    });\n\n    this.$search.val(item.text);\n    this.handleSearch();\n  };\n\n  Search.prototype.resizeSearch = function () {\n    this.$search.css('width', '25px');\n\n    var width = '';\n\n    if (this.$search.attr('placeholder') !== '') {\n      width = this.$selection.find('.select2-selection__rendered').width();\n    } else {\n      var minimumWidth = this.$search.val().length + 1;\n\n      width = (minimumWidth * 0.75) + 'em';\n    }\n\n    this.$search.css('width', width);\n  };\n\n  return Search;\n});\n\nS2.define('select2/selection/eventRelay',[\n  'jquery'\n], function ($) {\n  function EventRelay () { }\n\n  EventRelay.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n    var relayEvents = [\n      'open', 'opening',\n      'close', 'closing',\n      'select', 'selecting',\n      'unselect', 'unselecting',\n      'clear', 'clearing'\n    ];\n\n    var preventableEvents = [\n      'opening', 'closing', 'selecting', 'unselecting', 'clearing'\n    ];\n\n    decorated.call(this, container, $container);\n\n    container.on('*', function (name, params) {\n      // Ignore events that should not be relayed\n      if ($.inArray(name, relayEvents) === -1) {\n        return;\n      }\n\n      // The parameters should always be an object\n      params = params || {};\n\n      // Generate the jQuery event for the Select2 event\n      var evt = $.Event('select2:' + name, {\n        params: params\n      });\n\n      self.$element.trigger(evt);\n\n      // Only handle preventable events if it was one\n      if ($.inArray(name, preventableEvents) === -1) {\n        return;\n      }\n\n      params.prevented = evt.isDefaultPrevented();\n    });\n  };\n\n  return EventRelay;\n});\n\nS2.define('select2/translation',[\n  'jquery',\n  'require'\n], function ($, require) {\n  function Translation (dict) {\n    this.dict = dict || {};\n  }\n\n  Translation.prototype.all = function () {\n    return this.dict;\n  };\n\n  Translation.prototype.get = function (key) {\n    return this.dict[key];\n  };\n\n  Translation.prototype.extend = function (translation) {\n    this.dict = $.extend({}, translation.all(), this.dict);\n  };\n\n  // Static functions\n\n  Translation._cache = {};\n\n  Translation.loadPath = function (path) {\n    if (!(path in Translation._cache)) {\n      var translations = require(path);\n\n      Translation._cache[path] = translations;\n    }\n\n    return new Translation(Translation._cache[path]);\n  };\n\n  return Translation;\n});\n\nS2.define('select2/diacritics',[\n\n], function () {\n  var diacritics = {\n    '\\u24B6': 'A',\n    '\\uFF21': 'A',\n    '\\u00C0': 'A',\n    '\\u00C1': 'A',\n    '\\u00C2': 'A',\n    '\\u1EA6': 'A',\n    '\\u1EA4': 'A',\n    '\\u1EAA': 'A',\n    '\\u1EA8': 'A',\n    '\\u00C3': 'A',\n    '\\u0100': 'A',\n    '\\u0102': 'A',\n    '\\u1EB0': 'A',\n    '\\u1EAE': 'A',\n    '\\u1EB4': 'A',\n    '\\u1EB2': 'A',\n    '\\u0226': 'A',\n    '\\u01E0': 'A',\n    '\\u00C4': 'A',\n    '\\u01DE': 'A',\n    '\\u1EA2': 'A',\n    '\\u00C5': 'A',\n    '\\u01FA': 'A',\n    '\\u01CD': 'A',\n    '\\u0200': 'A',\n    '\\u0202': 'A',\n    '\\u1EA0': 'A',\n    '\\u1EAC': 'A',\n    '\\u1EB6': 'A',\n    '\\u1E00': 'A',\n    '\\u0104': 'A',\n    '\\u023A': 'A',\n    '\\u2C6F': 'A',\n    '\\uA732': 'AA',\n    '\\u00C6': 'AE',\n    '\\u01FC': 'AE',\n    '\\u01E2': 'AE',\n    '\\uA734': 'AO',\n    '\\uA736': 'AU',\n    '\\uA738': 'AV',\n    '\\uA73A': 'AV',\n    '\\uA73C': 'AY',\n    '\\u24B7': 'B',\n    '\\uFF22': 'B',\n    '\\u1E02': 'B',\n    '\\u1E04': 'B',\n    '\\u1E06': 'B',\n    '\\u0243': 'B',\n    '\\u0182': 'B',\n    '\\u0181': 'B',\n    '\\u24B8': 'C',\n    '\\uFF23': 'C',\n    '\\u0106': 'C',\n    '\\u0108': 'C',\n    '\\u010A': 'C',\n    '\\u010C': 'C',\n    '\\u00C7': 'C',\n    '\\u1E08': 'C',\n    '\\u0187': 'C',\n    '\\u023B': 'C',\n    '\\uA73E': 'C',\n    '\\u24B9': 'D',\n    '\\uFF24': 'D',\n    '\\u1E0A': 'D',\n    '\\u010E': 'D',\n    '\\u1E0C': 'D',\n    '\\u1E10': 'D',\n    '\\u1E12': 'D',\n    '\\u1E0E': 'D',\n    '\\u0110': 'D',\n    '\\u018B': 'D',\n    '\\u018A': 'D',\n    '\\u0189': 'D',\n    '\\uA779': 'D',\n    '\\u01F1': 'DZ',\n    '\\u01C4': 'DZ',\n    '\\u01F2': 'Dz',\n    '\\u01C5': 'Dz',\n    '\\u24BA': 'E',\n    '\\uFF25': 'E',\n    '\\u00C8': 'E',\n    '\\u00C9': 'E',\n    '\\u00CA': 'E',\n    '\\u1EC0': 'E',\n    '\\u1EBE': 'E',\n    '\\u1EC4': 'E',\n    '\\u1EC2': 'E',\n    '\\u1EBC': 'E',\n    '\\u0112': 'E',\n    '\\u1E14': 'E',\n    '\\u1E16': 'E',\n    '\\u0114': 'E',\n    '\\u0116': 'E',\n    '\\u00CB': 'E',\n    '\\u1EBA': 'E',\n    '\\u011A': 'E',\n    '\\u0204': 'E',\n    '\\u0206': 'E',\n    '\\u1EB8': 'E',\n    '\\u1EC6': 'E',\n    '\\u0228': 'E',\n    '\\u1E1C': 'E',\n    '\\u0118': 'E',\n    '\\u1E18': 'E',\n    '\\u1E1A': 'E',\n    '\\u0190': 'E',\n    '\\u018E': 'E',\n    '\\u24BB': 'F',\n    '\\uFF26': 'F',\n    '\\u1E1E': 'F',\n    '\\u0191': 'F',\n    '\\uA77B': 'F',\n    '\\u24BC': 'G',\n    '\\uFF27': 'G',\n    '\\u01F4': 'G',\n    '\\u011C': 'G',\n    '\\u1E20': 'G',\n    '\\u011E': 'G',\n    '\\u0120': 'G',\n    '\\u01E6': 'G',\n    '\\u0122': 'G',\n    '\\u01E4': 'G',\n    '\\u0193': 'G',\n    '\\uA7A0': 'G',\n    '\\uA77D': 'G',\n    '\\uA77E': 'G',\n    '\\u24BD': 'H',\n    '\\uFF28': 'H',\n    '\\u0124': 'H',\n    '\\u1E22': 'H',\n    '\\u1E26': 'H',\n    '\\u021E': 'H',\n    '\\u1E24': 'H',\n    '\\u1E28': 'H',\n    '\\u1E2A': 'H',\n    '\\u0126': 'H',\n    '\\u2C67': 'H',\n    '\\u2C75': 'H',\n    '\\uA78D': 'H',\n    '\\u24BE': 'I',\n    '\\uFF29': 'I',\n    '\\u00CC': 'I',\n    '\\u00CD': 'I',\n    '\\u00CE': 'I',\n    '\\u0128': 'I',\n    '\\u012A': 'I',\n    '\\u012C': 'I',\n    '\\u0130': 'I',\n    '\\u00CF': 'I',\n    '\\u1E2E': 'I',\n    '\\u1EC8': 'I',\n    '\\u01CF': 'I',\n    '\\u0208': 'I',\n    '\\u020A': 'I',\n    '\\u1ECA': 'I',\n    '\\u012E': 'I',\n    '\\u1E2C': 'I',\n    '\\u0197': 'I',\n    '\\u24BF': 'J',\n    '\\uFF2A': 'J',\n    '\\u0134': 'J',\n    '\\u0248': 'J',\n    '\\u24C0': 'K',\n    '\\uFF2B': 'K',\n    '\\u1E30': 'K',\n    '\\u01E8': 'K',\n    '\\u1E32': 'K',\n    '\\u0136': 'K',\n    '\\u1E34': 'K',\n    '\\u0198': 'K',\n    '\\u2C69': 'K',\n    '\\uA740': 'K',\n    '\\uA742': 'K',\n    '\\uA744': 'K',\n    '\\uA7A2': 'K',\n    '\\u24C1': 'L',\n    '\\uFF2C': 'L',\n    '\\u013F': 'L',\n    '\\u0139': 'L',\n    '\\u013D': 'L',\n    '\\u1E36': 'L',\n    '\\u1E38': 'L',\n    '\\u013B': 'L',\n    '\\u1E3C': 'L',\n    '\\u1E3A': 'L',\n    '\\u0141': 'L',\n    '\\u023D': 'L',\n    '\\u2C62': 'L',\n    '\\u2C60': 'L',\n    '\\uA748': 'L',\n    '\\uA746': 'L',\n    '\\uA780': 'L',\n    '\\u01C7': 'LJ',\n    '\\u01C8': 'Lj',\n    '\\u24C2': 'M',\n    '\\uFF2D': 'M',\n    '\\u1E3E': 'M',\n    '\\u1E40': 'M',\n    '\\u1E42': 'M',\n    '\\u2C6E': 'M',\n    '\\u019C': 'M',\n    '\\u24C3': 'N',\n    '\\uFF2E': 'N',\n    '\\u01F8': 'N',\n    '\\u0143': 'N',\n    '\\u00D1': 'N',\n    '\\u1E44': 'N',\n    '\\u0147': 'N',\n    '\\u1E46': 'N',\n    '\\u0145': 'N',\n    '\\u1E4A': 'N',\n    '\\u1E48': 'N',\n    '\\u0220': 'N',\n    '\\u019D': 'N',\n    '\\uA790': 'N',\n    '\\uA7A4': 'N',\n    '\\u01CA': 'NJ',\n    '\\u01CB': 'Nj',\n    '\\u24C4': 'O',\n    '\\uFF2F': 'O',\n    '\\u00D2': 'O',\n    '\\u00D3': 'O',\n    '\\u00D4': 'O',\n    '\\u1ED2': 'O',\n    '\\u1ED0': 'O',\n    '\\u1ED6': 'O',\n    '\\u1ED4': 'O',\n    '\\u00D5': 'O',\n    '\\u1E4C': 'O',\n    '\\u022C': 'O',\n    '\\u1E4E': 'O',\n    '\\u014C': 'O',\n    '\\u1E50': 'O',\n    '\\u1E52': 'O',\n    '\\u014E': 'O',\n    '\\u022E': 'O',\n    '\\u0230': 'O',\n    '\\u00D6': 'O',\n    '\\u022A': 'O',\n    '\\u1ECE': 'O',\n    '\\u0150': 'O',\n    '\\u01D1': 'O',\n    '\\u020C': 'O',\n    '\\u020E': 'O',\n    '\\u01A0': 'O',\n    '\\u1EDC': 'O',\n    '\\u1EDA': 'O',\n    '\\u1EE0': 'O',\n    '\\u1EDE': 'O',\n    '\\u1EE2': 'O',\n    '\\u1ECC': 'O',\n    '\\u1ED8': 'O',\n    '\\u01EA': 'O',\n    '\\u01EC': 'O',\n    '\\u00D8': 'O',\n    '\\u01FE': 'O',\n    '\\u0186': 'O',\n    '\\u019F': 'O',\n    '\\uA74A': 'O',\n    '\\uA74C': 'O',\n    '\\u0152': 'OE',\n    '\\u01A2': 'OI',\n    '\\uA74E': 'OO',\n    '\\u0222': 'OU',\n    '\\u24C5': 'P',\n    '\\uFF30': 'P',\n    '\\u1E54': 'P',\n    '\\u1E56': 'P',\n    '\\u01A4': 'P',\n    '\\u2C63': 'P',\n    '\\uA750': 'P',\n    '\\uA752': 'P',\n    '\\uA754': 'P',\n    '\\u24C6': 'Q',\n    '\\uFF31': 'Q',\n    '\\uA756': 'Q',\n    '\\uA758': 'Q',\n    '\\u024A': 'Q',\n    '\\u24C7': 'R',\n    '\\uFF32': 'R',\n    '\\u0154': 'R',\n    '\\u1E58': 'R',\n    '\\u0158': 'R',\n    '\\u0210': 'R',\n    '\\u0212': 'R',\n    '\\u1E5A': 'R',\n    '\\u1E5C': 'R',\n    '\\u0156': 'R',\n    '\\u1E5E': 'R',\n    '\\u024C': 'R',\n    '\\u2C64': 'R',\n    '\\uA75A': 'R',\n    '\\uA7A6': 'R',\n    '\\uA782': 'R',\n    '\\u24C8': 'S',\n    '\\uFF33': 'S',\n    '\\u1E9E': 'S',\n    '\\u015A': 'S',\n    '\\u1E64': 'S',\n    '\\u015C': 'S',\n    '\\u1E60': 'S',\n    '\\u0160': 'S',\n    '\\u1E66': 'S',\n    '\\u1E62': 'S',\n    '\\u1E68': 'S',\n    '\\u0218': 'S',\n    '\\u015E': 'S',\n    '\\u2C7E': 'S',\n    '\\uA7A8': 'S',\n    '\\uA784': 'S',\n    '\\u24C9': 'T',\n    '\\uFF34': 'T',\n    '\\u1E6A': 'T',\n    '\\u0164': 'T',\n    '\\u1E6C': 'T',\n    '\\u021A': 'T',\n    '\\u0162': 'T',\n    '\\u1E70': 'T',\n    '\\u1E6E': 'T',\n    '\\u0166': 'T',\n    '\\u01AC': 'T',\n    '\\u01AE': 'T',\n    '\\u023E': 'T',\n    '\\uA786': 'T',\n    '\\uA728': 'TZ',\n    '\\u24CA': 'U',\n    '\\uFF35': 'U',\n    '\\u00D9': 'U',\n    '\\u00DA': 'U',\n    '\\u00DB': 'U',\n    '\\u0168': 'U',\n    '\\u1E78': 'U',\n    '\\u016A': 'U',\n    '\\u1E7A': 'U',\n    '\\u016C': 'U',\n    '\\u00DC': 'U',\n    '\\u01DB': 'U',\n    '\\u01D7': 'U',\n    '\\u01D5': 'U',\n    '\\u01D9': 'U',\n    '\\u1EE6': 'U',\n    '\\u016E': 'U',\n    '\\u0170': 'U',\n    '\\u01D3': 'U',\n    '\\u0214': 'U',\n    '\\u0216': 'U',\n    '\\u01AF': 'U',\n    '\\u1EEA': 'U',\n    '\\u1EE8': 'U',\n    '\\u1EEE': 'U',\n    '\\u1EEC': 'U',\n    '\\u1EF0': 'U',\n    '\\u1EE4': 'U',\n    '\\u1E72': 'U',\n    '\\u0172': 'U',\n    '\\u1E76': 'U',\n    '\\u1E74': 'U',\n    '\\u0244': 'U',\n    '\\u24CB': 'V',\n    '\\uFF36': 'V',\n    '\\u1E7C': 'V',\n    '\\u1E7E': 'V',\n    '\\u01B2': 'V',\n    '\\uA75E': 'V',\n    '\\u0245': 'V',\n    '\\uA760': 'VY',\n    '\\u24CC': 'W',\n    '\\uFF37': 'W',\n    '\\u1E80': 'W',\n    '\\u1E82': 'W',\n    '\\u0174': 'W',\n    '\\u1E86': 'W',\n    '\\u1E84': 'W',\n    '\\u1E88': 'W',\n    '\\u2C72': 'W',\n    '\\u24CD': 'X',\n    '\\uFF38': 'X',\n    '\\u1E8A': 'X',\n    '\\u1E8C': 'X',\n    '\\u24CE': 'Y',\n    '\\uFF39': 'Y',\n    '\\u1EF2': 'Y',\n    '\\u00DD': 'Y',\n    '\\u0176': 'Y',\n    '\\u1EF8': 'Y',\n    '\\u0232': 'Y',\n    '\\u1E8E': 'Y',\n    '\\u0178': 'Y',\n    '\\u1EF6': 'Y',\n    '\\u1EF4': 'Y',\n    '\\u01B3': 'Y',\n    '\\u024E': 'Y',\n    '\\u1EFE': 'Y',\n    '\\u24CF': 'Z',\n    '\\uFF3A': 'Z',\n    '\\u0179': 'Z',\n    '\\u1E90': 'Z',\n    '\\u017B': 'Z',\n    '\\u017D': 'Z',\n    '\\u1E92': 'Z',\n    '\\u1E94': 'Z',\n    '\\u01B5': 'Z',\n    '\\u0224': 'Z',\n    '\\u2C7F': 'Z',\n    '\\u2C6B': 'Z',\n    '\\uA762': 'Z',\n    '\\u24D0': 'a',\n    '\\uFF41': 'a',\n    '\\u1E9A': 'a',\n    '\\u00E0': 'a',\n    '\\u00E1': 'a',\n    '\\u00E2': 'a',\n    '\\u1EA7': 'a',\n    '\\u1EA5': 'a',\n    '\\u1EAB': 'a',\n    '\\u1EA9': 'a',\n    '\\u00E3': 'a',\n    '\\u0101': 'a',\n    '\\u0103': 'a',\n    '\\u1EB1': 'a',\n    '\\u1EAF': 'a',\n    '\\u1EB5': 'a',\n    '\\u1EB3': 'a',\n    '\\u0227': 'a',\n    '\\u01E1': 'a',\n    '\\u00E4': 'a',\n    '\\u01DF': 'a',\n    '\\u1EA3': 'a',\n    '\\u00E5': 'a',\n    '\\u01FB': 'a',\n    '\\u01CE': 'a',\n    '\\u0201': 'a',\n    '\\u0203': 'a',\n    '\\u1EA1': 'a',\n    '\\u1EAD': 'a',\n    '\\u1EB7': 'a',\n    '\\u1E01': 'a',\n    '\\u0105': 'a',\n    '\\u2C65': 'a',\n    '\\u0250': 'a',\n    '\\uA733': 'aa',\n    '\\u00E6': 'ae',\n    '\\u01FD': 'ae',\n    '\\u01E3': 'ae',\n    '\\uA735': 'ao',\n    '\\uA737': 'au',\n    '\\uA739': 'av',\n    '\\uA73B': 'av',\n    '\\uA73D': 'ay',\n    '\\u24D1': 'b',\n    '\\uFF42': 'b',\n    '\\u1E03': 'b',\n    '\\u1E05': 'b',\n    '\\u1E07': 'b',\n    '\\u0180': 'b',\n    '\\u0183': 'b',\n    '\\u0253': 'b',\n    '\\u24D2': 'c',\n    '\\uFF43': 'c',\n    '\\u0107': 'c',\n    '\\u0109': 'c',\n    '\\u010B': 'c',\n    '\\u010D': 'c',\n    '\\u00E7': 'c',\n    '\\u1E09': 'c',\n    '\\u0188': 'c',\n    '\\u023C': 'c',\n    '\\uA73F': 'c',\n    '\\u2184': 'c',\n    '\\u24D3': 'd',\n    '\\uFF44': 'd',\n    '\\u1E0B': 'd',\n    '\\u010F': 'd',\n    '\\u1E0D': 'd',\n    '\\u1E11': 'd',\n    '\\u1E13': 'd',\n    '\\u1E0F': 'd',\n    '\\u0111': 'd',\n    '\\u018C': 'd',\n    '\\u0256': 'd',\n    '\\u0257': 'd',\n    '\\uA77A': 'd',\n    '\\u01F3': 'dz',\n    '\\u01C6': 'dz',\n    '\\u24D4': 'e',\n    '\\uFF45': 'e',\n    '\\u00E8': 'e',\n    '\\u00E9': 'e',\n    '\\u00EA': 'e',\n    '\\u1EC1': 'e',\n    '\\u1EBF': 'e',\n    '\\u1EC5': 'e',\n    '\\u1EC3': 'e',\n    '\\u1EBD': 'e',\n    '\\u0113': 'e',\n    '\\u1E15': 'e',\n    '\\u1E17': 'e',\n    '\\u0115': 'e',\n    '\\u0117': 'e',\n    '\\u00EB': 'e',\n    '\\u1EBB': 'e',\n    '\\u011B': 'e',\n    '\\u0205': 'e',\n    '\\u0207': 'e',\n    '\\u1EB9': 'e',\n    '\\u1EC7': 'e',\n    '\\u0229': 'e',\n    '\\u1E1D': 'e',\n    '\\u0119': 'e',\n    '\\u1E19': 'e',\n    '\\u1E1B': 'e',\n    '\\u0247': 'e',\n    '\\u025B': 'e',\n    '\\u01DD': 'e',\n    '\\u24D5': 'f',\n    '\\uFF46': 'f',\n    '\\u1E1F': 'f',\n    '\\u0192': 'f',\n    '\\uA77C': 'f',\n    '\\u24D6': 'g',\n    '\\uFF47': 'g',\n    '\\u01F5': 'g',\n    '\\u011D': 'g',\n    '\\u1E21': 'g',\n    '\\u011F': 'g',\n    '\\u0121': 'g',\n    '\\u01E7': 'g',\n    '\\u0123': 'g',\n    '\\u01E5': 'g',\n    '\\u0260': 'g',\n    '\\uA7A1': 'g',\n    '\\u1D79': 'g',\n    '\\uA77F': 'g',\n    '\\u24D7': 'h',\n    '\\uFF48': 'h',\n    '\\u0125': 'h',\n    '\\u1E23': 'h',\n    '\\u1E27': 'h',\n    '\\u021F': 'h',\n    '\\u1E25': 'h',\n    '\\u1E29': 'h',\n    '\\u1E2B': 'h',\n    '\\u1E96': 'h',\n    '\\u0127': 'h',\n    '\\u2C68': 'h',\n    '\\u2C76': 'h',\n    '\\u0265': 'h',\n    '\\u0195': 'hv',\n    '\\u24D8': 'i',\n    '\\uFF49': 'i',\n    '\\u00EC': 'i',\n    '\\u00ED': 'i',\n    '\\u00EE': 'i',\n    '\\u0129': 'i',\n    '\\u012B': 'i',\n    '\\u012D': 'i',\n    '\\u00EF': 'i',\n    '\\u1E2F': 'i',\n    '\\u1EC9': 'i',\n    '\\u01D0': 'i',\n    '\\u0209': 'i',\n    '\\u020B': 'i',\n    '\\u1ECB': 'i',\n    '\\u012F': 'i',\n    '\\u1E2D': 'i',\n    '\\u0268': 'i',\n    '\\u0131': 'i',\n    '\\u24D9': 'j',\n    '\\uFF4A': 'j',\n    '\\u0135': 'j',\n    '\\u01F0': 'j',\n    '\\u0249': 'j',\n    '\\u24DA': 'k',\n    '\\uFF4B': 'k',\n    '\\u1E31': 'k',\n    '\\u01E9': 'k',\n    '\\u1E33': 'k',\n    '\\u0137': 'k',\n    '\\u1E35': 'k',\n    '\\u0199': 'k',\n    '\\u2C6A': 'k',\n    '\\uA741': 'k',\n    '\\uA743': 'k',\n    '\\uA745': 'k',\n    '\\uA7A3': 'k',\n    '\\u24DB': 'l',\n    '\\uFF4C': 'l',\n    '\\u0140': 'l',\n    '\\u013A': 'l',\n    '\\u013E': 'l',\n    '\\u1E37': 'l',\n    '\\u1E39': 'l',\n    '\\u013C': 'l',\n    '\\u1E3D': 'l',\n    '\\u1E3B': 'l',\n    '\\u017F': 'l',\n    '\\u0142': 'l',\n    '\\u019A': 'l',\n    '\\u026B': 'l',\n    '\\u2C61': 'l',\n    '\\uA749': 'l',\n    '\\uA781': 'l',\n    '\\uA747': 'l',\n    '\\u01C9': 'lj',\n    '\\u24DC': 'm',\n    '\\uFF4D': 'm',\n    '\\u1E3F': 'm',\n    '\\u1E41': 'm',\n    '\\u1E43': 'm',\n    '\\u0271': 'm',\n    '\\u026F': 'm',\n    '\\u24DD': 'n',\n    '\\uFF4E': 'n',\n    '\\u01F9': 'n',\n    '\\u0144': 'n',\n    '\\u00F1': 'n',\n    '\\u1E45': 'n',\n    '\\u0148': 'n',\n    '\\u1E47': 'n',\n    '\\u0146': 'n',\n    '\\u1E4B': 'n',\n    '\\u1E49': 'n',\n    '\\u019E': 'n',\n    '\\u0272': 'n',\n    '\\u0149': 'n',\n    '\\uA791': 'n',\n    '\\uA7A5': 'n',\n    '\\u01CC': 'nj',\n    '\\u24DE': 'o',\n    '\\uFF4F': 'o',\n    '\\u00F2': 'o',\n    '\\u00F3': 'o',\n    '\\u00F4': 'o',\n    '\\u1ED3': 'o',\n    '\\u1ED1': 'o',\n    '\\u1ED7': 'o',\n    '\\u1ED5': 'o',\n    '\\u00F5': 'o',\n    '\\u1E4D': 'o',\n    '\\u022D': 'o',\n    '\\u1E4F': 'o',\n    '\\u014D': 'o',\n    '\\u1E51': 'o',\n    '\\u1E53': 'o',\n    '\\u014F': 'o',\n    '\\u022F': 'o',\n    '\\u0231': 'o',\n    '\\u00F6': 'o',\n    '\\u022B': 'o',\n    '\\u1ECF': 'o',\n    '\\u0151': 'o',\n    '\\u01D2': 'o',\n    '\\u020D': 'o',\n    '\\u020F': 'o',\n    '\\u01A1': 'o',\n    '\\u1EDD': 'o',\n    '\\u1EDB': 'o',\n    '\\u1EE1': 'o',\n    '\\u1EDF': 'o',\n    '\\u1EE3': 'o',\n    '\\u1ECD': 'o',\n    '\\u1ED9': 'o',\n    '\\u01EB': 'o',\n    '\\u01ED': 'o',\n    '\\u00F8': 'o',\n    '\\u01FF': 'o',\n    '\\u0254': 'o',\n    '\\uA74B': 'o',\n    '\\uA74D': 'o',\n    '\\u0275': 'o',\n    '\\u0153': 'oe',\n    '\\u01A3': 'oi',\n    '\\u0223': 'ou',\n    '\\uA74F': 'oo',\n    '\\u24DF': 'p',\n    '\\uFF50': 'p',\n    '\\u1E55': 'p',\n    '\\u1E57': 'p',\n    '\\u01A5': 'p',\n    '\\u1D7D': 'p',\n    '\\uA751': 'p',\n    '\\uA753': 'p',\n    '\\uA755': 'p',\n    '\\u24E0': 'q',\n    '\\uFF51': 'q',\n    '\\u024B': 'q',\n    '\\uA757': 'q',\n    '\\uA759': 'q',\n    '\\u24E1': 'r',\n    '\\uFF52': 'r',\n    '\\u0155': 'r',\n    '\\u1E59': 'r',\n    '\\u0159': 'r',\n    '\\u0211': 'r',\n    '\\u0213': 'r',\n    '\\u1E5B': 'r',\n    '\\u1E5D': 'r',\n    '\\u0157': 'r',\n    '\\u1E5F': 'r',\n    '\\u024D': 'r',\n    '\\u027D': 'r',\n    '\\uA75B': 'r',\n    '\\uA7A7': 'r',\n    '\\uA783': 'r',\n    '\\u24E2': 's',\n    '\\uFF53': 's',\n    '\\u00DF': 's',\n    '\\u015B': 's',\n    '\\u1E65': 's',\n    '\\u015D': 's',\n    '\\u1E61': 's',\n    '\\u0161': 's',\n    '\\u1E67': 's',\n    '\\u1E63': 's',\n    '\\u1E69': 's',\n    '\\u0219': 's',\n    '\\u015F': 's',\n    '\\u023F': 's',\n    '\\uA7A9': 's',\n    '\\uA785': 's',\n    '\\u1E9B': 's',\n    '\\u24E3': 't',\n    '\\uFF54': 't',\n    '\\u1E6B': 't',\n    '\\u1E97': 't',\n    '\\u0165': 't',\n    '\\u1E6D': 't',\n    '\\u021B': 't',\n    '\\u0163': 't',\n    '\\u1E71': 't',\n    '\\u1E6F': 't',\n    '\\u0167': 't',\n    '\\u01AD': 't',\n    '\\u0288': 't',\n    '\\u2C66': 't',\n    '\\uA787': 't',\n    '\\uA729': 'tz',\n    '\\u24E4': 'u',\n    '\\uFF55': 'u',\n    '\\u00F9': 'u',\n    '\\u00FA': 'u',\n    '\\u00FB': 'u',\n    '\\u0169': 'u',\n    '\\u1E79': 'u',\n    '\\u016B': 'u',\n    '\\u1E7B': 'u',\n    '\\u016D': 'u',\n    '\\u00FC': 'u',\n    '\\u01DC': 'u',\n    '\\u01D8': 'u',\n    '\\u01D6': 'u',\n    '\\u01DA': 'u',\n    '\\u1EE7': 'u',\n    '\\u016F': 'u',\n    '\\u0171': 'u',\n    '\\u01D4': 'u',\n    '\\u0215': 'u',\n    '\\u0217': 'u',\n    '\\u01B0': 'u',\n    '\\u1EEB': 'u',\n    '\\u1EE9': 'u',\n    '\\u1EEF': 'u',\n    '\\u1EED': 'u',\n    '\\u1EF1': 'u',\n    '\\u1EE5': 'u',\n    '\\u1E73': 'u',\n    '\\u0173': 'u',\n    '\\u1E77': 'u',\n    '\\u1E75': 'u',\n    '\\u0289': 'u',\n    '\\u24E5': 'v',\n    '\\uFF56': 'v',\n    '\\u1E7D': 'v',\n    '\\u1E7F': 'v',\n    '\\u028B': 'v',\n    '\\uA75F': 'v',\n    '\\u028C': 'v',\n    '\\uA761': 'vy',\n    '\\u24E6': 'w',\n    '\\uFF57': 'w',\n    '\\u1E81': 'w',\n    '\\u1E83': 'w',\n    '\\u0175': 'w',\n    '\\u1E87': 'w',\n    '\\u1E85': 'w',\n    '\\u1E98': 'w',\n    '\\u1E89': 'w',\n    '\\u2C73': 'w',\n    '\\u24E7': 'x',\n    '\\uFF58': 'x',\n    '\\u1E8B': 'x',\n    '\\u1E8D': 'x',\n    '\\u24E8': 'y',\n    '\\uFF59': 'y',\n    '\\u1EF3': 'y',\n    '\\u00FD': 'y',\n    '\\u0177': 'y',\n    '\\u1EF9': 'y',\n    '\\u0233': 'y',\n    '\\u1E8F': 'y',\n    '\\u00FF': 'y',\n    '\\u1EF7': 'y',\n    '\\u1E99': 'y',\n    '\\u1EF5': 'y',\n    '\\u01B4': 'y',\n    '\\u024F': 'y',\n    '\\u1EFF': 'y',\n    '\\u24E9': 'z',\n    '\\uFF5A': 'z',\n    '\\u017A': 'z',\n    '\\u1E91': 'z',\n    '\\u017C': 'z',\n    '\\u017E': 'z',\n    '\\u1E93': 'z',\n    '\\u1E95': 'z',\n    '\\u01B6': 'z',\n    '\\u0225': 'z',\n    '\\u0240': 'z',\n    '\\u2C6C': 'z',\n    '\\uA763': 'z',\n    '\\u0386': '\\u0391',\n    '\\u0388': '\\u0395',\n    '\\u0389': '\\u0397',\n    '\\u038A': '\\u0399',\n    '\\u03AA': '\\u0399',\n    '\\u038C': '\\u039F',\n    '\\u038E': '\\u03A5',\n    '\\u03AB': '\\u03A5',\n    '\\u038F': '\\u03A9',\n    '\\u03AC': '\\u03B1',\n    '\\u03AD': '\\u03B5',\n    '\\u03AE': '\\u03B7',\n    '\\u03AF': '\\u03B9',\n    '\\u03CA': '\\u03B9',\n    '\\u0390': '\\u03B9',\n    '\\u03CC': '\\u03BF',\n    '\\u03CD': '\\u03C5',\n    '\\u03CB': '\\u03C5',\n    '\\u03B0': '\\u03C5',\n    '\\u03CE': '\\u03C9',\n    '\\u03C2': '\\u03C3',\n    '\\u2019': '\\''\n  };\n\n  return diacritics;\n});\n\nS2.define('select2/data/base',[\n  '../utils'\n], function (Utils) {\n  function BaseAdapter ($element, options) {\n    BaseAdapter.__super__.constructor.call(this);\n  }\n\n  Utils.Extend(BaseAdapter, Utils.Observable);\n\n  BaseAdapter.prototype.current = function (callback) {\n    throw new Error('The `current` method must be defined in child classes.');\n  };\n\n  BaseAdapter.prototype.query = function (params, callback) {\n    throw new Error('The `query` method must be defined in child classes.');\n  };\n\n  BaseAdapter.prototype.bind = function (container, $container) {\n    // Can be implemented in subclasses\n  };\n\n  BaseAdapter.prototype.destroy = function () {\n    // Can be implemented in subclasses\n  };\n\n  BaseAdapter.prototype.generateResultId = function (container, data) {\n    var id = container.id + '-result-';\n\n    id += Utils.generateChars(4);\n\n    if (data.id != null) {\n      id += '-' + data.id.toString();\n    } else {\n      id += '-' + Utils.generateChars(4);\n    }\n    return id;\n  };\n\n  return BaseAdapter;\n});\n\nS2.define('select2/data/select',[\n  './base',\n  '../utils',\n  'jquery'\n], function (BaseAdapter, Utils, $) {\n  function SelectAdapter ($element, options) {\n    this.$element = $element;\n    this.options = options;\n\n    SelectAdapter.__super__.constructor.call(this);\n  }\n\n  Utils.Extend(SelectAdapter, BaseAdapter);\n\n  SelectAdapter.prototype.current = function (callback) {\n    var data = [];\n    var self = this;\n\n    this.$element.find(':selected').each(function () {\n      var $option = $(this);\n\n      var option = self.item($option);\n\n      data.push(option);\n    });\n\n    callback(data);\n  };\n\n  SelectAdapter.prototype.select = function (data) {\n    var self = this;\n\n    data.selected = true;\n\n    // If data.element is a DOM node, use it instead\n    if ($(data.element).is('option')) {\n      data.element.selected = true;\n\n      this.$element.trigger('input').trigger('change');\n\n      return;\n    }\n\n    if (this.$element.prop('multiple')) {\n      this.current(function (currentData) {\n        var val = [];\n\n        data = [data];\n        data.push.apply(data, currentData);\n\n        for (var d = 0; d < data.length; d++) {\n          var id = data[d].id;\n\n          if ($.inArray(id, val) === -1) {\n            val.push(id);\n          }\n        }\n\n        self.$element.val(val);\n        self.$element.trigger('input').trigger('change');\n      });\n    } else {\n      var val = data.id;\n\n      this.$element.val(val);\n      this.$element.trigger('input').trigger('change');\n    }\n  };\n\n  SelectAdapter.prototype.unselect = function (data) {\n    var self = this;\n\n    if (!this.$element.prop('multiple')) {\n      return;\n    }\n\n    data.selected = false;\n\n    if ($(data.element).is('option')) {\n      data.element.selected = false;\n\n      this.$element.trigger('input').trigger('change');\n\n      return;\n    }\n\n    this.current(function (currentData) {\n      var val = [];\n\n      for (var d = 0; d < currentData.length; d++) {\n        var id = currentData[d].id;\n\n        if (id !== data.id && $.inArray(id, val) === -1) {\n          val.push(id);\n        }\n      }\n\n      self.$element.val(val);\n\n      self.$element.trigger('input').trigger('change');\n    });\n  };\n\n  SelectAdapter.prototype.bind = function (container, $container) {\n    var self = this;\n\n    this.container = container;\n\n    container.on('select', function (params) {\n      self.select(params.data);\n    });\n\n    container.on('unselect', function (params) {\n      self.unselect(params.data);\n    });\n  };\n\n  SelectAdapter.prototype.destroy = function () {\n    // Remove anything added to child elements\n    this.$element.find('*').each(function () {\n      // Remove any custom data set by Select2\n      Utils.RemoveData(this);\n    });\n  };\n\n  SelectAdapter.prototype.query = function (params, callback) {\n    var data = [];\n    var self = this;\n\n    var $options = this.$element.children();\n\n    $options.each(function () {\n      var $option = $(this);\n\n      if (!$option.is('option') && !$option.is('optgroup')) {\n        return;\n      }\n\n      var option = self.item($option);\n\n      var matches = self.matches(params, option);\n\n      if (matches !== null) {\n        data.push(matches);\n      }\n    });\n\n    callback({\n      results: data\n    });\n  };\n\n  SelectAdapter.prototype.addOptions = function ($options) {\n    Utils.appendMany(this.$element, $options);\n  };\n\n  SelectAdapter.prototype.option = function (data) {\n    var option;\n\n    if (data.children) {\n      option = document.createElement('optgroup');\n      option.label = data.text;\n    } else {\n      option = document.createElement('option');\n\n      if (option.textContent !== undefined) {\n        option.textContent = data.text;\n      } else {\n        option.innerText = data.text;\n      }\n    }\n\n    if (data.id !== undefined) {\n      option.value = data.id;\n    }\n\n    if (data.disabled) {\n      option.disabled = true;\n    }\n\n    if (data.selected) {\n      option.selected = true;\n    }\n\n    if (data.title) {\n      option.title = data.title;\n    }\n\n    var $option = $(option);\n\n    var normalizedData = this._normalizeItem(data);\n    normalizedData.element = option;\n\n    // Override the option's data with the combined data\n    Utils.StoreData(option, 'data', normalizedData);\n\n    return $option;\n  };\n\n  SelectAdapter.prototype.item = function ($option) {\n    var data = {};\n\n    data = Utils.GetData($option[0], 'data');\n\n    if (data != null) {\n      return data;\n    }\n\n    if ($option.is('option')) {\n      data = {\n        id: $option.val(),\n        text: $option.text(),\n        disabled: $option.prop('disabled'),\n        selected: $option.prop('selected'),\n        title: $option.prop('title')\n      };\n    } else if ($option.is('optgroup')) {\n      data = {\n        text: $option.prop('label'),\n        children: [],\n        title: $option.prop('title')\n      };\n\n      var $children = $option.children('option');\n      var children = [];\n\n      for (var c = 0; c < $children.length; c++) {\n        var $child = $($children[c]);\n\n        var child = this.item($child);\n\n        children.push(child);\n      }\n\n      data.children = children;\n    }\n\n    data = this._normalizeItem(data);\n    data.element = $option[0];\n\n    Utils.StoreData($option[0], 'data', data);\n\n    return data;\n  };\n\n  SelectAdapter.prototype._normalizeItem = function (item) {\n    if (item !== Object(item)) {\n      item = {\n        id: item,\n        text: item\n      };\n    }\n\n    item = $.extend({}, {\n      text: ''\n    }, item);\n\n    var defaults = {\n      selected: false,\n      disabled: false\n    };\n\n    if (item.id != null) {\n      item.id = item.id.toString();\n    }\n\n    if (item.text != null) {\n      item.text = item.text.toString();\n    }\n\n    if (item._resultId == null && item.id && this.container != null) {\n      item._resultId = this.generateResultId(this.container, item);\n    }\n\n    return $.extend({}, defaults, item);\n  };\n\n  SelectAdapter.prototype.matches = function (params, data) {\n    var matcher = this.options.get('matcher');\n\n    return matcher(params, data);\n  };\n\n  return SelectAdapter;\n});\n\nS2.define('select2/data/array',[\n  './select',\n  '../utils',\n  'jquery'\n], function (SelectAdapter, Utils, $) {\n  function ArrayAdapter ($element, options) {\n    this._dataToConvert = options.get('data') || [];\n\n    ArrayAdapter.__super__.constructor.call(this, $element, options);\n  }\n\n  Utils.Extend(ArrayAdapter, SelectAdapter);\n\n  ArrayAdapter.prototype.bind = function (container, $container) {\n    ArrayAdapter.__super__.bind.call(this, container, $container);\n\n    this.addOptions(this.convertToOptions(this._dataToConvert));\n  };\n\n  ArrayAdapter.prototype.select = function (data) {\n    var $option = this.$element.find('option').filter(function (i, elm) {\n      return elm.value == data.id.toString();\n    });\n\n    if ($option.length === 0) {\n      $option = this.option(data);\n\n      this.addOptions($option);\n    }\n\n    ArrayAdapter.__super__.select.call(this, data);\n  };\n\n  ArrayAdapter.prototype.convertToOptions = function (data) {\n    var self = this;\n\n    var $existing = this.$element.find('option');\n    var existingIds = $existing.map(function () {\n      return self.item($(this)).id;\n    }).get();\n\n    var $options = [];\n\n    // Filter out all items except for the one passed in the argument\n    function onlyItem (item) {\n      return function () {\n        return $(this).val() == item.id;\n      };\n    }\n\n    for (var d = 0; d < data.length; d++) {\n      var item = this._normalizeItem(data[d]);\n\n      // Skip items which were pre-loaded, only merge the data\n      if ($.inArray(item.id, existingIds) >= 0) {\n        var $existingOption = $existing.filter(onlyItem(item));\n\n        var existingData = this.item($existingOption);\n        var newData = $.extend(true, {}, item, existingData);\n\n        var $newOption = this.option(newData);\n\n        $existingOption.replaceWith($newOption);\n\n        continue;\n      }\n\n      var $option = this.option(item);\n\n      if (item.children) {\n        var $children = this.convertToOptions(item.children);\n\n        Utils.appendMany($option, $children);\n      }\n\n      $options.push($option);\n    }\n\n    return $options;\n  };\n\n  return ArrayAdapter;\n});\n\nS2.define('select2/data/ajax',[\n  './array',\n  '../utils',\n  'jquery'\n], function (ArrayAdapter, Utils, $) {\n  function AjaxAdapter ($element, options) {\n    this.ajaxOptions = this._applyDefaults(options.get('ajax'));\n\n    if (this.ajaxOptions.processResults != null) {\n      this.processResults = this.ajaxOptions.processResults;\n    }\n\n    AjaxAdapter.__super__.constructor.call(this, $element, options);\n  }\n\n  Utils.Extend(AjaxAdapter, ArrayAdapter);\n\n  AjaxAdapter.prototype._applyDefaults = function (options) {\n    var defaults = {\n      data: function (params) {\n        return $.extend({}, params, {\n          q: params.term\n        });\n      },\n      transport: function (params, success, failure) {\n        var $request = $.ajax(params);\n\n        $request.then(success);\n        $request.fail(failure);\n\n        return $request;\n      }\n    };\n\n    return $.extend({}, defaults, options, true);\n  };\n\n  AjaxAdapter.prototype.processResults = function (results) {\n    return results;\n  };\n\n  AjaxAdapter.prototype.query = function (params, callback) {\n    var matches = [];\n    var self = this;\n\n    if (this._request != null) {\n      // JSONP requests cannot always be aborted\n      if ($.isFunction(this._request.abort)) {\n        this._request.abort();\n      }\n\n      this._request = null;\n    }\n\n    var options = $.extend({\n      type: 'GET'\n    }, this.ajaxOptions);\n\n    if (typeof options.url === 'function') {\n      options.url = options.url.call(this.$element, params);\n    }\n\n    if (typeof options.data === 'function') {\n      options.data = options.data.call(this.$element, params);\n    }\n\n    function request () {\n      var $request = options.transport(options, function (data) {\n        var results = self.processResults(data, params);\n\n        if (self.options.get('debug') && window.console && console.error) {\n          // Check to make sure that the response included a `results` key.\n          if (!results || !results.results || !$.isArray(results.results)) {\n            console.error(\n              'Select2: The AJAX results did not return an array in the ' +\n              '`results` key of the response.'\n            );\n          }\n        }\n\n        callback(results);\n      }, function () {\n        // Attempt to detect if a request was aborted\n        // Only works if the transport exposes a status property\n        if ('status' in $request &&\n            ($request.status === 0 || $request.status === '0')) {\n          return;\n        }\n\n        self.trigger('results:message', {\n          message: 'errorLoading'\n        });\n      });\n\n      self._request = $request;\n    }\n\n    if (this.ajaxOptions.delay && params.term != null) {\n      if (this._queryTimeout) {\n        window.clearTimeout(this._queryTimeout);\n      }\n\n      this._queryTimeout = window.setTimeout(request, this.ajaxOptions.delay);\n    } else {\n      request();\n    }\n  };\n\n  return AjaxAdapter;\n});\n\nS2.define('select2/data/tags',[\n  'jquery'\n], function ($) {\n  function Tags (decorated, $element, options) {\n    var tags = options.get('tags');\n\n    var createTag = options.get('createTag');\n\n    if (createTag !== undefined) {\n      this.createTag = createTag;\n    }\n\n    var insertTag = options.get('insertTag');\n\n    if (insertTag !== undefined) {\n        this.insertTag = insertTag;\n    }\n\n    decorated.call(this, $element, options);\n\n    if ($.isArray(tags)) {\n      for (var t = 0; t < tags.length; t++) {\n        var tag = tags[t];\n        var item = this._normalizeItem(tag);\n\n        var $option = this.option(item);\n\n        this.$element.append($option);\n      }\n    }\n  }\n\n  Tags.prototype.query = function (decorated, params, callback) {\n    var self = this;\n\n    this._removeOldTags();\n\n    if (params.term == null || params.page != null) {\n      decorated.call(this, params, callback);\n      return;\n    }\n\n    function wrapper (obj, child) {\n      var data = obj.results;\n\n      for (var i = 0; i < data.length; i++) {\n        var option = data[i];\n\n        var checkChildren = (\n          option.children != null &&\n          !wrapper({\n            results: option.children\n          }, true)\n        );\n\n        var optionText = (option.text || '').toUpperCase();\n        var paramsTerm = (params.term || '').toUpperCase();\n\n        var checkText = optionText === paramsTerm;\n\n        if (checkText || checkChildren) {\n          if (child) {\n            return false;\n          }\n\n          obj.data = data;\n          callback(obj);\n\n          return;\n        }\n      }\n\n      if (child) {\n        return true;\n      }\n\n      var tag = self.createTag(params);\n\n      if (tag != null) {\n        var $option = self.option(tag);\n        $option.attr('data-select2-tag', true);\n\n        self.addOptions([$option]);\n\n        self.insertTag(data, tag);\n      }\n\n      obj.results = data;\n\n      callback(obj);\n    }\n\n    decorated.call(this, params, wrapper);\n  };\n\n  Tags.prototype.createTag = function (decorated, params) {\n    var term = $.trim(params.term);\n\n    if (term === '') {\n      return null;\n    }\n\n    return {\n      id: term,\n      text: term\n    };\n  };\n\n  Tags.prototype.insertTag = function (_, data, tag) {\n    data.unshift(tag);\n  };\n\n  Tags.prototype._removeOldTags = function (_) {\n    var $options = this.$element.find('option[data-select2-tag]');\n\n    $options.each(function () {\n      if (this.selected) {\n        return;\n      }\n\n      $(this).remove();\n    });\n  };\n\n  return Tags;\n});\n\nS2.define('select2/data/tokenizer',[\n  'jquery'\n], function ($) {\n  function Tokenizer (decorated, $element, options) {\n    var tokenizer = options.get('tokenizer');\n\n    if (tokenizer !== undefined) {\n      this.tokenizer = tokenizer;\n    }\n\n    decorated.call(this, $element, options);\n  }\n\n  Tokenizer.prototype.bind = function (decorated, container, $container) {\n    decorated.call(this, container, $container);\n\n    this.$search =  container.dropdown.$search || container.selection.$search ||\n      $container.find('.select2-search__field');\n  };\n\n  Tokenizer.prototype.query = function (decorated, params, callback) {\n    var self = this;\n\n    function createAndSelect (data) {\n      // Normalize the data object so we can use it for checks\n      var item = self._normalizeItem(data);\n\n      // Check if the data object already exists as a tag\n      // Select it if it doesn't\n      var $existingOptions = self.$element.find('option').filter(function () {\n        return $(this).val() === item.id;\n      });\n\n      // If an existing option wasn't found for it, create the option\n      if (!$existingOptions.length) {\n        var $option = self.option(item);\n        $option.attr('data-select2-tag', true);\n\n        self._removeOldTags();\n        self.addOptions([$option]);\n      }\n\n      // Select the item, now that we know there is an option for it\n      select(item);\n    }\n\n    function select (data) {\n      self.trigger('select', {\n        data: data\n      });\n    }\n\n    params.term = params.term || '';\n\n    var tokenData = this.tokenizer(params, this.options, createAndSelect);\n\n    if (tokenData.term !== params.term) {\n      // Replace the search term if we have the search box\n      if (this.$search.length) {\n        this.$search.val(tokenData.term);\n        this.$search.trigger('focus');\n      }\n\n      params.term = tokenData.term;\n    }\n\n    decorated.call(this, params, callback);\n  };\n\n  Tokenizer.prototype.tokenizer = function (_, params, options, callback) {\n    var separators = options.get('tokenSeparators') || [];\n    var term = params.term;\n    var i = 0;\n\n    var createTag = this.createTag || function (params) {\n      return {\n        id: params.term,\n        text: params.term\n      };\n    };\n\n    while (i < term.length) {\n      var termChar = term[i];\n\n      if ($.inArray(termChar, separators) === -1) {\n        i++;\n\n        continue;\n      }\n\n      var part = term.substr(0, i);\n      var partParams = $.extend({}, params, {\n        term: part\n      });\n\n      var data = createTag(partParams);\n\n      if (data == null) {\n        i++;\n        continue;\n      }\n\n      callback(data);\n\n      // Reset the term to not include the tokenized portion\n      term = term.substr(i + 1) || '';\n      i = 0;\n    }\n\n    return {\n      term: term\n    };\n  };\n\n  return Tokenizer;\n});\n\nS2.define('select2/data/minimumInputLength',[\n\n], function () {\n  function MinimumInputLength (decorated, $e, options) {\n    this.minimumInputLength = options.get('minimumInputLength');\n\n    decorated.call(this, $e, options);\n  }\n\n  MinimumInputLength.prototype.query = function (decorated, params, callback) {\n    params.term = params.term || '';\n\n    if (params.term.length < this.minimumInputLength) {\n      this.trigger('results:message', {\n        message: 'inputTooShort',\n        args: {\n          minimum: this.minimumInputLength,\n          input: params.term,\n          params: params\n        }\n      });\n\n      return;\n    }\n\n    decorated.call(this, params, callback);\n  };\n\n  return MinimumInputLength;\n});\n\nS2.define('select2/data/maximumInputLength',[\n\n], function () {\n  function MaximumInputLength (decorated, $e, options) {\n    this.maximumInputLength = options.get('maximumInputLength');\n\n    decorated.call(this, $e, options);\n  }\n\n  MaximumInputLength.prototype.query = function (decorated, params, callback) {\n    params.term = params.term || '';\n\n    if (this.maximumInputLength > 0 &&\n        params.term.length > this.maximumInputLength) {\n      this.trigger('results:message', {\n        message: 'inputTooLong',\n        args: {\n          maximum: this.maximumInputLength,\n          input: params.term,\n          params: params\n        }\n      });\n\n      return;\n    }\n\n    decorated.call(this, params, callback);\n  };\n\n  return MaximumInputLength;\n});\n\nS2.define('select2/data/maximumSelectionLength',[\n\n], function (){\n  function MaximumSelectionLength (decorated, $e, options) {\n    this.maximumSelectionLength = options.get('maximumSelectionLength');\n\n    decorated.call(this, $e, options);\n  }\n\n  MaximumSelectionLength.prototype.bind =\n    function (decorated, container, $container) {\n      var self = this;\n\n      decorated.call(this, container, $container);\n\n      container.on('select', function () {\n        self._checkIfMaximumSelected();\n      });\n  };\n\n  MaximumSelectionLength.prototype.query =\n    function (decorated, params, callback) {\n      var self = this;\n\n      this._checkIfMaximumSelected(function () {\n        decorated.call(self, params, callback);\n      });\n  };\n\n  MaximumSelectionLength.prototype._checkIfMaximumSelected =\n    function (_, successCallback) {\n      var self = this;\n\n      this.current(function (currentData) {\n        var count = currentData != null ? currentData.length : 0;\n        if (self.maximumSelectionLength > 0 &&\n          count >= self.maximumSelectionLength) {\n          self.trigger('results:message', {\n            message: 'maximumSelected',\n            args: {\n              maximum: self.maximumSelectionLength\n            }\n          });\n          return;\n        }\n\n        if (successCallback) {\n          successCallback();\n        }\n      });\n  };\n\n  return MaximumSelectionLength;\n});\n\nS2.define('select2/dropdown',[\n  'jquery',\n  './utils'\n], function ($, Utils) {\n  function Dropdown ($element, options) {\n    this.$element = $element;\n    this.options = options;\n\n    Dropdown.__super__.constructor.call(this);\n  }\n\n  Utils.Extend(Dropdown, Utils.Observable);\n\n  Dropdown.prototype.render = function () {\n    var $dropdown = $(\n      '<span class=\"select2-dropdown\">' +\n        '<span class=\"select2-results\"></span>' +\n      '</span>'\n    );\n\n    $dropdown.attr('dir', this.options.get('dir'));\n\n    this.$dropdown = $dropdown;\n\n    return $dropdown;\n  };\n\n  Dropdown.prototype.bind = function () {\n    // Should be implemented in subclasses\n  };\n\n  Dropdown.prototype.position = function ($dropdown, $container) {\n    // Should be implemented in subclasses\n  };\n\n  Dropdown.prototype.destroy = function () {\n    // Remove the dropdown from the DOM\n    this.$dropdown.remove();\n  };\n\n  return Dropdown;\n});\n\nS2.define('select2/dropdown/search',[\n  'jquery',\n  '../utils'\n], function ($, Utils) {\n  function Search () { }\n\n  Search.prototype.render = function (decorated) {\n    var $rendered = decorated.call(this);\n\n    var $search = $(\n      '<span class=\"select2-search select2-search--dropdown\">' +\n        '<input class=\"select2-search__field\" type=\"search\" tabindex=\"-1\"' +\n        ' autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"none\"' +\n        ' spellcheck=\"false\" role=\"searchbox\" aria-autocomplete=\"list\" />' +\n      '</span>'\n    );\n\n    this.$searchContainer = $search;\n    this.$search = $search.find('input');\n\n    $rendered.prepend($search);\n\n    return $rendered;\n  };\n\n  Search.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n\n    var resultsId = container.id + '-results';\n\n    decorated.call(this, container, $container);\n\n    this.$search.on('keydown', function (evt) {\n      self.trigger('keypress', evt);\n\n      self._keyUpPrevented = evt.isDefaultPrevented();\n    });\n\n    // Workaround for browsers which do not support the `input` event\n    // This will prevent double-triggering of events for browsers which support\n    // both the `keyup` and `input` events.\n    this.$search.on('input', function (evt) {\n      // Unbind the duplicated `keyup` event\n      $(this).off('keyup');\n    });\n\n    this.$search.on('keyup input', function (evt) {\n      self.handleSearch(evt);\n    });\n\n    container.on('open', function () {\n      self.$search.attr('tabindex', 0);\n      self.$search.attr('aria-controls', resultsId);\n\n      self.$search.trigger('focus');\n\n      window.setTimeout(function () {\n        self.$search.trigger('focus');\n      }, 0);\n    });\n\n    container.on('close', function () {\n      self.$search.attr('tabindex', -1);\n      self.$search.removeAttr('aria-controls');\n      self.$search.removeAttr('aria-activedescendant');\n\n      self.$search.val('');\n      self.$search.trigger('blur');\n    });\n\n    container.on('focus', function () {\n      if (!container.isOpen()) {\n        self.$search.trigger('focus');\n      }\n    });\n\n    container.on('results:all', function (params) {\n      if (params.query.term == null || params.query.term === '') {\n        var showSearch = self.showSearch(params);\n\n        if (showSearch) {\n          self.$searchContainer.removeClass('select2-search--hide');\n        } else {\n          self.$searchContainer.addClass('select2-search--hide');\n        }\n      }\n    });\n\n    container.on('results:focus', function (params) {\n      if (params.data._resultId) {\n        self.$search.attr('aria-activedescendant', params.data._resultId);\n      } else {\n        self.$search.removeAttr('aria-activedescendant');\n      }\n    });\n  };\n\n  Search.prototype.handleSearch = function (evt) {\n    if (!this._keyUpPrevented) {\n      var input = this.$search.val();\n\n      this.trigger('query', {\n        term: input\n      });\n    }\n\n    this._keyUpPrevented = false;\n  };\n\n  Search.prototype.showSearch = function (_, params) {\n    return true;\n  };\n\n  return Search;\n});\n\nS2.define('select2/dropdown/hidePlaceholder',[\n\n], function () {\n  function HidePlaceholder (decorated, $element, options, dataAdapter) {\n    this.placeholder = this.normalizePlaceholder(options.get('placeholder'));\n\n    decorated.call(this, $element, options, dataAdapter);\n  }\n\n  HidePlaceholder.prototype.append = function (decorated, data) {\n    data.results = this.removePlaceholder(data.results);\n\n    decorated.call(this, data);\n  };\n\n  HidePlaceholder.prototype.normalizePlaceholder = function (_, placeholder) {\n    if (typeof placeholder === 'string') {\n      placeholder = {\n        id: '',\n        text: placeholder\n      };\n    }\n\n    return placeholder;\n  };\n\n  HidePlaceholder.prototype.removePlaceholder = function (_, data) {\n    var modifiedData = data.slice(0);\n\n    for (var d = data.length - 1; d >= 0; d--) {\n      var item = data[d];\n\n      if (this.placeholder.id === item.id) {\n        modifiedData.splice(d, 1);\n      }\n    }\n\n    return modifiedData;\n  };\n\n  return HidePlaceholder;\n});\n\nS2.define('select2/dropdown/infiniteScroll',[\n  'jquery'\n], function ($) {\n  function InfiniteScroll (decorated, $element, options, dataAdapter) {\n    this.lastParams = {};\n\n    decorated.call(this, $element, options, dataAdapter);\n\n    this.$loadingMore = this.createLoadingMore();\n    this.loading = false;\n  }\n\n  InfiniteScroll.prototype.append = function (decorated, data) {\n    this.$loadingMore.remove();\n    this.loading = false;\n\n    decorated.call(this, data);\n\n    if (this.showLoadingMore(data)) {\n      this.$results.append(this.$loadingMore);\n      this.loadMoreIfNeeded();\n    }\n  };\n\n  InfiniteScroll.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n\n    decorated.call(this, container, $container);\n\n    container.on('query', function (params) {\n      self.lastParams = params;\n      self.loading = true;\n    });\n\n    container.on('query:append', function (params) {\n      self.lastParams = params;\n      self.loading = true;\n    });\n\n    this.$results.on('scroll', this.loadMoreIfNeeded.bind(this));\n  };\n\n  InfiniteScroll.prototype.loadMoreIfNeeded = function () {\n    var isLoadMoreVisible = $.contains(\n      document.documentElement,\n      this.$loadingMore[0]\n    );\n\n    if (this.loading || !isLoadMoreVisible) {\n      return;\n    }\n\n    var currentOffset = this.$results.offset().top +\n      this.$results.outerHeight(false);\n    var loadingMoreOffset = this.$loadingMore.offset().top +\n      this.$loadingMore.outerHeight(false);\n\n    if (currentOffset + 50 >= loadingMoreOffset) {\n      this.loadMore();\n    }\n  };\n\n  InfiniteScroll.prototype.loadMore = function () {\n    this.loading = true;\n\n    var params = $.extend({}, {page: 1}, this.lastParams);\n\n    params.page++;\n\n    this.trigger('query:append', params);\n  };\n\n  InfiniteScroll.prototype.showLoadingMore = function (_, data) {\n    return data.pagination && data.pagination.more;\n  };\n\n  InfiniteScroll.prototype.createLoadingMore = function () {\n    var $option = $(\n      '<li ' +\n      'class=\"select2-results__option select2-results__option--load-more\"' +\n      'role=\"option\" aria-disabled=\"true\"></li>'\n    );\n\n    var message = this.options.get('translations').get('loadingMore');\n\n    $option.html(message(this.lastParams));\n\n    return $option;\n  };\n\n  return InfiniteScroll;\n});\n\nS2.define('select2/dropdown/attachBody',[\n  'jquery',\n  '../utils'\n], function ($, Utils) {\n  function AttachBody (decorated, $element, options) {\n    this.$dropdownParent = $(options.get('dropdownParent') || document.body);\n\n    decorated.call(this, $element, options);\n  }\n\n  AttachBody.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n\n    decorated.call(this, container, $container);\n\n    container.on('open', function () {\n      self._showDropdown();\n      self._attachPositioningHandler(container);\n\n      // Must bind after the results handlers to ensure correct sizing\n      self._bindContainerResultHandlers(container);\n    });\n\n    container.on('close', function () {\n      self._hideDropdown();\n      self._detachPositioningHandler(container);\n    });\n\n    this.$dropdownContainer.on('mousedown', function (evt) {\n      evt.stopPropagation();\n    });\n  };\n\n  AttachBody.prototype.destroy = function (decorated) {\n    decorated.call(this);\n\n    this.$dropdownContainer.remove();\n  };\n\n  AttachBody.prototype.position = function (decorated, $dropdown, $container) {\n    // Clone all of the container classes\n    $dropdown.attr('class', $container.attr('class'));\n\n    $dropdown.removeClass('select2');\n    $dropdown.addClass('select2-container--open');\n\n    $dropdown.css({\n      position: 'absolute',\n      top: -999999\n    });\n\n    this.$container = $container;\n  };\n\n  AttachBody.prototype.render = function (decorated) {\n    var $container = $('<span></span>');\n\n    var $dropdown = decorated.call(this);\n    $container.append($dropdown);\n\n    this.$dropdownContainer = $container;\n\n    return $container;\n  };\n\n  AttachBody.prototype._hideDropdown = function (decorated) {\n    this.$dropdownContainer.detach();\n  };\n\n  AttachBody.prototype._bindContainerResultHandlers =\n      function (decorated, container) {\n\n    // These should only be bound once\n    if (this._containerResultsHandlersBound) {\n      return;\n    }\n\n    var self = this;\n\n    container.on('results:all', function () {\n      self._positionDropdown();\n      self._resizeDropdown();\n    });\n\n    container.on('results:append', function () {\n      self._positionDropdown();\n      self._resizeDropdown();\n    });\n\n    container.on('results:message', function () {\n      self._positionDropdown();\n      self._resizeDropdown();\n    });\n\n    container.on('select', function () {\n      self._positionDropdown();\n      self._resizeDropdown();\n    });\n\n    container.on('unselect', function () {\n      self._positionDropdown();\n      self._resizeDropdown();\n    });\n\n    this._containerResultsHandlersBound = true;\n  };\n\n  AttachBody.prototype._attachPositioningHandler =\n      function (decorated, container) {\n    var self = this;\n\n    var scrollEvent = 'scroll.select2.' + container.id;\n    var resizeEvent = 'resize.select2.' + container.id;\n    var orientationEvent = 'orientationchange.select2.' + container.id;\n\n    var $watchers = this.$container.parents().filter(Utils.hasScroll);\n    $watchers.each(function () {\n      Utils.StoreData(this, 'select2-scroll-position', {\n        x: $(this).scrollLeft(),\n        y: $(this).scrollTop()\n      });\n    });\n\n    $watchers.on(scrollEvent, function (ev) {\n      var position = Utils.GetData(this, 'select2-scroll-position');\n      $(this).scrollTop(position.y);\n    });\n\n    $(window).on(scrollEvent + ' ' + resizeEvent + ' ' + orientationEvent,\n      function (e) {\n      self._positionDropdown();\n      self._resizeDropdown();\n    });\n  };\n\n  AttachBody.prototype._detachPositioningHandler =\n      function (decorated, container) {\n    var scrollEvent = 'scroll.select2.' + container.id;\n    var resizeEvent = 'resize.select2.' + container.id;\n    var orientationEvent = 'orientationchange.select2.' + container.id;\n\n    var $watchers = this.$container.parents().filter(Utils.hasScroll);\n    $watchers.off(scrollEvent);\n\n    $(window).off(scrollEvent + ' ' + resizeEvent + ' ' + orientationEvent);\n  };\n\n  AttachBody.prototype._positionDropdown = function () {\n    var $window = $(window);\n\n    var isCurrentlyAbove = this.$dropdown.hasClass('select2-dropdown--above');\n    var isCurrentlyBelow = this.$dropdown.hasClass('select2-dropdown--below');\n\n    var newDirection = null;\n\n    var offset = this.$container.offset();\n\n    offset.bottom = offset.top + this.$container.outerHeight(false);\n\n    var container = {\n      height: this.$container.outerHeight(false)\n    };\n\n    container.top = offset.top;\n    container.bottom = offset.top + container.height;\n\n    var dropdown = {\n      height: this.$dropdown.outerHeight(false)\n    };\n\n    var viewport = {\n      top: $window.scrollTop(),\n      bottom: $window.scrollTop() + $window.height()\n    };\n\n    var enoughRoomAbove = viewport.top < (offset.top - dropdown.height);\n    var enoughRoomBelow = viewport.bottom > (offset.bottom + dropdown.height);\n\n    var css = {\n      left: offset.left,\n      top: container.bottom\n    };\n\n    // Determine what the parent element is to use for calculating the offset\n    var $offsetParent = this.$dropdownParent;\n\n    // For statically positioned elements, we need to get the element\n    // that is determining the offset\n    if ($offsetParent.css('position') === 'static') {\n      $offsetParent = $offsetParent.offsetParent();\n    }\n\n    var parentOffset = {\n      top: 0,\n      left: 0\n    };\n\n    if (\n      $.contains(document.body, $offsetParent[0]) ||\n      $offsetParent[0].isConnected\n      ) {\n      parentOffset = $offsetParent.offset();\n    }\n\n    css.top -= parentOffset.top;\n    css.left -= parentOffset.left;\n\n    if (!isCurrentlyAbove && !isCurrentlyBelow) {\n      newDirection = 'below';\n    }\n\n    if (!enoughRoomBelow && enoughRoomAbove && !isCurrentlyAbove) {\n      newDirection = 'above';\n    } else if (!enoughRoomAbove && enoughRoomBelow && isCurrentlyAbove) {\n      newDirection = 'below';\n    }\n\n    if (newDirection == 'above' ||\n      (isCurrentlyAbove && newDirection !== 'below')) {\n      css.top = container.top - parentOffset.top - dropdown.height;\n    }\n\n    if (newDirection != null) {\n      this.$dropdown\n        .removeClass('select2-dropdown--below select2-dropdown--above')\n        .addClass('select2-dropdown--' + newDirection);\n      this.$container\n        .removeClass('select2-container--below select2-container--above')\n        .addClass('select2-container--' + newDirection);\n    }\n\n    this.$dropdownContainer.css(css);\n  };\n\n  AttachBody.prototype._resizeDropdown = function () {\n    var css = {\n      width: this.$container.outerWidth(false) + 'px'\n    };\n\n    if (this.options.get('dropdownAutoWidth')) {\n      css.minWidth = css.width;\n      css.position = 'relative';\n      css.width = 'auto';\n    }\n\n    this.$dropdown.css(css);\n  };\n\n  AttachBody.prototype._showDropdown = function (decorated) {\n    this.$dropdownContainer.appendTo(this.$dropdownParent);\n\n    this._positionDropdown();\n    this._resizeDropdown();\n  };\n\n  return AttachBody;\n});\n\nS2.define('select2/dropdown/minimumResultsForSearch',[\n\n], function () {\n  function countResults (data) {\n    var count = 0;\n\n    for (var d = 0; d < data.length; d++) {\n      var item = data[d];\n\n      if (item.children) {\n        count += countResults(item.children);\n      } else {\n        count++;\n      }\n    }\n\n    return count;\n  }\n\n  function MinimumResultsForSearch (decorated, $element, options, dataAdapter) {\n    this.minimumResultsForSearch = options.get('minimumResultsForSearch');\n\n    if (this.minimumResultsForSearch < 0) {\n      this.minimumResultsForSearch = Infinity;\n    }\n\n    decorated.call(this, $element, options, dataAdapter);\n  }\n\n  MinimumResultsForSearch.prototype.showSearch = function (decorated, params) {\n    if (countResults(params.data.results) < this.minimumResultsForSearch) {\n      return false;\n    }\n\n    return decorated.call(this, params);\n  };\n\n  return MinimumResultsForSearch;\n});\n\nS2.define('select2/dropdown/selectOnClose',[\n  '../utils'\n], function (Utils) {\n  function SelectOnClose () { }\n\n  SelectOnClose.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n\n    decorated.call(this, container, $container);\n\n    container.on('close', function (params) {\n      self._handleSelectOnClose(params);\n    });\n  };\n\n  SelectOnClose.prototype._handleSelectOnClose = function (_, params) {\n    if (params && params.originalSelect2Event != null) {\n      var event = params.originalSelect2Event;\n\n      // Don't select an item if the close event was triggered from a select or\n      // unselect event\n      if (event._type === 'select' || event._type === 'unselect') {\n        return;\n      }\n    }\n\n    var $highlightedResults = this.getHighlightedResults();\n\n    // Only select highlighted results\n    if ($highlightedResults.length < 1) {\n      return;\n    }\n\n    var data = Utils.GetData($highlightedResults[0], 'data');\n\n    // Don't re-select already selected resulte\n    if (\n      (data.element != null && data.element.selected) ||\n      (data.element == null && data.selected)\n    ) {\n      return;\n    }\n\n    this.trigger('select', {\n        data: data\n    });\n  };\n\n  return SelectOnClose;\n});\n\nS2.define('select2/dropdown/closeOnSelect',[\n\n], function () {\n  function CloseOnSelect () { }\n\n  CloseOnSelect.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n\n    decorated.call(this, container, $container);\n\n    container.on('select', function (evt) {\n      self._selectTriggered(evt);\n    });\n\n    container.on('unselect', function (evt) {\n      self._selectTriggered(evt);\n    });\n  };\n\n  CloseOnSelect.prototype._selectTriggered = function (_, evt) {\n    var originalEvent = evt.originalEvent;\n\n    // Don't close if the control key is being held\n    if (originalEvent && (originalEvent.ctrlKey || originalEvent.metaKey)) {\n      return;\n    }\n\n    this.trigger('close', {\n      originalEvent: originalEvent,\n      originalSelect2Event: evt\n    });\n  };\n\n  return CloseOnSelect;\n});\n\nS2.define('select2/i18n/en',[],function () {\n  // English\n  return {\n    errorLoading: function () {\n      return 'The results could not be loaded.';\n    },\n    inputTooLong: function (args) {\n      var overChars = args.input.length - args.maximum;\n\n      var message = 'Please delete ' + overChars + ' character';\n\n      if (overChars != 1) {\n        message += 's';\n      }\n\n      return message;\n    },\n    inputTooShort: function (args) {\n      var remainingChars = args.minimum - args.input.length;\n\n      var message = 'Please enter ' + remainingChars + ' or more characters';\n\n      return message;\n    },\n    loadingMore: function () {\n      return 'Loading more results…';\n    },\n    maximumSelected: function (args) {\n      var message = 'You can only select ' + args.maximum + ' item';\n\n      if (args.maximum != 1) {\n        message += 's';\n      }\n\n      return message;\n    },\n    noResults: function () {\n      return 'No results found';\n    },\n    searching: function () {\n      return 'Searching…';\n    },\n    removeAllItems: function () {\n      return 'Remove all items';\n    }\n  };\n});\n\nS2.define('select2/defaults',[\n  'jquery',\n  'require',\n\n  './results',\n\n  './selection/single',\n  './selection/multiple',\n  './selection/placeholder',\n  './selection/allowClear',\n  './selection/search',\n  './selection/eventRelay',\n\n  './utils',\n  './translation',\n  './diacritics',\n\n  './data/select',\n  './data/array',\n  './data/ajax',\n  './data/tags',\n  './data/tokenizer',\n  './data/minimumInputLength',\n  './data/maximumInputLength',\n  './data/maximumSelectionLength',\n\n  './dropdown',\n  './dropdown/search',\n  './dropdown/hidePlaceholder',\n  './dropdown/infiniteScroll',\n  './dropdown/attachBody',\n  './dropdown/minimumResultsForSearch',\n  './dropdown/selectOnClose',\n  './dropdown/closeOnSelect',\n\n  './i18n/en'\n], function ($, require,\n\n             ResultsList,\n\n             SingleSelection, MultipleSelection, Placeholder, AllowClear,\n             SelectionSearch, EventRelay,\n\n             Utils, Translation, DIACRITICS,\n\n             SelectData, ArrayData, AjaxData, Tags, Tokenizer,\n             MinimumInputLength, MaximumInputLength, MaximumSelectionLength,\n\n             Dropdown, DropdownSearch, HidePlaceholder, InfiniteScroll,\n             AttachBody, MinimumResultsForSearch, SelectOnClose, CloseOnSelect,\n\n             EnglishTranslation) {\n  function Defaults () {\n    this.reset();\n  }\n\n  Defaults.prototype.apply = function (options) {\n    options = $.extend(true, {}, this.defaults, options);\n\n    if (options.dataAdapter == null) {\n      if (options.ajax != null) {\n        options.dataAdapter = AjaxData;\n      } else if (options.data != null) {\n        options.dataAdapter = ArrayData;\n      } else {\n        options.dataAdapter = SelectData;\n      }\n\n      if (options.minimumInputLength > 0) {\n        options.dataAdapter = Utils.Decorate(\n          options.dataAdapter,\n          MinimumInputLength\n        );\n      }\n\n      if (options.maximumInputLength > 0) {\n        options.dataAdapter = Utils.Decorate(\n          options.dataAdapter,\n          MaximumInputLength\n        );\n      }\n\n      if (options.maximumSelectionLength > 0) {\n        options.dataAdapter = Utils.Decorate(\n          options.dataAdapter,\n          MaximumSelectionLength\n        );\n      }\n\n      if (options.tags) {\n        options.dataAdapter = Utils.Decorate(options.dataAdapter, Tags);\n      }\n\n      if (options.tokenSeparators != null || options.tokenizer != null) {\n        options.dataAdapter = Utils.Decorate(\n          options.dataAdapter,\n          Tokenizer\n        );\n      }\n\n      if (options.query != null) {\n        var Query = require(options.amdBase + 'compat/query');\n\n        options.dataAdapter = Utils.Decorate(\n          options.dataAdapter,\n          Query\n        );\n      }\n\n      if (options.initSelection != null) {\n        var InitSelection = require(options.amdBase + 'compat/initSelection');\n\n        options.dataAdapter = Utils.Decorate(\n          options.dataAdapter,\n          InitSelection\n        );\n      }\n    }\n\n    if (options.resultsAdapter == null) {\n      options.resultsAdapter = ResultsList;\n\n      if (options.ajax != null) {\n        options.resultsAdapter = Utils.Decorate(\n          options.resultsAdapter,\n          InfiniteScroll\n        );\n      }\n\n      if (options.placeholder != null) {\n        options.resultsAdapter = Utils.Decorate(\n          options.resultsAdapter,\n          HidePlaceholder\n        );\n      }\n\n      if (options.selectOnClose) {\n        options.resultsAdapter = Utils.Decorate(\n          options.resultsAdapter,\n          SelectOnClose\n        );\n      }\n    }\n\n    if (options.dropdownAdapter == null) {\n      if (options.multiple) {\n        options.dropdownAdapter = Dropdown;\n      } else {\n        var SearchableDropdown = Utils.Decorate(Dropdown, DropdownSearch);\n\n        options.dropdownAdapter = SearchableDropdown;\n      }\n\n      if (options.minimumResultsForSearch !== 0) {\n        options.dropdownAdapter = Utils.Decorate(\n          options.dropdownAdapter,\n          MinimumResultsForSearch\n        );\n      }\n\n      if (options.closeOnSelect) {\n        options.dropdownAdapter = Utils.Decorate(\n          options.dropdownAdapter,\n          CloseOnSelect\n        );\n      }\n\n      if (\n        options.dropdownCssClass != null ||\n        options.dropdownCss != null ||\n        options.adaptDropdownCssClass != null\n      ) {\n        var DropdownCSS = require(options.amdBase + 'compat/dropdownCss');\n\n        options.dropdownAdapter = Utils.Decorate(\n          options.dropdownAdapter,\n          DropdownCSS\n        );\n      }\n\n      options.dropdownAdapter = Utils.Decorate(\n        options.dropdownAdapter,\n        AttachBody\n      );\n    }\n\n    if (options.selectionAdapter == null) {\n      if (options.multiple) {\n        options.selectionAdapter = MultipleSelection;\n      } else {\n        options.selectionAdapter = SingleSelection;\n      }\n\n      // Add the placeholder mixin if a placeholder was specified\n      if (options.placeholder != null) {\n        options.selectionAdapter = Utils.Decorate(\n          options.selectionAdapter,\n          Placeholder\n        );\n      }\n\n      if (options.allowClear) {\n        options.selectionAdapter = Utils.Decorate(\n          options.selectionAdapter,\n          AllowClear\n        );\n      }\n\n      if (options.multiple) {\n        options.selectionAdapter = Utils.Decorate(\n          options.selectionAdapter,\n          SelectionSearch\n        );\n      }\n\n      if (\n        options.containerCssClass != null ||\n        options.containerCss != null ||\n        options.adaptContainerCssClass != null\n      ) {\n        var ContainerCSS = require(options.amdBase + 'compat/containerCss');\n\n        options.selectionAdapter = Utils.Decorate(\n          options.selectionAdapter,\n          ContainerCSS\n        );\n      }\n\n      options.selectionAdapter = Utils.Decorate(\n        options.selectionAdapter,\n        EventRelay\n      );\n    }\n\n    // If the defaults were not previously applied from an element, it is\n    // possible for the language option to have not been resolved\n    options.language = this._resolveLanguage(options.language);\n\n    // Always fall back to English since it will always be complete\n    options.language.push('en');\n\n    var uniqueLanguages = [];\n\n    for (var l = 0; l < options.language.length; l++) {\n      var language = options.language[l];\n\n      if (uniqueLanguages.indexOf(language) === -1) {\n        uniqueLanguages.push(language);\n      }\n    }\n\n    options.language = uniqueLanguages;\n\n    options.translations = this._processTranslations(\n      options.language,\n      options.debug\n    );\n\n    return options;\n  };\n\n  Defaults.prototype.reset = function () {\n    function stripDiacritics (text) {\n      // Used 'uni range + named function' from http://jsperf.com/diacritics/18\n      function match(a) {\n        return DIACRITICS[a] || a;\n      }\n\n      return text.replace(/[^\\u0000-\\u007E]/g, match);\n    }\n\n    function matcher (params, data) {\n      // Always return the object if there is nothing to compare\n      if ($.trim(params.term) === '') {\n        return data;\n      }\n\n      // Do a recursive check for options with children\n      if (data.children && data.children.length > 0) {\n        // Clone the data object if there are children\n        // This is required as we modify the object to remove any non-matches\n        var match = $.extend(true, {}, data);\n\n        // Check each child of the option\n        for (var c = data.children.length - 1; c >= 0; c--) {\n          var child = data.children[c];\n\n          var matches = matcher(params, child);\n\n          // If there wasn't a match, remove the object in the array\n          if (matches == null) {\n            match.children.splice(c, 1);\n          }\n        }\n\n        // If any children matched, return the new object\n        if (match.children.length > 0) {\n          return match;\n        }\n\n        // If there were no matching children, check just the plain object\n        return matcher(params, match);\n      }\n\n      var original = stripDiacritics(data.text).toUpperCase();\n      var term = stripDiacritics(params.term).toUpperCase();\n\n      // Check if the text contains the term\n      if (original.indexOf(term) > -1) {\n        return data;\n      }\n\n      // If it doesn't contain the term, don't return anything\n      return null;\n    }\n\n    this.defaults = {\n      amdBase: './',\n      amdLanguageBase: './i18n/',\n      closeOnSelect: true,\n      debug: false,\n      dropdownAutoWidth: false,\n      escapeMarkup: Utils.escapeMarkup,\n      language: {},\n      matcher: matcher,\n      minimumInputLength: 0,\n      maximumInputLength: 0,\n      maximumSelectionLength: 0,\n      minimumResultsForSearch: 0,\n      selectOnClose: false,\n      scrollAfterSelect: false,\n      sorter: function (data) {\n        return data;\n      },\n      templateResult: function (result) {\n        return result.text;\n      },\n      templateSelection: function (selection) {\n        return selection.text;\n      },\n      theme: 'default',\n      width: 'resolve'\n    };\n  };\n\n  Defaults.prototype.applyFromElement = function (options, $element) {\n    var optionLanguage = options.language;\n    var defaultLanguage = this.defaults.language;\n    var elementLanguage = $element.prop('lang');\n    var parentLanguage = $element.closest('[lang]').prop('lang');\n\n    var languages = Array.prototype.concat.call(\n      this._resolveLanguage(elementLanguage),\n      this._resolveLanguage(optionLanguage),\n      this._resolveLanguage(defaultLanguage),\n      this._resolveLanguage(parentLanguage)\n    );\n\n    options.language = languages;\n\n    return options;\n  };\n\n  Defaults.prototype._resolveLanguage = function (language) {\n    if (!language) {\n      return [];\n    }\n\n    if ($.isEmptyObject(language)) {\n      return [];\n    }\n\n    if ($.isPlainObject(language)) {\n      return [language];\n    }\n\n    var languages;\n\n    if (!$.isArray(language)) {\n      languages = [language];\n    } else {\n      languages = language;\n    }\n\n    var resolvedLanguages = [];\n\n    for (var l = 0; l < languages.length; l++) {\n      resolvedLanguages.push(languages[l]);\n\n      if (typeof languages[l] === 'string' && languages[l].indexOf('-') > 0) {\n        // Extract the region information if it is included\n        var languageParts = languages[l].split('-');\n        var baseLanguage = languageParts[0];\n\n        resolvedLanguages.push(baseLanguage);\n      }\n    }\n\n    return resolvedLanguages;\n  };\n\n  Defaults.prototype._processTranslations = function (languages, debug) {\n    var translations = new Translation();\n\n    for (var l = 0; l < languages.length; l++) {\n      var languageData = new Translation();\n\n      var language = languages[l];\n\n      if (typeof language === 'string') {\n        try {\n          // Try to load it with the original name\n          languageData = Translation.loadPath(language);\n        } catch (e) {\n          try {\n            // If we couldn't load it, check if it wasn't the full path\n            language = this.defaults.amdLanguageBase + language;\n            languageData = Translation.loadPath(language);\n          } catch (ex) {\n            // The translation could not be loaded at all. Sometimes this is\n            // because of a configuration problem, other times this can be\n            // because of how Select2 helps load all possible translation files\n            if (debug && window.console && console.warn) {\n              console.warn(\n                'Select2: The language file for \"' + language + '\" could ' +\n                'not be automatically loaded. A fallback will be used instead.'\n              );\n            }\n          }\n        }\n      } else if ($.isPlainObject(language)) {\n        languageData = new Translation(language);\n      } else {\n        languageData = language;\n      }\n\n      translations.extend(languageData);\n    }\n\n    return translations;\n  };\n\n  Defaults.prototype.set = function (key, value) {\n    var camelKey = $.camelCase(key);\n\n    var data = {};\n    data[camelKey] = value;\n\n    var convertedData = Utils._convertData(data);\n\n    $.extend(true, this.defaults, convertedData);\n  };\n\n  var defaults = new Defaults();\n\n  return defaults;\n});\n\nS2.define('select2/options',[\n  'require',\n  'jquery',\n  './defaults',\n  './utils'\n], function (require, $, Defaults, Utils) {\n  function Options (options, $element) {\n    this.options = options;\n\n    if ($element != null) {\n      this.fromElement($element);\n    }\n\n    if ($element != null) {\n      this.options = Defaults.applyFromElement(this.options, $element);\n    }\n\n    this.options = Defaults.apply(this.options);\n\n    if ($element && $element.is('input')) {\n      var InputCompat = require(this.get('amdBase') + 'compat/inputData');\n\n      this.options.dataAdapter = Utils.Decorate(\n        this.options.dataAdapter,\n        InputCompat\n      );\n    }\n  }\n\n  Options.prototype.fromElement = function ($e) {\n    var excludedData = ['select2'];\n\n    if (this.options.multiple == null) {\n      this.options.multiple = $e.prop('multiple');\n    }\n\n    if (this.options.disabled == null) {\n      this.options.disabled = $e.prop('disabled');\n    }\n\n    if (this.options.dir == null) {\n      if ($e.prop('dir')) {\n        this.options.dir = $e.prop('dir');\n      } else if ($e.closest('[dir]').prop('dir')) {\n        this.options.dir = $e.closest('[dir]').prop('dir');\n      } else {\n        this.options.dir = 'ltr';\n      }\n    }\n\n    $e.prop('disabled', this.options.disabled);\n    $e.prop('multiple', this.options.multiple);\n\n    if (Utils.GetData($e[0], 'select2Tags')) {\n      if (this.options.debug && window.console && console.warn) {\n        console.warn(\n          'Select2: The `data-select2-tags` attribute has been changed to ' +\n          'use the `data-data` and `data-tags=\"true\"` attributes and will be ' +\n          'removed in future versions of Select2.'\n        );\n      }\n\n      Utils.StoreData($e[0], 'data', Utils.GetData($e[0], 'select2Tags'));\n      Utils.StoreData($e[0], 'tags', true);\n    }\n\n    if (Utils.GetData($e[0], 'ajaxUrl')) {\n      if (this.options.debug && window.console && console.warn) {\n        console.warn(\n          'Select2: The `data-ajax-url` attribute has been changed to ' +\n          '`data-ajax--url` and support for the old attribute will be removed' +\n          ' in future versions of Select2.'\n        );\n      }\n\n      $e.attr('ajax--url', Utils.GetData($e[0], 'ajaxUrl'));\n      Utils.StoreData($e[0], 'ajax-Url', Utils.GetData($e[0], 'ajaxUrl'));\n    }\n\n    var dataset = {};\n\n    function upperCaseLetter(_, letter) {\n      return letter.toUpperCase();\n    }\n\n    // Pre-load all of the attributes which are prefixed with `data-`\n    for (var attr = 0; attr < $e[0].attributes.length; attr++) {\n      var attributeName = $e[0].attributes[attr].name;\n      var prefix = 'data-';\n\n      if (attributeName.substr(0, prefix.length) == prefix) {\n        // Get the contents of the attribute after `data-`\n        var dataName = attributeName.substring(prefix.length);\n\n        // Get the data contents from the consistent source\n        // This is more than likely the jQuery data helper\n        var dataValue = Utils.GetData($e[0], dataName);\n\n        // camelCase the attribute name to match the spec\n        var camelDataName = dataName.replace(/-([a-z])/g, upperCaseLetter);\n\n        // Store the data attribute contents into the dataset since\n        dataset[camelDataName] = dataValue;\n      }\n    }\n\n    // Prefer the element's `dataset` attribute if it exists\n    // jQuery 1.x does not correctly handle data attributes with multiple dashes\n    if ($.fn.jquery && $.fn.jquery.substr(0, 2) == '1.' && $e[0].dataset) {\n      dataset = $.extend(true, {}, $e[0].dataset, dataset);\n    }\n\n    // Prefer our internal data cache if it exists\n    var data = $.extend(true, {}, Utils.GetData($e[0]), dataset);\n\n    data = Utils._convertData(data);\n\n    for (var key in data) {\n      if ($.inArray(key, excludedData) > -1) {\n        continue;\n      }\n\n      if ($.isPlainObject(this.options[key])) {\n        $.extend(this.options[key], data[key]);\n      } else {\n        this.options[key] = data[key];\n      }\n    }\n\n    return this;\n  };\n\n  Options.prototype.get = function (key) {\n    return this.options[key];\n  };\n\n  Options.prototype.set = function (key, val) {\n    this.options[key] = val;\n  };\n\n  return Options;\n});\n\nS2.define('select2/core',[\n  'jquery',\n  './options',\n  './utils',\n  './keys'\n], function ($, Options, Utils, KEYS) {\n  var Select2 = function ($element, options) {\n    if (Utils.GetData($element[0], 'select2') != null) {\n      Utils.GetData($element[0], 'select2').destroy();\n    }\n\n    this.$element = $element;\n\n    this.id = this._generateId($element);\n\n    options = options || {};\n\n    this.options = new Options(options, $element);\n\n    Select2.__super__.constructor.call(this);\n\n    // Set up the tabindex\n\n    var tabindex = $element.attr('tabindex') || 0;\n    Utils.StoreData($element[0], 'old-tabindex', tabindex);\n    $element.attr('tabindex', '-1');\n\n    // Set up containers and adapters\n\n    var DataAdapter = this.options.get('dataAdapter');\n    this.dataAdapter = new DataAdapter($element, this.options);\n\n    var $container = this.render();\n\n    this._placeContainer($container);\n\n    var SelectionAdapter = this.options.get('selectionAdapter');\n    this.selection = new SelectionAdapter($element, this.options);\n    this.$selection = this.selection.render();\n\n    this.selection.position(this.$selection, $container);\n\n    var DropdownAdapter = this.options.get('dropdownAdapter');\n    this.dropdown = new DropdownAdapter($element, this.options);\n    this.$dropdown = this.dropdown.render();\n\n    this.dropdown.position(this.$dropdown, $container);\n\n    var ResultsAdapter = this.options.get('resultsAdapter');\n    this.results = new ResultsAdapter($element, this.options, this.dataAdapter);\n    this.$results = this.results.render();\n\n    this.results.position(this.$results, this.$dropdown);\n\n    // Bind events\n\n    var self = this;\n\n    // Bind the container to all of the adapters\n    this._bindAdapters();\n\n    // Register any DOM event handlers\n    this._registerDomEvents();\n\n    // Register any internal event handlers\n    this._registerDataEvents();\n    this._registerSelectionEvents();\n    this._registerDropdownEvents();\n    this._registerResultsEvents();\n    this._registerEvents();\n\n    // Set the initial state\n    this.dataAdapter.current(function (initialData) {\n      self.trigger('selection:update', {\n        data: initialData\n      });\n    });\n\n    // Hide the original select\n    $element.addClass('select2-hidden-accessible');\n    $element.attr('aria-hidden', 'true');\n\n    // Synchronize any monitored attributes\n    this._syncAttributes();\n\n    Utils.StoreData($element[0], 'select2', this);\n\n    // Ensure backwards compatibility with $element.data('select2').\n    $element.data('select2', this);\n  };\n\n  Utils.Extend(Select2, Utils.Observable);\n\n  Select2.prototype._generateId = function ($element) {\n    var id = '';\n\n    if ($element.attr('id') != null) {\n      id = $element.attr('id');\n    } else if ($element.attr('name') != null) {\n      id = $element.attr('name') + '-' + Utils.generateChars(2);\n    } else {\n      id = Utils.generateChars(4);\n    }\n\n    id = id.replace(/(:|\\.|\\[|\\]|,)/g, '');\n    id = 'select2-' + id;\n\n    return id;\n  };\n\n  Select2.prototype._placeContainer = function ($container) {\n    $container.insertAfter(this.$element);\n\n    var width = this._resolveWidth(this.$element, this.options.get('width'));\n\n    if (width != null) {\n      $container.css('width', width);\n    }\n  };\n\n  Select2.prototype._resolveWidth = function ($element, method) {\n    var WIDTH = /^width:(([-+]?([0-9]*\\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/i;\n\n    if (method == 'resolve') {\n      var styleWidth = this._resolveWidth($element, 'style');\n\n      if (styleWidth != null) {\n        return styleWidth;\n      }\n\n      return this._resolveWidth($element, 'element');\n    }\n\n    if (method == 'element') {\n      var elementWidth = $element.outerWidth(false);\n\n      if (elementWidth <= 0) {\n        return 'auto';\n      }\n\n      return elementWidth + 'px';\n    }\n\n    if (method == 'style') {\n      var style = $element.attr('style');\n\n      if (typeof(style) !== 'string') {\n        return null;\n      }\n\n      var attrs = style.split(';');\n\n      for (var i = 0, l = attrs.length; i < l; i = i + 1) {\n        var attr = attrs[i].replace(/\\s/g, '');\n        var matches = attr.match(WIDTH);\n\n        if (matches !== null && matches.length >= 1) {\n          return matches[1];\n        }\n      }\n\n      return null;\n    }\n\n    if (method == 'computedstyle') {\n      var computedStyle = window.getComputedStyle($element[0]);\n\n      return computedStyle.width;\n    }\n\n    return method;\n  };\n\n  Select2.prototype._bindAdapters = function () {\n    this.dataAdapter.bind(this, this.$container);\n    this.selection.bind(this, this.$container);\n\n    this.dropdown.bind(this, this.$container);\n    this.results.bind(this, this.$container);\n  };\n\n  Select2.prototype._registerDomEvents = function () {\n    var self = this;\n\n    this.$element.on('change.select2', function () {\n      self.dataAdapter.current(function (data) {\n        self.trigger('selection:update', {\n          data: data\n        });\n      });\n    });\n\n    this.$element.on('focus.select2', function (evt) {\n      self.trigger('focus', evt);\n    });\n\n    this._syncA = Utils.bind(this._syncAttributes, this);\n    this._syncS = Utils.bind(this._syncSubtree, this);\n\n    if (this.$element[0].attachEvent) {\n      this.$element[0].attachEvent('onpropertychange', this._syncA);\n    }\n\n    var observer = window.MutationObserver ||\n      window.WebKitMutationObserver ||\n      window.MozMutationObserver\n    ;\n\n    if (observer != null) {\n      this._observer = new observer(function (mutations) {\n        self._syncA();\n        self._syncS(null, mutations);\n      });\n      this._observer.observe(this.$element[0], {\n        attributes: true,\n        childList: true,\n        subtree: false\n      });\n    } else if (this.$element[0].addEventListener) {\n      this.$element[0].addEventListener(\n        'DOMAttrModified',\n        self._syncA,\n        false\n      );\n      this.$element[0].addEventListener(\n        'DOMNodeInserted',\n        self._syncS,\n        false\n      );\n      this.$element[0].addEventListener(\n        'DOMNodeRemoved',\n        self._syncS,\n        false\n      );\n    }\n  };\n\n  Select2.prototype._registerDataEvents = function () {\n    var self = this;\n\n    this.dataAdapter.on('*', function (name, params) {\n      self.trigger(name, params);\n    });\n  };\n\n  Select2.prototype._registerSelectionEvents = function () {\n    var self = this;\n    var nonRelayEvents = ['toggle', 'focus'];\n\n    this.selection.on('toggle', function () {\n      self.toggleDropdown();\n    });\n\n    this.selection.on('focus', function (params) {\n      self.focus(params);\n    });\n\n    this.selection.on('*', function (name, params) {\n      if ($.inArray(name, nonRelayEvents) !== -1) {\n        return;\n      }\n\n      self.trigger(name, params);\n    });\n  };\n\n  Select2.prototype._registerDropdownEvents = function () {\n    var self = this;\n\n    this.dropdown.on('*', function (name, params) {\n      self.trigger(name, params);\n    });\n  };\n\n  Select2.prototype._registerResultsEvents = function () {\n    var self = this;\n\n    this.results.on('*', function (name, params) {\n      self.trigger(name, params);\n    });\n  };\n\n  Select2.prototype._registerEvents = function () {\n    var self = this;\n\n    this.on('open', function () {\n      self.$container.addClass('select2-container--open');\n    });\n\n    this.on('close', function () {\n      self.$container.removeClass('select2-container--open');\n    });\n\n    this.on('enable', function () {\n      self.$container.removeClass('select2-container--disabled');\n    });\n\n    this.on('disable', function () {\n      self.$container.addClass('select2-container--disabled');\n    });\n\n    this.on('blur', function () {\n      self.$container.removeClass('select2-container--focus');\n    });\n\n    this.on('query', function (params) {\n      if (!self.isOpen()) {\n        self.trigger('open', {});\n      }\n\n      this.dataAdapter.query(params, function (data) {\n        self.trigger('results:all', {\n          data: data,\n          query: params\n        });\n      });\n    });\n\n    this.on('query:append', function (params) {\n      this.dataAdapter.query(params, function (data) {\n        self.trigger('results:append', {\n          data: data,\n          query: params\n        });\n      });\n    });\n\n    this.on('keypress', function (evt) {\n      var key = evt.which;\n\n      if (self.isOpen()) {\n        if (key === KEYS.ESC || key === KEYS.TAB ||\n            (key === KEYS.UP && evt.altKey)) {\n          self.close(evt);\n\n          evt.preventDefault();\n        } else if (key === KEYS.ENTER) {\n          self.trigger('results:select', {});\n\n          evt.preventDefault();\n        } else if ((key === KEYS.SPACE && evt.ctrlKey)) {\n          self.trigger('results:toggle', {});\n\n          evt.preventDefault();\n        } else if (key === KEYS.UP) {\n          self.trigger('results:previous', {});\n\n          evt.preventDefault();\n        } else if (key === KEYS.DOWN) {\n          self.trigger('results:next', {});\n\n          evt.preventDefault();\n        }\n      } else {\n        if (key === KEYS.ENTER || key === KEYS.SPACE ||\n            (key === KEYS.DOWN && evt.altKey)) {\n          self.open();\n\n          evt.preventDefault();\n        }\n      }\n    });\n  };\n\n  Select2.prototype._syncAttributes = function () {\n    this.options.set('disabled', this.$element.prop('disabled'));\n\n    if (this.isDisabled()) {\n      if (this.isOpen()) {\n        this.close();\n      }\n\n      this.trigger('disable', {});\n    } else {\n      this.trigger('enable', {});\n    }\n  };\n\n  Select2.prototype._isChangeMutation = function (evt, mutations) {\n    var changed = false;\n    var self = this;\n\n    // Ignore any mutation events raised for elements that aren't options or\n    // optgroups. This handles the case when the select element is destroyed\n    if (\n      evt && evt.target && (\n        evt.target.nodeName !== 'OPTION' && evt.target.nodeName !== 'OPTGROUP'\n      )\n    ) {\n      return;\n    }\n\n    if (!mutations) {\n      // If mutation events aren't supported, then we can only assume that the\n      // change affected the selections\n      changed = true;\n    } else if (mutations.addedNodes && mutations.addedNodes.length > 0) {\n      for (var n = 0; n < mutations.addedNodes.length; n++) {\n        var node = mutations.addedNodes[n];\n\n        if (node.selected) {\n          changed = true;\n        }\n      }\n    } else if (mutations.removedNodes && mutations.removedNodes.length > 0) {\n      changed = true;\n    } else if ($.isArray(mutations)) {\n      $.each(mutations, function(evt, mutation) {\n        if (self._isChangeMutation(evt, mutation)) {\n          // We've found a change mutation.\n          // Let's escape from the loop and continue\n          changed = true;\n          return false;\n        }\n      });\n    }\n    return changed;\n  };\n\n  Select2.prototype._syncSubtree = function (evt, mutations) {\n    var changed = this._isChangeMutation(evt, mutations);\n    var self = this;\n\n    // Only re-pull the data if we think there is a change\n    if (changed) {\n      this.dataAdapter.current(function (currentData) {\n        self.trigger('selection:update', {\n          data: currentData\n        });\n      });\n    }\n  };\n\n  /**\n   * Override the trigger method to automatically trigger pre-events when\n   * there are events that can be prevented.\n   */\n  Select2.prototype.trigger = function (name, args) {\n    var actualTrigger = Select2.__super__.trigger;\n    var preTriggerMap = {\n      'open': 'opening',\n      'close': 'closing',\n      'select': 'selecting',\n      'unselect': 'unselecting',\n      'clear': 'clearing'\n    };\n\n    if (args === undefined) {\n      args = {};\n    }\n\n    if (name in preTriggerMap) {\n      var preTriggerName = preTriggerMap[name];\n      var preTriggerArgs = {\n        prevented: false,\n        name: name,\n        args: args\n      };\n\n      actualTrigger.call(this, preTriggerName, preTriggerArgs);\n\n      if (preTriggerArgs.prevented) {\n        args.prevented = true;\n\n        return;\n      }\n    }\n\n    actualTrigger.call(this, name, args);\n  };\n\n  Select2.prototype.toggleDropdown = function () {\n    if (this.isDisabled()) {\n      return;\n    }\n\n    if (this.isOpen()) {\n      this.close();\n    } else {\n      this.open();\n    }\n  };\n\n  Select2.prototype.open = function () {\n    if (this.isOpen()) {\n      return;\n    }\n\n    if (this.isDisabled()) {\n      return;\n    }\n\n    this.trigger('query', {});\n  };\n\n  Select2.prototype.close = function (evt) {\n    if (!this.isOpen()) {\n      return;\n    }\n\n    this.trigger('close', { originalEvent : evt });\n  };\n\n  /**\n   * Helper method to abstract the \"enabled\" (not \"disabled\") state of this\n   * object.\n   *\n   * @return {true} if the instance is not disabled.\n   * @return {false} if the instance is disabled.\n   */\n  Select2.prototype.isEnabled = function () {\n    return !this.isDisabled();\n  };\n\n  /**\n   * Helper method to abstract the \"disabled\" state of this object.\n   *\n   * @return {true} if the disabled option is true.\n   * @return {false} if the disabled option is false.\n   */\n  Select2.prototype.isDisabled = function () {\n    return this.options.get('disabled');\n  };\n\n  Select2.prototype.isOpen = function () {\n    return this.$container.hasClass('select2-container--open');\n  };\n\n  Select2.prototype.hasFocus = function () {\n    return this.$container.hasClass('select2-container--focus');\n  };\n\n  Select2.prototype.focus = function (data) {\n    // No need to re-trigger focus events if we are already focused\n    if (this.hasFocus()) {\n      return;\n    }\n\n    this.$container.addClass('select2-container--focus');\n    this.trigger('focus', {});\n  };\n\n  Select2.prototype.enable = function (args) {\n    if (this.options.get('debug') && window.console && console.warn) {\n      console.warn(\n        'Select2: The `select2(\"enable\")` method has been deprecated and will' +\n        ' be removed in later Select2 versions. Use $element.prop(\"disabled\")' +\n        ' instead.'\n      );\n    }\n\n    if (args == null || args.length === 0) {\n      args = [true];\n    }\n\n    var disabled = !args[0];\n\n    this.$element.prop('disabled', disabled);\n  };\n\n  Select2.prototype.data = function () {\n    if (this.options.get('debug') &&\n        arguments.length > 0 && window.console && console.warn) {\n      console.warn(\n        'Select2: Data can no longer be set using `select2(\"data\")`. You ' +\n        'should consider setting the value instead using `$element.val()`.'\n      );\n    }\n\n    var data = [];\n\n    this.dataAdapter.current(function (currentData) {\n      data = currentData;\n    });\n\n    return data;\n  };\n\n  Select2.prototype.val = function (args) {\n    if (this.options.get('debug') && window.console && console.warn) {\n      console.warn(\n        'Select2: The `select2(\"val\")` method has been deprecated and will be' +\n        ' removed in later Select2 versions. Use $element.val() instead.'\n      );\n    }\n\n    if (args == null || args.length === 0) {\n      return this.$element.val();\n    }\n\n    var newVal = args[0];\n\n    if ($.isArray(newVal)) {\n      newVal = $.map(newVal, function (obj) {\n        return obj.toString();\n      });\n    }\n\n    this.$element.val(newVal).trigger('input').trigger('change');\n  };\n\n  Select2.prototype.destroy = function () {\n    this.$container.remove();\n\n    if (this.$element[0].detachEvent) {\n      this.$element[0].detachEvent('onpropertychange', this._syncA);\n    }\n\n    if (this._observer != null) {\n      this._observer.disconnect();\n      this._observer = null;\n    } else if (this.$element[0].removeEventListener) {\n      this.$element[0]\n        .removeEventListener('DOMAttrModified', this._syncA, false);\n      this.$element[0]\n        .removeEventListener('DOMNodeInserted', this._syncS, false);\n      this.$element[0]\n        .removeEventListener('DOMNodeRemoved', this._syncS, false);\n    }\n\n    this._syncA = null;\n    this._syncS = null;\n\n    this.$element.off('.select2');\n    this.$element.attr('tabindex',\n    Utils.GetData(this.$element[0], 'old-tabindex'));\n\n    this.$element.removeClass('select2-hidden-accessible');\n    this.$element.attr('aria-hidden', 'false');\n    Utils.RemoveData(this.$element[0]);\n    this.$element.removeData('select2');\n\n    this.dataAdapter.destroy();\n    this.selection.destroy();\n    this.dropdown.destroy();\n    this.results.destroy();\n\n    this.dataAdapter = null;\n    this.selection = null;\n    this.dropdown = null;\n    this.results = null;\n  };\n\n  Select2.prototype.render = function () {\n    var $container = $(\n      '<span class=\"select2 select2-container\">' +\n        '<span class=\"selection\"></span>' +\n        '<span class=\"dropdown-wrapper\" aria-hidden=\"true\"></span>' +\n      '</span>'\n    );\n\n    $container.attr('dir', this.options.get('dir'));\n\n    this.$container = $container;\n\n    this.$container.addClass('select2-container--' + this.options.get('theme'));\n\n    Utils.StoreData($container[0], 'element', this.$element);\n\n    return $container;\n  };\n\n  return Select2;\n});\n\nS2.define('jquery-mousewheel',[\n  'jquery'\n], function ($) {\n  // Used to shim jQuery.mousewheel for non-full builds.\n  return $;\n});\n\nS2.define('jquery.select2',[\n  'jquery',\n  'jquery-mousewheel',\n\n  './select2/core',\n  './select2/defaults',\n  './select2/utils'\n], function ($, _, Select2, Defaults, Utils) {\n  if ($.fn.select2 == null) {\n    // All methods that should return the element\n    var thisMethods = ['open', 'close', 'destroy'];\n\n    $.fn.select2 = function (options) {\n      options = options || {};\n\n      if (typeof options === 'object') {\n        this.each(function () {\n          var instanceOptions = $.extend(true, {}, options);\n\n          var instance = new Select2($(this), instanceOptions);\n        });\n\n        return this;\n      } else if (typeof options === 'string') {\n        var ret;\n        var args = Array.prototype.slice.call(arguments, 1);\n\n        this.each(function () {\n          var instance = Utils.GetData(this, 'select2');\n\n          if (instance == null && window.console && console.error) {\n            console.error(\n              'The select2(\\'' + options + '\\') method was called on an ' +\n              'element that is not using Select2.'\n            );\n          }\n\n          ret = instance[options].apply(instance, args);\n        });\n\n        // Check if we should be returning `this`\n        if ($.inArray(options, thisMethods) > -1) {\n          return this;\n        }\n\n        return ret;\n      } else {\n        throw new Error('Invalid arguments for Select2: ' + options);\n      }\n    };\n  }\n\n  if ($.fn.select2.defaults == null) {\n    $.fn.select2.defaults = Defaults;\n  }\n\n  return Select2;\n});\n\n  // Return the AMD loader configuration so it can be used outside of this file\n  return {\n    define: S2.define,\n    require: S2.require\n  };\n}());\n\n  // Autoload the jQuery bindings\n  // We know that all of the modules exist above this, so we're safe\n  var select2 = S2.require('jquery.select2');\n\n  // Hold the AMD module references on the jQuery function that was just loaded\n  // This allows Select2 to use the internal loader outside of this file, such\n  // as in the language files.\n  jQuery.fn.select2.amd = S2;\n\n  // Return the Select2 instance for anyone who is importing it.\n  return select2;\n}));\n","import { outerHeight } from './utils/HTML';\r\n\r\n\r\nexport class GlobalAreaChangeEvent {\r\n  type = 'global-area-change';\r\n  target?: Element;\r\n  height: number;\r\n\r\n  constructor(element?: Element) {\r\n    this.target = element;\r\n    this.height = element ? outerHeight(element, true) : 0;\r\n  }\r\n\r\n}\r\n","import { autoinject, bindable, customElement, containerless } from 'aurelia-framework';\r\n\r\n@containerless()\r\n@customElement('app-tile')\r\n@autoinject()\r\nexport class AppTile {\r\n  @bindable public id?: number;\r\n  @bindable public name?: string;\r\n  @bindable public description?: string;\r\n  @bindable public icon?: string;\r\n  @bindable public kpi?: string;\r\n  @bindable public unit?: string;\r\n\r\n  @bindable public clickHandler: any;\r\n\r\n  doClick($event: MouseEvent, data: any) {\r\n    if (this.clickHandler != null) {\r\n      this.clickHandler($event, data);\r\n    }\r\n  }\r\n\r\n  onEnterPress(event: KeyboardEvent) {\r\n    const enterButtonKeyCode = 13;\r\n    if (event.keyCode === enterButtonKeyCode && this.clickHandler) {\r\n      const activeElement = document.activeElement as HTMLElement;\r\n      activeElement?.click();\r\n    }\r\n    return true;\r\n  }\r\n}\r\n","import { autoinject, bindable, customElement } from 'aurelia-framework';\r\n\r\n@autoinject\r\n@customElement('app-tiles-container')\r\nexport class AppTilesContainer {\r\n  @bindable headerTitle?: string;\r\n\r\n  id: string;\r\n  private static uid = 0;\r\n  constructor() {\r\n    this.id = '' + (++AppTilesContainer.uid);\r\n  }\r\n}\r\n","import { autoinject, bindable } from 'aurelia-framework';\r\nimport { createPopper, Instance } from '@popperjs/core';\r\nimport _ from 'lodash';\r\n\r\nimport './au-dropdown.scss';\r\n\r\n@autoinject\r\nexport class AuDropdownCustomAttribute {\r\n  private dropdown?: Instance;\r\n  private isShow = false;\r\n  \r\n  @bindable trigger: string = 'hover';\r\n  @bindable menu?: HTMLElement;\r\n  @bindable hideDelay = 300;\r\n  @bindable showArrow = true;\r\n  @bindable autoCloseAfterClick = true;\r\n  @bindable hasArrow = false;\r\n  @bindable strategy: 'absolute' | 'fixed' = 'absolute';\r\n\r\n  @bindable onShow?: () => void;\r\n  @bindable onHide?: () => void;\r\n\r\n  innerMenuContainer?: HTMLElement;\r\n  innerMenu?: HTMLElement;\r\n\r\n  hoverMenu: boolean = false;\r\n  hoverTrigger: boolean = false;\r\n\r\n  constructor(private element: Element) {}\r\n\r\n  attached() {\r\n    if(this.trigger === 'hover'){\r\n      this.hoverBehavior();\r\n    }else{\r\n      this.clickBehavior();\r\n    }\r\n\r\n  }\r\n\r\n  hoverBehavior(){\r\n    this.element.addEventListener('mouseenter', () => {\r\n      this.hoverTrigger = true;\r\n      this.show();\r\n\r\n      this.innerMenu?.addEventListener('mouseenter', () => {\r\n        this.hoverMenu = true;\r\n      });\r\n      this.innerMenu?.addEventListener('mouseleave', _.debounce(() => {\r\n        this.hoverMenu = false;\r\n        if(!this.hoverTrigger){\r\n          this.hide();\r\n        }\r\n      }, this.hideDelay));\r\n\r\n      if(this.autoCloseAfterClick){\r\n        this.innerMenu?.addEventListener('click', () => {\r\n          this.hoverMenu = false;\r\n          this.hide();\r\n        })\r\n      }\r\n    });\r\n\r\n    this.element.addEventListener('mouseleave', _.debounce(() => {\r\n      this.hoverTrigger = false;\r\n      if(!this.hoverMenu){\r\n        this.hide();\r\n      }\r\n    }, this.hideDelay));\r\n  }\r\n\r\n  show(){\r\n    this.createDropdown();\r\n    this.innerMenu?.classList.add('show');\r\n    this.isShow = true;\r\n    this.onShow && this.onShow();\r\n  }\r\n\r\n\r\n  hide(){\r\n    this.innerMenu?.classList.remove('show');\r\n    this.clearMenuFromBody();\r\n    this.dropdown?.destroy();\r\n    this.isShow = false;\r\n    this.onHide && this.onHide();\r\n  }\r\n\r\n  clickBehavior(){\r\n    this.element.addEventListener('click', () => {\r\n      \r\n      if(this.isShow){\r\n        this.hide();\r\n      }else{\r\n        this.show();\r\n      }\r\n\r\n      if(this.autoCloseAfterClick){\r\n        this.innerMenu?.addEventListener('click', () => {\r\n          this.hoverMenu = false;\r\n          this.hide();\r\n        })\r\n      }\r\n    });\r\n\r\n    document.addEventListener('click', this.outsideClickHandler);\r\n  }\r\n\r\n  detached() {\r\n    this.hide();\r\n    this.dropdown?.destroy();\r\n  }\r\n\r\n  private outsideClickHandler = (e: MouseEvent) => {\r\n    if((e.target !== this.element && !this.element.contains(e.target as Node)) && (e.target as HTMLElement).closest('.au-dropdown-menu') !== this.innerMenu){\r\n      this.hide()\r\n    }\r\n  }\r\n\r\n  private cloneMenuToBody(){\r\n    if(this.innerMenuContainer ) {\r\n      return;\r\n    }\r\n    this.innerMenuContainer = document.createElement('div');\r\n    this.innerMenuContainer.classList.add('au-dropdown-menu-container');\r\n    document.body.appendChild(this.innerMenuContainer);\r\n    this.innerMenu = this.menu as HTMLElement; this.menu?.cloneNode(true) as HTMLElement;\r\n    this.innerMenu.classList.add('au-dropdown-menu-container');\r\n\r\n    if(this.showArrow && !this.hasArrow){\r\n      const arrow = document.createElement('div');\r\n      arrow.setAttribute('data-popper-arrow', '');\r\n      this.innerMenu.prepend(arrow);\r\n      this.hasArrow = true;\r\n    }\r\n\r\n  }\r\n\r\n  private clearMenuFromBody(){\r\n    this.innerMenuContainer?.remove();\r\n    this.innerMenu = undefined;\r\n    this.innerMenuContainer = undefined;\r\n  }\r\n\r\n  private createDropdown(){\r\n    if(!this.menu){\r\n      throw new Error(`Can't create dropdown. Menu element doesn't provided`);\r\n    }\r\n    this.cloneMenuToBody();\r\n    this.dropdown = createPopper(this.element, this.innerMenu!, {\r\n      placement: 'bottom-end',\r\n      strategy: this.strategy,\r\n      modifiers: [\r\n        {\r\n          name: 'arrow',\r\n          options: {\r\n            element: '[data-popper-arrow]',\r\n          }\r\n        },\r\n        {\r\n          name: 'offset',\r\n          options: {\r\n            offset: [0, 8]\r\n          }\r\n        }\r\n      ]\r\n    })\r\n  }\r\n}\r\n","import { autoinject, bindable, customElement } from 'aurelia-framework';\r\n\r\n@autoinject\r\n@customElement('content-container')\r\nexport class ContentContainer {\r\n  @bindable headerTitle?: string;\r\n  @bindable collapsible: boolean = false;\r\n  @bindable expanded: boolean = true;\r\n\r\n  id: string;\r\n  private static uid = 0;\r\n  constructor() {\r\n    this.id = '' + (++ContentContainer.uid);\r\n  }\r\n}\r\n","import { bindable, inject, customElement, bindingMode } from 'aurelia-framework';\r\n\r\n// Import JSPM modules we installed earlier\r\n// import $ from 'jquery';\r\nimport 'select2/dist/js/select2.full.js';\r\nimport 'select2/dist/css/select2.css';\r\nimport './custom-select.scss';\r\n\r\ntype selectOption = {\r\n  id: string,\r\n  text: string\r\n}\r\n\r\n@customElement('select2') // Define the name of our custom element\r\n@inject(Element) // Inject the instance of this element\r\nexport class CustomSelect {\r\n  @bindable({ defaultBindingMode: bindingMode.twoWay }) selected?: string;\r\n  @bindable options: string[] = [];\r\n  @bindable disabled: boolean = false;\r\n  @bindable defaultValue: string = '08:00';\r\n  private _select: any;\r\n  private requireOpen: boolean = false;\r\n  constructor(private element: Element) {\r\n  }\r\n\r\n  // Once the Custom Element has its DOM instantiated and ready for binding\r\n  // to happenings within the DOM itself\r\n  attached() {\r\n    this._select = $(this.element).find('select');\r\n    this.init(this.options);\r\n  }\r\n\r\n  optionsChanged(newValue: string[], oldValue: string[]) {\r\n    if (this._select && newValue && oldValue\r\n      && !((newValue.length == oldValue.length) && newValue.every((a, i) => a == oldValue[i]))\r\n    ) {\r\n      this._select.select2('destroy');\r\n      $(this._select).find('option').remove();\r\n      let options: selectOption[] = newValue.map(function (x) {\r\n        return { id: x, text: x }\r\n\r\n      });\r\n      this.init(options);\r\n    }\r\n  }\r\n\r\n  private init(options: any[]) {\r\n    let self = this;\r\n    this._select\r\n      .select2({\r\n        minimumResultsForSearch: Infinity,\r\n        data: options || [],\r\n        width: 'style',\r\n        dropdownAutoWidth: true,\r\n        theme: 'bootstrap'\r\n      })\r\n      .on('change', (event: Event) => {\r\n        self.triggerUpdate((event.target as HTMLInputElement).value);\r\n      })\r\n      .on('select2:opening', (e: Event) => {\r\n        if (!self.selected && self.options && self.defaultValue && self.options.indexOf(self.defaultValue) != -1) {\r\n          self.selected = self.defaultValue;\r\n          e.preventDefault();\r\n          setTimeout(() => {\r\n            if (!this.disabled) {\r\n              self._select.select2('open');\r\n            } else {\r\n              self.requireOpen = true;\r\n            }\r\n          }, 200);\r\n        }\r\n      });\r\n\r\n    if (this.selected && this.options.indexOf(this.selected) != -1) {\r\n      this.selectedChanged(this.selected, null)\r\n    }\r\n  }\r\n\r\n  selectedChanged(newValue: string, oldValue: string | null) {\r\n    if (!newValue && !oldValue) {\r\n      return;\r\n    }\r\n\r\n    if (this._select && oldValue !== newValue) {\r\n      this._select.val(newValue);\r\n      this._select.trigger('change');\r\n    }\r\n  }\r\n\r\n  triggerUpdate(value: string) {\r\n    if (this.selected && !value) {\r\n      return;\r\n    }\r\n\r\n    if (this.selected !== value) {\r\n      this.selected = value;\r\n    }\r\n  }\r\n\r\n  disabledChanged(newValue: any) {\r\n    if (!newValue && this.requireOpen) {\r\n      this.requireOpen = false;\r\n      this._select.select2('open');\r\n    }\r\n  }\r\n}\r\n","\r\nimport { autoinject, bindable, containerless } from 'aurelia-framework';\r\n\r\n\r\n@containerless()\r\n@autoinject()\r\nexport class DropdownComponent{\r\n  @bindable dropdownMenuClass?: string;\r\n  @bindable dropdownClass?: string;\r\n  \r\n}\r\n","import { autoinject } from 'aurelia-framework';\r\nimport { createPopper, Instance } from '@popperjs/core';\r\n\r\nimport './dropdown.scss';\r\n\r\nlet counter = 0;\r\nconst uniqueId = () => 'dropdown-' + counter++;\r\n\r\n@autoinject\r\nexport class DropdownCustomAttribute {\r\n  private dropdownContainer?: Element | null;\r\n  private dropdownMenu?: Element | null;\r\n  private dropdown?: Instance;\r\n  private id: string;\r\n\r\n  constructor(private element: Element){\r\n    this.id = uniqueId()\r\n  }\r\n\r\n  attached() {\r\n    this.createDropdown();\r\n    document.addEventListener('click', this.outsideClickHandler)\r\n    this.element.addEventListener('click', this.toggleMenu);\r\n    this.dropdownMenu && this.dropdownMenu.addEventListener('click', this.stopPropogation);\r\n  }\r\n\r\n  detached() {\r\n    this.element.removeEventListener('click', this.toggleMenu);\r\n    document.removeEventListener('click', this.outsideClickHandler)\r\n    this.dropdown?.destroy();\r\n\r\n    this.dropdownMenu && this.dropdownMenu.removeEventListener('click', this.stopPropogation);\r\n  }\r\n\r\n  stopPropogation(e:Event){\r\n    e.stopPropagation();\r\n    e.stopImmediatePropagation();\r\n  }\r\n\r\n  private outsideClickHandler = (e: MouseEvent) => {\r\n    const dropdown = (e.target as HTMLElement).closest('.dropdown');\r\n    \r\n    const hideMenu = !dropdown \r\n                    || (dropdown && dropdown.getAttribute('data-id') !== this.id)\r\n                    || (dropdown && !dropdown.classList.contains('dropdown_no-auto-close'));\r\n\r\n    if(hideMenu){\r\n      this.hideMenu();\r\n    }\r\n  }\r\n\r\n  private createDropdownMenuArrow(){\r\n    const arrow = document.createElement('div');\r\n    arrow.setAttribute('data-popper-arrow', '')\r\n    return arrow;\r\n  }\r\n\r\n  private createDropdown(){\r\n    this.dropdownContainer = this.element.closest('.dropdown');\r\n    if(this.dropdownContainer){\r\n      this.dropdownMenu = this.dropdownContainer.querySelector('.dropdown-menu');\r\n      this.dropdownContainer.setAttribute('data-id', this.id);\r\n    }\r\n\r\n    if(this.dropdownMenu){\r\n      //this.dropdownMenu.prepend(this.createDropdownMenuArrow());\r\n      this.dropdown = createPopper(this.element, this.dropdownMenu as HTMLElement, {\r\n        placement: 'bottom-end',\r\n        modifiers: [\r\n          // {\r\n          //   name: 'arrow',\r\n          //   options: {\r\n          //     element: '[data-popper-arrow]',\r\n          //   }\r\n          // },\r\n          {\r\n            name: 'offset',\r\n            options: {\r\n              offset: [0, 8]\r\n            }\r\n          }\r\n        ]\r\n      })\r\n    }\r\n  }\r\n\r\n  private toggleMenu = (e: any) => {\r\n    const elements = document.querySelectorAll('.dropdown-menu.show');\r\n    elements.forEach(element => element.classList.remove('show'));\r\n    if(!this.dropdownMenu){\r\n      return;\r\n    }\r\n\r\n    if(this.dropdownMenu.classList.contains('show')){\r\n      this.hideMenu();\r\n    }else{\r\n      this.showMenu();\r\n    }\r\n\r\n    this.dropdown?.forceUpdate();\r\n\r\n    e.stopPropagation();\r\n    e.preventDefault();\r\n  }\r\n\r\n  private showMenu = () => {\r\n    if(!this.dropdownMenu){\r\n      return;\r\n    }\r\n\r\n    this.dropdownMenu.classList.add('show');\r\n  }\r\n\r\n  private hideMenu = () => {\r\n    if(!this.dropdownMenu){\r\n      return;\r\n    }\r\n    \r\n    this.dropdownMenu.classList.remove('show');\r\n  }\r\n}\r\n","import { autoinject, bindable } from 'aurelia-framework';\r\n\r\n@autoinject\r\nexport class FooterBar {\r\n  @bindable()\r\n  version : string = '';\r\n\r\n  @bindable()\r\n  isVersionVisible: boolean = false;\r\n\r\n  @bindable()\r\n  footerExternalKey: string|undefined;\r\n\r\n  get footerKey() : string {\r\n    const res = this.footerExternalKey? this.footerExternalKey : 'Footer.Copyright';\r\n    return res;\r\n  }\r\n\r\n}\r\n","import { EventAggregator } from 'aurelia-event-aggregator';\r\nimport { autoinject, inject, customElement, bindable, computedFrom } from 'aurelia-framework';\r\nimport { outerHeight } from './utils/HTML';\r\nimport _ from 'lodash';\r\nimport { GlobalAreaChangeEvent } from './GlobalAreaChangeEvent';\r\n\r\n@autoinject\r\n@customElement('global-area')\r\nexport class GlobalArea {\r\n  @bindable headerTitle?: string;\r\n  @bindable collapsible?: boolean = false;\r\n  @bindable collapsed?: boolean = true;\r\n  @bindable appliedFilter?: boolean = false;\r\n\r\n  id: string;\r\n  private static uid = 0;\r\n  private observer?: MutationObserver;\r\n  element?: HTMLElement;\r\n\r\n  @computedFrom('collapsible', 'collapsed')\r\n  get showLocalFilters() {\r\n    return !this.collapsible || !this.collapsed;\r\n  }\r\n\r\n  \r\n  constructor(private eventAggregator: EventAggregator) {\r\n    this.id = _.uniqueId();\r\n  }\r\n\r\n  get class(){\r\n    return `global-area-id-${this.id}`;\r\n  }\r\n\r\n  @computedFrom('id')\r\n  get classes(){\r\n    return [\r\n      this.class,\r\n      !this.collapsible ? 'global-area_not-collapsible' : 'global-area_collapsible'\r\n    ].filter(x => Boolean(x)).join(' ');\r\n  }\r\n\r\n  \r\n\r\n  attached() {\r\n    this.init();\r\n    this.observeMutations();\r\n    window.addEventListener('resize', _.debounce(() => {\r\n      this.init();\r\n      this.eventAggregator.publish(new GlobalAreaChangeEvent(this.element));\r\n    }, 50))\r\n  }\r\n\r\n\r\n  detached() {\r\n    if(this.observer){\r\n      this.observer.disconnect();\r\n    }\r\n  }\r\n\r\n  observeMutations(){\r\n    if(!this.element) return;\r\n    this.observer = new MutationObserver((mutations) => {\r\n      this.init();\r\n      this.eventAggregator.publish(new GlobalAreaChangeEvent(this.element));\r\n    });\r\n\r\n    this.observer.observe(this.element, {\r\n      subtree: true,\r\n      childList: true,\r\n      characterData: true\r\n    });\r\n  }\r\n\r\n\r\n  init() {\r\n    const header = document.querySelector('.nav-bar-container');\r\n    const contentArea = document.querySelector<HTMLElement>('.content-area');\r\n    \r\n    const headerHeight = header ? outerHeight(header, true) : 0;\r\n\r\n    if(headerHeight && this.element) {\r\n     \r\n      const globalAreaHeight = outerHeight(this.element, true);\r\n      this.element.style.top = headerHeight + 'px';\r\n\r\n      if(globalAreaHeight && contentArea) {\r\n        contentArea.style.marginTop = globalAreaHeight + headerHeight + 'px';\r\n      }\r\n    }\r\n  }\r\n\r\n  reInit(){\r\n    setTimeout(() => {\r\n      this.init()\r\n    }, 50);\r\n  }\r\n\r\n  toggleFilters(){\r\n    this.collapsed = !this.collapsed;\r\n    this.reInit()\r\n  }\r\n\r\n  hideFilters(){\r\n    this.collapsed = true;\r\n    this.reInit()\r\n  }\r\n}\r\n","import { containerless, customElement, autoinject, bindable } from 'aurelia-framework';\r\nimport { RouterConfiguration, Router, NavModel, NavigationInstruction } from 'aurelia-router';\r\nimport { getLogger } from 'aurelia-logging';\r\n\r\nconst logger = getLogger('HeaderBar');\r\n\r\n@autoinject()\r\n@customElement('header-bar')\r\n@containerless()\r\nexport class HeaderBar {\r\n  @bindable menuRoutes: NavModel[] = [];\r\n  @bindable homeRoute?: string;\r\n  @bindable settingsRoute?: string;\r\n  @bindable mandant?: string;\r\n  @bindable previousRoute?: string;\r\n  @bindable applicationTitleExternalKey: string|undefined;\r\n  @bindable warningMessage?: string;\r\n\r\n  constructor(private router: Router) {\r\n  }\r\n\r\n  goBack() {\r\n    if(this.previousRoute && this.router.hasRoute(this.previousRoute)){\r\n      this.router.navigateToRoute(this.previousRoute);\r\n    }else{\r\n      this.router.navigateBack();\r\n    }\r\n  }\r\n\r\n  goHome() {\r\n    if (this.homeRoute) {\r\n      this.router.navigateToRoute(this.homeRoute);\r\n    } else {\r\n      logger.warn('homeRoute not bound');\r\n    }\r\n  }\r\n\r\n  goSettings() {\r\n    if (this.settingsRoute) {\r\n      this.router.navigateToRoute(this.settingsRoute);\r\n    } else {\r\n      logger.warn('settingsRoute not bound');\r\n    }\r\n  }\r\n\r\n  get appTitleKey() : string {\r\n    const res = this.applicationTitleExternalKey ? this.applicationTitleExternalKey : 'Application.Title';\r\n    return res;\r\n  }\r\n}\r\n","import { FrameworkConfiguration, PLATFORM } from 'aurelia-framework';\r\nexport * from './app-tile';\r\nexport * from './app-tiles-container';\r\nexport * from './content-container';\r\nexport * from './custom-select';\r\nexport * from './footer-bar';\r\nexport * from './header-bar';\r\nexport * from './list';\r\nexport * from './master-details';\r\nexport * from './utils/HTML';\r\nexport * from './GlobalAreaChangeEvent';\r\nexport * from './au-dropdown';\r\n\r\nexport function configure(config: FrameworkConfiguration, pluginConfig?: any) {\r\n  config\r\n    .globalResources([\r\n      PLATFORM.moduleName('./app-tile'),\r\n\r\n      PLATFORM.moduleName('./app-tiles-container'),\r\n\r\n      PLATFORM.moduleName('./content-container'),\r\n\r\n      PLATFORM.moduleName('./custom-select'),\r\n\r\n      PLATFORM.moduleName('./footer-bar'),\r\n\r\n      PLATFORM.moduleName('./global-area'),\r\n      \r\n      PLATFORM.moduleName('./header-bar'),\r\n\r\n      PLATFORM.moduleName('./list'),\r\n      \r\n      PLATFORM.moduleName('./master-details'),\r\n\r\n      PLATFORM.moduleName('./page-content'),\r\n\r\n      PLATFORM.moduleName('./dropdown'),\r\n\r\n      PLATFORM.moduleName('./dropdown-component'),\r\n\r\n      PLATFORM.moduleName('./au-dropdown')\r\n    ]);\r\n}\r\n","export function isObjectLike(value: any): boolean{\r\n    return typeof value === 'object' && value !== null;\r\n}","export function getType(value: any) : string{\r\n    return Object.prototype.toString.call(value);\r\n}\r\n\r\nexport const OBJECT_TYPE = getType({});","\r\nimport { isObjectLike } from \"./isObjectLike\";\r\nimport { isEqualDeep } from \"./isEqualDeep\";\r\nexport function normalize(value: any){\r\n    if(value instanceof Date){\r\n        return value.getTime();\r\n    }\r\n    if(value instanceof RegExp){\r\n        return value.toString();\r\n    }\r\n    if(value instanceof Set){\r\n        return Array.from(value);\r\n    }\r\n    if(value instanceof Map){\r\n        return Array.from(value);\r\n    }\r\n\r\n    return value;\r\n}\r\nexport function isEqual(value: any, other: any): boolean{\r\n    let v = normalize(value);\r\n    let o = normalize(other);\r\n    if(v === o){\r\n        return true;\r\n    }\r\n    if(v == null || o == null || (!isObjectLike(v) && !isObjectLike(o))){\r\n        return v !== v && o !== o;\r\n    }\r\n    return isEqualDeep(value, other);\r\n}","import { isEqualsArray } from \"./isEqualArrays\";\r\nimport { getType, OBJECT_TYPE } from \"./getType\";\r\nimport { isEqualObjects } from \"./isEqualObjects\";\r\nimport { isEqual } from \"./isEqual\";\r\n\r\n\r\nexport function isEqualDeep(value: any, other: any): boolean{\r\n    let vType = getType(value);\r\n    let oType = getType(other);\r\n\r\n    if(vType !== oType){\r\n        return false;\r\n    }\r\n\r\n    if(Array.isArray(value)){\r\n        return isEqualsArray(value, other);\r\n    }\r\n\r\n    if(vType === OBJECT_TYPE){\r\n        return isEqualObjects(value, other)\r\n    }\r\n    return isEqual(value, other);\r\n}","import { isEqual } from \"./isEqual\";\r\n\r\nexport function isEqualsArray(value: any, other: any) : boolean{\r\n    if(!Array.isArray(value) || !Array.isArray(other)){\r\n        return false;\r\n    }\r\n    let vLength = value.length;\r\n    let oLength = other.length;\r\n\r\n    if(vLength !== oLength){\r\n        return false;\r\n    }\r\n\r\n    let isEqualArrays = true;\r\n\r\n    while(vLength > 0 && isEqualArrays){\r\n        isEqualArrays = isEqualArrays && isEqual(value[vLength -1], other[vLength - 1]);\r\n        vLength--;\r\n    }\r\n\r\n\r\n\r\n    return isEqualArrays;\r\n}","import { getType, OBJECT_TYPE } from \"./getType\";\r\nimport { isEqual } from \"./isEqual\";\r\n\r\nexport function isEqualObjects(value: any, other: any): boolean{\r\n    let vType = getType(value);\r\n    let oType = getType(other);\r\n    \r\n    if(vType !== OBJECT_TYPE || oType !== OBJECT_TYPE){\r\n        return false;\r\n    }\r\n\r\n    let vKeys = Object.keys(value);\r\n    let oKeys = Object.keys(other);\r\n\r\n    if(vKeys.length !== oKeys.length){\r\n        return false;\r\n    }\r\n\r\n    for(let i = vKeys.length; i-- !== 0;){\r\n        if(!Object.prototype.hasOwnProperty.call(other, vKeys[i])){\r\n            return false;\r\n        }\r\n    }\r\n    \r\n    for(let i = vKeys.length; i-- !== 0;){\r\n        if(!isEqual(value[vKeys[i]], other[vKeys[i]])){\r\n            return false;\r\n        }\r\n    }\r\n\r\n    return true;\r\n} ","\r\nimport { bindable, bindingMode, computedFrom, containerless } from 'aurelia-framework';\r\nimport { uniqBy } from './utils/uniqBy';\r\n\r\n@containerless\r\nexport class List<T> {\r\n  @bindable items: Array<T> = [];\r\n  itemsChanged(items: T[]){\r\n    this.listItems = items.map( item => new ListItem<T>(item));\r\n    this.updateSelection(this.selectedItems, true);\r\n  }\r\n  @bindable({ defaultBindingMode: bindingMode.twoWay }) selectedItems: Array<T> = [];\r\n  selectedItemsChanged(value: T[]){\r\n    this.updateSelection(value);\r\n  }\r\n\r\n  updateSelection(value: T[], force: boolean = false){\r\n    this.unselectAllSelected();\r\n    value\r\n      .map(x => this.listItems.find(y => this.matchItems(y.value, x)))\r\n      .filter(x => x != undefined)\r\n      .map(x => x!)\r\n      .forEach(x => this.addToSelected(x));\r\n  }\r\n\r\n\r\n  @bindable checkStrategy: 'checkbox' | 'click'  = 'click';\r\n  defaultItemTextAccessor: (item: any) => string = item => item;  \r\n  @bindable itemTextAccessor: (item: T) => string = this.defaultItemTextAccessor;\r\n  @bindable itemKeyAccessor: (item: T) => string = this.defaultItemTextAccessor;\r\n  \r\n  @bindable filterText: string = '';\r\n  clearFilterText(){\r\n    this.filterText = '';\r\n  }\r\n\r\n  @bindable listItems: ListItem<T>[] = [];\r\n  @computedFrom(\"listItems\", \"filterText\")\r\n  get listItemsToDisplay(){\r\n    return this.listItems\r\n      .filter(x => this.matchFilter(x.value));\r\n  }\r\n\r\n  _selectedItems: ListItem<T>[] = [];\r\n  \r\n\r\n  @computedFrom(\"listItems\", \"filterText\")\r\n  get checkAll(){\r\n    return this.listItemsToDisplay.length > 0 && this.listItemsToDisplay.find(x => !x.isActive) == null;\r\n  }\r\n\r\n  set checkAll(value: boolean){\r\n    for (const item of this.listItemsToDisplay) {\r\n      this.checkboxStrategy(value, item);\r\n    }\r\n    this.setSelectedItems();\r\n  }\r\n\r\n  matchFilter(item: T){\r\n    if (this.filterText != ''){\r\n      let itemText = this.itemTextAccessor(item);\r\n      if (itemText != null){\r\n        return itemText.toLowerCase().indexOf(this.filterText.toLowerCase()) > -1;\r\n      }\r\n    }\r\n    return true;\r\n  }\r\n  matchItems(item1: T, item2: T){\r\n    return this.itemKeyAccessor(item1) == this.itemKeyAccessor(item2);\r\n  }\r\n\r\n  @computedFrom('chooseItemStrategy')\r\n  get isCheckboxStrategy(){\r\n    return this.checkStrategy === 'checkbox';\r\n  }\r\n\r\n  getItemText(item: ListItem<T>){\r\n    return this.itemTextAccessor(item.value);\r\n  }\r\n\r\n  addToSelected(item: ListItem<T>) {\r\n    item.isActive = true;\r\n    this._selectedItems.push(item);\r\n  }\r\n\r\n  removeFromSelected(item: ListItem<T>) {\r\n    item.isActive = false;\r\n    this._selectedItems = this._selectedItems.filter(x => !this.matchItems(x.value, item.value));\r\n  }\r\n\r\n  unselectAllSelected(){\r\n    for (const item of this._selectedItems) {\r\n      this.removeFromSelected(item)\r\n    }\r\n  }\r\n\r\n  selectAll(event : any){\r\n    for (const item of this.listItemsToDisplay) {\r\n      this.checkboxStrategy(event, item);\r\n    }\r\n    this.setSelectedItems();\r\n  }\r\n\r\n  async setSelectedItems(){\r\n    this.selectedItems = uniqBy(this._selectedItems, x => this.itemKeyAccessor(x.value)).map(el => el.value);\r\n  }\r\n\r\n  isSelected(value: T){\r\n    return this._selectedItems.find(x => this.matchItems(x.value, value)) != null;\r\n  }\r\n\r\n  clickStrategy(event: MouseEvent, item: ListItem<T>) {\r\n    if (event.ctrlKey || event.metaKey) {\r\n      if (this.isSelected(item.value)){\r\n        this.removeFromSelected(item);\r\n      }\r\n      else{\r\n        this.addToSelected(item);\r\n      }\r\n    } \r\n    else {\r\n      if(this.isSelected(item.value)){\r\n        this.unselectAllSelected();\r\n      }\r\n      else {\r\n        this.unselectAllSelected();\r\n        this.addToSelected(item);\r\n      }\r\n    }\r\n\r\n  }\r\n\r\n  checkboxStrategy(value: boolean, item: ListItem<T>){\r\n    if(value){\r\n      this.addToSelected(item);\r\n    }else{\r\n      this.removeFromSelected(item);\r\n    }\r\n  }\r\n\r\n  toggleSelection(event: any, item: ListItem<T>) {\r\n    switch (this.checkStrategy) {\r\n      case 'checkbox': {\r\n        this.checkboxStrategy(event.target.checked, item);\r\n        break;\r\n      }\r\n      default: {\r\n        this.clickStrategy(event, item);\r\n      }\r\n    }\r\n\r\n    this.setSelectedItems();\r\n  }\r\n}\r\n\r\nexport class ListItem<T> {\r\n  constructor(\r\n    public value: T,\r\n    public isActive: boolean = false){\r\n  }\r\n}\r\n","import { isEqual } from \"./isEqual\";\r\n\r\nexport function uniqBy(arr: Array<any>, fn: (x:any) => any){\r\n    if(!arr || arr.length === 0 || !fn){\r\n        console.log('step 1')\r\n        return [];\r\n    }\r\n    const uniqueCollection: {item: any, v: any}[] = [];\r\n    loop:\r\n    for(let i = 0; i < arr.length; i++){\r\n        let item = arr[i];\r\n        let v = fn(item);\r\n        \r\n        for(let j = uniqueCollection.length; j-- >= 0; ){\r\n            if(j > -1 && isEqual(uniqueCollection[j].v, v)){\r\n                continue loop;\r\n            }\r\n        }\r\n\r\n        uniqueCollection.push({item: arr[i], v: v});\r\n    }\r\n\r\n    return uniqueCollection.map(x => x.item);\r\n}","import { autoinject, customElement } from 'aurelia-framework';\r\n\r\n@autoinject\r\n@customElement('master-details')\r\nexport class MasterDetails {\r\n\r\n}\r\n","\r\nimport { EventAggregator, Subscription } from 'aurelia-event-aggregator';\r\nimport { autoinject, bindable } from 'aurelia-framework';\r\nimport { outerHeight, GlobalAreaChangeEvent } from '@steinpilz/business-app-theme-au';\r\n\r\n@autoinject()\r\nexport class PageContent{\r\n  element?: HTMLElement;\r\n  subscription?: Subscription;\r\n  @bindable containerClass?: string;\r\n\r\n  constructor(private eventAggregator: EventAggregator){}\r\n\r\n  attached() {\r\n    this.eventAggregator.subscribe(GlobalAreaChangeEvent, (e: GlobalAreaChangeEvent) => {\r\n      this.recalculateHeight(e.height);\r\n    })\r\n    this.recalculateHeight(this.getGlobalAreaHeight());\r\n  }\r\n\r\n  detached() {\r\n    this.subscription && this.subscription.dispose();\r\n  }\r\n\r\n  recalculateHeight(globalAreaHeight: number = 0){\r\n    if(!this.element) return;\r\n    const windowHeight = window.innerHeight;\r\n    this.element.style.height = (windowHeight - globalAreaHeight - this.getFooterHeight() - this.getHeaderHeight() - 12) + 'px';\r\n  }\r\n\r\n  getFooterHeight(){\r\n    const element = document.querySelector('footer-bar footer');\r\n    if(!element) return 0;\r\n    \r\n    return outerHeight(element, true);\r\n  }\r\n\r\n  getHeaderHeight(){\r\n    const element = document.querySelector('.nav-bar-container');\r\n    if(!element) return 0;\r\n    \r\n    return outerHeight(element, true);\r\n  }\r\n\r\n  getGlobalAreaHeight(){\r\n    const element = document.querySelector('global-area .global-area');\r\n    if(!element) return 0;\r\n    \r\n    return outerHeight(element, true);\r\n  }\r\n\r\n\r\n}\r\n","export const outerHeight = (el: Element, includeMargins: boolean = false) => {\r\n  const elementHeight = el.clientHeight;\r\n  if(includeMargins){\r\n    const computedStyles = getComputedStyle(el);\r\n    return elementHeight + Number.parseInt(computedStyles.marginTop || '0') + Number.parseInt(computedStyles.marginBottom || '0');\r\n  }\r\n  return elementHeight;\r\n}\r\n","export abstract class AuthenticationService {\r\n  abstract get isAuthenticated(): boolean;\r\n  abstract logIn(userName?: string, redirectAfterLoginHref?: string): void;\r\n  abstract logOut(): void;\r\n  abstract logOutAndRedirectToLogIn(): void;\r\n  abstract handleAuthenticationCallback(): Promise<AppAuthState | undefined> | AppAuthState | undefined;\r\n}\r\n\r\nexport interface AppAuthState {\r\n  redirectAfterLoginHref?: string;\r\n}\r\n\r\n","import { FrameworkConfiguration } from 'aurelia-framework';\r\n\r\nimport { AuthenticationService } from './authentication-service';\r\nimport { AuthConfiguration } from './config';\r\n\r\nexport class ExternalPageAuthenticationService implements AuthenticationService {\r\n  constructor() {\r\n    if (authConfiguration == null) {\r\n      throw new Error('Authentication feature not configured. See AuthConfiguration.')\r\n    }\r\n  }\r\n\r\n  get isAuthenticated(): boolean {\r\n    // External auth service must monitor and redirect to it's own login page, hence always true here\r\n    return true;\r\n  }\r\n\r\n  logIn(_userName?: string, redirectAfterLogInHref?: string): void {\r\n    if (redirectAfterLogInHref != null) {\r\n      window.location.href = redirectAfterLogInHref;\r\n    }\r\n  }\r\n\r\n  logOut(): void {\r\n    throw new Error('Unsupported');\r\n  }\r\n\r\n  logOutAndRedirectToLogIn(): never {\r\n    const logOutHref = authConfiguration.logOutHref;\r\n    window.location.href = typeof logOutHref === 'function' ? logOutHref() : logOutHref;\r\n    throw new Error('Logged out and redirected');\r\n  }\r\n\r\n  handleAuthenticationCallback() {\r\n    return undefined;\r\n  }\r\n}\r\n\r\nvar authConfiguration: AuthConfiguration;\r\n\r\nexport function configureSiteMinderProd(config: FrameworkConfiguration, pluginConfig: AuthConfiguration) {\r\n  authConfiguration = pluginConfig;\r\n\r\n  config\r\n    .singleton(AuthenticationService, ExternalPageAuthenticationService);\r\n}\r\n","import { FrameworkConfiguration } from 'aurelia-framework';\r\nimport { parseQueryString } from 'aurelia-path';\r\nimport { Interceptor } from 'aurelia-fetch-client';\r\nimport { getLogger } from 'aurelia-logging';\r\nimport { WebApiClientConfig } from '@steinpilz/fria2-au-web-api';\r\n\r\nimport { MandantKind } from './config';\r\n\r\nconst mandantHeader = 'MAND_ID';\r\n\r\nclass MandantBypassInterceptor implements Interceptor {\r\n  private logger = getLogger('fria2-au-auth/MandantBypassInterceptor');\r\n\r\n  /**\r\n  * Called with the request before it is sent. Request interceptors can modify and\r\n  * return the request, or return a new one to be sent. If desired, the interceptor\r\n  * may return a Response in order to short-circuit the HTTP request itself.\r\n  *\r\n  * @param request The request to be sent.\r\n  * @returns The existing request, a new request or a response; or a Promise for any of these.\r\n  */\r\n  request(request: Request): Request | Response | Promise<Request | Response> {\r\n    if (request.headers.has(mandantHeader)) {\r\n      // do not overwrite existing header\r\n      return request;\r\n    }\r\n    let mandantId = this.getCurrentMandantId();\r\n    if (mandantId) {\r\n      this.logger.info(`Passing mandant ${mandantId}`);\r\n      request.headers.append(mandantHeader, mandantId);\r\n    }\r\n    return request;\r\n  }\r\n\r\n  private getCurrentMandantId() {\r\n    // TODO: Add another configurable mandant id sources when needed\r\n    return getMandantFromQueryString();\r\n  }\r\n}\r\n\r\nfunction getMandantFromQueryString() {\r\n  let params = parseQueryString(window.location.search) as { mandantId?: string };\r\n  return params.mandantId;\r\n}\r\n\r\nvar mandantKind: MandantKind;\r\n\r\nexport function configure(_config: FrameworkConfiguration, _mandantKind: MandantKind) {\r\n  mandantKind = _mandantKind;\r\n}\r\n\r\nexport function configureHttpClient(config: WebApiClientConfig) {\r\n  switch (mandantKind) {\r\n    case 'bypass-from-query-string':\r\n      config.withInterceptor(new MandantBypassInterceptor());\r\n      break;\r\n    case null:\r\n    case undefined:\r\n      break;\r\n    default:\r\n      throw Error(`Unsupported AuthConfiguration MandantKind ${mandantKind}`);\r\n  }\r\n}\r\n","import { FrameworkConfiguration, PLATFORM } from 'aurelia-framework';\r\nimport { WebApiClientConfig } from '@steinpilz/fria2-au-web-api';\r\n\r\nimport { AuthConfiguration, AuthKind } from './config';\r\nexport { AuthConfiguration, AuthKind }\r\nexport * from './authentication-service';\r\n\r\nimport { configure as configureSiteMinderTest, configureHttpClient as configureSiteMinderTestHttpClient } from './test/authentication-service';\r\nimport { configureSiteMinderProd } from './external-page-authentication-service';\r\nimport { configure as configureMandant, configureHttpClient as configureMandantHttpClient } from './mandant';\r\n\r\nvar pluginConfig: AuthConfiguration | undefined;\r\n\r\nexport function configure(config: FrameworkConfiguration, _pluginConfig: AuthConfiguration) {\r\n  pluginConfig = _pluginConfig;\r\n\r\n  switch (pluginConfig.kind) {\r\n    case 'siteminder-test':\r\n      configureSiteMinderTest(config, pluginConfig);\r\n      config.globalResources([\r\n        PLATFORM.moduleName('./test/test-login')\r\n      ])\r\n      break;\r\n    case 'siteminder-prod':\r\n      configureSiteMinderProd(config, pluginConfig);\r\n      break;\r\n    case null:\r\n    case undefined:\r\n      break;\r\n    default:\r\n      throw Error('Unsupported AuthConfiguration AuthKind');\r\n  }\r\n\r\n  if (pluginConfig.mandantHandlingKind) {\r\n    configureMandant(config, pluginConfig.mandantHandlingKind);\r\n  }\r\n}\r\n\r\nexport function withAuthentication(this: WebApiClientConfig) {\r\n  if (pluginConfig == null)\r\n    throw new Error(`@steinpilz/fria2-au-auth plugin not initialized. Initializer with Aurelia .plugin() configuration method.`)\r\n\r\n  switch (pluginConfig.kind) {\r\n    case 'siteminder-test':\r\n      configureSiteMinderTestHttpClient(this);\r\n      break;\r\n    case 'siteminder-prod':\r\n      // Nothing\r\n      break;\r\n    case null:\r\n    case undefined:\r\n      break;\r\n    default:\r\n      throw Error('Unsupported AuthConfiguration AuthKind');\r\n  }\r\n\r\n  if (pluginConfig.mandantHandlingKind) {\r\n    configureMandantHttpClient(this);\r\n  }\r\n\r\n  return this;\r\n}\r\n\r\nWebApiClientConfig.prototype.withAuthentication = withAuthentication;\r\n\r\ndeclare module '@steinpilz/fria2-au-web-api/src/web-api-client-config' {\r\n  interface WebApiClientConfig {\r\n    withAuthentication(): WebApiClientConfig;\r\n  }\r\n}\r\n","import { FrameworkConfiguration, Container } from 'aurelia-framework';\r\nimport { Interceptor } from 'aurelia-fetch-client';\r\nimport { getLogger } from 'aurelia-logging';\r\nimport { WebApiClientConfig } from '@steinpilz/fria2-au-web-api';\r\n\r\nexport class SiteMinderService {\r\n  constructor() {\r\n    if (siteMinderConfiguration == null) {\r\n      throw new Error('SiteMinderConfiguration not initialized')\r\n    }\r\n  }\r\n\r\n  private storage: Storage = localStorage;\r\n  private static userNameKey = \"SiteMinder_UserName\";\r\n\r\n  logIn(name: string, redirectAfterLogInHref?: string) {\r\n    this.storage.setItem(SiteMinderService.userNameKey, name);\r\n    if (redirectAfterLogInHref != null) {\r\n      window.location.href = redirectAfterLogInHref;\r\n    }\r\n  }\r\n\r\n  logOff() {\r\n    this.storage.removeItem(SiteMinderService.userNameKey);\r\n  }\r\n\r\n  get userName() {\r\n    return this.storage.getItem(SiteMinderService.userNameKey) || siteMinderConfiguration.testUserName;\r\n  }\r\n\r\n  get isAuthenticated() {\r\n    return !!this.userName;\r\n  }\r\n\r\n  get loginPageHref() {\r\n    const loginHref = siteMinderConfiguration.logInHref;\r\n    return typeof loginHref === 'function' ? loginHref() : loginHref;\r\n  }\r\n}\r\n\r\nclass SiteMinderInterceptor implements Interceptor {\r\n  constructor(private loginSource: SiteMinderService) {\r\n  }\r\n\r\n  private logger = getLogger('SiteMinderInterceptor');\r\n\r\n  /**\r\n  * Called with the request before it is sent. Request interceptors can modify and\r\n  * return the request, or return a new one to be sent. If desired, the interceptor\r\n  * may return a Response in order to short-circuit the HTTP request itself.\r\n  *\r\n  * @param request The request to be sent.\r\n  * @returns The existing request, a new request or a response; or a Promise for any of these.\r\n  */\r\n  request(request: Request): Request | Response | Promise<Request | Response> {\r\n    if (this.loginSource.userName != null) {\r\n      request.headers.append(\"SM_USER\", this.loginSource.userName);\r\n    } else {\r\n      this.logger.info('No SM user name registered. Redirecting to login page.')\r\n      this.redirectToLoginPage();\r\n    }\r\n    return request;\r\n  }\r\n\r\n  /**\r\n   * Handles fetch errors and errors generated by previous interceptors. This\r\n   * function acts as a Promise rejection handler. It may rethrow the error\r\n   * to propagate the failure, or return a new Response to recover.\r\n   *\r\n   * @param error The rejection value from the fetch request or from a\r\n   * previous interceptor.\r\n   * @returns The response; or a Promise for one.\r\n   */\r\n  responseError(error: Response, _request: any): Response | Promise<Response> {\r\n    if (error.status === 401) {\r\n      this.logger.info('Got HTTP 401 response. Redirecting to login page.')\r\n      this.redirectToLoginPage();\r\n      return error;\r\n    }\r\n\r\n    // rethrow to propagate the failure\r\n    throw error;\r\n  }\r\n\r\n  private redirectToLoginPage() {\r\n    let hrefWithoutQueryString = window.location.href.split('?')[0]\r\n    if (!hrefWithoutQueryString.endsWith(this.loginSource.loginPageHref)) {\r\n      let redirectHref = this.loginSource.loginPageHref;\r\n      redirectHref += redirectHref.indexOf('?') === -1 ? '?' : '&';\r\n      redirectHref += 'returnUrl=' + encodeURIComponent(window.location.href);\r\n      window.location.href = redirectHref;\r\n    }\r\n  }\r\n}\r\n\r\nexport interface SiteMinderConfiguration {\r\n  logInHref: string | (() => string);\r\n  logOutHref: string | (() => string);\r\n  testUserName?: string;\r\n}\r\n\r\nvar siteMinderConfiguration: SiteMinderConfiguration;\r\nvar container: Container;\r\n\r\nexport function configure(config: FrameworkConfiguration, pluginConfig: SiteMinderConfiguration) {\r\n  siteMinderConfiguration = pluginConfig;\r\n  container = config.container;\r\n  config.singleton(SiteMinderService);\r\n}\r\n\r\nexport function configureHttpClient(config: WebApiClientConfig) {\r\n  const siteMinderService = container.get(SiteMinderService) as SiteMinderService;\r\n  config.withInterceptor(new SiteMinderInterceptor(siteMinderService));\r\n}\r\n","import { autoinject, FrameworkConfiguration } from 'aurelia-framework';\r\n\r\nimport { AuthenticationService } from '../authentication-service';\r\nimport { AuthConfiguration } from '../config';\r\nimport { SiteMinderService, configure as configureTestSiteMinder } from './siteminder-service';\r\n\r\n@autoinject\r\nexport class TestAuthenticationService implements AuthenticationService {\r\n  constructor(private siteMinderService: SiteMinderService) {\r\n  }\r\n\r\n  // TODO: Support another test auth types besides SiteMinder stub service\r\n\r\n  get isAuthenticated() {\r\n    return this.siteMinderService.isAuthenticated;\r\n  }\r\n\r\n  get userName() {\r\n    return this.siteMinderService.userName;\r\n  }\r\n\r\n  logIn(userName?: string, redirectAfterLogInHref?: string) {\r\n    if (userName != null) {\r\n      this.siteMinderService.logIn(userName, redirectAfterLogInHref);\r\n    }\r\n  }\r\n\r\n  logOut() {\r\n    this.siteMinderService.logOff();\r\n  }\r\n\r\n  logOutAndRedirectToLogIn(): never {\r\n    this.logOut();\r\n    let logOutHref = authConfiguration.logOutHref;\r\n    if (typeof logOutHref === 'function') {\r\n      logOutHref = logOutHref();\r\n    }\r\n    window.location.href = logOutHref;\r\n    throw new Error('Logged out and redirected');\r\n  }\r\n\r\n  handleAuthenticationCallback() {\r\n    return undefined;\r\n  }\r\n}\r\n\r\nvar authConfiguration: AuthConfiguration;\r\n\r\nexport function configure(config: FrameworkConfiguration, pluginConfig: AuthConfiguration) {\r\n  authConfiguration = pluginConfig;\r\n  configureTestSiteMinder(config, pluginConfig);\r\n\r\n  config\r\n    .singleton(AuthenticationService, TestAuthenticationService);\r\n}\r\n\r\nexport { configureHttpClient } from './siteminder-service';\r\n","import { autoinject, bindable } from 'aurelia-framework';\r\nimport { Router } from 'aurelia-router';\r\n\r\nimport { TestAuthenticationService } from './authentication-service';\r\n\r\n@autoinject\r\nexport class TestLogin {\r\n  constructor(\r\n    private router: Router,\r\n    private authenticationService: TestAuthenticationService) {\r\n  }\r\n\r\n  @bindable returnUrl?: string;\r\n\r\n  userName = '';\r\n\r\n  attached() {\r\n    // log off on navigating to page, hence effectively having log in/log off urls merged\r\n    if (this.authenticationService.isAuthenticated) {\r\n      this.authenticationService.logOut();\r\n    }\r\n  }\r\n\r\n  logIn() {\r\n    this.logInAs(this.userName);\r\n  }\r\n\r\n  logInAs(userName: string) {\r\n    if (userName) {\r\n      this.authenticationService.logIn(userName, this.returnUrl);\r\n    }\r\n  }\r\n}\r\n","import { DOM, PLATFORM } from 'aurelia-pal';\r\n// what is better - isomorphic lib (i.e. for browser and node.js), or a framework agnostric lib (i.e. for browser only without additional runtime deps)?\r\n\r\nimport './busy-indicator.scss';\r\n\r\n/** Executes an awaitable or a function with busy state indication */\r\nexport async function execWithProgress<TResult>(awaitableOrFunc: Promise<TResult> | (() => TResult | Promise<TResult>), hideBusyIndicator?: boolean) {\r\n  currentOpsCount++;\r\n  if (!hideBusyIndicator) {\r\n    updateBusyState();\r\n  }\r\n\r\n  try {\r\n    const awaitable = typeof awaitableOrFunc === 'function' ? awaitableOrFunc() : awaitableOrFunc;\r\n    return await awaitable;\r\n  } catch (ex) {\r\n    onExecWithProgressErrorHandler && onExecWithProgressErrorHandler(ex);\r\n    throw ex;\r\n  } finally {\r\n    currentOpsCount--;\r\n    if (!hideBusyIndicator) {\r\n      updateBusyState();\r\n    }\r\n  }\r\n}\r\n\r\ntype ErrorHandler = (ex: any) => void;\r\nlet onExecWithProgressErrorHandler: ErrorHandler | undefined;\r\n\r\n/**\r\n * Registers a handler unhandled exception reporting. execWithProgress catches an exception, calls the handler, and then re-throws the exception.\r\n */\r\nexport function onExecWithProgressError(handler: ErrorHandler) {\r\n  onExecWithProgressErrorHandler = handler;\r\n}\r\n\r\nlet currentOpsCount = 0;\r\nlet busyIndicator: Element | undefined;\r\n\r\nexport function updateBusyState() {\r\n  if (busyIndicator == null) {\r\n    busyIndicator = DOM.getElementById('busy-indicator');\r\n  }\r\n\r\n  if (busyIndicator == null) {\r\n    busyIndicator = DOM.createElement('div');\r\n    busyIndicator.className = \"busy-indicator\";\r\n    busyIndicator.innerHTML = `<div class=\"overlay\"></div><div class=\"custom-loader\"></div>`\r\n    DOM.appendNode(busyIndicator);\r\n  }\r\n\r\n  const isBusy = currentOpsCount > 0;\r\n  const bc = busyIndicator;\r\n  // queue toggling to avoid jitter\r\n  window.setTimeout(() =>\r\n    bc.classList.toggle('active', isBusy), 0);\r\n}\r\n","export type StoredEntityResult<TEntity> =\n  {\n    status: 'valid' | 'expired',\n    entity: TEntity\n  } | {\n    status: 'notFound'\n  }\n\nexport var pickCacheValue = function <TEntity>(cacheResult: StoredEntityResult<TEntity>) {\n  if (!cacheResult || cacheResult.status === 'notFound') {\n    return undefined;\n  }\n\n  return cacheResult.entity;\n}\n\nexport interface Cache<TKey, TEntity> {\n  get(key: TKey): StoredEntityResult<TEntity>;\n  getOrAdd(key: TKey, addValue: () => TEntity): TEntity;\n\n  set(key: TKey, value: TEntity): void;\n  remove(key: TKey): void;\n  clear(): void;\n\n  getStoredKeys(): TKey[];\n}\n\nexport interface Logger {\n  info(message: string, ...rest: any[]): void;\n  warn(message: string, ...rest: any[]): void;\n  error(message: string, ...rest: any[]): void;\n}\n\n// TODO: Move to plugin configuration and/or provide documentation\nexport const CacheConfiguration = {\n  /** Provide a unique application name/id for local storage cache keys prefix */\n  appInstanceId: 'GenericAppId_',\n\n  /** Provide a logger instance. Compatible with aurelia-logging lib: LocalStorageCache.logger = getLogger('LocalStorageCache') */\n  logger: new class {\n    info(_: string) { }\n    warn(_: string) { }\n    error(_: string) { }\n  } as Logger,\n}\n\nexport class InMemoryCache<TKey, TEntity> implements Cache<TKey, TEntity> {\n  private memoryCache = new Map<TKey, TEntity>();\n  private memoryTimestampCache = new Map<TKey, number>();\n\n  constructor(\n    private itemsExpireAfterSeconds: number | 'infinite' = 24 * 60 * 60 /* 24 hours */) {\n  }\n\n  get(key: TKey): StoredEntityResult<TEntity> {\n    let isExpired = this.isExpired(key);\n    if (isExpired === 'notFound') {\n      return { status: 'notFound' } as StoredEntityResult<TEntity>;\n    }\n\n    let entity = this.memoryCache.get(key);\n    if (typeof entity !== 'undefined') {\n      return { status: isExpired, entity: entity };\n    }\n\n    return { status: 'notFound' } as StoredEntityResult<TEntity>;\n  }\n\n  getOrAdd(key: TKey, addValue: () => TEntity): TEntity {\n    let cacheResult = this.get(key);\n    let value: TEntity;\n\n    if (cacheResult.status === 'valid' && typeof cacheResult.entity !== 'undefined') {\n      value = cacheResult.entity;\n    } else {\n      value = addValue();\n      this.set(key, value);\n    }\n\n    return value;\n  }\n\n  private isExpired(key: TKey): 'valid' | 'expired' | 'notFound' {\n    let timestamp = this.memoryTimestampCache.get(key);\n\n    if (timestamp == undefined) {\n      return 'notFound';\n    }\n\n    let createdMillisecondsAgo = Date.now() - timestamp;\n    let isExpired = this.itemsExpireAfterSeconds !== 'infinite' && (this.itemsExpireAfterSeconds < createdMillisecondsAgo / 1000);\n    return isExpired ? 'expired' : 'valid';\n  }\n\n  set(key: TKey, value: TEntity): void {\n    let timestamp = Date.now();\n\n    this.memoryCache.set(key, value);\n    this.memoryTimestampCache.set(key, timestamp);\n  }\n\n  remove(key: TKey): void {\n    this.memoryCache.delete(key);\n    this.memoryTimestampCache.delete(key);\n  }\n\n  clear() {\n    this.memoryCache.clear();\n    this.memoryTimestampCache.clear();\n  }\n\n  getStoredKeys() {\n    return Array.from(this.memoryCache.keys());\n  }\n}\n\nexport class LocalStorageCache<TKey, TEntity> implements Cache<TKey, TEntity> {\n  // TODO: Facade through InMemoryCache\n  private memoryCache = new Map<TKey, TEntity>();\n  private memoryTimestampCache = new Map<TKey, number>();\n  private storageKeyPrefix: string;\n\n  constructor(\n    private storage: Storage,\n    entityName: string,\n    private itemsExpireAfterSeconds: number | 'infinite' = 24 * 60 * 60 /* 24 hours */,\n    private parseKey: (storageKey: string) => TKey = storageKey => storageKey as any as TKey,\n    private serializer: { serialize: (value: any) => string, deserialize: (str: string) => any } = { serialize: JSON.stringify, deserialize: JSON.parse }) {\n\n    if (!entityName) {\n      throw new Error('entityName required');\n    }\n\n    this.storageKeyPrefix = LocalStorageCache.getStorageKeyPrefix(entityName);\n\n    window.addEventListener('storage', (event: StorageEvent) => this.handleStorageEvent(event), /* use capture */ false);\n  }\n\n  get(key: TKey): StoredEntityResult<TEntity> {\n    let isExpired = this.isExpired(key);\n    if (isExpired === 'notFound') {\n      return { status: 'notFound' } as StoredEntityResult<TEntity>;\n    }\n\n    let entity = this.memoryCache.get(key);\n    if (typeof entity !== 'undefined') {\n      return { status: isExpired, entity: entity };\n    }\n\n    try {\n      let entityJson = this.storage.getItem(this.toStorageKey(key)) as string;\n      if (entityJson == undefined) {\n        return this.notFoundFatal(key);\n      }\n\n      return { status: isExpired, entity: this.serializer.deserialize(entityJson) };\n    }\n    catch (e) {\n      return this.notFoundFatal(key);\n    }\n  }\n\n  getOrAdd(key: TKey, addValue: () => TEntity): TEntity {\n    let cacheResult = this.get(key);\n    let value: TEntity;\n\n    if (cacheResult.status === 'valid' && typeof cacheResult.entity !== 'undefined') {\n      value = cacheResult.entity;\n    } else {\n      value = addValue();\n      this.set(key, value);\n    }\n\n    return value;\n  }\n\n  private notFoundFatal(key: TKey): StoredEntityResult<TEntity> {\n    console.info(`Unable to deserialize ${key}, moving along.`);\n    this.storage.removeItem(this.toStorageTimestampKey(key));\n    return { status: 'notFound' };\n  }\n\n  private isExpired(key: TKey): 'valid' | 'expired' | 'notFound' {\n    let timestamp = this.memoryTimestampCache.get(key);\n\n    if (timestamp == undefined) {\n      let timestampKey = this.toStorageTimestampKey(key);\n      let timestampString = this.storage.getItem(timestampKey);\n      if (!timestampString) {\n        return 'notFound';\n      }\n\n      try {\n        timestamp = parseInt(timestampString, 10);\n      } catch (e) {\n        this.storage.removeItem(timestampKey);\n        return 'notFound';\n      }\n    }\n\n    let createdMillisecondsAgo = Date.now() - timestamp;\n    let isExpired = this.itemsExpireAfterSeconds !== 'infinite' && (this.itemsExpireAfterSeconds < createdMillisecondsAgo / 1000);\n    return isExpired ? 'expired' : 'valid';\n  }\n\n  set(key: TKey, value: TEntity): void {\n    let timestamp = Date.now();\n\n    this.memoryCache.set(key, value);\n    this.memoryTimestampCache.set(key, timestamp);\n\n    this.storage.setItem(this.toStorageKey(key), this.serializer.serialize(value));\n    this.storage.setItem(this.toStorageTimestampKey(key), '' + timestamp);\n  }\n\n  remove(key: TKey): void {\n    this.memoryCache.delete(key);\n    this.memoryTimestampCache.delete(key);\n\n    this.storage.removeItem(this.toStorageKey(key));\n    this.storage.removeItem(this.toStorageTimestampKey(key));\n  }\n\n  clear() {\n    this.memoryCache.clear();\n    this.memoryTimestampCache.clear();\n\n    for (let key of this.getStoredKeys()) {\n      this.storage.removeItem(this.toStorageKey(key));\n      this.storage.removeItem(this.toStorageTimestampKey(key));\n    }\n  }\n\n  getStoredKeys() {\n    return LocalStorageCache.getStorageKeys(this.storage)\n      .filter(key => this.isEntityKey(key))\n      .map(key => this.toEntityKey(key));\n  }\n\n  static cleanup(storage: Storage, entityNamesToPreserve?: string[], keysToPreserve?: string[]) {\n    let keys = LocalStorageCache.getStorageKeys(storage);\n    let keyPrefixes = entityNamesToPreserve && entityNamesToPreserve.map(entityName => LocalStorageCache.getStorageKeyPrefix(entityName)) || [];\n    keysToPreserve = keysToPreserve || [];\n\n    for (let key of keys) {\n      if (!keyPrefixes.some(prefix => key.startsWith(prefix)) && keysToPreserve.indexOf(key) === -1) {\n        CacheConfiguration.logger.info(`Removing storage key ${key} specified as not used`);\n        try {\n          storage.removeItem(key);\n        } catch (e) {\n          CacheConfiguration.logger.warn(`Unable to remove storage key ${key}, error occurred: ${e}`);\n        }\n      }\n    }\n  }\n\n  private handleStorageEvent(event: StorageEvent) {\n    // IE raises event even for an active tab, so we need to double check if the tab is current one or not\n    if (document.hasFocus()) {\n      return;\n    }\n\n    let storageKey = event.key;\n    if (storageKey && (this.isEntityKey(storageKey) || this.isTimestampKey(storageKey))) {\n      CacheConfiguration.logger.info(`Storage entity or timestamp update retrieved for key ${storageKey}, clearing respective memory caches`);\n      let entityKey = this.toEntityKey(storageKey);\n      this.memoryCache.delete(entityKey);\n      this.memoryTimestampCache.delete(entityKey);\n    }\n  }\n\n  private static getStorageKeys(storage: Storage) {\n    let keys = [] as string[];\n    for (let i = 0; i < storage.length; i++) {\n      const key = storage.key(i);\n      if (key !== null) {\n        keys.push(key);\n      }\n    }\n    return keys;\n  }\n\n  private static getStorageKeyPrefix(entityName: string) {\n    return [CacheConfiguration.appInstanceId, entityName, ''].join('_');\n  }\n\n  private timestampPostfix = '_timestamp';\n\n  private toStorageKey(key: TKey) {\n    return this.storageKeyPrefix + key;\n  }\n\n  private toStorageTimestampKey(key: TKey) {\n    return [this.storageKeyPrefix, key, this.timestampPostfix].join('');\n  }\n\n  private isEntityKey(storageKey: string) {\n    return storageKey.startsWith(this.storageKeyPrefix) && !storageKey.endsWith(this.timestampPostfix);\n  }\n\n  private isTimestampKey(storageKey: string) {\n    return storageKey.startsWith(this.storageKeyPrefix) && storageKey.endsWith(this.timestampPostfix);\n  }\n\n  private toEntityKey(storageKey: string) {\n    let start = this.storageKeyPrefix.length;\n    let end = storageKey.endsWith(this.timestampPostfix) ? storageKey.length - this.timestampPostfix.length : undefined;\n    let keyString = storageKey.substring(start, end);\n    return this.parseKey(keyString);\n  }\n}\n\n","import { autoinject, bindable, BindingEngine, bindingMode, customElement, Expression, OverrideContext, ViewResources, Disposable, computedFrom } from 'aurelia-framework';\r\nimport { globalDataGridConfiguration } from './plugin-config';\r\nimport { DataSource, SortOrder, LocalDataSource } from './data-source';\r\nimport { DataGridAction, DataGridCheckboxColumn, DataGridColumn, DataGridSort, DataGridStyleKind, DataGridTextColumn, CellValueConverter, LabelConverter, RowClickHandler, ComposeCellOptions } from './data-grid-config';\r\nimport { ExportService, DataGridExportData, RowData, HeaderCellData } from './data-grid-export';\r\n\r\nimport './data-grid.scss';\r\n\r\n@customElement('data-grid')\r\n@autoinject\r\nexport class DataGrid {\r\n  constructor(\r\n    private bindingEngine: BindingEngine,\r\n    private viewResources: ViewResources,\r\n    private element: Element) {\r\n  }\r\n\r\n  // bind either a data source instance or row items collection directly\r\n  @bindable({ defaultBindingMode: bindingMode.oneWay }) dataSource?: DataGridDataSource;\r\n  @bindable({ defaultBindingMode: bindingMode.oneWay }) rows?: DataGridDataItem[];\r\n  private implicitDataSource = new LocalDataSource({ requireTotalCount: true });\r\n\r\n  @bindable columns: DataGridColumn[] = [];\r\n  @bindable actions: DataGridAction[] = [];\r\n  @bindable({ defaultBindingMode: bindingMode.twoWay }) sort: DataGridSort;\r\n  @bindable valueConverter: CellValueConverter = globalDataGridConfiguration.defaultCellValueConverter();\r\n  @bindable labelConverter: LabelConverter = globalDataGridConfiguration.defaultLabelConverter();\r\n  @bindable exportService?: ExportService = globalDataGridConfiguration.defaultExportService();\r\n\r\n  @bindable styleKind: DataGridStyleKind = globalDataGridConfiguration.defaultStyleKind;\r\n  @bindable showHeader = true;\r\n  @bindable removeMargins = false;\r\n  @bindable pageSize = 20;\r\n  @bindable selectablePageSize = false;\r\n  @bindable suggestionPageSizes = [10, 20, 30, 50, 100];\r\n  @bindable preserveCurrentPage = false;\r\n  @bindable autoSort = false;\r\n  @bindable rowClick?: RowClickHandler;\r\n  @bindable sortChangedHandler?: (column: DataGridColumn, propertyPath: string, direction: SortOrder) => void;\r\n  @bindable horizontalScroll = false;\r\n  @bindable showActionsInFirstColumn = false;\r\n\r\n  @bindable pagerVisiblePagesMax = 10;\r\n  @bindable showTopPager = false;\r\n  @bindable showBottomPager = true;\r\n\r\n\r\n  private parentOverrideContext!: OverrideContext;\r\n  private dataSourceObserver?: Disposable;\r\n  private rowItemsObserver?: Disposable;\r\n\r\n  isAnyActionVisible: boolean = false;\r\n\r\n  bind(_bindingContext: any, overrideContext: OverrideContext, _other: any) {\r\n    this.parentOverrideContext = overrideContext;\r\n  }\r\n\r\n  actionName(action: DataGridAction) {\r\n    if (action.iconCssClass)\r\n      return '';\r\n\r\n    return this.labelConverter(action.title || '');\r\n  }\r\n\r\n  colHeader(col: DataGridColumn) {\r\n    if (this.isNameCol(col)) {\r\n      return this.labelConverter(col);\r\n    }\r\n\r\n    if (this.isTextCol(col)) {\r\n      return this.labelConverter(col.header || col.name || '');\r\n    }\r\n\r\n    if (this.isCheckboxCol(col)) {\r\n      return '';\r\n    }\r\n\r\n    throw this.invalidDefinition(col);\r\n  }\r\n\r\n  colName(col: DataGridColumn) {\r\n    if (this.isNameCol(col)) {\r\n      return col;\r\n    }\r\n\r\n    if (this.isTextCol(col)) {\r\n      return col.name;\r\n    }\r\n\r\n    if (this.isCheckboxCol(col)) {\r\n      return '';\r\n    }\r\n\r\n    throw this.invalidDefinition(col);\r\n  }\r\n\r\n  colValueExpression(col: DataGridColumn) {\r\n    if (this.isNameCol(col)) {\r\n      return col;\r\n    }\r\n\r\n    if (this.isTextCol(col)) {\r\n      return col.valueExpression || col.name;\r\n    }\r\n\r\n    if (this.isCheckboxCol(col) && col.valueExpression) {\r\n      return col.valueExpression;\r\n    }\r\n\r\n    throw this.invalidDefinition(col);\r\n  }\r\n\r\n  colSortExpression(col: DataGridColumn) {\r\n    if (this.isNameCol(col)) {\r\n      return undefined;\r\n    }\r\n\r\n    if (this.isTextCol(col)) {\r\n      return col.sortExpression;\r\n    }\r\n\r\n    if (this.isCheckboxCol(col) && col.sortExpression) {\r\n      return col.sortExpression;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  isNameCol(col: DataGridColumn): col is string {\r\n    return typeof col === 'string';\r\n  }\r\n\r\n  isTextCol(col: DataGridColumn): col is DataGridTextColumn {\r\n    return !this.isNameCol(col) && (col.kind === 'text' || col.kind == null);\r\n  }\r\n\r\n  isCheckboxCol(col: DataGridColumn): col is DataGridCheckboxColumn {\r\n    return !this.isNameCol(col) && !this.isTextCol(col) && (col.kind === 'checkbox');\r\n  }\r\n\r\n  isComposeCol(col: DataGridColumn) {\r\n    return this.getComposeOptions(col) != null;\r\n  }\r\n\r\n  getComposeOptions(col: DataGridColumn): ComposeCellOptions | undefined {\r\n    return !this.isNameCol(col) && this.isTextCol(col) ? col.compose : undefined;\r\n  }\r\n\r\n  columnValueExpressions = new Map<string, Expression>();\r\n  columnSortExpressions = new Map<string, Expression>();\r\n\r\n  evalCellValue(row: any, col: DataGridColumn) {\r\n    const fieldName = this.colName(col);\r\n    let colExpression = this.columnValueExpressions.get(fieldName);\r\n    if (colExpression == null) {\r\n      const expressionStr = this.colValueExpression(col);\r\n      colExpression = this.bindingEngine.parseExpression(expressionStr);\r\n      this.columnValueExpressions.set(fieldName, colExpression);\r\n    }\r\n\r\n    return colExpression.evaluate({ bindingContext: row, overrideContext: this.parentOverrideContext }, (this.viewResources as any).lookupFunctions);\r\n  }\r\n\r\n  cellValue(row: any, col: DataGridColumn) {\r\n    return this.valueConverter(this.evalCellValue(row, col));\r\n  }\r\n\r\n  cellComposeViewModel(row: any, col: DataGridColumn) {\r\n    let composeCol = this.getComposeOptions(col);\r\n    if (composeCol == null) {\r\n      throw this.invalidDefinition(col);\r\n    }\r\n    let composeViewModel = typeof composeCol.viewModel === 'string' ? composeCol.viewModel : composeCol.viewModel(row);\r\n    if (composeViewModel == null) {\r\n      throw this.invalidDefinition(col);\r\n    }\r\n\r\n    return composeViewModel;\r\n  }\r\n\r\n  cellComposeModel(row: any, col: DataGridColumn) {\r\n    if (!this.isComposeCol(col)) {\r\n      throw this.invalidDefinition(col);\r\n    }\r\n\r\n    return this.evalCellValue(row, col);\r\n  }\r\n\r\n  cellSortValue(row: any, col: DataGridColumn) {\r\n    const fieldName = this.colName(col);\r\n    let colExpression = this.columnSortExpressions.get(fieldName);\r\n    if (colExpression == null) {\r\n      const expressionStr = this.colSortExpression(col);\r\n      if (expressionStr === undefined) {\r\n        return this.cellValue(row, col);\r\n      }\r\n      colExpression = this.bindingEngine.parseExpression(expressionStr);\r\n      this.columnSortExpressions.set(fieldName, colExpression);\r\n    }\r\n\r\n    let value = colExpression.evaluate({ bindingContext: row, overrideContext: this.parentOverrideContext }, (this.viewResources as any).lookupFunctions);\r\n    return this.valueConverter(value);\r\n  }\r\n\r\n  linkType(col: DataGridColumn): 'none' | 'action' | 'href' | 'routeName' | 'checkbox' | 'compose' {\r\n    if (this.isComposeCol(col)) {\r\n      return 'compose';\r\n    }\r\n\r\n    if (this.isNameCol(col)) {\r\n      return 'none';\r\n    }\r\n\r\n    if (this.isTextCol(col)) {\r\n      return col.link && (col.link.kind || 'routeName') || 'none';\r\n    }\r\n\r\n    if (this.isCheckboxCol(col)) {\r\n      return 'checkbox';\r\n    }\r\n\r\n    throw this.invalidDefinition(col);\r\n  }\r\n\r\n  linkAction(row: any, col: DataGridColumn) {\r\n    if (this.isNameCol(col)) {\r\n      throw this.invalidDefinition(col);\r\n    }\r\n\r\n    if (this.isTextCol(col) && col.link != null && col.link.kind === 'action') {\r\n      col.link.action(row);\r\n      return;\r\n    }\r\n\r\n    throw this.invalidDefinition(col);\r\n  }\r\n\r\n  linkEnabled(row: any, col: DataGridColumn) {\r\n    if (this.isNameCol(col)) {\r\n      throw this.invalidDefinition(col);\r\n    }\r\n\r\n    if (this.isTextCol(col) && col.link != null && col.link.kind === 'action') {\r\n      let enabled = col.link.enabled;\r\n      if (typeof enabled === 'undefined') {\r\n        return true;\r\n      }\r\n      if (typeof enabled === 'function') {\r\n        enabled = enabled(row);\r\n      }\r\n      return enabled;\r\n    }\r\n\r\n    throw this.invalidDefinition(col);\r\n  }\r\n\r\n  linkHref(row: any, col: DataGridColumn) {\r\n    if (this.isNameCol(col)) {\r\n      throw this.invalidDefinition(col);\r\n    }\r\n\r\n    if (this.isTextCol(col) && col.link != null && col.link.kind === 'href') {\r\n      return col.link.href(row);\r\n    }\r\n\r\n    throw this.invalidDefinition(col);\r\n  }\r\n\r\n  linkRouteName(_row: any, col: DataGridColumn) {\r\n    if (this.isNameCol(col)) {\r\n      throw this.invalidDefinition(col);\r\n    }\r\n\r\n    if (this.isTextCol(col) && col.link != null && col.link.kind === 'routeName') {\r\n      return col.link.routeName;\r\n    }\r\n\r\n    throw this.invalidDefinition(col);\r\n  }\r\n\r\n  invalidDefinition(col: DataGridColumn) {\r\n    return new Error('Invalid column definition: ' + JSON.stringify(col));\r\n  }\r\n\r\n  linkRouteParams(row: any, col: DataGridColumn) {\r\n    if (this.isNameCol(col)) {\r\n      throw this.invalidDefinition(col);\r\n    }\r\n\r\n    if (this.isTextCol(col) && col.link != null && col.link.kind === 'routeName') {\r\n      return col.link.routeParams && col.link.routeParams(row);\r\n    }\r\n\r\n    throw this.invalidDefinition(col);\r\n  }\r\n\r\n  sortCssClass(sort: DataGridSort, col: DataGridColumn) {\r\n    if (sort == null) {\r\n      return 'not-sorted';\r\n    }\r\n\r\n    if (this.colName(sort.column) !== this.colName(col)) {\r\n      return 'not-sorted';\r\n    }\r\n    if (sort.order === 'Asc') {\r\n      return (this.styleKind === 'bootstrap' || this.styleKind === 'businessApp') ? 'daimler-icon icon-sorted icon-interaction-arrow-up-12' : 'font-icon-arrow-up-12';\r\n    }\r\n    if (sort.order === 'Desc') {\r\n      return (this.styleKind === 'bootstrap' || this.styleKind === 'businessApp') ? 'daimler-icon icon-sorted icon-interaction-arrow-down-12' : 'font-icon-arrow-down-12';\r\n    }\r\n\r\n    throw new Error('Unsupported field sort case')\r\n  }\r\n\r\n  async toggleSort(newCol: DataGridColumn) {\r\n    //invert for currently sorted column, turn to sorted asc for not sorted column\r\n    let newSortOrder: SortOrder = this.sort != null && this.colName(this.sort.column) === this.colName(newCol) && this.sort.order === 'Asc' ? 'Desc' : 'Asc';\r\n    this.sort = { column: newCol, order: newSortOrder, propertyPath: this.colName(newCol) };\r\n\r\n    if (this.dataSource && this.dataSource.isDataItemsLoaded) {\r\n      let sortValueProvider = this.autoSort ? ((row: any) => this.cellSortValue(row, newCol)) : undefined;\r\n      this.dataSource.sort = {\r\n        property: this.sort.propertyPath || this.colName(this.sort.column),\r\n        order: this.sort.order,\r\n        valueProvider: sortValueProvider\r\n      };\r\n      await this.dataSource.fetch();\r\n    }\r\n\r\n    if (this.sortChangedHandler != null) {\r\n      this.sortChangedHandler(this.sort.column, this.colName(this.sort.column), this.sort.order);\r\n    }\r\n  }\r\n\r\n  async sortChanged(newValue: DataGridSort) {\r\n    if (this.dataSource) {\r\n      if (newValue) {\r\n        const sortColumn = newValue.column;\r\n        let sortValueProvider = this.autoSort ? ((row: any) => this.cellSortValue(row, sortColumn)) : undefined;\r\n        this.dataSource.sort = {\r\n          property: newValue.propertyPath || this.colName(newValue.column),\r\n          order: newValue.order,\r\n          valueProvider: sortValueProvider\r\n        };\r\n      } else {\r\n        this.dataSource.sort = undefined;\r\n      }\r\n    }\r\n  }\r\n\r\n  async attached() {\r\n    if (this.rows) {\r\n      await this.refreshImplicitDataSource(this.rows);\r\n    }\r\n    this.subscribeToDataItemsChange(this.dataSource);\r\n  }\r\n\r\n  async detached() {\r\n    this.subscribeToDataItemsChange(undefined);\r\n    await this.refreshImplicitDataSource(undefined);\r\n  }\r\n\r\n  dataSourceDataItemsChanged() {\r\n    this.isAnyActionVisible = this.checkIfAnyActionVisible();\r\n  }\r\n\r\n  actionsChanged() {\r\n    this.isAnyActionVisible = this.checkIfAnyActionVisible();\r\n  }\r\n\r\n  async rowsChanged(newRows: DataGridDataItem[] | undefined) {\r\n    await this.refreshImplicitDataSource(newRows);\r\n  }\r\n\r\n  private subscribeToDataItemsChange(newDataSource: DataSource<any> | undefined) {\r\n    if (this.dataSourceObserver) {\r\n      this.dataSourceObserver.dispose();\r\n    }\r\n\r\n    if (newDataSource) {\r\n      this.dataSourceObserver = this.bindingEngine.collectionObserver(newDataSource.dataItems).subscribe(() => this.dataSourceDataItemsChanged());\r\n      this.updateAutoSort();\r\n    }\r\n  }\r\n\r\n  async dataSourceChanged(dataSource: DataGridDataSource | undefined) {\r\n    this.subscribeToDataItemsChange(dataSource);\r\n    this.isAnyActionVisible = this.checkIfAnyActionVisible();\r\n\r\n    const columns = this.columns;\r\n    this.columns = [];\r\n    this.columns = columns;\r\n  }\r\n\r\n  private updateAutoSort() {\r\n    if (this.dataSource && this.autoSort && this.sort) {\r\n      const column = this.sort.column;\r\n      let sortValueProvider = this.autoSort ? (row: any) => this.cellSortValue(row, column) : undefined;\r\n      this.dataSource.sort = {\r\n        property: this.sort.propertyPath || this.colName(this.sort.column),\r\n        order: this.sort.order,\r\n        valueProvider: sortValueProvider\r\n      };\r\n    }\r\n  }\r\n\r\n  private checkIfAnyActionVisible() {\r\n    if (this.dataSource && this.actions && this.actions.length > 0 && this.dataSource.dataItems) {\r\n      for (let row of this.dataSource.dataItems) {\r\n        for (let action of this.actions) {\r\n          if (action.visibilityHandler == null || action.visibilityHandler(row)) {\r\n            return true;\r\n          }\r\n        }\r\n      }\r\n    }\r\n    return false;\r\n  }\r\n\r\n  onRowClick(row: any, event: MouseEvent): boolean {\r\n    const ignoreTagsOnRowClick: string[] = ['INPUT', 'A', 'SELECT', 'BUTTON'];\r\n\r\n    const targetElement = event.target as HTMLElement;\r\n\r\n    if (targetElement && ignoreTagsOnRowClick.indexOf(targetElement.tagName) === -1 && this.rowClick) {\r\n      this.rowClick(row, event);\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  onEnterPress(event: KeyboardEvent) {\r\n    const enterButtonKeyCode = 13;\r\n    if (event.keyCode === enterButtonKeyCode && this.rowClick) {\r\n      const activeElement = document.activeElement as HTMLElement;\r\n      activeElement?.click()\r\n    }\r\n    return true;\r\n  }\r\n\r\n  onActionClick(action: DataGridAction, row: any, event: MouseEvent) {\r\n    if (action && action.handler) {\r\n      action.handler(row);\r\n      event.stopPropagation();\r\n    }\r\n  }\r\n\r\n  @computedFrom('styleKind', 'removeMargins')\r\n  get tableOuterContainerCssClass() {\r\n    return this.styleKind === 'complex' && !this.removeMargins ? 'table-wrapper' : '';\r\n  }\r\n\r\n  @computedFrom('styleKind')\r\n  get tableInnerContainerCssClass() {\r\n    switch (this.styleKind) {\r\n      case 'complex': return 'table-scroller';\r\n      case 'normal': return 'table-responsive';\r\n      default: return '';\r\n    }\r\n  }\r\n\r\n  @computedFrom('styleKind')\r\n  get tableCssClass() {\r\n    switch (this.styleKind) {\r\n      case 'complex': return 'table-complex';\r\n      case 'normal': return 'table';\r\n      case 'bootstrap': return 'daimler-table';\r\n      case 'businessApp': return 'businessapp-table';\r\n      default: return '';\r\n    }\r\n  }\r\n\r\n  @computedFrom('styleKind')\r\n  get additionalTableCssClass() {\r\n    switch (this.styleKind) {\r\n      case 'businessApp': return '';\r\n      default: return 'text-align-left';\r\n    }\r\n  }\r\n\r\n  @computedFrom('styleKind', 'data-grid-horizontal-scroll')\r\n  get scrollTableCssClass() {\r\n    return (typeof this.horizontalScroll === 'string' ? this.horizontalScroll === 'true' : this.horizontalScroll) && this.styleKind !== 'complex' ? 'data-grid-horizontal-scroll' : '';\r\n  }\r\n\r\n  @computedFrom('styleKind')\r\n  get actionLinkCssClass() {\r\n    return this.styleKind === 'bootstrap' ? 'btn btn-secondary' : 'btn btn-default';\r\n  }\r\n\r\n  @computedFrom('styleKind')\r\n  get exportLinkCssClass() {\r\n    return this.styleKind === 'businessApp' ? 'float-right' : 'pull-right';\r\n  }\r\n\r\n  @computedFrom('styleKind')\r\n  get clearFiltersCssClass() {\r\n    return this.styleKind === 'businessApp' ? 'float-right' : 'pull-right';\r\n  }\r\n\r\n  getExportData() {\r\n    let _header: RowData<HeaderCellData> = {\r\n      cells: []\r\n    };\r\n\r\n    this.columns.forEach((column, idx) => {\r\n      if (this.isNameCol(column) || this.isTextCol(column)) {\r\n        _header.cells.push({\r\n          value: this.colHeader(column),\r\n          index: idx,\r\n          cellValue: this.getCellValueFunc(column)\r\n        });\r\n      }\r\n    });\r\n\r\n    let exportData: DataGridExportData = {\r\n      header: _header,\r\n      dataSource: this.dataSource,\r\n      htmlElement: this.element as HTMLElement\r\n    };\r\n\r\n    return exportData;\r\n  }\r\n\r\n  public getCellValueFunc(column: DataGridColumn) {\r\n    const self = this;\r\n    const col = column;\r\n    return (row: any) => {\r\n      return self.cellValue(row, col);\r\n    }\r\n  }\r\n\r\n  async export() {\r\n    if (this.exportService == null) {\r\n      return;\r\n    }\r\n\r\n    await this.exportService.export(this.getExportData());\r\n  }\r\n\r\n  private async refreshImplicitDataSource(newRows: DataGridDataItem[] | undefined) {\r\n    if (this.rowItemsObserver) {\r\n      this.rowItemsObserver.dispose();\r\n    }\r\n\r\n    if (newRows) {\r\n      this.implicitDataSource.autoSort = this.autoSort;\r\n      this.implicitDataSource.setData(newRows);\r\n      this.implicitDataSource.page = this.implicitDataSource.page || { take: this.pageSize };\r\n      await this.implicitDataSource.fetch();\r\n      this.dataSource = this.implicitDataSource;\r\n      this.rowItemsObserver = this.bindingEngine.collectionObserver(newRows).subscribe(this.onRowItemsChanged.bind(this));\r\n    } else {\r\n      this.dataSource = undefined;\r\n    }\r\n  }\r\n\r\n  private async onRowItemsChanged() {\r\n    await this.implicitDataSource.fetch();\r\n  }\r\n}\r\n\r\ntype DataGridDataItem = any;\r\ntype DataGridDataSource = DataSource<DataGridDataItem>;\r\n\r\nexport function forceUpdateArrayItem<TItem>(items: TItem[], item: TItem) {\r\n  const index = items.indexOf(item);\r\n  if (index > -1) {\r\n    items.splice(index, 1);\r\n    window.setTimeout(() => items.splice(index, 0, item), 0);\r\n  }\r\n}\r\n\r\nexport function removeArrayItem<TItem>(items: TItem[], item: TItem) {\r\n  const index = items.indexOf(item);\r\n  if (index > -1) {\r\n    items.splice(index, 1);\r\n  }\r\n}\r\n","import { computedFrom } from 'aurelia-framework';\r\nimport { EventEmitter } from 'events';\r\n\r\nexport type SortOrder = 'Asc' | 'Desc';\r\n\r\nexport interface PageOption {\r\n  skip?: number;\r\n  take?: number;\r\n}\r\n\r\nexport type SortValueProvider = (item: any) => any;\r\n\r\nexport interface SortOption {\r\n  property: string;\r\n  order: SortOrder;\r\n  valueProvider?: SortValueProvider;\r\n}\r\n\r\nexport type FilterPredicate = (row: any, value?: any) => boolean;\r\n\r\nexport interface FilterOption {\r\n  property: string;\r\n  operator?: FilterPredicate;\r\n  value?: any;\r\n}\r\n\r\nexport class FilterOptions {\r\n  private filters: Map<string, FilterOption>;\r\n\r\n  constructor() {\r\n    this.filters = new Map<string, FilterOption>();\r\n  }\r\n\r\n  set(filter: FilterOption) {\r\n    this.filters.set(filter.property, filter);\r\n  }\r\n\r\n  get(property: string) {\r\n    return this.filters.get(property);\r\n  }\r\n\r\n  getAll(): IterableIterator<FilterOption> {\r\n    return this.filters.values();\r\n  }\r\n\r\n  clear() {\r\n    this.filters.clear();\r\n  }\r\n  \r\n  asObjectMap(){\r\n    return filtersToObjectMap(this)\r\n  }\r\n}\r\n\r\nexport abstract class DataSource<TDataItem> {\r\n  protected items: TDataItem[];\r\n  protected isItemsLoaded: boolean = false;\r\n  protected total?: number;\r\n  protected requireTotalCount: boolean;\r\n\r\n  public page?: PageOption;\r\n  public autoPaging = true;\r\n\r\n  public sort?: SortOption;\r\n  public autoSort = true;\r\n\r\n  public filters: FilterOptions = new FilterOptions();\r\n\r\n  eventEmitter = new EventEmitter()\r\n\r\n  constructor(config?: { requireTotalCount?: boolean }) {\r\n    this.items = [];\r\n    this.requireTotalCount = config && config.requireTotalCount || true;\r\n  }\r\n\r\n  protected abstract fetchInternal(preservePage?: boolean): Promise<DataSourceFetchResponse<TDataItem>>;\r\n  protected abstract cloneInternal(): DataSource<TDataItem>;\r\n\r\n  public async fetch(preservePage?: boolean): Promise<void> {\r\n    this.eventEmitter.emit('fetch', preservePage);\r\n    let response = await this.fetchInternal(preservePage);\r\n\r\n    let responseItems = response.items ? response.items : [];\r\n    let args: [number, number, ...any[]] = [0, this.items.length, ...responseItems];\r\n    Array.prototype.splice.apply(this.items, args);\r\n\r\n    this.isItemsLoaded = true;\r\n\r\n    this.total = this.requireTotalCount ? (response ? response.total : 0) : undefined;\r\n  }\r\n\r\n  public clone() {\r\n    let copy = this.cloneInternal();\r\n    copy.filters = this.filters;\r\n    copy.page = this.page;\r\n    copy.sort = this.sort;\r\n    return copy;\r\n  }\r\n\r\n  @computedFrom('isItemsLoaded')\r\n  public get isDataItemsLoaded(): boolean {\r\n    return this.isItemsLoaded;\r\n  }\r\n\r\n\r\n  @computedFrom('items')\r\n  public get dataItems(): TDataItem[] {\r\n    return this.items;\r\n  }\r\n\r\n  @computedFrom('total')\r\n  public get totalCount(): number | undefined {\r\n    return this.total;\r\n  }\r\n\r\n  public clear() {\r\n    this.items.splice(0, this.items.length);\r\n    this.total = this.requireTotalCount ? 0 : undefined;\r\n  }\r\n\r\n  public find(predicate: ((item: TDataItem) => boolean)): TDataItem | undefined {\r\n    return this.items ? this.items.find(predicate) : undefined;\r\n  }\r\n\r\n  public at(index: number): TDataItem | undefined {\r\n    return this.items && 0 <= index && index < this.items.length ? this.items[index] : undefined;\r\n  }\r\n}\r\n\r\nexport class LocalDataSource<TDataItem> extends DataSource<TDataItem> {\r\n  protected data?: TDataItem[];\r\n\r\n  constructor(config: { data?: TDataItem[]; requireTotalCount: boolean; }) {\r\n    super(config);\r\n\r\n    this.setData(config.data);\r\n  }\r\n\r\n  public setData(data: TDataItem[] | undefined): void {\r\n    this.data = data;\r\n    this.total = data && data.length;\r\n  }\r\n\r\n  protected async fetchInternal(preservePage?: boolean): Promise<DataSourceFetchResponse<TDataItem>> {\r\n    let items = this.data;\r\n    let total = (this.data || []).length;\r\n\r\n    if (!preservePage) {\r\n      this.resetPaging();\r\n    }\r\n\r\n    if (items && items.length) {\r\n      // create new array instance to avoid original collection observers re-triggering fetch\r\n      items = Array.from(items);\r\n      items = this.applyFiltering(items);\r\n      total = items.length;\r\n      items = this.applySorting(items);\r\n      items = this.applyPaging(items);\r\n    }\r\n\r\n    return {\r\n      items: items,\r\n      total: total\r\n    };\r\n  }\r\n\r\n  protected cloneInternal(): DataSource<TDataItem> {\r\n    return new LocalDataSource<TDataItem>({ data: this.data, requireTotalCount: this.requireTotalCount });\r\n  }\r\n\r\n  protected applyFiltering(items: TDataItem[]): TDataItem[] {\r\n    let result = items;\r\n    if (this.filters) {\r\n      for (const filter of this.filters.getAll()) {\r\n        const _operator = filter.operator || this.getDefaultFilterOperator(filter.property);\r\n        result = result.filter(dataItem => _operator(dataItem, filter.value));\r\n      }\r\n    }\r\n\r\n    return result;\r\n  }\r\n\r\n  private resetPaging() {\r\n    this.page = {\r\n      skip: 0,\r\n      take: this.page?.take\r\n    }\r\n  }\r\n\r\n  private getDefaultFilterOperator(propertyName: string) {\r\n    const key = propertyName;\r\n\r\n    return (row: TDataItem, value?: any) => {\r\n      if (value == null || value == \"\") {\r\n        return true;\r\n      }\r\n\r\n      let rowObject = row as any;\r\n\r\n      if (!rowObject.hasOwnProperty(key)) {\r\n        return false;\r\n      }\r\n\r\n      if (Array.isArray(value)) {\r\n        const arrayValue = value as Array<any>;\r\n        return arrayValue.find(v => v == rowObject[key]) != null;\r\n      }\r\n\r\n      return rowObject[key] && rowObject[key].toString().indexOf(value) >= 0;\r\n    };\r\n  }\r\n\r\n  protected applySorting(items: TDataItem[]): TDataItem[] {\r\n    if (!this.autoSort) {\r\n      return items;\r\n    }\r\n\r\n    if (this.sort) {\r\n      this.genericSort(items, this.sort.property, this.sort.order, this.sort.valueProvider);\r\n    }\r\n\r\n    return items;\r\n  }\r\n\r\n  protected applyPaging(items: TDataItem[]): TDataItem[] {\r\n    if (!this.autoPaging) {\r\n      return items;\r\n    }\r\n    if (this.page) {\r\n      let start = this.page.skip || 0;\r\n      let end = start + (this.page.take || 0);\r\n      if (end > start)\r\n        return items && Array.from(items).slice(start, end);\r\n      else\r\n        return [];\r\n    }\r\n    return items;\r\n  }\r\n\r\n  private genericSort(items: TDataItem[], propertyName: string, order: SortOrder, valueProvider?: SortValueProvider): void {\r\n    if (!items || !propertyName) {\r\n      return;\r\n    }\r\n\r\n    const valueProvider_ = valueProvider || ((item: any) => { return (propertyName in item) ? item[propertyName] : undefined; });\r\n\r\n    const compareBy = (_propertyName: string, order: SortOrder) => {\r\n      const multiplier = order === 'Asc' ? 1 : -1;\r\n      return (a: any, b: any) => {\r\n        const valueA = valueProvider_(a);\r\n        const valueB = valueProvider_(b);\r\n\r\n        if (typeof valueA === 'string' && typeof valueB === 'string') {\r\n          return multiplier * valueA.localeCompare(valueB);\r\n        }\r\n\r\n        if (valueA < valueB)\r\n          return -1 * multiplier;\r\n        if (valueA > valueB)\r\n          return 1 * multiplier;\r\n        return 0;\r\n      }\r\n    }\r\n\r\n    items.sort(compareBy(propertyName, order));\r\n  }\r\n}\r\n\r\nexport interface DataSourceFetchResponse<TDataItem> {\r\n  items: TDataItem[] | undefined;\r\n  total?: number;\r\n}\r\n\r\nexport interface DataSourceFetchRequest {\r\n  filters?: FilterOptions;\r\n  page?: PageOption;\r\n  sort?: SortOption;\r\n}\r\n\r\nexport type DataSourceFetchHandler<TDataItem> = (request: DataSourceFetchRequest) => Promise<DataSourceFetchResponse<TDataItem>>\r\n\r\nexport class AsyncDataSource<TDataItem> extends DataSource<TDataItem> {\r\n  private handler: DataSourceFetchHandler<TDataItem>\r\n\r\n  constructor(config: { handler: DataSourceFetchHandler<TDataItem>, requireTotalCount?: boolean, }) {\r\n    super(config);\r\n    this.handler = config.handler;\r\n  }\r\n\r\n  protected async fetchInternal(preservePage?: boolean): Promise<DataSourceFetchResponse<TDataItem>> {\r\n    if(!preservePage){\r\n      this.page = {\r\n        skip: 0,\r\n        take: this.page?.take\r\n      }\r\n    }\r\n    return await this.handler({ filters: filtersToObjectMap(this.filters), page: this.page, sort: this.sort });\r\n  }\r\n\r\n  protected cloneInternal(): DataSource<TDataItem> {\r\n    return new AsyncDataSource({ handler: this.handler, requireTotalCount: this.requireTotalCount });\r\n  }\r\n\r\n   \r\n}\r\n\r\n\r\nconst filtersToObjectMap = (filters?: FilterOptions) => {\r\n  if (filters == null) {\r\n    return undefined;\r\n  }\r\n\r\n  let newFilters: any = {};\r\n  for (const filter of filters.getAll()) {\r\n    newFilters[filter.property] = filter.value;\r\n  }\r\n\r\n  return newFilters;\r\n}\r\nconst objectMapToFiltersDefault = (obj?: Record<string, any>) => {\r\n  const filterOptions = new FilterOptions();\r\n  \r\n  obj && Object.entries(obj).map(([property, value]) => {\r\n    return {\r\n      property,\r\n      value\r\n    } as FilterOption\r\n  }).forEach(filterOption => filterOptions.set(filterOption))\r\n\r\n\r\n  return filterOptions;\r\n}\r\n\r\n\r\nexport const DataSourceHelper = {\r\n  objectMapToFiltersDefault,\r\n  filtersToObjectMap\r\n}\r\n","import { FrameworkConfiguration, PLATFORM } from 'aurelia-framework';\r\n\r\nimport { DataGridPluginConfiguration, applyGlobalDataGridConfiguration } from './plugin-config';\r\n\r\nexport * from './data-grid';\r\nexport * from './data-grid-config';\r\nexport * from './data-source';\r\nexport * from './plugin-config';\r\nexport * from './data-grid-export';\r\n\r\nexport function configure(config: FrameworkConfiguration, pluginConfig?: DataGridPluginConfiguration) {\r\n  config\r\n    .globalResources([\r\n      PLATFORM.moduleName('./data-grid'),\r\n      PLATFORM.moduleName('./pager'),\r\n    ]);\r\n\r\n  if (pluginConfig) {\r\n    applyGlobalDataGridConfiguration(pluginConfig);\r\n  }\r\n}\r\n","import { bindable, BindingEngine, bindingMode, computedFrom, customElement, Disposable } from 'aurelia-framework';\r\nimport { DataSource } from './data-source';\r\nimport { isNumber, isUndefined } from 'util';\r\nimport 'select2';\r\n\r\n@customElement('pager')\r\nexport class Pager {\r\n  constructor(private bindingEngine: BindingEngine) {\r\n  }\r\n\r\n  @bindable({ defaultBindingMode: bindingMode.twoWay }) currentPage = 1;\r\n  @bindable preserveCurrentPage = false;\r\n  @bindable({ defaultBindingMode: bindingMode.twoWay }) pageSize = 20;\r\n  @bindable selectablePageSize = false;\r\n  @bindable suggestionPageSizes = [10, 20, 30, 50, 100];\r\n  @bindable visiblePagesMax = 7;\r\n  @bindable itemCount?: number;\r\n\r\n  skipCurrentPageChanges: boolean = false;\r\n\r\n  @bindable({ defaultBindingMode: bindingMode.oneWay }) dataSource?: DataSource<any>;\r\n  @bindable({ defaultBindingMode: bindingMode.twoWay }) currentPageItems?: any[];\r\n\r\n  private dataSourceObserver?: Disposable;\r\n\r\n  pageCount = 0;\r\n  visiblePageCount = 0;\r\n\r\n  selectConfig!: Select2.Options;\r\n\r\n  attached() {\r\n    this.regenerateSelectConfig();\r\n\r\n    if (!this.currentPage) {\r\n      this.currentPage = 1;\r\n    }\r\n\r\n    this.subscribeToDataItemsChange(this.dataSource);\r\n  }\r\n\r\n  detached() {\r\n    this.subscribeToDataItemsChange(undefined);\r\n  }\r\n\r\n  firstPage() {\r\n    this.currentPage = 1;\r\n  }\r\n\r\n  prevPageRange() {\r\n    this.currentPage = this.currentPage - this.visiblePagesMax;\r\n  }\r\n\r\n  prevPage() {\r\n    this.currentPage -= 1;\r\n  }\r\n\r\n  nextPage() {\r\n    this.currentPage += 1;\r\n  }\r\n\r\n  nextPageRange() {\r\n    this.currentPage = this.currentPage + this.visiblePagesMax;\r\n  }\r\n\r\n  lastPage() {\r\n    this.currentPage = this.pageCount;\r\n  }\r\n\r\n  goToPage(page: number, event: MouseEvent) {\r\n    this.currentPage = page;\r\n\r\n    //FIX: after click aurelia re-renders li content but clicked element preserves focus. call blur() to clear focus\r\n    let htmlElement = event.target as HTMLElement;\r\n    if (htmlElement) {\r\n      htmlElement.blur();\r\n    }\r\n  }\r\n\r\n  private normalizeCurrentPage() {\r\n    let currentPage = Math.min(Math.max(this.currentPage, 1), this.pageCount);\r\n    if (currentPage > 0 && currentPage != this.currentPage) {\r\n      this.currentPage = currentPage;\r\n    }\r\n  }\r\n\r\n  @computedFrom('_pageRange')\r\n  get pageRange() {\r\n    return this._pageRange || (this._pageRange = this.updatePages());\r\n  }\r\n\r\n  _pageRange?= { start: 0, end: 0, showPrevRange: false, showNextRange: false };\r\n\r\n  private updatePages() {\r\n\r\n    const itemCount = this.itemCount || (this.dataSource && this.dataSource.totalCount) || 0;\r\n    this.pageCount = Math.ceil((itemCount || 0) / this.pageSize) || 1;\r\n    this.visiblePageCount = Math.min(this.pageCount, this.visiblePagesMax) || 1;\r\n\r\n    this.normalizeCurrentPage();\r\n\r\n    if (this.pageCount <= this.visiblePagesMax) {\r\n      return {\r\n        start: 1,\r\n        end: this.pageCount,\r\n        showPrevRange: false,\r\n        showNextRange: false\r\n      }\r\n    } else if (this.currentPage <= this.visiblePagesMax / 2) {\r\n      // left end\r\n      return {\r\n        start: 1,\r\n        end: this.visiblePagesMax,\r\n        showPrevRange: false,\r\n        showNextRange: this.visiblePageCount < this.pageCount\r\n      }\r\n    } else if (this.currentPage > this.pageCount - this.visiblePagesMax / 2) {\r\n      // right end\r\n      return {\r\n        start: this.pageCount - this.visiblePagesMax + 1,\r\n        end: this.pageCount,\r\n        showPrevRange: this.visiblePageCount < this.pageCount,\r\n        showNextRange: false\r\n      }\r\n    } else {\r\n      // middle\r\n      let start = Math.ceil(this.currentPage - this.visiblePagesMax / 2);\r\n      let end = Math.floor(this.currentPage + this.visiblePagesMax / 2);\r\n\r\n      return {\r\n        start: start,\r\n        end: end,\r\n        showPrevRange: start > 1,\r\n        showNextRange: end < this.pageCount\r\n      }\r\n    }\r\n  }\r\n\r\n  private invalidatePageRange() {\r\n    this._pageRange = undefined;\r\n  }\r\n\r\n  private updateCurrentPageItems() {\r\n    if (this.dataSource) {\r\n      this.currentPageItems = this.dataSource.dataItems || [];\r\n    }\r\n  }\r\n\r\n  private async updateDataSource() {\r\n    let skip = (this.currentPage - 1) * this.pageSize;\r\n\r\n    if (this.dataSource) {\r\n      this.dataSource.page = { skip, take: this.pageSize };\r\n      await this.dataSource.fetch(true);\r\n    }\r\n  }\r\n\r\n  private updateDataSourcePage() {\r\n    let skip = (this.currentPage - 1) * this.pageSize;\r\n\r\n    if (this.dataSource) {\r\n      this.dataSource.page = { skip, take: this.pageSize };\r\n    }\r\n  }\r\n\r\n  async currentPageChanged(newValue: number, oldValue: number) {\r\n    if(this.skipCurrentPageChanges){\r\n      this.skipCurrentPageChanges = false;\r\n      return ;\r\n    }\r\n    if (newValue === oldValue || (isNaN(newValue) && isNaN(oldValue))) {\r\n      return;\r\n    }\r\n\r\n    this.normalizeCurrentPage();\r\n\r\n    if (isNumber(newValue) && isUndefined(oldValue)) {\r\n      this.updateDataSourcePage();\r\n    } else {\r\n      await this.updateDataSource();\r\n    }\r\n\r\n    this.invalidatePageRange();\r\n  }\r\n\r\n  itemCountChanged(_newValue: any, _oldValue: any) {\r\n    this.invalidatePageRange();\r\n  }\r\n\r\n  handleDataSourceFetch = (preservePage?: boolean) => {\r\n    if (!preservePage && this.currentPage != 1) {\r\n      this.skipCurrentPageChanges = true;\r\n      this.currentPage = 1;\r\n    }\r\n  }\r\n\r\n  dataSourceFetchSubscription?: any;\r\n\r\n  dataSourceChanged(dataSource: DataSource<any> | undefined, oldDataSource: DataSource<any> | undefined) {\r\n    oldDataSource?.eventEmitter.removeAllListeners();\r\n    dataSource?.eventEmitter.on('fetch', this.handleDataSourceFetch);\r\n\r\n    this.subscribeToDataItemsChange(dataSource);\r\n\r\n    if (!this.preserveCurrentPage && this.currentPage != 1) {\r\n      this.currentPage = 1;\r\n    } else {\r\n      this.updateDataSourcePage();\r\n      this.invalidatePageRange();\r\n      this.pageRange; //force variables initialization\r\n      this.updateCurrentPageItems();\r\n    }\r\n  }\r\n\r\n  private subscribeToDataItemsChange(newDataSource: DataSource<any> | undefined) {\r\n    if (this.dataSourceObserver) {\r\n      this.dataSourceObserver.dispose();\r\n    }\r\n\r\n    if (newDataSource) {\r\n      this.dataSourceObserver = this.bindingEngine.collectionObserver(newDataSource.dataItems).subscribe(() => this.dataSourceDataItemsChanged());\r\n    }\r\n  }\r\n\r\n  private dataSourceDataItemsChanged() {\r\n    this.invalidatePageRange();\r\n    this.pageRange; //force variables initialization\r\n    this.updateCurrentPageItems();\r\n  }\r\n\r\n  async pageSizeChanged(_newValue: any, _oldValue: any) {\r\n    this.regenerateSelectConfig();\r\n    await this.updateDataSource();\r\n    this.invalidatePageRange();\r\n  }\r\n\r\n  visiblePagesMaxChanged(_newValue: any, _oldValue: any) {\r\n    this.invalidatePageRange();\r\n  }\r\n\r\n  private regenerateSelectConfig() {\r\n    // place pageSize at the begin of the array to prevent first element propogation after page loaded\r\n    let suggestionPageSizes = this.suggestionPageSizes.filter(val => val != this.pageSize);\r\n    suggestionPageSizes.splice(0, 0, this.pageSize);\r\n    this.suggestionPageSizes = suggestionPageSizes;\r\n\r\n    let selectConfig: Select2.Options = {\r\n      tags: true,\r\n      minimumResultsForSearch: 1,\r\n      dropdownAutoWidth: true,\r\n      createTag: (params) => {\r\n        const processedValue = this.processPageSizeSearch(params.term);\r\n        return processedValue ? { id: processedValue, text: processedValue } : null;\r\n      },\r\n      sorter: (data) => data.sort((a, b) => parseInt(a.text, 10) - parseInt(b.text, 10))\r\n    };\r\n\r\n    selectConfig.data = this.suggestionPageSizes.map(pageSize => {\r\n      return {\r\n        id: pageSize.toString(),\r\n        text: pageSize.toString()\r\n      };\r\n    });\r\n\r\n    this.selectConfig = selectConfig;\r\n  }\r\n\r\n  private processPageSizeSearch(term: string | null) {\r\n    if (!term) {\r\n      return null;\r\n    }\r\n\r\n    const int = parseInt(term, 10);\r\n    if (!int || int <= 0) {\r\n      return null;\r\n    }\r\n\r\n    return int.toString();\r\n  }\r\n}\r\n","import { CellValueConverter, LabelConverter, DataGridStyleKind } from \"./data-grid-config\";\r\nimport { ExportService } from './data-grid-export';\r\n\r\n// temporary workaround until aurelia view resource loader uses the same module import as feature/plugin loader thus not evaliating data-grid module twice erasing configuration\r\n\r\nexport type DataGridConfiguration = {\r\n  defaultStyleKind: DataGridStyleKind,\r\n  defaultCellValueConverter: () => CellValueConverter;\r\n  defaultLabelConverter: () => LabelConverter;\r\n  defaultExportService: () => ExportService | undefined;\r\n}\r\n\r\nexport type DataGridPluginConfiguration = Partial<DataGridConfiguration>;\r\n\r\nexport const globalDataGridConfiguration: DataGridConfiguration = {\r\n  defaultStyleKind: 'complex',\r\n  defaultCellValueConverter: () => value => value,\r\n  defaultLabelConverter: () => text => text,\r\n  defaultExportService: () => undefined\r\n}\r\n\r\nexport function applyGlobalDataGridConfiguration(pluginConfig: DataGridPluginConfiguration) {\r\n  globalDataGridConfiguration.defaultStyleKind = pluginConfig.defaultStyleKind || globalDataGridConfiguration.defaultStyleKind;\r\n  globalDataGridConfiguration.defaultCellValueConverter = pluginConfig.defaultCellValueConverter || globalDataGridConfiguration.defaultCellValueConverter;\r\n  globalDataGridConfiguration.defaultLabelConverter = pluginConfig.defaultLabelConverter || globalDataGridConfiguration.defaultLabelConverter;\r\n  globalDataGridConfiguration.defaultExportService = pluginConfig.defaultExportService || globalDataGridConfiguration.defaultExportService;\r\n}\r\n","import moment from 'moment';\r\nimport { Container } from 'aurelia-framework';\r\nimport { Localization } from '@steinpilz/fria2-au-l10n';\r\n\r\nexport class MomentHelper {\r\n  static isOneLessOrEquals(dateOne?: moment.Moment, dateTwo?: moment.Moment): boolean {\r\n    return dateOne && dateTwo && dateOne.isSameOrBefore(dateTwo, 'day') || false;\r\n  }\r\n\r\n  static isOneLess(dateOne?: moment.Moment, dateTwo?: moment.Moment): boolean {\r\n    return dateOne && dateTwo && moment(dateOne).isBefore(dateTwo, \"hours\") || false;\r\n  }\r\n\r\n  static toMomentDate(date: moment.MomentInput) {\r\n    if (typeof date === \"string\") {\r\n      return moment(date, moment.ISO_8601);\r\n    }\r\n    return moment(date);\r\n  }\r\n\r\n  static formatToGeneralLong(date: any, format: string = 'L LT') {\r\n    const localization = Container.instance.get(Localization) as Localization;\r\n    let currentCultureName = localization.currentCultureName || 'de';\r\n\r\n    if (currentCultureName == undefined) {\r\n      return moment(date).locale('de').format(format);\r\n    }\r\n\r\n    return moment(date).locale(currentCultureName).format(format);\r\n  }\r\n\r\n  static convertFromBrowserLocalMidnightToUtcMidnight(midnightWithLocalOffset: moment.MomentInput) {\r\n    let dateEnsured: Date = moment.utc(midnightWithLocalOffset).toDate()\r\n    return new Date(dateEnsured.getTime() - dateEnsured.getTimezoneOffset() * 60000);\r\n  }\r\n\r\n  static shiftToDefaultTimeZone(utcValue: moment.MomentInput) {\r\n    return moment.utc(utcValue).utcOffset(moment().utcOffset(), /* keep hours/minutes values as is, but replace offset */ true).toDate()\r\n  }\r\n}\r\n","import moment, {Moment} from 'moment';\r\nimport { inject, customElement, bindable, containerless, bindingMode } from 'aurelia-framework';\r\nimport { Localization } from '@steinpilz/fria2-au-l10n';\r\nimport { MomentHelper } from './utils/moment-helper';\r\nimport { defaultFormat, defaultTimeConfig} from './date-pickers-configuration';\r\nimport _ from 'lodash';\r\nimport './style.scss';\r\n\r\nexport type DatePickerViewMode = 'days' | 'months' | 'years' | 'decades' | 'centuries' | 'month' | 'year' | 'decade' | 'century' | 'millenium' | 0 | 1 | 2 | 3 | 4;\r\n\r\nconst convertViewModeToNumber = (viewMode: DatePickerViewMode) => {\r\n  if(typeof viewMode === 'number'){\r\n    return viewMode\r\n  }\r\n  switch(viewMode){\r\n    case 'days':\r\n    case 'month': return 0;\r\n\r\n    case 'months':\r\n    case 'year': return 1;\r\n\r\n    case 'years':\r\n    case 'decade': return 2\r\n\r\n    case 'decades':\r\n    case 'century': return 3;\r\n\r\n    case 'centuries':\r\n    case 'millenium': return 4;\r\n    default: return 0;\r\n  }\r\n}\r\n\r\nconst getDate = (value?: string | Date | Moment) => {\r\n  if(!value) {\r\n    return undefined;\r\n  }\r\n  if(moment.isMoment(value)){\r\n    return value.toDate();\r\n  }\r\n  return value;\r\n}\r\n\r\nlet uniqueId = 1;\r\n\r\nexport class DatePicker {\r\n  @bindable format?: string;\r\n  @bindable({ defaultBindingMode: bindingMode.twoWay }) value: any;\r\n  @bindable disabled: boolean = false;\r\n  @bindable readonly: boolean = false;\r\n  @bindable label?: string;\r\n  @bindable containerName?: string;\r\n  @bindable orientation?: string;\r\n\r\n  @bindable minViewMode: DatePickerViewMode = 'days';\r\n  @bindable maxViewMode: DatePickerViewMode = 'centuries';\r\n\r\n  @bindable startDate?: string | Date | Moment;\r\n  @bindable endDate?: string | Date | Moment;\r\n\r\n  containerClass = `date-picker-${uniqueId++}`;\r\n  uniqueContainerId = _.uniqueId();\r\n  displayedValue: string | null = '';\r\n\r\n  private _datePicker?: any;\r\n\r\n  inputElement!: HTMLInputElement;\r\n  dateContainer!: HTMLElement;\r\n  dropdownAnchor!: Element;\r\n\r\n  constructor(\r\n    @inject(Element) private element: Element,\r\n    @inject(Localization) private localization: Localization) {\r\n\r\n    (this.element as any).focus = () => { // TODO: Should we clean this up?\r\n      this.inputElement.focus();\r\n    }\r\n  }\r\n\r\n  attached() {\r\n    if (this.value) {\r\n      this.displayedValue = moment(this.value).locale(this.getLocale()).format(this.getFormat());\r\n    } else {\r\n      this.displayedValue = null;\r\n    }\r\n    this.init();\r\n  }\r\n\r\n  detached() {\r\n    if (this._datePicker) {\r\n      this._datePicker.datepicker('destroy');\r\n    }\r\n  }\r\n\r\n  init(): void {  \r\n    let self = this;\r\n    let updateValue = (value: any): void => {\r\n      self.value = value && moment(MomentHelper.convertFromBrowserLocalMidnightToUtcMidnight(moment(value).toDate()));\r\n    };\r\n    \r\n    this._datePicker = $(this.dateContainer).datepicker({\r\n      container: `.${this.selectContainerName()}`,\r\n      format: {\r\n        toDisplay: function (date: Date | Moment, _format: unknown, language: string): string {\r\n          const res = moment(date).locale(language).format(self.getFormat());\r\n          \r\n          return res;\r\n        },\r\n        toValue: function (date: Date | Moment, _format: unknown, language: string): Date {\r\n          const prevDateValue = self.value?.toDate()\r\n\r\n          if (self.disabled || self.readonly) {\r\n            return prevDateValue;\r\n          }\r\n\r\n          if (date instanceof Date) {\r\n            return date;\r\n          }\r\n\r\n          const res = moment.utc(date, self.getFormat(), language);\r\n          const dateValue = res.toDate();\r\n\r\n          const isInvalidDate = dateValue.toString() === \"Invalid Date\"\r\n\r\n          if (isInvalidDate) {\r\n            return prevDateValue;\r\n          };\r\n\r\n          return dateValue;\r\n        }\r\n      },\r\n      language: this.getLocale(),\r\n      autoclose: true,\r\n      zIndexOffset: 9999,\r\n      calendarWeeks: true,\r\n      todayHighlight: true,\r\n      orientation: this.orientation || \"auto\",\r\n      minViewMode: convertViewModeToNumber(this.minViewMode),\r\n      maxViewMode: convertViewModeToNumber(this.maxViewMode),\r\n      startDate: getDate(this.startDate),\r\n      endDate: getDate(this.endDate),\r\n    } as any);\r\n\r\n    if(this.value && this._datePicker) {\r\n      this._datePicker.datepicker('setDate', moment(this.value).toDate());\r\n    }\r\n\r\n\r\n    this._datePicker.on('hide', (e: DatepickerEventObject) => {\r\n      if ((e.date && !self.value) || (self.value && !e.date)) {\r\n        updateValue(e.date);\r\n      } else if (e.date && self.value) {\r\n        let date = moment(self.value, moment.ISO_8601).toDate().getTime();\r\n        if (date != e.date.getTime()) {\r\n          updateValue(e.date)\r\n        }\r\n      } else if (e.date != self.value) {\r\n        updateValue(e.date);\r\n      }\r\n    });\r\n  }\r\n\r\n  getFormat(){\r\n    if(this.format){\r\n      return this.format;\r\n    }\r\n    switch(convertViewModeToNumber(this.minViewMode)){\r\n      case 0: return defaultFormat;\r\n      case 1: return 'MMMM YYYY';\r\n      case 2:\r\n      case 3:\r\n      case 4: return 'YYYY'\r\n    }\r\n  }\r\n\r\n  disabledChanged(newValue: boolean) {\r\n    if (this._datePicker) {\r\n      this._datePicker.datepicker('destroy');\r\n    }\r\n    this.init();\r\n  }\r\n\r\n  readonlyChanged(newValue: boolean) {\r\n    if (this._datePicker) {\r\n      this._datePicker.datepicker('destroy');\r\n    }\r\n    this.init();\r\n  }\r\n\r\n  getLocale(){\r\n    const locale = (this.localization.currentLanguageIsoCode || 'de').toLowerCase();\r\n\r\n    return locale;\r\n  }\r\n\r\n  valueChanged(newValue: any, oldValue: any) {\r\n    if (!newValue) {\r\n      if (!oldValue) {\r\n        return;\r\n      }\r\n\r\n      if (this._datePicker) {\r\n        this._datePicker.datepicker('clearDates');\r\n      }\r\n      this.displayedValue = null;\r\n      return;\r\n    }\r\n\r\n    let newValueMoment = moment(newValue);\r\n\r\n    this.displayedValue = newValueMoment.locale(this.getLocale()).format(this.getFormat());\r\n\r\n    if (this._datePicker) {\r\n      this._datePicker.datepicker('setDate', moment(newValue).toDate());\r\n    }\r\n  }\r\n\r\n  startDateChanged(newValue: any) {\r\n    if(this._datePicker){\r\n      this._datePicker.datepicker('setStartDate', newValue);\r\n    }\r\n  }\r\n  endDateChanged(newValue: any) {\r\n    if(this._datePicker){\r\n      this._datePicker.datepicker('setEndDate', newValue);\r\n    }\r\n  }\r\n\r\n  beginOfDayAsIfMandLocaleWasSameAsJsLocale(date?: moment.Moment){\r\n    if (!date) return undefined;\r\n    let m = moment(date);\r\n    return new Date(m.year(), m.month(), m.date());\r\n  }\r\n\r\n  formatChanged(){\r\n    this.displayedValue = moment(this.value).locale(this.getLocale()).format(this.getFormat());\r\n  }\r\n\r\n  isOverflowedRight(){\r\n    return this.dropdownAnchor && this.dropdownAnchor.getBoundingClientRect().right > document.body.clientWidth;\r\n  }\r\n\r\n  selectContainerName(){\r\n    if(this.isOverflowedRight()){\r\n      return this.containerName\r\n    } return `date-anchor-${this.uniqueContainerId}`\r\n  }\r\n}\r\n","import moment, { isMoment, Moment } from \"moment\";\r\nimport {\r\n  inject,\r\n  bindable,\r\n  bindingMode,\r\n  customElement,\r\n} from \"aurelia-framework\";\r\nimport { Localization } from \"@steinpilz/fria2-au-l10n\";\r\nimport { defaultFormat } from \"./date-pickers-configuration\";\r\nimport _ from \"lodash\";\r\nimport \"./style.scss\";\r\nimport { DatePickerViewMode } from \"./date-picker\";\r\n\r\nconst convertViewModeToNumber = (viewMode: DatePickerViewMode) => {\r\n  if (typeof viewMode === \"number\") {\r\n    return viewMode;\r\n  }\r\n  switch (viewMode) {\r\n    case \"days\":\r\n    case \"month\":\r\n      return 0;\r\n\r\n    case \"months\":\r\n    case \"year\":\r\n      return 1;\r\n\r\n    case \"years\":\r\n    case \"decade\":\r\n      return 2;\r\n\r\n    case \"decades\":\r\n    case \"century\":\r\n      return 3;\r\n\r\n    case \"centuries\":\r\n    case \"millenium\":\r\n      return 4;\r\n    default:\r\n      return 0;\r\n  }\r\n};\r\n\r\nlet uniqueId = 1;\r\n\r\n/**\r\n * Date picker\r\n */\r\n@customElement(\"date-picker2\")\r\nexport class DatePicker2 {\r\n  @bindable format?: string;\r\n  @bindable({ defaultBindingMode: bindingMode.twoWay }) value?:\r\n    | string\r\n    | Date\r\n    | Moment\r\n    | null;\r\n  @bindable disabled: boolean = false;\r\n  @bindable readonly: boolean = false;\r\n  @bindable label?: string;\r\n  @bindable containerName?: string;\r\n  @bindable orientation?: string;\r\n\r\n  @bindable minViewMode: DatePickerViewMode = \"days\";\r\n  @bindable maxViewMode: DatePickerViewMode = \"centuries\";\r\n\r\n  @bindable startDate?: string | Date | Moment;\r\n  @bindable endDate?: string | Date | Moment;\r\n\r\n  containerClass = `date-picker-2-${uniqueId++}`;\r\n  uniqueContainerId = _.uniqueId();\r\n\r\n  private _datePicker?: any;\r\n\r\n  inputElement!: HTMLInputElement;\r\n  dateContainer!: HTMLElement;\r\n  dropdownAnchor!: Element;\r\n\r\n  constructor(\r\n    @inject(Element) private element: Element,\r\n    @inject(Localization) private localization: Localization\r\n  ) {\r\n    (this.element as any).focus = () => {\r\n      // TODO: Should we clean this up?\r\n      this.inputElement.focus();\r\n    };\r\n  }\r\n\r\n  attached() {\r\n    this.init();\r\n  }\r\n\r\n  detached() {\r\n    if (this._datePicker) {\r\n      this._datePicker.datepicker(\"destroy\");\r\n    }\r\n  }\r\n\r\n  init(): void {\r\n    const self = this;\r\n    this._datePicker = $(this.dateContainer).datepicker({\r\n      container: `.${this.selectContainerName()}`,\r\n      format: {\r\n        // FYI: here date-picker provide/expect date, that should be\r\n        // time in current browser timezone of UTC midnight of selected date\r\n        toDisplay: function (\r\n          date: Date,\r\n          format: any,\r\n          language: string\r\n        ): string | undefined {\r\n          return moment.utc(date).locale(language).format(self.getFormat());\r\n        },\r\n        toValue: function (\r\n          date: string,\r\n          format: any,\r\n          language: string\r\n        ): Date | null {\r\n          const res = moment.utc(date, self.getFormat(), language);\r\n          const dateValue = res.toDate();\r\n\r\n          const isInvalidDate = dateValue.toString() === \"Invalid Date\"\r\n\r\n          if (isInvalidDate) {\r\n            if (isMoment(self.value)) {\r\n              const prevDateValue = self.value.toDate()\r\n\r\n              return prevDateValue\r\n            }\r\n\r\n            if (!self.value) {\r\n              return new Date();\r\n            }\r\n\r\n            return new Date(self.value)\r\n          };\r\n\r\n          const prevDateValue = isMoment(self.value) ? self.value.toDate() : new Date(self.value!)\r\n\r\n          if (self.disabled || self.readonly) {\r\n            return prevDateValue;\r\n          }\r\n\r\n          return dateValue;\r\n        },\r\n      },\r\n      language: this.getLocale(),\r\n      autoclose: true,\r\n      zIndexOffset: 9999,\r\n      calendarWeeks: true,\r\n      todayHighlight: true,\r\n      orientation: this.orientation || \"auto\",\r\n      minViewMode: convertViewModeToNumber(this.minViewMode),\r\n      maxViewMode: convertViewModeToNumber(this.maxViewMode),\r\n      startDate: DatePicker2.toUiDate(this.startDate),\r\n      endDate: DatePicker2.toUiDate(this.endDate),\r\n    } as any);\r\n\r\n    if (this.value && this._datePicker) {\r\n      this._datePicker.datepicker(\"setDate\", DatePicker2.toUiDate(this.value));\r\n    }\r\n\r\n    this._datePicker.on(\"hide\", (e: DatepickerEventObject) => {\r\n      self.value = DatePicker2.fromUiDate(e.date);\r\n    });\r\n  }\r\n\r\n  getFormat() {\r\n    if (this.format) {\r\n      return this.format;\r\n    }\r\n    switch (convertViewModeToNumber(this.minViewMode)) {\r\n      case 0:\r\n        return defaultFormat;\r\n      case 1:\r\n        return \"MMMM YYYY\";\r\n      case 2:\r\n      case 3:\r\n      case 4:\r\n        return \"YYYY\";\r\n    }\r\n  }\r\n\r\n  disabledChanged(newValue: boolean) {\r\n    if (this._datePicker) {\r\n      this._datePicker.datepicker(\"destroy\");\r\n    }\r\n    this.init();\r\n  }\r\n\r\n  readonlyChanged(newValue: boolean) {\r\n    if (this._datePicker) {\r\n      this._datePicker.datepicker(\"destroy\");\r\n    }\r\n    this.init();\r\n  }\r\n\r\n  getLocale() {\r\n    const locale = (\r\n      this.localization.currentLanguageIsoCode ||\r\n      this.localization.fallbackLanguageIsoCode\r\n    ).toLowerCase();\r\n\r\n    return locale;\r\n  }\r\n\r\n  valueChanged(newValue: any, oldValue: any) {\r\n    if (!newValue) {\r\n      if (!oldValue) {\r\n        return;\r\n      }\r\n\r\n      if (this._datePicker) {\r\n        this._datePicker.datepicker(\"clearDates\");\r\n      }\r\n      return;\r\n    }\r\n\r\n    if (this._datePicker) {\r\n      this._datePicker.datepicker(\"setDate\", DatePicker2.toUiDate(newValue));\r\n    }\r\n  }\r\n\r\n  startDateChanged(newValue: any) {\r\n    if (this._datePicker) {\r\n      this._datePicker.datepicker(\r\n        \"setStartDate\",\r\n        DatePicker2.toUiDate(newValue)\r\n      );\r\n    }\r\n  }\r\n\r\n  endDateChanged(newValue: any) {\r\n    if (this._datePicker) {\r\n      this._datePicker.datepicker(\"setEndDate\", DatePicker2.toUiDate(newValue));\r\n    }\r\n  }\r\n\r\n  isOverflowedRight() {\r\n    return (\r\n      this.dropdownAnchor &&\r\n      this.dropdownAnchor.getBoundingClientRect().right >\r\n        document.body.clientWidth\r\n    );\r\n  }\r\n\r\n  selectContainerName() {\r\n    if (this.isOverflowedRight()) {\r\n      return this.containerName;\r\n    }\r\n    return `date-anchor-2-${this.uniqueContainerId}`;\r\n  }\r\n\r\n  private static toUiDate(\r\n    value?: Moment | Date | string | undefined\r\n  ): Date | null {\r\n    if (!value) return null;\r\n\r\n    var m = moment(value);\r\n    return new Date(m.year(), m.month(), m.date());\r\n  }\r\n\r\n  private static fromUiDate(value?: Date | undefined): Moment | null {\r\n    if (!value) return null;\r\n\r\n    return moment({\r\n      years: value.getFullYear(),\r\n      months: value.getMonth(),\r\n      days: value.getDate(),\r\n    });\r\n  }\r\n}\r\n","import { DateTimeConfig } from './datetime-config';\r\n\r\nexport interface DatePickersConfiguration{\r\n  defaultFormat?: string\r\n  defaultTimeConfiguration?: DateTimeConfig \r\n}\r\n\r\nexport let defaultFormat = 'ddd DD.MM.YYYY';\r\nexport let defaultTimeConfig = new DateTimeConfig();\r\n\r\nexport const setDefaultFormat = (format: string) => { defaultFormat = format };\r\nexport const setDefaultTimeConfiguration= (config: DateTimeConfig) => { defaultTimeConfig = config };\r\n","export function isObjectLike(value: any): boolean{\r\n    return typeof value === 'object' && value !== null;\r\n}","export function getType(value: any) : string{\r\n    return Object.prototype.toString.call(value);\r\n}\r\n\r\nexport const OBJECT_TYPE = getType({});","\r\nimport { isObjectLike } from \"./is-object-like\";\r\nimport { isEqualDeep } from \"./is-equal-deep\";\r\nexport function normalize(value: any){\r\n    if(value instanceof Date){\r\n        return value.getTime();\r\n    }\r\n    if(value instanceof RegExp){\r\n        return value.toString();\r\n    }\r\n    if(value instanceof Set){\r\n        return Array.from(value);\r\n    }\r\n    if(value instanceof Map){\r\n        return Array.from(value);\r\n    }\r\n\r\n    return value;\r\n}\r\nexport function isEqual(value: any, other: any): boolean{\r\n    let v = normalize(value);\r\n    let o = normalize(other);\r\n    if(v === o){\r\n        return true;\r\n    }\r\n    if(v == null || o == null || (!isObjectLike(v) && !isObjectLike(o))){\r\n        return v !== v && o !== o;\r\n    }\r\n    return isEqualDeep(value, other);\r\n}\r\n","import { isEqualsArray } from \"./is-equal-arrays\";\r\nimport { getType, OBJECT_TYPE } from \"./get-type\";\r\nimport { isEqualObjects } from \"./is-equal-objects\";\r\nimport { isEqual } from \"./is-equal\";\r\n\r\n\r\nexport function isEqualDeep(value: any, other: any): boolean{\r\n    let vType = getType(value);\r\n    let oType = getType(other);\r\n\r\n    if(vType !== oType){\r\n        return false;\r\n    }\r\n\r\n    if(Array.isArray(value)){\r\n        return isEqualsArray(value, other);\r\n    }\r\n\r\n    if(vType === OBJECT_TYPE){\r\n        return isEqualObjects(value, other)\r\n    }\r\n    return isEqual(value, other);\r\n}\r\n","import { isEqual } from \"./is-equal\";\r\n\r\nexport function isEqualsArray(value: any, other: any) : boolean{\r\n    if(!Array.isArray(value) || !Array.isArray(other)){\r\n        return false;\r\n    }\r\n    let vLength = value.length;\r\n    let oLength = other.length;\r\n\r\n    if(vLength !== oLength){\r\n        return false;\r\n    }\r\n\r\n    let isEqualArrays = true;\r\n\r\n    while(vLength > 0 && isEqualArrays){\r\n        isEqualArrays = isEqualArrays && isEqual(value[vLength -1], other[vLength - 1]);\r\n        vLength--;\r\n    }\r\n\r\n\r\n\r\n    return isEqualArrays;\r\n}\r\n","import { getType, OBJECT_TYPE } from \"./get-type\";\r\nimport { isEqual } from \"./is-equal\";\r\n\r\nexport function isEqualObjects(value: any, other: any): boolean{\r\n    let vType = getType(value);\r\n    let oType = getType(other);\r\n    \r\n    if(vType !== OBJECT_TYPE || oType !== OBJECT_TYPE){\r\n        return false;\r\n    }\r\n\r\n    let vKeys = Object.keys(value);\r\n    let oKeys = Object.keys(other);\r\n\r\n    if(vKeys.length !== oKeys.length){\r\n        return false;\r\n    }\r\n\r\n    for(let i = vKeys.length; i-- !== 0;){\r\n        if(!Object.prototype.hasOwnProperty.call(other, vKeys[i])){\r\n            return false;\r\n        }\r\n    }\r\n    \r\n    for(let i = vKeys.length; i-- !== 0;){\r\n        if(!isEqual(value[vKeys[i]], other[vKeys[i]])){\r\n            return false;\r\n        }\r\n    }\r\n\r\n    return true;\r\n} \r\n","\r\nimport moment from 'moment';\r\nimport { Moment } from 'moment';\r\nimport { isEqual } from './utils/is-equal';\r\n\r\nexport class DateTimeConfig {\r\n  defaultHour?: number;\r\n  startDate?: Moment;\r\n  endDate?:Moment;\r\n  hourFrom?: number;\r\n  minuteFrom?: number;\r\n  hourTo?: number;\r\n  minuteTo?: number;\r\n  hourToBeforeHoliday?: number;\r\n  minuteToBeforeHoliday?: number;\r\n\r\n  weeklyConfig?: WeeklyDateTimeConfig;\r\n\r\n  isSame(other: DateTimeConfig) {\r\n    return isEqual(this, other);\r\n  }\r\n\r\n  get hasHolidayConfig(): boolean {\r\n    return this.hourToBeforeHoliday != null && this.minuteToBeforeHoliday != null;\r\n  }\r\n\r\n  getTimeConfig(date: moment.Moment | undefined, isHoliday: boolean, isHolidayTomorrow: boolean): OpenHours {\r\n    // 1) Check if set day is a day before holiday -> set closing time based on \"closingTimeHourBeforeFeiertag\" and \"closingTimeMinuteBeforeFeiertag\" parameters. set opening time based on departure/arrival \"from\" parameter.\r\n    // 2) If set day is not a day before holiday -> set closing and opening time based on departure/arrival \"to \" and \"from\" parameters.\r\n    // 3) If there is no departure/arrival parameters for set day -> set closing and opening time based on \"openingTimeHour\", \"openingTimeMinute\", \"closingTimeHour\" and \"closingTimeMinute\" parameters\r\n\r\n    let openIntervals = this.getOpenIntervals(date, isHoliday);\r\n\r\n    const result = openIntervals.length > 0 ?\r\n      new OpenHours(openIntervals) :\r\n      new OpenHours([TimeOfDayInterval.create(this)]); // fallback interval\r\n\r\n    if (!isHoliday && isHolidayTomorrow && this.hasHolidayConfig) {\r\n      result.setClosingTime(this.hourToBeforeHoliday, this.minuteToBeforeHoliday);\r\n    }\r\n\r\n    return result;\r\n  }\r\n\r\n  private getOpenIntervals(date: moment.Moment | undefined, isHoliday: boolean) {\r\n    if (!this.weeklyConfig || !date) {\r\n      return [];\r\n    }\r\n\r\n    let dayConfigs: DayDateTimeConfig | DayDateTimeConfig[] | undefined;\r\n    const possibleDayOfWeekNames = [\r\n      date.locale('de').format('ddd'),\r\n      date.locale('de').format('dd'),\r\n      date.locale('en').format('ddd'),\r\n      date.locale('en').format('dd')\r\n    ].map(key => key.toLowerCase());\r\n    const dayConfigKey = Object.keys(this.weeklyConfig).find(key => possibleDayOfWeekNames.indexOf(key.toLowerCase()) > -1);\r\n\r\n    if(!dayConfigKey) {\r\n      return [];\r\n    }\r\n\r\n    dayConfigs = this.weeklyConfig[dayConfigKey];\r\n\r\n    if (isHoliday) {\r\n      //custom settings for Sun,Sat override freeday-settings   \r\n      //for other days of week freeday-settings is in priority (if existed)\r\n      if (date.isoWeekday() < 6) {\r\n        dayConfigs = this.weeklyConfig[\"freeday\"] || dayConfigs;\r\n      } else {\r\n        dayConfigs = dayConfigs || this.weeklyConfig[\"freeday\"];\r\n      }\r\n    }\r\n\r\n    dayConfigs = dayConfigs || this.weeklyConfig[\"workingday\"];\r\n\r\n    if (!dayConfigs) {\r\n      return [];\r\n    }\r\n\r\n    if (!Array.isArray(dayConfigs)) {\r\n      dayConfigs = [dayConfigs];\r\n    }\r\n\r\n    return dayConfigs.map(TimeOfDayInterval.parseConfig);\r\n  }\r\n}\r\n\r\nclass OpenHours {\r\n  constructor(\r\n    private openAt: TimeOfDayInterval[]) {\r\n  }\r\n\r\n  // getClosestOpen(timestampInput: moment.MomentInput): moment.Moment | undefined {\r\n\r\n  //   const timestamp = moment(timestampInput);\r\n  //   if (this.isOpenAt(timestamp)) {\r\n  //     return timestamp;\r\n  //   }\r\n\r\n  //   let timestampMinutes = timestamp.hours() * 60 + timestamp.minutes();\r\n\r\n  //   let result = undefined;\r\n  //   let diff = 24 * 60;\r\n\r\n  //   for (let i of this.openAt) {\r\n  //     let fromDiff = Math.abs(i.from.asMinutes() - timestampMinutes);\r\n  //     if (fromDiff < diff) {\r\n  //       diff = fromDiff;\r\n  //       result = i.from.asMinutes();\r\n  //     }\r\n  //     let toDiff = Math.abs(i.to.asMinutes() - timestampMinutes);\r\n  //     if (fromDiff < diff) {\r\n  //       diff = fromDiff;\r\n  //       result = i.from.asMinutes();\r\n  //     }\r\n  //   }\r\n\r\n  //   if (!result) {\r\n  //     return undefined;\r\n  //   }\r\n\r\n  //   return timestamp.startOf('day').add(result, 'm');\r\n  // }\r\n\r\n  setClosingTime(closingHour: number | undefined, closingMinute: number | undefined) {\r\n\r\n    if(!closingHour || !closingMinute) {\r\n      return;\r\n    }\r\n\r\n    //cut late intervals\r\n    let intervals = this.openAt.filter(x => x.from.hours() < closingHour\r\n      || (x.from.hours() == closingHour && x.from.minutes() < closingMinute));\r\n\r\n    //do sort. skipped as sorted list is expected.\r\n    let lastInterval = intervals[intervals.length - 1];\r\n    //update last interval if needed\r\n    if (lastInterval.to.hours() > closingHour\r\n      || (lastInterval.to.hours() == closingHour && lastInterval.to.minutes() > closingMinute)\r\n    ) {\r\n      lastInterval.updateTo(closingHour, closingMinute);\r\n    }\r\n\r\n    this.openAt = intervals;\r\n  }\r\n\r\n  *iterate(timeStepMinutes: number) {\r\n    for (let interval of this.openAt) {\r\n      yield* interval.iterate(timeStepMinutes);\r\n    }\r\n  }\r\n\r\n  defaultOpenHour(defaultHour: number) {\r\n    if (this.isOpenAt({ hours: defaultHour })) {\r\n      return defaultHour;\r\n    }\r\n\r\n    if (this.openAt.length === 0) {\r\n      return defaultHour;\r\n    }\r\n\r\n    let minOpenHour = this.openAt[0].hourFrom;\r\n    if (defaultHour < minOpenHour) {\r\n      return minOpenHour;\r\n    }\r\n\r\n    let maxOpenHour = this.openAt[this.openAt.length - 1].hourTo;\r\n    if (defaultHour > maxOpenHour) {\r\n      return maxOpenHour;\r\n    }\r\n\r\n    return defaultHour;\r\n  }\r\n\r\n  isOpenAt(timestampInput: moment.MomentInput) {\r\n    const timestamp = moment(timestampInput);\r\n    return !!this.openAt.find(interval => !interval.isEmpty && interval.contains(timestamp));\r\n  }\r\n}\r\n\r\nclass TimeOfDayInterval {\r\n  constructor(\r\n    public from: moment.Duration,\r\n    public to: moment.Duration) {\r\n  }\r\n\r\n  static parseConfig(dayConfig: DayDateTimeConfig) {\r\n    let from = moment.duration(dayConfig.from || dayConfig.ab || \"0:00\");\r\n    let to = moment.duration(dayConfig.to || dayConfig.bis || \"24:00\");\r\n    return new TimeOfDayInterval(from, to);\r\n  }\r\n\r\n  static create({ hourFrom, minuteFrom, hourTo, minuteTo }: { hourFrom?: number, minuteFrom?: number, hourTo?: number, minuteTo?: number }) {\r\n    hourFrom = hourFrom || 0;\r\n    minuteFrom = minuteFrom || 0;\r\n\r\n    // check for minutes fallback before hours since we need the original value of the latter\r\n    if (minuteTo == null) {\r\n      minuteTo = minuteTo || (hourTo ? 0 : 60);\r\n    }\r\n\r\n    if (hourTo == null) {\r\n      hourTo = 23;\r\n    }\r\n\r\n    return new TimeOfDayInterval(\r\n      moment.duration({ hours: hourFrom, minutes: minuteFrom, milliseconds: 0 }),\r\n      moment.duration({ hours: hourTo, minutes: minuteTo, milliseconds: 0 }));\r\n  }\r\n\r\n  get hourFrom() {\r\n    return this.from.hours();\r\n  }\r\n\r\n  get hourTo() {\r\n    return this.to.hours();\r\n  }\r\n\r\n  updateTo(hourTo: number | undefined, minuteTo: number | undefined) {\r\n    if (!hourTo) {\r\n      return;\r\n    }\r\n    minuteTo = minuteTo || 60;\r\n    this.to = moment.duration({ hours: hourTo, minutes: minuteTo });\r\n  }\r\n\r\n  get isEmpty() {\r\n    return this.from.asMilliseconds() == this.to.asMilliseconds();\r\n  }\r\n\r\n  contains(timestamp: moment.Moment) {\r\n    let timestampMinutes = timestamp.hours() * 60 + timestamp.minutes();\r\n    return this.from.asMinutes() <= timestampMinutes && timestampMinutes <= this.to.asMinutes();\r\n  }\r\n\r\n  *iterate(timeStepMinutes: number) {\r\n    let current = moment.duration(this.from);\r\n    while (current < this.to) {\r\n      yield { hours: current.hours(), minutes: current.minutes() };\r\n      current.add(timeStepMinutes, 'minutes');\r\n    }\r\n  }\r\n}\r\n\r\nexport interface WeeklyDateTimeConfig {\r\n  [dayOfWeek: string]: DayDateTimeConfig | DayDateTimeConfig[] | undefined; // two- or three-letter English or German day abbreviations\r\n}\r\n\r\nexport interface DayDateTimeConfig {\r\n  from?: string;\r\n  ab?: string;\r\n  to?: string;\r\n  bis?: string;\r\n}\r\n","import { MomentHelper } from './utils/moment-helper';\r\ndeclare var $: any;\r\nimport moment from 'moment';\r\n\r\nimport { autoinject, inject, customElement, bindable, containerless, bindingMode, computedFrom } from 'aurelia-framework';\r\nimport { Localization } from '@steinpilz/fria2-au-l10n';\r\n// import { configuration } from 'config/app';\r\nimport { ValidationRules, Validator, ValidationController, validateTrigger } from 'aurelia-validation';\r\n//import { FeiertagsService } from 'services/fiertags-service';\r\n// import { DateTimeConfig } from 'ui/controls/datetime-config';\r\nimport { DateTimeConfig } from './datetime-config';\r\n\r\nimport 'bootstrap-datepicker/dist/css/bootstrap-datepicker.min.css';\r\n\r\nimport {defaultFormat, defaultTimeConfig} from './date-pickers-configuration';\r\nimport _ from 'lodash';\r\nimport './style.scss';\r\n\r\n\r\nexport class DatetimePicker {\r\n  @bindable format: string = defaultFormat;\r\n  @bindable({ defaultBindingMode: bindingMode.twoWay }) value?: moment.Moment | undefined;\r\n  @bindable disabled: boolean = false;\r\n  @bindable label?: string;\r\n  @bindable timeStep: number = 15;\r\n  @bindable config: DateTimeConfig = defaultTimeConfig;\r\n  @bindable containerName?: string;\r\n\r\n  @bindable displayedValue: string | null = \"\";\r\n  @bindable displayedTime: string | null = \"\";\r\n  @bindable mandantId?: number = undefined;\r\n  @bindable({ defaultBindingMode: bindingMode.twoWay }) isTimeSelected: boolean = false;\r\n\r\n  uniqueId = _.uniqueId();\r\n  dropdownAnchor!: Element;\r\n  private _datePicker: any;\r\n  private _isHoliday: boolean = false;\r\n  private _isTomorrowHoliday: boolean = false;\r\n  \r\n  constructor(\r\n    @inject(Element) private element: Element,\r\n    @inject(ValidationController) private validationController: ValidationController,\r\n    //@inject(FeiertagsService) private feiertagCalendar: FeiertagsService,\r\n    @inject(Localization) private localization: Localization) {\r\n  }\r\n\r\n  attached() {\r\n    this.initDatePicker();\r\n    this.updateDisplayTime(this.value);\r\n    ValidationRules\r\n      .ensure((t: DatetimePicker) => t.displayedTime)\r\n      .required()\r\n      .when(req =>  req.displayedValue !== \"\")\r\n      .withMessageKey(\"fria2-au-date-pickers.DatetimeControl.TimeRequired\").on(this);\r\n  }\r\n\r\n  updateDisplayTime(dateTime: Date | moment.Moment | undefined | null): void {\r\n    if (dateTime) {\r\n      this.displayedTime = moment(dateTime).locale(this.localization.currentCultureName || 'de-DE').format(\"HH:mm\");\r\n      this.isTimeSelected = true;\r\n    }\r\n    else {\r\n      this.displayedTime = null;\r\n      this.isTimeSelected = false;\r\n    }\r\n  }\r\n\r\n  configChanged(newConfig: DateTimeConfig, oldValue: DateTimeConfig) {\r\n    if (newConfig && oldValue && newConfig.isSame(oldValue)) {\r\n      return;\r\n    }\r\n\r\n    if (!newConfig) {\r\n      newConfig = new DateTimeConfig();\r\n    }\r\n\r\n    let timeConfig = newConfig.getTimeConfig(this.value, this._isHoliday, this._isTomorrowHoliday);\r\n\r\n    if (this.isTimeSelected && !timeConfig.isOpenAt(this.value)) {\r\n      this.updateDisplayTime(undefined);\r\n    }\r\n  }\r\n\r\n  @computedFrom('value', 'config', '_isTomorrowHoliday', 'defaultHour')\r\n  get formatedStartTime() {\r\n    let timeConfig = this.config.getTimeConfig(this.value, this._isHoliday, this._isTomorrowHoliday);\r\n    return this.formatTime(timeConfig.defaultOpenHour(this.defaultHour), 0);\r\n  }\r\n\r\n  detached() {\r\n    if (this._datePicker) {\r\n      this._datePicker.datepicker('destroy');\r\n    }\r\n  }\r\n\r\n  @computedFrom('value', 'config', '_isHoliday', '_isTomorrowHoliday', 'timeStep', 'isTimeSelected')\r\n  get timeRange() {\r\n    let timeConfig = this.config.getTimeConfig(this.value, this._isHoliday, this._isTomorrowHoliday);\r\n    let res = [];\r\n\r\n    if (!this.isTimeSelected || !timeConfig.isOpenAt(this.value)) {\r\n      res.push('');\r\n    }   \r\n    \r\n    for (let { hours, minutes } of timeConfig.iterate(this.timeStep)) {     \r\n      if (this.isTimeStampAvailable(hours, minutes)){\r\n        let time = this.formatTime(hours, minutes);\r\n        res.push(time);\r\n      }\r\n    }\r\n\r\n    return res;\r\n  }\r\n\r\n  isTimeStampAvailable(hours: number, minutes: number){\r\n    let m = moment(this.value).startOf('day').hours(hours).minutes(minutes);\r\n    if (this.config.startDate && m.isBefore(moment(this.config.startDate))) {\r\n      return false;\r\n    }\r\n    if (this.config.endDate && m.isAfter(moment(this.config.endDate))) {\r\n      return false;\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  @computedFrom('config')\r\n  get defaultHour() {\r\n    return this.config.defaultHour || 0;\r\n  }\r\n\r\n  initDatePicker(): void {\r\n    var self = this;\r\n    let updateValue = (value: any): void => {\r\n      const m = moment;\r\n      let newValue = moment(value).toDate();\r\n      let selfValue = moment(self.value || { hour: self.defaultHour, minute: 0, second: 0 });\r\n      \r\n      self.value = moment({\r\n        year: newValue.getFullYear(),\r\n        month: newValue.getMonth(),\r\n        date: newValue.getDate(),\r\n\r\n        minute: selfValue.minute(),\r\n        hour: selfValue.hour(),\r\n        second: selfValue.second()\r\n      });\r\n    };\r\n    if (!this.disabled) {\r\n      this._datePicker = $('.date', this.element).datepicker({\r\n        container: `.${this.selectContainerName()}`,\r\n        format: {\r\n          // FYI: here date-picker provide/expect date, that should be\r\n          // time in current browser timezone of UTC midnight of selected date\r\n          toDisplay: function (date: any, format: any, language: string): string {\r\n            let result = moment.utc(date).locale(language).format(self.format);\r\n            return result;\r\n          },\r\n          toValue: function (date: string | Date, format: any, language: string): Date {\r\n            if (date instanceof Date) {\r\n              return date;\r\n            }\r\n            let result = moment.utc(date, self.format, language);\r\n            return result.toDate();\r\n          }\r\n        },\r\n        language: this.localization.currentCultureName,\r\n        autoclose: true,\r\n        zIndexOffset: 9999,\r\n        startDate: this.beginOfDayAsIfMandLocaleWasSameAsJsLocale(self.config.startDate),\r\n        endDate: this.beginOfDayAsIfMandLocaleWasSameAsJsLocale(self.config.endDate),\r\n        calendarWeeks: true,\r\n        todayHighlight: true\r\n      });\r\n\r\n      if(this.value) {\r\n        this._datePicker.datepicker('setDate', moment(this.value).toDate());\r\n      }\r\n\r\n      this._datePicker.on('hide', (e: DatepickerEventObject) => {\r\n        if ((e.date && !self.value) || (self.value && !e.date)) {\r\n          updateValue(e.date);\r\n        } else if (e.date && self.value) {\r\n          let date = moment(self.value).toDate().getTime();\r\n          if (date != e.date.getTime()) {\r\n            updateValue(e.date)\r\n          }\r\n        } else if (e.date != (self.value && self.value.toDate())) {\r\n          updateValue(e.date);\r\n        }\r\n      });\r\n    }\r\n  }\r\n\r\n  disabledChanged(newValue: boolean) {\r\n    if (this.config)\r\n      this.initDatePicker();\r\n  }\r\n\r\n  async valueChanged(newValue: Date | moment.Moment | null, oldValue: Date | moment.Moment | null) {\r\n    if (!newValue) {\r\n      if (!oldValue) {\r\n        return;\r\n      }\r\n\r\n      this.displayedValue = null;\r\n      this.displayedTime = null;\r\n      return;\r\n    }\r\n    \r\n    let newValueMoment = moment(newValue);\r\n    let newMinutes = this.adjustMinutes(newValueMoment.minute());;\r\n    newValueMoment.set('minute', newMinutes);\r\n    \r\n\r\n    if(this.config && this.config.endDate && this.value && newValueMoment > this.config.endDate)\r\n    {\r\n      this.displayedValue = null;\r\n      this.displayedTime = null;\r\n      return;\r\n    }\r\n\r\n    let isDateChanged = false;\r\n    if (oldValue) {\r\n      let oldValueMoment = moment(oldValue);\r\n      if (newValueMoment.isSame(oldValueMoment)) {\r\n        return\r\n      }\r\n\r\n      if (!newValueMoment.isSame(oldValueMoment, 'day'))\r\n        isDateChanged = true;\r\n    } else {\r\n      isDateChanged = true;\r\n    }\r\n\r\n    if (isDateChanged) {\r\n      await this.checkFeirtag(newValueMoment.toDate());\r\n    }\r\n\r\n    this.displayedValue = newValueMoment.locale(this.localization.currentCultureName || 'de-DE').format(this.format);\r\n    if (this._datePicker) {\r\n      let newDate = this.beginOfDayAsIfMandLocaleWasSameAsJsLocale(newValueMoment);\r\n      this._datePicker.datepicker('setDate', newDate);\r\n    }\r\n\r\n    let timeConfig = this.config.getTimeConfig(this.value, this._isHoliday, this._isTomorrowHoliday);\r\n    if (this.isTimeSelected && !timeConfig.isOpenAt(this.value)) {\r\n      this.updateDisplayTime(undefined);\r\n    } else {\r\n      this.updateDisplayTime(newValueMoment);\r\n    }\r\n  }\r\n\r\n  displayedValueChanged(newValue: any, oldValue: any) {\r\n    if (!newValue && oldValue) {\r\n      this.value = undefined;\r\n    }\r\n  }\r\n\r\n  async checkFeirtag(date: Date) {\r\n    if (!date) return;\r\n    let today = moment(date);\r\n\r\n    // this._isHoliday = await this.feiertagCalendar.isFeirtag(today, this.mandantId);\r\n    // this._isTomorrowHoliday = await this.feiertagCalendar.isFeirtag(today.add(1, 'day'), this.mandantId);\r\n  }\r\n\r\n  displayedTimeChanged(newValue: string, oldValue: string) {\r\n    if (!newValue && !oldValue) {\r\n      return;\r\n    }\r\n\r\n    if(!newValue) {\r\n      return;\r\n    }\r\n\r\n    if (newValue !== oldValue) {\r\n      let [hours, minutes] = newValue.split(':');\r\n\r\n      let adjustedMinutes = parseInt(minutes) || 0;\r\n      adjustedMinutes = this.adjustMinutes(adjustedMinutes);\r\n\r\n      let currentUserDateTime = moment(this.value);\r\n      let adjustedCurrentUserDateTime = currentUserDateTime.clone().set({\r\n        hours: parseInt(hours) || 0,\r\n        minutes: adjustedMinutes,\r\n        seconds: 0\r\n      });\r\n      this.isTimeSelected = !!hours || !!minutes;\r\n\r\n      if (!this.value || !adjustedCurrentUserDateTime.isSame(currentUserDateTime)) {//prevent change event if value is already same\r\n        this.value = adjustedCurrentUserDateTime;\r\n      }\r\n    }\r\n  }\r\n\r\n  beginOfDayAsIfMandLocaleWasSameAsJsLocale(date?: moment.Moment){\r\n    if (!date) return undefined;\r\n    let m = moment(date);\r\n    return new Date(m.year(), m.month(), m.date());\r\n  }\r\n\r\n  private formatTime(hours: number, minutes: number): string {\r\n    return `${this.leadingZero(hours)}:${this.leadingZero(minutes)}`;\r\n  }\r\n\r\n  private leadingZero(value: number): string {\r\n    if (value < 10) {\r\n      return `0${value}`;\r\n    }\r\n    return value.toString();\r\n  }\r\n\r\n  private adjustMinutes(minutes: number) {\r\n    const adjustedMinutes =  minutes - minutes % this.timeStep;\r\n\r\n    return adjustedMinutes\r\n  }\r\n\r\n  isOverflowedRight(){\r\n    return this.dropdownAnchor && this.dropdownAnchor.getBoundingClientRect().right > document.body.clientWidth;\r\n  }\r\n\r\n  selectContainerName(){\r\n    if(this.isOverflowedRight()){\r\n      return this.containerName\r\n    } return `date-time-anchor-${this.uniqueId}`\r\n  }\r\n}\r\n","import { bindable, autoinject, computedFrom, bindingMode } from 'aurelia-framework';\r\nimport { Localization } from '@steinpilz/fria2-au-l10n/src/localization';\r\nimport { DateTimeConfig } from './datetime-config';\r\nimport { ValidationRules, Validator, ValidationController, validateTrigger } from 'aurelia-validation';\r\nimport moment from 'moment';\r\n\r\nimport {defaultFormat, defaultTimeConfig} from './date-pickers-configuration';\r\n\r\n\r\n@autoinject()\r\nexport class DaytimePicker {\r\n\r\n  @bindable({ defaultBindingMode: bindingMode.twoWay }) day?: number | undefined;\r\n  @bindable({ defaultBindingMode: bindingMode.twoWay }) minutes?: number | null | undefined;\r\n  @bindable timeStep: number = 15;\r\n  @bindable config: DateTimeConfig = defaultTimeConfig;\r\n  @bindable disabled: boolean = false;\r\n  @bindable displayedTime: string | null = null;\r\n  @bindable showNoneOption: boolean = true;\r\n\r\n  daysOfWeek? = [\r\n    { id: 1, name: this.localization.translate('fria2-au-date-pickers.DayOfWeek.Monday') },\r\n    { id: 2, name: this.localization.translate('fria2-au-date-pickers.DayOfWeek.Tuesday') },\r\n    { id: 3, name: this.localization.translate('fria2-au-date-pickers.DayOfWeek.Wednesday') },\r\n    { id: 4, name: this.localization.translate('fria2-au-date-pickers.DayOfWeek.Thursday') },\r\n    { id: 5, name: this.localization.translate('fria2-au-date-pickers.DayOfWeek.Friday') },\r\n    { id: 6, name: this.localization.translate('fria2-au-date-pickers.DayOfWeek.Saturday') },\r\n    { id: 0, name: this.localization.translate('fria2-au-date-pickers.DayOfWeek.Sunday') }];\r\n\r\n  noneOptionValue = this.localization.translate('fria2-au-date-pickers.Options.None');\r\n\r\n  constructor(private localization: Localization) {\r\n  }\r\n\r\n  attached() {\r\n    this.updateDisplayTime(this.minutes);\r\n  }\r\n\r\n  updateDisplayTime(minutes: number | undefined | null): void {\r\n    if (minutes != null && minutes >= 0) {\r\n      let m = moment({hour: Math.floor(minutes / 60), minute: minutes % 60});\r\n      this.displayedTime = m.locale(this.localization.currentCultureName || 'de-DE').format(\"HH:mm\");\r\n    }\r\n    else {\r\n      if (this.showNoneOption == true) {\r\n        this.displayedTime = this.noneOptionValue;\r\n      } else {\r\n        this.displayedTime = null;\r\n      }\r\n    }\r\n  }\r\n\r\n  minutesChanged(newValue: number | undefined, oldValue: number | undefined) {\r\n    if (!newValue && !oldValue) {\r\n      return;\r\n    }\r\n    if(!newValue) {\r\n      return;\r\n    }\r\n    if (newValue !== oldValue) {\r\n      this.updateDisplayTime(newValue);\r\n    }\r\n  }\r\n\r\n  displayedTimeChanged(newValue: string, oldValue: string) {\r\n    if (!newValue && !oldValue) {\r\n      return;\r\n    }\r\n\r\n    if(!newValue) {\r\n      return;\r\n    }\r\n\r\n    if (newValue !== oldValue) {\r\n      if (newValue !== this.noneOptionValue) {\r\n        let [hours, minutes] = newValue.split(':');\r\n        let h = parseInt(hours) || 0;\r\n        let m = parseInt(minutes) || 0;\r\n        this.minutes = h * 60 + m;\r\n      } else {\r\n        this.minutes = null;\r\n      }\r\n    }\r\n  }\r\n\r\n  get timeRange() {\r\n    let timeConfig = this.config.getTimeConfig(undefined, false, false);\r\n    let res = [];\r\n\r\n    if (this.showNoneOption == true) {\r\n      res.push(this.noneOptionValue);\r\n    }\r\n\r\n    for (let { hours, minutes } of timeConfig.iterate(this.timeStep)) {\r\n      let time = this.formatTime(hours, minutes);\r\n      res.push(time);\r\n    }\r\n    return res;\r\n  }\r\n\r\n  @computedFrom('config')\r\n  get formatedStartTime() {\r\n    let timeConfig = this.config.getTimeConfig(undefined, false, false);\r\n    return this.formatTime(timeConfig.defaultOpenHour(this.defaultHour), 0);\r\n  }\r\n\r\n  @computedFrom('config')\r\n  get defaultHour() {\r\n    return this.config.defaultHour || 0;\r\n  }\r\n\r\n  private formatTime(hours: number, minutes: number): string {\r\n    return `${this.leadingZero(hours)}:${this.leadingZero(minutes)}`;\r\n  }\r\n\r\n  private leadingZero(value: number): string {\r\n    if (value < 10) {\r\n      return `0${value}`;\r\n    }\r\n    return value.toString();\r\n  }\r\n}\r\n","import { DatePickersConfiguration, setDefaultFormat, setDefaultTimeConfiguration } from './date-pickers-configuration';\r\nimport { FrameworkConfiguration, PLATFORM } from 'aurelia-framework';\r\nexport * from './date-picker';\r\nexport * from './date-picker2';\r\nexport * from './datetime-config';\r\nexport * from './datetime-picker';\r\nexport * from './daytime-picker';\r\nexport * from './time-picker';\r\n\r\nimport 'bootstrap-datepicker';\r\nimport 'bootstrap-datepicker/dist/locales/bootstrap-datepicker.de.min.js';\r\nimport 'bootstrap-datepicker/dist/locales/bootstrap-datepicker.hu.min.js';\r\n\r\nexport function configure(config: FrameworkConfiguration, pluginConfig?: DatePickersConfiguration) {\r\n  if(pluginConfig){\r\n    pluginConfig.defaultFormat && setDefaultFormat(pluginConfig.defaultFormat);\r\n    pluginConfig.defaultTimeConfiguration && setDefaultTimeConfiguration(pluginConfig.defaultTimeConfiguration);\r\n  }\r\n  config\r\n    .globalResources([\r\n\r\n      PLATFORM.moduleName('./date-picker'),\r\n\r\n      PLATFORM.moduleName('./date-picker2'),\r\n\r\n      PLATFORM.moduleName('./datetime-picker'),\r\n\r\n      PLATFORM.moduleName('./daytime-picker'),\r\n\r\n      PLATFORM.moduleName('./time-picker')\r\n    ]);\r\n}\r\n","import { bindable, autoinject, bindingMode } from 'aurelia-framework';\r\nimport { DateTimeConfig } from './datetime-config';\r\nimport { defaultTimeConfig} from './date-pickers-configuration';\r\nimport moment from 'moment';\r\n\r\n\r\n@autoinject()\r\nexport class TimePicker {\r\n  @bindable({ defaultBindingMode: bindingMode.twoWay }) value?: moment.Moment;\r\n  @bindable config: DateTimeConfig = defaultTimeConfig;\r\n\r\n  @bindable displayedHours: string | null = null;\r\n  @bindable displayedMinutes: string | null = null;\r\n\r\n  availableHours: string[] = [];\r\n  availableMinutes: string[] = [];\r\n\r\n  constructor() {\r\n  }\r\n\r\n  attached() {\r\n    this.initialize();\r\n  }\r\n\r\n  configChanged(newValue: DateTimeConfig, oldValue: DateTimeConfig) {\r\n    if (newValue === oldValue) return;\r\n\r\n    this.initialize();\r\n  }\r\n\r\n  initialize() {\r\n    this.updateDisplayTime(this.value);\r\n    this.availableHours = [];\r\n    this.availableMinutes = [];\r\n    for (let hour = this.config.hourFrom || 0; hour < (this.config.hourTo || 24); hour++) {\r\n      this.availableHours.push(this.leadingZero(hour));\r\n    }\r\n\r\n    for (let minute = 0; minute < 60; minute++) {\r\n      this.availableMinutes.push(this.leadingZero(minute));\r\n    }\r\n  }\r\n\r\n  updateDisplayTime(time: moment.Moment | undefined | null): void {\r\n    if (time) {\r\n      this.displayedHours = this.leadingZero(time.hours());\r\n      this.displayedMinutes = this.leadingZero(time.minutes());\r\n    }\r\n    else {\r\n      this.displayedHours = this.leadingZero(this.config.defaultHour || 0);\r\n      this.displayedMinutes =  this.leadingZero(0);\r\n    }\r\n  }\r\n\r\n  displayedMinutesChanged(newValue: number | undefined, oldValue: number | undefined) {\r\n    if (!newValue && !oldValue) {\r\n      return;\r\n    }\r\n    if(!newValue) {\r\n      return;\r\n    }\r\n    if (!this.value) {\r\n      let date = new Date().setHours(this.config.defaultHour || 0, 0);\r\n      this.value = moment(date);\r\n    }\r\n    if (newValue !== oldValue) {\r\n      this.value = moment(this.value.minutes(newValue));\r\n    }\r\n  }\r\n\r\n  displayedHoursChanged(newValue: number | undefined, oldValue: number | undefined) {\r\n    if (!newValue && !oldValue) {\r\n      return;\r\n    }\r\n    if(!newValue) {\r\n      return;\r\n    }\r\n    if (!this.value) {\r\n      let date = new Date().setHours(this.config.defaultHour || 0, 0);\r\n      this.value = moment(date);\r\n    }\r\n    if (newValue !== oldValue) {\r\n      this.value = moment(this.value.hours(newValue));\r\n    }\r\n  }\r\n\r\n  private leadingZero(value: number): string {\r\n    if (value < 10) {\r\n      return `0${value}`;\r\n    }\r\n    return value.toString();\r\n  }\r\n}\r\n","import { autoinject, PLATFORM } from 'aurelia-framework';\r\nimport { DialogController } from 'aurelia-dialog';\r\n\r\nimport { openDialogAndWaitIfConfirmed } from './exec';\r\n\r\nimport './confirmation-dialog.scss';\r\n\r\n@autoinject\r\nexport class ConfirmationDialog {\r\n  constructor(\r\n    public controller: DialogController) {\r\n  }\r\n\r\n  model!: ConfirmationDialogModel;\r\n\r\n  static async confirm(options: ConfirmationDialogModel) {\r\n    return await openDialogAndWaitIfConfirmed({\r\n      viewModel: PLATFORM.moduleName('@steinpilz/fria2-au-dialogs/confirmation-dialog'),\r\n      model: options\r\n    });\r\n  }\r\n\r\n  activate(model: ConfirmationDialogModel) {\r\n    this.model = model;\r\n  }\r\n}\r\n\r\nexport interface ConfirmationDialogModel {\r\n  confirmationHeader?: string\r\n  confirmationText: string\r\n  confirmButtonText?: string\r\n  cancelButtonText?: string\r\n}\r\n","import { Container } from 'aurelia-framework';\r\nimport { DialogService, DialogSettings } from 'aurelia-dialog';\r\n\r\nexport async function openDialogAndWaitIfConfirmed(settings?: DialogSettings): Promise<boolean> {\r\n  const dialogService = Container.instance.get(DialogService) as DialogService;\r\n  let openResult = await dialogService.open(settings);\r\n\r\n  if (openResult.wasCancelled === true) {\r\n    return false;\r\n  }\r\n\r\n  let closeResult = await openResult.closeResult;\r\n  return !closeResult.wasCancelled;\r\n}\r\n\r\nexport async function openDialogAndWait<TResult>(settings?: DialogSettings): Promise<TResult | undefined> {\r\n  const dialogService = Container.instance.get(DialogService) as DialogService;\r\n  let openResult = await dialogService.open(settings);\r\n\r\n  if (openResult.wasCancelled === true) {\r\n    return undefined;\r\n  }\r\n\r\n  let closeResult = await openResult.closeResult;\r\n  if (closeResult.wasCancelled === true) {\r\n    return undefined;\r\n  }\r\n\r\n  return closeResult.output as TResult | undefined;\r\n}\r\n","import { autoinject } from 'aurelia-framework';\r\nimport { DialogService } from 'aurelia-dialog';\r\n\r\n@autoinject\r\nexport class CloseAllDialogsRoutePipelineStep {\r\n  constructor(private dialogService: DialogService) {\r\n  }\r\n\r\n  async run(_navigationInstruction: any, next: any) {\r\n    this.dialogService.closeAll();\r\n    return next();\r\n  }\r\n}\r\n","import { FrameworkConfiguration, PLATFORM } from 'aurelia-framework';\r\nimport { DialogConfiguration } from 'aurelia-dialog';\r\n\r\nexport * from './close-all-dialogs';\r\nexport * from './confirmation-dialog';\r\nexport * from './message-dialog';\r\nexport * from './exec';\r\n\r\nexport function configure(config: FrameworkConfiguration, additionalDialogConfiguration?: object | ((config: DialogConfiguration) => void)) {\r\n  config\r\n    .plugin(PLATFORM.moduleName('aurelia-dialog'), (config: DialogConfiguration) => {\r\n      config.useDefaults();\r\n      config.settings.keyboard = true;\r\n      config.settings.overlayDismiss = true;\r\n      config.settings.centerHorizontalOnly = false;\r\n      config.settings.lock = false; //controls close button in the header\r\n      config.settings.startingZIndex = 99999;\r\n\r\n      if (typeof additionalDialogConfiguration === 'function') {\r\n        additionalDialogConfiguration(config);\r\n      }\r\n    });\r\n}\r\n","import { autoinject, Container, PLATFORM } from 'aurelia-framework';\r\nimport { DialogController, DialogService } from 'aurelia-dialog';\r\n\r\nimport './message-dialog.scss';\r\n\r\n@autoinject\r\nexport class MessageDialog {\r\n  constructor(\r\n    public controller: DialogController) {\r\n  }\r\n\r\n  model!: MessageDialogModel;\r\n\r\n  static async show(options: MessageDialogModel) {\r\n    const dialogService = Container.instance.get(DialogService) as DialogService;\r\n    let openResult = await dialogService.open({\r\n      viewModel: PLATFORM.moduleName('@steinpilz/fria2-au-dialogs/message-dialog'),\r\n      model: options\r\n    });\r\n\r\n    if (openResult.wasCancelled) {\r\n      return false;\r\n    }\r\n\r\n    let closeResult = await openResult.closeResult;\r\n    if (closeResult.wasCancelled) {\r\n      return false;\r\n    }\r\n\r\n    return closeResult.output;\r\n  }\r\n\r\n  activate(model: MessageDialogModel) {\r\n    this.model = model;\r\n  }\r\n\r\n  static cancelButton: MessageDialogButton = {\r\n    result: false,\r\n    text: 'Dialog.Buttons.Cancel'\r\n  }\r\n\r\n  static cancelButtonWithText(textKey: string) {\r\n    return {\r\n      result: false,\r\n      text: textKey\r\n    }\r\n  }\r\n\r\n  static okCancelButtons(okButtonText: string, cancelButtonText?: string) {\r\n    let cancelKey = cancelButtonText || 'Dialog.Buttons.Cancel';\r\n    return [\r\n      { result: true, text: okButtonText, cssClass: 'btn-info' },\r\n      { result: false, text: cancelKey },\r\n    ]\r\n  }\r\n}\r\n\r\nexport interface MessageDialogModel {\r\n  header?: string\r\n  messageTextTag?: string\r\n  messageText?: string\r\n  messageHtml?: string\r\n  buttons?: MessageDialogButton[]\r\n}\r\n\r\nexport interface MessageDialogButton {\r\n  result: any\r\n  text: string\r\n  cssClass?: string\r\n}\r\n","export class DateLocaleConfig {\n  parseDateFormat: string = dateLocaleConfigDefaults.parseDateFormat;\n  parseDateTimeFormat: string = dateLocaleConfigDefaults.parseDateTimeFormat;\n  displayDateFormat: string = dateLocaleConfigDefaults.displayDateFormat;\n  displayDateTimeFormat: string = dateLocaleConfigDefaults.displayDateTimeFormat;\n}\n\nexport class DateLocaleConfigDefaults{\n  currentTimeZone: string = 'Europe/Berlin';\n  currentCultureName = 'de-DE';\n  \n  parseDateFormat: string = 'D.M.YYYY';\n  parseDateTimeFormat: string = 'D.M.YYYY H:mm';\n  displayDateFormat: string = 'DD.MM.YYYY';\n  displayDateTimeFormat: string = 'DD.MM.YYYY HH:mm';\n}\nexport let dateLocaleConfigDefaults = new DateLocaleConfigDefaults();\n","import { autoinject } from 'aurelia-framework';\nimport { Moment } from 'moment-timezone/moment-timezone';\nimport { MomentHelper } from './moment-helper';\n\n@autoinject\nexport class DateFormatValueConverter {\n  toView(value?: Moment, format?: string) {\n    return MomentHelper.format(value, format);\n  }\n\n  fromView(value: string, format?: string) {\n    return MomentHelper.parse(value, true);\n  }\n}\n\nexport class DateGeneralFormatValueConverter {\n  toView(value: Moment, format: string = \"L LT\") {\n    return MomentHelper.format(value, format);\n  }\n}\n","\nimport { autoinject } from 'aurelia-framework';\nimport { Moment } from 'moment-timezone/moment-timezone';\nimport { MomentHelper } from './moment-helper';\n\n@autoinject\nexport class DateTimeFormatValueConverter {\n  toView(value?: Moment, format?: string) {\n    return MomentHelper.formatDateTime(value, format);\n  }\n\n  fromView(value: string, format?: string) {\n    return MomentHelper.parseDateTime(value, true);\n  }\n}\n","import { Container } from 'aurelia-framework';\n// import from 'moment-timezone' to allow moment-timezone to augment moment object\n// we import from 'moment-timezone/moment-timezone' and not from 'moment-timezone' since 'moment-timezone/index' loads full timezones data immediately.\nimport moment from 'moment-timezone/moment-timezone';\n\nimport { getLogger } from 'aurelia-logging';\nimport { dateLocaleConfigDefaults } from './config';\n\nconst logger = getLogger('TimeService');\n\nexport function configureTimeZones(params: { userTimeZone: string | undefined }) {\n  let timeZoneName = params.userTimeZone || dateLocaleConfigDefaults.currentTimeZone;\n\n  if (!mostUsedTimeZoneDataLoaded) {\n    moment.tz.load(mostUsedTimeZoneData);\n    mostUsedTimeZoneDataLoaded = true;\n  }\n    \n  let timeZone: moment.MomentZone | undefined = moment.tz.zone(timeZoneName) as moment.MomentZone;\n  if (!timeZone) {\n    const allTimeZones = require('moment-timezone/data/packed/latest.json');\n    moment.tz.load(allTimeZones);\n  }\n\n  timeZone = moment.tz.zone(timeZoneName) as moment.MomentZone;\n  \n  moment.tz.setDefault(timeZoneName);\n  if (timeZone) {\n    logger.info(`Using time zone ${timeZone.name} with current offset of ${moment().format('Z')} as a global default.`);\n  } else {\n    logger.error(`No data for time zone ${timeZone}. User local timestamps may have incorrect offset.`);\n  }\n}\n\nlet mostUsedTimeZoneDataLoaded = false;\nconst mostUsedTimeZoneData = {\n  \"version\": \"2017b\",\n  \"zones\": [\n    \"CET|CET CEST|-10 -20|01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 16M0 1gMM0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00\",\n    \"CST6CDT|CST CDT CWT CPT|60 50 50 50|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0\",\n    \"Pacific/Easter|EMT -07 -06 -05|7h.s 70 60 50|012121212121212121212121212123232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323|-1uSgG.w 1s4IG.w WL0 1zd0 On0 1ip0 11z0 1o10 11z0 1qN0 WL0 1ld0 14n0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 2pA0 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Dd0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Dd0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Dd0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0|30e2\",\n    \"EET|EET EEST|-20 -30|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|hDB0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00\",\n    \"EST|EST|50|0|\",\n    \"EST5EDT|EST EDT EWT EPT|50 40 40 40|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261t0 1nX0 11B0 1nX0 SgN0 8x40 iv0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0\",\n    \"Europe/Berlin|CET CEST CEMT|-10 -20 -30|01010101010101210101210101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 kL0 Nc0 m10 WM0 1ao0 1cp0 dX0 jz0 Dd0 1io0 17c0 1fA0 1a00 1ehA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|41e5\",\n    \"HST|HST|a0|0|\",\n    \"MET|MET MEST|-10 -20|01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 16M0 1gMM0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00\",\n    \"MST|MST|70|0|\",\n    \"MST7MDT|MST MDT MWT MPT|70 60 60 60|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261r0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0\",\n    \"WET|WET WEST|0 -10|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|hDB0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00\"\n  ],\n  \"links\": [\n  ] as string[]\n};\n\nexport function configureLocale(params: { userCulture: string | undefined }){\n  let cultureName = params.userCulture || dateLocaleConfigDefaults.currentCultureName;\n  let newLocale = moment.locale(cultureName);\n  logger.info(`Using locale '${newLocale}' as a global default, for '${cultureName}' culture.`);\n}\n","import { FrameworkConfiguration, PLATFORM } from 'aurelia-framework';\nimport { DateLocaleConfig } from './config';\nimport { configureLocale, configureTimeZones } from './time-service';\n\nexport * from './config';\nexport * from './time-service';\nexport * from './moment-helper';\n\n// Single place for explicit locale resources inclusion.\n// Add other locales here when needed.\nimport 'moment/locale/de.js';\nimport 'moment/locale/hu.js';\n\nexport function configure(frameworkConfig: FrameworkConfiguration, configureCallback?: (config: DateLocaleConfig) => void) {\n  const rootContainer = frameworkConfig.container;\n\n  frameworkConfig\n    .globalResources([\n      PLATFORM.moduleName('./date-format-converter'),\n      PLATFORM.moduleName('./date-time-format-converter')\n    ]);\n\n  const config = rootContainer.get(DateLocaleConfig) as DateLocaleConfig;\n  if (typeof configureCallback === 'function') {\n    configureCallback(config);\n  }\n\n  configureTimeZones({userTimeZone: undefined}); //configures default tz\n  configureLocale({userCulture: undefined}); //configures default locale\n}\n","import { Container } from \"aurelia-framework\";\nimport moment from 'moment-timezone/moment-timezone';\nimport { Moment } from 'moment-timezone/moment-timezone';\nimport { DateLocaleConfig } from './config';\n\nexport class MomentHelper {\n  private static localeConfig = Container.instance.get(DateLocaleConfig) as DateLocaleConfig;\n\n  private static get displayDateFormat() {\n    return this.localeConfig.displayDateFormat;\n  }\n\n  private static get displayDateTimeFormat() {\n    return this.localeConfig.displayDateTimeFormat;\n  }\n\n  private static get parseDateFormat() {\n    return this.localeConfig.parseDateFormat;\n  }\n\n  private static get parseDateTimeFormat() {\n    return this.localeConfig.parseDateTimeFormat;\n  }\n\n  static localize(m: Moment) {\n    let defaultValuesProvider = moment();\n\n    return m.clone()\n      .tz(defaultValuesProvider.tz() as string)\n      .locale(defaultValuesProvider.locale());\n  }\n\n  static format(m?: Moment, format?: string) {\n    if (m == null) return null;\n    return this.localize(m).format(format || this.displayDateFormat);\n  }\n\n  static formatDateTime(m?: Moment, format?: string) {\n    if (m == null) return null;\n    return this.localize(m).format(format || this.displayDateTimeFormat);\n  }\n\n  static parse(str: string, strict: boolean, format?: string) {\n    if (str == null) return null;\n    let defaultValuesProvider = moment();    \n    let m = moment.tz(str, format || this.parseDateFormat, strict, defaultValuesProvider.tz() as string);\n    return m.isValid() ? this.localize(m) : undefined;\n  }\n\n  static parseDateTime(str: string, strict: boolean, format?: string) {\n    if (str == null) return null;\n    let defaultValuesProvider = moment();    \n    let m = moment.tz(str, format || this.parseDateTimeFormat, strict, defaultValuesProvider.tz() as string);\n    return m.isValid() ? this.localize(m) : undefined;\n  }\n}\n","import { ResourcesThin, ResourceParams } from '@steinpilz/fria2-text-resources-module';\r\nimport { StatisticsConfig } from './statistics';\r\n\r\nexport class Config {\r\n\r\n  private _lastUsageDateStatisticsConfig: StatisticsConfig | undefined = undefined;\r\n  /**\r\n   * Skips Localization.init call during Aurelia plugin configure execution.\r\n   * Allows to initialize localization lately with dynamic ResourceParams such as mandant or umgebugen.\r\n   * If ResourceParams are static, consider initializing them via initParams and leaving initOnPluginConfigure = true.\r\n   */\r\n  initOnPluginConfigure = true;\r\n\r\n  /**\r\n   * Custom mandant or environment (umgebugen).\r\n   * Is these are not static, postpone auto initialization and initialize later manually:\r\n   * config.initOnPluginConfigure = false;\r\n   * ...\r\n   * const mandant = await getMandant();\r\n   * await localization.init({ mandant, environment: 100 });\r\n   */\r\n  initParams: ResourceParams | undefined = undefined;\r\n\r\n  defaultLanguageIsoCode = 'de';\r\n  defaultCultureName = 'de-DE';\r\n\r\n  /**\r\n   * Sets localization.fallbackLanguageIsoCode automatically on cutlure change\r\n   * trying to get the value from resource-module/languages endpoint\r\n   * (loaded on localization.init()/.reinit() calls).\r\n   */\r\n  autodetectFallbackLanguage = true;\r\n\r\n  replaceLineBreaksWithExplicitBrTags = false;\r\n\r\n  unhandledErrorDelegate = (error: any) => {\r\n    console.error(`Unhandled error occured. Translations may not be available. Error details: %O`, error);\r\n  };\r\n\r\n  /**\r\n   * Static .json linked on build time for dev/test purposes.\r\n   * Consider including statically via 'require' of 'System.import' like the following:\r\n   *   require('../resources-thin.json') as ResourcesThin;\r\n   */\r\n  useStaticResources: ResourcesThin | undefined = undefined;\r\n\r\n  /**\r\n   * Exact string to prepend to all resource keys before lookup. Does not adds dot, must be added manually.\r\n   * I.e. to get keys like 'Module.Key' from 'Key', config value must be with dot: 'Module.'.\r\n   * IMPORTANT: resourceKeyBypassPrefix logic applies before prepending resourceKeyPrefix.\r\n   */\r\n  resourceKeyPrefix: string | undefined = undefined;\r\n\r\n  /**\r\n   * If not empty, localization will look for the prefix in resource keys, and if found, will return the rest of the key without translation.\r\n   * E.g. for prefix 'Raw:' and key 'Raw:SomeNonTranslatableStuff' -> 'SomeNonTranslatableStuff'.\r\n   * IMPORTANT: resourceKeyBypassPrefix logic applies before prepending resourceKeyPrefix.\r\n   */\r\n  resourceKeyBypassPrefix: string | undefined = undefined;\r\n\r\n  noTranslationFallbackTranslator: 'empty-string' | 'sentence-case-key' | 'container-and-key-decorated-as-unknown' | ((key: string) => string) = 'container-and-key-decorated-as-unknown';\r\n\r\n  get lastUsageDateStatisticsConfig(): StatisticsConfig | undefined {\r\n    return this._lastUsageDateStatisticsConfig;\r\n  }\r\n\r\n  public enableLastUsageDateStatistics(configureCallback: (config: StatisticsConfig) => void) {\r\n    this._lastUsageDateStatisticsConfig = new StatisticsConfig();\r\n    configureCallback(this._lastUsageDateStatisticsConfig);\r\n  }\r\n}\r\n","import { autoinject } from 'aurelia-framework';\r\n\r\nimport { formatCurrency } from './currency-format';\r\nimport { Localization } from './localization';\r\n\r\n@autoinject\r\nexport class CurrencyValueConverter {\r\n  constructor(private localization: Localization) {\r\n  }\r\n\r\n  toView(value: any, style?: 'default' | 'no-symbol') {\r\n    if (typeof value !== 'number') {\r\n      return value;\r\n    }\r\n    return formatCurrency(value, this.localization.currentLanguageIsoCode, style);\r\n  }\r\n}\r\n\r\n\r\n","export function formatCurrency(value: number, locales?: string | string[], style?: 'default' | 'no-symbol') {\r\n  const options = style && formatStyleOptions[style] || defaultOptions;\r\n  return value.toLocaleString(locales, options)\r\n}\r\n\r\nconst formatStyleOptions: { [style: string]: Intl.NumberFormatOptions } = {\r\n  'no-symbol':{ minimumFractionDigits: 2, maximumFractionDigits: 2 }\r\n}\r\n\r\nconst defaultOptions = { style: 'currency', 'currency': 'EUR' }","import { FrameworkConfiguration } from 'aurelia-framework';\r\nimport { PLATFORM } from 'aurelia-pal';\r\n\r\nimport { Config } from './configuration';\r\nimport { Localization, normalizeResources } from './localization';\r\n\r\nexport { Localization, Config, Config as LocalizationConfig, normalizeResources }\r\nexport * from './currency-format';\r\nexport * from './currency-converter';\r\n\r\nexport function configure(frameworkConfig: FrameworkConfiguration, configureCallback?: (config: Config) => void) {\r\n  const rootContainer = frameworkConfig.container;\r\n\r\n  frameworkConfig\r\n    .globalResources([\r\n      PLATFORM.moduleName('./currency-converter'),\r\n      PLATFORM.moduleName('./translate-converter'),\r\n      PLATFORM.moduleName('./translate-find-first-converter'),\r\n      PLATFORM.moduleName('./translate-binding-behavior')\r\n    ]);\r\n\r\n  const config = rootContainer.get(Config) as Config;\r\n  if (typeof configureCallback === 'function') {\r\n    configureCallback(config);\r\n  }\r\n\r\n  if (config.initOnPluginConfigure) {\r\n    const localization = rootContainer.get(Localization) as Localization;\r\n    localization.init();\r\n  }\r\n}\r\n","// naive implementations\r\n\r\nexport function trimFirstSlash(url: string) {\r\n  return url.startsWith('/') ? url.substr(1) : url;\r\n}\r\n\r\nexport function trimLastSlash(url: string) {\r\n  return url.endsWith('/') ? url.slice(0, -1) : url;\r\n}\r\n\r\n// upto('services/modules/host', 'modules') === 'services/modules'\r\n// upto('feature/new-modules', 'modules') === undefined\r\nexport function upto(url: string, urlSegment: string) {\r\n  let segments = url.split('/');\r\n  let idx = segments.findIndex(x => x === urlSegment);\r\n  return idx === -1 ? undefined : segments.slice(0, idx + 1).join('/');\r\n}\r\n\r\nexport function parent(url: string) {\r\n  let lastSlashIds = trimLastSlash(url).lastIndexOf('/');\r\n  return lastSlashIds === -1 ? undefined : url.substr(0, lastSlashIds);\r\n}\r\n\r\nexport function combine(url: string, relativeUrl: string) {\r\n  url = trimLastSlash(url);\r\n  // because of the convention like '/modules/resources'\r\n  relativeUrl = trimFirstSlash(relativeUrl);\r\n  return url + '/' + relativeUrl;\r\n}\r\n\r\nexport function combineMany(...urls: string[]) {\r\n  return urls.reduce(combine);\r\n}\r\n\r\nexport function canonicalize(url: string) {\r\n  return url.endsWith('/') ? url : url + '/';\r\n}\r\n","export class BaseHref {\r\n  static getBaseHref() {\r\n    let bases = document.getElementsByTagName('base');\r\n    return bases.length > 0 && bases[0].getAttribute('href') || undefined;\r\n  }\r\n\r\n  static getBaseHrefOrThrow() {\r\n    let baseHref = this.getBaseHref();\r\n    if (baseHref != null) return baseHref;\r\n    else throw new Error('can not find base href');\r\n  }\r\n}\r\n","import * as Url from './url';\r\nimport { BaseHref } from './base-href';\r\n\r\nexport function getConventionBasedModuleEndpoint(moduleUrl: string) {\r\n  let baseUrl = BaseHref.getBaseHrefOrThrow();\r\n  let modulesUrl = Url.upto(baseUrl, 'modules');\r\n  let modulesHostBaseUrl = modulesUrl && Url.parent(modulesUrl);\r\n\r\n  return modulesHostBaseUrl != null\r\n    ? Url.canonicalize(Url.combineMany(modulesHostBaseUrl, moduleUrl))\r\n    : Url.canonicalize(Url.combineMany(baseUrl, moduleUrl));\r\n}\r\n","import { autoinject } from 'aurelia-framework';\r\nimport { WebApiClient } from '@steinpilz/fria2-au-web-api';\r\nimport * as EndpointResolverHelper from './endpoint-resolver-helper';\r\nimport { HostModuleConfig } from './models';\r\n\r\n@autoinject\r\nexport class HostModuleGateway extends WebApiClient {\r\n  constructor() {\r\n    let url = EndpointResolverHelper.getConventionBasedModuleEndpoint('/modules/host/api');\r\n    super(webApiConfig => webApiConfig.withBaseUrl(url));\r\n  }\r\n\r\n  getConfig() {\r\n    return this.get<HostModuleConfig>(`config`);\r\n  }\r\n}\r\n","import { HostModuleGateway } from './gateway';\r\nimport { HostModuleConfig } from './models';\r\nimport { autoinject } from 'aurelia-framework';\r\n\r\n// it is useful for HostModule UI\r\n// but i can not find a usage for this in any other module\r\n// so may be it is redundant\r\n@autoinject\r\nexport class HostModuleConfigStorage {\r\n  constructor(\r\n    private readonly gateway: HostModuleGateway\r\n  ) { }\r\n\r\n  private config?: HostModuleConfig;\r\n  private configPromise?: Promise<HostModuleConfig>;\r\n  async getConfig() {\r\n    if (this.configPromise != null) return await this.configPromise;\r\n    if (this.config != null) return this.config;\r\n\r\n    let promise = this.configPromise = this.gateway.getConfig();\r\n    let res = this.config = await promise;\r\n    this.configPromise = undefined;\r\n    return res;\r\n  }\r\n}\r\n","import { HostModuleConfig, ModuleEndpointType } from './models';\r\n\r\ntype ModuleName = string;\r\nexport type ApiType = 'internal' | 'external';\r\n\r\ntype Endpoint = {\r\n  name: string\r\n  type: ModuleEndpointType\r\n  url: string\r\n}\r\n\r\nexport class HostConfigHelper {\r\n  private endpoints: Map<ModuleName, Endpoint[]> = new Map();\r\n\r\n  constructor(config: HostModuleConfig) {\r\n    this.endpoints = new Map();\r\n\r\n    let getOrAdd = <K, V>(map: Map<K, V>, key: K, valueProvider: () => V) => {\r\n      let res = map.get(key);\r\n      if (res == null) {\r\n        res = valueProvider();\r\n        map.set(key, res);\r\n      }\r\n      return res;\r\n    };\r\n\r\n    let parseApiType = (s: string): ApiType => {\r\n      switch (s) {\r\n        case 'internal':\r\n          return 'internal';\r\n        case 'external':\r\n        case 'public':\r\n          return 'external'; \r\n        default:\r\n            throw new Error(`can not parse '${s}' into ApiType`);\r\n      }\r\n    };\r\n\r\n    config.modules.forEach(moduleDto =>\r\n      moduleDto.endpoints.forEach(endpointDto => {\r\n        // API endpoints have a privacy type in the 'name' property\r\n        let name = endpointDto.type === 'api' ? parseApiType(endpointDto.name) : endpointDto.name;\r\n        let endpoint: Endpoint = { name: name, type: endpointDto.type, url: endpointDto.url };\r\n\r\n        getOrAdd(this.endpoints, moduleDto.name, () => []).push(endpoint);\r\n      })\r\n    );\r\n  }\r\n\r\n  private getEndpoints(moduleName: ModuleName, endpointType: ModuleEndpointType) {\r\n    let es = this.endpoints.get(moduleName);\r\n    if (es == null) return undefined;\r\n\r\n    let fes = es.filter(e => e.type === endpointType);\r\n    if (fes.length === 0) throw new Error(`'${moduleName}' does not have '${endpointType.toUpperCase()}' endpoint`);;\r\n\r\n    return fes;\r\n  }\r\n\r\n  getUiEndpoint(moduleName: ModuleName) {\r\n    let es = this.getEndpoints(moduleName, 'ui');\r\n    if (es == null) return undefined;\r\n    if (es.length > 1) throw new Error(`module '${moduleName}' has more then one UI endpoint`);\r\n    return es[0].url;\r\n  }\r\n\r\n  getApiEndpoint(moduleName: ModuleName, apiType: ApiType) {\r\n    // API endpoints have a privacy type in the 'name' property\r\n    let es = this.getEndpoints(moduleName, 'api');\r\n    if (es == null) return undefined;\r\n    es = es.filter(e => e.name === apiType);\r\n    if (es.length > 1) throw new Error(`module '${moduleName}' has more then one '${apiType}' API endpoint`);\r\n    return es[0].url;\r\n  }\r\n}\r\n","import * as EndpointResolverHelper from './endpoint-resolver-helper';\r\nimport { HostConfigHelper, ApiType } from './host-config-helper';\r\nimport { HostModuleConfigStorage } from './host-module-config-storage';\r\nimport { autoinject } from 'aurelia-framework';\r\n\r\n@autoinject\r\nexport class EndpointResolver {\r\n  private hostConfig?: HostConfigHelper;\r\n\r\n  constructor(\r\n    private readonly hostModuleConfigStorage: HostModuleConfigStorage\r\n  ) { }\r\n\r\n  private async ensureHostConfig() {\r\n    if (this.hostConfig != null) return this.hostConfig;\r\n\r\n    let cfg = await this.hostModuleConfigStorage.getConfig();\r\n    return this.hostConfig = new HostConfigHelper(cfg);\r\n  }\r\n\r\n  async getModuleApiEndpoint(moduleName: string, apiType: ApiType) {\r\n    let cfg = await this.ensureHostConfig();\r\n    let cfgEp = cfg.getApiEndpoint(moduleName, apiType);\r\n    return cfgEp == null ? undefined : EndpointResolverHelper.getConventionBasedModuleEndpoint(cfgEp);\r\n  }\r\n\r\n  async getModuleUiEndpoint(moduleName: string) {\r\n    let cfg = await this.ensureHostConfig();\r\n    let cfgEp = cfg.getUiEndpoint(moduleName);\r\n    return cfgEp == null ? undefined : EndpointResolverHelper.getConventionBasedModuleEndpoint(cfgEp);\r\n  }\r\n}\r\n","import { autoinject } from 'aurelia-framework';\r\nimport { WebApiClient } from '@steinpilz/fria2-au-web-api';\r\nimport { EndpointResolver } from '@steinpilz/fria2-host-module';\r\nimport { Language, ResourceParams, ResourcesThin, LastUsageDateParams } from './models';\r\nimport 'core-js/fn/object/entries';\r\n\r\n@autoinject\r\nexport class TextResourcesModuleGateway extends WebApiClient {\r\n  constructor(\r\n    private readonly endpointResolver: EndpointResolver\r\n  ) {\r\n    super(webApiConfig => webApiConfig\r\n      .withCachingMode('default')\r\n    );\r\n  }\r\n\r\n  private cachedEndpoint?: string;\r\n  private async endpoint() {\r\n    if (this.cachedEndpoint != null) return this.cachedEndpoint;\r\n\r\n    let ep = await this.endpointResolver.getModuleApiEndpoint('Fria2.TextResources', 'external');\r\n    if (ep == null) throw new Error(`can not resolve Fria2.TextResources API endpoint`);\r\n    return this.cachedEndpoint = ep;\r\n  }\r\n\r\n  private objToQuery(queryObj?: object) {\r\n    if (queryObj == null) return '';\r\n    return `?` + Object.entries(queryObj)\r\n      .filter(p => p[1] != null)\r\n      .map(p => `${encodeURIComponent(p[0])}=${encodeURIComponent(p[1])}`)\r\n      .join(`&`);\r\n  }\r\n\r\n  async getLanguages() {\r\n    let ep = await this.endpoint();\r\n    return await this.get<Language[]>(ep + `languages`);\r\n  }\r\n\r\n  async getResources(params?: ResourceParams) {\r\n    let ep = await this.endpoint();\r\n    return await this.get<ResourcesThin>(ep + `resources` + this.objToQuery(params));\r\n  }\r\n\r\n  async updateLastUsageDate(params?: LastUsageDateParams) {\r\n    let ep = await this.endpoint();\r\n    return await this.post(ep + `resources/last-usage-date`, params);\r\n  }\r\n}\r\n","export function flattenObject(object: any): any {\r\n  let flatObject: any = {};\r\n\r\n  for (let property of Object.keys(object)) {\r\n    if (typeof object[property] === 'object') {\r\n      let flatSubobject = flattenObject(object[property]);\r\n      for (let subproperty of Object.keys(flatSubobject)) {\r\n        flatObject[property + '.' + subproperty] = flatSubobject[subproperty];\r\n      }\r\n    } else {\r\n      flatObject[property] = object[property];\r\n    }\r\n  }\r\n\r\n  return flatObject;\r\n}\r\n","import { autoinject } from 'aurelia-framework';\r\nimport { getLogger } from 'aurelia-logging';\r\n\r\nimport { TranslateBindingBehavior } from './translate-binding-behavior';\r\nimport { TextResourcesModuleGateway, ResourcesThin, ResourceParams, Language } from '@steinpilz/fria2-text-resources-module';\r\nimport { Config } from './configuration';\r\nimport { flattenObject } from './object';\r\nimport { LastUsageDateStatistics, StatisticsConfig } from './statistics';\r\n\r\nlet logger = getLogger('Fria2.Localization');\r\n\r\nexport type PositionalArg = string | (() => string);\r\n\r\n@autoinject\r\nexport class Localization {\r\n  private savedInitParams?: ResourceParams;\r\n  private resources?: ResourcesThin;\r\n  private languages?: Language[];\r\n  private lastUsageDateStatistics: LastUsageDateStatistics | undefined = undefined;\r\n\r\n  private fallbackTranslator!: (key: string, positionalArgs?: PositionalArg[]) => string;\r\n\r\n  constructor(\r\n    private readonly gateway: TextResourcesModuleGateway,\r\n    private config: Config) {\r\n\r\n    this.configureFallbackTranslator();\r\n  }\r\n\r\n  async getLanguageIsoCodes() {\r\n    let languages = await this.getLanguages();\r\n    return languages.map(lang => lang.isoCode);\r\n  }\r\n\r\n  async getLanguages() {\r\n    if (this.languages != null) {\r\n      return this.languages;\r\n    }\r\n    return this.updateLanguages();\r\n  }\r\n\r\n  async updateLanguages() {\r\n    return this.languages = await this.gateway.getLanguages();\r\n  }\r\n\r\n  private _currentLanguageIsoCode = this.config.defaultLanguageIsoCode;\r\n\r\n  /**\r\n   * Language code (i.e. 'en') used for translation only (not decimals and other regional i18n info).\r\n   * For i18n use currentCultureName property which is like 'en-US'.\r\n   */\r\n  get currentLanguageIsoCode() {\r\n    return this._currentLanguageIsoCode;\r\n  }\r\n\r\n  private _currentCultureName: string | undefined = this.config.defaultCultureName;\r\n\r\n  get currentCultureName() {\r\n    return this._currentCultureName;\r\n  }\r\n\r\n  setCulture(culture: { name?: string, language: string }) {\r\n    this._currentLanguageIsoCode = culture.language;\r\n    this._currentCultureName = culture.name;\r\n    this.tryAutodetectFallbackLanguage();\r\n\r\n    TranslateBindingBehavior.updateBindings();\r\n  }\r\n\r\n  setCurrentLanguageIsoCode(languageIsoCode: string) {\r\n    this._currentLanguageIsoCode = languageIsoCode;\r\n    this.tryAutodetectFallbackLanguage();\r\n\r\n    TranslateBindingBehavior.updateBindings();\r\n  }\r\n\r\n  tryAutodetectFallbackLanguage() {\r\n    if (\r\n      !this.config.autodetectFallbackLanguage ||\r\n      !this._currentLanguageIsoCode ||\r\n      this.languages == null) {\r\n      return;\r\n    }\r\n\r\n    const normalizedIsoCode = this._currentLanguageIsoCode.toLowerCase()\r\n    const currLang = this.languages.find(lang => lang.isoCode.toLowerCase() === normalizedIsoCode);\r\n    this.fallbackLanguageIsoCode = (currLang && currLang.isoCodeAlternativ && currLang.isoCodeAlternativ.toLowerCase()) || 'de';\r\n  }\r\n\r\n\r\n  async init(params?: ResourceParams) {\r\n    params = params || this.config.initParams;\r\n\r\n    if (this.config.useStaticResources != null) {\r\n      logger.info(`Using static resources`);\r\n      let resources = this.config.useStaticResources;\r\n      normalizeResources(resources);\r\n      this.resources = resources;\r\n\r\n      return;\r\n    }\r\n\r\n    if (this.config.autodetectFallbackLanguage) {\r\n      await this.updateLanguages();\r\n      this.tryAutodetectFallbackLanguage();\r\n    }\r\n\r\n    try {\r\n      this.resources = await this.gateway.getResources(params);\r\n      this.savedInitParams = params;\r\n    }\r\n    catch (e) {\r\n      this.config.unhandledErrorDelegate(e);\r\n    }\r\n\r\n    if (this.config.lastUsageDateStatisticsConfig) {\r\n      this.lastUsageDateStatistics = new LastUsageDateStatistics(this.config.lastUsageDateStatisticsConfig, this.gateway);\r\n    }\r\n\r\n    TranslateBindingBehavior.updateBindings();\r\n  }\r\n\r\n  async reinit(params?: ResourceParams) {\r\n    return this.init(params || this.savedInitParams);\r\n  }\r\n\r\n  configureFallbackTranslator() {\r\n    this.fallbackTranslator = this.getFallbackTranslator();\r\n  }\r\n\r\n  // TODO: Optional language change debounce and app reload (delegated to outside) support:\r\n  // if (languageIsoCode && this._currentLanguageIsoCode !== languageIsoCode) {\r\n  //   window.setTimeout(() => {\r\n  //     // do not set until actual update since .updateCurrentLanguageIsoCode could be called in between which will set language back, and also performa a double check\r\n  //     // consider using a monitor here to await for reload if occurrences of premature reload emerge to ensure multiple consequtive reloads required,\r\n  //     // since otherwise attempts to reload during reload in progress would be skipped by design\r\n  //     if (this._currentLanguageIsoCode !== languageIsoCode) {\r\n  //       this._currentLanguageIsoCode = languageIsoCode;\r\n  //       reloadApp();\r\n  //     }\r\n  //   }, 0);\r\n  // }\r\n\r\n  fallbackLanguageIsoCode = 'de';\r\n\r\n  /**\r\n   * Translates a key or key/args array doing positional parameter placeholder (in form of {0}, {1}, etc.) replacement in translation.\r\n   * @param keyOrKeyWithArgsArray - string key or array in the form of ['key', arg0, arg2, ...]\r\n   */\r\n  translate(keyOrKeyWithArgsArray: string | any[]) {\r\n    if (typeof keyOrKeyWithArgsArray === 'string') {\r\n      return this.translateCore(keyOrKeyWithArgsArray);\r\n    }\r\n\r\n    if (keyOrKeyWithArgsArray instanceof String) {\r\n      return this.translateCore('' + keyOrKeyWithArgsArray);\r\n    }\r\n\r\n    if (Array.isArray(keyOrKeyWithArgsArray) && keyOrKeyWithArgsArray.length > 0) {\r\n      let [key, ...args] = keyOrKeyWithArgsArray;\r\n      return this.translateCore(key, args);\r\n    }\r\n\r\n    return this.translateCore(keyOrKeyWithArgsArray);\r\n  }\r\n\r\n  /**\r\n   * Translates a key with optionally doing positional parameter placeholder (in form of {0}, {1}, etc.) replacement in translation.\r\n   * @param key - key to translate.\r\n   * @param positionalArgs - positional arguments to replace parameter placeholders (in form of {0}, {1}, etc.) with; can be strings or callbacks returning strings\r\n   */\r\n  translateWithArgs(key: string, ...positionalArgs: PositionalArg[]) {\r\n    return this.translateCore(key, positionalArgs);\r\n  }\r\n\r\n  private translateCore(key: any, positionalArgs?: PositionalArg[]) {\r\n    if (!key) {\r\n      return '';\r\n    }\r\n\r\n    if (typeof key !== 'string') {\r\n      logger.warn(`Attempting to translate non-string object '${JSON.stringify(key)}' as string key '${'' + key}'`);\r\n      key = '' + key as string;\r\n    }\r\n\r\n    if (this.config.resourceKeyBypassPrefix && key.startsWith(this.config.resourceKeyBypassPrefix)) {\r\n      return key.substr(this.config.resourceKeyBypassPrefix.length);\r\n    }\r\n\r\n    if (this.config.resourceKeyPrefix) {\r\n      key = this.config.resourceKeyPrefix + key;\r\n    }\r\n\r\n    let translation = this.findTranslation(key);\r\n    if (translation) {\r\n      this.tryAddStatisticsEntry(key);\r\n      return positionalArgs && positionalArgs.length > 0 ?\r\n        replacePositionalParams(translation, positionalArgs) :\r\n        translation;\r\n    }\r\n\r\n    return this.fallbackTranslator(key, positionalArgs);\r\n  }\r\n\r\n  private findTranslation(key: string) {\r\n    return this.findTranslationLanguageValue(key, this.currentLanguageIsoCode)\r\n      || this.findTranslationLanguageValue(key, this.fallbackLanguageIsoCode);\r\n  }\r\n\r\n  private findTranslationLanguageValue(key: string, languageIsoCode: string) {\r\n    if (!this.resources) {\r\n      return undefined;\r\n    }\r\n\r\n    const languageTags = this.resources[languageIsoCode];\r\n    const value = languageTags && languageTags[key];\r\n    if (value == null) {\r\n      return undefined;\r\n    }\r\n\r\n    return this.escapeTranslatedValue(value);\r\n  }\r\n\r\n  private escapeTranslatedValue(value: string) {\r\n    return this.config.replaceLineBreaksWithExplicitBrTags ? value.replace(new RegExp('\\r?\\n', 'g'), '<br />') : value;\r\n  }\r\n\r\n  findFirstTranslation(keys: string[]) {\r\n    for (let key of keys) {\r\n      let translation = this.findTranslation(key);\r\n      if (translation) {\r\n        return translation;\r\n      }\r\n    }\r\n\r\n    return '';\r\n  }\r\n\r\n  private getFallbackTranslator(): (key: string) => string {\r\n    if (typeof this.config.noTranslationFallbackTranslator === 'function') {\r\n      return this.config.noTranslationFallbackTranslator;\r\n    }\r\n\r\n    switch (this.config.noTranslationFallbackTranslator) {\r\n      case 'empty-string':\r\n        return _ => '';\r\n      case 'sentence-case-key':\r\n        return sentenceCaseConvert;\r\n      case 'container-and-key-decorated-as-unknown':\r\n        return decorateAsUnknown;\r\n    }\r\n\r\n    throw Error(`Unsupported noTranslationFallbackTranslator: ${this.config.noTranslationFallbackTranslator})`)\r\n  }\r\n\r\n  private tryAddStatisticsEntry(key: string) {\r\n    if (this.lastUsageDateStatistics) {\r\n      this.lastUsageDateStatistics.addEntry(key);\r\n    }\r\n  }\r\n}\r\n\r\nfunction sentenceCaseConvert(str: string, positionalArgs?: string[]) {\r\n  if (str && str.endsWith('.NA')) {\r\n    return 'N/A';\r\n  }\r\n\r\n  // Scope.[Tt]agName -> Tag name\r\n  let translation = str.substr(str.lastIndexOf('.') + 1).replace(/^[a-z]|[A-Z]/g, function (v, i) {\r\n    return i === 0 ? v.toUpperCase() : \" \" + v.toLowerCase();\r\n  });\r\n\r\n  return appendArgList(translation, positionalArgs);\r\n}\r\n\r\nfunction decorateAsUnknown(this: Localization, key: string, positionalArgs?: PositionalArg[]) {\r\n  return '?' + this.currentLanguageIsoCode + ':' + appendArgList(key, positionalArgs) + '?';\r\n}\r\n\r\nfunction replacePositionalParams(str: string, args: PositionalArg[]) {\r\n  for (let index = 0; index < args.length; index++) {\r\n    let arg = argv(args[index]);\r\n    let paramRegex = getParamRegex(index);\r\n    str = str.replace(paramRegex, arg);\r\n  }\r\n  return str;\r\n}\r\n\r\nfunction getParamRegex(index: number) {\r\n  return index > _paramRegexes.length - 1 ? _getParamRegex(index) : _paramRegexes[index];\r\n}\r\n\r\nfunction _getParamRegex(index: number) {\r\n  return new RegExp(\"\\\\{\" + index + \"\\\\}\", \"g\")\r\n}\r\n\r\nconst _paramRegexes = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9].map(_getParamRegex);\r\n\r\nfunction appendArgList(str: string, args: PositionalArg[] | undefined) {\r\n  if (!args || args.length === 0) {\r\n    return str;\r\n  }\r\n\r\n  return [str, ...args.map(argv)].join(',');\r\n}\r\n\r\nexport function normalizeResources(resources: any) {\r\n  for (let language of Object.keys(resources)) {\r\n    resources[language] = flattenObject(resources[language]);\r\n  }\r\n}\r\n\r\nfunction argv(arg: PositionalArg) {\r\n  return typeof arg === 'function' ? arg() : arg;\r\n}\r\n","import { TextResourcesModuleGateway, LastUsageDateParams } from '@steinpilz/fria2-text-resources-module';\r\n\r\nexport class StatisticsConfig {\r\n  sendStatisticsInterval: number = 5 * 60 * 1000; // default every 5 min\r\n}\r\n\r\nabstract class Statistics {\r\n  private keyContainer: Set<string> = new Set<string>();\r\n  private interval: any;\r\n  constructor(protected readonly config: StatisticsConfig, protected readonly gateway: TextResourcesModuleGateway) {\r\n    this.interval = setInterval(async () => await this.sendStatisticsInternal(), this.config.sendStatisticsInterval);\r\n  }\r\n\r\n  abstract sendStatistics(tags: string[]): Promise<void>;\r\n\r\n  addEntry(key: string) {\r\n    this.keyContainer.add(key);\r\n  }\r\n\r\n  private async sendStatisticsInternal() {\r\n    if (this.keyContainer.size > 0) {\r\n      let keys = Array.from(this.keyContainer.values());\r\n      try {\r\n        await this.sendStatistics(keys);\r\n      }\r\n      catch (error) {\r\n        console.log(`Error sending statistics: ${error}`);\r\n      }\r\n\r\n      this.keyContainer.clear();\r\n    }\r\n  }\r\n}\r\n\r\nexport class LastUsageDateStatistics extends Statistics {\r\n  async sendStatistics(keys: string[]) {\r\n    let params = { ResourcesToUpdate: keys } as LastUsageDateParams;\r\n    await this.gateway.updateLastUsageDate(params);\r\n  }\r\n}\r\n","import { autoinject, Container } from 'aurelia-framework';\r\nimport { BindingSignaler, SignalBindingBehavior } from 'aurelia-templating-resources';\r\nimport { ValueConverter } from 'aurelia-binding';\r\n\r\n@autoinject\r\nexport class TranslateBindingBehavior {\r\n  constructor(\r\n    private signalBindingBehavior: SignalBindingBehavior) {\r\n  }\r\n\r\n  bind(binding: any, source: any) {\r\n    // bind the signal behavior\r\n    // TODO: Fix SignalBindingBehavior.bind typing to include rest params\r\n    (this.signalBindingBehavior.bind as any)(binding, source, bindingSignalName);\r\n\r\n    // rewrite the expression to use the TValueConverter.\r\n    // pass through any args to the binding behavior to the TValueConverter\r\n    let sourceExpression = binding.sourceExpression;\r\n\r\n    // do create the sourceExpression only once\r\n    if (sourceExpression.rewritten) {\r\n      return;\r\n    }\r\n    sourceExpression.rewritten = true;\r\n\r\n    let expression = sourceExpression.expression;\r\n    sourceExpression.expression = new ValueConverter(\r\n      expression,\r\n      'translate',\r\n      sourceExpression.args,\r\n      [expression, ...sourceExpression.args]);\r\n  }\r\n\r\n  unbind(binding: any, source: any) {\r\n    // unbind the signal behavior\r\n    this.signalBindingBehavior.unbind(binding, source);\r\n  }\r\n\r\n  static updateBindings() {\r\n    const bindingSignaler = Container.instance.get(BindingSignaler) as BindingSignaler;\r\n    bindingSignaler.signal(bindingSignalName)\r\n  }\r\n}\r\n\r\nconst bindingSignalName = 'fria-translation-signal';\r\n","import { autoinject } from 'aurelia-framework';\r\nimport { Localization } from './localization';\r\n\r\n@autoinject\r\nexport class TranslateValueConverter {\r\n  constructor(\r\n    private localization: Localization) {\r\n  }\r\n\r\n  toView(keyOrKeyWithArgsArray: string | any[]) {\r\n    return this.localization.translate(keyOrKeyWithArgsArray);\r\n  }\r\n}\r\n","import { autoinject } from 'aurelia-framework';\r\nimport { Localization } from './localization';\r\n\r\n@autoinject\r\nexport class TranslateFindFirstValueConverter {\r\n  constructor(\r\n    private localization: Localization) {\r\n  }\r\n\r\n  toView(value: string[]) {\r\n    return this.localization.findFirstTranslation(value);\r\n  }\r\n}\r\n","import { RouteConfig } from 'aurelia-router';\n\nexport type RouteConfigWithName = RouteConfig & { name: string }\n\nexport function route(routeConfig: RouteConfig): RouteConfigWithName {\n  return routeConfig as RouteConfigWithName;\n}\n\nexport function mapRouteDictionary(routeDictionary: { [name: string]: RouteConfig }, routeRoot: string, filter: (route: RouteConfig) => boolean = _route => true): RouteConfig[] {\n  let routeNames = Object.keys(routeDictionary);\n  let routes = routeNames.map<RouteConfigWithName>(name => mapRoute(routeDictionary, name, routeRoot));\n  routes = filterRouteTree(routes, filter);\n  return routes;\n}\n\nfunction mapRoute(routeDictionary: { [name: string]: RouteConfig }, name: string, routeRoot: string) {\n  const routeConfig = routeDictionary[name];\n  routeConfig.name = name;\n\n  if (typeof routeConfig.route === 'string') {\n    routeConfig.route = routeRoot + routeConfig.route;\n  } else if (Array.isArray(routeConfig.route)) {\n    routeConfig.route = routeConfig.route.map((route: string) => routeRoot + route);\n  }\n\n  if (typeof routeConfig.redirect == 'string') {\n    routeConfig.redirect = routeRoot + routeConfig.redirect;\n  }\n\n  return routeConfig as RouteConfigWithName;\n}\n\nfunction filterRouteTree(routes: RouteConfigWithName[], filter: (route: RouteConfig) => boolean) {\n  return routes.filter(route => {\n    if (!filter(route)) {\n      return false;\n    }\n\n    let submenuItems = setting(route, 'submenuItems');\n    if (submenuItems) {\n      submenuItems = filterRouteTree(submenuItems, filter);\n      setting(route, 'submenuItems', submenuItems);\n\n      if (setting(route, 'firstChildAsRoute') && submenuItems && submenuItems.length > 0) {\n        route.route = submenuItems[0].route;\n        route.moduleId = submenuItems[0].moduleId;\n      }\n    }\n\n    if (setting(route, 'hideIfNoSubmenuItems') && (!submenuItems || submenuItems.length === 0)) {\n      return false;\n    }\n\n    return true;\n  });\n}\n\nexport function topRoutes(...routes: RouteConfig[]) {\n  for (let route of routes) {\n    route.nav = true;\n  }\n}\n\nexport function submenuItems(parentRoute: RouteConfig, subroutes?: RouteConfig[]) {\n  if (subroutes == null) {\n    return parentRoute && parentRoute.settings && parentRoute.settings.submenuItems || [];\n  } else {\n    setting(parentRoute, 'submenuItems', subroutes);\n    parent(parentRoute, subroutes);\n  }\n}\n\nexport function parentRoute(parentRoute: RouteConfig, subroutes: RouteConfig[]) {\n  parent(parentRoute, subroutes);\n}\n\nfunction parent(parentRoute: RouteConfig, subroutes: RouteConfig[]) {\n  for (let subroute of subroutes) {\n    setting(subroute, 'parentRoute', parentRoute);\n  }\n}\n\nfunction setting(route: RouteConfig, property: string, value?: any) {\n  if (typeof value === 'undefined') {\n    return route.settings && route.settings[property];\n  }\n  if (!route.settings) {\n    route.settings = {};\n  }\n  route.settings[property] = value;\n}\n","import { autoinject } from 'aurelia-framework';\nimport { Router } from 'aurelia-router';\n\nimport { reloadInProgress } from './reload';\n\n// middle-man page to refresh main app <router-view /> content (workaround)\n@autoinject\nexport class ReloadPage {\n  constructor(private router: Router) {\n  }\n\n  activate({ returnFragment }: { returnFragment: string }) {\n    reloadInProgress.set = false;\n    this.router.navigate(returnFragment, { replace: true });\n  }\n}","import { Router } from 'aurelia-router';\nimport { PLATFORM } from 'aurelia-pal';\n\nexport function configureReload(appRouter: Router, appRoutes: any, routeRoot: string, additionalSettings?: {}) {\n  currentAppRouter = appRouter;\n  appRoutes['reload'] = {\n    name: 'reload',\n    route: routeRoot + 'reload',\n    moduleId: PLATFORM.moduleName('@steinpilz/fria2-au-routing/reload-page'),\n    settings: additionalSettings\n  };\n}\n\nexport const reloadInProgress = { set: false };\n\nexport function reloadApp() {\n  if (reloadInProgress.set) {\n    return;\n  }\n\n  reloadInProgress.set = true;\n  const returnFragment = location.pathname + location.search;\n  currentAppRouter.navigateToRoute('reload', { returnFragment }, { replace: true });\n}\n\nvar currentAppRouter: Router;\n","import { FrameworkConfiguration, PLATFORM } from 'aurelia-framework';\nexport * from './select';\n\nexport function configure(config: FrameworkConfiguration, _pluginConfig?: any) {\n  config\n    .globalResources([\n      PLATFORM.moduleName('./select')\n    ]);\n}\n","import { customAttribute, autoinject, BindingEngine, Disposable } from 'aurelia-framework';\nimport $ from 'jquery';\nimport select2 from 'select2';\n\nconst DEFAULT_SELECT2_CONFIG: Select2.Options = {\n  containerCssClass: 'custom-select2',\n  width: '100%',\n  minimumResultsForSearch: 6\n}\n\n@autoinject\n@customAttribute('select2')\nexport class Select2CustomAttribute {\n  select2!: JQuery<Element> | undefined;\n  valueSubscription?: Disposable;\n\n  valueChanged(newValue?: Select2.Options, oldValue?: Select2.Options) {\n    if (newValue != oldValue) {\n      this.initSelect2(newValue && newValue.data != null);\n    }\n  }\n\n  constructor(private element: Element, private value: Select2.Options, private bindingEngine: BindingEngine) {\n  }\n\n  bind(bindingContext: Object, overrideContext: Object) {\n    const valueAttr = this.getValueAttribute();\n    if (valueAttr) {\n      this.valueSubscription = this.bindingEngine\n        .expressionObserver(bindingContext, valueAttr.value).subscribe((newValue: any, oldValue: any) => {\n          this.select2 && this.select2.val(newValue).change();\n        });\n    }\n\n  }\n\n  getValueAttribute() {\n    const attributes = this.element.attributes;\n    return attributes.getNamedItem('value.bind') || attributes.getNamedItem('value.two-way')\n  }\n\n  attached() {\n    this.initSelect2();\n  }\n\n  private initSelect2(clearOptions: boolean = false) {\n    this.destroySelect2();\n    if (clearOptions) {\n      $(this.element).html('');\n    }\n\n    this.select2 = $(this.element).select2(this.getSelect2Config());\n\n    this.select2\n      .on('select2:select', this.fireChangeOrigin.bind(this))\n      .on('select2:unselect', this.fireChangeOrigin.bind(this))\n\n    this.emitSelect2Change();\n  }\n\n\n  private emitSelect2Change() {\n    setTimeout(() => {\n      $(this.element).change();\n    }, 0);\n  }\n\n  private getSelect2Config(): Select2.Options {\n    return { ...DEFAULT_SELECT2_CONFIG, ...this.value };\n  }\n\n  private destroySelect2() {\n    try {\n      this.select2 && this.select2.select2('destroy');\n      this.select2 = undefined;\n    }\n    catch (e) {\n      console.log('select2!!!', e);\n    }\n  }\n\n  private disposeValueSubscription() {\n    this.valueSubscription && this.valueSubscription.dispose();\n  }\n\n\n  detached() {\n    this.disposeValueSubscription()\n    this.destroySelect2();\n  }\n\n  private createEvent(eventName: string) {\n    if (typeof (Event) === 'function') {\n      return new Event(eventName, { bubbles: true, cancelable: true });\n    } else {\n      const event = document.createEvent('Event');\n      event.initEvent(eventName, true, true);\n      return event;\n    }\n  }\n\n  private fireChangeOrigin() {\n    const eventName = 'change';\n    if (this.element) {\n      const event = this.createEvent(eventName);\n      this.element.dispatchEvent(event);\n    }\n  }\n}\n","// Polyfill for Element.closest and Element.matches\r\n// https://github.com/jonathantneal/closest/\r\n(function (ELEMENT) {\r\n  ELEMENT.matches = ELEMENT.matches || (ELEMENT as any)['mozMatchesSelector'] || (ELEMENT as any)['msMatchesSelector'] || (ELEMENT as any)['oMatchesSelector'] || (ELEMENT as any)['webkitMatchesSelector'];\r\n\r\n  ELEMENT.closest = ELEMENT.closest || function closest(this: Element, selector: string) {\r\n    var element: Element | null = this;\r\n\r\n    while (element) {\r\n      if (element.matches(selector)) {\r\n        break;\r\n      }\r\n\r\n      element = element.parentElement;\r\n    }\r\n\r\n    return element;\r\n  };\r\n  if (!('remove' in Element.prototype)) {\r\n    (Element.prototype as Element).remove = function (this: Element) {\r\n      if (this.parentNode) {\r\n        this.parentNode.removeChild(this);\r\n      }\r\n    };\r\n  }\r\n} (Element.prototype));\r\n\r\n\r\n(function (DOMTokenListProt) {\r\n  const c1 = 'c1';\r\n  let testElement: Element | undefined = document.createElement('_');\r\n\r\n  // Polyfill for IE 10 and Firefox <24, where classList.toggle does not\r\n  // support the second argument.\r\n\r\n  testElement.classList.add(c1);\r\n  testElement.classList.toggle(c1, true);\r\n\r\n  if (!testElement.classList.contains(c1)) {\r\n    var _toggle = DOMTokenList.prototype.toggle;\r\n\r\n    DOMTokenListProt.toggle = function (this: DOMTokenList, token, force) {\r\n      if (1 in arguments && !this.contains(token) === !force) {\r\n        return force || false;\r\n      }\r\n      return _toggle.call(this, token);\r\n    };\r\n  }\r\n\r\n  testElement = undefined;\r\n} (DOMTokenList.prototype));\r\n","import { RenderInstruction, ValidateResult } from 'aurelia-validation';\r\n\r\nimport './dom-polyfills';\r\n\r\n// TODO: This is a daimler styleguide/bootstrap theme renderer. Move to an appropriate package.\r\n\r\nexport class DaimlerFormValidationRenderer {\r\n  static styleKind: 'styleguide-theme' | 'bootstrap-theme' = 'styleguide-theme';\r\n\r\n  static get errorClass() {\r\n    switch (DaimlerFormValidationRenderer.styleKind) {\r\n      case 'styleguide-theme':\r\n        return 'has-warning';\r\n      case 'bootstrap-theme':\r\n        return 'has-error';\r\n      default:\r\n        throw new Error(`Unknown styleKind ${DaimlerFormValidationRenderer.styleKind}`);\r\n    }\r\n  }\r\n\r\n  render(instruction: RenderInstruction) {\r\n    for (let { result, elements } of instruction.unrender) {\r\n      for (let element of elements) {\r\n        this.remove(element, result);\r\n      }\r\n    }\r\n\r\n    for (let { result, elements } of instruction.render) {\r\n      for (let element of elements) {\r\n        this.add(element, result);\r\n      }\r\n    }\r\n  }\r\n\r\n  private getMessageContainerFor(target: Element) {\r\n    // add the has-error class to the bootstrap form-group div, or use element itself as an anchor fallback\r\n    let warningTargetSelector = target.getAttribute('warning-target');\r\n    if (warningTargetSelector) {\r\n      return target.closest(warningTargetSelector);\r\n    }\r\n    else {\r\n      return target.querySelector('.form-group') || target.closest('.form-group') || target;\r\n    }\r\n  }\r\n\r\n  add(element: Element, result: ValidateResult) {\r\n    const formGroup = this.getMessageContainerFor(element);\r\n    if (!formGroup) {\r\n      return;\r\n    }\r\n\r\n    if (result.valid) {\r\n      if (!formGroup.classList.contains(DaimlerFormValidationRenderer.errorClass)) {\r\n        formGroup.classList.add('has-success');\r\n      }\r\n    } else {\r\n      // add the has-warning class to the enclosing form-group div\r\n      formGroup.classList.remove('has-success');\r\n      formGroup.classList.add(DaimlerFormValidationRenderer.errorClass);\r\n\r\n      // add help-block\r\n      const message = document.createElement('span');\r\n      message.className = 'help-block validation-error';\r\n      message.textContent = result.message;\r\n      message.id = `validation-message-${result.id}`;\r\n      formGroup.appendChild(message);\r\n    }\r\n  }\r\n\r\n  remove(element: Element, result: ValidateResult) {\r\n    const formGroup = this.getMessageContainerFor(element);\r\n    if (!formGroup) {\r\n      return;\r\n    }\r\n\r\n    if (result.valid) {\r\n      if (formGroup.classList.contains('has-success')) {\r\n        formGroup.classList.remove('has-success');\r\n      }\r\n    } else {\r\n      // remove help-block\r\n      const message = formGroup.querySelector(`#validation-message-${result.id}`);\r\n      if (message) {\r\n        formGroup.removeChild(message);\r\n\r\n        // remove the has-warning class from the enclosing form-group div\r\n        if (formGroup.querySelectorAll('.help-block.validation-error').length === 0) {\r\n          formGroup.classList.remove(DaimlerFormValidationRenderer.errorClass);\r\n        }\r\n      }\r\n    }\r\n  }\r\n}\r\n","import { FrameworkConfiguration, PLATFORM, Container } from 'aurelia-framework';\r\nimport { ValidationMessageProvider } from 'aurelia-validation';\r\nimport { Localization } from '@steinpilz/fria2-au-l10n';\r\nimport { DaimlerFormValidationRenderer } from './form-validation-renderer';\r\n\r\nexport { DaimlerFormValidationRenderer }\r\n\r\nexport function configure(config: FrameworkConfiguration) {\r\n  config\r\n    .plugin(PLATFORM.moduleName('aurelia-validation'))\r\n    .globalResources([\r\n      PLATFORM.moduleName('./validation-summary.html'),\r\n    ]);\r\n\r\n  config.container.registerHandler(\r\n    'form-validation-renderer',\r\n    container => container && container.get(DaimlerFormValidationRenderer));\r\n\r\n  ValidationMessageProvider.prototype.getMessage = function (this: ValidationMessageProvider, key: string) {\r\n    let localization = Container.instance.get(Localization) as Localization;\r\n    let message: string = localization != null ? localization.translate(key) : key;\r\n    // TODO: Consider using a separately resolved instance of the parser instead of accessing a private member\r\n    // Or consider just returning a LiteralString expression directly if message interpolation is not used\r\n    // let parser = Container.instance.get(ValidationMessageParser) as ValidationMessageParser;\r\n    return (this as any).parser.parse(message);\r\n  };\r\n}\r\n","import { PLATFORM, DOM } from 'aurelia-pal';\n\nfunction json(body, replacer) {\r\n    return JSON.stringify((body !== undefined ? body : {}), replacer);\r\n}\n\nvar retryStrategy = {\r\n    fixed: 0,\r\n    incremental: 1,\r\n    exponential: 2,\r\n    random: 3\r\n};\r\nvar defaultRetryConfig = {\r\n    maxRetries: 3,\r\n    interval: 1000,\r\n    strategy: retryStrategy.fixed\r\n};\r\nvar RetryInterceptor = (function () {\r\n    function RetryInterceptor(retryConfig) {\r\n        this.retryConfig = Object.assign({}, defaultRetryConfig, retryConfig || {});\r\n        if (this.retryConfig.strategy === retryStrategy.exponential &&\r\n            this.retryConfig.interval <= 1000) {\r\n            throw new Error('An interval less than or equal to 1 second is not allowed when using the exponential retry strategy');\r\n        }\r\n    }\r\n    RetryInterceptor.prototype.request = function (request) {\r\n        var $r = request;\r\n        if (!$r.retryConfig) {\r\n            $r.retryConfig = Object.assign({}, this.retryConfig);\r\n            $r.retryConfig.counter = 0;\r\n        }\r\n        $r.retryConfig.requestClone = request.clone();\r\n        return request;\r\n    };\r\n    RetryInterceptor.prototype.response = function (response, request) {\r\n        delete request.retryConfig;\r\n        return response;\r\n    };\r\n    RetryInterceptor.prototype.responseError = function (error, request, httpClient) {\r\n        var retryConfig = request.retryConfig;\r\n        var requestClone = retryConfig.requestClone;\r\n        return Promise.resolve().then(function () {\r\n            if (retryConfig.counter < retryConfig.maxRetries) {\r\n                var result = retryConfig.doRetry ? retryConfig.doRetry(error, request) : true;\r\n                return Promise.resolve(result).then(function (doRetry) {\r\n                    if (doRetry) {\r\n                        retryConfig.counter++;\r\n                        return new Promise(function (resolve) { return PLATFORM.global.setTimeout(resolve, calculateDelay(retryConfig) || 0); })\r\n                            .then(function () {\r\n                            var newRequest = requestClone.clone();\r\n                            if (typeof (retryConfig.beforeRetry) === 'function') {\r\n                                return retryConfig.beforeRetry(newRequest, httpClient);\r\n                            }\r\n                            return newRequest;\r\n                        })\r\n                            .then(function (newRequest) {\r\n                            return httpClient.fetch(Object.assign(newRequest, { retryConfig: retryConfig }));\r\n                        });\r\n                    }\r\n                    delete request.retryConfig;\r\n                    throw error;\r\n                });\r\n            }\r\n            delete request.retryConfig;\r\n            throw error;\r\n        });\r\n    };\r\n    return RetryInterceptor;\r\n}());\r\nfunction calculateDelay(retryConfig) {\r\n    var interval = retryConfig.interval, strategy = retryConfig.strategy, minRandomInterval = retryConfig.minRandomInterval, maxRandomInterval = retryConfig.maxRandomInterval, counter = retryConfig.counter;\r\n    if (typeof (strategy) === 'function') {\r\n        return retryConfig.strategy(counter);\r\n    }\r\n    switch (strategy) {\r\n        case (retryStrategy.fixed):\r\n            return retryStrategies[retryStrategy.fixed](interval);\r\n        case (retryStrategy.incremental):\r\n            return retryStrategies[retryStrategy.incremental](counter, interval);\r\n        case (retryStrategy.exponential):\r\n            return retryStrategies[retryStrategy.exponential](counter, interval);\r\n        case (retryStrategy.random):\r\n            return retryStrategies[retryStrategy.random](counter, interval, minRandomInterval, maxRandomInterval);\r\n        default:\r\n            throw new Error('Unrecognized retry strategy');\r\n    }\r\n}\r\nvar retryStrategies = [\r\n    function (interval) { return interval; },\r\n    function (retryCount, interval) { return interval * retryCount; },\r\n    function (retryCount, interval) { return retryCount === 1 ? interval : Math.pow(interval, retryCount) / 1000; },\r\n    function (retryCount, interval, minRandomInterval, maxRandomInterval) {\r\n        if (minRandomInterval === void 0) { minRandomInterval = 0; }\r\n        if (maxRandomInterval === void 0) { maxRandomInterval = 60000; }\r\n        return Math.random() * (maxRandomInterval - minRandomInterval) + minRandomInterval;\r\n    }\r\n];\n\nvar HttpClientConfiguration = (function () {\r\n    function HttpClientConfiguration() {\r\n        this.baseUrl = '';\r\n        this.defaults = {};\r\n        this.interceptors = [];\r\n    }\r\n    HttpClientConfiguration.prototype.withBaseUrl = function (baseUrl) {\r\n        this.baseUrl = baseUrl;\r\n        return this;\r\n    };\r\n    HttpClientConfiguration.prototype.withDefaults = function (defaults) {\r\n        this.defaults = defaults;\r\n        return this;\r\n    };\r\n    HttpClientConfiguration.prototype.withInterceptor = function (interceptor) {\r\n        this.interceptors.push(interceptor);\r\n        return this;\r\n    };\r\n    HttpClientConfiguration.prototype.useStandardConfiguration = function () {\r\n        var standardConfig = { credentials: 'same-origin' };\r\n        Object.assign(this.defaults, standardConfig, this.defaults);\r\n        return this.rejectErrorResponses();\r\n    };\r\n    HttpClientConfiguration.prototype.rejectErrorResponses = function () {\r\n        return this.withInterceptor({ response: rejectOnError });\r\n    };\r\n    HttpClientConfiguration.prototype.withRetry = function (config) {\r\n        var interceptor = new RetryInterceptor(config);\r\n        return this.withInterceptor(interceptor);\r\n    };\r\n    return HttpClientConfiguration;\r\n}());\r\nfunction rejectOnError(response) {\r\n    if (!response.ok) {\r\n        throw response;\r\n    }\r\n    return response;\r\n}\n\nvar HttpClient = (function () {\r\n    function HttpClient() {\r\n        this.activeRequestCount = 0;\r\n        this.isRequesting = false;\r\n        this.isConfigured = false;\r\n        this.baseUrl = '';\r\n        this.defaults = null;\r\n        this.interceptors = [];\r\n        if (typeof fetch === 'undefined') {\r\n            throw new Error('HttpClient requires a Fetch API implementation, but the current environment doesn\\'t support it. You may need to load a polyfill such as https://github.com/github/fetch');\r\n        }\r\n    }\r\n    HttpClient.prototype.configure = function (config) {\r\n        var normalizedConfig;\r\n        if (typeof config === 'object') {\r\n            normalizedConfig = { defaults: config };\r\n        }\r\n        else if (typeof config === 'function') {\r\n            normalizedConfig = new HttpClientConfiguration();\r\n            normalizedConfig.baseUrl = this.baseUrl;\r\n            normalizedConfig.defaults = Object.assign({}, this.defaults);\r\n            normalizedConfig.interceptors = this.interceptors;\r\n            var c = config(normalizedConfig);\r\n            if (HttpClientConfiguration.prototype.isPrototypeOf(c)) {\r\n                normalizedConfig = c;\r\n            }\r\n        }\r\n        else {\r\n            throw new Error('invalid config');\r\n        }\r\n        var defaults = normalizedConfig.defaults;\r\n        if (defaults && Headers.prototype.isPrototypeOf(defaults.headers)) {\r\n            throw new Error('Default headers must be a plain object.');\r\n        }\r\n        var interceptors = normalizedConfig.interceptors;\r\n        if (interceptors && interceptors.length) {\r\n            if (interceptors.filter(function (x) { return RetryInterceptor.prototype.isPrototypeOf(x); }).length > 1) {\r\n                throw new Error('Only one RetryInterceptor is allowed.');\r\n            }\r\n            var retryInterceptorIndex = interceptors.findIndex(function (x) { return RetryInterceptor.prototype.isPrototypeOf(x); });\r\n            if (retryInterceptorIndex >= 0 && retryInterceptorIndex !== interceptors.length - 1) {\r\n                throw new Error('The retry interceptor must be the last interceptor defined.');\r\n            }\r\n        }\r\n        this.baseUrl = normalizedConfig.baseUrl;\r\n        this.defaults = defaults;\r\n        this.interceptors = normalizedConfig.interceptors || [];\r\n        this.isConfigured = true;\r\n        return this;\r\n    };\r\n    HttpClient.prototype.fetch = function (input, init) {\r\n        var _this = this;\r\n        trackRequestStart(this);\r\n        var request = this.buildRequest(input, init);\r\n        return processRequest(request, this.interceptors, this).then(function (result) {\r\n            var response = null;\r\n            if (Response.prototype.isPrototypeOf(result)) {\r\n                response = Promise.resolve(result);\r\n            }\r\n            else if (Request.prototype.isPrototypeOf(result)) {\r\n                request = result;\r\n                response = fetch(result);\r\n            }\r\n            else {\r\n                throw new Error(\"An invalid result was returned by the interceptor chain. Expected a Request or Response instance, but got [\" + result + \"]\");\r\n            }\r\n            return processResponse(response, _this.interceptors, request, _this);\r\n        })\r\n            .then(function (result) {\r\n            if (Request.prototype.isPrototypeOf(result)) {\r\n                return _this.fetch(result);\r\n            }\r\n            return result;\r\n        })\r\n            .then(function (result) {\r\n            trackRequestEnd(_this);\r\n            return result;\r\n        }, function (error) {\r\n            trackRequestEnd(_this);\r\n            throw error;\r\n        });\r\n    };\r\n    HttpClient.prototype.buildRequest = function (input, init) {\r\n        var defaults = this.defaults || {};\r\n        var request;\r\n        var body;\r\n        var requestContentType;\r\n        var parsedDefaultHeaders = parseHeaderValues(defaults.headers);\r\n        if (Request.prototype.isPrototypeOf(input)) {\r\n            request = input;\r\n            requestContentType = new Headers(request.headers).get('Content-Type');\r\n        }\r\n        else {\r\n            if (!init) {\r\n                init = {};\r\n            }\r\n            body = init.body;\r\n            var bodyObj = body ? { body: body } : null;\r\n            var requestInit = Object.assign({}, defaults, { headers: {} }, init, bodyObj);\r\n            requestContentType = new Headers(requestInit.headers).get('Content-Type');\r\n            request = new Request(getRequestUrl(this.baseUrl, input), requestInit);\r\n        }\r\n        if (!requestContentType) {\r\n            if (new Headers(parsedDefaultHeaders).has('content-type')) {\r\n                request.headers.set('Content-Type', new Headers(parsedDefaultHeaders).get('content-type'));\r\n            }\r\n            else if (body && isJSON(body)) {\r\n                request.headers.set('Content-Type', 'application/json');\r\n            }\r\n        }\r\n        setDefaultHeaders(request.headers, parsedDefaultHeaders);\r\n        if (body && Blob.prototype.isPrototypeOf(body) && body.type) {\r\n            request.headers.set('Content-Type', body.type);\r\n        }\r\n        return request;\r\n    };\r\n    HttpClient.prototype.get = function (input, init) {\r\n        return this.fetch(input, init);\r\n    };\r\n    HttpClient.prototype.post = function (input, body, init) {\r\n        return callFetch(this, input, body, init, 'POST');\r\n    };\r\n    HttpClient.prototype.put = function (input, body, init) {\r\n        return callFetch(this, input, body, init, 'PUT');\r\n    };\r\n    HttpClient.prototype.patch = function (input, body, init) {\r\n        return callFetch(this, input, body, init, 'PATCH');\r\n    };\r\n    HttpClient.prototype.delete = function (input, body, init) {\r\n        return callFetch(this, input, body, init, 'DELETE');\r\n    };\r\n    return HttpClient;\r\n}());\r\nvar absoluteUrlRegexp = /^([a-z][a-z0-9+\\-.]*:)?\\/\\//i;\r\nfunction trackRequestStart(client) {\r\n    client.isRequesting = !!(++client.activeRequestCount);\r\n    if (client.isRequesting) {\r\n        var evt_1 = DOM.createCustomEvent('aurelia-fetch-client-request-started', { bubbles: true, cancelable: true });\r\n        setTimeout(function () { return DOM.dispatchEvent(evt_1); }, 1);\r\n    }\r\n}\r\nfunction trackRequestEnd(client) {\r\n    client.isRequesting = !!(--client.activeRequestCount);\r\n    if (!client.isRequesting) {\r\n        var evt_2 = DOM.createCustomEvent('aurelia-fetch-client-requests-drained', { bubbles: true, cancelable: true });\r\n        setTimeout(function () { return DOM.dispatchEvent(evt_2); }, 1);\r\n    }\r\n}\r\nfunction parseHeaderValues(headers) {\r\n    var parsedHeaders = {};\r\n    for (var name_1 in headers || {}) {\r\n        if (headers.hasOwnProperty(name_1)) {\r\n            parsedHeaders[name_1] = (typeof headers[name_1] === 'function') ? headers[name_1]() : headers[name_1];\r\n        }\r\n    }\r\n    return parsedHeaders;\r\n}\r\nfunction getRequestUrl(baseUrl, url) {\r\n    if (absoluteUrlRegexp.test(url)) {\r\n        return url;\r\n    }\r\n    return (baseUrl || '') + url;\r\n}\r\nfunction setDefaultHeaders(headers, defaultHeaders) {\r\n    for (var name_2 in defaultHeaders || {}) {\r\n        if (defaultHeaders.hasOwnProperty(name_2) && !headers.has(name_2)) {\r\n            headers.set(name_2, defaultHeaders[name_2]);\r\n        }\r\n    }\r\n}\r\nfunction processRequest(request, interceptors, http) {\r\n    return applyInterceptors(request, interceptors, 'request', 'requestError', http);\r\n}\r\nfunction processResponse(response, interceptors, request, http) {\r\n    return applyInterceptors(response, interceptors, 'response', 'responseError', request, http);\r\n}\r\nfunction applyInterceptors(input, interceptors, successName, errorName) {\r\n    var interceptorArgs = [];\r\n    for (var _i = 4; _i < arguments.length; _i++) {\r\n        interceptorArgs[_i - 4] = arguments[_i];\r\n    }\r\n    return (interceptors || [])\r\n        .reduce(function (chain, interceptor) {\r\n        var successHandler = interceptor[successName];\r\n        var errorHandler = interceptor[errorName];\r\n        return chain.then(successHandler && (function (value) { return successHandler.call.apply(successHandler, [interceptor, value].concat(interceptorArgs)); }) || identity, errorHandler && (function (reason) { return errorHandler.call.apply(errorHandler, [interceptor, reason].concat(interceptorArgs)); }) || thrower);\r\n    }, Promise.resolve(input));\r\n}\r\nfunction isJSON(str) {\r\n    try {\r\n        JSON.parse(str);\r\n    }\r\n    catch (err) {\r\n        return false;\r\n    }\r\n    return true;\r\n}\r\nfunction identity(x) {\r\n    return x;\r\n}\r\nfunction thrower(x) {\r\n    throw x;\r\n}\r\nfunction callFetch(client, input, body, init, method) {\r\n    if (!init) {\r\n        init = {};\r\n    }\r\n    init.method = method;\r\n    if (body) {\r\n        init.body = body;\r\n    }\r\n    return client.fetch(input, init);\r\n}\n\nexport { json, retryStrategy, RetryInterceptor, HttpClientConfiguration, HttpClient };\n","import { Interceptor } from 'aurelia-fetch-client';\r\n\r\nexport type ApiMode = 'direct' | 'proxy' | 'cors';\r\nexport type CachingMode = 'default' | 'reload' | 'no-cache' | 'force-cache' | 'only-if-cached';\r\n\r\nexport type BodySerializer = (body: any) => string | Blob;\r\nexport type Deserializer = (response: Response) => Promise<any>;\r\nexport type JsonParseReviver = ((key: string, value: any) => any) | undefined;\r\n\r\nexport class WebApiClientConfig {\r\n  baseUrl: string = '';\r\n  routePrefix: string = '';\r\n  apiMode: ApiMode = 'direct';\r\n  cachingMode: CachingMode = 'no-cache';\r\n  interceptors: Interceptor[] = [];\r\n  \r\n  serializer: BodySerializer = JSON.stringify; // json() function from aurelia-fetch-client would be better here but blobs it returns are not yet supported in some browser dev tools;\r\n\r\n  deserializer: Deserializer = response =>\r\n    this.jsonParseReviver ?\r\n      response.text().then(json => JSON.parse(json, this.jsonParseReviver)) :\r\n      response.json();\r\n\r\n  jsonParseReviver: JsonParseReviver = undefined;\r\n\r\n  defaultHeaders: Object | undefined = {\r\n    'Accept': 'application/json',\r\n    'Content-Type': 'application/json'\r\n  }\r\n\r\n  withBaseUrl(baseUrl: string | undefined) {\r\n    this.baseUrl = baseUrl || '';\r\n    return this;\r\n  }\r\n\r\n  withRoutePrefix(routePrefix: string | undefined) {\r\n    this.routePrefix = routePrefix || '';\r\n    return this;\r\n  }\r\n\r\n  withApiMode(apiMode: ApiMode) {\r\n    this.apiMode = apiMode;\r\n    return this;\r\n  }\r\n\r\n  withCachingMode(cachingMode: CachingMode) {\r\n    this.cachingMode = cachingMode;\r\n    return this;\r\n  }\r\n\r\n  withInterceptor(interceptor: Interceptor) {\r\n    this.interceptors.push(interceptor);\r\n    return this;\r\n  }\r\n\r\n  withDeserializer(deserializer: Deserializer) {\r\n    this.deserializer = deserializer;\r\n    return this;\r\n  }\r\n\r\n  withJsonParseReviver(jsonParseReviver: JsonParseReviver) {\r\n    this.jsonParseReviver = jsonParseReviver;\r\n    return this;\r\n  }\r\n\r\n  withDefaultHeaders(headers: Object | undefined) {\r\n    this.defaultHeaders = headers;\r\n    return this;\r\n  }\r\n\r\n  withNoMimeTypeHeaders() {\r\n    if (this.defaultHeaders) {\r\n      delete (this.defaultHeaders as any)['Accept'];\r\n      delete (this.defaultHeaders as any)['Content-Type'];\r\n    }\r\n    return this;\r\n  }\r\n}\r\n","import { HttpClient } from 'aurelia-fetch-client'\r\nimport { appendQueryString, formatQueryStringParams } from './utils';\r\nimport { WebApiClientConfig, Deserializer, BodySerializer, JsonParseReviver } from './web-api-client-config';\r\n\r\nexport class WebApiClient {\r\n  protected http!: HttpClient;\r\n  protected serializer!: BodySerializer;\r\n  protected deserializer!: Deserializer;\r\n  protected jsonParseReviver: JsonParseReviver;\r\n\r\n  constructor(configurator: (config: WebApiClientConfig) => WebApiClientConfig) {\r\n    this.configure(configurator);\r\n  }\r\n\r\n  configure(configurator: (config: WebApiClientConfig) => WebApiClientConfig) {\r\n    let config = configurator(new WebApiClientConfig());\r\n    let defaultConfig = new WebApiClientConfig();\r\n\r\n    // Create own isolated (by implementation) instance of HttpClient\r\n    // If you need to resolve it via Container in future, DO use container isolated child scope\r\n    // Otherwise, different concrete WebApiClient implementations in a single app will mess with each other HttpClient configs\r\n    // (e.g. one could be for the normal JSON over HTTP API, the second for the static JSON resources, \r\n    // they could use different base urls and deserializers)\r\n    this.http = new HttpClient();\r\n\r\n    let baseUrl = config.baseUrl || defaultConfig.baseUrl;\r\n    let apiMode = config.apiMode || defaultConfig.apiMode;\r\n    let cachingMode = config.cachingMode || defaultConfig.cachingMode;\r\n    let fullBaseUrl = baseUrl + (config.routePrefix || defaultConfig.routePrefix); // TODO: Proper trailing slash url path combine\r\n\r\n    this.serializer = config.serializer || defaultConfig.serializer;\r\n    this.deserializer = config.deserializer || defaultConfig.deserializer;\r\n    this.jsonParseReviver = config.jsonParseReviver || defaultConfig.jsonParseReviver;\r\n\r\n    const hardcodedHeaders = {\r\n      'X-Requested-With': 'trusted-http-client'\r\n    };\r\n\r\n    let headers: any = Object.assign({}, config.defaultHeaders, hardcodedHeaders);\r\n\r\n    if (apiMode === 'proxy') {\r\n      headers['X-Proxy-To-Url'] = fullBaseUrl;\r\n    }\r\n\r\n    let cacheHeaders = cachingMode !== 'no-cache'\r\n      ? {\r\n        'Cache-Control': 'public'\r\n      }\r\n      : {\r\n        'Cache-Control': 'no-cache',\r\n        'Pragma': 'no-cache',\r\n        // disable IE ajax request caching\r\n        'If-Modified-Since': 'Mon, 26 Jul 1997 05:00:00 GMT'\r\n      };\r\n    Object.assign(headers, cacheHeaders);\r\n\r\n    this.http.configure(cfg => cfg\r\n      .useStandardConfiguration()\r\n      .withDefaults({\r\n        headers: headers,\r\n        mode: apiMode === 'cors' ? 'cors' : 'same-origin',\r\n        cache: cachingMode,\r\n        credentials: 'include'\r\n      })\r\n      .withBaseUrl(apiMode !== 'proxy' ? fullBaseUrl : '')\r\n    );\r\n    this.http.interceptors.push(...config.interceptors);\r\n  }\r\n\r\n  async get<TResponse>(route: string, queryStringParams?: { [key: string]: any | undefined }) {\r\n    if (queryStringParams != null) {\r\n      route = appendQueryString(route, formatQueryStringParams(queryStringParams));\r\n    }\r\n    let response = await this.http.fetch(route, { method: 'get' });\r\n    return await this.deserializer(response) as TResponse;\r\n  }\r\n\r\n  async post<TResponse>(route: string, body: any) {\r\n    let response = await this.http.fetch(route, { method: 'post', body: this.serializer(body) });\r\n    return await this.deserializer(response) as TResponse;\r\n  }\r\n\r\n  async put<TResponse>(route: string, body: any) {\r\n    let response = await this.http.fetch(route, { method: 'put', body: this.serializer(body) });\r\n    return await this.deserializer(response) as TResponse;\r\n  }\r\n\r\n  async delete<TResponse>(route: string) {\r\n    let response = await this.http.fetch(route, {method: 'delete'});\r\n    return await this.deserializer(response) as TResponse;\r\n  }\r\n\r\n  /** Loads a JSON data from a separate .json static resource bundles with webpack file-loader.\r\n   *  Pass webpack System.import promise as fileResourcePromise parameter */\r\n  async getDataFromJsonFile<TContent>(fileResourcePromise: Promise<string>) {\r\n    const resourceName = await fileResourcePromise;\r\n    return this.get<TContent>(resourceName);\r\n  }\r\n}\r\n","export function routeArgToString(value: any) {\r\n  if (value == null) {\r\n    return '';\r\n  }\r\n  return '' + value;\r\n}\r\n\r\nexport function formatQueryStringParams(params: { [key: string]: any }) {\r\n  return Object.keys(params)\r\n    .map(key => {\r\n      return encodeURIComponent(key) + '=' + encodeURIComponent(routeArgToString(params[key]));\r\n    })\r\n    .join('&');\r\n}\r\n\r\nexport function appendQueryString(url: string, queryStringFullOrPartial: string) {\r\n  const separator = url.indexOf('?') === -1 ? '?' : '&';\r\n  return url + separator + queryStringFullOrPartial;\r\n}","import { Deserializer, JsonParseReviver } from '@steinpilz/fria2-au-web-api';\r\nimport { Moment } from 'moment-timezone';\r\nimport moment from 'moment-timezone';\r\n\r\nconst reISO: RegExp = /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2}(?:\\.{0,1}\\d*))(?:Z|(\\+|-)([\\d|:]*))?$/;\r\n\r\nexport type MomentProcessor = (value: Moment) => Moment;\r\n\r\nfunction deserialize(json: string, reviver: JsonParseReviver) {\r\n  return JSON.parse(json, reviver);\r\n}\r\n\r\nexport function getJsonParseReviver(momentProcessor?: MomentProcessor) {\r\n  const momentProcessorOrDefault = momentProcessor || (x => x);\r\n\r\n  return function (_key: string, value: any) {\r\n    return typeof value === 'string' && reISO.exec(value)\r\n      ? momentProcessorOrDefault(moment(value, moment.ISO_8601, true))\r\n      : value;\r\n  }\r\n}\r\n\r\nexport function getDeserializer(momentProcessor?: MomentProcessor): Deserializer {\r\n  const momentProcessorOrDefault = momentProcessor || (x => x);\r\n\r\n  return async resp => {\r\n    const json = await resp.text();\r\n    const reviver = getJsonParseReviver(momentProcessorOrDefault);\r\n    return deserialize(json, reviver);\r\n  };\r\n}\r\n","import { WebApiClientConfig } from '@steinpilz/fria2-au-web-api';\r\nimport { getDeserializer, MomentProcessor, getJsonParseReviver } from './get-deserializer';\r\n\r\nexport function withJsonMomentDeserializer(this: WebApiClientConfig, momentProcessor?: MomentProcessor) {\r\n  return this.withDeserializer(getDeserializer(momentProcessor));\r\n};\r\n\r\nWebApiClientConfig.prototype.withJsonMomentDeserializer = withJsonMomentDeserializer;\r\n\r\nexport function withJsonParseMomentReviver(this: WebApiClientConfig, momentProcessor?: MomentProcessor) {\r\n  return this.withJsonParseReviver(getJsonParseReviver(momentProcessor));\r\n};\r\n\r\nWebApiClientConfig.prototype.withJsonParseMomentReviver = withJsonParseMomentReviver;\r\n","/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n    extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n    return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n    if (typeof b !== \"function\" && b !== null)\r\n        throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n    extendStatics(d, b);\r\n    function __() { this.constructor = d; }\r\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n    __assign = Object.assign || function __assign(t) {\r\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n            s = arguments[i];\r\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n        }\r\n        return t;\r\n    }\r\n    return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n    var t = {};\r\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n        t[p] = s[p];\r\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n                t[p[i]] = s[p[i]];\r\n        }\r\n    return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n    return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n    function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n    var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n    var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n    var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n    var _, done = false;\r\n    for (var i = decorators.length - 1; i >= 0; i--) {\r\n        var context = {};\r\n        for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n        for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n        context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n        var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n        if (kind === \"accessor\") {\r\n            if (result === void 0) continue;\r\n            if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n            if (_ = accept(result.get)) descriptor.get = _;\r\n            if (_ = accept(result.set)) descriptor.set = _;\r\n            if (_ = accept(result.init)) initializers.push(_);\r\n        }\r\n        else if (_ = accept(result)) {\r\n            if (kind === \"field\") initializers.push(_);\r\n            else descriptor[key] = _;\r\n        }\r\n    }\r\n    if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n    done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n    var useValue = arguments.length > 2;\r\n    for (var i = 0; i < initializers.length; i++) {\r\n        value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n    }\r\n    return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n    return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n    if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n    return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n    return new (P || (P = Promise))(function (resolve, reject) {\r\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n    });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n    function verb(n) { return function (v) { return step([n, v]); }; }\r\n    function step(op) {\r\n        if (f) throw new TypeError(\"Generator is already executing.\");\r\n        while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n            if (y = 0, t) op = [op[0] & 2, t.value];\r\n            switch (op[0]) {\r\n                case 0: case 1: t = op; break;\r\n                case 4: _.label++; return { value: op[1], done: false };\r\n                case 5: _.label++; y = op[1]; op = [0]; continue;\r\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n                default:\r\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n                    if (t[2]) _.ops.pop();\r\n                    _.trys.pop(); continue;\r\n            }\r\n            op = body.call(thisArg, _);\r\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n    }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n    if (k2 === undefined) k2 = k;\r\n    var desc = Object.getOwnPropertyDescriptor(m, k);\r\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n        desc = { enumerable: true, get: function() { return m[k]; } };\r\n    }\r\n    Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n    if (k2 === undefined) k2 = k;\r\n    o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n    for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n    if (m) return m.call(o);\r\n    if (o && typeof o.length === \"number\") return {\r\n        next: function () {\r\n            if (o && i >= o.length) o = void 0;\r\n            return { value: o && o[i++], done: !o };\r\n        }\r\n    };\r\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n    if (!m) return o;\r\n    var i = m.call(o), r, ar = [], e;\r\n    try {\r\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n    }\r\n    catch (error) { e = { error: error }; }\r\n    finally {\r\n        try {\r\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n        }\r\n        finally { if (e) throw e.error; }\r\n    }\r\n    return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n    for (var ar = [], i = 0; i < arguments.length; i++)\r\n        ar = ar.concat(__read(arguments[i]));\r\n    return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n    for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n    for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n        for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n            r[k] = a[j];\r\n    return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n    if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n        if (ar || !(i in from)) {\r\n            if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n            ar[i] = from[i];\r\n        }\r\n    }\r\n    return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n    return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n    return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n    function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n    function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n    function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n    function fulfill(value) { resume(\"next\", value); }\r\n    function reject(value) { resume(\"throw\", value); }\r\n    function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n    var i, p;\r\n    return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n    function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var m = o[Symbol.asyncIterator], i;\r\n    return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n    function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n    function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n    if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n    return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n    o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n    if (mod && mod.__esModule) return mod;\r\n    var result = {};\r\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n    __setModuleDefault(result, mod);\r\n    return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n    return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n    if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n    if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n    return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n    if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n    if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n    if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n    return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n    if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n    return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n","module.exports = function isBuffer(arg) {\n  return arg && typeof arg === 'object'\n    && typeof arg.copy === 'function'\n    && typeof arg.fill === 'function'\n    && typeof arg.readUInt8 === 'function';\n}","// Currently in sync with Node.js lib/internal/util/types.js\n// https://github.com/nodejs/node/commit/112cc7c27551254aa2b17098fb774867f05ed0d9\n\n'use strict';\n\nvar isArgumentsObject = require('is-arguments');\nvar isGeneratorFunction = require('is-generator-function');\nvar whichTypedArray = require('which-typed-array');\nvar isTypedArray = require('is-typed-array');\n\nfunction uncurryThis(f) {\n  return f.call.bind(f);\n}\n\nvar BigIntSupported = typeof BigInt !== 'undefined';\nvar SymbolSupported = typeof Symbol !== 'undefined';\n\nvar ObjectToString = uncurryThis(Object.prototype.toString);\n\nvar numberValue = uncurryThis(Number.prototype.valueOf);\nvar stringValue = uncurryThis(String.prototype.valueOf);\nvar booleanValue = uncurryThis(Boolean.prototype.valueOf);\n\nif (BigIntSupported) {\n  var bigIntValue = uncurryThis(BigInt.prototype.valueOf);\n}\n\nif (SymbolSupported) {\n  var symbolValue = uncurryThis(Symbol.prototype.valueOf);\n}\n\nfunction checkBoxedPrimitive(value, prototypeValueOf) {\n  if (typeof value !== 'object') {\n    return false;\n  }\n  try {\n    prototypeValueOf(value);\n    return true;\n  } catch(e) {\n    return false;\n  }\n}\n\nexports.isArgumentsObject = isArgumentsObject;\nexports.isGeneratorFunction = isGeneratorFunction;\nexports.isTypedArray = isTypedArray;\n\n// Taken from here and modified for better browser support\n// https://github.com/sindresorhus/p-is-promise/blob/cda35a513bda03f977ad5cde3a079d237e82d7ef/index.js\nfunction isPromise(input) {\n\treturn (\n\t\t(\n\t\t\ttypeof Promise !== 'undefined' &&\n\t\t\tinput instanceof Promise\n\t\t) ||\n\t\t(\n\t\t\tinput !== null &&\n\t\t\ttypeof input === 'object' &&\n\t\t\ttypeof input.then === 'function' &&\n\t\t\ttypeof input.catch === 'function'\n\t\t)\n\t);\n}\nexports.isPromise = isPromise;\n\nfunction isArrayBufferView(value) {\n  if (typeof ArrayBuffer !== 'undefined' && ArrayBuffer.isView) {\n    return ArrayBuffer.isView(value);\n  }\n\n  return (\n    isTypedArray(value) ||\n    isDataView(value)\n  );\n}\nexports.isArrayBufferView = isArrayBufferView;\n\n\nfunction isUint8Array(value) {\n  return whichTypedArray(value) === 'Uint8Array';\n}\nexports.isUint8Array = isUint8Array;\n\nfunction isUint8ClampedArray(value) {\n  return whichTypedArray(value) === 'Uint8ClampedArray';\n}\nexports.isUint8ClampedArray = isUint8ClampedArray;\n\nfunction isUint16Array(value) {\n  return whichTypedArray(value) === 'Uint16Array';\n}\nexports.isUint16Array = isUint16Array;\n\nfunction isUint32Array(value) {\n  return whichTypedArray(value) === 'Uint32Array';\n}\nexports.isUint32Array = isUint32Array;\n\nfunction isInt8Array(value) {\n  return whichTypedArray(value) === 'Int8Array';\n}\nexports.isInt8Array = isInt8Array;\n\nfunction isInt16Array(value) {\n  return whichTypedArray(value) === 'Int16Array';\n}\nexports.isInt16Array = isInt16Array;\n\nfunction isInt32Array(value) {\n  return whichTypedArray(value) === 'Int32Array';\n}\nexports.isInt32Array = isInt32Array;\n\nfunction isFloat32Array(value) {\n  return whichTypedArray(value) === 'Float32Array';\n}\nexports.isFloat32Array = isFloat32Array;\n\nfunction isFloat64Array(value) {\n  return whichTypedArray(value) === 'Float64Array';\n}\nexports.isFloat64Array = isFloat64Array;\n\nfunction isBigInt64Array(value) {\n  return whichTypedArray(value) === 'BigInt64Array';\n}\nexports.isBigInt64Array = isBigInt64Array;\n\nfunction isBigUint64Array(value) {\n  return whichTypedArray(value) === 'BigUint64Array';\n}\nexports.isBigUint64Array = isBigUint64Array;\n\nfunction isMapToString(value) {\n  return ObjectToString(value) === '[object Map]';\n}\nisMapToString.working = (\n  typeof Map !== 'undefined' &&\n  isMapToString(new Map())\n);\n\nfunction isMap(value) {\n  if (typeof Map === 'undefined') {\n    return false;\n  }\n\n  return isMapToString.working\n    ? isMapToString(value)\n    : value instanceof Map;\n}\nexports.isMap = isMap;\n\nfunction isSetToString(value) {\n  return ObjectToString(value) === '[object Set]';\n}\nisSetToString.working = (\n  typeof Set !== 'undefined' &&\n  isSetToString(new Set())\n);\nfunction isSet(value) {\n  if (typeof Set === 'undefined') {\n    return false;\n  }\n\n  return isSetToString.working\n    ? isSetToString(value)\n    : value instanceof Set;\n}\nexports.isSet = isSet;\n\nfunction isWeakMapToString(value) {\n  return ObjectToString(value) === '[object WeakMap]';\n}\nisWeakMapToString.working = (\n  typeof WeakMap !== 'undefined' &&\n  isWeakMapToString(new WeakMap())\n);\nfunction isWeakMap(value) {\n  if (typeof WeakMap === 'undefined') {\n    return false;\n  }\n\n  return isWeakMapToString.working\n    ? isWeakMapToString(value)\n    : value instanceof WeakMap;\n}\nexports.isWeakMap = isWeakMap;\n\nfunction isWeakSetToString(value) {\n  return ObjectToString(value) === '[object WeakSet]';\n}\nisWeakSetToString.working = (\n  typeof WeakSet !== 'undefined' &&\n  isWeakSetToString(new WeakSet())\n);\nfunction isWeakSet(value) {\n  return isWeakSetToString(value);\n}\nexports.isWeakSet = isWeakSet;\n\nfunction isArrayBufferToString(value) {\n  return ObjectToString(value) === '[object ArrayBuffer]';\n}\nisArrayBufferToString.working = (\n  typeof ArrayBuffer !== 'undefined' &&\n  isArrayBufferToString(new ArrayBuffer())\n);\nfunction isArrayBuffer(value) {\n  if (typeof ArrayBuffer === 'undefined') {\n    return false;\n  }\n\n  return isArrayBufferToString.working\n    ? isArrayBufferToString(value)\n    : value instanceof ArrayBuffer;\n}\nexports.isArrayBuffer = isArrayBuffer;\n\nfunction isDataViewToString(value) {\n  return ObjectToString(value) === '[object DataView]';\n}\nisDataViewToString.working = (\n  typeof ArrayBuffer !== 'undefined' &&\n  typeof DataView !== 'undefined' &&\n  isDataViewToString(new DataView(new ArrayBuffer(1), 0, 1))\n);\nfunction isDataView(value) {\n  if (typeof DataView === 'undefined') {\n    return false;\n  }\n\n  return isDataViewToString.working\n    ? isDataViewToString(value)\n    : value instanceof DataView;\n}\nexports.isDataView = isDataView;\n\n// Store a copy of SharedArrayBuffer in case it's deleted elsewhere\nvar SharedArrayBufferCopy = typeof SharedArrayBuffer !== 'undefined' ? SharedArrayBuffer : undefined;\nfunction isSharedArrayBufferToString(value) {\n  return ObjectToString(value) === '[object SharedArrayBuffer]';\n}\nfunction isSharedArrayBuffer(value) {\n  if (typeof SharedArrayBufferCopy === 'undefined') {\n    return false;\n  }\n\n  if (typeof isSharedArrayBufferToString.working === 'undefined') {\n    isSharedArrayBufferToString.working = isSharedArrayBufferToString(new SharedArrayBufferCopy());\n  }\n\n  return isSharedArrayBufferToString.working\n    ? isSharedArrayBufferToString(value)\n    : value instanceof SharedArrayBufferCopy;\n}\nexports.isSharedArrayBuffer = isSharedArrayBuffer;\n\nfunction isAsyncFunction(value) {\n  return ObjectToString(value) === '[object AsyncFunction]';\n}\nexports.isAsyncFunction = isAsyncFunction;\n\nfunction isMapIterator(value) {\n  return ObjectToString(value) === '[object Map Iterator]';\n}\nexports.isMapIterator = isMapIterator;\n\nfunction isSetIterator(value) {\n  return ObjectToString(value) === '[object Set Iterator]';\n}\nexports.isSetIterator = isSetIterator;\n\nfunction isGeneratorObject(value) {\n  return ObjectToString(value) === '[object Generator]';\n}\nexports.isGeneratorObject = isGeneratorObject;\n\nfunction isWebAssemblyCompiledModule(value) {\n  return ObjectToString(value) === '[object WebAssembly.Module]';\n}\nexports.isWebAssemblyCompiledModule = isWebAssemblyCompiledModule;\n\nfunction isNumberObject(value) {\n  return checkBoxedPrimitive(value, numberValue);\n}\nexports.isNumberObject = isNumberObject;\n\nfunction isStringObject(value) {\n  return checkBoxedPrimitive(value, stringValue);\n}\nexports.isStringObject = isStringObject;\n\nfunction isBooleanObject(value) {\n  return checkBoxedPrimitive(value, booleanValue);\n}\nexports.isBooleanObject = isBooleanObject;\n\nfunction isBigIntObject(value) {\n  return BigIntSupported && checkBoxedPrimitive(value, bigIntValue);\n}\nexports.isBigIntObject = isBigIntObject;\n\nfunction isSymbolObject(value) {\n  return SymbolSupported && checkBoxedPrimitive(value, symbolValue);\n}\nexports.isSymbolObject = isSymbolObject;\n\nfunction isBoxedPrimitive(value) {\n  return (\n    isNumberObject(value) ||\n    isStringObject(value) ||\n    isBooleanObject(value) ||\n    isBigIntObject(value) ||\n    isSymbolObject(value)\n  );\n}\nexports.isBoxedPrimitive = isBoxedPrimitive;\n\nfunction isAnyArrayBuffer(value) {\n  return typeof Uint8Array !== 'undefined' && (\n    isArrayBuffer(value) ||\n    isSharedArrayBuffer(value)\n  );\n}\nexports.isAnyArrayBuffer = isAnyArrayBuffer;\n\n['isProxy', 'isExternal', 'isModuleNamespaceObject'].forEach(function(method) {\n  Object.defineProperty(exports, method, {\n    enumerable: false,\n    value: function() {\n      throw new Error(method + ' is not supported in userland');\n    }\n  });\n});\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nvar getOwnPropertyDescriptors = Object.getOwnPropertyDescriptors ||\n  function getOwnPropertyDescriptors(obj) {\n    var keys = Object.keys(obj);\n    var descriptors = {};\n    for (var i = 0; i < keys.length; i++) {\n      descriptors[keys[i]] = Object.getOwnPropertyDescriptor(obj, keys[i]);\n    }\n    return descriptors;\n  };\n\nvar formatRegExp = /%[sdj%]/g;\nexports.format = function(f) {\n  if (!isString(f)) {\n    var objects = [];\n    for (var i = 0; i < arguments.length; i++) {\n      objects.push(inspect(arguments[i]));\n    }\n    return objects.join(' ');\n  }\n\n  var i = 1;\n  var args = arguments;\n  var len = args.length;\n  var str = String(f).replace(formatRegExp, function(x) {\n    if (x === '%%') return '%';\n    if (i >= len) return x;\n    switch (x) {\n      case '%s': return String(args[i++]);\n      case '%d': return Number(args[i++]);\n      case '%j':\n        try {\n          return JSON.stringify(args[i++]);\n        } catch (_) {\n          return '[Circular]';\n        }\n      default:\n        return x;\n    }\n  });\n  for (var x = args[i]; i < len; x = args[++i]) {\n    if (isNull(x) || !isObject(x)) {\n      str += ' ' + x;\n    } else {\n      str += ' ' + inspect(x);\n    }\n  }\n  return str;\n};\n\n\n// Mark that a method should not be used.\n// Returns a modified function which warns once by default.\n// If --no-deprecation is set, then it is a no-op.\nexports.deprecate = function(fn, msg) {\n  if (typeof process !== 'undefined' && process.noDeprecation === true) {\n    return fn;\n  }\n\n  // Allow for deprecating things in the process of starting up.\n  if (typeof process === 'undefined') {\n    return function() {\n      return exports.deprecate(fn, msg).apply(this, arguments);\n    };\n  }\n\n  var warned = false;\n  function deprecated() {\n    if (!warned) {\n      if (process.throwDeprecation) {\n        throw new Error(msg);\n      } else if (process.traceDeprecation) {\n        console.trace(msg);\n      } else {\n        console.error(msg);\n      }\n      warned = true;\n    }\n    return fn.apply(this, arguments);\n  }\n\n  return deprecated;\n};\n\n\nvar debugs = {};\nvar debugEnvRegex = /^$/;\n\nif (process.env.NODE_DEBUG) {\n  var debugEnv = process.env.NODE_DEBUG;\n  debugEnv = debugEnv.replace(/[|\\\\{}()[\\]^$+?.]/g, '\\\\$&')\n    .replace(/\\*/g, '.*')\n    .replace(/,/g, '$|^')\n    .toUpperCase();\n  debugEnvRegex = new RegExp('^' + debugEnv + '$', 'i');\n}\nexports.debuglog = function(set) {\n  set = set.toUpperCase();\n  if (!debugs[set]) {\n    if (debugEnvRegex.test(set)) {\n      var pid = process.pid;\n      debugs[set] = function() {\n        var msg = exports.format.apply(exports, arguments);\n        console.error('%s %d: %s', set, pid, msg);\n      };\n    } else {\n      debugs[set] = function() {};\n    }\n  }\n  return debugs[set];\n};\n\n\n/**\n * Echos the value of a value. Trys to print the value out\n * in the best way possible given the different types.\n *\n * @param {Object} obj The object to print out.\n * @param {Object} opts Optional options object that alters the output.\n */\n/* legacy: obj, showHidden, depth, colors*/\nfunction inspect(obj, opts) {\n  // default options\n  var ctx = {\n    seen: [],\n    stylize: stylizeNoColor\n  };\n  // legacy...\n  if (arguments.length >= 3) ctx.depth = arguments[2];\n  if (arguments.length >= 4) ctx.colors = arguments[3];\n  if (isBoolean(opts)) {\n    // legacy...\n    ctx.showHidden = opts;\n  } else if (opts) {\n    // got an \"options\" object\n    exports._extend(ctx, opts);\n  }\n  // set default options\n  if (isUndefined(ctx.showHidden)) ctx.showHidden = false;\n  if (isUndefined(ctx.depth)) ctx.depth = 2;\n  if (isUndefined(ctx.colors)) ctx.colors = false;\n  if (isUndefined(ctx.customInspect)) ctx.customInspect = true;\n  if (ctx.colors) ctx.stylize = stylizeWithColor;\n  return formatValue(ctx, obj, ctx.depth);\n}\nexports.inspect = inspect;\n\n\n// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics\ninspect.colors = {\n  'bold' : [1, 22],\n  'italic' : [3, 23],\n  'underline' : [4, 24],\n  'inverse' : [7, 27],\n  'white' : [37, 39],\n  'grey' : [90, 39],\n  'black' : [30, 39],\n  'blue' : [34, 39],\n  'cyan' : [36, 39],\n  'green' : [32, 39],\n  'magenta' : [35, 39],\n  'red' : [31, 39],\n  'yellow' : [33, 39]\n};\n\n// Don't use 'blue' not visible on cmd.exe\ninspect.styles = {\n  'special': 'cyan',\n  'number': 'yellow',\n  'boolean': 'yellow',\n  'undefined': 'grey',\n  'null': 'bold',\n  'string': 'green',\n  'date': 'magenta',\n  // \"name\": intentionally not styling\n  'regexp': 'red'\n};\n\n\nfunction stylizeWithColor(str, styleType) {\n  var style = inspect.styles[styleType];\n\n  if (style) {\n    return '\\u001b[' + inspect.colors[style][0] + 'm' + str +\n           '\\u001b[' + inspect.colors[style][1] + 'm';\n  } else {\n    return str;\n  }\n}\n\n\nfunction stylizeNoColor(str, styleType) {\n  return str;\n}\n\n\nfunction arrayToHash(array) {\n  var hash = {};\n\n  array.forEach(function(val, idx) {\n    hash[val] = true;\n  });\n\n  return hash;\n}\n\n\nfunction formatValue(ctx, value, recurseTimes) {\n  // Provide a hook for user-specified inspect functions.\n  // Check that value is an object with an inspect function on it\n  if (ctx.customInspect &&\n      value &&\n      isFunction(value.inspect) &&\n      // Filter out the util module, it's inspect function is special\n      value.inspect !== exports.inspect &&\n      // Also filter out any prototype objects using the circular check.\n      !(value.constructor && value.constructor.prototype === value)) {\n    var ret = value.inspect(recurseTimes, ctx);\n    if (!isString(ret)) {\n      ret = formatValue(ctx, ret, recurseTimes);\n    }\n    return ret;\n  }\n\n  // Primitive types cannot have properties\n  var primitive = formatPrimitive(ctx, value);\n  if (primitive) {\n    return primitive;\n  }\n\n  // Look up the keys of the object.\n  var keys = Object.keys(value);\n  var visibleKeys = arrayToHash(keys);\n\n  if (ctx.showHidden) {\n    keys = Object.getOwnPropertyNames(value);\n  }\n\n  // IE doesn't make error fields non-enumerable\n  // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx\n  if (isError(value)\n      && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {\n    return formatError(value);\n  }\n\n  // Some type of object without properties can be shortcutted.\n  if (keys.length === 0) {\n    if (isFunction(value)) {\n      var name = value.name ? ': ' + value.name : '';\n      return ctx.stylize('[Function' + name + ']', 'special');\n    }\n    if (isRegExp(value)) {\n      return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n    }\n    if (isDate(value)) {\n      return ctx.stylize(Date.prototype.toString.call(value), 'date');\n    }\n    if (isError(value)) {\n      return formatError(value);\n    }\n  }\n\n  var base = '', array = false, braces = ['{', '}'];\n\n  // Make Array say that they are Array\n  if (isArray(value)) {\n    array = true;\n    braces = ['[', ']'];\n  }\n\n  // Make functions say that they are functions\n  if (isFunction(value)) {\n    var n = value.name ? ': ' + value.name : '';\n    base = ' [Function' + n + ']';\n  }\n\n  // Make RegExps say that they are RegExps\n  if (isRegExp(value)) {\n    base = ' ' + RegExp.prototype.toString.call(value);\n  }\n\n  // Make dates with properties first say the date\n  if (isDate(value)) {\n    base = ' ' + Date.prototype.toUTCString.call(value);\n  }\n\n  // Make error with message first say the error\n  if (isError(value)) {\n    base = ' ' + formatError(value);\n  }\n\n  if (keys.length === 0 && (!array || value.length == 0)) {\n    return braces[0] + base + braces[1];\n  }\n\n  if (recurseTimes < 0) {\n    if (isRegExp(value)) {\n      return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n    } else {\n      return ctx.stylize('[Object]', 'special');\n    }\n  }\n\n  ctx.seen.push(value);\n\n  var output;\n  if (array) {\n    output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);\n  } else {\n    output = keys.map(function(key) {\n      return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);\n    });\n  }\n\n  ctx.seen.pop();\n\n  return reduceToSingleString(output, base, braces);\n}\n\n\nfunction formatPrimitive(ctx, value) {\n  if (isUndefined(value))\n    return ctx.stylize('undefined', 'undefined');\n  if (isString(value)) {\n    var simple = '\\'' + JSON.stringify(value).replace(/^\"|\"$/g, '')\n                                             .replace(/'/g, \"\\\\'\")\n                                             .replace(/\\\\\"/g, '\"') + '\\'';\n    return ctx.stylize(simple, 'string');\n  }\n  if (isNumber(value))\n    return ctx.stylize('' + value, 'number');\n  if (isBoolean(value))\n    return ctx.stylize('' + value, 'boolean');\n  // For some reason typeof null is \"object\", so special case here.\n  if (isNull(value))\n    return ctx.stylize('null', 'null');\n}\n\n\nfunction formatError(value) {\n  return '[' + Error.prototype.toString.call(value) + ']';\n}\n\n\nfunction formatArray(ctx, value, recurseTimes, visibleKeys, keys) {\n  var output = [];\n  for (var i = 0, l = value.length; i < l; ++i) {\n    if (hasOwnProperty(value, String(i))) {\n      output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n          String(i), true));\n    } else {\n      output.push('');\n    }\n  }\n  keys.forEach(function(key) {\n    if (!key.match(/^\\d+$/)) {\n      output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n          key, true));\n    }\n  });\n  return output;\n}\n\n\nfunction formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {\n  var name, str, desc;\n  desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };\n  if (desc.get) {\n    if (desc.set) {\n      str = ctx.stylize('[Getter/Setter]', 'special');\n    } else {\n      str = ctx.stylize('[Getter]', 'special');\n    }\n  } else {\n    if (desc.set) {\n      str = ctx.stylize('[Setter]', 'special');\n    }\n  }\n  if (!hasOwnProperty(visibleKeys, key)) {\n    name = '[' + key + ']';\n  }\n  if (!str) {\n    if (ctx.seen.indexOf(desc.value) < 0) {\n      if (isNull(recurseTimes)) {\n        str = formatValue(ctx, desc.value, null);\n      } else {\n        str = formatValue(ctx, desc.value, recurseTimes - 1);\n      }\n      if (str.indexOf('\\n') > -1) {\n        if (array) {\n          str = str.split('\\n').map(function(line) {\n            return '  ' + line;\n          }).join('\\n').slice(2);\n        } else {\n          str = '\\n' + str.split('\\n').map(function(line) {\n            return '   ' + line;\n          }).join('\\n');\n        }\n      }\n    } else {\n      str = ctx.stylize('[Circular]', 'special');\n    }\n  }\n  if (isUndefined(name)) {\n    if (array && key.match(/^\\d+$/)) {\n      return str;\n    }\n    name = JSON.stringify('' + key);\n    if (name.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)) {\n      name = name.slice(1, -1);\n      name = ctx.stylize(name, 'name');\n    } else {\n      name = name.replace(/'/g, \"\\\\'\")\n                 .replace(/\\\\\"/g, '\"')\n                 .replace(/(^\"|\"$)/g, \"'\");\n      name = ctx.stylize(name, 'string');\n    }\n  }\n\n  return name + ': ' + str;\n}\n\n\nfunction reduceToSingleString(output, base, braces) {\n  var numLinesEst = 0;\n  var length = output.reduce(function(prev, cur) {\n    numLinesEst++;\n    if (cur.indexOf('\\n') >= 0) numLinesEst++;\n    return prev + cur.replace(/\\u001b\\[\\d\\d?m/g, '').length + 1;\n  }, 0);\n\n  if (length > 60) {\n    return braces[0] +\n           (base === '' ? '' : base + '\\n ') +\n           ' ' +\n           output.join(',\\n  ') +\n           ' ' +\n           braces[1];\n  }\n\n  return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];\n}\n\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\nexports.types = require('./support/types');\n\nfunction isArray(ar) {\n  return Array.isArray(ar);\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n  return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n  return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n  return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n  return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n  return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n  return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n  return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n  return isObject(re) && objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\nexports.types.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n  return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n  return isObject(d) && objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\nexports.types.isDate = isDate;\n\nfunction isError(e) {\n  return isObject(e) &&\n      (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\nexports.types.isNativeError = isError;\n\nfunction isFunction(arg) {\n  return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n  return arg === null ||\n         typeof arg === 'boolean' ||\n         typeof arg === 'number' ||\n         typeof arg === 'string' ||\n         typeof arg === 'symbol' ||  // ES6 symbol\n         typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = require('./support/isBuffer');\n\nfunction objectToString(o) {\n  return Object.prototype.toString.call(o);\n}\n\n\nfunction pad(n) {\n  return n < 10 ? '0' + n.toString(10) : n.toString(10);\n}\n\n\nvar months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',\n              'Oct', 'Nov', 'Dec'];\n\n// 26 Feb 16:19:34\nfunction timestamp() {\n  var d = new Date();\n  var time = [pad(d.getHours()),\n              pad(d.getMinutes()),\n              pad(d.getSeconds())].join(':');\n  return [d.getDate(), months[d.getMonth()], time].join(' ');\n}\n\n\n// log is just a thin wrapper to console.log that prepends a timestamp\nexports.log = function() {\n  console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));\n};\n\n\n/**\n * Inherit the prototype methods from one constructor into another.\n *\n * The Function.prototype.inherits from lang.js rewritten as a standalone\n * function (not on Function.prototype). NOTE: If this file is to be loaded\n * during bootstrapping this function needs to be rewritten using some native\n * functions as prototype setup using normal JavaScript does not work as\n * expected during bootstrapping (see mirror.js in r114903).\n *\n * @param {function} ctor Constructor function which needs to inherit the\n *     prototype.\n * @param {function} superCtor Constructor function to inherit prototype from.\n */\nexports.inherits = require('inherits');\n\nexports._extend = function(origin, add) {\n  // Don't do anything if add isn't an object\n  if (!add || !isObject(add)) return origin;\n\n  var keys = Object.keys(add);\n  var i = keys.length;\n  while (i--) {\n    origin[keys[i]] = add[keys[i]];\n  }\n  return origin;\n};\n\nfunction hasOwnProperty(obj, prop) {\n  return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nvar kCustomPromisifiedSymbol = typeof Symbol !== 'undefined' ? Symbol('util.promisify.custom') : undefined;\n\nexports.promisify = function promisify(original) {\n  if (typeof original !== 'function')\n    throw new TypeError('The \"original\" argument must be of type Function');\n\n  if (kCustomPromisifiedSymbol && original[kCustomPromisifiedSymbol]) {\n    var fn = original[kCustomPromisifiedSymbol];\n    if (typeof fn !== 'function') {\n      throw new TypeError('The \"util.promisify.custom\" argument must be of type Function');\n    }\n    Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n      value: fn, enumerable: false, writable: false, configurable: true\n    });\n    return fn;\n  }\n\n  function fn() {\n    var promiseResolve, promiseReject;\n    var promise = new Promise(function (resolve, reject) {\n      promiseResolve = resolve;\n      promiseReject = reject;\n    });\n\n    var args = [];\n    for (var i = 0; i < arguments.length; i++) {\n      args.push(arguments[i]);\n    }\n    args.push(function (err, value) {\n      if (err) {\n        promiseReject(err);\n      } else {\n        promiseResolve(value);\n      }\n    });\n\n    try {\n      original.apply(this, args);\n    } catch (err) {\n      promiseReject(err);\n    }\n\n    return promise;\n  }\n\n  Object.setPrototypeOf(fn, Object.getPrototypeOf(original));\n\n  if (kCustomPromisifiedSymbol) Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n    value: fn, enumerable: false, writable: false, configurable: true\n  });\n  return Object.defineProperties(\n    fn,\n    getOwnPropertyDescriptors(original)\n  );\n}\n\nexports.promisify.custom = kCustomPromisifiedSymbol\n\nfunction callbackifyOnRejected(reason, cb) {\n  // `!reason` guard inspired by bluebird (Ref: https://goo.gl/t5IS6M).\n  // Because `null` is a special error value in callbacks which means \"no error\n  // occurred\", we error-wrap so the callback consumer can distinguish between\n  // \"the promise rejected with null\" or \"the promise fulfilled with undefined\".\n  if (!reason) {\n    var newReason = new Error('Promise was rejected with a falsy value');\n    newReason.reason = reason;\n    reason = newReason;\n  }\n  return cb(reason);\n}\n\nfunction callbackify(original) {\n  if (typeof original !== 'function') {\n    throw new TypeError('The \"original\" argument must be of type Function');\n  }\n\n  // We DO NOT return the promise as it gives the user a false sense that\n  // the promise is actually somehow related to the callback's execution\n  // and that the callback throwing will reject the promise.\n  function callbackified() {\n    var args = [];\n    for (var i = 0; i < arguments.length; i++) {\n      args.push(arguments[i]);\n    }\n\n    var maybeCb = args.pop();\n    if (typeof maybeCb !== 'function') {\n      throw new TypeError('The last argument must be of type Function');\n    }\n    var self = this;\n    var cb = function() {\n      return maybeCb.apply(self, arguments);\n    };\n    // In true node style we process the callback on `nextTick` with all the\n    // implications (stack, `uncaughtException`, `async_hooks`)\n    original.apply(this, args)\n      .then(function(ret) { process.nextTick(cb.bind(null, null, ret)) },\n            function(rej) { process.nextTick(callbackifyOnRejected.bind(null, rej, cb)) });\n  }\n\n  Object.setPrototypeOf(callbackified, Object.getPrototypeOf(original));\n  Object.defineProperties(callbackified,\n                          getOwnPropertyDescriptors(original));\n  return callbackified;\n}\nexports.callbackify = callbackify;\n","\nvar rng;\n\nvar crypto = global.crypto || global.msCrypto; // for IE 11\nif (crypto && crypto.getRandomValues) {\n  // WHATWG crypto-based RNG - http://wiki.whatwg.org/wiki/Crypto\n  // Moderately fast, high quality\n  var _rnds8 = new Uint8Array(16);\n  rng = function whatwgRNG() {\n    crypto.getRandomValues(_rnds8);\n    return _rnds8;\n  };\n}\n\nif (!rng) {\n  // Math.random()-based (RNG)\n  //\n  // If all else fails, use Math.random().  It's fast, but is of unspecified\n  // quality.\n  var  _rnds = new Array(16);\n  rng = function() {\n    for (var i = 0, r; i < 16; i++) {\n      if ((i & 0x03) === 0) r = Math.random() * 0x100000000;\n      _rnds[i] = r >>> ((i & 0x03) << 3) & 0xff;\n    }\n\n    return _rnds;\n  };\n}\n\nmodule.exports = rng;\n\n","//     uuid.js\n//\n//     Copyright (c) 2010-2012 Robert Kieffer\n//     MIT License - http://opensource.org/licenses/mit-license.php\n\n// Unique ID creation requires a high quality random # generator.  We feature\n// detect to determine the best RNG source, normalizing to a function that\n// returns 128-bits of randomness, since that's what's usually required\nvar _rng = require('./rng');\n\n// Maps for number <-> hex string conversion\nvar _byteToHex = [];\nvar _hexToByte = {};\nfor (var i = 0; i < 256; i++) {\n  _byteToHex[i] = (i + 0x100).toString(16).substr(1);\n  _hexToByte[_byteToHex[i]] = i;\n}\n\n// **`parse()` - Parse a UUID into it's component bytes**\nfunction parse(s, buf, offset) {\n  var i = (buf && offset) || 0, ii = 0;\n\n  buf = buf || [];\n  s.toLowerCase().replace(/[0-9a-f]{2}/g, function(oct) {\n    if (ii < 16) { // Don't overflow!\n      buf[i + ii++] = _hexToByte[oct];\n    }\n  });\n\n  // Zero out remaining bytes if string was short\n  while (ii < 16) {\n    buf[i + ii++] = 0;\n  }\n\n  return buf;\n}\n\n// **`unparse()` - Convert UUID byte array (ala parse()) into a string**\nfunction unparse(buf, offset) {\n  var i = offset || 0, bth = _byteToHex;\n  return  bth[buf[i++]] + bth[buf[i++]] +\n          bth[buf[i++]] + bth[buf[i++]] + '-' +\n          bth[buf[i++]] + bth[buf[i++]] + '-' +\n          bth[buf[i++]] + bth[buf[i++]] + '-' +\n          bth[buf[i++]] + bth[buf[i++]] + '-' +\n          bth[buf[i++]] + bth[buf[i++]] +\n          bth[buf[i++]] + bth[buf[i++]] +\n          bth[buf[i++]] + bth[buf[i++]];\n}\n\n// **`v1()` - Generate time-based UUID**\n//\n// Inspired by https://github.com/LiosK/UUID.js\n// and http://docs.python.org/library/uuid.html\n\n// random #'s we need to init node and clockseq\nvar _seedBytes = _rng();\n\n// Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)\nvar _nodeId = [\n  _seedBytes[0] | 0x01,\n  _seedBytes[1], _seedBytes[2], _seedBytes[3], _seedBytes[4], _seedBytes[5]\n];\n\n// Per 4.2.2, randomize (14 bit) clockseq\nvar _clockseq = (_seedBytes[6] << 8 | _seedBytes[7]) & 0x3fff;\n\n// Previous uuid creation time\nvar _lastMSecs = 0, _lastNSecs = 0;\n\n// See https://github.com/broofa/node-uuid for API details\nfunction v1(options, buf, offset) {\n  var i = buf && offset || 0;\n  var b = buf || [];\n\n  options = options || {};\n\n  var clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq;\n\n  // UUID timestamps are 100 nano-second units since the Gregorian epoch,\n  // (1582-10-15 00:00).  JSNumbers aren't precise enough for this, so\n  // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs'\n  // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.\n  var msecs = options.msecs !== undefined ? options.msecs : new Date().getTime();\n\n  // Per 4.2.1.2, use count of uuid's generated during the current clock\n  // cycle to simulate higher resolution clock\n  var nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1;\n\n  // Time since last uuid creation (in msecs)\n  var dt = (msecs - _lastMSecs) + (nsecs - _lastNSecs)/10000;\n\n  // Per 4.2.1.2, Bump clockseq on clock regression\n  if (dt < 0 && options.clockseq === undefined) {\n    clockseq = clockseq + 1 & 0x3fff;\n  }\n\n  // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new\n  // time interval\n  if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) {\n    nsecs = 0;\n  }\n\n  // Per 4.2.1.2 Throw error if too many uuids are requested\n  if (nsecs >= 10000) {\n    throw new Error('uuid.v1(): Can\\'t create more than 10M uuids/sec');\n  }\n\n  _lastMSecs = msecs;\n  _lastNSecs = nsecs;\n  _clockseq = clockseq;\n\n  // Per 4.1.4 - Convert from unix epoch to Gregorian epoch\n  msecs += 12219292800000;\n\n  // `time_low`\n  var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;\n  b[i++] = tl >>> 24 & 0xff;\n  b[i++] = tl >>> 16 & 0xff;\n  b[i++] = tl >>> 8 & 0xff;\n  b[i++] = tl & 0xff;\n\n  // `time_mid`\n  var tmh = (msecs / 0x100000000 * 10000) & 0xfffffff;\n  b[i++] = tmh >>> 8 & 0xff;\n  b[i++] = tmh & 0xff;\n\n  // `time_high_and_version`\n  b[i++] = tmh >>> 24 & 0xf | 0x10; // include version\n  b[i++] = tmh >>> 16 & 0xff;\n\n  // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)\n  b[i++] = clockseq >>> 8 | 0x80;\n\n  // `clock_seq_low`\n  b[i++] = clockseq & 0xff;\n\n  // `node`\n  var node = options.node || _nodeId;\n  for (var n = 0; n < 6; n++) {\n    b[i + n] = node[n];\n  }\n\n  return buf ? buf : unparse(b);\n}\n\n// **`v4()` - Generate random UUID**\n\n// See https://github.com/broofa/node-uuid for API details\nfunction v4(options, buf, offset) {\n  // Deprecated - 'format' argument, as supported in v1.2\n  var i = buf && offset || 0;\n\n  if (typeof(options) == 'string') {\n    buf = options == 'binary' ? new Array(16) : null;\n    options = null;\n  }\n  options = options || {};\n\n  var rnds = options.random || (options.rng || _rng)();\n\n  // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n  rnds[6] = (rnds[6] & 0x0f) | 0x40;\n  rnds[8] = (rnds[8] & 0x3f) | 0x80;\n\n  // Copy bytes to buffer, if provided\n  if (buf) {\n    for (var ii = 0; ii < 16; ii++) {\n      buf[i + ii] = rnds[ii];\n    }\n  }\n\n  return buf || unparse(rnds);\n}\n\n// Export public API\nvar uuid = v4;\nuuid.v1 = v1;\nuuid.v4 = v4;\nuuid.parse = parse;\nuuid.unparse = unparse;\n\nmodule.exports = uuid;\n","'use strict';\n\nvar forEach = require('for-each');\nvar availableTypedArrays = require('available-typed-arrays');\nvar callBound = require('call-bind/callBound');\nvar gOPD = require('gopd');\n\nvar $toString = callBound('Object.prototype.toString');\nvar hasToStringTag = require('has-tostringtag/shams')();\n\nvar g = typeof globalThis === 'undefined' ? global : globalThis;\nvar typedArrays = availableTypedArrays();\n\nvar $slice = callBound('String.prototype.slice');\nvar toStrTags = {};\nvar getPrototypeOf = Object.getPrototypeOf; // require('getprototypeof');\nif (hasToStringTag && gOPD && getPrototypeOf) {\n\tforEach(typedArrays, function (typedArray) {\n\t\tif (typeof g[typedArray] === 'function') {\n\t\t\tvar arr = new g[typedArray]();\n\t\t\tif (Symbol.toStringTag in arr) {\n\t\t\t\tvar proto = getPrototypeOf(arr);\n\t\t\t\tvar descriptor = gOPD(proto, Symbol.toStringTag);\n\t\t\t\tif (!descriptor) {\n\t\t\t\t\tvar superProto = getPrototypeOf(proto);\n\t\t\t\t\tdescriptor = gOPD(superProto, Symbol.toStringTag);\n\t\t\t\t}\n\t\t\t\ttoStrTags[typedArray] = descriptor.get;\n\t\t\t}\n\t\t}\n\t});\n}\n\nvar tryTypedArrays = function tryAllTypedArrays(value) {\n\tvar foundName = false;\n\tforEach(toStrTags, function (getter, typedArray) {\n\t\tif (!foundName) {\n\t\t\ttry {\n\t\t\t\tvar name = getter.call(value);\n\t\t\t\tif (name === typedArray) {\n\t\t\t\t\tfoundName = name;\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\t\t}\n\t});\n\treturn foundName;\n};\n\nvar isTypedArray = require('is-typed-array');\n\nmodule.exports = function whichTypedArray(value) {\n\tif (!isTypedArray(value)) { return false; }\n\tif (!hasToStringTag || !(Symbol.toStringTag in value)) { return $slice($toString(value), 8, -1); }\n\treturn tryTypedArrays(value);\n};\n","'use strict';\n\nvar possibleNames = [\n\t'BigInt64Array',\n\t'BigUint64Array',\n\t'Float32Array',\n\t'Float64Array',\n\t'Int16Array',\n\t'Int32Array',\n\t'Int8Array',\n\t'Uint16Array',\n\t'Uint32Array',\n\t'Uint8Array',\n\t'Uint8ClampedArray'\n];\n\nvar g = typeof globalThis === 'undefined' ? global : globalThis;\n\nmodule.exports = function availableTypedArrays() {\n\tvar out = [];\n\tfor (var i = 0; i < possibleNames.length; i++) {\n\t\tif (typeof g[possibleNames[i]] === 'function') {\n\t\t\tout[out.length] = possibleNames[i];\n\t\t}\n\t}\n\treturn out;\n};\n","import{TerraDrawExtend as e}from\"terra-draw\";function t(){return t=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var i in r)({}).hasOwnProperty.call(r,i)&&(e[i]=r[i])}return e},t.apply(null,arguments)}class r extends e.TerraDrawBaseAdapter{constructor(e){super(e),this._forwardMapElementEvents=!1,this._isolatedData=!1,this._data=void 0,this._cursor=void 0,this._cursorStyleSheet=void 0,this._lib=void 0,this._map=void 0,this._overlay=void 0,this._markerClickListener=void 0,this._markerMouseMoveListener=void 0,this._pointerCaptureDownListener=void 0,this._pointerCaptureUpListener=void 0,this._clickEventListener=void 0,this._mouseMoveEventListener=void 0,this._readyCalled=!1,this._interactiveTargetSelector=['[role=\"dialog\"]',\"a\",\"button\",\"input\",\"select\",\"textarea\",\"summary\",'[role=\"button\"]','[role=\"link\"]','[contenteditable=\"\"]','[contenteditable=\"true\"]'].join(\", \"),this._advancedMarkerElementTag=\"gmp-advanced-marker\",this.styling=void 0,this.renderedFeatureIds=new Set,this._rafState=void 0,this._lib=e.lib,this._map=e.map,this._forwardMapElementEvents=\"boolean\"==typeof e.forwardMapElementEvents&&e.forwardMapElementEvents,this._isolatedData=e.isolatedData||!1,this._coordinatePrecision=\"number\"==typeof e.coordinatePrecision?e.coordinatePrecision:9}get _hasRenderedFeatures(){var e;return Boolean((null==(e=this.renderedFeatureIds)?void 0:e.size)>0)}getPointerTargetElement(e){return e?e instanceof Element?e:e instanceof Node?e.parentElement:null:null}shouldCapturePointer(e){const t=this.getPointerTargetElement(e.target);return!t||!!t.closest(this._advancedMarkerElementTag)||!t.closest(this._interactiveTargetSelector)}circlePath(e,t,r){const i=2*r;return`M ${e} ${t} m -${r}, 0 a ${r},${r} 0 1,0 ${i},0 a ${r},${r} 0 1,0 -${i},0`}register(e){if(super.register(e),this._overlay=new this._lib.OverlayView,this._overlay.draw=function(){},this._overlay.onAdd=()=>{var e;null!=(e=this._currentModeCallbacks)&&e.onReady&&!this._readyCalled&&(this._currentModeCallbacks.onReady(),this._readyCalled=!0)},this._overlay.setMap(this._map),this._overlay.onRemove=()=>{},this._forwardMapElementEvents){const t=this.getMapEventElement();this._pointerCaptureDownListener=e=>{if(e.isPrimary&&this.shouldCapturePointer(e)&&\"function\"==typeof t.setPointerCapture)try{t.setPointerCapture(e.pointerId)}catch(e){}},this._pointerCaptureUpListener=e=>{if(\"function\"==typeof t.releasePointerCapture&&\"function\"==typeof t.hasPointerCapture&&t.hasPointerCapture(e.pointerId))try{t.releasePointerCapture(e.pointerId)}catch(e){}},t.addEventListener(\"pointerdown\",this._pointerCaptureDownListener),t.addEventListener(\"pointerup\",this._pointerCaptureUpListener),t.addEventListener(\"pointercancel\",this._pointerCaptureUpListener),this._markerClickListener=t=>{const r=t.target;if(null==r||!r.closest(this._advancedMarkerElementTag))return;const i=this.getDrawEventFromEvent(t);i&&e.onClick(i)},t.addEventListener(\"pointerdown\",this._markerClickListener),this._markerMouseMoveListener=t=>{const r=t.target;if(null==r||!r.closest(this._advancedMarkerElementTag))return;const i=this.getDrawEventFromEvent(t);i&&e.onMouseMove(i)},t.addEventListener(\"pointermove\",this._markerMouseMoveListener)}this._clickEventListener=this.data().addListener(\"click\",e=>{const t=this._listeners.find(({name:e})=>\"click\"===e);t&&t.callback(e)}),this._mouseMoveEventListener=this.data().addListener(\"mousemove\",e=>{const t=this._listeners.find(({name:e})=>\"mousemove\"===e);t&&t.callback(e)}),this._isolatedData&&(this._data=new this._lib.Data,this._data.setMap(this._map))}data(){return this._isolatedData&&this._data?this._data:this._map.data}style(e){if(!this.styling)throw new Error(\"Styling function not defined\");const r=String(e.getId());if(!this.renderedFeatureIds.has(r))return{};const i=e.getProperty(\"mode\"),n=e.getGeometry();if(!n)throw new Error(\"Google Maps geometry not found\");const o=n.getType(),a={};e.forEachProperty((e,t)=>{a[t]=e});const s=this.styling[i]({type:\"Feature\",id:r,geometry:{type:o,coordinates:[]},properties:a});switch(o){case\"Point\":if(s.markerUrl)return{clickable:!1,icon:{url:s.markerUrl,scaledSize:s.markerWidth&&s.markerHeight?new this._lib.Size(s.markerWidth,s.markerHeight):void 0},zIndex:s.zIndex};const e=this.circlePath(0,0,s.pointWidth),r=s.pointOutlineOpacity,i=s.pointOpacity;return{clickable:!1,icon:{path:e,fillColor:s.pointColor,fillOpacity:void 0===i?1:i,strokeColor:s.pointOutlineColor,strokeWeight:s.pointOutlineWidth,strokeOpacity:void 0===r?1:r,rotation:0,scale:1},zIndex:s.zIndex};case\"LineString\":const n=s.lineStringOpacity,o=s.lineStringDash;return t({strokeColor:s.lineStringColor,strokeWeight:s.lineStringWidth,strokeOpacity:void 0===n?1:n,zIndex:s.zIndex},o?{strokeOpacity:0,icons:[{icon:{path:\"M 0,0 0,\"+o[0],strokeOpacity:1,strokeWeight:s.lineStringWidth,color:s.lineStringColor,scale:1},offset:\"0\",repeat:`${o[0]+o[1]}px`,fixedRotation:!1}]}:{});case\"Polygon\":const a=s.polygonOutlineOpacity;return{strokeColor:s.polygonOutlineColor,strokeWeight:s.polygonOutlineWidth,strokeOpacity:void 0===a?1:a,fillOpacity:s.polygonFillOpacity,fillColor:s.polygonFillColor,zIndex:s.zIndex}}throw Error(\"Unknown feature type\")}unregister(){var e,t;super.unregister(),null==(e=this._clickEventListener)||e.remove(),null==(t=this._mouseMoveEventListener)||t.remove(),this._markerClickListener&&this.getMapEventElement().removeEventListener(\"pointerdown\",this._markerClickListener),this._markerMouseMoveListener&&this.getMapEventElement().removeEventListener(\"pointermove\",this._markerMouseMoveListener),this._pointerCaptureDownListener&&this.getMapEventElement().removeEventListener(\"pointerdown\",this._pointerCaptureDownListener),this._pointerCaptureUpListener&&(this.getMapEventElement().removeEventListener(\"pointerup\",this._pointerCaptureUpListener),this.getMapEventElement().removeEventListener(\"pointercancel\",this._pointerCaptureUpListener)),this._overlay&&this._overlay.getMap()&&this._overlay.setMap(null),this._overlay=void 0,this._readyCalled=!1,this._isolatedData&&this._data&&(this._data.setMap(null),this._data=void 0)}getLngLatFromEvent(e){var t;if(!this._overlay)throw new Error(\"cannot get overlay\");const r=this._map.getBounds();if(!r)return null;const i=r.getNorthEast(),n=r.getSouthWest(),o=new this._lib.LatLngBounds(n,i),a=(null!=(t=document.fullscreenElement)?t:this._map.getDiv()).getBoundingClientRect(),s=new this._lib.Point(e.clientX-a.left,e.clientY-a.top),l=this._overlay.getProjection();if(!l)return null;const d=l.fromContainerPixelToLatLng(s);return d&&o.contains(d)?{lng:d.lng(),lat:d.lat()}:null}getMapEventElement(e){return!e||\"keyup\"!==e&&\"keydown\"!==e?this._map.getDiv().querySelector('div[style*=\"z-index: 3;\"]'):this._map.getDiv()}project(e,t){if(!this._overlay)throw new Error(\"cannot get overlay\");if(void 0===this._map.getBounds())throw new Error(\"cannot get bounds\");const r=this._overlay.getProjection();if(void 0===r)throw new Error(\"cannot get projection\");const i=r.fromLatLngToContainerPixel(new this._lib.LatLng(t,e));if(null===i)throw new Error(\"cannot project coordinates\");return{x:i.x,y:i.y}}unproject(e,t){if(!this._overlay)throw new Error(\"cannot get overlay\");const r=this._overlay.getProjection();if(void 0===r)throw new Error(\"cannot get projection\");const i=r.fromContainerPixelToLatLng(new this._lib.Point(e,t));if(null===i)throw new Error(\"cannot unproject coordinates\");return{lng:i.lng(),lat:i.lat()}}setCursor(e){if(e!==this._cursor){if(this._cursorStyleSheet&&(this._cursorStyleSheet.remove(),this._cursorStyleSheet=void 0),\"unset\"!==e){const t=this._map.getDiv().querySelector(\".gm-style > div\");if(t){t.classList.add(\"terra-draw-google-maps\");const r=document.createElement(\"style\");r.innerHTML=`.terra-draw-google-maps { cursor: ${e} !important; }`,document.getElementsByTagName(\"head\")[0].appendChild(r),this._cursorStyleSheet=r}}this._cursor=e}}setDoubleClickToZoom(e){this._map.setOptions(e?{disableDoubleClickZoom:!1}:{disableDoubleClickZoom:!0})}setDraggability(e){this._map.setOptions({draggable:e})}render(e,t){this.styling=t,this.data().getStyle()||this.data().setStyle(e=>this.style(e)),this._rafState||(this._rafState={rafId:null,pending:{deletedIds:[],updated:[],created:[]},deletedSet:new Set,updatedById:new Map,createdById:new Map});for(const t of e.deletedIds)this._rafState.deletedSet.add(t),this._rafState.updatedById.delete(t),this._rafState.createdById.delete(t);for(const t of e.updated){if(null==t||!t.id)throw new Error(\"Feature is not valid\");const e=String(t.id);this._rafState.deletedSet.has(e)||(this._rafState.createdById.has(e)?this._rafState.createdById.set(e,t):this._rafState.updatedById.set(e,t))}for(const t of e.created){if(null==t||!t.id)throw new Error(\"Feature is not valid\");const e=String(t.id);this._rafState.createdById.set(e,t),this._rafState.updatedById.delete(e)}null==this._rafState.rafId&&(this._rafState.rafId=requestAnimationFrame(()=>{if(!this._rafState)return;this._rafState.rafId=null;const e=Array.from(this._rafState.deletedSet),t=Array.from(this._rafState.updatedById.values()),r=Array.from(this._rafState.createdById.values());if(this._rafState.deletedSet.clear(),this._rafState.updatedById.clear(),this._rafState.createdById.clear(),this._hasRenderedFeatures){for(const t of e){const e=this.data().getFeatureById(t);e&&(this.data().remove(e),this.renderedFeatureIds.delete(t))}for(const e of t){if(null==e||!e.id)throw new Error(\"Feature is not valid\");const t=this.data().getFeatureById(String(e.id));if(!t)throw new Error(\"Feature could not be found by Google Maps API\");switch(t.forEachProperty((e,r)=>{t.setProperty(r,void 0)}),Object.keys(e.properties).forEach(r=>{t.setProperty(r,e.properties[r])}),e.geometry.type){case\"Point\":{const r=e.geometry.coordinates;t.setGeometry(new this._lib.Data.Point(new this._lib.LatLng(r[1],r[0])));break}case\"LineString\":{const r=e.geometry.coordinates,i=[];for(let e=0;e<r.length;e++){const[t,n]=r[e];i.push(new this._lib.LatLng(n,t))}t.setGeometry(new this._lib.Data.LineString(i));break}case\"Polygon\":{const r=e.geometry.coordinates,i=[];for(let e=0;e<r.length;e++){const t=[];for(let i=0;i<r[e].length;i++){const[n,o]=r[e][i];t.push(new this._lib.LatLng(o,n))}i.push(t)}t.setGeometry(new this._lib.Data.Polygon(i));break}}}for(const e of r)this.renderedFeatureIds.add(String(e.id)),this.data().addGeoJson(e)}else{const e=[];for(const t of r)this.renderedFeatureIds.add(String(t.id)),e.push(t);e.length&&this.data().addGeoJson({type:\"FeatureCollection\",features:e})}}))}clearLayers(){this._hasRenderedFeatures&&(this.data().forEach(e=>{const t=e.getId();this.renderedFeatureIds.has(t)&&this.data().remove(e)}),this.renderedFeatureIds=new Set)}clear(){this._currentModeCallbacks&&(this._currentModeCallbacks.onClear(),this.clearLayers()),this.data()&&this.data().setStyle(null)}getCoordinatePrecision(){return super.getCoordinatePrecision()}}export{r as TerraDrawGoogleMapsAdapter};\n//# sourceMappingURL=terra-draw-google-maps-adapter.modern.js.map\n","function t(){return t=Object.assign?Object.assign.bind():function(t){for(var e=1;e<arguments.length;e++){var i=arguments[e];for(var o in i)({}).hasOwnProperty.call(i,o)&&(t[o]=i[o])}return t},t.apply(null,arguments)}const e=\"draw\",i=\"edit\",o=\"deleteCoordinate\",n=\"insertMidpoint\";var r;!function(t){t.Commit=\"commit\",t.Provisional=\"provisional\",t.Finish=\"finish\"}(r||(r={}));const s=\"https://raw.githubusercontent.com/JamesLMilner/terra-draw/refs/heads/main/assets/markers/marker-blue.png\",a={SELECTED:\"selected\",MID_POINT:\"midPoint\",SELECTION_POINT_FEATURE_ID:\"selectionPointFeatureId\",SELECTION_POINT:\"selectionPoint\"},d={MODE:\"mode\",CURRENTLY_DRAWING:\"currentlyDrawing\",EDITED:\"edited\",CLOSING_POINT:\"closingPoint\",SNAPPING_POINT:\"snappingPoint\",COORDINATE_POINT:\"coordinatePoint\",COORDINATE_POINT_FEATURE_ID:\"coordinatePointFeatureId\",COORDINATE_POINT_IDS:\"coordinatePointIds\",PROVISIONAL_COORDINATE_COUNT:\"provisionalCoordinateCount\",COMMITTED_COORDINATE_COUNT:\"committedCoordinateCount\",MARKER:\"marker\"},h=10;function l(t){return Boolean(t&&\"object\"==typeof t&&null!==t&&!Array.isArray(t))}function u(t){return Boolean(t&&\"object\"==typeof t&&\"properties\"in t&&\"object\"==typeof t.properties&&null!==t.properties&&\"mode\"in t.properties)}function c(t){return!!function(t){return\"number\"==typeof t&&!isNaN(new Date(t).valueOf())}(t)}const p=\"Feature is not a Polygon\",g=\"Feature mode property does not match the mode being added to\";var y;!function(t){t.Drawing=\"drawing\",t.Select=\"select\",t.Static=\"static\",t.Render=\"render\"}(y||(y={}));const m={rightClick:!0,contextMenu:!1,leftClick:!0,onDragStart:!0,onDrag:!0,onDragEnd:!0};class f{get state(){return this._state}set state(t){throw new Error(\"Please use the modes lifecycle methods\")}get styles(){return this._styles}set styles(t){if(\"object\"!=typeof t)throw new Error(\"Styling must be an object\");this.onStyleChange&&this.onStyleChange([],\"styling\"),this._styles=t}registerBehaviors(t){}constructor(e,i=!1){this._state=\"unregistered\",this._styles={},this.pointerEvents=m,this.behaviors=[],this.validate=void 0,this.pointerDistance=40,this.coordinatePrecision=void 0,this.undoRedoMaxStackSize=void 0,this.onStyleChange=void 0,this.store=void 0,this.projection=\"web-mercator\",this.setDoubleClickToZoom=void 0,this.unproject=void 0,this.project=void 0,this.setCursor=void 0,this.isInitialUpdate=!1,this.type=y.Drawing,this.mode=\"base\",i?this.isInitialUpdate=!0:this.updateOptions(t({},e))}updateOptions(e){null!=e&&e.styles&&(this.styles=t({},this._styles,e.styles)),void 0!==(null==e?void 0:e.pointerDistance)&&(this.pointerDistance=e.pointerDistance),null!=e&&e.validation&&(this.validate=e&&e.validation),null!=e&&e.projection&&(this.projection=e.projection),void 0!==(null==e?void 0:e.pointerEvents)&&(this.pointerEvents=e.pointerEvents),null!=e&&e.modeName&&!0===this.isInitialUpdate&&(this.mode=e.modeName),this.isInitialUpdate=!1}allowPointerEvent(t,e){return\"boolean\"==typeof t?t:\"function\"!=typeof t||t(e)}setDrawing(){if(\"started\"!==this._state)throw new Error(\"Mode must be unregistered or stopped to start\");this._state=\"drawing\"}setStarted(){if(\"stopped\"!==this._state&&\"registered\"!==this._state&&\"drawing\"!==this._state&&\"selecting\"!==this._state)throw new Error(\"Mode must be unregistered or stopped to start\");this._state=\"started\",this.setDoubleClickToZoom(!1)}setStopped(){if(\"started\"!==this._state)throw new Error(\"Mode must be started to be stopped\");this._state=\"stopped\",this.setDoubleClickToZoom(!0)}register(t){if(\"unregistered\"!==this._state)throw new Error(\"Can not register unless mode is unregistered\");this._state=\"registered\",this.store=t.store,this.store.registerOnChange(t.onChange),this.setDoubleClickToZoom=t.setDoubleClickToZoom,this.project=t.project,this.unproject=t.unproject,this.onSelect=t.onSelect,this.onDeselect=t.onDeselect,this.setCursor=t.setCursor,this.onStyleChange=t.onChange,this.onFinish=t.onFinish,this.coordinatePrecision=t.coordinatePrecision,this.undoRedoMaxStackSize=t.undoRedoMaxStackSize,this.registerBehaviors({mode:t.mode,store:this.store,project:this.project,unproject:this.unproject,pointerDistance:this.pointerDistance,coordinatePrecision:t.coordinatePrecision,projection:this.projection,undoRedoMaxStackSize:t.undoRedoMaxStackSize})}validateFeature(t){return this.performFeatureValidation(t)}afterFeatureAdded(t){}afterFeatureUpdated(t){}performFeatureValidation(t){if(\"unregistered\"===this._state)throw new Error(\"Mode must be registered\");const e=function(t,e){let i;if(l(t))if(null==t.id)i=\"Feature has no id\";else if(\"string\"!=typeof t.id&&\"number\"!=typeof t.id)i=\"Feature must be string or number as per GeoJSON spec\";else if(e(t.id))if(l(t.geometry))if(l(t.properties))if(\"string\"==typeof t.geometry.type&&[\"Polygon\",\"LineString\",\"Point\"].includes(t.geometry.type))if(Array.isArray(t.geometry.coordinates)){if(!t.properties.mode||\"string\"!=typeof t.properties.mode)return{valid:!1,reason:\"Feature does not have a valid mode property\"}}else i=\"Feature coordinates is not an array\";else i=\"Feature is not Point, LineString or Polygon\";else i=\"Feature has no properties\";else i=\"Feature has no geometry\";else i=\"Feature must match the id strategy (default is UUID4)\";else i=\"Feature is not object\";return i?{valid:!1,reason:i}:{valid:!0}}(t,this.store.idStrategy.isValidId);if(!e.valid)return e;if(this.validate){const i=this.validate(t,{project:this.project,unproject:this.unproject,coordinatePrecision:this.coordinatePrecision,updateType:r.Provisional});return{valid:e.valid&&i.valid,reason:i.reason}}return{valid:e.valid,reason:e.reason}}validateModeFeature(t,e){const i=this.performFeatureValidation(t);return i.valid?t.properties.mode!==this.mode?{valid:!1,reason:g}:e(t):{valid:!1,reason:i.reason}}onFinish(t,e){}onDeselect(t){}onSelect(t){}onKeyDown(t){}onKeyUp(t){}undo(){}clearHistory(){}undoSize(){return 0}redoSize(){return 0}redo(){}onMouseMove(t){}onClick(t){}onDragStart(t,e){}onDrag(t,e){}onDragEnd(t,e){}getHexColorStylingValue(t,e,i){return this.getStylingValue(t,e,i)}getNumericStylingValue(t,e,i){return this.getStylingValue(t,e,i)}getUrlStylingValue(t,e,i){return this.getStylingValue(t,e,i)}getStylingValue(t,e,i){return void 0===t?e:\"function\"==typeof t?null!=(o=t(i))?o:e:t;var o}}class v extends f{constructor(...t){super(...t),this.type=y.Select}}function C(t,e){const i=t=>t*Math.PI/180,o=i(t[1]),n=i(t[0]),r=i(e[1]),s=r-o,a=i(e[0])-n,d=Math.sin(s/2)*Math.sin(s/2)+Math.cos(o)*Math.cos(r)*Math.sin(a/2)*Math.sin(a/2);return 2*Math.atan2(Math.sqrt(d),Math.sqrt(1-d))*6371e3/1e3}const P=6371008.8;function I(t){return t%360*Math.PI/180}function S(t){return t/6371.0088}function F(t){return t%(2*Math.PI)*180/Math.PI}function x(t,e=9){const i=Math.pow(10,e);return Math.round(t*i)/i}const O=57.29577951308232,M=.017453292519943295,w=6378137,E=(t,e)=>({x:0===t?0:t*M*w,y:0===e?0:Math.log(Math.tan(Math.PI/4+e*M/2))*w}),D=(t,e)=>({lng:0===t?0:O*(t/w),lat:0===e?0:(2*Math.atan(Math.exp(e/w))-Math.PI/2)*O});function k(t,e,i){const o=I(t[0]),n=I(t[1]),r=I(i),s=S(e),a=Math.asin(Math.sin(n)*Math.cos(s)+Math.cos(n)*Math.sin(s)*Math.cos(r));return[F(o+Math.atan2(Math.sin(r)*Math.sin(s)*Math.cos(n),Math.cos(s)-Math.sin(n)*Math.sin(a))),F(a)]}function _(t){const{center:e,radiusKilometers:i,coordinatePrecision:o}=t,n=t.steps?t.steps:64,r=[];for(let t=0;t<n;t++){const s=k(e,i,-360*t/n);r.push([x(s[0],o),x(s[1],o)])}return r.push(r[0]),{type:\"Feature\",geometry:{type:\"Polygon\",coordinates:[r]},properties:{}}}function b(t){let e;if(\"Polygon\"===t.geometry.type)e=t.geometry.coordinates;else{if(\"LineString\"!==t.geometry.type)throw new Error(\"Self intersects only accepts Polygons and LineStrings\");e=[t.geometry.coordinates]}const i=[];for(let t=0;t<e.length;t++)for(let i=0;i<e[t].length-1;i++)for(let o=0;o<e.length;o++)for(let r=0;r<e[o].length-1;r++)n(t,i,o,r);return i.length>0;function o(t){return t<0||t>1}function n(t,n,r,s){const a=e[t][n],d=e[t][n+1],h=e[r][s],l=e[r][s+1],u=function(t,e,i,o){if(N(t,i)||N(t,o)||N(e,i)||N(o,i))return null;const n=t[0],r=t[1],s=e[0],a=e[1],d=i[0],h=i[1],l=o[0],u=o[1],c=(n-s)*(h-u)-(r-a)*(d-l);return 0===c?null:[((n*a-r*s)*(d-l)-(n-s)*(d*u-h*l))/c,((n*a-r*s)*(h-u)-(r-a)*(d*u-h*l))/c]}(a,d,h,l);if(null===u)return;let c,p;c=d[0]!==a[0]?(u[0]-a[0])/(d[0]-a[0]):(u[1]-a[1])/(d[1]-a[1]),p=l[0]!==h[0]?(u[0]-h[0])/(l[0]-h[0]):(u[1]-h[1])/(l[1]-h[1]),o(c)||o(p)||(u.toString(),i.push(u))}}function N(t,e){return t[0]===e[0]&&t[1]===e[1]}function T(t,e){return W(t[0])<=e&&W(t[1])<=e}function R(t){return 2===t.length&&\"number\"==typeof t[0]&&\"number\"==typeof t[1]&&Infinity!==t[0]&&Infinity!==t[1]&&(i=t[0])>=-180&&i<=180&&(e=t[1])>=-90&&e<=90;var e,i}function W(t){let e=1,i=0;for(;Math.round(t*e)/e!==t;)e*=10,i++;return i}const U=\"Feature has holes\",L=\"Feature has less than 4 coordinates\",B=\"Feature has invalid coordinates\",A=\"Feature coordinates are not closed\";function z(t,e){if(\"Polygon\"!==t.geometry.type)return{valid:!1,reason:\"Feature is not a Polygon\"};if(1!==t.geometry.coordinates.length)return{valid:!1,reason:U};if(t.geometry.coordinates[0].length<4)return{valid:!1,reason:L};for(let i=0;i<t.geometry.coordinates[0].length;i++){if(!R(t.geometry.coordinates[0][i]))return{valid:!1,reason:B};if(!T(t.geometry.coordinates[0][i],e))return{valid:!1,reason:\"Feature has coordinates with excessive precision\"}}return(i=t.geometry.coordinates[0][0])[0]!==(o=t.geometry.coordinates[0][t.geometry.coordinates[0].length-1])[0]||i[1]!==o[1]?{valid:!1,reason:A}:{valid:!0};var i,o}function H(t,e){const i=z(t,e);return i.valid?b(t)?{valid:!1,reason:\"Feature intersects itself\"}:{valid:!0}:i}class G{constructor({store:t,mode:e,project:i,unproject:o,pointerDistance:n,coordinatePrecision:r,projection:s,undoRedoMaxStackSize:a}){this.store=void 0,this.mode=void 0,this.project=void 0,this.unproject=void 0,this.pointerDistance=void 0,this.coordinatePrecision=void 0,this.projection=void 0,this.undoRedoMaxStackSize=void 0,this.store=t,this.mode=e,this.project=i,this.unproject=o,this.pointerDistance=n,this.coordinatePrecision=r,this.projection=s,this.undoRedoMaxStackSize=a}}function V(t){const e=function(t){const e=t.coordinates[0];let i=0;for(let t=0;t<e.length-1;t++){const[o,n]=e[t],[r,s]=e[t+1];i+=(r-o)*(s+n)}return i<0}(t);if(!e)return{type:\"Polygon\",coordinates:[t.coordinates[0].reverse()]}}const j=\"insert-before\",K=\"insert-after\",Y=\"update\",X=\"delete\",$=\"replace\";class q extends G{constructor(t,e){super(t),this.options=void 0,this.options=e}createPoint({coordinates:t,properties:e,context:i}){if((null==i?void 0:i.updateType)!==r.Finish||this.validateGeometryWithUpdateType({geometry:{type:\"Point\",coordinates:t},properties:e,updateType:r.Finish}))return this.handleCreateFeature({geometry:{type:\"Point\",coordinates:t},properties:e})}createLineString({coordinates:t,properties:e}){return this.handleCreateFeature({geometry:{type:\"LineString\",coordinates:t},properties:e})}createPolygon({coordinates:t,properties:e,context:i}){const o=V({type:\"Polygon\",coordinates:[t]}),n={type:\"Polygon\",coordinates:o?o.coordinates:[t]};if((null==i?void 0:i.updateType)!==r.Finish||this.validateGeometryWithUpdateType({geometry:n,properties:e,updateType:r.Finish}))return this.handleCreateFeature({geometry:n,properties:e})}createGuidancePoint({coordinate:t,type:e}){return this.createGuidancePoints({coordinates:[t],type:e})[0]}createGuidancePoints({coordinates:e,type:i,additionalProperties:o}){const n=e.map((e,n)=>({type:\"Feature\",geometry:{type:\"Point\",coordinates:e},properties:t({mode:this.mode,[i]:!0},o?o(n):{})}));return this.createFeatures(n)}updatePoint({featureId:t,coordinateMutations:e,propertyMutations:i,context:o}){return this.handleMutateFeature({type:\"Point\",featureId:t,coordinateMutations:e,propertyMutations:i,context:o})}updatePolygon({featureId:t,coordinateMutations:e,context:i,propertyMutations:o}){return this.handleMutateFeature({type:\"Polygon\",featureId:t,coordinateMutations:e,propertyMutations:o,context:i})}updateLineString({featureId:t,coordinateMutations:e,context:i,propertyMutations:o}){return this.handleMutateFeature({type:\"LineString\",featureId:t,coordinateMutations:e,propertyMutations:o,context:i})}deleteFeatureIfPresent(t){t&&this.store.has(t)&&this.store.delete([t])}deleteFeaturesIfPresent(t){if(0===t.length)return;const e=t.filter(t=>this.store.has(t));e.length&&this.store.delete(e)}setDeselected(t){const e=t.filter(t=>this.store.has(t)).map(t=>({featureId:t,properties:{[a.SELECTED]:!1}}));this.updateFeatureProperties(e)}setSelected(t){const{type:e}=this.store.getGeometryCopy(t),i={featureId:t,propertyMutations:{[a.SELECTED]:!0},context:{updateType:r.Commit}};\"Polygon\"===e?this.updatePolygon(i):\"LineString\"===e?this.updateLineString(i):\"Point\"===e&&this.updatePoint(i)}updateGuidancePoints(t){this.updateFeatureGeometries(t.map(({featureId:t,coordinate:e})=>({id:t,geometry:{type:\"Point\",coordinates:e}})))}handleCreateFeature({geometry:t,properties:e}){return this.createFeatureWithGeometry({geometry:t,properties:e})}handleMutateFeature({type:e,featureId:i,coordinateMutations:o,propertyMutations:n,context:s}){if(!this.mutateFeature({type:e,featureId:i,coordinateMutations:o,propertyMutations:n,context:s.updateType===r.Finish?t({},s,{correctRightHandRule:!0}):t({},s)}))return null;const a=this.buildFeatureWithGeometry(i);return s.updateType!==r.Finish||o||this.validateGeometryWithUpdateType({geometry:a.geometry,properties:a.properties,updateType:s.updateType})?a:null}mutateFeature({type:t,featureId:e,coordinateMutations:i,propertyMutations:o,context:n}){if(!e)return!1;const r=this.store.getGeometryCopy(e),s=this.store.getPropertiesCopy(e);if(r.type!==t)throw new Error(`${t} geometries cannot be updated on features with ${r.type} geometries`);if(i){let t=this.applyCoordinateMutations(r,i);if(n.correctRightHandRule&&\"Polygon\"===t.type){const e=V(t);e&&(t=e)}if(!this.validateGeometryWithUpdateType({geometry:t,properties:s,updateType:n.updateType}))return!1;this.updateFeatureGeometries([{id:e,geometry:t}])}return o&&this.updateFeatureProperties([{featureId:e,properties:o}]),!0}applyCoordinateMutations(e,i){if(this.isReplaceMutation(i))return t({},e,{coordinates:i.coordinates});if(\"Point\"===e.type)throw new Error(\"Coordinate mutations are not supported for Point geometries\");const o=\"Polygon\"===e.type,n=o?e.coordinates[0].slice():e.coordinates.slice(),r=n.length,s=t=>{const e=t<0?r+t:t;if(e<0||e>=r)throw new RangeError(`Index ${t} (normalized to ${e}) is out of bounds`);return e},a=new Array(r).fill(void 0),d=Array.from({length:r},()=>[]),h=Array.from({length:r},()=>[]),l=[];for(const e of i){if(e.type===j||e.type===K){const t=e.index,i=t<0?r+t:t;if(i<0||i>r)throw new RangeError(`Index ${e.index} (normalized to ${i}) is out of bounds`);if(e.type===j){if(i>=r)throw new RangeError(`INSERT_BEFORE index ${e.index} (normalized to ${i}) is out of bounds for length ${r}`);d[i].push(e)}else i===r?l.push(e):h[i].push(e);continue}const i=s(e.index);a[i]=t({},e,{index:i})}const u=[];for(let t=0;t<r;t++){const e=d[t];for(const t of e)u.push(t.coordinate);const i=a[t];i?i.type===X||u.push(i.coordinate):u.push(n[t]);const o=h[t];for(const t of o)u.push(t.coordinate)}for(const t of l)u.push(t.coordinate);return t({},e,o?{coordinates:[u,...e.coordinates.slice(1)]}:{coordinates:u})}isReplaceMutation(t){return t.type===$}createFeatureWithGeometry({geometry:t,properties:e}){const[i]=this.createFeatures([{type:\"Feature\",geometry:t,properties:e}]);return{id:i,type:\"Feature\",properties:this.store.getPropertiesCopy(i),geometry:this.store.getGeometryCopy(i)}}validateGeometryWithUpdateType({geometry:t,properties:e,updateType:i}){return!this.options.validate||this.options.validate({type:\"Feature\",geometry:t,properties:e||{}},{project:this.project,unproject:this.unproject,coordinatePrecision:this.coordinatePrecision,updateType:i}).valid}buildFeatureWithGeometry(t){return{id:t,type:\"Feature\",properties:this.store.getPropertiesCopy(t),geometry:this.store.getGeometryCopy(t)}}createFeatures(t){return this.store.create(t)}updateFeatureGeometries(t){this.store.updateGeometry(t)}updateFeatureProperties(t){const e=t.map(({featureId:t,properties:e})=>Object.entries(e).map(([e,i])=>({id:t,property:e,value:i}))).flat();this.store.updateProperty(e)}}const Z={cancel:\"Escape\",finish:\"Enter\"},J={start:\"crosshair\"};class Q extends f{constructor(t){super(t,!0),this.mode=\"circle\",this.center=void 0,this.endPosition=void 0,this.segments=64,this.currentCircleId=void 0,this.keyEvents=Z,this.cursors=J,this.startingRadiusKilometers=1e-5,this.cursorMovedAfterInitialCursorDown=!1,this.drawInteraction=\"click-move\",this.drawType=void 0,this.mutateFeature=void 0,this.updateOptions(t)}updateOptions(e){super.updateOptions(e),null!=e&&e.cursors&&(this.cursors=t({},this.cursors,e.cursors)),null===(null==e?void 0:e.keyEvents)?this.keyEvents={cancel:null,finish:null}:null!=e&&e.keyEvents&&(this.keyEvents=t({},this.keyEvents,e.keyEvents)),null!=e&&e.startingRadiusKilometers&&(this.startingRadiusKilometers=e.startingRadiusKilometers),null!=e&&e.drawInteraction&&(this.drawInteraction=e.drawInteraction),null!=e&&e.segments&&(this.segments=e.segments<3?3:e.segments)}close(){if(void 0===this.currentCircleId||void 0===this.endPosition)return;if(!this.updateCircle(this.endPosition,r.Finish))return;const t=this.currentCircleId;this.cursorMovedAfterInitialCursorDown=!1,this.center=void 0,this.currentCircleId=void 0,this.drawType=void 0,\"drawing\"===this.state&&this.setStarted(),this.onFinish(t,{mode:this.mode,action:e})}beginDrawing(t,e=\"click\"){this.center=[t.lng,t.lat],this.endPosition=[t.lng,t.lat];const i=_({center:this.center,radiusKilometers:this.startingRadiusKilometers,coordinatePrecision:this.coordinatePrecision}),o=this.mutateFeature.createPolygon({coordinates:i.geometry.coordinates[0],properties:{mode:this.mode,radiusKilometers:this.startingRadiusKilometers,[d.CURRENTLY_DRAWING]:!0}});o&&(this.currentCircleId=o.id,this.cursorMovedAfterInitialCursorDown=!1,this.drawType=e,this.setDrawing())}dragDrawAllowed(){return\"click-drag\"===this.drawInteraction||\"click-move-or-drag\"===this.drawInteraction}moveDrawAllowed(){return\"click-move\"===this.drawInteraction||\"click-move-or-drag\"===this.drawInteraction}start(){this.setStarted(),this.setCursor(this.cursors.start)}stop(){this.cleanUp(),this.setStopped(),this.setCursor(\"unset\")}onClick(t){this.moveDrawAllowed()&&(\"right\"===t.button&&this.allowPointerEvent(this.pointerEvents.rightClick,t)||\"left\"===t.button&&this.allowPointerEvent(this.pointerEvents.leftClick,t)||t.isContextMenu&&this.allowPointerEvent(this.pointerEvents.contextMenu,t))&&(this.center?this.center&&void 0!==this.currentCircleId&&(this.endPosition=[t.lng,t.lat],this.close()):this.beginDrawing(t))}onMouseMove(t){this.cursorMovedAfterInitialCursorDown=!0,this.endPosition=[t.lng,t.lat],this.updateCircle(this.endPosition,r.Provisional)}onKeyDown(){}onKeyUp(t){t.key===this.keyEvents.cancel?this.cleanUp():t.key===this.keyEvents.finish&&this.close()}onDragStart(t,e){\"drawing\"!==this.state&&this.allowPointerEvent(this.pointerEvents.onDragStart,t)&&this.dragDrawAllowed()&&(this.beginDrawing(t,\"drag\"),e(!1))}onDrag(t,e){this.allowPointerEvent(this.pointerEvents.onDrag,t)&&this.dragDrawAllowed()&&\"drag\"===this.drawType&&(this.cursorMovedAfterInitialCursorDown=!0,this.endPosition=[t.lng,t.lat],this.updateCircle(this.endPosition,r.Provisional))}onDragEnd(t,e){this.allowPointerEvent(this.pointerEvents.onDragEnd,t)&&this.dragDrawAllowed()&&\"drag\"===this.drawType&&(this.endPosition=[t.lng,t.lat],this.close(),e(!0))}cleanUp(){const t=this.currentCircleId;this.center=void 0,this.currentCircleId=void 0,this.drawType=void 0,\"drawing\"===this.state&&this.setStarted(),this.mutateFeature.deleteFeatureIfPresent(t)}styleFeature(e){const i=t({},{polygonFillColor:\"#3f97e0\",polygonOutlineColor:\"#3f97e0\",polygonOutlineWidth:4,polygonOutlineOpacity:1,polygonFillOpacity:.3,pointColor:\"#3f97e0\",pointOpacity:1,pointOutlineColor:\"#ffffff\",pointOutlineOpacity:1,pointOutlineWidth:0,pointWidth:6,lineStringColor:\"#3f97e0\",lineStringWidth:4,lineStringOpacity:1,zIndex:0,markerUrl:void 0,markerHeight:void 0,markerWidth:void 0,lineStringDash:void 0});return\"Feature\"===e.type&&\"Polygon\"===e.geometry.type&&e.properties.mode===this.mode?(i.polygonFillColor=this.getHexColorStylingValue(this.styles.fillColor,i.polygonFillColor,e),i.polygonOutlineColor=this.getHexColorStylingValue(this.styles.outlineColor,i.polygonOutlineColor,e),i.polygonOutlineWidth=this.getNumericStylingValue(this.styles.outlineWidth,i.polygonOutlineWidth,e),i.polygonOutlineOpacity=this.getNumericStylingValue(this.styles.outlineOpacity,1,e),i.polygonFillOpacity=this.getNumericStylingValue(this.styles.fillOpacity,i.polygonFillOpacity,e),i.zIndex=h,i):i}validateFeature(t){return this.validateModeFeature(t,t=>H(t,this.coordinatePrecision))}updateCircle(t,i){if(void 0===this.currentCircleId||void 0===this.center)return;const o=i===r.Finish;let n,s;if(this.cursorMovedAfterInitialCursorDown)if(s=C(this.center,t),\"web-mercator\"===this.projection){const e=function(t,e){const i=1e3*C(t,e);if(0===i)return 1;const{x:o,y:n}=E(t[0],t[1]),{x:r,y:s}=E(e[0],e[1]);return Math.sqrt(Math.pow(r-o,2)+Math.pow(s-n,2))/i}(this.center,t);n=function(t){const{center:e,radiusKilometers:i,coordinatePrecision:o}=t,n=t.steps?t.steps:64,r=1e3*i,[s,a]=e,{x:d,y:h}=E(s,a),l=[];for(let t=0;t<n;t++){const e=360*t/n*Math.PI/180,i=r*Math.cos(e),s=r*Math.sin(e),[a,u]=[d+i,h+s],{lng:c,lat:p}=D(a,u);l.push([x(c,o),x(p,o)])}return l.push(l[0]),{type:\"Feature\",geometry:{type:\"Polygon\",coordinates:[l]},properties:{}}}({center:this.center,radiusKilometers:s*e,coordinatePrecision:this.coordinatePrecision,steps:this.segments})}else{if(\"globe\"!==this.projection)throw new Error(\"Invalid projection\");n=_({center:this.center,radiusKilometers:s,coordinatePrecision:this.coordinatePrecision,steps:this.segments})}const a={};return n&&s&&(a.radiusKilometers=s),o&&(a[d.CURRENTLY_DRAWING]=void 0),this.mutateFeature.updatePolygon({featureId:this.currentCircleId,coordinateMutations:n?{type:$,coordinates:n.geometry.coordinates}:void 0,propertyMutations:a,context:o?{updateType:i,action:e}:{updateType:i}})}afterFeatureUpdated(t){this.currentCircleId===t.id&&(this.cursorMovedAfterInitialCursorDown=!1,this.center=void 0,this.currentCircleId=void 0,this.drawType=void 0,\"drawing\"===this.state&&this.setStarted())}registerBehaviors(t){this.mutateFeature=new q(t,{validate:this.validate})}}const tt=(t,e)=>{const{x:i,y:o}=t,{x:n,y:r}=e,s=n-i,a=r-o;return Math.sqrt(a*a+s*s)};function et(t,e){return t[0]===e[0]&&t[1]===e[1]}class it extends G{constructor(t){super(t)}getGeometryType(t){return this.store.getGeometryCopy(t).type}coordinateAtIndexIsIdentical({featureId:t,newCoordinate:e,index:i}){const o=this.store.getGeometryCopy(t);let n;if(\"Polygon\"===o.type)n=o.coordinates[0][i];else if(\"LineString\"===o.type)n=o.coordinates[i];else{if(0!==i)throw new Error(\"Point geometries only have one coordinate at index 0\");n=o.coordinates}return et(e,n)}getGeometry(t){return this.store.getGeometryCopy(t)}getCoordinates(t){const{type:e,coordinates:i}=this.store.getGeometryCopy(t);return\"Polygon\"===e?i[0]:i}getCoordinate(t,e){const i=this.getCoordinates(t),o=e<0?i.length+e:e;if(o<0||o>=i.length)throw new RangeError(`Index ${e} (normalized to ${o}) is out of bounds`);return i[o]}getProperties(t){return this.store.getPropertiesCopy(t)}hasFeature(t){return this.store.has(t)}getAllFeatureIdsWhere(t){return this.store.copyAllWhere(t).map(({id:t})=>t)}}const ot={cancel:\"Escape\",finish:\"Enter\"},nt={start:\"crosshair\",close:\"pointer\"};class rt extends f{constructor(t){super(t,!0),this.mode=\"freehand\",this.canClose=!1,this.currentId=void 0,this.closingPointId=void 0,this.minDistance=20,this.keyEvents=ot,this.cursors=nt,this.preventPointsNearClose=!0,this.autoClose=!1,this.autoCloseTimeout=500,this.hasLeftStartingPoint=!1,this.preventNewFeature=!1,this.drawInteraction=\"click-move\",this.drawType=void 0,this.smoothing=0,this.mutateFeature=void 0,this.readFeature=void 0,this.updateOptions(t)}updateOptions(e){if(super.updateOptions(e),null!=e&&e.minDistance&&(this.minDistance=e.minDistance),void 0!==(null==e?void 0:e.smoothing)){const t=.999;this.smoothing=Math.min(Math.max(e.smoothing,0),t)}void 0!==(null==e?void 0:e.preventPointsNearClose)&&(this.preventPointsNearClose=e.preventPointsNearClose),void 0!==(null==e?void 0:e.autoClose)&&(this.autoClose=e.autoClose),null!=e&&e.autoCloseTimeout&&(this.autoCloseTimeout=e.autoCloseTimeout),null===(null==e?void 0:e.keyEvents)?this.keyEvents={cancel:null,finish:null}:null!=e&&e.keyEvents&&(this.keyEvents=t({},this.keyEvents,e.keyEvents)),null!=e&&e.cursors&&(this.cursors=t({},this.cursors,e.cursors)),null!=e&&e.drawInteraction&&(this.drawInteraction=e.drawInteraction)}moveDrawAllowed(){return\"click-move\"===this.drawInteraction||\"click-move-or-drag\"===this.drawInteraction}dragDrawAllowed(){return\"click-drag\"===this.drawInteraction||\"click-move-or-drag\"===this.drawInteraction}beginDrawing(t,e=\"click\"){const{id:i}=this.mutateFeature.createPolygon({coordinates:[[t.lng,t.lat],[t.lng,t.lat],[t.lng,t.lat],[t.lng,t.lat]],properties:{mode:this.mode,[d.CURRENTLY_DRAWING]:!0}});this.currentId=i,this.drawType=e,this.closingPointId=this.mutateFeature.createGuidancePoint({coordinate:[t.lng,t.lat],type:d.CLOSING_POINT}),this.canClose=!0,\"drawing\"!==this.state&&this.setDrawing()}addCoordinate(t){if(void 0===this.currentId||!1===this.canClose)return void this.setCursor(this.cursors.start);const[e,i]=this.readFeature.getCoordinate(this.currentId,-2),{x:o,y:n}=this.project(e,i),s=tt({x:o,y:n},{x:t.containerX,y:t.containerY}),[a,d]=this.readFeature.getCoordinate(this.currentId,0),{x:h,y:l}=this.project(a,d);if(tt({x:h,y:l},{x:t.containerX,y:t.containerY})<this.pointerDistance){if(this.autoClose&&this.hasLeftStartingPoint&&(this.preventNewFeature=!0,setTimeout(()=>{this.preventNewFeature=!1},this.autoCloseTimeout),this.close()),this.setCursor(this.cursors.close),this.preventPointsNearClose)return}else this.hasLeftStartingPoint=!0,this.setCursor(this.cursors.start);if(s<this.minDistance)return;const u=this.getSmoothedCoordinate([e,i],[t.lng,t.lat]);this.mutateFeature.updatePolygon({featureId:this.currentId,coordinateMutations:[{type:j,index:-1,coordinate:u}],context:{updateType:r.Provisional}})}getSmoothedCoordinate(t,e){if(0===this.smoothing)return e;const[i,o]=t,[n,r]=e;return[i*this.smoothing+n*(1-this.smoothing),o*this.smoothing+r*(1-this.smoothing)]}close(){if(void 0===this.currentId)return;if(!this.mutateFeature.updatePolygon({featureId:this.currentId,propertyMutations:{[d.CURRENTLY_DRAWING]:void 0},context:{updateType:r.Finish,action:e}}))return;const t=this.currentId;this.mutateFeature.deleteFeatureIfPresent(this.closingPointId),this.canClose=!1,this.currentId=void 0,this.closingPointId=void 0,this.hasLeftStartingPoint=!1,this.drawType=void 0,\"drawing\"===this.state&&this.setStarted(),this.onFinish(t,{mode:this.mode,action:e})}start(){this.setStarted(),this.setCursor(this.cursors.start)}stop(){this.cleanUp(),this.setStopped(),this.setCursor(\"unset\")}onMouseMove(t){this.moveDrawAllowed()&&\"click\"===this.drawType&&this.addCoordinate(t)}onClick(t){if(this.moveDrawAllowed()&&(\"right\"===t.button&&this.allowPointerEvent(this.pointerEvents.rightClick,t)||\"left\"===t.button&&this.allowPointerEvent(this.pointerEvents.leftClick,t)||t.isContextMenu&&this.allowPointerEvent(this.pointerEvents.contextMenu,t))){if(this.preventNewFeature)return;if(!1===this.canClose)return void this.beginDrawing(t);this.close()}}onKeyDown(){}onKeyUp(t){t.key===this.keyEvents.cancel?this.cleanUp():t.key===this.keyEvents.finish&&!0===this.canClose&&this.close()}onDragStart(t,e){\"drawing\"!==this.state&&(this.preventNewFeature||this.allowPointerEvent(this.pointerEvents.onDragStart,t)&&this.dragDrawAllowed()&&(this.beginDrawing(t,\"drag\"),e(!1)))}onDrag(t,e){this.allowPointerEvent(this.pointerEvents.onDrag,t)&&this.dragDrawAllowed()&&\"drag\"===this.drawType&&this.addCoordinate(t)}onDragEnd(t,e){this.allowPointerEvent(this.pointerEvents.onDragEnd,t)&&this.dragDrawAllowed()&&\"drag\"===this.drawType&&(this.preventNewFeature=!0,setTimeout(()=>{this.preventNewFeature=!1},this.autoCloseTimeout),this.close(),e(!0))}cleanUp(){const t=this.currentId,e=this.closingPointId;this.closingPointId=void 0,this.currentId=void 0,this.canClose=!1,this.hasLeftStartingPoint=!1,this.drawType=void 0,\"drawing\"===this.state&&this.setStarted(),this.mutateFeature.deleteFeatureIfPresent(t),this.mutateFeature.deleteFeatureIfPresent(e)}styleFeature(e){const i=t({},{polygonFillColor:\"#3f97e0\",polygonOutlineColor:\"#3f97e0\",polygonOutlineWidth:4,polygonOutlineOpacity:1,polygonFillOpacity:.3,pointColor:\"#3f97e0\",pointOpacity:1,pointOutlineColor:\"#ffffff\",pointOutlineOpacity:1,pointOutlineWidth:0,pointWidth:6,lineStringColor:\"#3f97e0\",lineStringWidth:4,lineStringOpacity:1,zIndex:0,markerUrl:void 0,markerHeight:void 0,markerWidth:void 0,lineStringDash:void 0});return\"Feature\"===e.type&&\"Polygon\"===e.geometry.type&&e.properties.mode===this.mode?(i.polygonFillColor=this.getHexColorStylingValue(this.styles.fillColor,i.polygonFillColor,e),i.polygonOutlineColor=this.getHexColorStylingValue(this.styles.outlineColor,i.polygonOutlineColor,e),i.polygonOutlineOpacity=this.getNumericStylingValue(this.styles.outlineOpacity,1,e),i.polygonOutlineWidth=this.getNumericStylingValue(this.styles.outlineWidth,i.polygonOutlineWidth,e),i.polygonFillOpacity=this.getNumericStylingValue(this.styles.fillOpacity,i.polygonFillOpacity,e),i.zIndex=h,i):\"Feature\"===e.type&&\"Point\"===e.geometry.type&&e.properties.mode===this.mode?(i.pointWidth=this.getNumericStylingValue(this.styles.closingPointWidth,i.pointWidth,e),i.pointColor=this.getHexColorStylingValue(this.styles.closingPointColor,i.pointColor,e),i.pointOpacity=this.getNumericStylingValue(this.styles.closingPointOpacity,void 0===i.pointOpacity?1:i.pointOpacity,e),i.pointOutlineColor=this.getHexColorStylingValue(this.styles.closingPointOutlineColor,i.pointOutlineColor,e),i.pointOutlineWidth=this.getNumericStylingValue(this.styles.closingPointOutlineWidth,2,e),i.pointOutlineOpacity=this.getNumericStylingValue(this.styles.closingPointOutlineOpacity,void 0===i.pointOutlineOpacity?1:i.pointOutlineOpacity,e),i.zIndex=50,i):i}validateFeature(t){return this.validateModeFeature(t,t=>z(t,this.coordinatePrecision))}afterFeatureUpdated(t){this.currentId===t.id&&(this.mutateFeature.deleteFeatureIfPresent(this.closingPointId),this.canClose=!1,this.currentId=void 0,this.closingPointId=void 0,this.hasLeftStartingPoint=!1)}registerBehaviors(t){this.readFeature=new it(t),this.mutateFeature=new q(t,{validate:this.validate})}}function st({unproject:t,point:e,pointerDistance:i}){const o=i/2,{x:n,y:r}=e;return{type:\"Feature\",properties:{},geometry:{type:\"Polygon\",coordinates:[[t(n-o,r-o),t(n+o,r-o),t(n+o,r+o),t(n-o,r+o),t(n-o,r-o)].map(t=>[t.lng,t.lat])]}}}class at extends G{constructor(t){super(t)}create(t){const{containerX:e,containerY:i}=t;return st({unproject:this.unproject,point:{x:e,y:i},pointerDistance:this.pointerDistance})}}class dt extends G{constructor(t){super(t)}measure(t,e){const{x:i,y:o}=this.project(e[0],e[1]);return tt({x:i,y:o},{x:t.containerX,y:t.containerY})}}class ht extends G{constructor(t,e,i){super(t),this.config=void 0,this.pixelDistance=void 0,this.clickBoundingBox=void 0,this.getSnappableCoordinateFirstClick=t=>this.getSnappable(t,t=>Boolean(t.properties&&t.properties.mode===this.mode)).coordinate,this.getSnappableCoordinate=(t,e)=>this.getSnappable(t,t=>Boolean(t.properties&&t.properties.mode===this.mode&&t.id!==e)).coordinate,this.config=t,this.pixelDistance=e,this.clickBoundingBox=i}getSnappable(t,e){const i=this.clickBoundingBox.create(t),o=this.store.search(i,e),n={featureId:void 0,featureCoordinateIndex:void 0,coordinate:void 0,minDist:Infinity};return o.forEach(e=>{let i;if(\"Polygon\"===e.geometry.type)i=e.geometry.coordinates[0];else{if(\"LineString\"!==e.geometry.type)return;i=e.geometry.coordinates}i.forEach((i,o)=>{const r=this.pixelDistance.measure(t,i);r<n.minDist&&r<this.pointerDistance&&(n.coordinate=i,n.minDist=r,n.featureId=e.id,n.featureCoordinateIndex=o)})}),n}}function lt(t,e,i){const o=I(t[0]),n=I(t[1]),r=I(i),s=S(e),a=Math.asin(Math.sin(n)*Math.cos(s)+Math.cos(n)*Math.sin(s)*Math.cos(r));return[F(o+Math.atan2(Math.sin(r)*Math.sin(s)*Math.cos(n),Math.cos(s)-Math.sin(n)*Math.sin(a))),F(a)]}function ut({x:t,y:e},i,o){const n=I(o);return{x:t+i*Math.cos(n),y:e+i*Math.sin(n)}}function ct(t,e){const i=I(t[0]),o=I(e[0]),n=I(t[1]),r=I(e[1]),s=Math.sin(o-i)*Math.cos(r),a=Math.cos(n)*Math.sin(r)-Math.sin(n)*Math.cos(r)*Math.cos(o-i);return F(Math.atan2(s,a))}function pt({x:t,y:e},{x:i,y:o}){const n=i-t,r=o-e;if(0===n&&0===r)return 0;let s=Math.atan2(r,n);return s*=180/Math.PI,s>180?s-=360:s<-180&&(s+=360),s}function gt(t){return(t+360)%360}function yt(t,e,i){const o=[],n=t.length;let r,s,a,d=0;for(let n=0;n<t.length&&!(e>=d&&n===t.length-1);n++){if(d>e&&0===o.length){if(r=e-d,!r)return o.push(t[n]),o;s=ct(t[n],t[n-1])-180,a=lt(t[n],r,s),o.push(a)}if(d>=i)return r=i-d,r?(s=ct(t[n],t[n-1])-180,a=lt(t[n],r,s),o.push(a),o):(o.push(t[n]),o);if(d>=e&&o.push(t[n]),n===t.length-1)return o;d+=C(t[n],t[n+1])}if(d<e&&t.length===n)throw new Error(\"Start position is beyond line\");const h=t[t.length-1];return[h,h]}function mt(t){return t*(Math.PI/180)}function ft(t){return t*(180/Math.PI)}class vt extends G{constructor(t){super(t),this.config=void 0,this.config=t}generateInsertionCoordinates(t,e,i){const o=[t,e];let n=0;for(let t=0;t<o.length-1;t++)n+=C(o[0],o[1]);if(n<=i)return o;let r=n/i-1;Number.isInteger(r)||(r=Math.floor(r)+1);const s=[];for(let t=0;t<r;t++){const e=yt(o,i*t,i*(t+1));s.push(e)}const a=[];for(let t=0;t<s.length;t++)a.push(s[t][1]);return this.limitCoordinates(a)}generateInsertionGeodesicCoordinates(t,e,i){const o=C(t,e),n=function(t,e,i){const o=[],n=mt(t[1]),r=mt(t[0]),s=mt(e[1]),a=mt(e[0]);i+=1;const d=2*Math.asin(Math.sqrt(Math.sin((s-n)/2)**2+Math.cos(n)*Math.cos(s)*Math.sin((a-r)/2)**2));if(0===d||isNaN(d))return o;for(let t=0;t<=i;t++){const e=t/i,h=Math.sin((1-e)*d)/Math.sin(d),l=Math.sin(e*d)/Math.sin(d),u=h*Math.cos(n)*Math.cos(r)+l*Math.cos(s)*Math.cos(a),c=h*Math.cos(n)*Math.sin(r)+l*Math.cos(s)*Math.sin(a),p=h*Math.sin(n)+l*Math.sin(s);if(isNaN(u)||isNaN(c)||isNaN(p))continue;const g=Math.atan2(p,Math.sqrt(u**2+c**2)),y=Math.atan2(c,u);isNaN(g)||isNaN(y)||o.push([ft(y),ft(g)])}return o.slice(1,-1)}(t,e,Math.floor(o/i));return this.limitCoordinates(n)}limitCoordinates(t){return t.map(t=>[x(t[0],this.config.coordinatePrecision),x(t[1],this.config.coordinatePrecision)])}}function Ct(t,e){if(\"LineString\"!==t.geometry.type)return{valid:!1,reason:\"Feature is not a LineString\"};if(t.geometry.coordinates.length<2)return{valid:!1,reason:\"Feature has less than 2 coordinates\"};for(let i=0;i<t.geometry.coordinates.length;i++){if(!R(t.geometry.coordinates[i]))return{valid:!1,reason:\"Feature has invalid coordinates\"};if(!T(t.geometry.coordinates[i],e))return{valid:!1,reason:\"Feature has coordinates with excessive precision\"}}return{valid:!0}}function Pt(t){return Math.sqrt(Math.pow(t[0],2)+Math.pow(t[1],2)+Math.pow(t[2],2))}function It(t,e){const i=function(t,e){const[i,o,n]=t,[r,s,a]=e;return i*r+o*s+n*a}(t,e)/(Pt(t)*Pt(e));return Math.acos(Math.min(Math.max(i,-1),1))}function St(t){const e=I(t[1]),i=I(t[0]);return[Math.cos(e)*Math.cos(i),Math.cos(e)*Math.sin(i),Math.sin(e)]}function Ft(t){const[e,i,o]=t,n=F(Math.asin(o));return[F(Math.atan2(i,e)),n]}function xt(t,e,i){const o=St(t),n=St(e),r=St(i),[s,a,d]=r,[h,l,u]=function(t,e){const[i,o,n]=t,[r,s,a]=e;return[o*a-n*s,n*r-i*a,i*s-o*r]}(o,n),c=l*d-u*a,p=u*s-h*d,g=h*a-l*s,y=g*l-p*u,m=c*u-g*h,f=p*h-c*l,v=1/Math.sqrt(Math.pow(y,2)+Math.pow(m,2)+Math.pow(f,2)),P=[y*v,m*v,f*v],I=[-1*y*v,-1*m*v,-1*f*v],S=It(o,n),F=It(o,P),x=It(n,P),O=It(o,I),M=It(n,I);let w;return w=F<O&&F<M||x<O&&x<M?P:I,It(o,w)>S||It(n,w)>S?C(Ft(w),Ft(o))<=C(Ft(w),Ft(n))?[Ft(o),!0,!1]:[Ft(n),!1,!0]:[Ft(w),!1,!1]}function Ot(t,e,i){const o=e.x-t.x,n=e.y-t.y,r=Math.max(0,Math.min(1,((i.x-t.x)*o+(i.y-t.y)*n)/(o*o+n*n)));return{x:t.x+r*o,y:t.y+r*n}}class Mt extends G{constructor(t,e,i){super(t),this.config=void 0,this.pixelDistance=void 0,this.clickBoundingBox=void 0,this.getSnappableCoordinateFirstClick=t=>{const e=this.getSnappable(t,t=>Boolean(t.properties&&t.properties.mode===this.mode));return e.coordinate?[x(e.coordinate[0],this.config.coordinatePrecision),x(e.coordinate[1],this.config.coordinatePrecision)]:void 0},this.getSnappableCoordinate=(t,e)=>{const i=this.getSnappable(t,t=>Boolean(t.properties&&t.properties.mode===this.mode&&t.id!==e));return i.coordinate?[x(i.coordinate[0],this.config.coordinatePrecision),x(i.coordinate[1],this.config.coordinatePrecision)]:void 0},this.config=t,this.pixelDistance=e,this.clickBoundingBox=i}getSnappable(t,e){const i=this.clickBoundingBox.create(t),o=this.store.search(i,e),n={featureId:void 0,featureCoordinateIndex:void 0,coordinate:void 0,minDistance:Infinity};return o.forEach(e=>{let i;if(\"Polygon\"===e.geometry.type)i=e.geometry.coordinates[0];else{if(\"LineString\"!==e.geometry.type)return;i=e.geometry.coordinates}const o=[];for(let t=0;t<i.length-1;t++)o.push([i[t],i[t+1]]);let r;const s=[t.lng,t.lat];if(\"web-mercator\"===this.config.projection?r=function(t,e){let i=[Infinity,Infinity],o=Infinity,n=0;for(let r of e){const s=r[0],a=r[1];let d,h=Infinity;const l=E(s[0],s[1]),u=E(a[0],a[1]),c=E(t[0],t[1]);if(s[0]===t[0]&&s[1]===t[1])d=s;else if(a[0]===t[0]&&a[1]===t[1])d=a;else{const{x:t,y:e}=Ot(l,u,c),{lng:i,lat:o}=D(t,e);d=[i,o]}d&&(h=tt(c,E(d[0],d[1])),h<o&&(i=d,o=h,n=e.indexOf(r)))}return Infinity===o?void 0:{coordinate:i,lineIndex:n,distance:o}}(s,o):\"globe\"===this.config.projection&&(r=function(t,e){let i=[Infinity,Infinity],o=Infinity,n=0;for(let r of e){const s=r[0],a=r[1];let d,h=Infinity;s[0]===t[0]&&s[1]===t[1]?d=s:a[0]===t[0]&&a[1]===t[1]?d=a:[d]=xt(s,a,t),d&&(h=C(t,d),h<o&&(i=d,o=h,n=e.indexOf(r)))}return Infinity===o?void 0:{coordinate:i,distance:o,lineIndex:n}}(s,o)),!r)return;const a=this.pixelDistance.measure(t,r.coordinate);a<n.minDistance&&a<this.pointerDistance&&(n.featureId=e.id,n.coordinate=[x(r.coordinate[0],this.config.coordinatePrecision),x(r.coordinate[1],this.config.coordinatePrecision)],n.featureCoordinateIndex=r.lineIndex,n.minDistance=a)}),n}}function wt(t){return Array.isArray(t)&&t.length>0&&Array.isArray(t[0])&&Array.isArray(t[0][0])}const Et=t=>wt(t)?t[0].slice(0,-1):t,Dt=t=>wt(t)?t[0]:t;class kt extends G{constructor(t,e,i,o){super(t),this.config=void 0,this.pixelDistance=void 0,this.mutateFeatureBehavior=void 0,this.readFeatureBehavior=void 0,this._startEndPoints=[],this.config=t,this.pixelDistance=e,this.mutateFeatureBehavior=i,this.readFeatureBehavior=o}get ids(){return this._startEndPoints.concat()}set ids(t){}create(t){if(this.ids.length)throw new Error(\"Opening and closing points already created\");const e=wt(t),i=Dt(t);if(e){if(i.length<=3)throw new Error(\"Requires at least 4 coordinates\");this._startEndPoints=this.mutateFeatureBehavior.createGuidancePoints({coordinates:[i[0],i[i.length-2]],type:d.CLOSING_POINT})}else this._startEndPoints=[this.mutateFeatureBehavior.createGuidancePoint({coordinate:i[i.length-2],type:d.CLOSING_POINT})]}delete(){this.ids.length&&(this.mutateFeatureBehavior.deleteFeaturesIfPresent(this.ids),this._startEndPoints=[])}updateOne(t,e){this.mutateFeatureBehavior.updateGuidancePoints([{featureId:this.ids[t],coordinate:e}])}update(t){const e=Dt(t);1!==this.ids.length?2===this.ids.length&&this.mutateFeatureBehavior.updateGuidancePoints([{featureId:this.ids[0],coordinate:e[0]},{featureId:this.ids[1],coordinate:e[e.length-3]}]):this.mutateFeatureBehavior.updateGuidancePoints([{featureId:this.ids[0],coordinate:e[e.length-2]}])}isLineStringClosingPoint(t){if(1!==this.ids.length)return{isClosing:!1};const e=this.readFeatureBehavior.getGeometry(this.ids[0]);return{isClosing:this.pixelDistance.measure(t,e.coordinates)<this.pointerDistance}}isPolygonClosingPoints(t){if(2!==this.ids.length)return{isClosing:!1,isPreviousClosing:!1};const e=this.readFeatureBehavior.getGeometry(this.ids[0]),i=this.readFeatureBehavior.getGeometry(this.ids[1]),o=this.pixelDistance.measure(t,e.coordinates),n=this.pixelDistance.measure(t,i.coordinates);return{isClosing:o<this.pointerDistance,isPreviousClosing:n<this.pointerDistance}}}class _t extends G{constructor(t,e,i){super(t),this.readFeature=void 0,this.mutateFeature=void 0,this.readFeature=e,this.mutateFeature=i}createOrUpdate({featureId:t,featureCoordinates:e}){if(!this.readFeature.hasFeature(t))return void this.deleteOrphanedPoints(t);const i=Et(e),o=this.readFeature.getProperties(t),n=o.coordinatePointIds;if(n)if(n&&n.every(t=>this.readFeature.hasFeature(t))){const e=o.coordinatePointIds,n=e.map(t=>this.readFeature.getGeometry(t).coordinates);if(e.length!==i.length){this.deleteCoordinatePoints(e);const n=this.createPoints(i,o.mode,t);this.setFeatureCoordinatePoints(t,n)}else{const t=[];i.forEach((i,o)=>{i[0]===n[o][0]&&i[1]===n[o][1]||t.push({featureId:e[o],coordinate:i})}),this.mutateFeature.updateGuidancePoints(t)}}else{const e=n.filter(t=>this.readFeature.hasFeature(t));e.length&&this.deleteCoordinatePoints(e);const r=this.createPoints(i,o.mode,t);this.setFeatureCoordinatePoints(t,r)}else{const e=this.createPoints(i,o.mode,t);this.setFeatureCoordinatePoints(t,e)}}deletePointsByFeatureIds(t){for(const e of t)this.deleteIfPresent(e)}updateOneAtIndex(t,e,i){const o=this.readFeature.getProperties(t).coordinatePointIds;o&&0!==o.length&&void 0!==o[e]&&this.mutateFeature.updateGuidancePoints([{featureId:o[e],coordinate:i}])}updateAllInPlace({featureId:t,featureCoordinates:e}){const i=this.readFeature.getProperties(t);if(!i.coordinatePointIds)return;const o=Et(e);o.length===i.coordinatePointIds.length&&this.mutateFeature.updateGuidancePoints(i.coordinatePointIds.map((t,e)=>({featureId:t,coordinate:o[e]})))}createPoints(t,e,i){return this.mutateFeature.createGuidancePoints({coordinates:t,type:d.COORDINATE_POINT,additionalProperties:t=>({mode:e,[d.COORDINATE_POINT]:!0,[d.COORDINATE_POINT_FEATURE_ID]:i,index:t})})}setFeatureCoordinatePoints(t,e,i=r.Commit){const o=this.readFeature.getGeometryType(t),n={featureId:t,propertyMutations:{[d.COORDINATE_POINT_IDS]:e},context:{updateType:i}};if(\"Polygon\"===o)this.mutateFeature.updatePolygon(n);else{if(\"LineString\"!==o)throw new Error(\"Unsupported geometry type for coordinate points\");this.mutateFeature.updateLineString(n)}}deleteCoordinatePoints(t){this.mutateFeature.deleteFeaturesIfPresent(t)}deleteIfPresent(t){if(!this.readFeature.hasFeature(t))return;const e=this.readFeature.getProperties(t).coordinatePointIds;e&&(this.deleteCoordinatePoints(e),this.setFeatureCoordinatePoints(t,null))}deleteOrphanedPoints(t){const e=this.readFeature.getAllFeatureIdsWhere(e=>e[d.COORDINATE_POINT_FEATURE_ID]===t);this.mutateFeature.deleteFeaturesIfPresent(e)}}class bt{constructor(t){this.undoHistory=[],this.redoHistory=[],this.cloneCoordinatesFunction=void 0,this.maxStackSize=void 0,this.cloneCoordinatesFunction=t=>this.cloneRecursively(t);const e=null==t?void 0:t.maxStackSize;this.maxStackSize=void 0!==e&&Number.isFinite(e)?Math.max(0,Math.floor(e)):Number.POSITIVE_INFINITY}setMaxStackSize(t){Number.isFinite(t)?(this.maxStackSize=Math.max(0,Math.floor(t)),this.trimHistoryToMax(this.undoHistory),this.trimHistoryToMax(this.redoHistory)):this.maxStackSize=Number.POSITIVE_INFINITY}trimHistoryToMax(t){if(Number.isFinite(this.maxStackSize))for(;t.length>this.maxStackSize;)t.shift()}pushUndoEntry(t){0!==this.maxStackSize&&(this.undoHistory.push(t),this.trimHistoryToMax(this.undoHistory))}pushRedoEntry(t){0!==this.maxStackSize&&(this.redoHistory.push(t),this.trimHistoryToMax(this.redoHistory))}cloneRecursively(e){return Array.isArray(e)?e.map(t=>this.cloneRecursively(t)):null!==e&&\"object\"==typeof e?t({},e):e}cloneCoordinates(t){return this.cloneCoordinatesFunction(t)}cloneEntry(t){return{featureCoordinates:this.cloneCoordinates(t.featureCoordinates),currentCoordinate:t.currentCoordinate}}clear(){this.undoHistory=[],this.redoHistory=[]}undoSize(){return this.undoHistory.length}redoSize(){return this.redoHistory.length}recordSnapshot(t){this.pushUndoEntry(this.cloneEntry(t)),this.redoHistory=[]}beginUndo(){const t=this.undoHistory.pop();if(!t)return;const e=this.cloneEntry(t);this.pushRedoEntry(e);const i=this.undoHistory[this.undoHistory.length-1];return{undoneEntry:e,previousEntry:i?this.cloneEntry(i):void 0}}takeRedo(){const t=this.redoHistory.pop();if(t)return this.cloneEntry(t)}commitRedo(t){this.pushUndoEntry(this.cloneEntry(t))}}const Nt={cancel:\"Escape\",finish:\"Enter\"},Tt={start:\"crosshair\",close:\"pointer\",dragStart:\"grabbing\",dragEnd:\"crosshair\"};class Rt extends f{constructor(t){super(t,!0),this.mode=\"linestring\",this.currentCoordinate=0,this.currentId=void 0,this.keyEvents=Nt,this.snapping=void 0,this.cursors=Tt,this.mouseMove=!1,this.insertCoordinates=void 0,this.lastCommittedCoordinates=void 0,this.snappedPointId=void 0,this.lastMouseMoveEvent=void 0,this.showCoordinatePoints=!1,this.finishOnNthCoordinate=void 0,this.editable=!1,this.editedFeatureId=void 0,this.editedFeatureCoordinateIndex=void 0,this.editedSnapType=void 0,this.editedInsertIndex=void 0,this.editedPointId=void 0,this.coordinateSnapping=void 0,this.insertPoint=void 0,this.lineSnapping=void 0,this.pixelDistance=void 0,this.clickBoundingBox=void 0,this.mutateFeature=void 0,this.readFeature=void 0,this.closingPoints=void 0,this.coordinatePoints=void 0,this.undoRedo=void 0,this.updateOptions(t)}updateOptions(e){if(super.updateOptions(e),void 0!==(null==e?void 0:e.finishOnNthCoordinate)&&Number.isInteger(e.finishOnNthCoordinate)&&e.finishOnNthCoordinate>1&&(this.finishOnNthCoordinate=Math.floor(e.finishOnNthCoordinate)),null!=e&&e.cursors&&(this.cursors=t({},this.cursors,e.cursors)),null!=e&&e.snapping&&(this.snapping=e.snapping),null===(null==e?void 0:e.keyEvents)?this.keyEvents={cancel:null,finish:null}:null!=e&&e.keyEvents&&(this.keyEvents=t({},this.keyEvents,e.keyEvents)),null!=e&&e.insertCoordinates&&(this.insertCoordinates=e.insertCoordinates),e&&e.editable&&(this.editable=e.editable),void 0!==(null==e?void 0:e.showCoordinatePoints))if(this.showCoordinatePoints=e.showCoordinatePoints,this.coordinatePoints&&!0===e.showCoordinatePoints)this.store.copyAllWhere(t=>t.mode===this.mode).forEach(t=>{this.coordinatePoints.createOrUpdate({featureId:t.id,featureCoordinates:t.geometry.coordinates})});else if(this.coordinatePoints&&!1===this.showCoordinatePoints){const t=this.store.copyAllWhere(t=>{var e;return t.mode===this.mode&&Boolean(null==(e=t[d.COORDINATE_POINT_IDS])?void 0:e.length)});this.coordinatePoints.deletePointsByFeatureIds(t.map(t=>t.id))}}shouldFinishOnCommit(t){return!!this.finishOnNthCoordinate&&Math.max(0,t.coordinates.length-1)>=this.finishOnNthCoordinate}updateSnappedCoordinate(t){const e=this.snapCoordinate(t);return e?(this.snappedPointId?this.mutateFeature.updateGuidancePoints([{featureId:this.snappedPointId,coordinate:e}]):this.snappedPointId=this.mutateFeature.createGuidancePoint({coordinate:e,type:d.SNAPPING_POINT}),t.lng=e[0],t.lat=e[1]):this.snappedPointId&&(this.mutateFeature.deleteFeatureIfPresent(this.snappedPointId),this.snappedPointId=void 0),e}close(){if(void 0===this.currentId)return;const t=this.mutateFeature.updateLineString({featureId:this.currentId,context:{updateType:r.Finish,action:e},coordinateMutations:[{type:X,index:-1}],propertyMutations:{[d.CURRENTLY_DRAWING]:void 0}});if(!t)return;this.showCoordinatePoints&&this.coordinatePoints.createOrUpdate({featureId:this.currentId,featureCoordinates:t.geometry.coordinates});const i=this.currentId;this.currentCoordinate=0,this.currentId=void 0,this.lastCommittedCoordinates=void 0,this.undoRedo.clear(),\"drawing\"===this.state&&this.setStarted(),this.closingPoints.delete(),this.snappedPointId&&(this.mutateFeature.deleteFeatureIfPresent(this.snappedPointId),this.snappedPointId=void 0),this.editedPointId&&(this.mutateFeature.deleteFeatureIfPresent(this.editedPointId),this.editedPointId=void 0,this.editedFeatureId=void 0,this.editedFeatureCoordinateIndex=void 0,this.editedInsertIndex=void 0,this.editedSnapType=void 0),this.onFinish(i,{mode:this.mode,action:e})}generateInsertCoordinates(t,e){if(!this.insertCoordinates||!this.lastCommittedCoordinates)throw new Error(\"Not able to insert coordinates\");if(\"amount\"!==this.insertCoordinates.strategy)throw new Error(\"Strategy does not exist\");const i=C(t,e)/(this.insertCoordinates.value+1);let o=[];return\"globe\"===this.projection?o=this.insertPoint.generateInsertionGeodesicCoordinates(t,e,i):\"web-mercator\"===this.projection&&(o=this.insertPoint.generateInsertionCoordinates(t,e,i)),o}createLine(t){const e=this.mutateFeature.createLineString({coordinates:[t,t],properties:{mode:this.mode,[d.CURRENTLY_DRAWING]:!0}});this.lastCommittedCoordinates=e.geometry.coordinates,this.currentId=e.id,this.currentCoordinate++,this.pushHistorySnapshot(this.currentId,this.currentCoordinate),this.setDrawing(),this.showCoordinatePoints&&this.coordinatePoints.createOrUpdate({featureId:this.currentId,featureCoordinates:e.geometry.coordinates})}firstUpdateToLine(t){if(!this.currentId)return;this.setCursor(this.cursors.close);const e=this.mutateFeature.updateLineString({featureId:this.currentId,context:{updateType:r.Commit},coordinateMutations:[{type:K,index:-1,coordinate:t}]});e&&(this.closingPoints.create(e.geometry.coordinates),this.showCoordinatePoints&&this.coordinatePoints.createOrUpdate({featureId:this.currentId,featureCoordinates:e.geometry.coordinates}),this.lastCommittedCoordinates=e.geometry.coordinates,this.currentCoordinate++,this.pushHistorySnapshot(this.currentId,this.currentCoordinate),this.shouldFinishOnCommit(e.geometry)&&this.close())}updateToLine(t,e){if(!this.currentId)return;const{isClosing:i}=this.closingPoints.isLineStringClosingPoint(t);if(i)return void this.close();this.setCursor(this.cursors.close);const o=this.mutateFeature.updateLineString({featureId:this.currentId,context:{updateType:r.Commit},coordinateMutations:[{type:K,index:-1,coordinate:e}]});o&&(this.closingPoints.update(o.geometry.coordinates),this.showCoordinatePoints&&this.coordinatePoints.createOrUpdate({featureId:this.currentId,featureCoordinates:o.geometry.coordinates}),this.lastCommittedCoordinates=o.geometry.coordinates,this.currentCoordinate++,this.pushHistorySnapshot(this.currentId,this.currentCoordinate),this.shouldFinishOnCommit(o.geometry)&&this.close())}undoSize(){return this.undoRedo.undoSize()}clearHistory(){this.undoRedo.clear()}pushHistorySnapshot(t,e){const i=this.readFeature.getGeometry(t);this.undoRedo.recordSnapshot({featureCoordinates:i.coordinates,currentCoordinate:e})}updateSnappedGuidancePointFromLastMouseMove(){this.snapping&&this.lastMouseMoveEvent?this.updateSnappedCoordinate(this.lastMouseMoveEvent):this.snappedPointId&&(this.mutateFeature.deleteFeatureIfPresent(this.snappedPointId),this.snappedPointId=void 0)}syncClosingPoints(t){this.currentCoordinate>=2?this.closingPoints.ids.length?this.closingPoints.update(t):this.closingPoints.create(t):this.closingPoints.delete()}undo(){if(\"drawing\"!==this.state||!this.currentId)return;const t=this.undoRedo.beginUndo();if(!t)return;const{previousEntry:e}=t;if(!e){const t=this.currentId;return this.currentId=void 0,this.currentCoordinate=0,this.lastCommittedCoordinates=void 0,this.closingPoints.delete(),\"drawing\"===this.state&&this.setStarted(),this.showCoordinatePoints&&this.coordinatePoints.deletePointsByFeatureIds([t]),this.mutateFeature.deleteFeatureIfPresent(t),void this.updateSnappedGuidancePointFromLastMouseMove()}const i=this.mutateFeature.updateLineString({featureId:this.currentId,coordinateMutations:{type:$,coordinates:e.featureCoordinates},propertyMutations:{[d.CURRENTLY_DRAWING]:!0},context:{updateType:r.Commit}});i&&(this.currentCoordinate=e.currentCoordinate,this.lastCommittedCoordinates=i.geometry.coordinates,this.syncClosingPoints(i.geometry.coordinates),this.showCoordinatePoints&&this.coordinatePoints.createOrUpdate({featureId:this.currentId,featureCoordinates:i.geometry.coordinates}),this.updateSnappedGuidancePointFromLastMouseMove())}redoSize(){return this.undoRedo.redoSize()}redo(){const t=this.undoRedo.takeRedo();if(t){if(this.currentId){const e=this.mutateFeature.updateLineString({featureId:this.currentId,coordinateMutations:{type:$,coordinates:t.featureCoordinates},propertyMutations:{[d.CURRENTLY_DRAWING]:!0},context:{updateType:r.Commit}});if(!e)return;this.currentCoordinate=t.currentCoordinate,this.lastCommittedCoordinates=e.geometry.coordinates,this.syncClosingPoints(e.geometry.coordinates),this.showCoordinatePoints&&this.coordinatePoints.createOrUpdate({featureId:this.currentId,featureCoordinates:e.geometry.coordinates})}else{const{id:e,geometry:i}=this.mutateFeature.createLineString({coordinates:t.featureCoordinates,properties:{mode:this.mode,[d.CURRENTLY_DRAWING]:!0}});this.currentId=e,this.currentCoordinate=t.currentCoordinate,this.lastCommittedCoordinates=i.coordinates,\"started\"===this.state&&this.setDrawing(),this.syncClosingPoints(i.coordinates),this.showCoordinatePoints&&this.coordinatePoints.createOrUpdate({featureId:e,featureCoordinates:i.coordinates})}this.undoRedo.commitRedo(t),this.updateSnappedGuidancePointFromLastMouseMove()}}registerBehaviors(t){this.insertPoint=new vt(t),this.clickBoundingBox=new at(t),this.pixelDistance=new dt(t),this.lineSnapping=new Mt(t,this.pixelDistance,this.clickBoundingBox),this.coordinateSnapping=new ht(t,this.pixelDistance,this.clickBoundingBox),this.readFeature=new it(t),this.mutateFeature=new q(t,{validate:this.validate}),this.closingPoints=new kt(t,this.pixelDistance,this.mutateFeature,this.readFeature),this.coordinatePoints=new _t(t,this.readFeature,this.mutateFeature),this.undoRedo=new bt({maxStackSize:t.undoRedoMaxStackSize})}start(){this.setStarted(),this.setCursor(this.cursors.start)}stop(){this.cleanUp(),this.setStopped(),this.setCursor(\"unset\")}onMouseMove(t){this.mouseMove=!0,this.setCursor(this.cursors.start),this.lastMouseMoveEvent=t;const e=this.updateSnappedCoordinate(t)||[t.lng,t.lat];if(void 0===this.currentId||0===this.currentCoordinate)return;const{isClosing:i}=this.closingPoints.isLineStringClosingPoint(t);i&&this.setCursor(this.cursors.close);let o=[{type:Y,index:-1,coordinate:e}];if(this.insertCoordinates){const t=this.getInsertCoordinates(e);t&&(o={type:$,coordinates:t})}const n=this.mutateFeature.updateLineString({coordinateMutations:o,featureId:this.currentId,context:{updateType:r.Provisional}});n&&this.showCoordinatePoints&&this.coordinatePoints.createOrUpdate({featureId:this.currentId,featureCoordinates:n.geometry.coordinates})}getInsertCoordinates(t){if(!this.lastCommittedCoordinates)return;const e=this.lastCommittedCoordinates[this.lastCommittedCoordinates.length-1];if(et(e,t))return;const i=this.generateInsertCoordinates(e,t);return[...this.lastCommittedCoordinates.slice(0,-1),...i,t]}onRightClick(t){if(!this.editable||\"started\"!==this.state)return;const{featureId:e,featureCoordinateIndex:n}=this.coordinateSnapping.getSnappable(t,t=>this.lineStringFilter(t));if(!e||void 0===n)return;const s=this.readFeature.getGeometry(e);let a;if(\"LineString\"!==s.type)return;if(a=s.coordinates,a.length<=2)return;const d=this.mutateFeature.updateLineString({featureId:e,coordinateMutations:[{type:X,index:n}],context:{updateType:r.Finish,action:i}});d&&this.showCoordinatePoints&&this.coordinatePoints.createOrUpdate({featureId:e,featureCoordinates:d.geometry.coordinates}),this.snappedPointId&&(this.mutateFeature.deleteFeatureIfPresent(this.snappedPointId),this.snappedPointId=void 0),this.editedPointId&&(this.mutateFeature.deleteFeatureIfPresent(this.editedPointId),this.editedPointId=void 0,this.editedFeatureId=void 0,this.editedFeatureCoordinateIndex=void 0,this.editedInsertIndex=void 0,this.editedSnapType=void 0),this.closingPoints.delete(),this.onFinish(e,{mode:this.mode,action:o})}onLeftClick(t){this.snappedPointId&&(this.mutateFeature.deleteFeatureIfPresent(this.snappedPointId),this.snappedPointId=void 0);const e=this.snapCoordinate(t)||[t.lng,t.lat];0===this.currentCoordinate?this.createLine(e):1===this.currentCoordinate&&this.currentId?this.firstUpdateToLine(e):this.currentId&&this.updateToLine(t,e)}onClick(t){void 0===this.currentId||this.readFeature.hasFeature(this.currentId)||this.cleanUp(),(\"right\"===t.button&&this.allowPointerEvent(this.pointerEvents.rightClick,t)||\"left\"===t.button&&this.allowPointerEvent(this.pointerEvents.leftClick,t)||t.isContextMenu&&this.allowPointerEvent(this.pointerEvents.contextMenu,t))&&(this.currentCoordinate>0&&!this.mouseMove&&this.onMouseMove(t),this.mouseMove=!1,\"right\"===t.button?this.onRightClick(t):\"left\"===t.button&&this.onLeftClick(t))}onKeyDown(){}onKeyUp(t){t.key===this.keyEvents.cancel&&this.cleanUp(),t.key===this.keyEvents.finish&&this.close()}onDragStart(t,e){if(!this.allowPointerEvent(this.pointerEvents.onDragStart,t))return;if(!this.editable)return;let i;if(\"started\"===this.state){const e=this.lineSnapping.getSnappable(t,t=>this.lineStringFilter(t));e.coordinate&&(this.editedSnapType=\"line\",this.editedFeatureCoordinateIndex=e.featureCoordinateIndex,this.editedFeatureId=e.featureId,i=e.coordinate);const o=this.coordinateSnapping.getSnappable(t,t=>this.lineStringFilter(t));o.coordinate&&(this.editedSnapType=\"coordinate\",this.editedFeatureCoordinateIndex=o.featureCoordinateIndex,this.editedFeatureId=o.featureId,i=o.coordinate)}this.editedFeatureId&&i&&(this.editedPointId||(this.editedPointId=this.mutateFeature.createGuidancePoint({coordinate:i,type:d.EDITED})),this.setCursor(this.cursors.dragStart),e(!1))}onDrag(t,e){if(this.allowPointerEvent(this.pointerEvents.onDrag,t)&&void 0!==this.editedFeatureId&&void 0!==this.editedFeatureCoordinateIndex){if(\"coordinate\"===this.editedSnapType||\"line\"===this.editedSnapType&&void 0!==this.editedInsertIndex){const e=this.mutateFeature.updateLineString({featureId:this.editedFeatureId,context:{updateType:r.Provisional},coordinateMutations:[{type:Y,index:this.editedFeatureCoordinateIndex,coordinate:[t.lng,t.lat]}]});if(!e)return;this.showCoordinatePoints&&(void 0!==this.editedInsertIndex?this.coordinatePoints.createOrUpdate({featureId:this.editedFeatureId,featureCoordinates:e.geometry.coordinates}):this.coordinatePoints.updateOneAtIndex(this.editedFeatureId,this.editedFeatureCoordinateIndex,[t.lng,t.lat]))}else if(\"line\"===this.editedSnapType&&void 0===this.editedInsertIndex){this.editedInsertIndex=this.editedFeatureCoordinateIndex+1;const t=this.mutateFeature.updateLineString({featureId:this.editedFeatureId,context:{updateType:r.Provisional}});if(!t)return;this.showCoordinatePoints&&this.coordinatePoints.createOrUpdate({featureId:this.editedFeatureId,featureCoordinates:t.geometry.coordinates}),this.editedFeatureCoordinateIndex++}this.snapping&&this.snappedPointId&&(this.mutateFeature.deleteFeatureIfPresent(this.snappedPointId),this.snappedPointId=void 0),this.editedPointId&&this.mutateFeature.updateGuidancePoints([{featureId:this.editedPointId,coordinate:[t.lng,t.lat]}]),this.mutateFeature.updateLineString({featureId:this.editedFeatureId,context:{updateType:r.Provisional},propertyMutations:{[d.EDITED]:!0}})}}onDragEnd(t,e){if(!this.allowPointerEvent(this.pointerEvents.onDragEnd,t))return;if(void 0===this.editedFeatureId)return;if(this.setCursor(this.cursors.dragEnd),!this.mutateFeature.updateLineString({featureId:this.editedFeatureId,propertyMutations:{[d.EDITED]:!1},context:{updateType:r.Finish,action:i}}))return;const o=this.editedFeatureId;e(!0),this.snappedPointId&&(this.mutateFeature.deleteFeatureIfPresent(this.snappedPointId),this.snappedPointId=void 0),this.editedPointId&&(this.mutateFeature.deleteFeatureIfPresent(this.editedPointId),this.editedPointId=void 0,this.editedFeatureId=void 0,this.editedFeatureCoordinateIndex=void 0,this.editedInsertIndex=void 0,this.editedSnapType=void 0),this.closingPoints.delete(),this.onFinish(o,{mode:this.mode,action:i})}cleanUp(){const t=this.currentId,e=this.snappedPointId;this.snappedPointId=void 0,this.currentId=void 0,this.currentCoordinate=0,this.lastCommittedCoordinates=void 0,this.undoRedo.clear(),\"drawing\"===this.state&&this.setStarted(),t&&this.showCoordinatePoints&&this.coordinatePoints.deletePointsByFeatureIds([t]),this.mutateFeature.deleteFeatureIfPresent(t),this.mutateFeature.deleteFeatureIfPresent(e),this.closingPoints.delete()}styleFeature(e){const i=t({},{polygonFillColor:\"#3f97e0\",polygonOutlineColor:\"#3f97e0\",polygonOutlineWidth:4,polygonOutlineOpacity:1,polygonFillOpacity:.3,pointColor:\"#3f97e0\",pointOpacity:1,pointOutlineColor:\"#ffffff\",pointOutlineOpacity:1,pointOutlineWidth:0,pointWidth:6,lineStringColor:\"#3f97e0\",lineStringWidth:4,lineStringOpacity:1,zIndex:0,markerUrl:void 0,markerHeight:void 0,markerWidth:void 0,lineStringDash:void 0});if(\"Feature\"===e.type&&\"LineString\"===e.geometry.type&&e.properties.mode===this.mode)return i.lineStringDash=this.styles.lineStringDash,i.lineStringColor=this.getHexColorStylingValue(this.styles.lineStringColor,i.lineStringColor,e),i.lineStringOpacity=this.getNumericStylingValue(this.styles.lineStringOpacity,void 0===i.lineStringOpacity?1:i.lineStringOpacity,e),i.lineStringWidth=this.getNumericStylingValue(this.styles.lineStringWidth,i.lineStringWidth,e),i.zIndex=h,i;if(\"Feature\"===e.type&&\"Point\"===e.geometry.type&&e.properties.mode===this.mode){const t=e.properties[d.COORDINATE_POINT],o=e.properties[d.CLOSING_POINT]?\"closingPoint\":e.properties[d.SNAPPING_POINT]?\"snappingPoint\":t?\"coordinatePoint\":void 0;if(!o)return i;const n={closingPoint:{width:this.styles.closingPointWidth,color:this.styles.closingPointColor,opacity:this.styles.closingPointOpacity,outlineColor:this.styles.closingPointOutlineColor,outlineWidth:this.styles.closingPointOutlineWidth,outlineOpacity:this.styles.closingPointOutlineOpacity},snappingPoint:{width:this.styles.snappingPointWidth,color:this.styles.snappingPointColor,opacity:this.styles.snappingPointOpacity,outlineColor:this.styles.snappingPointOutlineColor,outlineWidth:this.styles.snappingPointOutlineWidth,outlineOpacity:this.styles.snappingPointOutlineOpacity},coordinatePoint:{width:this.styles.coordinatePointWidth,color:this.styles.coordinatePointColor,opacity:this.styles.coordinatePointOpacity,outlineColor:this.styles.coordinatePointOutlineColor,outlineWidth:this.styles.coordinatePointOutlineWidth,outlineOpacity:this.styles.coordinatePointOutlineOpacity}};return i.pointWidth=this.getNumericStylingValue(n[o].width,i.pointWidth,e),i.pointOpacity=this.getNumericStylingValue(n[o].opacity,1,e),i.pointColor=this.getHexColorStylingValue(n[o].color,i.pointColor,e),i.pointOutlineColor=this.getHexColorStylingValue(n[o].outlineColor,\"#ffffff\",e),i.pointOutlineWidth=this.getNumericStylingValue(n[o].outlineWidth,2,e),i.pointOutlineOpacity=this.getNumericStylingValue(n[o].outlineOpacity,1,e),i.zIndex=t?20:50,i}return i}validateFeature(t){return this.validateModeFeature(t,t=>Ct(t,this.coordinatePrecision))}lineStringFilter(t){return Boolean(\"LineString\"===t.geometry.type&&t.properties&&t.properties.mode===this.mode)}snapCoordinate(t){var e,i,o;let n;if(null!=(e=this.snapping)&&e.toLine){let e;e=this.currentId?this.lineSnapping.getSnappableCoordinate(t,this.currentId):this.lineSnapping.getSnappableCoordinateFirstClick(t),e&&(n=e)}if(null!=(i=this.snapping)&&i.toCoordinate){let e;e=this.currentId?this.coordinateSnapping.getSnappableCoordinate(t,this.currentId):this.coordinateSnapping.getSnappableCoordinateFirstClick(t),e&&(n=e)}if(null!=(o=this.snapping)&&o.toCustom){const e=this.snapping.toCustom(t,{currentCoordinate:this.currentCoordinate,currentId:this.currentId,getCurrentGeometrySnapshot:this.currentId?()=>this.readFeature.getGeometry(this.currentId):()=>null,project:this.project,unproject:this.unproject});e&&(n=e)}return n}afterFeatureUpdated(t){this.showCoordinatePoints&&this.coordinatePoints.createOrUpdate({featureId:t.id,featureCoordinates:t.geometry.coordinates}),this.editedFeatureId===t.id&&this.editedPointId&&(this.mutateFeature.deleteFeatureIfPresent(this.editedPointId),this.editedPointId=void 0,this.editedFeatureId=void 0,this.editedFeatureCoordinateIndex=void 0,this.editedSnapType=void 0),this.snappedPointId&&this.lastMouseMoveEvent&&this.updateSnappedCoordinate(this.lastMouseMoveEvent),this.currentId===t.id&&(this.closingPoints.delete(),this.currentCoordinate=0,this.currentId=void 0,this.lastCommittedCoordinates=void 0,this.undoRedo.clear(),\"drawing\"===this.state&&this.setStarted())}afterFeatureAdded(t){this.showCoordinatePoints&&this.coordinatePoints.createOrUpdate({featureId:t.id,featureCoordinates:t.geometry.coordinates})}}const Wt={cancel:\"Escape\",finish:\"Enter\"},Ut={start:\"crosshair\",close:\"pointer\"};class Lt extends f{constructor(t){super(t,!0),this.mode=\"polyline\",this.currentCoordinate=0,this.currentId=void 0,this.keyEvents=Wt,this.cursors=Ut,this.mouseMove=!1,this.snapping=void 0,this.snappedPointId=void 0,this.mutateFeature=void 0,this.readFeature=void 0,this.pixelDistance=void 0,this.closingPoints=void 0,this.clickBoundingBox=void 0,this.lineSnapping=void 0,this.coordinateSnapping=void 0,this.updateOptions(t)}updateOptions(e){super.updateOptions(e),null!=e&&e.cursors&&(this.cursors=t({},this.cursors,e.cursors)),null!=e&&e.snapping&&(this.snapping=e.snapping),null===(null==e?void 0:e.keyEvents)?this.keyEvents={cancel:null,finish:null}:null!=e&&e.keyEvents&&(this.keyEvents=t({},this.keyEvents,e.keyEvents))}registerBehaviors(t){this.clickBoundingBox=new at(t),this.pixelDistance=new dt(t),this.lineSnapping=new Mt(t,this.pixelDistance,this.clickBoundingBox),this.coordinateSnapping=new ht(t,this.pixelDistance,this.clickBoundingBox),this.readFeature=new it(t),this.mutateFeature=new q(t,{validate:this.validate}),this.closingPoints=new kt(t,this.pixelDistance,this.mutateFeature,this.readFeature)}start(){this.setStarted(),this.setCursor(this.cursors.start)}stop(){this.cleanUp(),this.setStopped(),this.setCursor(\"unset\")}finishLine(){if(!this.currentId)return;if(!this.mutateFeature.updateLineString({featureId:this.currentId,context:{updateType:r.Finish,action:e},coordinateMutations:[{type:X,index:-1}],propertyMutations:{[d.CURRENTLY_DRAWING]:void 0}}))return;const t=this.currentId;this.currentCoordinate=0,this.currentId=void 0,this.closingPoints.delete(),this.mutateFeature.deleteFeatureIfPresent(this.snappedPointId),this.snappedPointId=void 0,\"drawing\"===this.state&&this.setStarted(),this.onFinish(t,{mode:this.mode,action:e})}toPolygonLikeCoordinates(t){return 0===t.length?[t]:[[...t,t[0]]]}closeAsPolygon(){if(!this.currentId)return;const t=this.readFeature.getGeometry(this.currentId).coordinates.slice(0,-1);if(t.length<3)return;const i=this.currentId,o=[...t,t[0]],n=this.mutateFeature.createPolygon({coordinates:o,properties:{mode:this.mode},context:{updateType:r.Finish,action:e}});n&&(this.mutateFeature.deleteFeatureIfPresent(i),this.currentCoordinate=0,this.currentId=void 0,this.closingPoints.delete(),this.mutateFeature.deleteFeatureIfPresent(this.snappedPointId),this.snappedPointId=void 0,\"drawing\"===this.state&&this.setStarted(),this.onFinish(n.id,{mode:this.mode,action:e}))}onMouseMove(t){if(this.mouseMove=!0,this.setCursor(this.cursors.start),this.updateSnappedCoordinate(t),!this.currentId||0===this.currentCoordinate)return;if(!this.mutateFeature.updateLineString({featureId:this.currentId,coordinateMutations:[{type:Y,index:-1,coordinate:[t.lng,t.lat]}],context:{updateType:r.Provisional}}))return;const{isClosing:e,isPreviousClosing:i}=this.closingPoints.isPolygonClosingPoints(t);(e&&this.currentCoordinate>=3||i&&this.currentCoordinate>=2)&&this.setCursor(this.cursors.close)}onLeftClick(t){this.updateSnappedCoordinate(t);const e=[t.lng,t.lat];if(0===this.currentCoordinate){const t=this.mutateFeature.createLineString({coordinates:[e,e],properties:{mode:this.mode,[d.CURRENTLY_DRAWING]:!0}});return this.currentId=t.id,this.currentCoordinate=1,void this.setDrawing()}if(!this.currentId)return;const{isClosing:i,isPreviousClosing:o}=this.closingPoints.isPolygonClosingPoints(t);if(i&&this.currentCoordinate>=3)return void this.closeAsPolygon();if(o&&this.currentCoordinate>=2)return void this.finishLine();const n=this.mutateFeature.updateLineString({featureId:this.currentId,context:{updateType:r.Commit},coordinateMutations:[{type:K,index:-1,coordinate:e}]});if(n&&(this.currentCoordinate++,this.currentCoordinate>=2)){const t=this.toPolygonLikeCoordinates(n.geometry.coordinates);0===this.closingPoints.ids.length?this.closingPoints.create(t):this.closingPoints.update(t)}}onClick(t){\"left\"===t.button&&this.allowPointerEvent(this.pointerEvents.leftClick,t)&&(this.currentCoordinate>0&&!this.mouseMove&&this.onMouseMove(t),this.mouseMove=!1,this.onLeftClick(t))}onKeyUp(t){t.key===this.keyEvents.cancel?this.cleanUp():t.key===this.keyEvents.finish&&this.finishLine()}onKeyDown(){}onDragStart(){}onDrag(){}onDragEnd(){}cleanUp(){const t=this.currentId;this.currentId=void 0,this.currentCoordinate=0,\"drawing\"===this.state&&this.setStarted(),this.mutateFeature.deleteFeatureIfPresent(t),this.mutateFeature.deleteFeatureIfPresent(this.snappedPointId),this.snappedPointId=void 0,this.closingPoints.delete()}updateSnappedCoordinate(t){const e=this.snapCoordinate(t);e?(this.snappedPointId?this.mutateFeature.updateGuidancePoints([{featureId:this.snappedPointId,coordinate:e}]):this.snappedPointId=this.mutateFeature.createGuidancePoint({coordinate:e,type:d.SNAPPING_POINT}),t.lng=e[0],t.lat=e[1]):this.snappedPointId&&(this.mutateFeature.deleteFeatureIfPresent(this.snappedPointId),this.snappedPointId=void 0)}snapCoordinate(t){var e,i,o;let n;if(null!=(e=this.snapping)&&e.toLine){let e;e=this.currentId?this.lineSnapping.getSnappableCoordinate(t,this.currentId):this.lineSnapping.getSnappableCoordinateFirstClick(t),e&&(n=e)}if(null!=(i=this.snapping)&&i.toCoordinate){let e;e=this.currentId?this.coordinateSnapping.getSnappableCoordinate(t,this.currentId):this.coordinateSnapping.getSnappableCoordinateFirstClick(t),e&&(n=e)}if(null!=(o=this.snapping)&&o.toCustom){const e=this.snapping.toCustom(t,{currentCoordinate:this.currentCoordinate,currentId:this.currentId,getCurrentGeometrySnapshot:this.currentId?()=>this.readFeature.getGeometry(this.currentId):()=>null,project:this.project,unproject:this.unproject});e&&(n=e)}return n}styleFeature(e){const i=t({},{polygonFillColor:\"#3f97e0\",polygonOutlineColor:\"#3f97e0\",polygonOutlineWidth:4,polygonOutlineOpacity:1,polygonFillOpacity:.3,pointColor:\"#3f97e0\",pointOpacity:1,pointOutlineColor:\"#ffffff\",pointOutlineOpacity:1,pointOutlineWidth:0,pointWidth:6,lineStringColor:\"#3f97e0\",lineStringWidth:4,lineStringOpacity:1,zIndex:0,markerUrl:void 0,markerHeight:void 0,markerWidth:void 0,lineStringDash:void 0});if(e.properties.mode!==this.mode)return i;if(\"LineString\"===e.geometry.type)return i.lineStringColor=this.getHexColorStylingValue(this.styles.lineStringColor,i.lineStringColor,e),i.lineStringWidth=this.getNumericStylingValue(this.styles.lineStringWidth,i.lineStringWidth,e),i.lineStringOpacity=this.getNumericStylingValue(this.styles.lineStringOpacity,1,e),i.zIndex=h,i;if(\"Polygon\"===e.geometry.type)return i.polygonFillColor=this.getHexColorStylingValue(this.styles.polygonFillColor,i.polygonFillColor,e),i.polygonFillOpacity=this.getNumericStylingValue(this.styles.polygonFillOpacity,i.polygonFillOpacity,e),i.polygonOutlineColor=this.getHexColorStylingValue(this.styles.polygonOutlineColor,i.polygonOutlineColor,e),i.polygonOutlineWidth=this.getNumericStylingValue(this.styles.polygonOutlineWidth,i.polygonOutlineWidth,e),i.polygonOutlineOpacity=this.getNumericStylingValue(this.styles.polygonOutlineOpacity,1,e),i.zIndex=h,i;if(\"Point\"===e.geometry.type){const t=!0===e.properties[d.CLOSING_POINT];if(!t&&!0!==e.properties[d.SNAPPING_POINT])return i;i.pointColor=this.getHexColorStylingValue(t?this.styles.closingPointColor:this.styles.snappingPointColor,i.pointColor,e),i.pointWidth=this.getNumericStylingValue(t?this.styles.closingPointWidth:this.styles.snappingPointWidth,i.pointWidth,e),i.pointOpacity=this.getNumericStylingValue(t?this.styles.closingPointOpacity:this.styles.snappingPointOpacity,1,e),i.pointOutlineColor=this.getHexColorStylingValue(t?this.styles.closingPointOutlineColor:this.styles.snappingPointOutlineColor,i.pointOutlineColor,e),i.pointOutlineWidth=this.getNumericStylingValue(t?this.styles.closingPointOutlineWidth:this.styles.snappingPointOutlineWidth,2,e),i.pointOutlineOpacity=this.getNumericStylingValue(t?this.styles.closingPointOutlineOpacity:this.styles.snappingPointOutlineOpacity,1,e),i.zIndex=30}return i}afterFeatureAdded(t){}afterFeatureUpdated(t){this.snappedPointId&&(this.mutateFeature.deleteFeatureIfPresent(this.snappedPointId),this.snappedPointId=void 0),this.currentId===t.id&&(this.currentCoordinate=0,this.currentId=void 0,this.closingPoints.delete(),\"drawing\"===this.state&&this.setStarted())}validateFeature(t){return this.validateModeFeature(t,t=>\"LineString\"===t.geometry.type?Ct(t,this.coordinatePrecision):\"Polygon\"===t.geometry.type?z(t,this.coordinatePrecision):{valid:!1,reason:\"Only LineString or Polygon features are valid\"})}}const Bt=\"Feature is not a Point\",At=\"Feature has invalid coordinates\",zt=\"Feature has coordinates with excessive precision\";function Ht(t,e){return\"Point\"!==t.geometry.type?{valid:!1,reason:Bt}:R(t.geometry.coordinates)?T(t.geometry.coordinates,e)?{valid:!0}:{valid:!1,reason:zt}:{valid:!1,reason:At}}class Gt extends G{constructor(t,e,i){super(t),this.pixelDistance=void 0,this.clickBoundingBox=void 0,this.pixelDistance=e,this.clickBoundingBox=i}getNearestPointFeature(t){const e=this.clickBoundingBox.create(t),i=this.store.search(e);let o,n=Infinity;for(let e=0;e<i.length;e++){const r=i[e];if(\"Point\"!==r.geometry.type||r.properties.mode!==this.mode)continue;const s=this.pixelDistance.measure(t,r.geometry.coordinates);s>n||s>this.pointerDistance||(n=s,o=r)}return o}}const Vt={create:\"crosshair\",dragStart:\"grabbing\",dragEnd:\"crosshair\"};class jt extends f{constructor(t){super(t,!0),this.mode=\"point\",this.cursors=Vt,this.editable=!1,this.editedFeatureId=void 0,this.pixelDistance=void 0,this.clickBoundingBox=void 0,this.pointSearch=void 0,this.mutateFeature=void 0,this.updateOptions(t)}updateOptions(e){super.updateOptions(e),null!=e&&e.cursors&&(this.cursors=t({},this.cursors,e.cursors)),null!=e&&e.editable&&(this.editable=e.editable)}start(){this.setStarted(),this.setCursor(this.cursors.create)}stop(){this.cleanUp(),this.setStopped(),this.setCursor(\"unset\")}onClick(t){\"right\"===t.button&&this.allowPointerEvent(this.pointerEvents.rightClick,t)||t.isContextMenu&&this.allowPointerEvent(this.pointerEvents.contextMenu,t)?this.onRightClick(t):\"left\"===t.button&&this.allowPointerEvent(this.pointerEvents.leftClick,t)&&this.onLeftClick(t)}onMouseMove(){}onKeyDown(){}onKeyUp(){}cleanUp(){this.editedFeatureId=void 0}onDragStart(t,e){if(this.allowPointerEvent(this.pointerEvents.onDragStart,t)){if(this.editable){const e=this.pointSearch.getNearestPointFeature(t);this.editedFeatureId=null==e?void 0:e.id}this.editedFeatureId&&(this.setCursor(this.cursors.dragStart),e(!1))}}onDrag(t,e){this.allowPointerEvent(this.pointerEvents.onDrag,t)&&void 0!==this.editedFeatureId&&this.mutateFeature.updatePoint({featureId:this.editedFeatureId,coordinateMutations:{type:$,coordinates:[t.lng,t.lat]},propertyMutations:{[d.EDITED]:!0},context:{updateType:r.Provisional}})}onDragEnd(t,i){if(!this.allowPointerEvent(this.pointerEvents.onDragEnd,t))return;if(void 0===this.editedFeatureId)return;if(!this.mutateFeature.updatePoint({featureId:this.editedFeatureId,propertyMutations:{mode:this.mode,[d.EDITED]:!1},context:{updateType:r.Finish,action:\"edit\"}}))return;const o=this.editedFeatureId;this.setCursor(this.cursors.dragEnd),this.editedFeatureId=void 0,i(!0),this.onFinish(o,{mode:this.mode,action:e})}registerBehaviors(t){this.pixelDistance=new dt(t),this.clickBoundingBox=new at(t),this.pointSearch=new Gt(t,this.pixelDistance,this.clickBoundingBox),this.mutateFeature=new q(t,{validate:this.validate})}styleFeature(e){const i=t({},{polygonFillColor:\"#3f97e0\",polygonOutlineColor:\"#3f97e0\",polygonOutlineWidth:4,polygonOutlineOpacity:1,polygonFillOpacity:.3,pointColor:\"#3f97e0\",pointOpacity:1,pointOutlineColor:\"#ffffff\",pointOutlineOpacity:1,pointOutlineWidth:0,pointWidth:6,lineStringColor:\"#3f97e0\",lineStringWidth:4,lineStringOpacity:1,zIndex:0,markerUrl:void 0,markerHeight:void 0,markerWidth:void 0,lineStringDash:void 0});if(\"Feature\"===e.type&&\"Point\"===e.geometry.type&&e.properties.mode===this.mode){const t=Boolean(e.id&&this.editedFeatureId===e.id);i.pointWidth=this.getNumericStylingValue(t?this.styles.editedPointWidth:this.styles.pointWidth,i.pointWidth,e),i.pointOpacity=this.getNumericStylingValue(this.styles.pointOpacity,void 0===i.pointOpacity?1:i.pointOpacity,e),i.pointColor=this.getHexColorStylingValue(t?this.styles.editedPointColor:this.styles.pointColor,i.pointColor,e),i.pointOutlineColor=this.getHexColorStylingValue(t?this.styles.editedPointOutlineColor:this.styles.pointOutlineColor,i.pointOutlineColor,e),i.pointOutlineOpacity=this.getNumericStylingValue(this.styles.pointOutlineOpacity,void 0===i.pointOutlineOpacity?1:i.pointOutlineOpacity,e),i.pointOutlineWidth=this.getNumericStylingValue(t?this.styles.editedPointOutlineWidth:this.styles.pointOutlineWidth,2,e),i.zIndex=30}return i}validateFeature(t){return this.validateModeFeature(t,t=>Ht(t,this.coordinatePrecision))}onLeftClick(t){const i=this.mutateFeature.createPoint({coordinates:[t.lng,t.lat],properties:{mode:this.mode},context:{updateType:r.Finish,action:e}});i&&this.onFinish(i.id,{mode:this.mode,action:e})}onRightClick(t){if(!this.editable)return;const e=this.pointSearch.getNearestPointFeature(t);e&&this.mutateFeature.deleteFeatureIfPresent(e.id)}afterFeatureUpdated(t){this.editedFeatureId===t.id&&(this.editedFeatureId=void 0,this.setCursor(this.cursors.create))}}const Kt={cancel:\"Escape\",finish:\"Enter\"},Yt={start:\"crosshair\",close:\"pointer\",dragStart:\"grabbing\",dragEnd:\"crosshair\"};class Xt extends f{constructor(t){super(t,!0),this.mode=\"polygon\",this.currentCoordinate=0,this.currentId=void 0,this.keyEvents=Kt,this.cursors=Yt,this.mouseMove=!1,this.showCoordinatePoints=!1,this.lastMouseMoveEvent=void 0,this.snapping=void 0,this.snappedPointId=void 0,this.editable=!1,this.editedFeatureId=void 0,this.editedFeatureCoordinateIndex=void 0,this.editedSnapType=void 0,this.editedInsertIndex=void 0,this.editedPointId=void 0,this.coordinatePoints=void 0,this.lineSnapping=void 0,this.coordinateSnapping=void 0,this.pixelDistance=void 0,this.closingPoints=void 0,this.clickBoundingBox=void 0,this.mutateFeature=void 0,this.readFeature=void 0,this.undoRedo=void 0,this.updateOptions(t)}updateOptions(e){if(super.updateOptions(e),null!=e&&e.cursors&&(this.cursors=t({},this.cursors,e.cursors)),null===(null==e?void 0:e.keyEvents)?this.keyEvents={cancel:null,finish:null}:null!=e&&e.keyEvents&&(this.keyEvents=t({},this.keyEvents,e.keyEvents)),null!=e&&e.snapping&&(this.snapping=e.snapping),void 0!==(null==e?void 0:e.editable)&&(this.editable=e.editable),void 0!==(null==e?void 0:e.pointerEvents)&&(this.pointerEvents=e.pointerEvents),void 0!==(null==e?void 0:e.showCoordinatePoints))if(this.showCoordinatePoints=e.showCoordinatePoints,this.coordinatePoints&&!0===e.showCoordinatePoints)this.store.copyAllWhere(t=>t.mode===this.mode).filter(t=>\"Polygon\"===t.geometry.type).forEach(t=>{this.coordinatePoints.createOrUpdate({featureId:t.id,featureCoordinates:t.geometry.coordinates})});else if(this.coordinatePoints&&!1===this.showCoordinatePoints){const t=this.store.copyAllWhere(t=>t.mode===this.mode&&Boolean(t[d.COORDINATE_POINT_IDS])).filter(t=>\"Polygon\"===t.geometry.type);this.coordinatePoints.deletePointsByFeatureIds(t.map(t=>t.id))}}close(){if(void 0===this.currentId)return;if(this.readFeature.getCoordinates(this.currentId).length<5)return;const t=this.mutateFeature.updatePolygon({featureId:this.currentId,coordinateMutations:[{type:X,index:-2}],propertyMutations:{[d.CURRENTLY_DRAWING]:void 0,[d.COMMITTED_COORDINATE_COUNT]:void 0,[d.PROVISIONAL_COORDINATE_COUNT]:void 0},context:{updateType:r.Finish,action:e}});if(!t)return;this.showCoordinatePoints&&this.coordinatePoints.createOrUpdate({featureId:this.currentId,featureCoordinates:t.geometry.coordinates}),\"drawing\"===this.state&&this.setStarted(),this.editedPointId&&(this.mutateFeature.deleteFeatureIfPresent(this.editedPointId),this.editedPointId=void 0),this.snappedPointId&&(this.mutateFeature.deleteFeatureIfPresent(this.snappedPointId),this.snappedPointId=void 0),this.closingPoints.delete();const i=this.currentId;this.currentCoordinate=0,this.currentId=void 0,this.undoRedo.clear(),this.onFinish(i,{mode:this.mode,action:e})}registerBehaviors(t){this.readFeature=new it(t),this.mutateFeature=new q(t,{validate:this.validate}),this.clickBoundingBox=new at(t),this.pixelDistance=new dt(t),this.lineSnapping=new Mt(t,this.pixelDistance,this.clickBoundingBox),this.coordinateSnapping=new ht(t,this.pixelDistance,this.clickBoundingBox),this.closingPoints=new kt(t,this.pixelDistance,this.mutateFeature,this.readFeature),this.coordinatePoints=new _t(t,this.readFeature,this.mutateFeature),this.undoRedo=new bt({maxStackSize:t.undoRedoMaxStackSize})}start(){this.setStarted(),this.setCursor(this.cursors.start)}stop(){this.cleanUp(),this.setStopped(),this.setCursor(\"unset\")}updateSnappedCoordinate(t){const e=this.snapCoordinate(t);e?(this.snappedPointId?this.mutateFeature.updateGuidancePoints([{featureId:this.snappedPointId,coordinate:e}]):this.snappedPointId=this.mutateFeature.createGuidancePoint({coordinate:e,type:d.SNAPPING_POINT}),t.lng=e[0],t.lat=e[1]):this.snappedPointId&&(this.mutateFeature.deleteFeatureIfPresent(this.snappedPointId),this.snappedPointId=void 0)}undoSize(){return this.undoRedo.undoSize()}clearHistory(){this.undoRedo.clear()}pushHistorySnapshot(t,e){const i=this.readFeature.getGeometry(t);this.undoRedo.recordSnapshot({featureCoordinates:i.coordinates,currentCoordinate:e})}updateSnappedGuidancePointFromLastMouseMove(){this.snapping&&this.lastMouseMoveEvent?this.updateSnappedCoordinate(this.lastMouseMoveEvent):this.snappedPointId&&(this.mutateFeature.deleteFeatureIfPresent(this.snappedPointId),this.snappedPointId=void 0)}syncClosingPoints(t){this.currentCoordinate>=3?this.closingPoints.ids.length?this.closingPoints.update(t):this.closingPoints.create(t):this.closingPoints.delete()}undo(){if(\"drawing\"!==this.state||!this.currentId)return;const t=this.undoRedo.beginUndo();if(!t)return;const{previousEntry:e}=t;if(!e){const t=this.currentId;return this.currentId=void 0,this.currentCoordinate=0,this.closingPoints.delete(),\"drawing\"===this.state&&this.setStarted(),this.showCoordinatePoints&&this.coordinatePoints.deletePointsByFeatureIds([t]),this.mutateFeature.deleteFeatureIfPresent(t),void this.updateSnappedGuidancePointFromLastMouseMove()}const i=this.mutateFeature.updatePolygon({featureId:this.currentId,coordinateMutations:{type:$,coordinates:e.featureCoordinates},propertyMutations:{[d.CURRENTLY_DRAWING]:!0,[d.COMMITTED_COORDINATE_COUNT]:e.currentCoordinate,[d.PROVISIONAL_COORDINATE_COUNT]:e.currentCoordinate},context:{updateType:r.Commit}});i&&(this.currentCoordinate=e.currentCoordinate,this.syncClosingPoints(i.geometry.coordinates),this.showCoordinatePoints&&this.coordinatePoints.createOrUpdate({featureId:this.currentId,featureCoordinates:i.geometry.coordinates}),this.updateSnappedGuidancePointFromLastMouseMove())}redoSize(){return this.undoRedo.redoSize()}redo(){const t=this.undoRedo.takeRedo();if(t){if(this.currentId){const e=this.mutateFeature.updatePolygon({featureId:this.currentId,coordinateMutations:{type:$,coordinates:t.featureCoordinates},propertyMutations:{[d.CURRENTLY_DRAWING]:!0,[d.COMMITTED_COORDINATE_COUNT]:t.currentCoordinate,[d.PROVISIONAL_COORDINATE_COUNT]:t.currentCoordinate},context:{updateType:r.Commit}});if(!e)return;this.currentCoordinate=t.currentCoordinate,this.syncClosingPoints(e.geometry.coordinates),this.showCoordinatePoints&&this.coordinatePoints.createOrUpdate({featureId:this.currentId,featureCoordinates:e.geometry.coordinates})}else{const e=this.undoRedo.cloneCoordinates(t.featureCoordinates)[0],{id:i,geometry:o}=this.mutateFeature.createPolygon({coordinates:e,properties:{mode:this.mode,[d.CURRENTLY_DRAWING]:!0,[d.COMMITTED_COORDINATE_COUNT]:t.currentCoordinate,[d.PROVISIONAL_COORDINATE_COUNT]:t.currentCoordinate}});this.currentId=i,this.currentCoordinate=t.currentCoordinate,\"started\"===this.state&&this.setDrawing(),this.syncClosingPoints(o.coordinates),this.showCoordinatePoints&&this.coordinatePoints.createOrUpdate({featureId:i,featureCoordinates:o.coordinates})}this.undoRedo.commitRedo(t),this.updateSnappedGuidancePointFromLastMouseMove()}}onMouseMove(t){if(this.mouseMove=!0,this.setCursor(this.cursors.start),this.lastMouseMoveEvent=t,this.updateSnappedCoordinate(t),void 0===this.currentId||0===this.currentCoordinate)return;const e=this.readFeature.getCoordinate(this.currentId,0),i=[t.lng,t.lat];let o;if(1===this.currentCoordinate)o=[{type:Y,index:1,coordinate:i},{type:Y,index:2,coordinate:[t.lng,t.lat]}];else if(2===this.currentCoordinate)o=[{type:Y,index:2,coordinate:i}];else{const{isClosing:n,isPreviousClosing:r}=this.closingPoints.isPolygonClosingPoints(t);r||n?(this.snappedPointId&&(this.mutateFeature.deleteFeatureIfPresent(this.snappedPointId),this.snappedPointId=void 0),this.setCursor(this.cursors.close),o=[{type:Y,index:-1,coordinate:e},{type:Y,index:-2,coordinate:e}]):o=[{type:Y,index:-2,coordinate:i},{type:Y,index:-1,coordinate:e}]}const n=this.mutateFeature.updatePolygon({featureId:this.currentId,coordinateMutations:o,propertyMutations:{[d.PROVISIONAL_COORDINATE_COUNT]:this.currentCoordinate+1},context:{updateType:r.Provisional}});n&&this.showCoordinatePoints&&this.coordinatePoints.createOrUpdate({featureId:this.currentId,featureCoordinates:n.geometry.coordinates})}snapCoordinate(t){var e,i,o;let n;if(null!=(e=this.snapping)&&e.toLine){let e;e=this.currentId?this.lineSnapping.getSnappableCoordinate(t,this.currentId):this.lineSnapping.getSnappableCoordinateFirstClick(t),e&&(n=e)}if(null!=(i=this.snapping)&&i.toCoordinate){let e;e=this.currentId?this.coordinateSnapping.getSnappableCoordinate(t,this.currentId):this.coordinateSnapping.getSnappableCoordinateFirstClick(t),e&&(n=e)}if(null!=(o=this.snapping)&&o.toCustom){const e=this.snapping.toCustom(t,{currentCoordinate:this.currentCoordinate,currentId:this.currentId,getCurrentGeometrySnapshot:this.currentId?()=>this.readFeature.getGeometry(this.currentId):()=>null,project:this.project,unproject:this.unproject});e&&(n=e)}return n}polygonFilter(t){return Boolean(\"Polygon\"===t.geometry.type&&t.properties&&t.properties.mode===this.mode)}onRightClick(t){if(!this.editable||\"started\"!==this.state)return;const{featureId:e,featureCoordinateIndex:o}=this.coordinateSnapping.getSnappable(t,t=>this.polygonFilter(t));if(!e||void 0===o)return;const n=this.readFeature.getGeometry(e);if(\"Polygon\"!==n.type)return;const s=n.coordinates[0];if(s.length<=4)return;let a;a=0===o||o===s.length-1?[{type:X,index:0},{type:X,index:-1},{type:K,index:-1,coordinate:s[1]}]:[{type:X,index:o}];const h=this.mutateFeature.updatePolygon({featureId:e,coordinateMutations:a,context:{updateType:r.Finish,action:i}});if(h){if(this.showCoordinatePoints&&this.coordinatePoints.createOrUpdate({featureId:e,featureCoordinates:h.geometry.coordinates}),this.snappedPointId&&(this.mutateFeature.deleteFeatureIfPresent(this.snappedPointId),this.snappedPointId=void 0,this.snapping)){const e=this.snapCoordinate(t);if(e){const[t]=this.mutateFeature.createGuidancePoints({type:d.SNAPPING_POINT,coordinates:[e]});this.snappedPointId=t}}this.onFinish(e,{mode:this.mode,action:i})}}onLeftClick(t){this.snappedPointId&&(this.mutateFeature.deleteFeatureIfPresent(this.snappedPointId),this.snappedPointId=void 0);let e=this.snapCoordinate(t)||[t.lng,t.lat];if(0===this.currentCoordinate){const{id:t,geometry:i}=this.mutateFeature.createPolygon({coordinates:[e,e,e,e],properties:{mode:this.mode,[d.CURRENTLY_DRAWING]:!0,[d.COMMITTED_COORDINATE_COUNT]:this.currentCoordinate+1,[d.PROVISIONAL_COORDINATE_COUNT]:this.currentCoordinate+1}});this.showCoordinatePoints&&this.coordinatePoints.createOrUpdate({featureId:t,featureCoordinates:i.coordinates}),this.currentId=t,this.currentCoordinate++,this.pushHistorySnapshot(this.currentId,this.currentCoordinate),this.setDrawing()}else if(1===this.currentCoordinate&&this.currentId){if(this.readFeature.coordinateAtIndexIsIdentical({featureId:this.currentId,newCoordinate:e,index:0}))return;const t=this.mutateFeature.updatePolygon({featureId:this.currentId,coordinateMutations:[{type:Y,index:1,coordinate:e},{type:Y,index:2,coordinate:e}],propertyMutations:{[d.COMMITTED_COORDINATE_COUNT]:this.currentCoordinate+1},context:{updateType:r.Commit}});if(!t)return;this.showCoordinatePoints&&this.coordinatePoints.createOrUpdate({featureId:this.currentId,featureCoordinates:t.geometry.coordinates}),this.currentCoordinate++,this.pushHistorySnapshot(this.currentId,this.currentCoordinate)}else if(2===this.currentCoordinate&&this.currentId){if(this.readFeature.coordinateAtIndexIsIdentical({featureId:this.currentId,newCoordinate:e,index:1}))return;const t=this.mutateFeature.updatePolygon({featureId:this.currentId,coordinateMutations:[{type:Y,index:2,coordinate:e},{type:K,index:2,coordinate:e}],propertyMutations:{[d.COMMITTED_COORDINATE_COUNT]:this.currentCoordinate+1},context:{updateType:r.Commit}});if(!t)return;this.showCoordinatePoints&&this.coordinatePoints.createOrUpdate({featureId:this.currentId,featureCoordinates:t.geometry.coordinates}),2===this.currentCoordinate&&this.closingPoints.create(t.geometry.coordinates),this.currentCoordinate++,this.pushHistorySnapshot(this.currentId,this.currentCoordinate)}else if(this.currentId){const{isClosing:i,isPreviousClosing:o}=this.closingPoints.isPolygonClosingPoints(t);if(o||i)this.close();else{if(this.readFeature.coordinateAtIndexIsIdentical({featureId:this.currentId,newCoordinate:e,index:this.currentCoordinate-1}))return;const t=this.mutateFeature.updatePolygon({featureId:this.currentId,coordinateMutations:[{type:j,index:-1,coordinate:e}],propertyMutations:{[d.COMMITTED_COORDINATE_COUNT]:this.currentCoordinate+1},context:{updateType:r.Commit}});if(!t)return;this.showCoordinatePoints&&this.coordinatePoints.createOrUpdate({featureId:this.currentId,featureCoordinates:t.geometry.coordinates}),this.currentCoordinate++,this.pushHistorySnapshot(this.currentId,this.currentCoordinate),this.closingPoints.ids.length&&this.closingPoints.update(t.geometry.coordinates)}}}onClick(t){this.currentCoordinate>0&&!this.mouseMove&&this.onMouseMove(t),this.mouseMove=!1,\"right\"===t.button&&this.allowPointerEvent(this.pointerEvents.rightClick,t)||t.isContextMenu&&this.allowPointerEvent(this.pointerEvents.contextMenu,t)?this.onRightClick(t):\"left\"===t.button&&this.allowPointerEvent(this.pointerEvents.leftClick,t)&&this.onLeftClick(t)}onKeyUp(t){t.key===this.keyEvents.cancel?this.cleanUp():t.key===this.keyEvents.finish&&this.close()}onKeyDown(){}onDragStart(t,e){if(!this.allowPointerEvent(this.pointerEvents.onDragStart,t))return;if(!this.editable)return;let i;if(\"started\"===this.state){const e=this.lineSnapping.getSnappable(t,t=>this.polygonFilter(t));e.coordinate&&(this.editedSnapType=\"line\",this.editedFeatureCoordinateIndex=e.featureCoordinateIndex,this.editedFeatureId=e.featureId,i=e.coordinate);const o=this.coordinateSnapping.getSnappable(t,t=>this.polygonFilter(t));o.coordinate&&(this.editedSnapType=\"coordinate\",this.editedFeatureCoordinateIndex=o.featureCoordinateIndex,this.editedFeatureId=o.featureId,i=o.coordinate)}this.editedFeatureId&&i&&(this.editedPointId||(this.editedPointId=this.mutateFeature.createGuidancePoint({coordinate:i,type:d.EDITED})),this.setCursor(this.cursors.dragStart),e(!1))}onDrag(t,e){if(!this.allowPointerEvent(this.pointerEvents.onDrag,t))return;if(void 0===this.editedFeatureId||void 0===this.editedFeatureCoordinateIndex)return;const i=this.readFeature.getGeometry(this.editedFeatureId),o=[t.lng,t.lat];let n=[];if(\"coordinate\"===this.editedSnapType||\"line\"===this.editedSnapType&&void 0!==this.editedInsertIndex?n=0===this.editedFeatureCoordinateIndex||this.editedFeatureCoordinateIndex===i.coordinates[0].length-1?[{type:Y,index:0,coordinate:o},{type:Y,index:-1,coordinate:o}]:[{type:Y,index:this.editedFeatureCoordinateIndex,coordinate:o}]:\"line\"===this.editedSnapType&&void 0===this.editedInsertIndex&&(this.editedInsertIndex=this.editedFeatureCoordinateIndex+1,n=[{type:j,index:this.editedInsertIndex,coordinate:o}],this.editedFeatureCoordinateIndex++),0===n.length)return;const s=this.mutateFeature.updatePolygon({featureId:this.editedFeatureId,coordinateMutations:n,propertyMutations:{[d.EDITED]:!0},context:{updateType:r.Provisional}});s&&(this.showCoordinatePoints&&(this.editedInsertIndex?this.coordinatePoints.createOrUpdate({featureId:this.editedFeatureId,featureCoordinates:s.geometry.coordinates}):this.coordinatePoints.updateOneAtIndex(this.editedFeatureId,this.editedFeatureCoordinateIndex,s.geometry.coordinates[0][this.editedFeatureCoordinateIndex])),this.snapping&&this.snappedPointId&&(this.mutateFeature.deleteFeatureIfPresent(this.snappedPointId),this.snappedPointId=void 0),this.editedPointId&&this.mutateFeature.updateGuidancePoints([{featureId:this.editedPointId,coordinate:o}]))}onDragEnd(t,e){if(!this.allowPointerEvent(this.pointerEvents.onDragEnd,t))return;if(void 0===this.editedFeatureId)return;if(this.setCursor(this.cursors.dragEnd),!this.mutateFeature.updatePolygon({featureId:this.editedFeatureId,propertyMutations:{[d.EDITED]:!1},context:{updateType:r.Finish,action:i}}))return;const o=this.editedFeatureId;this.editedPointId&&(this.mutateFeature.deleteFeatureIfPresent(this.editedPointId),this.editedPointId=void 0),this.snappedPointId&&(this.mutateFeature.deleteFeatureIfPresent(this.snappedPointId),this.snappedPointId=void 0),this.editedFeatureId=void 0,this.editedFeatureCoordinateIndex=void 0,this.editedInsertIndex=void 0,this.editedSnapType=void 0,e(!0),this.onFinish(o,{mode:this.mode,action:i})}cleanUp(){const t=this.currentId,e=this.snappedPointId,i=this.editedPointId;this.currentId=void 0,this.snappedPointId=void 0,this.editedPointId=void 0,this.editedFeatureId=void 0,this.editedFeatureCoordinateIndex=void 0,this.editedInsertIndex=void 0,this.editedSnapType=void 0,this.currentCoordinate=0,this.undoRedo.clear(),\"drawing\"===this.state&&this.setStarted(),t&&this.coordinatePoints.deletePointsByFeatureIds([t]),this.mutateFeature.deleteFeatureIfPresent(t),this.mutateFeature.deleteFeatureIfPresent(i),this.mutateFeature.deleteFeatureIfPresent(e),this.closingPoints.ids.length&&this.closingPoints.delete()}styleFeature(e){const i=t({},{polygonFillColor:\"#3f97e0\",polygonOutlineColor:\"#3f97e0\",polygonOutlineWidth:4,polygonOutlineOpacity:1,polygonFillOpacity:.3,pointColor:\"#3f97e0\",pointOpacity:1,pointOutlineColor:\"#ffffff\",pointOutlineOpacity:1,pointOutlineWidth:0,pointWidth:6,lineStringColor:\"#3f97e0\",lineStringWidth:4,lineStringOpacity:1,zIndex:0,markerUrl:void 0,markerHeight:void 0,markerWidth:void 0,lineStringDash:void 0});if(e.properties.mode===this.mode){if(\"Polygon\"===e.geometry.type)return i.polygonFillColor=this.getHexColorStylingValue(this.styles.fillColor,i.polygonFillColor,e),i.polygonOutlineColor=this.getHexColorStylingValue(this.styles.outlineColor,i.polygonOutlineColor,e),i.polygonOutlineWidth=this.getNumericStylingValue(this.styles.outlineWidth,i.polygonOutlineWidth,e),i.polygonFillOpacity=this.getNumericStylingValue(this.styles.fillOpacity,i.polygonFillOpacity,e),i.polygonOutlineOpacity=this.getNumericStylingValue(this.styles.outlineOpacity,1,e),i.zIndex=h,i;if(\"Point\"===e.geometry.type){const t=e.properties[d.EDITED],o=e.properties[d.COORDINATE_POINT],n=t?\"editedPoint\":e.properties[d.CLOSING_POINT]?\"closingPoint\":e.properties[d.SNAPPING_POINT]?\"snappingPoint\":o?\"coordinatePoint\":void 0;if(!n)return i;const r={editedPoint:{width:this.styles.editedPointOutlineWidth,color:this.styles.editedPointColor,opacity:this.styles.editedPointOpacity,outlineColor:this.styles.editedPointOutlineColor,outlineWidth:this.styles.editedPointOutlineWidth,outlineOpacity:this.styles.editedPointOutlineOpacity},closingPoint:{width:this.styles.closingPointWidth,color:this.styles.closingPointColor,opacity:this.styles.closingPointOpacity,outlineColor:this.styles.closingPointOutlineColor,outlineWidth:this.styles.closingPointOutlineWidth,outlineOpacity:this.styles.closingPointOutlineOpacity},snappingPoint:{width:this.styles.snappingPointWidth,color:this.styles.snappingPointColor,opacity:this.styles.snappingPointOpacity,outlineColor:this.styles.snappingPointOutlineColor,outlineWidth:this.styles.snappingPointOutlineWidth,outlineOpacity:this.styles.snappingPointOutlineOpacity},coordinatePoint:{width:this.styles.coordinatePointWidth,color:this.styles.coordinatePointColor,opacity:this.styles.coordinatePointOpacity,outlineColor:this.styles.coordinatePointOutlineColor,outlineWidth:this.styles.coordinatePointOutlineWidth,outlineOpacity:this.styles.coordinatePointOutlineOpacity}};return i.pointWidth=this.getNumericStylingValue(r[n].width,i.pointWidth,e),i.pointOpacity=this.getNumericStylingValue(r[n].opacity,1,e),i.pointColor=this.getHexColorStylingValue(r[n].color,i.pointColor,e),i.pointOutlineColor=this.getHexColorStylingValue(r[n].outlineColor,i.pointOutlineColor,e),i.pointOutlineOpacity=this.getNumericStylingValue(r[n].outlineOpacity,1,e),i.pointOutlineWidth=this.getNumericStylingValue(r[n].outlineWidth,2,e),i.zIndex=t?40:o?20:30,i}}return i}afterFeatureAdded(t){this.showCoordinatePoints&&this.coordinatePoints.createOrUpdate({featureId:t.id,featureCoordinates:t.geometry.coordinates})}afterFeatureUpdated(t){this.showCoordinatePoints&&this.coordinatePoints.createOrUpdate({featureId:t.id,featureCoordinates:t.geometry.coordinates}),this.editedFeatureId===t.id&&this.editedPointId&&(this.mutateFeature.deleteFeatureIfPresent(this.editedPointId),this.editedPointId=void 0,this.editedFeatureId=void 0,this.editedFeatureCoordinateIndex=void 0,this.editedSnapType=void 0),this.snappedPointId&&this.lastMouseMoveEvent&&this.updateSnappedCoordinate(this.lastMouseMoveEvent),this.currentId===t.id&&(this.currentCoordinate=0,this.currentId=void 0,this.undoRedo.clear(),this.closingPoints.delete(),\"drawing\"===this.state&&this.setStarted())}validateFeature(t){return this.validateModeFeature(t,t=>z(t,this.coordinatePrecision))}}const $t={cancel:\"Escape\",finish:\"Enter\"},qt={start:\"crosshair\"};class Zt extends f{constructor(t){super(t,!0),this.mode=\"rectangle\",this.startPosition=void 0,this.endPosition=void 0,this.currentRectangleId=void 0,this.keyEvents=$t,this.cursors=qt,this.drawInteraction=\"click-move\",this.drawType=void 0,this.mutateFeature=void 0,this.readFeature=void 0,this.updateOptions(t)}updateOptions(e){super.updateOptions(e),null!=e&&e.cursors&&(this.cursors=t({},this.cursors,e.cursors)),null===(null==e?void 0:e.keyEvents)?this.keyEvents={cancel:null,finish:null}:null!=e&&e.keyEvents&&(this.keyEvents=t({},this.keyEvents,e.keyEvents)),null!=e&&e.drawInteraction&&(this.drawInteraction=e.drawInteraction)}updateRectangle(t,i){if(!this.startPosition||!this.currentRectangleId)return;const o=i===r.Finish;return this.mutateFeature.updatePolygon({featureId:this.currentRectangleId,coordinateMutations:[{type:Y,index:1,coordinate:[t[0],this.startPosition[1]]},{type:Y,index:2,coordinate:t},{type:Y,index:3,coordinate:[this.startPosition[0],t[1]]}],propertyMutations:o?{[d.CURRENTLY_DRAWING]:void 0}:{},context:o?{updateType:i,action:e}:{updateType:i}})}close(){if(!this.currentRectangleId||!this.endPosition)return;if(!this.updateRectangle(this.endPosition,r.Finish))return;const t=this.currentRectangleId;this.startPosition=void 0,this.currentRectangleId=void 0,this.drawType=void 0,\"drawing\"===this.state&&this.setStarted(),this.onFinish(t,{mode:this.mode,action:e})}beginDrawing(t,e=\"click\"){this.startPosition=[t.lng,t.lat],this.endPosition=[t.lng,t.lat];const i=this.mutateFeature.createPolygon({coordinates:[[t.lng,t.lat],[t.lng,t.lat],[t.lng,t.lat],[t.lng,t.lat],[t.lng,t.lat]],properties:{mode:this.mode,[d.CURRENTLY_DRAWING]:!0}});this.currentRectangleId=i.id,this.drawType=e,this.setDrawing()}moveDrawAllowed(){return\"click-move\"===this.drawInteraction||\"click-move-or-drag\"===this.drawInteraction}dragDrawAllowed(){return\"click-drag\"===this.drawInteraction||\"click-move-or-drag\"===this.drawInteraction}start(){this.setStarted(),this.setCursor(this.cursors.start)}stop(){this.cleanUp(),this.setStopped(),this.setCursor(\"unset\")}onClick(t){this.moveDrawAllowed()&&(\"right\"===t.button&&this.allowPointerEvent(this.pointerEvents.rightClick,t)||\"left\"===t.button&&this.allowPointerEvent(this.pointerEvents.leftClick,t)||t.isContextMenu&&this.allowPointerEvent(this.pointerEvents.contextMenu,t))&&(this.startPosition?(this.endPosition=[t.lng,t.lat],this.close()):this.beginDrawing(t))}onMouseMove(t){this.endPosition=[t.lng,t.lat],this.updateRectangle(this.endPosition,r.Provisional)}onKeyDown(){}onKeyUp(t){t.key===this.keyEvents.cancel?this.cleanUp():t.key===this.keyEvents.finish&&this.close()}onDragStart(t,e){\"drawing\"!==this.state&&this.allowPointerEvent(this.pointerEvents.onDragStart,t)&&this.dragDrawAllowed()&&(this.beginDrawing(t,\"drag\"),e(!1))}onDrag(t,e){this.allowPointerEvent(this.pointerEvents.onDrag,t)&&this.dragDrawAllowed()&&\"drag\"===this.drawType&&(this.endPosition=[t.lng,t.lat],this.updateRectangle(this.endPosition,r.Provisional))}onDragEnd(t,e){this.allowPointerEvent(this.pointerEvents.onDragEnd,t)&&this.dragDrawAllowed()&&\"drag\"===this.drawType&&(this.endPosition=[t.lng,t.lat],this.close(),e(!0))}cleanUp(){const t=this.currentRectangleId;this.startPosition=void 0,this.currentRectangleId=void 0,this.drawType=void 0,\"drawing\"===this.state&&this.setStarted(),this.mutateFeature.deleteFeatureIfPresent(t)}styleFeature(e){const i=t({},{polygonFillColor:\"#3f97e0\",polygonOutlineColor:\"#3f97e0\",polygonOutlineWidth:4,polygonOutlineOpacity:1,polygonFillOpacity:.3,pointColor:\"#3f97e0\",pointOpacity:1,pointOutlineColor:\"#ffffff\",pointOutlineOpacity:1,pointOutlineWidth:0,pointWidth:6,lineStringColor:\"#3f97e0\",lineStringWidth:4,lineStringOpacity:1,zIndex:0,markerUrl:void 0,markerHeight:void 0,markerWidth:void 0,lineStringDash:void 0});return\"Feature\"===e.type&&\"Polygon\"===e.geometry.type&&e.properties.mode===this.mode?(i.polygonFillColor=this.getHexColorStylingValue(this.styles.fillColor,i.polygonFillColor,e),i.polygonOutlineColor=this.getHexColorStylingValue(this.styles.outlineColor,i.polygonOutlineColor,e),i.polygonOutlineOpacity=this.getNumericStylingValue(this.styles.outlineOpacity,1,e),i.polygonOutlineWidth=this.getNumericStylingValue(this.styles.outlineWidth,i.polygonOutlineWidth,e),i.polygonFillOpacity=this.getNumericStylingValue(this.styles.fillOpacity,i.polygonFillOpacity,e),i.zIndex=h,i):i}validateFeature(t){return this.validateModeFeature(t,t=>H(t,this.coordinatePrecision))}afterFeatureUpdated(t){this.currentRectangleId===t.id&&(this.startPosition=void 0,this.currentRectangleId=void 0,this.drawType=void 0,\"drawing\"===this.state&&this.setStarted())}registerBehaviors(t){this.readFeature=new it(t),this.mutateFeature=new q(t,{validate:this.validate})}}class Jt extends f{constructor(t){if(!t.modeName)throw new Error(\"Mode name is required for TerraDrawRenderMode\");super(t,!0),this.type=y.Render,this.mode=\"render\",this.updateOptions(t)}updateOptions(t){super.updateOptions(t)}registerBehaviors(t){this.mode=t.mode}start(){this.setStarted()}stop(){this.setStopped()}onKeyUp(){}onKeyDown(){}onClick(){}onDragStart(){}onDrag(){}onDragEnd(){}onMouseMove(){}cleanUp(){}styleFeature(t){return{pointColor:this.getHexColorStylingValue(this.styles.pointColor,\"#3f97e0\",t),pointWidth:this.getNumericStylingValue(this.styles.pointWidth,6,t),pointOpacity:this.getNumericStylingValue(this.styles.pointOpacity,1,t),pointOutlineColor:this.getHexColorStylingValue(this.styles.pointOutlineColor,\"#ffffff\",t),pointOutlineWidth:this.getNumericStylingValue(this.styles.pointOutlineWidth,0,t),pointOutlineOpacity:this.getNumericStylingValue(this.styles.pointOutlineOpacity,1,t),polygonFillColor:this.getHexColorStylingValue(this.styles.polygonFillColor,\"#3f97e0\",t),polygonFillOpacity:this.getNumericStylingValue(this.styles.polygonFillOpacity,.3,t),polygonOutlineColor:this.getHexColorStylingValue(this.styles.polygonOutlineColor,\"#3f97e0\",t),polygonOutlineWidth:this.getNumericStylingValue(this.styles.polygonOutlineWidth,4,t),lineStringWidth:this.getNumericStylingValue(this.styles.lineStringWidth,4,t),lineStringColor:this.getHexColorStylingValue(this.styles.lineStringColor,\"#3f97e0\",t),lineStringOpacity:this.getNumericStylingValue(this.styles.lineStringOpacity,1,t),zIndex:this.getNumericStylingValue(this.styles.zIndex,0,t),lineStringDash:void 0}}validateFeature(t){const e=super.validateFeature(t);if(e.valid){const e=t,i=Ht(e,this.coordinatePrecision).valid||z(e,this.coordinatePrecision).valid||Ct(e,this.coordinatePrecision).valid;return i?{valid:!0}:{valid:i,reason:\"Feature is not a valid Point, Polygon or LineString feature\"}}return e}}function Qt(t,e){const i=t,o=e,n=I(i[1]),r=I(o[1]);let s=I(o[0]-i[0]);s>Math.PI&&(s-=2*Math.PI),s<-Math.PI&&(s+=2*Math.PI);const a=Math.log(Math.tan(r/2+Math.PI/4)/Math.tan(n/2+Math.PI/4)),d=(F(Math.atan2(s,a))+360)%360;return d>180?-(360-d):d}function te(t,e,i){let o=e;e<0&&(o=-Math.abs(o));const n=o/P,r=t[0]*Math.PI/180,s=I(t[1]),a=I(i),d=n*Math.cos(a);let h=s+d;Math.abs(h)>Math.PI/2&&(h=h>0?Math.PI-h:-Math.PI-h);const l=Math.log(Math.tan(h/2+Math.PI/4)/Math.tan(s/2+Math.PI/4)),u=Math.abs(l)>1e-11?d/l:Math.cos(s),c=[(180*(r+n*Math.sin(a)/u)/Math.PI+540)%360-180,180*h/Math.PI];return c[0]+=c[0]-t[0]>180?-360:t[0]-c[0]>180?360:0,c}function ee(t,e,i,o,n){const r=o(t[0],t[1]),s=o(e[0],e[1]),{lng:a,lat:d}=n((r.x+s.x)/2,(r.y+s.y)/2);return[x(a,i),x(d,i)]}function ie(t,e,i){const o=te(t,1e3*C(t,e)/2,Qt(t,e));return[x(o[0],i),x(o[1],i)]}function oe({featureCoords:t,precision:e,unproject:i,project:o,projection:n}){const r=[];for(let s=0;s<t.length-1;s++){let a;if(\"web-mercator\"===n)a=ee(t[s],t[s+1],e,o,i);else{if(\"globe\"!==n)throw new Error(\"Invalid projection\");a=ie(t[s],t[s+1],e)}r.push(a)}return r}class ne extends G{constructor(t,e,i,o,n,r){super(t),this.config=void 0,this.selectionPointBehavior=void 0,this.coordinatePointBehavior=void 0,this.mutateFeature=void 0,this.readFeature=void 0,this.pixelDistance=void 0,this._midPoints=[],this.config=t,this.selectionPointBehavior=e,this.coordinatePointBehavior=i,this.mutateFeature=o,this.readFeature=n,this.pixelDistance=r}getMidpointConfig(t){return{featureCoords:t,precision:this.coordinatePrecision,project:this.config.project,unproject:this.config.unproject,projection:this.config.projection}}get ids(){return this._midPoints.concat()}set ids(t){}getNearestMidPoint(t){let e,i=Infinity;return this.ids.forEach(o=>{const n=this.readFeature.getGeometry(o),r=this.pixelDistance.measure(t,n.coordinates);r<this.pointerDistance&&r<i&&(i=r,e=o)}),e}insert({featureId:t,midPointId:e}){const i=this.readFeature.getGeometry(e),{midPointFeatureId:o,midPointSegment:n}=this.readFeature.getProperties(e),s=this.readFeature.getGeometry(o),a={featureId:o,coordinateMutations:[{type:K,index:n,coordinate:i.coordinates}],context:{updateType:r.Commit}};let h=null;if(\"Polygon\"===s.type)h=this.mutateFeature.updatePolygon(a);else{if(\"LineString\"!==s.type)throw new Error(\"Midpoints can only be added to polygons or linestrings\");h=this.mutateFeature.updateLineString(a)}if(!h)throw new Error(\"Failed to insert midpoint coordinate\");const l=h.geometry.coordinates;this.readFeature.getProperties(t)[d.COORDINATE_POINT_IDS]&&this.coordinatePointBehavior.createOrUpdate({featureId:t,featureCoordinates:l}),this.mutateFeature.deleteFeaturesIfPresent([...this.selectionPointBehavior.ids,...this._midPoints]),this.create({featureCoordinates:l,featureId:o}),this.selectionPointBehavior.create({featureCoordinates:l,featureId:t})}create({featureCoordinates:t,featureId:e}){if(!this.readFeature.hasFeature(e))throw new Error(\"Store does not have feature with this id\");const i=Dt(t),o=oe(this.getMidpointConfig(i));this._midPoints=this.mutateFeature.createGuidancePoints({additionalProperties:t=>({mode:this.mode,midPointSegment:t,midPointFeatureId:e,[a.MID_POINT]:!0}),coordinates:o,type:a.MID_POINT})}delete(){this._midPoints.length&&(this.mutateFeature.deleteFeaturesIfPresent(this._midPoints),this._midPoints=[])}updateAllInPlace({featureCoordinates:t}){if(0===this._midPoints.length)return;const e=Dt(t),i=oe(this.getMidpointConfig(e));this.mutateFeature.updateGuidancePoints(this._midPoints.map((t,e)=>({featureId:t,coordinate:i[e]})))}updateOneAtIndex(t,e){if(t<0&&(t=this._midPoints.length+t),void 0===this._midPoints[t])return;const i=Dt(e),o=oe(this.getMidpointConfig(i));this.mutateFeature.updateGuidancePoints([{featureId:this._midPoints[t],coordinate:o[t]}])}}class re extends G{constructor(t,e){super(t),this.mutateFeature=void 0,this._selectionPoints=[],this.mutateFeature=e}get ids(){return this._selectionPoints.concat()}set ids(t){}create({featureId:t,featureCoordinates:e}){const i=Et(e);this._selectionPoints=this.mutateFeature.createGuidancePoints({coordinates:i,type:a.SELECTION_POINT,additionalProperties:e=>({[a.SELECTION_POINT_FEATURE_ID]:t,index:e})})}delete(){this.ids.length&&(this.mutateFeature.deleteFeaturesIfPresent(this.ids),this._selectionPoints=[])}updateAllInPlace({featureCoordinates:t}){if(0===this._selectionPoints.length)return;const e=Et(t);e.length===this._selectionPoints.length&&this.mutateFeature.updateGuidancePoints(this._selectionPoints.map((t,i)=>({featureId:t,coordinate:e[i]})))}updateOneAtIndex(t,e){void 0!==this._selectionPoints[t]&&this.mutateFeature.updateGuidancePoints([{featureId:this._selectionPoints[t],coordinate:e}])}}function se(t,e){let i=!1;for(let s=0,a=e.length;s<a;s++){const a=e[s];for(let e=0,s=a.length,d=s-1;e<s;d=e++)(n=a[e])[1]>(o=t)[1]!=(r=a[d])[1]>o[1]&&o[0]<(r[0]-n[0])*(o[1]-n[1])/(r[1]-n[1])+n[0]&&(i=!i)}var o,n,r;return i}const ae=(t,e,i)=>{const o=t=>t*t,n=(t,e)=>o(t.x-e.x)+o(t.y-e.y);return Math.sqrt(((t,e,i)=>{const o=n(e,i);if(0===o)return n(t,e);let r=((t.x-e.x)*(i.x-e.x)+(t.y-e.y)*(i.y-e.y))/o;return r=Math.max(0,Math.min(1,r)),n(t,{x:e.x+r*(i.x-e.x),y:e.y+r*(i.y-e.y)})})(t,e,i))};class de extends G{constructor(t,e,i){super(t),this.config=void 0,this.createClickBoundingBox=void 0,this.pixelDistance=void 0,this.config=t,this.createClickBoundingBox=e,this.pixelDistance=i}find(t,e){let i,o,n,r=Infinity,s=Infinity;const d=this.createClickBoundingBox.create(t),h=this.store.search(d);for(let d=0;d<h.length;d++){const l=h[d],u=l.geometry;if(\"Point\"===u.type){if(l.properties.selectionPoint||l.properties.coordinatePoint||!e&&l.properties[a.MID_POINT])continue;const o=this.pixelDistance.measure(t,u.coordinates);!l.properties[a.MID_POINT]&&o<this.pointerDistance&&o<r&&(r=o,i=l)}else if(\"LineString\"===u.type){if(i)continue;for(let e=0;e<u.coordinates.length-1;e++){const i=u.coordinates[e],n=u.coordinates[e+1],r=ae({x:t.containerX,y:t.containerY},this.project(i[0],i[1]),this.project(n[0],n[1]));r<this.pointerDistance&&r<s&&(s=r,o=l)}}else if(\"Polygon\"===u.type){if(i||o)continue;se([t.lng,t.lat],u.coordinates)&&(n=l)}}return{clickedFeature:i||o||n}}}class he extends G{constructor(t,e,i,o,n,r,s){super(t),this.config=void 0,this.featuresAtCursorEvent=void 0,this.selectionPoints=void 0,this.midPoints=void 0,this.coordinatePoints=void 0,this.readFeature=void 0,this.mutateFeature=void 0,this.draggedFeatureId=null,this.dragPosition=void 0,this.config=t,this.featuresAtCursorEvent=e,this.selectionPoints=i,this.midPoints=o,this.coordinatePoints=n,this.readFeature=r,this.mutateFeature=s}startDragging(t,e){this.draggedFeatureId=e,this.dragPosition=[t.lng,t.lat]}stopDragging(){this.draggedFeatureId=null,this.dragPosition=void 0}isDragging(){return null!==this.draggedFeatureId}canDrag(t,e){const{clickedFeature:i}=this.featuresAtCursorEvent.find(t,!0);return!(!i||i.id!==e)}drag(t){if(!this.draggedFeatureId)return;const e=this.readFeature.getGeometry(this.draggedFeatureId),i=[t.lng,t.lat];if(\"Polygon\"===e.type||\"LineString\"===e.type){let o,n;if(\"Polygon\"===e.type?(o=e.coordinates[0],n=o.length-1):(o=e.coordinates,n=o.length),!this.dragPosition)return!1;for(let t=0;t<n;t++){const e=o[t];let n,r;if(\"web-mercator\"===this.config.projection){const t=E(this.dragPosition[0],this.dragPosition[1]),o=E(i[0],i[1]),s=E(e[0],e[1]),a={x:t.x-o.x,y:t.y-o.y},d=s.x-a.x,h=s.y-a.y,{lng:l,lat:u}=D(d,h);n=l,r=u}else{const t=[this.dragPosition[0]-i[0],this.dragPosition[1]-i[1]];n=e[0]-t[0],r=e[1]-t[1]}if(n=x(n,this.config.coordinatePrecision),r=x(r,this.config.coordinatePrecision),n>180||n<-180||r>90||r<-90)return!1;o[t]=[n,r]}\"Polygon\"===e.type&&(o[o.length-1]=[o[0][0],o[0][1]]);const s=this.draggedFeatureId;let a=null;if(\"Polygon\"===e.type)a=this.mutateFeature.updatePolygon({featureId:s,coordinateMutations:{type:$,coordinates:[o]},context:{updateType:r.Provisional}});else{if(\"LineString\"!==e.type)return;a=this.mutateFeature.updateLineString({featureId:s,coordinateMutations:{type:$,coordinates:o},context:{updateType:r.Provisional}})}if(!a)return!1;const d=a.geometry.coordinates;this.midPoints.updateAllInPlace({featureCoordinates:d}),this.selectionPoints.updateAllInPlace({featureCoordinates:d}),this.coordinatePoints.updateAllInPlace({featureId:s,featureCoordinates:d}),this.dragPosition=[t.lng,t.lat]}else\"Point\"===e.type&&(this.mutateFeature.updatePoint({featureId:this.draggedFeatureId,coordinateMutations:{type:$,coordinates:i},context:{updateType:r.Provisional}}),this.dragPosition=[t.lng,t.lat])}}class le extends G{constructor(t,e,i,o,n,r,s,a,d){super(t),this.config=void 0,this.pixelDistance=void 0,this.selectionPoints=void 0,this.midPoints=void 0,this.coordinatePoints=void 0,this.coordinateSnapping=void 0,this.lineSnapping=void 0,this.readFeature=void 0,this.mutateFeature=void 0,this.draggedCoordinate={id:null,index:-1},this.config=t,this.pixelDistance=e,this.selectionPoints=i,this.midPoints=o,this.coordinatePoints=n,this.coordinateSnapping=r,this.lineSnapping=s,this.readFeature=a,this.mutateFeature=d}getClosestCoordinate(t,e){const i={dist:Infinity,index:-1,isFirstOrLastPolygonCoord:!1};let o;if(\"LineString\"===e.type)o=e.coordinates;else{if(\"Polygon\"!==e.type)return i;o=e.coordinates[0]}for(let n=0;n<o.length;n++){const r=this.pixelDistance.measure(t,o[n]);if(r<this.pointerDistance&&r<i.dist){const t=\"Polygon\"===e.type&&(n===o.length-1||0===n);i.dist=r,i.index=t?0:n,i.isFirstOrLastPolygonCoord=t}}return i}getDraggable(t,e){const i=this.readFeature.getGeometry(e);return this.getClosestCoordinate(t,i)}getDraggableIndex(t,e){const i=this.readFeature.getGeometry(e),o=this.getClosestCoordinate(t,i);return-1===o.index?-1:o.index}snapCoordinate(t,e,i){let o=[t.lng,t.lat];const n=t=>Boolean(t.properties&&t.properties.mode===i.properties.mode&&t.id!==this.draggedCoordinate.id);if(null!=e&&e.toLine){let e;e=this.lineSnapping.getSnappable(t,n).coordinate,e&&(o=e)}if(e.toCoordinate){let e;e=this.coordinateSnapping.getSnappable(t,n).coordinate,e&&(o=e)}if(null!=e&&e.toCustom){let n;n=e.toCustom(t,{currentCoordinate:this.draggedCoordinate.index,currentId:i.id,getCurrentGeometrySnapshot:i.id?()=>this.readFeature.getGeometry(i.id):()=>null,project:this.project,unproject:this.unproject}),n&&(o=n)}return o}drag(t,e,i){const o=this.draggedCoordinate.id;if(null===o)return!1;const n=this.draggedCoordinate.index,s=this.readFeature.getGeometry(o),a=this.readFeature.getProperties(o),d=\"LineString\"===s.type?s.coordinates:s.coordinates[0],h=\"Polygon\"===s.type&&(n===d.length-1||0===n),l=this.snapCoordinate(t,i,{type:\"Feature\",id:o,geometry:s,properties:a});if(t.lng>180||t.lng<-180||t.lat>90||t.lat<-90)return!1;if(h){const t=d.length-1;d[0]=l,d[t]=l}else d[n]=l;if(\"Point\"!==s.type&&!e&&b({type:\"Feature\",geometry:s,properties:{}}))return!1;const u=o;let c=null;return\"Polygon\"===s.type?c=this.mutateFeature.updatePolygon({featureId:u,coordinateMutations:{type:$,coordinates:[d]},context:{updateType:r.Provisional}}):\"LineString\"===s.type&&(c=this.mutateFeature.updateLineString({featureId:u,coordinateMutations:{type:$,coordinates:d},context:{updateType:r.Provisional}})),!!c&&(this.midPoints.updateOneAtIndex(n>0?n-1:-1,d),this.midPoints.updateOneAtIndex(n,d),this.selectionPoints.updateOneAtIndex(n,l),this.coordinatePoints.updateOneAtIndex(u,n,l),!0)}isDragging(){return null!==this.draggedCoordinate.id}startDragging(t,e){this.draggedCoordinate={id:t,index:e}}stopDragging(){this.draggedCoordinate={id:null,index:-1}}}function ue(t){let e=0,i=0,o=0;return(\"Polygon\"===t.geometry.type?t.geometry.coordinates[0].slice(0,-1):t.geometry.coordinates).forEach(t=>{e+=t[0],i+=t[1],o++},!0),[e/o,i/o]}const ce=(t,e)=>{if(0===e||360===e||-360===e)return t;const i=.017453292519943295*e,o=(\"Polygon\"===t.geometry.type?t.geometry.coordinates[0]:t.geometry.coordinates).map(([t,e])=>E(t,e)),n=o.reduce((t,e)=>({x:t.x+e.x,y:t.y+e.y}),{x:0,y:0});n.x/=o.length,n.y/=o.length;const r=o.map(t=>({x:n.x+(t.x-n.x)*Math.cos(i)-(t.y-n.y)*Math.sin(i),y:n.y+(t.x-n.x)*Math.sin(i)+(t.y-n.y)*Math.cos(i)})).map(({x:t,y:e})=>[D(t,e).lng,D(t,e).lat]);return\"Polygon\"===t.geometry.type?t.geometry.coordinates[0]=r:t.geometry.coordinates=r,t};function pe(t){const e=(\"Polygon\"===t.geometry.type?t.geometry.coordinates[0]:t.geometry.coordinates).map(t=>{const{x:e,y:i}=E(t[0],t[1]);return[e,i]});return\"Polygon\"===t.geometry.type?function(t){let e=0,i=0,o=0;const n=t.length;for(let r=0;r<n-1;r++){const[n,s]=t[r],[a,d]=t[r+1],h=n*d-a*s;e+=h,i+=(n+a)*h,o+=(s+d)*h}return e/=2,i/=6*e,o/=6*e,{x:i,y:o}}(e):function(t){const e=t.length;let i=0,o=0;for(let n=0;n<e;n++){const[e,r]=t[n];i+=e,o+=r}return{x:i/e,y:o/e}}(e)}class ge extends G{constructor(t,e,i,o,n,r){super(t),this.config=void 0,this.selectionPoints=void 0,this.midPoints=void 0,this.coordinatePoints=void 0,this.readFeature=void 0,this.mutateFeature=void 0,this.lastBearing=void 0,this.selectedGeometry=void 0,this.selectedGeometryCentroid=void 0,this.selectedGeometryWebMercatorCentroid=void 0,this.config=t,this.selectionPoints=e,this.midPoints=i,this.coordinatePoints=o,this.readFeature=n,this.mutateFeature=r}reset(){this.lastBearing=void 0,this.selectedGeometry=void 0,this.selectedGeometryWebMercatorCentroid=void 0,this.selectedGeometryCentroid=void 0}rotate(t,e){this.selectedGeometry||(this.selectedGeometry=this.readFeature.getGeometry(e));const i=this.selectedGeometry;if(\"Polygon\"!==i.type&&\"LineString\"!==i.type)return;const o=[t.lng,t.lat];let n;const s={type:\"Feature\",geometry:i,properties:{}};if(\"web-mercator\"===this.config.projection){this.selectedGeometryWebMercatorCentroid||(this.selectedGeometryWebMercatorCentroid=pe(s));const e=E(t.lng,t.lat);if(n=pt(this.selectedGeometryWebMercatorCentroid,e),0===n)return;if(!this.lastBearing)return void(this.lastBearing=n);ce(s,-(this.lastBearing-n))}else{if(\"globe\"!==this.config.projection)throw new Error(\"Unsupported projection\");if(this.selectedGeometryCentroid||(this.selectedGeometryCentroid=ue({type:\"Feature\",geometry:i,properties:{}})),n=Qt(this.selectedGeometryCentroid,o),!this.lastBearing)return void(this.lastBearing=n+180);!function(t,e){if(0===e||360===e||-360===e)return t;const i=ue(t);(\"Polygon\"===t.geometry.type?t.geometry.coordinates[0]:t.geometry.coordinates).forEach(t=>{const o=Qt(i,t)+e,n=function(t,e){t[0]+=t[0]-e[0]>180?-360:e[0]-t[0]>180?360:0;const i=P,o=e[1]*Math.PI/180,n=t[1]*Math.PI/180,r=n-o;let s=Math.abs(t[0]-e[0])*Math.PI/180;s>Math.PI&&(s-=2*Math.PI);const a=Math.log(Math.tan(n/2+Math.PI/4)/Math.tan(o/2+Math.PI/4)),d=Math.abs(a)>1e-11?r/a:Math.cos(o);return Math.sqrt(r*r+d*d*s*s)*i}(i,t),r=te(i,n,o);t[0]=r[0],t[1]=r[1]})}(s,-(this.lastBearing-(n+180)))}const a=\"Polygon\"===i.type?i.coordinates[0]:i.coordinates;a.forEach(t=>{t[0]=x(t[0],this.coordinatePrecision),t[1]=x(t[1],this.coordinatePrecision)});const d={featureId:e,coordinateMutations:{type:$,coordinates:\"Polygon\"===i.type?[a]:a},context:{updateType:r.Provisional}};let h=null;if(\"Polygon\"===s.geometry.type)h=this.mutateFeature.updatePolygon(d);else{if(\"LineString\"!==s.geometry.type)return;h=this.mutateFeature.updateLineString(d)}if(!h)return!1;const l=h.geometry.coordinates;this.midPoints.updateAllInPlace({featureCoordinates:l}),this.selectionPoints.updateAllInPlace({featureCoordinates:l}),this.coordinatePoints.updateAllInPlace({featureId:e,featureCoordinates:l}),\"web-mercator\"===this.projection?this.lastBearing=n:\"globe\"===this.projection&&(this.lastBearing=n+180)}}class ye extends G{constructor(t,e){super(t),this.config=void 0,this.dragCoordinateResizeBehavior=void 0,this.config=t,this.dragCoordinateResizeBehavior=e}scale(t,e){if(!this.dragCoordinateResizeBehavior.isDragging()){const i=this.dragCoordinateResizeBehavior.getDraggableIndex(t,e);this.dragCoordinateResizeBehavior.startDragging(e,i)}this.dragCoordinateResizeBehavior.drag(t,\"center-fixed\")}reset(){this.dragCoordinateResizeBehavior.stopDragging()}}function me({coordinates:t,originX:e,originY:i,xScale:o,yScale:n}){1===o&&1===n||t.forEach(t=>{const{x:r,y:s}=E(t[0],t[1]),a=e+(r-e)*o,d=i+(s-i)*n,{lng:h,lat:l}=D(a,d);t[0]=h,t[1]=l})}class fe extends G{constructor(t,e,i,o,n,r,s){super(t),this.config=void 0,this.pixelDistance=void 0,this.selectionPoints=void 0,this.midPoints=void 0,this.coordinatePoints=void 0,this.readFeature=void 0,this.mutateFeature=void 0,this.minimumScale=1e-4,this.draggedCoordinate={id:null,index:-1},this.boundingBoxMaps={opposite:{0:4,1:5,2:6,3:7,4:0,5:1,6:2,7:3}},this.config=t,this.pixelDistance=e,this.selectionPoints=i,this.midPoints=o,this.coordinatePoints=n,this.readFeature=r,this.mutateFeature=s}getClosestCoordinate(t,e){const i={dist:Infinity,index:-1,isFirstOrLastPolygonCoord:!1};let o;if(\"LineString\"===e.type)o=e.coordinates;else{if(\"Polygon\"!==e.type)return i;o=e.coordinates[0]}for(let n=0;n<o.length;n++){const r=this.pixelDistance.measure(t,o[n]);if(r<this.pointerDistance&&r<i.dist){const t=\"Polygon\"===e.type&&(n===o.length-1||0===n);i.dist=r,i.index=t?0:n,i.isFirstOrLastPolygonCoord=t}}return i}isValidDragWebMercator(t,e,i){switch(t){case 0:if(e<=0||i>=0)return!1;break;case 1:if(i>=0)return!1;break;case 2:if(e>=0||i>=0)return!1;break;case 3:if(e>=0)return!1;break;case 4:if(e>=0||i<=0)return!1;break;case 5:if(i<=0)return!1;break;case 6:if(e<=0||i<=0)return!1;break;case 7:if(e<=0)return!1}return!0}getSelectedFeatureDataWebMercator(){if(!this.draggedCoordinate.id||-1===this.draggedCoordinate.index)return null;const t=this.getFeature(this.draggedCoordinate.id);if(!t)return null;const e=this.getNormalisedCoordinates(t.geometry);return{boundingBox:this.getBBoxWebMercator(e),feature:t,updatedCoords:e,selectedCoordinate:e[this.draggedCoordinate.index]}}centerWebMercatorDrag(t){const e=this.getSelectedFeatureDataWebMercator();if(!e)return null;const{feature:i,boundingBox:o,updatedCoords:n,selectedCoordinate:r}=e,s=pe(i);if(!s)return null;const a=E(r[0],r[1]),{closestBBoxIndex:d}=this.getIndexesWebMercator(o,a),h=E(t.lng,t.lat);return this.scaleWebMercator({closestBBoxIndex:d,updatedCoords:n,webMercatorCursor:h,webMercatorSelected:a,webMercatorOrigin:s}),n}centerFixedWebMercatorDrag(t){const e=this.getSelectedFeatureDataWebMercator();if(!e)return null;const{feature:i,boundingBox:o,updatedCoords:n,selectedCoordinate:r}=e,s=pe(i);if(!s)return null;const a=E(r[0],r[1]),{closestBBoxIndex:d}=this.getIndexesWebMercator(o,a),h=E(t.lng,t.lat);return this.scaleFixedWebMercator({closestBBoxIndex:d,updatedCoords:n,webMercatorCursor:h,webMercatorSelected:a,webMercatorOrigin:s}),n}scaleFixedWebMercator({closestBBoxIndex:t,webMercatorOrigin:e,webMercatorSelected:i,webMercatorCursor:o,updatedCoords:n}){if(!this.isValidDragWebMercator(t,e.x-o.x,e.y-o.y))return null;let r=tt(e,o)/tt(e,i);return r<0&&(r=this.minimumScale),me({coordinates:n,originX:e.x,originY:e.y,xScale:r,yScale:r}),n}oppositeFixedWebMercatorDrag(t){const e=this.getSelectedFeatureDataWebMercator();if(!e)return null;const{boundingBox:i,updatedCoords:o,selectedCoordinate:n}=e,r=E(n[0],n[1]),{oppositeBboxIndex:s,closestBBoxIndex:a}=this.getIndexesWebMercator(i,r),d={x:i[s][0],y:i[s][1]},h=E(t.lng,t.lat);return this.scaleFixedWebMercator({closestBBoxIndex:a,updatedCoords:o,webMercatorCursor:h,webMercatorSelected:r,webMercatorOrigin:d}),o}oppositeWebMercatorDrag(t){const e=this.getSelectedFeatureDataWebMercator();if(!e)return null;const{boundingBox:i,updatedCoords:o,selectedCoordinate:n}=e,r=E(n[0],n[1]),{oppositeBboxIndex:s,closestBBoxIndex:a}=this.getIndexesWebMercator(i,r),d={x:i[s][0],y:i[s][1]},h=E(t.lng,t.lat);return this.scaleWebMercator({closestBBoxIndex:a,updatedCoords:o,webMercatorCursor:h,webMercatorSelected:r,webMercatorOrigin:d}),o}scaleWebMercator({closestBBoxIndex:t,webMercatorOrigin:e,webMercatorSelected:i,webMercatorCursor:o,updatedCoords:n}){const r=e.x-o.x,s=e.y-o.y;if(!this.isValidDragWebMercator(t,r,s))return null;let a=1;0!==r&&1!==t&&5!==t&&(a=1-(e.x-i.x-r)/r);let d=1;return 0!==s&&3!==t&&7!==t&&(d=1-(e.y-i.y-s)/s),this.validateScale(a,d)?(a<0&&(a=this.minimumScale),d<0&&(d=this.minimumScale),this.performWebMercatorScale(n,e.x,e.y,a,d),n):null}getFeature(t){if(null===this.draggedCoordinate.id)return null;const e=this.readFeature.getGeometry(t);return\"Polygon\"!==e.type&&\"LineString\"!==e.type?null:{id:t,type:\"Feature\",geometry:e,properties:{}}}getNormalisedCoordinates(t){return\"Polygon\"===t.type?t.coordinates[0]:t.coordinates}validateScale(t,e){const i=!isNaN(t)&&e<Number.MAX_SAFE_INTEGER,o=!isNaN(e)&&e<Number.MAX_SAFE_INTEGER;return i&&o}performWebMercatorScale(t,e,i,o,n){t.forEach(t=>{const{x:r,y:s}=E(t[0],t[1]),a=e+(r-e)*o,d=i+(s-i)*n,{lng:h,lat:l}=D(a,d);t[0]=h,t[1]=l})}getBBoxWebMercator(t){const e=[Infinity,Infinity,-Infinity,-Infinity];(t=t.map(t=>{const{x:e,y:i}=E(t[0],t[1]);return[e,i]})).forEach(([t,i])=>{t<e[0]&&(e[0]=t),i<e[1]&&(e[1]=i),t>e[2]&&(e[2]=t),i>e[3]&&(e[3]=i)});const[i,o,n,r]=e;return[[i,r],[(i+n)/2,r],[n,r],[n,r+(o-r)/2],[n,o],[(i+n)/2,o],[i,o],[i,r+(o-r)/2]]}getIndexesWebMercator(t,e){let i,o=Infinity;for(let n=0;n<t.length;n++){const r=tt({x:e.x,y:e.y},{x:t[n][0],y:t[n][1]});r<o&&(i=n,o=r)}if(void 0===i)throw new Error(\"No closest coordinate found\");return{oppositeBboxIndex:this.boundingBoxMaps.opposite[i],closestBBoxIndex:i}}isDragging(){return null!==this.draggedCoordinate.id}startDragging(t,e){this.draggedCoordinate={id:t,index:e}}stopDragging(){this.draggedCoordinate={id:null,index:-1}}getDraggableIndex(t,e){const i=this.readFeature.getGeometry(e),o=this.getClosestCoordinate(t,i);return-1===o.index?-1:o.index}drag(t,e){if(!this.draggedCoordinate.id)return!1;const i=this.getFeature(this.draggedCoordinate.id);if(!i)return!1;let o=null;if(\"center\"===e?o=this.centerWebMercatorDrag(t):\"opposite\"===e?o=this.oppositeWebMercatorDrag(t):\"center-fixed\"===e?o=this.centerFixedWebMercatorDrag(t):\"opposite-fixed\"===e&&(o=this.oppositeFixedWebMercatorDrag(t)),!o)return!1;for(let t=0;t<o.length;t++){const e=o[t];if(e[0]=x(e[0],this.coordinatePrecision),e[1]=x(e[1],this.coordinatePrecision),!T(e,this.coordinatePrecision))return!1}const n=i.id;let s=null;if(\"Polygon\"===i.geometry.type?s=this.mutateFeature.updatePolygon({featureId:n,coordinateMutations:{type:$,coordinates:[o]},context:{updateType:r.Provisional}}):\"LineString\"===i.geometry.type&&(s=this.mutateFeature.updateLineString({featureId:n,coordinateMutations:{type:$,coordinates:o},context:{updateType:r.Provisional}})),!s)return!1;const a=s.geometry.coordinates;return this.midPoints.updateAllInPlace({featureCoordinates:a}),this.selectionPoints.updateAllInPlace({featureCoordinates:a}),this.coordinatePoints.updateAllInPlace({featureId:n,featureCoordinates:a}),!0}}const ve={deselect:\"Escape\",delete:\"Delete\",rotate:[\"Control\",\"r\"],scale:[\"Control\",\"s\"]},Ce={pointerOver:\"move\",dragStart:\"move\",dragEnd:\"move\",insertMidpoint:\"crosshair\"};class Pe extends v{getPointerOverFeatureCursor(){var t;return null!=(t=this.cursors.pointerOverFeature)?t:this.cursors.pointerOver}getPointerOverCoordinateCursor(){var t;return null!=(t=this.cursors.pointerOverCoordinate)?t:this.cursors.pointerOver}getPointerOverResizeHandleCursor(){var t;return null!=(t=this.cursors.pointerOverResizeHandle)?t:this.cursors.pointerOver}constructor(t){super(t,!0),this.mode=\"select\",this.allowManualDeselection=!0,this.allowManualSelection=!0,this.dragEventThrottle=5,this.dragEventCount=0,this.selected=[],this.flags={},this.keyEvents=ve,this.cursors=Ce,this.validations={},this.dragTarget={type:\"none\"},this.selectionPoints=void 0,this.midPoints=void 0,this.coordinateSnap=void 0,this.featuresAtMouseEvent=void 0,this.pixelDistance=void 0,this.clickBoundingBox=void 0,this.dragFeature=void 0,this.dragCoordinate=void 0,this.rotateFeature=void 0,this.scaleFeature=void 0,this.dragCoordinateResizeFeature=void 0,this.coordinatePoints=void 0,this.lineSnap=void 0,this.mutateFeature=void 0,this.readFeature=void 0,this.updateOptions(t)}updateOptions(e){if(super.updateOptions(e),this.cursors=e&&e.cursors?t({},this.cursors,e.cursors):Ce,null===(null==e?void 0:e.keyEvents)?this.keyEvents={deselect:null,delete:null,rotate:null,scale:null}:null!=e&&e.keyEvents&&(this.keyEvents=t({},this.keyEvents,e.keyEvents)),void 0!==(null==e?void 0:e.dragEventThrottle)&&(this.dragEventThrottle=e.dragEventThrottle),void 0!==(null==e?void 0:e.allowManualDeselection)&&(this.allowManualDeselection=e.allowManualDeselection),void 0!==(null==e?void 0:e.allowManualSelection)&&(this.allowManualSelection=e.allowManualSelection),null!=e&&e.flags){this.flags=t({},this.flags,e.flags),this.validations={};for(const t in this.flags){const e=this.flags[t].feature;e&&e.validation&&(this.validations[t]=e.validation)}}}selectFeature(t){this.select(t,!1)}setSelecting(){if(\"started\"!==this._state)throw new Error(\"Mode must be started to move to selecting state\");this._state=\"selecting\"}registerBehaviors(t){this.readFeature=new it(t),this.mutateFeature=new q(t,{validate:(t,e)=>{const i=t.properties.mode;return this.validations&&this.validations[i]?this.validations[i](t,e):{valid:!0}}}),this.pixelDistance=new dt(t),this.clickBoundingBox=new at(t),this.featuresAtMouseEvent=new de(t,this.clickBoundingBox,this.pixelDistance),this.selectionPoints=new re(t,this.mutateFeature),this.coordinatePoints=new _t(t,this.readFeature,this.mutateFeature),this.midPoints=new ne(t,this.selectionPoints,this.coordinatePoints,this.mutateFeature,this.readFeature,this.pixelDistance),this.coordinateSnap=new ht(t,this.pixelDistance,this.clickBoundingBox),this.lineSnap=new Mt(t,this.pixelDistance,this.clickBoundingBox),this.rotateFeature=new ge(t,this.selectionPoints,this.midPoints,this.coordinatePoints,this.readFeature,this.mutateFeature),this.dragFeature=new he(t,this.featuresAtMouseEvent,this.selectionPoints,this.midPoints,this.coordinatePoints,this.readFeature,this.mutateFeature),this.dragCoordinate=new le(t,this.pixelDistance,this.selectionPoints,this.midPoints,this.coordinatePoints,this.coordinateSnap,this.lineSnap,this.readFeature,this.mutateFeature),this.dragCoordinateResizeFeature=new fe(t,this.pixelDistance,this.selectionPoints,this.midPoints,this.coordinatePoints,this.readFeature,this.mutateFeature),this.scaleFeature=new ye(t,this.dragCoordinateResizeFeature)}deselectFeature(t){this.deselect(t)}deselect(t){this.selected.includes(t)&&(this.mutateFeature.setDeselected(this.selected),this.onDeselect(this.selected[0]),this.selected=[],this.selectionPoints.delete(),this.midPoints.delete(),this.dragTarget={type:\"none\"})}deleteSelected(){this.selected.length&&this.mutateFeature.deleteFeaturesIfPresent(this.selected),this.selected=[],this.dragTarget={type:\"none\"}}clearDragTargetAndCursor(){this.dragTarget={type:\"none\"},this.setCursor(\"unset\")}getSelectedFlags(t){const e=this.readFeature.getProperties(t),i=this.flags[e.mode],o=null==i?void 0:i.feature,n=null==o?void 0:o.coordinates;return{featureFlags:o,coordinatesFlags:n,hasDraggableFlags:o&&(o.draggable||(null==n?void 0:n.draggable)||(null==n?void 0:n.resizable)||\"object\"==typeof(null==n?void 0:n.midpoints)&&n.midpoints.draggable)}}onRightClick(t){if(!this.selectionPoints.ids.length)return;let e,i=Infinity;if(this.selectionPoints.ids.forEach(o=>{const n=this.readFeature.getGeometry(o),r=this.pixelDistance.measure(t,n.coordinates);r<this.pointerDistance&&r<i&&(i=r,e=this.readFeature.getProperties(o))}),!e)return;const n=e.selectionPointFeatureId,s=e.index,a=this.readFeature.getProperties(n),d=this.flags[a.mode];if(!(d&&d.feature&&d.feature.coordinates&&d.feature.coordinates.deletable))return;const h=this.readFeature.getGeometry(n);let l;if(\"Polygon\"===h.type){if(l=h.coordinates[0],l.length<=4)return}else{if(\"LineString\"!==h.type)return;if(l=h.coordinates,l.length<=2)return}\"Polygon\"!==h.type||0!==s&&s!==l.length-1?l.splice(s,1):(l.shift(),l.pop(),l.push([l[0][0],l[0][1]]));let u=null;if(\"Polygon\"===h.type?u=this.mutateFeature.updatePolygon({featureId:n,coordinateMutations:{type:$,coordinates:[l]},context:{updateType:r.Commit}}):\"LineString\"===h.type&&(u=this.mutateFeature.updateLineString({featureId:n,coordinateMutations:{type:$,coordinates:l},context:{updateType:r.Commit}})),!u)return;const c=u.geometry.coordinates;this.mutateFeature.deleteFeaturesIfPresent([...this.midPoints.ids,...this.selectionPoints.ids]),a.coordinatePointIds&&this.coordinatePoints.createOrUpdate({featureId:n,featureCoordinates:c}),this.selectionPoints.create({featureCoordinates:c,featureId:n}),d&&d.feature&&d.feature.coordinates&&d.feature.coordinates.midpoints&&this.midPoints.create({featureCoordinates:c,featureId:n}),this.onFinish(n,{action:o,mode:this.mode})}select(t,e=!0){if(this.selected[0]===t)return;const{mode:i}=this.readFeature.getProperties(t),o=this.flags[i];if(!o||!o.feature)return;const n=this.selected[0];if(n){if(n===t)return;this.deselect(n)}e&&this.setCursor(this.getPointerOverFeatureCursor()),this.selected=[t],this.mutateFeature.setSelected(t),this.onSelect(t);const{type:r,coordinates:s}=this.readFeature.getGeometry(t);\"LineString\"!==r&&\"Polygon\"!==r||s&&o&&o.feature.coordinates&&(this.selectionPoints.create({featureCoordinates:s,featureId:t}),o.feature.coordinates.midpoints&&this.midPoints.create({featureCoordinates:s,featureId:t}))}onLeftClick(t){const{clickedFeature:e}=this.featuresAtMouseEvent.find(t,this.selected.length>0),i=this.midPoints.getNearestMidPoint(t),o=this.selected[0];if(o){var r;const{featureFlags:e}=this.getSelectedFlags(o);if(null!=e&&null!=(r=e.coordinates)&&r.midpoints&&i){if(e.coordinates.draggable){const e=this.pixelDistance.measure(t,this.readFeature.getGeometry(i).coordinates),{dist:n}=this.dragCoordinate.getDraggable(t,o);if(void 0!==n&&e>n)return}return this.midPoints.insert({featureId:o,midPointId:i}),void this.onFinish(this.selected[0],{action:n,mode:this.mode})}}if(null!=e&&e.id)this.allowManualSelection&&this.select(e.id,!0);else if(this.selected.length&&this.allowManualDeselection)return void this.deselect(this.selected[0])}start(){this.setStarted(),this.setSelecting()}stop(){this.cleanUp(),this.setStarted(),this.setStopped()}onClick(t){\"right\"===t.button&&this.allowPointerEvent(this.pointerEvents.rightClick,t)||t.isContextMenu&&this.allowPointerEvent(this.pointerEvents.contextMenu,t)?this.onRightClick(t):\"left\"===t.button&&this.allowPointerEvent(this.pointerEvents.leftClick,t)&&this.onLeftClick(t)}canScale(t){return this.keyEvents.scale&&this.keyEvents.scale.every(e=>t.heldKeys.includes(e))}canRotate(t){return this.keyEvents.rotate&&this.keyEvents.rotate.every(e=>t.heldKeys.includes(e))}preventDefaultKeyEvent(t){const e=this.canRotate(t),i=this.canScale(t);(e||i)&&t.preventDefault()}onKeyDown(t){this.preventDefaultKeyEvent(t)}onKeyUp(t){if(this.preventDefaultKeyEvent(t),this.keyEvents.delete&&t.key===this.keyEvents.delete){if(!this.selected.length)return;const t=this.selected[0];this.onDeselect(this.selected[0]),this.coordinatePoints.deletePointsByFeatureIds([t]),this.deleteSelected(),this.selectionPoints.delete(),this.midPoints.delete()}else this.keyEvents.deselect&&t.key===this.keyEvents.deselect&&this.cleanUp()}cleanUp(){this.selected.length&&this.deselect(this.selected[0])}onDragStart(t,e){if(!this.allowPointerEvent(this.pointerEvents.onDragStart,t))return;const i=this.selected[0];if(!i)return;const{featureFlags:o,coordinatesFlags:r,hasDraggableFlags:s}=this.getSelectedFlags(i);if(!s)return;this.dragEventCount=0;const a=\"none\"!==this.dragTarget.type&&this.dragTarget.featureId===i?this.dragTarget:{type:\"none\"},d=\"coordinate\"===a.type?a.coordinateIndex:this.dragCoordinate.getDraggableIndex(t,i),h=\"resize\"===a.type?a.coordinateIndex:this.dragCoordinateResizeFeature.getDraggableIndex(t,i),l=(null==r?void 0:r.resizable)&&-1!==h,u=(null==r?void 0:r.draggable)&&-1!==d,c=r&&\"object\"==typeof r.midpoints&&r.midpoints.draggable,p=(null==o?void 0:o.draggable)&&(\"feature\"===a.type||this.dragFeature.canDrag(t,i));if(l)return this.setCursor(this.cursors.dragStart),this.dragCoordinateResizeFeature.startDragging(i,h),void e(!1);if(u)return this.setCursor(this.cursors.dragStart),this.dragCoordinate.startDragging(i,d),void e(!1);if(c){const o=\"midpoint\"===a.type?a.midPointId:this.midPoints.getNearestMidPoint(t);if(this.selected.length&&o){this.midPoints.insert({featureId:i,midPointId:o}),this.onFinish(this.selected[0],{action:n,mode:this.mode});const r=this.dragCoordinate.getDraggableIndex(t,i);return this.dragCoordinate.startDragging(i,r),void e(!1)}}if(p)return this.setCursor(this.cursors.dragStart),this.dragFeature.startDragging(t,i),void e(!1);this.setCursor(\"unset\")}onDrag(t,e){if(!this.allowPointerEvent(this.pointerEvents.onDrag,t))return;const i=this.selected[0];if(!i)return;const o=this.readFeature.getProperties(i),n=this.flags[o.mode],r=!0===(n&&n.feature&&n.feature.selfIntersectable);if(this.dragEventCount++,this.dragEventCount%this.dragEventThrottle!=0){if(n&&n.feature&&n.feature.rotateable&&this.canRotate(t))return e(!1),void this.rotateFeature.rotate(t,i);if(n&&n.feature&&n.feature.scaleable&&this.canScale(t))return e(!1),void this.scaleFeature.scale(t,i);if(this.dragCoordinateResizeFeature.isDragging()&&n.feature&&n.feature.coordinates&&n.feature.coordinates.resizable){if(\"globe\"===this.projection)throw new Error(\"Globe is currently unsupported projection for resizable\");return e(!1),void this.dragCoordinateResizeFeature.drag(t,n.feature.coordinates.resizable)}if(this.dragCoordinate.isDragging()){var s;const e=null==(s=n.feature)||null==(s=s.coordinates)?void 0:s.snappable;let i={toCoordinate:!1};return!0===e?i={toCoordinate:!0}:\"object\"==typeof e&&(i=e),void this.dragCoordinate.drag(t,r,i)}this.dragFeature.isDragging()?this.dragFeature.drag(t):e(!0)}}onDragEnd(t,e){this.allowPointerEvent(this.pointerEvents.onDragEnd,t)&&(this.setCursor(this.cursors.dragEnd),this.dragCoordinate.isDragging()?this.onFinish(this.selected[0],{mode:this.mode,action:\"dragCoordinate\"}):this.dragFeature.isDragging()?this.onFinish(this.selected[0],{mode:this.mode,action:\"dragFeature\"}):this.dragCoordinateResizeFeature.isDragging()&&this.onFinish(this.selected[0],{mode:this.mode,action:\"dragCoordinateResize\"}),this.dragCoordinate.stopDragging(),this.dragFeature.stopDragging(),this.dragCoordinateResizeFeature.stopDragging(),this.rotateFeature.reset(),this.scaleFeature.reset(),e(!0))}onMouseMove(t){const e=this.selected[0];if(!e)return void this.clearDragTargetAndCursor();if(this.dragFeature.isDragging()||this.dragCoordinate.isDragging()||this.dragCoordinateResizeFeature.isDragging())return;const{featureFlags:i}=this.getSelectedFlags(e);if(!i)return void this.clearDragTargetAndCursor();let o;const n=i.coordinates;if(null!=n&&n.midpoints&&(o=this.midPoints.getNearestMidPoint(t),o&&(this.dragTarget={type:\"midpoint\",featureId:e,midPointId:o},this.setCursor(this.cursors.insertMidpoint))),n&&n.draggable){const{index:i,dist:n}=this.dragCoordinate.getDraggable(t,e);if(i>-1){if(o&&this.pixelDistance.measure(t,this.readFeature.getGeometry(o).coordinates)<n)return;return this.dragTarget={type:\"coordinate\",featureId:e,coordinateIndex:i},void this.setCursor(this.getPointerOverCoordinateCursor())}}if(n&&n.resizable){const i=this.dragCoordinateResizeFeature.getDraggableIndex(t,e);if(i>-1)return this.dragTarget={type:\"resize\",featureId:e,coordinateIndex:i},void this.setCursor(this.getPointerOverResizeHandleCursor())}if(i.draggable&&this.dragFeature.canDrag(t,e)){if(o)return;return this.dragTarget={type:\"feature\",featureId:e},void this.setCursor(this.getPointerOverFeatureCursor())}o||this.clearDragTargetAndCursor()}styleFeature(e){const i=t({},{polygonFillColor:\"#3f97e0\",polygonOutlineColor:\"#3f97e0\",polygonOutlineWidth:4,polygonOutlineOpacity:1,polygonFillOpacity:.3,pointColor:\"#3f97e0\",pointOpacity:1,pointOutlineColor:\"#ffffff\",pointOutlineOpacity:1,pointOutlineWidth:0,pointWidth:6,lineStringColor:\"#3f97e0\",lineStringWidth:4,lineStringOpacity:1,zIndex:0,markerUrl:void 0,markerHeight:void 0,markerWidth:void 0,lineStringDash:void 0});if(e.properties.mode===this.mode&&\"Point\"===e.geometry.type){if(e.properties[a.SELECTION_POINT])return i.pointColor=this.getHexColorStylingValue(this.styles.selectionPointColor,i.pointColor,e),i.pointOpacity=this.getNumericStylingValue(this.styles.selectionPointOpacity,1,e),i.pointOutlineColor=this.getHexColorStylingValue(this.styles.selectionPointOutlineColor,i.pointOutlineColor,e),i.pointWidth=this.getNumericStylingValue(this.styles.selectionPointWidth,i.pointWidth,e),i.pointOutlineOpacity=this.getNumericStylingValue(this.styles.selectionPointOutlineOpacity,1,e),i.pointOutlineWidth=this.getNumericStylingValue(this.styles.selectionPointOutlineWidth,2,e),i.zIndex=30,i;if(e.properties[a.MID_POINT])return i.pointColor=this.getHexColorStylingValue(this.styles.midPointColor,i.pointColor,e),i.pointOpacity=this.getNumericStylingValue(this.styles.midPointOpacity,1,e),i.pointOutlineColor=this.getHexColorStylingValue(this.styles.midPointOutlineColor,i.pointOutlineColor,e),i.pointWidth=this.getNumericStylingValue(this.styles.midPointWidth,4,e),i.pointOutlineOpacity=this.getNumericStylingValue(this.styles.midPointOutlineOpacity,1,e),i.pointOutlineWidth=this.getNumericStylingValue(this.styles.midPointOutlineWidth,2,e),i.zIndex=50,i}else if(e.properties[a.SELECTED]){if(\"Point\"===e.geometry.type&&e.properties[d.MARKER])return i.markerUrl=this.getUrlStylingValue(this.styles.selectedMarkerUrl,s,e),i.markerHeight=this.getNumericStylingValue(this.styles.selectedMarkerHeight,40,e),i.markerWidth=this.getNumericStylingValue(this.styles.selectedMarkerWidth,32,e),i;if(\"Polygon\"===e.geometry.type)return i.polygonFillColor=this.getHexColorStylingValue(this.styles.selectedPolygonColor,i.polygonFillColor,e),i.polygonOutlineWidth=this.getNumericStylingValue(this.styles.selectedPolygonOutlineWidth,i.polygonOutlineWidth,e),i.polygonOutlineColor=this.getHexColorStylingValue(this.styles.selectedPolygonOutlineColor,i.polygonOutlineColor,e),i.polygonOutlineOpacity=this.getNumericStylingValue(this.styles.selectedPolygonOutlineOpacity,1,e),i.polygonFillOpacity=this.getNumericStylingValue(this.styles.selectedPolygonFillOpacity,i.polygonFillOpacity,e),i.zIndex=h,i;if(\"LineString\"===e.geometry.type)return i.lineStringColor=this.getHexColorStylingValue(this.styles.selectedLineStringColor,i.lineStringColor,e),i.lineStringWidth=this.getNumericStylingValue(this.styles.selectedLineStringWidth,i.lineStringWidth,e),i.zIndex=h,i;if(\"Point\"===e.geometry.type)return i.pointWidth=this.getNumericStylingValue(this.styles.selectedPointWidth,i.pointWidth,e),i.pointColor=this.getHexColorStylingValue(this.styles.selectedPointColor,i.pointColor,e),i.pointOpacity=this.getNumericStylingValue(this.styles.selectedPointOpacity,1,e),i.pointOutlineColor=this.getHexColorStylingValue(this.styles.selectedPointOutlineColor,i.pointOutlineColor,e),i.pointOutlineOpacity=this.getNumericStylingValue(this.styles.selectedPointOutlineOpacity,1,e),i.pointOutlineWidth=this.getNumericStylingValue(this.styles.selectedPointOutlineWidth,i.pointOutlineWidth,e),i.zIndex=h,i}return i}afterFeatureUpdated(t){if(this.selected.length&&t.id===this.selected[0]){var e,i;const o=this.flags[t.properties.mode];if(null==o||null==(e=o.feature)||!e.coordinates)return;const n=t.geometry.type,r=t.id;if(this.selectionPoints.delete(),this.midPoints.delete(),\"LineString\"!==n&&\"Polygon\"!==n)return;const s=t.geometry.coordinates;this.selectionPoints.create({featureCoordinates:s,featureId:r}),null!=o&&null!=(i=o.feature)&&null!=(i=i.coordinates)&&i.midpoints&&this.midPoints.create({featureCoordinates:s,featureId:r})}}}class Ie extends f{constructor(...t){super(...t),this.type=y.Static,this.mode=\"static\"}start(){}stop(){}onKeyUp(){}onKeyDown(){}onClick(){}onDragStart(){}onDrag(){}onDragEnd(){}onMouseMove(){}cleanUp(){}styleFeature(){return t({},{polygonFillColor:\"#3f97e0\",polygonOutlineColor:\"#3f97e0\",polygonOutlineWidth:4,polygonOutlineOpacity:1,polygonFillOpacity:.3,pointColor:\"#3f97e0\",pointOpacity:1,pointOutlineColor:\"#ffffff\",pointOutlineOpacity:1,pointOutlineWidth:0,pointWidth:6,lineStringColor:\"#3f97e0\",lineStringWidth:4,lineStringOpacity:1,zIndex:0,markerUrl:void 0,markerHeight:void 0,markerWidth:void 0,lineStringDash:void 0})}}function Se(t,e,i,o,n){for(;o>i;){if(o-i>600){const r=o-i+1,s=e-i+1,a=Math.log(r),d=.5*Math.exp(2*a/3),h=.5*Math.sqrt(a*d*(r-d)/r)*(s-r/2<0?-1:1);Se(t,e,Math.max(i,Math.floor(e-s*d/r+h)),Math.min(o,Math.floor(e+(r-s)*d/r+h)),n)}const r=t[e];let s=i,a=o;for(Fe(t,i,e),n(t[o],r)>0&&Fe(t,i,o);s<a;){for(Fe(t,s,a),s++,a--;n(t[s],r)<0;)s++;for(;n(t[a],r)>0;)a--}0===n(t[i],r)?Fe(t,i,a):(a++,Fe(t,a,o)),a<=e&&(i=a+1),e<=a&&(o=a-1)}}function Fe(t,e,i){const o=t[e];t[e]=t[i],t[i]=o}function xe(t,e){Oe(t,0,t.children.length,e,t)}function Oe(t,e,i,o,n){n||(n=Te([])),n.minX=Infinity,n.minY=Infinity,n.maxX=-Infinity,n.maxY=-Infinity;for(let r=e;r<i;r++){const e=t.children[r];Me(n,t.leaf?o(e):e)}return n}function Me(t,e){return t.minX=Math.min(t.minX,e.minX),t.minY=Math.min(t.minY,e.minY),t.maxX=Math.max(t.maxX,e.maxX),t.maxY=Math.max(t.maxY,e.maxY),t}function we(t,e){return t.minX-e.minX}function Ee(t,e){return t.minY-e.minY}function De(t){return(t.maxX-t.minX)*(t.maxY-t.minY)}function ke(t){return t.maxX-t.minX+(t.maxY-t.minY)}function _e(t,e){const i=Math.max(t.minX,e.minX),o=Math.max(t.minY,e.minY),n=Math.min(t.maxX,e.maxX),r=Math.min(t.maxY,e.maxY);return Math.max(0,n-i)*Math.max(0,r-o)}function be(t,e){return t.minX<=e.minX&&t.minY<=e.minY&&e.maxX<=t.maxX&&e.maxY<=t.maxY}function Ne(t,e){return e.minX<=t.maxX&&e.minY<=t.maxY&&e.maxX>=t.minX&&e.maxY>=t.minY}function Te(t){return{children:t,height:1,leaf:!0,minX:Infinity,minY:Infinity,maxX:-Infinity,maxY:-Infinity}}function Re(t,e,i,o,n){const r=[e,i];for(;r.length;){if((i=r.pop())-(e=r.pop())<=o)continue;const s=e+Math.ceil((i-e)/o/2)*o;Se(t,s,e,i,n),r.push(e,s,s,i)}}class We{constructor(t){this._maxEntries=void 0,this._minEntries=void 0,this.data=void 0,this._maxEntries=Math.max(4,t),this._minEntries=Math.max(2,Math.ceil(.4*this._maxEntries)),this.clear()}search(t){let e=this.data;const i=[];if(!Ne(t,e))return i;const o=this.toBBox,n=[];for(;e;){for(let r=0;r<e.children.length;r++){const s=e.children[r],a=e.leaf?o(s):s;Ne(t,a)&&(e.leaf?i.push(s):be(t,a)?this._all(s,i):n.push(s))}e=n.pop()}return i}collides(t){let e=this.data;if(Ne(t,e)){const i=[];for(;e;){for(let o=0;o<e.children.length;o++){const n=e.children[o],r=e.leaf?this.toBBox(n):n;if(Ne(t,r)){if(e.leaf||be(t,r))return!0;i.push(n)}}e=i.pop()}}return!1}load(t){if(t.length<this._minEntries){for(let e=0;e<t.length;e++)this.insert(t[e]);return}let e=this._build(t.slice(),0,t.length-1,0);if(this.data.children.length)if(this.data.height===e.height)this._splitRoot(this.data,e);else{if(this.data.height<e.height){const t=this.data;this.data=e,e=t}this._insert(e,this.data.height-e.height-1,!0)}else this.data=e}insert(t){this._insert(t,this.data.height-1)}clear(){this.data=Te([])}remove(t){let e=this.data;const i=this.toBBox(t),o=[],n=[];let r,s,a=!1;for(;e||o.length;){if(e||(e=o.pop(),s=o[o.length-1],r=n.pop(),a=!0),e.leaf){const i=e.children.indexOf(t);-1!==i&&(e.children.splice(i,1),o.push(e),this._condense(o))}a||e.leaf||!be(e,i)?s?(r++,e=s.children[r],a=!1):e=null:(o.push(e),n.push(r),r=0,s=e,e=e.children[0])}}toBBox(t){return t}compareMinX(t,e){return t.minX-e.minX}compareMinY(t,e){return t.minY-e.minY}_all(t,e){const i=[];for(;t;)t.leaf?e.push(...t.children):i.push(...t.children),t=i.pop();return e}_build(t,e,i,o){const n=i-e+1;let r,s=this._maxEntries;if(n<=s)return r=Te(t.slice(e,i+1)),xe(r,this.toBBox),r;o||(o=Math.ceil(Math.log(n)/Math.log(s)),s=Math.ceil(n/Math.pow(s,o-1))),r=Te([]),r.leaf=!1,r.height=o;const a=Math.ceil(n/s),d=a*Math.ceil(Math.sqrt(s));Re(t,e,i,d,this.compareMinX);for(let n=e;n<=i;n+=d){const e=Math.min(n+d-1,i);Re(t,n,e,a,this.compareMinY);for(let i=n;i<=e;i+=a){const n=Math.min(i+a-1,e);r.children.push(this._build(t,i,n,o-1))}}return xe(r,this.toBBox),r}_chooseSubtree(t,e,i,o){for(;o.push(e),!e.leaf&&o.length-1!==i;){let i,o=Infinity,s=Infinity;for(let a=0;a<e.children.length;a++){const d=e.children[a],h=De(d),l=(n=t,r=d,(Math.max(r.maxX,n.maxX)-Math.min(r.minX,n.minX))*(Math.max(r.maxY,n.maxY)-Math.min(r.minY,n.minY))-h);l<s?(s=l,o=h<o?h:o,i=d):l===s&&h<o&&(o=h,i=d)}e=i||e.children[0]}var n,r;return e}_insert(t,e,i){const o=i?t:this.toBBox(t),n=[],r=this._chooseSubtree(o,this.data,e,n);for(r.children.push(t),Me(r,o);e>=0&&n[e].children.length>this._maxEntries;)this._split(n,e),e--;this._adjustParentBBoxes(o,n,e)}_split(t,e){const i=t[e],o=i.children.length,n=this._minEntries;this._chooseSplitAxis(i,n,o);const r=this._chooseSplitIndex(i,n,o),s=Te(i.children.splice(r,i.children.length-r));s.height=i.height,s.leaf=i.leaf,xe(i,this.toBBox),xe(s,this.toBBox),e?t[e-1].children.push(s):this._splitRoot(i,s)}_splitRoot(t,e){this.data=Te([t,e]),this.data.height=t.height+1,this.data.leaf=!1,xe(this.data,this.toBBox)}_chooseSplitIndex(t,e,i){let o,n=Infinity,r=Infinity;for(let s=e;s<=i-e;s++){const e=Oe(t,0,s,this.toBBox),a=Oe(t,s,i,this.toBBox),d=_e(e,a),h=De(e)+De(a);d<n?(n=d,o=s,r=h<r?h:r):d===n&&h<r&&(r=h,o=s)}return o||i-e}_chooseSplitAxis(t,e,i){const o=t.leaf?this.compareMinX:we,n=t.leaf?this.compareMinY:Ee;this._allDistMargin(t,e,i,o)<this._allDistMargin(t,e,i,n)&&t.children.sort(o)}_allDistMargin(t,e,i,o){t.children.sort(o);const n=this.toBBox,r=Oe(t,0,e,n),s=Oe(t,i-e,i,n);let a=ke(r)+ke(s);for(let o=e;o<i-e;o++){const e=t.children[o];Me(r,t.leaf?n(e):e),a+=ke(r)}for(let o=i-e-1;o>=e;o--){const e=t.children[o];Me(s,t.leaf?n(e):e),a+=ke(s)}return a}_adjustParentBBoxes(t,e,i){for(let o=i;o>=0;o--)Me(e[o],t)}_condense(t){for(let e,i=t.length-1;i>=0;i--)0===t[i].children.length?i>0?(e=t[i-1].children,e.splice(e.indexOf(t[i]),1)):this.clear():xe(t[i],this.toBBox)}}class Ue{constructor(t){this.tree=void 0,this.idToNode=void 0,this.nodeToId=void 0,this.tree=new We(t&&t.maxEntries?t.maxEntries:9),this.idToNode=new Map,this.nodeToId=new Map}setMaps(t,e){this.idToNode.set(t.id,e),this.nodeToId.set(e,t.id)}toBBox(t){const e=[],i=[];let o;if(\"Polygon\"===t.geometry.type)o=t.geometry.coordinates[0];else if(\"LineString\"===t.geometry.type)o=t.geometry.coordinates;else{if(\"Point\"!==t.geometry.type)throw new Error(\"Not a valid feature to turn into a bounding box\");o=[t.geometry.coordinates]}for(let t=0;t<o.length;t++)i.push(o[t][1]),e.push(o[t][0]);const n=Math.min(...i),r=Math.max(...i);return{minX:Math.min(...e),minY:n,maxX:Math.max(...e),maxY:r}}insert(t){if(this.idToNode.get(String(t.id)))throw new Error(\"Feature already exists\");const e=this.toBBox(t);this.setMaps(t,e),this.tree.insert(e)}load(t){const e=[],i=new Set;t.forEach(t=>{const o=this.toBBox(t);if(this.setMaps(t,o),i.has(String(t.id)))throw new Error(`Duplicate feature ID found ${t.id}`);i.add(String(t.id)),e.push(o)}),this.tree.load(e)}update(t){this.remove(t.id);const e=this.toBBox(t);this.setMaps(t,e),this.tree.insert(e)}remove(t){const e=this.idToNode.get(t);if(!e)throw new Error(`${t} not inserted into the spatial index`);this.tree.remove(e)}clear(){this.tree.clear()}search(t){return this.tree.search(this.toBBox(t)).map(t=>this.nodeToId.get(t))}collides(t){return this.tree.collides(this.toBBox(t))}}const Le={getId:()=>\"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g,function(t){const e=16*Math.random()|0;return(\"x\"==t?e:3&e|8).toString(16)}),isValidId:t=>\"string\"==typeof t&&36===t.length},Be={target:\"geometry\"},Ae={target:\"properties\"};class ze{constructor(t){this.idStrategy=void 0,this.tracked=void 0,this.spatialIndex=void 0,this.store=void 0,this._onChange=()=>{},this.store={},this.spatialIndex=new Ue,this.tracked=!t||!1!==t.tracked,this.idStrategy=t&&t.idStrategy?t.idStrategy:Le}clone(t){return JSON.parse(JSON.stringify(t))}getId(){return this.idStrategy.getId()}has(t){return Boolean(this.store[t])}load(t,e,i,o){if(0===t.length)return[];let n=this.clone(t);const r=[],s=[];n=n.filter(t=>{null==t.id&&(t.id=this.idStrategy.getId());const i=t.id;if(e){const o=e(t);if(!o.valid)return r.push({id:i,valid:!1,reason:o.reason}),!1}if(this.tracked){if(t.properties.createdAt){if(!c(t.properties.createdAt))return r.push({id:t.id,valid:!1,reason:\"createdAt is not a valid numeric timestamp\"}),!1}else t.properties.createdAt=+new Date;if(t.properties.updatedAt){if(!c(t.properties.updatedAt))return r.push({id:t.id,valid:!1,reason:\"updatedAt is not a valid numeric timestamp\"}),!1}else t.properties.updatedAt=+new Date}return this.has(i)?(r.push({id:i,valid:!1,reason:`Feature already exists with this id: ${i}`}),!1):(this.store[i]=t,s.push(t),r.push({id:i,valid:!0}),!0)}),this.spatialIndex.load(n);const a=s.map(({id:t})=>t);return a.length>0&&(this._onChange(a,\"create\",o),i&&s.forEach(t=>{i(t)})),r}search(t,e){const i=this.spatialIndex.search(t).map(t=>this.store[t]);return this.clone(e?i.filter(e):i)}registerOnChange(t){this._onChange=(e,i,o)=>{t(e,i,o)}}getGeometryCopy(t){const e=this.store[t];if(!e)throw new Error(`No feature with this id (${t}), can not get geometry copy`);return this.clone(e.geometry)}getPropertiesCopy(t){const e=this.store[t];if(!e)throw new Error(`No feature with this id (${t}), can not get properties copy`);return this.clone(e.properties)}updateProperty(e,i){const o=new Set;e.forEach(({id:t,property:e,value:i})=>{const n=this.store[t];if(!n)throw new Error(`No feature with this (${t}), can not update geometry`);n.properties[e]!==i&&(o.add(t),void 0===i?delete n.properties[e]:n.properties[e]=i,this.tracked&&(n.properties.updatedAt=+new Date))}),this._onChange&&o.size>0&&this._onChange(Array.from(o),\"update\",i?t({},i,Ae):Ae)}updateGeometry(e,i){const o=new Set;e.forEach(({id:t,geometry:e})=>{o.add(t);const i=this.store[t];if(!i)throw new Error(`No feature with this (${t}), can not update geometry`);i.geometry=this.clone(e),this.spatialIndex.update(i),this.tracked&&(i.properties.updatedAt=+new Date)}),this._onChange&&o.size>0&&this._onChange(Array.from(o),\"update\",i?t({},i,Be):Be)}create(e,i){const o=[];return e.forEach(({geometry:e,properties:i})=>{let n,r=t({},i);this.tracked&&(n=+new Date,i?(r.createdAt=\"number\"==typeof i.createdAt?i.createdAt:n,r.updatedAt=\"number\"==typeof i.updatedAt?i.updatedAt:n):r={createdAt:n,updatedAt:n});const s=this.getId(),a={id:s,type:\"Feature\",geometry:e,properties:r};this.store[s]=a,this.spatialIndex.insert(a),o.push(s)}),this._onChange&&this._onChange([...o],\"create\",i),o}delete(t,e){t.forEach(t=>{if(!this.store[t])throw new Error(`No feature with id ${t}, can not delete`);delete this.store[t],this.spatialIndex.remove(t)}),this._onChange&&this._onChange([...t],\"delete\",e)}copy(t){return this.clone(this.store[t])}copyAll(){return this.clone(Object.keys(this.store).map(t=>this.store[t]))}copyAllWhere(t){return this.clone(Object.keys(this.store).map(t=>this.store[t]).filter(e=>e.properties&&t(e.properties)))}clear(t){const e=Object.keys(this.store);this.store={},this.spatialIndex.clear(),this._onChange(e,\"delete\",t)}size(){return Object.keys(this.store).length}}function He(t){const e=t.coordinates;let i=0;if(e&&e.length>0){i+=Math.abs(je(e[0]));for(let t=1;t<e.length;t++)i-=Math.abs(je(e[t]))}return i}const Ge=20294876564838.72,Ve=Math.PI/180;function je(t){const e=t.length;if(e<=2)return 0;let i=0,o=0;for(;o<e;)i+=(t[o+2>=e?(o+2)%e:o+2][0]*Ve-t[o][0]*Ve)*Math.sin(t[o+1===e?0:o+1][1]*Ve),o++;return i*Ge}const Ke=\"Feature is smaller than the minimum area\",Ye=(t,e)=>\"Polygon\"!==t.geometry.type?{valid:!1,reason:p}:He(t.geometry)<e?{valid:!1,reason:Ke}:{valid:!0},Xe=(t,e)=>\"Polygon\"!==t.geometry.type?{valid:!1,reason:p}:He(t.geometry)>e?{valid:!1,reason:\"Feature is larger than the maximum area\"}:{valid:!0},$e=\"Feature is not a Polygon or LineString\",qe=\"Feature intersects itself\",Ze=t=>\"Polygon\"!==t.geometry.type&&\"LineString\"!==t.geometry.type?{valid:!1,reason:$e}:b(t)?{valid:!1,reason:qe}:{valid:!0};function Je(t,e,i){const o=pt(t,e);let n=pt(e,i)-o;return n<0&&(n+=360),180-Math.abs(n-90-90)}const Qe={cancel:\"Escape\",finish:\"Enter\"},ti={start:\"crosshair\",close:\"pointer\"};class ei extends f{constructor(t){super(t,!0),this.mode=\"angled-rectangle\",this.currentCoordinate=0,this.currentId=void 0,this.keyEvents=Qe,this.cursors=ti,this.mouseMove=!1,this.mutateFeature=void 0,this.readFeature=void 0,this.updateOptions(t)}updateOptions(e){super.updateOptions(e),null!=e&&e.cursors&&(this.cursors=t({},this.cursors,e.cursors)),null===(null==e?void 0:e.keyEvents)?this.keyEvents={cancel:null,finish:null}:null!=e&&e.keyEvents&&(this.keyEvents=t({},this.keyEvents,e.keyEvents))}close(){if(void 0===this.currentId)return;if(!this.mutateFeature.updatePolygon({featureId:this.currentId,propertyMutations:{[d.CURRENTLY_DRAWING]:void 0},context:{updateType:r.Finish,action:e}}))return;const t=this.currentId;this.currentCoordinate=0,this.currentId=void 0,\"drawing\"===this.state&&this.setStarted(),this.onFinish(t,{mode:this.mode,action:e})}start(){this.setStarted(),this.setCursor(this.cursors.start)}stop(){this.cleanUp(),this.setStopped(),this.setCursor(\"unset\")}onMouseMove(t){if(this.mouseMove=!0,this.setCursor(this.cursors.start),void 0===this.currentId||0===this.currentCoordinate)return;let e=[];if(1===this.currentCoordinate)e=this.getUpdateForSecondCoordinate(t);else{if(2!==this.currentCoordinate)return;e=this.getNewSecondAndThirdCoordinates(t)}this.mutateFeature.updatePolygon({featureId:this.currentId,coordinateMutations:e,context:{updateType:r.Provisional}})}getUpdateForSecondCoordinate(t){return[{type:Y,index:1,coordinate:[t.lng,t.lat]},{type:Y,index:2,coordinate:[t.lng,t.lat]}]}getNewSecondAndThirdCoordinates(t){if(!this.currentId)throw new Error(\"No current feature being drawn\");const e=this.readFeature.getCoordinate(this.currentId,0),i=this.readFeature.getCoordinate(this.currentId,1),o=ee(e,i,this.coordinatePrecision,this.project,this.unproject),n=E(e[0],e[1]),r=E(o[0],o[1]),s=E(i[0],i[1]),a=E(t.lng,t.lat),d=tt(a,n)<tt(a,s),h=Je(n,r,a),l=d?90-h:Je(n,r,a)-90,u=tt(r,a),c=Math.cos(I(l))*u,p=pt(n,s)+(\"right\"===function(t,e,i){const o=(i.x-e.x)*(t.y-e.y)-(i.y-e.y)*(t.x-e.x);return o>1e-10?\"left\":o<-1e-10?\"right\":\"left\"}(n,s,a)?-90:90),g=ut(n,c,p),y=ut(s,c,p),m=D(g.x,g.y),f=D(y.x,y.y);return[{type:Y,index:2,coordinate:[x(f.lng,this.coordinatePrecision),x(f.lat,this.coordinatePrecision)]},{type:Y,index:3,coordinate:[x(m.lng,this.coordinatePrecision),x(m.lat,this.coordinatePrecision)]}]}onClick(t){if(\"right\"===t.button&&this.allowPointerEvent(this.pointerEvents.rightClick,t)||\"left\"===t.button&&this.allowPointerEvent(this.pointerEvents.leftClick,t)||t.isContextMenu&&this.allowPointerEvent(this.pointerEvents.contextMenu,t))if(this.currentCoordinate>0&&!this.mouseMove&&this.onMouseMove(t),this.mouseMove=!1,0===this.currentCoordinate){const{id:e}=this.mutateFeature.createPolygon({coordinates:[[t.lng,t.lat],[t.lng,t.lat],[t.lng,t.lat],[t.lng,t.lat]],properties:{mode:this.mode,[d.CURRENTLY_DRAWING]:!0}});this.currentId=e,this.currentCoordinate++,this.setDrawing()}else if(1===this.currentCoordinate&&this.currentId){const e=this.readFeature.getCoordinate(this.currentId,0);if(et([t.lng,t.lat],e))return;if(!this.mutateFeature.updatePolygon({featureId:this.currentId,coordinateMutations:[{type:Y,index:1,coordinate:[t.lng,t.lat]},{type:K,index:1,coordinate:[t.lng,t.lat]}],context:{updateType:r.Commit}}))return;this.currentCoordinate++}else 2===this.currentCoordinate&&this.currentId&&this.close()}onKeyUp(t){if(t.key===this.keyEvents.cancel)this.cleanUp();else if(t.key===this.keyEvents.finish){if(this.currentCoordinate<2)return void this.cleanUp();this.close()}}onKeyDown(){}onDragStart(){}onDrag(){}onDragEnd(){}cleanUp(){const t=this.currentId;this.currentId=void 0,this.currentCoordinate=0,\"drawing\"===this.state&&this.setStarted(),this.mutateFeature.deleteFeatureIfPresent(t)}styleFeature(e){const i=t({},{polygonFillColor:\"#3f97e0\",polygonOutlineColor:\"#3f97e0\",polygonOutlineWidth:4,polygonOutlineOpacity:1,polygonFillOpacity:.3,pointColor:\"#3f97e0\",pointOpacity:1,pointOutlineColor:\"#ffffff\",pointOutlineOpacity:1,pointOutlineWidth:0,pointWidth:6,lineStringColor:\"#3f97e0\",lineStringWidth:4,lineStringOpacity:1,zIndex:0,markerUrl:void 0,markerHeight:void 0,markerWidth:void 0,lineStringDash:void 0});return e.properties.mode===this.mode&&\"Polygon\"===e.geometry.type&&(i.polygonFillColor=this.getHexColorStylingValue(this.styles.fillColor,i.polygonFillColor,e),i.polygonOutlineColor=this.getHexColorStylingValue(this.styles.outlineColor,i.polygonOutlineColor,e),i.polygonOutlineWidth=this.getNumericStylingValue(this.styles.outlineWidth,i.polygonOutlineWidth,e),i.polygonOutlineOpacity=this.getNumericStylingValue(this.styles.outlineOpacity,1,e),i.polygonFillOpacity=this.getNumericStylingValue(this.styles.fillOpacity,i.polygonFillOpacity,e),i.zIndex=h),i}validateFeature(t){return this.validateModeFeature(t,t=>H(t,this.coordinatePrecision))}afterFeatureUpdated(t){this.currentId===t.id&&(this.currentId=void 0,this.currentCoordinate=0,\"drawing\"===this.state&&this.setStarted())}registerBehaviors(t){this.readFeature=new it(t),this.mutateFeature=new q(t,{validate:this.validate})}}function ii(t,e,i){return(e.x-t.x)*(i.y-t.y)-(e.y-t.y)*(i.x-t.x)<=0}const oi={cancel:\"Escape\",finish:\"Enter\"},ni={start:\"crosshair\",close:\"pointer\"};class ri extends f{constructor(t){super(t,!0),this.mode=\"sector\",this.currentCoordinate=0,this.currentId=void 0,this.keyEvents=oi,this.direction=void 0,this.arcPoints=64,this.cursors=ni,this.mouseMove=!1,this.readFeature=void 0,this.mutateFeature=void 0,this.updateOptions(t)}updateOptions(e){super.updateOptions(e),null!=e&&e.cursors&&(this.cursors=t({},this.cursors,e.cursors)),null===(null==e?void 0:e.keyEvents)?this.keyEvents={cancel:null,finish:null}:null!=e&&e.keyEvents&&(this.keyEvents=t({},this.keyEvents,e.keyEvents)),null!=e&&e.arcPoints&&(this.arcPoints=e.arcPoints)}close(){if(void 0===this.currentId)return;if(!this.mutateFeature.updatePolygon({featureId:this.currentId,propertyMutations:{[d.CURRENTLY_DRAWING]:void 0},coordinateMutations:{coordinates:this.readFeature.getGeometry(this.currentId).coordinates,type:$},context:{updateType:r.Finish,action:e}}))return;const t=this.currentId;this.currentCoordinate=0,this.currentId=void 0,this.direction=void 0,\"drawing\"===this.state&&this.setStarted(),this.onFinish(t,{mode:this.mode,action:e})}getSectorCoordinates(t){const e=this.readFeature.getCoordinates(this.currentId),i=e[0],o=e[1],n=[t.lng,t.lat],r=E(i[0],i[1]),s=E(o[0],o[1]),a=E(n[0],n[1]);if(void 0===this.direction){const t=ii(r,s,a);this.direction=t?\"clockwise\":\"anticlockwise\"}const d=tt(r,s),h=pt(r,s),l=pt(r,a),u=this.arcPoints,c=[i],p=gt(h),g=gt(l);let y;\"anticlockwise\"===this.direction?(y=g-p,y<0&&(y+=360)):(y=p-g,y<0&&(y+=360));const m=(\"anticlockwise\"===this.direction?1:-1)*y/u;c.push(o);for(let t=0;t<=u;t++){const e=ut(r,d,p+t*m),{lng:i,lat:o}=D(e.x,e.y),n=[x(i,this.coordinatePrecision),x(o,this.coordinatePrecision)];n[0]!==c[c.length-1][0]&&n[1]!==c[c.length-1][1]&&c.push(n)}return c.push(i),c}start(){this.setStarted(),this.setCursor(this.cursors.start)}stop(){this.cleanUp(),this.setStopped(),this.setCursor(\"unset\")}onMouseMove(t){if(this.mouseMove=!0,this.setCursor(this.cursors.start),void 0===this.currentId||0===this.currentCoordinate)return;let e;if(1===this.currentCoordinate)e=[{type:Y,index:1,coordinate:[t.lng,t.lat]},{type:Y,index:2,coordinate:[t.lng,t.lat]}];else{if(2!==this.currentCoordinate)return;{const i=this.getSectorCoordinates(t);if(!i)return;e={type:$,coordinates:[i]}}}this.mutateFeature.updatePolygon({featureId:this.currentId,coordinateMutations:e,context:{updateType:r.Provisional}})}onClick(t){if(\"right\"===t.button&&this.allowPointerEvent(this.pointerEvents.rightClick,t)||\"left\"===t.button&&this.allowPointerEvent(this.pointerEvents.leftClick,t)||t.isContextMenu&&this.allowPointerEvent(this.pointerEvents.contextMenu,t))if(this.currentCoordinate>0&&!this.mouseMove&&this.onMouseMove(t),this.mouseMove=!1,0===this.currentCoordinate){const e=this.mutateFeature.createPolygon({coordinates:[[t.lng,t.lat],[t.lng,t.lat],[t.lng,t.lat],[t.lng,t.lat]],properties:{mode:this.mode,[d.CURRENTLY_DRAWING]:!0}});this.currentId=null==e?void 0:e.id,this.currentCoordinate++,this.setDrawing()}else if(1===this.currentCoordinate&&this.currentId){if(this.readFeature.coordinateAtIndexIsIdentical({featureId:this.currentId,index:0,newCoordinate:[t.lng,t.lat]}))return;if(!this.mutateFeature.updatePolygon({featureId:this.currentId,coordinateMutations:[{type:Y,index:1,coordinate:[t.lng,t.lat]},{type:Y,index:2,coordinate:[t.lng,t.lat]}],context:{updateType:r.Provisional}}))return;this.currentCoordinate++}else 2===this.currentCoordinate&&this.currentId&&this.close()}onKeyUp(t){t.key===this.keyEvents.cancel?this.cleanUp():t.key===this.keyEvents.finish&&this.close()}onKeyDown(){}onDragStart(){}onDrag(){}onDragEnd(){}cleanUp(){const t=this.currentId;this.currentId=void 0,this.direction=void 0,this.currentCoordinate=0,\"drawing\"===this.state&&this.setStarted(),this.mutateFeature.deleteFeatureIfPresent(t)}styleFeature(e){const i=t({},{polygonFillColor:\"#3f97e0\",polygonOutlineColor:\"#3f97e0\",polygonOutlineWidth:4,polygonOutlineOpacity:1,polygonFillOpacity:.3,pointColor:\"#3f97e0\",pointOpacity:1,pointOutlineColor:\"#ffffff\",pointOutlineOpacity:1,pointOutlineWidth:0,pointWidth:6,lineStringColor:\"#3f97e0\",lineStringWidth:4,lineStringOpacity:1,zIndex:0,markerUrl:void 0,markerHeight:void 0,markerWidth:void 0,lineStringDash:void 0});return e.properties.mode===this.mode&&\"Polygon\"===e.geometry.type&&(i.polygonFillColor=this.getHexColorStylingValue(this.styles.fillColor,i.polygonFillColor,e),i.polygonOutlineColor=this.getHexColorStylingValue(this.styles.outlineColor,i.polygonOutlineColor,e),i.polygonOutlineWidth=this.getNumericStylingValue(this.styles.outlineWidth,i.polygonOutlineWidth,e),i.polygonOutlineOpacity=this.getNumericStylingValue(this.styles.outlineOpacity,1,e),i.polygonFillOpacity=this.getNumericStylingValue(this.styles.fillOpacity,i.polygonFillOpacity,e),i.zIndex=h),i}validateFeature(t){return this.validateModeFeature(t,t=>H(t,this.coordinatePrecision))}afterFeatureUpdated(t){this.currentId===t.id&&(this.currentId=void 0,this.direction=void 0,this.currentCoordinate=0,\"drawing\"===this.state&&this.setStarted())}registerBehaviors(t){this.readFeature=new it(t),this.mutateFeature=new q(t,{validate:this.validate})}}const si={cancel:\"Escape\",finish:\"Enter\"},ai={start:\"crosshair\",close:\"pointer\"};class di extends f{constructor(t){super(t,!0),this.mode=\"sensor\",this.currentCoordinate=0,this.currentId=void 0,this.currentInitialArcId=void 0,this.currentStartingPointId=void 0,this.keyEvents=si,this.direction=void 0,this.arcPoints=64,this.cursors=ai,this.mouseMove=!1,this.readFeature=void 0,this.mutateFeature=void 0,this.updateOptions(t)}updateOptions(e){super.updateOptions(e),null!=e&&e.cursors&&(this.cursors=t({},this.cursors,e.cursors)),null===(null==e?void 0:e.keyEvents)?this.keyEvents={cancel:null,finish:null}:null!=e&&e.keyEvents&&(this.keyEvents=t({},this.keyEvents,e.keyEvents)),null!=e&&e.arcPoints&&(this.arcPoints=e.arcPoints)}start(){this.setStarted(),this.setCursor(this.cursors.start)}stop(){this.cleanUp(),this.setStopped(),this.setCursor(\"unset\")}onMouseMove(t){if(this.mouseMove=!0,this.setCursor(this.cursors.start),void 0!==this.currentInitialArcId&&void 0!==this.currentStartingPointId&&0!==this.currentCoordinate)if(2===this.currentCoordinate){const e=this.getUpdatedLineStringCoordinates(t);if(!e)return;this.mutateFeature.updateLineString({featureId:this.currentInitialArcId,coordinateMutations:{type:$,coordinates:e},context:{updateType:r.Provisional}})}else if(3===this.currentCoordinate){const e=this.getUpdatedPolygonCoordinates(t);if(!e)return;if(this.currentId)this.mutateFeature.updatePolygon({featureId:this.currentId,coordinateMutations:{type:$,coordinates:[e]},context:{updateType:r.Provisional}});else{const t=this.mutateFeature.createPolygon({coordinates:e,properties:{mode:this.mode,[d.CURRENTLY_DRAWING]:!0}});if(!t)return;this.currentId=t.id}}}onClick(t){if(\"right\"===t.button&&this.allowPointerEvent(this.pointerEvents.rightClick,t)||\"left\"===t.button&&this.allowPointerEvent(this.pointerEvents.leftClick,t)||t.isContextMenu&&this.allowPointerEvent(this.pointerEvents.contextMenu,t))if(this.currentCoordinate>0&&!this.mouseMove&&this.onMouseMove(t),this.mouseMove=!1,0===this.currentCoordinate){const e=this.mutateFeature.createPoint({coordinates:[t.lng,t.lat],properties:{mode:this.mode}});if(!e)return;this.currentStartingPointId=e.id,this.currentCoordinate++,this.setDrawing()}else if(1===this.currentCoordinate&&this.currentStartingPointId){const e=this.mutateFeature.createLineString({coordinates:[[t.lng,t.lat],[t.lng,t.lat]],properties:{mode:this.mode}});if(!e)return;this.currentInitialArcId=e.id,this.currentCoordinate++}else 2===this.currentCoordinate&&this.currentStartingPointId?this.currentCoordinate++:3===this.currentCoordinate&&this.currentStartingPointId&&this.close()}onKeyUp(t){t.key===this.keyEvents.cancel?this.cleanUp():t.key===this.keyEvents.finish&&this.close()}onKeyDown(){}onDragStart(){}onDrag(){}onDragEnd(){}cleanUp(){this.mutateFeature.deleteFeatureIfPresent(this.currentStartingPointId),this.mutateFeature.deleteFeatureIfPresent(this.currentInitialArcId),this.mutateFeature.deleteFeatureIfPresent(this.currentId),this.currentStartingPointId=void 0,this.direction=void 0,this.currentId=void 0,this.currentCoordinate=0,\"drawing\"===this.state&&this.setStarted()}styleFeature(e){const i=t({},{polygonFillColor:\"#3f97e0\",polygonOutlineColor:\"#3f97e0\",polygonOutlineWidth:4,polygonOutlineOpacity:1,polygonFillOpacity:.3,pointColor:\"#3f97e0\",pointOpacity:1,pointOutlineColor:\"#ffffff\",pointOutlineOpacity:1,pointOutlineWidth:0,pointWidth:6,lineStringColor:\"#3f97e0\",lineStringWidth:4,lineStringOpacity:1,zIndex:0,markerUrl:void 0,markerHeight:void 0,markerWidth:void 0,lineStringDash:void 0});return e.properties.mode===this.mode&&(\"Polygon\"===e.geometry.type?(i.polygonFillColor=this.getHexColorStylingValue(this.styles.fillColor,i.polygonFillColor,e),i.polygonOutlineColor=this.getHexColorStylingValue(this.styles.outlineColor,i.polygonOutlineColor,e),i.polygonOutlineWidth=this.getNumericStylingValue(this.styles.outlineWidth,i.polygonOutlineWidth,e),i.polygonOutlineOpacity=this.getNumericStylingValue(this.styles.outlineOpacity,1,e),i.polygonFillOpacity=this.getNumericStylingValue(this.styles.fillOpacity,i.polygonFillOpacity,e),i.zIndex=h):\"LineString\"===e.geometry.type?(i.lineStringColor=this.getHexColorStylingValue(this.styles.outlineColor,i.polygonOutlineColor,e),i.lineStringWidth=this.getNumericStylingValue(this.styles.outlineWidth,i.polygonOutlineWidth,e),i.zIndex=h):\"Point\"===e.geometry.type&&(i.pointColor=this.getHexColorStylingValue(this.styles.centerPointColor,i.pointColor,e),i.pointOpacity=this.getNumericStylingValue(this.styles.centerPointOpacity,1,e),i.pointWidth=this.getNumericStylingValue(this.styles.centerPointWidth,i.pointWidth,e),i.pointOutlineColor=this.getHexColorStylingValue(this.styles.centerPointOutlineColor,i.pointOutlineColor,e),i.pointOutlineOpacity=this.getNumericStylingValue(this.styles.centerPointOutlineOpacity,1,e),i.pointOutlineWidth=this.getNumericStylingValue(this.styles.centerPointOutlineWidth,i.pointOutlineWidth,e),i.zIndex=20)),i}validateFeature(t){return this.validateModeFeature(t,t=>H(t,this.coordinatePrecision))}afterFeatureUpdated(t){this.currentId===t.id&&(this.mutateFeature.deleteFeatureIfPresent(this.currentStartingPointId),this.mutateFeature.deleteFeatureIfPresent(this.currentInitialArcId),this.currentStartingPointId=void 0,this.direction=void 0,this.currentId=void 0,this.currentCoordinate=0,\"drawing\"===this.state&&this.setStarted())}registerBehaviors(t){this.readFeature=new it(t),this.mutateFeature=new q(t,{validate:this.validate})}close(){if(void 0===this.currentStartingPointId)return;const t=this.currentStartingPointId,i=this.currentInitialArcId;if(this.currentId&&!this.mutateFeature.updatePolygon({featureId:this.currentId,propertyMutations:{[d.CURRENTLY_DRAWING]:void 0},coordinateMutations:{coordinates:this.readFeature.getGeometry(this.currentId).coordinates,type:$},context:{updateType:r.Finish,action:e}}))return;const o=this.currentId;this.mutateFeature.deleteFeatureIfPresent(t),this.mutateFeature.deleteFeatureIfPresent(i),this.currentCoordinate=0,this.currentStartingPointId=void 0,this.currentInitialArcId=void 0,this.currentId=void 0,this.direction=void 0,\"drawing\"===this.state&&this.setStarted(),o&&this.onFinish(o,{mode:this.mode,action:e})}getUpdatedPolygonCoordinates(t){if(void 0===this.currentInitialArcId||void 0===this.currentStartingPointId||this.currentCoordinate<3)return;const e=this.readFeature.getCoordinates(this.currentInitialArcId);if(e.length<2)return;if(!this.direction)return;const i=this.readFeature.getGeometry(this.currentStartingPointId).coordinates,o=e[0],n=e[e.length-1],r=E(t.lng,t.lat),s=E(o[0],o[1]),a=E(n[0],n[1]),d=E(i[0],i[1]),h=tt(d,s),l=tt(d,r)<h?s:r,u=pt(d,r),c=pt(d,s),p=pt(d,a),g=gt(c),y=gt(p),m=gt(u);if(this.notInSector({normalizedCursor:m,normalizedStart:g,normalizedEnd:y,direction:this.direction}))return;const f=this.getDeltaBearing(this.direction,g,y),v=this.arcPoints,C=(\"anticlockwise\"===this.direction?1:-1)*f/v,P=tt(d,l),I=[];for(let t=0;t<=v;t++){const i=ut(d,P,g+t*C),{lng:o,lat:n}=D(i.x,i.y),r=[x(o,this.coordinatePrecision),x(n,this.coordinatePrecision)];r[0]!==e[e.length-1][0]&&r[1]!==e[e.length-1][1]&&I.unshift(r)}return e.push(...I),e.push(e[0]),e}getUpdatedLineStringCoordinates(t){if(void 0===this.currentInitialArcId||void 0===this.currentStartingPointId||this.currentCoordinate<2)return;const e=this.readFeature.getGeometry(this.currentInitialArcId).coordinates,i=this.readFeature.getGeometry(this.currentStartingPointId).coordinates,o=e[0],n=[t.lng,t.lat],r=E(o[0],o[1]),s=E(n[0],n[1]),a=E(i[0],i[1]),d=tt(a,r);if(void 0===this.direction){const t=ii(a,r,s);this.direction=t?\"clockwise\":\"anticlockwise\"}const h=pt(a,r),l=pt(a,s),u=this.arcPoints,c=[o],p=gt(h),g=gt(l);let y;\"anticlockwise\"===this.direction?(y=g-p,y<0&&(y+=360)):(y=p-g,y<0&&(y+=360));const m=(\"anticlockwise\"===this.direction?1:-1)*y/u;for(let t=0;t<=u;t++){const e=ut(a,d,p+t*m),{lng:i,lat:o}=D(e.x,e.y),n=[x(i,this.coordinatePrecision),x(o,this.coordinatePrecision)];n[0]!==c[c.length-1][0]&&n[1]!==c[c.length-1][1]&&c.push(n)}return c}getDeltaBearing(t,e,i){let o;return\"anticlockwise\"===t?(o=i-e,o<0&&(o+=360)):(o=e-i,o<0&&(o+=360)),o}notInSector({normalizedCursor:t,normalizedStart:e,normalizedEnd:i,direction:o}){return\"clockwise\"===o?e<=i?t>=e&&t<=i:t>=e||t<=i:e>=i?t<=e&&t>=i:t<=e||t>=i}}class hi{constructor({name:t,callback:e,unregister:i,register:o}){this.name=void 0,this.callback=void 0,this.registered=!1,this.register=void 0,this.unregister=void 0,this.name=t,this.register=()=>{this.registered||(this.registered=!0,o(e))},this.unregister=()=>{this.register&&(this.registered=!1,i(e))},this.callback=e}}var li={__proto__:null,GeoJSONStore:ze,TerraDrawBaseDrawMode:f,TerraDrawBaseSelectMode:v,TerraDrawBaseAdapter:class{constructor(t){this._nextKeyUpIsContextMenu=!1,this._lastPointerDownEventTarget=void 0,this._ignoreMismatchedPointerEvents=!1,this._minPixelDragDistance=void 0,this._minPixelDragDistanceDrawing=void 0,this._minPixelDragDistanceSelecting=void 0,this._lastDrawEvent=void 0,this._coordinatePrecision=void 0,this._heldKeys=new Set,this._listeners=[],this._dragState=\"not-dragging\",this._currentModeCallbacks=void 0,this._ignoreMismatchedPointerEvents=\"boolean\"==typeof t.ignoreMismatchedPointerEvents&&t.ignoreMismatchedPointerEvents,this._minPixelDragDistance=\"number\"==typeof t.minPixelDragDistance?t.minPixelDragDistance:1,this._minPixelDragDistanceSelecting=\"number\"==typeof t.minPixelDragDistanceSelecting?t.minPixelDragDistanceSelecting:1,this._minPixelDragDistanceDrawing=\"number\"==typeof t.minPixelDragDistanceDrawing?t.minPixelDragDistanceDrawing:8,this._coordinatePrecision=\"number\"==typeof t.coordinatePrecision?t.coordinatePrecision:9}getButton(t){return-1===t.button?\"neither\":0===t.button?\"left\":1===t.button?\"middle\":2===t.button?\"right\":\"neither\"}getMapElementXYPosition(t){const e=this.getMapEventElement(t.type),{left:i,top:o}=e.getBoundingClientRect();return{containerX:t.clientX-i,containerY:t.clientY-o}}getDrawEventFromEvent(t,e=!1){const i=this.getLngLatFromEvent(t);if(!i)return null;const{lng:o,lat:n}=i,{containerX:r,containerY:s}=this.getMapElementXYPosition(t),a=this.getButton(t),d=Array.from(this._heldKeys);return{lng:x(o,this._coordinatePrecision),lat:x(n,this._coordinatePrecision),containerX:r,containerY:s,button:a,heldKeys:d,isContextMenu:e}}register(t){this._currentModeCallbacks=t,this._listeners=this.getAdapterListeners(),this._listeners.forEach(t=>{t.register()})}getCoordinatePrecision(){return this._coordinatePrecision}getAdapterListeners(){return[new hi({name:\"pointerdown\",callback:t=>{if(!this._currentModeCallbacks)return;if(!t.isPrimary)return;const e=this.getDrawEventFromEvent(t);e&&(this._dragState=\"pre-dragging\",this._lastDrawEvent=e,this._lastPointerDownEventTarget=t.target?t.target:void 0)},register:t=>{this.getMapEventElement(\"pointerdown\").addEventListener(\"pointerdown\",t)},unregister:t=>{this.getMapEventElement(\"pointerdown\").removeEventListener(\"pointerdown\",t)}}),new hi({name:\"pointermove\",callback:t=>{if(!this._currentModeCallbacks)return;if(!t.isPrimary)return;t.preventDefault();const e=this.getDrawEventFromEvent(t);if(e)if(\"not-dragging\"===this._dragState)this._currentModeCallbacks.onMouseMove(e),this._lastDrawEvent=e;else if(\"pre-dragging\"===this._dragState){if(!this._lastDrawEvent)return;const t={x:this._lastDrawEvent.containerX,y:this._lastDrawEvent.containerY},i={x:e.containerX,y:e.containerY},o=this._currentModeCallbacks.getState(),n=tt(t,i);let r=!1;if(r=\"drawing\"===o?n<this._minPixelDragDistanceDrawing:\"selecting\"===o?n<this._minPixelDragDistanceSelecting:n<this._minPixelDragDistance,r)return;this._nextKeyUpIsContextMenu=!1,this._dragState=\"dragging\",this._currentModeCallbacks.onDragStart(e,t=>{this.setDraggability.bind(this)(t)})}else\"dragging\"===this._dragState&&this._currentModeCallbacks.onDrag(e,t=>{this.setDraggability.bind(this)(t)})},register:t=>{this.getMapEventElement(\"pointermove\").addEventListener(\"pointermove\",t)},unregister:t=>{this.getMapEventElement(\"pointermove\").removeEventListener(\"pointermove\",t)}}),new hi({name:\"contextmenu\",callback:t=>{this._currentModeCallbacks&&(t.preventDefault(),this._nextKeyUpIsContextMenu=!0)},register:t=>{this.getMapEventElement(\"contextmenu\").addEventListener(\"contextmenu\",t)},unregister:t=>{this.getMapEventElement(\"contextmenu\").removeEventListener(\"contextmenu\",t)}}),new hi({name:\"pointerup\",callback:t=>{if(!this._currentModeCallbacks)return;if(t.target!==this.getMapEventElement(\"pointerup\"))return;if(this._ignoreMismatchedPointerEvents&&this._lastPointerDownEventTarget!==t.target)return;if(this._lastPointerDownEventTarget=void 0,!t.isPrimary)return;const e=this.getDrawEventFromEvent(t);e&&(\"dragging\"===this._dragState?this._currentModeCallbacks.onDragEnd(e,t=>{this.setDraggability.bind(this)(t)}):\"not-dragging\"!==this._dragState&&\"pre-dragging\"!==this._dragState||(this._nextKeyUpIsContextMenu&&(e.isContextMenu=!0,this._nextKeyUpIsContextMenu=!1),this._currentModeCallbacks.onClick(e)),this._dragState=\"not-dragging\",this.setDraggability(!0))},register:t=>{this.getMapEventElement(\"pointerup\").addEventListener(\"pointerup\",t)},unregister:t=>{this.getMapEventElement(\"pointerup\").removeEventListener(\"pointerup\",t)}}),new hi({name:\"keyup\",callback:t=>{this._currentModeCallbacks&&(this._heldKeys.delete(t.key),this._currentModeCallbacks.onKeyUp({key:t.key,heldKeys:Array.from(this._heldKeys),preventDefault:()=>t.preventDefault()}))},register:t=>{this.getMapEventElement(\"keyup\").addEventListener(\"keyup\",t)},unregister:t=>{this.getMapEventElement(\"keyup\").removeEventListener(\"keyup\",t)}}),new hi({name:\"keydown\",callback:t=>{this._currentModeCallbacks&&(this._heldKeys.add(t.key),this._currentModeCallbacks.onKeyDown({key:t.key,heldKeys:Array.from(this._heldKeys),preventDefault:()=>t.preventDefault()}))},register:t=>{this.getMapEventElement(\"keydown\").addEventListener(\"keydown\",t)},unregister:t=>{this.getMapEventElement(\"keydown\").removeEventListener(\"keydown\",t)}})]}unregister(){this._listeners.forEach(t=>{t.unregister()}),this.clear(),this._currentModeCallbacks=void 0,this._lastDrawEvent=void 0,this._lastPointerDownEventTarget=void 0,this._nextKeyUpIsContextMenu=!1}},getDefaultStyling:()=>({polygonFillColor:\"#3f97e0\",polygonOutlineColor:\"#3f97e0\",polygonOutlineWidth:4,polygonOutlineOpacity:1,polygonFillOpacity:.3,pointColor:\"#3f97e0\",pointOpacity:1,pointOutlineColor:\"#ffffff\",pointOutlineOpacity:1,pointOutlineWidth:0,pointWidth:6,lineStringColor:\"#3f97e0\",lineStringWidth:4,lineStringOpacity:1,zIndex:0,markerUrl:void 0,markerHeight:void 0,markerWidth:void 0,lineStringDash:void 0}),SELECT_PROPERTIES:a};const ui={ValidationReasonFeatureNotPoint:Bt,ValidationReasonFeatureInvalidCoordinates:At,ValidationReasonFeatureInvalidCoordinatePrecision:zt,ValidationReasonFeatureNotPolygon:p,ValidationReasonFeatureHasHoles:U,ValidationReasonFeatureLessThanFourCoordinates:L,ValidationReasonFeatureHasInvalidCoordinates:B,ValidationReasonFeatureCoordinatesNotClosed:A,ValidationReasonFeatureNotPolygonOrLineString:$e,ValidationReasonFeatureSelfIntersects:qe,ValidationReasonFeatureLessThanMinSize:Ke,ValidationReasonModeMismatch:g},ci={cancel:\"Escape\",finish:\"Enter\"},pi={start:\"crosshair\",close:\"pointer\"};class gi extends f{constructor(t){super(t,!0),this.mode=\"freehand-linestring\",this.canClose=!1,this.currentId=void 0,this.minDistance=20,this.keyEvents=ci,this.cursors=pi,this.preventNewFeature=!1,this.mutateFeature=void 0,this.readFeature=void 0,this.pixelDistance=void 0,this.closingPoints=void 0,this.updateOptions(t)}updateOptions(e){super.updateOptions(e),null!=e&&e.minDistance&&(this.minDistance=e.minDistance),null===(null==e?void 0:e.keyEvents)?this.keyEvents={cancel:null,finish:null}:null!=e&&e.keyEvents&&(this.keyEvents=t({},this.keyEvents,e.keyEvents)),null!=e&&e.cursors&&(this.cursors=t({},this.cursors,e.cursors))}close(){if(void 0===this.currentId)return;if(!this.mutateFeature.updateLineString({featureId:this.currentId,propertyMutations:{[d.CURRENTLY_DRAWING]:void 0},context:{updateType:r.Finish,action:e}}))return;const t=this.currentId;this.closingPoints.delete(),this.canClose=!1,this.currentId=void 0,\"drawing\"===this.state&&this.setStarted(),this.onFinish(t,{mode:this.mode,action:e})}start(){this.setStarted(),this.setCursor(this.cursors.start)}stop(){this.cleanUp(),this.setStopped(),this.setCursor(\"unset\")}onMouseMove(t){if(void 0===this.currentId||!1===this.canClose)return void this.setCursor(this.cursors.start);const[e,i]=this.readFeature.getCoordinate(this.currentId,-2),{x:o,y:n}=this.project(e,i),s=tt({x:o,y:n},{x:t.containerX,y:t.containerY}),[a,d]=this.readFeature.getCoordinate(this.currentId,-1),{x:h,y:l}=this.project(a,d),u=tt({x:h,y:l},{x:t.containerX,y:t.containerY});if(this.setCursor(u<this.pointerDistance?this.cursors.close:this.cursors.start),s<this.minDistance)return;const c=this.mutateFeature.updateLineString({featureId:this.currentId,coordinateMutations:[{type:K,index:-1,coordinate:[t.lng,t.lat]}],context:{updateType:r.Provisional}});c&&this.closingPoints.update(c.geometry.coordinates)}onClick(t){if(\"right\"===t.button&&this.allowPointerEvent(this.pointerEvents.rightClick,t)||\"left\"===t.button&&this.allowPointerEvent(this.pointerEvents.leftClick,t)||t.isContextMenu&&this.allowPointerEvent(this.pointerEvents.contextMenu,t)){if(this.preventNewFeature)return;if(!1===this.canClose){const{id:e,geometry:i}=this.mutateFeature.createLineString({coordinates:[[t.lng,t.lat],[t.lng,t.lat]],properties:{mode:this.mode,[d.CURRENTLY_DRAWING]:!0}});return this.closingPoints.create(i.coordinates),this.currentId=e,this.canClose=!0,void(\"drawing\"!==this.state&&this.setDrawing())}this.close()}}onKeyDown(){}onKeyUp(t){t.key===this.keyEvents.cancel?this.cleanUp():t.key===this.keyEvents.finish&&!0===this.canClose&&this.close()}onDragStart(){}onDrag(){}onDragEnd(){}cleanUp(){const t=this.currentId;this.currentId=void 0,this.canClose=!1,\"drawing\"===this.state&&this.setStarted(),this.mutateFeature.deleteFeatureIfPresent(t),this.closingPoints.delete()}styleFeature(e){const i=t({},{polygonFillColor:\"#3f97e0\",polygonOutlineColor:\"#3f97e0\",polygonOutlineWidth:4,polygonOutlineOpacity:1,polygonFillOpacity:.3,pointColor:\"#3f97e0\",pointOpacity:1,pointOutlineColor:\"#ffffff\",pointOutlineOpacity:1,pointOutlineWidth:0,pointWidth:6,lineStringColor:\"#3f97e0\",lineStringWidth:4,lineStringOpacity:1,zIndex:0,markerUrl:void 0,markerHeight:void 0,markerWidth:void 0,lineStringDash:void 0});return\"Feature\"===e.type&&\"LineString\"===e.geometry.type&&e.properties.mode===this.mode?(i.lineStringDash=this.styles.lineStringDash,i.lineStringColor=this.getHexColorStylingValue(this.styles.lineStringColor,i.lineStringColor,e),i.lineStringOpacity=this.getNumericStylingValue(this.styles.lineStringOpacity,void 0===i.lineStringOpacity?1:i.lineStringOpacity,e),i.lineStringWidth=this.getNumericStylingValue(this.styles.lineStringWidth,i.lineStringWidth,e),i.zIndex=h,i):\"Feature\"===e.type&&\"Point\"===e.geometry.type&&e.properties.mode===this.mode?(i.pointWidth=this.getNumericStylingValue(this.styles.closingPointWidth,i.pointWidth,e),i.pointOpacity=this.getNumericStylingValue(this.styles.closingPointOpacity,1,e),i.pointColor=this.getHexColorStylingValue(this.styles.closingPointColor,i.pointColor,e),i.pointOutlineColor=this.getHexColorStylingValue(this.styles.closingPointOutlineColor,i.pointOutlineColor,e),i.pointOutlineOpacity=this.getNumericStylingValue(this.styles.closingPointOutlineOpacity,1,e),i.pointOutlineWidth=this.getNumericStylingValue(this.styles.closingPointOutlineWidth,2,e),i.zIndex=50,i):i}validateFeature(t){return this.validateModeFeature(t,t=>Ct(t,this.coordinatePrecision))}afterFeatureUpdated(t){this.currentId===t.id&&(this.closingPoints.delete(),this.canClose=!1,this.currentId=void 0)}registerBehaviors(t){this.readFeature=new it(t),this.mutateFeature=new q(t,{validate:this.validate}),this.pixelDistance=new dt(t),this.closingPoints=new kt(t,this.pixelDistance,this.mutateFeature,this.readFeature)}}function yi(t){if(null===t)return!0;if(\"boolean\"==typeof t)return!0;if(\"string\"==typeof t)return!0;if(void 0===t)return!1;if(\"number\"==typeof t)return Number.isFinite(t);if(\"bigint\"==typeof t)return!1;if(\"symbol\"==typeof t)return!1;if(\"function\"==typeof t)return!1;if(t instanceof RegExp)return!1;if(t instanceof Map)return!1;if(t instanceof Set)return!1;if(t instanceof Date)return!1;if(\"object\"==typeof t&&null!==t&&!Array.isArray(t)){const e=Object.getPrototypeOf(t);if(e!==Object.prototype&&null!==e)return!1}if(ArrayBuffer.isView(t)&&!(t instanceof DataView))return!1;if(Array.isArray(t))for(const e of t)if(!yi(e))return!1;return\"object\"==typeof t&&Object.keys(t).every(e=>\"string\"==typeof e&&yi(t[e]))}const mi={create:\"crosshair\",dragStart:\"grabbing\",dragEnd:\"crosshair\"};class fi extends f{constructor(t){super(t,!0),this.mode=\"marker\",this.cursors=mi,this.editable=!1,this.editedFeatureId=void 0,this.pixelDistance=void 0,this.clickBoundingBox=void 0,this.pointSearch=void 0,this.mutateFeature=void 0,this.updateOptions(t)}updateOptions(e){super.updateOptions(e),null!=e&&e.cursors&&(this.cursors=t({},this.cursors,e.cursors)),null!=e&&e.editable&&(this.editable=e.editable)}start(){this.setStarted(),this.setCursor(this.cursors.create)}stop(){this.cleanUp(),this.setStopped(),this.setCursor(\"unset\")}onClick(t){\"right\"===t.button&&this.allowPointerEvent(this.pointerEvents.rightClick,t)||t.isContextMenu&&this.allowPointerEvent(this.pointerEvents.contextMenu,t)?this.onRightClick(t):\"left\"===t.button&&this.allowPointerEvent(this.pointerEvents.leftClick,t)&&this.onLeftClick(t)}onMouseMove(){}onKeyDown(){}onKeyUp(){}cleanUp(){this.editedFeatureId=void 0}onDragStart(t,e){if(this.allowPointerEvent(this.pointerEvents.onDragStart,t)){if(this.editable){const e=this.pointSearch.getNearestPointFeature(t);this.editedFeatureId=null==e?void 0:e.id}this.editedFeatureId&&(this.setCursor(this.cursors.dragStart),e(!1))}}onDrag(t,e){this.allowPointerEvent(this.pointerEvents.onDrag,t)&&void 0!==this.editedFeatureId&&this.mutateFeature.updatePoint({featureId:this.editedFeatureId,coordinateMutations:{type:$,coordinates:[t.lng,t.lat]},propertyMutations:{[d.EDITED]:!0},context:{updateType:r.Provisional}})}onDragEnd(t,i){if(!this.allowPointerEvent(this.pointerEvents.onDragEnd,t))return;if(void 0===this.editedFeatureId)return;if(!this.mutateFeature.updatePoint({featureId:this.editedFeatureId,propertyMutations:{mode:this.mode,[d.EDITED]:!1},context:{updateType:r.Finish,action:\"edit\"}}))return;const o=this.editedFeatureId;this.setCursor(this.cursors.dragEnd),this.editedFeatureId=void 0,i(!0),this.onFinish(o,{mode:this.mode,action:e})}registerBehaviors(t){this.pixelDistance=new dt(t),this.clickBoundingBox=new at(t),this.pointSearch=new Gt(t,this.pixelDistance,this.clickBoundingBox),this.mutateFeature=new q(t,{validate:this.validate})}styleFeature(e){const i=t({},{polygonFillColor:\"#3f97e0\",polygonOutlineColor:\"#3f97e0\",polygonOutlineWidth:4,polygonOutlineOpacity:1,polygonFillOpacity:.3,pointColor:\"#3f97e0\",pointOpacity:1,pointOutlineColor:\"#ffffff\",pointOutlineOpacity:1,pointOutlineWidth:0,pointWidth:6,lineStringColor:\"#3f97e0\",lineStringWidth:4,lineStringOpacity:1,zIndex:0,markerUrl:void 0,markerHeight:void 0,markerWidth:void 0,lineStringDash:void 0});var o,n,r;return\"Feature\"===e.type&&\"Point\"===e.geometry.type&&e.properties.mode===this.mode&&(i.zIndex=30,i.markerHeight=this.getNumericStylingValue(null==(o=this.styles)?void 0:o.markerHeight,40,e),i.markerWidth=this.getNumericStylingValue(null==(n=this.styles)?void 0:n.markerWidth,32,e),i.markerUrl=this.getUrlStylingValue(null==(r=this.styles)?void 0:r.markerUrl,s,e)),i}validateFeature(t){return this.validateModeFeature(t,t=>Ht(t,this.coordinatePrecision))}onLeftClick(t){const i=this.mutateFeature.createPoint({coordinates:[t.lng,t.lat],properties:{mode:this.mode,[d.MARKER]:!0},context:{updateType:r.Finish,action:e}});i&&this.onFinish(i.id,{mode:this.mode,action:e})}onRightClick(t){if(!this.editable)return;const e=this.pointSearch.getNearestPointFeature(t);e&&this.mutateFeature.deleteFeatureIfPresent(e.id)}afterFeatureUpdated(t){this.editedFeatureId===t.id&&(this.editedFeatureId=void 0,this.setCursor(this.cursors.create))}}const vi=[{key:\"z\",heldKeys:[\"meta\"]},{key:\"z\",heldKeys:[\"control\"]}],Ci=[{key:\"z\",heldKeys:[\"meta\",\"shift\"]},{key:\"z\",heldKeys:[\"control\",\"shift\"]},{key:\"y\",heldKeys:[\"control\"]}],Pi=(t,e)=>{const i=t.key.toLowerCase(),o=new Set(t.heldKeys.map(t=>t.toLowerCase()).filter(t=>t!==i));if(e.key.toLowerCase()!==i)return!1;const n=new Set(e.heldKeys.map(t=>t.toLowerCase()));if(o.size!==n.size)return!1;for(const t of n)if(!o.has(t))return!1;return!0};class Ii{constructor(t){var e,i;this.undoKeyboardShortcuts=void 0,this.redoKeyboardShortcuts=void 0,this.undoKeyboardShortcuts=null!=(e=null==t?void 0:t.undo)?e:vi,this.redoKeyboardShortcuts=null!=(i=null==t?void 0:t.redo)?i:Ci}isUndoKeyboardShortcut(t){return this.undoKeyboardShortcuts.some(e=>Pi(t,e))}isRedoKeyboardShortcut(t){return this.redoKeyboardShortcuts.some(e=>Pi(t,e))}}function Si(t){return void 0!==t&&Number.isFinite(t)?Math.max(0,Math.floor(t)):Number.POSITIVE_INFINITY}const Fi=\"undo\",xi=\"redo\",Oi=\"push\",Mi=\"mode\",wi=\"session\";class Ei{constructor(t){this.getModeState=void 0,this.getModeHistorySizes=void 0,this.undoMode=void 0,this.redoMode=void 0,this.clearModeHistory=void 0,this.onHistoryChange=void 0,this.maxStackSize=void 0,this.lastHistorySizes={undoSize:0,redoSize:0},this.maxStackSize=Si(null==t?void 0:t.maxStackSize)}getMaxStackSize(){return this.maxStackSize}register(t){this.getModeState=t.getModeState,this.getModeHistorySizes=t.getModeHistorySizes,this.undoMode=t.undoMode,this.redoMode=t.redoMode,this.clearModeHistory=t.clearModeHistory,this.onHistoryChange=t.onHistoryChange}inDrawingState(){return!!this.getModeState&&\"drawing\"===this.getModeState()}canUndo(){if(!this.inDrawingState())return!1;const{undoSize:t}=this.getHistorySizes();return t>0}canRedo(){if(!this.inDrawingState())return!1;const{redoSize:t}=this.getHistorySizes();return t>0}undo(){return!(!this.canUndo()||!this.undoMode||(this.undoMode(),this.emitHistoryChange(Fi),0))}redo(){return!(!this.canRedo()||!this.redoMode||(this.redoMode(),this.emitHistoryChange(xi),0))}clearHistory(){this.clearModeHistory&&this.clearModeHistory(),this.lastHistorySizes={undoSize:0,redoSize:0}}getHistorySizes(){return this.getModeHistorySizes?this.getModeHistorySizes():{undoSize:0,redoSize:0}}undoSize(){return this.getHistorySizes().undoSize}redoSize(){return this.getHistorySizes().redoSize}emitPushIfHistoryChangedFromLastSnapshot(){if(!this.inDrawingState())return;const t=this.getHistorySizes();t.undoSize===this.lastHistorySizes.undoSize&&t.redoSize===this.lastHistorySizes.redoSize||this.emitHistoryChange(Oi)}emitPushIfHistoryChanged(t){if(!this.inDrawingState())return;const e=this.getHistorySizes();e.undoSize===t.undoSize&&e.redoSize===t.redoSize||this.emitHistoryChange(Oi)}emitHistoryChange(t){if(!this.onHistoryChange)return;const{undoSize:e,redoSize:i}=this.getHistorySizes();this.lastHistorySizes={undoSize:e,redoSize:i},this.onHistoryChange({cause:t,stack:Mi,undoStackSize:e,redoStackSize:i})}}class Di{constructor(t){this.draw=void 0,this.onHistoryChange=void 0,this.maxStackSize=void 0,this.historyById={},this.undoStack=[],this.ignoreProgrammaticCreate={},this.ignoreProgrammaticDelete={},this.deletedFeatureIds={},this.redoStack=[],this.isReplayingHistory=!1,this.emitStackChange=t=>{this.onHistoryChange&&this.onHistoryChange({cause:t,stack:wi,undoStackSize:this.undoStack.length,redoStackSize:this.redoStack.length})},this.handleChange=(t,e,i)=>{if(!this.draw||this.isDrawing())return;if(0===this.maxStackSize)return;if(\"update\"===e){if(void 0===i||!(\"origin\"in i)||\"api\"!==i.origin||this.isReplayingHistory)return;const e=Array.isArray(t)?t:[t];let o=!1;for(const t of e){if(null==t)continue;const e=String(t),i=this.draw.getSnapshotFeature(t);i&&(this.historyById[e]||(this.historyById[e]=[]),this.historyById[e].push(i),this.pushUndoStackEntry({id:t,toIndex:this.historyById[e].length-1,action:\"single\"}),o=!0)}return void(o&&(this.redoStack.length=0,this.emitStackChange(Oi)))}if(\"delete\"!==e&&\"create\"!==e)return;if(\"create\"===e){if(void 0===i||!(\"origin\"in i)||\"api\"!==i.origin)return;let e=!1;const o=Array.isArray(t)?t:[t],n=[];for(const t of o){if(this.ignoreProgrammaticCreate[t]){delete this.ignoreProgrammaticCreate[t],delete this.deletedFeatureIds[t];continue}const i=String(t),o=this.draw.getSnapshotFeature(t);o&&(this.deletedFeatureIds[t]&&(this.historyById[i]=[],delete this.deletedFeatureIds[t]),this.historyById[i]||(this.historyById[i]=[]),this.historyById[i].push(o),n.push({id:t,toIndex:this.historyById[i].length-1,snapshot:o}),e=!0)}if(n.length>1)this.pushUndoStackEntry({id:n[0].id,toIndex:n[0].toIndex,action:\"batch-create\",metadata:{entries:n}});else if(1===n.length){const t=n[0];this.pushUndoStackEntry({id:t.id,toIndex:t.toIndex,action:\"single\"})}return void(e&&(this.redoStack.length=0,this.emitStackChange(Oi)))}let o=!1;const n=Array.isArray(t)?t:[t],r=[];for(const t of n){const e=String(t);if(this.ignoreProgrammaticDelete[t]){delete this.ignoreProgrammaticDelete[t];continue}if(!this.historyById[e])continue;const i=this.historyById[e].length-1;if(i>=0){const n=this.historyById[e][i];if(!n)continue;r.push({id:t,toIndex:i,snapshot:n}),this.deletedFeatureIds[t]=!0,o=!0}}if(r.length>1)this.pushUndoStackEntry({id:r[0].id,toIndex:r[0].toIndex,action:\"batch-delete\",metadata:{entries:r}});else if(1===r.length){const t=r[0];this.pushUndoStackEntry({id:t.id,toIndex:t.toIndex,action:\"single\"})}o&&(this.redoStack.length=0,this.emitStackChange(Oi))},this.handleFinish=t=>{if(!this.draw)return;if(0===this.maxStackSize)return;if(this.isReplayingHistory)return;const e=Array.isArray(t)?t:[t];let i=!1;for(const t of e){if(null==t)continue;const e=String(t),o=this.draw.getSnapshotFeature(t);o&&(this.historyById[e]||(this.historyById[e]=[]),this.historyById[e].push(o),i||(this.redoStack.length=0,i=!0),this.pushUndoStackEntry({id:t,toIndex:this.historyById[e].length-1,action:\"single\"}),this.emitStackChange(Oi))}},this.maxStackSize=Si(null==t?void 0:t.maxStackSize)}register(t){this.draw!==t.draw?(this.draw&&(this.draw.off(\"change\",this.handleChange),this.draw.off(\"finish\",this.handleFinish)),this.draw=t.draw,this.draw.on(\"change\",this.handleChange),this.draw.on(\"finish\",this.handleFinish),this.onHistoryChange=t.onHistoryChange):this.onHistoryChange=t.onHistoryChange}pushUndoStackEntry(t){0!==this.maxStackSize&&(this.undoStack.push(t),this.undoStack.length>this.maxStackSize&&this.undoStack.shift())}pushRedoStackEntry(t){0!==this.maxStackSize&&(this.redoStack.push(t),this.redoStack.length>this.maxStackSize&&this.redoStack.shift())}isDrawing(){return!!this.draw&&\"drawing\"===this.draw.getModeState()}applySnapshotDuringReplay(t,e){if(this.draw){this.isReplayingHistory=!0;try{this.draw.hasFeature(t)&&(this.ignoreProgrammaticDelete[t]=!0,this.draw.removeFeatures([t])),this.ignoreProgrammaticCreate[t]=!0,delete this.deletedFeatureIds[t],this.draw.addFeatures([e])}finally{this.isReplayingHistory=!1}}}canUndo(){return!(!this.draw||this.isDrawing())&&this.undoStack.length>0}canRedo(){return!(!this.draw||this.isDrawing())&&this.redoStack.length>0}undo(){if(!this.canUndo())return!1;if(!this.draw)return!1;const t=this.undoStack.pop();if(!t)return this.emitStackChange(Fi),!1;if(\"batch-create\"===t.action){var e;const i=(null==(e=t.metadata)?void 0:e.entries)||[];if(0===i.length)return this.emitStackChange(Fi),!1;const o=i.map(t=>t.id);return o.forEach(t=>{this.ignoreProgrammaticDelete[t]=!0,this.deletedFeatureIds[t]=!0}),this.draw.removeFeatures(o),this.pushRedoStackEntry({id:i[0].id,toIndex:i[0].toIndex,action:\"batch-create\",metadata:{entries:i}}),this.emitStackChange(Fi),!0}if(\"batch-delete\"===t.action){var i;const e=(null==(i=t.metadata)?void 0:i.entries)||[];if(0===e.length)return this.emitStackChange(Fi),!1;const o=e.map(t=>t.snapshot).filter(t=>void 0!==t);return o.length>0&&(e.forEach(t=>{this.ignoreProgrammaticCreate[t.id]=!0,delete this.deletedFeatureIds[t.id]}),this.draw.addFeatures(o)),this.pushRedoStackEntry({id:e[0].id,toIndex:e[0].toIndex,action:\"batch-delete\",metadata:{entries:e}}),this.emitStackChange(Fi),!0}const o=t.id,n=t.toIndex,r=String(o),s=this.historyById[r];if(!s||0===s.length)return this.emitStackChange(Fi),!1;const a=Math.min(n,s.length-1);if(!this.draw.hasFeature(o)){const t=s[a];return t?(this.ignoreProgrammaticCreate[o]=!0,delete this.deletedFeatureIds[o],this.draw.addFeatures([t]),this.pushRedoStackEntry({id:o,toIndex:a,action:\"delete\",snapshot:t}),this.emitStackChange(Fi),!0):(this.emitStackChange(Fi),!1)}if(a<=0)return this.pushRedoStackEntry({id:o,toIndex:0,action:\"create\"}),this.ignoreProgrammaticDelete[o]=!0,this.deletedFeatureIds[o]=!0,this.draw.removeFeatures([o]),this.undoStack=this.undoStack.filter(t=>t.id!==o),this.emitStackChange(Fi),!0;const d=s[a],h=s[a-1];return d&&this.pushRedoStackEntry({id:o,toIndex:a,snapshot:d,action:\"update\"}),this.applySnapshotDuringReplay(o,h),s.length=a,this.emitStackChange(Fi),!0}redo(){if(!this.canRedo())return!1;if(!this.draw)return!1;const t=this.redoStack.pop(),{id:e,toIndex:i,snapshot:o,action:n,metadata:r}=t;if(\"batch-create\"===n){const t=(null==r?void 0:r.entries)||[];if(0===t.length)return this.emitStackChange(xi),!1;const e=t.map(t=>t.snapshot).filter(t=>void 0!==t);return e.length>0&&(t.forEach(t=>{this.ignoreProgrammaticCreate[t.id]=!0}),this.draw.addFeatures(e)),this.pushUndoStackEntry({id:t[0].id,toIndex:t[0].toIndex,action:\"batch-create\",metadata:{entries:t}}),this.emitStackChange(xi),!0}if(\"batch-delete\"===n){const t=(null==r?void 0:r.entries)||[];if(0===t.length)return this.emitStackChange(xi),!1;const e=t.map(t=>t.id);return e.forEach(t=>{this.ignoreProgrammaticDelete[t]=!0,this.deletedFeatureIds[t]=!0}),this.draw.removeFeatures(e),this.pushUndoStackEntry({id:t[0].id,toIndex:t[0].toIndex,action:\"batch-delete\",metadata:{entries:t}}),this.emitStackChange(xi),!0}const s=String(e),a=this.historyById[s]||(this.historyById[s]=[]);if(\"delete\"===n)return this.ignoreProgrammaticDelete[e]=!0,this.deletedFeatureIds[e]=!0,this.draw.removeFeatures([e]),this.pushUndoStackEntry({id:e,toIndex:i,action:\"single\"}),this.emitStackChange(xi),!0;if(i<=0){const t=a[0];return!!t&&(this.ignoreProgrammaticCreate[e]=!0,this.draw.addFeatures([t]),this.pushUndoStackEntry({id:e,toIndex:0,action:\"single\"}),this.emitStackChange(xi),!0)}const d=o||a[i];return!!d&&(a.length===i?a.push(d):(a[i]=d,a.length=i+1),this.applySnapshotDuringReplay(e,d),this.pushUndoStackEntry({id:e,toIndex:i,action:\"single\"}),this.emitStackChange(xi),!0)}clearHistory(){const t={};if(this.draw&&!this.isDrawing()){const e=this.draw.getSnapshot();for(const i of e)t[String(i.id)]=[i]}this.historyById=t,this.undoStack=[],this.ignoreProgrammaticCreate={},this.ignoreProgrammaticDelete={},this.deletedFeatureIds={},this.redoStack=[]}undoSize(){return this.undoStack.length}redoSize(){return this.redoStack.length}}class ki{constructor(t){var e;this.modeLevel=void 0,this.sessionLevel=void 0,this.shouldPreferMode=void 0,this.onHistoryChange=void 0,this.shouldEmitHistoryChange=void 0,this.modeLevel=t.modeLevel,this.sessionLevel=t.sessionLevel,this.shouldPreferMode=t.shouldPreferMode,this.onHistoryChange=t.onHistoryChange,this.shouldEmitHistoryChange=null!=(e=t.shouldEmitHistoryChange)?e:()=>!0}emitStackHistoryChange(t){this.shouldEmitHistoryChange()&&this.onHistoryChange&&this.onHistoryChange({cause:t.cause,stack:t.stack,undoSize:t.undoStackSize,redoSize:t.redoStackSize})}hasSessionUndo(){return Boolean(this.sessionLevel&&this.sessionLevel.canUndo())}hasSessionRedo(){return Boolean(this.sessionLevel&&this.sessionLevel.canRedo())}activeStackForUndo(){var t,e;return this.shouldPreferMode()&&null!=(t=this.modeLevel)&&t.canUndo()?Mi:this.hasSessionUndo()?wi:null!=(e=this.modeLevel)&&e.canUndo()?Mi:void 0}activeStackForRedo(){var t,e;return this.shouldPreferMode()&&null!=(t=this.modeLevel)&&t.canRedo()?Mi:this.hasSessionRedo()?wi:null!=(e=this.modeLevel)&&e.canRedo()?Mi:void 0}canUndo(){return void 0!==this.activeStackForUndo()}canRedo(){return void 0!==this.activeStackForRedo()}undo(){const t=this.activeStackForUndo();return!!t&&(t===Mi?!!this.modeLevel&&this.modeLevel.undo():!(!this.sessionLevel||!this.sessionLevel.canUndo())&&this.sessionLevel.undo())}redo(){const t=this.activeStackForRedo();return!!t&&(t===Mi?!!this.modeLevel&&this.modeLevel.redo():!(!this.sessionLevel||!this.sessionLevel.canRedo())&&this.sessionLevel.redo())}clearHistory(){this.modeLevel&&this.modeLevel.clearHistory(),this.sessionLevel&&this.sessionLevel.clearHistory()}emitHistoryPushForCompletedAction(){this.sessionLevel?this.emitStackHistoryChange({cause:Oi,undoStackSize:this.sessionLevel.undoSize(),redoStackSize:this.sessionLevel.redoSize(),stack:wi}):this.modeLevel&&this.emitStackHistoryChange({cause:Oi,undoStackSize:this.modeLevel.undoSize(),redoStackSize:this.modeLevel.redoSize(),stack:Mi})}}class _i{constructor(e){var i,o,n,r;this._modes=void 0,this._mode=void 0,this._adapter=void 0,this._enabled=!1,this._store=void 0,this._eventListeners=void 0,this._instanceSelectModes=void 0,this.sessionUndoRedoEnabled=!1,this.keyboardShortcutsMatcher=void 0,this.drawingUndoRedo=void 0,this.sessionUndoRedo=void 0,this.undoRedoCoordinator=void 0,this._adapter=e.adapter,this._instanceSelectModes=[];const s=null==e||null==(i=e.undoRedo)?void 0:i.modeLevel;s&&(this.drawingUndoRedo=s);const a=null==e||null==(o=e.undoRedo)?void 0:o.keyboardShortcuts;a&&(this.keyboardShortcutsMatcher=a),this.sessionUndoRedoEnabled=Boolean(null==e||null==(n=e.undoRedo)?void 0:n.sessionLevel);const d=null==e||null==(r=e.undoRedo)?void 0:r.sessionLevel;this._mode=new Ie;const h=new Set,l=e.modes.reduce((t,e)=>{if(h.has(e.mode))throw new Error(`There is already a ${e.mode} mode provided`);return h.add(e.mode),t[e.mode]=e,t},{}),u=Object.keys(l);if(0===u.length)throw new Error(\"No modes provided\");u.forEach(t=>{l[t].type===y.Select&&this._instanceSelectModes.push(t)}),this._modes=t({},l,{static:this._mode}),this._eventListeners={change:[],select:[],deselect:[],finish:[],ready:[],history:[]},this._store=new ze({tracked:!!e.tracked,idStrategy:e.idStrategy?e.idStrategy:void 0});const c=t=>{const e=[],i=this._store.copyAll().filter(i=>!t.includes(i.id)||(e.push(i),!1));return{changed:e,unchanged:i}},p=(t,e)=>{var i;this._enabled&&(this._eventListeners.finish.forEach(i=>{i(t,e)}),null==(i=this.undoRedoCoordinator)||i.emitHistoryPushForCompletedAction())},g=(t,e,i)=>{if(!this._enabled)return;this._eventListeners.change.forEach(o=>{o(t,e,i)}),this.emitDrawingPushIfHistoryChangedFromLastSnapshot();const{changed:o,unchanged:n}=c(t);\"create\"===e?this._adapter.render({created:o,deletedIds:[],unchanged:n,updated:[]},this.getModeStyles()):\"update\"===e?this._adapter.render({created:[],deletedIds:[],unchanged:n,updated:o},this.getModeStyles()):\"delete\"===e?this._adapter.render({created:[],deletedIds:t,unchanged:n,updated:[]},this.getModeStyles()):\"styling\"===e&&this._adapter.render({created:[],deletedIds:[],unchanged:n,updated:[]},this.getModeStyles())},m=t=>{if(!this._enabled)return;this._eventListeners.select.forEach(e=>{e(t)});const{changed:e,unchanged:i}=c([t]);this._adapter.render({created:[],deletedIds:[],unchanged:i,updated:e},this.getModeStyles())},f=t=>{if(!this._enabled)return;this._eventListeners.deselect.forEach(e=>{e(t)});const{changed:e,unchanged:i}=c([t]);e&&this._adapter.render({created:[],deletedIds:[],unchanged:i,updated:e},this.getModeStyles())};Object.keys(this._modes).forEach(t=>{var e;this._modes[t].register({mode:t,store:this._store,setCursor:this._adapter.setCursor.bind(this._adapter),project:this._adapter.project.bind(this._adapter),unproject:this._adapter.unproject.bind(this._adapter),setDoubleClickToZoom:this._adapter.setDoubleClickToZoom.bind(this._adapter),onChange:g,onSelect:m,onDeselect:f,onFinish:p,coordinatePrecision:this._adapter.getCoordinatePrecision(),undoRedoMaxStackSize:null==(e=this.drawingUndoRedo)||null==e.getMaxStackSize?void 0:e.getMaxStackSize()})}),this.sessionUndoRedoEnabled&&d&&(this.sessionUndoRedo=d,d.register({draw:this,onHistoryChange:t=>{var e;null==(e=this.undoRedoCoordinator)||e.emitStackHistoryChange(t)}})),this.drawingUndoRedo&&this.drawingUndoRedo.register({getModeState:()=>this.getModeState(),getModeHistorySizes:()=>this.getDrawingHistorySizes(),undoMode:()=>{this._mode.undo&&this._mode.undo()},redoMode:()=>{this._mode.redo&&this._mode.redo()},clearModeHistory:()=>{const t=this._mode;t.clearHistory&&t.clearHistory()},onHistoryChange:t=>{var e;null==(e=this.undoRedoCoordinator)||e.emitStackHistoryChange(t)}}),this.undoRedoCoordinator=new ki({modeLevel:this.drawingUndoRedo,sessionLevel:this.sessionUndoRedo,shouldPreferMode:()=>\"drawing\"===this.getModeState(),onHistoryChange:t=>{this._eventListeners.history.forEach(e=>{e(t)})},shouldEmitHistoryChange:()=>this._enabled})}checkEnabled(){if(!this._enabled)throw new Error(\"Terra Draw is not enabled\")}handleUndoRedoKeyboardShortcut(t){if(!this.drawingUndoRedo&&!this.sessionUndoRedoEnabled)return!1;if(!this.keyboardShortcutsMatcher)return!1;const e=this.keyboardShortcutsMatcher.isUndoKeyboardShortcut(t),i=this.keyboardShortcutsMatcher.isRedoKeyboardShortcut(t);if(e){if(!this.canUndo())return!1;const e=this.undo();return e&&t.preventDefault(),e}if(i){if(!this.canRedo())return!1;const e=this.redo();return e&&t.preventDefault(),e}return!1}getDrawingHistorySizes(){return{undoSize:this._mode.undoSize&&\"function\"==typeof this._mode.undoSize?this._mode.undoSize():0,redoSize:this._mode.redoSize&&\"function\"==typeof this._mode.redoSize?this._mode.redoSize():0}}emitDrawingPushIfHistoryChangedFromLastSnapshot(){this.drawingUndoRedo&&this.drawingUndoRedo.emitPushIfHistoryChangedFromLastSnapshot()}emitDrawingPushIfHistoryChanged(t){this.drawingUndoRedo&&this.drawingUndoRedo.emitPushIfHistoryChanged(t)}getModeStyles(){const t={},e=this._instanceSelectModes.includes(this._mode.mode)?this._mode.mode:void 0;return Object.keys(this._modes).forEach(i=>{t[i]=t=>e&&t.properties[a.SELECTED]?this._modes[e].styleFeature.bind(this._modes[e])(t):this._modes[i].styleFeature.bind(this._modes[i])(t)}),t}featuresAtLocation({lng:t,lat:e},i){const o=i&&void 0!==i.pointerDistance?i.pointerDistance:30,n=!i||void 0===i.ignoreSelectFeatures||i.ignoreSelectFeatures,r=!(!i||void 0===i.ignoreCoordinatePoints)&&i.ignoreCoordinatePoints,s=!(!i||void 0===i.ignoreCurrentlyDrawing)&&i.ignoreCurrentlyDrawing,h=!(!i||void 0===i.ignoreClosingPoints)&&i.ignoreClosingPoints,l=!(!i||void 0===i.ignoreSnappingPoints)&&i.ignoreSnappingPoints,u=this._adapter.unproject.bind(this._adapter),c=this._adapter.project.bind(this._adapter),p=c(t,e),g=st({unproject:u,point:p,pointerDistance:o});return this._store.search(g).filter(u=>{if(n&&(u.properties[a.MID_POINT]||u.properties[a.SELECTION_POINT]))return!1;if(r&&u.properties[d.COORDINATE_POINT])return!1;if(h&&u.properties[d.CLOSING_POINT])return!1;if(s&&u.properties[d.CURRENTLY_DRAWING])return!1;if(l&&u.properties[d.SNAPPING_POINT])return!1;if(\"Point\"===u.geometry.type){const t=u.geometry.coordinates,e=c(t[0],t[1]);return tt(p,e)<o}if(\"LineString\"===u.geometry.type){const t=u.geometry.coordinates;for(let e=0;e<t.length-1;e++){const i=t[e],n=t[e+1];if(ae(p,c(i[0],i[1]),c(n[0],n[1]))<o)return!0}return!1}if(se([t,e],u.geometry.coordinates))return!0;if(null!=i&&i.includePolygonsWithinPointerDistance){const t=u.geometry.coordinates;for(const e of t)for(let t=0;t<e.length-1;t++){const i=e[t],n=e[t+1],r=c(i[0],i[1]),s=c(n[0],n[1]);if(ae(p,r,s)<o)return!0}}return!1}).map(o=>{if(null==i||!i.addClosestCoordinateInfoToProperties)return o;let n;if(\"Polygon\"===o.geometry.type)n=o.geometry.coordinates[0].slice(0,-1);else{if(\"LineString\"!==o.geometry.type)return o;n=o.geometry.coordinates}let r,s=-1,a=Infinity;for(let t=0;t<n.length;t++){const e=n[t],i=tt(c(e[0],e[1]),p);i<a&&(s=t,a=i,r=e)}return o.properties.closestCoordinateIndexToEvent=s,o.properties.closestCoordinatePixelDistanceToEvent=a,o.properties.closestCoordinateDistanceKmToEvent=C(r,[t,e]),o})}getSelectModeOrThrow(t=void 0){const e=this.getSelectMode({switchToSelectMode:!0,selectMode:t});if(!e)throw new Error(\"No select mode defined in instance\");return e}getSelectMode({switchToSelectMode:t,selectMode:e}){this.checkEnabled();const i=this.getMode();if(0===this._instanceSelectModes.length)return null;if(void 0!==e&&!this._instanceSelectModes.includes(e))throw new Error(`No select mode with this name present: ${e}`);let o;return o=void 0!==e?e:this._instanceSelectModes.includes(i)?i:this._instanceSelectModes[0],t&&i!==o&&this.setMode(o),this._modes[o]}isGuidanceFeature(t){return Boolean(t.properties[a.MID_POINT]||t.properties[a.SELECTION_POINT]||t.properties[d.COORDINATE_POINT]||t.properties[d.SNAPPING_POINT])}setModeStyles(t,e){if(this.checkEnabled(),!this._modes[t])throw new Error(\"No mode with this name present\");this._modes[t].styles=e}updateModeOptions(t,e){if(this.checkEnabled(),!this._modes[t])throw new Error(\"No mode with this name present\");this._modes[t].updateOptions(e)}getSnapshot(){return this._store.copyAll()}getSnapshotFeature(t){if(this._store.has(t))return this._store.copy(t)}clear(){this.checkEnabled(),this._adapter.clear()}get enabled(){return this._enabled}set enabled(t){throw new Error(\"Enabled is read only\")}getMode(){return this._mode.mode}getModeState(){return this._mode.state}setMode(t){if(this.checkEnabled(),!this._modes[t])throw new Error(\"No mode with this name present\");this._mode.stop(),this._mode=this._modes[t],this._mode.start()}removeFeatures(t){this.checkEnabled();const e=[],i=[];let o;t.forEach(t=>{if(!this._store.has(t))throw new Error(`No feature with id ${t}, can not delete`);const n=this._store.getPropertiesCopy(t);n[a.SELECTED]&&this.deselectFeature(t),n[d.CURRENTLY_DRAWING]&&this._modes[n.mode]?o=n.mode:(n[d.COORDINATE_POINT_IDS]&&e.push(...n[d.COORDINATE_POINT_IDS]),i.push(t))}),this._store.delete([...i,...e],{origin:\"api\"}),o&&this._modes[o]&&this._modes[o].cleanUp()&&this._modes[o].cleanUp()}selectFeature(t,e){this.getSelectModeOrThrow(e).selectFeature(t)}deselectFeature(t){this.getSelectModeOrThrow().deselectFeature(t)}getFeatureId(){return this._store.getId()}hasFeature(t){return this._store.has(t)}checkIsReservedProperty(t){return![...Object.values(a),...Object.values(d)].includes(t)}updateFeatureProperties(t,e){var i;if(!this._store.has(t))throw new Error(`No feature with id ${t} present in store`);const o=this._store.copy(t);if(this.isGuidanceFeature(o))throw new Error(\"Guidance features are not allowed to be updated directly.\");const n=o.properties.mode;if(!this._modes[n])throw new Error(`No mode with name ${n} present in instance`);const r=Object.entries(e);r.forEach(([t,e])=>{if(!this.checkIsReservedProperty(t))throw new Error(`You are trying to update a reserved property name: ${t}. Please choose another name.`);if(void 0!==e&&!yi(e))throw new Error(`Invalid JSON value provided for property ${t}`)}),this._store.updateProperty(r.map(([t,e])=>({id:o.id,property:t,value:e})),{origin:\"api\"}),null==(i=this.undoRedoCoordinator)||i.emitHistoryPushForCompletedAction()}updateFeatureGeometry(e,i){var o;if(!this._store.has(e))throw new Error(`No feature with id ${e} present in store`);const n=this._store.copy(e);if(this.isGuidanceFeature(n))throw new Error(\"Guidance features are not allowed to be updated directly.\");if(!(n&&i&&i.type&&i.coordinates))throw new Error(\"Invalid geometry provided\");if(i.type!==n.geometry.type)throw new Error(`Geometry type mismatch: expected ${n.geometry.type}, got ${i.type}`);const r=n.properties.mode,s=this._modes[r];if(!s)throw new Error(`No mode with name ${r} present in instance`);const d=t({},n,{geometry:i}),h=s.validateFeature(d);if(!h.valid)throw new Error(`Feature validation failed: ${h.reason||\"Unknown reason\"}`);if(this._store.updateGeometry([{id:n.id,geometry:i}],{origin:\"api\"}),s.afterFeatureUpdated){s.afterFeatureUpdated(d);const t=d.properties[a.SELECTED],e=this.getSelectMode({switchToSelectMode:!1});e&&t&&e.afterFeatureUpdated(d)}null==(o=this.undoRedoCoordinator)||o.emitHistoryPushForCompletedAction()}transformFeatureGeometry(t,e){var i;if(!this._store.has(t))throw new Error(`No feature with id ${t} present in store`);let o=this._store.copy(t);if(this.isGuidanceFeature(o))throw new Error(\"Guidance features are not allowed to be updated directly.\");const n=o.properties.mode,r=this._modes[n];if(!r)throw new Error(`No mode with name ${n} present in instance`);let s;if(\"Polygon\"===o.geometry.type)s=o.geometry.coordinates[0];else{if(\"LineString\"!==o.geometry.type)throw new Error(`Feature geometry type ${o.geometry.type} is not supported for transformation`);s=o.geometry.coordinates}if(\"web-mercator\"!=e.projection)throw new Error(`Projection ${e.projection} is not currently supported for transformation`);if(\"scale\"===e.type){const{x:t,y:i}=E(e.origin[0],e.origin[1]);me({coordinates:s,originX:t,originY:i,xScale:e.options.xScale||1,yScale:e.options.yScale||1})}else\"rotate\"===e.type&&(o=ce(o,e.options.angle||0),s=\"Polygon\"===o.geometry.type?o.geometry.coordinates[0]:o.geometry.coordinates);if(s=s.map(t=>[x(t[0],this._adapter.getCoordinatePrecision()),x(t[1],this._adapter.getCoordinatePrecision())]),o.geometry.coordinates=\"Polygon\"===o.geometry.type?[s]:s,this._store.updateGeometry([{id:o.id,geometry:o.geometry}],{origin:\"api\"}),r.afterFeatureUpdated){r.afterFeatureUpdated(o);const t=o.properties[a.SELECTED],e=this.getSelectMode({switchToSelectMode:!1});e&&t&&e.afterFeatureUpdated(o)}null==(i=this.undoRedoCoordinator)||i.emitHistoryPushForCompletedAction()}undo(){return this.checkEnabled(),!!this.undoRedoCoordinator&&this.undoRedoCoordinator.undo()}canUndo(){return this.checkEnabled(),!!this.undoRedoCoordinator&&this.undoRedoCoordinator.canUndo()}canRedo(){return this.checkEnabled(),!!this.undoRedoCoordinator&&this.undoRedoCoordinator.canRedo()}redo(){return this.checkEnabled(),!!this.undoRedoCoordinator&&this.undoRedoCoordinator.redo()}clearUndoRedoHistory(){this.checkEnabled(),this.undoRedoCoordinator&&this.undoRedoCoordinator.clearHistory()}addFeatures(t){return this.checkEnabled(),0===t.length?[]:this._store.load(t,t=>{if(u(t)){const e=t.properties.mode,i=this._modes[e];if(!i)return{id:t.id,valid:!1,reason:`${e} mode is not in the list of instantiated modes`};const o=i.validateFeature.bind(i)(t);return{id:t.id,valid:o.valid,reason:o.reason?o.reason:o.valid?void 0:\"Feature is invalid\"}}return{id:t.id,valid:!1,reason:\"Mode property does not exist\"}},t=>{if(u(t)){const e=this._modes[t.properties.mode];e&&e.afterFeatureAdded&&e.afterFeatureAdded(t)}},{origin:\"api\"})}start(){this._enabled||(this._enabled=!0,this._adapter.register({onReady:()=>{this._eventListeners.ready.forEach(t=>{t()})},getState:()=>this._mode.state,onClick:t=>{const e=this.drawingUndoRedo?this.drawingUndoRedo.getHistorySizes():{undoSize:0,redoSize:0};this._mode.onClick(t),this.emitDrawingPushIfHistoryChanged(e)},onMouseMove:t=>{this._mode.onMouseMove(t)},onKeyDown:t=>{this.handleUndoRedoKeyboardShortcut(t)||this._mode.onKeyDown(t)},onKeyUp:t=>{const e=this.drawingUndoRedo?this.drawingUndoRedo.getHistorySizes():{undoSize:0,redoSize:0};this._mode.onKeyUp(t),this.emitDrawingPushIfHistoryChanged(e)},onDragStart:(t,e)=>{this._mode.onDragStart(t,e)},onDrag:(t,e)=>{this._mode.onDrag(t,e)},onDragEnd:(t,e)=>{this._mode.onDragEnd(t,e)},onClear:()=>{this._mode.cleanUp(),this._store.clear({origin:\"api\"})}}))}getFeaturesAtLngLat(t,e){const{lng:i,lat:o}=t;return this.featuresAtLocation({lng:i,lat:o},e)}getFeaturesAtPointerEvent(t,e){const i=this._adapter.getLngLatFromEvent.bind(this._adapter)(t);return null===i?[]:this.featuresAtLocation(i,e)}stop(){this._enabled&&(this._enabled=!1,this._adapter.unregister())}on(t,e){const i=this._eventListeners[t];i.includes(e)||i.push(e)}off(t,e){const i=this._eventListeners[t];i.includes(e)&&i.splice(i.indexOf(e),1)}}export{_i as TerraDraw,ei as TerraDrawAngledRectangleMode,Q as TerraDrawCircleMode,li as TerraDrawExtend,gi as TerraDrawFreehandLineStringMode,rt as TerraDrawFreehandMode,Rt as TerraDrawLineStringMode,fi as TerraDrawMarkerMode,Ei as TerraDrawModeUndoRedo,jt as TerraDrawPointMode,Lt as TerraDrawPolyLineMode,Xt as TerraDrawPolygonMode,Zt as TerraDrawRectangleMode,Jt as TerraDrawRenderMode,ri as TerraDrawSectorMode,Pe as TerraDrawSelectMode,di as TerraDrawSensorMode,Di as TerraDrawSessionUndoRedo,Ii as TerraDrawUndoRedoKeyboardShortcuts,Xe as ValidateMaxAreaSquareMeters,Ye as ValidateMinAreaSquareMeters,Ze as ValidateNotSelfIntersecting,ui as ValidationReasons};\n//# sourceMappingURL=terra-draw.modern.js.map\n"],"names":["getWindow","node","window","toString","ownerDocument","defaultView","isElement","Element","isHTMLElement","HTMLElement","isShadowRoot","ShadowRoot","Math","max","min","round","getUAString","uaData","navigator","userAgentData","brands","map","item","brand","version","join","userAgent","isLayoutViewport","test","getBoundingClientRect","element","includeScale","isFixedStrategy","clientRect","scaleX","scaleY","offsetWidth","width","offsetHeight","height","visualViewport","addVisualOffsets","x","left","offsetLeft","y","top","offsetTop","right","bottom","getWindowScroll","win","scrollLeft","pageXOffset","scrollTop","pageYOffset","getNodeName","nodeName","toLowerCase","getDocumentElement","document","documentElement","getWindowScrollBarX","getComputedStyle","isScrollParent","_getComputedStyle","overflow","overflowX","overflowY","getCompositeRect","elementOrVirtualElement","offsetParent","isFixed","isOffsetParentAnElement","offsetParentIsScaled","rect","isElementScaled","scroll","offsets","clientLeft","clientTop","getLayoutRect","abs","getParentNode","assignedSlot","parentNode","host","getScrollParent","indexOf","body","listScrollParents","list","_element$ownerDocumen","scrollParent","isBody","target","concat","updatedList","isTableElement","getTrueOffsetParent","position","getOffsetParent","isFirefox","currentNode","css","transform","perspective","contain","willChange","filter","getContainingBlock","auto","basePlacements","start","end","clippingParents","viewport","popper","reference","variationPlacements","reduce","acc","placement","modifierPhases","order","modifiers","Map","visited","Set","result","sort","modifier","add","name","requires","requiresIfExists","forEach","dep","has","depModifier","get","push","set","DEFAULT_OPTIONS","strategy","areValidElements","_len","arguments","length","args","Array","_key","some","popperGenerator","generatorOptions","_generatorOptions","_generatorOptions$def","defaultModifiers","_generatorOptions$def2","defaultOptions","options","fn","pending","state","orderedModifiers","Object","assign","modifiersData","elements","attributes","styles","effectCleanupFns","isDestroyed","instance","setOptions","setOptionsAction","cleanupModifierEffects","scrollParents","contextElement","merged","phase","orderModifiers","current","existing","data","keys","key","m","enabled","_ref3","_ref3$options","effect","cleanupFn","update","forceUpdate","_state$elements","rects","reset","index","_state$orderedModifie","_state$orderedModifie2","_options","resolve","Promise","then","undefined","destroy","onFirstUpdate","passive","getBasePlacement","split","getVariation","getMainAxisFromPlacement","computeOffsets","_ref","basePlacement","variation","commonX","commonY","mainAxis","len","unsetSides","mapToStyles","_ref2","_Object$assign2","popperRect","gpuAcceleration","adaptive","roundOffsets","_offsets$x","_offsets$y","hasX","hasOwnProperty","hasY","sideX","sideY","heightProp","widthProp","_Object$assign","commonStyles","_ref4","dpr","devicePixelRatio","roundOffsetsByDPR","hash","getOppositePlacement","replace","matched","getOppositeVariationPlacement","contains","parent","child","rootNode","getRootNode","next","isSameNode","rectToClientRect","getClientRectFromMixedType","clippingParent","html","clientWidth","clientHeight","layoutViewport","getViewportRect","getInnerBoundingClientRect","winScroll","scrollWidth","scrollHeight","direction","getDocumentRect","mergePaddingObject","paddingObject","expandToHashMap","value","hashMap","detectOverflow","_options$placement","_options$strategy","_options$boundary","boundary","_options$rootBoundary","rootBoundary","_options$elementConte","elementContext","_options$altBoundary","altBoundary","_options$padding","padding","altContext","clippingClientRect","mainClippingParents","clipperElement","getClippingParents","firstClippingParent","clippingRect","accRect","getClippingRect","referenceClientRect","popperOffsets","popperClientRect","elementClientRect","overflowOffsets","offsetData","offset","multiply","axis","within","getSideOffsets","preventedOffsets","isAnySideFullyClipped","side","_options$scroll","_options$resize","resize","addEventListener","removeEventListener","_ref5","_options$gpuAccelerat","_options$adaptive","_options$roundOffsets","arrow","style","removeAttribute","setAttribute","initialStyles","margin","property","attribute","_options$offset","invertDistance","skidding","distance","distanceAndSkiddingToXY","_data$state$placement","_skip","_options$mainAxis","checkMainAxis","_options$altAxis","altAxis","checkAltAxis","specifiedFallbackPlacements","fallbackPlacements","_options$flipVariatio","flipVariations","allowedAutoPlacements","preferredPlacement","oppositePlacement","getExpandedFallbackPlacements","placements","_options$allowedAutoP","allowedPlacements","overflows","a","b","computeAutoPlacement","referenceRect","checksMap","makeFallbackChecks","firstFittingPlacement","i","_basePlacement","isStartVariation","isVertical","mainVariationSide","altVariationSide","checks","every","check","_loop","_i","fittingPlacement","find","slice","_options$tether","tether","_options$tetherOffset","tetherOffset","isBasePlacement","tetherOffsetValue","normalizedTetherOffsetValue","offsetModifierState","_offsetModifierState$","mainSide","altSide","additive","minLen","maxLen","arrowElement","arrowRect","arrowPaddingObject","arrowPaddingMin","arrowPaddingMax","arrowLen","minOffset","maxOffset","arrowOffsetParent","clientOffset","offsetModifierValue","tetherMax","preventedOffset","_offsetModifierState$2","_mainSide","_altSide","_offset","_min","_max","isOriginSide","_offsetModifierValue","_tetherMin","_tetherMax","_preventedOffset","v","withinMaxClamp","_state$modifiersData$","toPaddingObject","minProp","maxProp","endDiff","startDiff","clientSize","centerToReference","center","axisProp","centerOffset","_options$element","querySelector","preventOverflow","referenceOverflow","popperAltOverflow","referenceClippingOffsets","popperEscapeOffsets","isReferenceHidden","hasPopperEscaped","_class","_class2","_class3","_class5","_class7","_class8","_class9","_class10","_class12","_temp","_class13","_class14","_temp2","_createClass","defineProperties","props","descriptor","enumerable","configurable","writable","defineProperty","Constructor","protoProps","staticProps","prototype","_typeof","Symbol","iterator","obj","constructor","_possibleConstructorReturn","self","call","ReferenceError","_inherits","subClass","superClass","TypeError","create","setPrototypeOf","__proto__","targetContext","sourceContext","camelCase","charAt","_","toUpperCase","createOverrideContext","bindingContext","parentOverrideContext","getContextFor","scope","ancestor","oc","overrideContext","slotNames","versionSlotNames","lastSlot","ensureEnoughSlotNames","currentSlot","ii","addObserver","observer","observerSlots","this","_observerSlots","subscribe","_version","observeProperty","propertyName","observerLocator","getObserver","observeArray","array","getArrayObserver","unobserve","all","unsubscribe","connectable","queue","queued","nextId","minimumImmediate","frameBudget","isFlushRequested","immediate","flush","animationFrameStart","binding","__connectQueueId","connect","splice","enqueueBindingConnect","id","addSubscriber","context","callable","hasSubscriber","_context0","_context1","_context2","_contextsRest","_callablesRest","_callable2","_callable1","_callable0","removeSubscriber","callables","contexts","arrayPool1","arrayPool2","poolUtilization","callSubscribers","newValue","oldValue","context0","callable0","context1","callable1","context2","callable2","contextsRest","callablesRest","poolIndex","hasSubscribers","subscriberCollection","ExpressionObserver","_dec","_dec2","expression","lookupFunctions","getValue","evaluate","setValue","_this","Function","dispose","toNumber","s","newSplice","removed","addedCount","ArraySplice","calcEditDistances","currentStart","currentEnd","old","oldStart","oldEnd","rowCount","columnCount","distances","north","west","j","_j","equals","spliceOperationsFromEditDistances","edits","northWest","reverse","calcSplices","prefixCount","suffixCount","minLength","sharedPrefix","sharedSuffix","_splice","ops","splices","oldIndex","searchLength","index1","index2","count","calculateSplices","previous","currentValue","previousValue","arraySplice","mergeSplice","start1","end1","start2","end2","inserted","insertionOffset","intersectCount","deleteCount","currentRemoved","prepend","apply","append","ModifyCollectionObserver","_dec3","taskQueue","collection","changeRecords","oldCollection","lengthPropertyName","addChangeRecord","changeRecord","lengthObserver","type","arrayLength","object","queueMicroTask","flushChangeRecords","getLengthObserver","CollectionLengthObserver","records","entries","size","done","newRecord","getChangeRecords","record","console","error","JSON","stringify","createInitialSplices","projectArraySplices","_dec4","arrayProto","pop","shift","unshift","__au_patched__","warn","Reflect","notEmpty","methodCallResult","__array_observer__","oldArray","ModifyArrayObserver","_ModifyCollectionObse","for","Expression","isAssignable","Error","FEATURE_NO_UNPARSER","_Unparser","unparse","BindingBehavior","_Expression","_this3","accept","visitor","visitBindingBehavior","bind","behavior","bindingBehaviors","behaviorKey","evalList","unbind","ValueConverter","_Expression2","_this4","allArgs","converter","valueConverters","toView","fromView","visitValueConverter","expressions","signals","connectBindingToSignal","Assign","_Expression3","_this5","vistor","visitAssign","Conditional","_Expression4","condition","yes","no","_this6","visitConditional","AccessThis","_Expression5","_this7","visitAccessThis","AccessScope","_Expression6","_this8","visitAccessScope","AccessMember","_Expression7","_this9","visitAccessMember","AccessKeyed","_Expression8","_this10","isArray","parseInt","setKeyed","visitAccessKeyed","CallScope","_Expression9","_this11","mustEvaluate","func","getFunction","visitCallScope","CallMember","_Expression10","_this12","visitCallMember","CallFunction","_Expression11","_this13","visitCallFunction","Binary","_Expression12","operation","_this14","visitBinary","Unary","_Expression13","_this15","visitPrefix","LiteralPrimitive","_Expression14","_this16","visitLiteralPrimitive","LiteralString","_Expression15","_this17","visitLiteralString","LiteralTemplate","_Expression16","cooked","raw","tag","_this18","tagged","contextType","getScopeContext","getObjectContext","results","_i2","String","visitLiteralTemplate","LiteralArray","_Expression17","_this19","visitLiteralArray","LiteralObject","_Expression18","values","_this20","visitLiteralObject","mustExist","Unparser","buffer","write","text","writeArgs","conditional","access","prefix","charCodeAt","binary","literal","escaped","ExpressionCloner","cloneExpressionArray","clonedArray","visitUnary","unary","bindingMode","oneTime","oneWay","twoWay","Parser","cache","parse","src","ParserImplementation","parseBindingBehavior","fromCharCode","idx","tkn","T$EOF","val","ch","nextToken","T$ExpressionTerminal","err","parseValueConverter","opt","T$Ampersand","parseVariadicArgs","parseExpression","T$Bar","T$Colon","exprStart","parseConditional","T$Eq","parseBinary","T$Question","expect","minPrecedence","parseLeftHandSide","T$BinaryOp","opToken","T$Precedence","TokenValues","T$TokenMask","primary","T$Plus","T$Minus","T$Bang","T$TypeofKeyword","T$VoidKeyword","op","T$ParentScope","T$Period","T$AccessScopeTerminal","C$Ancestor","C$ShorthandProp","C$This","T$Identifier","C$Scope","T$ThisScope","T$LParen","T$RParen","C$Primary","T$LBracket","_elements","T$RBracket","T$Comma","T$LBrace","T$RBrace","T$IdentifierOrKeyword","T$Literal","T$StringLiteral","T$TemplateTail","T$TemplateContinuation","parseTemplate","T$NumericLiteral","T$NullKeyword","T$UndefinedKeyword","T$TrueKeyword","T$FalseKeyword","T$MemberOrCallExpression","C$Member","C$Keyed","C$Call","C$Tagged","scanTemplateTail","scanIdentifier","CharScanners","AsciiIdParts","IdParts","KeywordLookup","scanNumber","isFloat","pow","_start","parseFloat","scanString","quote","marker","_unescaped","hex","unescape","last","unescaped","scanTemplate","tail","message","column","token","code","T$Keyword","T$UnaryOp","T$BarBar","T$AmpersandAmpersand","T$Caret","T$EqEq","T$BangEq","T$EqEqEq","T$BangEqEq","T$Lt","T$Gt","T$LtEq","T$GtEq","T$InKeyword","T$InstanceOfKeyword","T$Star","T$Percent","T$Slash","true","null","false","$this","$parent","in","instanceof","typeof","void","codes","decompress","lookup","compressed","rangeCount","returnToken","p","unexpectedCharacter","Uint8Array","ci","mapProto","ModifyMapObserver","_ModifyCollectionObse2","__map_observer__","proto","delete","clear","hasValue","emLogger","findOriginalEventTarget","event","composedPath","deepPath","path","stopPropagation","standardStopPropagation","propagationStopped","handleCapturedEvent","orderedCallbacks","capturedCallbacks","callback","orderedCallback","handleEvent","CapturedHandlerEntry","eventName","increment","decrement","DelegateHandlerEntry","eventManager","delegatedCallbacks","escapeShadowRoot","DelegationEntryHandler","entry","targetEvent","EventHandler","DefaultEventStrategy","delegatedHandlers","capturedHandlers","disposable","handlerEntry","delegationStrategy","bubbling","previousCallback","capturing","none","EventManager","elementHandlerLookup","eventStrategyLookup","registerElementConfig","tagName","properties","checked","files","defaultEventStrategy","config","registerEventStrategy","getElementHandler","EventSubscriber","callbackOrListener","delegate","events","handler","DirtyChecker","tracked","checkDelay","addProperty","scheduleDirtyCheck","removeProperty","_this22","setTimeout","isDirty","DirtyCheckProperty","_dec5","dirtyChecker","logger","propertyAccessor","PrimitiveObserver","primitive","doNotCache","SetterObserver","_dec6","observing","getterValue","setterValue","convertProperty","propertyIsEnumerable","XLinkAttributeObserver","attributeName","getAttributeNS","setAttributeNS","dataAttributeAccessor","getAttribute","DataAttributeObserver","StyleObserver","cssText","_setProperty","priority","setProperty","rx","pair","exec","ValueAttributeObserver","_dec7","notify","checkedArrayContext","checkedValueContext","CheckedObserver","_dec8","initialSync","arrayObserver","synchronizeElement","valueObserver","__observers__","model","elementValue","isRadio","matcher","findIndex","synchronizeValue","selectArrayContext","SelectValueObserver","_dec9","multiple","synchronizeOptions","option","optionValue","selected","_this23","_option","_ret2","_loop2","_loop3","_this24","domObserver","observe","childList","subtree","characterData","disconnect","ClassObserver","nameIndex","names","classList","remove","computedFrom","rest","dependencies","ComputedExpression","_Expression19","_this25","svgElements","svgPresentationElements","svgPresentationAttributes","svgAnalyzer","FEATURE_NO_SVG","altGlyph","altGlyphDef","altGlyphItem","animate","animateColor","animateMotion","animateTransform","circle","clipPath","cursor","defs","desc","ellipse","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence","font","foreignObject","g","glyph","glyphRef","hkern","image","line","linearGradient","mask","metadata","mpath","pattern","polygon","polyline","radialGradient","script","stop","svg","switch","symbol","textPath","title","tref","tspan","use","view","vkern","SVGAnalyzer","div","innerHTML","firstChild","firstElementChild","altglyph","altglyphdef","altglyphitem","glyphref","isStandardSvgAttribute","presentationElements","presentationAttributes","_class11","ObserverLocator","parser","adapters","observersLookup","createPropertyObserver","getOrCreateObserversLookup","createObserversLookup","addAdapter","adapter","getAdapterObserver","xlinkResult","hasDeclaredDependencies","getPropertyDescriptor","createComputedObserver","existingGetterOrSetter","getMapObserver","getSetObserver","getAccessor","_getArrayObserver","_getMapObserver","ModifySetObserver","_getSetObserver","inject","BindingExpression","targetProperty","sourceExpression","mode","discrete","createBinding","Binding","_dec10","updateTarget","targetObserver","updateSource","source","isBound","method","CallExpression","Call","callSource","$event","prop","_this26","ValueConverterResource","convention","endsWith","substring","initialize","container","register","registry","registerValueConverter","load","valueConverter","nameOrTarget","BindingBehaviorResource","registerBindingBehavior","bindingBehavior","ListenerExpression","preventDefault","Listener","_handler","getAU","au","NameExpression","apiName","NameBinder","locateAPI","controller","viewModel","LookupFunctions","BindingEngine","createBindingExpression","propertyObserver","_this27","collectionObserver","_this28","expressionObserver","registerAdapter","setProto","_ModifyCollectionObse3","__set_observer__","oldSize","from","observable","targetOrConfig","deco","isClassDecorator","innerPropertyName","innerPropertyDescriptor","callbackName","changeHandler","initializer","t","k","d","O","dP","ObjectProto","toStringTag","toLength","iterCall","FEATURE_NO_ES2015","GOPS","setDescriptor","G","random","prefixLength","internalSymbol","DP","DPies","GOPN","GOPD","PIE","gOPN","gOPD","$defineProperties","hOP","pIE","addInternalIfNeeded","o","uid","onlyNonSymbols","onlySymbols","setAndGetSymbol","sourceConstructor","_Symbol","description","sourceMap","$defineProperty","newDescriptor","copyAsNonEnumerable","$getOwnPropertySymbols","cachedWindowNames","getOwnPropertyNames","originalObjectGetOwnPropertyNames","e","descriptors","symbols","createWithSymbols","str","o_O","protoDescriptor","getOwnPropertyDescriptor","tst","Si","AP","SP","returnThis","fromCodePoint","c","codePointAt","Number","isNaN","isFinite","searchString","subjectString","floor","lastIndex","startsWith","substr","it","ceil","toInteger","iter","E","return","arrayLike","step","C","aLen","mapfn","mapping","iterFn","predicate","thisArg","FEATURE_NO_ES2016","includes","searchElement","currentElement","n","hasDontEnumBug","dontEnums","dontEnumsLength","needsFix","gOPS","filterOS","getOwnPropertySymbols","where","keyOrSymbol","arg","is","global","_createCollection","_createCollection2","createCollection","objectOnly","Collection","_keys","_values","_itp","init","sharedSize","sharedDelete","sharedGet","setHas","mapHas","sharedSet","sharedAdd","sharedClear","sharedValues","sharedIterator","mapEntries","itp","array2","sharedForEach","r","WeakMap","WeakSet","propertyKey","construct","Target","ownKeys","FEATURE_NO_ESNEXT","emptyMetadata","freeze","metadataContainerKey","getOwnMetadata","metadataKey","targetKey","defineMetadata","metadataValue","metadataContainer","startResolve","bootstrapPromises","startPromise","isNodeLike","process","browser","appHost","configModuleId","aurelia","loader","loadModule","customConfig","configure","standardConfiguration","developmentLogging","setRoot","bootstrap","factory","readyState","completed","reject","moduleId","relativeTo","normalize","normalized","isRenderer","versions","palModule","globalize","initializePal","bootstrapperName","frameworkPromise","frameworkName","_a","fx","Aurelia","appHosts","querySelectorAll","mainModuleId","toConsole","bootstraps","catch","__decorate","decorators","decorate","__metadata","autoinject","potentialTarget","_emptyParameters","isInjectable","Strategy","resolver","isStrategy","actual","expected","StrategyResolver","singleton","invoke","transient","function","alias","Lazy","Lazy_1","of","Optional","All","All_1","getAll","checkParent","_checkParent","Optional_1","hasResolver","Boolean","validateKey","Parent","Parent_1","Factory","Factory_1","getResolver","NewInstance","dynamicDependencies","asKey","NewInstance_1","dependency","registerInstance","as","resolverDecorates","decorates","InvocationHandler","invoker","invokeWithDynamicDependencies","classInvoker","Type","deps","instances","staticDependencies","Container","configuration","_configuration","_onHandlerCreated","onHandlerCreated","_handlers","handlers","_resolvers","root","makeGlobal","setHandlerCreatedCallback","registerResolver","registerSingleton","registerTransient","registerHandler","registerAlias","originalKey","aliasKey","resolver$$1","allResolvers","autoRegister","registration","autoRegisterAll","fns","unregister","_get","createChild","_createInvocationHandler","f","ctor","getPrototypeOf","FactoryInvoker","TransientRegistration","keyOrRegisterInChild","registerInChild","SingletonRegistration","existingResolver","_registerInChild","targetContainer","DefaultDialogSettings","lock","startingZIndex","centerHorizontalOnly","rejectOnCancel","ignoreTransitions","restoreFocus","lastActiveElement","focus","RENDERRERS","ux","DialogRenderer","native","NativeDialogRenderer","DEFAULT_RESOURCES","UxDialog","UxDialogHeader","UxDialogBody","UxDialogFooter","AttachFocus","DEFAULT_CSS_TEXT","cssM","DialogConfiguration","frameworkConfiguration","applySetter","renderer","resources","fwConfig","settings","_apply","rendererImpl","$cssText","modules","globalResources","useDefaults","useRenderer","useCSS","useStandardResources","useResource","resourceName","whenClosed","onfulfilled","onrejected","wasCancelled","closeResult","DialogService","compositionEngine","defaultSettings","controllers","hasOpenDialog","hasActiveDialog","validateSettings","createCompositionContext","childContainer","viewResources","viewSlot","ensureViewModel","compositionContext","_cancelOperation","composeAndShowDialog","dialogController","compose","showDialog","reason","createSettings","keyboard","overlayDismiss","open","resolveCloseResult","rejectCloseResult","removeController","promise","getDialogContainer","canActivate","closeAll","cancel","unclosedControllers","unclosed","service","frameworkConfig","applyConfig","Renderer","hideDialog","createDialogCancelError","output","createDialogCloseError","invokeLifecycle","DialogController","releaseResources","cancelOperation","ok","close","closeError","closePromise","dialogResult","canDeactivate","Handler","messageType","handle","invokeCallback","invokeHandler","EventAggregator","eventLookup","messageHandlers","publish","subscribers","subscribeOnce","sub","ea","extPattern","runTasks","tasks","getExt","match","assertProcessed","plugins","processed","invalidConfigMsg","cfg","FrameworkConfiguration","info","preTasks","postTasks","behaviorsToLoad","configuredPlugins","resourcesToLoad","preTask","postTask","appResources","viewEngine","ext","isOtherResource","removeExt","importId","addOriginalExt","loads","importIds","l","importViewResources","loadResources","implementation","task","feature","plugin","hasIndex","resourcesRelativeTo","resource","toAdd","parent_1","grandParent","name_1","meta","elementName","globalName","resourcePath","newName","pluginConfig","_addNormalizedPlugin","defaultBindingLanguage","router","history","defaultResources","eventAggregator","basicConfiguration","level","logLevel","ConsoleAppender","debug","normalizedId","_loadPlugin","loadPlugin","hostConfigured","_started","evt","action","bubbles","cancelable","enhance","applicationHost","_configureHost","engine","attached","_onAureliaComposed","instruction","deactivate","initialComposition","hostSlot","transformChildNodesIntoView","Configure","_config","apiScript","apiKey","client","apiLibraries","region","language","markerCluster","enable","imagePath","imageExtension","GoogleMapsAPI","_scriptPromise","getMapsInstance","google","maps","script_1","createElement","params","async","defer","appendChild","aureliaGoogleMapsCallback","onerror","MarkerClustering","isEnabled","clearMarkers","markerClusterer","loadScript","renderClusters","markers","MarkerClusterer","Events","BOUNDSCHANGED","MAPCLICK","MAPOVERLAYCOMPLETE","MARKERRENDERED","MARKERCLICK","MARKERMOUSEOVER","MARKERMOUSEOUT","POLYGONCLICK","POLYGONRENDERED","INFOWINDOWSHOW","INFOWINDOWCLOSE","START_MARKER_HIGHLIGHT","STOP_MARKER_HIGHLIGHT","PAN_TO_MARKER","CLEAR_MARKERS","__assign","getLogger","GoogleMaps","bindingEngine","googleMapsApi","markerClustering","_this_1","_currentInfoWindow","drawnMarkers","drawnCircles","longitude","latitude","circleRadius","zoom","disableDefaultUi","autoUpdateBounds","autoInfoWindow","mapType","drawEnabled","drawMode","polygons","drawSingleElement","_renderedMarkers","_markersSubscription","_mapPromise","_mapResolve","drawingManager","_renderedPolygons","_polygonsSubscription","detail","setIcon","custom","altIcon","setZIndex","Marker","MAX_ZINDEX","defaultIcon","panTo","setZoom","setMap","zoomToMarkerBounds","latLng","LatLng","mapTypeId","getMapTypeId","disableDefaultUI","mapLoaded","addListener","dispatchEvent","infoWindow","sendBoundsEvent","bounds","getBounds","renderMarker","markerLatLng","createMarker","createdMarker","icon","label","setLabel","setTitle","draggable","setDraggable","InfoWindow","content","pixelOffset","maxWidth","parentMarker","getCenter","setCenter","latLong","updateCenter","lat","lng","latitudeChanged","longitudeChanged","zoomChanged","zoomValue","circleRadiusChanged","clearDrawnCircles","markersChanged","markerCollectionChange","queueTask","clearDrawnMarkers","newValue_1","newMarker","Circle","radius","renderPromises","splices_1","_b","removedObj","markerIndex","renderedMarker","toFixed","_c","addedMarkers_1","addedMarker","force","LatLngBounds","extend","getPath","fitBounds","MapTypeId","HYBRID","SATELLITE","TERRAIN","ROADMAP","initDrawingManager","drawingMode","getOverlayType","drawingControl","drawingControlOptions","drawing","DrawingManager","overlay","getArray","encode","encodePath","destroyDrawingManager","OverlayType","POLYGON","POLYLINE","RECTANGLE","CIRCLE","MARKER","drawEnabledChanged","newval","oldval","drawModeChanged","geometry","encoding","decodePath","renderPolygon","polygonObject","paths","Polygon","parentPolygon","polygonsChanged","polygonCollectionChange","splices_2","polygonIndex","strRendered","renderedPolygon","removedPaths","addedPolygons_1","addedPolygon","changeEvent","CustomEvent","createEvent","initCustomEvent","configCallback","extendStatics","__extends","__","LinkHandler","activate","DefaultLinkHandler","_super","getEventInfo","shouldHandleEvent","href","navigate","_hasPushState","anchor","findClosestAnchor","targetIsThisWindow","hasAttribute","altKey","ctrlKey","metaKey","shiftKey","leftButtonClicked","which","isRelative","el","targetWindow","attr","BrowserHistory","linkHandler","_isActive","_checkUrlCallback","_checkUrl","location","$history","wantsPushState","pushState","normalizedOptions","rootUrl","rootStripper","wantsHashChange","_wantsHashChange","hashChange","hasPushState","$location","atRoot","pathname","fragment","_getFragment","search","_getHash","routeStripper","replaceState","silent","_loadUrl","getAbsoluteRoot","port","protocol","hostname","trigger","_d","absoluteUrl","url","updateHash","navigateBack","back","setState","getState","getHistoryIndex","historyIndex","go","movement","forcePushState","location_1","trailingSlash","fragmentOverride","routeHandler","$config","mi","History","__awaiter","_arguments","P","generator","fulfilled","rejected","__generator","sent","trys","verb","TextTemplateLoader","loadTemplate","loadText","address","template","WebpackLoader","moduleRegistry","loaderPlugins","modulesBeingLoaded","useTemplateLoader","addPlugin","fetch","getOrCreateTemplateRegistryEntry","templateIsLoaded","templateLoader","__webpack_require__","moduleExports","exports","_import","defaultHMR","addressParts","loaderPlugin","plugin_1","asyncModuleId","module","hot","normalizeSync","loadAllModules","ids","beingLoaded","exportedValue","__useDefault","default","ensureOriginOnExports","applyPluginToUrl","defaultExport","__esModule","isCssLoaderModule","getCssText","cssLoaderModule","pluginName","TemplateDependency","TemplateRegistryEntry","factoryIsReady","onReady","_template","_factory","addDependency","finalSrc","removeChild","Loader","templateRegistry","_console","_console2","_len2","_key2","_console3","_len3","_key3","_console4","_len4","_key4","loggers","appenders","globalDefaultLevel","standardLevels","isStandardLevel","appendArgs","logFactory","threshold","_appenders$i","logFactoryCustom","appender","connectLoggers","Logger","_level","addAppender","removeAppender","getAppenders","clearAppenders","_level2","disconnectLoggers","addCustomLevel","removeCustomLevel","setLevel","getLevel","cached","isDebugEnabled","isObject","paramTypes","propertyType","getOwn","define","getOrCreateOwn","originStorage","unknownOrigin","moduleMember","Origin","origin","mixin","instanceKeys","possible","decorator","resolvedTarget","alwaysValid","noCompose","ensureProtocolOptions","validate","createProtocolValidator","createProtocolAsserter","assert","hidden","_PLATFORM","capture","performance","requestAnimationFrame","FEATURE_NO_IE","createElementNS","protoProp","strTrim","trim","arrIndexOf","emptyArray","DOMEx","DOMException","checkTokenAndGetIndex","ClassList","elem","trimmedClasses","classes","_updateClassName","classListProto","tokens","updated","toggle","testElement","createMethod","original","DOMTokenList","_toggle","_filterEntries","_entries","_clearEntries","entryType","nowOffset","Date","now","timing","navigationStart","_marksIndex","mark","webkitMark","startTime","duration","measure","webkitMeasure","startMark","endMark","getEntriesByType","webkitGetEntriesByType","getEntriesByName","webkitGetEntriesByName","clearMarks","webkitClearMarks","clearMeasures","webkitClearMeasures","con","nop","memory","log","_CustomEvent","Event","matches","matchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector","webkitMatchesSelector","_FEATURE","shadowDOM","attachShadow","scopedCSS","htmlTemplateElement","children","mutationObserver","MutationObserver","WebKitMutationObserver","ensureHTMLTemplateElement","fixSVGTemplateElement","attrs","insertBefore","fixHTMLTemplateElement","createDocumentFragment","childTemplates","namespaceURI","shadowPoly","ShadowDOMPolyfill","_DOM","NodeList","SVGElement","adoptNode","createAttribute","createTextNode","createComment","createTemplateElement","createMutationObserver","createCustomEvent","eventType","getElementById","query","nextElementSibling","nextSibling","nodeType","createTemplateFromMarkup","markup","temp","appendNode","newNode","replaceNode","replaceChild","unwrap","removeNode","injectStyles","destination","oldStyle","head","childNodes","platform","dom","activeElement","XMLHttpRequest","AggregateError","innerError","skipIfAlreadyAggregate","separator","stack","FEATURE","PLATFORM","noop","eachModule","moduleName","_moduleName","_x","DOM","isInitialized","initializePAL","subject","pd","relativeToFile","file","fileParts","nameParts","normalizedBaseParts","ary","part","trimDots","path1","path2","urlPrefix","schemeMatch","scheme","url1","url2","url3","encodeURIComponent","encodeKey","buildParam","traditional","arrayKey","buildQueryString","pairs","processScalarParam","existedParam","parseComplexParam","queryParams","currentParams","keysLastIndex","preventPollution","prevValue","parseQueryString","queryString","decodeURIComponent","State","charSpec","nextStates","_iterator","_isArray","validChars","invalidChars","put","repeat","escapeRegex","RegExp","StaticSegment","string","caseSensitive","eachChar","regex","generate","DynamicSegment","optional","consumed","StarSegment","EpsilonSegment","RouteRecognizer","rootState","routes","route","currentState","skippableStates","types","statics","dynamics","stars","routeName","isEmpty","segments","normalizedRoute","splitRoute","segment","_match","_name","_addSegment","addSegment","firstState","nextState","jj","routeNames","_i3","getRoute","nameOrRoute","handlersFor","hasRoute","generationUsesHref","routeParams","segmentValue","param","recognize","states","isSlashDropped","normalizedPath","queryStart","decodeURI","pathLen","recognizeChar","solutions","_i4","_l","sortSolutions","captures","currentCapture","RecognizeResults","_names","_params","isDynamic","findHandler","NavigationInstruction","plan","viewPortInstructions","ancestorParams","hasChildRouter","getWildCardName","parentInstruction","allParams","lifecycleArgs","getAllInstructions","instructions","childInstruction","childNavigationInstruction","getAllPreviousInstructions","previousInstruction","addViewPortInstruction","nameOrInitOptions","component","viewPortInstruction","viewPortName","currentViewPort","childRouter","configRoute","wildcardIndex","lastIndexOf","getWildcardPath","wildcardName","getBaseUrl","$encodeURI","encodeURI","nonEmptyRoute","_commitChanges","waitToSwap","currentInstruction","navModel","isActive","refreshNavigation","delaySwaps","_loop_1","viewPort","viewPorts","childNavInstruction","parentCatchHandler","swap","prune","_updateTitle","_buildTitle","titleSeparator","childTitles","navModelTitle","instructionRouter","transformTitle","child_nav_instruction","childTitle","NavModel","relativeHref","updateTitle","_normalizeAbsolutePath","absolute","_createRootedPath","baseUrl","isAbsoluteUrl","_ensureArrayWithSingleRoutePerConfig","routeConfigs","isRootedPath","RouterConfiguration","pipelineSteps","addPipelineStep","addAuthorizeStep","addPreActivateStep","addPreRenderStep","addPostRenderStep","fallbackRoute","_fallbackRoute","mapRoute","useViewPortDefaults","viewPortConfig","viewPortDefaults","routeConfig","createNavModel","addRoute","mapUnknownRoutes","unknownRouteConfig","exportToRouter","handleUnknownRoutes","pipelineStepCount","isRoot","pipelineProvider","addStep","Router","isConfigured","isNavigating","isExplicitNavigation","isExplicitNavigationBack","isNavigatingFirst","isNavigatingNew","isNavigatingRefresh","isNavigatingForward","isNavigatingBack","couldDeactivate","navigation","_fallbackOrder","_recognizer","_childRecognizer","_configuredPromise","_resolveConfiguredPromise","registerViewPort","ensureConfigured","callbackOrConfig","_resolveUrl","navigateToRoute","recognizer","rootedPath","nav","validateRouteConfig","navigationStrategy","withChild","hasOwnRoute","catchAllHandler","_createRouteConfig","parentRouter","length_1","$viewPortDefaults","_refreshBaseUrl","generateBaseUrl","_createNavigationInstruction","queryIndex","urlRecognizationResults","instructionInit","compareQueryParams","first","evaluateNavigationStrategy","_parentCatchAllHandler","newParentInstruction","_findParentInstructionFromRouter","evaluator","createCompletionHandler","status","Pipeline","steps","run","getSteps","nextFn","complete","currentStep","createNextFn","isNavigationCommand","Redirect","shouldContinueProcessing","setRouter","appRouter","useAppRouter","_buildNavigationPlan","forceLifecycleMinimum","buildRedirectPlan","prevInstruction","defaultViewPortConfigs","buildTransitionPlans","viewPortPlans","viewPortConfigs","RedirectToRoute","InternalActivationStrategy","redirect","redirectInstruction","originalInstructionParams","redirectInstructionParams","redirectLocation","newInstructionConfig","hasNewParams","hasDifferentParameterValues","previousViewPortInstructions","prevViewPortInstruction","prevViewPortComponent","newInstructionViewPortConfigs","nextViewPortConfig","viewPortActivationStrategy","determineActivationStrategy","viewPortPlan","prevComponent","prevModuleId","childPlan","currentNavInstruction","newViewPortConfig","prevViewPortViewModel","activationStrategy","prev","prevParams","nextParams","nextWildCardName","prevQueryParams","nextQueryParams","BuildNavigationPlanStep","navigationInstruction","loadNewRoute","routeLoader","loadPromises","determineLoadingPlans","loadingPlan","loadRoute","loadingPlans","planConfig","loadComponent","childRouter_1","getChildRouter","configureRouter","RouteLoader","LoadRouteStep","CommitChangesStep","PipelineStatus","RouterEvent","PipelineSlotName","processDeactivatable","ignoreResult","infos","findDeactivatable","inspect","shouldContinue","iterate","processPotential","addPreviousDeactivatable","prevViewModel","processActivatable","findActivatable","current_1","viewPortComponent","SafeSubscription","subscriptionFunc","_subscribed","_subscription","obs_1","subscribed","CanDeactivatePreviousStep","CanActivateNextStep","DeactivatePreviousStep","ActivateNextStep","PipelineSlot","slotName","slotAlias","PipelineProvider","createPipelineSlot","createPipeline","useCanDeactivateStep","pipeline","_findStep","found","slotSteps","removeStep","slot","_clearSteps","AppRouter","maxInstructionCount","_queue","loadUrl","_queueInstruction","restorePreviousLocation","$viewPort","_dequeueInstruction","viewModel_1","_findViewModel","resolveConfiguredPromise_1","instructionCount","navtracker","currentNavTracker","currentNavigationTracker","processResult","resolveInstruction","finalResult","navigationCommandResult","innerResult","isInnerInstruction","eventArgs","previousLocation","makeRequestFlushFromTimer","timeoutHandle","handleFlushTimer","intervalHandle","setInterval","clearTimeout","clearInterval","TaskQueue","flushing","longStacks","microTaskQueue","microTaskQueueCapacity","requestFlushMicroTaskQueue","flushMicroTaskQueue","requestFlushTaskQueue","flushTaskQueue","_flushQueue","capacity","scan","newLength","filterFlushStack","onError","prepareQueueStack","MAX_VALUE","filterQueueStack","captureStack","AttributeMap","allElements","registerUniversal","InterpolationBindingExpression","parts","attrToRemove","ChildInterpolationBinding","InterpolationBinding","validateTarget","parentElement","targetAccessor","interpolate","updateOneTimeBindings","rawValue","LetExpression","toBindingContext","LetBinding","arg0","LetInterpolationBindingExpression","LetInterpolationBinding","interpolationBinding","createInterpolationBinding","SyntaxInterpreter","attributeMap","interpret","existingInstruction","command","handleUnknownCommand","determineDefaultBindingMode","attrName","contentEditable","defaultBindingMode","attrValue","inString","inEscape","foundName","_getPrimaryPropertyName","inspectAttribute","createAttributeInstruction","primaryProperty","keyValue","isDestructuring","local","items","TemplatingBindingLanguage","syntaxInterpreter","emptyStringExpression","toBindingContextAttr","interpolationParts","parseInterpolation","theInfo","createLetExpressions","letElement","nodeValue","inspectTextContent","char","interpolationStart","pos","partIndex","ActivationStrategy","Compose","InvokeLifecycle","currentController","currentViewModel","changes","created","owningView","pendingTask","processChanges","removeAll","modelChanged","requestUpdate","viewChanged","viewModelChanged","composer","vm","Replace","needsReInitialization","swapOrder","createInstruction","tryActivateViewModel","completeCompositionTask","updateRequested","IfCore","viewFactory","showing","isCaching","returnToCache","_show","_hide","_unbindView","If","conditionChanged","_update","show","animating","elseVm","_swap","Else","_registerInIf","ifVm","previousSibling","if","With","valueChanged","updateOverrideContexts","views","startIndex","updateOverrideContext","createFullOverrideContext","even","$index","$first","$last","$middle","$odd","$even","getItemsSourceExpression","behaviorInstructions","bi","originalAttrName","unwrapExpression","unwrapped","isOneTime","updateOneTimeBinding","ArrayRepeatStrategy","getCollectionObserver","instanceChanged","$repeat","itemsLength","viewsLength","viewsRequireLifecycle","childrenSnapshot","itemNameInBindingContext","matcher_1","itemsPreviouslyInViews_1","viewsToRemove","oldItem","updateViews","removePromise","removeViews","indexOfView","insertView","moveView","_inPlaceProcessItems","removeAllViews","_standardProcessInstanceChanged","addView","viewCount","removeView","middle","updateBindings","instanceMutated","__queuedSplices","__array","maybePromise","_runSplices","queuedSplices_1","runQueuedSplices_1","nextPromise","removeDelta","rmPromises","viewOrPromise","spliceIndexLow","_handleAddedSplices","spliceIndex","addIndex","MapRepeatStrategy","_standardProcessItems","removeIndex","_getViewIndexByKey","NullRepeatStrategy","NumberRepeatStrategy","childrenLength","SetRepeatStrategy","_getViewIndexByValue","RepeatStrategyLocator","matchers","strategies","addStrategy","getStrategy","lifecycleOptionalBehaviors","behaviorRequiresLifecycle","handlesAttached","handlesBind","handlesCreated","handlesDetached","handlesUnbind","targetRequiresLifecycle","behaviors","_viewsRequireLifecycle","AbstractRepeater","sourceIndex","targetIndex","skipAnimation","matcherExtractionMarker","Repeat","strategyLocator","ignoreMutation","Repeat_1","_captureAndRemoveMatcherBinding","matcherBinding","itemsChanged","_unsubscribeCollection","callContext","_observeInnerCollection","_observeCollection","_getInnerCollection","handleCollectionMutated","handleInnerCollectionMutated","newItems","useInnerMatcher","extractMatcherBindingExpression","getChildrenCount","repeatedElement","getFirstElementChild","repeatedElementTargetId","insert","move","removeMany","removeAt","$view","bindings","boundProperties","targetedElementId","instructionIds","instructionId","matcherBindingExpression","aureliaHideClassName","aureliaHideClass","injectAureliaHideStyleAtBoundary","domBoundary","hasAureliaHideStyle","Show","animator","removeClass","addClass","Hide","HTMLSanitizer","sanitize","input","SanitizeHTMLValueConverter","sanitizer","untrustedMarkup","Replaceable","Focus","isAttached","needsApply","blur","detached","cssUrlMatcher","CSSResource","_scoped","_global","_alreadyGloballyInjected","registerViewEngineHooks","p1","fixupCSSUrls","CSSViewEngineHooks","owner","beforeCompile","targetShadowDOM","AttrBindingBehavior","modeBindingBehavior","originalMode","OneTimeBindingBehavior","OneWayBindingBehavior","ToViewBindingBehavior","FromViewBindingBehavior","TwoWayBindingBehavior","throttle","throttleState","elapsed","delay","timeoutId","throttledMethod","ThrottleBindingBehavior","methodToThrottle","originalName","unset","debounceCallSource","debounceState","debouncedMethod","debounceCall","callContextToDebounce","_oldValue","DebounceBindingBehavior","isCallSource","methodToDebounce","debouncer","handleSelfEvent","selfEventCallSource","SelfBindingBehavior","BindingSignaler","signal","SignalBindingBehavior","bindingSignaler","signalName","name_2","notApplicableMessage","UpdateTriggerBindingBehavior","originalHandler","addResourcePlugin","viewUrl","registryEntry","bindableNames","useShadowDOMmode","DynamicElement","_createDynamicElement","configure$1","styleResourcePlugin","ViewCSS","_createCSSResource","EmptyLayoutViewModel","RouterView","viewLocator","compositionTransaction","compositionTransactionNotifier","enlist","$viewPortInstruction","viewModelResource","RouterViewLocator","_notify","layoutInstruction","layoutViewModel","layoutView","layoutModel","viewStrategy","getViewStrategy","makeRelativeTo","compositionTransactionOwnershipToken","tryCapture","viewPortComponentBehaviorInstruction","viewPortController","previousView","work","swapStrategy","ready","owningView_or_layoutView","automate","transactionOwnerShipToken","waitForCompositionComplete","createController","layoutController","slots","newView","notifier","$resource","bindables","findNearest","routerView","EmptyClass","TemplatingRouteLoader","resolveViewModel","DynamicClass","createDynamicClass","createChildContainer","navInstruction","RouteHref","processChange","attributeChanged","ElementEvents","subscriptions","_enqueueHandler","_dequeueHandler","captureOrOptions","defaultListenerOptions","EventHandlerImpl","subscription","disposeAll","once","ResourceLoadContext","hasDependency","ViewCompileInstruction","compileSurrogate","associatedModuleId","normal","BehaviorInstruction","unitTest","anchorIsContainer","containerless","initiatedByBehavior","dynamic","inheritBindingContext","biProto","partReplacements","skipContentProcessing","contentFactory","TargetInstruction","shadowSlot","parentInjectorId","contentExpression","lifting","liftingInstruction","noExpressions","providers","injectorId","elementInstruction","surrogate","tiProto","slotFallbackFactory","capitalMatcher","addHyphenAndLower","_hyphenate","_isAllWhitespace","auInterpolationTarget","textContent","BehaviorPropertyObserver","selfSubscriber","initialValue","notqueued","publishing","_ensurePropertiesDefined","BindableProperty","nameOrConfig","registerWith","_configureDescriptor","defaultValue","defineOn","handlerName","createObserver","changeHandlerName","hasOptions","propertyChanged","_initialize","observerLookup","behaviorHandlesBind","_createDynamicProperty","ViewLocator","origin_1","RelativeViewStrategy","NoViewStrategy","StaticViewStrategy","viewStrategyMetadataKey","createFallbackViewStrategy","ConventionalViewStrategy","convertOriginToViewUrl","BindingLanguage","noNodes","SlotCustomAttribute","auSlotAttribute","PassThroughSlot","destinationName","fallbackFactory","destinationSlot","projections","contentView","renderFallbackContent","nodes","projectionSource","ownerView","ShadowDOM","distributeView","passThroughTo","addNode","removeNodes","needsFallbackRendering","projectFrom","ShadowSlot","isContentProjectionSource","projectFromAnchors","destinationSlots","$node","distributeNodes","auOwnerView","auProjectionSource","auAssignedSlot","_findAnchor","undistributeView","hasSlots","auSlotProjectFrom","auProjectionChildren","ownChildren","undistributeAll","viewIndex","lastView","projectTo","insertNodesBefore","fallbackSlots","getSlotName","defaultSlotKey","destinationOverride","CompositionTransactionNotifier","_compositionCount","_tryCompleteTransaction","CompositionTransactionOwnershipToken","_ownershipToken","thenable","_createThenable","_resolveCallback","CompositionTransaction","View","lastChild","fromCache","viewModelScope","animatableElement","_isUserControlled","returnViewToCache","_systemUpdate","_invokeHook","addBinding","refNode","appendNodesTo","Animator","enter","leave","className","runSequence","animations","registerEffect","effectName","unregisterEffect","ViewSlot","contentSelectors","animateView","getAnimatableElement","animation","removeAction","projectToSlots","_projectionAdd","_projectionInsert","_projectionMove","_projectionRemove","_projectionRemoveAt","_projectionRemoveMany","_projectionRemoveAll","$resolver","providerResolverInstance","ProviderResolver","__providerId__","elementContainerGet","BoundViewFactory","boundViewFactory","elementEvents","ViewResources","superGet","_element","applyInstructions","containers","shadowSlots","elementContainer","commentAnchor","slotDestination","contentElement","makeElementIntoAnchor","createElementContainer","styleStringToObject","firstIndexOfColon","styleObjectToString","parentContainer","factoryCreateInstruction","setCacheSize","doNotOverrideIfAlreadySet","getCachedView","ViewFactory","cacheSize","cachedView","instructable","cloneNode","instructables","surrogateInstruction","currentAttributeValue","styleObject","applySurrogateInstruction","nextInjectorId","lastAUTargetID","makeIntoInstructionTarget","auTargetID","defaultLetHandler","ViewCompiler","bindingLanguage","compile","compileInstruction","_compileNode","targetId","ins","_compileSurrogate","targetLightDOM","_compileElement","getBindingLanguage","wholeText","currentChild","knownAttribute","hasValues","mapAttribute","alteredAttr","_configureProperties","liftsContent","elementProperty","compiler","auShadowSlot","makeShadowSlot","getElement","processAttributes","ViewEngineHooksResource","ResourceModule","moduleInstance","mainResource","onLoaded","loadContext","vs","main","ResourceDescription","resourceTypeMeta","HtmlBehaviorResource","ModuleAnalyzer","getAnalysis","analyze","mainResourceKey","fallbackValue","fallbackKey","conventional","resourceModule","TemplateRegistryViewStrategy","ProxyViewFactory","auSlotBehavior","ViewEngine","viewCompiler","moduleAnalyzer","_pluginMap","extension","loadViewFactory","urlOrRegistryEntry","ensureRegistryEntry","loadTemplateResources","viewModelRequires","viewModelRequireMetadataKey","templateImportCount","req","importViewModelResource","moduleImport","viewModelModule","moduleIds","_applyLoaderPlugin","imports","analysis","associatedModule","allAnalysis","Controller","skipSelfSubscriber","__parentOverrideContext","lastProviderId","doProcessContent","doProcessAttributes","attributeDefaultBindingMode","shadowDOMOptions","processContent","usesShadowDOM","childBindings","hasDynamicOptions","addChildBinding","htmlName","_copyInheritedProperties","registerAttribute","aliases","registerElement","transientView","hasChildNodes","toReplace","viewHost","__propertiesDefined__","derived","this_1","validateBehaviorName","conventionMark","hasParent","getValueConverter","getBindingBehavior","afterCompile","beforeCreate","afterCreate","beforeBind","beforeUnbind","resourceType","templateController","currentProps","newProp","existed","_tryAddHook","counter","one","two","three","four","hooks","bindingLanguageFallback","patchInParent","newParent","originalParent","relativeToView","registerValue","impl","absolutePath","dependencyBaseUrl","InlineViewStrategy","$deps","elDeps","dependencies_1","exported","SwapStrategies","before","with","after","skipActivation","CompositionEngine","previousViews","_createControllerAndSwap","isClass","transaction","noMutations","trackMutation","groupedMutations","binder","mutations","onChildChange","binders","bindersLength","added","addedNodes","removedNodes","onRemove","onAdd","mutationRecords","ChildObserverBinder","selector","anchors","__childObserver__","previousElementSibling","childObserver","instanceOrConfig","customElement","customAttribute","bindable","nameOrConfigOrTarget","key2","descriptor2","actualTarget","ElementConfigResource","defaultShadowDOMOptions","useShadowDOM","targetOrOptions","useViewStrategy","useView","inlineView","noView","targetOrDependencies","TemplatingEngine","_container","_moduleAnalyzer","_viewCompiler","_compositionEngine","configureAnimator","compilerInstructions","letExpressions","rebindView","collectionIndex","rebindAndMoveView","moveToBottom","templateStrategy","moveViewLast","bottomBufferEl","moveViewFirst","topBufferEl","calcMinViewsRequired","scrollerHeight","itemHeight","Math$floor","Math$abs","Math$max","Math$min","Math$round","$isNaN","doc","htmlElement","$raf","getScrollerElement","hasOverflowScroll","scrollingElement","getElementDistanceToTopOfDocument","box","getStyleValues","currentStyle","styleValue","calcOuterHeight","insertBeforeNode","bottomBuffer","getDistanceToParent","childOffsetTop","ArrayVirtualRepeatStrategy","createFirstRow","initCalculation","itemCount","scrollerInfo","getScrollerInfo","existingViewCount","firstView","scroll_el_height","minViewsRequired","onAttached","getMore","isNearBottom","lastViewIndex","getViewRange","scrollerEl","realScrollTop","scroller","topBufferDistance","scrollerScrollTop","distanceToTop","realViewCount","firstVisibleIndex","lastVisibleIndex","updateBuffers","firstIndex","topBufferHeight","bottomBufferHeight","updateBufferElements","isNearTop","edgeDistance","_remeasure","_standardProcessInstanceMutated","currItemCount","resetCalculation","max_views_count","realViewsCount","currIndex","odd","newArray","totalRemovedCount","totalAddedCount","spliceCount","newArraySize","allSplicesAreInplace","removedCount","firstIndexAfterMutation","originalSize","currViewCount","newViewCount","all_splices_are_positive_and_before_view_port","enableScroll","scroller_scroll_top","top_buffer_distance","real_scroll_top","first_index_after_scroll_adjustment","viewsRequiredCount","newTopBufferItemCount","viewCountDelta","newBotBufferItemCount","updateAllViews","viewLength","delta","remeasure","firstViewIndex","top_buffer_item_count_after_scroll_adjustment","bot_buffer_item_count_after_scroll_adjustment","_handlingMutations","revertScrollCheckGuard","NullVirtualRepeatStrategy","VirtualRepeatStrategyLocator","DefaultTemplateStrategy","getScrollContainer","topBuffer","referenceNode","createBuffers","removeBuffers","getFirstElement","firstEl","getLastElement","lastEl","BaseTableTemplateStrategy","getTable","TableBodyStrategy","TableRowStrategy","ListTemplateStrategy","TemplateStrategyLocator","parentTagName","VirtualizationEvents","scrollerSizeChange","itemSizeChange","VirtualRepeat","collectionStrategyLocator","templateStrategyLocator","_isAttached","_ticking","_calledGetMore","_skipNextScrollHandle","_lastGetMore","_onScroll","isFixedHeightContainer","scrollListener","_currScrollerInfo","firstElement","_calcDistanceToTopInterval","prevDistanceToTop","currDistanceToTop","currentScrollerInfo","prevScrollerInfo","_handleScroll","scrollCt","unobserveScroller","_currScrollerContentRect","$clearInterval","_sizeInterval","calculationSignals","$setInterval","$clearInterval_1","observeScroller","_ignoreMutation","getScroller","innerHeight","isHandlingMutations","prevScrollerInfo_1","currentScrollerInfo_1","current_scroller_info","prev_scroller_info","old_range_start_index","old_range_end_index","new_range_start_index","new_range_end_index","scrolling_state","didMovedViews","views_to_move_count","_moveViews","scroll_top_delta","viewsCount","topIndex","time","revertCalledGetMore","firstViewElement","scrollNextAttrName","scrollContext","isAtBottom","isAtTop","$scrollContext","funcCall","skipUpdate","ResizeObserverConstructor","_scrollerResizeObserver","oldRect","newRect","contentRect","sizeChangeHandler","elEvents","_scrollerEvents","sizeChangeEventsHandler","scrollerEvents","InfiniteScrollNext","Validator","__spreadArrays","il","jl","validateTrigger","ValidateResult","rule","valid","Rules","rules","ExpressionVisitor","visitChain","chain","visitArgs","ValidationMessageParser","bindinqLanguage","nullExpression","undefinedExpression","coalesce","MessageExpressionValidator","originalMessage","validationMessages","required","email","maxLength","minItems","maxItems","range","between","ValidationMessageProvider","getMessage","getDisplayName","displayName","words","StandardValidator","messageProvider","validateProperty","validateObject","ruleExists","messageKey","$displayName","$propertyName","$value","$object","$getDisplayName","validateRuleSequence","ruleSequence","sequence","validateAllProperties","allValid","promises","when","promiseOrBoolean","GlobalValidationConfiguration","validatorType","validationTrigger","DEFAULT_VALIDATION_TRIGGER","customValidator","defaultValidationTrigger","getDefaultValidationTrigger","validator","getTargetDOMElement","getObject","objectExpression","getPropertyInfo","originalExpression","isString","PropertyAccessorParser","accessorText","getAccessorExpression","accessor","ValidateEvent","errors","controllerValidateResult","ValidationController","propertyParser","renderers","validating","objects","finishValidating","eventCallbacks","addObject","removeObject","processResultDelta","addError","resolvedPropertyName","__manuallyAdded__","removeError","addRenderer","render","kind","unrender","removeRenderer","registerBinding","propertyInfo","unregisterBinding","resetBinding","getInstructionPredicate","predicate_1","object_1","propertyName_1","rules_1","execute","object_2","propertyName_2","rules_2","_e","resultSets","returnPromise","newResults","oldResults","invokeCallbacks","exception","getAssociatedElements","oldResult","newResultIndex","newResult","elements_1","oldResults_1","newResults_1","validateBinding","registeredBinding","changeTrigger","newTrigger","bindings_1","revalidateErrors","ValidateBindingBehaviorBase","rulesOrController","validationController","getValidateTrigger","change","vbbUpdateSource","validateBlurHandler","manual","standardUpdateTarget","ValidateBindingBehavior","ValidateManuallyBindingBehavior","ValidateOnBlurBindingBehavior","ValidateOnChangeBindingBehavior","ValidateOnChangeOrBlurBindingBehavior","changeOrBlur","ValidationControllerFactory","createForCurrentScope","ValidationErrorsCustomAttribute","boundaryElement","controllerAccessor","errorsInternal","targets","compareDocumentPosition","interestingElements","ValidationRendererCustomAttribute","FluentRuleCustomizer","fluentEnsure","fluentRules","parsers","_addRule","withMessageKey","withMessage","ensure","ensureObject","on","satisfies","satisfiesRule","expectedValue","FluentRules","customRules","argsToConfig","constraint","FluentEnsure","assertInitialized","mergeRules","existingRules","ValidationRules","messageParser","customRule","taggedRules","untaggedRules","off","u","_dereq_","SomePromiseArray","_SomePromiseArray","any","ret","setHowMany","setUnwrap","firstLineError","schedule","Queue","Async","_customScheduler","_isTickUsed","_lateQueue","_normalQueue","_haveDrainedQueues","drainQueues","_drainQueues","_schedule","_drainQueue","_drainQueueStep","_settlePromises","receiver","setScheduler","hasCustomScheduler","haveItemsQueued","fatalError","isNode","stderr","exit","throwLater","invokeLater","_queueTick","settlePromises","_pushOne","_reset","INTERNAL","tryConvertToPromise","calledBind","rejectThis","_reject","targetRejected","promiseRejectionQueued","bindingPromise","_then","bindingResolved","_bitField","bindingRejected","_propagateFrom","propagateFromFunction","_boundValue","boundValueFunction","_target","_setBoundTo","_setOnCancel","_boundTo","_isBound","bluebird","noConflict","cr","callerCache","getterCache","util","canEvaluate","caller","methodName","classString","ensureMethod","namedGetter","indexedGetter","isIdentifier","getter","maybeGetter","getGetter","PromiseArray","apiRejection","tryCatch","errorObj","_async","cancellation","_warn","_isCancellable","_cancelBy","_isFollowing","_followee","_cancelBranched","_cancellationParent","_setWillBeCancelled","_branchHasCancelled","_branchesRemainingToCancel","_enoughBranchesHaveCancelled","canceller","_invokeOnCancel","_cancel","_setCancelled","_cancelPromises","_length","_unsetOnCancel","_onCancelField","isPending","_isCancelled","isCancellable","isCancelled","_doInvokeOnCancel","onCancelCallback","internalOnly","_attachExtraTrace","_resultCancelled","_onCancel","_invokeInternalOnCancel","NEXT_FILTER","getKeys","cb","boundTo","predicateLoop","matchesPredicate","longStackTraces","contextStack","Context","_trace","CapturedTrace","peekContext","_promiseCreated","_pushContext","_popContext","_peekContext","trace","deactivateLongStackTraces","activateLongStackTraces","Promise_pushContext","Promise_popContext","Promise_PeekContext","Promise_peekContext","Promise_promiseCreated","ctx","enableAsyncHooks","disableAsyncHooks","unhandledRejectionHandled","possiblyUnhandledRejection","printWarning","deferUnhandledRejectionCheck","Warning","es5","canAttachTrace","bluebirdFramePattern","nodeFramePattern","parseLinePattern","stackFramePattern","formatStack","indentStackFrames","debugging","env","warnings","wForgottenReturn","unhandledRejectionCheck","_notifyUnhandledRejection","unhandledRejectionClear","suppressUnhandledRejections","_ensurePossibleRejectionHandled","_setRejectionIsUnhandled","_notifyUnhandledRejectionIsHandled","fireRejectionEvent","_setReturnedNonUndefined","_returnedNonUndefined","_isRejectionUnhandled","_settledValue","_setUnhandledRejectionIsNotified","_unsetUnhandledRejectionIsNotified","_isUnhandledRejectionNotified","_unsetRejectionIsUnhandled","shouldUseOwnTrace","onPossiblyUnhandledRejection","_getContext","contextBind","onUnhandledRejectionHandled","disableLongStackTraces","longStackTracesIsSupported","Promise_captureStackTrace","_captureStackTrace","Promise_attachExtraTrace","Promise_dereferenceTrace","_dereferenceTrace","longStackTracesCaptureStackTrace","longStackTracesAttachExtraTrace","longStackTracesDereferenceTrace","hasLongStackTraces","legacyHandlers","unhandledrejection","onunhandledrejection","rejectionhandled","onrejectionhandled","fireDomEvent","dispatch","legacy","domEvent","fireGlobalEvent","emit","generatePromiseLifecycleEventObject","eventToObjectGenerator","promiseCreated","promiseFulfilled","promiseRejected","promiseResolved","promiseCancelled","promiseChained","warning","unhandledRejection","rejectionHandled","activeFireEvent","globalEventFired","domEventFired","defaultFireEvent","cancellationExecute","executor","onCancel","_attachCancellationCallback","cancellationAttachCancellationCallback","previousOnCancel","cancellationOnCancel","cancellationSetOnCancel","cancellationClearCancellationData","cancellationPropagateFrom","flags","branchesRemainingToCancel","opts","warningsOption","_clearCancellationData","_execute","monitoring","_fireEvent","nodeSupportsAsyncResource","asyncHooks","cur","isFulfilled","ignoreSelf","_parent","attachExtraTrace","__stackCleaned__","parsed","parseStackAndMessage","notEnumerableProp","formatAndLogError","cleanStack","isTraceLine","isInternalFrame","shouldIgnore","stackFramesAsArray","isSoft","localHandler","localEventFired","formatNonError","maxChars","snip","captureStackTrace","parseLineInfoRegex","parseLineInfo","fileName","_promisesCreated","uncycle","inherits","stackToIndex","cycleEdgeNode","currentChildLength","stacks","currentLastIndex","currentLastLine","commonRootMeetPoint","removeCommonRoots","removeDuplicateOrEmptyJumps","reconstructStack","v8stackFramePattern","v8stackFormatter","stackTraceLimit","ignoreUntil","hasStackAfterThrow","isTTY","color","checkForgottenReturns","returnValue","handlerLine","creatorLine","traceLines","lineMatches","firstUserLine","msg","setBounds","lastLineError","firstFileName","lastFileName","firstStackLines","lastStackLines","deprecated","replacement","returner","thrower","thenReturn","thenThrow","catchThrow","_reason","caught","catchReturn","_value","PromiseReduce","PromiseAll","promiseAllThis","each","mapSeries","_TypeError","_RangeError","Objectfreeze","subError","nameProperty","defaultMessage","SubError","CancellationError","TimeoutError","RangeError","methods","OperationalError","cause","indent","lines","errorTypes","RejectionError","isES5","getDescriptor","propertyIsWritable","ObjectKeys","PromiseMap","catchFilter","PassThroughHandlerContext","called","cancelPromise","FinallyHandlerCancelReaction","finallyHandler","checkCancel","succeed","fail","reasonOrValue","isFinallyHandler","isRejected","_passThrough","success","lastly","tap","tapCatch","handlerOrPredicate","catchInstances","Proxyable","yieldHandlers","PromiseSpawn","generatorFunction","yieldHandler","internal","_finallyPromise","_promise","_stack","_generatorFunction","_receiver","_generator","_yieldHandlers","_yieldedPromise","_cancellationPhase","_isResolved","_cleanup","_fulfill","_promiseCancelled","coroutine","returnSentinel","_continue","_promiseFulfilled","_promiseRejected","_run","_rejectCallback","traceParent","promiseFromYieldHandler","bitField","_proxy","PromiseSpawn$","spawn","addYieldHandler","spread","MappingPromiseArray","limit","_filter","constructor$","_callback","_preservedValues","_limit","_inFlight","_asyncInit","concurrency","_init$","_init","preservedValues","_totalResolved","_resolve","booleans","_resolveFromSyncValue","attempt","maybeWrapAsError","rErrorKey","multiArgs","wrapped","isUntypedError","markAsOriginatingFromRejection","wrapAsOperationalError","spreadAdapter","nodeback","successAdapter","errorAdapter","newReason","asCallback","nodeify","makeSelfResolutionError","reflectHandler","PromiseInspection","UNDEFINED_BINDING","setReflectHandler","getDomain","domain","getContextDomain","AsyncResource","getContextAsyncHooks","getContext","APPLY","createContext","nodebackForPromise","_fulfillmentHandler0","_rejectionHandler0","_promise0","_receiver0","_resolveFromExecutor","deferResolve","deferReject","fillTypes","reflect","didFulfill","didReject","_setIsFinal","toJSON","fulfillmentValue","rejectionReason","originatesFromRejection","getNewLibraryCopy","fromNode","fromCallback","_isFateSealed","_setAsyncGuaranteed","cast","_setFulfilled","internalData","haveInternalData","settler","_settlePromiseCtx","_settlePromiseLateCancellationObserver","_addCallbacks","_setLength","_setRejected","_setFollowing","_isFinal","_unsetCancelled","_setNoAsyncGuarantee","_receiverAt","_promiseAt","_fulfillmentHandlerAt","_rejectionHandlerAt","_migrateCallback0","follower","fulfill","_migrateCallbackAt","base","proxyable","shouldBind","_setFollowee","synchronous","ignoreNonErrorWarnings","ensureErrorObject","hasStack","_settlePromiseFromHandler","_settlePromise","isPromise","asyncGuaranteed","_settlePromise0","_clearCallbackDataAtIndex","_fulfillPromises","_rejectPromises","toFastProperties","resolveValueIfEmpty","asArray","_iterate","_resolveEmptyArray","toResolutionValue","getActualLength","shouldCopyValues","isResolved","THIS","withAppended","defaultPromisified","__isPromisified__","noCopyPropsPattern","defaultFilter","propsFilter","isPromisified","hasPromisified","suffix","getDataPropertyOrDefault","escapeIdentRegex","makeNodePromisified","makeNodePromisifiedEval","defaultThis","promisified","promisifyAll","promisifier","suffixRegexp","inheritedDataKeys","passesDefaultFilter","keyWithoutAsyncSuffix","checkValid","promisifiableMethods","promisifiedKey","promisify","copyDescriptors","Es6Map","mapToEntries","extractEntry","PropertiesPromiseArray","isMap","_isMap","castValue","entriesToMap","keyOffset","_capacity","_front","_willBeOverCapacity","_checkCapacity","wrapMask","front","_resizeTo","oldCapacity","srcIndex","dst","dstIndex","arrayMove","raceLater","race","ReductionPromiseArray","_each","_fn","_initialValue","_currentCancellable","_eachValues","valueOrReason","gotAccum","accum","_gotAccum","gotValue","_eachComplete","sender","_resultCancelled$","toggleScheduled","div2","NativePromise","getNativePromise","GlobalSetImmediate","setImmediate","ProcessNextTick","nextTick","isRecentNode","nativePromise","standalone","cordova","SettledPromiseArray","_promiseResolved","inspection","_settledValueField","settle","allSettled","CANCELLATION","_howMany","_unwrap","_initialized","howMany","isArrayResolved","_canPossiblyFulfill","_getRangeError","_addFulfilled","_fulfilled","_addRejected","_checkOutcome","_rejected","__isCancelled","hasProp","doGetThen","getThen","isAnyBluebirdPromise","doThenable","HandleWrapper","afterValue","ms","successClear","failureClear","timeout","handleWrapper","afterTimeout","NULL","Disposer","_data","_context","FunctionDisposer","maybeUnwrapDisposer","isDisposer","_setDisposable","ResourceList","tryDispose","doDispose","_unsetDisposable","using","spreadArgs","disposer","reflectedResources","resultPromise","inspections","_isDisposable","_getDisposer","castPreservingDisposable","_disposer","tryCatchTarget","globalObject","tryCatcher","isPrimitive","excludedPrototypes","isExcludedProto","visitedKeys","enumeration","thisAssignmentPattern","rident","safeToString","isError","ArrayFrom","itResult","hasEnvVariables","hasMethods","hasMethodsOtherThanConstructor","hasThisAssignmentAndStaticMethods","Child","T","appendee","maybeError","FakeConstructor","ic","foo","filledRange","ignore","to","runInAsyncScope","supportsAsync","$","UTCDate","UTC","UTCToday","today","getFullYear","getMonth","getDate","isUTCEquals","date1","date2","getUTCFullYear","getUTCMonth","getUTCDate","deprecationMsg","datepicker","extras","DateArray","valueOf","new_array","copy","Datepicker","_events","_secondaryEvents","_process_options","dates","viewDate","defaultViewDate","focusDate","isInput","inputField","hasClass","isInline","picker","DPGlobal","_check_template","templates","leftArrow","rightArrow","_buildEvents","_attachEvents","appendTo","rtl","calendarWeeks","startDate","_o","endDate","daysOfWeekDisabled","daysOfWeekHighlighted","datesDisabled","_allow_update","setViewMode","startView","fillDow","fillMonths","_resolveViewName","viewModes","viewMode","inArray","_resolveDaysOfWeek","daysOfWeek","tmp","ex","lang","defaults","minViewMode","maxViewMode","multidate","multidateSeparator","weekStart","weekEnd","format","parseFormat","_local_to_utc","_zero_time","parseDate","assumeNearbyYear","Infinity","plc","orientation","_plc","grep","word","year","month","day","_applyEvents","evs","ev","_unapplyEvents","keyup","proxy","keyCode","keydown","paste","showOnFocus","click","_focused_from","immediateUpdates","date","navArrowsClick","dayCellClick","place","hide","_detachEvents","_attachSecondaryEvents","_detachSecondaryEvents","_trigger","altdate","local_date","_utc_to_local","ix","formatDate","enableOnReadonly","msMaxTouchPoints","disableTouchKeyboard","detach","forceParse","dateString","originalEvent","clipboardData","getData","setDate","utc","getTime","getTimezoneOffset","_zero_utc_time","getDates","getUTCDates","selected_date","clearDates","autoclose","setDates","setUTCDates","setUTCDate","formatted","getFormattedDate","getStartDate","setStartDate","updateNavArrows","getEndDate","setEndDate","setDaysOfWeekDisabled","setDaysOfWeekHighlighted","setDatesDisabled","calendarWidth","outerWidth","calendarHeight","outerHeight","windowWidth","appendOffset","parentsZindex","parents","itemZIndex","zIndex","zIndexOffset","yorient","oldDates","fromArgs","dateWithinRange","updateViewDate","fill","showWeekDays","dowCnt","daysMin","localDate","monthsShort","setRange","getClassNames","cls","todayHighlight","dateIsDisabled","getUTCDay","_fill_yearsView","cssClass","factor","startYear","endYear","beforeFn","tooltip","startVal","endVal","focusedVal","currVal","startMonth","endMonth","todaytxt","cleartxt","titleFormat","todayDate","titleBtnVisible","todayBtn","weekOfDateIsDisabled","clearBtn","prevMonth","nextMonth","setUTCFullYear","weekDay","clsName","ws","th","yth","calWeek","beforeShowDay","isFunction","uniqueSort","unique","monthsTitle","months","eq","beforeShowMonth","that","moDate","beforeShowYear","beforeShowDecade","beforeShowCentury","prevIsDisabled","nextIsDisabled","toggleClass","_setDate","setUTCMonth","timestamp","currentTarget","dir","navStep","moveMonth","_toggle_multidate","toggleActive","moveDay","newDate","moveWeek","new_month","new_date","mag","moveYear","moveAvailableDate","newViewDate","dateChanged","keyboardNavigation","DateRangePicker","inputs","jquery","keepEmptyValues","datepickerPlugin","dateUpdated","pickers","updateDates","updateRanges","updating","dp","keep_empty_values","internal_return","elopts","out","re_lower","opts_from_el","locopts","locale_opts","opts_from_locale","toArray","en","days","daysShort","validParts","nonpunctuation","toValue","toDisplay","separators","assumeNearby","fn_map","w","dateAliases","yesterday","tomorrow","filtered","setters_order","setters_map","yyyy","fparts","match_part","cnt","_date","D","DD","M","MM","yy","dd","mm","seps","headTemplate","contTemplate","footTemplate","de","hu","GetIntrinsic","callBind","$indexOf","allowMissing","intrinsic","$apply","$call","$reflectApply","$gOPD","$max","originalFunction","applyBind","isCallable","tryToString","$TypeError","argument","$String","toIndexedObject","toAbsoluteIndex","lengthOfArrayLike","IS_INCLUDES","fromIndex","uncurryThis","stringSlice","hasOwn","getOwnPropertyDescriptorModule","definePropertyModule","exceptions","fails","F","DESCRIPTORS","createPropertyDescriptor","bitmap","makeBuiltIn","defineGlobalProperty","simple","unsafe","nonConfigurable","nonWritable","documentAll","IS_HTMLDDA","EXISTS","Deno","v8","createNonEnumerableProperty","defineBuiltIn","copyConstructorProperties","isForced","sourceProperty","TARGET","GLOBAL","STATIC","stat","dontCallGetSet","forced","sham","NATIVE_BIND","FunctionPrototype","PROPER","CONFIGURABLE","uncurryThisWithBind","namespace","aCallable","isNullOrUndefined","V","globalThis","toObject","classof","$Object","store","functionToString","inspectSource","NATIVE_WEAK_MAP","shared","sharedKey","hiddenKeys","OBJECT_ALREADY_INITIALIZED","facade","STATE","enforce","getterFor","TYPE","$documentAll","detection","POLYFILL","NATIVE","getBuiltIn","isPrototypeOf","USE_SYMBOL_AS_UID","$Symbol","CONFIGURABLE_FUNCTION_NAME","InternalStateModule","enforceInternalState","getInternalState","CONFIGURABLE_LENGTH","TEMPLATE","setter","arity","trunc","IE8_DOM_DEFINE","V8_PROTOTYPE_DEFINE_BUG","anObject","toPropertyKey","$getOwnPropertyDescriptor","ENUMERABLE","WRITABLE","Attributes","propertyIsEnumerableModule","internalObjectKeys","CORRECT_PROTOTYPE_GETTER","IE_PROTO","ObjectPrototype","enumBugKeys","$propertyIsEnumerable","NASHORN_BUG","objectKeys","TO_ENTRIES","pref","getOwnPropertyNamesModule","getOwnPropertySymbolsModule","SHARED","IS_PURE","copyright","license","V8_VERSION","toIntegerOrInfinity","integer","IndexedObject","requireObjectCoercible","number","isSymbol","getMethod","ordinaryToPrimitive","wellKnownSymbol","TO_PRIMITIVE","exoticToPrim","toPrimitive","postfix","NATIVE_SYMBOL","WellKnownSymbolsStore","createWellKnownSymbol","withoutSetter","$entries","nativeGetPrototypeOf","dijkstra","single_source_shortest_paths","graph","predecessors","costs","closest","cost_of_s_to_u","adjacent_nodes","cost_of_s_to_u_plus_cost_of_e","cost_of_s_to_v","PriorityQueue","make","empty","cost","extract_shortest_path_from_predecessor_list","find_path","sorter","default_sorter","_setPrototypeOf","_construct","Class","Proxy","_isNativeReflectConstruct","_slicedToArray","arr","_arrayWithHoles","_s","_arr","_n","_iterableToArrayLimit","_unsupportedIterableToArray","_nonIterableRest","_toConsumableArray","_arrayLikeToArray","_arrayWithoutHoles","_iterableToArray","_nonIterableSpread","arr2","isFrozen","seal","fun","thisValue","Func","arrayForEach","unapply","arrayPop","arrayPush","stringToLowerCase","stringToString","stringMatch","stringReplace","stringIndexOf","stringTrim","regExpTest","typeErrorCreate","addToSet","transformCaseFunc","lcElement","clone","_step","newObject","allowArrayLike","normalCompletion","didErr","_createForOfIteratorHelper","_step$value","lookupGetter","html$1","svg$1","svgFilters","svgDisallowed","mathMl$1","mathMlDisallowed","mathMl","xml","MUSTACHE_EXPR","ERB_EXPR","TMPLIT_EXPR","DATA_ATTR","ARIA_ATTR","IS_ALLOWED_URI","IS_SCRIPT_OR_DATA","ATTR_WHITESPACE","DOCTYPE_NAME","getGlobal","_createTrustedTypesPolicy","trustedTypes","createPolicy","ATTR_NAME","currentScript","policyName","createHTML","createScriptURL","scriptUrl","createDOMPurify","DOMPurify","isSupported","originalDocument","DocumentFragment","HTMLTemplateElement","Node","NodeFilter","_window$NamedNodeMap","NamedNodeMap","MozNamedAttrMap","HTMLFormElement","DOMParser","ElementPrototype","getNextSibling","getChildNodes","trustedTypesPolicy","emptyHTML","_document","createNodeIterator","getElementsByTagName","importNode","createHTMLDocument","PARSER_MEDIA_TYPE","MUSTACHE_EXPR$1","ERB_EXPR$1","TMPLIT_EXPR$1","DATA_ATTR$1","ARIA_ATTR$1","IS_SCRIPT_OR_DATA$1","ATTR_WHITESPACE$1","IS_ALLOWED_URI$1","ALLOWED_TAGS","DEFAULT_ALLOWED_TAGS","ALLOWED_ATTR","DEFAULT_ALLOWED_ATTR","CUSTOM_ELEMENT_HANDLING","tagNameCheck","attributeNameCheck","allowCustomizedBuiltInElements","FORBID_TAGS","FORBID_ATTR","ALLOW_ARIA_ATTR","ALLOW_DATA_ATTR","ALLOW_UNKNOWN_PROTOCOLS","ALLOW_SELF_CLOSE_IN_ATTR","SAFE_FOR_TEMPLATES","WHOLE_DOCUMENT","SET_CONFIG","FORCE_BODY","RETURN_DOM","RETURN_DOM_FRAGMENT","RETURN_TRUSTED_TYPE","SANITIZE_DOM","SANITIZE_NAMED_PROPS","KEEP_CONTENT","IN_PLACE","USE_PROFILES","FORBID_CONTENTS","DEFAULT_FORBID_CONTENTS","DATA_URI_TAGS","DEFAULT_DATA_URI_TAGS","URI_SAFE_ATTRIBUTES","DEFAULT_URI_SAFE_ATTRIBUTES","MATHML_NAMESPACE","SVG_NAMESPACE","HTML_NAMESPACE","NAMESPACE","IS_EMPTY_INPUT","ALLOWED_NAMESPACES","DEFAULT_ALLOWED_NAMESPACES","SUPPORTED_PARSER_MEDIA_TYPES","CONFIG","formElement","isRegexOrFunction","testValue","_parseConfig","ADD_URI_SAFE_ATTR","ADD_DATA_URI_TAGS","ALLOWED_URI_REGEXP","ADD_TAGS","ADD_ATTR","table","tbody","MATHML_TEXT_INTEGRATION_POINTS","HTML_INTEGRATION_POINTS","COMMON_SVG_AND_HTML_ELEMENTS","ALL_SVG_TAGS","ALL_MATHML_TAGS","_forceRemove","_removeAttribute","getAttributeNode","_initDocument","dirty","leadingWhitespace","dirtyPayload","parseFromString","createDocument","_createIterator","SHOW_ELEMENT","SHOW_COMMENT","SHOW_TEXT","_isNode","_executeHook","entryPoint","hook","_sanitizeElements","elm","allowedTags","_basicCustomElementTest","_checkValidNamespace","_isValidAttribute","lcTag","lcName","_sanitizeAttributes","hookEvent","keepAttr","allowedAttributes","_attr","forceKeepAttr","getAttributeType","_sanitizeShadowDOM","shadowNode","shadowIterator","nextNode","importedNode","returnNode","nodeIterator","shadowroot","shadowrootmod","serializedHTML","outerHTML","doctype","setConfig","clearConfig","isValidAttribute","addHook","hookFunction","removeHook","removeHooks","removeAllHooks","point","second","ReflectOwnKeys","R","ReflectApply","NumberIsNaN","EventEmitter","emitter","errorListener","removeListener","eventTargetAgnosticAddListener","addErrorHandlerIfEventEmitter","_eventsCount","_maxListeners","defaultMaxListeners","checkListener","listener","_getMaxListeners","_addListener","newListener","warned","onceWrapper","fired","wrapFn","_onceWrap","_listeners","evlistener","unwrapListeners","arrayClone","listenerCount","wrapListener","setMaxListeners","getMaxListeners","doError","er","listeners","prependListener","prependOnceListener","originalListener","spliceOne","removeAllListeners","rawListeners","eventNames","___EXPOSE_LOADER_IMPORT___","___EXPOSE_LOADER_GLOBAL_THIS___","toStr","forEachArray","forEachString","forEachObject","bound","boundLength","boundArgs","Empty","$SyntaxError","SyntaxError","$Function","getEvalledConstructor","expressionSyntax","throwTypeError","ThrowTypeError","calleeThrows","gOPDthrows","hasSymbols","getProto","needsEval","TypedArray","INTRINSICS","ArrayBuffer","Atomics","BigInt","BigInt64Array","BigUint64Array","DataView","eval","EvalError","Float32Array","Float64Array","FinalizationRegistry","Int8Array","Int16Array","Int32Array","SharedArrayBuffer","Uint8ClampedArray","Uint16Array","Uint32Array","URIError","WeakRef","errorProto","doEval","gen","LEGACY_ALIASES","$concat","$spliceApply","$replace","$strSlice","$exec","rePropName","reEscapeChar","getBaseIntrinsic","intrinsicName","subString","stringToPath","intrinsicBaseName","intrinsicRealName","skipFurtherCaching","isOwn","origSymbol","hasSymbolSham","sym","symObj","syms","superCtor","super_","TempCtor","hasToStringTag","$toString","callBound","isStandardArguments","isLegacyArguments","callee","supportsStandardArguments","badArrayLike","isCallableMarker","fnToStr","reflectApply","constructorRegex","isES6ClassFn","fnStr","tryFunctionObject","isIE68","isDDA","strClass","GeneratorFunction","isFnRegex","generatorFunc","getGeneratorFunc","availableTypedArrays","typedArrays","$slice","toStrTags","typedArray","superProto","anyTrue","tryTypedArrays","noGlobal","flat","class2type","fnToString","ObjectFunctionString","support","isWindow","preservedScriptAttributes","nonce","noModule","DOMEval","toType","jQuery","isArrayLike","num","pushStack","elems","merge","prevObject","_elem","copyIsArray","deep","isPlainObject","expando","isReady","Ctor","isEmptyObject","globalEval","makeArray","invert","callbackExpect","guid","Sizzle","Expr","getText","isXML","tokenize","select","outermostContext","sortInput","hasDuplicate","setDocument","docElem","documentIsHTML","rbuggyQSA","rbuggyMatches","preferredDoc","dirruns","classCache","createCache","tokenCache","compilerCache","nonnativeSelectorCache","sortOrder","pushNative","whitespace","identifier","pseudos","rwhitespace","rtrim","rcomma","rcombinators","rdescend","rpseudo","ridentifier","matchExpr","rhtml","rinputs","rheader","rnative","rquickExpr","rsibling","runescape","funescape","escape","nonHex","high","rcssescape","fcssescape","asCodePoint","unloadHandler","inDisabledFieldset","addCombinator","disabled","els","seed","nid","groups","newSelector","newContext","getElementsByClassName","qsa","testContext","toSelector","qsaError","cacheLength","markFunction","addHandle","attrHandle","siblingCheck","diff","createInputPseudo","createButtonPseudo","createDisabledPseudo","isDisabled","createPositionalPseudo","matchIndexes","hasCompare","subWindow","attachEvent","getById","getElementsByName","attrId","disconnectedMatch","adown","bup","compare","sortDetached","aup","ap","bp","expr","specified","sel","duplicates","detectDuplicates","sortStable","selectors","createPseudo","relative","preFilter","excess","unquoted","nodeNameSelector","operator","what","_argument","forward","ofType","uniqueCache","outerCache","nodeIndex","useCache","uniqueID","pseudo","setFilters","unmatched","elemLang","hasFocus","tabIndex","selectedIndex","_matchIndexes","radio","checkbox","password","submit","combinator","skip","checkNonElements","doneName","oldCache","newCache","elementMatcher","condense","newUnmatched","mapped","setMatcher","postFilter","postFinder","postSelector","preMap","postMap","preexisting","multipleContexts","matcherIn","matcherOut","matcherFromTokens","checkContext","leadingRelative","implicitRelative","matchContext","matchAnyContext","filters","parseOnly","soFar","preFilters","setMatchers","elementMatchers","bySet","byElement","superMatcher","outermost","matchedCount","setMatched","contextBackup","dirrunsUnique","matcherFromGroupMatchers","compiled","isXMLDoc","escapeSelector","until","truncate","siblings","rneedsContext","needsContext","rsingleTag","winnow","qualifier","not","rootjQuery","parseHTML","rparentsprev","guaranteedUnique","contents","sibling","prevAll","addBack","parentsUntil","nextAll","nextUntil","prevUntil","contentDocument","rnothtmlwhite","Identity","Thrower","adoptValue","noValue","Callbacks","flag","createOptions","firing","locked","firingIndex","fire","stopOnFalse","disable","fireWith","Deferred","tuples","always","deferred","pipe","newDefer","tuple","returned","progress","onFulfilled","onRejected","onProgress","maxDepth","depth","special","mightThrow","notifyWith","resolveWith","exceptionHook","stackTrace","rejectWith","getStackHook","stateString","singleValue","remaining","resolveContexts","resolveValues","updateFunc","rerrorNames","readyException","readyList","readyWait","wait","doScroll","chainable","emptyGet","bulk","rmsPrefix","rdashAlpha","fcamelCase","_all","letter","acceptData","Data","hasData","dataPriv","dataUser","rbrace","rmultiDash","dataAttr","removeData","_removeData","dequeue","startLength","_queueHooks","clearQueue","pnum","rcssNum","cssExpand","composed","isHiddenWithinTree","display","adjustCSS","valueParts","tween","adjusted","scale","maxIterations","initial","unit","cssNumber","initialInUnit","defaultDisplayMap","getDefaultDisplay","showHide","rcheckableType","rtagName","rscriptType","checkClone","noCloneChecked","wrapMap","thead","col","tr","td","_default","setGlobalEval","refElements","tfoot","colgroup","caption","optgroup","buildFragment","scripts","selection","ignored","wrap","htmlPrefilter","rtypenamespace","returnTrue","returnFalse","expectSync","safeActiveElement","origFn","leverageNative","notAsync","saved","isTrigger","delegateType","stopImmediatePropagation","handleObjIn","eventHandle","handleObj","namespaces","origType","elemData","triggered","bindType","delegateCount","setup","mappedTypes","origCount","teardown","removeEvent","nativeEvent","handlerQueue","fix","delegateTarget","preDispatch","isPropagationStopped","isImmediatePropagationStopped","rnamespace","postDispatch","matchedHandlers","matchedSelectors","button","addProp","noBubble","beforeunload","isDefaultPrevented","defaultPrevented","relatedTarget","timeStamp","isSimulated","changedTouches","eventPhase","pageX","pageY","charCode","buttons","clientX","clientY","offsetX","offsetY","pointerId","pointerType","screenX","screenY","targetTouches","toElement","touches","mouseenter","mouseleave","pointerenter","pointerleave","orig","related","rnoInnerhtml","rchecked","rcleanScript","manipulationTarget","disableScript","restoreScript","cloneCopyEvent","dest","udataOld","udataCur","fixInput","domManip","hasScripts","iNoClone","valueIsFunction","_evalUrl","keepData","cleanData","dataAndEvents","deepDataAndEvents","srcElements","destElements","inPage","replaceWith","prependTo","insertAfter","replaceAll","rnumnonpx","rcustomProp","getStyles","opener","rboxStyle","rtrimCSS","curCSS","computed","minWidth","isCustomProp","getPropertyValue","pixelBoxStyles","addGetHookIf","conditionFn","hookFn","computeStyleTests","divStyle","pixelPositionVal","reliableMarginLeftVal","roundPixelMeasures","marginLeft","pixelBoxStylesVal","boxSizingReliableVal","scrollboxSizeVal","reliableTrDimensionsVal","backgroundClip","clearCloneStyle","boxSizingReliable","pixelPosition","reliableMarginLeft","scrollboxSize","reliableTrDimensions","trChild","trStyle","borderTopWidth","borderBottomWidth","cssPrefixes","emptyStyle","vendorProps","finalPropName","cssProps","capName","vendorPropName","rdisplayswap","cssShow","visibility","cssNormalTransform","letterSpacing","fontWeight","setPositiveNumber","subtract","boxModelAdjustment","dimension","isBorderBox","computedVal","extra","getWidthOrHeight","valueIsBorderBox","offsetProp","getClientRects","Tween","easing","cssHooks","opacity","origName","scrollboxSizeBuggy","border","expand","expanded","propHooks","percent","eased","linear","swing","cos","PI","fxNow","inProgress","rfxtypes","rrun","interval","tick","createFxNow","genFx","includeWidth","createTween","Animation","tweeners","stopped","prefilters","currentTime","tweens","specialEasing","originalProperties","originalOptions","gotoEnd","propFilter","timer","anim","tweener","oldfire","propTween","restoreDisplay","isBox","dataShow","unqueued","prefilter","speed","speeds","fadeTo","optall","doAnimation","finish","stopQueue","timers","cssFn","slideDown","slideUp","slideToggle","fadeIn","fadeOut","fadeToggle","slow","fast","checkOn","optSelected","radioValue","boolHook","removeAttr","nType","attrHooks","bool","attrNames","lowercaseName","rfocusable","rclickable","stripAndCollapse","getClass","classesToArray","removeProp","propFix","tabindex","classNames","curValue","finalValue","stateVal","isValidValue","rreturn","valHooks","optionSet","focusin","rfocusMorph","stopPropagationCallback","onlyHandlers","bubbleType","ontype","lastElement","eventPath","parentWindow","simulate","triggerHandler","attaches","rquery","parseXML","parserErrorElem","rbracket","rCRLF","rsubmitterTypes","rsubmittable","buildParams","valueOrFunction","serialize","serializeArray","r20","rhash","rantiCache","rheaders","rnoContent","rprotocol","transports","allTypes","originAnchor","addToPrefiltersOrTransports","structure","dataTypeExpression","dataType","dataTypes","inspectPrefiltersOrTransports","jqXHR","inspected","seekingTransport","prefilterOrFactory","dataTypeOrTransport","ajaxExtend","flatOptions","ajaxSettings","active","lastModified","etag","isLocal","processData","contentType","accepts","json","responseFields","converters","ajaxSetup","ajaxPrefilter","ajaxTransport","ajax","transport","cacheURL","responseHeadersString","responseHeaders","timeoutTimer","urlAnchor","fireGlobals","uncached","callbackContext","globalEventContext","completeDeferred","statusCode","requestHeaders","requestHeadersNames","strAbort","getResponseHeader","getAllResponseHeaders","setRequestHeader","overrideMimeType","mimeType","abort","statusText","finalText","crossDomain","hasContent","ifModified","headers","beforeSend","send","nativeStatusText","responses","isSuccess","response","modified","ct","finalDataType","firstDataType","ajaxHandleResponses","conv2","conv","dataFilter","throws","ajaxConvert","getJSON","getScript","wrapAll","wrapInner","htmlIsFunction","visible","xhr","xhrSuccessStatus","xhrSupported","cors","errorCallback","username","xhrFields","onload","onabort","ontimeout","onreadystatechange","responseType","responseText","scriptAttrs","charset","scriptCharset","oldCallbacks","rjsonp","jsonp","jsonpCallback","originalSettings","overwritten","responseContainer","jsonProp","keepScripts","animated","setOffset","curPosition","curLeft","curCSSTop","curTop","curOffset","curCSSLeft","curElem","parentOffset","scrollTo","Height","Width","defaultExtra","funcName","undelegate","hover","fnOver","fnOut","holdReady","hold","parseJSON","isNumeric","_jQuery","_$","FUNC_ERROR_TEXT","HASH_UNDEFINED","PLACEHOLDER","WRAP_PARTIAL_FLAG","WRAP_ARY_FLAG","INFINITY","MAX_SAFE_INTEGER","NAN","MAX_ARRAY_LENGTH","wrapFlags","argsTag","arrayTag","boolTag","dateTag","errorTag","funcTag","genTag","mapTag","numberTag","objectTag","promiseTag","regexpTag","setTag","stringTag","symbolTag","weakMapTag","arrayBufferTag","dataViewTag","float32Tag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint8ClampedTag","uint16Tag","uint32Tag","reEmptyStringLeading","reEmptyStringMiddle","reEmptyStringTrailing","reEscapedHtml","reUnescapedHtml","reHasEscapedHtml","reHasUnescapedHtml","reEscape","reEvaluate","reInterpolate","reIsDeepProp","reIsPlainProp","reRegExpChar","reHasRegExpChar","reTrimStart","reWhitespace","reWrapComment","reWrapDetails","reSplitDetails","reAsciiWord","reForbiddenIdentifierChars","reEsTemplate","reFlags","reIsBadHex","reIsBinary","reIsHostCtor","reIsOctal","reIsUint","reLatin","reNoMatch","reUnescapedString","rsAstralRange","rsComboRange","rsComboMarksRange","rsDingbatRange","rsLowerRange","rsUpperRange","rsVarRange","rsBreakRange","rsMathOpRange","rsAstral","rsBreak","rsCombo","rsDigits","rsDingbat","rsLower","rsMisc","rsFitz","rsNonAstral","rsRegional","rsSurrPair","rsUpper","rsZWJ","rsMiscLower","rsMiscUpper","rsOptContrLower","rsOptContrUpper","reOptMod","rsModifier","rsOptVar","rsSeq","rsEmoji","rsSymbol","reApos","reComboMark","reUnicode","reUnicodeWord","reHasUnicode","reHasUnicodeWord","contextProps","templateCounter","typedArrayTags","cloneableTags","stringEscapes","freeParseFloat","freeParseInt","freeGlobal","freeSelf","freeExports","freeModule","freeProcess","nodeUtil","require","nodeIsArrayBuffer","isArrayBuffer","nodeIsDate","isDate","nodeIsMap","nodeIsRegExp","isRegExp","nodeIsSet","isSet","nodeIsTypedArray","isTypedArray","arrayAggregator","iteratee","accumulator","arrayEach","arrayEachRight","arrayEvery","arrayFilter","resIndex","arrayIncludes","baseIndexOf","arrayIncludesWith","comparator","arrayMap","arrayReduce","initAccum","arrayReduceRight","arraySome","asciiSize","baseProperty","baseFindKey","eachFunc","baseFindIndex","fromRight","strictIndexOf","baseIsNaN","baseIndexOfWith","baseMean","baseSum","basePropertyOf","baseReduce","baseTimes","baseTrim","trimmedEndIndex","baseUnary","baseValues","cacheHas","charsStartIndex","strSymbols","chrSymbols","charsEndIndex","deburrLetter","escapeHtmlChar","escapeStringChar","chr","hasUnicode","mapToArray","overArg","replaceHolders","placeholder","setToArray","setToPairs","stringSize","unicodeSize","stringToArray","unicodeToArray","asciiToArray","unescapeHtmlChar","runInContext","pick","funcProto","objectProto","coreJsData","funcToString","idCounter","maskSrcKey","nativeObjectToString","objectCtorString","oldDash","reIsNative","Buffer","allocUnsafe","getPrototype","objectCreate","spreadableSymbol","isConcatSpreadable","symIterator","symToStringTag","getNative","ctxClearTimeout","ctxNow","ctxSetTimeout","nativeCeil","nativeFloor","nativeGetSymbols","nativeIsBuffer","isBuffer","nativeIsFinite","nativeJoin","nativeKeys","nativeMax","nativeMin","nativeNow","nativeParseInt","nativeRandom","nativeReverse","nativeCreate","metaMap","realNames","dataViewCtorString","toSource","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","symbolProto","symbolValueOf","symbolToString","lodash","isObjectLike","LazyWrapper","LodashWrapper","wrapperClone","baseCreate","baseLodash","chainAll","__wrapped__","__actions__","__chain__","__index__","__values__","__dir__","__filtered__","__iteratees__","__takeCount__","__views__","Hash","ListCache","MapCache","SetCache","__data__","Stack","arrayLikeKeys","inherited","isArr","isArg","isArguments","isBuff","isType","skipIndexes","isIndex","arraySample","baseRandom","arraySampleSize","shuffleSelf","copyArray","baseClamp","arrayShuffle","assignMergeValue","baseAssignValue","assignValue","objValue","assocIndexOf","baseAggregator","baseEach","baseAssign","copyObject","baseAt","lower","upper","baseClone","bitmask","customizer","isDeep","isFlat","isFull","initCloneArray","getTag","isFunc","cloneBuffer","initCloneObject","getSymbolsIn","copySymbolsIn","keysIn","baseAssignIn","getSymbols","copySymbols","cloneArrayBuffer","dataView","byteOffset","byteLength","cloneDataView","cloneTypedArray","regexp","cloneRegExp","initCloneByTag","stacked","subValue","getAllKeysIn","getAllKeys","baseConformsTo","baseDelay","baseDifference","isCommon","valuesLength","outer","valuesIndex","templateSettings","getMapData","LARGE_ARRAY_SIZE","createBaseEach","baseForOwn","baseEachRight","baseForOwnRight","baseEvery","baseExtremum","baseFilter","baseFlatten","isStrict","isFlattenable","baseFor","createBaseFor","baseForRight","baseFunctions","baseGet","castPath","toKey","baseGetAllKeys","keysFunc","symbolsFunc","baseGetTag","unmasked","getRawTag","objectToString","baseGt","other","baseHas","baseHasIn","baseIntersection","arrays","othLength","othIndex","caches","seen","baseInvoke","baseIsArguments","baseIsEqual","equalFunc","objIsArr","othIsArr","objTag","othTag","objIsObj","othIsObj","isSameTag","equalArrays","convert","isPartial","equalByTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","objProps","objLength","objStacked","othStacked","skipCtor","othValue","compared","objCtor","othCtor","equalObjects","baseIsEqualDeep","baseIsMatch","matchData","noCustomizer","srcValue","COMPARE_PARTIAL_FLAG","baseIsNative","baseIteratee","identity","baseMatchesProperty","baseMatches","baseKeys","isPrototype","baseLt","baseMap","getMatchData","matchesStrictComparable","isKey","isStrictComparable","hasIn","baseMerge","mergeFunc","safeGet","isTyped","isArrayLikeObject","toPlainObject","baseMergeDeep","baseNth","baseOrderBy","iteratees","orders","getIteratee","criteria","comparer","objCriteria","othCriteria","ordersLength","compareAscending","compareMultiple","baseSortBy","basePickBy","baseSet","basePullAll","basePullAt","indexes","baseUnset","baseRepeat","baseRest","setToString","overRest","baseSample","baseSampleSize","nested","baseSetData","baseSetToString","constant","baseShuffle","baseSlice","baseSome","baseSortedIndex","retHighest","low","mid","baseSortedIndexBy","valIsNaN","valIsNull","valIsSymbol","valIsUndefined","othIsDefined","othIsNull","othIsReflexive","othIsSymbol","setLow","baseSortedUniq","baseToNumber","baseToString","baseUniq","createSet","seenIndex","baseUpdate","updater","baseWhile","isDrop","baseWrapperValue","actions","baseXor","baseZipObject","assignFunc","valsLength","castArrayLikeObject","castFunction","castRest","castSlice","arrayBuffer","valIsDefined","valIsReflexive","composeArgs","partials","holders","isCurried","argsIndex","argsLength","holdersLength","leftIndex","leftLength","rangeLength","isUncurried","composeArgsRight","holdersIndex","rightIndex","rightLength","isNew","createAggregator","createAssigner","assigner","sources","guard","isIterateeCall","iterable","createCaseFirst","trailing","createCompounder","deburr","createCtor","thisBinding","createFind","findIndexFunc","createFlow","flatRest","funcs","prereq","thru","wrapper","getFuncName","isLaziable","plant","createHybrid","partialsRight","holdersRight","argPos","isAry","isBind","isBindKey","isFlip","getHolder","holdersCount","countHolders","newHolders","createRecurry","arrLength","reorder","createInverter","toIteratee","baseInverter","createMathOperation","createOver","arrayFunc","createPadding","chars","charsLength","createRange","toFinite","baseRange","createRelationalOperation","wrapFunc","isCurry","newData","setData","setWrapToString","createRound","precision","createToPairs","baseToPairs","createWrap","srcBitmask","newBitmask","isCombo","mergeData","createCurry","createPartial","createBind","customDefaultsAssignIn","customDefaultsMerge","customOmitClone","arrStacked","arrValue","flatten","otherFunc","stubArray","hasPath","hasFunc","isLength","ctorString","isMaskable","stubFalse","otherArgs","shortOut","details","insertWrapDetails","updateWrapDetails","getWrapDetails","lastCalled","stamp","rand","memoize","difference","differenceBy","differenceWith","findLastIndex","intersection","intersectionBy","intersectionWith","pull","pullAll","pullAt","union","unionBy","unionWith","unzip","group","unzipWith","without","xor","xorBy","xorWith","zip","zipWith","interceptor","wrapperAt","countBy","findLast","forEachRight","groupBy","invokeMap","keyBy","partition","sortBy","bindKey","WRAP_BIND_FLAG","debounce","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","invokeFunc","shouldInvoke","timeSinceLastCall","timerExpired","trailingEdge","timeWaiting","remainingWait","debounced","isInvoking","leadingEdge","memoized","Cache","negate","overArgs","transforms","funcsLength","partial","partialRight","rearg","gt","gte","isInteger","isNumber","lt","lte","iteratorToArray","remainder","isBinary","assignIn","assignInWith","assignWith","at","propsIndex","propsLength","defaultsDeep","mergeWith","invertBy","nativeKeysIn","isProto","baseKeysIn","omit","CLONE_DEEP_FLAG","basePick","pickBy","toPairs","toPairsIn","capitalize","upperFirst","kebabCase","lowerCase","lowerFirst","snakeCase","startCase","upperCase","hasUnicodeWord","unicodeWords","asciiWords","bindAll","methodNames","flow","flowRight","methodOf","over","overEvery","overSome","basePropertyDeep","rangeRight","augend","addend","divide","dividend","divisor","multiplier","multiplicand","minuend","subtrahend","castArray","chunk","compact","cond","conforms","baseConforms","curry","curryRight","drop","dropRight","dropRightWhile","dropWhile","baseFill","flatMap","flatMapDeep","flatMapDepth","flattenDeep","flattenDepth","flip","fromPairs","functions","functionsIn","mapKeys","mapValues","matchesProperty","nthArg","omitBy","orderBy","propertyOf","pullAllBy","pullAllWith","sampleSize","setWith","shuffle","sortedUniq","sortedUniqBy","take","takeRight","takeRightWhile","takeWhile","toPath","isArrLike","uniq","uniqBy","uniqWith","updateWith","valuesIn","zipObject","zipObjectDeep","entriesIn","extendWith","clamp","cloneDeep","cloneDeepWith","cloneWith","conformsTo","defaultTo","escapeRegExp","findKey","findLastKey","forIn","forInRight","forOwn","forOwnRight","inRange","baseInRange","isBoolean","isEqual","isEqualWith","isMatch","isMatchWith","isNative","isNil","isNull","isSafeInteger","isUndefined","isWeakMap","isWeakSet","strictLastIndexOf","maxBy","mean","meanBy","minBy","stubObject","stubString","stubTrue","nth","pad","strLength","padEnd","padStart","radix","floating","reduceRight","sample","sortedIndex","sortedIndexBy","sortedIndexOf","sortedLastIndex","sortedLastIndexBy","sortedLastIndexOf","sum","sumBy","isEscaping","isEvaluating","importsKeys","importsValues","reDelimiters","sourceURL","escapeValue","interpolateValue","esTemplateValue","evaluateValue","variable","times","toLower","toSafeInteger","toUpper","trimEnd","trimStart","omission","newEnd","uniqueId","eachRight","VERSION","isFilter","takeName","dropName","checkIteratee","isTaker","lodashFunc","retUnwrapped","isLazy","useLazy","isHybrid","isUnwrapped","onlyLazy","chainName","isRight","getView","iterLength","takeCount","iterIndex","commit","tz","moment","cachedGuess","zones","links","countries","guesses","logError","momentVersion","major","minor","charCodeToInt","unpackBase60","whole","fractional","sign","arrayToInt","mapIndices","indices","unpack","untils","intToUntil","abbrs","population","Zone","packedString","_set","Country","country_name","zone_names","OffsetAt","timeString","toTimeString","abbr","ZoneScore","zone","offsetScore","abbrScore","findChange","sortZoneScores","localeCompare","addToGuesses","guessesForUserOffsets","guessesOffset","offsetsLength","filteredGuesses","normalizeName","addZone","packed","getZone","link","addLink","normal0","normal1","needsOffset","isUnixTimestamp","_f","_tzm","isMoment","unpacked","_index","zone_name","country_code","offsetNext","offsetPrev","moveAmbiguousForward","moveInvalidForward","mom","utcOffset","scoreOffsetAt","offsetAt","dataVersion","_zones","_links","_countries","country_zones","addCountries","zoneExists","didShowError","guess","ignoreCache","intlName","Intl","DateTimeFormat","resolvedOptions","timeZone","zoneScore","userOffsets","zoneScores","rebuildGuess","zonesForCountry","country","with_offset","abbrWrap","_z","resetZoneWrap","defaultZone","updateOffset","keepTime","_isUTC","z","zoneName","zoneAbbr","setDefault","momentProperties","processRelativeTime","withoutSuffix","isFuture","h","defineLocale","monthsParseExact","weekdays","weekdaysShort","weekdaysMin","weekdaysParseExact","longDateFormat","LT","LTS","L","LL","LLL","LLLL","calendar","sameDay","sameElse","nextDay","nextWeek","lastDay","lastWeek","relativeTime","future","past","ss","hh","ww","dayOfMonthOrdinalParse","ordinal","week","dow","doy","weekEndings","translate","meridiemParse","isPM","meridiem","hours","minutes","isLower","hookCallback","hasOwnProp","isObjectEmpty","res","arrLen","createUTC","locale","strict","createLocalOrUTC","getParsingFlags","_pf","unusedTokens","unusedInput","charsLeftOver","nullInput","invalidEra","invalidMonth","invalidFormat","userInvalidated","iso","parsedDateParts","era","rfc2822","weekdayMismatch","isValid","_isValid","parsedParts","isNowValid","invalidWeekday","_strict","bigHour","createInvalid","NaN","updateInProgress","copyConfig","momentPropertiesLen","_isAMomentObject","_locale","Moment","suppressDeprecationWarnings","deprecate","firstTime","deprecationHandler","argLen","deprecations","deprecateSimple","mergeConfigs","parentConfig","childConfig","Locale","zeroFill","targetLength","forceSign","absNumber","zerosToFill","formattingTokens","localFormattingTokens","formatFunctions","formatTokenFunctions","addFormatToken","padded","localeData","formatMoment","expandFormat","makeFormatFunction","invalidDate","replaceLongDateFormatTokens","addUnitAlias","shorthand","normalizeUnits","units","normalizeObjectUnits","inputObject","normalizedProp","normalizedInput","priorities","addUnitPriority","isLeapYear","absFloor","toInt","argumentForCoercion","coercedNumber","makeGetSet","set$1","daysInMonth","regexes","match1","match2","match3","match4","match6","match1to2","match3to4","match5to6","match1to3","match1to4","match1to6","matchUnsigned","matchSigned","matchOffset","matchShortOffset","matchWord","addRegexToken","strictRegex","getParseRegexForToken","regexEscape","p2","p3","p4","addParseToken","tokenLen","addWeekParseToken","_w","addTimeToArrayFromToken","YEAR","MONTH","DATE","HOUR","MINUTE","SECOND","MILLISECOND","WEEK","WEEKDAY","modMonth","monthsShortRegex","monthsRegex","monthsParse","defaultLocaleMonths","defaultLocaleMonthsShort","MONTHS_IN_FORMAT","defaultMonthsShortRegex","defaultMonthsRegex","handleStrictParse","monthName","llc","toLocaleLowerCase","_monthsParse","_longMonthsParse","_shortMonthsParse","setMonth","dayOfMonth","getSetMonth","computeMonthsParse","cmpLenRev","shortPieces","longPieces","mixedPieces","_monthsRegex","_monthsShortRegex","_monthsStrictRegex","_monthsShortStrictRegex","daysInYear","parseTwoDigitYear","getSetYear","createDate","setFullYear","createUTCDate","firstWeekOffset","fwd","dayOfYearFromWeeks","weekday","resYear","resDayOfYear","dayOfYear","weekOfYear","resWeek","weekOffset","weeksInYear","weekOffsetNext","shiftWeekdays","weekdaysMinRegex","weekdaysShortRegex","weekdaysRegex","weekdaysParse","defaultLocaleWeekdays","defaultLocaleWeekdaysShort","defaultLocaleWeekdaysMin","defaultWeekdaysRegex","defaultWeekdaysShortRegex","defaultWeekdaysMinRegex","handleStrictParse$1","weekdayName","_weekdaysParse","_shortWeekdaysParse","_minWeekdaysParse","computeWeekdaysParse","minp","shortp","longp","minPieces","_weekdaysRegex","_weekdaysShortRegex","_weekdaysMinRegex","_weekdaysStrictRegex","_weekdaysShortStrictRegex","_weekdaysMinStrictRegex","hFormat","lowercase","matchMeridiem","_meridiemParse","seconds","kInput","_isPm","_meridiem","pos1","pos2","getSetHour","globalLocale","baseConfig","locales","localeFamilies","commonPrefix","arr1","minl","normalizeLocale","loadLocale","oldLocale","isLocaleNameSane","_abbr","getSetGlobalLocale","getLocale","parentLocale","chooseLocale","checkOverflow","_overflowDayOfYear","_overflowWeeks","_overflowWeekday","extendedIsoRegex","basicIsoRegex","tzRegex","isoDates","isoTimes","aspNetJsonRegex","obsOffsets","UT","GMT","EDT","EST","CDT","CST","MDT","MST","PDT","PST","configFromISO","allowTime","dateFormat","timeFormat","tzFormat","isoDatesLen","isoTimesLen","configFromStringAndFormat","untruncateYear","yearStr","configFromRFC2822","parsedArray","monthStr","dayStr","hourStr","minuteStr","secondStr","weekdayStr","parsedInput","getDay","checkWeekday","obsOffset","militaryOffset","numOffset","hm","calculateOffset","setUTCMinutes","getUTCMinutes","configFromArray","currentDate","expectedWeekday","yearToUse","nowValue","_useUTC","currentDateArray","weekYear","weekdayOverflow","curWeek","GG","W","createLocal","_week","gg","_dayOfYear","dayOfYearFromWeekInfo","_nextDay","ISO_8601","RFC_2822","skipped","stringLength","totalParsedInputLength","hour","isPm","meridiemHour","meridiemFixWrap","erasConvertYear","prepareConfig","preparse","tempConfig","bestMoment","scoreToBeat","currentScore","validFormatFound","bestFormatIsValid","configfLen","score","configFromStringAndArray","createFromInputFallback","configFromString","dayOrDate","minute","millisecond","configFromObject","configFromInput","isUTC","prototypeMin","prototypeMax","moments","ordering","Duration","years","quarters","quarter","weeks","isoWeek","milliseconds","unitHasDecimal","orderLen","isDurationValid","_milliseconds","_days","_months","_bubble","isDuration","absRound","offsetFromString","chunkOffset","cloneWithOffset","setTime","getDateOffset","isUtc","aspNetRegex","isoRegex","createDuration","diffRes","parseIso","isBefore","positiveMomentsDifference","inp","isAfter","createAdder","period","addSubtract","isAdding","invalid","isMomentInput","arrayTest","dataTypeTest","isNumberOrStringArray","objectTest","propertyTest","propertyLen","isMomentInputObject","monthDiff","wholeMonthDiff","newLocaleData","defaultFormat","defaultFormatUtc","MS_PER_SECOND","MS_PER_MINUTE","MS_PER_HOUR","MS_PER_400_YEARS","mod$1","localStartOfDate","utcStartOfDate","matchEraAbbr","erasAbbrRegex","computeErasParse","abbrPieces","namePieces","narrowPieces","eras","narrow","_erasRegex","_erasNameRegex","_erasAbbrRegex","_erasNarrowRegex","addWeekYearFormatToken","getSetWeekYearHelper","weeksTarget","setWeekAll","dayOfYearData","erasNameRegex","erasNarrowRegex","erasParse","_eraYearOrdinalRegex","eraYearOrdinalParse","isoWeekYear","_dayOfMonthOrdinalParse","_ordinalParse","_dayOfMonthOrdinalParseLenient","getSetDayOfMonth","getSetMinute","getSetMillisecond","getSetSecond","parseMs","preParsePostFormat","formats","isCalendarSpec","sod","startOf","calendarFormat","asFloat","zoneDelta","endOf","startOfDate","isoWeekday","inputString","postformat","humanize","fromNow","toNow","invalidAt","localInput","isBetween","inclusivity","localFrom","localTo","isSame","inputMs","isSameOrAfter","isSameOrBefore","parsingFlags","prioritized","unitsObj","getPrioritizedUnits","prioritizedLen","toDate","toISOString","keepOffset","unix","creationData","eraName","since","eraNarrow","eraAbbr","eraYear","isoWeeks","weekInfo","weeksInWeekYear","isoWeeksInYear","isoWeeksInISOWeekYear","parseWeekday","parseIsoWeekday","keepLocalTime","keepMinutes","localAdjust","_changeInProgress","parseZone","tZone","hasAlignedHourOffset","isDST","isUtcOffset","isDSTShifted","_isDSTShifted","array1","dontConvert","lengthDiff","diffs","compareArrays","proto$1","get$1","field","listMonthsImpl","listWeekdaysImpl","localeSorted","_calendar","_longDateFormat","formatUpper","tok","_invalidDate","_ordinal","_relativeTime","pastFuture","_eras","isFormat","_monthsShort","_monthsParseExact","firstDayOfYear","firstDayOfWeek","_weekdays","_weekdaysMin","_weekdaysShort","_weekdaysParseExact","_fullWeekdaysParse","langData","mathAbs","addSubtract$1","absCeil","daysToMonths","monthsToDays","makeAs","asMilliseconds","asSeconds","asMinutes","asHours","asDays","asWeeks","asMonths","asQuarters","asYears","makeGetter","thresholds","substituteTimeAgo","abs$1","toISOString$1","totalSign","ymSign","daysSign","hmsSign","total","proto$2","monthsFromDays","argWithSuffix","argThresholds","withSuffix","posNegDuration","relativeTime$1","toIsoString","updateLocale","tmpLocale","relativeTimeRounding","roundingFunction","relativeTimeThreshold","myMoment","HTML5_FMT","DATETIME_LOCAL","DATETIME_LOCAL_SECONDS","DATETIME_LOCAL_MS","TIME","TIME_SECONDS","TIME_MS","notus","fnValidateConfig","fnGetParentClassList","fnCreateNotusContainer","fnGetEntryAnimatorStyle","fnGetExitAnimatorStyle","fnBindCloseHandler","fnBindCloseListener","fnBindActionHandler","fnCreateNotusEl","old_notus","htmlEntityMap","notusTypeMap","positionShorts","positionForType","alertTypeMap","animationTypeMap","genId","reg","escapeHtml","removeEl","notusType","notusPosition","alertType","animationType","closeHandler","actionable","primaryAction","secondaryAction","themeClass","containerEl","containerCls","notusEl","animationClass","extry","animationDuration","autoCloseDuration","onclick","persist","getActionHandler","primaryActionEl","secondaryActionEl","actionConfig","actionHandler","animationFunction","isSlide","animators","notusElTpl","parentDiv","htmlStringSupported","htmlString","notusTitleElTpl","primaryActionElTpl","secondaryActionElTpl","actionElTpl","closeElTpl","fixed","closable","userConfig","thisNotus","autoClose","cachedSetTimeout","cachedClearTimeout","defaultSetTimout","defaultClearTimeout","runTimeout","currentQueue","draining","queueIndex","cleanUpNextTick","drainQueue","runClearTimeout","Item","argv","cwd","chdir","umask","canPromise","QRCode","CanvasRenderer","SvgRenderer","renderCanvas","renderFunc","canvas","argsNum","isLastArgCb","renderToDataURL","getSymbolSize","getRowColCoords","posCount","intervals","positions","getPositions","coords","posLength","Mode","ALPHA_NUM_CHARS","AlphanumericData","ALPHANUMERIC","getBitsLength","getLength","bitBuffer","BitBuffer","bufIndex","putBit","getLengthInBits","bit","BitMatrix","reservedBit","row","reserved","isReserved","encodeUtf8","ByteData","BYTE","ECLevel","EC_BLOCKS_TABLE","EC_CODEWORDS_TABLE","getBlocksCount","errorCorrectionLevel","Q","H","getTotalCodewordsCount","fromString","Utils","G15_BCH","getBCHDigit","getEncodedBits","EXP_TABLE","LOG_TABLE","exp","mul","KanjiData","KANJI","toSJIS","Patterns","PATTERN000","PATTERN001","PATTERN010","PATTERN011","PATTERN100","PATTERN101","PATTERN110","PATTERN111","getMaskAt","maskPattern","getPenaltyN1","points","sameCountCol","sameCountRow","lastCol","lastRow","getPenaltyN2","getPenaltyN3","bitsCol","bitsRow","getPenaltyN4","darkCount","modulesCount","applyMask","getBestMask","setupFormatFunc","numPatterns","bestPattern","lowerPenalty","penalty","VersionCheck","Regex","NUMERIC","ccBits","MIXED","getCharCountIndicator","getBestModeForData","dataStr","testNumeric","testAlphanumeric","testKanji","NumericData","remainingNum","GF","coeff","mod","divident","generateECPolynomial","degree","poly","AlignmentPattern","FinderPattern","MaskPattern","ECCode","ReedSolomonEncoder","Version","FormatInfo","Segments","setupFormatInfo","matrix","bits","createSymbol","fromArray","estimatedVersion","rawSegments","rawSplit","getBestVersionForData","bestVersion","dataBits","dataTotalCodewordsBits","getSymbolTotalCodewords","remainingByte","totalCodewords","dataTotalCodewords","ecTotalBlocks","blocksInGroup1","totalCodewordsInGroup1","dataCodewordsInGroup1","dataCodewordsInGroup2","ecCount","rs","dcData","ecData","maxDataSize","dataSize","createCodewords","createData","moduleCount","setupFinderPattern","setupTimingPattern","setupAlignmentPattern","setupVersionInfo","inc","bitIndex","byteIndex","dark","setupData","toSJISFunc","setToSJISFunction","Polynomial","genPoly","paddedData","buff","numeric","kanji","byte","BYTE_KANJI","TEST_KANJI","TEST_NUMERIC","TEST_ALPHANUMERIC","getStringByteLength","getSegments","getSegmentsFromString","numSegs","alphaNumSegs","byteSegs","kanjiSegs","isKanjiModeEnabled","s1","s2","getSegmentBitsLength","buildSingleSegment","modesHint","bestMode","seg","segs","buildNodes","prevNodeIds","nodeGroup","currentNodeIds","lastCount","prevNodeId","buildGraph","optimizedSegs","curr","prevSeg","toSJISFunction","CODEWORDS_COUNT","digit","G18_BCH","getReservedBitsCount","getTotalBitsFromDataArray","totalBits","reservedBits","getCapacity","usableBits","ecl","currentVersion","getBestVersionForMixedData","getBestVersionForDataLength","qrData","canvasEl","getCanvasElement","getOptions","getImageWidth","createImageData","qrToImageData","clearRect","clearCanvas","putImageData","rendererOpts","toDataURL","quality","getColorAttrib","attrib","alpha","svgCmd","cmd","qrcodesize","bg","light","moveBy","newRow","lineLength","qrToPath","viewBox","svgTag","hex2rgba","hexCode","hexValue","getScale","qrSize","imgData","qr","symbolSize","scaledMargin","palette","posDst","pxColor","S2","select2","amd","requirejs","undef","makeMap","defined","waiting","defining","aps","jsSuffixRegExp","baseName","nameSegment","mapValue","foundMap","foundI","foundStarMap","starI","baseParts","starMap","nodeIdCompat","makeRequire","relName","forceSync","makeLoad","depName","callDep","splitPrefix","makeRelParts","makeConfig","relParts","relResourceName","pr","uri","cjsModule","usingExports","callbackType","alt","_defined","getMethods","theClass","Extend","ChildClass","SuperClass","__hasProp","BaseConstructor","__super__","Decorate","DecoratorClass","decoratedMethods","superMethods","DecoratedClass","argCount","calledConstructor","superMethod","calledMethod","originalMethod","decoratedMethod","Observable","_type","generateChars","_convertData","dataLevel","hasScroll","$el","innerWidth","escapeMarkup","replaceMap","appendMany","$element","$nodes","$jqNodes","__cache","GetUniqueElementId","select2Id","StoreData","GetData","RemoveData","Results","dataAdapter","$results","displayMessage","hideLoading","$message","hideMessages","$options","$option","$dropdown","highlightFirstItem","$selected","ensureHighlightVisible","setClasses","selectedIds","showLoading","loading","loadingMore","$loading","_resultId","role","$children","$child","$childrenContainer","$container","isOpen","$highlighted","getHighlightedResults","currentIndex","nextIndex","$next","currentOffset","nextTop","nextOffset","nextBottom","mousewheel","deltaY","offsetDelta","BACKSPACE","TAB","ENTER","SHIFT","CTRL","ALT","ESC","SPACE","PAGE_UP","PAGE_DOWN","END","HOME","LEFT","UP","RIGHT","DOWN","DELETE","KEYS","BaseSelection","$selection","_tabindex","resultsId","_handleBlur","_attachCloseHandler","_detachCloseHandler","$select","SingleSelection","$rendered","selectionContainer","MultipleSelection","$selections","Placeholder","decorated","normalizePlaceholder","createPlaceholder","$placeholder","singlePlaceholder","AllowClear","_handleClear","_handleKeyboardClear","$clear","previousVal","unselectData","prevented","$remove","Search","$search","$searchContainer","_transferTabIndex","_keyUpPrevented","$previousChoice","searchRemoveChoice","msie","documentMode","disableInputEvents","handleSearch","searchHadFocus","resizeSearch","term","EventRelay","relayEvents","preventableEvents","Translation","dict","translation","_cache","loadPath","translations","BaseAdapter","generateResultId","SelectAdapter","currentData","unselect","addOptions","innerText","normalizedData","_normalizeItem","ArrayAdapter","_dataToConvert","convertToOptions","$existing","existingIds","onlyItem","$existingOption","existingData","$newOption","AjaxAdapter","ajaxOptions","_applyDefaults","processResults","q","failure","$request","_request","request","_queryTimeout","Tags","tags","createTag","insertTag","_removeOldTags","page","checkChildren","Tokenizer","tokenizer","dropdown","tokenData","termChar","MinimumInputLength","$e","minimumInputLength","minimum","MaximumInputLength","maximumInputLength","maximum","MaximumSelectionLength","maximumSelectionLength","_checkIfMaximumSelected","successCallback","Dropdown","showSearch","HidePlaceholder","removePlaceholder","modifiedData","InfiniteScroll","lastParams","$loadingMore","createLoadingMore","showLoadingMore","loadMoreIfNeeded","isLoadMoreVisible","loadMore","pagination","more","AttachBody","$dropdownParent","_showDropdown","_attachPositioningHandler","_bindContainerResultHandlers","_hideDropdown","_detachPositioningHandler","$dropdownContainer","_containerResultsHandlersBound","_positionDropdown","_resizeDropdown","scrollEvent","resizeEvent","orientationEvent","$watchers","$window","isCurrentlyAbove","isCurrentlyBelow","newDirection","enoughRoomAbove","enoughRoomBelow","$offsetParent","isConnected","countResults","MinimumResultsForSearch","minimumResultsForSearch","SelectOnClose","_handleSelectOnClose","originalSelect2Event","$highlightedResults","CloseOnSelect","_selectTriggered","errorLoading","inputTooLong","overChars","inputTooShort","maximumSelected","noResults","searching","removeAllItems","ResultsList","SelectionSearch","DIACRITICS","SelectData","ArrayData","AjaxData","DropdownSearch","EnglishTranslation","Defaults","tokenSeparators","Query","amdBase","initSelection","InitSelection","resultsAdapter","selectOnClose","dropdownAdapter","SearchableDropdown","closeOnSelect","dropdownCssClass","dropdownCss","adaptDropdownCssClass","DropdownCSS","selectionAdapter","allowClear","containerCssClass","containerCss","adaptContainerCssClass","ContainerCSS","_resolveLanguage","uniqueLanguages","_processTranslations","stripDiacritics","amdLanguageBase","dropdownAutoWidth","scrollAfterSelect","templateResult","templateSelection","theme","applyFromElement","optionLanguage","defaultLanguage","elementLanguage","parentLanguage","languages","resolvedLanguages","baseLanguage","languageData","convertedData","Options","fromElement","InputCompat","excludedData","dataset","upperCaseLetter","dataName","dataValue","Select2","_generateId","DataAdapter","_placeContainer","SelectionAdapter","DropdownAdapter","ResultsAdapter","_bindAdapters","_registerDomEvents","_registerDataEvents","_registerSelectionEvents","_registerDropdownEvents","_registerResultsEvents","_registerEvents","initialData","_syncAttributes","_resolveWidth","WIDTH","styleWidth","elementWidth","_syncA","_syncS","_syncSubtree","MozMutationObserver","_observer","nonRelayEvents","toggleDropdown","_isChangeMutation","changed","mutation","actualTrigger","preTriggerMap","preTriggerName","preTriggerArgs","newVal","detachEvent","syncCssClasses","$dest","$src","adapted","replacements","CompatUtils","_containerAdapter","clazz","containerCssAdapter","_cssAdapter","_dropdownAdapter","dropdownCssAdapter","_isInitialized","InputData","_currentData","_valueSeparator","getSelected","allData","AttachContainer","StopPropagation","nullLowestDeltaTimeout","lowestDelta","toFix","toBind","fixHooks","mouseHooks","onmousewheel","getLineHeight","getPageHeight","$elem","adjustOldDeltas","normalizeOffset","orgEvent","deltaX","absDelta","wheelDelta","wheelDeltaY","wheelDeltaX","HORIZONTAL_AXIS","deltaMode","lineHeight","pageHeight","shouldAdjustOldDeltas","boundingRect","deltaFactor","nullLowestDelta","unmousewheel","thisMethods","instanceOptions","doClick","clickHandler","onEnterPress","AppTile","AppTilesContainer","isShow","hideDelay","showArrow","autoCloseAfterClick","hasArrow","hoverMenu","hoverTrigger","outsideClickHandler","innerMenu","hoverBehavior","clickBehavior","createDropdown","onShow","clearMenuFromBody","onHide","cloneMenuToBody","innerMenuContainer","menu","AuDropdownCustomAttribute","collapsible","ContentContainer","requireOpen","_select","optionsChanged","triggerUpdate","selectedChanged","disabledChanged","CustomSelect","DropdownComponent","hideMenu","toggleMenu","dropdownMenu","showMenu","stopPropogation","createDropdownMenuArrow","dropdownContainer","DropdownCustomAttribute","isVersionVisible","footerExternalKey","FooterBar","collapsed","appliedFilter","class","observeMutations","header","contentArea","headerHeight","globalAreaHeight","marginTop","reInit","toggleFilters","hideFilters","GlobalArea","menuRoutes","goBack","previousRoute","goHome","homeRoute","goSettings","settingsRoute","applicationTitleExternalKey","HeaderBar","getType","OBJECT_TYPE","vType","vLength","isEqualArrays","isEqualsArray","oType","vKeys","oKeys","isEqualObjects","isEqualDeep","selectedItems","checkStrategy","defaultItemTextAccessor","itemTextAccessor","itemKeyAccessor","filterText","listItems","_selectedItems","ListItem","updateSelection","selectedItemsChanged","unselectAllSelected","matchItems","addToSelected","clearFilterText","matchFilter","listItemsToDisplay","checkboxStrategy","setSelectedItems","itemText","item1","item2","getItemText","removeFromSelected","selectAll","uniqueCollection","loop","isSelected","clickStrategy","toggleSelection","List","MasterDetails","GlobalAreaChangeEvent","recalculateHeight","getGlobalAreaHeight","windowHeight","getFooterHeight","getHeaderHeight","PageContent","includeMargins","elementHeight","computedStyles","marginBottom","authConfiguration","logIn","_userName","redirectAfterLogInHref","logOut","logOutAndRedirectToLogIn","logOutHref","handleAuthenticationCallback","mandantHeader","mandantId","getCurrentMandantId","siteMinderConfiguration","storage","localStorage","setItem","SiteMinderService","userNameKey","logOff","removeItem","getItem","testUserName","userName","loginHref","logInHref","loginSource","redirectToLoginPage","responseError","loginPageHref","redirectHref","configureHttpClient","siteMinderService","withInterceptor","SiteMinderInterceptor","isAuthenticated","TestAuthenticationService","authenticationService","logInAs","returnUrl","TestLogin","onExecWithProgressErrorHandler","execWithProgress","awaitableOrFunc","hideBusyIndicator","currentOpsCount","updateBusyState","onExecWithProgressError","busyIndicator","isBusy","bc","CacheConfiguration","appInstanceId","itemsExpireAfterSeconds","memoryCache","memoryTimestampCache","isExpired","entity","getOrAdd","addValue","cacheResult","createdMillisecondsAgo","getStoredKeys","entityName","parseKey","serializer","storageKey","deserialize","timestampPostfix","storageKeyPrefix","LocalStorageCache","getStorageKeyPrefix","handleStorageEvent","entityJson","toStorageKey","notFoundFatal","toStorageTimestampKey","timestampKey","timestampString","getStorageKeys","isEntityKey","toEntityKey","cleanup","entityNamesToPreserve","keysToPreserve","keyPrefixes","isTimestampKey","entityKey","keyString","implicitDataSource","requireTotalCount","columns","labelConverter","exportService","styleKind","showHeader","removeMargins","pageSize","selectablePageSize","suggestionPageSizes","preserveCurrentPage","autoSort","horizontalScroll","showActionsInFirstColumn","pagerVisiblePagesMax","showTopPager","showBottomPager","isAnyActionVisible","columnValueExpressions","columnSortExpressions","_bindingContext","_other","actionName","iconCssClass","colHeader","isNameCol","isTextCol","isCheckboxCol","invalidDefinition","colName","colValueExpression","valueExpression","colSortExpression","sortExpression","isComposeCol","getComposeOptions","evalCellValue","fieldName","colExpression","expressionStr","cellValue","cellComposeViewModel","composeCol","composeViewModel","cellComposeModel","cellSortValue","linkType","linkAction","linkEnabled","linkHref","linkRouteName","_row","linkRouteParams","sortCssClass","toggleSort","newCol","newSortOrder","propertyPath","dataSource","isDataItemsLoaded","sortValueProvider","valueProvider","sortChangedHandler","sortChanged","rows","refreshImplicitDataSource","subscribeToDataItemsChange","dataSourceDataItemsChanged","checkIfAnyActionVisible","actionsChanged","rowsChanged","newRows","newDataSource","dataSourceObserver","dataItems","updateAutoSort","dataSourceChanged","visibilityHandler","onRowClick","targetElement","rowClick","onActionClick","getExportData","_header","cells","getCellValueFunc","export","rowItemsObserver","onRowItemsChanged","DataGrid","forceUpdateArrayItem","removeArrayItem","asObjectMap","filtersToObjectMap","isItemsLoaded","autoPaging","FilterOptions","eventEmitter","preservePage","fetchInternal","responseItems","cloneInternal","resetPaging","applyFiltering","applySorting","applyPaging","LocalDataSource","_operator","getDefaultFilterOperator","dataItem","rowObject","genericSort","valueProvider_","_propertyName","valueA","valueB","compareBy","DataSource","AsyncDataSource","newFilters","DataSourceHelper","objectMapToFiltersDefault","filterOptions","filterOption","currentPage","visiblePagesMax","skipCurrentPageChanges","pageCount","visiblePageCount","_pageRange","showPrevRange","showNextRange","handleDataSourceFetch","regenerateSelectConfig","firstPage","prevPageRange","prevPage","nextPage","nextPageRange","lastPage","goToPage","normalizeCurrentPage","updatePages","totalCount","invalidatePageRange","updateCurrentPageItems","currentPageItems","updateDataSource","updateDataSourcePage","currentPageChanged","itemCountChanged","_newValue","oldDataSource","pageRange","pageSizeChanged","visiblePagesMaxChanged","selectConfig","processedValue","processPageSizeSearch","int","Pager","globalDataGridConfiguration","defaultStyleKind","defaultCellValueConverter","defaultLabelConverter","defaultExportService","applyGlobalDataGridConfiguration","isOneLessOrEquals","dateOne","dateTwo","isOneLess","toMomentDate","formatToGeneralLong","currentCultureName","Localization","convertFromBrowserLocalMidnightToUtcMidnight","midnightWithLocalOffset","dateEnsured","shiftToDefaultTimeZone","utcValue","convertViewModeToNumber","localization","readonly","containerClass","uniqueContainerId","displayedValue","inputElement","getFormat","_datePicker","updateValue","MomentHelper","dateContainer","selectContainerName","_format","prevDateValue","dateValue","readonlyChanged","currentLanguageIsoCode","newValueMoment","startDateChanged","endDateChanged","beginOfDayAsIfMandLocaleWasSameAsJsLocale","formatChanged","isOverflowedRight","dropdownAnchor","containerName","DatePicker","DatePicker2","toUiDate","fromUiDate","fallbackLanguageIsoCode","defaultTimeConfig","setDefaultFormat","setDefaultTimeConfiguration","hourToBeforeHoliday","minuteToBeforeHoliday","getTimeConfig","isHoliday","isHolidayTomorrow","openIntervals","getOpenIntervals","OpenHours","TimeOfDayInterval","hasHolidayConfig","setClosingTime","weeklyConfig","dayConfigs","possibleDayOfWeekNames","dayConfigKey","parseConfig","openAt","closingHour","closingMinute","lastInterval","updateTo","timeStepMinutes","defaultOpenHour","defaultHour","isOpenAt","minOpenHour","hourFrom","maxOpenHour","hourTo","timestampInput","dayConfig","ab","bis","minuteFrom","minuteTo","timestampMinutes","timeStep","displayedTime","isTimeSelected","_isHoliday","_isTomorrowHoliday","initDatePicker","updateDisplayTime","dateTime","configChanged","newConfig","timeConfig","formatTime","isTimeStampAvailable","selfValue","newMinutes","adjustMinutes","isDateChanged","oldValueMoment","checkFeirtag","displayedValueChanged","displayedTimeChanged","adjustedMinutes","currentUserDateTime","adjustedCurrentUserDateTime","leadingZero","DatetimePicker","showNoneOption","noneOptionValue","minutesChanged","DaytimePicker","defaultTimeConfiguration","displayedHours","displayedMinutes","availableHours","availableMinutes","displayedMinutesChanged","setHours","displayedHoursChanged","TimePicker","confirm","ConfirmationDialog","openDialogAndWaitIfConfirmed","openResult","openDialogAndWait","dialogService","_navigationInstruction","CloseAllDialogsRoutePipelineStep","additionalDialogConfiguration","cancelButtonWithText","textKey","okCancelButtons","okButtonText","cancelButtonText","cancelButton","MessageDialog","parseDateFormat","dateLocaleConfigDefaults","parseDateTimeFormat","displayDateFormat","displayDateTimeFormat","currentTimeZone","DateLocaleConfigDefaults","DateFormatValueConverter","DateTimeFormatValueConverter","configureTimeZones","timeZoneName","userTimeZone","mostUsedTimeZoneDataLoaded","mostUsedTimeZoneData","allTimeZones","configureLocale","cultureName","userCulture","newLocale","configureCallback","rootContainer","localeConfig","localize","defaultValuesProvider","formatDateTime","parseDateTime","_lastUsageDateStatisticsConfig","initOnPluginConfigure","initParams","defaultLanguageIsoCode","defaultCultureName","autodetectFallbackLanguage","replaceLineBreaksWithExplicitBrTags","unhandledErrorDelegate","useStaticResources","resourceKeyPrefix","resourceKeyBypassPrefix","noTranslationFallbackTranslator","enableLastUsageDateStatistics","CurrencyValueConverter","formatCurrency","formatStyleOptions","toLocaleString","minimumFractionDigits","maximumFractionDigits","trimLastSlash","combine","relativeUrl","trimFirstSlash","getBaseHref","bases","getBaseHrefOrThrow","baseHref","getConventionBasedModuleEndpoint","moduleUrl","lastSlashIds","BaseHref","modulesUrl","modulesHostBaseUrl","urls","webApiConfig","withBaseUrl","getConfig","HostModuleGateway","gateway","configPromise","HostModuleConfigStorage","endpoints","moduleDto","endpointDto","endpoint","parseApiType","getEndpoints","endpointType","es","fes","getUiEndpoint","getApiEndpoint","apiType","hostModuleConfigStorage","ensureHostConfig","hostConfig","HostConfigHelper","getModuleApiEndpoint","cfgEp","getModuleUiEndpoint","EndpointResolver","endpointResolver","withCachingMode","cachedEndpoint","ep","objToQuery","queryObj","getLanguages","getResources","updateLastUsageDate","post","TextResourcesModuleGateway","flattenObject","flatObject","flatSubobject","subproperty","lastUsageDateStatistics","_currentLanguageIsoCode","_currentCultureName","configureFallbackTranslator","getLanguageIsoCodes","isoCode","updateLanguages","setCulture","culture","tryAutodetectFallbackLanguage","TranslateBindingBehavior","setCurrentLanguageIsoCode","languageIsoCode","normalizedIsoCode","currLang","isoCodeAlternativ","normalizeResources","savedInitParams","lastUsageDateStatisticsConfig","reinit","fallbackTranslator","getFallbackTranslator","keyOrKeyWithArgsArray","translateCore","translateWithArgs","positionalArgs","findTranslation","tryAddStatisticsEntry","paramRegex","getParamRegex","replacePositionalParams","findTranslationLanguageValue","languageTags","escapeTranslatedValue","findFirstTranslation","sentenceCaseConvert","decorateAsUnknown","addEntry","appendArgList","_paramRegexes","_getParamRegex","sendStatisticsInterval","sendStatistics","ResourcesToUpdate","keyContainer","sendStatisticsInternal","signalBindingBehavior","bindingSignalName","rewritten","TranslateValueConverter","TranslateFindFirstValueConverter","mapRouteDictionary","routeDictionary","routeRoot","_route","filterRouteTree","submenuItems","setting","returnFragment","ReloadPage","configureReload","appRoutes","additionalSettings","currentAppRouter","reloadInProgress","reloadApp","_pluginConfig","DEFAULT_SELECT2_CONFIG","initSelect2","valueAttr","getValueAttribute","valueSubscription","getNamedItem","clearOptions","destroySelect2","getSelect2Config","fireChangeOrigin","emitSelect2Change","disposeValueSubscription","initEvent","Select2CustomAttribute","ELEMENT","DOMTokenListProt","c1","DaimlerFormValidationRenderer","getMessageContainerFor","warningTargetSelector","formGroup","errorClass","retryStrategy","defaultRetryConfig","maxRetries","RetryInterceptor","retryConfig","$r","requestClone","httpClient","doRetry","minRandomInterval","maxRandomInterval","retryStrategies","calculateDelay","newRequest","beforeRetry","retryCount","HttpClientConfiguration","interceptors","withDefaults","useStandardConfiguration","credentials","rejectErrorResponses","rejectOnError","withRetry","HttpClient","activeRequestCount","isRequesting","normalizedConfig","Headers","retryInterceptorIndex","evt_1","trackRequestStart","buildRequest","http","applyInterceptors","processRequest","Response","Request","processResponse","trackRequestEnd","requestContentType","parsedDefaultHeaders","parsedHeaders","parseHeaderValues","bodyObj","requestInit","absoluteUrlRegexp","isJSON","defaultHeaders","setDefaultHeaders","Blob","callFetch","patch","evt_2","successName","errorName","interceptorArgs","successHandler","errorHandler","routePrefix","apiMode","cachingMode","deserializer","jsonParseReviver","withRoutePrefix","withApiMode","withDeserializer","withJsonParseReviver","withDefaultHeaders","withNoMimeTypeHeaders","configurator","WebApiClientConfig","defaultConfig","fullBaseUrl","cacheHeaders","queryStringParams","getDataFromJsonFile","fileResourcePromise","formatQueryStringParams","appendQueryString","queryStringFullOrPartial","reISO","reviver","getJsonParseReviver","momentProcessor","momentProcessorOrDefault","resp","getDeserializer","__param","paramIndex","__values","__read","ar","__spreadArray","pack","readUInt8","isArgumentsObject","isGeneratorFunction","whichTypedArray","BigIntSupported","SymbolSupported","ObjectToString","numberValue","stringValue","booleanValue","bigIntValue","symbolValue","checkBoxedPrimitive","prototypeValueOf","isMapToString","isSetToString","isWeakMapToString","isWeakSetToString","isArrayBufferToString","working","isDataViewToString","isDataView","isArrayBufferView","isView","isUint8Array","isUint8ClampedArray","isUint16Array","isUint32Array","isInt8Array","isInt16Array","isInt32Array","isFloat32Array","isFloat64Array","isBigInt64Array","isBigUint64Array","SharedArrayBufferCopy","isSharedArrayBufferToString","isSharedArrayBuffer","isNumberObject","isStringObject","isBooleanObject","isBigIntObject","isSymbolObject","isAsyncFunction","isMapIterator","isSetIterator","isGeneratorObject","isWebAssemblyCompiledModule","isBoxedPrimitive","isAnyArrayBuffer","getOwnPropertyDescriptors","formatRegExp","noDeprecation","throwDeprecation","traceDeprecation","debugs","debugEnvRegex","NODE_DEBUG","debugEnv","stylize","stylizeNoColor","colors","showHidden","_extend","customInspect","stylizeWithColor","formatValue","styleType","recurseTimes","formatPrimitive","visibleKeys","arrayToHash","formatError","braces","toUTCString","formatProperty","formatArray","reduceToSingleString","re","debuglog","pid","isNativeError","getHours","getMinutes","getSeconds","kCustomPromisifiedSymbol","callbackifyOnRejected","promiseResolve","promiseReject","callbackify","callbackified","maybeCb","rej","rng","crypto","msCrypto","getRandomValues","_rnds8","_rnds","_rng","_byteToHex","_hexToByte","buf","bth","_seedBytes","_nodeId","_clockseq","_lastMSecs","_lastNSecs","v4","rnds","uuid","v1","clockseq","msecs","nsecs","dt","tl","tmh","oct","possibleNames","super","_forwardMapElementEvents","_isolatedData","_cursor","_cursorStyleSheet","_lib","_map","_overlay","_markerClickListener","_markerMouseMoveListener","_pointerCaptureDownListener","_pointerCaptureUpListener","_clickEventListener","_mouseMoveEventListener","_readyCalled","_interactiveTargetSelector","_advancedMarkerElementTag","styling","renderedFeatureIds","_rafState","lib","forwardMapElementEvents","isolatedData","_coordinatePrecision","coordinatePrecision","_hasRenderedFeatures","getPointerTargetElement","shouldCapturePointer","circlePath","OverlayView","draw","_currentModeCallbacks","getMapEventElement","isPrimary","setPointerCapture","releasePointerCapture","hasPointerCapture","getDrawEventFromEvent","onClick","onMouseMove","getId","getProperty","getGeometry","forEachProperty","coordinates","markerUrl","clickable","scaledSize","markerWidth","markerHeight","Size","pointWidth","pointOutlineOpacity","pointOpacity","fillColor","pointColor","fillOpacity","strokeColor","pointOutlineColor","strokeWeight","pointOutlineWidth","strokeOpacity","rotation","lineStringOpacity","lineStringDash","lineStringColor","lineStringWidth","icons","fixedRotation","polygonOutlineOpacity","polygonOutlineColor","polygonOutlineWidth","polygonFillOpacity","polygonFillColor","getMap","getLngLatFromEvent","getNorthEast","getSouthWest","fullscreenElement","getDiv","Point","getProjection","fromContainerPixelToLatLng","project","fromLatLngToContainerPixel","unproject","setCursor","setDoubleClickToZoom","disableDoubleClickZoom","setDraggability","getStyle","setStyle","rafId","deletedIds","deletedSet","updatedById","createdById","getFeatureById","setGeometry","LineString","addGeoJson","features","clearLayers","onClear","getCoordinatePrecision","Commit","Provisional","Finish","SELECTED","MID_POINT","SELECTION_POINT_FEATURE_ID","SELECTION_POINT","MODE","CURRENTLY_DRAWING","EDITED","CLOSING_POINT","SNAPPING_POINT","COORDINATE_POINT","COORDINATE_POINT_FEATURE_ID","COORDINATE_POINT_IDS","PROVISIONAL_COORDINATE_COUNT","COMMITTED_COORDINATE_COUNT","Drawing","Select","Static","Render","rightClick","contextMenu","leftClick","onDragStart","onDrag","onDragEnd","_state","_styles","onStyleChange","registerBehaviors","pointerEvents","pointerDistance","undoRedoMaxStackSize","projection","isInitialUpdate","updateOptions","validation","modeName","allowPointerEvent","setDrawing","setStarted","setStopped","registerOnChange","onChange","onSelect","onDeselect","onFinish","validateFeature","performFeatureValidation","afterFeatureAdded","afterFeatureUpdated","idStrategy","isValidId","updateType","validateModeFeature","onKeyDown","onKeyUp","undo","clearHistory","undoSize","redoSize","redo","getHexColorStylingValue","getStylingValue","getNumericStylingValue","getUrlStylingValue","sin","atan2","sqrt","I","tan","atan","U","B","A","K","Y","X","createPoint","validateGeometryWithUpdateType","handleCreateFeature","createLineString","createPolygon","createGuidancePoint","coordinate","createGuidancePoints","additionalProperties","createFeatures","updatePoint","featureId","coordinateMutations","propertyMutations","handleMutateFeature","updatePolygon","updateLineString","deleteFeatureIfPresent","deleteFeaturesIfPresent","setDeselected","updateFeatureProperties","setSelected","getGeometryCopy","updateGuidancePoints","updateFeatureGeometries","createFeatureWithGeometry","mutateFeature","correctRightHandRule","buildFeatureWithGeometry","getPropertiesCopy","applyCoordinateMutations","isReplaceMutation","updateGeometry","updateProperty","tt","getGeometryType","coordinateAtIndexIsIdentical","newCoordinate","et","getCoordinates","getCoordinate","getProperties","hasFeature","getAllFeatureIdsWhere","copyAllWhere","st","containerX","containerY","ht","pixelDistance","clickBoundingBox","getSnappableCoordinateFirstClick","getSnappable","getSnappableCoordinate","featureCoordinateIndex","minDist","Pt","It","acos","St","Ft","asin","xt","S","Ot","Mt","minDistance","lineIndex","wt","Et","Dt","kt","mutateFeatureBehavior","readFeatureBehavior","_startEndPoints","updateOne","isLineStringClosingPoint","isClosing","isPolygonClosingPoints","isPreviousClosing","_t","readFeature","createOrUpdate","featureCoordinates","deleteOrphanedPoints","coordinatePointIds","deleteCoordinatePoints","createPoints","setFeatureCoordinatePoints","deletePointsByFeatureIds","deleteIfPresent","updateOneAtIndex","updateAllInPlace","bt","undoHistory","redoHistory","cloneCoordinatesFunction","maxStackSize","cloneRecursively","POSITIVE_INFINITY","setMaxStackSize","trimHistoryToMax","pushUndoEntry","pushRedoEntry","cloneCoordinates","cloneEntry","currentCoordinate","recordSnapshot","beginUndo","undoneEntry","previousEntry","takeRedo","commitRedo","Bt","At","zt","Gt","getNearestPointFeature","Vt","dragStart","dragEnd","jt","cursors","editable","editedFeatureId","pointSearch","cleanUp","isContextMenu","onRightClick","onLeftClick","styleFeature","editedPointWidth","editedPointColor","editedPointOutlineColor","editedPointOutlineWidth","Ht","Kt","Yt","Xt","currentId","keyEvents","mouseMove","showCoordinatePoints","lastMouseMoveEvent","snapping","snappedPointId","editedFeatureCoordinateIndex","editedSnapType","editedInsertIndex","editedPointId","coordinatePoints","lineSnapping","coordinateSnapping","closingPoints","undoRedo","updateSnappedCoordinate","snapCoordinate","pushHistorySnapshot","updateSnappedGuidancePointFromLastMouseMove","syncClosingPoints","toLine","toCoordinate","toCustom","getCurrentGeometrySnapshot","polygonFilter","outlineColor","outlineWidth","outlineOpacity","editedPoint","editedPointOpacity","editedPointOutlineOpacity","closingPoint","closingPointWidth","closingPointColor","closingPointOpacity","closingPointOutlineColor","closingPointOutlineWidth","closingPointOutlineOpacity","snappingPoint","snappingPointWidth","snappingPointColor","snappingPointOpacity","snappingPointOutlineColor","snappingPointOutlineWidth","snappingPointOutlineOpacity","coordinatePoint","coordinatePointWidth","coordinatePointColor","coordinatePointOpacity","coordinatePointOutlineColor","coordinatePointOutlineWidth","coordinatePointOutlineOpacity","ae","Ie","Se","Fe","xe","Oe","Te","minX","minY","maxX","maxY","Me","leaf","we","Ee","De","ke","be","Ne","Re","We","_maxEntries","_minEntries","toBBox","collides","_build","_splitRoot","_insert","_condense","compareMinX","compareMinY","_chooseSubtree","_split","_adjustParentBBoxes","_chooseSplitAxis","_chooseSplitIndex","_allDistMargin","Ue","tree","idToNode","nodeToId","maxEntries","setMaps","Le","Be","Ae","ze","spatialIndex","_onChange","createdAt","updatedAt","copyAll","hi","registered","li","GeoJSONStore","TerraDrawBaseDrawMode","TerraDrawBaseSelectMode","TerraDrawBaseAdapter","_nextKeyUpIsContextMenu","_lastPointerDownEventTarget","_ignoreMismatchedPointerEvents","_minPixelDragDistance","_minPixelDragDistanceDrawing","_minPixelDragDistanceSelecting","_lastDrawEvent","_heldKeys","_dragState","ignoreMismatchedPointerEvents","minPixelDragDistance","minPixelDragDistanceSelecting","minPixelDragDistanceDrawing","getButton","getMapElementXYPosition","heldKeys","getAdapterListeners","getDefaultStyling","SELECT_PROPERTIES","yi","Oi","Mi","wi","ki","modeLevel","sessionLevel","shouldPreferMode","onHistoryChange","shouldEmitHistoryChange","emitStackHistoryChange","undoStackSize","redoStackSize","hasSessionUndo","canUndo","hasSessionRedo","canRedo","activeStackForUndo","activeStackForRedo","emitHistoryPushForCompletedAction","_modes","_mode","_adapter","_enabled","_store","_eventListeners","_instanceSelectModes","sessionUndoRedoEnabled","keyboardShortcutsMatcher","drawingUndoRedo","sessionUndoRedo","undoRedoCoordinator","keyboardShortcuts","modes","static","deselect","unchanged","emitDrawingPushIfHistoryChangedFromLastSnapshot","getModeStyles","getMaxStackSize","getModeState","getModeHistorySizes","getDrawingHistorySizes","undoMode","redoMode","clearModeHistory","checkEnabled","handleUndoRedoKeyboardShortcut","isUndoKeyboardShortcut","isRedoKeyboardShortcut","emitPushIfHistoryChangedFromLastSnapshot","emitDrawingPushIfHistoryChanged","emitPushIfHistoryChanged","featuresAtLocation","ignoreSelectFeatures","ignoreCoordinatePoints","ignoreCurrentlyDrawing","ignoreClosingPoints","ignoreSnappingPoints","se","includePolygonsWithinPointerDistance","addClosestCoordinateInfoToProperties","closestCoordinateIndexToEvent","closestCoordinatePixelDistanceToEvent","closestCoordinateDistanceKmToEvent","getSelectModeOrThrow","getSelectMode","switchToSelectMode","selectMode","getMode","setMode","isGuidanceFeature","setModeStyles","updateModeOptions","getSnapshot","getSnapshotFeature","removeFeatures","deselectFeature","selectFeature","getFeatureId","checkIsReservedProperty","updateFeatureGeometry","transformFeatureGeometry","originX","originY","xScale","yScale","me","ce","angle","clearUndoRedoHistory","addFeatures","getHistorySizes","getFeaturesAtLngLat","getFeaturesAtPointerEvent"],"sourceRoot":""}